From mboxrd@z Thu Jan 1 00:00:00 1970 Message-ID: <4D9F11FE.7000209@domain.hid> Date: Fri, 8 Apr 2011 15:47:42 +0200 From: Jesper Christensen MIME-Version: 1.0 References: <4D9F0679.7080109@domain.hid> <1302268379.2101.35.camel@domain.hid> <4D9F0B86.30103@domain.hid> <1302269999.2101.45.camel@domain.hid> In-Reply-To: <1302269999.2101.45.camel@domain.hid> Content-Type: multipart/mixed; boundary="------------050004010800000100010608" Subject: Re: [Xenomai-core] kernel threads crash List-Id: Xenomai life and development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Philippe Gerum Cc: xenomai@xenomai.org --------------050004010800000100010608 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit Just in case ;) /Jesper On 2011-04-08 15:39, Philippe Gerum wrote: > On Fri, 2011-04-08 at 15:20 +0200, Jesper Christensen wrote: > >> Thanks i'll give 2.5.6 a shot. >> >> Also it has come to my attention that there is some source files >> (arch/powerpc/platforms/85xx/cpci6200.c, >> arch/powerpc/platforms/85xx/cpci6200.h, >> arch/powerpc/platforms/85xx/cpci6200_timer.c) that are probably not >> covered by the adeos patch. Am i correct in assuming these need some >> work to support i-pipe? >> >> > I can't tell since I have no access to them, this is probably not a > mainline port. > > In any case, if any of those files implements the support for the > programmable interrupt controller, hw timer, gpios and/or any form of > cascaded interrupt handling, this is correct: they should be made I-pipe > aware. > > >> /Jesper >> >> >> On 2011-04-08 15:12, Philippe Gerum wrote: >> >>> On Fri, 2011-04-08 at 14:58 +0200, Jesper Christensen wrote: >>> >>> >>>> Hi >>>> >>>> I'm trying to implement some gateway functionality in the kernel on a >>>> emerson CPCI6200 board, but have run into some strange errors. The >>>> kernel module is made up of two threads that run every 1 ms. I have also >>>> made use of the rtpc dispatcher in rtnet to dispatch control messages >>>> from a netlink socket to the RT part of my kernel module. >>>> >>>> The problem is that when loaded the threads get suspended due to exceptions: >>>> >>>> Xenomai: suspending kernel thread b929cbc0 ('tt_upgw_0') at 0xb929cbc0 >>>> after exception #1792 >>>> >>>> or >>>> >>>> Xenomai: suspending kernel thread b929cbc0 ('tt_upgw_0') at 0x0 after >>>> exception #1025 >>>> >>>> or >>>> >>>> Xenomai: suspending kernel thread b911f518 ('rtnet-rtpc') at 0xb911f940 >>>> after exception #1792 >>>> >>>> >>>> I have ported the "gianfar" driver from linux to rtnet. >>>> >>>> The versions and hardware are listed below. The errors are most likely >>>> due to faulty software on my part, but i would like to ask if there are >>>> any known issues with the versions or hardware i'm using. I would also >>>> like to ask if there are any ways of further debugging the errors as i >>>> am not getting very far with the above messages. >>>> >>>> >>> A severe bug at kthread init was fixed in the 2.5.5.2 - 2.5.6 timeframe, >>> which would cause exactly the kind of weird behavior you are seeing >>> right now. The bug triggered random code execution due to stack memory >>> pollution at init on powerpc for Xenomai kthreads: >>> http://git.xenomai.org/?p=xenomai-rpm.git;a=commit;h=90699565cbce41f2cec193d57857bb5817efc19a >>> http://git.xenomai.org/?p=xenomai-rpm.git;a=commit;h=da20c20d4b4d892d40c657ad1d32ddb6d0ceb47c >>> http://git.xenomai.org/?p=xenomai-rpm.git;a=commit;h=a5886b354dc18f054b187b58cfbacfb60bccaf47 >>> >>> You need at the very least those three patches (from the top of my >>> head), but it would be much better to upgrade to 2.5.6. >>> >>> >>> >>>> >>>> System info: >>>> >>>> Linux kernel: 2.6.29.6 >>>> i-pipe version: 2.7-04 >>>> processor: powerpc mpc8572 >>>> xenomai version: 2.5.3 >>>> rtnet version: 0.9.12 >>>> >>>> >>>> >>> >>> >> > --------------050004010800000100010608 Content-Type: text/plain; name="patch-2.6.29.6-emerson.rm02" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="patch-2.6.29.6-emerson.rm02" ZGlmZiAtdSAtLW5ldy1maWxlIC0tcmVjdXJzaXZlIGxpbnV4LTIuNi4yOS42Lm9yaWcvYXJj aC9wb3dlcnBjL2Jvb3QvZHRzL2NwY2k2MjAwLmR0cyBsaW51eC0yLjYuMjkuNi5tb2QvYXJj aC9wb3dlcnBjL2Jvb3QvZHRzL2NwY2k2MjAwLmR0cwotLS0gbGludXgtMi42LjI5LjYub3Jp Zy9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvY3BjaTYyMDAuZHRzCTE5NjktMTItMzEgMTc6MDA6 MDAuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYuMjkuNi5tb2QvYXJjaC9wb3dlcnBj L2Jvb3QvZHRzL2NwY2k2MjAwLmR0cwkyMDA5LTA4LTA2IDE2OjUwOjQ4LjAwMDAwMDAwMCAt MDcwMApAQCAtMCwwICsxLDQ4NiBAQAorLyoKKyAqIENQQ0k2MjAwIERldmljZSBUcmVlIFNv dXJjZQorICoKKyAqIEF1dGhvcjsgYWppdC5wcmVtQGVtZXJzb24uY29tCisgKgorICogQ29w eXJpZ2h0IDIwMDggRW1lcnNvbiBOZXR3b3JrIFBvd2VyIEVtYmVkZGVkIENvbXB1dGluZyBJ bmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9m ICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUK KyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhl ICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K KyAqLworCisvZHRzLXYxLzsKKworLyB7CisJbW9kZWwgPSAiQ1BDSTYyMDAiOworCWNvbXBh dGlibGUgPSAiQ1BDSTYyMDAiOworCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCSNzaXplLWNl bGxzID0gPDE+OworCisgICAgICAgIGFsaWFzZXMgeworICAgICAgICAgICAgICAgIGV0aGVy bmV0MCA9ICZlbmV0MDsKKyAgICAgICAgICAgICAgICBldGhlcm5ldDEgPSAmZW5ldDE7Cisg ICAgICAgICAgICAgICAgZXRoZXJuZXQyID0gJmVuZXQyOworICAgICAgICAgICAgICAgIGV0 aGVybmV0MyA9ICZlbmV0MzsKKyAgICAgICAgICAgICAgICBzZXJpYWwwID0gJnNlcmlhbDA7 CisgICAgICAgICAgICAgICAgc2VyaWFsMSA9ICZzZXJpYWwxOworICAgICAgICAgICAgICAg IHBjaTEgPSAmcGNpMTsKKyAgICAgICAgICAgICAgICBwY2kyID0gJnBjaTI7CisgICAgICAg IH07CisKKworCWNwdXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2Vs bHMgPSA8MD47CisKKwkJUG93ZXJQQyw4NTcyQDAgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1 IjsKKwkJCXJlZyA9IDwwPjsKKwkJCWQtY2FjaGUtbGluZS1zaXplID0gPDMyPjsJLy8gMzIg Ynl0ZXMKKwkJCWktY2FjaGUtbGluZS1zaXplID0gPDMyPjsJLy8gMzIgYnl0ZXMKKwkJCWQt Y2FjaGUtc2l6ZSA9IDwweDgwMDA+OwkJLy8gTDE9MzJLCisJCQlpLWNhY2hlLXNpemUgPSA8 MHg4MDAwPjsJCS8vIEwxPTMySworCQkJdGltZWJhc2UtZnJlcXVlbmN5ID0gPDA+OwkvLyBm cm9tIGJvb3R3cmFwcGVyCisJCQlidXMtZnJlcXVlbmN5ID0gPDA+OwkJLy8gZnJvbSBidwor CQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwkJLy8gZnJvbSBib290d3JhcHBlcgorCQkJbmV4 dC1sZXZlbC1jYWNoZSA9IDwmTDI+OworCQl9OworCQlQb3dlclBDLDg1NzJAMSB7CisJCQlk ZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJcmVnID0gPDE+OworCQkJZC1jYWNoZS1saW5lLXNp emUgPSA8MzI+OwkvLyAzMiBieXRlcworCQkJaS1jYWNoZS1saW5lLXNpemUgPSA8MzI+Owkv LyAzMiBieXRlcworCQkJZC1jYWNoZS1zaXplID0gPDB4ODAwMD47CQkvLyBMMT0zMksKKwkJ CWktY2FjaGUtc2l6ZSA9IDwweDgwMDA+OwkJLy8gTDE9MzJLCisJCQl0aW1lYmFzZS1mcmVx dWVuY3kgPSA8MD47CS8vIGZyb20gYm9vdHdyYXBwZXIKKwkJCWJ1cy1mcmVxdWVuY3kgPSA8 MD47CQkvLyBmcm9tIGJ3CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CQkvLyBmcm9tIGJv b3R3cmFwcGVyCisJCQluZXh0LWxldmVsLWNhY2hlID0gPCZMMj47CisJCX07CisJfTsKKwor CW1lbW9yeSB7CisJCWRldmljZV90eXBlID0gIm1lbW9yeSI7CisJCXJlZyA9IDwweDAwMDAw MDAwIDB4ODAwMDAwMDA+OwkvLyAyIEdCIChmaXhlZCBieSBib290d3JhcHBlcikKKwl9Owor CisJc29jODU3MkBmMTAwMDAwMCB7CisJCWRldmljZV90eXBlID0gInNvYyI7CisJCWNvbXBh dGlibGUgPSAic2ltcGxlLWJ1cyI7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6 ZS1jZWxscyA9IDwxPjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJcmFuZ2VzID0g PDB4MCAweGYxMDAwMDAwIDB4MDAxMDAwMDA+OworCQlyZWcgPSA8MHhmMTAwMDAwMCAweDAw MTAwMDAwPjsJCisJCWJ1cy1mcmVxdWVuY3kgPSA8MD47CQorCisJCW1lbW9yeS1jb250cm9s bGVyQDIwMDAgeworICAgICAgICAgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9ICJmc2ws ODU3Mi1tZW1vcnktY29udHJvbGxlciI7CisJCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnktY29u dHJvbGxlciI7CisJCQlyZWcgPSA8MHgyMDAwIDB4MTAwMD47CisJCQl2aXJ0dWFsLXJlZyA9 IDwweGYxMDAyMDAwPjsKKwkJCWludGVycnVwdHMgPSA8MHgxMiAyPjsKKwkJCWludGVycnVw dC1wYXJlbnQgPSA8JnNvYzg1NzJfcGljPjsKKwkJfTsKKworICAgICAgICAgICAgICAgIG1l bW9yeS1jb250cm9sbGVyQDYwMDAgeworICAgICAgICAgICAgICAgICAgICAgICAgY29tcGF0 aWJsZSA9ICJmc2wsbXBjODU3Mi1tZW1vcnktY29udHJvbGxlciI7CisJCQlkZXZpY2VfdHlw ZSA9ICJtZW1vcnktY29udHJvbGxlciI7CisgICAgICAgICAgICAgICAgICAgICAgICByZWcg PSA8MHg2MDAwIDB4MTAwMD47CisJCQl2aXJ0dWFsLXJlZyA9IDwweGYxMDA2MDAwPjsKKwkJ CWludGVycnVwdHMgPSA8MHgxMiAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JnNvYzg1 NzJfcGljPjsKKyAgICAgICAgICAgICAgICB9OworCisJCUwyOiBsMl9jYWNoZS1jb250cm9s bGVyQDIwMDAwIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSAiZnNs LDg1NzItbDItY2FjaGUtY29udHJvbGxlciI7CisJCQlkZXZpY2VfdHlwZSA9ICJsMl9jYWNo ZS1jb250cm9sbGVyIjsKKwkJCXJlZyA9IDwweDIwMDAwIDB4MTAwMD47CisJCQl2aXJ0dWFs LXJlZyA9IDwweGYxMDIwMDAwPjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlLWxp bmUtc2l6ZSA9IDwzMj47IC8vIDMyIGJ5dGVzCisgICAgICAgICAgICAgICAgICAgICAgICBj YWNoZS1zaXplID0gPDB4MTAwMDAwPjsgICAvLyBMMiwgMU1CCisJCQlpbnRlcnJ1cHRzID0g PDB4MTAgMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZzb2M4NTcyX3BpYz47CisJCX07 CisKKwkJaTJjQDMwMDAgeworCQkJY2VsbC1pbmRleCA9IDwwPjsKKwkJCWNvbXBhdGlibGUg PSAiZnNsLWkyYyI7CisJCQlkZXZpY2VfdHlwZSA9ICJpMmMiOworCQkJI2FkZHJlc3MtY2Vs bHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCXJlZyA9IDwweDMwMDAgMHgx MDA+OworCQkJdmlydHVhbC1yZWcgPSA8MHhmMTAwMzAwMD47CisJCQlkZnNycjsKKworICAg ICAgICAgICAgICAgICAgICAgICAgcnRjQDY4IHsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZGV2aWNlX3R5cGUgPSAicnRjIjsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29tcGF0aWJsZSA9ICJtNDF0ODIiOworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICByZWcgPSA8MHg2OD47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGludGVycnVwdHMgPSA8MHg5IDE+OworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnRlcnJ1cHQtcGFyZW50ID0gPCZzb2M4NTcyX3BpYz47CisgICAgICAgICAgICAg ICAgICAgICAgICB9OworCQl9OworCQorICAgICAgICAgICAgICAgIGkyY0AzMTAwIHsKKyAg ICAgICAgICAgICAgICAgICAgICAgIGNlbGwtaW5kZXggPSA8MT47CisgICAgICAgICAgICAg ICAgICAgICAgICBjb21wYXRpYmxlID0gImZzbC1pMmMtaXBtaSI7CisgICAgICAgICAgICAg ICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCWRldmljZV90eXBlID0gImky YyI7CisgICAgICAgICAgICAgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IDwwPjsKKyAgICAg ICAgICAgICAgICAgICAgICAgIHJlZyA9IDwweDMxMDAgMHgxMDA+OworCQkJdmlydHVhbC1y ZWcgPSA8MHhmMTAwMzEwMD47CisgICAgICAgICAgICAgICAgICAgICAgICBkZnNycjsKKyAg ICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgZG1hQGMzMDAgeworICAgICAg ICAgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSA8MT47CisgICAgICAgICAgICAg ICAgICAgICAgICAjc2l6ZS1jZWxscyA9IDwxPjsKKyAgICAgICAgICAgICAgICAgICAgICAg IGNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NzItZG1hIiwgImZzbCxlbG9wbHVzLWRtYSI7Cisg ICAgICAgICAgICAgICAgICAgICAgICByZWcgPSA8MHhjMzAwIDB4ND47CisgICAgICAgICAg ICAgICAgICAgICAgICByYW5nZXMgPSA8MHgwIDB4YzEwMCAweDIwMD47CisgICAgICAgICAg ICAgICAgICAgICAgICBjZWxsLWluZGV4ID0gPDE+OworICAgICAgICAgICAgICAgICAgICAg ICAgZG1hLWNoYW5uZWxAMCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bXBhdGlibGUgPSAiZnNsLG1wYzg1NzItZG1hLWNoYW5uZWwiLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZzbCxlbG9wbHVzLWRtYS1jaGFu bmVsIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnID0gPDB4MCAweDgw PjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC1pbmRleCA9IDwwPjsK KwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZzb2M4NTcyX3BpYz47CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludGVycnVwdHMgPSA8NzYgMj47CisgICAgICAgICAgICAg ICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgZG1hLWNoYW5uZWxAODAg eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gImZzbCxt cGM4NTcyLWRtYS1jaGFubmVsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHJlZyA9IDwweDgwIDB4ODA+OworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjZWxsLWluZGV4ID0gPDE+OworCQkJCWludGVycnVwdC1w YXJlbnQgPSA8JnNvYzg1NzJfcGljPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW50ZXJydXB0cyA9IDw3NyAyPjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH07Cisg ICAgICAgICAgICAgICAgICAgICAgICBkbWEtY2hhbm5lbEAxMDAgeworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gImZzbCxtcGM4NTcyLWRtYS1jaGFu bmVsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHJlZyA9IDwweDEwMCAweDgwPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY2VsbC1pbmRleCA9IDwyPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZzb2M4 NTcyX3BpYz47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdHMg PSA8NzggMj47CisgICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAg ICAgICAgICAgZG1hLWNoYW5uZWxAMTgwIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29tcGF0aWJsZSA9ICJmc2wsbXBjODU3Mi1kbWEtY2hhbm5lbCIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZnNsLGVsb3BsdXMt ZG1hLWNoYW5uZWwiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWcgPSA8 MHgxODAgMHg4MD47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwtaW5k ZXggPSA8Mz47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmc29jODU3Ml9waWM+OworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHRzID0gPDc5IDI+OworICAg ICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB9OworCisgICAgICAg ICAgICAgICAgZG1hQDIxMzAwIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICNhZGRyZXNz LWNlbGxzID0gPDE+OworICAgICAgICAgICAgICAgICAgICAgICAgI3NpemUtY2VsbHMgPSA8 MT47CisgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gImZzbCxtcGM4NTcy LWRtYSIsICJmc2wsZWxvcGx1cy1kbWEiOworICAgICAgICAgICAgICAgICAgICAgICAgcmVn ID0gPDB4MjEzMDAgMHg0PjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlcyA9IDww eDAgMHgyMTEwMCAweDIwMD47CisgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLWluZGV4 ID0gPDA+OworICAgICAgICAgICAgICAgICAgICAgICAgZG1hLWNoYW5uZWxAMCB7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NzIt ZG1hLWNoYW5uZWwiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcmVnID0gPDB4MCAweDgwPjsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY2VsbC1pbmRleCA9IDwwPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0g PCZzb2M4NTcyX3BpYz47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVy cnVwdHMgPSA8MjAgMj47CisgICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAg ICAgICAgICAgICAgICAgZG1hLWNoYW5uZWxAODAgeworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb21wYXRpYmxlID0gImZzbCxtcGM4NTcyLWRtYS1jaGFubmVsIiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmc2wsZWxv cGx1cy1kbWEtY2hhbm5lbCI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl ZyA9IDwweDgwIDB4ODA+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxs LWluZGV4ID0gPDE+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JnNvYzg1NzJfcGljPjsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0cyA9IDwyMSAyPjsK KyAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgICAgICBk bWEtY2hhbm5lbEAxMDAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21w YXRpYmxlID0gImZzbCxtcGM4NTcyLWRtYS1jaGFubmVsIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5l bCI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZyA9IDwweDEwMCAweDgw PjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC1pbmRleCA9IDwyPjsK KwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZzb2M4NTcyX3BpYz47CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludGVycnVwdHMgPSA8MjIgMj47CisgICAgICAgICAgICAg ICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgZG1hLWNoYW5uZWxAMTgw IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9ICJmc2ws bXBjODU3Mi1kbWEtY2hhbm5lbCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICByZWcgPSA8MHgxODAgMHg4MD47CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNlbGwtaW5kZXggPSA8Mz47CisJCQkJaW50ZXJydXB0 LXBhcmVudCA9IDwmc29jODU3Ml9waWM+OworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnRlcnJ1cHRzID0gPDIzIDI+OworICAgICAgICAgICAgICAgICAgICAgICAgfTsK KyAgICAgICAgICAgICAgICB9OworCisJCW1kaW9AMjQ1MjAgeworCQkJY29tcGF0aWJsZSA9 ICJmc2wsZ2lhbmZhci1tZGlvIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwtaW5k ZXggPSA8MD47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0g PDA+OworCQkJZGV2aWNlX3R5cGUgPSAibWRpbyI7CisJCQlyZWcgPSA8MHgyNDUyMCAweDIw PjsKKworCQkJcGh5MF8xOiBldGhlcm5ldC1waHlAMSB7CisJCQkJY29tcGF0aWJsZSA9ICJi cm9hZGNvbSxiY201NDgyIjsKKwkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwor CQkJCWludGVycnVwdC1wYXJlbnQgPSA8JnNvYzg1NzJfcGljPjsKKwkJCQlpbnRlcnJ1cHRz ID0gPDB4YSAxPjsKKwkJCQlyZWcgPSA8MT47CisJCQl9OworCisJCQlwaHkwXzI6IGV0aGVy bmV0LXBoeUAyIHsKKwkJCQljb21wYXRpYmxlID0gImJyb2FkY29tLGJjbTU0ODIiOworCQkJ CWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJaW50ZXJydXB0LXBhcmVudCA9 IDwmc29jODU3Ml9waWM+OworCQkJCWludGVycnVwdHMgPSA8MHhhIDE+OworCQkJCXJlZyA9 IDwyPjsKKwkJCX07CisJCX07CisKKwkJbWRpb0AyNjUyMCB7CisJCQljb21wYXRpYmxlID0g ImZzbCxnaWFuZmFyLW1kaW8iOworICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC1pbmRl eCA9IDwxPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8 MD47CisJCQlkZXZpY2VfdHlwZSA9ICJtZGlvIjsKKwkJCXJlZyA9IDwweDI2NTIwIDB4MjA+ OworCisJCQlwaHkxXzM6IGV0aGVybmV0LXBoeUAzIHsKKwkJCQljb21wYXRpYmxlID0gImJy b2FkY29tLGJjbTU0ODIiOworCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJ CQkJaW50ZXJydXB0LXBhcmVudCA9IDwmc29jODU3Ml9waWM+OworCQkJCWludGVycnVwdHMg PSA8MHhhIDE+OworCQkJCXJlZyA9IDwzPjsKKwkJCX07CisKKwkJCXBoeTFfNDogZXRoZXJu ZXQtcGh5QDQgeworCQkJCWNvbXBhdGlibGUgPSAiYnJvYWRjb20sYmNtNTQ4MiI7CisJCQkJ ZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0g PCZzb2M4NTcyX3BpYz47CisJCQkJaW50ZXJydXB0cyA9IDwweGEgMT47CisJCQkJcmVnID0g PDQ+OworCQkJfTsKKwkJfTsKKworCQllbmV0MDogZXRoZXJuZXRAMjQwMDAgeyAvKiBNQUMg YWRkcmVzc2VzIHNldCBieSBib290d3JhcHBlciAqLworCQkJY2VsbC1pbmRleCA9IDwwPjsK KwkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CisJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3Jr IjsKKwkJCW1vZGVsID0gImVUU0VDIjsKKwkJCXJlZyA9IDwweDI0MDAwIDB4MTAwMD47CisJ CQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKKwkJCWludGVy cnVwdHMgPSA8MHgxZCAyIDB4MWUgMiAweDIyIDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9 IDwmc29jODU3Ml9waWM+OworCQkJcGh5LWhhbmRsZSA9IDwmcGh5MF8xPjsKKyAgICAgICAg ICAgICAgICAgICAgICAgIHBoeS1jb25uZWN0aW9uLXR5cGUgPSAicmdtaWktaWQiOworCQl9 OworCisJCWVuZXQxOiBldGhlcm5ldEAyNTAwMCB7CisJCQljZWxsLWluZGV4ID0gPDE+Owor CQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKKwkJCWRldmljZV90eXBlID0gIm5ldHdvcmsi OworCQkJbW9kZWwgPSAiZVRTRUMiOworCQkJcmVnID0gPDB4MjUwMDAgMHgxMDAwPjsKKwkJ CWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOworCQkJaW50ZXJy dXB0cyA9IDwweDIzIDIgMHgyNCAyIDB4MjggMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0g PCZzb2M4NTcyX3BpYz47CisJCQlwaHktaGFuZGxlID0gPCZwaHkwXzI+OworICAgICAgICAg ICAgICAgICAgICAgICAgcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJyZ21paS1pZCI7CisJCX07 CisKKwkJZW5ldDI6IGV0aGVybmV0QDI2MDAwIHsKKwkJCWNlbGwtaW5kZXggPSA8Mj47CisJ CQljb21wYXRpYmxlID0gImdpYW5mYXIiOworCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7 CisJCQltb2RlbCA9ICJlVFNFQyI7CisJCQlyZWcgPSA8MHgyNjAwMCAweDEwMDA+OworCQkJ bG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CisgICAgICAgICAg ICAgICAgICAgICAgICBpbnRlcnJ1cHRzID0gPDB4MWYgMiAweDIwIDIgMHgyMSAyPjsKKwkJ CWludGVycnVwdC1wYXJlbnQgPSA8JnNvYzg1NzJfcGljPjsKKyAgICAgICAgICAgICAgICAg ICAgICAgIHBoeS1oYW5kbGUgPSA8JnBoeTFfMz47CisgICAgICAgICAgICAgICAgICAgICAg ICBwaHktY29ubmVjdGlvbi10eXBlID0gInJnbWlpLWlkIjsKKyAgICAgICAgICAgICAgICB9 OworCisgICAgICAgICAgICAgICAgZW5ldDM6IGV0aGVybmV0QDI3MDAwIHsKKyAgICAgICAg ICAgICAgICAgICAgICAgIGNlbGwtaW5kZXggPSA8Mz47CisgICAgICAgICAgICAgICAgICAg ICAgICBjb21wYXRpYmxlID0gImdpYW5mYXIiOworICAgICAgICAgICAgICAgICAgICAgICAg ZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CisgICAgICAgICAgICAgICAgICAgICAgICBtb2Rl bCA9ICJlVFNFQyI7CisgICAgICAgICAgICAgICAgICAgICAgICByZWcgPSA8MHgyNzAwMCAw eDEwMDA+OworICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWwtbWFjLWFkZHJlc3MgPSBb IDAwIDAwIDAwIDAwIDAwIDAwIF07CisgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1 cHRzID0gPDB4MjUgMiAweDI2IDIgMHgyNyAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8 JnNvYzg1NzJfcGljPjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBoeS1oYW5kbGUgPSA8 JnBoeTFfND47CisgICAgICAgICAgICAgICAgICAgICAgICBwaHktY29ubmVjdGlvbi10eXBl ID0gInJnbWlpLWlkIjsKKyAgICAgICAgICAgICAgICB9OworCisJCXNlcmlhbDA6IHNlcmlh bEA0NTAwIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwtaW5kZXggPSA8MD47CisJ CQljb21wYXRpYmxlID0gIm5zMTY1NTAiOworCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsK KwkJCXJlZyA9IDwweDQ1MDAgMHgxMDA+OyAJCisJCQl2aXJ0dWFsLXJlZyA9IDwweGYxMDA0 NTAwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsgCQorCQkJY3VycmVudC1zcGVlZCA9 IDw5NjAwPjsgIAorCQkJaW50ZXJydXB0cyA9IDwweDJhIDI+OworCQkJaW50ZXJydXB0LXBh cmVudCA9IDwmc29jODU3Ml9waWM+OworCQl9OworCisJCXNlcmlhbDE6IHNlcmlhbEA0NjAw IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwtaW5kZXggPSA8MT47CisJCQljb21w YXRpYmxlID0gIm5zMTY1NTAiOworCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKKwkJCXJl ZyA9IDwweDQ2MDAgMHgxMDA+OyAJCisJCQl2aXJ0dWFsLXJlZyA9IDwweGYxMDA0NTAwPjsK KwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsgCQorCQkJY3VycmVudC1zcGVlZCA9IDw5NjAw PjsgIAorCQkJaW50ZXJydXB0cyA9IDwweDJhIDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9 IDwmc29jODU3Ml9waWM+OworCQl9OworCisgICAgICAgICAgICAgICAgZ2xvYmFsLXV0aWxp dGllc0BlMDAwMCB7ICAgICAgICAvL2dsb2JhbCB1dGlsaXRpZXMgcmVnCisgICAgICAgICAg ICAgICAgICAgICAgICBjb21wYXRpYmxlID0gImZzbCxtcGM4NTcyLWd1dHMiOworICAgICAg ICAgICAgICAgICAgICAgICAgcmVnID0gPDB4ZTAwMDAgMHgxMDAwPjsKKyAgICAgICAgICAg ICAgICAgICAgICAgIGZzbCxoYXMtcnN0Y3I7CisgICAgICAgICAgICAgICAgfTsKKworICAg ICAgICAgICAgICAgIGNyeXB0b0AzMDAwMCB7CisgICAgICAgICAgICAgICAgICAgICAgICBj b21wYXRpYmxlID0gImZzbCxzZWMzLjAiLCAiZnNsLHNlYzIuNCIsICJmc2wsc2VjMi4yIiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZnNsLHNlYzIuMSIsICJm c2wsc2VjMi4wIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZyA9IDwweDMwMDAwIDB4 MTAwMDA+OworICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0cyA9IDw0NSAyIDU4 IDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmc29jODU3Ml9waWM+OworICAgICAgICAg ICAgICAgICAgICAgICAgZnNsLG51bS1jaGFubmVscyA9IDw0PjsKKyAgICAgICAgICAgICAg ICAgICAgICAgIGZzbCxjaGFubmVsLWZpZm8tbGVuID0gPDI0PjsKKyAgICAgICAgICAgICAg ICAgICAgICAgIGZzbCxleGVjLXVuaXRzLW1hc2sgPSA8MHg5ZmU+OworICAgICAgICAgICAg ICAgICAgICAgICAgZnNsLGRlc2NyaXB0b3ItdHlwZXMtbWFzayA9IDwweDNhYjBlYmY+Owor ICAgICAgICAgICAgICAgIH07CisKKwkJc29jODU3Ml9waWM6IHBpY0A0MDAwMCB7CisJCQlj b21wYXRpYmxlID0gImNocnAsb3Blbi1waWMiOworCQkJZGV2aWNlX3R5cGUgPSAib3Blbi1w aWMiOworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCQkJaW50ZXJydXB0LWNvbnRyb2xs ZXI7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8 Mj47CisJCQlyZWcgPSA8MHg0MDAwMCAweDQwMDAwPjsKKwkJCWJpZy1lbmRpYW47CisJCX07 CisJfTsKKworICAgICAgICBwY2kxOiBwY2lAZjEwMDkwMDAgeworCQljZWxsLWluZGV4ID0g PDA+OworCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTQ4LXBjaWUiOworCQlkZXZpY2VfdHlw ZSA9ICJwY2kiOworCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9 IDwyPjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCXJlZyA9IDwweGYxMDA5MDAwIDB4 MTAwMD47CisJCWJ1cy1yYW5nZSA9IDwweDAgMHhmZj47CisgICAgICAgICAgICAgICAgcmFu Z2VzID0gPDB4MDIwMDAwMDAgMHgwIDB4ZjA0MDAwMDAgMHhmMDQwMDAwMCAweDAgMHgwMDQw MDAwMAorICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwIDB4MCAweDAwMDAw MDAwIDB4ZjAwMDAwMDAgMHgwIDB4MDA0MDAwMDA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8 MD47CisJCWludGVycnVwdHMgPSA8MHgxOSAyPjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwm c29jODU3Ml9waWM+OworCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmODAwIDB4MCAweDAg MHg3PjsKKyAgICAgICAgICAgICAgICBpbnRlcnJ1cHQtbWFwID0gPAorICAgICAgICAgICAg ICAgICAgICAgICAgLyogSURTRUwgMHgwICovCisgICAgICAgICAgICAgICAgICAgICAgICAw eDAwMDAgMCAwIDEgJnNvYzg1NzJfcGljIDQgMQorICAgICAgICAgICAgICAgICAgICAgICAg MHgwMDAwIDAgMCAyICZzb2M4NTcyX3BpYyA1IDEKKyAgICAgICAgICAgICAgICAgICAgICAg IDB4MDAwMCAwIDAgMyAmc29jODU3Ml9waWMgNiAxCisgICAgICAgICAgICAgICAgICAgICAg ICAweDAwMDAgMCAwIDQgJnNvYzg1NzJfcGljIDcgMT47CisJCXBjaWVAMCB7CisgICAgICAg ICAgICAgICAgICAgICAgICByZWcgPSA8MCAwIDAgMCAwPjsKKyAgICAgICAgICAgICAgICAg ICAgICAgICNzaXplLWNlbGxzID0gPDI+OworICAgICAgICAgICAgICAgICAgICAgICAgI2Fk ZHJlc3MtY2VsbHMgPSA8Mz47CisgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2VfdHlw ZSA9ICJwY2kiOworICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2VzID0gPDB4MDIwMDAw MDAgMHgwIDB4ZjA0MDAwMDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw eDAyMDAwMDAwIDB4MCAweGYwNDAwMDAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgMHgwIDB4MDA0MDAwMDAKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDB4MDEwMDAwMDAgMHgwIDB4MDAwMDAwMDAKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAweDAxMDAwMDAwIDB4MCAweDAwMDAwMDAwCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgMHgwIDB4MDA0MDAwMDA+OworICAgICAgICAgICAgICAgIH07 CisJfTsKKworICAgICAgICBwY2kyOiBwY2lAZjEwMGEwMDAgeworICAgICAgICAgICAgICAg IGNlbGwtaW5kZXggPSA8Mj47CisgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9ICJmc2ws bXBjODU0OC1wY2llIjsKKyAgICAgICAgICAgICAgICBkZXZpY2VfdHlwZSA9ICJwY2kiOwor ICAgICAgICAgICAgICAgICNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisgICAgICAgICAgICAg ICAgI3NpemUtY2VsbHMgPSA8Mj47CisgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMg PSA8Mz47CisgICAgICAgICAgICAgICAgcmVnID0gPDB4ZjEwMGEwMDAgMHgxMDAwPjsKKyAg ICAgICAgICAgICAgICBidXMtcmFuZ2UgPSA8MHgwIDB4ZmY+OworCQlyYW5nZXMgPSA8MHgw MjAwMDAwMCAwIDB4ZTAwMDAwMDAgMHhlMDAwMDAwMCAweDAgMHgwODAwMDAwMAorCQkJICAw eDQyMDAwMDAwIDAgMHhlODAwMDAwMCAweGU4MDAwMDAwIDB4MCAweDA4MDAwMDAwCisJCQkg IDB4MDEwMDAwMDAgMCAweDAwMDAwMDAwIDB4ZjA4MDAwMDAgMHgwIDB4MDA4MDAwMDA+Owor ICAgICAgICAgICAgICAgIGNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKwkJaW50ZXJydXB0LXBh cmVudCA9IDwmc29jODU3Ml9waWM+OworICAgICAgICAgICAgICAgIGludGVycnVwdHMgPSA8 MHgxYSAyPjsKKyAgICAgICAgICAgICAgICBpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmODAw IDB4MCAweDAgMHg3PjsKKyAgICAgICAgICAgICAgICBpbnRlcnJ1cHQtbWFwID0gPAorICAg ICAgICAgICAgICAgICAgICAgICAgLyogSURTRUwgMHgwICovCisgICAgICAgICAgICAgICAg ICAgICAgICAweDAwMDAgMCAwIDEgJnNvYzg1NzJfcGljIDAgMQorICAgICAgICAgICAgICAg ICAgICAgICAgMHgwMDAwIDAgMCAyICZzb2M4NTcyX3BpYyAxIDEKKyAgICAgICAgICAgICAg ICAgICAgICAgIDB4MDAwMCAwIDAgMyAmc29jODU3Ml9waWMgMiAxCisgICAgICAgICAgICAg ICAgICAgICAgICAweDAwMDAgMCAwIDQgJnNvYzg1NzJfcGljIDMgMT47CisJCXBjaWVAMCB7 CisgICAgICAgICAgICAgICAgICAgICAgICByZWcgPSA8MCAwIDAgMCAwPjsKKyAgICAgICAg ICAgICAgICAgICAgICAgICNzaXplLWNlbGxzID0gPDI+OworICAgICAgICAgICAgICAgICAg ICAgICAgI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisgICAgICAgICAgICAgICAgICAgICAgICBk ZXZpY2VfdHlwZSA9ICJwY2kiOworICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2VzID0g PDB4MDIwMDAwMDAgMHgwIDB4ZTAwMDAwMDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAweDAyMDAwMDAwIDB4MCAweGUwMDAwMDAwCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgMHgwIDB4MDgwMDAwMDAKKworCQkJCSAgMHg0MjAwMDAwMCAweDAg MHhlODAwMDAwMAorCQkJCSAgMHg0MjAwMDAwMCAweDAgMHhlODAwMDAwMAorCQkJCSAgMHgw IDB4MDgwMDAwMDAKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEw MDAwMDAgMHgwIDB4MDAwMDAwMDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAweDAxMDAwMDAwIDB4MCAweDAwMDAwMDAwCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgMHgwIDB4MDA4MDAwMDA+OworICAgICAgICAgICAgICAgIH07CisJfTsKKwor CWJvYXJkX3RpbWVyc0BmMjAyMDAwMCB7CisJCWRldmljZV90eXBlID0gImJvYXJkX3RpbWVy cyI7CisJCXJlZyA9IDwweGYyMDIwMDAwIDB4NGM+OworCQlpbnRlcnJ1cHRzID0gPDB4YiAx PjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmc29jODU3Ml9waWM+OworCX07CisJCisJc2Vy aWFsQGYyMDEzMDAwIHsKKwkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKKwkJY29tcGF0aWJs ZSA9ICJuczE2NTUwIjsKKwkJcmVnID0gPDB4ZjIwMTMwMDAgMHgxMDA+OyAKKwkJdmlydHVh bC1yZWcgPSA8MHhmMjAxMzAwMD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDAwMD47 IAkKKwkJY3VycmVudC1zcGVlZCA9IDw5NjAwPjsgIAorCQlpbnRlcnJ1cHRzID0gPDB4YiAx PjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmc29jODU3Ml9waWM+OworCX07CisKKwlzZXJp YWxAZjIwMTQwMDAgeworCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOworCQljb21wYXRpYmxl ID0gIm5zMTY1NTAiOworCQlyZWcgPSA8MHhmMjAxNDAwMCAweDEwMD47IAorCQl2aXJ0dWFs LXJlZyA9IDwweGYyMDE0MDAwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMDAwPjsg CQorCQljdXJyZW50LXNwZWVkID0gPDk2MDA+OyAgCisJCWludGVycnVwdHMgPSA8MHhiIDE+ OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZzb2M4NTcyX3BpYz47CisJfTsKKworCWNob3Nl biB7CisJCWJvb3RhcmdzID0gInJvb3Q9L2Rldi9zZGEyIGNvbnNvbGU9dHR5UzAsOTYwMCI7 CisJCWxpbnV4LHN0ZG91dC1wYXRoID0gIi9zb2M4NTcyQGYxMDAwMDAwL3NlcmlhbEA0NTAw IjsKKwl9OworfTsKZGlmZiAtdSAtLW5ldy1maWxlIC0tcmVjdXJzaXZlIGxpbnV4LTIuNi4y OS42Lm9yaWcvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL212bWUzMTAwLmR0cyBsaW51eC0yLjYu MjkuNi5tb2QvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL212bWUzMTAwLmR0cwotLS0gbGludXgt Mi42LjI5LjYub3JpZy9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXZtZTMxMDAuZHRzCTE5Njkt MTItMzEgMTc6MDA6MDAuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYuMjkuNi5tb2Qv YXJjaC9wb3dlcnBjL2Jvb3QvZHRzL212bWUzMTAwLmR0cwkyMDA5LTA3LTIxIDExOjI4OjE3 LjAwMDAwMDAwMCAtMDcwMApAQCAtMCwwICsxLDM2MCBAQAorLyoKKyAqIE1WTUUzMTAwIERl dmljZSBUcmVlIFNvdXJjZQorICoKKyAqIEF1dGhvcjsgYWppdC5wcmVtQGVtZXJzb24uY29t CisgKgorICogQ29weXJpZ2h0IDIwMDgtMjAwOSBFbWVyc29uIE5ldHdvcmsgUG93ZXIgRW1i ZWRkZWQgQ29tcHV0aW5nIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVu ZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMg cHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVy IHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFu eSBsYXRlciB2ZXJzaW9uLgorICovCisKKy9kdHMtdjEvOworCisvIHsKKwltb2RlbCA9ICJN Vk1FMzEwMCI7CisJY29tcGF0aWJsZSA9ICJNVk1FMzEwMCI7CisJI2FkZHJlc3MtY2VsbHMg PSA8MT47CisJI3NpemUtY2VsbHMgPSA8MT47CisKKyAgICAgICAgYWxpYXNlcyB7CisgICAg ICAgICAgICAgICAgZXRoZXJuZXQwID0gJmVuZXQwOworICAgICAgICAgICAgICAgIGV0aGVy bmV0MSA9ICZlbmV0MTsKKyAgICAgICAgICAgICAgICBldGhlcm5ldDIgPSAmZW5ldDI7Cisg ICAgICAgICAgICAgICAgc2VyaWFsMCA9ICZzZXJpYWwwOworICAgICAgICAgICAgICAgIHBj aTAgPSAmcGNpMDsKKyAgICAgICAgfTsKKworCWNwdXMgeworCQkjYWRkcmVzcy1jZWxscyA9 IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJUG93ZXJQQyw4NTQwQDAgeworCQkJ ZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCXJlZyA9IDwwPjsKKwkJCWQtY2FjaGUtbGluZS1z aXplID0gPDMyPjsJLy8gMzIgYnl0ZXMKKwkJCWktY2FjaGUtbGluZS1zaXplID0gPDMyPjsJ Ly8gMzIgYnl0ZXMKKwkJCWQtY2FjaGUtc2l6ZSA9IDwzMjc2OD47CQkvLyBMMT0zMksKKwkJ CWktY2FjaGUtc2l6ZSA9IDwzMjc2OD47CQkvLyBMMT0zMksKKwkJCXRpbWViYXNlLWZyZXF1 ZW5jeSA9IDwwPjsJLy8gZnJvbSBib290d3JhcHBlcgorCQkJYnVzLWZyZXF1ZW5jeSA9IDww PjsJCS8vIDMzMyBNSHosIGZyb20gYncKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsJCS8v IGZyb20gYm9vdHdyYXBwZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIG5leHQtbGV2ZWwt Y2FjaGUgPSA8JkwyPjsKKwkJfTsKKwl9OworCisJbWVtb3J5IHsKKwkJZGV2aWNlX3R5cGUg PSAibWVtb3J5IjsKKwkJcmVnID0gPDAwMDAwMDAwIDB4MTAwMDAwMDA+OwkvLyAyNTZNIChm aXhlZCBieSBib290d3JhcHBlcikKKwl9OworCisJc29jODU0MEBlMTAwMDAwMCB7CisJCWRl dmljZV90eXBlID0gInNvYyI7CisJCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CisJCSNh ZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJI2ludGVycnVw dC1jZWxscyA9IDwyPjsKKwkJcmFuZ2VzID0gPDAgMHhlMTAwMDAwMCAweDAwMTAwMDAwPjsK KwkJcmVnID0gPDB4ZTEwMDAwMDAgMHgwMDEwMDAwMD47CQorCQlidXMtZnJlcXVlbmN5ID0g PDA+OwkJLy8gMzMzIE1IegorCisJCW1lbW9yeS1jb250cm9sbGVyQDIwMDAgeworICAgICAg ICAgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9ICJmc2wsODU0MC1tZW1vcnktY29udHJv bGxlciI7CisJCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnktY29udHJvbGxlciI7CisJCQlyZWcg PSA8MHgyMDAwIDB4MTAwMD47CisJCQl2aXJ0dWFsLXJlZyA9IDwweGUxMDAyMDAwPjsKKwkJ CWludGVycnVwdHMgPSA8MHgxMiAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JnNvYzg1 NDBfcGljPjsKKwkJfTsKKworCQlMMjogbDJfY2FjaGUtY29udHJvbGxlckAyMDAwMCB7Cisg ICAgICAgICAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gImZzbCw4NTQwLWwyLWNhY2hl LWNvbnRyb2xsZXIiOworCQkJZGV2aWNlX3R5cGUgPSAibDJfY2FjaGUtY29udHJvbGxlciI7 CisJCQlyZWcgPSA8MHgyMDAwMCAweDEwMDA+OworCQkJdmlydHVhbC1yZWcgPSA8MHhlMTAy MDAwMD47CisgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZS1saW5lLXNpemUgPSA8MzI+ OyAvLyAzMiBieXRlcworICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGUtc2l6ZSA9IDww eDQwMDAwPjsgICAvLyBMMiwgMjU2SworCQkJaW50ZXJydXB0cyA9IDwweDEwIDI+OworCQkJ aW50ZXJydXB0LXBhcmVudCA9IDwmc29jODU0MF9waWM+OworCQl9OworCisJCWkyY0AzMDAw IHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJ CQljZWxsLWluZGV4ID0gPDA+OworCQkJZGV2aWNlX3R5cGUgPSAiaTJjIjsKKwkJCWNvbXBh dGlibGUgPSAiZnNsLWkyYyI7CisJCQlyZWcgPSA8MHgzMDAwIDB4MTAwPjsKKwkJCXZpcnR1 YWwtcmVnID0gPDB4ZTEwMDMwMDA+OworCQkJaW50ZXJydXB0cyA9IDwweDJiIDI+OworCQkJ aW50ZXJydXB0LXBhcmVudCA9IDwmc29jODU0MF9waWM+OworCQkJZGZzcnI7CisKKwkJCXRo ZXJtb3N0YXRANGMgeworCQkJCWNvbXBhdGlibGUgPSAiZHMxNjIxIjsKKwkJCQlkZXZpY2Vf dHlwZSA9ICJ0aGVybW9zdGF0IjsKKwkJCQlyZWcgPSA8MHg0Yz47CisJCQkJcGFyZW50ID0g Ii9zb2M4NTQwQGUxMDAwMDAwL2kyY0AzMDAwIjsKKwkJCQlpbnRlcnJ1cHRzID0gPDB4OSAx PjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZzb2M4NTQwX3BpYz47CisJCQl9OworCQl9 OworCQorCQltZGlvQDI0NTIwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRp byI7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+Owor CQkJZGV2aWNlX3R5cGUgPSAibWRpbyI7CisJCQlyZWcgPSA8MHgyNDUyMCAweDIwPjsKKwor CQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgeworCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0 LXBoeSI7CisJCQkJY29tcGF0aWJsZSA9ICJicm9hZGNvbSxiY201NDYxIjsKKwkJCQlpbnRl cnJ1cHQtcGFyZW50ID0gPCZzb2M4NTQwX3BpYz47CisJCQkJaW50ZXJydXB0cyA9IDwweGEg MT47CisJCQkJcmVnID0gPDE+OworCQkJfTsKKworCQkJcGh5MjogZXRoZXJuZXQtcGh5QDIg eworCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJY29tcGF0aWJsZSA9 ICJicm9hZGNvbSxiY201NDYxIjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZzb2M4NTQw X3BpYz47CisJCQkJaW50ZXJydXB0cyA9IDwweGEgMT47CisJCQkJcmVnID0gPDI+OworCQkJ fTsKKworCQkJcGh5MzogZXRoZXJuZXQtcGh5QDMgeworCQkJCWRldmljZV90eXBlID0gImV0 aGVybmV0LXBoeSI7CisJCQkJY29tcGF0aWJsZSA9ICJicm9hZGNvbSxiY201NDIxIjsKKwkJ CQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZzb2M4NTQwX3BpYz47CisJCQkJaW50ZXJydXB0cyA9 IDwweGEgMT47CisJCQkJcmVnID0gPDM+OworCQkJfTsKKwkJfTsKKworCQllbmV0MDogZXRo ZXJuZXRAMjQwMDAgeyAvKiBNQUMgYWRkcmVzc2VzIHNldCBieSBib290d3JhcHBlciAqLwor CQkJY2VsbC1pbmRleCA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CisJCQlk ZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKKwkJCW1vZGVsID0gIlRTRUMiOworCQkJcmVnID0g PDB4MjQwMDAgMHgxMDAwPjsKKwkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAw MCAwMCAwMCBdOworCQkJaW50ZXJydXB0cyA9IDwweDFkIDIgMHgxZSAyIDB4MjIgMj47CisJ CQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZzb2M4NTQwX3BpYz47CisJCQlwaHktaGFuZGxlID0g PCZwaHkxPjsKKwkJfTsKKworCQllbmV0MTogZXRoZXJuZXRAMjUwMDAgeworCQkJY2VsbC1p bmRleCA9IDwxPjsKKwkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOworCQkJbW9kZWwgPSAi VFNFQyI7CisJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOworCQkJcmVnID0gPDB4MjUwMDAg MHgxMDAwPjsKKwkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBd OworCQkJaW50ZXJydXB0cyA9IDwweDIzIDIgMHgyNCAyIDB4MjggMj47CisJCQlpbnRlcnJ1 cHQtcGFyZW50ID0gPCZzb2M4NTQwX3BpYz47CisJCQlwaHktaGFuZGxlID0gPCZwaHkyPjsK KwkJfTsKKworCQllbmV0MjogZXRoZXJuZXRAMjYwMDAgeworCQkJY2VsbC1pbmRleCA9IDwy PjsKKwkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOworCQkJbW9kZWwgPSAiRkVDIjsKKwkJ CWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CisJCQlyZWcgPSA8MHgyNjAwMCAweDEwMDA+Owor CQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CisJCQlpbnRl cnJ1cHRzID0gPDB4MjkgMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZzb2M4NTQwX3Bp Yz47CisJCQlwaHktaGFuZGxlID0gPCZwaHkzPjsKKwkJfTsKKworICAgICAgICAgICAgICAg IGRtYUAyMTMwMCB7CisgICAgICAgICAgICAgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9 IDwxPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICNzaXplLWNlbGxzID0gPDE+OworICAg ICAgICAgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9ICJmc2wsbXBjODU0MC1kbWEiLCAi ZnNsLGVsb3BsdXMtZG1hIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZyA9IDwweDIx MzAwIDB4ND47CisgICAgICAgICAgICAgICAgICAgICAgICByYW5nZXMgPSA8MHgwIDB4MjEx MDAgMHgyMDA+OworICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC1pbmRleCA9IDwwPjsK KyAgICAgICAgICAgICAgICAgICAgICAgIGRtYS1jaGFubmVsQDAgeworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gImZzbCxtcGM4NTQwLWRtYS1jaGFu bmVsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHJlZyA9IDwweDAgMHg4MD47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNlbGwtaW5kZXggPSA8MD47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmc29jODU0 MF9waWM+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHRzID0g PDB4MTQgMj47CisgICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAg ICAgICAgICAgZG1hLWNoYW5uZWxAODAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb21wYXRpYmxlID0gImZzbCxtcGM4NTQwLWRtYS1jaGFubmVsIiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmc2wsZWxvcGx1cy1k bWEtY2hhbm5lbCI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZyA9IDww eDgwIDB4ODA+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLWluZGV4 ID0gPDE+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JnNvYzg1NDBfcGljPjsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0cyA9IDwweDE1IDI+OworICAg ICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRtYS1j aGFubmVsQDEwMCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhdGli bGUgPSAiZnNsLG1wYzg1NDAtZG1hLWNoYW5uZWwiLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnID0gPDB4MTAwIDB4ODA+Owor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLWluZGV4ID0gPDI+OworCQkJ CWludGVycnVwdC1wYXJlbnQgPSA8JnNvYzg1NDBfcGljPjsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50ZXJydXB0cyA9IDwweDE2IDI+OworICAgICAgICAgICAgICAg ICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRtYS1jaGFubmVsQDE4MCB7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSAiZnNsLG1w Yzg1NDAtZG1hLWNoYW5uZWwiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcmVnID0gPDB4MTgwIDB4ODA+OworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjZWxsLWluZGV4ID0gPDM+OworCQkJCWludGVycnVwdC1w YXJlbnQgPSA8JnNvYzg1NDBfcGljPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW50ZXJydXB0cyA9IDwweDE3IDI+OworICAgICAgICAgICAgICAgICAgICAgICAgfTsK KyAgICAgICAgICAgICAgICB9OworCisJCXNlcmlhbDA6IHNlcmlhbEA0NTAwIHsKKyAgICAg ICAgICAgICAgICAgICAgICAgIGNlbGwtaW5kZXggPSA8MD47CisJCQlkZXZpY2VfdHlwZSA9 ICJzZXJpYWwiOworCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKKwkJCXJlZyA9IDwweDQ1 MDAgMHgxMDA+OyAJCisJCQl2aXJ0dWFsLXJlZyA9IDwweGUxMDA0NTAwPjsKKwkJCWNsb2Nr LWZyZXF1ZW5jeSA9IDwwPjsgCQorCQkJY3VycmVudC1zcGVlZCA9IDw5NjAwPjsgCisJCQlp bnRlcnJ1cHRzID0gPDB4MmEgMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZzb2M4NTQw X3BpYz47CisJCX07CisKKwkJc29jODU0MF9waWM6IHBpY0A0MDAwMCB7CisJCQljb21wYXRp YmxlID0gImNocnAsb3Blbi1waWMiOworCQkJZGV2aWNlX3R5cGUgPSAib3Blbi1waWMiOwor CQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJ CQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJ CQlyZWcgPSA8MHg0MDAwMCAweDQwMDAwPjsKKwkJCWJpZy1lbmRpYW47CisJCX07CisJfTsK KworCXBjaTA6IHBjaUBlMTAwODAwMCB7CisgICAgICAgICAgICAgICAgY2VsbC1pbmRleCA9 IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU0MC1wY2l4IiwgImZzbCxtcGM4NTQw LXBjaSI7CisJCWRldmljZV90eXBlID0gInBjaSI7CisJCSNhZGRyZXNzLWNlbGxzID0gPDM+ OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJ cmVnID0gPDB4ZTEwMDgwMDAgMHgxMDAwPjsKKwkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMCAw eDgwMDAwMDAwIDB4ODAwMDAwMDAgMCAweDYwMDAwMDAwCisJCQkgIDB4MDEwMDAwMDAgMCAw eDAwMDAwMDAwIDB4ZTAwMDAwMDAgMCAweDAxMDAwMDAwPjsKKwkJYnVzLXJhbmdlID0gPDB4 MCAweGZmPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCQlpbnRlcnJ1cHQtcGFyZW50 ID0gPCZzb2M4NTQwX3BpYz47CisJCWludGVycnVwdC1tYXAtbWFzayA9IDwweGY4MDAgMHgw IDB4MCAweDc+OworCQlpbnRlcnJ1cHQtbWFwID0gPAorCQkJLyogSURTRUwgMHgwMSAqLwor CQkJMHgwODAwIDAgMCAxICZzb2M4NTQwX3BpYyAwIDEKKwkJCTB4MDgwMCAwIDAgMiAmc29j ODU0MF9waWMgMSAxCisJCQkweDA4MDAgMCAwIDMgJnNvYzg1NDBfcGljIDIgMQorCQkJMHgw ODAwIDAgMCA0ICZzb2M4NTQwX3BpYyAzIDEKKworCQkJLyogSURTRUwgMHgwMiAqLworCQkJ MHgxMDAwIDAgMCAxICZzb2M4NTQwX3BpYyA0IDEKKwkJCTB4MTAwMCAwIDAgMiAmc29jODU0 MF9waWMgNSAxCisJCQkweDEwMDAgMCAwIDMgJnNvYzg1NDBfcGljIDYgMQorCQkJMHgxMDAw IDAgMCA0ICZzb2M4NTQwX3BpYyA3IDEKKworCQkJLyogSURTRUwgMHgwMyAqLworCQkJMHgx ODAwIDAgMCAxICZzb2M4NTQwX3BpYyA0IDEKKwkJCTB4MTgwMCAwIDAgMiAmc29jODU0MF9w aWMgNSAxCisJCQkweDE4MDAgMCAwIDMgJnNvYzg1NDBfcGljIDYgMQorCQkJMHgxODAwIDAg MCA0ICZzb2M4NTQwX3BpYyA3IDEKKworCQkJLyogSURTRUwgMHgwNCAqLworCQkJMHgyMDAw IDAgMCAxICZzb2M4NTQwX3BpYyAyIDEKKwkJCTB4MjAwMCAwIDAgMiAmc29jODU0MF9waWMg MiAxCisJCQkweDIwMDAgMCAwIDMgJnNvYzg1NDBfcGljIDIgMQorCQkJMHgyMDAwIDAgMCA0 ICZzb2M4NTQwX3BpYyAyIDEKKworCQkJLyogSURTRUwgMHgxMSAqLworCQkJMHg4ODAwIDAg MCAxICZzb2M4NTQwX3BpYyAwIDEKKwkJCTB4ODgwMCAwIDAgMiAmc29jODU0MF9waWMgMSAx CisJCQkweDg4MDAgMCAwIDMgJnNvYzg1NDBfcGljIDIgMQorCQkJMHg4ODAwIDAgMCA0ICZz b2M4NTQwX3BpYyAzIDEKKworCQkJLyogSURTRUwgMHgxMiAqLworCQkJMHg5MDAwIDAgMCAx ICZzb2M4NTQwX3BpYyA0IDEKKwkJCTB4OTAwMCAwIDAgMiAmc29jODU0MF9waWMgNSAxCisJ CQkweDkwMDAgMCAwIDMgJnNvYzg1NDBfcGljIDYgMQorCQkJMHg5MDAwIDAgMCA0ICZzb2M4 NTQwX3BpYyA3IDEKKworCQkJLyogSURTRUwgMHgxMyAqLworCQkJMHg5ODAwIDAgMCAxICZz b2M4NTQwX3BpYyA0IDEKKwkJCTB4OTgwMCAwIDAgMiAmc29jODU0MF9waWMgNSAxCisJCQkw eDk4MDAgMCAwIDMgJnNvYzg1NDBfcGljIDYgMQorCQkJMHg5ODAwIDAgMCA0ICZzb2M4NTQw X3BpYyA3IDEKKworCQkJLyogSURTRUwgMHgxNCAqLworCQkJMHhhMDAwIDAgMCAxICZzb2M4 NTQwX3BpYyAyIDEKKwkJCTB4YTAwMCAwIDAgMiAmc29jODU0MF9waWMgMiAxCisJCQkweGEw MDAgMCAwIDMgJnNvYzg1NDBfcGljIDIgMQorCQkJMHhhMDAwIDAgMCA0ICZzb2M4NTQwX3Bp YyAyIDEKKwkJPjsKKwkJaW50ZXJydXB0cyA9IDwweDE4IDI+OworCX07CisKKwlib2FyZF90 aW1lcnNAZTIwMjAwMDAgeworCQlkZXZpY2VfdHlwZSA9ICJib2FyZF90aW1lcnMiOworCQly ZWcgPSA8MHhlMjAyMDAwMCAweDRjPjsKKwkJaW50ZXJydXB0cyA9IDwweDEgMT47CisJCWlu dGVycnVwdC1wYXJlbnQgPSA8JnNvYzg1NDBfcGljPjsKKwl9OworCQorCXNlcmlhbEBlMjAx MTAwMCB7CisJCWRldmljZV90eXBlID0gInNlcmlhbCI7CisJCWNvbXBhdGlibGUgPSAibnMx NjU1MCI7CisJCXJlZyA9IDwweGUyMDExMDAwIDB4MTAwPjsgCisJCXZpcnR1YWwtcmVnID0g PDB4ZTIwMTEwMDA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MHgxYzIwMDA+OyAJCisJCWN1 cnJlbnQtc3BlZWQgPSA8OTYwMD47ICAKKwkJaW50ZXJydXB0cyA9IDwweDMgMT47CisJCWlu dGVycnVwdC1wYXJlbnQgPSA8JnNvYzg1NDBfcGljPjsKKwl9OworCisJc2VyaWFsQGUyMDEy MDAwIHsKKwkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKKwkJY29tcGF0aWJsZSA9ICJuczE2 NTUwIjsKKwkJcmVnID0gPDB4ZTIwMTIwMDAgMHgxMDA+OyAKKwkJdmlydHVhbC1yZWcgPSA8 MHhlMjAxMjAwMD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwweDFjMjAwMD47IAkKKwkJY3Vy cmVudC1zcGVlZCA9IDw5NjAwPjsgIAorCQlpbnRlcnJ1cHRzID0gPDB4MyAxPjsKKwkJaW50 ZXJydXB0LXBhcmVudCA9IDwmc29jODU0MF9waWM+OworCX07CisKKwlzZXJpYWxAZTIwMTMw MDAgeworCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOworCQljb21wYXRpYmxlID0gIm5zMTY1 NTAiOworCQlyZWcgPSA8MHhlMjAxMzAwMCAweDEwMD47IAorCQl2aXJ0dWFsLXJlZyA9IDww eGUyMDEzMDAwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDB4MWMyMDAwPjsgCQorCQljdXJy ZW50LXNwZWVkID0gPDk2MDA+OyAgCisJCWludGVycnVwdHMgPSA8MHgzIDE+OworCQlpbnRl cnJ1cHQtcGFyZW50ID0gPCZzb2M4NTQwX3BpYz47CisJfTsKKworCXNlcmlhbEBlMjAxNDAw MCB7CisJCWRldmljZV90eXBlID0gInNlcmlhbCI7CisJCWNvbXBhdGlibGUgPSAibnMxNjU1 MCI7CisJCXJlZyA9IDwweGUyMDE0MDAwIDB4MTAwPjsgCisJCXZpcnR1YWwtcmVnID0gPDB4 ZTIwMTQwMDA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MHgxYzIwMDA+OyAJCisJCWN1cnJl bnQtc3BlZWQgPSA8OTYwMD47ICAKKwkJaW50ZXJydXB0cyA9IDwweDMgMT47CisJCWludGVy cnVwdC1wYXJlbnQgPSA8JnNvYzg1NDBfcGljPjsKKwl9OworCisJY2hvc2VuIHsKKwkJbmFt ZSA9ICJjaG9zZW4iOworCQlib290YXJncyA9ICJyb290PS9kZXYvcmFtMCByYW1kaXNrX3Np emU9NjQwMDAgY29uc29sZT10dHlTMCw5NjAwIjsKKwkJbGludXgsc3Rkb3V0LXBhdGggPSAi L3NvYzg1NDBAZTEwMDAwMDAvc2VyaWFsQDQ1MDAiOworCX07Cit9OwpkaWZmIC11IC0tbmV3 LWZpbGUgLS1yZWN1cnNpdmUgbGludXgtMi42LjI5LjYub3JpZy9hcmNoL3Bvd2VycGMvYm9v dC9kdHMvbXZtZTQxMDAuZHRzIGxpbnV4LTIuNi4yOS42Lm1vZC9hcmNoL3Bvd2VycGMvYm9v dC9kdHMvbXZtZTQxMDAuZHRzCi0tLSBsaW51eC0yLjYuMjkuNi5vcmlnL2FyY2gvcG93ZXJw Yy9ib290L2R0cy9tdm1lNDEwMC5kdHMJMTk2OS0xMi0zMSAxNzowMDowMC4wMDAwMDAwMDAg LTA3MDAKKysrIGxpbnV4LTIuNi4yOS42Lm1vZC9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXZt ZTQxMDAuZHRzCTIwMDktMDctMjEgMTE6Mjg6MTcuMDAwMDAwMDAwIC0wNzAwCkBAIC0wLDAg KzEsNDM3IEBACisvKgorICogTVZNRTQxMDAgRGV2aWNlIFRyZWUgU291cmNlCisgKgorICog QXV0aG9yOyBhaml0LnByZW1AZW1lcnNvbi5jb20KKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBF bWVyc29uIE5ldHdvcmsgUG93ZXIgRW1iZWRkZWQgQ29tcHV0aW5nIEluYy4KKyAqCisgKiBU aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0 IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2Vu ZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9y IChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKy9kdHMt djEvOworCisvIHsKKwltb2RlbCA9ICJNVk1FNDEwMCI7CisJY29tcGF0aWJsZSA9ICJNVk1F NDEwMCI7CisJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJI3NpemUtY2VsbHMgPSA8MT47CisK KyAgICAgICAgYWxpYXNlcyB7CisgICAgICAgICAgICAgICAgZXRoZXJuZXQwID0gJmVuZXQw OworICAgICAgICAgICAgICAgIGV0aGVybmV0MSA9ICZlbmV0MTsKKyAgICAgICAgICAgICAg ICBldGhlcm5ldDIgPSAmZW5ldDI7CisgICAgICAgICAgICAgICAgZXRoZXJuZXQzID0gJmVu ZXQzOworICAgICAgICAgICAgICAgIHNlcmlhbDAgPSAmc2VyaWFsMDsKKyAgICAgICAgICAg ICAgICBwY2kwID0gJnBjaTA7CisgICAgICAgICAgICAgICAgcGNpMiA9ICZwY2kyOworICAg ICAgICB9OworCisKKwljcHVzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXpl LWNlbGxzID0gPDA+OworCisJCVBvd2VyUEMsODU0OEAwIHsKKwkJCWRldmljZV90eXBlID0g ImNwdSI7CisJCQlyZWcgPSA8MD47CisJCQlkLWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CS8v IDMyIGJ5dGVzCisJCQlpLWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CS8vIDMyIGJ5dGVzCisJ CQlkLWNhY2hlLXNpemUgPSA8MzI3Njg+OwkJLy8gTDE9MzJLCisJCQlpLWNhY2hlLXNpemUg PSA8MzI3Njg+OwkJLy8gTDE9MzJLCisJCQl0aW1lYmFzZS1mcmVxdWVuY3kgPSA8MD47CS8v IGZyb20gYm9vdHdyYXBwZXIKKwkJCWJ1cy1mcmVxdWVuY3kgPSA8MD47CQkvLyBmcm9tIGJ3 CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CQkvLyBmcm9tIGJvb3R3cmFwcGVyCisJCQlu ZXh0LWxldmVsLWNhY2hlID0gPCZMMj47CisJCX07CisJfTsKKworCW1lbW9yeSB7CisJCWRl dmljZV90eXBlID0gIm1lbW9yeSI7CisJCXJlZyA9IDwweDAwMDAwMDAwIDB4NDAwMDAwMDA+ OwkvLyAxIEdCIChmaXhlZCBieSBib290d3JhcHBlcikKKwl9OworCisJc29jODU0OEBmMTAw MDAwMCB7CisJCWRldmljZV90eXBlID0gInNvYyI7CisJCWNvbXBhdGlibGUgPSAic2ltcGxl LWJ1cyI7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsK KwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJcmFuZ2VzID0gPDB4MCAweGYxMDAwMDAw IDB4MDAxMDAwMDA+OworCQlyZWcgPSA8MHhmMTAwMDAwMCAweDAwMTAwMDAwPjsJCisJCWJ1 cy1mcmVxdWVuY3kgPSA8MD47CQorCisJCW1lbW9yeS1jb250cm9sbGVyQDIwMDAgeworICAg ICAgICAgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9ICJmc2wsODU0OC1tZW1vcnktY29u dHJvbGxlciI7CisJCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnktY29udHJvbGxlciI7CisJCQly ZWcgPSA8MHgyMDAwIDB4MTAwMD47CisJCQl2aXJ0dWFsLXJlZyA9IDwweGYxMDAyMDAwPjsK KwkJCWludGVycnVwdHMgPSA8MHgxMiAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JnNv Yzg1NDhfcGljPjsKKwkJfTsKKworCQlMMjogbDJfY2FjaGUtY29udHJvbGxlckAyMDAwMCB7 CisgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gImZzbCw4NTQ4LWwyLWNh Y2hlLWNvbnRyb2xsZXIiOworCQkJZGV2aWNlX3R5cGUgPSAibDJfY2FjaGUtY29udHJvbGxl ciI7CisJCQlyZWcgPSA8MHgyMDAwMCAweDEwMDA+OworCQkJdmlydHVhbC1yZWcgPSA8MHhm MTAyMDAwMD47CisgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZS1saW5lLXNpemUgPSA8 MzI+OyAvLyAzMiBieXRlcworICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGUtc2l6ZSA9 IDw1MjQyODg+OyAgIC8vIEwyLCA1MTJLCisJCQlpbnRlcnJ1cHRzID0gPDB4MTAgMj47CisJ CQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZzb2M4NTQ4X3BpYz47CisJCX07CisKKwkJaTJjQDMw MDAgeworCQkJY2VsbC1pbmRleCA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7 CisJCQlkZXZpY2VfdHlwZSA9ICJpMmMiOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJ CQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCXJlZyA9IDwweDMwMDAgMHgxMDA+OworCQkJdmly dHVhbC1yZWcgPSA8MHhmMTAwMzAwMD47CisJCQlpbnRlcnJ1cHRzID0gPDB4MmIgMj47CisJ CQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZzb2M4NTQ4X3BpYz47CisJCQlkZnNycjsKKworCQkJ dGhlcm1vc3RhdEA0YyB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBh dGlibGUgPSAiYWR0NzQ2MSIsICJsbTkwIjsKKwkJCQlkZXZpY2VfdHlwZSA9ICJ0aGVybW9z dGF0IjsKKwkJCQlyZWcgPSA8MHg0Yz47CisJCQkJcGFyZW50ID0gIi9zb2M4NTQ4QGYxMDAw MDAwL2kyY0AzMDAwIjsKKwkJCQlpbnRlcnJ1cHRzID0gPDB4OSAxPjsKKwkJCQlpbnRlcnJ1 cHQtcGFyZW50ID0gPCZzb2M4NTQ4X3BpYz47CisJCQl9OworCisJCX07CisJCisgICAgICAg ICAgICAgICAgaTJjQDMxMDAgeworICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC1pbmRl eCA9IDwxPjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSAiZnNsLWky YyI7CisgICAgICAgICAgICAgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9IDwxPjsKKyAg ICAgICAgICAgICAgICAgICAgICAgICNzaXplLWNlbGxzID0gPDA+OworICAgICAgICAgICAg ICAgICAgICAgICAgcmVnID0gPDB4MzEwMCAweDEwMD47CisJCQl2aXJ0dWFsLXJlZyA9IDww eGYxMDAzMTAwPjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdHMgPSA8MHgy YiAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JnNvYzg1NDhfcGljPjsKKyAgICAgICAg ICAgICAgICAgICAgICAgIGRmc3JyOworICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAg ICAgICAgICBkbWFAMjEzMDAgeworICAgICAgICAgICAgICAgICAgICAgICAgI2FkZHJlc3Mt Y2VsbHMgPSA8MT47CisgICAgICAgICAgICAgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IDwx PjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NDgt ZG1hIiwgImZzbCxlbG9wbHVzLWRtYSI7CisgICAgICAgICAgICAgICAgICAgICAgICByZWcg PSA8MHgyMTMwMCAweDQ+OworICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2VzID0gPDB4 MCAweDIxMTAwIDB4MjAwPjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwtaW5kZXgg PSA8MD47CisgICAgICAgICAgICAgICAgICAgICAgICBkbWEtY2hhbm5lbEAwIHsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9ICJmc2wsbXBjODU0OC1k bWEtY2hhbm5lbCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICByZWcgPSA8MHgwIDB4ODA+OworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjZWxsLWluZGV4ID0gPDA+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8 JnNvYzg1NDhfcGljPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJy dXB0cyA9IDwyMCAyPjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAg ICAgICAgICAgICAgICBkbWEtY2hhbm5lbEA4MCB7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NDgtZG1hLWNoYW5uZWwiLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZzbCxlbG9w bHVzLWRtYS1jaGFubmVsIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVn ID0gPDB4ODAgMHg4MD47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwt aW5kZXggPSA8MT47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmc29jODU0OF9waWM+Owor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHRzID0gPDIxIDI+Owor ICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRt YS1jaGFubmVsQDEwMCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBh dGlibGUgPSAiZnNsLG1wYzg1NDgtZG1hLWNoYW5uZWwiLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZzbCxlbG9wbHVzLWRtYS1jaGFubmVs IjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnID0gPDB4MTAwIDB4ODA+ OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLWluZGV4ID0gPDI+Owor CQkJCWludGVycnVwdC1wYXJlbnQgPSA8JnNvYzg1NDhfcGljPjsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50ZXJydXB0cyA9IDwyMiAyPjsKKyAgICAgICAgICAgICAg ICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgICAgICBkbWEtY2hhbm5lbEAxODAg eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gImZzbCxt cGM4NTQ4LWRtYS1jaGFubmVsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHJlZyA9IDwweDE4MCAweDgwPjsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY2VsbC1pbmRleCA9IDwzPjsKKwkJCQlpbnRlcnJ1cHQt cGFyZW50ID0gPCZzb2M4NTQ4X3BpYz47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGludGVycnVwdHMgPSA8MjMgMj47CisgICAgICAgICAgICAgICAgICAgICAgICB9Owor ICAgICAgICAgICAgICAgIH07CisKKwkJbWRpb0AyNDUyMCB7CisJCQljb21wYXRpYmxlID0g ImZzbCxnaWFuZmFyLW1kaW8iOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6 ZS1jZWxscyA9IDwwPjsKKwkJCWRldmljZV90eXBlID0gIm1kaW8iOworCQkJcmVnID0gPDB4 MjQ1MjAgMHgyMD47CisKKwkJCXBoeTA6IGV0aGVybmV0LXBoeUAxIHsKKwkJCQljb21wYXRp YmxlID0gImJyb2FkY29tLGJjbTU0ODIiOworCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0 LXBoeSI7CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmc29jODU0OF9waWM+OworCQkJCWlu dGVycnVwdHMgPSA8MHhhIDE+OworCQkJCXJlZyA9IDwxPjsKKwkJCX07CisKKwkJCXBoeTE6 IGV0aGVybmV0LXBoeUAyIHsKKwkJCQljb21wYXRpYmxlID0gImJyb2FkY29tLGJjbTU0ODIi OworCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJaW50ZXJydXB0LXBh cmVudCA9IDwmc29jODU0OF9waWM+OworCQkJCWludGVycnVwdHMgPSA8MHhhIDE+OworCQkJ CXJlZyA9IDwyPjsKKwkJCX07CisKKwkJCXBoeTI6IGV0aGVybmV0LXBoeUAzIHsKKwkJCQlj b21wYXRpYmxlID0gImJyb2FkY29tLGJjbTU0ODIiOworCQkJCWRldmljZV90eXBlID0gImV0 aGVybmV0LXBoeSI7CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmc29jODU0OF9waWM+Owor CQkJCWludGVycnVwdHMgPSA8MHhhIDE+OworCQkJCXJlZyA9IDwzPjsKKwkJCX07CisKKwkJ CXBoeTM6IGV0aGVybmV0LXBoeUA0IHsKKwkJCQljb21wYXRpYmxlID0gImJyb2FkY29tLGJj bTU0ODIiOworCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJaW50ZXJy dXB0LXBhcmVudCA9IDwmc29jODU0OF9waWM+OworCQkJCWludGVycnVwdHMgPSA8MHhhIDE+ OworCQkJCXJlZyA9IDw0PjsKKwkJCX07CisJCX07CisKKwkJZW5ldDA6IGV0aGVybmV0QDI0 MDAwIHsgLyogTUFDIGFkZHJlc3NlcyBzZXQgYnkgYm9vdHdyYXBwZXIgKi8KKwkJCWNlbGwt aW5kZXggPSA8MD47CisJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOworCQkJZGV2aWNlX3R5 cGUgPSAibmV0d29yayI7CisJCQltb2RlbCA9ICJlVFNFQyI7CisJCQlyZWcgPSA8MHgyNDAw MCAweDEwMDA+OworCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAw IF07CisJCQlpbnRlcnJ1cHRzID0gPDB4MWQgMiAweDFlIDIgMHgyMiAyPjsKKwkJCWludGVy cnVwdC1wYXJlbnQgPSA8JnNvYzg1NDhfcGljPjsKKwkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+ OworCQl9OworCisJCWVuZXQxOiBldGhlcm5ldEAyNTAwMCB7CisJCQljZWxsLWluZGV4ID0g PDE+OworCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKKwkJCWRldmljZV90eXBlID0gIm5l dHdvcmsiOworCQkJbW9kZWwgPSAiZVRTRUMiOworCQkJcmVnID0gPDB4MjUwMDAgMHgxMDAw PjsKKwkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOworCQkJ aW50ZXJydXB0cyA9IDwweDIzIDIgMHgyNCAyIDB4MjggMj47CisJCQlpbnRlcnJ1cHQtcGFy ZW50ID0gPCZzb2M4NTQ4X3BpYz47CisJCQlwaHktaGFuZGxlID0gPCZwaHkxPjsKKwkJfTsK KworCQllbmV0MjogZXRoZXJuZXRAMjYwMDAgeworCQkJY2VsbC1pbmRleCA9IDwyPjsKKwkJ CWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CisJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsK KwkJCW1vZGVsID0gImVUU0VDIjsKKwkJCXJlZyA9IDwweDI2MDAwIDB4MTAwMD47CisJCQls b2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKKyAgICAgICAgICAg ICAgICAgICAgICAgIGludGVycnVwdHMgPSA8MHgxZiAyIDB4MjAgMiAweDIxIDI+OworCQkJ aW50ZXJydXB0LXBhcmVudCA9IDwmc29jODU0OF9waWM+OworICAgICAgICAgICAgICAgICAg ICAgICAgcGh5LWhhbmRsZSA9IDwmcGh5Mj47CisgICAgICAgICAgICAgICAgfTsKKworICAg ICAgICAgICAgICAgIGVuZXQzOiBldGhlcm5ldEAyNzAwMCB7CisgICAgICAgICAgICAgICAg ICAgICAgICBjZWxsLWluZGV4ID0gPDM+OworICAgICAgICAgICAgICAgICAgICAgICAgY29t cGF0aWJsZSA9ICJnaWFuZmFyIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZV90 eXBlID0gIm5ldHdvcmsiOworICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWwgPSAiZVRT RUMiOworICAgICAgICAgICAgICAgICAgICAgICAgcmVnID0gPDB4MjcwMDAgMHgxMDAwPjsK KyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAw MCAwMCAwMCAwMCBdOworICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0cyA9IDww eDI1IDIgMHgyNiAyIDB4MjcgMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZzb2M4NTQ4 X3BpYz47CisgICAgICAgICAgICAgICAgICAgICAgICBwaHktaGFuZGxlID0gPCZwaHkzPjsK KyAgICAgICAgICAgICAgICB9OworCisJCXNlcmlhbDA6IHNlcmlhbEA0NTAwIHsKKyAgICAg ICAgICAgICAgICAgICAgICAgIGNlbGwtaW5kZXggPSA8MD47CisJCQljb21wYXRpYmxlID0g Im5zMTY1NTAiOworCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKKwkJCXJlZyA9IDwweDQ1 MDAgMHgxMDA+OyAJCisJCQl2aXJ0dWFsLXJlZyA9IDwweGYxMDA0NTAwPjsKKwkJCWNsb2Nr LWZyZXF1ZW5jeSA9IDwwPjsgCQorCQkJY3VycmVudC1zcGVlZCA9IDw5NjAwPjsgIAorCQkJ aW50ZXJydXB0cyA9IDwweDJhIDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmc29jODU0 OF9waWM+OworCQl9OworCisgICAgICAgICAgICAgICAgZ2xvYmFsLXV0aWxpdGllc0BlMDAw MCB7ICAgICAgICAvL2dsb2JhbCB1dGlsaXRpZXMgcmVnCisgICAgICAgICAgICAgICAgICAg ICAgICBjb21wYXRpYmxlID0gImZzbCxtcGM4NTQ4LWd1dHMiOworICAgICAgICAgICAgICAg ICAgICAgICAgcmVnID0gPDB4ZTAwMDAgMHgxMDAwPjsKKyAgICAgICAgICAgICAgICAgICAg ICAgIGZzbCxoYXMtcnN0Y3I7CisgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAg ICAgIGNyeXB0b0AzMDAwMCB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXRpYmxl ID0gImZzbCxzZWMyLjEiLCAiZnNsLHNlYzIuMCI7CisgICAgICAgICAgICAgICAgICAgICAg ICByZWcgPSA8MHgzMDAwMCAweDEwMDAwPjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlu dGVycnVwdHMgPSA8NDUgMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZzb2M4NTQ4X3Bp Yz47CisgICAgICAgICAgICAgICAgICAgICAgICBmc2wsbnVtLWNoYW5uZWxzID0gPDQ+Owor ICAgICAgICAgICAgICAgICAgICAgICAgZnNsLGNoYW5uZWwtZmlmby1sZW4gPSA8MjQ+Owor ICAgICAgICAgICAgICAgICAgICAgICAgZnNsLGV4ZWMtdW5pdHMtbWFzayA9IDwweGZlPjsK KyAgICAgICAgICAgICAgICAgICAgICAgIGZzbCxkZXNjcmlwdG9yLXR5cGVzLW1hc2sgPSA8 MHgxMmIwZWJmPjsKKyAgICAgICAgICAgICAgICB9OworCisJCXNvYzg1NDhfcGljOiBwaWNA NDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJjaHJwLG9wZW4tcGljIjsKKwkJCWRldmljZV90 eXBlID0gIm9wZW4tcGljIjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKwkJCWludGVy cnVwdC1jb250cm9sbGVyOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CisJCQkjaW50ZXJy dXB0LWNlbGxzID0gPDI+OworCQkJcmVnID0gPDB4NDAwMDAgMHg0MDAwMD47CisJCQliaWct ZW5kaWFuOworCQl9OworCX07CisKKyAgICAgICAgcGNpMDogcGNpQGYxMDA4MDAwIHsKKwkJ Y2VsbC1pbmRleCA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU0MC1wY2l4Iiwg ImZzbCxtcGM4NTQwLXBjaSI7CisJCWRldmljZV90eXBlID0gInBjaSI7CisJCSNpbnRlcnJ1 cHQtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDI+OworCQkjYWRkcmVzcy1jZWxs cyA9IDwzPjsKKwkJcmVnID0gPDB4ZjEwMDgwMDAgMHgxMDAwPjsKKwkJYnVzLXJhbmdlID0g PDB4MCAweGZmPjsKKwkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMCAweDgwMDAwMDAwIDB4ODAw MDAwMDAgMHgwIDB4MTAwMDAwMDAKKwkJCSAgMHg0MjAwMDAwMCAwIDB4OTAwMDAwMDAgMHg5 MDAwMDAwMCAweDAgMHg0MDAwMDAwMAorCQkJICAweDAxMDAwMDAwIDAgMHgwMDAwMDAwMCAw eGYwMDAwMDAwIDB4MCAweDAwODAwMDAwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDA+Owor CQlpbnRlcnJ1cHRzID0gPDB4MTggMj47CisJCWludGVycnVwdC1wYXJlbnQgPSA8JnNvYzg1 NDhfcGljPjsKKwkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4ZjgwMCAweDAgMHgwIDB4Nz47 CisJCWludGVycnVwdC1tYXAgPSA8CisJCQkvKiBJRFNFTCAweDAxICBUU0kxNDggIFBDSS1Y ICovCisJCQkweDA4MDAgMCAwIDEgJnNvYzg1NDhfcGljIDAgMQorCQkJMHgwODAwIDAgMCAy ICZzb2M4NTQ4X3BpYyAxIDEKKwkJCTB4MDgwMCAwIDAgMyAmc29jODU0OF9waWMgMiAxCisJ CQkweDA4MDAgMCAwIDQgJnNvYzg1NDhfcGljIDMgMQorCisJCQkvKiBJRFNFTCAweDAyICBQ Q0k2NTIwLTEgKi8KKwkJCTB4MTAwMCAwIDAgMSAmc29jODU0OF9waWMgNCAxCisJCQkweDEw MDAgMCAwIDIgJnNvYzg1NDhfcGljIDUgMQorCQkJMHgxMDAwIDAgMCAzICZzb2M4NTQ4X3Bp YyA2IDEKKwkJCTB4MTAwMCAwIDAgNCAmc29jODU0OF9waWMgNyAxCisKKwkJCS8qIElEU0VM IDB4MDMgIFBDSTY1MjAtMiAqLworCQkJMHgxODAwIDAgMCAxICZzb2M4NTQ4X3BpYyA0IDEK KwkJCTB4MTgwMCAwIDAgMiAmc29jODU0OF9waWMgNSAxCisJCQkweDE4MDAgMCAwIDMgJnNv Yzg1NDhfcGljIDYgMQorCQkJMHgxODAwIDAgMCA0ICZzb2M4NTQ4X3BpYyA3IDEKKworCQkJ LyogSURTRUwgMHgxMSAgVFNJMTQ4ICBQQ0kgKi8KKwkJCTB4ODgwMCAwIDAgMSAmc29jODU0 OF9waWMgMCAxCisJCQkweDg4MDAgMCAwIDIgJnNvYzg1NDhfcGljIDEgMQorCQkJMHg4ODAw IDAgMCAzICZzb2M4NTQ4X3BpYyAyIDEKKwkJCTB4ODgwMCAwIDAgNCAmc29jODU0OF9waWMg MyAxCisKKwkJCS8qIElEU0VMIDB4MTIgIFBDSTY1MjAtMSAqLworCQkJMHg5MDAwIDAgMCAx ICZzb2M4NTQ4X3BpYyA0IDEKKwkJCTB4OTAwMCAwIDAgMiAmc29jODU0OF9waWMgNSAxCisJ CQkweDkwMDAgMCAwIDMgJnNvYzg1NDhfcGljIDYgMQorCQkJMHg5MDAwIDAgMCA0ICZzb2M4 NTQ4X3BpYyA3IDEKKworCQkJLyogSURTRUwgMHgxMyBQQ0k2NTIwLTIgKi8KKwkJCTB4OTgw MCAwIDAgMSAmc29jODU0OF9waWMgNCAxCisJCQkweDk4MDAgMCAwIDIgJnNvYzg1NDhfcGlj IDUgMQorCQkJMHg5ODAwIDAgMCAzICZzb2M4NTQ4X3BpYyA2IDEKKwkJCTB4OTgwMCAwIDAg NCAmc29jODU0OF9waWMgNyAxCisJCT47CisJfTsKKworICAgICAgICBwY2kyOiBwY2lAZjEw MGEwMDAgeworICAgICAgICAgICAgICAgIGNlbGwtaW5kZXggPSA8Mj47CisgICAgICAgICAg ICAgICAgY29tcGF0aWJsZSA9ICJmc2wsbXBjODU0OC1wY2llIjsKKyAgICAgICAgICAgICAg ICBkZXZpY2VfdHlwZSA9ICJwY2kiOworICAgICAgICAgICAgICAgICNpbnRlcnJ1cHQtY2Vs bHMgPSA8MT47CisgICAgICAgICAgICAgICAgI3NpemUtY2VsbHMgPSA8Mj47CisgICAgICAg ICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisgICAgICAgICAgICAgICAgcmVnID0g PDB4ZjEwMGEwMDAgMHgxMDAwPjsKKyAgICAgICAgICAgICAgICBidXMtcmFuZ2UgPSA8MHgw IDB4ZmY+OworICAgICAgICAgICAgICAgIHJhbmdlcyA9IDwweDAyMDAwMDAwIDB4MCAweGQw MDAwMDAwIDB4ZDAwMDAwMDAgMHgwIDB4MDgwMDAwMDAKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgMHgwMTAwMDAwMCAweDAgMHgwMDAwMDAwMCAweGYwODAwMDAwIDB4MCAweDAwODAw MDAwPjsKKyAgICAgICAgICAgICAgICBjbG9jay1mcmVxdWVuY3kgPSA8MD47CisJCWludGVy cnVwdC1wYXJlbnQgPSA8JnNvYzg1NDhfcGljPjsKKyAgICAgICAgICAgICAgICBpbnRlcnJ1 cHRzID0gPDB4MTkgMj47CisgICAgICAgICAgICAgICAgaW50ZXJydXB0LW1hcC1tYXNrID0g PDB4ZjgwMCAweDAgMHgwIDB4Nz47CisgICAgICAgICAgICAgICAgaW50ZXJydXB0LW1hcCA9 IDwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIElEU0VMIDB4MCAqLworICAgICAgICAg ICAgICAgICAgICAgICAgMHgwMDAwIDAgMCAxICZzb2M4NTQ4X3BpYyAwIDEKKyAgICAgICAg ICAgICAgICAgICAgICAgIDB4MDAwMCAwIDAgMiAmc29jODU0OF9waWMgMSAxCisgICAgICAg ICAgICAgICAgICAgICAgICAweDAwMDAgMCAwIDMgJnNvYzg1NDhfcGljIDIgMQorICAgICAg ICAgICAgICAgICAgICAgICAgMHgwMDAwIDAgMCA0ICZzb2M4NTQ4X3BpYyAzIDE+OworCQlw Y2llQDAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVnID0gPDAgMCAwIDAgMD47Cisg ICAgICAgICAgICAgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IDwyPjsKKyAgICAgICAgICAg ICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gPDM+OworICAgICAgICAgICAgICAgICAg ICAgICAgZGV2aWNlX3R5cGUgPSAicGNpIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJh bmdlcyA9IDwweDAyMDAwMDAwIDB4MCAweGQwMDAwMDAwCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgMHgwMjAwMDAwMCAweDAgMHhkMDAwMDAwMAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDB4MCAweDA4MDAwMDAwCisKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwIDB4MCAweDAwMDAwMDAwCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMCAweDAgMHgwMDAwMDAwMAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MCAweDAwODAwMDAwPjsKKyAg ICAgICAgICAgICAgICB9OworCX07CisKKwlib2FyZF90aW1lcnNAZjIwMjAwMDAgeworCQlk ZXZpY2VfdHlwZSA9ICJib2FyZF90aW1lcnMiOworCQlyZWcgPSA8MHhmMjAyMDAwMCAweDRj PjsKKwkJaW50ZXJydXB0cyA9IDwweGIgMT47CisJCWludGVycnVwdC1wYXJlbnQgPSA8JnNv Yzg1NDhfcGljPjsKKwl9OworCQorCXNlcmlhbEBmMjAxMTAwMCB7CisJCWRldmljZV90eXBl ID0gInNlcmlhbCI7CisJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7CisJCXJlZyA9IDwweGYy MDExMDAwIDB4MTAwPjsgCisJCXZpcnR1YWwtcmVnID0gPDB4ZjIwMTEwMDA+OworCQljbG9j ay1mcmVxdWVuY3kgPSA8MHgxYzIwMDA+OyAJCisJCWN1cnJlbnQtc3BlZWQgPSA8OTYwMD47 ICAKKwkJaW50ZXJydXB0cyA9IDwweGIgMT47CisJCWludGVycnVwdC1wYXJlbnQgPSA8JnNv Yzg1NDhfcGljPjsKKwl9OworCisJc2VyaWFsQGYyMDEyMDAwIHsKKwkJZGV2aWNlX3R5cGUg PSAic2VyaWFsIjsKKwkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKKwkJcmVnID0gPDB4ZjIw MTIwMDAgMHgxMDA+OyAKKwkJdmlydHVhbC1yZWcgPSA8MHhmMjAxMjAwMD47CisJCWNsb2Nr LWZyZXF1ZW5jeSA9IDwweDFjMjAwMD47IAkKKwkJY3VycmVudC1zcGVlZCA9IDw5NjAwPjsg IAorCQlpbnRlcnJ1cHRzID0gPDB4YiAxPjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmc29j ODU0OF9waWM+OworCX07CisKKwlzZXJpYWxAZjIwMTMwMDAgeworCQlkZXZpY2VfdHlwZSA9 ICJzZXJpYWwiOworCQljb21wYXRpYmxlID0gIm5zMTY1NTAiOworCQlyZWcgPSA8MHhmMjAx MzAwMCAweDEwMD47IAorCQl2aXJ0dWFsLXJlZyA9IDwweGYyMDEzMDAwPjsKKwkJY2xvY2st ZnJlcXVlbmN5ID0gPDB4MWMyMDAwPjsgCQorCQljdXJyZW50LXNwZWVkID0gPDk2MDA+OyAg CisJCWludGVycnVwdHMgPSA8MHhiIDE+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZzb2M4 NTQ4X3BpYz47CisJfTsKKworCXNlcmlhbEBmMjAxNDAwMCB7CisJCWRldmljZV90eXBlID0g InNlcmlhbCI7CisJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7CisJCXJlZyA9IDwweGYyMDE0 MDAwIDB4MTAwPjsgCisJCXZpcnR1YWwtcmVnID0gPDB4ZjIwMTQwMDA+OworCQljbG9jay1m cmVxdWVuY3kgPSA8MHgxYzIwMDA+OyAJCisJCWN1cnJlbnQtc3BlZWQgPSA8OTYwMD47ICAK KwkJaW50ZXJydXB0cyA9IDwweGIgMT47CisJCWludGVycnVwdC1wYXJlbnQgPSA8JnNvYzg1 NDhfcGljPjsKKwl9OworCisJY2hvc2VuIHsKKwkJYm9vdGFyZ3MgPSAicm9vdD0vZGV2L3Nk YTIgY29uc29sZT10dHlTMCw5NjAwIjsKKwkJbGludXgsc3Rkb3V0LXBhdGggPSAiL3NvYzg1 NDhAZjEwMDAwMDAvc2VyaWFsQDQ1MDAiOworCX07Cit9OwpkaWZmIC11IC0tbmV3LWZpbGUg LS1yZWN1cnNpdmUgbGludXgtMi42LjI5LjYub3JpZy9hcmNoL3Bvd2VycGMvYm9vdC9kdHMv bXZtZTcxMDAuZHRzIGxpbnV4LTIuNi4yOS42Lm1vZC9hcmNoL3Bvd2VycGMvYm9vdC9kdHMv bXZtZTcxMDAuZHRzCi0tLSBsaW51eC0yLjYuMjkuNi5vcmlnL2FyY2gvcG93ZXJwYy9ib290 L2R0cy9tdm1lNzEwMC5kdHMJMTk2OS0xMi0zMSAxNzowMDowMC4wMDAwMDAwMDAgLTA3MDAK KysrIGxpbnV4LTIuNi4yOS42Lm1vZC9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXZtZTcxMDAu ZHRzCTIwMDktMDctMjEgMTE6Mjg6MTcuMDAwMDAwMDAwIC0wNzAwCkBAIC0wLDAgKzEsNDYx IEBACisvKgorICogTVZNRTcxMDAgRGV2aWNlIFRyZWUgU291cmNlCisgKgorICogQXV0aG9y OiBBaml0IFByZW0gKEFqaXQuUHJlbUBlbWVyc29uLmNvbSkKKyAqCisgKiBDb3B5cmlnaHQg MjAwOCBFbWVyc29uIE5ldHdvcmsgUG93ZXIgRW1iZWRkZWQgQ29tcHV0aW5nIEluYy4KKyAq CisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBH TlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vu c2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisK KworL2R0cy12MS87CisKKy8geworCW1vZGVsID0gIk1WTUU3MTAwIjsKKwljb21wYXRpYmxl ID0gImVtZXJzb24sbXZtZTcxMDAiOworCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCSNzaXpl LWNlbGxzID0gPDE+OworCisgICAgICAgIGFsaWFzZXMgeworICAgICAgICAgICAgICAgIGV0 aGVybmV0MCA9ICZlbmV0MDsKKyAgICAgICAgICAgICAgICBldGhlcm5ldDEgPSAmZW5ldDE7 CisgICAgICAgICAgICAgICAgZXRoZXJuZXQyID0gJmVuZXQyOworICAgICAgICAgICAgICAg IGV0aGVybmV0MyA9ICZlbmV0MzsKKyAgICAgICAgICAgICAgICBzZXJpYWwwID0gJnNlcmlh bDA7CisgICAgICAgICAgICAgICAgcGNpMCA9ICZwY2kwOworICAgICAgICAgICAgICAgIHBj aTEgPSAmcGNpMTsKKyAgICAgICAgfTsKKworCWNwdXMgeworCQkjYWRkcmVzcy1jZWxscyA9 IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJUG93ZXJQQyw4NjQxQDAgeworCQkJ ZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCXJlZyA9IDwwPjsKKwkJCWQtY2FjaGUtbGluZS1z aXplID0gPDMyPjsJLy8gMzIgYnl0ZXMKKwkJCWktY2FjaGUtbGluZS1zaXplID0gPDMyPjsJ Ly8gMzIgYnl0ZXMKKwkJCWQtY2FjaGUtc2l6ZSA9IDwzMjc4Nj47CQkvLyBMMSwgMzJLCisJ CQlpLWNhY2hlLXNpemUgPSA8MzI3Njg+OwkJLy8gTDEsIDMySworCQkJdGltZWJhc2UtZnJl cXVlbmN5ID0gPDA+OwkvLyBmcm9tIGJvb3R3cmFwcGVyCisJCQlidXMtZnJlcXVlbmN5ID0g PDA+OwkvLyA1MzMgTUh6LCBmcm9tIGJ3CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CS8v IDEzMzMgTUh6LCBmcm9tIGJ3CisJCX07CisJCVBvd2VyUEMsODY0MUAxIHsKKwkJCWRldmlj ZV90eXBlID0gImNwdSI7CisJCQlyZWcgPSA8MT47CisJCQlkLWNhY2hlLWxpbmUtc2l6ZSA9 IDwzMj47CS8vIDMyIGJ5dGVzCisJCQlpLWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CS8vIDMy IGJ5dGVzCisJCQlkLWNhY2hlLXNpemUgPSA8MzI3Njg+OwkJLy8gTDEsIDMySworCQkJaS1j YWNoZS1zaXplID0gPDMyNzY4PjsJCS8vIEwxLCAzMksKKwkJCXRpbWViYXNlLWZyZXF1ZW5j eSA9IDwwPjsJLy8gZnJvbSBib290d3JhcHBlcgorCQkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsJ Ly8gNTMzIE1Iei4gZnJvbSBidworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwkvLyAxMzMz IE1IeiwgZnJvbSBidworCQl9OworCX07CisKKwltZW1vcnkgeworCQlkZXZpY2VfdHlwZSA9 ICJtZW1vcnkiOworCQlyZWcgPSA8MHgwMDAwMDAwMCAweDgwMDAwMDAwPjsJLy8gMkcgYXQg MHgwCisJfTsKKworICAgICAgICBsb2NhbGJ1c0BmMTAwNTAwMCB7CisgICAgICAgICAgICAg ICAgI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisgICAgICAgICAgICAgICAgI3NpemUtY2VsbHMg PSA8MT47CisgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9ICJmc2wsbXBjODY0MS1sb2Nh bGJ1cyIsICJzaW1wbGUtYnVzIjsKKyAgICAgICAgICAgICAgICByZWcgPSA8MHhmMTAwNTAw MCAweDEwMDA+OworICAgICAgICAgICAgICAgIGludGVycnVwdHMgPSA8MTkgMj47CisgICAg ICAgICAgICAgICAgaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisKKyAgICAgICAgICAg ICAgICByYW5nZXMgPSA8MCAwIDB4ZjgwMDAwMDAgMHgwODAwMDAwMD47CisKKyAgICAgICAg ICAgICAgICBmbGFzaEAwLDAgeworICAgICAgICAgICAgICAgICAgICAgICAgY29tcGF0aWJs ZSA9ICJjZmktZmxhc2giOworICAgICAgICAgICAgICAgICAgICAgICAgcmVnID0gPDAgMCAw eDA4MDAwMDAwPjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJhbmstd2lkdGggPSA8Mj47 CisgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2Utd2lkdGggPSA8Mj47CisgICAgICAg ICAgICAgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9IDwxPjsKKyAgICAgICAgICAgICAg ICAgICAgICAgICNzaXplLWNlbGxzID0gPDE+OworICAgICAgICAgICAgICAgICAgICAgICAg cGFydGl0aW9uQDAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbCA9 ICJrZXJuZWwiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWcgPSA8MHgw MDAwMDAwMCAweDAyMDAwMDAwPjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAg ICAgICAgICAgICAgICAgICAgICBwYXJ0aXRpb25AMjAwMDAwMCB7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGxhYmVsID0gImZzIjsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcmVnID0gPDB4MDIwMDAwMDAgMHgwNWUwMDAwMD47CisgICAgICAgICAg ICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgcGFydGl0aW9uQDdl MDAwMDAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbCA9ICJmaXJt d2FyZSBiIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnID0gPDB4MDdl MDAwMDAgMHgwMDEwMDAwMD47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl YWQtb25seTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAg ICAgICAgICBwYXJ0aXRpb25AN2YwMDAwMCB7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGxhYmVsID0gImZpcm13YXJlIGEiOworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICByZWcgPSA8MHgwN2YwMDAwMCAweDAwMTAwMDAwPjsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcmVhZC1vbmx5OworICAgICAgICAgICAgICAgICAgICAgICAg fTsKKyAgICAgICAgICAgICAgICB9OworICAgICAgICB9OworCisJc29jODY0MUBmMTAwMDAw MCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJ ZGV2aWNlX3R5cGUgPSAic29jIjsKKwkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKKwkJ cmFuZ2VzID0gPDB4MDAwMDAwMDAgMHhmMTAwMDAwMCAweDAwMTAwMDAwPjsKKwkJcmVnID0g PDB4ZjEwMDAwMDAgMHgwMDAwMTAwMD47CS8vIENDU1JCQVIKKwkJYnVzLWZyZXF1ZW5jeSA9 IDwwPjsJLy8gNTMzIE1Iei4gZnJvbSBidworCisgICAgICAgICAgICAgICAgbWVtb3J5LWNv bnRyb2xsZXJAMjAwMCB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0g ImZzbCxtcGM4NjQxLW1lbW9yeS1jb250cm9sbGVyIjsKKyAgICAgICAgICAgICAgICAgICAg ICAgIGRldmljZV90eXBlID0gIm1lbW9yeS1jb250cm9sbGVyIjsKKyAgICAgICAgICAgICAg ICAgICAgICAgIHJlZyA9IDwweDIwMDAgMHhlNjA+OworICAgICAgICAgICAgICAgICAgICAg ICAgdmlydHVhbC1yZWcgPSA8MHhmMTAwMjAwMD47CisJCQlpbnRlcnJ1cHRzID0gPDE4IDI+ OworICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47 CisgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgIGwyX2NhY2hlQDIwMDAw IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZV90eXBlID0gImwyX2NhY2hlIjsK KyAgICAgICAgICAgICAgICAgICAgICAgIHJlZyA9IDwweDIwMDAwIDB4ZTYwPjsKKyAgICAg ICAgICAgICAgICAgICAgICAgIHZpcnR1YWwtcmVnID0gPDB4ZjEwMjAwMDA+OworICAgICAg ICAgICAgICAgICAgICAgICAgaW50ZXJydXB0cyA9IDwxNiAyPjsKKyAgICAgICAgICAgICAg ICAgICAgICAgIGludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworICAgICAgICAgICAgICAg IH07CisKKworCQlpMmNAMzAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNz aXplLWNlbGxzID0gPDA+OworCQkJY2VsbC1pbmRleCA9IDwwPjsKKwkJCWRldmljZV90eXBl ID0gImkyYyI7CisJCQljb21wYXRpYmxlID0gImZzbC1pMmMiOworCQkJcmVnID0gPDB4MzAw MCAweDEwMD47CisJCQl2aXJ0dWFsLXJlZyA9IDwweGYxMDAzMDAwPjsKKwkJCWludGVycnVw dHMgPSA8NDMgMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCWRmc3Jy OworCQkJdGhlcm1vc3RhdEA0YyB7CisJCQkJZGV2aWNlX3R5cGUgPSAidGhlcm1vc3RhdCI7 CisJCQkJY29tcGF0aWJsZSA9ICJhZHQ3NDYxIiwgImxtOTAiOworCQkJCXJlZyA9IDwweDRj PjsKKyAgICAgICAgICAgICAgICAgICAgICAgIAlpbnRlcnJ1cHRzID0gPDkgMT47CisgICAg ICAgICAgICAgICAgCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQl9OworCQl9 OworCisJCWkyY0AzMTAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUt Y2VsbHMgPSA8MD47CisJCQljZWxsLWluZGV4ID0gPDE+OworCQkJZGV2aWNlX3R5cGUgPSAi aTJjIjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7CisJCQlyZWcgPSA8MHgzMTAwIDB4 MTAwPjsKKwkJCXZpcnR1YWwtcmVnID0gPDB4ZjEwMDMxMDA+OworCQkJaW50ZXJydXB0cyA9 IDw0MyAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJZGZzcnI7CisJ CX07CisKKwkJbWRpb0AyNDUyMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNz aXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsK KwkJCXJlZyA9IDwweDI0NTIwIDB4MjA+OworCisJCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7 CisJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQljb21wYXRpYmxlID0g ImJyb2FkY29tLGJjbTU0ODIiOworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+Owor CQkJCWludGVycnVwdHMgPSA8MTAgMT47CisJCQkJcmVnID0gPDE+OworCQkJfTsKKwkJCXBo eTE6IGV0aGVybmV0LXBoeUAxIHsKKwkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHki OworCQkJCWNvbXBhdGlibGUgPSAiYnJvYWRjb20sYmNtNTQ4MiI7CisJCQkJaW50ZXJydXB0 LXBhcmVudCA9IDwmbXBpYz47CisJCQkJaW50ZXJydXB0cyA9IDwxMCAxPjsKKwkJCQlyZWcg PSA8Mj47CisJCQl9OworCQkJcGh5MjogZXRoZXJuZXQtcGh5QDIgeworCQkJCWRldmljZV90 eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJY29tcGF0aWJsZSA9ICJicm9hZGNvbSxiY201 NDgyIjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQlpbnRlcnJ1cHRz ID0gPDEwIDE+OworCQkJCXJlZyA9IDwzPjsKKwkJCX07CisJCQlwaHkzOiBldGhlcm5ldC1w aHlAMyB7CisJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQljb21wYXRp YmxlID0gImJyb2FkY29tLGJjbTU0ODIiOworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1w aWM+OworCQkJCWludGVycnVwdHMgPSA8MTAgMT47CisJCQkJcmVnID0gPDQ+OworCQkJfTsK KwkJfTsKKworCQllbmV0MDogZXRoZXJuZXRAMjQwMDAgeworCQkJY2VsbC1pbmRleCA9IDww PjsKKwkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOworCQkJbW9kZWwgPSAiVFNFQyI7CisJ CQljb21wYXRpYmxlID0gImdpYW5mYXIiOworCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsK KwkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOworCQkJaW50 ZXJydXB0cyA9IDwyOSAyIDMwIDIgMzQgMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZt cGljPjsKKwkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OworCQkJcGh5LWNvbm5lY3Rpb24tdHlw ZSA9ICJyZ21paS1pZCI7CisJCX07CisKKwkJZW5ldDE6IGV0aGVybmV0QDI1MDAwIHsKKwkJ CWNlbGwtaW5kZXggPSA8MT47CisJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKKwkJCW1v ZGVsID0gIlRTRUMiOworCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKKwkJCXJlZyA9IDww eDI1MDAwIDB4MTAwMD47CisJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAg MDAgMDAgXTsKKwkJCWludGVycnVwdHMgPSA8MzUgMiAzNiAyIDQwIDI+OworCQkJaW50ZXJy dXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlwaHktaGFuZGxlID0gPCZwaHkxPjsKKwkJCXBo eS1jb25uZWN0aW9uLXR5cGUgPSAicmdtaWktaWQiOworCQl9OworCQkKKwkJZW5ldDI6IGV0 aGVybmV0QDI2MDAwIHsKKwkJCWNlbGwtaW5kZXggPSA8Mj47CisJCQlkZXZpY2VfdHlwZSA9 ICJuZXR3b3JrIjsKKwkJCW1vZGVsID0gIlRTRUMiOworCQkJY29tcGF0aWJsZSA9ICJnaWFu ZmFyIjsKKwkJCXJlZyA9IDwweDI2MDAwIDB4MTAwMD47CisJCQlsb2NhbC1tYWMtYWRkcmVz cyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKKwkJCWludGVycnVwdHMgPSA8MzEgMiAzMiAy IDMzIDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlwaHktaGFuZGxl ID0gPCZwaHkyPjsKKwkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAicmdtaWktaWQiOworCQl9 OworCisJCWVuZXQzOiBldGhlcm5ldEAyNzAwMCB7CisJCQljZWxsLWluZGV4ID0gPDM+Owor CQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CisJCQltb2RlbCA9ICJUU0VDIjsKKwkJCWNv bXBhdGlibGUgPSAiZ2lhbmZhciI7CisJCQlyZWcgPSA8MHgyNzAwMCAweDEwMDA+OworCQkJ bG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CisJCQlpbnRlcnJ1 cHRzID0gPDM3IDIgMzggMiAzOSAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+ OworCQkJcGh5LWhhbmRsZSA9IDwmcGh5Mz47CisJCQlwaHktY29ubmVjdGlvbi10eXBlID0g InJnbWlpLWlkIjsKKwkJfTsKKworCQlzZXJpYWwwOiBzZXJpYWxANDUwMCB7CisJCQljZWxs LWluZGV4ID0gPDA+OworCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKKwkJCWNvbXBhdGli bGUgPSAibnMxNjU1MCI7CisJCQlyZWcgPSA8MHg0NTAwIDB4MTAwPjsKKwkJCXZpcnR1YWwt cmVnID0gPDB4ZjEwMDQ1MDA+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCQkJY3Vy cmVudC1zcGVlZCA9IDw5NjAwPjsKKwkJCWludGVycnVwdHMgPSA8NDIgMj47CisJCQlpbnRl cnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJfTsKKworCQltcGljOiBwaWNANDAwMDAgewor CQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJ CQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJ CQlyZWcgPSA8MHg0MDAwMCAweDQwMDAwPjsKKwkJCWNvbXBhdGlibGUgPSAiY2hycCxvcGVu LXBpYyI7CisJCQlkZXZpY2VfdHlwZSA9ICJvcGVuLXBpYyI7CisgICAgICAgICAgICAgICAg ICAgICAgICBiaWctZW5kaWFuOworCQl9OworCisgICAgICAgICAgICAgICAgZ2xvYmFsLXV0 aWxpdGllc0BlMDAwMCB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0g ImZzbCxtcGM4NjQxLWd1dHMiOworICAgICAgICAgICAgICAgICAgICAgICAgcmVnID0gPDB4 ZTAwMDAgMHgxMDAwPjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZzbCxoYXMtcnN0Y3I7 CisgICAgICAgICAgICAgICAgfTsKKworCQlkbWFAMjEzMDAgeyAKKwkJCSNhZGRyZXNzLWNl bGxzID0gPDE+OyAKKwkJCSNzaXplLWNlbGxzID0gPDE+OyAKKwkJCWNvbXBhdGlibGUgPSAi ZnNsLG1wYzg2NDEtZG1hIiwgImZzbCxlbG9wbHVzLWRtYSI7IAorCQkJcmVnID0gPDB4MjEz MDAgND47IAorCQkJY2VsbC1pbmRleCA9IDwwPjsKKwkJCXJhbmdlcyA9IDwwIDB4MjExMDAg MHgyMDA+OyAKKwkJCWRtYS1jaGFubmVsQDAgeyAKKwkJCQljb21wYXRpYmxlID0gImZzbCxt cGM4NjQxLWRtYS1jaGFubmVsIiwKKwkJCQkJCSJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7 IAorCQkJCXJlZyA9IDwwIDB4ODA+OyAKKwkJCQljZWxsLWluZGV4ID0gPDA+OworCQkJCWlu dGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OyAKKwkJCQlpbnRlcnJ1cHRzID0gPDIwIDI+OyAK KwkJCX07IAorCQkJZG1hLWNoYW5uZWxAODAgeyAKKwkJCQljb21wYXRpYmxlID0gImZzbCxt cGM4NjQxLWRtYS1jaGFubmVsIiwKKwkJCQkJCSJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7 IAorCQkJCXJlZyA9IDwweDgwIDB4ODA+OyAKKwkJCQljZWxsLWluZGV4ID0gPDE+OworCQkJ CWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OyAKKwkJCQlpbnRlcnJ1cHRzID0gPDIxIDI+ OyAKKwkJCX07IAorCQkJZG1hLWNoYW5uZWxAMTAwIHsgCisJCQkJY29tcGF0aWJsZSA9ICJm c2wsbXBjODY0MS1kbWEtY2hhbm5lbCIsCisJCQkJCQkiZnNsLGVsb3BsdXMtZG1hLWNoYW5u ZWwiOyAKKwkJCQlyZWcgPSA8MHgxMDAgMHg4MD47IAorCQkJCWNlbGwtaW5kZXggPSA8Mj47 CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47IAorCQkJCWludGVycnVwdHMgPSA8 MjIgMj47IAorCQkJfTsgCisJCQlkbWEtY2hhbm5lbEAxODAgeyAKKwkJCQljb21wYXRpYmxl ID0gImZzbCxtcGM4NjQxLWRtYS1jaGFubmVsIiwKKwkJCQkJCSJmc2wsZWxvcGx1cy1kbWEt Y2hhbm5lbCI7IAorCQkJCXJlZyA9IDwweDE4MCAweDgwPjsgCisJCQkJY2VsbC1pbmRleCA9 IDwzPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsgCisJCQkJaW50ZXJydXB0 cyA9IDwyMyAyPjsgCisJCQl9OyAKKwkJfTsgCisgICAgICAgIH07CisKKwlwY2kwOiBwY2ll QGYxMDA4MDAwIHsKKwkJY2VsbC1pbmRleCA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJmc2ws bXBjODY0MS1wY2llIjsKKwkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJI2ludGVycnVwdC1j ZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8Mj47CisJCSNhZGRyZXNzLWNlbGxzID0g PDM+OworCQlyZWcgPSA8MHhmMTAwODAwMCAweDEwMDA+OworCQlidXMtcmFuZ2UgPSA8MHgw IDB4ZmY+OworCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAweDAgMHg4MDAwMDAwMCAweDgwMDAw MDAwIDB4MCAweDEwMDAwMDAwCisJCQkgIDB4NDIwMDAwMDAgMHgwIDB4OTAwMDAwMDAgMHg5 MDAwMDAwMCAweDAgMHg0MDAwMDAwMAorCQkJICAweDAxMDAwMDAwIDB4MCAweDAwMDAwMDAw IDB4ZjAwMDAwMDAgMHgwIDB4MDAxMDAwMDA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MD47 CisJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQlpbnRlcnJ1cHRzID0gPDI0IDI+ OworCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmODAwIDAgMCA3PjsKKwkJaW50ZXJydXB0 LW1hcCA9IDwKKwkJCS8qIElEU0VMIDB4MCAqLworCQkJMHgwMDAwIDAgMCAxICZtcGljIDAg MQorCQkJMHgwMDAwIDAgMCAyICZtcGljIDEgMQorCQkJMHgwMDAwIDAgMCAzICZtcGljIDIg MQorCQkJMHgwMDAwIDAgMCA0ICZtcGljIDMgMQorCQkJPjsKKwkJcGNpZUAwIHsKKwkJCXJl ZyA9IDwwIDAgMCAwIDA+OworCQkJI3NpemUtY2VsbHMgPSA8Mj47CisJCQkjYWRkcmVzcy1j ZWxscyA9IDwzPjsKKwkJCWRldmljZV90eXBlID0gInBjaSI7CisJCQlyYW5nZXMgPSA8MHgw MjAwMDAwMCAweDAgMHg4MDAwMDAwMAorCQkJICAJICAweDAyMDAwMDAwIDB4MCAweDgwMDAw MDAwCisJCQkJICAweDAgMHgxMDAwMDAwMAorCisJCQkJICAweDQyMDAwMDAwIDB4MCAweDkw MDAwMDAwCisJCQkJICAweDQyMDAwMDAwIDB4MCAweDkwMDAwMDAwCisJCQkJICAweDAgMHg0 MDAwMDAwMAorCisJCQkJICAweDAxMDAwMDAwIDB4MCAweDAwMDAwMDAwCisJCQkJICAweDAx MDAwMDAwIDB4MCAweDAwMDAwMDAwCisJCQkJICAweDAgMHgwMDEwMDAwMD47CisJCX07CisJ fTsKKworCXBjaTE6IHBjaWVAZjEwMDkwMDAgeworCQljZWxsLWluZGV4ID0gPDE+OworCQlj b21wYXRpYmxlID0gImZzbCxtcGM4NjQxLXBjaWUiOworCQlkZXZpY2VfdHlwZSA9ICJwY2ki OworCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJ I2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCXJlZyA9IDwweGYxMDA5MDAwIDB4MTAwMD47CisJ CWJ1cy1yYW5nZSA9IDwwIDB4ZmY+OworCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAweDAgMHhk MDAwMDAwMCAweGQwMDAwMDAwIDB4MCAweDEwMDAwMDAwCisJCQkgIDB4MDEwMDAwMDAgMHgw IDB4MDAwMDAwMDAgMHhmMDEwMDAwMCAweDAgMHgwMDEwMDAwMD47CisJCWNsb2NrLWZyZXF1 ZW5jeSA9IDwwPjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCWludGVycnVw dHMgPSA8MjUgMj47CisJCWludGVycnVwdC1tYXAtbWFzayA9IDwweGY4MDAgMCAwIDc+Owor CQlpbnRlcnJ1cHQtbWFwID0gPAorCQkJLyogSURTRUwgMHgwICovCisJCQkweDAwMDAgMCAw IDEgJm1waWMgNCAxCisJCQkweDAwMDAgMCAwIDIgJm1waWMgNSAxCisJCQkweDAwMDAgMCAw IDMgJm1waWMgNiAxCisJCQkweDAwMDAgMCAwIDQgJm1waWMgNyAxCisJCQk+OworCQlwY2ll QDAgeworCQkJcmVnID0gPDAgMCAwIDAgMD47CisJCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJ CSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJCXJh bmdlcyA9IDwweDAyMDAwMDAwIDB4MCAweGQwMDAwMDAwCisJCQkgIAkgIDB4MDIwMDAwMDAg MHgwIDB4ZDAwMDAwMDAKKwkJCQkgIDB4MCAweDEwMDAwMDAwCisKKwkJCQkgIDB4MDEwMDAw MDAgMHgwIDB4MDAwMDAwMDAKKwkJCQkgIDB4MDEwMDAwMDAgMHgwIDB4MDAwMDAwMDAKKwkJ CQkgIDB4MCAweDAwMTAwMDAwPjsKKwkJfTsKKwl9OworCisgICAgICAgIGJvYXJkX3RpbWVy c0BmMjAyMDAwMCB7CisgICAgICAgICAgICAgICAgZGV2aWNlX3R5cGUgPSAiYm9hcmRfdGlt ZXJzIjsKKyAgICAgICAgICAgICAgICByZWcgPSA8MHhmMjAyMDAwMCAweDRjPjsKKyAgICAg ICAgICAgICAgICBpbnRlcnJ1cHRzID0gPDExIDE+OworICAgICAgICAgICAgICAgIGludGVy cnVwdC1wYXJlbnQgPSA8Jm1waWM+OworICAgICAgICB9OworCisgICAgICAgIHNlcmlhbEBm MjAxMTAwMCB7CisgICAgICAgICAgICAgICAgZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKKyAg ICAgICAgICAgICAgICBjb21wYXRpYmxlID0gIm5zMTY1NTAiOworICAgICAgICAgICAgICAg IHJlZyA9IDwweGYyMDExMDAwIDB4MTAwPjsKKyAgICAgICAgICAgICAgICB2aXJ0dWFsLXJl ZyA9IDwweGYyMDExMDAwPjsKKyAgICAgICAgICAgICAgICBjbG9jay1mcmVxdWVuY3kgPSA8 MHgxYzIwMDA+OworICAgICAgICAgICAgICAgIGN1cnJlbnQtc3BlZWQgPSA8OTYwMD47ICAv LyA5NjAwPTB4MjU4MAorICAgICAgICAgICAgICAgIGludGVycnVwdHMgPSA8MTEgMT47Cisg ICAgICAgICAgICAgICAgaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisgICAgICAgIH07 CisKKyAgICAgICAgc2VyaWFsQGYyMDEyMDAwIHsKKyAgICAgICAgICAgICAgICBkZXZpY2Vf dHlwZSA9ICJzZXJpYWwiOworICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSAibnMxNjU1 MCI7CisgICAgICAgICAgICAgICAgcmVnID0gPDB4ZjIwMTIwMDAgMHgxMDA+OworICAgICAg ICAgICAgICAgIHZpcnR1YWwtcmVnID0gPDB4ZjIwMTIwMDA+OworICAgICAgICAgICAgICAg IGNsb2NrLWZyZXF1ZW5jeSA9IDwweDFjMjAwMD47CisgICAgICAgICAgICAgICAgY3VycmVu dC1zcGVlZCA9IDw5NjAwPjsgIC8vIDk2MDA9MHgyNTgwCisgICAgICAgICAgICAgICAgaW50 ZXJydXB0cyA9IDwxMSAxPjsKKyAgICAgICAgICAgICAgICBpbnRlcnJ1cHQtcGFyZW50ID0g PCZtcGljPjsKKyAgICAgICAgfTsKKworICAgICAgICBzZXJpYWxAZjIwMTMwMDAgeworICAg ICAgICAgICAgICAgIGRldmljZV90eXBlID0gInNlcmlhbCI7CisgICAgICAgICAgICAgICAg Y29tcGF0aWJsZSA9ICJuczE2NTUwIjsKKyAgICAgICAgICAgICAgICByZWcgPSA8MHhmMjAx MzAwMCAweDEwMD47CisgICAgICAgICAgICAgICAgdmlydHVhbC1yZWcgPSA8MHhmMjAxMzAw MD47CisgICAgICAgICAgICAgICAgY2xvY2stZnJlcXVlbmN5ID0gPDB4MWMyMDAwPjsKKyAg ICAgICAgICAgICAgICBjdXJyZW50LXNwZWVkID0gPDk2MDA+OyAgLy8gOTYwMD0weDI1ODAK KyAgICAgICAgICAgICAgICBpbnRlcnJ1cHRzID0gPDExIDE+OworICAgICAgICAgICAgICAg IGludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworICAgICAgICB9OworCisKKyAgICAgICAg c2VyaWFsQGYyMDE0MDAwIHsKKyAgICAgICAgICAgICAgICBkZXZpY2VfdHlwZSA9ICJzZXJp YWwiOworICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSAibnMxNjU1MCI7CisgICAgICAg ICAgICAgICAgcmVnID0gPDB4ZjIwMTQwMDAgMHgxMDA+OworICAgICAgICAgICAgICAgIHZp cnR1YWwtcmVnID0gPDB4ZjIwMTQwMDA+OworICAgICAgICAgICAgICAgIGNsb2NrLWZyZXF1 ZW5jeSA9IDwweDFjMjAwMD47CisgICAgICAgICAgICAgICAgY3VycmVudC1zcGVlZCA9IDw5 NjAwPjsgIC8vIDk2MDA9MHgyNTgwCisgICAgICAgICAgICAgICAgaW50ZXJydXB0cyA9IDwx MSAxPjsKKyAgICAgICAgICAgICAgICBpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKyAg ICAgICAgfTsKKworCWNob3NlbiB7CisJCWJvb3RhcmdzID0gInJvb3Q9L2Rldi9yYW0wIHJ3 IGNvbnNvbGU9dHR5UzAsOTYwMCByYW1kaXNrX3NpemU9NjQwMDAiOworCQlsaW51eCxpbml0 cmQtc3RhcnQgPTwwMDAwMDAwMD47IAorCQlsaW51eCxpbml0cmQtZW5kID08MDAwMDAwMDA+ OyAKKwkJbGludXgsc3Rkb3V0LXBhdGggPSAiL3NvYzg2NDFAZjEwMDAwMDAvc2VyaWFsQDQ1 MDAiOworCX07CisKK307CmRpZmYgLXUgLS1uZXctZmlsZSAtLXJlY3Vyc2l2ZSBsaW51eC0y LjYuMjkuNi5vcmlnL2FyY2gvcG93ZXJwYy9ib290L21haW4uYyBsaW51eC0yLjYuMjkuNi5t b2QvYXJjaC9wb3dlcnBjL2Jvb3QvbWFpbi5jCi0tLSBsaW51eC0yLjYuMjkuNi5vcmlnL2Fy Y2gvcG93ZXJwYy9ib290L21haW4uYwkyMDA5LTA3LTAyIDE2OjQxOjIwLjAwMDAwMDAwMCAt MDcwMAorKysgbGludXgtMi42LjI5LjYubW9kL2FyY2gvcG93ZXJwYy9ib290L21haW4uYwky MDA5LTA3LTIxIDExOjI4OjE3LjAwMDAwMDAwMCAtMDcwMApAQCAtMTAsNiArMTAsNyBAQAog ICovCiAjaW5jbHVkZSA8c3RkYXJnLmg+CiAjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVk ZSAiLi4vLi4vLi4vaW5jbHVkZS9saW51eC9hdXRvY29uZi5oIgogI2luY2x1ZGUgImVsZi5o IgogI2luY2x1ZGUgInBhZ2UuaCIKICNpbmNsdWRlICJzdHJpbmcuaCIKQEAgLTE0Miw4ICsx NDMsMTYgQEAKIHN0YXRpYyBjaGFyIGNtZGxpbmVbQ09NTUFORF9MSU5FX1NJWkVdCiAJX19h dHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIl9fYnVpbHRpbl9jbWRsaW5lIikpKTsKIAorI2lm ZGVmIENPTkZJR19DTURMSU5FX0JPT0wKK3N0YXRpYyBjaGFyIGNvbXBpbGVkX3N0cmluZ1tD T01NQU5EX0xJTkVfU0laRV0gPSBDT05GSUdfQ01ETElORTsKKyNlbmRpZgorCiBzdGF0aWMg dm9pZCBwcmVwX2NtZGxpbmUodm9pZCAqY2hvc2VuKQogeworI2lmZGVmIENPTkZJR19DTURM SU5FX0JPT0wKKwltZW1jcHkgKGNtZGxpbmUsIGNvbXBpbGVkX3N0cmluZywgQ09NTUFORF9M SU5FX1NJWkUpOworI2VuZGlmCisKIAlpZiAoY21kbGluZVswXSA9PSAnXDAnKQogCQlnZXRw cm9wKGNob3NlbiwgImJvb3RhcmdzIiwgY21kbGluZSwgQ09NTUFORF9MSU5FX1NJWkUtMSk7 CiAKZGlmZiAtdSAtLW5ldy1maWxlIC0tcmVjdXJzaXZlIGxpbnV4LTIuNi4yOS42Lm9yaWcv YXJjaC9wb3dlcnBjL2Jvb3QvTWFrZWZpbGUgbGludXgtMi42LjI5LjYubW9kL2FyY2gvcG93 ZXJwYy9ib290L01ha2VmaWxlCi0tLSBsaW51eC0yLjYuMjkuNi5vcmlnL2FyY2gvcG93ZXJw Yy9ib290L01ha2VmaWxlCTIwMDktMDctMDIgMTY6NDE6MjAuMDAwMDAwMDAwIC0wNzAwCisr KyBsaW51eC0yLjYuMjkuNi5tb2QvYXJjaC9wb3dlcnBjL2Jvb3QvTWFrZWZpbGUJMjAwOS0w OC0xMyAxNDoxMjo1NS4wMDAwMDAwMDAgLTA3MDAKQEAgLTYwLDcgKzYwLDcgQEAKIAkJZ3Vu emlwX3V0aWwuYyBlbGZfdXRpbC5jICQoemxpYikgZGV2dHJlZS5jIG9mbGliLmMgb2Zjb25z b2xlLmMgXAogCQk0eHguYyBlYm9ueS5jIG12NjR4NjAuYyBtcHNjLmMgbXY2NHg2MF9pMmMu YyBjdWJvb3QuYyBiYW1ib28uYyBcCiAJCWNwbS1zZXJpYWwuYyBzdGRsaWIuYyBtcGM1Mnh4 LXBzYy5jIHBsYW5ldGNvcmUuYyB1YXJ0bGl0ZS5jIFwKLQkJZnNsLXNvYy5jIG1wYzh4eC5j IHBxMi5jCisJCWZzbC1zb2MuYyBtcGM4eHguYyBwcTIuYyAKIHNyYy1wbGF0IDo9IG9mLmMg Y3Vib290LTUyeHguYyBjdWJvb3QtODI0eC5jIGN1Ym9vdC04M3h4LmMgY3Vib290LTg1eHgu YyBob2xseS5jIFwKIAkJY3Vib290LWVib255LmMgdHJlZWJvb3QtZWJvbnkuYyBwcnBtYzI4 MDAuYyBcCiAJCXBzMy1oZWFkLlMgcHMzLWh2Y2FsbC5TIHBzMy5jIHRyZWVib290LWJhbWJv by5jIGN1Ym9vdC04eHguYyBcCkBAIC03MCw3ICs3MCw4IEBACiAJCWN1Ym9vdC1rYXRtYWku YyBjdWJvb3QtcmFpbmllci5jIHJlZGJvb3QtOHh4LmMgZXA4MjQ4ZS5jIFwKIAkJY3Vib290 LXdhcnAuYyBjdWJvb3QtODV4eC1jcG0yLmMgY3Vib290LXlvc2VtaXRlLmMgc2ltcGxlYm9v dC5jIFwKIAkJdmlydGV4NDA1LWhlYWQuUyB2aXJ0ZXguYyByZWRib290LTgzeHguYyBjdWJv b3Qtc2FtNDQwZXAuYyBcCi0JCWN1Ym9vdC1hY2FkaWEuYworCQljdWJvb3QtYWNhZGlhLmMg cHBsdXNib290LW12bWUzMTAwLmMgcHBsdXNib290LW12bWU3MTAwLmMgXAorCQlwcGx1c2Jv b3QtbXZtZTQxMDAuYyBwcGx1c2Jvb3QtY3BjaTYyMDAuYwogc3JjLWJvb3QgOj0gJChzcmMt d2xpYikgJChzcmMtcGxhdCkgZW1wdHkuYwogCiBzcmMtYm9vdCA6PSAkKGFkZHByZWZpeCAk KG9iaikvLCAkKHNyYy1ib290KSkKQEAgLTEyNCw3ICsxMjUsNyBAQAogJChvYmopL3dyYXBw ZXIuYTogJChvYmotd2xpYikgRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZCxib290YXIpCiAK LWhvc3Rwcm9ncy15CTo9IGFkZG5vdGUgYWRkUmFtRGlzayBoYWNrLWNvZmYgbWt0cmVlIGR0 YworaG9zdHByb2dzLXkJOj0gYWRkbm90ZSBhZGRSYW1EaXNrIGhhY2stY29mZiBta3RyZWUg ZHRjIG1rcHJlcAogCiB0YXJnZXRzCQkrPSAkKHBhdHN1YnN0ICQob2JqKS8lLCUsJChvYmot Ym9vdCkgd3JhcHBlci5hKQogZXh0cmEteQkJOj0gJChvYmopL3dyYXBwZXIuYSAkKG9iai1w bGF0KSAkKG9iaikvZW1wdHkubyBcCkBAIC0xMzMsNyArMTM0LDcgQEAKIGR0c3RyZWUJCTo9 ICQoc3JjdHJlZSkvJChzcmMpL2R0cwogCiB3cmFwcGVyCQk6PSQoc3JjdHJlZSkvJChzcmMp L3dyYXBwZXIKLXdyYXBwZXJiaXRzCTo9ICQoZXh0cmEteSkgJChhZGRwcmVmaXggJChvYmop LyxhZGRub3RlIGhhY2stY29mZiBta3RyZWUgZHRjKSBcCit3cmFwcGVyYml0cwk6PSAkKGV4 dHJhLXkpICQoYWRkcHJlZml4ICQob2JqKS8sYWRkbm90ZSBoYWNrLWNvZmYgbWt0cmVlIG1r cHJlcCBkdGMpIFwKIAkJCSQod3JhcHBlcikgRk9SQ0UKIAogIyMjIyMjIyMjIyMjIwpAQCAt MjI3LDYgKzIyOCw3IEBACiBpbWFnZS0kKENPTkZJR19XQVJQKQkJCSs9IGN1SW1hZ2Uud2Fy cAogaW1hZ2UtJChDT05GSUdfWU9TRU1JVEUpCQkrPSBjdUltYWdlLnlvc2VtaXRlCiAKKwog IyBCb2FyZCBwb3J0cyBpbiBhcmNoL3Bvd2VycGMvcGxhdGZvcm0vOHh4L0tjb25maWcKIGlt YWdlLSQoQ09ORklHX01QQzg2WEFEUykJCSs9IGN1SW1hZ2UubXBjODY2YWRzCiBpbWFnZS0k KENPTkZJR19NUEM4ODVBRFMpCQkrPSBjdUltYWdlLm1wYzg4NWFkcwpAQCAtMjY4LDYgKzI3 MCwxMiBAQAogaW1hZ2UtJChDT05GSUdfU0JDODU0OCkJCQkrPSBjdUltYWdlLnNiYzg1NDgK IGltYWdlLSQoQ09ORklHX1NCQzg1NjApCQkJKz0gY3VJbWFnZS5zYmM4NTYwCiBpbWFnZS0k KENPTkZJR19LU0k4NTYwKQkJCSs9IGN1SW1hZ2Uua3NpODU2MAoraW1hZ2UtJChDT05GSUdf TVZNRTMxMDApCQkrPSBwcGx1c0ltYWdlLm12bWUzMTAwCitpbWFnZS0kKENPTkZJR19NVk1F NDEwMCkJCSs9IHBwbHVzSW1hZ2UubXZtZTQxMDAKK2ltYWdlLSQoQ09ORklHX0NQQ0k2MjAw KQkJKz0gcHBsdXNJbWFnZS5jcGNpNjIwMAorCisjIEJvYXJkIHBvcnRzIGluIGFyY2gvcG93 ZXJwYy9wbGF0Zm9ybS84Nnh4L0tjb25maWcKK2ltYWdlLSQoQ09ORklHX01WTUU3MTAwKSAg ICAgICAgICAgICAgICArPSBwcGx1c0ltYWdlLm12bWU3MTAwCiAKICMgQm9hcmQgcG9ydHMg aW4gYXJjaC9wb3dlcnBjL3BsYXRmb3JtL2VtYmVkZGVkNnh4L0tjb25maWcKIGltYWdlLSQo Q09ORklHX1NUT1JDRU5URVIpCQkrPSBjdUltYWdlLnN0b3JjZW50ZXIKQEAgLTI4Nyw3ICsy OTUsOCBAQAogaW5pdHJkLXkgOj0gJChwYXRzdWJzdCB6SW1hZ2UlLCB6SW1hZ2UuaW5pdHJk JSwgXAogCQkkKHBhdHN1YnN0IGR0YkltYWdlJSwgZHRiSW1hZ2UuaW5pdHJkJSwgXAogCQkk KHBhdHN1YnN0IHNpbXBsZUltYWdlJSwgc2ltcGxlSW1hZ2UuaW5pdHJkJSwgXAotCQkkKHBh dHN1YnN0IHRyZWVJbWFnZSUsIHRyZWVJbWFnZS5pbml0cmQlLCAkKGltYWdlLXkpKSkpKQor CQkkKHBhdHN1YnN0IHRyZWVJbWFnZSUsIHRyZWVJbWFnZS5pbml0cmQlLCAkKGltYWdlLXkp KSBcCisJCSQocGF0c3Vic3QgcHBsdXNJbWFnZSUsIHBwbHVzSW1hZ2UuaW5pdHJkJSwgJChp bWFnZS15KSkpKSkKIGluaXRyZC15IDo9ICQoZmlsdGVyLW91dCAkKGltYWdlLXkpLCAkKGlu aXRyZC15KSkKIHRhcmdldHMJKz0gJChpbWFnZS15KSAkKGluaXRyZC15KQogCkBAIC0zNDEs NiArMzUwLDEyIEBACiAkKG9iaikvdHJlZUltYWdlLiU6IHZtbGludXggJChvYmopLyUuZHRi ICQod3JhcHBlcmJpdHMpCiAJJChjYWxsIGlmX2NoYW5nZWQsd3JhcCx0cmVlYm9vdC0kKiws JChvYmopLyQqLmR0YikKIAorJChvYmopL3BwbHVzSW1hZ2UuaW5pdHJkLiU6IHZtbGludXgg JChvYmopLyUuZHRiICQod3JhcHBlcmJpdHMpCisJJChjYWxsIGlmX2NoYW5nZWQsd3JhcCxw cGx1c2Jvb3QtJCosLCQob2JqKS8kKi5kdGIsJChvYmopL3JhbWRpc2suaW1hZ2UuZ3opCisK KyQob2JqKS9wcGx1c0ltYWdlLiU6IHZtbGludXggJChvYmopLyUuZHRiICQod3JhcHBlcmJp dHMpCisJJChjYWxsIGlmX2NoYW5nZWQsd3JhcCxwcGx1c2Jvb3QtJCosLCQob2JqKS8kKi5k dGIpCisKICMgUnVsZSB0byBidWlsZCBkZXZpY2UgdHJlZSBibG9icwogJChvYmopLyUuZHRi OiAkKGR0c3RyZWUpLyUuZHRzICQob2JqKS9kdGMKIAkkKG9iaikvZHRjIC1PIGR0YiAtbyAk KG9iaikvJCouZHRiIC1iIDAgJChEVFNfRkxBR1MpICQoZHRzdHJlZSkvJCouZHRzCkBAIC0z NjIsNyArMzc3LDcgQEAKIGNsZWFuLWZpbGVzICs9ICQoaW1hZ2UtKSAkKGluaXRyZC0pIGN1 SW1hZ2UuKiBkdGJJbWFnZS4qIHRyZWVJbWFnZS4qIFwKIAl6SW1hZ2UgekltYWdlLmluaXRy ZCB6SW1hZ2UuY2hycCB6SW1hZ2UuY29mZiB6SW1hZ2UuaG9sbHkgXAogCXpJbWFnZS5pc2Vy aWVzIHpJbWFnZS5taWJvb3QgekltYWdlLnBtYWMgekltYWdlLnBzZXJpZXMgXAotCW90aGVy b3MuYmxkICouZHRiCisJb3RoZXJvcy5ibGQgKi5kdGIgcHBsdXNJbWFnZS4qCiAKICMgY2xl YW4gdXAgZmlsZXMgY2FjaGVkIGJ5IHdyYXBwZXIKIGNsZWFuLWtlcm5lbCA6PSB2bWxpbnV4 LnN0cmlwIHZtbGludXguYmluCmRpZmYgLXUgLS1uZXctZmlsZSAtLXJlY3Vyc2l2ZSBsaW51 eC0yLjYuMjkuNi5vcmlnL2FyY2gvcG93ZXJwYy9ib290L21rcHJlcC5jIGxpbnV4LTIuNi4y OS42Lm1vZC9hcmNoL3Bvd2VycGMvYm9vdC9ta3ByZXAuYwotLS0gbGludXgtMi42LjI5LjYu b3JpZy9hcmNoL3Bvd2VycGMvYm9vdC9ta3ByZXAuYwkxOTY5LTEyLTMxIDE3OjAwOjAwLjAw MDAwMDAwMCAtMDcwMAorKysgbGludXgtMi42LjI5LjYubW9kL2FyY2gvcG93ZXJwYy9ib290 L21rcHJlcC5jCTIwMDktMDctMjEgMTE6Mjg6MTcuMDAwMDAwMDAwIC0wNzAwCkBAIC0wLDAg KzEsMzE0IEBACisvKgorICogTWFrZXMgYSBwcmVwIGJvb3RhYmxlIGltYWdlIHdoaWNoIGNh biBiZSBkZCdkIG9udG8KKyAqIGEgZGlzayBkZXZpY2UgdG8gbWFrZSBhIGJvb3RkaXNrLiAg V2lsbCB0YWtlCisgKiBhcyBpbnB1dCBhIGVsZiBleGVjdXRhYmxlLCBzdHJpcCBvZmYgdGhl IGhlYWRlcgorICogYW5kIHdyaXRlIG91dCBhIGJvb3QgaW1hZ2UgYXM6CisgKiAxKSBkZWZh dWx0IC0gc3RyaXBzIGVsZiBoZWFkZXIKKyAqICAgICAgc3VpdGFibGUgYXMgYSBuZXR3b3Jr IGJvb3QgaW1hZ2UKKyAqIDIpIC1wYnAgLSBzdHJpcHMgZWxmIGhlYWRlciBhbmQgd3JpdGVz IG91dCBwcmVwIGJvb3QgcGFydGl0aW9uIGltYWdlCisgKiAgICAgIGNhdCBvciBkZCBvbnRv IGRpc2sgZm9yIGJvb3RpbmcKKyAqIDMpIC1hc20gLSBzdHJpcHMgZWxmIGhlYWRlciBhbmQg d3JpdGVzIG91dCBhcyBhc20gZGF0YQorICogICAgICB1c2VmdWwgZm9yIGdlbmVyYXRpbmcg ZGF0YSBmb3IgYSBjb21wcmVzc2VkIGltYWdlCisgKiAgICAgICAgICAgICAgICAgIC0tIENv cnQKKyAqCisgKiBNb2RpZmllZCBmb3IgeDg2IGhvc3RlZCBidWlsZHMgYnkgTWF0dCBQb3J0 ZXIgPHBvcnRlckBuZXRhLmNvbT4KKyAqIE1vZGlmaWVkIGZvciBTcGFyYyBob3N0ZWQgYnVp bGRzIGJ5IFBldGVyIFdhaGwgPFBldGVyV2FobEB3ZWIuZGU+CisgKi8KKworI2luY2x1ZGUg PHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+Cisj aW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworCisvKiBzaXplIG9m IHJlYWQgYnVmZmVyICovCisjZGVmaW5lIFNJWkUgMHgxMDAwCisKKy8qCisgKiBQYXJ0aXRp b24gdGFibGUgZW50cnkKKyAqICAtIGZyb20gdGhlIFBSZVAgc3BlYworICovCit0eXBlZGVm IHN0cnVjdCBwYXJ0aXRpb25fZW50cnkgeworCXVuc2lnbmVkIGNoYXIgYm9vdF9pbmRpY2F0 b3I7CisJdW5zaWduZWQgY2hhciBzdGFydGluZ19oZWFkOworCXVuc2lnbmVkIGNoYXIgc3Rh cnRpbmdfc2VjdG9yOworCXVuc2lnbmVkIGNoYXIgc3RhcnRpbmdfY3lsaW5kZXI7CisKKwl1 bnNpZ25lZCBjaGFyIHN5c3RlbV9pbmRpY2F0b3I7CisJdW5zaWduZWQgY2hhciBlbmRpbmdf aGVhZDsKKwl1bnNpZ25lZCBjaGFyIGVuZGluZ19zZWN0b3I7CisJdW5zaWduZWQgY2hhciBl bmRpbmdfY3lsaW5kZXI7CisKKwl1bnNpZ25lZCBjaGFyIGJlZ2lubmluZ19zZWN0b3JbNF07 CisJdW5zaWduZWQgY2hhciBudW1iZXJfb2Zfc2VjdG9yc1s0XTsKK30gcGFydGl0aW9uX2Vu dHJ5X3Q7CisKKyNkZWZpbmUgQm9vdEFjdGl2ZQkweDgwCisjZGVmaW5lIFN5c3RlbVByZXAJ MHg0MQorCit2b2lkIGNvcHlfaW1hZ2UoRklMRSAqLCBGSUxFICopOwordm9pZCB3cml0ZV9w cmVwX3BhcnRpdGlvbihGSUxFICosIEZJTEUgKik7Cit2b2lkIHdyaXRlX2FzbV9kYXRhKEZJ TEUgKiwgRklMRSAqKTsKKwordW5zaWduZWQgaW50IGVsZmhkcl9zaXplID0gNjU1MzY7CisK KyNkZWZpbmUgUk9VTkRVUChsZW4pICAgICgoKGxlbikgKyAzKSAmIH4zKQorCit1bnNpZ25l ZCBjaGFyIGJ1Zls1MTJdOworCisjZGVmaW5lIEdFVF8xNkJFKG9mZikgICAoKGJ1ZltvZmZd IDw8IDgpICsgKGJ1Zlsob2ZmKSsxXSkpCisjZGVmaW5lIEdFVF8zMkJFKG9mZikgICAoKEdF VF8xNkJFKG9mZikgPDwgMTYpICsgR0VUXzE2QkUoKG9mZikrMikpCisKKyNkZWZpbmUgUFVU XzE2QkUob2ZmLCB2KSAgICAgICAgKGJ1ZltvZmZdID0gKCh2KSA+PiA4KSAmIDB4ZmYsIFwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Zlsob2ZmKSArIDFdID0gKHYp ICYgMHhmZikKKyNkZWZpbmUgUFVUXzMyQkUob2ZmLCB2KSAgICAgICAgKFBVVF8xNkJFKChv ZmYpLCAodikgPj4gMTYpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ VVRfMTZCRSgob2ZmKSArIDIsICh2KSkpCisKKworLyogU3RydWN0dXJlIG9mIGFuIEVMRiBm aWxlICovCisjZGVmaW5lIEVfSURFTlQgICAgICAgICAwICAgICAgIC8qIEVMRiBoZWFkZXIg Ki8KKyNkZWZpbmUgRV9QSE9GRiAgICAgICAgIDI4CisjZGVmaW5lIEVfUEhFTlRTSVpFICAg ICA0MgorI2RlZmluZSBFX1BITlVNICAgICAgICAgNDQKKyNkZWZpbmUgRV9IU0laRSAgICAg ICAgIDUyICAgICAgLyogc2l6ZSBvZiBFTEYgaGVhZGVyICovCisKKyNkZWZpbmUgRUlfTUFH SUMgICAgICAgIDAgICAgICAgLyogb2Zmc2V0cyBpbiBFX0lERU5UIGFyZWEgKi8KKyNkZWZp bmUgRUlfQ0xBU1MgICAgICAgIDQKKyNkZWZpbmUgRUlfREFUQSAgICAgICAgIDUKKworI2Rl ZmluZSBQSF9UWVBFICAgICAgICAgMCAgICAgICAvKiBFTEYgcHJvZ3JhbSBoZWFkZXIgKi8K KyNkZWZpbmUgUEhfT0ZGU0VUICAgICAgIDQKKyNkZWZpbmUgUEhfRklMRVNaICAgICAgIDE2 CisjZGVmaW5lIFBIX0hTSVpFICAgICAgICAzMiAgICAgIC8qIHNpemUgb2YgcHJvZ3JhbSBo ZWFkZXIgKi8KKworI2RlZmluZSBQVF9MT0FEICAgICAgICAgMSAgICAgICAvKiBQcm9ncmFt IGhlYWRlciB0eXBlID0gbG9hZCAqLworCisjZGVmaW5lIEVMRkNMQVNTMzIgICAgICAxCisj ZGVmaW5lIEVMRkRBVEEyTVNCICAgICAyCisKK3Vuc2lnbmVkIGNoYXIgZWxmX21hZ2ljWzRd ID0geyAweDdmLCAnRScsICdMJywgJ0YnIH07CisKKworaW50IG1haW4oaW50IGFyZ2MsIGNo YXIgKmFyZ3ZbXSkKK3sKKwlGSUxFICppbiwgKm91dDsKKwlpbnQgYXJncHRyID0gMTsKKwlp bnQgcHJlcCA9IDA7CisJaW50IGZkLCBuOworCWludCBwaCwgcHMsIG5wOworCWludCBhc21v dXRwdXQgPSAwOworCisJaWYgKGFyZ2MgPCAzIHx8IGFyZ2MgPiA0KSB7CisJCWZwcmludGYo c3RkZXJyLCAidXNhZ2U6ICVzIFstcGJwXSBbLWFzbV0gPGJvb3QtZmlsZT4gPGltYWdlPlxu IiwKKwkJCWFyZ3ZbMF0pOworCQlleGl0KC0xKTsKKwl9CisKKy8qIG5lZWRzIHRvIGhhbmRs ZSBhcmdzIG1vcmUgZWxlZ2FudGx5IC0tIGJ1dCB0aGlzIGlzIGEgc21hbGwvc2ltcGxlIHBy b2dyYW0gKi8KKworCS8qIGNoZWNrIGZvciAtcGJwICovCisJaWYgKCFzdHJjbXAoYXJndlth cmdwdHJdLCAiLXBicCIpKSB7CisJCXByZXAgPSAxOworCQlhcmdwdHIrKzsKKwl9CisKKwkv KiBjaGVjayBmb3IgLWFzbSAqLworCWlmICghc3RyY21wKGFyZ3ZbYXJncHRyXSwgIi1hc20i KSkgeworCQlhc21vdXRwdXQgPSAxOworCQlhcmdwdHIrKzsKKwl9CisKKwkvKiBpbnB1dCBm aWxlICovCisJaWYgKCFzdHJjbXAoYXJndlthcmdwdHJdLCAiLSIpKQorCQlpbiA9IHN0ZGlu OworCWVsc2UgaWYgKCEoaW4gPSBmb3Blbihhcmd2W2FyZ3B0cl0sICJyIikpKQorCQlleGl0 KC0xKTsKKworCWZkID0gb3Blbihhcmd2W2FyZ3B0cl0sIE9fUkRXUik7CisgICAgICAgIGlm IChmZCA8IDApIHsKKyAgICAgICAgICAgICAgICBwZXJyb3IoYXJndlthcmdwdHJdKTsKKyAg ICAgICAgICAgICAgICBleGl0KDEpOworICAgICAgICB9CisJYXJncHRyKys7CisKKwkvKiBv dXRwdXQgZmlsZSAqLworCWlmICghc3RyY21wKGFyZ3ZbYXJncHRyXSwgIi0iKSkKKwkJb3V0 ID0gc3Rkb3V0OworCWVsc2UgaWYgKCEob3V0ID0gZm9wZW4oYXJndlthcmdwdHJdLCAidyIp KSkKKwkJZXhpdCgtMSk7CisJYXJncHRyKys7CisKKyAgICAgICBuID0gcmVhZChmZCwgYnVm LCBzaXplb2YoYnVmKSk7CisgICAgICAgIGlmIChuIDwgMCkgeworICAgICAgICAgICAgICAg IHBlcnJvcigicmVhZCIpOworICAgICAgICAgICAgICAgIGV4aXQoLTEpOworICAgICAgICB9 CisKKyAgICAgICAgaWYgKG4gPCBFX0hTSVpFIHx8IG1lbWNtcCgmYnVmW0VfSURFTlQrRUlf TUFHSUNdLCBlbGZfbWFnaWMsIDQpICE9IDApIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRm KHN0ZGVyciwgIk5vdCBhbiBFTEYgZmlsZVxuIik7CisgICAgICAgICAgICAgICAgZXhpdCgt MSk7CisJfQorCisgICAgICAgIHBoID0gR0VUXzMyQkUoRV9QSE9GRik7CisgICAgICAgIHBz ID0gR0VUXzE2QkUoRV9QSEVOVFNJWkUpOworICAgICAgICBucCA9IEdFVF8xNkJFKEVfUEhO VU0pOworCisgICAgICAgIGlmIChwaCA8IEVfSFNJWkUgfHwgcHMgPCBQSF9IU0laRSB8fCBu cCA8IDEpIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yIHBhcnNp bmcgRUxGIGZpbGVcbiIpOworICAgICAgICAgICAgICAgIGV4aXQoLTEpOworCX0KKworICAg ICAgICBpZiAoR0VUXzMyQkUocGggKyBQSF9UWVBFKSA9PSBQVF9MT0FEKSB7CisgICAgICAg IAlpZiAoR0VUXzMyQkUocGggKyBQSF9PRkZTRVQpID09IDB4NDAwMDApIAorCQkJZWxmaGRy X3NpemUgPSAweDQwMDAwOworCX0KKworCS8qIHNraXAgZWxmIGhlYWRlciBpbiBpbnB1dCBm aWxlICovCisJLyppZiAoICFwcmVwICkqLworCWZzZWVrKGluLCBlbGZoZHJfc2l6ZSwgU0VF S19TRVQpOworCisJLyogd3JpdGUgcHJlcCBwYXJ0aXRpb24gaWYgbmVjZXNzYXJ5ICovCisJ aWYgKHByZXApCisJCXdyaXRlX3ByZXBfcGFydGl0aW9uKGluLCBvdXQpOworCisJLyogd3Jp dGUgaW5wdXQgaW1hZ2UgdG8gYm9vdGltYWdlICovCisJaWYgKGFzbW91dHB1dCkKKwkJd3Jp dGVfYXNtX2RhdGEoaW4sIG91dCk7CisJZWxzZQorCQljb3B5X2ltYWdlKGluLCBvdXQpOwor CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgc3RvcmVfbGUzMih1bnNpZ25lZCBpbnQgdiwgdW5z aWduZWQgY2hhciAqcCkKK3sKKwlwWzBdID0gdjsKKwlwWzFdID0gdiA+Pj0gODsKKwlwWzJd ID0gdiA+Pj0gODsKKwlwWzNdID0gdiA+PiA4OworfQorCit2b2lkIHdyaXRlX3ByZXBfcGFy dGl0aW9uKEZJTEUgKmluLCBGSUxFICpvdXQpCit7CisJdW5zaWduZWQgY2hhciBibG9ja1s1 MTJdOworCXBhcnRpdGlvbl9lbnRyeV90IHBlOworCXVuc2lnbmVkIGNoYXIgKmVudHJ5ICA9 IGJsb2NrOworCXVuc2lnbmVkIGNoYXIgKmxlbmd0aCA9IGJsb2NrICsgNDsKKwlsb25nIHBv cyA9IGZ0ZWxsKGluKSwgc2l6ZTsKKworCWlmIChmc2VlayhpbiwgMCwgU0VFS19FTkQpIDwg MCkgeworCQlmcHJpbnRmKHN0ZGVyciwiaW5mbyBmYWlsZWRcbiIpOworCQlleGl0KC0xKTsK Kwl9CisJc2l6ZSA9IGZ0ZWxsKGluKTsKKwlpZiAoZnNlZWsoaW4sIHBvcywgU0VFS19TRVQp IDwgMCkgeworCQlmcHJpbnRmKHN0ZGVyciwiaW5mbyBmYWlsZWRcbiIpOworCQlleGl0KC0x KTsKKwl9CisKKwltZW1zZXQoYmxvY2ssICdcMCcsIHNpemVvZihibG9jaykpOworCisJLyog c2V0IGVudHJ5IHBvaW50IGFuZCBib290IGltYWdlIHNpemUgc2tpcHBpbmcgb3ZlciBlbGYg aGVhZGVyICovCisJc3RvcmVfbGUzMigweDQwMC8qKzY1NTM2Ki8sIGVudHJ5KTsKKwlzdG9y ZV9sZTMyKHNpemUtZWxmaGRyX3NpemUrMHg0MDAsIGxlbmd0aCk7CisKKwkvKiBzZXRzIG1h Z2ljIG51bWJlciBmb3IgbXNkb3MgcGFydGl0aW9uICh1c2VkIGJ5IGxpbnV4KSAqLworCWJs b2NrWzUxMF0gPSAweDU1OworCWJsb2NrWzUxMV0gPSAweEFBOworCisJLyoKKwkqIEJ1aWxk IGEgIlBSZVAiIHBhcnRpdGlvbiB0YWJsZSBlbnRyeSBpbiB0aGUgYm9vdCByZWNvcmQKKwkq ICAtICJQUmVQIiBtYXkgb25seSBsb29rIGF0IHRoZSBzeXN0ZW1faW5kaWNhdG9yCisJKi8K KwlwZS5ib290X2luZGljYXRvciAgID0gQm9vdEFjdGl2ZTsKKwlwZS5zeXN0ZW1faW5kaWNh dG9yID0gU3lzdGVtUHJlcDsKKwkvKgorCSogVGhlIGZpcnN0IGJsb2NrIG9mIHRoZSBkaXNr ZXR0ZSBpcyB1c2VkIGJ5IHRoaXMgImJvb3QgcmVjb3JkIiB3aGljaAorCSogYWN0dWFsbHkg Y29udGFpbnMgdGhlIHBhcnRpdGlvbiB0YWJsZS4gKFRoZSBmaXJzdCBibG9jayBvZiB0aGUK KwkqIHBhcnRpdGlvbiBjb250YWlucyB0aGUgYm9vdCBpbWFnZSwgYnV0IEkgZGlncmVzcy4u LikgIFdlJ2xsIHNldCB1cAorCSogb25lIHBhcnRpdGlvbiBvbiB0aGUgZGlza2V0dGUgYW5k IGl0IHNoYWxsIGNvbnRhaW4gdGhlIHJlc3Qgb2YgdGhlCisJKiBkaXNrZXR0ZS4KKwkqLwor CXBlLnN0YXJ0aW5nX2hlYWQgICAgID0gMDsJLyogemVyby1iYXNlZAkJCSAgICAgKi8KKwlw ZS5zdGFydGluZ19zZWN0b3IgICA9IDI7CS8qIG9uZS1iYXNlZAkJCSAgICAgKi8KKwlwZS5z dGFydGluZ19jeWxpbmRlciA9IDA7CS8qIHplcm8tYmFzZWQJCQkgICAgICovCisJcGUuZW5k aW5nX2hlYWQgICAgICAgPSAxOwkvKiBhc3N1bWVzIHR3byBoZWFkcwkJICAgICAqLworCXBl LmVuZGluZ19zZWN0b3IgICAgID0gMTg7CS8qIGFzc3VtZXMgMTggc2VjdG9ycy90cmFjawkg ICAgICovCisJcGUuZW5kaW5nX2N5bGluZGVyICAgPSA3OTsJLyogYXNzdW1lcyA4MCBjeWxp bmRlcnMvZGlza2V0dGUgICAgICovCisKKwkvKgorCSogVGhlICJQUmVQIiBzb2Z0d2FyZSBp Z25vcmVzIHRoZSBhYm92ZSBmaWVsZHMgYW5kIGp1c3QgbG9va3MgYXQKKwkqIHRoZSBuZXh0 IHR3by4KKwkqICAgLSBzaXplIG9mIHRoZSBkaXNrZXR0ZSBpcyAoYXNzdW1lZCB0byBiZSkK KwkqICAgICAoMiB0cmFja3MvY3lsaW5kZXIpKDE4IHNlY3RvcnMvdHJhY2tzKSg4MCBjeWxp bmRlcnMvZGlza2V0dGUpCisJKiAgIC0gdW5saWtlIHRoZSBhYm92ZSBzZWN0b3IgbnVtYmVy cywgdGhlIGJlZ2lubmluZyBzZWN0b3IgaXMgemVyby1iYXNlZCEKKwkqLworI2lmIDAKKwlz dG9yZV9sZTMyKDEsIHBlLmJlZ2lubmluZ19zZWN0b3IpOworI2Vsc2UKKwkvKiBUaGlzIGhh cyB0byBiZSAwIG9uIHRoZSBQb3dlclN0YWNrPyAqLworCXN0b3JlX2xlMzIoMCwgcGUuYmVn aW5uaW5nX3NlY3Rvcik7CisjZW5kaWYKKworCXN0b3JlX2xlMzIoMioxOCo4MC0xLCBwZS5u dW1iZXJfb2Zfc2VjdG9ycyk7CisKKwltZW1jcHkoJmJsb2NrWzB4MUJFXSwgJnBlLCBzaXpl b2YocGUpKTsKKworCWZ3cml0ZShibG9jaywgc2l6ZW9mKGJsb2NrKSwgMSwgb3V0KTsKKwlm d3JpdGUoZW50cnksIDQsIDEsIG91dCk7CisJZndyaXRlKGxlbmd0aCwgNCwgMSwgb3V0KTsK KwkvKiBzZXQgZmlsZSBwb3NpdGlvbiB0byAybmQgc2VjdG9yIHdoZXJlIGltYWdlIHdpbGwg YmUgd3JpdHRlbiAqLworCWZzZWVrKCBvdXQsIDB4NDAwLCBTRUVLX1NFVCApOworfQorCisK Kwordm9pZCBjb3B5X2ltYWdlKEZJTEUgKmluLCBGSUxFICpvdXQpCit7CisJY2hhciBidWZb U0laRV07CisJaW50IG47CisKKwl3aGlsZSAoIChuID0gZnJlYWQoYnVmLCAxLCBTSVpFLCBp bikpID4gMCApCisJCWZ3cml0ZShidWYsIDEsIG4sIG91dCk7Cit9CisKKwordm9pZAord3Jp dGVfYXNtX2RhdGEoRklMRSAqaW4sIEZJTEUgKm91dCkKK3sKKwlpbnQgaSwgY250LCBwb3Mg PSAwOworCXVuc2lnbmVkIGludCBja3N1bSA9IDAsIHZhbDsKKwl1bnNpZ25lZCBjaGFyICps cDsKKwl1bnNpZ25lZCBjaGFyIGJ1ZltTSVpFXTsKKwlzaXplX3QgbGVuOworCisJZnB1dHMo Ilx0LmRhdGFcblx0Lmdsb2JsIGlucHV0X2RhdGFcbmlucHV0X2RhdGE6XG4iLCBvdXQpOwor CXdoaWxlICgobGVuID0gZnJlYWQoYnVmLCAxLCBzaXplb2YoYnVmKSwgaW4pKSA+IDApIHsK KwkJY250ID0gMDsKKwkJbHAgPSBidWY7CisJCS8qIFJvdW5kIHVwIHRvIGxvbmd3b3JkcyAq LworCQl3aGlsZSAobGVuICYgMykKKwkJCWJ1ZltsZW4rK10gPSAnXDAnOworCQlmb3IgKGkg PSAwOyAgaSA8IGxlbjsgIGkgKz0gNCkgeworCQkJaWYgKGNudCA9PSAwKQorCQkJCWZwdXRz KCJcdC5sb25nXHQiLCBvdXQpOworCQkJZnByaW50ZihvdXQsICIweCUwMlglMDJYJTAyWCUw MlgiLAorCQkJCWxwWzBdLCBscFsxXSwgbHBbMl0sIGxwWzNdKTsKKwkJCXZhbCA9ICoodW5z aWduZWQgbG9uZyAqKWxwOworCQkJY2tzdW0gXj0gdmFsOworCQkJbHAgKz0gNDsKKwkJCWlm ICgrK2NudCA9PSA0KSB7CisJCQkJY250ID0gMDsKKwkJCQlmcHJpbnRmKG91dCwgIiAjICV4 IFxuIiwgcG9zK2ktMTIpOworCQkJfSBlbHNlIHsKKwkJCQlmcHV0cygiLCIsIG91dCk7CisJ CQl9CisJCX0KKwkJaWYgKGNudCkKKwkJCWZwdXRzKCIwXG4iLCBvdXQpOworCQlwb3MgKz0g bGVuOworCX0KKwlmcHJpbnRmKG91dCwgIlx0Lmdsb2JsIGlucHV0X2xlblxuaW5wdXRfbGVu Olx0LmxvbmdcdDB4JXhcbiIsIHBvcyk7CisJZnByaW50ZihzdGRlcnIsICJja3N1bSA9ICV4 XG4iLCBja3N1bSk7Cit9CmRpZmYgLXUgLS1uZXctZmlsZSAtLXJlY3Vyc2l2ZSBsaW51eC0y LjYuMjkuNi5vcmlnL2FyY2gvcG93ZXJwYy9ib290L3BwY2Jvb3QuaCBsaW51eC0yLjYuMjku Ni5tb2QvYXJjaC9wb3dlcnBjL2Jvb3QvcHBjYm9vdC5oCi0tLSBsaW51eC0yLjYuMjkuNi5v cmlnL2FyY2gvcG93ZXJwYy9ib290L3BwY2Jvb3QuaAkyMDA5LTA3LTAyIDE2OjQxOjIwLjAw MDAwMDAwMCAtMDcwMAorKysgbGludXgtMi42LjI5LjYubW9kL2FyY2gvcG93ZXJwYy9ib290 L3BwY2Jvb3QuaAkyMDA5LTA3LTIxIDExOjI4OjE3LjAwMDAwMDAwMCAtMDcwMApAQCAtNDMs MTAgKzQzLDEwIEBACiAJdW5zaWduZWQgbG9uZwliaV9zcmFtc3RhcnQ7CS8qIHN0YXJ0IG9m IFNSQU0gbWVtb3J5ICovCiAJdW5zaWduZWQgbG9uZwliaV9zcmFtc2l6ZTsJLyogc2l6ZQkg b2YgU1JBTSBtZW1vcnkgKi8KICNpZiBkZWZpbmVkKFRBUkdFVF84eHgpIHx8IGRlZmluZWQo VEFSR0VUX0NQTTIpIHx8IGRlZmluZWQoVEFSR0VUXzg1eHgpIHx8XAotCWRlZmluZWQoVEFS R0VUXzgzeHgpCisJZGVmaW5lZChUQVJHRVRfODN4eCkgfHwgZGVmaW5lZChUQVJHRVRfTVZN RTcxMDApIHx8IGRlZmluZWQoVEFSR0VUX01WTUUzMTAwKSB8fCBkZWZpbmVkKFRBUkdFVF9N Vk1FNDEwMCkgfHwgZGVmaW5lZChUQVJHRVRfQ1BDSTYyMDApCiAJdW5zaWduZWQgbG9uZwli aV9pbW1yX2Jhc2U7CS8qIGJhc2Ugb2YgSU1NUiByZWdpc3RlciAqLwogI2VuZGlmCi0jaWYg ZGVmaW5lZChUQVJHRVRfUFBDX01QQzUyeHgpCisjaWYgZGVmaW5lZChUQVJHRVRfUFBDX01Q QzUyeHgpIAogCXVuc2lnbmVkIGxvbmcgICBiaV9tYmFyX2Jhc2U7ICAgLyogYmFzZSBvZiBp bnRlcm5hbCByZWdpc3RlcnMgKi8KICNlbmRpZgogCXVuc2lnbmVkIGxvbmcJYmlfYm9vdGZs YWdzOwkvKiBib290IC8gcmVib290IGZsYWcgKGZvciBMeW54T1MpICovCkBAIC03OCwxOCAr NzgsMTggQEAKIAloeW1vZF9jb25mX3QJYmlfaHltb2RfY29uZjsJLyogaHltb2QgY29uZmln dXJhdGlvbiBpbmZvcm1hdGlvbiAqLwogI2VuZGlmCiAjaWYgZGVmaW5lZChUQVJHRVRfRVZC NjQyNjApIHx8IGRlZmluZWQoVEFSR0VUXzQwNUVQKSB8fCBkZWZpbmVkKFRBUkdFVF80NHgp IHx8IFwKLQlkZWZpbmVkKFRBUkdFVF84NXh4KSB8fAlkZWZpbmVkKFRBUkdFVF84M3h4KSB8 fCBkZWZpbmVkKFRBUkdFVF9IQVNfRVRIMSkKKwlkZWZpbmVkKFRBUkdFVF84NXh4KSB8fAlk ZWZpbmVkKFRBUkdFVF9NVk1FNzEwMCkgfHwgZGVmaW5lZChUQVJHRVRfTVZNRTMxMDApIHx8 IGRlZmluZWQoVEFSR0VUX01WTUU0MTAwKSB8fCBkZWZpbmVkKFRBUkdFVF9DUENJNjIwMCkg fHwgZGVmaW5lZChUQVJHRVRfODN4eCkgfHwgZGVmaW5lZChUQVJHRVRfSEFTX0VUSDEpCiAJ Lyogc2Vjb25kIG9uYm9hcmQgZXRoZXJuZXQgcG9ydCAqLwogCXVuc2lnbmVkIGNoYXIJYmlf ZW5ldDFhZGRyWzZdOwogI2RlZmluZSBIQVZFX0VORVQxQUREUgogI2VuZGlmCiAjaWYgZGVm aW5lZChUQVJHRVRfRVZCNjQyNjApIHx8IGRlZmluZWQoVEFSR0VUXzQ0MEdYKSB8fCBcCi0g ICAgZGVmaW5lZChUQVJHRVRfODV4eCkgfHwgZGVmaW5lZChUQVJHRVRfSEFTX0VUSDIpCisg ICAgZGVmaW5lZChUQVJHRVRfODV4eCkgfHwgZGVmaW5lZChUQVJHRVRfSEFTX0VUSDIpIHx8 IGRlZmluZWQoVEFSR0VUX01WTUU3MTAwKSB8fCBkZWZpbmVkKFRBUkdFVF9NVk1FMzEwMCkg fHwgZGVmaW5lZChUQVJHRVRfTVZNRTQxMDApIHx8IGRlZmluZWQoVEFSR0VUX0NQQ0k2MjAw KQogCS8qIHRoaXJkIG9uYm9hcmQgZXRoZXJuZXQgcG9ydHMgKi8KIAl1bnNpZ25lZCBjaGFy CWJpX2VuZXQyYWRkcls2XTsKICNkZWZpbmUgSEFWRV9FTkVUMkFERFIKICNlbmRpZgotI2lm IGRlZmluZWQoVEFSR0VUXzQ0MEdYKSB8fCBkZWZpbmVkKFRBUkdFVF9IQVNfRVRIMykKKyNp ZiBkZWZpbmVkKFRBUkdFVF80NDBHWCkgfHwgZGVmaW5lZChUQVJHRVRfSEFTX0VUSDMpIHx8 IGRlZmluZWQoVEFSR0VUX01WTUU3MTAwKSB8fCBkZWZpbmVkKFRBUkdFVF9NVk1FNDEwMCkg fHwgZGVmaW5lZChUQVJHRVRfQ1BDSTYyMDApCiAJLyogZm91cnRoIG9uYm9hcmQgZXRoZXJu ZXQgcG9ydHMgKi8KIAl1bnNpZ25lZCBjaGFyCWJpX2VuZXQzYWRkcls2XTsKICNkZWZpbmUg SEFWRV9FTkVUM0FERFIKZGlmZiAtdSAtLW5ldy1maWxlIC0tcmVjdXJzaXZlIGxpbnV4LTIu Ni4yOS42Lm9yaWcvYXJjaC9wb3dlcnBjL2Jvb3QvcHBsdXNib290LWNwY2k2MjAwLmMgbGlu dXgtMi42LjI5LjYubW9kL2FyY2gvcG93ZXJwYy9ib290L3BwbHVzYm9vdC1jcGNpNjIwMC5j Ci0tLSBsaW51eC0yLjYuMjkuNi5vcmlnL2FyY2gvcG93ZXJwYy9ib290L3BwbHVzYm9vdC1j cGNpNjIwMC5jCTE5NjktMTItMzEgMTc6MDA6MDAuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51 eC0yLjYuMjkuNi5tb2QvYXJjaC9wb3dlcnBjL2Jvb3QvcHBsdXNib290LWNwY2k2MjAwLmMJ MjAwOS0wOC0xMyAxNDoxNDoxNC4wMDAwMDAwMDAgLTA3MDAKQEAgLTAsMCArMSwyMzIgQEAK Ky8qCisgKiBFbWVyc29uIE5ldHdvcmsgUG93ZXIgRW1iZWRkZWQgQ29tcHV0aW5nIENQQ0k2 MjAwIGJvb3R3cmFwcGVyIGNvZGUuCisgKgorICogQXV0aG9yOiBBaml0IFByZW0gPGFqaXQu cHJlbUBlbWVyc29uLmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBFbWVyc29uIE5ldHdv cmsgUG93ZXIgRW1iZWRkZWQgQ29tcHV0aW5nIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMg bGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgCisgKiBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtCisgKiBpcyBsaWNlbnNlZCAiYXMg aXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCAKKyAqIHdoZXRoZXIgZXhw cmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRl IDxzdGRkZWYuaD4KKyNpbmNsdWRlICJ0eXBlcy5oIgorI2luY2x1ZGUgImVsZi5oIgorI2lu Y2x1ZGUgInBhZ2UuaCIKKyNpbmNsdWRlICJzdHJpbmcuaCIKKyNpbmNsdWRlICJzdGRpby5o IgorI2luY2x1ZGUgImlvLmgiCisjaW5jbHVkZSAib3BzLmgiCisjaW5jbHVkZSAiZ3Vuemlw X3V0aWwuaCIKKworI2RlZmluZSBUQVJHRVRfQ1BDSTYyMDAKKyNpbmNsdWRlICJwcGNib290 LmgiCisKK2V4dGVybiBjaGFyIF9lbmRbXTsKK2V4dGVybiBjaGFyIF92bWxpbnV4X3N0YXJ0 W10sIF92bWxpbnV4X2VuZFtdOworZXh0ZXJuIGNoYXIgX2R0Yl9zdGFydFtdLCBfZHRiX2Vu ZFtdOworCisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGVuZXQwX2FkZHJbNl07CitzdGF0aWMg dW5zaWduZWQgY2hhciBlbmV0MV9hZGRyWzZdOworc3RhdGljIHVuc2lnbmVkIGNoYXIgZW5l dDJfYWRkcls2XTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGVuZXQzX2FkZHJbNl07CitzdGF0 aWMgYmRfdCBiZGluZm87CisKKyNkZWZpbmUgS0IJMTAyNFUKKyNkZWZpbmUgTUIJKEtCKktC KQorCisjZGVmaW5lIEVFUFJPTV9BRERSCTB4QTgKKworQlNTX1NUQUNLKDE2ICogS0IpOwor Cit2b2lkIGNwY2k2MjAwX3Jlc2V0KHZvaWQpCit7CisgICAgICAgIG91dF84KCh1OCAqKSAw eGYyMDAwMDAxLCAweEEwKTsKKworCWZvciAoOzspIAorCQk7Cit9CisKK3N0YXRpYyB2b2lk IGNwY2k2MjAwX2ZpeHVwcyh2b2lkKQoreworCXZvaWQgKmRldnA7CisJdTMyIHZbMl07CisK KworCS8qIE5vdyBmaXh1cCBkZXZpY2UgdHJlZSBwcm9wZXJ0aWVzICovCisJLyogU2V0IC9t b2RlbCBhcHByb3ByaWF0ZWx5ICovCisJZGV2cCA9IGZpbmRkZXZpY2UoIi8iKTsKKwlpZiAo ZGV2cCA9PSBOVUxMKQorCQlmYXRhbCgiRXJyb3I6IE1pc3NpbmcgJy8nIGRldmljZSB0cmVl IG5vZGVcblxyIik7CisKKwkvKiBTZXQgL2NwdXMvUG93ZXJQQyw4NTcyQDAvY2xvY2stZnJl cXVlbmN5ICovCisJZGV2cCA9IGZpbmRkZXZpY2UoIi9jcHVzL1Bvd2VyUEMsODU3MkAwIik7 CisJaWYgKGRldnAgPT0gTlVMTCkKKwkJZmF0YWwoIkVycm9yOiBNaXNzaW5nIHByb3BlciAv Y3B1cyBkZXZpY2UgdHJlZSBub2RlXG5cciIpOworCisJdlswXSA9IGJkaW5mby5iaV9pbnRm cmVxOworCXZbMF0gKj0gMTAwMDAwMDsKKwlzZXRwcm9wKGRldnAsICJjbG9jay1mcmVxdWVu Y3kiLCAmdlswXSwgc2l6ZW9mKHZbMF0pKTsKKworLy8JcHJpbnRmKCJDbG9jay1mcmVxdWVu Y3kgQ1BVIDAgMHgleFxuXHIiLCB2WzBdKTsKKworCXZbMF0gPSBiZGluZm8uYmlfYnVzZnJl cTsKKwl2WzBdICo9IDEwMDAwMDA7CisJc2V0cHJvcChkZXZwLCAiYnVzLWZyZXF1ZW5jeSIs ICZ2WzBdLCBzaXplb2YodlswXSkpOworCisvLwlwcmludGYoImJ1cy1mcmVxdWVuY3kgQ1BV MCAweCV4XG5cciIsIHZbMF0pOworCisJdlswXSAvPSA4OworCXNldHByb3AoZGV2cCwgInRp bWViYXNlLWZyZXF1ZW5jeSIsICZ2WzBdLCBzaXplb2YodlswXSkpOworCisvLwlwcmludGYo InRpbWViYXNlLWZyZXF1ZW5jeSBDUFUwIDB4JXhcblxyIiwgdlswXSk7CisKKwlkZXZwID0g ZmluZGRldmljZSgiL2NwdXMvUG93ZXJQQyw4NTcyQDEiKTsKKwlpZiAoZGV2cCA9PSBOVUxM KQorCQlmYXRhbCgiRXJyb3I6IE1pc3NpbmcgcHJvcGVyIC9jcHVzIGRldmljZSB0cmVlIG5v ZGVcblxyIik7CisKKwl2WzBdID0gYmRpbmZvLmJpX2ludGZyZXE7CisJdlswXSAqPSAxMDAw MDAwOworCXNldHByb3AoZGV2cCwgImNsb2NrLWZyZXF1ZW5jeSIsICZ2WzBdLCBzaXplb2Yo dlswXSkpOworCisvLwlwcmludGYoIkNsb2NrLWZyZXF1ZW5jeSBDUFUgMSAweCV4XG5cciIs IHZbMF0pOworCisJdlswXSA9IGJkaW5mby5iaV9idXNmcmVxOworCXZbMF0gKj0gMTAwMDAw MDsKKwlzZXRwcm9wKGRldnAsICJidXMtZnJlcXVlbmN5IiwgJnZbMF0sIHNpemVvZih2WzBd KSk7CisKKy8vCXByaW50ZigiYnVzLWZyZXF1ZW5jeSBDUFUgMSAweCV4XG5cciIsIHZbMF0p OworCisJdlswXSAvPSA4OworCXNldHByb3AoZGV2cCwgInRpbWViYXNlLWZyZXF1ZW5jeSIs ICZ2WzBdLCBzaXplb2YodlswXSkpOworCisvLwlwcmludGYoInRpbWViYXNlLWZyZXF1ZW5j eSBDUFUxIDB4JXhcblxyIiwgdlswXSk7CisKKwkvKiBTZXQgbWVtb3J5IHNpemUgKi8KKwlk ZXZwID0gZmluZGRldmljZSgiL21lbW9yeSIpOworCWlmIChkZXZwID09IE5VTEwpCisJCWZh dGFsKCJFcnJvcjogTWlzc2luZyAvbWVtb3J5IGRldmljZSB0cmVlIG5vZGVcblxyIik7CisJ dlswXSA9IDA7CisJdlsxXSA9IGJkaW5mby5iaV9tZW1zaXplOworCXNldHByb3AoZGV2cCwg InJlZyIsIHYsIHNpemVvZih2KSk7CisKKy8vCXByaW50ZigiTWVtb3J5IFNpemUgMHgleFxu XHIiLCB2WzFdKTsKKworICAgICAgICBkZXZwID0gZmluZGRldmljZSgiL3NvYzg1NzJAZjEw MDAwMDAiKTsKKyAgICAgICAgaWYgKGRldnAgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBm YXRhbCgiRXJyb3I6IE1pc3Npbmcgc29jODU3MiBkZXZpY2UgdHJlZSBub2RlXG5cciIpOwor ICAgICAgICB2WzBdID0gYmRpbmZvLmJpX2J1c2ZyZXE7CisgICAgICAgIHZbMF0gKj0gMTAw MDAwMDsKKyAgICAgICAgc2V0cHJvcChkZXZwLCAiYnVzLWZyZXF1ZW5jeSIsICZ2WzBdLCBz aXplb2YodlswXSkpOworCisJZGV2cCA9IGZpbmRkZXZpY2UoIi9zb2M4NTcyL3NlcmlhbEA0 NTAwIik7CisJaWYgKGRldnAgPT0gTlVMTCkKKwkJZmF0YWwoIkVycm9yOiBNaXNzaW5nIHNv Yzg1NzIgc2VyaWFsIGRldmljZSB0cmVlIG5vZGUgMFxuXHIiKTsKKwl2WzBdID0gYmRpbmZv LmJpX2J1c2ZyZXE7CisJdlswXSAqPSAxMDAwMDAwOworCXNldHByb3AoZGV2cCwgImNsb2Nr LWZyZXF1ZW5jeSIsICZ2WzBdLCBzaXplb2YodlswXSkpOworCisJZGV2cCA9IGZpbmRkZXZp Y2UoIi9zb2M4NTcyL3NlcmlhbEA0NjAwIik7CisJaWYgKGRldnAgPT0gTlVMTCkKKwkJZmF0 YWwoIkVycm9yOiBNaXNzaW5nIHNvYzg1NzIgc2VyaWFsIGRldmljZSB0cmVlIG5vZGUgMVxu XHIiKTsKKwl2WzBdID0gYmRpbmZvLmJpX2J1c2ZyZXE7CisJdlswXSAqPSAxMDAwMDAwOwor CXNldHByb3AoZGV2cCwgImNsb2NrLWZyZXF1ZW5jeSIsICZ2WzBdLCBzaXplb2YodlswXSkp OworCisvLwlwcmludGYoInNlcmlhbC1jbG9jay1mcmVxdWVuY3kgMHgleFxuXHIiLCB2WzBd KTsKKworCW1lbWNweShlbmV0MF9hZGRyLCBiZGluZm8uYmlfZW5ldGFkZHIsIDYpOworCW1l bWNweShlbmV0MV9hZGRyLCBiZGluZm8uYmlfZW5ldDFhZGRyLCA2KTsKKwltZW1jcHkoZW5l dDJfYWRkciwgYmRpbmZvLmJpX2VuZXQyYWRkciwgNik7CisJbWVtY3B5KGVuZXQzX2FkZHIs IGJkaW5mby5iaV9lbmV0M2FkZHIsIDYpOworCisJZGV2cCA9IGZpbmRkZXZpY2UoIi9zb2M4 NTcyL2V0aGVybmV0QDI0MDAwIik7CisJaWYgKGRldnAgPT0gTlVMTCkKKwkJZmF0YWwoIkVy cm9yOiBNaXNzaW5nIGV0aGVybmV0IGRldmljZSB0cmVlIG5vZGVcblxyIik7CisJc2V0cHJv cChkZXZwLCAibG9jYWwtbWFjLWFkZHJlc3MiLCAmZW5ldDBfYWRkclswXSwgc2l6ZW9mKGVu ZXQwX2FkZHIpKTsKKworCWRldnAgPSBmaW5kZGV2aWNlKCIvc29jODU3Mi9ldGhlcm5ldEAy NTAwMCIpOworCWlmIChkZXZwID09IE5VTEwpCisJCWZhdGFsKCJFcnJvcjogTWlzc2luZyBl dGhlcm5ldCBkZXZpY2UgdHJlZSBub2RlXG5cciIpOworCXNldHByb3AoZGV2cCwgImxvY2Fs LW1hYy1hZGRyZXNzIiwgJmVuZXQxX2FkZHJbMF0sIHNpemVvZihlbmV0MF9hZGRyKSk7CisK KwlkZXZwID0gZmluZGRldmljZSgiL3NvYzg1NzIvZXRoZXJuZXRAMjYwMDAiKTsKKwlpZiAo ZGV2cCA9PSBOVUxMKQorCQlmYXRhbCgiRXJyb3I6IE1pc3NpbmcgZXRoZXJuZXQgZGV2aWNl IHRyZWUgbm9kZVxuXHIiKTsKKwlzZXRwcm9wKGRldnAsICJsb2NhbC1tYWMtYWRkcmVzcyIs ICZlbmV0Ml9hZGRyWzBdLCBzaXplb2YoZW5ldDBfYWRkcikpOworCisJZGV2cCA9IGZpbmRk ZXZpY2UoIi9zb2M4NTcyL2V0aGVybmV0QDI3MDAwIik7CisJaWYgKGRldnAgPT0gTlVMTCkK KwkJZmF0YWwoIkVycm9yOiBNaXNzaW5nIGV0aGVybmV0IGRldmljZSB0cmVlIG5vZGVcblxy Iik7CisJc2V0cHJvcChkZXZwLCAibG9jYWwtbWFjLWFkZHJlc3MiLCAmZW5ldDNfYWRkclsw XSwgc2l6ZW9mKGVuZXQwX2FkZHIpKTsKK30KKworI2RlZmluZSBIRUFQX1NJWkUJKDE2Kk1C KQorc3RhdGljIHN0cnVjdCBndW56aXBfc3RhdGUgZ3pzdGF0ZTsKKwordm9pZCBwbGF0Zm9y bV9pbml0KHVuc2lnbmVkIGxvbmcgcjMsIHVuc2lnbmVkIGxvbmcgcjQsIHVuc2lnbmVkIGxv bmcgcjUsCisJCSAgIHVuc2lnbmVkIGxvbmcgcjYsIHVuc2lnbmVkIGxvbmcgcjcpCit7CisJ c3RydWN0IGVsZl9pbmZvIGVpOworCWNoYXIgKmhlYXBfc3RhcnQsICpkdGI7CisJaW50IGR0 X3NpemUgPSBfZHRiX2VuZCAtIF9kdGJfc3RhcnQ7CisJdm9pZCAqdm1saW51el9hZGRyID0g X3ZtbGludXhfc3RhcnQ7CisJdW5zaWduZWQgbG9uZyB2bWxpbnV6X3NpemUgPSBfdm1saW51 eF9lbmQgLSBfdm1saW51eF9zdGFydDsKKwljaGFyIGVsZmhlYWRlclsyNTZdOworCWJkX3Qg KmJwID0gKGJkX3QgKikgcjM7CisKKwltZW1jcHkoJmJkaW5mbywgYnAsIHNpemVvZihiZF90 KSk7CisJaWYgKGR0X3NpemUgPD0gMCkgewkvKiBObyBmZHQgKi8KKwkJZXhpdCgpOworCX0K KworCS8qCisJICogU3RhcnQgaGVhcCBhZnRlciBlbmQgb2YgdGhlIGtlcm5lbCAoYWZ0ZXIg ZGVjb21wcmVzc2VkIHRvCisJICogYWRkcmVzcyAwKSBvciB0aGUgZW5kIG9mIHRoZSB6SW1h Z2UsIHdoaWNoZXZlciBpcyBoaWdoZXIuCisJICogVGhhdCdzIHNvIHRoaW5ncyBhbGxvY2F0 ZWQgYnkgc2ltcGxlX2FsbG9jIHdvbid0IG92ZXJ3cml0ZQorCSAqIGFueSBwYXJ0IG9mIHRo ZSB6SW1hZ2UgYW5kIHRoZSBrZXJuZWwgd29uJ3Qgb3ZlcndyaXRlIHRoZSBkdGIKKwkgKiB3 aGVuIGRlY29tcHJlc3NlZCAmIHJlbG9jYXRlZC4KKwkgKi8KKwlndW56aXBfc3RhcnQoJmd6 c3RhdGUsIHZtbGludXpfYWRkciwgdm1saW51el9zaXplKTsKKwlndW56aXBfZXhhY3RseSgm Z3pzdGF0ZSwgZWxmaGVhZGVyLCBzaXplb2YoZWxmaGVhZGVyKSk7CisKKwlpZiAoIXBhcnNl X2VsZjMyKGVsZmhlYWRlciwgJmVpKSkKKwkJZXhpdCgpOworCisJaGVhcF9zdGFydCA9IChj aGFyICopKGVpLm1lbXNpemUgKyBlaS5lbGZvZmZzZXQpOy8qIGVuZCBvZiBrZXJuZWwgKi8K KwloZWFwX3N0YXJ0ID0gbWF4KGhlYXBfc3RhcnQsIChjaGFyICopX2VuZCk7CS8qIGVuZCBv ZiB6SW1hZ2UgKi8KKworCisJaWYgKCh1bnNpZ25lZClzaW1wbGVfYWxsb2NfaW5pdChoZWFw X3N0YXJ0LCBIRUFQX1NJWkUsIDIgKiBLQiwgMTYpCisJICAgID4gKDEyOCAqIE1CKSkKKwkJ ZXhpdCgpOworCisJLyogUmVsb2NhdGUgZHRiIHRvIHNhZmUgYXJlYSBwYXN0IGVuZCBvZiB6 SW1hZ2UgJiBrZXJuZWwgKi8KKwlkdGIgPSBtYWxsb2MoZHRfc2l6ZSk7CisJaWYgKCFkdGIp CisJCWV4aXQoKTsKKwltZW1tb3ZlKGR0YiwgX2R0Yl9zdGFydCwgZHRfc2l6ZSk7CisJZmR0 X2luaXQoZHRiKTsKKworCisJcGxhdGZvcm1fb3BzLmZpeHVwcyA9IGNwY2k2MjAwX2ZpeHVw czsKKwlwbGF0Zm9ybV9vcHMuZXhpdCA9IGNwY2k2MjAwX3Jlc2V0OworCisJaWYgKHNlcmlh bF9jb25zb2xlX2luaXQoKSA8IDApCisJCWV4aXQoKTsKKy8vCXByaW50Zigib2Zmc2V0IDB4 JXggc3RhcnQgMHgleCBkdGIgMHgleFxuXHIiLCBlaS5lbGZvZmZzZXQsIGhlYXBfc3RhcnQs IGR0Yik7Cit9CisKK2FzbSgiCS5nbG9ibCBfemltYWdlX3N0YXJ0XG5cCisJX3ppbWFnZV9z dGFydDpcblwKKwkJbWZtc3IgICAxMFxuXAorCQlybHdpbm0gIDEwLDEwLDAsfigxPDwxNSkg ICAgICAgIC8qIENsZWFyIE1TUl9FRSAqL1xuXAorCQlzeW5jXG5cCisJCW10bXNyICAgMTBc blwKKwkJaXN5bmNcblwKKwkJYiBfemltYWdlX3N0YXJ0X2xpYlxuXAorIik7CmRpZmYgLXUg LS1uZXctZmlsZSAtLXJlY3Vyc2l2ZSBsaW51eC0yLjYuMjkuNi5vcmlnL2FyY2gvcG93ZXJw Yy9ib290L3BwbHVzYm9vdC1tdm1lMzEwMC5jIGxpbnV4LTIuNi4yOS42Lm1vZC9hcmNoL3Bv d2VycGMvYm9vdC9wcGx1c2Jvb3QtbXZtZTMxMDAuYwotLS0gbGludXgtMi42LjI5LjYub3Jp Zy9hcmNoL3Bvd2VycGMvYm9vdC9wcGx1c2Jvb3QtbXZtZTMxMDAuYwkxOTY5LTEyLTMxIDE3 OjAwOjAwLjAwMDAwMDAwMCAtMDcwMAorKysgbGludXgtMi42LjI5LjYubW9kL2FyY2gvcG93 ZXJwYy9ib290L3BwbHVzYm9vdC1tdm1lMzEwMC5jCTIwMDktMDgtMTMgMTQ6MTQ6MzcuMDAw MDAwMDAwIC0wNzAwCkBAIC0wLDAgKzEsMTgxIEBACisvKgorICogRW1lcnNvbiBOZXR3b3Jr IFBvd2VyIEVtYmVkZGVkIENvbXB1dGluZyAgTVZNRTMxMDAgYm9vdHdyYXBwZXIgY29kZS4K KyAqCisgKiBBdXRob3I6IEFqaXQgUHJlbSA8YWppdC5wcmVtQGVtZXJzb24uY29tPgorICoK KyAqIENvcHlyaWdodCAyMDA4IEVtZXJzb24gTmV0d29yayBQb3dlciBFbWJlZGRlZCBDb21w dXRpbmcgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciAqIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIAorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIu ICBUaGlzIHByb2dyYW0KKyAqIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2Fy cmFudHkgb2YgYW55IGtpbmQsIAorICogd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisg Ki8KKworI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1 ZGUgInR5cGVzLmgiCisjaW5jbHVkZSAiZWxmLmgiCisjaW5jbHVkZSAicGFnZS5oIgorI2lu Y2x1ZGUgInN0cmluZy5oIgorI2luY2x1ZGUgInN0ZGlvLmgiCisjaW5jbHVkZSAiaW8uaCIK KyNpbmNsdWRlICJvcHMuaCIKKyNpbmNsdWRlICJndW56aXBfdXRpbC5oIgorCisjZGVmaW5l IFRBUkdFVF9NVk1FMzEwMAorI2luY2x1ZGUgInBwY2Jvb3QuaCIKKworZXh0ZXJuIGNoYXIg X2VuZFtdOworZXh0ZXJuIGNoYXIgX3ZtbGludXhfc3RhcnRbXSwgX3ZtbGludXhfZW5kW107 CitleHRlcm4gY2hhciBfZHRiX3N0YXJ0W10sIF9kdGJfZW5kW107CisKK3N0YXRpYyB1bnNp Z25lZCBjaGFyIGVuZXQwX2FkZHJbNl07CitzdGF0aWMgdW5zaWduZWQgY2hhciBlbmV0MV9h ZGRyWzZdOworc3RhdGljIHVuc2lnbmVkIGNoYXIgZW5ldDJfYWRkcls2XTsKK3N0YXRpYyBi ZF90IGJkaW5mbzsKKworI2RlZmluZSBLQgkxMDI0VQorI2RlZmluZSBNQgkoS0IqS0IpCisK KyNkZWZpbmUgRUVQUk9NX0FERFIJMHhBOAorCitCU1NfU1RBQ0soMTYgKiBLQik7CisKK3N0 YXRpYyB2b2lkIG12bWUzMTAwX3Jlc2V0KHZvaWQpCit7CisJb3V0XzgoKHU4ICopIDB4ZjIw MDAwMDEsIDB4QTApOworCisJZm9yICg7OykgCisJCTsKK30KKworc3RhdGljIHZvaWQgbXZt ZTMxMDBfZml4dXBzKHZvaWQpCit7CisJdm9pZCAqZGV2cDsKKwl1MzIgdlsyXTsKKworCS8q IE5vdyBmaXh1cCBkZXZpY2UgdHJlZSBwcm9wZXJ0aWVzICovCisJLyogU2V0IC9tb2RlbCBh cHByb3ByaWF0ZWx5ICovCisJZGV2cCA9IGZpbmRkZXZpY2UoIi8iKTsKKwlpZiAoZGV2cCA9 PSBOVUxMKQorCQlmYXRhbCgiRXJyb3I6IE1pc3NpbmcgJy8nIGRldmljZSB0cmVlIG5vZGVc blxyIik7CisKKwkvKiBTZXQgL2NwdXMvUG93ZXJQQyw4NTQwL2Nsb2NrLWZyZXF1ZW5jeSAq LworCWRldnAgPSBmaW5kZGV2aWNlKCIvY3B1cy9Qb3dlclBDLDg1NDAiKTsKKwlpZiAoZGV2 cCA9PSBOVUxMKQorCQlmYXRhbCgiRXJyb3I6IE1pc3NpbmcgcHJvcGVyIC9jcHVzIGRldmlj ZSB0cmVlIG5vZGVcblxyIik7CisKKwl2WzBdID0gYmRpbmZvLmJpX2ludGZyZXE7CisJdlsw XSAqPSAxMDAwMDAwOworCXNldHByb3AoZGV2cCwgImNsb2NrLWZyZXF1ZW5jeSIsICZ2WzBd LCBzaXplb2YodlswXSkpOworLy8JcHJpbnRmKCJjbG9jay1mcmVxdWVuY3kgMHgleFxuXHIi LCB2WzBdKTsKKworCXZbMF0gPSBiZGluZm8uYmlfYnVzZnJlcTsKKwl2WzBdICo9IDEwMDAw MDA7CisJc2V0cHJvcChkZXZwLCAiYnVzLWZyZXF1ZW5jeSIsICZ2WzBdLCBzaXplb2Yodlsw XSkpOworLy8JcHJpbnRmKCJidXMtZnJlcXVlbmN5IDB4JXhcblxyIiwgdlswXSk7CisKKyAg ICAgICAgdlswXSAvPSA4OworICAgICAgICBzZXRwcm9wKGRldnAsICJ0aW1lYmFzZS1mcmVx dWVuY3kiLCAmdlswXSwgc2l6ZW9mKHZbMF0pKTsKKy8vCXByaW50ZigidGltZWJhc2UtZnJl cXVlbmN5IDB4JXhcblxyIiwgdlswXSk7CisKKwkvKiBTZXQgbWVtb3J5IHNpemUgKi8KKwlk ZXZwID0gZmluZGRldmljZSgiL21lbW9yeSIpOworCWlmIChkZXZwID09IE5VTEwpCisJCWZh dGFsKCJFcnJvcjogTWlzc2luZyAvbWVtb3J5IGRldmljZSB0cmVlIG5vZGVcblxyIik7CisJ dlswXSA9IDA7CisJdlsxXSA9IGJkaW5mby5iaV9tZW1zaXplOworCXNldHByb3AoZGV2cCwg InJlZyIsIHYsIHNpemVvZih2KSk7CisvLwlwcmludGYoIk1lbW9yeSBTaXplIDB4JXhcblxy IiwgdlsxXSk7CisKKyAgICAgICAgZGV2cCA9IGZpbmRkZXZpY2UoIi9zb2M4NTQwL3Nlcmlh bEA0NTAwIik7CisgICAgICAgIGlmIChkZXZwID09IE5VTEwpCisgICAgICAgICAgICAgICAg ZmF0YWwoIkVycm9yOiBNaXNzaW5nIHNvYzg1NDAgc2VyaWFsIGRldmljZSB0cmVlIG5vZGVc blxyIik7CisgICAgICAgIHZbMF0gPSBiZGluZm8uYmlfYnVzZnJlcTsKKyAgICAgICAgdlsw XSAqPSAxMDAwMDAwOworICAgICAgICBzZXRwcm9wKGRldnAsICJjbG9jay1mcmVxdWVuY3ki LCAmdlswXSwgc2l6ZW9mKHZbMF0pKTsKKy8vCXByaW50Zigic2VyaWFsLWNsb2NrLWZyZXF1 ZW5jeSAweCV4XG5cciIsIHZbMF0pOworCisJbWVtY3B5KGVuZXQwX2FkZHIsIGJkaW5mby5i aV9lbmV0YWRkciwgNik7CisJbWVtY3B5KGVuZXQxX2FkZHIsIGJkaW5mby5iaV9lbmV0MWFk ZHIsIDYpOworCW1lbWNweShlbmV0Ml9hZGRyLCBiZGluZm8uYmlfZW5ldDJhZGRyLCA2KTsK KworCWRldnAgPSBmaW5kZGV2aWNlKCIvc29jODU0MC9ldGhlcm5ldEAyNDAwMCIpOworCWlm IChkZXZwID09IE5VTEwpCisJCWZhdGFsKCJFcnJvcjogTWlzc2luZyBldGhlcm5ldCBkZXZp Y2UgdHJlZSBub2RlXG5cciIpOworCXNldHByb3AoZGV2cCwgImxvY2FsLW1hYy1hZGRyZXNz IiwgJmVuZXQwX2FkZHJbMF0sIHNpemVvZihlbmV0MF9hZGRyKSk7CisKKwlkZXZwID0gZmlu ZGRldmljZSgiL3NvYzg1NDAvZXRoZXJuZXRAMjUwMDAiKTsKKwlpZiAoZGV2cCA9PSBOVUxM KQorCQlmYXRhbCgiRXJyb3I6IE1pc3NpbmcgZXRoZXJuZXQgZGV2aWNlIHRyZWUgbm9kZVxu XHIiKTsKKwlzZXRwcm9wKGRldnAsICJsb2NhbC1tYWMtYWRkcmVzcyIsICZlbmV0MV9hZGRy WzBdLCBzaXplb2YoZW5ldDBfYWRkcikpOworCisJZGV2cCA9IGZpbmRkZXZpY2UoIi9zb2M4 NTQwL2V0aGVybmV0QDI2MDAwIik7CisJaWYgKGRldnAgPT0gTlVMTCkKKwkJZmF0YWwoIkVy cm9yOiBNaXNzaW5nIGV0aGVybmV0IGRldmljZSB0cmVlIG5vZGVcblxyIik7CisJc2V0cHJv cChkZXZwLCAibG9jYWwtbWFjLWFkZHJlc3MiLCAmZW5ldDJfYWRkclswXSwgc2l6ZW9mKGVu ZXQwX2FkZHIpKTsKK30KKworI2RlZmluZSBIRUFQX1NJWkUJKDE2Kk1CKQorc3RhdGljIHN0 cnVjdCBndW56aXBfc3RhdGUgZ3pzdGF0ZTsKKwordm9pZCBwbGF0Zm9ybV9pbml0KHVuc2ln bmVkIGxvbmcgcjMsIHVuc2lnbmVkIGxvbmcgcjQsIHVuc2lnbmVkIGxvbmcgcjUsCisJCSAg IHVuc2lnbmVkIGxvbmcgcjYsIHVuc2lnbmVkIGxvbmcgcjcpCit7CisJc3RydWN0IGVsZl9p bmZvIGVpOworCWNoYXIgKmhlYXBfc3RhcnQsICpkdGI7CisJaW50IGR0X3NpemUgPSBfZHRi X2VuZCAtIF9kdGJfc3RhcnQ7CisJdm9pZCAqdm1saW51el9hZGRyID0gX3ZtbGludXhfc3Rh cnQ7CisJdW5zaWduZWQgbG9uZyB2bWxpbnV6X3NpemUgPSBfdm1saW51eF9lbmQgLSBfdm1s aW51eF9zdGFydDsKKwljaGFyIGVsZmhlYWRlclsyNTZdOworCWJkX3QgKmJwID0gKGJkX3Qg KikgcjM7CisKKwltZW1jcHkoJmJkaW5mbywgYnAsIHNpemVvZihiZF90KSk7CisKKwlpZiAo ZHRfc2l6ZSA8PSAwKSB7CS8qIE5vIGZkdCAqLworCQlleGl0KCk7CisJfQorCisJLyoKKwkg KiBTdGFydCBoZWFwIGFmdGVyIGVuZCBvZiB0aGUga2VybmVsIChhZnRlciBkZWNvbXByZXNz ZWQgdG8KKwkgKiBhZGRyZXNzIDApIG9yIHRoZSBlbmQgb2YgdGhlIHpJbWFnZSwgd2hpY2hl dmVyIGlzIGhpZ2hlci4KKwkgKiBUaGF0J3Mgc28gdGhpbmdzIGFsbG9jYXRlZCBieSBzaW1w bGVfYWxsb2Mgd29uJ3Qgb3ZlcndyaXRlCisJICogYW55IHBhcnQgb2YgdGhlIHpJbWFnZSBh bmQgdGhlIGtlcm5lbCB3b24ndCBvdmVyd3JpdGUgdGhlIGR0YgorCSAqIHdoZW4gZGVjb21w cmVzc2VkICYgcmVsb2NhdGVkLgorCSAqLworCWd1bnppcF9zdGFydCgmZ3pzdGF0ZSwgdm1s aW51el9hZGRyLCB2bWxpbnV6X3NpemUpOworCWd1bnppcF9leGFjdGx5KCZnenN0YXRlLCBl bGZoZWFkZXIsIHNpemVvZihlbGZoZWFkZXIpKTsKKworCWlmICghcGFyc2VfZWxmMzIoZWxm aGVhZGVyLCAmZWkpKQorCQlleGl0KCk7CisKKwloZWFwX3N0YXJ0ID0gKGNoYXIgKikoZWku bWVtc2l6ZSArIGVpLmVsZm9mZnNldCk7LyogZW5kIG9mIGtlcm5lbCAqLworCWhlYXBfc3Rh cnQgPSBtYXgoaGVhcF9zdGFydCwgKGNoYXIgKilfZW5kKTsJLyogZW5kIG9mIHpJbWFnZSAq LworCisJaWYgKCh1bnNpZ25lZClzaW1wbGVfYWxsb2NfaW5pdChoZWFwX3N0YXJ0LCBIRUFQ X1NJWkUsIDIgKiBLQiwgMTYpCisJICAgID4gKDEyOCAqIE1CKSkKKwkJZXhpdCgpOworCisJ LyogUmVsb2NhdGUgZHRiIHRvIHNhZmUgYXJlYSBwYXN0IGVuZCBvZiB6SW1hZ2UgJiBrZXJu ZWwgKi8KKwlkdGIgPSBtYWxsb2MoZHRfc2l6ZSk7CisJaWYgKCFkdGIpCisJCWV4aXQoKTsK KwltZW1tb3ZlKGR0YiwgX2R0Yl9zdGFydCwgZHRfc2l6ZSk7CisJZmR0X2luaXQoZHRiKTsK KworCXBsYXRmb3JtX29wcy5maXh1cHMgPSBtdm1lMzEwMF9maXh1cHM7CisJcGxhdGZvcm1f b3BzLmV4aXQgPSBtdm1lMzEwMF9yZXNldDsKKworCWlmIChzZXJpYWxfY29uc29sZV9pbml0 KCkgPCAwKQorCQlleGl0KCk7Cit9CisKK2FzbSgiCS5nbG9ibCBfemltYWdlX3N0YXJ0XG5c CisJX3ppbWFnZV9zdGFydDpcblwKKwkJbWZtc3IgICAxMFxuXAorCQlybHdpbm0gIDEwLDEw LDAsfigxPDwxNSkgICAgICAgIC8qIENsZWFyIE1TUl9FRSAqL1xuXAorCQlzeW5jXG5cCisJ CW10bXNyICAgMTBcblwKKwkJaXN5bmNcblwKKwkJYiBfemltYWdlX3N0YXJ0X2xpYlxuXAor Iik7CmRpZmYgLXUgLS1uZXctZmlsZSAtLXJlY3Vyc2l2ZSBsaW51eC0yLjYuMjkuNi5vcmln L2FyY2gvcG93ZXJwYy9ib290L3BwbHVzYm9vdC1tdm1lNDEwMC5jIGxpbnV4LTIuNi4yOS42 Lm1vZC9hcmNoL3Bvd2VycGMvYm9vdC9wcGx1c2Jvb3QtbXZtZTQxMDAuYwotLS0gbGludXgt Mi42LjI5LjYub3JpZy9hcmNoL3Bvd2VycGMvYm9vdC9wcGx1c2Jvb3QtbXZtZTQxMDAuYwkx OTY5LTEyLTMxIDE3OjAwOjAwLjAwMDAwMDAwMCAtMDcwMAorKysgbGludXgtMi42LjI5LjYu bW9kL2FyY2gvcG93ZXJwYy9ib290L3BwbHVzYm9vdC1tdm1lNDEwMC5jCTIwMDktMDgtMTMg MTQ6MTM6NTIuMDAwMDAwMDAwIC0wNzAwCkBAIC0wLDAgKzEsMTk1IEBACisvKgorICogRW1l cnNvbiBOZXR3b3JrIFBvd2VyIEVtYmVkZGVkIENvbXB1dGluZyBNVk1FNDEwMCBib290d3Jh cHBlciBjb2RlLgorICoKKyAqIEF1dGhvcjogQWppdCBQcmVtIDxhaml0LnByZW1AZW1lcnNv bi5jb20+CisgKgorICogQ29weXJpZ2h0IDIwMDggRW1lcnNvbiBOZXR3b3JrIFBvd2VyIEVt YmVkZGVkIENvbXB1dGluZyBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIAorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2 ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbQorICogaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0 IGFueSB3YXJyYW50eSBvZiBhbnkga2luZCwgCisgKiB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1w bGllZC4KKyAqLworCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+ CisjaW5jbHVkZSAidHlwZXMuaCIKKyNpbmNsdWRlICJlbGYuaCIKKyNpbmNsdWRlICJwYWdl LmgiCisjaW5jbHVkZSAic3RyaW5nLmgiCisjaW5jbHVkZSAic3RkaW8uaCIKKyNpbmNsdWRl ICJpby5oIgorI2luY2x1ZGUgIm9wcy5oIgorI2luY2x1ZGUgImd1bnppcF91dGlsLmgiCisK KyNkZWZpbmUgVEFSR0VUX01WTUU0MTAwCisjaW5jbHVkZSAicHBjYm9vdC5oIgorCitleHRl cm4gY2hhciBfZW5kW107CitleHRlcm4gY2hhciBfdm1saW51eF9zdGFydFtdLCBfdm1saW51 eF9lbmRbXTsKK2V4dGVybiBjaGFyIF9kdGJfc3RhcnRbXSwgX2R0Yl9lbmRbXTsKKworCisK K3N0YXRpYyB1bnNpZ25lZCBjaGFyIGVuZXQwX2FkZHJbNl07CitzdGF0aWMgdW5zaWduZWQg Y2hhciBlbmV0MV9hZGRyWzZdOworc3RhdGljIHVuc2lnbmVkIGNoYXIgZW5ldDJfYWRkcls2 XTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGVuZXQzX2FkZHJbNl07CitzdGF0aWMgYmRfdCBi ZGluZm87CisKKyNkZWZpbmUgS0IJMTAyNFUKKyNkZWZpbmUgTUIJKEtCKktCKQorCisjZGVm aW5lIEVFUFJPTV9BRERSCTB4QTgKKworQlNTX1NUQUNLKDE2ICogS0IpOworCit2b2lkIG12 bWU0MTAwX3Jlc2V0KHZvaWQpCit7CisgICAgICAgIG91dF84KCh1OCAqKSAweGYyMDAwMDAx LCAweEEwKTsKKworCWZvciAoOzspIAorCQk7Cit9CisKK3N0YXRpYyB2b2lkIG12bWU0MTAw X2ZpeHVwcyh2b2lkKQoreworCXZvaWQgKmRldnA7CisJdTMyIHZbMl07CisKKwkvKiBOb3cg Zml4dXAgZGV2aWNlIHRyZWUgcHJvcGVydGllcyAqLworCS8qIFNldCAvbW9kZWwgYXBwcm9w cmlhdGVseSAqLworCWRldnAgPSBmaW5kZGV2aWNlKCIvIik7CisJaWYgKGRldnAgPT0gTlVM TCkKKwkJZmF0YWwoIkVycm9yOiBNaXNzaW5nICcvJyBkZXZpY2UgdHJlZSBub2RlXG5cciIp OworCisJLyogU2V0IC9jcHVzL1Bvd2VyUEMsODU0OC9jbG9jay1mcmVxdWVuY3kgKi8KKwlk ZXZwID0gZmluZGRldmljZSgiL2NwdXMvUG93ZXJQQyw4NTQ4Iik7CisJaWYgKGRldnAgPT0g TlVMTCkKKwkJZmF0YWwoIkVycm9yOiBNaXNzaW5nIHByb3BlciAvY3B1cyBkZXZpY2UgdHJl ZSBub2RlXG5cciIpOworCisJdlswXSA9IGJkaW5mby5iaV9pbnRmcmVxOworCXZbMF0gKj0g MTAwMDAwMDsKKwlzZXRwcm9wKGRldnAsICJjbG9jay1mcmVxdWVuY3kiLCAmdlswXSwgc2l6 ZW9mKHZbMF0pKTsKKworLy8JcHJpbnRmKCJDbG9jay1mcmVxdWVuY3kgMHgleFxuXHIiLCB2 WzBdKTsKKworCXZbMF0gPSBiZGluZm8uYmlfYnVzZnJlcTsKKwl2WzBdICo9IDEwMDAwMDA7 CisJc2V0cHJvcChkZXZwLCAiYnVzLWZyZXF1ZW5jeSIsICZ2WzBdLCBzaXplb2YodlswXSkp OworCisvLwlwcmludGYoImJ1cy1mcmVxdWVuY3kgMHgleFxuXHIiLCB2WzBdKTsKKworCXZb MF0gLz0gODsKKwlzZXRwcm9wKGRldnAsICJ0aW1lYmFzZS1mcmVxdWVuY3kiLCAmdlswXSwg c2l6ZW9mKHZbMF0pKTsKKworCS8qIFNldCBtZW1vcnkgc2l6ZSAqLworCWRldnAgPSBmaW5k ZGV2aWNlKCIvbWVtb3J5Iik7CisJaWYgKGRldnAgPT0gTlVMTCkKKwkJZmF0YWwoIkVycm9y OiBNaXNzaW5nIC9tZW1vcnkgZGV2aWNlIHRyZWUgbm9kZVxuXHIiKTsKKwl2WzBdID0gMDsK Kwl2WzFdID0gYmRpbmZvLmJpX21lbXNpemU7CisJc2V0cHJvcChkZXZwLCAicmVnIiwgdiwg c2l6ZW9mKHYpKTsKKworLy8JcHJpbnRmKCJNZW1vcnkgU2l6ZSAweCV4XG5cciIsIHZbMV0p OworCisJZGV2cCA9IGZpbmRkZXZpY2UoIi9zb2M4NTQ4L3NlcmlhbEA0NTAwIik7CisJaWYg KGRldnAgPT0gTlVMTCkKKwkJZmF0YWwoIkVycm9yOiBNaXNzaW5nIHNvYzg1NDggc2VyaWFs IGRldmljZSB0cmVlIG5vZGVcblxyIik7CisJdlswXSA9IGJkaW5mby5iaV9idXNmcmVxOwor CXZbMF0gKj0gMTAwMDAwMDsKKwlzZXRwcm9wKGRldnAsICJjbG9jay1mcmVxdWVuY3kiLCAm dlswXSwgc2l6ZW9mKHZbMF0pKTsKKworLy8JcHJpbnRmKCJzZXJpYWwtY2xvY2stZnJlcXVl bmN5IDB4JXhcblxyIiwgdlswXSk7CisKKwltZW1jcHkoZW5ldDBfYWRkciwgYmRpbmZvLmJp X2VuZXRhZGRyLCA2KTsKKwltZW1jcHkoZW5ldDFfYWRkciwgYmRpbmZvLmJpX2VuZXQxYWRk ciwgNik7CisJbWVtY3B5KGVuZXQyX2FkZHIsIGJkaW5mby5iaV9lbmV0MmFkZHIsIDYpOwor CW1lbWNweShlbmV0M19hZGRyLCBiZGluZm8uYmlfZW5ldDNhZGRyLCA2KTsKKworCWRldnAg PSBmaW5kZGV2aWNlKCIvc29jODU0OC9ldGhlcm5ldEAyNDAwMCIpOworCWlmIChkZXZwID09 IE5VTEwpCisJCWZhdGFsKCJFcnJvcjogTWlzc2luZyBldGhlcm5ldCBkZXZpY2UgdHJlZSBu b2RlXG5cciIpOworCXNldHByb3AoZGV2cCwgImxvY2FsLW1hYy1hZGRyZXNzIiwgJmVuZXQw X2FkZHJbMF0sIHNpemVvZihlbmV0MF9hZGRyKSk7CisKKwlkZXZwID0gZmluZGRldmljZSgi L3NvYzg1NDgvZXRoZXJuZXRAMjUwMDAiKTsKKwlpZiAoZGV2cCA9PSBOVUxMKQorCQlmYXRh bCgiRXJyb3I6IE1pc3NpbmcgZXRoZXJuZXQgZGV2aWNlIHRyZWUgbm9kZVxuXHIiKTsKKwlz ZXRwcm9wKGRldnAsICJsb2NhbC1tYWMtYWRkcmVzcyIsICZlbmV0MV9hZGRyWzBdLCBzaXpl b2YoZW5ldDBfYWRkcikpOworCisJZGV2cCA9IGZpbmRkZXZpY2UoIi9zb2M4NTQ4L2V0aGVy bmV0QDI2MDAwIik7CisJaWYgKGRldnAgPT0gTlVMTCkKKwkJZmF0YWwoIkVycm9yOiBNaXNz aW5nIGV0aGVybmV0IGRldmljZSB0cmVlIG5vZGVcblxyIik7CisJc2V0cHJvcChkZXZwLCAi bG9jYWwtbWFjLWFkZHJlc3MiLCAmZW5ldDJfYWRkclswXSwgc2l6ZW9mKGVuZXQwX2FkZHIp KTsKKworCWRldnAgPSBmaW5kZGV2aWNlKCIvc29jODU0OC9ldGhlcm5ldEAyNzAwMCIpOwor CWlmIChkZXZwID09IE5VTEwpCisJCWZhdGFsKCJFcnJvcjogTWlzc2luZyBldGhlcm5ldCBk ZXZpY2UgdHJlZSBub2RlXG5cciIpOworCXNldHByb3AoZGV2cCwgImxvY2FsLW1hYy1hZGRy ZXNzIiwgJmVuZXQzX2FkZHJbMF0sIHNpemVvZihlbmV0MF9hZGRyKSk7Cit9CisKKyNkZWZp bmUgSEVBUF9TSVpFCSgxNipNQikKK3N0YXRpYyBzdHJ1Y3QgZ3VuemlwX3N0YXRlIGd6c3Rh dGU7CisKK3ZvaWQgcGxhdGZvcm1faW5pdCh1bnNpZ25lZCBsb25nIHIzLCB1bnNpZ25lZCBs b25nIHI0LCB1bnNpZ25lZCBsb25nIHI1LAorCQkgICB1bnNpZ25lZCBsb25nIHI2LCB1bnNp Z25lZCBsb25nIHI3KQoreworCXN0cnVjdCBlbGZfaW5mbyBlaTsKKwljaGFyICpoZWFwX3N0 YXJ0LCAqZHRiOworCWludCBkdF9zaXplID0gX2R0Yl9lbmQgLSBfZHRiX3N0YXJ0OworCXZv aWQgKnZtbGludXpfYWRkciA9IF92bWxpbnV4X3N0YXJ0OworCXVuc2lnbmVkIGxvbmcgdm1s aW51el9zaXplID0gX3ZtbGludXhfZW5kIC0gX3ZtbGludXhfc3RhcnQ7CisJY2hhciBlbGZo ZWFkZXJbMjU2XTsKKwliZF90ICpicCA9IChiZF90ICopIHIzOworCisJbWVtY3B5KCZiZGlu Zm8sIGJwLCBzaXplb2YoYmRfdCkpOworCWlmIChkdF9zaXplIDw9IDApIHsJLyogTm8gZmR0 ICovCisJCWV4aXQoKTsKKwl9CisKKwkvKgorCSAqIFN0YXJ0IGhlYXAgYWZ0ZXIgZW5kIG9m IHRoZSBrZXJuZWwgKGFmdGVyIGRlY29tcHJlc3NlZCB0bworCSAqIGFkZHJlc3MgMCkgb3Ig dGhlIGVuZCBvZiB0aGUgekltYWdlLCB3aGljaGV2ZXIgaXMgaGlnaGVyLgorCSAqIFRoYXQn cyBzbyB0aGluZ3MgYWxsb2NhdGVkIGJ5IHNpbXBsZV9hbGxvYyB3b24ndCBvdmVyd3JpdGUK KwkgKiBhbnkgcGFydCBvZiB0aGUgekltYWdlIGFuZCB0aGUga2VybmVsIHdvbid0IG92ZXJ3 cml0ZSB0aGUgZHRiCisJICogd2hlbiBkZWNvbXByZXNzZWQgJiByZWxvY2F0ZWQuCisJICov CisJZ3VuemlwX3N0YXJ0KCZnenN0YXRlLCB2bWxpbnV6X2FkZHIsIHZtbGludXpfc2l6ZSk7 CisJZ3VuemlwX2V4YWN0bHkoJmd6c3RhdGUsIGVsZmhlYWRlciwgc2l6ZW9mKGVsZmhlYWRl cikpOworCisJaWYgKCFwYXJzZV9lbGYzMihlbGZoZWFkZXIsICZlaSkpCisJCWV4aXQoKTsK KworCWhlYXBfc3RhcnQgPSAoY2hhciAqKShlaS5tZW1zaXplICsgZWkuZWxmb2Zmc2V0KTsv KiBlbmQgb2Yga2VybmVsICovCisJaGVhcF9zdGFydCA9IG1heChoZWFwX3N0YXJ0LCAoY2hh ciAqKV9lbmQpOwkvKiBlbmQgb2YgekltYWdlICovCisKKworCWlmICgodW5zaWduZWQpc2lt cGxlX2FsbG9jX2luaXQoaGVhcF9zdGFydCwgSEVBUF9TSVpFLCAyICogS0IsIDE2KQorCSAg ICA+ICgxMjggKiBNQikpCisJCWV4aXQoKTsKKworCS8qIFJlbG9jYXRlIGR0YiB0byBzYWZl IGFyZWEgcGFzdCBlbmQgb2YgekltYWdlICYga2VybmVsICovCisJZHRiID0gbWFsbG9jKGR0 X3NpemUpOworCWlmICghZHRiKQorCQlleGl0KCk7CisJbWVtbW92ZShkdGIsIF9kdGJfc3Rh cnQsIGR0X3NpemUpOworCWZkdF9pbml0KGR0Yik7CisKKworCXBsYXRmb3JtX29wcy5maXh1 cHMgPSBtdm1lNDEwMF9maXh1cHM7CisJcGxhdGZvcm1fb3BzLmV4aXQgPSBtdm1lNDEwMF9y ZXNldDsKKworCWlmIChzZXJpYWxfY29uc29sZV9pbml0KCkgPCAwKQorCQlleGl0KCk7Cisv LwlwcmludGYoIm9mZnNldCAweCV4IHN0YXJ0IDB4JXggZHRiIDB4JXhcblxyIiwgZWkuZWxm b2Zmc2V0LCBoZWFwX3N0YXJ0LCBkdGIpOworfQorCithc20oIgkuZ2xvYmwgX3ppbWFnZV9z dGFydFxuXAorCV96aW1hZ2Vfc3RhcnQ6XG5cCisJCW1mbXNyICAgMTBcblwKKwkJcmx3aW5t ICAxMCwxMCwwLH4oMTw8MTUpICAgICAgICAvKiBDbGVhciBNU1JfRUUgKi9cblwKKwkJc3lu Y1xuXAorCQltdG1zciAgIDEwXG5cCisJCWlzeW5jXG5cCisJCWIgX3ppbWFnZV9zdGFydF9s aWJcblwKKyIpOwpkaWZmIC11IC0tbmV3LWZpbGUgLS1yZWN1cnNpdmUgbGludXgtMi42LjI5 LjYub3JpZy9hcmNoL3Bvd2VycGMvYm9vdC9wcGx1c2Jvb3QtbXZtZTcxMDAuYyBsaW51eC0y LjYuMjkuNi5tb2QvYXJjaC9wb3dlcnBjL2Jvb3QvcHBsdXNib290LW12bWU3MTAwLmMKLS0t IGxpbnV4LTIuNi4yOS42Lm9yaWcvYXJjaC9wb3dlcnBjL2Jvb3QvcHBsdXNib290LW12bWU3 MTAwLmMJMTk2OS0xMi0zMSAxNzowMDowMC4wMDAwMDAwMDAgLTA3MDAKKysrIGxpbnV4LTIu Ni4yOS42Lm1vZC9hcmNoL3Bvd2VycGMvYm9vdC9wcGx1c2Jvb3QtbXZtZTcxMDAuYwkyMDA5 LTA4LTEzIDE0OjE3OjI5LjAwMDAwMDAwMCAtMDcwMApAQCAtMCwwICsxLDIxMCBAQAorLyoK KyAqIE1vdG9yb2xhIEVDQyBNVk1FNzEwMCBib290d3JhcHBlciBjb2RlLgorICoKKyAqIEF1 dGhvcjogQWppdCBQcmVtIDxBaml0LlByZW1AZW1lcnNvbi5jb20+CisgKgorICogMjAwNyAo YykgTW90b3JvbGEsIEluYy4gIAorICogMjAwOC0yMDA5IChjKSBFbWVyc29uIE5ldHdvcmsg UG93ZXIgRW1iZWRkZWQgQ29tcHV0aW5nICAKKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5z ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtCisgKiBpcyBsaWNlbnNlZCAiYXMgaXMiIHdp dGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCAKKyAqIHdoZXRoZXIgZXhwcmVzcyBv ciBpbXBsaWVkLgorICovCisKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRk ZWYuaD4KKyNpbmNsdWRlICJ0eXBlcy5oIgorI2luY2x1ZGUgImVsZi5oIgorI2luY2x1ZGUg InBhZ2UuaCIKKyNpbmNsdWRlICJzdHJpbmcuaCIKKyNpbmNsdWRlICJzdGRpby5oIgorI2lu Y2x1ZGUgImlvLmgiCisjaW5jbHVkZSAib3BzLmgiCisjaW5jbHVkZSAiZ3VuemlwX3V0aWwu aCIKKworI2RlZmluZSBUQVJHRVRfTVZNRTcxMDAKKyNpbmNsdWRlICJwcGNib290LmgiCisK K2V4dGVybiBjaGFyIF9lbmRbXTsKK2V4dGVybiBjaGFyIF92bWxpbnV4X3N0YXJ0W10sIF92 bWxpbnV4X2VuZFtdOworZXh0ZXJuIGNoYXIgX2R0Yl9zdGFydFtdLCBfZHRiX2VuZFtdOwor CitzdGF0aWMgdW5zaWduZWQgY2hhciBlbmV0MF9hZGRyWzZdOworc3RhdGljIHVuc2lnbmVk IGNoYXIgZW5ldDFfYWRkcls2XTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGVuZXQyX2FkZHJb Nl07CitzdGF0aWMgdW5zaWduZWQgY2hhciBlbmV0M19hZGRyWzZdOworc3RhdGljIGJkX3Qg YmRpbmZvOworCisjZGVmaW5lIEtCCTEwMjRVCisjZGVmaW5lIE1CCShLQipLQikKKworI2Rl ZmluZSBFRVBST01fQUREUgkweEEyCisKK0JTU19TVEFDSygxNiAqIEtCKTsKKwordm9pZCBt dm1lNzEwMF9yZXNldCh2b2lkKQoreworICAgICAgICB1MzIgKnJzdGNyOworICAgICAgICBy c3RjciA9ICh1MzIgKikgKDB4ZjEwMDAwMDAgKyAweDAwMGUwMGIwKTsKKworICAgICAgICAv KiBBc3NlcnQgcmVzZXQgcmVxdWVzdCB0byBSZXNldCBDb250cm9sIFJlZ2lzdGVyICovCisg ICAgICAgIG91dF9iZTMyKHJzdGNyLCAweDIpOworCisJZm9yICg7OykgCisJCTsKK30KKwor c3RhdGljIHZvaWQgbXZtZTcxMDBfZml4dXBzKHZvaWQpCit7CisJdm9pZCAqZGV2cDsKKwl1 MzIgdlsyXTsKKworCS8qIE5vdyBmaXh1cCBkZXZpY2UgdHJlZSBwcm9wZXJ0aWVzICovCisJ LyogU2V0IC9tb2RlbCBhcHByb3ByaWF0ZWx5ICovCisJZGV2cCA9IGZpbmRkZXZpY2UoIi8i KTsKKwlpZiAoZGV2cCA9PSBOVUxMKQorCQlmYXRhbCgiRXJyb3I6IE1pc3NpbmcgJy8nIGRl dmljZSB0cmVlIG5vZGVcblxyIik7CisKKwkvKiBTZXQgL2NwdXMvUG93ZXJQQyw4NjQxQDAv Y2xvY2stZnJlcXVlbmN5ICovCisJZGV2cCA9IGZpbmRkZXZpY2UoIi9jcHVzL1Bvd2VyUEMs ODY0MUAwIik7CisJaWYgKGRldnAgPT0gTlVMTCkKKwkJZmF0YWwoIkVycm9yOiBNaXNzaW5n IHByb3BlciAvY3B1cyBkZXZpY2UgdHJlZSBub2RlXG5cciIpOworCisJdlswXSA9IGJkaW5m by5iaV9pbnRmcmVxOworCXZbMF0gKj0gMTAwMDAwMDsKKwlzZXRwcm9wKGRldnAsICJjbG9j ay1mcmVxdWVuY3kiLCAmdlswXSwgc2l6ZW9mKHZbMF0pKTsKKworCXZbMF0gPSBiZGluZm8u YmlfYnVzZnJlcTsKKwl2WzBdICo9IDEwMDAwMDA7CisJc2V0cHJvcChkZXZwLCAiYnVzLWZy ZXF1ZW5jeSIsICZ2WzBdLCBzaXplb2YodlswXSkpOworCisJdlswXSAvPSA0OworCXNldHBy b3AoZGV2cCwgInRpbWViYXNlLWZyZXF1ZW5jeSIsICZ2WzBdLCBzaXplb2YodlswXSkpOwor CisJLyogU2V0IC9jcHVzL1Bvd2VyUEMsODY0MUAxL2Nsb2NrLWZyZXF1ZW5jeSAqLworCWRl dnAgPSBmaW5kZGV2aWNlKCIvY3B1cy9Qb3dlclBDLDg2NDFAMSIpOworCWlmIChkZXZwID09 IE5VTEwpCisJCWZhdGFsKCJFcnJvcjogTWlzc2luZyBwcm9wZXIgL2NwdXMgZGV2aWNlIHRy ZWUgbm9kZVxuXHIiKTsKKworCXZbMF0gPSBiZGluZm8uYmlfaW50ZnJlcTsKKwl2WzBdICo9 IDEwMDAwMDA7CisJc2V0cHJvcChkZXZwLCAiY2xvY2stZnJlcXVlbmN5IiwgJnZbMF0sIHNp emVvZih2WzBdKSk7CisKKwl2WzBdID0gYmRpbmZvLmJpX2J1c2ZyZXE7CisJdlswXSAqPSAx MDAwMDAwOworCXNldHByb3AoZGV2cCwgImJ1cy1mcmVxdWVuY3kiLCAmdlswXSwgc2l6ZW9m KHZbMF0pKTsKKworCXZbMF0gLz0gNDsKKwlzZXRwcm9wKGRldnAsICJ0aW1lYmFzZS1mcmVx dWVuY3kiLCAmdlswXSwgc2l6ZW9mKHZbMF0pKTsKKworCS8qIFNldCBtZW1vcnkgc2l6ZSAq LworCWRldnAgPSBmaW5kZGV2aWNlKCIvbWVtb3J5Iik7CisJaWYgKGRldnAgPT0gTlVMTCkK KwkJZmF0YWwoIkVycm9yOiBNaXNzaW5nIC9tZW1vcnkgZGV2aWNlIHRyZWUgbm9kZVxuXHIi KTsKKwl2WzBdID0gMDsKKwl2WzFdID0gYmRpbmZvLmJpX21lbXNpemU7CisJc2V0cHJvcChk ZXZwLCAicmVnIiwgdiwgc2l6ZW9mKHYpKTsKKworCWRldnAgPSBmaW5kZGV2aWNlKCIvc29j ODY0MUBmMTAwMDAwMCIpOworCWlmIChkZXZwID09IE5VTEwpCisJCWZhdGFsKCJFcnJvcjog TWlzc2luZyBzb2M4NjQxIGRldmljZSB0cmVlIG5vZGVcblxyIik7CisJdlswXSA9IGJkaW5m by5iaV9idXNmcmVxOworCXZbMF0gKj0gMTAwMDAwMDsKKwlzZXRwcm9wKGRldnAsICJidXMt ZnJlcXVlbmN5IiwgJnZbMF0sIHNpemVvZih2WzBdKSk7CisKKwlkZXZwID0gZmluZGRldmlj ZSgiL3NvYzg2NDEvc2VyaWFsQDQ1MDAiKTsKKwlpZiAoZGV2cCA9PSBOVUxMKQorCQlmYXRh bCgiRXJyb3I6IE1pc3Npbmcgc29jODY0MSBzZXJpYWwgZGV2aWNlIHRyZWUgbm9kZVxuXHIi KTsKKwl2WzBdID0gYmRpbmZvLmJpX2J1c2ZyZXE7CisJdlswXSAqPSAxMDAwMDAwOworCXNl dHByb3AoZGV2cCwgImNsb2NrLWZyZXF1ZW5jeSIsICZ2WzBdLCBzaXplb2YodlswXSkpOwor CisJbWVtY3B5KGVuZXQwX2FkZHIsIGJkaW5mby5iaV9lbmV0YWRkciwgNik7CisJbWVtY3B5 KGVuZXQxX2FkZHIsIGJkaW5mby5iaV9lbmV0MWFkZHIsIDYpOworCW1lbWNweShlbmV0Ml9h ZGRyLCBiZGluZm8uYmlfZW5ldDJhZGRyLCA2KTsKKwltZW1jcHkoZW5ldDNfYWRkciwgYmRp bmZvLmJpX2VuZXQzYWRkciwgNik7CisKKwlkZXZwID0gZmluZGRldmljZSgiL3NvYzg2NDEv ZXRoZXJuZXRAMjQwMDAiKTsKKwlpZiAoZGV2cCA9PSBOVUxMKQorCQlmYXRhbCgiRXJyb3I6 IE1pc3NpbmcgZXRoZXJuZXQgZGV2aWNlIHRyZWUgbm9kZVxuXHIiKTsKKwlzZXRwcm9wKGRl dnAsICJsb2NhbC1tYWMtYWRkcmVzcyIsICZlbmV0MF9hZGRyWzBdLCBzaXplb2YoZW5ldDBf YWRkcikpOworCisJZGV2cCA9IGZpbmRkZXZpY2UoIi9zb2M4NjQxL2V0aGVybmV0QDI1MDAw Iik7CisJaWYgKGRldnAgPT0gTlVMTCkKKwkJZmF0YWwoIkVycm9yOiBNaXNzaW5nIGV0aGVy bmV0IGRldmljZSB0cmVlIG5vZGVcblxyIik7CisJc2V0cHJvcChkZXZwLCAibG9jYWwtbWFj LWFkZHJlc3MiLCAmZW5ldDFfYWRkclswXSwgc2l6ZW9mKGVuZXQwX2FkZHIpKTsKKworCWRl dnAgPSBmaW5kZGV2aWNlKCIvc29jODY0MS9ldGhlcm5ldEAyNjAwMCIpOworCWlmIChkZXZw ID09IE5VTEwpCisJCWZhdGFsKCJFcnJvcjogTWlzc2luZyBldGhlcm5ldCBkZXZpY2UgdHJl ZSBub2RlXG5cciIpOworCXNldHByb3AoZGV2cCwgImxvY2FsLW1hYy1hZGRyZXNzIiwgJmVu ZXQyX2FkZHJbMF0sIHNpemVvZihlbmV0MF9hZGRyKSk7CisKKwlkZXZwID0gZmluZGRldmlj ZSgiL3NvYzg2NDEvZXRoZXJuZXRAMjcwMDAiKTsKKwlpZiAoZGV2cCA9PSBOVUxMKQorCQlm YXRhbCgiRXJyb3I6IE1pc3NpbmcgZXRoZXJuZXQgZGV2aWNlIHRyZWUgbm9kZVxuXHIiKTsK KwlzZXRwcm9wKGRldnAsICJsb2NhbC1tYWMtYWRkcmVzcyIsICZlbmV0M19hZGRyWzBdLCBz aXplb2YoZW5ldDBfYWRkcikpOworfQorCisjZGVmaW5lIEhFQVBfU0laRQkoMTYqTUIpCitz dGF0aWMgc3RydWN0IGd1bnppcF9zdGF0ZSBnenN0YXRlOworCit2b2lkIHBsYXRmb3JtX2lu aXQodW5zaWduZWQgbG9uZyByMywgdW5zaWduZWQgbG9uZyByNCwgdW5zaWduZWQgbG9uZyBy NSwKKwkJICAgdW5zaWduZWQgbG9uZyByNiwgdW5zaWduZWQgbG9uZyByNykKK3sKKwlzdHJ1 Y3QgZWxmX2luZm8gZWk7CisJY2hhciAqaGVhcF9zdGFydCwgKmR0YjsKKwlpbnQgZHRfc2l6 ZSA9IF9kdGJfZW5kIC0gX2R0Yl9zdGFydDsKKwl2b2lkICp2bWxpbnV6X2FkZHIgPSBfdm1s aW51eF9zdGFydDsKKwl1bnNpZ25lZCBsb25nIHZtbGludXpfc2l6ZSA9IF92bWxpbnV4X2Vu ZCAtIF92bWxpbnV4X3N0YXJ0OworCWNoYXIgZWxmaGVhZGVyWzI1Nl07CisJYmRfdCAqYnAg PSAoYmRfdCAqKSByMzsKKworCW1lbWNweSgmYmRpbmZvLCBicCwgc2l6ZW9mKGJkX3QpKTsK KwlpZiAoZHRfc2l6ZSA8PSAwKSB7CS8qIE5vIGZkdCAqLworCQlleGl0KCk7CisJfQorCisJ LyoKKwkgKiBTdGFydCBoZWFwIGFmdGVyIGVuZCBvZiB0aGUga2VybmVsIChhZnRlciBkZWNv bXByZXNzZWQgdG8KKwkgKiBhZGRyZXNzIDApIG9yIHRoZSBlbmQgb2YgdGhlIHpJbWFnZSwg d2hpY2hldmVyIGlzIGhpZ2hlci4KKwkgKiBUaGF0J3Mgc28gdGhpbmdzIGFsbG9jYXRlZCBi eSBzaW1wbGVfYWxsb2Mgd29uJ3Qgb3ZlcndyaXRlCisJICogYW55IHBhcnQgb2YgdGhlIHpJ bWFnZSBhbmQgdGhlIGtlcm5lbCB3b24ndCBvdmVyd3JpdGUgdGhlIGR0YgorCSAqIHdoZW4g ZGVjb21wcmVzc2VkICYgcmVsb2NhdGVkLgorCSAqLworCWd1bnppcF9zdGFydCgmZ3pzdGF0 ZSwgdm1saW51el9hZGRyLCB2bWxpbnV6X3NpemUpOworCWd1bnppcF9leGFjdGx5KCZnenN0 YXRlLCBlbGZoZWFkZXIsIHNpemVvZihlbGZoZWFkZXIpKTsKKworCWlmICghcGFyc2VfZWxm MzIoZWxmaGVhZGVyLCAmZWkpKQorCQlleGl0KCk7CisKKwloZWFwX3N0YXJ0ID0gKGNoYXIg KikoZWkubWVtc2l6ZSArIGVpLmVsZm9mZnNldCk7LyogZW5kIG9mIGtlcm5lbCAqLworCWhl YXBfc3RhcnQgPSBtYXgoaGVhcF9zdGFydCwgKGNoYXIgKilfZW5kKTsJLyogZW5kIG9mIHpJ bWFnZSAqLworCisJaWYgKCh1bnNpZ25lZClzaW1wbGVfYWxsb2NfaW5pdChoZWFwX3N0YXJ0 LCBIRUFQX1NJWkUsIDIgKiBLQiwgMTYpCisJICAgID4gKDEyOCAqIE1CKSkKKwkJZXhpdCgp OworCisJLyogUmVsb2NhdGUgZHRiIHRvIHNhZmUgYXJlYSBwYXN0IGVuZCBvZiB6SW1hZ2Ug JiBrZXJuZWwgKi8KKwlkdGIgPSBtYWxsb2MoZHRfc2l6ZSk7CisJaWYgKCFkdGIpCisJCWV4 aXQoKTsKKwltZW1tb3ZlKGR0YiwgX2R0Yl9zdGFydCwgZHRfc2l6ZSk7CisJZmR0X2luaXQo ZHRiKTsKKworCXBsYXRmb3JtX29wcy5maXh1cHMgPSBtdm1lNzEwMF9maXh1cHM7CisJcGxh dGZvcm1fb3BzLmV4aXQgPSBtdm1lNzEwMF9yZXNldDsKKworCWlmIChzZXJpYWxfY29uc29s ZV9pbml0KCkgPCAwKQorCQlleGl0KCk7Cit9CisKK2FzbSgiCS5nbG9ibCBfemltYWdlX3N0 YXJ0XG5cCisJX3ppbWFnZV9zdGFydDpcblwKKwkJbWZtc3IgICAxMFxuXAorCQlybHdpbm0g IDEwLDEwLDAsfigxPDwxNSkgICAgICAgIC8qIENsZWFyIE1TUl9FRSAqL1xuXAorCQlzeW5j XG5cCisJCW10bXNyICAgMTBcblwKKwkJaXN5bmNcblwKKwkJYiBfemltYWdlX3N0YXJ0X2xp YlxuXAorIik7CmRpZmYgLXUgLS1uZXctZmlsZSAtLXJlY3Vyc2l2ZSBsaW51eC0yLjYuMjku Ni5vcmlnL2FyY2gvcG93ZXJwYy9ib290L3NlcmlhbC5jIGxpbnV4LTIuNi4yOS42Lm1vZC9h cmNoL3Bvd2VycGMvYm9vdC9zZXJpYWwuYwotLS0gbGludXgtMi42LjI5LjYub3JpZy9hcmNo L3Bvd2VycGMvYm9vdC9zZXJpYWwuYwkyMDA5LTA3LTAyIDE2OjQxOjIwLjAwMDAwMDAwMCAt MDcwMAorKysgbGludXgtMi42LjI5LjYubW9kL2FyY2gvcG93ZXJwYy9ib290L3NlcmlhbC5j CTIwMDktMDctMjEgMTE6Mjg6MTcuMDAwMDAwMDAwIC0wNzAwCkBAIC00NCw3ICs0NCw3IEBA CiAJY3AgPSAmYnVmW2NvdW50XTsKIAljb3VudCsrOwogCi0Jd2hpbGUgKHRpbWVyKysgPCA1 KjEwMDApIHsKKwl3aGlsZSAodGltZXIrKyA8IDEwKjEwMDApIHsKIAkJaWYgKHNjZHAtPnRz dGMoKSkgewogCQkJd2hpbGUgKCgoY2ggPSBzY2RwLT5nZXRjKCkpICE9ICdcbicpICYmIChj aCAhPSAnXHInKSkgewogCQkJCS8qIFRlc3QgZm9yIGJhY2tzcGFjZS9kZWxldGUgKi8KZGlm ZiAtdSAtLW5ldy1maWxlIC0tcmVjdXJzaXZlIGxpbnV4LTIuNi4yOS42Lm9yaWcvYXJjaC9w b3dlcnBjL2Jvb3Qvd3JhcHBlciBsaW51eC0yLjYuMjkuNi5tb2QvYXJjaC9wb3dlcnBjL2Jv b3Qvd3JhcHBlcgotLS0gbGludXgtMi42LjI5LjYub3JpZy9hcmNoL3Bvd2VycGMvYm9vdC93 cmFwcGVyCTIwMDktMDctMDIgMTY6NDE6MjAuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0y LjYuMjkuNi5tb2QvYXJjaC9wb3dlcnBjL2Jvb3Qvd3JhcHBlcgkyMDA5LTA3LTIxIDExOjI4 OjE3LjAwMDAwMDAwMCAtMDcwMApAQCAtMzI2LDYgKzMyNiwxMiBAQAogICAgIGZpCiAgICAg ZXhpdCAwCiAgICAgOzsKK3BwbHVzYm9vdCopCisgICAgbXYgIiRvZmlsZSIgIiRvZmlsZS5l bGYiCisgICAgJG9iamJpbi9ta3ByZXAgLXBicCAiJG9maWxlLmVsZiIgIiRvZmlsZSIKKyAg ICBybSAtZiAiJG9maWxlLmVsZiIKKyAgICBleGl0IDAKKyAgICA7OwogcHMzKQogICAgICMg VGhlIHBzMydzIGxvYWRlciBzdXBwb3J0cyBsb2FkaW5nIGEgZ3ppcHBlZCBiaW5hcnkgaW1h Z2UgZnJvbSBmbGFzaAogICAgICMgcm9tIHRvIHJhbSBhZGRyIHplcm8uIFRoZSBsb2FkZXIg dGhlbiBlbnRlcnMgdGhlIHN5c3RlbSByZXNldApkaWZmIC11IC0tbmV3LWZpbGUgLS1yZWN1 cnNpdmUgbGludXgtMi42LjI5LjYub3JpZy9hcmNoL3Bvd2VycGMvY29uZmlncy9jcGNpNjIw MF9kZWZjb25maWcgbGludXgtMi42LjI5LjYubW9kL2FyY2gvcG93ZXJwYy9jb25maWdzL2Nw Y2k2MjAwX2RlZmNvbmZpZwotLS0gbGludXgtMi42LjI5LjYub3JpZy9hcmNoL3Bvd2VycGMv Y29uZmlncy9jcGNpNjIwMF9kZWZjb25maWcJMTk2OS0xMi0zMSAxNzowMDowMC4wMDAwMDAw MDAgLTA3MDAKKysrIGxpbnV4LTIuNi4yOS42Lm1vZC9hcmNoL3Bvd2VycGMvY29uZmlncy9j cGNpNjIwMF9kZWZjb25maWcJMjAwOS0wNy0yMSAxMToyODoxNy4wMDAwMDAwMDAgLTA3MDAK QEAgLTAsMCArMSwxODEzIEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2Ug Y29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjkuNQor IyBUaHUgSnVuIDI1IDE0OjIzOjU3IDIwMDkKKyMKKyMgQ09ORklHX1BQQzY0IGlzIG5vdCBz ZXQKKworIworIyBQcm9jZXNzb3Igc3VwcG9ydAorIworIyBDT05GSUdfNnh4IGlzIG5vdCBz ZXQKK0NPTkZJR19QUENfODV4eD15CisjIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKKyMg Q09ORklHXzQweCBpcyBub3Qgc2V0CisjIENPTkZJR180NHggaXMgbm90IHNldAorIyBDT05G SUdfRTIwMCBpcyBub3Qgc2V0CitDT05GSUdfRTUwMD15CisjIENPTkZJR19QUENfRTUwME1D IGlzIG5vdCBzZXQKK0NPTkZJR19CT09LRT15CitDT05GSUdfRlNMX0JPT0tFPXkKK0NPTkZJ R19GU0xfRU1CX1BFUkZNT049eQorIyBDT05GSUdfUEhZU182NEJJVCBpcyBub3Qgc2V0CitD T05GSUdfU1BFPXkKK0NPTkZJR19QUENfTU1VX05PSEFTSD15CisjIENPTkZJR19QUENfTU1f U0xJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19TTVA9eQorQ09ORklHX05SX0NQVVM9MgorQ09O RklHX1BQQzMyPXkKK0NPTkZJR19XT1JEX1NJWkU9MzIKKyMgQ09ORklHX0FSQ0hfUEhZU19B RERSX1RfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX01NVT15CitDT05GSUdfR0VORVJJQ19D TU9TX1VQREFURT15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX1RJ TUVfVlNZU0NBTEw9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX0dF TkVSSUNfSEFSRElSUVM9eQorIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMg bm90IHNldAorQ09ORklHX0lSUV9QRVJfQ1BVPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBP UlQ9eQorQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKK0NPTkZJR19MT0NLREVQ X1NVUFBPUlQ9eQorQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKK0NPTkZJR19H RU5FUklDX0xPQ0tCUkVBSz15CitDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKK0NPTkZJ R19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkK K0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorIyBDT05GSUdfQVJDSF9OT19WSVJU X1RPX0JVUyBpcyBub3Qgc2V0CitDT05GSUdfUFBDPXkKK0NPTkZJR19FQVJMWV9QUklOVEs9 eQorQ09ORklHX0dFTkVSSUNfTlZSQU09eQorQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9J TlRFUj15CitDT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQorQ09ORklHX1BQQ19PRj15 CitDT05GSUdfT0Y9eQorQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKK0NPTkZJR19HRU5FUklD X1RCU1lOQz15CitDT05GSUdfQVVESVRfQVJDSD15CitDT05GSUdfR0VORVJJQ19CVUc9eQor IyBDT05GSUdfREVGQVVMVF9VSU1BR0UgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RDUl9O QVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKK0NP TkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25m aWciCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitD T05GSUdfTE9DS19LRVJORUw9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09O RklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJ R19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CitD T05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKKyMgQ09O RklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRT IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vi c3lzdGVtCisjCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1UgaXMg bm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJF RV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMg bm90IHNldAorQ09ORklHX0lLQ09ORklHPXkKK0NPTkZJR19JS0NPTkZJR19QUk9DPXkKK0NP TkZJR19MT0dfQlVGX1NISUZUPTE0CitDT05GSUdfR1JPVVBfU0NIRUQ9eQorQ09ORklHX0ZB SVJfR1JPVVBfU0NIRUQ9eQorQ09ORklHX1JUX0dST1VQX1NDSEVEPXkKK0NPTkZJR19VU0VS X1NDSEVEPXkKKyMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfQ0dS T1VQUz15CisjIENPTkZJR19DR1JPVVBfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfQ0dS T1VQX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUF9GUkVFWkVSIGlzIG5vdCBzZXQK KyMgQ09ORklHX0NHUk9VUF9ERVZJQ0UgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVU0VUUyBp cyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBfQ1BVQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJ R19SRVNPVVJDRV9DT1VOVEVSUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRF RD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBu b3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVW X0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0NfT1BU SU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5P Tl9JTk9ERVM9eQorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15 CitDT05GSUdfS0FMTFNZTVM9eQorQ09ORklHX0tBTExTWU1TX0FMTD15CisjIENPTkZJR19L QUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJ R19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0JB U0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdO QUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hN RU09eQorQ09ORklHX0FJTz15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklH X1BDSV9RVUlSS1M9eQorQ09ORklHX1NMVUJfREVCVUc9eQorIyBDT05GSUdfQ09NUEFUX0JS SyBpcyBub3Qgc2V0CisjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKK0NPTkZJR19TTFVCPXkK KyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorQ09ORklHX1BST0ZJTElORz15CitDT05GSUdf VFJBQ0VQT0lOVFM9eQorQ09ORklHX01BUktFUlM9eQorQ09ORklHX09QUk9GSUxFPXkKK0NP TkZJR19IQVZFX09QUk9GSUxFPXkKK0NPTkZJR19LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0VG RklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKK0NPTkZJR19LUkVUUFJPQkVTPXkKK0NPTkZJ R19IQVZFX0lPUkVNQVBfUFJPVD15CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19I QVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklH X1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTPXkKKyMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFf Q09IRVJFTlQgaXMgbm90IHNldAorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRF WEVTPXkKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklH X01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkK KyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFZF UlNJT05TPXkKK0NPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQorQ09ORklHX1NUT1Bf TUFDSElORT15CitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMg Q09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9C U0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAor CisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklH X0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NI RURfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAorIyBDT05GSUdfREVG QVVMVF9ERUFETElORSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQorIyBDT05G SUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNm cSIKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAorCisjCisjIFBsYXRmb3JtIHN1cHBv cnQKKyMKKyMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxM X05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAorQ09ORklH X01QQzg1eHg9eQorIyBDT05GSUdfTVBDODU0MF9BRFMgaXMgbm90IHNldAorIyBDT05GSUdf TVBDODU2MF9BRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODV4eF9DRFMgaXMgbm90IHNl dAorIyBDT05GSUdfTVBDODV4eF9NRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODUzNl9E UyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NXh4X0RTIGlzIG5vdCBzZXQKKyMgQ09ORklH X0tTSTg1NjAgaXMgbm90IHNldAorIyBDT05GSUdfU1RYX0dQMyBpcyBub3Qgc2V0CisjIENP TkZJR19UUU04NTQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RRTTg1NDEgaXMgbm90IHNldAor IyBDT05GSUdfVFFNODU0OCBpcyBub3Qgc2V0CisjIENPTkZJR19UUU04NTU1IGlzIG5vdCBz ZXQKKyMgQ09ORklHX1RRTTg1NjAgaXMgbm90IHNldAorIyBDT05GSUdfU0JDODU0OCBpcyBu b3Qgc2V0CisjIENPTkZJR19TQkM4NTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01WTUUzMTAw IGlzIG5vdCBzZXQKKyMgQ09ORklHX01WTUU0MTAwIGlzIG5vdCBzZXQKK0NPTkZJR19DUENJ NjIwMD15CitDT05GSUdfQ1BDSTYyMDBfRU5BQkxFX0REUl9FUlJPUlM9eQorQ09ORklHX0NQ Q0k2MjAwX0VOQUJMRV9MMl9FUlJPUlM9eQorQ09ORklHX0NQQ0k2MjAwX0VOQUJMRV9QQ0lf RVJST1JTPXkKKyMgQ09ORklHX0NQQ0k2MjAwX1RJQ0tfVElNRVJTIGlzIG5vdCBzZXQKKyMg Q09ORklHX0lQSUMgaXMgbm90IHNldAorQ09ORklHX01QSUM9eQorIyBDT05GSUdfTVBJQ19X RUlSRCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAorIyBDT05G SUdfUFBDX1JUQVMgaXMgbm90IHNldAorIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0 CisjIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ185NzBfTkFQ IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0CisjIENP TkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5v dCBzZXQKKyMgQ09ORklHX1FVSUNDX0VOR0lORSBpcyBub3Qgc2V0CisjIENPTkZJR19DUE0y IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKKyMgQ09ORklH X01QQzh4eHhfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TSU1QTEVfR1BJTyBpcyBub3Qg c2V0CisKKyMKKyMgS2VybmVsIG9wdGlvbnMKKyMKK0NPTkZJR19ISUdITUVNPXkKK0NPTkZJ R19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1F UlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorIyBDT05GSUdfSFpf MTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19I Wl8zMDAgaXMgbm90IHNldAorQ09ORklHX0haXzEwMDA9eQorQ09ORklHX0haPTEwMDAKK0NP TkZJR19TQ0hFRF9IUlRJQ0s9eQorIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQK KyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVFTVBU PXkKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VM Rl9IRUFERVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CitD T05GSUdfQklORk1UX01JU0M9eQorQ09ORklHX01BVEhfRU1VTEFUSU9OPXkKKyMgQ09ORklH X0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hP VFBMVUc9eQorQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKK0NPTkZJR19BUkNIX0VO QUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKKyMgQ09ORklHX0lSUV9BTExfQ1BVUyBpcyBub3Qg c2V0CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9QT1BVTEFU RVNfTk9ERV9NQVA9eQorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZM QVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNl dAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1F TT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorQ09ORklHX1BBR0VGTEFHU19FWFRF TkRFRD15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfTUlHUkFUSU9O IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKK0NP TkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19CT1VOQ0U9eQorQ09ORklHX1ZJUlRfVE9f QlVTPXkKK0NPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQorQ09ORklHX1BQQ180S19QQUdFUz15 CisjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ182NEtf UEFHRVMgaXMgbm90IHNldAorQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTEKK0NPTkZJ R19QUk9DX0RFVklDRVRSRUU9eQorQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01E TElORT0iY29uc29sZT10dHlTMCw5NjAwIHJvb3Q9L2Rldi9yYW0wIHJhbWRpc2tfc2l6ZT02 NDAwMCIKK0NPTkZJR19FWFRSQV9UQVJHRVRTPSIiCisjIENPTkZJR19QTSBpcyBub3Qgc2V0 CitDT05GSUdfU0VDQ09NUD15CitDT05GSUdfSVNBX0RNQV9BUEk9eQorCisjCisjIEJ1cyBv cHRpb25zCisjCitDT05GSUdfWk9ORV9ETUE9eQorQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0k9 eQorQ09ORklHX0ZTTF9TT0M9eQorQ09ORklHX0ZTTF9QQ0k9eQorQ09ORklHX1BQQ19QQ0lf Q0hPSUNFPXkKK0NPTkZJR19QQ0k9eQorQ09ORklHX1BDSV9ET01BSU5TPXkKK0NPTkZJR19Q Q0lfU1lTQ0FMTD15CitDT05GSUdfUENJRVBPUlRCVVM9eQorQ09ORklHX1BDSUVBRVI9eQor IyBDT05GSUdfUENJRUFTUE0gaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJ PXkKKyMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAorQ09ORklHX1BDSV9MRUdBQ1k9eQor IyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9TVFVCIGlzIG5v dCBzZXQKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHX1BD SSBpcyBub3Qgc2V0CisjIENPTkZJR19IQVNfUkFQSURJTyBpcyBub3Qgc2V0CisKKyMKKyMg QWR2YW5jZWQgc2V0dXAKKyMKK0NPTkZJR19BRFZBTkNFRF9PUFRJT05TPXkKK0NPTkZJR19M T1dNRU1fU0laRV9CT09MPXkKK0NPTkZJR19MT1dNRU1fU0laRT0weDQwMDAwMDAwCisjIENP TkZJR19SRUxPQ0FUQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfUEFHRV9PRkZTRVRfQk9PTD15 CitDT05GSUdfUEFHRV9PRkZTRVQ9MHg4MDAwMDAwMAorQ09ORklHX0tFUk5FTF9TVEFSVF9C T09MPXkKK0NPTkZJR19LRVJORUxfU1RBUlQ9MHg4MDAwMDAwMAorIyBDT05GSUdfUEhZU0lD QUxfU1RBUlRfQk9PTCBpcyBub3Qgc2V0CitDT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAw MDAwMAorQ09ORklHX1BIWVNJQ0FMX0FMSUdOPTB4MTAwMDAwMDAKK0NPTkZJR19UQVNLX1NJ WkVfQk9PTD15CitDT05GSUdfVEFTS19TSVpFPTB4ODAwMDAwMDAKK0NPTkZJR19ORVQ9eQor CisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX0NPTVBBVF9ORVRfREVWX09Q Uz15CitDT05GSUdfUEFDS0VUPXkKK0NPTkZJR19QQUNLRVRfTU1BUD15CitDT05GSUdfVU5J WD15CitDT05GSUdfWEZSTT15CitDT05GSUdfWEZSTV9VU0VSPXkKKyMgQ09ORklHX1hGUk1f U1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNl dAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9L RVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX01VTFRJQ0FTVD15Cisj IENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9I QVNIPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19J UF9QTlBfQk9PVFA9eQorQ09ORklHX0lQX1BOUF9SQVJQPXkKKyMgQ09ORklHX05FVF9JUElQ IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19J UF9NUk9VVEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJ R19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQK KyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlz IG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorQ09ORklH X0lORVRfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09O RklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVF VD15CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9ESUFHPXkK K0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlz IG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1Bf Q09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKK0NPTkZJR19J UFY2PXkKKyMgQ09ORklHX0lQVjZfUFJJVkFDWSBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2 X1JPVVRFUl9QUkVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQg aXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5F VDZfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X0lQQ09NUCBpcyBub3Qgc2V0Cisj IENPTkZJR19JUFY2X01JUDYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5O RUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJ R19JTkVUNl9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUNl9YRlJNX01PREVf VFVOTkVMPXkKK0NPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD15CisjIENPTkZJR19JTkVU Nl9YRlJNX01PREVfUk9VVEVPUFRJTUlaQVRJT04gaXMgbm90IHNldAorQ09ORklHX0lQVjZf U0lUPXkKK0NPTkZJR19JUFY2X05ESVNDX05PREVUWVBFPXkKKyMgQ09ORklHX0lQVjZfVFVO TkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTIGlzIG5vdCBz ZXQKKyMgQ09ORklHX0lQVjZfTVJPVVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVExBQkVM IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CitDT05G SUdfTkVURklMVEVSPXkKKyMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0CitD T05GSUdfTkVURklMVEVSX0FEVkFOQ0VEPXkKKworIworIyBDb3JlIE5ldGZpbHRlciBDb25m aWd1cmF0aW9uCisjCisjIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRSBpcyBub3Qg c2V0CisjIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0cgaXMgbm90IHNldAorIyBDT05G SUdfTkZfQ09OTlRSQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVT IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKKworIworIyBJUDogTmV0 ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX05GX0RFRlJBR19JUFY0IGlzIG5v dCBzZXQKKyMgQ09ORklHX0lQX05GX1FVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05G X0lQVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX0FSUFRBQkxFUyBpcyBub3Qg c2V0CisKKyMKKyMgSVB2NjogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklH X0lQNl9ORl9RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUDZfTkZfSVBUQUJMRVMgaXMg bm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TQ1RQ IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlz IG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNB IGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdf REVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdf SVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gy NSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05F VCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklH X05FVF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19EQ0IgaXMgbm90IHNldAorCisjCisj IE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Cisj IENPTkZJR19ORVRfVENQUFJPQkUgaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMg bm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90 IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90 IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTIGlz IG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBp cyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBE cml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VF VkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkK K0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX0ZXX0xPQURFUiBp cyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdf REVCVUdfREVWUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5v dCBzZXQKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CitDT05GSUdfTVREPXkKKyMg Q09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NPTkNBVD15CitDT05G SUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKKyMg Q09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ01ETElO RV9QQVJUUz15CisjIENPTkZJR19NVERfT0ZfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdf TVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFu c2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RF VlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBD T05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENP TkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKK0NPTkZJR19TU0ZEQz15CisjIENPTkZJR19NVERf T09QUyBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMK K0NPTkZJR19NVERfQ0ZJPXkKKyMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQK K0NPTkZJR19NVERfR0VOX1BST0JFPXkKK0NPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TPXkK K0NPTkZJR19NVERfQ0ZJX05PU1dBUD15CisjIENPTkZJR19NVERfQ0ZJX0JFX0JZVEVfU1dB UCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0xFX0JZVEVfU1dBUCBpcyBub3Qgc2V0 CisjIENPTkZJR19NVERfQ0ZJX0dFT01FVFJZIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQ X0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklH X01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84 IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0 CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01U RF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBp cyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01U RF9PVFAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JTlRFTEVYVCBpcyBub3Qgc2V0 CitDT05GSUdfTVREX0NGSV9BTURTVEQ9eQorQ09ORklHX01URF9DRklfU1RBQT15CitDT05G SUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorQ09ORklH X01URF9ST009eQorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFw cGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworQ09ORklHX01URF9DT01QTEVYX01B UFBJTkdTPXkKKyMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01U RF9QSFlTTUFQX09GIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QQ0kgaXMgbm90IHNldAor IyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUExB VFJBTSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NQQ0k2MjAwPXkKKworIworIyBTZWxmLWNv bnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9QTUM1NTEgaXMg bm90IHNldAorIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9Q SFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09O RklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZp Y2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05G SUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlz IG5vdCBzZXQKK0NPTkZJR19NVERfTkFORD15CitDT05GSUdfTVREX05BTkRfVkVSSUZZX1dS SVRFPXkKK0NPTkZJR19NVERfTkFORF9FQ0NfU01DPXkKKyMgQ09ORklHX01URF9OQU5EX01V U0VVTV9JRFMgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX0NQQ0k2MjAwPXkKK0NPTkZJ R19NVERfTkFORF9JRFM9eQorIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qg c2V0CisjIENPTkZJR19NVERfTkFORF9DQUZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9O QU5EX05BTkRTSU0gaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX1BMQVRGT1JNPXkKKyMg Q09ORklHX01URF9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfRlNMX0VM QkMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfRlNMX1VQTSBpcyBub3Qgc2V0Cisj IENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgTFBERFIgZmxhc2ggbWVt b3J5IGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisKKyMKKyMg VUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5v dCBzZXQKK0NPTkZJR19PRl9ERVZJQ0U9eQorQ09ORklHX09GX0kyQz15CisjIENPTkZJR19Q QVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZf RkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0CisjIENPTkZJ R19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAg aXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklH X0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPXkK KyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RF Vl9OQkQ9eQorIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAorIyBDT05GSUdfQkxL X0RFVl9VQiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19E RVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0xMzEwNzIKKyMgQ09O RklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMg bm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JM S19ERVZfSEQgaXMgbm90IHNldAorQ09ORklHX01JU0NfREVWSUNFUz15CisjIENPTkZJR19Q SEFOVE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKKyMgQ09O RklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBz ZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19I UF9JTE8gaXMgbm90IHNldAorIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBF RVBST00gc3VwcG9ydAorIworIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAorQ09O RklHX0VFUFJPTV9MRUdBQ1k9eQorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQK K0NPTkZJR19IQVZFX0lERT15CitDT05GSUdfSURFPXkKKworIworIyBQbGVhc2Ugc2VlIERv Y3VtZW50YXRpb24vaWRlL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCisj CisjIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKK0NPTkZJR19JREVfR0Q9 eQorQ09ORklHX0lERV9HRF9BVEE9eQorIyBDT05GSUdfSURFX0dEX0FUQVBJIGlzIG5vdCBz ZXQKKyMgQ09ORklHX0JMS19ERVZfSURFQ0QgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RF Vl9JREVUQVBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERV9UQVNLX0lPQ1RMIGlzIG5vdCBz ZXQKK0NPTkZJR19JREVfUFJPQ19GUz15CisKKyMKKyMgSURFIGNoaXBzZXQgc3VwcG9ydC9i dWdmaXhlcworIworIyBDT05GSUdfQkxLX0RFVl9QTEFURk9STSBpcyBub3Qgc2V0CisKKyMK KyMgUENJIElERSBjaGlwc2V0cyBzdXBwb3J0CisjCisjIENPTkZJR19CTEtfREVWX0dFTkVS SUMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9PUFRJNjIxIGlzIG5vdCBzZXQKKyMg Q09ORklHX0JMS19ERVZfQUVDNjJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0FM STE1WDMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9BTUQ3NFhYIGlzIG5vdCBzZXQK KyMgQ09ORklHX0JMS19ERVZfQ01ENjRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZf VFJJRkxFWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NTNTUyMCBpcyBub3Qgc2V0 CisjIENPTkZJR19CTEtfREVWX0NTNTUzMCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVW X0hQVDM2NiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0pNSUNST04gaXMgbm90IHNl dAorIyBDT05GSUdfQkxLX0RFVl9TQzEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RF Vl9QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSVQ4MTcyIGlzIG5vdCBzZXQK KyMgQ09ORklHX0JMS19ERVZfSVQ4MjEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZf SVQ4MjFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTlM4NzQxNSBpcyBub3Qgc2V0 CisjIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX09MRCBpcyBub3Qgc2V0CisjIENPTkZJR19C TEtfREVWX1BEQzIwMlhYX05FVyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NWV0tT IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU0lJTUFHRSBpcyBub3Qgc2V0CisjIENP TkZJR19CTEtfREVWX1NMODJDMTA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU0xD OTBFNjYgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9UUk0yOTAgaXMgbm90IHNldAor IyBDT05GSUdfQkxLX0RFVl9WSUE4MkNYWFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RF Vl9UQzg2QzAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERURNQSBpcyBub3Qg c2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRS UyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9ETUE9eQorIyBDT05G SUdfU0NTSV9UR1QgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBz ZXQKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChk aXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CisjIENPTkZJR19D SFJfREVWX1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0 CitDT05GSUdfQkxLX0RFVl9TUj15CitDT05GSUdfQkxLX0RFVl9TUl9WRU5ET1I9eQorQ09O RklHX0NIUl9ERVZfU0c9eQorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAorCisj CisjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlw bGUgTFVOcworIworIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAorIyBDT05G SUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlz IG5vdCBzZXQKK0NPTkZJR19TQ1NJX1NDQU5fQVNZTkM9eQorIyBDT05GSUdfU0NTSV9XQUlU X1NDQU4gaXMgbm90IHNldAorCisjCisjIFNDU0kgVHJhbnNwb3J0cworIworQ09ORklHX1ND U0lfU1BJX0FUVFJTPXkKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorIyBD T05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19M SUJTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAor Q09ORklHX1NDU0lfTE9XTEVWRUw9eQorIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQK KyMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ND U0lfM1dfOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQK KyMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzdY WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0Cisj IENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM5NFhY IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRFBUX0kyTyBpcyBub3Qgc2V0CisjIENPTkZJ R19TQ1NJX0FEVkFOU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5v dCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0CisjIENPTkZJR19N RUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5v dCBzZXQKKyMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lf QlVTTE9HSUMgaXMgbm90IHNldAorIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAorIyBDT05G SUdfRkNPRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQK KyMgQ09ORklHX1NDU0lfRUFUQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZVVFVSRV9E T01BSU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9HRFRIIGlzIG5vdCBzZXQKKyMgQ09O RklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBz ZXQKKyMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01W U0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0CitDT05GSUdf U0NTSV9TWU01M0M4WFhfMj15CitDT05GSUdfU0NTSV9TWU01M0M4WFhfRE1BX0FERFJFU1NJ TkdfTU9ERT0xCitDT05GSUdfU0NTSV9TWU01M0M4WFhfREVGQVVMVF9UQUdTPTE2CitDT05G SUdfU0NTSV9TWU01M0M4WFhfTUFYX1RBR1M9NjQKK0NPTkZJR19TQ1NJX1NZTTUzQzhYWF9N TUlPPXkKKyMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxP R0lDXzEyODAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAor IyBDT05GSUdfU0NTSV9RTEFfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MUEZD IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKKyMgQ09ORklH X1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNl dAorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUCBp cyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKK0NPTkZJR19BVEE9eQor IyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfUE1Q IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19T QVRBX1NJTDI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfRlNMIGlzIG5vdCBzZXQKK0NP TkZJR19BVEFfU0ZGPXkKKyMgQ09ORklHX1NBVEFfU1ZXIGlzIG5vdCBzZXQKKyMgQ09ORklH X0FUQV9QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfTVYgaXMgbm90IHNldAorIyBD T05GSUdfU0FUQV9OViBpcyBub3Qgc2V0CisjIENPTkZJR19QRENfQURNQSBpcyBub3Qgc2V0 CisjIENPTkZJR19TQVRBX1FTVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfUFJPTUlT RSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1NYNCBpcyBub3Qgc2V0CisjIENPTkZJR19T QVRBX1NJTCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1NJUyBpcyBub3Qgc2V0CisjIENP TkZJR19TQVRBX1VMSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1ZJQSBpcyBub3Qgc2V0 CisjIENPTkZJR19TQVRBX1ZJVEVTU0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9JTklD MTYyWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0CisjIENPTkZJ R19QQVRBX0FNRCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQK KyMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ01ENjQw X1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CisjIENP TkZJR19QQVRBX0NTNTUyMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NTNTUzMCBpcyBu b3Qgc2V0CisjIENPTkZJR19QQVRBX0NZUFJFU1MgaXMgbm90IHNldAorIyBDT05GSUdfUEFU QV9FRkFSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9HRU5FUklDIGlzIG5vdCBzZXQKKyMg Q09ORklHX1BBVEFfSFBUMzY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUMzdYIGlz IG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUM1gyTiBpcyBub3Qgc2V0CisjIENPTkZJR19Q QVRBX0hQVDNYMyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0lUODIxWCBpcyBub3Qgc2V0 CisjIENPTkZJR19QQVRBX0lUODIxMyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0pNSUNS T04gaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9UUklGTEVYIGlzIG5vdCBzZXQKKyMgQ09O RklHX1BBVEFfTUFSVkVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX01QSUlYIGlzIG5v dCBzZXQKKyMgQ09ORklHX1BBVEFfT0xEUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRB X05FVENFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9OSU5KQTMyIGlzIG5vdCBzZXQK KyMgQ09ORklHX1BBVEFfTlM4NzQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05TODc0 MTUgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9PUFRJIGlzIG5vdCBzZXQKKyMgQ09ORklH X1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90 IHNldAorIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFf UloxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKKyMg Q09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldAorQ09ORklHX1BBVEFfUERDMjAy N1g9eQorIyBDT05GSUdfUEFUQV9TSUw2ODAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9T SVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9WSUEgaXMgbm90IHNldAorIyBDT05GSUdf UEFUQV9XSU5CT05EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUExBVEZPUk0gaXMgbm90 IHNldAorIyBDT05GSUdfUEFUQV9TQ0ggaXMgbm90IHNldAorQ09ORklHX01EPXkKK0NPTkZJ R19CTEtfREVWX01EPXkKKyMgQ09ORklHX01EX0FVVE9ERVRFQ1QgaXMgbm90IHNldAorQ09O RklHX01EX0xJTkVBUj15CitDT05GSUdfTURfUkFJRDA9eQorQ09ORklHX01EX1JBSUQxPXkK KyMgQ09ORklHX01EX1JBSUQxMCBpcyBub3Qgc2V0CitDT05GSUdfTURfUkFJRDQ1Nj15CitD T05GSUdfTURfUkFJRDVfUkVTSEFQRT15CitDT05GSUdfTURfTVVMVElQQVRIPXkKKyMgQ09O RklHX01EX0ZBVUxUWSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9ETT15CisjIENPTkZJ R19ETV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ETV9DUllQVCBpcyBub3Qgc2V0CitD T05GSUdfRE1fU05BUFNIT1Q9eQorQ09ORklHX0RNX01JUlJPUj15CitDT05GSUdfRE1fWkVS Tz15CitDT05GSUdfRE1fTVVMVElQQVRIPXkKKyMgQ09ORklHX0RNX0RFTEFZIGlzIG5vdCBz ZXQKKyMgQ09ORklHX0RNX1VFVkVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT04gaXMg bm90IHNldAorCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKworIwor IyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3 aGF0IHlvdSBhcmUgZG9pbmcKKyMKKyMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKKyMg Q09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyTyBpcyBub3Qgc2V0Cisj IENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNF Uz15CitDT05GSUdfRFVNTVk9eQorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENP TkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0 CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Cisj IENPTkZJR19BUkNORVQgaXMgbm90IHNldAorQ09ORklHX1BIWUxJQj15CisKKyMKKyMgTUlJ IFBIWSBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNl dAorIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUVNFTUlfUEhZ IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQ0lD QURBX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0Cisj IENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0CitDT05GSUdfQlJPQURDT01fUEhZPXkKKyMg Q09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMg bm90IHNldAorIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NU RTEwWFAgaXMgbm90IHNldAorIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQK KyMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRElPX0JJVEJBTkcg aXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKKyMgQ09O RklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAor IyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SXzNDT00g aXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVFVM SVAgaXMgbm90IHNldAorIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUJN X05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJ IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBD T05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdf RU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01B TF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxf Q09NTU9OX0VSUiBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1BDST15CisjIENPTkZJR19QQ05F VDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNRDgxMTFfRVRIIGlzIG5vdCBzZXQKKyMgQ09O RklHX0FEQVBURUNfU1RBUkZJUkUgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBz ZXQKKyMgQ09ORklHX0ZPUkNFREVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwIGlzIG5v dCBzZXQKKyMgQ09ORklHX0ZFQUxOWCBpcyBub3Qgc2V0CisjIENPTkZJR19OQVRTRU1JIGlz IG5vdCBzZXQKKyMgQ09ORklHX05FMktfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHXzgxMzlD UCBpcyBub3Qgc2V0CisjIENPTkZJR184MTM5VE9PIGlzIG5vdCBzZXQKKyMgQ09ORklHX1I2 MDQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJUzkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19F UElDMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5NDIwIGlzIG5vdCBzZXQKKyMgQ09O RklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RMQU4gaXMgbm90IHNldAorIyBD T05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNl dAorIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWXzEwMDA9eQorIyBD T05GSUdfQUNFTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMMksgaXMgbm90IHNldAorQ09O RklHX0UxMDAwPXkKKyMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUDEw MDAgaXMgbm90IHNldAorIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05TODM4 MjAgaXMgbm90IHNldAorIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CisjIENPTkZJR19Z RUxMT1dGSU4gaXMgbm90IHNldAorIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAorIyBDT05G SUdfU0lTMTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLR0UgaXMgbm90IHNldAorIyBDT05G SUdfU0tZMiBpcyBub3Qgc2V0CisjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAor IyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JOWDIgaXMgbm90IHNldAor Q09ORklHX0dJQU5GQVI9eQorIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJ R19BVEwxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKKyMgQ09ORklH X0FUTDFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CisjIENPTkZJR19O RVRERVZfMTAwMDAgaXMgbm90IHNldAorIyBDT05GSUdfVFIgaXMgbm90IHNldAorCisjCisj IFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Cisj IENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRklfTEVEUyBp cyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRv IHNlZSB0aGUgV2lNQVggZHJpdmVycworIworCisjCisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJz CisjCisjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRI IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKKyMgQ09ORklH X1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNl dAorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZEREkgaXMgbm90IHNldAor IyBDT05GSUdfSElQUEkgaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMg Q09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKKyMg Q09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qg c2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklH X0lTRE4gaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElu cHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRf RkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBz ZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCisjIENPTkZJR19JTlBVVF9NT1VT RURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBD T05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMg bm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19JTlBV VF9LRVlCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0 CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9U QUJMRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNl dAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9P IHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9S VCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15 CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQor Q09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlz IG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFS RCBpcyBub3Qgc2V0CisjIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAorCisjCisjIFNlcmlh bCBkcml2ZXJzCisjCitDT05GSUdfU0VSSUFMXzgyNTA9eQorQ09ORklHX1NFUklBTF84MjUw X0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMXzgyNTBfUENJIGlzIG5vdCBzZXQKK0NPTkZJ R19TRVJJQUxfODI1MF9OUl9VQVJUUz01CitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9V QVJUUz01CitDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQorIyBDT05GSUdfU0VSSUFM XzgyNTBfTUFOWV9QT1JUUyBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVf SVJRPXkKKyMgQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlEgaXMgbm90IHNldAorIyBD T05GSUdfU0VSSUFMXzgyNTBfUlNBIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJp YWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNl dAorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkK K0NPTkZJR19DT05TT0xFX1BPTEw9eQorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0 CisjIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX1VOSVg5 OF9QVFlTPXkKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNl dAorIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAorIyBDT05GSUdfSFZDX1VEQkcg aXMgbm90IHNldAorQ09ORklHX0lQTUlfSEFORExFUj15CisjIENPTkZJR19JUE1JX1BBTklD X0VWRU5UIGlzIG5vdCBzZXQKK0NPTkZJR19JUE1JX0RFVklDRV9JTlRFUkZBQ0U9eQorIyBD T05GSUdfSVBNSV9TSSBpcyBub3Qgc2V0CitDT05GSUdfSVBNSV9TTUI9bQorIyBDT05GSUdf SVBNSV9XQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUE1JX1BPV0VST0ZGIGlzIG5v dCBzZXQKKyMgQ09ORklHX0lQTUlfT09QU19DT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklH X0hXX1JBTkRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CisjIENP TkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Cisj IENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90 IHNldAorQ09ORklHX0RFVlBPUlQ9eQorQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0JPQVJE SU5GTz15CitDT05GSUdfSTJDX0NIQVJERVY9eQorIyBDT05GSUdfSTJDX0hFTFBFUl9BVVRP IGlzIG5vdCBzZXQKKworIworIyBJMkMgQWxnb3JpdGhtcworIworIyBDT05GSUdfSTJDX0FM R09CSVQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAorIyBD T05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMg c3VwcG9ydAorIworCisjCisjIFBDIFNNQnVzIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCisj CisjIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTU2 MyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0CisjIENPTkZJ R19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBz ZXQKKyMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JU0NIIGlz IG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNf TkZPUkNFMiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0Cisj IENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM5NlggaXMg bm90IHNldAorIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklB UFJPIGlzIG5vdCBzZXQKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkg ZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKK0NPTkZJR19JMkNfTVBDPXkKK0NPTkZJ R19JMkNfTVBDX0lQTUk9eQorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENP TkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMg YWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qg c2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RJ TllfVVNCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBhZGFwdGVyIEkyQy9EREMgY2hh bm5lbCBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0CisKKyMK KyMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUENBX1BM QVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKworIwor IyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RTMTY4MiBp cyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAorIyBDT05G SUdfUENGODU3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90 IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NF TlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMg bm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdf STJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBu b3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19T UEkgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKKyMg Q09ORklHX0dQSU9MSUIgaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBD T05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBz ZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTF9IV01P TiBpcyBub3Qgc2V0CitDT05GSUdfV0FUQ0hET0c9eQorIyBDT05GSUdfV0FUQ0hET0dfTk9X QVlPVVQgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCisjCisj IENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FMSU03MTAxX1dE VCBpcyBub3Qgc2V0CisjIENPTkZJR19CT09LRV9XRFQgaXMgbm90IHNldAorQ09ORklHX0NQ Q0k2MjAwX1dEVD15CisKKyMKKyMgUENJLWJhc2VkIFdhdGNoZG9nIENhcmRzCisjCisjIENP TkZJR19QQ0lQQ1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dEVFBDSSBpcyBub3Qg c2V0CisKKyMKKyMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19VU0JQ Q1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorCisjCisjIFNv bmljcyBTaWxpY29uIEJhY2twbGFuZQorIworIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKwor IworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfQ09S RSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdf SFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNl dAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19EQTkwM1gg aXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19N RkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90 IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlh IGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIworIyBDT05G SUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQK KyMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRy aXZlcnMKKyMKKyMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3Vw cG9ydAorIworIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTSBpcyBub3Qg c2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQ VVRfQ09OVFJPTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJ R19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2 aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisK KyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCitDT05GSUdfVkdBX0NP TlNPTEU9eQorIyBDT05GSUdfVkdBQ09OX1NPRlRfU0NST0xMQkFDSyBpcyBub3Qgc2V0CitD T05GSUdfRFVNTVlfQ09OU09MRT15CisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CitDT05G SUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD15CisjIENPTkZJR19ISURfREVCVUcgaXMg bm90IHNldAorIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW5wdXQg RGV2aWNlcworIworQ09ORklHX1VTQl9ISUQ9eQorIyBDT05GSUdfSElEX1BJRCBpcyBub3Qg c2V0CisjIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKKworIworIyBTcGVjaWFsIEhJ RCBkcml2ZXJzCisjCitDT05GSUdfSElEX0NPTVBBVD15CisjIENPTkZJR19ISURfQTRURUNI IGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9BUFBMRSBpcyBub3Qgc2V0CisjIENPTkZJR19I SURfQkVMS0lOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9DSEVSUlkgaXMgbm90IHNldAor IyBDT05GSUdfSElEX0NISUNPTlkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0NZUFJFU1Mg aXMgbm90IHNldAorIyBDT05GSUdfSElEX0VaS0VZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJ RF9HWVJBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfTE9HSVRFQ0ggaXMgbm90IHNl dAorIyBDT05GSUdfSElEX01JQ1JPU09GVCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfTU9O VEVSRVkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX05UUklHIGlzIG5vdCBzZXQKKyMgQ09O RklHX0hJRF9QQU5USEVSTE9SRCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUEVUQUxZTlgg aXMgbm90IHNldAorIyBDT05GSUdfSElEX1NBTVNVTkcgaXMgbm90IHNldAorIyBDT05GSUdf SElEX1NPTlkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NVTlBMVVMgaXMgbm90IHNldAor IyBDT05GSUdfR1JFRU5BU0lBX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9UT1BTRUVE IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIUlVTVE1BU1RFUl9GRiBpcyBub3Qgc2V0CisjIENP TkZJR19aRVJPUExVU19GRiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09O RklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NP TkZJR19VU0JfQVJDSF9IQVNfRUhDST15CitDT05GSUdfVVNCPXkKKyMgQ09ORklHX1VTQl9E RUJVRyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTPXkKKwor IworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCitDT05GSUdfVVNCX0RFVklDRUZT PXkKK0NPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKKyMgQ09ORklHX1VTQl9EWU5BTUlDX01J Tk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklH X1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfQkxBQ0tM SVNUX0hVQiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01PTj15CisjIENPTkZJR19VU0JfV1VT QiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKKworIwor IyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9DNjdYMDBf SENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRUhDSV9IQ0Q9eQorQ09ORklHX1VTQl9FSENJ X1JPT1RfSFVCX1RUPXkKKyMgQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEIGlzIG5vdCBz ZXQKKyMgQ09ORklHX1VTQl9FSENJX0ZTTCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRUhD SV9IQ0RfUFBDX09GIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMg bm90IHNldAorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklH X1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEPXkKKyMg Q09ORklHX1VTQl9PSENJX0hDRF9QUENfT0YgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09I Q0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0JJR19F TkRJQU5fTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15 CisjIENPTkZJR19VU0JfVUhDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NMODEx X0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQK KyMgQ09ORklHX1VTQl9XSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSFdBX0hD RCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCisjCisjIENP TkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBz ZXQKKyMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RNQyBpcyBu b3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBC TEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsKKyMKKworIworIyBzZWUgVVNCX1NUT1JB R0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIworQ09ORklHX1VTQl9TVE9SQUdFPXkK KyMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9T VE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNP TSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAor IyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NU T1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBp cyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0Cisj IENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NU T1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEg aXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qg c2V0CisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFn aW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorIyBDT05G SUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKKworIworIyBVU0IgcG9ydCBkcml2ZXJzCisj CisjIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgTWlzY2VsbGFu ZW91cyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAorIyBDT05G SUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNl dAorIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUklPNTAw IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAorIyBDT05G SUdfVVNCX0xDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5v dCBzZXQKKyMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJF U1NfQ1k3QzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQK KyMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JRE1PVVNF IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAorIyBDT05G SUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0lTVVNCVkdB IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0Jf VFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBu b3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNJ R0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CisjIENPTkZJ R19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFz dHJ1Y3R1cmUKKyMKKyMgQ09ORklHX1VXQiBpcyBub3Qgc2V0CisjIENPTkZJR19NTUMgaXMg bm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xF RFMgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CisjIENP TkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VEQUMgaXMgbm90IHNldAor Q09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9T WVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19E RUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENf SU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZf REVWPXkKK0NPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUw9eQorIyBDT05GSUdfUlRDX0RS Vl9URVNUIGlzIG5vdCBzZXQKKworIworIyBJMkMgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklH X1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlz IG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzc1IGlzIG5vdCBzZXQKKyMgQ09ORklH X1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBp cyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAorIyBDT05G SUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfWDEyMDUg aXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKKyMgQ09O RklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0RSVl9NNDFUODA9 eQorIyBDT05GSUdfUlRDX0RSVl9NNDFUODBfV0RUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JU Q19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBu b3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisKKyMKKyMgU1BJ IFJUQyBkcml2ZXJzCisjCisKKyMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKKyMKKyMgQ09O RklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTI4NiBp cyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJ R19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBp cyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09O RklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1 IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09O RklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAg aXMgbm90IHNldAorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRD X0RSVl9QUEMgaXMgbm90IHNldAorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Cisj IENPTkZJR19VSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CisK KyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CitDT05GSUdfRVhUMl9G U19YQVRUUj15CisjIENPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENP TkZJR19FWFQyX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQ IGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKK0NPTkZJR19FWFQzX0ZTX1hBVFRSPXkK KyMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNf RlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CitD T05GSUdfSkJEPXkKKyMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfRlNf TUJDQUNIRT15CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19K RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKK0NP TkZJR19GSUxFX0xPQ0tJTkc9eQorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09O RklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQK K0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VT RVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlz IG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVT RV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworQ09O RklHX0lTTzk2NjBfRlM9eQorQ09ORklHX0pPTElFVD15CisjIENPTkZJR19aSVNPRlMgaXMg bm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05U IEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CisjIENPTkZJ R19WRkFUX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisj CisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BS T0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9O SVRPUj15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZT X1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNl dAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JU0NfRklMRVNZ U1RFTVM9eQorIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZT IGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQ TFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05G SUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CitDT05G SUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKK0NPTkZJR19KRkZTMl9G U19XUklURUJVRkZFUj15CisjIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qg c2V0CisjIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMy X0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElP TlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1pMSUI9eQorIyBDT05GSUdfSkZGUzJfTFpP IGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9SVElNRT15CisjIENPTkZJR19KRkZTMl9SVUJJ TiBpcyBub3Qgc2V0CitDT05GSUdfWUFGRlNfRlM9eQorQ09ORklHX1lBRkZTX1lBRkZTMT15 CisjIENPTkZJR19ZQUZGU185QllURV9UQUdTIGlzIG5vdCBzZXQKK0NPTkZJR19ZQUZGU19E T0VTX0VDQz15CisjIENPTkZJR19ZQUZGU19FQ0NfV1JPTkdfT1JERVIgaXMgbm90IHNldAor Q09ORklHX1lBRkZTX1lBRkZTMj15CitDT05GSUdfWUFGRlNfQVVUT19ZQUZGUzI9eQorIyBD T05GSUdfWUFGRlNfRElTQUJMRV9MQVpZX0xPQUQgaXMgbm90IHNldAorIyBDT05GSUdfWUFG RlNfRElTQUJMRV9XSURFX1ROT0RFUyBpcyBub3Qgc2V0CitDT05GSUdfWUFGRlNfQUxXQVlT X0NIRUNLX0NIVU5LX0VSQVNFRD15CitDT05GSUdfWUFGRlNfU0hPUlRfTkFNRVNfSU5fUkFN PXkKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBu b3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZT IGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBG U19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05G SUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Cisj IENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9 eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19B Q0wgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKK0NPTkZJR19ST09U X05GUz15CitDT05GSUdfTkZTRD15CisjIENPTkZJR19ORlNEX1YzIGlzIG5vdCBzZXQKKyMg Q09ORklHX05GU0RfVjQgaXMgbm90IHNldAorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NL RF9WND15CitDT05GSUdfRVhQT1JURlM9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklH X1NVTlJQQz15CisjIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAorIyBD T05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1Nf U1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklH X0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklH X0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIwor IyBQYXJ0aXRpb24gVHlwZXMKKyMKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorIyBD T05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX09TRl9QQVJUSVRJ T04gaXMgbm90IHNldAorIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMg Q09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNfUEFSVElU SU9OIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfQlNE X0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMg bm90IHNldAorIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMg Q09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19MRE1fUEFS VElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAor IyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5fUEFS VElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0 CisjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1Y2OF9Q QVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9 Imlzbzg4NTktMSIKKyMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldAorIyBD T05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBB R0VfNzc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNl dAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNf Q09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMg bm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJ R19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84 NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Cisj IENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RF UEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qg c2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05M U19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBp cyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKKyMgQ09O RklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdF Xzg3NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKKyMg Q09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RF UEFHRV8xMjUxIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQVNDSUk9eQorIyBDT05GSUdfTkxT X0lTTzg4NTlfMSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBz ZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lT Tzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQK KyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4 NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMg Q09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5 XzE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKKyMg Q09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBu b3Qgc2V0CisjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CisjIENPTkZJR19ETE0gaXMg bm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNF PXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQorIyBDT05GSUdfQ1JDX0NDSVRU IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19U MTBESUYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJ R19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMy QyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxB VEU9eQorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19J T1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKKworIworIyBL ZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09O RklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNL PXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKK0NPTkZJR19NQUdJQ19TWVNSUT15CisjIENP TkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfRlM9eQorIyBD T05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkK KyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKK0NPTkZJR19ERVRFQ1RfU09GVExP Q0tVUD15CisjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0 CitDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorIyBDT05GSUdf U0NIRURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0 CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19PQkpF Q1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAorIyBD T05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVT IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENP TkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVT IGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQK KyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CitDT05G SUdfU1RBQ0tUUkFDRT15CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKKyMg Q09ORklHX0RFQlVHX0hJR0hNRU0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQlVHVkVS Qk9TRSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfSU5GTz15CisjIENPTkZJR19ERUJVR19W TSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKKyMg Q09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJ U1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdf REVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZ IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBD T05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19LUFJP QkVTX1NBTklUWV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RF U1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNl dAorIyBDT05GSUdfTEtEVE0gaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9O IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorIyBDT05GSUdf U1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX05PUF9UUkFDRVI9eQor Q09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0RZTkFNSUNfRlRS QUNFPXkKK0NPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19SSU5H X0JVRkZFUj15CitDT05GSUdfVFJBQ0lORz15CisKKyMKKyMgVHJhY2VycworIworIyBDT05G SUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfVFJBQ0VS IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJ R19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9UUkFD RVIgaXMgbm90IHNldAorIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qg c2V0CisjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRlRSQUNF X1NUQVJUVVBfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJV RyBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZF X0FSQ0hfS0dEQj15CitDT05GSUdfS0dEQj15CitDT05GSUdfS0dEQl9TRVJJQUxfQ09OU09M RT15CisjIENPTkZJR19LR0RCX1RFU1RTIGlzIG5vdCBzZXQKK0NPTkZJR19QUklOVF9TVEFD S19ERVBUSD02NAorIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0Cisj IENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19Q QUdFQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfQ09ERV9QQVRDSElOR19TRUxGVEVTVCBp cyBub3Qgc2V0CisjIENPTkZJR19GVFJfRklYVVBfU0VMRlRFU1QgaXMgbm90IHNldAorIyBD T05GSUdfTVNJX0JJVE1BUF9TRUxGVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19YTU9OIGlz IG5vdCBzZXQKK0NPTkZJR19ERUJVR0dFUj15CisjIENPTkZJR19JUlFTVEFDS1MgaXMgbm90 IHNldAorQ09ORklHX1ZJUlFfREVCVUc9eQorQ09ORklHX0JESV9TV0lUQ0g9eQorIyBDT05G SUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25z CisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNVUklUWT15CisjIENP TkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX05FVFdPUksg aXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfUEFUSCBpcyBub3Qgc2V0CisjIENPTkZJ R19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNV UklUWV9ST09UUExVRyBpcyBub3Qgc2V0CitDT05GSUdfU0VDVVJJVFlfREVGQVVMVF9NTUFQ X01JTl9BRERSPTAKK0NPTkZJR19YT1JfQkxPQ0tTPXkKK0NPTkZJR19BU1lOQ19DT1JFPXkK K0NPTkZJR19BU1lOQ19NRU1DUFk9eQorQ09ORklHX0FTWU5DX1hPUj15CitDT05GSUdfQ1JZ UFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKKyMgQ09ORklHX0NSWVBU T19GSVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQK KyMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9f R0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAor IyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVU SEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMK KyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisj IENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMg bm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9j ayBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0NCQyBpcyBub3Qgc2V0CisjIENPTkZJR19D UllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAor IyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFJXIGlz IG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NS WVBUT19YVFMgaXMgbm90IHNldAorCisjCisjIEhhc2ggbW9kZXMKKyMKKyMgQ09ORklHX0NS WVBUT19ITUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQK KworIworIyBEaWdlc3QKKyMKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAor IyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ1IGlz IG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENP TkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAg aXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJ R19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5v dCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZ UFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBz ZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisKKyMKKyMgQ2lwaGVycwor IworIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5V QklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKKyMgQ09O RklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxM SUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09O RklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVTIGlzIG5v dCBzZXQKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZ UFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qg c2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9f U0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMg Q09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKworIworIyBDb21wcmVzc2lvbgor IworIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRP X0xaTyBpcyBub3Qgc2V0CisKKyMKKyMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCisjCisj IENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0hX PXkKKyMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKKyMgQ09ORklH X0NSWVBUT19ERVZfVEFMSVRPUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0xPQ0sgaXMg bm90IHNldAorIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC11IC0t bmV3LWZpbGUgLS1yZWN1cnNpdmUgbGludXgtMi42LjI5LjYub3JpZy9hcmNoL3Bvd2VycGMv Y29uZmlncy9tdm1lMzEwMF9kZWZjb25maWcgbGludXgtMi42LjI5LjYubW9kL2FyY2gvcG93 ZXJwYy9jb25maWdzL212bWUzMTAwX2RlZmNvbmZpZwotLS0gbGludXgtMi42LjI5LjYub3Jp Zy9hcmNoL3Bvd2VycGMvY29uZmlncy9tdm1lMzEwMF9kZWZjb25maWcJMTk2OS0xMi0zMSAx NzowMDowMC4wMDAwMDAwMDAgLTA3MDAKKysrIGxpbnV4LTIuNi4yOS42Lm1vZC9hcmNoL3Bv d2VycGMvY29uZmlncy9tdm1lMzEwMF9kZWZjb25maWcJMjAwOS0wNy0yMSAxMToyODoxNy4w MDAwMDAwMDAgLTA3MDAKQEAgLTAsMCArMSwxODMwIEBACisjCisjIEF1dG9tYXRpY2FsbHkg Z2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJz aW9uOiAyLjYuMjkKKyMgVGh1IEFwciAgMiAxMjo1MjowMyAyMDA5CisjCisjIENPTkZJR19Q UEM2NCBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIHN1cHBvcnQKKyMKKyMgQ09ORklH XzZ4eCBpcyBub3Qgc2V0CitDT05GSUdfUFBDXzg1eHg9eQorIyBDT05GSUdfUFBDXzh4eCBp cyBub3Qgc2V0CisjIENPTkZJR180MHggaXMgbm90IHNldAorIyBDT05GSUdfNDR4IGlzIG5v dCBzZXQKKyMgQ09ORklHX0UyMDAgaXMgbm90IHNldAorQ09ORklHX0U1MDA9eQorIyBDT05G SUdfUFBDX0U1MDBNQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PS0U9eQorQ09ORklHX0ZTTF9C T09LRT15CitDT05GSUdfRlNMX0VNQl9QRVJGTU9OPXkKKyMgQ09ORklHX1BIWVNfNjRCSVQg aXMgbm90IHNldAorQ09ORklHX1NQRT15CitDT05GSUdfUFBDX01NVV9OT0hBU0g9eQorIyBD T05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTVAgaXMgbm90IHNl dAorQ09ORklHX1BQQzMyPXkKK0NPTkZJR19XT1JEX1NJWkU9MzIKKyMgQ09ORklHX0FSQ0hf UEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX01NVT15CitDT05GSUdfR0VO RVJJQ19DTU9TX1VQREFURT15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5F UklDX1RJTUVfVlNZU0NBTEw9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09O RklHX0dFTkVSSUNfSEFSRElSUVM9eQorIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FS RUEgaXMgbm90IHNldAorQ09ORklHX0lSUV9QRVJfQ1BVPXkKK0NPTkZJR19TVEFDS1RSQUNF X1NVUFBPUlQ9eQorQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKK0NPTkZJR19M T0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKK0NP TkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitD T05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfRklORF9O RVhUX0JJVD15CisjIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKK0NP TkZJR19QUEM9eQorQ09ORklHX0VBUkxZX1BSSU5USz15CitDT05GSUdfR0VORVJJQ19OVlJB TT15CitDT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19BUkNIX01B WV9IQVZFX1BDX0ZEQz15CitDT05GSUdfUFBDX09GPXkKK0NPTkZJR19PRj15CitDT05GSUdf UFBDX1VEQkdfMTY1NTA9eQorIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAor Q09ORklHX0FVRElUX0FSQ0g9eQorQ09ORklHX0dFTkVSSUNfQlVHPXkKKyMgQ09ORklHX0RF RkFVTFRfVUlNQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5v dCBzZXQKKyMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQ09O RklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisj IEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tF Tl9PTl9TTVA9eQorQ09ORklHX0xPQ0tfS0VSTkVMPXkKK0NPTkZJR19JTklUX0VOVl9BUkdf TElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05f QVVUTz15CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQ Q19TWVNDVEw9eQorQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfQlNEX1BST0NFU1Nf QUNDVD15CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKKyMgQ09O RklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisK KyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklH X1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQK KyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRf UkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19JS0NPTkZJRz15CitDT05GSUdfSUtDT05G SUdfUFJPQz15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorQ09ORklHX0dST1VQX1NDSEVE PXkKK0NPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKK0NPTkZJR19SVF9HUk9VUF9TQ0hFRD15 CitDT05GSUdfVVNFUl9TQ0hFRD15CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNl dAorQ09ORklHX0NHUk9VUFM9eQorIyBDT05GSUdfQ0dST1VQX0RFQlVHIGlzIG5vdCBzZXQK KyMgQ09ORklHX0NHUk9VUF9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBfRlJFRVpF UiBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBfREVWSUNFIGlzIG5vdCBzZXQKKyMgQ09O RklHX0NHUk9VUF9DUFVBQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFU09VUkNFX0NPVU5U RVJTIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNG U19ERVBSRUNBVEVEX1YyPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklH X05BTUVTUEFDRVMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJ R19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBp cyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05G SUdfRU1CRURERUQ9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKK0NPTkZJR19LQUxMU1lN Uz15CitDT05GSUdfS0FMTFNZTVNfQUxMPXkKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BB U1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05G SUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJ R19GVVRFWD15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19U SU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQUlP PXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfUENJX1FVSVJLUz15CitD T05GSUdfU0xVQl9ERUJVRz15CisjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKKyMg Q09ORklHX1NMQUIgaXMgbm90IHNldAorQ09ORklHX1NMVUI9eQorIyBDT05GSUdfU0xPQiBp cyBub3Qgc2V0CitDT05GSUdfUFJPRklMSU5HPXkKK0NPTkZJR19UUkFDRVBPSU5UUz15CitD T05GSUdfTUFSS0VSUz15CitDT05GSUdfT1BST0ZJTEU9eQorQ09ORklHX0hBVkVfT1BST0ZJ TEU9eQorQ09ORklHX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05F RF9BQ0NFU1M9eQorQ09ORklHX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfSU9SRU1BUF9Q Uk9UPXkKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15 CitDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CisjIENPTkZJR19IQVZFX0dFTkVSSUNf RE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRf TVVURVhFUz15CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENP TkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9B RD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19N T0RWRVJTSU9OUz15CitDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKK0NPTkZJR19C TE9DSz15CisjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19U UkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENP TkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVy cworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05G SUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorIyBDT05GSUdf REVGQVVMVF9BUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5v dCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMg bm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorIyBDT05GSUdfRlJFRVpF UiBpcyBub3Qgc2V0CisKKyMKKyMgUGxhdGZvcm0gc3VwcG9ydAorIworIyBDT05GSUdfUFBD X0NFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQK KyMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0CitDT05GSUdfTVBDODV4eD15CisjIENPTkZJ R19NUEM4NTQwX0FEUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NTYwX0FEUyBpcyBub3Qg c2V0CisjIENPTkZJR19NUEM4NXh4X0NEUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NXh4 X01EUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NTM2X0RTIGlzIG5vdCBzZXQKKyMgQ09O RklHX01QQzg1eHhfRFMgaXMgbm90IHNldAorIyBDT05GSUdfS1NJODU2MCBpcyBub3Qgc2V0 CisjIENPTkZJR19TVFhfR1AzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RRTTg1NDAgaXMgbm90 IHNldAorIyBDT05GSUdfVFFNODU0MSBpcyBub3Qgc2V0CisjIENPTkZJR19UUU04NTQ4IGlz IG5vdCBzZXQKKyMgQ09ORklHX1RRTTg1NTUgaXMgbm90IHNldAorIyBDT05GSUdfVFFNODU2 MCBpcyBub3Qgc2V0CisjIENPTkZJR19TQkM4NTQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NC Qzg1NjAgaXMgbm90IHNldAorQ09ORklHX01WTUUzMTAwPXkKKyMgQ09ORklHX01WTUU0MTAw IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQQ0k2MjAwIGlzIG5vdCBzZXQKK0NPTkZJR19NVk1F MzEwMF9FTkFCTEVfRERSX0VSUk9SUz15CitDT05GSUdfTVZNRTMxMDBfRU5BQkxFX0wyX0VS Uk9SUz15CitDT05GSUdfTVZNRTMxMDBfRU5BQkxFX1BDSV9FUlJPUlM9eQorQ09ORklHX01W TUUzMTAwX1RJQ0tfVElNRVJTPXkKKyMgQ09ORklHX0lQSUMgaXMgbm90IHNldAorQ09ORklH X01QSUM9eQorIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENf STgyNTkgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAorIyBDT05G SUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBz ZXQKKyMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JTkRJ UkVDVF9JTyBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQK KyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FVSUNDX0VOR0lORSBp cyBub3Qgc2V0CisjIENPTkZJR19DUE0yIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTTF9VTEkx NTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzh4eHhfR1BJTyBpcyBub3Qgc2V0CisjIENP TkZJR19TSU1QTEVfR1BJTyBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIG9wdGlvbnMKKyMK KyMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAorQ09ORklHX1RJQ0tfT05FU0hPVD15CitD T05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJ Q19DTE9DS0VWRU5UU19CVUlMRD15CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09O RklHX0haXzI1MD15CisjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpf MTAwMCBpcyBub3Qgc2V0CitDT05GSUdfSFo9MjUwCitDT05GSUdfU0NIRURfSFJUSUNLPXkK KyMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1ZP TFVOVEFSWSBpcyBub3Qgc2V0CitDT05GSUdfUFJFRU1QVD15CitDT05GSUdfQklORk1UX0VM Rj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0 CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAorQ09ORklHX0JJTkZNVF9NSVNDPXkK K0NPTkZJR19NQVRIX0VNVUxBVElPTj15CisjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90 IHNldAorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKK0NPTkZJR19BUkNI X0hBU19XQUxLX01FTU9SWT15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9W RT15CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9QT1BVTEFU RVNfTk9ERV9NQVA9eQorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZM QVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNl dAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1F TT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorQ09ORklHX1BBR0VGTEFHU19FWFRF TkRFRD15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfTUlHUkFUSU9O IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKK0NP TkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19CT1VOQ0U9eQorQ09ORklHX1ZJUlRfVE9f QlVTPXkKK0NPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQorQ09ORklHX1BQQ180S19QQUdFUz15 CisjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ182NEtf UEFHRVMgaXMgbm90IHNldAorQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTEKK0NPTkZJ R19QUk9DX0RFVklDRVRSRUU9eQorQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01E TElORT0iY29uc29sZT10dHlTMCw5NjAwIHJvb3Q9L2Rldi9yYW0wIHJhbWRpc2tfc2l6ZT02 NDAwMCIKK0NPTkZJR19FWFRSQV9UQVJHRVRTPSIiCisjIENPTkZJR19QTSBpcyBub3Qgc2V0 CitDT05GSUdfU0VDQ09NUD15CitDT05GSUdfSVNBX0RNQV9BUEk9eQorCisjCisjIEJ1cyBv cHRpb25zCisjCitDT05GSUdfWk9ORV9ETUE9eQorQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0k9 eQorQ09ORklHX0ZTTF9TT0M9eQorQ09ORklHX0ZTTF9QQ0k9eQorQ09ORklHX1BQQ19QQ0lf Q0hPSUNFPXkKK0NPTkZJR19QQ0k9eQorQ09ORklHX1BDSV9ET01BSU5TPXkKK0NPTkZJR19Q Q0lfU1lTQ0FMTD15CisjIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0CitDT05GSUdf QVJDSF9TVVBQT1JUU19NU0k9eQorIyBDT05GSUdfUENJX01TSSBpcyBub3Qgc2V0CitDT05G SUdfUENJX0xFR0FDWT15CisjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAorIyBDT05G SUdfUENJX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKyMg Q09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBU19SQVBJRElPIGlz IG5vdCBzZXQKKworIworIyBBZHZhbmNlZCBzZXR1cAorIworQ09ORklHX0FEVkFOQ0VEX09Q VElPTlM9eQorQ09ORklHX0xPV01FTV9TSVpFX0JPT0w9eQorQ09ORklHX0xPV01FTV9TSVpF PTB4NDAwMDAwMDAKKyMgQ09ORklHX1JFTE9DQVRBQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19Q QUdFX09GRlNFVF9CT09MPXkKK0NPTkZJR19QQUdFX09GRlNFVD0weDgwMDAwMDAwCitDT05G SUdfS0VSTkVMX1NUQVJUX0JPT0w9eQorQ09ORklHX0tFUk5FTF9TVEFSVD0weDgwMDAwMDAw CisjIENPTkZJR19QSFlTSUNBTF9TVEFSVF9CT09MIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlT SUNBTF9TVEFSVD0weDAwMDAwMDAwCitDT05GSUdfUEhZU0lDQUxfQUxJR049MHgxMDAwMDAw MAorQ09ORklHX1RBU0tfU0laRV9CT09MPXkKK0NPTkZJR19UQVNLX1NJWkU9MHg4MDAwMDAw MAorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdf Q09NUEFUX05FVF9ERVZfT1BTPXkKK0NPTkZJR19QQUNLRVQ9eQorQ09ORklHX1BBQ0tFVF9N TUFQPXkKK0NPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKK0NPTkZJR19YRlJNX1VTRVI9 eQorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1f TUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNl dAorQ09ORklHX05FVF9LRVk9eQorIyBDT05GSUdfTkVUX0tFWV9NSUdSQVRFIGlzIG5vdCBz ZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0Cisj IENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9I QVNIPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19J UF9QTlBfQk9PVFA9eQorQ09ORklHX0lQX1BOUF9SQVJQPXkKK0NPTkZJR19ORVRfSVBJUD15 CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qg c2V0CitDT05GSUdfU1lOX0NPT0tJRVM9eQorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0 CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBp cyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJ R19JTkVUX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NP TkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JF RVQ9eQorQ09ORklHX0lORVRfTFJPPXkKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lO RVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAor Q09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJp YyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorQ09ORklHX0lQVjY9eQorIyBD T05GSUdfSVBWNl9QUklWQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfUk9VVEVSX1BS RUYgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9PUFRJTUlTVElDX0RBRCBpcyBub3Qgc2V0 CisjIENPTkZJR19JTkVUNl9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9FU1AgaXMg bm90IHNldAorIyBDT05GSUdfSU5FVDZfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQ VjZfTUlQNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qg c2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVQ2X1hG Uk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UVU5ORUw9eQor Q09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUPXkKKyMgQ09ORklHX0lORVQ2X1hGUk1fTU9E RV9ST1VURU9QVElNSVpBVElPTiBpcyBub3Qgc2V0CitDT05GSUdfSVBWNl9TSVQ9eQorQ09O RklHX0lQVjZfTkRJU0NfTk9ERVRZUEU9eQorIyBDT05GSUdfSVBWNl9UVU5ORUwgaXMgbm90 IHNldAorIyBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAorIyBDT05G SUdfSVBWNl9NUk9VVEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlz IG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVI9eQorIyBDT05GSUdfTkVURklMVEVSX0RFQlVH IGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfQURWQU5DRUQ9eQorCisjCisjIENvcmUg TmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19ORVRGSUxURVJfTkVUTElOSz15 CitDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUU9eQorQ09ORklHX05FVEZJTFRFUl9O RVRMSU5LX0xPRz15CitDT05GSUdfTkZfQ09OTlRSQUNLPXkKKyMgQ09ORklHX05GX0NUX0FD Q1QgaXMgbm90IHNldAorIyBDT05GSUdfTkZfQ09OTlRSQUNLX01BUksgaXMgbm90IHNldAor IyBDT05GSUdfTkZfQ09OTlRSQUNLX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORl9D VF9QUk9UT19EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX0NUX1BST1RPX1NDVFAgaXMg bm90IHNldAorIyBDT05GSUdfTkZfQ1RfUFJPVE9fVURQTElURSBpcyBub3Qgc2V0CisjIENP TkZJR19ORl9DT05OVFJBQ0tfQU1BTkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX0NPTk5U UkFDS19GVFAgaXMgbm90IHNldAorIyBDT05GSUdfTkZfQ09OTlRSQUNLX0gzMjMgaXMgbm90 IHNldAorIyBDT05GSUdfTkZfQ09OTlRSQUNLX0lSQyBpcyBub3Qgc2V0CisjIENPTkZJR19O Rl9DT05OVFJBQ0tfTkVUQklPU19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORl9DT05OVFJB Q0tfUFBUUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORl9DT05OVFJBQ0tfU0FORSBpcyBub3Qg c2V0CisjIENPTkZJR19ORl9DT05OVFJBQ0tfU0lQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05G X0NPTk5UUkFDS19URlRQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX0NUX05FVExJTksgaXMg bm90IHNldAorQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPXkKKyMgQ09ORklHX05FVEZJTFRF Ul9YVF9UQVJHRVRfQ0xBU1NJRlkgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hU X1RBUkdFVF9DT05OTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFS R0VUX01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxP RyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUUgaXMg bm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9SQVRFRVNUIGlzIG5vdCBz ZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTIGlzIG5vdCBzZXQKKyMg Q09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklH X05FVEZJTFRFUl9YVF9NQVRDSF9DT05OQllURVMgaXMgbm90IHNldAorIyBDT05GSUdfTkVU RklMVEVSX1hUX01BVENIX0NPTk5MSU1JVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxU RVJfWFRfTUFUQ0hfQ09OTk1BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hU X01BVENIX0NPTk5UUkFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFU Q0hfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRFNDUCBp cyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRVNQIGlzIG5vdCBzZXQK KyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IQVNITElNSVQgaXMgbm90IHNldAorIyBD T05GSUdfTkVURklMVEVSX1hUX01BVENIX0hFTFBFUiBpcyBub3Qgc2V0CisjIENPTkZJR19O RVRGSUxURVJfWFRfTUFUQ0hfSVBSQU5HRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxU RVJfWFRfTUFUQ0hfTEVOR1RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9N QVRDSF9MSU1JVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFD IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLIGlzIG5vdCBz ZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQgaXMgbm90IHNldAor IyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX09XTkVSIGlzIG5vdCBzZXQKKyMgQ09ORklH X05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklM VEVSX1hUX01BVENIX1BLVFRZUEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hU X01BVENIX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9S QVRFRVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTSBp cyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVDRU5UIGlzIG5vdCBz ZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09O RklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRG SUxURVJfWFRfTUFUQ0hfU1RBVElTVElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRF Ul9YVF9NQVRDSF9TVFJJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01B VENIX1RDUE1TUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVElN RSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVTMyIGlzIG5vdCBz ZXQKKyMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKKworIworIyBJUDogTmV0ZmlsdGVyIENv bmZpZ3VyYXRpb24KKyMKK0NPTkZJR19ORl9ERUZSQUdfSVBWND15CitDT05GSUdfTkZfQ09O TlRSQUNLX0lQVjQ9eQorQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVD15CisjIENP TkZJR19JUF9ORl9RVUVVRSBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfSVBUQUJMRVM9eQor IyBDT05GSUdfSVBfTkZfTUFUQ0hfQUREUlRZUEUgaXMgbm90IHNldAorIyBDT05GSUdfSVBf TkZfTUFUQ0hfQUggaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfTUFUQ0hfRUNOIGlzIG5v dCBzZXQKKyMgQ09ORklHX0lQX05GX01BVENIX1RUTCBpcyBub3Qgc2V0CisjIENPTkZJR19J UF9ORl9GSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfVEFSR0VUX0xPRyBpcyBu b3Qgc2V0CisjIENPTkZJR19JUF9ORl9UQVJHRVRfVUxPRyBpcyBub3Qgc2V0CisjIENPTkZJ R19ORl9OQVQgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfTUFOR0xFIGlzIG5vdCBzZXQK KyMgQ09ORklHX0lQX05GX1JBVyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9BUlBUQUJM RVMgaXMgbm90IHNldAorCisjCisjIElQdjY6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisj CisjIENPTkZJR19ORl9DT05OVFJBQ0tfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JUDZf TkZfUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfSVA2X05GX0lQVEFCTEVTIGlzIG5vdCBz ZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBu b3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qg c2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBu b3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05F VCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBp cyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMg bm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMg bm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRf U0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKKworIworIyBOZXR3 b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05G SUdfTkVUX1RDUFBST0JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBz ZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQK KyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQK KyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qg c2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90 IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVy cworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRf SEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05G SUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90 IHNldAorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVH X0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0 CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJ R19NVERfREVCVUcgaXMgbm90IHNldAorQ09ORklHX01URF9DT05DQVQ9eQorQ09ORklHX01U RF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CisjIENPTkZJ R19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NNRExJTkVfUEFS VFM9eQorIyBDT05GSUdfTVREX09GX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9B UjdfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRp b24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkK K0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklH X05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdf UkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJ R19NVERfT09QUyBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZl cnMKKyMKK0NPTkZJR19NVERfQ0ZJPXkKK0NPTkZJR19NVERfSkVERUNQUk9CRT15CitDT05G SUdfTVREX0dFTl9QUk9CRT15CitDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUz15CitDT05G SUdfTVREX0NGSV9OT1NXQVA9eQorIyBDT05GSUdfTVREX0NGSV9CRV9CWVRFX1NXQVAgaXMg bm90IHNldAorIyBDT05GSUdfTVREX0NGSV9MRV9CWVRFX1NXQVAgaXMgbm90IHNldAorQ09O RklHX01URF9DRklfR0VPTUVUUlk9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzEg aXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERf TUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBu b3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBD T05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9D RklfSTEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NG SV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09O RklHX01URF9PVFAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JTlRFTEVYVCBpcyBu b3Qgc2V0CitDT05GSUdfTVREX0NGSV9BTURTVEQ9eQorQ09ORklHX01URF9DRklfU1RBQT15 CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAor Q09ORklHX01URF9ST009eQorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMK KyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworQ09ORklHX01URF9DT01Q TEVYX01BUFBJTkdTPXkKKyMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKKyMgQ09O RklHX01URF9QSFlTTUFQX09GIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QQ0kgaXMgbm90 IHNldAorIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0CisjIENPTkZJR19N VERfUExBVFJBTSBpcyBub3Qgc2V0CitDT05GSUdfTVREX01WTUUzMTAwPXkKKworIworIyBT ZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9QTUM1 NTEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklH X01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQK KyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hp cCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAor IyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQ TFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklH X01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJp dmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBV bnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAor Q09ORklHX09GX0RFVklDRT15CitDT05GSUdfT0ZfSTJDPXkKKyMgQ09ORklHX1BBUlBPUlQg aXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBu b3Qgc2V0CisjIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19D UFFfQ0lTU19EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qg c2V0CisjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RF Vl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorIyBDT05G SUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX05CRD15 CisjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VC IGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1f Q09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTY1NTM2CisjIENPTkZJR19CTEtf REVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQK KyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hE IGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfUEhBTlRPTSBp cyBub3Qgc2V0CisjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CisjIENPTkZJR19USUZN X0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0CisjIENP TkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfSFBfSUxPIGlz IG5vdCBzZXQKKyMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1 cHBvcnQKKyMKK0NPTkZJR19FRVBST01fQVQyND15CitDT05GSUdfRUVQUk9NX0xFR0FDWT15 CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkK KyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAor IworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST15CitDT05G SUdfU0NTSV9ETUE9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorIyBDT05GSUdf U0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisj IFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxL X0RFVl9TRD15CisjIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NI Ul9ERVZfT1NTVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9TUj15CitDT05GSUdfQkxL X0RFVl9TUl9WRU5ET1I9eQorQ09ORklHX0NIUl9ERVZfU0c9eQorIyBDT05GSUdfQ0hSX0RF Vl9TQ0ggaXMgbm90IHNldAorCisjCisjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1 a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcworIworIyBDT05GSUdfU0NTSV9NVUxUSV9M VU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAorIyBD T05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1NDQU5fQVNZTkM9 eQorQ09ORklHX1NDU0lfV0FJVF9TQ0FOPXkKKworIworIyBTQ1NJIFRyYW5zcG9ydHMKKyMK K0NPTkZJR19TQ1NJX1NQSV9BVFRSUz15CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5v dCBzZXQKKyMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdf U0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlz IG5vdCBzZXQKK0NPTkZJR19TQ1NJX0xPV0xFVkVMPXkKKyMgQ09ORklHX0lTQ1NJX1RDUCBp cyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0Cisj IENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BQ0FSRCBp cyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdf U0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMg bm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ND U0lfQUlDOTRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNl dAorIyBDT05GSUdfU0NTSV9BRFZBTlNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FS Q01TUiBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAor IyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlE X1NBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0CisjIENP TkZJR19TQ1NJX0JVU0xPR0lDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkZDIGlzIG5vdCBz ZXQKKyMgQ09ORklHX0ZDT0UgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBp cyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0VBVEEgaXMgbm90IHNldAorIyBDT05GSUdfU0NT SV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfR0RUSCBpcyBub3Qg c2V0CisjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOSVRJ TyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAorIyBDT05G SUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNl dAorQ09ORklHX1NDU0lfU1lNNTNDOFhYXzI9eQorQ09ORklHX1NDU0lfU1lNNTNDOFhYX0RN QV9BRERSRVNTSU5HX01PREU9MQorQ09ORklHX1NDU0lfU1lNNTNDOFhYX0RFRkFVTFRfVEFH Uz0xNgorQ09ORklHX1NDU0lfU1lNNTNDOFhYX01BWF9UQUdTPTY0CitDT05GSUdfU0NTSV9T WU01M0M4WFhfTU1JTz15CisjIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0CisjIENPTkZJ R19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBX0ZDIGlz IG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklH X1NDU0lfTFBGQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0 CisjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05TUDMy IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdf U0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CitDT05G SUdfQVRBPXkKKyMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisjIENPTkZJ R19TQVRBX1BNUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAor IyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX0ZTTCBpcyBu b3Qgc2V0CitDT05GSUdfQVRBX1NGRj15CisjIENPTkZJR19TQVRBX1NWVyBpcyBub3Qgc2V0 CisjIENPTkZJR19BVEFfUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX01WIGlzIG5v dCBzZXQKKyMgQ09ORklHX1NBVEFfTlYgaXMgbm90IHNldAorIyBDT05GSUdfUERDX0FETUEg aXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9RU1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19T QVRBX1BST01JU0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9TWDQgaXMgbm90IHNldAor IyBDT05GSUdfU0FUQV9TSUwgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9TSVMgaXMgbm90 IHNldAorIyBDT05GSUdfU0FUQV9VTEkgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9WSUEg aXMgbm90IHNldAorQ09ORklHX1NBVEFfVklURVNTRT15CisjIENPTkZJR19TQVRBX0lOSUMx NjJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKKyMgQ09ORklH X1BBVEFfQU1EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAor IyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DTUQ2NDBf UENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKKyMgQ09O RklHX1BBVEFfQ1M1NTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ1M1NTMwIGlzIG5v dCBzZXQKKyMgQ09ORklHX1BBVEFfQ1lQUkVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRB X0VGQVIgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX0dFTkVSSUMgaXMgbm90IHNldAorIyBD T05GSUdfUEFUQV9IUFQzNjYgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzN1ggaXMg bm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzWDJOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BB VEFfSFBUM1gzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSVQ4MjFYIGlzIG5vdCBzZXQK KyMgQ09ORklHX1BBVEFfSVQ4MjEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSk1JQ1JP TiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1RSSUZMRVggaXMgbm90IHNldAorIyBDT05G SUdfUEFUQV9NQVJWRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTVBJSVggaXMgbm90 IHNldAorIyBDT05GSUdfUEFUQV9PTERQSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFf TkVUQ0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05JTkpBMzIgaXMgbm90IHNldAor IyBDT05GSUdfUEFUQV9OUzg3NDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTlM4NzQx NSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX09QVEkgaXMgbm90IHNldAorIyBDT05GSUdf UEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qg c2V0CisjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9S WjEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAorIyBD T05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CitDT05GSUdfUEFUQV9QREMyMDI3 WD15CisjIENPTkZJR19QQVRBX1NJTDY4MCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NJ UyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19Q QVRBX1dJTkJPTkQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QTEFURk9STSBpcyBub3Qg c2V0CisjIENPTkZJR19QQVRBX1NDSCBpcyBub3Qgc2V0CitDT05GSUdfTUQ9eQorQ09ORklH X0JMS19ERVZfTUQ9eQorIyBDT05GSUdfTURfQVVUT0RFVEVDVCBpcyBub3Qgc2V0CitDT05G SUdfTURfTElORUFSPXkKK0NPTkZJR19NRF9SQUlEMD15CitDT05GSUdfTURfUkFJRDE9eQor IyBDT05GSUdfTURfUkFJRDEwIGlzIG5vdCBzZXQKK0NPTkZJR19NRF9SQUlENDU2PXkKK0NP TkZJR19NRF9SQUlENV9SRVNIQVBFPXkKK0NPTkZJR19NRF9NVUxUSVBBVEg9eQorIyBDT05G SUdfTURfRkFVTFRZIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0RNPXkKKyMgQ09ORklH X0RNX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNX0NSWVBUIGlzIG5vdCBzZXQKK0NP TkZJR19ETV9TTkFQU0hPVD15CitDT05GSUdfRE1fTUlSUk9SPXkKK0NPTkZJR19ETV9aRVJP PXkKK0NPTkZJR19ETV9NVUxUSVBBVEg9eQorIyBDT05GSUdfRE1fREVMQVkgaXMgbm90IHNl dAorIyBDT05GSUdfRE1fVUVWRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTiBpcyBu b3Qgc2V0CisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworCisjCisj IEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdo YXQgeW91IGFyZSBkb2luZworIworIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAorIyBD T05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAorIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKKyMg Q09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VT PXkKK0NPTkZJR19EVU1NWT15CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09O RklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQK KyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMg Q09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CitDT05GSUdfUEhZTElCPXkKKworIworIyBNSUkg UEhZIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0 CisjIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19RU0VNSV9QSFkg aXMgbm90IHNldAorIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19DSUNB REFfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKKyMg Q09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKK0NPTkZJR19CUk9BRENPTV9QSFk9eQorIyBD T05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBu b3Qgc2V0CisjIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU1RF MTBYUCBpcyBub3Qgc2V0CisjIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAor IyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ESU9fQklUQkFORyBp cyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05G SUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0Cisj IENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBp cyBub3Qgc2V0CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9UVUxJ UCBpcyBub3Qgc2V0CisjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1f TkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkg aXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENP TkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19F TUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFM X0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9D T01NT05fRVJSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAorIyBD T05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorQ09ORklH X05FVERFVl8xMDAwPXkKKyMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CisjIENPTkZJR19E TDJLIGlzIG5vdCBzZXQKK0NPTkZJR19FMTAwMD15CisjIENPTkZJR19FMTAwMEUgaXMgbm90 IHNldAorIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lHQiBpcyBub3Qg c2V0CisjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTUFDSEkgaXMg bm90IHNldAorIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1I4MTY5 IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0CisjIENPTkZJR19TS0dF IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLWTIgaXMgbm90IHNldAorIyBDT05GSUdfVklBX1ZF TE9DSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CisjIENPTkZJ R19CTlgyIGlzIG5vdCBzZXQKK0NPTkZJR19HSUFORkFSPXkKKyMgQ09ORklHX1FMQTNYWFgg aXMgbm90IHNldAorIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxRSBp cyBub3Qgc2V0CisjIENPTkZJR19BVEwxQyBpcyBub3Qgc2V0CisjIENPTkZJR19KTUUgaXMg bm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RS IGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJF ODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENP TkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0 d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKKworIworIyBV U0IgTmV0d29yayBBZGFwdGVycworIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAor IyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBp cyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19V U0JfVVNCTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJ R19GRERJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKKyMgQ09ORklH X1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05F VF9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09O RklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBp cyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlz IG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVU PXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5Q VVRfUE9MTERFViBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIwor IyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9Z REVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09O RklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVy cworIworIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfSU5Q VVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNl dAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RP VUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAor CisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNl dAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZp Y2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NP TkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKK0NPTkZJR19WVF9IV19D T05TT0xFX0JJTkRJTkc9eQorIyBDT05GSUdfREVWS01FTSBpcyBub3Qgc2V0CisjIENPTkZJ R19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorIyBDT05GSUdfTk9aT01JIGlzIG5v dCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworQ09ORklHX1NFUklBTF84MjUwPXkK K0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF84MjUwX1BD SSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NQorQ09ORklHX1NF UklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NQorQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVE PXkKK0NPTkZJR19TRVJJQUxfODI1MF9NQU5ZX1BPUlRTPXkKK0NPTkZJR19TRVJJQUxfODI1 MF9TSEFSRV9JUlE9eQorIyBDT05GSUdfU0VSSUFMXzgyNTBfREVURUNUX0lSUSBpcyBub3Qg c2V0CisjIENPTkZJR19TRVJJQUxfODI1MF9SU0EgaXMgbm90IHNldAorCisjCisjIE5vbi04 MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFUklBTF9VQVJUTElURSBp cyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NP TlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJ QUxfT0ZfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09O RklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAorIyBDT05GSUdfTEVH QUNZX1BUWVMgaXMgbm90IHNldAorIyBDT05GSUdfSFZDX1VEQkcgaXMgbm90IHNldAorIyBD T05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXX1JBTkRPTSBpcyBu b3Qgc2V0CisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBu b3Qgc2V0CisjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJ VkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0RF VlBPUlQ9eQorCisjCisjIFZNRSBCcmlkZ2UgZGV2aWNlcworIworQ09ORklHX1ZNRV9CUklE R0U9eQorIyBDT05GSUdfVk1FX0JSSURHRV9CT09UTUVNIGlzIG5vdCBzZXQKK0NPTkZJR19J MkM9eQorQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DSEFSREVWPXkKK0NP TkZJR19JMkNfSEVMUEVSX0FVVE89eQorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9y dAorIworCisjCisjIFBDIFNNQnVzIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCisjCisjIENP TkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTU2MyBpcyBu b3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNf QU1ENzU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKKyMg Q09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JU0NIIGlzIG5vdCBz ZXQKKyMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfTkZPUkNF MiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJ R19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNl dAorIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBUFJPIGlz IG5vdCBzZXQKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRk ZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKK0NPTkZJR19JMkNfTVBDPXkKKyMgQ09ORklHX0ky Q19PQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisK KyMKKyMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycworIworIyBDT05GSUdf STJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlz IG5vdCBzZXQKKyMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgR3Jh cGhpY3MgYWRhcHRlciBJMkMvRERDIGNoYW5uZWwgZHJpdmVycworIworIyBDT05GSUdfSTJD X1ZPT0RPTzMgaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVy cworIworIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19J MkNfU1RVQiBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBw b3J0CisjCisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19Q Q0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAorIyBDT05G SUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5 MSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAorIyBD T05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19D T1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMg Q09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NI SVAgaXMgbm90IHNldAorIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1dB TlRfT1BUSU9OQUxfR1BJT0xJQj15CisjIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKKyMg Q09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0 CitDT05GSUdfSFdNT049eQorIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09O RklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4 IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CisjIENP TkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0x MDI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0Cisj IENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19B RE05MjQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ2MiBpcyBub3Qgc2V0 CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09S U19BRFQ3NDczIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3NSBpcyBub3Qg c2V0CisjIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKK0NPTkZJR19TRU5TT1JT X0RTMTYyMT15CisjIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAorIyBDT05G SUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODgy RkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKKyMg Q09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dM NTIwU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMg Q09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzUg aXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKKyMgQ09ORklH X1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90 IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNP UlNfTE04NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAor IyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05 MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAorIyBDT05G SUdfU0VOU09SU19MVEM0MjQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYMTYx OSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAorIyBD T05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4 NzQyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAor IyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNf U01TQzQ3TTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5v dCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CisjIENPTkZJ R19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19USE1DNTAg aXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKKyMgQ09O RklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVlQ4MjMx IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CisjIENP TkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3 OTJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKKyMg Q09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNf VzgzTDc4Nk5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90 IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAorIyBDT05GSUdf SFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBz ZXQKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAorQ09ORklHX1dBVENIRE9H PXkKKyMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKKworIworIyBXYXRj aGRvZyBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qg c2V0CisjIENPTkZJR19BTElNNzEwMV9XRFQgaXMgbm90IHNldAorQ09ORklHX0JPT0tFX1dE VD15CisKKyMKKyMgUENJLWJhc2VkIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19QQ0lQ Q1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dEVFBDSSBpcyBub3Qgc2V0CisKKyMK KyMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19VU0JQQ1dBVENIRE9H IGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorCisjCisjIFNvbmljcyBTaWxp Y29uIEJhY2twbGFuZQorIworIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0 aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qg c2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lD MyBpcyBub3Qgc2V0CisjIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAorIyBDT05G SUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNl dAorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzUw X0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBD T05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMK KyMKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIworIyBDT05GSUdfVklERU9f REVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklH X1ZJREVPX01FRElBIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMK KyMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIwor IyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENP TkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJP TCBpcyBub3Qgc2V0CisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElH SFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBv cnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ29u c29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCitDT05GSUdfVkdBX0NPTlNPTEU9eQor IyBDT05GSUdfVkdBQ09OX1NPRlRfU0NST0xMQkFDSyBpcyBub3Qgc2V0CitDT05GSUdfRFVN TVlfQ09OU09MRT15CisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NV UFBPUlQ9eQorQ09ORklHX0hJRD15CisjIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAor IyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW5wdXQgRGV2aWNlcwor IworQ09ORklHX1VTQl9ISUQ9eQorIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CisjIENP TkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKKworIworIyBTcGVjaWFsIEhJRCBkcml2ZXJz CisjCisjIENPTkZJR19ISURfQ09NUEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9BNFRF Q0ggaXMgbm90IHNldAorIyBDT05GSUdfSElEX0FQUExFIGlzIG5vdCBzZXQKKyMgQ09ORklH X0hJRF9CRUxLSU4gaXMgbm90IHNldAorIyBDT05GSUdfSElEX0NIRVJSWSBpcyBub3Qgc2V0 CisjIENPTkZJR19ISURfQ0hJQ09OWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQ1lQUkVT UyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfRVpLRVkgaXMgbm90IHNldAorIyBDT05GSUdf SElEX0dZUkFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9MT0dJVEVDSCBpcyBub3Qg c2V0CisjIENPTkZJR19ISURfTUlDUk9TT0ZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9N T05URVJFWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfTlRSSUcgaXMgbm90IHNldAorIyBD T05GSUdfSElEX1BBTlRIRVJMT1JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9QRVRBTFlO WCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU0FNU1VORyBpcyBub3Qgc2V0CisjIENPTkZJ R19ISURfU09OWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU1VOUExVUyBpcyBub3Qgc2V0 CisjIENPTkZJR19HUkVFTkFTSUFfRkYgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RPUFNF RUQgaXMgbm90IHNldAorIyBDT05GSUdfVEhSVVNUTUFTVEVSX0ZGIGlzIG5vdCBzZXQKKyMg Q09ORklHX1pFUk9QTFVTX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CitD T05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQor Q09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKK0NPTkZJR19VU0I9eQorIyBDT05GSUdfVVNC X0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVM9eQor CisjCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKK0NPTkZJR19VU0JfREVWSUNF RlM9eQorQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQorIyBDT05GSUdfVVNCX0RZTkFNSUNf TUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAorIyBDT05G SUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19CTEFD S0xJU1RfSFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAorIyBD T05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBu b3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJ R19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VIQ0lfSENEPXkKK0NP TkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVD15CisjIENPTkZJR19VU0JfRUhDSV9UVF9ORVdT Q0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRUhDSV9GU0wgaXMgbm90IHNldAorIyBD T05GSUdfVVNCX0VIQ0lfSENEX1BQQ19PRiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1hV MjEwSFBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qg c2V0CisjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9P SENJX0hDRD15CisjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GIGlzIG5vdCBzZXQKKyMg Q09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CisjIENPTkZJR19V U0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0xJ VFRMRV9FTkRJQU49eQorIyBDT05GSUdfVVNCX1VIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09O RklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hD RCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0hDSV9IQ0QgaXMgbm90IHNldAorIyBDT05G SUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJp dmVycworIworIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUFJJ TlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKKyMgQ09ORklH X1VTQl9UTUMgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMg b24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7CisjCisKKyMKKyMg c2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMKK0NPTkZJR19V U0JfU1RPUkFHRT15CisjIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0Cisj IENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9T VE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAw IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKKyMg Q09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RP UkFHRV9TRERSNTUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1Qg aXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKKyMg Q09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9T VE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1Nf QVRBQ0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKKwor IworIyBVU0IgSW1hZ2luZyBkZXZpY2VzCisjCisjIENPTkZJR19VU0JfTURDODAwIGlzIG5v dCBzZXQKKyMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHBv cnQgZHJpdmVycworIworIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CisKKyMKKyMg VVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5v dCBzZXQKKyMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQURV VFVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAorIyBDT05G SUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5v dCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0JFUlJZ X0NIQVJHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09O RklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVS TSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0CisjIENPTkZJ R19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5v dCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdf VVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAor IyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9J T1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAorIyBD T05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9WU1QgaXMgbm90 IHNldAorIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCBy ZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCisjIENPTkZJR19VV0IgaXMgbm90IHNldAorIyBD T05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMg Q09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMg bm90IHNldAorIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19FREFD IGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09O RklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisj IENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAorCisjCisjIFJUQyBpbnRlcmZhY2VzCisj CitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09O RklHX1JUQ19JTlRGX0RFVj15CitDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMPXkKKyMg Q09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIFJUQyBkcml2ZXJz CisjCisjIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENf RFJWX0RTMTM3NCBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0RSVl9EUzEzNzU9eQorIyBDT05G SUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAw IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CisjIENP TkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9YMTIw NSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAorIyBD T05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQx VDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0Cisj IENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JY ODU4MSBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCisjCisKKyMKKyMgUGxh dGZvcm0gUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0 CisjIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJW X0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0 CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJW X1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBz ZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19E UlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBz ZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIG9uLUNQVSBS VEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9QUEMgaXMgbm90IHNldAorQ09ORklH X0RNQURFVklDRVM9eQorCisjCisjIERNQSBEZXZpY2VzCisjCitDT05GSUdfRlNMX0RNQT15 CitDT05GSUdfRE1BX0VOR0lORT15CisKKyMKKyMgRE1BIENsaWVudHMKKyMKK0NPTkZJR19O RVRfRE1BPXkKKyMgQ09ORklHX0RNQVRFU1QgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlz IG5vdCBzZXQKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lz dGVtcworIworQ09ORklHX0VYVDJfRlM9eQorQ09ORklHX0VYVDJfRlNfWEFUVFI9eQorIyBD T05GSUdfRVhUMl9GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19T RUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CitD T05GSUdfRVhUM19GUz15CitDT05GSUdfRVhUM19GU19YQVRUUj15CisjIENPTkZJR19FWFQz X0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlz IG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorQ09ORklHX0pCRD15Cisj IENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0ZTX01CQ0FDSEU9eQorIyBD T05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBz ZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NL SU5HPXkKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBp cyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElG WT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklH X1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENP TkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNl dAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19JU085NjYwX0ZT PXkKK0NPTkZJR19KT0xJRVQ9eQorIyBDT05GSUdfWklTT0ZTIGlzIG5vdCBzZXQKKyMgQ09O RklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwor IworIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVkZBVF9GUyBpcyBu b3Qgc2V0CisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmls ZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NP TkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklH X1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMg bm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NP TkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKKyMgQ09O RklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Cisj IENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qg c2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBu b3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0ZTPXkK K0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCitDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9 eQorIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAorIyBDT05GSUdf SkZGUzJfU1VNTUFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBu b3Qgc2V0CisjIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQK K0NPTkZJR19KRkZTMl9aTElCPXkKKyMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0CitD T05GSUdfSkZGUzJfUlRJTUU9eQorIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAor IyBDT05GSUdfWUFGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBz ZXQKK0NPTkZJR19TUVVBU0hGUz15CisjIENPTkZJR19TUVVBU0hGU19FTUJFRERFRCBpcyBu b3Qgc2V0CitDT05GSUdfU1FVQVNIRlNfRlJBR01FTlRfQ0FDSEVfU0laRT0zCisjIENPTkZJ R19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMg Q09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0 CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMg bm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMg aXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19G Uz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAor IyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CisjIENPTkZJ R19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQor Q09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19TVU5SUENf UkVHSVNURVJfVjQgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5v dCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdf U01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdf TkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05G SUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKK0NPTkZJ R19QQVJUSVRJT05fQURWQU5DRUQ9eQorIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5v dCBzZXQKKyMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQU1J R0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBu b3Qgc2V0CisjIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RP U19QQVJUSVRJT049eQorIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENP TkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU09MQVJJU19Y ODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBp cyBub3Qgc2V0CisjIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklH X1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBp cyBub3Qgc2V0CisjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklH X0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19FRklfUEFSVElUSU9OIGlz IG5vdCBzZXQKKyMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklH X05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKK0NPTkZJR19OTFNfQ09E RVBBR0VfNDM3PXkKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBD T05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBB R0VfODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNl dAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNf Q09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMg bm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJ R19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84 NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Cisj IENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RF UEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qg c2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05M U19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBp cyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09O RklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlf OCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Cisj IENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0FTQ0lJ PXkKK0NPTkZJR19OTFNfSVNPODg1OV8xPXkKKyMgQ09ORklHX05MU19JU084ODU5XzIgaXMg bm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CisjIENPTkZJR19O TFNfSVNPODg1OV80IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90 IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNf SVNPODg1OV83IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNl dAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lT Tzg4NTlfMTQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNl dAorIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9V IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0RM TSBpcyBub3Qgc2V0CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJF VkVSU0U9eQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CisjIENPTkZJR19DUkNf Q0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdf Q1JDX1QxMERJRiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAor Q09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElC Q1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJf REVGTEFURT15CitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdf SEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQorCisj CisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0 CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CitDT05GSUdfRU5BQkxFX01VU1Rf Q0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAorIyBDT05GSUdfTUFHSUNfU1lTUlEg aXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorQ09ORklH X0RFQlVHX0ZTPXkKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklH X0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CitDT05G SUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBf UEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZB TFVFPTAKKyMgQ09ORklHX1NDSEVEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVE U1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBD T05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX0RFQlVHX09O IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdf REVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIg aXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05G SUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19T TEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMg aXMgbm90IHNldAorQ09ORklHX1NUQUNLVFJBQ0U9eQorIyBDT05GSUdfREVCVUdfS09CSkVD VCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKK0NP TkZJR19ERUJVR19JTkZPPXkKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09O RklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZ X0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENP TkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMg bm90IHNldAorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05G SUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxM X0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tQUk9CRVNfU0FOSVRZX1RFU1QgaXMg bm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENP TkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19MS0RUTSBp cyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05G SUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVD SyBpcyBub3Qgc2V0CitDT05GSUdfTk9QX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElP Tl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorQ09ORklHX0hBVkVf RlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX1JJTkdfQlVGRkVSPXkKK0NPTkZJR19U UkFDSU5HPXkKKworIworIyBUcmFjZXJzCisjCisjIENPTkZJR19GVU5DVElPTl9UUkFDRVIg aXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05G SUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RS QUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CisjIENP TkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUNL X1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJBQ0VfU1RBUlRVUF9URVNUIGlzIG5v dCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09O RklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09O RklHX0tHREIgaXMgbm90IHNldAorQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CisjIENP TkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NU QUNLX1VTQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qg c2V0CisjIENPTkZJR19DT0RFX1BBVENISU5HX1NFTEZURVNUIGlzIG5vdCBzZXQKKyMgQ09O RklHX0ZUUl9GSVhVUF9TRUxGVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19NU0lfQklUTUFQ X1NFTEZURVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hNT04gaXMgbm90IHNldAorIyBDT05G SUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKK0NPTkZJR19WSVJRX0RFQlVHPXkKK0NPTkZJR19C RElfU1dJVENIPXkKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0CisKKyMK KyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENP TkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBz ZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NP TkZJR19YT1JfQkxPQ0tTPXkKK0NPTkZJR19BU1lOQ19DT1JFPXkKK0NPTkZJR19BU1lOQ19N RU1DUFk9eQorQ09ORklHX0FTWU5DX1hPUj15CitDT05GSUdfQ1JZUFRPPXkKKworIworIyBD cnlwdG8gY29yZSBvciBoZWxwZXIKKyMKKyMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBz ZXQKKyMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBU T19NQU5BR0VSMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90 IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRP X0NSWVBURCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0 CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgQXV0aGVudGljYXRl ZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9f Q0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05G SUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworIyBD T05GSUdfQ1JZUFRPX0NCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5v dCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRP X0VDQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKKyMgQ09O RklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90 IHNldAorCisjCisjIEhhc2ggbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5v dCBzZXQKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKworIworIyBEaWdlc3QK KyMKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRP X01ENCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKKyMgQ09O RklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1E MTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBD T05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIw IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKKyMgQ09ORklH X0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBu b3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NS WVBUT19XUDUxMiBpcyBub3Qgc2V0CisKKyMKKyMgQ2lwaGVycworIworIyBDT05GSUdfQ1JZ UFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQK KyMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19CTE9X RklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAor IyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNU NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVTIGlzIG5vdCBzZXQKKyMgQ09ORklH X0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBu b3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19D UllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qg c2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19U V09GSVNIIGlzIG5vdCBzZXQKKworIworIyBDb21wcmVzc2lvbgorIworIyBDT05GSUdfQ1JZ UFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0 CisKKyMKKyMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCisjCisjIENPTkZJR19DUllQVE9f QU5TSV9DUFJORyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAor IyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJUlRVQUxJWkFUSU9O IGlzIG5vdCBzZXQKZGlmZiAtdSAtLW5ldy1maWxlIC0tcmVjdXJzaXZlIGxpbnV4LTIuNi4y OS42Lm9yaWcvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXZtZTQxMDBfZGVmY29uZmlnIGxpbnV4 LTIuNi4yOS42Lm1vZC9hcmNoL3Bvd2VycGMvY29uZmlncy9tdm1lNDEwMF9kZWZjb25maWcK LS0tIGxpbnV4LTIuNi4yOS42Lm9yaWcvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXZtZTQxMDBf ZGVmY29uZmlnCTE5NjktMTItMzEgMTc6MDA6MDAuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51 eC0yLjYuMjkuNi5tb2QvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXZtZTQxMDBfZGVmY29uZmln CTIwMDktMDctMjEgMTE6Mjg6MTcuMDAwMDAwMDAwIC0wNzAwCkBAIC0wLDAgKzEsMTg1OSBA QAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRp dAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LjUKKyMgVGh1IEp1biAyNSAxNzow MDozOCAyMDA5CisjCisjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vz c29yIHN1cHBvcnQKKyMKKyMgQ09ORklHXzZ4eCBpcyBub3Qgc2V0CitDT05GSUdfUFBDXzg1 eHg9eQorIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0CisjIENPTkZJR180MHggaXMgbm90 IHNldAorIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0UyMDAgaXMgbm90IHNl dAorQ09ORklHX0U1MDA9eQorIyBDT05GSUdfUFBDX0U1MDBNQyBpcyBub3Qgc2V0CitDT05G SUdfQk9PS0U9eQorQ09ORklHX0ZTTF9CT09LRT15CitDT05GSUdfRlNMX0VNQl9QRVJGTU9O PXkKKyMgQ09ORklHX1BIWVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1NQRT15CitDT05G SUdfUFBDX01NVV9OT0hBU0g9eQorIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0 CisjIENPTkZJR19TTVAgaXMgbm90IHNldAorQ09ORklHX1BQQzMyPXkKK0NPTkZJR19XT1JE X1NJWkU9MzIKKyMgQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAor Q09ORklHX01NVT15CitDT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15CitDT05GSUdfR0VO RVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQorQ09ORklHX0dF TkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorIyBDT05G SUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorQ09ORklHX0lSUV9QRVJf Q1BVPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0hBVkVfTEFURU5D WVRPUF9TVVBQT1JUPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX1JXU0VN X1hDSEdBRERfQUxHT1JJVEhNPXkKK0NPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQorQ09O RklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9 eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CisjIENPTkZJR19BUkNIX05PX1ZJ UlRfVE9fQlVTIGlzIG5vdCBzZXQKK0NPTkZJR19QUEM9eQorQ09ORklHX0VBUkxZX1BSSU5U Sz15CitDT05GSUdfR0VORVJJQ19OVlJBTT15CitDT05GSUdfU0NIRURfT01JVF9GUkFNRV9Q T0lOVEVSPXkKK0NPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15CitDT05GSUdfUFBDX09G PXkKK0NPTkZJR19PRj15CitDT05GSUdfUFBDX1VEQkdfMTY1NTA9eQorIyBDT05GSUdfR0VO RVJJQ19UQlNZTkMgaXMgbm90IHNldAorQ09ORklHX0FVRElUX0FSQ0g9eQorQ09ORklHX0dF TkVSSUNfQlVHPXkKKyMgQ09ORklHX0RFRkFVTFRfVUlNQUdFIGlzIG5vdCBzZXQKKyMgQ09O RklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19EQ1JfTU1JTyBp cyBub3Qgc2V0CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVf UkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBF UklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0xPQ0tfS0VSTkVM PXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049 IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1dBUD15CitDT05GSUdf U1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorQ09ORklHX1BPU0lYX01RVUVV RT15CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CisjIENPTkZJR19CU0RfUFJPQ0VTU19B Q0NUX1YzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENP TkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklH X0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklH X1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5v dCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19J S0NPTkZJRz15CitDT05GSUdfSUtDT05GSUdfUFJPQz15CitDT05GSUdfTE9HX0JVRl9TSElG VD0xNAorQ09ORklHX0dST1VQX1NDSEVEPXkKK0NPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkK K0NPTkZJR19SVF9HUk9VUF9TQ0hFRD15CitDT05GSUdfVVNFUl9TQ0hFRD15CisjIENPTkZJ R19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX0NHUk9VUFM9eQorIyBDT05GSUdf Q0dST1VQX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUF9OUyBpcyBub3Qgc2V0 CisjIENPTkZJR19DR1JPVVBfRlJFRVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBf REVWSUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUF9DUFVBQ0NUIGlzIG5vdCBzZXQK KyMgQ09ORklHX1JFU09VUkNFX0NPVU5URVJTIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19E RVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKKyMgQ09ORklHX1JF TEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorQ09ORklH X0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJ R19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKK0NP TkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1NZU0NUTF9T WVNDQUxMPXkKK0NPTkZJR19LQUxMU1lNUz15CitDT05GSUdfS0FMTFNZTVNfQUxMPXkKKyMg Q09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9 eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitD T05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfRVBPTEw9eQorQ09O RklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NP TkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15 CitDT05GSUdfUENJX1FVSVJLUz15CisjIENPTkZJR19TTFVCX0RFQlVHIGlzIG5vdCBzZXQK K0NPTkZJR19DT01QQVRfQlJLPXkKKyMgQ09ORklHX1NMQUIgaXMgbm90IHNldAorQ09ORklH X1NMVUI9eQorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CitDT05GSUdfUFJPRklMSU5HPXkK K0NPTkZJR19UUkFDRVBPSU5UUz15CitDT05GSUdfTUFSS0VSUz15CitDT05GSUdfT1BST0ZJ TEU9eQorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorQ09ORklHX0tQUk9CRVM9eQorQ09ORklH X0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQorQ09ORklHX0tSRVRQUk9CRVM9 eQorQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQor Q09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15 CisjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKK0NPTkZJ R19SVF9NVVRFWEVTPXkKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkK KyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RVTEVf VU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorQ09O RklHX01PRFZFUlNJT05TPXkKK0NPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQorQ09O RklHX0JMT0NLPXkKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVW X0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQK KyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hl ZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkK K0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CisjIENP TkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUg aXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfTk9P UCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19G UkVFWkVSIGlzIG5vdCBzZXQKKworIworIyBQbGF0Zm9ybSBzdXBwb3J0CisjCisjIENPTkZJ R19QUENfQ0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90 IHNldAorIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKK0NPTkZJR19NUEM4NXh4PXkKKyMg Q09ORklHX01QQzg1NDBfQURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzg1NjBfQURTIGlz IG5vdCBzZXQKKyMgQ09ORklHX01QQzg1eHhfQ0RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01Q Qzg1eHhfTURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzg1MzZfRFMgaXMgbm90IHNldAor IyBDT05GSUdfTVBDODV4eF9EUyBpcyBub3Qgc2V0CisjIENPTkZJR19LU0k4NTYwIGlzIG5v dCBzZXQKKyMgQ09ORklHX1NUWF9HUDMgaXMgbm90IHNldAorIyBDT05GSUdfVFFNODU0MCBp cyBub3Qgc2V0CisjIENPTkZJR19UUU04NTQxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RRTTg1 NDggaXMgbm90IHNldAorIyBDT05GSUdfVFFNODU1NSBpcyBub3Qgc2V0CisjIENPTkZJR19U UU04NTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NCQzg1NDggaXMgbm90IHNldAorIyBDT05G SUdfU0JDODU2MCBpcyBub3Qgc2V0CisjIENPTkZJR19NVk1FMzEwMCBpcyBub3Qgc2V0CitD T05GSUdfTVZNRTQxMDA9eQorIyBDT05GSUdfQ1BDSTYyMDAgaXMgbm90IHNldAorQ09ORklH X01WTUU0MTAwX0VOQUJMRV9ERFJfRVJST1JTPXkKK0NPTkZJR19NVk1FNDEwMF9FTkFCTEVf TDJfRVJST1JTPXkKK0NPTkZJR19NVk1FNDEwMF9FTkFCTEVfUENJX0VSUk9SUz15CitDT05G SUdfTVZNRTQxMDBfVElDS19USU1FUlM9eQorIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0CitD T05GSUdfTVBJQz15CisjIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKKyMgQ09ORklH X1BQQ19JODI1OSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0Cisj IENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEMxMDYgaXMg bm90IHNldAorIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAorIyBDT05GSUdfUFBD X0lORElSRUNUX0lPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90 IHNldAorIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorIyBDT05GSUdfUVVJQ0NfRU5H SU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQTTIgaXMgbm90IHNldAorIyBDT05GSUdfRlNM X1VMSTE1NzUgaXMgbm90IHNldAorIyBDT05GSUdfTVBDOHh4eF9HUElPIGlzIG5vdCBzZXQK KyMgQ09ORklHX1NJTVBMRV9HUElPIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgb3B0aW9u cworIworQ09ORklHX0hJR0hNRU09eQorQ09ORklHX1RJQ0tfT05FU0hPVD15CitDT05GSUdf Tk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9D S0VWRU5UU19CVUlMRD15CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorIyBDT05GSUdf SFpfMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CitDT05GSUdf SFpfMTAwMD15CitDT05GSUdfSFo9MTAwMAorQ09ORklHX1NDSEVEX0hSVElDSz15CisjIENP TkZJR19QUkVFTVBUX05PTkUgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRB UlkgaXMgbm90IHNldAorQ09ORklHX1BSRUVNUFQ9eQorQ09ORklHX0JJTkZNVF9FTEY9eQor IyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorIyBD T05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKK0NPTkZJR19CSU5GTVRfTUlTQz15CitDT05G SUdfTUFUSF9FTVVMQVRJT049eQorIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQK K0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CitDT05GSUdfQVJDSF9IQVNf V0FMS19NRU1PUlk9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQor Q09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05P REVfTUFQPXkKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVN X01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMg Q09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQor Q09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9 eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX01JR1JBVElPTiBpcyBu b3Qgc2V0CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdf Wk9ORV9ETUFfRkxBRz0xCitDT05GSUdfQk9VTkNFPXkKK0NPTkZJR19WSVJUX1RPX0JVUz15 CitDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKK0NPTkZJR19QUENfNEtfUEFHRVM9eQorIyBD T05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfNjRLX1BBR0VT IGlzIG5vdCBzZXQKK0NPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCitDT05GSUdfUFJP Q19ERVZJQ0VUUkVFPXkKK0NPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkU9 ImNvbnNvbGU9dHR5UzAsOTYwMCByb290PS9kZXYvcmFtMCByYW1kaXNrX3NpemU9NjQwMDAi CitDT05GSUdfRVhUUkFfVEFSR0VUUz0iIgorIyBDT05GSUdfUE0gaXMgbm90IHNldAorQ09O RklHX1NFQ0NPTVA9eQorQ09ORklHX0lTQV9ETUFfQVBJPXkKKworIworIyBCdXMgb3B0aW9u cworIworQ09ORklHX1pPTkVfRE1BPXkKK0NPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKK0NP TkZJR19GU0xfU09DPXkKK0NPTkZJR19GU0xfUENJPXkKK0NPTkZJR19QUENfUENJX0NIT0lD RT15CitDT05GSUdfUENJPXkKK0NPTkZJR19QQ0lfRE9NQUlOUz15CitDT05GSUdfUENJX1NZ U0NBTEw9eQorQ09ORklHX1BDSUVQT1JUQlVTPXkKK0NPTkZJR19QQ0lFQUVSPXkKKyMgQ09O RklHX1BDSUVBU1BNIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVUFBPUlRTX01TST15Cisj IENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0lfTEVHQUNZPXkKKyMgQ09O RklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0 CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVR19QQ0kgaXMg bm90IHNldAorIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldAorCisjCisjIEFkdmFu Y2VkIHNldHVwCisjCitDT05GSUdfQURWQU5DRURfT1BUSU9OUz15CitDT05GSUdfTE9XTUVN X1NJWkVfQk9PTD15CitDT05GSUdfTE9XTUVNX1NJWkU9MHg0MDAwMDAwMAorIyBDT05GSUdf UkVMT0NBVEFCTEUgaXMgbm90IHNldAorQ09ORklHX1BBR0VfT0ZGU0VUX0JPT0w9eQorQ09O RklHX1BBR0VfT0ZGU0VUPTB4ODAwMDAwMDAKK0NPTkZJR19LRVJORUxfU1RBUlRfQk9PTD15 CitDT05GSUdfS0VSTkVMX1NUQVJUPTB4ODAwMDAwMDAKKyMgQ09ORklHX1BIWVNJQ0FMX1NU QVJUX0JPT0wgaXMgbm90IHNldAorQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAK K0NPTkZJR19QSFlTSUNBTF9BTElHTj0weDEwMDAwMDAwCitDT05GSUdfVEFTS19TSVpFX0JP T0w9eQorQ09ORklHX1RBU0tfU0laRT0weDgwMDAwMDAwCitDT05GSUdfTkVUPXkKKworIwor IyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQor Q09ORklHX1BBQ0tFVD15CitDT05GSUdfUEFDS0VUX01NQVA9eQorQ09ORklHX1VOSVg9eQor Q09ORklHX1hGUk09eQorQ09ORklHX1hGUk1fVVNFUj15CisjIENPTkZJR19YRlJNX1NVQl9Q T0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKKyMg Q09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfS0VZIGlz IG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKK0NPTkZJR19JUF9NVUxUSUNBU1Q9eQorIyBDT05G SUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15 CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CitDT05GSUdfSVBfUE5Q X0JPT1RQPXkKK0NPTkZJR19JUF9QTlBfUkFSUD15CisjIENPTkZJR19ORVRfSVBJUCBpcyBu b3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTVJP VVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lO X0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENP TkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qg c2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVU X1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19J TkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQor IyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05G SUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qg c2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9 ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CitDT05GSUdfSVBWNj15 CisjIENPTkZJR19JUFY2X1BSSVZBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9ST1VU RVJfUFJFRiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X09QVElNSVNUSUNfREFEIGlzIG5v dCBzZXQKKyMgQ09ORklHX0lORVQ2X0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X0VT UCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9JUENPTVAgaXMgbm90IHNldAorIyBDT05G SUdfSVBWNl9NSVA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlz IG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5F VDZfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RVTk5F TD15CitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX0JFRVQ9eQorIyBDT05GSUdfSU5FVDZfWEZS TV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19JUFY2X1NJVD15 CitDT05GSUdfSVBWNl9ORElTQ19OT0RFVFlQRT15CisjIENPTkZJR19JUFY2X1RVTk5FTCBp cyBub3Qgc2V0CisjIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0Cisj IENPTkZJR19JUFY2X01ST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRMQUJFTCBpcyBu b3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorQ09ORklHX05F VEZJTFRFUj15CisjIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAorQ09ORklH X05FVEZJTFRFUl9BRFZBTkNFRD15CisKKyMKKyMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJh dGlvbgorIworIyBDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUUgaXMgbm90IHNldAor IyBDT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX05G X0NPTk5UUkFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRBQkxFUyBpcyBu b3Qgc2V0CisjIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CisKKyMKKyMgSVA6IE5ldGZpbHRl ciBDb25maWd1cmF0aW9uCisjCisjIENPTkZJR19ORl9ERUZSQUdfSVBWNCBpcyBub3Qgc2V0 CisjIENPTkZJR19JUF9ORl9RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9JUFRB QkxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9BUlBUQUJMRVMgaXMgbm90IHNldAor CisjCisjIElQdjY6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCisjIENPTkZJR19JUDZf TkZfUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfSVA2X05GX0lQVEFCTEVTIGlzIG5vdCBz ZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBu b3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qg c2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBu b3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05F VCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBp cyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMg bm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMg bm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRf U0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKKworIworIyBOZXR3 b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05G SUdfTkVUX1RDUFBST0JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBz ZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQK KyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQK KyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qg c2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90 IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVy cworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRf SEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05G SUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90 IHNldAorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVH X0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0 CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJ R19NVERfREVCVUcgaXMgbm90IHNldAorQ09ORklHX01URF9DT05DQVQ9eQorQ09ORklHX01U RF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CisjIENPTkZJ R19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NNRExJTkVfUEFS VFM9eQorIyBDT05GSUdfTVREX09GX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9B UjdfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRp b24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkK K0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklH X05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdf UkZEX0ZUTCBpcyBub3Qgc2V0CitDT05GSUdfU1NGREM9eQorIyBDT05GSUdfTVREX09PUFMg aXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05G SUdfTVREX0NGST15CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05G SUdfTVREX0dFTl9QUk9CRT15CitDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUz15CitDT05G SUdfTVREX0NGSV9OT1NXQVA9eQorIyBDT05GSUdfTVREX0NGSV9CRV9CWVRFX1NXQVAgaXMg bm90IHNldAorIyBDT05GSUdfTVREX0NGSV9MRV9CWVRFX1NXQVAgaXMgbm90IHNldAorQ09O RklHX01URF9DRklfR0VPTUVUUlk9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkK K0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJ RFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBD T05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9N QVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05G SUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09O RklHX01URF9DRklfSTggaXMgbm90IHNldAorIyBDT05GSUdfTVREX09UUCBpcyBub3Qgc2V0 CitDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CitDT05GSUdfTVREX0NGSV9BTURTVEQ9eQor Q09ORklHX01URF9DRklfU1RBQT15CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklH X01URF9SQU0gaXMgbm90IHNldAorQ09ORklHX01URF9ST009eQorIyBDT05GSUdfTVREX0FC U0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2Vz cworIworQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTPXkKKyMgQ09ORklHX01URF9QSFlT TUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFlTTUFQX09GIGlzIG5vdCBzZXQKKyMg Q09ORklHX01URF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBp cyBub3Qgc2V0CisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CitDT05GSUdfTVRE X01WTUU0MTAwPXkKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMK KyMKKyMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NMUkFN IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19N VERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNl dAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVRE X0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAor IyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORD15 CitDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFPXkKK0NPTkZJR19NVERfTkFORF9FQ0Nf U01DPXkKKyMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAorQ09ORklH X01URF9OQU5EX01WTUU0MTAwPXkKK0NPTkZJR19NVERfTkFORF9JRFM9eQorIyBDT05GSUdf TVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9DQUZF IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAorQ09O RklHX01URF9OQU5EX1BMQVRGT1JNPXkKKyMgQ09ORklHX01URF9BTEFVREEgaXMgbm90IHNl dAorIyBDT05GSUdfTVREX05BTkRfRlNMX0VMQkMgaXMgbm90IHNldAorIyBDT05GSUdfTVRE X05BTkRfRlNMX1VQTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qg c2V0CisKKyMKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKKyMKKyMgQ09ORklHX01U RF9MUEREUiBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2Vz CisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKK0NPTkZJR19PRl9ERVZJQ0U9eQor Q09ORklHX09GX0kyQz15CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19C TEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxL X0NQUV9EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNl dAorIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RF Vl9VTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qg c2V0CitDT05GSUdfQkxLX0RFVl9MT09QPXkKKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9P UCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9OQkQ9eQorIyBDT05GSUdfQkxLX0RFVl9T WDggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CitDT05GSUdf QkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxL X0RFVl9SQU1fU0laRT0xMzEwNzIKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQK KyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJf RVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorQ09ORklH X01JU0NfREVWSUNFUz15CisjIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKKyMgQ09ORklH X1NHSV9JT0M0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0Cisj IENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJW SUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAorIyBDT05GSUdf QzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIworIyBDT05GSUdf RUVQUk9NX0FUMjQgaXMgbm90IHNldAorQ09ORklHX0VFUFJPTV9MRUdBQ1k9eQorIyBDT05G SUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CitDT05GSUdf SURFPXkKKworIworIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlL2lkZS50eHQgZm9y IGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCisjCisjIENPTkZJR19CTEtfREVWX0lERV9TQVRB IGlzIG5vdCBzZXQKK0NPTkZJR19JREVfR0Q9eQorQ09ORklHX0lERV9HRF9BVEE9eQorIyBD T05GSUdfSURFX0dEX0FUQVBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFQ0Qg aXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKKyMgQ09O RklHX0lERV9UQVNLX0lPQ1RMIGlzIG5vdCBzZXQKK0NPTkZJR19JREVfUFJPQ19GUz15CisK KyMKKyMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcworIworIyBDT05GSUdfQkxLX0RF Vl9QTEFURk9STSBpcyBub3Qgc2V0CisKKyMKKyMgUENJIElERSBjaGlwc2V0cyBzdXBwb3J0 CisjCisjIENPTkZJR19CTEtfREVWX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfQkxL X0RFVl9PUFRJNjIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQUVDNjJYWCBpcyBu b3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0FMSTE1WDMgaXMgbm90IHNldAorIyBDT05GSUdf QkxLX0RFVl9BTUQ3NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ01ENjRYIGlz IG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVFJJRkxFWCBpcyBub3Qgc2V0CisjIENPTkZJ R19CTEtfREVWX0NTNTUyMCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NTNTUzMCBp cyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hQVDM2NiBpcyBub3Qgc2V0CisjIENPTkZJ R19CTEtfREVWX0pNSUNST04gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TQzEyMDAg aXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklH X0JMS19ERVZfSVQ4MTcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSVQ4MjEzIGlz IG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSVQ4MjFYIGlzIG5vdCBzZXQKKyMgQ09ORklH X0JMS19ERVZfTlM4NzQxNSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1BEQzIwMlhY X09MRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX05FVyBpcyBub3Qg c2V0CisjIENPTkZJR19CTEtfREVWX1NWV0tTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19E RVZfU0lJTUFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NMODJDMTA1IGlzIG5v dCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU0xDOTBFNjYgaXMgbm90IHNldAorIyBDT05GSUdf QkxLX0RFVl9UUk0yOTAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9WSUE4MkNYWFgg aXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9UQzg2QzAwMSBpcyBub3Qgc2V0CisjIENP TkZJR19CTEtfREVWX0lERURNQSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3Vw cG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST15 CitDT05GSUdfU0NTSV9ETUE9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorIyBD T05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQor CisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05G SUdfQkxLX0RFVl9TRD15CisjIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKKyMgQ09O RklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9TUj15CitDT05G SUdfQkxLX0RFVl9TUl9WRU5ET1I9eQorQ09ORklHX0NIUl9ERVZfU0c9eQorIyBDT05GSUdf Q0hSX0RFVl9TQ0ggaXMgbm90IHNldAorCisjCisjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcu IENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcworIworIyBDT05GSUdfU0NTSV9N VUxUSV9MVU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNl dAorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1NDQU5f QVNZTkM9eQorIyBDT05GSUdfU0NTSV9XQUlUX1NDQU4gaXMgbm90IHNldAorCisjCisjIFND U0kgVHJhbnNwb3J0cworIworQ09ORklHX1NDU0lfU1BJX0FUVFJTPXkKKyMgQ09ORklHX1ND U0lfRkNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBu b3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorIyBDT05GSUdf U0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfTE9XTEVWRUw9eQorIyBD T05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9S QUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CisjIENP TkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBu b3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NT SV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90 IHNldAorIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lf RFBUX0kyTyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FEVkFOU1lTIGlzIG5vdCBzZXQK KyMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX05F V0dFTiBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAor IyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSFBUSU9Q IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQlVTTE9HSUMgaXMgbm90IHNldAorIyBDT05G SUdfTElCRkMgaXMgbm90IHNldAorIyBDT05GSUdfRkNPRSBpcyBub3Qgc2V0CisjIENPTkZJ R19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRUFUQSBpcyBub3Qg c2V0CisjIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAorIyBDT05GSUdf U0NTSV9HRFRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKKyMg Q09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSU5JQTEwMCBp cyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ND U0lfU1RFWCBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9TWU01M0M4WFhfMj15CitDT05GSUdf U0NTSV9TWU01M0M4WFhfRE1BX0FERFJFU1NJTkdfTU9ERT0xCitDT05GSUdfU0NTSV9TWU01 M0M4WFhfREVGQVVMVF9UQUdTPTE2CitDT05GSUdfU0NTSV9TWU01M0M4WFhfTUFYX1RBR1M9 NjQKK0NPTkZJR19TQ1NJX1NZTTUzQzhYWF9NTUlPPXkKKyMgQ09ORklHX1NDU0lfSVBSIGlz IG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAorIyBDT05G SUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfSVNDU0kgaXMg bm90IHNldAorIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lf REMzOTV4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKKyMg Q09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBu b3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RI IGlzIG5vdCBzZXQKK0NPTkZJR19BVEE9eQorIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlz IG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfUE1QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFf QUhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKKyMgQ09O RklHX1NBVEFfRlNMIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfU0ZGPXkKKyMgQ09ORklHX1NB VEFfU1ZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9QSUlYIGlzIG5vdCBzZXQKKyMgQ09O RklHX1NBVEFfTVYgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9OViBpcyBub3Qgc2V0Cisj IENPTkZJR19QRENfQURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1FTVE9SIGlzIG5v dCBzZXQKKyMgQ09ORklHX1NBVEFfUFJPTUlTRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRB X1NYNCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1NJTCBpcyBub3Qgc2V0CisjIENPTkZJ R19TQVRBX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1VMSSBpcyBub3Qgc2V0Cisj IENPTkZJR19TQVRBX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1ZJVEVTU0UgaXMg bm90IHNldAorIyBDT05GSUdfU0FUQV9JTklDMTYyWCBpcyBub3Qgc2V0CisjIENPTkZJR19Q QVRBX0FMSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CisjIENP TkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5v dCBzZXQKKyMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19Q QVRBX0NNRDY0WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NTNTUyMCBpcyBub3Qgc2V0 CisjIENPTkZJR19QQVRBX0NTNTUzMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NZUFJF U1MgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9FRkFSIGlzIG5vdCBzZXQKKyMgQ09ORklH X0FUQV9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUMzY2IGlzIG5vdCBz ZXQKKyMgQ09ORklHX1BBVEFfSFBUMzdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBU M1gyTiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDNYMyBpcyBub3Qgc2V0CisjIENP TkZJR19QQVRBX0lUODIxWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0lUODIxMyBpcyBu b3Qgc2V0CisjIENPTkZJR19QQVRBX0pNSUNST04gaXMgbm90IHNldAorIyBDT05GSUdfUEFU QV9UUklGTEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTUFSVkVMTCBpcyBub3Qgc2V0 CisjIENPTkZJR19QQVRBX01QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT0xEUElJ WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05FVENFTEwgaXMgbm90IHNldAorIyBDT05G SUdfUEFUQV9OSU5KQTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTlM4NzQxMCBpcyBu b3Qgc2V0CisjIENPTkZJR19QQVRBX05TODc0MTUgaXMgbm90IHNldAorIyBDT05GSUdfUEFU QV9PUFRJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0Cisj IENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SQURJU1lT IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklH X1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMg bm90IHNldAorQ09ORklHX1BBVEFfUERDMjAyN1g9eQorIyBDT05GSUdfUEFUQV9TSUw2ODAg aXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFU QV9WSUEgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9XSU5CT05EIGlzIG5vdCBzZXQKKyMg Q09ORklHX1BBVEFfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TQ0ggaXMg bm90IHNldAorQ09ORklHX01EPXkKK0NPTkZJR19CTEtfREVWX01EPXkKKyMgQ09ORklHX01E X0FVVE9ERVRFQ1QgaXMgbm90IHNldAorQ09ORklHX01EX0xJTkVBUj15CitDT05GSUdfTURf UkFJRDA9eQorQ09ORklHX01EX1JBSUQxPXkKKyMgQ09ORklHX01EX1JBSUQxMCBpcyBub3Qg c2V0CitDT05GSUdfTURfUkFJRDQ1Nj15CitDT05GSUdfTURfUkFJRDVfUkVTSEFQRT15CitD T05GSUdfTURfTVVMVElQQVRIPXkKKyMgQ09ORklHX01EX0ZBVUxUWSBpcyBub3Qgc2V0CitD T05GSUdfQkxLX0RFVl9ETT15CisjIENPTkZJR19ETV9ERUJVRyBpcyBub3Qgc2V0CisjIENP TkZJR19ETV9DUllQVCBpcyBub3Qgc2V0CitDT05GSUdfRE1fU05BUFNIT1Q9eQorQ09ORklH X0RNX01JUlJPUj15CitDT05GSUdfRE1fWkVSTz15CitDT05GSUdfRE1fTVVMVElQQVRIPXkK KyMgQ09ORklHX0RNX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNX1VFVkVOVCBpcyBu b3Qgc2V0CisjIENPTkZJR19GVVNJT04gaXMgbm90IHNldAorCisjCisjIElFRUUgMTM5NCAo RmlyZVdpcmUpIHN1cHBvcnQKKyMKKworIworIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3 byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKKyMKKyMgQ09O RklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQK KyMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBp cyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfRFVNTVk9eQorIyBDT05G SUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMg Q09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAor IyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAor Q09ORklHX1BIWUxJQj15CisKKyMKKyMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycworIworIyBD T05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfREFWSUNPTV9QSFkgaXMg bm90IHNldAorIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xYVF9Q SFkgaXMgbm90IHNldAorIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJ R19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0 CitDT05GSUdfQlJPQURDT01fUEhZPXkKKyMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNl dAorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTkFUSU9OQUxf UEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAorIyBDT05GSUdf TFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qg c2V0CisjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhF Uk5FVD15CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0Cisj IENPTkZJR19TVU5HRU0gaXMgbm90IHNldAorIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0 CisjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBp cyBub3Qgc2V0CisjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAorIyBDT05GSUdfSFAx MDAgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAor IyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9O RVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlz IG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNl dAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQK KyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CitDT05G SUdfTkVUX1BDST15CisjIENPTkZJR19QQ05FVDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FN RDgxMTFfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FEQVBURUNfU1RBUkZJUkUgaXMgbm90 IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPUkNFREVUSCBpcyBu b3Qgc2V0CisjIENPTkZJR19FMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQUxOWCBpcyBu b3Qgc2V0CisjIENPTkZJR19OQVRTRU1JIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FMktfUENJ IGlzIG5vdCBzZXQKKyMgQ09ORklHXzgxMzlDUCBpcyBub3Qgc2V0CisjIENPTkZJR184MTM5 VE9PIGlzIG5vdCBzZXQKKyMgQ09ORklHX1I2MDQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJ UzkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FUElDMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklH X1NNU0M5NDIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKKyMg Q09ORklHX1RMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQK KyMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0 CitDT05GSUdfTkVUREVWXzEwMDA9eQorIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKKyMg Q09ORklHX0RMMksgaXMgbm90IHNldAorQ09ORklHX0UxMDAwPXkKK0NPTkZJR19FMTAwMEU9 eQorIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lHQiBpcyBub3Qgc2V0 CisjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTUFDSEkgaXMgbm90 IHNldAorIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1I4MTY5IGlz IG5vdCBzZXQKKyMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0CisjIENPTkZJR19TS0dFIGlz IG5vdCBzZXQKKyMgQ09ORklHX1NLWTIgaXMgbm90IHNldAorIyBDT05GSUdfVklBX1ZFTE9D SVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CisjIENPTkZJR19C TlgyIGlzIG5vdCBzZXQKK0NPTkZJR19HSUFORkFSPXkKKyMgQ09ORklHX1FMQTNYWFggaXMg bm90IHNldAorIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxRSBpcyBu b3Qgc2V0CisjIENPTkZJR19BVEwxQyBpcyBub3Qgc2V0CisjIENPTkZJR19KTUUgaXMgbm90 IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSIGlz IG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAy MTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJ R19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29y a2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKKworIworIyBVU0Ig TmV0d29yayBBZGFwdGVycworIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBD T05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBu b3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0Jf VVNCTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19G RERJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQ UCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9G QyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklH X05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBu b3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5v dCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkK KyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRf UE9MTERFViBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworIyBD T05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZREVW IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklH X0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycwor IworIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRf TU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAor IyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNI U0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisj CisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAor IyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2Vz CisjCitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJ R19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1ZUX0hXX0NP TlNPTEVfQklORElORyBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CisjIENPTkZJR19T RVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorIyBDT05GSUdfTk9aT01JIGlzIG5vdCBz ZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworQ09ORklHX1NFUklBTF84MjUwPXkKK0NP TkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF84MjUwX1BDSSBp cyBub3Qgc2V0CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NQorQ09ORklHX1NFUklB TF84MjUwX1JVTlRJTUVfVUFSVFM9NQorQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkK K0NPTkZJR19TRVJJQUxfODI1MF9NQU5ZX1BPUlRTPXkKK0NPTkZJR19TRVJJQUxfODI1MF9T SEFSRV9JUlE9eQorIyBDT05GSUdfU0VSSUFMXzgyNTBfREVURUNUX0lSUSBpcyBub3Qgc2V0 CisjIENPTkZJR19TRVJJQUxfODI1MF9SU0EgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUw IHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBu b3Qgc2V0CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNP TEU9eQorQ09ORklHX0NPTlNPTEVfUE9MTD15CisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5v dCBzZXQKKyMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdf VU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBu b3Qgc2V0CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CisjIENPTkZJR19IVkNf VURCRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorIyBD T05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQK KyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBz ZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBp cyBub3Qgc2V0CitDT05GSUdfREVWUE9SVD15CisKKyMKKyMgVk1FIEJyaWRnZSBkZXZpY2Vz CisjCitDT05GSUdfVk1FX0JSSURHRT15CisjIENPTkZJR19WTUVfQlJJREdFX0JPT1RNRU0g aXMgbm90IHNldAorQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05G SUdfSTJDX0NIQVJERVY9eQorIyBDT05GSUdfSTJDX0hFTFBFUl9BVVRPIGlzIG5vdCBzZXQK KworIworIyBJMkMgQWxnb3JpdGhtcworIworIyBDT05GSUdfSTJDX0FMR09CSVQgaXMgbm90 IHNldAorIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FM R09QQ0EgaXMgbm90IHNldAorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIwor CisjCisjIFBDIFNNQnVzIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCisjCisjIENPTkZJR19J MkNfQUxJMTUzNSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0 CisjIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1ENzU2 IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKKyMgQ09ORklH X0kyQ19JODAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JU0NIIGlzIG5vdCBzZXQKKyMg Q09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfTkZPUkNFMiBpcyBu b3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNf U0lTNjMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAorIyBD T05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBz ZXQKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBz eXN0ZW0tb24tY2hpcCkKKyMKK0NPTkZJR19JMkNfTVBDPXkKKyMgQ09ORklHX0kyQ19PQ09S RVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisKKyMKKyMg RXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BB UlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBz ZXQKKyMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mg YWRhcHRlciBJMkMvRERDIGNoYW5uZWwgZHJpdmVycworIworIyBDT05GSUdfSTJDX1ZPT0RP TzMgaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIwor IyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RV QiBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0Cisj CisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0 IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VO U09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBu b3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdf U0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlz IG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklH X0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMg bm90IHNldAorIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1dBTlRfT1BU SU9OQUxfR1BJT0xJQj15CisjIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKKyMgQ09ORklH X1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CitDT05G SUdfSFdNT049eQorIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NF TlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5v dCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CisjIENPTkZJR19T RU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlz IG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0CisjIENPTkZJ R19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE05MjQw IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ2MiBpcyBub3Qgc2V0CisjIENP TkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3 NDczIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3NSBpcyBub3Qgc2V0Cisj IENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRFMx NjIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0Cisj IENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19G NzE4ODJGRyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNl dAorIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNP UlNfR0w1MjBTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNl dAorIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNf TE03NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAorIyBD T05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MCBp cyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAorIyBDT05GSUdf U0VOU09SU19MTTg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qg c2V0CitDT05GSUdfU0VOU09SU19MTTkwPXkKKyMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBu b3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VO U09SU19MVEM0MjQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBu b3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAorIyBDT05GSUdf U0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBp cyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAorIyBDT05G SUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3 TTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQK KyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5T T1JTX0FEUzc4MjggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90 IHNldAorIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NF TlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5v dCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CisjIENPTkZJR19T RU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlz IG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKKyMgQ09ORklH X1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4 Nk5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAor IyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05f REVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMg Q09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAorQ09ORklHX1dBVENIRE9HPXkKKyMg Q09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKKworIworIyBXYXRjaGRvZyBE ZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0Cisj IENPTkZJR19BTElNNzEwMV9XRFQgaXMgbm90IHNldAorIyBDT05GSUdfQk9PS0VfV0RUIGlz IG5vdCBzZXQKK0NPTkZJR19NVk1FNDEwMF9XRFQ9eQorCisjCisjIFBDSS1iYXNlZCBXYXRj aGRvZyBDYXJkcworIworIyBDT05GSUdfUENJUENXQVRDSERPRyBpcyBub3Qgc2V0CisjIENP TkZJR19XRFRQQ0kgaXMgbm90IHNldAorCisjCisjIFVTQi1iYXNlZCBXYXRjaGRvZyBDYXJk cworIworIyBDT05GSUdfVVNCUENXQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BP U1NJQkxFPXkKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKKyMgQ09ORklH X1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwor IworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlz IG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfVFdM NDAzMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMg Q09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTg0MDAgaXMg bm90IHNldAorIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdf TUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0 CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBjb3Jl IHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19E VkJfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0CisK KyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCisjIENPTkZJR19EQUIgaXMgbm90IHNldAor CisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0FHUCBpcyBub3Qgc2V0Cisj IENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAor IyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorIyBDT05GSUdfRkIg aXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQK KworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NV UFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9y dAorIworQ09ORklHX1ZHQV9DT05TT0xFPXkKKyMgQ09ORklHX1ZHQUNPTl9TT0ZUX1NDUk9M TEJBQ0sgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorIyBDT05GSUdfU09V TkQgaXMgbm90IHNldAorQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9eQorIyBD T05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0 CisKKyMKKyMgVVNCIElucHV0IERldmljZXMKKyMKK0NPTkZJR19VU0JfSElEPXkKKyMgQ09O RklHX0hJRF9QSUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0 CisKKyMKKyMgU3BlY2lhbCBISUQgZHJpdmVycworIworIyBDT05GSUdfSElEX0NPTVBBVCBp cyBub3Qgc2V0CisjIENPTkZJR19ISURfQTRURUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJ RF9BUFBMRSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQkVMS0lOIGlzIG5vdCBzZXQKKyMg Q09ORklHX0hJRF9DSEVSUlkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0NISUNPTlkgaXMg bm90IHNldAorIyBDT05GSUdfSElEX0NZUFJFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSElE X0VaS0VZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9HWVJBVElPTiBpcyBub3Qgc2V0Cisj IENPTkZJR19ISURfTE9HSVRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfSElEX01JQ1JPU09G VCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfTU9OVEVSRVkgaXMgbm90IHNldAorIyBDT05G SUdfSElEX05UUklHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9QQU5USEVSTE9SRCBpcyBu b3Qgc2V0CisjIENPTkZJR19ISURfUEVUQUxZTlggaXMgbm90IHNldAorIyBDT05GSUdfSElE X1NBTVNVTkcgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NPTlkgaXMgbm90IHNldAorIyBD T05GSUdfSElEX1NVTlBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfR1JFRU5BU0lBX0ZGIGlz IG5vdCBzZXQKKyMgQ09ORklHX0hJRF9UT1BTRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RI UlVTVE1BU1RFUl9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19aRVJPUExVU19GRiBpcyBub3Qg c2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQor Q09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15 CitDT05GSUdfVVNCPXkKKyMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdf VVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTPXkKKworIworIyBNaXNjZWxsYW5lb3VzIFVTQiBv cHRpb25zCisjCitDT05GSUdfVVNCX0RFVklDRUZTPXkKK0NPTkZJR19VU0JfREVWSUNFX0NM QVNTPXkKKyMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJ R19VU0JfT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5v dCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CitDT05G SUdfVVNCX01PTj15CisjIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19V U0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERy aXZlcnMKKyMKKyMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19V U0JfRUhDSV9IQ0Q9eQorQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUPXkKKyMgQ09ORklH X1VTQl9FSENJX1RUX05FV1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FSENJX0ZT TCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRUhDSV9IQ0RfUFBDX09GIGlzIG5vdCBzZXQK KyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lT UDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qg c2V0CitDT05GSUdfVVNCX09IQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENf T0YgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5v dCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CitD T05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CisjIENPTkZJR19VU0JfVUhDSV9IQ0Qg aXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJ R19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XSENJX0hDRCBp cyBub3Qgc2V0CisjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CisKKyMKKyMgVVNC IERldmljZSBDbGFzcyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQK KyMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XRE0gaXMg bm90IHNldAorIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNC X1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5l ZWRlZDsKKyMKKworIworIyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1h dGlvbgorIworQ09ORklHX1VTQl9TVE9SQUdFPXkKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RF QlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNl dAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19V U0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNC QVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQK KyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0Jf U1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9BTEFV REEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNl dAorIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAorIyBDT05GSUdfVVNC X1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTElCVVNV QUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklH X1VTQl9NREM4MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBz ZXQKKworIworIyBVU0IgcG9ydCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfU0VSSUFMIGlz IG5vdCBzZXQKKworIworIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCisjCisjIENPTkZJ R19VU0JfRU1JNjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQK KyMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFVlNFRyBp cyBub3Qgc2V0CisjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VT Ql9MRUdPVE9XRVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0Cisj IENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUQg aXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKKyMg Q09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QSElER0VUIGlz IG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VT Ql9GVERJX0VMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBu b3Qgc2V0CisjIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VT Ql9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNl dAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVT VCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05G SUdfVVNCX1ZTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQK KworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKKyMgQ09ORklHX1VX QiBpcyBub3Qgc2V0CisjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJ Q0sgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdf QUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBz ZXQKKyMgQ09ORklHX0VEQUMgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklH X1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lT X0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMg UlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRD X0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKK0NPTkZJR19SVENfSU5URl9E RVZfVUlFX0VNVUw9eQorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIwor IyBJMkMgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBz ZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKK0NPTkZJR19SVENfRFJW X0RTMTM3NT15CisjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CisjIENPTkZJ R19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcy IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0CisjIENP TkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU2 MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAorIyBD T05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TMzUz OTBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKKyMg Q09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKKworIworIyBTUEkgUlRDIGRyaXZl cnMKKyMKKworIworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RS Vl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQK KyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZf RFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQK KyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RS Vl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNl dAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RS Vl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0 CisKKyMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX1BQQyBp cyBub3Qgc2V0CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJ TyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKKworIworIyBGaWxl IHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKK0NPTkZJR19FWFQyX0ZTX1hBVFRSPXkK KyMgQ09ORklHX0VYVDJfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJf RlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNl dAorQ09ORklHX0VYVDNfRlM9eQorQ09ORklHX0VYVDNfRlNfWEFUVFI9eQorIyBDT05GSUdf RVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GU19TRUNVUklU WSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQ9 eQorIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19GU19NQkNBQ0hFPXkK KyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBu b3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorQ09ORklHX0ZJTEVf TE9DS0lORz15CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJf RlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0RO T1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENP TkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAor IyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5v dCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfSVNPOTY2 MF9GUz15CitDT05GSUdfSk9MSUVUPXkKKyMgQ09ORklHX1pJU09GUyBpcyBub3Qgc2V0Cisj IENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3Rl bXMKKyMKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGQVRfRlMg aXMgbm90IHNldAorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRv IGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19LQ09SRT15 CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NP TkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNM IGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJ R19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15Cisj IENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNl dAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMg bm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMg aXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9G Uz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVG RkVSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKKyMgQ09O RklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIg aXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qg c2V0CitDT05GSUdfSkZGUzJfWkxJQj15CisjIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNl dAorQ09ORklHX0pGRlMyX1JUSU1FPXkKKyMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBz ZXQKK0NPTkZJR19ZQUZGU19GUz15CitDT05GSUdfWUFGRlNfWUFGRlMxPXkKKyMgQ09ORklH X1lBRkZTXzlCWVRFX1RBR1MgaXMgbm90IHNldAorQ09ORklHX1lBRkZTX0RPRVNfRUNDPXkK KyMgQ09ORklHX1lBRkZTX0VDQ19XUk9OR19PUkRFUiBpcyBub3Qgc2V0CitDT05GSUdfWUFG RlNfWUFGRlMyPXkKK0NPTkZJR19ZQUZGU19BVVRPX1lBRkZTMj15CisjIENPTkZJR19ZQUZG U19ESVNBQkxFX0xBWllfTE9BRCBpcyBub3Qgc2V0CisjIENPTkZJR19ZQUZGU19ESVNBQkxF X1dJREVfVE5PREVTIGlzIG5vdCBzZXQKK0NPTkZJR19ZQUZGU19BTFdBWVNfQ0hFQ0tfQ0hV TktfRVJBU0VEPXkKK0NPTkZJR19ZQUZGU19TSE9SVF9OQU1FU19JTl9SQU09eQorIyBDT05G SUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKKyMg Q09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNl dAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5v dCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19G UyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VG U19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdf TkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qg c2V0CisjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKK0NP TkZJR19ORlNEPXkKKyMgQ09ORklHX05GU0RfVjMgaXMgbm90IHNldAorIyBDT05GSUdfTkZT RF9WNCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NP TkZJR19FWFBPUlRGUz15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkK KyMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CisjIENPTkZJR19SUENT RUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBu b3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBu b3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBp cyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlv biBUeXBlcworIworQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19BQ09S Tl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qg c2V0CisjIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRB UklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90 IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisjIENPTkZJR19CU0RfRElTS0xBQkVM IGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0Cisj IENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVU5J WFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMg bm90IHNldAorIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19V TFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMg bm90IHNldAorIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklH X0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBp cyBub3Qgc2V0CitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0x IgorIyBDT05GSUdfTkxTX0NPREVQQUdFXzQzNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNf Q09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMg bm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0CisjIENPTkZJ R19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84 NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0Cisj IENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RF UEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qg c2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05M U19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBp cyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09O RklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdF XzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQK KyMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NP REVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5v dCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxT X0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEg aXMgbm90IHNldAorQ09ORklHX05MU19BU0NJST15CisjIENPTkZJR19OTFNfSVNPODg1OV8x IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAorIyBDT05G SUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV80IGlz IG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAorIyBDT05GSUdf TkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5v dCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAorIyBDT05GSUdfTkxT X0lTTzg4NTlfMTMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90 IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxT X0tPSThfUiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKKyMg Q09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisK KyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorQ09ORklH X0dFTkVSSUNfRklORF9MQVNUX0JJVD15CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNl dAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBu b3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkK KyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBz ZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CitDT05G SUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitD T05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQorCisjCisjIEtlcm5lbCBoYWNr aW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxF X1dBUk5fREVQUkVDQVRFRD15CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklH X0ZSQU1FX1dBUk49MTAyNAorQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1VOVVNF RF9TWU1CT0xTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19GUz15CisjIENPTkZJR19IRUFE RVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdf REVCVUdfU0hJUlEgaXMgbm90IHNldAorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKKyMg Q09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19C T09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCisjIENPTkZJR19TQ0hFRF9ERUJV RyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklH X1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90 IHNldAorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19S VF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMg bm90IHNldAorIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19E RUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5H X0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorQ09ORklHX1NUQUNLVFJBQ0U9eQorIyBDT05G SUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ISUdITUVNIGlz IG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorQ09ORklH X0RFQlVHX0lORk89eQorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdf REVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5J VCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklH X0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qg c2V0CisjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19S Q1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVU RUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfS1BST0JFU19TQU5JVFlfVEVTVCBpcyBub3Qg c2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklH X0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xLRFRNIGlzIG5v dCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19M QVRFTkNZVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlz IG5vdCBzZXQKK0NPTkZJR19OT1BfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RS QUNFUj15CitDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CitDT05GSUdfSEFWRV9GVFJB Q0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfUklOR19CVUZGRVI9eQorQ09ORklHX1RSQUNJ Tkc9eQorCisjCisjIFRyYWNlcnMKKyMKKyMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBu b3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19T Q0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VS IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklH X1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU1RBQ0tfVFJB Q0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZUUkFDRV9TVEFSVFVQX1RFU1QgaXMgbm90IHNl dAorIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdf U0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorQ09ORklHX0tH REI9eQorQ09ORklHX0tHREJfU0VSSUFMX0NPTlNPTEU9eQorIyBDT05GSUdfS0dEQl9URVNU UyBpcyBub3Qgc2V0CitDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKKyMgQ09ORklHX0RF QlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNB R0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKKyMg Q09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1QgaXMgbm90IHNldAorIyBDT05GSUdfRlRS X0ZJWFVQX1NFTEZURVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01TSV9CSVRNQVBfU0VMRlRF U1QgaXMgbm90IHNldAorIyBDT05GSUdfWE1PTiBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdH RVI9eQorIyBDT05GSUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKK0NPTkZJR19WSVJRX0RFQlVH PXkKK0NPTkZJR19CRElfU1dJVENIPXkKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBu b3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBu b3Qgc2V0CitDT05GSUdfU0VDVVJJVFk9eQorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qg c2V0CisjIENPTkZJR19TRUNVUklUWV9ORVRXT1JLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NF Q1VSSVRZX1BBVEggaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklM SVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfUk9PVFBMVUcgaXMgbm90IHNl dAorQ09ORklHX1NFQ1VSSVRZX0RFRkFVTFRfTU1BUF9NSU5fQUREUj0wCitDT05GSUdfWE9S X0JMT0NLUz15CitDT05GSUdfQVNZTkNfQ09SRT15CitDT05GSUdfQVNZTkNfTUVNQ1BZPXkK K0NPTkZJR19BU1lOQ19YT1I9eQorQ09ORklHX0NSWVBUTz15CisKKyMKKyMgQ3J5cHRvIGNv cmUgb3IgaGVscGVyCisjCisjIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CisjIENP TkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUFOQUdF UjIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMg Q09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQg aXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05G SUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlw dGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBu b3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBU T19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKKyMgQ09ORklHX0NS WVBUT19DQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0Cisj IENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19FQ0IgaXMg bm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQ VE9fUENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKwor IworIyBIYXNoIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Cisj IENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCisjIENP TkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMg bm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQ VE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBu b3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NS WVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qg c2V0CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9f U0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAor IyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1 MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKKyMgQ09ORklHX0NSWVBUT19BRVMg aXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJ R19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMg bm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklH X0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90 IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9f RkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAor IyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NF RUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBD T05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBp cyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKKyMgQ09ORklHX0NSWVBUT19ERUZM QVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorCisjCisj IFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BS TkcgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19IVz15CisjIENPTkZJR19DUllQVE9fREVW X0hJRk5fNzk1WCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVWX1RBTElUT1MgaXMg bm90IHNldAorIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJUlRV QUxJWkFUSU9OIGlzIG5vdCBzZXQKZGlmZiAtdSAtLW5ldy1maWxlIC0tcmVjdXJzaXZlIGxp bnV4LTIuNi4yOS42Lm9yaWcvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXZtZTcxMDBfZGVmY29u ZmlnIGxpbnV4LTIuNi4yOS42Lm1vZC9hcmNoL3Bvd2VycGMvY29uZmlncy9tdm1lNzEwMF9k ZWZjb25maWcKLS0tIGxpbnV4LTIuNi4yOS42Lm9yaWcvYXJjaC9wb3dlcnBjL2NvbmZpZ3Mv bXZtZTcxMDBfZGVmY29uZmlnCTE5NjktMTItMzEgMTc6MDA6MDAuMDAwMDAwMDAwIC0wNzAw CisrKyBsaW51eC0yLjYuMjkuNi5tb2QvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXZtZTcxMDBf ZGVmY29uZmlnCTIwMDktMDctMjEgMTE6Mjg6MTcuMDAwMDAwMDAwIC0wNzAwCkBAIC0wLDAg KzEsMTg2MyBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzog ZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LjQKKyMgTW9uIEp1 biAyMiAxMTozMjowMyAyMDA5CisjCisjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CisKKyMK KyMgUHJvY2Vzc29yIHN1cHBvcnQKKyMKK0NPTkZJR182eHg9eQorIyBDT05GSUdfUFBDXzg1 eHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0CisjIENPTkZJR180 MHggaXMgbm90IHNldAorIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0UyMDAg aXMgbm90IHNldAorQ09ORklHX1BQQ19GUFU9eQorIyBDT05GSUdfUEhZU182NEJJVCBpcyBu b3Qgc2V0CitDT05GSUdfQUxUSVZFQz15CitDT05GSUdfUFBDX1NURF9NTVU9eQorQ09ORklH X1BQQ19TVERfTU1VXzMyPXkKKyMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAor Q09ORklHX1NNUD15CitDT05GSUdfTlJfQ1BVUz0yCitDT05GSUdfUFBDMzI9eQorQ09ORklH X1dPUkRfU0laRT0zMgorIyBDT05GSUdfQVJDSF9QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qg c2V0CitDT05GSUdfTU1VPXkKK0NPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKK0NPTkZJ R19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CitDT05G SUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15Cisj IENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CitDT05GSUdfSVJR X1BFUl9DUFU9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfSEFWRV9M QVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdf UldTRU1fWENIR0FERF9BTEdPUklUSE09eQorQ09ORklHX0dFTkVSSUNfTE9DS0JSRUFLPXkK K0NPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15 CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfRklO RF9ORVhUX0JJVD15CisjIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQK K0NPTkZJR19QUEM9eQorQ09ORklHX0VBUkxZX1BSSU5USz15CitDT05GSUdfR0VORVJJQ19O VlJBTT15CitDT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19BUkNI X01BWV9IQVZFX1BDX0ZEQz15CitDT05GSUdfUFBDX09GPXkKK0NPTkZJR19PRj15CitDT05G SUdfUFBDX1VEQkdfMTY1NTA9eQorQ09ORklHX0dFTkVSSUNfVEJTWU5DPXkKK0NPTkZJR19B VURJVF9BUkNIPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CisjIENPTkZJR19ERUZBVUxUX1VJ TUFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0Cisj IENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAorQ09ORklHX0RFRkNPTkZJR19MSVNU PSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBHZW5lcmFs IHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19MT0NLX0tFUk5FTD15 CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIi CitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZ U1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKK0NPTkZJR19QT1NJWF9NUVVFVUU9 eQorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQorIyBDT05GSUdfQlNEX1BST0NFU1NfQUND VF9WMyBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05G SUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19D TEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19Q UkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qg c2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfSUtD T05GSUc9eQorQ09ORklHX0lLQ09ORklHX1BST0M9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9 MTQKK0NPTkZJR19HUk9VUF9TQ0hFRD15CitDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15CitD T05GSUdfUlRfR1JPVVBfU0NIRUQ9eQorQ09ORklHX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdf Q0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19DR1JPVVBTPXkKKyMgQ09ORklHX0NH Uk9VUF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBfTlMgaXMgbm90IHNldAor IyBDT05GSUdfQ0dST1VQX0ZSRUVaRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQX0RF VklDRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVTRVRTIGlzIG5vdCBzZXQKKyMgQ09ORklH X0NHUk9VUF9DUFVBQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFU09VUkNFX0NPVU5URVJT IGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19E RVBSRUNBVEVEX1YyPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05B TUVTUEFDRVMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19J TklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBu b3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdf RU1CRURERUQ9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKK0NPTkZJR19LQUxMU1lNUz15 CitDT05GSUdfS0FMTFNZTVNfQUxMPXkKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1Mg aXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdf QlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19G VVRFWD15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1F UkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkK K0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfUENJX1FVSVJLUz15CitDT05G SUdfU0xVQl9ERUJVRz15CitDT05GSUdfQ09NUEFUX0JSSz15CisjIENPTkZJR19TTEFCIGlz IG5vdCBzZXQKK0NPTkZJR19TTFVCPXkKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorQ09O RklHX1BST0ZJTElORz15CitDT05GSUdfVFJBQ0VQT0lOVFM9eQorQ09ORklHX01BUktFUlM9 eQorQ09ORklHX09QUk9GSUxFPXkKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKK0NPTkZJR19L UFJPQkVTPXkKK0NPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKK0NP TkZJR19LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CitDT05GSUdf SEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVf QVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTPXkKKyMg Q09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAorQ09ORklHX1NM QUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NP TkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQK K0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQg aXMgbm90IHNldAorQ09ORklHX01PRFZFUlNJT05TPXkKK0NPTkZJR19NT0RVTEVfU1JDVkVS U0lPTl9BTEw9eQorQ09ORklHX1NUT1BfTUFDSElORT15CitDT05GSUdfQkxPQ0s9eQorIyBD T05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90 IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RF Vl9JTlRFR1JJVFkgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJ R19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURf REVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfQVMg aXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CitDT05G SUdfREVGQVVMVF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NP TkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNl dAorCisjCisjIFBsYXRmb3JtIHN1cHBvcnQKKyMKK0NPTkZJR19QUENfTVVMVElQTEFURk9S TT15CitDT05GSUdfQ0xBU1NJQzMyPXkKKyMgQ09ORklHX1BQQ19DSFJQIGlzIG5vdCBzZXQK KyMgQ09ORklHX01QQzUxMjFfQURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzUxMjFfR0VO RVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0CisjIENP TkZJR19QUENfUE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0 CisjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzgy eHggaXMgbm90IHNldAorIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQ Q184M3h4IGlzIG5vdCBzZXQKK0NPTkZJR19QUENfODZ4eD15CisjIENPTkZJR19NUEM4NjQx X0hQQ04gaXMgbm90IHNldAorIyBDT05GSUdfU0JDODY0MUQgaXMgbm90IHNldAorIyBDT05G SUdfTVBDODYxMF9IUENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFRl9TQkM2MTAgaXMgbm90 IHNldAorQ09ORklHX01WTUU3MTAwPXkKK0NPTkZJR19NUEM4NjQxPXkKK0NPTkZJR19NVk1F NzEwMF9FTkFCTEVfRERSX0VSUk9SUz15CitDT05GSUdfTVZNRTcxMDBfRU5BQkxFX0wyX0VS Uk9SUz15CitDT05GSUdfTVZNRTcxMDBfRU5BQkxFX1BDSV9FUlJPUlM9eQorQ09ORklHX01W TUU3MTAwX1RJQ0tfVElNRVJTPXkKKyMgQ09ORklHX0lQSUMgaXMgbm90IHNldAorQ09ORklH X01QSUM9eQorIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENf STgyNTkgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAorIyBDT05G SUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBz ZXQKKyMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JTkRJ UkVDVF9JTyBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQK KyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBVSBpcyBub3Qgc2V0 CisjIENPTkZJR19RVUlDQ19FTkdJTkUgaXMgbm90IHNldAorIyBDT05GSUdfRlNMX1VMSTE1 NzUgaXMgbm90IHNldAorIyBDT05GSUdfTVBDOHh4eF9HUElPIGlzIG5vdCBzZXQKKyMgQ09O RklHX1NJTVBMRV9HUElPIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgb3B0aW9ucworIwor Q09ORklHX0hJR0hNRU09eQorQ09ORklHX1RJQ0tfT05FU0hPVD15CitDT05GSUdfTk9fSFo9 eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5U U19CVUlMRD15CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjUw IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMTAw MD15CitDT05GSUdfSFo9MTAwMAorQ09ORklHX1NDSEVEX0hSVElDSz15CisjIENPTkZJR19Q UkVFTVBUX05PTkUgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMg bm90IHNldAorQ09ORklHX1BSRUVNUFQ9eQorQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05G SUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorIyBDT05GSUdf SEFWRV9BT1VUIGlzIG5vdCBzZXQKK0NPTkZJR19CSU5GTVRfTUlTQz15CisjIENPTkZJR19J T01NVV9IRUxQRVIgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQ TFVHPXkKK0NPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CitDT05GSUdfQVJDSF9FTkFC TEVfTUVNT1JZX0hPVFJFTU9WRT15CisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CisjIENP TkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUV9BTExfQ1BVUyBpcyBu b3Qgc2V0CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9QT1BV TEFURVNfTk9ERV9NQVA9eQorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklH X0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90 IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxB VE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorQ09ORklHX1BBR0VGTEFHU19F WFRFTkRFRD15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfTUlHUkFU SU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQK K0NPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19CT1VOQ0U9eQorQ09ORklHX1ZJUlRf VE9fQlVTPXkKK0NPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQorQ09ORklHX1BQQ180S19QQUdF Uz15CisjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ182 NEtfUEFHRVMgaXMgbm90IHNldAorQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTEKK0NP TkZJR19QUk9DX0RFVklDRVRSRUU9eQorQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdf Q01ETElORT0iY29uc29sZT10dHlTMCw5NjAwIHJvb3Q9L2Rldi9yYW0wIHJhbWRpc2tfc2l6 ZT02NDAwMCIKK0NPTkZJR19FWFRSQV9UQVJHRVRTPSIiCisjIENPTkZJR19QTSBpcyBub3Qg c2V0CitDT05GSUdfU0VDQ09NUD15CitDT05GSUdfSVNBX0RNQV9BUEk9eQorCisjCisjIEJ1 cyBvcHRpb25zCisjCitDT05GSUdfWk9ORV9ETUE9eQorQ09ORklHX0dFTkVSSUNfSVNBX0RN QT15CitDT05GSUdfUFBDX0lORElSRUNUX1BDST15CitDT05GSUdfRlNMX1NPQz15CitDT05G SUdfRlNMX1BDST15CitDT05GSUdfUFBDX1BDSV9DSE9JQ0U9eQorQ09ORklHX1BDST15CitD T05GSUdfUENJX0RPTUFJTlM9eQorQ09ORklHX1BDSV9TWVNDQUxMPXkKK0NPTkZJR19QQ0lF UE9SVEJVUz15CitDT05GSUdfUENJRUFFUj15CisjIENPTkZJR19QQ0lFQVNQTSBpcyBub3Qg c2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQorIyBDT05GSUdfUENJX01TSSBpcyBu b3Qgc2V0CitDT05GSUdfUENJX0xFR0FDWT15CisjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90 IHNldAorIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlz IG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hB U19SQVBJRElPIGlzIG5vdCBzZXQKKworIworIyBBZHZhbmNlZCBzZXR1cAorIworQ09ORklH X0FEVkFOQ0VEX09QVElPTlM9eQorQ09ORklHX0xPV01FTV9TSVpFX0JPT0w9eQorQ09ORklH X0xPV01FTV9TSVpFPTB4NDAwMDAwMDAKK0NPTkZJR19QQUdFX09GRlNFVF9CT09MPXkKK0NP TkZJR19QQUdFX09GRlNFVD0weDgwMDAwMDAwCitDT05GSUdfS0VSTkVMX1NUQVJUX0JPT0w9 eQorQ09ORklHX0tFUk5FTF9TVEFSVD0weDgwMDAwMDAwCitDT05GSUdfUEhZU0lDQUxfU1RB UlQ9MHgwMDAwMDAwMAorQ09ORklHX1RBU0tfU0laRV9CT09MPXkKK0NPTkZJR19UQVNLX1NJ WkU9MHg4MDAwMDAwMAorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25z CisjCitDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKK0NPTkZJR19QQUNLRVQ9eQorQ09O RklHX1BBQ0tFVF9NTUFQPXkKK0NPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKK0NPTkZJ R19YRlJNX1VTRVI9eQorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKKyMg Q09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJ Q1MgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5F VD15CitDT05GSUdfSVBfTVVMVElDQVNUPXkKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRF UiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX1BOUD15CitD T05GSUdfSVBfUE5QX0RIQ1A9eQorQ09ORklHX0lQX1BOUF9CT09UUD15CitDT05GSUdfSVBf UE5QX1JBUlA9eQorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVU X0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0CisjIENP TkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQK KyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90 IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9Y RlJNX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9UVU5ORUw9eQorQ09ORklHX0lO RVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVM PXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKKyMgQ09ORklHX0lORVRfTFJPIGlz IG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQor IyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05H X0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RD UF9NRDVTSUcgaXMgbm90IHNldAorQ09ORklHX0lQVjY9eQorIyBDT05GSUdfSVBWNl9QUklW QUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfUk9VVEVSX1BSRUYgaXMgbm90IHNldAor IyBDT05GSUdfSVBWNl9PUFRJTUlTVElDX0RBRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVU Nl9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9FU1AgaXMgbm90IHNldAorIyBDT05G SUdfSU5FVDZfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfTUlQNiBpcyBub3Qg c2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19J TkVUNl9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UUkFOU1BP UlQ9eQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVQ2X1hG Uk1fTU9ERV9CRUVUPXkKKyMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9ST1VURU9QVElNSVpB VElPTiBpcyBub3Qgc2V0CitDT05GSUdfSVBWNl9TSVQ9eQorQ09ORklHX0lQVjZfTkRJU0Nf Tk9ERVRZUEU9eQorIyBDT05GSUdfSVBWNl9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdf SVBWNl9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9NUk9VVEUg aXMgbm90IHNldAorIyBDT05GSUdfTkVUTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTkVU V09SS19TRUNNQVJLIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVI9eQorIyBDT05GSUdf TkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfQURWQU5DRUQ9 eQorCisjCisjIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX05F VEZJTFRFUl9ORVRMSU5LX1FVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9O RVRMSU5LX0xPRyBpcyBub3Qgc2V0CisjIENPTkZJR19ORl9DT05OVFJBQ0sgaXMgbm90IHNl dAorIyBDT05GSUdfTkVURklMVEVSX1hUQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBf VlMgaXMgbm90IHNldAorCisjCisjIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIwor IyBDT05GSUdfTkZfREVGUkFHX0lQVjQgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfUVVF VUUgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfSVBUQUJMRVMgaXMgbm90IHNldAorIyBD T05GSUdfSVBfTkZfQVJQVEFCTEVTIGlzIG5vdCBzZXQKKworIworIyBJUHY2OiBOZXRmaWx0 ZXIgQ29uZmlndXJhdGlvbgorIworIyBDT05GSUdfSVA2X05GX1FVRVVFIGlzIG5vdCBzZXQK KyMgQ09ORklHX0lQNl9ORl9JUFRBQkxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQ IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQ QyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdF IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAorIyBDT05GSUdfVkxB Tl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05G SUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdf QVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xB UEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dB Tl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMg Q09ORklHX0RDQiBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENP TkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9UQ1BQUk9CRSBpcyBu b3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMg bm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qg c2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMg bm90IHNldAorIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVgg aXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85 UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmlj IERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9o b3RwbHVnIgorQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVf QlVJTEQ9eQorIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVH X0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAor IyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9S IGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBz ZXQKK0NPTkZJR19NVERfQ09OQ0FUPXkKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENP TkZJR19NVERfVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMg aXMgbm90IHNldAorQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKKyMgQ09ORklHX01URF9P Rl9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQK KworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklH X01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CitDT05GSUdfTVREX0JMT0NLPXkK KyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMg Q09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAor Q09ORklHX1NTRkRDPXkKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBS QU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorQ09ORklH X01URF9KRURFQ1BST0JFPXkKK0NPTkZJR19NVERfR0VOX1BST0JFPXkKK0NPTkZJR19NVERf Q0ZJX0FEVl9PUFRJT05TPXkKK0NPTkZJR19NVERfQ0ZJX05PU1dBUD15CisjIENPTkZJR19N VERfQ0ZJX0JFX0JZVEVfU1dBUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0xFX0JZ VEVfU1dBUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9HRU9NRVRSWT15CitDT05GSUdf TVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkK K0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktf V0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMg bm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NP TkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9D RklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENP TkZJR19NVERfT1RQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKK0NP TkZJR19NVERfQ0ZJX0FNRFNURD15CitDT05GSUdfTVREX0NGSV9TVEFBPXkKK0NPTkZJR19N VERfQ0ZJX1VUSUw9eQorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CitDT05GSUdfTVRE X1JPTT15CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5n IGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCitDT05GSUdfTVREX0NPTVBMRVhfTUFQUElO R1M9eQorIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BI WVNNQVBfT0YgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BDSSBpcyBub3Qgc2V0CisjIENP TkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QTEFUUkFN IGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTVZNRTcxMDA9eQorCisjCisjIFNlbGYtY29udGFp bmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qg c2V0CisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFN IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdf TVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBE cml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19N VERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90 IHNldAorQ09ORklHX01URF9OQU5EPXkKK0NPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEU9 eQorQ09ORklHX01URF9OQU5EX0VDQ19TTUM9eQorIyBDT05GSUdfTVREX05BTkRfTVVTRVVN X0lEUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfTVZNRTcxMDA9eQorQ09ORklHX01U RF9OQU5EX0lEUz15CisjIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQIGlzIG5vdCBzZXQK KyMgQ09ORklHX01URF9OQU5EX0NBRkUgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRf TkFORFNJTSBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfUExBVEZPUk09eQorIyBDT05G SUdfTVREX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9GU0xfRUxCQyBp cyBub3Qgc2V0CisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgTFBE RFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qg c2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19N VERfVUJJIGlzIG5vdCBzZXQKK0NPTkZJR19PRl9ERVZJQ0U9eQorQ09ORklHX09GX0kyQz15 CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09O RklHX0JMS19ERVZfRkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qg c2V0CisjIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxL X0RFVl9EQUM5NjAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBz ZXQKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxL X0RFVl9MT09QPXkKKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CitD T05GSUdfQkxLX0RFVl9OQkQ9eQorIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAor IyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQor Q09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0x MzEwNzIKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9N X1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQK KyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorQ09ORklHX01JU0NfREVWSUNFUz15 CisjIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JT0M0IGlzIG5v dCBzZXQKKyMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JQ1M5MzJT NDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0 CisjIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAorIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBz ZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIworIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMg bm90IHNldAorQ09ORklHX0VFUFJPTV9MRUdBQ1k9eQorIyBDT05GSUdfRUVQUk9NXzkzQ1g2 IGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CitDT05GSUdfSURFPXkKKworIworIyBQ bGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJ REUgZHJpdmVzCisjCisjIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKK0NP TkZJR19JREVfR0Q9eQorQ09ORklHX0lERV9HRF9BVEE9eQorIyBDT05GSUdfSURFX0dEX0FU QVBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFQ0QgaXMgbm90IHNldAorIyBD T05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERV9UQVNLX0lP Q1RMIGlzIG5vdCBzZXQKK0NPTkZJR19JREVfUFJPQ19GUz15CisKKyMKKyMgSURFIGNoaXBz ZXQgc3VwcG9ydC9idWdmaXhlcworIworIyBDT05GSUdfQkxLX0RFVl9QTEFURk9STSBpcyBu b3Qgc2V0CisKKyMKKyMgUENJIElERSBjaGlwc2V0cyBzdXBwb3J0CisjCisjIENPTkZJR19C TEtfREVWX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9PUFRJNjIxIGlz IG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQUVDNjJYWCBpcyBub3Qgc2V0CisjIENPTkZJ R19CTEtfREVWX0FMSTE1WDMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9BTUQ3NFhY IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ01ENjRYIGlzIG5vdCBzZXQKKyMgQ09O RklHX0JMS19ERVZfVFJJRkxFWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NTNTUy MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NTNTUzMCBpcyBub3Qgc2V0CisjIENP TkZJR19CTEtfREVWX0hQVDM2NiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0pNSUNS T04gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TQzEyMDAgaXMgbm90IHNldAorIyBD T05GSUdfQkxLX0RFVl9QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSVQ4MTcy IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSVQ4MjEzIGlzIG5vdCBzZXQKKyMgQ09O RklHX0JMS19ERVZfSVQ4MjFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTlM4NzQx NSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX09MRCBpcyBub3Qgc2V0 CisjIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX05FVyBpcyBub3Qgc2V0CisjIENPTkZJR19C TEtfREVWX1NWV0tTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU0lJTUFHRSBpcyBu b3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NMODJDMTA1IGlzIG5vdCBzZXQKKyMgQ09ORklH X0JMS19ERVZfU0xDOTBFNjYgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9UUk0yOTAg aXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9WSUE4MkNYWFggaXMgbm90IHNldAorIyBD T05GSUdfQkxLX0RFVl9UQzg2QzAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lE RURNQSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05G SUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9E TUE9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRM SU5LIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3Vw cG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15 CisjIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfT1NT VCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9TUj15CitDT05GSUdfQkxLX0RFVl9TUl9W RU5ET1I9eQorQ09ORklHX0NIUl9ERVZfU0c9eQorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMg bm90IHNldAorCisjCisjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1 cHBvcnQgbXVsdGlwbGUgTFVOcworIworIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90 IHNldAorIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NT SV9MT0dHSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1NDQU5fQVNZTkM9eQorIyBDT05G SUdfU0NTSV9XQUlUX1NDQU4gaXMgbm90IHNldAorCisjCisjIFNDU0kgVHJhbnNwb3J0cwor IworQ09ORklHX1NDU0lfU1BJX0FUVFJTPXkKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMg bm90IHNldAorIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJ R19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMg aXMgbm90IHNldAorQ09ORklHX1NDU0lfTE9XTEVWRUw9eQorIyBDT05GSUdfSVNDU0lfVENQ IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQK KyMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FDQVJE IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJ R19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBp cyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAorIyBDT05GSUdf U0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRFBUX0kyTyBpcyBub3Qg c2V0CisjIENPTkZJR19TQ1NJX0FEVkFOU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lf QVJDTVNSIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0 CisjIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJB SURfU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKKyMg Q09ORklHX1NDU0lfQlVTTE9HSUMgaXMgbm90IHNldAorIyBDT05GSUdfTElCRkMgaXMgbm90 IHNldAorIyBDT05GSUdfRkNPRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNWDMxOTFE IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRUFUQSBpcyBub3Qgc2V0CisjIENPTkZJR19T Q1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9HRFRIIGlzIG5v dCBzZXQKKyMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSU5J VElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0CisjIENP TkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qg c2V0CitDT05GSUdfU0NTSV9TWU01M0M4WFhfMj15CitDT05GSUdfU0NTSV9TWU01M0M4WFhf RE1BX0FERFJFU1NJTkdfTU9ERT0xCitDT05GSUdfU0NTSV9TWU01M0M4WFhfREVGQVVMVF9U QUdTPTE2CitDT05GSUdfU0NTSV9TWU01M0M4WFhfTUFYX1RBR1M9NjQKK0NPTkZJR19TQ1NJ X1NZTTUzQzhYWF9NTUlPPXkKKyMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKKyMgQ09O RklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfRkMg aXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfSVNDU0kgaXMgbm90IHNldAorIyBDT05G SUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBz ZXQKKyMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTlNQ MzIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJ R19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKK0NP TkZJR19BVEE9eQorIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKyMgQ09O RklHX1NBVEFfUE1QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0 CisjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfRlNMIGlz IG5vdCBzZXQKK0NPTkZJR19BVEFfU0ZGPXkKKyMgQ09ORklHX1NBVEFfU1ZXIGlzIG5vdCBz ZXQKKyMgQ09ORklHX0FUQV9QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfTVYgaXMg bm90IHNldAorIyBDT05GSUdfU0FUQV9OViBpcyBub3Qgc2V0CisjIENPTkZJR19QRENfQURN QSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1FTVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklH X1NBVEFfUFJPTUlTRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1NYNCBpcyBub3Qgc2V0 CisjIENPTkZJR19TQVRBX1NJTCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1NJUyBpcyBu b3Qgc2V0CisjIENPTkZJR19TQVRBX1VMSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1ZJ QSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1ZJVEVTU0UgaXMgbm90IHNldAorIyBDT05G SUdfU0FUQV9JTklDMTYyWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FMSSBpcyBub3Qg c2V0CisjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FSVE9Q IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKKyMgQ09ORklH X1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBu b3Qgc2V0CisjIENPTkZJR19QQVRBX0NTNTUyMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRB X0NTNTUzMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NZUFJFU1MgaXMgbm90IHNldAor IyBDT05GSUdfUEFUQV9FRkFSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9HRU5FUklDIGlz IG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUMzY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BB VEFfSFBUMzdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUM1gyTiBpcyBub3Qgc2V0 CisjIENPTkZJR19QQVRBX0hQVDNYMyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0lUODIx WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0lUODIxMyBpcyBub3Qgc2V0CisjIENPTkZJ R19QQVRBX0pNSUNST04gaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9UUklGTEVYIGlzIG5v dCBzZXQKKyMgQ09ORklHX1BBVEFfTUFSVkVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRB X01QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT0xEUElJWCBpcyBub3Qgc2V0Cisj IENPTkZJR19QQVRBX05FVENFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9OSU5KQTMy IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTlM4NzQxMCBpcyBub3Qgc2V0CisjIENPTkZJ R19QQVRBX05TODc0MTUgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9PUFRJIGlzIG5vdCBz ZXQKKyMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BE Q19PTEQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMg Q09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0MxMjAwIGlz IG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldAorQ09ORklH X1BBVEFfUERDMjAyN1g9eQorIyBDT05GSUdfUEFUQV9TSUw2ODAgaXMgbm90IHNldAorIyBD T05GSUdfUEFUQV9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9WSUEgaXMgbm90IHNl dAorIyBDT05GSUdfUEFUQV9XSU5CT05EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUExB VEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TQ0ggaXMgbm90IHNldAorQ09ORklH X01EPXkKK0NPTkZJR19CTEtfREVWX01EPXkKKyMgQ09ORklHX01EX0FVVE9ERVRFQ1QgaXMg bm90IHNldAorQ09ORklHX01EX0xJTkVBUj15CitDT05GSUdfTURfUkFJRDA9eQorQ09ORklH X01EX1JBSUQxPXkKKyMgQ09ORklHX01EX1JBSUQxMCBpcyBub3Qgc2V0CitDT05GSUdfTURf UkFJRDQ1Nj15CitDT05GSUdfTURfUkFJRDVfUkVTSEFQRT15CitDT05GSUdfTURfTVVMVElQ QVRIPXkKKyMgQ09ORklHX01EX0ZBVUxUWSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9E TT15CisjIENPTkZJR19ETV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ETV9DUllQVCBp cyBub3Qgc2V0CitDT05GSUdfRE1fU05BUFNIT1Q9eQorQ09ORklHX0RNX01JUlJPUj15CitD T05GSUdfRE1fWkVSTz15CitDT05GSUdfRE1fTVVMVElQQVRIPXkKKyMgQ09ORklHX0RNX0RF TEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNX1VFVkVOVCBpcyBub3Qgc2V0CisjIENPTkZJ R19GVVNJT04gaXMgbm90IHNldAorCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBv cnQKKyMKKworIworIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVz cyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKKyMKKyMgQ09ORklHX0ZJUkVXSVJFIGlz IG5vdCBzZXQKKyMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyTyBp cyBub3Qgc2V0CisjIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CitDT05G SUdfTkVUREVWSUNFUz15CitDT05GSUdfRFVNTVk9eQorIyBDT05GSUdfQk9ORElORyBpcyBu b3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpF UiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfVkVUSCBp cyBub3Qgc2V0CisjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAorQ09ORklHX1BIWUxJQj15 CisKKyMKKyMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUFSVkVMTF9Q SFkgaXMgbm90IHNldAorIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAorIyBDT05G SUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAor IyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19WSVRFU1NFX1BIWSBp cyBub3Qgc2V0CisjIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0CitDT05GSUdfQlJPQURD T01fUEhZPXkKKyMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUkVB TFRFS19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQK KyMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAorIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZ IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19N RElPX0JJVEJBTkcgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdf TUlJPXkKKyMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5HRU0g aXMgbm90IHNldAorIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRf VkVORE9SXzNDT00gaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CisjIENP TkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAorIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAor IyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05F V19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMg bm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09O RklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJN X05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9O RVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1BDST15Cisj IENPTkZJR19QQ05FVDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNRDgxMTFfRVRIIGlzIG5v dCBzZXQKKyMgQ09ORklHX0FEQVBURUNfU1RBUkZJUkUgaXMgbm90IHNldAorIyBDT05GSUdf QjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPUkNFREVUSCBpcyBub3Qgc2V0CisjIENPTkZJ R19FMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQUxOWCBpcyBub3Qgc2V0CisjIENPTkZJ R19OQVRTRU1JIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FMktfUENJIGlzIG5vdCBzZXQKKyMg Q09ORklHXzgxMzlDUCBpcyBub3Qgc2V0CisjIENPTkZJR184MTM5VE9PIGlzIG5vdCBzZXQK KyMgQ09ORklHX1I2MDQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJUzkwMCBpcyBub3Qgc2V0 CisjIENPTkZJR19FUElDMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5NDIwIGlzIG5v dCBzZXQKKyMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RMQU4gaXMg bm90IHNldAorIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDOTIw MzEgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVW XzEwMDA9eQorIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMMksgaXMg bm90IHNldAorQ09ORklHX0UxMDAwPXkKK0NPTkZJR19FMTAwMEU9eQorIyBDT05GSUdfSVAx MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lHQiBpcyBub3Qgc2V0CisjIENPTkZJR19OUzgz ODIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAorIyBDT05GSUdf WUVMTE9XRklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKKyMgQ09O RklHX1NJUzE5MCBpcyBub3Qgc2V0CisjIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKKyMgQ09O RklHX1NLWTIgaXMgbm90IHNldAorIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQK KyMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQK K0NPTkZJR19HSUFORkFSPXkKKyMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKKyMg Q09ORklHX1FMQTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0Cisj IENPTkZJR19BVEwxRSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxQyBpcyBub3Qgc2V0Cisj IENPTkZJR19KTUUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBz ZXQKKyMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMg Q09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBp cyBub3Qgc2V0CisjIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorCisjCisjIEVu YWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZl cnMKKyMKKworIworIyBVU0IgTmV0d29yayBBZGFwdGVycworIworIyBDT05GSUdfVVNCX0NB VEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJ R19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qg c2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTiBpcyBu b3Qgc2V0CisjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJUFBJIGlzIG5v dCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBz ZXQKKyMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlz IG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BP TExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMg Q09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAor IworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNl dAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQg aW50ZXJmYWNlcworIworIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAorIyBD T05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlz IG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1 dCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNl dAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9Z U1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKKyMg Q09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01J U0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdf U0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisj IENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJB TlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkK KyMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19E RVZLTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qg c2V0CisjIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJz CisjCitDT05GSUdfU0VSSUFMXzgyNTA9eQorQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9 eQorIyBDT05GSUdfU0VSSUFMXzgyNTBfUENJIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxf ODI1MF9OUl9VQVJUUz01CitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz01CitD T05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQorQ09ORklHX1NFUklBTF84MjUwX01BTllf UE9SVFM9eQorQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15CisjIENPTkZJR19TRVJJ QUxfODI1MF9ERVRFQ1RfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF84MjUwX1JT QSBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIwor IyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfQ09S RT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfQ09OU09MRV9QT0xM PXkKKyMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX09G X1BMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19E RVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFR0FDWV9Q VFlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hWQ19VREJHIGlzIG5vdCBzZXQKKyMgQ09ORklH X0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNl dAorIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNl dAorIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBp cyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZQT1JU PXkKKworIworIyBWTUUgQnJpZGdlIGRldmljZXMKKyMKK0NPTkZJR19WTUVfQlJJREdFPXkK KyMgQ09ORklHX1ZNRV9CUklER0VfQk9PVE1FTSBpcyBub3Qgc2V0CitDT05GSUdfSTJDPXkK K0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CisjIENPTkZJ R19JMkNfSEVMUEVSX0FVVE8gaXMgbm90IHNldAorCisjCisjIEkyQyBBbGdvcml0aG1zCisj CisjIENPTkZJR19JMkNfQUxHT0JJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxHT1BD RiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0CisKKyMKKyMg STJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisKKyMKKyMgUEMgU01CdXMgaG9zdCBjb250 cm9sbGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKKyMg Q09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNVgzIGlz IG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAorIyBDT05GSUdfSTJD X0FNRDgxMTEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAorIyBD T05GSUdfSTJDX0lTQ0ggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBz ZXQKKyMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM1 NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAorIyBDT05G SUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQK KyMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAorCisjCisjIEkyQyBzeXN0ZW0gYnVz IGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQorIworQ09ORklH X0kyQ19NUEM9eQorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19J MkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRl ciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Cisj IENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RJTllfVVNC IGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBhZGFwdGVyIEkyQy9EREMgY2hhbm5lbCBk cml2ZXJzCisjCisjIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0CisKKyMKKyMgT3Ro ZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUENBX1BMQVRGT1JN IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKworIworIyBNaXNj ZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qg c2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAorIyBDT05GSUdfUENG ODU3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAor IyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNf TUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNl dAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RF QlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0 CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEkgaXMg bm90IHNldAorQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKKyMgQ09ORklH X0dQSU9MSUIgaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdf UE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKK0NPTkZJR19IV01PTj15CisjIENPTkZJR19IV01P Tl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAor IyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19B RE0xMDIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0 CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09S U19BRE0xMDI5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qg c2V0CisjIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAorIyBDT05GSUdfU0VO U09SU19BRFQ3NDYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBu b3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzMgaXMgbm90IHNldAorIyBDT05GSUdf U0VOU09SU19BRFQ3NDc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMg bm90IHNldAorIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAorIyBDT05GSUdf U0VOU09SU19JNUtfQU1CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBp cyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKKyMgQ09O RklHX1NFTlNPUlNfRjc1Mzc1UyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTE4 U00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKKyMg Q09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNjMg aXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKKyMgQ09ORklH X1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90 IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNP UlNfTE04MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAor IyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKK0NPTkZJR19TRU5TT1JTX0xNOTA9 eQorIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNf TE05MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xUQzQyNDUgaXMgbm90IHNldAor IyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNf TUFYNjY1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNl dAorIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNP UlNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90 IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CisjIENPTkZJR19T RU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdC Mzk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0Cisj IENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZJ QTY4NkEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAor IyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19X ODM3ODFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0 CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09S U19XODM3OTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90 IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAorIyBDT05GSUdf U0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VI RiBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMg Q09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBu b3Qgc2V0CitDT05GSUdfV0FUQ0hET0c9eQorIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQg aXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJ R19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FMSU03MTAxX1dEVCBpcyBu b3Qgc2V0CisjIENPTkZJR184eHh4X1dEVCBpcyBub3Qgc2V0CitDT05GSUdfTVZNRTcxMDBf V0RUPXkKKworIworIyBQQ0ktYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1BD SVBDV0FUQ0hET0cgaXMgbm90IHNldAorIyBDT05GSUdfV0RUUENJIGlzIG5vdCBzZXQKKwor IworIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1VTQlBDV0FUQ0hE T0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNp bGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11 bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5v dCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFT SUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CisjIENP TkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qg c2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgz NTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0Cisj IENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZGV2aWNl cworIworCisjCisjIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0CisjCisjIENPTkZJR19WSURF T19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorIyBDT05G SUdfVklERU9fTUVESUEgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZHJpdmVycwor IworIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0Cisj CisjIENPTkZJR19BR1AgaXMgbm90IHNldAorIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMg Q09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05U Uk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tM SUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3Vw cG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBD b25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKK0NPTkZJR19WR0FfQ09OU09MRT15 CisjIENPTkZJR19WR0FDT05fU09GVF9TQ1JPTExCQUNLIGlzIG5vdCBzZXQKK0NPTkZJR19E VU1NWV9DT05TT0xFPXkKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKK0NPTkZJR19ISURf U1VQUE9SVD15CitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0 CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorCisjCisjIFVTQiBJbnB1dCBEZXZpY2Vz CisjCitDT05GSUdfVVNCX0hJRD15CisjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKKyMg Q09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAorCisjCisjIFNwZWNpYWwgSElEIGRyaXZl cnMKKyMKKyMgQ09ORklHX0hJRF9DT01QQVQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0E0 VEVDSCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQVBQTEUgaXMgbm90IHNldAorIyBDT05G SUdfSElEX0JFTEtJTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQ0hFUlJZIGlzIG5vdCBz ZXQKKyMgQ09ORklHX0hJRF9DSElDT05ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9DWVBS RVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9FWktFWSBpcyBub3Qgc2V0CisjIENPTkZJ R19ISURfR1lSQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfSElEX0xPR0lURUNIIGlzIG5v dCBzZXQKKyMgQ09ORklHX0hJRF9NSUNST1NPRlQgaXMgbm90IHNldAorIyBDT05GSUdfSElE X01PTlRFUkVZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9OVFJJRyBpcyBub3Qgc2V0Cisj IENPTkZJR19ISURfUEFOVEhFUkxPUkQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1BFVEFM WU5YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TQU1TVU5HIGlzIG5vdCBzZXQKKyMgQ09O RklHX0hJRF9TT05ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TVU5QTFVTIGlzIG5vdCBz ZXQKKyMgQ09ORklHX0dSRUVOQVNJQV9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVE9Q U0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19USFJVU1RNQVNURVJfRkYgaXMgbm90IHNldAor IyBDT05GSUdfWkVST1BMVVNfRkYgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkK K0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15 CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQorQ09ORklHX1VTQj15CisjIENPTkZJR19V U0JfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUz15 CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworQ09ORklHX1VTQl9ERVZJ Q0VGUz15CisjIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklH X1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHIGlzIG5v dCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklH X1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTU9OIGlz IG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9X VVNCX0NCQUYgaXMgbm90IHNldAorCisjCisjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVy cworIworIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9F SENJX0hDRD15CitDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQ9eQorIyBDT05GSUdfVVNC X0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VIQ0lfRlNMIGlz IG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FSENJX0hDRF9QUENfT0YgaXMgbm90IHNldAorIyBD T05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTE2 WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQK K0NPTkZJR19VU0JfT0hDSV9IQ0Q9eQorIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRiBp cyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNl dAorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJ R19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKKyMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBu b3Qgc2V0CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VT Ql9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dIQ0lfSENEIGlzIG5v dCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2 aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBD T05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qg c2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RP UkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVk OworIworCisjCisjIHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9u CisjCitDT05GSUdfVVNCX1NUT1JBR0U9eQorIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcg aXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0Cisj IENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9T VE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBp cyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAorIyBD T05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9S QUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBp cyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0Cisj IENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RP UkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBp cyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNC X01EQzgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAor CisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90 IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VT Ql9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBD T05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5v dCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xF R09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09O RklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBu b3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05G SUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90 IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZU RElfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBz ZXQKKyMgQ09ORklHX1VTQl9TSVNVU0JWR0EgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xE IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0Cisj IENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlz IG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CisjIENPTkZJR19V U0JfVlNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisj CisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQorIworIyBDT05GSUdfVVdCIGlz IG5vdCBzZXQKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBp cyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NF U1NJQklMSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAor IyBDT05GSUdfRURBQyBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRD X0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVW SUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBSVEMg aW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5U Rl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorQ09ORklHX1JUQ19JTlRGX0RFVl9V SUVfRU1VTD15CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIEky QyBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAor IyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAorQ09ORklHX1JUQ19EUlZfRFMx Mzc1PXkKKyMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JU Q19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMg bm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKKyMgQ09ORklH X1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlz IG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CisjIENPTkZJ R19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1MzNTM5MEEg aXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAorIyBDT05G SUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycwor IworCisjCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0NN T1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAorIyBD T05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1 NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBD T05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000 OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0Cisj IENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JR NDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKKwor IworIyBvbi1DUFUgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfUFBDIGlzIG5v dCBzZXQKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlz IG5vdCBzZXQKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lz dGVtcworIworQ09ORklHX0VYVDJfRlM9eQorQ09ORklHX0VYVDJfRlNfWEFUVFI9eQorIyBD T05GSUdfRVhUMl9GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19T RUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CitD T05GSUdfRVhUM19GUz15CitDT05GSUdfRVhUM19GU19YQVRUUj15CisjIENPTkZJR19FWFQz X0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlz IG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorQ09ORklHX0pCRD15Cisj IENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0ZTX01CQ0FDSEU9eQorIyBD T05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBz ZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NL SU5HPXkKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBp cyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETk9U SUZZIGlzIG5vdCBzZXQKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9 eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5v dCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9G UyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworQ09ORklH X0lTTzk2NjBfRlM9eQorQ09ORklHX0pPTElFVD15CisjIENPTkZJR19aSVNPRlMgaXMgbm90 IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZp bGVzeXN0ZW1zCisjCisjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19W RkFUX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisj IFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0Nf S0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRP Uj15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BP U0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAor IyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JU0NfRklMRVNZU1RF TVM9eQorIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlz IG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVT X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdf QkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdf SkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKK0NPTkZJR19KRkZTMl9GU19X UklURUJVRkZFUj15CisjIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0 CisjIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZT X1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMg aXMgbm90IHNldAorQ09ORklHX0pGRlMyX1pMSUI9eQorIyBDT05GSUdfSkZGUzJfTFpPIGlz IG5vdCBzZXQKK0NPTkZJR19KRkZTMl9SVElNRT15CisjIENPTkZJR19KRkZTMl9SVUJJTiBp cyBub3Qgc2V0CitDT05GSUdfWUFGRlNfRlM9eQorQ09ORklHX1lBRkZTX1lBRkZTMT15Cisj IENPTkZJR19ZQUZGU185QllURV9UQUdTIGlzIG5vdCBzZXQKK0NPTkZJR19ZQUZGU19ET0VT X0VDQz15CisjIENPTkZJR19ZQUZGU19FQ0NfV1JPTkdfT1JERVIgaXMgbm90IHNldAorQ09O RklHX1lBRkZTX1lBRkZTMj15CitDT05GSUdfWUFGRlNfQVVUT19ZQUZGUzI9eQorIyBDT05G SUdfWUFGRlNfRElTQUJMRV9MQVpZX0xPQUQgaXMgbm90IHNldAorIyBDT05GSUdfWUFGRlNf RElTQUJMRV9XSURFX1ROT0RFUyBpcyBub3Qgc2V0CitDT05GSUdfWUFGRlNfQUxXQVlTX0NI RUNLX0NIVU5LX0VSQVNFRD15CitDT05GSUdfWUFGRlNfU0hPUlRfTkFNRVNfSU5fUkFNPXkK KyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CitDT05GSUdfU1FVQVNIRlM9eQorIyBDT05G SUdfU1FVQVNIRlNfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX1NRVUFTSEZTX0ZSQUdN RU5UX0NBQ0hFX1NJWkU9MworIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJ R19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKKyMg Q09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBz ZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMg bm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJ TEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJ R19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CitD T05GSUdfUk9PVF9ORlM9eQorQ09ORklHX05GU0Q9eQorIyBDT05GSUdfTkZTRF9WMyBpcyBu b3Qgc2V0CisjIENPTkZJR19ORlNEX1Y0IGlzIG5vdCBzZXQKK0NPTkZJR19MT0NLRD15CitD T05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX0VYUE9SVEZTPXkKK0NPTkZJR19ORlNfQ09NTU9O PXkKK0NPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0IGlzIG5v dCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19S UENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0 CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0 CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qg c2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCitDT05GSUdfUEFSVElUSU9OX0FEVkFO Q0VEPXkKKyMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19P U0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBu b3Qgc2V0CisjIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdf TUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKyMg Q09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfU1VCUEFS VElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBu b3Qgc2V0CisjIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05G SUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfUEFSVElUSU9OIGlz IG5vdCBzZXQKKyMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05G SUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LQVJNQV9QQVJUSVRJT04g aXMgbm90IHNldAorIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJ R19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19OTFM9eQorQ09ORklHX05M U19ERUZBVUxUPSJpc284ODU5LTEiCisjIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5v dCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdf TkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUw IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBD T05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBB R0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNl dAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNf Q09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMg bm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJ R19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84 NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Cisj IENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RF UEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qg c2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05M U19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBu b3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJ R19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0FTQ0lJPXkKKyMg Q09ORklHX05MU19JU084ODU5XzEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlf MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09O RklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBp cyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklH X05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBu b3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19O TFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBu b3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19L T0k4X1UgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAorIyBDT05G SUdfRExNIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdf QklUUkVWRVJTRT15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKKyMgQ09ORklH X0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENP TkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qg c2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJ R19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdf WkxJQl9ERUZMQVRFPXkKK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NP TkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15 CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5v dCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVf TVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CitDT05GSUdfTUFHSUNfU1lT UlE9eQorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorQ09ORklHX0RFQlVH X0ZTPXkKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVH X0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CitDT05GSUdfREVU RUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMg aXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAK KyMgQ09ORklHX1NDSEVEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEU1RBVFMg aXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdf REVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5v dCBzZXQKKyMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdf UlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90 IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVC VUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBp cyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90 IHNldAorQ09ORklHX1NUQUNLVFJBQ0U9eQorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBu b3Qgc2V0CisjIENPTkZJR19ERUJVR19ISUdITUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RF QlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0lORk89eQorIyBDT05G SUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBu b3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJ R19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQK KyMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1BS SU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5v dCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBD T05GSUdfS1BST0JFU19TQU5JVFlfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJB Q0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZU IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xLRFRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxU X0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQK KyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19OT1Bf VFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9E WU5BTUlDX0ZUUkFDRT15CitDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitD T05GSUdfUklOR19CVUZGRVI9eQorQ09ORklHX1RSQUNJTkc9eQorCisjCisjIFRyYWNlcnMK KyMKKyMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVF TVBUX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNl dAorIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklH X0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJ TkcgaXMgbm90IHNldAorIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09O RklHX0ZUUkFDRV9TVEFSVFVQX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19Q UklOVEtfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitD T05GSUdfSEFWRV9BUkNIX0tHREI9eQorQ09ORklHX0tHREI9eQorQ09ORklHX0tHREJfU0VS SUFMX0NPTlNPTEU9eQorIyBDT05GSUdfS0dEQl9URVNUUyBpcyBub3Qgc2V0CitDT05GSUdf UFJJTlRfU1RBQ0tfREVQVEg9NjQKKyMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMg bm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorIyBDT05G SUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREVfUEFUQ0hJTkdf U0VMRlRFU1QgaXMgbm90IHNldAorIyBDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUIGlzIG5v dCBzZXQKKyMgQ09ORklHX01TSV9CSVRNQVBfU0VMRlRFU1QgaXMgbm90IHNldAorIyBDT05G SUdfWE1PTiBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdHRVI9eQorIyBDT05GSUdfSVJRU1RB Q0tTIGlzIG5vdCBzZXQKK0NPTkZJR19WSVJRX0RFQlVHPXkKK0NPTkZJR19CRElfU1dJVENI PXkKKyMgQ09ORklHX0JPT1RYX1RFWFQgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZ X0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJ R19LRVlTIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNVUklUWT15CisjIENPTkZJR19TRUNVUklU WUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX05FVFdPUksgaXMgbm90IHNldAor IyBDT05GSUdfU0VDVVJJVFlfUEFUSCBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9G SUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9ST09UUExV RyBpcyBub3Qgc2V0CitDT05GSUdfU0VDVVJJVFlfREVGQVVMVF9NTUFQX01JTl9BRERSPTAK K0NPTkZJR19YT1JfQkxPQ0tTPXkKK0NPTkZJR19BU1lOQ19DT1JFPXkKK0NPTkZJR19BU1lO Q19NRU1DUFk9eQorQ09ORklHX0FTWU5DX1hPUj15CitDT05GSUdfQ1JZUFRPPXkKKworIwor IyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKKyMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5v dCBzZXQKKyMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NS WVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMg bm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZ UFRPX0NSWVBURCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qg c2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgQXV0aGVudGlj YXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQ VE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBD T05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIwor IyBDT05GSUdfQ1JZUFRPX0NCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RSIGlz IG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZ UFRPX0VDQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKKyMg Q09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YVFMgaXMg bm90IHNldAorCisjCisjIEhhc2ggbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19ITUFDIGlz IG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKworIworIyBEaWdl c3QKKyMKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZ UFRPX01ENCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKKyMg Q09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9f Uk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAor IyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1E MzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKKyMgQ09O RklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBp cyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklH X0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisKKyMKKyMgQ2lwaGVycworIworIyBDT05GSUdf Q1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBz ZXQKKyMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19C TE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNl dAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19D QVNUNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVTIGlzIG5vdCBzZXQKKyMgQ09O RklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBp cyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJ R19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBu b3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBU T19UV09GSVNIIGlzIG5vdCBzZXQKKworIworIyBDb21wcmVzc2lvbgorIworIyBDT05GSUdf Q1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qg c2V0CisKKyMKKyMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCisjCisjIENPTkZJR19DUllQ VE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0hXPXkKKyMgQ09ORklH X0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERVZf VEFMSVRPUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAorIyBD T05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC11IC0tbmV3LWZpbGUgLS1y ZWN1cnNpdmUgbGludXgtMi42LjI5LjYub3JpZy9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20v Y3BjaTYyMDBfdGltZXIuaCBsaW51eC0yLjYuMjkuNi5tb2QvYXJjaC9wb3dlcnBjL2luY2x1 ZGUvYXNtL2NwY2k2MjAwX3RpbWVyLmgKLS0tIGxpbnV4LTIuNi4yOS42Lm9yaWcvYXJjaC9w b3dlcnBjL2luY2x1ZGUvYXNtL2NwY2k2MjAwX3RpbWVyLmgJMTk2OS0xMi0zMSAxNzowMDow MC4wMDAwMDAwMDAgLTA3MDAKKysrIGxpbnV4LTIuNi4yOS42Lm1vZC9hcmNoL3Bvd2VycGMv aW5jbHVkZS9hc20vY3BjaTYyMDBfdGltZXIuaAkyMDA5LTA3LTIxIDExOjI4OjE3LjAwMDAw MDAwMCAtMDcwMApAQCAtMCwwICsxLDQwIEBACisjaWZuZGVmIF9fQ1BDSTYyMDBfVElNRVJf SAorI2RlZmluZSBfX0NQQ0k2MjAwX1RJTUVSX0gKKworI2RlZmluZSBDUENJNjIwMF9NSU5f VElNRVJfTlVNQkVSCTAKKyNkZWZpbmUgQ1BDSTYyMDBfTUFYX1RJTUVSX05VTUJFUgkzCisK KyNkZWZpbmUgTUlOX1RJQ0tTX1BFUl9NSUNST1NFQ09ORAkxCisjZGVmaW5lIE1BWF9USUNL U19QRVJfTUlDUk9TRUNPTkQJMjUKKwordHlwZWRlZiB2b2lkICgqY3BjaTYyMDBfdGltZXJf ZikgKHZvaWQgKmRhdGEpOworCisvKiAKKyAqIFN0YXJ0IGEgdGltZXIKKyAqIENhbGwgZnVu YyhkYXRhKSBhZnRlciBzbyBtYW55IG1pY3Jvc2Vjb29uZHMKKyAqIFRoZSBmdW5jdGlvbiB3 aWxsIGJlIGNhbGxlZCBpbiBpbnRlcnJ1cHQgY29udGV4dC4KKyAqLworaW50IGNwY2k2MjAw X3RpbWVyX3N0YXJ0KGludCB0aW1lcl9udW1iZXIsIHVuc2lnbmVkIGxvbmcgbWljcm9zZWNv bmRzLCAKKwkJCWNwY2k2MjAwX3RpbWVyX2YgZnVuYywgdm9pZCAqZGF0YSwgaW50IHBlcmlv ZGljKTsKKworLyogCisgKiBTdG9wIGEgdGltZXIKKyAqLworaW50IGNwY2k2MjAwX3RpbWVy X3N0b3AoaW50IHRpbWVyX251bWJlcik7CisKKy8qIAorICogR2V0IHRoZSB0aW1lciByZXNv bHV0aW9uLCBpbiBtaWNyb3NlY29uZHMvdGljaworICovCit1bnNpZ25lZCBsb25nIGNwY2k2 MjAwX3RpbWVyX2dldF9yZXNvbHV0aW9uKHZvaWQpOworCisvKiAKKyAqIFNldCB0aGUgdGlt ZXIgcmVzb2x1dGlvbiwgaW4gdGlja3MvbWljcm9zZWNvbmRzCisgKi8KK2ludCBjcGNpNjIw MF90aW1lcl9zZXRfcmVzb2x1dGlvbih1bnNpZ25lZCBsb25nIHRpY2tzKTsKKworLyogCisg KiBHZXQgYSB0aW1lciBjb3VudGVyIHZhbHVlLCBpbiB0aWNrcworICovCit1bnNpZ25lZCBs b25nIGNwY2k2MjAwX3RpbWVyX2dldF90aWNrcyhpbnQgdGltZXJfbnVtYmVyKTsKKworI2Vu ZGlmIC8qIF9fQ1BDSTYyMDBfVElNRVJfSCAqLwpkaWZmIC11IC0tbmV3LWZpbGUgLS1yZWN1 cnNpdmUgbGludXgtMi42LjI5LjYub3JpZy9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbXZt ZTMxMDBfdGltZXIuaCBsaW51eC0yLjYuMjkuNi5tb2QvYXJjaC9wb3dlcnBjL2luY2x1ZGUv YXNtL212bWUzMTAwX3RpbWVyLmgKLS0tIGxpbnV4LTIuNi4yOS42Lm9yaWcvYXJjaC9wb3dl cnBjL2luY2x1ZGUvYXNtL212bWUzMTAwX3RpbWVyLmgJMTk2OS0xMi0zMSAxNzowMDowMC4w MDAwMDAwMDAgLTA3MDAKKysrIGxpbnV4LTIuNi4yOS42Lm1vZC9hcmNoL3Bvd2VycGMvaW5j bHVkZS9hc20vbXZtZTMxMDBfdGltZXIuaAkyMDA5LTA3LTIxIDExOjI4OjE3LjAwMDAwMDAw MCAtMDcwMApAQCAtMCwwICsxLDQxIEBACisjaWZuZGVmIF9fTVZNRTMxMDBfVElNRVJfSAor I2RlZmluZSBfX01WTUUzMTAwX1RJTUVSX0gKKworCisjZGVmaW5lIE1WTUUzMTAwX01JTl9U SU1FUl9OVU1CRVIJMAorI2RlZmluZSBNVk1FMzEwMF9NQVhfVElNRVJfTlVNQkVSCTMKKwor I2RlZmluZSBNSU5fVElDS1NfUEVSX01JQ1JPU0VDT05ECTEKKyNkZWZpbmUgTUFYX1RJQ0tT X1BFUl9NSUNST1NFQ09ORAkyNQorCit0eXBlZGVmIHZvaWQgKCptdm1lMzEwMF90aW1lcl9m KSAodm9pZCAqZGF0YSk7CisKKy8qIAorICogU3RhcnQgYSB0aW1lcgorICogQ2FsbCBmdW5j KGRhdGEpIGFmdGVyIHNvIG1hbnkgbWljcm9zZWNvb25kcworICogVGhlIGZ1bmN0aW9uIHdp bGwgYmUgY2FsbGVkIGluIGludGVycnVwdCBjb250ZXh0LgorICovCitpbnQgbXZtZTMxMDBf dGltZXJfc3RhcnQoaW50IHRpbWVyX251bWJlciwgdW5zaWduZWQgbG9uZyBtaWNyb3NlY29u ZHMsIAorCQkJbXZtZTMxMDBfdGltZXJfZiBmdW5jLCB2b2lkICpkYXRhLCBpbnQgcGVyaW9k aWMpOworCisvKiAKKyAqIFN0b3AgYSB0aW1lcgorICovCitpbnQgbXZtZTMxMDBfdGltZXJf c3RvcChpbnQgdGltZXJfbnVtYmVyKTsKKworLyogCisgKiBHZXQgdGhlIHRpbWVyIHJlc29s dXRpb24sIGluIG1pY3Jvc2Vjb25kcy90aWNrCisgKi8KK3Vuc2lnbmVkIGxvbmcgbXZtZTMx MDBfdGltZXJfZ2V0X3Jlc29sdXRpb24odm9pZCk7CisKKy8qIAorICogU2V0IHRoZSB0aW1l ciByZXNvbHV0aW9uLCBpbiB0aWNrcy9taWNyb3NlY29uZHMKKyAqLworaW50IG12bWUzMTAw X3RpbWVyX3NldF9yZXNvbHV0aW9uKHVuc2lnbmVkIGxvbmcgdGlja3MpOworCisvKiAKKyAq IEdldCBhIHRpbWVyIGNvdW50ZXIgdmFsdWUsIGluIHRpY2tzCisgKi8KK3Vuc2lnbmVkIGxv bmcgbXZtZTMxMDBfdGltZXJfZ2V0X3RpY2tzKGludCB0aW1lcl9udW1iZXIpOworCisjZW5k aWYgLyogX19NVk1FMzEwMF9USU1FUl9IICovCmRpZmYgLXUgLS1uZXctZmlsZSAtLXJlY3Vy c2l2ZSBsaW51eC0yLjYuMjkuNi5vcmlnL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tdm1l NDEwMF90aW1lci5oIGxpbnV4LTIuNi4yOS42Lm1vZC9hcmNoL3Bvd2VycGMvaW5jbHVkZS9h c20vbXZtZTQxMDBfdGltZXIuaAotLS0gbGludXgtMi42LjI5LjYub3JpZy9hcmNoL3Bvd2Vy cGMvaW5jbHVkZS9hc20vbXZtZTQxMDBfdGltZXIuaAkxOTY5LTEyLTMxIDE3OjAwOjAwLjAw MDAwMDAwMCAtMDcwMAorKysgbGludXgtMi42LjI5LjYubW9kL2FyY2gvcG93ZXJwYy9pbmNs dWRlL2FzbS9tdm1lNDEwMF90aW1lci5oCTIwMDktMDctMjEgMTE6Mjg6MTcuMDAwMDAwMDAw IC0wNzAwCkBAIC0wLDAgKzEsNDAgQEAKKyNpZm5kZWYgX19NVk1FNDEwMF9USU1FUl9ICisj ZGVmaW5lIF9fTVZNRTQxMDBfVElNRVJfSAorCisjZGVmaW5lIE1WTUU0MTAwX01JTl9USU1F Ul9OVU1CRVIJMAorI2RlZmluZSBNVk1FNDEwMF9NQVhfVElNRVJfTlVNQkVSCTMKKworI2Rl ZmluZSBNSU5fVElDS1NfUEVSX01JQ1JPU0VDT05ECTEKKyNkZWZpbmUgTUFYX1RJQ0tTX1BF Ul9NSUNST1NFQ09ORAkyNQorCit0eXBlZGVmIHZvaWQgKCptdm1lNDEwMF90aW1lcl9mKSAo dm9pZCAqZGF0YSk7CisKKy8qIAorICogU3RhcnQgYSB0aW1lcgorICogQ2FsbCBmdW5jKGRh dGEpIGFmdGVyIHNvIG1hbnkgbWljcm9zZWNvb25kcworICogVGhlIGZ1bmN0aW9uIHdpbGwg YmUgY2FsbGVkIGluIGludGVycnVwdCBjb250ZXh0LgorICovCitpbnQgbXZtZTQxMDBfdGlt ZXJfc3RhcnQoaW50IHRpbWVyX251bWJlciwgdW5zaWduZWQgbG9uZyBtaWNyb3NlY29uZHMs IAorCQkJbXZtZTQxMDBfdGltZXJfZiBmdW5jLCB2b2lkICpkYXRhLCBpbnQgcGVyaW9kaWMp OworCisvKiAKKyAqIFN0b3AgYSB0aW1lcgorICovCitpbnQgbXZtZTQxMDBfdGltZXJfc3Rv cChpbnQgdGltZXJfbnVtYmVyKTsKKworLyogCisgKiBHZXQgdGhlIHRpbWVyIHJlc29sdXRp b24sIGluIG1pY3Jvc2Vjb25kcy90aWNrCisgKi8KK3Vuc2lnbmVkIGxvbmcgbXZtZTQxMDBf dGltZXJfZ2V0X3Jlc29sdXRpb24odm9pZCk7CisKKy8qIAorICogU2V0IHRoZSB0aW1lciBy ZXNvbHV0aW9uLCBpbiB0aWNrcy9taWNyb3NlY29uZHMKKyAqLworaW50IG12bWU0MTAwX3Rp bWVyX3NldF9yZXNvbHV0aW9uKHVuc2lnbmVkIGxvbmcgdGlja3MpOworCisvKiAKKyAqIEdl dCBhIHRpbWVyIGNvdW50ZXIgdmFsdWUsIGluIHRpY2tzCisgKi8KK3Vuc2lnbmVkIGxvbmcg bXZtZTQxMDBfdGltZXJfZ2V0X3RpY2tzKGludCB0aW1lcl9udW1iZXIpOworCisjZW5kaWYg LyogX19NVk1FNDEwMF9USU1FUl9IICovCmRpZmYgLXUgLS1uZXctZmlsZSAtLXJlY3Vyc2l2 ZSBsaW51eC0yLjYuMjkuNi5vcmlnL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tdm1lNzEw MF90aW1lci5oIGxpbnV4LTIuNi4yOS42Lm1vZC9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20v bXZtZTcxMDBfdGltZXIuaAotLS0gbGludXgtMi42LjI5LjYub3JpZy9hcmNoL3Bvd2VycGMv aW5jbHVkZS9hc20vbXZtZTcxMDBfdGltZXIuaAkxOTY5LTEyLTMxIDE3OjAwOjAwLjAwMDAw MDAwMCAtMDcwMAorKysgbGludXgtMi42LjI5LjYubW9kL2FyY2gvcG93ZXJwYy9pbmNsdWRl L2FzbS9tdm1lNzEwMF90aW1lci5oCTIwMDktMDctMjEgMTE6Mjg6MTcuMDAwMDAwMDAwIC0w NzAwCkBAIC0wLDAgKzEsNDAgQEAKKyNpZm5kZWYgX19NVk1FNzEwMF9USU1FUl9ICisjZGVm aW5lIF9fTVZNRTcxMDBfVElNRVJfSAorCisjZGVmaW5lIE1WTUU3MTAwX01JTl9USU1FUl9O VU1CRVIJMAorI2RlZmluZSBNVk1FNzEwMF9NQVhfVElNRVJfTlVNQkVSCTMKKworI2RlZmlu ZSBNSU5fVElDS1NfUEVSX01JQ1JPU0VDT05ECTEKKyNkZWZpbmUgTUFYX1RJQ0tTX1BFUl9N SUNST1NFQ09ORAkyNQorCit0eXBlZGVmIHZvaWQgKCptdm1lNzEwMF90aW1lcl9mKSAodm9p ZCAqZGF0YSk7CisKKy8qIAorICogU3RhcnQgYSB0aW1lcgorICogQ2FsbCBmdW5jKGRhdGEp IGFmdGVyIHNvIG1hbnkgbWljcm9zZWNvb25kcworICogVGhlIGZ1bmN0aW9uIHdpbGwgYmUg Y2FsbGVkIGluIGludGVycnVwdCBjb250ZXh0LgorICovCitpbnQgbXZtZTcxMDBfdGltZXJf c3RhcnQoaW50IHRpbWVyX251bWJlciwgdW5zaWduZWQgbG9uZyBtaWNyb3NlY29uZHMsIAor CQkJbXZtZTcxMDBfdGltZXJfZiBmdW5jLCB2b2lkICpkYXRhLCBpbnQgcGVyaW9kaWMpOwor CisvKiAKKyAqIFN0b3AgYSB0aW1lcgorICovCitpbnQgbXZtZTcxMDBfdGltZXJfc3RvcChp bnQgdGltZXJfbnVtYmVyKTsKKworLyogCisgKiBHZXQgdGhlIHRpbWVyIHJlc29sdXRpb24s IGluIG1pY3Jvc2Vjb25kcy90aWNrCisgKi8KK3Vuc2lnbmVkIGxvbmcgbXZtZTcxMDBfdGlt ZXJfZ2V0X3Jlc29sdXRpb24odm9pZCk7CisKKy8qIAorICogU2V0IHRoZSB0aW1lciByZXNv bHV0aW9uLCBpbiB0aWNrcy9taWNyb3NlY29uZHMKKyAqLworaW50IG12bWU3MTAwX3RpbWVy X3NldF9yZXNvbHV0aW9uKHVuc2lnbmVkIGxvbmcgdGlja3MpOworCisvKiAKKyAqIEdldCBh IHRpbWVyIGNvdW50ZXIgdmFsdWUsIGluIHRpY2tzCisgKi8KK3Vuc2lnbmVkIGxvbmcgbXZt ZTcxMDBfdGltZXJfZ2V0X3RpY2tzKGludCB0aW1lcl9udW1iZXIpOworCisjZW5kaWYgLyog X19NVk1FNzEwMF9USU1FUl9IICovCmRpZmYgLXUgLS1uZXctZmlsZSAtLXJlY3Vyc2l2ZSBs aW51eC0yLjYuMjkuNi5vcmlnL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9yZWdfYm9va2Uu aCBsaW51eC0yLjYuMjkuNi5tb2QvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3JlZ19ib29r ZS5oCi0tLSBsaW51eC0yLjYuMjkuNi5vcmlnL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9y ZWdfYm9va2UuaAkyMDA5LTA3LTAyIDE2OjQxOjIwLjAwMDAwMDAwMCAtMDcwMAorKysgbGlu dXgtMi42LjI5LjYubW9kL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9yZWdfYm9va2UuaAky MDA5LTA3LTIxIDExOjI4OjE3LjAwMDAwMDAwMCAtMDcwMApAQCAtMzg3LDEyICszODcsMTQg QEAKICNkZWZpbmUgSUNDUl9DQUNIRQkxCQkvKiBDYWNoZWFibGUgKi8KIAogLyogQml0IGRl ZmluaXRpb25zIGZvciBMMUNTUjAuICovCisjZGVmaW5lIEwxQ1NSMF9EQ1BFICAgICAweDAw MDEwMDAwICAgICAgLyogRGF0YSBDYWNoZSBQYXJpdHkgRW5hYmxlICovCiAjZGVmaW5lIEwx Q1NSMF9DTEZDCTB4MDAwMDAxMDAJLyogQ2FjaGUgTG9jayBCaXRzIEZsYXNoIENsZWFyICov CiAjZGVmaW5lIEwxQ1NSMF9EQ0ZJCTB4MDAwMDAwMDIJLyogRGF0YSBDYWNoZSBGbGFzaCBJ bnZhbGlkYXRlICovCiAjZGVmaW5lIEwxQ1NSMF9DRkkJMHgwMDAwMDAwMgkvKiBDYWNoZSBG bGFzaCBJbnZhbGlkYXRlICovCiAjZGVmaW5lIEwxQ1NSMF9EQ0UJMHgwMDAwMDAwMQkvKiBE YXRhIENhY2hlIEVuYWJsZSAqLwogCiAvKiBCaXQgZGVmaW5pdGlvbnMgZm9yIEwxQ1NSMS4g Ki8KKyNkZWZpbmUgTDFDU1IxX0lDUEUgICAgIDB4MDAwMTAwMDAgICAgICAvKiBJbnN0ciBD YWNoZSBQYXJpdHkgRW5hYmxlICovCiAjZGVmaW5lIEwxQ1NSMV9JQ0xGUgkweDAwMDAwMTAw CS8qIEluc3RyIENhY2hlIExvY2sgQml0cyBGbGFzaCBSZXNldCAqLwogI2RlZmluZSBMMUNT UjFfSUNGSQkweDAwMDAwMDAyCS8qIEluc3RyIENhY2hlIEZsYXNoIEludmFsaWRhdGUgKi8K ICNkZWZpbmUgTDFDU1IxX0lDRQkweDAwMDAwMDAxCS8qIEluc3RyIENhY2hlIEVuYWJsZSAq LwpkaWZmIC11IC0tbmV3LWZpbGUgLS1yZWN1cnNpdmUgbGludXgtMi42LjI5LjYub3JpZy9h cmNoL3Bvd2VycGMva2VybmVsL2hlYWRfZnNsX2Jvb2tlLlMgbGludXgtMi42LjI5LjYubW9k L2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF9mc2xfYm9va2UuUwotLS0gbGludXgtMi42LjI5 LjYub3JpZy9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfZnNsX2Jvb2tlLlMJMjAwOS0wNy0w MiAxNjo0MToyMC4wMDAwMDAwMDAgLTA3MDAKKysrIGxpbnV4LTIuNi4yOS42Lm1vZC9hcmNo L3Bvd2VycGMva2VybmVsL2hlYWRfZnNsX2Jvb2tlLlMJMjAwOS0wNy0yMSAxMToyODoxNy4w MDAwMDAwMDAgLTA3MDAKQEAgLTEwNTIsNiArMTA1Miw5NCBAQAogCWJscgogCiAjaWZkZWYg Q09ORklHX1NNUAorCisvKiBUbyBib290IHNlY29uZGFyeSBjcHVzLCB3ZSBuZWVkIGEgcGxh Y2UgZm9yIHRoZW0gdG8gc3RhcnQgdXAuCisgKiBOb3JtYWxseSwgdGhleSBzdGFydCBhdCAw eGZmZmZmZmZjLCBidXQgdGhhdCdzIHVzdWFsbHkgdGhlCisgKiBmaXJtd2FyZSwgYW5kIHdl IGRvbid0IHdhbnQgdG8gaGF2ZSB0byBydW4gdGhlIGZpcm13YXJlIGFnYWluLgorICogSW5z dGVhZCwgdGhlIHByaW1hcnkgY3B1IHdpbGwgc2V0IHRoZSBCUFRSIHRvIHBvaW50IGhlcmUg dG8KKyAqIHRoaXMgcGFnZS4gIFdlIHRoZW4gc2V0IHVwIHRoZSBjb3JlLCBhbmQgaGVhZCB0 bworICogc3RhcnRfc2Vjb25kYXJ5LiAgTm90ZSB0aGF0IHRoaXMgbWVhbnMgdGhhdCB0aGUg Y29kZSBiZWxvdworICogbXVzdCBuZXZlciBleGNlZWQgMTAyMyBpbnN0cnVjdGlvbnMgKHRo ZSBicmFuY2ggYXQgdGhlIGVuZAorICogd291bGQgdGhlbiBiZSB0aGUgMTAyNHRoKS4KKyAq LworICAgICAgICAuZ2xvYmwgIF9fc2Vjb25kYXJ5X3N0YXJ0X3BhZ2UKKyAgICAgICAgLmFs aWduICAxMgorX19zZWNvbmRhcnlfc3RhcnRfcGFnZToKKy8qIEZpcnN0IGRvIHNvbWUgcHJl bGltaW5hcnkgc2V0dXAgKi8KKyAgICAgICAgbGlzICAgICByMywgSElEMF9FTUNQQGggICAg ICAgICAvKiBlbmFibGUgbWFjaGluZSBjaGVjayAqLworICAgICAgICBvcmkgICAgIHIzLHIz LDB4NDAwMCAgICAgICAvKiBlbmFibGUgVGltZWJhc2UgKi8KKyNpZmRlZiBDT05GSUdfUEhZ U182NEJJVAorICAgICAgICBvcmkgICAgIHIzLHIzLDB4MDA4MCAgICAgLyogZW5hYmxlIE1B UzcgdXBkYXRlcyAqLworI2VuZGlmCisgICAgICAgIG10c3ByICAgU1BSTl9ISUQwLHIzCisK KyNpZiAxCisgICAgICAgIG1mc3ByICAgcjMsIFNQUk5fVENSCisgICAgICAgIG9yaXMgICAg cjMscjMsIFRDUl9ESUVAaCAvKiBFbmFibGUgdGhlIERlY3JlbWVudGVyIEludGVycnVwdCAq LworICAgICAgICBtdHNwciAgIFNQUk5fVENSLHIzCisjZW5kaWYKKworCWxpCXIzLDB4MzAw MAorICAgICAgICBtdHNwciAgIFNQUk5fSElEMSxyMworCisgICAgICAgIC8qIEVuYWJsZSBi cmFuY2ggcHJlZGljdGlvbiAqLworICAgICAgICBsaSAgICAgIHIzLDB4MjAxCisgICAgICAg IG10c3ByICAgU1BSTl9CVUNTUixyMworCisgICAgICAgIC8qIEVuYWJsZS9pbnZhbGlkYXRl IHRoZSBJLUNhY2hlICovCisgICAgICAgIG1mc3ByICAgcjAsU1BSTl9MMUNTUjEKKyAgICAg ICAgb3JpICAgICByMCxyMCwoTDFDU1IxX0lDRkl8TDFDU1IxX0lDRSkKKyAgICAgICAgb3Jp cyAgICByMCxyMCxMMUNTUjFfSUNQRUBoCisgICAgICAgIG10c3ByICAgU1BSTl9MMUNTUjEs cjAKKyAgICAgICAgaXN5bmMKKworICAgICAgICAvKiBFbmFibGUvaW52YWxpZGF0ZSB0aGUg RC1DYWNoZSAqLworICAgICAgICBtZnNwciAgIHIwLFNQUk5fTDFDU1IwCisgICAgICAgIG9y aSAgICAgcjAscjAsKEwxQ1NSMF9EQ0ZJfEwxQ1NSMF9EQ0UpCisgICAgICAgIG9yaXMgICAg cjAscjAsTDFDU1IwX0RDUEVAaAorICAgICAgICBtc3luYworICAgICAgICBpc3luYworICAg ICAgICBtdHNwciAgIFNQUk5fTDFDU1IwLHIwCisgICAgICAgIGlzeW5jCisKKy8qCisgKiBD b21pbmcgaGVyZSwgd2Uga25vdyB0aGUgY3B1IGhhcyBvbmUgVExCIG1hcHBpbmcgaW4gVExC MVswXQorICogd2hpY2ggbWFwcyAweGZmZmZmMDAwLTB4ZmZmZmZmZmYgb25lLXRvLW9uZS4g IFdlIHNldCB1cCBhCisgKiBzZWNvbmQgbWFwcGluZyB0aGF0IG1hcHMgYWRkciAxOjEgZm9y IDY0TSwgYW5kIHRoZW4gd2UganVtcCB0bworICogX19lYXJseV9zdGFydAorICovCisKKyAg ICAgICAgbGlzICAgICByMTAsKE1BUzBfVExCU0VMKDEpfE1BUzBfRVNFTCgxKSlAaAorICAg ICAgICBtdHNwciAgIFNQUk5fTUFTMCxyMTAKKyAgICAgICAgbGlzICAgICByMTAsKE1BUzFf VkFMSUR8TUFTMV9JUFJPVClAaAorICAgICAgICBvcmkgICAgIHIxMCxyMTAsKE1BUzFfVFNJ WkUoQk9PS0VfUEFHRVNaXzY0TSkpQGwKKyAgICAgICAgbXRzcHIgICBTUFJOX01BUzEscjEw CisgICAgICAgIC8qIFdJTUdFID0gMGIwMDAwMCBmb3Igbm93ICovCisgICAgICAgIGxpICAg ICAgcjYsMHgwCisgICAgICAgIG10c3ByICAgU1BSTl9NQVMyLHI2ICAgIC8qIEVQTiBpcyAw ICovCisgICAgICAgIGxpcyAgICAgcjcsMHgwICAgIC8qIFJQTiBpcyAwICovCisgICAgICAg IG9yaSAgICAgcjcscjcsKE1BUzNfU1h8TUFTM19TV3xNQVMzX1NSKQorICAgICAgICBtdHNw ciAgIFNQUk5fTUFTMyxyNworI2lmZGVmIENPTkZJR19FTkFCTEVfMzZCSVRfUEhZUworICAg ICAgICBsaSAgICAgIHIxMSwwCisgICAgICAgIG10c3ByICAgU1BSTl9NQVM3LHIxMQorI2Vu ZGlmCisgICAgICAgIHRsYndlCisJaXN5bmMKKworLyogTm93IHdlIGhhdmUgYW5vdGhlciBt YXBwaW5nIGZvciB0aGlzIHBhZ2UsIHNvIHdlIGp1bXAgdG8gdGhhdAorICogbWFwcGluZwor ICovCisJbWZtc3IJcjQKKyAgICAgICAgbGlzICAgICByNyxfX2Vhcmx5X3N0YXJ0QGgKKyAg ICAgICAgb3JpICAgICByNyxyNyxfX2Vhcmx5X3N0YXJ0QGwKKyAgICAgICAgcmx3aW5tICBy NyxyNywwLDIwLDMxCisgICAgICAgIG10c3ByICAgU1BSTl9TUlIwLHI3CisgICAgICAgIG10 c3ByICAgU1BSTl9TUlIxLHI0CisgICAgICAgIHJmaQorCisKKwogLyogV2hlbiB3ZSBnZXQg aGVyZSwgcjI0IG5lZWRzIHRvIGhvbGQgdGhlIENQVSAjICovCiAJLmdsb2JsIF9fc2Vjb25k YXJ5X3N0YXJ0CiBfX3NlY29uZGFyeV9zdGFydDoKQEAgLTEwNjMsNiArMTE1MSw3IEBACiAJ bXIJcjQscjI0CQkvKiBXaHk/ICovCiAJYmwJY2FsbF9zZXR1cF9jcHUKIAorI2lmIDAKIAls aXMJcjMsdGxiY2FtX2luZGV4QGhhCiAJbHd6CXIzLHRsYmNhbV9pbmRleEBsKHIzKQogCW10 Y3RyCXIzCkBAIC0xMDczLDYgKzExNjIsMjggQEAKIAlibAlsb2FkY2FtX2VudHJ5CiAJYWRk aQlyMjYscjI2LDEKIAliZG56CTFiCisjZWxzZQorICAgICAgICAvKiByMjYgc2hvdWxkIGJl IHNhZmUsIGhlcmUgKi8KKyAgICAgICAgbGlzICAgICByMjYsIHRsYmNhbV9pbmRleEBoYQor ICAgICAgICBsd3ogICAgIHIyNiwgdGxiY2FtX2luZGV4QGwocjI2KQorCisgICAgICAgIC8q IExvYWQgQ0FNIDAgKi8KKyAgICAgICAgbGkgICAgICByMywwCisgICAgICAgIGJsICAgICAg bG9hZGNhbV9lbnRyeQorCisgICAgICAgIC8qIExvYWQgQ0FNIDEsIGlmIGl0J3Mgc2V0ICov CisgICAgICAgIGxpICAgICAgcjMsMQorICAgICAgICBjbXB3ICAgIHIzLHIyNgorICAgICAg ICBiZ3QgICAgIDFmCisgICAgICAgIGJsICAgICAgbG9hZGNhbV9lbnRyeQorMToKKyAgICAg ICAgLyogTG9hZCBDQU0gMiwgaWYgaXQncyBzZXQgKi8KKyAgICAgICAgbGkgICAgICByMywy CisgICAgICAgIGNtcHcgICAgcjMscjI2CisgICAgICAgIGJndCAgICAgMmYKKyAgICAgICAg YmwgICAgICBsb2FkY2FtX2VudHJ5CisyOgorI2VuZGlmCiAKIAkvKiBnZXQgY3VycmVudF90 aHJlYWRfaW5mbyBhbmQgY3VycmVudCAqLwogCWxpcwlyMSxzZWNvbmRhcnlfdGlAaGEKQEAg LTExMDYsNiArMTIxNywxNCBAQAogCS5nbG9ibCBfX3NlY29uZGFyeV9ob2xkX2Fja25vd2xl ZGdlCiBfX3NlY29uZGFyeV9ob2xkX2Fja25vd2xlZGdlOgogCS5sb25nCS0xCisKKyAgICAg ICAgLyogRmlsbCBpbiB0aGUgZW1wdHkgc3BhY2UuICBUaGUgYWN0dWFsIHJlc2V0IHZlY3Rv ciBpcworICAgICAgICAgKiB0aGUgbGFzdCB3b3JkIG9mIHRoZSBwYWdlICovCitfX3NlY29u ZGFyeV9zdGFydF9jb2RlX2VuZDoKKyAgICAgICAgLnNwYWNlIDQwOTIgLSAoX19zZWNvbmRh cnlfc3RhcnRfY29kZV9lbmQgLSBfX3NlY29uZGFyeV9zdGFydF9wYWdlKQorX19zZWNvbmRh cnlfcmVzZXRfdmVjdG9yOgorICAgICAgICBiICAgICAgIF9fc2Vjb25kYXJ5X3N0YXJ0X3Bh Z2UKKwogI2VuZGlmCiAKIC8qCmRpZmYgLXUgLS1uZXctZmlsZSAtLXJlY3Vyc2l2ZSBsaW51 eC0yLjYuMjkuNi5vcmlnL2FyY2gvcG93ZXJwYy9rZXJuZWwvaW8uYyBsaW51eC0yLjYuMjku Ni5tb2QvYXJjaC9wb3dlcnBjL2tlcm5lbC9pby5jCi0tLSBsaW51eC0yLjYuMjkuNi5vcmln L2FyY2gvcG93ZXJwYy9rZXJuZWwvaW8uYwkyMDA5LTA3LTAyIDE2OjQxOjIwLjAwMDAwMDAw MCAtMDcwMAorKysgbGludXgtMi42LjI5LjYubW9kL2FyY2gvcG93ZXJwYy9rZXJuZWwvaW8u YwkyMDA5LTA3LTIxIDExOjI4OjE3LjAwMDAwMDAwMCAtMDcwMApAQCAtMTYxLDcgKzE2MSw3 IEBACiAJCWRlc3QrKzsKIAkJbi0tOwogCX0KLQl3aGlsZShuID4gNCkgeworCXdoaWxlKG4g Pj0gNCkgewogCQkqKCh1MzIgKilkZXN0KSA9ICooKHZvbGF0aWxlIHUzMiAqKXZzcmMpOwog CQllaWVpbygpOwogCQl2c3JjICs9IDQ7CkBAIC0xOTAsNyArMTkwLDcgQEAKIAkJdmRlc3Qr KzsKIAkJbi0tOwogCX0KLQl3aGlsZShuID4gNCkgeworCXdoaWxlKG4gPj0gNCkgewogCQkq KCh2b2xhdGlsZSB1MzIgKil2ZGVzdCkgPSAqKCh2b2xhdGlsZSB1MzIgKilzcmMpOwogCQlz cmMgKz0gNDsKIAkJdmRlc3QgKz0gNDsKZGlmZiAtdSAtLW5ldy1maWxlIC0tcmVjdXJzaXZl IGxpbnV4LTIuNi4yOS42Lm9yaWcvYXJjaC9wb3dlcnBjL2tlcm5lbC9sZWdhY3lfc2VyaWFs LmMgbGludXgtMi42LjI5LjYubW9kL2FyY2gvcG93ZXJwYy9rZXJuZWwvbGVnYWN5X3Nlcmlh bC5jCi0tLSBsaW51eC0yLjYuMjkuNi5vcmlnL2FyY2gvcG93ZXJwYy9rZXJuZWwvbGVnYWN5 X3NlcmlhbC5jCTIwMDktMDctMDIgMTY6NDE6MjAuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51 eC0yLjYuMjkuNi5tb2QvYXJjaC9wb3dlcnBjL2tlcm5lbC9sZWdhY3lfc2VyaWFsLmMJMjAw OS0wNy0yMSAxMToyODoxNy4wMDAwMDAwMDAgLTA3MDAKQEAgLTE2NCw2ICsxNjQsMzMgQEAK IAkJcmV0dXJuIGFkZF9sZWdhY3lfcG9ydChucCwgLTEsIFVQSU9fTUVNLCBhZGRyLCBhZGRy LCBOT19JUlEsIGZsYWdzLCAwKTsKIH0KIAorc3RhdGljIGludCBfX2luaXQgYWRkX2xlZ2Fj eV9ib2FyZF9wb3J0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCit7CisgICAgICAgIHU2NCBh ZGRyOworICAgICAgICBjb25zdCB1MzIgKmFkZHJwOworICAgICAgICB1cGZfdCBmbGFncyA9 IFVQRl9CT09UX0FVVE9DT05GIHwgVVBGX1NLSVBfVEVTVCB8IFVQRl9TSEFSRV9JUlE7CisK KyAgICAgICAgLyogV2Ugb25seSBzdXBwb3J0IHBvcnRzIHRoYXQgaGF2ZSBhIGNsb2NrIGZy ZXF1ZW5jeSBwcm9wZXJseQorICAgICAgICAgKiBlbmNvZGVkIGluIHRoZSBkZXZpY2UtdHJl ZS4KKyAgICAgICAgICovCisgICAgICAgIGlmIChvZl9nZXRfcHJvcGVydHkobnAsICJjbG9j ay1mcmVxdWVuY3kiLCBOVUxMKSA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHJldHVybiAt MTsKKworICAgICAgICAvKiBHZXQgdGhlIGFkZHJlc3MgKi8KKyAgICAgICAgYWRkcnAgPSBv Zl9nZXRfYWRkcmVzcyhucCwgMCwgTlVMTCwgTlVMTCk7CisgICAgICAgIGlmIChhZGRycCA9 PSBOVUxMKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKworICAgICAgICBhZGRyID0g b2ZfdHJhbnNsYXRlX2FkZHJlc3MobnAsIGFkZHJwKTsKKyAgICAgICAgaWYgKGFkZHIgPT0g T0ZfQkFEX0FERFIpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworCisgICAgICAgIC8q IEFkZCBwb3J0LCBpcnEgd2lsbCBiZSBkZWFsdCB3aXRoIGxhdGVyLiBXZSBwYXNzZWQgYSB0 cmFuc2xhdGVkCisgICAgICAgICAqIElPIHBvcnQgdmFsdWUuIEl0IHdpbGwgYmUgZml4ZWQg dXAgbGF0ZXIgYWxvbmcgd2l0aCB0aGUgaXJxCisgICAgICAgICAqLworICAgICAgICByZXR1 cm4gYWRkX2xlZ2FjeV9wb3J0KG5wLCAtMSwgVVBJT19NRU0sIGFkZHIsIGFkZHIsIE5PX0lS USwgZmxhZ3MsIDApOworfQorCiBzdGF0aWMgaW50IF9faW5pdCBhZGRfbGVnYWN5X2lzYV9w b3J0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCiAJCQkJICAgICAgc3RydWN0IGRldmljZV9u b2RlICppc2FfYnJnKQogewpAQCAtMzMyLDcgKzM1OSw4IEBACiAJCQlpbmRleCA9IGFkZF9s ZWdhY3lfc29jX3BvcnQobnAsIG5wKTsKIAkJCWlmIChpbmRleCA+PSAwICYmIG5wID09IHN0 ZG91dCkKIAkJCQlsZWdhY3lfc2VyaWFsX2NvbnNvbGUgPSBpbmRleDsKLQkJfQorCQl9IGVs c2UgCisJCQlpbmRleCA9IGFkZF9sZWdhY3lfYm9hcmRfcG9ydChucCk7CiAJCW9mX25vZGVf cHV0KHBhcmVudCk7CiAJfQogCkBAIC00ODQsNiArNTEyLDggQEAKIAkJCWZpeHVwX3BvcnRf cGlvKGksIG5wLCBwb3J0KTsKIAkJaWYgKChwb3J0LT5pb3R5cGUgPT0gVVBJT19NRU0pIHx8 IChwb3J0LT5pb3R5cGUgPT0gVVBJT19UU0kpKQogCQkJZml4dXBfcG9ydF9tbWlvKGksIG5w LCBwb3J0KTsKKyAgICAgICAgICAgICAgICB1ZGJnX2luaXRfdWFydChwb3J0LT5tZW1iYXNl LCBsZWdhY3lfc2VyaWFsX2luZm9zW2ldLnNwZWVkLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBsZWdhY3lfc2VyaWFsX2luZm9zW2ldLmNsb2NrKTsKIAl9CiAKIAlEQkco IlJlZ2lzdGVyaW5nIHBsYXRmb3JtIHNlcmlhbCBwb3J0c1xuIik7CmRpZmYgLXUgLS1uZXct ZmlsZSAtLXJlY3Vyc2l2ZSBsaW51eC0yLjYuMjkuNi5vcmlnL2FyY2gvcG93ZXJwYy9rZXJu ZWwvcGNpLWNvbW1vbi5jIGxpbnV4LTIuNi4yOS42Lm1vZC9hcmNoL3Bvd2VycGMva2VybmVs L3BjaS1jb21tb24uYwotLS0gbGludXgtMi42LjI5LjYub3JpZy9hcmNoL3Bvd2VycGMva2Vy bmVsL3BjaS1jb21tb24uYwkyMDA5LTA3LTAyIDE2OjQxOjIwLjAwMDAwMDAwMCAtMDcwMAor KysgbGludXgtMi42LjI5LjYubW9kL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpLWNvbW1vbi5j CTIwMDktMDctMjEgMTE6Mjg6MTcuMDAwMDAwMDAwIC0wNzAwCkBAIC03NDAsNyArNzQwLDgg QEAKIAkJCQlzaXplID0gMHgwMTAwMDAwMDsKIAogCQkJLyogMzIgYml0cyBuZWVkcyB0byBt YXAgSU9zIGhlcmUgKi8KLQkJCWhvc2UtPmlvX2Jhc2VfdmlydCA9IGlvcmVtYXAoY3B1X2Fk ZHIsIHNpemUpOworLy8JCQlob3NlLT5pb19iYXNlX3ZpcnQgPSBpb3JlbWFwKGNwdV9hZGRy LCBzaXplKTsKKwkJCWhvc2UtPmlvX2Jhc2VfdmlydCA9ICh2b2lkIF9faW9tZW0gKikodTMy KWNwdV9hZGRyOwogCiAJCQkvKiBFeHBlY3QgdHJvdWJsZSBpZiBwY2lfYWRkciBpcyBub3Qg MCAqLwogCQkJaWYgKHByaW1hcnkpCkBAIC0xMjkwLDcgKzEyOTEsNyBAQAogCQkJaWYgKHJl cGFyZW50X3Jlc291cmNlcyhwciwgcmVzKSA9PSAwKQogCQkJCWNvbnRpbnVlOwogCQl9Ci0J CXByaW50ayhLRVJOX1dBUk5JTkcgIlBDSTogQ2Fubm90IGFsbG9jYXRlIHJlc291cmNlIHJl Z2lvbiAiCisJCXByaW50ayhLRVJOX0RFQlVHICJQQ0k6IENhbm5vdCBhbGxvY2F0ZSByZXNv dXJjZSByZWdpb24gIgogCQkgICAgICAgIiVkIG9mIFBDSSBicmlkZ2UgJWQsIHdpbGwgcmVt YXBcbiIsIGksIGJ1cy0+bnVtYmVyKTsKIGNsZWFyX3Jlc291cmNlOgogCQlyZXMtPmZsYWdz ID0gMDsKQEAgLTEzMTMsNyArMTMxNCw3IEBACiAJcHIgPSBwY2lfZmluZF9wYXJlbnRfcmVz b3VyY2UoZGV2LCByKTsKIAlpZiAoIXByIHx8IChwci0+ZmxhZ3MgJiBJT1JFU09VUkNFX1VO U0VUKSB8fAogCSAgICByZXF1ZXN0X3Jlc291cmNlKHByLCByKSA8IDApIHsKLQkJcHJpbnRr KEtFUk5fV0FSTklORyAiUENJOiBDYW5ub3QgYWxsb2NhdGUgcmVzb3VyY2UgcmVnaW9uICVk IgorCQlwcmludGsoS0VSTl9ERUJVRyAiUENJOiBDYW5ub3QgYWxsb2NhdGUgcmVzb3VyY2Ug cmVnaW9uICVkIgogCQkgICAgICAgIiBvZiBkZXZpY2UgJXMsIHdpbGwgcmVtYXBcbiIsIGlk eCwgcGNpX25hbWUoZGV2KSk7CiAJCWlmIChwcikKIAkJCXByX2RlYnVnKCJQQ0k6ICBwYXJl bnQgaXMgJXA6ICUwMTZsbHgtJTAxNmxseCBbJXhdXG4iLApkaWZmIC11IC0tbmV3LWZpbGUg LS1yZWN1cnNpdmUgbGludXgtMi42LjI5LjYub3JpZy9hcmNoL3Bvd2VycGMva2VybmVsL3Nl dHVwXzMyLmMgbGludXgtMi42LjI5LjYubW9kL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBf MzIuYwotLS0gbGludXgtMi42LjI5LjYub3JpZy9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVw XzMyLmMJMjAwOS0wNy0wMiAxNjo0MToyMC4wMDAwMDAwMDAgLTA3MDAKKysrIGxpbnV4LTIu Ni4yOS42Lm1vZC9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzMyLmMJMjAwOS0wNy0yMSAx MToyODoxNy4wMDAwMDAwMDAgLTA3MDAKQEAgLTMyMiw3ICszMjIsNyBAQAogCiAJLyogc2V0 IHVwIHRoZSBib290bWVtIHN0dWZmIHdpdGggYXZhaWxhYmxlIG1lbW9yeSAqLwogCWRvX2lu aXRfYm9vdG1lbSgpOwotCWlmICggcHBjX21kLnByb2dyZXNzICkgcHBjX21kLnByb2dyZXNz KCJzZXR1cF9hcmNoOiBib290bWVtIiwgMHgzZWFiKTsKKy8vCWlmICggcHBjX21kLnByb2dy ZXNzICkgcHBjX21kLnByb2dyZXNzKCJzZXR1cF9hcmNoOiBib290bWVtIiwgMHgzZWFiKTsK IAogI2lmZGVmIENPTkZJR19EVU1NWV9DT05TT0xFCiAJY29uc3dpdGNocCA9ICZkdW1teV9j b247CkBAIC0zMzAsNyArMzMwLDcgQEAKIAogCWlmIChwcGNfbWQuc2V0dXBfYXJjaCkKIAkJ cHBjX21kLnNldHVwX2FyY2goKTsKLQlpZiAoIHBwY19tZC5wcm9ncmVzcyApIHBwY19tZC5w cm9ncmVzcygiYXJjaDogZXhpdCIsIDB4M2VhYik7CisvLwlpZiAoIHBwY19tZC5wcm9ncmVz cyApIHBwY19tZC5wcm9ncmVzcygiYXJjaDogZXhpdCIsIDB4M2VhYik7CiAKIAlwYWdpbmdf aW5pdCgpOwogCmRpZmYgLXUgLS1uZXctZmlsZSAtLXJlY3Vyc2l2ZSBsaW51eC0yLjYuMjku Ni5vcmlnL2FyY2gvcG93ZXJwYy9rZXJuZWwvdm1saW51eC5sZHMuUyBsaW51eC0yLjYuMjku Ni5tb2QvYXJjaC9wb3dlcnBjL2tlcm5lbC92bWxpbnV4Lmxkcy5TCi0tLSBsaW51eC0yLjYu MjkuNi5vcmlnL2FyY2gvcG93ZXJwYy9rZXJuZWwvdm1saW51eC5sZHMuUwkyMDA5LTA3LTAy IDE2OjQxOjIwLjAwMDAwMDAwMCAtMDcwMAorKysgbGludXgtMi42LjI5LjYubW9kL2FyY2gv cG93ZXJwYy9rZXJuZWwvdm1saW51eC5sZHMuUwkyMDA5LTA3LTIxIDExOjI4OjE3LjAwMDAw MDAwMCAtMDcwMApAQCAtMjY4LDYgKzI2OCw3IEBACiAJCSooLmRhdGEucGFnZV9hbGlnbmVk KQogCX0KIAorCS4gPSBBTElHTihMMV9DQUNIRV9CWVRFUyk7CiAJLmRhdGEuY2FjaGVsaW5l X2FsaWduZWQgOiBBVChBRERSKC5kYXRhLmNhY2hlbGluZV9hbGlnbmVkKSAtIExPQURfT0ZG U0VUKSB7CiAJCSooLmRhdGEuY2FjaGVsaW5lX2FsaWduZWQpCiAJfQpkaWZmIC11IC0tbmV3 LWZpbGUgLS1yZWN1cnNpdmUgbGludXgtMi42LjI5LjYub3JpZy9hcmNoL3Bvd2VycGMvbW0v bW11X2NvbnRleHRfbm9oYXNoLmMgbGludXgtMi42LjI5LjYubW9kL2FyY2gvcG93ZXJwYy9t bS9tbXVfY29udGV4dF9ub2hhc2guYwotLS0gbGludXgtMi42LjI5LjYub3JpZy9hcmNoL3Bv d2VycGMvbW0vbW11X2NvbnRleHRfbm9oYXNoLmMJMjAwOS0wNy0wMiAxNjo0MToyMC4wMDAw MDAwMDAgLTA3MDAKKysrIGxpbnV4LTIuNi4yOS42Lm1vZC9hcmNoL3Bvd2VycGMvbW0vbW11 X2NvbnRleHRfbm9oYXNoLmMJMjAwOS0wOC0wMyAxMDo0Njo1NC4wMDAwMDAwMDAgLTA3MDAK QEAgLTQ2LDcgKzQ2LDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBsb25nICpjb250ZXh0X21hcDsK IHN0YXRpYyB1bnNpZ25lZCBsb25nICpzdGFsZV9tYXBbTlJfQ1BVU107CiBzdGF0aWMgc3Ry dWN0IG1tX3N0cnVjdCAqKmNvbnRleHRfbW07Ci1zdGF0aWMgc3BpbmxvY2tfdCBjb250ZXh0 X2xvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNv bnRleHRfbG9jayk7CiAKICNkZWZpbmUgQ1RYX01BUF9TSVpFCVwKIAkoc2l6ZW9mKHVuc2ln bmVkIGxvbmcpICogKGxhc3RfY29udGV4dCAvIEJJVFNfUEVSX0xPTkcgKyAxKSkKQEAgLTcz LDcgKzczLDYgQEAKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKIAl1bnNpZ25lZCBpbnQgY3B1 LCBtYXg7CiAKLSBhZ2FpbjoKIAltYXggPSBsYXN0X2NvbnRleHQgLSBmaXJzdF9jb250ZXh0 OwogCiAJLyogQXR0ZW1wdCB0byBmcmVlIG5leHRfY29udGV4dCBmaXJzdCBhbmQgdGhlbiBs b29wIHVudGlsIHdlIG1hbmFnZSAqLwpAQCAtMTA4LDcgKzEwNyw5IEBACiAJc3Bpbl91bmxv Y2soJmNvbnRleHRfbG9jayk7CiAJY3B1X3JlbGF4KCk7CiAJc3Bpbl9sb2NrKCZjb250ZXh0 X2xvY2spOwotCWdvdG8gYWdhaW47CisKKwkvKiBUaGlzIHdpbGwgY2F1c2UgdGhlIGNhbGxl ciB0byB0cnkgYWdhaW4gKi8KKwlyZXR1cm4gTU1VX05PX0NPTlRFWFQ7CiB9CiAjZW5kaWYg IC8qIENPTkZJR19TTVAgKi8KIApAQCAtMTI3LDEyICsxMjgsMTIgQEAKIAogCXByX2RlYnVn KCJbJWRdIHN0ZWFsIGNvbnRleHQgJWQgZnJvbSBtbSBAJXBcbiIsIGNwdSwgaWQsIG1tKTsK IAotCS8qIE1hcmsgdGhpcyBtbSBoYXMgaGF2aW5nIG5vIGNvbnRleHQgYW55bW9yZSAqLwot CW1tLT5jb250ZXh0LmlkID0gTU1VX05PX0NPTlRFWFQ7Ci0KIAkvKiBGbHVzaCB0aGUgVExC IGZvciB0aGF0IGNvbnRleHQgKi8KIAlsb2NhbF9mbHVzaF90bGJfbW0obW0pOwogCisJLyog TWFyayB0aGlzIG1tIGhhcyBoYXZpbmcgbm8gY29udGV4dCBhbnltb3JlICovCisJbW0tPmNv bnRleHQuaWQgPSBNTVVfTk9fQ09OVEVYVDsKKwogCS8qIFhYWCBUaGlzIGNsZWFyIHNob3Vs ZCB1bHRpbWF0ZWx5IGJlIHBhcnQgb2YgbG9jYWxfZmx1c2hfdGxiX21tICovCiAJX19jbGVh cl9iaXQoaWQsIHN0YWxlX21hcFtjcHVdKTsKIApAQCAtMTk0LDYgKzE5NSw4IEBACiAJCVdB Uk5fT04ocHJldi0+Y29udGV4dC5hY3RpdmUgPCAxKTsKIAkJcHJldi0+Y29udGV4dC5hY3Rp dmUtLTsKIAl9CisKKyBhZ2FpbjoKICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKIAkvKiBJ ZiB3ZSBhbHJlYWR5IGhhdmUgYSB2YWxpZCBhc3NpZ25lZCBjb250ZXh0LCBza2lwIGFsbCB0 aGF0ICovCkBAIC0yMTIsNyArMjE1LDkgQEAKICNpZmRlZiBDT05GSUdfU01QCiAJCWlmIChu dW1fb25saW5lX2NwdXMoKSA+IDEpIHsKIAkJCWlkID0gc3RlYWxfY29udGV4dF9zbXAoaWQp OwotCQkJZ290byBzdG9sZW47CisJCQlpZiAoaWQgPT0gTU1VX05PX0NPTlRFWFQpCisJCQkJ Z290byBhZ2FpbjsKKwkJZ290byBzdG9sZW47CiAJCX0KICNlbmRpZiAvKiBDT05GSUdfU01Q ICovCiAJCWlkID0gc3RlYWxfY29udGV4dF91cChpZCk7CkBAIC0yNzIsNiArMjc3LDcgQEAK ICAqLwogdm9pZCBkZXN0cm95X2NvbnRleHQoc3RydWN0IG1tX3N0cnVjdCAqbW0pCiB7CisJ dW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBpbnQgaWQ7CiAKIAlpZiAobW0tPmNv bnRleHQuaWQgPT0gTU1VX05PX0NPTlRFWFQpCkBAIC0yNzksMTggKzI4NSwxOCBAQAogCiAJ V0FSTl9PTihtbS0+Y29udGV4dC5hY3RpdmUgIT0gMCk7CiAKLQlzcGluX2xvY2soJmNvbnRl eHRfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNvbnRleHRfbG9jaywgZmxhZ3MpOwog CWlkID0gbW0tPmNvbnRleHQuaWQ7CiAJaWYgKGlkICE9IE1NVV9OT19DT05URVhUKSB7CiAJ CV9fY2xlYXJfYml0KGlkLCBjb250ZXh0X21hcCk7CiAJCW1tLT5jb250ZXh0LmlkID0gTU1V X05PX0NPTlRFWFQ7CiAjaWZkZWYgREVCVUdfTUFQX0NPTlNJU1RFTkNZCiAJCW1tLT5jb250 ZXh0LmFjdGl2ZSA9IDA7Ci0JCWNvbnRleHRfbW1baWRdID0gTlVMTDsKICNlbmRpZgorCQlj b250ZXh0X21tW2lkXSA9IE5VTEw7CiAJCW5yX2ZyZWVfY29udGV4dHMrKzsKIAl9Ci0Jc3Bp bl91bmxvY2soJmNvbnRleHRfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29u dGV4dF9sb2NrLCBmbGFncyk7CiB9CiAKICNpZmRlZiBDT05GSUdfU01QCkBAIC0zODAsNyAr Mzg2LDcgQEAKICNlbmRpZgogCiAJcHJpbnRrKEtFUk5fSU5GTwotCSAgICAgICAiTU1VOiBB bGxvY2F0ZWQgJWQgYnl0ZXMgb2YgY29udGV4dCBtYXBzIGZvciAlZCBjb250ZXh0c1xuIiwK KwkgICAgICAgIk1NVTogQWxsb2NhdGVkICV6dSBieXRlcyBvZiBjb250ZXh0IG1hcHMgZm9y ICVkIGNvbnRleHRzXG4iLAogCSAgICAgICAyICogQ1RYX01BUF9TSVpFICsgKHNpemVvZih2 b2lkICopICogKGxhc3RfY29udGV4dCArIDEpKSwKIAkgICAgICAgbGFzdF9jb250ZXh0IC0g Zmlyc3RfY29udGV4dCArIDEpOwogCmRpZmYgLXUgLS1uZXctZmlsZSAtLXJlY3Vyc2l2ZSBs aW51eC0yLjYuMjkuNi5vcmlnL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9jcGNpNjIw MC5jIGxpbnV4LTIuNi4yOS42Lm1vZC9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvY3Bj aTYyMDAuYwotLS0gbGludXgtMi42LjI5LjYub3JpZy9hcmNoL3Bvd2VycGMvcGxhdGZvcm1z Lzg1eHgvY3BjaTYyMDAuYwkxOTY5LTEyLTMxIDE3OjAwOjAwLjAwMDAwMDAwMCAtMDcwMAor KysgbGludXgtMi42LjI5LjYubW9kL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9jcGNp NjIwMC5jCTIwMDktMDktMDIgMTA6MzE6MzEuMDAwMDAwMDAwIC0wNzAwCkBAIC0wLDAgKzEs MTg2OCBAQAorLyoKKyAqIENQQ0k2MjAwIHNldHVwIGFuZCBlYXJseSBib290IGNvZGUgcGx1 cyBvdGhlciByYW5kb20gYml0cy4KKyAqCisgKiBBdXRob3I6IEFqaXQgUHJlbQorICoKKyAq IENvcHlyaWdodCAyMDA4IEVtZXJzb24gTmV0d29yayBQb3dlciBFbWJlZGRlZCBDb21wdXRp bmcsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh biByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVy bXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5 IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBv ZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJz aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KKyNpbmNsdWRlIDxsaW51 eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgv cmVib290Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgva2Rl dl90Lmg+CisjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Rl bGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9p bml0cmQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9p bnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9yb290X2Rldi5oPgorI2luY2x1ZGUgPGxp bnV4L3J0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KKyNpbmNsdWRlIDxsaW51 eC9mc2xfZGV2aWNlcy5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisKKyNp bmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNs dWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlIDxh c20vdGltZS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9tYWNoZGVw Lmg+CisjaW5jbHVkZSA8YXNtL3BjaS1icmlkZ2UuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+ CisjaW5jbHVkZSA8bW0vbW11X2RlY2wuaD4KKyNpbmNsdWRlIDxhc20vcHJvbS5oPgorI2lu Y2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL2ttYXBfdHlwZXMuaD4KKyNpbmNs dWRlIDxhc20vZWRhYy5oPgorI2luY2x1ZGUgPGFzbS91ZGJnLmg+CisjaW5jbHVkZSA8YXNt L21waWMuaD4KKworI2luY2x1ZGUgPHN5c2Rldi9mc2xfc29jLmg+CisjaW5jbHVkZSA8c3lz ZGV2L2ZzbF9wY2kuaD4KKworI2luY2x1ZGUgImNwY2k2MjAwLmgiCisKK2V4dGVybiB1bnNp Z25lZCBsb25nIGlzYV9pb19iYXNlOworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBoYl9iYWRk cjsKK3N0YXRpYwl2b2lkIF9faW9tZW0gKnN5c3RlbV9jb250cm9sX3JlZ19hZGRyOworc3Rh dGljIGludCBzZXJpYWxfaXJxOworCitzdGF0aWMgdm9pZCBfX2lvbWVtICpsMl9lcnJfcmVn czsKKworI2RlZmluZSBMMl9FUlJfUkVHU19PRkZTRVQgICAgICAweDIwRTIwCisjZGVmaW5l IEwyX0VSUl9SRUdTX1NJWkUgICAgICAgIDB4M0MKKworI2RlZmluZSBMMl9DQVBUX0RBVEFf SEkgICAgICAgICAweDIwRTIwCisjZGVmaW5lIEwyX0NBUFRfREFUQV9MTyAgICAgICAgIDB4 MjBFMjQKKyNkZWZpbmUgTDJfQ0FQVF9FQ0MgICAgICAgICAgICAgMHgyMEUyOAorI2RlZmlu ZSBMMl9FUlJfREVUICAgICAgICAgICAgICAweDIwRTQwCisjZGVmaW5lIEwyX0VSUl9ESVMg ICAgICAgICAgICAgIDB4MjBFNDQKKyNkZWZpbmUgTDJfRVJSX0lOVF9FTiAgICAgICAgICAg MHgyMEU0OAorI2RlZmluZSBMMl9FUlJfQVRUUiAgICAgICAgICAgICAweDIwRTRDCisjZGVm aW5lIEwyX0VSUl9BRERSX0hJICAgICAgICAgIDB4MjBFNTAKKyNkZWZpbmUgTDJfRVJSX0FE RFJfTE8gICAgICAgICAgMHgyMEU1NAorI2RlZmluZSBMMl9FUlJfQ1RMICAgICAgICAgICAg ICAweDIwRTU4CisKKyNpZmRlZiBDT05GSUdfQ1BDSTYyMDBfRU5BQkxFX0wyX0VSUk9SUwor c3RhdGljIGludCBsMl9pcnE7CitzdGF0aWMgaXJxcmV0dXJuX3QgY3BjaTYyMDBfbDJjYWNo ZV9lcnJfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpOworI2VuZGlmCisKKyNpZmRl ZiBDT05GSUdfQ1BDSTYyMDBfRU5BQkxFX0REUl9FUlJPUlMKKworI2RlZmluZSBERFIxX1JF R1NfT0ZGU0VUICAgICAJMHgyMDAwCisjZGVmaW5lIEREUjJfUkVHU19PRkZTRVQgICAgIAkw eDYwMDAKKyNkZWZpbmUgRERSX0VSUl9SRUdTX09GRlNFVCAgICAgMHhFMDAKKyNkZWZpbmUg RERSX0VSUl9SRUdTX1NJWkUgICAgICAgMHg1QworCisjZGVmaW5lIEREUl9DQVBUX0RBVEFf SEkgICAgICAgIDB4RTIwCisjZGVmaW5lIEREUl9DQVBUX0RBVEFfTE8gICAgICAgIDB4RTI0 CisjZGVmaW5lIEREUl9DQVBUX0VDQyAgICAgICAgICAgIDB4RTI4CisjZGVmaW5lIEREUl9F UlJfREVUICAgICAgICAgICAgIDB4RTQwCisjZGVmaW5lIEREUl9FUlJfRElTICAgICAgICAg ICAgIDB4RTQ0CisjZGVmaW5lIEREUl9FUlJfSU5UX0VOICAgICAgICAgIDB4RTQ4CisjZGVm aW5lIEREUl9DQVBUX0FUVFIgICAgICAgICAgIDB4RTRDCisjZGVmaW5lIEREUl9DQVBUX0FE RFIgICAgICAgICAgIDB4RTUwCisjZGVmaW5lIEREUl9DQVBUX0VYVF9BRERSICAgICAgIDB4 RTU0CisjZGVmaW5lIEREUl9FUlJfU0JFICAgICAgICAgICAgIDB4RTU4CisKKyNkZWZpbmUg RERSX1NCRSAgICAgICAgICAgICAgICAgMHg0CS8qIHNpbmdsZS1iaXQgRUNDIGVycm9yICov CisjZGVmaW5lIEREUl9NQkUgICAgICAgICAgICAgICAgIDB4OAkvKiBtdWx0aS1iaXQgRUND IGVycm9yICovCisjZGVmaW5lIEREUl9NTUUgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAJ LyogbXVsdGlwbGUgRUNDIGVycm9yICovCisKK3N0YXRpYyBpbnQgZGRyMV9lcnJvcnM7Citz dGF0aWMgaW50IGRkcjJfZXJyb3JzOworc3RhdGljIHZvaWQgX19pb21lbSAqZGRyMV9lcnJf cmVnczsKK3N0YXRpYyB2b2lkIF9faW9tZW0gKmRkcjJfZXJyX3JlZ3M7CitzdGF0aWMgaW50 IGRkcl9pcnE7CitzdGF0aWMgaXJxcmV0dXJuX3QgY3BjaTYyMDBfZGRyX2Vycl9oYW5kbGVy KGludCBpcnEsIHZvaWQgKmRldl9pZCk7CisKKyNlbmRpZgorCisjZGVmaW5lIFBDSTFfUkVH U19PRkZTRVQJMHg5MDAwCisjZGVmaW5lIFBDSTJfUkVHU19PRkZTRVQJMHhBMDAwCisjZGVm aW5lIFBDSV9FUlJfUkVHU19PRkZTRVQgICAgIDB4RTAwCisjZGVmaW5lIFBDSV9FUlJfUkVH U19TSVpFICAgICAgIDB4MzgKKworI2RlZmluZSBQQ0lfRVJSX0RFVCAgICAgICAgICAgICAw eEUwMAorI2RlZmluZSBQQ0lfRVJSX0lOVF9FTiAgICAgICAgICAweEUwOAorI2RlZmluZSBQ Q0lfRVJSX0NBUF9ESVMgICAgICAgICAweEUxMAorI2RlZmluZSBQQ0lfRVJSX0NBUF9TVEFU ICAgICAgICAweEUyMAorI2RlZmluZSBQQ0lfRVJSX0NBUF9SMCAgICAgICAgICAweEUyOAor I2RlZmluZSBQQ0lfRVJSX0NBUF9SMSAgICAgICAgICAweEUyQworI2RlZmluZSBQQ0lfRVJS X0NBUF9SMiAgICAgICAgICAweEUzMAorI2RlZmluZSBQQ0lfRVJSX0NBUF9SMyAgICAgICAg ICAweEUzNAorCitzdGF0aWMgaW50IHBjaTFfaXJxOworc3RhdGljIGludCBwY2kyX2lycTsK KworI2lmZGVmIENPTkZJR19DUENJNjIwMF9FTkFCTEVfUENJX0VSUk9SUworc3RhdGljIGlu dCBwY2kxX2Vycm9yczsKK3N0YXRpYyB2b2lkIF9faW9tZW0gKnBjaTFfZXJyX3JlZ3M7Citz dGF0aWMgaXJxcmV0dXJuX3QgY3BjaTYyMDBfcGNpMV9lcnJfaGFuZGxlcihpbnQgaXJxLCB2 b2lkICpkZXZfaWQpOworCitzdGF0aWMgaW50IHBjaTJfZXJyb3JzOworc3RhdGljIHZvaWQg X19pb21lbSAqcGNpMl9lcnJfcmVnczsKK3N0YXRpYyBpcnFyZXR1cm5fdCBjcGNpNjIwMF9w Y2kyX2Vycl9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCk7CisjZW5kaWYKKworI2lm ZGVmIENPTkZJR19DUENJNjIwMF9USUNLX1RJTUVSUworaW50IGNwY2k2MjAwX3RpbWVyX2ly cTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1NFTlNPUlNfTE05MAoraW50IG1heGltNjY0 OV9pcnE7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUENJNjIwMF9FTkFCTEVfRERSX0VS Uk9SUworCitzdGF0aWMgdm9pZCBjcGNpNjIwMF9kZXRlcm1pbmVfYml0X2xvY2F0aW9uKHUz MiBkYXRhX2hpLCB1MzIgZGF0YV9sbywKKwkJCQkJICAgIHUzMiBzdG9yZWRfZWNjKQorewor CXUzMiBzeW5kcm9tZV9iaXRzOworCXUzMiBzeW5kcm9tZVs4XTsKKwl1MzIgY2FsY3VsYXRl ZF9lY2MgPSAwOworCWludCBpOworCXUzMiBkYXRhMFszMl0sIGRhdGExWzMyXTsKKwl1bnNp Z25lZCBjaGFyIGJpdHBvc1s4XTsKKworCS8qIEluaXRpYWwgMzItYml0IGRhdGEgKi8KKwlm b3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgeworCQlkYXRhMFtpXSA9IChkYXRhX2hpID4+ICgz MSAtIGkpKSAmIDB4MTsKKwkJZGF0YTFbaV0gPSAoZGF0YV9sbyA+PiAoMzEgLSBpKSkgJiAw eDE7CisJfQorCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJc3luZHJvbWVbaV0gPSAw OworCS8qIENhbGN1bGF0ZSA4LWJpdCBFQ0MgZm9yIHRoZSBmaXJzdCAzMi1iaXQgZGF0YSAq LworCWZvciAoaSA9IDA7IGkgPCAzMjsgKytpKSB7CisJCS8qIENhbGN1bGF0ZSBzeW5kcm9t ZVswXSAqLworCQlpZiAoKGkgPD0gMTUpIHx8IChpID09IDE5KSB8fCAoaSA9PSAyMykgfHwg KGkgPT0gMjcpIHx8CisJCSAgICAoaSA9PSAzMSkpCisJCQlzeW5kcm9tZVswXSA9IHN5bmRy b21lWzBdIF4gKGRhdGEwW2ldICYgMHgxKTsKKworCQkvKiBDYWxjdWxhdGUgc3luZHJvbWVb MV0gKi8KKwkJaWYgKChpID09IDApIHx8IChpID09IDQpIHx8IChpID09IDgpIHx8IChpID09 IDEyKSB8fCAoaSA+PSAxNikpCisJCQlzeW5kcm9tZVsxXSA9IHN5bmRyb21lWzFdIF4gKGRh dGEwW2ldICYgMHgxKTsKKworCQkvKiBDYWxjdWxhdGUgc3luZHJvbWVbMl0gKi8KKwkJaWYg KChpID09IDEpIHx8IChpID09IDUpIHx8IChpID09IDkpIHx8IChpID09IDEzKSB8fAorCQkg ICAgKGkgPT0gMTYpIHx8IChpID09IDIwKSB8fCAoaSA9PSAyNCkgfHwgKGkgPT0gMjgpKQor CQkJc3luZHJvbWVbMl0gPSBzeW5kcm9tZVsyXSBeIChkYXRhMFtpXSAmIDB4MSk7CisKKwkJ LyogQ2FsY3VsYXRlIHN5bmRyb21lWzNdICovCisJCWlmICgoaSA9PSAyKSB8fCAoaSA9PSA2 KSB8fCAoaSA9PSAxMCkgfHwgKGkgPT0gMTQpIHx8CisJCSAgICAoaSA9PSAxNykgfHwgKGkg PT0gMjEpIHx8IChpID09IDI1KSB8fCAoaSA9PSAyOSkpCisJCQlzeW5kcm9tZVszXSA9IHN5 bmRyb21lWzNdIF4gKGRhdGEwW2ldICYgMHgxKTsKKworCQkvKiBDYWxjdWxhdGUgc3luZHJv bWVbNF0gKi8KKwkJaWYgKChpID09IDMpIHx8IChpID09IDcpIHx8IChpID09IDExKSB8fCAo aSA9PSAxNSkgfHwKKwkJICAgIChpID09IDE4KSB8fCAoaSA9PSAxOSkgfHwgKGkgPT0gMjIp IHx8IChpID09IDIzKSB8fAorCQkgICAgKGkgPT0gMjYpIHx8IChpID09IDI3KSB8fCAoaSA9 PSAzMCkgfHwgKGkgPT0gMzEpKQorCQkJc3luZHJvbWVbNF0gPSBzeW5kcm9tZVs0XSBeIChk YXRhMFtpXSAmIDB4MSk7CisKKwkJLyogQ2FsY3VsYXRlIHN5bmRyb21lWzVdICovCisJCWlm ICgoKGkgPj0gNCkgJiYgKGkgPD0gNykpIHx8ICgoaSA+PSAxMikgJiYgKGkgPD0gMTUpKSB8 fAorCQkgICAgKChpID49IDIwKSAmJiAoaSA8PSAyMykpIHx8ICgoaSA+PSAyOCkgJiYgKGkg PD0gMzEpKSkKKwkJCXN5bmRyb21lWzVdID0gc3luZHJvbWVbNV0gXiAoZGF0YTBbaV0gJiAw eDEpOworCisJCS8qIENhbGN1bGF0ZSBzeW5kcm9tZVs2XSAqLworCQlpZiAoKChpID49IDgp ICYmIChpIDw9IDE1KSkgfHwgKChpID49IDI0KSAmJiAoaSA8PSAzMSkpKQorCQkJc3luZHJv bWVbNl0gPSBzeW5kcm9tZVs2XSBeIChkYXRhMFtpXSAmIDB4MSk7CisKKwkJLyogQ2FsY3Vs YXRlIHN5bmRyb21lWzddICovCisJCWlmICgoaSA8PSAzKSB8fCAoKGkgPj0gMTIpICYmIChp IDw9IDE4KSkgfHwKKwkJICAgIChpID09IDIzKSB8fCAoKGkgPj0gMjcpICYmIChpIDw9IDMw KSkpCisJCQlzeW5kcm9tZVs3XSA9IHN5bmRyb21lWzddIF4gKGRhdGEwW2ldICYgMHgxKTsK Kwl9CisKKwkvKiBDYWxjdWxhdGUgOC1iaXQgRUNDIGZvciB0aGUgc2Vjb25kIDMyLWJpdCBk YXRhICovCisJZm9yIChpID0gMDsgaSA8IDMyOyArK2kpIHsKKwkJLyogQ2FsY3VsYXRlIHN5 bmRyb21lWzBdICovCisJCWlmICgoaSA9PSAyKSB8fCAoaSA9PSA2KSB8fCAoaSA9PSAxMCkg fHwgKGkgPT0gMTQpIHx8CisJCSAgICAoaSA9PSAxOSkgfHwgKGkgPT0gMjMpIHx8IChpID09 IDI3KSB8fCAoaSA9PSAyOSkpCisJCQlzeW5kcm9tZVswXSA9IHN5bmRyb21lWzBdIF4gKGRh dGExW2ldICYgMHgxKTsKKworCQkvKiBDYWxjdWxhdGUgc3luZHJvbWVbMV0gKi8KKwkJaWYg KChpID09IDMpIHx8IChpID09IDcpIHx8IChpID09IDExKSB8fCAoaSA9PSAxNSkgfHwKKwkJ ICAgIChpID09IDE2KSB8fCAoaSA9PSAyMCkgfHwgKGkgPT0gMjQpIHx8IChpID09IDMwKSkK KwkJCXN5bmRyb21lWzFdID0gc3luZHJvbWVbMV0gXiAoZGF0YTFbaV0gJiAweDEpOworCisJ CS8qIENhbGN1bGF0ZSBzeW5kcm9tZVsyXSAqLworCQlpZiAoKGkgPD0gMTUpIHx8IChpID09 IDE3KSB8fCAoaSA9PSAyMSkgfHwgKGkgPT0gMjUpIHwKKwkJICAgIChpID09IDMxKSkKKwkJ CXN5bmRyb21lWzJdID0gc3luZHJvbWVbMl0gXiAoZGF0YTFbaV0gJiAweDEpOworCisJCS8q IENhbGN1bGF0ZSBzeW5kcm9tZVszXSAqLworCQlpZiAoKGkgPT0gMCkgfHwgKGkgPT0gNCkg fHwgKGkgPT0gOCkgfHwgKGkgPT0gMTIpIHx8CisJCSAgICAoaSA9PSAxOCkgfHwgKGkgPT0g MjIpIHx8IChpID09IDI2KSB8fCAoaSA+PSAyOCkpCisJCQlzeW5kcm9tZVszXSA9IHN5bmRy b21lWzNdIF4gKGRhdGExW2ldICYgMHgxKTsKKworCQkvKiBDYWxjdWxhdGUgc3luZHJvbWVb NF0gKi8KKwkJaWYgKCgoaSA+PSAxKSAmJiAoaSA8PSAzKSkgfHwgKChpID49IDUpICYmIChp IDw9IDcpKSB8fAorCQkgICAgKChpID49IDkpICYmIChpIDw9IDExKSkgfHwgKChpID49IDEz KSAmJiAoaSA8PSAxNSkpIHx8CisJCSAgICAoKGkgPj0gMjgpICYmIChpIDw9IDMxKSkpCisJ CQlzeW5kcm9tZVs0XSA9IHN5bmRyb21lWzRdIF4gKGRhdGExW2ldICYgMHgxKTsKKworCQkv KiBDYWxjdWxhdGUgc3luZHJvbWVbNV0gKi8KKwkJaWYgKCgoaSA+PSA0KSAmJiAoaSA8PSA3 KSkgfHwgKChpID49IDEyKSAmJiAoaSA8PSAyMykpKQorCQkJc3luZHJvbWVbNV0gPSBzeW5k cm9tZVs1XSBeIChkYXRhMVtpXSAmIDB4MSk7CisKKwkJLyogQ2FsY3VsYXRlIHN5bmRyb21l WzZdICovCisJCWlmICgoKGkgPj0gOCkgJiYgKGkgPD0gMTkpKSB8fCAoKGkgPj0gMjQpICYm IChpIDw9IDMxKSkpCisJCQlzeW5kcm9tZVs2XSA9IHN5bmRyb21lWzZdIF4gKGRhdGExW2ld ICYgMHgxKTsKKworCQkvKiBDYWxjdWxhdGUgc3luZHJvbWVbN10gKi8KKwkJaWYgKChpID09 IDApIHx8IChpID09IDEpIHx8IChpID09IDYpIHx8IChpID09IDcpIHx8CisJCSAgICAoKGkg Pj0gMTApICYmIChpIDw9IDEzKSkgfHwgKChpID49IDIwKSAmJiAoaSA8PSAyNykpIHx8CisJ CSAgICAoKGkgPj0gMjkpICYmIChpIDw9IDMxKSkpCisJCQlzeW5kcm9tZVs3XSA9IHN5bmRy b21lWzddIF4gKGRhdGExW2ldICYgMHgxKTsKKwl9CisKKwljYWxjdWxhdGVkX2VjYyA9ICgo c3luZHJvbWVbN10gPDwgMCkgfCAoc3luZHJvbWVbNl0gPDwgMSkgfAorCQkJICAoc3luZHJv bWVbNV0gPDwgMikgfCAoc3luZHJvbWVbNF0gPDwgMykgfAorCQkJICAoc3luZHJvbWVbM10g PDwgNCkgfCAoc3luZHJvbWVbMl0gPDwgNSkgfAorCQkJICAoc3luZHJvbWVbMV0gPDwgNikg fCAoc3luZHJvbWVbMF0gPDwgNykpOworCisJc3luZHJvbWVfYml0cyA9IGNhbGN1bGF0ZWRf ZWNjIF4gc3RvcmVkX2VjYzsKKworCXN3aXRjaCAoc3luZHJvbWVfYml0cykgeworCWNhc2Ug MHhDMToKKwkJc3ByaW50ZihiaXRwb3MsICIlcyIsICIwIik7CisJCWJyZWFrOworCWNhc2Ug MHhBMToKKwkJc3ByaW50ZihiaXRwb3MsICIlcyIsICIxIik7CisJCWJyZWFrOworCWNhc2Ug MHg5MToKKwkJc3ByaW50ZihiaXRwb3MsICIlcyIsICIyIik7CisJCWJyZWFrOworCWNhc2Ug MHg4OToKKwkJc3ByaW50ZihiaXRwb3MsICIlcyIsICIzIik7CisJCWJyZWFrOworCWNhc2Ug MHhDNDoKKwkJc3ByaW50ZihiaXRwb3MsICIlcyIsICI0Iik7CisJCWJyZWFrOworCWNhc2Ug MHhBNDoKKwkJc3ByaW50ZihiaXRwb3MsICIlcyIsICI1Iik7CisJCWJyZWFrOworCWNhc2Ug MHg5NDoKKwkJc3ByaW50ZihiaXRwb3MsICIlcyIsICI2Iik7CisJCWJyZWFrOworCWNhc2Ug MHg4QzoKKwkJc3ByaW50ZihiaXRwb3MsICIlcyIsICI3Iik7CisJCWJyZWFrOworCWNhc2Ug MHhDMjoKKwkJc3ByaW50ZihiaXRwb3MsICIlcyIsICI4Iik7CisJCWJyZWFrOworCWNhc2Ug MHhBMjoKKwkJc3ByaW50ZihiaXRwb3MsICIlcyIsICI5Iik7CisJCWJyZWFrOworCWNhc2Ug MHg5MjoKKwkJc3ByaW50ZihiaXRwb3MsICIlcyIsICIxMCIpOworCQlicmVhazsKKwljYXNl IDB4OEE6CisJCXNwcmludGYoYml0cG9zLCAiJXMiLCAiMTEiKTsKKwkJYnJlYWs7CisJY2Fz ZSAweEM3OgorCQlzcHJpbnRmKGJpdHBvcywgIiVzIiwgIjEyIik7CisJCWJyZWFrOworCWNh c2UgMHhBNzoKKwkJc3ByaW50ZihiaXRwb3MsICIlcyIsICIxMyIpOworCQlicmVhazsKKwlj YXNlIDB4OTc6CisJCXNwcmludGYoYml0cG9zLCAiJXMiLCAiMTQiKTsKKwkJYnJlYWs7CisJ Y2FzZSAweDhGOgorCQlzcHJpbnRmKGJpdHBvcywgIiVzIiwgIjE1Iik7CisJCWJyZWFrOwor CWNhc2UgMHg2MToKKwkJc3ByaW50ZihiaXRwb3MsICIlcyIsICIxNiIpOworCQlicmVhazsK KwljYXNlIDB4NTE6CisJCXNwcmludGYoYml0cG9zLCAiJXMiLCAiMTciKTsKKwkJYnJlYWs7 CisJY2FzZSAweDQ5OgorCQlzcHJpbnRmKGJpdHBvcywgIiVzIiwgIjE4Iik7CisJCWJyZWFr OworCWNhc2UgMHhDODoKKwkJc3ByaW50ZihiaXRwb3MsICIlcyIsICIxOSIpOworCQlicmVh azsKKwljYXNlIDB4NjQ6CisJCXNwcmludGYoYml0cG9zLCAiJXMiLCAiMjAiKTsKKwkJYnJl YWs7CisJY2FzZSAweDU0OgorCQlzcHJpbnRmKGJpdHBvcywgIiVzIiwgIjIxIik7CisJCWJy ZWFrOworCWNhc2UgMHg0QzoKKwkJc3ByaW50ZihiaXRwb3MsICIlcyIsICIyMiIpOworCQli cmVhazsKKwljYXNlIDB4Q0Q6CisJCXNwcmludGYoYml0cG9zLCAiJXMiLCAiMjMiKTsKKwkJ YnJlYWs7CisJY2FzZSAweDYyOgorCQlzcHJpbnRmKGJpdHBvcywgIiVzIiwgIjI0Iik7CisJ CWJyZWFrOworCWNhc2UgMHg1MjoKKwkJc3ByaW50ZihiaXRwb3MsICIlcyIsICIyNSIpOwor CQlicmVhazsKKwljYXNlIDB4NEE6CisJCXNwcmludGYoYml0cG9zLCAiJXMiLCAiMjYiKTsK KwkJYnJlYWs7CisJY2FzZSAweENCOgorCQlzcHJpbnRmKGJpdHBvcywgIiVzIiwgIjI3Iik7 CisJCWJyZWFrOworCWNhc2UgMHg2NzoKKwkJc3ByaW50ZihiaXRwb3MsICIlcyIsICIyOCIp OworCQlicmVhazsKKwljYXNlIDB4NTc6CisJCXNwcmludGYoYml0cG9zLCAiJXMiLCAiMjki KTsKKwkJYnJlYWs7CisJY2FzZSAweDRGOgorCQlzcHJpbnRmKGJpdHBvcywgIiVzIiwgIjMw Iik7CisJCWJyZWFrOworCWNhc2UgMHhDRToKKwkJc3ByaW50ZihiaXRwb3MsICIlcyIsICIz MSIpOworCQlicmVhazsKKwljYXNlIDB4MzE6CisJCXNwcmludGYoYml0cG9zLCAiJXMiLCAi MzIiKTsKKwkJYnJlYWs7CisJY2FzZSAweDI5OgorCQlzcHJpbnRmKGJpdHBvcywgIiVzIiwg IjMzIik7CisJCWJyZWFrOworCWNhc2UgMHhBODoKKwkJc3ByaW50ZihiaXRwb3MsICIlcyIs ICIzNCIpOworCQlicmVhazsKKwljYXNlIDB4Njg6CisJCXNwcmludGYoYml0cG9zLCAiJXMi LCAiMzUiKTsKKwkJYnJlYWs7CisJY2FzZSAweDM0OgorCQlzcHJpbnRmKGJpdHBvcywgIiVz IiwgIjM2Iik7CisJCWJyZWFrOworCWNhc2UgMHgyQzoKKwkJc3ByaW50ZihiaXRwb3MsICIl cyIsICIzNyIpOworCQlicmVhazsKKwljYXNlIDB4QUQ6CisJCXNwcmludGYoYml0cG9zLCAi JXMiLCAiMzgiKTsKKwkJYnJlYWs7CisJY2FzZSAweDZEOgorCQlzcHJpbnRmKGJpdHBvcywg IiVzIiwgIjM5Iik7CisJCWJyZWFrOworCWNhc2UgMHgzMjoKKwkJc3ByaW50ZihiaXRwb3Ms ICIlcyIsICI0MCIpOworCQlicmVhazsKKwljYXNlIDB4MkE6CisJCXNwcmludGYoYml0cG9z LCAiJXMiLCAiNDEiKTsKKwkJYnJlYWs7CisJY2FzZSAweEFCOgorCQlzcHJpbnRmKGJpdHBv cywgIiVzIiwgIjQyIik7CisJCWJyZWFrOworCWNhc2UgMHg2QjoKKwkJc3ByaW50ZihiaXRw b3MsICIlcyIsICI0MyIpOworCQlicmVhazsKKwljYXNlIDB4Mzc6CisJCXNwcmludGYoYml0 cG9zLCAiJXMiLCAiNDQiKTsKKwkJYnJlYWs7CisJY2FzZSAweDJGOgorCQlzcHJpbnRmKGJp dHBvcywgIiVzIiwgIjQ1Iik7CisJCWJyZWFrOworCWNhc2UgMHhBRToKKwkJc3ByaW50Zihi aXRwb3MsICIlcyIsICI0NiIpOworCQlicmVhazsKKwljYXNlIDB4NkU6CisJCXNwcmludGYo Yml0cG9zLCAiJXMiLCAiNDciKTsKKwkJYnJlYWs7CisJY2FzZSAweDQ2OgorCQlzcHJpbnRm KGJpdHBvcywgIiVzIiwgIjQ4Iik7CisJCWJyZWFrOworCWNhc2UgMHgyNjoKKwkJc3ByaW50 ZihiaXRwb3MsICIlcyIsICI0OSIpOworCQlicmVhazsKKwljYXNlIDB4MTY6CisJCXNwcmlu dGYoYml0cG9zLCAiJXMiLCAiNTAiKTsKKwkJYnJlYWs7CisJY2FzZSAweDg2OgorCQlzcHJp bnRmKGJpdHBvcywgIiVzIiwgIjUxIik7CisJCWJyZWFrOworCWNhc2UgMHg0NToKKwkJc3By aW50ZihiaXRwb3MsICIlcyIsICI1MiIpOworCQlicmVhazsKKwljYXNlIDB4MjU6CisJCXNw cmludGYoYml0cG9zLCAiJXMiLCAiNTMiKTsKKwkJYnJlYWs7CisJY2FzZSAweDE1OgorCQlz cHJpbnRmKGJpdHBvcywgIiVzIiwgIjU0Iik7CisJCWJyZWFrOworCWNhc2UgMHg4NToKKwkJ c3ByaW50ZihiaXRwb3MsICIlcyIsICI1NSIpOworCQlicmVhazsKKwljYXNlIDB4NDM6CisJ CXNwcmludGYoYml0cG9zLCAiJXMiLCAiNTYiKTsKKwkJYnJlYWs7CisJY2FzZSAweDIzOgor CQlzcHJpbnRmKGJpdHBvcywgIiVzIiwgIjU3Iik7CisJCWJyZWFrOworCWNhc2UgMHgxMzoK KwkJc3ByaW50ZihiaXRwb3MsICIlcyIsICI1OCIpOworCQlicmVhazsKKwljYXNlIDB4ODM6 CisJCXNwcmludGYoYml0cG9zLCAiJXMiLCAiNTkiKTsKKwkJYnJlYWs7CisJY2FzZSAweDFB OgorCQlzcHJpbnRmKGJpdHBvcywgIiVzIiwgIjYwIik7CisJCWJyZWFrOworCWNhc2UgMHg5 QjoKKwkJc3ByaW50ZihiaXRwb3MsICIlcyIsICI2MSIpOworCQlicmVhazsKKwljYXNlIDB4 NUI6CisJCXNwcmludGYoYml0cG9zLCAiJXMiLCAiNjIiKTsKKwkJYnJlYWs7CisJY2FzZSAw eDNCOgorCQlzcHJpbnRmKGJpdHBvcywgIiVzIiwgIjYzIik7CisJCWJyZWFrOworCWNhc2Ug MHg4MDoKKwkJc3ByaW50ZihiaXRwb3MsICIlcyIsICJFQ0MtMCIpOworCQlicmVhazsKKwlj YXNlIDB4NDA6CisJCXNwcmludGYoYml0cG9zLCAiJXMiLCAiRUNDLTEiKTsKKwkJYnJlYWs7 CisJY2FzZSAweDIwOgorCQlzcHJpbnRmKGJpdHBvcywgIiVzIiwgIkVDQy0yIik7CisJCWJy ZWFrOworCWNhc2UgMHgxMDoKKwkJc3ByaW50ZihiaXRwb3MsICIlcyIsICJFQ0MtMyIpOwor CQlicmVhazsKKwljYXNlIDB4MDg6CisJCXNwcmludGYoYml0cG9zLCAiJXMiLCAiRUNDLTQi KTsKKwkJYnJlYWs7CisJY2FzZSAweDA0OgorCQlzcHJpbnRmKGJpdHBvcywgIiVzIiwgIkVD Qy01Iik7CisJCWJyZWFrOworCWNhc2UgMHgwMjoKKwkJc3ByaW50ZihiaXRwb3MsICIlcyIs ICJFQ0MtNiIpOworCQlicmVhazsKKwljYXNlIDB4MDE6CisJCXNwcmludGYoYml0cG9zLCAi JXMiLCAiRUNDLTciKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc3ByaW50ZihiaXRwb3Ms ICIlcyIsICJVTktOT1dOIik7CisJCWJyZWFrOworCX0KKwlwcmludGsoS0VSTl9FUlIgIkRE UiBFUlJPUiBDQUxDVUxBVEVEIEVDQzogMHglMDJ4XG4iLCBjYWxjdWxhdGVkX2VjYyk7CisJ cHJpbnRrKEtFUk5fRVJSICJERFIgRVJST1IgU1RPUkVEIEVDQzogMHglMDJ4XG4iLCBzdG9y ZWRfZWNjKTsKKwlwcmludGsoS0VSTl9FUlIgIkREUiBFUlJPUiBFQ0MgU1lORFJPTUU6IDB4 JTAyeFxuIiwKKwkgICAgICAgY2FsY3VsYXRlZF9lY2MgXiBzdG9yZWRfZWNjKTsKKwlwcmlu dGsoS0VSTl9FUlIgIkREUiBFUlJPUiBCSVQgTE9DQVRJT046ICVzXG4iLCBiaXRwb3MpOwor fQorCitzdGF0aWMgaXJxcmV0dXJuX3QgY3BjaTYyMDBfZGRyX2Vycl9oYW5kbGVyKGludCBp cnEsIHZvaWQgKmRldl9pZCkKK3sKKwl1MzIgZXJyX2FkZHIsIGRhdGFfaGksIGRhdGFfbG8s IGVjYywgZXJyX2F0dHIsIGVycl9kZXQsIHNiZV9jb3VudDsKKwl1MzIgcGZuLCBvZmZzZXQ7 CisJc3RydWN0IHBhZ2UgKnBnOworCXZvaWQgKnZpcnRfYWRkcjsKKwl1bnNpZ25lZCBsb25n IGZsYWdzID0gMDsKKwlpbnQgaGFuZGxlZCA9IElSUV9OT05FOworCisJZXJyX2RldCA9IHJl YWRsKGRkcjFfZXJyX3JlZ3MgKyBERFJfRVJSX0RFVCAtIEREUl9FUlJfUkVHU19PRkZTRVQp OworCWlmICghZXJyX2RldCkKKwkJZ290byBjb250cm9sbGVyMjsKKworCS8qIENvbGxlY3Qg ZXJyb3IgaW5mb3JtYXRpb24gZnJvbSB0aGUgZXJyb3IgcmVnaXN0ZXJzICovCisJZXJyX2F0 dHIgPSByZWFkbChkZHIxX2Vycl9yZWdzICsgRERSX0NBUFRfQVRUUiAtIEREUl9FUlJfUkVH U19PRkZTRVQpOworCWRhdGFfaGkgPSByZWFkbChkZHIxX2Vycl9yZWdzICsgRERSX0NBUFRf REFUQV9ISSAtIEREUl9FUlJfUkVHU19PRkZTRVQpOworCWRhdGFfbG8gPSByZWFkbChkZHIx X2Vycl9yZWdzICsgRERSX0NBUFRfREFUQV9MTyAtIEREUl9FUlJfUkVHU19PRkZTRVQpOwor CWVycl9hZGRyID0gcmVhZGwoZGRyMV9lcnJfcmVncyArIEREUl9DQVBUX0FERFIgLSBERFJf RVJSX1JFR1NfT0ZGU0VUKTsKKwllY2MgPSByZWFkbChkZHIxX2Vycl9yZWdzICsgRERSX0NB UFRfRUNDIC0gRERSX0VSUl9SRUdTX09GRlNFVCk7CisJc2JlX2NvdW50ID0gcmVhZGwoZGRy MV9lcnJfcmVncyArIEREUl9FUlJfU0JFIC0gRERSX0VSUl9SRUdTX09GRlNFVCk7CisKKwlk ZHIxX2Vycm9ycysrOworCisJLyogRGlzcGxheSBlcnJvciBpbmZvcm1hdGlvbiAqLworCXBy aW50ayhLRVJOX0VSUiAiRERSIENvbnRyb2xsZXIgMSBFcnJvciFcbiIpOworCXByaW50ayhL RVJOX0VSUiAiRERSIDEgRVJST1IgREVURUNUIFJFRyAweCUwOHhcbiIsIHN3YWIzMihlcnJf ZGV0KSk7CisJcHJpbnRrKEtFUk5fRVJSICJERFIgMSBFUlJPUiBBRERSRVNTIENBUFRVUkUg UkVHIDB4JTA4eFxuIiwKKwkgICAgICAgc3dhYjMyKGVycl9hZGRyKSk7CisJcHJpbnRrKEtF Uk5fRVJSICJERFIgMSBFUlJPUiBEQVRBIEhJR0ggQ0FQVFVSRSBSRUcgMHglMDh4XG4iLAor CSAgICAgICBzd2FiMzIoZGF0YV9oaSkpOworCXByaW50ayhLRVJOX0VSUiAiRERSIDEgRVJS T1IgREFUQSBMT1cgQ0FQVFVSRSBSRUcgMHglMDh4XG4iLAorCSAgICAgICBzd2FiMzIoZGF0 YV9sbykpOworCXByaW50ayhLRVJOX0VSUiAiRERSIDEgRVJST1IgQVRUUklCVVRFUyBDQVBU VVJFIFJFRyAweCUwOHhcbiIsCisJICAgICAgIHN3YWIzMihlcnJfYXR0cikpOworCXByaW50 ayhLRVJOX0VSUiAiRERSIDEgRVJST1IgU0JFIFJFRyAweCUwOHhcbiIsIHN3YWIzMihzYmVf Y291bnQpKTsKKwlwcmludGsoS0VSTl9FUlIgIkREUiAxIEVSUk9SIENPVU5UICV1XG4iLCBk ZHIxX2Vycm9ycyk7CisKKwlpZiAoZXJyX2RldCAmIEREUl9TQkUpIHsKKwkJLyogU2NydWIg YmxvY2sgKi8KKwkJcGZuID0gZXJyX2FkZHIgPj4gUEFHRV9TSElGVDsKKwkJb2Zmc2V0ID0g ZXJyX2FkZHIgJiB+UEFHRV9NQVNLOworCisJCXBnID0gcGZuX3RvX3BhZ2UocGZuKTsKKwor CQlpZiAoUGFnZUhpZ2hNZW0ocGcpKQorCQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJ CXZpcnRfYWRkciA9IGttYXBfYXRvbWljKHBnLCBLTV9CT1VOQ0VfUkVBRCk7CisJCWF0b21p Y19zY3J1Yih2aXJ0X2FkZHIgKyBvZmZzZXQsIDgpOworCQlrdW5tYXBfYXRvbWljKHZpcnRf YWRkciwgS01fQk9VTkNFX1JFQUQpOworCisJCWlmIChQYWdlSGlnaE1lbShwZykpCisJCQls b2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJfQorCisJLyogRGV0ZXJtaW5lIGFuZCBkaXNw bGF5IGJpdCBsb2NhdGlvbiAqLworCWNwY2k2MjAwX2RldGVybWluZV9iaXRfbG9jYXRpb24o c3dhYjMyKGRhdGFfaGkpLAorCQkJCQlzd2FiMzIoZGF0YV9sbyksIHN3YWIzMihlY2MpICYg MHhmZik7CisKKwkvKiBDbGVhciBpbnRlcnJ1cHQgY2F1c2UgcmVnaXN0ZXIgKi8KKwl3cml0 ZWwoZXJyX2RldCwgZGRyMV9lcnJfcmVncyArIEREUl9FUlJfREVUIC0gRERSX0VSUl9SRUdT X09GRlNFVCk7CisKKwkvKiBDbGVhciBjYXB0dXJlIGF0dHJpYnV0ZSByZWdpc3RlciAqLwor CXdyaXRlbCgwLCBkZHIxX2Vycl9yZWdzICsgRERSX0NBUFRfQVRUUiAtIEREUl9FUlJfUkVH U19PRkZTRVQpOworCisJaGFuZGxlZCA9IElSUV9IQU5ETEVEOworCitjb250cm9sbGVyMjoK KwllcnJfZGV0ID0gcmVhZGwoZGRyMl9lcnJfcmVncyArIEREUl9FUlJfREVUIC0gRERSX0VS Ul9SRUdTX09GRlNFVCk7CisJaWYgKCFlcnJfZGV0KQorCQlyZXR1cm4gaGFuZGxlZDsKKwor CS8qIENvbGxlY3QgZXJyb3IgaW5mb3JtYXRpb24gZnJvbSB0aGUgZXJyb3IgcmVnaXN0ZXJz ICovCisJZXJyX2F0dHIgPSByZWFkbChkZHIyX2Vycl9yZWdzICsgRERSX0NBUFRfQVRUUiAt IEREUl9FUlJfUkVHU19PRkZTRVQpOworCWRhdGFfaGkgPSByZWFkbChkZHIyX2Vycl9yZWdz ICsgRERSX0NBUFRfREFUQV9ISSAtIEREUl9FUlJfUkVHU19PRkZTRVQpOworCWRhdGFfbG8g PSByZWFkbChkZHIyX2Vycl9yZWdzICsgRERSX0NBUFRfREFUQV9MTyAtIEREUl9FUlJfUkVH U19PRkZTRVQpOworCWVycl9hZGRyID0gcmVhZGwoZGRyMl9lcnJfcmVncyArIEREUl9DQVBU X0FERFIgLSBERFJfRVJSX1JFR1NfT0ZGU0VUKTsKKwllY2MgPSByZWFkbChkZHIyX2Vycl9y ZWdzICsgRERSX0NBUFRfRUNDIC0gRERSX0VSUl9SRUdTX09GRlNFVCk7CisJc2JlX2NvdW50 ID0gcmVhZGwoZGRyMl9lcnJfcmVncyArIEREUl9FUlJfU0JFIC0gRERSX0VSUl9SRUdTX09G RlNFVCk7CisKKwlkZHIyX2Vycm9ycysrOworCisJLyogRGlzcGxheSBlcnJvciBpbmZvcm1h dGlvbiAqLworCXByaW50ayhLRVJOX0VSUiAiRERSIENvbnRyb2xsZXIgMiBFcnJvciFcbiIp OworCXByaW50ayhLRVJOX0VSUiAiRERSIDIgRVJST1IgREVURUNUIFJFRyAweCUwOHhcbiIs IHN3YWIzMihlcnJfZGV0KSk7CisJcHJpbnRrKEtFUk5fRVJSICJERFIgMiBFUlJPUiBBRERS RVNTIENBUFRVUkUgUkVHIDB4JTA4eFxuIiwKKwkgICAgICAgc3dhYjMyKGVycl9hZGRyKSk7 CisJcHJpbnRrKEtFUk5fRVJSICJERFIgMiBFUlJPUiBEQVRBIEhJR0ggQ0FQVFVSRSBSRUcg MHglMDh4XG4iLAorCSAgICAgICBzd2FiMzIoZGF0YV9oaSkpOworCXByaW50ayhLRVJOX0VS UiAiRERSIDIgRVJST1IgREFUQSBMT1cgQ0FQVFVSRSBSRUcgMHglMDh4XG4iLAorCSAgICAg ICBzd2FiMzIoZGF0YV9sbykpOworCXByaW50ayhLRVJOX0VSUiAiRERSIDIgRVJST1IgQVRU UklCVVRFUyBDQVBUVVJFIFJFRyAweCUwOHhcbiIsCisJICAgICAgIHN3YWIzMihlcnJfYXR0 cikpOworCXByaW50ayhLRVJOX0VSUiAiRERSIDIgRVJST1IgU0JFIFJFRyAweCUwOHhcbiIs IHN3YWIzMihzYmVfY291bnQpKTsKKwlwcmludGsoS0VSTl9FUlIgIkREUiAyIEVSUk9SIENP VU5UICV1XG4iLCBkZHIyX2Vycm9ycyk7CisKKwlpZiAoZXJyX2RldCAmIEREUl9TQkUpIHsK KwkJLyogU2NydWIgYmxvY2sgKi8KKwkJcGZuID0gZXJyX2FkZHIgPj4gUEFHRV9TSElGVDsK KwkJb2Zmc2V0ID0gZXJyX2FkZHIgJiB+UEFHRV9NQVNLOworCisJCXBnID0gcGZuX3RvX3Bh Z2UocGZuKTsKKworCQlpZiAoUGFnZUhpZ2hNZW0ocGcpKQorCQkJbG9jYWxfaXJxX3NhdmUo ZmxhZ3MpOworCisJCXZpcnRfYWRkciA9IGttYXBfYXRvbWljKHBnLCBLTV9CT1VOQ0VfUkVB RCk7CisJCWF0b21pY19zY3J1Yih2aXJ0X2FkZHIgKyBvZmZzZXQsIDgpOworCQlrdW5tYXBf YXRvbWljKHZpcnRfYWRkciwgS01fQk9VTkNFX1JFQUQpOworCisJCWlmIChQYWdlSGlnaE1l bShwZykpCisJCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJfQorCisJLyogRGV0ZXJt aW5lIGFuZCBkaXNwbGF5IGJpdCBsb2NhdGlvbiAqLworCWNwY2k2MjAwX2RldGVybWluZV9i aXRfbG9jYXRpb24oc3dhYjMyKGRhdGFfaGkpLAorCQkJCQlzd2FiMzIoZGF0YV9sbyksIHN3 YWIzMihlY2MpICYgMHhmZik7CisKKwkvKiBDbGVhciBpbnRlcnJ1cHQgY2F1c2UgcmVnaXN0 ZXIgKi8KKwl3cml0ZWwoZXJyX2RldCwgZGRyMl9lcnJfcmVncyArIEREUl9FUlJfREVUIC0g RERSX0VSUl9SRUdTX09GRlNFVCk7CisKKwkvKiBDbGVhciBjYXB0dXJlIGF0dHJpYnV0ZSBy ZWdpc3RlciAqLworCXdyaXRlbCgwLCBkZHIyX2Vycl9yZWdzICsgRERSX0NBUFRfQVRUUiAt IEREUl9FUlJfUkVHU19PRkZTRVQpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorI2Vu ZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BDSTYyMDBfRU5BQkxFX0wyX0VSUk9SUworCitzdGF0 aWMgaXJxcmV0dXJuX3QgY3BjaTYyMDBfbDJjYWNoZV9lcnJfaGFuZGxlcihpbnQgaXJxLCB2 b2lkICpkZXZfaWQpCit7CisJdTMyIGVycl9hZGRyX2hpLCBlcnJfYWRkcl9sbywgZGF0YV9o aSwgZGF0YV9sbywgZWNjLCBlcnJfYXR0ciwgZXJyX2RldDsKKworCWVycl9kZXQgPSByZWFk bChsMl9lcnJfcmVncyArIEwyX0VSUl9ERVQgLSBMMl9FUlJfUkVHU19PRkZTRVQpOworCWlm ICghZXJyX2RldCkKKwkJcmV0dXJuIElSUV9OT05FOworCisJLyogQ29sbGVjdCBlcnJvciBp bmZvcm1hdGlvbiBmcm9tIHRoZSBlcnJvciByZWdpc3RlcnMgKi8KKwllcnJfYXR0ciA9IHJl YWRsKGwyX2Vycl9yZWdzICsgTDJfRVJSX0FUVFIgLSBMMl9FUlJfUkVHU19PRkZTRVQpOwor CWVycl9hZGRyX2hpID0gcmVhZGwobDJfZXJyX3JlZ3MgKyBMMl9FUlJfQUREUl9ISSAtIEwy X0VSUl9SRUdTX09GRlNFVCk7CisJZXJyX2FkZHJfbG8gPSByZWFkbChsMl9lcnJfcmVncyAr IEwyX0VSUl9BRERSX0xPIC0gTDJfRVJSX1JFR1NfT0ZGU0VUKTsKKwlkYXRhX2hpID0gcmVh ZGwobDJfZXJyX3JlZ3MgKyBMMl9DQVBUX0RBVEFfSEkgLSBMMl9FUlJfUkVHU19PRkZTRVQp OworCWRhdGFfbG8gPSByZWFkbChsMl9lcnJfcmVncyArIEwyX0NBUFRfREFUQV9MTyAtIEwy X0VSUl9SRUdTX09GRlNFVCk7CisJZWNjID0gcmVhZGwobDJfZXJyX3JlZ3MgKyBMMl9DQVBU X0VDQyAtIEwyX0VSUl9SRUdTX09GRlNFVCk7CisKKwkvKiBDbGVhciBpbnRlcnJ1cHQgY2F1 c2UgYW5kIGNhcHR1cmUgcmVnaXN0ZXJzICovCisJd3JpdGVsKGVycl9kZXQsIGwyX2Vycl9y ZWdzICsgTDJfRVJSX0RFVCAtIEwyX0VSUl9SRUdTX09GRlNFVCk7CisJd3JpdGVsKDAsIGwy X2Vycl9yZWdzICsgTDJfRVJSX0FUVFIgLSBMMl9FUlJfUkVHU19PRkZTRVQpOworCisJLyog RGlzcGxheSBlcnJvciBpbmZvcm1hdGlvbiAqLworCXByaW50ayhLRVJOX0VSUiAiTDIgQ2Fj aGUgRXJyb3IhXG4iKTsKKwlwcmludGsoS0VSTl9FUlIgIkwyIEVSUk9SIERFVEVDVCBSRUcg MHglMDh4XG4iLCBzd2FiMzIoZXJyX2RldCkpOworCXByaW50ayhLRVJOX0VSUiAiTDIgRVJS T1IgQUREUkVTUyBISUdIIENBUFRVUkUgUkVHIDB4JTA4eFxuIiwKKwkgICAgICAgc3dhYjMy KGVycl9hZGRyX2hpKSk7CisJcHJpbnRrKEtFUk5fRVJSICJMMiBFUlJPUiBBRERSRVNTIExP VyBDQVBUVVJFIFJFRyAweCUwOHhcbiIsCisJICAgICAgIHN3YWIzMihlcnJfYWRkcl9sbykp OworCXByaW50ayhLRVJOX0VSUiAiTDIgRVJST1IgREFUQSBISUdIIENBUFRVUkUgUkVHIDB4 JTA4eFxuIiwKKwkgICAgICAgc3dhYjMyKGRhdGFfaGkpKTsKKwlwcmludGsoS0VSTl9FUlIg IkwyIEVSUk9SIERBVEEgTE9XIENBUFRVUkUgUkVHIDB4JTA4eFxuIiwKKwkgICAgICAgc3dh YjMyKGRhdGFfbG8pKTsKKwlwcmludGsoS0VSTl9FUlIgIkwyIEVSUk9SIEFUVFJJQlVURVMg Q0FQVFVSRSBSRUcgMHglMDh4XG4iLAorCSAgICAgICBzd2FiMzIoZXJyX2F0dHIpKTsKKwlw cmludGsoS0VSTl9FUlIgIkwyIEVSUk9SIFNZTkRST01FIFJFRyAweCUwOHhcbiIsIHN3YWIz MihlY2MpKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKyNlbmRpZgorCisjaWZkZWYg Q09ORklHX0NQQ0k2MjAwX0VOQUJMRV9QQ0lfRVJST1JTCisKK3N0YXRpYyBpcnFyZXR1cm5f dCBjcGNpNjIwMF9wY2kxX2Vycl9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sK Kwl1MzIgZXJyX2RldCwgZXJyX3N0YXR1cywgZXJyX2NhcDAsIGVycl9jYXAxLCBlcnJfY2Fw MiwgZXJyX2NhcDM7CisKKwlpZiAoZGV2X2lkICE9ICZwY2kxX2Vycl9yZWdzKQorCQlyZXR1 cm4gSVJRX05PTkU7CisKKwkvKiBDb2xsZWN0IGVycm9yIGluZm9ybWF0aW9uIGZyb20gdGhl IGVycm9yIHJlZ2lzdGVycyAqLworCWVycl9kZXQgPSByZWFkbChwY2kxX2Vycl9yZWdzICsg UENJX0VSUl9ERVQgLSBQQ0lfRVJSX1JFR1NfT0ZGU0VUKTsKKwlpZiAoIWVycl9kZXQpCisJ CXJldHVybiBJUlFfTk9ORTsKKworCWVycl9zdGF0dXMgPQorCSAgICByZWFkbChwY2kxX2Vy cl9yZWdzICsgUENJX0VSUl9DQVBfU1RBVCAtIFBDSV9FUlJfUkVHU19PRkZTRVQpOworCWVy cl9jYXAwID0gcmVhZGwocGNpMV9lcnJfcmVncyArIFBDSV9FUlJfQ0FQX1IwIC0gUENJX0VS Ul9SRUdTX09GRlNFVCk7CisJZXJyX2NhcDEgPSByZWFkbChwY2kxX2Vycl9yZWdzICsgUENJ X0VSUl9DQVBfUjEgLSBQQ0lfRVJSX1JFR1NfT0ZGU0VUKTsKKwllcnJfY2FwMiA9IHJlYWRs KHBjaTFfZXJyX3JlZ3MgKyBQQ0lfRVJSX0NBUF9SMiAtIFBDSV9FUlJfUkVHU19PRkZTRVQp OworCWVycl9jYXAzID0gcmVhZGwocGNpMV9lcnJfcmVncyArIFBDSV9FUlJfQ0FQX1IzIC0g UENJX0VSUl9SRUdTX09GRlNFVCk7CisKKwlwY2kxX2Vycm9ycysrOworCS8qIERpc3BsYXkg ZXJyb3IgaW5mb3JtYXRpb24gKi8KKwlwcmludGsoS0VSTl9FUlIgIlBDSSBDb250cm9sbGVy IDEgRXJyb3IhXG4iKTsKKwlwcmludGsoS0VSTl9FUlIgIlBDSSBFUlJPUiBERVRFQ1QgUkVH IDB4JTA4eFxuIiwgc3dhYjMyKGVycl9kZXQpKTsKKwlwcmludGsoS0VSTl9FUlIgIlBDSSBF UlIgQ0FQIFNUQVRVUyBSRUcgMHglMDh4XG4iLCBzd2FiMzIoZXJyX3N0YXR1cykpOworCXBy aW50ayhLRVJOX0VSUiAiUENJIEVSUiBDQVAgUkVHMCAweCUwOHhcbiIsIHN3YWIzMihlcnJf Y2FwMCkpOworCXByaW50ayhLRVJOX0VSUiAiUENJIEVSUiBDQVAgUkVHMSAweCUwOHhcbiIs IHN3YWIzMihlcnJfY2FwMSkpOworCXByaW50ayhLRVJOX0VSUiAiUENJIEVSUiBDQVAgUkVH MiAweCUwOHhcbiIsIHN3YWIzMihlcnJfY2FwMikpOworCXByaW50ayhLRVJOX0VSUiAiUENJ IEVSUiBDQVAgUkVHMyAweCUwOHhcbiIsIHN3YWIzMihlcnJfY2FwMykpOworCXByaW50ayhL RVJOX0VSUiAiUENJIEVycm9yIENvdW50OiAldVxuIiwgcGNpMV9lcnJvcnMpOworCisJLyog Q2xlYXIgaW50ZXJydXB0IGNhdXNlIGFuZCBjYXB0dXJlIHJlZ2lzdGVycyAqLworCXdyaXRl bChlcnJfZGV0LCBwY2kxX2Vycl9yZWdzICsgUENJX0VSUl9ERVQgLSBQQ0lfRVJSX1JFR1Nf T0ZGU0VUKTsKKwl3cml0ZWwoc3dhYjMyKDB4MSksCisJICAgICAgIHBjaTFfZXJyX3JlZ3Mg KyBQQ0lfRVJSX0NBUF9TVEFUIC0gUENJX0VSUl9SRUdTX09GRlNFVCk7CisKKwlyZXR1cm4g SVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBjcGNpNjIwMF9wY2kyX2Vy cl9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwl1MzIgZXJyX2RldCwgZXJy X3N0YXR1cywgZXJyX2NhcDAsIGVycl9jYXAxLCBlcnJfY2FwMiwgZXJyX2NhcDM7CisKKwlp ZiAoZGV2X2lkICE9ICZwY2kyX2Vycl9yZWdzKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwkv KiBDb2xsZWN0IGVycm9yIGluZm9ybWF0aW9uIGZyb20gdGhlIGVycm9yIHJlZ2lzdGVycyAq LworCWVycl9kZXQgPSByZWFkbChwY2kyX2Vycl9yZWdzICsgUENJX0VSUl9ERVQgLSBQQ0lf RVJSX1JFR1NfT0ZGU0VUKTsKKwlpZiAoIWVycl9kZXQpCisJCXJldHVybiBJUlFfTk9ORTsK KworCWVycl9zdGF0dXMgPQorCSAgICByZWFkbChwY2kyX2Vycl9yZWdzICsgUENJX0VSUl9D QVBfU1RBVCAtIFBDSV9FUlJfUkVHU19PRkZTRVQpOworCWVycl9jYXAwID0gcmVhZGwocGNp Ml9lcnJfcmVncyArIFBDSV9FUlJfQ0FQX1IwIC0gUENJX0VSUl9SRUdTX09GRlNFVCk7CisJ ZXJyX2NhcDEgPSByZWFkbChwY2kyX2Vycl9yZWdzICsgUENJX0VSUl9DQVBfUjEgLSBQQ0lf RVJSX1JFR1NfT0ZGU0VUKTsKKwllcnJfY2FwMiA9IHJlYWRsKHBjaTJfZXJyX3JlZ3MgKyBQ Q0lfRVJSX0NBUF9SMiAtIFBDSV9FUlJfUkVHU19PRkZTRVQpOworCWVycl9jYXAzID0gcmVh ZGwocGNpMl9lcnJfcmVncyArIFBDSV9FUlJfQ0FQX1IzIC0gUENJX0VSUl9SRUdTX09GRlNF VCk7CisKKwlwY2kyX2Vycm9ycysrOworCS8qIERpc3BsYXkgZXJyb3IgaW5mb3JtYXRpb24g Ki8KKwlwcmludGsoS0VSTl9FUlIgIlBDSSBDb250cm9sbGVyIDIgRXJyb3IhXG4iKTsKKwlw cmludGsoS0VSTl9FUlIgIlBDSSBFUlJPUiBERVRFQ1QgUkVHIDB4JTA4eFxuIiwgc3dhYjMy KGVycl9kZXQpKTsKKwlwcmludGsoS0VSTl9FUlIgIlBDSSBFUlIgQ0FQIFNUQVRVUyBSRUcg MHglMDh4XG4iLCBzd2FiMzIoZXJyX3N0YXR1cykpOworCXByaW50ayhLRVJOX0VSUiAiUENJ IEVSUiBDQVAgUkVHMCAweCUwOHhcbiIsIHN3YWIzMihlcnJfY2FwMCkpOworCXByaW50ayhL RVJOX0VSUiAiUENJIEVSUiBDQVAgUkVHMSAweCUwOHhcbiIsIHN3YWIzMihlcnJfY2FwMSkp OworCXByaW50ayhLRVJOX0VSUiAiUENJIEVSUiBDQVAgUkVHMiAweCUwOHhcbiIsIHN3YWIz MihlcnJfY2FwMikpOworCXByaW50ayhLRVJOX0VSUiAiUENJIEVSUiBDQVAgUkVHMyAweCUw OHhcbiIsIHN3YWIzMihlcnJfY2FwMykpOworCXByaW50ayhLRVJOX0VSUiAiUENJIEVycm9y IENvdW50OiAldVxuIiwgcGNpMl9lcnJvcnMpOworCisJLyogQ2xlYXIgaW50ZXJydXB0IGNh dXNlIGFuZCBjYXB0dXJlIHJlZ2lzdGVycyAqLworCXdyaXRlbChlcnJfZGV0LCBwY2kyX2Vy cl9yZWdzICsgUENJX0VSUl9ERVQgLSBQQ0lfRVJSX1JFR1NfT0ZGU0VUKTsKKwl3cml0ZWwo c3dhYjMyKDB4MSksCisJICAgICAgIHBjaTJfZXJyX3JlZ3MgKyBQQ0lfRVJSX0NBUF9TVEFU IC0gUENJX0VSUl9SRUdTX09GRlNFVCk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisK KyNlbmRpZgorCitzdGF0aWMgdm9pZCBjcGNpNjIwMF9yZXN0YXJ0KGNoYXIgKmNtZCkKK3sK Kwl2b2xhdGlsZSB1bG9uZyBpID0gMTAwMDAwMDA7CisKKwlsb2NhbF9pcnFfZGlzYWJsZSgp OworCXdyaXRlYihDUENJNjIwMF9CT0FSRF9SRVNFVCwgc3lzdGVtX2NvbnRyb2xfcmVnX2Fk ZHIpOworCisJd2hpbGUgKGktLSA+IDApIDsKKwlwYW5pYygicmVzdGFydCBmYWlsZWRcbiIp OworfQorCitzdGF0aWMgdm9pZCBfX2RldmluaXQgc2tpcF9mYWtlX2JyaWRnZShzdHJ1Y3Qg cGNpX2RldiAqZGV2KQoreworCS8qIE1ha2UgaXQgYW4gZXJyb3IgdG8gc2tpcCB0aGUgZmFr ZSBicmlkZ2UKKwkgKiBpbiBwY2lfc2V0dXBfZGV2aWNlKCkgaW4gcHJvYmUuYyAqLworCWRl di0+aGRyX3R5cGUgPSAweDdmOworfQorCitERUNMQVJFX1BDSV9GSVhVUF9FQVJMWSgweDE5 NTcsIDB4M2ZmZiwgc2tpcF9mYWtlX2JyaWRnZSk7CitERUNMQVJFX1BDSV9GSVhVUF9FQVJM WSgweDNmZmYsIDB4MTk1Nywgc2tpcF9mYWtlX2JyaWRnZSk7CisKK3N0YXRpYyB2b2lkIF9f aW5pdCBjcGNpNjIwMF9pbml0X2lycSh2b2lkKQoreworCXN0cnVjdCBtcGljICptcGljOwor CXN0cnVjdCByZXNvdXJjZSByOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBOVUxMOwor CisJbnAgPSBvZl9maW5kX25vZGVfYnlfdHlwZShucCwgIm9wZW4tcGljIik7CisJaWYgKG5w ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZCBub3QgZmluZCBvcGVuLXBp YyBub2RlXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChvZl9hZGRyZXNzX3RvX3Jlc291 cmNlKG5wLCAwLCAmcikpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gbWFwIG1w aWMgcmVnaXN0ZXIgc3BhY2VcbiIpOworCQlvZl9ub2RlX3B1dChucCk7CisJCXJldHVybjsK Kwl9CisKKwltcGljID0gbXBpY19hbGxvYyhucCwgci5zdGFydCwKKwkJCSAgTVBJQ19QUklN QVJZIHwgTVBJQ19XQU5UU19SRVNFVCB8CisJCQkgIE1QSUNfQklHX0VORElBTiB8IE1QSUNf QlJPS0VOX0ZSUl9OSVJRUyB8CisJCQkgIE1QSUNfU0lOR0xFX0RFU1RfQ1BVLCAwLCAyNTYs ICIgT3BlblBJQyAgIik7CisJQlVHX09OKG1waWMgPT0gTlVMTCk7CisKKwkvKiBSZXR1cm4g dGhlIG1waWMgbm9kZSAqLworCW9mX25vZGVfcHV0KG5wKTsKKworCW1waWNfaW5pdChtcGlj KTsKKworI2lmZGVmIENPTkZJR19DUENJNjIwMF9FTkFCTEVfTDJfRVJST1JTCisJbnAgPSBv Zl9maW5kX25vZGVfYnlfdHlwZShOVUxMLCAibDJfY2FjaGUtY29udHJvbGxlciIpOworCWlm IChucCA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0lORk8KKwkJICAgICAgICJQSUMgaW5p dDogY2Fubm90IGZpbmQgbDJfY2FjaGUtY29udHJvbGxlciBub2RlXG4iKTsKKwl9IGVsc2Ug eworCQlsMl9pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChucCwgMCk7CisJCWlmIChsMl9p cnEgPT0gTk9fSVJRKQorCQkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gbWFwIEwyIGNh Y2hlIGlycVxuIik7CisJCW9mX25vZGVfcHV0KG5wKTsKKwl9CisjZW5kaWYKKworI2lmZGVm IENPTkZJR19DUENJNjIwMF9FTkFCTEVfRERSX0VSUk9SUworCW5wID0gb2ZfZmluZF9ub2Rl X2J5X3R5cGUoTlVMTCwgIm1lbW9yeS1jb250cm9sbGVyIik7CisJaWYgKG5wID09IE5VTEwp IHsKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkgICAgICAgIlBJQyBpbml0OiBjYW5ub3QgZmlu ZCBtZW1vcnktY29udHJvbGxlciBub2RlXG4iKTsKKwl9IGVsc2UgeworCQlkZHJfaXJxID0g aXJxX29mX3BhcnNlX2FuZF9tYXAobnAsIDApOworCQlpZiAoZGRyX2lycSA9PSBOT19JUlEp CisJCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBtYXAgRERSIGlycVxuIik7CisJCW9m X25vZGVfcHV0KG5wKTsKKwl9CisjZW5kaWYKKworCW5wID0gb2ZfZmluZF9ub2RlX2J5X3Bh dGgoIi9wY2lAZjEwMDkwMDAiKTsKKwlpZiAobnAgPT0gTlVMTCkgeworCQlwcmludGsoS0VS Tl9JTkZPICJQSUMgaW5pdDogY2Fubm90IGZpbmQgUENJIDEgbm9kZVxuIik7CisJfSBlbHNl IHsKKwkJcGNpMV9pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChucCwgMCk7CisJCWlmIChw Y2kxX2lycSA9PSBOT19JUlEpCisJCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBtYXAg UENJIDEgaXJxXG4iKTsKKwkJb2Zfbm9kZV9wdXQobnApOworCX0KKworCW5wID0gb2ZfZmlu ZF9ub2RlX2J5X3BhdGgoIi9wY2lAZjEwMGEwMDAiKTsKKwlpZiAobnAgPT0gTlVMTCkgewor CQlwcmludGsoS0VSTl9JTkZPICJQSUMgaW5pdDogY2Fubm90IGZpbmQgUENJIDIgbm9kZVxu Iik7CisJfSBlbHNlIHsKKwkJcGNpMl9pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChucCwg MCk7CisJCWlmIChwY2kyX2lycSA9PSBOT19JUlEpCisJCQlwcmludGsoS0VSTl9FUlIgIlVu YWJsZSB0byBtYXAgUENJIDIgaXJxXG4iKTsKKwkJb2Zfbm9kZV9wdXQobnApOworCX0KKwor I2lmZGVmIENPTkZJR19DUENJNjIwMF9USUNLX1RJTUVSUworCW5wID0gb2ZfZmluZF9ub2Rl X2J5X3BhdGgoIi9ib2FyZF90aW1lcnNAZjIwMjAwMDAiKTsKKwlpZiAobnAgPT0gTlVMTCkg eworCQlwcmludGsoS0VSTl9JTkZPICJQSUMgaW5pdDogY2Fubm90IGZpbmQgdGltZXJzIG5v ZGVcbiIpOworCX0gZWxzZSB7CisJCWNwY2k2MjAwX3RpbWVyX2lycSA9IGlycV9vZl9wYXJz ZV9hbmRfbWFwKG5wLCAwKTsKKwkJaWYgKGNwY2k2MjAwX3RpbWVyX2lycSA9PSBOT19JUlEp CisJCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBtYXAgdGltZXJzIGlycVxuIik7CisJ CW9mX25vZGVfcHV0KG5wKTsKKwl9CisjZW5kaWYKKworCW5wID0gb2ZfZmluZF9ub2RlX2J5 X3BhdGgoIi9zZXJpYWxAZjIwMTMwMDAiKTsKKwlpZiAobnAgPT0gTlVMTCkgeworCQlwcmlu dGsoS0VSTl9JTkZPCisJCSAgICAgICAiUElDIGluaXQ6IGNhbm5vdCBmaW5kIHNlcmlhbEBm MjAxMzAwMCBub2RlXG4iKTsKKwl9IGVsc2UgeworCQlzZXJpYWxfaXJxID0gaXJxX29mX3Bh cnNlX2FuZF9tYXAobnAsIDApOworCQlpZiAoc2VyaWFsX2lycSA9PSBOT19JUlEpCisJCQlw cmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBtYXAgc2VyaWFsQGYyMDEzMDAwIGlycVxuIik7 CisJCW9mX25vZGVfcHV0KG5wKTsKKwl9CisKKwlucCA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRo KCIvc2VyaWFsQGYyMDE0MDAwIik7CisJaWYgKG5wID09IE5VTEwpIHsKKwkJcHJpbnRrKEtF Uk5fSU5GTworCQkgICAgICAgIlBJQyBpbml0OiBjYW5ub3QgZmluZCBzZXJpYWxAZjIwMTQw MDAgbm9kZVxuIik7CisJfSBlbHNlIHsKKwkJc2VyaWFsX2lycSA9IGlycV9vZl9wYXJzZV9h bmRfbWFwKG5wLCAwKTsKKwkJaWYgKHNlcmlhbF9pcnEgPT0gTk9fSVJRKQorCQkJcHJpbnRr KEtFUk5fRVJSICJVbmFibGUgdG8gbWFwIHNlcmlhbEBmMjAxNDAwMCBpcnFcbiIpOworCQlv Zl9ub2RlX3B1dChucCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBfX2luaXQgY3BjaTYyMDBf bWlzY19pbml0KHZvaWQpCit7CisJdm9pZCBfX2lvbWVtICpyZWdfYmxvY2s7CisJdTggcmVn X3ZhbHVlOworCXUzMiByZWczMjsKKwkvLyAgICAgdTMyIHZhbDsKKwlzdHJ1Y3QgZGV2aWNl X25vZGUgKm5wID0gTlVMTDsKKwljb25zdCB1MzIgKnJlZ3M7CisvLyAgICAgIHVuc2lnbmVk IGxvbmcgYTsKKyNpZmRlZiBDT05GSUdfQ1BDSTYyMDBfRU5BQkxFX0REUl9FUlJPUlMKKwl1 MzIgc2JlX2NvdW50OworI2VuZGlmCisKKwlucCA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKG5w LCAic29jIik7CisJaWYgKG5wID09IE5VTEwpIHsKKwkJcHJpbnRrKCJFcnJvcjpDYW5ub3Qg ZmluZCBzb2Mgbm9kZVxuIik7CisJCXJldHVybjsKKwl9CisJcmVncyA9IG9mX2dldF9wcm9w ZXJ0eShucCwgInJlZyIsIE5VTEwpOworCWlmIChyZWdzID09IE5VTEwpIHsKKwkJcHJpbnRr KCJFcnJvcjpDYW5ub3QgZ2V0IHJlZyBwcm9wZXJ0eSBmcm9tIHNvYyBub2RlXG4iKTsKKwkJ b2Zfbm9kZV9wdXQobnApOworCQlyZXR1cm47CisJfSBlbHNlCisJCWhiX2JhZGRyID0gcmVn c1swXTsKKworCW9mX25vZGVfcHV0KG5wKTsKKworI2lmZGVmIENPTkZJR19DUENJNjIwMF9F TkFCTEVfRERSX0VSUk9SUwkvKiBFbmFibGUgRERSIGVycm9yIHJlcG9ydGluZyAqLworCWRk cjFfZXJyX3JlZ3MgPQorCSAgICBpb3JlbWFwKGhiX2JhZGRyICsgRERSMV9SRUdTX09GRlNF VCArIEREUl9FUlJfUkVHU19PRkZTRVQsIEREUl9FUlJfUkVHU19TSVpFKTsKKwkvKiBFbmFi bGUgYWxsIGVycm9yIGRldGVjdGlvbiAqLworCXdyaXRlbCgwLCBkZHIxX2Vycl9yZWdzICsg RERSX0VSUl9ESVMgLSBERFJfRVJSX1JFR1NfT0ZGU0VUKTsKKwkvKiBDbGVhciBsb2dnZWQg RERSIGVycm9ycyAqLworCXdyaXRlbChzd2FiMzIoMHg4MDAwMDAwRCksCisJICAgICAgIGRk cjFfZXJyX3JlZ3MgKyBERFJfRVJSX0RFVCAtIEREUl9FUlJfUkVHU19PRkZTRVQpOworCS8q IFNldCBzaW5nbGUtYml0IGVycm9yIHRocmVzaG9sZCAqLworCXNiZV9jb3VudCA9IDB4MDAw MTAwMDA7CisJd3JpdGVsKHN3YWIzMihzYmVfY291bnQpLAorCSAgICAgICBkZHIxX2Vycl9y ZWdzICsgRERSX0VSUl9TQkUgLSBERFJfRVJSX1JFR1NfT0ZGU0VUKTsKKworCWRkcjJfZXJy X3JlZ3MgPQorCSAgICBpb3JlbWFwKGhiX2JhZGRyICsgRERSMl9SRUdTX09GRlNFVCArIERE Ul9FUlJfUkVHU19PRkZTRVQsIEREUl9FUlJfUkVHU19TSVpFKTsKKwkvKiBFbmFibGUgYWxs IGVycm9yIGRldGVjdGlvbiAqLworCXdyaXRlbCgwLCBkZHIyX2Vycl9yZWdzICsgRERSX0VS Ul9ESVMgLSBERFJfRVJSX1JFR1NfT0ZGU0VUKTsKKwkvKiBDbGVhciBsb2dnZWQgRERSIGVy cm9ycyAqLworCXdyaXRlbChzd2FiMzIoMHg4MDAwMDAwRCksCisJICAgICAgIGRkcjJfZXJy X3JlZ3MgKyBERFJfRVJSX0RFVCAtIEREUl9FUlJfUkVHU19PRkZTRVQpOworCS8qIFNldCBz aW5nbGUtYml0IGVycm9yIHRocmVzaG9sZCAqLworCXNiZV9jb3VudCA9IDB4MDAwMTAwMDA7 CisJd3JpdGVsKHN3YWIzMihzYmVfY291bnQpLAorCSAgICAgICBkZHIyX2Vycl9yZWdzICsg RERSX0VSUl9TQkUgLSBERFJfRVJSX1JFR1NfT0ZGU0VUKTsKKyNlbmRpZgorCisjaWZkZWYg Q09ORklHX0NQQ0k2MjAwX0VOQUJMRV9QQ0lfRVJST1JTCisJcGNpMV9lcnJfcmVncyA9IGlv cmVtYXAoaGJfYmFkZHIgKyBQQ0kxX1JFR1NfT0ZGU0VUICsgCisJCQlQQ0lfRVJSX1JFR1Nf T0ZGU0VULCBQQ0lfRVJSX1JFR1NfU0laRSk7CisJcGNpMl9lcnJfcmVncyA9IGlvcmVtYXAo aGJfYmFkZHIgKyBQQ0kyX1JFR1NfT0ZGU0VUICsgCisJCQlQQ0lfRVJSX1JFR1NfT0ZGU0VU LCBQQ0lfRVJSX1JFR1NfU0laRSk7CisjZW5kaWYKKworCXJlZ19ibG9jayA9IGlvcmVtYXAo Q1BDSTYyMDBfU1lTVEVNX1NUQVRVU19SRUcsIDY0KTsKKworCS8qIFR1cm4gb24gVVNSMiBH cmVlbiBMRUQgKi8KKwlyZWdfdmFsdWUgPSByZWFkYihyZWdfYmxvY2sgKyBDUENJNjIwMF9T VEFUVVNfSU5ESUNBVE9SX1JFR19PRkZTRVQpOworCXJlZ192YWx1ZSB8PSBDUENJNjIwMF9V U1IxX0xFRDsKKwl3cml0ZWIocmVnX3ZhbHVlLCByZWdfYmxvY2sgKyBDUENJNjIwMF9TVEFU VVNfSU5ESUNBVE9SX1JFR19PRkZTRVQpOworCS8qIERpc2FibGUgUExELCBJUE1JLCBSVEMs IFRlbXAgU2Vuc29yLCBhbmQgQWJvcnQgaW50ZXJydXB0cyAqLworCXJlZ192YWx1ZSA9IHJl YWRiKHJlZ19ibG9jayArIENQQ0k2MjAwX0lOVEVSUlVQVF9NQVNLX1JFR19PRkZTRVQpOwor CXJlZ192YWx1ZSB8PSBDUENJNjIwMF9DUENJX1BMRF9JTlRfTUFTSyB8IENQQ0k2MjAwX0lQ TUlfSU5UX01BU0sgfAorCSAgICBDUENJNjIwMF9SVENfSU5UX01BU0sgfCBDUENJNjIwMF9U RU1QX0lOVF9NQVNLIHwKKwkgICAgQ1BDSTYyMDBfQUJPUlRfSU5UX01BU0s7CisJd3JpdGVi KHJlZ192YWx1ZSwgcmVnX2Jsb2NrICsgQ1BDSTYyMDBfSU5URVJSVVBUX01BU0tfUkVHX09G RlNFVCk7CisKKwkvKiBUdXJuIG9mZiBOT1IgZmxhc2ggU1cgd3JpdGUtcHJvdGVjdCAqLwor CXJlZ192YWx1ZSA9IHJlYWRiKHJlZ19ibG9jayArIENQQ0k2MjAwX05PUl9GTEFTSF9DVFJM X1NUQVRfUkVHX09GRlNFVCk7CisJcmVnX3ZhbHVlICY9IH5DUENJNjIwMF9OT1JfRkxBU0hf V1BfU1c7CisJd3JpdGViKHJlZ192YWx1ZSwgcmVnX2Jsb2NrICsgQ1BDSTYyMDBfTk9SX0ZM QVNIX0NUUkxfU1RBVF9SRUdfT0ZGU0VUKTsKKworCWlvdW5tYXAocmVnX2Jsb2NrKTsKKwor CS8qIEFsbG93IHdyaXRlIGFjY2VzcyB0byBNUkFNICovCisJcmVnX2Jsb2NrID0gaW9yZW1h cChoYl9iYWRkciArIDB4NTAxMCwgNCk7CisJcmVnMzIgPSBzd2FiMzIocmVhZGwocmVnX2Js b2NrKSk7CisJcmVnMzIgJj0gMHhGRkZGRkVGRjsKKwl3cml0ZWwoc3dhYjMyKHJlZzMyKSwg cmVnX2Jsb2NrKTsKKwlpb3VubWFwKHJlZ19ibG9jayk7CisKKwlzeXN0ZW1fY29udHJvbF9y ZWdfYWRkciA9IGlvcmVtYXAoQ1BDSTYyMDBfU1lTVEVNX0NPTlRST0xfUkVHLCAxKTsKKwor CXJldHVybjsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGNwY2k2MjAwX3BjaWJpb3NfZml4 dXAodm9pZCkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gTlVMTDsKKwl1MzIgdGVtcDsK KworCWlmICgoZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9ORUMsCisJCQkJ ICBQQ0lfREVWSUNFX0lEX05FQ19VU0IsIE5VTEwpKSkgeworCQkvKiBTZXQgU3lzdGVtIENs b2NrIHRvIDQ4TUh6IG9zY2lsbGF0b3IgaW4gRVhUMiByZWdpc3RlciAqLworCQlwY2lfd3Jp dGVfY29uZmlnX2J5dGUoZGV2LCAweGU0LCAweDIwKTsKKwkJLyogbWF4IHBvcnRzID0gMiAq LworCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCAweGUwLCAmdGVtcCk7CisJCXRlbXAg Jj0gfjB4MDAwMDAwMDc7CisJCXRlbXAgfD0gMHgwMDAwMDAwMjsKKwkJcGNpX3dyaXRlX2Nv bmZpZ19kd29yZChkZXYsIDB4ZTAsIHRlbXApOworCX0KKworCWRldiA9IE5VTEw7CisJZm9y X2VhY2hfcGNpX2RldihkZXYpIHsKKwkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgUENJ X0NBQ0hFX0xJTkVfU0laRSwKKwkJCQkgICAgICBMMV9DQUNIRV9CWVRFUyA+PiAyKTsKKwkJ cGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgUENJX0xBVEVOQ1lfVElNRVIsIDB4ODApOwor CX0KKworCWRldiA9IE5VTEw7CisJd2hpbGUgKChkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lf VkVORE9SX0lEX1RVTkRSQSwgMHg4MTE0LAorCQkJCSAgICAgZGV2KSkgIT0gTlVMTCkgewor CQl1MzIgdGVtcDsKKwkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgMHhiYywgJnRlbXAp OworCQl0ZW1wIHw9IDB4MDQwMDAwMDA7CisJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2 LCAweGJjLCB0ZW1wKTsKKwl9CisKKyNpZmRlZiBDT05GSUdfQ1BDSTYyMDBfRU5BQkxFX0wy X0VSUk9SUworCWlmIChyZXF1ZXN0X2lycShsMl9pcnEsIGNwY2k2MjAwX2wyY2FjaGVfZXJy X2hhbmRsZXIsCisJCQlJUlFGX0RJU0FCTEVELCAiTDIgQ2FjaGUgRXJyb3IiLCAodm9pZCAq KSZsMl9pcnEpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkNhbm5vdCBpbnN0YWxsIEwy IGNhY2hlIGVycm9yIGhhbmRsZXJcbiIpOworCX0gZWxzZQorCQl3cml0ZWwoc3dhYjMyKDB4 MUQpLAorCQkgICAgICAgbDJfZXJyX3JlZ3MgKyBMMl9FUlJfSU5UX0VOIC0gTDJfRVJSX1JF R1NfT0ZGU0VUKTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQQ0k2MjAwX0VOQUJMRV9E RFJfRVJST1JTCisJaWYgKHJlcXVlc3RfaXJxKGRkcl9pcnEsIGNwY2k2MjAwX2Rkcl9lcnJf aGFuZGxlciwKKwkJCUlSUUZfRElTQUJMRUQsICJERFIgRXJyb3IiLAorCQkJKHZvaWQgKikm ZGRyMV9lcnJfcmVncykgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ2Fubm90IGluc3Rh bGwgRERSIGVycm9yIGhhbmRsZXJcbiIpOworCX0gZWxzZSB7CisJCXdyaXRlbChzd2FiMzIo MHhEKSwKKwkJICAgICAgIGRkcjFfZXJyX3JlZ3MgKyBERFJfRVJSX0lOVF9FTiAtIEREUl9F UlJfUkVHU19PRkZTRVQpOworCQl3cml0ZWwoc3dhYjMyKDB4RCksCisJCSAgICAgICBkZHIy X2Vycl9yZWdzICsgRERSX0VSUl9JTlRfRU4gLSBERFJfRVJSX1JFR1NfT0ZGU0VUKTsKKwl9 CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUENJNjIwMF9FTkFCTEVfUENJX0VSUk9SUwor CWlmIChyZXF1ZXN0X2lycShwY2kxX2lycSwgY3BjaTYyMDBfcGNpMV9lcnJfaGFuZGxlciwK KwkJCUlSUUZfU0hBUkVELCAiUENJIDEgRXJyb3IiLAorCQkJKHZvaWQgKikmcGNpMV9lcnJf cmVncykgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIkNhbm5vdCBpbnN0 YWxsIFBDSSBFeHByZXNzIFBvcnQgMSBlcnJvciBoYW5kbGVyXG4iKTsKKworCX0gZWxzZSB7 CisJCS8qIEVuYWJsZSBQQ0kgZXJyb3IgZGV0ZWN0aW9uICovCisJCXdyaXRlbCgwLCBwY2kx X2Vycl9yZWdzICsgUENJX0VSUl9DQVBfRElTIC0gUENJX0VSUl9SRUdTX09GRlNFVCk7CisJ CS8qIEVuYWJsZSBhbGwgZXJyb3IgaW50ZXJydXB0cyAqLworCQl3cml0ZWwoc3dhYjMyKDB4 MDBiZmZmMDApLAorCQkgICAgICAgcGNpMV9lcnJfcmVncyArIFBDSV9FUlJfSU5UX0VOIC0g UENJX0VSUl9SRUdTX09GRlNFVCk7CisJfQorCWlmIChyZXF1ZXN0X2lycShwY2kyX2lycSwg Y3BjaTYyMDBfcGNpMl9lcnJfaGFuZGxlciwKKwkJCUlSUUZfU0hBUkVELCAiUENJIDIgRXJy b3IiLAorCQkJKHZvaWQgKikmcGNpMl9lcnJfcmVncykgPCAwKSB7CisJCXByaW50ayhLRVJO X0VSUgorCQkgICAgICAgIkNhbm5vdCBpbnN0YWxsIFBDSSBFeHByZXNzIFBvcnQgMiBlcnJv ciBoYW5kbGVyXG4iKTsKKwl9IGVsc2UgeworCQkvKiBFbmFibGUgUENJIGVycm9yIGRldGVj dGlvbiAqLworCQl3cml0ZWwoMCwgcGNpMl9lcnJfcmVncyArIFBDSV9FUlJfQ0FQX0RJUyAt IFBDSV9FUlJfUkVHU19PRkZTRVQpOworCQkvKiBFbmFibGUgYWxsIGVycm9yIGludGVycnVw dHMgKi8KKwkJd3JpdGVsKHN3YWIzMigweDAwYmZmZjAwKSwKKwkJICAgICAgIHBjaTJfZXJy X3JlZ3MgKyBQQ0lfRVJSX0lOVF9FTiAtIFBDSV9FUlJfUkVHU19PRkZTRVQpOworCX0KKyNl bmRpZgorfQorCit2b2lkIGNwY2k2MjAwX3BjaWJpb3NfZml4dXBfYnVzKHN0cnVjdCBwY2lf YnVzICpidXMpCit7CisJc3RydWN0IHBjaV9kZXYgKmJyaWRnZTsKKwlzdHJ1Y3QgcGNpX2Nv bnRyb2xsZXIgKmhvc2UgPSAoc3RydWN0IHBjaV9jb250cm9sbGVyICopYnVzLT5zeXNkYXRh OworCXN0cnVjdCBwY2lfYnVzX3JlZ2lvbiByZWdpb247CisJdTMyIGw7CisKKwlmc2xfcGNp Ymlvc19maXh1cF9idXMoYnVzKTsKKwlicmlkZ2UgPSBidXMtPnNlbGY7CisJaWYgKCFicmlk Z2UpCisJCXJldHVybjsKKworCWlmIChob3NlLT5nbG9iYWxfbnVtYmVyID09IDApIHsKKwkJ aWYgKChicmlkZ2UtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0ZSRUVTQ0FMRSkgJiYKKwkJ ICAgICgoYnJpZGdlLT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9NUEM4NTcyRSkgfHwKKwkJ ICAgICAoYnJpZGdlLT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9NUEM4NTcyKSkpIHsKKwkJ CWJyaWRnZS0+aXJxID0gcGNpMV9pcnE7CisJCX0KKwl9CisKKwlpZiAoaG9zZS0+Z2xvYmFs X251bWJlciA9PSAxKSB7CisJCXN0cnVjdCBwY2lfYnVzICpwYXJlbnQ7CisKKwkJaWYgKChi cmlkZ2UtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0ZSRUVTQ0FMRSkgJiYKKwkJICAgICgo YnJpZGdlLT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9NUEM4NTcyRSkgfHwKKwkJICAgICAo YnJpZGdlLT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9NUEM4NTcyKSkpIHsKKwkJCWJyaWRn ZS0+aXJxID0gcGNpMl9pcnE7CisJCX0KKworCQlwYXJlbnQgPSBidXMtPnBhcmVudDsKKwor CQlpZiAoYnVzLT5yZXNvdXJjZVsxXSkgeworCQkJcGNpYmlvc19yZXNvdXJjZV90b19idXMo YnJpZGdlLCAmcmVnaW9uLAorCQkJCQkJYnVzLT5yZXNvdXJjZVsxXSk7CisJCQlpZiAoYnVz LT5yZXNvdXJjZVsxXS0+ZmxhZ3MgJiBJT1JFU09VUkNFX01FTSkgeworCQkJCXN0cnVjdCBw Y2lfYnVzICpwYXJlbnQ7CisJCQkJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSAwOworCisJCQkJ cGFyZW50ID0gYnVzLT5wYXJlbnQ7CisJCQkJb2Zmc2V0ID0gaG9zZS0+cGNpX21lbV9vZmZz ZXQ7CisJCQkJaWYgKChicmlkZ2UtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX1BMWCkgJiYK KwkJCQkgICAgKGJyaWRnZS0+ZGV2aWNlID09IDB4ODYyNCkgJiYKKwkJCQkgICAgKGJyaWRn ZS0+ZGV2Zm4gPT0gMCkgJiYgcGFyZW50CisJCQkJICAgICYmIHBhcmVudC0+c2VsZgorCQkJ CSAgICAmJiAocGFyZW50LT5zZWxmLT52ZW5kb3IgPT0KKwkJCQkJUENJX1ZFTkRPUl9JRF9G UkVFU0NBTEUpCisJCQkJICAgICYmCisJCQkJICAgICgocGFyZW50LT5zZWxmLT5kZXZpY2Ug PT0KKwkJCQkgICAgICBQQ0lfREVWSUNFX0lEX01QQzg1NzJFKQorCQkJCSAgICAgfHwgKHBh cmVudC0+c2VsZi0+ZGV2aWNlID09CisJCQkJCSBQQ0lfREVWSUNFX0lEX01QQzg1NzIpKQor CQkJCSAgICAmJiAocGFyZW50LT5zZWxmLT5kZXZmbiA9PSAwKSkgeworCQkJCQlyZWdpb24u c3RhcnQgPSAweGUwMjAwMDAwOworCQkJCQlyZWdpb24uZW5kID0gMHhlN2ZmZmZmZjsKKwkJ CQkJYnVzLT5yZXNvdXJjZVsxXS0+c3RhcnQgPQorCQkJCQkgICAgcmVnaW9uLnN0YXJ0ICsg b2Zmc2V0OworCQkJCQlidXMtPnJlc291cmNlWzFdLT5lbmQgPQorCQkJCQkgICAgcmVnaW9u LmVuZCArIG9mZnNldDsKKworCQkJCQlsID0gKHJlZ2lvbi5zdGFydCA+PiAxNikgJiAweGZm ZjA7CisJCQkJCWwgfD0gcmVnaW9uLmVuZCAmIDB4ZmZmMDAwMDA7CisJCQkJfQorCQkJCXBj aV93cml0ZV9jb25maWdfZHdvcmQoYnJpZGdlLCBQQ0lfTUVNT1JZX0JBU0UsCisJCQkJCQkg ICAgICAgbCk7CisJCQl9CisJCX0KKworCQlpZiAoYnVzLT5yZXNvdXJjZVsyXSkgeworCQkJ cGNpYmlvc19yZXNvdXJjZV90b19idXMoYnJpZGdlLCAmcmVnaW9uLAorCQkJCQkJYnVzLT5y ZXNvdXJjZVsyXSk7CisJCQl7CisJCQkJc3RydWN0IHBjaV9idXMgKnBhcmVudDsKKwkJCQl1 bnNpZ25lZCBsb25nIG9mZnNldCA9IDA7CisKKwkJCQlwYXJlbnQgPSBidXMtPnBhcmVudDsK KwkJCQlvZmZzZXQgPSBob3NlLT5wY2lfbWVtX29mZnNldDsKKworCQkJCS8qIENsZWFyIG91 dCB0aGUgdXBwZXIgMzIgYml0cyBvZiBQUkVGIGxpbWl0LgorCQkJCSAqIElmIFBDSV9QUkVG X0JBU0VfVVBQRVIzMiB3YXMgbm9uLXplcm8sIHRoaXMgCisJCQkJICogdGVtcG9yYXJpbHkg ZGlzYWJsZXMgUFJFRiByYW5nZSwgd2hpY2ggaXMgb2suICovCisJCQkJcGNpX3dyaXRlX2Nv bmZpZ19kd29yZChicmlkZ2UsCisJCQkJCQkgICAgICAgUENJX1BSRUZfTElNSVRfVVBQRVIz MiwKKwkJCQkJCSAgICAgICAwKTsKKwkJCQlpZiAoKGJyaWRnZS0+dmVuZG9yID09IFBDSV9W RU5ET1JfSURfUExYKQorCQkJCSAgICAmJiAoYnJpZGdlLT5kZXZpY2UgPT0gMHg4NjI0KQor CQkJCSAgICAmJiAoYnJpZGdlLT5kZXZmbiA9PSAwKSAmJiBwYXJlbnQKKwkJCQkgICAgJiYg cGFyZW50LT5zZWxmCisJCQkJICAgICYmIChwYXJlbnQtPnNlbGYtPnZlbmRvciA9PQorCQkJ CQlQQ0lfVkVORE9SX0lEX0ZSRUVTQ0FMRSkKKwkJCQkgICAgJiYKKwkJCQkgICAgKChwYXJl bnQtPnNlbGYtPmRldmljZSA9PQorCQkJCSAgICAgIFBDSV9ERVZJQ0VfSURfTVBDODU3MkUp CisJCQkJICAgICB8fCAocGFyZW50LT5zZWxmLT5kZXZpY2UgPT0KKwkJCQkJIFBDSV9ERVZJ Q0VfSURfTVBDODU3MikpCisJCQkJICAgICYmIChwYXJlbnQtPnNlbGYtPmRldmZuID09IDAp KSB7CisJCQkJCXJlZ2lvbi5zdGFydCA9IDB4ZTgwMDAwMDA7CisJCQkJCXJlZ2lvbi5lbmQg PSAweGVmZmZmZmZmOworCQkJCQlidXMtPnJlc291cmNlWzJdLT5zdGFydCA9CisJCQkJCSAg ICByZWdpb24uc3RhcnQgKyBvZmZzZXQ7CisJCQkJCWJ1cy0+cmVzb3VyY2VbMl0tPmVuZCA9 CisJCQkJCSAgICByZWdpb24uZW5kICsgb2Zmc2V0OworCQkJCQlidXMtPnJlc291cmNlWzJd LT5mbGFncyA9CisJCQkJCSAgICBJT1JFU09VUkNFX01FTSB8CisJCQkJCSAgICBJT1JFU09V UkNFX1BSRUZFVENIOworCQkJCQlsID0gKHJlZ2lvbi5zdGFydCA+PiAxNikgJiAweGZmZjA7 CisJCQkJCWwgfD0gcmVnaW9uLmVuZCAmIDB4ZmZmMDAwMDA7CisJCQkJfSBlbHNlIGlmICgo YnJpZGdlLT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9QTFgpCisJCQkJCSAgICYmIChicmlk Z2UtPmRldmljZSA9PSAweDg2MjQpCisJCQkJCSAgICYmIChicmlkZ2UtPmRldmZuID09IDB4 OCkgJiYgcGFyZW50CisJCQkJCSAgICYmIHBhcmVudC0+c2VsZgorCQkJCQkgICAmJiAocGFy ZW50LT5zZWxmLT52ZW5kb3IgPT0KKwkJCQkJICAgICAgIFBDSV9WRU5ET1JfSURfUExYKQor CQkJCQkgICAmJiAocGFyZW50LT5zZWxmLT5kZXZpY2UgPT0gMHg4NjI0KQorCQkJCQkgICAm JiAocGFyZW50LT5zZWxmLT5kZXZmbiA9PSAwKSkgeworCQkJCQlyZWdpb24uc3RhcnQgPSAw eGZmZjAwMDAwOworCQkJCQlyZWdpb24uZW5kID0gMHgwMDBmZmZmZjsKKwkJCQkJYnVzLT5y ZXNvdXJjZVsyXS0+c3RhcnQgPQorCQkJCQkgICAgcmVnaW9uLnN0YXJ0ICsgb2Zmc2V0Owor CQkJCQlidXMtPnJlc291cmNlWzJdLT5lbmQgPQorCQkJCQkgICAgcmVnaW9uLmVuZCArIG9m ZnNldDsKKwkJCQkJYnVzLT5yZXNvdXJjZVsyXS0+ZmxhZ3MgPQorCQkJCQkgICAgSU9SRVNP VVJDRV9NRU0gfAorCQkJCQkgICAgSU9SRVNPVVJDRV9QUkVGRVRDSDsKKwkJCQkJbCA9IDB4 MDAwMGZmZjA7CisJCQkJfSBlbHNlIGlmICgoYnJpZGdlLT52ZW5kb3IgPT0gUENJX1ZFTkRP Ul9JRF9QTFgpCisJCQkJCSAgICYmIChicmlkZ2UtPmRldmljZSA9PSAweDg2MjQpCisJCQkJ CSAgICYmIChicmlkZ2UtPmRldmZuID09IDB4MjApICYmIHBhcmVudAorCQkJCQkgICAmJiBw YXJlbnQtPnNlbGYKKwkJCQkJICAgJiYgKHBhcmVudC0+c2VsZi0+dmVuZG9yID09CisJCQkJ CSAgICAgICBQQ0lfVkVORE9SX0lEX1BMWCkKKwkJCQkJICAgJiYgKHBhcmVudC0+c2VsZi0+ ZGV2aWNlID09IDB4ODYyNCkKKwkJCQkJICAgJiYgKHBhcmVudC0+c2VsZi0+ZGV2Zm4gPT0g MCkpIHsKKwkJCQkJcmVnaW9uLnN0YXJ0ID0gMHhmZmYwMDAwMDsKKwkJCQkJcmVnaW9uLmVu ZCA9IDB4MDAwZmZmZmY7CisJCQkJCWJ1cy0+cmVzb3VyY2VbMl0tPnN0YXJ0ID0KKwkJCQkJ ICAgIHJlZ2lvbi5zdGFydCArIG9mZnNldDsKKwkJCQkJYnVzLT5yZXNvdXJjZVsyXS0+ZW5k ID0KKwkJCQkJICAgIHJlZ2lvbi5lbmQgKyBvZmZzZXQ7CisJCQkJCWJ1cy0+cmVzb3VyY2Vb Ml0tPmZsYWdzID0KKwkJCQkJICAgIElPUkVTT1VSQ0VfTUVNIHwKKwkJCQkJICAgIElPUkVT T1VSQ0VfUFJFRkVUQ0g7CisJCQkJCWwgPSAweDAwMDBmZmYwOworCQkJCX0gZWxzZSBpZiAo KGJyaWRnZS0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfUExYKQorCQkJCQkgICAmJiAoYnJp ZGdlLT5kZXZpY2UgPT0gMHg4NjI0KQorCQkJCQkgICAmJiAoYnJpZGdlLT5kZXZmbiA9PSAw eDI4KSAmJiBwYXJlbnQKKwkJCQkJICAgJiYgcGFyZW50LT5zZWxmCisJCQkJCSAgICYmIChw YXJlbnQtPnNlbGYtPnZlbmRvciA9PQorCQkJCQkgICAgICAgUENJX1ZFTkRPUl9JRF9QTFgp CisJCQkJCSAgICYmIChwYXJlbnQtPnNlbGYtPmRldmljZSA9PSAweDg2MjQpCisJCQkJCSAg ICYmIChwYXJlbnQtPnNlbGYtPmRldmZuID09IDApKSB7CisJCQkJCXJlZ2lvbi5zdGFydCA9 IDB4ZTgwMDAwMDA7CisJCQkJCXJlZ2lvbi5lbmQgPSAweGU4MGZmZmZmOworCQkJCQlidXMt PnJlc291cmNlWzJdLT5zdGFydCA9CisJCQkJCSAgICByZWdpb24uc3RhcnQgKyBvZmZzZXQ7 CisJCQkJCWJ1cy0+cmVzb3VyY2VbMl0tPmVuZCA9CisJCQkJCSAgICByZWdpb24uZW5kICsg b2Zmc2V0OworCQkJCQlidXMtPnJlc291cmNlWzJdLT5mbGFncyA9CisJCQkJCSAgICBJT1JF U09VUkNFX01FTSB8CisJCQkJCSAgICBJT1JFU09VUkNFX1BSRUZFVENIOworCQkJCQlsID0g KHJlZ2lvbi5zdGFydCA+PiAxNikgJiAweGZmZjA7CisJCQkJCWwgfD0gcmVnaW9uLmVuZCAm IDB4ZmZmMDAwMDA7CisJCQkJfSBlbHNlIGlmICgoYnJpZGdlLT52ZW5kb3IgPT0gUENJX1ZF TkRPUl9JRF9UVU5EUkEpCisJCQkJCSAgICYmIChicmlkZ2UtPmRldmljZSA9PSAweDgxMTQp CisJCQkJCSAgICYmIChicmlkZ2UtPmRldmZuID09IDB4MCkgJiYgcGFyZW50CisJCQkJCSAg ICYmIHBhcmVudC0+c2VsZgorCQkJCQkgICAmJiAocGFyZW50LT5zZWxmLT52ZW5kb3IgPT0K KwkJCQkJICAgICAgIFBDSV9WRU5ET1JfSURfUExYKQorCQkJCQkgICAmJiAocGFyZW50LT5z ZWxmLT5kZXZpY2UgPT0gMHg4NjI0KQorCQkJCQkgICAmJiAocGFyZW50LT5zZWxmLT5kZXZm biA9PSAweDI4KSkgeworCQkJCQlyZWdpb24uc3RhcnQgPSAweGU4MDAwMDAwOworCQkJCQly ZWdpb24uZW5kID0gMHhlODBmZmZmZjsKKwkJCQkJYnVzLT5yZXNvdXJjZVsyXS0+c3RhcnQg PQorCQkJCQkgICAgcmVnaW9uLnN0YXJ0ICsgb2Zmc2V0OworCQkJCQlidXMtPnJlc291cmNl WzJdLT5lbmQgPQorCQkJCQkgICAgcmVnaW9uLmVuZCArIG9mZnNldDsKKwkJCQkJYnVzLT5y ZXNvdXJjZVsyXS0+ZmxhZ3MgPQorCQkJCQkgICAgSU9SRVNPVVJDRV9NRU0gfAorCQkJCQkg ICAgSU9SRVNPVVJDRV9QUkVGRVRDSDsKKwkJCQkJbCA9IChyZWdpb24uc3RhcnQgPj4gMTYp ICYgMHhmZmYwOworCQkJCQlsIHw9IHJlZ2lvbi5lbmQgJiAweGZmZjAwMDAwOworCQkJCX0g ZWxzZSBpZiAoKGJyaWRnZS0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfUExYKQorCQkJCQkg ICAmJiAoYnJpZGdlLT5kZXZpY2UgPT0gMHg4NjI0KQorCQkJCQkgICAmJiAoYnJpZGdlLT5k ZXZmbiA9PSAweDMwKSAmJiBwYXJlbnQKKwkJCQkJICAgJiYgcGFyZW50LT5zZWxmCisJCQkJ CSAgICYmIChwYXJlbnQtPnNlbGYtPnZlbmRvciA9PQorCQkJCQkgICAgICAgUENJX1ZFTkRP Ul9JRF9QTFgpCisJCQkJCSAgICYmIChwYXJlbnQtPnNlbGYtPmRldmljZSA9PSAweDg2MjQp CisJCQkJCSAgICYmIChwYXJlbnQtPnNlbGYtPmRldmZuID09IDApKSB7CisJCQkJCXJlZ2lv bi5zdGFydCA9IDB4ZTgxMDAwMDA7CisJCQkJCXJlZ2lvbi5lbmQgPSAweGU4MWZmZmZmOwor CQkJCQlidXMtPnJlc291cmNlWzJdLT5zdGFydCA9CisJCQkJCSAgICByZWdpb24uc3RhcnQg KyBvZmZzZXQ7CisJCQkJCWJ1cy0+cmVzb3VyY2VbMl0tPmVuZCA9CisJCQkJCSAgICByZWdp b24uZW5kICsgb2Zmc2V0OworCQkJCQlidXMtPnJlc291cmNlWzJdLT5mbGFncyA9CisJCQkJ CSAgICBJT1JFU09VUkNFX01FTSB8CisJCQkJCSAgICBJT1JFU09VUkNFX1BSRUZFVENIOwor CQkJCQlsID0gKHJlZ2lvbi5zdGFydCA+PiAxNikgJiAweGZmZjA7CisJCQkJCWwgfD0gcmVn aW9uLmVuZCAmIDB4ZmZmMDAwMDA7CisJCQkJfSBlbHNlIGlmICgoYnJpZGdlLT52ZW5kb3Ig PT0gUENJX1ZFTkRPUl9JRF9UVU5EUkEpCisJCQkJCSAgICYmIChicmlkZ2UtPmRldmljZSA9 PSAweDgxMTQpCisJCQkJCSAgICYmIChicmlkZ2UtPmRldmZuID09IDB4MCkgJiYgcGFyZW50 CisJCQkJCSAgICYmIHBhcmVudC0+c2VsZgorCQkJCQkgICAmJiAocGFyZW50LT5zZWxmLT52 ZW5kb3IgPT0KKwkJCQkJICAgICAgIFBDSV9WRU5ET1JfSURfUExYKQorCQkJCQkgICAmJiAo cGFyZW50LT5zZWxmLT5kZXZpY2UgPT0gMHg4NjI0KQorCQkJCQkgICAmJiAocGFyZW50LT5z ZWxmLT5kZXZmbiA9PSAweDMwKSkgeworCQkJCQlyZWdpb24uc3RhcnQgPSAweGU4MTAwMDAw OworCQkJCQlyZWdpb24uZW5kID0gMHhlODFmZmZmZjsKKwkJCQkJYnVzLT5yZXNvdXJjZVsy XS0+c3RhcnQgPQorCQkJCQkgICAgcmVnaW9uLnN0YXJ0ICsgb2Zmc2V0OworCQkJCQlidXMt PnJlc291cmNlWzJdLT5lbmQgPQorCQkJCQkgICAgcmVnaW9uLmVuZCArIG9mZnNldDsKKwkJ CQkJYnVzLT5yZXNvdXJjZVsyXS0+ZmxhZ3MgPQorCQkJCQkgICAgSU9SRVNPVVJDRV9NRU0g fAorCQkJCQkgICAgSU9SRVNPVVJDRV9QUkVGRVRDSDsKKwkJCQkJbCA9IChyZWdpb24uc3Rh cnQgPj4gMTYpICYgMHhmZmYwOworCQkJCQlsIHw9IHJlZ2lvbi5lbmQgJiAweGZmZjAwMDAw OworCQkJCX0gZWxzZSBpZiAoKGJyaWRnZS0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfUExY KQorCQkJCQkgICAmJiAoYnJpZGdlLT5kZXZpY2UgPT0gMHg4NjI0KQorCQkJCQkgICAmJiAo YnJpZGdlLT5kZXZmbiA9PSAweDQwKSAmJiBwYXJlbnQKKwkJCQkJICAgJiYgcGFyZW50LT5z ZWxmCisJCQkJCSAgICYmIChwYXJlbnQtPnNlbGYtPnZlbmRvciA9PQorCQkJCQkgICAgICAg UENJX1ZFTkRPUl9JRF9QTFgpCisJCQkJCSAgICYmIChwYXJlbnQtPnNlbGYtPmRldmljZSA9 PSAweDg2MjQpCisJCQkJCSAgICYmIChwYXJlbnQtPnNlbGYtPmRldmZuID09IDApKSB7CisJ CQkJCXJlZ2lvbi5zdGFydCA9IDB4ZTgyMDAwMDA7CisJCQkJCXJlZ2lvbi5lbmQgPSAweGVm ZmZmZmZmOworCQkJCQlidXMtPnJlc291cmNlWzJdLT5zdGFydCA9CisJCQkJCSAgICByZWdp b24uc3RhcnQgKyBvZmZzZXQ7CisJCQkJCWJ1cy0+cmVzb3VyY2VbMl0tPmVuZCA9CisJCQkJ CSAgICByZWdpb24uZW5kICsgb2Zmc2V0OworCQkJCQlidXMtPnJlc291cmNlWzJdLT5mbGFn cyA9CisJCQkJCSAgICBJT1JFU09VUkNFX01FTSB8CisJCQkJCSAgICBJT1JFU09VUkNFX1BS RUZFVENIOworCQkJCQlsID0gKHJlZ2lvbi5zdGFydCA+PiAxNikgJiAweGZmZjA7CisJCQkJ CWwgfD0gcmVnaW9uLmVuZCAmIDB4ZmZmMDAwMDA7CisJCQkJfSBlbHNlIGlmICgoYnJpZGdl LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9UVU5EUkEpCisJCQkJCSAgICYmIChicmlkZ2Ut PmRldmljZSA9PSAweDgxMTQpCisJCQkJCSAgICYmIChicmlkZ2UtPmRldmZuID09IDB4MCkg JiYgcGFyZW50CisJCQkJCSAgICYmIHBhcmVudC0+c2VsZgorCQkJCQkgICAmJiAocGFyZW50 LT5zZWxmLT52ZW5kb3IgPT0KKwkJCQkJICAgICAgIFBDSV9WRU5ET1JfSURfUExYKQorCQkJ CQkgICAmJiAocGFyZW50LT5zZWxmLT5kZXZpY2UgPT0gMHg4NjI0KQorCQkJCQkgICAmJiAo cGFyZW50LT5zZWxmLT5kZXZmbiA9PSAweDQwKSkgeworCQkJCQlyZWdpb24uc3RhcnQgPSAw eGU4MjAwMDAwOworCQkJCQlyZWdpb24uZW5kID0gMHhlZmZmZmZmZjsKKwkJCQkJYnVzLT5y ZXNvdXJjZVsyXS0+c3RhcnQgPQorCQkJCQkgICAgcmVnaW9uLnN0YXJ0ICsgb2Zmc2V0Owor CQkJCQlidXMtPnJlc291cmNlWzJdLT5lbmQgPQorCQkJCQkgICAgcmVnaW9uLmVuZCArIG9m ZnNldDsKKwkJCQkJYnVzLT5yZXNvdXJjZVsyXS0+ZmxhZ3MgPQorCQkJCQkgICAgSU9SRVNP VVJDRV9NRU0gfAorCQkJCQkgICAgSU9SRVNPVVJDRV9QUkVGRVRDSDsKKwkJCQkJbCA9IChy ZWdpb24uc3RhcnQgPj4gMTYpICYgMHhmZmYwOworCQkJCQlsIHw9IHJlZ2lvbi5lbmQgJiAw eGZmZjAwMDAwOworCQkJCX0gZWxzZSBpZiAoKGJyaWRnZS0+dmVuZG9yID09IFBDSV9WRU5E T1JfSURfUExYKQorCQkJCQkgICAmJiAoYnJpZGdlLT5kZXZpY2UgPT0gMHg2NTQwKSAKKwkJ CQkJICAgJiYgKGJyaWRnZS0+ZGV2Zm4gPT0gMHgxMCkgJiYgcGFyZW50CisJCQkJCSAgICYm IHBhcmVudC0+c2VsZgorCQkJCQkgICAmJiAocGFyZW50LT5zZWxmLT52ZW5kb3IgPT0KKwkJ CQkJICAgICAgIFBDSV9WRU5ET1JfSURfVFVORFJBKQorCQkJCQkgICAmJiAocGFyZW50LT5z ZWxmLT5kZXZpY2UgPT0gMHg4MTE0KQorCQkJCQkgICAmJiAocGFyZW50LT5zZWxmLT5kZXZm biA9PSAweDApKSB7CisJCQkJCXJlZ2lvbi5zdGFydCA9IDB4ZTgyMDAwMDA7CisJCQkJCXJl Z2lvbi5lbmQgPSAweGVmZmZmZmZmOworCQkJCQlidXMtPnJlc291cmNlWzJdLT5zdGFydCA9 CisJCQkJCSAgICByZWdpb24uc3RhcnQgKyBvZmZzZXQ7CisJCQkJCWJ1cy0+cmVzb3VyY2Vb Ml0tPmVuZCA9CisJCQkJCSAgICByZWdpb24uZW5kICsgb2Zmc2V0OworCQkJCQlidXMtPnJl c291cmNlWzJdLT5mbGFncyA9CisJCQkJCSAgICBJT1JFU09VUkNFX01FTSB8CisJCQkJCSAg ICBJT1JFU09VUkNFX1BSRUZFVENIOworCQkJCQlsID0gKHJlZ2lvbi5zdGFydCA+PiAxNikg JiAweGZmZjA7CisJCQkJCWwgfD0gcmVnaW9uLmVuZCAmIDB4ZmZmMDAwMDA7CisJCQkJfSBl bHNlIGlmICgoYnJpZGdlLT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9QTFgpCisJCQkJCSAg ICYmIChicmlkZ2UtPmRldmljZSA9PSAweDg2MjQpCisJCQkJCSAgICYmIChicmlkZ2UtPmRl dmZuID09IDB4NDgpICYmIHBhcmVudAorCQkJCQkgICAmJiBwYXJlbnQtPnNlbGYKKwkJCQkJ ICAgJiYgKHBhcmVudC0+c2VsZi0+dmVuZG9yID09CisJCQkJCSAgICAgICBQQ0lfVkVORE9S X0lEX1BMWCkKKwkJCQkJICAgJiYgKHBhcmVudC0+c2VsZi0+ZGV2aWNlID09IDB4ODYyNCkK KwkJCQkJICAgJiYgKHBhcmVudC0+c2VsZi0+ZGV2Zm4gPT0gMCkpIHsKKwkJCQkJcmVnaW9u LnN0YXJ0ID0gMHhmZmYwMDAwMDsKKwkJCQkJcmVnaW9uLmVuZCA9IDB4MDAwZmZmZmY7CisJ CQkJCWJ1cy0+cmVzb3VyY2VbMl0tPnN0YXJ0ID0KKwkJCQkJICAgIHJlZ2lvbi5zdGFydCAr IG9mZnNldDsKKwkJCQkJYnVzLT5yZXNvdXJjZVsyXS0+ZW5kID0KKwkJCQkJICAgIHJlZ2lv bi5lbmQgKyBvZmZzZXQ7CisJCQkJCWwgPSAweDAwMDBmZmYwOworCQkJCX0gZWxzZQorCQkJ CQlwY2lfcmVhZF9jb25maWdfZHdvcmQoYnJpZGdlLAorCQkJCQkJCSAgICAgIFBDSV9QUkVG X01FTU9SWV9CQVNFLAorCQkJCQkJCSAgICAgICZsKTsKKwkJCX0KKwkJCXBjaV93cml0ZV9j b25maWdfZHdvcmQoYnJpZGdlLCBQQ0lfUFJFRl9NRU1PUllfQkFTRSwgbCk7CisKKwkJCS8q IENsZWFyIG91dCB0aGUgdXBwZXIgMzIgYml0cyBvZiBQUkVGIGJhc2UuICovCisJCQlwY2lf d3JpdGVfY29uZmlnX2R3b3JkKGJyaWRnZSwgUENJX1BSRUZfQkFTRV9VUFBFUjMyLAorCQkJ CQkgICAgICAgMCk7CisJCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGJyaWRnZSwgUENJX1BS RUZfTElNSVRfVVBQRVIzMiwKKwkJCQkJICAgICAgIDApOworCisJCQlwY2lfd3JpdGVfY29u ZmlnX3dvcmQoYnJpZGdlLCBQQ0lfQlJJREdFX0NPTlRST0wsCisJCQkJCSAgICAgIGJ1cy0+ YnJpZGdlX2N0bCk7CisKKwkJfQorCisJCWlmIChidXMtPnJlc291cmNlWzBdKSB7CisJCQlw Y2liaW9zX3Jlc291cmNlX3RvX2J1cyhicmlkZ2UsICZyZWdpb24sCisJCQkJCQlidXMtPnJl c291cmNlWzBdKTsKKwkJCWlmIChidXMtPnJlc291cmNlWzBdLT5mbGFncyAmIElPUkVTT1VS Q0VfSU8pIHsKKwkJCQlzdHJ1Y3QgcGNpX2J1cyAqcGFyZW50OworCQkJCXVuc2lnbmVkIGxv bmcgb2Zmc2V0ID0gMDsKKwkJCQl1MzIgaW9fdXBwZXIxNjsKKworCQkJCXBhcmVudCA9IGJ1 cy0+cGFyZW50OworCQkJCW9mZnNldCA9CisJCQkJICAgICh1bnNpZ25lZCBsb25nKWhvc2Ut PmlvX2Jhc2VfdmlydCAtCisJCQkJICAgIGlzYV9pb19iYXNlOworCQkJCXBjaV9yZWFkX2Nv bmZpZ19kd29yZChicmlkZ2UsIFBDSV9JT19CQVNFLCAmbCk7CisJCQkJbCAmPSAweGZmZmYw MDAwOworCisJCQkJaWYgKChicmlkZ2UtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0ZSRUVT Q0FMRSkKKwkJCQkgICAgJiYKKwkJCQkgICAgKChicmlkZ2UtPmRldmljZSA9PSBQQ0lfREVW SUNFX0lEX01QQzg1NzJFKQorCQkJCSAgICAgfHwgKGJyaWRnZS0+ZGV2aWNlID09CisJCQkJ CSBQQ0lfREVWSUNFX0lEX01QQzg1NzIpKSkgeworCQkJCQlyZWdpb24uc3RhcnQgPSAweDAw MDAwMDAwOworCQkJCQlyZWdpb24uZW5kID0gMHgwMDdmZmZmZjsKKwkJCQkJYnVzLT5yZXNv dXJjZVswXS0+c3RhcnQgPQorCQkJCQkgICAgcmVnaW9uLnN0YXJ0ICsgb2Zmc2V0OworCQkJ CQlidXMtPnJlc291cmNlWzBdLT5lbmQgPQorCQkJCQkgICAgcmVnaW9uLmVuZCArIG9mZnNl dDsKKworCQkJCQlsID0gKHJlZ2lvbi5zdGFydCA+PiA4KSAmIDB4MDBmMDsKKwkJCQkJbCB8 PSByZWdpb24uZW5kICYgMHhmMDAwOworCQkJCQkvKiBTZXQgdXAgdXBwZXIgMTYgYml0cyBv ZiBJL08gYmFzZSBsaW1pdCAqLworCQkJCQlpb191cHBlcjE2ID0gKHJlZ2lvbi5lbmQgJiAw eGZmZmYwMDAwKSB8CisJCQkJCSAgICAocmVnaW9uLnN0YXJ0ID4+IDE2KTsKKwkJCQkJLyog VGVtcG9yYXJpbHkgZGlzYWJsZSB0aGUgSS9PIHJhbmdlIGJlZm9yZSB1cGRhdGluZyBQQ0lf SU9fQkFTRS4gKi8KKwkJCQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChicmlkZ2UsCisJCQkJ CQkJICAgICAgIFBDSV9JT19CQVNFX1VQUEVSMTYsCisJCQkJCQkJICAgICAgIDB4MDAwMGZm ZmYpOworCQkJCQkvKiBVcGRhdGUgbG93ZXIgMTYgYml0cyBvZiBJL08gYmFzZS9saW1pdC4g Ki8KKwkJCQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChicmlkZ2UsCisJCQkJCQkJICAgICAg IFBDSV9JT19CQVNFLCBsKTsKKwkJCQkJLyogVXBkYXRlIHVwcGVyIDE2IGJpdHMgb2YgSS9P IGJhc2UvbGltaXQuICovCisJCQkJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoYnJpZGdlLAor CQkJCQkJCSAgICAgICBQQ0lfSU9fQkFTRV9VUFBFUjE2LAorCQkJCQkJCSAgICAgICBpb191 cHBlcjE2KTsKKwkJCQl9CisJCQl9CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkCitjcGNp NjIwMF9wY2liaW9zX2ZpeHVwX3Jlc291cmNlcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQorewor CWludCBpOworCisJaWYgKChkZXYtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX1BMWCkgJiYg CisJCSgoZGV2LT5kZXZpY2UgPT0gMHg2NTQwKSB8fCAoZGV2LT5kZXZpY2UgPT0gMHg2NTQx KSB8fCAKKwkJKGRldi0+ZGV2aWNlID09IDB4NjU0MikpKSB7CisJCWZvciAoaSA9IDA7IGkg PCBERVZJQ0VfQ09VTlRfUkVTT1VSQ0U7IGkrKykgeworCQkJc3RydWN0IHJlc291cmNlICpy ZXMgPSAmZGV2LT5yZXNvdXJjZVtpXTsKKwkJCWlmIChyZXMtPmVuZCA+IHJlcy0+c3RhcnQp IHsgICAgCisJCQkJcmVzLT5lbmQgLT0gcmVzLT5zdGFydDsKKwkJCQlyZXMtPnN0YXJ0ID0g MDsKKwkJCQlyZXMtPmZsYWdzIHw9IElPUkVTT1VSQ0VfVU5TRVQ7CisJCQl9CisJCX0KKyAg ICAgICAgfQorfQorCitzdGF0aWMgdm9pZCBjcGNpNjIwMF9pbml0X2NhY2hlcyh2b2lkKQor eworCXZvaWQgX19pb21lbSAqbDJfY3RsX2FkZHI7CisJc3RydWN0IGRldmljZV9ub2RlICpk biA9IE5VTEw7CisJY29uc3QgdTMyICpyZWdzOworCXVpbnQgIHNwcjsKKworCWRuID0gb2Zf ZmluZF9ub2RlX2J5X3R5cGUoZG4sICJzb2MiKTsKKwlpZiAoZG4gPT0gTlVMTCkgeworCQlw cmludGsoIkVycm9yOkNhbm5vdCBmaW5kIHNvYyBub2RlXG4iKTsKKwkJcmV0dXJuOworCX0K KwlyZWdzID0gb2ZfZ2V0X3Byb3BlcnR5KGRuLCAicmVnIiwgTlVMTCk7CisJaWYgKHJlZ3Mg PT0gTlVMTCkgeworCQlwcmludGsoIkVycm9yOkNhbm5vdCBnZXQgcmVnIHByb3BlcnR5IGZy b20gc29jIG5vZGVcbiIpOworCQlyZXR1cm47CisJfSBlbHNlIHsKKwkJaGJfYmFkZHIgPSBy ZWdzWzBdOworCX0KKworCWwyX2Vycl9yZWdzID0gaW9yZW1hcChoYl9iYWRkciArIEwyX0VS Ul9SRUdTX09GRlNFVCwgTDJfRVJSX1JFR1NfU0laRSk7CisKKwlsMl9jdGxfYWRkciA9IGlv cmVtYXAoaGJfYmFkZHIgKyAweDIwMDAwLCA0KTsKKworCS8qIEwxIGluc3QsIEwxIGRhdGEs IGFuZCBMMiBhcmUgZGlzYWJsZWQgYXQgdGhpcyBwb2ludCAqLworCisJLyogRW5hYmxlIEwx IGluc3QgKi8KKwlhc20gdm9sYXRpbGUoIm1zeW5jOyBpc3luYyIpOworCXNwciA9IG1mc3By KFNQUk5fTDFDU1IxKTsKKwlhc20gdm9sYXRpbGUoIm1zeW5jOyBpc3luYyIpOworCW10c3By KFNQUk5fTDFDU1IxLCBzcHIgfCBMMUNTUjFfSUNGSSB8IEwxQ1NSMV9JQ0UgfCBMMUNTUjFf SUNQRSk7CisJYXNtIHZvbGF0aWxlKCJtc3luYzsgaXN5bmMiKTsKKworCS8qIEVuYWJsZSBM MSBkYXRhICovCisJaWYgKCEobWZzcHIoU1BSTl9MMUNTUjApICYgTDFDU1IwX0RDRSkpIHsK KwkJYXNtIHZvbGF0aWxlKCJtc3luYzsgaXN5bmMiKTsKKwkJbXRzcHIoU1BSTl9MMUNTUjAs IDB4MCk7CQkvKiBEaXNhYmxlICovCisJCWFzbSB2b2xhdGlsZSgibXN5bmM7IGlzeW5jIik7 CisJCW10c3ByKFNQUk5fTDFDU1IwLCBMMUNTUjBfRENGSSk7CS8qIEludmFsaWRhdGUgKi8K KwkJYXNtIHZvbGF0aWxlKCJpc3luYzsgc3luYyIpOworCQlzcHIgPSBtZnNwcihTUFJOX0wx Q1NSMCk7CisJCWFzbSB2b2xhdGlsZSgiaXN5bmM7IHN5bmMiKTsKKwkJbXRzcHIoU1BSTl9M MUNTUjAsIHNwciB8IEwxQ1NSMF9EQ0UgfCBMMUNTUjBfRENQRSk7CQkvKiBFbmFibGUgKi8K KwkJYXNtIHZvbGF0aWxlKCJpc3luYzsgc3luYyIpOworCX0KKworCS8qIERpc2FibGUgTDIg Ki8KKwlhc20gdm9sYXRpbGUoIm1zeW5jOyBpc3luYyIpOworCXdyaXRlbCgwLCBsMl9jdGxf YWRkcik7CisJcmVhZGwobDJfY3RsX2FkZHIpOworCWFzbSB2b2xhdGlsZSgibXN5bmM7IGlz eW5jIik7CisJLyogSW52YWxpZGF0ZSBMMiAqLworCXdyaXRlbChzd2FiMzIoMHg0MDAwMDMw MCksIGwyX2N0bF9hZGRyKTsKKwlyZWFkbChsMl9jdGxfYWRkcik7CisJYXNtIHZvbGF0aWxl KCJtc3luYzsgaXN5bmMiKTsKKwkvKiBFbmFibGUgTDIgZXJyb3IgZGV0ZWN0aW9uICovCisJ d3JpdGVsKDAsIGwyX2Vycl9yZWdzICsgTDJfRVJSX0RJUyAtIEwyX0VSUl9SRUdTX09GRlNF VCk7CisJLyogQ2xlYXIgYW55IGxvZ2dlZCBMMiBlcnJvcnMgKi8KKwl3cml0ZWwoc3dhYjMy KDB4MDAwMDAwMUQpLAorCSAgICAgICBsMl9lcnJfcmVncyArIEwyX0VSUl9ERVQgLSBMMl9F UlJfUkVHU19PRkZTRVQpOworCisJYXNtIHZvbGF0aWxlKCJtc3luYzsgaXN5bmMiKTsKKwkv KiBFbmFibGUgTDIgKi8KKwl3cml0ZWwoc3dhYjMyKDB4ODAwMDAzMDApLCBsMl9jdGxfYWRk cik7CisJcmVhZGwobDJfY3RsX2FkZHIpOworCWFzbSB2b2xhdGlsZSgibXN5bmM7IGlzeW5j Iik7CisJLyogQ2xlYXIgTG9ja3MgKi8KKwl3cml0ZWwoc3dhYjMyKDB4ODAwMDA3MDApLCBs Ml9jdGxfYWRkcik7CisJcmVhZGwobDJfY3RsX2FkZHIpOworCWFzbSB2b2xhdGlsZSgibXN5 bmM7IGlzeW5jIik7CisKKwlwcmludGsKKwkgICAgKCJMMiBjYWNoZSBlbmFibGVkICgxTUIg Y2FjaGUsIG5vIG1lbW9yeS1tYXBwZWQgU1JBTSkuIEwyQ1RMIHJlZzogMHgleFxuIiwKKwkg ICAgIHN3YWIzMihyZWFkbChsMl9jdGxfYWRkcikpKTsKKworCWlvdW5tYXAobDJfY3RsX2Fk ZHIpOworCW9mX25vZGVfcHV0KGRuKTsKKworCXJldHVybjsKK30KKworLyoKKyAqIFNldHVw IHRoZSBhcmNoaXRlY3R1cmUKKyAqLworI2lmZGVmIENPTkZJR19TTVAKK2V4dGVybiB2b2lk IF9faW5pdCBtcGM4NXh4X3NtcF9pbml0KHZvaWQpOworI2VuZGlmCisKK3N0YXRpYyB2b2lk IF9faW5pdCBjcGNpNjIwMF9zZXR1cF9hcmNoKHZvaWQpCit7CisJc3RydWN0IGRldmljZV9u b2RlICpucDsKKworCWNwY2k2MjAwX2luaXRfY2FjaGVzKCk7CisKKyNpZmRlZiBDT05GSUdf UENJCisJZm9yX2VhY2hfbm9kZV9ieV90eXBlKG5wLCAicGNpIikgeworCQlpZiAob2ZfZGV2 aWNlX2lzX2NvbXBhdGlibGUobnAsICJmc2wsbXBjODU0MC1wY2kiKSB8fAorCQkgICAgKG9m X2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiZnNsLG1wYzg1NDgtcGNpZSIpKSkgeworCQkJ c3RydWN0IHJlc291cmNlIHJzcmM7CisKKwkJCW9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobnAs IDAsICZyc3JjKTsKKwkJCWlmICgocnNyYy5zdGFydCAmIDB4ZmZmZmYpID09IDB4ODAwMCkK KwkJCQlmc2xfYWRkX2JyaWRnZShucCwgMSk7CisJCQllbHNlCisJCQkJZnNsX2FkZF9icmlk Z2UobnAsIDApOworCQl9CisJfQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfU01QCisJbXBj ODV4eF9zbXBfaW5pdCgpOworI2VuZGlmCisJcHJpbnRrCisJICAgICgiQ1BDSTYyMDAgYm9h cmQgZnJvbSBFbWVyc29uIE5ldHdvcmsgUG93ZXIgRW1iZWRkZWQgQ29tcHV0aW5nXG4iKTsK KworI2lmZGVmICBDT05GSUdfUk9PVF9ORlMKKwlST09UX0RFViA9IFJvb3RfTkZTOworI2Vs c2UKKwlST09UX0RFViA9IFJvb3RfU0RBMjsKKyNlbmRpZgorCWNwY2k2MjAwX21pc2NfaW5p dCgpOworfQorCisjZGVmaW5lIFNQUk5fTDFDRkcwICAgICAweDIwMwkvKiBMMSBDYWNoZSBD b25maWd1cmF0aW9uIFJlZ2lzdGVyIDAgICovCisjZGVmaW5lIFNQUk5fTDFDRkcxICAgICAw eDIwNAkvKiBMMSBDYWNoZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDEgICovCisKK3N0YXRp YyB2b2lkIGNwY2k2MjAwX3Nob3dfY3B1aW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCit7CisJ c3RydWN0IGRldmljZV9ub2RlICpyb290OworCXVpbnQgcHZpZCwgc3ZpZCwgcGhpZDE7CisJ cGh5c19hZGRyX3QgaW1tcl9iYXNlOworCXVpbnQgbWVtc2l6ZSA9IHRvdGFsX21lbW9yeTsK Kwljb25zdCBjaGFyICptb2RlbCA9ICIiOworCXZvaWQgX19pb21lbSAqcmVnX2Jsb2NrOwor CXU4IHJlZ192YWx1ZTsKKwl1MzIgcmVnMzJfdmFsdWU7CisJdm9pZCBfX2lvbWVtICpsMmNh Y2hlX2FkZHI7CisJdTMyIGwxY3NyMCwgbDFjc3IxLCBsMmN0bDsKKwljaGFyIGJ1ZmZbMTZd ID0gIiI7CisKKwlzZXFfcHJpbnRmKG0sICJWZW5kb3JcdFx0OiBGcmVlc2NhbGUgU2VtaWNv bmR1Y3RvclxuIik7CisJcm9vdCA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKCIvIik7CisJaWYg KHJvb3QpCisJCW1vZGVsID0gb2ZfZ2V0X3Byb3BlcnR5KHJvb3QsICJtb2RlbCIsIE5VTEwp OworCXNlcV9wcmludGYobSwgIk1hY2hpbmVcdFx0OiAlc1xuIiwgbW9kZWwpOworCW9mX25v ZGVfcHV0KHJvb3QpOworCisJcHZpZCA9IG1mc3ByKFNQUk5fUFZSKTsKKwlzdmlkID0gbWZz cHIoU1BSTl9TVlIpOworCWltbXJfYmFzZSA9IGdldF9pbW1yYmFzZSgpOworCisJc2VxX3By aW50ZihtLCAiUFZSXHRcdDogMHgleFxuIiwgcHZpZCk7CisJc2VxX3ByaW50ZihtLCAiU1ZS XHRcdDogMHgleFxuIiwgc3ZpZCk7CisJc2VxX3ByaW50ZihtLCAiSElEMFx0XHQ6IDB4JTA4 bHhcbiIsIG1mc3ByKFNQUk5fSElEMCkpOworCXNlcV9wcmludGYobSwgIkhJRDFcdFx0OiAw eCUwOGx4XG4iLCBtZnNwcihTUFJOX0hJRDEpKTsKKwlzZXFfcHJpbnRmKG0sICJDQ1NSIEJh c2VcdDogMHglMDh4XG4iLCBpbW1yX2Jhc2UpOworCisJLyogRGlzcGxheSBjcHUgUGxsIHNl dHRpbmcgKi8KKwlwaGlkMSA9IG1mc3ByKFNQUk5fSElEMSk7CisJc2VxX3ByaW50ZihtLCAi UExMIHNldHRpbmdcdDogMHgleFxuIiwgKChwaGlkMSA+PiAyNCkgJiAweDNmKSk7CisKKwkv KiBEaXNwbGF5IHRoZSBjYWNoZSBzZXR0aW5ncyAqLworCXNlcV9wcmludGYobSwgIlxuQ2Fj aGUgU2V0dGluZ3M6XG5cbiIpOworCWwxY3NyMCA9IG1mc3ByKFNQUk5fTDFDU1IwKTsKKwlz ZXFfcHJpbnRmKG0sICJMMUNTUjAgKEwxIEQtY2FjaGUpXHQ6IDB4JTA4eCAoJXMpXG4iLCBs MWNzcjAsCisJCSAgIChsMWNzcjAgJiAxKSA/ICJvbiIgOiAib2ZmIik7CisJbDFjc3IxID0g bWZzcHIoU1BSTl9MMUNTUjEpOworCXNlcV9wcmludGYobSwgIkwxQ1NSMSAoTDEgSS1jYWNo ZSlcdDogMHglMDh4ICglcylcbiIsIGwxY3NyMSwKKwkJICAgKGwxY3NyMSAmIDEpID8gIm9u IiA6ICJvZmYiKTsKKwlzZXFfcHJpbnRmKG0sICJMMUNGRzBcdFx0XHQ6IDB4JTA4bHhcbiIs IG1mc3ByKFNQUk5fTDFDRkcwKSk7CisJc2VxX3ByaW50ZihtLCAiTDFDRkcxXHRcdFx0OiAw eCUwOGx4XG4iLCBtZnNwcihTUFJOX0wxQ0ZHMSkpOworCisJbDJjYWNoZV9hZGRyID0gaW9y ZW1hcChpbW1yX2Jhc2UgKyAweDIwMDAwLCA0KTsKKwlsMmN0bCA9IHN3YWIzMihyZWFkbChs MmNhY2hlX2FkZHIpKTsKKwlzZXFfcHJpbnRmKG0sICJMMkNUTCAoTDIgY2FjaGUpXHQ6IDB4 JXggKCVzKVxuIiwgbDJjdGwsCisJCSAgIChsMmN0bCAmIDB4ODAwMDAwMDApID8gIm9uIiA6 ICJvZmYiKTsKKwlpb3VubWFwKGwyY2FjaGVfYWRkcik7CisKKwlzZXFfcHJpbnRmKG0sICJc bkJPQVJEIElORk9STUFUSU9OOlxuXG4iKTsKKworCXNlcV9wcmludGYobSwKKwkJICAgIkJv YXJkIFZlbmRvclx0XHQ6IEVtZXJzb24gTmV0d29yayBQb3dlciBFbWJlZGRlZCBDb21wdXRp bmdcbiIpOworCXJlZ19ibG9jayA9IGlvcmVtYXAoQ1BDSTYyMDBfU1lTVEVNX1NUQVRVU19S RUcsIDY0KTsKKworCS8qIERpc3BsYXkgdGhlIGFtb3VudCBvZiBtZW1vcnkgKi8KKwlzZXFf cHJpbnRmKG0sICJNZW1vcnlcdFx0XHQ6ICVkIE1CXG4iLCBtZW1zaXplIC8gKDEwMjQgKiAx MDI0KSk7CisJLyogU3lzdGVtIFN0YXR1cyBSZWdpc3RlciAqLworCXJlZ192YWx1ZSA9IHJl YWRiKHJlZ19ibG9jayk7CisJc2VxX3ByaW50ZihtLCAiMTJWIFBvd2VyIEVuYWJsZSBTdGF0 dXNcdDogJXNcbiIsCisJCSAgICgocmVnX3ZhbHVlICYgQ1BDSTYyMDBfUFdSMTJWX0VOX1NU UykgPyAiRW5hYmxlZCIgOgorCQkgICAgIkRpc2FibGVkIikpOworCXNlcV9wcmludGYobSwg IisxMlYgUG93ZXIgU3RhdHVzXHQ6ICVzXG4iLAorCQkgICAoKHJlZ192YWx1ZSAmIENQQ0k2 MjAwX1BXUl8xMlBfU1RTKSA/ICJHb29kIiA6ICJOb3QgR29vZCIpKTsKKwlzZXFfcHJpbnRm KG0sICItMTJWIFBvd2VyIFN0YXR1c1x0OiAlc1xuIiwKKwkJICAgKChyZWdfdmFsdWUgJiBD UENJNjIwMF9QV1JfMTJOX1NUUykgPyAiR29vZCIgOiAiTm90IEdvb2QiKSk7CisJc2VxX3By aW50ZihtLCAiU1c1IFN0YXRlXHRcdDogJXNcbiIsCisJCSAgICgocmVnX3ZhbHVlICYgQ1BD STYyMDBfU1RBVEVfU1c1KSA/ICJPRkYiIDogIk9OIikpOworCisJc2VxX3ByaW50ZihtLCAi U2FmZSBTdGFydCBTdGF0dXNcdDogJXNcbiIsCisJCSAgICgocmVnX3ZhbHVlICYgQ1BDSTYy MDBfU0FGRV9TVEFSVCkgPworCQkgICAgIlNhZmUgRU5WIHNldHRpbmdzIHVzZWQiIDogIk5W UkFNIEVOViBzZXR0aW5ncyB1c2VkIikpOworCisJc2VxX3ByaW50ZihtLCAiUEVYXzg2MjQg RXJyb3IgU3RhdHVzXHQ6ICVzXG4iLAorCQkgICAoKHJlZ192YWx1ZSAmIENQQ0k2MjAwX1BF WDg2MjRfRVJST1IpID8KKwkJICAgICJGYXRhbCBFcnJvciIgOiAiTm8gRmF0YWwgRXJyb3Ii KSk7CisKKwlzd2l0Y2ggKHJlZ192YWx1ZSAmIENQQ0k2MjAwX0JPQVJEX1RZUEVfTUFTSykg eworCWNhc2UgQ1BDSTYyMDBfQk9BUkRfVFlQRV9DUENJOgorCQlzcHJpbnRmKGJ1ZmYsICJD UENJIik7CisJCWJyZWFrOworCWNhc2UgQ1BDSTYyMDBfQk9BUkRfVFlQRV9QUlBNQzoKKwkJ c3ByaW50ZihidWZmLCAiUHJQTUMiKTsKKwkJYnJlYWs7CisJY2FzZSBDUENJNjIwMF9CT0FS RF9UWVBFX1ZNRToKKwkJc3ByaW50ZihidWZmLCAiVk1FIik7CisJCWJyZWFrOworCWRlZmF1 bHQ6CisJCXNwcmludGYoYnVmZiwgIlVua25vd24iKTsKKwkJYnJlYWs7CisJfQorCXNlcV9w cmludGYobSwgIkJvYXJkIFR5cGVcdFx0OiAlc1xuIiwgYnVmZik7CisKKwkvKiBTeXN0ZW0g Q29udHJvbCBSZWdpc3RlciAqLworCXJlZ192YWx1ZSA9IHJlYWRiKHJlZ19ibG9jayArIENQ Q0k2MjAwX1NZU1RFTV9DT05UUk9MX1JFR19PRkZTRVQpOworCXNlcV9wcmludGYobSwgIkVF UFJPTSBXUCBTdGF0dXNcdDogJXNcbiIsCisJCSAgICgocmVnX3ZhbHVlICYgQ1BDSTYyMDBf RUVQUk9NX1dQKSA/CisJCSAgICAiRUVQUk9NIFdyaXRlIFByb3RlY3RlZCIgOiAiRUVQUk9N IE5vdCBXcml0ZSBQcm90ZWN0ZWQiKSk7CisKKwkvKiBTdGF0dXMgSW5kaWNhdG9yIFJlZ2lz dGVyICovCisJcmVnX3ZhbHVlID0gcmVhZGIocmVnX2Jsb2NrICsgQ1BDSTYyMDBfU1RBVFVT X0lORElDQVRPUl9SRUdfT0ZGU0VUKTsKKwlzZXFfcHJpbnRmKG0sICJVU1IxIEdyZWVuIExF RFx0XHQ6ICVzXG4iLAorCQkgICAoKHJlZ192YWx1ZSAmIENQQ0k2MjAwX1VTUjFfTEVEKSA/ ICJMaXQiIDogIk5vdCBMaXQiKSk7CisJc2VxX3ByaW50ZihtLCAiVVNSMiBZZWxsb3cgTEVE XHRcdDogJXNcbiIsCisJCSAgICgocmVnX3ZhbHVlICYgQ1BDSTYyMDBfVVNSMl9MRUQpID8g IkxpdCIgOiAiTm90IExpdCIpKTsKKworCS8qIE5PUiBGbGFzaCBDb250cm9sL1N0YXR1cyBS ZWdpc3RlciAqLworCXJlZ192YWx1ZSA9IHJlYWRiKHJlZ19ibG9jayArIENQQ0k2MjAwX05P Ul9GTEFTSF9DVFJMX1NUQVRfUkVHX09GRlNFVCk7CisJc2VxX3ByaW50ZihtLCAiTk9SIEZs YXNoIE1hcCBTZWxlY3RcdDogJXNcbiIsCisJCSAgICgocmVnX3ZhbHVlICYgQ1BDSTYyMDBf Tk9SX0ZMQVNIX01BUF9TRUxFQ1QpID8KKwkJICAgICJCb290IEJsb2NrIEEgTWFwcGVkIHRv IEhpZ2hlc3QgQWRkcmVzcyIgOgorCQkgICAgIkZsYXNoIEJvb3QgQmxvY2sgU2VsZWN0Iikp OworCXNlcV9wcmludGYobSwgIk5PUiBGbGFzaCBXUCBTV1x0XHQ6ICVzXG4iLAorCQkgICAo KHJlZ192YWx1ZSAmIENQQ0k2MjAwX05PUl9GTEFTSF9XUF9TVykgPworCQkgICAgIldyaXRl IFByb3RlY3RlZCIgOiAiTm90IFdyaXRlIFByb3RlY3RlZCIpKTsKKwlzZXFfcHJpbnRmKG0s ICJOT1IgRmxhc2ggV1AgSFdcdFx0OiAlc1xuIiwKKwkJICAgKChyZWdfdmFsdWUgJiBDUENJ NjIwMF9OT1JfRkxBU0hfV1BfSFcpID8KKwkJICAgICJXcml0ZSBQcm90ZWN0ZWQiIDogIk5v dCBXcml0ZSBQcm90ZWN0ZWQiKSk7CisJc2VxX3ByaW50ZihtLCAiTk9SIEZsYXNoIEJvb3Qg U2VsZWN0XHQ6ICVzXG4iLAorCQkgICAoKHJlZ192YWx1ZSAmIENQQ0k2MjAwX05PUl9GTEFT SF9CTEtfU0VMKSA/CisJCSAgICAiQm9vdCBCbG9jayBCIFNlbGVjdGVkIiA6ICJCb290IEJs b2NrIEEgU2VsZWN0ZWQiKSk7CisJc2VxX3ByaW50ZihtLCAiTk9SIEZsYXNoIFJlYWR5IFN0 YXR1c1x0OiAlc1xuIiwKKwkJICAgKChyZWdfdmFsdWUgJiBDUENJNjIwMF9OT1JfRkxBU0hf UkRZKSA/CisJCSAgICAiQml0IFNldCIgOiAiQml0IE5vdCBTZXQiKSk7CisKKwkvKiBJbnRl cnJ1cHQgUmVnaXN0ZXIgMSAqLworCXJlZ192YWx1ZSA9IHJlYWRiKHJlZ19ibG9jayArIENQ Q0k2MjAwX0lOVEVSUlVQVF9SRUdfMV9PRkZTRVQpOworCisJaWYgKHJlZ192YWx1ZSAmIENQ Q0k2MjAwX1RTRUM0X1BIWV9JTlRFUlJVUFQpIHsKKwkJc2VxX3ByaW50ZihtLCAiVFNFQzQg UEhZIEludGVycnVwdFx0OiAlc1xuIiwgIkFzc2VydGVkIik7CisJfTsKKwlpZiAocmVnX3Zh bHVlICYgQ1BDSTYyMDBfVFNFQzNfUEhZX0lOVEVSUlVQVCkgeworCQlzZXFfcHJpbnRmKG0s ICJUU0VDMyBQSFkgSW50ZXJydXB0XHQ6ICVzXG4iLCAiQXNzZXJ0ZWQiKTsKKwl9OworCWlm IChyZWdfdmFsdWUgJiBDUENJNjIwMF9UU0VDMl9QSFlfSU5URVJSVVBUKSB7CisJCXNlcV9w cmludGYobSwgIlRTRUMyIFBIWSBJbnRlcnJ1cHRcdDogJXNcbiIsICJBc3NlcnRlZCIpOwor CX07CisJaWYgKHJlZ192YWx1ZSAmIENQQ0k2MjAwX1RTRUMxX1BIWV9JTlRFUlJVUFQpIHsK KwkJc2VxX3ByaW50ZihtLCAiVFNFQzEgUEhZIEludGVycnVwdFx0OiAlc1xuIiwgIkFzc2Vy dGVkIik7CisJfTsKKworCS8qIEludGVycnVwdCBSZWdpc3RlciAyICovCisJcmVnX3ZhbHVl ID0gcmVhZGIocmVnX2Jsb2NrICsgQ1BDSTYyMDBfSU5URVJSVVBUX1JFR18yX09GRlNFVCk7 CisKKwlzZXFfcHJpbnRmKG0sICJDb250cm9sIENQTEQgSW50ZXJydXB0IFN0YXR1c1x0OiAl c1xuIiwKKwkJICAgKChyZWdfdmFsdWUgJiBDUENJNjIwMF9DUENJX1BMRF9JTlQpID8KKwkJ ICAgICJJbnRlcnJ1cHQgQXNzZXJ0ZWQiIDogIk5vdCBBc3NlcnRlZCIpKTsKKwlzZXFfcHJp bnRmKG0sICJJUE1JIEludGVycnVwdCBTdGF0dXNcdFx0OiAlc1xuIiwKKwkJICAgKChyZWdf dmFsdWUgJiBDUENJNjIwMF9JUE1JX0lOVCkgPworCQkgICAgIkFzc2VydGVkIiA6ICJOb3Qg QXNzZXJ0ZWQiKSk7CisJc2VxX3ByaW50ZihtLCAiUlRDIEludGVycnVwdCBTdGF0dXNcdFx0 OiAlc1xuIiwKKwkJICAgKChyZWdfdmFsdWUgJiBDUENJNjIwMF9SVENfSU5UKSA/CisJCSAg ICAiQXNzZXJ0ZWQiIDogIk5vdCBBc3NlcnRlZCIpKTsKKwlzZXFfcHJpbnRmKG0sICJUZW1w IFNlbnNvciBJbnRlcnJ1cHRfU3RhdHVzXHQ6ICVzXG4iLAorCQkgICAoKHJlZ192YWx1ZSAm IENQQ0k2MjAwX1RFTVBfSU5UKSA/CisJCSAgICAiQXNzZXJ0ZWQiIDogIk5vdCBBc3NlcnRl ZCIpKTsKKwlzZXFfcHJpbnRmKG0sICJBYm9ydCBTd2l0Y2ggU3RhdHVzXHRcdDogJXNcbiIs CisJCSAgICgocmVnX3ZhbHVlICYgQ1BDSTYyMDBfQUJPUlRfU1RBVFVTKSA/CisJCSAgICAi UHJlc3NlZCIgOiAiTm90IFByZXNzZWQiKSk7CisKKwkvKiBJbnRlcnJ1cHQgTWFzayBSZWdp c3RlciAqLworCXJlZ192YWx1ZSA9IHJlYWRiKHJlZ19ibG9jayArIENQQ0k2MjAwX0lOVEVS UlVQVF9NQVNLX1JFR19PRkZTRVQpOworCisJc2VxX3ByaW50ZihtLCAiQ1BDSSBQTEQgSW50 ZXJydXB0IE1hc2tcdFx0OiAlc1xuIiwKKwkJICAgKChyZWdfdmFsdWUgJiBDUENJNjIwMF9D UENJX1BMRF9JTlRfTUFTSykgPworCQkgICAgIkludGVycnVwdCBEaXNhYmxlZCIgOiAiSW50 ZXJydXB0IEVuYWJsZWQiKSk7CisJc2VxX3ByaW50ZihtLCAiSVBNSSBJbnRlcnJ1cHQgTWFz a1x0XHQ6ICVzXG4iLAorCQkgICAoKHJlZ192YWx1ZSAmIENQQ0k2MjAwX0lQTUlfSU5UX01B U0spID8KKwkJICAgICJJbnRlcnJ1cHQgRGlzYWJsZWQiIDogIkludGVycnVwdCBFbmFibGVk IikpOworCXNlcV9wcmludGYobSwgIlJUQyBJbnRlcnJ1cHQgTWFza1x0XHQ6ICVzXG4iLAor CQkgICAoKHJlZ192YWx1ZSAmIENQQ0k2MjAwX1JUQ19JTlRfTUFTSykgPworCQkgICAgIklu dGVycnVwdCBEaXNhYmxlZCIgOiAiSW50ZXJydXB0IEVuYWJsZWQiKSk7CisJc2VxX3ByaW50 ZihtLCAiVGVtcCBTZW5zb3IgSW50ZXJydXB0IE1hc2tcdDogJXNcbiIsCisJCSAgICgocmVn X3ZhbHVlICYgQ1BDSTYyMDBfVEVNUF9JTlRfTUFTSykgPworCQkgICAgIkludGVycnVwdCBE aXNhYmxlZCIgOiAiSW50ZXJydXB0IEVuYWJsZWQiKSk7CisJc2VxX3ByaW50ZihtLCAiQUJP UlQgSW50ZXJydXB0IE1hc2tcdFx0OiAlc1xuIiwKKwkJICAgKChyZWdfdmFsdWUgJiBDUENJ NjIwMF9BQk9SVF9JTlRfTUFTSykgPworCQkgICAgIkludGVycnVwdCBEaXNhYmxlZCIgOiAi SW50ZXJydXB0IEVuYWJsZWQiKSk7CisKKwkvKiBQcmVzZW5jZSBEZXRlY3QgUmVnaXN0ZXIg Ki8KKwlyZWdfdmFsdWUgPSByZWFkYihyZWdfYmxvY2sgKyBDUENJNjIwMF9QUkVTRU5DRV9E RVRFQ1RfUkVHX09GRlNFVCk7CisKKwlzZXFfcHJpbnRmKG0sICJFUkRZMlx0XHRcdDogJXNc biIsCisJCSAgICgocmVnX3ZhbHVlICYgQ1BDSTYyMDBfRVJEWTIpID8KKwkJICAgICJFUkRZ MiBTZXQiIDogIkVSRFkyIE5vdCBTZXQiKSk7CisJc2VxX3ByaW50ZihtLCAiRVJEWTFcdFx0 XHQ6ICVzXG4iLAorCQkgICAoKHJlZ192YWx1ZSAmIENQQ0k2MjAwX0VSRFkyKSA/CisJCSAg ICAiRVJEWTEgU2V0IiA6ICJFUkRZMSBOb3QgU2V0IikpOworCXNlcV9wcmludGYobSwgIlJU TVx0XHRcdDogJXNcbiIsCisJCSAgICgocmVnX3ZhbHVlICYgQ1BDSTYyMDBfUlRNX1BSRVNF TlQpID8KKwkJICAgICJSVE0gSW5zdGFsbGVkIiA6ICJSVE0gTm90IEluc3RhbGxlZCIpKTsK KwlzZXFfcHJpbnRmKG0sICJYTUNTUEFOXHRcdFx0OiAlc1xuIiwKKwkJICAgKChyZWdfdmFs dWUgJiBDUENJNjIwMF9YTUNTUEFOX1BSRVNFTlQpID8KKwkJICAgICJYTUNTUEFOIEluc3Rh bGxlZCIgOiAiWE1DU1BBTiBOb3QgSW5zdGFsbGVkIikpOworCXNlcV9wcmludGYobSwgIlBN QyBTaXRlIDJcdFx0OiAlc1xuIiwKKwkJICAgKChyZWdfdmFsdWUgJiBDUENJNjIwMF9QTUMy X1BSRVNFTlQpID8KKwkJICAgICJQTUMgTW9kdWxlIEluc3RhbGxlZCIgOiAiUE1DIE1vZHVs ZSBOb3QgSW5zdGFsbGVkIikpOworCXNlcV9wcmludGYobSwgIlBNQyBTaXRlIDFcdFx0OiAl c1xuIiwKKwkJICAgKChyZWdfdmFsdWUgJiBDUENJNjIwMF9QTUMxX1BSRVNFTlQpID8KKwkJ ICAgICJQTUMgTW9kdWxlIEluc3RhbGxlZCIgOiAiUE1DIE1vZHVsZSBOb3QgSW5zdGFsbGVk IikpOworCisJLyogTkFORCBGbGFzaDEgQ1RSTCBSZWdpc3RlciAqLworCXJlZ192YWx1ZSA9 IHJlYWRiKHJlZ19ibG9jayArIENQQ0k2MjAwX05BTkRfRkxBU0gxX0NUUkxfUkVHX09GRlNF VCk7CisJc2VxX3ByaW50ZihtLCAiTkFORCAxIENPTlRST0wgUmVnXHQ6IDB4JTAyeFxuIiwg cmVnX3ZhbHVlKTsKKworCS8qIE5BTkQgRmxhc2gxIFNFTEVDVCBSZWdpc3RlciAqLworCXJl Z192YWx1ZSA9IHJlYWRiKHJlZ19ibG9jayArIENQQ0k2MjAwX05BTkRfRkxBU0gxX1NFTEVD VF9SRUdfT0ZGU0VUKTsKKwlzZXFfcHJpbnRmKG0sICJOQU5EIDEgU0VMRUNUIFJlZ1x0OiAw eCUwMnhcbiIsIHJlZ192YWx1ZSk7CisKKwkvKiBOQU5EIEZsYXNoMSBQcmVzZW5jZSBSZWdp c3RlciAqLworCXJlZ192YWx1ZSA9IHJlYWRiKHJlZ19ibG9jayArIENQQ0k2MjAwX05BTkRf RkxBU0gxX1BSRVNFTkNFX1JFR19PRkZTRVQpOworCXNlcV9wcmludGYobSwgIk5BTkQgMSBQ UkVTRU5DRSBSZWdcdDogMHglMDJ4XG4iLCByZWdfdmFsdWUpOworCisJLyogTkFORCBGbGFz aDEgU1RBVFVTIFJlZ2lzdGVyICovCisJcmVnX3ZhbHVlID0gcmVhZGIocmVnX2Jsb2NrICsg Q1BDSTYyMDBfTkFORF9GTEFTSDFfU1RBVFVTX1JFR19PRkZTRVQpOworCXNlcV9wcmludGYo bSwgIk5BTkQgMSBTVEFUVVMgUmVnXHQ6IDB4JTAyeFxuIiwgcmVnX3ZhbHVlKTsKKworCS8q IE5BTkQgRmxhc2gyIENUUkwgUmVnaXN0ZXIgKi8KKwlyZWdfdmFsdWUgPSByZWFkYihyZWdf YmxvY2sgKyBDUENJNjIwMF9OQU5EX0ZMQVNIMl9DVFJMX1JFR19PRkZTRVQpOworCXNlcV9w cmludGYobSwgIk5BTkQgMiBDT05UUk9MIFJlZ1x0OiAweCUwMnhcbiIsIHJlZ192YWx1ZSk7 CisKKwkvKiBOQU5EIEZsYXNoMiBTRUxFQ1QgUmVnaXN0ZXIgKi8KKwlyZWdfdmFsdWUgPSBy ZWFkYihyZWdfYmxvY2sgKyBDUENJNjIwMF9OQU5EX0ZMQVNIMl9TRUxFQ1RfUkVHX09GRlNF VCk7CisJc2VxX3ByaW50ZihtLCAiTkFORCAyIFNFTEVDVCBSZWdcdDogMHglMDJ4XG4iLCBy ZWdfdmFsdWUpOworCisJLyogTkFORCBGbGFzaDIgUHJlc2VuY2UgUmVnaXN0ZXIgKi8KKwly ZWdfdmFsdWUgPSByZWFkYihyZWdfYmxvY2sgKyBDUENJNjIwMF9OQU5EX0ZMQVNIMl9QUkVT RU5DRV9SRUdfT0ZGU0VUKTsKKwlzZXFfcHJpbnRmKG0sICJOQU5EIDIgUFJFU0VOQ0UgUmVn XHQ6IDB4JTAyeFxuIiwgcmVnX3ZhbHVlKTsKKworCS8qIE5BTkQgRmxhc2gyIFNUQVRVUyBS ZWdpc3RlciAqLworCXJlZ192YWx1ZSA9IHJlYWRiKHJlZ19ibG9jayArIENQQ0k2MjAwX05B TkRfRkxBU0gyX1NUQVRVU19SRUdfT0ZGU0VUKTsKKwlzZXFfcHJpbnRmKG0sICJOQU5EIDIg U1RBVFVTIFJlZ1x0OiAweCUwMnhcbiIsIHJlZ192YWx1ZSk7CisKKwkvKiBDUENJIENvbnRy b2wgU3RhdHVzIFJlZ2lzdGVyICovCisJcmVnX3ZhbHVlID0gcmVhZGIocmVnX2Jsb2NrICsg Q1BDSTYyMDBfQ1BDSV9DT05UUk9MX1NUQVRVU19SRUdfT0ZGU0VUKTsKKworCXNlcV9wcmlu dGYobSwgIkhvdCBTd2FwIEJsdWUgTEVEIE1hc2tcdDogJXNcbiIsCisJCSAgICgocmVnX3Zh bHVlICYgQ1BDSTYyMDBfSFNfTEVEX01BU0spID8KKwkJICAgICJEaXNhYmxlIElsbHVtaW5h dGlvbiIgOiAiRW5hYmxlIElsbHVtaW5hdGlvbiIpKTsKKworCXNlcV9wcmludGYobSwgIkJh Y2twbGFuZSBSZXNldCBNYXNrXHQ6ICVzXG4iLAorCQkgICAoKHJlZ192YWx1ZSAmIENQQ0k2 MjAwX0JQX1JFU0VUX01BU0spID8KKwkJICAgICJEaXNhYmxlIGJhY2twbGFuZSBidXMgcmVz ZXQiIDoKKwkJICAgICJFbmFibGUgYmFja3BsYW5lIGJ1cyByZXNldCIpKTsKKworCXNlcV9w cmludGYobSwgIkhvdCBTd2FwIEJsdWUgTEVEXHQ6ICVzXG4iLAorCQkgICAoKHJlZ192YWx1 ZSAmIENQQ0k2MjAwX0hTX0xFRF9PTikgPyAiT24iIDogIk9mZiIpKTsKKworCXNlcV9wcmlu dGYobSwgIlN0YW5kIEFsb25lIE1vZGVcdDogJXNcbiIsCisJCSAgICgocmVnX3ZhbHVlICYg Q1BDSTYyMDBfU0FfTU9ERSkgPworCQkgICAgIkluIFN0YW5kIEFsb25lIE1vZGUiIDogIklu IE5vcm1hbCBNb2RlIikpOworCisJc2VxX3ByaW50ZihtLCAiU3lzdGVtIFNsb3QgU3RhdHVz XHQ6ICVzXG4iLAorCQkgICAoKHJlZ192YWx1ZSAmIENQQ0k2MjAwX1NZU19FTl9TVFMpID8K KwkJICAgICJJbiBTeXN0ZW0gU2xvdCIgOiAiSW4gUGVyaXBoZXJhbCBTbG90IikpOworCisJ LyogR2VvZ3JhcGhpYyBBZGRyZXNzIFJlZ2lzdGVyICovCisJcmVnX3ZhbHVlID0gcmVhZGIo cmVnX2Jsb2NrICsgQ1BDSTYyMDBfR0VPR1JBUEhJQ19BRERSRVNTX1JFR19PRkZTRVQpOwor CXNlcV9wcmludGYobSwgIkdlb2dyYXBoaWMgQWRkcmVzc1x0OiAlMDJkXG4iLCByZWdfdmFs dWUgPj4gMyk7CisKKwkvKiBQTEQgUmV2aXNpb24gUmVnaXN0ZXIgKi8KKwlyZWdfdmFsdWUg PSByZWFkYihyZWdfYmxvY2sgKyBDUENJNjIwMF9QTERfUkVWSVNJT05fUkVHX09GRlNFVCk7 CisKKwlzZXFfcHJpbnRmKG0sICJQTEQgUmV2aXNpb25cdFx0OiAweCV4XG4iLCByZWdfdmFs dWUpOworCisJLyogUExEIERhdGUgQ29kZSBSZWdpc3RlciAqLworCXJlZzMyX3ZhbHVlID0g cmVhZGwocmVnX2Jsb2NrICsgQ1BDSTYyMDBfUExEX0RBVEVfQ09ERV9SRUdfT0ZGU0VUKTsK KwlzZXFfcHJpbnRmKG0sICJQTEQgRGF0ZSBDb2RlXHRcdDogMHglMDh4XG4iLAorCQkgICAo KChyZWczMl92YWx1ZSAmIDB4MDAwMDAwZmZVKSA8PCAyNCkgfAorCQkgICAgKChyZWczMl92 YWx1ZSAmIDB4MDAwMGZmMDBVKSA8PCA4KSB8CisJCSAgICAoKHJlZzMyX3ZhbHVlICYgMHgw MGZmMDAwMFUpID4+IDgpIHwKKwkJICAgICgocmVnMzJfdmFsdWUgJiAweGZmMDAwMDAwVSkg Pj4gMjQpKSk7CisKKwlpb3VubWFwKHJlZ19ibG9jayk7CisKKwlyZXR1cm47Cit9CisKK3N0 YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIF9faW5pdGRhdGEgb2ZfYnVzX2lkc1tdID0gewor CXsudHlwZSA9ICJzb2MiLH0sCisJey5jb21wYXRpYmxlID0gInNpbXBsZS1idXMiLH0sCisJ e30sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBkZWNsYXJlX29mX3BsYXRmb3JtX2Rldmlj ZXModm9pZCkKK3sKKwlvZl9wbGF0Zm9ybV9idXNfcHJvYmUoTlVMTCwgb2ZfYnVzX2lkcywg TlVMTCk7CisKKwlyZXR1cm4gMDsKK30KKworbWFjaGluZV9kZXZpY2VfaW5pdGNhbGwoY3Bj aTYyMDAsIGRlY2xhcmVfb2ZfcGxhdGZvcm1fZGV2aWNlcyk7CisKKy8qCisgKiBDYWxsZWQg dmVyeSBlYXJseSwgZGV2aWNlLXRyZWUgaXNuJ3QgdW5mbGF0dGVuZWQKKyAqLworc3RhdGlj IGludCBfX2luaXQgY3BjaTYyMDBfcHJvYmUodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHJv b3QgPSBvZl9nZXRfZmxhdF9kdF9yb290KCk7CisKKwlpZiAob2ZfZmxhdF9kdF9pc19jb21w YXRpYmxlKHJvb3QsICJDUENJNjIwMCIpKQorCQlyZXR1cm4gMTsKKwllbHNlCisJCXJldHVy biAwOworfQorCitkZWZpbmVfbWFjaGluZShjcGNpNjIwMCkKK3sKKwkubmFtZSA9ICJDUENJ NjIwMCIsCisJLnByb2JlID0gY3BjaTYyMDBfcHJvYmUsCisJLnNldHVwX2FyY2ggPSBjcGNp NjIwMF9zZXR1cF9hcmNoLAorCS5pbml0X0lSUSA9IGNwY2k2MjAwX2luaXRfaXJxLAorCS5z aG93X2NwdWluZm8gPSBjcGNpNjIwMF9zaG93X2NwdWluZm8sCisJLmdldF9pcnEgPSBtcGlj X2dldF9pcnEsCisJLnJlc3RhcnQgPSBjcGNpNjIwMF9yZXN0YXJ0LAorCS5wY2liaW9zX2Zp eHVwID0gY3BjaTYyMDBfcGNpYmlvc19maXh1cCwKKwkucGNpYmlvc19maXh1cF9idXMgPSBj cGNpNjIwMF9wY2liaW9zX2ZpeHVwX2J1cywKKwkucGNpYmlvc19maXh1cF9yZXNvdXJjZXMg PSBjcGNpNjIwMF9wY2liaW9zX2ZpeHVwX3Jlc291cmNlcywKKwkuY2FsaWJyYXRlX2RlY3Ig PSBnZW5lcmljX2NhbGlicmF0ZV9kZWNyLAorCS5wcm9ncmVzcyA9IHVkYmdfcHJvZ3Jlc3Ms Cit9OwpkaWZmIC11IC0tbmV3LWZpbGUgLS1yZWN1cnNpdmUgbGludXgtMi42LjI5LjYub3Jp Zy9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvY3BjaTYyMDAuaCBsaW51eC0yLjYuMjku Ni5tb2QvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L2NwY2k2MjAwLmgKLS0tIGxpbnV4 LTIuNi4yOS42Lm9yaWcvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L2NwY2k2MjAwLmgJ MTk2OS0xMi0zMSAxNzowMDowMC4wMDAwMDAwMDAgLTA3MDAKKysrIGxpbnV4LTIuNi4yOS42 Lm1vZC9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvY3BjaTYyMDAuaAkyMDA5LTA3LTIx IDExOjI4OjE3LjAwMDAwMDAwMCAtMDcwMApAQCAtMCwwICsxLDE4MCBAQAorLyoKKyAqIENQ Q0k2MjAwIGJvYXJkIGRlZmluaXRpb25zCisgKgorICogQXV0aG9yOiBBaml0IFByZW0gPGFq aXQucHJlbUBlbWVyc29uLmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBFbWVyc29uIE5l dHdvcmsgUG93ZXIgLSBFbWJlZGRlZCBDb21wdXRpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0g aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2Rp ZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGlj IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisg KiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaWZuZGVmIF9fQ1BD STYyMDBfSF9fCisjZGVmaW5lIF9fQ1BDSTYyMDBfSF9fCisKKyNpbmNsdWRlIDxsaW51eC9p bml0Lmg+CisKKworLyogRmxhc2ggKi8KKyNkZWZpbmUgQ1BDSTYyMDBfRkxBU0hfQkFTRQkw eEY4MDAwMDAwCisjZGVmaW5lIENQQ0k2MjAwX0ZMQVNIX1NJWkUJMHgwODAwMDAwMAorCisK Ky8qIFN5c3RlbSBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXJzICovCisjZGVmaW5lIENQ Q0k2MjAwX1NZU1RFTV9TVEFUVVNfUkVHCQkweEYyMDAwMDAwCisjZGVmaW5lIENQQ0k2MjAw X1NZU1RFTV9DT05UUk9MX1JFRwkJMHhGMjAwMDAwMQorI2RlZmluZSBDUENJNjIwMF9TVEFU VVNfSU5ESUNBVE9SX1JFRwkJMHhGMjAwMDAwMgorI2RlZmluZSBDUENJNjIwMF9OT1JfRkxB U0hfQ1RSTF9TVEFUX1JFRwkweEYyMDAwMDAzCisjZGVmaW5lIENQQ0k2MjAwX0lOVEVSUlVQ VF9SRUdfMQkJMHhGMjAwMDAwNAorI2RlZmluZSBDUENJNjIwMF9JTlRFUlJVUFRfUkVHXzIJ CTB4RjIwMDAwMDUKKyNkZWZpbmUgQ1BDSTYyMDBfSU5URVJSVVBUX01BU0tfUkVHCQkweEYy MDAwMDA2CisjZGVmaW5lIENQQ0k2MjAwX1BSRVNFTkNFX0RFVEVDVF9SRUcJCTB4RjIwMDAw MDgKKyNkZWZpbmUgQ1BDSTYyMDBfTkFORF9GTEFTSDFfQ09OVFJPTF9SRUcJMHhGMjAwMDAx MAorI2RlZmluZSBDUENJNjIwMF9OQU5EX0ZMQVNIMV9TRUxFQ1RfUkVHCQkweEYyMDAwMDEx CisjZGVmaW5lIENQQ0k2MjAwX05BTkRfRkxBU0gxX1BSRVNFTkNFX1JFRwkweEYyMDAwMDEy CisjZGVmaW5lIENQQ0k2MjAwX05BTkRfRkxBU0gxX1NUQVRVU19SRUcJCTB4RjIwMDAwMTMK KyNkZWZpbmUgQ1BDSTYyMDBfTkFORF9GTEFTSDFfREFUQV9SRUcJCTB4RjIwMzAwMDAKKyNk ZWZpbmUgQ1BDSTYyMDBfTkFORF9GTEFTSDJfQ09OVFJPTF9SRUcJMHhGMjAwMDAxNAorI2Rl ZmluZSBDUENJNjIwMF9OQU5EX0ZMQVNIMl9TRUxFQ1RfUkVHCQkweEYyMDAwMDE1CisjZGVm aW5lIENQQ0k2MjAwX05BTkRfRkxBU0gyX1BSRVNFTkNFX1JFRwkweEYyMDAwMDE2CisjZGVm aW5lIENQQ0k2MjAwX05BTkRfRkxBU0gyX1NUQVRVU19SRUcJCTB4RjIwMDAwMTcKKyNkZWZp bmUgQ1BDSTYyMDBfTkFORF9GTEFTSDJfREFUQV9SRUcJCTB4RjIwMzgwMDAKKyNkZWZpbmUg Q1BDSTYyMDBfQ1BDSV9DT05UUk9MX1NUQVRVU19SRUcJMHhGMjAwMDAxOAorI2RlZmluZSBD UENJNjIwMF9HRU9HUkFQSElDX0FERFJFU1NfUkVHCQkweEYyMDAwMDE5CisjZGVmaW5lIENQ Q0k2MjAwX1dBVENIRE9HX1RJTUVSX0xPQURfUkVHCTB4RjIwMDAwMjAKKyNkZWZpbmUgQ1BD STYyMDBfV0FUQ0hET0dfQ09OVFJPTF9SRUcJCTB4RjIwMDAwMjQKKyNkZWZpbmUgQ1BDSTYy MDBfV0FUQ0hET0dfVElNRVJfUkVTT0xVVElPTl9SRUcJMHhGMjAwMDAyNQorI2RlZmluZSBD UENJNjIwMF9XQVRDSERPR19USU1FUl9DT1VOVF9SRUcJMHhGMjAwMDAyNgorI2RlZmluZSBD UENJNjIwMF9QTERfUkVWSVNJT05fUkVHCQkweEYyMDAwMDMwCisjZGVmaW5lIENQQ0k2MjAw X1BMRF9EQVRFX0NPREVfUkVHCQkweEYyMDAwMDM0CisjZGVmaW5lIENQQ0k2MjAwX1RFU1Rf MV9SRUcJCQkweEYyMDAwMDM4CisjZGVmaW5lIENQQ0k2MjAwX1RFU1RfMl9SRUcJCQkweEYy MDAwMDNDCisKKy8qIFJlZ2lzdGVyIG9mZnNldHMgKi8KKyNkZWZpbmUgQ1BDSTYyMDBfU1lT VEVNX1NUQVRVU19SRUdfT0ZGU0VUCQkweDAwMDAwMDAwCisjZGVmaW5lIENQQ0k2MjAwX1NZ U1RFTV9DT05UUk9MX1JFR19PRkZTRVQJCTB4MDAwMDAwMDEKKyNkZWZpbmUgQ1BDSTYyMDBf U1RBVFVTX0lORElDQVRPUl9SRUdfT0ZGU0VUCQkweDAwMDAwMDAyCisjZGVmaW5lIENQQ0k2 MjAwX05PUl9GTEFTSF9DVFJMX1NUQVRfUkVHX09GRlNFVAkJMHgwMDAwMDAwMworI2RlZmlu ZSBDUENJNjIwMF9JTlRFUlJVUFRfUkVHXzFfT0ZGU0VUCQkJMHgwMDAwMDAwNAorI2RlZmlu ZSBDUENJNjIwMF9JTlRFUlJVUFRfUkVHXzJfT0ZGU0VUCQkJMHgwMDAwMDAwNQorI2RlZmlu ZSBDUENJNjIwMF9JTlRFUlJVUFRfTUFTS19SRUdfT0ZGU0VUCQkweDAwMDAwMDA2CisjZGVm aW5lIENQQ0k2MjAwX1BSRVNFTkNFX0RFVEVDVF9SRUdfT0ZGU0VUCQkweDAwMDAwMDA4Cisj ZGVmaW5lIENQQ0k2MjAwX05BTkRfRkxBU0gxX0NUUkxfUkVHX09GRlNFVAkJMHgwMDAwMDAx MAorI2RlZmluZSBDUENJNjIwMF9OQU5EX0ZMQVNIMV9TRUxFQ1RfUkVHX09GRlNFVAkJMHgw MDAwMDAxMQorI2RlZmluZSBDUENJNjIwMF9OQU5EX0ZMQVNIMV9QUkVTRU5DRV9SRUdfT0ZG U0VUCTB4MDAwMDAwMTIKKyNkZWZpbmUgQ1BDSTYyMDBfTkFORF9GTEFTSDFfU1RBVFVTX1JF R19PRkZTRVQJCTB4MDAwMDAwMTMKKyNkZWZpbmUgQ1BDSTYyMDBfTkFORF9GTEFTSDJfQ1RS TF9SRUdfT0ZGU0VUCQkweDAwMDAwMDE0CisjZGVmaW5lIENQQ0k2MjAwX05BTkRfRkxBU0gy X1NFTEVDVF9SRUdfT0ZGU0VUCQkweDAwMDAwMDE1CisjZGVmaW5lIENQQ0k2MjAwX05BTkRf RkxBU0gyX1BSRVNFTkNFX1JFR19PRkZTRVQJMHgwMDAwMDAxNgorI2RlZmluZSBDUENJNjIw MF9OQU5EX0ZMQVNIMl9TVEFUVVNfUkVHX09GRlNFVAkJMHgwMDAwMDAxNworI2RlZmluZSBD UENJNjIwMF9DUENJX0NPTlRST0xfU1RBVFVTX1JFR19PRkZTRVQJCTB4MDAwMDAwMTgKKyNk ZWZpbmUgQ1BDSTYyMDBfR0VPR1JBUEhJQ19BRERSRVNTX1JFR19PRkZTRVQJCTB4MDAwMDAw MTkKKyNkZWZpbmUgQ1BDSTYyMDBfV0FUQ0hET0dfVElNRVJfTE9BRF9SRUdfT0ZGU0VUCQkw eDAwMDAwMDIwCisjZGVmaW5lIENQQ0k2MjAwX1dBVENIRE9HX0NPTlRST0xfUkVHX09GRlNF VAkJMHgwMDAwMDAyNAorI2RlZmluZSBDUENJNjIwMF9XQVRDSERPR19USU1FUl9SRVNPTFVU SU9OX1JFR19PRkZTRVQJMHgwMDAwMDAyNQorI2RlZmluZSBDUENJNjIwMF9XQVRDSERPR19U SU1FUl9DT1VOVF9SRUdfT0ZGU0VUCTB4MDAwMDAwMjYKKyNkZWZpbmUgQ1BDSTYyMDBfUExE X1JFVklTSU9OX1JFR19PRkZTRVQJCTB4MDAwMDAwMzAKKyNkZWZpbmUgQ1BDSTYyMDBfUExE X0RBVEVfQ09ERV9SRUdfT0ZGU0VUCQkweDAwMDAwMDM0CisjZGVmaW5lIENQQ0k2MjAwX1RF U1RfMV9SRUdfT0ZGU0VUCQkJMHgwMDAwMDAzOAorI2RlZmluZSBDUENJNjIwMF9URVNUXzJf UkVHX09GRlNFVAkJCTB4MDAwMDAwM0MKKworLyogU3lzdGVtIFN0YXR1cyBSZWdpc3RlciAq LworI2RlZmluZSBDUENJNjIwMF9QV1IxMlZfRU5fU1RTCQkweDgwCisjZGVmaW5lIENQQ0k2 MjAwX1BXUl8xMlBfU1RTCQkweDQwCisjZGVmaW5lIENQQ0k2MjAwX1BXUl8xMk5fU1RTCQkw eDIwCisjZGVmaW5lIENQQ0k2MjAwX1NUQVRFX1NXNQkJMHgxMAorI2RlZmluZSBDUENJNjIw MF9TQUZFX1NUQVJUCQkweDA4CisjZGVmaW5lIENQQ0k2MjAwX1BFWDg2MjRfRVJST1IJCTB4 MDQKKyNkZWZpbmUgQ1BDSTYyMDBfQk9BUkRfVFlQRV9NQVNLCTB4MDMKKyNkZWZpbmUgQ1BD STYyMDBfQk9BUkRfVFlQRV9DUENJCTB4MDIKKyNkZWZpbmUgQ1BDSTYyMDBfQk9BUkRfVFlQ RV9QUlBNQwkweDAxCisjZGVmaW5lIENQQ0k2MjAwX0JPQVJEX1RZUEVfVk1FCQkweDAwCisK Ky8qIFN5c3RlbSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIENQQ0k2MjAwX0JPQVJE X1JFU0VUCQkweEEwCisjZGVmaW5lIENQQ0k2MjAwX0VFUFJPTV9XUAkJMHgwMgorCisvKiBT dGF0dXMgSW5kaWNhdG9yIFJlZ2lzdGVyICovCisjZGVmaW5lIENQQ0k2MjAwX1VTUjFfTEVE CQkweDAyCisjZGVmaW5lIENQQ0k2MjAwX1VTUjJfTEVECQkweDAxCisKKy8qIE5PUiBGbGFz aCBDb250cm9sL1N0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBDUENJNjIwMF9OT1JfRkxB U0hfTUFQX1NFTEVDVAkweDEwCisjZGVmaW5lIENQQ0k2MjAwX05PUl9GTEFTSF9XUF9TVwkw eDA4CisjZGVmaW5lIENQQ0k2MjAwX05PUl9GTEFTSF9XUF9IVwkweDA0CisjZGVmaW5lIENQ Q0k2MjAwX05PUl9GTEFTSF9CTEtfU0VMCTB4MDIKKyNkZWZpbmUgQ1BDSTYyMDBfTk9SX0ZM QVNIX1JEWQkJMHgwMQorCisvKiBJbnRlcnJ1cHQgUmVnaXN0ZXIgMSAqLworI2RlZmluZSBD UENJNjIwMF9UU0VDNF9QSFlfSU5URVJSVVBUCTB4MDgKKyNkZWZpbmUgQ1BDSTYyMDBfVFNF QzNfUEhZX0lOVEVSUlVQVAkweDA0CisjZGVmaW5lIENQQ0k2MjAwX1RTRUMyX1BIWV9JTlRF UlJVUFQJMHgwMgorI2RlZmluZSBDUENJNjIwMF9UU0VDMV9QSFlfSU5URVJSVVBUCTB4MDEK KworLyogSW50ZXJydXB0IFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgQ1BDSTYyMDBfQ1BDSV9Q TERfSU5UCQkweDEwCisjZGVmaW5lIENQQ0k2MjAwX0lQTUlfSU5UCQkweDA4CisjZGVmaW5l IENQQ0k2MjAwX1JUQ19JTlQJCTB4MDQKKyNkZWZpbmUgQ1BDSTYyMDBfVEVNUF9JTlQJCTB4 MDIKKyNkZWZpbmUgQ1BDSTYyMDBfQUJPUlRfU1RBVFVTCQkweDAxCisKKy8qIEludGVycnVw dCBNYXNrIFJlZ2lzdGVyICovCisjZGVmaW5lIENQQ0k2MjAwX0NQQ0lfUExEX0lOVF9NQVNL CTB4MTAKKyNkZWZpbmUgQ1BDSTYyMDBfSVBNSV9JTlRfTUFTSwkJMHgwOAorI2RlZmluZSBD UENJNjIwMF9SVENfSU5UX01BU0sJCTB4MDQKKyNkZWZpbmUgQ1BDSTYyMDBfVEVNUF9JTlRf TUFTSwkJMHgwMgorI2RlZmluZSBDUENJNjIwMF9BQk9SVF9JTlRfTUFTSwkJMHgwMQorCisv KiBQcmVzZW5jZSBEZXRlY3QgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ1BDSTYyMDBfRVJEWTIJ CQkweDIwCisjZGVmaW5lIENQQ0k2MjAwX0VSRFkxCQkJMHgxMAorI2RlZmluZSBDUENJNjIw MF9SVE1fUFJFU0VOVAkJMHgwOAorI2RlZmluZSBDUENJNjIwMF9YTUNTUEFOX1BSRVNFTlQJ MHgwNAorI2RlZmluZSBDUENJNjIwMF9QTUMyX1BSRVNFTlQJCTB4MDIKKyNkZWZpbmUgQ1BD STYyMDBfUE1DMV9QUkVTRU5UCQkweDAxCisKKy8qIE5BTkQgRmxhc2ggQ2hpcCBDb250cm9s IFJlZ2lzdGVyICovCisjZGVmaW5lIENQQ0k2MjAwX05BTkRfRkxBU0hfQ0xFCQkweDgwCisj ZGVmaW5lIENQQ0k2MjAwX05BTkRfRkxBU0hfQUxFCQkweDQwCisjZGVmaW5lIENQQ0k2MjAw X05BTkRfRkxBU0hfV1AJCTB4MjAKKworLyogTkFORCBGbGFzaCBDaGlwIFNlbGVjdCBSZWdp c3RlciAqLworI2RlZmluZSBDUENJNjIwMF9OQU5EX0ZMQVNIX0NFMQkJMHg4MAorI2RlZmlu ZSBDUENJNjIwMF9OQU5EX0ZMQVNIX0NFMgkJMHg0MAorI2RlZmluZSBDUENJNjIwMF9OQU5E X0ZMQVNIX0NFMwkJMHgyMAorI2RlZmluZSBDUENJNjIwMF9OQU5EX0ZMQVNIX0NFNAkJMHgx MAorCisvKiBOQU5EIEZsYXNoIENoaXAgUHJlc2VuY2UgUmVnaXN0ZXIgKi8KKyNkZWZpbmUg Q1BDSTYyMDBfTkFORF9GTEFTSF9DUAkJMHg4MAorCisvKiBOQU5EIEZsYXNoIENoaXAgU3Rh dHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIENQQ0k2MjAwX05BTkRfRkxBU0hfUkIxCQkweDgw CisjZGVmaW5lIENQQ0k2MjAwX05BTkRfRkxBU0hfUkIyCQkweDQwCisjZGVmaW5lIENQQ0k2 MjAwX05BTkRfRkxBU0hfUkIzCQkweDIwCisjZGVmaW5lIENQQ0k2MjAwX05BTkRfRkxBU0hf UkI0CQkweDEwCisKKy8qIENQQ0kgQ29udHJvbCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZp bmUgQ1BDSTYyMDBfSFNfTEVEX01BU0sJCTB4ODAKKyNkZWZpbmUgQ1BDSTYyMDBfQlBfUkVT RVRfTUFTSwkJMHg0MAorI2RlZmluZSBDUENJNjIwMF9IU19MRURfT04JCTB4MjAKKyNkZWZp bmUgQ1BDSTYyMDBfU0FfTU9ERQkJMHgxMAorI2RlZmluZSBDUENJNjIwMF9TWVNfRU5fU1RT CQkweDA4CisKKy8qIEdlb2dyYXBoaWMgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZSBD UENJNjIwMF9HRU9fQUREUl9HQTQJCTB4ODAKKyNkZWZpbmUgQ1BDSTYyMDBfR0VPX0FERFJf R0EzCQkweDQwCisjZGVmaW5lIENQQ0k2MjAwX0dFT19BRERSX0dBMgkJMHgyMAorI2RlZmlu ZSBDUENJNjIwMF9HRU9fQUREUl9HQTEJCTB4MTAKKworI2RlZmluZSBDUENJNjIwMF9CQVNF X0JBVUQJCTE4NDMyMDAKKworI2RlZmluZSBEVUFSVF9CQVNFX0JBVUQJCQkoQ1BDSTYyMDBf QkFTRV9CQVVEIC8gMTYpCisjZGVmaW5lIENQQ0k2MjAwX1VBUlRfU0laRQkJMHg4CisKKyNk ZWZpbmUgQ1BDSTYyMDBfU0VSSUFMXzEJMHhGMjAxMzAwMFUKKyNkZWZpbmUgQ1BDSTYyMDBf U0VSSUFMXzIJMHhGMjAxNDAwMFUKKworI2VuZGlmCS8qIF9fQ1BDSTYyMDBfSF9fICovCmRp ZmYgLXUgLS1uZXctZmlsZSAtLXJlY3Vyc2l2ZSBsaW51eC0yLjYuMjkuNi5vcmlnL2FyY2gv cG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9jcGNpNjIwMF90aW1lci5jIGxpbnV4LTIuNi4yOS42 Lm1vZC9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvY3BjaTYyMDBfdGltZXIuYwotLS0g bGludXgtMi42LjI5LjYub3JpZy9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvY3BjaTYy MDBfdGltZXIuYwkxOTY5LTEyLTMxIDE3OjAwOjAwLjAwMDAwMDAwMCAtMDcwMAorKysgbGlu dXgtMi42LjI5LjYubW9kL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9jcGNpNjIwMF90 aW1lci5jCTIwMDktMDctMjEgMTE6Mjg6MTcuMDAwMDAwMDAwIC0wNzAwCkBAIC0wLDAgKzEs Mzk0IEBACisvKgorICogYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L2NwY2k2MjAwX3Rp bWVyLmMKKyAqCisgKiBDUENJNjIwMCBUaWNrIFRpbWVycyBTdXBwb3J0CisgKgorICogQXV0 aG9yOiBBaml0IFByZW0gPEFqaXQuUHJlbUBlbWVyc29uLmNvbT4KKyAqCisgKiBDb3B5cmln aHQgMjAwOCBFbWVyc29uIE5ldHdvcmsgUG93ZXIgRW1iZWRkZWQgQ29tcHV0aW5nIEluYy4K KyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRo ZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICog RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExp Y2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICov CisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5o PgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVw dC5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKworI2luY2x1ZGUgPGFzbS9pby5o PgorI2luY2x1ZGUgImNwY2k2MjAwLmgiCisjaW5jbHVkZSA8YXNtL2NwY2k2MjAwX3RpbWVy Lmg+CisKKyNkZWZpbmUgQ1BDSTYyMDBfVElDS19USU1FUl9CQVNFICAgICAgICAgICAgICAg IDB4RjIwMjAwMDAKKyNkZWZpbmUgQ1BDSTYyMDBfVElDS19USU1FUl9CTE9DS19TSVpFICAg ICAgICAgIDB4NEMKKworI2RlZmluZSBDUENJNjIwMF9USUNLX1RJTUVSX1BSRVNDQUxFUl9S RUdfT0ZGU0VUICAgICAgICAweDAKKyNkZWZpbmUgQ1BDSTYyMDBfVElDS19USU1FUl9DT05U Uk9MX1JFR19PRkZTRVQgICAgICAgICAgMHgxMAorI2RlZmluZSBDUENJNjIwMF9USUNLX1RJ TUVSX0NPTVBBUkVfUkVHX09GRlNFVCAgICAgICAgICAweDE0CisjZGVmaW5lIENQQ0k2MjAw X1RJQ0tfVElNRVJfQ09VTlRFUl9SRUdfT0ZGU0VUICAgICAgICAgIDB4MTgKKworI2RlZmlu ZSBDUENJNjIwMF9USUNLX1RJTUVSX0VOQyAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQor I2RlZmluZSBDUENJNjIwMF9USUNLX1RJTUVSX0NPQyAgICAgICAgICAgICAgICAgMHgwMDAw MDAwMgorI2RlZmluZSBDUENJNjIwMF9USUNLX1RJTUVSX0NPVkYgICAgICAgICAgICAgICAg MHgwMDAwMDAwNAorI2RlZmluZSBDUENJNjIwMF9USUNLX1RJTUVSX09WRiAgICAgICAgICAg ICAgICAgMHgwMDAwMDBGMAorI2RlZmluZSBDUENJNjIwMF9USUNLX1RJTUVSX0VOSU5UICAg ICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBDUENJNjIwMF9USUNLX1RJTUVSX0NJ TlQgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBDUENJNjIwMF9USUNLX1RJ TUVSX0lOVFMgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorCisjZGVmaW5lCU1JTl9NSUNS T1NFQ09ORFMJMTAwMDAKKyNkZWZpbmUgTUFYX1RJQ0tTCQkweEZGRkZGRkZGCisKK3N0cnVj dCBjcGNpNjIwMF90aW1lcl90IHsKKwljcGNpNjIwMF90aW1lcl9mIGZ1bmM7CisJdm9pZCAq ZnVuY19kYXRhOworCWludCBzdGFydGVkOworCWludCBwZXJpb2RpYzsKKwl1bG9uZyBwZXJp b2Q7CisJdWxvbmcgdGlja3M7Cit9OworCisjZGVmaW5lIEFMTF9NU0cgImNwY2k2MjAwX3Rp bWVyOiAiCisKKyNpZmRlZiBDUENJNjIwMF9USU1FUl9ERUJVRworaW50IGNwY2k2MjAwX3Rp bWVyX2RlYnVnID0gQ1BDSTYyMDBfVElNRVJfREVCVUc7CitNT0RVTEVfUEFSTShjcGNpNjIw MF90aW1lcl9kZWJ1ZywgImkiKTsKKyNkZWZpbmUgREVCVUcobiwgZm10LCBhcmdzLi4uKSBp ZiAoY3BjaTYyMDBfdGltZXJfZGVidWc+KG4pKSBwcmludGsoS0VSTl9JTkZPIEFMTF9NU0cg Zm10LCAjIyBhcmdzKQorc3RhdGljIGNvbnN0IGNoYXIgKnZlcnNpb24gPSAiY3BjaTYyMDBf dGltZXIuYyAxLjAuMCAoQWppdCBQcmVtKSI7CisjZWxzZQorI2RlZmluZSBERUJVRyhuLCBm bXQsIGFyZ3MuLi4pCisjZW5kaWYKKworZXh0ZXJuIGludCBjcGNpNjIwMF90aW1lcl9pcnE7 CisKK3N0YXRpYyBzdHJ1Y3QgY3BjaTYyMDBfdGltZXJfdCBjcGNpNjIwMF90aW1lcls0XTsK K3N0YXRpYyB2b2lkIF9faW9tZW0gKmNwY2k2MjAwX3RpbWVyX2Jhc2U7CitzdGF0aWMgdTMy IGNsa19vdXQgPSAxOwkJLyogVGlja3MgcGVyIG1pY3Jvc2Vjb25kICovCitzdGF0aWMgc3Bp bmxvY2tfdCBjcGNpNjIwMF90aW1lcl9sb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VEOworCitz dGF0aWMgaXJxcmV0dXJuX3QgY3BjaTYyMDBfdGltZXJfaW50X2hhbmRsZXIoaW50IGlycSwg dm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgY3BjaTYyMDBfdGltZXJfdCAqaW5mbyA9IGRhdGE7 CisJY3BjaTYyMDBfdGltZXJfZiBmdW5jOworCXZvaWQgKmZ1bmNfZGF0YTsKKwlpbnQgdGlt ZXJfbnVtYmVyOworCXUzMiBjdHJsX3JlZzsKKworCWlmIChkYXRhICE9ICh2b2lkICopICZj cGNpNjIwMF90aW1lclswXSkgCisJCXJldHVybiBJUlFfTk9ORTsKKworCWZvciAodGltZXJf bnVtYmVyID0gMDsgdGltZXJfbnVtYmVyIDw9IDM7IHRpbWVyX251bWJlcisrKSB7CisJCWlm IChzd2FiMzIocmVhZGwoY3BjaTYyMDBfdGltZXJfYmFzZSArCisJCQkgKHRpbWVyX251bWJl ciArIDEpICoKKwkJCSBDUENJNjIwMF9USUNLX1RJTUVSX0NPTlRST0xfUkVHX09GRlNFVCkp ICYKKwkJICAgCSBDUENJNjIwMF9USUNLX1RJTUVSX0lOVFMpIHsKKwkJCWluZm8gPSAmY3Bj aTYyMDBfdGltZXJbdGltZXJfbnVtYmVyXTsKKwkJCWZ1bmNfZGF0YSA9IGluZm8tPmZ1bmNf ZGF0YTsKKwkJCWZ1bmMgPSBpbmZvLT5mdW5jOworCisJCQlpZiAoIWluZm8tPnBlcmlvZGlj KSB7CisJCQkJY3BjaTYyMDBfdGltZXJfc3RvcCh0aW1lcl9udW1iZXIpOworCQkJfSBlbHNl IHsKKwkJCQljdHJsX3JlZyA9IHN3YWIzMihyZWFkbChjcGNpNjIwMF90aW1lcl9iYXNlICsK KwkJCQkJKCh0aW1lcl9udW1iZXIgKyAxKSAqCisJCQkJCSBDUENJNjIwMF9USUNLX1RJTUVS X0NPTlRST0xfUkVHX09GRlNFVCkpKTsKKwkJCQljdHJsX3JlZyAmPSB+Q1BDSTYyMDBfVElD S19USU1FUl9FTkM7CisJCQkJY3RybF9yZWcgPQorCQkJCSAgICBDUENJNjIwMF9USUNLX1RJ TUVSX0NPVkYgfAorCQkJCSAgICBDUENJNjIwMF9USUNLX1RJTUVSX0NJTlQ7CisJCQkJd3Jp dGVsKHN3YWIzMihjdHJsX3JlZyksCisJCQkJICAgICAgIGNwY2k2MjAwX3RpbWVyX2Jhc2Ug KworCQkJCSAgICAgICAoKHRpbWVyX251bWJlciArIDEpICoKKwkJCQkJQ1BDSTYyMDBfVElD S19USU1FUl9DT05UUk9MX1JFR19PRkZTRVQpKTsKKwkJCQl3cml0ZWwoMCwKKwkJCQkgICAg ICAgY3BjaTYyMDBfdGltZXJfYmFzZSArCisJCQkJICAgICAgICgodGltZXJfbnVtYmVyICsg MSkgKgorCQkJCQlDUENJNjIwMF9USUNLX1RJTUVSX0NPTlRST0xfUkVHX09GRlNFVCkKKwkJ CQkgICAgICAgKworCQkJCSAgICAgICAoQ1BDSTYyMDBfVElDS19USU1FUl9DT1VOVEVSX1JF R19PRkZTRVQgLQorCQkJCQlDUENJNjIwMF9USUNLX1RJTUVSX0NPTlRST0xfUkVHX09GRlNF VCkpOworCQkJCURFQlVHKDEsCisJCQkJICAgICAgKCJUaW1lciAlZCBDb3VudGVyIDB4JXgg Q29tcGFyZSAweCV4XG4iLAorCQkJCSAgICAgICB0aW1lcl9udW1iZXIsCisJCQkJICAgICAg IHN3YWIzMihyZWFkbAorCQkJCQkgICAgICAoY3BjaTYyMDBfdGltZXJfYmFzZSArCisJCQkJ CSAgICAgICAoKHRpbWVyX251bWJlciArIDEpICoKKwkJCQkJCUNQQ0k2MjAwX1RJQ0tfVElN RVJfQ09OVFJPTF9SRUdfT0ZGU0VUKQorCQkJCQkgICAgICAgKworCQkJCQkgICAgICAgKENQ Q0k2MjAwX1RJQ0tfVElNRVJfQ09VTlRFUl9SRUdfT0ZGU0VUCisJCQkJCQktCisJCQkJCQlD UENJNjIwMF9USUNLX1RJTUVSX0NPTlRST0xfUkVHX09GRlNFVCkpKSwKKwkJCQkgICAgICAg c3dhYjMyKHJlYWRsCisJCQkJCSAgICAgIChjcGNpNjIwMF90aW1lcl9iYXNlICsKKwkJCQkJ ICAgICAgICgodGltZXJfbnVtYmVyICsgMSkgKgorCQkJCQkJQ1BDSTYyMDBfVElDS19USU1F Ul9DT05UUk9MX1JFR19PRkZTRVQpCisJCQkJCSAgICAgICArCisJCQkJCSAgICAgICAoQ1BD STYyMDBfVElDS19USU1FUl9DT01QQVJFX1JFR19PRkZTRVQKKwkJCQkJCS0KKwkJCQkJCUNQ Q0k2MjAwX1RJQ0tfVElNRVJfQ09OVFJPTF9SRUdfT0ZGU0VUKSkpKSk7CisJCQkJd3JpdGVs KHN3YWIzMgorCQkJCSAgICAgICAoQ1BDSTYyMDBfVElDS19USU1FUl9FTkMgfAorCQkJCQlD UENJNjIwMF9USUNLX1RJTUVSX0NPQyB8CisJCQkJCUNQQ0k2MjAwX1RJQ0tfVElNRVJfRU5J TlQpLAorCQkJCSAgICAgICBjcGNpNjIwMF90aW1lcl9iYXNlICsgCisJCQkJCSgodGltZXJf bnVtYmVyICsgMSkgKgorCQkJCQlDUENJNjIwMF9USUNLX1RJTUVSX0NPTlRST0xfUkVHX09G RlNFVCkpOworCQkJfQorCQkJaWYgKGZ1bmMpIAorCQkJCWZ1bmMoZnVuY19kYXRhKTsKKwkJ fQorCX0KKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyogCisgKiBTdG9wIHRoZSB0 aW1lcgorICovCitFWFBPUlRfU1lNQk9MKGNwY2k2MjAwX3RpbWVyX3N0b3ApOworaW50IGNw Y2k2MjAwX3RpbWVyX3N0b3AoaW50IHRpbWVyX251bWJlcikKK3sKKwl1MzIgcmVzZXRfdmFs dWU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICgodGltZXJfbnVtYmVyIDwgMCkg fHwgKHRpbWVyX251bWJlciA+IDMpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNwaW5fbG9j a19pcnFzYXZlKCZjcGNpNjIwMF90aW1lcl9sb2NrLCBmbGFncyk7CisJcmVzZXRfdmFsdWUg PSBzd2FiMzIocmVhZGwoY3BjaTYyMDBfdGltZXJfYmFzZSArCisJCQkJICAgKCh0aW1lcl9u dW1iZXIgKyAxKSAqCisJCQkJICAgIENQQ0k2MjAwX1RJQ0tfVElNRVJfQ09OVFJPTF9SRUdf T0ZGU0VUKSkpOworCXJlc2V0X3ZhbHVlICY9IH5DUENJNjIwMF9USUNLX1RJTUVSX0VOQzsK KwlyZXNldF92YWx1ZSAmPSB+Q1BDSTYyMDBfVElDS19USU1FUl9FTklOVDsKKwlyZXNldF92 YWx1ZSA9IENQQ0k2MjAwX1RJQ0tfVElNRVJfQ09WRiB8IENQQ0k2MjAwX1RJQ0tfVElNRVJf Q0lOVDsKKwl3cml0ZWwoc3dhYjMyKHJlc2V0X3ZhbHVlKSwKKwkgICAgICAgY3BjaTYyMDBf dGltZXJfYmFzZSArCisJICAgICAgICgodGltZXJfbnVtYmVyICsgMSkgKiBDUENJNjIwMF9U SUNLX1RJTUVSX0NPTlRST0xfUkVHX09GRlNFVCkpOworCXdyaXRlbCgwLCBjcGNpNjIwMF90 aW1lcl9iYXNlICsKKwkgICAgICAgKCh0aW1lcl9udW1iZXIgKyAxKSAqIENQQ0k2MjAwX1RJ Q0tfVElNRVJfQ09OVFJPTF9SRUdfT0ZGU0VUKSArCisJICAgICAgIChDUENJNjIwMF9USUNL X1RJTUVSX0NPVU5URVJfUkVHX09GRlNFVCAtCisJCUNQQ0k2MjAwX1RJQ0tfVElNRVJfQ09O VFJPTF9SRUdfT0ZGU0VUKSk7CisJd3JpdGVsKDB4ZmZmZmZmZmYsIGNwY2k2MjAwX3RpbWVy X2Jhc2UgKworCSAgICAgICAoKHRpbWVyX251bWJlciArIDEpICogQ1BDSTYyMDBfVElDS19U SU1FUl9DT05UUk9MX1JFR19PRkZTRVQpICsKKwkgICAgICAgKENQQ0k2MjAwX1RJQ0tfVElN RVJfQ09NUEFSRV9SRUdfT0ZGU0VUIC0KKwkJQ1BDSTYyMDBfVElDS19USU1FUl9DT05UUk9M X1JFR19PRkZTRVQpKTsKKwljcGNpNjIwMF90aW1lclt0aW1lcl9udW1iZXJdLmZ1bmMgPSBO VUxMOworCWNwY2k2MjAwX3RpbWVyW3RpbWVyX251bWJlcl0uZnVuY19kYXRhID0gTlVMTDsK KwljcGNpNjIwMF90aW1lclt0aW1lcl9udW1iZXJdLnN0YXJ0ZWQgPSAwOworCWNwY2k2MjAw X3RpbWVyW3RpbWVyX251bWJlcl0ucGVyaW9kaWMgPSAwOworCWNwY2k2MjAwX3RpbWVyW3Rp bWVyX251bWJlcl0ucGVyaW9kID0gMDsKKwljcGNpNjIwMF90aW1lclt0aW1lcl9udW1iZXJd LnRpY2tzID0gMHhGRkZGRkZGRjsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcGNpNjIw MF90aW1lcl9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworLyogCisgKiBTdGFy dCB0aGUgdGltZXIKKyAqLworRVhQT1JUX1NZTUJPTChjcGNpNjIwMF90aW1lcl9zdGFydCk7 CitpbnQgY3BjaTYyMDBfdGltZXJfc3RhcnQoaW50IHRpbWVyX251bWJlciwgdW5zaWduZWQg bG9uZyBtaWNyb3NlY29uZHMsCisJCQkgY3BjaTYyMDBfdGltZXJfZiBmdW5jLCB2b2lkICpm dW5jX2RhdGEsIGludCBwZXJpb2RpYykKK3sKKwlpbnQgcmVzID0gMDsKKwl1bnNpZ25lZCBs b25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgdGlja3M7CisKKwlwcmludGsoS0VSTl9JTkZP CisJICAgICAgICJjcGNpNjIwMF90aW1lcjogc3RhcnRfdGltZXI6IG51bSAlZCBtaWNyb3Nl Y29uZHMgMHglbHggcGVyaW9kaWMgJWRcbiIsCisJICAgICAgIHRpbWVyX251bWJlciwgbWlj cm9zZWNvbmRzLCBwZXJpb2RpYyk7CisJaWYgKCh0aW1lcl9udW1iZXIgPCAwKSB8fCAodGlt ZXJfbnVtYmVyID4gMykpCisJCXJldHVybiAtRUlOVkFMOworCWlmICgobWljcm9zZWNvbmRz IDwgTUlOX01JQ1JPU0VDT05EUykgfHwKKwkgICAgKG1pY3Jvc2Vjb25kcyA+IE1BWF9USUNL UyAvIGNsa19vdXQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoZnVuYyA9PSBOVUxMKQor CQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoY3BjaTYyMDBfdGltZXJbdGltZXJfbnVtYmVyXS5z dGFydGVkID09IDEpCisJCXJldHVybiAtRUJVU1k7CisJaWYgKChyZXMgPSBjcGNpNjIwMF90 aW1lcl9zdG9wKHRpbWVyX251bWJlcikpIDwgMCkKKwkJcmV0dXJuIHJlczsKKwl0aWNrcyA9 IG1pY3Jvc2Vjb25kcyAqIGNsa19vdXQ7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNwY2k2MjAw X3RpbWVyX2xvY2ssIGZsYWdzKTsKKwljcGNpNjIwMF90aW1lclt0aW1lcl9udW1iZXJdLnN0 YXJ0ZWQgPSAxOworCWNwY2k2MjAwX3RpbWVyW3RpbWVyX251bWJlcl0uZnVuYyA9IGZ1bmM7 CisJY3BjaTYyMDBfdGltZXJbdGltZXJfbnVtYmVyXS5mdW5jX2RhdGEgPSBmdW5jX2RhdGE7 CisJY3BjaTYyMDBfdGltZXJbdGltZXJfbnVtYmVyXS5wZXJpb2RpYyA9IHBlcmlvZGljOwor CWNwY2k2MjAwX3RpbWVyW3RpbWVyX251bWJlcl0ucGVyaW9kID0gbWljcm9zZWNvbmRzOwor CWNwY2k2MjAwX3RpbWVyW3RpbWVyX251bWJlcl0udGlja3MgPSB0aWNrczsKKwl3cml0ZWwo c3dhYjMyKHRpY2tzKSwgY3BjaTYyMDBfdGltZXJfYmFzZSArCisJICAgICAgICgodGltZXJf bnVtYmVyICsgMSkgKiBDUENJNjIwMF9USUNLX1RJTUVSX0NPTlRST0xfUkVHX09GRlNFVCkg KworCSAgICAgICAoQ1BDSTYyMDBfVElDS19USU1FUl9DT01QQVJFX1JFR19PRkZTRVQgLQor CQlDUENJNjIwMF9USUNLX1RJTUVSX0NPTlRST0xfUkVHX09GRlNFVCkpOworCXdyaXRlbCgw LCBjcGNpNjIwMF90aW1lcl9iYXNlICsKKwkgICAgICAgKCh0aW1lcl9udW1iZXIgKyAxKSAq IENQQ0k2MjAwX1RJQ0tfVElNRVJfQ09OVFJPTF9SRUdfT0ZGU0VUKSArCisJICAgICAgIChD UENJNjIwMF9USUNLX1RJTUVSX0NPVU5URVJfUkVHX09GRlNFVCAtCisJCUNQQ0k2MjAwX1RJ Q0tfVElNRVJfQ09OVFJPTF9SRUdfT0ZGU0VUKSk7CisJd3JpdGVsKHN3YWIzMihDUENJNjIw MF9USUNLX1RJTUVSX0VOQyB8IENQQ0k2MjAwX1RJQ0tfVElNRVJfQ09DIHwKKwkJICAgICAg Q1BDSTYyMDBfVElDS19USU1FUl9FTklOVCksCisJICAgICAgIGNwY2k2MjAwX3RpbWVyX2Jh c2UgKworCSAgICAgICAoKHRpbWVyX251bWJlciArIDEpICogQ1BDSTYyMDBfVElDS19USU1F Ul9DT05UUk9MX1JFR19PRkZTRVQpKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcGNp NjIwMF90aW1lcl9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworLyogCisgKiBH ZXQgdGhlIHRpbWVyIHJlc29sdXRpb24sIGluIG1pY3Jvc2Vjb25kcy90aWNrCisgKi8KK0VY UE9SVF9TWU1CT0woY3BjaTYyMDBfdGltZXJfZ2V0X3Jlc29sdXRpb24pOwordW5zaWduZWQg bG9uZyBjcGNpNjIwMF90aW1lcl9nZXRfcmVzb2x1dGlvbih2b2lkKQoreworCXUzMiBwcmVz Y2FsZXJfYWRqdXN0OworCisJLyogCisJICogUHJlc2NhbGVyX2FkanVzdCA9IDI1NiAtIENM S0lOL0NMS09VVAorCSAqIENMS0lOID0gMjUgTUh6CisJICovCisKKwlwcmVzY2FsZXJfYWRq dXN0ID0gcmVhZGwoY3BjaTYyMDBfdGltZXJfYmFzZSArCisJCQkJIENQQ0k2MjAwX1RJQ0tf VElNRVJfUFJFU0NBTEVSX1JFR19PRkZTRVQpOworCXJldHVybiAoMjUgLyAoMjU2IC0gcHJl c2NhbGVyX2FkanVzdCkpOworfQorCisvKiAKKyAqIFNldCB0aGUgdGltZXIgcmVzb2x1dGlv biwgaW4gdGlja3MvbWljcm9zZWNvbmQKKyAqLworRVhQT1JUX1NZTUJPTChjcGNpNjIwMF90 aW1lcl9zZXRfcmVzb2x1dGlvbik7CitpbnQgY3BjaTYyMDBfdGltZXJfc2V0X3Jlc29sdXRp b24odW5zaWduZWQgbG9uZyB0aWNrcykKK3sKKwl1MzIgcHJlc2NhbGVyX2FkanVzdDsKKwlp bnQgaTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogCisJICogUHJlc2NhbGVyX2Fk anVzdCA9IDI1NiAtIENMS0lOL0NMS09VVAorCSAqIENMS0lOID0gMjUgTUh6CisJICovCisK KwlpZiAoKHRpY2tzIDwgTUlOX1RJQ0tTX1BFUl9NSUNST1NFQ09ORCkgfHwKKwkgICAgKHRp Y2tzID4gTUFYX1RJQ0tTX1BFUl9NSUNST1NFQ09ORCkpCisJCXJldHVybiAtRUlOVkFMOwor CisJY2xrX291dCA9IHRpY2tzOworCXByZXNjYWxlcl9hZGp1c3QgPSAyNTYgLSAoMjUgLyBj bGtfb3V0KTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjcGNpNjIwMF90aW1lcl9sb2NrLCBm bGFncyk7CisJZm9yIChpID0gMDsgaSA8PSAzOyBpKyspIHsKKwkJaWYgKGNwY2k2MjAwX3Rp bWVyW2ldLnN0YXJ0ZWQgPT0gMSkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3Bj aTYyMDBfdGltZXJfbG9jaywgZmxhZ3MpOworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCX0K KworCXdyaXRlbChwcmVzY2FsZXJfYWRqdXN0LCBjcGNpNjIwMF90aW1lcl9iYXNlICsKKwkg ICAgICAgQ1BDSTYyMDBfVElDS19USU1FUl9QUkVTQ0FMRVJfUkVHX09GRlNFVCk7CisJc3Bp bl91bmxvY2tfaXJxcmVzdG9yZSgmY3BjaTYyMDBfdGltZXJfbG9jaywgZmxhZ3MpOworCisJ cmV0dXJuIDA7Cit9CisKKy8qIAorICogR2V0IHRoZSB0aW1lciB2YWx1ZSwgaW4gdGlja3MK KyAqLworRVhQT1JUX1NZTUJPTChjcGNpNjIwMF90aW1lcl9nZXRfdGlja3MpOwordW5zaWdu ZWQgbG9uZyBjcGNpNjIwMF90aW1lcl9nZXRfdGlja3MoaW50IHRpbWVyX251bWJlcikKK3sK KwlpZiAoKHRpbWVyX251bWJlciA8IDApIHx8ICh0aW1lcl9udW1iZXIgPiAzKSkKKwkJcmV0 dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gc3dhYjMyKHJlYWRsKGNwY2k2MjAwX3RpbWVyX2Jh c2UgKworCQkJICAgICgodGltZXJfbnVtYmVyICsKKwkJCSAgICAgIDEpICogQ1BDSTYyMDBf VElDS19USU1FUl9DT05UUk9MX1JFR19PRkZTRVQpICsKKwkJCSAgICAoQ1BDSTYyMDBfVElD S19USU1FUl9DT1VOVEVSX1JFR19PRkZTRVQgLQorCQkJICAgICBDUENJNjIwMF9USUNLX1RJ TUVSX0NPTlRST0xfUkVHX09GRlNFVCkpKTsKK30KKworI2lmZGVmIENPTkZJR19QUk9DX0ZT CisKK3N0YXRpYyBpbnQKK2NwY2k2MjAwX3RpbWVyX3Byb2NfcmVhZChjaGFyICpidWYsIGNo YXIgKipzdGFydCwgb2ZmX3Qgb2ZmLCBpbnQgbGVuLCBpbnQgKmVvZiwKKwkJCSB2b2lkICpk YXRhKQoreworCWludCBpOworCisJbGVuID0gMDsKKwlsZW4gKz0KKwkgICAgc3ByaW50Zihi dWYgKyBsZW4sCisJCSAgICAiXG5UaW1lciAgICAgQWN0aXZlICBQZXJpb2RpYyAgUGVyaW9k KHRpY2tzKSAgIFBlcmlvZChtaWNyb3NlY29uZHMpXG4iKTsKKwlsZW4gKz0KKwkgICAgc3By aW50ZihidWYgKyBsZW4sCisJCSAgICAiX19fX18gICAgIF9fX19fXyAgX19fX19fX18gIF9f X19fX19fX19fX18gICBfX19fX19fX19fX19fX19fX19fX1xuIik7CisJZm9yIChpID0gMDsg aSA8PSAzOyBpKyspIHsKKwkJbGVuICs9CisJCSAgICBzcHJpbnRmKGJ1ZiArIGxlbiwKKwkJ CSAgICAiIyVkICAgICAgICAlYyAgICAgICAlYyAgICAgICAgIDB4JTA4bHggICAgICAlbGRc biIsCisJCQkgICAgaSArIDEsCisJCQkgICAgKChjcGNpNjIwMF90aW1lcltpXS5zdGFydGVk ID09IDEpID8gJ3knIDogJ24nKSwKKwkJCSAgICAoKGNwY2k2MjAwX3RpbWVyW2ldLnBlcmlv ZGljID09IDEpID8gJ3knIDogJ24nKSwKKwkJCSAgICAoKGNwY2k2MjAwX3RpbWVyW2ldLnBl cmlvZGljID09CisJCQkgICAgICAxKSA/IGNwY2k2MjAwX3RpbWVyW2ldLnRpY2tzIDogMCks CisJCQkgICAgKChjcGNpNjIwMF90aW1lcltpXS5wZXJpb2RpYyA9PQorCQkJICAgICAgMSkg PyBjcGNpNjIwMF90aW1lcltpXS5wZXJpb2QgOiAwKSk7CisJfQorCXJldHVybiBsZW47Cit9 CisKKyNlbmRpZgkJCQkvKiBDT05GSUdfUFJPQ19GUyAqLworCitzdGF0aWMgX19pbml0IGlu dCBjcGNpNjIwMF90aW1lcl9pbml0KHZvaWQpCit7CisJaW50IHJlcyA9IDA7CisJaW50IGk7 CisKKwlwcmludGsoS0VSTl9JTkZPICJjcGNpNjIwMC10aW1lcjogQ1BDSTYyMDAgVGljayBU aW1lcnNcbiIpOworCisJY3BjaTYyMDBfdGltZXJfYmFzZSA9IGlvcmVtYXAoQ1BDSTYyMDBf VElDS19USU1FUl9CQVNFLAorCQkJCSAgICAgQ1BDSTYyMDBfVElDS19USU1FUl9CTE9DS19T SVpFKTsKKwlpZiAoY3BjaTYyMDBfdGltZXJfYmFzZSA9PSBOVUxMKQorCQlyZXR1cm4gLUVO T01FTTsKKworCWZvciAoaSA9IDA7IGkgPD0gMzsgaSsrKSB7CisJCWNwY2k2MjAwX3RpbWVy W2ldLmZ1bmMgPSBOVUxMOworCQljcGNpNjIwMF90aW1lcltpXS5mdW5jX2RhdGEgPSBOVUxM OworCQljcGNpNjIwMF90aW1lcltpXS5zdGFydGVkID0gMDsKKwkJY3BjaTYyMDBfdGltZXJb aV0ucGVyaW9kaWMgPSAwOworCQljcGNpNjIwMF90aW1lcltpXS5wZXJpb2QgPSAwOworCQlj cGNpNjIwMF90aW1lcltpXS50aWNrcyA9IDA7CisJfQorCXJlcyA9IHJlcXVlc3RfaXJxKGNw Y2k2MjAwX3RpbWVyX2lycSwgY3BjaTYyMDBfdGltZXJfaW50X2hhbmRsZXIsCisJCQkgIElS UUZfU0hBUkVELAorCQkJICAiQ1BDSTYyMDAgVGljayBUaW1lcnMiLCAmY3BjaTYyMDBfdGlt ZXJbMF0pOworCWlmIChyZXMgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ1BDSTYyMDAg VGltZXI6IENhbid0IGFsbG9jYXRlIElSUSAlZC5cbiIsCisJCSAgICAgICBjcGNpNjIwMF90 aW1lcl9pcnEpOworCQlyZXR1cm4gcmVzOworCX0KKyNpZmRlZiBDT05GSUdfUFJPQ19GUwor CWNyZWF0ZV9wcm9jX3JlYWRfZW50cnkoImNwY2k2MjAwX3RpbWVycyIsIDAsIE5VTEwsCisJ CQkgICAgICAgY3BjaTYyMDBfdGltZXJfcHJvY19yZWFkLCBOVUxMKTsKKyNlbmRpZgorCXJl dHVybiAwOworfQorCitzdGF0aWMgX19leGl0IHZvaWQgY3BjaTYyMDBfdGltZXJfZXhpdCh2 b2lkKQoreworCWludCB0aW1lcl9udW1iZXI7CisKKwlmb3IgKHRpbWVyX251bWJlciA9IDA7 IHRpbWVyX251bWJlciA8PSAzOyB0aW1lcl9udW1iZXIrKykgeworCQljcGNpNjIwMF90aW1l cl9zdG9wKHRpbWVyX251bWJlcik7CisJfQorCWZyZWVfaXJxKGNwY2k2MjAwX3RpbWVyX2ly cSwgJmNwY2k2MjAwX3RpbWVyWzBdKTsKKwlpb3VubWFwKGNwY2k2MjAwX3RpbWVyX2Jhc2Up OworfQorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK01PRFVMRV9BVVRIT1IoIkFqaXQg UHJlbSA8YWppdC5wcmVtQGVtZXJzb24uY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJD UENJNjIwMCBUaWNrIFRpbWVyIGRyaXZlciIpOworCittb2R1bGVfaW5pdChjcGNpNjIwMF90 aW1lcl9pbml0KTsKK21vZHVsZV9leGl0KGNwY2k2MjAwX3RpbWVyX2V4aXQpOwpkaWZmIC11 IC0tbmV3LWZpbGUgLS1yZWN1cnNpdmUgbGludXgtMi42LjI5LjYub3JpZy9hcmNoL3Bvd2Vy cGMvcGxhdGZvcm1zLzg1eHgvS2NvbmZpZyBsaW51eC0yLjYuMjkuNi5tb2QvYXJjaC9wb3dl cnBjL3BsYXRmb3Jtcy84NXh4L0tjb25maWcKLS0tIGxpbnV4LTIuNi4yOS42Lm9yaWcvYXJj aC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L0tjb25maWcJMjAwOS0wNy0wMiAxNjo0MToyMC4w MDAwMDAwMDAgLTA3MDAKKysrIGxpbnV4LTIuNi4yOS42Lm1vZC9hcmNoL3Bvd2VycGMvcGxh dGZvcm1zLzg1eHgvS2NvbmZpZwkyMDA5LTA3LTIxIDExOjI4OjE3LjAwMDAwMDAwMCAtMDcw MApAQCAtMTE1LDcgKzExNSw4MyBAQAogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMg c3VwcG9ydCBmb3IgdGhlIFdpbmQgUml2ZXIgU0JDODU2MCBib2FyZAogCitjb25maWcgTVZN RTMxMDAKKyAgICAgICAgYm9vbCAiRW1lcnNvbiBOZXR3b3JrIFBvd2VyIEVtYmVkZGVkIENv bXB1dGluZyBNVk1FMzEwMCIKKyAgICAgICAgaGVscAorICAgICAgICAgIFRoaXMgb3B0aW9u IGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIEVtZXJzb24gTmV0d29yayBQb3dlciBNVk1FMzEw MCBib2FyZAorCitjb25maWcgTVZNRTQxMDAKKyAgICAgICAgYm9vbCAiRW1lcnNvbiBOZXR3 b3JrIFBvd2VyIEVtYmVkZGVkIENvbXB1dGluZyBNVk1FNDEwMCIKKyAgICAgICAgaGVscAor ICAgICAgICAgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIEVtZXJzb24g TmV0d29yayBQb3dlciBFbWJlZGRlZCBDb21wdXRpbmcgTVZNRTQxMDAgYm9hcmQKKworY29u ZmlnIENQQ0k2MjAwCisgICAgICAgIGJvb2wgIkVtZXJzb24gTmV0d29yayBQb3dlciBFbWJl ZGRlZCBDb21wdXRpbmcgQ1BDSTYyMDAiCisgICAgICAgIGhlbHAKKyAgICAgICAgICBUaGlz IG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBFbWVyc29uIE5ldHdvcmsgUG93ZXIg RW1iZWRkZWQgQ29tcHV0aW5nIENQQ0k2MjAwIGJvYXJkCisKIGVuZGlmICMgTVBDODV4eAog CiBjb25maWcgVFFNODV4eAogCWJvb2wKKworY29uZmlnIE1WTUUzMTAwX0VOQUJMRV9ERFJf RVJST1JTCisgICAgICAgIGJvb2wgIkVuYWJsZSBERFIgRXJyb3IgUmVwb3J0aW5nIgorICAg ICAgICBkZXBlbmRzIG9uIE1WTUUzMTAwCisgICAgICAgIGRlZmF1bHQgeQorCitjb25maWcg TVZNRTMxMDBfRU5BQkxFX0wyX0VSUk9SUworICAgICAgICBib29sICJFbmFibGUgTDIgRXJy b3IgUmVwb3J0aW5nIgorICAgICAgICBkZXBlbmRzIG9uIE1WTUUzMTAwCisgICAgICAgIGRl ZmF1bHQgeQorCitjb25maWcgTVZNRTMxMDBfRU5BQkxFX1BDSV9FUlJPUlMKKyAgICAgICAg Ym9vbCAiRW5hYmxlIFBDSSBFcnJvciBSZXBvcnRpbmciCisgICAgICAgIGRlcGVuZHMgb24g TVZNRTMxMDAKKyAgICAgICAgZGVmYXVsdCB5CisKK2NvbmZpZyBNVk1FMzEwMF9USUNLX1RJ TUVSUworICAgICAgICBib29sICJFbmFibGUgc3VwcG9ydCBmb3IgdGhlIFRpY2sgVGltZXJz IG9uIHRoZSBNVk1FMzEwMCIKKyAgICAgICAgZGVwZW5kcyBvbiBNVk1FMzEwMAorICAgICAg ICBkZWZhdWx0IHkKKworY29uZmlnIE1WTUU0MTAwX0VOQUJMRV9ERFJfRVJST1JTCisgICAg ICAgIGJvb2wgIkVuYWJsZSBERFIgRXJyb3IgUmVwb3J0aW5nIgorICAgICAgICBkZXBlbmRz IG9uIE1WTUU0MTAwCisgICAgICAgIGRlZmF1bHQgeQorCitjb25maWcgTVZNRTQxMDBfRU5B QkxFX0wyX0VSUk9SUworICAgICAgICBib29sICJFbmFibGUgTDIgRXJyb3IgUmVwb3J0aW5n IgorICAgICAgICBkZXBlbmRzIG9uIE1WTUU0MTAwCisgICAgICAgIGRlZmF1bHQgeQorCitj b25maWcgTVZNRTQxMDBfRU5BQkxFX1BDSV9FUlJPUlMKKyAgICAgICAgYm9vbCAiRW5hYmxl IFBDSSBFcnJvciBSZXBvcnRpbmciCisgICAgICAgIGRlcGVuZHMgb24gTVZNRTQxMDAKKyAg ICAgICAgZGVmYXVsdCB5CisKK2NvbmZpZyBNVk1FNDEwMF9USUNLX1RJTUVSUworICAgICAg ICBib29sICJFbmFibGUgc3VwcG9ydCBmb3IgdGhlIFRpY2sgVGltZXJzIG9uIHRoZSBNVk1F NDEwMCIKKyAgICAgICAgZGVwZW5kcyBvbiBNVk1FNDEwMAorICAgICAgICBkZWZhdWx0IHkK KworY29uZmlnIENQQ0k2MjAwX0VOQUJMRV9ERFJfRVJST1JTCisgICAgICAgIGJvb2wgIkVu YWJsZSBERFIgRXJyb3IgUmVwb3J0aW5nIgorICAgICAgICBkZXBlbmRzIG9uIENQQ0k2MjAw CisgICAgICAgIGRlZmF1bHQgeQorCitjb25maWcgQ1BDSTYyMDBfRU5BQkxFX0wyX0VSUk9S UworICAgICAgICBib29sICJFbmFibGUgTDIgRXJyb3IgUmVwb3J0aW5nIgorICAgICAgICBk ZXBlbmRzIG9uIENQQ0k2MjAwCisgICAgICAgIGRlZmF1bHQgeQorCitjb25maWcgQ1BDSTYy MDBfRU5BQkxFX1BDSV9FUlJPUlMKKyAgICAgICAgYm9vbCAiRW5hYmxlIFBDSSBFcnJvciBS ZXBvcnRpbmciCisgICAgICAgIGRlcGVuZHMgb24gQ1BDSTYyMDAKKyAgICAgICAgZGVmYXVs dCB5CisKK2NvbmZpZyBDUENJNjIwMF9USUNLX1RJTUVSUworICAgICAgICBib29sICJFbmFi bGUgc3VwcG9ydCBmb3IgdGhlIFRpY2sgVGltZXJzIG9uIHRoZSBDUENJNjIwMCIKKyAgICAg ICAgZGVwZW5kcyBvbiBDUENJNjIwMAorICAgICAgICBkZWZhdWx0IHkKKwpkaWZmIC11IC0t bmV3LWZpbGUgLS1yZWN1cnNpdmUgbGludXgtMi42LjI5LjYub3JpZy9hcmNoL3Bvd2VycGMv cGxhdGZvcm1zLzg1eHgvTWFrZWZpbGUgbGludXgtMi42LjI5LjYubW9kL2FyY2gvcG93ZXJw Yy9wbGF0Zm9ybXMvODV4eC9NYWtlZmlsZQotLS0gbGludXgtMi42LjI5LjYub3JpZy9hcmNo L3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvTWFrZWZpbGUJMjAwOS0wNy0wMiAxNjo0MToyMC4w MDAwMDAwMDAgLTA3MDAKKysrIGxpbnV4LTIuNi4yOS42Lm1vZC9hcmNoL3Bvd2VycGMvcGxh dGZvcm1zLzg1eHgvTWFrZWZpbGUJMjAwOS0wOC0xMyAxNDoxNToxOS4wMDAwMDAwMDAgLTA3 MDAKQEAgLTE0LDMgKzE0LDkgQEAKIG9iai0kKENPTkZJR19TQkM4NTYwKSAgICAgKz0gc2Jj ODU2MC5vCiBvYmotJChDT05GSUdfU0JDODU0OCkgICAgICs9IHNiYzg1NDgubwogb2JqLSQo Q09ORklHX0tTSTg1NjApCSAgKz0ga3NpODU2MC5vCitvYmotJChDT05GSUdfTVZNRTMxMDAp ICAgICs9IG12bWUzMTAwLm8gCitvYmotJChDT05GSUdfTVZNRTMxMDBfVElDS19USU1FUlMp CSs9IG12bWUzMTAwX3RpbWVyLm8KK29iai0kKENPTkZJR19NVk1FNDEwMCkJCQkrPSBtdm1l NDEwMC5vCitvYmotJChDT05GSUdfTVZNRTQxMDBfVElDS19USU1FUlMpCSs9IG12bWU0MTAw X3RpbWVyLm8KK29iai0kKENPTkZJR19DUENJNjIwMCkJCQkrPSBjcGNpNjIwMC5vIAorb2Jq LSQoQ09ORklHX0NQQ0k2MjAwX1RJQ0tfVElNRVJTKQkrPSBjcGNpNjIwMF90aW1lci5vCmRp ZmYgLXUgLS1uZXctZmlsZSAtLXJlY3Vyc2l2ZSBsaW51eC0yLjYuMjkuNi5vcmlnL2FyY2gv cG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tdm1lMzEwMC5jIGxpbnV4LTIuNi4yOS42Lm1vZC9h cmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXZtZTMxMDAuYwotLS0gbGludXgtMi42LjI5 LjYub3JpZy9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXZtZTMxMDAuYwkxOTY5LTEy LTMxIDE3OjAwOjAwLjAwMDAwMDAwMCAtMDcwMAorKysgbGludXgtMi42LjI5LjYubW9kL2Fy Y2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tdm1lMzEwMC5jCTIwMDktMDktMDIgMTA6NTc6 MzcuMDAwMDAwMDAwIC0wNzAwCkBAIC0wLDAgKzEsMTAyNSBAQAorLyoKKyAqIE1WTUUzMTAw IHNldHVwIGFuZCBlYXJseSBib290IGNvZGUgcGx1cyBvdGhlciByYW5kb20gYml0cy4KKyAq CisgKiBBdXRob3I6IEFqaXQgUHJlbSAoYWppdC5wcmVtQGVtZXJzb24uY29tKQorICoKKyAq IENvcHlyaWdodCAyMDA4LTIwMDkgRW1lcnNvbiBOZXR3b3JrIFBvd2VyIEVtYmVkZGVkIENv bXB1dGluZywgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRo ZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNo ZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lv biAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVy IHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgorI2luY2x1ZGUg PGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxs aW51eC9yZWJvb3QuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51 eC9rZGV2X3QuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CisjaW5jbHVkZSA8bGlu dXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxp bnV4L2luaXRyZC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxp bnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3Jvb3RfZGV2Lmg+CisjaW5jbHVk ZSA8bGludXgvcnRjLmg+CisjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgorI2luY2x1ZGUg PGxpbnV4L2ZzbF9kZXZpY2VzLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4K KworI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgor I2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1 ZGUgPGFzbS90aW1lLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL21h Y2hkZXAuaD4KKyNpbmNsdWRlIDxhc20vcGNpLWJyaWRnZS5oPgorI2luY2x1ZGUgPGFzbS9p cnEuaD4KKyNpbmNsdWRlIDxtbS9tbXVfZGVjbC5oPgorI2luY2x1ZGUgPGFzbS9wcm9tLmg+ CisjaW5jbHVkZSA8YXNtL21waWMuaD4KKyNpbmNsdWRlIDxhc20va21hcF90eXBlcy5oPgor I2luY2x1ZGUgPGFzbS9lZGFjLmg+CisjaW5jbHVkZSA8YXNtL3VkYmcuaD4KKworI2luY2x1 ZGUgPHN5c2Rldi9mc2xfcGNpLmg+CisjaW5jbHVkZSA8c3lzZGV2L2ZzbF9zb2MuaD4KKwor I2luY2x1ZGUgIm12bWUzMTAwLmgiCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGhiX2JhZGRy Oworc3RhdGljIHVuc2lnbmVkIGludCBidXNfZnJlcXVlbmN5Oworc3RhdGljIGludCBzZXJp YWxfaXJxOworCitzdGF0aWMgdm9pZCBfX2lvbWVtICpsMl9lcnJfcmVnczsKK3N0YXRpYyB2 b2lkIF9faW9tZW0gKnN5c3RlbV9jb250cm9sX3JlZ19hZGRyOworCisjZGVmaW5lIEwyX0VS Ul9SRUdTX09GRlNFVCAgICAgIDB4MjBFMjAKKyNkZWZpbmUgTDJfRVJSX1JFR1NfU0laRSAg ICAgICAgMHgzQworCisjZGVmaW5lIEwyX0NBUFRfREFUQV9ISSAgICAgICAgIDB4MjBFMjAK KyNkZWZpbmUgTDJfQ0FQVF9EQVRBX0xPICAgICAgICAgMHgyMEUyNAorI2RlZmluZSBMMl9D QVBUX0VDQyAgICAgICAgICAgICAweDIwRTI4CisjZGVmaW5lIEwyX0VSUl9ERVQgICAgICAg ICAgICAgIDB4MjBFNDAKKyNkZWZpbmUgTDJfRVJSX0RJUyAgICAgICAgICAgICAgMHgyMEU0 NAorI2RlZmluZSBMMl9FUlJfSU5UX0VOICAgICAgICAgICAweDIwRTQ4CisjZGVmaW5lIEwy X0VSUl9BVFRSICAgICAgICAgICAgIDB4MjBFNEMKKyNkZWZpbmUgTDJfRVJSX0FERFIgICAg ICAgICAgICAgMHgyMEU1MAorI2RlZmluZSBMMl9FUlJfQ1RMICAgICAgICAgICAgICAweDIw RTU4CisKKyNpZmRlZiBDT05GSUdfTVZNRTMxMDBfRU5BQkxFX0wyX0VSUk9SUworc3RhdGlj IGludCBsMl9pcnE7CitzdGF0aWMgaXJxcmV0dXJuX3QgbXZtZTMxMDBfbDJjYWNoZV9lcnJf aGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpOworI2VuZGlmCisKKyNpZmRlZiBDT05G SUdfTVZNRTMxMDBfRU5BQkxFX0REUl9FUlJPUlMKKworI2RlZmluZSBERFJfRVJSX1JFR1Nf T0ZGU0VUICAgICAweDJFMDAKKyNkZWZpbmUgRERSX0VSUl9SRUdTX1NJWkUgICAgICAgMHg1 QworCisjZGVmaW5lIEREUl9DQVBUX0RBVEFfSEkgICAgICAgIDB4MkUyMAorI2RlZmluZSBE RFJfQ0FQVF9EQVRBX0xPICAgICAgICAweDJFMjQKKyNkZWZpbmUgRERSX0NBUFRfRUNDICAg ICAgICAgICAgMHgyRTI4CisjZGVmaW5lIEREUl9FUlJfREVUICAgICAgICAgICAgIDB4MkU0 MAorI2RlZmluZSBERFJfRVJSX0RJUyAgICAgICAgICAgICAweDJFNDQKKyNkZWZpbmUgRERS X0VSUl9JTlRfRU4gICAgICAgICAgMHgyRTQ4CisjZGVmaW5lIEREUl9DQVBUX0FUVFIgICAg ICAgICAgIDB4MkU0QworI2RlZmluZSBERFJfQ0FQVF9BRERSICAgICAgICAgICAweDJFNTAK KyNkZWZpbmUgRERSX0VSUl9TQkUgICAgICAgICAgICAgMHgyRTU4CisKKyNkZWZpbmUgRERS X1NCRSAgICAgICAgICAgICAgICAgMHg0ICAgICAvKiBzaW5nbGUtYml0IEVDQyBlcnJvciAq LworI2RlZmluZSBERFJfTUJFICAgICAgICAgICAgICAgICAweDggICAgIC8qIG11bHRpLWJp dCBFQ0MgZXJyb3IgKi8KKyNkZWZpbmUgRERSX01NRSAgICAgICAgICAgICAgICAgMHg4MDAw MDAwMCAgICAgIC8qIG11bHRpcGxlIEVDQyBlcnJvciAqLworCitzdGF0aWMgaW50IGRkcl9l cnJvcnM7CitzdGF0aWMgdm9pZCBfX2lvbWVtICpkZHJfZXJyX3JlZ3M7CitzdGF0aWMgaW50 IGRkcl9pcnE7CitzdGF0aWMgaXJxcmV0dXJuX3QgbXZtZTMxMDBfZGRyX2Vycl9oYW5kbGVy KGludCBpcnEsIHZvaWQgKmRldl9pZCk7CisKKyNlbmRpZgorCisKKyNkZWZpbmUgUENJX0VS Ul9SRUdTX09GRlNFVCAgICAgMHg4RTAwCisjZGVmaW5lIFBDSV9FUlJfUkVHU19TSVpFICAg ICAgIDB4MjgKKworI2RlZmluZSBQQ0lfRVJSX0RFVCAgICAgICAgICAgICAweDhFMDAKKyNk ZWZpbmUgUENJX0VSUl9DQVBfRElTICAgICAgICAgMHg4RTA0CisjZGVmaW5lIFBDSV9FUlJf SU5UX0VOICAgICAgICAgIDB4OEUwOAorI2RlZmluZSBQQ0lfRVJSX0FUVFIgICAgICAgICAg ICAweDhFMEMKKyNkZWZpbmUgUENJX0VSUl9BRERSICAgICAgICAgICAgMHg4RTEwCisjZGVm aW5lIFBDSV9FUlJfRVhUX0FERFIgICAgICAgIDB4OEUxNAorI2RlZmluZSBQQ0lfRVJSX0RM ICAgICAgICAgICAgICAweDhFMTgKKyNkZWZpbmUgUENJX0VSUl9ESCAgICAgICAgICAgICAg MHg4RTFDCisjZGVmaW5lIFBDSV9HQVNfVElNUiAgICAgICAgICAgIDB4OEUyMAorI2RlZmlu ZSBQQ0lfUENJWF9USU1SICAgICAgICAgICAweDhFMjQKKworc3RhdGljIGludCBwY2lfaXJx OworCisjaWZkZWYgQ09ORklHX01WTUUzMTAwX0VOQUJMRV9QQ0lfRVJST1JTCitzdGF0aWMg aW50IHBjaV9lcnJvcnM7CitzdGF0aWMgdm9pZCBfX2lvbWVtICpwY2lfZXJyX3JlZ3M7Citz dGF0aWMgaXJxcmV0dXJuX3QgbXZtZTMxMDBfcGNpX2Vycl9oYW5kbGVyKGludCBpcnEsIHZv aWQgKmRldl9pZCk7CisKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1ZNRV9CUklER0VfQk9P VE1FTQordm9pZCAqdm1lX2RyaXZlcl9ib290bWVtOwordW5zaWduZWQgaW50IHZtZV9ib290 bWVtX3NpemU7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NVk1FMzEwMF9USUNLX1RJTUVS UworaW50IG12bWUzMTAwX3RpbWVyX2lycTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1NF TlNPUlNfRFMxNjIxCitpbnQgZHMxNjIxX2lycTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklH X01WTUUzMTAwX0VOQUJMRV9ERFJfRVJST1JTCisKK3N0YXRpYyBpcnFyZXR1cm5fdCBtdm1l MzEwMF9kZHJfZXJyX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXUzMiBl cnJfYWRkciwgZGF0YV9oaSwgZGF0YV9sbywgZWNjLCBlcnJfYXR0ciwgZXJyX2RldCwgc2Jl X2NvdW50OworICAgICAgICB1MzIgcGZuLCBvZmZzZXQ7CisgICAgICAgIHN0cnVjdCBwYWdl ICpwZzsKKyAgICAgICAgdm9pZCAqdmlydF9hZGRyOworICAgICAgICB1bnNpZ25lZCBsb25n IGZsYWdzID0gMDsKKworCWVycl9kZXQgPSByZWFkbChkZHJfZXJyX3JlZ3MgKyBERFJfRVJS X0RFVCAtIEREUl9FUlJfUkVHU19PRkZTRVQpOworCWlmICghZXJyX2RldCkKKwkJcmV0dXJu IElSUV9OT05FOworCisJLyogQ29sbGVjdCBlcnJvciBpbmZvcm1hdGlvbiBmcm9tIHRoZSBl cnJvciByZWdpc3RlcnMgKi8KKwllcnJfYWRkciA9IHJlYWRsKGRkcl9lcnJfcmVncyArIERE Ul9DQVBUX0FERFIgLSBERFJfRVJSX1JFR1NfT0ZGU0VUKTsKKwlkYXRhX2hpID0gcmVhZGwo ZGRyX2Vycl9yZWdzICsgRERSX0NBUFRfREFUQV9ISSAtIEREUl9FUlJfUkVHU19PRkZTRVQp OworCWRhdGFfbG8gPSByZWFkbChkZHJfZXJyX3JlZ3MgKyBERFJfQ0FQVF9EQVRBX0xPIC0g RERSX0VSUl9SRUdTX09GRlNFVCk7CisJZXJyX2F0dHIgPSByZWFkbChkZHJfZXJyX3JlZ3Mg KyBERFJfQ0FQVF9BVFRSIC0gRERSX0VSUl9SRUdTX09GRlNFVCk7CisJZWNjID0gcmVhZGwo ZGRyX2Vycl9yZWdzICsgRERSX0NBUFRfRUNDIC0gRERSX0VSUl9SRUdTX09GRlNFVCk7CisJ c2JlX2NvdW50ID0gcmVhZGwoZGRyX2Vycl9yZWdzICsgRERSX0VSUl9TQkUgLSBERFJfRVJS X1JFR1NfT0ZGU0VUKTsKKworCWRkcl9lcnJvcnMrKzsKKworCS8qIERpc3BsYXkgZXJyb3Ig aW5mb3JtYXRpb24gKi8KKwlwcmludGsoS0VSTl9FUlIgIkREUiBFcnJvciFcbiIpOworCXBy aW50ayhLRVJOX0VSUiAiRERSIEVSUk9SIERFVEVDVCBSRUcgMHglMDh4XG4iLCBzd2FiMzIo ZXJyX2RldCkpOworCXByaW50ayhLRVJOX0VSUiAiRERSIEVSUk9SIEFERFJFU1MgQ0FQVFVS RSBSRUcgMHglMDh4XG4iLAorCSAgICAgICBzd2FiMzIoZXJyX2FkZHIpKTsKKwlwcmludGso S0VSTl9FUlIgIkREUiBFUlJPUiBEQVRBIEhJR0ggQ0FQVFVSRSBSRUcgMHglMDh4XG4iLAor CSAgICAgICBzd2FiMzIoZGF0YV9oaSkpOworCXByaW50ayhLRVJOX0VSUiAiRERSIEVSUk9S IERBVEEgTE9XIENBUFRVUkUgUkVHIDB4JTA4eFxuIiwKKwkgICAgICAgc3dhYjMyKGRhdGFf bG8pKTsKKwlwcmludGsoS0VSTl9FUlIgIkREUiBFUlJPUiBBVFRSSUJVVEVTIENBUFRVUkUg UkVHIDB4JTA4eFxuIiwKKwkgICAgICAgc3dhYjMyKGVycl9hdHRyKSk7CisJcHJpbnRrKEtF Uk5fRVJSICJERFIgRVJST1IgU1lORFJPTUUgUkVHIDB4JTA4eFxuIiwgc3dhYjMyKGVjYykp OworCXByaW50ayhLRVJOX0VSUiAiRERSIEVSUk9SIFNCRSBSRUcgMHglMDh4XG4iLCBzd2Fi MzIoc2JlX2NvdW50KSk7CisgICAgICAgIHByaW50ayhLRVJOX0VSUiAiRERSIEVSUk9SIENP VU5UICV1XG4iLCBkZHJfZXJyb3JzKTsKKworICAgICAgICBpZiAoZXJyX2RldCAmIEREUl9T QkUpIHsKKyAgICAgICAgICAgICAgICAvKiBTY3J1YiBibG9jayAqLworICAgICAgICAgICAg ICAgIHBmbiA9IGVycl9hZGRyID4+IFBBR0VfU0hJRlQ7CisgICAgICAgICAgICAgICAgb2Zm c2V0ID0gZXJyX2FkZHIgJiB+UEFHRV9NQVNLOworCisgICAgICAgICAgICAgICAgcGcgPSBw Zm5fdG9fcGFnZShwZm4pOworCisgICAgICAgICAgICAgICAgaWYgKFBhZ2VIaWdoTWVtKHBn KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwor ICAgICAgICAgICAgICAgIHZpcnRfYWRkciA9IGttYXBfYXRvbWljKHBnLCBLTV9CT1VOQ0Vf UkVBRCk7CisgICAgICAgICAgICAgICAgYXRvbWljX3NjcnViKHZpcnRfYWRkciArIG9mZnNl dCwgOCk7CisgICAgICAgICAgICAgICAga3VubWFwX2F0b21pYyh2aXJ0X2FkZHIsIEtNX0JP VU5DRV9SRUFEKTsKKworICAgICAgICAgICAgICAgIGlmIChQYWdlSGlnaE1lbShwZykpCisg ICAgICAgICAgICAgICAgICAgICAgICBsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisgICAg ICAgIH0KKworCS8qIENsZWFyIGludGVycnVwdCBjYXVzZSByZWdpc3RlciAqLworCXdyaXRl bChlcnJfZGV0LCBkZHJfZXJyX3JlZ3MgKyBERFJfRVJSX0RFVCAtIEREUl9FUlJfUkVHU19P RkZTRVQpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisjZW5kaWYKKworI2lmZGVm IENPTkZJR19NVk1FMzEwMF9FTkFCTEVfTDJfRVJST1JTCisKK3N0YXRpYyBpcnFyZXR1cm5f dCBtdm1lMzEwMF9sMmNhY2hlX2Vycl9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkK K3sKKwl1MzIgZXJyX2FkZHIsIGRhdGFfaGksIGRhdGFfbG8sIGVjYywgZXJyX2F0dHIsIGVy cl9kZXQ7CisKKwkvKiBDb2xsZWN0IGVycm9yIGluZm9ybWF0aW9uIGZyb20gdGhlIGVycm9y IHJlZ2lzdGVycyAqLworCWVycl9kZXQgPSByZWFkbChsMl9lcnJfcmVncyArIEwyX0VSUl9E RVQgLSBMMl9FUlJfUkVHU19PRkZTRVQpOworCisJaWYgKCFlcnJfZGV0KQorCQlyZXR1cm4g SVJRX05PTkU7CisKKwllcnJfYXR0ciA9IHJlYWRsKGwyX2Vycl9yZWdzICsgTDJfRVJSX0FU VFIgLSBMMl9FUlJfUkVHU19PRkZTRVQpOworCWVycl9hZGRyID0gcmVhZGwobDJfZXJyX3Jl Z3MgKyBMMl9FUlJfQUREUiAtIEwyX0VSUl9SRUdTX09GRlNFVCk7CisJZGF0YV9oaSA9IHJl YWRsKGwyX2Vycl9yZWdzICsgTDJfQ0FQVF9EQVRBX0hJIC0gTDJfRVJSX1JFR1NfT0ZGU0VU KTsKKwlkYXRhX2xvID0gcmVhZGwobDJfZXJyX3JlZ3MgKyBMMl9DQVBUX0RBVEFfTE8gLSBM Ml9FUlJfUkVHU19PRkZTRVQpOworCWVjYyA9IHJlYWRsKGwyX2Vycl9yZWdzICsgTDJfQ0FQ VF9FQ0MgLSBMMl9FUlJfUkVHU19PRkZTRVQpOworCisJaWYgKHN3YWIzMihlcnJfZGV0KSAm IDB4YykgeworCQkvKiBFQ0MgZXJyb3JzICovCisJCS8qIEludmFsaWRhdGUgbGluZSBpbiBM MiBjYWNoZSAqLworCQlhc20gdm9sYXRpbGUoImRjYmYgMCwlMCIgOiA6ICJyIiAoc3dhYjMy KGVycl9hZGRyKSkgOiAibWVtb3J5Iik7CisJCWFzbSB2b2xhdGlsZSgic3luYyIpOworCX0g ZWxzZSBpZiAoc3dhYjMyKGVycl9kZXQpICYgMHgxMCkgeworCQkvKiBUYWcgcGFyaXR5IGVy cm9yICovCisJCS8qIEZsYXNoIGludmFsaWRhdGUgTDIgY2FjaGUgKi8KKwl9CisKKwkvKiBE aXNwbGF5IGVycm9yIGluZm9ybWF0aW9uICovCisJcHJpbnRrKEtFUk5fRVJSICJMMiBDYWNo ZSBFcnJvciFcbiIpOworCXByaW50ayhLRVJOX0VSUiAiTDIgRVJST1IgREVURUNUIFJFRyAw eCUwOHhcbiIsIHN3YWIzMihlcnJfZGV0KSk7CisJcHJpbnRrKEtFUk5fRVJSICJMMiBFUlJP UiBBRERSRVNTIENBUFRVUkUgUkVHIDB4JTA4eFxuIiwKKwkgICAgICAgc3dhYjMyKGVycl9h ZGRyKSk7CisJcHJpbnRrKEtFUk5fRVJSICJMMiBFUlJPUiBEQVRBIEhJR0ggQ0FQVFVSRSBS RUcgMHglMDh4XG4iLAorCSAgICAgICBzd2FiMzIoZGF0YV9oaSkpOworCXByaW50ayhLRVJO X0VSUiAiTDIgRVJST1IgREFUQSBMT1cgQ0FQVFVSRSBSRUcgMHglMDh4XG4iLAorCSAgICAg ICBzd2FiMzIoZGF0YV9sbykpOworCXByaW50ayhLRVJOX0VSUiAiTDIgRVJST1IgQVRUUklC VVRFUyBDQVBUVVJFIFJFRyAweCUwOHhcbiIsCisJICAgICAgIHN3YWIzMihlcnJfYXR0cikp OworCXByaW50ayhLRVJOX0VSUiAiTDIgRVJST1IgU1lORFJPTUUgUkVHIDB4JTA4eFxuIiwg c3dhYjMyKGVjYykpOworCisJLyogQ2xlYXIgaW50ZXJydXB0IGNhdXNlIGFuZCBjYXB0dXJl IHJlZ2lzdGVycyAqLworCXdyaXRlbChlcnJfZGV0LCBsMl9lcnJfcmVncyArIEwyX0VSUl9E RVQgLSBMMl9FUlJfUkVHU19PRkZTRVQpOworCXdyaXRlbCgwLCBsMl9lcnJfcmVncyArIEwy X0VSUl9BVFRSIC0gTDJfRVJSX1JFR1NfT0ZGU0VUKTsKKworCXJldHVybiBJUlFfSEFORExF RDsKK30KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01WTUUzMTAwX0VOQUJMRV9QQ0lfRVJS T1JTCisKK3N0YXRpYyBpcnFyZXR1cm5fdCBtdm1lMzEwMF9wY2lfZXJyX2hhbmRsZXIoaW50 IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXUzMiBlcnJfYWRkciwgZGF0YV9oaSwgZGF0YV9s bywgZXJyX2F0dHIsIGVycl9leHRfYWRkciwgZXJyX2RldDsKKwl1MzIgZ2FzX3RpbXIsIHBj aXhfdGltcjsKKworCS8qIENvbGxlY3QgZXJyb3IgaW5mb3JtYXRpb24gZnJvbSB0aGUgZXJy b3IgcmVnaXN0ZXJzICovCisJZXJyX2RldCA9IHJlYWRsKHBjaV9lcnJfcmVncyArIFBDSV9F UlJfREVUIC0gUENJX0VSUl9SRUdTX09GRlNFVCk7CisJaWYgKCFlcnJfZGV0KQorCQlyZXR1 cm4gSVJRX05PTkU7CisKKwllcnJfYWRkciA9IHJlYWRsKHBjaV9lcnJfcmVncyArIFBDSV9F UlJfQUREUiAtIFBDSV9FUlJfUkVHU19PRkZTRVQpOworCWVycl9leHRfYWRkciA9CisJICAg IHJlYWRsKHBjaV9lcnJfcmVncyArIFBDSV9FUlJfRVhUX0FERFIgLSBQQ0lfRVJSX1JFR1Nf T0ZGU0VUKTsKKwllcnJfYXR0ciA9IHJlYWRsKHBjaV9lcnJfcmVncyArIFBDSV9FUlJfQVRU UiAtIFBDSV9FUlJfUkVHU19PRkZTRVQpOworCWRhdGFfbG8gPSByZWFkbChwY2lfZXJyX3Jl Z3MgKyBQQ0lfRVJSX0RMIC0gUENJX0VSUl9SRUdTX09GRlNFVCk7CisJZGF0YV9oaSA9IHJl YWRsKHBjaV9lcnJfcmVncyArIFBDSV9FUlJfREggLSBQQ0lfRVJSX1JFR1NfT0ZGU0VUKTsK KwlnYXNfdGltciA9IHJlYWRsKHBjaV9lcnJfcmVncyArIFBDSV9HQVNfVElNUiAtIFBDSV9F UlJfUkVHU19PRkZTRVQpOworCXBjaXhfdGltciA9IHJlYWRsKHBjaV9lcnJfcmVncyArIFBD SV9QQ0lYX1RJTVIgLSBQQ0lfRVJSX1JFR1NfT0ZGU0VUKTsKKworCS8qIERpc3BsYXkgZXJy b3IgaW5mb3JtYXRpb24gKi8KKwlpZiAocGNpX2Vycm9ycyAhPSAwKSB7CisJCXByaW50ayhL RVJOX0VSUiAiUENJIEVycm9yIVxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiUENJIEVSUk9S IERFVEVDVCBSRUcgMHglMDh4XG4iLAorCQkgICAgICAgc3dhYjMyKGVycl9kZXQpKTsKKwkJ cHJpbnRrKEtFUk5fRVJSICJQQ0kgRVJST1IgQUREUkVTUyBSRUcgMHglMDh4XG4iLAorCQkg ICAgICAgc3dhYjMyKGVycl9hZGRyKSk7CisJCXByaW50ayhLRVJOX0VSUiAiUENJIEVSUk9S IEVYVCBBRERSRVNTIFJFRyAweCUwOHhcbiIsCisJCSAgICAgICBzd2FiMzIoZXJyX2V4dF9h ZGRyKSk7CisJCXByaW50ayhLRVJOX0VSUiAiUENJIEVSUk9SIEFUVFJJQlVURVMgUkVHIDB4 JTA4eFxuIiwKKwkJICAgICAgIHN3YWIzMihlcnJfYXR0cikpOworCQlwcmludGsoS0VSTl9F UlIgIlBDSSBFUlJPUiBEQVRBIEhJR0ggUkVHIDB4JTA4eFxuIiwKKwkJICAgICAgIHN3YWIz MihkYXRhX2hpKSk7CisJCXByaW50ayhLRVJOX0VSUiAiUENJIEVSUk9SIERBVEEgTE9XIFJF RyAweCUwOHhcbiIsCisJCSAgICAgICBzd2FiMzIoZGF0YV9sbykpOworCQlwcmludGsoS0VS Tl9FUlIgIlBDSSBHQVNLRVQgVElNRVIgUkVHIDB4JTA4eFxuIiwKKwkJICAgICAgIHN3YWIz MihnYXNfdGltcikpOworCQlwcmludGsoS0VSTl9FUlIgIlBDSSBQQ0lYIFRJTUVSIFJFRyAw eCUwOHhcbiIsCisJCSAgICAgICBzd2FiMzIocGNpeF90aW1yKSk7CisJfQorCXBjaV9lcnJv cnMrKzsKKworCS8qIENsZWFyIGludGVycnVwdCBjYXVzZSBhbmQgY2FwdHVyZSByZWdpc3Rl cnMgKi8KKyAgICAgICAgd3JpdGVsKGVycl9kZXQsIHBjaV9lcnJfcmVncyArIFBDSV9FUlJf REVUIC0gUENJX0VSUl9SRUdTX09GRlNFVCk7CisJd3JpdGVsKHN3YWIzMigweDEpLAorCQlw Y2lfZXJyX3JlZ3MgKyBQQ0lfRVJSX0FUVFIgLSBQQ0lfRVJSX1JFR1NfT0ZGU0VUKTsKKwor CXJldHVybiBJUlFfSEFORExFRDsKK30KKyNlbmRpZgorCitpbnQgbXZtZTMxMDBfZXhjbHVk ZV9kZXZpY2Uoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlLCB1X2NoYXIgYnVzLCB1X2No YXIgZGV2Zm4pCit7CisJaWYgKGJ1cyA9PSAwICYmIFBDSV9TTE9UKGRldmZuKSA9PSAwKQor CQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOworCWVsc2UKKwkJcmV0dXJuIFBD SUJJT1NfU1VDQ0VTU0ZVTDsKK30KKworc3RhdGljIHZvaWQgX19pbml0IG12bWUzMTAwX21p c2NfaW5pdCh2b2lkKQoreworCXZvaWQgX19pb21lbSAqcmVnX2FkZHI7CisgICAgICAgIHN0 cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBOVUxMOworCXU4IHJlZ192YWx1ZTsKKwljb25zdCB1 MzIgKnJlZ3M7CisjaWZkZWYgQ09ORklHX01WTUUzMTAwX0VOQUJMRV9ERFJfRVJST1JTCisJ dTMyIHNiZV9jb3VudDsKKyNlbmRpZgorCisgICAgICAgIG5wID0gb2ZfZmluZF9ub2RlX2J5 X3R5cGUobnAsICJzb2MiKTsKKyAgICAgICAgaWYgKG5wID09IE5VTEwpIHsKKyAgICAgICAg ICAgICAgICBwcmludGsoIkVycm9yOkNhbm5vdCBmaW5kIHNvYyBub2RlXG4iKTsKKyAgICAg ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgcmVncyA9IG9mX2dldF9w cm9wZXJ0eShucCwgInJlZyIsIE5VTEwpOworICAgICAgICBpZiAocmVncyA9PSBOVUxMKSB7 CisgICAgICAgICAgICAgICAgcHJpbnRrKCJFcnJvcjpDYW5ub3QgZ2V0IHJlZyBwcm9wZXJ0 eSBmcm9tIHNvYyBub2RlXG4iKTsKKyAgICAgICAgICAgICAgICBvZl9ub2RlX3B1dChucCk7 CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg ICAgICBoYl9iYWRkciA9IHJlZ3NbMF07CisKKyAgICAgICAgb2Zfbm9kZV9wdXQobnApOwor CisjaWZkZWYgQ09ORklHX01WTUUzMTAwX0VOQUJMRV9ERFJfRVJST1JTCS8qIEVuYWJsZSBE RFIgZXJyb3IgcmVwb3J0aW5nICovCisJZGRyX2Vycl9yZWdzID0KKwkgICAgaW9yZW1hcCho Yl9iYWRkciArIEREUl9FUlJfUkVHU19PRkZTRVQsIEREUl9FUlJfUkVHU19TSVpFKTsKKwkv KiBFbmFibGUgYWxsIGVycm9yIGRldGVjdGlvbiAqLworCXdyaXRlbCgwLCBkZHJfZXJyX3Jl Z3MgKyBERFJfRVJSX0RJUyAtIEREUl9FUlJfUkVHU19PRkZTRVQpOworCS8qIENsZWFyIGxv Z2dlZCBERFIgZXJyb3JzICovCisJd3JpdGVsKHN3YWIzMigweDgwMDAwMDBEKSwKKwkgICAg ICAgZGRyX2Vycl9yZWdzICsgRERSX0VSUl9ERVQgLSBERFJfRVJSX1JFR1NfT0ZGU0VUKTsK KwkvKiBTZXQgc2luZ2xlLWJpdCBlcnJvciB0aHJlc2hvbGQgKi8KKwlzYmVfY291bnQgPSAw eDAwMDEwMDAwOworCXdyaXRlbChzd2FiMzIoc2JlX2NvdW50KSwKKwkgICAgICAgZGRyX2Vy cl9yZWdzICsgRERSX0VSUl9TQkUgLSBERFJfRVJSX1JFR1NfT0ZGU0VUKTsKKyNlbmRpZgor CisjaWZkZWYgQ09ORklHX01WTUUzMTAwX0VOQUJMRV9QQ0lfRVJST1JTCisJcGNpX2Vycl9y ZWdzID0gaW9yZW1hcChoYl9iYWRkciArIFBDSV9FUlJfUkVHU19PRkZTRVQsCisJCQkgICAg ICAgUENJX0VSUl9SRUdTX1NJWkUpOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVk1FX0JS SURHRQorCXsKKwkJZXh0ZXJuIHZvaWQgdm1lbW9kX3NldHVwX29wdGlvbnMoY2hhciAqKTsK KworCQl2bWVtb2Rfc2V0dXBfb3B0aW9ucyhjbWRfbGluZSk7CisJfQorI2VuZGlmCisKKwly ZWdfYWRkciA9IGlvcmVtYXAoTVZNRTMxMDBfU1lTVEVNX0NPTlRST0xfUkVHLCAzKTsKKwor CS8qIE1hc2sgRkVDIFBIWSBpbnRlcnJ1cHRzICovCisJcmVnX3ZhbHVlID0gcmVhZGIocmVn X2FkZHIpOworCXJlZ192YWx1ZSB8PSBNVk1FMzEwMF9GRUNfUEhZX01BU0s7CisJd3JpdGVi KHJlZ192YWx1ZSwgcmVnX2FkZHIpOworCisJLyogVHVybiBvZmYgQm9hcmQgRmFpbCBMRUQg Ki8KKwlyZWdfdmFsdWUgPSByZWFkYigrK3JlZ19hZGRyKTsKKwlyZWdfdmFsdWUgJj0gfk1W TUUzMTAwX0JSRF9GQUlMX0xFRDsKKwl3cml0ZWIocmVnX3ZhbHVlLCByZWdfYWRkcik7CisK KwkvKiBUdXJuIG9mZiBTVyBmbGFzaCB3cml0ZS1wcm90ZWN0ICovCisJcmVnX3ZhbHVlID0g cmVhZGIoKytyZWdfYWRkcik7CisJcmVnX3ZhbHVlICY9IH5NVk1FMzEwMF9GTEFTSF9XUF9T VzsKKwl3cml0ZWIocmVnX3ZhbHVlLCByZWdfYWRkcik7CisKKwlpb3VubWFwKHJlZ19hZGRy KTsKKworCXN5c3RlbV9jb250cm9sX3JlZ19hZGRyID0gaW9yZW1hcChNVk1FMzEwMF9TWVNU RU1fQ09OVFJPTF9SRUcsIDEpOworCisJcmV0dXJuOworfQorCit2b2lkIF9faW5pdCBtdm1l MzEwMF9pbml0X2lycSh2b2lkKQoreworCXN0cnVjdCBtcGljICptcGljOworCXN0cnVjdCBy ZXNvdXJjZSByOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBOVUxMOworCisJbnAgPSBv Zl9maW5kX25vZGVfYnlfdHlwZShucCwgIm9wZW4tcGljIik7CisJaWYgKG5wID09IE5VTEwp IHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZCBub3QgZmluZCBvcGVuLXBpYyBub2RlXG4i KTsKKwkJcmV0dXJuOworCX0KKworCWlmIChvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG5wLCAw LCAmcikpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZCBub3QgbWFwIG1waWMgcmVnaXN0 ZXIgc3BhY2VcbiIpOworCQlvZl9ub2RlX3B1dChucCk7CisJCXJldHVybjsKKwl9CisKKwlt cGljID0gbXBpY19hbGxvYyhucCwgci5zdGFydCwKKwkJCSAgTVBJQ19QUklNQVJZIHwgTVBJ Q19XQU5UU19SRVNFVCB8IE1QSUNfQklHX0VORElBTiwKKwkJCSAgMCwgMjU2LCAiIE9wZW5Q SUMgICIpOworCUJVR19PTihtcGljID09IE5VTEwpOworCW9mX25vZGVfcHV0KG5wKTsKKwor CW1waWNfaW5pdChtcGljKTsKKworI2lmZGVmIENPTkZJR19NVk1FMzEwMF9FTkFCTEVfTDJf RVJST1JTCisJbnAgPSBvZl9maW5kX25vZGVfYnlfdHlwZShOVUxMLCAibDJfY2FjaGUtY29u dHJvbGxlciIpOworCWlmIChucCA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0lORk8gIlBJ QyBpbml0OiBjYW5ub3QgZmluZCBsMl9jYWNoZS1jb250cm9sbGVyIG5vZGVcbiIpOworCX0g ZWxzZSB7CisJCWwyX2lycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG5wLCAwKTsKKwkJaWYg KGwyX2lycSA9PSBOT19JUlEpCisJCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBtYXAg TDIgY2FjaGUgaXJxXG4iKTsKKwkJb2Zfbm9kZV9wdXQobnApOworCX0KKyNlbmRpZgorCisj aWZkZWYgQ09ORklHX01WTUUzMTAwX0VOQUJMRV9ERFJfRVJST1JTCisJbnAgPSBvZl9maW5k X25vZGVfYnlfdHlwZShOVUxMLCAibWVtb3J5LWNvbnRyb2xsZXIiKTsKKwlpZiAobnAgPT0g TlVMTCkgeworCQlwcmludGsoS0VSTl9JTkZPICJQSUMgaW5pdDogY2Fubm90IGZpbmQgbWVt b3J5X2NvbnRyb2xsZXIgbm9kZVxuIik7CisJfSBlbHNlIHsKKwkJZGRyX2lycSA9IGlycV9v Zl9wYXJzZV9hbmRfbWFwKG5wLCAwKTsKKwkJaWYgKGRkcl9pcnEgPT0gTk9fSVJRKQorCQkJ cHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gbWFwIEREUiBpcnFcbiIpOworCQlvZl9ub2Rl X3B1dChucCk7CisJfQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTVZNRTMxMDBfRU5BQkxF X1BDSV9FUlJPUlMKKwlucCA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKE5VTEwsICJwY2kiKTsK KwlpZiAobnAgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9JTkZPICJQSUMgaW5pdDogY2Fu bm90IGZpbmQgcGNpIG5vZGVcbiIpOworCX0gZWxzZSB7CisJCXBjaV9pcnEgPSBpcnFfb2Zf cGFyc2VfYW5kX21hcChucCwgMCk7CisJCWlmIChwY2lfaXJxID09IE5PX0lSUSkKKwkJCXBy aW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIG1hcCBQQ0kgaXJxXG4iKTsKKwkJb2Zfbm9kZV9w dXQobnApOworCX0KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1NFTlNPUlNfRFMxNjIxCisJ bnAgPSBvZl9maW5kX25vZGVfYnlfdHlwZShOVUxMLCAidGhlcm1vc3RhdCIpOworCWlmIChu cCA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0lORk8gIlBJQyBpbml0OiBjYW5ub3QgZmlu ZCBkczE2MjEgbm9kZVxuIik7CisJfSBlbHNlIHsKKwkJZHMxNjIxX2lycSA9IGlycV9vZl9w YXJzZV9hbmRfbWFwKG5wLCAwKTsKKwkJaWYgKGRzMTYyMV9pcnEgPT0gTk9fSVJRKQorCQkJ cHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gbWFwIERTMTYyMSBpcnFcbiIpOworCQlvZl9u b2RlX3B1dChucCk7CisJfQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTVZNRTMxMDBfVElD S19USU1FUlMKKwlucCA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKE5VTEwsICJib2FyZF90aW1l cnMiKTsKKwlpZiAobnAgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9JTkZPICJQSUMgaW5p dDogY2Fubm90IGZpbmQgdGltZXJzIG5vZGVcbiIpOworCX0gZWxzZSB7CisJCW12bWUzMTAw X3RpbWVyX2lycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG5wLCAwKTsKKwkJaWYgKG12bWUz MTAwX3RpbWVyX2lycSA9PSBOT19JUlEpCisJCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0 byBtYXAgdGltZXJzIGlycVxuIik7CisJCW9mX25vZGVfcHV0KG5wKTsKKwl9CisjZW5kaWYK KworCW5wID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi9zZXJpYWxAZTIwMTEwMDAiKTsKKwlp ZiAobnAgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9JTkZPICJQSUMgaW5pdDogY2Fubm90 IGZpbmQgc2VyaWFsQGUyMDExMDAwIG5vZGVcbiIpOworCX0gZWxzZSB7CisJCXNlcmlhbF9p cnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChucCwgMCk7CisJCWlmIChzZXJpYWxfaXJxID09 IE5PX0lSUSkKKwkJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIG1hcCBzZXJpYWxAZTIw MTEwMDAgaXJxXG4iKTsKKwkJb2Zfbm9kZV9wdXQobnApOworCX0KKworCW5wID0gb2ZfZmlu ZF9ub2RlX2J5X3BhdGgoIi9zZXJpYWxAZTIwMTIwMDAiKTsKKwlpZiAobnAgPT0gTlVMTCkg eworCQlwcmludGsoS0VSTl9JTkZPICJQSUMgaW5pdDogY2Fubm90IGZpbmQgc2VyaWFsQGUy MDEyMDAwIG5vZGVcbiIpOworCX0gZWxzZSB7CisJCXNlcmlhbF9pcnEgPSBpcnFfb2ZfcGFy c2VfYW5kX21hcChucCwgMCk7CisJCWlmIChzZXJpYWxfaXJxID09IE5PX0lSUSkKKwkJCXBy aW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIG1hcCBzZXJpYWxAZTIwMTIwMDAgaXJxXG4iKTsK KwkJb2Zfbm9kZV9wdXQobnApOworCX0KKworCW5wID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgo Ii9zZXJpYWxAZTIwMTMwMDAiKTsKKwlpZiAobnAgPT0gTlVMTCkgeworCQlwcmludGsoS0VS Tl9JTkZPICJQSUMgaW5pdDogY2Fubm90IGZpbmQgc2VyaWFsQGUyMDEzMDAwIG5vZGVcbiIp OworCX0gZWxzZSB7CisJCXNlcmlhbF9pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChucCwg MCk7CisJCWlmIChzZXJpYWxfaXJxID09IE5PX0lSUSkKKwkJCXByaW50ayhLRVJOX0VSUiAi VW5hYmxlIHRvIG1hcCBzZXJpYWxAZTIwMTMwMDAgaXJxXG4iKTsKKwkJb2Zfbm9kZV9wdXQo bnApOworCX0KKworCW5wID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi9zZXJpYWxAZTIwMTQw MDAiKTsKKwlpZiAobnAgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9JTkZPICJQSUMgaW5p dDogY2Fubm90IGZpbmQgc2VyaWFsQGUyMDE0MDAwIG5vZGVcbiIpOworCX0gZWxzZSB7CisJ CXNlcmlhbF9pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChucCwgMCk7CisJCWlmIChzZXJp YWxfaXJxID09IE5PX0lSUSkKKwkJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIG1hcCBz ZXJpYWxAZTIwMTQwMDAgaXJxXG4iKTsKKwkJb2Zfbm9kZV9wdXQobnApOworCX0KKworCXJl dHVybjsKK30KKworc3RhdGljIHZvaWQgX19pbml0IG12bWUzMTAwX3BjaWJpb3NfZml4dXAo dm9pZCkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gTlVMTDsKKwl1MzIgIHRlbXA7CisJ aW50IHJldDsKKworCXdoaWxlICgoZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwg UENJX0FOWV9JRCwgZGV2KSkgIT0gTlVMTCkgeworCQkvKiBVcGRhdGUgYWxsIGRldmljZXMn IGNhY2hlIGxpbmUgc2l6ZSAqLworCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBQQ0lf Q0FDSEVfTElORV9TSVpFLAorCQkJCSAgICAgIEwxX0NBQ0hFX0JZVEVTID4+IDIpOworCQlw Y2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBQQ0lfTEFURU5DWV9USU1FUiwgMHg4MCk7CisJ fQorCisJaWYgKChkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX05FQywKKwkJ CQkgICBQQ0lfREVWSUNFX0lEX05FQ19VU0IsIE5VTEwpKSkgeworCQkvKiBTZXQgU3lzdGVt IENsb2NrIHRvIDQ4TUh6IG9zY2lsbGF0b3IgaW4gRVhUMiByZWdpc3RlciAqLworCQlwY2lf cmVhZF9jb25maWdfZHdvcmQoZGV2LCAweGU0LCAmdGVtcCk7CisJCXRlbXAgfD0gMHgwMDAw MDAyMDsKKwkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIDB4ZTQsIHRlbXApOworCisJ CS8qIE1heCBQb3J0cyA9IDIgKi8KKwkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgMHhl MCwgJnRlbXApOworCQl0ZW1wICY9IH4weDAwMDAwMDA3OworCQl0ZW1wIHw9IDB4MDAwMDAw MDI7CisJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCAweGUwLCB0ZW1wKTsKKwl9CisK KyNpZmRlZiBDT05GSUdfTVZNRTMxMDBfRU5BQkxFX0wyX0VSUk9SUworCWlmIChyZXF1ZXN0 X2lycShsMl9pcnEsIG12bWUzMTAwX2wyY2FjaGVfZXJyX2hhbmRsZXIsCisJCQlJUlFGX0RJ U0FCTEVELCAiTDIgQ2FjaGUgRXJyb3IiLAorCQkJKHZvaWQgKikmbDJfZXJyX3JlZ3MpIDwg MCkgeworCQlwcmludGsoS0VSTl9FUlIgIkNhbm5vdCBpbnN0YWxsIEwyIGNhY2hlIGVycm9y IGhhbmRsZXJcbiIpOworCX0gZWxzZQorCQl3cml0ZWwoc3dhYjMyKDB4MUQpLAorCQkgICAg ICAgbDJfZXJyX3JlZ3MgKyBMMl9FUlJfSU5UX0VOIC0gTDJfRVJSX1JFR1NfT0ZGU0VUKTsK KyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01WTUUzMTAwX0VOQUJMRV9ERFJfRVJST1JTCisJ aWYgKChyZXQgPSByZXF1ZXN0X2lycShkZHJfaXJxLCBtdm1lMzEwMF9kZHJfZXJyX2hhbmRs ZXIsCisJCQkgICAgICAgSVJRRl9ESVNBQkxFRCwgIkREUiBFcnJvciIsCisJCQkgICAgICAg KHZvaWQgKikmZGRyX2Vycl9yZWdzKSkgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ2Fu bm90IGluc3RhbGwgRERSIGVycm9yIGhhbmRsZXJcbiIpOworCX0gZWxzZQorCQl3cml0ZWwo c3dhYjMyKDB4RCksCisJCSAgICAgICBkZHJfZXJyX3JlZ3MgKyBERFJfRVJSX0lOVF9FTiAt IEREUl9FUlJfUkVHU19PRkZTRVQpOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTVZNRTMx MDBfRU5BQkxFX1BDSV9FUlJPUlMKKwlpZiAocmVxdWVzdF9pcnEocGNpX2lycSwgbXZtZTMx MDBfcGNpX2Vycl9oYW5kbGVyLAorCQkJSVJRRl9ESVNBQkxFRCwgIlBDSSBFcnJvciIsCisJ CQkodm9pZCAqKSZwY2lfZXJyX3JlZ3MpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkNh bm5vdCBpbnN0YWxsIFBDSSBlcnJvciBoYW5kbGVyXG4iKTsKKwl9IGVsc2UgeworCQkvKiBF bmFibGUgUENJIGVycm9yIGRldGVjdGlvbiAqLworCQl3cml0ZWwoMCwgcGNpX2Vycl9yZWdz ICsgUENJX0VSUl9DQVBfRElTIC0gUENJX0VSUl9SRUdTX09GRlNFVCk7CisJCS8qIEVuYWJs ZSBhbGwgZXJyb3IgaW50ZXJydXB0cyAqLworCQl3cml0ZWwoc3dhYjMyKDB4N0ZGKSwKKwkJ ICAgICAgIHBjaV9lcnJfcmVncyArIFBDSV9FUlJfSU5UX0VOIC0gUENJX0VSUl9SRUdTX09G RlNFVCk7CisJfQorI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIG12bWUzMTAwX2luaXRfY2Fj aGVzKHZvaWQpCit7CisJdm9pZCBfX2lvbWVtICpsMl9jdGxfYWRkcjsKKwlzdHJ1Y3QgZGV2 aWNlX25vZGUgKmRuID0gTlVMTDsKKwljb25zdCB1MzIgKnJlZ3M7CisJdWludCBzcHI7CisK KwlkbiA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKGRuLCAic29jIik7CisJaWYgKGRuID09IE5V TEwpIHsKKwkJcHJpbnRrKCJFcnJvcjpDYW5ub3QgZmluZCBzb2Mgbm9kZVxuIik7CisJCXJl dHVybjsKKwl9CisJcmVncyA9IG9mX2dldF9wcm9wZXJ0eShkbiwgInJlZyIsIE5VTEwpOwor CWlmIChyZWdzID09IE5VTEwpIHsKKwkJcHJpbnRrKCJFcnJvcjpDYW5ub3QgZ2V0IHJlZyBw cm9wZXJ0eSBmcm9tIHNvYyBub2RlXG4iKTsKKwkJcmV0dXJuOworCX0gZWxzZSB7CisJCWhi X2JhZGRyID0gcmVnc1swXTsKKwl9CisKKwlsMl9lcnJfcmVncyA9IGlvcmVtYXAoaGJfYmFk ZHIgKyBMMl9FUlJfUkVHU19PRkZTRVQsIEwyX0VSUl9SRUdTX1NJWkUpOworCisJbDJfY3Rs X2FkZHIgPSBpb3JlbWFwKGhiX2JhZGRyICsgMHgyMDAwMCwgNCk7CisKKwkvKiBMMSBpbnN0 LCBMMSBkYXRhLCBhbmQgTDIgYXJlIGRpc2FibGVkIGF0IHRoaXMgcG9pbnQgKi8KKyAgICAg ICAgLyogRW5hYmxlIEwxIGluc3QgKi8KKyAgICAgICAgYXNtIHZvbGF0aWxlKCJtc3luYzsg aXN5bmMiKTsKKyAgICAgICAgc3ByID0gbWZzcHIoU1BSTl9MMUNTUjEpOworICAgICAgICBh c20gdm9sYXRpbGUoIm1zeW5jOyBpc3luYyIpOworICAgICAgICBtdHNwcihTUFJOX0wxQ1NS MSwgc3ByIHwgTDFDU1IxX0lDRkkgfCBMMUNTUjFfSUNFIHwgTDFDU1IxX0lDUEUpOworICAg ICAgICBhc20gdm9sYXRpbGUoIm1zeW5jOyBpc3luYyIpOworCisgICAgICAgIC8qIEVuYWJs ZSBMMSBkYXRhICovCisgICAgICAgIGlmICghKG1mc3ByKFNQUk5fTDFDU1IwKSAmIEwxQ1NS MF9EQ0UpKSB7CisgICAgICAgICAgICAgICAgYXNtIHZvbGF0aWxlKCJtc3luYzsgaXN5bmMi KTsKKyAgICAgICAgICAgICAgICBtdHNwcihTUFJOX0wxQ1NSMCwgMHgwKTsgICAgICAgICAg ICAgICAgLyogRGlzYWJsZSAqLworICAgICAgICAgICAgICAgIGFzbSB2b2xhdGlsZSgibXN5 bmM7IGlzeW5jIik7CisgICAgICAgICAgICAgICAgbXRzcHIoU1BSTl9MMUNTUjAsIEwxQ1NS MF9EQ0ZJKTsgICAgICAgIC8qIEludmFsaWRhdGUgKi8KKyAgICAgICAgICAgICAgICBhc20g dm9sYXRpbGUoImlzeW5jOyBzeW5jIik7CisgICAgICAgICAgICAgICAgc3ByID0gbWZzcHIo U1BSTl9MMUNTUjApOworICAgICAgICAgICAgICAgIGFzbSB2b2xhdGlsZSgiaXN5bmM7IHN5 bmMiKTsKKyAgICAgICAgICAgICAgICBtdHNwcihTUFJOX0wxQ1NSMCwgc3ByIHwgTDFDU1Iw X0RDRSB8IEwxQ1NSMF9EQ1BFKTsgLyogRW5hYmxlICovCisgICAgICAgICAgICAgICAgYXNt IHZvbGF0aWxlKCJpc3luYzsgc3luYyIpOworICAgICAgICB9CisKKwlhc20gdm9sYXRpbGUg KCJlaWVpbyIpOworCWFzbSB2b2xhdGlsZSAoImlzeW5jIik7CisJLyogRGlzYWJsZSBMMiAq LworCXdyaXRlbCgwLCBsMl9jdGxfYWRkcik7CisJcmVhZGwobDJfY3RsX2FkZHIpOworCWFz bSB2b2xhdGlsZSAoImVpZWlvIik7CisJLyogSW52YWxpZGF0ZSBMMiAqLworCXdyaXRlbChz d2FiMzIoMHg0ODAwMDMwMCksIGwyX2N0bF9hZGRyKTsKKwlyZWFkbChsMl9jdGxfYWRkcik7 CisJYXNtIHZvbGF0aWxlICgiZWllaW8iKTsKKwkvKiBFbmFibGUgTDIgZXJyb3IgZGV0ZWN0 aW9uICovCisJd3JpdGVsKDAsIGwyX2Vycl9yZWdzICsgTDJfRVJSX0RJUyAtIEwyX0VSUl9S RUdTX09GRlNFVCk7CisJcmVhZGwobDJfY3RsX2FkZHIpOworCWFzbSB2b2xhdGlsZSAoImVp ZWlvIik7CisJLyogQ2xlYXIgYW55IGxvZ2dlZCBMMiBlcnJvcnMgKi8KKwl3cml0ZWwoc3dh YjMyKDB4ODAwMDAwMUQpLCBsMl9lcnJfcmVncyArIEwyX0VSUl9ERVQgLSBMMl9FUlJfUkVH U19PRkZTRVQpOworCXJlYWRsKGwyX2N0bF9hZGRyKTsKKwlhc20gdm9sYXRpbGUgKCJlaWVp byIpOworCS8qIEVuYWJsZSBMMiAqLworCXdyaXRlbChzd2FiMzIoMHg4ODAwMDcwMCksIGwy X2N0bF9hZGRyKTsKKwlyZWFkbChsMl9jdGxfYWRkcik7CisJYXNtIHZvbGF0aWxlICgiZWll aW8iKTsKKworCXByaW50aygiTDIgY2FjaGUgZW5hYmxlZCAoMjU2SyBjYWNoZSwgbm8gbWVt b3J5LW1hcHBlZCBTUkFNKS4gTDJDVEwgcmVnOiAweCV4XG4iLAorCSAgICAgc3dhYjMyKHJl YWRsKGwyX2N0bF9hZGRyKSkpOworCisJaW91bm1hcChsMl9jdGxfYWRkcik7CisJb2Zfbm9k ZV9wdXQoZG4pOworCisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgbXZtZTMx MDBfc2V0dXBfYXJjaCh2b2lkKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY3B1OworCXN0 cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisKKwltdm1lMzEwMF9pbml0X2NhY2hlcygpOworCisJ Y3B1ID0gb2ZfZmluZF9ub2RlX2J5X3R5cGUoTlVMTCwgImNwdSIpOworCWlmIChjcHUgIT0g MCkgeworCQljb25zdCB1bnNpZ25lZCBpbnQgKmZwOworCisJCWZwID0gb2ZfZ2V0X3Byb3Bl cnR5KGNwdSwgImNsb2NrLWZyZXF1ZW5jeSIsIE5VTEwpOworCQlpZiAoZnAgIT0gMCkKKwkJ CWxvb3BzX3Blcl9qaWZmeSA9ICpmcCAvIEhaOworCQllbHNlCisJCQlsb29wc19wZXJfamlm ZnkgPSA1MDAwMDAwMCAvIEhaOworCisJCWZwID0gb2ZfZ2V0X3Byb3BlcnR5KGNwdSwgImJ1 cy1mcmVxdWVuY3kiLCBOVUxMKTsKKwkJaWYgKGZwICE9IDApCisJCQlidXNfZnJlcXVlbmN5 ID0gKmZwOworCQllbHNlCisJCQlidXNfZnJlcXVlbmN5ID0gMzMzMzMzMzMzOworCQlvZl9u b2RlX3B1dChjcHUpOworCX0KKworICAgICAgICBmb3JfZWFjaF9jb21wYXRpYmxlX25vZGUo bnAsICJwY2kiLCAiZnNsLG1wYzg1NDAtcGNpIikKKyAgICAgICAgICAgICAgICBmc2xfYWRk X2JyaWRnZShucCwgMSk7CisJcHBjX21kLnBjaV9leGNsdWRlX2RldmljZSA9IG12bWUzMTAw X2V4Y2x1ZGVfZGV2aWNlOworCisJcHJpbnRrKCJNVk1FMzEwMCBib2FyZCBmcm9tIEVtZXJz b24gTmV0d29yayBQb3dlciBFbWJlZGRlZCBDb21wdXRpbmdcbiIpOworCisjaWZkZWYgIENP TkZJR19ST09UX05GUworCVJPT1RfREVWID0gUm9vdF9ORlM7CisjZWxzZQorCVJPT1RfREVW ID0gUm9vdF9TREEyOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVk1FX0JSSURHRV9CT09U TUVNCisJdm1lX2Jvb3RtZW1fc2l6ZSA9IENPTkZJR19WTUVfQlJJREdFX0JPT1RNRU1fU0la RSAqIDEwMjQgKiAxMDI0OworCisJaWYgKHZtZV9ib290bWVtX3NpemUgPiAodG90YWxfbWVt b3J5IC8gMikpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgIkJPT1RNRU0g U2l6ZSBSZXF1ZXN0ZWQ6IDB4JXggVG90YWwgTWVtb3J5IDB4JWx4XG4iLAorCQkgICAgICAg dm1lX2Jvb3RtZW1fc2l6ZSwgdG90YWxfbWVtb3J5KTsKKwkJcHJpbnRrKEtFUk5fV0FSTklO RworCQkgICAgICAgIkJPT1RNRU0gU2l6ZSByZXF1ZXN0ZWQgaGFzIGJlZW4gY2FwcGVkIGF0 IGhhbGYgdGhlIHRvdGFsIG1lbW9yeVxuIik7CisJCXZtZV9ib290bWVtX3NpemUgPSB0b3Rh bF9tZW1vcnkgLyAyOworCX0KKwl2bWVfZHJpdmVyX2Jvb3RtZW0gPSBfX2FsbG9jX2Jvb3Rt ZW0odm1lX2Jvb3RtZW1fc2l6ZSwgMHgxMDAwMCwgMCk7CisJaWYgKCF2bWVfZHJpdmVyX2Jv b3RtZW0pIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiVW5hYmxlIHRvIG9idGFpbiBib290 IG1lbW9yeSBmb3IgVk1FXG4iKTsKKwkJdm1lX2Jvb3RtZW1fc2l6ZSA9IDA7CisJfSBlbHNl IHsKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkgICAgICAgIjB4JXggb2YgYm9vdCBtZW1vcnkg cmVzZXJ2ZWQgZm9yIHNldHVwIG9mIFZNRSBpbmJvdW5kIHdpbmRvdyA3XG4iLAorCQkgICAg ICAgdm1lX2Jvb3RtZW1fc2l6ZSk7CisJfQorI2VuZGlmCisKKwltdm1lMzEwMF9taXNjX2lu aXQoKTsKK30KKwordm9pZCBtdm1lMzEwMF9zaG93X2NwdWluZm8oc3RydWN0IHNlcV9maWxl ICptKQoreworCXVpbnQgcHZpZCwgc3ZpZCwgcGhpZDE7CisJdWludCBtZW1zaXplID0gdG90 YWxfbWVtb3J5OworCXBoeXNfYWRkcl90IGltbXJfYmFzZTsKKwl2b2lkIF9faW9tZW0gKnJl Z19hZGRyLCAqcmVnX2Jsb2NrOworCXZvaWQgX19pb21lbSAqbDJjYWNoZV9hZGRyOworCXU4 IHJlZ192YWx1ZTsKKwl1MzIgcmVnMzJfdmFsdWU7CisJdTMyIGwxY3NyMCwgbDFjc3IxOwor CXUzMiBsMmN0bDsKKwljaGFyIGJ1ZmZbMTZdID0gIiI7CisKKwlwdmlkID0gbWZzcHIoU1BS Tl9QVlIpOworCXN2aWQgPSBtZnNwcihTUFJOX1NWUik7CisJaW1tcl9iYXNlID0gZ2V0X2lt bXJiYXNlKCk7CisKKwlzZXFfcHJpbnRmKG0sICJWZW5kb3JcdFx0OiBFbWVyc29uIE5ldHdv cmsgUG93ZXIgRW1iZWRkZWQgQ29tcHV0aW5nXG4iKTsKKwlzZXFfcHJpbnRmKG0sICJNYWNo aW5lXHRcdDogTVZNRTMxMDBcbiIpOworCXNlcV9wcmludGYobSwgIlBWUlx0XHQ6IDB4JXhc biIsIHB2aWQpOworCXNlcV9wcmludGYobSwgIlNWUlx0XHQ6IDB4JXhcbiIsIHN2aWQpOwor CXNlcV9wcmludGYobSwgIkhJRDBcdFx0OiAweCUwOGx4XG4iLCBtZnNwcihTUFJOX0hJRDAp KTsKKwlzZXFfcHJpbnRmKG0sICJISUQxXHRcdDogMHglMDhseFxuIiwgbWZzcHIoU1BSTl9I SUQxKSk7CisJc2VxX3ByaW50ZihtLCAiQ0NTUiBCYXNlXHQ6IDB4JTA4enhcbiIsIGltbXJf YmFzZSk7CisJc2VxX3ByaW50ZihtLCAiQnVzIEZyZXF1ZW5jeVx0OiAlMDhkXG4iLCBidXNf ZnJlcXVlbmN5KTsKKworCS8qIERpc3BsYXkgY3B1IFBsbCBzZXR0aW5nICovCisJcGhpZDEg PSBtZnNwcihTUFJOX0hJRDEpOworCXNlcV9wcmludGYobSwgIlBMTCBzZXR0aW5nXHQ6IDB4 JXhcbiIsICgocGhpZDEgPj4gMjQpICYgMHgzZikpOworCisJLyogRGlzcGxheSB0aGUgY2Fj aGUgc2V0dGluZ3MgKi8KKwlzZXFfcHJpbnRmKG0sICJcbkNhY2hlIFNldHRpbmdzOlxuIik7 CisJbDFjc3IwID0gbWZzcHIoU1BSTl9MMUNTUjApOworCXNlcV9wcmludGYobSwgIkwxQ1NS MCAoTDEgRC1jYWNoZSlcdDogMHglMDh4ICglcylcbiIsIGwxY3NyMCwKKwkJICAgKGwxY3Ny MCAmIDEpID8gIm9uIiA6ICJvZmYiKTsKKwlsMWNzcjEgPSBtZnNwcihTUFJOX0wxQ1NSMSk7 CisJc2VxX3ByaW50ZihtLCAiTDFDU1IxIChMMSBJLWNhY2hlKVx0OiAweCUwOHggKCVzKVxu IiwgbDFjc3IxLAorCQkgICAobDFjc3IxICYgMSkgPyAib24iIDogIm9mZiIpOworCXNlcV9w cmludGYobSwgIkwxQ0ZHMFx0XHRcdDogMHglMDhseFxuIiwgbWZzcHIoU1BSTl9MMUNGRzAp KTsKKwlzZXFfcHJpbnRmKG0sICJMMUNGRzFcdFx0XHQ6IDB4JTA4bHhcbiIsIG1mc3ByKFNQ Uk5fTDFDRkcxKSk7CisKKwlsMmNhY2hlX2FkZHIgPSBpb3JlbWFwKGltbXJfYmFzZSArIDB4 MjAwMDAsIDQpOworCWwyY3RsID0gc3dhYjMyKHJlYWRsKGwyY2FjaGVfYWRkcikpOworCXNl cV9wcmludGYobSwgIkwyQ1RMIChMMiBjYWNoZSlcdDogMHgleCAoJXMpXG4iLCBsMmN0bCwK KwkJICAgKGwyY3RsICYgMHg4MDAwMDAwMCkgPyAib24iIDogIm9mZiIpOworCWlvdW5tYXAo bDJjYWNoZV9hZGRyKTsKKworCXNlcV9wcmludGYobSwgIlxuQk9BUkQgSU5GT1JNQVRJT046 XG4iKTsKKwlyZWdfYmxvY2sgPSBpb3JlbWFwKE1WTUUzMTAwX1NZU1RFTV9TVEFUVVNfUkVH LCAxNik7CisJcmVnX2FkZHIgPSByZWdfYmxvY2s7CisKKwkvKiBEaXNwbGF5IHRoZSBhbW91 bnQgb2YgbWVtb3J5ICovCisJc2VxX3ByaW50ZihtLCAiTWVtb3J5XHRcdFx0OiAlZCBNQlxu IiwgbWVtc2l6ZSAvICgxMDI0ICogMTAyNCkpOworCisJLyogU3lzdGVtIFN0YXR1cyBSZWdp c3RlciAqLworCXJlZ192YWx1ZSA9IHJlYWRiKHJlZ19hZGRyKyspOworCXNlcV9wcmludGYo bSwgIlNhZmUgU3RhcnQgU3RhdHVzXHQ6ICVzXG4iLAorCQkgICAoKHJlZ192YWx1ZSAmIE1W TUUzMTAwX1NBRkVfU1RBUlQpID8KKwkJICAgICJTYWZlIEVOViBzZXR0aW5ncyB1c2VkIiA6 ICJOVlJBTSBFTlYgc2V0dGluZ3MgdXNlZCIpKTsKKwlzZXFfcHJpbnRmKG0sICJBYm9ydCBT dGF0dXNcdFx0OiAlc1xuIiwKKwkJICAgKChyZWdfdmFsdWUgJiBNVk1FMzEwMF9BQk9SVF9T VEFUVVMpID8KKwkJICAgICJBYm9ydCBTd2l0Y2ggQXNzZXJ0ZWQiIDogIkFib3J0IFN3aXRj aCBOb3QgQXNzZXJ0ZWQiKSk7CisJc3dpdGNoIChyZWdfdmFsdWUgJiBNVk1FMzEwMF9CT0FS RF9UWVBFX01BU0spIHsKKwljYXNlIE1WTUUzMTAwX0JPQVJEX1RZUEVfUFJQTUM6CisJCXNw cmludGYoYnVmZiwgIlByUE1DIik7CisJCWJyZWFrOworCWNhc2UgTVZNRTMxMDBfQk9BUkRf VFlQRV9WTUU6CisJCXNwcmludGYoYnVmZiwgIlZNRSIpOworCQlicmVhazsKKwlkZWZhdWx0 OgorCQlzcHJpbnRmKGJ1ZmYsICJVbmtub3duIik7CisJCWJyZWFrOworCX0KKwlzZXFfcHJp bnRmKG0sICJCb2FyZCBUeXBlXHRcdDogJXNcbiIsIGJ1ZmYpOworCisJLyogU3lzdGVtIENv bnRyb2wgUmVnaXN0ZXIgKi8KKwlyZWdfdmFsdWUgPSByZWFkYihyZWdfYWRkcisrKTsKKwlz ZXFfcHJpbnRmKG0sICJFRVBST00gV1AgU3RhdHVzXHQ6ICVzXG4iLAorCQkgICAoKHJlZ192 YWx1ZSAmIE1WTUUzMTAwX0VFUFJPTV9XUCkgPworCQkgICAgIkVFUFJPTSBXcml0ZSBQcm90 ZWN0ZWQiIDogIkVFUFJPTSBOb3QgV3JpdGUgUHJvdGVjdGVkIikpOworCXNlcV9wcmludGYo bSwgIkRTMTYyMSBUaGVybW9zdGF0XHQ6ICVzXG4iLAorCQkgICAoKHJlZ192YWx1ZSAmIE1W TUUzMTAwX1RTVEFUX01BU0spID8KKwkJICAgICJJbnRlcnJ1cHQgRGlzYWJsZWQiIDogIklu dGVycnVwdCBFbmFibGVkIikpOworCisJLyogU3RhdHVzIEluZGljYXRvciBSZWdpc3RlciAq LworCXJlZ192YWx1ZSA9IHJlYWRiKHJlZ19hZGRyKyspOworCXNlcV9wcmludGYobSwgIkJv YXJkIEZhaWwgTEVEXHRcdDogJXNcbiIsCisJCSAgICgocmVnX3ZhbHVlICYgTVZNRTMxMDBf QlJEX0ZBSUxfTEVEKSA/ICJMaXQiIDogIk5vdCBMaXQiKSk7CisJc2VxX3ByaW50ZihtLCAi VVNSMSBMRURcdFx0OiAlc1xuIiwKKwkJICAgKChyZWdfdmFsdWUgJiBNVk1FMzEwMF9VU1Ix X0xFRCkgPyAiTGl0IiA6ICJOb3QgTGl0IikpOworCXNlcV9wcmludGYobSwgIlVTUjIgTEVE XHRcdDogJXNcbiIsCisJCSAgICgocmVnX3ZhbHVlICYgTVZNRTMxMDBfVVNSMl9MRUQpID8g IkxpdCIgOiAiTm90IExpdCIpKTsKKwlzZXFfcHJpbnRmKG0sICJVU1IzIExFRFx0XHQ6ICVz XG4iLAorCQkgICAoKHJlZ192YWx1ZSAmIE1WTUUzMTAwX1VTUjNfTEVEKSA/ICJMaXQiIDog Ik5vdCBMaXQiKSk7CisKKwkvKiBGbGFzaCBDb250cm9sL1N0YXR1cyBSZWdpc3RlciAqLwor CXJlZ192YWx1ZSA9IHJlYWRiKHJlZ19hZGRyKyspOworCXNlcV9wcmludGYobSwgIkZsYXNo IE1hcCBTZWxlY3RcdDogJXNcbiIsCisJCSAgICgocmVnX3ZhbHVlICYgTVZNRTMxMDBfRkxB U0hfTUFQX1NFTEVDVCkgPworCQkgICAgIkJvb3QgQmxvY2sgQSBNYXBwZWQgdG8gSGlnaGVz dCBBZGRyZXNzIiA6CisJCSAgICAiRmxhc2ggTWVtb3J5IE1hcCBDb250cm9sbGVkIGJ5IEZs YXNoIEJvb3QgQmxvY2sgU2VsZWN0IikpOworCXNlcV9wcmludGYobSwgIkZsYXNoIFdyaXRl IFByb3RlY3QgU1dcdDogJXNcbiIsCisJCSAgICgocmVnX3ZhbHVlICYgTVZNRTMxMDBfRkxB U0hfV1BfU1cpID8KKwkJICAgICJXcml0ZSBQcm90ZWN0ZWQiIDogIk5vdCBXcml0ZSBQcm90 ZWN0ZWQiKSk7CisJc2VxX3ByaW50ZihtLCAiRmxhc2ggV3JpdGUgUHJvdGVjdCBIV1x0OiAl c1xuIiwKKwkJICAgKChyZWdfdmFsdWUgJiBNVk1FMzEwMF9GTEFTSF9XUF9IVykgPworCQkg ICAgIldyaXRlIFByb3RlY3RlZCIgOiAiTm90IFdyaXRlIFByb3RlY3RlZCIpKTsKKwlzZXFf cHJpbnRmKG0sICJGbGFzaCBCb290IEJsb2NrIFNlbGVjdFx0OiAlc1xuIiwKKwkJICAgKChy ZWdfdmFsdWUgJiBNVk1FMzEwMF9GTEFTSF9CTEtfU0VMKSA/CisJCSAgICAiQm9vdCBCbG9j ayBCIFNlbGVjdGVkIiA6ICJCb290IEJsb2NrIEEgU2VsZWN0ZWQiKSk7CisJc2VxX3ByaW50 ZihtLCAiRmxhc2ggUmVhZHkgU3RhdHVzXHQ6ICVzXG4iLAorCQkgICAoKHJlZ192YWx1ZSAm IE1WTUUzMTAwX0ZMQVNIX1JEWSkgPworCQkgICAgIkJpdCBTZXQiIDogIkJpdCBOb3QgU2V0 IikpOworCisJLyogUENJIEJ1cyBBIFN0YXR1cyBSZWdpc3RlciAqLworCXJlZ192YWx1ZSA9 IHJlYWRiKHJlZ19hZGRyKyspOworCXNlcV9wcmludGYobSwgIlBDSSBCdXMgQSA2NCBCaXRc dDogJXNcbiIsCisJCSAgICgocmVnX3ZhbHVlICYgTVZNRTMxMDBfUENJX0JVU19BXzY0Qikg PworCQkgICAgIjY0IEJpdCBFbmFibGVkIiA6ICIzMiBCaXQgTW9kZSIpKTsKKwlzZXFfcHJp bnRmKG0sICJQQ0kgQnVzIEEgUENJLVhcdFx0OiAlc1xuIiwKKwkJICAgKChyZWdfdmFsdWUg JiBNVk1FMzEwMF9QQ0lfQlVTX0FfUENJWCkgPworCQkgICAgIlBDSS1YIE1vZGUiIDogIlBD SSBNb2RlIikpOworCXN3aXRjaCAocmVnX3ZhbHVlICYgTVZNRTMxMDBfUENJX0JVU19BX1NQ RF9NQVNLKSB7CisJY2FzZSBNVk1FMzEwMF9QQ0lfQlVTX0FfU1BEXzEzMzoKKwkJc3ByaW50 ZihidWZmLCAiMTMzIE1IeiIpOworCQlicmVhazsKKwljYXNlIE1WTUUzMTAwX1BDSV9CVVNf QV9TUERfMTAwOgorCQlzcHJpbnRmKGJ1ZmYsICIxMDAgTUh6Iik7CisJCWJyZWFrOworCWNh c2UgTVZNRTMxMDBfUENJX0JVU19BX1NQRF82NjoKKwkJc3ByaW50ZihidWZmLCAiNjYgTUh6 Iik7CisJCWJyZWFrOworCWNhc2UgTVZNRTMxMDBfUENJX0JVU19BX1NQRF8zMzoKKwlkZWZh dWx0OgorCQlzcHJpbnRmKGJ1ZmYsICIzMyBNSHoiKTsKKwkJYnJlYWs7CisJfQorCXNlcV9w cmludGYobSwgIlBDSSBCdXMgQSBTcGVlZFx0XHQ6ICVzXG4iLCBidWZmKTsKKworCS8qIFBD SSBCdXMgQiBTdGF0dXMgUmVnaXN0ZXIgKi8KKwlyZWdfdmFsdWUgPSByZWFkYihyZWdfYWRk cisrKTsKKwlpZiAocmVnX3ZhbHVlICYgTVZNRTMxMDBfUENJX0JVU19CXzNfM1ZfVklPKSB7 CisJCXNlcV9wcmludGYobSwgIlBDSSBCdXMgQiAzLjNWIFZJT1x0OiAlc1xuIiwKKwkJCSAg ICJDb25maWd1cmVkIGZvciAzLjNWIFZJTyIpOworCX07CisJaWYgKHJlZ192YWx1ZSAmIE1W TUUzMTAwX1BDSV9CVVNfQl81XzBWX1ZJTykgeworCQlzZXFfcHJpbnRmKG0sICJQQ0kgQnVz IEIgNS4wViBWSU9cdDogJXNcbiIsCisJCQkgICAiQ29uZmlndXJlZCBmb3IgNS4wViBWSU8i KTsKKwl9OworCXNlcV9wcmludGYobSwgIlBDSSBCdXMgQiBFUkRZMlx0XHQ6ICVkXG4iLAor CQkgICAoKHJlZ192YWx1ZSAmIE1WTUUzMTAwX1BDSV9CVVNfQl9FUkRZMikgPyAxIDogMCkp OworCXNlcV9wcmludGYobSwgIlBDSSBCdXMgQiBFUkRZMVx0XHQ6ICVkXG4iLAorCQkgICAo KHJlZ192YWx1ZSAmIE1WTUUzMTAwX1BDSV9CVVNfQl9FUkRZMSkgPyAxIDogMCkpOworCXNl cV9wcmludGYobSwgIlBDSSBCdXMgQiA2NCBCaXRcdDogJXNcbiIsCisJCSAgICgocmVnX3Zh bHVlICYgTVZNRTMxMDBfUENJX0JVU19CXzY0QikgPworCQkgICAgIjY0IEJpdCBFbmFibGVk IiA6ICIzMiBCaXQgTW9kZSIpKTsKKwlzZXFfcHJpbnRmKG0sICJQQ0kgQnVzIEIgUENJLVhc dFx0OiAlc1xuIiwKKwkJICAgKChyZWdfdmFsdWUgJiBNVk1FMzEwMF9QQ0lfQlVTX0JfUENJ WCkgPworCQkgICAgIlBDSS1YIE1vZGUiIDogIlBDSSBNb2RlIikpOworCXN3aXRjaCAocmVn X3ZhbHVlICYgTVZNRTMxMDBfUENJX0JVU19CX1NQRF9NQVNLKSB7CisJY2FzZSBNVk1FMzEw MF9QQ0lfQlVTX0JfU1BEXzEzMzoKKwkJc3ByaW50ZihidWZmLCAiMTMzIE1IeiIpOworCQli cmVhazsKKwljYXNlIE1WTUUzMTAwX1BDSV9CVVNfQl9TUERfMTAwOgorCQlzcHJpbnRmKGJ1 ZmYsICIxMDAgTUh6Iik7CisJCWJyZWFrOworCWNhc2UgTVZNRTMxMDBfUENJX0JVU19CX1NQ RF82NjoKKwkJc3ByaW50ZihidWZmLCAiNjYgTUh6Iik7CisJCWJyZWFrOworCWNhc2UgTVZN RTMxMDBfUENJX0JVU19CX1NQRF8zMzoKKwlkZWZhdWx0OgorCQlzcHJpbnRmKGJ1ZmYsICIz MyBNSHoiKTsKKwkJYnJlYWs7CisJfQorCXNlcV9wcmludGYobSwgIlBDSSBCdXMgQiBTcGVl ZFx0XHQ6ICVzXG4iLCBidWZmKTsKKworCS8qIFBDSSBCdXMgQyBTdGF0dXMgUmVnaXN0ZXIg Ki8KKwlyZWdfdmFsdWUgPSByZWFkYihyZWdfYWRkcisrKTsKKwlzZXFfcHJpbnRmKG0sICJQ Q0kgQnVzIEMgNjQgQml0XHQ6ICVzXG4iLAorCQkgICAoKHJlZ192YWx1ZSAmIE1WTUUzMTAw X1BDSV9CVVNfQ182NEIpID8KKwkJICAgICI2NCBCaXQgRW5hYmxlZCIgOiAiMzIgQml0IE1v ZGUiKSk7CisJc2VxX3ByaW50ZihtLCAiUENJIEJ1cyBDIFBDSS1YXHRcdDogJXNcbiIsCisJ CSAgICgocmVnX3ZhbHVlICYgTVZNRTMxMDBfUENJX0JVU19DX1BDSVgpID8KKwkJICAgICJQ Q0ktWCBNb2RlIiA6ICJQQ0kgTW9kZSIpKTsKKwlzd2l0Y2ggKHJlZ192YWx1ZSAmIE1WTUUz MTAwX1BDSV9CVVNfQ19TUERfTUFTSykgeworCWNhc2UgTVZNRTMxMDBfUENJX0JVU19DX1NQ RF8xMzM6CisJCXNwcmludGYoYnVmZiwgIjEzMyBNSHoiKTsKKwkJYnJlYWs7CisJY2FzZSBN Vk1FMzEwMF9QQ0lfQlVTX0NfU1BEXzEwMDoKKwkJc3ByaW50ZihidWZmLCAiMTAwIE1IeiIp OworCQlicmVhazsKKwljYXNlIE1WTUUzMTAwX1BDSV9CVVNfQ19TUERfNjY6CisJCXNwcmlu dGYoYnVmZiwgIjY2IE1IeiIpOworCQlicmVhazsKKwljYXNlIE1WTUUzMTAwX1BDSV9CVVNf Q19TUERfMzM6CisJZGVmYXVsdDoKKwkJc3ByaW50ZihidWZmLCAiMzMgTUh6Iik7CisJCWJy ZWFrOworCX0KKwlzZXFfcHJpbnRmKG0sICJQQ0kgQnVzIEMgU3BlZWRcdFx0OiAlc1xuIiwg YnVmZik7CisKKwkvKiBJbnRlcnJ1cHQgRGV0ZWN0IFJlZ2lzdGVyICovCisJcmVnX3ZhbHVl ID0gcmVhZGIocmVnX2FkZHIrKyk7CisKKwlpZiAocmVnX3ZhbHVlICYgTVZNRTMxMDBfRkVD X1BIWV9JTlRFUlJVUFQpIHsKKwkJc2VxX3ByaW50ZihtLCAiRkVDIFBIWSBJbnRlcnJ1cHRc dDogJXNcbiIsICJBc3NlcnRlZCIpOworCX0gZWxzZSB7CisJCXNlcV9wcmludGYobSwgIkZF QyBQSFkgSW50ZXJydXB0XHQ6ICVzXG4iLCAiTm90IEFzc2VydGVkIik7CisJfTsKKwlpZiAo cmVnX3ZhbHVlICYgTVZNRTMxMDBfVFNFQzJfUEhZX0lOVEVSUlVQVCkgeworCQlzZXFfcHJp bnRmKG0sICJUU0VDMiBQSFkgSW50ZXJydXB0XHQ6ICVzXG4iLCAiQXNzZXJ0ZWQiKTsKKwl9 IGVsc2UgeworCQlzZXFfcHJpbnRmKG0sICJUU0VDMiBQSFkgSW50ZXJydXB0XHQ6ICVzXG4i LCAiTm90IEFzc2VydGVkIik7CisJfTsKKwlpZiAocmVnX3ZhbHVlICYgTVZNRTMxMDBfVFNF QzFfUEhZX0lOVEVSUlVQVCkgeworCQlzZXFfcHJpbnRmKG0sICJUU0VDMSBQSFkgSW50ZXJy dXB0XHQ6ICVzXG4iLCAiQXNzZXJ0ZWQiKTsKKwl9IGVsc2UgeworCQlzZXFfcHJpbnRmKG0s ICJUU0VDMSBQSFkgSW50ZXJydXB0XHQ6ICVzXG4iLCAiTm90IEFzc2VydGVkIik7CisJfTsK KworCS8qIFByZXNlbmNlIERldGVjdCBSZWdpc3RlciAqLworCXJlZ192YWx1ZSA9IHJlYWRi KHJlZ19hZGRyKyspOworCisJc2VxX3ByaW50ZihtLCAiUE1DU1BBTlx0XHRcdDogJXNcbiIs CisJCSAgICgocmVnX3ZhbHVlICYgTVZNRTMxMDBfUE1DU1BBTl9QUkVTRU5UKSA/CisJCSAg ICAiUE1DU1BBTiBJbnN0YWxsZWQiIDogIlBNQ1NQQU4gTm90IEluc3RhbGxlZCIpKTsKKwlz ZXFfcHJpbnRmKG0sICJQTUMgU2l0ZSAyXHRcdDogJXNcbiIsCisJCSAgICgocmVnX3ZhbHVl ICYgTVZNRTMxMDBfUE1DMl9QUkVTRU5UKSA/CisJCSAgICAiUE1DIE1vZHVsZSBJbnN0YWxs ZWQiIDogIlBNQyBNb2R1bGUgTm90IEluc3RhbGxlZCIpKTsKKwlzZXFfcHJpbnRmKG0sICJQ TUMgU2l0ZSAxXHRcdDogJXNcbiIsCisJCSAgICgocmVnX3ZhbHVlICYgTVZNRTMxMDBfUE1D MV9QUkVTRU5UKSA/CisJCSAgICAiUE1DIE1vZHVsZSBJbnN0YWxsZWQiIDogIlBNQyBNb2R1 bGUgTm90IEluc3RhbGxlZCIpKTsKKworCS8qIFBMRCBSZXZpc2lvbiBSZWdpc3RlciAqLwor CXJlZ192YWx1ZSA9IHJlYWRiKHJlZ19hZGRyKyspOworCisJc2VxX3ByaW50ZihtLCAiUExE IFJldmlzaW9uXHRcdDogMHgleFxuIiwgcmVnX3ZhbHVlKTsKKworCS8qIFBMRCBEYXRlIENv ZGUgUmVnaXN0ZXIgKi8KKwlyZWdfYWRkcisrOworCXJlZ19hZGRyKys7CisJcmVnMzJfdmFs dWUgPSByZWFkbCgodTMyICopIHJlZ19hZGRyKTsKKwlzZXFfcHJpbnRmKG0sICJQTEQgRGF0 ZSBDb2RlXHRcdDogMHglMDh4XG4iLAorCQkgICAoKChyZWczMl92YWx1ZSAmIDB4MDAwMDAw ZmZVKSA8PCAyNCkgfAorCQkgICAgKChyZWczMl92YWx1ZSAmIDB4MDAwMGZmMDBVKSA8PCA4 KSB8CisJCSAgICAoKHJlZzMyX3ZhbHVlICYgMHgwMGZmMDAwMFUpID4+IDgpIHwKKwkJICAg ICgocmVnMzJfdmFsdWUgJiAweGZmMDAwMDAwVSkgPj4gMjQpKSk7CisKKwlpb3VubWFwKHJl Z19ibG9jayk7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIG12bWUzMTAwX3Jlc3Rh cnQoY2hhciAqY21kKQoreworCXZvbGF0aWxlIHVsb25nIGkgPSAxMDAwMDAwMDsKKworCWxv Y2FsX2lycV9kaXNhYmxlKCk7CisJd3JpdGViKE1WTUUzMTAwX0JPQVJEX1JFU0VULCBzeXN0 ZW1fY29udHJvbF9yZWdfYWRkcik7CisKKwl3aGlsZSAoaS0tID4gMCkgOworCXBhbmljKCJy ZXN0YXJ0IGZhaWxlZFxuIik7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9m X2J1c19pZHNbXSA9IHsKKwl7LnR5cGUgPSAic29jIix9LAorCXsuY29tcGF0aWJsZSA9ICJz b2MiLH0sCisgICAgICAgIHsuY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIiwgfSwKKwl7fSwK K307CisKK3N0YXRpYyBpbnQgX19pbml0IGRlY2xhcmVfb2ZfcGxhdGZvcm1fZGV2aWNlcyh2 b2lkKQoreworICAgICAgICBvZl9wbGF0Zm9ybV9idXNfcHJvYmUoTlVMTCwgb2ZfYnVzX2lk cywgTlVMTCk7CisKKyAgICAgICAgcmV0dXJuIDA7Cit9CittYWNoaW5lX2RldmljZV9pbml0 Y2FsbChtdm1lMzEwMCwgZGVjbGFyZV9vZl9wbGF0Zm9ybV9kZXZpY2VzKTsKKworLyoKKyAq IENhbGxlZCB2ZXJ5IGVhcmx5LCBkZXZpY2UtdHJlZSBpc24ndCB1bmZsYXR0ZW5lZAorICov CitzdGF0aWMgaW50IF9faW5pdCBtdm1lMzEwMF9wcm9iZSh2b2lkKQoreworICAgICAgICB1 bnNpZ25lZCBsb25nIHJvb3QgPSBvZl9nZXRfZmxhdF9kdF9yb290KCk7CisKKyAgICAgICAg aWYgKG9mX2ZsYXRfZHRfaXNfY29tcGF0aWJsZShyb290LCAiTVZNRTMxMDAiKSkKKwkJcmV0 dXJuIDE7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworZGVmaW5lX21hY2hpbmUobXZtZTMx MDApCit7CisJLm5hbWUgPSAiTVZNRTMxMDAiLAorCS5wcm9iZSA9IG12bWUzMTAwX3Byb2Jl LAorCS5zZXR1cF9hcmNoID0gbXZtZTMxMDBfc2V0dXBfYXJjaCwKKwkuaW5pdF9JUlEgPSBt dm1lMzEwMF9pbml0X2lycSwKKwkuc2hvd19jcHVpbmZvID0gbXZtZTMxMDBfc2hvd19jcHVp bmZvLAorCS5nZXRfaXJxID0gbXBpY19nZXRfaXJxLAorCS5yZXN0YXJ0ID0gbXZtZTMxMDBf cmVzdGFydCwKKwkucGNpYmlvc19maXh1cCA9IG12bWUzMTAwX3BjaWJpb3NfZml4dXAsCisJ LmNhbGlicmF0ZV9kZWNyID0gZ2VuZXJpY19jYWxpYnJhdGVfZGVjciwKKwkucHJvZ3Jlc3Mg PSB1ZGJnX3Byb2dyZXNzLAorfTsKZGlmZiAtdSAtLW5ldy1maWxlIC0tcmVjdXJzaXZlIGxp bnV4LTIuNi4yOS42Lm9yaWcvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L212bWUzMTAw LmggbGludXgtMi42LjI5LjYubW9kL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tdm1l MzEwMC5oCi0tLSBsaW51eC0yLjYuMjkuNi5vcmlnL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMv ODV4eC9tdm1lMzEwMC5oCTE5NjktMTItMzEgMTc6MDA6MDAuMDAwMDAwMDAwIC0wNzAwCisr KyBsaW51eC0yLjYuMjkuNi5tb2QvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L212bWUz MTAwLmgJMjAwOS0wNy0yMSAxMToyODoxNy4wMDAwMDAwMDAgLTA3MDAKQEAgLTAsMCArMSwx MTkgQEAKKy8qCisgKiBhcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXZtZTMxMDAuaAor ICoKKyAqIE1WTUUzMTAwIGJvYXJkIGRlZmluaXRpb25zCisgKgorICogQWppdCBQcmVtIDxB aml0LlByZW1AZW1lcnNvbi5jb20+CisgKgorICogQ29weXJpZ2h0IDIwMDQtMjAwNyBNb3Rv cm9sYSBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOC0yMDA5IEVtZXJzb24gTmV0d29yayBQb3dl ciBFbWJlZGRlZCBDb21wdXRpbmcgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAor ICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5z ZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBl aXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlv bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpZm5kZWYgX19NVk1FMzEwMF9I X18KKyNkZWZpbmUgX19NVk1FMzEwMF9IX18KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4K KworLyogRmxhc2ggKi8KKyNkZWZpbmUgTVZNRTMxMDBfRkxBU0hfQkFTRV8xMjhNCTB4Zjgw MDAwMDAKKyNkZWZpbmUgTVZNRTMxMDBfRkxBU0hfU0laRV8xMjhNCTB4MDgwMDAwMDAKKwor I2RlZmluZSBNVk1FMzEwMF9GTEFTSF9CQVNFXzY0TQkJMHhmYzAwMDAwMAorI2RlZmluZSBN Vk1FMzEwMF9GTEFTSF9TSVpFXzY0TQkJMHgwNDAwMDAwMAorCisvKiBTeXN0ZW0gQ29udHJv bCBhbmQgU3RhdHVzIFJlZ2lzdGVycyAqLworI2RlZmluZSBNVk1FMzEwMF9TWVNURU1fU1RB VFVTX1JFRwkweEUyMDAwMDAwCisjZGVmaW5lIE1WTUUzMTAwX1NZU1RFTV9DT05UUk9MX1JF RwkweEUyMDAwMDAxCisjZGVmaW5lIE1WTUUzMTAwX1NUQVRVU19JTkRJQ0FUT1JfUkVHCTB4 RTIwMDAwMDIKKyNkZWZpbmUgTVZNRTMxMDBfRkxBU0hfQ1RSTF9TVEFUX1JFRwkweEUyMDAw MDAzCisjZGVmaW5lIE1WTUUzMTAwX1BDSV9CVVNfQV9TVEFUVVNfUkVHCTB4RTIwMDAwMDQK KyNkZWZpbmUgTVZNRTMxMDBfUENJX0JVU19CX1NUQVRVU19SRUcJMHhFMjAwMDAwNQorI2Rl ZmluZSBNVk1FMzEwMF9QQ0lfQlVTX0NfU1RBVFVTX1JFRwkweEUyMDAwMDA2CisjZGVmaW5l IE1WTUUzMTAwX0lOVEVSUlVQVF9ERVRFQ1RfUkVHCTB4RTIwMDAwMDcKKyNkZWZpbmUgTVZN RTMxMDBfUFJFU0VOQ0VfREVURUNUX1JFRwkweEUyMDAwMDA4CisjZGVmaW5lIE1WTUUzMTAw X1BMRF9SRVZJU0lPTl9SRUcJMHhFMjAwMDAwOQorI2RlZmluZSBNVk1FMzEwMF9QTERfREFU RV9DT0RFX1JFRwkweEUyMDAwMDBDCisKKy8qIFN5c3RlbSBTdGF0dXMgUmVnaXN0ZXIgKi8K KyNkZWZpbmUgTVZNRTMxMDBfU0FGRV9TVEFSVAkJMHgxMAorI2RlZmluZSBNVk1FMzEwMF9B Qk9SVF9TVEFUVVMJCTB4MDgKKyNkZWZpbmUgTVZNRTMxMDBfQk9BUkRfVFlQRV9NQVNLCTB4 MDMKKyNkZWZpbmUgTVZNRTMxMDBfQk9BUkRfVFlQRV9QUlBNQwkweDAxCisjZGVmaW5lIE1W TUUzMTAwX0JPQVJEX1RZUEVfVk1FCQkweDAwCisKKy8qIFN5c3RlbSBDb250cm9sIFJlZ2lz dGVyICovCisjZGVmaW5lIE1WTUUzMTAwX0JPQVJEX1JFU0VUCQkweEEwCisjZGVmaW5lIE1W TUUzMTAwX0ZFQ19QSFlfTUFTSwkJMHgwNAorI2RlZmluZSBNVk1FMzEwMF9FRVBST01fV1AJ CTB4MDIKKyNkZWZpbmUgTVZNRTMxMDBfVFNUQVRfTUFTSwkJMHgwMQorCisvKiBTdGF0dXMg SW5kaWNhdG9yIFJlZ2lzdGVyICovCisjZGVmaW5lIE1WTUUzMTAwX0JSRF9GQUlMX0xFRAkJ MHgwMQorI2RlZmluZSBNVk1FMzEwMF9VU1IxX0xFRAkJMHgwMgorI2RlZmluZSBNVk1FMzEw MF9VU1IyX0xFRAkJMHgwNAorI2RlZmluZSBNVk1FMzEwMF9VU1IzX0xFRAkJMHgwOAorCisv KiBGbGFzaCBDb250cm9sL1N0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBNVk1FMzEwMF9G TEFTSF9NQVBfU0VMRUNUCTB4MTAKKyNkZWZpbmUgTVZNRTMxMDBfRkxBU0hfV1BfU1cJCTB4 MDgKKyNkZWZpbmUgTVZNRTMxMDBfRkxBU0hfV1BfSFcJCTB4MDQKKyNkZWZpbmUgTVZNRTMx MDBfRkxBU0hfQkxLX1NFTAkJMHgwMgorI2RlZmluZSBNVk1FMzEwMF9GTEFTSF9SRFkJCTB4 MDEKKworLyogUENJIEJ1cyBBIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBNVk1FMzEw MF9QQ0lfQlVTX0FfNjRCCQkweDA4CisjZGVmaW5lIE1WTUUzMTAwX1BDSV9CVVNfQV9QQ0lY CQkweDA0CisjZGVmaW5lIE1WTUUzMTAwX1BDSV9CVVNfQV9TUERfTUFTSwkweDAzCisjZGVm aW5lIE1WTUUzMTAwX1BDSV9CVVNfQV9TUERfMTMzCTB4MDMKKyNkZWZpbmUgTVZNRTMxMDBf UENJX0JVU19BX1NQRF8xMDAJMHgwMgorI2RlZmluZSBNVk1FMzEwMF9QQ0lfQlVTX0FfU1BE XzY2CTB4MDEKKyNkZWZpbmUgTVZNRTMxMDBfUENJX0JVU19BX1NQRF8zMwkweDAwCisKKy8q IFBDSSBCdXMgQiBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTVZNRTMxMDBfUENJX0JV U19CXzNfM1ZfVklPCTB4ODAKKyNkZWZpbmUgTVZNRTMxMDBfUENJX0JVU19CXzVfMFZfVklP CTB4NDAKKyNkZWZpbmUgTVZNRTMxMDBfUENJX0JVU19CX0VSRFkyCTB4MjAKKyNkZWZpbmUg TVZNRTMxMDBfUENJX0JVU19CX0VSRFkxCTB4MTAKKyNkZWZpbmUgTVZNRTMxMDBfUENJX0JV U19CXzY0QgkJMHgwOAorI2RlZmluZSBNVk1FMzEwMF9QQ0lfQlVTX0JfUENJWAkJMHgwNAor I2RlZmluZSBNVk1FMzEwMF9QQ0lfQlVTX0JfU1BEX01BU0sJMHgwMworI2RlZmluZSBNVk1F MzEwMF9QQ0lfQlVTX0JfU1BEXzEzMwkweDAzCisjZGVmaW5lIE1WTUUzMTAwX1BDSV9CVVNf Ql9TUERfMTAwCTB4MDIKKyNkZWZpbmUgTVZNRTMxMDBfUENJX0JVU19CX1NQRF82NgkweDAx CisjZGVmaW5lIE1WTUUzMTAwX1BDSV9CVVNfQl9TUERfMzMJMHgwMAorCisvKiBQQ0kgQnVz IEMgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIE1WTUUzMTAwX1BDSV9CVVNfQ182NEIJ CTB4MDgKKyNkZWZpbmUgTVZNRTMxMDBfUENJX0JVU19DX1BDSVgJCTB4MDQKKyNkZWZpbmUg TVZNRTMxMDBfUENJX0JVU19DX1NQRF9NQVNLCTB4MDMKKyNkZWZpbmUgTVZNRTMxMDBfUENJ X0JVU19DX1NQRF8xMzMJMHgwMworI2RlZmluZSBNVk1FMzEwMF9QQ0lfQlVTX0NfU1BEXzEw MAkweDAyCisjZGVmaW5lIE1WTUUzMTAwX1BDSV9CVVNfQ19TUERfNjYJMHgwMQorI2RlZmlu ZSBNVk1FMzEwMF9QQ0lfQlVTX0NfU1BEXzMzCTB4MDAKKworLyogSW50ZXJydXB0IERldGVj dCBSZWdpc3RlciAqLworI2RlZmluZSBNVk1FMzEwMF9GRUNfUEhZX0lOVEVSUlVQVAkweDA0 CisjZGVmaW5lIE1WTUUzMTAwX1RTRUMyX1BIWV9JTlRFUlJVUFQJMHgwMgorI2RlZmluZSBN Vk1FMzEwMF9UU0VDMV9QSFlfSU5URVJSVVBUCTB4MDEKKworLyogUHJlc2VuY2UgRGV0ZWN0 IFJlZ2lzdGVyICovCisjZGVmaW5lIE1WTUUzMTAwX1BNQ1NQQU5fUFJFU0VOVAkweDA0Cisj ZGVmaW5lIE1WTUUzMTAwX1BNQzJfUFJFU0VOVAkJMHgwMgorI2RlZmluZSBNVk1FMzEwMF9Q TUMxX1BSRVNFTlQJCTB4MDEKKworI2RlZmluZSBNVk1FMzEwMF9CQVNFX0JBVUQJCTE4NDMy MDAKKyNkZWZpbmUgUVVBUlRfQkFTRV9CQVVECQkJKE1WTUUzMTAwX0JBU0VfQkFVRCAvIDE2 KQorI2RlZmluZSBNVk1FMzEwMF9VQVJUX1NJWkUJCTB4OAorCisjZGVmaW5lIE1WTUUzMTAw X1NFUklBTF8xCTB4RTIwMTEwMDBVCisjZGVmaW5lIE1WTUUzMTAwX1NFUklBTF8yCTB4RTIw MTIwMDBVCisjZGVmaW5lIE1WTUUzMTAwX1NFUklBTF8zCTB4RTIwMTMwMDBVCisjZGVmaW5l IE1WTUUzMTAwX1NFUklBTF80CTB4RTIwMTQwMDBVCisKKyNlbmRpZgkJCQkvKiBfX01WTUUz MTAwX0hfXyAqLwpkaWZmIC11IC0tbmV3LWZpbGUgLS1yZWN1cnNpdmUgbGludXgtMi42LjI5 LjYub3JpZy9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXZtZTMxMDBfdGltZXIuYyBs aW51eC0yLjYuMjkuNi5tb2QvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L212bWUzMTAw X3RpbWVyLmMKLS0tIGxpbnV4LTIuNi4yOS42Lm9yaWcvYXJjaC9wb3dlcnBjL3BsYXRmb3Jt cy84NXh4L212bWUzMTAwX3RpbWVyLmMJMTk2OS0xMi0zMSAxNzowMDowMC4wMDAwMDAwMDAg LTA3MDAKKysrIGxpbnV4LTIuNi4yOS42Lm1vZC9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1 eHgvbXZtZTMxMDBfdGltZXIuYwkyMDA5LTA3LTIxIDExOjI4OjE3LjAwMDAwMDAwMCAtMDcw MApAQCAtMCwwICsxLDM5MiBAQAorLyoKKyAqIGFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4 eC9tdm1lMzEwMF90aW1lci5jCisgKgorICogTVZNRTMxMDAgVGljayBUaW1lcnMgU3VwcG9y dAorICoKKyAqIEF1dGhvcjogQWppdCBQcmVtIDxBaml0LlByZW1AZW1lcnNvbi5jb20+Cisg KgorICogQ29weXJpZ2h0IDIwMDUtMjAwNyBNb3Rvcm9sYSBJbmMuCisgKiBDb3B5cmlnaHQg MjAwOC0yMDA5IEVtZXJzb24gTmV0d29yayBQb3dlciBFbWJlZGRlZCBDb21wdXRpbmcgSW5j LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAg dGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisg KiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAg TGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg Ki8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVy Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJy dXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorCisjaW5jbHVkZSA8YXNtL2lv Lmg+CisjaW5jbHVkZSAibXZtZTMxMDAuaCIKKyNpbmNsdWRlIDxhc20vbXZtZTMxMDBfdGlt ZXIuaD4KKworI2RlZmluZSBNVk1FMzEwMF9USUNLX1RJTUVSX0JBU0UgICAgICAgICAgICAg ICAgMHhFMjAyMDAwMAorI2RlZmluZSBNVk1FMzEwMF9USUNLX1RJTUVSX0JMT0NLX1NJWkUg ICAgICAgICAgMHg0QworCisjZGVmaW5lIE1WTUUzMTAwX1RJQ0tfVElNRVJfUFJFU0NBTEVS X1JFR19PRkZTRVQgICAgICAgIDB4MAorI2RlZmluZSBNVk1FMzEwMF9USUNLX1RJTUVSX0NP TlRST0xfUkVHX09GRlNFVCAgICAgICAgICAweDEwCisjZGVmaW5lIE1WTUUzMTAwX1RJQ0tf VElNRVJfQ09NUEFSRV9SRUdfT0ZGU0VUICAgICAgICAgIDB4MTQKKyNkZWZpbmUgTVZNRTMx MDBfVElDS19USU1FUl9DT1VOVEVSX1JFR19PRkZTRVQgICAgICAgICAgMHgxOAorCisjZGVm aW5lIE1WTUUzMTAwX1RJQ0tfVElNRVJfRU5DICAgICAgICAgICAgICAgICAweDAwMDAwMDAx CisjZGVmaW5lIE1WTUUzMTAwX1RJQ0tfVElNRVJfQ09DICAgICAgICAgICAgICAgICAweDAw MDAwMDAyCisjZGVmaW5lIE1WTUUzMTAwX1RJQ0tfVElNRVJfQ09WRiAgICAgICAgICAgICAg ICAweDAwMDAwMDA0CisjZGVmaW5lIE1WTUUzMTAwX1RJQ0tfVElNRVJfT1ZGICAgICAgICAg ICAgICAgICAweDAwMDAwMEYwCisjZGVmaW5lIE1WTUUzMTAwX1RJQ0tfVElNRVJfRU5JTlQg ICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIE1WTUUzMTAwX1RJQ0tfVElNRVJf Q0lOVCAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIE1WTUUzMTAwX1RJQ0tf VElNRVJfSU5UUyAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisKKyNkZWZpbmUJTUlOX01J Q1JPU0VDT05EUwkxMDAwMAorI2RlZmluZSBNQVhfVElDS1MJCTB4RkZGRkZGRkYKKworc3Ry dWN0IG12bWUzMTAwX3RpbWVyX3QgeworCW12bWUzMTAwX3RpbWVyX2YgZnVuYzsKKwl2b2lk ICpmdW5jX2RhdGE7CisJaW50IHN0YXJ0ZWQ7CisJaW50IHBlcmlvZGljOworCXVsb25nIHBl cmlvZDsKKwl1bG9uZyB0aWNrczsKK307CisKKyNkZWZpbmUgQUxMX01TRyAibXZtZTMxMDBf dGltZXI6ICIKKworI2lmZGVmIE1WTUUzMTAwX1RJTUVSX0RFQlVHCitpbnQgbXZtZTMxMDBf dGltZXJfZGVidWcgPSBNVk1FMzEwMF9USU1FUl9ERUJVRzsKK01PRFVMRV9QQVJNKG12bWUz MTAwX3RpbWVyX2RlYnVnLCAiaSIpOworI2RlZmluZSBERUJVRyhuLCBmbXQsIGFyZ3MuLi4p IGlmIChtdm1lMzEwMF90aW1lcl9kZWJ1Zz4obikpIHByaW50ayhLRVJOX0lORk8gQUxMX01T RyBmbXQsICMjIGFyZ3MpCitzdGF0aWMgY29uc3QgY2hhciAqdmVyc2lvbiA9ICJtdm1lMzEw MF90aW1lci5jIDEuMC4xIChBaml0IFByZW0pIjsKKyNlbHNlCisjZGVmaW5lIERFQlVHKG4s IGZtdCwgYXJncy4uLikKKyNlbmRpZgorCitleHRlcm4gaW50IG12bWUzMTAwX3RpbWVyX2ly cTsKKworc3RhdGljIHN0cnVjdCBtdm1lMzEwMF90aW1lcl90IG12bWUzMTAwX3RpbWVyWzRd Oworc3RhdGljIHZvaWQgX19pb21lbSAqbXZtZTMxMDBfdGltZXJfYmFzZTsKK3N0YXRpYyB1 MzIgY2xrX291dCA9IDE7CQkvKiBUaWNrcyBwZXIgbWljcm9zZWNvbmQgKi8KK3N0YXRpYyBz cGlubG9ja190IG12bWUzMTAwX3RpbWVyX2xvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7CisK K3N0YXRpYyBpcnFyZXR1cm5fdCBtdm1lMzEwMF90aW1lcl9pbnRfaGFuZGxlcihpbnQgaXJx LCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBtdm1lMzEwMF90aW1lcl90ICppbmZvID0gZGF0 YTsKKwltdm1lMzEwMF90aW1lcl9mIGZ1bmM7CisJdm9pZCAqZnVuY19kYXRhOworCWludCB0 aW1lcl9udW1iZXI7CisJdTMyIGN0cmxfcmVnOworCisJZm9yICh0aW1lcl9udW1iZXIgPSAw OyB0aW1lcl9udW1iZXIgPD0gMzsgdGltZXJfbnVtYmVyKyspIHsKKwkJaWYgKHN3YWIzMihy ZWFkbChtdm1lMzEwMF90aW1lcl9iYXNlICsKKwkJCSAodGltZXJfbnVtYmVyICsgMSkgKgor CQkJIE1WTUUzMTAwX1RJQ0tfVElNRVJfQ09OVFJPTF9SRUdfT0ZGU0VUKSkgJgorCQkgICAJ IE1WTUUzMTAwX1RJQ0tfVElNRVJfSU5UUykgeworCQkJaW5mbyA9ICZtdm1lMzEwMF90aW1l clt0aW1lcl9udW1iZXJdOworCQkJZnVuY19kYXRhID0gaW5mby0+ZnVuY19kYXRhOworCQkJ ZnVuYyA9IGluZm8tPmZ1bmM7CisKKwkJCWlmICghaW5mby0+cGVyaW9kaWMpIHsKKwkJCQlt dm1lMzEwMF90aW1lcl9zdG9wKHRpbWVyX251bWJlcik7CisJCQl9IGVsc2UgeworCQkJCWN0 cmxfcmVnID0gc3dhYjMyKHJlYWRsKG12bWUzMTAwX3RpbWVyX2Jhc2UgKworCQkJCQkoKHRp bWVyX251bWJlciArIDEpICoKKwkJCQkJIE1WTUUzMTAwX1RJQ0tfVElNRVJfQ09OVFJPTF9S RUdfT0ZGU0VUKSkpOworCQkJCWN0cmxfcmVnICY9IH5NVk1FMzEwMF9USUNLX1RJTUVSX0VO QzsKKwkJCQljdHJsX3JlZyA9CisJCQkJICAgIE1WTUUzMTAwX1RJQ0tfVElNRVJfQ09WRiB8 CisJCQkJICAgIE1WTUUzMTAwX1RJQ0tfVElNRVJfQ0lOVDsKKwkJCQl3cml0ZWwoc3dhYjMy KGN0cmxfcmVnKSwKKwkJCQkgICAgICAgbXZtZTMxMDBfdGltZXJfYmFzZSArCisJCQkJICAg ICAgICgodGltZXJfbnVtYmVyICsgMSkgKgorCQkJCQlNVk1FMzEwMF9USUNLX1RJTUVSX0NP TlRST0xfUkVHX09GRlNFVCkpOworCQkJCXdyaXRlbCgwLAorCQkJCSAgICAgICBtdm1lMzEw MF90aW1lcl9iYXNlICsKKwkJCQkgICAgICAgKCh0aW1lcl9udW1iZXIgKyAxKSAqCisJCQkJ CU1WTUUzMTAwX1RJQ0tfVElNRVJfQ09OVFJPTF9SRUdfT0ZGU0VUKQorCQkJCSAgICAgICAr CisJCQkJICAgICAgIChNVk1FMzEwMF9USUNLX1RJTUVSX0NPVU5URVJfUkVHX09GRlNFVCAt CisJCQkJCU1WTUUzMTAwX1RJQ0tfVElNRVJfQ09OVFJPTF9SRUdfT0ZGU0VUKSk7CisJCQkJ REVCVUcoMSwKKwkJCQkgICAgICAoIlRpbWVyICVkIENvdW50ZXIgMHgleCBDb21wYXJlIDB4 JXhcbiIsCisJCQkJICAgICAgIHRpbWVyX251bWJlciwKKwkJCQkgICAgICAgc3dhYjMyKHJl YWRsCisJCQkJCSAgICAgIChtdm1lMzEwMF90aW1lcl9iYXNlICsKKwkJCQkJICAgICAgICgo dGltZXJfbnVtYmVyICsgMSkgKgorCQkJCQkJTVZNRTMxMDBfVElDS19USU1FUl9DT05UUk9M X1JFR19PRkZTRVQpCisJCQkJCSAgICAgICArCisJCQkJCSAgICAgICAoTVZNRTMxMDBfVElD S19USU1FUl9DT1VOVEVSX1JFR19PRkZTRVQKKwkJCQkJCS0KKwkJCQkJCU1WTUUzMTAwX1RJ Q0tfVElNRVJfQ09OVFJPTF9SRUdfT0ZGU0VUKSkpLAorCQkJCSAgICAgICBzd2FiMzIocmVh ZGwKKwkJCQkJICAgICAgKG12bWUzMTAwX3RpbWVyX2Jhc2UgKworCQkJCQkgICAgICAgKCh0 aW1lcl9udW1iZXIgKyAxKSAqCisJCQkJCQlNVk1FMzEwMF9USUNLX1RJTUVSX0NPTlRST0xf UkVHX09GRlNFVCkKKwkJCQkJICAgICAgICsKKwkJCQkJICAgICAgIChNVk1FMzEwMF9USUNL X1RJTUVSX0NPTVBBUkVfUkVHX09GRlNFVAorCQkJCQkJLQorCQkJCQkJTVZNRTMxMDBfVElD S19USU1FUl9DT05UUk9MX1JFR19PRkZTRVQpKSkpKTsKKwkJCQl3cml0ZWwoc3dhYjMyCisJ CQkJICAgICAgIChNVk1FMzEwMF9USUNLX1RJTUVSX0VOQyB8CisJCQkJCU1WTUUzMTAwX1RJ Q0tfVElNRVJfQ09DIHwKKwkJCQkJTVZNRTMxMDBfVElDS19USU1FUl9FTklOVCksCisJCQkJ ICAgICAgIG12bWUzMTAwX3RpbWVyX2Jhc2UgKyAKKwkJCQkJKCh0aW1lcl9udW1iZXIgKyAx KSAqCisJCQkJCU1WTUUzMTAwX1RJQ0tfVElNRVJfQ09OVFJPTF9SRUdfT0ZGU0VUKSk7CisJ CQl9CisJCQlpZiAoZnVuYykgCisJCQkJZnVuYyhmdW5jX2RhdGEpOworCQl9CisJfQorCisJ cmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKiAKKyAqIFN0b3AgdGhlIHRpbWVyCisgKi8K K0VYUE9SVF9TWU1CT0wobXZtZTMxMDBfdGltZXJfc3RvcCk7CitpbnQgbXZtZTMxMDBfdGlt ZXJfc3RvcChpbnQgdGltZXJfbnVtYmVyKQoreworCXUzMiByZXNldF92YWx1ZTsKKwl1bnNp Z25lZCBsb25nIGZsYWdzOworCisJaWYgKCh0aW1lcl9udW1iZXIgPCAwKSB8fCAodGltZXJf bnVtYmVyID4gMykpCisJCXJldHVybiAtRUlOVkFMOworCisJc3Bpbl9sb2NrX2lycXNhdmUo Jm12bWUzMTAwX3RpbWVyX2xvY2ssIGZsYWdzKTsKKwlyZXNldF92YWx1ZSA9IHN3YWIzMihy ZWFkbChtdm1lMzEwMF90aW1lcl9iYXNlICsKKwkJCQkgICAoKHRpbWVyX251bWJlciArIDEp ICoKKwkJCQkgICAgTVZNRTMxMDBfVElDS19USU1FUl9DT05UUk9MX1JFR19PRkZTRVQpKSk7 CisJcmVzZXRfdmFsdWUgJj0gfk1WTUUzMTAwX1RJQ0tfVElNRVJfRU5DOworCXJlc2V0X3Zh bHVlICY9IH5NVk1FMzEwMF9USUNLX1RJTUVSX0VOSU5UOworCXJlc2V0X3ZhbHVlID0gTVZN RTMxMDBfVElDS19USU1FUl9DT1ZGIHwgTVZNRTMxMDBfVElDS19USU1FUl9DSU5UOworCXdy aXRlbChzd2FiMzIocmVzZXRfdmFsdWUpLAorCSAgICAgICBtdm1lMzEwMF90aW1lcl9iYXNl ICsKKwkgICAgICAgKCh0aW1lcl9udW1iZXIgKyAxKSAqIE1WTUUzMTAwX1RJQ0tfVElNRVJf Q09OVFJPTF9SRUdfT0ZGU0VUKSk7CisJd3JpdGVsKDAsIG12bWUzMTAwX3RpbWVyX2Jhc2Ug KworCSAgICAgICAoKHRpbWVyX251bWJlciArIDEpICogTVZNRTMxMDBfVElDS19USU1FUl9D T05UUk9MX1JFR19PRkZTRVQpICsKKwkgICAgICAgKE1WTUUzMTAwX1RJQ0tfVElNRVJfQ09V TlRFUl9SRUdfT0ZGU0VUIC0KKwkJTVZNRTMxMDBfVElDS19USU1FUl9DT05UUk9MX1JFR19P RkZTRVQpKTsKKwl3cml0ZWwoMHhmZmZmZmZmZiwgbXZtZTMxMDBfdGltZXJfYmFzZSArCisJ ICAgICAgICgodGltZXJfbnVtYmVyICsgMSkgKiBNVk1FMzEwMF9USUNLX1RJTUVSX0NPTlRS T0xfUkVHX09GRlNFVCkgKworCSAgICAgICAoTVZNRTMxMDBfVElDS19USU1FUl9DT01QQVJF X1JFR19PRkZTRVQgLQorCQlNVk1FMzEwMF9USUNLX1RJTUVSX0NPTlRST0xfUkVHX09GRlNF VCkpOworCW12bWUzMTAwX3RpbWVyW3RpbWVyX251bWJlcl0uZnVuYyA9IE5VTEw7CisJbXZt ZTMxMDBfdGltZXJbdGltZXJfbnVtYmVyXS5mdW5jX2RhdGEgPSBOVUxMOworCW12bWUzMTAw X3RpbWVyW3RpbWVyX251bWJlcl0uc3RhcnRlZCA9IDA7CisJbXZtZTMxMDBfdGltZXJbdGlt ZXJfbnVtYmVyXS5wZXJpb2RpYyA9IDA7CisJbXZtZTMxMDBfdGltZXJbdGltZXJfbnVtYmVy XS5wZXJpb2QgPSAwOworCW12bWUzMTAwX3RpbWVyW3RpbWVyX251bWJlcl0udGlja3MgPSAw eEZGRkZGRkZGOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm12bWUzMTAwX3RpbWVyX2xv Y2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCisvKiAKKyAqIFN0YXJ0IHRoZSB0aW1l cgorICovCitFWFBPUlRfU1lNQk9MKG12bWUzMTAwX3RpbWVyX3N0YXJ0KTsKK2ludCBtdm1l MzEwMF90aW1lcl9zdGFydChpbnQgdGltZXJfbnVtYmVyLCB1bnNpZ25lZCBsb25nIG1pY3Jv c2Vjb25kcywKKwkJCSBtdm1lMzEwMF90aW1lcl9mIGZ1bmMsIHZvaWQgKmZ1bmNfZGF0YSwg aW50IHBlcmlvZGljKQoreworCWludCByZXMgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7 CisJdW5zaWduZWQgbG9uZyB0aWNrczsKKworCXByaW50ayhLRVJOX0lORk8KKwkgICAgICAg Im12bWUzMTAwX3RpbWVyOiBzdGFydF90aW1lcjogbnVtICVkIG1pY3Jvc2Vjb25kcyAweCVs eCBwZXJpb2RpYyAlZFxuIiwKKwkgICAgICAgdGltZXJfbnVtYmVyLCBtaWNyb3NlY29uZHMs IHBlcmlvZGljKTsKKwlpZiAoKHRpbWVyX251bWJlciA8IDApIHx8ICh0aW1lcl9udW1iZXIg PiAzKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKChtaWNyb3NlY29uZHMgPCBNSU5fTUlD Uk9TRUNPTkRTKSB8fAorCSAgICAobWljcm9zZWNvbmRzID4gTUFYX1RJQ0tTIC8gY2xrX291 dCkpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChmdW5jID09IE5VTEwpCisJCXJldHVybiAt RUlOVkFMOworCWlmIChtdm1lMzEwMF90aW1lclt0aW1lcl9udW1iZXJdLnN0YXJ0ZWQgPT0g MSkKKwkJcmV0dXJuIC1FQlVTWTsKKwlpZiAoKHJlcyA9IG12bWUzMTAwX3RpbWVyX3N0b3Ao dGltZXJfbnVtYmVyKSkgPCAwKQorCQlyZXR1cm4gcmVzOworCXRpY2tzID0gbWljcm9zZWNv bmRzICogY2xrX291dDsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbXZtZTMxMDBfdGltZXJfbG9j aywgZmxhZ3MpOworCW12bWUzMTAwX3RpbWVyW3RpbWVyX251bWJlcl0uc3RhcnRlZCA9IDE7 CisJbXZtZTMxMDBfdGltZXJbdGltZXJfbnVtYmVyXS5mdW5jID0gZnVuYzsKKwltdm1lMzEw MF90aW1lclt0aW1lcl9udW1iZXJdLmZ1bmNfZGF0YSA9IGZ1bmNfZGF0YTsKKwltdm1lMzEw MF90aW1lclt0aW1lcl9udW1iZXJdLnBlcmlvZGljID0gcGVyaW9kaWM7CisJbXZtZTMxMDBf dGltZXJbdGltZXJfbnVtYmVyXS5wZXJpb2QgPSBtaWNyb3NlY29uZHM7CisJbXZtZTMxMDBf dGltZXJbdGltZXJfbnVtYmVyXS50aWNrcyA9IHRpY2tzOworCXdyaXRlbChzd2FiMzIodGlj a3MpLCBtdm1lMzEwMF90aW1lcl9iYXNlICsKKwkgICAgICAgKCh0aW1lcl9udW1iZXIgKyAx KSAqIE1WTUUzMTAwX1RJQ0tfVElNRVJfQ09OVFJPTF9SRUdfT0ZGU0VUKSArCisJICAgICAg IChNVk1FMzEwMF9USUNLX1RJTUVSX0NPTVBBUkVfUkVHX09GRlNFVCAtCisJCU1WTUUzMTAw X1RJQ0tfVElNRVJfQ09OVFJPTF9SRUdfT0ZGU0VUKSk7CisJd3JpdGVsKDAsIG12bWUzMTAw X3RpbWVyX2Jhc2UgKworCSAgICAgICAoKHRpbWVyX251bWJlciArIDEpICogTVZNRTMxMDBf VElDS19USU1FUl9DT05UUk9MX1JFR19PRkZTRVQpICsKKwkgICAgICAgKE1WTUUzMTAwX1RJ Q0tfVElNRVJfQ09VTlRFUl9SRUdfT0ZGU0VUIC0KKwkJTVZNRTMxMDBfVElDS19USU1FUl9D T05UUk9MX1JFR19PRkZTRVQpKTsKKwl3cml0ZWwoc3dhYjMyKE1WTUUzMTAwX1RJQ0tfVElN RVJfRU5DIHwgTVZNRTMxMDBfVElDS19USU1FUl9DT0MgfAorCQkgICAgICBNVk1FMzEwMF9U SUNLX1RJTUVSX0VOSU5UKSwKKwkgICAgICAgbXZtZTMxMDBfdGltZXJfYmFzZSArCisJICAg ICAgICgodGltZXJfbnVtYmVyICsgMSkgKiBNVk1FMzEwMF9USUNLX1RJTUVSX0NPTlRST0xf UkVHX09GRlNFVCkpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm12bWUzMTAwX3RpbWVy X2xvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCisvKiAKKyAqIEdldCB0aGUgdGlt ZXIgcmVzb2x1dGlvbiwgaW4gbWljcm9zZWNvbmRzL3RpY2sKKyAqLworRVhQT1JUX1NZTUJP TChtdm1lMzEwMF90aW1lcl9nZXRfcmVzb2x1dGlvbik7Cit1bnNpZ25lZCBsb25nIG12bWUz MTAwX3RpbWVyX2dldF9yZXNvbHV0aW9uKHZvaWQpCit7CisJdTMyIHByZXNjYWxlcl9hZGp1 c3Q7CisKKwkvKiAKKwkgKiBQcmVzY2FsZXJfYWRqdXN0ID0gMjU2IC0gQ0xLSU4vQ0xLT1VU CisJICogQ0xLSU4gPSAyNSBNSHoKKwkgKi8KKworCXByZXNjYWxlcl9hZGp1c3QgPSByZWFk bChtdm1lMzEwMF90aW1lcl9iYXNlICsKKwkJCQkgTVZNRTMxMDBfVElDS19USU1FUl9QUkVT Q0FMRVJfUkVHX09GRlNFVCk7CisJcmV0dXJuICgyNSAvICgyNTYgLSBwcmVzY2FsZXJfYWRq dXN0KSk7Cit9CisKKy8qIAorICogU2V0IHRoZSB0aW1lciByZXNvbHV0aW9uLCBpbiB0aWNr cy9taWNyb3NlY29uZAorICovCitFWFBPUlRfU1lNQk9MKG12bWUzMTAwX3RpbWVyX3NldF9y ZXNvbHV0aW9uKTsKK2ludCBtdm1lMzEwMF90aW1lcl9zZXRfcmVzb2x1dGlvbih1bnNpZ25l ZCBsb25nIHRpY2tzKQoreworCXUzMiBwcmVzY2FsZXJfYWRqdXN0OworCWludCBpOworCXVu c2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKiAKKwkgKiBQcmVzY2FsZXJfYWRqdXN0ID0gMjU2 IC0gQ0xLSU4vQ0xLT1VUCisJICogQ0xLSU4gPSAyNSBNSHoKKwkgKi8KKworCWlmICgodGlj a3MgPCBNSU5fVElDS1NfUEVSX01JQ1JPU0VDT05EKSB8fAorCSAgICAodGlja3MgPiBNQVhf VElDS1NfUEVSX01JQ1JPU0VDT05EKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljbGtfb3V0 ID0gdGlja3M7CisJcHJlc2NhbGVyX2FkanVzdCA9IDI1NiAtICgyNSAvIGNsa19vdXQpOwor CisJc3Bpbl9sb2NrX2lycXNhdmUoJm12bWUzMTAwX3RpbWVyX2xvY2ssIGZsYWdzKTsKKwlm b3IgKGkgPSAwOyBpIDw9IDM7IGkrKykgeworCQlpZiAobXZtZTMxMDBfdGltZXJbaV0uc3Rh cnRlZCA9PSAxKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtdm1lMzEwMF90aW1l cl9sb2NrLCBmbGFncyk7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisJfQorCisJd3JpdGVs KHByZXNjYWxlcl9hZGp1c3QsIG12bWUzMTAwX3RpbWVyX2Jhc2UgKworCSAgICAgICBNVk1F MzEwMF9USUNLX1RJTUVSX1BSRVNDQUxFUl9SRUdfT0ZGU0VUKTsKKwlzcGluX3VubG9ja19p cnFyZXN0b3JlKCZtdm1lMzEwMF90aW1lcl9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsK K30KKworLyogCisgKiBHZXQgdGhlIHRpbWVyIHZhbHVlLCBpbiB0aWNrcworICovCitFWFBP UlRfU1lNQk9MKG12bWUzMTAwX3RpbWVyX2dldF90aWNrcyk7Cit1bnNpZ25lZCBsb25nIG12 bWUzMTAwX3RpbWVyX2dldF90aWNrcyhpbnQgdGltZXJfbnVtYmVyKQoreworCWlmICgodGlt ZXJfbnVtYmVyIDwgMCkgfHwgKHRpbWVyX251bWJlciA+IDMpKQorCQlyZXR1cm4gLUVJTlZB TDsKKworCXJldHVybiBzd2FiMzIocmVhZGwobXZtZTMxMDBfdGltZXJfYmFzZSArCisJCQkg ICAgKCh0aW1lcl9udW1iZXIgKworCQkJICAgICAgMSkgKiBNVk1FMzEwMF9USUNLX1RJTUVS X0NPTlRST0xfUkVHX09GRlNFVCkgKworCQkJICAgIChNVk1FMzEwMF9USUNLX1RJTUVSX0NP VU5URVJfUkVHX09GRlNFVCAtCisJCQkgICAgIE1WTUUzMTAwX1RJQ0tfVElNRVJfQ09OVFJP TF9SRUdfT0ZGU0VUKSkpOworfQorCisjaWZkZWYgQ09ORklHX1BST0NfRlMKKworc3RhdGlj IGludAorbXZtZTMxMDBfdGltZXJfcHJvY19yZWFkKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0 LCBvZmZfdCBvZmYsIGludCBsZW4sIGludCAqZW9mLAorCQkJIHZvaWQgKmRhdGEpCit7CisJ aW50IGk7CisKKwlsZW4gPSAwOworCWxlbiArPQorCSAgICBzcHJpbnRmKGJ1ZiArIGxlbiwK KwkJICAgICJcblRpbWVyICAgICBBY3RpdmUgIFBlcmlvZGljICBQZXJpb2QodGlja3MpICAg UGVyaW9kKG1pY3Jvc2Vjb25kcylcbiIpOworCWxlbiArPQorCSAgICBzcHJpbnRmKGJ1ZiAr IGxlbiwKKwkJICAgICJfX19fXyAgICAgX19fX19fICBfX19fX19fXyAgX19fX19fX19fX19f XyAgIF9fX19fX19fX19fX19fX19fX19fXG4iKTsKKwlmb3IgKGkgPSAwOyBpIDw9IDM7IGkr KykgeworCQlsZW4gKz0KKwkJICAgIHNwcmludGYoYnVmICsgbGVuLAorCQkJICAgICIjJWQg ICAgICAgICVjICAgICAgICVjICAgICAgICAgMHglMDhseCAgICAgICVsZFxuIiwKKwkJCSAg ICBpICsgMSwKKwkJCSAgICAoKG12bWUzMTAwX3RpbWVyW2ldLnN0YXJ0ZWQgPT0gMSkgPyAn eScgOiAnbicpLAorCQkJICAgICgobXZtZTMxMDBfdGltZXJbaV0ucGVyaW9kaWMgPT0gMSkg PyAneScgOiAnbicpLAorCQkJICAgICgobXZtZTMxMDBfdGltZXJbaV0ucGVyaW9kaWMgPT0K KwkJCSAgICAgIDEpID8gbXZtZTMxMDBfdGltZXJbaV0udGlja3MgOiAwKSwKKwkJCSAgICAo KG12bWUzMTAwX3RpbWVyW2ldLnBlcmlvZGljID09CisJCQkgICAgICAxKSA/IG12bWUzMTAw X3RpbWVyW2ldLnBlcmlvZCA6IDApKTsKKwl9CisJcmV0dXJuIGxlbjsKK30KKworI2VuZGlm CQkJCS8qIENPTkZJR19QUk9DX0ZTICovCisKK3N0YXRpYyBfX2luaXQgaW50IG12bWUzMTAw X3RpbWVyX2luaXQodm9pZCkKK3sKKwlpbnQgcmVzID0gMDsKKwlpbnQgaTsKKworCXByaW50 ayhLRVJOX0lORk8gIm12bWUzMTAwLXRpbWVyOiBNVk1FMzEwMCBUaWNrIFRpbWVyc1xuIik7 CisKKwltdm1lMzEwMF90aW1lcl9iYXNlID0gaW9yZW1hcChNVk1FMzEwMF9USUNLX1RJTUVS X0JBU0UsCisJCQkJICAgICBNVk1FMzEwMF9USUNLX1RJTUVSX0JMT0NLX1NJWkUpOworCWlm IChtdm1lMzEwMF90aW1lcl9iYXNlID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJ Zm9yIChpID0gMDsgaSA8PSAzOyBpKyspIHsKKwkJbXZtZTMxMDBfdGltZXJbaV0uZnVuYyA9 IE5VTEw7CisJCW12bWUzMTAwX3RpbWVyW2ldLmZ1bmNfZGF0YSA9IE5VTEw7CisJCW12bWUz MTAwX3RpbWVyW2ldLnN0YXJ0ZWQgPSAwOworCQltdm1lMzEwMF90aW1lcltpXS5wZXJpb2Rp YyA9IDA7CisJCW12bWUzMTAwX3RpbWVyW2ldLnBlcmlvZCA9IDA7CisJCW12bWUzMTAwX3Rp bWVyW2ldLnRpY2tzID0gMDsKKwl9CisJcmVzID0gcmVxdWVzdF9pcnEobXZtZTMxMDBfdGlt ZXJfaXJxLCBtdm1lMzEwMF90aW1lcl9pbnRfaGFuZGxlciwKKwkJCSAgSVJRRl9TSEFSRUQs CisJCQkgICJNVk1FMzEwMCBUaWNrIFRpbWVycyIsICZtdm1lMzEwMF90aW1lclswXSk7CisJ aWYgKHJlcyA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJNVk1FMzEwMCBUaW1lcjogQ2Fu J3QgYWxsb2NhdGUgSVJRICVkLlxuIiwKKwkJICAgICAgIG12bWUzMTAwX3RpbWVyX2lycSk7 CisJCXJldHVybiByZXM7CisJfQorI2lmZGVmIENPTkZJR19QUk9DX0ZTCisJY3JlYXRlX3By b2NfcmVhZF9lbnRyeSgibXZtZTMxMDBfdGltZXJzIiwgMCwgTlVMTCwKKwkJCSAgICAgICBt dm1lMzEwMF90aW1lcl9wcm9jX3JlYWQsIE5VTEwpOworI2VuZGlmCisJcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyBfX2V4aXQgdm9pZCBtdm1lMzEwMF90aW1lcl9leGl0KHZvaWQpCit7CisJ aW50IHRpbWVyX251bWJlcjsKKworCWZvciAodGltZXJfbnVtYmVyID0gMDsgdGltZXJfbnVt YmVyIDw9IDM7IHRpbWVyX251bWJlcisrKSB7CisJCW12bWUzMTAwX3RpbWVyX3N0b3AodGlt ZXJfbnVtYmVyKTsKKwl9CisJZnJlZV9pcnEobXZtZTMxMDBfdGltZXJfaXJxLCAmbXZtZTMx MDBfdGltZXJbMF0pOworCWlvdW5tYXAobXZtZTMxMDBfdGltZXJfYmFzZSk7Cit9CisKK01P RFVMRV9MSUNFTlNFKCJHUEwiKTsKKworTU9EVUxFX0FVVEhPUigiQWppdCBQcmVtIDxBaml0 LlByZW1AbW90b3JvbGEuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJNVk1FMzEwMCBU aWNrIFRpbWVyIGRyaXZlciIpOworCittb2R1bGVfaW5pdChtdm1lMzEwMF90aW1lcl9pbml0 KTsKK21vZHVsZV9leGl0KG12bWUzMTAwX3RpbWVyX2V4aXQpOwpkaWZmIC11IC0tbmV3LWZp bGUgLS1yZWN1cnNpdmUgbGludXgtMi42LjI5LjYub3JpZy9hcmNoL3Bvd2VycGMvcGxhdGZv cm1zLzg1eHgvbXZtZTQxMDAuYyBsaW51eC0yLjYuMjkuNi5tb2QvYXJjaC9wb3dlcnBjL3Bs YXRmb3Jtcy84NXh4L212bWU0MTAwLmMKLS0tIGxpbnV4LTIuNi4yOS42Lm9yaWcvYXJjaC9w b3dlcnBjL3BsYXRmb3Jtcy84NXh4L212bWU0MTAwLmMJMTk2OS0xMi0zMSAxNzowMDowMC4w MDAwMDAwMDAgLTA3MDAKKysrIGxpbnV4LTIuNi4yOS42Lm1vZC9hcmNoL3Bvd2VycGMvcGxh dGZvcm1zLzg1eHgvbXZtZTQxMDAuYwkyMDA5LTA5LTAyIDEwOjMwOjU3LjAwMDAwMDAwMCAt MDcwMApAQCAtMCwwICsxLDE1NDMgQEAKKy8qCisgKiBNVk1FNDEwMCBzZXR1cCBhbmQgZWFy bHkgYm9vdCBjb2RlIHBsdXMgb3RoZXIgcmFuZG9tIGJpdHMuCisgKgorICogQXV0aG9yOiBB aml0IFByZW0KKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBFbWVyc29uIE5ldHdvcmsgUG93ZXIg RW1iZWRkZWQgQ29tcHV0aW5nLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0Cisg KiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNl IGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVp dGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9u KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+ CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgor I2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2lu Y2x1ZGUgPGxpbnV4L2tkZXZfdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KKyNp bmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+Cisj aW5jbHVkZSA8bGludXgvaW5pdHJkLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cisj aW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcm9vdF9kZXYu aD4KKyNpbmNsdWRlIDxsaW51eC9ydGMuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+ CisjaW5jbHVkZSA8bGludXgvZnNsX2RldmljZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9w bGF0Zm9ybS5oPgorCisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9w Z3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vYXRvbWlj Lmg+CisjaW5jbHVkZSA8YXNtL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNs dWRlIDxhc20vbWFjaGRlcC5oPgorI2luY2x1ZGUgPGFzbS9wY2ktYnJpZGdlLmg+CisjaW5j bHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPG1tL21tdV9kZWNsLmg+CisjaW5jbHVkZSA8 YXNtL3Byb20uaD4KKyNpbmNsdWRlIDxhc20va21hcF90eXBlcy5oPgorI2luY2x1ZGUgPGFz bS9lZGFjLmg+CisjaW5jbHVkZSA8YXNtL3VkYmcuaD4KKyNpbmNsdWRlIDxhc20vbXBpYy5o PgorCisjaW5jbHVkZSA8c3lzZGV2L2ZzbF9zb2MuaD4KKyNpbmNsdWRlIDxzeXNkZXYvZnNs X3BjaS5oPgorCisjaW5jbHVkZSAibXZtZTQxMDAuaCIKKworc3RhdGljIHVuc2lnbmVkIGxv bmcgaGJfYmFkZHI7CitzdGF0aWMgaW50IHNlcmlhbF9pcnE7CisKK3N0YXRpYyB2b2lkIF9f aW9tZW0gKnN5c3RlbV9jb250cm9sX3JlZ19hZGRyOworc3RhdGljIHZvaWQgX19pb21lbSAq bDJfZXJyX3JlZ3M7CisKKyNkZWZpbmUgTDJfRVJSX1JFR1NfT0ZGU0VUICAgICAgMHgyMEUy MAorI2RlZmluZSBMMl9FUlJfUkVHU19TSVpFICAgICAgICAweDNDCisKKyNkZWZpbmUgTDJf Q0FQVF9EQVRBX0hJICAgICAgICAgMHgyMEUyMAorI2RlZmluZSBMMl9DQVBUX0RBVEFfTE8g ICAgICAgICAweDIwRTI0CisjZGVmaW5lIEwyX0NBUFRfRUNDICAgICAgICAgICAgIDB4MjBF MjgKKyNkZWZpbmUgTDJfRVJSX0RFVCAgICAgICAgICAgICAgMHgyMEU0MAorI2RlZmluZSBM Ml9FUlJfRElTICAgICAgICAgICAgICAweDIwRTQ0CisjZGVmaW5lIEwyX0VSUl9JTlRfRU4g ICAgICAgICAgIDB4MjBFNDgKKyNkZWZpbmUgTDJfRVJSX0FUVFIgICAgICAgICAgICAgMHgy MEU0QworI2RlZmluZSBMMl9FUlJfQUREUl9ISSAgICAgICAgICAweDIwRTUwCisjZGVmaW5l IEwyX0VSUl9BRERSX0xPICAgICAgICAgIDB4MjBFNTQKKyNkZWZpbmUgTDJfRVJSX0NUTCAg ICAgICAgICAgICAgMHgyMEU1OAorCisjaWZkZWYgQ09ORklHX01WTUU0MTAwX0VOQUJMRV9M Ml9FUlJPUlMKK3N0YXRpYyBpbnQgbDJfaXJxOworc3RhdGljIGlycXJldHVybl90IG12bWU0 MTAwX2wyY2FjaGVfZXJyX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKKyNlbmRp ZgorCisjaWZkZWYgQ09ORklHX01WTUU0MTAwX0VOQUJMRV9ERFJfRVJST1JTCisKKyNkZWZp bmUgRERSX0VSUl9SRUdTX09GRlNFVCAgICAgMHgyRTAwCisjZGVmaW5lIEREUl9FUlJfUkVH U19TSVpFICAgICAgIDB4NUMKKworI2RlZmluZSBERFJfQ0FQVF9EQVRBX0hJICAgICAgICAw eDJFMjAKKyNkZWZpbmUgRERSX0NBUFRfREFUQV9MTyAgICAgICAgMHgyRTI0CisjZGVmaW5l IEREUl9DQVBUX0VDQyAgICAgICAgICAgIDB4MkUyOAorI2RlZmluZSBERFJfRVJSX0RFVCAg ICAgICAgICAgICAweDJFNDAKKyNkZWZpbmUgRERSX0VSUl9ESVMgICAgICAgICAgICAgMHgy RTQ0CisjZGVmaW5lIEREUl9FUlJfSU5UX0VOICAgICAgICAgIDB4MkU0OAorI2RlZmluZSBE RFJfQ0FQVF9BVFRSICAgICAgICAgICAweDJFNEMKKyNkZWZpbmUgRERSX0NBUFRfQUREUiAg ICAgICAgICAgMHgyRTUwCisjZGVmaW5lIEREUl9DQVBUX0VYVF9BRERSICAgICAgIDB4MkU1 NAorI2RlZmluZSBERFJfRVJSX1NCRSAgICAgICAgICAgICAweDJFNTgKKworI2RlZmluZSBE RFJfU0JFICAgICAgICAgICAgICAgICAweDQJLyogc2luZ2xlLWJpdCBFQ0MgZXJyb3IgKi8K KyNkZWZpbmUgRERSX01CRSAgICAgICAgICAgICAgICAgMHg4CS8qIG11bHRpLWJpdCBFQ0Mg ZXJyb3IgKi8KKyNkZWZpbmUgRERSX01NRSAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAkv KiBtdWx0aXBsZSBFQ0MgZXJyb3IgKi8KKworc3RhdGljIGludCBkZHJfZXJyb3JzOworc3Rh dGljIHZvaWQgX19pb21lbSAqZGRyX2Vycl9yZWdzOworc3RhdGljIGludCBkZHJfaXJxOwor c3RhdGljIGlycXJldHVybl90IG12bWU0MTAwX2Rkcl9lcnJfaGFuZGxlcihpbnQgaXJxLCB2 b2lkICpkZXZfaWQpOworCisjZW5kaWYKKworI2RlZmluZSBQQ0kwX1JFR1NfT0ZGU0VUICAg ICAgICAweDgwMDAKKyNkZWZpbmUgUENJMl9SRUdTX09GRlNFVCAgICAgICAgMHhBMDAwCisj ZGVmaW5lIFBDSV9FUlJfUkVHU19PRkZTRVQgICAgIDB4RTAwCisjZGVmaW5lIFBDSV9FUlJf UkVHU19TSVpFICAgICAgIDB4MzgKKworI2RlZmluZSBQQ0lfRVJSX0RFVCAgICAgICAgICAg ICAweEUwMAorI2RlZmluZSBQQ0lfRVJSX0lOVF9FTiAgICAgICAgICAweEUwOAorI2RlZmlu ZSBQQ0lfRVJSX0NBUF9ESVMgICAgICAgICAweEUxMAorI2RlZmluZSBQQ0lfRVJSX0NBUF9T VEFUICAgICAgICAweEUyMAorI2RlZmluZSBQQ0lfRVJSX0NBUF9SMCAgICAgICAgICAweEUy OAorI2RlZmluZSBQQ0lfRVJSX0NBUF9SMSAgICAgICAgICAweEUyQworI2RlZmluZSBQQ0lf RVJSX0NBUF9SMiAgICAgICAgICAweEUzMAorI2RlZmluZSBQQ0lfRVJSX0NBUF9SMyAgICAg ICAgICAweEUzNAorCitzdGF0aWMgaW50IHBjaTBfaXJxOworc3RhdGljIGludCBwY2kyX2ly cTsKKworI2lmZGVmIENPTkZJR19NVk1FNDEwMF9FTkFCTEVfUENJX0VSUk9SUworc3RhdGlj IGludCBwY2kwX2Vycm9yczsKK3N0YXRpYyB2b2lkIF9faW9tZW0gKnBjaTBfZXJyX3JlZ3M7 CitzdGF0aWMgaXJxcmV0dXJuX3QgbXZtZTQxMDBfcGNpMF9lcnJfaGFuZGxlcihpbnQgaXJx LCB2b2lkICpkZXZfaWQpOworCitzdGF0aWMgaW50IHBjaTJfZXJyb3JzOworc3RhdGljIHZv aWQgX19pb21lbSAqcGNpMl9lcnJfcmVnczsKK3N0YXRpYyBpcnFyZXR1cm5fdCBtdm1lNDEw MF9wY2kyX2Vycl9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCk7CisjZW5kaWYKKwor I2lmZGVmIENPTkZJR19WTUVfQlJJREdFX0JPT1RNRU0KK3ZvaWQgKnZtZV9kcml2ZXJfYm9v dG1lbTsKK3Vuc2lnbmVkIGludCB2bWVfYm9vdG1lbV9zaXplOworI2VuZGlmCisKKyNpZmRl ZiBDT05GSUdfTVZNRTQxMDBfVElDS19USU1FUlMKK2ludCBtdm1lNDEwMF90aW1lcl9pcnE7 CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19TRU5TT1JTX0xNOTAKK2ludCBtYXhpbTY2NDlf aXJxOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTVZNRTQxMDBfRU5BQkxFX0REUl9FUlJP UlMKKworc3RhdGljIHZvaWQgbXZtZTQxMDBfZGV0ZXJtaW5lX2JpdF9sb2NhdGlvbih1MzIg ZGF0YV9oaSwgdTMyIGRhdGFfbG8sCisJCQkJCSAgICB1MzIgc3RvcmVkX2VjYykKK3sKKwl1 MzIgc3luZHJvbWVfYml0czsKKwl1MzIgc3luZHJvbWVbOF07CisJdTMyIGNhbGN1bGF0ZWRf ZWNjID0gMDsKKwlpbnQgaTsKKwl1MzIgZGF0YTBbMzJdLCBkYXRhMVszMl07CisJdW5zaWdu ZWQgY2hhciBiaXRwb3NbOF07CisKKwkvKiBJbml0aWFsIDMyLWJpdCBkYXRhICovCisJZm9y IChpID0gMDsgaSA8IDMyOyBpKyspIHsKKwkJZGF0YTBbaV0gPSAoZGF0YV9oaSA+PiAoMzEg LSBpKSkgJiAweDE7CisJCWRhdGExW2ldID0gKGRhdGFfbG8gPj4gKDMxIC0gaSkpICYgMHgx OworCX0KKworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCXN5bmRyb21lW2ldID0gMDsK KwkvKiBDYWxjdWxhdGUgOC1iaXQgRUNDIGZvciB0aGUgZmlyc3QgMzItYml0IGRhdGEgKi8K Kwlmb3IgKGkgPSAwOyBpIDwgMzI7ICsraSkgeworCQkvKiBDYWxjdWxhdGUgc3luZHJvbWVb MF0gKi8KKwkJaWYgKChpIDw9IDE1KSB8fCAoaSA9PSAxOSkgfHwgKGkgPT0gMjMpIHx8IChp ID09IDI3KSB8fAorCQkgICAgKGkgPT0gMzEpKQorCQkJc3luZHJvbWVbMF0gPSBzeW5kcm9t ZVswXSBeIChkYXRhMFtpXSAmIDB4MSk7CisKKwkJLyogQ2FsY3VsYXRlIHN5bmRyb21lWzFd ICovCisJCWlmICgoaSA9PSAwKSB8fCAoaSA9PSA0KSB8fCAoaSA9PSA4KSB8fCAoaSA9PSAx MikgfHwgKGkgPj0gMTYpKQorCQkJc3luZHJvbWVbMV0gPSBzeW5kcm9tZVsxXSBeIChkYXRh MFtpXSAmIDB4MSk7CisKKwkJLyogQ2FsY3VsYXRlIHN5bmRyb21lWzJdICovCisJCWlmICgo aSA9PSAxKSB8fCAoaSA9PSA1KSB8fCAoaSA9PSA5KSB8fCAoaSA9PSAxMykgfHwKKwkJICAg IChpID09IDE2KSB8fCAoaSA9PSAyMCkgfHwgKGkgPT0gMjQpIHx8IChpID09IDI4KSkKKwkJ CXN5bmRyb21lWzJdID0gc3luZHJvbWVbMl0gXiAoZGF0YTBbaV0gJiAweDEpOworCisJCS8q IENhbGN1bGF0ZSBzeW5kcm9tZVszXSAqLworCQlpZiAoKGkgPT0gMikgfHwgKGkgPT0gNikg fHwgKGkgPT0gMTApIHx8IChpID09IDE0KSB8fAorCQkgICAgKGkgPT0gMTcpIHx8IChpID09 IDIxKSB8fCAoaSA9PSAyNSkgfHwgKGkgPT0gMjkpKQorCQkJc3luZHJvbWVbM10gPSBzeW5k cm9tZVszXSBeIChkYXRhMFtpXSAmIDB4MSk7CisKKwkJLyogQ2FsY3VsYXRlIHN5bmRyb21l WzRdICovCisJCWlmICgoaSA9PSAzKSB8fCAoaSA9PSA3KSB8fCAoaSA9PSAxMSkgfHwgKGkg PT0gMTUpIHx8CisJCSAgICAoaSA9PSAxOCkgfHwgKGkgPT0gMTkpIHx8IChpID09IDIyKSB8 fCAoaSA9PSAyMykgfHwKKwkJICAgIChpID09IDI2KSB8fCAoaSA9PSAyNykgfHwgKGkgPT0g MzApIHx8IChpID09IDMxKSkKKwkJCXN5bmRyb21lWzRdID0gc3luZHJvbWVbNF0gXiAoZGF0 YTBbaV0gJiAweDEpOworCisJCS8qIENhbGN1bGF0ZSBzeW5kcm9tZVs1XSAqLworCQlpZiAo KChpID49IDQpICYmIChpIDw9IDcpKSB8fCAoKGkgPj0gMTIpICYmIChpIDw9IDE1KSkgfHwK KwkJICAgICgoaSA+PSAyMCkgJiYgKGkgPD0gMjMpKSB8fCAoKGkgPj0gMjgpICYmIChpIDw9 IDMxKSkpCisJCQlzeW5kcm9tZVs1XSA9IHN5bmRyb21lWzVdIF4gKGRhdGEwW2ldICYgMHgx KTsKKworCQkvKiBDYWxjdWxhdGUgc3luZHJvbWVbNl0gKi8KKwkJaWYgKCgoaSA+PSA4KSAm JiAoaSA8PSAxNSkpIHx8ICgoaSA+PSAyNCkgJiYgKGkgPD0gMzEpKSkKKwkJCXN5bmRyb21l WzZdID0gc3luZHJvbWVbNl0gXiAoZGF0YTBbaV0gJiAweDEpOworCisJCS8qIENhbGN1bGF0 ZSBzeW5kcm9tZVs3XSAqLworCQlpZiAoKGkgPD0gMykgfHwgKChpID49IDEyKSAmJiAoaSA8 PSAxOCkpIHx8CisJCSAgICAoaSA9PSAyMykgfHwgKChpID49IDI3KSAmJiAoaSA8PSAzMCkp KQorCQkJc3luZHJvbWVbN10gPSBzeW5kcm9tZVs3XSBeIChkYXRhMFtpXSAmIDB4MSk7CisJ fQorCisJLyogQ2FsY3VsYXRlIDgtYml0IEVDQyBmb3IgdGhlIHNlY29uZCAzMi1iaXQgZGF0 YSAqLworCWZvciAoaSA9IDA7IGkgPCAzMjsgKytpKSB7CisJCS8qIENhbGN1bGF0ZSBzeW5k cm9tZVswXSAqLworCQlpZiAoKGkgPT0gMikgfHwgKGkgPT0gNikgfHwgKGkgPT0gMTApIHx8 IChpID09IDE0KSB8fAorCQkgICAgKGkgPT0gMTkpIHx8IChpID09IDIzKSB8fCAoaSA9PSAy NykgfHwgKGkgPT0gMjkpKQorCQkJc3luZHJvbWVbMF0gPSBzeW5kcm9tZVswXSBeIChkYXRh MVtpXSAmIDB4MSk7CisKKwkJLyogQ2FsY3VsYXRlIHN5bmRyb21lWzFdICovCisJCWlmICgo aSA9PSAzKSB8fCAoaSA9PSA3KSB8fCAoaSA9PSAxMSkgfHwgKGkgPT0gMTUpIHx8CisJCSAg ICAoaSA9PSAxNikgfHwgKGkgPT0gMjApIHx8IChpID09IDI0KSB8fCAoaSA9PSAzMCkpCisJ CQlzeW5kcm9tZVsxXSA9IHN5bmRyb21lWzFdIF4gKGRhdGExW2ldICYgMHgxKTsKKworCQkv KiBDYWxjdWxhdGUgc3luZHJvbWVbMl0gKi8KKwkJaWYgKChpIDw9IDE1KSB8fCAoaSA9PSAx NykgfHwgKGkgPT0gMjEpIHx8IChpID09IDI1KSB8CisJCSAgICAoaSA9PSAzMSkpCisJCQlz eW5kcm9tZVsyXSA9IHN5bmRyb21lWzJdIF4gKGRhdGExW2ldICYgMHgxKTsKKworCQkvKiBD YWxjdWxhdGUgc3luZHJvbWVbM10gKi8KKwkJaWYgKChpID09IDApIHx8IChpID09IDQpIHx8 IChpID09IDgpIHx8IChpID09IDEyKSB8fAorCQkgICAgKGkgPT0gMTgpIHx8IChpID09IDIy KSB8fCAoaSA9PSAyNikgfHwgKGkgPj0gMjgpKQorCQkJc3luZHJvbWVbM10gPSBzeW5kcm9t ZVszXSBeIChkYXRhMVtpXSAmIDB4MSk7CisKKwkJLyogQ2FsY3VsYXRlIHN5bmRyb21lWzRd ICovCisJCWlmICgoKGkgPj0gMSkgJiYgKGkgPD0gMykpIHx8ICgoaSA+PSA1KSAmJiAoaSA8 PSA3KSkgfHwKKwkJICAgICgoaSA+PSA5KSAmJiAoaSA8PSAxMSkpIHx8ICgoaSA+PSAxMykg JiYgKGkgPD0gMTUpKSB8fAorCQkgICAgKChpID49IDI4KSAmJiAoaSA8PSAzMSkpKQorCQkJ c3luZHJvbWVbNF0gPSBzeW5kcm9tZVs0XSBeIChkYXRhMVtpXSAmIDB4MSk7CisKKwkJLyog Q2FsY3VsYXRlIHN5bmRyb21lWzVdICovCisJCWlmICgoKGkgPj0gNCkgJiYgKGkgPD0gNykp IHx8ICgoaSA+PSAxMikgJiYgKGkgPD0gMjMpKSkKKwkJCXN5bmRyb21lWzVdID0gc3luZHJv bWVbNV0gXiAoZGF0YTFbaV0gJiAweDEpOworCisJCS8qIENhbGN1bGF0ZSBzeW5kcm9tZVs2 XSAqLworCQlpZiAoKChpID49IDgpICYmIChpIDw9IDE5KSkgfHwgKChpID49IDI0KSAmJiAo aSA8PSAzMSkpKQorCQkJc3luZHJvbWVbNl0gPSBzeW5kcm9tZVs2XSBeIChkYXRhMVtpXSAm IDB4MSk7CisKKwkJLyogQ2FsY3VsYXRlIHN5bmRyb21lWzddICovCisJCWlmICgoaSA9PSAw KSB8fCAoaSA9PSAxKSB8fCAoaSA9PSA2KSB8fCAoaSA9PSA3KSB8fAorCQkgICAgKChpID49 IDEwKSAmJiAoaSA8PSAxMykpIHx8ICgoaSA+PSAyMCkgJiYgKGkgPD0gMjcpKSB8fAorCQkg ICAgKChpID49IDI5KSAmJiAoaSA8PSAzMSkpKQorCQkJc3luZHJvbWVbN10gPSBzeW5kcm9t ZVs3XSBeIChkYXRhMVtpXSAmIDB4MSk7CisJfQorCisJY2FsY3VsYXRlZF9lY2MgPSAoKHN5 bmRyb21lWzddIDw8IDApIHwgKHN5bmRyb21lWzZdIDw8IDEpIHwKKwkJCSAgKHN5bmRyb21l WzVdIDw8IDIpIHwgKHN5bmRyb21lWzRdIDw8IDMpIHwKKwkJCSAgKHN5bmRyb21lWzNdIDw8 IDQpIHwgKHN5bmRyb21lWzJdIDw8IDUpIHwKKwkJCSAgKHN5bmRyb21lWzFdIDw8IDYpIHwg KHN5bmRyb21lWzBdIDw8IDcpKTsKKworCXN5bmRyb21lX2JpdHMgPSBjYWxjdWxhdGVkX2Vj YyBeIHN0b3JlZF9lY2M7CisKKwlzd2l0Y2ggKHN5bmRyb21lX2JpdHMpIHsKKwljYXNlIDB4 QzE6CisJCXNwcmludGYoYml0cG9zLCAiJXMiLCAiMCIpOworCQlicmVhazsKKwljYXNlIDB4 QTE6CisJCXNwcmludGYoYml0cG9zLCAiJXMiLCAiMSIpOworCQlicmVhazsKKwljYXNlIDB4 OTE6CisJCXNwcmludGYoYml0cG9zLCAiJXMiLCAiMiIpOworCQlicmVhazsKKwljYXNlIDB4 ODk6CisJCXNwcmludGYoYml0cG9zLCAiJXMiLCAiMyIpOworCQlicmVhazsKKwljYXNlIDB4 QzQ6CisJCXNwcmludGYoYml0cG9zLCAiJXMiLCAiNCIpOworCQlicmVhazsKKwljYXNlIDB4 QTQ6CisJCXNwcmludGYoYml0cG9zLCAiJXMiLCAiNSIpOworCQlicmVhazsKKwljYXNlIDB4 OTQ6CisJCXNwcmludGYoYml0cG9zLCAiJXMiLCAiNiIpOworCQlicmVhazsKKwljYXNlIDB4 OEM6CisJCXNwcmludGYoYml0cG9zLCAiJXMiLCAiNyIpOworCQlicmVhazsKKwljYXNlIDB4 QzI6CisJCXNwcmludGYoYml0cG9zLCAiJXMiLCAiOCIpOworCQlicmVhazsKKwljYXNlIDB4 QTI6CisJCXNwcmludGYoYml0cG9zLCAiJXMiLCAiOSIpOworCQlicmVhazsKKwljYXNlIDB4 OTI6CisJCXNwcmludGYoYml0cG9zLCAiJXMiLCAiMTAiKTsKKwkJYnJlYWs7CisJY2FzZSAw eDhBOgorCQlzcHJpbnRmKGJpdHBvcywgIiVzIiwgIjExIik7CisJCWJyZWFrOworCWNhc2Ug MHhDNzoKKwkJc3ByaW50ZihiaXRwb3MsICIlcyIsICIxMiIpOworCQlicmVhazsKKwljYXNl IDB4QTc6CisJCXNwcmludGYoYml0cG9zLCAiJXMiLCAiMTMiKTsKKwkJYnJlYWs7CisJY2Fz ZSAweDk3OgorCQlzcHJpbnRmKGJpdHBvcywgIiVzIiwgIjE0Iik7CisJCWJyZWFrOworCWNh c2UgMHg4RjoKKwkJc3ByaW50ZihiaXRwb3MsICIlcyIsICIxNSIpOworCQlicmVhazsKKwlj YXNlIDB4NjE6CisJCXNwcmludGYoYml0cG9zLCAiJXMiLCAiMTYiKTsKKwkJYnJlYWs7CisJ Y2FzZSAweDUxOgorCQlzcHJpbnRmKGJpdHBvcywgIiVzIiwgIjE3Iik7CisJCWJyZWFrOwor CWNhc2UgMHg0OToKKwkJc3ByaW50ZihiaXRwb3MsICIlcyIsICIxOCIpOworCQlicmVhazsK KwljYXNlIDB4Qzg6CisJCXNwcmludGYoYml0cG9zLCAiJXMiLCAiMTkiKTsKKwkJYnJlYWs7 CisJY2FzZSAweDY0OgorCQlzcHJpbnRmKGJpdHBvcywgIiVzIiwgIjIwIik7CisJCWJyZWFr OworCWNhc2UgMHg1NDoKKwkJc3ByaW50ZihiaXRwb3MsICIlcyIsICIyMSIpOworCQlicmVh azsKKwljYXNlIDB4NEM6CisJCXNwcmludGYoYml0cG9zLCAiJXMiLCAiMjIiKTsKKwkJYnJl YWs7CisJY2FzZSAweENEOgorCQlzcHJpbnRmKGJpdHBvcywgIiVzIiwgIjIzIik7CisJCWJy ZWFrOworCWNhc2UgMHg2MjoKKwkJc3ByaW50ZihiaXRwb3MsICIlcyIsICIyNCIpOworCQli cmVhazsKKwljYXNlIDB4NTI6CisJCXNwcmludGYoYml0cG9zLCAiJXMiLCAiMjUiKTsKKwkJ YnJlYWs7CisJY2FzZSAweDRBOgorCQlzcHJpbnRmKGJpdHBvcywgIiVzIiwgIjI2Iik7CisJ CWJyZWFrOworCWNhc2UgMHhDQjoKKwkJc3ByaW50ZihiaXRwb3MsICIlcyIsICIyNyIpOwor CQlicmVhazsKKwljYXNlIDB4Njc6CisJCXNwcmludGYoYml0cG9zLCAiJXMiLCAiMjgiKTsK KwkJYnJlYWs7CisJY2FzZSAweDU3OgorCQlzcHJpbnRmKGJpdHBvcywgIiVzIiwgIjI5Iik7 CisJCWJyZWFrOworCWNhc2UgMHg0RjoKKwkJc3ByaW50ZihiaXRwb3MsICIlcyIsICIzMCIp OworCQlicmVhazsKKwljYXNlIDB4Q0U6CisJCXNwcmludGYoYml0cG9zLCAiJXMiLCAiMzEi KTsKKwkJYnJlYWs7CisJY2FzZSAweDMxOgorCQlzcHJpbnRmKGJpdHBvcywgIiVzIiwgIjMy Iik7CisJCWJyZWFrOworCWNhc2UgMHgyOToKKwkJc3ByaW50ZihiaXRwb3MsICIlcyIsICIz MyIpOworCQlicmVhazsKKwljYXNlIDB4QTg6CisJCXNwcmludGYoYml0cG9zLCAiJXMiLCAi MzQiKTsKKwkJYnJlYWs7CisJY2FzZSAweDY4OgorCQlzcHJpbnRmKGJpdHBvcywgIiVzIiwg IjM1Iik7CisJCWJyZWFrOworCWNhc2UgMHgzNDoKKwkJc3ByaW50ZihiaXRwb3MsICIlcyIs ICIzNiIpOworCQlicmVhazsKKwljYXNlIDB4MkM6CisJCXNwcmludGYoYml0cG9zLCAiJXMi LCAiMzciKTsKKwkJYnJlYWs7CisJY2FzZSAweEFEOgorCQlzcHJpbnRmKGJpdHBvcywgIiVz IiwgIjM4Iik7CisJCWJyZWFrOworCWNhc2UgMHg2RDoKKwkJc3ByaW50ZihiaXRwb3MsICIl cyIsICIzOSIpOworCQlicmVhazsKKwljYXNlIDB4MzI6CisJCXNwcmludGYoYml0cG9zLCAi JXMiLCAiNDAiKTsKKwkJYnJlYWs7CisJY2FzZSAweDJBOgorCQlzcHJpbnRmKGJpdHBvcywg IiVzIiwgIjQxIik7CisJCWJyZWFrOworCWNhc2UgMHhBQjoKKwkJc3ByaW50ZihiaXRwb3Ms ICIlcyIsICI0MiIpOworCQlicmVhazsKKwljYXNlIDB4NkI6CisJCXNwcmludGYoYml0cG9z LCAiJXMiLCAiNDMiKTsKKwkJYnJlYWs7CisJY2FzZSAweDM3OgorCQlzcHJpbnRmKGJpdHBv cywgIiVzIiwgIjQ0Iik7CisJCWJyZWFrOworCWNhc2UgMHgyRjoKKwkJc3ByaW50ZihiaXRw b3MsICIlcyIsICI0NSIpOworCQlicmVhazsKKwljYXNlIDB4QUU6CisJCXNwcmludGYoYml0 cG9zLCAiJXMiLCAiNDYiKTsKKwkJYnJlYWs7CisJY2FzZSAweDZFOgorCQlzcHJpbnRmKGJp dHBvcywgIiVzIiwgIjQ3Iik7CisJCWJyZWFrOworCWNhc2UgMHg0NjoKKwkJc3ByaW50Zihi aXRwb3MsICIlcyIsICI0OCIpOworCQlicmVhazsKKwljYXNlIDB4MjY6CisJCXNwcmludGYo Yml0cG9zLCAiJXMiLCAiNDkiKTsKKwkJYnJlYWs7CisJY2FzZSAweDE2OgorCQlzcHJpbnRm KGJpdHBvcywgIiVzIiwgIjUwIik7CisJCWJyZWFrOworCWNhc2UgMHg4NjoKKwkJc3ByaW50 ZihiaXRwb3MsICIlcyIsICI1MSIpOworCQlicmVhazsKKwljYXNlIDB4NDU6CisJCXNwcmlu dGYoYml0cG9zLCAiJXMiLCAiNTIiKTsKKwkJYnJlYWs7CisJY2FzZSAweDI1OgorCQlzcHJp bnRmKGJpdHBvcywgIiVzIiwgIjUzIik7CisJCWJyZWFrOworCWNhc2UgMHgxNToKKwkJc3By aW50ZihiaXRwb3MsICIlcyIsICI1NCIpOworCQlicmVhazsKKwljYXNlIDB4ODU6CisJCXNw cmludGYoYml0cG9zLCAiJXMiLCAiNTUiKTsKKwkJYnJlYWs7CisJY2FzZSAweDQzOgorCQlz cHJpbnRmKGJpdHBvcywgIiVzIiwgIjU2Iik7CisJCWJyZWFrOworCWNhc2UgMHgyMzoKKwkJ c3ByaW50ZihiaXRwb3MsICIlcyIsICI1NyIpOworCQlicmVhazsKKwljYXNlIDB4MTM6CisJ CXNwcmludGYoYml0cG9zLCAiJXMiLCAiNTgiKTsKKwkJYnJlYWs7CisJY2FzZSAweDgzOgor CQlzcHJpbnRmKGJpdHBvcywgIiVzIiwgIjU5Iik7CisJCWJyZWFrOworCWNhc2UgMHgxQToK KwkJc3ByaW50ZihiaXRwb3MsICIlcyIsICI2MCIpOworCQlicmVhazsKKwljYXNlIDB4OUI6 CisJCXNwcmludGYoYml0cG9zLCAiJXMiLCAiNjEiKTsKKwkJYnJlYWs7CisJY2FzZSAweDVC OgorCQlzcHJpbnRmKGJpdHBvcywgIiVzIiwgIjYyIik7CisJCWJyZWFrOworCWNhc2UgMHgz QjoKKwkJc3ByaW50ZihiaXRwb3MsICIlcyIsICI2MyIpOworCQlicmVhazsKKwljYXNlIDB4 ODA6CisJCXNwcmludGYoYml0cG9zLCAiJXMiLCAiRUNDLTAiKTsKKwkJYnJlYWs7CisJY2Fz ZSAweDQwOgorCQlzcHJpbnRmKGJpdHBvcywgIiVzIiwgIkVDQy0xIik7CisJCWJyZWFrOwor CWNhc2UgMHgyMDoKKwkJc3ByaW50ZihiaXRwb3MsICIlcyIsICJFQ0MtMiIpOworCQlicmVh azsKKwljYXNlIDB4MTA6CisJCXNwcmludGYoYml0cG9zLCAiJXMiLCAiRUNDLTMiKTsKKwkJ YnJlYWs7CisJY2FzZSAweDA4OgorCQlzcHJpbnRmKGJpdHBvcywgIiVzIiwgIkVDQy00Iik7 CisJCWJyZWFrOworCWNhc2UgMHgwNDoKKwkJc3ByaW50ZihiaXRwb3MsICIlcyIsICJFQ0Mt NSIpOworCQlicmVhazsKKwljYXNlIDB4MDI6CisJCXNwcmludGYoYml0cG9zLCAiJXMiLCAi RUNDLTYiKTsKKwkJYnJlYWs7CisJY2FzZSAweDAxOgorCQlzcHJpbnRmKGJpdHBvcywgIiVz IiwgIkVDQy03Iik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXNwcmludGYoYml0cG9zLCAi JXMiLCAiVU5LTk9XTiIpOworCQlicmVhazsKKwl9CisJcHJpbnRrKEtFUk5fRVJSICJERFIg RVJST1IgQ0FMQ1VMQVRFRCBFQ0M6IDB4JTAyeFxuIiwgY2FsY3VsYXRlZF9lY2MpOworCXBy aW50ayhLRVJOX0VSUiAiRERSIEVSUk9SIFNUT1JFRCBFQ0M6IDB4JTAyeFxuIiwgc3RvcmVk X2VjYyk7CisJcHJpbnRrKEtFUk5fRVJSICJERFIgRVJST1IgRUNDIFNZTkRST01FOiAweCUw MnhcbiIsCisJICAgICAgIGNhbGN1bGF0ZWRfZWNjIF4gc3RvcmVkX2VjYyk7CisJcHJpbnRr KEtFUk5fRVJSICJERFIgRVJST1IgQklUIExPQ0FUSU9OOiAlc1xuIiwgYml0cG9zKTsKK30K KworCitzdGF0aWMgaXJxcmV0dXJuX3QgbXZtZTQxMDBfZGRyX2Vycl9oYW5kbGVyKGludCBp cnEsIHZvaWQgKmRldl9pZCkKK3sKKwl1MzIgZXJyX2FkZHIsIGRhdGFfaGksIGRhdGFfbG8s IGVjYywgZXJyX2F0dHIsIGVycl9kZXQsIHNiZV9jb3VudDsKKwl1MzIgcGZuLCBvZmZzZXQ7 CisJc3RydWN0IHBhZ2UgKnBnOworCXZvaWQgKnZpcnRfYWRkcjsKKwl1bnNpZ25lZCBsb25n IGZsYWdzID0gMDsKKworCWVycl9kZXQgPSByZWFkbChkZHJfZXJyX3JlZ3MgKyBERFJfRVJS X0RFVCAtIEREUl9FUlJfUkVHU19PRkZTRVQpOworCWlmICghZXJyX2RldCkKKwkJcmV0dXJu IElSUV9OT05FOworCisJLyogQ29sbGVjdCBlcnJvciBpbmZvcm1hdGlvbiBmcm9tIHRoZSBl cnJvciByZWdpc3RlcnMgKi8KKwllcnJfYXR0ciA9IHJlYWRsKGRkcl9lcnJfcmVncyArIERE Ul9DQVBUX0FUVFIgLSBERFJfRVJSX1JFR1NfT0ZGU0VUKTsKKwlkYXRhX2hpID0gcmVhZGwo ZGRyX2Vycl9yZWdzICsgRERSX0NBUFRfREFUQV9ISSAtIEREUl9FUlJfUkVHU19PRkZTRVQp OworCWRhdGFfbG8gPSByZWFkbChkZHJfZXJyX3JlZ3MgKyBERFJfQ0FQVF9EQVRBX0xPIC0g RERSX0VSUl9SRUdTX09GRlNFVCk7CisJZXJyX2FkZHIgPSByZWFkbChkZHJfZXJyX3JlZ3Mg KyBERFJfQ0FQVF9BRERSIC0gRERSX0VSUl9SRUdTX09GRlNFVCk7CisJZWNjID0gcmVhZGwo ZGRyX2Vycl9yZWdzICsgRERSX0NBUFRfRUNDIC0gRERSX0VSUl9SRUdTX09GRlNFVCk7CisJ c2JlX2NvdW50ID0gcmVhZGwoZGRyX2Vycl9yZWdzICsgRERSX0VSUl9TQkUgLSBERFJfRVJS X1JFR1NfT0ZGU0VUKTsKKworCWRkcl9lcnJvcnMrKzsKKworCS8qIERpc3BsYXkgZXJyb3Ig aW5mb3JtYXRpb24gKi8KKwlwcmludGsoS0VSTl9FUlIgIkREUiBFcnJvciFcbiIpOworCXBy aW50ayhLRVJOX0VSUiAiRERSIEVSUk9SIERFVEVDVCBSRUcgMHglMDh4XG4iLCBzd2FiMzIo ZXJyX2RldCkpOworCXByaW50ayhLRVJOX0VSUiAiRERSIEVSUk9SIEFERFJFU1MgQ0FQVFVS RSBSRUcgMHglMDh4XG4iLAorCSAgICAgICBzd2FiMzIoZXJyX2FkZHIpKTsKKwlwcmludGso S0VSTl9FUlIgIkREUiBFUlJPUiBEQVRBIEhJR0ggQ0FQVFVSRSBSRUcgMHglMDh4XG4iLAor CSAgICAgICBzd2FiMzIoZGF0YV9oaSkpOworCXByaW50ayhLRVJOX0VSUiAiRERSIEVSUk9S IERBVEEgTE9XIENBUFRVUkUgUkVHIDB4JTA4eFxuIiwKKwkgICAgICAgc3dhYjMyKGRhdGFf bG8pKTsKKwlwcmludGsoS0VSTl9FUlIgIkREUiBFUlJPUiBBVFRSSUJVVEVTIENBUFRVUkUg UkVHIDB4JTA4eFxuIiwKKwkgICAgICAgc3dhYjMyKGVycl9hdHRyKSk7CisJcHJpbnRrKEtF Uk5fRVJSICJERFIgRVJST1IgU0JFIFJFRyAweCUwOHhcbiIsIHN3YWIzMihzYmVfY291bnQp KTsKKwlwcmludGsoS0VSTl9FUlIgIkREUiBFUlJPUiBDT1VOVCAldVxuIiwgZGRyX2Vycm9y cyk7CisKKwlpZiAoZXJyX2RldCAmIEREUl9TQkUpIHsKKwkJLyogU2NydWIgYmxvY2sgKi8K KwkJcGZuID0gZXJyX2FkZHIgPj4gUEFHRV9TSElGVDsKKwkJb2Zmc2V0ID0gZXJyX2FkZHIg JiB+UEFHRV9NQVNLOworCisJCXBnID0gcGZuX3RvX3BhZ2UocGZuKTsKKworCQlpZiAoUGFn ZUhpZ2hNZW0ocGcpKQorCQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJCXZpcnRfYWRk ciA9IGttYXBfYXRvbWljKHBnLCBLTV9CT1VOQ0VfUkVBRCk7CisJCWF0b21pY19zY3J1Yih2 aXJ0X2FkZHIgKyBvZmZzZXQsIDgpOworCQlrdW5tYXBfYXRvbWljKHZpcnRfYWRkciwgS01f Qk9VTkNFX1JFQUQpOworCisJCWlmIChQYWdlSGlnaE1lbShwZykpCisJCQlsb2NhbF9pcnFf cmVzdG9yZShmbGFncyk7CisJfQorCisJLyogRGV0ZXJtaW5lIGFuZCBkaXNwbGF5IGJpdCBs b2NhdGlvbiAqLworCW12bWU0MTAwX2RldGVybWluZV9iaXRfbG9jYXRpb24oc3dhYjMyKGRh dGFfaGkpLAorCQkJCQlzd2FiMzIoZGF0YV9sbyksIHN3YWIzMihlY2MpICYgMHhmZik7CisK KwkvKiBDbGVhciBpbnRlcnJ1cHQgY2F1c2UgcmVnaXN0ZXIgKi8KKwl3cml0ZWwoZXJyX2Rl dCwgZGRyX2Vycl9yZWdzICsgRERSX0VSUl9ERVQgLSBERFJfRVJSX1JFR1NfT0ZGU0VUKTsK KworCS8qIENsZWFyIGNhcHR1cmUgYXR0cmlidXRlcyByZWdpc3RlciAqLworCXdyaXRlbCgw LCBkZHJfZXJyX3JlZ3MgKyBERFJfQ0FQVF9BVFRSIC0gRERSX0VSUl9SRUdTX09GRlNFVCk7 CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKyNlbmRpZgorCisjaWZkZWYgQ09ORklH X01WTUU0MTAwX0VOQUJMRV9MMl9FUlJPUlMKKworc3RhdGljIGlycXJldHVybl90IG12bWU0 MTAwX2wyY2FjaGVfZXJyX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXUz MiBlcnJfYWRkcl9oaSwgZXJyX2FkZHJfbG8sIGRhdGFfaGksIGRhdGFfbG8sIGVjYywgZXJy X2F0dHIsIGVycl9kZXQ7CisKKwllcnJfZGV0ID0gcmVhZGwobDJfZXJyX3JlZ3MgKyBMMl9F UlJfREVUIC0gTDJfRVJSX1JFR1NfT0ZGU0VUKTsKKwlpZiAoIWVycl9kZXQpCisJCXJldHVy biBJUlFfTk9ORTsKKworCS8qIENvbGxlY3QgZXJyb3IgaW5mb3JtYXRpb24gZnJvbSB0aGUg ZXJyb3IgcmVnaXN0ZXJzICovCisJZXJyX2F0dHIgPSByZWFkbChsMl9lcnJfcmVncyArIEwy X0VSUl9BVFRSIC0gTDJfRVJSX1JFR1NfT0ZGU0VUKTsKKwllcnJfYWRkcl9oaSA9IHJlYWRs KGwyX2Vycl9yZWdzICsgTDJfRVJSX0FERFJfSEkgLSBMMl9FUlJfUkVHU19PRkZTRVQpOwor CWVycl9hZGRyX2xvID0gcmVhZGwobDJfZXJyX3JlZ3MgKyBMMl9FUlJfQUREUl9MTyAtIEwy X0VSUl9SRUdTX09GRlNFVCk7CisJZGF0YV9oaSA9IHJlYWRsKGwyX2Vycl9yZWdzICsgTDJf Q0FQVF9EQVRBX0hJIC0gTDJfRVJSX1JFR1NfT0ZGU0VUKTsKKwlkYXRhX2xvID0gcmVhZGwo bDJfZXJyX3JlZ3MgKyBMMl9DQVBUX0RBVEFfTE8gLSBMMl9FUlJfUkVHU19PRkZTRVQpOwor CWVjYyA9IHJlYWRsKGwyX2Vycl9yZWdzICsgTDJfQ0FQVF9FQ0MgLSBMMl9FUlJfUkVHU19P RkZTRVQpOworCisJLyogQ2xlYXIgaW50ZXJydXB0IGNhdXNlIGFuZCBjYXB0dXJlIHJlZ2lz dGVycyAqLworCXdyaXRlbChlcnJfZGV0LCBsMl9lcnJfcmVncyArIEwyX0VSUl9ERVQgLSBM Ml9FUlJfUkVHU19PRkZTRVQpOworCXdyaXRlbCgwLCBsMl9lcnJfcmVncyArIEwyX0VSUl9B VFRSIC0gTDJfRVJSX1JFR1NfT0ZGU0VUKTsKKworCS8qIERpc3BsYXkgZXJyb3IgaW5mb3Jt YXRpb24gKi8KKwlwcmludGsoS0VSTl9FUlIgIkwyIENhY2hlIEVycm9yIVxuIik7CisJcHJp bnRrKEtFUk5fRVJSICJMMiBFUlJPUiBERVRFQ1QgUkVHIDB4JTA4eFxuIiwgc3dhYjMyKGVy cl9kZXQpKTsKKwlwcmludGsoS0VSTl9FUlIgIkwyIEVSUk9SIEFERFJFU1MgSElHSCBDQVBU VVJFIFJFRyAweCUwOHhcbiIsCisJICAgICAgIHN3YWIzMihlcnJfYWRkcl9oaSkpOworCXBy aW50ayhLRVJOX0VSUiAiTDIgRVJST1IgQUREUkVTUyBMT1cgQ0FQVFVSRSBSRUcgMHglMDh4 XG4iLAorCSAgICAgICBzd2FiMzIoZXJyX2FkZHJfbG8pKTsKKwlwcmludGsoS0VSTl9FUlIg IkwyIEVSUk9SIERBVEEgSElHSCBDQVBUVVJFIFJFRyAweCUwOHhcbiIsCisJICAgICAgIHN3 YWIzMihkYXRhX2hpKSk7CisJcHJpbnRrKEtFUk5fRVJSICJMMiBFUlJPUiBEQVRBIExPVyBD QVBUVVJFIFJFRyAweCUwOHhcbiIsCisJICAgICAgIHN3YWIzMihkYXRhX2xvKSk7CisJcHJp bnRrKEtFUk5fRVJSICJMMiBFUlJPUiBBVFRSSUJVVEVTIENBUFRVUkUgUkVHIDB4JTA4eFxu IiwKKwkgICAgICAgc3dhYjMyKGVycl9hdHRyKSk7CisJcHJpbnRrKEtFUk5fRVJSICJMMiBF UlJPUiBTWU5EUk9NRSBSRUcgMHglMDh4XG4iLCBzd2FiMzIoZWNjKSk7CisKKwlyZXR1cm4g SVJRX0hBTkRMRUQ7Cit9CisKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01WTUU0MTAwX0VO QUJMRV9QQ0lfRVJST1JTCisKK3N0YXRpYyBpcnFyZXR1cm5fdCBtdm1lNDEwMF9wY2kwX2Vy cl9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwl1MzIgZXJyX2RldCwgZXJy X3N0YXR1cywgZXJyX2NhcDAsIGVycl9jYXAxLCBlcnJfY2FwMiwgZXJyX2NhcDM7CisKKwlp ZiAoZGV2X2lkICE9ICZwY2kwX2Vycl9yZWdzKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwkv KiBDb2xsZWN0IGVycm9yIGluZm9ybWF0aW9uIGZyb20gdGhlIGVycm9yIHJlZ2lzdGVycyAq LworCWVycl9kZXQgPSByZWFkbChwY2kwX2Vycl9yZWdzICsgUENJX0VSUl9ERVQgLSBQQ0lf RVJSX1JFR1NfT0ZGU0VUKTsKKwlpZiAoIWVycl9kZXQpCisJCXJldHVybiBJUlFfTk9ORTsK KworCWVycl9zdGF0dXMgPQorCSAgICByZWFkbChwY2kwX2Vycl9yZWdzICsgUENJX0VSUl9D QVBfU1RBVCAtIFBDSV9FUlJfUkVHU19PRkZTRVQpOworCWVycl9jYXAwID0gcmVhZGwocGNp MF9lcnJfcmVncyArIFBDSV9FUlJfQ0FQX1IwIC0gUENJX0VSUl9SRUdTX09GRlNFVCk7CisJ ZXJyX2NhcDEgPSByZWFkbChwY2kwX2Vycl9yZWdzICsgUENJX0VSUl9DQVBfUjEgLSBQQ0lf RVJSX1JFR1NfT0ZGU0VUKTsKKwllcnJfY2FwMiA9IHJlYWRsKHBjaTBfZXJyX3JlZ3MgKyBQ Q0lfRVJSX0NBUF9SMiAtIFBDSV9FUlJfUkVHU19PRkZTRVQpOworCWVycl9jYXAzID0gcmVh ZGwocGNpMF9lcnJfcmVncyArIFBDSV9FUlJfQ0FQX1IzIC0gUENJX0VSUl9SRUdTX09GRlNF VCk7CisKKwlwY2kwX2Vycm9ycysrOworCS8qIERpc3BsYXkgZXJyb3IgaW5mb3JtYXRpb24g Ki8KKwlwcmludGsoS0VSTl9FUlIgIlBDSSBDb250cm9sbGVyIDAgRXJyb3IhXG4iKTsKKwlw cmludGsoS0VSTl9FUlIgIlBDSSBFUlJPUiBERVRFQ1QgUkVHIDB4JTA4eFxuIiwgc3dhYjMy KGVycl9kZXQpKTsKKwlwcmludGsoS0VSTl9FUlIgIlBDSSBFUlIgQ0FQIFNUQVRVUyBSRUcg MHglMDh4XG4iLCBzd2FiMzIoZXJyX3N0YXR1cykpOworCXByaW50ayhLRVJOX0VSUiAiUENJ IEVSUiBDQVAgUkVHMCAweCUwOHhcbiIsIHN3YWIzMihlcnJfY2FwMCkpOworCXByaW50ayhL RVJOX0VSUiAiUENJIEVSUiBDQVAgUkVHMSAweCUwOHhcbiIsIHN3YWIzMihlcnJfY2FwMSkp OworCXByaW50ayhLRVJOX0VSUiAiUENJIEVSUiBDQVAgUkVHMiAweCUwOHhcbiIsIHN3YWIz MihlcnJfY2FwMikpOworCXByaW50ayhLRVJOX0VSUiAiUENJIEVSUiBDQVAgUkVHMyAweCUw OHhcbiIsIHN3YWIzMihlcnJfY2FwMykpOworCXByaW50ayhLRVJOX0VSUiAiUENJIEVycm9y IENvdW50OiAldVxuIiwgcGNpMF9lcnJvcnMpOworCisJLyogQ2xlYXIgaW50ZXJydXB0IGNh dXNlIGFuZCBjYXB0dXJlIHJlZ2lzdGVycyAqLworCXdyaXRlbChlcnJfZGV0LCBwY2kwX2Vy cl9yZWdzICsgUENJX0VSUl9ERVQgLSBQQ0lfRVJSX1JFR1NfT0ZGU0VUKTsKKwl3cml0ZWwo c3dhYjMyKDB4MSksCisJICAgICAgIHBjaTBfZXJyX3JlZ3MgKyBQQ0lfRVJSX0NBUF9TVEFU IC0gUENJX0VSUl9SRUdTX09GRlNFVCk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisK K3N0YXRpYyBpcnFyZXR1cm5fdCBtdm1lNDEwMF9wY2kyX2Vycl9oYW5kbGVyKGludCBpcnEs IHZvaWQgKmRldl9pZCkKK3sKKwl1MzIgZXJyX2RldCwgZXJyX3N0YXR1cywgZXJyX2NhcDAs IGVycl9jYXAxLCBlcnJfY2FwMiwgZXJyX2NhcDM7CisKKwlpZiAoZGV2X2lkICE9ICZwY2ky X2Vycl9yZWdzKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwkvKiBDb2xsZWN0IGVycm9yIGlu Zm9ybWF0aW9uIGZyb20gdGhlIGVycm9yIHJlZ2lzdGVycyAqLworCWVycl9kZXQgPSByZWFk bChwY2kyX2Vycl9yZWdzICsgUENJX0VSUl9ERVQgLSBQQ0lfRVJSX1JFR1NfT0ZGU0VUKTsK KwlpZiAoIWVycl9kZXQpCisJCXJldHVybiBJUlFfTk9ORTsKKworCWVycl9zdGF0dXMgPQor CSAgICByZWFkbChwY2kyX2Vycl9yZWdzICsgUENJX0VSUl9DQVBfU1RBVCAtIFBDSV9FUlJf UkVHU19PRkZTRVQpOworCWVycl9jYXAwID0gcmVhZGwocGNpMl9lcnJfcmVncyArIFBDSV9F UlJfQ0FQX1IwIC0gUENJX0VSUl9SRUdTX09GRlNFVCk7CisJZXJyX2NhcDEgPSByZWFkbChw Y2kyX2Vycl9yZWdzICsgUENJX0VSUl9DQVBfUjEgLSBQQ0lfRVJSX1JFR1NfT0ZGU0VUKTsK KwllcnJfY2FwMiA9IHJlYWRsKHBjaTJfZXJyX3JlZ3MgKyBQQ0lfRVJSX0NBUF9SMiAtIFBD SV9FUlJfUkVHU19PRkZTRVQpOworCWVycl9jYXAzID0gcmVhZGwocGNpMl9lcnJfcmVncyAr IFBDSV9FUlJfQ0FQX1IzIC0gUENJX0VSUl9SRUdTX09GRlNFVCk7CisKKwlwY2kyX2Vycm9y cysrOworCS8qIERpc3BsYXkgZXJyb3IgaW5mb3JtYXRpb24gKi8KKwlwcmludGsoS0VSTl9F UlIgIlBDSSBDb250cm9sbGVyIDIgRXJyb3IhXG4iKTsKKwlwcmludGsoS0VSTl9FUlIgIlBD SSBFUlJPUiBERVRFQ1QgUkVHIDB4JTA4eFxuIiwgc3dhYjMyKGVycl9kZXQpKTsKKwlwcmlu dGsoS0VSTl9FUlIgIlBDSSBFUlIgQ0FQIFNUQVRVUyBSRUcgMHglMDh4XG4iLCBzd2FiMzIo ZXJyX3N0YXR1cykpOworCXByaW50ayhLRVJOX0VSUiAiUENJIEVSUiBDQVAgUkVHMCAweCUw OHhcbiIsIHN3YWIzMihlcnJfY2FwMCkpOworCXByaW50ayhLRVJOX0VSUiAiUENJIEVSUiBD QVAgUkVHMSAweCUwOHhcbiIsIHN3YWIzMihlcnJfY2FwMSkpOworCXByaW50ayhLRVJOX0VS UiAiUENJIEVSUiBDQVAgUkVHMiAweCUwOHhcbiIsIHN3YWIzMihlcnJfY2FwMikpOworCXBy aW50ayhLRVJOX0VSUiAiUENJIEVSUiBDQVAgUkVHMyAweCUwOHhcbiIsIHN3YWIzMihlcnJf Y2FwMykpOworCXByaW50ayhLRVJOX0VSUiAiUENJIEVycm9yIENvdW50OiAldVxuIiwgcGNp Ml9lcnJvcnMpOworCisJLyogQ2xlYXIgaW50ZXJydXB0IGNhdXNlIGFuZCBjYXB0dXJlIHJl Z2lzdGVycyAqLworCXdyaXRlbChlcnJfZGV0LCBwY2kyX2Vycl9yZWdzICsgUENJX0VSUl9E RVQgLSBQQ0lfRVJSX1JFR1NfT0ZGU0VUKTsKKwl3cml0ZWwoc3dhYjMyKDB4MSksCisJICAg ICAgIHBjaTJfZXJyX3JlZ3MgKyBQQ0lfRVJSX0NBUF9TVEFUIC0gUENJX0VSUl9SRUdTX09G RlNFVCk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKyNlbmRpZgorCitzdGF0aWMg dm9pZCBtdm1lNDEwMF9yZXN0YXJ0KGNoYXIgKmNtZCkKK3sKKwl2b2xhdGlsZSB1bG9uZyBp ID0gMTAwMDAwMDA7CisKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCXdyaXRlYihNVk1FNDEw MF9CT0FSRF9SRVNFVCwgc3lzdGVtX2NvbnRyb2xfcmVnX2FkZHIpOworCisJd2hpbGUgKGkt LSA+IDApIDsKKwlwYW5pYygicmVzdGFydCBmYWlsZWRcbiIpOworfQorCisKK3N0YXRpYyB2 b2lkIF9fZGV2aW5pdCBza2lwX2Zha2VfYnJpZGdlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7 CisJLyogTWFrZSBpdCBhbiBlcnJvciB0byBza2lwIHRoZSBmYWtlIGJyaWRnZQorCSAqIGlu IHBjaV9zZXR1cF9kZXZpY2UoKSBpbiBwcm9iZS5jICovCisJZGV2LT5oZHJfdHlwZSA9IDB4 N2Y7Cit9CisKK0RFQ0xBUkVfUENJX0ZJWFVQX0VBUkxZKDB4MTk1NywgMHgzZmZmLCBza2lw X2Zha2VfYnJpZGdlKTsKK0RFQ0xBUkVfUENJX0ZJWFVQX0VBUkxZKDB4M2ZmZiwgMHgxOTU3 LCBza2lwX2Zha2VfYnJpZGdlKTsKKworc3RhdGljIHZvaWQgX19pbml0IG12bWU0MTAwX2lu aXRfaXJxKHZvaWQpCit7CisJc3RydWN0IG1waWMgKm1waWM7CisJc3RydWN0IHJlc291cmNl IHI7CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IE5VTEw7CisKKwlucCA9IG9mX2ZpbmRf bm9kZV9ieV90eXBlKG5wLCAib3Blbi1waWMiKTsKKwlpZiAobnAgPT0gTlVMTCkgeworCQlw cmludGsoS0VSTl9FUlIgIkNvdWxkIG5vdCBmaW5kIG9wZW4tcGljIG5vZGVcbiIpOworCQly ZXR1cm47CisJfQorCisJaWYgKG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobnAsIDAsICZyKSkg eworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBtYXAgbXBpYyByZWdpc3RlciBzcGFj ZVxuIik7CisJCW9mX25vZGVfcHV0KG5wKTsKKwkJcmV0dXJuOworCX0KKworCW1waWMgPSBt cGljX2FsbG9jKG5wLCByLnN0YXJ0LAorCQkJICBNUElDX1BSSU1BUlkgfCBNUElDX1dBTlRT X1JFU0VUIHwgTVBJQ19CSUdfRU5ESUFOLAorCQkJICAwLCAyNTYsICIgT3BlblBJQyAgIik7 CisJQlVHX09OKG1waWMgPT0gTlVMTCk7CisKKwkvKiBSZXR1cm4gdGhlIG1waWMgbm9kZSAq LworCW9mX25vZGVfcHV0KG5wKTsKKworCW1waWNfaW5pdChtcGljKTsKKworI2lmZGVmIENP TkZJR19NVk1FNDEwMF9FTkFCTEVfTDJfRVJST1JTCisJbnAgPSBvZl9maW5kX25vZGVfYnlf dHlwZShOVUxMLCAibDJfY2FjaGUtY29udHJvbGxlciIpOworCWlmIChucCA9PSBOVUxMKSB7 CisJCXByaW50ayhLRVJOX0lORk8KKwkJICAgICAgICJQSUMgaW5pdDogY2Fubm90IGZpbmQg bDJfY2FjaGUtY29udHJvbGxlciBub2RlXG4iKTsKKwl9IGVsc2UgeworCQlsMl9pcnEgPSBp cnFfb2ZfcGFyc2VfYW5kX21hcChucCwgMCk7CisJCWlmIChsMl9pcnEgPT0gTk9fSVJRKQor CQkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gbWFwIEwyIGNhY2hlIGlycVxuIik7CisJ CW9mX25vZGVfcHV0KG5wKTsKKwl9CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NVk1FNDEw MF9FTkFCTEVfRERSX0VSUk9SUworCW5wID0gb2ZfZmluZF9ub2RlX2J5X3R5cGUoTlVMTCwg Im1lbW9yeS1jb250cm9sbGVyIik7CisJaWYgKG5wID09IE5VTEwpIHsKKwkJcHJpbnRrKEtF Uk5fSU5GTworCQkgICAgICAgIlBJQyBpbml0OiBjYW5ub3QgZmluZCBtZW1vcnktY29udHJv bGxlciBub2RlXG4iKTsKKwl9IGVsc2UgeworCQlkZHJfaXJxID0gaXJxX29mX3BhcnNlX2Fu ZF9tYXAobnAsIDApOworCQlpZiAoZGRyX2lycSA9PSBOT19JUlEpCisJCQlwcmludGsoS0VS Tl9FUlIgIlVuYWJsZSB0byBtYXAgRERSIGlycVxuIik7CisJCW9mX25vZGVfcHV0KG5wKTsK Kwl9CisjZW5kaWYKKworCW5wID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi9wY2lAZjEwMDgw MDAiKTsKKwlpZiAobnAgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9JTkZPICJQSUMgaW5p dDogY2Fubm90IGZpbmQgUENJIDAgbm9kZVxuIik7CisJfSBlbHNlIHsKKwkJcGNpMF9pcnEg PSBpcnFfb2ZfcGFyc2VfYW5kX21hcChucCwgMCk7CisJCWlmIChwY2kwX2lycSA9PSBOT19J UlEpCisJCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBtYXAgUENJIDAgaXJxXG4iKTsK KwkJb2Zfbm9kZV9wdXQobnApOworCX0KKworCW5wID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgo Ii9wY2lAZjEwMGEwMDAiKTsKKwlpZiAobnAgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9J TkZPICJQSUMgaW5pdDogY2Fubm90IGZpbmQgUENJIDIgbm9kZVxuIik7CisJfSBlbHNlIHsK KwkJcGNpMl9pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChucCwgMCk7CisJCWlmIChwY2ky X2lycSA9PSBOT19JUlEpCisJCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBtYXAgUENJ IDIgaXJxXG4iKTsKKwkJb2Zfbm9kZV9wdXQobnApOworCX0KKworI2lmZGVmIENPTkZJR19T RU5TT1JTX0xNOTAKKwlucCA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKE5VTEwsICJ0aGVybW9z dGF0Iik7CisJaWYgKG5wID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiUElDIGlu aXQ6IGNhbm5vdCBmaW5kIHRlbXAgc2Vuc29yIG5vZGVcbiIpOworCX0gZWxzZSB7CisJCW1h eGltNjY0OV9pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChucCwgMCk7CisJCWlmIChtYXhp bTY2NDlfaXJxID09IE5PX0lSUSkKKwkJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIG1h cCBNQVhJTTY2NDkgaXJxXG4iKTsKKwkJb2Zfbm9kZV9wdXQobnApOworCX0KKyNlbmRpZgor CisjaWZkZWYgQ09ORklHX01WTUU0MTAwX1RJQ0tfVElNRVJTCisJbnAgPSBvZl9maW5kX25v ZGVfYnlfdHlwZShOVUxMLCAiYm9hcmRfdGltZXJzIik7CisJaWYgKG5wID09IE5VTEwpIHsK KwkJcHJpbnRrKEtFUk5fSU5GTyAiUElDIGluaXQ6IGNhbm5vdCBmaW5kIHRpbWVycyBub2Rl XG4iKTsKKwl9IGVsc2UgeworCQltdm1lNDEwMF90aW1lcl9pcnEgPSBpcnFfb2ZfcGFyc2Vf YW5kX21hcChucCwgMCk7CisJCWlmIChtdm1lNDEwMF90aW1lcl9pcnEgPT0gTk9fSVJRKQor CQkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gbWFwIHRpbWVycyBpcnFcbiIpOworCQlv Zl9ub2RlX3B1dChucCk7CisJfQorI2VuZGlmCisKKwlucCA9IG9mX2ZpbmRfbm9kZV9ieV9w YXRoKCIvc2VyaWFsQGYyMDExMDAwIik7CisJaWYgKG5wID09IE5VTEwpIHsKKwkJcHJpbnRr KEtFUk5fSU5GTworCQkgICAgICAgIlBJQyBpbml0OiBjYW5ub3QgZmluZCBzZXJpYWxAZjIw MTEwMDAgbm9kZVxuIik7CisJfSBlbHNlIHsKKwkJc2VyaWFsX2lycSA9IGlycV9vZl9wYXJz ZV9hbmRfbWFwKG5wLCAwKTsKKwkJaWYgKHNlcmlhbF9pcnEgPT0gTk9fSVJRKQorCQkJcHJp bnRrKEtFUk5fRVJSICJVbmFibGUgdG8gbWFwIHNlcmlhbEBmMjAxMTAwMCBpcnFcbiIpOwor CQlvZl9ub2RlX3B1dChucCk7CisJfQorCisJbnAgPSBvZl9maW5kX25vZGVfYnlfcGF0aCgi L3NlcmlhbEBmMjAxMjAwMCIpOworCWlmIChucCA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJO X0lORk8KKwkJICAgICAgICJQSUMgaW5pdDogY2Fubm90IGZpbmQgc2VyaWFsQGYyMDEyMDAw IG5vZGVcbiIpOworCX0gZWxzZSB7CisJCXNlcmlhbF9pcnEgPSBpcnFfb2ZfcGFyc2VfYW5k X21hcChucCwgMCk7CisJCWlmIChzZXJpYWxfaXJxID09IE5PX0lSUSkKKwkJCXByaW50ayhL RVJOX0VSUiAiVW5hYmxlIHRvIG1hcCBzZXJpYWxAZjIwMTIwMDAgaXJxXG4iKTsKKwkJb2Zf bm9kZV9wdXQobnApOworCX0KKwlucCA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKCIvc2VyaWFs QGYyMDEzMDAwIik7CisJaWYgKG5wID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTwor CQkgICAgICAgIlBJQyBpbml0OiBjYW5ub3QgZmluZCBzZXJpYWxAZjIwMTMwMDAgbm9kZVxu Iik7CisJfSBlbHNlIHsKKwkJc2VyaWFsX2lycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG5w LCAwKTsKKwkJaWYgKHNlcmlhbF9pcnEgPT0gTk9fSVJRKQorCQkJcHJpbnRrKEtFUk5fRVJS ICJVbmFibGUgdG8gbWFwIHNlcmlhbEBmMjAxMzAwMCBpcnFcbiIpOworCQlvZl9ub2RlX3B1 dChucCk7CisJfQorCW5wID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi9zZXJpYWxAZjIwMTQw MDAiKTsKKwlpZiAobnAgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9JTkZPCisJCSAgICAg ICAiUElDIGluaXQ6IGNhbm5vdCBmaW5kIHNlcmlhbEBmMjAxNDAwMCBub2RlXG4iKTsKKwl9 IGVsc2UgeworCQlzZXJpYWxfaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobnAsIDApOwor CQlpZiAoc2VyaWFsX2lycSA9PSBOT19JUlEpCisJCQlwcmludGsoS0VSTl9FUlIgIlVuYWJs ZSB0byBtYXAgc2VyaWFsQGYyMDE0MDAwIGlycVxuIik7CisJCW9mX25vZGVfcHV0KG5wKTsK Kwl9Cit9CisKKworc3RhdGljIHZvaWQgX19pbml0IG12bWU0MTAwX21pc2NfaW5pdCh2b2lk KQoreworCXZvaWQgX19pb21lbSAqcmVnX2Jsb2NrOworCXU4IHJlZ192YWx1ZTsKKwl1MzIg cmVnMzI7CisJLy8gICAgIHUzMiB2YWw7CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IE5V TEw7CisJY29uc3QgdTMyICpyZWdzOworLy8gICAgICB1bnNpZ25lZCBsb25nIGE7CisjaWZk ZWYgQ09ORklHX01WTUU0MTAwX0VOQUJMRV9ERFJfRVJST1JTCisJdTMyIHNiZV9jb3VudDsK KyNlbmRpZgorCisJbnAgPSBvZl9maW5kX25vZGVfYnlfdHlwZShucCwgInNvYyIpOworCWlm IChucCA9PSBOVUxMKSB7CisJCXByaW50aygiRXJyb3I6Q2Fubm90IGZpbmQgc29jIG5vZGVc biIpOworCQlyZXR1cm47CisJfQorCXJlZ3MgPSBvZl9nZXRfcHJvcGVydHkobnAsICJyZWci LCBOVUxMKTsKKwlpZiAocmVncyA9PSBOVUxMKSB7CisJCXByaW50aygiRXJyb3I6Q2Fubm90 IGdldCByZWcgcHJvcGVydHkgZnJvbSBzb2Mgbm9kZVxuIik7CisJCW9mX25vZGVfcHV0KG5w KTsKKwkJcmV0dXJuOworCX0gZWxzZQorCQloYl9iYWRkciA9IHJlZ3NbMF07CisKKwlvZl9u b2RlX3B1dChucCk7CisKKyNpZmRlZiBDT05GSUdfTVZNRTQxMDBfRU5BQkxFX0REUl9FUlJP UlMJLyogRW5hYmxlIEREUiBlcnJvciByZXBvcnRpbmcgKi8KKwlkZHJfZXJyX3JlZ3MgPQor CSAgICBpb3JlbWFwKGhiX2JhZGRyICsgRERSX0VSUl9SRUdTX09GRlNFVCwgRERSX0VSUl9S RUdTX1NJWkUpOworCS8qIEVuYWJsZSBhbGwgZXJyb3IgZGV0ZWN0aW9uICovCisJd3JpdGVs KDAsIGRkcl9lcnJfcmVncyArIEREUl9FUlJfRElTIC0gRERSX0VSUl9SRUdTX09GRlNFVCk7 CisJLyogQ2xlYXIgbG9nZ2VkIEREUiBlcnJvcnMgKi8KKwl3cml0ZWwoc3dhYjMyKDB4ODAw MDAwMEQpLAorCSAgICAgICBkZHJfZXJyX3JlZ3MgKyBERFJfRVJSX0RFVCAtIEREUl9FUlJf UkVHU19PRkZTRVQpOworCS8qIFNldCBzaW5nbGUtYml0IGVycm9yIHRocmVzaG9sZCAqLwor CXNiZV9jb3VudCA9IDB4MDAwMTAwMDA7CisJd3JpdGVsKHN3YWIzMihzYmVfY291bnQpLAor CSAgICAgICBkZHJfZXJyX3JlZ3MgKyBERFJfRVJSX1NCRSAtIEREUl9FUlJfUkVHU19PRkZT RVQpOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTVZNRTQxMDBfRU5BQkxFX1BDSV9FUlJP UlMKKwlwY2kwX2Vycl9yZWdzID0gaW9yZW1hcChoYl9iYWRkciArIFBDSTBfUkVHU19PRkZT RVQgKworCQkJCVBDSV9FUlJfUkVHU19PRkZTRVQsIFBDSV9FUlJfUkVHU19TSVpFKTsKKwlw Y2kyX2Vycl9yZWdzID0gaW9yZW1hcChoYl9iYWRkciArIFBDSTJfUkVHU19PRkZTRVQgKwor CQkJCVBDSV9FUlJfUkVHU19PRkZTRVQsIFBDSV9FUlJfUkVHU19TSVpFKTsKKyNlbmRpZgor CisjaWZkZWYgQ09ORklHX1ZNRV9CUklER0UKKwl7CisJCWV4dGVybiB2b2lkIHZtZW1vZF9z ZXR1cF9vcHRpb25zKGNoYXIgKik7CisKKwkJdm1lbW9kX3NldHVwX29wdGlvbnMoY21kX2xp bmUpOworCX0KKyNlbmRpZgorCisJcmVnX2Jsb2NrID0gaW9yZW1hcChNVk1FNDEwMF9TWVNU RU1fU1RBVFVTX1JFRywgNjQpOworCisJLyogVHVybiBvZmYgVVNSMSBSZWQgTEVEICovCisJ cmVnX3ZhbHVlID0gcmVhZGIocmVnX2Jsb2NrICsgTVZNRTQxMDBfU1RBVFVTX0lORElDQVRP Ul9SRUdfT0ZGU0VUKTsKKwlyZWdfdmFsdWUgJj0gfk1WTUU0MTAwX1VTUjFfUkVEX0xFRDsK Kwl3cml0ZWIocmVnX3ZhbHVlLCByZWdfYmxvY2sgKyBNVk1FNDEwMF9TVEFUVVNfSU5ESUNB VE9SX1JFR19PRkZTRVQpOworCS8qIERpc2FibGUgUlRDLCBUZW1wIFNlbnNvciwgYW5kIEFi b3J0IGludGVycnVwdHMgKi8KKwlyZWdfdmFsdWUgPSByZWFkYihyZWdfYmxvY2sgKyBNVk1F NDEwMF9JTlRFUlJVUFRfUkVHXzJfT0ZGU0VUKTsKKwlyZWdfdmFsdWUgfD0gTVZNRTQxMDBf UlRDX01BU0sgfCBNVk1FNDEwMF9URU1QX01BU0sgfAorCSAgICBNVk1FNDEwMF9BQk9SVF9N QVNLOworCXdyaXRlYihyZWdfdmFsdWUsIHJlZ19ibG9jayArIE1WTUU0MTAwX0lOVEVSUlVQ VF9SRUdfMl9PRkZTRVQpOworCisJLyogVHVybiBvZmYgTk9SIGZsYXNoIFNXIHdyaXRlLXBy b3RlY3QgKi8KKwlyZWdfdmFsdWUgPSByZWFkYihyZWdfYmxvY2sgKyBNVk1FNDEwMF9OT1Jf RkxBU0hfQ1RSTF9TVEFUX1JFR19PRkZTRVQpOworCXJlZ192YWx1ZSAmPSB+TVZNRTQxMDBf Tk9SX0ZMQVNIX1dQX1NXOworCXdyaXRlYihyZWdfdmFsdWUsIHJlZ19ibG9jayArIE1WTUU0 MTAwX05PUl9GTEFTSF9DVFJMX1NUQVRfUkVHX09GRlNFVCk7CisKKwlpb3VubWFwKHJlZ19i bG9jayk7CisKKwkvKiBBbGxvdyB3cml0ZSBhY2Nlc3MgdG8gTVJBTSAqLworCXJlZ19ibG9j ayA9IGlvcmVtYXAoaGJfYmFkZHIgKyAweDUwMTgsIDQpOworCXJlZzMyID0gc3dhYjMyKHJl YWRsKHJlZ19ibG9jaykpOworCXJlZzMyICY9IDB4RkZGRkZFRkY7CisJd3JpdGVsKHN3YWIz MihyZWczMiksIHJlZ19ibG9jayk7CisJaW91bm1hcChyZWdfYmxvY2spOworCQorCXN5c3Rl bV9jb250cm9sX3JlZ19hZGRyID0gaW9yZW1hcChNVk1FNDEwMF9TWVNURU1fQ09OVFJPTF9S RUcsIDEpOworCisJcmV0dXJuOworfQorCisKK3N0YXRpYyB2b2lkIF9faW5pdCBtdm1lNDEw MF9wY2liaW9zX2ZpeHVwKHZvaWQpCit7CisJc3RydWN0IHBjaV9kZXYgKmRldiA9IE5VTEw7 CisJdTMyIHRlbXA7CisKKwlpZiAoKGRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1Jf SURfTkVDLAorCQkJCSAgUENJX0RFVklDRV9JRF9ORUNfVVNCLCBOVUxMKSkpIHsKKwkJLyog U2V0IFN5c3RlbSBDbG9jayB0byA0OE1IeiBvc2NpbGxhdG9yIGluIEVYVDIgcmVnaXN0ZXIg Ki8KKwkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgMHhlNCwgJnRlbXApOworCQl0ZW1w IHw9IDB4MDAwMDAwMjA7CisJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCAweGU0LCB0 ZW1wKTsKKyAgICAgICAgICAgICAgICAvKiBtYXggcG9ydHMgPSAyICovCisgICAgICAgICAg ICAgICAgcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgMHhlMCwgJnRlbXApOworICAgICAg ICAgICAgICAgIHRlbXAgJj0gfjB4MDAwMDAwMDc7CisgICAgICAgICAgICAgICAgdGVtcCB8 PSAweDAwMDAwMDAyOworICAgICAgICAgICAgICAgIHBjaV93cml0ZV9jb25maWdfZHdvcmQo ZGV2LCAweGUwLCB0ZW1wKTsKKwl9IAorCisJZGV2ID0gTlVMTDsKKwlmb3JfZWFjaF9wY2lf ZGV2KGRldikgeworCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBQQ0lfQ0FDSEVfTElO RV9TSVpFLAorCQkJCSAgICAgIEwxX0NBQ0hFX0JZVEVTID4+IDIpOworCQlwY2lfd3JpdGVf Y29uZmlnX2J5dGUoZGV2LCBQQ0lfTEFURU5DWV9USU1FUiwgMHg4MCk7CisJfQorCisjaWZk ZWYgQ09ORklHX01WTUU0MTAwX0VOQUJMRV9MMl9FUlJPUlMKKwlpZiAocmVxdWVzdF9pcnEo bDJfaXJxLCBtdm1lNDEwMF9sMmNhY2hlX2Vycl9oYW5kbGVyLAorCQkJSVJRRl9ESVNBQkxF RCwgIkwyIENhY2hlIEVycm9yIiwgKHZvaWQgKikmbDJfaXJxKSA8IDApIHsKKwkJcHJpbnRr KEtFUk5fRVJSICJDYW5ub3QgaW5zdGFsbCBMMiBjYWNoZSBlcnJvciBoYW5kbGVyXG4iKTsK Kwl9IGVsc2UKKwkJd3JpdGVsKHN3YWIzMigweDFEKSwKKwkJICAgICAgIGwyX2Vycl9yZWdz ICsgTDJfRVJSX0lOVF9FTiAtIEwyX0VSUl9SRUdTX09GRlNFVCk7CisjZW5kaWYKKworI2lm ZGVmIENPTkZJR19NVk1FNDEwMF9FTkFCTEVfRERSX0VSUk9SUworCWlmIChyZXF1ZXN0X2ly cShkZHJfaXJxLCBtdm1lNDEwMF9kZHJfZXJyX2hhbmRsZXIsCisJCQkgICAgICAgSVJRRl9E SVNBQkxFRCwgIkREUiBFcnJvciIsCisJCQkgICAgICAgKHZvaWQgKikmZGRyX2Vycl9yZWdz KSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDYW5ub3QgaW5zdGFsbCBERFIgZXJyb3Ig aGFuZGxlclxuIik7CisJfSBlbHNlCisJCXdyaXRlbChzd2FiMzIoMHhEKSwKKwkJICAgICAg IGRkcl9lcnJfcmVncyArIEREUl9FUlJfSU5UX0VOIC0gRERSX0VSUl9SRUdTX09GRlNFVCk7 CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NVk1FNDEwMF9FTkFCTEVfUENJX0VSUk9SUwor CWlmIChyZXF1ZXN0X2lycShwY2kwX2lycSwgbXZtZTQxMDBfcGNpMF9lcnJfaGFuZGxlciwK KwkJSVJRRl9TSEFSRUQsICJQQ0kgMCBFcnJvciIsICh2b2lkICopJnBjaTBfZXJyX3JlZ3Mp IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkNhbm5vdCBpbnN0YWxsIFBDSSAwIGVycm9y IGhhbmRsZXJcbiIpOworCX0gZWxzZSB7CisJCS8qIEVuYWJsZSBQQ0kgZXJyb3IgZGV0ZWN0 aW9uICovCisJCXdyaXRlbCgwLCBwY2kwX2Vycl9yZWdzICsgUENJX0VSUl9DQVBfRElTIC0g UENJX0VSUl9SRUdTX09GRlNFVCk7CisJCS8qIEVuYWJsZSBhbGwgZXJyb3IgaW50ZXJydXB0 cyAqLworCQl3cml0ZWwoc3dhYjMyKDB4MDBiZmZmMDApLAorCQkgICAgICAgcGNpMF9lcnJf cmVncyArIFBDSV9FUlJfSU5UX0VOIC0gUENJX0VSUl9SRUdTX09GRlNFVCk7CisJfQorCisJ aWYgKHJlcXVlc3RfaXJxKHBjaTJfaXJxLCBtdm1lNDEwMF9wY2kyX2Vycl9oYW5kbGVyLAor CQlJUlFGX1NIQVJFRCwgIlBDSSAyIEVycm9yIiwgKHZvaWQgKikmcGNpMl9lcnJfcmVncykg PCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ2Fubm90IGluc3RhbGwgUENJIDIgZXJyb3Ig aGFuZGxlclxuIik7CisJfSBlbHNlIHsKKwkJLyogRW5hYmxlIFBDSSBlcnJvciBkZXRlY3Rp b24gKi8KKwkJd3JpdGVsKDAsIHBjaTJfZXJyX3JlZ3MgKyBQQ0lfRVJSX0NBUF9ESVMgLSBQ Q0lfRVJSX1JFR1NfT0ZGU0VUKTsKKwkJLyogRW5hYmxlIGFsbCBlcnJvciBpbnRlcnJ1cHRz ICovCisJCXdyaXRlbChzd2FiMzIoMHgwMGJmZmYwMCksCisJCSAgICAgICBwY2kyX2Vycl9y ZWdzICsgUENJX0VSUl9JTlRfRU4gLSBQQ0lfRVJSX1JFR1NfT0ZGU0VUKTsKKwl9CisjZW5k aWYKK30KKwordm9pZCBtdm1lNDEwMF9wY2liaW9zX2ZpeHVwX2J1cyhzdHJ1Y3QgcGNpX2J1 cyAqYnVzKQoreworCXN0cnVjdCBwY2lfZGV2ICpicmlkZ2U7CisJc3RydWN0IHBjaV9jb250 cm9sbGVyICpob3NlID0gKHN0cnVjdCBwY2lfY29udHJvbGxlciAqKWJ1cy0+c3lzZGF0YTsK KworCWZzbF9wY2liaW9zX2ZpeHVwX2J1cyhidXMpOworCWJyaWRnZSA9IGJ1cy0+c2VsZjsK KwlpZiAoIWJyaWRnZSkgCisJCXJldHVybjsKKworCWlmIChob3NlLT5nbG9iYWxfbnVtYmVy ID09IDApIHsKKwkJaWYgKChicmlkZ2UtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0ZSRUVT Q0FMRSkgJiYKKwkgICAgCQkoYnJpZGdlLT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9NUEM4 NTQ4RSkpCisJCQlicmlkZ2UtPmlycSA9IHBjaTBfaXJxOworCX0KKworCWlmIChob3NlLT5n bG9iYWxfbnVtYmVyID09IDEpIHsKKwkJc3RydWN0IHBjaV9idXMgKnBhcmVudDsKKworCQlp ZiAoKGJyaWRnZS0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfRlJFRVNDQUxFKSAmJgorCSAg ICAJCShicmlkZ2UtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX01QQzg1NDhFKSkKKwkJCWJy aWRnZS0+aXJxID0gcGNpMl9pcnE7CisKKwkJcGFyZW50ID0gYnVzLT5wYXJlbnQ7CisJCS8q ICBQTFggODExNCBlcnJhdGEgLSB1c2VzIHJlYWRsaW5lIGluc3RlYWQgb2YgcmVhZCAKKwkJ ICogIG9mIFBDSSBNRU0gU3BhY2UgYXQgb2Zmc2V0cyAweDFjLCAweDNjLCBldGMuIAorCQkg KiAgdW5sZXNzIHRoaXMgYml6YXJyZSB3b3JrYXJvdW5kIGlzIHVzZWQuCisJCSAqLworCQlp ZiAoKGJyaWRnZS0+dmVuZG9yID09IDB4MTBiNSkgJiYKKwkJICAgIChicmlkZ2UtPmRldmlj ZSA9PSAweDgxMTQpICYmCisJCSAgICAoYnJpZGdlLT5kZXZmbiA9PSAweDApICYmIHBhcmVu dCAmJgorCQkgICAgcGFyZW50LT5zZWxmICYmCisJCSAgICAocGFyZW50LT5zZWxmLT52ZW5k b3IgPT0gMHgxMGI1KSAmJgorCQkgICAgKHBhcmVudC0+c2VsZi0+ZGV2aWNlID09IDB4ODUz MykpIHsKKwkJCXBjaV93cml0ZV9jb25maWdfYnl0ZShicmlkZ2UsIFBDSV9DQUNIRV9MSU5F X1NJWkUsIDE2KTsKKwkJfQorCX0KK30KKworCitzdGF0aWMgdm9pZCBtdm1lNDEwMF9pbml0 X2NhY2hlcyh2b2lkKQoreworCXZvaWQgX19pb21lbSAqbDJfY3RsX2FkZHI7CisJc3RydWN0 IGRldmljZV9ub2RlICpkbiA9IE5VTEw7CisJY29uc3QgdTMyICpyZWdzOworCXVpbnQgIHNw cjsKKworCWRuID0gb2ZfZmluZF9ub2RlX2J5X3R5cGUoZG4sICJzb2MiKTsKKwlpZiAoZG4g PT0gTlVMTCkgeworCQlwcmludGsoIkVycm9yOkNhbm5vdCBmaW5kIHNvYyBub2RlXG4iKTsK KwkJcmV0dXJuOworCX0KKwlyZWdzID0gb2ZfZ2V0X3Byb3BlcnR5KGRuLCAicmVnIiwgTlVM TCk7CisJaWYgKHJlZ3MgPT0gTlVMTCkgeworCQlwcmludGsoIkVycm9yOkNhbm5vdCBnZXQg cmVnIHByb3BlcnR5IGZyb20gc29jIG5vZGVcbiIpOworCQlyZXR1cm47CisJfSBlbHNlIHsK KwkJaGJfYmFkZHIgPSByZWdzWzBdOworCX0KKworCWwyX2Vycl9yZWdzID0gaW9yZW1hcCho Yl9iYWRkciArIEwyX0VSUl9SRUdTX09GRlNFVCwgTDJfRVJSX1JFR1NfU0laRSk7CisKKwls Ml9jdGxfYWRkciA9IGlvcmVtYXAoaGJfYmFkZHIgKyAweDIwMDAwLCA0KTsKKworCS8qIEwx IGluc3QsIEwxIGRhdGEsIGFuZCBMMiBhcmUgZGlzYWJsZWQgYXQgdGhpcyBwb2ludCAqLwor CisgICAgICAgIC8qIEVuYWJsZSBMMSBpbnN0ICovCisgICAgICAgIGFzbSB2b2xhdGlsZSgi bXN5bmM7IGlzeW5jIik7CisgICAgICAgIHNwciA9IG1mc3ByKFNQUk5fTDFDU1IxKTsKKyAg ICAgICAgYXNtIHZvbGF0aWxlKCJtc3luYzsgaXN5bmMiKTsKKyAgICAgICAgbXRzcHIoU1BS Tl9MMUNTUjEsIHNwciB8IEwxQ1NSMV9JQ0ZJIHwgTDFDU1IxX0lDRSB8IEwxQ1NSMV9JQ1BF KTsKKyAgICAgICAgYXNtIHZvbGF0aWxlKCJtc3luYzsgaXN5bmMiKTsKKworICAgICAgICAv KiBFbmFibGUgTDEgZGF0YSAqLworICAgICAgICBpZiAoIShtZnNwcihTUFJOX0wxQ1NSMCkg JiBMMUNTUjBfRENFKSkgeworICAgICAgICAgICAgICAgIGFzbSB2b2xhdGlsZSgibXN5bmM7 IGlzeW5jIik7CisgICAgICAgICAgICAgICAgbXRzcHIoU1BSTl9MMUNTUjAsIDB4MCk7ICAg ICAgICAgICAgICAgIC8qIERpc2FibGUgKi8KKyAgICAgICAgICAgICAgICBhc20gdm9sYXRp bGUoIm1zeW5jOyBpc3luYyIpOworICAgICAgICAgICAgICAgIG10c3ByKFNQUk5fTDFDU1Iw LCBMMUNTUjBfRENGSSk7ICAgICAgICAvKiBJbnZhbGlkYXRlICovCisgICAgICAgICAgICAg ICAgYXNtIHZvbGF0aWxlKCJpc3luYzsgc3luYyIpOworICAgICAgICAgICAgICAgIHNwciA9 IG1mc3ByKFNQUk5fTDFDU1IwKTsKKyAgICAgICAgICAgICAgICBhc20gdm9sYXRpbGUoImlz eW5jOyBzeW5jIik7CisgICAgICAgICAgICAgICAgbXRzcHIoU1BSTl9MMUNTUjAsIHNwciB8 IEwxQ1NSMF9EQ0UgfCBMMUNTUjBfRENQRSk7IC8qIEVuYWJsZSAqLworICAgICAgICAgICAg ICAgIGFzbSB2b2xhdGlsZSgiaXN5bmM7IHN5bmMiKTsKKyAgICAgICAgfQorCisJYXNtIHZv bGF0aWxlICgiZWllaW8iKTsKKwlhc20gdm9sYXRpbGUgKCJpc3luYyIpOworCS8qIERpc2Fi bGUgTDIgKi8KKwl3cml0ZWwoMCwgbDJfY3RsX2FkZHIpOworCXJlYWRsKGwyX2N0bF9hZGRy KTsKKwlhc20gdm9sYXRpbGUgKCJlaWVpbyIpOworCS8qIEludmFsaWRhdGUgTDIgKi8KKwl3 cml0ZWwoc3dhYjMyKDB4NDAwMDAzMDApLCBsMl9jdGxfYWRkcik7CisJcmVhZGwobDJfY3Rs X2FkZHIpOworCWFzbSB2b2xhdGlsZSAoImVpZWlvIik7CisJLyogRW5hYmxlIEwyIGVycm9y IGRldGVjdGlvbiAqLworCXdyaXRlbCgwLCBsMl9lcnJfcmVncyArIEwyX0VSUl9ESVMgLSBM Ml9FUlJfUkVHU19PRkZTRVQpOworCXJlYWRsKGwyX2N0bF9hZGRyKTsKKwlhc20gdm9sYXRp bGUgKCJlaWVpbyIpOworCS8qIENsZWFyIGFueSBsb2dnZWQgTDIgZXJyb3JzICovCisJd3Jp dGVsKHN3YWIzMigweDAwMDAwMDFEKSwKKwkgICAgICAgbDJfZXJyX3JlZ3MgKyBMMl9FUlJf REVUIC0gTDJfRVJSX1JFR1NfT0ZGU0VUKTsKKwlyZWFkbChsMl9jdGxfYWRkcik7CisJYXNt IHZvbGF0aWxlICgiZWllaW8iKTsKKwkvKiBFbmFibGUgTDIgKi8KKwl3cml0ZWwoc3dhYjMy KDB4ODAwMDAzMDApLCBsMl9jdGxfYWRkcik7CisJYXNtIHZvbGF0aWxlICgiZWllaW8iKTsK Kwlhc20gdm9sYXRpbGUgKCJpc3luYyIpOworCS8qIENsZWFyIExvY2tzICovCisJd3JpdGVs KHN3YWIzMigweDgwMDAwNzAwKSwgbDJfY3RsX2FkZHIpOworCWFzbSB2b2xhdGlsZSAoImVp ZWlvIik7CisKKwlwcmludGsKKwkgICAgKCJMMiBjYWNoZSBlbmFibGVkICg1MTJLIGNhY2hl LCBubyBtZW1vcnktbWFwcGVkIFNSQU0pLiBMMkNUTCByZWc6IDB4JXhcbiIsCisJICAgICBz d2FiMzIocmVhZGwobDJfY3RsX2FkZHIpKSk7CisKKwlpb3VubWFwKGwyX2N0bF9hZGRyKTsK KwlvZl9ub2RlX3B1dChkbik7CisKKwlyZXR1cm47Cit9CisKKy8qCisgKiBTZXR1cCB0aGUg YXJjaGl0ZWN0dXJlCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBtdm1lNDEwMF9zZXR1cF9h cmNoKHZvaWQpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucDsKKworCWlmIChwcGNfbWQu cHJvZ3Jlc3MpCisJCXBwY19tZC5wcm9ncmVzcygibXZtZTQxMDBfc2V0dXBfYXJjaCgpIiwg MCk7CisKKworCW12bWU0MTAwX2luaXRfY2FjaGVzKCk7CisKKyNpZmRlZiBDT05GSUdfUENJ CisJZm9yX2VhY2hfbm9kZV9ieV90eXBlKG5wLCAicGNpIikgeworCQlpZiAob2ZfZGV2aWNl X2lzX2NvbXBhdGlibGUobnAsICJmc2wsbXBjODU0MC1wY2kiKSB8fAorCQkgICAgb2ZfZGV2 aWNlX2lzX2NvbXBhdGlibGUobnAsICJmc2wsbXBjODU0OC1wY2llIikpIHsKKwkJCXN0cnVj dCByZXNvdXJjZSByc3JjOworCisJCQlvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG5wLCAwLCAm cnNyYyk7CisJCQlpZiAoKHJzcmMuc3RhcnQgJiAweGZmZmZmKSA9PSAweDgwMDApCisJCQkJ ZnNsX2FkZF9icmlkZ2UobnAsIDEpOworCQkJZWxzZQorCQkJCWZzbF9hZGRfYnJpZGdlKG5w LCAwKTsKKwkJfQorCX0KKyNlbmRpZgorCXByaW50aygiTVZNRTQxMDAgYm9hcmQgZnJvbSBF bWVyc29uIE5ldHdvcmsgUG93ZXIgRW1iZWRkZWQgQ29tcHV0aW5nXG4iKTsKKworI2lmZGVm ICBDT05GSUdfUk9PVF9ORlMKKwlST09UX0RFViA9IFJvb3RfTkZTOworI2Vsc2UKKwlST09U X0RFViA9IFJvb3RfU0RBMjsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1ZNRV9CUklER0Vf Qk9PVE1FTQorCXZtZV9ib290bWVtX3NpemUgPSBDT05GSUdfVk1FX0JSSURHRV9CT09UTUVN X1NJWkUgKiAxMDI0ICogMTAyNDsKKworCWlmICh2bWVfYm9vdG1lbV9zaXplID4gKHRvdGFs X21lbW9yeSAvIDIpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJICAgICAgICJCT09U TUVNIFNpemUgUmVxdWVzdGVkOiAweCV4IFRvdGFsIE1lbW9yeSAweCVseFxuIiwKKwkJICAg ICAgIHZtZV9ib290bWVtX3NpemUsIHRvdGFsX21lbW9yeSk7CisJCXByaW50ayhLRVJOX1dB Uk5JTkcKKwkJICAgICAgICJCT09UTUVNIFNpemUgcmVxdWVzdGVkIGhhcyBiZWVuIGNhcHBl ZCBhdCBoYWxmIHRoZSB0b3RhbCBtZW1vcnlcbiIpOworCQl2bWVfYm9vdG1lbV9zaXplID0g dG90YWxfbWVtb3J5IC8gMjsKKwl9CisJdm1lX2RyaXZlcl9ib290bWVtID0gX19hbGxvY19i b290bWVtKHZtZV9ib290bWVtX3NpemUsIDB4MTAwMDAsIDApOworCWlmICghdm1lX2RyaXZl cl9ib290bWVtKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlVuYWJsZSB0byBvYnRhaW4g Ym9vdCBtZW1vcnkgZm9yIFZNRVxuIik7CisJCXZtZV9ib290bWVtX3NpemUgPSAwOworCX0g ZWxzZSB7CisJCXByaW50ayhLRVJOX0lORk8KKwkJICAgICAgICIweCV4IG9mIGJvb3QgbWVt b3J5IHJlc2VydmVkIGZvciBzZXR1cCBvZiBWTUUgaW5ib3VuZCB3aW5kb3cgN1xuIiwKKwkJ ICAgICAgIHZtZV9ib290bWVtX3NpemUpOworCX0KKyNlbmRpZgorCW12bWU0MTAwX21pc2Nf aW5pdCgpOworfQorCisjZGVmaW5lIFNQUk5fTDFDRkcwICAgICAweDIwMwkvKiBMMSBDYWNo ZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDAgICovCisjZGVmaW5lIFNQUk5fTDFDRkcxICAg ICAweDIwNAkvKiBMMSBDYWNoZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDEgICovCisKKwor c3RhdGljIHZvaWQgbXZtZTQxMDBfc2hvd19jcHVpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSkK K3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnJvb3Q7CisJdWludCBwdmlkLCBzdmlkLCBwaGlk MTsKKwlwaHlzX2FkZHJfdCBpbW1yX2Jhc2U7CisJdWludCBtZW1zaXplID0gdG90YWxfbWVt b3J5OworCWNvbnN0IGNoYXIgKm1vZGVsID0gIiI7CisJdm9pZCBfX2lvbWVtICpyZWdfYmxv Y2s7CisJdTggcmVnX3ZhbHVlOworCXUzMiByZWczMl92YWx1ZTsKKwl2b2lkIF9faW9tZW0g KmwyY2FjaGVfYWRkcjsKKwl1MzIgbDFjc3IwLCBsMWNzcjEsIGwyY3RsOworCWNoYXIgYnVm ZlsxNl0gPSAiIjsKKworCXNlcV9wcmludGYobSwgIlZlbmRvclx0XHQ6IEZyZWVzY2FsZSBT ZW1pY29uZHVjdG9yXG4iKTsKKwlyb290ID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi8iKTsK KwlpZiAocm9vdCkKKwkJbW9kZWwgPSBvZl9nZXRfcHJvcGVydHkocm9vdCwgIm1vZGVsIiwg TlVMTCk7CisJc2VxX3ByaW50ZihtLCAiTWFjaGluZVx0XHQ6ICVzXG4iLCBtb2RlbCk7CisJ b2Zfbm9kZV9wdXQocm9vdCk7CisKKwlwdmlkID0gbWZzcHIoU1BSTl9QVlIpOworCXN2aWQg PSBtZnNwcihTUFJOX1NWUik7CisJaW1tcl9iYXNlID0gZ2V0X2ltbXJiYXNlKCk7CisKKwlz ZXFfcHJpbnRmKG0sICJQVlJcdFx0OiAweCV4XG4iLCBwdmlkKTsKKwlzZXFfcHJpbnRmKG0s ICJTVlJcdFx0OiAweCV4XG4iLCBzdmlkKTsKKwlzZXFfcHJpbnRmKG0sICJISUQwXHRcdDog MHglMDhseFxuIiwgbWZzcHIoU1BSTl9ISUQwKSk7CisJc2VxX3ByaW50ZihtLCAiSElEMVx0 XHQ6IDB4JTA4bHhcbiIsIG1mc3ByKFNQUk5fSElEMSkpOworCXNlcV9wcmludGYobSwgIkND U1IgQmFzZVx0OiAweCUwOHhcbiIsIGltbXJfYmFzZSk7CisKKwkvKiBEaXNwbGF5IGNwdSBQ bGwgc2V0dGluZyAqLworCXBoaWQxID0gbWZzcHIoU1BSTl9ISUQxKTsKKwlzZXFfcHJpbnRm KG0sICJQTEwgc2V0dGluZ1x0OiAweCV4XG4iLCAoKHBoaWQxID4+IDI0KSAmIDB4M2YpKTsK KworCS8qIERpc3BsYXkgdGhlIGNhY2hlIHNldHRpbmdzICovCisJc2VxX3ByaW50ZihtLCAi XG5DYWNoZSBTZXR0aW5nczpcblxuIik7CisJbDFjc3IwID0gbWZzcHIoU1BSTl9MMUNTUjAp OworCXNlcV9wcmludGYobSwgIkwxQ1NSMCAoTDEgRC1jYWNoZSlcdDogMHglMDh4ICglcylc biIsIGwxY3NyMCwKKwkJICAgKGwxY3NyMCAmIDEpID8gIm9uIiA6ICJvZmYiKTsKKwlsMWNz cjEgPSBtZnNwcihTUFJOX0wxQ1NSMSk7CisJc2VxX3ByaW50ZihtLCAiTDFDU1IxIChMMSBJ LWNhY2hlKVx0OiAweCUwOHggKCVzKVxuIiwgbDFjc3IxLAorCQkgICAobDFjc3IxICYgMSkg PyAib24iIDogIm9mZiIpOworCXNlcV9wcmludGYobSwgIkwxQ0ZHMFx0XHRcdDogMHglMDhs eFxuIiwgbWZzcHIoU1BSTl9MMUNGRzApKTsKKwlzZXFfcHJpbnRmKG0sICJMMUNGRzFcdFx0 XHQ6IDB4JTA4bHhcbiIsIG1mc3ByKFNQUk5fTDFDRkcxKSk7CisKKwlsMmNhY2hlX2FkZHIg PSBpb3JlbWFwKGltbXJfYmFzZSArIDB4MjAwMDAsIDQpOworCWwyY3RsID0gc3dhYjMyKHJl YWRsKGwyY2FjaGVfYWRkcikpOworCXNlcV9wcmludGYobSwgIkwyQ1RMIChMMiBjYWNoZSlc dDogMHgleCAoJXMpXG4iLCBsMmN0bCwKKwkJICAgKGwyY3RsICYgMHg4MDAwMDAwMCkgPyAi b24iIDogIm9mZiIpOworCWlvdW5tYXAobDJjYWNoZV9hZGRyKTsKKworCXNlcV9wcmludGYo bSwgIlxuQk9BUkQgSU5GT1JNQVRJT046XG5cbiIpOworCisJc2VxX3ByaW50ZihtLAorCQkg ICAiQm9hcmQgVmVuZG9yXHRcdDogRW1lcnNvbiBOZXR3b3JrIFBvd2VyIEVtYmVkZGVkIENv bXB1dGluZ1xuIik7CisJcmVnX2Jsb2NrID0gaW9yZW1hcChNVk1FNDEwMF9TWVNURU1fU1RB VFVTX1JFRywgNjQpOworCisJLyogRGlzcGxheSB0aGUgYW1vdW50IG9mIG1lbW9yeSAqLwor CXNlcV9wcmludGYobSwgIk1lbW9yeVx0XHRcdDogJWQgTUJcbiIsIG1lbXNpemUgLyAoMTAy NCAqIDEwMjQpKTsKKwkvKiBTeXN0ZW0gU3RhdHVzIFJlZ2lzdGVyICovCisJcmVnX3ZhbHVl ID0gcmVhZGIocmVnX2Jsb2NrKTsKKwlzZXFfcHJpbnRmKG0sICJTVzggU3RhdGVcdFx0OiAl c1xuIiwKKwkJICAgKChyZWdfdmFsdWUgJiBNVk1FNDEwMF9TVEFURV9TVzgpID8gIk9OIiA6 ICJPRkYiKSk7CisJc2VxX3ByaW50ZihtLCAiU1c3IFN0YXRlXHRcdDogJXNcbiIsCisJCSAg ICgocmVnX3ZhbHVlICYgTVZNRTQxMDBfU1RBVEVfU1c3KSA/ICJPTiIgOiAiT0ZGIikpOwor CXNlcV9wcmludGYobSwgIlNXNiBTdGF0ZVx0XHQ6ICVzXG4iLAorCQkgICAoKHJlZ192YWx1 ZSAmIE1WTUU0MTAwX1NUQVRFX1NXNikgPyAiT04iIDogIk9GRiIpKTsKKwlzZXFfcHJpbnRm KG0sICJTVzUgU3RhdGVcdFx0OiAlc1xuIiwKKwkJICAgKChyZWdfdmFsdWUgJiBNVk1FNDEw MF9TVEFURV9TVzUpID8gIk9OIiA6ICJPRkYiKSk7CisKKwlzZXFfcHJpbnRmKG0sICJTYWZl IFN0YXJ0IFN0YXR1c1x0OiAlc1xuIiwKKwkJICAgKChyZWdfdmFsdWUgJiBNVk1FNDEwMF9T QUZFX1NUQVJUKSA/CisJCSAgICAiU2FmZSBFTlYgc2V0dGluZ3MgdXNlZCIgOiAiTlZSQU0g RU5WIHNldHRpbmdzIHVzZWQiKSk7CisKKwlzd2l0Y2ggKHJlZ192YWx1ZSAmIE1WTUU0MTAw X0JPQVJEX1RZUEVfTUFTSykgeworCWNhc2UgTVZNRTQxMDBfQk9BUkRfVFlQRV9QUlBNQzoK KwkJc3ByaW50ZihidWZmLCAiUHJQTUMiKTsKKwkJYnJlYWs7CisJY2FzZSBNVk1FNDEwMF9C T0FSRF9UWVBFX1ZNRToKKwkJc3ByaW50ZihidWZmLCAiVk1FIik7CisJCWJyZWFrOworCWRl ZmF1bHQ6CisJCXNwcmludGYoYnVmZiwgIlVua25vd24iKTsKKwkJYnJlYWs7CisJfQorCXNl cV9wcmludGYobSwgIkJvYXJkIFR5cGVcdFx0OiAlc1xuIiwgYnVmZik7CisKKwkvKiBTeXN0 ZW0gQ29udHJvbCBSZWdpc3RlciAqLworCXJlZ192YWx1ZSA9IHJlYWRiKHJlZ19ibG9jayAr IE1WTUU0MTAwX1NZU1RFTV9DT05UUk9MX1JFR19PRkZTRVQpOworCXNlcV9wcmludGYobSwg IkVFUFJPTSBXUCBTdGF0dXNcdDogJXNcbiIsCisJCSAgICgocmVnX3ZhbHVlICYgTVZNRTQx MDBfRUVQUk9NX1dQKSA/CisJCSAgICAiRUVQUk9NIFdyaXRlIFByb3RlY3RlZCIgOiAiRUVQ Uk9NIE5vdCBXcml0ZSBQcm90ZWN0ZWQiKSk7CisKKwkvKiBTdGF0dXMgSW5kaWNhdG9yIFJl Z2lzdGVyICovCisJcmVnX3ZhbHVlID0gcmVhZGIocmVnX2Jsb2NrICsgTVZNRTQxMDBfU1RB VFVTX0lORElDQVRPUl9SRUdfT0ZGU0VUKTsKKwlzZXFfcHJpbnRmKG0sICJVU1IxIFJlZCBM RURcdFx0OiAlc1xuIiwKKwkJICAgKChyZWdfdmFsdWUgJiBNVk1FNDEwMF9VU1IxX1JFRF9M RUQpID8gIkxpdCIgOiAiTm90IExpdCIpKTsKKwlzZXFfcHJpbnRmKG0sICJVU1IxIFllbGxv dyBMRURcdFx0OiAlc1xuIiwKKwkJICAgKChyZWdfdmFsdWUgJiBNVk1FNDEwMF9VU1IxX1lF TExPV19MRUQpID8gIkxpdCIgOgorCQkgICAgIk5vdCBMaXQiKSk7CisJc2VxX3ByaW50Ziht LCAiVVNSMiBMRURcdFx0OiAlc1xuIiwKKwkJICAgKChyZWdfdmFsdWUgJiBNVk1FNDEwMF9V U1IyX0xFRCkgPyAiTGl0IiA6ICJOb3QgTGl0IikpOworCXNlcV9wcmludGYobSwgIlVTUjMg TEVEXHRcdDogJXNcbiIsCisJCSAgICgocmVnX3ZhbHVlICYgTVZNRTQxMDBfVVNSM19MRUQp ID8gIkxpdCIgOiAiTm90IExpdCIpKTsKKworCS8qIE5PUiBGbGFzaCBDb250cm9sL1N0YXR1 cyBSZWdpc3RlciAqLworCXJlZ192YWx1ZSA9IHJlYWRiKHJlZ19ibG9jayArIE1WTUU0MTAw X05PUl9GTEFTSF9DVFJMX1NUQVRfUkVHX09GRlNFVCk7CisJc2VxX3ByaW50ZihtLCAiTk9S IEZsYXNoIE1hcCBTZWxlY3RcdDogJXNcbiIsCisJCSAgICgocmVnX3ZhbHVlICYgTVZNRTQx MDBfTk9SX0ZMQVNIX01BUF9TRUxFQ1QpID8KKwkJICAgICJCb290IEJsb2NrIEEgTWFwcGVk IHRvIEhpZ2hlc3QgQWRkcmVzcyIgOgorCQkgICAgIkZsYXNoIE1lbW9yeSBNYXAgQ29udHJv bGxlZCBieSBGbGFzaCBCb290IEJsb2NrIFNlbGVjdCIpKTsKKwlzZXFfcHJpbnRmKG0sICJO T1IgRmxhc2ggV1AgU1dcdFx0OiAlc1xuIiwKKwkJICAgKChyZWdfdmFsdWUgJiBNVk1FNDEw MF9OT1JfRkxBU0hfV1BfU1cpID8KKwkJICAgICJXcml0ZSBQcm90ZWN0ZWQiIDogIk5vdCBX cml0ZSBQcm90ZWN0ZWQiKSk7CisJc2VxX3ByaW50ZihtLCAiTk9SIEZsYXNoIFdQIEhXXHRc dDogJXNcbiIsCisJCSAgICgocmVnX3ZhbHVlICYgTVZNRTQxMDBfTk9SX0ZMQVNIX1dQX0hX KSA/CisJCSAgICAiV3JpdGUgUHJvdGVjdGVkIiA6ICJOb3QgV3JpdGUgUHJvdGVjdGVkIikp OworCXNlcV9wcmludGYobSwgIk5PUiBGbGFzaCBCb290IFNlbGVjdFx0OiAlc1xuIiwKKwkJ ICAgKChyZWdfdmFsdWUgJiBNVk1FNDEwMF9OT1JfRkxBU0hfQkxLX1NFTCkgPworCQkgICAg IkJvb3QgQmxvY2sgQiBTZWxlY3RlZCIgOiAiQm9vdCBCbG9jayBBIFNlbGVjdGVkIikpOwor CXNlcV9wcmludGYobSwgIk5PUiBGbGFzaCBSZWFkeSBTdGF0dXNcdDogJXNcbiIsCisJCSAg ICgocmVnX3ZhbHVlICYgTVZNRTQxMDBfTk9SX0ZMQVNIX1JEWSkgPworCQkgICAgIkJpdCBT ZXQiIDogIkJpdCBOb3QgU2V0IikpOworCS8qIEludGVycnVwdCBSZWdpc3RlciAxICovCisJ cmVnX3ZhbHVlID0gcmVhZGIocmVnX2Jsb2NrICsgTVZNRTQxMDBfSU5URVJSVVBUX1JFR18x X09GRlNFVCk7CisKKwlpZiAocmVnX3ZhbHVlICYgTVZNRTQxMDBfVFNFQzRfUEhZX0lOVEVS UlVQVCkgeworCQlzZXFfcHJpbnRmKG0sICJUU0VDNCBQSFkgSW50ZXJydXB0XHQ6ICVzXG4i LCAiQXNzZXJ0ZWQiKTsKKwl9OworCWlmIChyZWdfdmFsdWUgJiBNVk1FNDEwMF9UU0VDM19Q SFlfSU5URVJSVVBUKSB7CisJCXNlcV9wcmludGYobSwgIlRTRUMzIFBIWSBJbnRlcnJ1cHRc dDogJXNcbiIsICJBc3NlcnRlZCIpOworCX07CisJaWYgKHJlZ192YWx1ZSAmIE1WTUU0MTAw X1RTRUMyX1BIWV9JTlRFUlJVUFQpIHsKKwkJc2VxX3ByaW50ZihtLCAiVFNFQzIgUEhZIElu dGVycnVwdFx0OiAlc1xuIiwgIkFzc2VydGVkIik7CisJfTsKKwlpZiAocmVnX3ZhbHVlICYg TVZNRTQxMDBfVFNFQzFfUEhZX0lOVEVSUlVQVCkgeworCQlzZXFfcHJpbnRmKG0sICJUU0VD MSBQSFkgSW50ZXJydXB0XHQ6ICVzXG4iLCAiQXNzZXJ0ZWQiKTsKKwl9OworCisJLyogSW50 ZXJydXB0IFJlZ2lzdGVyIDIgKi8KKwlyZWdfdmFsdWUgPSByZWFkYihyZWdfYmxvY2sgKyBN Vk1FNDEwMF9JTlRFUlJVUFRfUkVHXzJfT0ZGU0VUKTsKKworCXNlcV9wcmludGYobSwgIlJU QyBNYXNrXHRcdDogJXNcbiIsCisJCSAgICgocmVnX3ZhbHVlICYgTVZNRTQxMDBfUlRDX01B U0spID8KKwkJICAgICJJbnRlcnJ1cHQgRGlzYWJsZWQiIDogIkludGVycnVwdCBFbmFibGVk IikpOworCXNlcV9wcmludGYobSwgIlRlbXBlcmF0dXJlIFNlbnNvciBNYXNrXHQ6ICVzXG4i LAorCQkgICAoKHJlZ192YWx1ZSAmIE1WTUU0MTAwX1RFTVBfTUFTSykgPworCQkgICAgIklu dGVycnVwdCBEaXNhYmxlZCIgOiAiSW50ZXJydXB0IEVuYWJsZWQiKSk7CisJc2VxX3ByaW50 ZihtLCAiQUJPUlQgTWFza1x0XHQ6ICVzXG4iLAorCQkgICAoKHJlZ192YWx1ZSAmIE1WTUU0 MTAwX0FCT1JUX01BU0spID8KKwkJICAgICJJbnRlcnJ1cHQgRGlzYWJsZWQiIDogIkludGVy cnVwdCBFbmFibGVkIikpOworCisJc2VxX3ByaW50ZihtLCAiUlRDIFN0YXR1c1x0XHQ6ICVz XG4iLAorCQkgICAoKHJlZ192YWx1ZSAmIE1WTUU0MTAwX1JUQ19TVEFUVVMpID8KKwkJICAg ICJSVEMgT3V0cHV0IEFzc2VydGVkIiA6ICJSVEMgT3V0cHV0IE5vdCBBc3NlcnRlZCIpKTsK KwlzZXFfcHJpbnRmKG0sICJUZW1wIFNlbnNvciBTdGF0dXNcdDogJXNcbiIsCisJCSAgICgo cmVnX3ZhbHVlICYgTVZNRTQxMDBfVEVNUF9TVEFUVVMpID8KKwkJICAgICJUZW1wZXJhdHVy ZSBTZW5zb3IgT3V0cHV0IEFzc2VydGVkIiA6CisJCSAgICAiVGVtcGVyYXR1cmUgU2Vuc29y IE91dHB1dCBOb3QgQXNzZXJ0ZWQiKSk7CisJc2VxX3ByaW50ZihtLCAiQWJvcnQgU3RhdHVz XHRcdDogJXNcbiIsCisJCSAgICgocmVnX3ZhbHVlICYgTVZNRTQxMDBfQUJPUlRfU1RBVFVT KSA/CisJCSAgICAiQWJvcnQgU3dpdGNoIEFzc2VydGVkIiA6ICJBYm9ydCBTd2l0Y2ggTm90 IEFzc2VydGVkIikpOworCisJLyogUHJlc2VuY2UgRGV0ZWN0IFJlZ2lzdGVyICovCisJcmVn X3ZhbHVlID0gcmVhZGIocmVnX2Jsb2NrICsgTVZNRTQxMDBfUFJFU0VOQ0VfREVURUNUX1JF R19PRkZTRVQpOworCisJc2VxX3ByaW50ZihtLCAiRVJEWTJcdFx0XHQ6ICVzXG4iLAorCQkg ICAoKHJlZ192YWx1ZSAmIE1WTUU0MTAwX0VSRFkyKSA/CisJCSAgICAiRVJEWTIgU2V0IiA6 ICJFUkRZMiBOb3QgU2V0IikpOworCXNlcV9wcmludGYobSwgIkVSRFkxXHRcdFx0OiAlc1xu IiwKKwkJICAgKChyZWdfdmFsdWUgJiBNVk1FNDEwMF9FUkRZMikgPworCQkgICAgIkVSRFkx IFNldCIgOiAiRVJEWTEgTm90IFNldCIpKTsKKwlzZXFfcHJpbnRmKG0sICJYTUNTUEFOXHRc dFx0OiAlc1xuIiwKKwkJICAgKChyZWdfdmFsdWUgJiBNVk1FNDEwMF9YTUNTUEFOX1BSRVNF TlQpID8KKwkJICAgICJYTUNTUEFOIEluc3RhbGxlZCIgOiAiWE1DU1BBTiBOb3QgSW5zdGFs bGVkIikpOworCXNlcV9wcmludGYobSwgIlBNQyBTaXRlIDJcdFx0OiAlc1xuIiwKKwkJICAg KChyZWdfdmFsdWUgJiBNVk1FNDEwMF9QTUMyX1BSRVNFTlQpID8KKwkJICAgICJQTUMgTW9k dWxlIEluc3RhbGxlZCIgOiAiUE1DIE1vZHVsZSBOb3QgSW5zdGFsbGVkIikpOworCXNlcV9w cmludGYobSwgIlBNQyBTaXRlIDFcdFx0OiAlc1xuIiwKKwkJICAgKChyZWdfdmFsdWUgJiBN Vk1FNDEwMF9QTUMxX1BSRVNFTlQpID8KKwkJICAgICJQTUMgTW9kdWxlIEluc3RhbGxlZCIg OiAiUE1DIE1vZHVsZSBOb3QgSW5zdGFsbGVkIikpOworCisJLyogUENJIEJ1cyAxIFN0YXR1 cyBSZWdpc3RlciAqLworCXJlZ192YWx1ZSA9IHJlYWRiKHJlZ19ibG9jayArIE1WTUU0MTAw X1BDSV9CVVNfMV9TVEFUVVNfUkVHX09GRlNFVCk7CisJc2VxX3ByaW50ZihtLCAiUENJIEJ1 cyBBIDY0IEJpdFx0OiAlc1xuIiwKKwkJICAgKChyZWdfdmFsdWUgJiBNVk1FNDEwMF9QQ0lf QlVTX0FfNjRCKSA/CisJCSAgICAiNjQgQml0IEVuYWJsZWQiIDogIjMyIEJpdCBNb2RlIikp OworCXNlcV9wcmludGYobSwgIlBDSSBCdXMgQSBQQ0ktWFx0XHQ6ICVzXG4iLAorCQkgICAo KHJlZ192YWx1ZSAmIE1WTUU0MTAwX1BDSV9CVVNfQV9QQ0lYKSA/CisJCSAgICAiUENJIE1v ZGUiIDogIlBDSS1YIE1vZGUiKSk7CisJc3dpdGNoIChyZWdfdmFsdWUgJiBNVk1FNDEwMF9Q Q0lfQlVTX0FfU1BEX01BU0spIHsKKwljYXNlIE1WTUU0MTAwX1BDSV9CVVNfQV9TUERfMTMz OgorCQlzcHJpbnRmKGJ1ZmYsICIxMzMgTUh6Iik7CisJCWJyZWFrOworCWNhc2UgTVZNRTQx MDBfUENJX0JVU19BX1NQRF8xMDA6CisJCXNwcmludGYoYnVmZiwgIjEwMCBNSHoiKTsKKwkJ YnJlYWs7CisJY2FzZSBNVk1FNDEwMF9QQ0lfQlVTX0FfU1BEXzY2OgorCQlzcHJpbnRmKGJ1 ZmYsICI2NiBNSHoiKTsKKwkJYnJlYWs7CisJY2FzZSBNVk1FNDEwMF9QQ0lfQlVTX0FfU1BE XzMzOgorCWRlZmF1bHQ6CisJCXNwcmludGYoYnVmZiwgIjMzIE1IeiIpOworCQlicmVhazsK Kwl9CisJc2VxX3ByaW50ZihtLCAiUENJIEJ1cyBBIFNwZWVkXHRcdDogJXNcbiIsIGJ1ZmYp OworCisJLyogUENJIEJ1cyAyIFN0YXR1cyBSZWdpc3RlciAqLworCXJlZ192YWx1ZSA9IHJl YWRiKHJlZ19ibG9jayArIE1WTUU0MTAwX1BDSV9CVVNfMl9TVEFUVVNfUkVHX09GRlNFVCk7 CisJaWYgKHJlZ192YWx1ZSAmIE1WTUU0MTAwX1BDSV9CVVNfQl8zXzNWX1ZJTykgeworCQlz ZXFfcHJpbnRmKG0sICJQQ0kgQnVzIEIgMy4zViBWSU9cdDogJXNcbiIsCisJCQkgICAiQ29u ZmlndXJlZCBmb3IgMy4zViBWSU8iKTsKKwl9OworCWlmIChyZWdfdmFsdWUgJiBNVk1FNDEw MF9QQ0lfQlVTX0JfNV8wVl9WSU8pIHsKKwkJc2VxX3ByaW50ZihtLCAiUENJIEJ1cyBCIDUu MFYgVklPXHQ6ICVzXG4iLAorCQkJICAgIkNvbmZpZ3VyZWQgZm9yIDUuMFYgVklPIik7CisJ fTsKKwlzZXFfcHJpbnRmKG0sICJQQ0kgQnVzIEIgNjQgQml0XHQ6ICVzXG4iLAorCQkgICAo KHJlZ192YWx1ZSAmIE1WTUU0MTAwX1BDSV9CVVNfQl82NEIpID8KKwkJICAgICI2NCBCaXQg RW5hYmxlZCIgOiAiMzIgQml0IE1vZGUiKSk7CisJc2VxX3ByaW50ZihtLCAiUENJIEJ1cyBC IFBDSS1YXHRcdDogJXNcbiIsCisJCSAgICgocmVnX3ZhbHVlICYgTVZNRTQxMDBfUENJX0JV U19CX1BDSVgpID8KKwkJICAgICJQQ0ktWCBNb2RlIiA6ICJQQ0kgTW9kZSIpKTsKKwlzd2l0 Y2ggKHJlZ192YWx1ZSAmIE1WTUU0MTAwX1BDSV9CVVNfQl9TUERfTUFTSykgeworCWNhc2Ug TVZNRTQxMDBfUENJX0JVU19CX1NQRF8xMzM6CisJCXNwcmludGYoYnVmZiwgIjEzMyBNSHoi KTsKKwkJYnJlYWs7CisJY2FzZSBNVk1FNDEwMF9QQ0lfQlVTX0JfU1BEXzEwMDoKKwkJc3By aW50ZihidWZmLCAiMTAwIE1IeiIpOworCQlicmVhazsKKwljYXNlIE1WTUU0MTAwX1BDSV9C VVNfQl9TUERfNjY6CisJCXNwcmludGYoYnVmZiwgIjY2IE1IeiIpOworCQlicmVhazsKKwlj YXNlIE1WTUU0MTAwX1BDSV9CVVNfQl9TUERfMzM6CisJZGVmYXVsdDoKKwkJc3ByaW50Zihi dWZmLCAiMzMgTUh6Iik7CisJCWJyZWFrOworCX0KKwlzZXFfcHJpbnRmKG0sICJQQ0kgQnVz IEIgU3BlZWRcdFx0OiAlc1xuIiwgYnVmZik7CisKKwkvKiBQQ0kgQnVzIDIgU3RhdHVzIFJl Z2lzdGVyICovCisJcmVnX3ZhbHVlID0gcmVhZGIocmVnX2Jsb2NrICsgTVZNRTQxMDBfUENJ X0JVU18zX1NUQVRVU19SRUdfT0ZGU0VUKTsKKwlzZXFfcHJpbnRmKG0sICJQQ0kgQnVzIEMg NjQgQml0XHQ6ICVzXG4iLAorCQkgICAoKHJlZ192YWx1ZSAmIE1WTUU0MTAwX1BDSV9CVVNf Q182NEIpID8KKwkJICAgICI2NCBCaXQgRW5hYmxlZCIgOiAiMzIgQml0IE1vZGUiKSk7CisJ c2VxX3ByaW50ZihtLCAiUENJIEJ1cyBDIFBDSS1YXHRcdDogJXNcbiIsCisJCSAgICgocmVn X3ZhbHVlICYgTVZNRTQxMDBfUENJX0JVU19DX1BDSVgpID8KKwkJICAgICJQQ0ktWCBNb2Rl IiA6ICJQQ0kgTW9kZSIpKTsKKwlzd2l0Y2ggKHJlZ192YWx1ZSAmIE1WTUU0MTAwX1BDSV9C VVNfQ19TUERfTUFTSykgeworCWNhc2UgTVZNRTQxMDBfUENJX0JVU19DX1NQRF8xMzM6CisJ CXNwcmludGYoYnVmZiwgIjEzMyBNSHoiKTsKKwkJYnJlYWs7CisJY2FzZSBNVk1FNDEwMF9Q Q0lfQlVTX0NfU1BEXzEwMDoKKwkJc3ByaW50ZihidWZmLCAiMTAwIE1IeiIpOworCQlicmVh azsKKwljYXNlIE1WTUU0MTAwX1BDSV9CVVNfQ19TUERfNjY6CisJCXNwcmludGYoYnVmZiwg IjY2IE1IeiIpOworCQlicmVhazsKKwljYXNlIE1WTUU0MTAwX1BDSV9CVVNfQ19TUERfMzM6 CisJZGVmYXVsdDoKKwkJc3ByaW50ZihidWZmLCAiMzMgTUh6Iik7CisJCWJyZWFrOworCX0K KwlzZXFfcHJpbnRmKG0sICJQQ0kgQnVzIEMgU3BlZWRcdFx0OiAlc1xuIiwgYnVmZik7CisK KwkvKiBOQU5EIEZsYXNoMSBDVFJMIFJlZ2lzdGVyICovCisJcmVnX3ZhbHVlID0gcmVhZGIo cmVnX2Jsb2NrICsgTVZNRTQxMDBfTkFORF9GTEFTSDFfQ1RSTF9SRUdfT0ZGU0VUKTsKKwlz ZXFfcHJpbnRmKG0sICJOQU5EIDEgQ09OVFJPTCBSZWdcdDogMHglMDJ4XG4iLCByZWdfdmFs dWUpOworCisJLyogTkFORCBGbGFzaDEgU0VMRUNUIFJlZ2lzdGVyICovCisJcmVnX3ZhbHVl ID0gcmVhZGIocmVnX2Jsb2NrICsgTVZNRTQxMDBfTkFORF9GTEFTSDFfU0VMRUNUX1JFR19P RkZTRVQpOworCXNlcV9wcmludGYobSwgIk5BTkQgMSBTRUxFQ1QgUmVnXHQ6IDB4JTAyeFxu IiwgcmVnX3ZhbHVlKTsKKworCS8qIE5BTkQgRmxhc2gxIFByZXNlbmNlIFJlZ2lzdGVyICov CisJcmVnX3ZhbHVlID0gcmVhZGIocmVnX2Jsb2NrICsgTVZNRTQxMDBfTkFORF9GTEFTSDFf UFJFU0VOQ0VfUkVHX09GRlNFVCk7CisJc2VxX3ByaW50ZihtLCAiTkFORCAxIFBSRVNFTkNF IFJlZ1x0OiAweCUwMnhcbiIsIHJlZ192YWx1ZSk7CisKKwkvKiBOQU5EIEZsYXNoMSBTVEFU VVMgUmVnaXN0ZXIgKi8KKwlyZWdfdmFsdWUgPSByZWFkYihyZWdfYmxvY2sgKyBNVk1FNDEw MF9OQU5EX0ZMQVNIMV9TVEFUVVNfUkVHX09GRlNFVCk7CisJc2VxX3ByaW50ZihtLCAiTkFO RCAxIFNUQVRVUyBSZWdcdDogMHglMDJ4XG4iLCByZWdfdmFsdWUpOworCisJLyogTkFORCBG bGFzaDIgQ1RSTCBSZWdpc3RlciAqLworCXJlZ192YWx1ZSA9IHJlYWRiKHJlZ19ibG9jayAr IE1WTUU0MTAwX05BTkRfRkxBU0gyX0NUUkxfUkVHX09GRlNFVCk7CisJc2VxX3ByaW50Ziht LCAiTkFORCAyIENPTlRST0wgUmVnXHQ6IDB4JTAyeFxuIiwgcmVnX3ZhbHVlKTsKKworCS8q IE5BTkQgRmxhc2gyIFNFTEVDVCBSZWdpc3RlciAqLworCXJlZ192YWx1ZSA9IHJlYWRiKHJl Z19ibG9jayArIE1WTUU0MTAwX05BTkRfRkxBU0gyX1NFTEVDVF9SRUdfT0ZGU0VUKTsKKwlz ZXFfcHJpbnRmKG0sICJOQU5EIDIgU0VMRUNUIFJlZ1x0OiAweCUwMnhcbiIsIHJlZ192YWx1 ZSk7CisKKwkvKiBOQU5EIEZsYXNoMiBQcmVzZW5jZSBSZWdpc3RlciAqLworCXJlZ192YWx1 ZSA9IHJlYWRiKHJlZ19ibG9jayArIE1WTUU0MTAwX05BTkRfRkxBU0gyX1BSRVNFTkNFX1JF R19PRkZTRVQpOworCXNlcV9wcmludGYobSwgIk5BTkQgMiBQUkVTRU5DRSBSZWdcdDogMHgl MDJ4XG4iLCByZWdfdmFsdWUpOworCisJLyogTkFORCBGbGFzaDIgU1RBVFVTIFJlZ2lzdGVy ICovCisJcmVnX3ZhbHVlID0gcmVhZGIocmVnX2Jsb2NrICsgTVZNRTQxMDBfTkFORF9GTEFT SDJfU1RBVFVTX1JFR19PRkZTRVQpOworCXNlcV9wcmludGYobSwgIk5BTkQgMiBTVEFUVVMg UmVnXHQ6IDB4JTAyeFxuIiwgcmVnX3ZhbHVlKTsKKworCS8qIFBMRCBSZXZpc2lvbiBSZWdp c3RlciAqLworCXJlZ192YWx1ZSA9IHJlYWRiKHJlZ19ibG9jayArIE1WTUU0MTAwX1BMRF9S RVZJU0lPTl9SRUdfT0ZGU0VUKTsKKworCXNlcV9wcmludGYobSwgIlBMRCBSZXZpc2lvblx0 XHQ6IDB4JXhcbiIsIHJlZ192YWx1ZSk7CisKKwkvKiBQTEQgRGF0ZSBDb2RlIFJlZ2lzdGVy ICovCisJcmVnMzJfdmFsdWUgPSByZWFkbChyZWdfYmxvY2sgKyBNVk1FNDEwMF9QTERfREFU RV9DT0RFX1JFR19PRkZTRVQpOworCXNlcV9wcmludGYobSwgIlBMRCBEYXRlIENvZGVcdFx0 OiAweCUwOHhcbiIsCisJCSAgICgoKHJlZzMyX3ZhbHVlICYgMHgwMDAwMDBmZlUpIDw8IDI0 KSB8CisJCSAgICAoKHJlZzMyX3ZhbHVlICYgMHgwMDAwZmYwMFUpIDw8IDgpIHwKKwkJICAg ICgocmVnMzJfdmFsdWUgJiAweDAwZmYwMDAwVSkgPj4gOCkgfAorCQkgICAgKChyZWczMl92 YWx1ZSAmIDB4ZmYwMDAwMDBVKSA+PiAyNCkpKTsKKworCWlvdW5tYXAocmVnX2Jsb2NrKTsK KworCXJldHVybjsKK30KKworCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBfX2luaXRk YXRhIG9mX2J1c19pZHNbXSA9IHsKKwl7LnR5cGUgPSAic29jIix9LAorICAgICAgICB7IC5j b21wYXRpYmxlID0gInNpbXBsZS1idXMiLCB9LAorCXt9LAorfTsKKworc3RhdGljIGludCBf X2luaXQgZGVjbGFyZV9vZl9wbGF0Zm9ybV9kZXZpY2VzKHZvaWQpCit7CisJb2ZfcGxhdGZv cm1fYnVzX3Byb2JlKE5VTEwsIG9mX2J1c19pZHMsIE5VTEwpOworCisJcmV0dXJuIDA7Cit9 CisKK21hY2hpbmVfZGV2aWNlX2luaXRjYWxsKG12bWU0MTAwLCBkZWNsYXJlX29mX3BsYXRm b3JtX2RldmljZXMpOworCisvKgorICogQ2FsbGVkIHZlcnkgZWFybHksIGRldmljZS10cmVl IGlzbid0IHVuZmxhdHRlbmVkCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IG12bWU0MTAwX3By b2JlKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyByb290ID0gb2ZfZ2V0X2ZsYXRfZHRfcm9v dCgpOworCisJaWYgKG9mX2ZsYXRfZHRfaXNfY29tcGF0aWJsZShyb290LCAiTVZNRTQxMDAi KSkKKwkJcmV0dXJuIDE7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworZGVmaW5lX21hY2hp bmUobXZtZTQxMDApCit7CisJLm5hbWUgPSAiTVZNRTQxMDAiLAorCS5wcm9iZSA9IG12bWU0 MTAwX3Byb2JlLAorCS5zZXR1cF9hcmNoID0gbXZtZTQxMDBfc2V0dXBfYXJjaCwKKwkuaW5p dF9JUlEgPSBtdm1lNDEwMF9pbml0X2lycSwKKwkuc2hvd19jcHVpbmZvID0gbXZtZTQxMDBf c2hvd19jcHVpbmZvLAorCS5nZXRfaXJxID0gbXBpY19nZXRfaXJxLAorCS5yZXN0YXJ0ID0g bXZtZTQxMDBfcmVzdGFydCwKKwkucGNpYmlvc19maXh1cCA9IG12bWU0MTAwX3BjaWJpb3Nf Zml4dXAsCisJLnBjaWJpb3NfZml4dXBfYnVzID0gbXZtZTQxMDBfcGNpYmlvc19maXh1cF9i dXMsCisJLmNhbGlicmF0ZV9kZWNyID0gZ2VuZXJpY19jYWxpYnJhdGVfZGVjciwKKwkucHJv Z3Jlc3MgPSB1ZGJnX3Byb2dyZXNzLAorfTsKZGlmZiAtdSAtLW5ldy1maWxlIC0tcmVjdXJz aXZlIGxpbnV4LTIuNi4yOS42Lm9yaWcvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L212 bWU0MTAwLmggbGludXgtMi42LjI5LjYubW9kL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4 eC9tdm1lNDEwMC5oCi0tLSBsaW51eC0yLjYuMjkuNi5vcmlnL2FyY2gvcG93ZXJwYy9wbGF0 Zm9ybXMvODV4eC9tdm1lNDEwMC5oCTE5NjktMTItMzEgMTc6MDA6MDAuMDAwMDAwMDAwIC0w NzAwCisrKyBsaW51eC0yLjYuMjkuNi5tb2QvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4 L212bWU0MTAwLmgJMjAwOS0wNy0yMSAxMToyODoxNy4wMDAwMDAwMDAgLTA3MDAKQEAgLTAs MCArMSwxOTIgQEAKKy8qCisgKiBNVk1FNDEwMCBib2FyZCBkZWZpbml0aW9ucworICoKKyAq IEF1dGhvcjogQWppdCBQcmVtIDxhaml0LnByZW1AZW1lcnNvbi5jb20+CisgKgorICogQ29w eXJpZ2h0IDIwMDggRW1lcnNvbiBOZXR3b3JrIFBvd2VyIC0gRW1iZWRkZWQgQ29tcHV0aW5n CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0 aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAq IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBM aWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq CisgKi8KKworI2lmbmRlZiBfX01WTUU0MTAwX0hfXworI2RlZmluZSBfX01WTUU0MTAwX0hf XworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisKKy8qIEZsYXNoICovCisjZGVmaW5l IE1WTUU0MTAwX0ZMQVNIX0JBU0UJMHhmODAwMDAwMAorI2RlZmluZSBNVk1FNDEwMF9GTEFT SF9TSVpFCTB4MDgwMDAwMDAKKworCisvKiBTeXN0ZW0gQ29udHJvbCBhbmQgU3RhdHVzIFJl Z2lzdGVycyAqLworI2RlZmluZSBNVk1FNDEwMF9TWVNURU1fU1RBVFVTX1JFRwkJMHhGMjAw MDAwMAorI2RlZmluZSBNVk1FNDEwMF9TWVNURU1fQ09OVFJPTF9SRUcJCTB4RjIwMDAwMDEK KyNkZWZpbmUgTVZNRTQxMDBfU1RBVFVTX0lORElDQVRPUl9SRUcJCTB4RjIwMDAwMDIKKyNk ZWZpbmUgTVZNRTQxMDBfTk9SX0ZMQVNIX0NUUkxfU1RBVF9SRUcJMHhGMjAwMDAwMworI2Rl ZmluZSBNVk1FNDEwMF9JTlRFUlJVUFRfUkVHXzEJCTB4RjIwMDAwMDQKKyNkZWZpbmUgTVZN RTQxMDBfSU5URVJSVVBUX1JFR18yCQkweEYyMDAwMDA1CisjZGVmaW5lIE1WTUU0MTAwX1BS RVNFTkNFX0RFVEVDVF9SRUcJCTB4RjIwMDAwMDYKKyNkZWZpbmUgTVZNRTQxMDBfUENJX0JV U18xX1NUQVRVU19SRUcJCTB4RjIwMDAwMDgKKyNkZWZpbmUgTVZNRTQxMDBfUENJX0JVU18y X1NUQVRVU19SRUcJCTB4RjIwMDAwMDkKKyNkZWZpbmUgTVZNRTQxMDBfUENJX0JVU18zX1NU QVRVU19SRUcJCTB4RjIwMDAwMEEKKyNkZWZpbmUgTVZNRTQxMDBfTkFORF9GTEFTSDFfQ09O VFJPTF9SRUcJMHhGMjAwMDAxMAorI2RlZmluZSBNVk1FNDEwMF9OQU5EX0ZMQVNIMV9TRUxF Q1RfUkVHCQkweEYyMDAwMDExCisjZGVmaW5lIE1WTUU0MTAwX05BTkRfRkxBU0gxX1BSRVNF TkNFX1JFRwkweEYyMDAwMDE0CisjZGVmaW5lIE1WTUU0MTAwX05BTkRfRkxBU0gxX1NUQVRV U19SRUcJCTB4RjIwMDAwMTUKKyNkZWZpbmUgTVZNRTQxMDBfTkFORF9GTEFTSDFfREFUQV9S RUcJCTB4RjIwMzAwMDAKKyNkZWZpbmUgTVZNRTQxMDBfTkFORF9GTEFTSDJfQ09OVFJPTF9S RUcJMHhGMjAwMDAxOAorI2RlZmluZSBNVk1FNDEwMF9OQU5EX0ZMQVNIMl9TRUxFQ1RfUkVH CQkweEYyMDAwMDE5CisjZGVmaW5lIE1WTUU0MTAwX05BTkRfRkxBU0gyX1BSRVNFTkNFX1JF RwkweEYyMDAwMDFDCisjZGVmaW5lIE1WTUU0MTAwX05BTkRfRkxBU0gyX1NUQVRVU19SRUcJ CTB4RjIwMDAwMUQKKyNkZWZpbmUgTVZNRTQxMDBfTkFORF9GTEFTSDJfREFUQV9SRUcJCTB4 RjIwMzEwMDAKKyNkZWZpbmUgTVZNRTQxMDBfV0FUQ0hET0dfVElNRVJfTE9BRF9SRUcJMHhG MjAwMDAyMAorI2RlZmluZSBNVk1FNDEwMF9XQVRDSERPR19DT05UUk9MX1JFRwkJMHhGMjAw MDAyNAorI2RlZmluZSBNVk1FNDEwMF9XQVRDSERPR19USU1FUl9SRVNPTFVUSU9OX1JFRwkw eEYyMDAwMDI1CisjZGVmaW5lIE1WTUU0MTAwX1dBVENIRE9HX1RJTUVSX0NPVU5UX1JFRwkw eEYyMDAwMDI2CisjZGVmaW5lIE1WTUU0MTAwX1BMRF9SRVZJU0lPTl9SRUcJCTB4RjIwMDAw MzAKKyNkZWZpbmUgTVZNRTQxMDBfUExEX0RBVEVfQ09ERV9SRUcJCTB4RjIwMDAwMzQKKyNk ZWZpbmUgTVZNRTQxMDBfVEVTVF8xX1JFRwkJCTB4RjIwMDAwMzgKKyNkZWZpbmUgTVZNRTQx MDBfVEVTVF8yX1JFRwkJCTB4RjIwMDAwM0MKKworLyogUmVnaXN0ZXIgb2Zmc2V0cyAqLwor I2RlZmluZSBNVk1FNDEwMF9TWVNURU1fU1RBVFVTX1JFR19PRkZTRVQJCTB4MDAwMDAwMDAK KyNkZWZpbmUgTVZNRTQxMDBfU1lTVEVNX0NPTlRST0xfUkVHX09GRlNFVAkJMHgwMDAwMDAw MQorI2RlZmluZSBNVk1FNDEwMF9TVEFUVVNfSU5ESUNBVE9SX1JFR19PRkZTRVQJCTB4MDAw MDAwMDIKKyNkZWZpbmUgTVZNRTQxMDBfTk9SX0ZMQVNIX0NUUkxfU1RBVF9SRUdfT0ZGU0VU CQkweDAwMDAwMDAzCisjZGVmaW5lIE1WTUU0MTAwX0lOVEVSUlVQVF9SRUdfMV9PRkZTRVQJ CQkweDAwMDAwMDA0CisjZGVmaW5lIE1WTUU0MTAwX0lOVEVSUlVQVF9SRUdfMl9PRkZTRVQJ CQkweDAwMDAwMDA1CisjZGVmaW5lIE1WTUU0MTAwX1BSRVNFTkNFX0RFVEVDVF9SRUdfT0ZG U0VUCQkweDAwMDAwMDA2CisjZGVmaW5lIE1WTUU0MTAwX1BDSV9CVVNfMV9TVEFUVVNfUkVH X09GRlNFVAkJMHgwMDAwMDAwOAorI2RlZmluZSBNVk1FNDEwMF9QQ0lfQlVTXzJfU1RBVFVT X1JFR19PRkZTRVQJCTB4MDAwMDAwMDkKKyNkZWZpbmUgTVZNRTQxMDBfUENJX0JVU18zX1NU QVRVU19SRUdfT0ZGU0VUCQkweDAwMDAwMDBBCisjZGVmaW5lIE1WTUU0MTAwX05BTkRfRkxB U0gxX0NUUkxfUkVHX09GRlNFVAkJMHgwMDAwMDAxMAorI2RlZmluZSBNVk1FNDEwMF9OQU5E X0ZMQVNIMV9TRUxFQ1RfUkVHX09GRlNFVAkJMHgwMDAwMDAxMQorI2RlZmluZSBNVk1FNDEw MF9OQU5EX0ZMQVNIMV9QUkVTRU5DRV9SRUdfT0ZGU0VUCTB4MDAwMDAwMTQKKyNkZWZpbmUg TVZNRTQxMDBfTkFORF9GTEFTSDFfU1RBVFVTX1JFR19PRkZTRVQJCTB4MDAwMDAwMTUKKyNk ZWZpbmUgTVZNRTQxMDBfTkFORF9GTEFTSDJfQ1RSTF9SRUdfT0ZGU0VUCQkweDAwMDAwMDE4 CisjZGVmaW5lIE1WTUU0MTAwX05BTkRfRkxBU0gyX1NFTEVDVF9SRUdfT0ZGU0VUCQkweDAw MDAwMDE5CisjZGVmaW5lIE1WTUU0MTAwX05BTkRfRkxBU0gyX1BSRVNFTkNFX1JFR19PRkZT RVQJMHgwMDAwMDAxQworI2RlZmluZSBNVk1FNDEwMF9OQU5EX0ZMQVNIMl9TVEFUVVNfUkVH X09GRlNFVAkJMHgwMDAwMDAxRAorI2RlZmluZSBNVk1FNDEwMF9XQVRDSERPR19USU1FUl9M T0FEX1JFR19PRkZTRVQJCTB4MDAwMDAwMjAKKyNkZWZpbmUgTVZNRTQxMDBfV0FUQ0hET0df Q09OVFJPTF9SRUdfT0ZGU0VUCQkweDAwMDAwMDI0CisjZGVmaW5lIE1WTUU0MTAwX1dBVENI RE9HX1RJTUVSX1JFU09MVVRJT05fUkVHX09GRlNFVAkweDAwMDAwMDI1CisjZGVmaW5lIE1W TUU0MTAwX1dBVENIRE9HX1RJTUVSX0NPVU5UX1JFR19PRkZTRVQJMHgwMDAwMDAyNgorI2Rl ZmluZSBNVk1FNDEwMF9QTERfUkVWSVNJT05fUkVHX09GRlNFVAkJMHgwMDAwMDAzMAorI2Rl ZmluZSBNVk1FNDEwMF9QTERfREFURV9DT0RFX1JFR19PRkZTRVQJCTB4MDAwMDAwMzQKKyNk ZWZpbmUgTVZNRTQxMDBfVEVTVF8xX1JFR19PRkZTRVQJCQkweDAwMDAwMDM4CisjZGVmaW5l IE1WTUU0MTAwX1RFU1RfMl9SRUdfT0ZGU0VUCQkJMHgwMDAwMDAzQworCisvKiBTeXN0ZW0g U3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIE1WTUU0MTAwX1NUQVRFX1NXOAkJMHg4MAor I2RlZmluZSBNVk1FNDEwMF9TVEFURV9TVzcJCTB4NDAKKyNkZWZpbmUgTVZNRTQxMDBfU1RB VEVfU1c2CQkweDIwCisjZGVmaW5lIE1WTUU0MTAwX1NUQVRFX1NXNQkJMHgxMAorI2RlZmlu ZSBNVk1FNDEwMF9TQUZFX1NUQVJUCQkweDA4CisjZGVmaW5lIE1WTUU0MTAwX0JPQVJEX1RZ UEVfTUFTSwkweDAzCisjZGVmaW5lIE1WTUU0MTAwX0JPQVJEX1RZUEVfUFJQTUMJMHgwMQor I2RlZmluZSBNVk1FNDEwMF9CT0FSRF9UWVBFX1ZNRQkJMHgwMAorCisvKiBTeXN0ZW0gQ29u dHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBNVk1FNDEwMF9CT0FSRF9SRVNFVAkJMHhBMAor I2RlZmluZSBNVk1FNDEwMF9FRVBST01fV1AJCTB4MDIKKworLyogU3RhdHVzIEluZGljYXRv ciBSZWdpc3RlciAqLworI2RlZmluZSBNVk1FNDEwMF9VU1IxX1JFRF9MRUQJCTB4MDEKKyNk ZWZpbmUgTVZNRTQxMDBfVVNSMV9ZRUxMT1dfTEVECTB4MDIKKyNkZWZpbmUgTVZNRTQxMDBf VVNSMl9MRUQJCTB4MDQKKyNkZWZpbmUgTVZNRTQxMDBfVVNSM19MRUQJCTB4MDgKKworLyog Tk9SIEZsYXNoIENvbnRyb2wvU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIE1WTUU0MTAw X05PUl9GTEFTSF9NQVBfU0VMRUNUCTB4MTAKKyNkZWZpbmUgTVZNRTQxMDBfTk9SX0ZMQVNI X1dQX1NXCTB4MDgKKyNkZWZpbmUgTVZNRTQxMDBfTk9SX0ZMQVNIX1dQX0hXCTB4MDQKKyNk ZWZpbmUgTVZNRTQxMDBfTk9SX0ZMQVNIX0JMS19TRUwJMHgwMgorI2RlZmluZSBNVk1FNDEw MF9OT1JfRkxBU0hfUkRZCQkweDAxCisKKy8qIEludGVycnVwdCBSZWdpc3RlciAxICovCisj ZGVmaW5lIE1WTUU0MTAwX1RTRUM0X1BIWV9JTlRFUlJVUFQJMHgwOAorI2RlZmluZSBNVk1F NDEwMF9UU0VDM19QSFlfSU5URVJSVVBUCTB4MDQKKyNkZWZpbmUgTVZNRTQxMDBfVFNFQzJf UEhZX0lOVEVSUlVQVAkweDAyCisjZGVmaW5lIE1WTUU0MTAwX1RTRUMxX1BIWV9JTlRFUlJV UFQJMHgwMQorCisvKiBJbnRlcnJ1cHQgUmVnaXN0ZXIgMiAqLworI2RlZmluZSBNVk1FNDEw MF9SVENfTUFTSwkJMHg0MAorI2RlZmluZSBNVk1FNDEwMF9URU1QX01BU0sJCTB4MjAKKyNk ZWZpbmUgTVZNRTQxMDBfQUJPUlRfTUFTSwkJMHgxMAorI2RlZmluZSBNVk1FNDEwMF9SVENf U1RBVFVTCQkweDA0CisjZGVmaW5lIE1WTUU0MTAwX1RFTVBfU1RBVFVTCQkweDAyCisjZGVm aW5lIE1WTUU0MTAwX0FCT1JUX1NUQVRVUwkJMHgwMQorCisvKiBQcmVzZW5jZSBEZXRlY3Qg UmVnaXN0ZXIgKi8KKyNkZWZpbmUgTVZNRTQxMDBfRVJEWTIJCQkweDIwCisjZGVmaW5lIE1W TUU0MTAwX0VSRFkxCQkJMHgxMAorI2RlZmluZSBNVk1FNDEwMF9YTUNTUEFOX1BSRVNFTlQJ MHgwNAorI2RlZmluZSBNVk1FNDEwMF9QTUMyX1BSRVNFTlQJCTB4MDIKKyNkZWZpbmUgTVZN RTQxMDBfUE1DMV9QUkVTRU5UCQkweDAxCisKKy8qIFBDSSBCdXMgMSBTdGF0dXMgUmVnaXN0 ZXIgKi8KKyNkZWZpbmUgTVZNRTQxMDBfUENJX0JVU19BXzY0QiAgICAgICAgICAweDA4Cisj ZGVmaW5lIE1WTUU0MTAwX1BDSV9CVVNfQV9QQ0lYICAgICAgICAgMHgwNAorI2RlZmluZSBN Vk1FNDEwMF9QQ0lfQlVTX0FfU1BEX01BU0sgICAgIDB4MDMKKyNkZWZpbmUgTVZNRTQxMDBf UENJX0JVU19BX1NQRF8xMzMgICAgICAweDAzCisjZGVmaW5lIE1WTUU0MTAwX1BDSV9CVVNf QV9TUERfMTAwICAgICAgMHgwMgorI2RlZmluZSBNVk1FNDEwMF9QQ0lfQlVTX0FfU1BEXzY2 ICAgICAgIDB4MDEKKyNkZWZpbmUgTVZNRTQxMDBfUENJX0JVU19BX1NQRF8zMyAgICAgICAw eDAwCisKKy8qIFBDSSBCdXMgMiBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTVZNRTQx MDBfUENJX0JVU19CXzNfM1ZfVklPICAgICAweDgwCisjZGVmaW5lIE1WTUU0MTAwX1BDSV9C VVNfQl81XzBWX1ZJTyAgICAgMHg0MAorI2RlZmluZSBNVk1FNDEwMF9QQ0lfQlVTX0JfNjRC ICAgICAgICAgIDB4MDgKKyNkZWZpbmUgTVZNRTQxMDBfUENJX0JVU19CX1BDSVggICAgICAg ICAweDA0CisjZGVmaW5lIE1WTUU0MTAwX1BDSV9CVVNfQl9TUERfTUFTSyAgICAgMHgwMwor I2RlZmluZSBNVk1FNDEwMF9QQ0lfQlVTX0JfU1BEXzEzMyAgICAgIDB4MDMKKyNkZWZpbmUg TVZNRTQxMDBfUENJX0JVU19CX1NQRF8xMDAgICAgICAweDAyCisjZGVmaW5lIE1WTUU0MTAw X1BDSV9CVVNfQl9TUERfNjYgICAgICAgMHgwMQorI2RlZmluZSBNVk1FNDEwMF9QQ0lfQlVT X0JfU1BEXzMzICAgICAgIDB4MDAKKworCisvKiBQQ0kgQnVzIDMgU3RhdHVzIFJlZ2lzdGVy ICovCisjZGVmaW5lIE1WTUU0MTAwX1BDSV9CVVNfQ182NEIgICAgICAgICAgMHgwOAorI2Rl ZmluZSBNVk1FNDEwMF9QQ0lfQlVTX0NfUENJWCAgICAgICAgIDB4MDQKKyNkZWZpbmUgTVZN RTQxMDBfUENJX0JVU19DX1NQRF9NQVNLICAgICAweDAzCisjZGVmaW5lIE1WTUU0MTAwX1BD SV9CVVNfQ19TUERfMTMzICAgICAgMHgwMworI2RlZmluZSBNVk1FNDEwMF9QQ0lfQlVTX0Nf U1BEXzEwMCAgICAgIDB4MDIKKyNkZWZpbmUgTVZNRTQxMDBfUENJX0JVU19DX1NQRF82NiAg ICAgICAweDAxCisjZGVmaW5lIE1WTUU0MTAwX1BDSV9CVVNfQ19TUERfMzMgICAgICAgMHgw MAorCisKKy8qIE5BTkQgRmxhc2ggQ2hpcCBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5l IE1WTUU0MTAwX05BTkRfRkxBU0hfQ0xFCQkweDgwCisjZGVmaW5lIE1WTUU0MTAwX05BTkRf RkxBU0hfQUxFCQkweDQwCisjZGVmaW5lIE1WTUU0MTAwX05BTkRfRkxBU0hfV1AJCTB4MjAK KworLyogTkFORCBGbGFzaCBDaGlwIFNlbGVjdCBSZWdpc3RlciAqLworI2RlZmluZSBNVk1F NDEwMF9OQU5EX0ZMQVNIX0NFMQkJMHg4MAorI2RlZmluZSBNVk1FNDEwMF9OQU5EX0ZMQVNI X0NFMgkJMHg0MAorI2RlZmluZSBNVk1FNDEwMF9OQU5EX0ZMQVNIX0NFMwkJMHgyMAorI2Rl ZmluZSBNVk1FNDEwMF9OQU5EX0ZMQVNIX0NFNAkJMHgxMAorCisvKiBOQU5EIEZsYXNoIENo aXAgUHJlc2VuY2UgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTVZNRTQxMDBfTkFORF9GTEFTSF9D UAkJMHg4MAorCisvKiBOQU5EIEZsYXNoIENoaXAgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVm aW5lIE1WTUU0MTAwX05BTkRfRkxBU0hfUkIxCQkweDgwCisjZGVmaW5lIE1WTUU0MTAwX05B TkRfRkxBU0hfUkIyCQkweDQwCisjZGVmaW5lIE1WTUU0MTAwX05BTkRfRkxBU0hfUkIzCQkw eDIwCisjZGVmaW5lIE1WTUU0MTAwX05BTkRfRkxBU0hfUkI0CQkweDEwCisKKyNkZWZpbmUg TVZNRTQxMDBfQkFTRV9CQVVECQkxODQzMjAwCisjZGVmaW5lIFFVQVJUX0JBU0VfQkFVRAkJ CShNVk1FNDEwMF9CQVNFX0JBVUQgLyAxNikKKyNkZWZpbmUgTVZNRTQxMDBfVUFSVF9TSVpF CQkweDgKKworI2RlZmluZSBNVk1FNDEwMF9TRVJJQUxfMQkweEYyMDExMDAwVQorI2RlZmlu ZSBNVk1FNDEwMF9TRVJJQUxfMgkweEYyMDEyMDAwVQorI2RlZmluZSBNVk1FNDEwMF9TRVJJ QUxfMwkweEYyMDEzMDAwVQorI2RlZmluZSBNVk1FNDEwMF9TRVJJQUxfNAkweEYyMDE0MDAw VQorCisjZW5kaWYJLyogX19NVk1FNDEwMF9IX18gKi8KZGlmZiAtdSAtLW5ldy1maWxlIC0t cmVjdXJzaXZlIGxpbnV4LTIuNi4yOS42Lm9yaWcvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84 NXh4L212bWU0MTAwX3RpbWVyLmMgbGludXgtMi42LjI5LjYubW9kL2FyY2gvcG93ZXJwYy9w bGF0Zm9ybXMvODV4eC9tdm1lNDEwMF90aW1lci5jCi0tLSBsaW51eC0yLjYuMjkuNi5vcmln L2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tdm1lNDEwMF90aW1lci5jCTE5NjktMTIt MzEgMTc6MDA6MDAuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYuMjkuNi5tb2QvYXJj aC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L212bWU0MTAwX3RpbWVyLmMJMjAwOS0wNy0yMSAx MToyODoxNy4wMDAwMDAwMDAgLTA3MDAKQEAgLTAsMCArMSwzOTQgQEAKKy8qCisgKiBhcmNo L3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXZtZTQxMDBfdGltZXIuYworICoKKyAqIE1WTUU0 MTAwIFRpY2sgVGltZXJzIFN1cHBvcnQKKyAqCisgKiBBdXRob3I6IEFqaXQgUHJlbSA8QWpp dC5QcmVtQG1vdG9yb2xhLmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgMjAwNS0yMDA3IE1vdG9y b2xhIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh biByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVy bXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5 IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBv ZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJz aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51 eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4 L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKworI2luY2x1ZGUg PGFzbS9pby5oPgorI2luY2x1ZGUgIm12bWU0MTAwLmgiCisjaW5jbHVkZSA8YXNtL212bWU0 MTAwX3RpbWVyLmg+CisKKyNkZWZpbmUgTVZNRTQxMDBfVElDS19USU1FUl9CQVNFICAgICAg ICAgICAgICAgIDB4RjIwMjAwMDAKKyNkZWZpbmUgTVZNRTQxMDBfVElDS19USU1FUl9CTE9D S19TSVpFICAgICAgICAgIDB4NEMKKworI2RlZmluZSBNVk1FNDEwMF9USUNLX1RJTUVSX1BS RVNDQUxFUl9SRUdfT0ZGU0VUICAgICAgICAweDAKKyNkZWZpbmUgTVZNRTQxMDBfVElDS19U SU1FUl9DT05UUk9MX1JFR19PRkZTRVQgICAgICAgICAgMHgxMAorI2RlZmluZSBNVk1FNDEw MF9USUNLX1RJTUVSX0NPTVBBUkVfUkVHX09GRlNFVCAgICAgICAgICAweDE0CisjZGVmaW5l IE1WTUU0MTAwX1RJQ0tfVElNRVJfQ09VTlRFUl9SRUdfT0ZGU0VUICAgICAgICAgIDB4MTgK KworI2RlZmluZSBNVk1FNDEwMF9USUNLX1RJTUVSX0VOQyAgICAgICAgICAgICAgICAgMHgw MDAwMDAwMQorI2RlZmluZSBNVk1FNDEwMF9USUNLX1RJTUVSX0NPQyAgICAgICAgICAgICAg ICAgMHgwMDAwMDAwMgorI2RlZmluZSBNVk1FNDEwMF9USUNLX1RJTUVSX0NPVkYgICAgICAg ICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBNVk1FNDEwMF9USUNLX1RJTUVSX09WRiAg ICAgICAgICAgICAgICAgMHgwMDAwMDBGMAorI2RlZmluZSBNVk1FNDEwMF9USUNLX1RJTUVS X0VOSU5UICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBNVk1FNDEwMF9USUNL X1RJTUVSX0NJTlQgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBNVk1FNDEw MF9USUNLX1RJTUVSX0lOVFMgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorCisjZGVmaW5l CU1JTl9NSUNST1NFQ09ORFMJMTAwMDAKKyNkZWZpbmUgTUFYX1RJQ0tTCQkweEZGRkZGRkZG CisKK3N0cnVjdCBtdm1lNDEwMF90aW1lcl90IHsKKwltdm1lNDEwMF90aW1lcl9mIGZ1bmM7 CisJdm9pZCAqZnVuY19kYXRhOworCWludCBzdGFydGVkOworCWludCBwZXJpb2RpYzsKKwl1 bG9uZyBwZXJpb2Q7CisJdWxvbmcgdGlja3M7Cit9OworCisjZGVmaW5lIEFMTF9NU0cgIm12 bWU0MTAwX3RpbWVyOiAiCisKKyNpZmRlZiBNVk1FNDEwMF9USU1FUl9ERUJVRworaW50IG12 bWU0MTAwX3RpbWVyX2RlYnVnID0gTVZNRTQxMDBfVElNRVJfREVCVUc7CitNT0RVTEVfUEFS TShtdm1lNDEwMF90aW1lcl9kZWJ1ZywgImkiKTsKKyNkZWZpbmUgREVCVUcobiwgZm10LCBh cmdzLi4uKSBpZiAobXZtZTQxMDBfdGltZXJfZGVidWc+KG4pKSBwcmludGsoS0VSTl9JTkZP IEFMTF9NU0cgZm10LCAjIyBhcmdzKQorc3RhdGljIGNvbnN0IGNoYXIgKnZlcnNpb24gPSAi bXZtZTQxMDBfdGltZXIuYyAxLjAuMCAoQWppdCBQcmVtKSI7CisjZWxzZQorI2RlZmluZSBE RUJVRyhuLCBmbXQsIGFyZ3MuLi4pCisjZW5kaWYKKworZXh0ZXJuIGludCBtdm1lNDEwMF90 aW1lcl9pcnE7CisKK3N0YXRpYyBzdHJ1Y3QgbXZtZTQxMDBfdGltZXJfdCBtdm1lNDEwMF90 aW1lcls0XTsKK3N0YXRpYyB2b2lkIF9faW9tZW0gKm12bWU0MTAwX3RpbWVyX2Jhc2U7Citz dGF0aWMgdTMyIGNsa19vdXQgPSAxOwkJLyogVGlja3MgcGVyIG1pY3Jvc2Vjb25kICovCitz dGF0aWMgc3BpbmxvY2tfdCBtdm1lNDEwMF90aW1lcl9sb2NrID0gU1BJTl9MT0NLX1VOTE9D S0VEOworCitzdGF0aWMgaXJxcmV0dXJuX3QgbXZtZTQxMDBfdGltZXJfaW50X2hhbmRsZXIo aW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbXZtZTQxMDBfdGltZXJfdCAqaW5m byA9IGRhdGE7CisJbXZtZTQxMDBfdGltZXJfZiBmdW5jOworCXZvaWQgKmZ1bmNfZGF0YTsK KwlpbnQgdGltZXJfbnVtYmVyOworCXUzMiBjdHJsX3JlZzsKKworCWlmIChkYXRhICE9ICh2 b2lkICopICZtdm1lNDEwMF90aW1lclswXSkgCisJCXJldHVybiBJUlFfTk9ORTsKKworCWZv ciAodGltZXJfbnVtYmVyID0gMDsgdGltZXJfbnVtYmVyIDw9IDM7IHRpbWVyX251bWJlcisr KSB7CisJCWlmIChzd2FiMzIocmVhZGwobXZtZTQxMDBfdGltZXJfYmFzZSArCisJCQkgKHRp bWVyX251bWJlciArIDEpICoKKwkJCSBNVk1FNDEwMF9USUNLX1RJTUVSX0NPTlRST0xfUkVH X09GRlNFVCkpICYKKwkJICAgCSBNVk1FNDEwMF9USUNLX1RJTUVSX0lOVFMpIHsKKwkJCWlu Zm8gPSAmbXZtZTQxMDBfdGltZXJbdGltZXJfbnVtYmVyXTsKKwkJCWZ1bmNfZGF0YSA9IGlu Zm8tPmZ1bmNfZGF0YTsKKwkJCWZ1bmMgPSBpbmZvLT5mdW5jOworCisJCQlpZiAoIWluZm8t PnBlcmlvZGljKSB7CisJCQkJbXZtZTQxMDBfdGltZXJfc3RvcCh0aW1lcl9udW1iZXIpOwor CQkJfSBlbHNlIHsKKwkJCQljdHJsX3JlZyA9IHN3YWIzMihyZWFkbChtdm1lNDEwMF90aW1l cl9iYXNlICsKKwkJCQkJKCh0aW1lcl9udW1iZXIgKyAxKSAqCisJCQkJCSBNVk1FNDEwMF9U SUNLX1RJTUVSX0NPTlRST0xfUkVHX09GRlNFVCkpKTsKKwkJCQljdHJsX3JlZyAmPSB+TVZN RTQxMDBfVElDS19USU1FUl9FTkM7CisJCQkJY3RybF9yZWcgPQorCQkJCSAgICBNVk1FNDEw MF9USUNLX1RJTUVSX0NPVkYgfAorCQkJCSAgICBNVk1FNDEwMF9USUNLX1RJTUVSX0NJTlQ7 CisJCQkJd3JpdGVsKHN3YWIzMihjdHJsX3JlZyksCisJCQkJICAgICAgIG12bWU0MTAwX3Rp bWVyX2Jhc2UgKworCQkJCSAgICAgICAoKHRpbWVyX251bWJlciArIDEpICoKKwkJCQkJTVZN RTQxMDBfVElDS19USU1FUl9DT05UUk9MX1JFR19PRkZTRVQpKTsKKwkJCQl3cml0ZWwoMCwK KwkJCQkgICAgICAgbXZtZTQxMDBfdGltZXJfYmFzZSArCisJCQkJICAgICAgICgodGltZXJf bnVtYmVyICsgMSkgKgorCQkJCQlNVk1FNDEwMF9USUNLX1RJTUVSX0NPTlRST0xfUkVHX09G RlNFVCkKKwkJCQkgICAgICAgKworCQkJCSAgICAgICAoTVZNRTQxMDBfVElDS19USU1FUl9D T1VOVEVSX1JFR19PRkZTRVQgLQorCQkJCQlNVk1FNDEwMF9USUNLX1RJTUVSX0NPTlRST0xf UkVHX09GRlNFVCkpOworCQkJCURFQlVHKDEsCisJCQkJICAgICAgKCJUaW1lciAlZCBDb3Vu dGVyIDB4JXggQ29tcGFyZSAweCV4XG4iLAorCQkJCSAgICAgICB0aW1lcl9udW1iZXIsCisJ CQkJICAgICAgIHN3YWIzMihyZWFkbAorCQkJCQkgICAgICAobXZtZTQxMDBfdGltZXJfYmFz ZSArCisJCQkJCSAgICAgICAoKHRpbWVyX251bWJlciArIDEpICoKKwkJCQkJCU1WTUU0MTAw X1RJQ0tfVElNRVJfQ09OVFJPTF9SRUdfT0ZGU0VUKQorCQkJCQkgICAgICAgKworCQkJCQkg ICAgICAgKE1WTUU0MTAwX1RJQ0tfVElNRVJfQ09VTlRFUl9SRUdfT0ZGU0VUCisJCQkJCQkt CisJCQkJCQlNVk1FNDEwMF9USUNLX1RJTUVSX0NPTlRST0xfUkVHX09GRlNFVCkpKSwKKwkJ CQkgICAgICAgc3dhYjMyKHJlYWRsCisJCQkJCSAgICAgIChtdm1lNDEwMF90aW1lcl9iYXNl ICsKKwkJCQkJICAgICAgICgodGltZXJfbnVtYmVyICsgMSkgKgorCQkJCQkJTVZNRTQxMDBf VElDS19USU1FUl9DT05UUk9MX1JFR19PRkZTRVQpCisJCQkJCSAgICAgICArCisJCQkJCSAg ICAgICAoTVZNRTQxMDBfVElDS19USU1FUl9DT01QQVJFX1JFR19PRkZTRVQKKwkJCQkJCS0K KwkJCQkJCU1WTUU0MTAwX1RJQ0tfVElNRVJfQ09OVFJPTF9SRUdfT0ZGU0VUKSkpKSk7CisJ CQkJd3JpdGVsKHN3YWIzMgorCQkJCSAgICAgICAoTVZNRTQxMDBfVElDS19USU1FUl9FTkMg fAorCQkJCQlNVk1FNDEwMF9USUNLX1RJTUVSX0NPQyB8CisJCQkJCU1WTUU0MTAwX1RJQ0tf VElNRVJfRU5JTlQpLAorCQkJCSAgICAgICBtdm1lNDEwMF90aW1lcl9iYXNlICsgCisJCQkJ CSgodGltZXJfbnVtYmVyICsgMSkgKgorCQkJCQlNVk1FNDEwMF9USUNLX1RJTUVSX0NPTlRS T0xfUkVHX09GRlNFVCkpOworCQkJfQorCQkJaWYgKGZ1bmMpIAorCQkJCWZ1bmMoZnVuY19k YXRhKTsKKwkJfQorCX0KKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyogCisgKiBT dG9wIHRoZSB0aW1lcgorICovCitFWFBPUlRfU1lNQk9MKG12bWU0MTAwX3RpbWVyX3N0b3Ap OworaW50IG12bWU0MTAwX3RpbWVyX3N0b3AoaW50IHRpbWVyX251bWJlcikKK3sKKwl1MzIg cmVzZXRfdmFsdWU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICgodGltZXJfbnVt YmVyIDwgMCkgfHwgKHRpbWVyX251bWJlciA+IDMpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwor CXNwaW5fbG9ja19pcnFzYXZlKCZtdm1lNDEwMF90aW1lcl9sb2NrLCBmbGFncyk7CisJcmVz ZXRfdmFsdWUgPSBzd2FiMzIocmVhZGwobXZtZTQxMDBfdGltZXJfYmFzZSArCisJCQkJICAg KCh0aW1lcl9udW1iZXIgKyAxKSAqCisJCQkJICAgIE1WTUU0MTAwX1RJQ0tfVElNRVJfQ09O VFJPTF9SRUdfT0ZGU0VUKSkpOworCXJlc2V0X3ZhbHVlICY9IH5NVk1FNDEwMF9USUNLX1RJ TUVSX0VOQzsKKwlyZXNldF92YWx1ZSAmPSB+TVZNRTQxMDBfVElDS19USU1FUl9FTklOVDsK KwlyZXNldF92YWx1ZSA9IE1WTUU0MTAwX1RJQ0tfVElNRVJfQ09WRiB8IE1WTUU0MTAwX1RJ Q0tfVElNRVJfQ0lOVDsKKwl3cml0ZWwoc3dhYjMyKHJlc2V0X3ZhbHVlKSwKKwkgICAgICAg bXZtZTQxMDBfdGltZXJfYmFzZSArCisJICAgICAgICgodGltZXJfbnVtYmVyICsgMSkgKiBN Vk1FNDEwMF9USUNLX1RJTUVSX0NPTlRST0xfUkVHX09GRlNFVCkpOworCXdyaXRlbCgwLCBt dm1lNDEwMF90aW1lcl9iYXNlICsKKwkgICAgICAgKCh0aW1lcl9udW1iZXIgKyAxKSAqIE1W TUU0MTAwX1RJQ0tfVElNRVJfQ09OVFJPTF9SRUdfT0ZGU0VUKSArCisJICAgICAgIChNVk1F NDEwMF9USUNLX1RJTUVSX0NPVU5URVJfUkVHX09GRlNFVCAtCisJCU1WTUU0MTAwX1RJQ0tf VElNRVJfQ09OVFJPTF9SRUdfT0ZGU0VUKSk7CisJd3JpdGVsKDB4ZmZmZmZmZmYsIG12bWU0 MTAwX3RpbWVyX2Jhc2UgKworCSAgICAgICAoKHRpbWVyX251bWJlciArIDEpICogTVZNRTQx MDBfVElDS19USU1FUl9DT05UUk9MX1JFR19PRkZTRVQpICsKKwkgICAgICAgKE1WTUU0MTAw X1RJQ0tfVElNRVJfQ09NUEFSRV9SRUdfT0ZGU0VUIC0KKwkJTVZNRTQxMDBfVElDS19USU1F Ul9DT05UUk9MX1JFR19PRkZTRVQpKTsKKwltdm1lNDEwMF90aW1lclt0aW1lcl9udW1iZXJd LmZ1bmMgPSBOVUxMOworCW12bWU0MTAwX3RpbWVyW3RpbWVyX251bWJlcl0uZnVuY19kYXRh ID0gTlVMTDsKKwltdm1lNDEwMF90aW1lclt0aW1lcl9udW1iZXJdLnN0YXJ0ZWQgPSAwOwor CW12bWU0MTAwX3RpbWVyW3RpbWVyX251bWJlcl0ucGVyaW9kaWMgPSAwOworCW12bWU0MTAw X3RpbWVyW3RpbWVyX251bWJlcl0ucGVyaW9kID0gMDsKKwltdm1lNDEwMF90aW1lclt0aW1l cl9udW1iZXJdLnRpY2tzID0gMHhGRkZGRkZGRjsKKwlzcGluX3VubG9ja19pcnFyZXN0b3Jl KCZtdm1lNDEwMF90aW1lcl9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworLyog CisgKiBTdGFydCB0aGUgdGltZXIKKyAqLworRVhQT1JUX1NZTUJPTChtdm1lNDEwMF90aW1l cl9zdGFydCk7CitpbnQgbXZtZTQxMDBfdGltZXJfc3RhcnQoaW50IHRpbWVyX251bWJlciwg dW5zaWduZWQgbG9uZyBtaWNyb3NlY29uZHMsCisJCQkgbXZtZTQxMDBfdGltZXJfZiBmdW5j LCB2b2lkICpmdW5jX2RhdGEsIGludCBwZXJpb2RpYykKK3sKKwlpbnQgcmVzID0gMDsKKwl1 bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgdGlja3M7CisKKwlwcmludGso S0VSTl9JTkZPCisJICAgICAgICJtdm1lNDEwMF90aW1lcjogc3RhcnRfdGltZXI6IG51bSAl ZCBtaWNyb3NlY29uZHMgMHglbHggcGVyaW9kaWMgJWRcbiIsCisJICAgICAgIHRpbWVyX251 bWJlciwgbWljcm9zZWNvbmRzLCBwZXJpb2RpYyk7CisJaWYgKCh0aW1lcl9udW1iZXIgPCAw KSB8fCAodGltZXJfbnVtYmVyID4gMykpCisJCXJldHVybiAtRUlOVkFMOworCWlmICgobWlj cm9zZWNvbmRzIDwgTUlOX01JQ1JPU0VDT05EUykgfHwKKwkgICAgKG1pY3Jvc2Vjb25kcyA+ IE1BWF9USUNLUyAvIGNsa19vdXQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoZnVuYyA9 PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAobXZtZTQxMDBfdGltZXJbdGltZXJf bnVtYmVyXS5zdGFydGVkID09IDEpCisJCXJldHVybiAtRUJVU1k7CisJaWYgKChyZXMgPSBt dm1lNDEwMF90aW1lcl9zdG9wKHRpbWVyX251bWJlcikpIDwgMCkKKwkJcmV0dXJuIHJlczsK Kwl0aWNrcyA9IG1pY3Jvc2Vjb25kcyAqIGNsa19vdXQ7CisJc3Bpbl9sb2NrX2lycXNhdmUo Jm12bWU0MTAwX3RpbWVyX2xvY2ssIGZsYWdzKTsKKwltdm1lNDEwMF90aW1lclt0aW1lcl9u dW1iZXJdLnN0YXJ0ZWQgPSAxOworCW12bWU0MTAwX3RpbWVyW3RpbWVyX251bWJlcl0uZnVu YyA9IGZ1bmM7CisJbXZtZTQxMDBfdGltZXJbdGltZXJfbnVtYmVyXS5mdW5jX2RhdGEgPSBm dW5jX2RhdGE7CisJbXZtZTQxMDBfdGltZXJbdGltZXJfbnVtYmVyXS5wZXJpb2RpYyA9IHBl cmlvZGljOworCW12bWU0MTAwX3RpbWVyW3RpbWVyX251bWJlcl0ucGVyaW9kID0gbWljcm9z ZWNvbmRzOworCW12bWU0MTAwX3RpbWVyW3RpbWVyX251bWJlcl0udGlja3MgPSB0aWNrczsK Kwl3cml0ZWwoc3dhYjMyKHRpY2tzKSwgbXZtZTQxMDBfdGltZXJfYmFzZSArCisJICAgICAg ICgodGltZXJfbnVtYmVyICsgMSkgKiBNVk1FNDEwMF9USUNLX1RJTUVSX0NPTlRST0xfUkVH X09GRlNFVCkgKworCSAgICAgICAoTVZNRTQxMDBfVElDS19USU1FUl9DT01QQVJFX1JFR19P RkZTRVQgLQorCQlNVk1FNDEwMF9USUNLX1RJTUVSX0NPTlRST0xfUkVHX09GRlNFVCkpOwor CXdyaXRlbCgwLCBtdm1lNDEwMF90aW1lcl9iYXNlICsKKwkgICAgICAgKCh0aW1lcl9udW1i ZXIgKyAxKSAqIE1WTUU0MTAwX1RJQ0tfVElNRVJfQ09OVFJPTF9SRUdfT0ZGU0VUKSArCisJ ICAgICAgIChNVk1FNDEwMF9USUNLX1RJTUVSX0NPVU5URVJfUkVHX09GRlNFVCAtCisJCU1W TUU0MTAwX1RJQ0tfVElNRVJfQ09OVFJPTF9SRUdfT0ZGU0VUKSk7CisJd3JpdGVsKHN3YWIz MihNVk1FNDEwMF9USUNLX1RJTUVSX0VOQyB8IE1WTUU0MTAwX1RJQ0tfVElNRVJfQ09DIHwK KwkJICAgICAgTVZNRTQxMDBfVElDS19USU1FUl9FTklOVCksCisJICAgICAgIG12bWU0MTAw X3RpbWVyX2Jhc2UgKworCSAgICAgICAoKHRpbWVyX251bWJlciArIDEpICogTVZNRTQxMDBf VElDS19USU1FUl9DT05UUk9MX1JFR19PRkZTRVQpKTsKKwlzcGluX3VubG9ja19pcnFyZXN0 b3JlKCZtdm1lNDEwMF90aW1lcl9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKwor LyogCisgKiBHZXQgdGhlIHRpbWVyIHJlc29sdXRpb24sIGluIG1pY3Jvc2Vjb25kcy90aWNr CisgKi8KK0VYUE9SVF9TWU1CT0wobXZtZTQxMDBfdGltZXJfZ2V0X3Jlc29sdXRpb24pOwor dW5zaWduZWQgbG9uZyBtdm1lNDEwMF90aW1lcl9nZXRfcmVzb2x1dGlvbih2b2lkKQorewor CXUzMiBwcmVzY2FsZXJfYWRqdXN0OworCisJLyogCisJICogUHJlc2NhbGVyX2FkanVzdCA9 IDI1NiAtIENMS0lOL0NMS09VVAorCSAqIENMS0lOID0gMjUgTUh6CisJICovCisKKwlwcmVz Y2FsZXJfYWRqdXN0ID0gcmVhZGwobXZtZTQxMDBfdGltZXJfYmFzZSArCisJCQkJIE1WTUU0 MTAwX1RJQ0tfVElNRVJfUFJFU0NBTEVSX1JFR19PRkZTRVQpOworCXJldHVybiAoMjUgLyAo MjU2IC0gcHJlc2NhbGVyX2FkanVzdCkpOworfQorCisvKiAKKyAqIFNldCB0aGUgdGltZXIg cmVzb2x1dGlvbiwgaW4gdGlja3MvbWljcm9zZWNvbmQKKyAqLworRVhQT1JUX1NZTUJPTCht dm1lNDEwMF90aW1lcl9zZXRfcmVzb2x1dGlvbik7CitpbnQgbXZtZTQxMDBfdGltZXJfc2V0 X3Jlc29sdXRpb24odW5zaWduZWQgbG9uZyB0aWNrcykKK3sKKwl1MzIgcHJlc2NhbGVyX2Fk anVzdDsKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogCisJICogUHJl c2NhbGVyX2FkanVzdCA9IDI1NiAtIENMS0lOL0NMS09VVAorCSAqIENMS0lOID0gMjUgTUh6 CisJICovCisKKwlpZiAoKHRpY2tzIDwgTUlOX1RJQ0tTX1BFUl9NSUNST1NFQ09ORCkgfHwK KwkgICAgKHRpY2tzID4gTUFYX1RJQ0tTX1BFUl9NSUNST1NFQ09ORCkpCisJCXJldHVybiAt RUlOVkFMOworCisJY2xrX291dCA9IHRpY2tzOworCXByZXNjYWxlcl9hZGp1c3QgPSAyNTYg LSAoMjUgLyBjbGtfb3V0KTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtdm1lNDEwMF90aW1l cl9sb2NrLCBmbGFncyk7CisJZm9yIChpID0gMDsgaSA8PSAzOyBpKyspIHsKKwkJaWYgKG12 bWU0MTAwX3RpbWVyW2ldLnN0YXJ0ZWQgPT0gMSkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVz dG9yZSgmbXZtZTQxMDBfdGltZXJfbG9jaywgZmxhZ3MpOworCQkJcmV0dXJuIC1FQlVTWTsK KwkJfQorCX0KKworCXdyaXRlbChwcmVzY2FsZXJfYWRqdXN0LCBtdm1lNDEwMF90aW1lcl9i YXNlICsKKwkgICAgICAgTVZNRTQxMDBfVElDS19USU1FUl9QUkVTQ0FMRVJfUkVHX09GRlNF VCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXZtZTQxMDBfdGltZXJfbG9jaywgZmxh Z3MpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIAorICogR2V0IHRoZSB0aW1lciB2YWx1ZSwg aW4gdGlja3MKKyAqLworRVhQT1JUX1NZTUJPTChtdm1lNDEwMF90aW1lcl9nZXRfdGlja3Mp OwordW5zaWduZWQgbG9uZyBtdm1lNDEwMF90aW1lcl9nZXRfdGlja3MoaW50IHRpbWVyX251 bWJlcikKK3sKKwlpZiAoKHRpbWVyX251bWJlciA8IDApIHx8ICh0aW1lcl9udW1iZXIgPiAz KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gc3dhYjMyKHJlYWRsKG12bWU0MTAw X3RpbWVyX2Jhc2UgKworCQkJICAgICgodGltZXJfbnVtYmVyICsKKwkJCSAgICAgIDEpICog TVZNRTQxMDBfVElDS19USU1FUl9DT05UUk9MX1JFR19PRkZTRVQpICsKKwkJCSAgICAoTVZN RTQxMDBfVElDS19USU1FUl9DT1VOVEVSX1JFR19PRkZTRVQgLQorCQkJICAgICBNVk1FNDEw MF9USUNLX1RJTUVSX0NPTlRST0xfUkVHX09GRlNFVCkpKTsKK30KKworI2lmZGVmIENPTkZJ R19QUk9DX0ZTCisKK3N0YXRpYyBpbnQKK212bWU0MTAwX3RpbWVyX3Byb2NfcmVhZChjaGFy ICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLCBpbnQgbGVuLCBpbnQgKmVvZiwKKwkJ CSB2b2lkICpkYXRhKQoreworCWludCBpOworCisJbGVuID0gMDsKKwlsZW4gKz0KKwkgICAg c3ByaW50ZihidWYgKyBsZW4sCisJCSAgICAiXG5UaW1lciAgICAgQWN0aXZlICBQZXJpb2Rp YyAgUGVyaW9kKHRpY2tzKSAgIFBlcmlvZChtaWNyb3NlY29uZHMpXG4iKTsKKwlsZW4gKz0K KwkgICAgc3ByaW50ZihidWYgKyBsZW4sCisJCSAgICAiX19fX18gICAgIF9fX19fXyAgX19f X19fX18gIF9fX19fX19fX19fX18gICBfX19fX19fX19fX19fX19fX19fX1xuIik7CisJZm9y IChpID0gMDsgaSA8PSAzOyBpKyspIHsKKwkJbGVuICs9CisJCSAgICBzcHJpbnRmKGJ1ZiAr IGxlbiwKKwkJCSAgICAiIyVkICAgICAgICAlYyAgICAgICAlYyAgICAgICAgIDB4JTA4bHgg ICAgICAlbGRcbiIsCisJCQkgICAgaSArIDEsCisJCQkgICAgKChtdm1lNDEwMF90aW1lcltp XS5zdGFydGVkID09IDEpID8gJ3knIDogJ24nKSwKKwkJCSAgICAoKG12bWU0MTAwX3RpbWVy W2ldLnBlcmlvZGljID09IDEpID8gJ3knIDogJ24nKSwKKwkJCSAgICAoKG12bWU0MTAwX3Rp bWVyW2ldLnBlcmlvZGljID09CisJCQkgICAgICAxKSA/IG12bWU0MTAwX3RpbWVyW2ldLnRp Y2tzIDogMCksCisJCQkgICAgKChtdm1lNDEwMF90aW1lcltpXS5wZXJpb2RpYyA9PQorCQkJ ICAgICAgMSkgPyBtdm1lNDEwMF90aW1lcltpXS5wZXJpb2QgOiAwKSk7CisJfQorCXJldHVy biBsZW47Cit9CisKKyNlbmRpZgkJCQkvKiBDT05GSUdfUFJPQ19GUyAqLworCitzdGF0aWMg X19pbml0IGludCBtdm1lNDEwMF90aW1lcl9pbml0KHZvaWQpCit7CisJaW50IHJlcyA9IDA7 CisJaW50IGk7CisKKwlwcmludGsoS0VSTl9JTkZPICJtdm1lNDEwMC10aW1lcjogTVZNRTQx MDAgVGljayBUaW1lcnNcbiIpOworCisJbXZtZTQxMDBfdGltZXJfYmFzZSA9IGlvcmVtYXAo TVZNRTQxMDBfVElDS19USU1FUl9CQVNFLAorCQkJCSAgICAgTVZNRTQxMDBfVElDS19USU1F Ul9CTE9DS19TSVpFKTsKKwlpZiAobXZtZTQxMDBfdGltZXJfYmFzZSA9PSBOVUxMKQorCQly ZXR1cm4gLUVOT01FTTsKKworCWZvciAoaSA9IDA7IGkgPD0gMzsgaSsrKSB7CisJCW12bWU0 MTAwX3RpbWVyW2ldLmZ1bmMgPSBOVUxMOworCQltdm1lNDEwMF90aW1lcltpXS5mdW5jX2Rh dGEgPSBOVUxMOworCQltdm1lNDEwMF90aW1lcltpXS5zdGFydGVkID0gMDsKKwkJbXZtZTQx MDBfdGltZXJbaV0ucGVyaW9kaWMgPSAwOworCQltdm1lNDEwMF90aW1lcltpXS5wZXJpb2Qg PSAwOworCQltdm1lNDEwMF90aW1lcltpXS50aWNrcyA9IDA7CisJfQorCXJlcyA9IHJlcXVl c3RfaXJxKG12bWU0MTAwX3RpbWVyX2lycSwgbXZtZTQxMDBfdGltZXJfaW50X2hhbmRsZXIs CisJCQkgIElSUUZfU0hBUkVELAorCQkJICAiTVZNRTQxMDAgVGljayBUaW1lcnMiLCAmbXZt ZTQxMDBfdGltZXJbMF0pOworCWlmIChyZXMgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAi TVZNRTQxMDAgVGltZXI6IENhbid0IGFsbG9jYXRlIElSUSAlZC5cbiIsCisJCSAgICAgICBt dm1lNDEwMF90aW1lcl9pcnEpOworCQlyZXR1cm4gcmVzOworCX0KKyNpZmRlZiBDT05GSUdf UFJPQ19GUworCWNyZWF0ZV9wcm9jX3JlYWRfZW50cnkoIm12bWU0MTAwX3RpbWVycyIsIDAs IE5VTEwsCisJCQkgICAgICAgbXZtZTQxMDBfdGltZXJfcHJvY19yZWFkLCBOVUxMKTsKKyNl bmRpZgorCXJldHVybiAwOworfQorCitzdGF0aWMgX19leGl0IHZvaWQgbXZtZTQxMDBfdGlt ZXJfZXhpdCh2b2lkKQoreworCWludCB0aW1lcl9udW1iZXI7CisKKwlmb3IgKHRpbWVyX251 bWJlciA9IDA7IHRpbWVyX251bWJlciA8PSAzOyB0aW1lcl9udW1iZXIrKykgeworCQltdm1l NDEwMF90aW1lcl9zdG9wKHRpbWVyX251bWJlcik7CisJfQorCWZyZWVfaXJxKG12bWU0MTAw X3RpbWVyX2lycSwgJm12bWU0MTAwX3RpbWVyWzBdKTsKKwlpb3VubWFwKG12bWU0MTAwX3Rp bWVyX2Jhc2UpOworfQorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK01PRFVMRV9BVVRI T1IoIkFqaXQgUHJlbSA8YWppdC5wcmVtQGVtZXJzb24uY29tPiIpOworTU9EVUxFX0RFU0NS SVBUSU9OKCJNVk1FNDEwMCBUaWNrIFRpbWVyIGRyaXZlciIpOworCittb2R1bGVfaW5pdCht dm1lNDEwMF90aW1lcl9pbml0KTsKK21vZHVsZV9leGl0KG12bWU0MTAwX3RpbWVyX2V4aXQp OwpkaWZmIC11IC0tbmV3LWZpbGUgLS1yZWN1cnNpdmUgbGludXgtMi42LjI5LjYub3JpZy9h cmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc21wLmMgbGludXgtMi42LjI5LjYubW9kL2Fy Y2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zbXAuYwotLS0gbGludXgtMi42LjI5LjYub3Jp Zy9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc21wLmMJMjAwOS0wNy0wMiAxNjo0MToy MC4wMDAwMDAwMDAgLTA3MDAKKysrIGxpbnV4LTIuNi4yOS42Lm1vZC9hcmNoL3Bvd2VycGMv cGxhdGZvcm1zLzg1eHgvc21wLmMJMjAwOS0wNy0yMSAxMToyODoxNy4wMDAwMDAwMDAgLTA3 MDAKQEAgLTI2LDYgKzI2LDcgQEAKIAogZXh0ZXJuIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcg X19zZWNvbmRhcnlfaG9sZF9hY2tub3dsZWRnZTsKIGV4dGVybiB2b2lkIF9fZWFybHlfc3Rh cnQodm9pZCk7CitleHRlcm4gdm9pZCBfX3NlY29uZGFyeV9zdGFydF9wYWdlKHZvaWQpOwog CiAjZGVmaW5lIEJPT1RfRU5UUllfQUREUl9VUFBFUgkwCiAjZGVmaW5lIEJPT1RfRU5UUllf QUREUl9MT1dFUgkxCkBAIC0zOCw0NCArMzksMTExIEBACiAjZGVmaW5lIE5VTV9CT09UX0VO VFJZCQk4CiAjZGVmaW5lIFNJWkVfQk9PVF9FTlRSWQkJKE5VTV9CT09UX0VOVFJZICogc2l6 ZW9mKHUzMikpCiAKKyNkZWZpbmUgRUVCUENSX0NQVTFfRU4gCQkweDAyMDAwMDAwCisjZGVm aW5lIEVFQlBDUl9DUFUwX0VOCQkweDAxMDAwMDAwCisjZGVmaW5lIE1QQzg1eHhfRUNNX09G RlNFVAkweDEwMDAKKyNkZWZpbmUgTVBDODV4eF9FQ01fU0laRQkweGYwMAorI2RlZmluZSBF Q01fUE9SVF9DT05GSUdfT0ZGU0VUCTB4MDAxMAorI2RlZmluZSBNUEM4NXh4X0JQVFJfT0ZG U0VUCTB4MjAKKyNkZWZpbmUgQlBUUl9FTgkJCTB4ODAwMDAwMDAKKyNkZWZpbmUgTVBDODV4 eF9NUElDX0dSRUdfT0ZGU0VUCTB4NDAwMDAKKyNkZWZpbmUgTVBDODV4eF9NUElDX0dSRUdf U0laRQkweDEwMDAwCisjZGVmaW5lIE1QSUNfUFJPQ19JTklUX09GRlNFVAkweDEwOTAKKwor CitzdGF0aWMgdm9pZCBfX2luaXQgc21wXzg1eHhfcmVsZWFzZV9jb3JlKGludCBucikKK3sK KwkgX19pb21lbSB1MzIgKmVjbV92YWRkcjsKKwl1bnNpZ25lZCBsb25nIHBjcjsKKyNpZiAw CisgICAgICAgIHZvaWQgX19pb21lbSAqbXBpY19ncmVnOworICAgICAgICB1MzIgcGlyOwor I2VuZGlmCisKKyAgICAgICAgLyoKKwkgKiBTdGFydHVwIENvcmUgI25yLgorCSAqLworCWVj bV92YWRkciA9IGlvcmVtYXAoZ2V0X2ltbXJiYXNlKCkgKyBNUEM4NXh4X0VDTV9PRkZTRVQs CisJCQlNUEM4NXh4X0VDTV9TSVpFKTsKKwlwY3IgPSBpbl9iZTMyKGVjbV92YWRkciArIChF Q01fUE9SVF9DT05GSUdfT0ZGU0VUID4+IDIpKTsKKyNpZiAwCisgICAgICAgIHBjciAmPSB+ RUVCUENSX0NQVTFfRU47CisgICAgICAgIG91dF9iZTMyKGVjbV92YWRkciArIChFQ01fUE9S VF9DT05GSUdfT0ZGU0VUID4+IDIpLCBwY3IpOworCisgICAgICAgIC8qIFJlc2V0IHRoZSBj b3JlICovCisgICAgICAgIG1waWNfZ3JlZyA9IGlvcmVtYXAoZ2V0X2ltbXJiYXNlKCkgKyBN UEM4NXh4X01QSUNfR1JFR19PRkZTRVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg TVBDODV4eF9NUElDX0dSRUdfU0laRSk7CisgICAgICAgIHBpciA9IGluX2JlMzIobXBpY19n cmVnICsgTVBJQ19QUk9DX0lOSVRfT0ZGU0VUKTsKKyAgICAgICAgb3V0X2JlMzIobXBpY19n cmVnICsgTVBJQ19QUk9DX0lOSVRfT0ZGU0VULCBwaXIgfCAobnIgPDwgMSkpOworICAgICAg ICBvdXRfYmUzMihtcGljX2dyZWcgKyBNUElDX1BST0NfSU5JVF9PRkZTRVQsIHBpcik7Cisj ZW5kaWYKKyAgICAgICAgLyogU3RhcnR1cCBDb3JlICNuciAqLworCXBjciB8PSBFRUJQQ1Jf Q1BVMV9FTjsKKwlvdXRfYmUzMihlY21fdmFkZHIgKyAoRUNNX1BPUlRfQ09ORklHX09GRlNF VCA+PiAyKSwgcGNyKTsKKwlhc20oInN5bmM7IGlzeW5jOyBtc3luYyIpOworCWlvdW5tYXAo ZWNtX3ZhZGRyKTsKK30KKwogc3RhdGljIHZvaWQgX19pbml0CiBzbXBfODV4eF9raWNrX2Nw dShpbnQgbnIpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKyNpZm5kZWYgQ09ORklHX0NQ Q0k2MjAwCiAJY29uc3QgdTY0ICpjcHVfcmVsX2FkZHI7Ci0JX19pb21lbSB1MzIgKmJwdHJf dmFkZHI7CiAJc3RydWN0IGRldmljZV9ub2RlICpucDsKKyNlbmRpZgorCV9faW9tZW0gdTMy ICpicHRyX3ZhZGRyOworCXUzMiBicHRyLCBvbGRicHRyOwogCWludCBuID0gMDsKIAogCVdB Uk5fT04gKG5yIDwgMCB8fCBuciA+PSBOUl9DUFVTKTsKIAogCXByX2RlYnVnKCJzbXBfODV4 eF9raWNrX2NwdToga2ljayBDUFUgIyVkXG4iLCBucik7CiAKLQlsb2NhbF9pcnFfc2F2ZShm bGFncyk7Ci0KKyNpZm5kZWYgQ09ORklHX0NQQ0k2MjAwCiAJbnAgPSBvZl9nZXRfY3B1X25v ZGUobnIsIE5VTEwpOwogCWNwdV9yZWxfYWRkciA9IG9mX2dldF9wcm9wZXJ0eShucCwgImNw dS1yZWxlYXNlLWFkZHIiLCBOVUxMKTsKIAogCWlmIChjcHVfcmVsX2FkZHIgPT0gTlVMTCkg ewogCQlwcmludGsoS0VSTl9FUlIgIk5vIGNwdS1yZWxlYXNlLWFkZHIgZm9yIGNwdSAlZFxu IiwgbnIpOwotCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJCXJldHVybjsKIAl9CiAK IAkvKiBNYXAgdGhlIHNwaW4gdGFibGUgKi8KIAlicHRyX3ZhZGRyID0gaW9yZW1hcCgqY3B1 X3JlbF9hZGRyLCBTSVpFX0JPT1RfRU5UUlkpOwogCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3Mp OworCiAJb3V0X2JlMzIoYnB0cl92YWRkciArIEJPT1RfRU5UUllfUElSLCBucik7CiAJb3V0 X2JlMzIoYnB0cl92YWRkciArIEJPT1RfRU5UUllfQUREUl9MT1dFUiwgX19wYShfX2Vhcmx5 X3N0YXJ0KSk7CiAKKyNlbHNlCisJLyogR2V0IHRoZSBCUFRSICovCisJYnB0cl92YWRkciA9 IGlvcmVtYXAoZ2V0X2ltbXJiYXNlKCkgKyBNUEM4NXh4X0JQVFJfT0ZGU0VULCA0KTsKKwor CWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCS8qIFNldCB0aGUgQlBUUiB0byB0aGUgc2Vj b25kYXJ5IGJvb3QgcGFnZSAqLworCW9sZGJwdHIgPSBpbl9iZTMyKGJwdHJfdmFkZHIpOwor CWJwdHIgPSAoQlBUUl9FTiB8IChfX3BhKCh1bnNpZ25lZClfX3NlY29uZGFyeV9zdGFydF9w YWdlKSA+PiAxMikpOworCW91dF9iZTMyKGJwdHJfdmFkZHIsIGJwdHIpOworCisJc21wXzg1 eHhfcmVsZWFzZV9jb3JlKG5yKTsKKworI2VuZGlmCiAJLyogV2FpdCBhIGJpdCBmb3IgdGhl IENQVSB0byBhY2suICovCiAJd2hpbGUgKChfX3NlY29uZGFyeV9ob2xkX2Fja25vd2xlZGdl ICE9IG5yKSAmJiAoKytuIDwgMTAwMCkpCiAJCW1kZWxheSgxKTsKIAotCWlvdW5tYXAoYnB0 cl92YWRkcik7CisjaWZkZWYgQ09ORklHX0NQQ0k2MjAwCisgICAgICAgLyogUmVzdG9yZSB0 aGUgQlBUUiAqLworICAgICAgICBvdXRfYmUzMihicHRyX3ZhZGRyLCBvbGRicHRyKTsKKyNl bmRpZgogCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCisJaW91bm1hcChicHRyX3Zh ZGRyKTsKKwogCXByX2RlYnVnKCJ3YWl0ZWQgJWQgbXNlY3MgZm9yIENQVSAjJWQuXG4iLCBu LCBucik7CiB9CiAKQEAgLTk2LDYgKzE2NCw4IEBACiAJLnByb2JlID0gc21wX21waWNfcHJv YmUsCiAJLmtpY2tfY3B1ID0gc21wXzg1eHhfa2lja19jcHUsCiAJLnNldHVwX2NwdSA9IHNt cF84NXh4X3NldHVwX2NwdSwKKyAgICAgICAgLnRha2VfdGltZWJhc2UgPSBzbXBfZ2VuZXJp Y190YWtlX3RpbWViYXNlLAorICAgICAgICAuZ2l2ZV90aW1lYmFzZSA9IHNtcF9nZW5lcmlj X2dpdmVfdGltZWJhc2UsCiB9OwogCiB2b2lkIF9faW5pdApkaWZmIC11IC0tbmV3LWZpbGUg LS1yZWN1cnNpdmUgbGludXgtMi42LjI5LjYub3JpZy9hcmNoL3Bvd2VycGMvcGxhdGZvcm1z Lzg2eHgvS2NvbmZpZyBsaW51eC0yLjYuMjkuNi5tb2QvYXJjaC9wb3dlcnBjL3BsYXRmb3Jt cy84Nnh4L0tjb25maWcKLS0tIGxpbnV4LTIuNi4yOS42Lm9yaWcvYXJjaC9wb3dlcnBjL3Bs YXRmb3Jtcy84Nnh4L0tjb25maWcJMjAwOS0wNy0wMiAxNjo0MToyMC4wMDAwMDAwMDAgLTA3 MDAKKysrIGxpbnV4LTIuNi4yOS42Lm1vZC9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgv S2NvbmZpZwkyMDA5LTA3LTIxIDExOjI4OjE3LjAwMDAwMDAwMCAtMDcwMApAQCAtNDAsNiAr NDAsMTEgQEAKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIEdF IEZhbnVjJ3MgU0JDNjEwLgogCitjb25maWcgTVZNRTcxMDAKKyAgICAgICAgYm9vbCAiRW1l cnNvbiBOZXR3b3JrIFBvd2VyIEVtYmVkZGVkIENvbXB1dGluZyBNVk1FNzEwMCIKKyAgICAg ICAgaGVscAorICAgICAgICAgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhl IEVtZXJzb24gTVZNRTcxMDAgYm9hcmQuCisKIGVuZGlmCiAKIGNvbmZpZyBNUEM4NjQxCkBA IC00OCw3ICs1Myw3IEBACiAJc2VsZWN0IEZTTF9QQ0kgaWYgUENJCiAJc2VsZWN0IFBQQ19V REJHXzE2NTUwCiAJc2VsZWN0IE1QSUMKLQlkZWZhdWx0IHkgaWYgTVBDODY0MV9IUENOIHx8 IFNCQzg2NDFEIHx8IEdFRl9TQkM2MTAKKwlkZWZhdWx0IHkgaWYgTVBDODY0MV9IUENOIHx8 IFNCQzg2NDFEIHx8IEdFRl9TQkM2MTAgfHwgTVZNRTcxMDAKIAogY29uZmlnIE1QQzg2MTAK IAlib29sCkBAIC01NywzICs2MiwyNSBAQAogCXNlbGVjdCBQUENfVURCR18xNjU1MAogCXNl bGVjdCBNUElDCiAJZGVmYXVsdCB5IGlmIE1QQzg2MTBfSFBDRAorCitjb25maWcgTVZNRTcx MDBfRU5BQkxFX0REUl9FUlJPUlMKKyAgICAgICAgYm9vbCAiRW5hYmxlIEREUiBFcnJvciBS ZXBvcnRpbmciCisgICAgICAgIGRlcGVuZHMgb24gTVZNRTcxMDAKKyAgICAgICAgZGVmYXVs dCB5CisKK2NvbmZpZyBNVk1FNzEwMF9FTkFCTEVfTDJfRVJST1JTCisgICAgICAgIGJvb2wg IkVuYWJsZSBMMiBFcnJvciBSZXBvcnRpbmciCisgICAgICAgIGRlcGVuZHMgb24gTVZNRTcx MDAKKyAgICAgICAgZGVmYXVsdCB5CisKK2NvbmZpZyBNVk1FNzEwMF9FTkFCTEVfUENJX0VS Uk9SUworICAgICAgICBib29sICJFbmFibGUgUENJIEVycm9yIFJlcG9ydGluZyIKKyAgICAg ICAgZGVwZW5kcyBvbiBNVk1FNzEwMAorICAgICAgICBkZWZhdWx0IHkKKworY29uZmlnIE1W TUU3MTAwX1RJQ0tfVElNRVJTCisgICAgICAgIGJvb2wgIkVuYWJsZSBzdXBwb3J0IGZvciB0 aGUgVGljayBUaW1lcnMgb24gdGhlIE1WTUU3MTAwIgorICAgICAgICBkZXBlbmRzIG9uIE1W TUU3MTAwCisgICAgICAgIGRlZmF1bHQgeQorCisKZGlmZiAtdSAtLW5ldy1maWxlIC0tcmVj dXJzaXZlIGxpbnV4LTIuNi4yOS42Lm9yaWcvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4 L01ha2VmaWxlIGxpbnV4LTIuNi4yOS42Lm1vZC9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2 eHgvTWFrZWZpbGUKLS0tIGxpbnV4LTIuNi4yOS42Lm9yaWcvYXJjaC9wb3dlcnBjL3BsYXRm b3Jtcy84Nnh4L01ha2VmaWxlCTIwMDktMDctMDIgMTY6NDE6MjAuMDAwMDAwMDAwIC0wNzAw CisrKyBsaW51eC0yLjYuMjkuNi5tb2QvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L01h a2VmaWxlCTIwMDktMDctMjEgMTE6Mjg6MTcuMDAwMDAwMDAwIC0wNzAwCkBAIC05LDMgKzks NSBAQAogb2JqLSQoQ09ORklHX01QQzg2MTBfSFBDRCkJKz0gbXBjODYxMF9ocGNkLm8KIGdl Zi1ncGlvLSQoQ09ORklHX0dQSU9MSUIpCSs9IGdlZl9ncGlvLm8KIG9iai0kKENPTkZJR19H RUZfU0JDNjEwKQkrPSBnZWZfc2JjNjEwLm8gZ2VmX3BpYy5vICQoZ2VmLWdwaW8teSkKK29i ai0kKENPTkZJR19NVk1FNzEwMCkgICAgICAgICAgKz0gbXZtZTcxMDAubworb2JqLSQoQ09O RklHX01WTUU3MTAwX1RJQ0tfVElNRVJTKSAgICAgICs9IG12bWU3MTAwX3RpbWVyLm8KZGlm ZiAtdSAtLW5ldy1maWxlIC0tcmVjdXJzaXZlIGxpbnV4LTIuNi4yOS42Lm9yaWcvYXJjaC9w b3dlcnBjL3BsYXRmb3Jtcy84Nnh4L21wYzg2eHhfaHBjbi5jIGxpbnV4LTIuNi4yOS42Lm1v ZC9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvbXBjODZ4eF9ocGNuLmMKLS0tIGxpbnV4 LTIuNi4yOS42Lm9yaWcvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L21wYzg2eHhfaHBj bi5jCTIwMDktMDctMDIgMTY6NDE6MjAuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYu MjkuNi5tb2QvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L21wYzg2eHhfaHBjbi5jCTIw MDktMDctMjEgMTE6Mjg6MTcuMDAwMDAwMDAwIC0wNzAwCkBAIC0xNDUsNiArMTQ1LDI5IEBA CiAJcmV0dXJuIDA7CiB9CiAKK3ZvaWQgX19pbml0IG1wYzg2eHhfaHBjbl9wY2liaW9zX2Zp eHVwKHZvaWQpCit7CisJc3RydWN0IHBjaV9kZXYgKmRldiA9IE5VTEw7CisJCWludCByZXQ7 CisKKwlpZiAoKGRldiA9IHBjaV9maW5kX2RldmljZShQQ0lfVkVORE9SX0lEX0FMLCAweDUy ODgsIE5VTEwpKSkgeworCQlkZXYtPmlycSA9IDU7CisJCXBjaV93cml0ZV9jb25maWdfYnl0 ZShkZXYsIFBDSV9JTlRFUlJVUFRfTElORSwgNSk7CisJfQorCisJaWYgKChkZXYgPSBwY2lf ZmluZF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9BTCwgMHg1MjI5LCBOVUxMKSkpIHsKKwkJZGV2 LT5pcnEgPSAxNDsKKwkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgUENJX0lOVEVSUlVQ VF9MSU5FLCAxNCk7CisJfQorCisJaWYgKChkZXYgPSBwY2lfZmluZF9kZXZpY2UoUENJX1ZF TkRPUl9JRF9BTCwgMHg1MjM5LCBOVUxMKSkpIHsKKwkJZGV2LT5pcnEgPSAxMTsKKwkJcGNp X3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgUENJX0lOVEVSUlVQVF9MSU5FLCAxMSk7CisJfQor CisKK30KKwogc3RhdGljIF9faW5pdGRhdGEgc3RydWN0IG9mX2RldmljZV9pZCBvZl9idXNf aWRzW10gPSB7CiAJeyAuY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIiwgfSwKIAl7IC5jb21w YXRpYmxlID0gImZzbCxyYXBpZGlvLWRlbHRhIiwgfSwKQEAgLTE3Miw1ICsxOTUsNiBAQAog CS5wcm9ncmVzcwkJPSB1ZGJnX3Byb2dyZXNzLAogI2lmZGVmIENPTkZJR19QQ0kKIAkucGNp Ymlvc19maXh1cF9idXMJPSBmc2xfcGNpYmlvc19maXh1cF9idXMsCisJLnBjaWJpb3NfZml4 dXAJCT0gbXBjODZ4eF9ocGNuX3BjaWJpb3NfZml4dXAsCiAjZW5kaWYKIH07CmRpZmYgLXUg LS1uZXctZmlsZSAtLXJlY3Vyc2l2ZSBsaW51eC0yLjYuMjkuNi5vcmlnL2FyY2gvcG93ZXJw Yy9wbGF0Zm9ybXMvODZ4eC9tcGM4Nnh4X3NtcC5jIGxpbnV4LTIuNi4yOS42Lm1vZC9hcmNo L3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvbXBjODZ4eF9zbXAuYwotLS0gbGludXgtMi42LjI5 LjYub3JpZy9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvbXBjODZ4eF9zbXAuYwkyMDA5 LTA3LTAyIDE2OjQxOjIwLjAwMDAwMDAwMCAtMDcwMAorKysgbGludXgtMi42LjI5LjYubW9k L2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9tcGM4Nnh4X3NtcC5jCTIwMDktMDctMjEg MTE6Mjg6MTcuMDAwMDAwMDAwIC0wNzAwCkBAIC04OSwxNyArODksNTUgQEAKIAlwcl9kZWJ1 Zygid2FpdCBDUFUgIyVkIGZvciAlZCBtc2Vjcy5cbiIsIG5yLCBuKTsKIH0KIAorLyogQ29w eSBMMiBjYWNoZSBzZXR0aW5ncyBmcm9tIENQVTAgdG8gQ1BVMSAqLwordm9sYXRpbGUgc3Rh dGljIGxvbmcgaW50IGwyX2NhY2hlOwogCi1zdGF0aWMgdm9pZCBfX2luaXQKLXNtcF84Nnh4 X3NldHVwX2NwdShpbnQgY3B1X25yKQorc3RhdGljIHZvaWQgX19kZXZpbml0IHNtcF84Nnh4 X2luaXRfY2FjaGVzKGludCBjcHUpCiB7CisJaWYgKGNwdSA9PSAwKSB7CisJCWwyX2NhY2hl ID0gX2dldF9MMkNSKCk7CisJCXByaW50aygiQ1BVTzogTDJDUiBpcyAlbHhcbiIsIGwyX2Nh Y2hlKTsKKwl9IGVsc2UgeworCQlwcmludGsoIkNQVSVkOiBMMkNSIHdhcyAlbHhcbiIsIGNw dSwgX2dldF9MMkNSKCkpOworCQlfc2V0X0wyQ1IoMCk7CisJCV9zZXRfTDJDUihsMl9jYWNo ZSk7CisJCXByaW50aygiQ1BVJWQ6IEwyQ1Igc2V0IHRvICVseFxuIiwgY3B1LCBsMl9jYWNo ZSk7CisJfQorfQorCitzdGF0aWMgaW50IF9faW5pdCBzbXBfODZ4eF9wcm9iZSh2b2lkKQor eworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY3B1czsKKwlpbnQgbmNwdXMgPSAwOworCisgICAg ICAgIC8qIENvdW50IENQVXMgaW4gdGhlIGRldmljZS10cmVlICovCisgICAgICAgIGZvciAo Y3B1cyA9IE5VTEw7IChjcHVzID0gb2ZfZmluZF9ub2RlX2J5X3R5cGUoY3B1cywgImNwdSIp KSAhPSBOVUxMOykKKyAgICAgICAgICAgICAgICArK25jcHVzOworCisgICAgICAgIHByaW50 ayhLRVJOX0lORk8gIk1QQzg2eHggU01QIHByb2JlIGZvdW5kICVkIGNwdXNcbiIsIG5jcHVz KTsKKworICAgICAgICAvKiBOb3RoaW5nIG1vcmUgdG8gZG8gaWYgbGVzcyB0aGFuIDIgb2Yg dGhlbSAqLworICAgICAgICBpZiAobmNwdXMgPD0gMSkKKyAgICAgICAgICAgICAgICByZXR1 cm4gMTsKKworCS8qIENvbGxlY3QgTDJDUiB2YWx1ZSBmcm9tIENQVSAwICovCisJc21wXzg2 eHhfaW5pdF9jYWNoZXMoMCk7CisKKwlyZXR1cm4gc21wX21waWNfcHJvYmUoKTsKK30KKwor c3RhdGljIHZvaWQgX19pbml0IHNtcF84Nnh4X3NldHVwX2NwdShpbnQgY3B1X25yKQorewor CWlmIChjcHVfbnIgIT0gMCkKKwkJc21wXzg2eHhfaW5pdF9jYWNoZXMoY3B1X25yKTsKKwog CW1waWNfc2V0dXBfdGhpc19jcHUoKTsKIH0KIAogCiBzdHJ1Y3Qgc21wX29wc190IHNtcF84 Nnh4X29wcyA9IHsKIAkubWVzc2FnZV9wYXNzID0gc21wX21waWNfbWVzc2FnZV9wYXNzLAot CS5wcm9iZSA9IHNtcF9tcGljX3Byb2JlLAorCS5wcm9iZSA9IHNtcF84Nnh4X3Byb2JlLAog CS5raWNrX2NwdSA9IHNtcF84Nnh4X2tpY2tfY3B1LAogCS5zZXR1cF9jcHUgPSBzbXBfODZ4 eF9zZXR1cF9jcHUsCiAJLnRha2VfdGltZWJhc2UgPSBzbXBfZ2VuZXJpY190YWtlX3RpbWVi YXNlLApkaWZmIC11IC0tbmV3LWZpbGUgLS1yZWN1cnNpdmUgbGludXgtMi42LjI5LjYub3Jp Zy9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvbXZtZTcxMDAuYyBsaW51eC0yLjYuMjku Ni5tb2QvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L212bWU3MTAwLmMKLS0tIGxpbnV4 LTIuNi4yOS42Lm9yaWcvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L212bWU3MTAwLmMJ MTk2OS0xMi0zMSAxNzowMDowMC4wMDAwMDAwMDAgLTA3MDAKKysrIGxpbnV4LTIuNi4yOS42 Lm1vZC9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvbXZtZTcxMDAuYwkyMDA5LTA5LTAy IDEwOjMxOjUzLjAwMDAwMDAwMCAtMDcwMApAQCAtMCwwICsxLDE3MzQgQEAKKy8qCisgKiBN Vk1FNzEwMCBib2FyZCBzcGVjaWZpYyByb3V0aW5lcworICoKKyAqIEF1dGhvcjogQWppdCBQ cmVtIDxhaml0LnByZW1AZW1lcnNvbi5jb20+CisgKgorICogQ29weXJpZ2h0IDIwMDggRW1l cnNvbiBOZXR3b3JrIFBvd2VyIEVtYmVkZGVkIENvbXB1dGluZyBJbmMuCisgKgorICogVGhp cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBh bmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVy YWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAo YXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVk ZSA8bGludXgvc3RkZGVmLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVk ZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgva2Rldl90Lmg+CisjaW5jbHVkZSA8 bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUg PGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvcm9vdF9kZXYuaD4KKyNp bmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9ydGMuaD4KKyNp bmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CisKKyNpbmNsdWRlIDxhc20vb2ZfZGV2aWNlLmg+ CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS90aW1lLmg+CisjaW5j bHVkZSA8YXNtL21hY2hkZXAuaD4KKyNpbmNsdWRlIDxhc20vcGNpLWJyaWRnZS5oPgorI2lu Y2x1ZGUgPGFzbS9tcGM4Nnh4Lmg+CisjaW5jbHVkZSA8YXNtL3Byb20uaD4KKyNpbmNsdWRl IDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9rbWFwX3R5cGVzLmg+CisjaW5jbHVkZSA8 YXNtL2VkYWMuaD4KKyNpbmNsdWRlIDxtbS9tbXVfZGVjbC5oPgorI2luY2x1ZGUgPGFzbS91 ZGJnLmg+CisKKyNpbmNsdWRlIDxhc20vbXBpYy5oPgorCisjaW5jbHVkZSA8c3lzZGV2L2Zz bF9wY2kuaD4KKyNpbmNsdWRlIDxzeXNkZXYvZnNsX3NvYy5oPgorCisjaW5jbHVkZSAibXBj ODZ4eC5oIgorI2luY2x1ZGUgIm12bWU3MTAwLmgiCisKKyN1bmRlZiBERUJVRworCisjaWZk ZWYgREVCVUcKKyNkZWZpbmUgREJHKGZtdC4uLikgZG8geyBwcmludGsoS0VSTl9FUlIgZm10 KTsgfSB3aGlsZSgwKQorI2Vsc2UKKyNkZWZpbmUgREJHKGZtdC4uLikgZG8geyB9IHdoaWxl KDApCisjZW5kaWYKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgaGJfYmFkZHI7CitzdGF0aWMg aW50IHNlcmlhbF9pcnE7CitzdGF0aWMgdm9pZCBfX2lvbWVtICpzeXN0ZW1fY29udHJvbF9y ZWdfYWRkcjsKKworI2lmZGVmIENPTkZJR19NVk1FNzEwMF9FTkFCTEVfTDJfRVJST1JTCisK KyNkZWZpbmUgU1BSTl9MMkNBUFREQVRBSEkgICAgICAgMHgzREMKKyNkZWZpbmUgU1BSTl9M MkNBUFREQVRBTE8gICAgICAgMHgzREQKKyNkZWZpbmUgU1BSTl9MMkNBUFRFQ0MgICAgICAg ICAgMHgzREUKKyNkZWZpbmUgU1BSTl9MMkVSUkRFVCAgICAgICAgICAgMHgzREYKKyNkZWZp bmUgU1BSTl9MMkVSUkRJUyAgICAgICAgICAgMHgzRTAKKyNkZWZpbmUgU1BSTl9MMkVSUklO VEVOICAgICAgICAgMHgzRTEKKyNkZWZpbmUgU1BSTl9MMkVSUkFUVFIgICAgICAgICAgMHgz RTIKKyNkZWZpbmUgU1BSTl9MMkVSUkFERFIgICAgICAgICAgMHgzRTMKKyNkZWZpbmUgU1BS Tl9MMkVSUkVBRERSICAgICAgICAgMHgzRTQKKyNkZWZpbmUgU1BSTl9MMkVSUkNUTCAgICAg ICAgICAgMHgzRTUKKworc3RhdGljIGludCBsMl9pcnE7CitzdGF0aWMgaXJxcmV0dXJuX3Qg bXZtZTcxMDBfbDJjYWNoZV9lcnJfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwor CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NVk1FNzEwMF9FTkFCTEVfRERSX0VSUk9SUwor CisjZGVmaW5lIEREUjFfUkVHU19PRkZTRVQgICAgICAgIDB4MjAwMAorI2RlZmluZSBERFIy X1JFR1NfT0ZGU0VUICAgICAgICAweDYwMDAKKyNkZWZpbmUgRERSX0VSUl9SRUdTX09GRlNF VCAgICAgMHhFMDAKKyNkZWZpbmUgRERSX0VSUl9SRUdTX1NJWkUgICAgICAgMHg1QworCisj ZGVmaW5lIEREUl9DQVBUX0RBVEFfSEkgICAgICAgIDB4RTIwCisjZGVmaW5lIEREUl9DQVBU X0RBVEFfTE8gICAgICAgIDB4RTI0CisjZGVmaW5lIEREUl9DQVBUX0VDQyAgICAgICAgICAg IDB4RTI4CisjZGVmaW5lIEREUl9FUlJfREVUICAgICAgICAgICAgIDB4RTQwCisjZGVmaW5l IEREUl9FUlJfRElTQUJMRSAgICAgICAgIDB4RTQ0CisjZGVmaW5lIEREUl9FUlJfSU5UX0VO ICAgICAgICAgIDB4RTQ4CisjZGVmaW5lIEREUl9DQVBUX0FUVFIgICAgICAgICAgIDB4RTRD CisjZGVmaW5lIEREUl9DQVBUX0FERFIgICAgICAgICAgIDB4RTUwCisjZGVmaW5lIEREUl9D QVBUX0VYVF9BRERSICAgICAgIDB4RTU0CisjZGVmaW5lIEREUl9FUlJfU0JFICAgICAgICAg ICAgIDB4RTU4CisKKyNkZWZpbmUgRERSX1NCRSAgICAgICAgICAgICAgICAgMHg0CS8qIHNp bmdsZS1iaXQgRUNDIGVycm9yICovCisjZGVmaW5lIEREUl9NQkUgICAgICAgICAgICAgICAg IDB4OAkvKiBtdWx0aS1iaXQgRUNDIGVycm9yICovCisjZGVmaW5lIEREUl9NTUUgICAgICAg ICAgICAgICAgIDB4ODAwMDAwMDAJLyogbXVsdGlwbGUgRUNDIGVycm9yICovCisKK3N0YXRp YyBpbnQgZGRyMV9lcnJvcnM7CitzdGF0aWMgaW50IGRkcjJfZXJyb3JzOworc3RhdGljIHZv aWQgX19pb21lbSAqZGRyMV9lcnJfcmVnczsKK3N0YXRpYyB2b2lkIF9faW9tZW0gKmRkcjJf ZXJyX3JlZ3M7CitzdGF0aWMgaW50IG1wYzg2eHhfZGRyX2lycTsKK3N0YXRpYyBpcnFyZXR1 cm5fdCBtdm1lNzEwMF9kZHJfZXJyX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsK KworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTVZNRTcxMDBfRU5BQkxFX1BDSV9FUlJPUlMK KworI2RlZmluZSBQQ0kwX1JFR1NfT0ZGU0VUCTB4ODAwMAorI2RlZmluZSBQQ0kxX1JFR1Nf T0ZGU0VUCTB4OTAwMAorI2RlZmluZSBQRVhfRVJSX1JFR1NfT0ZGU0VUICAgICAweEUwMAor I2RlZmluZSBQRVhfRVJSX1JFR1NfU0laRSAgICAgICAweDM4CisKKyNkZWZpbmUgUEVYX0VS Ul9EUgkJMHhFMDAKKyNkZWZpbmUgUEVYX0VSUl9FTgkJMHhFMDgKKyNkZWZpbmUgUEVYX0VS Ul9ESVNSCQkweEUxMAorI2RlZmluZSBQRVhfRVJSX0NBUF9TVEFUICAgICAgICAweEUyMAor I2RlZmluZSBQRVhfRVJSX0NBUF9SMCAgICAgICAgICAweEUyOAorI2RlZmluZSBQRVhfRVJS X0NBUF9SMSAgICAgICAgICAweEUyQworI2RlZmluZSBQRVhfRVJSX0NBUF9SMiAgICAgICAg ICAweEUzMAorI2RlZmluZSBQRVhfRVJSX0NBUF9SMyAgICAgICAgICAweEUzNAorCitzdGF0 aWMgdTMyIHBjaTBfZXJyb3JzOworc3RhdGljIHUzMiBwY2kxX2Vycm9yczsKK3N0YXRpYyB2 b2lkIF9faW9tZW0gKnBjaTBfZXJyX3JlZ3M7CitzdGF0aWMgdm9pZCBfX2lvbWVtICpwY2kx X2Vycl9yZWdzOworc3RhdGljIGludCBwY2kwX2lycTsKK3N0YXRpYyBpbnQgcGNpMV9pcnE7 CitzdGF0aWMgaXJxcmV0dXJuX3QgbXZtZTcxMDBfcGNpMF9lcnJfaGFuZGxlcihpbnQgaXJx LCB2b2lkICpkZXZfaWQpOworc3RhdGljIGlycXJldHVybl90IG12bWU3MTAwX3BjaTFfZXJy X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKKworI2VuZGlmCisKKyNpZmRlZiBD T05GSUdfVk1FX0JSSURHRV9CT09UTUVNCit2b2lkICp2bWVfZHJpdmVyX2Jvb3RtZW07Cit1 bnNpZ25lZCBpbnQgdm1lX2Jvb3RtZW1fc2l6ZTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklH X01WTUU3MTAwX1RJQ0tfVElNRVJTCitpbnQgbXZtZTcxMDBfdGltZXJfaXJxOworI2VuZGlm CisKKyNpZmRlZiBDT05GSUdfU0VOU09SU19MTTkwCitpbnQgbWF4aW02NjQ5X2lycTsKKyNl bmRpZgorCisKKyNpZmRlZiBDT05GSUdfTVZNRTcxMDBfRU5BQkxFX0REUl9FUlJPUlMKKwor c3RhdGljIHZvaWQgbXZtZTcxMDBfZGV0ZXJtaW5lX2JpdF9sb2NhdGlvbih1MzIgZGF0YV9o aSwgdTMyIGRhdGFfbG8sCisJCQkJCSAgICB1MzIgc3RvcmVkX2VjYykKK3sKKwl1MzIgc3lu ZHJvbWVfYml0czsKKwl1MzIgc3luZHJvbWVbOF07CisJdTMyIGNhbGN1bGF0ZWRfZWNjID0g MDsKKwlpbnQgaTsKKwl1MzIgZGF0YTBbMzJdLCBkYXRhMVszMl07CisJdW5zaWduZWQgY2hh ciBiaXRwb3NbOF07CisKKwkvKiBJbml0aWFsIDMyLWJpdCBkYXRhICovCisJZm9yIChpID0g MDsgaSA8IDMyOyBpKyspIHsKKwkJZGF0YTBbaV0gPSAoZGF0YV9oaSA+PiAoMzEgLSBpKSkg JiAweDE7CisJCWRhdGExW2ldID0gKGRhdGFfbG8gPj4gKDMxIC0gaSkpICYgMHgxOworCX0K KworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCXN5bmRyb21lW2ldID0gMDsKKworCS8q IENhbGN1bGF0ZSA4LWJpdCBFQ0MgZm9yIHRoZSBmaXJzdCAzMi1iaXQgZGF0YSAqLworCWZv ciAoaSA9IDA7IGkgPCAzMjsgKytpKSB7CisJCS8qIENhbGN1bGF0ZSBzeW5kcm9tZVswXSAq LworCQlpZiAoKGkgPD0gMTUpIHx8IChpID09IDE5KSB8fCAoaSA9PSAyMykgfHwgKGkgPT0g MjcpIHx8CisJCSAgICAoaSA9PSAzMSkpCisJCQlzeW5kcm9tZVswXSA9IHN5bmRyb21lWzBd IF4gKGRhdGEwW2ldICYgMHgxKTsKKworCQkvKiBDYWxjdWxhdGUgc3luZHJvbWVbMV0gKi8K KwkJaWYgKChpID09IDApIHx8IChpID09IDQpIHx8IChpID09IDgpIHx8IChpID09IDEyKSB8 fCAoaSA+PSAxNikpCisJCQlzeW5kcm9tZVsxXSA9IHN5bmRyb21lWzFdIF4gKGRhdGEwW2ld ICYgMHgxKTsKKworCQkvKiBDYWxjdWxhdGUgc3luZHJvbWVbMl0gKi8KKwkJaWYgKChpID09 IDEpIHx8IChpID09IDUpIHx8IChpID09IDkpIHx8IChpID09IDEzKSB8fAorCQkgICAgKGkg PT0gMTYpIHx8IChpID09IDIwKSB8fCAoaSA9PSAyNCkgfHwgKGkgPT0gMjgpKQorCQkJc3lu ZHJvbWVbMl0gPSBzeW5kcm9tZVsyXSBeIChkYXRhMFtpXSAmIDB4MSk7CisKKwkJLyogQ2Fs Y3VsYXRlIHN5bmRyb21lWzNdICovCisJCWlmICgoaSA9PSAyKSB8fCAoaSA9PSA2KSB8fCAo aSA9PSAxMCkgfHwgKGkgPT0gMTQpIHx8CisJCSAgICAoaSA9PSAxNykgfHwgKGkgPT0gMjEp IHx8IChpID09IDI1KSB8fCAoaSA9PSAyOSkpCisJCQlzeW5kcm9tZVszXSA9IHN5bmRyb21l WzNdIF4gKGRhdGEwW2ldICYgMHgxKTsKKworCQkvKiBDYWxjdWxhdGUgc3luZHJvbWVbNF0g Ki8KKwkJaWYgKChpID09IDMpIHx8IChpID09IDcpIHx8IChpID09IDExKSB8fCAoaSA9PSAx NSkgfHwKKwkJICAgIChpID09IDE4KSB8fCAoaSA9PSAxOSkgfHwgKGkgPT0gMjIpIHx8IChp ID09IDIzKSB8fAorCQkgICAgKGkgPT0gMjYpIHx8IChpID09IDI3KSB8fCAoaSA9PSAzMCkg fHwgKGkgPT0gMzEpKQorCQkJc3luZHJvbWVbNF0gPSBzeW5kcm9tZVs0XSBeIChkYXRhMFtp XSAmIDB4MSk7CisKKwkJLyogQ2FsY3VsYXRlIHN5bmRyb21lWzVdICovCisJCWlmICgoKGkg Pj0gNCkgJiYgKGkgPD0gNykpIHx8ICgoaSA+PSAxMikgJiYgKGkgPD0gMTUpKSB8fAorCQkg ICAgKChpID49IDIwKSAmJiAoaSA8PSAyMykpIHx8ICgoaSA+PSAyOCkgJiYgKGkgPD0gMzEp KSkKKwkJCXN5bmRyb21lWzVdID0gc3luZHJvbWVbNV0gXiAoZGF0YTBbaV0gJiAweDEpOwor CisJCS8qIENhbGN1bGF0ZSBzeW5kcm9tZVs2XSAqLworCQlpZiAoKChpID49IDgpICYmIChp IDw9IDE1KSkgfHwgKChpID49IDI0KSAmJiAoaSA8PSAzMSkpKQorCQkJc3luZHJvbWVbNl0g PSBzeW5kcm9tZVs2XSBeIChkYXRhMFtpXSAmIDB4MSk7CisKKwkJLyogQ2FsY3VsYXRlIHN5 bmRyb21lWzddICovCisJCWlmICgoaSA8PSAzKSB8fCAoKGkgPj0gMTIpICYmIChpIDw9IDE4 KSkgfHwKKwkJICAgIChpID09IDIzKSB8fCAoKGkgPj0gMjcpICYmIChpIDw9IDMwKSkpCisJ CQlzeW5kcm9tZVs3XSA9IHN5bmRyb21lWzddIF4gKGRhdGEwW2ldICYgMHgxKTsKKwl9CisJ LyogQ2FsY3VsYXRlIDgtYml0IEVDQyBmb3IgdGhlIHNlY29uZCAzMi1iaXQgZGF0YSAqLwor CWZvciAoaSA9IDA7IGkgPCAzMjsgKytpKSB7CisJCS8qIENhbGN1bGF0ZSBzeW5kcm9tZVsw XSAqLworCQlpZiAoKGkgPT0gMikgfHwgKGkgPT0gNikgfHwgKGkgPT0gMTApIHx8IChpID09 IDE0KSB8fAorCQkgICAgKGkgPT0gMTkpIHx8IChpID09IDIzKSB8fCAoaSA9PSAyNykgfHwg KGkgPT0gMjkpKQorCQkJc3luZHJvbWVbMF0gPSBzeW5kcm9tZVswXSBeIChkYXRhMVtpXSAm IDB4MSk7CisKKwkJLyogQ2FsY3VsYXRlIHN5bmRyb21lWzFdICovCisJCWlmICgoaSA9PSAz KSB8fCAoaSA9PSA3KSB8fCAoaSA9PSAxMSkgfHwgKGkgPT0gMTUpIHx8CisJCSAgICAoaSA9 PSAxNikgfHwgKGkgPT0gMjApIHx8IChpID09IDI0KSB8fCAoaSA9PSAzMCkpCisJCQlzeW5k cm9tZVsxXSA9IHN5bmRyb21lWzFdIF4gKGRhdGExW2ldICYgMHgxKTsKKworCQkvKiBDYWxj dWxhdGUgc3luZHJvbWVbMl0gKi8KKwkJaWYgKChpIDw9IDE1KSB8fCAoaSA9PSAxNykgfHwg KGkgPT0gMjEpIHx8IChpID09IDI1KSB8CisJCSAgICAoaSA9PSAzMSkpCisJCQlzeW5kcm9t ZVsyXSA9IHN5bmRyb21lWzJdIF4gKGRhdGExW2ldICYgMHgxKTsKKworCQkvKiBDYWxjdWxh dGUgc3luZHJvbWVbM10gKi8KKwkJaWYgKChpID09IDApIHx8IChpID09IDQpIHx8IChpID09 IDgpIHx8IChpID09IDEyKSB8fAorCQkgICAgKGkgPT0gMTgpIHx8IChpID09IDIyKSB8fCAo aSA9PSAyNikgfHwgKGkgPj0gMjgpKQorCQkJc3luZHJvbWVbM10gPSBzeW5kcm9tZVszXSBe IChkYXRhMVtpXSAmIDB4MSk7CisKKwkJLyogQ2FsY3VsYXRlIHN5bmRyb21lWzRdICovCisJ CWlmICgoKGkgPj0gMSkgJiYgKGkgPD0gMykpIHx8ICgoaSA+PSA1KSAmJiAoaSA8PSA3KSkg fHwKKwkJICAgICgoaSA+PSA5KSAmJiAoaSA8PSAxMSkpIHx8ICgoaSA+PSAxMykgJiYgKGkg PD0gMTUpKSB8fAorCQkgICAgKChpID49IDI4KSAmJiAoaSA8PSAzMSkpKQorCQkJc3luZHJv bWVbNF0gPSBzeW5kcm9tZVs0XSBeIChkYXRhMVtpXSAmIDB4MSk7CisKKwkJLyogQ2FsY3Vs YXRlIHN5bmRyb21lWzVdICovCisJCWlmICgoKGkgPj0gNCkgJiYgKGkgPD0gNykpIHx8ICgo aSA+PSAxMikgJiYgKGkgPD0gMjMpKSkKKwkJCXN5bmRyb21lWzVdID0gc3luZHJvbWVbNV0g XiAoZGF0YTFbaV0gJiAweDEpOworCisJCS8qIENhbGN1bGF0ZSBzeW5kcm9tZVs2XSAqLwor CQlpZiAoKChpID49IDgpICYmIChpIDw9IDE5KSkgfHwgKChpID49IDI0KSAmJiAoaSA8PSAz MSkpKQorCQkJc3luZHJvbWVbNl0gPSBzeW5kcm9tZVs2XSBeIChkYXRhMVtpXSAmIDB4MSk7 CisKKwkJLyogQ2FsY3VsYXRlIHN5bmRyb21lWzddICovCisJCWlmICgoaSA9PSAwKSB8fCAo aSA9PSAxKSB8fCAoaSA9PSA2KSB8fCAoaSA9PSA3KSB8fAorCQkgICAgKChpID49IDEwKSAm JiAoaSA8PSAxMykpIHx8ICgoaSA+PSAyMCkgJiYgKGkgPD0gMjcpKSB8fAorCQkgICAgKChp ID49IDI5KSAmJiAoaSA8PSAzMSkpKQorCQkJc3luZHJvbWVbN10gPSBzeW5kcm9tZVs3XSBe IChkYXRhMVtpXSAmIDB4MSk7CisJfQorCisJY2FsY3VsYXRlZF9lY2MgPSAoKHN5bmRyb21l WzddIDw8IDApIHwgKHN5bmRyb21lWzZdIDw8IDEpIHwKKwkJCSAgKHN5bmRyb21lWzVdIDw8 IDIpIHwgKHN5bmRyb21lWzRdIDw8IDMpIHwKKwkJCSAgKHN5bmRyb21lWzNdIDw8IDQpIHwg KHN5bmRyb21lWzJdIDw8IDUpIHwKKwkJCSAgKHN5bmRyb21lWzFdIDw8IDYpIHwgKHN5bmRy b21lWzBdIDw8IDcpKTsKKworCXN5bmRyb21lX2JpdHMgPSBjYWxjdWxhdGVkX2VjYyBeIHN0 b3JlZF9lY2M7CisKKwlzd2l0Y2ggKHN5bmRyb21lX2JpdHMpIHsKKwljYXNlIDB4QzE6CisJ CXNwcmludGYoYml0cG9zLCAiJXMiLCAiMCIpOworCQlicmVhazsKKwljYXNlIDB4QTE6CisJ CXNwcmludGYoYml0cG9zLCAiJXMiLCAiMSIpOworCQlicmVhazsKKwljYXNlIDB4OTE6CisJ CXNwcmludGYoYml0cG9zLCAiJXMiLCAiMiIpOworCQlicmVhazsKKwljYXNlIDB4ODk6CisJ CXNwcmludGYoYml0cG9zLCAiJXMiLCAiMyIpOworCQlicmVhazsKKwljYXNlIDB4QzQ6CisJ CXNwcmludGYoYml0cG9zLCAiJXMiLCAiNCIpOworCQlicmVhazsKKwljYXNlIDB4QTQ6CisJ CXNwcmludGYoYml0cG9zLCAiJXMiLCAiNSIpOworCQlicmVhazsKKwljYXNlIDB4OTQ6CisJ CXNwcmludGYoYml0cG9zLCAiJXMiLCAiNiIpOworCQlicmVhazsKKwljYXNlIDB4OEM6CisJ CXNwcmludGYoYml0cG9zLCAiJXMiLCAiNyIpOworCQlicmVhazsKKwljYXNlIDB4QzI6CisJ CXNwcmludGYoYml0cG9zLCAiJXMiLCAiOCIpOworCQlicmVhazsKKwljYXNlIDB4QTI6CisJ CXNwcmludGYoYml0cG9zLCAiJXMiLCAiOSIpOworCQlicmVhazsKKwljYXNlIDB4OTI6CisJ CXNwcmludGYoYml0cG9zLCAiJXMiLCAiMTAiKTsKKwkJYnJlYWs7CisJY2FzZSAweDhBOgor CQlzcHJpbnRmKGJpdHBvcywgIiVzIiwgIjExIik7CisJCWJyZWFrOworCWNhc2UgMHhDNzoK KwkJc3ByaW50ZihiaXRwb3MsICIlcyIsICIxMiIpOworCQlicmVhazsKKwljYXNlIDB4QTc6 CisJCXNwcmludGYoYml0cG9zLCAiJXMiLCAiMTMiKTsKKwkJYnJlYWs7CisJY2FzZSAweDk3 OgorCQlzcHJpbnRmKGJpdHBvcywgIiVzIiwgIjE0Iik7CisJCWJyZWFrOworCWNhc2UgMHg4 RjoKKwkJc3ByaW50ZihiaXRwb3MsICIlcyIsICIxNSIpOworCQlicmVhazsKKwljYXNlIDB4 NjE6CisJCXNwcmludGYoYml0cG9zLCAiJXMiLCAiMTYiKTsKKwkJYnJlYWs7CisJY2FzZSAw eDUxOgorCQlzcHJpbnRmKGJpdHBvcywgIiVzIiwgIjE3Iik7CisJCWJyZWFrOworCWNhc2Ug MHg0OToKKwkJc3ByaW50ZihiaXRwb3MsICIlcyIsICIxOCIpOworCQlicmVhazsKKwljYXNl IDB4Qzg6CisJCXNwcmludGYoYml0cG9zLCAiJXMiLCAiMTkiKTsKKwkJYnJlYWs7CisJY2Fz ZSAweDY0OgorCQlzcHJpbnRmKGJpdHBvcywgIiVzIiwgIjIwIik7CisJCWJyZWFrOworCWNh c2UgMHg1NDoKKwkJc3ByaW50ZihiaXRwb3MsICIlcyIsICIyMSIpOworCQlicmVhazsKKwlj YXNlIDB4NEM6CisJCXNwcmludGYoYml0cG9zLCAiJXMiLCAiMjIiKTsKKwkJYnJlYWs7CisJ Y2FzZSAweENEOgorCQlzcHJpbnRmKGJpdHBvcywgIiVzIiwgIjIzIik7CisJCWJyZWFrOwor CWNhc2UgMHg2MjoKKwkJc3ByaW50ZihiaXRwb3MsICIlcyIsICIyNCIpOworCQlicmVhazsK KwljYXNlIDB4NTI6CisJCXNwcmludGYoYml0cG9zLCAiJXMiLCAiMjUiKTsKKwkJYnJlYWs7 CisJY2FzZSAweDRBOgorCQlzcHJpbnRmKGJpdHBvcywgIiVzIiwgIjI2Iik7CisJCWJyZWFr OworCWNhc2UgMHhDQjoKKwkJc3ByaW50ZihiaXRwb3MsICIlcyIsICIyNyIpOworCQlicmVh azsKKwljYXNlIDB4Njc6CisJCXNwcmludGYoYml0cG9zLCAiJXMiLCAiMjgiKTsKKwkJYnJl YWs7CisJY2FzZSAweDU3OgorCQlzcHJpbnRmKGJpdHBvcywgIiVzIiwgIjI5Iik7CisJCWJy ZWFrOworCWNhc2UgMHg0RjoKKwkJc3ByaW50ZihiaXRwb3MsICIlcyIsICIzMCIpOworCQli cmVhazsKKwljYXNlIDB4Q0U6CisJCXNwcmludGYoYml0cG9zLCAiJXMiLCAiMzEiKTsKKwkJ YnJlYWs7CisJY2FzZSAweDMxOgorCQlzcHJpbnRmKGJpdHBvcywgIiVzIiwgIjMyIik7CisJ CWJyZWFrOworCWNhc2UgMHgyOToKKwkJc3ByaW50ZihiaXRwb3MsICIlcyIsICIzMyIpOwor CQlicmVhazsKKwljYXNlIDB4QTg6CisJCXNwcmludGYoYml0cG9zLCAiJXMiLCAiMzQiKTsK KwkJYnJlYWs7CisJY2FzZSAweDY4OgorCQlzcHJpbnRmKGJpdHBvcywgIiVzIiwgIjM1Iik7 CisJCWJyZWFrOworCWNhc2UgMHgzNDoKKwkJc3ByaW50ZihiaXRwb3MsICIlcyIsICIzNiIp OworCQlicmVhazsKKwljYXNlIDB4MkM6CisJCXNwcmludGYoYml0cG9zLCAiJXMiLCAiMzci KTsKKwkJYnJlYWs7CisJY2FzZSAweEFEOgorCQlzcHJpbnRmKGJpdHBvcywgIiVzIiwgIjM4 Iik7CisJCWJyZWFrOworCWNhc2UgMHg2RDoKKwkJc3ByaW50ZihiaXRwb3MsICIlcyIsICIz OSIpOworCQlicmVhazsKKwljYXNlIDB4MzI6CisJCXNwcmludGYoYml0cG9zLCAiJXMiLCAi NDAiKTsKKwkJYnJlYWs7CisJY2FzZSAweDJBOgorCQlzcHJpbnRmKGJpdHBvcywgIiVzIiwg IjQxIik7CisJCWJyZWFrOworCWNhc2UgMHhBQjoKKwkJc3ByaW50ZihiaXRwb3MsICIlcyIs ICI0MiIpOworCQlicmVhazsKKwljYXNlIDB4NkI6CisJCXNwcmludGYoYml0cG9zLCAiJXMi LCAiNDMiKTsKKwkJYnJlYWs7CisJY2FzZSAweDM3OgorCQlzcHJpbnRmKGJpdHBvcywgIiVz IiwgIjQ0Iik7CisJCWJyZWFrOworCWNhc2UgMHgyRjoKKwkJc3ByaW50ZihiaXRwb3MsICIl cyIsICI0NSIpOworCQlicmVhazsKKwljYXNlIDB4QUU6CisJCXNwcmludGYoYml0cG9zLCAi JXMiLCAiNDYiKTsKKwkJYnJlYWs7CisJY2FzZSAweDZFOgorCQlzcHJpbnRmKGJpdHBvcywg IiVzIiwgIjQ3Iik7CisJCWJyZWFrOworCWNhc2UgMHg0NjoKKwkJc3ByaW50ZihiaXRwb3Ms ICIlcyIsICI0OCIpOworCQlicmVhazsKKwljYXNlIDB4MjY6CisJCXNwcmludGYoYml0cG9z LCAiJXMiLCAiNDkiKTsKKwkJYnJlYWs7CisJY2FzZSAweDE2OgorCQlzcHJpbnRmKGJpdHBv cywgIiVzIiwgIjUwIik7CisJCWJyZWFrOworCWNhc2UgMHg4NjoKKwkJc3ByaW50ZihiaXRw b3MsICIlcyIsICI1MSIpOworCQlicmVhazsKKwljYXNlIDB4NDU6CisJCXNwcmludGYoYml0 cG9zLCAiJXMiLCAiNTIiKTsKKwkJYnJlYWs7CisJY2FzZSAweDI1OgorCQlzcHJpbnRmKGJp dHBvcywgIiVzIiwgIjUzIik7CisJCWJyZWFrOworCWNhc2UgMHgxNToKKwkJc3ByaW50Zihi aXRwb3MsICIlcyIsICI1NCIpOworCQlicmVhazsKKwljYXNlIDB4ODU6CisJCXNwcmludGYo Yml0cG9zLCAiJXMiLCAiNTUiKTsKKwkJYnJlYWs7CisJY2FzZSAweDQzOgorCQlzcHJpbnRm KGJpdHBvcywgIiVzIiwgIjU2Iik7CisJCWJyZWFrOworCWNhc2UgMHgyMzoKKwkJc3ByaW50 ZihiaXRwb3MsICIlcyIsICI1NyIpOworCQlicmVhazsKKwljYXNlIDB4MTM6CisJCXNwcmlu dGYoYml0cG9zLCAiJXMiLCAiNTgiKTsKKwkJYnJlYWs7CisJY2FzZSAweDgzOgorCQlzcHJp bnRmKGJpdHBvcywgIiVzIiwgIjU5Iik7CisJCWJyZWFrOworCWNhc2UgMHgxQToKKwkJc3By aW50ZihiaXRwb3MsICIlcyIsICI2MCIpOworCQlicmVhazsKKwljYXNlIDB4OUI6CisJCXNw cmludGYoYml0cG9zLCAiJXMiLCAiNjEiKTsKKwkJYnJlYWs7CisJY2FzZSAweDVCOgorCQlz cHJpbnRmKGJpdHBvcywgIiVzIiwgIjYyIik7CisJCWJyZWFrOworCWNhc2UgMHgzQjoKKwkJ c3ByaW50ZihiaXRwb3MsICIlcyIsICI2MyIpOworCQlicmVhazsKKwljYXNlIDB4ODA6CisJ CXNwcmludGYoYml0cG9zLCAiJXMiLCAiRUNDLTAiKTsKKwkJYnJlYWs7CisJY2FzZSAweDQw OgorCQlzcHJpbnRmKGJpdHBvcywgIiVzIiwgIkVDQy0xIik7CisJCWJyZWFrOworCWNhc2Ug MHgyMDoKKwkJc3ByaW50ZihiaXRwb3MsICIlcyIsICJFQ0MtMiIpOworCQlicmVhazsKKwlj YXNlIDB4MTA6CisJCXNwcmludGYoYml0cG9zLCAiJXMiLCAiRUNDLTMiKTsKKwkJYnJlYWs7 CisJY2FzZSAweDA4OgorCQlzcHJpbnRmKGJpdHBvcywgIiVzIiwgIkVDQy00Iik7CisJCWJy ZWFrOworCWNhc2UgMHgwNDoKKwkJc3ByaW50ZihiaXRwb3MsICIlcyIsICJFQ0MtNSIpOwor CQlicmVhazsKKwljYXNlIDB4MDI6CisJCXNwcmludGYoYml0cG9zLCAiJXMiLCAiRUNDLTYi KTsKKwkJYnJlYWs7CisJY2FzZSAweDAxOgorCQlzcHJpbnRmKGJpdHBvcywgIiVzIiwgIkVD Qy03Iik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXNwcmludGYoYml0cG9zLCAiJXMiLCAi VU5LTk9XTiIpOworCQlicmVhazsKKwl9CisJcHJpbnRrKEtFUk5fRVJSICJERFIgRVJST1Ig Q0FMQ1VMQVRFRCBFQ0M6IDB4JTAyeFxuIiwgY2FsY3VsYXRlZF9lY2MpOworCXByaW50ayhL RVJOX0VSUiAiRERSIEVSUk9SIFNUT1JFRCBFQ0M6IDB4JTAyeFxuIiwgc3RvcmVkX2VjYyk7 CisJcHJpbnRrKEtFUk5fRVJSICJERFIgRVJST1IgRUNDIFNZTkRST01FOiAweCUwMnhcbiIs CisJICAgICAgIGNhbGN1bGF0ZWRfZWNjIF4gc3RvcmVkX2VjYyk7CisJcHJpbnRrKEtFUk5f RVJSICJERFIgRVJST1IgQklUIExPQ0FUSU9OOiAlc1xuIiwgYml0cG9zKTsKK30KKworc3Rh dGljIGlycXJldHVybl90IG12bWU3MTAwX2Rkcl9lcnJfaGFuZGxlcihpbnQgaXJxLCB2b2lk ICpkZXZfaWQpCit7CisJdTMyIGVycl9hZGRyLCBkYXRhX2hpLCBkYXRhX2xvLCBlY2MsIGVy cl9hdHRyLCBlcnJfZGV0LCBzYmVfY291bnQ7CisJdTMyIHBmbiwgb2Zmc2V0OworCXN0cnVj dCBwYWdlICpwZzsKKwl2b2lkICp2aXJ0X2FkZHI7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9 IDA7CisJaW50IGhhbmRsZWQgPSBJUlFfTk9ORTsKKwkKKwllcnJfZGV0ID0gcmVhZGwoZGRy MV9lcnJfcmVncyArIEREUl9FUlJfREVUIC0gRERSX0VSUl9SRUdTX09GRlNFVCk7CisJaWYg KCFlcnJfZGV0KQorCQlnb3RvIGNvbnRyb2xsZXIyOworCisJLyogQ29sbGVjdCBlcnJvciBp bmZvcm1hdGlvbiBmcm9tIHRoZSBlcnJvciByZWdpc3RlcnMgKi8KKwllcnJfYWRkciA9IHJl YWRsKGRkcjFfZXJyX3JlZ3MgKyBERFJfQ0FQVF9BRERSIC0gRERSX0VSUl9SRUdTX09GRlNF VCk7CisJZGF0YV9oaSA9IHJlYWRsKGRkcjFfZXJyX3JlZ3MgKyBERFJfQ0FQVF9EQVRBX0hJ IC0gRERSX0VSUl9SRUdTX09GRlNFVCk7CisJZGF0YV9sbyA9IHJlYWRsKGRkcjFfZXJyX3Jl Z3MgKyBERFJfQ0FQVF9EQVRBX0xPIC0gRERSX0VSUl9SRUdTX09GRlNFVCk7CisJZXJyX2F0 dHIgPSByZWFkbChkZHIxX2Vycl9yZWdzICsgRERSX0NBUFRfQVRUUiAtIEREUl9FUlJfUkVH U19PRkZTRVQpOworCWVjYyA9IHJlYWRsKGRkcjFfZXJyX3JlZ3MgKyBERFJfQ0FQVF9FQ0Mg LSBERFJfRVJSX1JFR1NfT0ZGU0VUKTsKKwlzYmVfY291bnQgPSByZWFkbChkZHIxX2Vycl9y ZWdzICsgRERSX0VSUl9TQkUgLSBERFJfRVJSX1JFR1NfT0ZGU0VUKTsKKworCWRkcjFfZXJy b3JzKys7CisKKwkvKiBEaXNwbGF5IGVycm9yIGluZm9ybWF0aW9uICovCisJcHJpbnRrKEtF Uk5fRVJSICJERFIgQ29udHJvbGxlciAxIEVycm9yIVxuIik7CisJcHJpbnRrKEtFUk5fRVJS ICJERFIgMSBFUlJPUiBERVRFQ1QgUkVHOiAweCUwOHhcbiIsIHN3YWIzMihlcnJfZGV0KSk7 CisJcHJpbnRrKEtFUk5fRVJSICJERFIgMSBFUlJPUiBBRERSRVNTIENBUFRVUkUgUkVHOiAw eCUwOHhcbiIsCisJICAgICAgIHN3YWIzMihlcnJfYWRkcikpOworCXByaW50ayhLRVJOX0VS UiAiRERSIDEgRVJST1IgREFUQSBISUdIIENBUFRVUkUgUkVHOiAweCUwOHhcbiIsCisJICAg ICAgIHN3YWIzMihkYXRhX2hpKSk7CisJcHJpbnRrKEtFUk5fRVJSICJERFIgMSBFUlJPUiBE QVRBIExPVyBDQVBUVVJFIFJFRzogMHglMDh4XG4iLAorCSAgICAgICBzd2FiMzIoZGF0YV9s bykpOworCXByaW50ayhLRVJOX0VSUiAiRERSIDEgRVJST1IgQVRUUklCVVRFUyBDQVBUVVJF IFJFRzogMHglMDh4XG4iLAorCSAgICAgICBzd2FiMzIoZXJyX2F0dHIpKTsKKwlwcmludGso S0VSTl9FUlIgIkREUiAxIEVSUk9SIFNCRSBSRUc6IDB4JTA4eFxuIiwgc3dhYjMyKHNiZV9j b3VudCkpOworCXByaW50ayhLRVJOX0VSUiAiRERSIDEgRVJST1IgQ09VTlQ6ICV1XG4iLCBk ZHIxX2Vycm9ycyk7CisKKwlpZiAoZXJyX2RldCAmIEREUl9TQkUpIHsKKwkJLyogU2NydWIg YmxvY2sgKi8KKwkJcGZuID0gZXJyX2FkZHIgPj4gUEFHRV9TSElGVDsKKwkJb2Zmc2V0ID0g ZXJyX2FkZHIgJiB+UEFHRV9NQVNLOworCisJCXBnID0gcGZuX3RvX3BhZ2UocGZuKTsKKwor CQlpZiAoUGFnZUhpZ2hNZW0ocGcpKQorCQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJ CXZpcnRfYWRkciA9IGttYXBfYXRvbWljKHBnLCBLTV9CT1VOQ0VfUkVBRCk7CisJCWF0b21p Y19zY3J1Yih2aXJ0X2FkZHIgKyBvZmZzZXQsIDgpOworCQlrdW5tYXBfYXRvbWljKHZpcnRf YWRkciwgS01fQk9VTkNFX1JFQUQpOworCisJCWlmIChQYWdlSGlnaE1lbShwZykpCisJCQls b2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJfQorCisJLyogRGV0ZXJtaW5lIGFuZCBkaXNw bGF5IGJpdCBsb2NhdGlvbiAqLworCW12bWU3MTAwX2RldGVybWluZV9iaXRfbG9jYXRpb24o c3dhYjMyKGRhdGFfaGkpLAorCQkJCQlzd2FiMzIoZGF0YV9sbyksIHN3YWIzMihlY2MpICYg MHhmZik7CisKKwkvKiBDbGVhciBpbnRlcnJ1cHQgY2F1c2UgKi8KKwl3cml0ZWwoZXJyX2Rl dCwgZGRyMV9lcnJfcmVncyArIEREUl9FUlJfREVUIC0gRERSX0VSUl9SRUdTX09GRlNFVCk7 CisKKyAgICAgICAvKiBDbGVhciBjYXB0dXJlIGF0dHJpYnV0ZSByZWdpc3RlciAqLworICAg ICAgICB3cml0ZWwoMCwgZGRyMV9lcnJfcmVncyArIEREUl9DQVBUX0FUVFIgLSBERFJfRVJS X1JFR1NfT0ZGU0VUKTsKKworICAgICAgICBoYW5kbGVkID0gSVJRX0hBTkRMRUQ7CisKK2Nv bnRyb2xsZXIyOgorICAgICAgICBlcnJfZGV0ID0gcmVhZGwoZGRyMl9lcnJfcmVncyArIERE Ul9FUlJfREVUIC0gRERSX0VSUl9SRUdTX09GRlNFVCk7CisgICAgICAgIGlmICghZXJyX2Rl dCkKKyAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlZDsKKworICAgICAgICAvKiBDb2xs ZWN0IGVycm9yIGluZm9ybWF0aW9uIGZyb20gdGhlIGVycm9yIHJlZ2lzdGVycyAqLworICAg ICAgICBlcnJfYXR0ciA9IHJlYWRsKGRkcjJfZXJyX3JlZ3MgKyBERFJfQ0FQVF9BVFRSIC0g RERSX0VSUl9SRUdTX09GRlNFVCk7CisgICAgICAgIGRhdGFfaGkgPSByZWFkbChkZHIyX2Vy cl9yZWdzICsgRERSX0NBUFRfREFUQV9ISSAtIEREUl9FUlJfUkVHU19PRkZTRVQpOworICAg ICAgICBkYXRhX2xvID0gcmVhZGwoZGRyMl9lcnJfcmVncyArIEREUl9DQVBUX0RBVEFfTE8g LSBERFJfRVJSX1JFR1NfT0ZGU0VUKTsKKyAgICAgICAgZXJyX2FkZHIgPSByZWFkbChkZHIy X2Vycl9yZWdzICsgRERSX0NBUFRfQUREUiAtIEREUl9FUlJfUkVHU19PRkZTRVQpOworICAg ICAgICBlY2MgPSByZWFkbChkZHIyX2Vycl9yZWdzICsgRERSX0NBUFRfRUNDIC0gRERSX0VS Ul9SRUdTX09GRlNFVCk7CisgICAgICAgIHNiZV9jb3VudCA9IHJlYWRsKGRkcjJfZXJyX3Jl Z3MgKyBERFJfRVJSX1NCRSAtIEREUl9FUlJfUkVHU19PRkZTRVQpOworCisgICAgICAgIGRk cjJfZXJyb3JzKys7CisKKyAgICAgICAvKiBEaXNwbGF5IGVycm9yIGluZm9ybWF0aW9uICov CisgICAgICAgIHByaW50ayhLRVJOX0VSUiAiRERSIENvbnRyb2xsZXIgMiBFcnJvciFcbiIp OworICAgICAgICBwcmludGsoS0VSTl9FUlIgIkREUiAyIEVSUk9SIERFVEVDVCBSRUcgMHgl MDh4XG4iLCBzd2FiMzIoZXJyX2RldCkpOworICAgICAgICBwcmludGsoS0VSTl9FUlIgIkRE UiAyIEVSUk9SIEFERFJFU1MgQ0FQVFVSRSBSRUcgMHglMDh4XG4iLAorICAgICAgICAgICAg ICAgc3dhYjMyKGVycl9hZGRyKSk7CisgICAgICAgIHByaW50ayhLRVJOX0VSUiAiRERSIDIg RVJST1IgREFUQSBISUdIIENBUFRVUkUgUkVHIDB4JTA4eFxuIiwKKyAgICAgICAgICAgICAg IHN3YWIzMihkYXRhX2hpKSk7CisgICAgICAgIHByaW50ayhLRVJOX0VSUiAiRERSIDIgRVJS T1IgREFUQSBMT1cgQ0FQVFVSRSBSRUcgMHglMDh4XG4iLAorICAgICAgICAgICAgICAgc3dh YjMyKGRhdGFfbG8pKTsKKyAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJERFIgMiBFUlJPUiBB VFRSSUJVVEVTIENBUFRVUkUgUkVHIDB4JTA4eFxuIiwKKyAgICAgICAgICAgICAgIHN3YWIz MihlcnJfYXR0cikpOworICAgICAgICBwcmludGsoS0VSTl9FUlIgIkREUiAyIEVSUk9SIFNC RSBSRUcgMHglMDh4XG4iLCBzd2FiMzIoc2JlX2NvdW50KSk7CisgICAgICAgIHByaW50ayhL RVJOX0VSUiAiRERSIDIgRVJST1IgQ09VTlQgJXVcbiIsIGRkcjJfZXJyb3JzKTsKKworICAg ICAgICBpZiAoZXJyX2RldCAmIEREUl9TQkUpIHsKKyAgICAgICAgICAgICAgICAvKiBTY3J1 YiBibG9jayAqLworICAgICAgICAgICAgICAgIHBmbiA9IGVycl9hZGRyID4+IFBBR0VfU0hJ RlQ7CisgICAgICAgICAgICAgICAgb2Zmc2V0ID0gZXJyX2FkZHIgJiB+UEFHRV9NQVNLOwor CisgICAgICAgICAgICAgICAgcGcgPSBwZm5fdG9fcGFnZShwZm4pOworCisgICAgICAgICAg ICAgICAgaWYgKFBhZ2VIaWdoTWVtKHBnKSkKKyAgICAgICAgICAgICAgICAgICAgICAgbG9j YWxfaXJxX3NhdmUoZmxhZ3MpOworCisgICAgICAgICAgICAgICAgdmlydF9hZGRyID0ga21h cF9hdG9taWMocGcsIEtNX0JPVU5DRV9SRUFEKTsKKyAgICAgICAgICAgICAgICBhdG9taWNf c2NydWIodmlydF9hZGRyICsgb2Zmc2V0LCA4KTsKKyAgICAgICAgICAgICAgICBrdW5tYXBf YXRvbWljKHZpcnRfYWRkciwgS01fQk9VTkNFX1JFQUQpOworCisgICAgICAgICAgICAgICAg aWYgKFBhZ2VIaWdoTWVtKHBnKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsX2ly cV9yZXN0b3JlKGZsYWdzKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIERldGVybWluZSBh bmQgZGlzcGxheSBiaXQgbG9jYXRpb24gKi8KKyAgICAgICAgbXZtZTcxMDBfZGV0ZXJtaW5l X2JpdF9sb2NhdGlvbihzd2FiMzIoZGF0YV9oaSksCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3dhYjMyKGRhdGFfbG8pLCBzd2FiMzIoZWNjKSAmIDB4ZmYp OworCisgICAgICAgIC8qIENsZWFyIGludGVycnVwdCBjYXVzZSByZWdpc3RlciAqLworICAg ICAgICB3cml0ZWwoZXJyX2RldCwgZGRyMl9lcnJfcmVncyArIEREUl9FUlJfREVUIC0gRERS X0VSUl9SRUdTX09GRlNFVCk7CisKKyAgICAgICAgLyogQ2xlYXIgY2FwdHVyZSBhdHRyaWJ1 dGUgcmVnaXN0ZXIgKi8KKyAgICAgICAgd3JpdGVsKDAsIGRkcjJfZXJyX3JlZ3MgKyBERFJf Q0FQVF9BVFRSIC0gRERSX0VSUl9SRUdTX09GRlNFVCk7CisKKwlyZXR1cm4gSVJRX0hBTkRM RUQ7Cit9CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NVk1FNzEwMF9FTkFCTEVfTDJfRVJS T1JTCisKK3N0YXRpYyBpcnFyZXR1cm5fdCBtdm1lNzEwMF9sMmNhY2hlX2Vycl9oYW5kbGVy KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwl1MzIgZXJyX2FkZHIsIGRhdGFfaGksIGRh dGFfbG8sIGVjYywgZXJyX2F0dHIsIGVycl9kZXQsIGVycl9jdGw7CisKKwkvKiBDb2xsZWN0 IGVycm9yIGluZm9ybWF0aW9uIGZyb20gdGhlIGVycm9yIHJlZ2lzdGVycyAqLworCWVycl9k ZXQgPSBtZnNwcihTUFJOX0wyRVJSREVUKTsKKwllcnJfYXR0ciA9IG1mc3ByKFNQUk5fTDJF UlJBVFRSKTsKKwllcnJfYWRkciA9IG1mc3ByKFNQUk5fTDJFUlJBRERSKTsKKwlkYXRhX2hp ID0gbWZzcHIoU1BSTl9MMkNBUFREQVRBSEkpOworCWRhdGFfbG8gPSBtZnNwcihTUFJOX0wy Q0FQVERBVEFMTyk7CisJZWNjID0gbWZzcHIoU1BSTl9MMkNBUFRFQ0MpOworCWVycl9jdGwg PSBtZnNwcihTUFJOX0wyRVJSQ1RMKTsKKworCS8qIENsZWFyIGludGVycnVwdCBjYXVzZSBh bmQgY2FwdHVyZSByZWdpc3RlcnMgKi8KKwltdHNwcihTUFJOX0wyRVJSREVULCBlcnJfZGV0 KTsKKwltdHNwcihTUFJOX0wyRVJSQVRUUiwgMCk7CisKKwkvKiBEaXNwbGF5IGVycm9yIGlu Zm9ybWF0aW9uICovCisJcHJpbnRrKEtFUk5fRVJSICJMMiBDYWNoZSBFcnJvciFcbiIpOwor CXByaW50ayhLRVJOX0VSUiAiTDIgRVJST1IgREVURUNUIFJFRzogMHglMDh4XG4iLCBlcnJf ZGV0KTsKKwlwcmludGsoS0VSTl9FUlIgIkwyIEVSUk9SIEFERFJFU1MgQ0FQVFVSRSBSRUc6 IDB4JTA4eFxuIiwgZXJyX2FkZHIpOworCXByaW50ayhLRVJOX0VSUiAiTDIgRVJST1IgREFU QSBISUdIIENBUFRVUkUgUkVHOiAweCUwOHhcbiIsIGRhdGFfaGkpOworCXByaW50ayhLRVJO X0VSUiAiTDIgRVJST1IgREFUQSBMT1cgQ0FQVFVSRSBSRUc6IDB4JTA4eFxuIiwgZGF0YV9s byk7CisJcHJpbnRrKEtFUk5fRVJSICJMMiBFUlJPUiBBVFRSSUJVVEVTIENBUFRVUkUgUkVH OiAweCUwOHhcbiIsIGVycl9hdHRyKTsKKwlwcmludGsoS0VSTl9FUlIgIkwyIEVSUk9SIFNZ TkRST01FIFJFRzogMHglMDh4XG4iLCBlY2MpOworCXByaW50ayhLRVJOX0VSUiAiTDIgRVJS T1IgQ09OVFJPTCBSRUc6IDB4JTA4eFxuIiwgZXJyX2N0bCk7CisKKwlyZXR1cm4gSVJRX0hB TkRMRUQ7Cit9CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NVk1FNzEwMF9FTkFCTEVfUENJ X0VSUk9SUworCitzdGF0aWMgaXJxcmV0dXJuX3QgbXZtZTcxMDBfcGNpMF9lcnJfaGFuZGxl cihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJdTMyIGVycl9kZXQsIGVycl9zdGF0dXMs IGVycl9jYXAwLCBlcnJfY2FwMSwgZXJyX2NhcDIsIGVycl9jYXAzOworCisJaWYgKGRldl9p ZCAhPSAmcGNpMF9lcnJfcmVncykKKwkJcmV0dXJuIElSUV9OT05FOworCisJLyogQ29sbGVj dCBlcnJvciBpbmZvcm1hdGlvbiBmcm9tIHRoZSBlcnJvciByZWdpc3RlcnMgKi8KKwllcnJf ZGV0ID0gcmVhZGwocGNpMF9lcnJfcmVncyArIFBFWF9FUlJfRFIgLSBQRVhfRVJSX1JFR1Nf T0ZGU0VUKTsKKwlpZiAoZXJyX2RldCA9PSAwKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwll cnJfc3RhdHVzID0KKwkgICAgcmVhZGwocGNpMF9lcnJfcmVncyArIFBFWF9FUlJfQ0FQX1NU QVQgLSBQRVhfRVJSX1JFR1NfT0ZGU0VUKTsKKwllcnJfY2FwMCA9IHJlYWRsKHBjaTBfZXJy X3JlZ3MgKyBQRVhfRVJSX0NBUF9SMCAtIFBFWF9FUlJfUkVHU19PRkZTRVQpOworCWVycl9j YXAxID0gcmVhZGwocGNpMF9lcnJfcmVncyArIFBFWF9FUlJfQ0FQX1IxIC0gUEVYX0VSUl9S RUdTX09GRlNFVCk7CisJZXJyX2NhcDIgPSByZWFkbChwY2kwX2Vycl9yZWdzICsgUEVYX0VS Ul9DQVBfUjIgLSBQRVhfRVJSX1JFR1NfT0ZGU0VUKTsKKwllcnJfY2FwMyA9IHJlYWRsKHBj aTBfZXJyX3JlZ3MgKyBQRVhfRVJSX0NBUF9SMyAtIFBFWF9FUlJfUkVHU19PRkZTRVQpOwor CisJcGNpMF9lcnJvcnMrKzsKKwkvKiBEaXNwbGF5IGVycm9yIGluZm9ybWF0aW9uICovCisJ cHJpbnRrKEtFUk5fRVJSICJQQ0kgQ29udHJvbGxlciAwIEVycm9yIVxuIik7CisJcHJpbnRr KEtFUk5fRVJSICJQRVggRVJST1IgREVURUNUIFJFRzogMHglMDh4XG4iLCBzd2FiMzIoZXJy X2RldCkpOworCXByaW50ayhLRVJOX0VSUiAiUEVYIEVSUiBDQVAgU1RBVFVTIFJFRzogMHgl MDh4XG4iLCBzd2FiMzIoZXJyX3N0YXR1cykpOworCXByaW50ayhLRVJOX0VSUiAiUEVYIEVS UiBDQVAgUkVHMDogMHglMDh4XG4iLCBzd2FiMzIoZXJyX2NhcDApKTsKKwlwcmludGsoS0VS Tl9FUlIgIlBFWCBFUlIgQ0FQIFJFRzE6IDB4JTA4eFxuIiwgc3dhYjMyKGVycl9jYXAxKSk7 CisJcHJpbnRrKEtFUk5fRVJSICJQRVggRVJSIENBUCBSRUcyOiAweCUwOHhcbiIsIHN3YWIz MihlcnJfY2FwMikpOworCXByaW50ayhLRVJOX0VSUiAiUEVYIEVSUiBDQVAgUkVHMzogMHgl MDh4XG4iLCBzd2FiMzIoZXJyX2NhcDMpKTsKKwlwcmludGsoS0VSTl9FUlIgIlBFWCBFcnJv ciBDb3VudDpcdCV1XG4iLCBwY2kwX2Vycm9ycyk7CisKKwkvKiBDbGVhciBpbnRlcnJ1cHQg Y2F1c2UgYW5kIGNhcHR1cmUgcmVnaXN0ZXJzICovCisJd3JpdGVsKGVycl9kZXQsIHBjaTBf ZXJyX3JlZ3MgKyBQRVhfRVJSX0RSIC0gUEVYX0VSUl9SRUdTX09GRlNFVCk7CisJd3JpdGVs KHN3YWIzMigweDEpLAorCSAgICAgICBwY2kwX2Vycl9yZWdzICsgUEVYX0VSUl9DQVBfU1RB VCAtIFBFWF9FUlJfUkVHU19PRkZTRVQpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQor CitzdGF0aWMgaXJxcmV0dXJuX3QgbXZtZTcxMDBfcGNpMV9lcnJfaGFuZGxlcihpbnQgaXJx LCB2b2lkICpkZXZfaWQpCit7CisJdTMyIGVycl9kZXQsIGVycl9zdGF0dXMsIGVycl9jYXAw LCBlcnJfY2FwMSwgZXJyX2NhcDIsIGVycl9jYXAzOworCisJaWYgKGRldl9pZCAhPSAmcGNp MV9lcnJfcmVncykKKwkJcmV0dXJuIElSUV9OT05FOworCisJLyogQ29sbGVjdCBlcnJvciBp bmZvcm1hdGlvbiBmcm9tIHRoZSBlcnJvciByZWdpc3RlcnMgKi8KKwllcnJfZGV0ID0gcmVh ZGwocGNpMV9lcnJfcmVncyArIFBFWF9FUlJfRFIgLSBQRVhfRVJSX1JFR1NfT0ZGU0VUKTsK KwlpZiAoZXJyX2RldCA9PSAwKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwllcnJfc3RhdHVz ID0KKwkgICAgcmVhZGwocGNpMV9lcnJfcmVncyArIFBFWF9FUlJfQ0FQX1NUQVQgLSBQRVhf RVJSX1JFR1NfT0ZGU0VUKTsKKwllcnJfY2FwMCA9IHJlYWRsKHBjaTFfZXJyX3JlZ3MgKyBQ RVhfRVJSX0NBUF9SMCAtIFBFWF9FUlJfUkVHU19PRkZTRVQpOworCWVycl9jYXAxID0gcmVh ZGwocGNpMV9lcnJfcmVncyArIFBFWF9FUlJfQ0FQX1IxIC0gUEVYX0VSUl9SRUdTX09GRlNF VCk7CisJZXJyX2NhcDIgPSByZWFkbChwY2kxX2Vycl9yZWdzICsgUEVYX0VSUl9DQVBfUjIg LSBQRVhfRVJSX1JFR1NfT0ZGU0VUKTsKKwllcnJfY2FwMyA9IHJlYWRsKHBjaTFfZXJyX3Jl Z3MgKyBQRVhfRVJSX0NBUF9SMyAtIFBFWF9FUlJfUkVHU19PRkZTRVQpOworCisJcGNpMV9l cnJvcnMrKzsKKwkvKiBEaXNwbGF5IGVycm9yIGluZm9ybWF0aW9uICovCisJcHJpbnRrKEtF Uk5fRVJSICJQQ0kgQ29udHJvbGxlciAxIEVycm9yIVxuIik7CisJcHJpbnRrKEtFUk5fRVJS ICJQRVggRVJST1IgREVURUNUIFJFRzogMHglMDh4XG4iLCBzd2FiMzIoZXJyX2RldCkpOwor CXByaW50ayhLRVJOX0VSUiAiUEVYIEVSUiBDQVAgU1RBVFVTIFJFRzogMHglMDh4XG4iLCBz d2FiMzIoZXJyX3N0YXR1cykpOworCXByaW50ayhLRVJOX0VSUiAiUEVYIEVSUiBDQVAgUkVH MDogMHglMDh4XG4iLCBzd2FiMzIoZXJyX2NhcDApKTsKKwlwcmludGsoS0VSTl9FUlIgIlBF WCBFUlIgQ0FQIFJFRzE6IDB4JTA4eFxuIiwgc3dhYjMyKGVycl9jYXAxKSk7CisJcHJpbnRr KEtFUk5fRVJSICJQRVggRVJSIENBUCBSRUcyOiAweCUwOHhcbiIsIHN3YWIzMihlcnJfY2Fw MikpOworCXByaW50ayhLRVJOX0VSUiAiUEVYIEVSUiBDQVAgUkVHMzogMHglMDh4XG4iLCBz d2FiMzIoZXJyX2NhcDMpKTsKKwlwcmludGsoS0VSTl9FUlIgIlBFWCBFcnJvciBDb3VudDpc dCV1XG4iLCBwY2kxX2Vycm9ycyk7CisKKwkvKiBDbGVhciBpbnRlcnJ1cHQgY2F1c2UgYW5k IGNhcHR1cmUgcmVnaXN0ZXJzICovCisJd3JpdGVsKGVycl9kZXQsIHBjaTFfZXJyX3JlZ3Mg KyBQRVhfRVJSX0RSIC0gUEVYX0VSUl9SRUdTX09GRlNFVCk7CisJd3JpdGVsKHN3YWIzMigw eDEpLAorCSAgICAgICBwY2kxX2Vycl9yZWdzICsgUEVYX0VSUl9DQVBfU1RBVCAtIFBFWF9F UlJfUkVHU19PRkZTRVQpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisjZW5kaWYK KworCit2b2lkIG12bWU3MTAwX3Jlc3RhcnQoY2hhciAqY21kKQoreworCXZvbGF0aWxlIHVs b25nIGkgPSAxMDAwMDAwMDsKKworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJd3JpdGViKE1W TUU3MTAwX0JPQVJEX1JFU0VULCBzeXN0ZW1fY29udHJvbF9yZWdfYWRkcik7CisKKwl3aGls ZSAoaS0tID4gMCkgOworCXBhbmljKCJyZXN0YXJ0IGZhaWxlZFxuIik7Cit9CisKKwordm9p ZCBfX2luaXQgbXZtZTcxMDBfaW5pdF9pcnEodm9pZCkKK3sKKwlzdHJ1Y3QgbXBpYyAqbXBp YzE7CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IE5VTEw7CisJc3RydWN0IHJlc291cmNl IHJlczsKKworCS8qIERldGVybWluZSBQSUMgYWRkcmVzcy4gKi8KKwlucCA9IG9mX2ZpbmRf bm9kZV9ieV90eXBlKE5VTEwsICJvcGVuLXBpYyIpOworCWlmIChucCA9PSBOVUxMKSB7CisJ CXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IGZpbmQgb3Blbi1waWMgbm9kZVxuIik7CisJ CXJldHVybjsKKwl9CisJaWYgKG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobnAsIDAsICZyZXMp KSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IG1hcCBtcGljIHJlZ2lzdGVyIHNw YWNlXG4iKTsKKwkJb2Zfbm9kZV9wdXQobnApOworCQlyZXR1cm47CisJfQorCisJLyogQWxs b2MgbXBpYyBzdHJ1Y3R1cmUgYW5kIHBlciBpc3UgaGFzIDE2IElOVCBlbnRyaWVzLiAqLwor CW1waWMxID0gbXBpY19hbGxvYyhucCwgcmVzLnN0YXJ0LAorCQkJTVBJQ19QUklNQVJZIHwg TVBJQ19XQU5UU19SRVNFVCB8IAorCQkJTVBJQ19CSUdfRU5ESUFOIHwgTVBJQ19CUk9LRU5f RlJSX05JUlFTIHwKKwkJCU1QSUNfU0lOR0xFX0RFU1RfQ1BVLAorCQkJMCwgMjU2LCAiIE1Q SUMgICAgICIpOworCUJVR19PTihtcGljMSA9PSBOVUxMKTsKKworCW1waWNfaW5pdChtcGlj MSk7CisJb2Zfbm9kZV9wdXQobnApOworCisjaWZkZWYgQ09ORklHX01WTUU3MTAwX0VOQUJM RV9MMl9FUlJPUlMKKwlucCA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKE5VTEwsICJsMl9jYWNo ZSIpOworCWlmIChucCA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0lORk8gIlBJQyBpbml0 OiBjYW5ub3QgZmluZCBsMl9jYWNoZSBub2RlXG4iKTsKKwl9IGVsc2UgeworCQlsMl9pcnEg PSBpcnFfb2ZfcGFyc2VfYW5kX21hcChucCwgMCk7CisJCWlmIChsMl9pcnEgPT0gTk9fSVJR KQorCQkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gbWFwIEwyIGNhY2hlIGlycVxuIik7 CisJCW9mX25vZGVfcHV0KG5wKTsKKwl9CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NVk1F NzEwMF9FTkFCTEVfRERSX0VSUk9SUworCW5wID0gb2ZfZmluZF9ub2RlX2J5X3R5cGUoTlVM TCwgIm1lbW9yeS1jb250cm9sbGVyIik7CisJaWYgKG5wID09IE5VTEwpIHsKKwkJcHJpbnRr KEtFUk5fSU5GTworCQkgICAgICAgIlBJQyBpbml0OiBjYW5ub3QgZmluZCBtZW1vcnktY29u dHJvbGxlciBub2RlXG4iKTsKKwl9IGVsc2UgeworCQltcGM4Nnh4X2Rkcl9pcnEgPSBpcnFf b2ZfcGFyc2VfYW5kX21hcChucCwgMCk7CisJCWlmIChtcGM4Nnh4X2Rkcl9pcnEgPT0gTk9f SVJRKQorCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIlVuYWJsZSB0byBtYXAgbWVt b3J5IGNvbnRyb2xsZXIgaXJxXG4iKTsKKwkJb2Zfbm9kZV9wdXQobnApOworCX0KKyNlbmRp ZgorCisJbnAgPSBvZl9maW5kX25vZGVfYnlfcGF0aCgiL3BjaWVAZjEwMDgwMDAiKTsKKwlp ZiAobnAgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9JTkZPICJQSUMgaW5pdDogY2Fubm90 IGZpbmQgUENJIDAgbm9kZVxuIik7CisJfSBlbHNlIHsKKwkJcGNpMF9pcnEgPSBpcnFfb2Zf cGFyc2VfYW5kX21hcChucCwgMCk7CisJCWlmIChwY2kwX2lycSA9PSBOT19JUlEpCisJCQlw cmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBtYXAgUENJIDAgaXJxXG4iKTsKKwkJb2Zfbm9k ZV9wdXQobnApOworCX0KKworCW5wID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi9wY2llQGYx MDA5MDAwIik7CisJaWYgKG5wID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiUElD IGluaXQ6IGNhbm5vdCBmaW5kIFBDSSAxIG5vZGVcbiIpOworCX0gZWxzZSB7CisJCXBjaTFf aXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobnAsIDApOworCQlpZiAocGNpMV9pcnEgPT0g Tk9fSVJRKQorCQkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gbWFwIFBDSSAxIGlycVxu Iik7CisJCW9mX25vZGVfcHV0KG5wKTsKKwl9CisKKyNpZmRlZiBDT05GSUdfU0VOU09SU19M TTkwCisJbnAgPSBvZl9maW5kX25vZGVfYnlfdHlwZShOVUxMLCAidGhlcm1vc3RhdCIpOwor CWlmIChucCA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0lORk8gIlBJQyBpbml0OiBjYW5u b3QgZmluZCB0ZW1wIHNlbnNvciBub2RlXG4iKTsKKwl9IGVsc2UgeworCQltYXhpbTY2NDlf aXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobnAsIDApOworCQlpZiAobWF4aW02NjQ5X2ly cSA9PSBOT19JUlEpCisJCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBtYXAgTUFYSU02 NjQ5IGlycVxuIik7CisJCW9mX25vZGVfcHV0KG5wKTsKKwl9CisjZW5kaWYKKworI2lmZGVm IENPTkZJR19NVk1FNzEwMF9USUNLX1RJTUVSUworCW5wID0gb2ZfZmluZF9ub2RlX2J5X3R5 cGUoTlVMTCwgImJvYXJkX3RpbWVycyIpOworCWlmIChucCA9PSBOVUxMKSB7CisJCXByaW50 ayhLRVJOX0lORk8gIlBJQyBpbml0OiBjYW5ub3QgZmluZCB0aW1lcnMgbm9kZVxuIik7CisJ fSBlbHNlIHsKKwkJbXZtZTcxMDBfdGltZXJfaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAo bnAsIDApOworCQlpZiAobXZtZTcxMDBfdGltZXJfaXJxID09IE5PX0lSUSkKKwkJCXByaW50 ayhLRVJOX0VSUiAiVW5hYmxlIHRvIG1hcCB0aW1lcnMgaXJxXG4iKTsKKwkJb2Zfbm9kZV9w dXQobnApOworCX0KKyNlbmRpZgorCisJbnAgPSBvZl9maW5kX25vZGVfYnlfcGF0aCgiL3Nl cmlhbEBmMjAxMTAwMCIpOworCWlmIChucCA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0lO Rk8KKwkJICAgICAgICJQSUMgaW5pdDogY2Fubm90IGZpbmQgc2VyaWFsQGYyMDExMDAwIG5v ZGVcbiIpOworCX0gZWxzZSB7CisJCXNlcmlhbF9pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21h cChucCwgMCk7CisJCWlmIChzZXJpYWxfaXJxID09IE5PX0lSUSkKKwkJCXByaW50ayhLRVJO X0VSUiAiVW5hYmxlIHRvIG1hcCBzZXJpYWxAZjIwMTEwMDAgaXJxXG4iKTsKKwkJb2Zfbm9k ZV9wdXQobnApOworCX0KKworCW5wID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi9zZXJpYWxA ZjIwMTIwMDAiKTsKKwlpZiAobnAgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9JTkZPCisJ CSAgICAgICAiUElDIGluaXQ6IGNhbm5vdCBmaW5kIHNlcmlhbEBmMjAxMjAwMCBub2RlXG4i KTsKKwl9IGVsc2UgeworCQlzZXJpYWxfaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobnAs IDApOworCQlpZiAoc2VyaWFsX2lycSA9PSBOT19JUlEpCisJCQlwcmludGsoS0VSTl9FUlIg IlVuYWJsZSB0byBtYXAgc2VyaWFsQGYyMDEyMDAwIGlycVxuIik7CisJCW9mX25vZGVfcHV0 KG5wKTsKKwl9CisKKwlucCA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKCIvc2VyaWFsQGYyMDEz MDAwIik7CisJaWYgKG5wID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkgICAg ICAgIlBJQyBpbml0OiBjYW5ub3QgZmluZCBzZXJpYWxAZjIwMTMwMDAgbm9kZVxuIik7CisJ fSBlbHNlIHsKKwkJc2VyaWFsX2lycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG5wLCAwKTsK KwkJaWYgKHNlcmlhbF9pcnEgPT0gTk9fSVJRKQorCQkJcHJpbnRrKEtFUk5fRVJSICJVbmFi bGUgdG8gbWFwIHNlcmlhbEBmMjAxMzAwMCBpcnFcbiIpOworCQlvZl9ub2RlX3B1dChucCk7 CisJfQorCW5wID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi9zZXJpYWxAZjIwMTQwMDAiKTsK KwlpZiAobnAgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9JTkZPCisJCSAgICAgICAiUElD IGluaXQ6IGNhbm5vdCBmaW5kIHNlcmlhbEBmMjAxNDAwMCBub2RlXG4iKTsKKwl9IGVsc2Ug eworCQlzZXJpYWxfaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobnAsIDApOworCQlpZiAo c2VyaWFsX2lycSA9PSBOT19JUlEpCisJCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBt YXAgc2VyaWFsQGYyMDE0MDAwIGlycVxuIik7CisJCW9mX25vZGVfcHV0KG5wKTsKKwl9Cit9 CisKKworc3RhdGljIHZvaWQgX19pbml0IG12bWU3MTAwX21pc2NfaW5pdCh2b2lkKQorewor CXZvaWQgX19pb21lbSAqcmVnX2Jsb2NrOworCXU4IHJlZ192YWx1ZTsKKwl1MzIgdmFsOwor CXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBOVUxMOworCWNvbnN0IHUzMiAqcmVnczsKKyNp ZmRlZiBDT05GSUdfTVZNRTcxMDBfRU5BQkxFX0wyX0VSUk9SUworCXVuc2lnbmVkIGxvbmcg YTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19NVk1FNzEwMF9FTkFCTEVfRERSX0VSUk9SUwor CXUzMiBzYmVfY291bnQ7CisjZW5kaWYKKworCW5wID0gb2ZfZmluZF9ub2RlX2J5X3R5cGUo bnAsICJzb2MiKTsKKwlpZiAobnAgPT0gTlVMTCkgeworCQlwcmludGsoIkVycm9yOkNhbm5v dCBmaW5kIHNvYyBub2RlXG4iKTsKKwkJcmV0dXJuOworCX0KKwlyZWdzID0gb2ZfZ2V0X3By b3BlcnR5KG5wLCAicmVnIiwgTlVMTCk7CisJaWYgKHJlZ3MgPT0gTlVMTCkgeworCQlwcmlu dGsoIkVycm9yOkNhbm5vdCBnZXQgcmVnIHByb3BlcnR5IGZyb20gc29jIG5vZGVcbiIpOwor CQlvZl9ub2RlX3B1dChucCk7CisJCXJldHVybjsKKwl9IGVsc2UKKwkJaGJfYmFkZHIgPSBy ZWdzWzBdOworCisJb2Zfbm9kZV9wdXQobnApOworCisjaWZkZWYgQ09ORklHX01WTUU3MTAw X0VOQUJMRV9MMl9FUlJPUlMKKworCXZhbCA9IF9nZXRfTDJDUigpOworCXZhbCAmPSB+TDJD Ul9MMkU7CisJX3NldF9MMkNSKHZhbCk7CisJZm9yIChhID0gS0VSTkVMQkFTRTsgYSA8IEtF Uk5FTEJBU0UgKyAweDgwMDAwMDsgYSArPSAzMikKKwkJYXNtIHZvbGF0aWxlICgiZGNiZiAw LCUwIjo6InIiIChhKToibWVtb3J5Iik7CisJYXNtIHZvbGF0aWxlICgic3luYyIpOworCisJ LyogRW5hYmxlIEwyIGNhY2hlIGVycm9yIGRldGVjdGlvbiAqLworCW10c3ByKFNQUk5fTDJF UlJESVMsIDApOworCWFzbSB2b2xhdGlsZSAoImVpZWlvIik7CisJYXNtIHZvbGF0aWxlICgi aXN5bmMiKTsKKwkvKiBDbGVhciBhbnkgbG9nZ2VkIEwyIGVycm9ycyAqLworCW10c3ByKFNQ Uk5fTDJFUlJERVQsIDB4ODAwMDAwMUMpOworCWFzbSB2b2xhdGlsZSAoImVpZWlvIik7CisJ YXNtIHZvbGF0aWxlICgiaXN5bmMiKTsKKworI2VuZGlmCisJLyogRW5hYmxlIEwyICovCisJ dmFsID0gX2dldF9MMkNSKCk7CisJdmFsIHw9IEwyQ1JfTDJFOworCV9zZXRfTDJDUih2YWwp OworCXByaW50aygiTDIgY2FjaGUgZW5hYmxlZC4gTDJDVEwgcmVnOiAweCVseFxuIiwgX2dl dF9MMkNSKCkpOworCisjaWZkZWYgQ09ORklHX01WTUU3MTAwX0VOQUJMRV9ERFJfRVJST1JT CisJZGRyMV9lcnJfcmVncyA9CisJICAgIGlvcmVtYXAoaGJfYmFkZHIgKyBERFIxX1JFR1Nf T0ZGU0VUICsgRERSX0VSUl9SRUdTX09GRlNFVCwgRERSX0VSUl9SRUdTX1NJWkUpOworCS8q IEVuYWJsZSBhbGwgZXJyb3IgZGV0ZWN0aW9uICovCisJd3JpdGVsKDAsIGRkcjFfZXJyX3Jl Z3MgKyBERFJfRVJSX0RJU0FCTEUgLSBERFJfRVJSX1JFR1NfT0ZGU0VUKTsKKwkvKiBDbGVh ciBsb2dnZWQgRERSIGVycm9ycyAqLworCXdyaXRlbChzd2FiMzIoMHg4MDAwMDAwRCksCisJ ICAgICAgIGRkcjFfZXJyX3JlZ3MgKyBERFJfRVJSX0RFVCAtIEREUl9FUlJfUkVHU19PRkZT RVQpOworCS8qIFNldCBzaW5nbGUtYml0IGVycm9yIHRocmVzaG9sZCAqLworCXNiZV9jb3Vu dCA9IDB4MDAwMTAwMDA7CisJd3JpdGVsKHN3YWIzMihzYmVfY291bnQpLAorCSAgICAgICBk ZHIxX2Vycl9yZWdzICsgRERSX0VSUl9TQkUgLSBERFJfRVJSX1JFR1NfT0ZGU0VUKTsKKwor ICAgICAgICBkZHIyX2Vycl9yZWdzID0KKyAgICAgICAgICAgIGlvcmVtYXAoaGJfYmFkZHIg KyBERFIyX1JFR1NfT0ZGU0VUICsgRERSX0VSUl9SRUdTX09GRlNFVCwgRERSX0VSUl9SRUdT X1NJWkUpOworICAgICAgICAvKiBFbmFibGUgYWxsIGVycm9yIGRldGVjdGlvbiAqLworICAg ICAgICB3cml0ZWwoMCwgZGRyMl9lcnJfcmVncyArIEREUl9FUlJfRElTQUJMRSAtIEREUl9F UlJfUkVHU19PRkZTRVQpOworICAgICAgICAvKiBDbGVhciBsb2dnZWQgRERSIGVycm9ycyAq LworICAgICAgICB3cml0ZWwoc3dhYjMyKDB4ODAwMDAwMEQpLAorICAgICAgICAgICAgICAg ZGRyMl9lcnJfcmVncyArIEREUl9FUlJfREVUIC0gRERSX0VSUl9SRUdTX09GRlNFVCk7Cisg ICAgICAgIC8qIFNldCBzaW5nbGUtYml0IGVycm9yIHRocmVzaG9sZCAqLworICAgICAgICBz YmVfY291bnQgPSAweDAwMDEwMDAwOworICAgICAgICB3cml0ZWwoc3dhYjMyKHNiZV9jb3Vu dCksCisgICAgICAgICAgICAgICBkZHIyX2Vycl9yZWdzICsgRERSX0VSUl9TQkUgLSBERFJf RVJSX1JFR1NfT0ZGU0VUKTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01WTUU3MTAwX0VO QUJMRV9QQ0lfRVJST1JTCisJLyogTWFwIGluIFBDSSBFcnJvciBSZWdpc3RlcnMgKi8KKwlw Y2kwX2Vycl9yZWdzID0gaW9yZW1hcChoYl9iYWRkciArIFBDSTBfUkVHU19PRkZTRVQgKyAK KwkJCSAgICAgICBQRVhfRVJSX1JFR1NfT0ZGU0VULCBQRVhfRVJSX1JFR1NfU0laRSk7CisJ cGNpMV9lcnJfcmVncyA9IGlvcmVtYXAoaGJfYmFkZHIgKyBQQ0kxX1JFR1NfT0ZGU0VUICsg CisJCQkgICAgICAgUEVYX0VSUl9SRUdTX09GRlNFVCwgUEVYX0VSUl9SRUdTX1NJWkUpOwor I2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVk1FX0JSSURHRQorCXsKKwkJZXh0ZXJuIHZvaWQg dm1lbW9kX3NldHVwX29wdGlvbnMoY2hhciAqKTsKKworCQl2bWVtb2Rfc2V0dXBfb3B0aW9u cyhjbWRfbGluZSk7CisJfQorI2VuZGlmCisKKwlyZWdfYmxvY2sgPSBpb3JlbWFwKE1WTUU3 MTAwX1NZU1RFTV9TVEFUVVNfUkVHLCA2NCk7CisKKwkvKiBUdXJuIG9mZiBVU1IxIFJlZCBM RUQgKi8KKwlyZWdfdmFsdWUgPSByZWFkYihyZWdfYmxvY2sgKyBNVk1FNzEwMF9TVEFUVVNf SU5ESUNBVE9SX1JFR19PRkZTRVQpOworCXJlZ192YWx1ZSAmPSB+TVZNRTcxMDBfVVNSMV9S RURfTEVEOworCXdyaXRlYihyZWdfdmFsdWUsIHJlZ19ibG9jayArIE1WTUU3MTAwX1NUQVRV U19JTkRJQ0FUT1JfUkVHX09GRlNFVCk7CisKKwkvKiBEaXNhYmxlIFJUQywgVGVtcCBTZW5z b3IsIGFuZCBBYm9ydCBpbnRlcnJ1cHRzICovCisJcmVnX3ZhbHVlID0gcmVhZGIocmVnX2Js b2NrICsgTVZNRTcxMDBfSU5URVJSVVBUX1JFR18yX09GRlNFVCk7CisJcmVnX3ZhbHVlIHw9 IE1WTUU3MTAwX1JUQ19NQVNLIHwgTVZNRTcxMDBfVEVNUF9NQVNLIHwKKwkgICAgTVZNRTcx MDBfQUJPUlRfTUFTSzsKKwl3cml0ZWIocmVnX3ZhbHVlLCByZWdfYmxvY2sgKyBNVk1FNzEw MF9JTlRFUlJVUFRfUkVHXzJfT0ZGU0VUKTsKKworCS8qIFR1cm4gb2ZmIE5PUiBmbGFzaCBT VyB3cml0ZS1wcm90ZWN0ICovCisJcmVnX3ZhbHVlID0gcmVhZGIocmVnX2Jsb2NrICsgTVZN RTcxMDBfTk9SX0ZMQVNIX0NUUkxfU1RBVF9SRUdfT0ZGU0VUKTsKKwlyZWdfdmFsdWUgJj0g fk1WTUU3MTAwX05PUl9GTEFTSF9XUF9TVzsKKwl3cml0ZWIocmVnX3ZhbHVlLCByZWdfYmxv Y2sgKyBNVk1FNzEwMF9OT1JfRkxBU0hfQ1RSTF9TVEFUX1JFR19PRkZTRVQpOworCisJaW91 bm1hcChyZWdfYmxvY2spOworCisJLyogSGFjayBmb3IgUmV2IEEgYm9hcmRzICovCisjaWYg MAorCXJlZ19ibG9jayA9IGlvcmVtYXAoMHhlMTAwNTAwOCwgNCk7CisJdmFsID0gc3dhYjMy KHJlYWRsKHJlZ19ibG9jaykpOworCXZhbCAmPSB+MTsKKwl3cml0ZWwoc3dhYjMyKHZhbCks IHJlZ19ibG9jayk7CisJaW91bm1hcChyZWdfYmxvY2spOworI2VuZGlmCisKKwlzeXN0ZW1f Y29udHJvbF9yZWdfYWRkciA9IGlvcmVtYXAoTVZNRTcxMDBfU1lTVEVNX0NPTlRST0xfUkVH LCAxKTsKKworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgX19pbml0IG12bWU3MTAwX3Nl dHVwX2FyY2godm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCisJaWYgKHBw Y19tZC5wcm9ncmVzcykKKwkJcHBjX21kLnByb2dyZXNzKCJtdm1lNzEwMF9zZXR1cF9hcmNo KCkiLCAwKTsKKworI2lmZGVmIENPTkZJR19QQ0kKKwlmb3JfZWFjaF9jb21wYXRpYmxlX25v ZGUobnAsICJwY2kiLCAiZnNsLG1wYzg2NDEtcGNpZSIpIHsKKwkJc3RydWN0IHJlc291cmNl IHJzcmM7CisKKwkJb2ZfYWRkcmVzc190b19yZXNvdXJjZShucCwgMCwgJnJzcmMpOworCQlp ZiAoKHJzcmMuc3RhcnQgJiAweGZmZmZmKSA9PSAweDgwMDApCisJCQlmc2xfYWRkX2JyaWRn ZShucCwgMSk7CisJCWVsc2UKKwkJCWZzbF9hZGRfYnJpZGdlKG5wLCAwKTsKKwl9CisjZW5k aWYKKworCXByaW50aygiTVZNRTcxMDAgYm9hcmQgZnJvbSBFbWVyc29uIE5ldHdvcmsgUG93 ZXIgRW1iZWRkZWQgQ29tcHV0aW5nXG4iKTsKKworI2lmZGVmICBDT05GSUdfUk9PVF9ORlMK KwlST09UX0RFViA9IFJvb3RfTkZTOworI2Vsc2UKKwlST09UX0RFViA9IFJvb3RfU0RBMjsK KyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1NNUAorCW1wYzg2eHhfc21wX2luaXQoKTsKKyNl bmRpZgorCisjaWZkZWYgQ09ORklHX1ZNRV9CUklER0VfQk9PVE1FTQorCXZtZV9ib290bWVt X3NpemUgPSBDT05GSUdfVk1FX0JSSURHRV9CT09UTUVNX1NJWkUgKiAxMDI0ICogMTAyNDsK KworCWlmICh2bWVfYm9vdG1lbV9zaXplID4gKHRvdGFsX21lbW9yeSAvIDIpKSB7CisJCXBy aW50ayhLRVJOX1dBUk5JTkcKKwkJICAgICAgICJCT09UTUVNIFNpemUgUmVxdWVzdGVkOiAw eCV4IFRvdGFsIE1lbW9yeSAweCVseFxuIiwKKwkJICAgICAgIHZtZV9ib290bWVtX3NpemUs IHRvdGFsX21lbW9yeSk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJICAgICAgICJCT09U TUVNIFNpemUgcmVxdWVzdGVkIGhhcyBiZWVuIGNhcHBlZCBhdCBoYWxmIHRoZSB0b3RhbCBt ZW1vcnlcbiIpOworCQl2bWVfYm9vdG1lbV9zaXplID0gdG90YWxfbWVtb3J5IC8gMjsKKwl9 CisJdm1lX2RyaXZlcl9ib290bWVtID0gX19hbGxvY19ib290bWVtKHZtZV9ib290bWVtX3Np emUsIDB4MTAwMDAsIDApOworCWlmICghdm1lX2RyaXZlcl9ib290bWVtKSB7CisJCXByaW50 ayhLRVJOX1dBUk5JTkcgIlVuYWJsZSB0byBvYnRhaW4gYm9vdCBtZW1vcnkgZm9yIFZNRVxu Iik7CisJCXZtZV9ib290bWVtX3NpemUgPSAwOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJO X0lORk8KKwkJICAgICAgICIweCV4IG9mIGJvb3QgbWVtb3J5IHJlc2VydmVkIGZvciBzZXR1 cCBvZiBWTUUgaW5ib3VuZCB3aW5kb3cgN1xuIiwKKwkJICAgICAgIHZtZV9ib290bWVtX3Np emUpOworCX0KKyNlbmRpZgorCW12bWU3MTAwX21pc2NfaW5pdCgpOworfQorCisKK3ZvaWQg bXZtZTcxMDBfc2hvd19jcHVpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSkKK3sKKwlzdHJ1Y3Qg ZGV2aWNlX25vZGUgKnJvb3Q7CisJdWludCBwdmlkLCBzdmlkLCBwaGlkMTsKKwlwaHlzX2Fk ZHJfdCBpbW1yX2Jhc2U7CisJdWludCBtZW1zaXplID0gdG90YWxfbWVtb3J5OworCWNvbnN0 IGNoYXIgKm1vZGVsID0gIiI7CisJdm9pZCBfX2lvbWVtICpyZWdfYmxvY2s7CisJdTggcmVn X3ZhbHVlOworCXUzMiByZWczMl92YWx1ZTsKKwljaGFyIGJ1ZmZbMTZdID0gIiI7CisKKwlz ZXFfcHJpbnRmKG0sICJWZW5kb3JcdFx0OiBGcmVlc2NhbGVcbiIpOworCisJcm9vdCA9IG9m X2ZpbmRfbm9kZV9ieV9wYXRoKCIvIik7CisJaWYgKHJvb3QpCisJCW1vZGVsID0gb2ZfZ2V0 X3Byb3BlcnR5KHJvb3QsICJtb2RlbCIsIE5VTEwpOworCXNlcV9wcmludGYobSwgIk1hY2hp bmVcdFx0OiAlc1xuIiwgbW9kZWwpOworCW9mX25vZGVfcHV0KHJvb3QpOworCisJcHZpZCA9 IG1mc3ByKFNQUk5fUFZSKTsKKwlzdmlkID0gbWZzcHIoU1BSTl9TVlIpOworCWltbXJfYmFz ZSA9IGdldF9pbW1yYmFzZSgpOworCisJc2VxX3ByaW50ZihtLCAiUFZSXHRcdDogMHgleFxu IiwgcHZpZCk7CisJc2VxX3ByaW50ZihtLCAiU1ZSXHRcdDogMHgleFxuIiwgc3ZpZCk7CisJ c2VxX3ByaW50ZihtLCAiSElEMFx0XHQ6IDB4JTA4bHhcbiIsIG1mc3ByKFNQUk5fSElEMCkp OworCXNlcV9wcmludGYobSwgIkhJRDFcdFx0OiAweCUwOGx4XG4iLCBtZnNwcihTUFJOX0hJ RDEpKTsKKwlzZXFfcHJpbnRmKG0sICJDQ1NSIEJhc2VcdDogMHglMDh4XG4iLCBpbW1yX2Jh c2UpOworCisJLyogRGlzcGxheSBjcHUgUGxsIHNldHRpbmcgKi8KKwlwaGlkMSA9IG1mc3By KFNQUk5fSElEMSk7CisJc2VxX3ByaW50ZihtLCAiUExMIHNldHRpbmdcdDogMHgleFxuIiwg KChwaGlkMSA+PiAyNCkgJiAweDNmKSk7CisKKwkvKiBEaXNwbGF5IHRoZSBjYWNoZSBzZXR0 aW5ncyAqLworCXNlcV9wcmludGYobSwgIkwyQ1JcdFx0OiAweCVseFxuIiwgX2dldF9MMkNS KCkpOworCisJc2VxX3ByaW50ZihtLCAiXG5CT0FSRCBJTkZPUk1BVElPTjpcblxuIik7CisK KwlyZWdfYmxvY2sgPSBpb3JlbWFwKE1WTUU3MTAwX1NZU1RFTV9TVEFUVVNfUkVHLCA2NCk7 CisKKwkvKiBEaXNwbGF5IHRoZSBhbW91bnQgb2YgbWVtb3J5ICovCisJc2VxX3ByaW50Ziht LCAiTWVtb3J5XHRcdFx0OiAlZCBNQlxuIiwgbWVtc2l6ZSAvICgxMDI0ICogMTAyNCkpOwor CisJLyogU3lzdGVtIFN0YXR1cyBSZWdpc3RlciAqLworCXJlZ192YWx1ZSA9IHJlYWRiKHJl Z19ibG9jayk7CisJc2VxX3ByaW50ZihtLCAiU1c4IFN0YXRlXHRcdDogJXNcbiIsCisJCSAg ICgocmVnX3ZhbHVlICYgTVZNRTcxMDBfU1RBVEVfU1c4KSA/ICJPTiIgOiAiT0ZGIikpOwor CXNlcV9wcmludGYobSwgIlNXNyBTdGF0ZVx0XHQ6ICVzXG4iLAorCQkgICAoKHJlZ192YWx1 ZSAmIE1WTUU3MTAwX1NUQVRFX1NXNykgPyAiT04iIDogIk9GRiIpKTsKKwlzZXFfcHJpbnRm KG0sICJTVzYgU3RhdGVcdFx0OiAlc1xuIiwKKwkJICAgKChyZWdfdmFsdWUgJiBNVk1FNzEw MF9TVEFURV9TVzYpID8gIk9OIiA6ICJPRkYiKSk7CisJc2VxX3ByaW50ZihtLCAiU1c1IFN0 YXRlXHRcdDogJXNcbiIsCisJCSAgICgocmVnX3ZhbHVlICYgTVZNRTcxMDBfU1RBVEVfU1c1 KSA/ICJPTiIgOiAiT0ZGIikpOworCisJc2VxX3ByaW50ZihtLCAiU2FmZSBTdGFydCBTdGF0 dXNcdDogJXNcbiIsCisJCSAgICgocmVnX3ZhbHVlICYgTVZNRTcxMDBfU0FGRV9TVEFSVCkg PworCQkgICAgIlNhZmUgRU5WIHNldHRpbmdzIHVzZWQiIDogIk5WUkFNIEVOViBzZXR0aW5n cyB1c2VkIikpOworCisJc2VxX3ByaW50ZihtLCAiUEVYODUyNSBFcnJvciBTdGF0dXNcdDog JXNcbiIsCisJCSAgICgocmVnX3ZhbHVlICYgTVZNRTcxMDBfUEVYODUyNV9FUlJPUikgPwor CQkgICAgIkZhdGFsIEVycm9yIiA6ICJObyBGYXRhbCBFcnJvciIpKTsKKworCXN3aXRjaCAo cmVnX3ZhbHVlICYgTVZNRTcxMDBfQk9BUkRfVFlQRV9NQVNLKSB7CisJY2FzZSBNVk1FNzEw MF9CT0FSRF9UWVBFX1BSUE1DOgorCQlzcHJpbnRmKGJ1ZmYsICJQclBNQyIpOworCQlicmVh azsKKwljYXNlIE1WTUU3MTAwX0JPQVJEX1RZUEVfVk1FOgorCQlzcHJpbnRmKGJ1ZmYsICJW TUUiKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc3ByaW50ZihidWZmLCAiVW5rbm93biIp OworCQlicmVhazsKKwl9CisJc2VxX3ByaW50ZihtLCAiQm9hcmQgVHlwZVx0XHQ6ICVzXG4i LCBidWZmKTsKKworCS8qIFN5c3RlbSBDb250cm9sIFJlZ2lzdGVyICovCisJcmVnX3ZhbHVl ID0gcmVhZGIocmVnX2Jsb2NrICsgTVZNRTcxMDBfU1lTVEVNX0NPTlRST0xfUkVHX09GRlNF VCk7CisJc2VxX3ByaW50ZihtLCAiRUVQUk9NIFdQIFN0YXR1c1x0OiAlc1xuIiwKKwkJICAg KChyZWdfdmFsdWUgJiBNVk1FNzEwMF9FRVBST01fV1ApID8KKwkJICAgICJFRVBST00gV3Jp dGUgUHJvdGVjdGVkIiA6ICJFRVBST00gTm90IFdyaXRlIFByb3RlY3RlZCIpKTsKKworCS8q IFN0YXR1cyBJbmRpY2F0b3IgUmVnaXN0ZXIgKi8KKwlyZWdfdmFsdWUgPSByZWFkYihyZWdf YmxvY2sgKyBNVk1FNzEwMF9TVEFUVVNfSU5ESUNBVE9SX1JFR19PRkZTRVQpOworCXNlcV9w cmludGYobSwgIlVTUjEgUmVkIExFRFx0XHQ6ICVzXG4iLAorCQkgICAoKHJlZ192YWx1ZSAm IE1WTUU3MTAwX1VTUjFfUkVEX0xFRCkgPyAiTGl0IiA6ICJOb3QgTGl0IikpOworCXNlcV9w cmludGYobSwgIlVTUjEgWWVsbG93IExFRFx0XHQ6ICVzXG4iLAorCQkgICAoKHJlZ192YWx1 ZSAmIE1WTUU3MTAwX1VTUjFfWUVMTE9XX0xFRCkgPyAiTGl0IiA6CisJCSAgICAiTm90IExp dCIpKTsKKwlzZXFfcHJpbnRmKG0sICJVU1IyIExFRFx0XHQ6ICVzXG4iLAorCQkgICAoKHJl Z192YWx1ZSAmIE1WTUU3MTAwX1VTUjJfTEVEKSA/ICJMaXQiIDogIk5vdCBMaXQiKSk7CisJ c2VxX3ByaW50ZihtLCAiVVNSMyBMRURcdFx0OiAlc1xuIiwKKwkJICAgKChyZWdfdmFsdWUg JiBNVk1FNzEwMF9VU1IzX0xFRCkgPyAiTGl0IiA6ICJOb3QgTGl0IikpOworCisJLyogTk9S IEZsYXNoIENvbnRyb2wvU3RhdHVzIFJlZ2lzdGVyICovCisJcmVnX3ZhbHVlID0gcmVhZGIo cmVnX2Jsb2NrICsgTVZNRTcxMDBfTk9SX0ZMQVNIX0NUUkxfU1RBVF9SRUdfT0ZGU0VUKTsK KwlzZXFfcHJpbnRmKG0sICJOT1IgRmxhc2ggTWFwIFNlbGVjdFx0OiAlc1xuIiwKKwkJICAg KChyZWdfdmFsdWUgJiBNVk1FNzEwMF9OT1JfRkxBU0hfTUFQX1NFTEVDVCkgPworCQkgICAg IkJvb3QgQmxvY2sgQSBNYXBwZWQgdG8gSGlnaGVzdCBBZGRyZXNzIiA6CisJCSAgICAiRmxh c2ggTWVtb3J5IE1hcCBDb250cm9sbGVkIGJ5IEZsYXNoIEJvb3QgQmxvY2sgU2VsZWN0Iikp OworCXNlcV9wcmludGYobSwgIk5PUiBGbGFzaCBXUCBTV1x0XHQ6ICVzXG4iLAorCQkgICAo KHJlZ192YWx1ZSAmIE1WTUU3MTAwX05PUl9GTEFTSF9XUF9TVykgPworCQkgICAgIldyaXRl IFByb3RlY3RlZCIgOiAiTm90IFdyaXRlIFByb3RlY3RlZCIpKTsKKwlzZXFfcHJpbnRmKG0s ICJOT1IgRmxhc2ggV1AgSFdcdFx0OiAlc1xuIiwKKwkJICAgKChyZWdfdmFsdWUgJiBNVk1F NzEwMF9OT1JfRkxBU0hfV1BfSFcpID8KKwkJICAgICJXcml0ZSBQcm90ZWN0ZWQiIDogIk5v dCBXcml0ZSBQcm90ZWN0ZWQiKSk7CisJc2VxX3ByaW50ZihtLCAiTk9SIEZsYXNoIEJvb3Qg U2VsZWN0XHQ6ICVzXG4iLAorCQkgICAoKHJlZ192YWx1ZSAmIE1WTUU3MTAwX05PUl9GTEFT SF9CTEtfU0VMKSA/CisJCSAgICAiQm9vdCBCbG9jayBCIFNlbGVjdGVkIiA6ICJCb290IEJs b2NrIEEgU2VsZWN0ZWQiKSk7CisJc2VxX3ByaW50ZihtLCAiTk9SIEZsYXNoIFJlYWR5IFN0 YXR1c1x0OiAlc1xuIiwKKwkJICAgKChyZWdfdmFsdWUgJiBNVk1FNzEwMF9OT1JfRkxBU0hf UkRZKSA/CisJCSAgICAiQml0IFNldCIgOiAiQml0IE5vdCBTZXQiKSk7CisKKwkvKiBJbnRl cnJ1cHQgUmVnaXN0ZXIgMSAqLworCXJlZ192YWx1ZSA9IHJlYWRiKHJlZ19ibG9jayArIE1W TUU3MTAwX0lOVEVSUlVQVF9SRUdfMV9PRkZTRVQpOworCisJc2VxX3ByaW50ZihtLCAiVFNF QzQgUEhZIEludGVycnVwdFx0OiAlc1xuIiwKKwkJICAgKChyZWdfdmFsdWUgJiBNVk1FNzEw MF9UU0VDNF9QSFlfSU5URVJSVVBUKSA/CisJCSAgICAiQXNzZXJ0ZWQiIDogIk5vdCBBc3Nl cnRlZCIpKTsKKworCXNlcV9wcmludGYobSwgIlRTRUMzIFBIWSBJbnRlcnJ1cHRcdDogJXNc biIsCisJCSAgICgocmVnX3ZhbHVlICYgTVZNRTcxMDBfVFNFQzNfUEhZX0lOVEVSUlVQVCkg PworCQkgICAgIkFzc2VydGVkIiA6ICJOb3QgQXNzZXJ0ZWQiKSk7CisKKwlzZXFfcHJpbnRm KG0sICJUU0VDMiBQSFkgSW50ZXJydXB0XHQ6ICVzXG4iLAorCQkgICAoKHJlZ192YWx1ZSAm IE1WTUU3MTAwX1RTRUMyX1BIWV9JTlRFUlJVUFQpID8KKwkJICAgICJBc3NlcnRlZCIgOiAi Tm90IEFzc2VydGVkIikpOworCisJc2VxX3ByaW50ZihtLCAiVFNFQzEgUEhZIEludGVycnVw dFx0OiAlc1xuIiwKKwkJICAgKChyZWdfdmFsdWUgJiBNVk1FNzEwMF9UU0VDMV9QSFlfSU5U RVJSVVBUKSA/CisJCSAgICAiQXNzZXJ0ZWQiIDogIk5vdCBBc3NlcnRlZCIpKTsKKworCS8q IEludGVycnVwdCBSZWdpc3RlciAyICovCisJcmVnX3ZhbHVlID0gcmVhZGIocmVnX2Jsb2Nr ICsgTVZNRTcxMDBfSU5URVJSVVBUX1JFR18yX09GRlNFVCk7CisKKwlzZXFfcHJpbnRmKG0s ICJSVEMgTWFza1x0XHQ6ICVzXG4iLAorCQkgICAoKHJlZ192YWx1ZSAmIE1WTUU3MTAwX1JU Q19NQVNLKSA/CisJCSAgICAiSW50ZXJydXB0IERpc2FibGVkIiA6ICJJbnRlcnJ1cHQgRW5h YmxlZCIpKTsKKwlzZXFfcHJpbnRmKG0sICJUZW1wZXJhdHVyZSBTZW5zb3IgTWFza1x0OiAl c1xuIiwKKwkJICAgKChyZWdfdmFsdWUgJiBNVk1FNzEwMF9URU1QX01BU0spID8KKwkJICAg ICJJbnRlcnJ1cHQgRGlzYWJsZWQiIDogIkludGVycnVwdCBFbmFibGVkIikpOworCXNlcV9w cmludGYobSwgIkFCT1JUIE1hc2tcdFx0OiAlc1xuIiwKKwkJICAgKChyZWdfdmFsdWUgJiBN Vk1FNzEwMF9BQk9SVF9NQVNLKSA/CisJCSAgICAiSW50ZXJydXB0IERpc2FibGVkIiA6ICJJ bnRlcnJ1cHQgRW5hYmxlZCIpKTsKKworCXNlcV9wcmludGYobSwgIlJUQyBTdGF0dXNcdFx0 OiAlc1xuIiwKKwkJICAgKChyZWdfdmFsdWUgJiBNVk1FNzEwMF9SVENfU1RBVFVTKSA/CisJ CSAgICAiUlRDIE91dHB1dCBBc3NlcnRlZCIgOiAiUlRDIE91dHB1dCBOb3QgQXNzZXJ0ZWQi KSk7CisJc2VxX3ByaW50ZihtLCAiVGVtcCBTZW5zb3IgU3RhdHVzXHQ6ICVzXG4iLAorCQkg ICAoKHJlZ192YWx1ZSAmIE1WTUU3MTAwX1RFTVBfU1RBVFVTKSA/CisJCSAgICAiVGVtcGVy YXR1cmUgU2Vuc29yIE91dHB1dCBBc3NlcnRlZCIgOgorCQkgICAgIlRlbXBlcmF0dXJlIFNl bnNvciBPdXRwdXQgTm90IEFzc2VydGVkIikpOworCXNlcV9wcmludGYobSwgIkFib3J0IFN0 YXR1c1x0XHQ6ICVzXG4iLAorCQkgICAoKHJlZ192YWx1ZSAmIE1WTUU3MTAwX0FCT1JUX1NU QVRVUykgPworCQkgICAgIkFib3J0IFN3aXRjaCBBc3NlcnRlZCIgOiAiQWJvcnQgU3dpdGNo IE5vdCBBc3NlcnRlZCIpKTsKKworCS8qIFByZXNlbmNlIERldGVjdCBSZWdpc3RlciAqLwor CXJlZ192YWx1ZSA9IHJlYWRiKHJlZ19ibG9jayArIE1WTUU3MTAwX1BSRVNFTkNFX0RFVEVD VF9SRUdfT0ZGU0VUKTsKKworCXNlcV9wcmludGYobSwgIkVSRFkyXHRcdFx0OiAlc1xuIiwK KwkJICAgKChyZWdfdmFsdWUgJiBNVk1FNzEwMF9FUkRZMikgPworCQkgICAgIkVSRFkyIFNl dCIgOiAiRVJEWTIgTm90IFNldCIpKTsKKwlzZXFfcHJpbnRmKG0sICJFUkRZMVx0XHRcdDog JXNcbiIsCisJCSAgICgocmVnX3ZhbHVlICYgTVZNRTcxMDBfRVJEWTIpID8KKwkJICAgICJF UkRZMSBTZXQiIDogIkVSRFkxIE5vdCBTZXQiKSk7CisJc2VxX3ByaW50ZihtLCAiWE1DU1BB Tlx0XHRcdDogJXNcbiIsCisJCSAgICgocmVnX3ZhbHVlICYgTVZNRTcxMDBfWE1DU1BBTl9Q UkVTRU5UKSA/CisJCSAgICAiWE1DU1BBTiBJbnN0YWxsZWQiIDogIlhNQ1NQQU4gTm90IElu c3RhbGxlZCIpKTsKKwlzZXFfcHJpbnRmKG0sICJQTUMgU2l0ZSAyXHRcdDogJXNcbiIsCisJ CSAgICgocmVnX3ZhbHVlICYgTVZNRTcxMDBfUE1DMl9QUkVTRU5UKSA/CisJCSAgICAiUE1D IE1vZHVsZSBJbnN0YWxsZWQiIDogIlBNQyBNb2R1bGUgTm90IEluc3RhbGxlZCIpKTsKKwlz ZXFfcHJpbnRmKG0sICJQTUMgU2l0ZSAxXHRcdDogJXNcbiIsCisJCSAgICgocmVnX3ZhbHVl ICYgTVZNRTcxMDBfUE1DMV9QUkVTRU5UKSA/CisJCSAgICAiUE1DIE1vZHVsZSBJbnN0YWxs ZWQiIDogIlBNQyBNb2R1bGUgTm90IEluc3RhbGxlZCIpKTsKKworCS8qIE5BTkQgRmxhc2gx IENUUkwgUmVnaXN0ZXIgKi8KKwlyZWdfdmFsdWUgPSByZWFkYihyZWdfYmxvY2sgKyBNVk1F NzEwMF9OQU5EX0ZMQVNIMV9DVFJMX1JFR19PRkZTRVQpOworCXNlcV9wcmludGYobSwgIk5B TkQgMSBDT05UUk9MIFJlZ1x0OiAweCUwMnhcbiIsIHJlZ192YWx1ZSk7CisKKwkvKiBOQU5E IEZsYXNoMSBTRUxFQ1QgUmVnaXN0ZXIgKi8KKwlyZWdfdmFsdWUgPSByZWFkYihyZWdfYmxv Y2sgKyBNVk1FNzEwMF9OQU5EX0ZMQVNIMV9TRUxFQ1RfUkVHX09GRlNFVCk7CisJc2VxX3By aW50ZihtLCAiTkFORCAxIFNFTEVDVCBSZWdcdDogMHglMDJ4XG4iLCByZWdfdmFsdWUpOwor CisJLyogTkFORCBGbGFzaDEgUHJlc2VuY2UgUmVnaXN0ZXIgKi8KKwlyZWdfdmFsdWUgPSBy ZWFkYihyZWdfYmxvY2sgKyBNVk1FNzEwMF9OQU5EX0ZMQVNIMV9QUkVTRU5DRV9SRUdfT0ZG U0VUKTsKKwlzZXFfcHJpbnRmKG0sICJOQU5EIDEgUFJFU0VOQ0UgUmVnXHQ6IDB4JTAyeFxu IiwgcmVnX3ZhbHVlKTsKKworCS8qIE5BTkQgRmxhc2gxIFNUQVRVUyBSZWdpc3RlciAqLwor CXJlZ192YWx1ZSA9IHJlYWRiKHJlZ19ibG9jayArIE1WTUU3MTAwX05BTkRfRkxBU0gxX1NU QVRVU19SRUdfT0ZGU0VUKTsKKwlzZXFfcHJpbnRmKG0sICJOQU5EIDEgU1RBVFVTIFJlZ1x0 OiAweCUwMnhcbiIsIHJlZ192YWx1ZSk7CisKKwkvKiBOQU5EIEZsYXNoMiBDVFJMIFJlZ2lz dGVyICovCisJcmVnX3ZhbHVlID0gcmVhZGIocmVnX2Jsb2NrICsgTVZNRTcxMDBfTkFORF9G TEFTSDJfQ1RSTF9SRUdfT0ZGU0VUKTsKKwlzZXFfcHJpbnRmKG0sICJOQU5EIDIgQ09OVFJP TCBSZWdcdDogMHglMDJ4XG4iLCByZWdfdmFsdWUpOworCisJLyogTkFORCBGbGFzaDIgU0VM RUNUIFJlZ2lzdGVyICovCisJcmVnX3ZhbHVlID0gcmVhZGIocmVnX2Jsb2NrICsgTVZNRTcx MDBfTkFORF9GTEFTSDJfU0VMRUNUX1JFR19PRkZTRVQpOworCXNlcV9wcmludGYobSwgIk5B TkQgMiBTRUxFQ1QgUmVnXHQ6IDB4JTAyeFxuIiwgcmVnX3ZhbHVlKTsKKworCS8qIE5BTkQg Rmxhc2gyIFByZXNlbmNlIFJlZ2lzdGVyICovCisJcmVnX3ZhbHVlID0gcmVhZGIocmVnX2Js b2NrICsgTVZNRTcxMDBfTkFORF9GTEFTSDJfUFJFU0VOQ0VfUkVHX09GRlNFVCk7CisJc2Vx X3ByaW50ZihtLCAiTkFORCAyIFBSRVNFTkNFIFJlZ1x0OiAweCUwMnhcbiIsIHJlZ192YWx1 ZSk7CisKKwkvKiBOQU5EIEZsYXNoMiBTVEFUVVMgUmVnaXN0ZXIgKi8KKwlyZWdfdmFsdWUg PSByZWFkYihyZWdfYmxvY2sgKyBNVk1FNzEwMF9OQU5EX0ZMQVNIMl9TVEFUVVNfUkVHX09G RlNFVCk7CisJc2VxX3ByaW50ZihtLCAiTkFORCAyIFNUQVRVUyBSZWdcdDogMHglMDJ4XG4i LCByZWdfdmFsdWUpOworCisJLyogUExEIFJldmlzaW9uIFJlZ2lzdGVyICovCisJcmVnX3Zh bHVlID0gcmVhZGIocmVnX2Jsb2NrICsgTVZNRTcxMDBfUExEX1JFVklTSU9OX1JFR19PRkZT RVQpOworCisJc2VxX3ByaW50ZihtLCAiUExEIFJldmlzaW9uXHRcdDogMHgleFxuIiwgcmVn X3ZhbHVlKTsKKworCS8qIFBMRCBEYXRlIENvZGUgUmVnaXN0ZXIgKi8KKwlyZWczMl92YWx1 ZSA9IHJlYWRsKHJlZ19ibG9jayArIE1WTUU3MTAwX1BMRF9EQVRFX0NPREVfUkVHX09GRlNF VCk7CisJc2VxX3ByaW50ZihtLCAiUExEIERhdGUgQ29kZVx0XHQ6IDB4JTA4eFxuIiwKKwkJ ICAgKCgocmVnMzJfdmFsdWUgJiAweDAwMDAwMGZmVSkgPDwgMjQpIHwKKwkJICAgICgocmVn MzJfdmFsdWUgJiAweDAwMDBmZjAwVSkgPDwgOCkgfAorCQkgICAgKChyZWczMl92YWx1ZSAm IDB4MDBmZjAwMDBVKSA+PiA4KSB8CisJCSAgICAoKHJlZzMyX3ZhbHVlICYgMHhmZjAwMDAw MFUpID4+IDI0KSkpOworCisJaW91bm1hcChyZWdfYmxvY2spOworCisJcmV0dXJuOworfQor CisvKgorICogQ2FsbGVkIHZlcnkgZWFybHksIGRldmljZS10cmVlIGlzbid0IHVuZmxhdHRl bmVkCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IG12bWU3MTAwX3Byb2JlKHZvaWQpCit7CisJ dW5zaWduZWQgbG9uZyByb290ID0gb2ZfZ2V0X2ZsYXRfZHRfcm9vdCgpOworCisJaWYgKG9m X2ZsYXRfZHRfaXNfY29tcGF0aWJsZShyb290LCAiZW1lcnNvbixtdm1lNzEwMCIpKQorCQly ZXR1cm4gMTsJLyogTG9va3MgZ29vZCAqLworCisJcmV0dXJuIDA7Cit9CisKK2xvbmcgX19p bml0IG1wYzg2eHhfdGltZV9pbml0KHZvaWQpCit7CisJdW5zaWduZWQgaW50IHRlbXA7CisK KwkvKiBTZXQgdGhlIHRpbWUgYmFzZSB0byB6ZXJvICovCisJbXRzcHIoU1BSTl9UQldMLCAw KTsKKwltdHNwcihTUFJOX1RCV1UsIDApOworCisJdGVtcCA9IG1mc3ByKFNQUk5fSElEMCk7 CisJdGVtcCB8PSBISUQwX1RCRU47CisJbXRzcHIoU1BSTl9ISUQwLCB0ZW1wKTsKKwlhc20g dm9sYXRpbGUgKCJpc3luYyIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBfX2luaXRk YXRhIHN0cnVjdCBvZl9kZXZpY2VfaWQgb2ZfYnVzX2lkc1tdID0geworICAgICAgICB7LnR5 cGUgPSAic29jIix9LAorCXsuY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIix9LAorCXt9LAor fTsKKworc3RhdGljIGludCBfX2luaXQgZGVjbGFyZV9vZl9wbGF0Zm9ybV9kZXZpY2VzKHZv aWQpCit7CisJb2ZfcGxhdGZvcm1fYnVzX3Byb2JlKE5VTEwsIG9mX2J1c19pZHMsIE5VTEwp OworCisJcmV0dXJuIDA7Cit9CisKK21hY2hpbmVfZGV2aWNlX2luaXRjYWxsKG12bWU3MTAw LCBkZWNsYXJlX29mX3BsYXRmb3JtX2RldmljZXMpOworCisKK3ZvaWQgX19pbml0IG12bWU3 MTAwX3BjaWJpb3NfZml4dXAodm9pZCkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gTlVM TDsKKwl1MzIgdGVtcDsKKworCWlmICgoZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRP Ul9JRF9ORUMsCisJCQkJUENJX0RFVklDRV9JRF9ORUNfVVNCLCBOVUxMKSkpIHsKKwkJLyog U2V0IFN5c3RlbSBDbG9jayB0byA0OE1IeiBvc2NpbGxhdG9yIGluIEVYVDIgcmVnaXN0ZXIg Ki8KKwkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgMHhlNCwgJnRlbXApOworCQl0ZW1w IHw9IDB4MDAwMDAwMjA7CisJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCAweGU0LCB0 ZW1wKTsKKwkJLyogUG9ydCBQb3dlciBpcyBhbHdheXMgYWN0aXZlOyBtYXggcG9ydHMgPSAy ICovCisJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIDB4ZTAsICZ0ZW1wKTsKKwkJdGVt cCAmPSB+MHgwMDIwMDAwNzsKKwkJdGVtcCB8PSAweDAwMDAwMDAyOworCQlwY2lfd3JpdGVf Y29uZmlnX2R3b3JkKGRldiwgMHhlMCwgdGVtcCk7CisJfQorCisgICAgICAgIGRldiA9IE5V TEw7CisgICAgICAgIGZvcl9lYWNoX3BjaV9kZXYoZGV2KSB7CisJCXBjaV93cml0ZV9jb25m aWdfYnl0ZShkZXYsIFBDSV9DQUNIRV9MSU5FX1NJWkUsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEwxX0NBQ0hFX0JZVEVTID4+IDIpOworICAgICAgICAgICAg ICAgIHBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIFBDSV9MQVRFTkNZX1RJTUVSLCAweDgw KTsKKyAgICAgICAgfQorCisJZGV2ID0gTlVMTDsKKwl3aGlsZSAoKGRldiA9IHBjaV9nZXRf ZGV2aWNlKFBDSV9WRU5ET1JfSURfUExYLCAweDgxMTQsIGRldikpICE9IE5VTEwpIHsKKwkJ dm9pZCBfX2lvbWVtICp2YWRkcjsKKwkJdTE2ICBjdGw7CisKKwkJLyogUExYIFBFWDgxMTQg RXJyYXRhICovCisJCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIFBDSV9DQUNIRV9MSU5F X1NJWkUsIDE2KTsKKworCQkvKiBDaGFuZ2UgTWF4IFJlYWQgUmVxdWVzdCBTaXplIGZyb20g NTEyIHRvIDQwOTYgYnl0ZXMgKi8KKwkJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCAweDcw LCAmY3RsKTsKKwkJY3RsID0gKGN0bCAmIDB4MGZmZikgfCAweDUwMDA7CisJCXBjaV93cml0 ZV9jb25maWdfd29yZChkZXYsIDB4NzAsIGN0bCk7CisKKwkJLyogRW5hYmxlIEFkZHJlc3Mg U3RlcHBpbmc7IEVuYWJsZSBNZW1vcnkgUmVhZCBMaW5lIE11bHRpcGxlICovCisJCXZhZGRy ID0gaW9yZW1hcChwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCAwKSwgCisJCQkJcGNpX3Jlc291 cmNlX2xlbihkZXYsIDApKTsKKwkJd3JpdGVsKHJlYWRsKHZhZGRyICsgMHhmYTApIHwgMHgw MDAwMzAwMCwgdmFkZHIgKyAweGZhMCk7CisJCWlvdW5tYXAodmFkZHIpOworICAgICAgICB9 CisKKwlkZXYgPSBOVUxMOworCXdoaWxlICgoZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZF TkRPUl9JRF9UVU5EUkEsIDB4ODExNCwgZGV2KSkgIT0gTlVMTCkgeworCQl1MzIgIHRtcDsK KworCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCAweGJjLCAmdG1wKTsKKwkJLyogQ2hh bmdlIHByZWZldGNoIGZvciBNZW1vcnkgUmVhZCBmcm9tIDEvMiBEV29yZHMgdG8KKyAgICAg ICAgICAgICAgICAgKiB3aGF0ZXZlciBpcyBzZXQgaW4gdGhlIE1STF8zMy9NUkxfNjYgZmll bGQgKi8KKwkJdG1wIHw9IDB4MDQwMDAwMDA7CisJCXBjaV93cml0ZV9jb25maWdfZHdvcmQo ZGV2LCAweGJjLCB0bXApOworICAgICAgICB9CisKKyNpZmRlZiBDT05GSUdfTVZNRTcxMDBf RU5BQkxFX0wyX0VSUk9SUworCWlmIChyZXF1ZXN0X2lycShsMl9pcnEsIG12bWU3MTAwX2wy Y2FjaGVfZXJyX2hhbmRsZXIsCisJCQlJUlFGX0RJU0FCTEVELCAiTDIgQ2FjaGUgRXJyb3Ii LCAodm9pZCAqKSZsMl9pcnEpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkNhbm5vdCBp bnN0YWxsIEwyIGNhY2hlIGVycm9yIGhhbmRsZXJcbiIpOworCX0gZWxzZSB7CisJCS8qIEVu YWJsZSBhbGwgZXJyb3IgaW50ZXJydXB0cyAqLworCQltdHNwcihTUFJOX0wyRVJSSU5URU4s IDB4MUMpOworCX0KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01WTUU3MTAwX0VOQUJMRV9E RFJfRVJST1JTCisJaWYgKHJlcXVlc3RfaXJxKG1wYzg2eHhfZGRyX2lycSwgbXZtZTcxMDBf ZGRyX2Vycl9oYW5kbGVyLAorCQkJSVJRRl9ESVNBQkxFRCwgIkREUiBFcnJvciIsCisJCQko dm9pZCAqKSZkZHIxX2Vycl9yZWdzKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDYW5u b3QgaW5zdGFsbCBERFIgZXJyb3IgaGFuZGxlclxuIik7CisJfSBlbHNlIHsKKwkJLyogRW5h YmxlIGFsbCBlcnJvciBpbnRlcnJ1cHRzICovCisJCXdyaXRlbChzd2FiMzIoMHgwMDAwMDAw RCksCisJCSAgICAgICBkZHIxX2Vycl9yZWdzICsgRERSX0VSUl9JTlRfRU4gLSBERFJfRVJS X1JFR1NfT0ZGU0VUKTsKKyAgICAgICAgICAgICAgICB3cml0ZWwoc3dhYjMyKDB4MDAwMDAw MEQpLAorICAgICAgICAgICAgICAgICAgICAgICBkZHIyX2Vycl9yZWdzICsgRERSX0VSUl9J TlRfRU4gLSBERFJfRVJSX1JFR1NfT0ZGU0VUKTsKKworCX0KKyNlbmRpZgorCisjaWZkZWYg Q09ORklHX01WTUU3MTAwX0VOQUJMRV9QQ0lfRVJST1JTCisJaWYgKHJlcXVlc3RfaXJxKHBj aTBfaXJxLCBtdm1lNzEwMF9wY2kwX2Vycl9oYW5kbGVyLAorCQkJSVJRRl9TSEFSRUQsICJQ Q0kgMCBFcnJvciIsICh2b2lkICopJnBjaTBfZXJyX3JlZ3MpIDwgMCkgeworCQlwcmludGso S0VSTl9FUlIgIkNhbm5vdCBpbnN0YWxsIFBDSSAwIGVycm9yIGhhbmRsZXJcbiIpOworCX0g ZWxzZSB7CisJCS8qIEVuYWJsZSBkZXRlY3Rpb24gb2YgYWxsIGVycm9ycyAqLworCQl3cml0 ZWwoMCwgcGNpMF9lcnJfcmVncyArIFBFWF9FUlJfRElTUiAtIFBFWF9FUlJfUkVHU19PRkZT RVQpOworCQkvKiBFbmFibGUgYWxsIGVycm9yIGludGVycnVwdHMgKi8KKwkJd3JpdGVsKHN3 YWIzMigweDAwYmZmZjAwKSwKKwkJICAgICAgIHBjaTBfZXJyX3JlZ3MgKyBQRVhfRVJSX0VO IC0gUEVYX0VSUl9SRUdTX09GRlNFVCk7CisJfQorCWlmIChyZXF1ZXN0X2lycShwY2kxX2ly cSwgbXZtZTcxMDBfcGNpMV9lcnJfaGFuZGxlciwKKwkJCUlSUUZfU0hBUkVELCAiUENJIDEg RXJyb3IiLCAodm9pZCAqKSZwY2kxX2Vycl9yZWdzKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5f RVJSICJDYW5ub3QgaW5zdGFsbCBQQ0kgMSBlcnJvciBoYW5kbGVyXG4iKTsKKwl9IGVsc2Ug eworCQkvKiBFbmFibGUgZGV0ZWN0aW9uIG9mIGFsbCBlcnJvcnMgKi8KKwkJd3JpdGVsKDAs IHBjaTFfZXJyX3JlZ3MgKyBQRVhfRVJSX0RJU1IgLSBQRVhfRVJSX1JFR1NfT0ZGU0VUKTsK KwkJLyogRW5hYmxlIGFsbCBlcnJvciBpbnRlcnJ1cHRzICovCisJCXdyaXRlbChzd2FiMzIo MHgwMGJmZmYwMCksCisJCSAgICAgICBwY2kxX2Vycl9yZWdzICsgUEVYX0VSUl9FTiAtIFBF WF9FUlJfUkVHU19PRkZTRVQpOworCX0KKyNlbmRpZgorfQorCisKK3ZvaWQgbXZtZTcxMDBf cGNpYmlvc19maXh1cF9idXMoc3RydWN0IHBjaV9idXMgKmJ1cykKK3sKKwlzdHJ1Y3QgcGNp X2RldiAqYnJpZGdlOworCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSA9IChzdHJ1Y3Qg cGNpX2NvbnRyb2xsZXIgKilidXMtPnN5c2RhdGE7CisJc3RydWN0IHBjaV9idXNfcmVnaW9u IHJlZ2lvbjsKKwl1MzIgbDsKKworCWZzbF9wY2liaW9zX2ZpeHVwX2J1cyhidXMpOworCWJy aWRnZSA9IGJ1cy0+c2VsZjsKKwlpZiAoIWJyaWRnZSkKKwkJcmV0dXJuOworCisJaWYgKGhv c2UtPmdsb2JhbF9udW1iZXIgPT0gMCkgeworCQlpZiAoKGJyaWRnZS0+dmVuZG9yID09IFBD SV9WRU5ET1JfSURfRlJFRVNDQUxFKSAmJgorCSAgICAJCShicmlkZ2UtPmRldmljZSA9PSBQ Q0lfREVWSUNFX0lEX01QQzg2NDFEKSkKKwkJCWJyaWRnZS0+aXJxID0gcGNpMF9pcnE7CisK KwkJaWYgKCFidXMtPnJlc291cmNlWzFdKQorCQkJcmV0dXJuOworCQlwY2liaW9zX3Jlc291 cmNlX3RvX2J1cyhicmlkZ2UsICZyZWdpb24sIGJ1cy0+cmVzb3VyY2VbMV0pOworCQkvKiBQ YXJlbnQgYnJpZGdlIG9mIHRoZSBUdW5kcmEgVFNJMTQ4IFZNRSBCcmlkZ2UgaGFzIAorCQkg KiB0byBiZSBhbGxvY2F0ZWQgYSBsb3QgKDFHIGhlcmUpIG9mIHByZWZldGNoYWJsZSBQQ0kg TUVNIAorCQkgKiB3aGljaCBtYWtlcyBpdCBuZWNlc3NhcnkgdG8gYWRqdXN0IGRlZmF1bHQg YWxsb2NhdGlvbnMgKi8KKwkJaWYgKGJ1cy0+cmVzb3VyY2VbMV0tPmZsYWdzICYgSU9SRVNP VVJDRV9NRU0pIHsKKwkJCXN0cnVjdCBwY2lfYnVzICpwYXJlbnQ7CisJCQl1bnNpZ25lZCBs b25nIG9mZnNldCA9IDA7CisKKwkJCXBhcmVudCA9IGJ1cy0+cGFyZW50OworCQkJb2Zmc2V0 ID0gaG9zZS0+cGNpX21lbV9vZmZzZXQ7CisJCQlpZiAoKGJyaWRnZS0+dmVuZG9yID09IDB4 MTBiNSkKKwkJCSAgICAmJiAoYnJpZGdlLT5kZXZpY2UgPT0gMHg4NTI1KQorCQkJICAgICYm IChicmlkZ2UtPmRldmZuID09IDApICYmIHBhcmVudCAmJiBwYXJlbnQtPnNlbGYKKwkJCSAg ICAmJiAocGFyZW50LT5zZWxmLT52ZW5kb3IgPT0gMHgxOTU3KQorCQkJICAgICYmIChwYXJl bnQtPnNlbGYtPmRldmljZSA9PSAweDcwMTEpCisJCQkgICAgJiYgKHBhcmVudC0+c2VsZi0+ ZGV2Zm4gPT0gMCkpIHsKKwkJCQlyZWdpb24uc3RhcnQgPSAweDgwMjAwMDAwOworCQkJCXJl Z2lvbi5lbmQgPSAweDhmZmZmZmZmOworCQkJCWJ1cy0+cmVzb3VyY2VbMV0tPnN0YXJ0ID0g cmVnaW9uLnN0YXJ0ICsgb2Zmc2V0OworCQkJCWJ1cy0+cmVzb3VyY2VbMV0tPmVuZCA9IHJl Z2lvbi5lbmQgKyBvZmZzZXQ7CisKKwkJCQlsID0gKHJlZ2lvbi5zdGFydCA+PiAxNikgJiAw eGZmZjA7CisJCQkJbCB8PSByZWdpb24uZW5kICYgMHhmZmYwMDAwMDsKKwkJCX0gZWxzZSBp ZiAoKGJyaWRnZS0+dmVuZG9yID09IDB4MTBiNSkgJiYKKwkJCQkgICAoYnJpZGdlLT5kZXZp Y2UgPT0gMHg4NTI1KSAmJgorCQkJCSAgIChicmlkZ2UtPmRldmZuID09IDApICYmIHBhcmVu dCAmJgorCQkJCSAgIHBhcmVudC0+c2VsZiAmJgorCQkJCSAgIChwYXJlbnQtPnNlbGYtPnZl bmRvciA9PSAweDEwYjUpICYmCisJCQkJICAgKHBhcmVudC0+c2VsZi0+ZGV2aWNlID09IDB4 ODUyNSkgJiYKKwkJCQkgICAocGFyZW50LT5zZWxmLT5kZXZmbiA9PSAwKSkgeworCQkJCXJl Z2lvbi5zdGFydCA9IDB4ODAyMDAwMDA7CisJCQkJcmVnaW9uLmVuZCA9IDB4ODAyZmZmZmY7 CisJCQkJYnVzLT5yZXNvdXJjZVsxXS0+c3RhcnQgPSByZWdpb24uc3RhcnQgKyBvZmZzZXQ7 CisJCQkJYnVzLT5yZXNvdXJjZVsxXS0+ZW5kID0gcmVnaW9uLmVuZCArIG9mZnNldDsKKwor CQkJCWwgPSAocmVnaW9uLnN0YXJ0ID4+IDE2KSAmIDB4ZmZmMDsKKwkJCQlsIHw9IHJlZ2lv bi5lbmQgJiAweGZmZjAwMDAwOworCQkJfSBlbHNlIGlmICgoYnJpZGdlLT52ZW5kb3IgPT0g MHgxMGI1KSAmJgorCQkJCSAgIChicmlkZ2UtPmRldmljZSA9PSAweDg1MjUpICYmCisJCQkJ ICAgKGJyaWRnZS0+ZGV2Zm4gPT0gMHg4KSAmJiBwYXJlbnQgJiYKKwkJCQkgICBwYXJlbnQt PnNlbGYgJiYKKwkJCQkgICAocGFyZW50LT5zZWxmLT52ZW5kb3IgPT0gMHgxMGI1KSAmJgor CQkJCSAgIChwYXJlbnQtPnNlbGYtPmRldmljZSA9PSAweDg1MjUpICYmCisJCQkJICAgKHBh cmVudC0+c2VsZi0+ZGV2Zm4gPT0gMCkpIHsKKwkJCQlyZWdpb24uc3RhcnQgPSAweDgwMzAw MDAwOworCQkJCXJlZ2lvbi5lbmQgPSAweDgwNGZmZmZmOworCQkJCWJ1cy0+cmVzb3VyY2Vb MV0tPnN0YXJ0ID0gcmVnaW9uLnN0YXJ0ICsgb2Zmc2V0OworCQkJCWJ1cy0+cmVzb3VyY2Vb MV0tPmVuZCA9IHJlZ2lvbi5lbmQgKyBvZmZzZXQ7CisKKwkJCQlsID0gKHJlZ2lvbi5zdGFy dCA+PiAxNikgJiAweGZmZjA7CisJCQkJbCB8PSByZWdpb24uZW5kICYgMHhmZmYwMDAwMDsK KwkJCX0gZWxzZSBpZiAoKChicmlkZ2UtPnZlbmRvciA9PSAweDEwYjUpIHx8IAorCQkJCSAg ICAoYnJpZGdlLT52ZW5kb3IgPT0gMHgxMGUzKSkgJiYKKwkJCQkgICAoYnJpZGdlLT5kZXZp Y2UgPT0gMHg4MTE0KSAmJgorCQkJCSAgIChicmlkZ2UtPmRldmZuID09IDB4MCkgJiYgcGFy ZW50ICYmCisJCQkJICAgcGFyZW50LT5zZWxmICYmCisJCQkJICAgKHBhcmVudC0+c2VsZi0+ dmVuZG9yID09IDB4MTBiNSkgJiYKKwkJCQkgICAocGFyZW50LT5zZWxmLT5kZXZpY2UgPT0g MHg4NTI1KSAmJgorCQkJCSAgIChwYXJlbnQtPnNlbGYtPmRldmZuID09IDB4OCkpIHsKKwkJ CQlyZWdpb24uc3RhcnQgPSAweDgwNDAwMDAwOworCQkJCXJlZ2lvbi5lbmQgPSAweDgwNGZm ZmZmOworCQkJCWJ1cy0+cmVzb3VyY2VbMV0tPnN0YXJ0ID0gcmVnaW9uLnN0YXJ0ICsgb2Zm c2V0OworCQkJCWJ1cy0+cmVzb3VyY2VbMV0tPmVuZCA9IHJlZ2lvbi5lbmQgKyBvZmZzZXQ7 CisKKwkJCQlsID0gKHJlZ2lvbi5zdGFydCA+PiAxNikgJiAweGZmZjA7CisJCQkJbCB8PSBy ZWdpb24uZW5kICYgMHhmZmYwMDAwMDsKKwkJCX0gZWxzZSBpZiAoKGJyaWRnZS0+dmVuZG9y ID09IDB4MTBiNSkgJiYKKwkJCQkgICAoYnJpZGdlLT5kZXZpY2UgPT0gMHg4NTI1KSAmJgor CQkJCSAgIChicmlkZ2UtPmRldmZuID09IDB4MTApICYmIHBhcmVudCAmJgorCQkJCSAgIHBh cmVudC0+c2VsZiAmJgorCQkJCSAgIChwYXJlbnQtPnNlbGYtPnZlbmRvciA9PSAweDEwYjUp ICYmCisJCQkJICAgKHBhcmVudC0+c2VsZi0+ZGV2aWNlID09IDB4ODUyNSkgJiYKKwkJCQkg ICAocGFyZW50LT5zZWxmLT5kZXZmbiA9PSAweDApKSB7CisJCQkJcmVnaW9uLnN0YXJ0ID0g MHg4MDUwMDAwMDsKKwkJCQlyZWdpb24uZW5kID0gMHg4MDZmZmZmZjsKKwkJCQlidXMtPnJl c291cmNlWzFdLT5zdGFydCA9IHJlZ2lvbi5zdGFydCArIG9mZnNldDsKKwkJCQlidXMtPnJl c291cmNlWzFdLT5lbmQgPSByZWdpb24uZW5kICsgb2Zmc2V0OworCisJCQkJbCA9IChyZWdp b24uc3RhcnQgPj4gMTYpICYgMHhmZmYwOworCQkJCWwgfD0gcmVnaW9uLmVuZCAmIDB4ZmZm MDAwMDA7CisJCQl9IGVsc2UgaWYgKCgoYnJpZGdlLT52ZW5kb3IgPT0gMHgxMGI1KSB8fCAK KwkJCQkgICAgKGJyaWRnZS0+dmVuZG9yID09IDB4MTBlMykpICYmCisJCQkJICAgKGJyaWRn ZS0+ZGV2aWNlID09IDB4ODExNCkgJiYKKwkJCQkgICAoYnJpZGdlLT5kZXZmbiA9PSAweDAp ICYmIHBhcmVudCAmJgorCQkJCSAgIHBhcmVudC0+c2VsZiAmJgorCQkJCSAgIChwYXJlbnQt PnNlbGYtPnZlbmRvciA9PSAweDEwYjUpICYmCisJCQkJICAgKHBhcmVudC0+c2VsZi0+ZGV2 aWNlID09IDB4ODUyNSkgJiYKKwkJCQkgICAocGFyZW50LT5zZWxmLT5kZXZmbiA9PSAweDEw KSkgeworCisJCQkJcmVnaW9uLnN0YXJ0ID0gMHg4MDYwMDAwMDsKKwkJCQlyZWdpb24uZW5k ID0gMHg4MDZmZmZmZjsKKwkJCQlidXMtPnJlc291cmNlWzFdLT5zdGFydCA9IHJlZ2lvbi5z dGFydCArIG9mZnNldDsKKwkJCQlidXMtPnJlc291cmNlWzFdLT5lbmQgPSByZWdpb24uZW5k ICsgb2Zmc2V0OworCisJCQkJbCA9IChyZWdpb24uc3RhcnQgPj4gMTYpICYgMHhmZmYwOwor CQkJCWwgfD0gcmVnaW9uLmVuZCAmIDB4ZmZmMDAwMDA7CisJCQl9IGVsc2UgaWYgKChicmlk Z2UtPnZlbmRvciA9PSAweDEwYjUpICYmCisJCQkJICAgKGJyaWRnZS0+ZGV2aWNlID09IDB4 ODUyNSkgJiYKKwkJCQkgICAoYnJpZGdlLT5kZXZmbiA9PSAweDQ4KSAmJiBwYXJlbnQgJiYK KwkJCQkgICBwYXJlbnQtPnNlbGYgJiYKKwkJCQkgICAocGFyZW50LT5zZWxmLT52ZW5kb3Ig PT0gMHgxMGI1KSAmJgorCQkJCSAgIChwYXJlbnQtPnNlbGYtPmRldmljZSA9PSAweDg1MjUp ICYmCisJCQkJICAgKHBhcmVudC0+c2VsZi0+ZGV2Zm4gPT0gMHgwKSkgeworCQkJCXJlZ2lv bi5zdGFydCA9IDB4ODA3MDAwMDA7CisJCQkJcmVnaW9uLmVuZCA9IDB4ODA4ZmZmZmY7CisJ CQkJYnVzLT5yZXNvdXJjZVsxXS0+c3RhcnQgPSByZWdpb24uc3RhcnQgKyBvZmZzZXQ7CisJ CQkJYnVzLT5yZXNvdXJjZVsxXS0+ZW5kID0gcmVnaW9uLmVuZCArIG9mZnNldDsKKworCQkJ CWwgPSAocmVnaW9uLnN0YXJ0ID4+IDE2KSAmIDB4ZmZmMDsKKwkJCQlsIHw9IHJlZ2lvbi5l bmQgJiAweGZmZjAwMDAwOworCQkJfSBlbHNlIGlmICgoKGJyaWRnZS0+dmVuZG9yID09IDB4 MTBiNSkgfHwgCisJCQkJICAgIChicmlkZ2UtPnZlbmRvciA9PSAweDEwZTMpKSAmJgorCQkJ CSAgIChicmlkZ2UtPmRldmljZSA9PSAweDgxMTQpICYmCisJCQkJICAgKGJyaWRnZS0+ZGV2 Zm4gPT0gMHgwKSAmJiBwYXJlbnQgJiYKKwkJCQkgICBwYXJlbnQtPnNlbGYgJiYKKwkJCQkg ICAocGFyZW50LT5zZWxmLT52ZW5kb3IgPT0gMHgxMGI1KSAmJgorCQkJCSAgIChwYXJlbnQt PnNlbGYtPmRldmljZSA9PSAweDg1MjUpICYmCisJCQkJICAgKHBhcmVudC0+c2VsZi0+ZGV2 Zm4gPT0gMHg0OCkpIHsKKworCQkJCXJlZ2lvbi5zdGFydCA9IDB4ODA4MDAwMDA7CisJCQkJ cmVnaW9uLmVuZCA9IDB4ODA4ZmZmZmY7CisJCQkJYnVzLT5yZXNvdXJjZVsxXS0+c3RhcnQg PSByZWdpb24uc3RhcnQgKyBvZmZzZXQ7CisJCQkJYnVzLT5yZXNvdXJjZVsxXS0+ZW5kID0g cmVnaW9uLmVuZCArIG9mZnNldDsKKworCQkJCWwgPSAocmVnaW9uLnN0YXJ0ID4+IDE2KSAm IDB4ZmZmMDsKKwkJCQlsIHw9IHJlZ2lvbi5lbmQgJiAweGZmZjAwMDAwOworCQkJfSBlbHNl IGlmICgoYnJpZGdlLT52ZW5kb3IgPT0gMHgxMGI1KSAmJgorCQkJCSAgIChicmlkZ2UtPmRl dmljZSA9PSAweDg1MjUpICYmCisJCQkJICAgKGJyaWRnZS0+ZGV2Zm4gPT0gMHg1MCkgJiYg cGFyZW50ICYmCisJCQkJICAgcGFyZW50LT5zZWxmICYmCisJCQkJICAgKHBhcmVudC0+c2Vs Zi0+dmVuZG9yID09IDB4MTBiNSkgJiYKKwkJCQkgICAocGFyZW50LT5zZWxmLT5kZXZpY2Ug PT0gMHg4NTI1KSAmJgorCQkJCSAgIChwYXJlbnQtPnNlbGYtPmRldmZuID09IDB4MCkpIHsK KwkJCQlyZWdpb24uc3RhcnQgPSAweDgwOTAwMDAwOworCQkJCXJlZ2lvbi5lbmQgPSAweDgw YWZmZmZmOworCQkJCWJ1cy0+cmVzb3VyY2VbMV0tPnN0YXJ0ID0gcmVnaW9uLnN0YXJ0ICsg b2Zmc2V0OworCQkJCWJ1cy0+cmVzb3VyY2VbMV0tPmVuZCA9IHJlZ2lvbi5lbmQgKyBvZmZz ZXQ7CisKKwkJCQlsID0gKHJlZ2lvbi5zdGFydCA+PiAxNikgJiAweGZmZjA7CisJCQkJbCB8 PSByZWdpb24uZW5kICYgMHhmZmYwMDAwMDsKKwkJCX0gZWxzZSBpZiAoKGJyaWRnZS0+dmVu ZG9yID09IDB4MTBiNSkgJiYKKwkJCQkgICAoKGJyaWRnZS0+ZGV2aWNlID09IDB4ODExMSkg fHwKKwkJCQkgICAgKGJyaWRnZS0+ZGV2aWNlID09IDB4ODExMikpICYmCisJCQkJICAgKGJy aWRnZS0+ZGV2Zm4gPT0gMHgwKSAmJiBwYXJlbnQgJiYKKwkJCQkgICBwYXJlbnQtPnNlbGYg JiYKKwkJCQkgICAocGFyZW50LT5zZWxmLT52ZW5kb3IgPT0gMHgxMGI1KSAmJgorCQkJCSAg IChwYXJlbnQtPnNlbGYtPmRldmljZSA9PSAweDg1MjUpICYmCisJCQkJICAgKHBhcmVudC0+ c2VsZi0+ZGV2Zm4gPT0gMHg1MCkpIHsKKwkJCQlyZWdpb24uc3RhcnQgPSAweDgwYTAwMDAw OworCQkJCXJlZ2lvbi5lbmQgPSAweDgwYWZmZmZmOworCQkJCWJ1cy0+cmVzb3VyY2VbMV0t PnN0YXJ0ID0gcmVnaW9uLnN0YXJ0ICsgb2Zmc2V0OworCQkJCWJ1cy0+cmVzb3VyY2VbMV0t PmVuZCA9IHJlZ2lvbi5lbmQgKyBvZmZzZXQ7CisKKwkJCQlsID0gKHJlZ2lvbi5zdGFydCA+ PiAxNikgJiAweGZmZjA7CisJCQkJbCB8PSByZWdpb24uZW5kICYgMHhmZmYwMDAwMDsKKwkJ CX0gZWxzZSB7CisJCQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGJyaWRnZSwgUENJX01FTU9S WV9CQVNFLAorCQkJCQkJICAgICAgJmwpOworCQkJfQorCQl9IGVsc2UgeworCQkJbCA9IDB4 MDAwMGZmZjA7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiTUVNIHdpbmRvdzogZGlzYWJsZWQu XG4iKTsKKwkJfQorCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGJyaWRnZSwgUENJX01FTU9S WV9CQVNFLCBsKTsKKworCQlpZiAoIWJ1cy0+cmVzb3VyY2VbMl0pCisJCQlyZXR1cm47CisK KwkJcGNpYmlvc19yZXNvdXJjZV90b19idXMoYnJpZGdlLCAmcmVnaW9uLCBidXMtPnJlc291 cmNlWzJdKTsKKwkJeworCQkJc3RydWN0IHBjaV9idXMgKnBhcmVudDsKKwkJCXVuc2lnbmVk IGxvbmcgb2Zmc2V0ID0gMDsKKworCQkJcGFyZW50ID0gYnVzLT5wYXJlbnQ7CisJCQlvZmZz ZXQgPSBob3NlLT5wY2lfbWVtX29mZnNldDsKKworCQkJLyogQ2xlYXIgb3V0IHRoZSB1cHBl ciAzMiBiaXRzIG9mIFBSRUYgbGltaXQuCisJCQkgICBJZiBQQ0lfUFJFRl9CQVNFX1VQUEVS MzIgd2FzIG5vbi16ZXJvLCB0aGlzIAorCQkJICAgdGVtcG9yYXJpbHkgZGlzYWJsZXMgUFJF RiByYW5nZSwgd2hpY2ggaXMgb2suICovCisJCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGJy aWRnZSwgUENJX1BSRUZfTElNSVRfVVBQRVIzMiwKKwkJCQkJICAgICAgIDApOworCisJCQlp ZiAoKGJyaWRnZS0+dmVuZG9yID09IDB4MTBiNSkgJiYKKwkJCSAgICAoYnJpZGdlLT5kZXZp Y2UgPT0gMHg4NTI1KSAmJgorCQkJICAgIChicmlkZ2UtPmRldmZuID09IDApICYmIHBhcmVu dCAmJiBwYXJlbnQtPnNlbGYgJiYKKwkJCSAgICAocGFyZW50LT5zZWxmLT52ZW5kb3IgPT0g MHgxOTU3KSAmJgorCQkJICAgIChwYXJlbnQtPnNlbGYtPmRldmljZSA9PSAweDcwMTEpICYm CisJCQkgICAgKHBhcmVudC0+c2VsZi0+ZGV2Zm4gPT0gMCkpIHsKKwkJCQlyZWdpb24uc3Rh cnQgPSAweDkwMDAwMDAwOworCQkJCXJlZ2lvbi5lbmQgPSAweGNmZmZmZmZmOworCQkJCWJ1 cy0+cmVzb3VyY2VbMl0tPnN0YXJ0ID0gcmVnaW9uLnN0YXJ0ICsgb2Zmc2V0OworCQkJCWJ1 cy0+cmVzb3VyY2VbMl0tPmVuZCA9IHJlZ2lvbi5lbmQgKyBvZmZzZXQ7CisJCQkJYnVzLT5y ZXNvdXJjZVsyXS0+ZmxhZ3MgPQorCQkJCSAgICBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VS Q0VfUFJFRkVUQ0g7CisKKwkJCQlsID0gKHJlZ2lvbi5zdGFydCA+PiAxNikgJiAweGZmZjA7 CisJCQkJbCB8PSByZWdpb24uZW5kICYgMHhmZmYwMDAwMDsKKwkJCX0gZWxzZSBpZiAoKGJy aWRnZS0+dmVuZG9yID09IDB4MTBiNSkgJiYKKwkJCQkgICAoYnJpZGdlLT5kZXZpY2UgPT0g MHg4NTI1KSAmJgorCQkJCSAgIChicmlkZ2UtPmRldmZuID09IDB4OCkgJiYgcGFyZW50ICYm CisJCQkJICAgcGFyZW50LT5zZWxmICYmCisJCQkJICAgKHBhcmVudC0+c2VsZi0+dmVuZG9y ID09IDB4MTBiNSkgJiYKKwkJCQkgICAocGFyZW50LT5zZWxmLT5kZXZpY2UgPT0gMHg4NTI1 KSAmJgorCQkJCSAgIChwYXJlbnQtPnNlbGYtPmRldmZuID09IDApKSB7CisJCQkJcmVnaW9u LnN0YXJ0ID0gMHg5MDAwMDAwMDsKKwkJCQlyZWdpb24uZW5kID0gMHhjZmZmZmZmZjsKKwkJ CQlidXMtPnJlc291cmNlWzJdLT5zdGFydCA9IHJlZ2lvbi5zdGFydCArIG9mZnNldDsKKwkJ CQlidXMtPnJlc291cmNlWzJdLT5lbmQgPSByZWdpb24uZW5kICsgb2Zmc2V0OworCQkJCWJ1 cy0+cmVzb3VyY2VbMl0tPmZsYWdzID0KKwkJCQkgICAgSU9SRVNPVVJDRV9NRU0gfCBJT1JF U09VUkNFX1BSRUZFVENIOworCisJCQkJbCA9IChyZWdpb24uc3RhcnQgPj4gMTYpICYgMHhm ZmYwOworCQkJCWwgfD0gcmVnaW9uLmVuZCAmIDB4ZmZmMDAwMDA7CisJCQl9IGVsc2UgaWYg KCgoYnJpZGdlLT52ZW5kb3IgPT0gMHgxMGI1KSB8fAorCQkJCSAgICAoYnJpZGdlLT52ZW5k b3IgPT0gMHgxMGUzKSkgJiYKKwkJCQkgICAoYnJpZGdlLT5kZXZpY2UgPT0gMHg4MTE0KSAm JgorCQkJCSAgIChicmlkZ2UtPmRldmZuID09IDB4MCkgJiYgcGFyZW50ICYmCisJCQkJICAg cGFyZW50LT5zZWxmICYmCisJCQkJICAgKHBhcmVudC0+c2VsZi0+dmVuZG9yID09IDB4MTBi NSkgJiYKKwkJCQkgICAocGFyZW50LT5zZWxmLT5kZXZpY2UgPT0gMHg4NTI1KSAmJgorCQkJ CSAgIChwYXJlbnQtPnNlbGYtPmRldmZuID09IDB4OCkpIHsKKworCQkJCXJlZ2lvbi5zdGFy dCA9IDB4OTAwMDAwMDA7CisJCQkJcmVnaW9uLmVuZCA9IDB4Y2ZmZmZmZmY7CisJCQkJYnVz LT5yZXNvdXJjZVsyXS0+c3RhcnQgPSByZWdpb24uc3RhcnQgKyBvZmZzZXQ7CisJCQkJYnVz LT5yZXNvdXJjZVsyXS0+ZW5kID0gcmVnaW9uLmVuZCArIG9mZnNldDsKKwkJCQlidXMtPnJl c291cmNlWzJdLT5mbGFncyA9CisJCQkJICAgIElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJD RV9QUkVGRVRDSDsKKworCQkJCWwgPSAocmVnaW9uLnN0YXJ0ID4+IDE2KSAmIDB4ZmZmMDsK KwkJCQlsIHw9IHJlZ2lvbi5lbmQgJiAweGZmZjAwMDAwOworCQkJfSBlbHNlCisJCQkJcGNp X3JlYWRfY29uZmlnX2R3b3JkKGJyaWRnZSwKKwkJCQkJCSAgICAgIFBDSV9QUkVGX01FTU9S WV9CQVNFLCAmbCk7CisJCX0KKwkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChicmlkZ2UsIFBD SV9QUkVGX01FTU9SWV9CQVNFLCBsKTsKKworCQkvKiBDbGVhciBvdXQgdGhlIHVwcGVyIDMy IGJpdHMgb2YgUFJFRiBiYXNlLiAqLworCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGJyaWRn ZSwgUENJX1BSRUZfQkFTRV9VUFBFUjMyLCAwKTsKKworCQlwY2lfd3JpdGVfY29uZmlnX3dv cmQoYnJpZGdlLCBQQ0lfQlJJREdFX0NPTlRST0wsCisJCQkJICAgICAgYnVzLT5icmlkZ2Vf Y3RsKTsKKwl9CisKKwlpZiAoaG9zZS0+Z2xvYmFsX251bWJlciA9PSAxKSB7CisJCWlmICgo YnJpZGdlLT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9GUkVFU0NBTEUpICYmCisJICAgIAkJ KGJyaWRnZS0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfTVBDODY0MUQpKQorCQkJYnJpZGdl LT5pcnEgPSBwY2kxX2lycTsKKwl9Cit9CisKK2RlZmluZV9tYWNoaW5lKG12bWU3MTAwKQor eworCS5uYW1lID0gIk1WTUU3MTAwIiwKKwkucHJvYmUgPSBtdm1lNzEwMF9wcm9iZSwKKwku c2V0dXBfYXJjaCA9IG12bWU3MTAwX3NldHVwX2FyY2gsCisJLmluaXRfSVJRID0gbXZtZTcx MDBfaW5pdF9pcnEsCisJLnNob3dfY3B1aW5mbyA9IG12bWU3MTAwX3Nob3dfY3B1aW5mbywK KwkucGNpYmlvc19maXh1cCA9IG12bWU3MTAwX3BjaWJpb3NfZml4dXAsCisJLnBjaWJpb3Nf Zml4dXBfYnVzID0gbXZtZTcxMDBfcGNpYmlvc19maXh1cF9idXMsCisJLmdldF9pcnEgPSBt cGljX2dldF9pcnEsCisJLnJlc3RhcnQgPSBtdm1lNzEwMF9yZXN0YXJ0LAorCS50aW1lX2lu aXQgPSBtcGM4Nnh4X3RpbWVfaW5pdCwKKwkuY2FsaWJyYXRlX2RlY3IgPSBnZW5lcmljX2Nh bGlicmF0ZV9kZWNyLAorCS5wcm9ncmVzcyA9IHVkYmdfcHJvZ3Jlc3MsCit9OworCmRpZmYg LXUgLS1uZXctZmlsZSAtLXJlY3Vyc2l2ZSBsaW51eC0yLjYuMjkuNi5vcmlnL2FyY2gvcG93 ZXJwYy9wbGF0Zm9ybXMvODZ4eC9tdm1lNzEwMC5oIGxpbnV4LTIuNi4yOS42Lm1vZC9hcmNo L3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvbXZtZTcxMDAuaAotLS0gbGludXgtMi42LjI5LjYu b3JpZy9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvbXZtZTcxMDAuaAkxOTY5LTEyLTMx IDE3OjAwOjAwLjAwMDAwMDAwMCAtMDcwMAorKysgbGludXgtMi42LjI5LjYubW9kL2FyY2gv cG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9tdm1lNzEwMC5oCTIwMDktMDctMjEgMTE6Mjg6MTcu MDAwMDAwMDAwIC0wNzAwCkBAIC0wLDAgKzEsMTU4IEBACisvKgorICogTVZNRTcxMDAgYm9h cmQgZGVmaW5pdGlvbnMKKyAqCisgKiBBdXRob3I6IEFqaXQgUHJlbSA8YWppdC5wcmVtQGVt ZXJzb24uY29tPgorICoKKyAqIENvcHlyaWdodCAyMDA4IEVtZXJzb24gTmV0d29yayBQb3dl ciBFbWJlZGRlZCBDb21wdXRpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVu ZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMg cHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVy IHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFu eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaWZuZGVmIF9fTVZNRTcxMDBfSF9fCisj ZGVmaW5lIF9fTVZNRTcxMDBfSF9fCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNk ZWZpbmUgTVBDODZYWF9SU1RDUl9PRkZTRVQJKDB4ZTAwYjApCS8qIFJlc2V0IENvbnRyb2wg UmVnaXN0ZXIgKi8KKworCisvKiBGbGFzaCAqLworI2RlZmluZSBNVk1FNzEwMF9GTEFTSF9C QVNFCTB4ZjgwMDAwMDAKKyNkZWZpbmUgTVZNRTcxMDBfRkxBU0hfU0laRQkweDA4MDAwMDAw CisKKworLyogU3lzdGVtIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlcnMgKi8KKyNkZWZp bmUgTVZNRTcxMDBfU1lTVEVNX1NUQVRVU19SRUcJCTB4RjIwMDAwMDAKKyNkZWZpbmUgTVZN RTcxMDBfU1lTVEVNX0NPTlRST0xfUkVHCQkweEYyMDAwMDAxCisjZGVmaW5lIE1WTUU3MTAw X1NUQVRVU19JTkRJQ0FUT1JfUkVHCQkweEYyMDAwMDAyCisjZGVmaW5lIE1WTUU3MTAwX05P Ul9GTEFTSF9DVFJMX1NUQVRfUkVHCTB4RjIwMDAwMDMKKyNkZWZpbmUgTVZNRTcxMDBfSU5U RVJSVVBUX1JFR18xCQkweEYyMDAwMDA0CisjZGVmaW5lIE1WTUU3MTAwX0lOVEVSUlVQVF9S RUdfMgkJMHhGMjAwMDAwNQorI2RlZmluZSBNVk1FNzEwMF9QUkVTRU5DRV9ERVRFQ1RfUkVH CQkweEYyMDAwMDA2CisjZGVmaW5lIE1WTUU3MTAwX05BTkRfRkxBU0gxX0NPTlRST0xfUkVH CTB4RjIwMDAwMTAKKyNkZWZpbmUgTVZNRTcxMDBfTkFORF9GTEFTSDFfU0VMRUNUX1JFRwkJ MHhGMjAwMDAxMQorI2RlZmluZSBNVk1FNzEwMF9OQU5EX0ZMQVNIMV9QUkVTRU5DRV9SRUcJ MHhGMjAwMDAxNAorI2RlZmluZSBNVk1FNzEwMF9OQU5EX0ZMQVNIMV9TVEFUVVNfUkVHCQkw eEYyMDAwMDE1CisjZGVmaW5lIE1WTUU3MTAwX05BTkRfRkxBU0gxX0RBVEFfUkVHCQkweEYy MDMwMDAwCisjZGVmaW5lIE1WTUU3MTAwX05BTkRfRkxBU0gyX0NPTlRST0xfUkVHCTB4RjIw MDAwMTgKKyNkZWZpbmUgTVZNRTcxMDBfTkFORF9GTEFTSDJfU0VMRUNUX1JFRwkJMHhGMjAw MDAxOQorI2RlZmluZSBNVk1FNzEwMF9OQU5EX0ZMQVNIMl9QUkVTRU5DRV9SRUcJMHhGMjAw MDAxQworI2RlZmluZSBNVk1FNzEwMF9OQU5EX0ZMQVNIMl9TVEFUVVNfUkVHCQkweEYyMDAw MDFECisjZGVmaW5lIE1WTUU3MTAwX05BTkRfRkxBU0gyX0RBVEFfUkVHCQkweEYyMDMxMDAw CisjZGVmaW5lIE1WTUU3MTAwX1dBVENIRE9HX1RJTUVSX0xPQURfUkVHCTB4RjIwMDAwMjAK KyNkZWZpbmUgTVZNRTcxMDBfV0FUQ0hET0dfQ09OVFJPTF9SRUcJCTB4RjIwMDAwMjQKKyNk ZWZpbmUgTVZNRTcxMDBfV0FUQ0hET0dfVElNRVJfUkVTT0xVVElPTl9SRUcJMHhGMjAwMDAy NQorI2RlZmluZSBNVk1FNzEwMF9XQVRDSERPR19USU1FUl9DT1VOVF9SRUcJMHhGMjAwMDAy NgorI2RlZmluZSBNVk1FNzEwMF9QTERfUkVWSVNJT05fUkVHCQkweEYyMDAwMDMwCisjZGVm aW5lIE1WTUU3MTAwX1BMRF9EQVRFX0NPREVfUkVHCQkweEYyMDAwMDM0CisjZGVmaW5lIE1W TUU3MTAwX1RFU1RfMV9SRUcJCQkweEYyMDAwMDM4CisjZGVmaW5lIE1WTUU3MTAwX1RFU1Rf Ml9SRUcJCQkweEYyMDAwMDNDCisKKy8qIFJlZ2lzdGVyIG9mZnNldHMgKi8KKyNkZWZpbmUg TVZNRTcxMDBfU1lTVEVNX1NUQVRVU19SRUdfT0ZGU0VUCQkweDAwMDAwMDAwCisjZGVmaW5l IE1WTUU3MTAwX1NZU1RFTV9DT05UUk9MX1JFR19PRkZTRVQJCTB4MDAwMDAwMDEKKyNkZWZp bmUgTVZNRTcxMDBfU1RBVFVTX0lORElDQVRPUl9SRUdfT0ZGU0VUCQkweDAwMDAwMDAyCisj ZGVmaW5lIE1WTUU3MTAwX05PUl9GTEFTSF9DVFJMX1NUQVRfUkVHX09GRlNFVAkJMHgwMDAw MDAwMworI2RlZmluZSBNVk1FNzEwMF9JTlRFUlJVUFRfUkVHXzFfT0ZGU0VUCQkJMHgwMDAw MDAwNAorI2RlZmluZSBNVk1FNzEwMF9JTlRFUlJVUFRfUkVHXzJfT0ZGU0VUCQkJMHgwMDAw MDAwNQorI2RlZmluZSBNVk1FNzEwMF9QUkVTRU5DRV9ERVRFQ1RfUkVHX09GRlNFVAkJMHgw MDAwMDAwNgorI2RlZmluZSBNVk1FNzEwMF9OQU5EX0ZMQVNIMV9DVFJMX1JFR19PRkZTRVQJ CTB4MDAwMDAwMTAKKyNkZWZpbmUgTVZNRTcxMDBfTkFORF9GTEFTSDFfU0VMRUNUX1JFR19P RkZTRVQJCTB4MDAwMDAwMTEKKyNkZWZpbmUgTVZNRTcxMDBfTkFORF9GTEFTSDFfUFJFU0VO Q0VfUkVHX09GRlNFVAkweDAwMDAwMDE0CisjZGVmaW5lIE1WTUU3MTAwX05BTkRfRkxBU0gx X1NUQVRVU19SRUdfT0ZGU0VUCQkweDAwMDAwMDE1CisjZGVmaW5lIE1WTUU3MTAwX05BTkRf RkxBU0gyX0NUUkxfUkVHX09GRlNFVAkJMHgwMDAwMDAxOAorI2RlZmluZSBNVk1FNzEwMF9O QU5EX0ZMQVNIMl9TRUxFQ1RfUkVHX09GRlNFVAkJMHgwMDAwMDAxOQorI2RlZmluZSBNVk1F NzEwMF9OQU5EX0ZMQVNIMl9QUkVTRU5DRV9SRUdfT0ZGU0VUCTB4MDAwMDAwMUMKKyNkZWZp bmUgTVZNRTcxMDBfTkFORF9GTEFTSDJfU1RBVFVTX1JFR19PRkZTRVQJCTB4MDAwMDAwMUQK KyNkZWZpbmUgTVZNRTcxMDBfV0FUQ0hET0dfVElNRVJfTE9BRF9SRUdfT0ZGU0VUCQkweDAw MDAwMDIwCisjZGVmaW5lIE1WTUU3MTAwX1dBVENIRE9HX0NPTlRST0xfUkVHX09GRlNFVAkJ MHgwMDAwMDAyNAorI2RlZmluZSBNVk1FNzEwMF9XQVRDSERPR19USU1FUl9SRVNPTFVUSU9O X1JFR19PRkZTRVQJMHgwMDAwMDAyNQorI2RlZmluZSBNVk1FNzEwMF9XQVRDSERPR19USU1F Ul9DT1VOVF9SRUdfT0ZGU0VUCTB4MDAwMDAwMjYKKyNkZWZpbmUgTVZNRTcxMDBfUExEX1JF VklTSU9OX1JFR19PRkZTRVQJCTB4MDAwMDAwMzAKKyNkZWZpbmUgTVZNRTcxMDBfUExEX0RB VEVfQ09ERV9SRUdfT0ZGU0VUCQkweDAwMDAwMDM0CisjZGVmaW5lIE1WTUU3MTAwX1RFU1Rf MV9SRUdfT0ZGU0VUCQkJMHgwMDAwMDAzOAorI2RlZmluZSBNVk1FNzEwMF9URVNUXzJfUkVH X09GRlNFVAkJCTB4MDAwMDAwM0MKKworLyogU3lzdGVtIFN0YXR1cyBSZWdpc3RlciAqLwor I2RlZmluZSBNVk1FNzEwMF9TVEFURV9TVzgJCTB4ODAKKyNkZWZpbmUgTVZNRTcxMDBfU1RB VEVfU1c3CQkweDQwCisjZGVmaW5lIE1WTUU3MTAwX1NUQVRFX1NXNgkJMHgyMAorI2RlZmlu ZSBNVk1FNzEwMF9TVEFURV9TVzUJCTB4MTAKKyNkZWZpbmUgTVZNRTcxMDBfU0FGRV9TVEFS VAkJMHgwOAorI2RlZmluZSBNVk1FNzEwMF9QRVg4NTI1X0VSUk9SCQkweDA0CisjZGVmaW5l IE1WTUU3MTAwX0JPQVJEX1RZUEVfTUFTSwkweDAzCisjZGVmaW5lIE1WTUU3MTAwX0JPQVJE X1RZUEVfUFJQTUMJMHgwMQorI2RlZmluZSBNVk1FNzEwMF9CT0FSRF9UWVBFX1ZNRQkJMHgw MAorCisvKiBTeXN0ZW0gQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBNVk1FNzEwMF9C T0FSRF9SRVNFVAkJMHhBMAorI2RlZmluZSBNVk1FNzEwMF9FRVBST01fV1AJCTB4MDIKKwor LyogU3RhdHVzIEluZGljYXRvciBSZWdpc3RlciAqLworI2RlZmluZSBNVk1FNzEwMF9VU1Ix X1JFRF9MRUQJCTB4MDEKKyNkZWZpbmUgTVZNRTcxMDBfVVNSMV9ZRUxMT1dfTEVECTB4MDIK KyNkZWZpbmUgTVZNRTcxMDBfVVNSMl9MRUQJCTB4MDQKKyNkZWZpbmUgTVZNRTcxMDBfVVNS M19MRUQJCTB4MDgKKworLyogTk9SIEZsYXNoIENvbnRyb2wvU3RhdHVzIFJlZ2lzdGVyICov CisjZGVmaW5lIE1WTUU3MTAwX05PUl9GTEFTSF9NQVBfU0VMRUNUCTB4MTAKKyNkZWZpbmUg TVZNRTcxMDBfTk9SX0ZMQVNIX1dQX1NXCTB4MDgKKyNkZWZpbmUgTVZNRTcxMDBfTk9SX0ZM QVNIX1dQX0hXCTB4MDQKKyNkZWZpbmUgTVZNRTcxMDBfTk9SX0ZMQVNIX0JMS19TRUwJMHgw MgorI2RlZmluZSBNVk1FNzEwMF9OT1JfRkxBU0hfUkRZCQkweDAxCisKKy8qIEludGVycnVw dCBSZWdpc3RlciAxICovCisjZGVmaW5lIE1WTUU3MTAwX1RTRUM0X1BIWV9JTlRFUlJVUFQJ MHgwOAorI2RlZmluZSBNVk1FNzEwMF9UU0VDM19QSFlfSU5URVJSVVBUCTB4MDQKKyNkZWZp bmUgTVZNRTcxMDBfVFNFQzJfUEhZX0lOVEVSUlVQVAkweDAyCisjZGVmaW5lIE1WTUU3MTAw X1RTRUMxX1BIWV9JTlRFUlJVUFQJMHgwMQorCisvKiBJbnRlcnJ1cHQgUmVnaXN0ZXIgMiAq LworI2RlZmluZSBNVk1FNzEwMF9SVENfTUFTSwkJMHg0MAorI2RlZmluZSBNVk1FNzEwMF9U RU1QX01BU0sJCTB4MjAKKyNkZWZpbmUgTVZNRTcxMDBfQUJPUlRfTUFTSwkJMHgxMAorI2Rl ZmluZSBNVk1FNzEwMF9SVENfU1RBVFVTCQkweDA0CisjZGVmaW5lIE1WTUU3MTAwX1RFTVBf U1RBVFVTCQkweDAyCisjZGVmaW5lIE1WTUU3MTAwX0FCT1JUX1NUQVRVUwkJMHgwMQorCisv KiBQcmVzZW5jZSBEZXRlY3QgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTVZNRTcxMDBfRVJEWTIJ CQkweDIwCisjZGVmaW5lIE1WTUU3MTAwX0VSRFkxCQkJMHgxMAorI2RlZmluZSBNVk1FNzEw MF9YTUNTUEFOX1BSRVNFTlQJMHgwNAorI2RlZmluZSBNVk1FNzEwMF9QTUMyX1BSRVNFTlQJ CTB4MDIKKyNkZWZpbmUgTVZNRTcxMDBfUE1DMV9QUkVTRU5UCQkweDAxCisKKy8qIE5BTkQg Rmxhc2ggQ2hpcCBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIE1WTUU3MTAwX05BTkRf RkxBU0hfQ0xFCQkweDgwCisjZGVmaW5lIE1WTUU3MTAwX05BTkRfRkxBU0hfQUxFCQkweDQw CisjZGVmaW5lIE1WTUU3MTAwX05BTkRfRkxBU0hfV1AJCTB4MjAKKworLyogTkFORCBGbGFz aCBDaGlwIFNlbGVjdCBSZWdpc3RlciAqLworI2RlZmluZSBNVk1FNzEwMF9OQU5EX0ZMQVNI X0NFMQkJMHg4MAorI2RlZmluZSBNVk1FNzEwMF9OQU5EX0ZMQVNIX0NFMgkJMHg0MAorI2Rl ZmluZSBNVk1FNzEwMF9OQU5EX0ZMQVNIX0NFMwkJMHgyMAorI2RlZmluZSBNVk1FNzEwMF9O QU5EX0ZMQVNIX0NFNAkJMHgxMAorCisvKiBOQU5EIEZsYXNoIENoaXAgUHJlc2VuY2UgUmVn aXN0ZXIgKi8KKyNkZWZpbmUgTVZNRTcxMDBfTkFORF9GTEFTSF9DUAkJMHg4MAorCisvKiBO QU5EIEZsYXNoIENoaXAgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIE1WTUU3MTAwX05B TkRfRkxBU0hfUkIxCQkweDgwCisjZGVmaW5lIE1WTUU3MTAwX05BTkRfRkxBU0hfUkIyCQkw eDQwCisjZGVmaW5lIE1WTUU3MTAwX05BTkRfRkxBU0hfUkIzCQkweDIwCisjZGVmaW5lIE1W TUU3MTAwX05BTkRfRkxBU0hfUkI0CQkweDEwCisKKyNkZWZpbmUgTVZNRTcxMDBfQkFTRV9C QVVECQkxODQzMjAwCisjZGVmaW5lIFFVQVJUX0JBU0VfQkFVRAkJCShNVk1FNzEwMF9CQVNF X0JBVUQgLyAxNikKKyNkZWZpbmUgTVZNRTcxMDBfVUFSVF9TSVpFCQkweDgKKworI2RlZmlu ZSBNVk1FNzEwMF9TRVJJQUxfMQkweEYyMDExMDAwVQorI2RlZmluZSBNVk1FNzEwMF9TRVJJ QUxfMgkweEYyMDEyMDAwVQorI2RlZmluZSBNVk1FNzEwMF9TRVJJQUxfMwkweEYyMDEzMDAw VQorI2RlZmluZSBNVk1FNzEwMF9TRVJJQUxfNAkweEYyMDE0MDAwVQorCisjZW5kaWYJLyog X19NVk1FNzEwMF9IX18gKi8KZGlmZiAtdSAtLW5ldy1maWxlIC0tcmVjdXJzaXZlIGxpbnV4 LTIuNi4yOS42Lm9yaWcvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L212bWU3MTAwX3Rp bWVyLmMgbGludXgtMi42LjI5LjYubW9kL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9t dm1lNzEwMF90aW1lci5jCi0tLSBsaW51eC0yLjYuMjkuNi5vcmlnL2FyY2gvcG93ZXJwYy9w bGF0Zm9ybXMvODZ4eC9tdm1lNzEwMF90aW1lci5jCTE5NjktMTItMzEgMTc6MDA6MDAuMDAw MDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYuMjkuNi5tb2QvYXJjaC9wb3dlcnBjL3BsYXRm b3Jtcy84Nnh4L212bWU3MTAwX3RpbWVyLmMJMjAwOS0wNy0yMSAxMToyODoxNy4wMDAwMDAw MDAgLTA3MDAKQEAgLTAsMCArMSwzOTYgQEAKKy8qCisgKiBhcmNoL3BwYy9wbGF0Zm9ybXMv ODZ4eC9tdm1lNzEwMF90aW1lci5jCisgKgorICogTVZNRTcxMDAgVGljayBUaW1lcnMgU3Vw cG9ydAorICoKKyAqIEF1dGhvcjogQWppdCBQcmVtIDxhaml0LnByZW1AZW1lcnNvbi5jb20+ CisgKgorICogQ29weXJpZ2h0IDIwMDcgTW90b3JvbGEgSW5jLgorICogQ29weXJpZ2h0IDIw MDggRW1lcnNvbiBOZXR3b3JrIFBvd2VyIEVtYmVkZGVkIENvbXB1dGluZyBJbmMuCisgKgor ICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl ICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05V IEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNl LCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisj aW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNp bmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4K KyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNp bmNsdWRlIDxhc20vbXBjODZ4eC5oPgorI2luY2x1ZGUgIm12bWU3MTAwLmgiCisjaW5jbHVk ZSA8YXNtL212bWU3MTAwX3RpbWVyLmg+CisKKyNkZWZpbmUgTVZNRTcxMDBfVElDS19USU1F Ul9CQVNFICAgICAgICAgICAgICAgIDB4RjIwMjAwMDAKKyNkZWZpbmUgTVZNRTcxMDBfVElD S19USU1FUl9CTE9DS19TSVpFICAgICAgICAgIDB4NEMKKworI2RlZmluZSBNVk1FNzEwMF9U SUNLX1RJTUVSX1BSRVNDQUxFUl9SRUdfT0ZGU0VUICAgICAgICAweDAKKyNkZWZpbmUgTVZN RTcxMDBfVElDS19USU1FUl9DT05UUk9MX1JFR19PRkZTRVQgICAgICAgICAgMHgxMAorI2Rl ZmluZSBNVk1FNzEwMF9USUNLX1RJTUVSX0NPTVBBUkVfUkVHX09GRlNFVCAgICAgICAgICAw eDE0CisjZGVmaW5lIE1WTUU3MTAwX1RJQ0tfVElNRVJfQ09VTlRFUl9SRUdfT0ZGU0VUICAg ICAgICAgIDB4MTgKKworI2RlZmluZSBNVk1FNzEwMF9USUNLX1RJTUVSX0VOQyAgICAgICAg ICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBNVk1FNzEwMF9USUNLX1RJTUVSX0NPQyAg ICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBNVk1FNzEwMF9USUNLX1RJTUVS X0NPVkYgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBNVk1FNzEwMF9USUNL X1RJTUVSX09WRiAgICAgICAgICAgICAgICAgMHgwMDAwMDBGMAorI2RlZmluZSBNVk1FNzEw MF9USUNLX1RJTUVSX0VOSU5UICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBN Vk1FNzEwMF9USUNLX1RJTUVSX0NJTlQgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2Rl ZmluZSBNVk1FNzEwMF9USUNLX1RJTUVSX0lOVFMgICAgICAgICAgICAgICAgMHgwMDAwMDQw MAorCisjZGVmaW5lCU1JTl9NSUNST1NFQ09ORFMJMTAwMDAKKyNkZWZpbmUgTUFYX1RJQ0tT CQkweEZGRkZGRkZGCisKK3N0cnVjdCBtdm1lNzEwMF90aW1lcl90IHsKKwltdm1lNzEwMF90 aW1lcl9mIGZ1bmM7CisJdm9pZCAqZnVuY19kYXRhOworCWludCBzdGFydGVkOworCWludCBw ZXJpb2RpYzsKKwl1bG9uZyBwZXJpb2Q7CisJdWxvbmcgdGlja3M7Cit9OworCisjZGVmaW5l IEFMTF9NU0cgIm12bWU3MTAwX3RpbWVyOiAiCisKKyNpZmRlZiBNVk1FNzEwMF9USU1FUl9E RUJVRworaW50IG12bWU3MTAwX3RpbWVyX2RlYnVnID0gTVZNRTcxMDBfVElNRVJfREVCVUc7 CitNT0RVTEVfUEFSTShtdm1lNzEwMF90aW1lcl9kZWJ1ZywgImkiKTsKKyNkZWZpbmUgREVC VUcobiwgZm10LCBhcmdzLi4uKSBpZiAobXZtZTcxMDBfdGltZXJfZGVidWc+KG4pKSBwcmlu dGsoS0VSTl9JTkZPIEFMTF9NU0cgZm10LCAjIyBhcmdzKQorc3RhdGljIGNvbnN0IGNoYXIg KnZlcnNpb24gPSAibXZtZTcxMDBfdGltZXIuYyAxLjAuMCAoQWppdCBQcmVtKSI7CisjZWxz ZQorI2RlZmluZSBERUJVRyhuLCBmbXQsIGFyZ3MuLi4pCisjZW5kaWYKKworZXh0ZXJuIGlu dCBtdm1lNzEwMF90aW1lcl9pcnE7CisKK3N0YXRpYyBzdHJ1Y3QgbXZtZTcxMDBfdGltZXJf dCBtdm1lNzEwMF90aW1lcls0XTsKK3N0YXRpYyB2b2lkIF9faW9tZW0gKm12bWU3MTAwX3Rp bWVyX2Jhc2U7CitzdGF0aWMgdTMyIGNsa19vdXQgPSAxOwkJLyogVGlja3MgcGVyIG1pY3Jv c2Vjb25kICovCitzdGF0aWMgc3BpbmxvY2tfdCBtdm1lNzEwMF90aW1lcl9sb2NrID0gU1BJ Tl9MT0NLX1VOTE9DS0VEOworCitzdGF0aWMgaXJxcmV0dXJuX3QgbXZtZTcxMDBfdGltZXJf aW50X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbXZtZTcxMDBf dGltZXJfdCAqaW5mbyA9IGRhdGE7CisJbXZtZTcxMDBfdGltZXJfZiBmdW5jOworCXZvaWQg KmZ1bmNfZGF0YTsKKwlpbnQgdGltZXJfbnVtYmVyOworCXUzMiBjdHJsX3JlZzsKKworCWlm IChkYXRhICE9ICh2b2lkICopJm12bWU3MTAwX3RpbWVyWzBdKQorCQlyZXR1cm4gSVJRX05P TkU7CisKKwlmb3IgKHRpbWVyX251bWJlciA9IDA7IHRpbWVyX251bWJlciA8PSAzOyB0aW1l cl9udW1iZXIrKykgeworCQlpZiAoc3dhYjMyKHJlYWRsKG12bWU3MTAwX3RpbWVyX2Jhc2Ug KworCQkJICh0aW1lcl9udW1iZXIgKyAxKSAqCisJCQkgTVZNRTcxMDBfVElDS19USU1FUl9D T05UUk9MX1JFR19PRkZTRVQpKSAmCisJCSAgIAkgTVZNRTcxMDBfVElDS19USU1FUl9JTlRT KSB7CisJCQlpbmZvID0gJm12bWU3MTAwX3RpbWVyW3RpbWVyX251bWJlcl07CisJCQlmdW5j X2RhdGEgPSBpbmZvLT5mdW5jX2RhdGE7CisJCQlmdW5jID0gaW5mby0+ZnVuYzsKKworCQkJ aWYgKCFpbmZvLT5wZXJpb2RpYykgeworCQkJCW12bWU3MTAwX3RpbWVyX3N0b3AodGltZXJf bnVtYmVyKTsKKwkJCX0gZWxzZSB7CisJCQkJY3RybF9yZWcgPSBzd2FiMzIocmVhZGwobXZt ZTcxMDBfdGltZXJfYmFzZSArCisJCQkJCSgodGltZXJfbnVtYmVyICsgMSkgKgorCQkJCQkg TVZNRTcxMDBfVElDS19USU1FUl9DT05UUk9MX1JFR19PRkZTRVQpKSk7CisJCQkJY3RybF9y ZWcgJj0gfk1WTUU3MTAwX1RJQ0tfVElNRVJfRU5DOworCQkJCWN0cmxfcmVnID0KKwkJCQkg ICAgTVZNRTcxMDBfVElDS19USU1FUl9DT1ZGIHwKKwkJCQkgICAgTVZNRTcxMDBfVElDS19U SU1FUl9DSU5UOworCQkJCXdyaXRlbChzd2FiMzIoY3RybF9yZWcpLAorCQkJCSAgICAgICBt dm1lNzEwMF90aW1lcl9iYXNlICsKKwkJCQkgICAgICAgKCh0aW1lcl9udW1iZXIgKyAxKSAq CisJCQkJCU1WTUU3MTAwX1RJQ0tfVElNRVJfQ09OVFJPTF9SRUdfT0ZGU0VUKSk7CisJCQkJ d3JpdGVsKDAsCisJCQkJICAgICAgIG12bWU3MTAwX3RpbWVyX2Jhc2UgKworCQkJCSAgICAg ICAoKHRpbWVyX251bWJlciArIDEpICoKKwkJCQkJTVZNRTcxMDBfVElDS19USU1FUl9DT05U Uk9MX1JFR19PRkZTRVQpCisJCQkJICAgICAgICsKKwkJCQkgICAgICAgKE1WTUU3MTAwX1RJ Q0tfVElNRVJfQ09VTlRFUl9SRUdfT0ZGU0VUIC0KKwkJCQkJTVZNRTcxMDBfVElDS19USU1F Ul9DT05UUk9MX1JFR19PRkZTRVQpKTsKKwkJCQlERUJVRygxLAorCQkJCSAgICAgICgiVGlt ZXIgJWQgQ291bnRlciAweCV4IENvbXBhcmUgMHgleFxuIiwKKwkJCQkgICAgICAgdGltZXJf bnVtYmVyLAorCQkJCSAgICAgICBzd2FiMzIocmVhZGwKKwkJCQkJICAgICAgKG12bWU3MTAw X3RpbWVyX2Jhc2UgKworCQkJCQkgICAgICAgKCh0aW1lcl9udW1iZXIgKyAxKSAqCisJCQkJ CQlNVk1FNzEwMF9USUNLX1RJTUVSX0NPTlRST0xfUkVHX09GRlNFVCkKKwkJCQkJICAgICAg ICsKKwkJCQkJICAgICAgIChNVk1FNzEwMF9USUNLX1RJTUVSX0NPVU5URVJfUkVHX09GRlNF VAorCQkJCQkJLQorCQkJCQkJTVZNRTcxMDBfVElDS19USU1FUl9DT05UUk9MX1JFR19PRkZT RVQpKSksCisJCQkJICAgICAgIHN3YWIzMihyZWFkbAorCQkJCQkgICAgICAobXZtZTcxMDBf dGltZXJfYmFzZSArCisJCQkJCSAgICAgICAoKHRpbWVyX251bWJlciArIDEpICoKKwkJCQkJ CU1WTUU3MTAwX1RJQ0tfVElNRVJfQ09OVFJPTF9SRUdfT0ZGU0VUKQorCQkJCQkgICAgICAg KworCQkJCQkgICAgICAgKE1WTUU3MTAwX1RJQ0tfVElNRVJfQ09NUEFSRV9SRUdfT0ZGU0VU CisJCQkJCQktCisJCQkJCQlNVk1FNzEwMF9USUNLX1RJTUVSX0NPTlRST0xfUkVHX09GRlNF VCkpKSkpOworCQkJCXdyaXRlbChzd2FiMzIKKwkJCQkgICAgICAgKE1WTUU3MTAwX1RJQ0tf VElNRVJfRU5DIHwKKwkJCQkJTVZNRTcxMDBfVElDS19USU1FUl9DT0MgfAorCQkJCQlNVk1F NzEwMF9USUNLX1RJTUVSX0VOSU5UKSwKKwkJCQkgICAgICAgbXZtZTcxMDBfdGltZXJfYmFz ZSArIAorCQkJCQkoKHRpbWVyX251bWJlciArIDEpICoKKwkJCQkJTVZNRTcxMDBfVElDS19U SU1FUl9DT05UUk9MX1JFR19PRkZTRVQpKTsKKwkJCX0KKwkJCWlmIChmdW5jKSAKKwkJCQlm dW5jKGZ1bmNfZGF0YSk7CisJCX0KKwl9CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisK Ky8qIAorICogU3RvcCB0aGUgdGltZXIKKyAqLworRVhQT1JUX1NZTUJPTChtdm1lNzEwMF90 aW1lcl9zdG9wKTsKK2ludCBtdm1lNzEwMF90aW1lcl9zdG9wKGludCB0aW1lcl9udW1iZXIp Cit7CisJdTMyIHJlc2V0X3ZhbHVlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAo KHRpbWVyX251bWJlciA8IDApIHx8ICh0aW1lcl9udW1iZXIgPiAzKSkKKwkJcmV0dXJuIC1F SU5WQUw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbXZtZTcxMDBfdGltZXJfbG9jaywgZmxh Z3MpOworCXJlc2V0X3ZhbHVlID0gc3dhYjMyKHJlYWRsKG12bWU3MTAwX3RpbWVyX2Jhc2Ug KworCQkJCSAgICgodGltZXJfbnVtYmVyICsgMSkgKgorCQkJCSAgICBNVk1FNzEwMF9USUNL X1RJTUVSX0NPTlRST0xfUkVHX09GRlNFVCkpKTsKKwlyZXNldF92YWx1ZSAmPSB+TVZNRTcx MDBfVElDS19USU1FUl9FTkM7CisJcmVzZXRfdmFsdWUgJj0gfk1WTUU3MTAwX1RJQ0tfVElN RVJfRU5JTlQ7CisJcmVzZXRfdmFsdWUgPSBNVk1FNzEwMF9USUNLX1RJTUVSX0NPVkYgfCBN Vk1FNzEwMF9USUNLX1RJTUVSX0NJTlQ7CisJd3JpdGVsKHN3YWIzMihyZXNldF92YWx1ZSks CisJICAgICAgIG12bWU3MTAwX3RpbWVyX2Jhc2UgKworCSAgICAgICAoKHRpbWVyX251bWJl ciArIDEpICogTVZNRTcxMDBfVElDS19USU1FUl9DT05UUk9MX1JFR19PRkZTRVQpKTsKKwl3 cml0ZWwoMCwgbXZtZTcxMDBfdGltZXJfYmFzZSArCisJICAgICAgICgodGltZXJfbnVtYmVy ICsgMSkgKiBNVk1FNzEwMF9USUNLX1RJTUVSX0NPTlRST0xfUkVHX09GRlNFVCkgKworCSAg ICAgICAoTVZNRTcxMDBfVElDS19USU1FUl9DT1VOVEVSX1JFR19PRkZTRVQgLQorCQlNVk1F NzEwMF9USUNLX1RJTUVSX0NPTlRST0xfUkVHX09GRlNFVCkpOworCXdyaXRlbCgweGZmZmZm ZmZmLCBtdm1lNzEwMF90aW1lcl9iYXNlICsKKwkgICAgICAgKCh0aW1lcl9udW1iZXIgKyAx KSAqIE1WTUU3MTAwX1RJQ0tfVElNRVJfQ09OVFJPTF9SRUdfT0ZGU0VUKSArCisJICAgICAg IChNVk1FNzEwMF9USUNLX1RJTUVSX0NPTVBBUkVfUkVHX09GRlNFVCAtCisJCU1WTUU3MTAw X1RJQ0tfVElNRVJfQ09OVFJPTF9SRUdfT0ZGU0VUKSk7CisJbXZtZTcxMDBfdGltZXJbdGlt ZXJfbnVtYmVyXS5mdW5jID0gTlVMTDsKKwltdm1lNzEwMF90aW1lclt0aW1lcl9udW1iZXJd LmZ1bmNfZGF0YSA9IE5VTEw7CisJbXZtZTcxMDBfdGltZXJbdGltZXJfbnVtYmVyXS5zdGFy dGVkID0gMDsKKwltdm1lNzEwMF90aW1lclt0aW1lcl9udW1iZXJdLnBlcmlvZGljID0gMDsK Kwltdm1lNzEwMF90aW1lclt0aW1lcl9udW1iZXJdLnBlcmlvZCA9IDA7CisJbXZtZTcxMDBf dGltZXJbdGltZXJfbnVtYmVyXS50aWNrcyA9IDB4RkZGRkZGRkY7CisJc3Bpbl91bmxvY2tf aXJxcmVzdG9yZSgmbXZtZTcxMDBfdGltZXJfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7 Cit9CisKKy8qIAorICogU3RhcnQgdGhlIHRpbWVyCisgKi8KK0VYUE9SVF9TWU1CT0wobXZt ZTcxMDBfdGltZXJfc3RhcnQpOworaW50IG12bWU3MTAwX3RpbWVyX3N0YXJ0KGludCB0aW1l cl9udW1iZXIsIHVuc2lnbmVkIGxvbmcgbWljcm9zZWNvbmRzLAorCQkJIG12bWU3MTAwX3Rp bWVyX2YgZnVuYywgdm9pZCAqZnVuY19kYXRhLCBpbnQgcGVyaW9kaWMpCit7CisJaW50IHJl cyA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIHRpY2tzOwor CisJcHJpbnRrKEtFUk5fSU5GTworCSAgICAgICAibXZtZTcxMDBfdGltZXI6IHN0YXJ0X3Rp bWVyOiBudW0gJWQgbWljcm9zZWNvbmRzIDB4JWx4IHBlcmlvZGljICVkXG4iLAorCSAgICAg ICB0aW1lcl9udW1iZXIsIG1pY3Jvc2Vjb25kcywgcGVyaW9kaWMpOworCWlmICgodGltZXJf bnVtYmVyIDwgMCkgfHwgKHRpbWVyX251bWJlciA+IDMpKQorCQlyZXR1cm4gLUVJTlZBTDsK KwlpZiAoKG1pY3Jvc2Vjb25kcyA8IE1JTl9NSUNST1NFQ09ORFMpIHx8CisJICAgIChtaWNy b3NlY29uZHMgPiBNQVhfVElDS1MgLyBjbGtfb3V0KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJ aWYgKGZ1bmMgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKG12bWU3MTAwX3Rp bWVyW3RpbWVyX251bWJlcl0uc3RhcnRlZCA9PSAxKQorCQlyZXR1cm4gLUVCVVNZOworCWlm ICgocmVzID0gbXZtZTcxMDBfdGltZXJfc3RvcCh0aW1lcl9udW1iZXIpKSA8IDApCisJCXJl dHVybiByZXM7CisJdGlja3MgPSBtaWNyb3NlY29uZHMgKiBjbGtfb3V0OworCXNwaW5fbG9j a19pcnFzYXZlKCZtdm1lNzEwMF90aW1lcl9sb2NrLCBmbGFncyk7CisJbXZtZTcxMDBfdGlt ZXJbdGltZXJfbnVtYmVyXS5zdGFydGVkID0gMTsKKwltdm1lNzEwMF90aW1lclt0aW1lcl9u dW1iZXJdLmZ1bmMgPSBmdW5jOworCW12bWU3MTAwX3RpbWVyW3RpbWVyX251bWJlcl0uZnVu Y19kYXRhID0gZnVuY19kYXRhOworCW12bWU3MTAwX3RpbWVyW3RpbWVyX251bWJlcl0ucGVy aW9kaWMgPSBwZXJpb2RpYzsKKwltdm1lNzEwMF90aW1lclt0aW1lcl9udW1iZXJdLnBlcmlv ZCA9IG1pY3Jvc2Vjb25kczsKKwltdm1lNzEwMF90aW1lclt0aW1lcl9udW1iZXJdLnRpY2tz ID0gdGlja3M7CisJd3JpdGVsKHN3YWIzMih0aWNrcyksIG12bWU3MTAwX3RpbWVyX2Jhc2Ug KworCSAgICAgICAoKHRpbWVyX251bWJlciArIDEpICogTVZNRTcxMDBfVElDS19USU1FUl9D T05UUk9MX1JFR19PRkZTRVQpICsKKwkgICAgICAgKE1WTUU3MTAwX1RJQ0tfVElNRVJfQ09N UEFSRV9SRUdfT0ZGU0VUIC0KKwkJTVZNRTcxMDBfVElDS19USU1FUl9DT05UUk9MX1JFR19P RkZTRVQpKTsKKwl3cml0ZWwoMCwgbXZtZTcxMDBfdGltZXJfYmFzZSArCisJICAgICAgICgo dGltZXJfbnVtYmVyICsgMSkgKiBNVk1FNzEwMF9USUNLX1RJTUVSX0NPTlRST0xfUkVHX09G RlNFVCkgKworCSAgICAgICAoTVZNRTcxMDBfVElDS19USU1FUl9DT1VOVEVSX1JFR19PRkZT RVQgLQorCQlNVk1FNzEwMF9USUNLX1RJTUVSX0NPTlRST0xfUkVHX09GRlNFVCkpOworCXdy aXRlbChzd2FiMzIoTVZNRTcxMDBfVElDS19USU1FUl9FTkMgfCBNVk1FNzEwMF9USUNLX1RJ TUVSX0NPQyB8CisJCSAgICAgIE1WTUU3MTAwX1RJQ0tfVElNRVJfRU5JTlQpLAorCSAgICAg ICBtdm1lNzEwMF90aW1lcl9iYXNlICsKKwkgICAgICAgKCh0aW1lcl9udW1iZXIgKyAxKSAq IE1WTUU3MTAwX1RJQ0tfVElNRVJfQ09OVFJPTF9SRUdfT0ZGU0VUKSk7CisJc3Bpbl91bmxv Y2tfaXJxcmVzdG9yZSgmbXZtZTcxMDBfdGltZXJfbG9jaywgZmxhZ3MpOworCisJcmV0dXJu IDA7Cit9CisKKy8qIAorICogR2V0IHRoZSB0aW1lciByZXNvbHV0aW9uLCBpbiBtaWNyb3Nl Y29uZHMvdGljaworICovCitFWFBPUlRfU1lNQk9MKG12bWU3MTAwX3RpbWVyX2dldF9yZXNv bHV0aW9uKTsKK3Vuc2lnbmVkIGxvbmcgbXZtZTcxMDBfdGltZXJfZ2V0X3Jlc29sdXRpb24o dm9pZCkKK3sKKwl1MzIgcHJlc2NhbGVyX2FkanVzdDsKKworCS8qIAorCSAqIFByZXNjYWxl cl9hZGp1c3QgPSAyNTYgLSBDTEtJTi9DTEtPVVQKKwkgKiBDTEtJTiA9IDI1IE1IegorCSAq LworCisJcHJlc2NhbGVyX2FkanVzdCA9IHJlYWRsKG12bWU3MTAwX3RpbWVyX2Jhc2UgKwor CQkJCSBNVk1FNzEwMF9USUNLX1RJTUVSX1BSRVNDQUxFUl9SRUdfT0ZGU0VUKTsKKwlyZXR1 cm4gKDI1IC8gKDI1NiAtIHByZXNjYWxlcl9hZGp1c3QpKTsKK30KKworLyogCisgKiBTZXQg dGhlIHRpbWVyIHJlc29sdXRpb24sIGluIHRpY2tzL21pY3Jvc2Vjb25kCisgKi8KK0VYUE9S VF9TWU1CT0wobXZtZTcxMDBfdGltZXJfc2V0X3Jlc29sdXRpb24pOworaW50IG12bWU3MTAw X3RpbWVyX3NldF9yZXNvbHV0aW9uKHVuc2lnbmVkIGxvbmcgdGlja3MpCit7CisJdTMyIHBy ZXNjYWxlcl9hZGp1c3Q7CisJaW50IGk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8q IAorCSAqIFByZXNjYWxlcl9hZGp1c3QgPSAyNTYgLSBDTEtJTi9DTEtPVVQKKwkgKiBDTEtJ TiA9IDI1IE1IegorCSAqLworCisJaWYgKCh0aWNrcyA8IE1JTl9USUNLU19QRVJfTUlDUk9T RUNPTkQpIHx8CisJICAgICh0aWNrcyA+IE1BWF9USUNLU19QRVJfTUlDUk9TRUNPTkQpKQor CQlyZXR1cm4gLUVJTlZBTDsKKworCWNsa19vdXQgPSB0aWNrczsKKwlwcmVzY2FsZXJfYWRq dXN0ID0gMjU2IC0gKDI1IC8gY2xrX291dCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbXZt ZTcxMDBfdGltZXJfbG9jaywgZmxhZ3MpOworCWZvciAoaSA9IDA7IGkgPD0gMzsgaSsrKSB7 CisJCWlmIChtdm1lNzEwMF90aW1lcltpXS5zdGFydGVkID09IDEpIHsKKwkJCXNwaW5fdW5s b2NrX2lycXJlc3RvcmUoJm12bWU3MTAwX3RpbWVyX2xvY2ssIGZsYWdzKTsKKwkJCXJldHVy biAtRUJVU1k7CisJCX0KKwl9CisKKwl3cml0ZWwocHJlc2NhbGVyX2FkanVzdCwgbXZtZTcx MDBfdGltZXJfYmFzZSArCisJICAgICAgIE1WTUU3MTAwX1RJQ0tfVElNRVJfUFJFU0NBTEVS X1JFR19PRkZTRVQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm12bWU3MTAwX3RpbWVy X2xvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCisvKiAKKyAqIEdldCB0aGUgdGlt ZXIgdmFsdWUsIGluIHRpY2tzCisgKi8KK0VYUE9SVF9TWU1CT0wobXZtZTcxMDBfdGltZXJf Z2V0X3RpY2tzKTsKK3Vuc2lnbmVkIGxvbmcgbXZtZTcxMDBfdGltZXJfZ2V0X3RpY2tzKGlu dCB0aW1lcl9udW1iZXIpCit7CisJaWYgKCh0aW1lcl9udW1iZXIgPCAwKSB8fCAodGltZXJf bnVtYmVyID4gMykpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHN3YWIzMihyZWFk bChtdm1lNzEwMF90aW1lcl9iYXNlICsKKwkJCSAgICAoKHRpbWVyX251bWJlciArCisJCQkg ICAgICAxKSAqIE1WTUU3MTAwX1RJQ0tfVElNRVJfQ09OVFJPTF9SRUdfT0ZGU0VUKSArCisJ CQkgICAgKE1WTUU3MTAwX1RJQ0tfVElNRVJfQ09VTlRFUl9SRUdfT0ZGU0VUIC0KKwkJCSAg ICAgTVZNRTcxMDBfVElDS19USU1FUl9DT05UUk9MX1JFR19PRkZTRVQpKSk7Cit9CisKKyNp ZmRlZiBDT05GSUdfUFJPQ19GUworCitzdGF0aWMgaW50Cittdm1lNzEwMF90aW1lcl9wcm9j X3JlYWQoY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwgaW50IGxlbiwgaW50 ICplb2YsCisJCQkgdm9pZCAqZGF0YSkKK3sKKwlpbnQgaTsKKworCWxlbiA9IDA7CisJbGVu ICs9CisJICAgIHNwcmludGYoYnVmICsgbGVuLAorCQkgICAgIlxuVGltZXIgICAgIEFjdGl2 ZSAgUGVyaW9kaWMgIFBlcmlvZCh0aWNrcykgICBQZXJpb2QobWljcm9zZWNvbmRzKVxuIik7 CisJbGVuICs9CisJICAgIHNwcmludGYoYnVmICsgbGVuLAorCQkgICAgIl9fX19fICAgICBf X19fX18gIF9fX19fX19fICBfX19fX19fX19fX19fICAgX19fX19fX19fX19fX19fX19fX19c biIpOworCWZvciAoaSA9IDA7IGkgPD0gMzsgaSsrKSB7CisJCWxlbiArPQorCQkgICAgc3By aW50ZihidWYgKyBsZW4sCisJCQkgICAgIiMlZCAgICAgICAgJWMgICAgICAgJWMgICAgICAg ICAweCUwOGx4ICAgICAgJWxkXG4iLAorCQkJICAgIGkgKyAxLAorCQkJICAgICgobXZtZTcx MDBfdGltZXJbaV0uc3RhcnRlZCA9PSAxKSA/ICd5JyA6ICduJyksCisJCQkgICAgKChtdm1l NzEwMF90aW1lcltpXS5wZXJpb2RpYyA9PSAxKSA/ICd5JyA6ICduJyksCisJCQkgICAgKCht dm1lNzEwMF90aW1lcltpXS5wZXJpb2RpYyA9PQorCQkJICAgICAgMSkgPyBtdm1lNzEwMF90 aW1lcltpXS50aWNrcyA6IDApLAorCQkJICAgICgobXZtZTcxMDBfdGltZXJbaV0ucGVyaW9k aWMgPT0KKwkJCSAgICAgIDEpID8gbXZtZTcxMDBfdGltZXJbaV0ucGVyaW9kIDogMCkpOwor CX0KKwlyZXR1cm4gbGVuOworfQorCisjZW5kaWYJCQkJLyogQ09ORklHX1BST0NfRlMgKi8K Kworc3RhdGljIF9faW5pdCBpbnQgbXZtZTcxMDBfdGltZXJfaW5pdCh2b2lkKQoreworCWlu dCByZXMgPSAwOworCWludCBpOworCisJcHJpbnRrKEtFUk5fSU5GTyAibXZtZTcxMDAtdGlt ZXI6IE1WTUU3MTAwIFRpY2sgVGltZXJzXG4iKTsKKworCW12bWU3MTAwX3RpbWVyX2Jhc2Ug PSBpb3JlbWFwKE1WTUU3MTAwX1RJQ0tfVElNRVJfQkFTRSwKKwkJCQkgICAgIE1WTUU3MTAw X1RJQ0tfVElNRVJfQkxPQ0tfU0laRSk7CisJaWYgKG12bWU3MTAwX3RpbWVyX2Jhc2UgPT0g TlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlmb3IgKGkgPSAwOyBpIDw9IDM7IGkrKykg eworCQltdm1lNzEwMF90aW1lcltpXS5mdW5jID0gTlVMTDsKKwkJbXZtZTcxMDBfdGltZXJb aV0uZnVuY19kYXRhID0gTlVMTDsKKwkJbXZtZTcxMDBfdGltZXJbaV0uc3RhcnRlZCA9IDA7 CisJCW12bWU3MTAwX3RpbWVyW2ldLnBlcmlvZGljID0gMDsKKwkJbXZtZTcxMDBfdGltZXJb aV0ucGVyaW9kID0gMDsKKwkJbXZtZTcxMDBfdGltZXJbaV0udGlja3MgPSAwOworCX0KKwly ZXMgPSByZXF1ZXN0X2lycShtdm1lNzEwMF90aW1lcl9pcnEsIG12bWU3MTAwX3RpbWVyX2lu dF9oYW5kbGVyLAorCQkJICBJUlFGX1NIQVJFRCwKKwkJCSAgIk1WTUU3MTAwIFRpY2sgVGlt ZXJzIiwgJm12bWU3MTAwX3RpbWVyWzBdKTsKKwlpZiAocmVzIDwgMCkgeworCQlwcmludGso S0VSTl9FUlIgIk1WTUU3MTAwIFRpbWVyOiBDYW4ndCBhbGxvY2F0ZSBJUlEgJWQuXG4iLAor CQkgICAgICAgbXZtZTcxMDBfdGltZXJfaXJxKTsKKwkJcmV0dXJuIHJlczsKKwl9CisjaWZk ZWYgQ09ORklHX1BST0NfRlMKKwljcmVhdGVfcHJvY19yZWFkX2VudHJ5KCJtdm1lNzEwMF90 aW1lcnMiLCAwLCBOVUxMLAorCQkJICAgICAgIG12bWU3MTAwX3RpbWVyX3Byb2NfcmVhZCwg TlVMTCk7CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIF9fZXhpdCB2b2lkIG12 bWU3MTAwX3RpbWVyX2V4aXQodm9pZCkKK3sKKwlpbnQgdGltZXJfbnVtYmVyOworCisJZm9y ICh0aW1lcl9udW1iZXIgPSAwOyB0aW1lcl9udW1iZXIgPD0gMzsgdGltZXJfbnVtYmVyKysp IHsKKwkJbXZtZTcxMDBfdGltZXJfc3RvcCh0aW1lcl9udW1iZXIpOworCX0KKwlmcmVlX2ly cShtdm1lNzEwMF90aW1lcl9pcnEsICZtdm1lNzEwMF90aW1lclswXSk7CisJaW91bm1hcCht dm1lNzEwMF90aW1lcl9iYXNlKTsKK30KKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitN T0RVTEVfQVVUSE9SKCJBaml0IFByZW0gPGFqaXQucHJlbUBlbWVyc29uLmNvbT4iKTsKK01P RFVMRV9ERVNDUklQVElPTigiTVZNRTcxMDAgVGljayBUaW1lciBkcml2ZXIiKTsKKworbW9k dWxlX2luaXQobXZtZTcxMDBfdGltZXJfaW5pdCk7Cittb2R1bGVfZXhpdChtdm1lNzEwMF90 aW1lcl9leGl0KTsKZGlmZiAtdSAtLW5ldy1maWxlIC0tcmVjdXJzaXZlIGxpbnV4LTIuNi4y OS42Lm9yaWcvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfcGNpLmMgbGludXgtMi42LjI5LjYu bW9kL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3BjaS5jCi0tLSBsaW51eC0yLjYuMjkuNi5v cmlnL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3BjaS5jCTIwMDktMDctMDIgMTY6NDE6MjAu MDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYuMjkuNi5tb2QvYXJjaC9wb3dlcnBjL3N5 c2Rldi9mc2xfcGNpLmMJMjAwOS0wNy0yNCAxMTo1Njo0OS4wMDAwMDAwMDAgLTA3MDAKQEAg LTE5LDYgKzE5LDggQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxs aW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgorI2luY2x1ZGUgPGxp bnV4L2xtYi5oPgorI2luY2x1ZGUgPGxpbnV4L2xvZzIuaD4KIAogI2luY2x1ZGUgPGFzbS9p by5oPgogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CkBAIC0yOCw2ICszMCwxNTUgQEAKICNpbmNs dWRlIDxzeXNkZXYvZnNsX3BjaS5oPgogCiAjaWYgZGVmaW5lZChDT05GSUdfUFBDXzg1eHgp IHx8IGRlZmluZWQoQ09ORklHX1BQQ184Nnh4KQorI2lmIDEKK3ZvaWQgX19pbml0IHNldHVw X3BjaV9hdG11KHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSwgc3RydWN0IHJlc291cmNl ICpyc3JjKQoreworICAgICAgICBzdHJ1Y3QgY2Nzcl9wY2kgX19pb21lbSAqcGNpOworICAg ICAgICB1MzIgZmxhZ3MgPSAweDgwMDQ0MDAwOyAvKiBlbmFibGUgJiBtZW0gUi9XICovCisg ICAgICAgIHU2NCBtZW0sIHN6LCBwYWRkcl9oaSA9IDA7CisgICAgICAgIHU2NCBwYWRkcl9s byA9IFVMTE9OR19NQVg7CisgICAgICAgIHUzMiBwY2ljc3JiYXIgPSAwLCBwY2ljc3JiYXJf c3o7CisgICAgICAgIHUzMiBwaXdhciA9IFBJV0FSX0VOIHwgUElXQVJfUEYgfCBQSVdBUl9U R0lfTE9DQUwgfAorICAgICAgICAgICAgICAgICAgICAgICAgUElXQVJfUkVBRF9TTk9PUCB8 IFBJV0FSX1dSSVRFX1NOT09QOworICAgICAgICBpbnQgaSwgbWVtX2xvZywgd2luX2lkeCA9 IDI7CisKKyAgICAgICAgcHJfZGVidWcoIlBDSSBtZW1vcnkgbWFwIHN0YXJ0IDB4JTAxNmxs eCwgc2l6ZSAweCUwMTZsbHhcbiIsCisgICAgICAgICAgICAgICAgICAgICh1NjQpcnNyYy0+ c3RhcnQsICh1NjQpcnNyYy0+ZW5kIC0gKHU2NClyc3JjLT5zdGFydCArIDEpOworICAgICAg ICBwY2kgPSBpb3JlbWFwKHJzcmMtPnN0YXJ0LCByc3JjLT5lbmQgLSByc3JjLT5zdGFydCAr IDEpOworCisgICAgICAgIC8qIERpc2FibGUgYWxsIHdpbmRvd3MgKGV4Y2VwdCBwb3dhcjAg c2luY2UgaXRzIGlnbm9yZWQpICovCisgICAgICAgIGZvcihpID0gMTsgaSA8IDU7IGkrKykK KyAgICAgICAgICAgICAgICBvdXRfYmUzMigmcGNpLT5wb3dbaV0ucG93YXIsIDApOworICAg ICAgICBmb3IoaSA9IDA7IGkgPCAzOyBpKyspCisgICAgICAgICAgICAgICAgb3V0X2JlMzIo JnBjaS0+cGl3W2ldLnBpd2FyLCAwKTsKKworICAgICAgICAvKiBTZXR1cCBvdXRib3VuZCBN RU0gd2luZG93ICovCisgICAgICAgIGZvcihpID0gMDsgaSA8IDM7IGkrKykKKyAgICAgICAg ICAgICAgICBpZiAoaG9zZS0+bWVtX3Jlc291cmNlc1tpXS5mbGFncyAmIElPUkVTT1VSQ0Vf TUVNKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlX3NpemVfdCBwY2lfYWRk cl9zdGFydCA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3NlLT5tZW1f cmVzb3VyY2VzW2ldLnN0YXJ0IC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGhvc2UtPnBjaV9tZW1fb2Zmc2V0OworICAgICAgICAgICAgICAgICAgICAgICAgcHJfZGVi dWcoIlBDSSBNRU0gcmVzb3VyY2Ugc3RhcnQgMHglMDE2bGx4LCBzaXplIDB4JTAxNmxseC5c biIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1NjQpaG9zZS0+bWVtX3Jl c291cmNlc1tpXS5zdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHU2 NClob3NlLT5tZW1fcmVzb3VyY2VzW2ldLmVuZAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC0gKHU2NClob3NlLT5tZW1fcmVzb3VyY2VzW2ldLnN0YXJ0ICsgMSk7CisJ CQlpZiAoaG9zZS0+bWVtX3Jlc291cmNlc1tpXS5mbGFncyAmIElPUkVTT1VSQ0VfUFJFRkVU Q0gpCisJCQkJZmxhZ3MgfD0gMHgxMDAwMDAwMDsgLyogZW5hYmxlIHJlbGF4ZWQgb3JkZXJp bmcgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIG91dF9iZTMyKCZwY2ktPnBvd1tpKzFd LnBvdGFyLCAocGNpX2FkZHJfc3RhcnQgPj4gMTIpKTsKKyAgICAgICAgICAgICAgICAgICAg ICAgIG91dF9iZTMyKCZwY2ktPnBvd1tpKzFdLnBvdGVhciwgMCk7CisgICAgICAgICAgICAg ICAgICAgICAgICBvdXRfYmUzMigmcGNpLT5wb3dbaSsxXS5wb3diYXIsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChob3NlLT5tZW1fcmVzb3VyY2VzW2ldLnN0YXJ0ID4+ IDEyKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbmFibGUsIE1lbSBSL1cgKi8K KyAgICAgICAgICAgICAgICAgICAgICAgIG91dF9iZTMyKCZwY2ktPnBvd1tpKzFdLnBvd2Fy LCBmbGFncworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX2lsb2cyKGhv c2UtPm1lbV9yZXNvdXJjZXNbaV0uZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC0gaG9zZS0+bWVtX3Jlc291cmNlc1tpXS5zdGFydCArIDEpIC0gMSkpOworICAgICAg ICAgICAgICAgIH0KKworICAgICAgICAvKiBTZXR1cCBvdXRib3VuZCBJTyB3aW5kb3cgKi8K KyAgICAgICAgaWYgKGhvc2UtPmlvX3Jlc291cmNlLmZsYWdzICYgSU9SRVNPVVJDRV9JTyl7 CisgICAgICAgICAgICAgICAgcHJfZGVidWcoIlBDSSBJTyByZXNvdXJjZSBzdGFydCAweCUw MTZsbHgsIHNpemUgMHglMDE2bGx4LCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgInBo eSBiYXNlIDB4JTAxNmxseC5cbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAodTY0KWhv c2UtPmlvX3Jlc291cmNlLnN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgKHU2NClo b3NlLT5pb19yZXNvdXJjZS5lbmQgLSAodTY0KWhvc2UtPmlvX3Jlc291cmNlLnN0YXJ0ICsg MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh1NjQpaG9zZS0+aW9fYmFzZV9waHlzKTsK KyAgICAgICAgICAgICAgICBvdXRfYmUzMigmcGNpLT5wb3dbaSsxXS5wb3RhciwgKGhvc2Ut PmlvX3Jlc291cmNlLnN0YXJ0ID4+IDEyKSk7CisgICAgICAgICAgICAgICAgb3V0X2JlMzIo JnBjaS0+cG93W2krMV0ucG90ZWFyLCAwKTsKKyAgICAgICAgICAgICAgICBvdXRfYmUzMigm cGNpLT5wb3dbaSsxXS5wb3diYXIsIChob3NlLT5pb19iYXNlX3BoeXMgPj4gMTIpKTsKKyAg ICAgICAgICAgICAgICAvKiBFbmFibGUsIElPIFIvVyAqLworICAgICAgICAgICAgICAgIG91 dF9iZTMyKCZwY2ktPnBvd1tpKzFdLnBvd2FyLCAweDgwMDg4MDAwCisgICAgICAgICAgICAg ICAgICAgICAgICB8IChfX2lsb2cyKGhvc2UtPmlvX3Jlc291cmNlLmVuZAorICAgICAgICAg ICAgICAgICAgICAgICAgLSBob3NlLT5pb19yZXNvdXJjZS5zdGFydCArIDEpIC0gMSkpOwor ICAgICAgICB9CisKKyAgICAgICAgLyogY29udmVydCB0byBwY2kgYWRkcmVzcyBzcGFjZSAq LworICAgICAgICBwYWRkcl9oaSAtPSBob3NlLT5wY2lfbWVtX29mZnNldDsKKyAgICAgICAg cGFkZHJfbG8gLT0gaG9zZS0+cGNpX21lbV9vZmZzZXQ7CisKKyAgICAgICAgaWYgKHBhZGRy X2hpID09IHBhZGRyX2xvKSB7CisgICAgICAgICAgICAgICAgcHJfZXJyKCJObyBvdXRib3Vu ZCB3aW5kb3cgc3BhY2VcbiIpOworICAgICAgICAgICAgICAgIHJldHVybiA7CisgICAgICAg IH0KKworICAgICAgICBpZiAocGFkZHJfbG8gPT0gMCkgeworICAgICAgICAgICAgICAgIHBy X2VycigiTm8gc3BhY2UgZm9yIGluYm91bmQgd2luZG93XG4iKTsKKyAgICAgICAgICAgICAg ICByZXR1cm4gOworICAgICAgICB9CisKKyAgICAgICAgLyogc2V0dXAgUENTUkJBUi9QRVhD U1JCQVIgKi8KKyAgICAgICAgZWFybHlfd3JpdGVfY29uZmlnX2R3b3JkKGhvc2UsIDAsIDAs IFBDSV9CQVNFX0FERFJFU1NfMCwgMHhmZmZmZmZmZik7CisgICAgICAgIGVhcmx5X3JlYWRf Y29uZmlnX2R3b3JkKGhvc2UsIDAsIDAsIFBDSV9CQVNFX0FERFJFU1NfMCwgJnBjaWNzcmJh cl9zeik7CisgICAgICAgIHBjaWNzcmJhcl9zeiA9IH5wY2ljc3JiYXJfc3ogKyAxOworCisg ICAgICAgIGlmIChwYWRkcl9oaSA8ICgweDEwMDAwMDAwMHVsbCAtIHBjaWNzcmJhcl9zeikg fHwKKyAgICAgICAgICAgICAgICAocGFkZHJfbG8gPiAweDEwMDAwMDAwMHVsbCkpCisgICAg ICAgICAgICAgICAgcGNpY3NyYmFyID0gMHgxMDAwMDAwMDB1bGwgLSBwY2ljc3JiYXJfc3o7 CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwY2ljc3JiYXIgPSAocGFkZHJfbG8g LSBwY2ljc3JiYXJfc3opICYgLXBjaWNzcmJhcl9zejsKKworICAgICAgICBlYXJseV93cml0 ZV9jb25maWdfZHdvcmQoaG9zZSwgMCwgMCwgUENJX0JBU0VfQUREUkVTU18wLCBwY2ljc3Ji YXIpOworICAgICAgICBwYWRkcl9sbyA9IG1pbihwYWRkcl9sbywgKHU2NClwY2ljc3JiYXIp OworCisgICAgICAgIHByX2luZm8oIlBDSUNTUkJBUiBAIDB4JXhcbiIsIHBjaWNzcmJhcik7 CisKKyAgICAgICAgLyogU2V0dXAgaW5ib3VuZCBtZW0gd2luZG93ICovCisgICAgICAgIG1l bSA9IGxtYl9lbmRfb2ZfRFJBTSgpOworICAgICAgICBzeiA9IG1pbihtZW0sIHBhZGRyX2xv KTsKKyAgICAgICAgbWVtX2xvZyA9IF9faWxvZzJfdTY0KHN6KTsKKworICAgICAgICAvKiBQ Q0llIGNhbiBvdmVybWFwIGluYm91bmQgJiBvdXRib3VuZCBzaW5jZSBSWCAmIFRYIGFyZSBz ZXBhcmF0ZWQgKi8KKyAgICAgICAgaWYgKGVhcmx5X2ZpbmRfY2FwYWJpbGl0eShob3NlLCAw LCAwLCBQQ0lfQ0FQX0lEX0VYUCkpIHsKKyAgICAgICAgICAgICAgICAvKiBTaXplIHdpbmRv dyB0byBleGFjdCBzaXplIGlmIHBvd2VyLW9mLXR3byBvciBvbmUgc2l6ZSB1cCAqLworICAg ICAgICAgICAgICAgIGlmICgoMXVsbCA8PCBtZW1fbG9nKSAhPSBtZW0pIHsKKyAgICAgICAg ICAgICAgICAgICAgICAgIGlmICgoMXVsbCA8PCBtZW1fbG9nKSA+IG1lbSkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcHJfaW5mbygiU2V0dGluZyBQQ0kgaW5ib3VuZCB3 aW5kb3cgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJncmVh dGVyIHRoYW4gbWVtb3J5IHNpemVcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgbWVt X2xvZysrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHBpd2FyIHw9 IChtZW1fbG9nIC0gMSk7CisKKyAgICAgICAgICAgICAgICAvKiBTZXR1cCBpbmJvdW5kIG1l bW9yeSB3aW5kb3cgKi8KKyAgICAgICAgICAgICAgICBvdXRfYmUzMigmcGNpLT5waXdbd2lu X2lkeF0ucGl0YXIsICAweDAwMDAwMDAwKTsKKyAgICAgICAgICAgICAgICBvdXRfYmUzMigm cGNpLT5waXdbd2luX2lkeF0ucGl3YmFyLCAweDAwMDAwMDAwKTsKKyAgICAgICAgICAgICAg ICBvdXRfYmUzMigmcGNpLT5waXdbd2luX2lkeF0ucGl3YXIsICBwaXdhcik7CisgICAgICAg ICAgICAgICAgd2luX2lkeC0tOworCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg ICAgdTY0IHBhZGRyID0gMDsKKworICAgICAgICAgICAgICAgIC8qIFNldHVwIGluYm91bmQg bWVtb3J5IHdpbmRvdyAqLworICAgICAgICAgICAgICAgIG91dF9iZTMyKCZwY2ktPnBpd1t3 aW5faWR4XS5waXRhciwgIHBhZGRyID4+IDEyKTsKKyAgICAgICAgICAgICAgICBvdXRfYmUz MigmcGNpLT5waXdbd2luX2lkeF0ucGl3YmFyLCBwYWRkciA+PiAxMik7CisgICAgICAgICAg ICAgICAgb3V0X2JlMzIoJnBjaS0+cGl3W3dpbl9pZHhdLnBpd2FyLCAgKHBpd2FyIHwgKG1l bV9sb2cgLSAxKSkpOworICAgICAgICAgICAgICAgIHdpbl9pZHgtLTsKKworICAgICAgICAg ICAgICAgIHBhZGRyICs9IDF1bGwgPDwgbWVtX2xvZzsKKyAgICAgICAgICAgICAgICBzeiAt PSAxdWxsIDw8IG1lbV9sb2c7CisKKyAgICAgICAgICAgICAgICBpZiAoc3opIHsKKyAgICAg ICAgICAgICAgICAgICAgICAgIG1lbV9sb2cgPSBfX2lsb2cyX3U2NChzeik7CisgICAgICAg ICAgICAgICAgICAgICAgICBwaXdhciB8PSAobWVtX2xvZyAtIDEpOworCisgICAgICAgICAg ICAgICAgICAgICAgICBvdXRfYmUzMigmcGNpLT5waXdbd2luX2lkeF0ucGl0YXIsICBwYWRk ciA+PiAxMik7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXRfYmUzMigmcGNpLT5waXdb d2luX2lkeF0ucGl3YmFyLCBwYWRkciA+PiAxMik7CisgICAgICAgICAgICAgICAgICAgICAg ICBvdXRfYmUzMigmcGNpLT5waXdbd2luX2lkeF0ucGl3YXIsICBwaXdhcik7CisgICAgICAg ICAgICAgICAgICAgICAgICB3aW5faWR4LS07CisKKyAgICAgICAgICAgICAgICAgICAgICAg IHBhZGRyICs9IDF1bGwgPDwgbWVtX2xvZzsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg ICAgfQorCisvLyAgICAgICAgLyogU2V0dXAgMkcgaW5ib3VuZCBNZW1vcnkgV2luZG93IEAg MSAqLworLy8gICAgICAgIG91dF9iZTMyKCZwY2ktPnBpd1syXS5waXRhciwgMHgwMDAwMDAw MCk7CisvLyAgICAgICAgb3V0X2JlMzIoJnBjaS0+cGl3WzJdLnBpd2JhciwweDAwMDAwMDAw KTsKKy8vICAgICAgICBvdXRfYmUzMigmcGNpLT5waXdbMl0ucGl3YXIsIFBJV0FSXzJHKTsK KworCWlvdW5tYXAocGNpKTsKK30KKworI2Vsc2UKKwogc3RhdGljIGludCBfX2luaXQgc2V0 dXBfb25lX2F0bXUoc3RydWN0IGNjc3JfcGNpIF9faW9tZW0gKnBjaSwKIAl1bnNpZ25lZCBp bnQgaW5kZXgsIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqcmVzLAogCXJlc291cmNlX3NpemVf dCBvZmZzZXQpCkBAIC0xMjcsNiArMjc4LDcgQEAKIAogCWlvdW5tYXAocGNpKTsKIH0KKyNl bmRpZgogCiBzdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfcGNpX2NtZChzdHJ1Y3QgcGNpX2Nv bnRyb2xsZXIgKmhvc2UpCiB7CmRpZmYgLXUgLS1uZXctZmlsZSAtLXJlY3Vyc2l2ZSBsaW51 eC0yLjYuMjkuNi5vcmlnL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3BjaS5oIGxpbnV4LTIu Ni4yOS42Lm1vZC9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9wY2kuaAotLS0gbGludXgtMi42 LjI5LjYub3JpZy9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9wY2kuaAkyMDA5LTA3LTAyIDE2 OjQxOjIwLjAwMDAwMDAwMCAtMDcwMAorKysgbGludXgtMi42LjI5LjYubW9kL2FyY2gvcG93 ZXJwYy9zeXNkZXYvZnNsX3BjaS5oCTIwMDktMDctMjQgMTE6NTU6MDQuMDAwMDAwMDAwIC0w NzAwCkBAIC0xNyw2ICsxNywxMiBAQAogI2RlZmluZSBQQ0lFX0xUU1NNCTB4MDQwNAkJLyog UENJRSBMaW5rIFRyYWluaW5nIGFuZCBTdGF0dXMgKi8KICNkZWZpbmUgUENJRV9MVFNTTV9M MAkweDE2CQkvKiBMMCBzdGF0ZSAqLwogI2RlZmluZSBQSVdBUl8yRwkweGEwZjU1MDFlCS8q IEVuYWJsZSwgUHJlZmV0Y2gsIExvY2FsIE1lbSwgU25vb3AgUi9XLCAyRyAqLworI2RlZmlu ZSBQSVdBUl9FTiAgICAgICAgICAgICAgICAweDgwMDAwMDAwICAgICAgLyogRW5hYmxlICov CisjZGVmaW5lIFBJV0FSX1BGICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAgICAgICAvKiBw cmVmZXRjaCAqLworI2RlZmluZSBQSVdBUl9UR0lfTE9DQUwgICAgICAgICAweDAwZjAwMDAw ICAgICAgLyogdGFyZ2V0IC0gbG9jYWwgbWVtb3J5ICovCisjZGVmaW5lIFBJV0FSX1JFQURf U05PT1AgICAgICAgIDB4MDAwNTAwMDAKKyNkZWZpbmUgUElXQVJfV1JJVEVfU05PT1AgICAg ICAgMHgwMDAwNTAwMAorCiAKIC8qIFBDSS9QQ0kgRXhwcmVzcyBvdXRib3VuZCB3aW5kb3cg cmVnICovCiBzdHJ1Y3QgcGNpX291dGJvdW5kX3dpbmRvd19yZWdzIHsKZGlmZiAtdSAtLW5l dy1maWxlIC0tcmVjdXJzaXZlIGxpbnV4LTIuNi4yOS42Lm9yaWcvYXJjaC9wb3dlcnBjL3N5 c2Rldi9mc2xfc29jLmMgbGludXgtMi42LjI5LjYubW9kL2FyY2gvcG93ZXJwYy9zeXNkZXYv ZnNsX3NvYy5jCi0tLSBsaW51eC0yLjYuMjkuNi5vcmlnL2FyY2gvcG93ZXJwYy9zeXNkZXYv ZnNsX3NvYy5jCTIwMDktMDctMDIgMTY6NDE6MjAuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51 eC0yLjYuMjkuNi5tb2QvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfc29jLmMJMjAwOS0wNy0y MSAxMToyODoxNy4wMDAwMDAwMDAgLTA3MDAKQEAgLTU0MSw3ICs1NDEsNyBAQAogCQkJCQkJ InJlZ2lzdGVyIG5vdCBtYXBwZWQhXG4iKTsKIAkJfQogCX0gZWxzZQotCQlwcmludGsgKEtF Uk5fSU5GTyAicnN0Y3IgY29tcGF0aWJsZSByZWdpc3RlciBkb2VzIG5vdCBleGlzdCFcbiIp OworCQlwcmludGsgKEtFUk5fREVCVUcgInJzdGNyIGNvbXBhdGlibGUgcmVnaXN0ZXIgZG9l cyBub3QgZXhpc3QhXG4iKTsKIAlpZiAobnApCiAJCW9mX25vZGVfcHV0KG5wKTsKIAlyZXR1 cm4gMDsKZGlmZiAtdSAtLW5ldy1maWxlIC0tcmVjdXJzaXZlIGxpbnV4LTIuNi4yOS42Lm9y aWcvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmMgbGludXgtMi42LjI5LjYubW9kL2FyY2gv cG93ZXJwYy9zeXNkZXYvbXBpYy5jCi0tLSBsaW51eC0yLjYuMjkuNi5vcmlnL2FyY2gvcG93 ZXJwYy9zeXNkZXYvbXBpYy5jCTIwMDktMDctMDIgMTY6NDE6MjAuMDAwMDAwMDAwIC0wNzAw CisrKyBsaW51eC0yLjYuMjkuNi5tb2QvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmMJMjAw OS0wNy0yNCAxMTo1NDo0OC4wMDAwMDAwMDAgLTA3MDAKQEAgLTIzMCwxNCArMjMwLDE2IEBA CiB7CiAJdW5zaWduZWQgaW50CWlzdSA9IHNyY19ubyA+PiBtcGljLT5pc3Vfc2hpZnQ7CiAJ dW5zaWduZWQgaW50CWlkeCA9IHNyY19ubyAmIG1waWMtPmlzdV9tYXNrOworCXVuc2lnbmVk IGludAl2YWw7CiAKKwl2YWwgPSBfbXBpY19yZWFkKG1waWMtPnJlZ190eXBlLCAmbXBpYy0+ aXN1c1tpc3VdLAorCQkJCSAgcmVnICsgKGlkeCAqIE1QSUNfSU5GTyhJUlFfU1RSSURFKSkp OwogI2lmZGVmIENPTkZJR19NUElDX0JST0tFTl9SRUdSRUFECiAJaWYgKHJlZyA9PSAwKQot CQlyZXR1cm4gbXBpYy0+aXN1X3JlZzBfc2hhZG93W2lkeF07Ci0JZWxzZQorCQl2YWwgPSAo dmFsICYgKE1QSUNfVkVDUFJJX01BU0sgfCBNUElDX1ZFQ1BSSV9BQ1RJVklUWSkpIHwKKwkJ CW1waWMtPmlzdV9yZWcwX3NoYWRvd1tzcmNfbm9dOwogI2VuZGlmCi0JCXJldHVybiBfbXBp Y19yZWFkKG1waWMtPnJlZ190eXBlLCAmbXBpYy0+aXN1c1tpc3VdLAotCQkJCSAgcmVnICsg KGlkeCAqIE1QSUNfSU5GTyhJUlFfU1RSSURFKSkpOworCXJldHVybiB2YWw7CiB9CiAKIHN0 YXRpYyBpbmxpbmUgdm9pZCBfbXBpY19pcnFfd3JpdGUoc3RydWN0IG1waWMgKm1waWMsIHVu c2lnbmVkIGludCBzcmNfbm8sCkBAIC0yNTEsNyArMjUzLDggQEAKIAogI2lmZGVmIENPTkZJ R19NUElDX0JST0tFTl9SRUdSRUFECiAJaWYgKHJlZyA9PSAwKQotCQltcGljLT5pc3VfcmVn MF9zaGFkb3dbaWR4XSA9IHZhbHVlOworCQltcGljLT5pc3VfcmVnMF9zaGFkb3dbc3JjX25v XSA9CisJCQl2YWx1ZSAmIH4oTVBJQ19WRUNQUklfTUFTSyB8IE1QSUNfVkVDUFJJX0FDVElW SVRZKTsKICNlbmRpZgogfQogCmRpZmYgLXUgLS1uZXctZmlsZSAtLXJlY3Vyc2l2ZSBsaW51 eC0yLjYuMjkuNi5vcmlnL0NSRURJVFMgbGludXgtMi42LjI5LjYubW9kL0NSRURJVFMKLS0t IGxpbnV4LTIuNi4yOS42Lm9yaWcvQ1JFRElUUwkyMDA5LTA3LTAyIDE2OjQxOjIwLjAwMDAw MDAwMCAtMDcwMAorKysgbGludXgtMi42LjI5LjYubW9kL0NSRURJVFMJMjAwOS0wNy0yMSAx MToyODoxOC4wMDAwMDAwMDAgLTA3MDAKQEAgLTI4MTgsNiArMjgxOCwxNyBAQAogRTogZnBv dHRlckBjaXJwYWNrLmNvbQogRDogU29tZSBQQ0kga2VybmVsIHN1cHBvcnQKIAorTjogQWpp dCBQcmVtCitFOiBhaml0LnByZW1AZW1lcnNvbi5jb20KK0Q6IEFkZGVkIHN1cHBvcnQgZm9y IHRoZSBNVk1FNDEwMAorRDogQWRkZWQgc3VwcG9ydCBmb3IgdGhlIE1WTUU3MTAwCitEOiBB ZGRlZCBzdXBwb3J0IGZvciB0aGUgTVZNRTMxMDAKK0Q6IEFkZGVkIHN1cHBvcnQgZm9yIHRo ZSBDUENJNjIwMAorRDogTWlzY2VsbGFuZW91cyBtb2RzIHRvIHN1cHBvcnQgdGhlIGJvYXJk cyBhYm92ZQorUzogMjkwMCBTb3V0aCBEaWFibG8gV2F5LCBEVzI3OAorUzogVGVtcGUsIEFy aXpvbmEgIDg1MjgyCitTOiBVU0EKKwogTjogUnVpIFByaW9yCiBFOiBycHJpb3JAaW5lc2Nu LnB0CiBEOiBBVE0gZGV2aWNlIGRyaXZlciBmb3IgTklDU3RBUiBiYXNlZCBjYXJkcwpkaWZm IC11IC0tbmV3LWZpbGUgLS1yZWN1cnNpdmUgbGludXgtMi42LjI5LjYub3JpZy9kcml2ZXJz L2NoYXIvaXBtaS9pcG1pX2RldmludGYuYyBsaW51eC0yLjYuMjkuNi5tb2QvZHJpdmVycy9j aGFyL2lwbWkvaXBtaV9kZXZpbnRmLmMKLS0tIGxpbnV4LTIuNi4yOS42Lm9yaWcvZHJpdmVy cy9jaGFyL2lwbWkvaXBtaV9kZXZpbnRmLmMJMjAwOS0wNy0wMiAxNjo0MToyMC4wMDAwMDAw MDAgLTA3MDAKKysrIGxpbnV4LTIuNi4yOS42Lm1vZC9kcml2ZXJzL2NoYXIvaXBtaS9pcG1p X2RldmludGYuYwkyMDA5LTA3LTIxIDExOjI4OjE4LjAwMDAwMDAwMCAtMDcwMApAQCAtMTYy LDYgKzE2Miw4IEBACiAJaWYgKHJ2KQogCQlyZXR1cm4gcnY7CiAKKwlpcG1pX2Zhc3luYyAo LTEsIGZpbGUsIDApOworCiAJLyogRklYTUUgLSBmcmVlIHRoZSBtZXNzYWdlcyBpbiB0aGUg bGlzdC4gKi8KIAlrZnJlZShwcml2KTsKIApkaWZmIC11IC0tbmV3LWZpbGUgLS1yZWN1cnNp dmUgbGludXgtMi42LjI5LjYub3JpZy9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX21zZ2hhbmRs ZXIuYyBsaW51eC0yLjYuMjkuNi5tb2QvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5k bGVyLmMKLS0tIGxpbnV4LTIuNi4yOS42Lm9yaWcvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9t c2doYW5kbGVyLmMJMjAwOS0wNy0wMiAxNjo0MToyMC4wMDAwMDAwMDAgLTA3MDAKKysrIGxp bnV4LTIuNi4yOS42Lm1vZC9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX21zZ2hhbmRsZXIuYwky MDA5LTA5LTAyIDEwOjMzOjI1LjAwMDAwMDAwMCAtMDcwMApAQCAtNDksNyArNDksNiBAQAog CiAjZGVmaW5lIElQTUlfRFJJVkVSX1ZFUlNJT04gIjM5LjIiCiAKLXN0YXRpYyBzdHJ1Y3Qg aXBtaV9yZWN2X21zZyAqaXBtaV9hbGxvY19yZWN2X21zZyh2b2lkKTsKIHN0YXRpYyBpbnQg aXBtaV9pbml0X21zZ2hhbmRsZXIodm9pZCk7CiAKIHN0YXRpYyBpbnQgaW5pdGlhbGl6ZWQ7 CkBAIC0yODUsNiArMjg0LDExIEBACiAJLyogRXZlbnRzIHRoYXQgd2VyZSByZWNlaXZlZCB3 aXRoIHRoZSBwcm9wZXIgZm9ybWF0LiAqLwogCUlQTUlfU1RBVF9ldmVudHMsCiAKKwkvKiBS ZXRyYW5zbWlzc2lvbnMgb24gSVBNQiB0aGF0IGZhaWxlZC4gKi8KKwlJUE1JX1NUQVRfZHJv cHBlZF9yZXhtaXRfaXBtYl9jb21tYW5kcywKKworCS8qIFJldHJhbnNtaXNzaW9ucyBvbiBM QU4gdGhhdCBmYWlsZWQuICovCisJSVBNSV9TVEFUX2Ryb3BwZWRfcmV4bWl0X2xhbl9jb21t YW5kcywKIAogCS8qIFRoaXMgKm11c3QqIHJlbWFpbiBsYXN0LCBhZGQgbmV3IHZhbHVlcyBh Ym92ZSB0aGlzLiAqLwogCUlQTUlfTlVNX1NUQVRTCkBAIC0zNzMsNiArMzc3LDE0IEBACiAJ Y2hhciAgICAgICAgICAgICBldmVudF9tc2dfcHJpbnRlZDsKIAogCS8qCisJICogVGhpcyB3 aWxsIGJlIG5vbi1udWxsIGlmIHNvbWVvbmUgcmVnaXN0ZXJzIHRvIHJlY2VpdmUgYWxsCisJ ICogSVBNSSBjb21tYW5kcyAodGhpcyBpcyBmb3IgaW50ZXJmYWNlIGVtdWxhdGlvbikuICBU aGVyZQorCSAqIG1heSBub3QgYmUgYW55IHRoaW5ncyBpbiB0aGUgY21kX3JjdnJzIGxpc3Qg YWJvdmUgd2hlbgorCSAqIHRoaXMgaXMgcmVnaXN0ZXJlZC4KKwkgKi8KKwl2b2xhdGlsZSBp cG1pX3VzZXJfdCBhbGxfY21kX3JjdnI7CisKKwkvKgogCSAqIFRoZSBldmVudCByZWNlaXZl ciBmb3IgbXkgQk1DLCBvbmx5IHJlYWxseSB1c2VkIGF0IHBhbmljCiAJICogc2h1dGRvd24g YXMgYSBwbGFjZSB0byBzdG9yZSB0aGlzLgogCSAqLwpAQCAtNDQ1LDYgKzQ1NywyMCBAQAog I2RlZmluZSBpcG1pX2dldF9zdGF0KGludGYsIHN0YXQpIFwKIAkoKHVuc2lnbmVkIGludCkg YXRvbWljX3JlYWQoJihpbnRmKS0+c3RhdHNbSVBNSV9TVEFUXyAjIyBzdGF0XSkpCiAKK3N0 YXRpYyBpbnQgaXNfbGFuX2FkZHIoc3RydWN0IGlwbWlfYWRkciAqYWRkcikKK3sKKwlyZXR1 cm4gYWRkci0+YWRkcl90eXBlID09IElQTUlfTEFOX0FERFJfVFlQRTsKK30KKworc3RhdGlj IGludCBpc19pcG1iX2FkZHIoc3RydWN0IGlwbWlfYWRkciAqYWRkcikKK3sKKwlyZXR1cm4g YWRkci0+YWRkcl90eXBlID09IElQTUlfSVBNQl9BRERSX1RZUEU7Cit9CisKK3N0YXRpYyBp bnQgaXNfaXBtYl9iY2FzdF9hZGRyKHN0cnVjdCBpcG1pX2FkZHIgKmFkZHIpCit7CisJcmV0 dXJuIGFkZHItPmFkZHJfdHlwZSA9PSBJUE1JX0lQTUJfQlJPQURDQVNUX0FERFJfVFlQRTsK K30KIAogc3RhdGljIHZvaWQgZnJlZV9yZWN2X21zZ19saXN0KHN0cnVjdCBsaXN0X2hlYWQg KnEpCiB7CkBAIC01ODQsNyArNjEwLDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQKK2ludAog aXBtaV9hZGRyX2VxdWFsKHN0cnVjdCBpcG1pX2FkZHIgKmFkZHIxLCBzdHJ1Y3QgaXBtaV9h ZGRyICphZGRyMikKIHsKIAlpZiAoYWRkcjEtPmFkZHJfdHlwZSAhPSBhZGRyMi0+YWRkcl90 eXBlKQpAQCAtNjAxLDggKzYyNyw3IEBACiAJCXJldHVybiAoc21pX2FkZHIxLT5sdW4gPT0g c21pX2FkZHIyLT5sdW4pOwogCX0KIAotCWlmICgoYWRkcjEtPmFkZHJfdHlwZSA9PSBJUE1J X0lQTUJfQUREUl9UWVBFKQotCSAgICB8fCAoYWRkcjEtPmFkZHJfdHlwZSA9PSBJUE1JX0lQ TUJfQlJPQURDQVNUX0FERFJfVFlQRSkpIHsKKwlpZiAoaXNfaXBtYl9hZGRyKGFkZHIxKSB8 fCBpc19pcG1iX2JjYXN0X2FkZHIoYWRkcjEpKSB7CiAJCXN0cnVjdCBpcG1pX2lwbWJfYWRk ciAqaXBtYl9hZGRyMQogCQkgICAgPSAoc3RydWN0IGlwbWlfaXBtYl9hZGRyICopIGFkZHIx OwogCQlzdHJ1Y3QgaXBtaV9pcG1iX2FkZHIgKmlwbWJfYWRkcjIKQEAgLTYxMiw3ICs2Mzcs NyBAQAogCQkJJiYgKGlwbWJfYWRkcjEtPmx1biA9PSBpcG1iX2FkZHIyLT5sdW4pKTsKIAl9 CiAKLQlpZiAoYWRkcjEtPmFkZHJfdHlwZSA9PSBJUE1JX0xBTl9BRERSX1RZUEUpIHsKKwlp ZiAoaXNfbGFuX2FkZHIoYWRkcjEpKSB7CiAJCXN0cnVjdCBpcG1pX2xhbl9hZGRyICpsYW5f YWRkcjEKIAkJCT0gKHN0cnVjdCBpcG1pX2xhbl9hZGRyICopIGFkZHIxOwogCQlzdHJ1Y3Qg aXBtaV9sYW5fYWRkciAqbGFuX2FkZHIyCkBAIC02MjcsNiArNjUyLDcgQEAKIAogCXJldHVy biAxOwogfQorRVhQT1JUX1NZTUJPTChpcG1pX2FkZHJfZXF1YWwpOwogCiBpbnQgaXBtaV92 YWxpZGF0ZV9hZGRyKHN0cnVjdCBpcG1pX2FkZHIgKmFkZHIsIGludCBsZW4pCiB7CkBAIC02 NDQsMTQgKzY3MCwxMyBAQAogCSAgICB8fCAoYWRkci0+Y2hhbm5lbCA8IDApKQogCQlyZXR1 cm4gLUVJTlZBTDsKIAotCWlmICgoYWRkci0+YWRkcl90eXBlID09IElQTUlfSVBNQl9BRERS X1RZUEUpCi0JICAgIHx8IChhZGRyLT5hZGRyX3R5cGUgPT0gSVBNSV9JUE1CX0JST0FEQ0FT VF9BRERSX1RZUEUpKSB7CisJaWYgKGlzX2lwbWJfYWRkcihhZGRyKSB8fCBpc19pcG1iX2Jj YXN0X2FkZHIoYWRkcikpIHsKIAkJaWYgKGxlbiA8IHNpemVvZihzdHJ1Y3QgaXBtaV9pcG1i X2FkZHIpKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCXJldHVybiAwOwogCX0KIAotCWlmIChh ZGRyLT5hZGRyX3R5cGUgPT0gSVBNSV9MQU5fQUREUl9UWVBFKSB7CisJaWYgKGlzX2xhbl9h ZGRyKGFkZHIpKSB7CiAJCWlmIChsZW4gPCBzaXplb2Yoc3RydWN0IGlwbWlfbGFuX2FkZHIp KQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCXJldHVybiAwOwpAQCAtOTg4LDYgKzEwMTMsOCBA QAogCSAqIHN5bmNocm9uaXplX3JjdSgpKSB0aGVuIGZyZWUgZXZlcnl0aGluZyBpbiB0aGF0 IGxpc3QuCiAJICovCiAJbXV0ZXhfbG9jaygmaW50Zi0+Y21kX3JjdnJzX211dGV4KTsKKwlp ZiAoaW50Zi0+YWxsX2NtZF9yY3ZyID09IHVzZXIpCisJCWludGYtPmFsbF9jbWRfcmN2ciA9 IE5VTEw7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocmN2ciwgJmludGYtPmNtZF9yY3Zy cywgbGluaykgewogCQlpZiAocmN2ci0+dXNlciA9PSB1c2VyKSB7CiAJCQlsaXN0X2RlbF9y Y3UoJnJjdnItPmxpbmspOwpAQCAtMTIzMCw2ICsxMjU3LDEwIEBACiAJcmN2ci0+dXNlciA9 IHVzZXI7CiAKIAltdXRleF9sb2NrKCZpbnRmLT5jbWRfcmN2cnNfbXV0ZXgpOworCWlmICh1 c2VyLT5pbnRmLT5hbGxfY21kX3JjdnIgIT0gTlVMTCkgeworCQlydiA9IC1FQlVTWTsKKwkJ Z290byBvdXRfdW5sb2NrOworCX0KIAkvKiBNYWtlIHN1cmUgdGhlIGNvbW1hbmQvbmV0Zm4g aXMgbm90IGFscmVhZHkgcmVnaXN0ZXJlZC4gKi8KIAlpZiAoIWlzX2NtZF9yY3ZyX2V4Y2x1 c2l2ZShpbnRmLCBuZXRmbiwgY21kLCBjaGFucykpIHsKIAkJcnYgPSAtRUJVU1k7CkBAIC0x NTAzLDggKzE1MzQsNyBAQAogCQkJbWVtY3B5KCYoc21pX21zZy0+ZGF0YVsyXSksIG1zZy0+ ZGF0YSwgbXNnLT5kYXRhX2xlbik7CiAJCXNtaV9tc2ctPmRhdGFfc2l6ZSA9IG1zZy0+ZGF0 YV9sZW4gKyAyOwogCQlpcG1pX2luY19zdGF0KGludGYsIHNlbnRfbG9jYWxfY29tbWFuZHMp OwotCX0gZWxzZSBpZiAoKGFkZHItPmFkZHJfdHlwZSA9PSBJUE1JX0lQTUJfQUREUl9UWVBF KQotCQkgICB8fCAoYWRkci0+YWRkcl90eXBlID09IElQTUlfSVBNQl9CUk9BRENBU1RfQURE Ul9UWVBFKSkgeworCX0gZWxzZSBpZiAoaXNfaXBtYl9hZGRyKGFkZHIpIHx8IGlzX2lwbWJf YmNhc3RfYWRkcihhZGRyKSkgewogCQlzdHJ1Y3QgaXBtaV9pcG1iX2FkZHIgKmlwbWJfYWRk cjsKIAkJdW5zaWduZWQgY2hhciAgICAgICAgIGlwbWJfc2VxOwogCQlsb25nICAgICAgICAg ICAgICAgICAgc2VxaWQ7CkBAIC0xNTgzLDggKzE2MTMsNiBAQAogCiAJCQlzcGluX2xvY2tf aXJxc2F2ZSgmKGludGYtPnNlcV9sb2NrKSwgZmxhZ3MpOwogCi0JCQlpcG1pX2luY19zdGF0 KGludGYsIHNlbnRfaXBtYl9jb21tYW5kcyk7Ci0KIAkJCS8qCiAJCQkgKiBDcmVhdGUgYSBz ZXF1ZW5jZSBudW1iZXIgd2l0aCBhIDEgc2Vjb25kCiAJCQkgKiB0aW1lb3V0IGFuZCA0IHJl dHJpZXMuCkBAIC0xNjA2LDYgKzE2MzQsOCBAQAogCQkJCWdvdG8gb3V0X2VycjsKIAkJCX0K IAorCQkJaXBtaV9pbmNfc3RhdChpbnRmLCBzZW50X2lwbWJfY29tbWFuZHMpOworCiAJCQkv KgogCQkJICogU3RvcmUgdGhlIHNlcXVlbmNlIG51bWJlciBpbiB0aGUgbWVzc2FnZSwKIAkJ CSAqIHNvIHRoYXQgd2hlbiB0aGUgc2VuZCBtZXNzYWdlIHJlc3BvbnNlCkBAIC0xNjM1LDcg KzE2NjUsNyBAQAogCQkJICovCiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCYoaW50Zi0+ c2VxX2xvY2spLCBmbGFncyk7CiAJCX0KLQl9IGVsc2UgaWYgKGFkZHItPmFkZHJfdHlwZSA9 PSBJUE1JX0xBTl9BRERSX1RZUEUpIHsKKwl9IGVsc2UgaWYgKGlzX2xhbl9hZGRyKGFkZHIp KSB7CiAJCXN0cnVjdCBpcG1pX2xhbl9hZGRyICAqbGFuX2FkZHI7CiAJCXVuc2lnbmVkIGNo YXIgICAgICAgICBpcG1iX3NlcTsKIAkJbG9uZyAgICAgICAgICAgICAgICAgIHNlcWlkOwpA QCAtMTY5Niw4ICsxNzI2LDYgQEAKIAogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJihpbnRmLT5z ZXFfbG9jayksIGZsYWdzKTsKIAotCQkJaXBtaV9pbmNfc3RhdChpbnRmLCBzZW50X2xhbl9j b21tYW5kcyk7Ci0KIAkJCS8qCiAJCQkgKiBDcmVhdGUgYSBzZXF1ZW5jZSBudW1iZXIgd2l0 aCBhIDEgc2Vjb25kCiAJCQkgKiB0aW1lb3V0IGFuZCA0IHJldHJpZXMuCkBAIC0xNzE5LDYg KzE3NDcsOCBAQAogCQkJCWdvdG8gb3V0X2VycjsKIAkJCX0KIAorCQkJaXBtaV9pbmNfc3Rh dChpbnRmLCBzZW50X2xhbl9jb21tYW5kcyk7CisKIAkJCS8qCiAJCQkgKiBTdG9yZSB0aGUg c2VxdWVuY2UgbnVtYmVyIGluIHRoZSBtZXNzYWdlLAogCQkJICogc28gdGhhdCB3aGVuIHRo ZSBzZW5kIG1lc3NhZ2UgcmVzcG9uc2UKQEAgLTE5MzcsNiArMTk2NywxMCBAQAogCQkgICAg ICAgaXBtaV9nZXRfc3RhdChpbnRmLCBpbnZhbGlkX2V2ZW50cykpOwogCW91dCArPSBzcHJp bnRmKG91dCwgImV2ZW50czogICAgICAgICAgICAgICAgICAgICAgJXVcbiIsCiAJCSAgICAg ICBpcG1pX2dldF9zdGF0KGludGYsIGV2ZW50cykpOworCW91dCArPSBzcHJpbnRmKG91dCwg ImZhaWxlZCByZXhtaXQgTEFOIG1zZ3M6ICAgICAgJXVcbiIsCisJCSAgICAgICBpcG1pX2dl dF9zdGF0KGludGYsIGRyb3BwZWRfcmV4bWl0X2xhbl9jb21tYW5kcykpOworCW91dCArPSBz cHJpbnRmKG91dCwgImZhaWxlZCByZXhtaXQgSVBNQiBtc2dzOiAgICAgJXVcbiIsCisJCSAg ICAgICBpcG1pX2dldF9zdGF0KGludGYsIGRyb3BwZWRfcmV4bWl0X2lwbWJfY29tbWFuZHMp KTsKIAogCXJldHVybiAob3V0IC0gKChjaGFyICopIHBhZ2UpKTsKIH0KQEAgLTI3OTEsNiAr MjgyNSw3IEBACiAJaW5pdF93YWl0cXVldWVfaGVhZCgmaW50Zi0+d2FpdHEpOwogCWZvciAo aSA9IDA7IGkgPCBJUE1JX05VTV9TVEFUUzsgaSsrKQogCQlhdG9taWNfc2V0KCZpbnRmLT5z dGF0c1tpXSwgMCk7CisJaW50Zi0+YWxsX2NtZF9yY3ZyID0gTlVMTDsKIAogCWludGYtPnBy b2NfZGlyID0gTlVMTDsKIApAQCAtMjgzOSw2ICsyODc0LDcgQEAKIAkJLyogQXNzdW1lIGEg c2luZ2xlIElQTUIgY2hhbm5lbCBhdCB6ZXJvLiAqLwogCQlpbnRmLT5jaGFubmVsc1swXS5t ZWRpdW0gPSBJUE1JX0NIQU5ORUxfTUVESVVNX0lQTUI7CiAJCWludGYtPmNoYW5uZWxzWzBd LnByb3RvY29sID0gSVBNSV9DSEFOTkVMX1BST1RPQ09MX0lQTUI7CisJCWludGYtPmN1cnJf Y2hhbm5lbCA9IElQTUlfTUFYX0NIQU5ORUxTOwogCX0KIAogCWlmIChydiA9PSAwKQpAQCAt MzAxMiwxMiArMzA0OCwxNSBAQAogCWNoYW4gPSBtc2ctPnJzcFszXSAmIDB4ZjsKIAogCXJj dV9yZWFkX2xvY2soKTsKLQlyY3ZyID0gZmluZF9jbWRfcmN2cihpbnRmLCBuZXRmbiwgY21k LCBjaGFuKTsKLQlpZiAocmN2cikgewotCQl1c2VyID0gcmN2ci0+dXNlcjsKLQkJa3JlZl9n ZXQoJnVzZXItPnJlZmNvdW50KTsKLQl9IGVsc2UKLQkJdXNlciA9IE5VTEw7CisJdXNlciA9 IGludGYtPmFsbF9jbWRfcmN2cjsKKwlpZiAoIXVzZXIpIHsKKwkJcmN2ciA9IGZpbmRfY21k X3JjdnIoaW50ZiwgbmV0Zm4sIGNtZCwgY2hhbik7CisJCWlmIChyY3ZyKSB7CisJCQl1c2Vy ID0gcmN2ci0+dXNlcjsKKwkJCWtyZWZfZ2V0KCZ1c2VyLT5yZWZjb3VudCk7CisJCX0gZWxz ZQorCQkJdXNlciA9IE5VTEw7CisJfQogCXJjdV9yZWFkX3VubG9jaygpOwogCiAJaWYgKHVz ZXIgPT0gTlVMTCkgewpAQCAtMzIwMSwxMiArMzI0MCwxNSBAQAogCWNoYW4gPSBtc2ctPnJz cFszXSAmIDB4ZjsKIAogCXJjdV9yZWFkX2xvY2soKTsKLQlyY3ZyID0gZmluZF9jbWRfcmN2 cihpbnRmLCBuZXRmbiwgY21kLCBjaGFuKTsKLQlpZiAocmN2cikgewotCQl1c2VyID0gcmN2 ci0+dXNlcjsKLQkJa3JlZl9nZXQoJnVzZXItPnJlZmNvdW50KTsKLQl9IGVsc2UKLQkJdXNl ciA9IE5VTEw7CisJdXNlciA9IGludGYtPmFsbF9jbWRfcmN2cjsKKwlpZiAoIXVzZXIpIHsK KwkJcmN2ciA9IGZpbmRfY21kX3JjdnIoaW50ZiwgbmV0Zm4sIGNtZCwgY2hhbik7CisJCWlm IChyY3ZyKSB7CisJCQl1c2VyID0gcmN2ci0+dXNlcjsKKwkJCWtyZWZfZ2V0KCZ1c2VyLT5y ZWZjb3VudCk7CisJCX0gZWxzZQorCQkJdXNlciA9IE5VTEw7CisJfQogCXJjdV9yZWFkX3Vu bG9jaygpOwogCiAJaWYgKHVzZXIgPT0gTlVMTCkgewpAQCAtMzI2Nyw2ICszMzA5LDExNCBA QAogCXJldHVybiBydjsKIH0KIAorLyoKKyAqIFRoaXMgcm91dGluZSB3aWxsIGhhbmRsZSAi R2V0IE1lc3NhZ2UiIGNvbW1hbmQgcmVzcG9uc2VzIHdpdGgKKyAqIGNoYW5uZWxzIHRoYXQg dXNlIGFuIE9FTSBNZWRpdW0uIFRoZSBtZXNzYWdlIGZvcm1hdCBiZWxvbmdzIHRvCisgKiB0 aGUgT0VNLiAgU2VlIElQTUkgMi4wIHNwZWNpZmljYXRpb24sIENoYXB0ZXIgNiBhbmQKKyAq IENoYXB0ZXIgMjIsIHNlY3Rpb25zIDIyLjYgYW5kIDIyLjI0IGZvciBtb3JlIGRldGFpbHMu CisgKi8KK3N0YXRpYyBpbnQgaGFuZGxlX29lbV9nZXRfbXNnX2NtZChpcG1pX3NtaV90ICAg ICAgICAgIGludGYsCisJCQkJICBzdHJ1Y3QgaXBtaV9zbWlfbXNnICptc2cpCit7CisJc3Ry dWN0IGNtZF9yY3ZyICAgICAgICpyY3ZyOworCWludCAgICAgICAgICAgICAgICAgICBydiA9 IDA7CisJdW5zaWduZWQgY2hhciAgICAgICAgIG5ldGZuOworCXVuc2lnbmVkIGNoYXIgICAg ICAgICBjbWQ7CisJdW5zaWduZWQgY2hhciAgICAgICAgIGNoYW47CisJaXBtaV91c2VyX3Qg ICAgICAgICAgIHVzZXIgPSBOVUxMOworCXN0cnVjdCBpcG1pX3N5c3RlbV9pbnRlcmZhY2Vf YWRkciAqc21pX2FkZHI7CisJc3RydWN0IGlwbWlfcmVjdl9tc2cgICpyZWN2X21zZzsKKwor CS8qCisJICogV2UgZXhwZWN0IHRoZSBPRU0gU1cgdG8gcGVyZm9ybSBlcnJvciBjaGVja2lu ZworCSAqIHNvIHdlIGp1c3QgZG8gc29tZSBiYXNpYyBzYW5pdHkgY2hlY2tzCisJICovCisJ aWYgKG1zZy0+cnNwX3NpemUgPCA0KSB7CisJCS8qIE1lc3NhZ2Ugbm90IGJpZyBlbm91Z2gs IGp1c3QgaWdub3JlIGl0LiAqLworCQlpcG1pX2luY19zdGF0KGludGYsIGludmFsaWRfY29t bWFuZHMpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAobXNnLT5yc3BbMl0gIT0gMCkgewor CQkvKiBBbiBlcnJvciBnZXR0aW5nIHRoZSByZXNwb25zZSwganVzdCBpZ25vcmUgaXQuICov CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogVGhpcyBpcyBhbiBPRU0gTWVzc2FnZSBz byB0aGUgT0VNIG5lZWRzIHRvIGtub3cgaG93CisJICogaGFuZGxlIHRoZSBtZXNzYWdlLiBX ZSBkbyBubyBpbnRlcnByZXRhdGlvbi4KKwkgKi8KKwluZXRmbiA9IG1zZy0+cnNwWzBdID4+ IDI7CisJY21kID0gbXNnLT5yc3BbMV07CisJY2hhbiA9IG1zZy0+cnNwWzNdICYgMHhmOwor CisJcmN1X3JlYWRfbG9jaygpOworCXJjdnIgPSBmaW5kX2NtZF9yY3ZyKGludGYsIG5ldGZu LCBjbWQsIGNoYW4pOworCWlmIChyY3ZyKSB7CisJCXVzZXIgPSByY3ZyLT51c2VyOworCQlr cmVmX2dldCgmdXNlci0+cmVmY291bnQpOworCX0gZWxzZQorCQl1c2VyID0gTlVMTDsKKwly Y3VfcmVhZF91bmxvY2soKTsKKworCWlmICh1c2VyID09IE5VTEwpIHsKKwkJLyogV2UgZGlk bid0IGZpbmQgYSB1c2VyLCBqdXN0IGdpdmUgdXAuICovCisJCWlwbWlfaW5jX3N0YXQoaW50 ZiwgdW5oYW5kbGVkX2NvbW1hbmRzKTsKKworCQkvKgorCQkgKiBEb24ndCBkbyBhbnl0aGlu ZyB3aXRoIHRoZXNlIG1lc3NhZ2VzLCBqdXN0IGFsbG93CisJCSAqIHRoZW0gdG8gYmUgZnJl ZWQuCisJCSAqLworCisJCXJ2ID0gMDsKKwl9IGVsc2UgeworCQkvKiBEZWxpdmVyIHRoZSBt ZXNzYWdlIHRvIHRoZSB1c2VyLiAqLworCQlpcG1pX2luY19zdGF0KGludGYsIGhhbmRsZWRf Y29tbWFuZHMpOworCisJCXJlY3ZfbXNnID0gaXBtaV9hbGxvY19yZWN2X21zZygpOworCQlp ZiAoIXJlY3ZfbXNnKSB7CisJCQkvKgorCQkJICogV2UgY291bGRuJ3QgYWxsb2NhdGUgbWVt b3J5IGZvciB0aGUKKwkJCSAqIG1lc3NhZ2UsIHNvIHJlcXVldWUgaXQgZm9yIGhhbmRsaW5n CisJCQkgKiBsYXRlci4KKwkJCSAqLworCQkJcnYgPSAxOworCQkJa3JlZl9wdXQoJnVzZXIt PnJlZmNvdW50LCBmcmVlX3VzZXIpOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIE9FTSBN ZXNzYWdlcyBhcmUgZXhwZWN0ZWQgdG8gYmUgZGVsaXZlcmVkIHZpYQorCQkJICogdGhlIHN5 c3RlbSBpbnRlcmZhY2UgdG8gU01TIHNvZnR3YXJlLiAgV2UgbWlnaHQKKwkJCSAqIG5lZWQg dG8gdmlzaXQgdGhpcyBhZ2FpbiBkZXBlbmRpbmcgb24gT0VNCisJCQkgKiByZXF1aXJlbWVu dHMKKwkJCSAqLworCQkJc21pX2FkZHIgPSAoKHN0cnVjdCBpcG1pX3N5c3RlbV9pbnRlcmZh Y2VfYWRkciAqKQorCQkJCSAgICAmKHJlY3ZfbXNnLT5hZGRyKSk7CisJCQlzbWlfYWRkci0+ YWRkcl90eXBlID0gSVBNSV9TWVNURU1fSU5URVJGQUNFX0FERFJfVFlQRTsKKwkJCXNtaV9h ZGRyLT5jaGFubmVsID0gSVBNSV9CTUNfQ0hBTk5FTDsKKwkJCXNtaV9hZGRyLT5sdW4gPSBt c2ctPnJzcFswXSAmIDM7CisKKwkJCXJlY3ZfbXNnLT51c2VyID0gdXNlcjsKKwkJCXJlY3Zf bXNnLT51c2VyX21zZ19kYXRhID0gTlVMTDsKKwkJCXJlY3ZfbXNnLT5yZWN2X3R5cGUgPSBJ UE1JX09FTV9SRUNWX1RZUEU7CisJCQlyZWN2X21zZy0+bXNnLm5ldGZuID0gbXNnLT5yc3Bb MF0gPj4gMjsKKwkJCXJlY3ZfbXNnLT5tc2cuY21kID0gbXNnLT5yc3BbMV07CisJCQlyZWN2 X21zZy0+bXNnLmRhdGEgPSByZWN2X21zZy0+bXNnX2RhdGE7CisKKwkJCS8qCisJCQkgKiBU aGUgbWVzc2FnZSBzdGFydHMgYXQgYnl0ZSA0IHdoaWNoIGZvbGxvd3MgdGhlCisJCQkgKiB0 aGUgQ2hhbm5lbCBCeXRlIGluIHRoZSAiR0VUIE1FU1NBR0UiIGNvbW1hbmQKKwkJCSAqLwor CQkJcmVjdl9tc2ctPm1zZy5kYXRhX2xlbiA9IG1zZy0+cnNwX3NpemUgLSA0OworCQkJbWVt Y3B5KHJlY3ZfbXNnLT5tc2dfZGF0YSwKKwkJCSAgICAgICAmKG1zZy0+cnNwWzRdKSwKKwkJ CSAgICAgICBtc2ctPnJzcF9zaXplIC0gNCk7CisJCQlkZWxpdmVyX3Jlc3BvbnNlKHJlY3Zf bXNnKTsKKwkJfQorCX0KKworCXJldHVybiBydjsKK30KKwogc3RhdGljIHZvaWQgY29weV9l dmVudF9pbnRvX3JlY3ZfbXNnKHN0cnVjdCBpcG1pX3JlY3ZfbXNnICpyZWN2X21zZywKIAkJ CQkgICAgIHN0cnVjdCBpcG1pX3NtaV9tc2cgICptc2cpCiB7CkBAIC0zNTIyLDYgKzM2NzIs MTcgQEAKIAkJCWdvdG8gb3V0OwogCQl9CiAKKwkJLyoKKwkJKiogV2UgbmVlZCB0byBtYWtl IHN1cmUgdGhlIGNoYW5uZWxzIGhhdmUgYmVlbiBpbml0aWFsaXplZC4KKwkJKiogVGhlIGNo YW5uZWxfaGFuZGxlciByb3V0aW5lIHdpbGwgc2V0IHRoZSAiY3Vycl9jaGFubmVsIgorCQkq KiBlcXVhbCB0byBvciBncmVhdGVyIHRoYW4gSVBNSV9NQVhfQ0hBTk5FTFMgd2hlbiBhbGwg dGhlCisJCSoqIGNoYW5uZWxzIGZvciB0aGlzIGludGVyZmFjZSBoYXZlIGJlZW4gaW5pdGlh bGl6ZWQuCisJCSovCisJCWlmIChpbnRmLT5jdXJyX2NoYW5uZWwgPCBJUE1JX01BWF9DSEFO TkVMUykgeworCQkJcmVxdWV1ZSA9IDA7ICAgICAvKiBKdXN0IHRocm93IHRoZSBtZXNzYWdl IGF3YXkgKi8KKwkJCWdvdG8gb3V0OworCQl9CisKIAkJc3dpdGNoIChpbnRmLT5jaGFubmVs c1tjaGFuXS5tZWRpdW0pIHsKIAkJY2FzZSBJUE1JX0NIQU5ORUxfTUVESVVNX0lQTUI6CiAJ CQlpZiAobXNnLT5yc3BbNF0gJiAweDA0KSB7CkBAIC0zNTU3LDExICszNzE4LDIwIEBACiAJ CQlicmVhazsKIAogCQlkZWZhdWx0OgotCQkJLyoKLQkJCSAqIFdlIGRvbid0IGhhbmRsZSB0 aGUgY2hhbm5lbCB0eXBlLCBzbyBqdXN0Ci0JCQkgKiBmcmVlIHRoZSBtZXNzYWdlLgotCQkJ ICovCi0JCQlyZXF1ZXVlID0gMDsKKwkJCS8qIENoZWNrIGZvciBPRU0gQ2hhbm5lbHMuICBD bGllbnRzIGhhZCBiZXR0ZXIKKwkJCSAgIHJlZ2lzdGVyIGZvciB0aGVzZSBjb21tYW5kcy4g Ki8KKwkJCWlmICgoaW50Zi0+Y2hhbm5lbHNbY2hhbl0ubWVkaXVtCisJCQkgICAgID49IElQ TUlfQ0hBTk5FTF9NRURJVU1fT0VNX01JTikKKwkJCSAgICAmJiAoaW50Zi0+Y2hhbm5lbHNb Y2hhbl0ubWVkaXVtCisJCQkJPD0gSVBNSV9DSEFOTkVMX01FRElVTV9PRU1fTUFYKSkgewor CQkJCXJlcXVldWUgPSBoYW5kbGVfb2VtX2dldF9tc2dfY21kKGludGYsIG1zZyk7CisJCQl9 IGVsc2UgeworCQkJCS8qCisJCQkJICogV2UgZG9uJ3QgaGFuZGxlIHRoZSBjaGFubmVsIHR5 cGUsIHNvIGp1c3QKKwkJCQkgKiBmcmVlIHRoZSBtZXNzYWdlLgorCQkJCSAqLworCQkJCXJl cXVldWUgPSAwOworCQkJfQogCQl9CiAKIAl9IGVsc2UgaWYgKChtc2ctPnJzcFswXSA9PSAo KElQTUlfTkVURk5fQVBQX1JFUVVFU1R8MSkgPDwgMikpCkBAIC0zNzMzLDcgKzM5MDMsNyBA QAogCQlsaXN0X2FkZF90YWlsKCZtc2ctPmxpbmssIHRpbWVvdXRzKTsKIAkJaWYgKGVudC0+ YnJvYWRjYXN0KQogCQkJaXBtaV9pbmNfc3RhdChpbnRmLCB0aW1lZF9vdXRfaXBtYl9icm9h ZGNhc3RzKTsKLQkJZWxzZSBpZiAoZW50LT5yZWN2X21zZy0+YWRkci5hZGRyX3R5cGUgPT0g SVBNSV9MQU5fQUREUl9UWVBFKQorCQllbHNlIGlmIChpc19sYW5fYWRkcigmZW50LT5yZWN2 X21zZy0+YWRkcikpCiAJCQlpcG1pX2luY19zdGF0KGludGYsIHRpbWVkX291dF9sYW5fY29t bWFuZHMpOwogCQllbHNlCiAJCQlpcG1pX2luY19zdGF0KGludGYsIHRpbWVkX291dF9pcG1i X2NvbW1hbmRzKTsKQEAgLTM3NDEsMjEgKzM5MTEsMjggQEAKIAkJc3RydWN0IGlwbWlfc21p X21zZyAqc21pX21zZzsKIAkJLyogTW9yZSByZXRyaWVzLCBzZW5kIGFnYWluLiAqLwogCisJ CWVudC0+cmV0cmllc19sZWZ0LS07CisJCW1zZyA9IGVudC0+cmVjdl9tc2c7CisKKwkJaWYg KChtc2ctPm1zZy5uZXRmbiA9PSBJUE1JX05FVEZOX1NUT1JBR0VfUkVRVUVTVCkgJiYKKwkJ CShtc2ctPm1zZy5jbWQgPT0gMHgyMikpCisJCQlyZXR1cm47CiAJCS8qCiAJCSAqIFN0YXJ0 IHdpdGggdGhlIG1heCB0aW1lciwgc2V0IHRvIG5vcm1hbCB0aW1lciBhZnRlcgogCQkgKiB0 aGUgbWVzc2FnZSBpcyBzZW50LgogCQkgKi8KIAkJZW50LT50aW1lb3V0ID0gTUFYX01TR19U SU1FT1VUOwotCQllbnQtPnJldHJpZXNfbGVmdC0tOwotCQlpZiAoZW50LT5yZWN2X21zZy0+ YWRkci5hZGRyX3R5cGUgPT0gSVBNSV9MQU5fQUREUl9UWVBFKQotCQkJaXBtaV9pbmNfc3Rh dChpbnRmLCByZXRyYW5zbWl0dGVkX2xhbl9jb21tYW5kcyk7Ci0JCWVsc2UKLQkJCWlwbWlf aW5jX3N0YXQoaW50ZiwgcmV0cmFuc21pdHRlZF9pcG1iX2NvbW1hbmRzKTsKLQogCQlzbWlf bXNnID0gc21pX2Zyb21fcmVjdl9tc2coaW50ZiwgZW50LT5yZWN2X21zZywgc2xvdCwKIAkJ CQkJICAgIGVudC0+c2VxaWQpOwotCQlpZiAoIXNtaV9tc2cpCisJCWlmICghc21pX21zZykg eworCQkJaWYgKGlzX2xhbl9hZGRyKCZlbnQtPnJlY3ZfbXNnLT5hZGRyKSkKKwkJCQlpcG1p X2luY19zdGF0KGludGYsCisJCQkJCSAgICAgIGRyb3BwZWRfcmV4bWl0X2xhbl9jb21tYW5k cyk7CisJCQllbHNlCisJCQkJaXBtaV9pbmNfc3RhdChpbnRmLAorCQkJCQkgICAgICBkcm9w cGVkX3JleG1pdF9pcG1iX2NvbW1hbmRzKTsKIAkJCXJldHVybjsKKwkJfQogCiAJCXNwaW5f dW5sb2NrX2lycXJlc3RvcmUoJmludGYtPnNlcV9sb2NrLCAqZmxhZ3MpOwogCkBAIC0zNzY3 LDEwICszOTQ0LDE3IEBACiAJCSAqIHJlc2VudC4KIAkJICovCiAJCWhhbmRsZXJzID0gaW50 Zi0+aGFuZGxlcnM7Ci0JCWlmIChoYW5kbGVycykKKwkJaWYgKGhhbmRsZXJzKSB7CisJCQlp ZiAoaXNfbGFuX2FkZHIoJmVudC0+cmVjdl9tc2ctPmFkZHIpKQorCQkJCWlwbWlfaW5jX3N0 YXQoaW50ZiwKKwkJCQkJICAgICAgcmV0cmFuc21pdHRlZF9sYW5fY29tbWFuZHMpOworCQkJ ZWxzZQorCQkJCWlwbWlfaW5jX3N0YXQoaW50ZiwKKwkJCQkJICAgICAgcmV0cmFuc21pdHRl ZF9pcG1iX2NvbW1hbmRzKTsKKwogCQkJaW50Zi0+aGFuZGxlcnMtPnNlbmRlcihpbnRmLT5z ZW5kX2luZm8sCiAJCQkJCSAgICAgICBzbWlfbXNnLCAwKTsKLQkJZWxzZQorCQl9IGVsc2UK IAkJCWlwbWlfZnJlZV9zbWlfbXNnKHNtaV9tc2cpOwogCiAJCXNwaW5fbG9ja19pcnFzYXZl KCZpbnRmLT5zZXFfbG9jaywgKmZsYWdzKTsKQEAgLTM5MzQsNyArNDExOCw3IEBACiAJa2Zy ZWUobXNnKTsKIH0KIAotc3RhdGljIHN0cnVjdCBpcG1pX3JlY3ZfbXNnICppcG1pX2FsbG9j X3JlY3ZfbXNnKHZvaWQpCitzdHJ1Y3QgaXBtaV9yZWN2X21zZyAqaXBtaV9hbGxvY19yZWN2 X21zZyh2b2lkKQogewogCXN0cnVjdCBpcG1pX3JlY3ZfbXNnICpydjsKIApAQCAtMzk0Niw2 ICs0MTMwLDcgQEAKIAl9CiAJcmV0dXJuIHJ2OwogfQorRVhQT1JUX1NZTUJPTChpcG1pX2Fs bG9jX3JlY3ZfbXNnKTsKIAogdm9pZCBpcG1pX2ZyZWVfcmVjdl9tc2coc3RydWN0IGlwbWlf cmVjdl9tc2cgKm1zZykKIHsKQEAgLTM5NTUsNiArNDE0MCw2MCBAQAogfQogRVhQT1JUX1NZ TUJPTChpcG1pX2ZyZWVfcmVjdl9tc2cpOwogCitpbnQKK2lwbWlfcmVnaXN0ZXJfYWxsX2Nt ZF9yY3ZyKGlwbWlfdXNlcl90IHVzZXIpCit7CisJaW50ICAgICAgICAgICBydiA9IC1FQlVT WTsKKworCW11dGV4X2xvY2soJnVzZXItPmludGYtPmNtZF9yY3Zyc19tdXRleCk7CisJaWYg KCh1c2VyLT5pbnRmLT5hbGxfY21kX3JjdnIgPT0gTlVMTCkKKwkgICAgJiYgKGxpc3RfZW1w dHkoJnVzZXItPmludGYtPmNtZF9yY3ZycykpKSB7CisJCXVzZXItPmludGYtPmFsbF9jbWRf cmN2ciA9IHVzZXI7CisJCXJ2ID0gMDsKKwl9CisJbXV0ZXhfdW5sb2NrKCZ1c2VyLT5pbnRm LT5jbWRfcmN2cnNfbXV0ZXgpOworCXJldHVybiBydjsKK30KK0VYUE9SVF9TWU1CT0woaXBt aV9yZWdpc3Rlcl9hbGxfY21kX3JjdnIpOworCitpbnQKK2lwbWlfdW5yZWdpc3Rlcl9hbGxf Y21kX3JjdnIoaXBtaV91c2VyX3QgdXNlcikKK3sKKwlpbnQgICAgICAgICAgIHJ2ID0gLUVJ TlZBTDsKKworCW11dGV4X2xvY2soJnVzZXItPmludGYtPmNtZF9yY3Zyc19tdXRleCk7CisJ aWYgKHVzZXItPmludGYtPmFsbF9jbWRfcmN2ciA9PSB1c2VyKSB7CisJCXVzZXItPmludGYt PmFsbF9jbWRfcmN2ciA9IE5VTEw7CisJCXJ2ID0gMDsKKwl9CisJbXV0ZXhfdW5sb2NrKCZ1 c2VyLT5pbnRmLT5jbWRfcmN2cnNfbXV0ZXgpOworCXJldHVybiBydjsKK30KK0VYUE9SVF9T WU1CT0woaXBtaV91bnJlZ2lzdGVyX2FsbF9jbWRfcmN2cik7CisKK2ludCBpcG1pX3JlcXVl c3Rfd2l0aF9zb3VyY2UoaXBtaV91c2VyX3QgICAgICB1c2VyLAorCQkJICAgICBzdHJ1Y3Qg aXBtaV9hZGRyICphZGRyLAorCQkJICAgICBsb25nICAgICAgICAgICAgIG1zZ2lkLAorCQkJ ICAgICBzdHJ1Y3Qga2VybmVsX2lwbWlfbXNnICAqbXNnLAorCQkJICAgICB2b2lkICAgICAg ICAgICAgICp1c2VyX21zZ19kYXRhLAorCQkJICAgICBpbnQgICAgICAgICAgICAgIHByaW9y aXR5LAorCQkJICAgICB1bnNpZ25lZCBjaGFyICAgIHNvdXJjZV9hZGRyZXNzLAorCQkJICAg ICB1bnNpZ25lZCBjaGFyICAgIHNvdXJjZV9sdW4pCit7CisJcmV0dXJuIGlfaXBtaV9yZXF1 ZXN0KHVzZXIsCisJCQkgICAgICB1c2VyLT5pbnRmLAorCQkJICAgICAgYWRkciwKKwkJCSAg ICAgIG1zZ2lkLAorCQkJICAgICAgbXNnLAorCQkJICAgICAgdXNlcl9tc2dfZGF0YSwKKwkJ CSAgICAgIE5VTEwsIE5VTEwsCisJCQkgICAgICBwcmlvcml0eSwKKwkJCSAgICAgIHNvdXJj ZV9hZGRyZXNzLAorCQkJICAgICAgc291cmNlX2x1biwKKwkJCSAgICAgIC0xLCAwKTsKK30K K0VYUE9SVF9TWU1CT0woaXBtaV9yZXF1ZXN0X3dpdGhfc291cmNlKTsKKwogI2lmZGVmIENP TkZJR19JUE1JX1BBTklDX0VWRU5UCiAKIHN0YXRpYyB2b2lkIGR1bW15X3NtaV9kb25lX2hh bmRsZXIoc3RydWN0IGlwbWlfc21pX21zZyAqbXNnKQpkaWZmIC11IC0tbmV3LWZpbGUgLS1y ZWN1cnNpdmUgbGludXgtMi42LjI5LjYub3JpZy9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX29v cHNfY29uc29sZS5jIGxpbnV4LTIuNi4yOS42Lm1vZC9kcml2ZXJzL2NoYXIvaXBtaS9pcG1p X29vcHNfY29uc29sZS5jCi0tLSBsaW51eC0yLjYuMjkuNi5vcmlnL2RyaXZlcnMvY2hhci9p cG1pL2lwbWlfb29wc19jb25zb2xlLmMJMTk2OS0xMi0zMSAxNzowMDowMC4wMDAwMDAwMDAg LTA3MDAKKysrIGxpbnV4LTIuNi4yOS42Lm1vZC9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX29v cHNfY29uc29sZS5jCTIwMDktMDctMjEgMTE6Mjg6MTguMDAwMDAwMDAwIC0wNzAwCkBAIC0w LDAgKzEsMjU2IEBACisvKgorICogaXBtaV9vb3BzX2NvbnNvbGUuYworICoKKyAqIElQTUkg T29wcyBDb25zb2xlCisgKiBMb2dnaW5nIGNvbnNvbGUgbWVzc2FnZSB0byBTRUwgb24gb29w cworICoKKyAqIEF1dGhvcjogSGlyb3NoaSBTaGltYW1vdG8gPGgtc2hpbWFtb3RvQGN0Lmpw Lm5lYy5jb20+CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE5FQyBDb3Jwb3JhdGlvbgor ICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z ZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq CisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBS RVNTIE9SIElNUExJRUQKKyAqICBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogIE1FUkNIQU5UQUJJTElU WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu CisgKiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBE SVJFQ1QsIElORElSRUNULAorICogIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiAgQlVUIE5PVCBMSU1J VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM T1NTCisgKiAgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgorICogIFRP UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg V0FZIE9VVCBPRiBUSEUKKyAqICBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiAgWW91IHNo b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgYWxvbmcKKyAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogIDY3NSBNYXNzIEF2ZSwg Q2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1 bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4 L2lwbWkuaD4KKyNpbmNsdWRlIDxsaW51eC9pcG1pX3NtaS5oPgorI2luY2x1ZGUgPGxpbnV4 L2NvbnNvbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CisjaW5jbHVkZSA8YXNt L2F0b21pYy5oPgorCisjZGVmaW5lIFBGWCAiSVBNSSBvb3BzX2NvbnNvbGU6ICIKKworc3Rh dGljIGlwbWlfdXNlcl90IG9vcHNfdXNlcjsKK3N0YXRpYyBpbnQgb29wc19pbnRmID0gLTE7 CisKK3N0YXRpYyBhdG9taWNfdCBvb3BzX2NvdW50ZXI7CisKKyNkZWZpbmUgU0VMX01TR1NJ WkVfVElNRVNUQU1QCSg2VSkKKyNkZWZpbmUgU0VMX01TR1NJWkUJCSgxM1UpCisjZGVmaW5l IERFRl9MSU1JVAkJKDEwMCkKKyNkZWZpbmUgVElNRVNUQU1QX0lOVEVSVkFMCSgxMCAqIEha KQorCitzdGF0aWMgY2hhciBvb3BzX21zZ1tTRUxfTVNHU0laRV9USU1FU1RBTVAgKyBTRUxf TVNHU0laRV07CitzdGF0aWMgY2hhciAqbXNnX3B0ciA9IG9vcHNfbXNnOworc3RhdGljIHVu c2lnbmVkIGludCBtc2dfbGVuOworc3RhdGljIHVuc2lnbmVkIGxvbmcgbXNnX2ppZmZpZXM7 CitzdGF0aWMgaW50IG1zZ19jb3VudCwgbXNnX2xpbWl0ID0gREVGX0xJTUlUOworCittb2R1 bGVfcGFyYW0obXNnX2xpbWl0LCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhtc2df bGltaXQsICJNZXNzYWdlIGxpbWl0LiBEZWZhdWx0OiAxMDAgZW50cmllcy4iKTsKKworc3Rh dGljIHZvaWQgb29wc19zbWlfbXNnX2RvbmUoc3RydWN0IGlwbWlfc21pX21zZyAqbXNnKQor eworCWF0b21pY19kZWMoJm9vcHNfY291bnRlcik7Cit9CitzdGF0aWMgc3RydWN0IGlwbWlf c21pX21zZyBvb3BzX3NtaV9tc2cgPSB7CisJLmRvbmUgPSBvb3BzX3NtaV9tc2dfZG9uZQor fTsKKworc3RhdGljIHZvaWQgb29wc19yZWN2X21zZ19kb25lKHN0cnVjdCBpcG1pX3JlY3Zf bXNnICptc2cpCit7CisJYXRvbWljX2RlYygmb29wc19jb3VudGVyKTsKK30KK3N0YXRpYyBz dHJ1Y3QgaXBtaV9yZWN2X21zZyBvb3BzX3JlY3ZfbXNnID0geworCS5kb25lID0gb29wc19y ZWN2X21zZ19kb25lCit9OworCitzdGF0aWMgdm9pZCBpcG1pX29vcHNfY29uc29sZV9sb2df dG9fc2VsKGludCB0aW1lc3RhbXApCit7CisJc3RydWN0IGlwbWlfc3lzdGVtX2ludGVyZmFj ZV9hZGRyIHNpOworCXN0cnVjdCBrZXJuZWxfaXBtaV9tc2cgbXNnOworCXVuc2lnbmVkIGlu dCBsZW47CisJdW5zaWduZWQgY2hhciBkYXRhWzE2XTsKKwl1bnNpZ25lZCBjaGFyIG15X2Fk ZHI7CisKKwlpZiAoIW9vcHNfdXNlciB8fCAhbXNnX2xlbiB8fCBtc2dfY291bnQgPj0gbXNn X2xpbWl0KQorCQlyZXR1cm47CisKKwlsZW4gPSBtaW4oKHRpbWVzdGFtcCA/IFNFTF9NU0dT SVpFX1RJTUVTVEFNUCA6IFNFTF9NU0dTSVpFKSwgbXNnX2xlbik7CisKKwlzaS5hZGRyX3R5 cGUgPSBJUE1JX1NZU1RFTV9JTlRFUkZBQ0VfQUREUl9UWVBFOworCXNpLmNoYW5uZWwgPSBJ UE1JX0JNQ19DSEFOTkVMOworCXNpLmx1biA9IDA7CisKKwltc2cubmV0Zm4gPSBJUE1JX05F VEZOX1NUT1JBR0VfUkVRVUVTVDsKKwltc2cuY21kID0gSVBNSV9BRERfU0VMX0VOVFJZX0NN RDsKKwltc2cuZGF0YSA9IGRhdGE7CisJbXNnLmRhdGFfbGVuID0gMTY7CisKKwltZW1zZXQo ZGF0YSwgMCwgc2l6ZW9mKGRhdGEpKTsKKwlpZiAodGltZXN0YW1wKSB7CisJCWxlbiA9IG1p bihTRUxfTVNHU0laRV9USU1FU1RBTVAsIG1zZ19sZW4pOworCQlkYXRhWzJdID0gMHhkMTsg LyogT0VNIGV2ZW50IHdpdGggdGltZXN0YW1wICovCisJCW1lbWNweShkYXRhICsgMTAsIG1z Z19wdHIsIGxlbik7CisJCW1zZ19qaWZmaWVzID0gamlmZmllczsgLyogc2F2ZSBqaWZmaWVz IGF0IHRpbWVzdGFtcCAqLworCX0gZWxzZSB7CisJCWxlbiA9IG1pbihTRUxfTVNHU0laRSwg bXNnX2xlbik7CisJCWRhdGFbMl0gPSAweGYxOyAvKiBPRU0gZXZlbnQgd2l0aG91dCB0aW1l c3RhbXAgKi8KKwkJbWVtY3B5KGRhdGEgKyAzLCBtc2dfcHRyLCBsZW4pOworCX0KKworCXBy ZWVtcHRfZGlzYWJsZSgpOworCisJaWYgKGlwbWlfZ2V0X215X2FkZHJlc3Mob29wc191c2Vy LCAwLCAmbXlfYWRkcikpCisJCWdvdG8gb3V0OworCisJYXRvbWljX3NldCgmb29wc19jb3Vu dGVyLCAyKTsKKwlpZiAoaXBtaV9yZXF1ZXN0X3N1cHBseV9tc2dzKG9vcHNfdXNlciwgKHN0 cnVjdCBpcG1pX2FkZHIgKikmc2ksCisJCQkJICAgICAwLCAmbXNnLCBOVUxMLCAmb29wc19z bWlfbXNnLAorCQkJCSAgICAgJm9vcHNfcmVjdl9tc2csIDEpIDwgMCkKKwkJZ290byBvdXQ7 CisJd2hpbGUgKGF0b21pY19yZWFkKCZvb3BzX2NvdW50ZXIpID4gMCkgeworCQlpcG1pX3Bv bGxfaW50ZXJmYWNlKG9vcHNfdXNlcik7CisJCWNwdV9yZWxheCgpOworCX0KKworCSsrbXNn X2NvdW50OworCW1zZ19sZW4gLT0gbGVuOworCW1zZ19wdHIgPSBtc2dfbGVuID8gJm9vcHNf bXNnW2xlbl0gOiBvb3BzX21zZzsKK291dDoKKwlwcmVlbXB0X2VuYWJsZSgpOworfQorCitz dGF0aWMgdm9pZCBpcG1pX29vcHNfY29uc29sZV9zeW5jKHZvaWQpCit7CisJaWYgKCFvb3Bz X3VzZXIgfHwgIW1zZ19sZW4gfHwgbXNnX2NvdW50ID49IG1zZ19saW1pdCkKKwkJcmV0dXJu OworCisJaWYgKGppZmZpZXMgPiAobXNnX2ppZmZpZXMgKyBUSU1FU1RBTVBfSU5URVJWQUwp KSB7CisJCWlmIChtc2dfcHRyICE9IG9vcHNfbXNnKQorCQkJaXBtaV9vb3BzX2NvbnNvbGVf bG9nX3RvX3NlbCgwKTsKKwkJaWYgKG1zZ19sZW4gPj0gU0VMX01TR1NJWkVfVElNRVNUQU1Q KQorCQkJaXBtaV9vb3BzX2NvbnNvbGVfbG9nX3RvX3NlbCgxKTsKKwkJcmV0dXJuOworCX0K KwlpZiAobXNnX2xlbiA+PSBTRUxfTVNHU0laRSkKKwkJaXBtaV9vb3BzX2NvbnNvbGVfbG9n X3RvX3NlbCgwKTsKK30KKworc3RhdGljIHZvaWQKK2lwbWlfb29wc19jb25zb2xlX3dyaXRl KHN0cnVjdCBjb25zb2xlICpjb24sIGNvbnN0IGNoYXIgKnMsIHVuc2lnbmVkIGludCBjb3Vu dCkKK3sKKwl1bnNpZ25lZCBpbnQgc2l6ZTsKKworCWlmIChsaWtlbHkoIW9vcHNfaW5fcHJv Z3Jlc3MpKSB7CisJCWlwbWlfb29wc19jb25zb2xlX2xvZ190b19zZWwoMCk7CisJCXJldHVy bjsKKwl9CisKKwlpZiAodW5saWtlbHkoIW9vcHNfdXNlcikpCisJCXJldHVybjsKKworCXdo aWxlIChtc2dfY291bnQgPCBtc2dfbGltaXQgJiYgY291bnQgPiAwKSB7CisJCXNpemUgPSBt aW4oU0VMX01TR1NJWkUgLSBtc2dfbGVuLCBjb3VudCk7CisJCW1lbWNweShtc2dfcHRyICsg bXNnX2xlbiwgcywgc2l6ZSk7CisJCW1zZ19sZW4gKz0gc2l6ZTsKKwkJcyArPSBzaXplOwor CQljb3VudCAtPSBzaXplOworCQlpcG1pX29vcHNfY29uc29sZV9zeW5jKCk7CisJfQorfQor CitzdGF0aWMgc3RydWN0IGNvbnNvbGUgb29wc19jb25zb2xlID0geworCS5uYW1lCT0gInR0 eUlQTUkiLAorCS53cml0ZQk9IGlwbWlfb29wc19jb25zb2xlX3dyaXRlLAorCS51bmJsYW5r ID0gaXBtaV9vb3BzX2NvbnNvbGVfc3luYywKKwkuaW5kZXgJPSAtMSwKK307CisKK3N0YXRp YyB2b2lkIGlwbWlfb29wc19yZWN2KHN0cnVjdCBpcG1pX3JlY3ZfbXNnICptc2csIHZvaWQg KmRhdGEpCit7CisJaXBtaV9mcmVlX3JlY3ZfbXNnKG1zZyk7Cit9CisKK3N0YXRpYyBzdHJ1 Y3QgaXBtaV91c2VyX2huZGwgaXBtaV9oYW5kbGVyID0geworCS5pcG1pX3JlY3ZfaG5kbCA9 IGlwbWlfb29wc19yZWN2LAorfTsKKworc3RhdGljIHZvaWQgaXBtaV9yZWdpc3Rlcl9vb3Bz X2NvbnNvbGUoaW50IGludGYpCit7CisJaW50IHJldDsKKworCXJldCA9IGlwbWlfY3JlYXRl X3VzZXIoaW50ZiwgJmlwbWlfaGFuZGxlciwgTlVMTCwgJm9vcHNfdXNlcik7CisJaWYgKHJl dCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAidW5hYmxlIHRvIGNyZWF0ZSB1c2Vy XG4iKTsKKwkJcmV0dXJuOworCX0KKworCW9vcHNfaW50ZiA9IGludGY7CisKKwlyZWdpc3Rl cl9jb25zb2xlKCZvb3BzX2NvbnNvbGUpOworCisJcHJpbnRrKEtFUk5fSU5GTyBQRlggInJl YWR5XG4iKTsKK30KKworc3RhdGljIHZvaWQgaXBtaV91bnJlZ2lzdGVyX29vcHNfY29uc29s ZShpbnQgaW50ZikKK3sKKwl1bnJlZ2lzdGVyX2NvbnNvbGUoJm9vcHNfY29uc29sZSk7CisK KwlpcG1pX2Rlc3Ryb3lfdXNlcihvb3BzX3VzZXIpOworCW9vcHNfdXNlciA9IE5VTEw7CisJ b29wc19pbnRmID0gLTE7Cit9CisKK3N0YXRpYyB2b2lkIGlwbWlfbmV3X3NtaShpbnQgaWZf bnVtLCBzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaXBtaV9yZWdpc3Rlcl9vb3BzX2NvbnNv bGUoaWZfbnVtKTsKK30KKworc3RhdGljIHZvaWQgaXBtaV9zbWlfZ29uZShpbnQgaWZfbnVt KQoreworCWlwbWlfdW5yZWdpc3Rlcl9vb3BzX2NvbnNvbGUoaWZfbnVtKTsKK30KKworc3Rh dGljIHN0cnVjdCBpcG1pX3NtaV93YXRjaGVyIHNtaV93YXRjaGVyID0geworCS5vd25lcgkJ PSBUSElTX01PRFVMRSwKKwkubmV3X3NtaQk9IGlwbWlfbmV3X3NtaSwKKwkuc21pX2dvbmUJ PSBpcG1pX3NtaV9nb25lLAorfTsKKworc3RhdGljIGludCBfX2luaXQgaXBtaV9vb3BzX2Nv bnNvbGVfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSBpcG1pX3NtaV93YXRj aGVyX3JlZ2lzdGVyKCZzbWlfd2F0Y2hlcik7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VS Tl9FUlIgUEZYICJ1bmFibGUgdG8gcmVnaXN0ZXIgc21pIHdhdGNoZXJcbiIpOworCQlyZXR1 cm4gcmV0OworCX0KKworCXByaW50ayhLRVJOX0lORk8gUEZYICJkcml2ZXIgaW5pdGlhbGl6 ZWRcbiIpOworCisJcmV0dXJuIHJldDsKK30KK21vZHVsZV9pbml0KGlwbWlfb29wc19jb25z b2xlX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgaXBtaV9vb3BzX2NvbnNvbGVfZXhp dCh2b2lkKQoreworCWlmIChvb3BzX2ludGYgPj0gMCkKKwkJaXBtaV91bnJlZ2lzdGVyX29v cHNfY29uc29sZShvb3BzX2ludGYpOworfQorbW9kdWxlX2V4aXQoaXBtaV9vb3BzX2NvbnNv bGVfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkhp cm9zaGkgU2hpbWFtb3RvIDxoLXNoaW1hbW90b0BjdC5qcC5uZWMuY29tPiIpOworTU9EVUxF X0RFU0NSSVBUSU9OKCJvb3BzIGNvbnNvbGUgaGFuZGxlciBiYXNlZCB1cG9uIHRoZSBJUE1J IGludGVyZmFjZS4iKTsKZGlmZiAtdSAtLW5ldy1maWxlIC0tcmVjdXJzaXZlIGxpbnV4LTIu Ni4yOS42Lm9yaWcvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9zZXJpYWwuYyBsaW51eC0yLjYu MjkuNi5tb2QvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9zZXJpYWwuYwotLS0gbGludXgtMi42 LjI5LjYub3JpZy9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX3NlcmlhbC5jCTE5NjktMTItMzEg MTc6MDA6MDAuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYuMjkuNi5tb2QvZHJpdmVy cy9jaGFyL2lwbWkvaXBtaV9zZXJpYWwuYwkyMDA5LTA3LTIxIDExOjI4OjE4LjAwMDAwMDAw MCAtMDcwMApAQCAtMCwwICsxLDIyOTggQEAKKy8qCisgKiBpcG1pX3NlcmlhbC5jCisgKgor ICogVGhlIGludGVyZmFjZSB0byB0aGUgSVBNSSBkcml2ZXIgZm9yIHRoZSBzZXJpYWwgc3lz dGVtIGludGVyZmFjZQorICoKKyAqIEF1dGhvcjogTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5j LgorICogICAgICAgICBEYXZpZCBHcmllZ28gPGRncmllZ29AbXZpc3RhLmNvbT4KKyAqICAg ICAgICAgQ29yZXkgTWlueWFyZCA8Y21pbnlhcmRAbXZpc3RhLmNvbT4KKyAqICAgICAgICAg c291cmNlQG12aXN0YS5jb20KKyAqCisgKiBDb3B5cmlnaHQgMjAwNSwyMDA2LDIwMDcgTW9u dGFWaXN0YSBTb2Z0d2FyZSBJbmMuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIg dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55 IGxhdGVyIHZlcnNpb24uCisgKgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE IGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorICogIFdBUlJBTlRJRVMs IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT IE9GCisgKiAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVU SE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiAgSU5DSURFTlRB TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV RElORywKKyAqICBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqICBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiAg T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD VCBMSUFCSUxJVFksIE9SCisgKiAgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRQorICogIFVTRSBPRiBUSElT IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg REFNQUdFLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogIHdpdGggdGhpcyBwcm9n cmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu Yy4sCisgKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8K KworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBh cmFtLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVk Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5o PgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXgu aD4KKyNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIu aD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4K KyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lwbWlfc21pLmg+ CisjaW5jbHVkZSA8bGludXgvaXBtaV9zZXJpYWxfc20uaD4KKyNpbmNsdWRlIDxsaW51eC9p bml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KKworI2RlZmluZSBQRlgg ImlwbWlfc2VyaWFsKCVzJWQpOiAiIC8qICVzJWQgaXMgZm9yIGluZm8tPm5hbWUsIGluZm8t PmxpbmUgKi8KKyNkZWZpbmUgTlBGWCAiaXBtaV9zZXJpYWw6ICIKKworI2RlZmluZSBNQVhf U0VSSUFMX1NFVFVQX1NUUiAxMDAKK3N0YXRpYyBjaGFyIHNldHVwX3N0cltNQVhfU0VSSUFM X1NFVFVQX1NUUl0gPSBDT05GSUdfU0VSSUFMX0lQTUlfU0VUVVA7Cittb2R1bGVfcGFyYW1f c3RyaW5nKHBvcnRfaW5mbywgc2V0dXBfc3RyLCBNQVhfU0VSSUFMX1NFVFVQX1NUUiwgMDQ0 NCk7CitNT0RVTEVfUEFSTV9ERVNDKHBvcnRfaW5mbywgIkRlZmluZXMgdGhlIHBlcmFtZXRl cnMgZm9yIHRoZSBzZXJpYWwgaW50ZXJmYWNlIgorCQkgIiBpLmUuIHBvcnRfaW5mbz10dHlT MSwzODQwMCxEaXJlY3Q6dHR5UzIsOTYwMG44MXIsIgorCQkgIlRlcm1pbmFsTW9kZSxwcCIp OworCitzdGF0aWMgaW50IGhvdG1vZF9oYW5kbGVyKGNvbnN0IGNoYXIgKnZhbCwgc3RydWN0 IGtlcm5lbF9wYXJhbSAqa3ApOworCittb2R1bGVfcGFyYW1fY2FsbChob3Rtb2QsIGhvdG1v ZF9oYW5kbGVyLCBOVUxMLCBOVUxMLCAwMjAwKTsKK01PRFVMRV9QQVJNX0RFU0MoaG90bW9k LCAiQWRkIGFuZCByZW1vdmUgaW50ZXJmYWNlcy4gIFNlZSIKKwkJICIgRG9jdW1lbnRhdGlv bi9JUE1JLnR4dCBpbiB0aGUga2VybmVsIHNvdXJjZXMgZm9yIHRoZSIKKwkJICIgZ29yeSBk ZXRhaWxzLiIpOworCitzdGF0aWMgaW50IHVubG9hZF93aGVuX2VtcHR5OworbW9kdWxlX3Bh cmFtKHVubG9hZF93aGVuX2VtcHR5LCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyh1bmxv YWRfd2hlbl9lbXB0eSwgIlVubG9hZCB0aGUgbW9kdWxlIGlmIG5vIGludGVyZmFjZXMgYXJl IgorCQkgIiBzcGVjaWZpZWQgb3IgZm91bmQsIGRlZmF1bHQgaXMgZmFsc2UgKDApLiAgU2V0 dGluZyB0byAxIgorCQkgIiBpcyB1c2VmdWwgZm9yIG5vdCBsb2FkaW5nIHRoZSBtb2R1bGUg aWYgbm90aGluZyBpcyIKKwkJICIgZm91bmQuIik7CisKKyNkZWZpbmUgSVBNSV9TRVJfREVC VUdfU1RBVEUJCTEKKyNkZWZpbmUgSVBNSV9TRVJfREVCVUdfTVNHCQkyCisjZGVmaW5lIElQ TUlfU0VSX0RFQlVHX0RBVEEJCTQKKyNkZWZpbmUgSVBNSV9TRVJfREVCVUdfVElNSU5HCQk4 CisjZGVmaW5lIElQTUlfU0VSX0RFQlVHX0NIQVJfVElNSU5HCTE2CitzdGF0aWMgaW50IGRl YnVnOworbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVT QyhkZWJ1ZywgIlNldCBiaXQgMCB0byBlbmFibGUgc3RhdGUgZGVidWdnaW5nLCBiaXQgMSB0 byIKKwkJICIgZW5hYmxlIGRhdGEgZGVidWdnaW5nLCBiaXQgMiB0byBlbmFibGUgbWVzc2Fn ZSBkZWJ1Z2dpbmcsIgorCQkgIiBiaXQgMyB0byBlbmFibGUgbWVzc2FnZSB0aW1pbmcsIGJp dCA0IHRvIGVuYWJsZSIKKwkJICIgY2hhcmFjdGVyIHRpbWluZy4iKTsKKworLyogTGlzdCBv ZiByZWdpc3RlcmVkIGNvZGVjcyAqLworc3RhdGljIExJU1RfSEVBRChjb2RlY19saXN0KTsK KworLyogTGlzdCBvZiBpbnRlcmZhY2VzIHRoYXQgYXJlIGNvbmZpZ3VyZWQuICovCitzdGF0 aWMgTElTVF9IRUFEKGluZm9fbGlzdCk7CisKKy8qIExvY2sgZm9yIHRoZSBhYm92ZSB0d28g bGlzdHMuICovCitzdGF0aWMgREVGSU5FX01VVEVYKGxpc3RfbG9jayk7CisKKy8qIENhbGwg ZXZlcnkgMTAgbXMuICovCisjZGVmaW5lIElQTUlfU0VSSUFMX1RJTUVPVVRfVElNRV9VU0VD CTEwMDAwCisjZGVmaW5lIElQTUlfU0VSSUFMX1VTRUNfUEVSX0pJRkZZCSgxMDAwMDAwIC8g SFopCisjZGVmaW5lIElQTUlfU0VSSUFMX1RJTUVPVVRfSklGRklFUwkoSVBNSV9TRVJJQUxf VElNRU9VVF9USU1FX1VTRUMgLyAgICAgIFwKKwkJCQkJIElQTUlfU0VSSUFMX1VTRUNfUEVS X0pJRkZZKQorCisKKy8qIFRpbWVvdXRzIGluIG1pY3Jvc2Vjb25kcy4gKi8KKyNkZWZpbmUg SVBNSV9TRVJJQUxfSU5JVF9USU1FT1VUCTEwMDAwMDAKKyNkZWZpbmUgSVBNSV9TRVJJQUxf SU5JVF9SRVRSSUVTCTEwCisjZGVmaW5lIElQTUlfU0VSSUFMX1JFVFJZX1RJTUVPVVQgCTEw MDAwMDAKKyNkZWZpbmUgSVBNSV9TRVJJQUxfTUFYX0VSUk9SX1JFVFJJRVMgCTEwCisKKy8q CisgKiBQb2xsaW5nIGZvciBmbGFncy4gIE5vdGUgdGhhdCBldmVudCBpZiB0aGUgaW50ZXJm YWNlIGRvZXNuJ3QKKyAqIHJlcXVlc3QgcG9sbGluZywgd2Ugc3RpbGwgcG9sbCBvbmNlIGEg c2Vjb25kLgorICovCisjZGVmaW5lIE5PX1BPTExJTkdfRkxBR19USU1FT1VUCQkxMDAwMDAw CisjZGVmaW5lIFBPTExJTkdfRkxBR19USU1FT1VUCQkxMDAwMDAKKworZW51bSBpcG1pX3Nl cmlhbF9zdGF0ZSB7CisJU0VSSUFMX0VNUFRZLAorCVNFUklBTF9IQU5ETElOR19NU0csCisJ U0VSSUFMX0dFVFRJTkdfRkxBR1MsCisJU0VSSUFMX0dFVFRJTkdfRVZFTlRTLAorCVNFUklB TF9DTEVBUklOR19GTEFHUywKKwlTRVJJQUxfR0VUVElOR19NRVNTQUdFUywKKwkvKiBGSVhN RSAtIGFkZCB3YXRjaGRvZyBzdHVmZi4gKi8KK307CisKK2VudW0gaXBtaV9zZXJpYWxfc3Rh dGVzIHsKKwlTRVJJQUxfSURMRSwJCS8qIFRoZSBzZXJpYWwgaW50ZXJmYWNlIGlzIGN1cnJl bnRseQorCQkJCSAgIGRvaW5nIG5vdGhpbmcuICovCisJU0VSSUFMX1dSSVRFLAkJLyogV2Ug YXJlIHdyaXRpbmcgYnl0ZXMgdG8gdGhlCisJCQkJICAgaW50ZXJmYWNlLiAqLworCVNFUklB TF9SRUFELAkJLyogV2UgYXJlIHdhaXRpbmcgdG8gcmVhZCBkYXRhIGZyb20KKwkJCQkgICB0 aGUgaW50ZXJmYWNlLiAqLworCVNFUklBTF9BU1lOQ19NU0csCS8qIEdldHRpbmcgYXN5bmMg bWVzc2FnZSBmcm9tIEJNQyAqLworCVNFUklBTF9DT01QTEVURSwJLyogQWxsb3dzIGdldCBt ZXNzYWdlIHRvIGNvbXBsZXRlCisJCQkJICAgY29ycmVjdGx5ICovCisJU0VSSUFMX0VSUk9S MCwJCS8qIFN0YXRlIHRvIHRyYW5zaXRpb24gdG8gdGhlIGVycm9yCisJCQkJICAgaGFuZGxl ciwgdGhpcyB3YXMgYWRkZWQgdG8gdGhlCisJCQkJICAgc3RhdGUgbWFjaGluZSBpbiB0aGUg c3BlYyB0byBiZQorCQkJCSAgIHN1cmUgSUJGIHdhcyB0aGVyZS4gKi8KKwlTRVJJQUxfSE9T RUQJCS8qIFRoZSBoYXJkd2FyZSBmYWlsZWQgdG8gZm9sbG93IHRoZQorCQkJCSAgIHN0YXRl IG1hY2hpbmUuICovCit9OworCisjZGVmaW5lIFRUWV9OQU1FX0xFTgk4CisKKy8qCisgKiBJ bmRleGVzIGludG8gc3RhdHNbXSBpbiBzbWJfaW5mbyBiZWxvdy4KKyAqLworZW51bSBzZXJp YWxfc3RhdF9pbmRleGVzIHsKKwkvKiBOdW1iZXIgb2Ygd2F0Y2hkb2cgcHJldGltZW91dHMg Ki8KKwlTRVJJQUxfU1RBVF93YXRjaGRvZ19wcmV0aW1lb3V0cyA9IDAsCisKKwkvKiBOdW1i ZXIgb2YgYXN5bmNyb25vdXMgbWVzc2FnZXMgcmVjZWl2ZWQuICovCisJU0VSSUFMX1NUQVRf aW5jb21pbmdfbWVzc2FnZXMsCisKKwkvKiBOdW1iZXIgb2YgZXZlbnRzIHJlY2VpdmVkLiAq LworCVNFUklBTF9TVEFUX2V2ZW50cywKKworCS8qIE51bWJlciBvZiBjb21wbGV0ZWQgcmVx dWVzdHMuICovCisJU0VSSUFMX1NUQVRfY29tcGxldGVfdHJhbnNhY3Rpb25zLAorCisJLyog TnVtYmVyIG9mIHRpbWVzIGZsYWdzIHdlcmUgZmV0Y2hlZC4gKi8KKwlTRVJJQUxfU1RBVF9m bGFnX2ZldGNoZXMsCisKKwkvKiBOdW1iZXIgb2YgQVRUTiBjaGFyYWN0ZXJzIHJlY2V2ZWQu ICovCisJU0VSSUFMX1NUQVRfYXR0ZW50aW9ucywKKworCS8qIE51bWJlciBvZiB0aW1lcyB0 aGUgdGltZXIgd2VudCBvZmYuICovCisJU0VSSUFMX1NUQVRfdGltZXJfdGlja3MsCisKKwkv KiBOdW1iZXIgb2YgdHJhbnNtaXR0ZWQgY2hhcmFjdGVycy4gKi8KKwlTRVJJQUxfU1RBVF94 bWl0X2NoYXJzLAorCisJLyogTnVtYmVyIG9mIHJlY2VpdmVkIGNoYXJhY3RlcnMuICovCisJ U0VSSUFMX1NUQVRfcmVjdl9jaGFycywKKworCS8qIE51bWJlciBvZiB0aW1lcyB0aGUgcHJv dG9jb2wgd2FzIHZpb2xhdGVkLiAqLworCVNFUklBTF9TVEFUX3Byb3RvY29sX3Zpb2xhdGlv bnMsCisKKwkvKiBOdW1iZXIgb2YgdGltZXMgdGhlIGNoZWNrc3VtIHdhcyBpbmNvcnJlY3Qu ICovCisJU0VSSUFMX1NUQVRfY2hlY2tzdW1fZXJyb3JzLAorCisJLyogTnVtYmVyIG9mIHRp bWVzIGEgdHJhbnNhY3Rpb24gdGltZWQgb3V0ICovCisJU0VSSUFMX1NUQVRfdGltZW91dHMs CisKKwkvKiBOdW1iZXIgb2YgdGltZXMgbW9yZSBkYXRhIHRoYW4gYWxsb3dlZCB3YXMgcmVj ZWl2ZWQgaW4gYSBtZXNzYWdlLiAqLworCVNFUklBTF9TVEFUX292ZXJydW5zLAorCisKKwkv KiBUaGlzICptdXN0KiByZW1haW4gbGFzdCwgYWRkIG5ldyB2YWx1ZXMgYWJvdmUgdGhpcy4g Ki8KKwlTRVJJQUxfTlVNX1NUQVRTLAorfTsKKworc3RydWN0IGlwbWlfc2VyaWFsX2luZm8g eworCWlwbWlfc21pX3QJCWludGY7CisJc3RydWN0IGxpc3RfaGVhZAlsaW5rOworCisJc3Bp bmxvY2tfdAkJbG9jazsKKworCXN0cnVjdCBsaXN0X2hlYWQJeG1pdF9tc2dzOworCXN0cnVj dCBsaXN0X2hlYWQJaHBfeG1pdF9tc2dzOworCXN0cnVjdCBpcG1pX3NtaV9tc2cJKmN1cnJf bXNnOworCXN0cnVjdCBpcG1pX3NtaV9tc2cJKnRvX3NlbmQ7CisKKwlpbnQgICAgICAgICAg ICAgICAgICAgICBtc2dfdGltZW91dDsKKwlpbnQgICAgICAgICAgICAgICAgICAgICByZXRy aWVzOworCXVuc2lnbmVkIGxvbmcgICAgICAgICAgIGxhc3RfdGltZW91dF9qaWZmaWVzOwor CXN0cnVjdCB0aW1lcl9saXN0CXRpbWVyOworCisJZW51bSBpcG1pX3NlcmlhbF9zdGF0ZQlz dGF0ZTsKKworCWludCB1cHBlcl9sYXllcl9yZWFkeTsKKworCXVuc2lnbmVkIGNoYXIgc2xh dmVfYWRkcjsKKworCS8qCisJICogVXNlZCB0byBkZWxpdmVyIHRoaW5ncyB0byB0aGUgdXBw ZXIgbGF5ZXIgd2hlbiBwcm9jZXNzaW5nCisJICogaXMgY29tcGxldGUuICBJbnN0ZWFkIG9m IGRlbGl2ZXJpbmcgaW1tZWRpYXRlbHksIHdlIHF1ZXVlCisJICogdGhpbmdzIHVwIGFuZCBk ZWxpdmVyIHRoZW0gd2hlbiBhbGwgcHJvY2Vzc2luZyBpcyBkb25lLgorCSAqIE1ha2VzIGxv Y2tpbmcgYSBsb3QgZWFzaWVyLgorCSAqLworCWludCAgICAgICAgICAgICAgd2F0Y2hkb2df cHJldGltZW91dHNfdG9fZGVsaXZlcjsKKwlpbnQgICAgICAgICAgICAgIG1zZ19kZWxpdmVy eV9pbl9wcm9ncmVzczsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG1zZ3NfdG9fZGVsaXZlcjsKKwor CS8qCisJICogU2VxdWVuY2UgbnVtYmVyIGZvciBzZW5kIG1lc3NhZ2VzLiAgTm90ZSB0aGF0 IHdlIHJlc2VydmUKKwkgKiB6ZXJvIGZvciBzcGVjaWFsIG1lc3NhZ2VzIChnZXR0aW5nIGZs YWdzLCBldGMuKTsgaXQgaXMKKwkgKiBuZXZlciB1c2VkIGZvciBub3JtYWwgbWVzc2FnZXMu CisJICovCisJdW5zaWduZWQgaW50ICAgICBzZW5kX3NlcTsKKworCS8qCisJICogSWYgc2V0 IHRvIHRydWUsIHRoaXMgd2lsbCByZXF1ZXN0IGV2ZW50cyB0aGUgbmV4dCB0aW1lIHRoZQor CSAqIHN0YXRlIG1hY2hpbmUgaXMgaWRsZS4gIE9ubHkgZG8gdGhpcyBpZiBkb19ldmVudF9y ZXF1ZXN0IGlzCisJICogdHJ1ZS4gIE90aGVyd2lzZSB0aGUgY29kZWMgZG9lc24ndCBzdXBw b3J0IHRoaXMgY2FwYWJpbGl0eS4KKwkgKi8KKwlpbnQgcmVxX2V2ZW50czsKKwlpbnQgZG9f ZXZlbnRfcmVxdWVzdDsKKwlpbnQgaGFzX2V2ZW50X2J1ZmZlcjsKKwlpbnQgZ2xvYmFsX2Vu YWJsZV92YWxpZDsKKworCS8qCisJICogVXNlZCB0byBoYW5kbGUgYXV0b21hdGljIHRpbWlu ZyBvZiBnZXR0aW5nIGZsYWdzLgorCSAqLworCWludCBmbGFnX3RpbWVvdXQ7CisJaW50IHJl cV9mbGFnczsKKwlpbnQgZmxhZ190aW1lcjsKKwlpbnQgc3VwcG9ydHNfZmxhZ3M7CisKKwkv KgorCSAqIElmIHRydWUsIHJ1biB0aGUgc3RhdGUgbWFjaGluZSB0byBjb21wbGV0aW9uIG9u IGV2ZXJ5IHNlbmQKKwkgKiBjYWxsLiAgR2VuZXJhbGx5IHVzZWQgYWZ0ZXIgYSBwYW5pYyB0 byBtYWtlIHN1cmUgc3R1ZmYgZ29lcworCSAqIG91dC4KKwkgKi8KKwlpbnQgcnVuX3RvX2Nv bXBsZXRpb247CisKKwkvKgorCSAqIFRoZSBkcml2ZXIgaXMgc2h1dHRpbmcgZG93biwgZG9u J3Qgc3RhcnQgYW55dGhpbmcgbmV3LgorCSAqLworCWludCBzdG9wX29wZXJhdGlvbjsKKwor CS8qIEZsYWdzIGZyb20gdGhlIGxhc3QgR0VUX01TR19GTEFHUyBjb21tYW5kLCB1c2VkIHdo ZW4gYW4gQVRUTgorCSAgIGlzIHNldCB0byBob2xkIHRoZSBmbGFncyB1bnRpbCB3ZSBhcmUg ZG9uZSBoYW5kbGluZyBldmVyeXRoaW5nCisJICAgZnJvbSB0aGUgZmxhZ3MuICovCisjZGVm aW5lIFJFQ0VJVkVfTVNHX0FWQUlMCTB4MDEKKyNkZWZpbmUgRVZFTlRfTVNHX0JVRkZFUl9G VUxMCTB4MDIKKyNkZWZpbmUgV0RUX1BSRV9USU1FT1VUX0lOVAkweDA4CisjZGVmaW5lIE9F TTBfREFUQV9BVkFJTCAgICAgMHgyMAorI2RlZmluZSBPRU0xX0RBVEFfQVZBSUwgICAgIDB4 NDAKKyNkZWZpbmUgT0VNMl9EQVRBX0FWQUlMICAgICAweDgwCisjZGVmaW5lIE9FTV9EQVRB X0FWQUlMICAgICAgKE9FTTBfREFUQV9BVkFJTCB8IFwKKwkJCSAgICAgT0VNMV9EQVRBX0FW QUlMIHwgXAorCQkJICAgICBPRU0yX0RBVEFfQVZBSUwpCisJdW5zaWduZWQgY2hhciBtc2df ZmxhZ3M7CisKKwkvKiBQZXItT0VNIGhhbmRsZXIsIGNhbGxlZCBmcm9tIGhhbmRsZV9mbGFn cygpLgorCSAgIFJldHVybnMgMSB3aGVuIGhhbmRsZV9mbGFncygpIG5lZWRzIHRvIGJlIHJl LXJ1bgorCSAgIG9yIDAgaW5kaWNhdGluZyBpdCBzZXQgc2lfc3RhdGUgaXRzZWxmLgorCSov CisJaW50ICgqb2VtX2RhdGFfYXZhaWxfaGFuZGxlcikoc3RydWN0IGlwbWlfc2VyaWFsX2lu Zm8gKmluZm8pOworCisJLyoKKwkgKiBDT0RFQyBpbmZvcm1hdGlvbi4KKwkgKi8KKwlzdHJ1 Y3QgaXBtaV9zZXJpYWxfY29kZWMgKmNvZGVjOworCXN0cnVjdCBpcG1pX3NlcmlhbF9jb2Rl Y19kYXRhICpjb2RlY19kYXRhOworCXN0cnVjdCBpcG1pX3NlcmlhbF9jb2RlY19kYXRhICph bGxvY19jb2RlY19kYXRhOworCisJLyogSG9sZHMgdGhlIHBhcmFtZXRlciBzdHJpbmcuICov CisJY2hhciAgICAgICAgICAgICAqa2VlcHN0cjsKKworCS8qIFNlcmlhbCBwb3J0IGluZm9y bWF0aW9uLiAqLworCWNoYXIJCSBuYW1lW1RUWV9OQU1FX0xFTl07CS8qIE5hbWUgb2YgdGhl IHNlcmlhbCBkcml2ZXIKKwkJCQkJCSAgIHdlIGFyZSBsb29raW5nIGZvci4gKi8KKwlpbnQJ CSBsaW5lOwkJCS8qIFNlcmlhbCBsaW5lIHdlIGFyZSBsb29raW5nCisJCQkJCQkgICBmb3Iu ICovCisJY2hhcgkJICpvcHRpb25zOwkJLyogT3B0aW9ucyBmb3Igc2VyaWFsIHBvcnQgICov CisJY2hhcgkJICpjb2RlY19uYW1lOwkJLyogTmFtZSBvZiBjb2RlYyB0byB0cnkgICAgICov CisJY2hhcgkJICpjb2RlY19vcHRpb25zOwkvKiBPcHRpb25zIGZvciB0aGUgY29kZWMgICAg Ki8KKwlzdHJ1Y3QgdWFydF9kaXJlY3QgZGlyZWN0OworCXN0cnVjdCB1YXJ0X2luZm8gICB1 aW5mbzsKKwlzdHJ1Y3QgdWFydF9pbmZvICAgKm9yaWdfcG9ydF9pbmZvOworCXVuc2lnbmVk IGxvbmcJICAgcG9sbF9zdGF0ZTsKKwljaGFyICAgICAgICAgICAgICAgdWFydF9idWZmZXJb VUFSVF9YTUlUX1NJWkVdOworCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQ7CisJc3RydWN0IGt0 ZXJtaW9zICB0ZXJtaW9zLCBvbGRfdGVybWlvczsKKworCS8qIEJ1ZmZlciBmb3IgaW5jb21p bmcgc2VyaWFsIGRhdGEuICovCisjZGVmaW5lIFNCVUZfTkVYVCh2KSAoKHYgKyAxKSAlIDEy OCkKKwl1bnNpZ25lZCBjaGFyIHNidWZbMTI4XTsKKwl1bnNpZ25lZCBpbnQgIHNidWZfc3Rh cnQsIHNidWZfbmV4dDsKKwlpbnQgICAgICAgICAgIGRlbGl2ZXJpbmdfY2hhcjsKKworCS8q IEZyb20gdGhlIGdldCBkZXZpY2UgaWQgcmVzcG9uc2UuLi4gKi8KKwlpbnQgZGV2aWNlX2lk X3ZhbGlkOworCXN0cnVjdCBpcG1pX2RldmljZV9pZCBkZXZpY2VfaWQ7CisKKwkvKiBVc2Vk IHRvIHJldHVybiBpbnRpYWxpemF0aW9uIHN0YXR1cy4gKi8KKwlpbnQgaW5pdF9zdGF0dXM7 CisKKwkvKiBJZiB0aGlzIGlzIHNldCwgcmV0dXJuZWQgcmVzcG9uc2VzIHdpbGwgZ28gdG8g dGhpcyBmdW5jdGlvbi4gKi8KKwl2b2lkICgqaW50ZXJuYWxfbXNnX2hhbmRsZXIpKHN0cnVj dCBpcG1pX3NlcmlhbF9pbmZvICppbmZvLAorCQkJCSAgICAgY29uc3QgdW5zaWduZWQgY2hh ciAgICAgKmRhdGEsCisJCQkJICAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgICBsZW4pOwor CisJYXRvbWljX3Qgc3RhdHNbU0VSSUFMX05VTV9TVEFUU107Cit9OworCisjZGVmaW5lIHNl cmlhbF9pbmNfc3RhdChzZXJpYWwsIHN0YXQpIFwKKwlhdG9taWNfaW5jKCYoc2VyaWFsKS0+ c3RhdHNbU0VSSUFMX1NUQVRfICMjIHN0YXRdKQorI2RlZmluZSBzZXJpYWxfYWRkX3N0YXQo c2VyaWFsLCBzdGF0LCB2YWwpIFwKKwlhdG9taWNfYWRkKHZhbCwgJihzZXJpYWwpLT5zdGF0 c1tTRVJJQUxfU1RBVF8gIyMgc3RhdF0pCisjZGVmaW5lIHNlcmlhbF9nZXRfc3RhdChzZXJp YWwsIHN0YXQpIFwKKwkoKHVuc2lnbmVkIGludCkgYXRvbWljX3JlYWQoJihzZXJpYWwpLT5z dGF0c1tTRVJJQUxfU1RBVF8gIyMgc3RhdF0pKQorCitzdGF0aWMgdm9pZCBpcG1pX3Nlcmlh bF9jbGVhbnVwX29uZShzdHJ1Y3QgaXBtaV9zZXJpYWxfaW5mbyAqdG9fY2xlYW4pOworCitz dHJ1Y3QgYmF1ZF9yYXRlcyB7CisJdW5zaWduZWQgaW50IHJhdGU7CisJdW5zaWduZWQgaW50 IGNmbGFnOworCWNoYXIgICAgICAgICAqbmFtZTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgYmF1 ZF9yYXRlcyBiYXVkX3JhdGVzW10gPSB7CisJeyA5MjE2MDAsIEI5MjE2MDAsICI5MjE2MDAi IH0sCisJeyA1MDAwMDAsIEI1MDAwMDAsICI1MDAwMDAiIH0sCisJeyA0NjA4MDAsIEI0NjA4 MDAsICI0NjA4MDAiIH0sCisJeyAyMzA0MDAsIEIyMzA0MDAsICIyMzA0MDAiIH0sCisJeyAx MTUyMDAsIEIxMTUyMDAsICIxMTUyMDAiIH0sCisJeyAgNTc2MDAsIEI1NzYwMCwgICI1NzYw MCIgIH0sCisJeyAgMzg0MDAsIEIzODQwMCwgICIzODQwMCIgIH0sCisJeyAgMTkyMDAsIEIx OTIwMCwgICIxOTIwMCIgIH0sCisJeyAgIDk2MDAsIEI5NjAwLCAgICI5NjAwIiAgIH0sCisJ eyAgIDQ4MDAsIEI0ODAwLCAgICI0ODAwIiAgIH0sCisJeyAgIDI0MDAsIEIyNDAwLCAgICIy NDAwIiAgIH0sCisJeyAgIDEyMDAsIEIxMjAwLCAgICIxMjAwIiAgIH0sCisJeyAgICAgIDAs IEIzODQwMCwgICI/IiAgICAgIH0KK307CisKKy8qCisgKiBJZiBydW5fdG9fY29tcGxldGlv biBtb2RlIGlzIG9uLCByZXR1cm4gTlVMTCB0byBrbm93IHRoZSBsb2NrIHdhc24ndAorICog dGFrZW4uICBPdGhlcndpc2UgbG9jayBpbmZvLT5sb2NrIGFuZCByZXR1cm4gdGhlIGZsYWdz LgorICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyAqaXBtaV9zZXJpYWxfbG9ja19jb25kKHN0 cnVjdCBpcG1pX3NlcmlhbF9pbmZvICppbmZvLAorCQkJCQkgICAgdW5zaWduZWQgbG9uZyAq ZmxhZ3MpCit7CisJaWYgKGluZm8tPnJ1bl90b19jb21wbGV0aW9uKQorCQlyZXR1cm4gTlVM TDsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+bG9jaywgKmZsYWdzKTsKKwlyZXR1cm4g ZmxhZ3M7Cit9CisKK3N0YXRpYyB2b2lkIGlwbWlfc2VyaWFsX3VubG9ja19jb25kKHN0cnVj dCBpcG1pX3NlcmlhbF9pbmZvICppbmZvLAorCQkJCSAgICB1bnNpZ25lZCBsb25nICpmbGFn cykKK3sKKwlpZiAoIWZsYWdzKQorCQlyZXR1cm47CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9y ZSgmaW5mby0+bG9jaywgKmZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgcXVldWVfcmV0dXJu X21zZyhzdHJ1Y3QgaXBtaV9zZXJpYWxfaW5mbyAqaW5mbykKK3sKKwlpZiAoZGVidWcgJiBJ UE1JX1NFUl9ERUJVR19USU1JTkcpIHsKKwkJc3RydWN0IHRpbWV2YWwgdDsKKwkJZG9fZ2V0 dGltZW9mZGF5KCZ0KTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJSZWN2IG1zZyBhdCAl bGQuJTYuNmxkXG4iLAorCQkgICAgICAgaW5mby0+bmFtZSwgaW5mby0+bGluZSwgdC50dl9z ZWMsIHQudHZfdXNlYyk7CisJfQorCWlmIChkZWJ1ZyAmIElQTUlfU0VSX0RFQlVHX01TRykg eworCQlpbnQgaTsKKwkJdW5zaWduZWQgY2hhciAqYnVmID0gaW5mby0+Y3Vycl9tc2ctPnJz cDsKKwkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJSZWNlaXZlZCBtc2c6IiwgaW5mby0+bmFt ZSwgaW5mby0+bGluZSk7CisJCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5jdXJyX21zZy0+cnNw X3NpemU7IGkrKykKKwkJCXByaW50aygiICUyLjJ4KCVjKSIsIGJ1ZltpXSwKKwkJCSAgICAg ICBpc3ByaW50KGJ1ZltpXSkgPyBidWZbaV0gOiAnICcpOworCQlwcmludGsoIlxuIik7CisJ fQorCisJLyogUXVldWUgdGhlIG1lc3NhZ2UgZm9yIGRlbGl2ZXJ5IHdoZW4gd2UgcmVsZWFz ZSB0aGUgbG9jay4gKi8KKwlsaXN0X2FkZF90YWlsKCZpbmZvLT5jdXJyX21zZy0+bGluaywg JmluZm8tPm1zZ3NfdG9fZGVsaXZlcik7CisJaW5mby0+Y3Vycl9tc2cgPSBOVUxMOworfQor CitzdGF0aWMgdm9pZCBxdWV1ZV9hc3luY19tc2coc3RydWN0IGlwbWlfc2VyaWFsX2luZm8g KmluZm8sCisJCQkgICAgc3RydWN0IGlwbWlfc21pX21zZyAqbXNnKQoreworCWlmIChkZWJ1 ZyAmIElQTUlfU0VSX0RFQlVHX1RJTUlORykgeworCQlzdHJ1Y3QgdGltZXZhbCB0OworCQlk b19nZXR0aW1lb2ZkYXkoJnQpOworCQlwcmludGsoS0VSTl9ERUJVRyBQRlggIlJlY3YgYXN5 bmMgbXNnIGF0ICVsZC4lNi42bGRcbiIsCisJCSAgICAgICBpbmZvLT5uYW1lLCBpbmZvLT5s aW5lLCB0LnR2X3NlYywgdC50dl91c2VjKTsKKwl9CisJaWYgKGRlYnVnICYgSVBNSV9TRVJf REVCVUdfTVNHKSB7CisJCWludCBpOworCQl1bnNpZ25lZCBjaGFyICpidWYgPSBtc2ctPnJz cDsKKwkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJSZWNlaXZlZCBhc3luYyBtc2c6IiwKKwkJ ICAgICAgIGluZm8tPm5hbWUsIGluZm8tPmxpbmUpOworCQlmb3IgKGkgPSAwOyBpIDwgbXNn LT5yc3Bfc2l6ZTsgaSsrKQorCQkJcHJpbnRrKCIgJTIuMngoJWMpIiwgYnVmW2ldLAorCQkJ ICAgICAgIGlzcHJpbnQoYnVmW2ldKSA/IGJ1ZltpXSA6ICcgJyk7CisJCXByaW50aygiXG4i KTsKKwl9CisKKwkvKiBRdWV1ZSB0aGUgbWVzc2FnZSBmb3IgZGVsaXZlcnkgd2hlbiB3ZSBy ZWxlYXNlIHRoZSBsb2NrLiAqLworCWxpc3RfYWRkX3RhaWwoJm1zZy0+bGluaywgJmluZm8t Pm1zZ3NfdG9fZGVsaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIHF1ZXVlX3JldHVybl9lcnJf bXNnKHN0cnVjdCBpcG1pX3NlcmlhbF9pbmZvICppbmZvLCBpbnQgZXJyKQoreworCXN0cnVj dCBpcG1pX3NtaV9tc2cgKm1zZyA9IGluZm8tPmN1cnJfbXNnOworCisJLyogTWFrZSBpdCBh IHJlcG9uc2UgKi8KKwltc2ctPnJzcFswXSA9IG1zZy0+ZGF0YVswXSB8IDQ7CisJbXNnLT5y c3BbMV0gPSBtc2ctPmRhdGFbMV07CisJbXNnLT5yc3BbMl0gPSBlcnI7CisJbXNnLT5yc3Bf c2l6ZSA9IDM7CisJcXVldWVfcmV0dXJuX21zZyhpbmZvKTsKK30KKworc3RhdGljIGludCBz ZW5kX2N1cnJfbXNnKHN0cnVjdCBpcG1pX3NlcmlhbF9pbmZvICppbmZvKQoreworCWlmICgh aW5mby0+cG9ydCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlXQVJOX09OKGluZm8tPnRvX3Nl bmQpOworCWlmIChpbmZvLT50b19zZW5kKQorCQlyZXR1cm4gLUVCVVNZOworCisJaWYgKGRl YnVnICYgSVBNSV9TRVJfREVCVUdfVElNSU5HKSB7CisJCXN0cnVjdCB0aW1ldmFsIHQ7CisJ CWRvX2dldHRpbWVvZmRheSgmdCk7CisJCXByaW50ayhLRVJOX0RFQlVHIFBGWCAiU2VuZCBt c2cgYXQgJWxkLiU2LjZsZFxuIiwKKwkJICAgICAgIGluZm8tPm5hbWUsIGluZm8tPmxpbmUs IHQudHZfc2VjLCB0LnR2X3VzZWMpOworCX0KKwlpZiAoZGVidWcgJiBJUE1JX1NFUl9ERUJV R19NU0cpIHsKKwkJaW50IGk7CisJCXVuc2lnbmVkIGNoYXIgKmJ1ZiA9IGluZm8tPmN1cnJf bXNnLT5kYXRhOworCQlwcmludGsoS0VSTl9ERUJVRyBQRlggIlNlbnQgbXNnOiIsIGluZm8t Pm5hbWUsIGluZm8tPmxpbmUpOworCQlmb3IgKGkgPSAwOyBpIDwgaW5mby0+Y3Vycl9tc2ct PmRhdGFfc2l6ZTsgaSsrKQorCQkJcHJpbnRrKCIgJTIuMngoJWMpIiwgYnVmW2ldLAorCQkJ ICAgICAgIGlzcHJpbnQoYnVmW2ldKSA/IGJ1ZltpXSA6ICcgJyk7CisJCXByaW50aygiXG4i KTsKKwl9CisJaW5mby0+dG9fc2VuZCA9IGluZm8tPmN1cnJfbXNnOworCXJldHVybiAwOwor fQorCitzdGF0aWMgaW50IHN0YXJ0X2NsZWFyX2ZsYWdzKHN0cnVjdCBpcG1pX3NlcmlhbF9p bmZvICppbmZvKQoreworCXN0cnVjdCBpcG1pX3NtaV9tc2cgKm1zZzsKKwlpbnQgICAgICAg ICAgICAgICAgIHJ2OworCisJV0FSTl9PTihpbmZvLT5jdXJyX21zZyk7CisJaWYgKGluZm8t PmN1cnJfbXNnKQorCQlyZXR1cm4gLUVCVVNZOworCisJbXNnID0gaXBtaV9hbGxvY19zbWlf bXNnKCk7CisJaWYgKCFtc2cpCisJCXJldHVybiAtRU5PTUVNOworCW1zZy0+ZGF0YVswXSA9 IChJUE1JX05FVEZOX0FQUF9SRVFVRVNUIDw8IDIpOworCW1zZy0+ZGF0YVsxXSA9IElQTUlf Q0xFQVJfTVNHX0ZMQUdTX0NNRDsKKwltc2ctPmRhdGFbMl0gPSBXRFRfUFJFX1RJTUVPVVRf SU5UOworCW1zZy0+ZGF0YV9zaXplID0gMzsKKwlpbmZvLT5jdXJyX21zZyA9IG1zZzsKKwly diA9IHNlbmRfY3Vycl9tc2coaW5mbyk7CisJaWYgKCFydikKKwkJaW5mby0+c3RhdGUgPSBT RVJJQUxfQ0xFQVJJTkdfRkxBR1M7CisJZWxzZSB7CisJCW1zZy0+ZG9uZShtc2cpOworCQlp bmZvLT5jdXJyX21zZyA9IE5VTEw7CisJfQorCXJldHVybiBydjsKK30KKworc3RhdGljIGlu dCBzdGFydF9mbGFnX2ZldGNoKHN0cnVjdCBpcG1pX3NlcmlhbF9pbmZvICppbmZvKQorewor CXN0cnVjdCBpcG1pX3NtaV9tc2cgKm1zZzsKKwlpbnQgICAgICAgICAgICAgICAgIHJ2Owor CisJV0FSTl9PTihpbmZvLT5jdXJyX21zZyk7CisJaWYgKGluZm8tPmN1cnJfbXNnKQorCQly ZXR1cm4gLUVCVVNZOworCisJbXNnID0gaXBtaV9hbGxvY19zbWlfbXNnKCk7CisJaWYgKCFt c2cpCisJCXJldHVybiAtRU5PTUVNOworCisJbXNnLT5kYXRhWzBdID0gKElQTUlfTkVURk5f QVBQX1JFUVVFU1QgPDwgMik7CisJbXNnLT5kYXRhWzFdID0gSVBNSV9HRVRfTVNHX0ZMQUdT X0NNRDsKKwltc2ctPmRhdGFfc2l6ZSA9IDI7CisJaW5mby0+Y3Vycl9tc2cgPSBtc2c7CisJ cnYgPSBzZW5kX2N1cnJfbXNnKGluZm8pOworCWlmICghcnYpCisJCWluZm8tPnN0YXRlID0g U0VSSUFMX0dFVFRJTkdfRkxBR1M7CisJZWxzZSB7CisJCW1zZy0+ZG9uZShtc2cpOworCQlp bmZvLT5jdXJyX21zZyA9IE5VTEw7CisJfQorCXJldHVybiBydjsKK30KKworc3RhdGljIGlu dCBzdGFydF9ldmVudF9mZXRjaChzdHJ1Y3QgaXBtaV9zZXJpYWxfaW5mbyAqaW5mbykKK3sK KwlzdHJ1Y3QgaXBtaV9zbWlfbXNnICptc2c7CisJaW50ICAgICAgICAgICAgICAgICBydjsK KworCVdBUk5fT04oaW5mby0+Y3Vycl9tc2cpOworCWlmIChpbmZvLT5jdXJyX21zZykKKwkJ cmV0dXJuIC1FQlVTWTsKKworCW1zZyA9IGlwbWlfYWxsb2Nfc21pX21zZygpOworCWlmICgh bXNnKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1zZy0+ZGF0YVswXSA9IChJUE1JX05FVEZO X0FQUF9SRVFVRVNUIDw8IDIpOworCW1zZy0+ZGF0YVsxXSA9IElQTUlfUkVBRF9FVkVOVF9N U0dfQlVGRkVSX0NNRDsKKwltc2ctPmRhdGFfc2l6ZSA9IDI7CisJaW5mby0+Y3Vycl9tc2cg PSBtc2c7CisJcnYgPSBzZW5kX2N1cnJfbXNnKGluZm8pOworCWlmIChydikgeworCQltc2ct PmRvbmUobXNnKTsKKwkJaW5mby0+Y3Vycl9tc2cgPSBOVUxMOworCX0gZWxzZQorCQlpbmZv LT5zdGF0ZSA9IFNFUklBTF9HRVRUSU5HX0VWRU5UUzsKKworCXJldHVybiBydjsKK30KKwor c3RhdGljIGludCBzdGFydF9tc2dfZmV0Y2goc3RydWN0IGlwbWlfc2VyaWFsX2luZm8gKmlu Zm8pCit7CisJc3RydWN0IGlwbWlfc21pX21zZyAqbXNnOworCWludCAgICAgICAgICAgICAg ICAgcnY7CisKKwlXQVJOX09OKGluZm8tPmN1cnJfbXNnKTsKKwlpZiAoaW5mby0+Y3Vycl9t c2cpCisJCXJldHVybiAtRUJVU1k7CisKKwltc2cgPSBpcG1pX2FsbG9jX3NtaV9tc2coKTsK KwlpZiAoIW1zZykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltc2ctPmRhdGFbMF0gPSAoSVBN SV9ORVRGTl9BUFBfUkVRVUVTVCA8PCAyKTsKKwltc2ctPmRhdGFbMV0gPSBJUE1JX0dFVF9N U0dfQ01EOworCW1zZy0+ZGF0YV9zaXplID0gMjsKKwlpbmZvLT5jdXJyX21zZyA9IG1zZzsK KwlydiA9IHNlbmRfY3Vycl9tc2coaW5mbyk7CisJaWYgKHJ2KSB7CisJCWluZm8tPmN1cnJf bXNnLT5kb25lKGluZm8tPmN1cnJfbXNnKTsKKwkJaW5mby0+Y3Vycl9tc2cgPSBOVUxMOwor CX0gZWxzZQorCQlpbmZvLT5zdGF0ZSA9IFNFUklBTF9HRVRUSU5HX01FU1NBR0VTOworCisJ cmV0dXJuIHJ2OworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfZmxhZ3Moc3RydWN0IGlwbWlf c2VyaWFsX2luZm8gKmluZm8pCit7CisJaW50IHJ2OworCisgcmV0cnk6CisJaWYgKGluZm8t Pm1zZ19mbGFncyAmIFdEVF9QUkVfVElNRU9VVF9JTlQpIHsKKwkJLyogV2F0Y2hkb2cgcHJl LXRpbWVvdXQgKi8KKwkJc2VyaWFsX2luY19zdGF0KGluZm8sIHdhdGNoZG9nX3ByZXRpbWVv dXRzKTsKKworCQlpbmZvLT53YXRjaGRvZ19wcmV0aW1lb3V0c190b19kZWxpdmVyKys7CisJ CXN0YXJ0X2NsZWFyX2ZsYWdzKGluZm8pOworCQlpbmZvLT5tc2dfZmxhZ3MgJj0gfldEVF9Q UkVfVElNRU9VVF9JTlQ7CisJfSBlbHNlIGlmIChpbmZvLT5tc2dfZmxhZ3MgJiBSRUNFSVZF X01TR19BVkFJTCkgeworCQkvKgorCQkgKiBNZXNzYWdlcyBhdmFpbGFibGUuIElmIGZvciBz b21lIHJlYXNvbiB3ZSBmYWlsLAorCQkgKiBqdXN0IGdpdmUgdXAgZm9yIG5vdy4gIEl0IHdp bGwgYmUgcmV0cmllZC4KKwkJICovCisJCWluZm8tPm1zZ19mbGFncyAmPSB+UkVDRUlWRV9N U0dfQVZBSUw7CisJCXJ2ID0gc3RhcnRfbXNnX2ZldGNoKGluZm8pOworCQlpZiAocnYpCisJ CQlnb3RvIHJldHJ5OworCX0gZWxzZSBpZiAoaW5mby0+bXNnX2ZsYWdzICYgRVZFTlRfTVNH X0JVRkZFUl9GVUxMKSB7CisJCS8qCisJCSAqIE1lc3NhZ2VzIGF2YWlsYWJsZS4gSWYgZm9y IHNvbWUgcmVhc29uIHdlIGZhaWwsCisJCSAqIGp1c3QgZ2l2ZSB1cCBmb3Igbm93LiAgSXQg d2lsbCBiZSByZXRyaWVkLgorCQkgKi8KKwkJaW5mby0+bXNnX2ZsYWdzICY9IH5FVkVOVF9N U0dfQlVGRkVSX0ZVTEw7CisJCXJ2ID0gc3RhcnRfZXZlbnRfZmV0Y2goaW5mbyk7CisJCWlm IChydikKKwkJCWdvdG8gcmV0cnk7CisJfSBlbHNlIGlmIChpbmZvLT5tc2dfZmxhZ3MgJiBP RU1fREFUQV9BVkFJTAorCQkJCSYmIGluZm8tPm9lbV9kYXRhX2F2YWlsX2hhbmRsZXIpIHsK KwkJaWYgKGluZm8tPm9lbV9kYXRhX2F2YWlsX2hhbmRsZXIoaW5mbykpCisJCQlnb3RvIHJl dHJ5OworCX0gZWxzZSB7CisJCWluZm8tPnN0YXRlID0gU0VSSUFMX0VNUFRZOworCX0KK30K KworLyoKKyAqIFRoaXMgcm91dGluZSBzdGFydHMgdGhlIG5leHQgdGhpbmcgdG8gYmUgcHJv Y2Vzc2VkLiAgQ2FsbGVkIHdpdGgKKyAqIHRoZSBsb2NrLCBhbmQgcmVsZWFzZXMgdGhlIGxv Y2suCisgKgorICogV2UgZGVsYXkgaGFuZGxpbmcgb2YgZmxhZ3MgYW5kIHRyYW5zbWlzc2lv bnMgb2YgbmV3IG1lc3NhZ2VzIGhlcmUuCisgKiBXZSBhbHNvIGRlbGF5IHRoZSBkZWxpdmVy IG9mIG1lc3NhZ2UgdG8gdGhlIHVwcGVyIGFuZCBsb3dlciBsYXllcgorICogaW4gYSBzaW5n bGUtdGhyZWFkZWQgYnV0IHVubG9ja2VkIHNlY3Rpb24gYmVsb3csIHNvIHRoYXQgd2UgZG9u J3QKKyAqIGhhdmUgd29ycmllcyBvZiBkZWFkbG9ja3MgY2FsbGluZyBiYWNrIGludG8gdGhp cyBsYXllci4KKyAqLworc3RhdGljIHZvaWQgc3RhcnRfbmV4dF9tc2coc3RydWN0IGlwbWlf c2VyaWFsX2luZm8gKmluZm8sIHVuc2lnbmVkIGxvbmcgKmZsYWdzKQoreworCXN0cnVjdCBs aXN0X2hlYWQgICAgdG9fZGVsaXZlcjsKKwlpbnQgICAgICAgICAgICAgICAgIHdkb2dfcHJl dGltZW91dF9jb3VudDsKKwlpbnQgICAgICAgICAgICAgICAgIHJ2OworCXN0cnVjdCBpcG1p X3NtaV9tc2cgKm1zZywgKnM7CisJdW5zaWduZWQgbG9uZyAgICAgICBvZmxhZ3M7CisKKyBy ZXN0YXJ0OgorCWlmIChkZWJ1ZyAmIElQTUlfU0VSX0RFQlVHX1NUQVRFKQorCQlwcmludGso S0VSTl9ERUJVRyBQRlggInN0YXJ0X25leHRfbWVzc2FnZSBzdGF0ZSA9ICVkXG4iLAorCQkg ICAgICAgaW5mby0+bmFtZSwgaW5mby0+bGluZSwgaW5mby0+c3RhdGUpOworCisJaWYgKGlu Zm8tPnN0YXRlID09IFNFUklBTF9FTVBUWSkgeworCQlpZiAoaW5mby0+bXNnX2ZsYWdzKSB7 CisJCQkvKiBIYW5kbGUgZmxhZ3Mgd2UgaGF2ZSBmaXJzdC4gKi8KKwkJCWhhbmRsZV9mbGFn cyhpbmZvKTsKKwkJCWlmIChpbmZvLT5zdGF0ZSA9PSBTRVJJQUxfRU1QVFkpIHsKKwkJCQlp bmZvLT5tc2dfZmxhZ3MgPSAwOworCQkJCWdvdG8gcmVzdGFydDsKKwkJCX0KKwkJCWluZm8t Pm1zZ190aW1lb3V0ID0gSVBNSV9TRVJJQUxfUkVUUllfVElNRU9VVDsKKwkJCWluZm8tPnJl dHJpZXMgPSBJUE1JX1NFUklBTF9NQVhfRVJST1JfUkVUUklFUzsKKwkJfSBlbHNlIGlmIChp bmZvLT5yZXFfZXZlbnRzKSB7CisJCQkvKiBXZSBwcmVmZXIgZmV0Y2hpbmcgZXZlbnRzIG92 ZXIgbmV3IG1lc3NhZ2VzLiAqLworCQkJaW5mby0+cmVxX2V2ZW50cyA9IDA7CisJCQlydiA9 IHN0YXJ0X2V2ZW50X2ZldGNoKGluZm8pOworCQkJaWYgKHJ2KQorCQkJCWdvdG8gcmVzdGFy dDsKKwkJCWluZm8tPm1zZ190aW1lb3V0ID0gSVBNSV9TRVJJQUxfUkVUUllfVElNRU9VVDsK KwkJCWluZm8tPnJldHJpZXMgPSBJUE1JX1NFUklBTF9NQVhfRVJST1JfUkVUUklFUzsKKwkJ fSBlbHNlIGlmIChsaWtlbHkoaW5mby0+dXBwZXJfbGF5ZXJfcmVhZHkpICYmIGluZm8tPnJl cV9mbGFncykgeworCQkJLyogV2UgcHJlZmVyIGZldGNoaW5nIGZsYWdzIG92ZXIgbmV3IG1l c3NhZ2VzLiAqLworCQkJaW5mby0+cmVxX2ZsYWdzID0gMDsKKwkJCXJ2ID0gc3RhcnRfZmxh Z19mZXRjaChpbmZvKTsKKwkJCWlmIChydikKKwkJCQlnb3RvIHJlc3RhcnQ7CisJCQlpbmZv LT5tc2dfdGltZW91dCA9IElQTUlfU0VSSUFMX1JFVFJZX1RJTUVPVVQ7CisJCQlpbmZvLT5y ZXRyaWVzID0gSVBNSV9TRVJJQUxfTUFYX0VSUk9SX1JFVFJJRVM7CisJCX0gZWxzZSB7CisJ CQkvKiBMb29rIGZvciBtZXNzYWdlcyB0byB0cmFuc21pdC4gKi8KKwkJCWlmICghbGlzdF9l bXB0eSgmaW5mby0+aHBfeG1pdF9tc2dzKSkgeworCQkJCW1zZyA9IGxpc3RfZW50cnkoaW5m by0+aHBfeG1pdF9tc2dzLm5leHQsCisJCQkJCQkgc3RydWN0IGlwbWlfc21pX21zZywKKwkJ CQkJCSBsaW5rKTsKKwkJCX0gZWxzZSBpZiAoIWxpc3RfZW1wdHkoJmluZm8tPnhtaXRfbXNn cykpIHsKKwkJCQltc2cgPSBsaXN0X2VudHJ5KGluZm8tPnhtaXRfbXNncy5uZXh0LAorCQkJ CQkJIHN0cnVjdCBpcG1pX3NtaV9tc2csCisJCQkJCQkgbGluayk7CisJCQl9IGVsc2UKKwkJ CQltc2cgPSBOVUxMOworCisJCQlpbmZvLT5jdXJyX21zZyA9IG1zZzsKKwkJCWlmIChtc2cp IHsKKwkJCQlpZiAoZGVidWcgJiBJUE1JX1NFUl9ERUJVR19USU1JTkcpIHsKKwkJCQkJc3Ry dWN0IHRpbWV2YWwgdDsKKwkJCQkJZG9fZ2V0dGltZW9mZGF5KCZ0KTsKKwkJCQkJcHJpbnRr KEtFUk5fREVCVUcgUEZYCisJCQkJCSAgICAgICAiU3RhcnQgc2VuZCBhdCAlbGQuJTYuNmxk XG4iLAorCQkJCQkgICAgICAgaW5mby0+bmFtZSwgaW5mby0+bGluZSwKKwkJCQkJICAgICAg IHQudHZfc2VjLCB0LnR2X3VzZWMpOworCQkJCX0KKwkJCQlpbmZvLT5zdGF0ZSA9IFNFUklB TF9IQU5ETElOR19NU0c7CisJCQkJbGlzdF9kZWwoJm1zZy0+bGluayk7CisJCQkJcnYgPSBz ZW5kX2N1cnJfbXNnKGluZm8pOworCQkJCWlmIChydikgeworCQkJCQlxdWV1ZV9yZXR1cm5f ZXJyX21zZyhpbmZvLAorCQkJCQkJICAgICAgIElQTUlfRVJSX1VOU1BFQ0lGSUVEKTsKKwkJ CQkJZ290byByZXN0YXJ0OworCQkJCX0KKwkJCQlpbmZvLT5tc2dfdGltZW91dCA9IElQTUlf U0VSSUFMX1JFVFJZX1RJTUVPVVQ7CisJCQkJaW5mby0+cmV0cmllcyA9IElQTUlfU0VSSUFM X01BWF9FUlJPUl9SRVRSSUVTOworCQkJfQorCQl9CisJfQorCisgcmVzdGFydF9kZWxpdmVy eToKKwlpZiAoaW5mby0+d2F0Y2hkb2dfcHJldGltZW91dHNfdG9fZGVsaXZlcgorCSAgICB8 fCAhbGlzdF9lbXB0eSgmaW5mby0+bXNnc190b19kZWxpdmVyKQorCSAgICB8fCBpbmZvLT50 b19zZW5kKSB7CisJCWlmIChpbmZvLT5tc2dfZGVsaXZlcnlfaW5fcHJvZ3Jlc3MpIHsKKwkJ CS8qCisJCQkgKiBBbm90aGVyIHRocmVhZCBpcyBhbHJlYWR5IGRlbGl2ZXJpbmcsIHRlbGwK KwkJCSAqIGl0IHRoZXJlIGFyZSBtb3JlIHRoaW5ncyB0byBkbyBhbmQKKwkJCSAqIGxlYXZl LgorCQkJICovCisJCQlpbmZvLT5tc2dfZGVsaXZlcnlfaW5fcHJvZ3Jlc3MgPSAyOworCQkJ Z290byBvdXRfdW5sb2NrOworCQl9CisKKwkJLyogUHVsbCB0aGUgZGF0YSB3ZSBuZWVkIHRv IGRlbGl2ZXIuICovCisJCXdkb2dfcHJldGltZW91dF9jb3VudCA9IGluZm8tPndhdGNoZG9n X3ByZXRpbWVvdXRzX3RvX2RlbGl2ZXI7CisJCWluZm8tPndhdGNoZG9nX3ByZXRpbWVvdXRz X3RvX2RlbGl2ZXIgPSAwOworCisJCUlOSVRfTElTVF9IRUFEKCZ0b19kZWxpdmVyKTsKKwkJ aWYgKCFsaXN0X2VtcHR5KCZpbmZvLT5tc2dzX3RvX2RlbGl2ZXIpKQorCQkJbGlzdF9zcGxp Y2VfaW5pdCgmaW5mby0+bXNnc190b19kZWxpdmVyLCAmdG9fZGVsaXZlcik7CisKKwkJaW5m by0+bXNnX2RlbGl2ZXJ5X2luX3Byb2dyZXNzID0gMTsKKwkJaXBtaV9zZXJpYWxfdW5sb2Nr X2NvbmQoaW5mbywgZmxhZ3MpOworCQl3aGlsZSAod2RvZ19wcmV0aW1lb3V0X2NvdW50ID4g MCkgeworCQkJaXBtaV9zbWlfd2F0Y2hkb2dfcHJldGltZW91dChpbmZvLT5pbnRmKTsKKwkJ CXdkb2dfcHJldGltZW91dF9jb3VudC0tOworCQl9CisKKwkJbGlzdF9mb3JfZWFjaF9lbnRy eV9zYWZlKG1zZywgcywgJnRvX2RlbGl2ZXIsIGxpbmspIHsKKwkJCWxpc3RfZGVsKCZtc2ct PmxpbmspOworCQkJaXBtaV9zbWlfbXNnX3JlY2VpdmVkKGluZm8tPmludGYsIG1zZyk7CisJ CX0KKwkJaWYgKGluZm8tPnRvX3NlbmQpIHsKKwkJCWlmIChkZWJ1ZyAmIElQTUlfU0VSX0RF QlVHX1RJTUlORykgeworCQkJCXN0cnVjdCB0aW1ldmFsIHQ7CisJCQkJZG9fZ2V0dGltZW9m ZGF5KCZ0KTsKKwkJCQlwcmludGsoS0VSTl9ERUJVRyBQRlgKKwkJCQkgICAgICAgInNlbmQg dG8gY29kZWMgYXQgJWxkLiU2LjZsZFxuIiwKKwkJCQkgICAgICAgaW5mby0+bmFtZSwgaW5m by0+bGluZSwKKwkJCQkgICAgICAgdC50dl9zZWMsIHQudHZfdXNlYyk7CisJCQl9CisJCQlp bmZvLT5zZW5kX3NlcSsrOworCQkJaWYgKGluZm8tPnNlbmRfc2VxID09IDApCisJCQkJaW5m by0+c2VuZF9zZXErKzsKKwkJCW1zZyA9IGluZm8tPnRvX3NlbmQ7CisJCQlpbmZvLT50b19z ZW5kID0gTlVMTDsKKwkJCXJ2ID0gaW5mby0+Y29kZWMtPnNlbmRfbXNnKGluZm8tPmNvZGVj X2RhdGEsCisJCQkJCQkgICBtc2ctPmRhdGEsCisJCQkJCQkgICBtc2ctPmRhdGFfc2l6ZSwK KwkJCQkJCSAgIGluZm8tPnNlbmRfc2VxKTsKKwkJCWlmIChydikKKwkJCQlwcmludGsoS0VS Tl9XQVJOSU5HIFBGWAorCQkJCSAgICAgICAiRXJyb3IgZnJvbSBjb2RlYyBzZW5kX21zZzog JWRcbiIsCisJCQkJICAgICAgIGluZm8tPm5hbWUsIGluZm8tPmxpbmUsIHJ2KTsKKwkJfQor CQlmbGFncyA9IGlwbWlfc2VyaWFsX2xvY2tfY29uZChpbmZvLCAmb2ZsYWdzKTsKKwkJaWYg KGluZm8tPm1zZ19kZWxpdmVyeV9pbl9wcm9ncmVzcyA+IDEpIHsKKwkJCS8qIEFub3RoZXIg dGhyZWFkIHB1dCB0aGluZ3MgaW4gdG8gYmUgZGVsaXZlcmVkLCBnbworCQkJICogYWhlYWQg YW5kIGRvIHRoZSBkZWxpdmVyeSBzaW5jZSBpdCBjb3VsZG4ndC4gKi8KKwkJCWluZm8tPm1z Z19kZWxpdmVyeV9pbl9wcm9ncmVzcyA9IDA7CisJCQlnb3RvIHJlc3RhcnRfZGVsaXZlcnk7 CisJCX0KKwkJaW5mby0+bXNnX2RlbGl2ZXJ5X2luX3Byb2dyZXNzID0gMDsKKwl9Cisgb3V0 X3VubG9jazoKKwlpcG1pX3NlcmlhbF91bmxvY2tfY29uZChpbmZvLCBmbGFncyk7Cit9CisK K3Vuc2lnbmVkIGludCBpcG1pX3NlcmlhbF9sbF94bWl0KHN0cnVjdCBpcG1pX3NlcmlhbF9p bmZvICppbmZvLAorCQkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICAgICAqYnVmLAorCQkJCSB1 bnNpZ25lZCBpbnQgICAgICAgICAgICBjb3VudCkKK3sKKwlzdHJ1Y3QgdWFydF9wb3J0ICpw b3J0OworCXVuc2lnbmVkIGxvbmcgICAgb2ZsYWdzLCAqZmxhZ3M7CisJdW5zaWduZWQgaW50 ICAgICBydjsKKworCWlmIChkZWJ1ZyAmIElQTUlfU0VSX0RFQlVHX0NIQVJfVElNSU5HKSB7 CisJCXN0cnVjdCB0aW1ldmFsIHQ7CisJCWRvX2dldHRpbWVvZmRheSgmdCk7CisJCXByaW50 ayhLRVJOX0RFQlVHIFBGWCAieG1pdCBjaGFycyBhdCAlbGQuJTYuNmxkXG4iLAorCQkgICAg ICAgaW5mby0+bmFtZSwgaW5mby0+bGluZSwgdC50dl9zZWMsIHQudHZfdXNlYyk7CisJfQor CisJZmxhZ3MgPSBpcG1pX3NlcmlhbF9sb2NrX2NvbmQoaW5mbywgJm9mbGFncyk7CisJcG9y dCA9IGluZm8tPnBvcnQ7CisJaXBtaV9zZXJpYWxfdW5sb2NrX2NvbmQoaW5mbywgZmxhZ3Mp OworCWlmICghcG9ydCkKKwkJcmV0dXJuIDA7CisKKwlydiA9IHVhcnRfZGlyZWN0X3dyaXRl KHBvcnQsIGJ1ZiwgY291bnQsIGZsYWdzICE9IE5VTEwpOworCWlmIChydiA+IDApCisJCXNl cmlhbF9hZGRfc3RhdChpbmZvLCB4bWl0X2NoYXJzLCBydik7CisKKwlpZiAoZGVidWcgJiBJ UE1JX1NFUl9ERUJVR19EQVRBKSB7CisJCWludCBpOworCQlwcmludGsoS0VSTl9ERUJVRyBQ RlggIk91dGdvaW5nIGRhdGE6IiwKKwkJICAgICAgIGluZm8tPm5hbWUsIGluZm8tPmxpbmUp OworCQlmb3IgKGkgPSAwOyBpIDwgcnY7IGkrKykKKwkJCXByaW50aygiICUyLjJ4KCVjKSIs IGJ1ZltpXSwKKwkJCSAgICAgICBpc3ByaW50KGJ1ZltpXSkgPyBidWZbaV0gOiAnICcpOwor CQlwcmludGsoIlxuIik7CisJfQorCXJldHVybiBydjsKK30KK0VYUE9SVF9TWU1CT0woaXBt aV9zZXJpYWxfbGxfeG1pdCk7CisKK3ZvaWQgaXBtaV9zZXJpYWxfbGxfYXR0bihzdHJ1Y3Qg aXBtaV9zZXJpYWxfaW5mbyAqaW5mbykKK3sKKwl1bnNpZ25lZCBsb25nIG9mbGFncywgKmZs YWdzOworCisJaWYgKGluZm8tPnN0b3Bfb3BlcmF0aW9uKQorCQlyZXR1cm47CisKKwlmbGFn cyA9IGlwbWlfc2VyaWFsX2xvY2tfY29uZChpbmZvLCAmb2ZsYWdzKTsKKwlzZXJpYWxfaW5j X3N0YXQoaW5mbywgYXR0ZW50aW9ucyk7CisJaWYgKGluZm8tPnBvcnQpCisJCWluZm8tPnJl cV9mbGFncyA9IDE7CisJc3RhcnRfbmV4dF9tc2coaW5mbywgZmxhZ3MpOworfQorRVhQT1JU X1NZTUJPTChpcG1pX3NlcmlhbF9sbF9hdHRuKTsKKwordm9pZCBpcG1pX3NlcmlhbF9sbF9y ZWN2KHN0cnVjdCBpcG1pX3NlcmlhbF9pbmZvICppbmZvLAorCQkJIGNvbnN0IHVuc2lnbmVk IGNoYXIgICAgICptc2csCisJCQkgdW5zaWduZWQgaW50ICAgICAgICAgICAgbGVuLAorCQkJ IHVuc2lnbmVkIGludCAgICAgICAgICAgIHNlcSkKK3sKKwlzdHJ1Y3QgaXBtaV9zbWlfbXNn ICpybXNnOworCWludCAgICAgICAgICAgICAgICAgdHJ1bmNhdGVkID0gMDsKKwl1bnNpZ25l ZCBsb25nICAgICAgIG9mbGFncywgKmZsYWdzOworCisJaWYgKGluZm8tPmludGVybmFsX21z Z19oYW5kbGVyKSB7CisJCWluZm8tPmludGVybmFsX21zZ19oYW5kbGVyKGluZm8sIG1zZywg bGVuKTsKKwkJcmV0dXJuOworCX0KKworCWZsYWdzID0gaXBtaV9zZXJpYWxfbG9ja19jb25k KGluZm8sICZvZmxhZ3MpOworCWlmICghaW5mby0+aW50ZikgeworCQlpcG1pX3NlcmlhbF91 bmxvY2tfY29uZChpbmZvLCBmbGFncyk7CisJCXJldHVybjsKKwl9CisJaWYgKHNlcSAmJiAo c2VxICE9IGluZm8tPnNlbmRfc2VxKSkgeworCQkvKiBTZXF1ZW5jZSBkb2Vzbid0IG1hdGNo IGFuZCBpcyBub24temVybywganVzdCBpZ25vcmUuICovCisJCWlwbWlfc2VyaWFsX3VubG9j a19jb25kKGluZm8sIGZsYWdzKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoZGVidWcgJiBJUE1J X1NFUl9ERUJVR19TVEFURSkKKwkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJsbF9yZWN2IHN0 YXRlID0gJWRcbiIsCisJCSAgICAgICBpbmZvLT5uYW1lLCBpbmZvLT5saW5lLCBpbmZvLT5z dGF0ZSk7CisJc3dpdGNoIChpbmZvLT5zdGF0ZSkgeworCWNhc2UgU0VSSUFMX0VNUFRZOgor CQlicmVhazsKKworCWNhc2UgU0VSSUFMX0hBTkRMSU5HX01TRzoKKwkJc2VyaWFsX2luY19z dGF0KGluZm8sIGNvbXBsZXRlX3RyYW5zYWN0aW9ucyk7CisJCXJtc2cgPSBpbmZvLT5jdXJy X21zZzsKKwkJaWYgKGxlbiA+IElQTUlfTUFYX01TR19MRU5HVEgpIHsKKwkJCXJtc2ctPnJz cF9zaXplID0gSVBNSV9NQVhfTVNHX0xFTkdUSDsKKwkJCXRydW5jYXRlZCA9IDE7CisJCX0g ZWxzZQorCQkJcm1zZy0+cnNwX3NpemUgPSBsZW47CisJCW1lbWNweShybXNnLT5yc3AsIG1z Zywgcm1zZy0+cnNwX3NpemUpOworCQlpZiAodHJ1bmNhdGVkICYmIChtc2dbMl0gPT0gMCkp CisJCQlybXNnLT5yc3BbMl0gPSBJUE1JX0VSUl9NU0dfVFJVTkNBVEVEOworCQlxdWV1ZV9y ZXR1cm5fbXNnKGluZm8pOworCQlicmVhazsKKworCWNhc2UgU0VSSUFMX0dFVFRJTkdfRkxB R1M6CisJCWluZm8tPmN1cnJfbXNnLT5kb25lKGluZm8tPmN1cnJfbXNnKTsKKwkJaW5mby0+ Y3Vycl9tc2cgPSBOVUxMOworCQkvKiBXZSBnb3QgdGhlIGZsYWdzIGZyb20gdGhlIFNNSSwg bm93IGZldGNoIHRoZW0uICovCisJCWlmICgobXNnWzJdID09IDApICYmIChsZW4gPj0gNCkp IHsKKwkJCXNlcmlhbF9pbmNfc3RhdChpbmZvLCBmbGFnX2ZldGNoZXMpOworCQkJaW5mby0+ bXNnX2ZsYWdzID0gbXNnWzNdOworCQl9CisJCWJyZWFrOworCisJY2FzZSBTRVJJQUxfR0VU VElOR19FVkVOVFM6CisJCXJtc2cgPSBpbmZvLT5jdXJyX21zZzsKKwkJaWYgKGxlbiA+IElQ TUlfTUFYX01TR19MRU5HVEgpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICJnb3Qg ZXZlbnQgcmVzcG9uc2UgIgorCQkJICAgICAgICJ0aGF0IHdhcyB0b28gbG9uZzogJWRcbiIs IGluZm8tPm5hbWUsCisJCQkgICAgICAgaW5mby0+bGluZSwgbGVuKTsKKwkJCWJyZWFrOwor CQl9CisJCXJtc2ctPnJzcF9zaXplID0gbGVuOworCQltZW1jcHkocm1zZy0+cnNwLCBtc2cs IHJtc2ctPnJzcF9zaXplKTsKKwkJaWYgKHJtc2ctPnJzcFsyXSAhPSAwKSB7CisJCQkvKiBF cnJvciBnZXR0aW5nIGV2ZW50LCBwcm9iYWJseSBkb25lLiAqLworCQkJcm1zZy0+ZG9uZShy bXNnKTsKKwkJCWluZm8tPmN1cnJfbXNnID0gTlVMTDsKKwkJfSBlbHNlIHsKKwkJCXNlcmlh bF9pbmNfc3RhdChpbmZvLCBldmVudHMpOworCisJCQlxdWV1ZV9yZXR1cm5fbXNnKGluZm8p OworCQl9CisJCWJyZWFrOworCisJY2FzZSBTRVJJQUxfQ0xFQVJJTkdfRkxBR1M6CisJCS8q IFdlIGNsZWFyZWQgdGhlIGZsYWdzLiAqLworCQlpbmZvLT5jdXJyX21zZy0+ZG9uZShpbmZv LT5jdXJyX21zZyk7CisJCWluZm8tPmN1cnJfbXNnID0gTlVMTDsKKwkJaWYgKG1zZ1syXSAh PSAwKSB7CisJCQkvKiBFcnJvciBjbGVhcmluZyBmbGFncyAqLworCQkJcHJpbnRrKEtFUk5f V0FSTklORworCQkJICAgICAgIFBGWCAiRXJyb3IgY2xlYXJpbmcgZmxhZ3M6ICUyLjJ4XG4i LAorCQkJICAgICAgIGluZm8tPm5hbWUsIGluZm8tPmxpbmUsIG1zZ1syXSk7CisJCX0KKwkJ aW5mby0+c3RhdGUgPSBTRVJJQUxfRU1QVFk7CisJCWJyZWFrOworCisJY2FzZSBTRVJJQUxf R0VUVElOR19NRVNTQUdFUzoKKwkJcm1zZyA9IGluZm8tPmN1cnJfbXNnOworCQlpZiAobGVu ID4gSVBNSV9NQVhfTVNHX0xFTkdUSCkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlgg ImdvdCBpbmNvbWluZyBjb21tYW5kICIKKwkJCSAgICAgICAidGhhdCB3YXMgdG9vIGxvbmc6 ICVkXG4iLCBpbmZvLT5uYW1lLAorCQkJICAgICAgIGluZm8tPmxpbmUsIGxlbik7CisJCQli cmVhazsKKwkJfQorCQlybXNnLT5yc3Bfc2l6ZSA9IGxlbjsKKwkJbWVtY3B5KHJtc2ctPnJz cCwgbXNnLCBybXNnLT5yc3Bfc2l6ZSk7CisJCWlmIChybXNnLT5yc3BbMl0gIT0gMCkgewor CQkJLyogRXJyb3IgZ2V0dGluZyBtZXNzYWdlLCBwcm9iYWJseSBkb25lLiAqLworCQkJcm1z Zy0+ZG9uZShybXNnKTsKKwkJCWluZm8tPmN1cnJfbXNnID0gTlVMTDsKKwkJfSBlbHNlIHsK KwkJCXNlcmlhbF9pbmNfc3RhdChpbmZvLCBpbmNvbWluZ19tZXNzYWdlcyk7CisJCQlxdWV1 ZV9yZXR1cm5fbXNnKGluZm8pOworCQl9CisJCWJyZWFrOworCX0KKwlpbmZvLT5zdGF0ZSA9 IFNFUklBTF9FTVBUWTsgLyogVGVsbCBzdGFydF9uZXh0X21zZyB0byBkbyBzb21ldGhpbmcu ICovCisJc3RhcnRfbmV4dF9tc2coaW5mbywgZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTChp cG1pX3NlcmlhbF9sbF9yZWN2KTsKKwordm9pZCBpcG1pX3NlcmlhbF9sbF9hc3luYyhzdHJ1 Y3QgaXBtaV9zZXJpYWxfaW5mbyAqaW5mbywKKwkJCSAgY29uc3QgdW5zaWduZWQgY2hhciAq bXNnLCB1bnNpZ25lZCBpbnQgbGVuKQoreworCXN0cnVjdCBpcG1pX3NtaV9tc2cgKnJtc2c7 CisJdW5zaWduZWQgbG9uZyAqZmxhZ3MsIG9mbGFnczsKKworCWlmICgobXNnWzBdID4+IDIp ICE9IElQTUlfTkVURk5fQVBQX1JFU1BPTlNFKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcg UEZYICJHb3QgaW52YWxpZCBhc3luYyBORVRGTjogMHgleCIsCisJCSAgICAgICBpbmZvLT5u YW1lLCBpbmZvLT5saW5lLCBtc2dbMF0gPj4gMik7CisJCXJldHVybjsKKwl9CisKKwlmbGFn cyA9IGlwbWlfc2VyaWFsX2xvY2tfY29uZChpbmZvLCAmb2ZsYWdzKTsKKwlpZiAoIWluZm8t PmludGYpIHsKKwkJaXBtaV9zZXJpYWxfdW5sb2NrX2NvbmQoaW5mbywgZmxhZ3MpOworCQly ZXR1cm47CisJfQorCisJLyogVmFsaWRhdGUgdGhhdCB0aGUgbWVzc2FnZSBpcyBhbGxvd2Vk IGFuZCBkbyBzdGF0cy4gKi8KKwlzd2l0Y2ggKG1zZ1sxXSkgeworCWNhc2UgSVBNSV9HRVRf TVNHX0NNRDoKKwkJc2VyaWFsX2luY19zdGF0KGluZm8sIGluY29taW5nX21lc3NhZ2VzKTsK KwkJYnJlYWs7CisKKwljYXNlIElQTUlfUkVBRF9FVkVOVF9NU0dfQlVGRkVSX0NNRDoKKwkJ c2VyaWFsX2luY19zdGF0KGluZm8sIGV2ZW50cyk7CisJCWJyZWFrOworCisJZGVmYXVsdDoK KwkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIkdvdCBpbnZhbGlkIGFzeW5jIGNvbW1hbmQ6 IDB4JXgiLAorCQkgICAgICAgaW5mby0+bmFtZSwgaW5mby0+bGluZSwgbXNnWzFdKTsKKwkJ Z290byBvdXQ7CisJfQorCisJaWYgKGxlbiA+IElQTUlfTUFYX01TR19MRU5HVEgpIHsKKwkJ LyogRklYTUUgLSBhZGQgcGVnICovCisJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICJnb3Qg aW5jb21pbmcgYXN5bmMgbXNnICIKKwkJICAgICAgICJ0aGF0IHdhcyB0b28gbG9uZzogJWRc biIsIGluZm8tPm5hbWUsIGluZm8tPmxpbmUsIGxlbik7CisJCWdvdG8gb3V0OworCX0KKwly bXNnID0gaXBtaV9hbGxvY19zbWlfbXNnKCk7CisJaWYgKCFybXNnKSB7CisJCS8qIEZJWE1F IC0gYWRkIHBlZyAqLworCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiRHJvcHBlZCBpbmNv bWluZyBhc3luYyBtc2csICIKKwkJICAgICAgICJjb3VsZCBub3QgYWxsb2NhdGUgbWVzc2Fn ZVxuIiwgaW5mby0+bmFtZSwgaW5mby0+bGluZSk7CisJCWdvdG8gb3V0OworCX0KKworCS8q IE1ha2UgaXQgbG9vayBsaWtlIHdlIHNlbnQgdGhlIGNvbW1hbmQuICovCisJcm1zZy0+ZGF0 YVswXSA9IG1zZ1swXSAmIH4oMSA8PCAyKTsgLyogQ29udmVydCByZXNwb25zZSB0byByZXF1 ZXN0ICovCisJcm1zZy0+ZGF0YVsxXSA9IG1zZ1sxXTsgLyogY29tbWFuZCAqLworCXJtc2ct PmRhdGFfc2l6ZSA9IDI7CisKKwlybXNnLT5yc3Bfc2l6ZSA9IGxlbjsKKwltZW1jcHkocm1z Zy0+cnNwLCBtc2csIHJtc2ctPnJzcF9zaXplKTsKKwlxdWV1ZV9hc3luY19tc2coaW5mbywg cm1zZyk7CisKKyBvdXQ6CisJc3RhcnRfbmV4dF9tc2coaW5mbywgZmxhZ3MpOworfQorRVhQ T1JUX1NZTUJPTChpcG1pX3NlcmlhbF9sbF9hc3luYyk7CisKK3ZvaWQgaXBtaV9zZXJpYWxf bGxfcHJvdG9jb2xfdmlvbGF0aW9uKHN0cnVjdCBpcG1pX3NlcmlhbF9pbmZvICppbmZvKQor eworCXNlcmlhbF9pbmNfc3RhdChpbmZvLCBwcm90b2NvbF92aW9sYXRpb25zKTsKK30KK0VY UE9SVF9TWU1CT0woaXBtaV9zZXJpYWxfbGxfcHJvdG9jb2xfdmlvbGF0aW9uKTsKKwordm9p ZCBpcG1pX3NlcmlhbF9sbF9jaGVja3N1bV9lcnJvcihzdHJ1Y3QgaXBtaV9zZXJpYWxfaW5m byAqaW5mbykKK3sKKwlzZXJpYWxfaW5jX3N0YXQoaW5mbywgY2hlY2tzdW1fZXJyb3JzKTsK K30KK0VYUE9SVF9TWU1CT0woaXBtaV9zZXJpYWxfbGxfY2hlY2tzdW1fZXJyb3IpOworCitz dGF0aWMgdm9pZCBpcG1pX3NlcmlhbF9oYW5kbGVfY2hhcihzdHJ1Y3QgdWFydF9wb3J0ICpw b3J0LAorCQkJCSAgICB1bnNpZ25lZCBpbnQgc3RhdHVzLAorCQkJCSAgICB1bnNpZ25lZCBp bnQgb3ZlcnJ1biwgdW5zaWduZWQgaW50IGNoLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgZmxh ZykKK3sKKwlzdHJ1Y3QgaXBtaV9zZXJpYWxfaW5mbyAqaW5mbyA9IHBvcnQtPmluZm8tPmRp cmVjdC0+ZGlyZWN0X2RhdGE7CisJdW5zaWduZWQgaW50IG5leHQ7CisKKwlpZiAoZGVidWcg JiBJUE1JX1NFUl9ERUJVR19DSEFSX1RJTUlORykgeworCQlzdHJ1Y3QgdGltZXZhbCB0Owor CQlkb19nZXR0aW1lb2ZkYXkoJnQpOworCQlwcmludGsoS0VSTl9ERUJVRyBQRlggIkdvdCBj aGFyICUyLjJ4KCVjKSBhdCAlbGQuJTYuNmxkXG4iLAorCQkgICAgICAgaW5mby0+bmFtZSwg aW5mby0+bGluZSwKKwkJICAgICAgIGNoLCBpc3ByaW50KGNoKSA/IGNoIDogJyAnLAorCQkg ICAgICAgdC50dl9zZWMsIHQudHZfdXNlYyk7CisJfQorCisJc2VyaWFsX2luY19zdGF0KGlu Zm8sIHJlY3ZfY2hhcnMpOworCisJaWYgKHN0YXR1cyAmIG92ZXJydW4pCisJCXNlcmlhbF9p bmNfc3RhdChpbmZvLCBvdmVycnVucyk7CisKKwlpZiAoZGVidWcgJiBJUE1JX1NFUl9ERUJV R19EQVRBKQorCQlwcmludGsoS0VSTl9ERUJVRyBQRlggIkluY29taW5nIGNoYXI6ICUyLjJ4 ICclYydcbiIsCisJCSAgICAgICBpbmZvLT5uYW1lLCBpbmZvLT5saW5lLCBjaCwgaXNwcmlu dChjaCkgPyBjaCA6ICcgJyk7CisKKwkvKgorCSAqIE5vIGxvY2sgaXMgbmVlZGVkLiAgV2Ug YXJlIHRoZSBvbmx5IHBsYWNlIHRoYXQgY2hhbmdlcworCSAqIHNidWZfbmV4dCwgYW5kIHdl IGFyZSBzaW5nbGUtdGhyZWFkZWQgaGVyZSBkdWUgdG8gdGhlIHBvcnQKKwkgKiBsb2NrLgor CSAqLworCW5leHQgPSBTQlVGX05FWFQoaW5mby0+c2J1Zl9uZXh0KTsKKwlpZiAobmV4dCA9 PSBpbmZvLT5zYnVmX3N0YXJ0KSB7CisJCXNlcmlhbF9pbmNfc3RhdChpbmZvLCBvdmVycnVu cyk7CisJCXJldHVybjsKKwl9CisJaW5mby0+c2J1ZltpbmZvLT5zYnVmX25leHRdID0gY2g7 CisJc21wX3dtYigpOworCWluZm8tPnNidWZfbmV4dCA9IG5leHQ7Cit9CisKK3N0YXRpYyB2 b2lkIGlwbWlfc2VyaWFsX3B1c2goc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1 Y3QgaXBtaV9zZXJpYWxfaW5mbyAqaW5mbyA9IHBvcnQtPmluZm8tPmRpcmVjdC0+ZGlyZWN0 X2RhdGE7CisJdW5zaWduZWQgbG9uZyBvZmxhZ3MsICpmbGFnczsKKwlzdHJ1Y3QgaXBtaV9z ZXJpYWxfY29kZWNfZGF0YSAqY2RhdGE7CisJdW5zaWduZWQgY2hhciBjaDsKKworCWlmIChk ZWJ1ZyAmIElQTUlfU0VSX0RFQlVHX0NIQVJfVElNSU5HKSB7CisJCXN0cnVjdCB0aW1ldmFs IHQ7CisJCWRvX2dldHRpbWVvZmRheSgmdCk7CisJCXByaW50ayhLRVJOX0RFQlVHIFBGWCAi R290IHB1c2ggYXQgJWxkLiU2LjZsZFxuIiwKKwkJICAgICAgIGluZm8tPm5hbWUsIGluZm8t PmxpbmUsIHQudHZfc2VjLCB0LnR2X3VzZWMpOworCX0KKworCWNkYXRhID0gaW5mby0+Y29k ZWNfZGF0YTsKKwlpZiAoIWNkYXRhKQorCQlyZXR1cm47CisKKwlmbGFncyA9IGlwbWlfc2Vy aWFsX2xvY2tfY29uZChpbmZvLCAmb2ZsYWdzKTsKKwlpZiAoaW5mby0+ZGVsaXZlcmluZ19j aGFyKQorCQlnb3RvIG91dF91bmxvY2s7CisJaW5mby0+ZGVsaXZlcmluZ19jaGFyID0gMTsK Kwl3aGlsZSAoaW5mby0+c2J1Zl9uZXh0ICE9IGluZm8tPnNidWZfc3RhcnQpIHsKKwkJY2gg PSBpbmZvLT5zYnVmW2luZm8tPnNidWZfc3RhcnRdOworCQlpbmZvLT5zYnVmX3N0YXJ0ID0g U0JVRl9ORVhUKGluZm8tPnNidWZfc3RhcnQpOworCQlpcG1pX3NlcmlhbF91bmxvY2tfY29u ZChpbmZvLCBmbGFncyk7CisJCWluZm8tPmNvZGVjLT5oYW5kbGVfY2hhcihjZGF0YSwgY2gp OworCQlmbGFncyA9IGlwbWlfc2VyaWFsX2xvY2tfY29uZChpbmZvLCAmb2ZsYWdzKTsKKwl9 CisJaW5mby0+ZGVsaXZlcmluZ19jaGFyID0gMDsKKyBvdXRfdW5sb2NrOgorCWlwbWlfc2Vy aWFsX3VubG9ja19jb25kKGluZm8sIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgaXBtaV9z ZXJpYWxfdHhfcmVhZHkodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBpcG1pX3Nl cmlhbF9pbmZvICppbmZvID0gKHN0cnVjdCBpcG1pX3NlcmlhbF9pbmZvICopIGRhdGE7CisJ c3RydWN0IGlwbWlfc2VyaWFsX2NvZGVjX2RhdGEgKmNkYXRhOworCisJY2RhdGEgPSBpbmZv LT5jb2RlY19kYXRhOworCWlmIChjZGF0YSkKKwkJaW5mby0+Y29kZWMtPnR4X3JlYWR5KGNk YXRhKTsKK30KKworc3RhdGljIHZvaWQgdGltZW91dF9oYW5kbGluZyhzdHJ1Y3QgaXBtaV9z ZXJpYWxfaW5mbyAqaW5mbywKKwkJCSAgICAgdW5zaWduZWQgaW50ICAgICAgICAgICAgZGVs YXlfc2luY2VfbGFzdCkKK3sKKwl1bnNpZ25lZCBsb25nIG9mbGFncywgKmZsYWdzOworCisJ aWYgKGluZm8tPmNvZGVjLT50aW1lcl90aWNrKQorCQlpbmZvLT5jb2RlYy0+dGltZXJfdGlj ayhpbmZvLT5jb2RlY19kYXRhLCBkZWxheV9zaW5jZV9sYXN0KTsKKworCWZsYWdzID0gaXBt aV9zZXJpYWxfbG9ja19jb25kKGluZm8sICZvZmxhZ3MpOworCisJaW5mby0+ZmxhZ190aW1l ciAtPSBkZWxheV9zaW5jZV9sYXN0OworCWlmIChpbmZvLT5mbGFnX3RpbWVyIDw9IDApIHsK KwkJaWYgKCFpbmZvLT5zdG9wX29wZXJhdGlvbiAmJiBpbmZvLT5zdXBwb3J0c19mbGFncykK KwkJCWluZm8tPnJlcV9mbGFncyA9IDE7CisJCWluZm8tPmZsYWdfdGltZXIgPSBpbmZvLT5m bGFnX3RpbWVvdXQ7CisJfQorCisJaW5mby0+bXNnX3RpbWVvdXQgLT0gZGVsYXlfc2luY2Vf bGFzdDsKKwlpZiAoaW5mby0+bXNnX3RpbWVvdXQgPiAwKQorCQkvKiBIYXZlbid0IHRpbWVk IG91dCB5ZXQuICovCisJCWdvdG8gb3V0X3VubG9jazsKKworCXNlcmlhbF9pbmNfc3RhdChp bmZvLCB0aW1lb3V0cyk7CisKKwkvKgorCSAqIE5vdGUgdGhhdCBpZiB3ZSBhcmUgZG9pbmcg ZmxhZ3MsIGV2ZW50cywgb3IgdGhpbmdzIG9mIHRoYXQKKwkgKiBuYXR1cmUsIGp1c3QgaWdu b3JlIGZhaWx1cmVzIGFuZCBjb250aW51ZSBvbi4gIFRoZQorCSAqIG9wZXJhdGlvbiB3aWxs IGJlIHJldHJpZWQgbGF0ZXIsIHNvIG5vIG5lZWQgdG8gZnJldC4KKwkgKiBKdXN0IHJldHJ5 IG1lc3NhZ2VzLgorCSAqLworCWlmIChkZWJ1ZyAmIElQTUlfU0VSX0RFQlVHX1NUQVRFKQor CQlwcmludGsoS0VSTl9ERUJVRyBQRlggInRpbWVvdXQgc3RhdGUgPSAlZFxuIiwKKwkJICAg ICAgIGluZm8tPm5hbWUsIGluZm8tPmxpbmUsIGluZm8tPnN0YXRlKTsKKwlzd2l0Y2ggKGlu Zm8tPnN0YXRlKSB7CisJY2FzZSBTRVJJQUxfRU1QVFk6CisJCWJyZWFrOworCisJY2FzZSBT RVJJQUxfSEFORExJTkdfTVNHOgorCQlpbmZvLT5yZXRyaWVzLS07CisJCWlmIChpbmZvLT5y ZXRyaWVzID4gMCkKKwkJCXNlbmRfY3Vycl9tc2coaW5mbyk7IC8qIFJldHJ5IHRoZSBzZW5k ICovCisJCWVsc2UgeworCQkJcXVldWVfcmV0dXJuX2Vycl9tc2coaW5mbywgSVBNSV9USU1F T1VUX0VSUik7CisJCQlpbmZvLT5zdGF0ZSA9IFNFUklBTF9FTVBUWTsKKwkJfQorCQlicmVh azsKKworCWNhc2UgU0VSSUFMX0dFVFRJTkdfRkxBR1M6CisJY2FzZSBTRVJJQUxfQ0xFQVJJ TkdfRkxBR1M6CisJCWluZm8tPmN1cnJfbXNnLT5kb25lKGluZm8tPmN1cnJfbXNnKTsKKwkJ aW5mby0+Y3Vycl9tc2cgPSBOVUxMOworCQlpbmZvLT5zdGF0ZSA9IFNFUklBTF9FTVBUWTsK KwkJYnJlYWs7CisKKwljYXNlIFNFUklBTF9HRVRUSU5HX0VWRU5UUzoKKwkJaW5mby0+Y3Vy cl9tc2ctPmRvbmUoaW5mby0+Y3Vycl9tc2cpOworCQlpbmZvLT5jdXJyX21zZyA9IE5VTEw7 CisJCWluZm8tPnN0YXRlID0gU0VSSUFMX0VNUFRZOworCQlicmVhazsKKworCWNhc2UgU0VS SUFMX0dFVFRJTkdfTUVTU0FHRVM6CisJCWluZm8tPmN1cnJfbXNnLT5kb25lKGluZm8tPmN1 cnJfbXNnKTsKKwkJaW5mby0+Y3Vycl9tc2cgPSBOVUxMOworCQlpbmZvLT5zdGF0ZSA9IFNF UklBTF9FTVBUWTsKKwkJYnJlYWs7CisJfQorCisgb3V0X3VubG9jazoKKwlzdGFydF9uZXh0 X21zZyhpbmZvLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIGlwbWlfc2VyaWFsX3RpbWVv dXQodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBpcG1pX3NlcmlhbF9pbmZvICpp bmZvID0gKHN0cnVjdCBpcG1pX3NlcmlhbF9pbmZvICopIGRhdGE7CisJdW5zaWduZWQgbG9u ZyBjdXJyX2ppZiA9IGppZmZpZXM7CisKKwlzZXJpYWxfaW5jX3N0YXQoaW5mbywgdGltZXJf dGlja3MpOworCisJdGltZW91dF9oYW5kbGluZyhpbmZvLCAoKGN1cnJfamlmIC0gaW5mby0+ bGFzdF90aW1lb3V0X2ppZmZpZXMpCisJCQkJKiBJUE1JX1NFUklBTF9VU0VDX1BFUl9KSUZG WSkpOworCisJaW5mby0+bGFzdF90aW1lb3V0X2ppZmZpZXMgPSBjdXJyX2ppZjsKKwltb2Rf dGltZXIoJmluZm8tPnRpbWVyLCBjdXJyX2ppZiArIElQTUlfU0VSSUFMX1RJTUVPVVRfSklG RklFUyk7Cit9CisKK3N0YXRpYyBpbnQgaXBtaV9zZXJpYWxfc3RhcnRfcHJvY2Vzc2luZyh2 b2lkICpzZW5kX2luZm8sIGlwbWlfc21pX3QgaW50ZikKK3sKKwlzdHJ1Y3QgaXBtaV9zZXJp YWxfaW5mbyAqaW5mbyA9IHNlbmRfaW5mbzsKKwl1bnNpZ25lZCBsb25nIGN1cnJfamlmID0g amlmZmllczsKKworCWluZm8tPmludGYgPSBpbnRmOworCXNtcF93bWIoKTsgLyogTWFrZSBz dXJlIGludGYgaXMgc2V0IGJlZm9yZSBhbnl0aGluZyBlbHNlLiAqLworCisJaW5mby0+dXBw ZXJfbGF5ZXJfcmVhZHkgPSAxOworCWluZm8tPmxhc3RfdGltZW91dF9qaWZmaWVzID0gY3Vy cl9qaWY7CisJbW9kX3RpbWVyKCZpbmZvLT50aW1lciwgY3Vycl9qaWYgKyBJUE1JX1NFUklB TF9USU1FT1VUX0pJRkZJRVMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpcG1p X3NlcmlhbF9wb2xsKHZvaWQgKnNlbmRfaW5mbykKK3sKKwlzdHJ1Y3QgaXBtaV9zZXJpYWxf aW5mbyAqaW5mbyA9IHNlbmRfaW5mbzsKKwlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0OworCXN0 cnVjdCBjaXJjX2J1ZiAqY2lyYzsKKworCXBvcnQgPSBpbmZvLT5wb3J0OworCWlmICghcG9y dCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBObyBuZWVkIGZvciBsb2NrcyBoZXJlLCB0aGF0 IHdvdWxkIHJlc3VsdCBpbiBhIGRlYWRsb2NrIGFuZAorCSAqIHRoZSBsb2NrcyBhcmUgdW5u ZWNlc3NhcnkuCisJICovCisJdWRlbGF5KDEwKTsKKwl0aW1lb3V0X2hhbmRsaW5nKGluZm8s IDEwKTsKKwlpZiAoaW5mby0+cnVuX3RvX2NvbXBsZXRpb24pIHsKKwkJcG9ydC0+b3BzLT5w b2xsKHBvcnQsIFVBUlRfUE9MTF9GTEFHU19UWCB8IFVBUlRfUE9MTF9GTEFHU19SWCk7CisJ fSBlbHNlIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKwkJc3Bpbl9sb2NrX2lycXNhdmUo JnBvcnQtPmxvY2ssIGZsYWdzKTsKKwkJcG9ydC0+b3BzLT5wb2xsX3N0YXJ0dXAocG9ydCwg JmluZm8tPnBvbGxfc3RhdGUpOworCQlwb3J0LT5vcHMtPnBvbGwocG9ydCwgVUFSVF9QT0xM X0ZMQUdTX1RYIHwgVUFSVF9QT0xMX0ZMQUdTX1JYKTsKKwkJcG9ydC0+b3BzLT5wb2xsX3No dXRkb3duKHBvcnQsIGluZm8tPnBvbGxfc3RhdGUpOworCQlzcGluX3VubG9ja19pcnFyZXN0 b3JlKCZwb3J0LT5sb2NrLCBmbGFncyk7CisJfQorCWlmIChpbmZvLT5zYnVmX25leHQgIT0g aW5mby0+c2J1Zl9zdGFydCkKKwkJaXBtaV9zZXJpYWxfcHVzaChwb3J0KTsKKwljaXJjID0g dWFydF9nZXRfY2lyY19idWYocG9ydCk7CisJaWYgKHVhcnRfY2lyY19jaGFyc19mcmVlKGNp cmMpID4gMCkKKwkJaXBtaV9zZXJpYWxfdHhfcmVhZHkoKHVuc2lnbmVkIGxvbmcpIGluZm8p OworfQorCitzdGF0aWMgdm9pZCBpcG1pX3NlcmlhbF9zZW5kZXIodm9pZCAgICAgICAgICAg ICAgICAqc2VuZF9pbmZvLAorCQkJICAgICAgIHN0cnVjdCBpcG1pX3NtaV9tc2cgKm1zZywK KwkJCSAgICAgICBpbnQgICAgICAgICAgICAgICAgIHByaW9yaXR5KQoreworCXN0cnVjdCBp cG1pX3NlcmlhbF9pbmZvICppbmZvID0gc2VuZF9pbmZvOworCXVuc2lnbmVkIGxvbmcgICAg ICAgICAgIG9mbGFncywgKmZsYWdzOworCisJZmxhZ3MgPSBpcG1pX3NlcmlhbF9sb2NrX2Nv bmQoaW5mbywgJm9mbGFncyk7CisJaWYgKCFpbmZvLT5wb3J0KSB7CisJCWluZm8tPmN1cnJf bXNnID0gbXNnOworCQlxdWV1ZV9yZXR1cm5fZXJyX21zZyhpbmZvLCBJUE1JX0VSUl9VTlNQ RUNJRklFRCk7CisJfSBlbHNlIGlmIChwcmlvcml0eSA+IDApCisJCWxpc3RfYWRkX3RhaWwo Jm1zZy0+bGluaywgJmluZm8tPmhwX3htaXRfbXNncyk7CisJZWxzZQorCQlsaXN0X2FkZF90 YWlsKCZtc2ctPmxpbmssICZpbmZvLT54bWl0X21zZ3MpOworCXN0YXJ0X25leHRfbXNnKGlu Zm8sIGZsYWdzKTsKKworCWlmIChpbmZvLT5ydW5fdG9fY29tcGxldGlvbikgeworCQl3aGls ZSAoaW5mby0+Y3Vycl9tc2cpCisJCQlpcG1pX3NlcmlhbF9wb2xsKGluZm8pOworCX0KK30K Kworc3RhdGljIHZvaWQgaXBtaV9zZXJpYWxfcmVxdWVzdF9ldmVudHModm9pZCAqc2VuZF9p bmZvKQoreworCXN0cnVjdCBpcG1pX3NlcmlhbF9pbmZvICppbmZvID0gc2VuZF9pbmZvOwor CXVuc2lnbmVkIGxvbmcgICAgICAgICAgIG9mbGFncywgKmZsYWdzOworCisJZmxhZ3MgPSBp cG1pX3NlcmlhbF9sb2NrX2NvbmQoaW5mbywgJm9mbGFncyk7CisJaWYgKCFpbmZvLT5zdG9w X29wZXJhdGlvbiAmJiBpbmZvLT5wb3J0ICYmIGluZm8tPmRvX2V2ZW50X3JlcXVlc3QKKwkJ CQkmJiBpbmZvLT5oYXNfZXZlbnRfYnVmZmVyKQorCQlpbmZvLT5yZXFfZXZlbnRzID0gMTsK KwlzdGFydF9uZXh0X21zZyhpbmZvLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIGlwbWlf c2VyaWFsX3NldF9ydW5fdG9fY29tcGxldGlvbih2b2lkICpzZW5kX2luZm8sIGludCBydGNf b24pCit7CisJc3RydWN0IGlwbWlfc2VyaWFsX2luZm8gKmluZm8gPSBzZW5kX2luZm87CisJ c3RydWN0IHVhcnRfcG9ydCAqcG9ydDsKKworCWlmIChpbmZvLT5ydW5fdG9fY29tcGxldGlv biA9PSBydGNfb24pCisJCXJldHVybjsKKworCXBvcnQgPSBpbmZvLT5wb3J0OworCWlmICgh cG9ydCkKKwkJcmV0dXJuOworCisJaW5mby0+cnVuX3RvX2NvbXBsZXRpb24gPSBydGNfb247 CisJaWYgKHJ0Y19vbikgeworCQlwb3J0LT5vcHMtPnBvbGxfc3RhcnR1cChwb3J0LCAmaW5m by0+cG9sbF9zdGF0ZSk7CisJCXdoaWxlIChpbmZvLT5jdXJyX21zZykKKwkJCWlwbWlfc2Vy aWFsX3BvbGwoaW5mbyk7CisJfSBlbHNlCisJCXBvcnQtPm9wcy0+cG9sbF9zaHV0ZG93bihw b3J0LCBpbmZvLT5wb2xsX3N0YXRlKTsKK30KKworc3RhdGljIGludCBpcG1pX3NlcmlhbF9p bmNfdXNlY291bnQodm9pZCAqc2VuZF9pbmZvKQoreworCXN0cnVjdCBpcG1pX3NlcmlhbF9p bmZvICppbmZvID0gc2VuZF9pbmZvOworCisJaWYgKCF0cnlfbW9kdWxlX2dldChpbmZvLT5j b2RlYy0+b3duZXIpKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIHZvaWQgaXBtaV9zZXJpYWxfZGVjX3VzZWNvdW50KHZvaWQgKnNlbmRfaW5mbykKK3sK KwlzdHJ1Y3QgaXBtaV9zZXJpYWxfaW5mbyAqaW5mbyA9IHNlbmRfaW5mbzsKKworCW1vZHVs ZV9wdXQoaW5mby0+Y29kZWMtPm93bmVyKTsKK30KKworc3RhdGljIHN0cnVjdCBpcG1pX3Nt aV9oYW5kbGVycyBoYW5kbGVycyA9IHsKKwkub3duZXIgICAgICAgICAgICAgICAgICA9IFRI SVNfTU9EVUxFLAorCS5zdGFydF9wcm9jZXNzaW5nICAgICAgID0gaXBtaV9zZXJpYWxfc3Rh cnRfcHJvY2Vzc2luZywKKwkuc2VuZGVyCQkJPSBpcG1pX3NlcmlhbF9zZW5kZXIsCisJLnJl cXVlc3RfZXZlbnRzCQk9IGlwbWlfc2VyaWFsX3JlcXVlc3RfZXZlbnRzLAorCS5zZXRfcnVu X3RvX2NvbXBsZXRpb24gID0gaXBtaV9zZXJpYWxfc2V0X3J1bl90b19jb21wbGV0aW9uLAor CS5wb2xsCQkJPSBpcG1pX3NlcmlhbF9wb2xsLAorCS5pbmNfdXNlY291bnQJCT0gaXBtaV9z ZXJpYWxfaW5jX3VzZWNvdW50LAorCS5kZWNfdXNlY291bnQJCT0gaXBtaV9zZXJpYWxfZGVj X3VzZWNvdW50Cit9OworCitzdGF0aWMgaW50IHR5cGVfZmlsZV9yZWFkX3Byb2MoY2hhciAq cGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCisJCQkgICAgICAgaW50IGNvdW50LCBp bnQgKmVvZiwgdm9pZCAqZGF0YSkKK3sKKwlyZXR1cm4gc3ByaW50ZihwYWdlLCAic2VyaWFs XG4iKTsKK30KKworc3RhdGljIGludCBwYXJhbV9yZWFkX3Byb2MoY2hhciAqcGFnZSwgY2hh ciAqKnN0YXJ0LCBvZmZfdCBvZmYsCisJCQkgICBpbnQgY291bnQsIGludCAqZW9mLCB2b2lk ICpkYXRhKQoreworCWNoYXIgICAgICAgICAgICAgICAgICAgICpvdXQgPSBwYWdlOworCXN0 cnVjdCBpcG1pX3NlcmlhbF9pbmZvICppbmZvID0gZGF0YTsKKwlzdHJ1Y3Qga3Rlcm1pb3Mg ICAgICAgICAqdCA9ICZpbmZvLT50ZXJtaW9zOworCWludCAgICAgICAgICAgICAgICAgICAg IGk7CisJY2hhciAgICAgICAgICAgICAgICAgICAgcGFyaXR5LCBiaXRzLCBzdG9wLCBvcHRz WzRdOworCisJLyogVHJhbnNsYXRlIGZyb20gdGVybWlvcyBhbmQgbWN0cmwuICovCisJZm9y IChpID0gMDsgYmF1ZF9yYXRlc1tpXS5yYXRlOyBpKyspIHsKKwkJaWYgKCh0LT5jX2NmbGFn ICYgQ0JBVUQpID09IGJhdWRfcmF0ZXNbaV0uY2ZsYWcpCisJCQlicmVhazsKKwl9CisJaWYg KCEodC0+Y19jZmxhZyAmIFBBUkVOQikpCisJCXBhcml0eSA9ICduJzsKKwllbHNlIGlmICh0 LT5jX2NmbGFnICYgUEFST0REKQorCQlwYXJpdHkgPSAnbyc7CisJZWxzZQorCQlwYXJpdHkg PSAnZSc7CisJc3dpdGNoICh0LT5jX2NmbGFnICYgQ1NJWkUpIHsKKwljYXNlIENTNToKKwkJ Yml0cyA9ICc1JzsKKwkJYnJlYWs7CisJY2FzZSBDUzY6CisJCWJpdHMgPSAnNic7CisJCWJy ZWFrOworCWNhc2UgQ1M3OgorCQliaXRzID0gJzcnOworCQlicmVhazsKKwljYXNlIENTODoK KwkJYml0cyA9ICc4JzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYml0cyA9ICc/JzsKKwl9 CisJaWYgKHQtPmNfY2ZsYWcgJiBDU1RPUEIpCisJCXN0b3AgPSAnMic7CisJZWxzZQorCQlz dG9wID0gJzEnOworCW9wdHNbMF0gPSAnXDAnOworCWlmICh0LT5jX2NmbGFnICYgQ1JUU0NU UykKKwkJc3RyY2F0KG9wdHMsICJyIik7CisJaWYgKCEoaW5mby0+cG9ydC0+bWN0cmwgJiBU SU9DTV9SVFMpKQorCQlzdHJjYXQob3B0cywgIlIiKTsKKwlpZiAoIShpbmZvLT5wb3J0LT5t Y3RybCAmIFRJT0NNX0RUUikpCisJCXN0cmNhdChvcHRzLCAiRCIpOworCisJb3V0ICs9IHNw cmludGYob3V0LCAiJXMlZCwlcyVjJWMlYyVzLCVzIiwKKwkJICAgICAgIGluZm8tPm5hbWUs IGluZm8tPmxpbmUsCisJCSAgICAgICBiYXVkX3JhdGVzW2ldLm5hbWUsIHBhcml0eSwgYml0 cywgc3RvcCwgb3B0cywKKwkJICAgICAgIGluZm8tPmNvZGVjLT5uYW1lKTsKKwlvdXQgKz0g aW5mby0+Y29kZWMtPmFkZF9vcHRpb25zKGluZm8tPmNvZGVjX2RhdGEsIG91dCk7CisJb3V0 ICs9IHNwcmludGYob3V0LCAiXG4iKTsKKworCXJldHVybiBvdXQgLSBwYWdlOworfQorCitz dGF0aWMgaW50IHN0YXRfZmlsZV9yZWFkX3Byb2MoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0 LCBvZmZfdCBvZmYsCisJCQkgICAgICAgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0 YSkKK3sKKwljaGFyICAgICAgICAgICAgICAgICAgICAqb3V0ID0gcGFnZTsKKwlzdHJ1Y3Qg aXBtaV9zZXJpYWxfaW5mbyAqaW5mbyA9IGRhdGE7CisKKwlvdXQgKz0gc3ByaW50ZihvdXQs ICJ0aW1lcl90aWNrczogICAgICAgICAgICV1XG4iLAorCQkgICAgICAgc2VyaWFsX2dldF9z dGF0KGluZm8sIHRpbWVyX3RpY2tzKSk7CisJb3V0ICs9IHNwcmludGYob3V0LCAiYXR0ZW50 aW9uczogICAgICAgICAgICAldVxuIiwKKwkJICAgICAgIHNlcmlhbF9nZXRfc3RhdChpbmZv LCBhdHRlbnRpb25zKSk7CisJb3V0ICs9IHNwcmludGYob3V0LCAiZmxhZ19mZXRjaGVzOiAg ICAgICAgICAldVxuIiwKKwkJICAgICAgIHNlcmlhbF9nZXRfc3RhdChpbmZvLCBmbGFnX2Zl dGNoZXMpKTsKKwlvdXQgKz0gc3ByaW50ZihvdXQsICJjb21wbGV0ZV90cmFuc2FjdGlvbnM6 ICV1XG4iLAorCQkgICAgICAgc2VyaWFsX2dldF9zdGF0KGluZm8sIGNvbXBsZXRlX3RyYW5z YWN0aW9ucykpOworCW91dCArPSBzcHJpbnRmKG91dCwgImV2ZW50czogICAgICAgICAgICAg ICAgJXVcbiIsCisJCSAgICAgICBzZXJpYWxfZ2V0X3N0YXQoaW5mbywgZXZlbnRzKSk7CisJ b3V0ICs9IHNwcmludGYob3V0LCAid2F0Y2hkb2dfcHJldGltZW91dHM6ICAldVxuIiwKKwkJ ICAgICAgIHNlcmlhbF9nZXRfc3RhdChpbmZvLCB3YXRjaGRvZ19wcmV0aW1lb3V0cykpOwor CW91dCArPSBzcHJpbnRmKG91dCwgInhtaXRfY2hhcnM6ICAgICAgICAgICAgJXVcbiIsCisJ CSAgICAgICBzZXJpYWxfZ2V0X3N0YXQoaW5mbywgeG1pdF9jaGFycykpOworCW91dCArPSBz cHJpbnRmKG91dCwgInJlY3ZfY2hhcnM6ICAgICAgICAgICAgJXVcbiIsCisJCSAgICAgICBz ZXJpYWxfZ2V0X3N0YXQoaW5mbywgcmVjdl9jaGFycykpOworCW91dCArPSBzcHJpbnRmKG91 dCwgInByb3RvY29sX3Zpb2xhdGlvbnM6ICAgJXVcbiIsCisJCSAgICAgICBzZXJpYWxfZ2V0 X3N0YXQoaW5mbywgcHJvdG9jb2xfdmlvbGF0aW9ucykpOworCW91dCArPSBzcHJpbnRmKG91 dCwgImNoZWNrc3VtX2Vycm9yczogICAgICAgJXVcbiIsCisJCSAgICAgICBzZXJpYWxfZ2V0 X3N0YXQoaW5mbywgY2hlY2tzdW1fZXJyb3JzKSk7CisJb3V0ICs9IHNwcmludGYob3V0LCAi dGltZW91dHM6ICAgICAgICAgICAgICAldVxuIiwKKwkJICAgICAgIHNlcmlhbF9nZXRfc3Rh dChpbmZvLCB0aW1lb3V0cykpOworCW91dCArPSBzcHJpbnRmKG91dCwgIm92ZXJydW5zOiAg ICAgICAgICAgICAgJXVcbiIsCisJCSAgICAgICBzZXJpYWxfZ2V0X3N0YXQoaW5mbywgb3Zl cnJ1bnMpKTsKKworCXJldHVybiBvdXQgLSBwYWdlOworfQorCitzdGF0aWMgdm9pZCBkZXZp ZF9oYW5kbGVyKHN0cnVjdCBpcG1pX3NlcmlhbF9pbmZvICppbmZvLAorCQkJICBjb25zdCB1 bnNpZ25lZCBjaGFyICAgICAqZGF0YSwKKwkJCSAgdW5zaWduZWQgaW50ICAgICAgICAgICAg bGVuKQoreworCWludCBydjsKKworCXJ2ID0gaXBtaV9kZW1hbmdsZV9kZXZpY2VfaWQoZGF0 YSwgbGVuLCAmaW5mby0+ZGV2aWNlX2lkKTsKKwlpZiAocnYpIHsKKwkJaW5mby0+ZGV2aWNl X2lkX3ZhbGlkID0gcnY7CisJCXJldHVybjsKKwl9CisKKwlpbmZvLT5kZXZpY2VfaWRfdmFs aWQgPSAxOworCisJaWYgKGluZm8tPmNvZGVjLT5jaGVja19kZXZfaWQpCisJCWluZm8tPmNv ZGVjLT5jaGVja19kZXZfaWQoaW5mby0+Y29kZWNfZGF0YSwgJmluZm8tPmRldmljZV9pZCk7 Cit9CisKK3N0YXRpYyBpbnQgdHJ5X2dldF9kZXZfaWQoc3RydWN0IGlwbWlfc2VyaWFsX2lu Zm8gKmluZm8pCit7CisJdW5zaWduZWQgY2hhciBtc2dbMl07CisJaW50ICAgICAgICAgICBy djsKKwlpbnQgICAgICAgICAgIHRpbWVvdXQ7CisKKwltc2dbMF0gPSBJUE1JX05FVEZOX0FQ UF9SRVFVRVNUIDw8IDI7CisJbXNnWzFdID0gSVBNSV9HRVRfREVWSUNFX0lEX0NNRDsKKwor CWluZm8tPmRldmljZV9pZF92YWxpZCA9IDA7CisJaW5mby0+aW50ZXJuYWxfbXNnX2hhbmRs ZXIgPSBkZXZpZF9oYW5kbGVyOworCXJ2ID0gaW5mby0+Y29kZWMtPnNlbmRfbXNnKGluZm8t PmNvZGVjX2RhdGEsIG1zZywgMiwgMCk7CisJaWYgKHJ2KQorCQlnb3RvIG91dF9lcnI7CisK Kwl0aW1lb3V0ID0gSVBNSV9TRVJJQUxfUkVUUllfVElNRU9VVDsKKwl3aGlsZSAoIWluZm8t PmRldmljZV9pZF92YWxpZCAmJiAodGltZW91dCA+IDApKSB7CisJCW1zbGVlcCgxMCk7CisJ CXRpbWVvdXQgLT0gMTAwMDA7CisJfQorCWlmICghaW5mby0+ZGV2aWNlX2lkX3ZhbGlkKQor CQlydiA9IC1FVElNRURPVVQ7CisJZWxzZSBpZiAoaW5mby0+ZGV2aWNlX2lkX3ZhbGlkIDwg MCkKKwkJcnYgPSBpbmZvLT5kZXZpY2VfaWRfdmFsaWQ7CisKKyBvdXRfZXJyOgorCWluZm8t PmludGVybmFsX21zZ19oYW5kbGVyID0gTlVMTDsKKwlyZXR1cm4gcnY7Cit9CisKK3N0YXRp YyB2b2lkIHNldF9nbG9iYWxfZW5hYmxlX2hhbmRsZXIoc3RydWN0IGlwbWlfc2VyaWFsX2lu Zm8gKmluZm8sCisJCQkJICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAgICAgKmRhdGEsCisJ CQkJICAgICAgdW5zaWduZWQgaW50ICAgICAgICAgICAgbGVuKQoreworCWlmIChsZW4gPCAz IHx8CisJCQlkYXRhWzBdICE9IChJUE1JX05FVEZOX0FQUF9SRVFVRVNUIHwgMSkgPDwgMiB8 fAorCQkJZGF0YVsxXSAhPSBJUE1JX1NFVF9CTUNfR0xPQkFMX0VOQUJMRVNfQ01EKSB7CisJ CXByaW50ayhLRVJOX1dBUk5JTkcgUEZYCisJCSAgICAgICAiSW52YWxpZCByZXR1cm4gZnJv bSBzZXQgZ2xvYmFsICIKKwkJICAgICAgICIgZW5hYmxlcyBjb21tYW5kLCBjYW5ub3QgZW5h YmxlIHRoZSBldmVudCIKKwkJICAgICAgICIgYnVmZmVyLlxuIiwgaW5mby0+bmFtZSwgaW5m by0+bGluZSk7CisJCWluZm8tPmdsb2JhbF9lbmFibGVfdmFsaWQgPSAtRUlOVkFMOworCQly ZXR1cm47CisJfQorCisJaWYgKGRhdGFbMl0gIT0gMCkKKwkJaW5mby0+Z2xvYmFsX2VuYWJs ZV92YWxpZCA9IDE7CisJZWxzZQorCQlpbmZvLT5nbG9iYWxfZW5hYmxlX3ZhbGlkID0gLUVO T0VOVDsKK30KKworc3RhdGljIHZvaWQgZ2V0X2dsb2JhbF9lbmFibGVfaGFuZGxlcihzdHJ1 Y3QgaXBtaV9zZXJpYWxfaW5mbyAqaW5mbywKKwkJCQkgICAgICBjb25zdCB1bnNpZ25lZCBj aGFyICAgICAqZGF0YSwKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgICBsZW4p Cit7CisJdW5zaWduZWQgY2hhciBtc2dbM107CisJaW50IHJ2OworCisJaWYgKGxlbiA8IDQg fHwKKwkJCWRhdGFbMF0gIT0gKElQTUlfTkVURk5fQVBQX1JFUVVFU1QgfCAxKSA8PCAyIHx8 CisJCQlkYXRhWzFdICE9IElQTUlfR0VUX0JNQ19HTE9CQUxfRU5BQkxFU19DTUQgICB8fAor CQkJZGF0YVsyXSAhPSAwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYCisJCSAgICAg ICAiSW52YWxpZCByZXR1cm4gZnJvbSBnZXQgZ2xvYmFsIgorCQkgICAgICAgIiBlbmFibGVz IGNvbW1hbmQsIGNhbm5vdCBlbmFibGUgdGhlIGV2ZW50IgorCQkgICAgICAgIiBidWZmZXIu XG4iLCBpbmZvLT5uYW1lLCBpbmZvLT5saW5lKTsKKwkJaW5mby0+Z2xvYmFsX2VuYWJsZV92 YWxpZCA9IC1FSU5WQUw7CisJCXJldHVybjsKKwl9CisKKwlpZiAoZGF0YVszXSAmIElQTUlf Qk1DX0VWVF9NU0dfQlVGRikgeworCQkvKiBOb3RoaW5nIHRvIGRvLCBpdCdzIGVuYWJsZWQu ICovCisJCWluZm8tPmdsb2JhbF9lbmFibGVfdmFsaWQgPSAxOworCQlyZXR1cm47CisJfQor CisJbXNnWzBdID0gSVBNSV9ORVRGTl9BUFBfUkVRVUVTVCA8PCAyOworCW1zZ1sxXSA9IElQ TUlfU0VUX0JNQ19HTE9CQUxfRU5BQkxFU19DTUQ7CisJbXNnWzJdID0gZGF0YVszXSB8IElQ TUlfQk1DX0VWVF9NU0dfQlVGRjsKKwlpbmZvLT5pbnRlcm5hbF9tc2dfaGFuZGxlciA9IHNl dF9nbG9iYWxfZW5hYmxlX2hhbmRsZXI7CisJcnYgPSBpbmZvLT5jb2RlYy0+c2VuZF9tc2co aW5mby0+Y29kZWNfZGF0YSwgbXNnLCAzLCAwKTsKKwlpZiAocnYpCisJCWluZm8tPmdsb2Jh bF9lbmFibGVfdmFsaWQgPSBydjsKK30KKworc3RhdGljIGludCB0cnlfZW5hYmxlX2V2ZW50 X2J1ZmZlcihzdHJ1Y3QgaXBtaV9zZXJpYWxfaW5mbyAqaW5mbykKK3sKKwl1bnNpZ25lZCBj aGFyIG1zZ1szXTsKKwlpbnQgICAgICAgICAgIHRpbWVvdXQ7CisJaW50ICAgICAgICAgICBy diA9IDA7CisKKwltc2dbMF0gPSBJUE1JX05FVEZOX0FQUF9SRVFVRVNUIDw8IDI7CisJbXNn WzFdID0gSVBNSV9HRVRfQk1DX0dMT0JBTF9FTkFCTEVTX0NNRDsKKwlpbmZvLT5nbG9iYWxf ZW5hYmxlX3ZhbGlkID0gMDsKKwlpbmZvLT5pbnRlcm5hbF9tc2dfaGFuZGxlciA9IGdldF9n bG9iYWxfZW5hYmxlX2hhbmRsZXI7CisJcnYgPSBpbmZvLT5jb2RlYy0+c2VuZF9tc2coaW5m by0+Y29kZWNfZGF0YSwgbXNnLCAyLCAwKTsKKwlpZiAocnYpCisJCWdvdG8gb3V0X2VycjsK KworCXRpbWVvdXQgPSBJUE1JX1NFUklBTF9SRVRSWV9USU1FT1VUOworCXdoaWxlICghaW5m by0+Z2xvYmFsX2VuYWJsZV92YWxpZCAmJiAodGltZW91dCA+IDApKSB7CisJCW1zbGVlcCgx MCk7CisJCXRpbWVvdXQgLT0gMTAwMDA7CisJfQorCWlmICghaW5mby0+Z2xvYmFsX2VuYWJs ZV92YWxpZCkKKwkJcnYgPSAtRVRJTUVET1VUOworCWVsc2UgaWYgKGluZm8tPmdsb2JhbF9l bmFibGVfdmFsaWQgPCAwKQorCQlydiA9IGluZm8tPmdsb2JhbF9lbmFibGVfdmFsaWQ7CisK KyBvdXRfZXJyOgorCWluZm8tPmludGVybmFsX21zZ19oYW5kbGVyID0gTlVMTDsKKwlyZXR1 cm4gcnY7Cit9CisKK3ZvaWQgaXBtaV9zZXJpYWxfbGxfaW5pdF9jb21wbGV0ZShzdHJ1Y3Qg aXBtaV9zZXJpYWxfaW5mbyAqaW5mbywKKwkJCQkgIHVuc2lnbmVkIGNoYXIgc2xhdmVfYWRk ciwKKwkJCQkgIGludCBlcnIpCit7CisJaWYgKGVycikKKwkJaW5mby0+aW5pdF9zdGF0dXMg PSBlcnI7CisJZWxzZSB7CisJCWlmIChzbGF2ZV9hZGRyKQorCQkJaW5mby0+c2xhdmVfYWRk ciA9IHNsYXZlX2FkZHI7CisJCWluZm8tPmluaXRfc3RhdHVzID0gMTsKKwl9Cit9CitFWFBP UlRfU1lNQk9MKGlwbWlfc2VyaWFsX2xsX2luaXRfY29tcGxldGUpOworCitzdGF0aWMgaW50 IHNldHVwX3Rlcm1pb3Moc3RydWN0IGlwbWlfc2VyaWFsX2luZm8gKmluZm8pCit7CisJY2hh ciAqbyA9IGluZm8tPm9wdGlvbnM7CisJaW50IGJhdWQgPSAwOworCWludCBpOworCXVuc2ln bmVkIGludCBtY3RybCA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcnY7CisK KwkvKiBJbml0IHNvbWUgZGVmYXVsdHMuICovCisJaW5mby0+dGVybWlvcy5jX2NmbGFnID0g Q0xPQ0FMIHwgQ1JFQUQ7CisJaW5mby0+dGVybWlvcy5jX2lmbGFnID0gSUdOUEFSOworCWlu Zm8tPnRlcm1pb3MuY19vZmxhZyA9IDA7CisJaW5mby0+dGVybWlvcy5jX2xmbGFnID0gMDsK KwlpbmZvLT50ZXJtaW9zLmNfY2NbVlRJTUVdID0gMDsgLyogaW50ZXItY2hhcmFjdGVyIHRp bWVyIHVzZWQgKi8KKworCXJ2ID0gaW5mby0+Y29kZWMtPnNldHVwX3Rlcm1pb3MoJmluZm8t PnRlcm1pb3MpOworCWlmIChydikKKwkJcmV0dXJuIHJ2OworCisJaWYgKG8gJiYgKm8pIHsK KwkJY2hhciAqZW5kOworCQliYXVkID0gc2ltcGxlX3N0cnRvdWwobywgJmVuZCwgMTApOwor CQlpZiAoZW5kID09IG8pIHsKKwkJCXByaW50ayhLRVJOX0VSUiBQRlggIm5vIGJhdWQgcmF0 ZSBnaXZlblxuIiwKKwkJCSAgICAgICBpbmZvLT5uYW1lLCBpbmZvLT5saW5lKTsKKwkJCXJl dHVybiAtRUlOVkFMOworCQl9CisJCW8gPSBlbmQ7CisJfQorCWZvciAoaSA9IDA7IGJhdWRf cmF0ZXNbaV0ucmF0ZSAhPSAwOyBpKyspIHsKKwkJaWYgKGJhdWRfcmF0ZXNbaV0ucmF0ZSA9 PSBiYXVkKQorCQkJYnJlYWs7CisJfQorCWlmIChiYXVkX3JhdGVzW2ldLnJhdGUgPT0gMCkg eworCQlwcmludGsoS0VSTl9FUlIgUEZYICJpbnZhbGlkIGJhdWQgcmF0ZVxuIiwKKwkJICAg ICAgIGluZm8tPm5hbWUsIGluZm8tPmxpbmUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisK KwlpbmZvLT50ZXJtaW9zLmNfY2ZsYWcgfD0gYmF1ZF9yYXRlc1tpXS5jZmxhZzsKKworCWlm IChvICYmICpvKSB7CisJCXN3aXRjaCAoKm8pIHsKKwkJY2FzZSAnbyc6IGNhc2UgJ08nOgor CQkJaW5mby0+dGVybWlvcy5jX2NmbGFnIHw9IFBBUk9ERDsKKwkJCS8qZmFsbCB0aHJvdWdo Ki8KKwkJY2FzZSAnZSc6IGNhc2UgJ0UnOgorCQkJaW5mby0+dGVybWlvcy5jX2NmbGFnIHw9 IFBBUkVOQjsKKwkJCWJyZWFrOworCQljYXNlICduJzogY2FzZSAnTic6CisJCQlicmVhazsK KwkJZGVmYXVsdDoKKwkJCXByaW50ayhLRVJOX0VSUiBQRlggIkludmFsaWQgcGFyaXR5OiAn JWMnXG4iLAorCQkJICAgICAgIGluZm8tPm5hbWUsIGluZm8tPmxpbmUsICpvKTsKKwkJCXJl dHVybiAtRUlOVkFMOworCQl9CisJCW8rKzsKKwl9CisJaWYgKG8gJiYgKm8pIHsKKwkJc3dp dGNoICgqbykgeworCQljYXNlICc1JzoKKwkJCWluZm8tPnRlcm1pb3MuY19jZmxhZyB8PSBD UzU7CisJCQlicmVhazsKKwkJY2FzZSAnNic6CisJCQlpbmZvLT50ZXJtaW9zLmNfY2ZsYWcg fD0gQ1M2OworCQkJYnJlYWs7CisJCWNhc2UgJzcnOgorCQkJaW5mby0+dGVybWlvcy5jX2Nm bGFnIHw9IENTNzsKKwkJCWJyZWFrOworCQljYXNlICc4JzoKKwkJCWluZm8tPnRlcm1pb3Mu Y19jZmxhZyB8PSBDUzg7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWluZm8tPnRlcm1p b3MuY19jZmxhZyB8PSBDUzg7CisJCQlwcmludGsoS0VSTl9FUlIgUEZYICJJbnZhbGlkIGJp dHM6ICclYydcbiIsCisJCQkgICAgICAgaW5mby0+bmFtZSwgaW5mby0+bGluZSwgKm8pOwor CQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJbysrOworCX0gZWxzZSB7CisJCWluZm8tPnRl cm1pb3MuY19jZmxhZyB8PSBDUzg7CisJfQorCisJaWYgKG8gJiYgKm8pIHsKKwkJc3dpdGNo ICgqbykgeworCQljYXNlICcxJzoKKwkJCWJyZWFrOworCQljYXNlICcyJzoKKwkJCWluZm8t PnRlcm1pb3MuY19jZmxhZyB8PSBDU1RPUEI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJ CXByaW50ayhLRVJOX0VSUiBQRlggIkludmFsaWQgc3RvcCBiaXRzOiAnJWMnXG4iLAorCQkJ ICAgICAgIGluZm8tPm5hbWUsIGluZm8tPmxpbmUsICpvKTsKKwkJCXJldHVybiAtRUlOVkFM OworCQl9CisJCW8rKzsKKwl9CisKKwkvKgorCSAqIE5vdGUgdGhhdCB1bmxlc3Mgb3ZlcnJp ZGRlbiBhbHdheXMgZW5hYmxlIERUUiBhbmQgc2VuZGluZworCSAqIFJUUyB0byB0aGUgZGV2 aWNlLiAgVGhlIGRldmljZSBjYW4gaWdub3JlIGl0LCBidXQgaXQgY2FuJ3QKKwkgKiBodXJ0 IHRvIHNlbmQgaXQuICBJdCBjYW4gYmUgb3ZlcnJpZGRlbiB3aXRoIG9wdGlvbnMuCisJICov CisJbWN0cmwgfD0gVElPQ01fUlRTIHwgVElPQ01fRFRSOworCisJd2hpbGUgKG8gJiYgKm8p IHsKKwkJc3dpdGNoICgqbykgeworCQljYXNlICdyJzoKKwkJCWluZm8tPnRlcm1pb3MuY19j ZmxhZyB8PSBDUlRTQ1RTOworCQkJYnJlYWs7CisJCWNhc2UgJ1InOgorCQkJbWN0cmwgJj0g flRJT0NNX1JUUzsKKwkJCWJyZWFrOworCQljYXNlICdEJzoKKwkJCW1jdHJsICY9IH5USU9D TV9EVFI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByaW50ayhLRVJOX0VSUiBQRlgg IkludmFsaWQgY29uZmlnIG9wdGlvbjogJyVjJ1xuIiwKKwkJCSAgICAgICBpbmZvLT5uYW1l LCBpbmZvLT5saW5lLCAqbyk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlvKys7CisJ fQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmluZm8tPnBvcnQtPmxvY2ssIGZsYWdzKTsKKwlp bmZvLT5wb3J0LT5tY3RybCB8PSBtY3RybDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZp bmZvLT5wb3J0LT5sb2NrLCBmbGFncyk7CisJaW5mby0+cG9ydC0+b3BzLT5zZXRfdGVybWlv cyhpbmZvLT5wb3J0LCAmaW5mby0+dGVybWlvcywKKwkJCQkgICAgICZpbmZvLT5vbGRfdGVy bWlvcyk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDYWxsZWQgd2hlbiB0aGUgc2VyaWFs IGxheWVyIHNheXMgaXQgZm91bmQgYSBzZXJpYWwgZHJpdmVyIHRoYXQKKyAqIG1hdGNoZXMu ICBXZSB1c2UgdGhpcyB0byBraWNrIHRoaW5ncyBvZmYuCisgKi8KK3N0YXRpYyBpbnQgaXBt aV9zZXJpYWxfZm91bmQoc3RydWN0IGlwbWlfc2VyaWFsX2luZm8gKmluZm8pCit7CisJaW50 ICAgICAgICAgICAgICAgICAgICAgcnY7CisJaW50ICAgICAgICAgICAgICAgICAgICAgdGlt ZW91dDsKKwlpbnQgICAgICAgICAgICAgICAgICAgICByZXRyaWVzOworCXVuc2lnbmVkIGlu dCAgICAgICAgICAgIGNhcGFiaWxpdGllczsKKwljaGFyCQkgICAgICAgIHN5c2ZzX25hbWVb c2l6ZW9mKGluZm8tPm5hbWUpICsgNF07CisKKwlwcmludGsoS0VSTl9JTkZPIFBGWCAiRm91 bmQgYSBtYXRjaGluZyBzZXJpYWwgcG9ydFxuIiwKKwkgICAgICAgaW5mby0+bmFtZSwgaW5m by0+bGluZSk7CisKKwlpbmZvLT5zdG9wX29wZXJhdGlvbiA9IDA7CisKKwlzZXR1cF90ZXJt aW9zKGluZm8pOworCisJaW5mby0+aW5pdF9zdGF0dXMgPSAwOworCXJldHJpZXMgPSBJUE1J X1NFUklBTF9JTklUX1JFVFJJRVM7CisgcmV0cnk6CisJcnYgPSBpbmZvLT5jb2RlYy0+aW5p dChpbmZvLT5hbGxvY19jb2RlY19kYXRhLCBpbmZvLAorCQkJICAgICAgIGluZm8tPmNvZGVj X29wdGlvbnMpOworCWlmIChydikgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICJjb2RlYyBp bml0aWFsaXphdGlvbiBmYWlsZWQsICIKKwkJICAgICAgICJpbnRlcmZhY2UgaXMgbm90IHVz YWJsZTogJWRcbiIsIGluZm8tPm5hbWUsCisJCSAgICAgICBpbmZvLT5saW5lLCBydik7CisJ CXJldHVybiBydjsKKwl9CisKKwkvKiBBbGxvdyB0aGUgcmVjZWl2ZXIgdG8gc2VuZCB0byB0 aGUgY29kZWMuICovCisJaW5mby0+Y29kZWNfZGF0YSA9IGluZm8tPmFsbG9jX2NvZGVjX2Rh dGE7CisKKwlpZiAoaW5mby0+Y29kZWMtPnN0YXJ0KSB7CisJCXJ2ID0gaW5mby0+Y29kZWMt PnN0YXJ0KGluZm8tPmNvZGVjX2RhdGEpOworCQlpZiAocnYpIHsKKwkJCXByaW50ayhLRVJO X0VSUiBQRlggImNvZGVjIHN0YXJ0IGZhaWxlZCwgIgorCQkJICAgICAgICJpbnRlcmZhY2Ug aXMgbm90IHVzYWJsZTogJWRcbiIsIGluZm8tPm5hbWUsCisJCQkgICAgICAgaW5mby0+bGlu ZSwgcnYpOworCQkJZ290byBvdXRfZXJyOworCQl9CisJfSBlbHNlCisJCWlwbWlfc2VyaWFs X2xsX2luaXRfY29tcGxldGUoaW5mbywgMCwgMCk7CisKKwl0aW1lb3V0ID0gSVBNSV9TRVJJ QUxfSU5JVF9USU1FT1VUOworCXdoaWxlICghaW5mby0+aW5pdF9zdGF0dXMgJiYgKHRpbWVv dXQgPiAwKSkgeworCQltc2xlZXAoMTApOworCQl0aW1lb3V0IC09IDEwMDAwOworCX0KKwlp ZiAoIWluZm8tPmluaXRfc3RhdHVzKSB7CisJCXJldHJpZXMtLTsKKwkJaWYgKHJldHJpZXMg PiAwKSB7CisJCQkvKiBUdXJuIHRoZSByZWNlaXZlciBvZmYgYW5kIGxldCBpdCBjbGVhciBv dXQuICovCisJCQlpbmZvLT5jb2RlY19kYXRhID0gTlVMTDsKKwkJCXN5bmNocm9uaXplX3Nj aGVkKCk7CisJCQlpbmZvLT5jb2RlYy0+Y2xlYW51cChpbmZvLT5hbGxvY19jb2RlY19kYXRh KTsKKwkJCWdvdG8gcmV0cnk7CisJCX0KKworCQlwcmludGsoS0VSTl9FUlIgUEZYICJjb2Rl YyBpbml0aWFsaXphdGlvbiB0aW1lZCBvdXQsICIKKwkJICAgICAgICJpbnRlcmZhY2UgaXMg bm90IHVzYWJsZVxuIiwgaW5mby0+bmFtZSwgaW5mby0+bGluZSk7CisJCXJ2ID0gLUVUSU1F RE9VVDsKKwkJZ290byBvdXRfZXJyOworCX0gZWxzZSBpZiAoaW5mby0+aW5pdF9zdGF0dXMg PCAwKSB7CisJCXJ2ID0gaW5mby0+aW5pdF9zdGF0dXM7CisJCXByaW50ayhLRVJOX0VSUiBQ RlggIkluaXRpYWxpemF0aW9uIGZhaWxlZDogJWRcbiIsCisJCSAgICAgICBpbmZvLT5uYW1l LCBpbmZvLT5saW5lLCBydik7CisJCWdvdG8gb3V0X2VycjsKKwl9CisKKwlyZXRyaWVzID0g SVBNSV9TRVJJQUxfTUFYX0VSUk9SX1JFVFJJRVM7CisgcmV0cnlfZGV2aWQ6CisJcnYgPSB0 cnlfZ2V0X2Rldl9pZChpbmZvKTsKKwlpZiAocnYpIHsKKwkJcmV0cmllcy0tOworCQlpZiAo cmV0cmllcyA+IDApCisJCQlnb3RvIHJldHJ5X2RldmlkOworCQlwcmludGsoS0VSTl9FUlIg UEZYICJEZXZpY2UgSUQgZmV0Y2ggZmFpbGVkLCAiCisJCSAgICAgICAiaW50ZXJmYWNlIGlz IG5vdCB1c2FibGU6ICVkXG4iLCBpbmZvLT5uYW1lLAorCQkgICAgICAgaW5mby0+bGluZSwg cnYpOworCQlnb3RvIG91dF9lcnI7CisJfQorCisJY2FwYWJpbGl0aWVzID0gaW5mby0+Y29k ZWMtPmNhcGFiaWxpdGllcyhpbmZvLT5jb2RlY19kYXRhKTsKKwlpbmZvLT5kb19ldmVudF9y ZXF1ZXN0ID0gKGNhcGFiaWxpdGllcworCQkJCSAgJiBJUE1JX1NFUklBTF9TVVBQT1JUU19F VkVOVF9CVUZGRVIpOworCWlmIChjYXBhYmlsaXRpZXMgJiBJUE1JX1NFUklBTF9ORUVEU19H RVRfRkxBR1NfUE9MTElORykKKwkJaW5mby0+ZmxhZ190aW1lb3V0ID0gUE9MTElOR19GTEFH X1RJTUVPVVQ7CisJZWxzZQorCQlpbmZvLT5mbGFnX3RpbWVvdXQgPSBOT19QT0xMSU5HX0ZM QUdfVElNRU9VVDsKKwlpbmZvLT5mbGFnX3RpbWVyID0gaW5mby0+ZmxhZ190aW1lb3V0Owor CWluZm8tPnN1cHBvcnRzX2ZsYWdzID0gKGNhcGFiaWxpdGllcworCQkJCSYgSVBNSV9TRVJJ QUxfU1VQUE9SVFNfR0VUX0ZMQUdTKTsKKworCWlmIChpbmZvLT5kb19ldmVudF9yZXF1ZXN0 KSB7CisJCWlmICh0cnlfZW5hYmxlX2V2ZW50X2J1ZmZlcihpbmZvKSA9PSAwKQorCQkJaW5m by0+aGFzX2V2ZW50X2J1ZmZlciA9IDE7CisJfQorCisKKwlzbnByaW50ZihzeXNmc19uYW1l LCBzaXplb2Yoc3lzZnNfbmFtZSksICJibWM6JXMlZCIsIGluZm8tPm5hbWUsCisJCSBpbmZv LT5saW5lKTsKKworCXJ2ID0gaXBtaV9yZWdpc3Rlcl9zbWkoJmhhbmRsZXJzLAorCQkJICAg ICAgIGluZm8sCisJCQkgICAgICAgJmluZm8tPmRldmljZV9pZCwKKwkJCSAgICAgICBpbmZv LT5wb3J0LT5kZXYsCisJCQkgICAgICAgc3lzZnNfbmFtZSwKKwkJCSAgICAgICBpbmZvLT5z bGF2ZV9hZGRyKTsKKwlpZiAocnYpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiVW5hYmxl IHRvIHJlZ2lzdGVyIHRoZSAiCisJCSAgICAgICAiaW50ZXJmYWNlIHdpdGggdGhlIElQTUkg bWVzc2FnZSBoYW5kbGVyOiAlZFxuIiwKKwkJICAgICAgIGluZm8tPm5hbWUsIGluZm8tPmxp bmUsIHJ2KTsKKwkJaWYgKGluZm8tPmludGYpCisJCQlkZWxfdGltZXJfc3luYygmaW5mby0+ dGltZXIpOworCQlpbmZvLT5pbnRmID0gTlVMTDsKKwkJZ290byBvdXRfZXJyX3N0b3BfdGlt ZXI7CisJfQorCisJcnYgPSBpcG1pX3NtaV9hZGRfcHJvY19lbnRyeShpbmZvLT5pbnRmLCAi dHlwZSIsCisJCQkJICAgICB0eXBlX2ZpbGVfcmVhZF9wcm9jLAorCQkJCSAgICAgaW5mbywg VEhJU19NT0RVTEUpOworCWlmIChydikgeworCQlwcmludGsoS0VSTl9FUlIgUEZYCisJCSAg ICAgICAiVW5hYmxlIHRvIGNyZWF0ZSBwcm9jIGVudHJ5OiAlZFxuIiwgaW5mby0+bmFtZSwK KwkJICAgICAgIGluZm8tPmxpbmUsIHJ2KTsKKwkJZ290byBvdXRfZXJyX3N0b3BfdGltZXI7 CisJfQorCisJcnYgPSBpcG1pX3NtaV9hZGRfcHJvY19lbnRyeShpbmZvLT5pbnRmLCAicGFy YW1zIiwKKwkJCQkgICAgIHBhcmFtX3JlYWRfcHJvYywKKwkJCQkgICAgIGluZm8sIFRISVNf TU9EVUxFKTsKKwlpZiAocnYpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWAorCQkgICAgICAg IlVuYWJsZSB0byBjcmVhdGUgcHJvYyBlbnRyeTogJWRcbiIsIGluZm8tPm5hbWUsCisJCSAg ICAgICBpbmZvLT5saW5lLCBydik7CisJCWdvdG8gb3V0X2Vycl9zdG9wX3RpbWVyOworCX0K KworCXJ2ID0gaXBtaV9zbWlfYWRkX3Byb2NfZW50cnkoaW5mby0+aW50ZiwgInNlcmlhbF9z dGF0cyIsCisJCQkJICAgICBzdGF0X2ZpbGVfcmVhZF9wcm9jLAorCQkJCSAgICAgaW5mbywg VEhJU19NT0RVTEUpOworCWlmIChydikgeworCQlwcmludGsoS0VSTl9FUlIgUEZYCisJCSAg ICAgICAiVW5hYmxlIHRvIGNyZWF0ZSBwcm9jIGVudHJ5OiAlZFxuIiwgaW5mby0+bmFtZSwK KwkJICAgICAgIGluZm8tPmxpbmUsIHJ2KTsKKwkJZ290byBvdXRfZXJyX3N0b3BfdGltZXI7 CisJfQorCisJcmV0dXJuIDA7CisKKyBvdXRfZXJyX3N0b3BfdGltZXI6CisJaWYgKGluZm8t PmludGYpIHsKKwkJZGVsX3RpbWVyX3N5bmMoJmluZm8tPnRpbWVyKTsKKwkJaXBtaV91bnJl Z2lzdGVyX3NtaShpbmZvLT5pbnRmKTsKKwkJaW5mby0+aW50ZiA9IE5VTEw7CisJfQorIG91 dF9lcnI6CisJLyogVHVybiB0aGUgcmVjZWl2ZXIgb2ZmIGFuZCBsZXQgaXQgY2xlYXIgb3V0 LiAqLworCWluZm8tPmNvZGVjX2RhdGEgPSBOVUxMOworCXN5bmNocm9uaXplX3NjaGVkKCk7 CisKKwlpbmZvLT5jb2RlYy0+Y2xlYW51cChpbmZvLT5hbGxvY19jb2RlY19kYXRhKTsKKwly ZXR1cm4gcnY7Cit9CisKK3N0YXRpYyB2b2lkIHNldHVwX2ludGYoc3RydWN0IGlwbWlfc2Vy aWFsX2luZm8gKmluZm8sCisJCSAgICAgICBzdHJ1Y3QgaXBtaV9zZXJpYWxfY29kZWMgKmNv ZGVjKQoreworCWludCBydjsKKworCWluZm8tPmFsbG9jX2NvZGVjX2RhdGEgPSBrbWFsbG9j KGNvZGVjLT5zaXplKCksIEdGUF9LRVJORUwpOworCWlmICghaW5mby0+YWxsb2NfY29kZWNf ZGF0YSkgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICJVbmFibGUgdG8gYWxsb2NhdGUgY29k ZWMgZGF0YVxuIiwKKwkJICAgICAgIGluZm8tPm5hbWUsIGluZm8tPmxpbmUpOworCQlyZXR1 cm47CisJfQorCisJaW5mby0+Y29kZWMgPSBjb2RlYzsKKworCS8qCisJICogVGVsbCB0aGUg c2VyaWFsIGxheWVyIHRoYXQgd2Ugd2FudCB0byB0YWtlIG92ZXIgYSBzcGVjaWZpYworCSAq IHNlcmlhbCBpbnRlcmZhY2UuCisJICovCisJaW5mby0+cG9ydCA9IHVhcnRfZ2V0X2RpcmVj dF9wb3J0KGluZm8tPm5hbWUsIGluZm8tPmxpbmUsIDApOworCWlmICghaW5mby0+cG9ydCkg eworCQlwcmludGsoS0VSTl9FUlIgUEZYICJVbmFibGUgdG8gZmluZCBzZXJpYWwgcG9ydFxu IiwKKwkJICAgICAgIGluZm8tPm5hbWUsIGluZm8tPmxpbmUpOworCQlyZXR1cm47CisJfQor CWluZm8tPm9yaWdfcG9ydF9pbmZvID0gaW5mby0+cG9ydC0+aW5mbzsKKwlpbmZvLT5wb3J0 LT5pbmZvID0gJmluZm8tPnVpbmZvOworCisJcnYgPSBpbmZvLT5wb3J0LT5vcHMtPnN0YXJ0 dXAoaW5mby0+cG9ydCk7CisJaWYgKHJ2KSB7CisJCWluZm8tPnBvcnQtPmluZm8gPSBpbmZv LT5vcmlnX3BvcnRfaW5mbzsKKwkJdWFydF9wdXRfZGlyZWN0X3BvcnQoaW5mby0+cG9ydCwg MCk7CisJCWluZm8tPnBvcnQgPSBOVUxMOworCQlwcmludGsoS0VSTl9FUlIgUEZYICJVbmFi bGUgc2V0dXAgc2VyaWFsIHBvcnQgJWRcbiIsCisJCSAgICAgICBpbmZvLT5uYW1lLCBpbmZv LT5saW5lLCBydik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoaXBtaV9zZXJpYWxfZm91bmQo aW5mbykpIHsKKwkJaW5mby0+cG9ydC0+aW5mbyA9IGluZm8tPm9yaWdfcG9ydF9pbmZvOwor CQlpbmZvLT5wb3J0LT5vcHMtPnNodXRkb3duKGluZm8tPnBvcnQpOworCQl1YXJ0X3B1dF9k aXJlY3RfcG9ydChpbmZvLT5wb3J0LCAwKTsKKwkJaW5mby0+cG9ydCA9IE5VTEw7CisJfQor fQorCitzdGF0aWMgdm9pZCBmcmVlX2luZm9fbWVtb3J5KHN0cnVjdCBpcG1pX3NlcmlhbF9p bmZvICppbmZvKQoreworCWtmcmVlKGluZm8tPmtlZXBzdHIpOworCWtmcmVlKGluZm8pOwor fQorCitzdGF0aWMgaW50IG5hbWVfbGluZV9mcm9tX3N0cihjb25zdCBjaGFyICpzdHIsIGNo YXIgKm5hbWUsIGludCBsZW4pCit7CisJaWYgKHN0clswXSA+PSAnMCcgJiYgc3RyWzBdIDw9 ICc5JykgeworCQkvKiBXZSBjb252ZXJ0IGEgbnVtYmVyIHRvIHR0eVMjICovCisJCXN0cm5j cHkobmFtZSwgInR0eVMiLCBsZW4pOworCQlyZXR1cm4gc2ltcGxlX3N0cnRvdWwoc3RyLCBO VUxMLCAxMCk7CisJfSBlbHNlIHsKKwkJaW50IHNpemU7CisJCWNvbnN0IGNoYXIgKnM7CisJ CXMgPSBzdHI7CisJCXdoaWxlICgqcyAmJiAqcyAhPSAnLCcgJiYgKCpzIDwgJzAnIHx8ICpz ID4gJzknKSkKKwkJCXMrKzsKKwkJc2l6ZSA9IHMgLSBzdHI7CisJCWlmIChzaXplID49IGxl bikKKwkJCXNpemUgPSBsZW4gLSAxOworCQltZW1jcHkobmFtZSwgc3RyLCBzaXplKTsKKwkJ bmFtZVtzaXplXSA9ICdcMCc7CisJCXJldHVybiBzaW1wbGVfc3RydG91bChzLCBOVUxMLCAx MCk7CisJfQorfQorCisvKgorICoJU2V0dXAgYSBsaXN0IG9mIGlwbWkgc2VyaWFsIHN5c3Rl bSBpbnRlcmZhY2VzLgorICovCitzdGF0aWMgdm9pZCBpcG1pX3NlcmlhbF9zZXR1cF9vbmUo Y29uc3QgY2hhciAqaXN0cikKK3sKKwlzdHJ1Y3QgaXBtaV9zZXJpYWxfY29kZWMgKmNvZGVj OworCXN0cnVjdCBpcG1pX3NlcmlhbF9pbmZvICAqaW5mbzsKKwlzdHJ1Y3QgaXBtaV9zZXJp YWxfaW5mbyAgKmNpbmZvOworCWNoYXIgKnN0cjsKKwlpbnQgaTsKKworCWluZm8gPSBremFs bG9jKHNpemVvZigqaW5mbyksIEdGUF9LRVJORUwpOworCWlmICghaW5mbykgeworCQlwcmlu dGsoS0VSTl9FUlIgTlBGWCAidW5hYmxlIHRvIGFsbG9jYXRlIHNlcmlhbCBpbmZvOiAlc1xu IiwKKwkJICAgICAgIGlzdHIpOworCQlyZXR1cm47CisJfQorCWluZm8tPmtlZXBzdHIgPSBr c3RyZHVwKGlzdHIsIEdGUF9LRVJORUwpOworCWlmICghaW5mby0+a2VlcHN0cikgeworCQlw cmludGsoS0VSTl9FUlIgTlBGWCAidW5hYmxlIHRvIGFsbG9jYXRlIHNlcmlhbCBzdHJpbmc6 ICVzXG4iLAorCQkgICAgICAgaXN0cik7CisJCWtmcmVlKGluZm8pOworCQlyZXR1cm47CisJ fQorCXN0ciA9IGluZm8tPmtlZXBzdHI7CisKKwlzcGluX2xvY2tfaW5pdCgmaW5mby0+bG9j ayk7CisJc2V0dXBfdGltZXIoJmluZm8tPnRpbWVyLCBpcG1pX3NlcmlhbF90aW1lb3V0LCAo bG9uZykgaW5mbyk7CisJSU5JVF9MSVNUX0hFQUQoJmluZm8tPnhtaXRfbXNncyk7CisJSU5J VF9MSVNUX0hFQUQoJmluZm8tPmhwX3htaXRfbXNncyk7CisJSU5JVF9MSVNUX0hFQUQoJmlu Zm8tPm1zZ3NfdG9fZGVsaXZlcik7CisJaW5mby0+c2xhdmVfYWRkciA9IDB4MjA7IC8qIGRl ZmF1bHQgKi8KKworCWZvciAoaSA9IDA7IGkgPCBTRVJJQUxfTlVNX1NUQVRTOyBpKyspCisJ CWF0b21pY19zZXQoJmluZm8tPnN0YXRzW2ldLCAwKTsKKworCS8qCisJICogRGVjb2RlIHN0 ciBpbnRvIG5hbWUsIG9wdGlvbnMsIGNvZGVjLCBjb2RlYyBvcHRpb25zLgorCSAqLworCWlm IChzdHJsZW4oc3RyKSA9PSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiBOUEZYICJFbXB0eSBz ZXJpYWwgcG9ydCBuYW1lIHNwZWNpZmllZFxuIik7CisJCWZyZWVfaW5mb19tZW1vcnkoaW5m byk7CisJCXJldHVybjsKKwl9CisKKwlpbmZvLT5saW5lID0gbmFtZV9saW5lX2Zyb21fc3Ry KHN0ciwgaW5mby0+bmFtZSwgc2l6ZW9mKGluZm8tPm5hbWUpKTsKKworCS8qIEZpcnN0ICcs JyBwb2ludHMgdG8gc2VyaWFsIHBvcnQgb3B0aW9ucyAqLworCWluZm8tPm9wdGlvbnMgPSBz dHJjaHIoc3RyLCAnLCcpOworCWlmIChpbmZvLT5vcHRpb25zKSB7CisJCSooaW5mby0+b3B0 aW9ucysrKSA9ICdcMCc7CisKKwkJLyogU2Vjb25kICcsJyBwb2ludHMgdG8gdGhlIGNvZGVj IG5hbWUuICovCisJCWluZm8tPmNvZGVjX25hbWUgPSBzdHJjaHIoaW5mby0+b3B0aW9ucywg JywnKTsKKwl9CisKKwlpZiAoaW5mby0+Y29kZWNfbmFtZSkgeworCQkqKGluZm8tPmNvZGVj X25hbWUrKykgPSAnXDAnOworCisJCS8qIFRoaXJkICcsJyBwb2ludHMgdG8gdGhlIGNvZGVj IG9wdGlvbnMuICovCisJCWluZm8tPmNvZGVjX29wdGlvbnMgPSBzdHJjaHIoaW5mby0+Y29k ZWNfbmFtZSwgJywnKTsKKwl9CisKKwlpZiAoaW5mby0+Y29kZWNfb3B0aW9ucykKKwkJKihp bmZvLT5jb2RlY19vcHRpb25zKyspID0gMDsKKworI2lmZGVmIF9fc3BhcmNfXworCWlmICgh c3RyY21wKGluZm8tPm5hbWUsICJ0dHlhIikpIHsKKwkJc3RyY3B5KGluZm8tPm5hbWUsICJ0 dHlTIik7CisJCWluZm8tPmxpbmUgPSAwOworCX0KKwlpZiAoIXN0cmNtcChpbmZvLT5uYW1l LCAidHR5YiIpKSB7CisJCXN0cmNweShpbmZvLT5uYW1lLCAidHR5UyIpOworCQlpbmZvLT5s aW5lID0gMTsKKwl9CisjZW5kaWYKKworCWluZm8tPmRpcmVjdC5kaXJlY3RfZGF0YSA9IGlu Zm87CisJaW5mby0+ZGlyZWN0LmhhbmRsZV9jaGFyID0gaXBtaV9zZXJpYWxfaGFuZGxlX2No YXI7CisJaW5mby0+ZGlyZWN0LnB1c2ggPSBpcG1pX3NlcmlhbF9wdXNoOworCWluZm8tPnVp bmZvLnhtaXQuYnVmID0gaW5mby0+dWFydF9idWZmZXI7CisJdWFydF9jaXJjX2NsZWFyKCZp bmZvLT51aW5mby54bWl0KTsKKwlpbmZvLT51aW5mby5mbGFncyA9IFVJRl9CT09UX0FMTE9D QVRFRDsKKwlpbmZvLT51aW5mby5kaXJlY3QgPSAmaW5mby0+ZGlyZWN0OworCXRhc2tsZXRf aW5pdCgmaW5mby0+dWluZm8udGxldCwgaXBtaV9zZXJpYWxfdHhfcmVhZHksCisJCSAgICAg KHVuc2lnbmVkIGxvbmcpIGluZm8pOworCWluZm8tPnVpbmZvLmZsYWdzIHw9IFVJRl9UQVNL TEVUX1NFVFVQOworCisJbXV0ZXhfbG9jaygmbGlzdF9sb2NrKTsKKwkvKiBDaGVjayBmb3Ig ZHVwcy4gKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNpbmZvLCAmaW5mb19saXN0LCBsaW5r KSB7CisJCWlmICgoc3RyY21wKGNpbmZvLT5uYW1lLCBpbmZvLT5uYW1lKSA9PSAwKSAmJgor CQkJCQkoY2luZm8tPmxpbmUgPT0gaW5mby0+bGluZSkpIHsKKwkJCXByaW50ayhLRVJOX0VS UiBOUEZYICJEdXBsaWNhdGUgcG9ydCBnaXZlbjogJXNcbiIsCisJCQkgICAgICAgc3RyKTsK KwkJCWZyZWVfaW5mb19tZW1vcnkoaW5mbyk7CisJCQlnb3RvIG91dF91bmxvY2s7CisJCX0K Kwl9CisJbGlzdF9hZGQoJmluZm8tPmxpbmssICZpbmZvX2xpc3QpOworCisJLyogVHJ5IHRv IG1hdGNoIHVwIHRoaXMgbmV3IGludGVyZmFjZSB3aXRoIGFueSByZWdpc3RlcmVkIGNvZGVj cy4gKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvZGVjLCAmY29kZWNfbGlzdCwgbGluaykg eworCQlpZiAoc3RyY21wKGNvZGVjLT5uYW1lLCBpbmZvLT5jb2RlY19uYW1lKSA9PSAwKSB7 CisJCQlzZXR1cF9pbnRmKGluZm8sIGNvZGVjKTsKKwkJCWJyZWFrOworCQl9CisJfQorIG91 dF91bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZsaXN0X2xvY2spOworfQorCitzdGF0aWMgdm9p ZCBpcG1pX3NlcmlhbF9yZW1vdmVfb25lKGNvbnN0IGNoYXIgKnN0cikKK3sKKwlzdHJ1Y3Qg aXBtaV9zZXJpYWxfaW5mbyAqaW5mbzsKKwljaGFyICAgICAgICAgICAgICAgICAgICAqczsK KwlpbnQgbGluZTsKKwljaGFyIG5hbWVbVFRZX05BTUVfTEVOXTsKKworCWxpbmUgPSBuYW1l X2xpbmVfZnJvbV9zdHIoc3RyLCBuYW1lLCBzaXplb2YobmFtZSkpOworCisJcyA9IHN0cmNo cihzdHIsICcsJyk7CisKKwltdXRleF9sb2NrKCZsaXN0X2xvY2spOworCWxpc3RfZm9yX2Vh Y2hfZW50cnkoaW5mbywgJmluZm9fbGlzdCwgbGluaykgeworCQlpZiAoKHN0cmNtcChuYW1l LCBpbmZvLT5uYW1lKSA9PSAwKSAmJiAoaW5mby0+bGluZSA9PSBsaW5lKSkgeworCQkJaXBt aV9zZXJpYWxfY2xlYW51cF9vbmUoaW5mbyk7CisJCQlsaXN0X2RlbCgmaW5mby0+bGluayk7 CisJCQlmcmVlX2luZm9fbWVtb3J5KGluZm8pOworCQkJZ290byBvdXRfdW5sb2NrOworCQl9 CisJfQorCXByaW50ayhLRVJOX0VSUiBOUEZYICJDb3VsZCBub3QgZmluZCBwb3J0IHRvIHJl bW92ZTogJXMuXG4iLCBzdHIpOworIG91dF91bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZsaXN0 X2xvY2spOworfQorCitzdGF0aWMgaW50IGhvdG1vZF9oYW5kbGVyKGNvbnN0IGNoYXIgKmlz dHIsIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKQoreworCWNoYXIgKnN0ciA9IGtzdHJkdXAo aXN0ciwgR0ZQX0tFUk5FTCk7CisJY2hhciAqczsKKwlpbnQgIHJ2ID0gLUVJTlZBTDsKKwlp bnQgIGxlbiwgaTsKKwljaGFyICpuZXh0LCAqY3VycjsKKworCWlmICghc3RyKQorCQlyZXR1 cm4gLUVOT01FTTsKKworCS8qIEtpbGwgYW55IHRyYWlsaW5nIHNwYWNlcywgYXMgd2UgY2Fu IGdldCBhICJcbiIgZnJvbSBlY2hvLiAqLworCWxlbiA9IHN0cmxlbihzdHIpOworCWkgPSBs ZW4gLSAxOworCXdoaWxlICgoaSA+PSAwKSAmJiBpc3NwYWNlKHN0cltpXSkpIHsKKwkJc3Ry W2ldID0gJ1wwJzsKKwkJaS0tOworCX0KKworCWZvciAoY3VyciA9IHN0cjsgY3VycjsgY3Vy ciA9IG5leHQpIHsKKwkJbmV4dCA9IHN0cmNocihjdXJyLCAnOicpOworCQlpZiAobmV4dCkg eworCQkJKm5leHQgPSAnXDAnOworCQkJbmV4dCsrOworCQl9CisKKwkJcyA9IHN0cmNocihj dXJyLCAnLCcpOworCQlpZiAoIXMpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgTlBGWAor CQkJICAgICAgICJObyBob3Rtb2Qgb3BlcmF0aW9uIGdpdmVuLlxuIik7CisJCQlicmVhazsK KwkJfQorCQkqcyA9ICdcMCc7CisJCXMrKzsKKworCQlpZiAoc3RyY21wKGN1cnIsICJhZGQi KSA9PSAwKSB7CisJCQlpcG1pX3NlcmlhbF9zZXR1cF9vbmUocyk7CisJCQlydiA9IGxlbjsK KwkJfSBlbHNlIGlmIChzdHJjbXAoY3VyciwgInJlbW92ZSIpID09IDApIHsKKwkJCWlwbWlf c2VyaWFsX3JlbW92ZV9vbmUocyk7CisJCQlydiA9IGxlbjsKKwkJfSBlbHNlIHsKKwkJCXBy aW50ayhLRVJOX1dBUk5JTkcgTlBGWAorCQkJICAgICAgICJJbnZhbGlkIGhvdG1vZCBvcGVy YXRpb24gZ2l2ZW46ICclcycuXG4iLAorCQkJICAgICAgIGN1cnIpOworCQkJYnJlYWs7CisJ CX0KKwl9CisJa2ZyZWUoc3RyKTsKKworCXJldHVybiBydjsKK30KKworc3RhdGljIF9faW5p dCBpbnQgaW5pdF9pcG1pX3NlcmlhbCh2b2lkKQoreworCWludCBjb3VudCA9IDAsIGxlbjsK KwljaGFyICpuZXh0LCAqY3VyciwgKnN0cjsKKworCXByaW50ayhLRVJOX0lORk8gIklQTUkg U2VyaWFsIFN5c3RlbSBJbnRlcmZhY2UgZHJpdmVyXG4iKTsKKworCWlmIChzZXR1cF9zdHJb MF0gPT0gJ1wwJykgeworCQlpZiAodW5sb2FkX3doZW5fZW1wdHkpIHsKKwkJCXByaW50ayhL RVJOX1dBUk5JTkcgTlBGWCAibm8gaW50ZXJmYWNlcyBzcGVjaWZpZWRcbiIpOworCQkJcmV0 dXJuIC1FTk9ERVY7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCisJY3VyciA9IHNldHVwX3N0 cjsKKwl3aGlsZSAoY3VycikgeworCQluZXh0ID0gc3RyY2hyKGN1cnIsICc6Jyk7CisJCWlm ICghbmV4dCkgeworCQkJc3RyID0ga3N0cmR1cChjdXJyLCBHRlBfS0VSTkVMKTsKKwkJfSBl bHNlIHsKKwkJCS8qIER1cGxpY2F0ZSB1cCB0byAoYnV0IG5vdCBpbmNsdWRpbmcpIHRoZSAn OicuICovCisJCQlsZW4gPSBuZXh0IC0gY3VycjsKKwkJCW5leHQrKzsKKwkJCXN0ciA9IGtt YWxsb2MobGVuICsgMSwgR0ZQX0tFUk5FTCk7CisJCQlpZiAoc3RyKSB7CisJCQkJbWVtY3B5 KHN0ciwgY3VyciwgbGVuKTsKKwkJCQlzdHJbbGVuXSA9ICdcMCc7CisJCQl9CisJCX0KKwkJ aWYgKCFzdHIpIHsKKwkJCXByaW50ayhLRVJOX0VSUiBOUEZYCisJCQkgICAgICAgImNvdWxk IG5vdCBhbGxvY2F0ZSBzdHJpbmcgc2V0dXA6ICVzXG4iLAorCQkJICAgICAgIGN1cnIpOwor CQkJaWYgKGNvdW50ID09IDApCisJCQkJcmV0dXJuIC1FTk9NRU07CisJCQllbHNlCisJCQkJ LyogV2UgY29uZmlndXJlZCBvbmUsIHNvIGRvbid0IGVycm9yLiAqLworCQkJCXJldHVybiAw OworCQkJY291bnQrKzsKKwkJfSBlbHNlIHsKKwkJCWlwbWlfc2VyaWFsX3NldHVwX29uZShz dHIpOworCQkJa2ZyZWUoc3RyKTsKKwkJfQorCQljdXJyID0gbmV4dDsKKwl9CisKKwlyZXR1 cm4gMDsKK30KKy8qCisgKiBXZSBoYXZlIHRvIGluaXRpYWxpemUgYWZ0ZXIgdGhlIHNlcmlh bCBjb3JlIGhhcyBpbml0aWFsaXplZCBiZWNhdXNlCisgKiB3ZSBuZWVkcyBpdHMgc3lzZnMg ZW50cmllcyBpbml0aWFsaXplZC4gIFNvIGRlbGF5IGluaXRpYWxpemF0aW9uIHRvCisgKiB0 aGUgZW5kLgorICovCitsYXRlX2luaXRjYWxsKGluaXRfaXBtaV9zZXJpYWwpOworCitzdGF0 aWMgX19leGl0IHZvaWQgY2xlYW51cF9pcG1pX3NlcmlhbCh2b2lkKQoreworCXN0cnVjdCBp cG1pX3NlcmlhbF9pbmZvICAqaW5mbywgKnM7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3Nh ZmUoaW5mbywgcywgJmluZm9fbGlzdCwgbGluaykgeworCQlsaXN0X2RlbCgmaW5mby0+bGlu ayk7CisJCWZyZWVfaW5mb19tZW1vcnkoaW5mbyk7CisJfQorfQorbW9kdWxlX2V4aXQoY2xl YW51cF9pcG1pX3NlcmlhbCk7CisKK3N0YXRpYyB2b2lkIGlwbWlfc2VyaWFsX2NsZWFudXBf b25lKHN0cnVjdCBpcG1pX3NlcmlhbF9pbmZvICp0b19jbGVhbikKK3sKKwlpbnQgICAgICAg ICAgIHJ2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaXBtaV9zbWlfdCAgICBpbnRmOwor CisJaWYgKCF0b19jbGVhbikKKwkJcmV0dXJuOworCisJaW50ZiA9IHRvX2NsZWFuLT5pbnRm OworCisJaWYgKGludGYpIHsKKwkJdG9fY2xlYW4tPnN0b3Bfb3BlcmF0aW9uID0gMTsgLyog RG9uJ3Qgc3RhcnQgYW55dGhpbmcgbmV3LiAqLworCisJCWRlbF90aW1lcl9zeW5jKCZ0b19j bGVhbi0+dGltZXIpOworCisJCS8qCisJCSAqIEludGVycnVwdHMgYW5kIHRpbWVvdXRzIGFy ZSBzdG9wcGVkLCBub3cgZmx1c2ggb3V0CisJCSAqIGFsbCB0aGUgbWVzc2FnZXMuCisJCSAq LworCQlzcGluX2xvY2tfaXJxc2F2ZSgmdG9fY2xlYW4tPmxvY2ssIGZsYWdzKTsKKwkJd2hp bGUgKCh0b19jbGVhbi0+c3RhdGUgIT0gU0VSSUFMX0VNUFRZKQorCQkJCXx8IHRvX2NsZWFu LT5tc2dfZGVsaXZlcnlfaW5fcHJvZ3Jlc3MpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3Rv cmUoJnRvX2NsZWFuLT5sb2NrLCBmbGFncyk7CisJCQltc2xlZXAoMTApOworCQkJdGltZW91 dF9oYW5kbGluZyh0b19jbGVhbiwgMTAwMDApOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnRv X2NsZWFuLT5sb2NrLCBmbGFncyk7CisJCX0KKwkJdG9fY2xlYW4tPmludGYgPSBOVUxMOyAv KiBObyBtb3JlIG1lc3NhZ2VzIGFsbG93ZWQuICovCisJCXNwaW5fdW5sb2NrX2lycXJlc3Rv cmUoJnRvX2NsZWFuLT5sb2NrLCBmbGFncyk7CisKKwkJLyoKKwkJICogQXQgdGhpcyBwb2lu dCB3ZSB3b24ndCBzZW5kIGFueSBtZXNzYWdlcyB1cCwgc28gd2UgY2FuCisJCSAqIHVucmVn aXN0ZXIgdGhlIFNNSS4KKwkJICovCisJCXJ2ID0gaXBtaV91bnJlZ2lzdGVyX3NtaShpbnRm KTsKKwkJaWYgKHJ2KSB7CisJCQlwcmludGsoS0VSTl9FUlIgUEZYCisJCQkgICAgICAgIlVu YWJsZSB0byB1bnJlZ2lzdGVyIGRldmljZTogZXJybm89JWRcbiIsCisJCQkgICAgICAgdG9f Y2xlYW4tPm5hbWUsIHRvX2NsZWFuLT5saW5lLCBydik7CisJCX0KKwl9CisKKwlpZiAodG9f Y2xlYW4tPmNvZGVjX2RhdGEpIHsKKwkJdG9fY2xlYW4tPmNvZGVjX2RhdGEgPSBOVUxMOwor CQlzeW5jaHJvbml6ZV9zY2hlZCgpOworCQl0b19jbGVhbi0+Y29kZWMtPmNsZWFudXAodG9f Y2xlYW4tPmFsbG9jX2NvZGVjX2RhdGEpOworCX0KKworCWlmICh0b19jbGVhbi0+cG9ydCkg eworCQl0b19jbGVhbi0+dWluZm8uZmxhZ3MgJj0gflVJRl9UQVNLTEVUX1NFVFVQOworCQl0 YXNrbGV0X2tpbGwoJnRvX2NsZWFuLT51aW5mby50bGV0KTsKKwkJdG9fY2xlYW4tPnBvcnQt Pm9wcy0+c2h1dGRvd24odG9fY2xlYW4tPnBvcnQpOworCQl0b19jbGVhbi0+cG9ydC0+aW5m byA9IHRvX2NsZWFuLT5vcmlnX3BvcnRfaW5mbzsKKwkJdWFydF9wdXRfZGlyZWN0X3BvcnQo dG9fY2xlYW4tPnBvcnQsIDApOworCX0KK30KKworaW50IGlwbWlfc2VyaWFsX2NvZGVjX3Jl Z2lzdGVyKHN0cnVjdCBpcG1pX3NlcmlhbF9jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IGlw bWlfc2VyaWFsX2NvZGVjICpjOworCXN0cnVjdCBpcG1pX3NlcmlhbF9pbmZvICAqaW5mbzsK KworCXByaW50ayhLRVJOX0lORk8gTlBGWCAiUmVnaXN0ZXJpbmcgJXMgY29kZWNcbiIsIGNv ZGVjLT5uYW1lKTsKKworCW11dGV4X2xvY2soJmxpc3RfbG9jayk7CisJLyogQ2hlY2sgZm9y IGR1cHMuICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjLCAmY29kZWNfbGlzdCwgbGluaykg eworCQlpZiAoc3RyY21wKGMtPm5hbWUsIGNvZGVjLT5uYW1lKSA9PSAwKSB7CisJCQlwcmlu dGsoS0VSTl9XQVJOSU5HIE5QRlgKKwkJCSAgICAgICAiUmVnaXN0ZXJpbmcgZHVwbGljYXRl IGNvZGVjOiAlc1xuIiwKKwkJCSAgICAgICBjb2RlYy0+bmFtZSk7CisJCQltdXRleF91bmxv Y2soJmxpc3RfbG9jayk7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisJfQorCWxpc3RfYWRk KCZjb2RlYy0+bGluaywgJmNvZGVjX2xpc3QpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShp bmZvLCAmaW5mb19saXN0LCBsaW5rKSB7CisJCWlmIChzdHJjbXAoaW5mby0+Y29kZWNfbmFt ZSwgY29kZWMtPm5hbWUpID09IDApCisJCQlzZXR1cF9pbnRmKGluZm8sIGNvZGVjKTsKKwl9 CisJbXV0ZXhfdW5sb2NrKCZsaXN0X2xvY2spOworCXJldHVybiAwOworfQorRVhQT1JUX1NZ TUJPTChpcG1pX3NlcmlhbF9jb2RlY19yZWdpc3Rlcik7CisKK3ZvaWQgaXBtaV9zZXJpYWxf Y29kZWNfdW5yZWdpc3RlcihzdHJ1Y3QgaXBtaV9zZXJpYWxfY29kZWMgKmNvZGVjKQorewor CXN0cnVjdCBpcG1pX3NlcmlhbF9pbmZvICppbmZvOworCisJLyoKKwkgKiBHdWFyYW50ZWVk IHRvIGJlIG5vIHVzZXJzIG9uIGFueSBkZXZpY2VzIG9uIHRoaXMgY29kZWMsIGl0CisJICog Y2FuJ3QgdW5yZWdpc3RlciB1bmxlc3MgaXQncyBtb2R1bGUgaXMgYmVpbmcgdW5sb2FkZWQg YW5kCisJICogdGhlIG1vZHVsZSdzIHJlZmNvdW50IGlzIHplcm8uCisJICovCisKKwlwcmlu dGsoS0VSTl9JTkZPIE5QRlggIlVucmVnaXN0ZXJpbmcgJXMgY29kZWNcbiIsIGNvZGVjLT5u YW1lKTsKKworCW11dGV4X2xvY2soJmxpc3RfbG9jayk7CisJbGlzdF9kZWwoJmNvZGVjLT5s aW5rKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGluZm8sICZpbmZvX2xpc3QsIGxpbmspIHsK KwkJaWYgKGluZm8tPmNvZGVjID09IGNvZGVjKQorCQkJLyogRG9lcyBub3QgcmVtb3ZlIHRo ZSBlbnRyeSBmcm9tIHRoZSBsaXN0LiAqLworCQkJaXBtaV9zZXJpYWxfY2xlYW51cF9vbmUo aW5mbyk7CisJfQorCW11dGV4X3VubG9jaygmbGlzdF9sb2NrKTsKK30KK0VYUE9SVF9TWU1C T0woaXBtaV9zZXJpYWxfY29kZWNfdW5yZWdpc3Rlcik7CisKK01PRFVMRV9MSUNFTlNFKCJH UEwiKTsKK01PRFVMRV9BVVRIT1IoIkNvcmV5IE1pbnlhcmQgPG1pbnlhcmRAbXZpc3RhLmNv bT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiU3VwcG9ydCBmb3IgSVBNSSBvdmVyIHNlcmlh bC4iKTsKZGlmZiAtdSAtLW5ldy1maWxlIC0tcmVjdXJzaXZlIGxpbnV4LTIuNi4yOS42Lm9y aWcvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9zZXJpYWxfZGlyZWN0LmMgbGludXgtMi42LjI5 LjYubW9kL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2VyaWFsX2RpcmVjdC5jCi0tLSBsaW51 eC0yLjYuMjkuNi5vcmlnL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2VyaWFsX2RpcmVjdC5j CTE5NjktMTItMzEgMTc6MDA6MDAuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYuMjku Ni5tb2QvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9zZXJpYWxfZGlyZWN0LmMJMjAwOS0wNy0y MSAxMToyODoxOC4wMDAwMDAwMDAgLTA3MDAKQEAgLTAsMCArMSw2NDMgQEAKKy8qCisgKiBp cG1pX3NlcmlhbF9kaXJlY3QuYworICogU2VyaWFsIGludGVyZmFjZSBlbmNvZGVyIGFuZCBk ZWNvZGVyIHJvdXRpbmVzIGZvciBJUE1JIGRpcmVjdAorICogc2VyaWFsIGludGVyZmFjZXMu CisgKgorICogQXV0aG9yOiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKiAgICAgICAg IHNvdXJjZUBtdmlzdGEuY29tCisgKiAgICAgICAgIENvcmV5IE1pbnlhcmQgPGNtaW55YXJk QG12aXN0YS5jb20+CisgKgorICogQ29weXJpZ2h0IDIwMDYgTW9udGFWaXN0YSBTb2Z0d2Fy ZSBJbmMuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl CisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRo ZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u CisgKgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQg QU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorICogIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiAgTUVSQ0hB TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT Q0xBSU1FRC4KKyAqICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBG T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiAgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqICBCVVQg Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS VklDRVM7IExPU1MKKyAqICBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiAgT04gQU5ZIFRIRU9SWSBP RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S CisgKiAgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H IElOIEFOWSBXQVkgT1VUIE9GIFRIRQorICogIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAq ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBhbG9uZworICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdy aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgNjc1IE1h c3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxp bnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lwbWlfc21pLmg+CisjaW5jbHVkZSA8 bGludXgvaXBtaV9tc2dkZWZzLmg+CisjaW5jbHVkZSA8bGludXgvaXBtaV9zZXJpYWxfc20u aD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorCisjZGVmaW5lIFBGWCAiaXBtaV9z ZXJpYWxfZGlyZWN0OiAiCisKK3N0cnVjdCB0bV9vcHRpb25zIHsKKyNkZWZpbmUgQVRUTl9P UFRJT04gImF0dG4iCisJaW50IGF0dG47CisJaW50IGF0dG5fZm9yY2VkOyAvKiBTZXQgYnkg Y29tbWFuZCBsaW5lLiAqLworCisjZGVmaW5lIEVBVFROX09QVElPTiAiZWF0dG4iCisJaW50 IGVhdHRuOworCWludCBlYXR0bl9mb3JjZWQ7IC8qIFNldCBieSBjb21tYW5kIGxpbmUuICov CisJdW5zaWduZWQgY2hhciBlYXR0bl9jaGFyOworCisjZGVmaW5lIFJRQUREUl9PUFRJT04g InJxYSIKKwl1bnNpZ25lZCBjaGFyIHJxYWRkcjsKKyNkZWZpbmUgUlNBRERSX09QVElPTiAi cnNhIgorCXVuc2lnbmVkIGNoYXIgcnNhZGRyOworfTsKKworI2RlZmluZSBERUZBVUxUX1JT QUREUiAweDIwCisjZGVmaW5lIERFRkFVTFRfUlFBRERSIDB4NjEKKworLyoKKyAqIEdpdmUg dGhlIHJlbW90ZSBlbmQgdGhpcyBtdWNoIHRpbWUgKDEwMG1zKSB0byBzZW5kIGEgaGFuZHNo YWtlCisgKiBjaGFyYWN0ZXIgYmVmb3JlIHdlIGdpdmUgdXAuCisgKi8KKyNkZWZpbmUgRE1f SEFORFNIQUtFX1RJTUUgMTAwMDAwCisKKy8qCisgKiBXZSBoYXZlIDQgYnl0ZXMgbW9yZSBm b3IgdGhlIGhlYWRlciBhbmQgdGhlbiB0aGUgZW5kaW5nIGNoZWNrc3VtCisgKiBhYm92ZSB0 aGUgS0NTIGhlYWRlciBzaXplIHdlIGdldC9zZW5kIHRvIHRoZSB1cHBlciBsYXllci4KKyAq LworI2RlZmluZSBETV9IRUFERVJfT1ZFUkhFQURfQllURVMgNQorCisvKgorICogV2UgaGF2 ZSBzdGFydCwgc3RvcCwgNCBieXRlcyBtb3JlIGZvciB0aGUgaGVhZGVyIGJleW9uZCB0aGUg aGVhZGVyCisgKiB3ZSBnZXQsIGFuZCB0aGUgY2hlY2tzdW0uICBUaGUgc3RhcnQgYW5kIHN0 b3AgZG8gbm90IG5lZWQgZXNjYXBpbmcsCisgKiB0aHVzIGRvIG5vdCBuZWVkIGRvdWJsaW5n LCBidXQgdGhlIHJlc3QgZG8uICBTbyB3ZSBoYXZlOgorICogICAgMiArICg1ICogMikgPSAx MgorICovCisjZGVmaW5lIERNX09WRVJIRUFEX0JZVEVTICgyICsgKERNX0hFQURFUl9PVkVS SEVBRF9CWVRFUyAqIDIpKQorCitzdHJ1Y3QgaXBtaV9zZXJpYWxfY29kZWNfZGF0YSB7CisJ c3RydWN0IGlwbWlfc2VyaWFsX2luZm8gKmluZm87CisKKwl1bnNpZ25lZCBjaGFyIHhtaXRf Y2hhcnNbSVBNSV9NQVhfTVNHX0xFTkdUSCAqIDIgKyBETV9PVkVSSEVBRF9CWVRFU107CisJ dW5zaWduZWQgaW50ICB4bWl0X2NoYXJzX2xlbjsKKwl1bnNpZ25lZCBpbnQgIHhtaXRfY2hh cnNfcG9zOworCisJdW5zaWduZWQgY2hhciBzZXFubzsKKwl1bnNpZ25lZCBpbnQgc2VxbnVt X3RhYmxlWzB4NDBdOworCisJdW5zaWduZWQgY2hhciB4bWl0X21zZ1tJUE1JX01BWF9NU0df TEVOR1RIICsgRE1fSEVBREVSX09WRVJIRUFEX0JZVEVTXTsKKwl1bnNpZ25lZCBpbnQgIHht aXRfbXNnX2xlbjsKKworCXVuc2lnbmVkIGNoYXIgcmVjdl9tc2dbSVBNSV9NQVhfTVNHX0xF TkdUSCArIERNX0hFQURFUl9PVkVSSEVBRF9CWVRFU107CisJdW5zaWduZWQgaW50ICByZWN2 X21zZ19sZW47CisJaW50ICAgICAgICAgICBpbl9yZWN2X21zZzsKKwlpbnQgICAgICAgICAg IGluX2VzY2FwZTsKKwlpbnQgICAgICAgICAgIHJlY3ZfbXNnX3Rvb19tYW55OworCisJc3Bp bmxvY2tfdCBsb2NrOworCisJLyoKKwkgKiBVc2VkIHRvIHRpbWUgcmVjZWl2aW5nIGEgaGFu ZHNoYWtlLiAgV2UgZ2l2ZSB0aGUgcmVtb3RlIGVuZAorCSAqIHNvIG11Y2ggdGltZSB0byBz ZW5kIHRoZSBoYW5kc2hha2UgYmVmb3JlIHdlIGdpdmUgdXAgYW5kCisJICoganVzdCBzZW5k LgorCSAqLworCWludCBoYW5kc2hha2VfdGltZTsKKworCXN0cnVjdCB0bV9vcHRpb25zIG9w dGlvbnM7Cit9OworCisjZGVmaW5lIFNVTl9NRkdfSUQJCTB4MDAwMDJhCisjZGVmaW5lIFNV Tl9DUDMwMjBfUFJPRF9JRAkweDBiY2MKKworLyoKKyAqIEJNQ3MgdGhhdCBzdXBwb3J0IHVz aW5nIHRoZSBBU0NJSSBlc2NhcGUgY2hhciAoMHgxYikgYXMgYXR0ZW50aW9uLgorICovCitz dGF0aWMgc3RydWN0IHsgdW5zaWduZWQgaW50IG1mZ19pZCwgcHJvZF9pZDsgfSBhdHRuX2Jt Y3NbXSA9Cit7CisJeyAwLCAwIH0KK307CisKKy8qCisgKiBCTUNzIHRoYXQgdXNlIGEgc3Bl Y2lhbCBlc2NhcGUgc2VxdWVuY2UgKDB4YWEgPGNoYXI+KSBhcyBhdHRlbnRpb24uCisgKi8K K3N0YXRpYyBzdHJ1Y3QgeyB1bnNpZ25lZCBpbnQgbWZnX2lkLCBwcm9kX2lkLCB2YWw7IH0g ZWF0dG5fYm1jc1tdID0KK3sKKwl7IFNVTl9NRkdfSUQsCQlTVU5fQ1AzMDIwX1BST0RfSUQs CQkweDQ3IH0sCisJeyAwLCAwIH0KK307CisKK3N0YXRpYyB2b2lkIGNoZWNrX2RldmlkX29w dGlvbnMoc3RydWN0IGlwbWlfc2VyaWFsX2NvZGVjX2RhdGEgKmRhdGEsCisJCQkJc3RydWN0 IGlwbWlfZGV2aWNlX2lkICppZCkKK3sKKwlpbnQgaTsKKworCWlmICghZGF0YS0+b3B0aW9u cy5hdHRuX2ZvcmNlZCkgeworCQlmb3IgKGkgPSAwOyBhdHRuX2JtY3NbaV0ubWZnX2lkICE9 IDA7IGkrKykgeworCQkJaWYgKChpZC0+bWFudWZhY3R1cmVyX2lkID09IGF0dG5fYm1jc1tp XS5tZmdfaWQpCisJCQkgICAgJiYgKGlkLT5wcm9kdWN0X2lkID09IGF0dG5fYm1jc1tpXS5w cm9kX2lkKSkgeworCQkJCWRhdGEtPm9wdGlvbnMuYXR0biA9IDE7CisJCQkJYnJlYWs7CisJ CQl9CisJCX0KKwl9CisJaWYgKCFkYXRhLT5vcHRpb25zLmVhdHRuX2ZvcmNlZCkgeworCQlm b3IgKGkgPSAwOyBlYXR0bl9ibWNzW2ldLm1mZ19pZCAhPSAwOyBpKyspIHsKKwkJCWlmICgo aWQtPm1hbnVmYWN0dXJlcl9pZCA9PSBlYXR0bl9ibWNzW2ldLm1mZ19pZCkKKwkJCSAgICAm JiAoaWQtPnByb2R1Y3RfaWQgPT0gZWF0dG5fYm1jc1tpXS5wcm9kX2lkKSkgeworCQkJCWRh dGEtPm9wdGlvbnMuZWF0dG4gPSAxOworCQkJCWRhdGEtPm9wdGlvbnMuZWF0dG5fY2hhciA9 IGVhdHRuX2JtY3NbaV0udmFsOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorfQorCitz dGF0aWMgaW50IGNoZWNrX29wdGlvbnMoc3RydWN0IGlwbWlfc2VyaWFsX2NvZGVjX2RhdGEg KmRhdGEsCisJCQkgY29uc3QgY2hhciAqb3B0aW9ucykKK3sKKwljb25zdCBjaGFyICpzOwor CWNoYXIgKm9wdHZhbDsKKwlpbnQgIG9wdHZhbF9sZW47CisJY2hhciAqbmV4dDsKKwlpbnQg IGxlbjsKKwljaGFyICplbmQ7CisKKwlmb3IgKHMgPSBvcHRpb25zOyBzOyBzID0gbmV4dCkg eworCQluZXh0ID0gc3RyY2hyKHMsICcrJyk7CisJCWlmIChuZXh0KSB7CisJCQlsZW4gPSBu ZXh0IC0gczsKKwkJCW5leHQrKzsKKwkJfSBlbHNlCisJCQlsZW4gPSBzdHJsZW4ocyk7CisK KwkJb3B0dmFsID0gc3RyY2hyKHMsICc9Jyk7CisJCWlmIChuZXh0ICYmIG9wdHZhbCA+PSBu ZXh0KQorCQkJb3B0dmFsID0gTlVMTDsKKwkJaWYgKG9wdHZhbCkgeworCQkJbGVuID0gb3B0 dmFsIC0gczsKKwkJCW9wdHZhbCsrOworCQkJaWYgKG5leHQpIHsKKwkJCQlvcHR2YWxfbGVu ID0gbmV4dCAtIG9wdHZhbDsKKwkJCQluZXh0Kys7CisJCQl9IGVsc2UKKwkJCQlvcHR2YWxf bGVuID0gc3RybGVuKG9wdHZhbCk7CisJCX0gZWxzZQorCQkJb3B0dmFsX2xlbiA9IDA7CisJ CWVuZCA9IE5VTEw7CisJCWlmIChzdHJuY21wKEFUVE5fT1BUSU9OLCBzLCBsZW4pID09IDAp IHsKKwkJCWRhdGEtPm9wdGlvbnMuYXR0biA9IDE7CisJCQlkYXRhLT5vcHRpb25zLmF0dG5f Zm9yY2VkID0gMTsKKwkJfSBlbHNlIGlmIChzdHJuY21wKCJubyIgQVRUTl9PUFRJT04sIHMs IGxlbikgPT0gMCkgeworCQkJZGF0YS0+b3B0aW9ucy5hdHRuID0gMDsKKwkJCWRhdGEtPm9w dGlvbnMuYXR0bl9mb3JjZWQgPSAxOworCQl9IGVsc2UgaWYgKHN0cm5jbXAoRUFUVE5fT1BU SU9OLCBzLCBsZW4pID09IDApIHsKKwkJCWRhdGEtPm9wdGlvbnMuZWF0dG4gPSAxOworCQkJ ZGF0YS0+b3B0aW9ucy5lYXR0bl9mb3JjZWQgPSAxOworCQkJaWYgKG9wdHZhbCkKKwkJCQlk YXRhLT5vcHRpb25zLmVhdHRuX2NoYXIKKwkJCQkJPSBzaW1wbGVfc3RydG91bChvcHR2YWws ICZlbmQsIDApOworCQkJZWxzZQorCQkJCWRhdGEtPm9wdGlvbnMuZWF0dG5fY2hhciA9IDB4 NDc7CisJCX0gZWxzZSBpZiAoc3RybmNtcCgibm8iIEVBVFROX09QVElPTiwgcywgbGVuKSA9 PSAwKSB7CisJCQlkYXRhLT5vcHRpb25zLmF0dG4gPSAwOworCQkJZGF0YS0+b3B0aW9ucy5h dHRuX2ZvcmNlZCA9IDE7CisJCX0gZWxzZSBpZiAoc3RybmNtcChSUUFERFJfT1BUSU9OLCBz LCBsZW4pID09IDApIHsKKwkJCWlmIChvcHR2YWwpCisJCQkJZGF0YS0+b3B0aW9ucy5ycWFk ZHIKKwkJCQkJPSBzaW1wbGVfc3RydG91bChvcHR2YWwsICZlbmQsIDApOworCQkJZWxzZSB7 CisJCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlgKKwkJCQkgICAgICAgInJxYSBvcHRpb24g Z2l2ZW4gd2l0aG91dCB2YWx1ZVxuIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJ CX0gZWxzZSBpZiAoc3RybmNtcChSU0FERFJfT1BUSU9OLCBzLCBsZW4pID09IDApIHsKKwkJ CWlmIChvcHR2YWwpCisJCQkJZGF0YS0+b3B0aW9ucy5yc2FkZHIKKwkJCQkJPSBzaW1wbGVf c3RydG91bChvcHR2YWwsICZlbmQsIDApOworCQkJZWxzZSB7CisJCQkJcHJpbnRrKEtFUk5f V0FSTklORyBQRlgKKwkJCQkgICAgICAgInJzYSBvcHRpb24gZ2l2ZW4gd2l0aG91dCB2YWx1 ZVxuIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCX0gZWxzZSB7CisJCQlwcmlu dGsoS0VSTl9XQVJOSU5HIFBGWCAiVW5rbm93biBvcHRpb25zOiAlc1xuIiwKKwkJCSAgICAg ICBvcHRpb25zKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJaWYgKG9wdHZhbCAm JiAhZW5kKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiTm8gdmFsdWUgbmVlZGVk IGF0OiAlc1xuIiwgcyk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlpZiAob3B0dmFs ICYmIGVuZCAhPSAob3B0dmFsICsgb3B0dmFsX2xlbikpIHsKKwkJCXByaW50ayhLRVJOX1dB Uk5JTkcgUEZYICJJbnZhbGlkIHZhbHVlIGZvcjogJXNcbiIsIHMpOworCQkJcmV0dXJuIC1F SU5WQUw7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9hZGRf b3B0aW9ucyhzdHJ1Y3QgaXBtaV9zZXJpYWxfY29kZWNfZGF0YSAqZGF0YSwgY2hhciAqcGFn ZSkKK3sKKwljaGFyIHBmeCA9ICcsJzsKKwljaGFyICpvdXQgPSBwYWdlOworCisJaWYgKGRh dGEtPm9wdGlvbnMuYXR0bikgeworCQlvdXQgKz0gc3ByaW50ZihvdXQsICIlY2F0dG4iLCBw ZngpOworCQlwZnggPSAnKyc7CisJfQorCWlmIChkYXRhLT5vcHRpb25zLmVhdHRuKSB7CisJ CW91dCArPSBzcHJpbnRmKG91dCwgIiVjZWF0dG4iLCBwZngpOworCQlpZiAoZGF0YS0+b3B0 aW9ucy5lYXR0bl9jaGFyICE9IDB4NDcpCisJCQlvdXQgKz0gc3ByaW50ZihvdXQsICI9MHgl eCIsIGRhdGEtPm9wdGlvbnMuZWF0dG5fY2hhcik7CisJCXBmeCA9ICcrJzsKKwl9CisJaWYg KGRhdGEtPm9wdGlvbnMucnFhZGRyICE9IERFRkFVTFRfUlFBRERSKSB7CisJCW91dCArPSBz cHJpbnRmKG91dCwgIiVjcnFhPTB4JXgiLCBwZngsIGRhdGEtPm9wdGlvbnMucnFhZGRyKTsK KwkJcGZ4ID0gJysnOworCX0KKwlpZiAoZGF0YS0+b3B0aW9ucy5yc2FkZHIgIT0gREVGQVVM VF9SU0FERFIpCisJCW91dCArPSBzcHJpbnRmKG91dCwgIiVjcnNhPTB4JXgiLCBwZngsIGRh dGEtPm9wdGlvbnMucnNhZGRyKTsKKworCXJldHVybiBvdXQgLSBwYWdlOworfQorCitzdGF0 aWMgdW5zaWduZWQgY2hhciBpcG1iX2NoZWNrc3VtKHVuc2lnbmVkIGNoYXIgKmRhdGEsIGlu dCBzaXplKQoreworCXVuc2lnbmVkIGNoYXIgY3N1bSA9IDA7CisKKwlmb3IgKDsgc2l6ZSA+ IDA7IHNpemUtLSwgZGF0YSsrKQorCQljc3VtICs9ICpkYXRhOworCisJcmV0dXJuIC1jc3Vt OworfQorCisjZGVmaW5lIERNX1NUQVJUX0NIQVIJCTB4QTAKKyNkZWZpbmUgRE1fU1RPUF9D SEFSCQkweEE1CisjZGVmaW5lIERNX1BBQ0tFVF9IQU5EU0hBS0UJMHhBNgorI2RlZmluZSBE TV9EQVRBX0VTQ0FQRV9DSEFSCTB4QUEKKworc3RhdGljIHZvaWQgZm9ybWF0X21zZyhzdHJ1 Y3QgaXBtaV9zZXJpYWxfY29kZWNfZGF0YSAqZGF0YSwKKwkJICAgICAgIGNvbnN0IHVuc2ln bmVkIGNoYXIgKm1zZywgdW5zaWduZWQgaW50IG1zZ19sZW4pCit7CisJdW5zaWduZWQgaW50 IGk7CisJdW5zaWduZWQgaW50IGxlbiA9IDA7CisJdW5zaWduZWQgY2hhciAqYyA9IGRhdGEt PnhtaXRfY2hhcnM7CisKKwljW2xlbisrXSA9IDB4QTA7CisJZm9yIChpID0gMDsgaSA8IG1z Z19sZW47IGkrKykgeworCQlzd2l0Y2ggKG1zZ1tpXSkgeworCQljYXNlIDB4QTA6CisJCQlj W2xlbisrXSA9IDB4QUE7CisJCQljW2xlbisrXSA9IDB4QjA7CisJCQlicmVhazsKKworCQlj YXNlIDB4QTU6CisJCQljW2xlbisrXSA9IDB4QUE7CisJCQljW2xlbisrXSA9IDB4QjU7CisJ CQlicmVhazsKKworCQljYXNlIDB4QTY6CisJCQljW2xlbisrXSA9IDB4QUE7CisJCQljW2xl bisrXSA9IDB4QjY7CisJCQlicmVhazsKKworCQljYXNlIDB4QUE6CisJCQljW2xlbisrXSA9 IDB4QUE7CisJCQljW2xlbisrXSA9IDB4QkE7CisJCQlicmVhazsKKworCQljYXNlIDB4MUI6 CisJCQljW2xlbisrXSA9IDB4QUE7CisJCQljW2xlbisrXSA9IDB4M0I7CisJCQlicmVhazsK KworCQlkZWZhdWx0OgorCQkJY1tsZW4rK10gPSBtc2dbaV07CisJCX0KKworCX0KKwljW2xl bisrXSA9IDB4QTU7CisJZGF0YS0+eG1pdF9jaGFyc19sZW4gPSBsZW47CisJZGF0YS0+eG1p dF9jaGFyc19wb3MgPSAwOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfcmVjdl9tc2coc3Ry dWN0IGlwbWlfc2VyaWFsX2NvZGVjX2RhdGEgKmRhdGEpCit7CisJdW5zaWduZWQgaW50IHNl cTsKKwl1bnNpZ25lZCBjaGFyICptID0gZGF0YS0+cmVjdl9tc2c7CisJdW5zaWduZWQgaW50 IGxlbiA9IGRhdGEtPnJlY3ZfbXNnX2xlbjsKKwlpbnQgICAgICAgICAgaTsKKworCWlmIChs ZW4gPCA4KSB7CisJCS8qIE1lc3NhZ2VzIG11c3QgYmUgYXQgbGVhc3QgOCBieXRlcyB0byBi ZSB2YWxpZC4gKi8KKwkJaXBtaV9zZXJpYWxfbGxfcHJvdG9jb2xfdmlvbGF0aW9uKGRhdGEt PmluZm8pOworCQlyZXR1cm47CisJfQorCisJLyogTm90ZSB0aGF0IHRoaXMgdmFsaWRhdGVz IGJvdGggY2hlY2tzdW1zIGluIG9uZSBzaG90LiAqLworCWlmIChpcG1iX2NoZWNrc3VtKG0s IGxlbikgIT0gMCkgeworCQlpcG1pX3NlcmlhbF9sbF9jaGVja3N1bV9lcnJvcihkYXRhLT5p bmZvKTsKKwkJcmV0dXJuOworCX0KKwlsZW4tLTsgLyogUmVtb3ZlIHRoZSBjaGVja3N1bSAq LworCisJc2VxID0gbVs0XSA+PiAyOworCisJLyogUHVsbCB0aGUgcnNMdW4gYW5kIHRoZSBO ZXRGTiB0b2dldGhlci4gKi8KKwltWzBdID0gKG1bMV0gJiAweGZjKSB8IChtWzRdICYgMHgz KTsKKwkvKiBOb3cgdGhlIHJlc3Qgb2YgdGhlIGRhdGEgKi8KKwlmb3IgKGkgPSAxOyBpIDwg KGxlbiAtIDQpOyBpKyspCisJCW1baV0gPSBtW2kgKyA0XTsKKwlsZW4gLT0gNDsKKworCWlw bWlfc2VyaWFsX2xsX3JlY3YoZGF0YS0+aW5mbywgbSwgbGVuLCBkYXRhLT5zZXFudW1fdGFi bGVbc2VxXSk7Cit9CisKK3N0YXRpYyB2b2lkIHRyeV90b19zZW5kX2RhdGEoc3RydWN0IGlw bWlfc2VyaWFsX2NvZGVjX2RhdGEgKmRhdGEpCit7CisJdW5zaWduZWQgY2hhciAqYzsKKwl1 bnNpZ25lZCBpbnQgIGxlZnQ7CisJdW5zaWduZWQgaW50ICBzZW50OworCisJaWYgKCFkYXRh LT54bWl0X2NoYXJzX2xlbikKKwkJcmV0dXJuOworCisJaWYgKGRhdGEtPmhhbmRzaGFrZV90 aW1lID4gMCkKKwkJcmV0dXJuOworCisJYyA9IGRhdGEtPnhtaXRfY2hhcnMgKyBkYXRhLT54 bWl0X2NoYXJzX3BvczsKKwlsZWZ0ID0gZGF0YS0+eG1pdF9jaGFyc19sZW4gLSBkYXRhLT54 bWl0X2NoYXJzX3BvczsKKwlzZW50ID0gaXBtaV9zZXJpYWxfbGxfeG1pdChkYXRhLT5pbmZv LCBjLCBsZWZ0KTsKKwlpZiAoc2VudCA9PSBsZWZ0KSB7CisJCS8qIFdlIGFyZSBkb25lIHdp dGggdGhpcyBtZXNzYWdlLiAqLworCQlpZiAoZGF0YS0+eG1pdF9tc2dfbGVuKSB7CisJCQkv KiBTZW5kIHRoZSBuZXh0IG1lc3NhZ2Ugd2UgaGF2ZSB3YWl0aW5nLiAqLworCQkJZm9ybWF0 X21zZyhkYXRhLCBkYXRhLT54bWl0X21zZywgZGF0YS0+eG1pdF9tc2dfbGVuKTsKKwkJCWRh dGEtPnhtaXRfbXNnX2xlbiA9IDA7CisJCX0gZWxzZSB7CisJCQkvKiBOb3RoaW5nIHRvIGRv LiAqLworCQkJZGF0YS0+eG1pdF9jaGFyc19sZW4gPSAwOworCQl9CisJCS8qIFdhaXQgZm9y IHRoZSBoYW5kc2hha2UuICovCisJCWRhdGEtPmhhbmRzaGFrZV90aW1lID0gRE1fSEFORFNI QUtFX1RJTUU7CisJfSBlbHNlIHsKKwkJZGF0YS0+eG1pdF9jaGFyc19wb3MgKz0gc2VudDsK Kwl9Cit9CisKK3N0YXRpYyBpbnQgc2Rfc2V0dXBfdGVybWlvcyhzdHJ1Y3Qga3Rlcm1pb3Mg KnQpCit7CisJLyogTm90aGluZyB0byBkbywgdGhlIGRlZmF1bHQgaXMgZmluZS4gKi8KKwly ZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9pbml0KHN0cnVjdCBpcG1pX3NlcmlhbF9j b2RlY19kYXRhICpkYXRhLAorCQkgICBzdHJ1Y3QgaXBtaV9zZXJpYWxfaW5mbyAqaW5mbywK KwkJICAgY29uc3QgY2hhciAqb3B0aW9ucykKK3sKKwltZW1zZXQoZGF0YSwgMCwgc2l6ZW9m KCpkYXRhKSk7CisJc3Bpbl9sb2NrX2luaXQoJmRhdGEtPmxvY2spOworCWRhdGEtPmluZm8g PSBpbmZvOworCisJLyogUGljayBzb21lIGdvb2QgZGVmYXVsdHMgZm9yIGhlYWRlciBhZGRy ZXNzZXMuICovCisJZGF0YS0+b3B0aW9ucy5yc2FkZHIgPSBERUZBVUxUX1JTQUREUjsKKwlk YXRhLT5vcHRpb25zLnJxYWRkciA9IERFRkFVTFRfUlFBRERSOworCisJcmV0dXJuIGNoZWNr X29wdGlvbnMoZGF0YSwgb3B0aW9ucyk7Cit9CisKK3N0YXRpYyB2b2lkIHNkX2NsZWFudXAo c3RydWN0IGlwbWlfc2VyaWFsX2NvZGVjX2RhdGEgKmRhdGEpCit7CisJLyogTm90aGluZyB0 byBkby4gKi8KK30KKworc3RhdGljIGludCBzZF9zaXplKHZvaWQpCit7CisJcmV0dXJuIHNp emVvZihzdHJ1Y3QgaXBtaV9zZXJpYWxfY29kZWNfZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lk IHNkX2hhbmRsZV9jaGFyKHN0cnVjdCBpcG1pX3NlcmlhbF9jb2RlY19kYXRhICpkYXRhLAor CQkJICAgdW5zaWduZWQgY2hhciBjaCkKK3sKKwl1bnNpZ25lZCBpbnQgbGVuID0gZGF0YS0+ cmVjdl9tc2dfbGVuOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzd2l0Y2ggKGNoKSB7 CisJY2FzZSBETV9TVEFSVF9DSEFSOgorCQlpZiAoZGF0YS0+aW5fcmVjdl9tc2cpCisJCQlp cG1pX3NlcmlhbF9sbF9wcm90b2NvbF92aW9sYXRpb24oZGF0YS0+aW5mbyk7CisJCWRhdGEt PmluX3JlY3ZfbXNnID0gMTsKKwkJZGF0YS0+cmVjdl9tc2dfbGVuID0gMDsKKwkJZGF0YS0+ cmVjdl9tc2dfdG9vX21hbnkgPSAwOworCQlkYXRhLT5pbl9lc2NhcGUgPSAwOworCQlicmVh azsKKworCWNhc2UgRE1fU1RPUF9DSEFSOgorCQlpZiAoIWRhdGEtPmluX3JlY3ZfbXNnKQor CQkJaXBtaV9zZXJpYWxfbGxfcHJvdG9jb2xfdmlvbGF0aW9uKGRhdGEtPmluZm8pOworCQll bHNlIGlmIChkYXRhLT5pbl9lc2NhcGUpIHsKKwkJCWRhdGEtPmluX3JlY3ZfbXNnID0gMDsK KwkJCWlwbWlfc2VyaWFsX2xsX3Byb3RvY29sX3Zpb2xhdGlvbihkYXRhLT5pbmZvKTsKKwkJ fSBlbHNlIGlmIChkYXRhLT5yZWN2X21zZ190b29fbWFueSkgeworCQkJZGF0YS0+aW5fcmVj dl9tc2cgPSAwOworCQkJaXBtaV9zZXJpYWxfbGxfcHJvdG9jb2xfdmlvbGF0aW9uKGRhdGEt PmluZm8pOworCQl9IGVsc2UgeworCQkJZGF0YS0+aW5fcmVjdl9tc2cgPSAwOworCQkJaGFu ZGxlX3JlY3ZfbXNnKGRhdGEpOworCQl9CisJCWRhdGEtPmluX2VzY2FwZSA9IDA7CisJCWJy ZWFrOworCisJY2FzZSBETV9QQUNLRVRfSEFORFNIQUtFOgorCQkvKiBHb3QgYSBoYW5kc2hh a2UsIHdlIGNhbiBzZW5kIG5vdy4gKi8KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmRhdGEtPmxv Y2ssIGZsYWdzKTsKKwkJZGF0YS0+aGFuZHNoYWtlX3RpbWUgPSAwOworCQl0cnlfdG9fc2Vu ZF9kYXRhKGRhdGEpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkYXRhLT5sb2NrLCBm bGFncyk7CisJCWRhdGEtPmluX2VzY2FwZSA9IDA7CisJCWJyZWFrOworCisJY2FzZSBETV9E QVRBX0VTQ0FQRV9DSEFSOgorCQlkYXRhLT5pbl9lc2NhcGUgPSAxOworCQlicmVhazsKKwor CWNhc2UgMHgxYjoKKwkJaWYgKGRhdGEtPm9wdGlvbnMuYXR0bikKKwkJCWlwbWlfc2VyaWFs X2xsX2F0dG4oZGF0YS0+aW5mbyk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJaWYgKCFk YXRhLT5pbl9yZWN2X21zZykKKwkJCS8qIElnbm9yZSBjaGFyYWN0ZXJzIG91dHNpZGUgb2Yg bWVzc2FnZXMuICovCisJCQlicmVhazsKKworCQlpZiAoZGF0YS0+aW5fZXNjYXBlKSB7CisJ CQlkYXRhLT5pbl9lc2NhcGUgPSAwOworCQkJaWYgKGRhdGEtPm9wdGlvbnMuZWF0dG4KKwkJ CQkJJiYgKGNoID09IGRhdGEtPm9wdGlvbnMuZWF0dG5fY2hhcikpIHsKKwkJCQlpcG1pX3Nl cmlhbF9sbF9hdHRuKGRhdGEtPmluZm8pOworCQkJCWdvdG8gb3V0OworCQkJfQorCisJCQlz d2l0Y2ggKGNoKSB7CisJCQljYXNlIDB4QjA6CisJCQkJY2ggPSBETV9TVEFSVF9DSEFSOwor CQkJCWJyZWFrOworCQkJY2FzZSAweEI1OgorCQkJCWNoID0gRE1fU1RPUF9DSEFSOworCQkJ CWJyZWFrOworCQkJY2FzZSAweEI2OgorCQkJCWNoID0gRE1fUEFDS0VUX0hBTkRTSEFLRTsK KwkJCQlicmVhazsKKwkJCWNhc2UgMHhCQToKKwkJCQljaCA9IERNX0RBVEFfRVNDQVBFX0NI QVI7CisJCQkJYnJlYWs7CisJCQljYXNlIDB4M0I6CisJCQkJY2ggPSAweDFiOworCQkJCWJy ZWFrOworCQkJZGVmYXVsdDoKKwkJCQlpcG1pX3NlcmlhbF9sbF9wcm90b2NvbF92aW9sYXRp b24oZGF0YS0+aW5mbyk7CisJCQkJZGF0YS0+cmVjdl9tc2dfdG9vX21hbnkgPSAxOworCQkJ CXJldHVybjsKKwkJCX0KKwkJfQorCisJCWlmICghZGF0YS0+cmVjdl9tc2dfdG9vX21hbnkp IHsKKwkJCWlmIChsZW4gPj0gc2l6ZW9mKGRhdGEtPnJlY3ZfbXNnKSkgeworCQkJCWRhdGEt PnJlY3ZfbXNnX3Rvb19tYW55ID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJZGF0YS0+ cmVjdl9tc2dbbGVuXSA9IGNoOworCQkJZGF0YS0+cmVjdl9tc2dfbGVuKys7CisJCX0KKwkJ YnJlYWs7CisJfQorIG91dDoKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgc2Rfc2VuZF9t c2coc3RydWN0IGlwbWlfc2VyaWFsX2NvZGVjX2RhdGEgKmRhdGEsCisJCSAgICAgICBjb25z dCB1bnNpZ25lZCBjaGFyICptc2csIHVuc2lnbmVkIGludCBtc2dfbGVuLAorCQkgICAgICAg dW5zaWduZWQgaW50IHNlcSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCAgICAg ICAgICAgcnYgPSAwOworCXVuc2lnbmVkIGNoYXIgKm07CisJdW5zaWduZWQgaW50ICBpLCBq OworCXVuc2lnbmVkIGNoYXIgc2Vxbm87CisKKwlpZiAobXNnX2xlbiA+IElQTUlfTUFYX01T R19MRU5HVEgpCisJCXJldHVybiAtRUZCSUc7CisJaWYgKG1zZ19sZW4gPCAyKQorCQlyZXR1 cm4gLUVJTlZBTDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkYXRhLT5sb2NrLCBmbGFncyk7 CisJaWYgKGRhdGEtPnhtaXRfbXNnX2xlbikgeworCQkvKiBTb21ldGhpbmcgaXMgc3RpbGwg d2FpdGluZyB0byBiZSBzZW50LiAqLworCQlydiA9IC1FQlVTWTsKKwkJZ290byBvdXRfdW5s b2NrOworCX0KKworCWkgPSAwOworCW0gPSBkYXRhLT54bWl0X21zZzsKKwltW2krK10gPSBk YXRhLT5vcHRpb25zLnJzYWRkcjsJLyogcnNBZGRyICovCisJbVtpKytdID0gbXNnWzBdOwkJ LyogTmV0Rk4vcnNMVU4gKi8KKwltW2krK10gPSBpcG1iX2NoZWNrc3VtKG0sIDIpOwkvKiBj aGVja3N1bTEgKi8KKwltW2krK10gPSBkYXRhLT5vcHRpb25zLnJxYWRkcjsJLyogcnFBZGRy ICovCisKKwlzZXFubyA9IGRhdGEtPnNlcW5vOworCWRhdGEtPnNlcW5vID0gKGRhdGEtPnNl cW5vICsgMSkgJiAweDNmOworCWRhdGEtPnNlcW51bV90YWJsZVtzZXFub10gPSBzZXE7CisJ bVtpKytdID0gc2Vxbm8gPDwgMjsJCS8qIHNlcW5vL3JxTFVOICovCisJbVtpKytdID0gbXNn WzFdOwkJLyogY21kICovCisJZm9yIChqID0gMjsgaiA8IG1zZ19sZW47IGorKykKKwkJbVtp KytdID0gbXNnW2pdOwkvKiBkYXRhICovCisJbVtpXSA9IGlwbWJfY2hlY2tzdW0obSArIDMs IGkgLSAzKTsgLyogY2hlY2tzdW0yICovCisJaSsrOworCisJaWYgKGRhdGEtPnhtaXRfY2hh cnNfbGVuID09IDApIHsKKwkJLyogVHJhbnNtaXQgcXVldWUgaXMgZW1wdHksIGp1c3QgZm9y bWF0IGl0IG5vdyB0byBnby4gKi8KKwkJZm9ybWF0X21zZyhkYXRhLCBtLCBpKTsKKwkJdHJ5 X3RvX3NlbmRfZGF0YShkYXRhKTsKKwl9IGVsc2UgeworCQkvKiBTYXZlIGl0IGZvciBhZnRl ciB0aGUgdHJhbnNtaXQgcXVldWUgZW1wdHlpbmcuICovCisJCWRhdGEtPnhtaXRfbXNnX2xl biA9IGk7CisJfQorCisgb3V0X3VubG9jazoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZk YXRhLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJ2OworfQorCitzdGF0aWMgdm9pZCBzZF90 eF9yZWFkeShzdHJ1Y3QgaXBtaV9zZXJpYWxfY29kZWNfZGF0YSAqZGF0YSkKK3sKKwl1bnNp Z25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRhdGEtPmxvY2ssIGZs YWdzKTsKKwl0cnlfdG9fc2VuZF9kYXRhKGRhdGEpOworCXNwaW5fdW5sb2NrX2lycXJlc3Rv cmUoJmRhdGEtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgc2RfdGltZXJfdGlj ayhzdHJ1Y3QgaXBtaV9zZXJpYWxfY29kZWNfZGF0YSAqZGF0YSwKKwkJCSAgdW5zaWduZWQg aW50IHRpbWVfc2luY2VfbGFzdCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bp bl9sb2NrX2lycXNhdmUoJmRhdGEtPmxvY2ssIGZsYWdzKTsKKwlpZiAoZGF0YS0+aGFuZHNo YWtlX3RpbWUgPiAwKSB7CisJCWRhdGEtPmhhbmRzaGFrZV90aW1lIC09IHRpbWVfc2luY2Vf bGFzdDsKKwkJaWYgKGRhdGEtPmhhbmRzaGFrZV90aW1lIDw9IDApCisJCQl0cnlfdG9fc2Vu ZF9kYXRhKGRhdGEpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkYXRhLT5sb2Nr LCBmbGFncyk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc2RfY2FwYWJpbGl0aWVzKHN0 cnVjdCBpcG1pX3NlcmlhbF9jb2RlY19kYXRhICpkYXRhKQoreworCXVuc2lnbmVkIGludCBj ID0gKElQTUlfU0VSSUFMX1NVUFBPUlRTX0dFVF9GTEFHUworCQkJICB8IElQTUlfU0VSSUFM X1NVUFBPUlRTX0VWRU5UX0JVRkZFUik7CisJaWYgKChkYXRhLT5vcHRpb25zLmF0dG4pIHx8 IChkYXRhLT5vcHRpb25zLmVhdHRuKSkKKwkJYyB8PSBJUE1JX1NFUklBTF9IQVNfQVRUTjsK KwllbHNlCisJCWMgfD0gSVBNSV9TRVJJQUxfTkVFRFNfR0VUX0ZMQUdTX1BPTExJTkc7CisJ cmV0dXJuIGM7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXBtaV9zZXJpYWxfY29kZWMgc2RfY29k ZWMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm5hbWUgID0gIkRpcmVjdCIsCisK KwkuY2FwYWJpbGl0aWVzCT0gc2RfY2FwYWJpbGl0aWVzLAorCS5zZXR1cF90ZXJtaW9zCT0g c2Rfc2V0dXBfdGVybWlvcywKKwkuaW5pdAkJPSBzZF9pbml0LAorCS5jbGVhbnVwCT0gc2Rf Y2xlYW51cCwKKwkuc2l6ZQkJPSBzZF9zaXplLAorCS5zZW5kX21zZwk9IHNkX3NlbmRfbXNn LAorCS5oYW5kbGVfY2hhcgk9IHNkX2hhbmRsZV9jaGFyLAorCS5jaGVja19kZXZfaWQgICA9 IGNoZWNrX2RldmlkX29wdGlvbnMsCisJLnRpbWVyX3RpY2sgICAgID0gc2RfdGltZXJfdGlj aywKKwkudHhfcmVhZHkJPSBzZF90eF9yZWFkeSwKKwkuYWRkX29wdGlvbnMJPSBzZF9hZGRf b3B0aW9ucworfTsKKworc3RhdGljIF9faW5pdCBpbnQKK2luaXRfaXBtaV9zZXJpYWxfZGly ZWN0X2NvZGVjKHZvaWQpCit7CisJcmV0dXJuIGlwbWlfc2VyaWFsX2NvZGVjX3JlZ2lzdGVy KCZzZF9jb2RlYyk7Cit9CisKK21vZHVsZV9pbml0KGluaXRfaXBtaV9zZXJpYWxfZGlyZWN0 X2NvZGVjKTsKKworc3RhdGljIF9fZXhpdCB2b2lkCitleGl0X2lwbWlfc2VyaWFsX2RpcmVj dF9jb2RlYyh2b2lkKQoreworCWlwbWlfc2VyaWFsX2NvZGVjX3VucmVnaXN0ZXIoJnNkX2Nv ZGVjKTsKK30KK21vZHVsZV9leGl0KGV4aXRfaXBtaV9zZXJpYWxfZGlyZWN0X2NvZGVjKTsK K01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtdSAtLW5ldy1maWxlIC0tcmVjdXJzaXZl IGxpbnV4LTIuNi4yOS42Lm9yaWcvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9zZXJpYWxfcmFk aXN5c19hc2NpaS5jIGxpbnV4LTIuNi4yOS42Lm1vZC9kcml2ZXJzL2NoYXIvaXBtaS9pcG1p X3NlcmlhbF9yYWRpc3lzX2FzY2lpLmMKLS0tIGxpbnV4LTIuNi4yOS42Lm9yaWcvZHJpdmVy cy9jaGFyL2lwbWkvaXBtaV9zZXJpYWxfcmFkaXN5c19hc2NpaS5jCTE5NjktMTItMzEgMTc6 MDA6MDAuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYuMjkuNi5tb2QvZHJpdmVycy9j aGFyL2lwbWkvaXBtaV9zZXJpYWxfcmFkaXN5c19hc2NpaS5jCTIwMDktMDctMjEgMTE6Mjg6 MTguMDAwMDAwMDAwIC0wNzAwCkBAIC0wLDAgKzEsNjExIEBACisvKgorICogaXBtaV9zZXJp YWxfcmFkaXN5c19hc2NpaS5jCisgKiBTZXJpYWwgaW50ZXJmYWNlIGVuY29kZXIgYW5kIGRl Y29kZXIgcm91dGluZXMgZm9yIFJhZGlzeXMgQVNDSUkgbW9kZS4KKyAqCisgKiBBdXRob3I6 IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqICAgICAgICAgc291cmNlQG12aXN0YS5j b20KKyAqICAgICAgICAgQ29yZXkgTWlueWFyZCA8Y21pbnlhcmRAbXZpc3RhLmNvbT4KKyAq CisgKiBDb3B5cmlnaHQgMjAwNiBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KKyAqCisgKiAg VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh dCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKgorICogIFRI SVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJ TVBMSUVECisgKiAgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogIElO IE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ TkRJUkVDVCwKKyAqICBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogIEJVVCBOT1QgTElNSVRFRCBUTywg UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICog IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI T1dFVkVSIENBVVNFRCBBTkQKKyAqICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IKKyAqICBUT1JUIChJTkNM VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg T0YgVEhFCisgKiAgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogIFlvdSBzaG91bGQgaGF2 ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFs b25nCisgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRn ZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cisj aW5jbHVkZSA8bGludXgvaXBtaV9zbWkuaD4KKyNpbmNsdWRlIDxsaW51eC9pcG1pX21zZ2Rl ZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9pcG1pX3NlcmlhbF9zbS5oPgorI2luY2x1ZGUgPGxp bnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKworI2RlZmluZSBQ RlggImlwbWlfc2VyaWFsX3JhZGlzeXNfYXNjaWk6ICIKKworLyoKKyAqIFR3byBieXRlcyBm b3IgZXZlcnkgY2hhcmFjdGVyIHBsdXMgdGhlIHRyYWlsaW5nIG5ld2xpbmUuICBUaGVyZSBh cmUKKyAqIGZpdmUgb3ZlcmhlYWQgYnl0ZXMgdGhhdCBhcmUgZm9yIHRoZSBoZWFkZXIgYW5k IGNoZWNrc3VtIGJleW9uZCB0aGUKKyAqIEtDUyBoZWFkZXIgd2UgZ2V0L3NlbmQgdG8gdGhl IHVwcGVyIGxheWVyLi4KKyAqLworI2RlZmluZSBSQV9PVkVSSEVBRCA1CisjZGVmaW5lIFJB X01BWF9DSEFSU19TSVpFICgoKElQTUlfTUFYX01TR19MRU5HVEggKyBSQV9PVkVSSEVBRCkg KiAyKSArIDQpCisKKy8qCisgKiBHaXZlIHRoZSByZW1vdGUgZW5kIHRoaXMgbXVjaCB0aW1l ICgxMDBtcykgdG8gc2VuZCBhIHJlc3BvbnNlCisgKiBiZWZvcmUgd2UgZ2l2ZSB1cCBhbmQg cmV0cnkgdGhlIGdpdmVuIG51bWJlciBvZiB0aW1lcy4KKyAqLworI2RlZmluZSBSQV9IQU5E U0hBS0VfVElNRSAgICA1MDAwMDAwCisjZGVmaW5lIFJBX0hBTkRTSEFLRV9SRVRSSUVTIDUK Kworc3RydWN0IGlwbWlfc2VyaWFsX2NvZGVjX2RhdGEgeworCXN0cnVjdCBpcG1pX3Nlcmlh bF9pbmZvICppbmZvOworCisJdW5zaWduZWQgY2hhciB4bWl0X2NoYXJzW1JBX01BWF9DSEFS U19TSVpFXTsKKwl1bnNpZ25lZCBpbnQgIHhtaXRfY2hhcnNfbGVuOworCXVuc2lnbmVkIGlu dCAgeG1pdF9jaGFyc19wb3M7CisJdW5zaWduZWQgaW50ICB4bWl0X2NoYXJzX3NlcTsKKwl1 bnNpZ25lZCBjaGFyIHhtaXRfY2hhcnNfbmV0Zm47CisJdW5zaWduZWQgY2hhciB4bWl0X2No YXJzX2NtZDsKKworCXVuc2lnbmVkIGNoYXIgcmVjdl9jaGFyc1tSQV9NQVhfQ0hBUlNfU0la RV07CisJdW5zaWduZWQgaW50ICByZWN2X2NoYXJzX2xlbjsKKwlpbnQgICAgICAgICAgIHJl Y3ZfY2hhcnNfdG9vX21hbnk7CisKKwl1bnNpZ25lZCBjaGFyIHNlcW5vOworCXVuc2lnbmVk IGludCBzZXFudW1fdGFibGVbMHg0MF07CisKKwl1bnNpZ25lZCBjaGFyIHhtaXRfbXNnW0lQ TUlfTUFYX01TR19MRU5HVEggKyBSQV9PVkVSSEVBRF07CisJdW5zaWduZWQgaW50ICB4bWl0 X21zZ19sZW47CisJdW5zaWduZWQgaW50ICB4bWl0X21zZ19zZXE7CisJdW5zaWduZWQgY2hh ciB4bWl0X21zZ19uZXRmbjsKKwl1bnNpZ25lZCBjaGFyIHhtaXRfbXNnX2NtZDsKKwl1bnNp Z25lZCBjaGFyIHJlY3ZfbXNnW0lQTUlfTUFYX01TR19MRU5HVEggKyBSQV9PVkVSSEVBRF07 CisJdW5zaWduZWQgaW50ICByZWN2X21zZ19sZW47CisKKwl1bnNpZ25lZCBjaGFyIGJtY19p MmNfYWRkcjsKKwl1bnNpZ25lZCBjaGFyIHNtaV9pMmNfYWRkcjsKKworCS8qCisJICogVXNl ZCB0byB0aW1lIHJlY2VpdmluZyB0aGUgSVBNQiBhZGRyZXNzLgorCSAqLworCWludCBoYW5k c2hha2VfdGltZTsKKwlpbnQgaGFuZHNoYWtlX3JldHJpZXNfbGVmdDsKKwlpbnQgaGFuZHNo YWtlX2RvbmU7CisKKwlzcGlubG9ja190IGxvY2s7CisKKwl2b2lkICgqcmVjdl9tc2dfaGFu ZGxlcikoc3RydWN0IGlwbWlfc2VyaWFsX2NvZGVjX2RhdGEgKmRhdGEsCisJCQkJIGNvbnN0 IHVuc2lnbmVkIGNoYXIgKm1zZywKKwkJCQkgdW5zaWduZWQgaW50IGxlbik7Cit9OworCitz dGF0aWMgaW50IHJhX2FkZF9vcHRpb25zKHN0cnVjdCBpcG1pX3NlcmlhbF9jb2RlY19kYXRh ICpkYXRhLCBjaGFyICpwYWdlKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWdu ZWQgY2hhcgoraXBtYl9jaGVja3N1bShjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQg c2l6ZSkKK3sKKwl1bnNpZ25lZCBjaGFyIGNzdW0gPSAwOworCisJZm9yICg7IHNpemUgPiAw OyBzaXplLS0sIGRhdGErKykKKwkJY3N1bSArPSAqZGF0YTsKKworCXJldHVybiAtY3N1bTsK K30KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgaGV4MmNoYXJbMTZdID0geworCScwJywgJzEn LCAnMicsICczJywgJzQnLCAnNScsICc2JywgJzcnLAorCSc4JywgJzknLCAnQScsICdCJywg J0MnLCAnRCcsICdFJywgJ0YnCit9OworCitzdGF0aWMgdm9pZCBmb3JtYXRfbXNnKHN0cnVj dCBpcG1pX3NlcmlhbF9jb2RlY19kYXRhICpkYXRhLAorCQkgICAgICAgY29uc3QgdW5zaWdu ZWQgY2hhciAqbXNnLCB1bnNpZ25lZCBpbnQgbXNnX2xlbikKK3sKKwlpbnQgaTsKKwlpbnQg bGVuOworCXVuc2lnbmVkIGNoYXIgKmMgPSBkYXRhLT54bWl0X2NoYXJzOworCisJLyoKKwkg KiBObyBuZWVkIGZvciBjaGVja3Mgb24gdGhlIG91dHB1dCBsZW5ndGgsIHRoZSBvdXRwdXQg YnVmZmVyIGlzCisJICogZ3VhcmFudGVlZCB0byBiZSBiaWcgZW5vdWdoLgorCSAqLworCWxl biA9IDA7CisJZm9yIChpID0gMDsgaSA8IG1zZ19sZW47IGkrKykgeworCQljW2xlbisrXSA9 IGhleDJjaGFyW21zZ1tpXSA+PiA0XTsKKwkJY1tsZW4rK10gPSBoZXgyY2hhclttc2dbaV0g JiAweGZdOworCX0KKwljW2xlbisrXSA9IDB4MGQ7CisKKwlkYXRhLT54bWl0X2NoYXJzX3Bv cyA9IDA7CisJZGF0YS0+eG1pdF9jaGFyc19sZW4gPSBsZW47CisJZGF0YS0+eG1pdF9jaGFy c19zZXEgPSBkYXRhLT54bWl0X21zZ19zZXE7CisJZGF0YS0+eG1pdF9jaGFyc19uZXRmbiA9 IGRhdGEtPnhtaXRfbXNnX25ldGZuOworCWRhdGEtPnhtaXRfY2hhcnNfY21kID0gZGF0YS0+ eG1pdF9tc2dfY21kOworfQorCitzdGF0aWMgaW50IGZyb21oZXgodW5zaWduZWQgY2hhciBj KQoreworCWlmIChpc2RpZ2l0KGMpKQorCQlyZXR1cm4gYyAtICcwJzsKKwllbHNlIGlmIChp c3hkaWdpdChjKSkKKwkJcmV0dXJuIHRvbG93ZXIoYykgLSAnYScgKyAxMDsKKwllbHNlCisJ CXJldHVybiAtRUlOVkFMOworfQorCisvKgorICogQ2FsbGVkIHdoZW4gdGhlIDB4MGQgaXMg c2Vlbi4KKyAqLworc3RhdGljIGludCB1bmZvcm1hdF9tc2coc3RydWN0IGlwbWlfc2VyaWFs X2NvZGVjX2RhdGEgKmRhdGEpCit7CisJdW5zaWduZWQgY2hhciAqciA9IGRhdGEtPnJlY3Zf Y2hhcnM7CisJdW5zaWduZWQgY2hhciAqbyA9IGRhdGEtPnJlY3ZfbXNnOworCXVuc2lnbmVk IGludCBsZW4gPSBkYXRhLT5yZWN2X2NoYXJzX2xlbjsKKwl1bnNpZ25lZCBpbnQgcCA9IDA7 CisJdW5zaWduZWQgaW50IGkgPSAwOworCWludCAgICAgICAgICBydjsKKworCXdoaWxlIChw IDwgbGVuKSB7CisJCWlmIChpID4gc2l6ZW9mKGRhdGEtPnJlY3ZfbXNnKSkKKwkJCXJldHVy biAtRUZCSUc7CisJCXJ2ID0gZnJvbWhleChyW3BdKTsKKwkJaWYgKHJ2IDwgMCkKKwkJCXJl dHVybiBydjsKKwkJb1tpXSA9IHJ2IDw8IDQ7CisJCXArKzsKKwkJaWYgKHAgPj0gbGVuKQor CQkJcmV0dXJuIC1FSU5WQUw7CisJCXJ2ID0gZnJvbWhleChyW3BdKTsKKwkJaWYgKHJ2IDwg MCkKKwkJCXJldHVybiBydjsKKwkJb1tpXSB8PSBydjsKKwkJcCsrOworCQlpKys7CisJfQor CWRhdGEtPnJlY3ZfbXNnX2xlbiA9IGk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lk IGhhbmRsZV9yZWN2X21zZyhzdHJ1Y3QgaXBtaV9zZXJpYWxfY29kZWNfZGF0YSAqZGF0YSkK K3sKKwl1bnNpZ25lZCBpbnQgc2VxOworCXVuc2lnbmVkIGNoYXIgKm0gPSBkYXRhLT5yZWN2 X21zZzsKKwl1bnNpZ25lZCBpbnQgbGVuID0gZGF0YS0+cmVjdl9tc2dfbGVuOworCWludCAg ICAgICAgICBpOworCisJaWYgKGRhdGEtPnJlY3ZfbXNnX2hhbmRsZXIpIHsKKwkJZGF0YS0+ cmVjdl9tc2dfaGFuZGxlcihkYXRhLCBtLCBsZW4pOworCQlyZXR1cm47CisJfQorCisJaWYg KGxlbiA8IDgpIHsKKwkJLyogTWVzc2FnZXMgbXVzdCBiZSBhdCBsZWFzdCA4IGJ5dGVzICov CisJCWlwbWlfc2VyaWFsX2xsX3Byb3RvY29sX3Zpb2xhdGlvbihkYXRhLT5pbmZvKTsKKwkJ cmV0dXJuOworCX0KKworCWlmIChtWzNdID09IGRhdGEtPmJtY19pMmNfYWRkcikgeworCQlp ZiAoaXBtYl9jaGVja3N1bShtLCBsZW4pICE9IDApIHsKKwkJCWlwbWlfc2VyaWFsX2xsX2No ZWNrc3VtX2Vycm9yKGRhdGEtPmluZm8pOworCQkJcmV0dXJuOworCQl9CisJCS8qIFJlbW92 ZSB0aGUgZmluYWwgY2hlY2tzdW0uICovCisJCWxlbi0tOworCisJCS8qCisJCSAqIEl0J3Mg YSBtZXNzYWdlIHN0cmFpZ2h0IGZyb20gdGhlIEJNQyAoYSByZXNwb25zZSkuCisJCSAqIFRh a2UgdGhlIGRhdGEgZnJvbSB0aGUgaGVhZGVyIHRoYXQgd2UgbmVlZCBhbmQKKwkJICogd3Jp dGUgb3ZlciB0aGUgaGVhZGVyLgorCQkgKi8KKwkJbVswXSA9IChtWzFdICYgMHhmYykgfCAo bVs0XSAmIDB4MDMpOworCQltWzFdID0gbVs1XTsKKwkJc2VxID0gbVs0XSA+PiAyOworCQlm b3IgKGkgPSAyOyBpIDwgKGxlbiAtIDQpOyBpKyspCisJCQltW2ldID0gbVtpKzRdOworCQlp cG1pX3NlcmlhbF9sbF9yZWN2KGRhdGEtPmluZm8sIG0sIGxlbiAtIDQsCisJCQkJICAgIGRh dGEtPnNlcW51bV90YWJsZVtzZXFdKTsKKwl9IGVsc2UgeworCQkvKiBOb3QgZnJvbSB0aGUg Qk1DLCBtdXN0IGJlIGZyb20gdGhlIElQTUIuICovCisKKwkJaWYgKChsZW4gKyAzKSA+IElQ TUlfTUFYX01TR19MRU5HVEgpIHsKKwkJCWlwbWlfc2VyaWFsX2xsX3Byb3RvY29sX3Zpb2xh dGlvbihkYXRhLT5pbmZvKTsKKwkJCXJldHVybjsKKwkJfQorCisJCS8qIE1ha2Ugcm9vbSBm b3IgYSBnZXQgbWVzc2FnZSBjb21tYW5kIGhlYWRlci4gKi8KKwkJZm9yIChpID0gbGVuOyBp ID4gMDsgaS0tKQorCQkJLyoKKwkJCSAqIE5vdGU6IFRoaXMgaXMgaSArIDMsIG5vdCBpICsg NCwgYmVjYXVzZSB0aGUKKwkJCSAqIEdFVF9NU0cgcmVzcG9uc2UgZG9lcyBub3QgaGF2ZSB0 aGUKKwkJCSAqIGRlc3RpbmF0aW9uIGFkZHJlc3MgaW4gdGhlIG1lc3NhZ2UuICBTbyB3ZQor CQkJICogd3JpdGUgb3ZlciB0aGF0IGZpZWxkLgorCQkJICovCisJCQltW2kgKyAzXSA9IG1b aV07CisJCS8qIEdldCBtZXNzYWdlIGNvbW1hbmQgaGVhZGVyLiAqLworCQltWzBdID0gSVBN SV9ORVRGTl9BUFBfUkVTUE9OU0UgPDwgMjsKKwkJbVsxXSA9IElQTUlfR0VUX01TR19DTUQ7 CisJCW1bMl0gPSAwOyAvKiBjb21wbGV0aW9uIGNvZGUgKi8KKwkJbVszXSA9IDA7IC8qIGNo YW5uZWwgKi8KKwkJaXBtaV9zZXJpYWxfbGxfYXN5bmMoZGF0YS0+aW5mbywgbSwgbGVuICsg Myk7CisJfQorfQorCitzdGF0aWMgdm9pZCB0cnlfdG9fc2VuZF9kYXRhKHN0cnVjdCBpcG1p X3NlcmlhbF9jb2RlY19kYXRhICpkYXRhLAorCQkJICAgICB1bnNpZ25lZCBsb25nICpmbGFn cykKK3sKKwl1bnNpZ25lZCBjaGFyICpjOworCXVuc2lnbmVkIGludCAgbGVmdDsKKwl1bnNp Z25lZCBpbnQgIHNlbnQ7CisKKwlpZiAoIWRhdGEtPnhtaXRfY2hhcnNfbGVuKQorCQlyZXR1 cm47CisKKyByZXN0YXJ0OgorCWMgPSBkYXRhLT54bWl0X2NoYXJzICsgZGF0YS0+eG1pdF9j aGFyc19wb3M7CisJbGVmdCA9IGRhdGEtPnhtaXRfY2hhcnNfbGVuIC0gZGF0YS0+eG1pdF9j aGFyc19wb3M7CisJc2VudCA9IGlwbWlfc2VyaWFsX2xsX3htaXQoZGF0YS0+aW5mbywgYywg bGVmdCk7CisJaWYgKHNlbnQgPT0gbGVmdCkgeworCQkvKiBXZSBhcmUgZG9uZSB3aXRoIHRo aXMgbWVzc2FnZS4gKi8KKworCQlpZiAoKGRhdGEtPnhtaXRfY2hhcnNfbmV0Zm4gPT0gSVBN SV9ORVRGTl9BUFBfUkVRVUVTVCkKKwkJICAgICYmIChkYXRhLT54bWl0X2NoYXJzX2NtZCA9 PSBJUE1JX1NFTkRfTVNHX0NNRCkpIHsKKwkJCS8qCisJCQkgKiBUaGUgdHJhbnNtaXR0ZWQg Y2hhcmFjdGVycyB3aWxsIG5vdCBnZXQgYQorCQkJICogcmVzcG9uc2UgZnJvbSBhIHNlbmQg bWVzc2FnZSwgaXQgZ29lcworCQkJICogc3RyYWlnaHQgb3V0IG9udG8gdGhlIElQTUIuICBT byBzaW11bGF0ZQorCQkJICogdGhlIHJlc3BvbnNlLgorCQkJICovCisJCQljaGFyIG1zZ1sz XTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRhdGEtPmxvY2ssICpmbGFncyk7CisJ CQkvKiBNYWtlIGludG8gcmVzcG9uc2UgKi8KKwkJCW1zZ1swXSA9IChkYXRhLT54bWl0X2No YXJzX25ldGZuIHwgMSkgPDwgMjsKKwkJCW1zZ1sxXSA9IGRhdGEtPnhtaXRfY2hhcnNfY21k OworCQkJbXNnWzJdID0gMDsKKwkJCWlwbWlfc2VyaWFsX2xsX3JlY3YoZGF0YS0+aW5mbywg bXNnLCAzLAorCQkJCQkgICAgZGF0YS0+eG1pdF9jaGFyc19zZXEpOworCQkJc3Bpbl9sb2Nr X2lycXNhdmUoJmRhdGEtPmxvY2ssICpmbGFncyk7CisJCX0KKworCQlpZiAoZGF0YS0+eG1p dF9tc2dfbGVuKSB7CisJCQkvKiBTZW5kIHRoZSBuZXh0IG1lc3NhZ2Ugd2UgaGF2ZSB3YWl0 aW5nLiAqLworCQkJZm9ybWF0X21zZyhkYXRhLCBkYXRhLT54bWl0X21zZywgZGF0YS0+eG1p dF9tc2dfbGVuKTsKKwkJCWRhdGEtPnhtaXRfbXNnX2xlbiA9IDA7CisJCQlnb3RvIHJlc3Rh cnQ7CisJCX0gZWxzZSB7CisJCQkvKiBOb3RoaW5nIHRvIGRvLiAqLworCQkJZGF0YS0+eG1p dF9jaGFyc19sZW4gPSAwOworCQl9CisJfSBlbHNlIHsKKwkJZGF0YS0+eG1pdF9jaGFyc19w b3MgKz0gc2VudDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcmFfc2V0dXBfdGVybWlvcyhzdHJ1 Y3Qga3Rlcm1pb3MgKnQpCit7CisJLyogTm90aGluZyB0byBkbywgdGhlIGRlZmF1bHQgaXMg ZmluZS4gKi8KKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBSQV9PRU0xX05FVEZOCQkweDMw CisjZGVmaW5lIFJBX0NPTlRST0xMRVJfT0VNX05FVEZOCTB4M2UKKyNkZWZpbmUgUkFfR0VU X0lQTUJfQUREUl9DTUQJMHgxMgorc3RhdGljIHVuc2lnbmVkIGNoYXIgZ2V0X2lwbWJhZGRy X21zZzFbXSA9IHsgMHgwMSwgLyogZGVzdCBhZGRyICovCisJCQkJCSAgICAgUkFfT0VNMV9O RVRGTiA8PCAyLAorCQkJCQkgICAgIDB4M2YsIC8qIGNoZWNrc3VtMSAqLworCQkJCQkgICAg IDB4MDEsIC8qIHNvdXJjZSBhZGRyICovCisJCQkJCSAgICAgMHgwMCwgLyogc2VxIG51bS9y c0xVTiAqLworCQkJCQkgICAgIFJBX0dFVF9JUE1CX0FERFJfQ01ELAorCQkJCQkgICAgIDB4 ZWQgIC8qIGNoZWNrc3VtMiAqLworfTsKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgZ2V0X2lw bWJhZGRyX21zZzJbXSA9IHsgMHgwMSwgLyogZGVzdCBhZGRyICovCisJCQkJCSAgICAgUkFf Q09OVFJPTExFUl9PRU1fTkVURk4gPDwgMiwKKwkJCQkJICAgICAweDA3LCAvKiBjaGVja3N1 bTEgKi8KKwkJCQkJICAgICAweDAxLCAvKiBzb3VyY2UgYWRkciAqLworCQkJCQkgICAgIDB4 MDAsIC8qIHNlcSBudW0vcnNMVU4gKi8KKwkJCQkJICAgICBSQV9HRVRfSVBNQl9BRERSX0NN RCwKKwkJCQkJICAgICAweGVkICAvKiBjaGVja3N1bTIgKi8KK307CisKK3N0YXRpYyB2b2lk IGhhbmRsZV9pbml0X2dldGlwbWJhZGRyKHN0cnVjdCBpcG1pX3NlcmlhbF9jb2RlY19kYXRh ICpkYXRhLAorCQkJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICptc2csCisJCQkJICAgIHVu c2lnbmVkIGludCBsZW4pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChsZW4g PCA4KQorCQlyZXR1cm47CisJaWYgKGlwbWJfY2hlY2tzdW0obXNnLCBsZW4pICE9IDApCisJ CXJldHVybjsKKwlsZW4tLTsKKworCWlmICgoKG1zZ1sxXSA+PiAyKSAhPSAoUkFfT0VNMV9O RVRGTiB8IDEpCisJICAgICAmJiAobXNnWzFdID4+IDIpICE9IChSQV9DT05UUk9MTEVSX09F TV9ORVRGTiB8IDEpKQorCSAgICB8fCAobXNnWzVdICE9IFJBX0dFVF9JUE1CX0FERFJfQ01E KSkKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRhdGEtPmxvY2ssIGZsYWdz KTsKKwlpZiAoZGF0YS0+aGFuZHNoYWtlX2RvbmUpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVz dG9yZSgmZGF0YS0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm47CisJfQorCisJaWYgKG1zZ1s2 XSAhPSAwKSB7CisJCWlmICgobXNnWzFdID4+IDIpID09IChSQV9PRU0xX05FVEZOIHwgMSkp IHsKKwkJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkJCWZvcm1hdF9tc2coZGF0YSwgZ2V0 X2lwbWJhZGRyX21zZzIsCisJCQkJICAgc2l6ZW9mKGdldF9pcG1iYWRkcl9tc2cyKSk7CisJ CQl0cnlfdG9fc2VuZF9kYXRhKGRhdGEsICZmbGFncyk7CisJCQlzcGluX3VubG9ja19pcnFy ZXN0b3JlKCZkYXRhLT5sb2NrLCBmbGFncyk7CisJCX0gZWxzZSB7CisJCQlwcmludGsoS0VS Tl9FUlIgIklQTUk6IFJhZGlzeXNBc2NpaTogR290IGVycm9yIgorCQkJICAgICAgICIgZmV0 Y2hpbmcgdGhlIElQTUIgYWRkcmVzcywgdGhpcyBtYXkgbm90IgorCQkJICAgICAgICIgYmUg YSBSYWRpc3lzIHN5c3RlbS5cbiIpOworCQkJZGF0YS0+aGFuZHNoYWtlX2RvbmUgPSAxOwor CQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGF0YS0+bG9jaywgZmxhZ3MpOworCQkJaXBt aV9zZXJpYWxfbGxfaW5pdF9jb21wbGV0ZShkYXRhLT5pbmZvLCAwLCAtRUlOVkFMKTsKKwkJ fQorCQlyZXR1cm47CisJfQorCisJZGF0YS0+Ym1jX2kyY19hZGRyID0gbXNnWzddOworCWRh dGEtPnJlY3ZfbXNnX2hhbmRsZXIgPSBOVUxMOworCWRhdGEtPmhhbmRzaGFrZV9kb25lID0g MTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkYXRhLT5sb2NrLCBmbGFncyk7CisJaXBt aV9zZXJpYWxfbGxfaW5pdF9jb21wbGV0ZShkYXRhLT5pbmZvLCBkYXRhLT5ibWNfaTJjX2Fk ZHIsIDApOworfQorCitzdGF0aWMgaW50IHJhX2luaXQoc3RydWN0IGlwbWlfc2VyaWFsX2Nv ZGVjX2RhdGEgKmRhdGEsCisJCSAgIHN0cnVjdCBpcG1pX3NlcmlhbF9pbmZvICppbmZvLAor CQkgICBjb25zdCBjaGFyICpvcHRpb25zKQoreworCW1lbXNldChkYXRhLCAwLCBzaXplb2Yo KmRhdGEpKTsKKwlzcGluX2xvY2tfaW5pdCgmZGF0YS0+bG9jayk7CisJZGF0YS0+aW5mbyA9 IGluZm87CisJZGF0YS0+Ym1jX2kyY19hZGRyID0gMTsgLyogSW5pdGlhbCBzZXR0aW5nIHNo b3VsZCB3b3JrIG9rLiAqLworCWRhdGEtPnNtaV9pMmNfYWRkciA9IDE7IC8qIEluaXRpYWwg c2V0dGluZyBzaG91bGQgd29yayBvay4gKi8KKworCWRhdGEtPmhhbmRzaGFrZV90aW1lID0g UkFfSEFORFNIQUtFX1RJTUU7CisJZGF0YS0+aGFuZHNoYWtlX3JldHJpZXNfbGVmdCA9IFJB X0hBTkRTSEFLRV9SRVRSSUVTOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmFf c3RhcnQoc3RydWN0IGlwbWlfc2VyaWFsX2NvZGVjX2RhdGEgKmRhdGEpCit7CisJdW5zaWdu ZWQgbG9uZyBmbGFnczsKKworCWRhdGEtPnJlY3ZfbXNnX2hhbmRsZXIgPSBoYW5kbGVfaW5p dF9nZXRpcG1iYWRkcjsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGF0YS0+bG9jaywgZmxhZ3Mp OworCWZvcm1hdF9tc2coZGF0YSwgZ2V0X2lwbWJhZGRyX21zZzEsIHNpemVvZihnZXRfaXBt YmFkZHJfbXNnMSkpOworCXRyeV90b19zZW5kX2RhdGEoZGF0YSwgJmZsYWdzKTsKKwlzcGlu X3VubG9ja19pcnFyZXN0b3JlKCZkYXRhLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyB2b2lkIHJhX2NsZWFudXAoc3RydWN0IGlwbWlfc2VyaWFsX2NvZGVjX2Rh dGEgKmRhdGEpCit7CisJLyogTm90aGluZyB0byBkby4gKi8KK30KKworc3RhdGljIGludCBy YV9zaXplKHZvaWQpCit7CisJcmV0dXJuIHNpemVvZihzdHJ1Y3QgaXBtaV9zZXJpYWxfY29k ZWNfZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIHJhX2hhbmRsZV9jaGFyKHN0cnVjdCBpcG1p X3NlcmlhbF9jb2RlY19kYXRhICpkYXRhLAorCQkJICAgdW5zaWduZWQgY2hhciBjaCkKK3sK Kwl1bnNpZ25lZCBpbnQgbGVuID0gZGF0YS0+cmVjdl9jaGFyc19sZW47CisJdW5zaWduZWQg Y2hhciAqcjsKKwlpbnQgICAgICAgICAgIHJ2OworCisJaWYgKGNoID09IDB4MGQpIHsKKwkJ LyogRW5kIG9mIGNvbW1hbmQsIGhhbmRsZSBpdC4gKi8KKwkJaWYgKGRhdGEtPnJlY3ZfY2hh cnNfdG9vX21hbnkpIHsKKwkJCS8qIElucHV0IGRhdGEgb3ZlcnJ1bi4gKi8KKwkJCWlwbWlf c2VyaWFsX2xsX3Byb3RvY29sX3Zpb2xhdGlvbihkYXRhLT5pbmZvKTsKKwkJCWRhdGEtPnJl Y3ZfY2hhcnNfdG9vX21hbnkgPSAwOworCQkJZGF0YS0+cmVjdl9jaGFyc19sZW4gPSAwOwor CQkJcmV0dXJuOworCQl9CisJCXJ2ID0gdW5mb3JtYXRfbXNnKGRhdGEpOworCQlpZiAocnYp IHsKKwkJCS8qIEJhZCBpbnB1dCBkYXRhLiAqLworCQkJaXBtaV9zZXJpYWxfbGxfcHJvdG9j b2xfdmlvbGF0aW9uKGRhdGEtPmluZm8pOworCQkJcmV0dXJuOworCQl9CisJCWhhbmRsZV9y ZWN2X21zZyhkYXRhKTsKKwkJZGF0YS0+cmVjdl9jaGFyc19sZW4gPSAwOworCQlyZXR1cm47 CisJfQorCisJaWYgKGRhdGEtPnJlY3ZfY2hhcnNfdG9vX21hbnkpCisJCXJldHVybjsKKwor CXIgPSBkYXRhLT5yZWN2X2NoYXJzOworCisJaWYgKGxlbiA+PSBzaXplb2YoZGF0YS0+cmVj dl9jaGFycykpIHsKKwkJZGF0YS0+cmVjdl9jaGFyc190b29fbWFueSA9IDE7CisJfSBlbHNl IGlmIChpc3NwYWNlKHJbbGVuLTFdKSAmJiBpc3NwYWNlKGNoKSkgeworCQkvKiBJZ25vcmUg bXVsdGlwbGUgc3BhY2VzIHRvZ2V0aGVyLiAqLworCX0gZWxzZSB7CisJCXJbbGVuXSA9IGNo OworCQlkYXRhLT5yZWN2X2NoYXJzX2xlbisrOworCX0KK30KKworc3RhdGljIGludCByYV9z ZW5kX21zZyhzdHJ1Y3QgaXBtaV9zZXJpYWxfY29kZWNfZGF0YSAqZGF0YSwKKwkJICAgICAg IGNvbnN0IHVuc2lnbmVkIGNoYXIgKm1zZywgdW5zaWduZWQgaW50IG1zZ19sZW4sCisJCSAg ICAgICB1bnNpZ25lZCBpbnQgc2VxKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50 ICAgICAgICAgICBydiA9IDA7CisJaW50ICAgICAgICAgICBpLCBqOworCXVuc2lnbmVkIGNo YXIgc2Vxbm87CisKKwlpZiAobXNnX2xlbiA+IElQTUlfTUFYX01TR19MRU5HVEgpCisJCXJl dHVybiAtRUZCSUc7CisJaWYgKG1zZ19sZW4gPCAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKwor CXNwaW5fbG9ja19pcnFzYXZlKCZkYXRhLT5sb2NrLCBmbGFncyk7CisJaWYgKGRhdGEtPnht aXRfbXNnX2xlbikgeworCQkvKiBTb21ldGhpbmcgaXMgc3RpbGwgd2FpdGluZyB0byBiZSBz ZW50LiAqLworCQlnb3RvIG91dF91bmxvY2s7CisJCXJ2ID0gLUVCVVNZOworCX0KKworCWRh dGEtPnhtaXRfbXNnX25ldGZuID0gbXNnWzBdID4+IDI7CisJZGF0YS0+eG1pdF9tc2dfY21k ID0gbXNnWzFdOworCWRhdGEtPnhtaXRfbXNnX3NlcSA9IHNlcTsKKwlpID0gMDsKKwlpZiAo KGRhdGEtPnhtaXRfbXNnX25ldGZuID09IElQTUlfTkVURk5fQVBQX1JFUVVFU1QpCisJICAg ICYmIChkYXRhLT54bWl0X21zZ19jbWQgPT0gSVBNSV9TRU5EX01TR19DTUQpKSB7CisJCWlm ICgobXNnWzJdICYgMHhmKSAhPSAwKSB7CisJCQkvKiBPbmx5IGNoYW5uZWxzIDAgaXMgc3Vw cG9ydGVkLiAqLworCQkJcnYgPSAtRUlOVkFMOworCQkJZ290byBvdXRfdW5sb2NrOworCQl9 CisJCS8qCisJCSAqIFNraXAgb3ZlciB0aGUgbWVzc2FnZSBoZWFkZXIgYW5kIHNlbmQgdGhl IHJhdyBJUE1CCisJCSAqIG1lc3NhZ2UuCisJCSAqLworCQlmb3IgKGogPSAzOyBqIDwgbXNn X2xlbjsgaisrKQorCQkJZGF0YS0+eG1pdF9tc2dbaSsrXSA9IG1zZ1tqXTsKKwl9IGVsc2Ug eworCQlkYXRhLT54bWl0X21zZ1tpKytdID0gZGF0YS0+Ym1jX2kyY19hZGRyOworCQlkYXRh LT54bWl0X21zZ1tpKytdID0gbXNnWzBdOwkJLyogTmV0Rk4vTFVOICovCisJCWRhdGEtPnht aXRfbXNnW2krK10gPSBpcG1iX2NoZWNrc3VtKGRhdGEtPnhtaXRfbXNnLCAyKTsKKwkJZGF0 YS0+eG1pdF9tc2dbaSsrXSA9IGRhdGEtPnNtaV9pMmNfYWRkcjsKKwkJc2Vxbm8gPSBkYXRh LT5zZXFubzsKKwkJZGF0YS0+c2Vxbm8gPSAoZGF0YS0+c2Vxbm8gKyAxKSAmIDB4M2Y7CisJ CWRhdGEtPnNlcW51bV90YWJsZVtzZXFub10gPSBzZXE7CisJCWRhdGEtPnhtaXRfbXNnW2kr K10gPSBzZXFubyA8PCAyOwkvKiBzZXFuby9ycUxVTiAqLworCQlkYXRhLT54bWl0X21zZ1tp KytdID0gbXNnWzFdOwkJLyogY21kICovCisJCWZvciAoaiA9IDI7IGogPCBtc2dfbGVuOyBq KyspCisJCQlkYXRhLT54bWl0X21zZ1tpKytdID0gbXNnW2pdOworCQlkYXRhLT54bWl0X21z Z1tpXSA9IGlwbWJfY2hlY2tzdW0oZGF0YS0+eG1pdF9tc2cgKyAzLCBpIC0gMyk7CisJCWkr KzsKKwl9CisKKworCWlmIChkYXRhLT54bWl0X2NoYXJzX2xlbiA9PSAwKSB7CisJCS8qIFRy YW5zbWl0IHF1ZXVlIGlzIGVtcHR5LCBqdXN0IGZvcm1hdCBpdCBub3cgdG8gZ28uICovCisJ CWZvcm1hdF9tc2coZGF0YSwgZGF0YS0+eG1pdF9tc2csIGkpOworCQl0cnlfdG9fc2VuZF9k YXRhKGRhdGEsICZmbGFncyk7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogR2V0IGl0IHJlYWR5 IHRvIGJlIHNlbnQgbGF0ZXIgd2hlbiB0aGUgdHJhbnNtaXQKKwkJICogcXVldWUgZW1wdGll cy4KKwkJICovCisJCWRhdGEtPnhtaXRfbXNnX2xlbiA9IGk7CisJfQorIG91dF91bmxvY2s6 CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGF0YS0+bG9jaywgZmxhZ3MpOworCXJldHVy biBydjsKK30KKworc3RhdGljIHZvaWQgcmFfdHhfcmVhZHkoc3RydWN0IGlwbWlfc2VyaWFs X2NvZGVjX2RhdGEgKmRhdGEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5f bG9ja19pcnFzYXZlKCZkYXRhLT5sb2NrLCBmbGFncyk7CisJdHJ5X3RvX3NlbmRfZGF0YShk YXRhLCAmZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRhdGEtPmxvY2ssIGZs YWdzKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCByYV9jYXBhYmlsaXRpZXMoc3RydWN0 IGlwbWlfc2VyaWFsX2NvZGVjX2RhdGEgKmRhdGEpCit7CisJcmV0dXJuIDA7Cit9CisKKwor c3RhdGljIHZvaWQgcmFfdGltZXJfdGljayhzdHJ1Y3QgaXBtaV9zZXJpYWxfY29kZWNfZGF0 YSAqZGF0YSwKKwkJCSAgdW5zaWduZWQgaW50IHRpbWVfc2luY2VfbGFzdCkKK3sKKwl1bnNp Z25lZCBsb25nIGZsYWdzOworCisJLyogQ2hlY2sgcXVpY2tseSBmaXJzdCB0byBhdm9pZCBn cmFiYmluZyB0aGUgbG9jayBub3JtYWxseS4gKi8KKwlpZiAobGlrZWx5KGRhdGEtPmhhbmRz aGFrZV9kb25lKSkKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRhdGEtPmxv Y2ssIGZsYWdzKTsKKwkvKiBSZWNoZWNrIHRvIGF2b2lkIHJhY2VzICovCisJaWYgKGRhdGEt PmhhbmRzaGFrZV9kb25lKQorCQlnb3RvIG91dF91bmxvY2s7CisKKwlkYXRhLT5oYW5kc2hh a2VfdGltZSAtPSB0aW1lX3NpbmNlX2xhc3Q7CisJaWYgKGRhdGEtPmhhbmRzaGFrZV90aW1l IDw9IDApIHsKKwkJZGF0YS0+aGFuZHNoYWtlX3JldHJpZXNfbGVmdC0tOworCQlpZiAoZGF0 YS0+aGFuZHNoYWtlX3JldHJpZXNfbGVmdCA8PSAwKSB7CisJCQlkYXRhLT5oYW5kc2hha2Vf ZG9uZSA9IDE7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkYXRhLT5sb2NrLCBmbGFn cyk7CisJCQlpcG1pX3NlcmlhbF9sbF9pbml0X2NvbXBsZXRlKGRhdGEtPmluZm8sIDAsIC1F VElNRURPVVQpOworCQkJZ290byBvdXQ7CisJCX0KKworCQkvKiBSZXNlbmQgdGhlIElQTUIg ZmV0Y2ggKi8KKwkJZGF0YS0+aGFuZHNoYWtlX3RpbWUgPSBSQV9IQU5EU0hBS0VfVElNRTsK KwkJZm9ybWF0X21zZyhkYXRhLCBnZXRfaXBtYmFkZHJfbXNnMSwKKwkJCSAgIHNpemVvZihn ZXRfaXBtYmFkZHJfbXNnMSkpOworCQl0cnlfdG9fc2VuZF9kYXRhKGRhdGEsICZmbGFncyk7 CisJfQorIG91dF91bmxvY2s6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGF0YS0+bG9j aywgZmxhZ3MpOworIG91dDoKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXBtaV9z ZXJpYWxfY29kZWMgcmFfY29kZWMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm5h bWUgID0gIlJhZGlzeXNBc2NpaSIsCisKKwkuY2FwYWJpbGl0aWVzCT0gcmFfY2FwYWJpbGl0 aWVzLAorCS5zZXR1cF90ZXJtaW9zCT0gcmFfc2V0dXBfdGVybWlvcywKKwkuaW5pdAkJPSBy YV9pbml0LAorCS5zdGFydAkJPSByYV9zdGFydCwKKwkuY2xlYW51cAk9IHJhX2NsZWFudXAs CisJLnNpemUJCT0gcmFfc2l6ZSwKKwkuc2VuZF9tc2cJPSByYV9zZW5kX21zZywKKwkuaGFu ZGxlX2NoYXIJPSByYV9oYW5kbGVfY2hhciwKKwkudHhfcmVhZHkJPSByYV90eF9yZWFkeSwK KwkuYWRkX29wdGlvbnMJPSByYV9hZGRfb3B0aW9ucywKKwkudGltZXJfdGljayAgICAgPSBy YV90aW1lcl90aWNrCit9OworCitzdGF0aWMgX19pbml0IGludAoraW5pdF9pcG1pX3Nlcmlh bF9yYV9jb2RlYyh2b2lkKQoreworCXJldHVybiBpcG1pX3NlcmlhbF9jb2RlY19yZWdpc3Rl cigmcmFfY29kZWMpOworfQorCittb2R1bGVfaW5pdChpbml0X2lwbWlfc2VyaWFsX3JhX2Nv ZGVjKTsKKworc3RhdGljIF9fZXhpdCB2b2lkCitleGl0X2lwbWlfc2VyaWFsX3JhX2NvZGVj KHZvaWQpCit7CisJaXBtaV9zZXJpYWxfY29kZWNfdW5yZWdpc3RlcigmcmFfY29kZWMpOwor fQorbW9kdWxlX2V4aXQoZXhpdF9pcG1pX3NlcmlhbF9yYV9jb2RlYyk7CitNT0RVTEVfTElD RU5TRSgiR1BMIik7CmRpZmYgLXUgLS1uZXctZmlsZSAtLXJlY3Vyc2l2ZSBsaW51eC0yLjYu MjkuNi5vcmlnL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2VyaWFsX3Rlcm1pbmFsX21vZGUu YyBsaW51eC0yLjYuMjkuNi5tb2QvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9zZXJpYWxfdGVy bWluYWxfbW9kZS5jCi0tLSBsaW51eC0yLjYuMjkuNi5vcmlnL2RyaXZlcnMvY2hhci9pcG1p L2lwbWlfc2VyaWFsX3Rlcm1pbmFsX21vZGUuYwkxOTY5LTEyLTMxIDE3OjAwOjAwLjAwMDAw MDAwMCAtMDcwMAorKysgbGludXgtMi42LjI5LjYubW9kL2RyaXZlcnMvY2hhci9pcG1pL2lw bWlfc2VyaWFsX3Rlcm1pbmFsX21vZGUuYwkyMDA5LTA3LTIxIDExOjI4OjE4LjAwMDAwMDAw MCAtMDcwMApAQCAtMCwwICsxLDg4MCBAQAorLyoKKyAqIGlwbWlfc2VyaWFsX3Rlcm1pbmFs X21vZGUuYworICogU2VyaWFsIGludGVyZmFjZSBlbmNvZGVyIGFuZCBkZWNvZGVyIHJvdXRp bmVzIGZvciB0ZXJtaW5hbCBtb2RlCisgKiBzZXJpYWwgaW50ZXJmYWNlcy4KKyAqCisgKiBB dXRob3I6IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqICAgICAgICAgc291cmNlQG12 aXN0YS5jb20KKyAqICAgICAgICAgQ29yZXkgTWlueWFyZCA8Y21pbnlhcmRAbXZpc3RhLmNv bT4KKyAqCisgKiBDb3B5cmlnaHQgMjAwNiBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KKyAq CisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us IG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKgor ICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVT UyBPUiBJTVBMSUVECisgKiAgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqICBNRVJDSEFOVEFCSUxJVFkg QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgor ICogIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElS RUNULCBJTkRJUkVDVCwKKyAqICBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogIEJVVCBOT1QgTElNSVRF RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T UworICogIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IKKyAqICBUT1JU IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB WSBPVVQgT0YgVEhFCisgKiAgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogIFlvdSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGFsb25nCisgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqICA2NzUgTWFzcyBBdmUsIENh bWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxl Lmg+CisjaW5jbHVkZSA8bGludXgvaXBtaV9zbWkuaD4KKyNpbmNsdWRlIDxsaW51eC9pcG1p X21zZ2RlZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9pcG1pX3NlcmlhbF9zbS5oPgorI2luY2x1 ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKworI2Rl ZmluZSBQRlggImlwbWlfc2VyaWFsX3Rlcm1pbmFsX21vZGU6ICIKKworc3RydWN0IHRtX29w dGlvbnMgeworI2RlZmluZSBQSUdFT05QT0lOVF9PUFRJT04gInBwIgorCWludCBwaWdlb25w b2ludDsKKwlpbnQgcGlnZW9ucG9pbnRfZm9yY2VkOyAvKiBTZXQgYnkgY29tbWFuZCBsaW5l LiAqLworI2RlZmluZSBQSUdFT05QT0lOVF9JTlZJQU5BX09QVElPTiAicHBJbnZJQU5BIgor CWludCBwaWdlb25wb2ludF9pYW5hX2JhZDsKKwlpbnQgcGlnZW9ucG9pbnRfaWFuYV9iYWRf Zm9yY2VkOyAvKiBTZXQgYnkgY29tbWFuZCBsaW5lLiAqLworI2RlZmluZSBBVFROX09QVElP TiAiYXR0biIKKwlpbnQgYXR0bjsKKwlpbnQgYXR0bl9mb3JjZWQ7IC8qIFNldCBieSBjb21t YW5kIGxpbmUuICovCisJdW5zaWduZWQgY2hhciBhdHRuX2NoYXI7Cit9OworCisvKgorICog VGhyZWUgYnl0ZXMgZm9yIGV2ZXJ5IGNoYXJhY3RlciBwbHVzIHRoZSBicmlkZ2Uvc2Vxbm8g ZmllbGQgYW5kIGFkZAorICogdGhlIFssIF0sIGFuZCBuZXdsaW5lIGFuZCBwZXJoYXBzIGFu IGV4dHJhIHNwYWNlCisgKi8KKyNkZWZpbmUgVE1fTUFYX0NIQVJTX1NJWkUgKCgoSVBNSV9N QVhfTVNHX0xFTkdUSCArIDEpICogMykgKyA0KQorCisvKgorICogR2l2ZSB0aGUgcmVtb3Rl IGVuZCB0aGlzIG11Y2ggdGltZSAoMTAwbXMpIHRvIHNlbmQgYSByZXNwb25zZQorICogYmVm b3JlIHdlIGdpdmUgdXAgYW5kIHJldHJ5IHRoZSBnaXZlbiBudW1iZXIgb2YgdGltZXMuCisg Ki8KKyNkZWZpbmUgVE1fSEFORFNIQUtFX1RJTUUgICAgMTAwMDAwCisjZGVmaW5lIFRNX0hB TkRTSEFLRV9SRVRSSUVTIDUKKworCitzdHJ1Y3QgaXBtaV9zZXJpYWxfY29kZWNfZGF0YSB7 CisJc3RydWN0IGlwbWlfc2VyaWFsX2luZm8gKmluZm87CisKKwl1bnNpZ25lZCBjaGFyIHht aXRfY2hhcnNbVE1fTUFYX0NIQVJTX1NJWkVdOworCXVuc2lnbmVkIGludCAgeG1pdF9jaGFy c19sZW47CisJdW5zaWduZWQgaW50ICB4bWl0X2NoYXJzX3BvczsKKworCXVuc2lnbmVkIGNo YXIgcmVjdl9jaGFyc1tUTV9NQVhfQ0hBUlNfU0laRV07CisJdW5zaWduZWQgaW50ICByZWN2 X2NoYXJzX2xlbjsKKwlpbnQgICAgICAgICAgIHJlY3ZfY2hhcnNfdG9vX21hbnk7CisKKwl1 bnNpZ25lZCBjaGFyIHNlcW5vOworCXVuc2lnbmVkIGludCBzZXFudW1fdGFibGVbMHg0MF07 CisKKwl1bnNpZ25lZCBjaGFyIHhtaXRfbXNnW0lQTUlfTUFYX01TR19MRU5HVEhdOworCXVu c2lnbmVkIGludCAgeG1pdF9tc2dfbGVuOworCXVuc2lnbmVkIGludCAgeG1pdF9tc2dfc2Vx OworCXVuc2lnbmVkIGNoYXIgcmVjdl9tc2dbSVBNSV9NQVhfTVNHX0xFTkdUSF07CisJdW5z aWduZWQgaW50ICByZWN2X21zZ19sZW47CisKKwljaGFyIGVjaG9fb247CisJY2hhciBwcF9p YW5hX3JldHJpZWQ7CisKKwlzcGlubG9ja190IGxvY2s7CisKKwkvKgorCSAqIEhhbmRsZSBy ZWNlaXB0IG9mIGEgbWVzc2FnZS4gIFRoaXMgaXMgYSBmdW5jdGlvbiB2YXIgc28gaXQKKwkg KiBjYW4gYmUgcmVwbGFjZWQgYXQgaW5pdCB0aW1lIGFuZCB3aGVuIHNwZWNpYWwgaGFuZGxp bmcgaXMKKwkgKiByZXF1aXJlZCBmb3IgbWVzc2FnZXMuCisJICovCisJdm9pZCAoKnJlY3Zf bXNnX2hhbmRsZXIpKHN0cnVjdCBpcG1pX3NlcmlhbF9jb2RlY19kYXRhICpkYXRhLAorCQkJ CSBjb25zdCB1bnNpZ25lZCBjaGFyICptc2csCisJCQkJIHVuc2lnbmVkIGludCBsZW4sCisJ CQkJIHVuc2lnbmVkIGludCBzZXEpOworCisJc3RydWN0IGlwbWlfZGV2aWNlX2lkIGlkOwor CXN0cnVjdCB0bV9vcHRpb25zIG9wdGlvbnM7CisKKwkvKgorCSAqIFVzZWQgdG8gdGltZSBp bml0aWFsaXphdGlvbiBtZXNzYWdlcy4KKwkgKi8KKwlpbnQgaGFuZHNoYWtlX3RpbWU7CisJ aW50IGhhbmRzaGFrZV9yZXRyaWVzX2xlZnQ7CisJaW50IGhhbmRzaGFrZV9kb25lOworfTsK KworI2RlZmluZSBNT1RPUk9MQV9NRkdfSUQJCQkweDAwMDBhMQorI2RlZmluZSBNT1RPUk9M QV9BVENBX0YxMDFfUFJPRF9JRAkweDAwNTEKKyNkZWZpbmUgTU9UT1JPTEFfQVRDQV82MTAx X1BST0RfSUQJMHgwMDUzCisvKiBUYWJsZSBvZiBCTUNzIHRoYXQgc3VwcG9ydCB0aGUgUGln ZW9uUG9pbnQgZWNobyBoYW5kbGluZy4gKi8KK3N0YXRpYyBzdHJ1Y3QgeyB1bnNpZ25lZCBp bnQgbWZnX2lkLCBwcm9kX2lkOyB9IHBwX2JtY3NbXSA9Cit7CisJeyBNT1RPUk9MQV9NRkdf SUQsCU1PVE9ST0xBX0FUQ0FfRjEwMV9QUk9EX0lEIH0sCisJeyBNT1RPUk9MQV9NRkdfSUQs CU1PVE9ST0xBX0FUQ0FfNjEwMV9QUk9EX0lEIH0sCisJeyAwLCAwIH0KK307CisKK3N0YXRp YyBzdHJ1Y3QgeyB1bnNpZ25lZCBpbnQgbWZnX2lkLCBwcm9kX2lkLCB2YWw7IH0gYXR0bl9i bWNzW10gPQoreworCXsgTU9UT1JPTEFfTUZHX0lELAlNT1RPUk9MQV9BVENBX0YxMDFfUFJP RF9JRCwJMHgwNyB9LAorCXsgTU9UT1JPTEFfTUZHX0lELAlNT1RPUk9MQV9BVENBXzYxMDFf UFJPRF9JRCwJMHgwNyB9LAorCXsgMCwgMCB9Cit9OworCitzdGF0aWMgdm9pZCBjaGVja19k ZXZpZF9vcHRpb25zKHN0cnVjdCBpcG1pX3NlcmlhbF9jb2RlY19kYXRhICpkYXRhKQorewor CWludCBpOworCisJaWYgKCFkYXRhLT5vcHRpb25zLnBpZ2VvbnBvaW50X2ZvcmNlZCkgewor CQlmb3IgKGkgPSAwOyBwcF9ibWNzW2ldLm1mZ19pZCAhPSAwOyBpKyspIHsKKwkJCWlmICgo ZGF0YS0+aWQubWFudWZhY3R1cmVyX2lkID09IHBwX2JtY3NbaV0ubWZnX2lkKQorCQkJICAg ICYmIChkYXRhLT5pZC5wcm9kdWN0X2lkID09IHBwX2JtY3NbaV0ucHJvZF9pZCkpIHsKKwkJ CQlkYXRhLT5vcHRpb25zLnBpZ2VvbnBvaW50ID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJ fQorCX0KKwlpZiAoIWRhdGEtPm9wdGlvbnMuYXR0bl9mb3JjZWQpIHsKKwkJZm9yIChpID0g MDsgYXR0bl9ibWNzW2ldLm1mZ19pZCAhPSAwOyBpKyspIHsKKwkJCWlmICgoZGF0YS0+aWQu bWFudWZhY3R1cmVyX2lkID09IGF0dG5fYm1jc1tpXS5tZmdfaWQpCisJCQkgICAgJiYgKGRh dGEtPmlkLnByb2R1Y3RfaWQgPT0gYXR0bl9ibWNzW2ldLnByb2RfaWQpKSB7CisJCQkJZGF0 YS0+b3B0aW9ucy5hdHRuID0gMTsKKwkJCQlkYXRhLT5vcHRpb25zLmF0dG5fY2hhciA9IGF0 dG5fYm1jc1tpXS52YWw7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9Cit9CisKK3N0YXRp YyBpbnQgY2hlY2tfb3B0aW9ucyhzdHJ1Y3QgaXBtaV9zZXJpYWxfY29kZWNfZGF0YSAqZGF0 YSwKKwkJCSBjb25zdCBjaGFyICpvcHRpb25zKQoreworCWNvbnN0IGNoYXIgKnM7CisJY2hh ciAqb3B0dmFsOworCWludCAgb3B0dmFsX2xlbjsKKwljaGFyICpuZXh0OworCWludCAgbGVu OworCWNoYXIgKmVuZDsKKworCWZvciAocyA9IG9wdGlvbnM7IHM7IHMgPSBuZXh0KSB7CisJ CW5leHQgPSBzdHJjaHIocywgJysnKTsKKwkJaWYgKG5leHQpIHsKKwkJCWxlbiA9IG5leHQg LSBzOworCQkJbmV4dCsrOworCQl9IGVsc2UKKwkJCWxlbiA9IHN0cmxlbihzKTsKKworCQlv cHR2YWwgPSBzdHJjaHIocywgJz0nKTsKKwkJaWYgKG5leHQgJiYgb3B0dmFsID49IG5leHQp CisJCQlvcHR2YWwgPSBOVUxMOworCQlpZiAob3B0dmFsKSB7CisJCQlsZW4gPSBvcHR2YWwg LSBzOworCQkJb3B0dmFsKys7CisJCQlpZiAobmV4dCkgeworCQkJCW9wdHZhbF9sZW4gPSBu ZXh0IC0gb3B0dmFsOworCQkJCW5leHQrKzsKKwkJCX0gZWxzZQorCQkJCW9wdHZhbF9sZW4g PSBzdHJsZW4ob3B0dmFsKTsKKwkJfSBlbHNlCisJCQlvcHR2YWxfbGVuID0gMDsKKwkJZW5k ID0gTlVMTDsKKwkJaWYgKHN0cm5jbXAoUElHRU9OUE9JTlRfT1BUSU9OLCBzLCBsZW4pID09 IDApIHsKKwkJCWRhdGEtPm9wdGlvbnMucGlnZW9ucG9pbnQgPSAxOworCQkJZGF0YS0+b3B0 aW9ucy5waWdlb25wb2ludF9mb3JjZWQgPSAxOworCQl9IGVsc2UgaWYgKHN0cm5jbXAoIm5v IiBQSUdFT05QT0lOVF9PUFRJT04sIHMsIGxlbikgPT0gMCkgeworCQkJZGF0YS0+b3B0aW9u cy5waWdlb25wb2ludCA9IDA7CisJCQlkYXRhLT5vcHRpb25zLnBpZ2VvbnBvaW50X2ZvcmNl ZCA9IDE7CisJCX0gZWxzZSBpZiAoc3RybmNtcChQSUdFT05QT0lOVF9JTlZJQU5BX09QVElP TiwgcywgbGVuKSA9PSAwKSB7CisJCQlkYXRhLT5vcHRpb25zLnBpZ2VvbnBvaW50X2lhbmFf YmFkID0gMTsKKwkJCWRhdGEtPm9wdGlvbnMucGlnZW9ucG9pbnRfaWFuYV9iYWRfZm9yY2Vk ID0gMTsKKwkJfSBlbHNlIGlmIChzdHJuY21wKCJubyIgUElHRU9OUE9JTlRfSU5WSUFOQV9P UFRJT04sIHMsIGxlbikKKwkJCQkJCQkJCT09IDApIHsKKwkJCWRhdGEtPm9wdGlvbnMucGln ZW9ucG9pbnRfaWFuYV9iYWQgPSAwOworCQkJZGF0YS0+b3B0aW9ucy5waWdlb25wb2ludF9p YW5hX2JhZF9mb3JjZWQgPSAxOworCQl9IGVsc2UgaWYgKHN0cm5jbXAoQVRUTl9PUFRJT04s IHMsIGxlbikgPT0gMCkgeworCQkJZGF0YS0+b3B0aW9ucy5hdHRuID0gMTsKKwkJCWRhdGEt Pm9wdGlvbnMuYXR0bl9mb3JjZWQgPSAxOworCQkJaWYgKG9wdHZhbCkKKwkJCQlkYXRhLT5v cHRpb25zLmF0dG5fY2hhcgorCQkJCQk9IHNpbXBsZV9zdHJ0b3VsKG9wdHZhbCwgJmVuZCwg MCk7CisJCQllbHNlCisJCQkJLyogZGVmYXVsdCB0byBiZWxsICovCisJCQkJZGF0YS0+b3B0 aW9ucy5hdHRuX2NoYXIgPSAweDA3OworCQl9IGVsc2UgaWYgKHN0cm5jbXAoIm5vIiBBVFRO X09QVElPTiwgcywgbGVuKSA9PSAwKSB7CisJCQlkYXRhLT5vcHRpb25zLmF0dG4gPSAwOwor CQkJZGF0YS0+b3B0aW9ucy5hdHRuX2ZvcmNlZCA9IDE7CisJCX0gZWxzZSB7CisJCQlwcmlu dGsoS0VSTl9XQVJOSU5HIFBGWCAiVW5rbm93biBvcHRpb25zOiAlc1xuIiwKKwkJCSAgICAg ICBvcHRpb25zKTsKKwkJfQorCisJCWlmIChvcHR2YWwgJiYgIWVuZCkgeworCQkJcHJpbnRr KEtFUk5fV0FSTklORyBQRlggIk5vIHZhbHVlIG5lZWRlZCBhdDogJXNcbiIsIHMpOworCQkJ cmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJaWYgKG9wdHZhbCAmJiBlbmQgIT0gKG9wdHZhbCAr IG9wdHZhbF9sZW4pKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiSW52YWxpZCB2 YWx1ZSBmb3I6ICVzXG4iLCBzKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdG1fYWRkX29wdGlvbnMoc3RydWN0IGlwbWlf c2VyaWFsX2NvZGVjX2RhdGEgKmRhdGEsIGNoYXIgKnBhZ2UpCit7CisJY2hhciBwZnggPSAn LCc7CisJY2hhciAqb3V0ID0gcGFnZTsKKworCWlmIChkYXRhLT5vcHRpb25zLnBpZ2VvbnBv aW50KSB7CisJCW91dCArPSBzcHJpbnRmKG91dCwgIiVjcHAiLCBwZngpOworCQlwZnggPSAn Kyc7CisJfQorCWlmIChkYXRhLT5vcHRpb25zLmF0dG4pIHsKKwkJb3V0ICs9IHNwcmludGYo b3V0LCAiJWNhdHRuIiwgcGZ4KTsKKwkJaWYgKGRhdGEtPm9wdGlvbnMuYXR0bl9jaGFyICE9 IDB4MDcpCisJCQlvdXQgKz0gc3ByaW50ZihvdXQsICI9MHgleCIsIGRhdGEtPm9wdGlvbnMu YXR0bl9jaGFyKTsKKwkJcGZ4ID0gJysnOworCX0KKworCXJldHVybiBvdXQgLSBwYWdlOwor fQorCitzdGF0aWMgdW5zaWduZWQgY2hhciBoZXgyY2hhclsxNl0gPSB7CisJJzAnLCAnMScs ICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsCisJJzgnLCAnOScsICdBJywgJ0InLCAn QycsICdEJywgJ0UnLCAnRicKK307CisKK3N0YXRpYyB2b2lkIGZvcm1hdF9tc2coc3RydWN0 IGlwbWlfc2VyaWFsX2NvZGVjX2RhdGEgKmRhdGEsCisJCSAgICAgICBjb25zdCB1bnNpZ25l ZCBjaGFyICptc2csIHVuc2lnbmVkIGludCBtc2dfbGVuLAorCQkgICAgICAgdW5zaWduZWQg aW50IHNlcSkKK3sKKwlpbnQgaTsKKwlpbnQgbGVuOworCXVuc2lnbmVkIGNoYXIgKmMgPSBk YXRhLT54bWl0X2NoYXJzOworCXVuc2lnbmVkIGNoYXIgc2Vxbm87CisKKwlsZW4gPSAwOwor CWNbbGVuXSA9ICdbJzsKKwlsZW4rKzsKKworCWNbbGVuXSA9IGhleDJjaGFyW21zZ1swXSA+ PiA0XTsKKwlsZW4rKzsKKwljW2xlbl0gPSBoZXgyY2hhclttc2dbMF0gJiAweGZdOworCWxl bisrOworCisJLyoKKwkgKiBJbnNlcnQgdGhlIHNlcXVlbmNlIG51bWJlciBhbmQgYnJpZGdl IGJpdHMuICBCcmlkZ2UgYml0cworCSAqIGFyZSBhbHdheXMgemVyby4KKwkgKi8KKwlzZXFu byA9IGRhdGEtPnNlcW5vOworCWRhdGEtPnNlcW5vID0gKGRhdGEtPnNlcW5vICsgMSkgJiAw eDNmOworCWRhdGEtPnNlcW51bV90YWJsZVtzZXFub10gPSBzZXE7CisJc2Vxbm8gPDw9IDI7 CisJY1tsZW5dID0gaGV4MmNoYXJbc2Vxbm8gPj4gNF07CisJbGVuKys7CisJY1tsZW5dID0g aGV4MmNoYXJbc2Vxbm8gJiAweGZdOworCWxlbisrOworCisJLyogTm93IHRoZSByZXN0IG9m IHRoZSBtZXNzYWdlLiAqLworCWZvciAoaSA9IDE7IDsgKSB7CisJCWNbbGVuXSA9IGhleDJj aGFyW21zZ1tpXSA+PiA0XTsKKwkJbGVuKys7CisJCWNbbGVuXSA9IGhleDJjaGFyW21zZ1tp XSAmIDB4Zl07CisJCWxlbisrOworCQlpKys7CisJCWlmIChpID09IG1zZ19sZW4pCisJCQli cmVhazsKKwkJY1tsZW5dID0gJyAnOworCQlsZW4rKzsKKwl9CisJY1tsZW5dID0gJ10nOwor CWxlbisrOworCWNbbGVuXSA9IDB4MGE7CisJbGVuKys7CisJY1tsZW5dID0gMHgwZDsgLyog V2UgZGVmaW5pdGVseSBoYXZlIHJvb20gZm9yIHRoaXMgYnl0ZS4gKi8KKwlsZW4rKzsKKwor CWRhdGEtPnhtaXRfY2hhcnNfcG9zID0gMDsKKwlkYXRhLT54bWl0X2NoYXJzX2xlbiA9IGxl bjsKK30KKworc3RhdGljIGludCBmcm9taGV4KHVuc2lnbmVkIGNoYXIgYykKK3sKKwlpZiAo aXNkaWdpdChjKSkKKwkJcmV0dXJuIGMgLSAnMCc7CisJZWxzZSBpZiAoaXN4ZGlnaXQoYykp CisJCXJldHVybiB0b2xvd2VyKGMpIC0gJ2EnICsgMTA7CisJZWxzZQorCQlyZXR1cm4gLUVJ TlZBTDsKK30KKworLyoKKyAqIENhbGxlZCB3aGVuIHRoZSAnXScgaXMgc2VlbiwgdGhlIGxl YWRpbmcgJ1snIGlzIHJlbW92ZWQsIHRvby4gIFdlCisgKiBnZXQgdGhpcyB3aXRoIGEgbGVh ZGluZyBzcGFjZSBhbmQgbm8gbW9yZSB0aGFuIG9uZSBzcGFjZSBiZXR3ZWVuCisgKiBpdGVt cy4KKyAqLworc3RhdGljIGludCB1bmZvcm1hdF9tc2coc3RydWN0IGlwbWlfc2VyaWFsX2Nv ZGVjX2RhdGEgKmRhdGEpCit7CisJdW5zaWduZWQgY2hhciAqciA9IGRhdGEtPnJlY3ZfY2hh cnM7CisJdW5zaWduZWQgY2hhciAqbyA9IGRhdGEtPnJlY3ZfbXNnOworCXVuc2lnbmVkIGlu dCBsZW4gPSBkYXRhLT5yZWN2X2NoYXJzX2xlbjsKKwl1bnNpZ25lZCBpbnQgcCA9IDA7CisJ dW5zaWduZWQgaW50IGkgPSAwOworCWludCAgICAgICAgICBydjsKKworCWlmIChpc3NwYWNl KHJbcF0pKQorCQlwKys7CisJd2hpbGUgKHAgPCBsZW4pIHsKKwkJaWYgKGkgPj0gc2l6ZW9m KGRhdGEtPnJlY3ZfbXNnKSkKKwkJCXJldHVybiAtRUZCSUc7CisJCWlmIChwID49IGxlbikK KwkJCXJldHVybiAtRUlOVkFMOworCQlydiA9IGZyb21oZXgocltwXSk7CisJCWlmIChydiA8 IDApCisJCQlyZXR1cm4gcnY7CisJCW9baV0gPSBydiA8PCA0OworCQlwKys7CisJCWlmIChw ID49IGxlbikKKwkJCXJldHVybiAtRUlOVkFMOworCQlydiA9IGZyb21oZXgocltwXSk7CisJ CWlmIChydiA8IDApCisJCQlyZXR1cm4gcnY7CisJCW9baV0gfD0gcnY7CisJCXArKzsKKwkJ aSsrOworCQlpZiAoaXNzcGFjZShyW3BdKSkKKwkJCXArKzsKKwl9CisJZGF0YS0+cmVjdl9t c2dfbGVuID0gaTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbm9ybWFsX3JlY3Yo c3RydWN0IGlwbWlfc2VyaWFsX2NvZGVjX2RhdGEgKmRhdGEsCisJCQljb25zdCB1bnNpZ25l ZCBjaGFyICptc2csCisJCQl1bnNpZ25lZCBpbnQgbGVuLAorCQkJdW5zaWduZWQgaW50IHNl cSkKK3sKKwlpZiAoKChtc2dbMF0gPj4gMikgJiAxKSA9PSAwKQorCQkvKgorCQkgKiBJZiB0 aGUgYm90dG9tIGJpdCBvZiB0aGUgbWVzc2FnZSBpcyB6ZXJvLCB0aGVuIGl0CisJCSAqIGlz IGEgY29tbWFuZCBhbmQgbW9zdCBsaWtlbHkgYW4gZWNoby4KKwkJICovCisJCXJldHVybjsK KworCWlmIChsZW4gPCAzKSB7CisJCS8qIFJlc3BvbnNlcyBtdXN0IGJlIGF0IGxlYXN0IDMg Ynl0ZXMgYWZ0ZXIgcHJvY2Vzc2luZy4gKi8KKwkJaXBtaV9zZXJpYWxfbGxfcHJvdG9jb2xf dmlvbGF0aW9uKGRhdGEtPmluZm8pOworCQlyZXR1cm47CisJfQorCisJaXBtaV9zZXJpYWxf bGxfcmVjdihkYXRhLT5pbmZvLCBtc2csIGxlbiwgc2VxKTsKK30KKworCitzdGF0aWMgdm9p ZCBoYW5kbGVfcmVjdl9tc2coc3RydWN0IGlwbWlfc2VyaWFsX2NvZGVjX2RhdGEgKmRhdGEp Cit7CisJdW5zaWduZWQgaW50IHNlcTsKKwl1bnNpZ25lZCBjaGFyICptID0gZGF0YS0+cmVj dl9tc2c7CisJdW5zaWduZWQgaW50IGxlbiA9IGRhdGEtPnJlY3ZfbXNnX2xlbjsKKwlpbnQg ICAgICAgICAgaTsKKworCWlmIChsZW4gPCAzKSB7CisJCS8qIE1lc3NhZ2VzIG11c3QgYmUg YXQgbGVhc3QgMyBieXRlcyAqLworCQlpcG1pX3NlcmlhbF9sbF9wcm90b2NvbF92aW9sYXRp b24oZGF0YS0+aW5mbyk7CisJCXJldHVybjsKKwl9CisKKwlzZXEgPSBtWzFdID4+IDI7CisK KwkvKiBOb3cgcmVtb3ZlIHRoZSBzZXEjICovCisJZm9yIChpID0gMTsgaSA8IGxlbi0xOyBp KyspCisJCW1baV0gPSBtW2krMV07CisJbGVuLS07CisKKwlkYXRhLT5yZWN2X21zZ19oYW5k bGVyKGRhdGEsIG0sIGxlbiwgZGF0YS0+c2VxbnVtX3RhYmxlW3NlcV0pOworfQorCitzdGF0 aWMgdm9pZCB0cnlfdG9fc2VuZF9kYXRhKHN0cnVjdCBpcG1pX3NlcmlhbF9jb2RlY19kYXRh ICpkYXRhKQoreworCXVuc2lnbmVkIGNoYXIgKmM7CisJdW5zaWduZWQgaW50ICBsZWZ0Owor CXVuc2lnbmVkIGludCAgc2VudDsKKworCWlmICghZGF0YS0+eG1pdF9jaGFyc19sZW4pCisJ CXJldHVybjsKKworIHJlc3RhcnQ6CisJYyA9IGRhdGEtPnhtaXRfY2hhcnMgKyBkYXRhLT54 bWl0X2NoYXJzX3BvczsKKwlsZWZ0ID0gZGF0YS0+eG1pdF9jaGFyc19sZW4gLSBkYXRhLT54 bWl0X2NoYXJzX3BvczsKKwlzZW50ID0gaXBtaV9zZXJpYWxfbGxfeG1pdChkYXRhLT5pbmZv LCBjLCBsZWZ0KTsKKwlpZiAoc2VudCA9PSBsZWZ0KSB7CisJCS8qIFdlIGFyZSBkb25lIHdp dGggdGhpcyBtZXNzYWdlLiAqLworCQlpZiAoZGF0YS0+eG1pdF9tc2dfbGVuKSB7CisJCQkv KiBTZW5kIHRoZSBuZXh0IG1lc3NhZ2Ugd2UgaGF2ZSB3YWl0aW5nLiAqLworCQkJZm9ybWF0 X21zZyhkYXRhLCBkYXRhLT54bWl0X21zZywgZGF0YS0+eG1pdF9tc2dfbGVuLAorCQkJCSAg IGRhdGEtPnhtaXRfbXNnX3NlcSk7CisJCQlkYXRhLT54bWl0X21zZ19sZW4gPSAwOworCQkJ Z290byByZXN0YXJ0OworCQl9IGVsc2UgeworCQkJLyogTm90aGluZyB0byBkby4gKi8KKwkJ CWRhdGEtPnhtaXRfY2hhcnNfbGVuID0gMDsKKwkJfQorCX0gZWxzZSB7CisJCWRhdGEtPnht aXRfY2hhcnNfcG9zICs9IHNlbnQ7CisJfQorfQorCitzdGF0aWMgdm9pZCBmaW5pc2hfaW5p dChzdHJ1Y3QgaXBtaV9zZXJpYWxfY29kZWNfZGF0YSAqZGF0YSwgaW50IGVycikKK3sKKwlp cG1pX3NlcmlhbF9sbF9pbml0X2NvbXBsZXRlKGRhdGEtPmluZm8sIDAsIGVycik7Cit9CisK Ky8qCisgKiBIYW5kbGluZyBmb3IgcGlnZW9ucG9pbnQtc3BlY2lmaWMgY29kZWMsIHdlIGhh dmUgc3BlY2lhbCB3YXlzIHRvCisgKiB0dXJuIG9uL29mZiBlY2hvLgorICovCisjZGVmaW5l IFBQX09FTV9DSEFSUwkJMHgwYSwgMHg0MCwgMHgwMAorI2RlZmluZSBQUF9HRVRfU0VSSUFM X0lOVEZfQ01ECTB4MDEKKyNkZWZpbmUgUFBfU0VUX1NFUklBTF9JTlRGX0NNRAkweDAyCisj ZGVmaW5lIFBQX0dFVF9TRVJfSU5URl9TSVpFIDYKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHBw X2dldF9zZXJfaW50Zl9jbWRbUFBfR0VUX1NFUl9JTlRGX1NJWkVdCisJID0ge0lQTUlfTkVU Rk5fT0VNX1JFUVVFU1QgPDwgMiwgUFBfR0VUX1NFUklBTF9JTlRGX0NNRCwKKwkgICAgUFBf T0VNX0NIQVJTLCAweDAxfTsKKyNkZWZpbmUgUFBfU0VUX1NFUl9JTlRGX1NJWkUgNworc3Rh dGljIHVuc2lnbmVkIGNoYXIgcHBfc2V0X3Nlcl9pbnRmX2NtZFtQUF9TRVRfU0VSX0lOVEZf U0laRV0KKwkgPSB7SVBNSV9ORVRGTl9PRU1fUkVRVUVTVCA8PCAyLCBQUF9TRVRfU0VSSUFM X0lOVEZfQ01ELAorCSAgICBQUF9PRU1fQ0hBUlMsIDB4MDEsIDB4MDB9OworCitzdGF0aWMg dm9pZCBoYW5kbGVfcHBfc2V0X3NlcihzdHJ1Y3QgaXBtaV9zZXJpYWxfY29kZWNfZGF0YSAq ZGF0YSwKKwkJCSAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm1zZywKKwkJCSAgICAgIHVu c2lnbmVkIGludCBsZW4sCisJCQkgICAgICB1bnNpZ25lZCBpbnQgc2VxKQoreworCXVuc2ln bmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoKChtc2dbMF0gPj4gMikgJiAxKSA9PSAwKQorCQkv KiBHb3QgdGhlIGVjaG8gKi8KKwkJcmV0dXJuOworCisJaWYgKCgobXNnWzBdID4+IDIpICE9 IElQTUlfTkVURk5fT0VNX1JFU1BPTlNFKQorCSAgICB8fCAobXNnWzFdICE9IFBQX1NFVF9T RVJJQUxfSU5URl9DTUQpKQorCQkvKiBOb3Qgd2hhdCB3ZSB3ZXJlIGV4cGVjdGluZyAqLwor CQlyZXR1cm47CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGF0YS0+bG9jaywgZmxhZ3MpOwor CWlmIChkYXRhLT5oYW5kc2hha2VfZG9uZSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3Jl KCZkYXRhLT5sb2NrLCBmbGFncyk7CisJCXJldHVybjsKKwl9CisKKwlpZiAobXNnWzJdICE9 IDApIHsKKwkJZGF0YS0+aGFuZHNoYWtlX2RvbmUgPSAxOworCQlzcGluX3VubG9ja19pcnFy ZXN0b3JlKCZkYXRhLT5sb2NrLCBmbGFncyk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZY CisJCSAgICAgICAiRXJyb3Igc2V0dGluZyBwaWdlb25wb2ludCBzZXJpYWwgcGFybXM6IDB4 JXhcbiIsCisJCSAgICAgICBtc2dbMl0pOworCQlmaW5pc2hfaW5pdChkYXRhLCAtRUlOVkFM KTsKKwl9CisKKwlkYXRhLT5oYW5kc2hha2VfZG9uZSA9IDE7CisJZGF0YS0+cmVjdl9tc2df aGFuZGxlciA9IG5vcm1hbF9yZWN2OworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRhdGEt PmxvY2ssIGZsYWdzKTsKKwlmaW5pc2hfaW5pdChkYXRhLCAwKTsKK30KKworc3RhdGljIHZv aWQgcHBfc3RhcnRfZGlzYWJsZV9lY2hvKHN0cnVjdCBpcG1pX3NlcmlhbF9jb2RlY19kYXRh ICpkYXRhKTsKKworc3RhdGljIHZvaWQgaGFuZGxlX3BwX2dldF9zZXIoc3RydWN0IGlwbWlf c2VyaWFsX2NvZGVjX2RhdGEgKmRhdGEsCisJCQkgICAgICBjb25zdCB1bnNpZ25lZCBjaGFy ICptc2csCisJCQkgICAgICB1bnNpZ25lZCBpbnQgbGVuLAorCQkJICAgICAgdW5zaWduZWQg aW50IHNlcSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCgobXNnWzBdID4+ IDIpICYgMSkgPT0gMCkKKwkJLyogR290IHRoZSBlY2hvICovCisJCXJldHVybjsKKworCWlm ICgoKG1zZ1swXSA+PiAyKSAhPSBJUE1JX05FVEZOX09FTV9SRVNQT05TRSkKKwkgICAgfHwg KG1zZ1sxXSAhPSBQUF9HRVRfU0VSSUFMX0lOVEZfQ01EKSkKKwkJLyogTm90IHdoYXQgd2Ug d2VyZSBleHBlY3RpbmcgKi8KKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRh dGEtPmxvY2ssIGZsYWdzKTsKKwlpZiAoZGF0YS0+aGFuZHNoYWtlX2RvbmUpIHsKKwkJc3Bp bl91bmxvY2tfaXJxcmVzdG9yZSgmZGF0YS0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm47CisJ fQorCisJaWYgKG1zZ1syXSAhPSAwKSB7CisJCWlmICghZGF0YS0+b3B0aW9ucy5waWdlb25w b2ludF9pYW5hX2JhZF9mb3JjZWQgJiYKKwkJICAgICFkYXRhLT5wcF9pYW5hX3JldHJpZWQp IHsKKwkJCS8qIFRyeSBzd2FwcGluZyB0aGUgSUFOQSBhbmQgc2VlIGlmIHRoYXQgaGVscHMu ICovCisJCQlkYXRhLT5wcF9pYW5hX3JldHJpZWQgPSAxOworCQkJZGF0YS0+b3B0aW9ucy5w aWdlb25wb2ludF9pYW5hX2JhZAorCQkJCT0gIWRhdGEtPm9wdGlvbnMucGlnZW9ucG9pbnRf aWFuYV9iYWQ7CisJCQlwcF9zdGFydF9kaXNhYmxlX2VjaG8oZGF0YSk7CisJCQlzcGluX3Vu bG9ja19pcnFyZXN0b3JlKCZkYXRhLT5sb2NrLCBmbGFncyk7CisJCQlyZXR1cm47CisJCX0K KwkJZGF0YS0+aGFuZHNoYWtlX2RvbmUgPSAxOworCQlzcGluX3VubG9ja19pcnFyZXN0b3Jl KCZkYXRhLT5sb2NrLCBmbGFncyk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYCisJCSAg ICAgICAiRXJyb3IgZ2V0dGluZyBwaWdlb25wb2ludCBzZXJpYWwgcGFybXM6IDB4JXhcbiIs CisJCSAgICAgICBtc2dbMl0pOworCQlmaW5pc2hfaW5pdChkYXRhLCAtRUlOVkFMKTsKKwkJ cmV0dXJuOworCX0KKworCWlmIChsZW4gPCA2KSB7CisJCWRhdGEtPmhhbmRzaGFrZV9kb25l ID0gMTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGF0YS0+bG9jaywgZmxhZ3MpOwor CQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWAorCQkgICAgICAgIlBpZ2VvbnBvaW50IHNlcmlh bCBwYXJtcyB0b28gc2hvcnQ6ICVkXG4iLCBsZW4pOworCQlmaW5pc2hfaW5pdChkYXRhLCAt RUlOVkFMKTsKKwkJcmV0dXJuOworCX0KKworCW1lbWNweShkYXRhLT54bWl0X21zZywgcHBf c2V0X3Nlcl9pbnRmX2NtZCwKKwkgICAgICAgc2l6ZW9mKHBwX3NldF9zZXJfaW50Zl9jbWQp KTsKKwlpZiAoZGF0YS0+b3B0aW9ucy5waWdlb25wb2ludF9pYW5hX2JhZCkgeworCQlkYXRh LT54bWl0X21zZ1syXSA9IDB4MDA7CisJCWRhdGEtPnhtaXRfbXNnWzRdID0gMHgwYTsKKwl9 CisJZGF0YS0+eG1pdF9tc2dbNl0gJj0gMHg3ZjsgLyogQW5kIG9mZiBlY2hvIGJpdCAqLwor CisJZGF0YS0+cmVjdl9tc2dfaGFuZGxlciA9IGhhbmRsZV9wcF9zZXRfc2VyOworCWRhdGEt PmhhbmRzaGFrZV90aW1lID0gVE1fSEFORFNIQUtFX1RJTUU7CisJZGF0YS0+aGFuZHNoYWtl X3JldHJpZXNfbGVmdCA9IFRNX0hBTkRTSEFLRV9SRVRSSUVTOworCWZvcm1hdF9tc2coZGF0 YSwgZGF0YS0+eG1pdF9tc2csIHNpemVvZihwcF9zZXRfc2VyX2ludGZfY21kKSwgMCk7CisJ ZGF0YS0+eG1pdF9tc2dfbGVuID0gMDsKKwl0cnlfdG9fc2VuZF9kYXRhKGRhdGEpOworCisJ c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGF0YS0+bG9jaywgZmxhZ3MpOworfQorCisKK3N0 YXRpYyB2b2lkIHBwX3N0YXJ0X2Rpc2FibGVfZWNobyhzdHJ1Y3QgaXBtaV9zZXJpYWxfY29k ZWNfZGF0YSAqZGF0YSkKK3sKKwltZW1jcHkoZGF0YS0+eG1pdF9tc2csIHBwX2dldF9zZXJf aW50Zl9jbWQsCisJICAgICAgIHNpemVvZihwcF9nZXRfc2VyX2ludGZfY21kKSk7CisJaWYg KGRhdGEtPm9wdGlvbnMucGlnZW9ucG9pbnRfaWFuYV9iYWQpIHsKKwkJZGF0YS0+eG1pdF9t c2dbMl0gPSAweDAwOworCQlkYXRhLT54bWl0X21zZ1s0XSA9IDB4MGE7CisJfQorCisJZGF0 YS0+cmVjdl9tc2dfaGFuZGxlciA9IGhhbmRsZV9wcF9nZXRfc2VyOworCWRhdGEtPmhhbmRz aGFrZV90aW1lID0gVE1fSEFORFNIQUtFX1RJTUU7CisJZGF0YS0+aGFuZHNoYWtlX3JldHJp ZXNfbGVmdCA9IFRNX0hBTkRTSEFLRV9SRVRSSUVTOworCWZvcm1hdF9tc2coZGF0YSwgZGF0 YS0+eG1pdF9tc2csIHNpemVvZihwcF9nZXRfc2VyX2ludGZfY21kKSwgMCk7CisJZGF0YS0+ eG1pdF9tc2dfbGVuID0gMDsKKwl0cnlfdG9fc2VuZF9kYXRhKGRhdGEpOworfQorCisKK3N0 YXRpYyBpbnQgdG1fc2V0dXBfdGVybWlvcyhzdHJ1Y3Qga3Rlcm1pb3MgKnQpCit7CisJLyog Tm90aGluZyB0byBkbywgdGhlIGRlZmF1bHQgaXMgZmluZS4gKi8KKwlyZXR1cm4gMDsKK30K Kworc3RhdGljIHVuc2lnbmVkIGNoYXIgZGV2aWRfbXNnW10gPSB7IElQTUlfTkVURk5fQVBQ X1JFUVVFU1QgPDwgMiwKKwkJCQkgICAgIElQTUlfR0VUX0RFVklDRV9JRF9DTUQgfTsKKwor c3RhdGljIHZvaWQgaGFuZGxlX2luaXRfZGV2aWQoc3RydWN0IGlwbWlfc2VyaWFsX2NvZGVj X2RhdGEgKmRhdGEsCisJCQkgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICptc2csCisJCQkg ICAgICB1bnNpZ25lZCBpbnQgbGVuLAorCQkJICAgICAgdW5zaWduZWQgaW50IHNlcSkKK3sK KwlpbnQgcnY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICgobGVuID09IHNpemVv ZihkZXZpZF9tc2cpKQorCQkJCSYmIChtZW1jbXAobXNnLCBkZXZpZF9tc2csIGxlbikgPT0g MCkpIHsKKwkJZGF0YS0+ZWNob19vbiA9IDE7CisJCXJldHVybjsKKwl9CisKKwlzcGluX2xv Y2tfaXJxc2F2ZSgmZGF0YS0+bG9jaywgZmxhZ3MpOworCWlmIChkYXRhLT5oYW5kc2hha2Vf ZG9uZSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkYXRhLT5sb2NrLCBmbGFncyk7 CisJCXJldHVybjsKKwl9CisKKwlydiA9IGlwbWlfZGVtYW5nbGVfZGV2aWNlX2lkKG1zZywg bGVuLCAmZGF0YS0+aWQpOworCWlmIChydikgeworCQlkYXRhLT5oYW5kc2hha2VfZG9uZSA9 IDE7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRhdGEtPmxvY2ssIGZsYWdzKTsKKwkJ cHJpbnRrKEtFUk5fV0FSTklORyBQRlggImludmFsaWQgZGV2aWNlIGlkOiAlZFxuIiwgcnYp OworCQlmaW5pc2hfaW5pdChkYXRhLCBydik7CisJCXJldHVybjsKKwl9CisKKwljaGVja19k ZXZpZF9vcHRpb25zKGRhdGEpOworCisJaWYgKGRhdGEtPm9wdGlvbnMucGlnZW9ucG9pbnQg JiYgZGF0YS0+ZWNob19vbikgeworCQlwcF9zdGFydF9kaXNhYmxlX2VjaG8oZGF0YSk7CisJ CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRhdGEtPmxvY2ssIGZsYWdzKTsKKwl9IGVsc2Ug eworCQlkYXRhLT5oYW5kc2hha2VfZG9uZSA9IDE7CisJCWRhdGEtPnJlY3ZfbXNnX2hhbmRs ZXIgPSBub3JtYWxfcmVjdjsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGF0YS0+bG9j aywgZmxhZ3MpOworCQlmaW5pc2hfaW5pdChkYXRhLCAwKTsKKwl9Cit9CisKK3N0YXRpYyBp bnQgdG1faW5pdChzdHJ1Y3QgaXBtaV9zZXJpYWxfY29kZWNfZGF0YSAqZGF0YSwKKwkJICAg c3RydWN0IGlwbWlfc2VyaWFsX2luZm8gKmluZm8sCisJCSAgIGNvbnN0IGNoYXIgKm9wdGlv bnMpCit7CisJbWVtc2V0KGRhdGEsIDAsIHNpemVvZigqZGF0YSkpOworCXNwaW5fbG9ja19p bml0KCZkYXRhLT5sb2NrKTsKKwlkYXRhLT5pbmZvID0gaW5mbzsKKwlyZXR1cm4gY2hlY2tf b3B0aW9ucyhkYXRhLCBvcHRpb25zKTsKK30KKworc3RhdGljIGludCB0bV9zdGFydChzdHJ1 Y3QgaXBtaV9zZXJpYWxfY29kZWNfZGF0YSAqZGF0YSkKK3sKKwl1bnNpZ25lZCBsb25nIGZs YWdzOworCisJLyoKKwkgKiBTZW5kIGEgImdldCBkZXZpY2UgaWQiIHRvIHRlc3QgYmFzaWMg ZnVuY3Rpb24gYW5kIGdldAorCSAqIHVzZWZ1bCBpbmZvLgorCSAqLworCXNwaW5fbG9ja19p cnFzYXZlKCZkYXRhLT5sb2NrLCBmbGFncyk7CisJZGF0YS0+cmVjdl9tc2dfaGFuZGxlciA9 IGhhbmRsZV9pbml0X2RldmlkOworCWRhdGEtPmhhbmRzaGFrZV90aW1lID0gVE1fSEFORFNI QUtFX1RJTUU7CisJZGF0YS0+aGFuZHNoYWtlX3JldHJpZXNfbGVmdCA9IFRNX0hBTkRTSEFL RV9SRVRSSUVTOworCWZvcm1hdF9tc2coZGF0YSwgZGV2aWRfbXNnLCBzaXplb2YoZGV2aWRf bXNnKSwgMCk7CisJZGF0YS0+eG1pdF9tc2dfbGVuID0gMDsKKwl0cnlfdG9fc2VuZF9kYXRh KGRhdGEpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRhdGEtPmxvY2ssIGZsYWdzKTsK KwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdG1fY2xlYW51cChzdHJ1Y3QgaXBtaV9z ZXJpYWxfY29kZWNfZGF0YSAqZGF0YSkKK3sKKwkvKiBOb3RoaW5nIHRvIGRvLiAqLworfQor CitzdGF0aWMgaW50IHRtX3NpemUodm9pZCkKK3sKKwlyZXR1cm4gc2l6ZW9mKHN0cnVjdCBp cG1pX3NlcmlhbF9jb2RlY19kYXRhKTsKK30KKworc3RhdGljIHZvaWQgdG1faGFuZGxlX2No YXIoc3RydWN0IGlwbWlfc2VyaWFsX2NvZGVjX2RhdGEgKmRhdGEsCisJCQkgICB1bnNpZ25l ZCBjaGFyIGNoKQoreworCXVuc2lnbmVkIGludCBsZW4gPSBkYXRhLT5yZWN2X2NoYXJzX2xl bjsKKwl1bnNpZ25lZCBjaGFyICpyOworCWludCAgICAgICAgICAgcnY7CisKKwlpZiAoZGF0 YS0+b3B0aW9ucy5hdHRuICYmIChjaCA9PSBkYXRhLT5vcHRpb25zLmF0dG5fY2hhcikpIHsK KwkJaXBtaV9zZXJpYWxfbGxfYXR0bihkYXRhLT5pbmZvKTsKKwkJcmV0dXJuOworCX0KKwor CWlmIChjaCA9PSAnWycpIHsKKwkJLyoKKwkJICogU3RhcnQgb2YgYSBjb21tYW5kLiAgTm90 ZSB0aGF0IGlmIGEgY29tbWFuZCBpcworCQkgKiBhbHJlYWR5IGluIHByb2dyZXNzIChsZW4g IT0gMCkgd2UgYWJvcnQgaXQuCisJCSAqLworCQlpZiAobGVuICE9IDApCisJCQlpcG1pX3Nl cmlhbF9sbF9wcm90b2NvbF92aW9sYXRpb24oZGF0YS0+aW5mbyk7CisKKwkJLyogQ29udmVy dCB0aGUgbGVhZGluZyAnWycgdG8gYSBzcGFjZSwgdGhhdCdzIGlubm9jdW91cy4gKi8KKwkJ ZGF0YS0+cmVjdl9jaGFyc1swXSA9ICcgJzsKKwkJZGF0YS0+cmVjdl9jaGFyc19sZW4gPSAx OworCQlkYXRhLT5yZWN2X2NoYXJzX3Rvb19tYW55ID0gMDsKKwkJcmV0dXJuOworCX0KKwor CWlmIChsZW4gPT0gMCkKKwkJLyogSWdub3JlIGV2ZXJ5dGhpbmcgb3V0c2lkZSBbIF0uICov CisJCXJldHVybjsKKworCWlmIChjaCA9PSAnXScpIHsKKwkJLyogRW5kIG9mIGNvbW1hbmQs IGhhbmRsZSBpdC4gKi8KKwkJaWYgKGRhdGEtPnJlY3ZfY2hhcnNfdG9vX21hbnkpIHsKKwkJ CS8qIElucHV0IGRhdGEgb3ZlcnJ1bi4gKi8KKwkJCWlwbWlfc2VyaWFsX2xsX3Byb3RvY29s X3Zpb2xhdGlvbihkYXRhLT5pbmZvKTsKKwkJCWRhdGEtPnJlY3ZfY2hhcnNfdG9vX21hbnkg PSAwOworCQkJZGF0YS0+cmVjdl9jaGFyc19sZW4gPSAwOworCQkJcmV0dXJuOworCQl9CisJ CXJ2ID0gdW5mb3JtYXRfbXNnKGRhdGEpOworCQlkYXRhLT5yZWN2X2NoYXJzX2xlbiA9IDA7 CisJCWlmIChydikgeworCQkJLyogQmFkIGlucHV0IGRhdGEuICovCisJCQlpcG1pX3Nlcmlh bF9sbF9wcm90b2NvbF92aW9sYXRpb24oZGF0YS0+aW5mbyk7CisJCQlyZXR1cm47CisJCX0K KwkJaGFuZGxlX3JlY3ZfbXNnKGRhdGEpOworCQlyZXR1cm47CisJfQorCisJaWYgKGRhdGEt PnJlY3ZfY2hhcnNfdG9vX21hbnkpCisJCXJldHVybjsKKworCXIgPSBkYXRhLT5yZWN2X2No YXJzOworCisJaWYgKGxlbiA+PSBzaXplb2YoZGF0YS0+cmVjdl9jaGFycykpIHsKKwkJZGF0 YS0+cmVjdl9jaGFyc190b29fbWFueSA9IDE7CisJfSBlbHNlIGlmIChpc3NwYWNlKHJbbGVu LTFdKSAmJiBpc3NwYWNlKGNoKSkgeworCQkvKiBJZ25vcmUgbXVsdGlwbGUgc3BhY2VzIHRv Z2V0aGVyLiAqLworCX0gZWxzZSB7CisJCXJbbGVuXSA9IGNoOworCQlkYXRhLT5yZWN2X2No YXJzX2xlbisrOworCX0KK30KKworc3RhdGljIGludCB0bV9zZW5kX21zZyhzdHJ1Y3QgaXBt aV9zZXJpYWxfY29kZWNfZGF0YSAqZGF0YSwKKwkJICAgICAgIGNvbnN0IHVuc2lnbmVkIGNo YXIgKm1zZywgdW5zaWduZWQgaW50IG1zZ19sZW4sCisJCSAgICAgICB1bnNpZ25lZCBpbnQg c2VxKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50ICAgICAgICAgICBydiA9IDA7 CisKKwlpZiAobXNnX2xlbiA+IElQTUlfTUFYX01TR19MRU5HVEgpCisJCXJldHVybiAtRUZC SUc7CisJaWYgKG1zZ19sZW4gPCAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNwaW5fbG9j a19pcnFzYXZlKCZkYXRhLT5sb2NrLCBmbGFncyk7CisJaWYgKGRhdGEtPnhtaXRfbXNnX2xl bikgeworCQkvKiBTb21ldGhpbmcgaXMgc3RpbGwgd2FpdGluZyB0byBiZSBzZW50LiAqLwor CQlydiA9IC1FQlVTWTsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKworCWlmIChkYXRhLT54 bWl0X2NoYXJzX2xlbiA9PSAwKSB7CisJCS8qIFRyYW5zbWl0IHF1ZXVlIGlzIGVtcHR5LCBq dXN0IGZvcm1hdCBpdCBub3cgdG8gZ28uICovCisJCWZvcm1hdF9tc2coZGF0YSwgbXNnLCBt c2dfbGVuLCBzZXEpOworCQl0cnlfdG9fc2VuZF9kYXRhKGRhdGEpOworCX0gZWxzZSB7CisJ CS8qCisJCSAqIEdldCBpdCByZWFkeSB0byBiZSBzZW50IGxhdGVyIHdoZW4gdGhlIHRyYW5z bWl0CisJCSAqIHF1ZXVlIGVtcHRpZXMuCisJCSAqLworCQltZW1jcHkoZGF0YS0+eG1pdF9t c2csIG1zZywgbXNnX2xlbik7CisJCWRhdGEtPnhtaXRfbXNnX2xlbiA9IG1zZ19sZW47CisJ CWRhdGEtPnhtaXRfbXNnX3NlcSA9IHNlcTsKKwl9CisKKyBvdXRfdW5sb2NrOgorCXNwaW5f dW5sb2NrX2lycXJlc3RvcmUoJmRhdGEtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcnY7Cit9 CisKK3N0YXRpYyB2b2lkIHRtX3R4X3JlYWR5KHN0cnVjdCBpcG1pX3NlcmlhbF9jb2RlY19k YXRhICpkYXRhKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJx c2F2ZSgmZGF0YS0+bG9jaywgZmxhZ3MpOworCXRyeV90b19zZW5kX2RhdGEoZGF0YSk7CisJ c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGF0YS0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0 aWMgdW5zaWduZWQgaW50IHRtX2NhcGFiaWxpdGllcyhzdHJ1Y3QgaXBtaV9zZXJpYWxfY29k ZWNfZGF0YSAqZGF0YSkKK3sKKwl1bnNpZ25lZCBpbnQgYyA9IChJUE1JX1NFUklBTF9TVVBQ T1JUU19HRVRfRkxBR1MKKwkJCSAgfCBJUE1JX1NFUklBTF9TVVBQT1JUU19FVkVOVF9CVUZG RVIpOworCWlmIChkYXRhLT5vcHRpb25zLmF0dG4pCisJCWMgfD0gSVBNSV9TRVJJQUxfSEFT X0FUVE47CisJZWxzZQorCQljIHw9IElQTUlfU0VSSUFMX05FRURTX0dFVF9GTEFHU19QT0xM SU5HOworCXJldHVybiBjOworfQorCitzdGF0aWMgdm9pZCB0bV90aW1lcl90aWNrKHN0cnVj dCBpcG1pX3NlcmlhbF9jb2RlY19kYXRhICpkYXRhLAorCQkJICB1bnNpZ25lZCBpbnQgdGlt ZV9zaW5jZV9sYXN0KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKiBDaGVjayBx dWlja2x5IGZpcnN0IHRvIGF2b2lkIGdyYWJiaW5nIHRoZSBsb2NrIG5vcm1hbGx5LiAqLwor CWlmIChsaWtlbHkoZGF0YS0+aGFuZHNoYWtlX2RvbmUpKQorCQlyZXR1cm47CisKKwlzcGlu X2xvY2tfaXJxc2F2ZSgmZGF0YS0+bG9jaywgZmxhZ3MpOworCS8qIFJlY2hlY2sgdG8gYXZv aWQgcmFjZXMgKi8KKwlpZiAoZGF0YS0+aGFuZHNoYWtlX2RvbmUpCisJCWdvdG8gb3V0X3Vu bG9jazsKKworCWRhdGEtPmhhbmRzaGFrZV90aW1lIC09IHRpbWVfc2luY2VfbGFzdDsKKwlp ZiAodGltZV9zaW5jZV9sYXN0IDw9IDApIHsKKwkJZGF0YS0+aGFuZHNoYWtlX3JldHJpZXNf bGVmdC0tOworCQlpZiAoZGF0YS0+aGFuZHNoYWtlX3JldHJpZXNfbGVmdCA8PSAwKSB7CisJ CQlkYXRhLT5oYW5kc2hha2VfZG9uZSA9IDE7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3Jl KCZkYXRhLT5sb2NrLCBmbGFncyk7CisJCQlmaW5pc2hfaW5pdChkYXRhLCAtRVRJTUVET1VU KTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJLyogUmVzZW5kIHRoZSBhcHByb3ByaWF0ZSBt ZXNzYWdlICovCisJCWRhdGEtPmhhbmRzaGFrZV90aW1lID0gVE1fSEFORFNIQUtFX1RJTUU7 CisJCWlmIChkYXRhLT5yZWN2X21zZ19oYW5kbGVyID09IGhhbmRsZV9pbml0X2RldmlkKSB7 CisJCQlmb3JtYXRfbXNnKGRhdGEsIGRldmlkX21zZywgc2l6ZW9mKGRldmlkX21zZyksIDAp OworCQkJZGF0YS0+eG1pdF9tc2dfbGVuID0gMDsKKwkJCXRyeV90b19zZW5kX2RhdGEoZGF0 YSk7CisJCX0gZWxzZSBpZiAoZGF0YS0+cmVjdl9tc2dfaGFuZGxlciA9PSBoYW5kbGVfcHBf Z2V0X3NlcikgeworCQkJZm9ybWF0X21zZyhkYXRhLCBkYXRhLT54bWl0X21zZywKKwkJCQkg ICBzaXplb2YocHBfZ2V0X3Nlcl9pbnRmX2NtZCksIDApOworCQkJZGF0YS0+eG1pdF9tc2df bGVuID0gMDsKKwkJCXRyeV90b19zZW5kX2RhdGEoZGF0YSk7CisJCX0gZWxzZSBpZiAoZGF0 YS0+cmVjdl9tc2dfaGFuZGxlciA9PSBoYW5kbGVfcHBfc2V0X3NlcikgeworCQkJZGF0YS0+ eG1pdF9tc2dfbGVuID0gc2l6ZW9mKHBwX3NldF9zZXJfaW50Zl9jbWQpOworCQkJZm9ybWF0 X21zZyhkYXRhLCBkYXRhLT54bWl0X21zZywKKwkJCQkgICBkYXRhLT54bWl0X21zZ19sZW4s IDApOworCQkJZGF0YS0+eG1pdF9tc2dfbGVuID0gMDsKKwkJCXRyeV90b19zZW5kX2RhdGEo ZGF0YSk7CisJCX0KKwl9Cisgb3V0X3VubG9jazoKKwlzcGluX3VubG9ja19pcnFyZXN0b3Jl KCZkYXRhLT5sb2NrLCBmbGFncyk7Cisgb3V0OgorCXJldHVybjsKK30KKworc3RhdGljIHN0 cnVjdCBpcG1pX3NlcmlhbF9jb2RlYyB0bV9jb2RlYyA9IHsKKwkub3duZXIgPSBUSElTX01P RFVMRSwKKwkubmFtZSAgPSAiVGVybWluYWxNb2RlIiwKKworCS5jYXBhYmlsaXRpZXMJPSB0 bV9jYXBhYmlsaXRpZXMsCisJLnNldHVwX3Rlcm1pb3MJPSB0bV9zZXR1cF90ZXJtaW9zLAor CS5pbml0CQk9IHRtX2luaXQsCisJLnN0YXJ0CQk9IHRtX3N0YXJ0LAorCS5jbGVhbnVwCT0g dG1fY2xlYW51cCwKKwkuc2l6ZQkJPSB0bV9zaXplLAorCS5zZW5kX21zZwk9IHRtX3NlbmRf bXNnLAorCS5oYW5kbGVfY2hhcgk9IHRtX2hhbmRsZV9jaGFyLAorCS50eF9yZWFkeQk9IHRt X3R4X3JlYWR5LAorCS5hZGRfb3B0aW9ucwk9IHRtX2FkZF9vcHRpb25zLAorCS50aW1lcl90 aWNrICAgICA9IHRtX3RpbWVyX3RpY2sKK307CisKK3N0YXRpYyBfX2luaXQgaW50Citpbml0 X2lwbWlfc2VyaWFsX3RtX2NvZGVjKHZvaWQpCit7CisJcmV0dXJuIGlwbWlfc2VyaWFsX2Nv ZGVjX3JlZ2lzdGVyKCZ0bV9jb2RlYyk7Cit9CisKK21vZHVsZV9pbml0KGluaXRfaXBtaV9z ZXJpYWxfdG1fY29kZWMpOworCitzdGF0aWMgX19leGl0IHZvaWQKK2V4aXRfaXBtaV9zZXJp YWxfdG1fY29kZWModm9pZCkKK3sKKwlpcG1pX3NlcmlhbF9jb2RlY191bnJlZ2lzdGVyKCZ0 bV9jb2RlYyk7Cit9Cittb2R1bGVfZXhpdChleGl0X2lwbWlfc2VyaWFsX3RtX2NvZGVjKTsK K01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtdSAtLW5ldy1maWxlIC0tcmVjdXJzaXZl IGxpbnV4LTIuNi4yOS42Lm9yaWcvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9zaV9pbnRmLmMg bGludXgtMi42LjI5LjYubW9kL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfaW50Zi5jCi0t LSBsaW51eC0yLjYuMjkuNi5vcmlnL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfaW50Zi5j CTIwMDktMDctMDIgMTY6NDE6MjAuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYuMjku Ni5tb2QvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9zaV9pbnRmLmMJMjAwOS0wNy0yMSAxMToy ODoxOC4wMDAwMDAwMDAgLTA3MDAKQEAgLTgyLDEyICs4Miw2IEBACiAjZGVmaW5lIFNJX1NI T1JUX1RJTUVPVVRfVVNFQyAgMjUwIC8qIC4yNW1zIHdoZW4gdGhlIFNNIHJlcXVlc3QgYQog CQkJCSAgICAgIHNob3J0IHRpbWVvdXQgKi8KIAotLyogQml0IGZvciBCTUMgZ2xvYmFsIGVu YWJsZXMuICovCi0jZGVmaW5lIElQTUlfQk1DX1JDVl9NU0dfSU5UUiAgICAgMHgwMQotI2Rl ZmluZSBJUE1JX0JNQ19FVlRfTVNHX0lOVFIgICAgIDB4MDIKLSNkZWZpbmUgSVBNSV9CTUNf RVZUX01TR19CVUZGICAgICAweDA0Ci0jZGVmaW5lIElQTUlfQk1DX1NZU19MT0cgICAgICAg ICAgMHgwOAotCiBlbnVtIHNpX2ludGZfc3RhdGUgewogCVNJX05PUk1BTCwKIAlTSV9HRVRU SU5HX0ZMQUdTLApAQCAtMjIwLDYgKzIxNCw5IEBACiAJCQkgICAgIE9FTTJfREFUQV9BVkFJ TCkKIAl1bnNpZ25lZCBjaGFyICAgICAgIG1zZ19mbGFnczsKIAorCS8qIERvZXMgdGhlIEJN QyBoYXZlIGFuIGV2ZW50IGJ1ZmZlcj8gKi8KKwljaGFyCQkgICAgaGFzX2V2ZW50X2J1ZmZl cjsKKwogCS8qCiAJICogSWYgc2V0IHRvIHRydWUsIHRoaXMgd2lsbCByZXF1ZXN0IGV2ZW50 cyB0aGUgbmV4dCB0aW1lIHRoZQogCSAqIHN0YXRlIG1hY2hpbmUgaXMgaWRsZS4KQEAgLTI5 Niw2ICsyOTMsNyBAQAogCiBzdGF0aWMgaW50IGZvcmNlX2tpcG1pZFtTSV9NQVhfUEFSTVNd Owogc3RhdGljIGludCBudW1fZm9yY2Vfa2lwbWlkOworc3RhdGljIHVuc2lnbmVkIGludCBr aXBtaWRfbWF4X2J1c3k7CiAKIHN0YXRpYyBpbnQgdW5sb2FkX3doZW5fZW1wdHkgPSAxOwog CkBAIC05MjcsMjAgKzkyNSw1MiBAQAogCX0KIH0KIAorc3RhdGljIGludCBpcG1pX3RocmVh ZF9tdXN0X3NsZWVwKGVudW0gc2lfc21fcmVzdWx0IHNtaV9yZXN1bHQsIGludCAqYnVzeSwK KwkJCQkgIHN0cnVjdCB0aW1lc3BlYyAqYnVzeV90aW1lKQoreworCWlmIChraXBtaWRfbWF4 X2J1c3kgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoc21pX3Jlc3VsdCAhPSBTSV9TTV9D QUxMX1dJVEhfREVMQVkpIHsKKwkJaWYgKCpidXN5ICE9IDApCisJCQkqYnVzeSA9IDA7CisJ CXJldHVybiAwOworCX0KKworCWlmICgqYnVzeSA9PSAwKSB7CisJCSpidXN5ID0gMTsKKwkJ Z2V0bnN0aW1lb2ZkYXkoYnVzeV90aW1lKTsKKwkJdGltZXNwZWNfYWRkX25zKGJ1c3lfdGlt ZSwga2lwbWlkX21heF9idXN5ICogTlNFQ19QRVJfVVNFQyk7CisJfSBlbHNlIHsKKwkJc3Ry dWN0IHRpbWVzcGVjIG5vdzsKKwkJZ2V0bnN0aW1lb2ZkYXkoJm5vdyk7CisJCWlmICh1bmxp a2VseSh0aW1lc3BlY19jb21wYXJlKCZub3csIGJ1c3lfdGltZSkgPiAwKSkgeworCQkJKmJ1 c3kgPSAwOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKIHN0YXRp YyBpbnQgaXBtaV90aHJlYWQodm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3Qgc21pX2luZm8gKnNt aV9pbmZvID0gZGF0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWVudW0gc2lfc21fcmVz dWx0IHNtaV9yZXN1bHQ7CisJc3RydWN0IHRpbWVzcGVjIGJ1c3lfdGltZTsKKwlpbnQgYnVz eSA9IDA7CiAKIAlzZXRfdXNlcl9uaWNlKGN1cnJlbnQsIDE5KTsKIAl3aGlsZSAoIWt0aHJl YWRfc2hvdWxkX3N0b3AoKSkgeworCQlpbnQgbXVzdF9zbGVlcDsKIAkJc3Bpbl9sb2NrX2ly cXNhdmUoJihzbWlfaW5mby0+c2lfbG9jayksIGZsYWdzKTsKIAkJc21pX3Jlc3VsdCA9IHNt aV9ldmVudF9oYW5kbGVyKHNtaV9pbmZvLCAwKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9y ZSgmKHNtaV9pbmZvLT5zaV9sb2NrKSwgZmxhZ3MpOworCQltdXN0X3NsZWVwID0gaXBtaV90 aHJlYWRfbXVzdF9zbGVlcChzbWlfcmVzdWx0LAorCQkJCQkJICAgICZidXN5LCAmYnVzeV90 aW1lKTsKIAkJaWYgKHNtaV9yZXN1bHQgPT0gU0lfU01fQ0FMTF9XSVRIT1VUX0RFTEFZKQog CQkJOyAvKiBkbyBub3RoaW5nICovCi0JCWVsc2UgaWYgKHNtaV9yZXN1bHQgPT0gU0lfU01f Q0FMTF9XSVRIX0RFTEFZKQorCQllbHNlIGlmIChzbWlfcmVzdWx0ID09IFNJX1NNX0NBTExf V0lUSF9ERUxBWSAmJiAhbXVzdF9zbGVlcCkKIAkJCXNjaGVkdWxlKCk7CiAJCWVsc2UKIAkJ CXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZSgxKTsKQEAgLTk2OCw3ICs5OTgsOCBA QAogewogCXN0cnVjdCBzbWlfaW5mbyAqc21pX2luZm8gPSBzZW5kX2luZm87CiAKLQlpZiAo YXRvbWljX3JlYWQoJnNtaV9pbmZvLT5zdG9wX29wZXJhdGlvbikpCisJaWYgKGF0b21pY19y ZWFkKCZzbWlfaW5mby0+c3RvcF9vcGVyYXRpb24pIHx8CisJCQkJIXNtaV9pbmZvLT5oYXNf ZXZlbnRfYnVmZmVyKQogCQlyZXR1cm47CiAKIAlhdG9taWNfc2V0KCZzbWlfaW5mby0+cmVx X2V2ZW50cywgMSk7CkBAIC0xMjEzLDYgKzEyNDQsMTEgQEAKIE1PRFVMRV9QQVJNX0RFU0Mo dW5sb2FkX3doZW5fZW1wdHksICJVbmxvYWQgdGhlIG1vZHVsZSBpZiBubyBpbnRlcmZhY2Vz IGFyZSIKIAkJICIgc3BlY2lmaWVkIG9yIGZvdW5kLCBkZWZhdWx0IGlzIDEuICBTZXR0aW5n IHRvIDAiCiAJCSAiIGlzIHVzZWZ1bCBmb3IgaG90IGFkZCBvZiBkZXZpY2VzIHVzaW5nIGhv dG1vZC4iKTsKK21vZHVsZV9wYXJhbShraXBtaWRfbWF4X2J1c3ksIHVpbnQsIDA2NDQpOwor TU9EVUxFX1BBUk1fREVTQyhraXBtaWRfbWF4X2J1c3ksCisJCSAiTWF4IHRpbWUgKGluIG1p Y3Jvc2Vjb25kcykgdG8gYnVzeS13YWl0IGZvciBJUE1JIGRhdGEgYmVmb3JlIgorCQkgIiBz bGVlcGluZy4gMCAoZGVmYXVsdCkgbWVhbnMgdG8gd2FpdCBmb3JldmVyLiBTZXQgdG8gMTAw LTUwMCIKKwkJICIgaWYga2lwbWlkIGlzIHVzaW5nIHVwIGEgbG90IG9mIENQVSB0aW1lLiIp OwogCiAKIHN0YXRpYyB2b2lkIHN0ZF9pcnFfY2xlYW51cChzdHJ1Y3Qgc21pX2luZm8gKmlu Zm8pCkBAIC0yNDA3LDI2ICsyNDQzLDkgQEAKIH07CiAjZW5kaWYgLyogQ09ORklHX1BQQ19P RiAqLwogCi0KLXN0YXRpYyBpbnQgdHJ5X2dldF9kZXZfaWQoc3RydWN0IHNtaV9pbmZvICpz bWlfaW5mbykKK3N0YXRpYyBpbnQgd2FpdF9mb3JfbXNnX2RvbmUoc3RydWN0IHNtaV9pbmZv ICpzbWlfaW5mbykKIHsKLQl1bnNpZ25lZCBjaGFyICAgICAgICAgbXNnWzJdOwotCXVuc2ln bmVkIGNoYXIgICAgICAgICAqcmVzcDsKLQl1bnNpZ25lZCBsb25nICAgICAgICAgcmVzcF9s ZW47CiAJZW51bSBzaV9zbV9yZXN1bHQgICAgIHNtaV9yZXN1bHQ7Ci0JaW50ICAgICAgICAg ICAgICAgICAgIHJ2ID0gMDsKLQotCXJlc3AgPSBrbWFsbG9jKElQTUlfTUFYX01TR19MRU5H VEgsIEdGUF9LRVJORUwpOwotCWlmICghcmVzcCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkv KgotCSAqIERvIGEgR2V0IERldmljZSBJRCBjb21tYW5kLCBzaW5jZSBpdCBjb21lcyBiYWNr IHdpdGggc29tZQotCSAqIHVzZWZ1bCBpbmZvLgotCSAqLwotCW1zZ1swXSA9IElQTUlfTkVU Rk5fQVBQX1JFUVVFU1QgPDwgMjsKLQltc2dbMV0gPSBJUE1JX0dFVF9ERVZJQ0VfSURfQ01E OwotCXNtaV9pbmZvLT5oYW5kbGVycy0+c3RhcnRfdHJhbnNhY3Rpb24oc21pX2luZm8tPnNp X3NtLCBtc2csIDIpOwogCiAJc21pX3Jlc3VsdCA9IHNtaV9pbmZvLT5oYW5kbGVycy0+ZXZl bnQoc21pX2luZm8tPnNpX3NtLCAwKTsKIAlmb3IgKDs7KSB7CkBAIC0yNDQxLDE2ICsyNDYw LDM5IEBACiAJCX0gZWxzZQogCQkJYnJlYWs7CiAJfQotCWlmIChzbWlfcmVzdWx0ID09IFNJ X1NNX0hPU0VEKSB7CisJaWYgKHNtaV9yZXN1bHQgPT0gU0lfU01fSE9TRUQpCiAJCS8qCiAJ CSAqIFdlIGNvdWxkbid0IGdldCB0aGUgc3RhdGUgbWFjaGluZSB0byBydW4sIHNvIHdoYXRl dmVyJ3MgYXQKIAkJICogdGhlIHBvcnQgaXMgcHJvYmFibHkgbm90IGFuIElQTUkgU01JIGlu dGVyZmFjZS4KIAkJICovCi0JCXJ2ID0gLUVOT0RFVjsKKwkJcmV0dXJuIC1FTk9ERVY7CisK KwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0cnlfZ2V0X2Rldl9pZChzdHJ1Y3Qgc21p X2luZm8gKnNtaV9pbmZvKQoreworCXVuc2lnbmVkIGNoYXIgICAgICAgICBtc2dbMl07CisJ dW5zaWduZWQgY2hhciAgICAgICAgICpyZXNwOworCXVuc2lnbmVkIGxvbmcgICAgICAgICBy ZXNwX2xlbjsKKwlpbnQgICAgICAgICAgICAgICAgICAgcnYgPSAwOworCisJcmVzcCA9IGtt YWxsb2MoSVBNSV9NQVhfTVNHX0xFTkdUSCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZXNwKQor CQlyZXR1cm4gLUVOT01FTTsKKworCS8qCisJICogRG8gYSBHZXQgRGV2aWNlIElEIGNvbW1h bmQsIHNpbmNlIGl0IGNvbWVzIGJhY2sgd2l0aCBzb21lCisJICogdXNlZnVsIGluZm8uCisJ ICovCisJbXNnWzBdID0gSVBNSV9ORVRGTl9BUFBfUkVRVUVTVCA8PCAyOworCW1zZ1sxXSA9 IElQTUlfR0VUX0RFVklDRV9JRF9DTUQ7CisJc21pX2luZm8tPmhhbmRsZXJzLT5zdGFydF90 cmFuc2FjdGlvbihzbWlfaW5mby0+c2lfc20sIG1zZywgMik7CisKKwlydiA9IHdhaXRfZm9y X21zZ19kb25lKHNtaV9pbmZvKTsKKwlpZiAocnYpCiAJCWdvdG8gb3V0OwotCX0KIAotCS8q IE90aGVyd2lzZSwgd2UgZ290IHNvbWUgZGF0YS4gKi8KIAlyZXNwX2xlbiA9IHNtaV9pbmZv LT5oYW5kbGVycy0+Z2V0X3Jlc3VsdChzbWlfaW5mby0+c2lfc20sCiAJCQkJCQkgIHJlc3As IElQTUlfTUFYX01TR19MRU5HVEgpOwogCkBAIC0yNDYyLDYgKzI1MDQsODggQEAKIAlyZXR1 cm4gcnY7CiB9CiAKK3N0YXRpYyBpbnQgdHJ5X2VuYWJsZV9ldmVudF9idWZmZXIoc3RydWN0 IHNtaV9pbmZvICpzbWlfaW5mbykKK3sKKwl1bnNpZ25lZCBjaGFyICAgICAgICAgbXNnWzNd OworCXVuc2lnbmVkIGNoYXIgICAgICAgICAqcmVzcDsKKwl1bnNpZ25lZCBsb25nICAgICAg ICAgcmVzcF9sZW47CisJaW50ICAgICAgICAgICAgICAgICAgIHJ2ID0gMDsKKworCXJlc3Ag PSBrbWFsbG9jKElQTUlfTUFYX01TR19MRU5HVEgsIEdGUF9LRVJORUwpOworCWlmICghcmVz cCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltc2dbMF0gPSBJUE1JX05FVEZOX0FQUF9SRVFV RVNUIDw8IDI7CisJbXNnWzFdID0gSVBNSV9HRVRfQk1DX0dMT0JBTF9FTkFCTEVTX0NNRDsK KwlzbWlfaW5mby0+aGFuZGxlcnMtPnN0YXJ0X3RyYW5zYWN0aW9uKHNtaV9pbmZvLT5zaV9z bSwgbXNnLCAyKTsKKworCXJ2ID0gd2FpdF9mb3JfbXNnX2RvbmUoc21pX2luZm8pOworCWlm IChydikgeworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCSAgICAgICAiaXBtaV9zaTogRXJy b3IgZ2V0dGluZyByZXNwb25zZSBmcm9tIGdldCBnbG9iYWwsIgorCQkgICAgICAgIiBlbmFi bGVzIGNvbW1hbmQsIHRoZSBldmVudCBidWZmZXIgaXMgbm90IgorCQkgICAgICAgIiBlbmFi bGVkLlxuIik7CisJCWdvdG8gb3V0OworCX0KKworCXJlc3BfbGVuID0gc21pX2luZm8tPmhh bmRsZXJzLT5nZXRfcmVzdWx0KHNtaV9pbmZvLT5zaV9zbSwKKwkJCQkJCSAgcmVzcCwgSVBN SV9NQVhfTVNHX0xFTkdUSCk7CisKKwlpZiAocmVzcF9sZW4gPCA0IHx8CisJCQlyZXNwWzBd ICE9IChJUE1JX05FVEZOX0FQUF9SRVFVRVNUIHwgMSkgPDwgMiB8fAorCQkJcmVzcFsxXSAh PSBJUE1JX0dFVF9CTUNfR0xPQkFMX0VOQUJMRVNfQ01EICAgfHwKKwkJCXJlc3BbMl0gIT0g MCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCSAgICAgICAiaXBtaV9zaTogSW52YWxp ZCByZXR1cm4gZnJvbSBnZXQgZ2xvYmFsIgorCQkgICAgICAgIiBlbmFibGVzIGNvbW1hbmQs IGNhbm5vdCBlbmFibGUgdGhlIGV2ZW50IgorCQkgICAgICAgIiBidWZmZXIuXG4iKTsKKwkJ cnYgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAocmVzcFszXSAmIElQTUlf Qk1DX0VWVF9NU0dfQlVGRikKKwkJLyogYnVmZmVyIGlzIGFscmVhZHkgZW5hYmxlZCwgbm90 aGluZyB0byBkby4gKi8KKwkJZ290byBvdXQ7CisKKwltc2dbMF0gPSBJUE1JX05FVEZOX0FQ UF9SRVFVRVNUIDw8IDI7CisJbXNnWzFdID0gSVBNSV9TRVRfQk1DX0dMT0JBTF9FTkFCTEVT X0NNRDsKKwltc2dbMl0gPSByZXNwWzNdIHwgSVBNSV9CTUNfRVZUX01TR19CVUZGOworCXNt aV9pbmZvLT5oYW5kbGVycy0+c3RhcnRfdHJhbnNhY3Rpb24oc21pX2luZm8tPnNpX3NtLCBt c2csIDMpOworCisJcnYgPSB3YWl0X2Zvcl9tc2dfZG9uZShzbWlfaW5mbyk7CisJaWYgKHJ2 KSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJICAgICAgICJpcG1pX3NpOiBFcnJvciBn ZXR0aW5nIHJlc3BvbnNlIGZyb20gc2V0IGdsb2JhbCwiCisJCSAgICAgICAiIGVuYWJsZXMg Y29tbWFuZCwgdGhlIGV2ZW50IGJ1ZmZlciBpcyBub3QiCisJCSAgICAgICAiIGVuYWJsZWQu XG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJcmVzcF9sZW4gPSBzbWlfaW5mby0+aGFuZGxl cnMtPmdldF9yZXN1bHQoc21pX2luZm8tPnNpX3NtLAorCQkJCQkJICByZXNwLCBJUE1JX01B WF9NU0dfTEVOR1RIKTsKKworCWlmIChyZXNwX2xlbiA8IDMgfHwKKwkJCXJlc3BbMF0gIT0g KElQTUlfTkVURk5fQVBQX1JFUVVFU1QgfCAxKSA8PCAyIHx8CisJCQlyZXNwWzFdICE9IElQ TUlfU0VUX0JNQ19HTE9CQUxfRU5BQkxFU19DTUQpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklO RworCQkgICAgICAgImlwbWlfc2k6IEludmFsaWQgcmV0dXJuIGZyb20gZ2V0IGdsb2JhbCwi CisJCSAgICAgICAiZW5hYmxlcyBjb21tYW5kLCBub3QgZW5hYmxlIHRoZSBldmVudCIKKwkJ ICAgICAgICIgYnVmZmVyLlxuIik7CisJCXJ2ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJ fQorCisJaWYgKHJlc3BbMl0gIT0gMCkKKwkJLyoKKwkJICogQW4gZXJyb3Igd2hlbiBzZXR0 aW5nIHRoZSBldmVudCBidWZmZXIgYml0IG1lYW5zCisJCSAqIHRoYXQgdGhlIGV2ZW50IGJ1 ZmZlciBpcyBub3Qgc3VwcG9ydGVkLgorCQkgKi8KKwkJcnYgPSAtRU5PRU5UOworIG91dDoK KwlrZnJlZShyZXNwKTsKKwlyZXR1cm4gcnY7Cit9CisKIHN0YXRpYyBpbnQgdHlwZV9maWxl X3JlYWRfcHJvYyhjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwKIAkJCSAg ICAgICBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQogewpAQCAtMjg0Nyw2ICsy OTcxLDEwIEBACiAJbmV3X3NtaS0+aW50Zl9udW0gPSBzbWlfbnVtOwogCXNtaV9udW0rKzsK IAorCXJ2ID0gdHJ5X2VuYWJsZV9ldmVudF9idWZmZXIobmV3X3NtaSk7CisJaWYgKHJ2ID09 IDApCisJCW5ld19zbWktPmhhc19ldmVudF9idWZmZXIgPSAxOworCiAJLyoKIAkgKiBTdGFy dCBjbGVhcmluZyB0aGUgZmxhZ3MgYmVmb3JlIHdlIGVuYWJsZSBpbnRlcnJ1cHRzIG9yIHRo ZQogCSAqIHRpbWVyIHRvIGF2b2lkIHJhY2luZyB3aXRoIHRoZSB0aW1lci4KQEAgLTI4NjMs NyArMjk5MSw3IEBACiAJCSAqLwogCQluZXdfc21pLT5wZGV2ID0gcGxhdGZvcm1fZGV2aWNl X2FsbG9jKCJpcG1pX3NpIiwKIAkJCQkJCSAgICAgIG5ld19zbWktPmludGZfbnVtKTsKLQkJ aWYgKHJ2KSB7CisJCWlmICghbmV3X3NtaS0+cGRldikgewogCQkJcHJpbnRrKEtFUk5fRVJS CiAJCQkgICAgICAgImlwbWlfc2lfaW50ZjoiCiAJCQkgICAgICAgIiBVbmFibGUgdG8gYWxs b2NhdGUgcGxhdGZvcm0gZGV2aWNlXG4iKTsKZGlmZiAtdSAtLW5ldy1maWxlIC0tcmVjdXJz aXZlIGxpbnV4LTIuNi4yOS42Lm9yaWcvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9zbWIuYyBs aW51eC0yLjYuMjkuNi5tb2QvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9zbWIuYwotLS0gbGlu dXgtMi42LjI5LjYub3JpZy9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX3NtYi5jCTE5NjktMTIt MzEgMTc6MDA6MDAuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYuMjkuNi5tb2QvZHJp dmVycy9jaGFyL2lwbWkvaXBtaV9zbWIuYwkyMDA5LTA3LTIxIDExOjI4OjE4LjAwMDAwMDAw MCAtMDcwMApAQCAtMCwwICsxLDE4NTkgQEAKKy8qCisgKiBpcG1pX3NtYi5jCisgKgorICog VGhlIGludGVyZmFjZSB0byB0aGUgSVBNSSBkcml2ZXIgZm9yIFNNQnVzIGFjY2VzcyB0byBh IFNNQnVzCisgKiBjb21wbGlhbnQgZGV2aWNlLgorICoKKyAqIEF1dGhvcjogSW50ZWwgQ29y cG9yYXRpb24KKyAqICAgICAgICAgVG9kZCBEYXZpcyA8dG9kZC5jLmRhdmlzQGludGVsLmNv bT4KKyAqCisgKiBSZXdyaXR0ZW4gYnkgQ29yZXkgTWlueWFyZCA8bWlueWFyZEBhY20ub3Jn PiB0byBzdXBwb3J0IHRoZQorICogbm9uLWJsb2NraW5nIEkyQyBpbnRlcmZhY2UsIGFkZCBz dXBwb3J0IGZvciBtdWx0aS1wYXJ0CisgKiB0cmFuc2FjdGlvbnMsIGFkZCBQRUMgc3VwcG9y dCwgYW5kIGdlbmVyYWwgY2xlbmF1cC4KKyAqCisgKiBDb3B5cmlnaHQgMjAwMyBJbnRlbCBD b3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IDIwMDUgTW9udGFWaXN0YSBTb2Z0d2FyZQorICoK KyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg b3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqCisg KiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNT IE9SIElNUExJRUQKKyAqICBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogIE1FUkNIQU5UQUJJTElUWSBB TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisg KiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF Q1QsIElORElSRUNULAorICogIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiAgQlVUIE5PVCBMSU1JVEVE IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT CisgKiAgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ T04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgorICogIFRPUlQg KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ IE9VVCBPRiBUSEUKKyAqICBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiAgWW91IHNob3Vs ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgYWxvbmcKKyAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogIDY3NSBNYXNzIEF2ZSwgQ2Ft YnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKy8qCisgKiBUaGlzIGZpbGUgaG9sZHMg dGhlICJwb2xpY3kiIGZvciB0aGUgaW50ZXJmYWNlIHRvIHRoZSBTTUIgc3RhdGUKKyAqIG1h Y2hpbmUuICBJdCBkb2VzIHRoZSBjb25maWd1cmF0aW9uLCBoYW5kbGVzIHRpbWVycyBhbmQg aW50ZXJydXB0cywKKyAqIGFuZCBkcml2ZXMgdGhlIHJlYWwgU01CIHN0YXRlIG1hY2hpbmUu CisgKi8KKworLyoKKyAqIFRPRE86IEZpZ3VyZSBvdXQgaG93IHRvIHVzZSBTTUIgYWxlcnRz LiAgVGhpcyB3aWxsIHJlcXVpcmUgYSBuZXcKKyAqIGludGVyZmFjZSBpbnRvIHRoZSBJMkMg ZHJpdmVyLCBJIGJlbGlldmUuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4K KyNpZiBkZWZpbmVkKE1PRFZFUlNJT05TKQorI2luY2x1ZGUgPGxpbnV4L21vZHZlcnNpb25z Lmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxp bnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUg PGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxs aW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8 bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGlu dXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2lw bWlfc21pLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Rt aS5oPgorCisjZGVmaW5lIFBGWCAiaXBtaV9zbWI6ICIKKworI2RlZmluZSBJUE1JX0dFVF9T WVNURU1fSU5URVJGQUNFX0NBUEFCSUxJVElFU19DTUQJMHg1NworCisjZGVmaW5lCVNNQl9J UE1JX1JFUVVFU1QJCQkyCisjZGVmaW5lCVNNQl9JUE1JX01VTFRJX1BBUlRfUkVRVUVTVF9T VEFSVAk2CisjZGVmaW5lCVNNQl9JUE1JX01VTFRJX1BBUlRfUkVRVUVTVF9NSURETEUJNwor I2RlZmluZQlTTUJfSVBNSV9SRVNQT05TRQkJCTMKKyNkZWZpbmUJU01CX0lQTUlfTVVMVElf UEFSVF9SRVNQT05TRV9NSURETEUJOQorCisvKiBzbWJfZGVidWcgaXMgYSBiaXQtZmllbGQK KyAqCVNNQl9ERUJVR19NU0cgLQljb21tYW5kcyBhbmQgdGhlaXIgcmVzcG9uc2VzCisgKglT TUJfREVCVUdfU1RBVEVTIC0JbWVzc2FnZSBzdGF0ZXMKKyAqCVNNQl9ERUJVR19USU1JTkcg LQkgTWVhc3VyZSB0aW1lcyBiZXR3ZWVuIGV2ZW50cyBpbiB0aGUgZHJpdmVyCisgKi8KKyNk ZWZpbmUgU01CX0RFQlVHX1RJTUlORwk0CisjZGVmaW5lIFNNQl9ERUJVR19TVEFURQkJMgor I2RlZmluZSBTTUJfREVCVUdfTVNHCQkxCisjZGVmaW5lIFNNQl9OT0RFQlVHCQkxCisjZGVm aW5lIFNNQl9ERUZBVUxUX0RFQlVHCShTTUJfTk9ERUJVRykKKworLyoKKyAqIFRpbWVyIHZh bHVlcworICovCisjZGVmaW5lIFNNQl9NU0dfVVNFQwkJMjAwMDAJLyogMjBtcyBiZXR3ZWVu IG1lc3NhZ2UgdHJpZXMuICovCisjZGVmaW5lIFNNQl9NU0dfUEFSVF9VU0VDCTUwMDAJLyog NW1zIGZvciBhIG1lc3NhZ2UgcGFydCAqLworCisvKiBIb3cgbWFueSB0aW1lcyB0byB3ZSBy ZXRyeSBzZW5kaW5nL3JlY2VpdmluZyB0aGUgbWVzc2FnZS4gKi8KKyNkZWZpbmUJU01CX1NF TkRfUkVUUklFUwk1CisjZGVmaW5lCVNNQl9SRUNWX1JFVFJJRVMJMjUwCisKKyNkZWZpbmUg U01CX01TR19NU0VDCQkoU01CX01TR19VU0VDIC8gMTAwMCkKKyNkZWZpbmUgU01CX01TR19K SUZGSUVTCQkoKFNNQl9NU0dfVVNFQyAqIDEwMDApIC8gVElDS19OU0VDKQorI2RlZmluZSBT TUJfTVNHX1BBUlRfSklGRklFUwkoKFNNQl9NU0dfUEFSVF9VU0VDICogMTAwMCkgLyBUSUNL X05TRUMpCisKK2VudW0gc21iX2ludGZfc3RhdGUgeworCVNNQl9OT1JNQUwsCisJU01CX0dF VFRJTkdfRkxBR1MsCisJU01CX0dFVFRJTkdfRVZFTlRTLAorCVNNQl9DTEVBUklOR19GTEFH UywKKwlTTUJfR0VUVElOR19NRVNTQUdFUywKKwkvKiBGSVhNRSAtIGFkZCB3YXRjaGRvZyBz dHVmZi4gKi8KK307CisKKyNkZWZpbmUgU01CX0lETEUoc21iKQkgKChzbWIpLT5zbWJfc3Rh dGUgPT0gU01CX05PUk1BTCBcCisJCQkgICYmIChzbWIpLT5jdXJyX21zZyA9PSBOVUxMKQor CisvKgorICogSW5kZXhlcyBpbnRvIHN0YXRzW10gaW4gc21iX2luZm8gYmVsb3cuCisgKi8K K2VudW0gc21iX3N0YXRfaW5kZXhlcyB7CisJLyogTnVtYmVyIG9mIHRvdGFsIG1lc3NhZ2Vz IHNlbnQuICovCisJU01CX1NUQVRfc2VudF9tZXNzYWdlcyA9IDAsCisKKwkvKgorCSAqIE51 bWJlciBvZiBtZXNzYWdlIHBhcnRzIHNlbnQuICBNZXNzYWdlcyBtYXkgYmUgYnJva2VuIGlu dG8KKwkgKiBwYXJ0cyBpZiB0aGV5IGFyZSBsb25nLgorCSAqLworCVNNQl9TVEFUX3NlbnRf bWVzc2FnZXNfcGFydHMsCisKKwkvKgorCSAqIE51bWJlciBvZiB0aW1lIGEgbWVzc2FnZSB3 YXMgcmV0cmllZC4KKwkgKi8KKwlTTUJfU1RBVF9zZW5kX3JldHJpZXMsCisKKwkvKgorCSAq IE51bWJlciBvZiB0aW1lcyB0aGUgc2VuZCBvZiBhIG1lc3NhZ2UgZmFpbGVkLgorCSAqLwor CVNNQl9TVEFUX3NlbmRfZXJyb3JzLAorCisJLyoKKwkgKiBOdW1iZXIgb2YgbWVzc2FnZSBy ZXNwb25zZXMgcmVjZWl2ZWQuCisJICovCisJU01CX1NUQVRfcmVjZWl2ZWRfbWVzc2FnZXMs CisKKwkvKgorCSAqIE51bWJlciBvZiBtZXNzYWdlIGZyYWdtZW50cyByZWNlaXZlZC4KKwkg Ki8KKwlTTUJfU1RBVF9yZWNlaXZlZF9tZXNzYWdlX3BhcnRzLAorCisJLyoKKwkgKiBOdW1i ZXIgb2YgdGltZXMgdGhlIHJlY2VpdmUgb2YgYSBtZXNzYWdlIHdhcyByZXRyaWVkLgorCSAq LworCVNNQl9TVEFUX3JlY2VpdmVfcmV0cmllcywKKworCS8qCisJICogTnVtYmVyIG9mIGVy cm9ycyByZWNlaXZpbmcgbWVzc2FnZXMuCisJICovCisJU01CX1NUQVRfcmVjZWl2ZV9lcnJv cnMsCisKKwkvKgorCSAqIE51bWJlciBvZiB0aW1lcyBhIGZsYWcgZmV0Y2ggd2FzIHJlcXVl c3RlZC4KKwkgKi8KKwlTTUJfU1RBVF9mbGFnX2ZldGNoZXMsCisKKwkvKgorCSAqIE51bWJl ciBvZiB0aW1lcyB0aGUgaGFyZHdhcmUgZGlkbid0IGZvbGxvdyB0aGUgc3RhdGUgbWFjaGlu ZS4KKwkgKi8KKwlTTUJfU1RBVF9ob3NlZCwKKworCS8qCisJICogTnVtYmVyIG9mIHJlY2Vp dmVkIGV2ZW50cy4KKwkgKi8KKwlTTUJfU1RBVF9ldmVudHMsCisKKwkvKiBOdW1iZXIgb2Yg YXN5bmNyb25vdXMgbWVzc2FnZXMgcmVjZWl2ZWQuICovCisJU01CX1NUQVRfaW5jb21pbmdf bWVzc2FnZXMsCisKKwkvKiBBbHdheXMgYWRkIHN0YXRpc3RpY3MgYmVmb3JlIHRoaXMgdmFs dWUsIGl0IG11c3QgYmUgbGFzdC4gKi8KKwlTTUJfTlVNX1NUQVRTCit9OworCitzdHJ1Y3Qg c21iX2luZm8geworCWludCAgICAgICAgICAgICAgICAgcG9zOworCWlwbWlfc21pX3QgICAg ICAgICAgaW50ZjsKKwlzcGlubG9ja190ICAgICAgICAgIG1zZ19sb2NrOworCXN0cnVjdCBs aXN0X2hlYWQgICAgeG1pdF9tc2dzOworCXN0cnVjdCBsaXN0X2hlYWQgICAgaHBfeG1pdF9t c2dzOworCXN0cnVjdCBpcG1pX3NtaV9tc2cgKmN1cnJfbXNnOworCWVudW0gc21iX2ludGZf c3RhdGUgc21iX3N0YXRlOworCXVuc2lnbmVkIGxvbmcgICAgICAgc21iX2RlYnVnOworCisJ LyoKKwkgKiBGbGFncyBmcm9tIHRoZSBsYXN0IEdFVF9NU0dfRkxBR1MgY29tbWFuZCwgdXNl ZCB3aGVuIGFuIEFUVE4KKwkgKiBpcyBzZXQgdG8gaG9sZCB0aGUgZmxhZ3MgdW50aWwgd2Ug YXJlIGRvbmUgaGFuZGxpbmcgZXZlcnl0aGluZworCSAqIGZyb20gdGhlIGZsYWdzLgorCSAq LworI2RlZmluZSBSRUNFSVZFX01TR19BVkFJTAkweDAxCisjZGVmaW5lIEVWRU5UX01TR19C VUZGRVJfRlVMTAkweDAyCisjZGVmaW5lIFdEVF9QUkVfVElNRU9VVF9JTlQJMHgwOAorCXVu c2lnbmVkIGNoYXIgICAgICAgbXNnX2ZsYWdzOworCisJY2hhcgkJICAgIGhhc19ldmVudF9i dWZmZXI7CisKKwkvKgorCSAqIElmIHNldCB0byB0cnVlLCB0aGlzIHdpbGwgcmVxdWVzdCBl dmVudHMgdGhlIG5leHQgdGltZSB0aGUKKwkgKiBzdGF0ZSBtYWNoaW5lIGlzIGlkbGUuCisJ ICovCisJaW50ICAgICAgICAgICAgICAgICByZXFfZXZlbnRzOworCisJLyoKKwkgKiBJZiBz ZXQgdG8gdHJ1ZSwgdGhpcyB3aWxsIHJlcXVlc3QgZmxhZ3MgdGhlIG5leHQgdGltZSB0aGUK KwkgKiBzdGF0ZSBtYWNoaW5lIGlzIGlkbGUuCisJICovCisJaW50ICAgICAgICAgICAgICAg ICByZXFfZmxhZ3M7CisKKwkvKgorCSAqIElmIHRydWUsIHJ1biB0aGUgc3RhdGUgbWFjaGlu ZSB0byBjb21wbGV0aW9uIG9uIGV2ZXJ5IHNlbmQKKwkgKiBjYWxsLiAgR2VuZXJhbGx5IHVz ZWQgYWZ0ZXIgYSBwYW5pYyBvciBzaHV0ZG93biB0byBtYWtlCisJICogc3VyZSBzdHVmZiBn b2VzIG91dC4KKwkgKi8KKwlpbnQgICAgICAgICAgICAgICAgIHJ1bl90b19jb21wbGV0aW9u OworCisJLyoKKwkgKiBVc2VkIHRvIHBlcmZvcm0gdGltZXIgb3BlcmF0aW9ucyB3aGVuIHJ1 bi10by1jb21wbGV0aW9uCisJICogbW9kZSBpcyBvbi4gIFRoaXMgaXMgYSBjb3VudGRvd24g dGltZXIuCisJICovCisJaW50ICAgICAgICAgICAgICAgICBydGNfdXNfdGltZXI7CisKKwkv KiBVc2VkIGZvciBzZW5kaW5nL3JlY2VpdmluZyBkYXRhLiAgKzEgZm9yIHRoZSBsZW5ndGgu ICovCisJdW5zaWduZWQgY2hhciBkYXRhW0lQTUlfTUFYX01TR19MRU5HVEggKyAxXTsKKwl1 bnNpZ25lZCBpbnQgIGRhdGFfbGVuOworCisJLyogVGVtcCByZWNlaXZlIGJ1ZmZlciwgZ2V0 cyBjb3BpZWQgaW50byBkYXRhLiAqLworCXVuc2lnbmVkIGNoYXIgcmVjdltJMkNfU01CVVNf QkxPQ0tfTUFYXTsKKworCXN0cnVjdCBpMmNfY2xpZW50IGNsaWVudDsKKwlzdHJ1Y3QgaTJj X29wX3FfZW50cnkgaTJjX3FfZW50cnk7CisKKwkvKiBGcm9tIHRoZSBkZXZpY2UgaWQgcmVz cG9uc2UuICovCisJc3RydWN0IGlwbWlfZGV2aWNlX2lkIGRldmljZV9pZDsKKworCS8qIElz IHRoZSBkcml2ZXIgdHJ5aW5nIHRvIHN0b3A/ICovCisJaW50IHN0b3BwaW5nOworCisJc3Ry dWN0IHRpbWVyX2xpc3QgcmV0cnlfdGltZXI7CisJaW50IHJldHJpZXNfbGVmdDsKKworCS8q IEluZm8gZnJvbSBTU0lGIGNtZCAqLworCXVuc2lnbmVkIGNoYXIgbWF4X3htaXRfbXNnX3Np emU7CisJdW5zaWduZWQgY2hhciBtYXhfcmVjdl9tc2dfc2l6ZTsKKwl1bnNpZ25lZCBpbnQg IG11bHRpX3N1cHBvcnQ7CisJaW50ICAgICAgICAgICBzdXBwb3J0c19wZWM7CisKKyNkZWZp bmUgU01CX05PX01VTFRJCQkwCisjZGVmaW5lIFNNQl9NVUxUSV8yX1BBUlQJMQorI2RlZmlu ZSBTTUJfTVVMVElfbl9QQVJUCTIKKwl1bnNpZ25lZCBjaGFyICptdWx0aV9kYXRhOworCXVu c2lnbmVkIGludCAgbXVsdGlfbGVuOworCXVuc2lnbmVkIGludCAgbXVsdGlfcG9zOworCisJ YXRvbWljX3Qgc3RhdHNbU01CX05VTV9TVEFUU107Cit9OworCisjZGVmaW5lIHNtYl9pbmNf c3RhdChzbWIsIHN0YXQpIFwKKwlhdG9taWNfaW5jKCYoc21iKS0+c3RhdHNbU01CX1NUQVRf ICMjIHN0YXRdKQorI2RlZmluZSBzbWJfZ2V0X3N0YXQoc21iLCBzdGF0KSBcCisJKCh1bnNp Z25lZCBpbnQpIGF0b21pY19yZWFkKCYoc21iKS0+c3RhdHNbU01CX1NUQVRfICMjIHN0YXRd KSkKKworc3RhdGljIGludCBpbml0aWFsaXplZDsKK3N0YXRpYyBpbnQgc21iX2RiZ19wcm9i ZTsKKworc3RhdGljIHZvaWQgcmV0dXJuX2hvc2VkX21zZyhzdHJ1Y3Qgc21iX2luZm8gKnNt Yl9pbmZvLAorCQkJICAgICBzdHJ1Y3QgaXBtaV9zbWlfbXNnICptc2cpOworc3RhdGljIHZv aWQgc3RhcnRfbmV4dF9tc2coc3RydWN0IHNtYl9pbmZvICpzbWJfaW5mbywgdW5zaWduZWQg bG9uZyAqZmxhZ3MpOworc3RhdGljIGludCBzdGFydF9zZW5kKHN0cnVjdCBzbWJfaW5mbyAq c21iX2luZm8sCisJCSAgICAgIHVuc2lnbmVkIGNoYXIgICAqZGF0YSwKKwkJICAgICAgdW5z aWduZWQgaW50ICAgIGxlbik7CisKKy8qCisgKiBJZiBydW5fdG9fY29tcGxldGlvbiBtb2Rl IGlzIG9uLCByZXR1cm4gTlVMTCB0byBrbm93IHRoZSBsb2NrIHdhc24ndAorICogdGFrZW4u ICBPdGhlcndpc2UgbG9jayBpbmZvLT5sb2NrIGFuZCByZXR1cm4gdGhlIGZsYWdzLgorICov CitzdGF0aWMgdW5zaWduZWQgbG9uZyAqaXBtaV9zbWJfbG9ja19jb25kKHN0cnVjdCBzbWJf aW5mbyAqc21iX2luZm8sCisJCQkJCSB1bnNpZ25lZCBsb25nICpmbGFncykKK3sKKwlpZiAo c21iX2luZm8tPnJ1bl90b19jb21wbGV0aW9uKQorCQlyZXR1cm4gTlVMTDsKKwlzcGluX2xv Y2tfaXJxc2F2ZSgmc21iX2luZm8tPm1zZ19sb2NrLCAqZmxhZ3MpOworCXJldHVybiBmbGFn czsKK30KKworc3RhdGljIHZvaWQgaXBtaV9zbWJfdW5sb2NrX2NvbmQoc3RydWN0IHNtYl9p bmZvICpzbWJfaW5mbywKKwkJCQkgdW5zaWduZWQgbG9uZyAqZmxhZ3MpCit7CisJaWYgKCFm bGFncykKKwkJcmV0dXJuOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNtYl9pbmZvLT5t c2dfbG9jaywgKmZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgZGVsaXZlcl9yZWN2X21zZyhz dHJ1Y3Qgc21iX2luZm8gKnNtYl9pbmZvLAorCQkJICAgICBzdHJ1Y3QgaXBtaV9zbWlfbXNn ICptc2cpCit7CisJaXBtaV9zbWlfdCAgICBpbnRmID0gc21iX2luZm8tPmludGY7CisKKwlp ZiAoIWludGYgfHwgKG1zZy0+cnNwX3NpemUgPCAwKSkgeworCQlyZXR1cm5faG9zZWRfbXNn KHNtYl9pbmZvLCBtc2cpOworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJtYWxmb3Jt ZWQgbWVzc2FnZSBpbiBkZWxpdmVyX3JlY3ZfbXNnOiIKKwkJICAgICAgICIgcnNwX3NpemUg PSAlZFxuIiwgbXNnLT5yc3Bfc2l6ZSk7CisJCWlwbWlfZnJlZV9zbWlfbXNnKG1zZyk7CisJ fSBlbHNlIHsKKwkJaXBtaV9zbWlfbXNnX3JlY2VpdmVkKGludGYsIG1zZyk7CisJfQorfQor CitzdGF0aWMgdm9pZCByZXR1cm5faG9zZWRfbXNnKHN0cnVjdCBzbWJfaW5mbyAqc21iX2lu Zm8sCisJCQkgICAgIHN0cnVjdCBpcG1pX3NtaV9tc2cgKm1zZykKK3sKKwlzbWJfaW5jX3N0 YXQoc21iX2luZm8sIGhvc2VkKTsKKworCS8qIE1ha2UgaXQgYSByZXNwb25zZSAqLworCW1z Zy0+cnNwWzBdID0gbXNnLT5kYXRhWzBdIHwgNDsKKwltc2ctPnJzcFsxXSA9IG1zZy0+ZGF0 YVsxXTsKKwltc2ctPnJzcFsyXSA9IDB4RkY7IC8qIFVua25vd24gZXJyb3IuICovCisJbXNn LT5yc3Bfc2l6ZSA9IDM7CisKKwlkZWxpdmVyX3JlY3ZfbXNnKHNtYl9pbmZvLCBtc2cpOwor fQorCisvKgorICogTXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbWVzc2FnZSBsb2NrIGhlbGQu ICBUaGlzIHdpbGwgcmVsZWFzZSB0aGUKKyAqIG1lc3NhZ2UgbG9jay4gIE5vdGUgdGhhdCB0 aGUgY2FsbGVyIHdpbGwgY2hlY2sgU01CX0lETEUgYW5kIHN0YXJ0IGEKKyAqIG5ldyBvcGVy YXRpb24sIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gY2hlY2sgZm9yIG5ldyBtZXNzYWdlcyB0 bworICogc3RhcnQgaW4gaGVyZS4KKyAqLworc3RhdGljIHZvaWQgc3RhcnRfY2xlYXJfZmxh Z3Moc3RydWN0IHNtYl9pbmZvICpzbWJfaW5mbywgdW5zaWduZWQgbG9uZyAqZmxhZ3MpCit7 CisJdW5zaWduZWQgY2hhciBtc2dbM107CisKKwlzbWJfaW5mby0+bXNnX2ZsYWdzICY9IH5X RFRfUFJFX1RJTUVPVVRfSU5UOworCXNtYl9pbmZvLT5zbWJfc3RhdGUgPSBTTUJfQ0xFQVJJ TkdfRkxBR1M7CisJaXBtaV9zbWJfdW5sb2NrX2NvbmQoc21iX2luZm8sIGZsYWdzKTsKKwor CS8qIE1ha2Ugc3VyZSB0aGUgd2F0Y2hkb2cgcHJlLXRpbWVvdXQgZmxhZyBpcyBub3Qgc2V0 IGF0IHN0YXJ0dXAuICovCisJbXNnWzBdID0gKElQTUlfTkVURk5fQVBQX1JFUVVFU1QgPDwg Mik7CisJbXNnWzFdID0gSVBNSV9DTEVBUl9NU0dfRkxBR1NfQ01EOworCW1zZ1syXSA9IFdE VF9QUkVfVElNRU9VVF9JTlQ7CisKKwlpZiAoc3RhcnRfc2VuZChzbWJfaW5mbywgbXNnLCAz KSAhPSAwKSB7CisJCS8qIEVycm9yLCBqdXN0IGdvIHRvIG5vcm1hbCBzdGF0ZS4gKi8KKwkJ c21iX2luZm8tPnNtYl9zdGF0ZSA9IFNNQl9OT1JNQUw7CisJfQorfQorCitzdGF0aWMgdm9p ZCBzdGFydF9mbGFnX2ZldGNoKHN0cnVjdCBzbWJfaW5mbyAqc21iX2luZm8sIHVuc2lnbmVk IGxvbmcgKmZsYWdzKQoreworCXVuc2lnbmVkIGNoYXIgbWJbMl07CisKKwlzbWJfaW5mby0+ cmVxX2ZsYWdzID0gMDsKKwlzbWJfaW5mby0+c21iX3N0YXRlID0gU01CX0dFVFRJTkdfRkxB R1M7CisJaXBtaV9zbWJfdW5sb2NrX2NvbmQoc21iX2luZm8sIGZsYWdzKTsKKworCW1iWzBd ID0gKElQTUlfTkVURk5fQVBQX1JFUVVFU1QgPDwgMik7CisJbWJbMV0gPSBJUE1JX0dFVF9N U0dfRkxBR1NfQ01EOworCWlmIChzdGFydF9zZW5kKHNtYl9pbmZvLCBtYiwgMikgIT0gMCkK KwkJc21iX2luZm8tPnNtYl9zdGF0ZSA9IFNNQl9OT1JNQUw7Cit9CisKK3N0YXRpYyB2b2lk IHN0YXJ0X2V2ZW50X2ZldGNoKHN0cnVjdCBzbWJfaW5mbyAqc21iX2luZm8sIHVuc2lnbmVk IGxvbmcgKmZsYWdzKQoreworCXN0cnVjdCBpcG1pX3NtaV9tc2cgKm1zZzsKKworCXNtYl9p bmZvLT5yZXFfZXZlbnRzID0gMDsKKworCW1zZyA9IGlwbWlfYWxsb2Nfc21pX21zZygpOwor CWlmICghbXNnKSB7CisJCXNtYl9pbmZvLT5zbWJfc3RhdGUgPSBTTUJfTk9STUFMOworCQly ZXR1cm47CisJfQorCisJc21iX2luZm8tPmN1cnJfbXNnID0gbXNnOworCXNtYl9pbmZvLT5z bWJfc3RhdGUgPSBTTUJfR0VUVElOR19FVkVOVFM7CisJaXBtaV9zbWJfdW5sb2NrX2NvbmQo c21iX2luZm8sIGZsYWdzKTsKKworCW1zZy0+ZGF0YVswXSA9IChJUE1JX05FVEZOX0FQUF9S RVFVRVNUIDw8IDIpOworCW1zZy0+ZGF0YVsxXSA9IElQTUlfUkVBRF9FVkVOVF9NU0dfQlVG RkVSX0NNRDsKKwltc2ctPmRhdGFfc2l6ZSA9IDI7CisKKwlpZiAoc3RhcnRfc2VuZChzbWJf aW5mbywgbXNnLT5kYXRhLCBtc2ctPmRhdGFfc2l6ZSkgIT0gMCkgeworCQl1bnNpZ25lZCBs b25nIG9mbGFnczsKKwkJZmxhZ3MgPSBpcG1pX3NtYl9sb2NrX2NvbmQoc21iX2luZm8sICZv ZmxhZ3MpOworCQlzbWJfaW5mby0+Y3Vycl9tc2cgPSBOVUxMOworCQlzbWJfaW5mby0+c21i X3N0YXRlID0gU01CX05PUk1BTDsKKwkJaXBtaV9zbWJfdW5sb2NrX2NvbmQoc21iX2luZm8s IGZsYWdzKTsKKwkJaXBtaV9mcmVlX3NtaV9tc2cobXNnKTsKKwl9Cit9CisKK3N0YXRpYyB2 b2lkIHN0YXJ0X3JlY3ZfbXNnX2ZldGNoKHN0cnVjdCBzbWJfaW5mbyAqc21iX2luZm8sCisJ CQkJIHVuc2lnbmVkIGxvbmcgKmZsYWdzKQoreworCXN0cnVjdCBpcG1pX3NtaV9tc2cgKm1z ZzsKKworCW1zZyA9IGlwbWlfYWxsb2Nfc21pX21zZygpOworCWlmICghbXNnKSB7CisJCXNt Yl9pbmZvLT5zbWJfc3RhdGUgPSBTTUJfTk9STUFMOworCQlyZXR1cm47CisJfQorCisJc21i X2luZm8tPmN1cnJfbXNnID0gbXNnOworCXNtYl9pbmZvLT5zbWJfc3RhdGUgPSBTTUJfR0VU VElOR19NRVNTQUdFUzsKKwlpcG1pX3NtYl91bmxvY2tfY29uZChzbWJfaW5mbywgZmxhZ3Mp OworCisJbXNnLT5kYXRhWzBdID0gKElQTUlfTkVURk5fQVBQX1JFUVVFU1QgPDwgMik7CisJ bXNnLT5kYXRhWzFdID0gSVBNSV9HRVRfTVNHX0NNRDsKKwltc2ctPmRhdGFfc2l6ZSA9IDI7 CisKKwlpZiAoc3RhcnRfc2VuZChzbWJfaW5mbywgbXNnLT5kYXRhLCBtc2ctPmRhdGFfc2l6 ZSkgIT0gMCkgeworCQl1bnNpZ25lZCBsb25nIG9mbGFnczsKKwkJZmxhZ3MgPSBpcG1pX3Nt Yl9sb2NrX2NvbmQoc21iX2luZm8sICZvZmxhZ3MpOworCQlzbWJfaW5mby0+Y3Vycl9tc2cg PSBOVUxMOworCQlzbWJfaW5mby0+c21iX3N0YXRlID0gU01CX05PUk1BTDsKKwkJaXBtaV9z bWJfdW5sb2NrX2NvbmQoc21iX2luZm8sIGZsYWdzKTsKKwkJaXBtaV9mcmVlX3NtaV9tc2co bXNnKTsKKwl9Cit9CisKKy8qCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBtZXNzYWdl IGxvY2sgaGVsZC4gIFRoaXMgd2lsbCByZWxlYXNlIHRoZQorICogbWVzc2FnZSBsb2NrLiAg Tm90ZSB0aGF0IHRoZSBjYWxsZXIgd2lsbCBjaGVjayBTTUJfSURMRSBhbmQgc3RhcnQgYQor ICogbmV3IG9wZXJhdGlvbiwgc28gdGhlcmUgaXMgbm8gbmVlZCB0byBjaGVjayBmb3IgbmV3 IG1lc3NhZ2VzIHRvCisgKiBzdGFydCBpbiBoZXJlLgorICovCitzdGF0aWMgdm9pZCBoYW5k bGVfZmxhZ3Moc3RydWN0IHNtYl9pbmZvICpzbWJfaW5mbywgdW5zaWduZWQgbG9uZyAqZmxh Z3MpCit7CisJaWYgKHNtYl9pbmZvLT5tc2dfZmxhZ3MgJiBXRFRfUFJFX1RJTUVPVVRfSU5U KQorCQkvKiBXYXRjaGRvZyBwcmUtdGltZW91dCAqLworCQlzdGFydF9jbGVhcl9mbGFncyhz bWJfaW5mbywgZmxhZ3MpOworCWVsc2UgaWYgKHNtYl9pbmZvLT5tc2dfZmxhZ3MgJiBSRUNF SVZFX01TR19BVkFJTCkKKwkJLyogTWVzc2FnZXMgYXZhaWxhYmxlLiAqLworCQlzdGFydF9y ZWN2X21zZ19mZXRjaChzbWJfaW5mbywgZmxhZ3MpOworCWVsc2UgaWYgKHNtYl9pbmZvLT5t c2dfZmxhZ3MgJiBFVkVOVF9NU0dfQlVGRkVSX0ZVTEwpCisJCS8qIEV2ZW50cyBhdmFpbGFi bGUuICovCisJCXN0YXJ0X2V2ZW50X2ZldGNoKHNtYl9pbmZvLCBmbGFncyk7CisJZWxzZSB7 CisJCXNtYl9pbmZvLT5zbWJfc3RhdGUgPSBTTUJfTk9STUFMOworCQlpcG1pX3NtYl91bmxv Y2tfY29uZChzbWJfaW5mbywgZmxhZ3MpOworCX0KK30KKworc3RhdGljIHZvaWQgbXNnX2Rv bmVfaGFuZGxlcihzdHJ1Y3QgaTJjX29wX3FfZW50cnkgKmkyY2UpOworc3RhdGljIHZvaWQg cmV0cnlfdGltZW91dCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IHNtYl9pbmZv ICAgICAqc21iX2luZm8gPSAodm9pZCAqKSBkYXRhOworCXN0cnVjdCBpMmNfb3BfcV9lbnRy eSAqaTJjZTsKKworCXNtYl9pbmZvLT5ydGNfdXNfdGltZXIgPSAwOworCisJaTJjZSA9ICZz bWJfaW5mby0+aTJjX3FfZW50cnk7CisJaTJjZS0+eGZlcl90eXBlID0gSTJDX09QX1NNQlVT OworCWkyY2UtPmhhbmRsZXIgPSBtc2dfZG9uZV9oYW5kbGVyOworCWkyY2UtPmhhbmRsZXJf ZGF0YSA9IHNtYl9pbmZvOworCWkyY2UtPnNtYnVzLnJlYWRfd3JpdGUgPSBJMkNfU01CVVNf UkVBRDsKKwlpMmNlLT5zbWJ1cy5jb21tYW5kID0gU01CX0lQTUlfUkVTUE9OU0U7CisJaTJj ZS0+c21idXMuZGF0YSA9ICh1bmlvbiBpMmNfc21idXNfZGF0YSAqKSBzbWJfaW5mby0+cmVj djsKKwlpMmNlLT5zbWJ1cy5zaXplID0gSTJDX1NNQlVTX0JMT0NLX0RBVEE7CisKKwlpZiAo aTJjX25vbl9ibG9ja2luZ19vcCgmc21iX2luZm8tPmNsaWVudCwgaTJjZSkpIHsKKwkJLyog cmVxdWVzdCBmYWlsZWQsIGp1c3QgcmV0dXJuIHRoZSBlcnJvci4gKi8KKwkJaWYgKHNtYl9p bmZvLT5zbWJfZGVidWcgJiBTTUJfREVCVUdfTVNHKSB7CisJCQlwcmludGsoS0VSTl9JTkZP CisJCQkgICAgICAgIkVycm9yIGZyb20gaTJjX25vbl9ibG9ja2luZ19vcCg1KVxuIik7CisJ CX0KKwkJaTJjZS0+cmVzdWx0ID0gLUVJTzsKKwkJbXNnX2RvbmVfaGFuZGxlcihpMmNlKTsK Kwl9Cit9CisKK3N0YXRpYyBpbnQgc3RhcnRfcmVzZW5kKHN0cnVjdCBzbWJfaW5mbyAqc21i X2luZm8pOworc3RhdGljIHZvaWQgbXNnX2RvbmVfaGFuZGxlcihzdHJ1Y3QgaTJjX29wX3Ff ZW50cnkgKmkyY2UpCit7CisJc3RydWN0IHNtYl9pbmZvICAgICAqc21iX2luZm8gPSBpMmNl LT5oYW5kbGVyX2RhdGE7CisJdW5zaWduZWQgY2hhciAgICAgICAqZGF0YSA9IHNtYl9pbmZv LT5yZWN2OworCWludCAgICAgICAgICAgICAgICAgbGVuOworCWludCAgICAgICAgICAgICAg ICAgcmVzdWx0ID0gaTJjZS0+cmVzdWx0OworCXN0cnVjdCBpcG1pX3NtaV9tc2cgKm1zZzsK Kwl1bnNpZ25lZCBsb25nICAgICAgIG9mbGFncywgKmZsYWdzOworCisJLyoKKwkgKiBXZSBh cmUgc2luZ2xlLXRocmVhZGVkIGhlcmUsIHNvIG5vIG5lZWQgZm9yIGEgbG9jayB1bnRpbCB3 ZQorCSAqIHN0YXJ0IG1lc3Npbmcgd2l0aCBkcml2ZXIgc3RhdGVzIG9yIHRoZSBxdWV1ZXMu CisJICovCisKKwlpZiAocmVzdWx0IDwgMCkgeworCQlzbWJfaW5mby0+cmV0cmllc19sZWZ0 LS07CisJCWlmIChzbWJfaW5mby0+cmV0cmllc19sZWZ0ID4gMCkgeworCQkJc21iX2luY19z dGF0KHNtYl9pbmZvLCByZWNlaXZlX3JldHJpZXMpOworCisJCQltb2RfdGltZXIoJnNtYl9p bmZvLT5yZXRyeV90aW1lciwKKwkJCQkgIGppZmZpZXMgKyBTTUJfTVNHX0pJRkZJRVMpOwor CQkJc21iX2luZm8tPnJ0Y191c190aW1lciA9IFNNQl9NU0dfVVNFQzsKKwkJCXJldHVybjsK KwkJfQorCisJCXNtYl9pbmNfc3RhdChzbWJfaW5mbywgcmVjZWl2ZV9lcnJvcnMpOworCisJ CWlmICAoc21iX2luZm8tPnNtYl9kZWJ1ZyAmIFNNQl9ERUJVR19NU0cpCisJCQlwcmludGso S0VSTl9JTkZPCisJCQkgICAgICAgIkVycm9yIGluIG1zZ19kb25lX2hhbmRsZXI6ICVkXG4i LCBpMmNlLT5yZXN1bHQpOworCQlsZW4gPSAwOworCQlnb3RvIGNvbnRpbnVlX29wOworCX0K KworCWxlbiA9IGRhdGFbMF07IC8qIE51bWJlciBvZiBieXRlcyAqYWZ0ZXIqIGRhdGFbMF0u ICovCisJZGF0YSsrOworCWlmICgobGVuID4gMSkgJiYgKHNtYl9pbmZvLT5tdWx0aV9wb3Mg PT0gMCkKKwkJCQkmJiAoZGF0YVswXSA9PSAweDAwKSAmJiAoZGF0YVsxXSA9PSAweDAxKSkg eworCQkvKiBTdGFydCBvZiBtdWx0aS1wYXJ0IHJlYWQuICBTdGFydCB0aGUgbmV4dCB0cmFu c2FjdGlvbi4gKi8KKwkJaW50IGk7CisKKwkJc21iX2luY19zdGF0KHNtYl9pbmZvLCByZWNl aXZlZF9tZXNzYWdlX3BhcnRzKTsKKworCQkvKiBSZW1vdmUgdGhlIG11bHRpLXBhcnQgcmVh ZCBtYXJrZXIuICovCisJCWZvciAoaSA9IDA7IGkgPCAobGVuLTIpOyBpKyspCisJCQlzbWJf aW5mby0+ZGF0YVtpXSA9IGRhdGFbaSsyXTsKKwkJbGVuIC09IDI7CisJCXNtYl9pbmZvLT5t dWx0aV9sZW4gPSBsZW47CisJCXNtYl9pbmZvLT5tdWx0aV9wb3MgPSAxOworCisJCWkyY2Ut PnhmZXJfdHlwZSA9IEkyQ19PUF9TTUJVUzsKKwkJaTJjZS0+aGFuZGxlciA9IG1zZ19kb25l X2hhbmRsZXI7CisJCWkyY2UtPmhhbmRsZXJfZGF0YSA9IHNtYl9pbmZvOworCQlpMmNlLT5z bWJ1cy5yZWFkX3dyaXRlID0gSTJDX1NNQlVTX1JFQUQ7CisJCWkyY2UtPnNtYnVzLmNvbW1h bmQgPSBTTUJfSVBNSV9NVUxUSV9QQVJUX1JFU1BPTlNFX01JRERMRTsKKwkJaTJjZS0+c21i dXMuZGF0YSA9ICgodW5pb24gaTJjX3NtYnVzX2RhdGEgKikgc21iX2luZm8tPnJlY3YpOwor CQlpMmNlLT5zbWJ1cy5zaXplID0gSTJDX1NNQlVTX0JMT0NLX0RBVEE7CisJCWlmIChpMmNf bm9uX2Jsb2NraW5nX29wKCZzbWJfaW5mby0+Y2xpZW50LCBpMmNlKSkgeworCQkJaWYgKHNt Yl9pbmZvLT5zbWJfZGVidWcgJiBTTUJfREVCVUdfTVNHKSB7CisJCQkJcHJpbnRrKEtFUk5f SU5GTworCQkJCSAgICAgICAiRXJyb3IgZnJvbSBpMmNfbm9uX2Jsb2NraW5nX29wKDEpXG4i KTsKKwkJCX0KKwkJCXJlc3VsdCA9IC1FSU87CisJCX0gZWxzZQorCQkJcmV0dXJuOworCX0g ZWxzZSBpZiAoc21iX2luZm8tPm11bHRpX3BvcykgeworCQkvKiBNaWRkbGUgb2YgbXVsdGkt cGFydCByZWFkLiAgU3RhcnQgdGhlIG5leHQgdHJhbnNhY3Rpb24uICovCisJCWludCBpOwor CQl1bnNpZ25lZCBjaGFyIGJsb2NrbnVtOworCisJCWlmIChsZW4gPT0gMCkgeworCQkJcmVz dWx0ID0gLUVJTzsKKwkJCWlmIChzbWJfaW5mby0+c21iX2RlYnVnICYgU01CX0RFQlVHX01T RykgeworCQkJCXByaW50ayhLRVJOX0lORk8KKwkJCQkgICAgICAgIlJlY2VpdmVkIG1pZGRs ZSBtZXNzYWdlIHdpdGggbm8iCisJCQkJICAgICAgICIgZGF0YVxuIik7CisJCQl9CisJCQln b3RvIGNvbnRpbnVlX29wOworCQl9CisKKwkJYmxvY2tudW0gPSBkYXRhW3NtYl9pbmZvLT5t dWx0aV9sZW5dOworCisJCWlmIChzbWJfaW5mby0+bXVsdGlfbGVuK2xlbi0xID4gSVBNSV9N QVhfTVNHX0xFTkdUSCkgeworCQkJLyogUmVjZWl2ZWQgbWVzc2FnZSB0b28gYmlnLCBhYm9y dCB0aGUgb3BlcmF0aW9uLiAqLworCQkJcmVzdWx0ID0gLUUyQklHOworCQkJaWYgKHNtYl9p bmZvLT5zbWJfZGVidWcgJiBTTUJfREVCVUdfTVNHKSB7CisJCQkJcHJpbnRrKEtFUk5fSU5G TworCQkJCSAgICAgICAiUmVjZWl2ZWQgbWVzc2FnZSB0b28gYmlnXG4iKTsKKwkJCX0KKwkJ CWdvdG8gY29udGludWVfb3A7CisJCX0KKworCQkvKiBSZW1vdmUgdGhlIGJsb2NrbnVtIGZy b20gdGhlIGRhdGEuICovCisJCWZvciAoaSA9IDA7IGkgPCAobGVuLTEpOyBpKyspCisJCQlz bWJfaW5mby0+ZGF0YVtpK3NtYl9pbmZvLT5tdWx0aV9sZW5dID0gZGF0YVtpKzFdOworCQls ZW4tLTsKKwkJc21iX2luZm8tPm11bHRpX2xlbiArPSBsZW47CisJCWlmIChibG9ja251bSA9 PSAweGZmKSB7CisJCQkvKiBFbmQgb2YgcmVhZCAqLworCQkJbGVuID0gc21iX2luZm8tPm11 bHRpX2xlbjsKKwkJCWRhdGEgPSBzbWJfaW5mby0+ZGF0YTsKKwkJfSBlbHNlIGlmICgoYmxv Y2tudW0rMSkgIT0gc21iX2luZm8tPm11bHRpX3BvcykgeworCQkJLyoKKwkJCSAqIE91dCBv ZiBzZXF1ZW5jZSBibG9jaywganVzdCBhYm9ydC4gIEJsb2NrCisJCQkgKiBudW1iZXJzIHN0 YXJ0IGF0IHplcm8gZm9yIHRoZSBzZWNvbmQgYmxvY2ssCisJCQkgKiBidXQgbXVsdGlfcG9z IHN0YXJ0cyBhdCBvbmUsIHNvIHRoZSArMS4KKwkJCSAqLworCQkJcmVzdWx0ID0gLUVJTzsK KwkJfSBlbHNlIHsKKwkJCXNtYl9pbmNfc3RhdChzbWJfaW5mbywgcmVjZWl2ZWRfbWVzc2Fn ZV9wYXJ0cyk7CisKKwkJCXNtYl9pbmZvLT5tdWx0aV9wb3MrKzsKKwkJCWkyY2UtPnhmZXJf dHlwZSA9IEkyQ19PUF9TTUJVUzsKKwkJCWkyY2UtPmhhbmRsZXIgPSBtc2dfZG9uZV9oYW5k bGVyOworCQkJaTJjZS0+aGFuZGxlcl9kYXRhID0gc21iX2luZm87CisJCQlpMmNlLT5zbWJ1 cy5yZWFkX3dyaXRlID0gSTJDX1NNQlVTX1JFQUQ7CisJCQlpMmNlLT5zbWJ1cy5jb21tYW5k CisJCQkJPSBTTUJfSVBNSV9NVUxUSV9QQVJUX1JFU1BPTlNFX01JRERMRTsKKwkJCWkyY2Ut PnNtYnVzLmRhdGEgPSAoKHVuaW9uIGkyY19zbWJ1c19kYXRhICopCisJCQkJCSAgICBzbWJf aW5mby0+cmVjdik7CisJCQlpMmNlLT5zbWJ1cy5zaXplID0gSTJDX1NNQlVTX0JMT0NLX0RB VEE7CisKKwkJCWlmIChpMmNfbm9uX2Jsb2NraW5nX29wKCZzbWJfaW5mby0+Y2xpZW50LCBp MmNlKSkgeworCQkJCWlmIChzbWJfaW5mby0+c21iX2RlYnVnICYgU01CX0RFQlVHX01TRykg eworCQkJCQlwcmludGsoS0VSTl9JTkZPICJFcnJvciBmcm9tIgorCQkJCQkgICAgICAgIiBp MmNfbm9uX2Jsb2NraW5nX29wKDIpXG4iKTsKKwkJCQl9CisJCQkJcmVzdWx0ID0gLUVJTzsK KwkJCX0gZWxzZQorCQkJCXJldHVybjsKKwkJfQorCX0KKworCWlmIChyZXN1bHQgPCAwKSB7 CisJCXNtYl9pbmNfc3RhdChzbWJfaW5mbywgcmVjZWl2ZV9lcnJvcnMpOworCX0gZWxzZSB7 CisJCXNtYl9pbmNfc3RhdChzbWJfaW5mbywgcmVjZWl2ZWRfbWVzc2FnZXMpOworCQlzbWJf aW5jX3N0YXQoc21iX2luZm8sIHJlY2VpdmVkX21lc3NhZ2VfcGFydHMpOworCX0KKworCisg Y29udGludWVfb3A6CisJaWYgKHNtYl9pbmZvLT5zbWJfZGVidWcgJiBTTUJfREVCVUdfU1RB VEUpCisJCXByaW50ayhLRVJOX0lORk8gIkRPTkUgMTogc3RhdGUgPSAlZCwgcmVzdWx0PSVk LlxuIiwKKwkJICAgICAgIHNtYl9pbmZvLT5zbWJfc3RhdGUsIHJlc3VsdCk7CisKKwlmbGFn cyA9IGlwbWlfc21iX2xvY2tfY29uZChzbWJfaW5mbywgJm9mbGFncyk7CisJbXNnID0gc21i X2luZm8tPmN1cnJfbXNnOworCWlmIChtc2cpIHsKKwkJbXNnLT5yc3Bfc2l6ZSA9IGxlbjsK KwkJaWYgKG1zZy0+cnNwX3NpemUgPiBJUE1JX01BWF9NU0dfTEVOR1RIKQorCQkJbXNnLT5y c3Bfc2l6ZSA9IElQTUlfTUFYX01TR19MRU5HVEg7CisJCW1lbWNweShtc2ctPnJzcCwgZGF0 YSwgbXNnLT5yc3Bfc2l6ZSk7CisJCXNtYl9pbmZvLT5jdXJyX21zZyA9IE5VTEw7CisJfQor CisJc3dpdGNoIChzbWJfaW5mby0+c21iX3N0YXRlKSB7CisJY2FzZSBTTUJfTk9STUFMOgor CQlpcG1pX3NtYl91bmxvY2tfY29uZChzbWJfaW5mbywgZmxhZ3MpOworCQlpZiAoIW1zZykK KwkJCWJyZWFrOworCisJCWlmIChyZXN1bHQgPCAwKQorCQkJcmV0dXJuX2hvc2VkX21zZyhz bWJfaW5mbywgbXNnKTsKKwkJZWxzZQorCQkJZGVsaXZlcl9yZWN2X21zZyhzbWJfaW5mbywg bXNnKTsKKwkJYnJlYWs7CisKKwljYXNlIFNNQl9HRVRUSU5HX0ZMQUdTOgorCQkvKiBXZSBn b3QgdGhlIGZsYWdzIGZyb20gdGhlIFNNQiwgbm93IGhhbmRsZSB0aGVtLiAqLworCQlpZiAo KHJlc3VsdCA8IDApIHx8IChsZW4gPCA0KSB8fCAoZGF0YVsyXSAhPSAwKSkgeworCQkJLyoK KwkJCSAqIEVycm9yIGZldGNoaW5nIGZsYWdzLCBvciBpbnZhbGlkIGxlbmd0aCwKKwkJCSAq IGp1c3QgZ2l2ZSB1cCBmb3Igbm93LgorCQkJICovCisJCQlzbWJfaW5mby0+c21iX3N0YXRl ID0gU01CX05PUk1BTDsKKwkJCWlwbWlfc21iX3VubG9ja19jb25kKHNtYl9pbmZvLCBmbGFn cyk7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAgICAgUEZYICJFcnJvciBnZXR0 aW5nIGZsYWdzOiAlZCAlZCwgJTIuMnhcbiIsCisJCQkgICAgICAgcmVzdWx0LCBsZW4sIGRh dGFbMl0pOworCQl9IGVsc2UgaWYgKGRhdGFbMF0gIT0gKElQTUlfTkVURk5fQVBQX1JFUVVF U1QgfCAxKSA8PCAyCisJCQkgICB8fCBkYXRhWzFdICE9IElQTUlfR0VUX01TR19GTEFHU19D TUQpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSAgICAgICBQRlggIkludmFsaWQg cmVzcG9uc2UgZ2V0dGluZyBmbGFnczogIgorCQkJICAgICAgICIlMi4yeCAlMi4yeFxuIiwg ZGF0YVswXSwgZGF0YVsxXSk7CisJCX0gZWxzZSB7CisJCQlzbWJfaW5jX3N0YXQoc21iX2lu Zm8sIGZsYWdfZmV0Y2hlcyk7CisJCQlzbWJfaW5mby0+bXNnX2ZsYWdzID0gZGF0YVszXTsK KwkJCWhhbmRsZV9mbGFncyhzbWJfaW5mbywgZmxhZ3MpOworCQl9CisJCWJyZWFrOworCisJ Y2FzZSBTTUJfQ0xFQVJJTkdfRkxBR1M6CisJCS8qIFdlIGNsZWFyZWQgdGhlIGZsYWdzLiAq LworCQlpZiAoKHJlc3VsdCA8IDApIHx8IChsZW4gPCAzKSB8fCAoZGF0YVsyXSAhPSAwKSkg eworCQkJLyogRXJyb3IgY2xlYXJpbmcgZmxhZ3MgKi8KKwkJCXByaW50ayhLRVJOX1dBUk5J TkcKKwkJCSAgICAgICBQRlggIkVycm9yIGNsZWFyaW5nIGZsYWdzOiAlZCAlZCwgJTIuMnhc biIsCisJCQkgICAgICAgcmVzdWx0LCBsZW4sIGRhdGFbMl0pOworCQl9IGVsc2UgaWYgKGRh dGFbMF0gIT0gKElQTUlfTkVURk5fQVBQX1JFUVVFU1QgfCAxKSA8PCAyCisJCQkgICB8fCBk YXRhWzFdICE9IElQTUlfQ0xFQVJfTVNHX0ZMQUdTX0NNRCkgeworCQkJcHJpbnRrKEtFUk5f V0FSTklORworCQkJICAgICAgIFBGWCAiSW52YWxpZCByZXNwb25zZSBjbGVhcmluZyBmbGFn czogIgorCQkJICAgICAgICIlMi4yeCAlMi4yeFxuIiwgZGF0YVswXSwgZGF0YVsxXSk7CisJ CX0KKwkJc21iX2luZm8tPnNtYl9zdGF0ZSA9IFNNQl9OT1JNQUw7CisJCWlwbWlfc21iX3Vu bG9ja19jb25kKHNtYl9pbmZvLCBmbGFncyk7CisJCWJyZWFrOworCisJY2FzZSBTTUJfR0VU VElOR19FVkVOVFM6CisJCWlmICgocmVzdWx0IDwgMCkgfHwgKGxlbiA8IDMpIHx8IChtc2ct PnJzcFsyXSAhPSAwKSkgeworCQkJLyogRXJyb3IgZ2V0dGluZyBldmVudCwgcHJvYmFibHkg ZG9uZS4gKi8KKwkJCW1zZy0+ZG9uZShtc2cpOworCisJCQkvKiBUYWtlIG9mZiB0aGUgZXZl bnQgZmxhZy4gKi8KKwkJCXNtYl9pbmZvLT5tc2dfZmxhZ3MgJj0gfkVWRU5UX01TR19CVUZG RVJfRlVMTDsKKwkJCWhhbmRsZV9mbGFncyhzbWJfaW5mbywgZmxhZ3MpOworCQl9IGVsc2Ug aWYgKG1zZy0+cnNwWzBdICE9IChJUE1JX05FVEZOX0FQUF9SRVFVRVNUIHwgMSkgPDwgMgor CQkJICAgfHwgbXNnLT5yc3BbMV0gIT0gSVBNSV9SRUFEX0VWRU5UX01TR19CVUZGRVJfQ01E KSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAgICAgUEZYICJJbnZhbGlkIHJl c3BvbnNlIGdldHRpbmcgZXZlbnRzOiAiCisJCQkgICAgICAgIiUyLjJ4ICUyLjJ4XG4iLCBt c2ctPnJzcFswXSwgbXNnLT5yc3BbMV0pOworCQkJbXNnLT5kb25lKG1zZyk7CisJCQkvKiBU YWtlIG9mZiB0aGUgZXZlbnQgZmxhZy4gKi8KKwkJCXNtYl9pbmZvLT5tc2dfZmxhZ3MgJj0g fkVWRU5UX01TR19CVUZGRVJfRlVMTDsKKwkJCWhhbmRsZV9mbGFncyhzbWJfaW5mbywgZmxh Z3MpOworCQl9IGVsc2UgeworCQkJaGFuZGxlX2ZsYWdzKHNtYl9pbmZvLCBmbGFncyk7CisJ CQlzbWJfaW5jX3N0YXQoc21iX2luZm8sIGV2ZW50cyk7CisJCQlkZWxpdmVyX3JlY3ZfbXNn KHNtYl9pbmZvLCBtc2cpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBTTUJfR0VUVElOR19N RVNTQUdFUzoKKwkJaWYgKChyZXN1bHQgPCAwKSB8fCAobGVuIDwgMykgfHwgKG1zZy0+cnNw WzJdICE9IDApKSB7CisJCQkvKiBFcnJvciBnZXR0aW5nIGV2ZW50LCBwcm9iYWJseSBkb25l LiAqLworCQkJbXNnLT5kb25lKG1zZyk7CisKKwkJCS8qIFRha2Ugb2ZmIHRoZSBtc2cgZmxh Zy4gKi8KKwkJCXNtYl9pbmZvLT5tc2dfZmxhZ3MgJj0gflJFQ0VJVkVfTVNHX0FWQUlMOwor CQkJaGFuZGxlX2ZsYWdzKHNtYl9pbmZvLCBmbGFncyk7CisJCX0gZWxzZSBpZiAobXNnLT5y c3BbMF0gIT0gKElQTUlfTkVURk5fQVBQX1JFUVVFU1QgfCAxKSA8PCAyCisJCQkgICB8fCBt c2ctPnJzcFsxXSAhPSBJUE1JX0dFVF9NU0dfQ01EKSB7CisJCQlwcmludGsoS0VSTl9XQVJO SU5HCisJCQkgICAgICAgUEZYICJJbnZhbGlkIHJlc3BvbnNlIGNsZWFyaW5nIGZsYWdzOiAi CisJCQkgICAgICAgIiUyLjJ4ICUyLjJ4XG4iLCBtc2ctPnJzcFswXSwgbXNnLT5yc3BbMV0p OworCQkJbXNnLT5kb25lKG1zZyk7CisKKwkJCS8qIFRha2Ugb2ZmIHRoZSBtc2cgZmxhZy4g Ki8KKwkJCXNtYl9pbmZvLT5tc2dfZmxhZ3MgJj0gflJFQ0VJVkVfTVNHX0FWQUlMOworCQkJ aGFuZGxlX2ZsYWdzKHNtYl9pbmZvLCBmbGFncyk7CisJCX0gZWxzZSB7CisJCQlzbWJfaW5j X3N0YXQoc21iX2luZm8sIGluY29taW5nX21lc3NhZ2VzKTsKKwkJCWhhbmRsZV9mbGFncyhz bWJfaW5mbywgZmxhZ3MpOworCQkJZGVsaXZlcl9yZWN2X21zZyhzbWJfaW5mbywgbXNnKTsK KwkJfQorCQlicmVhazsKKwl9CisKKwlmbGFncyA9IGlwbWlfc21iX2xvY2tfY29uZChzbWJf aW5mbywgJm9mbGFncyk7CisJaWYgKFNNQl9JRExFKHNtYl9pbmZvKSkgeworCQlpZiAoc21i X2luZm8tPnJlcV9ldmVudHMpCisJCQlzdGFydF9ldmVudF9mZXRjaChzbWJfaW5mbywgZmxh Z3MpOworCQllbHNlIGlmIChzbWJfaW5mby0+cmVxX2ZsYWdzKQorCQkJc3RhcnRfZmxhZ19m ZXRjaChzbWJfaW5mbywgZmxhZ3MpOworCQllbHNlCisJCQlzdGFydF9uZXh0X21zZyhzbWJf aW5mbywgZmxhZ3MpOworCX0gZWxzZQorCQlpcG1pX3NtYl91bmxvY2tfY29uZChzbWJfaW5m bywgZmxhZ3MpOworCisJaWYgKHNtYl9pbmZvLT5zbWJfZGVidWcgJiBTTUJfREVCVUdfU1RB VEUpCisJCXByaW50ayhLRVJOX0lORk8gIkRPTkUgMjogc3RhdGUgPSAlZC5cbiIsIHNtYl9p bmZvLT5zbWJfc3RhdGUpOworfQorCitzdGF0aWMgdm9pZCBtc2dfd3JpdHRlbl9oYW5kbGVy KHN0cnVjdCBpMmNfb3BfcV9lbnRyeSAqaTJjZSkKK3sKKwlzdHJ1Y3Qgc21iX2luZm8gKnNt Yl9pbmZvID0gaTJjZS0+aGFuZGxlcl9kYXRhOworCisJLyogV2UgYXJlIHNpbmdsZS10aHJl YWRlZCBoZXJlLCBzbyBubyBuZWVkIGZvciBhIGxvY2suICovCisJaWYgKGkyY2UtPnJlc3Vs dCA8IDApIHsKKwkJc21iX2luZm8tPnJldHJpZXNfbGVmdC0tOworCQlpZiAoc21iX2luZm8t PnJldHJpZXNfbGVmdCA+IDApIHsKKwkJCWlmICghc3RhcnRfcmVzZW5kKHNtYl9pbmZvKSkg eworCQkJCXNtYl9pbmNfc3RhdChzbWJfaW5mbywgc2VuZF9yZXRyaWVzKTsKKwkJCQlyZXR1 cm47CisJCQl9CisJCQkvKiByZXF1ZXN0IGZhaWxlZCwganVzdCByZXR1cm4gdGhlIGVycm9y LiAqLworCQkJc21iX2luY19zdGF0KHNtYl9pbmZvLCBzZW5kX2Vycm9ycyk7CisKKwkJCWlm IChzbWJfaW5mby0+c21iX2RlYnVnICYgU01CX0RFQlVHX01TRykgeworCQkJCXByaW50ayhL RVJOX0lORk8gIk91dCBvZiByZXRyaWVzIGluIgorCQkJCSAgICAgICAiIG1zZ193cml0dGVu X2hhbmRsZXJcbiIpOworCQkJfQorCQkJaTJjZS0+cmVzdWx0ID0gLUVJTzsKKwkJCW1zZ19k b25lX2hhbmRsZXIoaTJjZSk7CisJCQlyZXR1cm47CisJCX0KKworCQlzbWJfaW5jX3N0YXQo c21iX2luZm8sIHNlbmRfZXJyb3JzKTsKKworCQkvKgorCQkgKiBHb3QgYW4gZXJyb3Igb24g dHJhbnNtaXQsIGxldCB0aGUgZG9uZSByb3V0aW5lCisJCSAqIGhhbmRsZSBpdC4KKwkJICov CisJCWlmIChzbWJfaW5mby0+c21iX2RlYnVnICYgU01CX0RFQlVHX01TRykgeworCQkJcHJp bnRrKEtFUk5fSU5GTworCQkJICAgICAgICJFcnJvciBpbiBtc2dfd3JpdHRlbl9oYW5kbGVy OiAlZFxuIiwKKwkJCSAgICAgICBpMmNlLT5yZXN1bHQpOworCQl9CisJCW1zZ19kb25lX2hh bmRsZXIoaTJjZSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoc21iX2luZm8tPm11bHRpX2Rh dGEpIHsKKwkJLyogSW4gdGhlIG1pZGRsZSBvZiBhIG11bHRpLWRhdGEgd3JpdGUuICovCisJ CWludCBsZWZ0OworCisJCXNtYl9pbmNfc3RhdChzbWJfaW5mbywgc2VudF9tZXNzYWdlc19w YXJ0cyk7CisKKwkJbGVmdCA9IHNtYl9pbmZvLT5tdWx0aV9sZW4gLSBzbWJfaW5mby0+bXVs dGlfcG9zOworCQlpZiAobGVmdCA+IDMyKQorCQkJbGVmdCA9IDMyOworCQlpMmNlLT54ZmVy X3R5cGUgPSBJMkNfT1BfU01CVVM7CisJCWkyY2UtPmhhbmRsZXIgPSBtc2dfd3JpdHRlbl9o YW5kbGVyOworCQlpMmNlLT5oYW5kbGVyX2RhdGEgPSBzbWJfaW5mbzsKKwkJaTJjZS0+c21i dXMucmVhZF93cml0ZSA9IEkyQ19TTUJVU19XUklURTsKKwkJaTJjZS0+c21idXMuZGF0YQor CQkJPSAoKHVuaW9uIGkyY19zbWJ1c19kYXRhICopCisJCQkgICAoc21iX2luZm8tPm11bHRp X2RhdGEgKyBzbWJfaW5mby0+bXVsdGlfcG9zKSk7CisJCS8qIExlbmd0aCBieXRlLiAqLwor CQlzbWJfaW5mby0+bXVsdGlfZGF0YVtzbWJfaW5mby0+bXVsdGlfcG9zXSA9IGxlZnQ7CisJ CWkyY2UtPnNtYnVzLnNpemUgPSBJMkNfU01CVVNfQkxPQ0tfREFUQTsKKwkJc21iX2luZm8t Pm11bHRpX3BvcyArPSBsZWZ0OworCQlpMmNlLT5zbWJ1cy5jb21tYW5kID0gU01CX0lQTUlf TVVMVElfUEFSVF9SRVFVRVNUX01JRERMRTsKKwkJaWYgKGxlZnQgPCAzMikKKwkJCS8qCisJ CQkgKiBXcml0ZSBpcyBmaW5pc2hlZC4gIE5vdGUgdGhhdCB3ZSBtdXN0IGVuZAorCQkJICog d2l0aCBhIHdyaXRlIG9mIGxlc3MgdGhhbiAzMiBieXRlcyB0bworCQkJICogY29tcGxldGUg dGhlIHRyYW5zYWN0aW9uLCBldmVuIGlmIGl0IGlzCisJCQkgKiB6ZXJvIGJ5dGVzLgorCQkJ ICovCisJCQlzbWJfaW5mby0+bXVsdGlfZGF0YSA9IE5VTEw7CisJfSBlbHNlIHsKKwkJc21i X2luY19zdGF0KHNtYl9pbmZvLCBzZW50X21lc3NhZ2VzKTsKKwkJc21iX2luY19zdGF0KHNt Yl9pbmZvLCBzZW50X21lc3NhZ2VzX3BhcnRzKTsKKworCQkvKiBXYWl0IGEgamlmZmllIHRo ZW4gcmVxdWVzdCB0aGUgbmV4dCBtZXNzYWdlICovCisJCXNtYl9pbmZvLT5yZXRyaWVzX2xl ZnQgPSBTTUJfUkVDVl9SRVRSSUVTOworCQltb2RfdGltZXIoJnNtYl9pbmZvLT5yZXRyeV90 aW1lciwKKwkJCSAgamlmZmllcyArIFNNQl9NU0dfUEFSVF9KSUZGSUVTKTsKKwkJc21iX2lu Zm8tPnJ0Y191c190aW1lciA9IFNNQl9NU0dfUEFSVF9VU0VDOworCQlyZXR1cm47CisJfQor CisJaWYgKGkyY19ub25fYmxvY2tpbmdfb3AoJnNtYl9pbmZvLT5jbGllbnQsIGkyY2UpKSB7 CisJCS8qIHJlcXVlc3QgZmFpbGVkLCBqdXN0IHJldHVybiB0aGUgZXJyb3IuICovCisJCXNt Yl9pbmNfc3RhdChzbWJfaW5mbywgc2VuZF9lcnJvcnMpOworCisJCWlmIChzbWJfaW5mby0+ c21iX2RlYnVnICYgU01CX0RFQlVHX01TRykgeworCQkJcHJpbnRrKEtFUk5fSU5GTworCQkJ ICAgICAgICJFcnJvciBmcm9tIGkyY19ub25fYmxvY2tpbmdfb3AoMylcbiIpOworCQl9CisJ CWkyY2UtPnJlc3VsdCA9IC1FSU87CisJCW1zZ19kb25lX2hhbmRsZXIoaTJjZSk7CisJfQor fQorCitzdGF0aWMgaW50IHN0YXJ0X3Jlc2VuZChzdHJ1Y3Qgc21iX2luZm8gKnNtYl9pbmZv KQoreworCXN0cnVjdCBpMmNfb3BfcV9lbnRyeSAqaTJjZTsKKwlpbnQgICAgICAgICAgICAg ICAgICAgcnY7CisKKwlpMmNlID0gJnNtYl9pbmZvLT5pMmNfcV9lbnRyeTsKKwlpMmNlLT54 ZmVyX3R5cGUgPSBJMkNfT1BfU01CVVM7CisJaTJjZS0+aGFuZGxlciA9IG1zZ193cml0dGVu X2hhbmRsZXI7CisJaTJjZS0+aGFuZGxlcl9kYXRhID0gc21iX2luZm87CisJaTJjZS0+c21i dXMucmVhZF93cml0ZSA9IEkyQ19TTUJVU19XUklURTsKKworCWkyY2UtPnNtYnVzLmRhdGEg PSAodW5pb24gaTJjX3NtYnVzX2RhdGEgKikgc21iX2luZm8tPmRhdGE7CisJaTJjZS0+c21i dXMuc2l6ZSA9IEkyQ19TTUJVU19CTE9DS19EQVRBOworCisJaWYgKHNtYl9pbmZvLT5kYXRh X2xlbiA+IDMyKSB7CisJCWkyY2UtPnNtYnVzLmNvbW1hbmQgPSBTTUJfSVBNSV9NVUxUSV9Q QVJUX1JFUVVFU1RfU1RBUlQ7CisJCXNtYl9pbmZvLT5tdWx0aV9kYXRhID0gc21iX2luZm8t PmRhdGE7CisJCXNtYl9pbmZvLT5tdWx0aV9sZW4gPSBzbWJfaW5mby0+ZGF0YV9sZW47CisJ CS8qCisJCSAqIFN1YnRsZSB0aGluZywgdGhpcyBpcyAzMiwgbm90IDMzLCBiZWNhdXNlIHdl IHdpbGwKKwkJICogb3ZlcndyaXRlIHRoZSB0aGluZyBhdCBwb3NpdGlvbiAzMiAod2hpY2gg d2FzIGp1c3QKKwkJICogdHJhbnNtaXR0ZWQpIHdpdGggdGhlIG5ldyBsZW5ndGguCisJCSAq LworCQlzbWJfaW5mby0+bXVsdGlfcG9zID0gMzI7CisJCXNtYl9pbmZvLT5kYXRhWzBdID0g MzI7CisJfSBlbHNlIHsKKwkJc21iX2luZm8tPm11bHRpX2RhdGEgPSBOVUxMOworCQlpMmNl LT5zbWJ1cy5jb21tYW5kID0gU01CX0lQTUlfUkVRVUVTVDsKKwkJc21iX2luZm8tPmRhdGFb MF0gPSBzbWJfaW5mby0+ZGF0YV9sZW47CisJfQorCisJcnYgPSBpMmNfbm9uX2Jsb2NraW5n X29wKCZzbWJfaW5mby0+Y2xpZW50LCBpMmNlKTsKKwlpZiAocnYgJiYgKHNtYl9pbmZvLT5z bWJfZGVidWcgJiBTTUJfREVCVUdfTVNHKSkgeworCQlwcmludGsoS0VSTl9JTkZPCisJCSAg ICAgICAiRXJyb3IgZnJvbSBpMmNfbm9uX2Jsb2NraW5nX29wKDQpXG4iKTsKKwl9CisJcmV0 dXJuIHJ2OworfQorCitzdGF0aWMgaW50IHN0YXJ0X3NlbmQoc3RydWN0IHNtYl9pbmZvICpz bWJfaW5mbywKKwkJICAgICAgdW5zaWduZWQgY2hhciAgICpkYXRhLAorCQkgICAgICB1bnNp Z25lZCBpbnQgICAgbGVuKQoreworLy8JcHJpbnRrKEtFUk5fRVJSICJzdGFydF9zZW5kOiBk YXRhWzBdIDB4JXggZGF0YVsxXSAweCV4IGxlbiAweCV4XG4iLCAKKy8vCQlkYXRhWzBdLCBk YXRhWzFdLCBsZW4pOworCisJaWYgKGxlbiA+IElQTUlfTUFYX01TR19MRU5HVEgpCisJCXJl dHVybiAtRTJCSUc7CisJaWYgKGxlbiA+IHNtYl9pbmZvLT5tYXhfeG1pdF9tc2dfc2l6ZSkK KwkJcmV0dXJuIC1FMkJJRzsKKworCXNtYl9pbmZvLT5yZXRyaWVzX2xlZnQgPSBTTUJfU0VO RF9SRVRSSUVTOworCW1lbWNweShzbWJfaW5mby0+ZGF0YSsxLCBkYXRhLCBsZW4pOworCXNt Yl9pbmZvLT5kYXRhX2xlbiA9IGxlbjsKKwlyZXR1cm4gc3RhcnRfcmVzZW5kKHNtYl9pbmZv KTsKK30KKworLyogTXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbWVzc2FnZSBsb2NrIGhlbGQu ICovCitzdGF0aWMgdm9pZCBzdGFydF9uZXh0X21zZyhzdHJ1Y3Qgc21iX2luZm8gKnNtYl9p bmZvLCB1bnNpZ25lZCBsb25nICpmbGFncykKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICpl bnRyeTsKKwlzdHJ1Y3QgaXBtaV9zbWlfbXNnICptc2c7CisJdW5zaWduZWQgbG9uZyBvZmxh Z3M7CisKKyByZXN0YXJ0OgorCWVudHJ5ID0gTlVMTDsKKwlpZiAoIVNNQl9JRExFKHNtYl9p bmZvKSkgeworCQlpcG1pX3NtYl91bmxvY2tfY29uZChzbWJfaW5mbywgZmxhZ3MpOworCQly ZXR1cm47CisJfQorCisJLyogUGljayB0aGUgaGlnaCBwcmlvcml0eSBxdWV1ZSBmaXJzdC4g Ki8KKwlpZiAoIWxpc3RfZW1wdHkoJnNtYl9pbmZvLT5ocF94bWl0X21zZ3MpKQorCQllbnRy eSA9IHNtYl9pbmZvLT5ocF94bWl0X21zZ3MubmV4dDsKKwllbHNlIGlmICghbGlzdF9lbXB0 eSgmc21iX2luZm8tPnhtaXRfbXNncykpCisJCWVudHJ5ID0gc21iX2luZm8tPnhtaXRfbXNn cy5uZXh0OworCisJaWYgKCFlbnRyeSkgeworCQlzbWJfaW5mby0+Y3Vycl9tc2cgPSBOVUxM OworCQlpcG1pX3NtYl91bmxvY2tfY29uZChzbWJfaW5mbywgZmxhZ3MpOworCX0gZWxzZSB7 CisJCWludCBydjsKKworCQlsaXN0X2RlbChlbnRyeSk7CisJCW1zZyA9IGxpc3RfZW50cnko ZW50cnksIHN0cnVjdCBpcG1pX3NtaV9tc2csIGxpbmspOworCQlzbWJfaW5mby0+Y3Vycl9t c2cgPSBtc2c7CisJCWlwbWlfc21iX3VubG9ja19jb25kKHNtYl9pbmZvLCBmbGFncyk7CisJ CXJ2ID0gc3RhcnRfc2VuZChzbWJfaW5mbywKKwkJCQlzbWJfaW5mby0+Y3Vycl9tc2ctPmRh dGEsCisJCQkJc21iX2luZm8tPmN1cnJfbXNnLT5kYXRhX3NpemUpOworCQlpZiAocnYpIHsK KwkJCXNtYl9pbmZvLT5jdXJyX21zZyA9IE5VTEw7CisJCQlyZXR1cm5faG9zZWRfbXNnKHNt Yl9pbmZvLCBtc2cpOworCQkJZmxhZ3MgPSBpcG1pX3NtYl9sb2NrX2NvbmQoc21iX2luZm8s ICZvZmxhZ3MpOworCQkJZ290byByZXN0YXJ0OworCQl9CisJfQorfQorCitzdGF0aWMgdm9p ZCBzZW5kZXIodm9pZCAgICAgICAgICAgICAgICAqc2VuZF9pbmZvLAorCQkgICBzdHJ1Y3Qg aXBtaV9zbWlfbXNnICptc2csCisJCSAgIGludCAgICAgICAgICAgICAgICAgcHJpb3JpdHkp Cit7CisJc3RydWN0IHNtYl9pbmZvICpzbWJfaW5mbyA9IChzdHJ1Y3Qgc21iX2luZm8gKikg c2VuZF9pbmZvOworCXVuc2lnbmVkIGxvbmcgb2ZsYWdzLCAqZmxhZ3M7CisKKwlmbGFncyA9 IGlwbWlfc21iX2xvY2tfY29uZChzbWJfaW5mbywgJm9mbGFncyk7CisJaWYgKHNtYl9pbmZv LT5ydW5fdG9fY29tcGxldGlvbikgeworCQkvKgorCQkgKiBJZiB3ZSBhcmUgcnVubmluZyB0 byBjb21wbGV0aW9uLCB0aGVuIHRocm93IGl0IGluCisJCSAqIHRoZSBsaXN0IGFuZCBydW4g dHJhbnNhY3Rpb25zIHVudGlsIGV2ZXJ5dGhpbmcgaXMKKwkJICogY2xlYXIuICBQcmlvcml0 eSBkb2Vzbid0IG1hdHRlciBoZXJlLgorCQkgKi8KKwkJbGlzdF9hZGRfdGFpbCgmbXNnLT5s aW5rLCAmc21iX2luZm8tPnhtaXRfbXNncyk7CisJCXN0YXJ0X25leHRfbXNnKHNtYl9pbmZv LCBmbGFncyk7CisKKwkJaTJjX3BvbGwoJnNtYl9pbmZvLT5jbGllbnQsIDApOworCQl3aGls ZSAoIVNNQl9JRExFKHNtYl9pbmZvKSkgeworCQkJdWRlbGF5KDUwMCk7CisJCQlpZiAoc21i X2luZm8tPnJ0Y191c190aW1lciA+IDApIHsKKwkJCQlzbWJfaW5mby0+cnRjX3VzX3RpbWVy IC09IDUwMDsKKwkJCQlpZiAoc21iX2luZm8tPnJ0Y191c190aW1lciA8PSAwKSB7CisJCQkJ CXJldHJ5X3RpbWVvdXQoKHVuc2lnbmVkIGxvbmcpIHNtYl9pbmZvKTsKKwkJCQkJZGVsX3Rp bWVyKCZzbWJfaW5mby0+cmV0cnlfdGltZXIpOworCQkJCX0KKwkJCX0KKwkJCWkyY19wb2xs KCZzbWJfaW5mby0+Y2xpZW50LCA1MDApOworCQl9CisJCXJldHVybjsKKwl9CisKKworCWlm IChwcmlvcml0eSA+IDApCisJCWxpc3RfYWRkX3RhaWwoJm1zZy0+bGluaywgJnNtYl9pbmZv LT5ocF94bWl0X21zZ3MpOworCWVsc2UKKwkJbGlzdF9hZGRfdGFpbCgmbXNnLT5saW5rLCAm c21iX2luZm8tPnhtaXRfbXNncyk7CisJc3RhcnRfbmV4dF9tc2coc21iX2luZm8sIGZsYWdz KTsKKworCWlmIChzbWJfaW5mby0+c21iX2RlYnVnICYgU01CX0RFQlVHX1RJTUlORykgewor CQlzdHJ1Y3QgdGltZXZhbCAgICAgdDsKKwkJZG9fZ2V0dGltZW9mZGF5KCZ0KTsKKwkJcHJp bnRrKEtFUk5fSU5GTworCQkgICAgICAgIioqRW5xdWV1ZSAlMDJ4ICUwMng6ICVsZC4lNi42 bGRcbiIsCisJCSAgICAgICBtc2ctPmRhdGFbMF0sIG1zZy0+ZGF0YVsxXSwgdC50dl9zZWMs IHQudHZfdXNlYyk7CisJfQorfQorCisvKgorICogSW5zdGVhZCBvZiBoYXZpbmcgb3VyIG93 biB0aW1lciB0byBwZXJpb2RpY2FsbHkgY2hlY2sgdGhlIG1lc3NhZ2UKKyAqIGZsYWdzLCB3 ZSBsZXQgdGhlIG1lc3NhZ2UgaGFuZGxlciBkcml2ZSB1cy4KKyAqLworc3RhdGljIHZvaWQg cmVxdWVzdF9ldmVudHModm9pZCAqc2VuZF9pbmZvKQoreworCXN0cnVjdCBzbWJfaW5mbyAq c21iX2luZm8gPSAoc3RydWN0IHNtYl9pbmZvICopIHNlbmRfaW5mbzsKKwl1bnNpZ25lZCBs b25nIG9mbGFncywgKmZsYWdzOworCisJLyoKKwkgKiBJZiB3ZSBhcmUgc3RvcHBpbmcsIGp1 c3QgaWdub3JlIHJlcXVlc3RzIGZvciBldmVudHMuICBJdCdzCisJICogbm90IGEgYmlnIGRl YWwgaWYgdGhlIHN0b3AgZmFpbHMgYW5kIHdlIG1pc3Mgb25lIG9mCisJICogdGhlc2UuCisJ ICovCisJaWYgKHNtYl9pbmZvLT5zdG9wcGluZyB8fCAhc21iX2luZm8tPmhhc19ldmVudF9i dWZmZXIpCisJCXJldHVybjsKKworCWZsYWdzID0gaXBtaV9zbWJfbG9ja19jb25kKHNtYl9p bmZvLCAmb2ZsYWdzKTsKKwkvKgorCSAqIFJlcXVlc3QgZmxhZ3MgZmlyc3QsIG5vdCBldmVu dHMsIGJlY2F1c2UgdGhlIGxvd2VyIGxheWVyCisJICogZG9lc24ndCBoYXZlIGEgd2F5IHRv IHNlbmQgYW4gYXR0ZW50aW9uLiAgQnV0IG1ha2Ugc3VyZQorCSAqIGV2ZW50IGNoZWNraW5n IHN0aWxsIGhhcHBlbnMuCisJICovCisJc21iX2luZm8tPnJlcV9ldmVudHMgPSAxOworCWlm IChTTUJfSURMRShzbWJfaW5mbykpCisJCXN0YXJ0X2ZsYWdfZmV0Y2goc21iX2luZm8sIGZs YWdzKTsKKwllbHNlIHsKKwkJc21iX2luZm8tPnJlcV9mbGFncyA9IDE7CisJCWlwbWlfc21i X3VubG9ja19jb25kKHNtYl9pbmZvLCBmbGFncyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBz ZXRfcnVuX3RvX2NvbXBsZXRpb24odm9pZCAqc2VuZF9pbmZvLCBpbnQgaV9ydW5fdG9fY29t cGxldGlvbikKK3sKKwlzdHJ1Y3Qgc21iX2luZm8gKnNtYl9pbmZvID0gKHN0cnVjdCBzbWJf aW5mbyAqKSBzZW5kX2luZm87CisKKwlzbWJfaW5mby0+cnVuX3RvX2NvbXBsZXRpb24gPSBp X3J1bl90b19jb21wbGV0aW9uOworCS8qCisJICogTm90ZSB0aGF0IGlmIHRoaXMgZG9lcyBu b3QgY29tcGlsZSwgdGhlcmUgYXJlIHNvbWUgSTJDCisJICogY2hhbmdlcyB0aGF0IHlvdSBu ZWVkIHRvIGhhbmRsZSB0aGlzIHByb3Blcmx5LgorCSAqLworCWlmIChpX3J1bl90b19jb21w bGV0aW9uKSB7CisJCWkyY19wb2xsKCZzbWJfaW5mby0+Y2xpZW50LCAwKTsKKwkJd2hpbGUg KCFTTUJfSURMRShzbWJfaW5mbykpIHsKKwkJCXVkZWxheSg1MDApOworCQkJaWYgKHNtYl9p bmZvLT5ydGNfdXNfdGltZXIgPiAwKSB7CisJCQkJc21iX2luZm8tPnJ0Y191c190aW1lciAt PSA1MDA7CisJCQkJaWYgKHNtYl9pbmZvLT5ydGNfdXNfdGltZXIgPD0gMCkgeworCQkJCQly ZXRyeV90aW1lb3V0KCh1bnNpZ25lZCBsb25nKSBzbWJfaW5mbyk7CisJCQkJCWRlbF90aW1l cigmc21iX2luZm8tPnJldHJ5X3RpbWVyKTsKKwkJCQl9CisJCQl9CisJCQlpMmNfcG9sbCgm c21iX2luZm8tPmNsaWVudCwgNTAwKTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgcG9s bCh2b2lkICpzZW5kX2luZm8pCit7CisJc3RydWN0IHNtYl9pbmZvICpzbWJfaW5mbyA9IHNl bmRfaW5mbzsKKwlpMmNfcG9sbCgmc21iX2luZm8tPmNsaWVudCwgMTApOworfQorCitzdGF0 aWMgaW50IGluY191c2Vjb3VudCh2b2lkICpzZW5kX2luZm8pCit7CisJc3RydWN0IHNtYl9p bmZvICpzbWJfaW5mbyA9IHNlbmRfaW5mbzsKKwlpMmNfdXNlX2NsaWVudCgmc21iX2luZm8t PmNsaWVudCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRlY191c2Vjb3VudCh2 b2lkICpzZW5kX2luZm8pCit7CisJc3RydWN0IHNtYl9pbmZvICpzbWJfaW5mbyA9IHNlbmRf aW5mbzsKKwlpMmNfcmVsZWFzZV9jbGllbnQoJnNtYl9pbmZvLT5jbGllbnQpOworfQorCitz dGF0aWMgaW50IHNtYl9zdGFydF9wcm9jZXNzaW5nKHZvaWQgICAgICAgKnNlbmRfaW5mbywK KwkJCQlpcG1pX3NtaV90IGludGYpCit7CisJc3RydWN0IHNtYl9pbmZvICpzbWJfaW5mbyA9 IHNlbmRfaW5mbzsKKwlpbnQgICAgICAgICAgICAgcnY7CisKKwlzbWJfaW5mby0+aW50ZiA9 IGludGY7CisKKwlydiA9IGkyY19hdHRhY2hfY2xpZW50KCZzbWJfaW5mby0+Y2xpZW50KTsK KwlpZiAocnYpIHsKKwkJc21iX2luZm8tPmludGYgPSBOVUxMOworCQlwcmludGsoS0VSTl9F UlIKKwkJICAgICAgICJzbWJfZm91bmRfb25lX2FkZHJfcHJvYzoiCisJCSAgICAgICAiIFVu YWJsZSB0byBhdHRhY2ggaTJjIGNsaWVudDogZXJyb3IgJWRcbiIsCisJCSAgICAgICBydik7 CisJfQorCisJcmV0dXJuIHJ2OworfQorCitzdGF0aWMgc3RydWN0IGlwbWlfc21pX2hhbmRs ZXJzIGhhbmRsZXJzID0geworCS5vd25lciAgICAgICAgICAgICAgICAgPSBUSElTX01PRFVM RSwKKwkuc3RhcnRfcHJvY2Vzc2luZyAgICAgID0gc21iX3N0YXJ0X3Byb2Nlc3NpbmcsCisJ LnNlbmRlcgkJICAgICAgID0gc2VuZGVyLAorCS5yZXF1ZXN0X2V2ZW50cyAgICAgICAgPSBy ZXF1ZXN0X2V2ZW50cywKKwkuc2V0X3J1bl90b19jb21wbGV0aW9uID0gc2V0X3J1bl90b19j b21wbGV0aW9uLAorCS5wb2xsCQkgICAgICAgPSBwb2xsLAorCS5pbmNfdXNlY291bnQJICAg ICAgID0gaW5jX3VzZWNvdW50LAorCS5kZWNfdXNlY291bnQJICAgICAgID0gZGVjX3VzZWNv dW50Cit9OworCitzdGF0aWMgaW50IHR5cGVfZmlsZV9yZWFkX3Byb2MoY2hhciAqcGFnZSwg Y2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCisJCQkgICAgICAgaW50IGNvdW50LCBpbnQgKmVv Ziwgdm9pZCAqZGF0YSkKK3sKKwlyZXR1cm4gc3ByaW50ZihwYWdlLCAic21iXG4iKTsKK30K Kworc3RhdGljIGludCBzdGF0X2ZpbGVfcmVhZF9wcm9jKGNoYXIgKnBhZ2UsIGNoYXIgKipz dGFydCwgb2ZmX3Qgb2ZmLAorCQkJICAgICAgIGludCBjb3VudCwgaW50ICplb2YsIHZvaWQg KmRhdGEpCit7CisJY2hhciAgICAgICAgICAgICpvdXQgPSAoY2hhciAqKSBwYWdlOworCXN0 cnVjdCBzbWJfaW5mbyAqc21iX2luZm8gPSBkYXRhOworCisJb3V0ICs9IHNwcmludGYob3V0 LCAic2VudF9tZXNzYWdlczogICAgICAgICAgJXVcbiIsCisJCSAgICAgICBzbWJfZ2V0X3N0 YXQoc21iX2luZm8sIHNlbnRfbWVzc2FnZXMpKTsKKwlvdXQgKz0gc3ByaW50ZihvdXQsICJz ZW50X21lc3NhZ2VzX3BhcnRzOiAgICAldVxuIiwKKwkJICAgICAgIHNtYl9nZXRfc3RhdChz bWJfaW5mbywgc2VudF9tZXNzYWdlc19wYXJ0cykpOworCW91dCArPSBzcHJpbnRmKG91dCwg InNlbmRfcmV0cmllczogICAgICAgICAgICV1XG4iLAorCQkgICAgICAgc21iX2dldF9zdGF0 KHNtYl9pbmZvLCBzZW5kX3JldHJpZXMpKTsKKwlvdXQgKz0gc3ByaW50ZihvdXQsICJzZW5k X2Vycm9yczogICAgICAgICAgICAldVxuIiwKKwkJICAgICAgIHNtYl9nZXRfc3RhdChzbWJf aW5mbywgc2VuZF9lcnJvcnMpKTsKKwlvdXQgKz0gc3ByaW50ZihvdXQsICJyZWNlaXZlZF9t ZXNzYWdlczogICAgICAldVxuIiwKKwkJICAgICAgIHNtYl9nZXRfc3RhdChzbWJfaW5mbywg cmVjZWl2ZWRfbWVzc2FnZXMpKTsKKwlvdXQgKz0gc3ByaW50ZihvdXQsICJyZWNlaXZlZF9t ZXNzYWdlX3BhcnRzOiAldVxuIiwKKwkJICAgICAgIHNtYl9nZXRfc3RhdChzbWJfaW5mbywg cmVjZWl2ZWRfbWVzc2FnZV9wYXJ0cykpOworCW91dCArPSBzcHJpbnRmKG91dCwgInJlY2Vp dmVfcmV0cmllczogICAgICAgICV1XG4iLAorCQkgICAgICAgc21iX2dldF9zdGF0KHNtYl9p bmZvLCByZWNlaXZlX3JldHJpZXMpKTsKKwlvdXQgKz0gc3ByaW50ZihvdXQsICJyZWNlaXZl X2Vycm9yczogICAgICAgICAldVxuIiwKKwkJICAgICAgIHNtYl9nZXRfc3RhdChzbWJfaW5m bywgcmVjZWl2ZV9lcnJvcnMpKTsKKwlvdXQgKz0gc3ByaW50ZihvdXQsICJmbGFnX2ZldGNo ZXM6ICAgICAgICAgICAldVxuIiwKKwkJICAgICAgIHNtYl9nZXRfc3RhdChzbWJfaW5mbywg ZmxhZ19mZXRjaGVzKSk7CisJb3V0ICs9IHNwcmludGYob3V0LCAiaG9zZWQ6ICAgICAgICAg ICAgICAgICAgJXVcbiIsCisJCSAgICAgICBzbWJfZ2V0X3N0YXQoc21iX2luZm8sIGhvc2Vk KSk7CisJb3V0ICs9IHNwcmludGYob3V0LCAiZXZlbnRzOiAgICAgICAgICAgICAgICAgJXVc biIsCisJCSAgICAgICBzbWJfZ2V0X3N0YXQoc21iX2luZm8sIGV2ZW50cykpOworCisJcmV0 dXJuIChvdXQgLSAoKGNoYXIgKikgcGFnZSkpOworfQorCisKK3N0YXRpYyBpbnQgYXR0YWNo X2FkYXB0ZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyBpbnQgZGV0 YWNoX2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKK3N0YXRpYyBzdHJ1Y3Qg aTJjX2RyaXZlciBzbWJfaTJjX2RyaXZlciA9IHsKKwkuYXR0YWNoX2FkYXB0ZXIgPSBhdHRh Y2hfYWRhcHRlciwKKwkuZGV0YWNoX2NsaWVudCAgPSBkZXRhY2hfY2xpZW50LAorCS5kcml2 ZXIgICAgICAgICA9IHsKKwkJLm5hbWUgID0gImlwbWlfc21iIgorCX0KKy8vCS5kZXRlY3QJ CT0gCisvLwkuYWRkcmVzc19kYXRhCT0gJmFkZHJfZGF0YSwKK307CisKK3N0YXRpYyBpbnQg ZG9fY21kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBsZW4sIHVuc2lnbmVkIGNo YXIgKm1zZywKKwkJICBpbnQgKnJlc3BfbGVuLCB1bnNpZ25lZCBjaGFyICpyZXNwKQorewor CWludCByZXRyeV9jbnQ7CisJaW50IHJldDsKKworCXJldHJ5X2NudCA9IFNNQl9TRU5EX1JF VFJJRVM7CisgcmV0cnkxOgorCXJldCA9IGkyY19zbWJ1c193cml0ZV9ibG9ja19kYXRhKGNs aWVudCwgU01CX0lQTUlfUkVRVUVTVCwgbGVuLCBtc2cpOworCWlmIChyZXQpIHsKKwkJcmV0 cnlfY250LS07CisJCWlmIChyZXRyeV9jbnQgPiAwKQorCQkJZ290byByZXRyeTE7CisJCXJl dHVybiAtRU5PREVWOworCX0KKworCXJldCA9IC1FTk9ERVY7CisJcmV0cnlfY250ID0gU01C X1JFQ1ZfUkVUUklFUzsKKwl3aGlsZSAocmV0cnlfY250ID4gMCkgeworCQlyZXQgPSBpMmNf c21idXNfcmVhZF9ibG9ja19kYXRhKGNsaWVudCwgU01CX0lQTUlfUkVTUE9OU0UsCisJCQkJ CQlyZXNwKTsKKwkJaWYgKHJldCA+IDApCisJCQlicmVhazsKKwkJbXNsZWVwKFNNQl9NU0df TVNFQyk7CisJCXJldHJ5X2NudC0tOworCQlpZiAocmV0cnlfY250IDw9IDApCisJCQlicmVh azsKKwl9CisKKwlpZiAocmV0ID4gMCkgeworCQkvKiBWYWxpZGF0ZSB0aGF0IHRoZSByZXNw b25zZSBpcyBjb3JyZWN0LiAqLworCQlpZiAocmV0IDwgMyB8fAorCQkgICAgKHJlc3BbMF0g IT0gKG1zZ1swXSB8ICgxIDw8IDIpKSkgfHwKKwkJICAgIChyZXNwWzFdICE9IG1zZ1sxXSkp CisJCQlyZXQgPSAtRUlOVkFMOworCQllbHNlIHsKKwkJCSpyZXNwX2xlbiA9IHJldDsKKwkJ CXJldCA9IDA7CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGlw bWlfc21iX2RldGVjdF9oYXJkd2FyZShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGlu dCBhZGRyLAorCQkJCSAgICBpbnQgZGVidWcsIHN0cnVjdCBzbWJfaW5mbyAqKnNtYl9pbmZv KQoreworCXVuc2lnbmVkIGNoYXIgICAgIG1zZ1szXTsKKwl1bnNpZ25lZCBjaGFyICAgICAq cmVzcDsKKwlzdHJ1Y3Qgc21iX2luZm8gICAqaW5mbzsKKwlpbnQgICAgICAgICAgICAgICBy diA9IDA7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKKwlpbnQgICAgICAgICAgICAg ICBsZW47CisKKwlyZXNwID0ga21hbGxvYyhJUE1JX01BWF9NU0dfTEVOR1RILCBHRlBfS0VS TkVMKTsKKwlpZiAoIXJlc3ApCisJCXJldHVybiAtRU5PTUVNOworCisJaW5mbyA9IGt6YWxs b2Moc2l6ZW9mKCppbmZvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpbmZvKSB7CisJCWtmcmVl KHJlc3ApOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwljbGllbnQgPSAmaW5mby0+Y2xp ZW50OworCXN0cmxjcHkoY2xpZW50LT5uYW1lLCAiSVBNSSIsIEkyQ19OQU1FX1NJWkUpOwor CWNsaWVudC0+YWRkciA9IGFkZHI7CisJY2xpZW50LT5hZGFwdGVyID0gYWRhcHRlcjsKKwlj bGllbnQtPmRyaXZlciA9ICZzbWJfaTJjX2RyaXZlcjsKKworCS8qIERvIGEgR2V0IERldmlj ZSBJRCBjb21tYW5kLCBzaW5jZSBpdCBjb21lcyBiYWNrIHdpdGggc29tZQorCSAgIHVzZWZ1 bCBpbmZvLiAqLworCW1zZ1swXSA9IElQTUlfTkVURk5fQVBQX1JFUVVFU1QgPDwgMjsKKwlt c2dbMV0gPSBJUE1JX0dFVF9ERVZJQ0VfSURfQ01EOworCXJ2ID0gZG9fY21kKGNsaWVudCwg MiwgbXNnLCAmbGVuLCByZXNwKTsKKwlpZiAocnYpCisJCWdvdG8gb3V0OworCisJcnYgPSBp cG1pX2RlbWFuZ2xlX2RldmljZV9pZChyZXNwLCBsZW4sICZpbmZvLT5kZXZpY2VfaWQpOwor CWlmIChydikgCisJCWdvdG8gb3V0OworCisJaW5mby0+Y2xpZW50ID0gKmNsaWVudDsKKwlp MmNfc2V0X2NsaWVudGRhdGEoJmluZm8tPmNsaWVudCwgaW5mbyk7CisJaW5mby0+c21iX2Rl YnVnID0gZGVidWc7CisKKwkvKiBOb3cgY2hlY2sgZm9yIHN5c3RlbSBpbnRlcmZhY2UgY2Fw YWJpbGl0aWVzICovCisJbXNnWzBdID0gSVBNSV9ORVRGTl9BUFBfUkVRVUVTVCA8PCAyOwor CW1zZ1sxXSA9IElQTUlfR0VUX1NZU1RFTV9JTlRFUkZBQ0VfQ0FQQUJJTElUSUVTX0NNRDsK Kwltc2dbMl0gPSAwOyAvKiBTU0lGICovCisJcnYgPSBkb19jbWQoY2xpZW50LCAzLCBtc2cs ICZsZW4sIHJlc3ApOworCWlmICghcnYgJiYgKGxlbiA+PSAzKSAmJiAocmVzcFsyXSA9PSAw KSkgeworCQlpZiAobGVuIDwgNykgeworCQkJaWYgKHNtYl9kYmdfcHJvYmUpCisJCQkJcHJp bnRrKEtFUk5fSU5GTworCQkJCSAgICAgICBQRlggIlNTSUYgaW5mbyB0b28gc2hvcnQ6ICVk XG4iLCBsZW4pOworCQkJZ290byBub19zdXBwb3J0OworCQl9CisKKwkJLyogR290IGEgZ29v ZCBTU0lGIHJlc3BvbnNlLCBoYW5kbGUgaXQuICovCisJCWluZm8tPm1heF94bWl0X21zZ19z aXplID0gcmVzcFs1XTsKKwkJaW5mby0+bWF4X3JlY3ZfbXNnX3NpemUgPSByZXNwWzZdOwor CQlpbmZvLT5tdWx0aV9zdXBwb3J0ID0gKHJlc3BbNF0gPj4gNikgJiAweDM7CisJCWluZm8t PnN1cHBvcnRzX3BlYyA9IChyZXNwWzRdID4+IDMpICYgMHgxOworCisJCS8qIFNhbml0aXpl IHRoZSBkYXRhICovCisJCXN3aXRjaCAoaW5mby0+bXVsdGlfc3VwcG9ydCkgeworCQljYXNl IFNNQl9OT19NVUxUSToKKwkJCXByaW50ayhLRVJOX0lORk8gImlwbWlfc21iOiBObyBNdWx0 aSBTdXBwb3J0LiBNYXggUmN2IFNpemUgJWQsIE1heCBYbWl0IFNpemUgJWRcbiIsIGluZm8t Pm1heF9yZWN2X21zZ19zaXplLCBpbmZvLT5tYXhfeG1pdF9tc2dfc2l6ZSk7CisJCQlpZiAo aW5mby0+bWF4X3htaXRfbXNnX3NpemUgPiAzMikKKwkJCQlpbmZvLT5tYXhfeG1pdF9tc2df c2l6ZSA9IDMyOworCQkJaWYgKGluZm8tPm1heF9yZWN2X21zZ19zaXplID4gMzIpCisJCQkJ aW5mby0+bWF4X3JlY3ZfbXNnX3NpemUgPSAzMjsKKwkJCWJyZWFrOworCisJCWNhc2UgU01C X01VTFRJXzJfUEFSVDoKKwkJCXByaW50ayhLRVJOX0lORk8gImlwbWlfc21iOiBNdWx0aSAy IFBhcnQgU3VwcG9ydC4gTWF4IFJjdiBTaXplICVkLCBNYXggWG1pdCBTaXplICVkXG4iLCBp bmZvLT5tYXhfcmVjdl9tc2dfc2l6ZSwgaW5mby0+bWF4X3htaXRfbXNnX3NpemUpOworCQkJ aWYgKGluZm8tPm1heF94bWl0X21zZ19zaXplID4gNjQpCisJCQkJaW5mby0+bWF4X3htaXRf bXNnX3NpemUgPSA2NDsKKwkJCWlmIChpbmZvLT5tYXhfcmVjdl9tc2dfc2l6ZSA+IDYyKQor CQkJCWluZm8tPm1heF9yZWN2X21zZ19zaXplID0gNjI7CisJCQlicmVhazsKKworCQljYXNl IFNNQl9NVUxUSV9uX1BBUlQ6CisJCQlwcmludGsoS0VSTl9JTkZPICJpcG1pX3NtYjogTXVs dGkgTiBQYXJ0IFN1cHBvcnQuIE1heCBSY3YgU2l6ZSAlZCwgTWF4IFhtaXQgU2l6ZSAlZFxu IiwgaW5mby0+bWF4X3JlY3ZfbXNnX3NpemUsIGluZm8tPm1heF94bWl0X21zZ19zaXplKTsK KwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQkvKiBEYXRhIGlzIG5vdCBzYW5lLCBqdXN0 IGdpdmUgdXAuICovCisJCQlwcmludGsoS0VSTl9JTkZPICJpcG1pX3NtYjogSW5jb21wcmVo ZW5zaWJsZSBNdWx0aSBTdXBwb3J0IGRhdGFcbiIpOyAKKwkJCWdvdG8gbm9fc3VwcG9ydDsK KwkJfQorCX0gZWxzZSB7Cisgbm9fc3VwcG9ydDoKKwkJLyogQXNzdW1lIG5vIG11bHRpLXBh cnQgb3IgUEVDIHN1cHBvcnQgKi8KKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIkVycm9yIGZl dGNoaW5nIFNTSUY6ICVkICVkICUyLjJ4LCAiCisJCSAgICAgICAieW91ciBzeXN0ZW0gcHJv YmFibHkgZG9lc24ndCBzdXBwb3J0IHRoaXMgY29tbWFuZCBzbyAiCisJCSAgICAgICAidXNp bmcgZGVmYXVsdHNcbiIsCisJCSAgICAgICBydiwgbGVuLCByZXNwWzJdKTsKKworCQlpbmZv LT5tYXhfeG1pdF9tc2dfc2l6ZSA9IDMyOworCQlpbmZvLT5tYXhfcmVjdl9tc2dfc2l6ZSA9 IDMyOworCQlpbmZvLT5tdWx0aV9zdXBwb3J0ID0gU01CX05PX01VTFRJOworCQlpbmZvLT5z dXBwb3J0c19wZWMgPSAwOworCX0KKworCS8qIE1ha2Ugc3VyZSB0aGUgTk1JIHRpbWVvdXQg aXMgY2xlYXJlZC4gKi8KKwltc2dbMF0gPSBJUE1JX05FVEZOX0FQUF9SRVFVRVNUIDw8IDI7 CisJbXNnWzFdID0gSVBNSV9DTEVBUl9NU0dfRkxBR1NfQ01EOworCW1zZ1syXSA9IFdEVF9Q UkVfVElNRU9VVF9JTlQ7CisJcnYgPSBkb19jbWQoY2xpZW50LCAzLCBtc2csICZsZW4sIHJl c3ApOworCWlmIChydiB8fCAobGVuIDwgMykgfHwgKHJlc3BbMl0gIT0gMCkpCisJCXByaW50 ayhLRVJOX1dBUk5JTkcKKwkJICAgICAgIFBGWCAiVW5hYmxlIHRvIGNsZWFyIE5NSSB0aW1l b3V0IGZsYWdzOiAlZCAlZCAlMi4yeFxuIiwKKwkJICAgICAgIHJ2LCBsZW4sIHJlc3BbMl0p OworCisJLyogQXR0ZW1wdCB0byBlbmFibGUgdGhlIGV2ZW50IGJ1ZmZlci4gKi8KKwltc2db MF0gPSBJUE1JX05FVEZOX0FQUF9SRVFVRVNUIDw8IDI7CisJbXNnWzFdID0gSVBNSV9HRVRf Qk1DX0dMT0JBTF9FTkFCTEVTX0NNRDsKKwlydiA9IGRvX2NtZChjbGllbnQsIDIsIG1zZywg JmxlbiwgcmVzcCk7CisJaWYgKHJ2IHx8IChsZW4gPCA0KSB8fCAocmVzcFsyXSAhPSAwKSkg eworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCSAgICAgICBQRlggIkVycm9yIGdldHRpbmcg Z2xvYmFsIGVuYWJsZXM6ICVkICVkICUyLjJ4XG4iLAorCQkgICAgICAgcnYsIGxlbiwgcmVz cFsyXSk7CisJCXJ2ID0gMDsgLyogTm90IGZhdGFsICovCisJCWdvdG8gZG9uZTsKKwl9CisK KwlpZiAocmVzcFszXSAmIElQTUlfQk1DX0VWVF9NU0dfQlVGRikgeworCQlpbmZvLT5oYXNf ZXZlbnRfYnVmZmVyID0gMTsKKwkJLyogYnVmZmVyIGlzIGFscmVhZHkgZW5hYmxlZCwgbm90 aGluZyB0byBkby4gKi8KKwkJZ290byBkb25lOworCX0KKworCW1zZ1swXSA9IElQTUlfTkVU Rk5fQVBQX1JFUVVFU1QgPDwgMjsKKwltc2dbMV0gPSBJUE1JX1NFVF9CTUNfR0xPQkFMX0VO QUJMRVNfQ01EOworCW1zZ1syXSA9IHJlc3BbM10gfCBJUE1JX0JNQ19FVlRfTVNHX0JVRkY7 CisJcnYgPSBkb19jbWQoY2xpZW50LCAzLCBtc2csICZsZW4sIHJlc3ApOworCWlmIChydiB8 fCAobGVuIDwgMikpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgUEZYICJF cnJvciBlbmFibGluZyBFdmVudCBCdWZmZXIgdXNpbmcgc2V0IGdsb2JhbCBlbmFibGVzOiAl ZCAlZCAlMi4yeFxuIiwKKwkJICAgICAgIHJ2LCBsZW4sIHJlc3BbMl0pOworCQlydiA9IDA7 IC8qIE5vdCBmYXRhbCAqLworCQlnb3RvIGRvbmU7CisJfQorCisJaWYgKHJlc3BbMl0gPT0g MCkKKwkJLyogQSBzdWNjZXNzZnVsIHJldHVybiBtZWFucyB0aGUgZXZlbnQgYnVmZmVyIGlz IHN1cHBvcnRlZC4gKi8KKwkJaW5mby0+aGFzX2V2ZW50X2J1ZmZlciA9IDE7CisgZG9uZToK KworCSpzbWJfaW5mbyA9IGluZm87CisKKyBvdXQ6CisJaWYgKHJ2KQorCQlrZnJlZShpbmZv KTsKKwlrZnJlZShyZXNwKTsKKwlyZXR1cm4gcnY7Cit9CisKKyNkZWZpbmUgTUFYX1NNQl9C TUNTIDQKKy8qIG5vIGV4cHJlc3Npb25zIGFsbG93ZWQgaW4gX19NT0RVTEVfU1RSSU5HICov CisjZGVmaW5lIE1BWF9TTUJfQUREUl9QQUlSUwk4CisKKy8qIEFuIGFycmF5IG9mIFNNQiBp bnRlcmZhY2VzLiAqLworc3RhdGljIHN0cnVjdCBzbWJfaW5mbyAqc21iX2luZm9zW01BWF9T TUJfQk1DU107CisKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBhZGRyW01BWF9TTUJfQk1DUyoy XTsKK3N0YXRpYyBpbnQgbnVtX2FkZHJzOworCittb2R1bGVfcGFyYW1fYXJyYXkoYWRkciwg dXNob3J0LCAmbnVtX2FkZHJzLCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoYWRkciwgIlNldHMg dGhlIGFkZHJlc3NlcyB0byBzY2FuIGZvciBJUE1JIEJNQ3Mgb24gdGhlIFNNQnVzLiIKKwkJ ICIgQnkgZGVmYXVsdCB0aGUgZHJpdmVyIHdpbGwgc2NhbiBmb3IgYW55dGhpbmcgaXQgZmlu ZHMgaW4iCisJCSAiIERNSSBvciBBQ1BJIHRhYmxlcy4gIE90aGVyd2lzZSB5b3UgaGF2ZSB0 byBoYW5kLXNwZWNpZnkiCisJCSAiIHRoZSBhZGRyZXNzLiAgVGhpcyBpcyBhIGxpc3Qgb2Yg cGFpcnMgKGllIGEsYixjLGQpIHdoZXJlIgorCQkgIiBlYWNoIHBhaXIgZ2l2ZXMgYW4gYWRh cHRlciBhbmQgYW4gYWRkcmVzcy4gIEluIHRoZSIKKwkJICIgcHJldmlvdXMgZXhhbXBsZSBp dCB3aWxsIHNjYW4gYWRkcmVzcyBiIG9uIGFkYXB0ZXIgYSIKKwkJICIgYW5kIGFkZHJlc3Mg ZCBvbiBhZGFwdGVyIGMuIgorCQkgIiBUaGUgZmlyc3QgcGFpciBpcyBmb3IgdGhlIGZpcnN0 IGludGVyZmFjZSwgZXRjLiAgSWYgeW91IgorCQkgIiBkb24ndCBwcm92aWRlIHRoaXMgYW5k IGRvbid0IGhhdmUgRE1JL0FDUEksIGl0IHByb2JhYmx5IgorCQkgIiB3b24ndCB3b3JrLiIp OworCitzdGF0aWMgaW50IHNtYl9kZWZhdWx0cHJvYmU7Cittb2R1bGVfcGFyYW1fbmFtZWQo ZGVmYXVsdHByb2JlLCBzbWJfZGVmYXVsdHByb2JlLCBpbnQsIDApOworTU9EVUxFX1BBUk1f REVTQyhkZWZhdWx0cHJvYmUsICJOb3JtYWxseSB0aGUgZHJpdmVyIHdpbGwgbm90IHNjYW4g YW55dGhpbmciCisJCSAiIGJ1dCB0aGUgc3BlY2lmaWVkIHZhbHVlcyBhbmQgRE1JL0FDUEkg dmFsdWVzLiAgSWYgeW91IHNldCIKKwkJICIgdGhpcyB0byBub24temVybyBpdCB3aWxsIHNj YW4gYWxsIGFkZHJlc3NlcyBleGNlcHQgZm9yIgorCQkgIiBjZXJ0YWluIGRhbmdlcm91cyBv bmVzLiIpOworCitzdGF0aWMgaW50IHNsYXZlX2FkZHJzW01BWF9TTUJfQk1DU107CitzdGF0 aWMgaW50IG51bV9zbGF2ZV9hZGRyczsKK21vZHVsZV9wYXJhbV9hcnJheShzbGF2ZV9hZGRy cywgaW50LCAmbnVtX3NsYXZlX2FkZHJzLCAwKTsKK01PRFVMRV9QQVJNX0RFU0Moc2xhdmVf YWRkcnMsICJTZXQgdGhlIGRlZmF1bHQgSVBNQiBzbGF2ZSBhZGRyZXNzIGZvciIKKwkJICIg dGhlIGNvbnRyb2xsZXIuICBOb3JtYWxseSB0aGlzIGlzIDB4MjAsIGJ1dCBjYW4gYmUiCisJ CSAiIG92ZXJyaWRkZW4gYnkgdGhpcyBwYXJtLiAgVGhpcyBpcyBhbiBhcnJheSBpbmRleGVk IgorCQkgIiBieSBpbnRlcmZhY2UgbnVtYmVyLiIpOworCitzdGF0aWMgaW50IGRiZ1tNQVhf U01CX0JNQ1NdOworc3RhdGljIGludCBudW1fZGJnOworbW9kdWxlX3BhcmFtX2FycmF5KGRi ZywgaW50LCAmbnVtX2RiZywgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGRiZywgIlR1cm4gb24g ZGVidWdnaW5nLiAgQml0IDAgZW5hYmxlcyBtZXNzYWdlIGRlYnVnZ2luZywiCisJCSAiIGJp dCAxIGVuYWJsZXMgc3RhdGUgZGVidWdnaW5nLCBhbmQgYml0IDIgZW5hYmxlcyB0aW1pbmci CisJCSAiIGRlYnVnZ2luZy4gIFRoaXMgaXMgYW4gYXJyYXkgaW5kZXhlZCBieSBpbnRlcmZh Y2UgbnVtYmVyIik7CisKK21vZHVsZV9wYXJhbV9uYW1lZChkYmdfcHJvYmUsIHNtYl9kYmdf cHJvYmUsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGRiZ19wcm9iZSwgIkVuYWJsZSBk ZWJ1Z2dpbmcgb2YgcHJvYmluZyBvZiBhZGFwdGVycy4iKTsKKworLyogZm9yY2UgbGlzdCBo YXMgMiBlbnRyaWVzIC0gMDpidXMvYWRhcHRlciBubyAxOiBpMmMgYWRkciAqLworI2RlZmlu ZQlGT1JDRV9MSVNUX0VOVFJJRVMJMgorc3RhdGljIHVuc2lnbmVkIHNob3J0IGNvbnN0ICpz bWJfZm9yY2VfbGlzdFtNQVhfU01CX0JNQ1MrMV07CitzdGF0aWMgdW5zaWduZWQgc2hvcnQg c21iX2ZvcmNlc1tNQVhfU01CX0JNQ1NdW0ZPUkNFX0xJU1RfRU5UUklFUysxXTsKKworI2Rl ZmluZSBTTUJfSTJDX1NUQVJUX0FERFIJMHgyMAorI2RlZmluZSBTTUJfSTJDX0VORF9BRERS CTB4NGYKKworc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgCisJMHgx MCwgCisJSTJDX0NMSUVOVF9FTkQgfTsKKworSTJDX0NMSUVOVF9JTlNNT0RfMShJUE1JKTsK KworLyoKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbm9ybWFsX2lzYVtdID0geyBTRU5TT1JTX0lT QV9FTkQgfTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbm9ybWFsX2lzYV9yYW5nZVtdID0geyBT RU5TT1JTX0lTQV9FTkQgfTsKKyovCisjaWYgMAorc3RhdGljIHVuc2lnbmVkIHNob3J0IHJl c2VydmVkW10gPQoreworLyogQXMgZGVmaW5lZCBieSBTTUJ1cyBTcGVjLiBBcHBlbmRpeCBD ICovCisJMHgwOCwgMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywgMHgyOCwKKwkweDM3LAorLyog QXMgZGVmaW5lZCBieSBTTUJ1cyBTcGVjLiBTZWN0LiA1LjIgKi8KKwkweDAxLCAweDAyLCAw eDAzLCAweDA0LCAweDA1LAorCTB4MDYsIDB4MDcsIDB4NzgsIDB4NzksIDB4N2EsIDB4N2Is CisJMHg3YywgMHg3ZCwgMHg3ZSwgMHg3ZiwKKy8qIENvbW1vbiBQQyBhZGRyZXNzZXMgKGJh ZCBpZGVhKSAqLworCTB4MmQsIDB4NDgsIDB4NDksIC8qIHNlbnNvcnMgKi8KKwkweDUwLCAw eDUxLCAweDUyLCAweDUzLCAweDU0LCAweDU1LCAweDU2LCAweDU3LCAvKiBlZXByb21zICov CisJMHg2OSwgLyogY2xvY2sgY2hpcHMgKi8KKworCUkyQ19DTElFTlRfRU5ECit9OworI2Vu ZGlmCisKKyNpZiAwCisvL3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBzbWJfZW1wdHlfbGlzdFtd ID0geyBJMkNfQ0xJRU5UX0VORCwgSTJDX0NMSUVOVF9FTkQgfTsKK3N0YXRpYyB1bnNpZ25l ZCBzaG9ydCBzbWJfZW1wdHlfbGlzdFtdID0geyBTTUJfSTJDX1NUQVJUX0FERFIsIFNNQl9J MkNfRU5EX0FERFIgfTsKKworc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50X2FkZHJlc3NfZGF0 YSBzbWJfYWRkcmVzc19kYXRhID0geworCS5ub3JtYWxfaTJjIAkJPSBub3JtYWxfaTJjLAor Ly8JLnByb2JlCQkJPSBzbWJfZW1wdHlfbGlzdCwKKwkucHJvYmUJCQk9IG5vcm1hbF9pMmMs CisJLmlnbm9yZQkJCT0gcmVzZXJ2ZWQsCisJLmZvcmNlcwkJCT0gc21iX2ZvcmNlX2xpc3Qs Cit9OworI2VuZGlmCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcG9zX3Jlc2VydmVkX2FzKGlu dCBwb3MpCit7CisJaWYgKGFkZHJbcG9zKjIrMV0gIT0gMCkKKwkJcmV0dXJuIChhZGRyW3Bv cyoyXSA8PCAxNikgfCBhZGRyW3BvcyoyKzFdOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRp YyBpbnQgc21iX2ZvdW5kX2FkZHJfcHJvYyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIs IGludCBhZGRyLCBpbnQga2luZCkKK3sKKwlpbnQgaWQgPSBpMmNfYWRhcHRlcl9pZChhZGFw dGVyKTsKKwlpbnQgZGVidWcgPSAxOworCWludCBydjsKKwlpbnQgaTsKKwlpbnQgbmV4dF9w b3M7CisJc3RydWN0IHNtYl9pbmZvICpzbWJfaW5mbyA9IE5VTEw7CisKKwlpZiAoaWQgPj0g TUFYX1NNQl9CTUNTKQorCQlyZXR1cm4gMDsKKwlydiA9IGlwbWlfc21iX2RldGVjdF9oYXJk d2FyZShhZGFwdGVyLCBhZGRyLCBkZWJ1ZywgKHN0cnVjdCBzbWJfaW5mbyAqKikmc21iX2lu Zm8pOworCWlmIChydikgeworCQlpZiAoc21iX2RiZ19wcm9iZSkgeworCQkJcHJpbnRrKEtF Uk5fSU5GTworCQkJICAgICAgICJzbWJfZm91bmRfYWRkcl9wcm9jOk5vIElQTUkgY2xpZW50 IDB4JXg6ICVkXG4iLAorCQkJICAgICAgIGFkZHIsIHJ2KTsKKwkJfQorCQlyZXR1cm4gMDsK Kwl9CisKKwlpZiAoc21iX2RiZ19wcm9iZSkgeworCQlwcmludGsoS0VSTl9JTkZPCisJCSAg ICAgICAic21iX2ZvdW5kX2FkZHJfcHJvYzogaTJjX3Byb2JlIGZvdW5kIGRldmljZSBhdCIK KwkJICAgICAgICIgaTJjIGFkZHJlc3MgJXhcbiIsIGFkZHIpOworCX0KKworCXNwaW5fbG9j a19pbml0KCZzbWJfaW5mby0+bXNnX2xvY2spOworCUlOSVRfTElTVF9IRUFEKCZzbWJfaW5m by0+eG1pdF9tc2dzKTsKKwlJTklUX0xJU1RfSEVBRCgmc21iX2luZm8tPmhwX3htaXRfbXNn cyk7CisJc21iX2luZm8tPnNtYl9zdGF0ZSA9IFNNQl9OT1JNQUw7CisJaW5pdF90aW1lcigm c21iX2luZm8tPnJldHJ5X3RpbWVyKTsKKwlzbWJfaW5mby0+cmV0cnlfdGltZXIuZGF0YSA9 ICh1bnNpZ25lZCBsb25nKSBzbWJfaW5mbzsKKwlzbWJfaW5mby0+cmV0cnlfdGltZXIuZnVu Y3Rpb24gPSByZXRyeV90aW1lb3V0OworCisJZm9yIChpID0gMDsgaSA8IFNNQl9OVU1fU1RB VFM7IGkrKykKKwkJYXRvbWljX3NldCgmc21iX2luZm8tPnN0YXRzW2ldLCAwKTsKKworCW5l eHRfcG9zID0gLTE7CisJZm9yIChpID0gMDsgaSA8IE1BWF9TTUJfQk1DUzsgaSsrKSB7CisJ CXVuc2lnbmVkIGludCByZXMgPSBwb3NfcmVzZXJ2ZWRfYXMoaSk7CisKKwkJaWYgKHJlcyA9 PSAoKGlkIDw8IDE2KSB8IGFkZHIpKSB7CisJCQkvKiBXZSBoYXZlIGEgcmVzZXJ2ZWQgcG9z aXRpb24sIHVzZSBpdC4gKi8KKwkJCW5leHRfcG9zID0gaTsKKwkJCWJyZWFrOworCQl9CisK KwkJLyogQ2xhaW0gdGhlIGZpcnN0IHVudXNlZCBwb3NpdGlvbiAqLworCQlpZiAoIXJlcyAm JiAobmV4dF9wb3MgPT0gLTEpICYmIChzbWJfaW5mb3NbbmV4dF9wb3NdID09IE5VTEwpKQor CQkJbmV4dF9wb3MgPSBpOworCX0KKwlpZiAobmV4dF9wb3MgPT0gLTEpIHsKKwkJcnYgPSAt RUJVU1k7CisJCWdvdG8gb3V0X2VycjsKKwl9CisKKwlpZiAoc21iX2luZm8tPnN1cHBvcnRz X3BlYykKKwkJc21iX2luZm8tPmNsaWVudC5mbGFncyB8PSBJMkNfQ0xJRU5UX1BFQzsKKwor CXNtYl9pbmZvLT5wb3MgPSBuZXh0X3BvczsKKwlzbWJfaW5mb3NbbmV4dF9wb3NdID0gc21i X2luZm87CisKKwlydiA9IGlwbWlfcmVnaXN0ZXJfc21pKCZoYW5kbGVycywKKwkJCSAgICAg ICBzbWJfaW5mbywKKwkJCSAgICAgICAmc21iX2luZm8tPmRldmljZV9pZCwKKwkJCSAgICAg ICAmc21iX2luZm8tPmNsaWVudC5kZXYsCisJCQkgICAgICAgImJtYyIsCisJCQkgICAgICAg c2xhdmVfYWRkcnNbbmV4dF9wb3NdKTsKKwkgaWYgKHJ2KSB7CisJCWlmIChzbWJfaW5mby0+ aW50ZikKKwkJCS8qIE9ubHkgYXR0YWNoZWQgaWYgaW50ZiBpcyBzZXQuICovCisJCQlpMmNf ZGV0YWNoX2NsaWVudCgmc21iX2luZm8tPmNsaWVudCk7CisJCXNtYl9pbmZvc1tuZXh0X3Bv c10gPSBOVUxMOworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgIFBGWCAiVW5hYmxlIHRv IHJlZ2lzdGVyIGRldmljZTogZXJyb3IgJWRcbiIsCisJCSAgICAgICBydik7CisJCWdvdG8g b3V0X2VycjsKKwl9CisKKwlydiA9IGlwbWlfc21pX2FkZF9wcm9jX2VudHJ5KHNtYl9pbmZv LT5pbnRmLCAidHlwZSIsCisJCQkJICAgICB0eXBlX2ZpbGVfcmVhZF9wcm9jLAorCQkJCSAg ICAgc21iX2luZm8sIFRISVNfTU9EVUxFKTsKKwlpZiAocnYpIHsKKwkJcHJpbnRrKEtFUk5f RVJSIFBGWCAiVW5hYmxlIHRvIGNyZWF0ZSBwcm9jIGVudHJ5OiAlZFxuIiwKKwkJICAgICAg IHJ2KTsKKwkJZ290byBvdXRfZXJyX3VucmVnOworCX0KKworCXJ2ID0gaXBtaV9zbWlfYWRk X3Byb2NfZW50cnkoc21iX2luZm8tPmludGYsICJzbWJfc3RhdHMiLAorCQkJCSAgICAgc3Rh dF9maWxlX3JlYWRfcHJvYywKKwkJCQkgICAgIHNtYl9pbmZvLCBUSElTX01PRFVMRSk7CisJ aWYgKHJ2KSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIlVuYWJsZSB0byBjcmVhdGUgcHJv YyBlbnRyeTogJWRcbiIsCisJCSAgICAgICBydik7CisJCWdvdG8gb3V0X2Vycl91bnJlZzsK Kwl9CisKKwlyZXR1cm4gMDsKKworIG91dF9lcnJfdW5yZWc6CisJaXBtaV91bnJlZ2lzdGVy X3NtaShzbWJfaW5mby0+aW50Zik7CisKKyBvdXRfZXJyOgorCWtmcmVlKHNtYl9pbmZvKTsK KwlyZXR1cm4gcnY7Cit9CisKK3N0YXRpYyBpbnQgYXR0YWNoX2FkYXB0ZXIoc3RydWN0IGky Y19hZGFwdGVyICphZGFwdGVyKQoreworCWludCBpZCA9IGkyY19hZGFwdGVyX2lkKGFkYXB0 ZXIpOworCisjaWZkZWYgQ09ORklHX0NQQ0k2MjAwCisJaWYgKGlkID09IDApCisJCXJldHVy biAwOworI2VuZGlmCisJaWYgKHNtYl9kYmdfcHJvYmUpCisJCXByaW50ayhLRVJOX0lORk8g ImluaXRfb25lX3NtYjogQ2hlY2tpbmcgU01CdXMgYWRhcHRlciAlZDoiCisJCSAgICAgICAi ICVzXG4iLCBpZCwgYWRhcHRlci0+bmFtZSk7CisKKwlpZiAoIShpMmNfZ2V0X2Z1bmN0aW9u YWxpdHkoYWRhcHRlcikgJiAoSTJDX0ZVTkNfU01CVVNfQkxPQ0tfREFUQSkpKQorCQlyZXR1 cm4gMDsKKworCWlmIChzbWJfZGJnX3Byb2JlKQorCQlwcmludGsoS0VSTl9JTkZPICJpbml0 X29uZV9zbWI6IGZvdW5kIFNNQnVzIGFkYXB0ZXI6IgorCQkgICAgICAgIiAlc1xuIiwgYWRh cHRlci0+bmFtZSk7CisKKwlpZiAoIWkyY19ub25fYmxvY2tpbmdfY2FwYWJsZShhZGFwdGVy KSkgeworCSAgICBpZiAoc21iX2RiZ19wcm9iZSkKKwkJICAgIHByaW50ayhLRVJOX0lORk8K KwkJCSAgICJpbml0X29uZV9zbWI6IGFkYXB0ZXIgY2FuJ3QgZG8gbm9uX2Jsb2NraW5nOiAl c1xuIiwKKwkJCSAgIGFkYXB0ZXItPm5hbWUpOworCSAgICByZXR1cm4gMDsKKwl9CisKKwlp MmNfcHJvYmUoYWRhcHRlciwgJmFkZHJfZGF0YSwgc21iX2ZvdW5kX2FkZHJfcHJvYyk7CisK KwlyZXR1cm4gMDsKK30KKworaW50IGNsZWFudXBfb25lX3NtYihzdHJ1Y3Qgc21iX2luZm8g KnRvX2NsZWFuKQoreworCWludCBydjsKKworCWlmICghdG9fY2xlYW4pCisJCXJldHVybiAw OworCisJLyogRG9uJ3QgYWxsb3cgdGhlIHVwcGVyIGxheWVyIHRvIHJlcXVlc3QgZXZlbnRz IGFueSBtb3JlLiAqLworCXRvX2NsZWFuLT5zdG9wcGluZyA9IDE7CisKKwkvKiBtYWtlIHN1 cmUgdGhlIGRyaXZlciBpcyBub3QgbG9va2luZyBmb3IgZmxhZ3MgYW55IG1vcmUuICovCisJ d2hpbGUgKHRvX2NsZWFuLT5zbWJfc3RhdGUgIT0gU01CX05PUk1BTCkKKwkJbXNsZWVwKDEp OworCisJLyoKKwkgKiBBZnRlciB0aGlzIHBvaW50LCB3ZSB3b24ndCBkZWxpdmVyIGFueXRo aW5nIGFzeW5jaHJvbm91c2x5CisJICogdG8gdGhlIG1lc3NhZ2UgaGFuZGxlci4gIFdlIGNh biB1bnJlZ2lzdGVyIG91cnNlbGYuCisJICovCisJcnYgPSBpcG1pX3VucmVnaXN0ZXJfc21p KHRvX2NsZWFuLT5pbnRmKTsKKwlpZiAocnYpIHsKKwkJdG9fY2xlYW4tPnN0b3BwaW5nID0g MDsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICBQRlggIlVuYWJsZSB0byB1bnJlZ2lz dGVyIGRldmljZTogZXJybm89JWRcbiIsCisJCSAgICAgICBydik7CisJCXJldHVybiBydjsK Kwl9CisKKwkvKgorCSAqIE5vIG1lc3NhZ2UgY2FuIGJlIG91dHN0YW5kaW5nIG5vdywgd2Ug aGF2ZSByZW1vdmVkIHRoZQorCSAqIHVwcGVyIGxheWVyIGFuZCBpdCBwZXJtaXR0ZWQgdXMg dG8gZG8gc28uCisJICovCisKKwlydiA9IGkyY19kZXRhY2hfY2xpZW50KCZ0b19jbGVhbi0+ Y2xpZW50KTsKKwlpZiAocnYpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICBQRlgg IlVuYWJsZSB0byBkZXRhY2ggU01CVVMgY2xpZW50OiBlcnJubz0lZFxuIiwKKwkJICAgICAg IHJ2KTsKKwkJcmV0dXJuIHJ2OworCX0KKworCXNtYl9pbmZvc1t0b19jbGVhbi0+cG9zXSA9 IE5VTEw7CisJa2ZyZWUodG9fY2xlYW4pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50 IGRldGFjaF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3Qg c21iX2luZm8gKnNtYl9pbmZvID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwly ZXR1cm4gY2xlYW51cF9vbmVfc21iKHNtYl9pbmZvKTsKK30KKworI2lmZGVmIENPTkZJR19B Q1BJX0lOVEVSUFJFVEVSCisKKyNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CisKKy8qCisgKiBE ZWZpbmVkIGluIHRoZSBJUE1JIDIuMCBzcGVjLgorICovCitzdHJ1Y3QgU1BNSVRhYmxlIHsK KwlzOAlTaWduYXR1cmVbNF07CisJdTMyCUxlbmd0aDsKKwl1OAlSZXZpc2lvbjsKKwl1OAlD aGVja3N1bTsKKwlzOAlPRU1JRFs2XTsKKwlzOAlPRU1UYWJsZUlEWzhdOworCXM4CU9FTVJl dmlzaW9uWzRdOworCXM4CUNyZWF0b3JJRFs0XTsKKwlzOAlDcmVhdG9yUmV2aXNpb25bNF07 CisJdTgJSW50ZXJmYWNlVHlwZTsKKwl1OAlJUE1JbGVnYWN5OworCXMxNglTcGVjaWZpY2F0 aW9uUmV2aXNpb247CisKKwkvKgorCSAqIEJpdCAwIC0gU0NJIGludGVycnVwdCBzdXBwb3J0 ZWQKKwkgKiBCaXQgMSAtIEkvTyBBUElDL1NBUElDCisJICovCisJdTgJSW50ZXJydXB0VHlw ZTsKKworCS8qCisJICogSWYgYml0IDAgb2YgSW50ZXJydXB0VHlwZSBpcyBzZXQsIHRoZW4g dGhpcyBpcyB0aGUgU0NJCisJICogaW50ZXJydXB0IGluIHRoZSBHUEV4X1NUUyByZWdpc3Rl ci4KKwkgKi8KKwl1OAlHUEU7CisKKwlzMTYJUmVzZXJ2ZWQ7CisKKwkvKgorCSAqIElmIGJp dCAxIG9mIEludGVycnVwdFR5cGUgaXMgc2V0LCB0aGVuIHRoaXMgaXMgdGhlIEkvTworCSAq IEFQSUMvU0FQSUMgaW50ZXJydXB0LgorCSAqLworCXUzMglHbG9iYWxTeXN0ZW1JbnRlcnJ1 cHQ7CisKKwkvKiBUaGUgYWN0dWFsIHJlZ2lzdGVyIGFkZHJlc3MuICovCisJc3RydWN0IGFj cGlfZ2VuZXJpY19hZGRyZXNzIGFkZHI7CisKKwl1OAlVSURbNF07CisKKwlzOCAgICAgIHNw bWlfaWRbMV07IC8qIEEgJ1wwJyB0ZXJtaW5hdGVkIGFycmF5IHN0YXJ0cyBoZXJlLiAqLwor fTsKKworc3RhdGljIGludCBfX2RldmluaXQgZGVjb2RlX2FjcGkoaW50IGFjcGlfbnVtKQor eworCWFjcGlfc3RhdHVzICAgICAgc3RhdHVzOworCXN0cnVjdCBTUE1JVGFibGUgKnNwbWk7 CisKKwlpZiAobnVtX2FkZHJzID49IE1BWF9TTUJfQk1DUykKKwkJcmV0dXJuIC0xOworCisJ aSA9IG51bV9hZGRyczsKKworCXN0YXR1cyA9IGFjcGlfZ2V0X2Zpcm13YXJlX3RhYmxlKCJT UE1JIiwgYWNwaSsxLAorCQkJCQkgQUNQSV9MT0dJQ0FMX0FERFJFU1NJTkcsCisJCQkJCSAo c3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICoqKSAmc3BtaSk7CisJaWYgKHN0YXR1cyAhPSBB RV9PSykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoc3BtaS0+SVBNSWxlZ2FjeSAhPSAx KSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIklQTUk6IEJhZCBTUE1JIGxlZ2FjeSAlZFxu IiwKKwkJICAgICAgIHNwbWktPklQTUlsZWdhY3kpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9 CisKKwlpZiAoc3BtaS0+SW50ZXJmYWNlVHlwZSAhPSA0KQorCQlyZXR1cm4gLUVOT0RFVjsK KworCWlmIChzcG1pLT5hZGRyLmFkZHJlc3Nfc3BhY2VfaWQgIT0gNCkgeworCQlwcmludGso S0VSTl9XQVJOSU5HCisJCSAgICAgICBQRlggIkludmFsaWQgQUNQSSBTU0lGIEkvTyBBZGRy ZXNzIHR5cGVcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwludW1fYWRkcnMgPSBpICsg MTsKKworCS8qIFVzZXIgZGlkbid0IHNwZWNpZnksIHNvIHVzZSB0aGlzIG9uZS4gKi8KKwlh ZGRyW2kqMl0gPSAwOyAvKiBBc3N1bWUgYWRhcHRlciAwICovCisJYWRkcltpKjIrMV0gPSBz cG1pLT5hZGRyLmFkZHJlc3MgPj4gMTsKKwlwcmludGsoS0VSTl9JTkZPIFBGWCAiQUNQSS9T UE1JIHNwZWNpZmllcyBTU0lGIEAgMHgleFxuIiwKKwkgICAgICAgYWRkcltpKjIrMV0pOwor CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19ETUkKK3N0YXRpYyBp bnQgX19kZXZpbml0IGRlY29kZV9kbWkoc3RydWN0IGRtaV9oZWFkZXIgKmRtKQoreworCWlu dCAgICAgICAgICAgYWRkcl9pbl9zbGF2ZV9hZGRyID0gMDsKKwl1OCAgICAgICAgICAgICpk YXRhID0gKHU4ICopZG07CisJdTggICAgICAgICAgICBsZW4gPSBkbS0+bGVuZ3RoOworCWlu dCAgICAgICAgICAgaTsKKworCWlmIChudW1fYWRkcnMgPj0gTUFYX1NNQl9CTUNTKQorCQly ZXR1cm4gLTE7CisKKwlpID0gbnVtX2FkZHJzOworCisJaWYgKGxlbiA8IDkpCisJCXJldHVy biAtMTsKKworCWlmIChkYXRhWzB4MDRdICE9IDQpIC8qIE5vdCBTU0lGICovCisJCXJldHVy biAtMTsKKworCW51bV9hZGRycyA9IGkgKyAxOworCisJYWRkcltpKjJdID0gMDsgLyogQXNz dW1lIGFkYXB0ZXIgMCAqLworCWlmICgoZGF0YVs4XSA+PiAxKSA9PSAwKSB7CisJCS8qCisJ CSAqIFNvbWUgYnJva2VuIHN5c3RlbXMgcHV0IHRoZSBJMkMgYWRkcmVzcyBpbgorCQkgKiB0 aGUgc2xhdmUgYWRkcmVzcyBmaWVsZC4gIFdlIHRyeSB0bworCQkgKiBhY2NvbW1vZGF0ZSB0 aGVtIGhlcmUuCisJCSAqLworCQlhZGRyW2kqMisxXSA9IGRhdGFbNl0gPj4gMTsKKwkJYWRk cl9pbl9zbGF2ZV9hZGRyID0gMTsKKwl9IGVsc2UKKwkJYWRkcltpKjIrMV0gPSBkYXRhWzhd ID4+IDE7CisKKwlpZiAoIWFkZHJfaW5fc2xhdmVfYWRkcikgeworCQlzbGF2ZV9hZGRyc1tp XSA9IGRhdGFbNl07CisJCXByaW50ayhLRVJOX0lORk8gUEZYICJETUkgc3BlY2lmaWVzIFNT SUYgQCAweCV4LCAiCisJCSAgICAgICAic2xhdmUgYWRkcmVzcyAweCV4XG4iLAorCQkgICAg ICAgYWRkcltpKjIrMV0sIHNsYXZlX2FkZHJzW2ldKTsKKwl9IGVsc2UKKwkJcHJpbnRrKEtF Uk5fSU5GTyBQRlggIkRNSSBzcGVjaWZpZXMgU1NJRiBAIDB4JXhcbiIsCisJCSAgICAgICBh ZGRyW2kqMisxXSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19kZXZpbml0 IGRtaV9pdGVyYXRvcih2b2lkKQoreworCWNvbnN0IHN0cnVjdCBkbWlfZGV2aWNlICpkZXYg PSBOVUxMOworCisJd2hpbGUgKChkZXYgPSBkbWlfZmluZF9kZXZpY2UoRE1JX0RFVl9UWVBF X0lQTUksIE5VTEwsIGRldikpKQorCQlkZWNvZGVfZG1pKChzdHJ1Y3QgZG1pX2hlYWRlciAq KSBkZXYtPmRldmljZV9kYXRhKTsKK30KKyNlbmRpZgorCitzdGF0aWMgX19pbml0IGludCBp bml0X2lwbWlfc21iKHZvaWQpCit7CisJaW50IGk7CisJaW50IHJ2OworCisJaWYgKGluaXRp YWxpemVkKQorCQlyZXR1cm4gMDsKKworCXByaW50ayhLRVJOX0lORk8gIklQTUkgU01CIElu dGVyZmFjZSBkcml2ZXJcbiIpOworCisjaWZkZWYgQ09ORklHX0RNSQorCWRtaV9pdGVyYXRv cigpOworI2VuZGlmCisjaWZkZWYgQ09ORklHX0FDUElfSU5URVJQUkVURVIKKwlmb3IgKGkg PSAwOyBpIDwgTUFYX1NNQl9CTUNTOyBpKyspCisJCWRlY29kZV9hY3BpKGkpOworI2VuZGlm CisKKwkvKiBidWlsZCBmb3JjZSBsaXN0IGZyb20gYWRkciBsaXN0ICovCisJZm9yIChpID0g MDsgaSA8IE1BWF9TTUJfQk1DUzsgaSsrKSB7CisJCWlmIChhZGRyW2kqMisxXSA9PSAwKQor CQkJYnJlYWs7CisJCXNtYl9mb3JjZXNbaV1bMF0gPSBhZGRyW2kqMl07CisJCXNtYl9mb3Jj ZXNbaV1bMV0gPSBhZGRyW2kqMisxXTsKKwkJc21iX2ZvcmNlc1tpXVsyXSA9IEkyQ19DTElF TlRfRU5EOworCQlzbWJfZm9yY2VfbGlzdFtpXSA9IHNtYl9mb3JjZXNbaV07CisJfQorCXNt Yl9mb3JjZV9saXN0W2ldID0gTlVMTDsKKworCS8qCisJICogSWYgdGhlIGRlZmF1bHQgcHJv YmluZyBpcyB0dXJuZWQgb2ZmLCB0aGVuIGRpc2FibGUgdGhlCisJICogcmFuZ2Ugc2Nhbm5p bmcuCisJICovCisJc21iX2RlZmF1bHRwcm9iZT0xOworCWlmICghc21iX2RlZmF1bHRwcm9i ZSkKKwkJbm9ybWFsX2kyY1swXSA9IEkyQ19DTElFTlRfRU5EOworCisJcnYgPSBpMmNfYWRk X2RyaXZlcigmc21iX2kyY19kcml2ZXIpOworCWlmICghcnYpCisJCWluaXRpYWxpemVkID0g MTsKKworCXJldHVybiBydjsKK30KK21vZHVsZV9pbml0KGluaXRfaXBtaV9zbWIpOworCitz dGF0aWMgX19leGl0IHZvaWQgY2xlYW51cF9pcG1pX3NtYih2b2lkKQoreworCWludCBpOwor CisJaWYgKCFpbml0aWFsaXplZCkKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IE1B WF9TTUJfQk1DUzsgaSsrKQorCQljbGVhbnVwX29uZV9zbWIoc21iX2luZm9zW2ldKTsKKwor CWluaXRpYWxpemVkID0gMDsKKworCWkyY19kZWxfZHJpdmVyKCZzbWJfaTJjX2RyaXZlcik7 Cit9Cittb2R1bGVfZXhpdChjbGVhbnVwX2lwbWlfc21iKTsKKworTU9EVUxFX0FVVEhPUigi VG9kZCBDIERhdmlzIDx0b2RkLmMuZGF2aXNAaW50ZWwuY29tPiwgIgorCSAgICAgICJDb3Jl eSBNaW55YXJkIDxtaW55YXJkQGFjbS5vcmc+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIklQ TUkgZHJpdmVyIGZvciBtYW5hZ2VtZW50IGNvbnRyb2xsZXJzIG9uIGEgU01CdXMiKTsKK01P RFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtdSAtLW5ldy1maWxlIC0tcmVjdXJzaXZlIGxp bnV4LTIuNi4yOS42Lm9yaWcvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV93YXRjaGRvZy5jIGxp bnV4LTIuNi4yOS42Lm1vZC9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX3dhdGNoZG9nLmMKLS0t IGxpbnV4LTIuNi4yOS42Lm9yaWcvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV93YXRjaGRvZy5j CTIwMDktMDctMDIgMTY6NDE6MjAuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYuMjku Ni5tb2QvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV93YXRjaGRvZy5jCTIwMDktMDctMjEgMTE6 Mjg6MTguMDAwMDAwMDAwIC0wNzAwCkBAIC01NTIsNiArNTUyLDIyIEBACiB9CiAKIC8qCisg KiBEbyBhIGRlbGF5ZWQgc2h1dGRvd24sIHdpdGggdGhlIGRlbGF5IGluIG1pbGxpc2Vjb25k cy4gIElmIHBvd2VyX29mZiBpcworICogZmFsc2UsIGRvIGEgcmVzZXQuICBJZiBwb3dlcl9v ZmYgaXMgdHJ1ZSwgZG8gYSBwb3dlciBkb3duLiAgVGhpcyBpcworICogcHJpbWFyaWx5IGZv ciB0aGUgSU1CIGNvZGUncyBzaHV0ZG93bi4KKyAqLwordm9pZCBpcG1pX2RlbGF5ZWRfc2h1 dGRvd24obG9uZyBkZWxheSwgaW50IHBvd2VyX29mZikKK3sKKwlpcG1pX2lnbm9yZV9oZWFy dGJlYXQgPSAxOworCWlmIChwb3dlcl9vZmYpCisJCWlwbWlfd2F0Y2hkb2dfc3RhdGUgPSBX RE9HX1RJTUVPVVRfUE9XRVJfRE9XTjsKKwllbHNlCisJCWlwbWlfd2F0Y2hkb2dfc3RhdGUg PSBXRE9HX1RJTUVPVVRfUkVTRVQ7CisJdGltZW91dCA9IGRlbGF5OworCWlwbWlfc2V0X3Rp bWVvdXQoSVBNSV9TRVRfVElNRU9VVF9IQl9JRl9ORUNFU1NBUlkpOworfQorCisvKgogICog V2UgdXNlIGEgbXV0ZXggdG8gbWFrZSBzdXJlIHRoYXQgb25seSBvbmUgdGhpbmcgY2FuIHNl bmQgYQogICogaGVhcnRiZWF0IGF0IG9uZSB0aW1lLCBiZWNhdXNlIHdlIG9ubHkgaGF2ZSBv bmUgY29weSBvZiB0aGUgZGF0YS4KICAqIFRoZSBzZW1hcGhvcmUgaXMgY2xhaW1lZCB3aGVu IHRoZSBzZXRfdGltZW91dCBpcyBzZW50IGFuZCBmcmVlZApAQCAtODcwLDYgKzg4Niw3IEBA CiAJCWNsZWFyX2JpdCgwLCAmaXBtaV93ZG9nX29wZW4pOwogCX0KIAorCWlwbWlfZmFzeW5j KC0xLCBmaWxlcCwgMCk7CiAJZXhwZWN0X2Nsb3NlID0gMDsKIAogCXJldHVybiAwOwpAQCAt MTM0MCw2ICsxMzU3LDkgQEAKIH0KIG1vZHVsZV9leGl0KGlwbWlfd2RvZ19leGl0KTsKIG1v ZHVsZV9pbml0KGlwbWlfd2RvZ19pbml0KTsKKworRVhQT1JUX1NZTUJPTChpcG1pX2RlbGF5 ZWRfc2h1dGRvd24pOworCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQVVUSE9S KCJDb3JleSBNaW55YXJkIDxtaW55YXJkQG12aXN0YS5jb20+Iik7CiBNT0RVTEVfREVTQ1JJ UFRJT04oIndhdGNoZG9nIHRpbWVyIGJhc2VkIHVwb24gdGhlIElQTUkgaW50ZXJmYWNlLiIp OwpkaWZmIC11IC0tbmV3LWZpbGUgLS1yZWN1cnNpdmUgbGludXgtMi42LjI5LjYub3JpZy9k cml2ZXJzL2NoYXIvaXBtaS9LY29uZmlnIGxpbnV4LTIuNi4yOS42Lm1vZC9kcml2ZXJzL2No YXIvaXBtaS9LY29uZmlnCi0tLSBsaW51eC0yLjYuMjkuNi5vcmlnL2RyaXZlcnMvY2hhci9p cG1pL0tjb25maWcJMjAwOS0wNy0wMiAxNjo0MToyMC4wMDAwMDAwMDAgLTA3MDAKKysrIGxp bnV4LTIuNi4yOS42Lm1vZC9kcml2ZXJzL2NoYXIvaXBtaS9LY29uZmlnCTIwMDktMDctMjEg MTE6Mjg6MTguMDAwMDAwMDAwIC0wNzAwCkBAIC01MCw2ICs1MCwxNyBAQAogCSBDdXJyZW50 bHksIG9ubHkgS0NTIGFuZCBTTUlDIGFyZSBzdXBwb3J0ZWQuICBJZgogCSB5b3UgYXJlIHVz aW5nIElQTUksIHlvdSBzaG91bGQgcHJvYmFibHkgc2F5ICJ5IiBoZXJlLgogCitjb25maWcg SVBNSV9TTUIKKyAgICAgICB0cmlzdGF0ZSAnSVBNSSBTTUJ1cyBoYW5kbGVyJworICAgICAg IHNlbGVjdCBJMkMKKyAgICAgICBoZWxwCisgICAgICAgICBQcm92aWRlcyBhIGRyaXZlciBm b3IgYSBTTUJ1cyBpbnRlcmZhY2UgdG8gYSBCTUMsIG1lYW5pbmcgdGhhdCB5b3UKKwkgaGF2 ZSBhIGRyaXZlciB0aGF0IG11c3QgYmUgYWNjZXNzZWQgb3ZlciBhbiBJMkMgYnVzIGluc3Rl YWQgb2YgYQorCSBzdGFuZGFyZCBpbnRlcmZhY2UuICBUaGlzIG1vZHVsZSByZXF1aXJlcyBJ MkMgc3VwcG9ydC4gIE5vdGUgdGhhdAorCSB5b3UgbWlnaHQgbmVlZCBzb21lIEkyQyBjaGFu Z2VzIGlmIENPTkZJR19JUE1JX1BBTklDX0VWRU5UIGlzCisJIGVuYWJsZWQgYWxvbmcgd2l0 aCB0aGlzLCBzbyB0aGUgSTJDIGRyaXZlciBrbm93cyB0byBydW4gdG8KKwkgY29tcGxldGlv biBkdXJpbmcgc2VuZGluZyBhIHBhbmljIGV2ZW50LgorCiBjb25maWcgSVBNSV9XQVRDSERP RwogICAgICAgIHRyaXN0YXRlICdJUE1JIFdhdGNoZG9nIFRpbWVyJwogICAgICAgIGhlbHAK QEAgLTYxLDQgKzcyLDExIEBACiAgICAgICAgICBUaGlzIGVuYWJsZXMgYSBmdW5jdGlvbiB0 byBwb3dlciBvZmYgdGhlIHN5c3RlbSB3aXRoIElQTUkgaWYKIAkgdGhlIElQTUkgbWFuYWdl bWVudCBjb250cm9sbGVyIGlzIGNhcGFibGUgb2YgdGhpcy4KIAorY29uZmlnIElQTUlfT09Q U19DT05TT0xFCisJdHJpc3RhdGUgJ0lQTUkgb29wcyBjb25zb2xlJworCWhlbHAKKwkgIFRo aXMgZW5hYmxlcyB0aGUgSVBNSSBvb3BzIGNvbnNvbGUuIElQTUkgb29wcyBjb25zb2xlIGxv Z3Mgb29wcyBvcgorCSAgcGFuaWMgY29uc29sZSBtZXNzc2FnZXMgdG8gU0VMLiBUaGUgbnVt YmVyIG9mIGVudHJpZXMgZm9yIHRoaXMgdXNhZ2UKKwkgIGlzIGxpbWl0ZWQgYnkgbXNnX2xp bWl0LCBkZWZhdWx0IGlzIDEwMCBlbnRyaWVzLgorCiBlbmRpZiAjIElQTUlfSEFORExFUgpk aWZmIC11IC0tbmV3LWZpbGUgLS1yZWN1cnNpdmUgbGludXgtMi42LjI5LjYub3JpZy9kcml2 ZXJzL2NoYXIvaXBtaS9NYWtlZmlsZSBsaW51eC0yLjYuMjkuNi5tb2QvZHJpdmVycy9jaGFy L2lwbWkvTWFrZWZpbGUKLS0tIGxpbnV4LTIuNi4yOS42Lm9yaWcvZHJpdmVycy9jaGFyL2lw bWkvTWFrZWZpbGUJMjAwOS0wNy0wMiAxNjo0MToyMC4wMDAwMDAwMDAgLTA3MDAKKysrIGxp bnV4LTIuNi4yOS42Lm1vZC9kcml2ZXJzL2NoYXIvaXBtaS9NYWtlZmlsZQkyMDA5LTA3LTIx IDExOjI4OjE4LjAwMDAwMDAwMCAtMDcwMApAQCAtNyw1ICs3LDcgQEAKIG9iai0kKENPTkZJ R19JUE1JX0hBTkRMRVIpICs9IGlwbWlfbXNnaGFuZGxlci5vCiBvYmotJChDT05GSUdfSVBN SV9ERVZJQ0VfSU5URVJGQUNFKSArPSBpcG1pX2RldmludGYubwogb2JqLSQoQ09ORklHX0lQ TUlfU0kpICs9IGlwbWlfc2kubworb2JqLSQoQ09ORklHX0lQTUlfU01CKSArPSBpcG1pX3Nt Yi5vCiBvYmotJChDT05GSUdfSVBNSV9XQVRDSERPRykgKz0gaXBtaV93YXRjaGRvZy5vCiBv YmotJChDT05GSUdfSVBNSV9QT1dFUk9GRikgKz0gaXBtaV9wb3dlcm9mZi5vCitvYmotJChD T05GSUdfSVBNSV9PT1BTX0NPTlNPTEUpICs9IGlwbWlfb29wc19jb25zb2xlLm8KZGlmZiAt dSAtLW5ldy1maWxlIC0tcmVjdXJzaXZlIGxpbnV4LTIuNi4yOS42Lm9yaWcvZHJpdmVycy9o d21vbi9kczE2MjEuYyBsaW51eC0yLjYuMjkuNi5tb2QvZHJpdmVycy9od21vbi9kczE2MjEu YwotLS0gbGludXgtMi42LjI5LjYub3JpZy9kcml2ZXJzL2h3bW9uL2RzMTYyMS5jCTIwMDkt MDctMDIgMTY6NDE6MjAuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYuMjkuNi5tb2Qv ZHJpdmVycy9od21vbi9kczE2MjEuYwkyMDA5LTA3LTIxIDExOjI4OjE4LjAwMDAwMDAwMCAt MDcwMApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1 ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KKwogI2luY2x1 ZGUgImxtNzUuaCIKIAogLyogQWRkcmVzc2VzIHRvIHNjYW4gKi8KQEAgLTE0NCw2ICsxNDUs NyBAQAogCQogCS8qIHN0YXJ0IGNvbnZlcnNpb24gKi8KIAlpMmNfc21idXNfd3JpdGVfYnl0 ZShjbGllbnQsIERTMTYyMV9DT01fU1RBUlQpOworCiB9CiAKIHN0YXRpYyBzc2l6ZV90IHNo b3dfdGVtcChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpk YSwKQEAgLTE3MSw2ICsxNzMsNyBAQAogCXJldHVybiBjb3VudDsKIH0KIAorCiBzdGF0aWMg c3NpemVfdCBzaG93X2FsYXJtcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2Vf YXR0cmlidXRlICpkYSwKIAkJCSAgIGNoYXIgKmJ1ZikKIHsKQEAgLTI3MSw2ICsyNzQsOSBA QAogCQllcnIgPSBQVFJfRVJSKGRhdGEtPmh3bW9uX2Rldik7CiAJCWdvdG8gZXhpdF9yZW1v dmVfZmlsZXM7CiAJfQorCWRhdGEgPSBkczE2MjFfdXBkYXRlX2NsaWVudCgmY2xpZW50LT5k ZXYpOworCXByaW50aygiZHMxNjIxOiB0aGUgY3VycmVudCB0ZW1wZXJhdHVyZSBpcyAlZCBD XG4iLCAKKwkJICAgICAgIExNNzVfVEVNUF9GUk9NX1JFRyhkYXRhLT50ZW1wWzBdKSAvIDEw MDApOwogCiAJcmV0dXJuIDA7CiAKZGlmZiAtdSAtLW5ldy1maWxlIC0tcmVjdXJzaXZlIGxp bnV4LTIuNi4yOS42Lm9yaWcvZHJpdmVycy9od21vbi9sbTkwLmMgbGludXgtMi42LjI5LjYu bW9kL2RyaXZlcnMvaHdtb24vbG05MC5jCi0tLSBsaW51eC0yLjYuMjkuNi5vcmlnL2RyaXZl cnMvaHdtb24vbG05MC5jCTIwMDktMDctMDIgMTY6NDE6MjAuMDAwMDAwMDAwIC0wNzAwCisr KyBsaW51eC0yLjYuMjkuNi5tb2QvZHJpdmVycy9od21vbi9sbTkwLmMJMjAwOS0wNy0yMSAx MToyODoxOC4wMDAwMDAwMDAgLTA3MDAKQEAgLTc2LDYgKzc2LDE0IEBACiAjaW5jbHVkZSA8 bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51 eC9zeXNmcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGFz bS9pby5oPgorI2lmZGVmIENPTkZJR19NVk1FNzEwMAorI2luY2x1ZGUgPHBsYXRmb3Jtcy84 Nnh4L212bWU3MTAwLmg+CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfTVZNRTQxMDAKKyNpbmNs dWRlIDxwbGF0Zm9ybXMvODV4eC9tdm1lNDEwMC5oPgorI2VuZGlmCiAKIC8qCiAgKiBBZGRy ZXNzZXMgdG8gc2NhbgpAQCAtMjIxLDYgKzIyOSwzNSBAQAogCXU4IGFsYXJtczsgLyogYml0 dmVjdG9yICovCiB9OwogCisjaWYgZGVmaW5lZChDT05GSUdfTVZNRTcxMDApIHx8IGRlZmlu ZWQoQ09ORklHX01WTUU0MTAwKQorc3RhdGljIHN0cnVjdCB0YXNrbGV0X3N0cnVjdCBtYXhp bTY2NDlfYmhfdGFzazsKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IGkyY19jbGllbnQgKnNh dmVfY2xpZW50OworCisjaWZkZWYgQ09ORklHX01WTUU3MTAwCisKKyNkZWZpbmUgQk9BUkRf VFNUQVRfTUFTSyAgICAgICAgTVZNRTcxMDBfVEVNUF9NQVNLCisjZGVmaW5lIEJPQVJEX1RT VEFUX1JFRyAgICAgICAgIE1WTUU3MTAwX0lOVEVSUlVQVF9SRUdfMgorCisjZW5kaWYKKwor I2lmZGVmIENPTkZJR19NVk1FNDEwMAorCisjZGVmaW5lIEJPQVJEX1RTVEFUX01BU0sgICAg ICAgIE1WTUU0MTAwX1RFTVBfTUFTSworI2RlZmluZSBCT0FSRF9UU1RBVF9SRUcgICAgICAg ICBNVk1FNDEwMF9JTlRFUlJVUFRfUkVHXzIKKworI2VuZGlmCisKKworI2lmIGRlZmluZWQo Q09ORklHX01WTUU3MTAwKSB8fCBkZWZpbmVkKENPTkZJR19NVk1FNDEwMCkKKworZXh0ZXJu IGludCBtYXhpbTY2NDlfaXJxOworc3RhdGljIHZvaWQgX19pb21lbSAqY29udHJvbF9yZWdf bWFwcGVkX2FkZHI7CitzdGF0aWMgaW50IGNvbnRyb2xfcmVnX21hcHBlZDsKKworI2VuZGlm CisKIC8qCiAgKiBDb252ZXJzaW9ucwogICogRm9yIGxvY2FsIHRlbXBlcmF0dXJlcyBhbmQg bGltaXRzLCBjcml0aWNhbCBsaW1pdHMgYW5kIHRoZSBoeXN0ZXJlc2lzCkBAIC01MjksNiAr NTY2LDQyIEBACiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIChkYXRhLT5hbGFybXMg Pj4gYml0bnIpICYgMSk7CiB9CiAKKyNpZiBkZWZpbmVkKENPTkZJR19NVk1FNzEwMCkgfHwg ZGVmaW5lZChDT05GSUdfTVZNRTQxMDApCisKK3N0YXRpYyBzc2l6ZV90IHNob3dfaXJxX2Vu YWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRy LCBjaGFyICpidWYpCit7CisgICAgICAgIHU4ICAgICAgY3I7CisKKyAgICAgICAgY3IgPSBy ZWFkYihjb250cm9sX3JlZ19tYXBwZWRfYWRkcik7CisgICAgICAgIHJldHVybiBzcHJpbnRm KGJ1ZiwgIiVkXG4iLCAoIShjciAmIEJPQVJEX1RTVEFUX01BU0spKSk7Cit9CisKK3N0YXRp YyBzc2l6ZV90IHNldF9pcnFfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRl dmljZV9hdHRyaWJ1dGUgKmF0dHIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisgICAgICAgIHVsb25nIHZhbHVl OworICAgICAgICB1OCAgY3I7CisgICAgICAgIHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQg PSB0b19pMmNfY2xpZW50KGRldik7CisgICAgICAgIHN0cnVjdCBsbTkwX2RhdGEgKmRhdGEg PSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworICAgICAgICBtdXRleF9sb2NrKCZk YXRhLT51cGRhdGVfbG9jayk7CisgICAgICAgIHZhbHVlID0gc2ltcGxlX3N0cnRvdWwoYnVm LCBOVUxMLCAxMCk7CisgICAgICAgIGNyID0gcmVhZGIoY29udHJvbF9yZWdfbWFwcGVkX2Fk ZHIpOworICAgICAgICBpZiAodmFsdWUgPT0gMSkgIHsKKyAgICAgICAgICAgICAgICBjciAm PSB+Qk9BUkRfVFNUQVRfTUFTSzsKKyAgICAgICAgfSBlbHNlIHsKKworICAgICAgICAgICAg ICAgIGNyIHw9IEJPQVJEX1RTVEFUX01BU0s7CisgICAgICAgIH0KKyAgICAgICAgd3JpdGVi KGNyLCBjb250cm9sX3JlZ19tYXBwZWRfYWRkcik7CisgICAgICAgIG11dGV4X3VubG9jaygm ZGF0YS0+dXBkYXRlX2xvY2spOworICAgICAgICByZXR1cm4gY291bnQ7Cit9CisKK3N0YXRp YyBERVZJQ0VfQVRUUihpcnFfZW5hYmxlLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19pcnFf ZW5hYmxlLAorICAgICAgICBzZXRfaXJxX2VuYWJsZSk7CisKKyNlbmRpZgorCiBzdGF0aWMg U0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX2lucHV0LCBTX0lSVUdPLCBzaG93X3RlbXAxMSwg TlVMTCwgNCk7CiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAyX2lucHV0LCBTX0lS VUdPLCBzaG93X3RlbXAxMSwgTlVMTCwgMCk7CiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRS KHRlbXAxX21pbiwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfdGVtcDgsCkBAIC01ODAsNiAr NjUzLDkgQEAKIAkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX21pbl9hbGFybS5kZXZfYXR0ci5h dHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfbWF4X2FsYXJtLmRldl9hdHRyLmF0dHIs CiAJJmRldl9hdHRyX2FsYXJtcy5hdHRyLAorI2lmIGRlZmluZWQoQ09ORklHX01WTUU3MTAw KSB8fCBkZWZpbmVkKENPTkZJR19NVk1FNDEwMCkKKyAgICAgICAgJmRldl9hdHRyX2lycV9l bmFibGUuYXR0ciwKKyNlbmRpZgogCU5VTEwKIH07CiAKQEAgLTU4Nyw2ICs2NjMsNjcgQEAK IAkuYXR0cnMgPSBsbTkwX2F0dHJpYnV0ZXMsCiB9OwogCitzdGF0aWMgaW50IGxtOTBfcmVh ZF9yZWcoc3RydWN0IGkyY19jbGllbnQqIGNsaWVudCwgdTggcmVnLCB1OCAqdmFsdWUpOwor CisjaWYgZGVmaW5lZChDT05GSUdfTVZNRTcxMDApIHx8IGRlZmluZWQoQ09ORklHX01WTUU0 MTAwKQorCitzdGF0aWMgdm9pZCBtYXhpbTY2NDlfYmhfaGFuZGxlcih1bnNpZ25lZCBsb25n IGRhdGEpCit7CisgICAgICAgIHN0cnVjdCBsbTkwX2RhdGEgKmxtX2RhdGE7CisgICAgICAg IHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSAoc3RydWN0IGkyY19jbGllbnQgKilkYXRh OworCisJaWYgKGRhdGEgIT0gKHVuc2lnbmVkIGxvbmcpc2F2ZV9jbGllbnQpIAorCQlyZXR1 cm47CisKKwlsbV9kYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKy8vICAg ICAgICBsbV9kYXRhID0gbG05MF91cGRhdGVfZGV2aWNlKCZjbGllbnQtPmRldik7CisKKyAg ICAgICAgcHJpbnRrKEtFUk5fRVJSICJNYXhpbTY2NDk6IHRoZSBjdXJyZW50IHNlbnNvciB0 ZW1wZXJhdHVyZSBpcyAlZCBDXG4iLAorCQl0ZW1wX2Zyb21fdTE2KGxtX2RhdGEtPnRlbXAx MVs0XSkpOworICAgICAgICBwcmludGsoS0VSTl9FUlIgIk1heGltNjY0OTogdGhlIGN1cnJl bnQgcmVtb3RlIHNlbnNvciB0ZW1wZXJhdHVyZSBpcyAlZCBDXG4iLAorICAgICAgICAgICAg ICAgIHRlbXBfZnJvbV91MTYobG1fZGF0YS0+dGVtcDExWzBdKSk7CisKKyAgICAgICAgcHJp bnRrKEtFUk5fRVJSICJNYXhpbTY2NDk6IHRoZSBzZW5zb3IgaGlnaCB0ZW1wZXJhdHVyZSBs aW1pdCBpcyBzZXQgdG8gJWQgQ1xuIiwKKyAgICAgICAgICAgICAgICB0ZW1wX2Zyb21fdTgo bG1fZGF0YS0+dGVtcDhbMV0pKTsKKyAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJNYXhpbTY2 NDk6IHRoZSBzZW5zb3IgdGVtcGVyYXR1cmUgY3JpdGljYWwgbGltaXQgaXMgc2V0IHRvICVk IENcbiIsCisgICAgICAgICAgICAgICAgdGVtcF9mcm9tX3U4KGxtX2RhdGEtPnRlbXA4WzJd KSk7CisgICAgICAgIHByaW50ayhLRVJOX0VSUiAiTWF4aW02NjQ5OiB0aGUgcmVtb3RlIHNl bnNvciB0ZW1wZXJhdHVyZSBoaWdoIGxpbWl0IGlzIHNldCB0byAlZCBDXG4iLAorICAgICAg ICAgICAgICAgIHRlbXBfZnJvbV91MTYobG1fZGF0YS0+dGVtcDExWzJdKSk7CisgICAgICAg IHByaW50ayhLRVJOX0VSUiAiTWF4aW02NjQ5OiB0aGUgcmVtb3RlIHNlbnNvciB0ZW1wZXJh dHVyZSBsb3cgbGltaXQgaXMgc2V0IHRvICVkIENcbiIsCisgICAgICAgICAgICAgICAgdGVt cF9mcm9tX3UxNihsbV9kYXRhLT50ZW1wMTFbMV0pKTsKKyAgICAgICAgcHJpbnRrKEtFUk5f RVJSICJNYXhpbTY2NDk6IHRoZSByZW1vdGUgc2Vuc29yIHRlbXBlcmF0dXJlIGNyaXRpY2Fs IGxpbWl0IGlzIHNldCB0byAlZCBDXG4iLAorICAgICAgICAgICAgICAgIHRlbXBfZnJvbV91 OChsbV9kYXRhLT50ZW1wOFszXSkpOworCisgICAgICAgIHJldHVybjsKK30KKworCitzdGF0 aWMgaXJxcmV0dXJuX3QgbWF4aW02NjQ5X2ludF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRl dl9pZCkKK3sKKyAgICAgICAgdTE2IHZhbHVlOworICAgICAgICBzdHJ1Y3QgaTJjX2NsaWVu dCAqY2xpZW50ID0gKHN0cnVjdCBpMmNfY2xpZW50ICopZGV2X2lkOworICAgICAgICBzdHJ1 Y3QgbG05MF9kYXRhICpkYXRhOworCisJaWYgKGRldl9pZCAhPSAodm9pZCAqKXNhdmVfY2xp ZW50KSAKKwkJcmV0dXJuIElSUV9OT05FOworCisgICAgICAgIHByaW50ayhLRVJOX0VSUiAi TWF4aW02NjQ5OiBJbnRlcnJ1cHQhXG4iKTsKKyAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJN YXhpbTY2NDk6IE1hc2tpbmcgaW50ZXJydXB0LlxuIik7CisKKwlkYXRhID0gaTJjX2dldF9j bGllbnRkYXRhKGNsaWVudCk7CisgICAgICAgIHZhbHVlID0gcmVhZGIoY29udHJvbF9yZWdf bWFwcGVkX2FkZHIpOworICAgICAgICB2YWx1ZSB8PSBCT0FSRF9UU1RBVF9NQVNLOworICAg ICAgICB3cml0ZWIodmFsdWUsIGNvbnRyb2xfcmVnX21hcHBlZF9hZGRyKTsKKworICAgICAg ICB0YXNrbGV0X3NjaGVkdWxlKCZtYXhpbTY2NDlfYmhfdGFzayk7CisKKyAgICAgICAgcmV0 dXJuIElSUV9IQU5ETEVEOworfQorCisjZW5kaWYKKworCiAvKiBwZWMgdXNlZCBmb3IgQURN MTAzMiBvbmx5ICovCiBzdGF0aWMgc3NpemVfdCBzaG93X3BlYyhzdHJ1Y3QgZGV2aWNlICpk ZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkdW1teSwKIAkJCWNoYXIgKmJ1ZikKQEAg LTc1NSw3ICs4OTIsNyBAQAogCQkJICYmIChyZWdfY29uZmlnMSAmIDB4MUYpID09IChtYW5f aWQgJiAweDBGKQogCQkJICYmIHJlZ19jb252cmF0ZSA8PSAweDA5KSB7CiAJCQkgCWtpbmQg PSBtYXg2NjU3OwotCQkJfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UK IAkJCS8qIFRoZSBjaGlwX2lkIHJlZ2lzdGVyIG9mIHRoZSBNQVg2NjgwIGFuZCBNQVg2Njgx CiAJCQkgKiBob2xkcyB0aGUgcmV2aXNpb24gb2YgdGhlIGNoaXAuCiAJCQkgKiB0aGUgbG93 ZXN0IGJpdCBvZiB0aGUgY29uZmlnMSByZWdpc3RlciBpcyB1bnVzZWQKQEAgLTgyNyw2ICs5 NjQsNyBAQAogCQlnb3RvIGV4aXQ7CiAJfQogCWkyY19zZXRfY2xpZW50ZGF0YShuZXdfY2xp ZW50LCBkYXRhKTsKKwlkYXRhLT52YWxpZCA9IDA7CiAJbXV0ZXhfaW5pdCgmZGF0YS0+dXBk YXRlX2xvY2spOwogCiAJLyogU2V0IHRoZSBkZXZpY2UgdHlwZSAqLwpAQCAtODc1LDYgKzEw MTMsNyBAQAogCXU4IGNvbmZpZywgY29uZmlnX29yaWc7CiAJc3RydWN0IGxtOTBfZGF0YSAq ZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCisJc2F2ZV9jbGllbnQgPSBj bGllbnQ7CiAJLyoKIAkgKiBTdGFydCB0aGUgY29udmVyc2lvbnMuCiAJICovCkBAIC05MDQs NiArMTA0Myw0OCBAQAogCWNvbmZpZyAmPSAweEJGOwkvKiBydW4gKi8KIAlpZiAoY29uZmln ICE9IGNvbmZpZ19vcmlnKSAvKiBPbmx5IHdyaXRlIGlmIGNoYW5nZWQgKi8KIAkJaTJjX3Nt YnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIExNOTBfUkVHX1dfQ09ORklHMSwgY29uZmln KTsKKworI2lmIGRlZmluZWQoQ09ORklHX01WTUU3MTAwKSB8fCBkZWZpbmVkKENPTkZJR19N Vk1FNDEwMCkKKyAgICAgICAgeworICAgICAgICAgICAgICAgIHN0cnVjdCBsbTkwX2RhdGEg KmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKyAgICAgICAgICAgICAgICBp bnQgcmVzdWx0OworICAgICAgICAgICAgICAgIHU4ICB2YWx1ZTsKKyAgICAgICAgICAgICAg ICBsb25nIHZhbDsKKworCQl0YXNrbGV0X2luaXQoJm1heGltNjY0OV9iaF90YXNrLCAmbWF4 aW02NjQ5X2JoX2hhbmRsZXIsIAorCQkJKHVuc2lnbmVkIGxvbmcpIHNhdmVfY2xpZW50KTsK KyAgICAgICAgICAgICAgICBjb250cm9sX3JlZ19tYXBwZWRfYWRkciA9IGlvcmVtYXAoQk9B UkRfVFNUQVRfUkVHLCAxKTsKKyAgICAgICAgICAgICAgICBjb250cm9sX3JlZ19tYXBwZWQg PSAxOworCisgICAgICAgICAgICAgICAgZGF0YSA9IGxtOTBfdXBkYXRlX2RldmljZSgmY2xp ZW50LT5kZXYpOworICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIm1heGltNjY0 OTogU2Vuc29yIFRlbXBlcmF0dXJlIGlzICUyZCBDOyBSZW1vdGUgU2Vuc29yIFRlbXBlcmF0 dXJlIGlzICUyZCBDXG4iLAorCQkJdGVtcF9mcm9tX3UxNihkYXRhLT50ZW1wMTFbNF0pIC8g MTAwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBfZnJvbV91MTYoZGF0YS0+dGVt cDExWzBdKSAvIDEwMDApOworCisgICAgICAgICAgICAgICAgLyogU2V0IHJlbW90ZSBjcml0 aWNhbCAqLworICAgICAgICAgICAgICAgIHZhbCA9IDEyMDAwMDsKKyAgICAgICAgICAgICAg ICBkYXRhLT50ZW1wOFs0XSA9IHRlbXBfdG9fdTgodmFsKTsKKyAgICAgICAgICAgICAgICBp MmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgTE05MF9SRUdfV19SRU1PVEVfQ1JJ VCwgZGF0YS0+dGVtcDhbNF0pOworCisgICAgICAgICAgICAgICAgLyogU2V0IHJlbW90ZSBo aWdoICovCisgICAgICAgICAgICAgICAgdmFsID0gMTA1MDAwOworICAgICAgICAgICAgICAg IGRhdGEtPnRlbXAxMVsyXSA9IHRlbXBfdG9fdTgodmFsKSA8PCA4OworICAgICAgICAgICAg ICAgIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBMTTkwX1JFR19XX1JFTU9U RV9ISUdISCwgZGF0YS0+dGVtcDExWzJdID4+IDgpOworICAgICAgICAgICAgICAgIGkyY19z bWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBMTTkwX1JFR19XX1JFTU9URV9ISUdITCwg ZGF0YS0+dGVtcDExWzJdICYgMHhmZik7CisKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBy ZXF1ZXN0X2lycShtYXhpbTY2NDlfaXJxLCBtYXhpbTY2NDlfaW50X2hhbmRsZXIsCisJCQkJ SVJRRl9TSEFSRUQsICJtYXhpbTY2NDkiLCBzYXZlX2NsaWVudCk7CisgICAgICAgICAgICAg ICAgaWYgKHJlc3VsdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5f RVJSICJtYXhpbTY2NDk6IENhbm5vdCBnZXQgaXJxICVkXG4iLCBtYXhpbTY2NDlfaXJxKTsK KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisK KyAgICAgICAgICAgICAgICAvKiBVbm1hc2sgTUFYSU02NjQ5IHRlbXBlcmF0dXJlIHNlbnNv ciB0aGVybW9zdGF0IG91dHB1dCAqLworICAgICAgICAgICAgICAgIHZhbHVlID0gcmVhZGIo Y29udHJvbF9yZWdfbWFwcGVkX2FkZHIpOworICAgICAgICAgICAgICAgIHZhbHVlICY9IH5C T0FSRF9UU1RBVF9NQVNLOworICAgICAgICAgICAgICAgIHdyaXRlYih2YWx1ZSwgY29udHJv bF9yZWdfbWFwcGVkX2FkZHIpOworICAgICAgICB9CisjZW5kaWYKIH0KIAogc3RhdGljIGlu dCBsbTkwX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQpAQCAtOTE3LDYgKzEw OTgsMjMgQEAKIAkJZGV2aWNlX3JlbW92ZV9maWxlKCZjbGllbnQtPmRldiwKIAkJCQkgICAm c2Vuc29yX2Rldl9hdHRyX3RlbXAyX29mZnNldC5kZXZfYXR0cik7CiAKKyNpZiBkZWZpbmVk KENPTkZJR19NVk1FNzEwMCkgfHwgZGVmaW5lZChDT05GSUdfTVZNRTQxMDApCisgICAgICAg IHsKKyAgICAgICAgICAgICAgICB1OCB2YWx1ZTsKKworICAgICAgICAgICAgICAgIGlmIChj b250cm9sX3JlZ19tYXBwZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1hc2sg dGVtcGVyYXR1cmUgc2Vuc29yIGludGVycnVwdCAqLworICAgICAgICAgICAgICAgICAgICAg ICAgdmFsdWUgPSByZWFkYihjb250cm9sX3JlZ19tYXBwZWRfYWRkcik7CisgICAgICAgICAg ICAgICAgICAgICAgICB2YWx1ZSB8PSBCT0FSRF9UU1RBVF9NQVNLOworICAgICAgICAgICAg ICAgICAgICAgICAgd3JpdGViKHZhbHVlLCBjb250cm9sX3JlZ19tYXBwZWRfYWRkcik7Cisg ICAgICAgICAgICAgICAgICAgICAgICBpb3VubWFwKGNvbnRyb2xfcmVnX21hcHBlZF9hZGRy KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xfcmVnX21hcHBlZCA9IDA7Cisg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRhc2tsZXRfa2lsbCgmbWF4aW02 NjQ5X2JoX3Rhc2spOworICAgICAgICAgICAgICAgIGZyZWVfaXJxKG1heGltNjY0OV9pcnEs IHNhdmVfY2xpZW50KTsKKyAgICAgICAgfQorI2VuZGlmCisKIAlrZnJlZShkYXRhKTsKIAly ZXR1cm4gMDsKIH0KZGlmZiAtdSAtLW5ldy1maWxlIC0tcmVjdXJzaXZlIGxpbnV4LTIuNi4y OS42Lm9yaWcvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tcGMuYyBsaW51eC0yLjYuMjkuNi5t b2QvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tcGMuYwotLS0gbGludXgtMi42LjI5LjYub3Jp Zy9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW1wYy5jCTIwMDktMDctMDIgMTY6NDE6MjAuMDAw MDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYuMjkuNi5tb2QvZHJpdmVycy9pMmMvYnVzc2Vz L2kyYy1tcGMuYwkyMDA5LTA4LTAzIDEwOjQ3OjI1LjAwMDAwMDAwMCAtMDcwMApAQCAtMTA0 LDggKzEwNCw4IEBACiAJewogCQl3aGlsZSAoIShyZWFkYihpMmMtPmJhc2UgKyBNUENfSTJD X1NSKSAmIENTUl9NSUYpKSB7CiAJCQlzY2hlZHVsZSgpOwotCQkJaWYgKHRpbWVfYWZ0ZXIo amlmZmllcywgb3JpZ19qaWZmaWVzICsgdGltZW91dCkpIHsKLQkJCQlwcl9kZWJ1ZygiSTJD OiB0aW1lb3V0XG4iKTsKKwkJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIG9yaWdfamlmZmll cyArIDUgKiB0aW1lb3V0KSkgeworCQkJCXByX2luZm8oIkkyQzogd2FpdCB0aW1lb3V0XG4i KTsKIAkJCQl3cml0ZWNjcihpMmMsIDApOwogCQkJCXJlc3VsdCA9IC1FSU87CiAJCQkJYnJl YWs7CkBAIC0xMTYsNyArMTE2LDcgQEAKIAl9IGVsc2UgewogCQkvKiBJbnRlcnJ1cHQgbW9k ZSAqLwogCQlyZXN1bHQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChpMmMt PnF1ZXVlLAotCQkJKGkyYy0+aW50ZXJydXB0ICYgQ1NSX01JRiksIHRpbWVvdXQgKiBIWik7 CisJCQkoaTJjLT5pbnRlcnJ1cHQgJiBDU1JfTUlGKSwgdGltZW91dCk7CiAKIAkJaWYgKHVu bGlrZWx5KHJlc3VsdCA8IDApKSB7CiAJCQlwcl9kZWJ1ZygiSTJDOiB3YWl0IGludGVycnVw dGVkXG4iKTsKQEAgLTMxMSw3ICszMTEsOCBAQAogCS5vd25lciA9IFRISVNfTU9EVUxFLAog CS5uYW1lID0gIk1QQyBhZGFwdGVyIiwKIAkuYWxnbyA9ICZtcGNfYWxnbywKLQkudGltZW91 dCA9IDEsCisJLmNsYXNzID0gSTJDX0NMQVNTX0hXTU9OIHwgSTJDX0NMQVNTX1NQRCwKKwku dGltZW91dCA9IEhaLAogfTsKIAogc3RhdGljIGludCBfX2RldmluaXQgZnNsX2kyY19wcm9i ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCwgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0 Y2gpCmRpZmYgLXUgLS1uZXctZmlsZSAtLXJlY3Vyc2l2ZSBsaW51eC0yLjYuMjkuNi5vcmln L2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbXBjLWlwbWkuYyBsaW51eC0yLjYuMjkuNi5tb2Qv ZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tcGMtaXBtaS5jCi0tLSBsaW51eC0yLjYuMjkuNi5v cmlnL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbXBjLWlwbWkuYwkxOTY5LTEyLTMxIDE3OjAw OjAwLjAwMDAwMDAwMCAtMDcwMAorKysgbGludXgtMi42LjI5LjYubW9kL2RyaXZlcnMvaTJj L2J1c3Nlcy9pMmMtbXBjLWlwbWkuYwkyMDA5LTA5LTAyIDEwOjMyOjM5LjAwMDAwMDAwMCAt MDcwMApAQCAtMCwwICsxLDU4NCBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMy0yMDA0 CisgKiBIdW1ib2xkdCBTb2x1dGlvbnMgTHRkLCBhZHJpYW5AaHVtYm9sZHQuY28udWsuCisK KyAqIFRoaXMgaXMgYSBjb21iaW5lZCBpMmMgYWRhcHRlciBhbmQgYWxnb3JpdGhtIGRyaXZl ciBmb3IgdGhlCisgKiBNUEMxMDcvVHNpMTA3IFBvd2VyUEMgbm9ydGhicmlkZ2UgYW5kIHBy b2Nlc3NvcnMgdGhhdCBpbmNsdWRlCisgKiB0aGUgc2FtZSBJMkMgdW5pdCAoODI0MCwgODI0 NSwgODV4eCkuCisgKgorICogUmVsZWFzZSAwLjgKKyAqCisgKiBUaGlzIGZpbGUgaXMgbGlj ZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExp Y2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRo b3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBp bXBsaWVkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxs aW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxp bnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUg PGxpbnV4L29mX2kyYy5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGlu dXgvZnNsX2RldmljZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxs aW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjZGVmaW5l IERSVl9OQU1FICJtcGMtaTJjLWlwbWkiCisKKyNkZWZpbmUgTVBDX0kyQ19GRFIgCTB4MDQK KyNkZWZpbmUgTVBDX0kyQ19DUgkweDA4CisjZGVmaW5lIE1QQ19JMkNfU1IJMHgwYworI2Rl ZmluZSBNUENfSTJDX0RSCTB4MTAKKyNkZWZpbmUgTVBDX0kyQ19ERlNSUiAweDE0CisKKyNk ZWZpbmUgQ0NSX01FTiAgMHg4MAorI2RlZmluZSBDQ1JfTUlFTiAweDQwCisjZGVmaW5lIEND Ul9NU1RBIDB4MjAKKyNkZWZpbmUgQ0NSX01UWCAgMHgxMAorI2RlZmluZSBDQ1JfVFhBSyAw eDA4CisjZGVmaW5lIENDUl9SU1RBIDB4MDQKKworI2RlZmluZSBDU1JfTUNGICAweDgwCisj ZGVmaW5lIENTUl9NQUFTIDB4NDAKKyNkZWZpbmUgQ1NSX01CQiAgMHgyMAorI2RlZmluZSBD U1JfTUFMICAweDEwCisjZGVmaW5lIENTUl9TUlcgIDB4MDQKKyNkZWZpbmUgQ1NSX01JRiAg MHgwMgorI2RlZmluZSBDU1JfUlhBSyAweDAxCisKKyNkZWZpbmUgUkVUUllfVElNRV9VUyAg NTAwIC8qIFRyeSBldmVyeSA1MDB1cyBtaW5pbXVtICovCisjZGVmaW5lIE1BWF9USU1FT1VU X1VTICA1MDAwMDAgLyogNTAwbXMgbWluaW11bSAqLworCitzdHJ1Y3QgbXBjX2kyY19pcG1p IHsKKwl2b2lkIF9faW9tZW0gKmJhc2U7CisJdTMyIGludGVycnVwdDsKKwl3YWl0X3F1ZXVl X2hlYWRfdCBxdWV1ZTsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgYWRhcDsKKwlpbnQgaXJxOwor CXUzMiBmbGFnczsKK307CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgd3JpdGVjY3Ioc3Ry dWN0IG1wY19pMmNfaXBtaSAqaTJjLCB1MzIgeCkKK3sKKwl3cml0ZWIoeCwgaTJjLT5iYXNl ICsgTVBDX0kyQ19DUik7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBtcGNfaTJjX2lwbWlf aXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgbXBjX2kyY19pcG1pICpp MmMgPSBkZXZfaWQ7CisJaWYgKHJlYWRiKGkyYy0+YmFzZSArIE1QQ19JMkNfU1IpICYgQ1NS X01JRikgeworCQkvKiBSZWFkIGFnYWluIHRvIGFsbG93IHJlZ2lzdGVyIHRvIHN0YWJpbGlz ZSAqLworCQlpMmMtPmludGVycnVwdCA9IHJlYWRiKGkyYy0+YmFzZSArIE1QQ19JMkNfU1Ip OworCQl3cml0ZWIoMCwgaTJjLT5iYXNlICsgTVBDX0kyQ19TUik7CisJCXdha2VfdXBfaW50 ZXJydXB0aWJsZSgmaTJjLT5xdWV1ZSk7CisJfQorCXJldHVybiBJUlFfSEFORExFRDsKK30K KworLyogU29tZXRpbWVzIDl0aCBjbG9jayBwdWxzZSBpc24ndCBnZW5lcmF0ZWQsIGFuZCBz bGF2ZSBkb2Vzbid0IHJlbGVhc2UKKyAqIHRoZSBidXMsIGJlY2F1c2UgaXQgd2FudHMgdG8g c2VuZCBBQ0suCisgKiBGb2xsb3dpbmcgc2VxdWVuY2Ugb2YgZW5hYmxpbmcvZGlzYWJsaW5n IGFuZCBzZW5kaW5nIHN0YXJ0L3N0b3AgZ2VuZXJhdGVzCisgKiB0aGUgcHVsc2UsIHNvIGl0 J3MgYWxsIE9LLgorICovCitzdGF0aWMgdm9pZCBtcGNfaTJjX2lwbWlfZml4dXAoc3RydWN0 IG1wY19pMmNfaXBtaSAqaTJjKQoreworCXdyaXRlY2NyKGkyYywgMCk7CisJdWRlbGF5KDMw KTsKKwl3cml0ZWNjcihpMmMsIENDUl9NRU4pOworCXVkZWxheSgzMCk7CisJd3JpdGVjY3Io aTJjLCBDQ1JfTVNUQSB8IENDUl9NVFgpOworCXVkZWxheSgzMCk7CisJd3JpdGVjY3IoaTJj LCBDQ1JfTVNUQSB8IENDUl9NVFggfCBDQ1JfTUVOKTsKKwl1ZGVsYXkoMzApOworCXdyaXRl Y2NyKGkyYywgQ0NSX01FTik7CisJdWRlbGF5KDMwKTsKK30KKworc3RhdGljIGludCBpMmNf d2FpdChzdHJ1Y3QgbXBjX2kyY19pcG1pICppMmMsIHVuc2lnbmVkIHRpbWVvdXQsIGludCB3 cml0aW5nKQoreworCXVuc2lnbmVkIGxvbmcgb3JpZ19qaWZmaWVzID0gamlmZmllczsKKwl1 MzIgeDsKKwlpbnQgcmVzdWx0ID0gMDsKKworCWlmIChpMmMtPmlycSA9PSBOT19JUlEpCisJ eworCQl3aGlsZSAoIShyZWFkYihpMmMtPmJhc2UgKyBNUENfSTJDX1NSKSAmIENTUl9NSUYp KSB7CisjaWZkZWYgQ09ORklHX0NQQ0k2MjAwCisJCQl1ZGVsYXkoMik7CisjZWxzZQorCQkJ c2NoZWR1bGUoKTsKKyNlbmRpZgorCQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgb3JpZ19q aWZmaWVzICsgdGltZW91dCkpIHsKKwkJCQlwcl9kZWJ1ZygiaTJjX21wY19pcG1pOiBpMmMg d2FpdCB0aW1lb3V0XG4iKTsKKwkJCQl3cml0ZWNjcihpMmMsIDApOworCQkJCXJlc3VsdCA9 IC1FSU87CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJeCA9IHJlYWRiKGkyYy0+YmFzZSAr IE1QQ19JMkNfU1IpOworCQl3cml0ZWIoMCwgaTJjLT5iYXNlICsgTVBDX0kyQ19TUik7CisJ fSBlbHNlIHsKKwkJLyogSW50ZXJydXB0IG1vZGUgKi8KKwkJcmVzdWx0ID0gd2FpdF9ldmVu dF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoaTJjLT5xdWV1ZSwKKwkJCShpMmMtPmludGVycnVw dCAmIENTUl9NSUYpLCB0aW1lb3V0KTsKKworCQlpZiAodW5saWtlbHkocmVzdWx0IDwgMCkp IHsKKwkJCXByX2RlYnVnKCJpMmNfbXBjX2lwbWk6IGkyYyB3YWl0IGludGVycnVwdGVkXG4i KTsKKwkJCXdyaXRlY2NyKGkyYywgMCk7CisJCX0gZWxzZSBpZiAodW5saWtlbHkoIShpMmMt PmludGVycnVwdCAmIENTUl9NSUYpKSkgeworCQkJcHJfZGVidWcoImkyY19tcGNfaXBtaTog aTJjIHdhaXQgdGltZW91dFxuIik7CisJCQl3cml0ZWNjcihpMmMsIDApOworCQkJcmVzdWx0 ID0gLUVUSU1FRE9VVDsKKwkJfQorCisJCXggPSBpMmMtPmludGVycnVwdDsKKwkJaTJjLT5p bnRlcnJ1cHQgPSAwOworCX0KKworCWlmIChyZXN1bHQgPCAwKQorCQlyZXR1cm4gcmVzdWx0 OworCisJaWYgKCEoeCAmIENTUl9NQ0YpKSB7CisJCXByX2luZm8oImkyY19tcGNfaXBtaTog dW5maW5pc2hlZFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCWlmICh4ICYgQ1NSX01B TCkgeworCQlwcl9pbmZvKCJpMmNfbXBjX2lwbWk6IE1BTCAtIGFyYml0cmF0aW9uIGxvc3Rc biIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlpZiAod3JpdGluZyAmJiAoeCAmIENTUl9S WEFLKSkgeworCQlwcl9kZWJ1ZygiaTJjX21wY19pcG1pOiBObyBSWEFLXG4iKTsKKwkJLyog Z2VuZXJhdGUgc3RvcCAqLworLy8JCXdyaXRlY2NyKGkyYywgQ0NSX01FTik7CisJCXJldHVy biAtRU5PREVWOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbXBjX2kyY19p cG1pX3NldGNsb2NrKHN0cnVjdCBtcGNfaTJjX2lwbWkgKmkyYykKK3sKKwkvKiBTZXQgY2xv Y2sgYW5kIGZpbHRlcnMgKi8KKwlpZiAoaTJjLT5mbGFncyAmIEZTTF9JMkNfREVWX1NFUEFS QVRFX0RGU1JSKSB7CisJCXdyaXRlYigweDMxLCBpMmMtPmJhc2UgKyBNUENfSTJDX0ZEUik7 CisJCXdyaXRlYigweDEwLCBpMmMtPmJhc2UgKyBNUENfSTJDX0RGU1JSKTsKKwl9IGVsc2Ug aWYgKGkyYy0+ZmxhZ3MgJiBGU0xfSTJDX0RFVl9DTE9DS181MjAwKQorCQl3cml0ZWIoMHgz ZiwgaTJjLT5iYXNlICsgTVBDX0kyQ19GRFIpOworCWVsc2UKKwkJd3JpdGVsKDB4MTAzMSwg aTJjLT5iYXNlICsgTVBDX0kyQ19GRFIpOworfQorCitzdGF0aWMgdm9pZCBtcGNfaTJjX2lw bWlfc3RhcnQoc3RydWN0IG1wY19pMmNfaXBtaSAqaTJjKQoreworCS8qIENsZWFyIGFyYml0 cmF0aW9uICovCisJd3JpdGViKDAsIGkyYy0+YmFzZSArIE1QQ19JMkNfU1IpOworCS8qIFN0 YXJ0IHdpdGggTUVOICovCisJd3JpdGVjY3IoaTJjLCBDQ1JfTUVOKTsKK30KKworc3RhdGlj IHZvaWQgbXBjX2kyY19pcG1pX3N0b3Aoc3RydWN0IG1wY19pMmNfaXBtaSAqaTJjKQorewor CXdyaXRlY2NyKGkyYywgQ0NSX01FTik7Cit9CisKK3N0YXRpYyBpbnQgbXBjX2lwbWlfd3Jp dGUoc3RydWN0IG1wY19pMmNfaXBtaSAqaTJjLCBpbnQgdGFyZ2V0LAorCQkgICAgIGNvbnN0 IHU4ICogZGF0YSwgaW50IGxlbmd0aCwgaW50IHJlc3RhcnQpCit7CisJaW50IGksIHJlc3Vs dDsKKwl1bnNpZ25lZCB0aW1lb3V0ID0gaTJjLT5hZGFwLnRpbWVvdXQ7CisJdTMyIGZsYWdz ID0gcmVzdGFydCA/IENDUl9SU1RBIDogMDsKKwlpbnQgcmV0cmllcyA9IDA7CisKKwkvKiBT dGFydCB3aXRoIE1FTiAqLworCWlmICghcmVzdGFydCkKKwkJd3JpdGVjY3IoaTJjLCBDQ1Jf TUVOKTsKKwkvKiBTdGFydCBhcyBtYXN0ZXIgKi8KKwl3cml0ZWNjcihpMmMsIENDUl9NSUVO IHwgQ0NSX01FTiB8IENDUl9NU1RBIHwgQ0NSX01UWCB8IGZsYWdzKTsKKwl3aGlsZSAocmV0 cmllcyA8IDUpIHsKKwkJLyogV3JpdGUgdGFyZ2V0IGJ5dGUgKi8KKwkJd3JpdGViKCh0YXJn ZXQgPDwgMSksIGkyYy0+YmFzZSArIE1QQ19JMkNfRFIpOworCisJCXJlc3VsdCA9IGkyY193 YWl0KGkyYywgdGltZW91dCwgMSk7CisJCWlmIChyZXN1bHQgPCAwKSB7CisJCQlpZiAocmVz dWx0ID09IC1FTk9ERVYpIHsKKwkJCQl1ZGVsYXkoMzApOworCQkJCXJldHJpZXMrKzsKKwkJ CQljb250aW51ZTsKKwkJCX0gZWxzZSB7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJ fQorCQlicmVhazsKKwl9CisJaWYgKHJlc3VsdCA8IDApIHsgCisJCW1wY19pMmNfaXBtaV9z dG9wKGkyYyk7CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGxl bmd0aDsgaSsrKSB7CisJCS8qIFdyaXRlIGRhdGEgYnl0ZSAqLworCQl3cml0ZWIoZGF0YVtp XSwgaTJjLT5iYXNlICsgTVBDX0kyQ19EUik7CisKKwkJcmVzdWx0ID0gaTJjX3dhaXQoaTJj LCB0aW1lb3V0LCAxKTsKKwkJaWYgKHJlc3VsdCA8IDApCisJCQlyZXR1cm4gcmVzdWx0Owor CX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1wY19pcG1pX3JlYWQoc3RydWN0 IG1wY19pMmNfaXBtaSAqaTJjLCBpbnQgdGFyZ2V0LAorCQkgICAgdTggKiBkYXRhLCBpbnQg bGVuZ3RoLCBpbnQgcmVzdGFydCwgaW50IG1fcmVjdl9sZW4pCit7CisJdW5zaWduZWQgdGlt ZW91dCA9IGkyYy0+YWRhcC50aW1lb3V0OworCWludCBpLCByZXN1bHQ7CisJaW50IHJldHJp ZXMgPSAwOworCXUzMiBmbGFncyA9IHJlc3RhcnQgPyBDQ1JfUlNUQSA6IDA7CisKKwkvKiBT dGFydCB3aXRoIE1FTiAqLworCWlmICghcmVzdGFydCkKKwkJd3JpdGVjY3IoaTJjLCBDQ1Jf TUVOKTsKKwkvKiBTd2l0Y2ggdG8gcmVhZCAtIHJlc3RhcnQgKi8KKwl3cml0ZWNjcihpMmMs IENDUl9NSUVOIHwgQ0NSX01FTiB8IENDUl9NU1RBIHwgQ0NSX01UWCB8IGZsYWdzKTsKKwor CXdoaWxlIChyZXRyaWVzIDwgNSkgeworCQkvKiBXcml0ZSB0YXJnZXQgYWRkciBieXRlIC0g dGhpcyB0aW1lIHdpdGggdGhlIHJlYWQgZmxhZyBzZXQgKi8KKwkJd3JpdGViKCh0YXJnZXQg PDwgMSkgfCAxLCBpMmMtPmJhc2UgKyBNUENfSTJDX0RSKTsKKworCQlyZXN1bHQgPSBpMmNf d2FpdChpMmMsIHRpbWVvdXQsIDEpOworCQlpZiAocmVzdWx0IDwgMCkgeworCQkJaWYgKHJl c3VsdCA9PSAtRU5PREVWKSB7CisJCQkJdWRlbGF5KDMwKTsKKwkJCQlyZXRyaWVzKys7Owor CQkJCWNvbnRpbnVlOworCQkJfSBlbHNlIHsgCisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0K KwkJfQorCQlicmVhazsKKwl9CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJbXBjX2kyY19pcG1p X3N0b3AoaTJjKTsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwlpZiAobGVuZ3RoKSB7CisJ CWlmICgobGVuZ3RoID09IDEpICYmICFtX3JlY3ZfbGVuKQorCQkJd3JpdGVjY3IoaTJjLCBD Q1JfTUlFTiB8IENDUl9NRU4gfCBDQ1JfTVNUQSB8IENDUl9UWEFLKTsKKwkJZWxzZQorCQkJ d3JpdGVjY3IoaTJjLCBDQ1JfTUlFTiB8IENDUl9NRU4gfCBDQ1JfTVNUQSk7CisJCS8qIER1 bW15IHJlYWQgKi8KKwkJcmVhZGIoaTJjLT5iYXNlICsgTVBDX0kyQ19EUik7CisJfQorCisJ aWYgKG1fcmVjdl9sZW4pIHsKKwkJcmVzdWx0ID0gaTJjX3dhaXQoaTJjLCB0aW1lb3V0LCAw KTsKKwkJaWYgKHJlc3VsdCA8IDApCisJCQlyZXR1cm4gcmVzdWx0OworCQlkYXRhWzBdID0g cmVhZGIoaTJjLT5iYXNlICsgTVBDX0kyQ19EUik7CisJCS8qIHNhbml0eSBjaGVjayAqLwor CQlpZiAoZGF0YVswXSA+IDY0KSB7CisJCQkvKiBOb3RlOiBUaGUgaXBtaV9zbWIgZHJpdmVy IHdpbGwgYWNjZXB0IG9ubHkgMzIgYnl0ZXMuIFVzaW5nIDY0IGFzIGEgCisgICAgICAgICAg ICAgICAgICAgICAgICAgKiAgICAgICAgY2hlY2sgaXMgYSB3b3JrYXJvdW5kIGZvciBicm9r ZW4gSVBNSSBmaXJtd2FyZSAqLworCQkJcHJpbnRrKEtFUk5fRVJSICJpMmMtbXBjLWlwbWk6 IFJlY2VpdmUgbGVuZ3RoICglZCkgaXMgdG9vIGxhcmdlXG4iLCBkYXRhWzBdKTsKKwkJCXJl dHVybiAtRUlPOworCQl9CisJCWxlbmd0aCA9IGRhdGFbMF07CisJfQorCisJZm9yIChpID0g MDsgaSA8IGxlbmd0aDsgaSsrKSB7CisJCXJlc3VsdCA9IGkyY193YWl0KGkyYywgdGltZW91 dCwgMCk7CisJCWlmIChyZXN1bHQgPCAwKQorCQkJcmV0dXJuIHJlc3VsdDsKKworCQkvKiBH ZW5lcmF0ZSB0eGFjayBvbiBuZXh0IHRvIGxhc3QgYnl0ZSAqLworCQlpZiAoaSA9PSBsZW5n dGggLSAyKQorCQkJd3JpdGVjY3IoaTJjLCBDQ1JfTUlFTiB8IENDUl9NRU4gfCBDQ1JfTVNU QSB8IENDUl9UWEFLKTsKKwkJLyogR2VuZXJhdGUgc3RvcCBvbiBsYXN0IGJ5dGUgKi8KKwkJ aWYgKGkgPT0gbGVuZ3RoIC0gMSkKKwkJCXdyaXRlY2NyKGkyYywgQ0NSX01JRU4gfCBDQ1Jf TUVOIHwgQ0NSX1RYQUspOworCQlpZiAobV9yZWN2X2xlbikKKwkJCWRhdGFbaSsxXSA9IHJl YWRiKGkyYy0+YmFzZSArIE1QQ19JMkNfRFIpOworCQllbHNlCisJCQlkYXRhW2ldID0gcmVh ZGIoaTJjLT5iYXNlICsgTVBDX0kyQ19EUik7CisJfQorCisJaWYgKG1fcmVjdl9sZW4pIHsK KwkJaWYgKGRhdGFbMF0gPiAzMikgeworCQkJLyogRml4IGZvciBicm9rZW4gSVBNSSBmaXJt d2FyZSB0aGF0IGRvZXMgbm90IHN1cHBvcnQgbXV1bHRpLXBhcnQgcmVhZCAqLworCQkJcHJp bnRrKEtFUk5fRVJSICJpMmMtbXBjLWlwbWk6IFJlY2VpdmUgbGVuZ3RoICglZCkgaXMgdG9v IGxhcmdlXG4iLCBkYXRhWzBdKTsKKwkJCWRhdGFbMF0gPSAzMjsKKwkJCWxlbmd0aCA9IDMy OworCQl9CisJfQorCXJldHVybiBsZW5ndGg7Cit9CisKK3N0YXRpYyBpbnQgbXBjX2lwbWlf c3RhcnQoc3RydWN0IGkyY19hZGFwdGVyICphZGFwLCBzdHJ1Y3QgaTJjX29wX3FfZW50cnkg KmUpCit7CisJc3RydWN0IGkyY19tc2cgKnBtc2c7CisJaW50IHJldCA9IDA7CisJdW5zaWdu ZWQgbG9uZyBvcmlnX2ppZmZpZXMgPSBqaWZmaWVzOworCXN0cnVjdCBtcGNfaTJjX2lwbWkg KmkyYyA9IGkyY19nZXRfYWRhcGRhdGEoYWRhcCk7CisKKwlwbXNnID0gJmUtPmkyYy5tc2dz WzBdOworCXByX2RlYnVnKCJpMmNfbXBjX2lwbWk6IG1wY19zdGFydCBkb2luZyAlcyAlZCBi eXRlcyB0byAweCUwMnggLSAlZCBtZXNzYWdlc1xuIiwKKwkJIHBtc2ctPmZsYWdzICYgSTJD X01fUkQgPyAicmVhZCIgOiAid3JpdGUiLAorCQkgcG1zZy0+bGVuLCBwbXNnLT5hZGRyLCBl LT5pMmMubnVtKTsKKwlpZiAoIShwbXNnLT5mbGFncyAmIEkyQ19NX1JEKSAmJiAocG1zZy0+ bGVuID4gMSkpIHsgCisJCW1wY19pMmNfaXBtaV9zdGFydChpMmMpOworCQkvKiBBbGxvdyBi dXMgdXAgdG8gMXMgdG8gYmVjb21lIG5vdCBidXN5ICovCisJCXdoaWxlIChyZWFkYihpMmMt PmJhc2UgKyBNUENfSTJDX1NSKSAmIENTUl9NQkIpIHsKKwkJCWlmIChzaWduYWxfcGVuZGlu ZyhjdXJyZW50KSkgeworCQkJCXByX2luZm8oImkyY19tcGNfaXBtaTogbXBjX3N0YXJ0IGlu dGVycnVwdGVkXG4iKTsKKwkJCQl3cml0ZWNjcihpMmMsIDApOworCQkJCXJldHVybiAtRUlO VFI7CisJCQl9CisJCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBvcmlnX2ppZmZpZXMgKyBI WikpIHsKKwkJCQlwcl9pbmZvKCJpMmNfbXBjX2lwbWk6IG1wYyBzdGFydCB0aW1lb3V0XG4i KTsKKwkJCQlpZiAocmVhZGIoaTJjLT5iYXNlICsgTVBDX0kyQ19TUikgPT0KKwkJCSAgICAJ CShDU1JfTUNGIHwgQ1NSX01CQiB8IENTUl9SWEFLKSkKKwkJCQkJbXBjX2kyY19pcG1pX2Zp eHVwKGkyYyk7CisJCQkJcmV0dXJuIC1FSU87CisJCQl9CisjaWZkZWYgQ09ORklHX0NQQ0k2 MjAwCisJCQl1ZGVsYXkoMTApOworI2Vsc2UKKwkJCXNjaGVkdWxlKCk7CisjZW5kaWYKKwkJ fQorCQlyZXQgPSBtcGNfaXBtaV93cml0ZShpMmMsIHBtc2ctPmFkZHIsIHBtc2ctPmJ1Ziwg cG1zZy0+bGVuLCAwKTsKKwkJbXBjX2kyY19pcG1pX3N0b3AoaTJjKTsKKwl9CisJZS0+Y2Fs bF9hZ2Fpbl91cyA9IDIgKiAoMTAwMDAwMCAvIEhaKTsKKwllLT50aW1lX2xlZnQgPSBNQVhf VElNRU9VVF9VUzsKKworCXJldHVybiAocmV0IDwgMCkgPyByZXQgOiAwOworfQorCisKK3N0 YXRpYyB2b2lkIG1wY19pcG1pX3BvbGwoc3RydWN0IGkyY19hZGFwdGVyICphZGFwLCAKKwkJ CXN0cnVjdCBpMmNfb3BfcV9lbnRyeSAqZSwgCisJCQl1bnNpZ25lZCBpbnQgdXNfc2luY2Vf bGFzdF9wb2xsKQoreworCXU4IHRlbXA7CisJc3RydWN0IGkyY19tc2cgKnBtc2c7CisJaW50 IGk7CisJaW50IHJldCA9IDA7CisJdW5zaWduZWQgbG9uZyBvcmlnX2ppZmZpZXMgPSBqaWZm aWVzOworCXN0cnVjdCBtcGNfaTJjX2lwbWkgKmkyYyA9IGkyY19nZXRfYWRhcGRhdGEoYWRh cCk7CisKKwlwbXNnID0gJmUtPmkyYy5tc2dzWzBdOworCWlmICghKHBtc2ctPmZsYWdzICYg STJDX01fUkQpICYmIChwbXNnLT5sZW4gPT0gMSkpIHsgCisJCXByX2RlYnVnKCJpMmNfbXBj X2lwbWk6IHBvbGwgZG9pbmcgJXMgJWQgYnl0ZXMgdG8gMHglMDJ4IC0gJWQgbWVzc2FnZXNc biIsCisJCQkgcG1zZy0+ZmxhZ3MgJiBJMkNfTV9SRCA/ICJyZWFkIiA6ICJ3cml0ZSIsCisJ CQkgcG1zZy0+bGVuLCBwbXNnLT5hZGRyLCBlLT5pMmMubnVtKTsKKwkJdGVtcCA9IHJlYWRi KGkyYy0+YmFzZSArIE1QQ19JMkNfU1IpOworCQlpZiAodGVtcCAmIENTUl9NQkIpIHsKKwkJ CWUtPnRpbWVfbGVmdCAtPSB1c19zaW5jZV9sYXN0X3BvbGw7CisJCQlpZiAoZS0+dGltZV9s ZWZ0IDw9IDApIHsKKwkJCQlwcl9pbmZvKCJpMmNfbXBjX2lwbWk6IHBvbGwgdGltZW91dCFc biIpOworCQkJCW1wY19pMmNfaXBtaV9maXh1cChpMmMpOworCQkJCWUtPnJlc3VsdCA9IC1F QlVTWTsKKwkJCQlnb3RvIG91dF9kb25lOworCQkJfSBlbHNlIHsKKwkJCQlwcl9pbmZvKCJp MmNfbXBjX2lwbWk6IHBvbGwgYnVzIGJ1c3khXG4iKTsKKwkJCQllLT5jYWxsX2FnYWluX3Vz ID0gUkVUUllfVElNRV9VUzsKKwkJCQlyZXR1cm47CisJCQl9CisJCX0KKworICAgICAgIAkJ bXBjX2kyY19pcG1pX3N0YXJ0KGkyYyk7CisJCXRlbXAgPSByZWFkYihpMmMtPmJhc2UgKyBN UENfSTJDX1NSKTsKKwkJCQorCQkvKiBBbGxvdyBidXMgdXAgdG8gMXMgdG8gYmVjb21lIG5v dCBidXN5ICovCisJCXdoaWxlICh0ZW1wICYgQ1NSX01CQikgeworCQkJaWYgKHNpZ25hbF9w ZW5kaW5nKGN1cnJlbnQpKSB7CisJCQkJcHJfaW5mbygiaTJjX21wY19pcG1pOiBwb2xsIGlu dGVycnVwdGVkXG4iKTsKKwkJCQl3cml0ZWNjcihpMmMsIDApOworCQkJCWUtPnJlc3VsdCA9 IC1FSU5UUjsKKwkJCQltcGNfaTJjX2lwbWlfc3RvcChpMmMpOworCQkJCWdvdG8gb3V0X2Rv bmU7CisJCQl9CisJCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBvcmlnX2ppZmZpZXMgKyBI WikpIHsKKwkJCQlwcl9pbmZvKCJpMmNfbXBjX2lwbWk6IHBvbGwgdGltZW91dCBvbiBpMmMg c3RhcnRcbiIpOworCQkJCWlmIChyZWFkYihpMmMtPmJhc2UgKyBNUENfSTJDX1NSKSA9PSAK KwkJCQkJKENTUl9NQ0YgfCBDU1JfTUJCIHwgQ1NSX1JYQUspKSAKKwkJCQkJbXBjX2kyY19p cG1pX2ZpeHVwKGkyYyk7CisJCQkJZS0+cmVzdWx0ID0gLUVJTzsKKwkJCQlnb3RvIG91dF9k b25lOworCQkJfQorI2lmZGVmIENPTkZJR19DUENJNjIwMAorCQkJdWRlbGF5KDEwKTsKKyNl bHNlCisJCQlzY2hlZHVsZSgpOworI2VuZGlmCisJCX0KKworCQlmb3IgKGkgPSAwOyByZXQg Pj0gMCAmJiBpIDwgZS0+aTJjLm51bTsgaSsrKSB7CisJCQlwbXNnID0gJmUtPmkyYy5tc2dz W2ldOworCQkJcHJfZGVidWcoImkyY19tcGNfaXBtaTogcG9sbCBkb2luZyAlcyAlZCBieXRl cyB0byAweCUwMnggLSAlZCBvZiAlZCBtZXNzYWdlc1xuIiwKKwkJCQkgcG1zZy0+ZmxhZ3Mg JiBJMkNfTV9SRCA/ICJyZWFkIiA6ICJ3cml0ZSIsCisJCQkJIHBtc2ctPmxlbiwgcG1zZy0+ YWRkciwgaSArIDEsIGUtPmkyYy5udW0pOworCQkJaWYgKHBtc2ctPmZsYWdzICYgSTJDX01f UkQpIHsgCisJCQkJcmV0ID0gbXBjX2lwbWlfcmVhZChpMmMsIHBtc2ctPmFkZHIsIHBtc2ct PmJ1ZiwgcG1zZy0+bGVuLCBpLCAKKwkJCQkJCXBtc2ctPmZsYWdzICYgSTJDX01fUkVDVl9M RU4pOworCQkJCWlmIChyZXQgPCAwKQorCQkJCQllLT5yZXN1bHQgPSByZXQ7CisJCQl9IGVs c2UgaWYgKGUtPmkyYy5udW0gPiAxKSB7CisJCQkJcmV0ID0gbXBjX2lwbWlfd3JpdGUoaTJj LCBwbXNnLT5hZGRyLCBwbXNnLT5idWYsIHBtc2ctPmxlbiwgaSk7CisJCQkJaWYgKHJldCA8 IDApCisJCQkJCWUtPnJlc3VsdCA9IHJldDsKKwkJCX0KKwkJfQorICAgICAgIAkJbXBjX2ky Y19pcG1pX3N0b3AoaTJjKTsKKwl9CitvdXRfZG9uZToKKwllLT5jYWxsX2FnYWluX3VzID0g MjAgKiAoMTAwMDAwMCAvIEhaKTsKKwlpMmNfb3BfZG9uZShhZGFwLCBlKTsKKwlyZXR1cm47 Cit9CisKKworc3RhdGljIHUzMiBtcGNfaXBtaV9mdW5jdGlvbmFsaXR5KHN0cnVjdCBpMmNf YWRhcHRlciAqYWRhcCkKK3sKKwlyZXR1cm4gSTJDX0ZVTkNfSTJDIHwgSTJDX0ZVTkNfU01C VVNfRU1VTDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfYWxnb3JpdGhtIG1wY19p cG1pX2FsZ28gPSB7CisJLm1hc3Rlcl9zdGFydCAgPSBtcGNfaXBtaV9zdGFydCwKKwkucG9s bAkgICAgICAgPSBtcGNfaXBtaV9wb2xsLAorCS5mdW5jdGlvbmFsaXR5ID0gbXBjX2lwbWlf ZnVuY3Rpb25hbGl0eSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2FkYXB0ZXIgbXBjX2lw bWlfb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5uYW1lID0gIk1QQyBJUE1J IGFkYXB0ZXIiLAorCS5hbGdvID0gJm1wY19pcG1pX2FsZ28sCisJLnRpbWVvdXQgPSBIWiwK K307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGZzbF9pMmNfaXBtaV9wcm9iZShzdHJ1Y3Qg b2ZfZGV2aWNlICpvcCwgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCit7CisJ aW50IHJlc3VsdCA9IDA7CisJc3RydWN0IG1wY19pMmNfaXBtaSAqaTJjOworCisJaTJjID0g a3phbGxvYyhzaXplb2YoKmkyYyksIEdGUF9LRVJORUwpOworCWlmICghaTJjKQorCQlyZXR1 cm4gLUVOT01FTTsKKworCWlmIChvZl9nZXRfcHJvcGVydHkob3AtPm5vZGUsICJkZnNyciIs IE5VTEwpKQorCQlpMmMtPmZsYWdzIHw9IEZTTF9JMkNfREVWX1NFUEFSQVRFX0RGU1JSOwor CisJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKG9wLT5ub2RlLCAiZnNsLG1wYzUyMDAt aTJjIikgfHwKKwkJCW9mX2RldmljZV9pc19jb21wYXRpYmxlKG9wLT5ub2RlLCAibXBjNTIw MC1pMmMiKSkKKwkJaTJjLT5mbGFncyB8PSBGU0xfSTJDX0RFVl9DTE9DS181MjAwOworCisJ aW5pdF93YWl0cXVldWVfaGVhZCgmaTJjLT5xdWV1ZSk7CisKKwlpMmMtPmJhc2UgPSBvZl9p b21hcChvcC0+bm9kZSwgMCk7CisJaWYgKCFpMmMtPmJhc2UpIHsKKwkJcHJpbnRrKEtFUk5f RVJSICJpMmMtbXBjLWlwbWkgLSBmYWlsZWQgdG8gbWFwIGNvbnRyb2xsZXJcbiIpOworCQly ZXN1bHQgPSAtRU5PTUVNOworCQlnb3RvIGZhaWxfbWFwOworCX0KKworCWkyYy0+aXJxID0g aXJxX29mX3BhcnNlX2FuZF9tYXAob3AtPm5vZGUsIDApOworCWlmIChpMmMtPmlycSAhPSBO T19JUlEpIHsgLyogaTJjLT5pcnEgPSBOT19JUlEgaW1wbGllcyBwb2xsaW5nICovCisJCXJl c3VsdCA9IHJlcXVlc3RfaXJxKGkyYy0+aXJxLCBtcGNfaTJjX2lwbWlfaXNyLAorCQkJCSAg ICAgSVJRRl9TSEFSRUQsICJpMmMtbXBjLWlwbWkiLCBpMmMpOworCQlpZiAocmVzdWx0IDwg MCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJpMmMtbXBjLWlwbWkgLSBmYWlsZWQgdG8gYXR0 YWNoIGludGVycnVwdFxuIik7CisJCQlnb3RvIGZhaWxfcmVxdWVzdDsKKwkJfQorCX0KKwkK KwltcGNfaTJjX2lwbWlfc2V0Y2xvY2soaTJjKTsKKworCWRldl9zZXRfZHJ2ZGF0YSgmb3At PmRldiwgaTJjKTsKKworCWkyYy0+YWRhcCA9IG1wY19pcG1pX29wczsKKwlpMmNfc2V0X2Fk YXBkYXRhKCZpMmMtPmFkYXAsIGkyYyk7CisJaTJjLT5hZGFwLmRldi5wYXJlbnQgPSAmb3At PmRldjsKKworCXJlc3VsdCA9IGkyY19hZGRfYWRhcHRlcigmaTJjLT5hZGFwKTsKKwlpZiAo cmVzdWx0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgImkyYy1tcGMtaXBtaSAtIGZhaWxl ZCB0byBhZGQgYWRhcHRlclxuIik7CisJCWdvdG8gZmFpbF9hZGQ7CisJfQorCW9mX3JlZ2lz dGVyX2kyY19kZXZpY2VzKCZpMmMtPmFkYXAsIG9wLT5ub2RlKTsKKworCXJldHVybiByZXN1 bHQ7CisKKyBmYWlsX2FkZDoKKwlkZXZfc2V0X2RydmRhdGEoJm9wLT5kZXYsIE5VTEwpOwor CWZyZWVfaXJxKGkyYy0+aXJxLCBpMmMpOworIGZhaWxfcmVxdWVzdDoKKwlpcnFfZGlzcG9z ZV9tYXBwaW5nKGkyYy0+aXJxKTsKKyAJaW91bm1hcChpMmMtPmJhc2UpOworIGZhaWxfbWFw OgorCWtmcmVlKGkyYyk7CisJcmV0dXJuIHJlc3VsdDsKK307CisKK3N0YXRpYyBpbnQgX19k ZXZleGl0IGZzbF9pMmNfaXBtaV9yZW1vdmUoc3RydWN0IG9mX2RldmljZSAqb3ApCit7CisJ c3RydWN0IG1wY19pMmNfaXBtaSAqaTJjID0gZGV2X2dldF9kcnZkYXRhKCZvcC0+ZGV2KTsK KworCWkyY19kZWxfYWRhcHRlcigmaTJjLT5hZGFwKTsKKwlkZXZfc2V0X2RydmRhdGEoJm9w LT5kZXYsIE5VTEwpOworCisJaWYgKGkyYy0+aXJxICE9IE5PX0lSUSkKKwkJZnJlZV9pcnEo aTJjLT5pcnEsIGkyYyk7CisKKwlpcnFfZGlzcG9zZV9tYXBwaW5nKGkyYy0+aXJxKTsKKwlp b3VubWFwKGkyYy0+YmFzZSk7CisJa2ZyZWUoaTJjKTsKKwlyZXR1cm4gMDsKK307CisKK3N0 YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG1wY19pMmNfaXBtaV9vZl9tYXRjaFtd ID0geworCXsuY29tcGF0aWJsZSA9ICJmc2wtaTJjLWlwbWkiLH0sCisJe30sCit9OworTU9E VUxFX0RFVklDRV9UQUJMRShvZiwgbXBjX2kyY19pcG1pX29mX21hdGNoKTsKKworCisvKiBT dHJ1Y3R1cmUgZm9yIGEgZGV2aWNlIGRyaXZlciAqLworc3RhdGljIHN0cnVjdCBvZl9wbGF0 Zm9ybV9kcml2ZXIgbXBjX2kyY19pcG1pX2RyaXZlciA9IHsKKwkubWF0Y2hfdGFibGUJPSBt cGNfaTJjX2lwbWlfb2ZfbWF0Y2gsCisJLnByb2JlCQk9IGZzbF9pMmNfaXBtaV9wcm9iZSwK KwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGZzbF9pMmNfaXBtaV9yZW1vdmUpLAorCS5kcml2 ZXIJCT0geworCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLm5hbWUJPSBEUlZfTkFNRSwK Kwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgZnNsX2kyY19pcG1pX2luaXQodm9pZCkK K3sKKwlpbnQgcnY7CisKKwlydiA9IG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmbXBj X2kyY19pcG1pX2RyaXZlcik7CisJaWYgKHJ2KQorCQlwcmludGsoS0VSTl9FUlIgRFJWX05B TUUgCisJCSAgICAgICAiIG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlciBmYWlsZWQgKCVp KVxuIiwgcnYpOworCXJldHVybiBydjsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGZzbF9p MmNfaXBtaV9leGl0KHZvaWQpCit7CisJb2ZfdW5yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIo Jm1wY19pMmNfaXBtaV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChmc2xfaTJjX2lwbWlf aW5pdCk7Cittb2R1bGVfZXhpdChmc2xfaTJjX2lwbWlfZXhpdCk7CisKK01PRFVMRV9BVVRI T1IoIkFkcmlhbiBDb3ggPGFkcmlhbkBodW1ib2xkdC5jby51az4iKTsKK01PRFVMRV9ERVND UklQVElPTgorICAgICgiSTJDLUJ1cyBhZGFwdGVyIHdpdGggYmxvY2tpbmcgc3VwcG9ydCIp OworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC11IC0tbmV3LWZpbGUgLS1yZWN1cnNp dmUgbGludXgtMi42LjI5LjYub3JpZy9kcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZyBsaW51 eC0yLjYuMjkuNi5tb2QvZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWcKLS0tIGxpbnV4LTIu Ni4yOS42Lm9yaWcvZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWcJMjAwOS0wNy0wMiAxNjo0 MToyMC4wMDAwMDAwMDAgLTA3MDAKKysrIGxpbnV4LTIuNi4yOS42Lm1vZC9kcml2ZXJzL2ky Yy9idXNzZXMvS2NvbmZpZwkyMDA5LTA3LTIxIDExOjI4OjE4LjAwMDAwMDAwMCAtMDcwMApA QCAtMzkxLDYgKzM5MSwxNiBAQAogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQg YXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgaTJj LW1wYy4KIAorY29uZmlnIEkyQ19NUENfSVBNSQorCXRyaXN0YXRlICI4NXh4IElQTUkiCisJ ZGVwZW5kcyBvbiBDUENJNjIwMCAKKwloZWxwCisJICBJZiB5b3Ugc2F5IHllcyB0byB0aGlz IG9wdGlvbiwgc3VwcG9ydCB3aWxsIGJlIGluY2x1ZGVkIGZvciB0aGUKKwkgIGJ1aWx0LWlu IEkyQyBpbnRlcmZhY2Ugb24gdGhlIE1QQzg1eHggcHJvY2Vzc29yIGJhc2VkIENQQ0k2MjAw LiAKKworCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJ ZiBzbywgdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgaTJjLW1wYy1pcG1pLgorCiBj b25maWcgSTJDX01WNjRYWFgKIAl0cmlzdGF0ZSAiTWFydmVsbCBtdjY0eHh4IEkyQyBDb250 cm9sbGVyIgogCWRlcGVuZHMgb24gKE1WNjRYNjAgfHwgUExBVF9PUklPTikgJiYgRVhQRVJJ TUVOVEFMCmRpZmYgLXUgLS1uZXctZmlsZSAtLXJlY3Vyc2l2ZSBsaW51eC0yLjYuMjkuNi5v cmlnL2RyaXZlcnMvaTJjL2J1c3Nlcy9NYWtlZmlsZSBsaW51eC0yLjYuMjkuNi5tb2QvZHJp dmVycy9pMmMvYnVzc2VzL01ha2VmaWxlCi0tLSBsaW51eC0yLjYuMjkuNi5vcmlnL2RyaXZl cnMvaTJjL2J1c3Nlcy9NYWtlZmlsZQkyMDA5LTA3LTAyIDE2OjQxOjIwLjAwMDAwMDAwMCAt MDcwMAorKysgbGludXgtMi42LjI5LjYubW9kL2RyaXZlcnMvaTJjL2J1c3Nlcy9NYWtlZmls ZQkyMDA5LTA3LTIxIDExOjI4OjE4LjAwMDAwMDAwMCAtMDcwMApAQCAtMzYsNiArMzYsNyBA QAogb2JqLSQoQ09ORklHX0kyQ19JT1AzWFgpCSs9IGkyYy1pb3AzeHgubwogb2JqLSQoQ09O RklHX0kyQ19JWFAyMDAwKQkrPSBpMmMtaXhwMjAwMC5vCiBvYmotJChDT05GSUdfSTJDX01Q QykJCSs9IGkyYy1tcGMubworb2JqLSQoQ09ORklHX0kyQ19NUENfSVBNSSkJKz0gaTJjLW1w Yy1pcG1pLm8KIG9iai0kKENPTkZJR19JMkNfTVY2NFhYWCkJKz0gaTJjLW12NjR4eHgubwog b2JqLSQoQ09ORklHX0kyQ19PQ09SRVMpCSs9IGkyYy1vY29yZXMubwogb2JqLSQoQ09ORklH X0kyQ19PTUFQKQkJKz0gaTJjLW9tYXAubwpkaWZmIC11IC0tbmV3LWZpbGUgLS1yZWN1cnNp dmUgbGludXgtMi42LjI5LjYub3JpZy9kcml2ZXJzL2kyYy9pMmMtY29yZS5jIGxpbnV4LTIu Ni4yOS42Lm1vZC9kcml2ZXJzL2kyYy9pMmMtY29yZS5jCi0tLSBsaW51eC0yLjYuMjkuNi5v cmlnL2RyaXZlcnMvaTJjL2kyYy1jb3JlLmMJMjAwOS0wNy0wMiAxNjo0MToyMC4wMDAwMDAw MDAgLTA3MDAKKysrIGxpbnV4LTIuNi4yOS42Lm1vZC9kcml2ZXJzL2kyYy9pMmMtY29yZS5j CTIwMDktMDctMjEgMTE6Mjg6MTguMDAwMDAwMDAwIC0wNzAwCkBAIC0zOCw2ICszOCw3IEBA CiAKICNpbmNsdWRlICJpMmMtY29yZS5oIgogCisjZGVmaW5lIFVTRUNfUEVSX0pJRkZJRSAo MTAwMDAwMCAvIEhaKQogCiBzdGF0aWMgREVGSU5FX01VVEVYKGNvcmVfbG9jayk7CiBzdGF0 aWMgREVGSU5FX0lEUihpMmNfYWRhcHRlcl9pZHIpOwpAQCAtNDQ2LDcgKzQ0NywyMSBAQAog CiAJbXV0ZXhfaW5pdCgmYWRhcC0+YnVzX2xvY2spOwogCW11dGV4X2luaXQoJmFkYXAtPmNs aXN0X2xvY2spOworCXNwaW5fbG9ja19pbml0KCZhZGFwLT5xX2xvY2spOworCUlOSVRfTElT VF9IRUFEKCZhZGFwLT5xKTsKIAlJTklUX0xJU1RfSEVBRCgmYWRhcC0+Y2xpZW50cyk7CisJ YWRhcC0+dGltZXIgPSBrbWFsbG9jKHNpemVvZigqYWRhcC0+dGltZXIpLCBHRlBfS0VSTkVM KTsKKwlpZiAoIWFkYXAtPnRpbWVyKSB7CisJCXJlcyA9IC1FTk9NRU07CisJCWdvdG8gb3V0 X3VubG9jazsKKwl9CisKKwlpbml0X3RpbWVyKCZhZGFwLT50aW1lci0+dGltZXIpOworCXNw aW5fbG9ja19pbml0KCZhZGFwLT50aW1lci0+bG9jayk7CisJYWRhcC0+dGltZXItPmRlbGV0 ZWQgPSAwOworCWFkYXAtPnRpbWVyLT5ydW5uaW5nID0gMDsKKwlhZGFwLT50aW1lci0+bmV4 dF9jYWxsX3RpbWUgPSAwOworCWFkYXAtPnRpbWVyLT5hZGFwdGVyID0gYWRhcDsKIAogCW11 dGV4X2xvY2soJmNvcmVfbG9jayk7CiAKQEAgLTY1MSw2ICs2NjYsMTMgQEAKIAkJfQogCX0K IAorCS8qIFN0b3AgdGhlIHRpbWVyIGFuZCBmcmVlIGl0cyBtZW1vcnkuICovCisJYWRhcC0+ dGltZXItPmRlbGV0ZWQgPSAxOworCS8qIFRpbWVyIGNhbiBubyBsb25nZXIgYmUgc3RhcnRl ZCBub3cuICovCisJZGVsX3RpbWVyX3N5bmMoJmFkYXAtPnRpbWVyLT50aW1lcik7CisJa2Zy ZWUoYWRhcC0+dGltZXIpOworCWFkYXAtPnRpbWVyID0gTlVMTDsKKwogCS8qIGNsZWFuIHVw IHRoZSBzeXNmcyByZXByZXNlbnRhdGlvbiAqLwogCWluaXRfY29tcGxldGlvbigmYWRhcC0+ ZGV2X3JlbGVhc2VkKTsKIAlkZXZpY2VfdW5yZWdpc3RlcigmYWRhcC0+ZGV2KTsKQEAgLTk5 NiwyNiArMTAxOCwxNzggQEAKIG1vZHVsZV9leGl0KGkyY19leGl0KTsKIAogLyogLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogdGhl IGZ1bmN0aW9uYWwgaW50ZXJmYWNlIHRvIHRoZSBpMmMgYnVzc2VzLgorICogVGltZXIgb3Bl cmF0aW9ucwogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQogICovCitzdGF0aWMgdm9pZCBpMmNfaGFuZGxlX3RpbWVyKHVuc2lnbmVk IGxvbmcgZGF0YSk7CiAKLS8qKgotICogaTJjX3RyYW5zZmVyIC0gZXhlY3V0ZSBhIHNpbmds ZSBvciBjb21iaW5lZCBJMkMgbWVzc2FnZQotICogQGFkYXA6IEhhbmRsZSB0byBJMkMgYnVz Ci0gKiBAbXNnczogT25lIG9yIG1vcmUgbWVzc2FnZXMgdG8gZXhlY3V0ZSBiZWZvcmUgU1RP UCBpcyBpc3N1ZWQgdG8KLSAqCXRlcm1pbmF0ZSB0aGUgb3BlcmF0aW9uOyBlYWNoIG1lc3Nh Z2UgYmVnaW5zIHdpdGggYSBTVEFSVC4KLSAqIEBudW06IE51bWJlciBvZiBtZXNzYWdlcyB0 byBiZSBleGVjdXRlZC4KLSAqCi0gKiBSZXR1cm5zIG5lZ2F0aXZlIGVycm5vLCBlbHNlIHRo ZSBudW1iZXIgb2YgbWVzc2FnZXMgZXhlY3V0ZWQuCi0gKgotICogTm90ZSB0aGF0IHRoZXJl IGlzIG5vIHJlcXVpcmVtZW50IHRoYXQgZWFjaCBtZXNzYWdlIGJlIHNlbnQgdG8KLSAqIHRo ZSBzYW1lIHNsYXZlIGFkZHJlc3MsIGFsdGhvdWdoIHRoYXQgaXMgdGhlIG1vc3QgY29tbW9u IG1vZGVsLgorc3RhdGljIHZvaWQgaTJjX3N0YXJ0X3RpbWVyKHN0cnVjdCBpMmNfYWRhcHRl ciAqYWRhcCwKKwkJCSAgICBzdHJ1Y3QgaTJjX29wX3FfZW50cnkgKmVudHJ5KQoreworCXVu c2lnbmVkIGludCB3YWl0X2ppZmZpZXM7CisJc3RydWN0IGkyY190aW1lciAqdCA9IGFkYXAt PnRpbWVyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwl3YWl0X2ppZmZpZXMgPSAoKGVu dHJ5LT5jYWxsX2FnYWluX3VzICsgVVNFQ19QRVJfSklGRklFIC0gMSkKKwkJCS8gVVNFQ19Q RVJfSklGRklFKTsKKwlpZiAod2FpdF9qaWZmaWVzID09IDApCisJCXdhaXRfamlmZmllcyA9 IDE7CisJLyoKKwkgKiBUaGlzIHdvbid0IGJlIHBvbGxlZCBmcm9tIHRoZSB1c2VyIGNvZGUs IHNvCisJICogc3RhcnQgYSB0aW1lciB0byBwb2xsIGl0LgorCSAqLworCXNwaW5fbG9ja19p cnFzYXZlKCZ0LT5sb2NrLCBmbGFncyk7CisJaWYgKCF0LT5kZWxldGVkICYmICF0LT5ydW5u aW5nKSB7CisJCXQtPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgd2FpdF9qaWZmaWVzOwor CQl0LT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIHQ7CisJCXQtPnRpbWVyLmZ1bmN0 aW9uID0gaTJjX2hhbmRsZV90aW1lcjsKKwkJdC0+cnVubmluZyA9IDE7CisJCXQtPm5leHRf Y2FsbF90aW1lID0gd2FpdF9qaWZmaWVzICogVVNFQ19QRVJfSklGRklFOworCQlhZGRfdGlt ZXIoJnQtPnRpbWVyKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdC0+bG9jaywg ZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBpMmNfaGFuZGxlX3RpbWVyKHVuc2lnbmVkIGxv bmcgZGF0YSkKK3sKKwlzdHJ1Y3QgaTJjX3RpbWVyICAgICAgKnQgPSAodm9pZCAqKSBkYXRh OworCXN0cnVjdCBpMmNfYWRhcHRlciAgICAqYWRhcDsKKwl1bnNpZ25lZCBsb25nICAgICAg ICAgZmxhZ3M7CisJc3RydWN0IGkyY19vcF9xX2VudHJ5ICplbnRyeTsKKworCXNwaW5fbG9j a19pcnFzYXZlKCZ0LT5sb2NrLCBmbGFncyk7CisJYWRhcCA9IHQtPmFkYXB0ZXI7CisJdC0+ cnVubmluZyA9IDA7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdC0+bG9jaywgZmxhZ3Mp OworCisJZW50cnkgPSBpMmNfZW50cnlfZ2V0KGFkYXApOworCXByX2RlYnVnKCJpMmNfaGFu ZGxlX3RpbWVyOiAlcCAlcFxuIiwgYWRhcCwgZW50cnkpOworCWlmIChlbnRyeSkgeworCQlh ZGFwLT5hbGdvLT5wb2xsKGFkYXAsIGVudHJ5LCB0LT5uZXh0X2NhbGxfdGltZSk7CisKKwkJ c3Bpbl9sb2NrX2lycXNhdmUoJmFkYXAtPnFfbG9jaywgZmxhZ3MpOworCQlpZiAoZW50cnkt PnVzZV90aW1lcikKKwkJCWkyY19zdGFydF90aW1lcihhZGFwLCBlbnRyeSk7CisJCXNwaW5f dW5sb2NrX2lycXJlc3RvcmUoJmFkYXAtPnFfbG9jaywgZmxhZ3MpOworCQlpMmNfZW50cnlf cHV0KGFkYXAsIGVudHJ5KTsKKwl9Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHRoZSBmdW5jdGlvbmFsIGludGVy ZmFjZSB0byB0aGUgaTJjIGJ1c3Nlcy4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwotaW50IGkyY190cmFuc2ZlcihzdHJ1 Y3QgaTJjX2FkYXB0ZXIgKiBhZGFwLCBzdHJ1Y3QgaTJjX21zZyAqbXNncywgaW50IG51bSkK KworLyogTXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgcV9sb2NrIGhlbGQuICovCitzdGF0aWMg aW50IGkyY19zdGFydF9lbnRyeShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsCisJCQkgICBz dHJ1Y3QgaTJjX29wX3FfZW50cnkgKmVudHJ5KQogewogCWludCByZXQ7CiAKKwllbnRyeS0+ c3RhdGUgPSBJMkNfT1BfSU5JVElBTElaRUQ7CisJc3dpdGNoIChlbnRyeS0+eGZlcl90eXBl KSB7CisJY2FzZSBJMkNfT1BfSTJDOgorCQlyZXQgPSBhZGFwLT5hbGdvLT5tYXN0ZXJfc3Rh cnQoYWRhcCwgZW50cnkpOworCQlicmVhazsKKwljYXNlIEkyQ19PUF9TTUJVUzoKKwkJcmV0 ID0gYWRhcC0+YWxnby0+c21idXNfc3RhcnQoYWRhcCwgZW50cnkpOworCQlicmVhazsKKwlk ZWZhdWx0OgorCQlyZXQgPSAtRUlOVkFMOworCX0KKworCWlmICghcmV0ICYmIGVudHJ5LT51 c2VfdGltZXIpCisJCWkyY19zdGFydF90aW1lcihhZGFwLCBlbnRyeSk7CisKKwlyZXR1cm4g cmV0OworfQorCitzdGF0aWMgdm9pZCBpMmNfd2FpdF9jb21wbGV0ZShzdHJ1Y3QgaTJjX29w X3FfZW50cnkgKmVudHJ5KQoreworCXN0cnVjdCBjb21wbGV0aW9uICpkb25lID0gZW50cnkt PmhhbmRsZXJfZGF0YTsKKwlwcl9kZWJ1ZygiaTJjX3dhaXRfY29tcGxldGUgJXBcbiIsIGVu dHJ5KTsKKwljb21wbGV0ZShkb25lKTsKK30KKworc3RhdGljIHZvaWQgaTJjX2luaXRfZW50 cnkoc3RydWN0IGkyY19vcF9xX2VudHJ5ICplbnRyeSkKK3sKKwllbnRyeS0+c3RhcnQgPSBO VUxMOworCWVudHJ5LT5zdGF0ZSA9IEkyQ19PUF9RVUVVRUQ7CisJZW50cnktPnJlc3VsdCA9 IDA7CisJZW50cnktPmRhdGEgPSBOVUxMOworCWtyZWZfaW5pdCgmZW50cnktPnVzZWNvdW50 KTsKK30KKworc3RhdGljIHZvaWQgaTJjX3BlcmZvcm1fb3Bfd2FpdChzdHJ1Y3QgaTJjX2Fk YXB0ZXIgKmFkYXAsCisJCQkJc3RydWN0IGkyY19vcF9xX2VudHJ5ICplbnRyeSkKK3sKKwlz dHJ1Y3QgY29tcGxldGlvbiBkb25lOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJY29uc3Qg c3RydWN0IGkyY19hbGdvcml0aG0gKmFsZ28gPSBhZGFwLT5hbGdvOworCWludCByZXQgPSAw OworCisJcHJfZGVidWcoImkyY19wZXJmb3JtX29wX3dhaXQgJXAgJXBcbiIsIGFkYXAsIGVu dHJ5KTsKKwlpMmNfaW5pdF9lbnRyeShlbnRyeSk7CisJZW50cnktPnVzZV90aW1lciA9IDA7 IC8qIFdlIHBvbGwgaXQgZGlyZWN0bHkuICovCisJaW5pdF9jb21wbGV0aW9uKCZkb25lKTsK KwllbnRyeS0+aGFuZGxlciA9IGkyY193YWl0X2NvbXBsZXRlOworCWVudHJ5LT5oYW5kbGVy X2RhdGEgPSAmZG9uZTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwLT5xX2xvY2ssIGZs YWdzKTsKKwlsaXN0X2FkZF90YWlsKCZlbnRyeS0+bGluaywgJmFkYXAtPnEpOworCWlmIChh ZGFwLT5xLm5leHQgPT0gJmVudHJ5LT5saW5rKSB7CisJCS8qIEFkZGVkIHRvIHRoZSBsaXN0 IGhlYWQsIHN0YXJ0IGl0ICovCisJCXJldCA9IGkyY19zdGFydF9lbnRyeShhZGFwLCBlbnRy eSk7CisJCWlmIChyZXQpIHsKKwkJCWVudHJ5LT5yZXN1bHQgPSByZXQ7CisJCQlsaXN0X2Rl bCgmZW50cnktPmxpbmspOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcC0+cV9s b2NrLCBmbGFncyk7CisJCQlyZXR1cm47CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9y ZSgmYWRhcC0+cV9sb2NrLCBmbGFncyk7CisJfSBlbHNlIHsKKwkJc3RydWN0IGNvbXBsZXRp b24gc3RhcnQ7CisJCWluaXRfY29tcGxldGlvbigmc3RhcnQpOworCQllbnRyeS0+c3RhcnQg PSAmc3RhcnQ7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXAtPnFfbG9jaywgZmxh Z3MpOworCisJCXdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZSgmc3RhcnQpOwor CisJCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwLT5xX2xvY2ssIGZsYWdzKTsKKwkJaWYgKGVu dHJ5LT5zdGF0ZSA9PSBJMkNfT1BfUVVFVUVEKSB7CisJCQkvKgorCQkJICogV2FpdCB3YXMg aW50ZXJydXB0ZWQgYmVmb3JlIHRoZSBlbnRyeSB3YXMKKwkJCSAqIHN0YXJ0ZWQuCisJCQkg Ki8KKwkJCWVudHJ5LT5yZXN1bHQgPSAtRVJFU1RBUlRTWVM7CisJCQlsaXN0X2RlbCgmZW50 cnktPmxpbmspOworCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXAtPnFfbG9j aywgZmxhZ3MpOworCX0KKworCS8qCisJICogT25jZSB0aGUgb3BlcmF0aW9uIGlzIHN0YXJ0 ZWQsIHdlIHdpbGwgbm90CisJICogaW50ZXJydXB0IGl0LgorCSAqLworCXdoaWxlIChlbnRy eS0+c3RhdGUgIT0gSTJDX09QX0ZJTklTSEVEKSB7CisJCXVuc2lnbmVkIGludCB0aW1lb3V0 ID0gZW50cnktPmNhbGxfYWdhaW5fdXM7CisJCXRpbWVvdXQgKz0gKFVTRUNfUEVSX0pJRkZJ RSAtIDEpOworCQl0aW1lb3V0IC89IFVTRUNfUEVSX0pJRkZJRTsKKwkJaWYgKHRpbWVvdXQg PT0gMCkKKwkJCXRpbWVvdXQgPSAxOworCQl3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQo JmRvbmUsIHRpbWVvdXQpOworCQlpZiAoZW50cnktPnN0YXRlID09IEkyQ19PUF9GSU5JU0hF RCkKKwkJCWJyZWFrOworCQlhbGdvLT5wb2xsKGFkYXAsIGVudHJ5LCB0aW1lb3V0ICogVVNF Q19QRVJfSklGRklFKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGkyY190cmFuc2Zlcl9lbnRy eShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsCisJCQkgICAgICAgc3RydWN0IGkyY19vcF9x X2VudHJ5ICplbnRyeSkKK3sKKyNpZmRlZiBERUJVRworCWludCByZXQ7CisjZW5kaWYKIAkv KiBSRVZJU0lUIHRoZSBmYXVsdCByZXBvcnRpbmcgbW9kZWwgaGVyZSBpcyB3ZWFrOgogCSAq CiAJICogIC0gV2hlbiB3ZSBnZXQgYW4gZXJyb3IgYWZ0ZXIgcmVjZWl2aW5nIE4gYnl0ZXMg ZnJvbSBhIHNsYXZlLApAQCAtMTAzMywzNCArMTIwNyw3MSBAQAogCSAqICAgIChkaXNjYXJk aW5nIHN0YXR1cyBvbiB0aGUgZmlyc3Qgb25lKS4KIAkgKi8KIAotCWlmIChhZGFwLT5hbGdv LT5tYXN0ZXJfeGZlcikgeworCWVudHJ5LT54ZmVyX3R5cGUgPSBJMkNfT1BfSTJDOwogI2lm ZGVmIERFQlVHCi0JCWZvciAocmV0ID0gMDsgcmV0IDwgbnVtOyByZXQrKykgewotCQkJZGV2 X2RiZygmYWRhcC0+ZGV2LCAibWFzdGVyX3hmZXJbJWRdICVjLCBhZGRyPTB4JTAyeCwgIgot CQkJCSJsZW49JWQlc1xuIiwgcmV0LCAobXNnc1tyZXRdLmZsYWdzICYgSTJDX01fUkQpCi0J CQkJPyAnUicgOiAnVycsIG1zZ3NbcmV0XS5hZGRyLCBtc2dzW3JldF0ubGVuLAotCQkJCSht c2dzW3JldF0uZmxhZ3MgJiBJMkNfTV9SRUNWX0xFTikgPyAiKyIgOiAiIik7Ci0JCX0KKwlm b3IgKHJldCA9IDA7IHJldCA8IGVudHJ5LT5pMmMubnVtOyByZXQrKykgeworCQlkZXZfZGJn KCZhZGFwLT5kZXYsICJtYXN0ZXJfeGZlclslZF0gJWMsIGFkZHI9MHglMDJ4LCAiCisJCQki bGVuPSVkJXNcbiIsIHJldCwKKwkJCShlbnRyeS0+aTJjLm1zZ3NbcmV0XS5mbGFncyAmIEky Q19NX1JEID8KKwkJCSAnUicgOiAnVycpLAorCQkJZW50cnktPmkyYy5tc2dzW3JldF0uYWRk ciwgZW50cnktPmkyYy5tc2dzW3JldF0ubGVuLAorCQkJKG1zZ3NbcmV0XS5mbGFncyAmIEky Q19NX1JFQ1ZfTEVOKSA/ICIrIiA6ICIiKTsKKwl9CiAjZW5kaWYKLQorCWlmIChhZGFwLT5h bGdvLT5tYXN0ZXJfc3RhcnQpIHsKKwkJaTJjX3BlcmZvcm1fb3Bfd2FpdChhZGFwLCBlbnRy eSk7CisJfSBlbHNlIGlmIChhZGFwLT5hbGdvLT5tYXN0ZXJfeGZlcikgewogCQlpZiAoaW5f YXRvbWljKCkgfHwgaXJxc19kaXNhYmxlZCgpKSB7Ci0JCQlyZXQgPSBtdXRleF90cnlsb2Nr KCZhZGFwLT5idXNfbG9jayk7Ci0JCQlpZiAoIXJldCkKKwkJCWlmICghbXV0ZXhfdHJ5bG9j aygmYWRhcC0+YnVzX2xvY2spKSB7CiAJCQkJLyogSTJDIGFjdGl2aXR5IGlzIG9uZ29pbmcu ICovCi0JCQkJcmV0dXJuIC1FQUdBSU47CisJCQkJZW50cnktPnJlc3VsdCA9IC1FQUdBSU47 CisJCQkJcmV0dXJuOworCQkJfQogCQl9IGVsc2UgewogCQkJbXV0ZXhfbG9ja19uZXN0ZWQo JmFkYXAtPmJ1c19sb2NrLCBhZGFwLT5sZXZlbCk7CiAJCX0KIAotCQlyZXQgPSBhZGFwLT5h bGdvLT5tYXN0ZXJfeGZlcihhZGFwLG1zZ3MsbnVtKTsKKwkJZW50cnktPnJlc3VsdCA9IGFk YXAtPmFsZ28tPm1hc3Rlcl94ZmVyKGFkYXAsIGVudHJ5LT5pMmMubXNncywKKwkJCQkJCQll bnRyeS0+aTJjLm51bSk7CiAJCW11dGV4X3VubG9jaygmYWRhcC0+YnVzX2xvY2spOwotCi0J CXJldHVybiByZXQ7CisJCWlmIChlbnRyeS0+Y29tcGxldGUpCisJCQllbnRyeS0+Y29tcGxl dGUoYWRhcCwgZW50cnkpOwogCX0gZWxzZSB7CiAJCWRldl9kYmcoJmFkYXAtPmRldiwgIkky QyBsZXZlbCB0cmFuc2ZlcnMgbm90IHN1cHBvcnRlZFxuIik7Ci0JCXJldHVybiAtRU9QTk9U U1VQUDsKKwkJZW50cnktPnJlc3VsdCA9IC1FT1BOT1RTVVBQOwogCX0KIH0KKworLyoqCisg KiBpMmNfdHJhbnNmZXIgLSBleGVjdXRlIGEgc2luZ2xlIG9yIGNvbWJpbmVkIEkyQyBtZXNz YWdlCisgKiBAYWRhcDogSGFuZGxlIHRvIEkyQyBidXMKKyAqIEBtc2dzOiBPbmUgb3IgbW9y ZSBtZXNzYWdlcyB0byBleGVjdXRlIGJlZm9yZSBTVE9QIGlzIGlzc3VlZCB0bworICoJdGVy bWluYXRlIHRoZSBvcGVyYXRpb247IGVhY2ggbWVzc2FnZSBiZWdpbnMgd2l0aCBhIFNUQVJU LgorICogQG51bTogTnVtYmVyIG9mIG1lc3NhZ2VzIHRvIGJlIGV4ZWN1dGVkLgorICoKKyAq IFJldHVybnMgbmVnYXRpdmUgZXJybm8sIGVsc2UgdGhlIG51bWJlciBvZiBtZXNzYWdlcyBl eGVjdXRlZC4KKyAqCisgKiBOb3RlIHRoYXQgdGhlcmUgaXMgbm8gcmVxdWlyZW1lbnQgdGhh dCBlYWNoIG1lc3NhZ2UgYmUgc2VudCB0bworICogdGhlIHNhbWUgc2xhdmUgYWRkcmVzcywg YWx0aG91Z2ggdGhhdCBpcyB0aGUgbW9zdCBjb21tb24gbW9kZWwuCisgKi8KK2ludCBpMmNf dHJhbnNmZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwLCBzdHJ1Y3QgaTJjX21zZyAqbXNn cywgaW50IG51bSkKK3sKKwlzdHJ1Y3QgaTJjX29wX3FfZW50cnkgKmVudHJ5OworCWludCAg ICAgICAgICAgICAgICAgICBydjsKKworCWVudHJ5ID0ga21hbGxvYyhzaXplb2YoKmVudHJ5 KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFlbnRyeSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwll bnRyeS0+aTJjLm1zZ3MgPSBtc2dzOworCWVudHJ5LT5pMmMubnVtID0gbnVtOworCWVudHJ5 LT5jb21wbGV0ZSA9IE5VTEw7CisKKwlpMmNfdHJhbnNmZXJfZW50cnkoYWRhcCwgZW50cnkp OworCXJ2ID0gZW50cnktPnJlc3VsdDsKKwlrZnJlZShlbnRyeSk7CisJcmV0dXJuIHJ2Owor fQogRVhQT1JUX1NZTUJPTChpMmNfdHJhbnNmZXIpOwogCiAvKioKQEAgLTE4MDUsMTY5ICsy MDE2LDE5NiBAQAogfQogRVhQT1JUX1NZTUJPTChpMmNfc21idXNfd3JpdGVfaTJjX2Jsb2Nr X2RhdGEpOwogCi0vKiBTaW11bGF0ZSBhIFNNQnVzIGNvbW1hbmQgdXNpbmcgdGhlIGkyYyBw cm90b2NvbAotICAgTm8gY2hlY2tpbmcgb2YgcGFyYW1ldGVycyBpcyBkb25lISAgKi8KLXN0 YXRpYyBzMzIgaTJjX3NtYnVzX3hmZXJfZW11bGF0ZWQoc3RydWN0IGkyY19hZGFwdGVyICog YWRhcHRlciwgdTE2IGFkZHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHVuc2lnbmVkIHNob3J0IGZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjaGFyIHJlYWRfd3JpdGUsIHU4IGNvbW1hbmQsIGludCBzaXplLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlvbiBpMmNfc21idXNfZGF0YSAqIGRhdGEp Ci17Ci0JLyogU28gd2UgbmVlZCB0byBnZW5lcmF0ZSBhIHNlcmllcyBvZiBtc2dzLiBJbiB0 aGUgY2FzZSBvZiB3cml0aW5nLCB3ZQotCSAgbmVlZCB0byB1c2Ugb25seSBvbmUgbWVzc2Fn ZTsgd2hlbiByZWFkaW5nLCB3ZSBuZWVkIHR3by4gV2UgaW5pdGlhbGl6ZQotCSAgbW9zdCB0 aGluZ3Mgd2l0aCBzYW5lIGRlZmF1bHRzLCB0byBrZWVwIHRoZSBjb2RlIGJlbG93IHNvbWV3 aGF0Ci0JICBzaW1wbGVyLiAqLwotCXVuc2lnbmVkIGNoYXIgbXNnYnVmMFtJMkNfU01CVVNf QkxPQ0tfTUFYKzNdOwotCXVuc2lnbmVkIGNoYXIgbXNnYnVmMVtJMkNfU01CVVNfQkxPQ0tf TUFYKzJdOwotCWludCBudW0gPSByZWFkX3dyaXRlID09IEkyQ19TTUJVU19SRUFEPzI6MTsK LQlzdHJ1Y3QgaTJjX21zZyBtc2dbMl0gPSB7IHsgYWRkciwgZmxhZ3MsIDEsIG1zZ2J1ZjAg fSwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgIHsgYWRkciwgZmxhZ3MgfCBJMkNfTV9S RCwgMCwgbXNnYnVmMSB9Ci0JICAgICAgICAgICAgICAgICAgICAgICAgfTsKK3N0YXRpYyB2 b2lkIGkyY19zbWJ1c19lbXVfY29tcGxldGUoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVy LAorCQkJCSAgIHN0cnVjdCBpMmNfb3BfcV9lbnRyeSAqZW50cnkpCit7CisJdW5zaWduZWQg Y2hhciAqbXNnYnVmMCA9IGVudHJ5LT5pMmMubXNnc1swXS5idWY7CisJdW5zaWduZWQgY2hh ciAqbXNnYnVmMSA9IGVudHJ5LT5pMmMubXNnc1sxXS5idWY7CisJaW50IG51bSA9IGVudHJ5 LT5zbWJ1cy5yZWFkX3dyaXRlID09IEkyQ19TTUJVU19SRUFEID8gMiA6IDE7CiAJaW50IGk7 Ci0JdTggcGFydGlhbF9wZWMgPSAwOwogCWludCBzdGF0dXM7CiAKLQltc2didWYwWzBdID0g Y29tbWFuZDsKLQlzd2l0Y2goc2l6ZSkgewotCWNhc2UgSTJDX1NNQlVTX1FVSUNLOgotCQlt c2dbMF0ubGVuID0gMDsKLQkJLyogU3BlY2lhbCBjYXNlOiBUaGUgcmVhZC93cml0ZSBmaWVs ZCBpcyB1c2VkIGFzIGRhdGEgKi8KLQkJbXNnWzBdLmZsYWdzID0gZmxhZ3MgfCAocmVhZF93 cml0ZSA9PSBJMkNfU01CVVNfUkVBRCA/Ci0JCQkJCUkyQ19NX1JEIDogMCk7Ci0JCW51bSA9 IDE7Ci0JCWJyZWFrOworCWlmIChlbnRyeS0+cmVzdWx0IDwgMCkKKwkJcmV0dXJuOworCisJ aWYgKGVudHJ5LT5zbWJ1cy5yZWFkX3dyaXRlICE9IEkyQ19TTUJVU19SRUFEKQorCQlyZXR1 cm47CisKKwlzd2l0Y2ggKGVudHJ5LT5zbWJ1cy5zaXplKSB7CiAJY2FzZSBJMkNfU01CVVNf QllURToKLQkJaWYgKHJlYWRfd3JpdGUgPT0gSTJDX1NNQlVTX1JFQUQpIHsKLQkJCS8qIFNw ZWNpYWwgY2FzZTogb25seSBhIHJlYWQhICovCi0JCQltc2dbMF0uZmxhZ3MgPSBJMkNfTV9S RCB8IGZsYWdzOwotCQkJbnVtID0gMTsKLQkJfQorCQllbnRyeS0+c21idXMuZGF0YS0+Ynl0 ZSA9IG1zZ2J1ZjBbMF07CiAJCWJyZWFrOwogCWNhc2UgSTJDX1NNQlVTX0JZVEVfREFUQToK LQkJaWYgKHJlYWRfd3JpdGUgPT0gSTJDX1NNQlVTX1JFQUQpCi0JCQltc2dbMV0ubGVuID0g MTsKLQkJZWxzZSB7Ci0JCQltc2dbMF0ubGVuID0gMjsKLQkJCW1zZ2J1ZjBbMV0gPSBkYXRh LT5ieXRlOwotCQl9CisJCWVudHJ5LT5zbWJ1cy5kYXRhLT5ieXRlID0gbXNnYnVmMVswXTsK IAkJYnJlYWs7CiAJY2FzZSBJMkNfU01CVVNfV09SRF9EQVRBOgotCQlpZiAocmVhZF93cml0 ZSA9PSBJMkNfU01CVVNfUkVBRCkKLQkJCW1zZ1sxXS5sZW4gPSAyOwotCQllbHNlIHsKLQkJ CW1zZ1swXS5sZW49MzsKLQkJCW1zZ2J1ZjBbMV0gPSBkYXRhLT53b3JkICYgMHhmZjsKLQkJ CW1zZ2J1ZjBbMl0gPSBkYXRhLT53b3JkID4+IDg7Ci0JCX0KLQkJYnJlYWs7CiAJY2FzZSBJ MkNfU01CVVNfUFJPQ19DQUxMOgotCQludW0gPSAyOyAvKiBTcGVjaWFsIGNhc2UgKi8KLQkJ cmVhZF93cml0ZSA9IEkyQ19TTUJVU19SRUFEOwotCQltc2dbMF0ubGVuID0gMzsKLQkJbXNn WzFdLmxlbiA9IDI7Ci0JCW1zZ2J1ZjBbMV0gPSBkYXRhLT53b3JkICYgMHhmZjsKLQkJbXNn YnVmMFsyXSA9IGRhdGEtPndvcmQgPj4gODsKKwkJZW50cnktPnNtYnVzLmRhdGEtPndvcmQg PSBtc2didWYxWzBdIHwgKG1zZ2J1ZjFbMV0gPDwgOCk7CiAJCWJyZWFrOwotCWNhc2UgSTJD X1NNQlVTX0JMT0NLX0RBVEE6Ci0JCWlmIChyZWFkX3dyaXRlID09IEkyQ19TTUJVU19SRUFE KSB7Ci0JCQltc2dbMV0uZmxhZ3MgfD0gSTJDX01fUkVDVl9MRU47Ci0JCQltc2dbMV0ubGVu ID0gMTsgLyogYmxvY2sgbGVuZ3RoIHdpbGwgYmUgYWRkZWQgYnkKLQkJCQkJICAgdGhlIHVu ZGVybHlpbmcgYnVzIGRyaXZlciAqLwotCQl9IGVsc2UgewotCQkJbXNnWzBdLmxlbiA9IGRh dGEtPmJsb2NrWzBdICsgMjsKLQkJCWlmIChtc2dbMF0ubGVuID4gSTJDX1NNQlVTX0JMT0NL X01BWCArIDIpIHsKLQkJCQlkZXZfZXJyKCZhZGFwdGVyLT5kZXYsCi0JCQkJCSJJbnZhbGlk IGJsb2NrIHdyaXRlIHNpemUgJWRcbiIsCi0JCQkJCWRhdGEtPmJsb2NrWzBdKTsKLQkJCQly ZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQkJCWZvciAoaSA9IDE7IGkgPCBtc2dbMF0ubGVuOyBp KyspCi0JCQkJbXNnYnVmMFtpXSA9IGRhdGEtPmJsb2NrW2ktMV07Ci0JCX0KKwljYXNlIEky Q19TTUJVU19JMkNfQkxPQ0tfREFUQToKKwkJZm9yIChpID0gMDsgaSA8IGVudHJ5LT5zbWJ1 cy5kYXRhLT5ibG9ja1swXTsgaSsrKQorCQkJZW50cnktPnNtYnVzLmRhdGEtPmJsb2NrW2kg KyAxXSA9IG1zZ2J1ZjFbaV07CiAJCWJyZWFrOworCWNhc2UgSTJDX1NNQlVTX0JMT0NLX0RB VEE6CiAJY2FzZSBJMkNfU01CVVNfQkxPQ0tfUFJPQ19DQUxMOgotCQludW0gPSAyOyAvKiBB bm90aGVyIHNwZWNpYWwgY2FzZSAqLwotCQlyZWFkX3dyaXRlID0gSTJDX1NNQlVTX1JFQUQ7 Ci0JCWlmIChkYXRhLT5ibG9ja1swXSA+IEkyQ19TTUJVU19CTE9DS19NQVgpIHsKLQkJCWRl dl9lcnIoJmFkYXB0ZXItPmRldiwKLQkJCQkiSW52YWxpZCBibG9jayB3cml0ZSBzaXplICVk XG4iLAotCQkJCWRhdGEtPmJsb2NrWzBdKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0J CW1zZ1swXS5sZW4gPSBkYXRhLT5ibG9ja1swXSArIDI7Ci0JCWZvciAoaSA9IDE7IGkgPCBt c2dbMF0ubGVuOyBpKyspCi0JCQltc2didWYwW2ldID0gZGF0YS0+YmxvY2tbaS0xXTsKLQkJ bXNnWzFdLmZsYWdzIHw9IEkyQ19NX1JFQ1ZfTEVOOwotCQltc2dbMV0ubGVuID0gMTsgLyog YmxvY2sgbGVuZ3RoIHdpbGwgYmUgYWRkZWQgYnkKLQkJCQkgICB0aGUgdW5kZXJseWluZyBi dXMgZHJpdmVyICovCi0JCWJyZWFrOwotCWNhc2UgSTJDX1NNQlVTX0kyQ19CTE9DS19EQVRB OgotCQlpZiAocmVhZF93cml0ZSA9PSBJMkNfU01CVVNfUkVBRCkgewotCQkJbXNnWzFdLmxl biA9IGRhdGEtPmJsb2NrWzBdOwotCQl9IGVsc2UgewotCQkJbXNnWzBdLmxlbiA9IGRhdGEt PmJsb2NrWzBdICsgMTsKLQkJCWlmIChtc2dbMF0ubGVuID4gSTJDX1NNQlVTX0JMT0NLX01B WCArIDEpIHsKLQkJCQlkZXZfZXJyKCZhZGFwdGVyLT5kZXYsCi0JCQkJCSJJbnZhbGlkIGJs b2NrIHdyaXRlIHNpemUgJWRcbiIsCi0JCQkJCWRhdGEtPmJsb2NrWzBdKTsKLQkJCQlyZXR1 cm4gLUVJTlZBTDsKLQkJCX0KLQkJCWZvciAoaSA9IDE7IGkgPD0gZGF0YS0+YmxvY2tbMF07 IGkrKykKLQkJCQltc2didWYwW2ldID0gZGF0YS0+YmxvY2tbaV07Ci0JCX0KKwkJZm9yIChp ID0gMDsgaSA8IG1zZ2J1ZjFbMF0gKyAxOyBpKyspCisJCQllbnRyeS0+c21idXMuZGF0YS0+ YmxvY2tbaV0gPSBtc2didWYxW2ldOwogCQlicmVhazsKLQlkZWZhdWx0OgotCQlkZXZfZXJy KCZhZGFwdGVyLT5kZXYsICJVbnN1cHBvcnRlZCB0cmFuc2FjdGlvbiAlZFxuIiwgc2l6ZSk7 Ci0JCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CiAKLQlpID0gKChmbGFncyAmIEkyQ19DTElF TlRfUEVDKSAmJiBzaXplICE9IEkyQ19TTUJVU19RVUlDSwotCQkJCSAgICAgICYmIHNpemUg IT0gSTJDX1NNQlVTX0kyQ19CTE9DS19EQVRBKTsKLQlpZiAoaSkgewotCQkvKiBDb21wdXRl IFBFQyBpZiBmaXJzdCBtZXNzYWdlIGlzIGEgd3JpdGUgKi8KLQkJaWYgKCEobXNnWzBdLmZs YWdzICYgSTJDX01fUkQpKSB7Ci0JCQlpZiAobnVtID09IDEpIC8qIFdyaXRlIG9ubHkgKi8K LQkJCQlpMmNfc21idXNfYWRkX3BlYygmbXNnWzBdKTsKLQkJCWVsc2UgLyogV3JpdGUgZm9s bG93ZWQgYnkgcmVhZCAqLwotCQkJCXBhcnRpYWxfcGVjID0gaTJjX3NtYnVzX21zZ19wZWMo MCwgJm1zZ1swXSk7Ci0JCX0KLQkJLyogQXNrIGZvciBQRUMgaWYgbGFzdCBtZXNzYWdlIGlz IGEgcmVhZCAqLwotCQlpZiAobXNnW251bS0xXS5mbGFncyAmIEkyQ19NX1JEKQotCQkJbXNn W251bS0xXS5sZW4rKzsKLQl9Ci0KLQlzdGF0dXMgPSBpMmNfdHJhbnNmZXIoYWRhcHRlciwg bXNnLCBudW0pOwotCWlmIChzdGF0dXMgPCAwKQotCQlyZXR1cm4gc3RhdHVzOwotCiAJLyog Q2hlY2sgUEVDIGlmIGxhc3QgbWVzc2FnZSBpcyBhIHJlYWQgKi8KLQlpZiAoaSAmJiAobXNn W251bS0xXS5mbGFncyAmIEkyQ19NX1JEKSkgewotCQlzdGF0dXMgPSBpMmNfc21idXNfY2hl Y2tfcGVjKHBhcnRpYWxfcGVjLCAmbXNnW251bS0xXSk7CisJaWYgKGVudHJ5LT5wZWMgJiYg KGVudHJ5LT5pMmMubXNnc1tudW0gLSAxXS5mbGFncyAmIEkyQ19NX1JEKSkgeworCQlzdGF0 dXMgPSBpMmNfc21idXNfY2hlY2tfcGVjKGVudHJ5LT5wYXJ0aWFsX3BlYywKKwkJCQkJICAg ICAmZW50cnktPmkyYy5tc2dzW251bSAtIDFdKTsKIAkJaWYgKHN0YXR1cyA8IDApCi0JCQly ZXR1cm4gc3RhdHVzOworCQkJZW50cnktPnJlc3VsdCA9IHN0YXR1czsKIAl9Cit9CisKK3N0 YXRpYyBpbnQgaTJjX3NtYnVzX2VtdV9mb3JtYXQoc3RydWN0IGkyY19hZGFwdGVyICphZGFw dGVyLAorCQkJCXN0cnVjdCBpMmNfb3BfcV9lbnRyeSAqZW50cnkpCit7CisJLyoKKwkgKiBT byB3ZSBuZWVkIHRvIGdlbmVyYXRlIGEgc2VyaWVzIG9mIG1zZ3MuIEluIHRoZSBjYXNlIG9m CisJICogd3JpdGluZywgd2UgbmVlZCB0byB1c2Ugb25seSBvbmUgbWVzc2FnZTsgd2hlbiBy ZWFkaW5nLCB3ZQorCSAqIG5lZWQgdHdvLiBXZSBpbml0aWFsaXplIG1vc3QgdGhpbmdzIHdp dGggc2FuZSBkZWZhdWx0cywgdG8KKwkgKiBrZWVwIHRoZSBjb2RlIGJlbG93IHNvbWV3aGF0 IHNpbXBsZXIuCisJICovCisKKyAgICAgICAgdW5zaWduZWQgY2hhciAqbXNnYnVmMCA9IGVu dHJ5LT5tc2didWYwOworICAgICAgICBpbnQgbnVtID0gZW50cnktPnNtYnVzLnJlYWRfd3Jp dGUgPT0gSTJDX1NNQlVTX1JFQUQgPyAyIDogMTsKKyAgICAgICAgc3RydWN0IGkyY19tc2cg Km1zZyA9IGVudHJ5LT5tc2c7CisgICAgICAgIGludCBpOworCisgICAgICAgIGVudHJ5LT5p MmMubXNncyA9IG1zZzsKKyAgICAgICAgZW50cnktPmkyYy5tc2dzWzBdLmJ1ZiA9IG1zZ2J1 ZjA7CisgICAgICAgIGVudHJ5LT5pMmMubXNnc1sxXS5idWYgPSBlbnRyeS0+bXNnYnVmMTsK KworICAgICAgICBtc2dbMF0uYWRkciA9IGVudHJ5LT5zbWJ1cy5hZGRyOworICAgICAgICBt c2dbMF0uZmxhZ3MgPSBlbnRyeS0+c21idXMuZmxhZ3M7CisgICAgICAgIG1zZ1swXS5sZW4g PSAxOworICAgICAgICBtc2dbMV0uYWRkciA9IGVudHJ5LT5zbWJ1cy5hZGRyOworICAgICAg ICBtc2dbMV0uZmxhZ3MgPSBlbnRyeS0+c21idXMuZmxhZ3MgfCBJMkNfTV9SRDsKKyAgICAg ICAgbXNnWzFdLmxlbiA9IDA7CisKKwltc2didWYwWzBdID0gZW50cnktPnNtYnVzLmNvbW1h bmQ7CisgICAgICAgIHN3aXRjaCAoZW50cnktPnNtYnVzLnNpemUpIHsKKyAgICAgICAgY2Fz ZSBJMkNfU01CVVNfUVVJQ0s6CisgICAgICAgICAgICAgICAgbXNnWzBdLmxlbiA9IDA7Cisg ICAgICAgICAgICAgICAgLyogU3BlY2lhbCBjYXNlOiBUaGUgcmVhZC93cml0ZSBmaWVsZCBp cyB1c2VkIGFzIGRhdGEgKi8KKyAgICAgICAgICAgICAgICBtc2dbMF0uZmxhZ3MgPSAoZW50 cnktPnNtYnVzLmZsYWdzIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChl bnRyeS0+c21idXMucmVhZF93cml0ZSA9PSBJMkNfU01CVVNfUkVBRCkKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgID8gSTJDX01fUkQgOiAwKSk7CisgICAgICAgICAgICAg ICAgbnVtID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMkNf U01CVVNfQllURToKKyAgICAgICAgICAgICAgICBpZiAoZW50cnktPnNtYnVzLnJlYWRfd3Jp dGUgPT0gSTJDX1NNQlVTX1JFQUQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNw ZWNpYWwgY2FzZTogb25seSBhIHJlYWQhICovCisgICAgICAgICAgICAgICAgICAgICAgICBt c2dbMF0uZmxhZ3MgPSBJMkNfTV9SRCB8IGVudHJ5LT5zbWJ1cy5mbGFnczsKKyAgICAgICAg ICAgICAgICAgICAgICAgIG51bSA9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkyQ19TTUJVU19CWVRFX0RBVEE6CisgICAg ICAgICAgICAgICAgaWYgKGVudHJ5LT5zbWJ1cy5yZWFkX3dyaXRlID09IEkyQ19TTUJVU19S RUFEKQorICAgICAgICAgICAgICAgICAgICAgICAgbXNnWzFdLmxlbiA9IDE7CisgICAgICAg ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtc2dbMF0ubGVuID0g MjsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZ2J1ZjBbMV0gPSBlbnRyeS0+c21idXMu ZGF0YS0+Ynl0ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgIGNhc2UgSTJDX1NNQlVTX1dPUkRfREFUQToKKyAgICAgICAgICAgICAgICBp ZiAoZW50cnktPnNtYnVzLnJlYWRfd3JpdGUgPT0gSTJDX1NNQlVTX1JFQUQpCisgICAgICAg ICAgICAgICAgICAgICAgICBtc2dbMV0ubGVuID0gMjsKKyAgICAgICAgICAgICAgICBlbHNl IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZ1swXS5sZW4gPSAzOworICAgICAgICAg ICAgICAgICAgICAgICAgbXNnYnVmMFsxXSA9IGVudHJ5LT5zbWJ1cy5kYXRhLT53b3JkICYg MHhmZjsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZ2J1ZjBbMl0gPSBlbnRyeS0+c21i dXMuZGF0YS0+d29yZCA+PiA4OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgY2FzZSBJMkNfU01CVVNfUFJPQ19DQUxMOgorICAgICAgICAg ICAgICAgIG51bSA9IDI7IC8qIFNwZWNpYWwgY2FzZSAqLworICAgICAgICAgICAgICAgIGVu dHJ5LT5zbWJ1cy5yZWFkX3dyaXRlID0gSTJDX1NNQlVTX1JFQUQ7CisgICAgICAgICAgICAg ICAgbXNnWzBdLmxlbiA9IDM7CisgICAgICAgICAgICAgICAgbXNnWzFdLmxlbiA9IDI7Cisg ICAgICAgICAgICAgICAgbXNnYnVmMFsxXSA9IGVudHJ5LT5zbWJ1cy5kYXRhLT53b3JkICYg MHhmZjsKKyAgICAgICAgICAgICAgICBtc2didWYwWzJdID0gZW50cnktPnNtYnVzLmRhdGEt PndvcmQgPj4gODsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMkNf U01CVVNfQkxPQ0tfREFUQToKKyAgICAgICAgICAgICAgICBpZiAoZW50cnktPnNtYnVzLnJl YWRfd3JpdGUgPT0gSTJDX1NNQlVTX1JFQUQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg IG1zZ1sxXS5mbGFncyB8PSBJMkNfTV9SRUNWX0xFTjsKKyAgICAgICAgICAgICAgICAgICAg ICAgIG1zZ1sxXS5sZW4gPSAxOyAvKiBibG9jayBsZW5ndGggd2lsbCBiZSBhZGRlZCBieQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSB1bmRlcmx5 aW5nIGJ1cyBkcml2ZXIgKi8KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg ICAgICAgICAgICAgICAgbXNnWzBdLmxlbiA9IGVudHJ5LT5zbWJ1cy5kYXRhLT5ibG9ja1sw XSArIDI7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobXNnWzBdLmxlbiA+IEkyQ19T TUJVU19CTE9DS19NQVggKyAyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGRldl9lcnIoJmFkYXB0ZXItPmRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiSW52YWxpZCBibG9jayB3cml0ZSBzaXplICVkXG4iLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5zbWJ1cy5kYXRhLT5ibG9j a1swXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFM OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg Zm9yIChpID0gMTsgaSA8IG1zZ1swXS5sZW47IGkrKykKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbXNnYnVmMFtpXSA9IGVudHJ5LT5zbWJ1cy5kYXRhLT5ibG9ja1tpIC0g MV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICBjYXNlIEkyQ19TTUJVU19CTE9DS19QUk9DX0NBTEw6CisgICAgICAgICAgICAgICAgbnVt ID0gMjsgLyogQW5vdGhlciBzcGVjaWFsIGNhc2UgKi8KKyAgICAgICAgICAgICAgICBlbnRy eS0+c21idXMucmVhZF93cml0ZSA9IEkyQ19TTUJVU19SRUFEOworICAgICAgICAgICAgICAg IGlmIChlbnRyeS0+c21idXMuZGF0YS0+YmxvY2tbMF0gPiBJMkNfU01CVVNfQkxPQ0tfTUFY KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXZfZXJyKCZhZGFwdGVyLT5kZXYsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbnZhbGlkIGJsb2NrIHdyaXRlIHNp emUgJWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5zbWJ1 cy5kYXRhLT5ibG9ja1swXSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVJ TlZBTDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbXNnWzBdLmxlbiA9 IGVudHJ5LT5zbWJ1cy5kYXRhLT5ibG9ja1swXSArIDI7CisgICAgICAgICAgICAgICAgZm9y IChpID0gMTsgaSA8IG1zZ1swXS5sZW47IGkrKykKKyAgICAgICAgICAgICAgICAgICAgICAg IG1zZ2J1ZjBbaV0gPSBlbnRyeS0+c21idXMuZGF0YS0+YmxvY2tbaS0xXTsKKyAgICAgICAg ICAgICAgICBtc2dbMV0uZmxhZ3MgfD0gSTJDX01fUkVDVl9MRU47CisgICAgICAgICAgICAg ICAgbXNnWzFdLmxlbiA9IDE7IC8qIGJsb2NrIGxlbmd0aCB3aWxsIGJlIGFkZGVkIGJ5Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSB1bmRlcmx5aW5nIGJ1cyBk cml2ZXIgKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMkNfU01C VVNfSTJDX0JMT0NLX0RBVEE6CisgICAgICAgICAgICAgICAgaWYgKGVudHJ5LT5zbWJ1cy5y ZWFkX3dyaXRlID09IEkyQ19TTUJVU19SRUFEKSB7CisgICAgICAgICAgICAgICAgICAgICAg ICBtc2dbMV0ubGVuID0gZW50cnktPnNtYnVzLmRhdGEtPmJsb2NrWzBdOworICAgICAgICAg ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtc2dbMF0ubGVuID0g ZW50cnktPnNtYnVzLmRhdGEtPmJsb2NrWzBdICsgMTsKKyAgICAgICAgICAgICAgICAgICAg ICAgIGlmIChtc2dbMF0ubGVuID4gSTJDX1NNQlVTX0JMT0NLX01BWCArIDEpIHsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2X2VycigmYWRhcHRlci0+ZGV2LAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbnZhbGlkIGJsb2NrIHdy aXRlIHNpemUgJWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZW50cnktPnNtYnVzLmRhdGEtPmJsb2NrWzBdKTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgICAgICAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAxOyBpIDw9IGVudHJ5LT5zbWJ1 cy5kYXRhLT5ibG9ja1swXTsgaSsrKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBtc2didWYwW2ldID0gZW50cnktPnNtYnVzLmRhdGEtPmJsb2NrW2ldOworICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAg ICAgICAgICAgICAgICBkZXZfZXJyKCZhZGFwdGVyLT5kZXYsICJVbnN1cHBvcnRlZCB0cmFu c2FjdGlvbiAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5zbWJ1cy5z aXplKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVPUE5PVFNVUFA7CisgICAgICAgIH0K KworICAgICAgICBlbnRyeS0+cGVjID0gKChlbnRyeS0+c21idXMuZmxhZ3MgJiBJMkNfQ0xJ RU5UX1BFQykKKyAgICAgICAgICAgICAgICAgICAgICAmJiBlbnRyeS0+c21idXMuc2l6ZSAh PSBJMkNfU01CVVNfUVVJQ0sKKyAgICAgICAgICAgICAgICAgICAgICAmJiBlbnRyeS0+c21i dXMuc2l6ZSAhPSBJMkNfU01CVVNfSTJDX0JMT0NLX0RBVEEpOworICAgICAgICBpZiAoZW50 cnktPnBlYykgeworICAgICAgICAgICAgICAgIC8qIENvbXB1dGUgUEVDIGlmIGZpcnN0IG1l c3NhZ2UgaXMgYSB3cml0ZSAqLworICAgICAgICAgICAgICAgIGlmICghKG1zZ1swXS5mbGFn cyAmIEkyQ19NX1JEKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bSA9PSAx KSAvKiBXcml0ZSBvbmx5ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGky Y19zbWJ1c19hZGRfcGVjKCZtc2dbMF0pOworICAgICAgICAgICAgICAgICAgICAgICAgZWxz ZSAvKiBXcml0ZSBmb2xsb3dlZCBieSByZWFkICovCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGVudHJ5LT5wYXJ0aWFsX3BlYworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgID0gaTJjX3NtYnVzX21zZ19wZWMoMCwgJm1zZ1swXSk7CisgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8qIEFzayBmb3IgUEVDIGlmIGxhc3Qg bWVzc2FnZSBpcyBhIHJlYWQgKi8KKyAgICAgICAgICAgICAgICBpZiAobXNnW251bSAtIDFd LmZsYWdzICYgSTJDX01fUkQpCisgICAgICAgICAgICAgICAgICAgICAgICBtc2dbbnVtIC0g MV0ubGVuKys7CisgICAgICAgIH0KKworICAgICAgICBlbnRyeS0+eGZlcl90eXBlID0gSTJD X09QX0kyQzsKKyAgICAgICAgZW50cnktPmkyYy5tc2dzID0gbXNnOworICAgICAgICBlbnRy eS0+aTJjLm51bSA9IG51bTsKKyAgICAgICAgZW50cnktPmNvbXBsZXRlID0gaTJjX3NtYnVz X2VtdV9jb21wbGV0ZTsKIAotCWlmIChyZWFkX3dyaXRlID09IEkyQ19TTUJVU19SRUFEKQot CQlzd2l0Y2goc2l6ZSkgewotCQkJY2FzZSBJMkNfU01CVVNfQllURToKLQkJCQlkYXRhLT5i eXRlID0gbXNnYnVmMFswXTsKLQkJCQlicmVhazsKLQkJCWNhc2UgSTJDX1NNQlVTX0JZVEVf REFUQToKLQkJCQlkYXRhLT5ieXRlID0gbXNnYnVmMVswXTsKLQkJCQlicmVhazsKLQkJCWNh c2UgSTJDX1NNQlVTX1dPUkRfREFUQToKLQkJCWNhc2UgSTJDX1NNQlVTX1BST0NfQ0FMTDoK LQkJCQlkYXRhLT53b3JkID0gbXNnYnVmMVswXSB8IChtc2didWYxWzFdIDw8IDgpOwotCQkJ CWJyZWFrOwotCQkJY2FzZSBJMkNfU01CVVNfSTJDX0JMT0NLX0RBVEE6Ci0JCQkJZm9yIChp ID0gMDsgaSA8IGRhdGEtPmJsb2NrWzBdOyBpKyspCi0JCQkJCWRhdGEtPmJsb2NrW2krMV0g PSBtc2didWYxW2ldOwotCQkJCWJyZWFrOwotCQkJY2FzZSBJMkNfU01CVVNfQkxPQ0tfREFU QToKLQkJCWNhc2UgSTJDX1NNQlVTX0JMT0NLX1BST0NfQ0FMTDoKLQkJCQlmb3IgKGkgPSAw OyBpIDwgbXNnYnVmMVswXSArIDE7IGkrKykKLQkJCQkJZGF0YS0+YmxvY2tbaV0gPSBtc2di dWYxW2ldOwotCQkJCWJyZWFrOwotCQl9CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE5ODgsMjMg KzIyMjYsMjI3IEBACiAJCSAgIGNoYXIgcmVhZF93cml0ZSwgdTggY29tbWFuZCwgaW50IHBy b3RvY29sLAogICAgICAgICAgICAgICAgICAgIHVuaW9uIGkyY19zbWJ1c19kYXRhICogZGF0 YSkKIHsKKwlzdHJ1Y3QgaTJjX29wX3FfZW50cnkgKmVudHJ5OwogCXMzMiByZXM7CisJY29u c3Qgc3RydWN0IGkyY19hbGdvcml0aG0gKmFsZ28gPSBhZGFwdGVyLT5hbGdvOwogCi0JZmxh Z3MgJj0gSTJDX01fVEVOIHwgSTJDX0NMSUVOVF9QRUM7CisJZW50cnkgPSBrbWFsbG9jKHNp emVvZigqZW50cnkpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWVudHJ5KQorCQlyZXR1cm4gLUVO T01FTTsKIAotCWlmIChhZGFwdGVyLT5hbGdvLT5zbWJ1c194ZmVyKSB7CisJZW50cnktPnhm ZXJfdHlwZSA9IEkyQ19PUF9TTUJVUzsKKwllbnRyeS0+c21idXMuYWRkciA9IGFkZHI7CisJ ZW50cnktPnNtYnVzLmZsYWdzID0gZmxhZ3M7CisJZW50cnktPnNtYnVzLnJlYWRfd3JpdGUg PSByZWFkX3dyaXRlOworCWVudHJ5LT5zbWJ1cy5jb21tYW5kID0gY29tbWFuZDsKKwllbnRy eS0+c21idXMuc2l6ZSA9IHByb3RvY29sOworCWVudHJ5LT5zbWJ1cy5kYXRhID0gZGF0YTsK KwllbnRyeS0+Y29tcGxldGUgPSBOVUxMOworCisJaWYgKGFsZ28tPnNtYnVzX3N0YXJ0KSB7 CisJCWkyY19wZXJmb3JtX29wX3dhaXQoYWRhcHRlciwgZW50cnkpOworCX0gZWxzZSBpZiAo YWxnby0+c21idXNfeGZlcikgewogCQltdXRleF9sb2NrKCZhZGFwdGVyLT5idXNfbG9jayk7 Ci0JCXJlcyA9IGFkYXB0ZXItPmFsZ28tPnNtYnVzX3hmZXIoYWRhcHRlcixhZGRyLGZsYWdz LHJlYWRfd3JpdGUsCi0JCQkJCQljb21tYW5kLCBwcm90b2NvbCwgZGF0YSk7CisJCWVudHJ5 LT5yZXN1bHQgPSBhZGFwdGVyLT5hbGdvLT5zbWJ1c194ZmVyCisJCSAgKGFkYXB0ZXIsIGVu dHJ5LT5zbWJ1cy5hZGRyLCBlbnRyeS0+c21idXMuZmxhZ3MsCisJCSAgIGVudHJ5LT5zbWJ1 cy5yZWFkX3dyaXRlLCBlbnRyeS0+c21idXMuY29tbWFuZCwKKwkJICAgZW50cnktPnNtYnVz LnNpemUsIGVudHJ5LT5zbWJ1cy5kYXRhKTsKIAkJbXV0ZXhfdW5sb2NrKCZhZGFwdGVyLT5i dXNfbG9jayk7Ci0JfSBlbHNlCi0JCXJlcyA9IGkyY19zbWJ1c194ZmVyX2VtdWxhdGVkKGFk YXB0ZXIsYWRkcixmbGFncyxyZWFkX3dyaXRlLAotCQkJCQkgICAgICBjb21tYW5kLCBwcm90 b2NvbCwgZGF0YSk7CisJCWlmIChlbnRyeS0+Y29tcGxldGUpCisJCQllbnRyeS0+Y29tcGxl dGUoYWRhcHRlciwgZW50cnkpOworCX0gZWxzZSB7CisJCWlmIChpMmNfc21idXNfZW11X2Zv cm1hdChhZGFwdGVyLCBlbnRyeSkpCisJCQllbnRyeS0+cmVzdWx0ID0gLUVJTlZBTDsKKwkJ ZWxzZSB7CisJCQlpMmNfdHJhbnNmZXJfZW50cnkoYWRhcHRlciwgZW50cnkpOworCQkJLyoK KwkJCSAqIFdlIGdldCB0aGVzZSBiYWNrIHdpdGggdGhlIHJlc3VsdCBiZWluZyB0aGUKKwkJ CSAqIG51bWJlciBvZiBieXRlcyB0cmFuc2ZlcnJlZC4gIFdlIHdhbnQgemVybyBmb3IKKwkJ CSAqIHN1Y2Nlc3MgZm9yIHRoaXMgcm91dGluZS4KKwkJCSAqLworCQkJaWYgKGVudHJ5LT5y ZXN1bHQgPiAwKQorCQkJCWVudHJ5LT5yZXN1bHQgPSAwOworCQl9CisJfQogCisJcmVzID0g ZW50cnktPnJlc3VsdDsKKwlrZnJlZShlbnRyeSk7CisJaWYgKHJlcyA+IDApCisJCXJlcyA9 IDA7IC8qIEFsd2F5cyByZXR1cm4gMCBvbiBzdWNjZXNzICovCiAJcmV0dXJuIHJlczsKIH0K IEVYUE9SVF9TWU1CT0woaTJjX3NtYnVzX3hmZXIpOwogCisvKiAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBFbnRyeSBoYW5kbGlu ZworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICovCisKKy8qCisgKiBHZXQgdGhlIGZpcnN0IGVudHJ5IG9mZiB0aGUgaGVhZCBv ZiB0aGUgcXVldWUgYW5kIGxvY2sgaXQgdGhlcmUuCisgKiBUaGUgZW50cnkgaXMgZ3VhcmFu dGVlZCB0byByZW1haW4gZmlyc3QgaW4gdGhlIGxpc3QgYW5kIHRoZSBoYW5kbGVyCisgKiBu b3QgYmUgY2FsbGVkIHVudGlsIGkyY19lbnRyeV9wdXQoKSBpcyBjYWxsZWQuCisgKi8KK3N0 YXRpYyBzdHJ1Y3QgaTJjX29wX3FfZW50cnkgKl9pMmNfZW50cnlfZ2V0KHN0cnVjdCBpMmNf YWRhcHRlciAqYWRhcCkKK3sKKwlzdHJ1Y3QgaTJjX29wX3FfZW50cnkgKmVudHJ5ID0gTlVM TDsKKworCWlmICghbGlzdF9lbXB0eSgmYWRhcC0+cSkpIHsKKwkJc3RydWN0IGxpc3RfaGVh ZCAqbGluayA9IGFkYXAtPnEubmV4dDsKKwkJZW50cnkgPSBsaXN0X2VudHJ5KGxpbmssIHN0 cnVjdCBpMmNfb3BfcV9lbnRyeSwgbGluayk7CisJfQorCXByX2RlYnVnKCJfaTJjX2VudHJ5 X2dldCAlcCAlcFxuIiwgYWRhcCwgZW50cnkpOworCXJldHVybiBlbnRyeTsKK30KKworc3Ry dWN0IGkyY19vcF9xX2VudHJ5ICppMmNfZW50cnlfZ2V0KHN0cnVjdCBpMmNfYWRhcHRlciAq YWRhcCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBpMmNfb3BfcV9lbnRy eSAqZW50cnk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcC0+cV9sb2NrLCBmbGFncyk7 CisJZW50cnkgPSBfaTJjX2VudHJ5X2dldChhZGFwKTsKKwlpZiAoZW50cnkpIHsKKwkJaWYg KGVudHJ5LT5zdGF0ZSAhPSBJMkNfT1BfSU5JVElBTElaRUQpCisJCQllbnRyeSA9IE5VTEw7 CisJCWVsc2UKKwkJCWtyZWZfZ2V0KCZlbnRyeS0+dXNlY291bnQpOworCX0KKwlzcGluX3Vu bG9ja19pcnFyZXN0b3JlKCZhZGFwLT5xX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gZW50cnk7 Cit9CisKK3N0YXRpYyB2b2lkIGkyY19vcF9yZWxlYXNlKHN0cnVjdCBrcmVmICpyZWYpCit7 CisJLyoKKwkgKiBOb3RoaW5nIHRvIGRvIGhlcmUsIGFsbCBoYW5kbGluZyBpcyBmcm9tIHRo ZSBrcmVmX3B1dAorCSAqIHJldHVybiBjb2RlLgorCSAqLworfQorCitzdGF0aWMgdm9pZCBf aTJjX2VudHJ5X3B1dChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsCisJCQkgICBzdHJ1Y3Qg aTJjX29wX3FfZW50cnkgKmVudHJ5LAorCQkJICAgdW5zaWduZWQgbG9uZyAqZmxhZ3MpCit7 CisJaWYgKGVudHJ5ID09IE5VTEwpCisJCXJldHVybjsKKworCXdoaWxlIChrcmVmX3B1dCgm ZW50cnktPnVzZWNvdW50LCBpMmNfb3BfcmVsZWFzZSkpIHsKKwkJbGlzdF9kZWwoJmVudHJ5 LT5saW5rKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcC0+cV9sb2NrLCAqZmxh Z3MpOworCisJCWlmIChlbnRyeS0+Y29tcGxldGUpCisJCQllbnRyeS0+Y29tcGxldGUoYWRh cCwgZW50cnkpOworCisJCWVudHJ5LT5oYW5kbGVyKGVudHJ5KTsKKworCQlzcGluX2xvY2tf aXJxc2F2ZSgmYWRhcC0+cV9sb2NrLCAqZmxhZ3MpOworCQllbnRyeSA9IF9pMmNfZW50cnlf Z2V0KGFkYXApOworCQlpZiAoIWVudHJ5KQorCQkJYnJlYWs7CisJCWlmIChlbnRyeS0+c3Rh dGUgIT0gSTJDX09QX1FVRVVFRCkKKwkJCS8qIFNvbWV0aGluZyBlbHNlIGFscmVhZHkgc3Rh cnRlZCBpdC4gKi8KKwkJCWJyZWFrOworCisJCWVudHJ5LT5yZXN1bHQgPSBpMmNfc3RhcnRf ZW50cnkoYWRhcCwgZW50cnkpOworCQlpZiAoZW50cnktPnN0YXJ0KQorCQkJY29tcGxldGUo ZW50cnktPnN0YXJ0KTsKKwkJaWYgKCFlbnRyeS0+cmVzdWx0KQorCQkJLyogU3VjY2Vzc2Z1 bCBzdGFydCwgd2UgYXJlIGRvbmUgaGVyZS4gKi8KKwkJCWJyZWFrOworCisJCS8qCisJCSAq IElmIHdlIGdldCBoZXJlLCB0aGUgc3RhcnQgZmFpbGVkIGFuZCB3ZSBuZWVkIHRvCisJCSAq IGZpbmlzaCB0aGUgZW50cnkuICBXZSBoYXZlbid0IGluY3JlbWVudGVkIHRoZQorCQkgKiBy ZWZjb3VudCwgc28gbG9vcGluZyBhZ2FpbiB3aWxsIGNhdXNlIGl0IHRvIGJlCisJCSAqIGNv bXBsZXRlZC4KKwkJICovCisJfQorfQorCit2b2lkIGkyY19lbnRyeV9wdXQoc3RydWN0IGky Y19hZGFwdGVyICphZGFwLAorCQkgICBzdHJ1Y3QgaTJjX29wX3FfZW50cnkgKmVudHJ5KQor eworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlwcl9kZWJ1ZygiaTJjX3B1dCAlcCAlcFxu IiwgYWRhcCwgZW50cnkpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXAtPnFfbG9jaywg ZmxhZ3MpOworCV9pMmNfZW50cnlfcHV0KGFkYXAsIGVudHJ5LCAmZmxhZ3MpOworCXNwaW5f dW5sb2NrX2lycXJlc3RvcmUoJmFkYXAtPnFfbG9jaywgZmxhZ3MpOworfQorRVhQT1JUX1NZ TUJPTChpMmNfZW50cnlfcHV0KTsKKwordm9pZCBpMmNfb3BfZG9uZShzdHJ1Y3QgaTJjX2Fk YXB0ZXIgKmFkYXAsIHN0cnVjdCBpMmNfb3BfcV9lbnRyeSAqZW50cnkpCit7CisJdW5zaWdu ZWQgbG9uZyBmbGFnczsKKworCXByX2RlYnVnKCJpMmNfb3BfZG9uZTogJXAgJXBcbiIsIGFk YXAsIGVudHJ5KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcC0+cV9sb2NrLCBmbGFncyk7 CisJLyoKKwkgKiBHdWFyZCBhZ2FpbnN0IG11bHRpcGxlIGNhbGxzIHRvICJkb25lIiBmb3Ig YW4gZW50cnkuICBUaGlzCisJICogY2FuIGhhcHBlbiwgZm9yIGluc3RhbmNlLCBpZiBhIHRp bWVyIHBvbGwgYW5kIGFuIGludGVycnVwdAorCSAqIGJvdGggZGlzY292ZXIgdGhhdCB0aGUg b3BlcmF0aW9uIGlzIGZpbmlzaGVkIGFuZCBib3RoCisJICogcmVwb3J0IGl0LgorCSAqLwor CWlmIChlbnRyeS0+c3RhdGUgIT0gSTJDX09QX0ZJTklTSEVEKSB7CisJCWVudHJ5LT5zdGF0 ZSA9IEkyQ19PUF9GSU5JU0hFRDsKKwkJX2kyY19lbnRyeV9wdXQoYWRhcCwgZW50cnksICZm bGFncyk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXAtPnFfbG9jaywgZmxh Z3MpOworfQorRVhQT1JUX1NZTUJPTChpMmNfb3BfZG9uZSk7CisKK3ZvaWQgaTJjX3BvbGwo c3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkgICAgICB1bnNpZ25lZCBpbnQgdXNfc2lu Y2VfbGFzdF9jYWxsKQoreworCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCA9IGNsaWVudC0+ YWRhcHRlcjsKKwlzdHJ1Y3QgaTJjX29wX3FfZW50cnkgKmVudHJ5OworCisJZW50cnkgPSBp MmNfZW50cnlfZ2V0KGFkYXApOworCWlmICghZW50cnkpCisJCXJldHVybjsKKwlhZGFwLT5h bGdvLT5wb2xsKGFkYXAsIGVudHJ5LCB1c19zaW5jZV9sYXN0X2NhbGwpOworCWkyY19lbnRy eV9wdXQoYWRhcCwgZW50cnkpOworfQorRVhQT1JUX1NZTUJPTChpMmNfcG9sbCk7CisKK2lu dCBpMmNfbm9uX2Jsb2NraW5nX29wKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQlz dHJ1Y3QgaTJjX29wX3FfZW50cnkgKmVudHJ5KQoreworCXVuc2lnbmVkIGxvbmcgICAgICBm bGFnczsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAgPSBjbGllbnQtPmFkYXB0ZXI7CisJ aW50IHJldCA9IDA7CisKKwlpZiAoIWkyY19ub25fYmxvY2tpbmdfY2FwYWJsZShhZGFwKSkK KwkJcmV0dXJuIC1FTk9TWVM7CisKKwllbnRyeS0+c21idXMuYWRkciA9IGNsaWVudC0+YWRk cjsKKwllbnRyeS0+c21idXMuZmxhZ3MgPSBjbGllbnQtPmZsYWdzOworCisJaWYgKGVudHJ5 LT54ZmVyX3R5cGUgPT0gSTJDX09QX1NNQlVTKSB7CisJCWlmICghYWRhcC0+YWxnby0+c21i dXNfc3RhcnQpIHsKKwkJCWlmIChpMmNfc21idXNfZW11X2Zvcm1hdChhZGFwLCBlbnRyeSkp CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKKwlpMmNfaW5pdF9lbnRyeShlbnRy eSk7CisJZW50cnktPnVzZV90aW1lciA9IDE7IC8qIExldCB0aGUgdGltZXIgY29kZSBwb2xs IGl0LiAqLworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXAtPnFfbG9jaywgZmxhZ3MpOwor CWxpc3RfYWRkX3RhaWwoJmVudHJ5LT5saW5rLCAmYWRhcC0+cSk7CisJaWYgKGFkYXAtPnEu bmV4dCA9PSAmZW50cnktPmxpbmspIHsKKwkJLyogQWRkZWQgdG8gdGhlIGxpc3QgaGVhZCwg c3RhcnQgaXQgKi8KKwkJcmV0ID0gaTJjX3N0YXJ0X2VudHJ5KGFkYXAsIGVudHJ5KTsKKwkJ aWYgKHJldCkKKwkJCWxpc3RfZGVsKCZlbnRyeS0+bGluayk7CisJfQorCXNwaW5fdW5sb2Nr X2lycXJlc3RvcmUoJmFkYXAtPnFfbG9jaywgZmxhZ3MpOworCXJldHVybiByZXQ7Cit9CitF WFBPUlRfU1lNQk9MKGkyY19ub25fYmxvY2tpbmdfb3ApOworCiBNT0RVTEVfQVVUSE9SKCJT aW1vbiBHLiBWb2dsIDxzaW1vbkB0ay51bmktbGluei5hYy5hdD4iKTsKIE1PRFVMRV9ERVND UklQVElPTigiSTJDLUJ1cyBtYWluIG1vZHVsZSIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIp OwpkaWZmIC11IC0tbmV3LWZpbGUgLS1yZWN1cnNpdmUgbGludXgtMi42LjI5LjYub3JpZy9k cml2ZXJzL0tjb25maWcgbGludXgtMi42LjI5LjYubW9kL2RyaXZlcnMvS2NvbmZpZwotLS0g bGludXgtMi42LjI5LjYub3JpZy9kcml2ZXJzL0tjb25maWcJMjAwOS0wNy0wMiAxNjo0MToy MC4wMDAwMDAwMDAgLTA3MDAKKysrIGxpbnV4LTIuNi4yOS42Lm1vZC9kcml2ZXJzL0tjb25m aWcJMjAwOS0wNy0yMSAxMToyODoxOC4wMDAwMDAwMDAgLTA3MDAKQEAgLTQ4LDYgKzQ4LDgg QEAKIAogc291cmNlICJkcml2ZXJzL2NoYXIvS2NvbmZpZyIKIAorc291cmNlICJkcml2ZXJz L3ZtZS9LY29uZmlnIgorCiBzb3VyY2UgImRyaXZlcnMvaTJjL0tjb25maWciCiAKIHNvdXJj ZSAiZHJpdmVycy9zcGkvS2NvbmZpZyIKZGlmZiAtdSAtLW5ldy1maWxlIC0tcmVjdXJzaXZl IGxpbnV4LTIuNi4yOS42Lm9yaWcvZHJpdmVycy9NYWtlZmlsZSBsaW51eC0yLjYuMjkuNi5t b2QvZHJpdmVycy9NYWtlZmlsZQotLS0gbGludXgtMi42LjI5LjYub3JpZy9kcml2ZXJzL01h a2VmaWxlCTIwMDktMDctMDIgMTY6NDE6MjAuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0y LjYuMjkuNi5tb2QvZHJpdmVycy9NYWtlZmlsZQkyMDA5LTA3LTIxIDExOjI4OjE4LjAwMDAw MDAwMCAtMDcwMApAQCAtNjksNiArNjksNyBAQAogb2JqLSQoQ09ORklHX0dBTUVQT1JUKQkJ Kz0gaW5wdXQvZ2FtZXBvcnQvCiBvYmotJChDT05GSUdfSU5QVVQpCQkrPSBpbnB1dC8KIG9i ai0kKENPTkZJR19JMk8pCQkrPSBtZXNzYWdlLworb2JqLSQoQ09ORklHX1ZNRV9CUklER0Up ICAgICAgICArPSB2bWUvCiBvYmotJChDT05GSUdfUlRDX0xJQikJCSs9IHJ0Yy8KIG9iai15 CQkJCSs9IGkyYy8KIG9iai0kKENPTkZJR19XMSkJCSs9IHcxLwpkaWZmIC11IC0tbmV3LWZp bGUgLS1yZWN1cnNpdmUgbGludXgtMi42LjI5LjYub3JpZy9kcml2ZXJzL210ZC9jaGlwcy9j ZmlfY21kc2V0XzAwMDIuYyBsaW51eC0yLjYuMjkuNi5tb2QvZHJpdmVycy9tdGQvY2hpcHMv Y2ZpX2NtZHNldF8wMDAyLmMKLS0tIGxpbnV4LTIuNi4yOS42Lm9yaWcvZHJpdmVycy9tdGQv Y2hpcHMvY2ZpX2NtZHNldF8wMDAyLmMJMjAwOS0wNy0wMiAxNjo0MToyMC4wMDAwMDAwMDAg LTA3MDAKKysrIGxpbnV4LTIuNi4yOS42Lm1vZC9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21k c2V0XzAwMDIuYwkyMDA5LTA3LTIxIDExOjI4OjE4LjAwMDAwMDAwMCAtMDcwMApAQCAtNDky LDcgKzQ5Miw3IEBACiAKIAkvKiBGSVhNRTogZXJhc2Utc3VzcGVuZC1wcm9ncmFtIGlzIGJy b2tlbi4gIFNlZQogCSAgIGh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL3BpcGVybWFpbC9s aW51eC1tdGQvMjAwMy1EZWNlbWJlci8wMDkwMDEuaHRtbCAqLwotCXByaW50ayhLRVJOX05P VElDRSAiY2ZpX2NtZHNldF8wMDAyOiBEaXNhYmxpbmcgZXJhc2Utc3VzcGVuZC1wcm9ncmFt IGR1ZSB0byBjb2RlIGJyb2tlbm5lc3MuXG4iKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiY2Zp X2NtZHNldF8wMDAyOiBEaXNhYmxpbmcgZXJhc2Utc3VzcGVuZC1wcm9ncmFtIGR1ZSB0byBj b2RlIGJyb2tlbm5lc3MuXG4iKTsKIAogCV9fbW9kdWxlX2dldChUSElTX01PRFVMRSk7CiAJ cmV0dXJuIG10ZDsKZGlmZiAtdSAtLW5ldy1maWxlIC0tcmVjdXJzaXZlIGxpbnV4LTIuNi4y OS42Lm9yaWcvZHJpdmVycy9tdGQvbWFwcy9jcGNpNjIwMF9ub3IuYyBsaW51eC0yLjYuMjku Ni5tb2QvZHJpdmVycy9tdGQvbWFwcy9jcGNpNjIwMF9ub3IuYwotLS0gbGludXgtMi42LjI5 LjYub3JpZy9kcml2ZXJzL210ZC9tYXBzL2NwY2k2MjAwX25vci5jCTE5NjktMTItMzEgMTc6 MDA6MDAuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYuMjkuNi5tb2QvZHJpdmVycy9t dGQvbWFwcy9jcGNpNjIwMF9ub3IuYwkyMDA5LTA3LTIxIDExOjI4OjE4LjAwMDAwMDAwMCAt MDcwMApAQCAtMCwwICsxLDEyOCBAQAorLyoKKyAqIAorICogTWFwcGluZyBmb3IgTW90b3Jv bGEgQ1BDSTYyMDAgZmxhc2gKKyAqCisgKiBBaml0IFByZW0gKGFqaXQucHJlbUBlbWVyc29u LmNvbSkKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBFbWVyc29uIE5ldHdvcmsgUG93ZXIgLSBF bWJlZGRlZCBDb21wdXRpbmcsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAq IHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2Ug YXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0 aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24p IGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4K KyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgor I2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+Cisj aW5jbHVkZSA8bGludXgvbXRkL21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRp b25zLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8cGxhdGZvcm1zLzg1eHgv Y3BjaTYyMDAuaD4KKworc3RhdGljIHN0cnVjdCBtdGRfaW5mbyAqZmxhc2g7CisKK3N0YXRp YyBzdHJ1Y3QgbWFwX2luZm8gY3BjaTYyMDBfbWFwID0geworCS5uYW1lID0JCSJjcGNpNjIw MC1mbGFzaCIsCisJLnNpemUgPQkJQ1BDSTYyMDBfRkxBU0hfU0laRSwKKwkuYmFua3dpZHRo ID0JNCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBjcGNpNjIwMF9wYXJ0 aXRpb25zW10gPSB7CisJeworCQkubmFtZSA9ICAgIkxpbnV4IEtlcm5lbCArIElOSVRSRCIs CisJCS5vZmZzZXQgPSAweDAwMDAwMDAwLAorCQkuc2l6ZSA9ICAgMHgwMTAwMDAwMCwKKwl9 LAorCXsKKwkJLm5hbWUgPSAgICJMaW51eCBKRkZTMiBGaWxlc3lzdGVtIiwKKwkJLm9mZnNl dCA9IDB4MDEwMDAwMDAsCisJCS5zaXplID0gICAweDA2ZTAwMDAwLAorCX0sCisJeworCQku bmFtZQk9ICJCb290bG9hZGVyIEJsb2NrIEIiLAorCQkub2Zmc2V0CT0gMHgwN2UwMDAwMCwK KwkJLnNpemUJPSAweDAwMTAwMDAwLAorCX0sCisJeworCQkubmFtZQk9ICJCb290bG9hZGVy IEJsb2NrIEEiLAorCQkub2Zmc2V0CT0gMHgwN2YwMDAwMCwKKwkJLnNpemUJPSAweDAwMTAw MDAwLAorCX0KK307CisKK2ludCBfX2luaXQgY3BjaTYyMDBfbWFwX2luaXQodm9pZCkKK3sK Kwl2b2lkIF9faW9tZW0gKm5vcl9jdHJsX3N0YXR1c19yZWc7CisJdTggdmFsdWU7CisKKwlj cGNpNjIwMF9tYXAucGh5cyA9IENQQ0k2MjAwX0ZMQVNIX0JBU0U7CisJY3BjaTYyMDBfbWFw LnZpcnQgPSBpb3JlbWFwKGNwY2k2MjAwX21hcC5waHlzLCBjcGNpNjIwMF9tYXAuc2l6ZSk7 CisKKwlpZiAoIWNwY2k2MjAwX21hcC52aXJ0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiY3Bj aTYyMDBfZmxhc2g6IEZhaWxlZCB0byBpb3JlbWFwIGZsYXNoXG4iKTsKKwkJcmV0dXJuIC1F SU87CisJfQorCisJc2ltcGxlX21hcF9pbml0KCZjcGNpNjIwMF9tYXApOworCisJbm9yX2N0 cmxfc3RhdHVzX3JlZyA9IGlvcmVtYXAoQ1BDSTYyMDBfTk9SX0ZMQVNIX0NUUkxfU1RBVF9S RUcsIDEpOworCWlmICghbm9yX2N0cmxfc3RhdHVzX3JlZykgeworCQlwcmludGsoS0VSTl9F UlIgImNwY2k2MjAwX2ZsYXNoOiBpb3JlbWFwKCkgZmFpbGVkXG4iKTsKKwkJaW91bm1hcCgo dm9pZCAqKWNwY2k2MjAwX21hcC52aXJ0KTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJdmFs dWUgPSByZWFkYihub3JfY3RybF9zdGF0dXNfcmVnKTsKKwlpb3VubWFwKG5vcl9jdHJsX3N0 YXR1c19yZWcpOworCisJaWYgKHZhbHVlICYgQ1BDSTYyMDBfTk9SX0ZMQVNIX1dQX0hXKSB7 CisJCXByaW50ayhLRVJOX0lORk8gImNwY2k2MjAwX2ZsYXNoOiBGbGFzaCBIVyB3cml0ZSBw cm90ZWN0ZWQgLSBtYXBwaW5nIHJlYWQtb25seVxuIik7CisJCWZsYXNoID0gZG9fbWFwX3By b2JlKCJtYXBfcm9tIiwgJmNwY2k2MjAwX21hcCk7CisJfSBlbHNlIGlmICh2YWx1ZSAmIENQ Q0k2MjAwX05PUl9GTEFTSF9XUF9TVykgeworCQlwcmludGsoS0VSTl9JTkZPICJjcGNpNjIw MF9mbGFzaDogRmxhc2ggU1cgd3JpdGUgcHJvdGVjdGVkIC0gbWFwcGluZyByZWFkLW9ubHlc biIpOworCQlmbGFzaCA9IGRvX21hcF9wcm9iZSgibWFwX3JvbSIsICZjcGNpNjIwMF9tYXAp OworCX0gZWxzZSB7CisJCWZsYXNoID0gZG9fbWFwX3Byb2JlKCJjZmlfcHJvYmUiLCAmY3Bj aTYyMDBfbWFwKTsKKwkJaWYgKCFmbGFzaCkgeworCQkJZmxhc2ggPSBkb19tYXBfcHJvYmUo ImplZGVjIiwgJmNwY2k2MjAwX21hcCk7CisJCX0KKwkJaWYgKCFmbGFzaCkgeworCQkJZmxh c2ggPSBkb19tYXBfcHJvYmUoIm1hcF9yb20iLCAmY3BjaTYyMDBfbWFwKTsKKwkJfQorCX0K KwkKKwlpZiAoZmxhc2gpIHsKKwkJZmxhc2gtPm93bmVyID0gVEhJU19NT0RVTEU7CisJCWFk ZF9tdGRfcGFydGl0aW9ucyhmbGFzaCwgY3BjaTYyMDBfcGFydGl0aW9ucywKKwkJCQkJQVJS QVlfU0laRShjcGNpNjIwMF9wYXJ0aXRpb25zKSk7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtF Uk5fRVJSICJjcGNpNjIwMF9mbGFzaDogbWFwIHByb2JlIGZhaWxlZCBmb3IgZmxhc2hcbiIp OworCQlpb3VubWFwKCh2b2lkICopY3BjaTYyMDBfbWFwLnZpcnQpOworCQlyZXR1cm4gLUVO WElPOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgY3BjaTYy MDBfbWFwX2V4aXQodm9pZCkKK3sKKwlpZiAoZmxhc2gpIHsKKwkJZGVsX210ZF9wYXJ0aXRp b25zKGZsYXNoKTsKKwkJbWFwX2Rlc3Ryb3koZmxhc2gpOworCX0KKworCWlmIChjcGNpNjIw MF9tYXAudmlydCkgeworCQlpb3VubWFwKCh2b2lkICopY3BjaTYyMDBfbWFwLnZpcnQpOwor CQljcGNpNjIwMF9tYXAudmlydCA9IE5VTEw7CisJfQorfQorCittb2R1bGVfaW5pdChjcGNp NjIwMF9tYXBfaW5pdCk7Cittb2R1bGVfZXhpdChjcGNpNjIwMF9tYXBfZXhpdCk7CisKK01P RFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkFqaXQgUHJlbSA8YWppdC5w cmVtQGVtZXJzb24uY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJNVEQgbWFwIGFuZCBw YXJ0aXRpb25zIGZvciB0aGUgRW1lcnNvbiBDUENJNjIwMCBib2FyZCIpOwpkaWZmIC11IC0t bmV3LWZpbGUgLS1yZWN1cnNpdmUgbGludXgtMi42LjI5LjYub3JpZy9kcml2ZXJzL210ZC9t YXBzL0tjb25maWcgbGludXgtMi42LjI5LjYubW9kL2RyaXZlcnMvbXRkL21hcHMvS2NvbmZp ZwotLS0gbGludXgtMi42LjI5LjYub3JpZy9kcml2ZXJzL210ZC9tYXBzL0tjb25maWcJMjAw OS0wNy0wMiAxNjo0MToyMC4wMDAwMDAwMDAgLTA3MDAKKysrIGxpbnV4LTIuNi4yOS42Lm1v ZC9kcml2ZXJzL210ZC9tYXBzL0tjb25maWcJMjAwOS0wNy0yMSAxMToyODoxOC4wMDAwMDAw MDAgLTA3MDAKQEAgLTU1MSw1ICs1NTEsMzcgQEAKIAogCSAgVGhpcyBzZWxlY3Rpb24gYXV0 b21hdGljYWxseSBzZWxlY3RzIHRoZSBtYXBfcmFtIGRyaXZlci4KIAorY29uZmlnIE1URF9N Vk1FNzEwMAorICAgICAgICB0cmlzdGF0ZSAiRmxhc2ggZGV2aWNlIG1hcHBlZCBvbiB0aGUg TVZNRTcxMDAgYm9hcmQiCisgICAgICAgIGRlcGVuZHMgb24gTVZNRTcxMDAgJiYgTVREX0NG SSAmJiBNVERfUEFSVElUSU9OUworICAgICAgICBoZWxwCisgICAgICAgICAgVGhpcyBlbmFi bGVzIGFjY2VzcyB0byB0aGUgRmxhc2ggb24gRW1lcnNvbiBOZXR3b3JrIFBvd2VyCisgICAg ICAgICAgTVZNRTcxMDAgYm9hcmRzLgorICAgICAgICAgIElmIHlvdSBoYXZlIHN1Y2ggYSBi b2FyZCwgc2F5ICdZJy4KKworY29uZmlnIE1URF9NVk1FNDEwMAorICAgICAgICB0cmlzdGF0 ZSAiRmxhc2ggZGV2aWNlIG1hcHBlZCBvbiB0aGUgTVZNRTQxMDAgYm9hcmQiCisgICAgICAg IGRlcGVuZHMgb24gTVZNRTQxMDAgJiYgTVREX0NGSSAmJiBNVERfUEFSVElUSU9OUworICAg ICAgICBoZWxwCisgICAgICAgICAgVGhpcyBlbmFibGVzIGFjY2VzcyB0byB0aGUgRmxhc2gg b24gRW1lcnNvbiBOZXR3b3JrIFBvd2VyCisgICAgICAgICAgTVZNRTQxMDAgYm9hcmRzLgor ICAgICAgICAgIElmIHlvdSBoYXZlIHN1Y2ggYSBib2FyZCwgc2F5ICdZJy4KKworY29uZmln IE1URF9NVk1FMzEwMAorICAgICAgICB0cmlzdGF0ZSAiRmxhc2ggZGV2aWNlIG1hcHBlZCBv biB0aGUgTVZNRTMxMDAgYm9hcmQiCisgICAgICAgIGRlcGVuZHMgb24gTVZNRTMxMDAgJiYg TVREX0NGSSAmJiBNVERfUEFSVElUSU9OUworICAgICAgICBoZWxwCisgICAgICAgICAgVGhp cyBlbmFibGVzIGFjY2VzcyB0byB0aGUgRmxhc2ggb24gRW1lcnNvbiBOZXR3b3JrIFBvd2Vy CisgICAgICAgICAgTVZNRTMxMDAgYm9hcmRzLgorICAgICAgICAgIElmIHlvdSBoYXZlIHN1 Y2ggYSBib2FyZCwgc2F5ICdZJy4KKworY29uZmlnIE1URF9DUENJNjIwMAorICAgICAgICB0 cmlzdGF0ZSAiRmxhc2ggZGV2aWNlIG1hcHBlZCBvbiB0aGUgQ1BDSTYyMDAgYm9hcmQiCisg ICAgICAgIGRlcGVuZHMgb24gQ1BDSTYyMDAgJiYgTVREX0NGSSAmJiBNVERfUEFSVElUSU9O UworICAgICAgICBoZWxwCisgICAgICAgICAgVGhpcyBlbmFibGVzIGFjY2VzcyB0byB0aGUg Rmxhc2ggb24gRW1lcnNvbiBOZXR3b3JrIFBvd2VyCisgICAgICAgICAgQ1BDSTYyMDAgYm9h cmRzLgorICAgICAgICAgIElmIHlvdSBoYXZlIHN1Y2ggYSBib2FyZCwgc2F5ICdZJy4KKwog ZW5kbWVudQogCmRpZmYgLXUgLS1uZXctZmlsZSAtLXJlY3Vyc2l2ZSBsaW51eC0yLjYuMjku Ni5vcmlnL2RyaXZlcnMvbXRkL21hcHMvTWFrZWZpbGUgbGludXgtMi42LjI5LjYubW9kL2Ry aXZlcnMvbXRkL21hcHMvTWFrZWZpbGUKLS0tIGxpbnV4LTIuNi4yOS42Lm9yaWcvZHJpdmVy cy9tdGQvbWFwcy9NYWtlZmlsZQkyMDA5LTA3LTAyIDE2OjQxOjIwLjAwMDAwMDAwMCAtMDcw MAorKysgbGludXgtMi42LjI5LjYubW9kL2RyaXZlcnMvbXRkL21hcHMvTWFrZWZpbGUJMjAw OS0wNy0yMSAxMToyODoxOC4wMDAwMDAwMDAgLTA3MDAKQEAgLTYxLDMgKzYxLDcgQEAKIG9i ai0kKENPTkZJR19NVERfT01BUF9OT1IpCSs9IG9tYXBfbm9yLm8KIG9iai0kKENPTkZJR19N VERfSU5URUxfVlJfTk9SKQkrPSBpbnRlbF92cl9ub3Iubwogb2JqLSQoQ09ORklHX01URF9C RklOX0FTWU5DKQkrPSBiZmluLWFzeW5jLWZsYXNoLm8KK29iai0kKENPTkZJR19NVERfTVZN RTcxMDApICAgICAgKz0gbXZtZTcxMDBfbm9yLm8KK29iai0kKENPTkZJR19NVERfTVZNRTQx MDApICAgICAgKz0gbXZtZTQxMDBfbm9yLm8KK29iai0kKENPTkZJR19NVERfTVZNRTMxMDAp ICAgICAgKz0gbXZtZTMxMDBfbm9yLm8KK29iai0kKENPTkZJR19NVERfQ1BDSTYyMDApICAg ICAgKz0gY3BjaTYyMDBfbm9yLm8KZGlmZiAtdSAtLW5ldy1maWxlIC0tcmVjdXJzaXZlIGxp bnV4LTIuNi4yOS42Lm9yaWcvZHJpdmVycy9tdGQvbWFwcy9tdm1lMzEwMF9ub3IuYyBsaW51 eC0yLjYuMjkuNi5tb2QvZHJpdmVycy9tdGQvbWFwcy9tdm1lMzEwMF9ub3IuYwotLS0gbGlu dXgtMi42LjI5LjYub3JpZy9kcml2ZXJzL210ZC9tYXBzL212bWUzMTAwX25vci5jCTE5Njkt MTItMzEgMTc6MDA6MDAuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYuMjkuNi5tb2Qv ZHJpdmVycy9tdGQvbWFwcy9tdm1lMzEwMF9ub3IuYwkyMDA5LTA3LTIxIDExOjI4OjE4LjAw MDAwMDAwMCAtMDcwMApAQCAtMCwwICsxLDE2NCBAQAorLyoKKyAqIAorICogTWFwcGluZyBm b3IgTW90b3JvbGEgTVZNRTMxMDAgZmxhc2gKKyAqCisgKiBBaml0IFByZW0gKEFqaXQuUHJl bUBlbWVyc29uLmNvbSkKKyAqCisgKiBDb3B5cmlnaHQgMjAwNS0yMDA3IE1vdG9yb2xhIElu Yy4KKyAqIENvcHlyaWdodCAyMDA4LTIwMDkgRW1lcnNvbiBOZXR3b3JrIFBvd2VyIEVtYmVk ZGVkIENvbXB1dGluZyBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRl ciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1 Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2 ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkg bGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5j bHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNs dWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1 ZGUgPGxpbnV4L210ZC9tYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5o PgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPHBsYXRmb3Jtcy84NXh4L212bWUz MTAwLmg+CisKK3N0YXRpYyBzdHJ1Y3QgbXRkX2luZm8gKmZsYXNoOworCitzdGF0aWMgc3Ry dWN0IG1hcF9pbmZvIG12bWUzMTAwXzEyOE1fbWFwID0geworCS5uYW1lID0JCSJtdm1lMzEw MC1mbGFzaCIsCisJLnNpemUgPQkJTVZNRTMxMDBfRkxBU0hfU0laRV8xMjhNLAorCS5iYW5r d2lkdGggPQk0LAorfTsKKworc3RhdGljIHN0cnVjdCBtYXBfaW5mbyBtdm1lMzEwMF82NE1f bWFwID0geworCS5uYW1lID0JCSJtdm1lMzEwMC1mbGFzaCIsCisJLnNpemUgPQkJTVZNRTMx MDBfRkxBU0hfU0laRV82NE0sCisJLmJhbmt3aWR0aCA9CTQsCit9OworCitzdGF0aWMgc3Ry dWN0IG1hcF9pbmZvIG12bWUzMTAwX21hcDsKKyAKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRp dGlvbiBtdm1lMzEwMF8xMjhNX3BhcnRpdGlvbnNbXSA9IHsKKwl7CisJCS5uYW1lID0gICAi TGludXggS2VybmVsICsgSU5JVFJEIiwKKwkJLm9mZnNldCA9IDB4MDAwMDAwMDAsCisJCS5z aXplID0gICAweDAxMDAwMDAwLAorCX0sCisJeworCQkubmFtZSA9ICAgIkxpbnV4IEpGRlMy IEZpbGVzeXN0ZW0iLAorCQkub2Zmc2V0ID0gMHgwMTAwMDAwMCwKKwkJLnNpemUgPSAgIDB4 MDZlMDAwMDAsCisJfSwKKwl7CisJCS5uYW1lCT0gIkJvb3Rsb2FkZXIgQmxvY2sgQiIsCisJ CS5vZmZzZXQJPSAweDA3ZTAwMDAwLAorCQkuc2l6ZQk9IDB4MDAxMDAwMDAsCisJfSwKKwl7 CisJCS5uYW1lCT0gIkJvb3Rsb2FkZXIgQmxvY2sgQSIsCisJCS5vZmZzZXQJPSAweDA3ZjAw MDAwLAorCQkuc2l6ZQk9IDB4MDAxMDAwMDAsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBt dGRfcGFydGl0aW9uIG12bWUzMTAwXzY0TV9wYXJ0aXRpb25zW10gPSB7CisJeworCQkubmFt ZSA9ICAgIkxpbnV4IEtlcm5lbCArIElOSVRSRCIsCisJCS5vZmZzZXQgPSAweDAwMDAwMDAw LAorCQkuc2l6ZSA9ICAgMHgwMTAwMDAwMCwKKwl9LAorCXsKKwkJLm5hbWUgPSAgICJMaW51 eCBKRkZTMiBGaWxlc3lzdGVtIiwKKwkJLm9mZnNldCA9IDB4MDEwMDAwMDAsCisJCS5zaXpl ID0gICAweDAyZTAwMDAwLAorCX0sCisJeworCQkubmFtZQk9ICJCb290bG9hZGVyIEJsb2Nr IEIiLAorCQkub2Zmc2V0CT0gMHgwM2UwMDAwMCwKKwkJLnNpemUJPSAweDAwMTAwMDAwLAor CX0sCisJeworCQkubmFtZQk9ICJCb290bG9hZGVyIEJsb2NrIEEiLAorCQkub2Zmc2V0CT0g MHgwM2YwMDAwMCwKKwkJLnNpemUJPSAweDAwMTAwMDAwLAorCX0KK307CisKKworaW50IF9f aW5pdCBtdm1lMzEwMF9tYXBfaW5pdCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgbXZtZTMx MDBfZmxhc2hfYmFzZTsKKworCW12bWUzMTAwX2ZsYXNoX2Jhc2UgPSBNVk1FMzEwMF9GTEFT SF9CQVNFXzEyOE07CisKKwltdm1lMzEwMF9tYXAgPSBtdm1lMzEwMF8xMjhNX21hcDsKKwor CW12bWUzMTAwX21hcC5waHlzID0gbXZtZTMxMDBfZmxhc2hfYmFzZTsKKwltdm1lMzEwMF9t YXAudmlydCA9IGlvcmVtYXAobXZtZTMxMDBfZmxhc2hfYmFzZSwgCisJCQkJCQltdm1lMzEw MF9tYXAuc2l6ZSk7CisKKwlpZiAoIW12bWUzMTAwX21hcC52aXJ0KSB7CisJCXByaW50aygi RmFpbGVkIHRvIGlvcmVtYXAgZmxhc2hcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlz aW1wbGVfbWFwX2luaXQoJm12bWUzMTAwX21hcCk7CisKKwlmbGFzaCA9IGRvX21hcF9wcm9i ZSgiY2ZpX3Byb2JlIiwgJm12bWUzMTAwX21hcCk7CisJaWYgKGZsYXNoKSB7CisJCWZsYXNo LT5vd25lciA9IFRISVNfTU9EVUxFOworCQlhZGRfbXRkX3BhcnRpdGlvbnMoZmxhc2gsIG12 bWUzMTAwXzEyOE1fcGFydGl0aW9ucywKKwkJCQkJQVJSQVlfU0laRShtdm1lMzEwMF8xMjhN X3BhcnRpdGlvbnMpKTsKKwl9IGVsc2UgeworCQlpb3VubWFwKCh2b2lkICopbXZtZTMxMDBf bWFwLnZpcnQpOworCQltdm1lMzEwMF9tYXAudmlydCA9IDA7CisKKwkJbXZtZTMxMDBfZmxh c2hfYmFzZSA9IE1WTUUzMTAwX0ZMQVNIX0JBU0VfNjRNOworCQltdm1lMzEwMF9tYXAgPSBt dm1lMzEwMF82NE1fbWFwOworCisJCW12bWUzMTAwX21hcC5waHlzID0gbXZtZTMxMDBfZmxh c2hfYmFzZTsKKwkJbXZtZTMxMDBfbWFwLnZpcnQgPSBpb3JlbWFwKG12bWUzMTAwX2ZsYXNo X2Jhc2UsIAorCQkJCQltdm1lMzEwMF9tYXAuc2l6ZSk7CisKKwkJaWYgKCFtdm1lMzEwMF9t YXAudmlydCkgeworCQkJcHJpbnRrKCJGYWlsZWQgdG8gaW9yZW1hcCBmbGFzaFxuIik7CisJ CQlyZXR1cm4gLUVJTzsKKwkJfQorCisJCXNpbXBsZV9tYXBfaW5pdCgmbXZtZTMxMDBfbWFw KTsKKworCQlmbGFzaCA9IGRvX21hcF9wcm9iZSgiY2ZpX3Byb2JlIiwgJm12bWUzMTAwX21h cCk7CisJCWlmIChmbGFzaCkgeworCQkJZmxhc2gtPm93bmVyID0gVEhJU19NT0RVTEU7CisJ CQlhZGRfbXRkX3BhcnRpdGlvbnMoZmxhc2gsIG12bWUzMTAwXzY0TV9wYXJ0aXRpb25zLAor CQkJCQlBUlJBWV9TSVpFKG12bWUzMTAwXzY0TV9wYXJ0aXRpb25zKSk7CisJCX0gZWxzZSB7 CisJCQlwcmludGsoIm1hcCBwcm9iZSBmYWlsZWQgZm9yIGZsYXNoXG4iKTsKKwkJCWlvdW5t YXAoKHZvaWQgKiltdm1lMzEwMF9tYXAudmlydCk7CisJCQlyZXR1cm4gLUVOWElPOworCQl9 CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtdm1lMzEwMF9t YXBfZXhpdCh2b2lkKQoreworCWlmIChmbGFzaCkgeworCQlkZWxfbXRkX3BhcnRpdGlvbnMo Zmxhc2gpOworCQltYXBfZGVzdHJveShmbGFzaCk7CisJfQorCisJaWYgKG12bWUzMTAwX21h cC52aXJ0KSB7CisJCWlvdW5tYXAoKHZvaWQgKiltdm1lMzEwMF9tYXAudmlydCk7CisJCW12 bWUzMTAwX21hcC52aXJ0ID0gTlVMTDsKKwl9Cit9CisKK21vZHVsZV9pbml0KG12bWUzMTAw X21hcF9pbml0KTsKK21vZHVsZV9leGl0KG12bWUzMTAwX21hcF9leGl0KTsKKworTU9EVUxF X0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiQWppdCBQcmVtIDxhaml0LnByZW1A ZW1lcnNvbi5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk1URCBtYXAgYW5kIHBhcnRp dGlvbnMgZm9yIEVtZXJzb24gTVZNRTMxMDAiKTsKZGlmZiAtdSAtLW5ldy1maWxlIC0tcmVj dXJzaXZlIGxpbnV4LTIuNi4yOS42Lm9yaWcvZHJpdmVycy9tdGQvbWFwcy9tdm1lNDEwMF9u b3IuYyBsaW51eC0yLjYuMjkuNi5tb2QvZHJpdmVycy9tdGQvbWFwcy9tdm1lNDEwMF9ub3Iu YwotLS0gbGludXgtMi42LjI5LjYub3JpZy9kcml2ZXJzL210ZC9tYXBzL212bWU0MTAwX25v ci5jCTE5NjktMTItMzEgMTc6MDA6MDAuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYu MjkuNi5tb2QvZHJpdmVycy9tdGQvbWFwcy9tdm1lNDEwMF9ub3IuYwkyMDA5LTA3LTIxIDEx OjI4OjE4LjAwMDAwMDAwMCAtMDcwMApAQCAtMCwwICsxLDEyOCBAQAorLyoKKyAqIAorICog TWFwcGluZyBmb3IgTW90b3JvbGEgTVZNRTQxMDAgZmxhc2gKKyAqCisgKiBBaml0IFByZW0g KGFqaXQucHJlbUBlbWVyc29uLmNvbSkKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBFbWVyc29u IE5ldHdvcmsgUG93ZXIgLSBFbWJlZGRlZCBDb21wdXRpbmcsIEluYy4KKyAqCisgKiBUaGlz IHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFu ZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJh bCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChh dCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRl IDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUg PGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxs aW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL21hcC5oPgorI2luY2x1ZGUg PGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVk ZSA8cGxhdGZvcm1zLzg1eHgvbXZtZTQxMDAuaD4KKworc3RhdGljIHN0cnVjdCBtdGRfaW5m byAqZmxhc2g7CisKK3N0YXRpYyBzdHJ1Y3QgbWFwX2luZm8gbXZtZTQxMDBfbWFwID0gewor CS5uYW1lID0JCSJtdm1lNDEwMC1mbGFzaCIsCisJLnNpemUgPQkJTVZNRTQxMDBfRkxBU0hf U0laRSwKKwkuYmFua3dpZHRoID0JNCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRp dGlvbiBtdm1lNDEwMF9wYXJ0aXRpb25zW10gPSB7CisJeworCQkubmFtZSA9ICAgIkxpbnV4 IEtlcm5lbCArIElOSVRSRCIsCisJCS5vZmZzZXQgPSAweDAwMDAwMDAwLAorCQkuc2l6ZSA9 ICAgMHgwMTAwMDAwMCwKKwl9LAorCXsKKwkJLm5hbWUgPSAgICJMaW51eCBKRkZTMiBGaWxl c3lzdGVtIiwKKwkJLm9mZnNldCA9IDB4MDEwMDAwMDAsCisJCS5zaXplID0gICAweDA2ZTAw MDAwLAorCX0sCisJeworCQkubmFtZQk9ICJCb290bG9hZGVyIEJsb2NrIEIiLAorCQkub2Zm c2V0CT0gMHgwN2UwMDAwMCwKKwkJLnNpemUJPSAweDAwMTAwMDAwLAorCX0sCisJeworCQku bmFtZQk9ICJCb290bG9hZGVyIEJsb2NrIEEiLAorCQkub2Zmc2V0CT0gMHgwN2YwMDAwMCwK KwkJLnNpemUJPSAweDAwMTAwMDAwLAorCX0KK307CisKK2ludCBfX2luaXQgbXZtZTQxMDBf bWFwX2luaXQodm9pZCkKK3sKKwl2b2lkIF9faW9tZW0gKm5vcl9jdHJsX3N0YXR1c19yZWc7 CisJdTggdmFsdWU7CisKKwltdm1lNDEwMF9tYXAucGh5cyA9IE1WTUU0MTAwX0ZMQVNIX0JB U0U7CisJbXZtZTQxMDBfbWFwLnZpcnQgPSBpb3JlbWFwKG12bWU0MTAwX21hcC5waHlzLCBt dm1lNDEwMF9tYXAuc2l6ZSk7CisKKwlpZiAoIW12bWU0MTAwX21hcC52aXJ0KSB7CisJCXBy aW50ayhLRVJOX0VSUiAibXZtZTQxMDBfZmxhc2g6IEZhaWxlZCB0byBpb3JlbWFwIGZsYXNo XG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJc2ltcGxlX21hcF9pbml0KCZtdm1lNDEw MF9tYXApOworCisJbm9yX2N0cmxfc3RhdHVzX3JlZyA9IGlvcmVtYXAoTVZNRTQxMDBfTk9S X0ZMQVNIX0NUUkxfU1RBVF9SRUcsIDEpOworCWlmICghbm9yX2N0cmxfc3RhdHVzX3JlZykg eworCQlwcmludGsoS0VSTl9FUlIgIm12bWU0MTAwX2ZsYXNoOiBpb3JlbWFwKCkgZmFpbGVk XG4iKTsKKwkJaW91bm1hcCgodm9pZCAqKW12bWU0MTAwX21hcC52aXJ0KTsKKwkJcmV0dXJu IC1FSU87CisJfQorCisJdmFsdWUgPSByZWFkYihub3JfY3RybF9zdGF0dXNfcmVnKTsKKwlp b3VubWFwKG5vcl9jdHJsX3N0YXR1c19yZWcpOworCisJaWYgKHZhbHVlICYgTVZNRTQxMDBf Tk9SX0ZMQVNIX1dQX0hXKSB7CisJCXByaW50ayhLRVJOX0lORk8gIm12bWU0MTAwX2ZsYXNo OiBGbGFzaCBIVyB3cml0ZSBwcm90ZWN0ZWQgLSBtYXBwaW5nIHJlYWQtb25seVxuIik7CisJ CWZsYXNoID0gZG9fbWFwX3Byb2JlKCJtYXBfcm9tIiwgJm12bWU0MTAwX21hcCk7CisJfSBl bHNlIGlmICh2YWx1ZSAmIE1WTUU0MTAwX05PUl9GTEFTSF9XUF9TVykgeworCQlwcmludGso S0VSTl9JTkZPICJtdm1lNDEwMF9mbGFzaDogRmxhc2ggU1cgd3JpdGUgcHJvdGVjdGVkIC0g bWFwcGluZyByZWFkLW9ubHlcbiIpOworCQlmbGFzaCA9IGRvX21hcF9wcm9iZSgibWFwX3Jv bSIsICZtdm1lNDEwMF9tYXApOworCX0gZWxzZSB7CisJCWZsYXNoID0gZG9fbWFwX3Byb2Jl KCJjZmlfcHJvYmUiLCAmbXZtZTQxMDBfbWFwKTsKKwkJaWYgKCFmbGFzaCkgeworCQkJZmxh c2ggPSBkb19tYXBfcHJvYmUoImplZGVjIiwgJm12bWU0MTAwX21hcCk7CisJCX0KKwkJaWYg KCFmbGFzaCkgeworCQkJZmxhc2ggPSBkb19tYXBfcHJvYmUoIm1hcF9yb20iLCAmbXZtZTQx MDBfbWFwKTsKKwkJfQorCX0KKwkKKwlpZiAoZmxhc2gpIHsKKwkJZmxhc2gtPm93bmVyID0g VEhJU19NT0RVTEU7CisJCWFkZF9tdGRfcGFydGl0aW9ucyhmbGFzaCwgbXZtZTQxMDBfcGFy dGl0aW9ucywKKwkJCQkJQVJSQVlfU0laRShtdm1lNDEwMF9wYXJ0aXRpb25zKSk7CisJfSBl bHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtdm1lNDEwMF9mbGFzaDogbWFwIHByb2JlIGZh aWxlZCBmb3IgZmxhc2hcbiIpOworCQlpb3VubWFwKCh2b2lkICopbXZtZTQxMDBfbWFwLnZp cnQpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMg dm9pZCBfX2V4aXQgbXZtZTQxMDBfbWFwX2V4aXQodm9pZCkKK3sKKwlpZiAoZmxhc2gpIHsK KwkJZGVsX210ZF9wYXJ0aXRpb25zKGZsYXNoKTsKKwkJbWFwX2Rlc3Ryb3koZmxhc2gpOwor CX0KKworCWlmIChtdm1lNDEwMF9tYXAudmlydCkgeworCQlpb3VubWFwKCh2b2lkICopbXZt ZTQxMDBfbWFwLnZpcnQpOworCQltdm1lNDEwMF9tYXAudmlydCA9IE5VTEw7CisJfQorfQor Cittb2R1bGVfaW5pdChtdm1lNDEwMF9tYXBfaW5pdCk7Cittb2R1bGVfZXhpdChtdm1lNDEw MF9tYXBfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1Io IkFqaXQgUHJlbSA8YWppdC5wcmVtQGVtZXJzb24uY29tPiIpOworTU9EVUxFX0RFU0NSSVBU SU9OKCJNVEQgbWFwIGFuZCBwYXJ0aXRpb25zIGZvciB0aGUgRW1lcnNvbiBNVk1FNDEwMCBi b2FyZCIpOwpkaWZmIC11IC0tbmV3LWZpbGUgLS1yZWN1cnNpdmUgbGludXgtMi42LjI5LjYu b3JpZy9kcml2ZXJzL210ZC9tYXBzL212bWU3MTAwX25vci5jIGxpbnV4LTIuNi4yOS42Lm1v ZC9kcml2ZXJzL210ZC9tYXBzL212bWU3MTAwX25vci5jCi0tLSBsaW51eC0yLjYuMjkuNi5v cmlnL2RyaXZlcnMvbXRkL21hcHMvbXZtZTcxMDBfbm9yLmMJMTk2OS0xMi0zMSAxNzowMDow MC4wMDAwMDAwMDAgLTA3MDAKKysrIGxpbnV4LTIuNi4yOS42Lm1vZC9kcml2ZXJzL210ZC9t YXBzL212bWU3MTAwX25vci5jCTIwMDktMDctMjEgMTE6Mjg6MTguMDAwMDAwMDAwIC0wNzAw CkBAIC0wLDAgKzEsMTI4IEBACisvKgorICogCisgKiBNYXBwaW5nIGZvciBNb3Rvcm9sYSBN Vk1FNzEwMCBmbGFzaAorICoKKyAqIEFqaXQgUHJlbSAoYWppdC5wcmVtQGVtZXJzb24uY29t KQorICoKKyAqIENvcHlyaWdodCAyMDA4IEVtZXJzb24gTmV0d29yayBQb3dlciAtIEVtYmVk ZGVkIENvbXB1dGluZywgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5k ZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIg dmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55 IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2lu Y2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5j bHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNs dWRlIDxsaW51eC9tdGQvbWFwLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMu aD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxwbGF0Zm9ybXMvODZ4eC9tdm1l NzEwMC5oPgorCitzdGF0aWMgc3RydWN0IG10ZF9pbmZvICpmbGFzaDsKKworc3RhdGljIHN0 cnVjdCBtYXBfaW5mbyBtdm1lNzEwMF9tYXAgPSB7CisJLm5hbWUgPQkJIm12bWU3MTAwLWZs YXNoIiwKKwkuc2l6ZSA9CQlNVk1FNzEwMF9GTEFTSF9TSVpFLAorCS5iYW5rd2lkdGggPQk0 LAorfTsKKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIG12bWU3MTAwX3BhcnRpdGlv bnNbXSA9IHsKKwl7CisJCS5uYW1lID0gICAiTGludXggS2VybmVsICsgSU5JVFJEIiwKKwkJ Lm9mZnNldCA9IDB4MDAwMDAwMDAsCisJCS5zaXplID0gICAweDAxMDAwMDAwLAorCX0sCisJ eworCQkubmFtZSA9ICAgIkxpbnV4IEpGRlMyIEZpbGVzeXN0ZW0iLAorCQkub2Zmc2V0ID0g MHgwMTAwMDAwMCwKKwkJLnNpemUgPSAgIDB4MDZlMDAwMDAsCisJfSwKKwl7CisJCS5uYW1l CT0gIkJvb3Rsb2FkZXIgQmxvY2sgQiIsCisJCS5vZmZzZXQJPSAweDA3ZTAwMDAwLAorCQku c2l6ZQk9IDB4MDAxMDAwMDAsCisJfSwKKwl7CisJCS5uYW1lCT0gIkJvb3Rsb2FkZXIgQmxv Y2sgQSIsCisJCS5vZmZzZXQJPSAweDA3ZjAwMDAwLAorCQkuc2l6ZQk9IDB4MDAxMDAwMDAs CisJfQorfTsKKworaW50IF9faW5pdCBtdm1lNzEwMF9tYXBfaW5pdCh2b2lkKQoreworCXZv aWQgX19pb21lbSAqbm9yX2N0cmxfc3RhdHVzX3JlZzsKKwl1OCB2YWx1ZTsKKworCW12bWU3 MTAwX21hcC5waHlzID0gTVZNRTcxMDBfRkxBU0hfQkFTRTsKKwltdm1lNzEwMF9tYXAudmly dCA9IGlvcmVtYXAobXZtZTcxMDBfbWFwLnBoeXMsIG12bWU3MTAwX21hcC5zaXplKTsKKwor CWlmICghbXZtZTcxMDBfbWFwLnZpcnQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtdm1lNzEw MF9mbGFzaDogRmFpbGVkIHRvIGlvcmVtYXAgZmxhc2hcbiIpOworCQlyZXR1cm4gLUVJTzsK Kwl9CisKKwlzaW1wbGVfbWFwX2luaXQoJm12bWU3MTAwX21hcCk7CisKKwlub3JfY3RybF9z dGF0dXNfcmVnID0gaW9yZW1hcChNVk1FNzEwMF9OT1JfRkxBU0hfQ1RSTF9TVEFUX1JFRywg MSk7CisJaWYgKCFub3JfY3RybF9zdGF0dXNfcmVnKSB7CisJCXByaW50ayhLRVJOX0VSUiAi bXZtZTcxMDBfZmxhc2g6IGlvcmVtYXAoKSBmYWlsZWRcbiIpOworCQlpb3VubWFwKCh2b2lk ICopbXZtZTcxMDBfbWFwLnZpcnQpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwl2YWx1ZSA9 IHJlYWRiKG5vcl9jdHJsX3N0YXR1c19yZWcpOworCWlvdW5tYXAobm9yX2N0cmxfc3RhdHVz X3JlZyk7CisKKwlpZiAodmFsdWUgJiBNVk1FNzEwMF9OT1JfRkxBU0hfV1BfSFcpIHsKKwkJ cHJpbnRrKEtFUk5fSU5GTyAibXZtZTcxMDBfZmxhc2g6IEZsYXNoIEhXIHdyaXRlIHByb3Rl Y3RlZCAtIG1hcHBpbmcgcmVhZC1vbmx5XG4iKTsKKwkJZmxhc2ggPSBkb19tYXBfcHJvYmUo Im1hcF9yb20iLCAmbXZtZTcxMDBfbWFwKTsKKwl9IGVsc2UgaWYgKHZhbHVlICYgTVZNRTcx MDBfTk9SX0ZMQVNIX1dQX1NXKSB7CisJCXByaW50ayhLRVJOX0lORk8gIm12bWU3MTAwX2Zs YXNoOiBGbGFzaCBTVyB3cml0ZSBwcm90ZWN0ZWQgLSBtYXBwaW5nIHJlYWQtb25seVxuIik7 CisJCWZsYXNoID0gZG9fbWFwX3Byb2JlKCJtYXBfcm9tIiwgJm12bWU3MTAwX21hcCk7CisJ fSBlbHNlIHsKKwkJZmxhc2ggPSBkb19tYXBfcHJvYmUoImNmaV9wcm9iZSIsICZtdm1lNzEw MF9tYXApOworCQlpZiAoIWZsYXNoKSB7CisJCQlmbGFzaCA9IGRvX21hcF9wcm9iZSgiamVk ZWMiLCAmbXZtZTcxMDBfbWFwKTsKKwkJfQorCQlpZiAoIWZsYXNoKSB7CisJCQlmbGFzaCA9 IGRvX21hcF9wcm9iZSgibWFwX3JvbSIsICZtdm1lNzEwMF9tYXApOworCQl9CisJfQorCQor CWlmIChmbGFzaCkgeworCQlmbGFzaC0+b3duZXIgPSBUSElTX01PRFVMRTsKKwkJYWRkX210 ZF9wYXJ0aXRpb25zKGZsYXNoLCBtdm1lNzEwMF9wYXJ0aXRpb25zLAorCQkJCQlBUlJBWV9T SVpFKG12bWU3MTAwX3BhcnRpdGlvbnMpKTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9F UlIgIm12bWU3MTAwX2ZsYXNoOiBtYXAgcHJvYmUgZmFpbGVkIGZvciBmbGFzaFxuIik7CisJ CWlvdW5tYXAoKHZvaWQgKiltdm1lNzEwMF9tYXAudmlydCk7CisJCXJldHVybiAtRU5YSU87 CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtdm1lNzEwMF9t YXBfZXhpdCh2b2lkKQoreworCWlmIChmbGFzaCkgeworCQlkZWxfbXRkX3BhcnRpdGlvbnMo Zmxhc2gpOworCQltYXBfZGVzdHJveShmbGFzaCk7CisJfQorCisJaWYgKG12bWU3MTAwX21h cC52aXJ0KSB7CisJCWlvdW5tYXAoKHZvaWQgKiltdm1lNzEwMF9tYXAudmlydCk7CisJCW12 bWU3MTAwX21hcC52aXJ0ID0gTlVMTDsKKwl9Cit9CisKK21vZHVsZV9pbml0KG12bWU3MTAw X21hcF9pbml0KTsKK21vZHVsZV9leGl0KG12bWU3MTAwX21hcF9leGl0KTsKKworTU9EVUxF X0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiQWppdCBQcmVtIDxhaml0LnByZW1A ZW1lcnNvbi5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk1URCBtYXAgYW5kIHBhcnRp dGlvbnMgZm9yIHRoZSBFbWVyc29uIE1WTUU3MTAwIGJvYXJkIik7CmRpZmYgLXUgLS1uZXct ZmlsZSAtLXJlY3Vyc2l2ZSBsaW51eC0yLjYuMjkuNi5vcmlnL2RyaXZlcnMvbXRkL25hbmQv Y3BjaTYyMDBfbmFuZC5jIGxpbnV4LTIuNi4yOS42Lm1vZC9kcml2ZXJzL210ZC9uYW5kL2Nw Y2k2MjAwX25hbmQuYwotLS0gbGludXgtMi42LjI5LjYub3JpZy9kcml2ZXJzL210ZC9uYW5k L2NwY2k2MjAwX25hbmQuYwkxOTY5LTEyLTMxIDE3OjAwOjAwLjAwMDAwMDAwMCAtMDcwMAor KysgbGludXgtMi42LjI5LjYubW9kL2RyaXZlcnMvbXRkL25hbmQvY3BjaTYyMDBfbmFuZC5j CTIwMDktMDctMjEgMTE6Mjg6MTguMDAwMDAwMDAwIC0wNzAwCkBAIC0wLDAgKzEsNDIzIEBA CisvKgorICogZHJpdmVycy9tdGQvbmFuZC9jcGNpNjIwMF9uYW5kLmMKKyAqCisgKiBBIGds dWUgZHJpdmVyIGZvciB0aGUgTkFORCBjaGlwcyBvbiB0aGUgQ1BDSTYyMDAgYm9hcmQKKyAq CisgKiBBdXRob3I6IEFqaXQgUHJlbSAoYWppdC5wcmVtQGVtZXJzb24uY29tKQorICogQ29w eXJpZ2h0IDIwMDggRW1lcnNvbiBOZXR3b3JrIFBvd2VyIEVtYmVkZGVkIENvbXB1dGluZyBJ bmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNo ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2luY2x1 ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8 bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxs aW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGlu dXgvbXRkL25hbmQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZF9lY2MuaD4KKyNpbmNs dWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+Cisj aW5jbHVkZSA8cGxhdGZvcm1zLzg1eHgvY3BjaTYyMDAuaD4KKworc3RhdGljIGludCBuX3Bo eXNpY2FsX2NoaXBzOworCitzdHJ1Y3QgY3BjaTYyMDBfbmFuZF9ob3N0IHsKKwlzdHJ1Y3Qg bmFuZF9jaGlwIG5hbmRfY2hpcDsKKwlzdHJ1Y3QgbXRkX2luZm8gbXRkOworCXZvaWQgX19p b21lbSAqaW9fY3RybDsKKwl2b2lkIF9faW9tZW0gKmlvX3NlbGVjdDsKKwl2b2lkIF9faW9t ZW0gKmlvX3N0YXR1czsKKwl2b2lkIF9faW9tZW0gKmlvX2RhdGE7CisJaW50IGNoaXA7CisJ aW50IGNoaXBfZW5hYmxlOworfTsKKworc3RhdGljIHN0cnVjdCBjcGNpNjIwMF9uYW5kX2hv c3QgKmNoaXBzWzJdOworCisjaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCitzdGF0aWMg Y29uc3QgY2hhciAqcGFydF9wcm9iZXNbXSA9IHsgImNtZGxpbmVwYXJ0IiwgTlVMTCB9Owor CisvKgorICogRGVmaW5lIHN0YXRpYyBwYXJ0aXRpb25zIGZvciBmbGFzaCBkZXZpY2UKKyAq Lworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHBhcnRpdGlvbl9pbmZvXzRHW10gPSB7 CisJeworCSAubmFtZSA9ICJMaW51eCBZQUZGUyAxIiwKKwkgLm9mZnNldCA9IDB4MDAwMDAw MDAsCisJIC5zaXplICAgPSAweDgwMDAwMDAwLAorCX0sIAorCXsKKwkgLm5hbWUgPSAiTGlu dXggWUFGRlMgMiIsCisJIC5vZmZzZXQgPSAweDgwMDAwMDAwLAorCSAuc2l6ZSAgID0gMHg4 MDAwMDAwMCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHBhcnRp dGlvbl9pbmZvXzhHW10gPSB7CisgICAgICAgIHsKKyAgICAgICAgIC5uYW1lID0gIkxpbnV4 IFlBRkZTIDEiLAorICAgICAgICAgLm9mZnNldCA9IDB4MDAwMDAwMDAsCisgICAgICAgICAu c2l6ZSAgID0gMHg4MDAwMDAwMCwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAg Lm5hbWUgPSAiTGludXggWUFGRlMgMiIsCisgICAgICAgICAub2Zmc2V0ID0gMHg4MDAwMDAw MCwKKyAgICAgICAgIC5zaXplICAgPSAweDgwMDAwMDAwLAorICAgICAgICB9LAorICAgICAg ICB7CisgICAgICAgICAubmFtZSA9ICJMaW51eCBZQUZGUyAzIiwKKyAgICAgICAgIC5vZmZz ZXQgPSAweDEwMDAwMDAwMExMLAorICAgICAgICAgLnNpemUgICA9IDB4ODAwMDAwMDAsCisg ICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgIC5uYW1lID0gIkxpbnV4IFlBRkZTIDQi LAorICAgICAgICAgLm9mZnNldCA9IDB4MTgwMDAwMDAwTEwsCisgICAgICAgICAuc2l6ZSAg ID0gMHg4MDAwMDAwMCwKKyAgICAgICAgfSwKK307CisKKyNlbmRpZgorCisvKgorICogICAg ICBoYXJkd2FyZSBzcGVjaWZpYyBhY2Nlc3MgdG8gY29udHJvbC1saW5lcworICoKKyAqICAg ICAgY3RybDoKKyAqICAgICAgTkFORF9OQ0U6IGJpdCAwIC0+IGJpdHMgNC0+NyAoMHhmMCkg aW4gU0VMRUNUIFJlZworICogICAgICBOQU5EX0NMRTogYml0IDEgLT4gYml0IDcgKDB4ODAp IGluIENPTlRST0wgUmVnCisgKiAgICAgIE5BTkRfQUxFOiBiaXQgMiAtPiBiaXQgNiAoMHg0 MCkgaW4gQ09OVFJPTCBSZWcKKyAqLworCitzdGF0aWMgdm9pZCBjcGNpNjIwMF9od2NvbnRy b2woc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjbWQsIHVuc2lnbmVkIGludCBjdHJsKQor eworCXN0cnVjdCBuYW5kX2NoaXAgKm5hbmRfY2hpcCA9IG10ZC0+cHJpdjsKKwlzdHJ1Y3Qg Y3BjaTYyMDBfbmFuZF9ob3N0ICpob3N0ID0gbmFuZF9jaGlwLT5wcml2OworCisJaWYgKGN0 cmwgJiBOQU5EX0NUUkxfQ0hBTkdFKSB7CisJCXVuc2lnbmVkIGNoYXIgYml0czsKKworCQli aXRzID0gcmVhZGIoaG9zdC0+aW9fY3RybCk7CisJCWJpdHMgJj0gMHgzZjsKKwkJYml0cyA9 IChjdHJsICYgTkFORF9DTEUpIDw8IDY7CisJCWJpdHMgfD0gKGN0cmwgJiBOQU5EX0FMRSkg PDwgNDsKKwkJd3JpdGViKGJpdHMsIGhvc3QtPmlvX2N0cmwpOworCX0KKworCWlmIChjbWQg IT0gTkFORF9DTURfTk9ORSkKKwkJd3JpdGViKGNtZCwgaG9zdC0+aW9fZGF0YSk7Cit9CisK K3N0YXRpYyB2b2lkIGNwY2k2MjAwX3NlbGVjdF9jaGlwKHN0cnVjdCBtdGRfaW5mbyAqbXRk LCBpbnQgY2hpcCkKK3sKKyAgICAgICAgc3RydWN0IG5hbmRfY2hpcCAqbmFuZF9jaGlwID0g bXRkLT5wcml2OworICAgICAgICBzdHJ1Y3QgY3BjaTYyMDBfbmFuZF9ob3N0ICpob3N0ID0g bmFuZF9jaGlwLT5wcml2OworICAgICAgICB1bnNpZ25lZCBjaGFyIHNlbDsKKworCWlmIChj aGlwID4gMykKKwkJcmV0dXJuOworCisgICAgICAgIHNlbCA9IHJlYWRiKGhvc3QtPmlvX3Nl bGVjdCk7CisgICAgICAgIHNlbCAmPSB+KENQQ0k2MjAwX05BTkRfRkxBU0hfQ0UxIHwgQ1BD STYyMDBfTkFORF9GTEFTSF9DRTIgfAorICAgICAgICAgICAgICAgICBDUENJNjIwMF9OQU5E X0ZMQVNIX0NFMyB8IENQQ0k2MjAwX05BTkRfRkxBU0hfQ0U0KTsKKworICAgICAgICBzd2l0 Y2ggKGNoaXApIHsKKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAgIHNlbCB8PSBD UENJNjIwMF9OQU5EX0ZMQVNIX0NFMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgY2FzZSAxOgorICAgICAgICAgICAgICAgIHNlbCB8PSBDUENJNjIwMF9OQU5EX0ZMQVNI X0NFMjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAyOgorICAgICAg ICAgICAgICAgIHNlbCB8PSBDUENJNjIwMF9OQU5EX0ZMQVNIX0NFMzsKKyAgICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAgIHNlbCB8PSBD UENJNjIwMF9OQU5EX0ZMQVNIX0NFNDsKKyAgICAgICAgICAgICAgICBicmVhazsKKwlkZWZh dWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisJaG9zdC0+Y2hpcF9l bmFibGUgPSBjaGlwOworICAgICAgICB3cml0ZWIoc2VsLCBob3N0LT5pb19zZWxlY3QpOwor fQorCitzdGF0aWMgaW50IGNwY2k2MjAwX2RldmljZV9yZWFkeShzdHJ1Y3QgbXRkX2luZm8g Km10ZCkKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kX2NoaXAgPSBtdGQtPnByaXY7CisJ c3RydWN0IGNwY2k2MjAwX25hbmRfaG9zdCAqaG9zdCA9IG5hbmRfY2hpcC0+cHJpdjsKKwl1 OCBpb19zdGF0dXM7CisJaW50IHN0YXR1czsKKworCWlvX3N0YXR1cyA9IHJlYWRiKGhvc3Qt PmlvX3N0YXR1cyk7CisKKyAgICAgICAgc3dpdGNoIChob3N0LT5jaGlwX2VuYWJsZSkgewor ICAgICAgICBjYXNlIDA6CisJCXN0YXR1cyA9IGlvX3N0YXR1cyAmIENQQ0k2MjAwX05BTkRf RkxBU0hfUkIxOyAKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxOgor CQlzdGF0dXMgPSBpb19zdGF0dXMgJiBDUENJNjIwMF9OQU5EX0ZMQVNIX1JCMjsgCisgICAg ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjoKKwkJc3RhdHVzID0gaW9fc3Rh dHVzICYgQ1BDSTYyMDBfTkFORF9GTEFTSF9SQjM7IAorICAgICAgICAgICAgICAgIGJyZWFr OworICAgICAgICBjYXNlIDM6CisJCXN0YXR1cyA9IGlvX3N0YXR1cyAmIENQQ0k2MjAwX05B TkRfRkxBU0hfUkI0OyAKKyAgICAgICAgICAgICAgICBicmVhazsKKwlkZWZhdWx0OgorCQlz dGF0dXMgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisJcmV0dXJu IHN0YXR1czsKK30KKworc3RhdGljIGludCBfX2luaXQgY3BjaTYyMDBfaW5pdF9vbmUoaW50 IGNoaXApCit7CisJc3RydWN0IGNwY2k2MjAwX25hbmRfaG9zdCAqaG9zdDsKKwlzdHJ1Y3Qg bXRkX2luZm8gKm10ZDsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kX2NoaXA7CisJdW5zaWdu ZWQgY2hhciByZWc7CisJaW50IGVyciA9IDA7CisjaWZkZWYgQ09ORklHX01URF9QQVJUSVRJ T05TCisJY29uc3QgY2hhciAqcGFydF90eXBlID0gMDsKKwlpbnQgbXRkX3BhcnRzX25iID0g MDsKKwlzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqbXRkX3BhcnRzID0gMDsKKyNlbmRpZgorCisJ LyogQWxsb2NhdGUgbWVtb3J5IGZvciBNVEQgZGV2aWNlIHN0cnVjdHVyZSBhbmQgcHJpdmF0 ZSBkYXRhICovCisJaG9zdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjcGNpNjIwMF9uYW5k X2hvc3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWhvc3QpIHsKKwkJcHJpbnRrKEtFUk5fV0FS TklORworCQkgICAgICAgImNwY2k2MjAwX25hbmQ6IFVuYWJsZSB0byBhbGxvY2F0ZSBkZXZp Y2Ugc3RydWN0dXJlLlxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWlmIChjaGlw ID09IDEpIHsKKwkJaG9zdC0+aW9fY3RybCA9IGlvcmVtYXAoQ1BDSTYyMDBfTkFORF9GTEFT SDFfQ09OVFJPTF9SRUcsIDEpOworCQlpZiAoIWhvc3QtPmlvX2N0cmwpIHsKKwkJCXByaW50 ayhLRVJOX0VSUiAiY3BjaTYyMDBfbmFuZDogVW5hYmxlIHRvIGlvcmVtYXAoKSIpOworCQkJ ZXJyID0gLUVOT01FTTsKKwkJCWdvdG8gaW5pdF9kaG9zdDsKKwkJfQorCQlob3N0LT5pb19z ZWxlY3QgPSBpb3JlbWFwKENQQ0k2MjAwX05BTkRfRkxBU0gxX1NFTEVDVF9SRUcsIDEpOwor CQlpZiAoIWhvc3QtPmlvX3NlbGVjdCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJjcGNpNjIw MF9uYW5kOiBVbmFibGUgdG8gaW9yZW1hcCgpIik7CisJCQllcnIgPSAtRU5PTUVNOworCQkJ Z290byBpbml0X2QxOworCQl9CisJCWhvc3QtPmlvX3N0YXR1cyA9IGlvcmVtYXAoQ1BDSTYy MDBfTkFORF9GTEFTSDFfU1RBVFVTX1JFRywgMSk7CisJCWlmICghaG9zdC0+aW9fc3RhdHVz KSB7CisJCQlwcmludGsoS0VSTl9FUlIgImNwY2k2MjAwX25hbmQ6IFVuYWJsZSB0byBpb3Jl bWFwKCkiKTsKKwkJCWVyciA9IC1FTk9NRU07CisJCQlnb3RvIGluaXRfZDI7CisJCX0KKwkJ aG9zdC0+aW9fZGF0YSA9IGlvcmVtYXAoQ1BDSTYyMDBfTkFORF9GTEFTSDFfREFUQV9SRUcs IDEpOworCQlpZiAoIWhvc3QtPmlvX2RhdGEpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiY3Bj aTYyMDBfbmFuZDogVW5hYmxlIHRvIGlvcmVtYXAoKSIpOworCQkJZXJyID0gLUVOT01FTTsK KwkJCWdvdG8gaW5pdF9kMzsKKwkJfQorCQljaGlwc1swXSA9IGhvc3Q7CisJfSBlbHNlIGlm IChjaGlwID09IDIpIHsKKwkJaG9zdC0+aW9fY3RybCA9IGlvcmVtYXAoQ1BDSTYyMDBfTkFO RF9GTEFTSDJfQ09OVFJPTF9SRUcsIDEpOworCQlpZiAoIWhvc3QtPmlvX2N0cmwpIHsKKwkJ CXByaW50ayhLRVJOX0VSUiAiY3BjaTYyMDBfbmFuZDogVW5hYmxlIHRvIGlvcmVtYXAoKSIp OworCQkJZXJyID0gLUVOT01FTTsKKwkJCWdvdG8gaW5pdF9kaG9zdDsKKwkJfQorCQlob3N0 LT5pb19zZWxlY3QgPSBpb3JlbWFwKENQQ0k2MjAwX05BTkRfRkxBU0gyX1NFTEVDVF9SRUcs IDEpOworCQlpZiAoIWhvc3QtPmlvX3NlbGVjdCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJj cGNpNjIwMF9uYW5kOiBVbmFibGUgdG8gaW9yZW1hcCgpIik7CisJCQllcnIgPSAtRU5PTUVN OworCQkJZ290byBpbml0X2QxOworCQl9CisJCWhvc3QtPmlvX3N0YXR1cyA9IGlvcmVtYXAo Q1BDSTYyMDBfTkFORF9GTEFTSDJfU1RBVFVTX1JFRywgMSk7CisJCWlmICghaG9zdC0+aW9f c3RhdHVzKSB7CisJCQlwcmludGsoS0VSTl9FUlIgImNwY2k2MjAwX25hbmQ6IFVuYWJsZSB0 byBpb3JlbWFwKCkiKTsKKwkJCWVyciA9IC1FTk9NRU07CisJCQlnb3RvIGluaXRfZDI7CisJ CX0KKwkJaG9zdC0+aW9fZGF0YSA9IGlvcmVtYXAoQ1BDSTYyMDBfTkFORF9GTEFTSDJfREFU QV9SRUcsIDEpOworCQlpZiAoIWhvc3QtPmlvX2RhdGEpIHsKKwkJCXByaW50ayhLRVJOX0VS UiAiY3BjaTYyMDBfbmFuZDogVW5hYmxlIHRvIGlvcmVtYXAoKSIpOworCQkJZXJyID0gLUVO T01FTTsKKwkJCWdvdG8gaW5pdF9kMzsKKwkJfQorCQljaGlwc1sxXSA9IGhvc3Q7CisJfSBl bHNlIHsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBpbml0X2Rob3N0OworCX0KKworCWhv c3QtPmNoaXAgPSBjaGlwOworCXJlZyA9IHJlYWRiKGhvc3QtPmlvX2N0cmwpOworCXJlZyAm PSB+Q1BDSTYyMDBfTkFORF9GTEFTSF9XUDsKKwl3cml0ZWIocmVnLCBob3N0LT5pb19jdHJs KTsKKwltdGQgPSAmaG9zdC0+bXRkOworCW5hbmRfY2hpcCA9ICZob3N0LT5uYW5kX2NoaXA7 CisKKwkvKiBMaW5rIHRoZSBwcml2YXRlIGRhdGEgd2l0aCB0aGUgTVREIHN0cnVjdHVyZSAq LworCW5hbmRfY2hpcC0+cHJpdiA9IGhvc3Q7CisJbXRkLT5wcml2ID0gbmFuZF9jaGlwOwor CW10ZC0+b3duZXIgPSBUSElTX01PRFVMRTsKKworCS8qIFNldCBhZGRyZXNzIG9mIE5BTkQg SU8gbGluZXMgKi8KKwluYW5kX2NoaXAtPklPX0FERFJfUiA9IGhvc3QtPmlvX2RhdGE7CisJ bmFuZF9jaGlwLT5JT19BRERSX1cgPSBob3N0LT5pb19kYXRhOworCisJbmFuZF9jaGlwLT5j bWRfY3RybCA9IGNwY2k2MjAwX2h3Y29udHJvbDsKKwluYW5kX2NoaXAtPnNlbGVjdF9jaGlw ID0gY3BjaTYyMDBfc2VsZWN0X2NoaXA7CisJbmFuZF9jaGlwLT5kZXZfcmVhZHkgPSBjcGNp NjIwMF9kZXZpY2VfcmVhZHk7CisJLyogV2UnbGwgbGV0IFlBRkZTIGRvIEVDQyovCisJbmFu ZF9jaGlwLT5lY2MubW9kZSA9IE5BTkRfRUNDX05PTkU7CisJbmFuZF9jaGlwLT5jaGlwX2Rl bGF5ID0gMjA7CisKKwkvKiBFbmFibGUgZm9yIGEgZmxhc2ggYmFzZWQgYmFkIGJsb2NrIHRh YmxlICovCisgCW5hbmRfY2hpcC0+b3B0aW9ucyA9IE5BTkRfU0FNU1VOR19MUF9PUFRJT05T IHwgTkFORF9OT19BVVRPSU5DUjsKKworCS8qIFNjYW4gdG8gZmluZCBleGlzdGVuY2Ugb2Yg dGhlIGRldmljZSAqLworCWlmIChuYW5kX3NjYW4obXRkLCA0KSkgeworCQllcnIgPSAtRU5Y SU87CisJCWdvdG8gaW5pdF9kNDsKKwl9CisKKyNpZmRlZiBDT05GSUdfTVREX1BBUlRJVElP TlMKKwlpZiAoY2hpcCA9PSAxKQorCQltdGQtPm5hbWUgPSAiQ1BDSTYyMDAgTkFORCBDaGlw IDEiOworCWVsc2UgaWYgKGNoaXAgPT0gMikKKwkJbXRkLT5uYW1lID0gIkNQQ0k2MjAwIE5B TkQgQ2hpcCAyIjsKKwkvKiBGaXJzdCBsb29rIGZvciBwYXJ0aXRpb25zIG9uIHRoZSBjb21t YW5kIGxpbmUsIHRoZXNlIHRha2UKKwkgKiB0YWtlIHByZWNlZGVuY2Ugb3ZlciBzdGF0aWNh bGx5IGRlZmluZWQgcGFydGl0aW9ucyAqLworCW10ZF9wYXJ0c19uYiA9IHBhcnNlX210ZF9w YXJ0aXRpb25zKG10ZCwgcGFydF9wcm9iZXMsICZtdGRfcGFydHMsIDApOworCWlmIChtdGRf cGFydHNfbmIgPiAwKQorCQlwYXJ0X3R5cGUgPSAiY29tbWFuZCBsaW5lIjsKKwllbHNlCisJ CW10ZF9wYXJ0c19uYiA9IDA7CisKKwlpZiAobXRkX3BhcnRzX25iID09IDApIHsKKwkJcGFy dF90eXBlID0gInN0YXRpYyI7CisJCWlmIChtdGQtPnNpemUgPT0gMHgxMDAwMDAwMDBMTCkg eworCQkJbXRkX3BhcnRzID0gcGFydGl0aW9uX2luZm9fNEc7CisJCQltdGRfcGFydHNfbmIg PSAyOworCQl9IGVsc2UgaWYgKG10ZC0+c2l6ZSA9PSAweDIwMDAwMDAwMExMKSB7CisJCQlt dGRfcGFydHMgPSBwYXJ0aXRpb25faW5mb184RzsKKwkJCW10ZF9wYXJ0c19uYiA9IDQ7CisJ CX0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICJj cGNpNjIwMF9uYW5kOiBVbmV4cGVjdGVkIEZsYXNoIFNpemVcbiIpOworICAgICAgICAgICAg ICAgICAgICAgICAgZXJyID0gLUVOWElPOworICAgICAgICAgICAgICAgICAgICAgICAgZ290 byBpbml0X2Q0OworICAgICAgICAgICAgICAgIH0KKwl9CisKKwkvKiBSZWdpc3RlciB0aGUg cGFydGl0aW9ucyAqLworCXByaW50ayhLRVJOX0lORk8gIlVzaW5nICVzIHBhcnRpdGlvbiBk ZWZpbml0aW9uXG4iLCBwYXJ0X3R5cGUpOworICAgICAgICBzd2l0Y2ggKG10ZC0+c2l6ZSkg eworICAgICAgICBjYXNlIDB4MTAwMDAwMDAwTEw6CisgICAgICAgICAgICAgICAgYWRkX210 ZF9wYXJ0aXRpb25zKG10ZCwgbXRkX3BhcnRzLCBtdGRfcGFydHNfbmIpOworICAgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDB4MjAwMDAwMDAwTEw6CisgICAgICAgICAg ICAgICAgYWRkX210ZF9wYXJ0aXRpb25zKG10ZCwgbXRkX3BhcnRzLCBtdGRfcGFydHNfbmIp OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisjZWxzZQorCWFkZF9tdGRf ZGV2aWNlKG10ZCk7CisjZW5kaWYKKworCWdvdG8gaW5pdF9yZXQ7CisKK2luaXRfZDQ6CisJ LyogU2V0IFdQICovCisJcmVnID0gcmVhZGIoaG9zdC0+aW9fY3RybCk7CisJcmVnIHw9IENQ Q0k2MjAwX05BTkRfRkxBU0hfV1A7CisJd3JpdGViKHJlZywgaG9zdC0+aW9fY3RybCk7CisJ aW91bm1hcChob3N0LT5pb19kYXRhKTsKK2luaXRfZDM6CisJaW91bm1hcChob3N0LT5pb19z dGF0dXMpOworaW5pdF9kMjoKKwlpb3VubWFwKGhvc3QtPmlvX3NlbGVjdCk7Citpbml0X2Qx OgorCWlvdW5tYXAoaG9zdC0+aW9fY3RybCk7Citpbml0X2Rob3N0OgorCWtmcmVlKGhvc3Qp OworaW5pdF9yZXQ6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBfX2luaXQgY3Bj aTYyMDBfaW5pdCh2b2lkKQoreworCWludCBlcnIgPSAtRU5YSU87CisJdm9pZCBfX2lvbWVt ICpwcmVnOworCisJcHJlZyA9IGlvcmVtYXAoQ1BDSTYyMDBfTkFORF9GTEFTSDFfUFJFU0VO Q0VfUkVHLCAxKTsKKwlpZiAoIXByZWcpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiY3Bj aTYyMDBfbmFuZDogaW9yZW1hcCBmYWlsZWRcbiIpOworCisJCXJldHVybiAtRU5PTUVNOwor CX0KKwlpZiAocmVhZGIocHJlZykgJiBDUENJNjIwMF9OQU5EX0ZMQVNIX0NQKSB7CisJCWVy ciA9IGNwY2k2MjAwX2luaXRfb25lKDEpOworCQlpZiAoZXJyKSB7CisJCQlpb3VubWFwKHBy ZWcpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCQluX3BoeXNpY2FsX2NoaXBzKys7CisJfQor CWlvdW5tYXAocHJlZyk7CisKKwlwcmVnID0gaW9yZW1hcChDUENJNjIwMF9OQU5EX0ZMQVNI Ml9QUkVTRU5DRV9SRUcsIDEpOworCWlmICghcHJlZykgeworCQlwcmludGsoS0VSTl9XQVJO SU5HICJjcGNpNjIwMF9uYW5kOiBpb3JlbWFwIGZhaWxlZFxuIik7CisKKwkJcmV0dXJuIC1F Tk9NRU07CisJfQorCWlmIChyZWFkYihwcmVnKSAmIENQQ0k2MjAwX05BTkRfRkxBU0hfQ1Ap IHsKKwkJZXJyID0gY3BjaTYyMDBfaW5pdF9vbmUoMik7CisJCWlmIChlcnIpIHsKKwkJCWlv dW5tYXAocHJlZyk7CisJCQlyZXR1cm4gZXJyOworCQl9CisJCW5fcGh5c2ljYWxfY2hpcHMr KzsKKwl9CisJaW91bm1hcChwcmVnKTsKKworCXJldHVybiBlcnI7Cit9CisKK21vZHVsZV9p bml0KGNwY2k2MjAwX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgY3BjaTYyMDBfY2xl YW51cCh2b2lkKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG5fcGh5c2ljYWxf Y2hpcHM7IGkrKykgeworCQlzdHJ1Y3QgY3BjaTYyMDBfbmFuZF9ob3N0ICpob3N0ID0gY2hp cHNbaV07CisJCXN0cnVjdCBtdGRfaW5mbyAqbXRkOworCQl1bnNpZ25lZCBjaGFyIHJlZzsK KworCQlpZiAoaG9zdCkgeworCQkJbXRkID0gJmhvc3QtPm10ZDsKKworCQkJaWYgKG10ZCkK KwkJCQluYW5kX3JlbGVhc2UobXRkKTsKKwkJCXJlZyA9IHJlYWRiKGhvc3QtPmlvX2N0cmwp OworCQkJcmVnIHw9IENQQ0k2MjAwX05BTkRfRkxBU0hfV1A7CisJCQl3cml0ZWIocmVnLCBo b3N0LT5pb19jdHJsKTsKKwkJCWlvdW5tYXAoaG9zdC0+aW9fZGF0YSk7CisJCQlpb3VubWFw KGhvc3QtPmlvX3N0YXR1cyk7CisJCQlpb3VubWFwKGhvc3QtPmlvX3NlbGVjdCk7CisJCQlp b3VubWFwKGhvc3QtPmlvX2N0cmwpOworCisJCQlrZnJlZShob3N0KTsKKwkJfQorCX0KKwly ZXR1cm47Cit9CisKK21vZHVsZV9leGl0KGNwY2k2MjAwX2NsZWFudXApOworCitNT0RVTEVf TElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJBaml0IFByZW0gKGFqaXQucHJlbUBl bWVyc29uLmNvbSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJOQU5EIGRyaXZlciBmb3IgdGhl IG5hbmQgY2hpcHMgb24gdGhlIENQQ0k2MjAwIik7CmRpZmYgLXUgLS1uZXctZmlsZSAtLXJl Y3Vyc2l2ZSBsaW51eC0yLjYuMjkuNi5vcmlnL2RyaXZlcnMvbXRkL25hbmQvS2NvbmZpZyBs aW51eC0yLjYuMjkuNi5tb2QvZHJpdmVycy9tdGQvbmFuZC9LY29uZmlnCi0tLSBsaW51eC0y LjYuMjkuNi5vcmlnL2RyaXZlcnMvbXRkL25hbmQvS2NvbmZpZwkyMDA5LTA3LTAyIDE2OjQx OjIwLjAwMDAwMDAwMCAtMDcwMAorKysgbGludXgtMi42LjI5LjYubW9kL2RyaXZlcnMvbXRk L25hbmQvS2NvbmZpZwkyMDA5LTA3LTIxIDExOjI4OjE4LjAwMDAwMDAwMCAtMDcwMApAQCAt NTAsNiArNTAsMjcgQEAKIAkgIFRoaXMgZW5hYmxlcyB0aGUgZHJpdmVyIGZvciB0aGUgQ2ly cnVzIExvZ2ljIEVCRDczMTIgZXZhbHVhdGlvbgogCSAgYm9hcmQgdG8gYWNjZXNzIHRoZSBv bmJvYXJkIE5BTkQgRmxhc2guCiAKK2NvbmZpZyBNVERfTkFORF9NVk1FNzEwMAorICAgICAg ICB0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgdGhlIE1WTUU3MTAwIGJvYXJkIgorICAgICAgICBk ZXBlbmRzIG9uIE1URF9OQU5EICYmIE1WTUU3MTAwCisgICAgICAgIGhlbHAKKyAgICAgICAg ICBUaGlzIGVuYWJsZXMgdGhlIGRyaXZlciBmb3IgdGhlIG9uYm9hcmQgTkFORCBmbGFzaCBv bgorICAgICAgICAgIHRoZSBFbWVyc29uIE5ldHdvcmsgUG93ZXIgTVZNRTcxMDAgYm9hcmQu CisKK2NvbmZpZyBNVERfTkFORF9NVk1FNDEwMAorICAgICAgICB0cmlzdGF0ZSAiU3VwcG9y dCBmb3IgdGhlIE1WTUU0MTAwIGJvYXJkIgorICAgICAgICBkZXBlbmRzIG9uIE1URF9OQU5E ICYmIE1WTUU0MTAwCisgICAgICAgIGhlbHAKKyAgICAgICAgICBUaGlzIGVuYWJsZXMgdGhl IGRyaXZlciBmb3IgdGhlIG9uYm9hcmQgTkFORCBmbGFzaCBvbgorICAgICAgICAgIHRoZSBF bWVyc29uIE5ldHdvcmsgUG93ZXIgTVZNRTQxMDAgYm9hcmQuCisKK2NvbmZpZyBNVERfTkFO RF9DUENJNjIwMAorICAgICAgICB0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgdGhlIENQQ0k2MjAw IGJvYXJkIgorICAgICAgICBkZXBlbmRzIG9uIE1URF9OQU5EICYmIENQQ0k2MjAwCisgICAg ICAgIGhlbHAKKyAgICAgICAgICBUaGlzIGVuYWJsZXMgdGhlIGRyaXZlciBmb3IgdGhlIG9u Ym9hcmQgTkFORCBmbGFzaCBvbgorICAgICAgICAgIHRoZSBFbWVyc29uIE5ldHdvcmsgUG93 ZXIgQ1BDSTYyMDAgYm9hcmQuCisKIGNvbmZpZyBNVERfTkFORF9IMTkwMAogCXRyaXN0YXRl ICJpUEFRIEgxOTAwIGZsYXNoIgogCWRlcGVuZHMgb24gQVJDSF9QWEEgJiYgTVREX1BBUlRJ VElPTlMKZGlmZiAtdSAtLW5ldy1maWxlIC0tcmVjdXJzaXZlIGxpbnV4LTIuNi4yOS42Lm9y aWcvZHJpdmVycy9tdGQvbmFuZC9NYWtlZmlsZSBsaW51eC0yLjYuMjkuNi5tb2QvZHJpdmVy cy9tdGQvbmFuZC9NYWtlZmlsZQotLS0gbGludXgtMi42LjI5LjYub3JpZy9kcml2ZXJzL210 ZC9uYW5kL01ha2VmaWxlCTIwMDktMDctMDIgMTY6NDE6MjAuMDAwMDAwMDAwIC0wNzAwCisr KyBsaW51eC0yLjYuMjkuNi5tb2QvZHJpdmVycy9tdGQvbmFuZC9NYWtlZmlsZQkyMDA5LTA3 LTIxIDExOjI4OjE4LjAwMDAwMDAwMCAtMDcwMApAQCAtMTAsNiArMTAsOSBAQAogb2JqLSQo Q09ORklHX01URF9OQU5EX0FNU19ERUxUQSkJKz0gYW1zLWRlbHRhLm8KIG9iai0kKENPTkZJ R19NVERfTkFORF9BVVRDUFUxMikJCSs9IGF1dGNwdTEyLm8KIG9iai0kKENPTkZJR19NVERf TkFORF9FREI3MzEyKQkJKz0gZWRiNzMxMi5vCitvYmotJChDT05GSUdfTVREX05BTkRfTVZN RTcxMDApICAgICAgICAgKz0gbXZtZTcxMDBfbmFuZC5vCitvYmotJChDT05GSUdfTVREX05B TkRfTVZNRTQxMDApICAgICAgICAgKz0gbXZtZTQxMDBfbmFuZC5vCitvYmotJChDT05GSUdf TVREX05BTkRfQ1BDSTYyMDApICAgICAgICAgKz0gY3BjaTYyMDBfbmFuZC5vCiBvYmotJChD T05GSUdfTVREX05BTkRfQVUxNTUwKQkJKz0gYXUxNTUwbmQubwogb2JqLSQoQ09ORklHX01U RF9OQU5EX0JGNVhYKQkJKz0gYmY1eHhfbmFuZC5vCiBvYmotJChDT05GSUdfTVREX05BTkRf UFBDSEFNRUxFT05FVkIpCSs9IHBwY2hhbWVsZW9uZXZiLm8KZGlmZiAtdSAtLW5ldy1maWxl IC0tcmVjdXJzaXZlIGxpbnV4LTIuNi4yOS42Lm9yaWcvZHJpdmVycy9tdGQvbmFuZC9tdm1l NDEwMF9uYW5kLmMgbGludXgtMi42LjI5LjYubW9kL2RyaXZlcnMvbXRkL25hbmQvbXZtZTQx MDBfbmFuZC5jCi0tLSBsaW51eC0yLjYuMjkuNi5vcmlnL2RyaXZlcnMvbXRkL25hbmQvbXZt ZTQxMDBfbmFuZC5jCTE5NjktMTItMzEgMTc6MDA6MDAuMDAwMDAwMDAwIC0wNzAwCisrKyBs aW51eC0yLjYuMjkuNi5tb2QvZHJpdmVycy9tdGQvbmFuZC9tdm1lNDEwMF9uYW5kLmMJMjAw OS0wNy0yMSAxMToyODoxOC4wMDAwMDAwMDAgLTA3MDAKQEAgLTAsMCArMSw0MjMgQEAKKy8q CisgKiBkcml2ZXJzL210ZC9uYW5kL212bWU0MTAwX25hbmQuYworICoKKyAqIEEgZ2x1ZSBk cml2ZXIgZm9yIHRoZSBOQU5EIGNoaXBzIG9uIHRoZSBNVk1FNDEwMCBib2FyZAorICoKKyAq IEF1dGhvcjogQWppdCBQcmVtIChhaml0LnByZW1AZW1lcnNvbi5jb20pCisgKiBDb3B5cmln aHQgMjAwOCBFbWVyc29uIE5ldHdvcmsgUG93ZXIgRW1iZWRkZWQgQ29tcHV0aW5nIEluYy4K KyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBi eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8 bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51 eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4 L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9t dGQvbmFuZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kX2VjYy5oPgorI2luY2x1ZGUg PGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNs dWRlIDxwbGF0Zm9ybXMvODV4eC9tdm1lNDEwMC5oPgorCitzdGF0aWMgaW50IG5fcGh5c2lj YWxfY2hpcHM7CisKK3N0cnVjdCBtdm1lNDEwMF9uYW5kX2hvc3QgeworCXN0cnVjdCBuYW5k X2NoaXAgbmFuZF9jaGlwOworCXN0cnVjdCBtdGRfaW5mbyBtdGQ7CisJdm9pZCBfX2lvbWVt ICppb19jdHJsOworCXZvaWQgX19pb21lbSAqaW9fc2VsZWN0OworCXZvaWQgX19pb21lbSAq aW9fc3RhdHVzOworCXZvaWQgX19pb21lbSAqaW9fZGF0YTsKKwlpbnQgY2hpcDsKKwlpbnQg Y2hpcF9lbmFibGU7Cit9OworCitzdGF0aWMgc3RydWN0IG12bWU0MTAwX25hbmRfaG9zdCAq Y2hpcHNbMl07CisKKyNpZmRlZiBDT05GSUdfTVREX1BBUlRJVElPTlMKK3N0YXRpYyBjb25z dCBjaGFyICpwYXJ0X3Byb2Jlc1tdID0geyAiY21kbGluZXBhcnQiLCBOVUxMIH07CisKKy8q CisgKiBEZWZpbmUgc3RhdGljIHBhcnRpdGlvbnMgZm9yIGZsYXNoIGRldmljZQorICovCitz dGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gcGFydGl0aW9uX2luZm9fNEdbXSA9IHsKKwl7 CisJIC5uYW1lID0gIkxpbnV4IFlBRkZTIDEiLAorCSAub2Zmc2V0ID0gMHgwMDAwMDAwMCwK KwkgLnNpemUgICA9IDB4ODAwMDAwMDAsCisJfSwgCisJeworCSAubmFtZSA9ICJMaW51eCBZ QUZGUyAyIiwKKwkgLm9mZnNldCA9IDB4ODAwMDAwMDAsCisJIC5zaXplICAgPSAweDgwMDAw MDAwLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gcGFydGl0aW9u X2luZm9fOEdbXSA9IHsKKyAgICAgICAgeworICAgICAgICAgLm5hbWUgPSAiTGludXggWUFG RlMgMSIsCisgICAgICAgICAub2Zmc2V0ID0gMHgwMDAwMDAwMCwKKyAgICAgICAgIC5zaXpl ICAgPSAweDgwMDAwMDAwLAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAubmFt ZSA9ICJMaW51eCBZQUZGUyAyIiwKKyAgICAgICAgIC5vZmZzZXQgPSAweDgwMDAwMDAwLAor ICAgICAgICAgLnNpemUgICA9IDB4ODAwMDAwMDAsCisgICAgICAgIH0sCisgICAgICAgIHsK KyAgICAgICAgIC5uYW1lID0gIkxpbnV4IFlBRkZTIDMiLAorICAgICAgICAgLm9mZnNldCA9 IDB4MTAwMDAwMDAwTEwsCisgICAgICAgICAuc2l6ZSAgID0gMHg4MDAwMDAwMCwKKyAgICAg ICAgfSwKKyAgICAgICAgeworICAgICAgICAgLm5hbWUgPSAiTGludXggWUFGRlMgNCIsCisg ICAgICAgICAub2Zmc2V0ID0gMHgxODAwMDAwMDBMTCwKKyAgICAgICAgIC5zaXplICAgPSAw eDgwMDAwMDAwLAorICAgICAgICB9LAorfTsKKworI2VuZGlmCisKKy8qCisgKiAgICAgIGhh cmR3YXJlIHNwZWNpZmljIGFjY2VzcyB0byBjb250cm9sLWxpbmVzCisgKgorICogICAgICBj dHJsOgorICogICAgICBOQU5EX05DRTogYml0IDAgLT4gYml0cyA0LT43ICgweGYwKSBpbiBT RUxFQ1QgUmVnCisgKiAgICAgIE5BTkRfQ0xFOiBiaXQgMSAtPiBiaXQgNyAoMHg4MCkgaW4g Q09OVFJPTCBSZWcKKyAqICAgICAgTkFORF9BTEU6IGJpdCAyIC0+IGJpdCA2ICgweDQwKSBp biBDT05UUk9MIFJlZworICovCisKK3N0YXRpYyB2b2lkIG12bWU0MTAwX2h3Y29udHJvbChz dHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCwgdW5zaWduZWQgaW50IGN0cmwpCit7CisJ c3RydWN0IG5hbmRfY2hpcCAqbmFuZF9jaGlwID0gbXRkLT5wcml2OworCXN0cnVjdCBtdm1l NDEwMF9uYW5kX2hvc3QgKmhvc3QgPSBuYW5kX2NoaXAtPnByaXY7CisKKwlpZiAoY3RybCAm IE5BTkRfQ1RSTF9DSEFOR0UpIHsKKwkJdW5zaWduZWQgY2hhciBiaXRzOworCisJCWJpdHMg PSByZWFkYihob3N0LT5pb19jdHJsKTsKKwkJYml0cyAmPSAweDNmOworCQliaXRzID0gKGN0 cmwgJiBOQU5EX0NMRSkgPDwgNjsKKwkJYml0cyB8PSAoY3RybCAmIE5BTkRfQUxFKSA8PCA0 OworCQl3cml0ZWIoYml0cywgaG9zdC0+aW9fY3RybCk7CisJfQorCisJaWYgKGNtZCAhPSBO QU5EX0NNRF9OT05FKQorCQl3cml0ZWIoY21kLCBob3N0LT5pb19kYXRhKTsKK30KKworc3Rh dGljIHZvaWQgbXZtZTQxMDBfc2VsZWN0X2NoaXAoc3RydWN0IG10ZF9pbmZvICptdGQsIGlu dCBjaGlwKQoreworICAgICAgICBzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kX2NoaXAgPSBtdGQt PnByaXY7CisgICAgICAgIHN0cnVjdCBtdm1lNDEwMF9uYW5kX2hvc3QgKmhvc3QgPSBuYW5k X2NoaXAtPnByaXY7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgc2VsOworCisJaWYgKGNoaXAg PiAzKQorCQlyZXR1cm47CisKKyAgICAgICAgc2VsID0gcmVhZGIoaG9zdC0+aW9fc2VsZWN0 KTsKKyAgICAgICAgc2VsICY9IH4oTVZNRTQxMDBfTkFORF9GTEFTSF9DRTEgfCBNVk1FNDEw MF9OQU5EX0ZMQVNIX0NFMiB8CisgICAgICAgICAgICAgICAgIE1WTUU0MTAwX05BTkRfRkxB U0hfQ0UzIHwgTVZNRTQxMDBfTkFORF9GTEFTSF9DRTQpOworCisgICAgICAgIHN3aXRjaCAo Y2hpcCkgeworICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgc2VsIHw9IE1WTUU0 MTAwX05BTkRfRkxBU0hfQ0UxOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj YXNlIDE6CisgICAgICAgICAgICAgICAgc2VsIHw9IE1WTUU0MTAwX05BTkRfRkxBU0hfQ0Uy OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDI6CisgICAgICAgICAg ICAgICAgc2VsIHw9IE1WTUU0MTAwX05BTkRfRkxBU0hfQ0UzOworICAgICAgICAgICAgICAg IGJyZWFrOworICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAgc2VsIHw9IE1WTUU0 MTAwX05BTkRfRkxBU0hfQ0U0OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBk ZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisJaG9zdC0+Y2hp cF9lbmFibGUgPSBjaGlwOworICAgICAgICB3cml0ZWIoc2VsLCBob3N0LT5pb19zZWxlY3Qp OworfQorCitzdGF0aWMgaW50IG12bWU0MTAwX2RldmljZV9yZWFkeShzdHJ1Y3QgbXRkX2lu Zm8gKm10ZCkKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kX2NoaXAgPSBtdGQtPnByaXY7 CisJc3RydWN0IG12bWU0MTAwX25hbmRfaG9zdCAqaG9zdCA9IG5hbmRfY2hpcC0+cHJpdjsK Kwl1OCBpb19zdGF0dXM7CisJaW50IHN0YXR1czsKKworCWlvX3N0YXR1cyA9IHJlYWRiKGhv c3QtPmlvX3N0YXR1cyk7CisKKwlzd2l0Y2ggKGhvc3QtPmNoaXBfZW5hYmxlKSB7CisJY2Fz ZSAwOgorCQlzdGF0dXMgPSBpb19zdGF0dXMgJiBNVk1FNDEwMF9OQU5EX0ZMQVNIX1JCMTsK KwkJYnJlYWs7CisJY2FzZSAxOgorCQlzdGF0dXMgPSBpb19zdGF0dXMgJiBNVk1FNDEwMF9O QU5EX0ZMQVNIX1JCMjsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlzdGF0dXMgPSBpb19zdGF0 dXMgJiBNVk1FNDEwMF9OQU5EX0ZMQVNIX1JCMzsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlz dGF0dXMgPSBpb19zdGF0dXMgJiBNVk1FNDEwMF9OQU5EX0ZMQVNIX1JCNDsKKwkJYnJlYWs7 CisJZGVmYXVsdDoKKwkJc3RhdHVzID0gMTsKKwkJYnJlYWs7CisgICAgICAgIH0KKwlyZXR1 cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IF9faW5pdCBtdm1lNDEwMF9pbml0X29uZShp bnQgY2hpcCkKK3sKKwlzdHJ1Y3QgbXZtZTQxMDBfbmFuZF9ob3N0ICpob3N0OworCXN0cnVj dCBtdGRfaW5mbyAqbXRkOworCXN0cnVjdCBuYW5kX2NoaXAgKm5hbmRfY2hpcDsKKwl1bnNp Z25lZCBjaGFyIHJlZzsKKwlpbnQgZXJyID0gMDsKKyNpZmRlZiBDT05GSUdfTVREX1BBUlRJ VElPTlMKKwljb25zdCBjaGFyICpwYXJ0X3R5cGUgPSAwOworCWludCBtdGRfcGFydHNfbmIg PSAwOworCXN0cnVjdCBtdGRfcGFydGl0aW9uICptdGRfcGFydHMgPSAwOworI2VuZGlmCisK KwkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIE1URCBkZXZpY2Ugc3RydWN0dXJlIGFuZCBwcml2 YXRlIGRhdGEgKi8KKwlob3N0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG12bWU0MTAwX25h bmRfaG9zdCksIEdGUF9LRVJORUwpOworCWlmICghaG9zdCkgeworCQlwcmludGsoS0VSTl9X QVJOSU5HCisJCSAgICAgICAibXZtZTQxMDBfbmFuZDogVW5hYmxlIHRvIGFsbG9jYXRlIGRl dmljZSBzdHJ1Y3R1cmUuXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJaWYgKGNo aXAgPT0gMSkgeworCQlob3N0LT5pb19jdHJsID0gaW9yZW1hcChNVk1FNDEwMF9OQU5EX0ZM QVNIMV9DT05UUk9MX1JFRywgMSk7CisJCWlmICghaG9zdC0+aW9fY3RybCkgeworCQkJcHJp bnRrKEtFUk5fRVJSICJtdm1lNDEwMF9uYW5kOiBVbmFibGUgdG8gaW9yZW1hcCgpIik7CisJ CQllcnIgPSAtRU5PTUVNOworCQkJZ290byBpbml0X2Rob3N0OworCQl9CisJCWhvc3QtPmlv X3NlbGVjdCA9IGlvcmVtYXAoTVZNRTQxMDBfTkFORF9GTEFTSDFfU0VMRUNUX1JFRywgMSk7 CisJCWlmICghaG9zdC0+aW9fc2VsZWN0KSB7CisJCQlwcmludGsoS0VSTl9FUlIgIm12bWU0 MTAwX25hbmQ6IFVuYWJsZSB0byBpb3JlbWFwKCkiKTsKKwkJCWVyciA9IC1FTk9NRU07CisJ CQlnb3RvIGluaXRfZDE7CisJCX0KKwkJaG9zdC0+aW9fc3RhdHVzID0gaW9yZW1hcChNVk1F NDEwMF9OQU5EX0ZMQVNIMV9TVEFUVVNfUkVHLCAxKTsKKwkJaWYgKCFob3N0LT5pb19zdGF0 dXMpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAibXZtZTQxMDBfbmFuZDogVW5hYmxlIHRvIGlv cmVtYXAoKSIpOworCQkJZXJyID0gLUVOT01FTTsKKwkJCWdvdG8gaW5pdF9kMjsKKwkJfQor CQlob3N0LT5pb19kYXRhID0gaW9yZW1hcChNVk1FNDEwMF9OQU5EX0ZMQVNIMV9EQVRBX1JF RywgMSk7CisJCWlmICghaG9zdC0+aW9fZGF0YSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJt dm1lNDEwMF9uYW5kOiBVbmFibGUgdG8gaW9yZW1hcCgpIik7CisJCQllcnIgPSAtRU5PTUVN OworCQkJZ290byBpbml0X2QzOworCQl9CisJCWNoaXBzWzBdID0gaG9zdDsKKwl9IGVsc2Ug aWYgKGNoaXAgPT0gMikgeworCQlob3N0LT5pb19jdHJsID0gaW9yZW1hcChNVk1FNDEwMF9O QU5EX0ZMQVNIMl9DT05UUk9MX1JFRywgMSk7CisJCWlmICghaG9zdC0+aW9fY3RybCkgewor CQkJcHJpbnRrKEtFUk5fRVJSICJtdm1lNDEwMF9uYW5kOiBVbmFibGUgdG8gaW9yZW1hcCgp Iik7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byBpbml0X2Rob3N0OworCQl9CisJCWhv c3QtPmlvX3NlbGVjdCA9IGlvcmVtYXAoTVZNRTQxMDBfTkFORF9GTEFTSDJfU0VMRUNUX1JF RywgMSk7CisJCWlmICghaG9zdC0+aW9fc2VsZWN0KSB7CisJCQlwcmludGsoS0VSTl9FUlIg Im12bWU0MTAwX25hbmQ6IFVuYWJsZSB0byBpb3JlbWFwKCkiKTsKKwkJCWVyciA9IC1FTk9N RU07CisJCQlnb3RvIGluaXRfZDE7CisJCX0KKwkJaG9zdC0+aW9fc3RhdHVzID0gaW9yZW1h cChNVk1FNDEwMF9OQU5EX0ZMQVNIMl9TVEFUVVNfUkVHLCAxKTsKKwkJaWYgKCFob3N0LT5p b19zdGF0dXMpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAibXZtZTQxMDBfbmFuZDogVW5hYmxl IHRvIGlvcmVtYXAoKSIpOworCQkJZXJyID0gLUVOT01FTTsKKwkJCWdvdG8gaW5pdF9kMjsK KwkJfQorCQlob3N0LT5pb19kYXRhID0gaW9yZW1hcChNVk1FNDEwMF9OQU5EX0ZMQVNIMl9E QVRBX1JFRywgMSk7CisJCWlmICghaG9zdC0+aW9fZGF0YSkgeworCQkJcHJpbnRrKEtFUk5f RVJSICJtdm1lNDEwMF9uYW5kOiBVbmFibGUgdG8gaW9yZW1hcCgpIik7CisJCQllcnIgPSAt RU5PTUVNOworCQkJZ290byBpbml0X2QzOworCQl9CisJCWNoaXBzWzFdID0gaG9zdDsKKwl9 IGVsc2UgeworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIGluaXRfZGhvc3Q7CisJfQorCisJ aG9zdC0+Y2hpcCA9IGNoaXA7CisJcmVnID0gcmVhZGIoaG9zdC0+aW9fY3RybCk7CisJcmVn ICY9IH5NVk1FNDEwMF9OQU5EX0ZMQVNIX1dQOworCXdyaXRlYihyZWcsIGhvc3QtPmlvX2N0 cmwpOworCW10ZCA9ICZob3N0LT5tdGQ7CisJbmFuZF9jaGlwID0gJmhvc3QtPm5hbmRfY2hp cDsKKworCS8qIExpbmsgdGhlIHByaXZhdGUgZGF0YSB3aXRoIHRoZSBNVEQgc3RydWN0dXJl ICovCisJbmFuZF9jaGlwLT5wcml2ID0gaG9zdDsKKwltdGQtPnByaXYgPSBuYW5kX2NoaXA7 CisJbXRkLT5vd25lciA9IFRISVNfTU9EVUxFOworCisJLyogU2V0IGFkZHJlc3Mgb2YgTkFO RCBJTyBsaW5lcyAqLworCW5hbmRfY2hpcC0+SU9fQUREUl9SID0gaG9zdC0+aW9fZGF0YTsK KwluYW5kX2NoaXAtPklPX0FERFJfVyA9IGhvc3QtPmlvX2RhdGE7CisKKwluYW5kX2NoaXAt PmNtZF9jdHJsID0gbXZtZTQxMDBfaHdjb250cm9sOworCW5hbmRfY2hpcC0+c2VsZWN0X2No aXAgPSBtdm1lNDEwMF9zZWxlY3RfY2hpcDsKKwluYW5kX2NoaXAtPmRldl9yZWFkeSA9IG12 bWU0MTAwX2RldmljZV9yZWFkeTsKKwkvKiBXZSdsbCBsZXQgWUFGRlMgZG8gRUNDKi8KKwlu YW5kX2NoaXAtPmVjYy5tb2RlID0gTkFORF9FQ0NfTk9ORTsKKwluYW5kX2NoaXAtPmNoaXBf ZGVsYXkgPSAyMDsKKworCS8qIEVuYWJsZSBmb3IgYSBmbGFzaCBiYXNlZCBiYWQgYmxvY2sg dGFibGUgKi8KKwluYW5kX2NoaXAtPm9wdGlvbnMgPSBOQU5EX1NBTVNVTkdfTFBfT1BUSU9O UyB8IE5BTkRfTk9fQVVUT0lOQ1I7CisKKwkvKiBTY2FuIHRvIGZpbmQgZXhpc3RlbmNlIG9m IHRoZSBkZXZpY2UgKi8KKwlpZiAobmFuZF9zY2FuKG10ZCwgNCkpIHsKKwkJZXJyID0gLUVO WElPOworCQlnb3RvIGluaXRfZDQ7CisJfQorCisjaWZkZWYgQ09ORklHX01URF9QQVJUSVRJ T05TCisJaWYgKGNoaXAgPT0gMSkKKwkJbXRkLT5uYW1lID0gIk1WTUU0MTAwIE5BTkQgQ2hp cCAxIjsKKwllbHNlIGlmIChjaGlwID09IDIpCisJCW10ZC0+bmFtZSA9ICJNVk1FNDEwMCBO QU5EIENoaXAgMiI7CisJLyogRmlyc3QgbG9vayBmb3IgcGFydGl0aW9ucyBvbiB0aGUgY29t bWFuZCBsaW5lLCB0aGVzZSB0YWtlCisJICogdGFrZSBwcmVjZWRlbmNlIG92ZXIgc3RhdGlj YWxseSBkZWZpbmVkIHBhcnRpdGlvbnMgKi8KKwltdGRfcGFydHNfbmIgPSBwYXJzZV9tdGRf cGFydGl0aW9ucyhtdGQsIHBhcnRfcHJvYmVzLCAmbXRkX3BhcnRzLCAwKTsKKwlpZiAobXRk X3BhcnRzX25iID4gMCkKKwkJcGFydF90eXBlID0gImNvbW1hbmQgbGluZSI7CisJZWxzZQor CQltdGRfcGFydHNfbmIgPSAwOworCisJaWYgKG10ZF9wYXJ0c19uYiA9PSAwKSB7CisJCXBh cnRfdHlwZSA9ICJzdGF0aWMiOworICAgICAgICAgICAgICAgIGlmIChtdGQtPnNpemUgPT0g MHgxMDAwMDAwMDBMTCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbXRkX3BhcnRzID0g cGFydGl0aW9uX2luZm9fNEc7CisgICAgICAgICAgICAgICAgICAgICAgICBtdGRfcGFydHNf bmIgPSAyOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobXRkLT5zaXplID09IDB4MjAw MDAwMDAwTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG10ZF9wYXJ0cyA9IHBhcnRp dGlvbl9pbmZvXzhHOworICAgICAgICAgICAgICAgICAgICAgICAgbXRkX3BhcnRzX25iID0g NDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAg cHJpbnRrKEtFUk5fSU5GTyAibXZtZTQxMDBfbmFuZDogVW5leHBlY3RlZCBGbGFzaCBTaXpl XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IC1FTlhJTzsKKyAgICAgICAg ICAgICAgICAgICAgICAgIGdvdG8gaW5pdF9kNDsKKyAgICAgICAgICAgICAgICB9CisJfQor CisJLyogUmVnaXN0ZXIgdGhlIHBhcnRpdGlvbnMgKi8KKwlwcmludGsoS0VSTl9JTkZPICJV c2luZyAlcyBwYXJ0aXRpb24gZGVmaW5pdGlvblxuIiwgcGFydF90eXBlKTsKKyAgICAgICAg c3dpdGNoIChtdGQtPnNpemUpIHsKKyAgICAgICAgY2FzZSAweDEwMDAwMDAwMExMOgorICAg ICAgICAgICAgICAgIGFkZF9tdGRfcGFydGl0aW9ucyhtdGQsIG10ZF9wYXJ0cywgbXRkX3Bh cnRzX25iKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAweDIwMDAw MDAwMExMOgorICAgICAgICAgICAgICAgIGFkZF9tdGRfcGFydGl0aW9ucyhtdGQsIG10ZF9w YXJ0cywgbXRkX3BhcnRzX25iKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg fQorI2Vsc2UKKwlhZGRfbXRkX2RldmljZShtdGQpOworI2VuZGlmCisKKwlnb3RvIGluaXRf cmV0OworCitpbml0X2Q0OgorICAgICAgICAvKiBTZXQgV1AgKi8KKyAgICAgICAgcmVnID0g cmVhZGIoaG9zdC0+aW9fY3RybCk7CisgICAgICAgIHJlZyB8PSBNVk1FNDEwMF9OQU5EX0ZM QVNIX1dQOworICAgICAgICB3cml0ZWIocmVnLCBob3N0LT5pb19jdHJsKTsKKwlpb3VubWFw KGhvc3QtPmlvX2RhdGEpOworaW5pdF9kMzoKKwlpb3VubWFwKGhvc3QtPmlvX3N0YXR1cyk7 Citpbml0X2QyOgorCWlvdW5tYXAoaG9zdC0+aW9fc2VsZWN0KTsKK2luaXRfZDE6CisJaW91 bm1hcChob3N0LT5pb19jdHJsKTsKK2luaXRfZGhvc3Q6CisJa2ZyZWUoaG9zdCk7Citpbml0 X3JldDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9faW5pdCBtdm1lNDEwMF9p bml0KHZvaWQpCit7CisJaW50IGVyciA9IC1FTlhJTzsKKwl2b2lkIF9faW9tZW0gKnByZWc7 CisKKwlwcmVnID0gaW9yZW1hcChNVk1FNDEwMF9OQU5EX0ZMQVNIMV9QUkVTRU5DRV9SRUcs IDEpOworCWlmICghcHJlZykgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJtdm1lNDEwMF9u YW5kOiBpb3JlbWFwIGZhaWxlZFxuIik7CisKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWlm IChyZWFkYihwcmVnKSAmIE1WTUU0MTAwX05BTkRfRkxBU0hfQ1ApIHsKKwkJZXJyID0gbXZt ZTQxMDBfaW5pdF9vbmUoMSk7CisJCWlmIChlcnIpIHsKKwkJCWlvdW5tYXAocHJlZyk7CisJ CQlyZXR1cm4gZXJyOworCQl9CisJCW5fcGh5c2ljYWxfY2hpcHMrKzsKKwl9CisJaW91bm1h cChwcmVnKTsKKworCXByZWcgPSBpb3JlbWFwKE1WTUU0MTAwX05BTkRfRkxBU0gyX1BSRVNF TkNFX1JFRywgMSk7CisJaWYgKCFwcmVnKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIm12 bWU0MTAwX25hbmQ6IGlvcmVtYXAgZmFpbGVkXG4iKTsKKworCQlyZXR1cm4gLUVOT01FTTsK Kwl9CisJaWYgKHJlYWRiKHByZWcpICYgTVZNRTQxMDBfTkFORF9GTEFTSF9DUCkgeworCQll cnIgPSBtdm1lNDEwMF9pbml0X29uZSgyKTsKKwkJaWYgKGVycikgeworCQkJaW91bm1hcChw cmVnKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwkJbl9waHlzaWNhbF9jaGlwcysrOworCX0K Kwlpb3VubWFwKHByZWcpOworCisJcmV0dXJuIGVycjsKK30KKworbW9kdWxlX2luaXQobXZt ZTQxMDBfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtdm1lNDEwMF9jbGVhbnVwKHZv aWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbl9waHlzaWNhbF9jaGlwczsg aSsrKSB7CisJCXN0cnVjdCBtdm1lNDEwMF9uYW5kX2hvc3QgKmhvc3QgPSBjaGlwc1tpXTsK KwkJc3RydWN0IG10ZF9pbmZvICptdGQ7CisJCXVuc2lnbmVkIGNoYXIgcmVnOworCisJCWlm IChob3N0KSB7CisJCQltdGQgPSAmaG9zdC0+bXRkOworCisJCQlpZiAobXRkKQorCQkJCW5h bmRfcmVsZWFzZShtdGQpOworCQkJcmVnID0gcmVhZGIoaG9zdC0+aW9fY3RybCk7CisJCQly ZWcgfD0gTVZNRTQxMDBfTkFORF9GTEFTSF9XUDsKKwkJCXdyaXRlYihyZWcsIGhvc3QtPmlv X2N0cmwpOworCQkJaW91bm1hcChob3N0LT5pb19kYXRhKTsKKwkJCWlvdW5tYXAoaG9zdC0+ aW9fc3RhdHVzKTsKKwkJCWlvdW5tYXAoaG9zdC0+aW9fc2VsZWN0KTsKKwkJCWlvdW5tYXAo aG9zdC0+aW9fY3RybCk7CisKKwkJCWtmcmVlKGhvc3QpOworCQl9CisJfQorCXJldHVybjsK K30KKworbW9kdWxlX2V4aXQobXZtZTQxMDBfY2xlYW51cCk7CisKK01PRFVMRV9MSUNFTlNF KCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkFqaXQgUHJlbSAoYWppdC5wcmVtQGVtZXJzb24u Y29tIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk5BTkQgZHJpdmVyIGZvciB0aGUgbmFuZCBj aGlwcyBvbiB0aGUgTVZNRTQxMDAiKTsKZGlmZiAtdSAtLW5ldy1maWxlIC0tcmVjdXJzaXZl IGxpbnV4LTIuNi4yOS42Lm9yaWcvZHJpdmVycy9tdGQvbmFuZC9tdm1lNzEwMF9uYW5kLmMg bGludXgtMi42LjI5LjYubW9kL2RyaXZlcnMvbXRkL25hbmQvbXZtZTcxMDBfbmFuZC5jCi0t LSBsaW51eC0yLjYuMjkuNi5vcmlnL2RyaXZlcnMvbXRkL25hbmQvbXZtZTcxMDBfbmFuZC5j CTE5NjktMTItMzEgMTc6MDA6MDAuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYuMjku Ni5tb2QvZHJpdmVycy9tdGQvbmFuZC9tdm1lNzEwMF9uYW5kLmMJMjAwOS0wNy0yMSAxMToy ODoxOC4wMDAwMDAwMDAgLTA3MDAKQEAgLTAsMCArMSw0MjAgQEAKKy8qCisgKiBkcml2ZXJz L210ZC9uYW5kL212bWU3MTAwX25hbmQuYworICoKKyAqIEEgZ2x1ZSBkcml2ZXIgZm9yIHRo ZSBOQU5EIGNoaXBzIG9uIHRoZSBNVk1FNzEwMCBib2FyZAorICoKKyAqIEF1dGhvcjogQWpp dCBQcmVtIChhaml0LnByZW1AZW1lcnNvbi5jb20pCisgKiBDb3B5cmlnaHQgMjAwOCBFbWVy c29uIE5ldHdvcmsgUG93ZXIgRW1iZWRkZWQgQ29tcHV0aW5nIEluYy4KKyAqCisgKiBUaGlz IHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvc2xhYi5o PgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4K KyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2lu Y2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgor I2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kX2VjYy5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9w YXJ0aXRpb25zLmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxwbGF0Zm9y bXMvODZ4eC9tdm1lNzEwMC5oPgorCitzdGF0aWMgaW50IG5fcGh5c2ljYWxfY2hpcHM7CisK K3N0cnVjdCBtdm1lNzEwMF9uYW5kX2hvc3QgeworCXN0cnVjdCBuYW5kX2NoaXAgbmFuZF9j aGlwOworCXN0cnVjdCBtdGRfaW5mbyBtdGQ7CisJdm9pZCBfX2lvbWVtICppb19jdHJsOwor CXZvaWQgX19pb21lbSAqaW9fc2VsZWN0OworCXZvaWQgX19pb21lbSAqaW9fc3RhdHVzOwor CXZvaWQgX19pb21lbSAqaW9fZGF0YTsKKwlpbnQgY2hpcDsKKwlpbnQgY2hpcF9lbmFibGU7 Cit9OworCitzdGF0aWMgc3RydWN0IG12bWU3MTAwX25hbmRfaG9zdCAqY2hpcHNbMl07CisK KyNpZmRlZiBDT05GSUdfTVREX1BBUlRJVElPTlMKK3N0YXRpYyBjb25zdCBjaGFyICpwYXJ0 X3Byb2Jlc1tdID0geyAiY21kbGluZXBhcnQiLCBOVUxMIH07CisKKy8qCisgKiBEZWZpbmUg c3RhdGljIHBhcnRpdGlvbnMgZm9yIGZsYXNoIGRldmljZQorICovCitzdGF0aWMgc3RydWN0 IG10ZF9wYXJ0aXRpb24gcGFydGl0aW9uX2luZm9fNEdbXSA9IHsKKwl7CisJIC5uYW1lID0g IkxpbnV4IFlBRkZTIDEiLAorCSAub2Zmc2V0ID0gMHgwMDAwMDAwMCwKKwkgLnNpemUgPSAg IDB4ODAwMDAwMDAsCisJfSwgCisJeworCSAubmFtZSA9ICJMaW51eCBZQUZGUyAyIiwKKwkg Lm9mZnNldCA9IDB4ODAwMDAwMDAsCisJIC5zaXplID0gICAweDgwMDAwMDAwLAorCX0sCit9 OworCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gcGFydGl0aW9uX2luZm9fOEdbXSA9 IHsKKwl7CisJIC5uYW1lID0gIkxpbnV4IFlBRkZTIDEiLAorCSAub2Zmc2V0ID0gMHgwMDAw MDAwMCwKKwkgLnNpemUgICA9IDB4ODAwMDAwMDAsCisJfSwgCisJeworCSAubmFtZSA9ICJM aW51eCBZQUZGUyAyIiwKKwkgLm9mZnNldCA9IDB4ODAwMDAwMDAsCisJIC5zaXplICAgPSAw eDgwMDAwMDAwLAorCX0sCisJeworCSAubmFtZSA9ICJMaW51eCBZQUZGUyAzIiwKKwkgLm9m ZnNldCA9IDB4MTAwMDAwMDAwTEwsCisJIC5zaXplICAgPSAweDgwMDAwMDAwLAorCX0sCisJ eworCSAubmFtZSA9ICJMaW51eCBZQUZGUyA0IiwKKwkgLm9mZnNldCA9IDB4MTgwMDAwMDAw TEwsCisJIC5zaXplICAgPSAweDgwMDAwMDAwLAorCX0sCit9OworI2VuZGlmCisKKy8qCisg KiAgICAgIGhhcmR3YXJlIHNwZWNpZmljIGFjY2VzcyB0byBjb250cm9sLWxpbmVzCisgKgor ICogICAgICBjdHJsOgorICogICAgICBOQU5EX05DRTogYml0IDAgLT4gYml0cyA0LT43ICgw eGYwKSBpbiBTRUxFQ1QgUmVnCisgKiAgICAgIE5BTkRfQ0xFOiBiaXQgMSAtPiBiaXQgNyAo MHg4MCkgaW4gQ09OVFJPTCBSZWcKKyAqICAgICAgTkFORF9BTEU6IGJpdCAyIC0+IGJpdCA2 ICgweDQwKSBpbiBDT05UUk9MIFJlZworICovCisKK3N0YXRpYyB2b2lkIG12bWU3MTAwX2h3 Y29udHJvbChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCwgdW5zaWduZWQgaW50IGN0 cmwpCit7CisJc3RydWN0IG5hbmRfY2hpcCAqbmFuZF9jaGlwID0gbXRkLT5wcml2OworCXN0 cnVjdCBtdm1lNzEwMF9uYW5kX2hvc3QgKmhvc3QgPSBuYW5kX2NoaXAtPnByaXY7CisKKwlp ZiAoY3RybCAmIE5BTkRfQ1RSTF9DSEFOR0UpIHsKKwkJdW5zaWduZWQgY2hhciBiaXRzOwor CisJCWJpdHMgPSByZWFkYihob3N0LT5pb19jdHJsKTsKKwkJYml0cyAmPSAweDNmOworCQli aXRzID0gKGN0cmwgJiBOQU5EX0NMRSkgPDwgNjsKKwkJYml0cyB8PSAoY3RybCAmIE5BTkRf QUxFKSA8PCA0OworCQl3cml0ZWIoYml0cywgaG9zdC0+aW9fY3RybCk7CisJfQorCisJaWYg KGNtZCAhPSBOQU5EX0NNRF9OT05FKQorCQl3cml0ZWIoY21kLCBob3N0LT5pb19kYXRhKTsK K30KKworc3RhdGljIHZvaWQgbXZtZTcxMDBfc2VsZWN0X2NoaXAoc3RydWN0IG10ZF9pbmZv ICptdGQsIGludCBjaGlwKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKm5hbmRfY2hpcCA9IG10 ZC0+cHJpdjsKKwlzdHJ1Y3QgbXZtZTcxMDBfbmFuZF9ob3N0ICpob3N0ID0gbmFuZF9jaGlw LT5wcml2OworCXVuc2lnbmVkIGNoYXIgc2VsOworCisJaWYgKGNoaXAgPiAzKQorCQlyZXR1 cm47CisKKwlzZWwgPSByZWFkYihob3N0LT5pb19zZWxlY3QpOworCXNlbCAmPSB+KE1WTUU3 MTAwX05BTkRfRkxBU0hfQ0UxIHwgTVZNRTcxMDBfTkFORF9GTEFTSF9DRTIgfAorCQkgTVZN RTcxMDBfTkFORF9GTEFTSF9DRTMgfCBNVk1FNzEwMF9OQU5EX0ZMQVNIX0NFNCk7CisKKwlz d2l0Y2ggKGNoaXApIHsKKwljYXNlIDA6CisJCXNlbCB8PSBNVk1FNzEwMF9OQU5EX0ZMQVNI X0NFMTsgCisJCWJyZWFrOworCWNhc2UgMToKKwkJc2VsIHw9IE1WTUU3MTAwX05BTkRfRkxB U0hfQ0UyOyAKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlzZWwgfD0gTVZNRTcxMDBfTkFORF9G TEFTSF9DRTM7IAorCQlicmVhazsKKwljYXNlIDM6CisJCXNlbCB8PSBNVk1FNzEwMF9OQU5E X0ZMQVNIX0NFNDsgCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlob3N0 LT5jaGlwX2VuYWJsZSA9IGNoaXA7CisJd3JpdGViKHNlbCwgaG9zdC0+aW9fc2VsZWN0KTsK K30KKworc3RhdGljIGludCBtdm1lNzEwMF9kZXZpY2VfcmVhZHkoc3RydWN0IG10ZF9pbmZv ICptdGQpCit7CisJc3RydWN0IG5hbmRfY2hpcCAqbmFuZF9jaGlwID0gbXRkLT5wcml2Owor CXN0cnVjdCBtdm1lNzEwMF9uYW5kX2hvc3QgKmhvc3QgPSBuYW5kX2NoaXAtPnByaXY7CisJ dTggaW9fc3RhdHVzOworCWludCBzdGF0dXM7CisKKwlpb19zdGF0dXMgPSByZWFkYihob3N0 LT5pb19zdGF0dXMpOworCisgICAgICAgIHN3aXRjaCAoaG9zdC0+Y2hpcF9lbmFibGUpIHsK KyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAgIHN0YXR1cyA9IGlvX3N0YXR1cyAm IE1WTUU3MTAwX05BTkRfRkxBU0hfUkIxOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg ICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgc3RhdHVzID0gaW9fc3RhdHVzICYgTVZN RTcxMDBfTkFORF9GTEFTSF9SQjI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg IGNhc2UgMjoKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBpb19zdGF0dXMgJiBNVk1FNzEw MF9OQU5EX0ZMQVNIX1JCMzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz ZSAzOgorICAgICAgICAgICAgICAgIHN0YXR1cyA9IGlvX3N0YXR1cyAmIE1WTUU3MTAwX05B TkRfRkxBU0hfUkI0OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0 OgorICAgICAgICAgICAgICAgIHN0YXR1cyA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBf X2luaXQgbXZtZTcxMDBfaW5pdF9vbmUoaW50IGNoaXApCit7CisJc3RydWN0IG12bWU3MTAw X25hbmRfaG9zdCAqaG9zdDsKKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZDsKKwlzdHJ1Y3QgbmFu ZF9jaGlwICpuYW5kX2NoaXA7CisJdW5zaWduZWQgY2hhciByZWc7CisJaW50IGVyciA9IDA7 CisjaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCisJY29uc3QgY2hhciAqcGFydF90eXBl ID0gMDsKKwlpbnQgbXRkX3BhcnRzX25iID0gMDsKKwlzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAq bXRkX3BhcnRzID0gMDsKKyNlbmRpZgorCisJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBNVEQg ZGV2aWNlIHN0cnVjdHVyZSBhbmQgcHJpdmF0ZSBkYXRhICovCisJaG9zdCA9IGt6YWxsb2Mo c2l6ZW9mKHN0cnVjdCBtdm1lNzEwMF9uYW5kX2hvc3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAo IWhvc3QpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgIm12bWU3MTAwX25h bmQ6IFVuYWJsZSB0byBhbGxvY2F0ZSBkZXZpY2Ugc3RydWN0dXJlLlxuIik7CisJCXJldHVy biAtRU5PTUVNOworCX0KKworCWlmIChjaGlwID09IDEpIHsKKwkJaG9zdC0+aW9fY3RybCA9 IGlvcmVtYXAoTVZNRTcxMDBfTkFORF9GTEFTSDFfQ09OVFJPTF9SRUcsIDEpOworCQlpZiAo IWhvc3QtPmlvX2N0cmwpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAibXZtZTcxMDBfbmFuZDog VW5hYmxlIHRvIGlvcmVtYXAoKSIpOworCQkJZXJyID0gLUVOT01FTTsKKwkJCWdvdG8gaW5p dF9kaG9zdDsKKwkJfQorCQlob3N0LT5pb19zZWxlY3QgPSBpb3JlbWFwKE1WTUU3MTAwX05B TkRfRkxBU0gxX1NFTEVDVF9SRUcsIDEpOworCQlpZiAoIWhvc3QtPmlvX3NlbGVjdCkgewor CQkJcHJpbnRrKEtFUk5fRVJSICJtdm1lNzEwMF9uYW5kOiBVbmFibGUgdG8gaW9yZW1hcCgp Iik7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byBpbml0X2QxOworCQl9CisJCWhvc3Qt PmlvX3N0YXR1cyA9IGlvcmVtYXAoTVZNRTcxMDBfTkFORF9GTEFTSDFfU1RBVFVTX1JFRywg MSk7CisJCWlmICghaG9zdC0+aW9fc3RhdHVzKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIm12 bWU3MTAwX25hbmQ6IFVuYWJsZSB0byBpb3JlbWFwKCkiKTsKKwkJCWVyciA9IC1FTk9NRU07 CisJCQlnb3RvIGluaXRfZDI7CisJCX0KKwkJaG9zdC0+aW9fZGF0YSA9IGlvcmVtYXAoTVZN RTcxMDBfTkFORF9GTEFTSDFfREFUQV9SRUcsIDEpOworCQlpZiAoIWhvc3QtPmlvX2RhdGEp IHsKKwkJCXByaW50ayhLRVJOX0VSUiAibXZtZTcxMDBfbmFuZDogVW5hYmxlIHRvIGlvcmVt YXAoKSIpOworCQkJZXJyID0gLUVOT01FTTsKKwkJCWdvdG8gaW5pdF9kMzsKKwkJfQorCQlj aGlwc1swXSA9IGhvc3Q7CisJfSBlbHNlIGlmIChjaGlwID09IDIpIHsKKwkJaG9zdC0+aW9f Y3RybCA9IGlvcmVtYXAoTVZNRTcxMDBfTkFORF9GTEFTSDJfQ09OVFJPTF9SRUcsIDEpOwor CQlpZiAoIWhvc3QtPmlvX2N0cmwpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAibXZtZTcxMDBf bmFuZDogVW5hYmxlIHRvIGlvcmVtYXAoKSIpOworCQkJZXJyID0gLUVOT01FTTsKKwkJCWdv dG8gaW5pdF9kaG9zdDsKKwkJfQorCQlob3N0LT5pb19zZWxlY3QgPSBpb3JlbWFwKE1WTUU3 MTAwX05BTkRfRkxBU0gyX1NFTEVDVF9SRUcsIDEpOworCQlpZiAoIWhvc3QtPmlvX3NlbGVj dCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJtdm1lNzEwMF9uYW5kOiBVbmFibGUgdG8gaW9y ZW1hcCgpIik7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byBpbml0X2QxOworCQl9CisJ CWhvc3QtPmlvX3N0YXR1cyA9IGlvcmVtYXAoTVZNRTcxMDBfTkFORF9GTEFTSDJfU1RBVFVT X1JFRywgMSk7CisJCWlmICghaG9zdC0+aW9fc3RhdHVzKSB7CisJCQlwcmludGsoS0VSTl9F UlIgIm12bWU3MTAwX25hbmQ6IFVuYWJsZSB0byBpb3JlbWFwKCkiKTsKKwkJCWVyciA9IC1F Tk9NRU07CisJCQlnb3RvIGluaXRfZDI7CisJCX0KKwkJaG9zdC0+aW9fZGF0YSA9IGlvcmVt YXAoTVZNRTcxMDBfTkFORF9GTEFTSDJfREFUQV9SRUcsIDEpOworCQlpZiAoIWhvc3QtPmlv X2RhdGEpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAibXZtZTcxMDBfbmFuZDogVW5hYmxlIHRv IGlvcmVtYXAoKSIpOworCQkJZXJyID0gLUVOT01FTTsKKwkJCWdvdG8gaW5pdF9kMzsKKwkJ fQorCQljaGlwc1sxXSA9IGhvc3Q7CisJfSBlbHNlIHsKKwkJZXJyID0gLUVJTlZBTDsKKwkJ Z290byBpbml0X2Rob3N0OworCX0KKworCWhvc3QtPmNoaXAgPSBjaGlwOworCXJlZyA9IHJl YWRiKGhvc3QtPmlvX2N0cmwpOworCXJlZyAmPSB+TVZNRTcxMDBfTkFORF9GTEFTSF9XUDsK Kwl3cml0ZWIocmVnLCBob3N0LT5pb19jdHJsKTsKKwltdGQgPSAmaG9zdC0+bXRkOworCW5h bmRfY2hpcCA9ICZob3N0LT5uYW5kX2NoaXA7CisKKwkvKiBMaW5rIHRoZSBwcml2YXRlIGRh dGEgd2l0aCB0aGUgTVREIHN0cnVjdHVyZSAqLworCW5hbmRfY2hpcC0+cHJpdiA9IGhvc3Q7 CisJbXRkLT5wcml2ID0gbmFuZF9jaGlwOworCW10ZC0+b3duZXIgPSBUSElTX01PRFVMRTsK KworCS8qIFNldCBhZGRyZXNzIG9mIE5BTkQgSU8gbGluZXMgKi8KKwluYW5kX2NoaXAtPklP X0FERFJfUiA9IGhvc3QtPmlvX2RhdGE7CisJbmFuZF9jaGlwLT5JT19BRERSX1cgPSBob3N0 LT5pb19kYXRhOworCisJbmFuZF9jaGlwLT5jbWRfY3RybCA9IG12bWU3MTAwX2h3Y29udHJv bDsKKwluYW5kX2NoaXAtPnNlbGVjdF9jaGlwID0gbXZtZTcxMDBfc2VsZWN0X2NoaXA7CisJ bmFuZF9jaGlwLT5kZXZfcmVhZHkgPSBtdm1lNzEwMF9kZXZpY2VfcmVhZHk7CisJLyogV2Un bGwgbGV0IFlBRkZTIGRvIEVDQyovCisJbmFuZF9jaGlwLT5lY2MubW9kZSA9IE5BTkRfRUND X05PTkU7CisJbmFuZF9jaGlwLT5jaGlwX2RlbGF5ID0gMjA7CisKKwluYW5kX2NoaXAtPm9w dGlvbnMgPSBOQU5EX1NBTVNVTkdfTFBfT1BUSU9OUyB8IE5BTkRfTk9fQVVUT0lOQ1I7CisK KwkvKiBTY2FuIHRvIGZpbmQgZXhpc3RlbmNlIG9mIHRoZSBkZXZpY2UgKi8KKwlpZiAobmFu ZF9zY2FuKG10ZCwgNCkpIHsKKwkJZXJyID0gLUVOWElPOworCQlnb3RvIGluaXRfZDQ7CisJ fQorCisjaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCisJaWYgKGNoaXAgPT0gMSkKKwkJ bXRkLT5uYW1lID0gIk1WTUU3MTAwIE5BTkQgQ2hpcCAxIjsKKwllbHNlIGlmIChjaGlwID09 IDIpCisJCW10ZC0+bmFtZSA9ICJNVk1FNzEwMCBOQU5EIENoaXAgMiI7CisJLyogRmlyc3Qg bG9vayBmb3IgcGFydGl0aW9ucyBvbiB0aGUgY29tbWFuZCBsaW5lLCB0aGVzZSB0YWtlCisJ ICogdGFrZSBwcmVjZWRlbmNlIG92ZXIgc3RhdGljYWxseSBkZWZpbmVkIHBhcnRpdGlvbnMg Ki8KKwltdGRfcGFydHNfbmIgPSBwYXJzZV9tdGRfcGFydGl0aW9ucyhtdGQsIHBhcnRfcHJv YmVzLCAmbXRkX3BhcnRzLCAwKTsKKwlpZiAobXRkX3BhcnRzX25iID4gMCkKKwkJcGFydF90 eXBlID0gImNvbW1hbmQgbGluZSI7CisJZWxzZQorCQltdGRfcGFydHNfbmIgPSAwOworCisJ aWYgKG10ZF9wYXJ0c19uYiA9PSAwKSB7CisJCXBhcnRfdHlwZSA9ICJzdGF0aWMiOworCQlp ZiAobXRkLT5zaXplID09IDB4MTAwMDAwMDAwTEwpIHsKKwkJCW10ZF9wYXJ0cyA9IHBhcnRp dGlvbl9pbmZvXzRHOworCQkJbXRkX3BhcnRzX25iID0gMjsKKwkJfSBlbHNlIGlmIChtdGQt PnNpemUgPT0gMHgyMDAwMDAwMDBMTCkgeworCQkJbXRkX3BhcnRzID0gcGFydGl0aW9uX2lu Zm9fOEc7CisJCQltdGRfcGFydHNfbmIgPSA0OworCQl9IGVsc2UgeworCQkJcHJpbnRrKEtF Uk5fSU5GTyAibXZtZTcxMDBfbmFuZDogVW5leHBlY3RlZCBGbGFzaCBTaXplXG4iKTsKKwkJ CWVyciA9IC1FTlhJTzsKKwkJCWdvdG8gaW5pdF9kNDsKKwkJfQorCX0KKworCS8qIFJlZ2lz dGVyIHRoZSBwYXJ0aXRpb25zICovCisJcHJpbnRrKEtFUk5fSU5GTyAiVXNpbmcgJXMgcGFy dGl0aW9uIGRlZmluaXRpb25cbiIsIHBhcnRfdHlwZSk7CisJc3dpdGNoIChtdGQtPnNpemUp IHsKKwljYXNlIDB4MTAwMDAwMDAwTEw6CisJCWFkZF9tdGRfcGFydGl0aW9ucyhtdGQsIG10 ZF9wYXJ0cywgbXRkX3BhcnRzX25iKTsKKwkJYnJlYWs7CisJY2FzZSAweDIwMDAwMDAwMExM OgorCQlhZGRfbXRkX3BhcnRpdGlvbnMobXRkLCBtdGRfcGFydHMsIG10ZF9wYXJ0c19uYik7 CisJCWJyZWFrOworCX0KKyNlbHNlCisJYWRkX210ZF9kZXZpY2UobXRkKTsKKyNlbmRpZgor CWdvdG8gaW5pdF9yZXQ7CisKK2luaXRfZDQ6CisgICAgICAgIC8qIFNldCBXUCAqLworICAg ICAgICByZWcgPSByZWFkYihob3N0LT5pb19jdHJsKTsKKyAgICAgICAgcmVnIHw9IE1WTUU3 MTAwX05BTkRfRkxBU0hfV1A7CisgICAgICAgIHdyaXRlYihyZWcsIGhvc3QtPmlvX2N0cmwp OworCWlvdW5tYXAoaG9zdC0+aW9fZGF0YSk7Citpbml0X2QzOgorCWlvdW5tYXAoaG9zdC0+ aW9fc3RhdHVzKTsKK2luaXRfZDI6CisJaW91bm1hcChob3N0LT5pb19zZWxlY3QpOworaW5p dF9kMToKKwlpb3VubWFwKGhvc3QtPmlvX2N0cmwpOworaW5pdF9kaG9zdDoKKwlrZnJlZSho b3N0KTsKK2luaXRfcmV0OgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0 IG12bWU3MTAwX2luaXQodm9pZCkKK3sKKwlpbnQgZXJyID0gLUVOWElPOworCXZvaWQgX19p b21lbSAqcHJlZzsKKworCXByZWcgPSBpb3JlbWFwKE1WTUU3MTAwX05BTkRfRkxBU0gxX1BS RVNFTkNFX1JFRywgMSk7CisJaWYgKCFwcmVnKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcg Im12bWU3MTAwX25hbmQ6IGlvcmVtYXAgZmFpbGVkXG4iKTsKKworCQlyZXR1cm4gLUVOT01F TTsKKwl9CisJaWYgKHJlYWRiKHByZWcpICYgTVZNRTcxMDBfTkFORF9GTEFTSF9DUCkgewor CQllcnIgPSBtdm1lNzEwMF9pbml0X29uZSgxKTsKKwkJaWYgKGVycikgeworCQkJaW91bm1h cChwcmVnKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwkJbl9waHlzaWNhbF9jaGlwcysrOwor CX0KKwlpb3VubWFwKHByZWcpOworCisJcHJlZyA9IGlvcmVtYXAoTVZNRTcxMDBfTkFORF9G TEFTSDJfUFJFU0VOQ0VfUkVHLCAxKTsKKwlpZiAoIXByZWcpIHsKKwkJcHJpbnRrKEtFUk5f V0FSTklORyAibXZtZTcxMDBfbmFuZDogaW9yZW1hcCBmYWlsZWRcbiIpOworCisJCXJldHVy biAtRU5PTUVNOworCX0KKwlpZiAocmVhZGIocHJlZykgJiBNVk1FNzEwMF9OQU5EX0ZMQVNI X0NQKSB7CisJCWVyciA9IG12bWU3MTAwX2luaXRfb25lKDIpOworCQlpZiAoZXJyKSB7CisJ CQlpb3VubWFwKHByZWcpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCQluX3BoeXNpY2FsX2No aXBzKys7CisJfQorCWlvdW5tYXAocHJlZyk7CisKKwlyZXR1cm4gZXJyOworfQorCittb2R1 bGVfaW5pdChtdm1lNzEwMF9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IG12bWU3MTAw X2NsZWFudXAodm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBuX3BoeXNp Y2FsX2NoaXBzOyBpKyspIHsKKwkJc3RydWN0IG12bWU3MTAwX25hbmRfaG9zdCAqaG9zdCA9 IGNoaXBzW2ldOworCQlzdHJ1Y3QgbXRkX2luZm8gKm10ZDsKKwkJdW5zaWduZWQgY2hhciBy ZWc7CisKKwkJaWYgKGhvc3QpIHsKKwkJCW10ZCA9ICZob3N0LT5tdGQ7CisKKwkJCWlmICht dGQpCisJCQkJbmFuZF9yZWxlYXNlKG10ZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBy ZWcgPSByZWFkYihob3N0LT5pb19jdHJsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl ZyB8PSBNVk1FNzEwMF9OQU5EX0ZMQVNIX1dQOworICAgICAgICAgICAgICAgICAgICAgICAg d3JpdGViKHJlZywgaG9zdC0+aW9fY3RybCk7CisJCQlpb3VubWFwKGhvc3QtPmlvX2RhdGEp OworCQkJaW91bm1hcChob3N0LT5pb19zdGF0dXMpOworCQkJaW91bm1hcChob3N0LT5pb19z ZWxlY3QpOworCQkJaW91bm1hcChob3N0LT5pb19jdHJsKTsKKworCQkJa2ZyZWUoaG9zdCk7 CisJCX0KKwl9CisJcmV0dXJuOworfQorCittb2R1bGVfZXhpdChtdm1lNzEwMF9jbGVhbnVw KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiQWppdCBQcmVt IChhaml0LnByZW1AZW1lcnNvbi5jb20iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTkFORCBk cml2ZXIgZm9yIHRoZSBuYW5kIGNoaXBzIG9uIHRoZSBNVk1FNzEwMCIpOwpkaWZmIC11IC0t bmV3LWZpbGUgLS1yZWN1cnNpdmUgbGludXgtMi42LjI5LjYub3JpZy9kcml2ZXJzL210ZC9u YW5kL25hbmRfYmFzZS5jIGxpbnV4LTIuNi4yOS42Lm1vZC9kcml2ZXJzL210ZC9uYW5kL25h bmRfYmFzZS5jCi0tLSBsaW51eC0yLjYuMjkuNi5vcmlnL2RyaXZlcnMvbXRkL25hbmQvbmFu ZF9iYXNlLmMJMjAwOS0wNy0wMiAxNjo0MToyMC4wMDAwMDAwMDAgLTA3MDAKKysrIGxpbnV4 LTIuNi4yOS42Lm1vZC9kcml2ZXJzL210ZC9uYW5kL25hbmRfYmFzZS5jCTIwMDktMDctMjEg MTE6Mjg6MTguMDAwMDAwMDAwIC0wNzAwCkBAIC04Miw2ICs4MiwyMCBAQAogCQkgLmxlbmd0 aCA9IDM4fX0KIH07CiAKK3N0YXRpYyBzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQgbmFuZF9vb2Jf MTI4ID0geworICAgICAgICAuZWNjYnl0ZXMgPSA0OCwKKyAgICAgICAgLmVjY3BvcyA9IHsK KwkJODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1LCAgODYsICA4NywKKwkJODgsICA4OSwg IDkwLCAgOTEsICA5MiwgIDkzLCAgOTQsICA5NSwKKwkJOTYsICA5NywgIDk4LCAgOTksIDEw MCwgMTAxLCAxMDIsIDEwMywKKwkJMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEw LCAxMTEsCisJCTExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LAorCQkx MjAsIDEyMSwgMTIyLCAxMjMsIDEyNCwgMTI1LCAxMjYsIDEyN30sCisgICAgICAgIC5vb2Jm cmVlID0geworICAgICAgICAgICAgICAgIHsub2Zmc2V0ID0gMiwKKyAgICAgICAgICAgICAg ICAgLmxlbmd0aCA9IDc4fX0KK307CisKIHN0YXRpYyBpbnQgbmFuZF9nZXRfZGV2aWNlKHN0 cnVjdCBuYW5kX2NoaXAgKmNoaXAsIHN0cnVjdCBtdGRfaW5mbyAqbXRkLAogCQkJICAgaW50 IG5ld19zdGF0ZSk7CiAKQEAgLTI1NTUsNiArMjU2OSwxMCBAQAogCQljYXNlIDY0OgogCQkJ Y2hpcC0+ZWNjLmxheW91dCA9ICZuYW5kX29vYl82NDsKIAkJCWJyZWFrOworICAgICAgICAg ICAgICAgIGNhc2UgMTI4OgorICAgICAgICAgICAgICAgICAgICAgICAgY2hpcC0+ZWNjLmxh eW91dCA9ICZuYW5kX29vYl8xMjg7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK KwogCQlkZWZhdWx0OgogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiTm8gb29iIHNjaGVtZSBk ZWZpbmVkIGZvciAiCiAJCQkgICAgICAgIm9vYnNpemUgJWRcbiIsIG10ZC0+b29ic2l6ZSk7 CkBAIC0yNjI3LDggKzI2NDUsOCBAQAogCQlicmVhazsKIAogCWNhc2UgTkFORF9FQ0NfTk9O RToKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiTkFORF9FQ0NfTk9ORSBzZWxlY3RlZCBieSBi b2FyZCBkcml2ZXIuICIKLQkJICAgICAgICJUaGlzIGlzIG5vdCByZWNvbW1lbmRlZCAhIVxu Iik7CisJCXByaW50ayhLRVJOX0RFQlVHICJOQU5EX0VDQ19OT05FIHNlbGVjdGVkIGJ5IGJv YXJkIGRyaXZlci4gIgorCQkgICAgICAgIlRoaXMgaXMgbm90IHJlY29tbWVuZGVkIHVubGVz cyBkb25lIGVsc2V3aGVyZSAoWUFGRlMgcGVyaGFwcz8pISFcbiIpOwogCQljaGlwLT5lY2Mu cmVhZF9wYWdlID0gbmFuZF9yZWFkX3BhZ2VfcmF3OwogCQljaGlwLT5lY2Mud3JpdGVfcGFn ZSA9IG5hbmRfd3JpdGVfcGFnZV9yYXc7CiAJCWNoaXAtPmVjYy5yZWFkX29vYiA9IG5hbmRf cmVhZF9vb2Jfc3RkOwpkaWZmIC11IC0tbmV3LWZpbGUgLS1yZWN1cnNpdmUgbGludXgtMi42 LjI5LjYub3JpZy9kcml2ZXJzL210ZC9uYW5kL25hbmRfYmJ0LmMgbGludXgtMi42LjI5LjYu bW9kL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9iYnQuYwotLS0gbGludXgtMi42LjI5LjYub3Jp Zy9kcml2ZXJzL210ZC9uYW5kL25hbmRfYmJ0LmMJMjAwOS0wNy0wMiAxNjo0MToyMC4wMDAw MDAwMDAgLTA3MDAKKysrIGxpbnV4LTIuNi4yOS42Lm1vZC9kcml2ZXJzL210ZC9uYW5kL25h bmRfYmJ0LmMJMjAwOS0wNy0yMSAxMToyODoxOC4wMDAwMDAwMDAgLTA3MDAKQEAgLTQyOCw3 ICs0MjgsNyBAQAogCiAJCWlmIChyZXQpIHsKIAkJCXRoaXMtPmJidFtpID4+IDNdIHw9IDB4 MDMgPDwgKGkgJiAweDYpOwotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQmFkIGVyYXNlYmxv Y2sgJWQgYXQgMHglMDEybGx4XG4iLAorCQkJcHJpbnRrKEtFUk5fREVCVUcgIkJhZCBlcmFz ZWJsb2NrICVkIGF0IDB4JTAxMmxseFxuIiwKIAkJCSAgICAgICBpID4+IDEsICh1bnNpZ25l ZCBsb25nIGxvbmcpZnJvbSk7CiAJCQltdGQtPmVjY19zdGF0cy5iYWRibG9ja3MrKzsKIAkJ fQpkaWZmIC11IC0tbmV3LWZpbGUgLS1yZWN1cnNpdmUgbGludXgtMi42LjI5LjYub3JpZy9k cml2ZXJzL210ZC9uYW5kL25hbmRfaWRzLmMgbGludXgtMi42LjI5LjYubW9kL2RyaXZlcnMv bXRkL25hbmQvbmFuZF9pZHMuYwotLS0gbGludXgtMi42LjI5LjYub3JpZy9kcml2ZXJzL210 ZC9uYW5kL25hbmRfaWRzLmMJMjAwOS0wNy0wMiAxNjo0MToyMC4wMDAwMDAwMDAgLTA3MDAK KysrIGxpbnV4LTIuNi4yOS42Lm1vZC9kcml2ZXJzL210ZC9uYW5kL25hbmRfaWRzLmMJMjAw OS0wNy0yMSAxMToyODoxOC4wMDAwMDAwMDAgLTA3MDAKQEAgLTMwLDcgKzMwLDcgQEAKIAl7 Ik5BTkQgMU1pQiAzLDNWIDgtYml0IiwJMHhlOCwgMjU2LCAxLCAweDEwMDAsIDB9LAogCXsi TkFORCAxTWlCIDMsM1YgOC1iaXQiLAkweGVjLCAyNTYsIDEsIDB4MTAwMCwgMH0sCiAJeyJO QU5EIDJNaUIgMywzViA4LWJpdCIsCTB4ZWEsIDI1NiwgMiwgMHgxMDAwLCAwfSwKLQl7Ik5B TkQgNE1pQiAzLDNWIDgtYml0IiwJMHhkNSwgNTEyLCA0LCAweDIwMDAsIDB9LAorLy8JeyJO QU5EIDRNaUIgMywzViA4LWJpdCIsCTB4ZDUsIDUxMiwgNCwgMHgyMDAwLCAwfSwKIAl7Ik5B TkQgNE1pQiAzLDNWIDgtYml0IiwJMHhlMywgNTEyLCA0LCAweDIwMDAsIDB9LAogCXsiTkFO RCA0TWlCIDMsM1YgOC1iaXQiLAkweGU1LCA1MTIsIDQsIDB4MjAwMCwgMH0sCiAJeyJOQU5E IDhNaUIgMywzViA4LWJpdCIsCTB4ZDYsIDUxMiwgOCwgMHgyMDAwLCAwfSwKQEAgLTEwNiw2 ICsxMDYsNyBAQAogCS8qIDE2IEdpZ2FiaXQgKi8KIAl7Ik5BTkQgMkdpQiAxLDhWIDgtYml0 IiwJMHhBNSwgMCwgMjA0OCwgMCwgTFBfT1BUSU9OU30sCiAJeyJOQU5EIDJHaUIgMywzViA4 LWJpdCIsCTB4RDUsIDAsIDIwNDgsIDAsIExQX09QVElPTlN9LAorCXsiTkFORCA0R2lCIDMs M1YgOC1iaXQiLAkweEQ3LCAwLCAyMDQ4LCAwLCBMUF9PUFRJT05TfSwKIAl7Ik5BTkQgMkdp QiAxLDhWIDE2LWJpdCIsCTB4QjUsIDAsIDIwNDgsIDAsIExQX09QVElPTlMxNn0sCiAJeyJO QU5EIDJHaUIgMywzViAxNi1iaXQiLAkweEM1LCAwLCAyMDQ4LCAwLCBMUF9PUFRJT05TMTZ9 LAogCmRpZmYgLXUgLS1uZXctZmlsZSAtLXJlY3Vyc2l2ZSBsaW51eC0yLjYuMjkuNi5vcmln L2RyaXZlcnMvbmV0L3BoeS9waHkuYyBsaW51eC0yLjYuMjkuNi5tb2QvZHJpdmVycy9uZXQv cGh5L3BoeS5jCi0tLSBsaW51eC0yLjYuMjkuNi5vcmlnL2RyaXZlcnMvbmV0L3BoeS9waHku YwkyMDA5LTA3LTAyIDE2OjQxOjIwLjAwMDAwMDAwMCAtMDcwMAorKysgbGludXgtMi42LjI5 LjYubW9kL2RyaXZlcnMvbmV0L3BoeS9waHkuYwkyMDA5LTA3LTIxIDExOjI4OjE4LjAwMDAw MDAwMCAtMDcwMApAQCAtNjAwLDcgKzYwMCw3IEBACiAJYXRvbWljX3NldCgmcGh5ZGV2LT5p cnFfZGlzYWJsZSwgMCk7CiAJaWYgKHJlcXVlc3RfaXJxKHBoeWRldi0+aXJxLCBwaHlfaW50 ZXJydXB0LAogCQkJCUlSUUZfU0hBUkVELAotCQkJCSJwaHlfaW50ZXJydXB0IiwKKwkJCQki cGh5IiwKIAkJCQlwaHlkZXYpIDwgMCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczog Q2FuJ3QgZ2V0IElSUSAlZCAoUEhZKVxuIiwKIAkJCQlwaHlkZXYtPmJ1cy0+bmFtZSwKZGlm ZiAtdSAtLW5ldy1maWxlIC0tcmVjdXJzaXZlIGxpbnV4LTIuNi4yOS42Lm9yaWcvZHJpdmVy cy9vZi9vZl9pMmMuYyBsaW51eC0yLjYuMjkuNi5tb2QvZHJpdmVycy9vZi9vZl9pMmMuYwot LS0gbGludXgtMi42LjI5LjYub3JpZy9kcml2ZXJzL29mL29mX2kyYy5jCTIwMDktMDctMDIg MTY6NDE6MjAuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYuMjkuNi5tb2QvZHJpdmVy cy9vZi9vZl9pMmMuYwkyMDA5LTA3LTIxIDExOjI4OjE4LjAwMDAwMDAwMCAtMDcwMApAQCAt NzEsNiArNzEsNyBAQAogICAgICAgICByZXR1cm4gZGV2X2FyY2hkYXRhX2dldF9ub2RlKCZk ZXYtPmFyY2hkYXRhKSA9PSBkYXRhOwogfQogCisjaWYgMAogLyogbXVzdCBjYWxsIHB1dF9k ZXZpY2UoKSB3aGVuIGRvbmUgd2l0aCByZXR1cm5lZCBpMmNfY2xpZW50IGRldmljZSAqLwog c3RydWN0IGkyY19jbGllbnQgKm9mX2ZpbmRfaTJjX2RldmljZV9ieV9ub2RlKHN0cnVjdCBk ZXZpY2Vfbm9kZSAqbm9kZSkKIHsKQEAgLTg0LDUgKzg1LDYgQEAKIAlyZXR1cm4gdG9faTJj X2NsaWVudChkZXYpOwogfQogRVhQT1JUX1NZTUJPTChvZl9maW5kX2kyY19kZXZpY2VfYnlf bm9kZSk7CisjZW5kaWYKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC11IC0tbmV3 LWZpbGUgLS1yZWN1cnNpdmUgbGludXgtMi42LjI5LjYub3JpZy9kcml2ZXJzL3BjaS9wY2ku YyBsaW51eC0yLjYuMjkuNi5tb2QvZHJpdmVycy9wY2kvcGNpLmMKLS0tIGxpbnV4LTIuNi4y OS42Lm9yaWcvZHJpdmVycy9wY2kvcGNpLmMJMjAwOS0wNy0wMiAxNjo0MToyMC4wMDAwMDAw MDAgLTA3MDAKKysrIGxpbnV4LTIuNi4yOS42Lm1vZC9kcml2ZXJzL3BjaS9wY2kuYwkyMDA5 LTA3LTIxIDExOjI4OjE4LjAwMDAwMDAwMCAtMDcwMApAQCAtMTA5Niw3ICsxMDk2LDcgQEAK IAogCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIGRldi0+cG1fY2FwICsgUENJX1BNX0NU UkwsIHBtY3NyKTsKIAotCWRldl9wcmludGsoS0VSTl9JTkZPLCAmZGV2LT5kZXYsICJQTUUj ICVzXG4iLAorCWRldl9wcmludGsoS0VSTl9ERUJVRywgJmRldi0+ZGV2LCAiUE1FIyAlc1xu IiwKIAkJCWVuYWJsZSA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpOwogfQogCkBAIC0xMjk2 LDEyICsxMjk2LDEyIEBACiAKIAlwbWMgJj0gUENJX1BNX0NBUF9QTUVfTUFTSzsKIAlpZiAo cG1jKSB7Ci0JCWRldl9pbmZvKCZkZXYtPmRldiwgIlBNRSMgc3VwcG9ydGVkIGZyb20lcyVz JXMlcyVzXG4iLAotCQkJIChwbWMgJiBQQ0lfUE1fQ0FQX1BNRV9EMCkgPyAiIEQwIiA6ICIi LAotCQkJIChwbWMgJiBQQ0lfUE1fQ0FQX1BNRV9EMSkgPyAiIEQxIiA6ICIiLAotCQkJIChw bWMgJiBQQ0lfUE1fQ0FQX1BNRV9EMikgPyAiIEQyIiA6ICIiLAotCQkJIChwbWMgJiBQQ0lf UE1fQ0FQX1BNRV9EMykgPyAiIEQzaG90IiA6ICIiLAotCQkJIChwbWMgJiBQQ0lfUE1fQ0FQ X1BNRV9EM2NvbGQpID8gIiBEM2NvbGQiIDogIiIpOworLy8JCWRldl9pbmZvKCZkZXYtPmRl diwgIlBNRSMgc3VwcG9ydGVkIGZyb20lcyVzJXMlcyVzXG4iLAorLy8JCQkgKHBtYyAmIFBD SV9QTV9DQVBfUE1FX0QwKSA/ICIgRDAiIDogIiIsCisvLwkJCSAocG1jICYgUENJX1BNX0NB UF9QTUVfRDEpID8gIiBEMSIgOiAiIiwKKy8vCQkJIChwbWMgJiBQQ0lfUE1fQ0FQX1BNRV9E MikgPyAiIEQyIiA6ICIiLAorLy8JCQkgKHBtYyAmIFBDSV9QTV9DQVBfUE1FX0QzKSA/ICIg RDNob3QiIDogIiIsCisvLwkJCSAocG1jICYgUENJX1BNX0NBUF9QTUVfRDNjb2xkKSA/ICIg RDNjb2xkIiA6ICIiKTsKIAkJZGV2LT5wbWVfc3VwcG9ydCA9IHBtYyA+PiBQQ0lfUE1fQ0FQ X1BNRV9TSElGVDsKIAkJLyoKIAkJICogTWFrZSBkZXZpY2UncyBQTSBmbGFncyByZWZsZWN0 IHRoZSB3YWtlLXVwIGNhcGFiaWxpdHksIGJ1dApkaWZmIC11IC0tbmV3LWZpbGUgLS1yZWN1 cnNpdmUgbGludXgtMi42LjI5LjYub3JpZy9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnYu YyBsaW51eC0yLjYuMjkuNi5tb2QvZHJpdmVycy9wY2kvcGNpZS9hZXIvYWVyZHJ2LmMKLS0t IGxpbnV4LTIuNi4yOS42Lm9yaWcvZHJpdmVycy9wY2kvcGNpZS9hZXIvYWVyZHJ2LmMJMjAw OS0wNy0wMiAxNjo0MToyMC4wMDAwMDAwMDAgLTA3MDAKKysrIGxpbnV4LTIuNi4yOS42Lm1v ZC9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnYuYwkyMDA5LTA3LTIxIDExOjI4OjE4LjAw MDAwMDAwMCAtMDcwMApAQCAtMjIwLDcgKzIyMCw3IEBACiAKIAkvKiBBbGxvYyBycGMgZGF0 YSBzdHJ1Y3R1cmUgKi8KIAlpZiAoIShycGMgPSBhZXJfYWxsb2NfcnBjKGRldikpKSB7Ci0J CWRldl9wcmludGsoS0VSTl9ERUJVRywgZGV2aWNlLCAiYWxsb2MgcnBjIGZhaWxlZFxuIik7 CisJCWRldl9wcmludGsoS0VSTl9FUlIsIGRldmljZSwgImFsbG9jIHJwYyBmYWlsZWRcbiIp OwogCQlhZXJfcmVtb3ZlKGRldik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KQEAgLTIyOCw3 ICsyMjgsNyBAQAogCS8qIFJlcXVlc3QgSVJRIElTUiAqLwogCWlmICgoc3RhdHVzID0gcmVx dWVzdF9pcnEoZGV2LT5pcnEsIGFlcl9pcnEsIElSUUZfU0hBUkVELCAiYWVyZHJ2IiwKIAkJ CQlkZXYpKSkgewotCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsIGRldmljZSwgInJlcXVlc3Qg SVJRIGZhaWxlZFxuIik7CisJCWRldl9wcmludGsoS0VSTl9FUlIsIGRldmljZSwgInJlcXVl c3QgSVJRICVkIGZhaWxlZFxuIiwgZGV2LT5pcnEpOwogCQlhZXJfcmVtb3ZlKGRldik7CiAJ CXJldHVybiBzdGF0dXM7CiAJfQpAQCAtMjcyLDcgKzI3Miw3IEBACiAJICogdG8gaXNzdWUg Q29uZmlndXJhdGlvbiBSZXF1ZXN0cyB0byB0aG9zZSBkZXZpY2VzLgogCSAqLwogCW1zbGVl cCgyMDApOwotCWRldl9wcmludGsoS0VSTl9ERUJVRywgJmRldi0+ZGV2LCAiUm9vdCBQb3J0 IGxpbmsgaGFzIGJlZW4gcmVzZXRcbiIpOworCWRldl9wcmludGsoS0VSTl9FUlIsICZkZXYt PmRldiwgIlJvb3QgUG9ydCBsaW5rIGhhcyBiZWVuIHJlc2V0XG4iKTsKIAogCS8qIEVuYWJs ZSBSb290IFBvcnQncyBpbnRlcnJ1cHQgaW4gcmVzcG9uc2UgdG8gZXJyb3IgbWVzc2FnZXMg Ki8KIAlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBwb3MgKyBQQ0lfRVJSX1JPT1RfU1RB VFVTLCAmc3RhdHVzKTsKZGlmZiAtdSAtLW5ldy1maWxlIC0tcmVjdXJzaXZlIGxpbnV4LTIu Ni4yOS42Lm9yaWcvZHJpdmVycy9wY2kvcGNpZS9hZXIvYWVyZHJ2X2NvcmUuYyBsaW51eC0y LjYuMjkuNi5tb2QvZHJpdmVycy9wY2kvcGNpZS9hZXIvYWVyZHJ2X2NvcmUuYwotLS0gbGlu dXgtMi42LjI5LjYub3JpZy9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnZfY29yZS5jCTIw MDktMDctMDIgMTY6NDE6MjAuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYuMjkuNi5t b2QvZHJpdmVycy9wY2kvcGNpZS9hZXIvYWVyZHJ2X2NvcmUuYwkyMDA5LTA3LTIxIDExOjI4 OjE4LjAwMDAwMDAwMCAtMDcwMApAQCAtOTEsNyArOTEsNiBAQAogCXJldHVybiAwOwogfQog Ci0jaWYgMAogaW50IHBjaV9jbGVhbnVwX2Flcl9jb3JyZWN0X2Vycm9yX3N0YXR1cyhzdHJ1 Y3QgcGNpX2RldiAqZGV2KQogewogCWludCBwb3M7CkBAIC0xMDYsNyArMTA1LDYgQEAKIAog CXJldHVybiAwOwogfQotI2VuZGlmICAvKiAgMCAgKi8KIAogCiBzdGF0aWMgdm9pZCBzZXRf ZGV2aWNlX2Vycm9yX3JlcG9ydGluZyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCB2b2lkICpkYXRh KQpAQCAtMjI2LDcgKzIyNCw3IEBACiAJCQkgKiBvZiBhIGRyaXZlciBmb3IgdGhpcyBkZXZp Y2UgaXMgdW5hd2FyZSBvZgogCQkJICogaXRzIGh3IHN0YXRlLgogCQkJICovCi0JCQlkZXZf cHJpbnRrKEtFUk5fREVCVUcsICZkZXYtPmRldiwgImRldmljZSBoYXMgJXNcbiIsCisJCQlk ZXZfcHJpbnRrKEtFUk5fSU5GTywgJmRldi0+ZGV2LCAiZGV2aWNlIGhhcyAlc1xuIiwKIAkJ CQkgICBkZXYtPmRyaXZlciA/CiAJCQkJICAgIm5vIEFFUi1hd2FyZSBkcml2ZXIiIDogIm5v IGRyaXZlciIpOwogCQl9CkBAIC0zMDksNyArMzA3LDcgQEAKIHsKIAlzdHJ1Y3QgYWVyX2Jy b2FkY2FzdF9kYXRhIHJlc3VsdF9kYXRhOwogCi0JZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAm ZGV2LT5kZXYsICJicm9hZGNhc3QgJXMgbWVzc2FnZVxuIiwgZXJyb3JfbWVzZyk7CisJZGV2 X3ByaW50ayhLRVJOX0lORk8sICZkZXYtPmRldiwgImJyb2FkY2FzdCAlcyBtZXNzYWdlXG4i LCBlcnJvcl9tZXNnKTsKIAlyZXN1bHRfZGF0YS5zdGF0ZSA9IHN0YXRlOwogCWlmIChjYiA9 PSByZXBvcnRfZXJyb3JfZGV0ZWN0ZWQpCiAJCXJlc3VsdF9kYXRhLnJlc3VsdCA9IFBDSV9F UlNfUkVTVUxUX0NBTl9SRUNPVkVSOwpAQCAtNDA5LDcgKzQwNyw3IEBACiAJCQlkYXRhLmFl cl9kcml2ZXIgPQogCQkJCXRvX3NlcnZpY2VfZHJpdmVyKGFlcmRldi0+ZGV2aWNlLmRyaXZl cik7CiAJCX0gZWxzZSB7Ci0JCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZkZXYtPmRldiwg Im5vIGxpbmstcmVzZXQgIgorCQkJZGV2X3ByaW50ayhLRVJOX0lORk8sICZkZXYtPmRldiwg Im5vIGxpbmstcmVzZXQgIgogCQkJCSAgICJzdXBwb3J0XG4iKTsKIAkJCXJldHVybiBQQ0lf RVJTX1JFU1VMVF9ESVNDT05ORUNUOwogCQl9CkBAIC00MTcsNyArNDE1LDcgQEAKIAogCXN0 YXR1cyA9IGRhdGEuYWVyX2RyaXZlci0+cmVzZXRfbGluayh1ZGV2KTsKIAlpZiAoc3RhdHVz ICE9IFBDSV9FUlNfUkVTVUxUX1JFQ09WRVJFRCkgewotCQlkZXZfcHJpbnRrKEtFUk5fREVC VUcsICZkZXYtPmRldiwgImxpbmsgcmVzZXQgYXQgdXBzdHJlYW0gIgorCQlkZXZfcHJpbnRr KEtFUk5fSU5GTywgJmRldi0+ZGV2LCAibGluayByZXNldCBhdCB1cHN0cmVhbSAiCiAJCQkg ICAiZGV2aWNlICVzIGZhaWxlZFxuIiwgcGNpX25hbWUodWRldikpOwogCQlyZXR1cm4gUENJ X0VSU19SRVNVTFRfRElTQ09OTkVDVDsKIAl9CkBAIC01MTQsMTEgKzUxMiwxMSBAQAogCX0g ZWxzZSB7CiAJCXN0YXR1cyA9IGRvX3JlY292ZXJ5KGFlcmRldiwgZGV2LCBpbmZvLnNldmVy aXR5KTsKIAkJaWYgKHN0YXR1cyA9PSBQQ0lfRVJTX1JFU1VMVF9SRUNPVkVSRUQpIHsKLQkJ CWRldl9wcmludGsoS0VSTl9ERUJVRywgJmRldi0+ZGV2LCAiQUVSIGRyaXZlciAiCisJCQlk ZXZfcHJpbnRrKEtFUk5fSU5GTywgJmRldi0+ZGV2LCAiQUVSIGRyaXZlciAiCiAJCQkJICAg InN1Y2Nlc3NmdWxseSByZWNvdmVyZWRcbiIpOwogCQl9IGVsc2UgewogCQkJLyogVE9ETzog U2hvdWxkIGtlcm5lbCBwYW5pYyBoZXJlPyAqLwotCQkJZGV2X3ByaW50ayhLRVJOX0RFQlVH LCAmZGV2LT5kZXYsICJBRVIgZHJpdmVyIGRpZG4ndCAiCisJCQlkZXZfcHJpbnRrKEtFUk5f RVJSLCAmZGV2LT5kZXYsICJBRVIgZHJpdmVyIGRpZG4ndCAiCiAJCQkJICAgInJlY292ZXJc biIpOwogCQl9CiAJfQpAQCAtNjk3LDcgKzY5NSw3IEBACiAJCQkgUENJX0VSUl9ST09UX01V TFRJX1VOQ09SX1JDVikpCiAJCQllX2luZm8uZmxhZ3MgfD0gQUVSX01VTFRJX0VSUk9SX1ZB TElEX0ZMQUc7CiAJCWlmICghKHNfZGV2aWNlID0gZmluZF9zb3VyY2VfZGV2aWNlKHBfZGV2 aWNlLT5wb3J0LCBpZCkpKSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXMtPmNhbid0IGZp bmQgZGV2aWNlIG9mIElEJTA0eFxuIiwKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzLT5jYW4n dCBmaW5kIGRldmljZSBvZiBJRCUwNHhcbiIsCiAJCQkJX19mdW5jX18sIGlkKTsKIAkJCWNv bnRpbnVlOwogCQl9CkBAIC03NjUsNCArNzYzLDQgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHBj aV9lbmFibGVfcGNpZV9lcnJvcl9yZXBvcnRpbmcpOwogRVhQT1JUX1NZTUJPTF9HUEwocGNp X2Rpc2FibGVfcGNpZV9lcnJvcl9yZXBvcnRpbmcpOwogRVhQT1JUX1NZTUJPTF9HUEwocGNp X2NsZWFudXBfYWVyX3VuY29ycmVjdF9lcnJvcl9zdGF0dXMpOwotCitFWFBPUlRfU1lNQk9M X0dQTChwY2lfY2xlYW51cF9hZXJfY29ycmVjdF9lcnJvcl9zdGF0dXMpOwpkaWZmIC11IC0t bmV3LWZpbGUgLS1yZWN1cnNpdmUgbGludXgtMi42LjI5LjYub3JpZy9kcml2ZXJzL3BjaS9w Y2llL3BvcnRkcnZfY29yZS5jIGxpbnV4LTIuNi4yOS42Lm1vZC9kcml2ZXJzL3BjaS9wY2ll L3BvcnRkcnZfY29yZS5jCi0tLSBsaW51eC0yLjYuMjkuNi5vcmlnL2RyaXZlcnMvcGNpL3Bj aWUvcG9ydGRydl9jb3JlLmMJMjAwOS0wNy0wMiAxNjo0MToyMC4wMDAwMDAwMDAgLTA3MDAK KysrIGxpbnV4LTIuNi4yOS42Lm1vZC9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnZfY29yZS5j CTIwMDktMDctMjEgMTE6Mjg6MTguMDAwMDAwMDAwIC0wNzAwCkBAIC0yMTUsNyArMjE1LDcg QEAKIAlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIHBvcyArIFBDSUVfQ0FQQUJJTElUSUVT X1JFRywgJnJlZyk7CiAJdHlwZSA9IChyZWcgPj4gNCkgJiBQT1JUX1RZUEVfTUFTSzsKIAlp ZiAoCXR5cGUgPT0gUENJRV9SQ19QT1JUIHx8IHR5cGUgPT0gUENJRV9TV19VUFNUUkVBTV9Q T1JUIHx8Ci0JCXR5cGUgPT0gUENJRV9TV19ET1dOU1RSRUFNX1BPUlQgKQorCQl0eXBlID09 IFBDSUVfU1dfRE9XTlNUUkVBTV9QT1JUIHx8IHR5cGUgPT0gUENJRV9BTllfUE9SVCApCiAJ CXJldHVybiAwOwogCiAJcmV0dXJuIC1FTk9ERVY7CmRpZmYgLXUgLS1uZXctZmlsZSAtLXJl Y3Vyc2l2ZSBsaW51eC0yLjYuMjkuNi5vcmlnL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9w Y2kuYyBsaW51eC0yLjYuMjkuNi5tb2QvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2X3BjaS5j Ci0tLSBsaW51eC0yLjYuMjkuNi5vcmlnL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9wY2ku YwkyMDA5LTA3LTAyIDE2OjQxOjIwLjAwMDAwMDAwMCAtMDcwMAorKysgbGludXgtMi42LjI5 LjYubW9kL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9wY2kuYwkyMDA5LTA3LTIxIDExOjI4 OjE4LjAwMDAwMDAwMCAtMDcwMApAQCAtMzIsNiArMzIsOCBAQAogLyogZ2xvYmFsIGRhdGEg Ki8KIHN0YXRpYyBjb25zdCBjaGFyIGRldmljZV9uYW1lW10gPSAicGNpZXBvcnQtZHJpdmVy IjsKIAorZXh0ZXJuIGludCBwY2lfY2xlYW51cF9hZXJfY29ycmVjdF9lcnJvcl9zdGF0dXMo c3RydWN0IHBjaV9kZXYgKmRldik7CisKIHN0YXRpYyBpbnQgcGNpZV9wb3J0ZHJ2X3NhdmVf Y29uZmlnKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJcmV0dXJuIHBjaV9zYXZlX3N0YXRl KGRldik7CkBAIC05Nyw2ICs5OSwxMyBAQAogCiAJcGNpZV9wb3J0ZHJ2X3NhdmVfY29uZmln KGRldik7CiAKKwlkZXYtPmVycm9yX3N0YXRlID0gcGNpX2NoYW5uZWxfaW9fbm9ybWFsOwor CXBjaV9jbGVhbnVwX2Flcl91bmNvcnJlY3RfZXJyb3Jfc3RhdHVzKGRldik7CisJcGNpX2Ns ZWFudXBfYWVyX2NvcnJlY3RfZXJyb3Jfc3RhdHVzKGRldik7CisJcGNpX2VuYWJsZV9wY2ll X2Vycm9yX3JlcG9ydGluZyhkZXYpOworCXBjaV9jbGVhbnVwX2Flcl91bmNvcnJlY3RfZXJy b3Jfc3RhdHVzKGRldik7CisJcGNpX2NsZWFudXBfYWVyX2NvcnJlY3RfZXJyb3Jfc3RhdHVz KGRldik7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjU3LDEwICsyNjYsMTMgQEAKIC8qCiAg KiBMSU5VWCBEZXZpY2UgRHJpdmVyIE1vZGVsCiAgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qg cGNpX2RldmljZV9pZCBwb3J0X3BjaV9pZHNbXSA9IHsgeworc3RhdGljIGNvbnN0IHN0cnVj dCBwY2lfZGV2aWNlX2lkIHBvcnRfcGNpX2lkc1tdID0geyAKIAkvKiBoYW5kbGUgYW55IFBD SS1FeHByZXNzIHBvcnQgKi8KLQlQQ0lfREVWSUNFX0NMQVNTKCgoUENJX0NMQVNTX0JSSURH RV9QQ0kgPDwgOCkgfCAweDAwKSwgfjApLAotCX0sIHsgLyogZW5kOiBhbGwgemVyb2VzICov IH0KKwl7IFBDSV9ERVZJQ0UoMHgxOTU3LCAweDcwMTEpLH0sCisJeyBQQ0lfREVWSUNFKDB4 MTk1NywgMHgwMDQxKSx9LAorCXsgUENJX0RFVklDRSgweDE5NTcsIDB4MDA0MCksfSwKKwl7 IFBDSV9ERVZJQ0VfQ0xBU1MoKChQQ0lfQ0xBU1NfQlJJREdFX1BDSSA8PCA4KSB8IDB4MDAp LCB+MCksIH0sCisJeyAvKiBlbmQ6IGFsbCB6ZXJvZXMgKi8gfQogfTsKIE1PRFVMRV9ERVZJ Q0VfVEFCTEUocGNpLCBwb3J0X3BjaV9pZHMpOwogCkBAIC0yNzMsNyArMjg1LDcgQEAKIAog c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHBjaWVfcG9ydGRyaXZlciA9IHsKIAkubmFtZQkJ PSAoY2hhciAqKWRldmljZV9uYW1lLAotCS5pZF90YWJsZQk9ICZwb3J0X3BjaV9pZHNbMF0s CisJLmlkX3RhYmxlCT0gcG9ydF9wY2lfaWRzLAogCiAJLnByb2JlCQk9IHBjaWVfcG9ydGRy dl9wcm9iZSwKIAkucmVtb3ZlCQk9IHBjaWVfcG9ydGRydl9yZW1vdmUsCmRpZmYgLXUgLS1u ZXctZmlsZSAtLXJlY3Vyc2l2ZSBsaW51eC0yLjYuMjkuNi5vcmlnL2RyaXZlcnMvcnRjL0tj b25maWcgbGludXgtMi42LjI5LjYubW9kL2RyaXZlcnMvcnRjL0tjb25maWcKLS0tIGxpbnV4 LTIuNi4yOS42Lm9yaWcvZHJpdmVycy9ydGMvS2NvbmZpZwkyMDA5LTA3LTAyIDE2OjQxOjIw LjAwMDAwMDAwMCAtMDcwMAorKysgbGludXgtMi42LjI5LjYubW9kL2RyaXZlcnMvcnRjL0tj b25maWcJMjAwOS0wNy0yMSAxMToyODoxOC4wMDAwMDAwMDAgLTA3MDAKQEAgLTE1Niw2ICsx NTYsMTcgQEAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxl LiBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgcnRjLWRzMTM3NC4KIAor Y29uZmlnIFJUQ19EUlZfRFMxMzc1CisJdHJpc3RhdGUgIkRhbGxhcy9NYXhpbSBEUzEzNzUi CisJZGVwZW5kcyBvbiBSVENfQ0xBU1MgJiYgSTJDCisJaGVscAorCSAgSWYgeW91IHNheSB5 ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIERhbGxhcyBTZW1pY29uZHVjdG9yCisJICBE UzEzNzUgcmVhbC10aW1lIGNsb2NrIGNoaXBzLiAgSWYgYW4gaW50ZXJydXB0IGlzIGFzc29j aWF0ZWQKKwkgIHdpdGggdGhlIGRldmljZSwgdGhlIGFsYXJtIGZ1bmN0aW9uYWxpdHkgaXMg c3VwcG9ydGVkLgorCisJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1v ZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBydGMtZHMxMzc1 LgorCiBjb25maWcgUlRDX0RSVl9EUzE2NzIKIAl0cmlzdGF0ZSAiRGFsbGFzL01heGltIERT MTY3MiIKIAloZWxwCmRpZmYgLXUgLS1uZXctZmlsZSAtLXJlY3Vyc2l2ZSBsaW51eC0yLjYu MjkuNi5vcmlnL2RyaXZlcnMvcnRjL01ha2VmaWxlIGxpbnV4LTIuNi4yOS42Lm1vZC9kcml2 ZXJzL3J0Yy9NYWtlZmlsZQotLS0gbGludXgtMi42LjI5LjYub3JpZy9kcml2ZXJzL3J0Yy9N YWtlZmlsZQkyMDA5LTA3LTAyIDE2OjQxOjIwLjAwMDAwMDAwMCAtMDcwMAorKysgbGludXgt Mi42LjI5LjYubW9kL2RyaXZlcnMvcnRjL01ha2VmaWxlCTIwMDktMDctMjEgMTE6Mjg6MTgu MDAwMDAwMDAwIC0wNzAwCkBAIC0zMCw2ICszMCw3IEBACiBvYmotJChDT05GSUdfUlRDX0RS Vl9EUzEzMDUpCSs9IHJ0Yy1kczEzMDUubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfRFMxMzA3 KQkrPSBydGMtZHMxMzA3Lm8KIG9iai0kKENPTkZJR19SVENfRFJWX0RTMTM3NCkJKz0gcnRj LWRzMTM3NC5vCitvYmotJChDT05GSUdfUlRDX0RSVl9EUzEzNzUpCSs9IHJ0Yy1kczEzNzUu bwogb2JqLSQoQ09ORklHX1JUQ19EUlZfRFMxMzkwKQkrPSBydGMtZHMxMzkwLm8KIG9iai0k KENPTkZJR19SVENfRFJWX0RTMTUxMSkJKz0gcnRjLWRzMTUxMS5vCiBvYmotJChDT05GSUdf UlRDX0RSVl9EUzE1NTMpCSs9IHJ0Yy1kczE1NTMubwpkaWZmIC11IC0tbmV3LWZpbGUgLS1y ZWN1cnNpdmUgbGludXgtMi42LjI5LjYub3JpZy9kcml2ZXJzL3J0Yy9ydGMtZHMxMzc1LmMg bGludXgtMi42LjI5LjYubW9kL2RyaXZlcnMvcnRjL3J0Yy1kczEzNzUuYwotLS0gbGludXgt Mi42LjI5LjYub3JpZy9kcml2ZXJzL3J0Yy9ydGMtZHMxMzc1LmMJMTk2OS0xMi0zMSAxNzow MDowMC4wMDAwMDAwMDAgLTA3MDAKKysrIGxpbnV4LTIuNi4yOS42Lm1vZC9kcml2ZXJzL3J0 Yy9ydGMtZHMxMzc1LmMJMjAwOS0wNy0yMSAxMToyODoxOC4wMDAwMDAwMDAgLTA3MDAKQEAg LTAsMCArMSwyNzYgQEAKKy8qCisgKiBkcml2ZXJzL3J0Yy9kczEzNzUuYworICoKKyAqIFJU QyBkcml2ZXIgZm9yIHRoZSBNYXhpbS9EYWxsYXMgRFMxMzc1IFJlYWwtVGltZSBDbG9jawor ICoKKyAqIEF1dGhvcjogQWppdCBQcmVtIDxhaml0LnByZW1AZW1lcnNvbi5jb20+CisgKgor ICogQmFzZWQgb24gdmFyaW91cyBSVEMgZHJpdmVycyAKKyAqCisgKiBUaGlzIHByb2dyYW0g aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2Rp ZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAq IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21v ZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFi Lmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0 Lmg+CisjaW5jbHVkZSA8bGludXgvcnRjLmg+CisjaW5jbHVkZSA8bGludXgvYmNkLmg+CisK KyNpbmNsdWRlIDxhc20vdGltZS5oPgorCisjZGVmaW5lIERTMTM3NV9TRUNPTkRTX1JFR0lT VEVSICAgICAgIDB4MDAKKyNkZWZpbmUgRFMxMzc1X01JTlVURVNfUkVHSVNURVIgICAgICAg MHgwMQorI2RlZmluZSBEUzEzNzVfSE9VUlNfUkVHSVNURVIgICAgICAgICAweDAyCisjZGVm aW5lIERTMTM3NV9EQVlfUkVHSVNURVIgICAgICAgICAgIDB4MDMKKyNkZWZpbmUgRFMxMzc1 X0RBVEVfUkVHSVNURVIgICAgICAgICAgMHgwNAorI2RlZmluZSBEUzEzNzVfTU9OVEhfUkVH SVNURVIgICAgICAgICAweDA1CisjZGVmaW5lIERTMTM3NV9ZRUFSX1JFR0lTVEVSICAgICAg ICAgIDB4MDYKKyNkZWZpbmUgRFMxMzc1X0NFTlRVUllfUkVHSVNURVIgICAgICAgMHgwNQor I2RlZmluZSBEUzEzNzVfQ09OVFJPTF9SRUdJU1RFUiAgICAgICAweDBFCisjZGVmaW5lIERT MTM3NV9TVEFUVVNfUkVHSVNURVIgICAgICAgIDB4MEYKKworI2RlZmluZSBEUzEzNzVfMTJI T1VSX01PREVfRkxBRyAgICAgICAweDQwCisjZGVmaW5lIERTMTM3NV9QTV9IT1VSX0ZMQUcg ICAgICAgICAgIDB4MjAKKyNkZWZpbmUgRFMxMzc1X0JJVF9DRU5UVVJZICAgICAgICAgICAg MHg4MAorCisjZGVmaW5lIERTMTM3NV9DTE9DS19FTkFCTEUJCTB4ODAKKworI2RlZmluZQlE UzEzNzVfRFJWX05BTUUJCSJkczEzNzUiCisKKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVy IGRzMTM3NV9kcml2ZXI7CisKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10g PSB7IDB4NjgsIEkyQ19DTElFTlRfRU5EIH07CisKK0kyQ19DTElFTlRfSU5TTU9EXzEoZHMx Mzc1KTsKKworc3RydWN0IGRzMTM3NV9kYXRhIHsKKwl1OAlyZWdfYWRkcjsKKwl1OAlyZWdz WzhdOworCXN0cnVjdCBpMmNfbXNnCSAgbXNnWzJdOworCXN0cnVjdCBpMmNfY2xpZW50IGNs aWVudDsKKwlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjOworfTsKKworaW50IGRzMTM3NV9nZXRf cnRjX3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnQpCit7Cisg ICAgICAgIHN0cnVjdCBkczEzNzVfZGF0YSAgICpkczEzNzUgPSBkZXZfZ2V0X2RydmRhdGEo ZGV2KTsKKyAgICAgICAgaW50ICAgICAgICAgICAgIHRtcDsKKworICAgICAgICAvKiByZWFk IHRoZSBSVEMgcmVnaXN0ZXJzIGFsbCBhdCBvbmNlICovCisgICAgICAgIGRzMTM3NS0+bXNn WzFdLmZsYWdzID0gSTJDX01fUkQ7CisgICAgICAgIGRzMTM3NS0+bXNnWzFdLmxlbiA9IDc7 CisKKyAgICAgICAgdG1wID0gaTJjX3RyYW5zZmVyKGRzMTM3NS0+Y2xpZW50LmFkYXB0ZXIs IGRzMTM3NS0+bXNnLCAyKTsKKyAgICAgICAgaWYgKHRtcCAhPSAyKSB7CisgICAgICAgICAg ICAgICAgZGV2X2VycihkZXYsICIlcyBlcnJvciAlZFxuIiwgInJlYWQiLCB0bXApOworICAg ICAgICAgICAgICAgIHJldHVybiAtRUlPOworICAgICAgICB9CisKKyAgICAgICAgZGV2X2Ri ZyhkZXYsICIlczogJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICJyZWFkIiwKKyAgICAgICAgICAgICAgICAgICAgICAg IGRzMTM3NS0+cmVnc1swXSwgZHMxMzc1LT5yZWdzWzFdLAorICAgICAgICAgICAgICAgICAg ICAgICAgZHMxMzc1LT5yZWdzWzJdLCBkczEzNzUtPnJlZ3NbM10sCisgICAgICAgICAgICAg ICAgICAgICAgICBkczEzNzUtPnJlZ3NbNF0sIGRzMTM3NS0+cmVnc1s1XSwKKyAgICAgICAg ICAgICAgICAgICAgICAgIGRzMTM3NS0+cmVnc1s2XSk7CisKKyAgICAgICAgdC0+dG1fc2Vj ID0gYmNkMmJpbihkczEzNzUtPnJlZ3NbRFMxMzc1X1NFQ09ORFNfUkVHSVNURVJdICYgMHg3 Zik7CisgICAgICAgIHQtPnRtX21pbiA9IGJjZDJiaW4oZHMxMzc1LT5yZWdzW0RTMTM3NV9N SU5VVEVTX1JFR0lTVEVSXSAmIDB4N2YpOworICAgICAgICB0bXAgPSBkczEzNzUtPnJlZ3Nb RFMxMzc1X0hPVVJTX1JFR0lTVEVSXSAmIDB4M2Y7CisgICAgICAgIHQtPnRtX2hvdXIgPSBi Y2QyYmluKHRtcCk7CisgICAgICAgIHQtPnRtX3dkYXkgPSBiY2QyYmluKGRzMTM3NS0+cmVn c1tEUzEzNzVfREFZX1JFR0lTVEVSXSAmIDB4MDcpIC0gMTsKKyAgICAgICAgdC0+dG1fbWRh eSA9IGJjZDJiaW4oZHMxMzc1LT5yZWdzW0RTMTM3NV9EQVRFX1JFR0lTVEVSXSAmIDB4M2Yp OworICAgICAgICB0bXAgPSBkczEzNzUtPnJlZ3NbRFMxMzc1X01PTlRIX1JFR0lTVEVSXSAm IDB4MWY7CisgICAgICAgIHQtPnRtX21vbiA9IGJjZDJiaW4odG1wKSAtIDE7CisKKyAgICAg ICAgLyogYXNzdW1lIDIwWVkgbm90IDE5WVksIGFuZCBpZ25vcmUgRFMxMzc1X0JJVF9DRU5U VVJZICovCisgICAgICAgIHQtPnRtX3llYXIgPSBiY2QyYmluKGRzMTM3NS0+cmVnc1tEUzEz NzVfWUVBUl9SRUdJU1RFUl0pICsgMTAwOworCisgICAgICAgIGRldl9kYmcoZGV2LCAiJXMg c2Vjcz0lZCwgbWlucz0lZCwgIgorICAgICAgICAgICAgICAgICJob3Vycz0lZCwgbWRheT0l ZCwgbW9uPSVkLCB5ZWFyPSVkLCB3ZGF5PSVkXG4iLAorICAgICAgICAgICAgICAgICJyZWFk IiwgdC0+dG1fc2VjLCB0LT50bV9taW4sCisgICAgICAgICAgICAgICAgdC0+dG1faG91ciwg dC0+dG1fbWRheSwKKyAgICAgICAgICAgICAgICB0LT50bV9tb24sIHQtPnRtX3llYXIsIHQt PnRtX3dkYXkpOworCisgICAgICAgIHJldHVybiAwOworfQorCitpbnQgZHMxMzc1X3NldF9y dGNfdGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfdGltZSAqdCkKK3sKKyAg ICAgICAgc3RydWN0IGRzMTM3NV9kYXRhICAgKmRzMTM3NSA9IGRldl9nZXRfZHJ2ZGF0YShk ZXYpOworICAgICAgICBpbnQgICAgICAgICAgICAgcmVzdWx0OworICAgICAgICBpbnQgICAg ICAgICAgICAgdG1wOworICAgICAgICB1OCAgICAgICAgICAgICAgKmJ1ZiA9IGRzMTM3NS0+ cmVnczsKKworICAgICAgICBkZXZfZGJnKGRldiwgIiVzIHNlY3M9JWQsIG1pbnM9JWQsICIK KyAgICAgICAgICAgICAgICAiaG91cnM9JWQsIG1kYXk9JWQsIG1vbj0lZCwgeWVhcj0lZCwg d2RheT0lZFxuIiwKKyAgICAgICAgICAgICAgICAid3JpdGUiLCB0LT50bV9zZWMsIHQtPnRt X21pbiwKKyAgICAgICAgICAgICAgICB0LT50bV9ob3VyLCB0LT50bV9tZGF5LAorICAgICAg ICAgICAgICAgIHQtPnRtX21vbiwgdC0+dG1feWVhciwgdC0+dG1fd2RheSk7CisKKyAgICAg ICAgKmJ1ZisrID0gMDsgICAgICAgICAgICAgLyogZmlyc3QgcmVnaXN0ZXIgYWRkciAqLwor ICAgICAgICBidWZbRFMxMzc1X1NFQ09ORFNfUkVHSVNURVJdID0gYmluMmJjZCh0LT50bV9z ZWMpOworICAgICAgICBidWZbRFMxMzc1X01JTlVURVNfUkVHSVNURVJdID0gYmluMmJjZCh0 LT50bV9taW4pOworICAgICAgICBidWZbRFMxMzc1X0hPVVJTX1JFR0lTVEVSXSA9IGJpbjJi Y2QodC0+dG1faG91cik7CisgICAgICAgIGJ1ZltEUzEzNzVfREFZX1JFR0lTVEVSXSA9IGJp bjJiY2QodC0+dG1fd2RheSArIDEpOworICAgICAgICBidWZbRFMxMzc1X0RBVEVfUkVHSVNU RVJdID0gYmluMmJjZCh0LT50bV9tZGF5KTsKKyAgICAgICAgYnVmW0RTMTM3NV9NT05USF9S RUdJU1RFUl0gPSBiaW4yYmNkKHQtPnRtX21vbiArIDEpOworCisgICAgICAgIC8qIGFzc3Vt ZSAyMFlZIG5vdCAxOVlZICovCisgICAgICAgIHRtcCA9IHQtPnRtX3llYXIgLSAxMDA7Cisg ICAgICAgIGJ1ZltEUzEzNzVfWUVBUl9SRUdJU1RFUl0gPSBiaW4yYmNkKHRtcCk7CisKKyAg ICAgICAgYnVmW0RTMTM3NV9NT05USF9SRUdJU1RFUl0gfD0gRFMxMzc1X0JJVF9DRU5UVVJZ OworCisgICAgICAgIGRzMTM3NS0+bXNnWzFdLmZsYWdzID0gMDsKKyAgICAgICAgZHMxMzc1 LT5tc2dbMV0ubGVuID0gODsKKworICAgICAgICBkZXZfZGJnKGRldiwgIiVzOiAlMDJ4ICUw MnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLAorICAgICAgICAgICAgICAgICJ3cml0 ZSIsIGJ1ZlswXSwgYnVmWzFdLCBidWZbMl0sIGJ1ZlszXSwKKyAgICAgICAgICAgICAgICBi dWZbNF0sIGJ1Zls1XSwgYnVmWzZdKTsKKworICAgICAgICByZXN1bHQgPSBpMmNfdHJhbnNm ZXIoZHMxMzc1LT5jbGllbnQuYWRhcHRlciwgJmRzMTM3NS0+bXNnWzFdLCAxKTsKKworICAg ICAgICBpZiAocmVzdWx0ICE9IDEpIHsKKyAgICAgICAgICAgICAgICBkZXZfZXJyKGRldiwg IiVzIGVycm9yICVkXG4iLCAid3JpdGUiLCB0bXApOworICAgICAgICAgICAgICAgIHJldHVy biAtRUlPOworICAgICAgICB9CisgICAgICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9p ZCBkczEzNzVfaW5pdF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlz MzIgdmFsOworCisJLyogRW5hYmxlIGNsb2NrICovCisJdmFsID0gMHg4NDsKKwlpMmNfc21i dXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgRFMxMzc1X0NPTlRST0xfUkVHSVNURVIsIHZh bCk7CisKKwkvKiBDbGVhciBzdGF0dXMgKi8KKwl2YWwgPSAwOworCWkyY19zbWJ1c193cml0 ZV9ieXRlX2RhdGEoY2xpZW50LCBEUzEzNzVfU1RBVFVTX1JFR0lTVEVSLCB2YWwpOworCisJ LyogRW5zdXJlIHRoYXQgZGV2aWNlIGlzIHNldCBpbiAyNC1ob3VyIG1vZGUgKi8KKwl2YWwg PSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBEUzEzNzVfSE9VUlNfUkVHSVNU RVIpOworCWlmICgodmFsID49IDApICYmICh2YWwgJiAoMSA8PCA2KSkpCisJCWkyY19zbWJ1 c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBEUzEzNzVfSE9VUlNfUkVHSVNURVIsCisJCQkJ CSAgdmFsICYgMHgzZik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRjX2NsYXNzX29w cyBkczEzNzVfcnRjX29wcyA9IHsKKyAgICAgICAgLnJlYWRfdGltZSAgICAgID0gZHMxMzc1 X2dldF9ydGNfdGltZSwKKyAgICAgICAgLnNldF90aW1lICAgICAgID0gZHMxMzc1X3NldF9y dGNfdGltZSwKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGRzMTM3NV9kZXRlY3Qoc3Ry dWN0IGkyY19hZGFwdGVyICphZGFwLCBpbnQgYWRkciwgaW50IGtpbmQpCit7CisJc3RydWN0 IGkyY19jbGllbnQgKmNsaWVudDsKKwlzdHJ1Y3QgZHMxMzc1X2RhdGEgKmRhdGE7CisJc3Ry dWN0IHJ0Y19kZXZpY2UgKnJ0YzsKKwlpbnQgcmMgPSAwOworCisJaWYgKCFpMmNfY2hlY2tf ZnVuY3Rpb25hbGl0eShhZGFwLCBJMkNfRlVOQ19JMkMpKQorCQlyZXR1cm4gMDsKKworCWlm ICghKGRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZHMxMzc1X2RhdGEpLCBHRlBfS0VS TkVMKSkpIAorCQlyZXR1cm4gLUVOT01FTTsKKwkKKwljbGllbnQgPSAmZGF0YS0+Y2xpZW50 OworCWNsaWVudC0+YWRkciA9IGFkZHI7CisJY2xpZW50LT5hZGFwdGVyID0gYWRhcDsKKwlj bGllbnQtPmRyaXZlciA9ICZkczEzNzVfZHJpdmVyOworCXN0cmxjcHkoY2xpZW50LT5uYW1l LCBEUzEzNzVfRFJWX05BTUUsIEkyQ19OQU1FX1NJWkUpOworCWNsaWVudC0+ZmxhZ3MgPSAw OworCisgICAgICAgIGRhdGEtPm1zZ1swXS5hZGRyID0gY2xpZW50LT5hZGRyOworICAgICAg ICBkYXRhLT5tc2dbMF0uZmxhZ3MgPSAwOworICAgICAgICBkYXRhLT5tc2dbMF0ubGVuID0g MTsKKyAgICAgICAgZGF0YS0+bXNnWzBdLmJ1ZiA9ICZkYXRhLT5yZWdfYWRkcjsKKworICAg ICAgICBkYXRhLT5tc2dbMV0uYWRkciA9IGNsaWVudC0+YWRkcjsKKyAgICAgICAgZGF0YS0+ bXNnWzFdLmZsYWdzID0gSTJDX01fUkQ7CisgICAgICAgIGRhdGEtPm1zZ1sxXS5sZW4gPSBz aXplb2YoZGF0YS0+cmVncyk7CisgICAgICAgIGRhdGEtPm1zZ1sxXS5idWYgPSBkYXRhLT5y ZWdzOworCisJaWYgKGtpbmQgPT0gMCkgeworCQlraW5kID0gZHMxMzc1OworCQlkYXRhLT5y ZWdfYWRkciA9IDA7IAorCX0KKworCWlmICgocmMgPSBpMmNfYXR0YWNoX2NsaWVudChjbGll bnQpKSAhPSAwKQorCQlnb3RvIGV4aXRfZnJlZTsKKworCXJ0YyA9IHJ0Y19kZXZpY2VfcmVn aXN0ZXIoY2xpZW50LT5uYW1lLCAmY2xpZW50LT5kZXYsCisJCQkJJmRzMTM3NV9ydGNfb3Bz LCBUSElTX01PRFVMRSk7CQorCisgICAgICAgIGlmIChJU19FUlIocnRjKSkgeworICAgICAg ICAgICAgICAgIHJjID0gUFRSX0VSUihydGMpOworICAgICAgICAgICAgICAgIGRldl9lcnIo JmNsaWVudC0+ZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgInVuYWJsZSB0byByZWdp c3RlciB0aGUgY2xhc3MgZGV2aWNlXG4iKTsKKyAgICAgICAgICAgICAgICBnb3RvIGV4aXRf ZGV0YWNoOworICAgICAgICB9CisKKwlkYXRhLT5ydGMgPSBydGM7CisJaTJjX3NldF9jbGll bnRkYXRhKGNsaWVudCwgZGF0YSk7CisJZHMxMzc1X2luaXRfY2xpZW50KGNsaWVudCk7CisK KwlyZXR1cm4gMDsKKworZXhpdF9kZXRhY2g6CisJaTJjX2RldGFjaF9jbGllbnQoY2xpZW50 KTsKK2V4aXRfZnJlZToKKwlrZnJlZShkYXRhKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRp YyBpbnQgX19kZXZpbml0IGRzMTM3NV9hdHRhY2goc3RydWN0IGkyY19hZGFwdGVyICphZGFw KQoreworCXJldHVybiBpMmNfcHJvYmUoYWRhcCwgJmFkZHJfZGF0YSwgZHMxMzc1X2RldGVj dCk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGRzMTM3NV9kZXRhY2goc3RydWN0IGky Y19jbGllbnQgKmNsaWVudCkKK3sKKwlpbnQgcmM7CisgICAgICAgIHN0cnVjdCBkczEzNzVf ZGF0YSAgICpkczEzNzUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3Qg cnRjX2RldmljZSAqcnRjID0gZHMxMzc1LT5ydGM7CisKKwlpZiAocnRjKQorCQlydGNfZGV2 aWNlX3VucmVnaXN0ZXIocnRjKTsKKworCWlmICgocmMgPSBpMmNfZGV0YWNoX2NsaWVudChj bGllbnQpKSkKKwkJcmV0dXJuIHJjOworCisJa2ZyZWUoZHMxMzc1KTsKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGRzMTM3NV9kcml2ZXIgPSB7CisJLmRy aXZlciA9IHsKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJCS5uYW1lID0gRFMxMzc1X0RS Vl9OQU1FLAorCX0sCisJLmF0dGFjaF9hZGFwdGVyID0gZHMxMzc1X2F0dGFjaCwKKwkuZGV0 YWNoX2NsaWVudCA9IF9fZGV2ZXhpdF9wKGRzMTM3NV9kZXRhY2gpLAorfTsKKworc3RhdGlj IGludCBfX2luaXQgZHMxMzc1X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaTJjX2FkZF9kcml2 ZXIoJmRzMTM3NV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHMxMzc1X2V4 aXQodm9pZCkKK3sKKwlpMmNfZGVsX2RyaXZlcigmZHMxMzc1X2RyaXZlcik7Cit9CisKK21v ZHVsZV9pbml0KGRzMTM3NV9pbml0KTsKK21vZHVsZV9leGl0KGRzMTM3NV9leGl0KTsKKwor TU9EVUxFX0FVVEhPUigiQWppdCBQcmVtIDxhaml0LnByZW1AZW1lcnNvbi5jb20+Iik7CitN T0RVTEVfREVTQ1JJUFRJT04oIk1heGltL0RhbGxhcyBEUzEzNzUgUlRDIEkyQyBDbGllbnQg RHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLXUgLS1uZXctZmlsZSAt LXJlY3Vyc2l2ZSBsaW51eC0yLjYuMjkuNi5vcmlnL2RyaXZlcnMvcnRjL3J0Yy1tNDF0ODAu YyBsaW51eC0yLjYuMjkuNi5tb2QvZHJpdmVycy9ydGMvcnRjLW00MXQ4MC5jCi0tLSBsaW51 eC0yLjYuMjkuNi5vcmlnL2RyaXZlcnMvcnRjL3J0Yy1tNDF0ODAuYwkyMDA5LTA3LTAyIDE2 OjQxOjIwLjAwMDAwMDAwMCAtMDcwMAorKysgbGludXgtMi42LjI5LjYubW9kL2RyaXZlcnMv cnRjL3J0Yy1tNDF0ODAuYwkyMDA5LTA3LTIxIDExOjI4OjE4LjAwMDAwMDAwMCAtMDcwMApA QCAtNjcsNiArNjcsMTIgQEAKIAogI2RlZmluZSBEUlZfVkVSU0lPTiAiMC4wNSIKIAorc3Rh dGljIHN0cnVjdCBpMmNfZHJpdmVyIG00MXQ4MF9kcml2ZXI7CisKK3N0YXRpYyB1bnNpZ25l ZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4NjgsIEkyQ19DTElFTlRfRU5EIH07CisKK0ky Q19DTElFTlRfSU5TTU9EXzEobTQxdDgwKTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNf ZGV2aWNlX2lkIG00MXQ4MF9pZFtdID0gewogCXsgIm00MXQ2NSIsIE00MVQ4MF9GRUFUVVJF X0hUIHwgTTQxVDgwX0ZFQVRVUkVfV0QgfSwKIAl7ICJtNDF0ODAiLCBNNDFUODBfRkVBVFVS RV9TUSB9LApAQCAtODQsNiArOTAsNyBAQAogc3RydWN0IG00MXQ4MF9kYXRhIHsKIAl1OCBm ZWF0dXJlczsKIAlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjOworCXN0cnVjdCBpMmNfY2xpZW50 IGNsaWVudDsKIH07CiAKIHN0YXRpYyBpbnQgbTQxdDgwX2dldF9kYXRldGltZShzdHJ1Y3Qg aTJjX2NsaWVudCAqY2xpZW50LApAQCAtNzU2LDI4ICs3NjMsNTYgQEAKICAqCiAgKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioKICAqLwotc3RhdGljIGludCBtNDF0ODBfcHJvYmUoc3RydWN0 IGkyY19jbGllbnQgKmNsaWVudCwKLQkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICpp ZCkKKworc3RhdGljIGludCBtNDF0ODBfZGV0ZWN0KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRh cCwgaW50IGFkZHIsIGludCBraW5kKTsKKworc3RhdGljIGludCBfX2RldmluaXQgbTQxdDgw X2F0dGFjaChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXApCit7CisgICAgICAgIGludCBpZCA9 IGkyY19hZGFwdGVyX2lkKGFkYXApOworCisjaWZkZWYgQ09ORklHX0NQQ0k2MjAwCisgICAg ICAgIGlmIChpZCA9PSAxKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworI2VuZGlmCisK KyAgICAgICAgcmV0dXJuIGkyY19wcm9iZShhZGFwLCAmYWRkcl9kYXRhLCBtNDF0ODBfZGV0 ZWN0KTsKK30KKworc3RhdGljIGludCBtNDF0ODBfZGV0ZWN0KHN0cnVjdCBpMmNfYWRhcHRl ciAqYWRhcCwgaW50IGFkZHIsIGludCBraW5kKQogewogCWludCByYyA9IDA7CiAJc3RydWN0 IHJ0Y19kZXZpY2UgKnJ0YyA9IE5VTEw7CiAJc3RydWN0IHJ0Y190aW1lIHRtOwogCXN0cnVj dCBtNDF0ODBfZGF0YSAqY2xpZW50ZGF0YSA9IE5VTEw7CisJc3RydWN0IGkyY19jbGllbnQg KmNsaWVudDsKIAotCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFw dGVyLCBJMkNfRlVOQ19JMkMKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXAs IEkyQ19GVU5DX0kyQwogCQkJCSAgICAgfCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKSB7 CiAJCXJjID0gLUVOT0RFVjsKIAkJZ290byBleGl0OwogCX0KIAotCWRldl9pbmZvKCZjbGll bnQtPmRldiwKLQkJICJjaGlwIGZvdW5kLCBkcml2ZXIgdmVyc2lvbiAiIERSVl9WRVJTSU9O ICJcbiIpOworLy8JZGV2X2luZm8oJmNsaWVudC0+ZGV2LAorLy8JCSAiY2hpcCBmb3VuZCwg ZHJpdmVyIHZlcnNpb24gIiBEUlZfVkVSU0lPTiAiXG4iKTsKIAogCWNsaWVudGRhdGEgPSBr emFsbG9jKHNpemVvZigqY2xpZW50ZGF0YSksIEdGUF9LRVJORUwpOwogCWlmICghY2xpZW50 ZGF0YSkgewogCQlyYyA9IC1FTk9NRU07CiAJCWdvdG8gZXhpdDsKIAl9CisgICAgICAgIGNs aWVudCA9ICZjbGllbnRkYXRhLT5jbGllbnQ7CisgICAgICAgIGNsaWVudC0+YWRkciA9IGFk ZHI7CisgICAgICAgIGNsaWVudC0+YWRhcHRlciA9IGFkYXA7CisgICAgICAgIGNsaWVudC0+ ZHJpdmVyID0gJm00MXQ4MF9kcml2ZXI7CisgICAgICAgIHN0cmxjcHkoY2xpZW50LT5uYW1l LCAicnRjLW00MXQ4MCIsIEkyQ19OQU1FX1NJWkUpOworICAgICAgICBjbGllbnQtPmZsYWdz ID0gMDsKKworICAgICAgIGlmIChraW5kID09IDApIHsKKyAgICAgICAgICAgICAgICBraW5k ID0gbTQxdDgwOworICAgICAgICB9CisKKyAgICAgICAgaWYgKChyYyA9IGkyY19hdHRhY2hf Y2xpZW50KGNsaWVudCkpICE9IDApCisgICAgICAgICAgICAgICAgZ290byBleGl0OwogCiAJ cnRjID0gcnRjX2RldmljZV9yZWdpc3RlcihjbGllbnQtPm5hbWUsICZjbGllbnQtPmRldiwK IAkJCQkgICZtNDF0ODBfcnRjX29wcywgVEhJU19NT0RVTEUpOwpAQCAtNzg4LDcgKzgyMyw4 IEBACiAJfQogCiAJY2xpZW50ZGF0YS0+cnRjID0gcnRjOwotCWNsaWVudGRhdGEtPmZlYXR1 cmVzID0gaWQtPmRyaXZlcl9kYXRhOworLy8JY2xpZW50ZGF0YS0+ZmVhdHVyZXMgPSBpZC0+ ZHJpdmVyX2RhdGE7CisJY2xpZW50ZGF0YS0+ZmVhdHVyZXMgPSBNNDFUODBfRkVBVFVSRV9I VCB8IE00MVQ4MF9GRUFUVVJFX0JMOyAKIAlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBj bGllbnRkYXRhKTsKIAogCS8qIE1ha2Ugc3VyZSBIVCAoSGFsdCBVcGRhdGUpIGJpdCBpcyBj bGVhcmVkICovCkBAIC04NTksMTAgKzg5NSwxMSBAQAogCXJldHVybiByYzsKIH0KIAotc3Rh dGljIGludCBtNDF0ODBfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0 aWMgaW50IF9fZGV2ZXhpdCBtNDF0ODBfZGV0YWNoKHN0cnVjdCBpMmNfY2xpZW50ICpjbGll bnQpCiB7CiAJc3RydWN0IG00MXQ4MF9kYXRhICpjbGllbnRkYXRhID0gaTJjX2dldF9jbGll bnRkYXRhKGNsaWVudCk7CiAJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YyA9IGNsaWVudGRhdGEt PnJ0YzsKKwlpbnQgcmM7CiAKICNpZmRlZiBDT05GSUdfUlRDX0RSVl9NNDFUODBfV0RUCiAJ aWYgKGNsaWVudGRhdGEtPmZlYXR1cmVzICYgTTQxVDgwX0ZFQVRVUkVfSFQpIHsKQEAgLTg3 Miw2ICs5MDksMTAgQEAKICNlbmRpZgogCWlmIChydGMpCiAJCXJ0Y19kZXZpY2VfdW5yZWdp c3RlcihydGMpOworCisgICAgICBpZiAoKHJjID0gaTJjX2RldGFjaF9jbGllbnQoY2xpZW50 KSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJjOworCiAJa2ZyZWUoY2xpZW50ZGF0YSk7 CiAKIAlyZXR1cm4gMDsKQEAgLTg3OSwxMSArOTIwLDE0IEBACiAKIHN0YXRpYyBzdHJ1Y3Qg aTJjX2RyaXZlciBtNDF0ODBfZHJpdmVyID0gewogCS5kcml2ZXIgPSB7CisJCS5vd25lciA9 IFRISVNfTU9EVUxFLAogCQkubmFtZSA9ICJydGMtbTQxdDgwIiwKIAl9LAotCS5wcm9iZSA9 IG00MXQ4MF9wcm9iZSwKLQkucmVtb3ZlID0gbTQxdDgwX3JlbW92ZSwKLQkuaWRfdGFibGUg PSBtNDF0ODBfaWQsCisvLwkucHJvYmUgPSBtNDF0ODBfcHJvYmUsCisvLwkucmVtb3ZlID0g bTQxdDgwX3JlbW92ZSwKKy8vCS5pZF90YWJsZSA9IG00MXQ4MF9pZCwKKwkuYXR0YWNoX2Fk YXB0ZXIgPSBtNDF0ODBfYXR0YWNoLAorCS5kZXRhY2hfY2xpZW50ID0gX19kZXZleGl0X3Ao bTQxdDgwX2RldGFjaCksCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBtNDF0ODBfcnRjX2lu aXQodm9pZCkKZGlmZiAtdSAtLW5ldy1maWxlIC0tcmVjdXJzaXZlIGxpbnV4LTIuNi4yOS42 Lm9yaWcvZHJpdmVycy9zY3NpL0tjb25maWcgbGludXgtMi42LjI5LjYubW9kL2RyaXZlcnMv c2NzaS9LY29uZmlnCi0tLSBsaW51eC0yLjYuMjkuNi5vcmlnL2RyaXZlcnMvc2NzaS9LY29u ZmlnCTIwMDktMDctMDIgMTY6NDE6MjAuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYu MjkuNi5tb2QvZHJpdmVycy9zY3NpL0tjb25maWcJMjAwOS0wNy0yMSAxMToyODoxOC4wMDAw MDAwMDAgLTA3MDAKQEAgLTI1Nyw3ICsyNTcsNyBAQAogCSAgb3IgYXN5bmMgb24gdGhlIGtl cm5lbCdzIGNvbW1hbmQgbGluZS4KIAogY29uZmlnIFNDU0lfV0FJVF9TQ0FOCi0JdHJpc3Rh dGUKKwl0cmlzdGF0ZSAiV2FpdCB1bnRpbCB0aGUgYXN5bmMgc2NhbnMgYXJlIGNvbXBsZXRl IgogCWRlZmF1bHQgbQogCWRlcGVuZHMgb24gU0NTSQogCWRlcGVuZHMgb24gTU9EVUxFUwpk aWZmIC11IC0tbmV3LWZpbGUgLS1yZWN1cnNpdmUgbGludXgtMi42LjI5LjYub3JpZy9kcml2 ZXJzL3ZtZS9jYTkxYzA0Mi5jIGxpbnV4LTIuNi4yOS42Lm1vZC9kcml2ZXJzL3ZtZS9jYTkx YzA0Mi5jCi0tLSBsaW51eC0yLjYuMjkuNi5vcmlnL2RyaXZlcnMvdm1lL2NhOTFjMDQyLmMJ MTk2OS0xMi0zMSAxNzowMDowMC4wMDAwMDAwMDAgLTA3MDAKKysrIGxpbnV4LTIuNi4yOS42 Lm1vZC9kcml2ZXJzL3ZtZS9jYTkxYzA0Mi5jCTIwMDktMDctMjEgMTE6Mjg6MTguMDAwMDAw MDAwIC0wNzAwCkBAIC0wLDAgKzEsMTkzMSBAQAorLyoKKyAqIGNhOTFjMDQyLmMKKyAqCisg KiBTdXBwb3J0IGZvciB0aGUgVHVuZHJhIFVuaXZlcnNlIEkvSUkgVk1FIEJyaWRnZSBjaGlw cworICoKKyAqIEF1dGhvcnM6IFRvbSBBcm1pc3RlYWQsIEFqaXQgUHJlbSAKKyAqIENvcHly aWdodCAyMDA0LTIwMDcgTW90b3JvbGEgSW5jLgorICoKKyAqIERlcml2ZWQgZnJvbSBjYTkx YzA0Mi5jIGJ5IE1pY2hhZWwgV3lyaWNrCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0Cisg KiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNl IGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVp dGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9u KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5o PgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+Cisj aW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2lu Y2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNs dWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNp bmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5o PgorI2luY2x1ZGUgPGFzbS90aW1lLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVk ZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlICJ2bWVkcnYuaCIKKyNpbmNsdWRlICJjYTkx YzA0Mi5oIgorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFByb3RvdHlwZXMKKy8v LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZXh0ZXJuIHN0cnVjdCB2bWVTaGFyZWREYXRhICp2 bWVjaGlwX2ludGVyYm9hcmRfZGF0YTsKK2V4dGVybiBkbWFfYWRkcl90IHZtZWNoaXBfaW50 ZXJib2FyZF9kYXRhcDsKK2V4dGVybiBjb25zdCBpbnQgdm1lY2hpcF9yZXZpc2lvbjsKK2V4 dGVybiBjb25zdCBpbnQgdm1lY2hpcF9kZXZpZDsKK2V4dGVybiBjb25zdCBpbnQgdm1lY2hp cF9pcnE7CitleHRlcm4gaW50IHZtZWNoaXBfaXJxX292ZXJoZWFkX3RpY2tzOworZXh0ZXJu IHZvaWQgX19pb21lbSAqdm1lY2hpcF9iYXNlYWRkcjsKK2V4dGVybiBjb25zdCBpbnQgdm1l X3Nsb3RudW07CitleHRlcm4gaW50IHZtZV9zeXNjb247CitleHRlcm4gY2hhciAqaW5faW1h Z2VfYmFbXTsKK2V4dGVybiBpbnQgaW5faW1hZ2Vfc2l6ZVtdOworZXh0ZXJuIGludCBpbl9p bWFnZV9tYXBwZWRbXTsKK2V4dGVybiBkbWFfYWRkcl90IGluX2ltYWdlX3BhW107CitleHRl cm4gdW5zaWduZWQgaW50IG91dF9pbWFnZV92YVtdOworZXh0ZXJuIHVuc2lnbmVkIGludCB2 bWVfaXJxbG9nWzhdWzB4MTAwXTsKK2V4dGVybiBzdHJ1Y3QgcGNpX2RldiAqdm1lX3BjaV9k ZXY7CisKK3N0YXRpYyBpbnQgb3V0Q1RMW10gPSB7IExTSTBfQ1RMLCBMU0kxX0NUTCwgTFNJ Ml9DVEwsIExTSTNfQ1RMLAorCUxTSTRfQ1RMLCBMU0k1X0NUTCwgTFNJNl9DVEwsIExTSTdf Q1RMCit9OworCitzdGF0aWMgaW50IG91dEJTW10gPSB7IExTSTBfQlMsIExTSTFfQlMsIExT STJfQlMsIExTSTNfQlMsCisJTFNJNF9CUywgTFNJNV9CUywgTFNJNl9CUywgTFNJN19CUwor fTsKKworc3RhdGljIGludCBvdXRCRFtdID0geyBMU0kwX0JELCBMU0kxX0JELCBMU0kyX0JE LCBMU0kzX0JELAorCUxTSTRfQkQsIExTSTVfQkQsIExTSTZfQkQsIExTSTdfQkQKK307CisK K3N0YXRpYyBpbnQgb3V0VE9bXSA9IHsgTFNJMF9UTywgTFNJMV9UTywgTFNJMl9UTywgTFNJ M19UTywKKwlMU0k0X1RPLCBMU0k1X1RPLCBMU0k2X1RPLCBMU0k3X1RPCit9OworCitzdGF0 aWMgaW50IGluQ1RMW10gPSB7IFZTSTBfQ1RMLCBWU0kxX0NUTCwgVlNJMl9DVEwsIFZTSTNf Q1RMLAorCVZTSTRfQ1RMLCBWU0k1X0NUTCwgVlNJNl9DVEwsIFZTSTdfQ1RMCit9OworCitz dGF0aWMgaW50IGluQlNbXSA9IHsgVlNJMF9CUywgVlNJMV9CUywgVlNJMl9CUywgVlNJM19C UywKKwlWU0k0X0JTLCBWU0k1X0JTLCBWU0k2X0JTLCBWU0k3X0JTCit9OworCitzdGF0aWMg aW50IGluQkRbXSA9IHsgVlNJMF9CRCwgVlNJMV9CRCwgVlNJMl9CRCwgVlNJM19CRCwKKwlW U0k0X0JELCBWU0k1X0JELCBWU0k2X0JELCBWU0k3X0JECit9OworCitzdGF0aWMgaW50IGlu VE9bXSA9IHsgVlNJMF9UTywgVlNJMV9UTywgVlNJMl9UTywgVlNJM19UTywKKwlWU0k0X1RP LCBWU0k1X1RPLCBWU0k2X1RPLCBWU0k3X1RPCit9Oworc3RhdGljIGludCB2bWV2ZWNbN10g PSB7IFYxX1NUQVRJRCwgVjJfU1RBVElELCBWM19TVEFUSUQsIFY0X1NUQVRJRCwKKwlWNV9T VEFUSUQsIFY2X1NUQVRJRCwgVjdfU1RBVElECit9OworCitzdHJ1Y3QgaW50ZXJydXB0X2Nv dW50ZXJzIHsKKwl1bnNpZ25lZCBpbnQgYWNmYWlsOworCXVuc2lnbmVkIGludCBzeXNmYWls OworCXVuc2lnbmVkIGludCBzd19pbnQ7CisJdW5zaWduZWQgaW50IHN3X2lhY2s7CisJdW5z aWduZWQgaW50IHZlcnI7CisJdW5zaWduZWQgaW50IGxlcnI7CisJdW5zaWduZWQgaW50IGxt OworCXVuc2lnbmVkIGludCBtYm94OworCXVuc2lnbmVkIGludCBkbWE7CisJdW5zaWduZWQg aW50IHZpcnFbN107CisJdW5zaWduZWQgaW50IHZvd247Cit9OworCitleHRlcm4gd2FpdF9x dWV1ZV9oZWFkX3QgZG1hX3F1ZXVlW107CitleHRlcm4gd2FpdF9xdWV1ZV9oZWFkX3QgbG1f cXVldWU7CitleHRlcm4gd2FpdF9xdWV1ZV9oZWFkX3QgbWJveF9xdWV1ZTsKKworZXh0ZXJu IHZvaWQgdm1lX3N5bmNfZGF0YSh2b2lkKTsKK2V4dGVybiB2b2lkIHZtZV9mbHVzaF9saW5l KHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuIHZvaWQgdm1lX2ZsdXNoX3JhbmdlKHVuc2lnbmVk IGxvbmcsIHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuIGludCB0Yl9zcGVlZDsKKwordW5zaWdu ZWQgaW50IHVuaV9pcnFfdGltZTsKK3Vuc2lnbmVkIGludCB1bmlfZG1hX2lycV90aW1lOwor dW5zaWduZWQgaW50IHVuaV9sbV9ldmVudDsKKworc3RhdGljIHNwaW5sb2NrX3QgbG1fbG9j ayA9IFNQSU5fTE9DS19VTkxPQ0tFRDsKKworc3RhdGljIHN0cnVjdCBpbnRlcnJ1cHRfY291 bnRlcnMgSW50ZXJydXB0X2NvdW50ZXJzID0geyAwLCAwLAorCTAsIDAsIDAsIDAsCisJMCwg MCwgMCwKKwl7MCwgMCwgMCwgMCwgMCwgMCwgMH0sCisJMAorfTsKKworI2RlZmluZSByZWFk X3JlZ2lzdGVyKG9mZnNldCkgcmVhZGwodm1lY2hpcF9iYXNlYWRkciArIG9mZnNldCkKKyNk ZWZpbmUgd3JpdGVfcmVnaXN0ZXIodmFsdWUsb2Zmc2V0KSB3cml0ZWwodmFsdWUsIHZtZWNo aXBfYmFzZWFkZHIgKyBvZmZzZXQpCisjZGVmaW5lIHJlYWRfcmVnaXN0ZXJfd29yZChvZmZz ZXQpIHJlYWR3KHZtZWNoaXBfYmFzZWFkZHIgKyBvZmZzZXQpCisjZGVmaW5lIHdyaXRlX3Jl Z2lzdGVyX3dvcmQodmFsdWUsb2Zmc2V0KSB3cml0ZXcodmFsdWUsIHZtZWNoaXBfYmFzZWFk ZHIgKyBvZmZzZXQpCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gIHVuaV9wcm9j aW5mbygpCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2ludCB1bmlfcHJvY2luZm8oY2hh ciAqYnVmKQoreworCWNoYXIgKnA7CisKKwlwID0gYnVmOworCisJcCArPSBzcHJpbnRmKHAs ICJcbiIpOworCXsKKwkJdW5zaWduZWQgbG9uZyBtaXNjX2N0bDsKKworCQltaXNjX2N0bCA9 IHJlYWRfcmVnaXN0ZXIoTUlTQ19DVEwpOworCQlwICs9IHNwcmludGYocCwgIk1JU0NfQ1RM Olx0XHRcdDB4JTA4bHhcbiIsIG1pc2NfY3RsKTsKKwkJcCArPSBzcHJpbnRmKHAsICJWTUUg QnVzIFRpbWUgT3V0Olx0XHQiKTsKKwkJc3dpdGNoICgobWlzY19jdGwgJiBVTklWX0JNX01J U0NfQ1RMX1ZCVE8pID4+CisJCQlVTklWX09GX01JU0NfQ1RMX1ZCVE8pIHsKKwkJY2FzZSAw eDA6CisJCQlwICs9IHNwcmludGYocCwgIkRpc2FibGVkXG4iKTsKKwkJCWJyZWFrOworCQlj YXNlIDB4MToKKwkJCXAgKz0gc3ByaW50ZihwLCAiMTYgdXNcbiIpOworCQkJYnJlYWs7CisJ CWNhc2UgMHgyOgorCQkJcCArPSBzcHJpbnRmKHAsICIzMiB1c1xuIik7CisJCQlicmVhazsK KwkJY2FzZSAweDM6CisJCQlwICs9IHNwcmludGYocCwgIjY0IHVzXG4iKTsKKwkJCWJyZWFr OworCQljYXNlIDB4NDoKKwkJCXAgKz0gc3ByaW50ZihwLCAiMTI4IHVzXG4iKTsKKwkJCWJy ZWFrOworCQljYXNlIDB4NToKKwkJCXAgKz0gc3ByaW50ZihwLCAiMjU2IHVzXG4iKTsKKwkJ CWJyZWFrOworCQljYXNlIDB4NjoKKwkJCXAgKz0gc3ByaW50ZihwLCAiNTEyIHVzXG4iKTsK KwkJCWJyZWFrOworCQljYXNlIDB4NzoKKwkJCXAgKz0gc3ByaW50ZihwLCAiMTAyNCB1c1xu Iik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXAgKz0gc3ByaW50ZihwLCAiUmVzZXJ2 ZWQgVmFsdWUsIFVuZGVmaW5lZFxuIik7CisJCX0KKwkJcCArPSBzcHJpbnRmKHAsICJWTUUg QXJiaXRyYXRpb24gVGltZSBPdXQ6XHQiKTsKKwkJc3dpdGNoICgobWlzY19jdGwgJiBVTklW X0JNX01JU0NfQ1RMX1ZBUkJUTykgPj4KKwkJCVVOSVZfT0ZfTUlTQ19DVExfVkFSQlRPKSB7 CisJCWNhc2UgMHgwOgorCQkJcCArPSBzcHJpbnRmKHAsICJEaXNhYmxlZCIpOworCQkJYnJl YWs7CisJCWNhc2UgMHgxOgorCQkJcCArPSBzcHJpbnRmKHAsICIxNiB1cyIpOworCQkJYnJl YWs7CisJCWNhc2UgMHgyOgorCQkJcCArPSBzcHJpbnRmKHAsICIyNTYgdXMiKTsKKwkJCWJy ZWFrOworCQlkZWZhdWx0OgorCQkJcCArPSBzcHJpbnRmKHAsICJSZXNlcnZlZCBWYWx1ZSwg VW5kZWZpbmVkIik7CisJCX0KKwkJaWYgKG1pc2NfY3RsICYgVU5JVl9CTV9NSVNDX0NUTF9W QVJCKQorCQkJcCArPSBzcHJpbnRmKHAsICIsIFByaW9yaXR5IEFyYml0cmF0aW9uXG4iKTsK KwkJZWxzZQorCQkJcCArPSBzcHJpbnRmKHAsICIsIFJvdW5kIFJvYmluIEFyYml0cmF0aW9u XG4iKTsKKwkJcCArPSBzcHJpbnRmKHAsICJcbiIpOworCX0KKworCXsKKwkJdW5zaWduZWQg aW50IGxtaXNjOworCQl1bnNpZ25lZCBpbnQgY3J0OworCQl1bnNpZ25lZCBpbnQgY3d0Owor CisJCWxtaXNjID0gcmVhZF9yZWdpc3RlcihMTUlTQyk7CisJCXAgKz0gc3ByaW50ZihwLCAi TE1JU0M6XHRcdFx0XHQweCUwOHhcbiIsIGxtaXNjKTsKKwkJY3J0ID0gKGxtaXNjICYgVU5J Vl9CTV9MTUlTQ19DUlQpID4+IFVOSVZfT0ZfTE1JU0NfQ1JUOworCQljd3QgPSAobG1pc2Mg JiBVTklWX0JNX0xNSVNDX0NXVCkgPj4gVU5JVl9PRl9MTUlTQ19DV1Q7CisJCXAgKz0gc3By aW50ZihwLCAiQ291cGxlZCBSZXF1ZXN0IFRpbWVyOlx0XHQiKTsKKwkJc3dpdGNoIChjcnQp IHsKKwkJY2FzZSAweDA6CisJCQlwICs9IHNwcmludGYocCwgIkRpc2FibGVkXG4iKTsKKwkJ CWJyZWFrOworCQljYXNlIDB4MToKKwkJCXAgKz0gc3ByaW50ZihwLCAiMTI4IHVzXG4iKTsK KwkJCWJyZWFrOworCQljYXNlIDB4MjoKKwkJCXAgKz0gc3ByaW50ZihwLCAiMjU2IHVzXG4i KTsKKwkJCWJyZWFrOworCQljYXNlIDB4MzoKKwkJCXAgKz0gc3ByaW50ZihwLCAiNTEyIHVz XG4iKTsKKwkJCWJyZWFrOworCQljYXNlIDB4NDoKKwkJCXAgKz0gc3ByaW50ZihwLCAiMTAy NCB1c1xuIik7CisJCQlicmVhazsKKwkJY2FzZSAweDU6CisJCQlwICs9IHNwcmludGYocCwg IjIwNDggdXNcbiIpOworCQkJYnJlYWs7CisJCWNhc2UgMHg2OgorCQkJcCArPSBzcHJpbnRm KHAsICI0MDk2IHVzXG4iKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcCArPSBzcHJp bnRmKHAsICJSZXNlcnZlZFxuIik7CisJCX0KKwkJcCArPSBzcHJpbnRmKHAsICJDb3VwbGVk IFdpbmRvdyBUaW1lcjpcdFx0Iik7CisJCXN3aXRjaCAoY3d0KSB7CisJCWNhc2UgMHgwOgor CQkJcCArPSBzcHJpbnRmKHAsICJEaXNhYmxlZFxuIik7CisJCQlicmVhazsKKwkJY2FzZSAw eDE6CisJCQlwICs9IHNwcmludGYocCwgIjE2IFBDSSBDbG9ja3NcbiIpOworCQkJYnJlYWs7 CisJCWNhc2UgMHgyOgorCQkJcCArPSBzcHJpbnRmKHAsICIzMiBQQ0kgQ2xvY2tzXG4iKTsK KwkJCWJyZWFrOworCQljYXNlIDB4MzoKKwkJCXAgKz0gc3ByaW50ZihwLCAiNjQgUENJIENs b2Nrc1xuIik7CisJCQlicmVhazsKKwkJY2FzZSAweDQ6CisJCQlwICs9IHNwcmludGYocCwg IjEyOCBQQ0kgQ2xvY2tzXG4iKTsKKwkJCWJyZWFrOworCQljYXNlIDB4NToKKwkJCXAgKz0g c3ByaW50ZihwLCAiMjU2IFBDSSBDbG9ja3NcbiIpOworCQkJYnJlYWs7CisJCWNhc2UgMHg2 OgorCQkJcCArPSBzcHJpbnRmKHAsICI1MTIgUENJIENsb2Nrc1xuIik7CisJCQlicmVhazsK KwkJZGVmYXVsdDoKKwkJCXAgKz0gc3ByaW50ZihwLCAiUmVzZXJ2ZWRcbiIpOworCQl9CisJ CXAgKz0gc3ByaW50ZihwLCAiXG4iKTsKKwl9CisJeworCQl1bnNpZ25lZCBpbnQgbWFzdF9j dGw7CisKKwkJbWFzdF9jdGwgPSByZWFkX3JlZ2lzdGVyKE1BU1RfQ1RMKTsKKwkJcCArPSBz cHJpbnRmKHAsICJNQVNUX0NUTDpcdFx0XHQweCUwOHhcbiIsIG1hc3RfY3RsKTsKKwkJewor CQkJaW50IHJldHJpZXM7CisKKwkJCXJldHJpZXMgPSAoKG1hc3RfY3RsICYgVU5JVl9CTV9N QVNUX0NUTF9NQVhSVFJZKQorCQkJCSAgID4+IFVOSVZfT0ZfTUFTVF9DVExfTUFYUlRSWSkg KiA2NDsKKwkJCXAgKz0gc3ByaW50ZihwLCAiTWF4IFBDSSBNYXN0ZXIgUmV0cmllczpcdFx0 Iik7CisJCQlpZiAocmV0cmllcykKKwkJCQlwICs9IHNwcmludGYocCwgIiVkXG4iLCByZXRy aWVzKTsKKwkJCWVsc2UKKwkJCQlwICs9IHNwcmludGYocCwgIkZvcmV2ZXJcbiIpOworCQl9 CisKKwkJcCArPSBzcHJpbnRmKHAsICJQb3N0ZWQgV3JpdGUgVHJhbnNmZXIgQ291bnQ6XHQi KTsKKwkJc3dpdGNoICgobWFzdF9jdGwgJiBVTklWX0JNX01BU1RfQ1RMX1BXT04pID4+CisJ CQlVTklWX09GX01BU1RfQ1RMX1BXT04pIHsKKwkJY2FzZSAweDA6CisJCQlwICs9IHNwcmlu dGYocCwgIjEyOCBCeXRlc1xuIik7CisJCQlicmVhazsKKwkJY2FzZSAweDE6CisJCQlwICs9 IHNwcmludGYocCwgIjI1NiBCeXRlc1xuIik7CisJCQlicmVhazsKKwkJY2FzZSAweDI6CisJ CQlwICs9IHNwcmludGYocCwgIjUxMiBCeXRlc1xuIik7CisJCQlicmVhazsKKwkJY2FzZSAw eDM6CisJCQlwICs9IHNwcmludGYocCwgIjEwMjQgQnl0ZXNcbiIpOworCQkJYnJlYWs7CisJ CWNhc2UgMHg0OgorCQkJcCArPSBzcHJpbnRmKHAsICIyMDQ4IEJ5dGVzXG4iKTsKKwkJCWJy ZWFrOworCQljYXNlIDB4NToKKwkJCXAgKz0gc3ByaW50ZihwLCAiNDA5NiBCeXRlc1xuIik7 CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXAgKz0gc3ByaW50ZihwLCAiVW5kZWZpbmVk XG4iKTsKKwkJfQorCisJCXAgKz0gc3ByaW50ZihwLCAiVk1FYnVzIFJlcXVlc3QgTGV2ZWw6 XHRcdCIpOworCQlzd2l0Y2ggKChtYXN0X2N0bCAmIFVOSVZfQk1fTUFTVF9DVExfVlJMKSA+ PgorCQkJVU5JVl9PRl9NQVNUX0NUTF9WUkwpIHsKKwkJY2FzZSAweDA6CisJCQlwICs9IHNw cmludGYocCwgIkxldmVsIDBcbiIpOworCQljYXNlIDB4MToKKwkJCXAgKz0gc3ByaW50Zihw LCAiTGV2ZWwgMVxuIik7CisJCWNhc2UgMHgyOgorCQkJcCArPSBzcHJpbnRmKHAsICJMZXZl bCAyXG4iKTsKKwkJY2FzZSAweDM6CisJCQlwICs9IHNwcmludGYocCwgIkxldmVsIDNcbiIp OworCQl9CisJCXAgKz0gc3ByaW50ZihwLCAiVk1FYnVzIFJlcXVlc3QgTW9kZTpcdFx0Iik7 CisJCWlmIChtYXN0X2N0bCAmIFVOSVZfQk1fTUFTVF9DVExfVlJNKQorCQkJcCArPSBzcHJp bnRmKHAsICJGYWlyIFJlcXVlc3QgTW9kZVxuIik7CisJCWVsc2UKKwkJCXAgKz0gc3ByaW50 ZihwLCAiRGVtYW5kIFJlcXVlc3QgTW9kZVxuIik7CisJCXAgKz0gc3ByaW50ZihwLCAiVk1F YnVzIFJlbGVhc2UgTW9kZTpcdFx0Iik7CisJCWlmIChtYXN0X2N0bCAmIFVOSVZfQk1fTUFT VF9DVExfVlJFTCkKKwkJCXAgKz0gc3ByaW50ZihwLCAiUmVsZWFzZSBvbiBSZXF1ZXN0XG4i KTsKKwkJZWxzZQorCQkJcCArPSBzcHJpbnRmKHAsICJSZWxlYXNlIHdoZW4gRG9uZVxuIik7 CisJCXAgKz0gc3ByaW50ZihwLCAiVk1FYnVzIE93bmVyc2hpcCBCaXQ6XHRcdCIpOworCQlp ZiAobWFzdF9jdGwgJiBVTklWX0JNX01BU1RfQ1RMX1ZPV04pCisJCQlwICs9IHNwcmludGYo cCwgIkFjcXVpcmUgYW5kIGhvbGQgVk1FYnVzXG4iKTsKKwkJZWxzZQorCQkJcCArPSBzcHJp bnRmKHAsICJSZWxlYXNlIFZNRWJ1c1xuIik7CisJCXAgKz0gc3ByaW50ZihwLCAiVk1FYnVz IE93bmVyc2hpcCBCaXQgQWNrOlx0Iik7CisJCWlmIChtYXN0X2N0bCAmIFVOSVZfQk1fTUFT VF9DVExfVk9XTl9BQ0spCisJCQlwICs9IHNwcmludGYocCwgIk93bmluZyBWTUVidXNcbiIp OworCQllbHNlCisJCQlwICs9IHNwcmludGYocCwgIk5vdCBPd25pbmcgVk1FYnVzXG4iKTsK KwkJcCArPSBzcHJpbnRmKHAsICJcbiIpOworCX0KKwl7CisJCXVuc2lnbmVkIGludCBtaXNj X3N0YXQ7CisKKwkJbWlzY19zdGF0ID0gcmVhZF9yZWdpc3RlcihNSVNDX1NUQVQpOworCQlw ICs9IHNwcmludGYocCwgIk1JU0NfU1RBVDpcdFx0XHQweCUwOHhcbiIsIG1pc2Nfc3RhdCk7 CisJCXAgKz0gc3ByaW50ZihwLCAiVW5pdmVyc2UgQkJTWTpcdFx0XHQiKTsKKwkJaWYgKG1p c2Nfc3RhdCAmIFVOSVZfQk1fTUlTQ19TVEFUX01ZQkJTWSkKKwkJCXAgKz0gc3ByaW50Zihw LCAiTmVnYXRlZFxuIik7CisJCWVsc2UKKwkJCXAgKz0gc3ByaW50ZihwLCAiQXNzZXJ0ZWRc biIpOworCQlwICs9IHNwcmludGYocCwgIlRyYW5zbWl0IEZJRk86XHRcdFx0Iik7CisJCWlm IChtaXNjX3N0YXQgJiBVTklWX0JNX01JU0NfU1RBVF9UWEZFKQorCQkJcCArPSBzcHJpbnRm KHAsICJFbXB0eVxuIik7CisJCWVsc2UKKwkJCXAgKz0gc3ByaW50ZihwLCAiTm90IGVtcHR5 XG4iKTsKKwkJcCArPSBzcHJpbnRmKHAsICJSZWNlaXZlIEZJRk86XHRcdFx0Iik7CisJCWlm IChtaXNjX3N0YXQgJiBVTklWX0JNX01JU0NfU1RBVF9SWEZFKQorCQkJcCArPSBzcHJpbnRm KHAsICJFbXB0eVxuIik7CisJCWVsc2UKKwkJCXAgKz0gc3ByaW50ZihwLCAiTm90IEVtcHR5 XG4iKTsKKwkJcCArPSBzcHJpbnRmKHAsICJcbiIpOworCX0KKworCXAgKz0gc3ByaW50Zihw LCAiTGF0ZW5jeSBUaW1lcjpcdFx0XHQlMDJkIENsb2Nrc1xuXG4iLAorCQkgICAgIChyZWFk X3JlZ2lzdGVyKFVOSVZfUENJX01JU0MwKSAmCisJCSAgICAgIFVOSVZfQk1fUENJX01JU0Mw X0xUSU1FUikgPj4gVU5JVl9PRl9QQ0lfTUlTQzBfTFRJTUVSKTsKKworCXsKKwkJdW5zaWdu ZWQgaW50IGxpbnRfZW47CisJCXVuc2lnbmVkIGludCBsaW50X3N0YXQ7CisKKwkJbGludF9l biA9IHJlYWRfcmVnaXN0ZXIoTElOVF9FTik7CisJCWxpbnRfc3RhdCA9IHJlYWRfcmVnaXN0 ZXIoTElOVF9TVEFUKTsKKworI2RlZmluZSBSRVBPUlRfSVJRKG5hbWUsZmllbGQpICAgICBc CisgICAgcCArPSBzcHJpbnRmKHAsIChsaW50X2VuICYgVU5JVl9CTV9MSU5UXyMjbmFtZSkg PyAiRW5hYmxlZCIgOiAiTWFza2VkIik7IFwKKyAgICBwICs9IHNwcmludGYocCwgIiwgdHJp Z2dlcmVkICVkIHRpbWVzIiwgSW50ZXJydXB0X2NvdW50ZXJzLmZpZWxkKTsgXAorICAgIHAg Kz0gc3ByaW50ZihwLCAobGludF9zdGF0ICYgVU5JVl9CTV9MSU5UXyMjbmFtZSkgPyAiLCBp cnEgbm93IGFjdGl2ZVxuIiA6ICJcbiIpOworCQlwICs9IHNwcmludGYocCwgIkFDRkFJTCBJ bnRlcnJ1cHQ6XHRcdCIpOworCQlSRVBPUlRfSVJRKEFDRkFJTCwgYWNmYWlsKTsKKwkJcCAr PSBzcHJpbnRmKHAsICJTWVNGQUlMIEludGVycnVwdDpcdFx0Iik7CisJCVJFUE9SVF9JUlEo U1lTRkFJTCwgc3lzZmFpbCk7CisJCXAgKz0gc3ByaW50ZihwLCAiU1dfSU5UIEludGVycnVw dDpcdFx0Iik7CisJCVJFUE9SVF9JUlEoU1dfSU5ULCBzd19pbnQpOworCQlwICs9IHNwcmlu dGYocCwgIlNXX0lBQ0sgSW50ZXJydXB0Olx0XHQiKTsKKwkJUkVQT1JUX0lSUShTV19JQUNL LCBzd19pYWNrKTsKKwkJcCArPSBzcHJpbnRmKHAsICJWRVJSIEludGVycnVwdDpcdFx0XHQi KTsKKwkJUkVQT1JUX0lSUShWRVJSLCB2ZXJyKTsKKwkJcCArPSBzcHJpbnRmKHAsICJMRVJS IEludGVycnVwdDpcdFx0XHQiKTsKKwkJUkVQT1JUX0lSUShMRVJSLCBsZXJyKTsKKwkJcCAr PSBzcHJpbnRmKHAsICJMTSBJbnRlcnJ1cHQ6XHRcdFx0Iik7CisJCVJFUE9SVF9JUlEoTE0s IGxtKTsKKwkJcCArPSBzcHJpbnRmKHAsICJNQk9YIEludGVycnVwdDpcdFx0XHQiKTsKKwkJ UkVQT1JUX0lSUShNQk9YLCBtYm94KTsKKwkJcCArPSBzcHJpbnRmKHAsICJETUEgSW50ZXJy dXB0Olx0XHRcdCIpOworCQlSRVBPUlRfSVJRKERNQSwgZG1hKTsKKwkJcCArPSBzcHJpbnRm KHAsICJWSVJRNyBJbnRlcnJ1cHQ6XHRcdCIpOworCQlSRVBPUlRfSVJRKFZJUlE3LCB2aXJx WzcgLSAxXSk7CisJCXAgKz0gc3ByaW50ZihwLCAiVklSUTYgSW50ZXJydXB0Olx0XHQiKTsK KwkJUkVQT1JUX0lSUShWSVJRNiwgdmlycVs2IC0gMV0pOworCQlwICs9IHNwcmludGYocCwg IlZJUlE1IEludGVycnVwdDpcdFx0Iik7CisJCVJFUE9SVF9JUlEoVklSUTUsIHZpcnFbNSAt IDFdKTsKKwkJcCArPSBzcHJpbnRmKHAsICJWSVJRNCBJbnRlcnJ1cHQ6XHRcdCIpOworCQlS RVBPUlRfSVJRKFZJUlE0LCB2aXJxWzQgLSAxXSk7CisJCXAgKz0gc3ByaW50ZihwLCAiVklS UTMgSW50ZXJydXB0Olx0XHQiKTsKKwkJUkVQT1JUX0lSUShWSVJRMywgdmlycVszIC0gMV0p OworCQlwICs9IHNwcmludGYocCwgIlZJUlEyIEludGVycnVwdDpcdFx0Iik7CisJCVJFUE9S VF9JUlEoVklSUTIsIHZpcnFbMiAtIDFdKTsKKwkJcCArPSBzcHJpbnRmKHAsICJWSVJRMSBJ bnRlcnJ1cHQ6XHRcdCIpOworCQlSRVBPUlRfSVJRKFZJUlExLCB2aXJxWzEgLSAxXSk7CisJ CXAgKz0gc3ByaW50ZihwLCAiVk9XTiBJbnRlcnJ1cHQ6XHRcdFx0Iik7CisJCVJFUE9SVF9J UlEoVk9XTiwgdm93bik7CisJCXAgKz0gc3ByaW50ZihwLCAiXG4iKTsKKyN1bmRlZiBSRVBP UlRfSVJRCisJfQorCXsKKwkJdW5zaWduZWQgbG9uZyB2cmFpX2N0bDsKKworCQl2cmFpX2N0 bCA9IHJlYWRfcmVnaXN0ZXIoVlJBSV9DVEwpOworCQlpZiAodnJhaV9jdGwgJiBVTklWX0JN X1ZSQUlfQ1RMX0VOKSB7CisJCQl1bnNpZ25lZCBpbnQgdnJhaV9iczsKKworCQkJdnJhaV9i cyA9IHJlYWRfcmVnaXN0ZXIoVlJBSV9CUyk7CisJCQlwICs9IHNwcmludGYocCwKKwkJCQkg ICAgICJWTUUgUmVnaXN0ZXIgSW1hZ2U6XHRcdEVuYWJsZWQgYXQgVk1FLUFkZHJlc3MgMHgl eFxuIiwKKwkJCQkgICAgIHZyYWlfYnMpOworCQl9IGVsc2UKKwkJCXAgKz0gc3ByaW50Zihw LCAiVk1FIFJlZ2lzdGVyIEltYWdlOlx0XHREaXNhYmxlZFxuIik7CisJfQorCXsKKwkJdW5z aWduZWQgaW50IHNsc2k7CisKKwkJc2xzaSA9IHJlYWRfcmVnaXN0ZXIoU0xTSSk7CisJCWlm IChzbHNpICYgVU5JVl9CTV9TTFNJX0VOKSB7CisJCQkvKiBOb3QgaW1wbGVtZW50ZWQgKi8K KwkJfSBlbHNlIHsKKwkJCXAgKz0gc3ByaW50ZihwLCAiU3BlY2lhbCBQQ0kgU2xhdmUgSW1h Z2U6XHREaXNhYmxlZFxuIik7CisJCX0KKwl9CisJeworCQlpbnQgaTsKKworCQlmb3IgKGkg PSAwOyBpIDwgKHZtZWNoaXBfcmV2aXNpb24gPiAwID8gOCA6IDQpOyBpKyspIHsKKwkJCXVu c2lnbmVkIGludCBjdGwsIGJzLCBiZCwgdG8sIHZzdGFydCwgdmVuZDsKKworCQkJY3RsID0g cmVhZGwodm1lY2hpcF9iYXNlYWRkciArIG91dENUTFtpXSk7CisJCQlicyA9IHJlYWRsKHZt ZWNoaXBfYmFzZWFkZHIgKyBvdXRCU1tpXSk7CisJCQliZCA9IHJlYWRsKHZtZWNoaXBfYmFz ZWFkZHIgKyBvdXRCRFtpXSk7CisJCQl0byA9IHJlYWRsKHZtZWNoaXBfYmFzZWFkZHIgKyBv dXRUT1tpXSk7CisKKwkJCXZzdGFydCA9IGJzICsgdG87CisJCQl2ZW5kID0gYmQgKyB0bzsK KworCQkJcCArPSBzcHJpbnRmKHAsICJQQ0kgU2xhdmUgSW1hZ2UgJWQ6XHRcdCIsIGkpOwor CQkJaWYgKGN0bCAmIFVOSVZfQk1fTFNJX0NUTF9FTikgeworCQkJCXAgKz0gc3ByaW50Zihw LCAiRW5hYmxlZCIpOworCQkJCWlmIChjdGwgJiBVTklWX0JNX0xTSV9DVExfUFdFTikKKwkJ CQkJcCArPSBzcHJpbnRmKHAsCisJCQkJCQkgICAgICIsIFBvc3RlZCBXcml0ZSBFbmFibGVk XG4iKTsKKwkJCQllbHNlCisJCQkJCXAgKz0gc3ByaW50ZihwLCAiXG4iKTsKKwkJCQlwICs9 IHNwcmludGYocCwKKwkJCQkJICAgICAiXHRcdFx0XHRQQ0kgQWRkcmVzc2VzIGZyb20gMHgl eCB0byAweCV4XG4iLAorCQkJCQkgICAgIGJzLCBiZCk7CisJCQkJcCArPSBzcHJpbnRmKHAs CisJCQkJCSAgICAgIlx0XHRcdFx0Vk1FIEFkZHJlc3NlcyBmcm9tIDB4JXggdG8gMHgleFxu IiwKKwkJCQkJICAgICB2c3RhcnQsIHZlbmQpOworCQkJfSBlbHNlCisJCQkJcCArPSBzcHJp bnRmKHAsICJEaXNhYmxlZFxuIik7CisJCX0KKwkJcCArPSBzcHJpbnRmKHAsICJcbiIpOwor CX0KKwl7CisJCWludCBpOworCQlmb3IgKGkgPSAwOyBpIDwgKHZtZWNoaXBfcmV2aXNpb24g PiAwID8gOCA6IDQpOyBpKyspIHsKKwkJCXVuc2lnbmVkIGludCBjdGwsIGJzLCBiZCwgdG8s IHZzdGFydCwgdmVuZDsKKworCQkJY3RsID0gcmVhZGwodm1lY2hpcF9iYXNlYWRkciArIGlu Q1RMW2ldKTsKKwkJCWJzID0gcmVhZGwodm1lY2hpcF9iYXNlYWRkciArIGluQlNbaV0pOwor CQkJYmQgPSByZWFkbCh2bWVjaGlwX2Jhc2VhZGRyICsgaW5CRFtpXSk7CisJCQl0byA9IHJl YWRsKHZtZWNoaXBfYmFzZWFkZHIgKyBpblRPW2ldKTsKKwkJCXZzdGFydCA9IGJzICsgdG87 CisJCQl2ZW5kID0gYmQgKyB0bzsKKwkJCXAgKz0gc3ByaW50ZihwLCAiVk1FIFNsYXZlIElt YWdlICVkOlx0XHQiLCBpKTsKKwkJCWlmIChjdGwgJiBVTklWX0JNX0xTSV9DVExfRU4pIHsK KwkJCQlwICs9IHNwcmludGYocCwgIkVuYWJsZWQiKTsKKwkJCQlpZiAoY3RsICYgVU5JVl9C TV9MU0lfQ1RMX1BXRU4pCisJCQkJCXAgKz0gc3ByaW50ZihwLAorCQkJCQkJICAgICAiLCBQ b3N0ZWQgV3JpdGUgRW5hYmxlZFxuIik7CisJCQkJZWxzZQorCQkJCQlwICs9IHNwcmludGYo cCwgIlxuIik7CisJCQkJcCArPSBzcHJpbnRmKHAsCisJCQkJCSAgICAgIlx0XHRcdFx0Vk1F IEFkZHJlc3NlcyBmcm9tIDB4JXggdG8gMHgleFxuIiwKKwkJCQkJICAgICBicywgYmQpOwor CQkJCXAgKz0gc3ByaW50ZihwLAorCQkJCQkgICAgICJcdFx0XHRcdFBDSSBBZGRyZXNzZXMg ZnJvbSAweCV4IHRvIDB4JXhcbiIsCisJCQkJCSAgICAgdnN0YXJ0LCB2ZW5kKTsKKwkJCX0g ZWxzZQorCQkJCXAgKz0gc3ByaW50ZihwLCAiRGlzYWJsZWRcbiIpOworCQl9CisJfQorCisJ cmV0dXJuIHAgLSBidWY7Cit9CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gIHVu aV9idXNfZXJyb3JfY2hrKCkKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoraW50IHVuaV9i dXNfZXJyb3JfY2hrKGludCBjbHJmbGFnKQoreworCWludCB0bXA7CisJdG1wID0gcmVhZGwo dm1lY2hpcF9iYXNlYWRkciArIFBDSV9DT01NQU5EKTsKKwlpZiAodG1wICYgMHgwODAwMDAw MCkgewkvLyBTX1RBIGlzIFNldAorCQlpZiAoY2xyZmxhZykKKwkJCXdyaXRlbCh0bXAgfCAw eDA4MDAwMDAwLAorCQkJICAgICAgIHZtZWNoaXBfYmFzZWFkZHIgKyBQQ0lfQ09NTUFORCk7 CisJCXJldHVybiAoMSk7CisJfQorCXJldHVybiAoMCk7Cit9CisKKy8vLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKy8vIEZ1bmN0aW9uICAgOiBETUFfdW5pX2lycWhhbmRsZXIKKy8vIElu cHV0cyAgICAgOiB2b2lkCisvLyBPdXRwdXRzICAgIDogdm9pZAorLy8gRGVzY3JpcHRpb246 IFNhdmVzIERNQSBjb21wbGV0aW9uIHRpbWVzdGFtcCBhbmQgdGhlbiB3YWtlcyB1cCBETUEg cXVldWUKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3N0YXRpYyB2b2lkIERNQV91bmlf aXJxaGFuZGxlcih2b2lkKQoreworCXVuaV9kbWFfaXJxX3RpbWUgPSB1bmlfaXJxX3RpbWU7 CisJd2FrZV91cCgmZG1hX3F1ZXVlWzBdKTsKK30KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorLy8gRnVuY3Rpb24gICA6IExFUlJfdW5pX2lycWhhbmRsZXIKKy8vIElucHV0cyAg ICAgOiB2b2lkCisvLyBPdXRwdXRzICAgIDogdm9pZAorLy8gRGVzY3JpcHRpb246IAorLy8t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorc3RhdGljIHZvaWQgTEVSUl91bmlfaXJxaGFuZGxl cih2b2lkKQoreworCWludCB2YWw7CisKKwl2YWwgPSByZWFkbCh2bWVjaGlwX2Jhc2VhZGRy ICsgREdDUyk7CisKKwlpZiAoISh2YWwgJiAweDAwMDAwODAwKSkgeworCQlwcmludGsoS0VS Tl9FUlIKKwkJICAgICAgICJjYTkxYzA0MjogTEVSUl91bmlfaXJxaGFuZGxlciBETUEgUmVh ZCBFcnJvciBER0NTPSUwOFhcbiIsCisJCSAgICAgICB2YWwpOworCisJfQorfQorCisvLy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBGdW5jdGlvbiAgIDogVkVSUl91bmlfaXJxaGFu ZGxlcgorLy8gSW5wdXRzICAgICA6IHZvaWQKKy8vIE91dHB1dHMgICAgOiB2b2lkCisvLyBE ZXNjcmlwdGlvbjogCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzdGF0aWMgdm9pZCBW RVJSX3VuaV9pcnFoYW5kbGVyKHZvaWQpCit7CisJaW50IHZhbDsKKworCXZhbCA9IHJlYWRs KHZtZWNoaXBfYmFzZWFkZHIgKyBER0NTKTsKKworCWlmICghKHZhbCAmIDB4MDAwMDA4MDAp KSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgImNhOTFjMDQyOiBWRVJSX3VuaV9p cnFoYW5kbGVyIERNQSBSZWFkIEVycm9yIERHQ1M9JTA4WFxuIiwKKwkJICAgICAgIHZhbCk7 CisJfQorCit9CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEZ1bmN0aW9uICAg OiBNQl91bmlfaXJxaGFuZGxlcgorLy8gSW5wdXRzICAgICA6IHZvaWQKKy8vIE91dHB1dHMg ICAgOiB2b2lkCisvLyBEZXNjcmlwdGlvbjogCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CitzdGF0aWMgdm9pZCBNQl91bmlfaXJxaGFuZGxlcihpbnQgbWJveF9tYXNrKQoreworCWlm ICh2bWVjaGlwX2lycV9vdmVyaGVhZF90aWNrcyAhPSAwKSB7CisJCXdha2VfdXAoJm1ib3hf cXVldWUpOworCX0KK30KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gRnVuY3Rp b24gICA6IExNX3VuaV9pcnFoYW5kbGVyCisvLyBJbnB1dHMgICAgIDogdm9pZAorLy8gT3V0 cHV0cyAgICA6IHZvaWQKKy8vIERlc2NyaXB0aW9uOiAKKy8vLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KK3N0YXRpYyB2b2lkIExNX3VuaV9pcnFoYW5kbGVyKGludCBsbV9tYXNrKQorewor CXVuaV9sbV9ldmVudCA9IGxtX21hc2s7CisJd2FrZV91cCgmbG1fcXVldWUpOworfQorCisv Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBGdW5jdGlvbiAgIDogVklSUV91bmlfaXJx aGFuZGxlcgorLy8gSW5wdXRzICAgICA6IHZvaWQKKy8vIE91dHB1dHMgICAgOiB2b2lkCisv LyBEZXNjcmlwdGlvbjogCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzdGF0aWMgdm9p ZCBWSVJRX3VuaV9pcnFoYW5kbGVyKGludCB2aXJxX21hc2spCit7CisJaW50IGlhY2t2ZWMs IGk7CisKKwlmb3IgKGkgPSA3OyBpID4gMDsgaS0tKSB7CisJCWlmICh2aXJxX21hc2sgJiAo MSA8PCBpKSkgeworCQkJSW50ZXJydXB0X2NvdW50ZXJzLnZpcnFbaSAtIDFdKys7CisJCQlp YWNrdmVjID0gcmVhZGwodm1lY2hpcF9iYXNlYWRkciArIHZtZXZlY1tpIC0gMV0pOworCQkJ dm1lX2lycWxvZ1tpXVtpYWNrdmVjXSsrOworCQl9CisJfQorfQorCisvLy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisvLyBGdW5jdGlvbiAgIDogdW5pX2lycWhhbmRsZXIKKy8vIElucHV0 cyAgICAgOiBpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzCisv LyBPdXRwdXRzICAgIDogdm9pZAorLy8gRGVzY3JpcHRpb246IAorLy8tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorc3RhdGljIGlycXJldHVybl90IHVuaV9pcnFoYW5kbGVyKGludCBpcnEs IHZvaWQgKmRldl9pZCkKK3sKKwlsb25nIHN0YXQsIGVuYWJsZTsKKworCWlmIChkZXZfaWQg IT0gdm1lY2hpcF9iYXNlYWRkcikKKwkJcmV0dXJuIElSUV9OT05FOworCisJdW5pX2lycV90 aW1lID0gZ2V0X3RibCgpOworCisJc3RhdCA9IHJlYWRsKHZtZWNoaXBfYmFzZWFkZHIgKyBM SU5UX1NUQVQpOworCXdyaXRlbChzdGF0LCB2bWVjaGlwX2Jhc2VhZGRyICsgTElOVF9TVEFU KTsJLy8gQ2xlYXIgYWxsIHBlbmRpbmcgaW50cworCWVuYWJsZSA9IHJlYWRsKHZtZWNoaXBf YmFzZWFkZHIgKyBMSU5UX0VOKTsKKwlzdGF0ID0gc3RhdCAmIGVuYWJsZTsKKwlpZiAoc3Rh dCAmIDB4MDEwMCkgeworCQlJbnRlcnJ1cHRfY291bnRlcnMuZG1hKys7CisJCURNQV91bmlf aXJxaGFuZGxlcigpOworCX0KKwlpZiAoc3RhdCAmIDB4MDIwMCkgeworCQlJbnRlcnJ1cHRf Y291bnRlcnMubGVycisrOworCQlMRVJSX3VuaV9pcnFoYW5kbGVyKCk7CisJfQorCWlmIChz dGF0ICYgMHgwNDAwKSB7CisJCUludGVycnVwdF9jb3VudGVycy52ZXJyKys7CisJCVZFUlJf dW5pX2lycWhhbmRsZXIoKTsKKwl9CisJaWYgKHN0YXQgJiAweEYwMDAwKSB7CisJCUludGVy cnVwdF9jb3VudGVycy5tYm94Kys7CisJCU1CX3VuaV9pcnFoYW5kbGVyKChzdGF0ICYgMHhG MDAwMCkgPj4gMTYpOworCX0KKwlpZiAoc3RhdCAmIDB4RjAwMDAwKSB7CisJCUludGVycnVw dF9jb3VudGVycy5sbSsrOworCQlMTV91bmlfaXJxaGFuZGxlcigoc3RhdCAmIDB4RjAwMDAw KSA+PiAyMCk7CisJfQorCWlmIChzdGF0ICYgMHgwMDAwRkUpIHsKKwkJVklSUV91bmlfaXJx aGFuZGxlcihzdGF0ICYgMHgwMDAwRkUpOworCX0KKwlpZiAoc3RhdCAmIFVOSVZfQk1fTElO VF9BQ0ZBSUwpIHsKKwkJSW50ZXJydXB0X2NvdW50ZXJzLmFjZmFpbCsrOworCX0KKwlpZiAo c3RhdCAmIFVOSVZfQk1fTElOVF9TWVNGQUlMKSB7CisJCUludGVycnVwdF9jb3VudGVycy5z eXNmYWlsKys7CisJfQorCWlmIChzdGF0ICYgVU5JVl9CTV9MSU5UX1NXX0lOVCkgeworCQlJ bnRlcnJ1cHRfY291bnRlcnMuc3dfaW50Kys7CisJfQorCWlmIChzdGF0ICYgVU5JVl9CTV9M SU5UX1NXX0lBQ0spIHsKKwkJSW50ZXJydXB0X2NvdW50ZXJzLnN3X2lhY2srKzsKKwl9CisJ aWYgKHN0YXQgJiBVTklWX0JNX0xJTlRfVk9XTikgeworCQlJbnRlcnJ1cHRfY291bnRlcnMu dm93bisrOworCX0KKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLy8tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorLy8gRnVuY3Rpb24gICA6IHVuaV9nZW5lcmF0ZV9pcnEKKy8vIERl c2NyaXB0aW9uOiAKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2ludCB1bmlfZ2VuZXJh dGVfaXJxKHZpcnFJbmZvX3QgKiB2bWVJcnEpCit7CisJaW50IHRpbWVvdXQ7CisJaW50IGxv b3B0aW1lb3V0OworCisJdGltZW91dCA9IHZtZUlycS0+d2FpdFRpbWU7CisJaWYgKHRpbWVv dXQgPT0gMCkgeworCQl0aW1lb3V0Kys7CS8vIFdhaXQgYXQgbGVhc3QgMSB0aWNrLi4uCisJ fQorCWxvb3B0aW1lb3V0ID0gSFogLyAyMDsJLy8gdHJ5IGZvciAxLzIwIHNlY29uZAorCisJ dm1lSXJxLT50aW1lT3V0RmxhZyA9IDA7CisKKwkvLyBWYWxpZGF0ZSAmIHNldHVwIHZlY3Rv ciByZWdpc3Rlci4KKwlpZiAodm1lSXJxLT52ZWN0b3IgJiAxKSB7CS8vIFVuaXZlcnNlIGNh biBvbmx5IGdlbmVyYXRlIGV2ZW4gdmVjdG9ycworCQlyZXR1cm4gKC1FSU5WQUwpOworCX0K Kwl3cml0ZWwodm1lSXJxLT52ZWN0b3IgPDwgMjQsIHZtZWNoaXBfYmFzZWFkZHIgKyBTVEFU SUQpOworCisJLy8gQXNzZXJ0IFZNRWJ1cyBJUlEKKwl3cml0ZWwoMSA8PCAodm1lSXJxLT5s ZXZlbCArIDI0KSwgdm1lY2hpcF9iYXNlYWRkciArIFZJTlRfRU4pOworCisJLy8gV2FpdCBm b3Igc3lzY29uIHRvIGRvIGlhY2sKKwl3aGlsZSAocmVhZGwodm1lY2hpcF9iYXNlYWRkciAr IFZJTlRfU1RBVCkgJgorCSAgICAgICAoMSA8PCAodm1lSXJxLT5sZXZlbCArIDI0KSkpIHsK KwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJc2NoZWR1bGVf dGltZW91dChsb29wdGltZW91dCk7CisJCXRpbWVvdXQgPSB0aW1lb3V0IC0gbG9vcHRpbWVv dXQ7CisJCWlmICh0aW1lb3V0IDw9IDApIHsKKwkJCXZtZUlycS0+dGltZU91dEZsYWcgPSAx OworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvLyBDbGVhciBWTUVidXMgSVJRIGJpdAorCXdy aXRlbCgwLCB2bWVjaGlwX2Jhc2VhZGRyICsgVklOVF9FTik7CisKKwlyZXR1cm4gKDApOwor fQorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBGdW5jdGlvbiAgIDogdW5pX3Nl dF9hcmJpdGVyCisvLyBEZXNjcmlwdGlvbjogCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CitpbnQgdW5pX3NldF9hcmJpdGVyKHZtZUFyYml0ZXJDZmdfdCAqIHZtZUFyYikKK3sKKwlp bnQgdGVtcF9jdGwgPSAwOworCWludCB2YnRvID0gMDsKKworCXRlbXBfY3RsID0gcmVhZGwo dm1lY2hpcF9iYXNlYWRkciArIE1JU0NfQ1RMKTsKKwl0ZW1wX2N0bCAmPSAweDAwRkZGRkZG OworCisJaWYgKHZtZUFyYi0+Z2xvYmFsVGltZW91dFRpbWVyID09IDB4RkZGRkZGRkYpIHsK KwkJdmJ0byA9IDc7CisJfSBlbHNlIGlmICh2bWVBcmItPmdsb2JhbFRpbWVvdXRUaW1lciA+ IDEwMjQpIHsKKwkJcmV0dXJuICgtRUlOVkFMKTsKKwl9IGVsc2UgaWYgKHZtZUFyYi0+Z2xv YmFsVGltZW91dFRpbWVyID09IDApIHsKKwkJdmJ0byA9IDA7CisJfSBlbHNlIHsKKwkJdmJ0 byA9IDE7CisJCXdoaWxlICgoMTYgKiAoMSA8PCAodmJ0byAtIDEpKSkgPCB2bWVBcmItPmds b2JhbFRpbWVvdXRUaW1lcikgeworCQkJdmJ0byArPSAxOworCQl9CisJfQorCXRlbXBfY3Rs IHw9ICh2YnRvIDw8IDI4KTsKKworCWlmICh2bWVBcmItPmFyYml0ZXJNb2RlID09IFZNRV9Q UklPUklUWV9NT0RFKSB7CisJCXRlbXBfY3RsIHw9IDEgPDwgMjY7CisJfQorCisJaWYgKHZt ZUFyYi0+YXJiaXRlclRpbWVvdXRGbGFnKSB7CisJCXRlbXBfY3RsIHw9IDIgPDwgMjQ7CisJ fQorCisJd3JpdGVsKHRlbXBfY3RsLCB2bWVjaGlwX2Jhc2VhZGRyICsgTUlTQ19DVEwpOwor CXJldHVybiAoMCk7Cit9CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEZ1bmN0 aW9uICAgOiB1bmlfZ2V0X2FyYml0ZXIKKy8vIERlc2NyaXB0aW9uOiAKKy8vLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KK2ludCB1bmlfZ2V0X2FyYml0ZXIodm1lQXJiaXRlckNmZ190ICog dm1lQXJiKQoreworCWludCB0ZW1wX2N0bCA9IDA7CisJaW50IHZidG8gPSAwOworCisJdGVt cF9jdGwgPSByZWFkbCh2bWVjaGlwX2Jhc2VhZGRyICsgTUlTQ19DVEwpOworCisJdmJ0byA9 ICh0ZW1wX2N0bCA+PiAyOCkgJiAweEY7CisJaWYgKHZidG8gIT0gMCkgeworCQl2bWVBcmIt Pmdsb2JhbFRpbWVvdXRUaW1lciA9ICgxNiAqICgxIDw8ICh2YnRvIC0gMSkpKTsKKwl9CisK KwlpZiAodGVtcF9jdGwgJiAoMSA8PCAyNikpIHsKKwkJdm1lQXJiLT5hcmJpdGVyTW9kZSA9 IFZNRV9QUklPUklUWV9NT0RFOworCX0gZWxzZSB7CisJCXZtZUFyYi0+YXJiaXRlck1vZGUg PSBWTUVfUl9ST0JJTl9NT0RFOworCX0KKworCWlmICh0ZW1wX2N0bCAmICgzIDw8IDI0KSkg eworCQl2bWVBcmItPmFyYml0ZXJUaW1lb3V0RmxhZyA9IDE7CisJfQorCXJldHVybiAoMCk7 Cit9CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEZ1bmN0aW9uICAgOiB1bmlf c2V0X3JlcXVlc3RvcgorLy8gRGVzY3JpcHRpb246IAorLy8tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQoraW50IHVuaV9zZXRfcmVxdWVzdG9yKHZtZVJlcXVlc3RlckNmZ190ICogdm1lUmVx KQoreworCWludCB0ZW1wX2N0bCA9IDA7CisKKwl0ZW1wX2N0bCA9IHJlYWRsKHZtZWNoaXBf YmFzZWFkZHIgKyBNQVNUX0NUTCk7CisJdGVtcF9jdGwgJj0gMHhGRjBGRkZGRjsKKworCWlm ICh2bWVSZXEtPnJlbGVhc2VNb2RlID09IDEpIHsKKwkJdGVtcF9jdGwgfD0gKDEgPDwgMjAp OworCX0KKworCWlmICh2bWVSZXEtPmZhaXJNb2RlID09IDEpIHsKKwkJdGVtcF9jdGwgfD0g KDEgPDwgMjEpOworCX0KKworCXRlbXBfY3RsIHw9ICh2bWVSZXEtPnJlcXVlc3RMZXZlbCA8 PCAyMik7CisKKwl3cml0ZWwodGVtcF9jdGwsIHZtZWNoaXBfYmFzZWFkZHIgKyBNQVNUX0NU TCk7CisJcmV0dXJuICgwKTsKK30KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8g RnVuY3Rpb24gICA6IHVuaV9nZXRfcmVxdWVzdG9yCisvLyBEZXNjcmlwdGlvbjogCisvLy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCitpbnQgdW5pX2dldF9yZXF1ZXN0b3Iodm1lUmVxdWVz dGVyQ2ZnX3QgKiB2bWVSZXEpCit7CisJaW50IHRlbXBfY3RsID0gMDsKKworCXRlbXBfY3Rs ID0gcmVhZGwodm1lY2hpcF9iYXNlYWRkciArIE1BU1RfQ1RMKTsKKworCWlmICh0ZW1wX2N0 bCAmICgxIDw8IDIwKSkgeworCQl2bWVSZXEtPnJlbGVhc2VNb2RlID0gMTsKKwl9CisKKwlp ZiAodGVtcF9jdGwgJiAoMSA8PCAyMSkpIHsKKwkJdm1lUmVxLT5mYWlyTW9kZSA9IDE7CisJ fQorCisJdm1lUmVxLT5yZXF1ZXN0TGV2ZWwgPSAodGVtcF9jdGwgJiAweEMwMDAwMCkgPj4g MjI7CisKKwlyZXR1cm4gKDApOworfQorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisv LyBGdW5jdGlvbiAgIDogdW5pX3NldF9pbl9ib3VuZAorLy8gRGVzY3JpcHRpb246IAorLy8t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoraW50IHVuaV9zZXRfaW5fYm91bmQodm1lSW5XaW5k b3dDZmdfdCAqIHZtZUluKQoreworCWludCB0ZW1wX2N0bCA9IDA7CisJdW5zaWduZWQgaW50 IHdpbjsKKwlzdHJ1Y3QgcGFnZSAqcGFnZSwgKnBlbmQ7CisKKwkvLyBWZXJpZnkgaW5wdXQg ZGF0YQorCXdpbiA9IHZtZUluLT53aW5kb3dOYnI7CisKKwlpZiAod2luID4gNykgCisJCSBy ZXR1cm4gLUVJTlZBTDsKKworICAgICAgICAvKiBGcmVlIHByZXZpb3VzIGFsbG9jYXRpb24g Ki8KKyNpZm5kZWYgQ09ORklHX1ZNRV9CUklER0VfQk9PVE1FTQorICAgICAgICBpZiAoaW5f aW1hZ2VfYmFbd2luXSAhPSBOVUxMKSB7CisjZWxzZQorICAgICAgICBpZiAoKHdpbiAhPSA3 KSAmJiAoaW5faW1hZ2VfYmFbd2luXSAhPSBOVUxMKSkgeworI2VuZGlmCisJCS8qIFVuZG8g bWFya2luZyB0aGUgcGFnZXMgYXMgcmVzZXJ2ZWQgKi8KKwkJcGVuZCA9IHZpcnRfdG9fcGFn ZShpbl9pbWFnZV9iYVt3aW5dICsgaW5faW1hZ2Vfc2l6ZVt3aW5dIC0gMSk7ICAgCisJCWZv ciAocGFnZSA9IHZpcnRfdG9fcGFnZShpbl9pbWFnZV9iYVt3aW5dKTsgcGFnZSA8PSBwZW5k OyBwYWdlKyspCisJCQlDbGVhclBhZ2VSZXNlcnZlZChwYWdlKTsKKwkJZG1hX2ZyZWVfY29o ZXJlbnQoJnZtZV9wY2lfZGV2LT5kZXYsCisJCQkJCWluX2ltYWdlX3NpemVbd2luXSwKKwkJ CQkJaW5faW1hZ2VfYmFbd2luXSwKKwkJCQkJaW5faW1hZ2VfcGFbd2luXSk7CisJCWluX2lt YWdlX21hcHBlZFt3aW5dID0gMDsKKwl9CisKKyAgICAgICAgaWYgKHZtZUluLT53aW5kb3dF bmFibGUgPT0gMCkgeworCQl0ZW1wX2N0bCA9IHJlYWRsKHZtZWNoaXBfYmFzZWFkZHIgKyBp bkNUTFt2bWVJbi0+d2luZG93TmJyXSk7CisJCXRlbXBfY3RsICY9IH4weDgwMDAwMDAwOwor CQl3cml0ZWwodGVtcF9jdGwsIHZtZWNoaXBfYmFzZWFkZHIgKyBpbkNUTFt2bWVJbi0+d2lu ZG93TmJyXSk7CisJCXJldHVybiAwOworCX0KKworI2lmZGVmIENPTkZJR19WTUVfQlJJREdF X0JPT1RNRU0KKyAgICAgICAgaWYgKHdpbiA9PSA3KSB7CisgICAgICAgICAgICAgICAgdm1l SW4tPndpbmRvd1NpemVMID0gaW5faW1hZ2Vfc2l6ZVs3XTsKKyAgICAgICAgICAgICAgICB2 bWVJbi0+d2luZG93U2l6ZVUgPSAwOworICAgICAgICB9CisjZW5kaWYKKworCWlmICgodm1l SW4tPnZtZUFkZHJVKSB8fCAodm1lSW4tPndpbmRvd1NpemVVKSkgCisJCXJldHVybiAoLUVJ TlZBTCk7CisKKwlpZiAoKHZtZUluLT52bWVBZGRyTCAmIDB4RkZGKSB8fCAodm1lSW4tPndp bmRvd1NpemVMICYgMHhGRkYpKSAKKwkJcmV0dXJuICgtRUlOVkFMKTsKKwkKKyNpZm5kZWYg Q09ORklHX1ZNRV9CUklER0VfQk9PVE1FTQorCWlmICh2bWVJbi0+d2luZG93U2l6ZUwgPiAw eDgwMDAwMCkgCisjZWxzZQorCWlmICgod2luICE9IDcpICYmICh2bWVJbi0+d2luZG93U2l6 ZUwgPiAweDgwMDAwMCkpCisjZW5kaWYKKwkJcmV0dXJuICgtRUlOVkFMKTsKKworCWlmICh2 bWVJbi0+YmNhc3RSZXNwb25kMmVzc3QpIAorCQlyZXR1cm4gKC1FSU5WQUwpOworCisJc3dp dGNoICh2bWVJbi0+YWRkclNwYWNlKSB7CisJY2FzZSBWTUVfQTY0OgorCWNhc2UgVk1FX0NS Q1NSOgorCWNhc2UgVk1FX1VTRVIzOgorCWNhc2UgVk1FX1VTRVI0OgorCQlyZXR1cm4gKC1F SU5WQUwpOworCWNhc2UgVk1FX0ExNjoKKwkJdGVtcF9jdGwgfD0gMHgwMDAwMDsKKwkJYnJl YWs7CisJY2FzZSBWTUVfQTI0OgorCQl0ZW1wX2N0bCB8PSAweDEwMDAwOworCQlicmVhazsK KwljYXNlIFZNRV9BMzI6CisJCXRlbXBfY3RsIHw9IDB4MjAwMDA7CisJCWJyZWFrOworCWNh c2UgVk1FX1VTRVIxOgorCQl0ZW1wX2N0bCB8PSAweDYwMDAwOworCQlicmVhazsKKwljYXNl IFZNRV9VU0VSMjoKKwkJdGVtcF9jdGwgfD0gMHg3MDAwMDsKKwkJYnJlYWs7CisJfQorCisj aWZuZGVmIENPTkZJR19WTUVfQlJJREdFX0JPT1RNRU0KKyAgICAgICAgaWYgKHZtZUluLT53 aW5kb3dFbmFibGUgPT0gMSkgeworI2Vsc2UgCisgICAgICAgIGlmICgod2luICE9IDcpICYm ICh2bWVJbi0+d2luZG93RW5hYmxlID09IDEpKSB7CisjZW5kaWYKKwkJaW5faW1hZ2VfYmFb d2luXSA9IChjaGFyICopZG1hX2FsbG9jX2NvaGVyZW50KChzdHJ1Y3QgZGV2aWNlICopCisJ CQkJCSZ2bWVfcGNpX2Rldi0+ZGV2LAorCQkJCQl2bWVJbi0+d2luZG93U2l6ZUwsCisJCQkJ CShkbWFfYWRkcl90ICopJmluX2ltYWdlX3BhW3dpbl0sCisJCQkJCUdGUF9LRVJORUwpOwor CQlpZiAoIWluX2ltYWdlX2JhW3dpbl0pIHsKKwkJCXByaW50aygidm1lZHJ2OiBObyBtZW1v cnkgZm9yIGluYm91bmQgd2luZG93XG4iKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJ CWluX2ltYWdlX3NpemVbd2luXSA9IHZtZUluLT53aW5kb3dTaXplTDsKKworCQkvKiBub3cg bWFyayB0aGUgcGFnZXMgYXMgcmVzZXJ2ZWQ7IG90aGVyd2lzZSAqLworCQkvKiByZW1hcF9w Zm5fcmFuZ2UgZG9lc24ndCBkbyB3aGF0IHdlIHdhbnQgKi8KKwkJcGVuZCA9IHZpcnRfdG9f cGFnZShpbl9pbWFnZV9iYVt3aW5dICsgaW5faW1hZ2Vfc2l6ZVt3aW5dIC0gMSk7CisJCWZv ciAocGFnZSA9IHZpcnRfdG9fcGFnZShpbl9pbWFnZV9iYVt3aW5dKTsgcGFnZSA8PSBwZW5k OyBwYWdlKyspCisJCQlTZXRQYWdlUmVzZXJ2ZWQocGFnZSk7CisJCW1lbXNldChpbl9pbWFn ZV9iYVt3aW5dLCAwLCBpbl9pbWFnZV9zaXplW3dpbl0pOworCQl2bWVfZmx1c2hfcmFuZ2Uo KHVuc2lnbmVkIGxvbmcpaW5faW1hZ2VfYmFbd2luXSwKKwkJCSh1bnNpZ25lZCBsb25nKShp bl9pbWFnZV9iYVt3aW5dICsgaW5faW1hZ2Vfc2l6ZVt3aW5dKSk7CisJCXZtZUluLT5wY2lB ZGRyTCA9ICh1bnNpZ25lZCBpbnQpaW5faW1hZ2VfcGFbd2luXTsKKwkJdm1lSW4tPnBjaUFk ZHJVID0gMDsKKyNpZm5kZWYgQ09ORklHX1ZNRV9CUklER0VfQk9PVE1FTQorCX0KKyNlbHNl CisJfSBlbHNlIGlmICh3aW4gPT0gNykgIHsKKwkJdm1lSW4tPnBjaUFkZHJMID0gKHVuc2ln bmVkIGludClpbl9pbWFnZV9wYVt3aW5dOworCQl2bWVJbi0+cGNpQWRkclUgPSAwOworCX0K KyNlbmRpZgorCisJLy8gRGlzYWJsZSB3aGlsZSB3ZSBhcmUgbXVja2luZyBhcm91bmQKKwl3 cml0ZWwoMHgwMDAwMDAwMCwgdm1lY2hpcF9iYXNlYWRkciArIGluQ1RMW3ZtZUluLT53aW5k b3dOYnJdKTsKKwl3cml0ZWwodm1lSW4tPnZtZUFkZHJMLCB2bWVjaGlwX2Jhc2VhZGRyICsg aW5CU1t2bWVJbi0+d2luZG93TmJyXSk7CisJd3JpdGVsKHZtZUluLT52bWVBZGRyTCArIHZt ZUluLT53aW5kb3dTaXplTCwKKwkgICAgICAgdm1lY2hpcF9iYXNlYWRkciArIGluQkRbdm1l SW4tPndpbmRvd05icl0pOworCXdyaXRlbCh2bWVJbi0+cGNpQWRkckwgLSB2bWVJbi0+dm1l QWRkckwsCisJICAgICAgIHZtZWNoaXBfYmFzZWFkZHIgKyBpblRPW3ZtZUluLT53aW5kb3dO YnJdKTsKKworCS8vIFNldHVwIENUTCByZWdpc3Rlci4KKwlpZiAodm1lSW4tPndyUG9zdEVu YWJsZSkKKwkJdGVtcF9jdGwgfD0gMHg0MDAwMDAwMDsKKwlpZiAodm1lSW4tPnByZWZldGNo RW5hYmxlKQorCQl0ZW1wX2N0bCB8PSAweDIwMDAwMDAwOworCWlmICh2bWVJbi0+cm13TG9j aykKKwkJdGVtcF9jdGwgfD0gMHgwMDAwMDA0MDsKKwlpZiAodm1lSW4tPmRhdGE2NEJpdENh cGFibGUpCisJCXRlbXBfY3RsIHw9IDB4MDAwMDAwODA7CisJaWYgKHZtZUluLT51c2VyQWNj ZXNzVHlwZSAmIFZNRV9VU0VSKQorCQl0ZW1wX2N0bCB8PSAweDAwMTAwMDAwOworCWlmICh2 bWVJbi0+dXNlckFjY2Vzc1R5cGUgJiBWTUVfU1VQRVIpCisJCXRlbXBfY3RsIHw9IDB4MDAy MDAwMDA7CisJaWYgKHZtZUluLT5kYXRhQWNjZXNzVHlwZSAmIFZNRV9EQVRBKQorCQl0ZW1w X2N0bCB8PSAweDAwNDAwMDAwOworCWlmICh2bWVJbi0+ZGF0YUFjY2Vzc1R5cGUgJiBWTUVf UFJPRykKKwkJdGVtcF9jdGwgfD0gMHgwMDgwMDAwMDsKKworCS8vIFdyaXRlIGN0bCByZWcg d2l0aG91dCBlbmFibGUKKwl3cml0ZWwodGVtcF9jdGwsIHZtZWNoaXBfYmFzZWFkZHIgKyBp bkNUTFt2bWVJbi0+d2luZG93TmJyXSk7CisKKwlpZiAodm1lSW4tPndpbmRvd0VuYWJsZSkK KwkJdGVtcF9jdGwgfD0gMHg4MDAwMDAwMDsKKworCXdyaXRlbCh0ZW1wX2N0bCwgdm1lY2hp cF9iYXNlYWRkciArIGluQ1RMW3ZtZUluLT53aW5kb3dOYnJdKTsKKwlyZXR1cm4gKDApOwor fQorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBGdW5jdGlvbiAgIDogdW5pX2dl dF9pbl9ib3VuZAorLy8gRGVzY3JpcHRpb246IAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQoraW50IHVuaV9nZXRfaW5fYm91bmQodm1lSW5XaW5kb3dDZmdfdCAqIHZtZUluKQorewor CWludCB0ZW1wX2N0bCA9IDA7CisKKwkvLyBWZXJpZnkgaW5wdXQgZGF0YQorCWlmICh2bWVJ bi0+d2luZG93TmJyID4gNykgeworCQlyZXR1cm4gKC1FSU5WQUwpOworCX0KKwkvLyBHZXQg V2luZG93IG1hcHBpbmdzLgorCXZtZUluLT52bWVBZGRyTCA9IHJlYWRsKHZtZWNoaXBfYmFz ZWFkZHIgKyBpbkJTW3ZtZUluLT53aW5kb3dOYnJdKTsKKwl2bWVJbi0+cGNpQWRkckwgPSB2 bWVJbi0+dm1lQWRkckwgKworCSAgICByZWFkbCh2bWVjaGlwX2Jhc2VhZGRyICsgaW5UT1t2 bWVJbi0+d2luZG93TmJyXSk7CisJdm1lSW4tPndpbmRvd1NpemVMID0gcmVhZGwodm1lY2hp cF9iYXNlYWRkciArIGluQkRbdm1lSW4tPndpbmRvd05icl0pIC0KKwkgICAgdm1lSW4tPnZt ZUFkZHJMOworCisJdGVtcF9jdGwgPSByZWFkbCh2bWVjaGlwX2Jhc2VhZGRyICsgaW5DVExb dm1lSW4tPndpbmRvd05icl0pOworCisJLy8gR2V0IENvbnRyb2wgJiBCVVMgYXR0cmlidXRl cworCWlmICh0ZW1wX2N0bCAmIDB4NDAwMDAwMDApCisJCXZtZUluLT53clBvc3RFbmFibGUg PSAxOworCWlmICh0ZW1wX2N0bCAmIDB4MjAwMDAwMDApCisJCXZtZUluLT5wcmVmZXRjaEVu YWJsZSA9IDE7CisJaWYgKHRlbXBfY3RsICYgMHgwMDAwMDA0MCkKKwkJdm1lSW4tPnJtd0xv Y2sgPSAxOworCWlmICh0ZW1wX2N0bCAmIDB4MDAwMDAwODApCisJCXZtZUluLT5kYXRhNjRC aXRDYXBhYmxlID0gMTsKKwlpZiAodGVtcF9jdGwgJiAweDAwMTAwMDAwKQorCQl2bWVJbi0+ dXNlckFjY2Vzc1R5cGUgfD0gVk1FX1VTRVI7CisJaWYgKHRlbXBfY3RsICYgMHgwMDIwMDAw MCkKKwkJdm1lSW4tPnVzZXJBY2Nlc3NUeXBlIHw9IFZNRV9TVVBFUjsKKwlpZiAodGVtcF9j dGwgJiAweDAwNDAwMDAwKQorCQl2bWVJbi0+ZGF0YUFjY2Vzc1R5cGUgfD0gVk1FX0RBVEE7 CisJaWYgKHRlbXBfY3RsICYgMHgwMDgwMDAwMCkKKwkJdm1lSW4tPmRhdGFBY2Nlc3NUeXBl IHw9IFZNRV9QUk9HOworCWlmICh0ZW1wX2N0bCAmIDB4ODAwMDAwMDApCisJCXZtZUluLT53 aW5kb3dFbmFibGUgPSAxOworCisJc3dpdGNoICgodGVtcF9jdGwgJiAweDcwMDAwKSA+PiAx NikgeworCWNhc2UgMHgwOgorCQl2bWVJbi0+YWRkclNwYWNlID0gVk1FX0ExNjsKKwkJYnJl YWs7CisJY2FzZSAweDE6CisJCXZtZUluLT5hZGRyU3BhY2UgPSBWTUVfQTI0OworCQlicmVh azsKKwljYXNlIDB4MjoKKwkJdm1lSW4tPmFkZHJTcGFjZSA9IFZNRV9BMzI7CisJCWJyZWFr OworCWNhc2UgMHg2OgorCQl2bWVJbi0+YWRkclNwYWNlID0gVk1FX1VTRVIxOworCQlicmVh azsKKwljYXNlIDB4NzoKKwkJdm1lSW4tPmFkZHJTcGFjZSA9IFZNRV9VU0VSMjsKKwkJYnJl YWs7CisJfQorCisJcmV0dXJuICgwKTsKK30KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorLy8gRnVuY3Rpb24gICA6IHVuaV9zZXRfb3V0X2JvdW5kCisvLyBEZXNjcmlwdGlvbjog CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitpbnQgdW5pX3NldF9vdXRfYm91bmQodm1l T3V0V2luZG93Q2ZnX3QgKiB2bWVPdXQpCit7CisJaW50IHRlbXBfY3RsID0gMDsKKworCS8v IFZlcmlmeSBpbnB1dCBkYXRhCisJaWYgKHZtZU91dC0+d2luZG93TmJyID4gNykgeworCQly ZXR1cm4gKC1FSU5WQUwpOworCX0KKworCWlmICh2bWVPdXQtPndpbmRvd0VuYWJsZSA9PSAw KSB7CisJCXRlbXBfY3RsID0gcmVhZGwodm1lY2hpcF9iYXNlYWRkciArIG91dENUTFt2bWVP dXQtPndpbmRvd05icl0pOworCQl0ZW1wX2N0bCAmPSB+MHg4MDAwMDAwMDsKKwkJd3JpdGVs KHRlbXBfY3RsLCB2bWVjaGlwX2Jhc2VhZGRyICsgb3V0Q1RMW3ZtZU91dC0+d2luZG93TmJy XSk7CisJfQorCisJaWYgKCh2bWVPdXQtPnhsYXRlZEFkZHJVKSB8fCAodm1lT3V0LT53aW5k b3dTaXplVSkKKwkgICAgfHwgKHZtZU91dC0+cGNpQnVzQWRkclUpKSB7CisJCXJldHVybiAo LUVJTlZBTCk7CisJfQorCXN3aXRjaCAodm1lT3V0LT53aW5kb3dOYnIpIHsKKwljYXNlIDA6 CisJY2FzZSA0OgorCQlpZiAoKHZtZU91dC0+eGxhdGVkQWRkckwgJiAweEZGRikgfHwKKwkg ICAgCQkodm1lT3V0LT53aW5kb3dTaXplTCAmIDB4RkZGKSB8fCAKKwkJCSh2bWVPdXQtPnBj aUJ1c0FkZHJMICYgMHhGRkYpKSB7CisJCQlyZXR1cm4gKC1FSU5WQUwpOworCQl9CisJCWJy ZWFrOworCWNhc2UgMToKKwljYXNlIDI6CisJY2FzZSAzOgorCWNhc2UgNToKKwljYXNlIDY6 CisJY2FzZSA3OgorCQlpZiAoKHZtZU91dC0+eGxhdGVkQWRkckwgJiAweEZGRkYpIHx8CisJ ICAgIAkJKHZtZU91dC0+d2luZG93U2l6ZUwgJiAweEZGRkYpIHx8IAorCQkJKHZtZU91dC0+ cGNpQnVzQWRkckwgJiAweEZGRkYpKSB7CisJCQlyZXR1cm4gKC1FSU5WQUwpOworCQl9CisJ CWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAoLUVJTlZBTCk7CisJCWJyZWFrOworCX0K KwlpZiAodm1lT3V0LT5iY2FzdFNlbGVjdDJlc3N0KSB7CisJCXJldHVybiAoLUVJTlZBTCk7 CisJfQorCXN3aXRjaCAodm1lT3V0LT5hZGRyU3BhY2UpIHsKKwljYXNlIFZNRV9BNjQ6CisJ Y2FzZSBWTUVfVVNFUjM6CisJY2FzZSBWTUVfVVNFUjQ6CisJCXJldHVybiAoLUVJTlZBTCk7 CisJY2FzZSBWTUVfQTE2OgorCQl0ZW1wX2N0bCB8PSAweDAwMDAwOworCQlicmVhazsKKwlj YXNlIFZNRV9BMjQ6CisJCXRlbXBfY3RsIHw9IDB4MTAwMDA7CisJCWJyZWFrOworCWNhc2Ug Vk1FX0EzMjoKKwkJdGVtcF9jdGwgfD0gMHgyMDAwMDsKKwkJYnJlYWs7CisJY2FzZSBWTUVf Q1JDU1I6CisJCXRlbXBfY3RsIHw9IDB4NTAwMDA7CisJCWJyZWFrOworCWNhc2UgVk1FX1VT RVIxOgorCQl0ZW1wX2N0bCB8PSAweDYwMDAwOworCQlicmVhazsKKwljYXNlIFZNRV9VU0VS MjoKKwkJdGVtcF9jdGwgfD0gMHg3MDAwMDsKKwkJYnJlYWs7CisJfQorCisJLy8gRGlzYWJs ZSB3aGlsZSB3ZSBhcmUgbXVja2luZyBhcm91bmQKKwl3cml0ZWwoMHgwMDAwMDAwMCwgdm1l Y2hpcF9iYXNlYWRkciArIG91dENUTFt2bWVPdXQtPndpbmRvd05icl0pOworCXdyaXRlbCh2 bWVPdXQtPnBjaUJ1c0FkZHJMLAorCSAgICAgICB2bWVjaGlwX2Jhc2VhZGRyICsgb3V0QlNb dm1lT3V0LT53aW5kb3dOYnJdKTsKKwl3cml0ZWwodm1lT3V0LT5wY2lCdXNBZGRyTCArIHZt ZU91dC0+d2luZG93U2l6ZUwsCisJICAgICAgIHZtZWNoaXBfYmFzZWFkZHIgKyBvdXRCRFt2 bWVPdXQtPndpbmRvd05icl0pOworCXdyaXRlbCh2bWVPdXQtPnhsYXRlZEFkZHJMIC0gdm1l T3V0LT5wY2lCdXNBZGRyTCwKKwkgICAgICAgdm1lY2hpcF9iYXNlYWRkciArIG91dFRPW3Zt ZU91dC0+d2luZG93TmJyXSk7CisKKwkvLyBTYW5pdHkgY2hlY2suCisJaWYgKHZtZU91dC0+ cGNpQnVzQWRkckwgIT0KKwkgICAgcmVhZGwodm1lY2hpcF9iYXNlYWRkciArIG91dEJTW3Zt ZU91dC0+d2luZG93TmJyXSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiY2E5 MWMwNDI6IG91dCB3aW5kb3c6ICV4LCBmYWlsZWQgdG8gY29uZmlndXJlXG4iLAorCQkgICAg ICAgdm1lT3V0LT53aW5kb3dOYnIpOworCQlyZXR1cm4gKC1FSU5WQUwpOworCX0KKworCWlm ICh2bWVPdXQtPnBjaUJ1c0FkZHJMICsgdm1lT3V0LT53aW5kb3dTaXplTCAhPQorCSAgICBy ZWFkbCh2bWVjaGlwX2Jhc2VhZGRyICsgb3V0QkRbdm1lT3V0LT53aW5kb3dOYnJdKSkgewor CQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJjYTkxYzA0Mjogb3V0IHdpbmRvdzogJXgs IGZhaWxlZCB0byBjb25maWd1cmVcbiIsCisJCSAgICAgICB2bWVPdXQtPndpbmRvd05icik7 CisJCXJldHVybiAoLUVJTlZBTCk7CisJfQorCisJaWYgKHZtZU91dC0+eGxhdGVkQWRkckwg LSB2bWVPdXQtPnBjaUJ1c0FkZHJMICE9CisJICAgIHJlYWRsKHZtZWNoaXBfYmFzZWFkZHIg KyBvdXRUT1t2bWVPdXQtPndpbmRvd05icl0pKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkg ICAgICAgImNhOTFjMDQyOiBvdXQgd2luZG93OiAleCwgZmFpbGVkIHRvIGNvbmZpZ3VyZVxu IiwKKwkJICAgICAgIHZtZU91dC0+d2luZG93TmJyKTsKKwkJcmV0dXJuICgtRUlOVkFMKTsK Kwl9CisJLy8gU2V0dXAgQ1RMIHJlZ2lzdGVyLgorCWlmICh2bWVPdXQtPndyUG9zdEVuYWJs ZSkKKwkJdGVtcF9jdGwgfD0gMHg0MDAwMDAwMDsKKwlpZiAodm1lT3V0LT51c2VyQWNjZXNz VHlwZSAmIFZNRV9TVVBFUikKKwkJdGVtcF9jdGwgfD0gMHgwMDEwMDA7CisJaWYgKHZtZU91 dC0+ZGF0YUFjY2Vzc1R5cGUgJiBWTUVfUFJPRykKKwkJdGVtcF9jdGwgfD0gMHgwMDQwMDA7 CisJaWYgKHZtZU91dC0+bWF4RGF0YVdpZHRoID09IFZNRV9EMTYpCisJCXRlbXBfY3RsIHw9 IDB4MDA0MDAwMDA7CisJaWYgKHZtZU91dC0+bWF4RGF0YVdpZHRoID09IFZNRV9EMzIpCisJ CXRlbXBfY3RsIHw9IDB4MDA4MDAwMDA7CisJaWYgKHZtZU91dC0+bWF4RGF0YVdpZHRoID09 IFZNRV9ENjQpCisJCXRlbXBfY3RsIHw9IDB4MDBDMDAwMDA7CisJaWYgKHZtZU91dC0+eGZl clByb3RvY29sICYgKFZNRV9CTFQgfCBWTUVfTUJMVCkpCisJCXRlbXBfY3RsIHw9IDB4MDAw MDAxMDA7CisKKwkvLyBXcml0ZSBjdGwgcmVnIHdpdGhvdXQgZW5hYmxlCisJd3JpdGVsKHRl bXBfY3RsLCB2bWVjaGlwX2Jhc2VhZGRyICsgb3V0Q1RMW3ZtZU91dC0+d2luZG93TmJyXSk7 CisKKwlpZiAodm1lT3V0LT53aW5kb3dFbmFibGUpCisJCXRlbXBfY3RsIHw9IDB4ODAwMDAw MDA7CisKKwl3cml0ZWwodGVtcF9jdGwsIHZtZWNoaXBfYmFzZWFkZHIgKyBvdXRDVExbdm1l T3V0LT53aW5kb3dOYnJdKTsKKwlyZXR1cm4gKDApOworfQorCisvLy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisvLyBGdW5jdGlvbiAgIDogdW5pX2dldF9vdXRfYm91bmQKKy8vIERlc2Ny aXB0aW9uOiAKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2ludCB1bmlfZ2V0X291dF9i b3VuZCh2bWVPdXRXaW5kb3dDZmdfdCAqIHZtZU91dCkKK3sKKwlpbnQgdGVtcF9jdGwgPSAw OworCisJLy8gVmVyaWZ5IGlucHV0IGRhdGEKKwlpZiAodm1lT3V0LT53aW5kb3dOYnIgPiA3 KSB7CisJCXJldHVybiAoLUVJTlZBTCk7CisJfQorCS8vIEdldCBXaW5kb3cgbWFwcGluZ3Mu CisJdm1lT3V0LT5wY2lCdXNBZGRyTCA9CisJICAgIHJlYWRsKHZtZWNoaXBfYmFzZWFkZHIg KyBvdXRCU1t2bWVPdXQtPndpbmRvd05icl0pOworCXZtZU91dC0+eGxhdGVkQWRkckwgPQor CSAgICB2bWVPdXQtPnBjaUJ1c0FkZHJMICsgcmVhZGwodm1lY2hpcF9iYXNlYWRkciArCisJ CQkJCW91dFRPW3ZtZU91dC0+d2luZG93TmJyXSk7CisJdm1lT3V0LT53aW5kb3dTaXplTCA9 CisJICAgIHJlYWRsKHZtZWNoaXBfYmFzZWFkZHIgKyBvdXRCRFt2bWVPdXQtPndpbmRvd05i cl0pIC0KKwkgICAgdm1lT3V0LT5wY2lCdXNBZGRyTDsKKworCXRlbXBfY3RsID0gcmVhZGwo dm1lY2hpcF9iYXNlYWRkciArIG91dENUTFt2bWVPdXQtPndpbmRvd05icl0pOworCisJLy8g R2V0IENvbnRyb2wgJiBCVVMgYXR0cmlidXRlcworCWlmICh0ZW1wX2N0bCAmIDB4NDAwMDAw MDApCisJCXZtZU91dC0+d3JQb3N0RW5hYmxlID0gMTsKKwlpZiAodGVtcF9jdGwgJiAweDAw MTAwMCkKKwkJdm1lT3V0LT51c2VyQWNjZXNzVHlwZSA9IFZNRV9TVVBFUjsKKwllbHNlCisJ CXZtZU91dC0+dXNlckFjY2Vzc1R5cGUgPSBWTUVfVVNFUjsKKwlpZiAodGVtcF9jdGwgJiAw eDAwNDAwMCkKKwkJdm1lT3V0LT5kYXRhQWNjZXNzVHlwZSA9IFZNRV9QUk9HOworCWVsc2UK KwkJdm1lT3V0LT5kYXRhQWNjZXNzVHlwZSA9IFZNRV9EQVRBOworCWlmICh0ZW1wX2N0bCAm IDB4ODAwMDAwMDApCisJCXZtZU91dC0+d2luZG93RW5hYmxlID0gMTsKKworCXN3aXRjaCAo KHRlbXBfY3RsICYgMHgwMEMwMDAwMCkgPj4gMjIpIHsKKwljYXNlIDA6CisJCXZtZU91dC0+ bWF4RGF0YVdpZHRoID0gVk1FX0Q4OworCQlicmVhazsKKwljYXNlIDE6CisJCXZtZU91dC0+ bWF4RGF0YVdpZHRoID0gVk1FX0QxNjsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQl2bWVPdXQt Pm1heERhdGFXaWR0aCA9IFZNRV9EMzI7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJdm1lT3V0 LT5tYXhEYXRhV2lkdGggPSBWTUVfRDY0OworCQlicmVhazsKKwl9CisJaWYgKHRlbXBfY3Rs ICYgMHgwMDAwMDEwMCkKKwkJdm1lT3V0LT54ZmVyUHJvdG9jb2wgPSBWTUVfQkxUOworCWVs c2UKKwkJdm1lT3V0LT54ZmVyUHJvdG9jb2wgPSBWTUVfU0NUOworCisJc3dpdGNoICgodGVt cF9jdGwgJiAweDcwMDAwKSA+PiAxNikgeworCWNhc2UgMHgwOgorCQl2bWVPdXQtPmFkZHJT cGFjZSA9IFZNRV9BMTY7CisJCWJyZWFrOworCWNhc2UgMHgxOgorCQl2bWVPdXQtPmFkZHJT cGFjZSA9IFZNRV9BMjQ7CisJCWJyZWFrOworCWNhc2UgMHgyOgorCQl2bWVPdXQtPmFkZHJT cGFjZSA9IFZNRV9BMzI7CisJCWJyZWFrOworCWNhc2UgMHg1OgorCQl2bWVPdXQtPmFkZHJT cGFjZSA9IFZNRV9DUkNTUjsKKwkJYnJlYWs7CisJY2FzZSAweDY6CisJCXZtZU91dC0+YWRk clNwYWNlID0gVk1FX1VTRVIxOworCQlicmVhazsKKwljYXNlIDB4NzoKKwkJdm1lT3V0LT5h ZGRyU3BhY2UgPSBWTUVfVVNFUjI7CisJCWJyZWFrOworCX0KKworCXJldHVybiAoMCk7Cit9 CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEZ1bmN0aW9uICAgOiB1bmlfc2V0 dXBfbG0KKy8vIERlc2NyaXB0aW9uOiAKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2lu dCB1bmlfc2V0dXBfbG0odm1lTG1DZmdfdCAqIHZtZUxtKQoreworCWludCB0ZW1wX2N0bCA9 IDA7CisKKwlpZiAodm1lTG0tPmFkZHJVKSB7CisJCXJldHVybiAoLUVJTlZBTCk7CisJfQor CXN3aXRjaCAodm1lTG0tPmFkZHJTcGFjZSkgeworCWNhc2UgVk1FX0E2NDoKKwljYXNlIFZN RV9VU0VSMzoKKwljYXNlIFZNRV9VU0VSNDoKKwkJcmV0dXJuICgtRUlOVkFMKTsKKwljYXNl IFZNRV9BMTY6CisJCXRlbXBfY3RsIHw9IDB4MDAwMDA7CisJCWJyZWFrOworCWNhc2UgVk1F X0EyNDoKKwkJdGVtcF9jdGwgfD0gMHgxMDAwMDsKKwkJYnJlYWs7CisJY2FzZSBWTUVfQTMy OgorCQl0ZW1wX2N0bCB8PSAweDIwMDAwOworCQlicmVhazsKKwljYXNlIFZNRV9DUkNTUjoK KwkJdGVtcF9jdGwgfD0gMHg1MDAwMDsKKwkJYnJlYWs7CisJY2FzZSBWTUVfVVNFUjE6CisJ CXRlbXBfY3RsIHw9IDB4NjAwMDA7CisJCWJyZWFrOworCWNhc2UgVk1FX1VTRVIyOgorCQl0 ZW1wX2N0bCB8PSAweDcwMDAwOworCQlicmVhazsKKwl9CisKKwkvLyBEaXNhYmxlIHdoaWxl IHdlIGFyZSBtdWNraW5nIGFyb3VuZAorCXdyaXRlbCgweDAwMDAwMDAwLCB2bWVjaGlwX2Jh c2VhZGRyICsgTE1fQ1RMKTsKKworCXdyaXRlbCh2bWVMbS0+YWRkciwgdm1lY2hpcF9iYXNl YWRkciArIExNX0JTKTsKKworCS8vIFNldHVwIENUTCByZWdpc3Rlci4KKwlpZiAodm1lTG0t PnVzZXJBY2Nlc3NUeXBlICYgVk1FX1NVUEVSKQorCQl0ZW1wX2N0bCB8PSAweDAwMjAwMDAw OworCWlmICh2bWVMbS0+dXNlckFjY2Vzc1R5cGUgJiBWTUVfVVNFUikKKwkJdGVtcF9jdGwg fD0gMHgwMDEwMDAwMDsKKwlpZiAodm1lTG0tPmRhdGFBY2Nlc3NUeXBlICYgVk1FX1BST0cp CisJCXRlbXBfY3RsIHw9IDB4MDA4MDAwMDA7CisJaWYgKHZtZUxtLT5kYXRhQWNjZXNzVHlw ZSAmIFZNRV9EQVRBKQorCQl0ZW1wX2N0bCB8PSAweDAwNDAwMDAwOworCisJdW5pX2xtX2V2 ZW50ID0gMDsKKworCS8vIFdyaXRlIGN0bCByZWcgYW5kIGVuYWJsZQorCXdyaXRlbCgweDgw MDAwMDAwIHwgdGVtcF9jdGwsIHZtZWNoaXBfYmFzZWFkZHIgKyBMTV9DVEwpOworCXRlbXBf Y3RsID0gcmVhZGwodm1lY2hpcF9iYXNlYWRkciArIExNX0NUTCk7CisKKwlyZXR1cm4gKDAp OworfQorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBGdW5jdGlvbiAgIDogdW5p X3dhaXRfbG0KKy8vIERlc2NyaXB0aW9uOiAKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K K2ludCB1bmlfd2FpdF9sbSh2bWVMbUNmZ190ICogdm1lTG0pCit7CisJdW5zaWduZWQgbG9u ZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgdG1wOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmxt X2xvY2ssIGZsYWdzKTsKKwl0bXAgPSB1bmlfbG1fZXZlbnQ7CisJc3Bpbl91bmxvY2tfaXJx cmVzdG9yZSgmbG1fbG9jaywgZmxhZ3MpOworCWlmICh0bXAgPT0gMCkgeworCQlpZiAodm1l TG0tPmxtV2FpdCA8IDEwKQorCQkJdm1lTG0tPmxtV2FpdCA9IDEwOworCQlpbnRlcnJ1cHRp YmxlX3NsZWVwX29uX3RpbWVvdXQoJmxtX3F1ZXVlLCB2bWVMbS0+bG1XYWl0KTsKKwl9CisJ d3JpdGVsKDB4MDAwMDAwMDAsIHZtZWNoaXBfYmFzZWFkZHIgKyBMTV9DVEwpOworCXZtZUxt LT5sbUV2ZW50cyA9IHVuaV9sbV9ldmVudDsKKworCXJldHVybiAoMCk7Cit9CisKKyNkZWZp bmUJU1dJWlpMRShYKSAoICgoWCAmIDB4RkYwMDAwMDApID4+IDI0KSB8ICgoWCAmIDB4MDBG RjAwMDApID4+ICA4KSB8ICgoWCAmIDB4MDAwMEZGMDApIDw8ICA4KSB8ICgoWCAmIDB4MDAw MDAwRkYpIDw8IDI0KSkKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gRnVuY3Rp b24gICA6IHVuaV9kb19ybXcKKy8vIERlc2NyaXB0aW9uOiAKKy8vLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KK2ludCB1bmlfZG9fcm13KHZtZVJtd0NmZ190ICogdm1lUm13KQoreworCWlu dCB0ZW1wX2N0bCA9IDA7CisJaW50IHRlbXBCUyA9IDA7CisJaW50IHRlbXBCRCA9IDA7CisJ aW50IHRlbXBUTyA9IDA7CisJaW50IHZtZUJTID0gMDsKKwlpbnQgdm1lQkQgPSAwOworCWlu dCAqcm13X3BjaV9kYXRhX3B0ciA9IE5VTEw7CisJaW50ICp2YURhdGFQdHIgPSBOVUxMOwor CWludCBpOworCXZtZU91dFdpbmRvd0NmZ190IHZtZU91dDsKKwlpZiAodm1lUm13LT5tYXhB dHRlbXB0cyA8IDEpIHsKKwkJcmV0dXJuICgtRUlOVkFMKTsKKwl9CisJaWYgKHZtZVJtdy0+ dGFyZ2V0QWRkclUpIHsKKwkJcmV0dXJuICgtRUlOVkFMKTsKKwl9CisJLy8gRmluZCB0aGUg UENJIGFkZHJlc3MgdGhhdCBtYXBzIHRvIHRoZSBkZXNpcmVkIFZNRSBhZGRyZXNzIAorCWZv ciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJdGVtcF9jdGwgPSByZWFkbCh2bWVjaGlwX2Jh c2VhZGRyICsgb3V0Q1RMW2ldKTsKKwkJaWYgKCh0ZW1wX2N0bCAmIDB4ODAwMDAwMDApID09 IDApIHsKKwkJCWNvbnRpbnVlOworCQl9CisJCW1lbXNldCgmdm1lT3V0LCAwLCBzaXplb2Yo dm1lT3V0KSk7CisJCXZtZU91dC53aW5kb3dOYnIgPSBpOworCQl1bmlfZ2V0X291dF9ib3Vu ZCgmdm1lT3V0KTsKKwkJaWYgKHZtZU91dC5hZGRyU3BhY2UgIT0gdm1lUm13LT5hZGRyU3Bh Y2UpIHsKKwkJCWNvbnRpbnVlOworCQl9CisJCXRlbXBCUyA9IHJlYWRsKHZtZWNoaXBfYmFz ZWFkZHIgKyBvdXRCU1tpXSk7CisJCXRlbXBCRCA9IHJlYWRsKHZtZWNoaXBfYmFzZWFkZHIg KyBvdXRCRFtpXSk7CisJCXRlbXBUTyA9IHJlYWRsKHZtZWNoaXBfYmFzZWFkZHIgKyBvdXRU T1tpXSk7CisJCXZtZUJTID0gdGVtcEJTICsgdGVtcFRPOworCQl2bWVCRCA9IHRlbXBCRCAr IHRlbXBUTzsKKwkJaWYgKCh2bWVSbXctPnRhcmdldEFkZHIgPj0gdm1lQlMpICYmCisJCSAg ICAodm1lUm13LT50YXJnZXRBZGRyIDwgdm1lQkQpKSB7CisJCQlybXdfcGNpX2RhdGFfcHRy ID0KKwkJCSAgICAoaW50ICopKHRlbXBCUyArICh2bWVSbXctPnRhcmdldEFkZHIgLSB2bWVC UykpOworCQkJdmFEYXRhUHRyID0KKwkJCSAgICAoaW50ICopKG91dF9pbWFnZV92YVtpXSAr CisJCQkJICAgICh2bWVSbXctPnRhcmdldEFkZHIgLSB2bWVCUykpOworCQkJYnJlYWs7CisJ CX0KKwl9CisKKwkvLyBJZiBubyB3aW5kb3cgLSBmYWlsLgorCWlmIChybXdfcGNpX2RhdGFf cHRyID09IE5VTEwpIHsKKwkJcmV0dXJuICgtRUlOVkFMKTsKKwl9CisJLy8gU2V0dXAgdGhl IFJNVyByZWdpc3RlcnMuCisJd3JpdGVsKDAsIHZtZWNoaXBfYmFzZWFkZHIgKyBTQ1lDX0NU TCk7CisJd3JpdGVsKFNXSVpaTEUodm1lUm13LT5lbmFibGVNYXNrKSwgdm1lY2hpcF9iYXNl YWRkciArIFNDWUNfRU4pOworCXdyaXRlbChTV0laWkxFKHZtZVJtdy0+Y29tcGFyZURhdGEp LCB2bWVjaGlwX2Jhc2VhZGRyICsgU0NZQ19DTVApOworCXdyaXRlbChTV0laWkxFKHZtZVJt dy0+c3dhcERhdGEpLCB2bWVjaGlwX2Jhc2VhZGRyICsgU0NZQ19TV1ApOworCXdyaXRlbCgo aW50KXJtd19wY2lfZGF0YV9wdHIsIHZtZWNoaXBfYmFzZWFkZHIgKyBTQ1lDX0FERFIpOwor CXdyaXRlbCgxLCB2bWVjaGlwX2Jhc2VhZGRyICsgU0NZQ19DVEwpOworCisJLy8gUnVuIHRo ZSBSTVcgY3ljbGUgdW50aWwgZWl0aGVyIHN1Y2Nlc3Mgb3IgbWF4IGF0dGVtcHRzLgorCXZt ZVJtdy0+bnVtQXR0ZW1wdHMgPSAxOworCXdoaWxlICh2bWVSbXctPm51bUF0dGVtcHRzIDw9 IHZtZVJtdy0+bWF4QXR0ZW1wdHMpIHsKKworCQlpZiAoKHJlYWRsKHZhRGF0YVB0cikgJiB2 bWVSbXctPmVuYWJsZU1hc2spID09CisJCSAgICAodm1lUm13LT5zd2FwRGF0YSAmIHZtZVJt dy0+ZW5hYmxlTWFzaykpIHsKKworCQkJd3JpdGVsKDAsIHZtZWNoaXBfYmFzZWFkZHIgKyBT Q1lDX0NUTCk7CisJCQlicmVhazsKKworCQl9CisJCXZtZVJtdy0+bnVtQXR0ZW1wdHMrKzsK Kwl9CisKKwkvLyBJZiBubyBzdWNjZXNzLCBzZXQgbnVtIEF0dGVtcHRzIHRvIGJlIGdyZWF0 ZXIgdGhhbiBtYXggYXR0ZW1wdHMKKwlpZiAodm1lUm13LT5udW1BdHRlbXB0cyA+IHZtZVJt dy0+bWF4QXR0ZW1wdHMpIHsKKwkJdm1lUm13LT5udW1BdHRlbXB0cyA9IHZtZVJtdy0+bWF4 QXR0ZW1wdHMgKyAxOworCX0KKworCXJldHVybiAoMCk7Cit9CisKKy8vLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKy8vIEZ1bmN0aW9uICAgOiB1bmlTZXR1cERjdGxSZWcKKy8vIERlc2Ny aXB0aW9uOiAKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2ludCB1bmlTZXR1cERjdGxS ZWcodm1lRG1hUGFja2V0X3QgKiB2bWVEbWEsIGludCAqZGN0bHJlZ3JldHVybikKK3sKKwl1 bnNpZ25lZCBpbnQgZGN0bHJlZyA9IDB4ODA7CisJc3RydWN0IHZtZUF0dHIgKnZtZUF0dHI7 CisKKwlpZiAodm1lRG1hLT5zcmNCdXMgPT0gVk1FX0RNQV9WTUUpIHsKKwkJZGN0bHJlZyA9 IDA7CisJCXZtZUF0dHIgPSAmdm1lRG1hLT5zcmNWbWVBdHRyOworCX0gZWxzZSB7CisJCWRj dGxyZWcgPSAweDgwMDAwMDAwOworCQl2bWVBdHRyID0gJnZtZURtYS0+ZHN0Vm1lQXR0cjsK Kwl9CisKKwlzd2l0Y2ggKHZtZUF0dHItPm1heERhdGFXaWR0aCkgeworCWNhc2UgVk1FX0Q4 OgorCQlicmVhazsKKwljYXNlIFZNRV9EMTY6CisJCWRjdGxyZWcgfD0gMHgwMDQwMDAwMDsK KwkJYnJlYWs7CisJY2FzZSBWTUVfRDMyOgorCQlkY3RscmVnIHw9IDB4MDA4MDAwMDA7CisJ CWJyZWFrOworCWNhc2UgVk1FX0Q2NDoKKwkJZGN0bHJlZyB8PSAweDAwQzAwMDAwOworCQli cmVhazsKKwl9CisKKwlzd2l0Y2ggKHZtZUF0dHItPmFkZHJTcGFjZSkgeworCWNhc2UgVk1F X0ExNjoKKwkJYnJlYWs7CisJY2FzZSBWTUVfQTI0OgorCQlkY3RscmVnIHw9IDB4MDAwMTAw MDA7CisJCWJyZWFrOworCWNhc2UgVk1FX0EzMjoKKwkJZGN0bHJlZyB8PSAweDAwMDIwMDAw OworCQlicmVhazsKKwljYXNlIFZNRV9VU0VSMToKKwkJZGN0bHJlZyB8PSAweDAwMDYwMDAw OworCQlicmVhazsKKwljYXNlIFZNRV9VU0VSMjoKKwkJZGN0bHJlZyB8PSAweDAwMDcwMDAw OworCQlicmVhazsKKworCWNhc2UgVk1FX0E2NDoJCS8vIG5vdCBzdXBwb3J0ZWQgaW4gVW5p dmVyc2UgRE1BCisJY2FzZSBWTUVfQ1JDU1I6CisJY2FzZSBWTUVfVVNFUjM6CisJY2FzZSBW TUVfVVNFUjQ6CisJCXJldHVybiAoLUVJTlZBTCk7CisJCWJyZWFrOworCX0KKwlpZiAodm1l QXR0ci0+dXNlckFjY2Vzc1R5cGUgPT0gVk1FX1BST0cpIHsKKwkJZGN0bHJlZyB8PSAweDAw MDA0MDAwOworCX0KKwlpZiAodm1lQXR0ci0+ZGF0YUFjY2Vzc1R5cGUgPT0gVk1FX1NVUEVS KSB7CisJCWRjdGxyZWcgfD0gMHgwMDAwMTAwMDsKKwl9CisJaWYgKHZtZUF0dHItPnhmZXJQ cm90b2NvbCAhPSBWTUVfU0NUKSB7CisJCWRjdGxyZWcgfD0gMHgwMDAwMDEwMDsKKwl9CisJ KmRjdGxyZWdyZXR1cm4gPSBkY3RscmVnOworCXJldHVybiAoMCk7Cit9CisKKy8vLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKy8vIEZ1bmN0aW9uICAgOiB1bmlfc3RhcnRfZG1hCisvLyBE ZXNjcmlwdGlvbjogCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit1bnNpZ25lZCBpbnQK K3VuaV9zdGFydF9kbWEoaW50IGNoYW5uZWwsIHVuc2lnbmVkIGludCBkZ2NzcmVnLCBURE1B X0NtZF9QYWNrZXQgKiB2bWVMTCkKK3sKKwl1bnNpZ25lZCBpbnQgdmFsOworCisJLy8gU2V0 dXAgcmVnaXN0ZXJzIGFzIG5lZWRlZCBmb3IgZGlyZWN0IG9yIGNoYWluZWQuCisJaWYgKGRn Y3NyZWcgJiAweDgwMDAwMDApIHsKKwkJd3JpdGVsKDAsIHZtZWNoaXBfYmFzZWFkZHIgKyBE VEJDKTsKKwkJd3JpdGVsKCh1bnNpZ25lZCBpbnQpdm1lTEwsIHZtZWNoaXBfYmFzZWFkZHIg KyBEQ1BQKTsKKwl9IGVsc2UgeworI2lmCTAKKwkJcHJpbnRrKCJTdGFydGluZzogREdDUyA9 ICUwOHhcbiIsIGRnY3NyZWcpOworCQlwcmludGsoIlN0YXJ0aW5nOiBEVkEgID0gJTA4eFxu IiwgcmVhZGwoJnZtZUxMLT5kdmEpKTsKKwkJcHJpbnRrKCJTdGFydGluZzogRExWICA9ICUw OHhcbiIsIHJlYWRsKCZ2bWVMTC0+ZGx2KSk7CisJCXByaW50aygiU3RhcnRpbmc6IERUQkMg PSAlMDh4XG4iLCByZWFkbCgmdm1lTEwtPmR0YmMpKTsKKwkJcHJpbnRrKCJTdGFydGluZzog RENUTCA9ICUwOHhcbiIsIHJlYWRsKCZ2bWVMTC0+ZGN0bCkpOworI2VuZGlmCisJCS8vIFdy aXRlIHJlZ2lzdGVycyAKKwkJd3JpdGVsKHJlYWRsKCZ2bWVMTC0+ZHZhKSwgdm1lY2hpcF9i YXNlYWRkciArIERWQSk7CisJCXdyaXRlbChyZWFkbCgmdm1lTEwtPmRsdiksIHZtZWNoaXBf YmFzZWFkZHIgKyBETEEpOworCQl3cml0ZWwocmVhZGwoJnZtZUxMLT5kdGJjKSwgdm1lY2hp cF9iYXNlYWRkciArIERUQkMpOworCQl3cml0ZWwocmVhZGwoJnZtZUxMLT5kY3RsKSwgdm1l Y2hpcF9iYXNlYWRkciArIERDVEwpOworCQl3cml0ZWwoMCwgdm1lY2hpcF9iYXNlYWRkciAr IERDUFApOworCX0KKwl2bWVfc3luY19kYXRhKCk7CisKKwkvLyBTdGFydCB0aGUgb3BlcmF0 aW9uCisJd3JpdGVsKGRnY3NyZWcsIHZtZWNoaXBfYmFzZWFkZHIgKyBER0NTKTsKKwl2bWVf c3luY19kYXRhKCk7CisJdmFsID0gZ2V0X3RibCgpOworCXdyaXRlbChkZ2NzcmVnIHwgMHg4 MDAwMDAwRiwgdm1lY2hpcF9iYXNlYWRkciArIERHQ1MpOworCXZtZV9zeW5jX2RhdGEoKTsK KwlyZXR1cm4gKHZhbCk7Cit9CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEZ1 bmN0aW9uICAgOiB1bmlfc2V0dXBfZG1hCisvLyBEZXNjcmlwdGlvbjogCisvLy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCitURE1BX0NtZF9QYWNrZXQgKnVuaV9zZXR1cF9kbWEodm1lRG1h UGFja2V0X3QgKiB2bWVEbWEpCit7CisJdm1lRG1hUGFja2V0X3QgKnZtZUN1cjsKKwlpbnQg bWF4UGVyUGFnZTsKKwlpbnQgY3VycmVudExMY291bnQ7CisJVERNQV9DbWRfUGFja2V0ICpz dGFydExMOworCVRETUFfQ21kX1BhY2tldCAqY3VycmVudExMOworCVRETUFfQ21kX1BhY2tl dCAqbmV4dExMOworCXVuc2lnbmVkIGludCBkY3RscmVnID0gMDsKKworCW1heFBlclBhZ2Ug PSBQQUdFX1NJWkUgLyBzaXplb2YoVERNQV9DbWRfUGFja2V0KSAtIDE7CisJc3RhcnRMTCA9 IChURE1BX0NtZF9QYWNrZXQgKikgX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMLCAwKTsK KwlpZiAoc3RhcnRMTCA9PSAwKSB7CisJCXJldHVybiAoc3RhcnRMTCk7CisJfQorCS8vIEZp cnN0IGFsbG9jYXRlIHBhZ2VzIGZvciBkZXNjcmlwdG9ycyBhbmQgY3JlYXRlIGxpbmtlZCBs aXN0CisJdm1lQ3VyID0gdm1lRG1hOworCWN1cnJlbnRMTCA9IHN0YXJ0TEw7CisJY3VycmVu dExMY291bnQgPSAwOworCXdoaWxlICh2bWVDdXIgIT0gMCkgeworCQlpZiAodm1lQ3VyLT5w TmV4dFBhY2tldCAhPSAwKSB7CisJCQljdXJyZW50TEwtPmRjcHAgPSAodW5zaWduZWQgaW50 KShjdXJyZW50TEwgKyAxKTsKKwkJCWN1cnJlbnRMTGNvdW50Kys7CisJCQlpZiAoY3VycmVu dExMY291bnQgPj0gbWF4UGVyUGFnZSkgeworCQkJCWN1cnJlbnRMTC0+ZGNwcCA9CisJCQkJ ICAgIF9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwgMCk7CisJCQkJY3VycmVudExMY291 bnQgPSAwOworCQkJfQorCQkJY3VycmVudExMID0gKFRETUFfQ21kX1BhY2tldCAqKSBjdXJy ZW50TEwtPmRjcHA7CisJCX0gZWxzZSB7CisJCQljdXJyZW50TEwtPmRjcHAgPSAodW5zaWdu ZWQgaW50KTA7CisJCX0KKwkJdm1lQ3VyID0gdm1lQ3VyLT5wTmV4dFBhY2tldDsKKwl9CisK KwkvLyBOZXh0IGZpbGwgaW4gaW5mb3JtYXRpb24gZm9yIGVhY2ggZGVzY3JpcHRvcgorCXZt ZUN1ciA9IHZtZURtYTsKKwljdXJyZW50TEwgPSBzdGFydExMOworCXdoaWxlICh2bWVDdXIg IT0gMCkgeworCQlpZiAodm1lQ3VyLT5zcmNCdXMgPT0gVk1FX0RNQV9WTUUpIHsKKwkJCXdy aXRlbCh2bWVDdXItPnNyY0FkZHIsICZjdXJyZW50TEwtPmR2YSk7CisJCQl3cml0ZWwodm1l Q3VyLT5kc3RBZGRyLCAmY3VycmVudExMLT5kbHYpOworCQl9IGVsc2UgeworCQkJd3JpdGVs KHZtZUN1ci0+c3JjQWRkciwgJmN1cnJlbnRMTC0+ZGx2KTsKKwkJCXdyaXRlbCh2bWVDdXIt PmRzdEFkZHIsICZjdXJyZW50TEwtPmR2YSk7CisJCX0KKwkJdW5pU2V0dXBEY3RsUmVnKHZt ZUN1ciwgJmRjdGxyZWcpOworCQl3cml0ZWwoZGN0bHJlZywgJmN1cnJlbnRMTC0+ZGN0bCk7 CisJCXdyaXRlbCh2bWVDdXItPmJ5dGVDb3VudCwgJmN1cnJlbnRMTC0+ZHRiYyk7CisKKwkJ Y3VycmVudExMID0gKFRETUFfQ21kX1BhY2tldCAqKSBjdXJyZW50TEwtPmRjcHA7CisJCXZt ZUN1ciA9IHZtZUN1ci0+cE5leHRQYWNrZXQ7CisJfQorCisJLy8gQ29udmVydCBMaW5rcyB0 byBQQ0kgYWRkcmVzc2VzLgorCWN1cnJlbnRMTCA9IHN0YXJ0TEw7CisJd2hpbGUgKGN1cnJl bnRMTCAhPSAwKSB7CisJCW5leHRMTCA9IChURE1BX0NtZF9QYWNrZXQgKikgY3VycmVudExM LT5kY3BwOworCQlpZiAobmV4dExMID09IDApIHsKKwkJCXdyaXRlbCgxLCAmY3VycmVudExM LT5kY3BwKTsKKwkJfSBlbHNlIHsKKwkJCXdyaXRlbCgodW5zaWduZWQgaW50KXZpcnRfdG9f YnVzKG5leHRMTCksCisJCQkgICAgICAgJmN1cnJlbnRMTC0+ZGNwcCk7CisJCX0KKwkJdm1l X2ZsdXNoX2xpbmUoKHVuc2lnbmVkIGxvbmcpY3VycmVudExMKTsKKwkJY3VycmVudExMID0g bmV4dExMOworCX0KKworCS8vIFJldHVybiBwb2ludGVyIHRvIGRlc2NyaXB0b3JzIGxpc3Qg CisJcmV0dXJuIChzdGFydExMKTsKK30KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor Ly8gRnVuY3Rpb24gICA6IHVuaV9mcmVlX2RtYQorLy8gRGVzY3JpcHRpb246IAorLy8tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQoraW50IHVuaV9mcmVlX2RtYShURE1BX0NtZF9QYWNrZXQg KiBzdGFydExMKQoreworCVRETUFfQ21kX1BhY2tldCAqY3VycmVudExMOworCVRETUFfQ21k X1BhY2tldCAqcHJldkxMOworCVRETUFfQ21kX1BhY2tldCAqbmV4dExMOworCXVuc2lnbmVk IGludCBkY3BwcmVnOworCisJLy8gQ29udmVydCBMaW5rcyB0byB2aXJ0dWFsIGFkZHJlc3Nl cy4KKwljdXJyZW50TEwgPSBzdGFydExMOworCXdoaWxlIChjdXJyZW50TEwgIT0gMCkgewor CQlkY3BwcmVnID0gcmVhZGwoJmN1cnJlbnRMTC0+ZGNwcCk7CisJCWRjcHByZWcgJj0gfjY7 CisJCWlmIChkY3BwcmVnICYgMSkgeworCQkJY3VycmVudExMLT5kY3BwID0gMDsKKwkJfSBl bHNlIHsKKwkJCWN1cnJlbnRMTC0+ZGNwcCA9ICh1bnNpZ25lZCBpbnQpYnVzX3RvX3ZpcnQo ZGNwcHJlZyk7CisJCX0KKwkJY3VycmVudExMID0gKFRETUFfQ21kX1BhY2tldCAqKSBjdXJy ZW50TEwtPmRjcHA7CisJfQorCisJLy8gRnJlZSBhbGwgcGFnZXMgYXNzb2NpYXRlZCB3aXRo IHRoZSBkZXNjcmlwdG9ycy4KKwljdXJyZW50TEwgPSBzdGFydExMOworCXByZXZMTCA9IGN1 cnJlbnRMTDsKKwl3aGlsZSAoY3VycmVudExMICE9IDApIHsKKwkJbmV4dExMID0gKFRETUFf Q21kX1BhY2tldCAqKSBjdXJyZW50TEwtPmRjcHA7CisJCWlmIChjdXJyZW50TEwgKyAxICE9 IG5leHRMTCkgeworCQkJZnJlZV9wYWdlcygoaW50KXByZXZMTCwgMCk7CisJCQlwcmV2TEwg PSBuZXh0TEw7CisJCX0KKwkJY3VycmVudExMID0gbmV4dExMOworCX0KKworCS8vIFJldHVy biBwb2ludGVyIHRvIGRlc2NyaXB0b3JzIGxpc3QgCisJcmV0dXJuICgwKTsKK30KKworLy8t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gRnVuY3Rpb24gICA6IHVuaV9kb19kbWEKKy8v IERlc2NyaXB0aW9uOiAKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2ludCB1bmlfZG9f ZG1hKHZtZURtYVBhY2tldF90ICogdm1lRG1hKQoreworCXVuc2lnbmVkIGludCBkZ2NzcmVn ID0gMDsKKwl1bnNpZ25lZCBpbnQgZGN0bHJlZyA9IDA7CisJaW50IHZhbDsKKwlpbnQgY2hh bm5lbCwgeDsKKwl2bWVEbWFQYWNrZXRfdCAqY3VyRG1hOworCVRETUFfQ21kX1BhY2tldCAq ZG1hTEw7CisKKwkvLyBTYW5pdHkgY2hlY2sgdGhlIFZNRSBjaGFpbi4KKwljaGFubmVsID0g dm1lRG1hLT5jaGFubmVsX251bWJlcjsKKwlpZiAoY2hhbm5lbCA+IDApIHsKKwkJcmV0dXJu ICgtRUlOVkFMKTsKKwl9CisJY3VyRG1hID0gdm1lRG1hOworCXdoaWxlIChjdXJEbWEgIT0g MCkgeworCQlpZiAoY3VyRG1hLT5ieXRlQ291bnQgPT0gMCkgeworCQkJcmV0dXJuICgtRUlO VkFMKTsKKwkJfQorCQlpZiAoY3VyRG1hLT5ieXRlQ291bnQgPj0gMHgxMDAwMDAwKSB7CisJ CQlyZXR1cm4gKC1FSU5WQUwpOworCQl9CisJCWlmICgoY3VyRG1hLT5zcmNBZGRyICYgNykg IT0gKGN1ckRtYS0+ZHN0QWRkciAmIDcpKSB7CisJCQlyZXR1cm4gKC1FSU5WQUwpOworCQl9 CisJCXN3aXRjaCAoY3VyRG1hLT5zcmNCdXMpIHsKKwkJY2FzZSBWTUVfRE1BX1BDSToKKwkJ CWlmIChjdXJEbWEtPmRzdEJ1cyAhPSBWTUVfRE1BX1ZNRSkgeworCQkJCXJldHVybiAoLUVJ TlZBTCk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBWTUVfRE1BX1ZNRToKKwkJCWlmIChj dXJEbWEtPmRzdEJ1cyAhPSBWTUVfRE1BX1BDSSkgeworCQkJCXJldHVybiAoLUVJTlZBTCk7 CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAoLUVJTlZBTCk7CisJ CQlicmVhazsKKwkJfQorCQlpZiAodW5pU2V0dXBEY3RsUmVnKGN1ckRtYSwgJmRjdGxyZWcp IDwgMCkgeworCQkJcmV0dXJuICgtRUlOVkFMKTsKKwkJfQorCisJCWN1ckRtYSA9IGN1ckRt YS0+cE5leHRQYWNrZXQ7CisJCWlmIChjdXJEbWEgPT0gdm1lRG1hKSB7CS8vIEVuZGxlc3Mg TG9vcCEKKwkJCXJldHVybiAoLUVJTlZBTCk7CisJCX0KKwl9CisKKwkvLyBjYWxjdWxhdGUg Y29udHJvbCByZWdpc3RlcgorCWlmICh2bWVEbWEtPnBOZXh0UGFja2V0ICE9IDApIHsKKwkJ ZGdjc3JlZyA9IDB4ODAwMDAwMDsKKwl9IGVsc2UgeworCQlkZ2NzcmVnID0gMDsKKwl9CisK Kwlmb3IgKHggPSAwOyB4IDwgODsgeCsrKSB7CS8vIHZtZSBibG9jayBzaXplCisJCWlmICgo MjU2IDw8IHgpID49IHZtZURtYS0+bWF4Vm1lQmxvY2tTaXplKSB7CisJCQlicmVhazsKKwkJ fQorCX0KKwlpZiAoeCA9PSA4KQorCQl4ID0gNzsKKwlkZ2NzcmVnIHw9ICh4IDw8IDIwKTsK KworCWlmICh2bWVEbWEtPnZtZUJhY2tPZmZUaW1lcikgeworCQlmb3IgKHggPSAxOyB4IDwg ODsgeCsrKSB7CS8vIHZtZSB0aW1lcgorCQkJaWYgKCgxNiA8PCAoeCAtIDEpKSA+PSB2bWVE bWEtPnZtZUJhY2tPZmZUaW1lcikgeworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmICh4 ID09IDgpCisJCQl4ID0gNzsKKwkJZGdjc3JlZyB8PSAoeCA8PCAxNik7CisJfQorCS8vIFNl dHVwIHRoZSBkbWEgY2hhaW4KKwlkbWFMTCA9IHVuaV9zZXR1cF9kbWEodm1lRG1hKTsKKwor CS8vIFN0YXJ0IHRoZSBETUEKKwlpZiAoZGdjc3JlZyAmIDB4ODAwMDAwMCkgeworCQl2bWVE bWEtPnZtZURtYVN0YXJ0VGljayA9CisJCSAgICB1bmlfc3RhcnRfZG1hKGNoYW5uZWwsIGRn Y3NyZWcsCisJCQkJICAoVERNQV9DbWRfUGFja2V0ICopIHZpcnRfdG9fcGh5cyhkbWFMTCkp OworCX0gZWxzZSB7CisJCXZtZURtYS0+dm1lRG1hU3RhcnRUaWNrID0KKwkJICAgIHVuaV9z dGFydF9kbWEoY2hhbm5lbCwgZGdjc3JlZywgZG1hTEwpOworCX0KKworCXdhaXRfZXZlbnRf aW50ZXJydXB0aWJsZShkbWFfcXVldWVbMF0sCisJCQkJIHJlYWRsKHZtZWNoaXBfYmFzZWFk ZHIgKyBER0NTKSAmIDB4ODAwKTsKKworCXZhbCA9IHJlYWRsKHZtZWNoaXBfYmFzZWFkZHIg KyBER0NTKTsKKwl3cml0ZWwodmFsIHwgMHhGMDAsIHZtZWNoaXBfYmFzZWFkZHIgKyBER0NT KTsKKworCXZtZURtYS0+dm1lRG1hU3RhdHVzID0gMDsKKwl2bWVEbWEtPnZtZURtYVN0b3BU aWNrID0gdW5pX2RtYV9pcnFfdGltZTsKKwlpZiAodm1lRG1hLT52bWVEbWFTdG9wVGljayA8 IHZtZURtYS0+dm1lRG1hU3RhcnRUaWNrKSB7CisJCXZtZURtYS0+dm1lRG1hRWxhcHNlZFRp bWUgPQorCQkgICAgKDB4RkZGRkZGRkYgLSB2bWVEbWEtPnZtZURtYVN0YXJ0VGljaykgKwor CQkgICAgdm1lRG1hLT52bWVEbWFTdG9wVGljazsKKwl9IGVsc2UgeworCQl2bWVEbWEtPnZt ZURtYUVsYXBzZWRUaW1lID0KKwkJICAgIHZtZURtYS0+dm1lRG1hU3RvcFRpY2sgLSB2bWVE bWEtPnZtZURtYVN0YXJ0VGljazsKKwl9CisJdm1lRG1hLT52bWVEbWFFbGFwc2VkVGltZSAt PSB2bWVjaGlwX2lycV9vdmVyaGVhZF90aWNrczsKKwl2bWVEbWEtPnZtZURtYUVsYXBzZWRU aW1lIC89ICh0Yl9zcGVlZCAvIDEwMDAwMDApOworCisJaWYgKCEodmFsICYgMHgwMDAwMDgw MCkpIHsKKwkJdm1lRG1hLT52bWVEbWFTdGF0dXMgPSB2YWwgJiAweDcwMDsKKwkJcHJpbnRr KEtFUk5fRVJSCisJCSAgICAgICAiY2E5MWMwNDI6IERNQSBFcnJvciBpbiBETUFfdW5pX2ly cWhhbmRsZXIgREdDUz0lMDhYXG4iLAorCQkgICAgICAgdmFsKTsKKwkJdmFsID0gcmVhZGwo dm1lY2hpcF9iYXNlYWRkciArIERDUFApOworCQlwcmludGsoS0VSTl9FUlIgImNhOTFjMDQy OiBEQ1BQPSUwOFhcbiIsIHZhbCk7CisJCXZhbCA9IHJlYWRsKHZtZWNoaXBfYmFzZWFkZHIg KyBEQ1RMKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJjYTkxYzA0MjogRENUTD0lMDhYXG4iLCB2 YWwpOworCQl2YWwgPSByZWFkbCh2bWVjaGlwX2Jhc2VhZGRyICsgRFRCQyk7CisJCXByaW50 ayhLRVJOX0VSUiAiY2E5MWMwNDI6IERUQkM9JTA4WFxuIiwgdmFsKTsKKwkJdmFsID0gcmVh ZGwodm1lY2hpcF9iYXNlYWRkciArIERMQSk7CisJCXByaW50ayhLRVJOX0VSUiAiY2E5MWMw NDI6IERMQT0lMDhYXG4iLCB2YWwpOworCQl2YWwgPSByZWFkbCh2bWVjaGlwX2Jhc2VhZGRy ICsgRFZBKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJjYTkxYzA0MjogRFZBPSUwOFhcbiIsIHZh bCk7CisKKwl9CisJLy8gRnJlZSB0aGUgZG1hIGNoYWluCisJdW5pX2ZyZWVfZG1hKGRtYUxM KTsKKworCXJldHVybiAoMCk7Cit9CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8v IEZ1bmN0aW9uICAgOiB1bmlfc2h1dGRvd24KKy8vIERlc2NyaXB0aW9uOiBQdXQgVk1FIGJy aWRnZSBpbiBxdWllc2NlbnQgc3RhdGUuCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2 b2lkIHVuaV9zaHV0ZG93bih2b2lkKQoreworCXdyaXRlbCgwLCB2bWVjaGlwX2Jhc2VhZGRy ICsgTElOVF9FTik7CS8vIFR1cm4gb2ZmIEludHMKKworCS8vIFR1cm4gb2ZmIHRoZSB3aW5k b3dzCisJd3JpdGVsKDB4MDA4MDAwMDAsIHZtZWNoaXBfYmFzZWFkZHIgKyBMU0kwX0NUTCk7 CisJd3JpdGVsKDB4MDA4MDAwMDAsIHZtZWNoaXBfYmFzZWFkZHIgKyBMU0kxX0NUTCk7CisJ d3JpdGVsKDB4MDA4MDAwMDAsIHZtZWNoaXBfYmFzZWFkZHIgKyBMU0kyX0NUTCk7CisJd3Jp dGVsKDB4MDA4MDAwMDAsIHZtZWNoaXBfYmFzZWFkZHIgKyBMU0kzX0NUTCk7CisJd3JpdGVs KDB4MDBGMDAwMDAsIHZtZWNoaXBfYmFzZWFkZHIgKyBWU0kwX0NUTCk7CisJd3JpdGVsKDB4 MDBGMDAwMDAsIHZtZWNoaXBfYmFzZWFkZHIgKyBWU0kxX0NUTCk7CisJd3JpdGVsKDB4MDBG MDAwMDAsIHZtZWNoaXBfYmFzZWFkZHIgKyBWU0kyX0NUTCk7CisJd3JpdGVsKDB4MDBGMDAw MDAsIHZtZWNoaXBfYmFzZWFkZHIgKyBWU0kzX0NUTCk7CisJaWYgKHZtZWNoaXBfcmV2aXNp b24gPj0gMikgeworCQl3cml0ZWwoMHgwMDgwMDAwMCwgdm1lY2hpcF9iYXNlYWRkciArIExT STRfQ1RMKTsKKwkJd3JpdGVsKDB4MDA4MDAwMDAsIHZtZWNoaXBfYmFzZWFkZHIgKyBMU0k1 X0NUTCk7CisJCXdyaXRlbCgweDAwODAwMDAwLCB2bWVjaGlwX2Jhc2VhZGRyICsgTFNJNl9D VEwpOworCQl3cml0ZWwoMHgwMDgwMDAwMCwgdm1lY2hpcF9iYXNlYWRkciArIExTSTdfQ1RM KTsKKwkJd3JpdGVsKDB4MDBGMDAwMDAsIHZtZWNoaXBfYmFzZWFkZHIgKyBWU0k0X0NUTCk7 CisJCXdyaXRlbCgweDAwRjAwMDAwLCB2bWVjaGlwX2Jhc2VhZGRyICsgVlNJNV9DVEwpOwor CQl3cml0ZWwoMHgwMEYwMDAwMCwgdm1lY2hpcF9iYXNlYWRkciArIFZTSTZfQ1RMKTsKKwkJ d3JpdGVsKDB4MDBGMDAwMDAsIHZtZWNoaXBfYmFzZWFkZHIgKyBWU0k3X0NUTCk7CisJfQor fQorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBGdW5jdGlvbiAgIDogdW5pX2lu aXQoKQorLy8gRGVzY3JpcHRpb246IAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoraW50 IHVuaV9pbml0KHZvaWQpCit7CisJaW50IHJlc3VsdDsKKwl1bnNpZ25lZCBpbnQgdG1wOwor CXVuc2lnbmVkIGludCBjcmNzcl9hZGRyOworCXVuc2lnbmVkIGludCBpcnFPdmVySGVhZFN0 YXJ0OworCWludCBvdmVySGVhZFRpY2tzOworCisJdW5pX3NodXRkb3duKCk7CisKKwkvLyBX cml0ZSB0byBNaXNjIFJlZ2lzdGVyCisJLy8gU2V0IFZNRSBCdXMgVGltZS1vdXQKKwkvLyAg IEFyYml0cmF0aW9uIE1vZGUKKwkvLyAgIERUQUNLIEVuYWJsZQorCXRtcCA9IHJlYWRsKHZt ZWNoaXBfYmFzZWFkZHIgKyBNSVNDX0NUTCkgJiAweDA4MzJCRkZGOworCXRtcCB8PSAweDc2 MDQwMDAwOworCXdyaXRlbCh0bXAsIHZtZWNoaXBfYmFzZWFkZHIgKyBNSVNDX0NUTCk7CisJ aWYgKHRtcCAmIDB4MjAwMDApIHsKKwkJdm1lX3N5c2NvbiA9IDE7CisJfSBlbHNlIHsKKwkJ dm1lX3N5c2NvbiA9IDA7CisJfQorCisJLy8gQ2xlYXIgRE1BIHN0YXR1cyBsb2cKKwl3cml0 ZWwoMHgwMDAwMEYwMCwgdm1lY2hpcF9iYXNlYWRkciArIERHQ1MpOworCS8vIENsZWFyIGFu ZCBlbmFibGUgZXJyb3IgbG9nCisJd3JpdGVsKDB4MDA4MDAwMDAsIHZtZWNoaXBfYmFzZWFk ZHIgKyBMX0NNREVSUik7CisJLy8gVHVybiBvZmYgbG9jYXRpb24gbW9uaXRvcgorCXdyaXRl bCgweDAwMDAwMDAwLCB2bWVjaGlwX2Jhc2VhZGRyICsgTE1fQ1RMKTsKKworCS8vIEluaXRp YWxpemUgY3Jjc3IgbWFwCisJaWYgKHZtZV9zbG90bnVtICE9IC0xKSB7CisJCXdyaXRlbCh2 bWVfc2xvdG51bSA8PCAyNywgdm1lY2hpcF9iYXNlYWRkciArIFZDU1JfQlMpOworCX0KKwlj cmNzcl9hZGRyID0gcmVhZGwodm1lY2hpcF9iYXNlYWRkciArIFZDU1JfQlMpID4+IDg7CisJ d3JpdGVsKCh1bnNpZ25lZCBpbnQpdm1lY2hpcF9pbnRlcmJvYXJkX2RhdGFwIC0gY3Jjc3Jf YWRkciwKKwkgICAgICAgdm1lY2hpcF9iYXNlYWRkciArIFZDU1JfVE8pOworCWlmICh2bWVf c2xvdG51bSAhPSAtMSkgeworCQl3cml0ZWwoMHg4MDAwMDAwMCwgdm1lY2hpcF9iYXNlYWRk ciArIFZDU1JfQ1RMKTsKKwl9CisJLy8gVHVybiBvZmYgaW50ZXJydXB0cworCXdyaXRlbCgw eDAwMDAwMDAwLCB2bWVjaGlwX2Jhc2VhZGRyICsgTElOVF9FTik7CS8vIERpc2FibGUgaW50 ZXJydXB0cyBpbiB0aGUgVW5pdmVyc2UgZmlyc3QKKwl3cml0ZWwoMHgwMEZGRkZGRiwgdm1l Y2hpcF9iYXNlYWRkciArIExJTlRfU1RBVCk7CS8vIENsZWFyIEFueSBQZW5kaW5nIEludGVy cnVwdHMKKwl3cml0ZWwoMHgwMDAwMDAwMCwgdm1lY2hpcF9iYXNlYWRkciArIFZJTlRfRU4p OwkvLyBEaXNhYmxlIGludGVycnVwdHMgaW4gdGhlIFVuaXZlcnNlIGZpcnN0CisKKwlyZXN1 bHQgPQorCSAgICByZXF1ZXN0X2lycSh2bWVjaGlwX2lycSwgdW5pX2lycWhhbmRsZXIsIElS UUZfU0hBUkVELAorCQkJIlZNRUJ1cyAoY2E5MWMwNDIpIiwgdm1lY2hpcF9iYXNlYWRkcik7 CisJaWYgKHJlc3VsdCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJjYTkxYzA0 MjogY2FuJ3QgZ2V0IGFzc2lnbmVkIHBjaSBpcnEgdmVjdG9yICUwMlhcbiIsCisJCSAgICAg ICB2bWVjaGlwX2lycSk7CisJCXJldHVybiAoMCk7CisJfSBlbHNlIHsKKwkJd3JpdGVsKDB4 MDAwMCwgdm1lY2hpcF9iYXNlYWRkciArIExJTlRfTUFQMCk7CS8vIE1hcCBhbGwgaW50cyB0 byAwCisJCXdyaXRlbCgweDAwMDAsIHZtZWNoaXBfYmFzZWFkZHIgKyBMSU5UX01BUDEpOwkv LyBNYXAgYWxsIGludHMgdG8gMAorCQl3cml0ZWwoMHgwMDAwLCB2bWVjaGlwX2Jhc2VhZGRy ICsgTElOVF9NQVAyKTsJLy8gTWFwIGFsbCBpbnRzIHRvIDAKKwl9CisKKwkvLyBFbmFibGUg RE1BLCBtYWlsYm94LCBWSVJRICYgTE0gSW50ZXJydXB0cworCWlmICh2bWVfc3lzY29uKQor CQl0bXAgPSAweDAwRkYwN0ZFOworCWVsc2UKKwkJdG1wID0gMHgwMEZGMDcwMDsKKwl3cml0 ZWwodG1wLCB2bWVjaGlwX2Jhc2VhZGRyICsgTElOVF9FTik7CisKKwkvLyBEbyBhIHF1aWNr IHNhbml0eSB0ZXN0IG9mIHRoZSBicmlkZ2UKKwlpZiAocmVhZGwodm1lY2hpcF9iYXNlYWRk ciArIExJTlRfRU4pICE9IHRtcCkgeworCQlyZXR1cm4gKDApOworCX0KKwlpZiAocmVhZGwo dm1lY2hpcF9iYXNlYWRkciArIFBDSV9DTEFTU19SRVZJU0lPTikgIT0gMHgwNjgwMDAwMikg eworCQlyZXR1cm4gKDApOworCX0KKwlmb3IgKHRtcCA9IDE7IHRtcCA8IDB4ODAwMDAwMDA7 IHRtcCA9IHRtcCA8PCAxKSB7CisJCXdyaXRlbCh0bXAsIHZtZWNoaXBfYmFzZWFkZHIgKyBT Q1lDX0VOKTsKKwkJd3JpdGVsKH50bXAsIHZtZWNoaXBfYmFzZWFkZHIgKyBTQ1lDX0NNUCk7 CisJCWlmIChyZWFkbCh2bWVjaGlwX2Jhc2VhZGRyICsgU0NZQ19FTikgIT0gdG1wKSB7CisJ CQlyZXR1cm4gKDApOworCQl9CisJCWlmIChyZWFkbCh2bWVjaGlwX2Jhc2VhZGRyICsgU0NZ Q19DTVApICE9IH50bXApIHsKKwkJCXJldHVybiAoMCk7CisJCX0KKwl9CisKKwkvLyBkbyBh IG1haWwgYm94IGludGVycnVwdCB0byBjYWxpYnJhdGUgdGhlIGludGVycnVwdCBvdmVyaGVh ZC4KKworCWlycU92ZXJIZWFkU3RhcnQgPSBnZXRfdGJsKCk7CisJd3JpdGVsKDAsIHZtZWNo aXBfYmFzZWFkZHIgKyBNQk9YMSk7CisJZm9yICh0bXAgPSAwOyB0bXAgPCAxMDsgdG1wKysp IHsKKwkJdm1lX3N5bmNfZGF0YSgpOworCX0KKworCWlycU92ZXJIZWFkU3RhcnQgPSBnZXRf dGJsKCk7CisJd3JpdGVsKDAsIHZtZWNoaXBfYmFzZWFkZHIgKyBNQk9YMSk7CisJZm9yICh0 bXAgPSAwOyB0bXAgPCAxMDsgdG1wKyspIHsKKwkJdm1lX3N5bmNfZGF0YSgpOworCX0KKwor CW92ZXJIZWFkVGlja3MgPSB1bmlfaXJxX3RpbWUgLSBpcnFPdmVySGVhZFN0YXJ0OworCWlm IChvdmVySGVhZFRpY2tzID4gMCkgeworCQl2bWVjaGlwX2lycV9vdmVyaGVhZF90aWNrcyA9 IG92ZXJIZWFkVGlja3M7CisJfSBlbHNlIHsKKwkJdm1lY2hpcF9pcnFfb3ZlcmhlYWRfdGlj a3MgPSAxOworCX0KKwlyZXR1cm4gKDEpOworfQpkaWZmIC11IC0tbmV3LWZpbGUgLS1yZWN1 cnNpdmUgbGludXgtMi42LjI5LjYub3JpZy9kcml2ZXJzL3ZtZS9jYTkxYzA0Mi5oIGxpbnV4 LTIuNi4yOS42Lm1vZC9kcml2ZXJzL3ZtZS9jYTkxYzA0Mi5oCi0tLSBsaW51eC0yLjYuMjku Ni5vcmlnL2RyaXZlcnMvdm1lL2NhOTFjMDQyLmgJMTk2OS0xMi0zMSAxNzowMDowMC4wMDAw MDAwMDAgLTA3MDAKKysrIGxpbnV4LTIuNi4yOS42Lm1vZC9kcml2ZXJzL3ZtZS9jYTkxYzA0 Mi5oCTIwMDktMDctMjEgMTE6Mjg6MTguMDAwMDAwMDAwIC0wNzAwCkBAIC0wLDAgKzEsMzkw IEBACisvKgorICogY2E5MWMwNDIuaAorICoKKyAqIFN1cHBvcnQgZm9yIHRoZSBUdW5kcmEg VW5pdmVyc2UgMSBhbmQgVW5pdmVyc2UgSUkgVk1FIGJyaWRnZSBjaGlwcworICoKKyAqIEF1 dGhvcnM6IFRvbSBBcm1pc3RlYWQsIEFqaXQgUHJlbSAKKyAqIENvcHlyaWdodCAyMDA0LTIw MDcgTW90b3JvbGEgSW5jLgorICoKKyAqIERlcml2ZWQgZnJvbSBjYTkxYzA0Mi5oIGJ5IE1p Y2hhZWwgV3lyaWNrCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhl IHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hl ZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9u IDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIg dmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9jYTkxYzA0Ml9oCisjZGVmaW5lIF9jYTkxYzA0 Ml9oCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFB1YmxpYyBGdW5jdGlvbnMK Ky8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFRoaXMgaXMgdGhlIHR5cGVkZWYgZm9y IGEgVm1lSXJxSGFuZGxlcgordHlwZWRlZiB2b2lkICgqVGlycUhhbmRsZXIpIChpbnQgdm1l aXJxLCBpbnQgdmVjdG9yLCB2b2lkICpkZXZfaWQsCisJCQkgICAgIHN0cnVjdCBwdF9yZWdz ICogcmVncyk7CisvLyBUaGlzIGlzIHRoZSB0eXBlZGVmIGZvciBhIERNQSBUcmFuc2ZlciBD YWxsYmFjayBmdW5jdGlvbgordHlwZWRlZiB2b2lkICgqVERNQWNhbGxiYWNrKSAoaW50IHN0 YXR1cyk7CisKKy8vICBSZXR1cm5zIHRoZSBQQ0kgYmFzZWFkZHJlc3Mgb2YgdGhlIFVuaXZl cnNlIGNoaXAKK2NoYXIgKlVuaXZlcnNlX0Jhc2VBZGRyKHZvaWQpOworLy8gIFJldHVybnMg dGhlIFBDSSBJUlEgVGhhdCB0aGUgdW5pdmVyc2UgaXMgdXNpbmcKK2ludCBVbml2ZXJzZV9J UlEodm9pZCk7CisKK2NoYXIgKm1hcHZtZSh1bnNpZ25lZCBpbnQgcGNpLCB1bnNpZ25lZCBp bnQgdm1lLCB1bnNpZ25lZCBpbnQgc2l6ZSwKKwkgICAgIGludCBpbWFnZSwgaW50IGN0bCk7 Cit2b2lkIHVubWFwdm1lKGNoYXIgKnB0ciwgaW50IGltYWdlKTsKKworLy8gSW50ZXJydXB0 IFN0dWZmCit2b2lkIGVuYWJsZV92bWVpcnEodW5zaWduZWQgaW50IGlycSk7Cit2b2lkIGRp c2FibGVfdm1laXJxKHVuc2lnbmVkIGludCBpcnEpOworaW50IHJlcXVlc3Rfdm1laXJxKHVu c2lnbmVkIGludCBpcnEsIFRpcnFIYW5kbGVyKTsKK3ZvaWQgZnJlZV92bWVpcnEodW5zaWdu ZWQgaW50IGlycSk7CisKKy8vIERNQSBTdHVmZgorCitpbnQgVk1FX0J1c19FcnJvcih2b2lk KTsKK2ludCB1bmlfcHJvY2luZm8oY2hhciAqKTsKKworI2RlZmluZSBJUlFfVk9XTiAgICAw eDAwMDEKKyNkZWZpbmUgSVJRX1ZJUlExICAgMHgwMDAyCisjZGVmaW5lIElSUV9WSVJRMiAg IDB4MDAwNAorI2RlZmluZSBJUlFfVklSUTMgICAweDAwMDgKKyNkZWZpbmUgSVJRX1ZJUlE0 ICAgMHgwMDEwCisjZGVmaW5lIElSUV9WSVJRNSAgIDB4MDAyMAorI2RlZmluZSBJUlFfVklS UTYgICAweDAwNDAKKyNkZWZpbmUgSVJRX1ZJUlE3ICAgMHgwMDgwCisjZGVmaW5lIElSUV9E TUEgICAgIDB4MDEwMAorI2RlZmluZSBJUlFfTEVSUiAgICAweDAyMDAKKyNkZWZpbmUgSVJR X1ZFUlIgICAgMHgwNDAwCisjZGVmaW5lIElSUV9yZXMgICAgIDB4MDgwMAorI2RlZmluZSBJ UlFfSUFDSyAgICAweDEwMDAKKyNkZWZpbmUgSVJRX1NXSU5UICAgMHgyMDAwCisjZGVmaW5l IElSUV9TWVNGQUlMIDB4NDAwMAorI2RlZmluZSBJUlFfQUNGQUlMICAweDgwMDAKKworLy8g U2VlIFBhZ2UgMi03NyBpbiB0aGUgVW5pdmVyc2UgVXNlciBNYW51YWwKK3R5cGVkZWYgc3Ry dWN0IHsKKwl1bnNpZ25lZCBpbnQgZGN0bDsJLy8gRE1BIENvbnRyb2wKKwl1bnNpZ25lZCBp bnQgZHRiYzsJLy8gVHJhbnNmZXIgQnl0ZSBDb3VudAorCXVuc2lnbmVkIGludCBkbHY7CS8v IFBDSSBBZGRyZXNzCisJdW5zaWduZWQgaW50IHJlczE7CS8vIFJlc2VydmVkCisJdW5zaWdu ZWQgaW50IGR2YTsJLy8gVm1lIEFkZHJlc3MKKwl1bnNpZ25lZCBpbnQgcmVzMjsJLy8gUmVz ZXJ2ZWQKKwl1bnNpZ25lZCBpbnQgZGNwcDsJLy8gUG9pbnRlciB0byBOdW1lZCBDbWQgUGFj a2V0IHdpdGggclBOCisJdW5zaWduZWQgaW50IHJlczM7CS8vIFJlc2VydmVkCit9IFRETUFf Q21kX1BhY2tldDsKKworLyoKKyAqIEJlbG93IGhlcmUgaXMgbm9ybWFseSBub3QgdXNlZCBi eSBhIHVzZXIgbW9kdWxlCisgKi8KKyNkZWZpbmUgIERNQVRJTUVPVVQgMipIWjsKKworI2Rl ZmluZSBDT05GSUdfUkVHX1NQQUNFICAgICAgICAweEEwMDAwMDAwCisKKy8qIFVuaXZlcnNl IFJlZ2lzdGVyIE9mZnNldHMgKi8KKy8qIGdlbmVyYWwgUENJIGNvbmZpZ3VyYXRpb24gcmVn aXN0ZXJzICovCisjZGVmaW5lIFVOSVZfUENJX0lEICAgICAgICAgICAgIDB4MDAwCisjZGVm aW5lIFVOSVZfUENJX0NTUiAgICAgICAgICAgIDB4MDA0CisjZGVmaW5lIFVOSVZfUENJX0NM QVNTICAgICAgICAgIDB4MDA4CisjZGVmaW5lIFVOSVZfQk1fUENJX0NMQVNTX0JBU0UgICAg ICAgICAgMHhGRjAwMDAwMAorI2RlZmluZSBVTklWX09GX1BDSV9DTEFTU19CQVNFICAgICAg ICAgIDI0CisjZGVmaW5lIFVOSVZfQk1fUENJX0NMQVNTX1NVQiAgICAgICAgICAgMHgwMEZG MDAwMAorI2RlZmluZSBVTklWX09GX1BDSV9DTEFTU19TVUIgICAgICAgICAgIDE2CisjZGVm aW5lIFVOSVZfQk1fUENJX0NMQVNTX1BST0cgICAgICAgICAgMHgwMDAwRkYwMAorI2RlZmlu ZSBVTklWX09GX1BDSV9DTEFTU19QUk9HICAgICAgICAgIDgKKyNkZWZpbmUgVU5JVl9CTV9Q Q0lfQ0xBU1NfUklEICAgICAgICAgICAweDAwMDAwMEZGCisjZGVmaW5lIFVOSVZfT0ZfUENJ X0NMQVNTX1JJRCAgICAgICAgICAgMAorCisjZGVmaW5lIFVOSVZfT0ZfUENJX0NMQVNTX1JJ RF9VTklWRVJTRV9JIDAKKyNkZWZpbmUgVU5JVl9PRl9QQ0lfQ0xBU1NfUklEX1VOSVZFUlNF X0lJIDEKKworI2RlZmluZSBVTklWX1BDSV9NSVNDMCAgICAgICAgICAweDAwQworI2RlZmlu ZSBVTklWX0JNX1BDSV9NSVNDMF9CSVNUQyAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUg VU5JVl9CTV9QQ0lfTUlTQzBfU0JJU1QgICAgICAgICAweDYwMDAwMDAwCisjZGVmaW5lIFVO SVZfQk1fUENJX01JU0MwX0NDT0RFICAgICAgICAgMHgwRjAwMDAwMAorI2RlZmluZSBVTklW X0JNX1BDSV9NSVNDMF9NRlVOQ1QgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgVU5JVl9C TV9QQ0lfTUlTQzBfTEFZT1VUICAgICAgICAweDAwN0YwMDAwCisjZGVmaW5lIFVOSVZfQk1f UENJX01JU0MwX0xUSU1FUiAgICAgICAgMHgwMDAwRkYwMAorI2RlZmluZSBVTklWX09GX1BD SV9NSVNDMF9MVElNRVIgICAgICAgIDgKKyNkZWZpbmUgVU5JVl9QQ0lfQlMgICAgICAgICAg ICAgMHgwMTAKKyNkZWZpbmUgVU5JVl9QQ0lfTUlTQzEgICAgICAgICAgMHgwM0MKKworI2Rl ZmluZSBVTklWX0JNX0xTSV9DVExfRU4gICAgICAweDgwMDAwMDAwCisjZGVmaW5lIFVOSVZf Qk1fTFNJX0NUTF9QV0VOICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgVU5JVl9CTV9MU0lfQ1RM X1ZEVyAgICAgMHgwMEMwMDAwMAorI2RlZmluZSBVTklWX09GX0xTSV9DVExfVkRXICAgICAy MgorI2RlZmluZSBVTklWX0JNX0xTSV9DVExfVkFTICAgICAweDAwMDcwMDAwCisjZGVmaW5l IFVOSVZfT0ZfTFNJX0NUTF9WQVMgICAgIDE2CisjZGVmaW5lIFVOSVZfQk1fTFNJX0NUTF9Q R00gICAgIDB4MDAwMEMwMDAKKyNkZWZpbmUgVU5JVl9PRl9MU0lfQ1RMX1BHTSAgICAgMTQK KyNkZWZpbmUgVU5JVl9CTV9MU0lfQ1RMX1NVUEVSICAgMHgwMDAwMzAwMAorI2RlZmluZSBV TklWX09GX0xTSV9DVExfU1VQRVIgICAxMgorI2RlZmluZSBVTklWX0JNX0xTSV9DVExfVkNU ICAgICAweDAwMDAwMTAwCisjZGVmaW5lIFVOSVZfQk1fTFNJX0NUTF9MQVMgICAgIDB4MDAw MDAwMDMKKyNkZWZpbmUgVU5JVl9PRl9MU0lfQ1RMX0xBUyAgICAgMAorI2RlZmluZSBVTklW X0JNX0xTSV9DVExfUkVTRVJWRUQgKH4gKFVOSVZfQk1fTFNJX0NUTF9FTiB8IFVOSVZfQk1f TFNJX0NUTF9QV0VOIHwgVU5JVl9CTV9MU0lfQ1RMX1ZEVyB8IFVOSVZfQk1fTFNJX0NUTF9W QVMgfCBVTklWX0JNX0xTSV9DVExfUEdNIHwgVU5JVl9CTV9MU0lfQ1RMX1NVUEVSIHwgVU5J Vl9CTV9MU0lfQ1RMX1ZDVCB8IFVOSVZfQk1fTFNJX0NUTF9MQVMpKQorCisjZGVmaW5lIFBD SV9TSVpFXzgJICAgIDB4MDAwMQorI2RlZmluZSBQQ0lfU0laRV8xNgkgICAgMHgwMDAyCisj ZGVmaW5lIFBDSV9TSVpFXzMyCSAgICAweDAwMDMKKworI2RlZmluZSBJT0NUTF9TRVRfQ1RM IAkweEYwMDEKKyNkZWZpbmUgSU9DVExfU0VUX0JTCTB4RjAwMgorI2RlZmluZSBJT0NUTF9T RVRfQkQJMHhGMDAzCisjZGVmaW5lIElPQ1RMX1NFVF9UTwkweEYwMDQKKyNkZWZpbmUgSU9D VExfUENJX1NJWkUgIDB4RjAwNQorI2RlZmluZSBJT0NUTF9TRVRfTU9ERSAJMHhGMDA2Cisj ZGVmaW5lIElPQ1RMX1NFVF9XSU5UICAweEYwMDcJLy8gV2FpdCBmb3IgaW50ZXJydXB0IGJl Zm9yZSByZWFkCisKKyNkZWZpbmUgTFNJMF9DVEwJMHgwMTAwCisjZGVmaW5lIExTSTBfQlMJ CTB4MDEwNAorI2RlZmluZSBMU0kwX0JECQkweDAxMDgKKyNkZWZpbmUgTFNJMF9UTwkJMHgw MTBDCisKKyNkZWZpbmUgTFNJMV9DVEwJICAgICAgMHgwMTE0CisjZGVmaW5lIExTSTFfQlMJ CSAgICAgIDB4MDExOAorI2RlZmluZSBMU0kxX0JECQkgICAgICAweDAxMUMKKyNkZWZpbmUg TFNJMV9UTwkJICAgICAgMHgwMTIwCisKKyNkZWZpbmUgTFNJMl9DVEwJICAgICAgMHgwMTI4 CisjZGVmaW5lIExTSTJfQlMJCSAgICAgIDB4MDEyQworI2RlZmluZSBMU0kyX0JECQkgICAg ICAweDAxMzAKKyNkZWZpbmUgTFNJMl9UTwkJICAgICAgMHgwMTM0CisKKyNkZWZpbmUgTFNJ M19DVEwJICAgICAgMHgwMTNDCisjZGVmaW5lIExTSTNfQlMJCSAgICAgIDB4MDE0MAorI2Rl ZmluZSBMU0kzX0JECQkgICAgICAweDAxNDQKKyNkZWZpbmUgTFNJM19UTwkJICAgICAgMHgw MTQ4CisKKyNkZWZpbmUgTFNJNF9DVEwJICAgICAgMHgwMUEwCisjZGVmaW5lIExTSTRfQlMJ CSAgICAgIDB4MDFBNAorI2RlZmluZSBMU0k0X0JECQkgICAgICAweDAxQTgKKyNkZWZpbmUg TFNJNF9UTwkJICAgICAgMHgwMUFDCisKKyNkZWZpbmUgTFNJNV9DVEwJICAgICAgMHgwMUI0 CisjZGVmaW5lIExTSTVfQlMJCSAgICAgIDB4MDFCOAorI2RlZmluZSBMU0k1X0JECQkgICAg ICAweDAxQkMKKyNkZWZpbmUgTFNJNV9UTwkJICAgICAgMHgwMUMwCisKKyNkZWZpbmUgTFNJ Nl9DVEwJICAgICAgMHgwMUM4CisjZGVmaW5lIExTSTZfQlMJCSAgICAgIDB4MDFDQworI2Rl ZmluZSBMU0k2X0JECQkgICAgICAweDAxRDAKKyNkZWZpbmUgTFNJNl9UTwkJICAgICAgMHgw MUQ0CisKKyNkZWZpbmUgTFNJN19DVEwJICAgICAgMHgwMURDCisjZGVmaW5lIExTSTdfQlMJ CSAgICAgIDB4MDFFMAorI2RlZmluZSBMU0k3X0JECQkgICAgICAweDAxRTQKKyNkZWZpbmUg TFNJN19UTwkJICAgICAgMHgwMUU4CisKKyNkZWZpbmUgU0NZQ19DVEwJCTB4MDE3MAorI2Rl ZmluZSBTQ1lDX0FERFIJCTB4MDE3NAorI2RlZmluZSBTQ1lDX0VOCQkJMHgwMTc4CisjZGVm aW5lIFNDWUNfQ01QCQkweDAxN0MKKyNkZWZpbmUgU0NZQ19TV1AJCTB4MDE4MAorI2RlZmlu ZSBMTUlTQwkJCTB4MDE4NAorI2RlZmluZSBVTklWX0JNX0xNSVNDX0NSVCAgICAgICAgICAg ICAgIDB4RjAwMDAwMDAKKyNkZWZpbmUgVU5JVl9PRl9MTUlTQ19DUlQgICAgICAgICAgICAg ICAyOAorI2RlZmluZSBVTklWX0JNX0xNSVNDX0NXVCAgICAgICAgICAgICAgIDB4MEYwMDAw MDAKKyNkZWZpbmUgVU5JVl9PRl9MTUlTQ19DV1QgICAgICAgICAgICAgICAyNAorI2RlZmlu ZSBTTFNJCQkgICAgICAgIDB4MDE4OAorI2RlZmluZSBVTklWX0JNX1NMU0lfRU4gICAgICAg ICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgVU5JVl9CTV9TTFNJX1BXRU4gICAgICAg ICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIFVOSVZfQk1fU0xTSV9WRFcgICAgICAgICAg ICAgICAgMHgwMEYwMDAwMAorI2RlZmluZSBVTklWX09GX1NMU0lfVkRXICAgICAgICAgICAg ICAgIDIwCisjZGVmaW5lIFVOSVZfQk1fU0xTSV9QR00gICAgICAgICAgICAgICAgMHgwMDAw RjAwMAorI2RlZmluZSBVTklWX09GX1NMU0lfUEdNICAgICAgICAgICAgICAgIDEyCisjZGVm aW5lIFVOSVZfQk1fU0xTSV9TVVBFUiAgICAgICAgICAgICAgMHgwMDAwMEYwMAorI2RlZmlu ZSBVTklWX09GX1NMU0lfU1VQRVIgICAgICAgICAgICAgIDgKKyNkZWZpbmUgVU5JVl9CTV9T TFNJX0JTICAgICAgICAgICAgICAgICAweDAwMDAwMEY2CisjZGVmaW5lIFVOSVZfT0ZfU0xT SV9CUyAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBVTklWX0JNX1NMU0lfTEFTICAgICAg ICAgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgVU5JVl9PRl9TTFNJX0xBUyAgICAgICAg ICAgICAgICAwCisjZGVmaW5lIFVOSVZfQk1fU0xTSV9SRVNFUlZFRCAgICAgICAgICAgMHgz RjBGMDAwMAorI2RlZmluZSBMX0NNREVSUgkJMHgwMThDCisjZGVmaW5lIExBRVJSCQkgICAg ICAgIDB4MDE5MAorCisjZGVmaW5lIERDVEwJCSAgICAgICAgMHgwMjAwCisjZGVmaW5lIERU QkMJCSAgICAgICAgMHgwMjA0CisjZGVmaW5lIERMQQkJCTB4MDIwOAorI2RlZmluZSBEVkEJ CQkweDAyMTAKKyNkZWZpbmUgRENQUAkJICAgICAgICAweDAyMTgKKyNkZWZpbmUgREdDUwkJ ICAgICAgICAweDAyMjAKKyNkZWZpbmUgRF9MTFVFCQkJMHgwMjI0CisKKyNkZWZpbmUgTElO VF9FTgkJICAgICAgMHgwMzAwCisjZGVmaW5lIFVOSVZfQk1fTElOVF9BQ0ZBSUwgICAgICAg ICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBVTklWX0JNX0xJTlRfU1lTRkFJTCAgICAgICAg ICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgVU5JVl9CTV9MSU5UX1NXX0lOVCAgICAgICAgICAg ICAweDAwMDAyMDAwCisjZGVmaW5lIFVOSVZfQk1fTElOVF9TV19JQUNLICAgICAgICAgICAg MHgwMDAwMTAwMAorI2RlZmluZSBVTklWX0JNX0xJTlRfVkVSUiAgICAgICAgICAgICAgIDB4 MDAwMDA0MDAKKyNkZWZpbmUgVU5JVl9CTV9MSU5UX0xFUlIgICAgICAgICAgICAgICAweDAw MDAwMjAwCisjZGVmaW5lIFVOSVZfQk1fTElOVF9ETUEgICAgICAgICAgICAgICAgMHgwMDAw MDEwMAorI2RlZmluZSBVTklWX0JNX0xJTlRfTE0gICAgICAgICAgICAgICAgIDB4MDBGMDAw MDAKKyNkZWZpbmUgVU5JVl9CTV9MSU5UX01CT1ggICAgICAgICAgICAgICAweDAwMEYwMDAw CisjZGVmaW5lIFVOSVZfQk1fTElOVF9WSVJRICAgICAgICAgICAgICAgMHgwMDAwMDBGRQor I2RlZmluZSBVTklWX0JNX0xJTlRfVklSUTcgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNk ZWZpbmUgVU5JVl9CTV9MSU5UX1ZJUlE2ICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVm aW5lIFVOSVZfQk1fTElOVF9WSVJRNSAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmlu ZSBVTklWX0JNX0xJTlRfVklSUTQgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUg VU5JVl9CTV9MSU5UX1ZJUlEzICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIFVO SVZfQk1fTElOVF9WSVJRMiAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBVTklW X0JNX0xJTlRfVklSUTEgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgVU5JVl9C TV9MSU5UX1ZPV04gICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIExJTlRfU1RB VAkgICAgICAweDAzMDQKKyNkZWZpbmUgTElOVF9NQVAwCSAgICAgIDB4MDMwOAorI2RlZmlu ZSBMSU5UX01BUDEJICAgICAgMHgwMzBDCisjZGVmaW5lIFZJTlRfRU4JCSAgICAgIDB4MDMx MAorI2RlZmluZSBWSU5UX1NUQVQJICAgICAgMHgwMzE0CisjZGVmaW5lIFZJTlRfTUFQMAkg ICAgICAweDAzMTgKKyNkZWZpbmUgVklOVF9NQVAxCSAgICAgIDB4MDMxQworI2RlZmluZSBT VEFUSUQJCSAgICAgIDB4MDMyMAorI2RlZmluZSBWMV9TVEFUSUQJICAgICAgMHgwMzI0Cisj ZGVmaW5lIFYyX1NUQVRJRAkgICAgICAweDAzMjgKKyNkZWZpbmUgVjNfU1RBVElECSAgICAg IDB4MDMyQworI2RlZmluZSBWNF9TVEFUSUQJICAgICAgMHgwMzMwCisjZGVmaW5lIFY1X1NU QVRJRAkgICAgICAweDAzMzQKKyNkZWZpbmUgVjZfU1RBVElECSAgICAgIDB4MDMzOAorI2Rl ZmluZSBWN19TVEFUSUQJICAgICAgMHgwMzNDCisjZGVmaW5lIExJTlRfTUFQMgkgICAgICAw eDAzNDAKKyNkZWZpbmUgVklOVF9NQVAyCSAgICAgIDB4MDM0NAorCisjZGVmaW5lIE1CT1gw CSAgICAgICAgICAgICAgMHgwMzQ4CisjZGVmaW5lIE1CT1gxCSAgICAgICAgICAgICAgMHgw MzRDCisjZGVmaW5lIE1CT1gyCQkgICAgICAweDAzNTAKKyNkZWZpbmUgTUJPWDMJCSAgICAg IDB4MDM1NAorI2RlZmluZSBTRU1BMAkJICAgICAgMHgwMzU4CisjZGVmaW5lIFNFTUExCQkg ICAgICAweDAzNUMKKworI2RlZmluZSBNQVNUX0NUTAkgICAgICAweDA0MDAKKyNkZWZpbmUg VU5JVl9CTV9NQVNUX0NUTF9NQVhSVFJZICAgICAgICAweEYwMDAwMDAwCisjZGVmaW5lIFVO SVZfT0ZfTUFTVF9DVExfTUFYUlRSWSAgICAgICAgMjgKKyNkZWZpbmUgVU5JVl9CTV9NQVNU X0NUTF9QV09OICAgICAgICAgICAweDBGMDAwMDAwCisjZGVmaW5lIFVOSVZfT0ZfTUFTVF9D VExfUFdPTiAgICAgICAgICAgMjQKKyNkZWZpbmUgVU5JVl9CTV9NQVNUX0NUTF9WUkwgICAg ICAgICAgICAweDAwQzAwMDAwCisjZGVmaW5lIFVOSVZfT0ZfTUFTVF9DVExfVlJMICAgICAg ICAgICAgMjIKKyNkZWZpbmUgVU5JVl9CTV9NQVNUX0NUTF9WUk0gICAgICAgICAgICAweDAw MjAwMDAwCisjZGVmaW5lIFVOSVZfQk1fTUFTVF9DVExfVlJFTCAgICAgICAgICAgMHgwMDEw MDAwMAorI2RlZmluZSBVTklWX0JNX01BU1RfQ1RMX1ZPV04gICAgICAgICAgIDB4MDAwODAw MDAKKyNkZWZpbmUgVU5JVl9CTV9NQVNUX0NUTF9WT1dOX0FDSyAgICAgICAweDAwMDQwMDAw CisjZGVmaW5lIFVOSVZfQk1fTUFTVF9DVExfUEFCUyAgICAgICAgICAgMHgwMDAwMTAwMAor I2RlZmluZSBVTklWX0JNX01BU1RfQ1RMX0JVU19OTyAgICAgICAgIDB4MDAwMDAwMEYKKyNk ZWZpbmUgVU5JVl9PRl9NQVNUX0NUTF9CVVNfTk8gICAgICAgICAwCisKKyNkZWZpbmUgTUlT Q19DVEwJICAgICAgMHgwNDA0CisjZGVmaW5lIFVOSVZfQk1fTUlTQ19DVExfVkJUTyAgICAg ICAgICAgMHhGMDAwMDAwMAorI2RlZmluZSBVTklWX09GX01JU0NfQ1RMX1ZCVE8gICAgICAg ICAgIDI4CisjZGVmaW5lIFVOSVZfQk1fTUlTQ19DVExfVkFSQiAgICAgICAgICAgMHgwNDAw MDAwMAorI2RlZmluZSBVTklWX0JNX01JU0NfQ1RMX1ZBUkJUTyAgICAgICAgIDB4MDMwMDAw MDAKKyNkZWZpbmUgVU5JVl9PRl9NSVNDX0NUTF9WQVJCVE8gICAgICAgICAyNAorI2RlZmlu ZSBVTklWX0JNX01JU0NfQ1RMX1NXX0xSU1QgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUg VU5JVl9CTV9NSVNDX0NUTF9TV19TUlNUICAgICAgICAweDAwNDAwMDAwCisjZGVmaW5lIFVO SVZfQk1fTUlTQ19DVExfQkkgICAgICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBVTklW X0JNX01JU0NfQ1RMX0VOR0JJICAgICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgVU5JVl9C TV9NSVNDX0NUTF9SRVNDSU5EICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIFVOSVZfQk1f TUlTQ19DVExfU1lTQ09OICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBVTklWX0JNX01J U0NfQ1RMX1Y2NEFVVE8gICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgVU5JVl9CTV9NSVND X0NUTF9SRVNFUlZFRCAgICAgICAweDA4MjBGRkZGCisKKyNkZWZpbmUgTUlTQ19TVEFUCSAg ICAgIDB4MDQwOAorI2RlZmluZSBVTklWX0JNX01JU0NfU1RBVF9FTkRJQU4gICAgICAgIDB4 ODAwMDAwMDAKKyNkZWZpbmUgVU5JVl9CTV9NSVNDX1NUQVRfTENMU0laRSAgICAgICAweDQw MDAwMDAwCisjZGVmaW5lIFVOSVZfQk1fTUlTQ19TVEFUX0RZNEFVVE8gICAgICAgMHgwODAw MDAwMAorI2RlZmluZSBVTklWX0JNX01JU0NfU1RBVF9NWUJCU1kgICAgICAgIDB4MDAyMDAw MDAKKyNkZWZpbmUgVU5JVl9CTV9NSVNDX1NUQVRfRFk0RE9ORSAgICAgICAweDAwMDgwMDAw CisjZGVmaW5lIFVOSVZfQk1fTUlTQ19TVEFUX1RYRkUgICAgICAgICAgMHgwMDA0MDAwMAor I2RlZmluZSBVTklWX0JNX01JU0NfU1RBVF9SWEZFICAgICAgICAgIDB4MDAwMjAwMDAKKyNk ZWZpbmUgVU5JVl9CTV9NSVNDX1NUQVRfRFk0QVVUT0lEICAgICAweDAwMDBGRjAwCisjZGVm aW5lIFVOSVZfT0ZfTUlTQ19TVEFUX0RZNEFVVE9JRCAgICAgOAorCisjZGVmaW5lIFVTRVJf QU0JCSAgICAgIDB4MDQwQworCisjZGVmaW5lIFZTSTBfQ1RMCSAgICAgIDB4MEYwMAorI2Rl ZmluZSBWU0kwX0JTCQkgICAgICAweDBGMDQKKyNkZWZpbmUgVlNJMF9CRAkJICAgICAgMHgw RjA4CisjZGVmaW5lIFZTSTBfVE8JCSAgICAgIDB4MEYwQworCisjZGVmaW5lIFZTSTFfQ1RM CSAgICAgIDB4MEYxNAorI2RlZmluZSBWU0kxX0JTCQkgICAgICAweDBGMTgKKyNkZWZpbmUg VlNJMV9CRAkJICAgICAgMHgwRjFDCisjZGVmaW5lIFZTSTFfVE8JCSAgICAgIDB4MEYyMAor CisjZGVmaW5lIFZTSTJfQ1RMCSAgICAgIDB4MEYyOAorI2RlZmluZSBWU0kyX0JTCQkgICAg ICAweDBGMkMKKyNkZWZpbmUgVlNJMl9CRAkJICAgICAgMHgwRjMwCisjZGVmaW5lIFZTSTJf VE8JCSAgICAgIDB4MEYzNAorCisjZGVmaW5lIFZTSTNfQ1RMCSAgICAgIDB4MEYzQworI2Rl ZmluZSBWU0kzX0JTCQkgICAgICAweDBGNDAKKyNkZWZpbmUgVlNJM19CRAkJICAgICAgMHgw RjQ0CisjZGVmaW5lIFZTSTNfVE8JCSAgICAgIDB4MEY0OAorCisjZGVmaW5lIExNX0NUTAkJ ICAgICAgMHgwRjY0CisjZGVmaW5lIExNX0JTCQkgICAgICAweDBGNjgKKworI2RlZmluZSBW UkFJX0NUTAkgICAgICAweDBGNzAKKyNkZWZpbmUgVU5JVl9CTV9WUkFJX0NUTF9FTiAgICAg ICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIFVOSVZfQk1fVlJBSV9DVExfUEdNICAgICAg ICAgICAgMHgwMEMwMDAwMAorI2RlZmluZSBVTklWX09GX1ZSQUlfQ1RMX1BHTSAgICAgICAg ICAgIDIyCisjZGVmaW5lIFVOSVZfQk1fVlJBSV9DVExfU1VQRVIgICAgICAgICAgMHgwMDMw MDAwMAorI2RlZmluZSBVTklWX09GX1ZSQUlfQ1RMX1NVUEVSICAgICAgICAgIDIwCisjZGVm aW5lIFVOSVZfQk1fVlJBSV9DVExfVkFTICAgICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmlu ZSBVTklWX09GX1ZSQUlfQ1RMX1ZBUyAgICAgICAgICAgIDE2CisKKyNkZWZpbmUgVlJBSV9C UwkJICAgICAgMHgwRjc0CisjZGVmaW5lIFZDU1JfQ1RMCSAgICAgIDB4MEY4MAorI2RlZmlu ZSBWQ1NSX1RPCQkgICAgICAweDBGODQKKyNkZWZpbmUgVl9BTUVSUgkJICAgICAgMHgwRjg4 CisjZGVmaW5lIFZBRVJSCQkJMHgwRjhDCisKKyNkZWZpbmUgVlNJNF9DVEwJICAgICAgMHgw RjkwCisjZGVmaW5lIFZTSTRfQlMJCSAgICAgIDB4MEY5NAorI2RlZmluZSBWU0k0X0JECQkg ICAgICAweDBGOTgKKyNkZWZpbmUgVlNJNF9UTwkJICAgICAgMHgwRjlDCisKKyNkZWZpbmUg VlNJNV9DVEwJICAgICAgMHgwRkE0CisjZGVmaW5lIFZTSTVfQlMJCSAgICAgIDB4MEZBOAor I2RlZmluZSBWU0k1X0JECQkgICAgICAweDBGQUMKKyNkZWZpbmUgVlNJNV9UTwkJICAgICAg MHgwRkIwCisKKyNkZWZpbmUgVlNJNl9DVEwJICAgICAgMHgwRkI4CisjZGVmaW5lIFZTSTZf QlMJCSAgICAgIDB4MEZCQworI2RlZmluZSBWU0k2X0JECQkgICAgICAweDBGQzAKKyNkZWZp bmUgVlNJNl9UTwkJICAgICAgMHgwRkM0CisKKyNkZWZpbmUgVlNJN19DVEwJICAgICAgMHgw RkNDCisjZGVmaW5lIFZTSTdfQlMJCSAgICAgIDB4MEZEMAorI2RlZmluZSBWU0k3X0JECQkg ICAgICAweDBGRDQKKyNkZWZpbmUgVlNJN19UTwkJICAgICAgMHgwRkQ4CisKKyNkZWZpbmUg VkNTUl9DTFIJICAgICAgMHgwRkY0CisjZGVmaW5lIFZDU1JfU0VUCSAgICAgIDB4MEZGOAor I2RlZmluZSBWQ1NSX0JTCQkgICAgICAweDBGRkMKKworLy8gRE1BIEdlbmVyYWwgQ29udHJv bC9TdGF0dXMgUmVnaXN0ZXIgREdDUyAoMHgyMjApCisvLyAzMi0yNCB8fCAgR08gICB8IFNU T1BSIHwgSEFMVFIgfCAgIDAgICB8fCBDSEFJTiB8ICAgMCAgIHwgICAwICAgfCAgIDAgICB8 fAorLy8gMjMtMTYgfHwgICAgICAgICAgICAgIFZPTiAgICAgICAgICAgICAgfHwgICAgICAg ICAgICAgVk9GRiAgICAgICAgICAgICAgfHwKKy8vIDE1LTA4IHx8ICBBQ1QgIHwgU1RPUCAg fCBIQUxUICB8ICAgMCAgIHx8IERPTkUgIHwgTEVSUiAgfCBWRVJSICB8IFBfRVJSIHx8Cisv LyAwNy0wMCB8fCAgIDAgICB8IElOVF9TIHwgSU5UX0ggfCAgIDAgICB8fCBJX0RORSB8IElf TEVSIHwgSV9WRVIgfCBJX1BFUiB8fAorCisvLyBWT04gLSBMZW5ndGggUGVyIERNQSBWTUVC dXMgVHJhbnNmZXIKKy8vICAwMDAwID0gTm9uZQorLy8gIDAwMDEgPSAyNTYgQnl0ZXMKKy8v ICAwMDEwID0gNTEyIAorLy8gIDAwMTEgPSAxMDI0CisvLyAgMDEwMCA9IDIwNDgKKy8vICAw MTAxID0gNDA5NgorLy8gIDAxMTAgPSA4MTkyCisvLyAgMDExMSA9IDE2Mzg0CisKKy8vIFZP RkYgLSB3YWl0IGJldHdlZW4gRE1BIHRlbnVyZXMKKy8vICAwMDAwID0gMCAgICB1cworLy8g IDAwMDEgPSAxNiAgIAorLy8gIDAwMTAgPSAzMiAgIAorLy8gIDAwMTEgPSA2NCAgIAorLy8g IDAxMDAgPSAxMjggIAorLy8gIDAxMDEgPSAyNTYgIAorLy8gIDAxMTAgPSA1MTIgIAorLy8g IDAxMTEgPSAxMDI0IAorCisjZW5kaWYJCQkJLyogX2NhOTFjMDQyX2ggKi8KZGlmZiAtdSAt LW5ldy1maWxlIC0tcmVjdXJzaXZlIGxpbnV4LTIuNi4yOS42Lm9yaWcvZHJpdmVycy92bWUv S2NvbmZpZyBsaW51eC0yLjYuMjkuNi5tb2QvZHJpdmVycy92bWUvS2NvbmZpZwotLS0gbGlu dXgtMi42LjI5LjYub3JpZy9kcml2ZXJzL3ZtZS9LY29uZmlnCTE5NjktMTItMzEgMTc6MDA6 MDAuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYuMjkuNi5tb2QvZHJpdmVycy92bWUv S2NvbmZpZwkyMDA5LTA3LTIxIDExOjI4OjE4LjAwMDAwMDAwMCAtMDcwMApAQCAtMCwwICsx LDY5IEBACisjCisjIFZNRSBicmlkZ2UgZGV2aWNlIGNvbmZpZ3VyYXRpb24KKyMKKworbWVu dSAiVk1FIEJyaWRnZSBkZXZpY2VzIgorCWRlcGVuZHMgb24gKE1WTUU1MTAwIHx8IE1WTUU1 NTAwIHx8IE1WTUU2MTAwIHx8IE1WTUUzMTAwIHx8IE1WTUU3MTAwIHx8IE1WTUU0MTAwKSAK KworY29uZmlnIFZNRV9CUklER0UKKwl0cmlzdGF0ZSAiVk1FIEJyaWRnZSBTdXBwb3J0Igor CWRlcGVuZHMgb24gKE1WTUU1MTAwIHx8IE1WTUU1NTAwIHx8IE1WTUU2MTAwIHx8IE1WTUUz MTAwIHx8IE1WTUU3MTAwIHx8IE1WTUU0MTAwKQorCWhlbHAKKwkgIElmIHlvdSBzYXkgWSBo ZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgdGhlIENBOTFDMDQyIChVbml2ZXJzZSBJL0lJKQor ICAgICAgICAgIGFuZCBUdW5kcmEgVFNJMTQ4IFZNRSBicmlkZ2UgY2hpcHMuIElmIHlvdSBo YXZlICJ1ZGV2IiBjb3JyZWN0bHkgCisgICAgICAgICAgY29uZmlndXJlZCBpbiB5b3VyIHJv b3QgZmlsZSBzeXN0ZW0gdGhlIHJlcXVpcmVkIGRldmljZSBub2RlcyB3aWxsIAorCSAgZ2V0 IGNyZWF0ZWQgYXV0b21hdGljYWxseS4gT3RoZXJ3aXNlLCBjcmVhdGUgdGhlIGZvbGxvd2lu ZyBjaGFyYWN0ZXIgCisgICAgICAgICAgc3BlY2lhbCBmaWxlcyB3aXRoIG1ham9yIG51bWJl ciAyMjEgdXNpbmcgbWtub2QgKCJtYW4gbWtub2QiKS4gCisgICAgICAgICAgRm9yIGRldGFp bHMsIHJlZmVyIHRvIHRoZSBWTUUgRHJpdmVyIFVzZXIncyBHdWlkZS4KKworCQlta25vZCAv ZGV2L3ZtZV9tMCAgYyAyMjEgMAorCQlta25vZCAvZGV2L3ZtZV9tMSAgYyAyMjEgMQorCQlt a25vZCAvZGV2L3ZtZV9tMiAgYyAyMjEgMgorCQlta25vZCAvZGV2L3ZtZV9tMyAgYyAyMjEg MworCQlta25vZCAvZGV2L3ZtZV9tNCAgYyAyMjEgNAorCQlta25vZCAvZGV2L3ZtZV9tNSAg YyAyMjEgNQorCQlta25vZCAvZGV2L3ZtZV9tNiAgYyAyMjEgNgorCQlta25vZCAvZGV2L3Zt ZV9tNyAgYyAyMjEgNworCQlta25vZCAvZGV2L3ZtZV9zMCAgYyAyMjEgOAorCQlta25vZCAv ZGV2L3ZtZV9zMSAgYyAyMjEgOQorCQlta25vZCAvZGV2L3ZtZV9zMiAgYyAyMjEgMTAKKwkJ bWtub2QgL2Rldi92bWVfczMgIGMgMjIxIDExCisJCW1rbm9kIC9kZXYvdm1lX3M0ICBjIDIy MSAxMgorCQlta25vZCAvZGV2L3ZtZV9zNSAgYyAyMjEgMTMKKwkJbWtub2QgL2Rldi92bWVf czYgIGMgMjIxIDE0CisJCW1rbm9kIC9kZXYvdm1lX3M3ICBjIDIyMSAxNQorCQlta25vZCAv ZGV2L3ZtZV9kbWEwIGMgMjIxIDE2CisJCW1rbm9kIC9kZXYvdm1lX2RtYTEgYyAyMjEgMTcK KwkJbWtub2QgL2Rldi92bWVfY3RsICBjIDIyMSAzMgorCQlta25vZCAvZGV2L3ZtZV9yZWdz IGMgMjIxIDMzCisJCW1rbm9kIC9kZXYvdm1lX3JtdzAgYyAyMjEgMzQKKwkJbWtub2QgL2Rl di92bWVfbG0wICBjIDIyMSAzNQorCisJICBJZiB1bnN1cmUsIHNheSBOLgorCitjb25maWcg Vk1FX0JSSURHRV9CT09UTUVNCisJYm9vbCAiVk1FIEJyaWRnZSBib290bWVtIgorCWRlcGVu ZHMgb24gVk1FX0JSSURHRQorCWRlZmF1bHQgbgorCWhlbHAKKwkgIElmIHlvdSBzYXkgWSBo ZXJlLCB0aGUgVk1FIGJyaWRnZSBkcml2ZXIgd2lsbCBnZXQgbWVtb3J5IGZvciAKKwkgIGlu Ym91bmQgd2luZG93IDcgdXNpbmcgdGhlIGFsbG9jX2Jvb3RtZW0qIEFQSSBpbnN0ZWFkIG9m IHRoZSAKKwkgIHN0YW5kYXJkIERNQSBBUEkuIFlvdSB3YW50IHRvIHNheSBZIGhlcmUgaWYg eW91IHdhbnQgCisJICBhIGh1Z2Ugd2luZG93IG9wZW5lZCB1cCB3aGVyZSB5b3Ugd291bGQg cnVuIGludG8gYSAtRU5PTUVNIGVycm9yIAorICAgICAgICAgIGlmIHlvdSB0cmllZCB0byBn ZXQgdGhpcyBtZW1vcnkgZHluYW1pY2FsbHkuIE1lbW9yeSBmb3Igb3RoZXIgCisgICAgICAg ICAgaW5ib3VuZCB3aW5kb3dzIHdpbGwgc3RpbGwgZ2V0IGR5bmFtaWNhbGx5IGFsbG9jYXRl ZCwgd2hlbiAKKyAgICAgICAgICByZXF1ZXN0ZWQsIHVzaW5nIHRoZSBETUEgQVBJLgorCitj b25maWcgVk1FX0JSSURHRV9CT09UTUVNX1NJWkUKKwlpbnQgIlZNRSBCcmlkZ2UgYm9vdG1l bSBzaXplIgorCWRlcGVuZHMgb24gVk1FX0JSSURHRV9CT09UTUVNCisJcmFuZ2UgOCA1MTIK KwlkZWZhdWx0ICI4IgorCWhlbHAKKwkgIFRoZSBhbW91bnQgb2YgYm9vdCBtZW1vcnksIGlu IG1lZ2FieXRlcywgdG8gYmUgcGVybWFuZW50bHkgCisgICAgICAgICAgYWxsb2NhdGVkIGZv ciBpbmJvdW5kIHdpbmRvdyA3LiBXaGlsZSB0aGlzIHBhcmFtZXRlciBhbGxvd3MgCisgICAg ICAgICAgeW91IHRvIGFzayBmb3IgdXB0byA1MTJNLCB0aGUgYW1vdW50IG9mIG1lbW9yeSB0 aGF0IHdpbGwgYmUgCisgICAgICAgICAgYWxsb2NhdGVkIGlzIGNhcHBlZCBhdCBoYWxmIHRo ZSB0b3RhbCBwaHlzaWNhbCBtZW1vcnkgb3IgCisgICAgICAgICAgdGhlIG1heGltdW0gdGhh dCB0aGUgYWxsb2NfYm9vdG1lbSgpIGNhbGwgbWFrZXMgYXZhaWxhYmxlLgorCitlbmRtZW51 CmRpZmYgLXUgLS1uZXctZmlsZSAtLXJlY3Vyc2l2ZSBsaW51eC0yLjYuMjkuNi5vcmlnL2Ry aXZlcnMvdm1lL01ha2VmaWxlIGxpbnV4LTIuNi4yOS42Lm1vZC9kcml2ZXJzL3ZtZS9NYWtl ZmlsZQotLS0gbGludXgtMi42LjI5LjYub3JpZy9kcml2ZXJzL3ZtZS9NYWtlZmlsZQkxOTY5 LTEyLTMxIDE3OjAwOjAwLjAwMDAwMDAwMCAtMDcwMAorKysgbGludXgtMi42LjI5LjYubW9k L2RyaXZlcnMvdm1lL01ha2VmaWxlCTIwMDktMDctMjEgMTE6Mjg6MTguMDAwMDAwMDAwIC0w NzAwCkBAIC0wLDAgKzEsOCBAQAorIworIyBNYWtlZmlsZSBmb3IgdGhlIFZNRSBicmlkZ2Ug ZGV2aWNlIGRyaXZlcnMuCisjCisKK3ZtZW1vZC1vYmpzCQk6PSB2bWVsaW51eC5vIHZtZWRy di5vIHRzaTE0OC5vIGNhOTFjMDQyLm8KKworb2JqLSQoQ09ORklHX1ZNRV9CUklER0UpICs9 IHZtZW1vZC5vIAorCmRpZmYgLXUgLS1uZXctZmlsZSAtLXJlY3Vyc2l2ZSBsaW51eC0yLjYu MjkuNi5vcmlnL2RyaXZlcnMvdm1lL3RzaTE0OC5jIGxpbnV4LTIuNi4yOS42Lm1vZC9kcml2 ZXJzL3ZtZS90c2kxNDguYwotLS0gbGludXgtMi42LjI5LjYub3JpZy9kcml2ZXJzL3ZtZS90 c2kxNDguYwkxOTY5LTEyLTMxIDE3OjAwOjAwLjAwMDAwMDAwMCAtMDcwMAorKysgbGludXgt Mi42LjI5LjYubW9kL2RyaXZlcnMvdm1lL3RzaTE0OC5jCTIwMDktMDctMjEgMTE6Mjg6MTgu MDAwMDAwMDAwIC0wNzAwCkBAIC0wLDAgKzEsMTg1OCBAQAorLyoKKyAqIHRzaTE0OC5jCisg KgorICogU3VwcG9ydCBmb3IgdGhlIFR1bmRyYSBUU0kxNDggVk1FIEJyaWRnZSBDaGlwCisg KgorICogQXV0aG9yczogVG9tIEFybWlzdGVhZCwgQWppdCBQcmVtCisgKiBDb3B5cmlnaHQg MjAwNC0yMDA3IE1vdG9yb2xhIEluYy4KKyAqIENvcHlyaWdodCAyMDA4IEVtZXJzb24gTmV0 d29yayBQb3dlciBFbWJlZGRlZCBDb21wdXRpbmcsIEluYy4KKyAqCisgKiBUaGlzIHByb2dy YW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBt b2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVi bGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3Vy CisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51 eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGlu dXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vy cm5vLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3Bj aS5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFw cGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4 L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8YXNtL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vaW8u aD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgInZtZWRydi5oIgorI2lu Y2x1ZGUgInRzaTE0OC5oIgorCitleHRlcm4gc3RydWN0IHZtZVNoYXJlZERhdGEgKnZtZWNo aXBfaW50ZXJib2FyZF9kYXRhOworZXh0ZXJuIGRtYV9hZGRyX3Qgdm1lY2hpcF9pbnRlcmJv YXJkX2RhdGFwOworZXh0ZXJuIGNvbnN0IGludCB2bWVjaGlwX3JldmlzaW9uOworZXh0ZXJu IGNvbnN0IGludCB2bWVjaGlwX2RldmlkOworZXh0ZXJuIGNvbnN0IGludCB2bWVjaGlwX2ly cTsKK2V4dGVybiBpbnQgdm1lY2hpcF9pcnFfb3ZlcmhlYWRfdGlja3M7CitleHRlcm4gdm9p ZCBfX2lvbWVtICp2bWVjaGlwX2Jhc2VhZGRyOworZXh0ZXJuIGNvbnN0IGludCB2bWVfc2xv dG51bTsKK2V4dGVybiBpbnQgdm1lX3N5c2NvbjsKK2V4dGVybiBjaGFyICppbl9pbWFnZV9i YVtdOworZXh0ZXJuIGludCBpbl9pbWFnZV9zaXplW107CitleHRlcm4gaW50IGluX2ltYWdl X21hcHBlZFtdOworZXh0ZXJuIGRtYV9hZGRyX3QgaW5faW1hZ2VfcGFbXTsKK2V4dGVybiB1 bnNpZ25lZCBpbnQgb3V0X2ltYWdlX3ZhW107CitleHRlcm4gdW5zaWduZWQgaW50IHZtZV9p cnFsb2dbOF1bMHgxMDBdOworZXh0ZXJuIHN0cnVjdCBwY2lfZGV2ICp2bWVfcGNpX2RldjsK KworZXh0ZXJuIHdhaXRfcXVldWVfaGVhZF90IGRtYV9xdWV1ZVtdOworZXh0ZXJuIHdhaXRf cXVldWVfaGVhZF90IGxtX3F1ZXVlOworZXh0ZXJuIHdhaXRfcXVldWVfaGVhZF90IG1ib3hf cXVldWU7CitleHRlcm4gd2FpdF9xdWV1ZV9oZWFkX3Qgdm1laW50X3F1ZXVlW107CisKK2V4 dGVybiB2b2lkIHZtZV9zeW5jX2RhdGEodm9pZCk7CitleHRlcm4gdm9pZCB2bWVfZmx1c2hf cmFuZ2UodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CitleHRlcm4gaW50IHRiX3Nw ZWVkOworCit1bnNpZ25lZCBpbnQgdGVtcGVfaXJxX3RpbWU7Cit1bnNpZ25lZCBpbnQgdGVt cGVfZG1hX2lycV90aW1lWzJdOwordW5zaWduZWQgaW50IHRlbXBlX2xtX2V2ZW50OworCitz dGF0aWMgc3BpbmxvY2tfdCBsbV9sb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VEOworCisvKgor ICogIGFkZDY0aGkgLSBjYWxjdWxhdGUgdXBwZXIgMzIgYml0cyBvZiA2NCBiaXQgYWRkaXRp b24gb3BlcmF0aW9uLgorICovCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2FkZDY0aGkodW5z aWduZWQgaW50IGxvMCwgdW5zaWduZWQgaW50IGhpMCwgdW5zaWduZWQgaW50IGxvMSwgdW5z aWduZWQgaW50IGhpMSkKK3sKKwlpZiAoKGxvMSArIGxvMCkgPCBsbzEpIHsKKwkJcmV0dXJu IChoaTAgKyBoaTEgKyAxKTsKKwl9CisJcmV0dXJuIChoaTAgKyBoaTEpOworfQorCisvKgor ICogIHN1YjY0aGkgLSBjYWxjdWxhdGUgdXBwZXIgMzIgYml0cyBvZiA2NCBiaXQgc3VidHJh Y3Rpb24gb3BlcmF0aW9uLgorICovCisKK3N0YXRpYyBpbnQKK3N1YjY0aGkodW5zaWduZWQg aW50IGxvMCwgdW5zaWduZWQgaW50IGhpMCwgdW5zaWduZWQgaW50IGxvMSwgdW5zaWduZWQg aW50IGhpMSkKK3sKKwlpZiAobG8wIDwgbG8xKSB7CisJCXJldHVybiAoaGkwIC0gaGkxIC0g MSk7CisJfQorCXJldHVybiAoaGkwIC0gaGkxKTsKK30KKworLyoKKyAqICB0c2kxNDhfcHJv Y2luZm8oKQorICovCisKK2ludCB0c2kxNDhfcHJvY2luZm8oY2hhciAqYnVmKQoreworCXRz aTE0OF90ICpwX3RlbXBlID0gKHRzaTE0OF90ICopIHZtZWNoaXBfYmFzZWFkZHI7CisJY2hh ciAqcDsKKwl1bnNpZ25lZCBpbnQgaTsKKworCXAgPSBidWY7CisKKwlwICs9IHNwcmludGYo cCwgIlxuIik7CisJLyogRGlzcGxheSBvdXRib3VuZCBkZWNvZGVycyAqLworCXAgKz0gc3By aW50ZihwLCAiTG9jYWwgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyIEdyb3VwIChMQ1NS KTpcbiIpOworCXAgKz0gc3ByaW50ZihwLCAiXG5PdXRib3VuZCBUcmFuc2xhdGlvbnM6XG4i KTsKKworCXAgKz0gc3ByaW50ZihwLAorCQkgICAgICJOby4gb3RhdCAgICAgICAgIG90c2F1 Om90c2FsICAgICAgICBvdGVhdTpvdGVhbCAgICAgICAgIG90b2Z1Om90b2ZsXG4iKTsKKwlm b3IgKGkgPSAwOyBpIDwgODsgaSArPSAxKSB7CisJCXAgKz0gc3ByaW50ZihwLCAiTyVkOiAl MDhYICAlMDhYOiUwOFggICUwOFg6JTA4WCAgJTA4WDolMDhYXG4iLAorCQkJICAgICBpLAor CQkJICAgICBwX3RlbXBlLT5sY3NyLm91dGJvdW5kVHJhbnNsYXRpb25baV0ub3RhdCwKKwkJ CSAgICAgcF90ZW1wZS0+bGNzci5vdXRib3VuZFRyYW5zbGF0aW9uW2ldLm90c2F1LAorCQkJ ICAgICBwX3RlbXBlLT5sY3NyLm91dGJvdW5kVHJhbnNsYXRpb25baV0ub3RzYWwsCisJCQkg ICAgIHBfdGVtcGUtPmxjc3Iub3V0Ym91bmRUcmFuc2xhdGlvbltpXS5vdGVhdSwKKwkJCSAg ICAgcF90ZW1wZS0+bGNzci5vdXRib3VuZFRyYW5zbGF0aW9uW2ldLm90ZWFsLAorCQkJICAg ICBwX3RlbXBlLT5sY3NyLm91dGJvdW5kVHJhbnNsYXRpb25baV0ub3RvZnUsCisJCQkgICAg IHBfdGVtcGUtPmxjc3Iub3V0Ym91bmRUcmFuc2xhdGlvbltpXS5vdG9mbCk7CisJfQorCisJ LyogRGlzcGxheSBpbmJvdW5kIGRlY29kZXJzICovCisJcCArPSBzcHJpbnRmKHAsICJcbklu Ym91bmQgVHJhbnNsYXRpb25zOlxuIik7CisJcCArPSBzcHJpbnRmKHAsCisJCSAgICAgIk5v LiBpdGF0ICAgICAgICAgaXRzYXU6aXRzYWwgICAgICAgIGl0ZWF1Oml0ZWFsICAgICAgICAg aXRvZnU6aXRvZmxcbiIpOworCWZvciAoaSA9IDA7IGkgPCA4OyBpICs9IDEpIHsKKwkJcCAr PSBzcHJpbnRmKHAsICJPJWQ6ICUwOFggICUwOFg6JTA4WCAgJTA4WDolMDhYICAlMDhYOiUw OFhcbiIsCisJCQkgICAgIGksCisJCQkgICAgIHBfdGVtcGUtPmxjc3IuaW5ib3VuZFRyYW5z bGF0aW9uW2ldLml0YXQsCisJCQkgICAgIHBfdGVtcGUtPmxjc3IuaW5ib3VuZFRyYW5zbGF0 aW9uW2ldLml0c2F1LAorCQkJICAgICBwX3RlbXBlLT5sY3NyLmluYm91bmRUcmFuc2xhdGlv bltpXS5pdHNhbCwKKwkJCSAgICAgcF90ZW1wZS0+bGNzci5pbmJvdW5kVHJhbnNsYXRpb25b aV0uaXRlYXUsCisJCQkgICAgIHBfdGVtcGUtPmxjc3IuaW5ib3VuZFRyYW5zbGF0aW9uW2ld Lml0ZWFsLAorCQkJICAgICBwX3RlbXBlLT5sY3NyLmluYm91bmRUcmFuc2xhdGlvbltpXS5p dG9mdSwKKwkJCSAgICAgcF90ZW1wZS0+bGNzci5pbmJvdW5kVHJhbnNsYXRpb25baV0uaXRv ZmwpOworCX0KKwlwICs9IHNwcmludGYocCwgIlxuVk1FIEJ1cyBDb250cm9sOlxuIik7CisJ cCArPSBzcHJpbnRmKHAsICJcdHZtY3RybCAgMHglMDh4XG4iLCBwX3RlbXBlLT5sY3NyLnZt Y3RybCk7CisJcCArPSBzcHJpbnRmKHAsICJcdHZjdHJsICAgMHglMDh4XG4iLCBwX3RlbXBl LT5sY3NyLnZjdHJsKTsKKwlwICs9IHNwcmludGYocCwgIlx0dnN0YXQgICAweCUwOHhcbiIs IHBfdGVtcGUtPmxjc3IudnN0YXQpOworCXAgKz0gc3ByaW50ZihwLCAiUENJIFN0YXR1czpc biIpOworCXAgKz0gc3ByaW50ZihwLCAiXHRwc3RhdCAweCUwOHhcbiIsIHBfdGVtcGUtPmxj c3IucHN0YXQpOworCXAgKz0gc3ByaW50ZihwLCAiVk1FIEV4Y2VwdGlvbiBTdGF0dXM6XG4i KTsKKwlwICs9IHNwcmludGYocCwgIlx0dmVhdTp2ZWFsIDB4JTA4eDoweCUwOHhcbiIsIHBf dGVtcGUtPmxjc3IudmVhdSwKKwkJICAgICBwX3RlbXBlLT5sY3NyLnZlYWwpOworCXAgKz0g c3ByaW50ZihwLCAiXHR2ZWF0IDB4JTA4eFxuIiwgcF90ZW1wZS0+bGNzci52ZWF0KTsKKwlw ICs9IHNwcmludGYocCwgIlBDSSBFcnJvciBTdGF0dXM6XG4iKTsKKwlwICs9IHNwcmludGYo cCwgIlx0ZWRwYXU6ZWRwYWwgMHglMDh4OjB4JTA4eFxuIiwgcF90ZW1wZS0+bGNzci5lZHBh dSwKKwkJICAgICBwX3RlbXBlLT5sY3NyLmVkcGFsKTsKKwlwICs9IHNwcmludGYocCwgIlx0 ZWRweGEgMHglMDh4XG4iLCBwX3RlbXBlLT5sY3NyLmVkcHhhKTsKKwlwICs9IHNwcmludGYo cCwgIlx0ZWRweHMgMHglMDh4XG4iLCBwX3RlbXBlLT5sY3NyLmVkcHhzKTsKKwlwICs9IHNw cmludGYocCwgIlx0ZWRwYXQgMHglMDh4XG4iLCBwX3RlbXBlLT5sY3NyLmVkcGF0KTsKKwlw ICs9IHNwcmludGYocCwgIkluYm91bmQgVHJhbnNsYXRpb24gR0NTUjpcbiIpOworCXAgKz0g c3ByaW50ZihwLCAiXHRnYmF1OmdiYWwgMHglMDh4OjB4JTA4eFxuIiwgcF90ZW1wZS0+bGNz ci5nYmF1LAorCQkgICAgIHBfdGVtcGUtPmxjc3IuZ2JhbCk7CisJcCArPSBzcHJpbnRmKHAs ICJcdGdjc3JhdCAweCUwOHhcbiIsIHBfdGVtcGUtPmxjc3IuZ2NzcmF0KTsKKwlwICs9IHNw cmludGYocCwgIkluYm91bmQgVHJhbnNsYXRpb24gQ1JHOlxuIik7CisJcCArPSBzcHJpbnRm KHAsICJcdGNiYXU6Y2JhbCAweCUwOHg6MHglMDh4XG4iLCBwX3RlbXBlLT5sY3NyLmNiYXUs CisJCSAgICAgcF90ZW1wZS0+bGNzci5jYmFsKTsKKwlwICs9IHNwcmludGYocCwgIlx0Y3Ny YXQgMHglMDh4XG4iLCBwX3RlbXBlLT5sY3NyLmNzcmF0KTsKKwlwICs9IHNwcmludGYocCwg IkluYm91bmQgVHJhbnNsYXRpb24gQ1IvQ1NSOlxuIik7CisJcCArPSBzcHJpbnRmKHAsICJc dGNyb3U6Y3JvbCAweCUwOHg6MHglMDh4XG4iLCBwX3RlbXBlLT5sY3NyLmNyb3UsCisJCSAg ICAgcF90ZW1wZS0+bGNzci5jcm9sKTsKKwlwICs9IHNwcmludGYocCwgIlx0Y3JhdCAweCUw OHhcbiIsIHBfdGVtcGUtPmxjc3IuY3JhdCk7CisJcCArPSBzcHJpbnRmKHAsICJJbmJvdW5k IFRyYW5zbGF0aW9uIExvY2F0aW9uIE1vbml0b3I6XG4iKTsKKwlwICs9IHNwcmludGYocCwg Ilx0bG1iYXU6bG1iYWwgMHglMDh4OjB4JTA4eDpcbiIsIHBfdGVtcGUtPmxjc3IubG1iYXUs CisJCSAgICAgcF90ZW1wZS0+bGNzci5sbWJhbCk7CisJcCArPSBzcHJpbnRmKHAsICJcdGxt YXQgMHglMDh4XG4iLCBwX3RlbXBlLT5sY3NyLmxtYXQpOworCXAgKz0gc3ByaW50ZihwLCAi SW50ZXJydXB0IENvbnRyb2w6XG4iKTsKKwlwICs9IHNwcmludGYocCwgIlx0dmljciAgMHgl MDh4XG4iLCBwX3RlbXBlLT5sY3NyLnZpY3IpOworCXAgKz0gc3ByaW50ZihwLCAiXHRpbnRl biAweCUwOHhcbiIsIHBfdGVtcGUtPmxjc3IuaW50ZW4pOworCXAgKz0gc3ByaW50ZihwLCAi XHRpbnRlbyAweCUwOHhcbiIsIHBfdGVtcGUtPmxjc3IuaW50ZW8pOworCXAgKz0gc3ByaW50 ZihwLCAiXHRpbnRzICAweCUwOHhcbiIsIHBfdGVtcGUtPmxjc3IuaW50cyk7CisJcCArPSBz cHJpbnRmKHAsICJcdGludGMgIDB4JTA4eFxuIiwgcF90ZW1wZS0+bGNzci5pbnRjKTsKKwlw ICs9IHNwcmludGYocCwgIlx0aW50bTEgMHglMDh4XG4iLCBwX3RlbXBlLT5sY3NyLmludG0x KTsKKwlwICs9IHNwcmludGYocCwgIlx0aW50bTIgMHglMDh4XG4iLCBwX3RlbXBlLT5sY3Ny LmludG0yKTsKKworCXAgKz0gc3ByaW50ZihwLCAiRE1BIENvbnRyb2w6XG4iKTsKKwlwICs9 IHNwcmludGYocCwgIlx0ZGN0bDAgIDB4JTA4eFxuIiwgcF90ZW1wZS0+bGNzci5kbWFbMF0u ZGN0bCk7CisJcCArPSBzcHJpbnRmKHAsICJcdGRjdGwxICAweCUwOHhcbiIsIHBfdGVtcGUt Pmxjc3IuZG1hWzFdLmRjdGwpOworCisJcCArPSBzcHJpbnRmKHAsICJcblBDRlMgUmVnaXN0 ZXIgR3JvdXA6XG4iKTsKKwlwICs9IHNwcmludGYocCwgIlx0cGNpdmVuaSAgMHglMDR4XG4i LCBzd2FiMTYocF90ZW1wZS0+cGNmcy52ZW5pKSk7CisJcCArPSBzcHJpbnRmKHAsICJcdHBj aWRldmkgIDB4JTA0eFxuIiwgc3dhYjE2KHBfdGVtcGUtPnBjZnMuZGV2aSkpOworCXAgKz0g c3ByaW50ZihwLCAiXHRwY2ljbWQgICAweCUwNHhcbiIsIHN3YWIxNihwX3RlbXBlLT5wY2Zz LmNtbWQpKTsKKwlwICs9IHNwcmludGYocCwgIlx0cGNpc3RhdCAgMHglMDR4XG4iLCBzd2Fi MTYocF90ZW1wZS0+cGNmcy5zdGF0KSk7CisJcCArPSBzcHJpbnRmKHAsICJcdHBjaXJldiAg IDB4JTAyeFxuIiwKKwkJICAgICAocF90ZW1wZS0+cGNmcy5yZXZpQW5kQ2xhcyA+PiAyNCkp OworCXAgKz0gc3ByaW50ZihwLCAiXHRwY2ljbGFzcyAweCUwNnhcbiIsCisJCSAgICAgKChw X3RlbXBlLT5wY2ZzLnJldmlBbmRDbGFzIDw8IDI0KSA+PiA4KSB8CisJCSAgICAgc3dhYjE2 KChwX3RlbXBlLT5wY2ZzLnJldmlBbmRDbGFzIDw8IDgpID4+IDE2KSk7CisJcCArPSBzcHJp bnRmKHAsICJcdHBjaWNsc3ogIDB4JTAyeFxuIiwgcF90ZW1wZS0+cGNmcy5jbHN6KTsKKwlw ICs9IHNwcmludGYocCwgIlx0cGNpbWxhdCAgMHglMDJ4XG4iLCBwX3RlbXBlLT5wY2ZzLm1s YXQpOworCXAgKz0gc3ByaW50ZihwLCAiXHRwY2lzdWJ2ICAweCUwNHhcbiIsIHN3YWIxNihw X3RlbXBlLT5wY2ZzLnN1YnYpKTsKKwlwICs9IHNwcmludGYocCwgIlx0cGNpc3ViaSAgMHgl MDR4XG4iLCBzd2FiMTYocF90ZW1wZS0+cGNmcy5zdWJpKSk7CisJcCArPSBzcHJpbnRmKHAs ICJcdHBjaXhjYXAgIDB4JTA4eFxuIiwgcF90ZW1wZS0+cGNmcy5tc2lDYXBJRCk7CisJcCAr PSBzcHJpbnRmKHAsICJcdHBjaXhzdGF0IDB4JTA4eFxuIiwKKwkJICAgICBzd2FiMzIocF90 ZW1wZS0+cGNmcy5tc2lNc2dBZGRyTCkpOworCisJcCArPSBzcHJpbnRmKHAsICJcbkdsb2Jh bCBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgR3JvdXAgKEdDU1IpOlxuIik7CisJcCAr PSBzcHJpbnRmKHAsICJcdGN0cmwgIDB4JTA0eCUwMnglMDJ4XG4iLCBwX3RlbXBlLT5nY3Ny LmN0cmwsCisJCSAgICAgcF90ZW1wZS0+Z2Nzci5nYSwgcF90ZW1wZS0+Z2Nzci5yZXZpZCk7 CisKKwlwICs9IHNwcmludGYocCwgIlxuQ1IvQ1NSIFJlZ2lzdGVyIEdyb3VwOlxuIik7CisJ cCArPSBzcHJpbnRmKHAsICJcdGJjciAgIDB4JTA4eFxuIiwgcF90ZW1wZS0+Y3Jjc3IuY3Ny YmNyKTsKKwlwICs9IHNwcmludGYocCwgIlx0YnNyICAgMHglMDh4XG4iLCBwX3RlbXBlLT5j cmNzci5jc3Jic3IpOworCisJcmV0dXJuIHAgLSBidWY7Cit9CisKKy8qCisgKiBGdW5jdGlv biAgIDogdGVtcGVfc2V0dXBfYXR0cmlidXRlCisgKgorICogRGVzY3JpcHRpb246IGhlbHBl ciBmdW5jdGlvbiBmb3IgY2FsY3VsYXRpbmcgYXR0cmlidXRlIHJlZ2lzdGVyIGNvbnRlbnRz LgorICoKKyAqLworc3RhdGljIGludAordGVtcGVfc2V0dXBfYXR0cmlidXRlKGFkZHJlc3NN b2RlX3QgYWRkclNwYWNlLAorCQkgICAgICBpbnQgdXNlckFjY2Vzc1R5cGUsCisJCSAgICAg IGludCBkYXRhQWNjZXNzVHlwZSwKKwkJICAgICAgZGF0YVdpZHRoX3QgbWF4RGF0YVdpZHRo LAorCQkgICAgICBpbnQgeGZlclByb3RvY29sLCB2bWUyZXNzdFJhdGVfdCB4ZmVyUmF0ZTJl c3N0KQoreworCWludCB0ZW1wX2N0bCA9IDA7CisKKwkvKiBWYWxpZGF0ZSAmIGluaXRpYWxp emUgYWRkcmVzcyBzcGFjZSBmaWVsZCAqLworCXN3aXRjaCAoYWRkclNwYWNlKSB7CisJY2Fz ZSBWTUVfQTE2OgorCQl0ZW1wX2N0bCB8PSAweDA7CisJCWJyZWFrOworCWNhc2UgVk1FX0Ey NDoKKwkJdGVtcF9jdGwgfD0gMHgxOworCQlicmVhazsKKwljYXNlIFZNRV9BMzI6CisJCXRl bXBfY3RsIHw9IDB4MjsKKwkJYnJlYWs7CisJY2FzZSBWTUVfQTY0OgorCQl0ZW1wX2N0bCB8 PSAweDQ7CisJCWJyZWFrOworCWNhc2UgVk1FX0NSQ1NSOgorCQl0ZW1wX2N0bCB8PSAweDU7 CisJCWJyZWFrOworCWNhc2UgVk1FX1VTRVIxOgorCQl0ZW1wX2N0bCB8PSAweDg7CisJCWJy ZWFrOworCWNhc2UgVk1FX1VTRVIyOgorCQl0ZW1wX2N0bCB8PSAweDk7CisJCWJyZWFrOwor CWNhc2UgVk1FX1VTRVIzOgorCQl0ZW1wX2N0bCB8PSAweEE7CisJCWJyZWFrOworCWNhc2Ug Vk1FX1VTRVI0OgorCQl0ZW1wX2N0bCB8PSAweEI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJ CXJldHVybiAoLUVJTlZBTCk7CisJfQorCisJLyogU2V0dXAgQ1RMIHJlZ2lzdGVyICovCisJ aWYgKHVzZXJBY2Nlc3NUeXBlICYgVk1FX1NVUEVSKQorCQl0ZW1wX2N0bCB8PSAweDAwMjA7 CisJaWYgKGRhdGFBY2Nlc3NUeXBlICYgVk1FX1BST0cpCisJCXRlbXBfY3RsIHw9IDB4MDAx MDsKKwlpZiAobWF4RGF0YVdpZHRoID09IFZNRV9EMTYpCisJCXRlbXBfY3RsIHw9IDB4MDAw MDsKKwlpZiAobWF4RGF0YVdpZHRoID09IFZNRV9EMzIpCisJCXRlbXBfY3RsIHw9IDB4MDA0 MDsKKwlzd2l0Y2ggKHhmZXJQcm90b2NvbCkgeworCWNhc2UgVk1FX1NDVDoKKwkJdGVtcF9j dGwgfD0gMHgwMDA7CisJCWJyZWFrOworCWNhc2UgVk1FX0JMVDoKKwkJdGVtcF9jdGwgfD0g MHgxMDA7CisJCWJyZWFrOworCWNhc2UgVk1FX01CTFQ6CisJCXRlbXBfY3RsIHw9IDB4MjAw OworCQlicmVhazsKKwljYXNlIFZNRV8yZVZNRToKKwkJdGVtcF9jdGwgfD0gMHgzMDA7CisJ CWJyZWFrOworCWNhc2UgVk1FXzJlU1NUOgorCQl0ZW1wX2N0bCB8PSAweDQwMDsKKwkJYnJl YWs7CisJY2FzZSBWTUVfMmVTU1RCOgorCQl0ZW1wX2N0bCB8PSAweDUwMDsKKwkJYnJlYWs7 CisJfQorCXN3aXRjaCAoeGZlclJhdGUyZXNzdCkgeworCWNhc2UgVk1FX1NTVE5PTkU6CisJ Y2FzZSBWTUVfU1NUMTYwOgorCQl0ZW1wX2N0bCB8PSAweDAwMDA7CisJCWJyZWFrOworCWNh c2UgVk1FX1NTVDI2NzoKKwkJdGVtcF9jdGwgfD0gMHg4MDA7CisJCWJyZWFrOworCWNhc2Ug Vk1FX1NTVDMyMDoKKwkJdGVtcF9jdGwgfD0gMHgxMDAwOworCQlicmVhazsKKwl9CisKKwly ZXR1cm4gKHRlbXBfY3RsKTsKK30KKworLyoKKyAqICB0ZW1wZV9idXNfZXJyb3JfY2hrKCkK KyAqICBSZXR1cm4gemVybyBpZiBubyBWTUUgYnVzIGVycm9yIGhhcyBvY2N1cmVkLCAxIG90 aGVyd2lzZS4KKyAqICBPcHRpb25hbGx5LCBjbGVhciBidXMgZXJyb3Igc3RhdHVzLgorICov CisKK2ludCB0ZW1wZV9idXNfZXJyb3JfY2hrKGludCBjbHJmbGFnKQoreworCXRzaTE0OF90 ICpwX3RlbXBlID0gKHRzaTE0OF90ICopIHZtZWNoaXBfYmFzZWFkZHI7CisJaW50IHRtcDsK KworCXRtcCA9IHBfdGVtcGUtPmxjc3IudmVhdDsKKwlpZiAodG1wICYgMHg4MDAwMDAwMCkg ewkvKiBWRVMgaXMgU2V0ICovCisJCWlmIChjbHJmbGFnKQorCQkJcF90ZW1wZS0+bGNzci52 ZWF0ID0gMHgyMDAwMDAwMDsKKwkJcmV0dXJuICgxKTsKKwl9CisJcmV0dXJuICgwKTsKK30K KworLyoKKyAqIEZ1bmN0aW9uOiAgICBETUFfdGVtcGVfaXJxaGFuZGxlcgorICogRGVzY3Jp cHRpb246IFNhdmVzIERNQSBjb21wbGV0aW9uIHRpbWVzdGFtcCBhbmQgdGhlbiB3YWtlcyB1 cCBETUEgcXVldWUKKyAqLworCitzdGF0aWMgdm9pZCBETUFfdGVtcGVfaXJxaGFuZGxlcihp bnQgY2hhbm5lbF9tYXNrKQoreworCisJaWYgKGNoYW5uZWxfbWFzayAmIDEpIHsKKwkJdGVt cGVfZG1hX2lycV90aW1lWzBdID0gdGVtcGVfaXJxX3RpbWU7CisJCXdha2VfdXAoJmRtYV9x dWV1ZVswXSk7CisJfQorCWlmIChjaGFubmVsX21hc2sgJiAyKSB7CisJCXRlbXBlX2RtYV9p cnFfdGltZVsxXSA9IHRlbXBlX2lycV90aW1lOworCQl3YWtlX3VwKCZkbWFfcXVldWVbMV0p OworCX0KK30KKworLyoKKyAqIEZ1bmN0aW9uICAgOiBMRVJSX3RlbXBlX2lycWhhbmRsZXIK KyAqIERlc2NyaXB0aW9uOiBEaXNwbGF5IGVycm9yICYgc3RhdHVzIG1lc3NhZ2Ugd2hlbiBM RVJSIChQQ0kpIGV4Y2VwdGlvbgorICogICAgICAgICAgICAgIGludGVycnVwdCBvY2N1cnMu CisgKgorICovCisKK3N0YXRpYyB2b2lkIExFUlJfdGVtcGVfaXJxaGFuZGxlcih2b2lkKQor eworCXRzaTE0OF90ICpwX3RlbXBlID0gKHRzaTE0OF90ICopIHZtZWNoaXBfYmFzZWFkZHI7 CisKKwkvKiAKKwkgKiBPbmx5IHByaW50IGEgbWVzc2FnZSBpZiB0aGlzIGlzIGEgcmVhbCBl cnJvci4gIAorCSAqIER1bW15IGVycm9ycyBjYW4gc29tZXRpbWVzIGhhcHBlbiBoZXJlLiAK KyAgIAkgKiBBIHJlYWwgZXJyb3IgaXMgaW5kaWNhdGVkIGlmIHRoZSBFRFBTVCBiaXQgCisJ ICogaXMgc2V0IGluIHRoZSBFRFBBVCByZWdpc3Rlci4KKwkgKi8KKwlpZiAocF90ZW1wZS0+ bGNzci5lZHBhdCAmIDB4ODAwMDAwMDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkgInRz aTE0ODogVk1FIFBDSSBFeGNlcHRpb24gYXQgYWRkcmVzczogMHglMDh4OiUwOHgsIGF0dHJp YnV0ZXM6IDB4JTA4eFxuIiwKKwkJCXBfdGVtcGUtPmxjc3IuZWRwYXUsIHBfdGVtcGUtPmxj c3IuZWRwYWwsIAorCQkJcF90ZW1wZS0+bGNzci5lZHBhdCk7CisJCXByaW50ayhLRVJOX0VS UgorCQkJInRzaTE0ODogUENJLVggYXR0cmlidXRlIHJlZzogMHglMDh4LCBQQ0ktWCBzcGxp dCBjb21wbGV0aW9uIHJlZzogMHglMDh4XG4iLAorCQkJcF90ZW1wZS0+bGNzci5lZHB4YSwg cF90ZW1wZS0+bGNzci5lZHB4cyk7CisJfQorCS8qIENsZWFyIHRoZSBQQ0kgZXJyb3IgYnkg d3JpdGluZyB0aGUgRURQQ0wgYml0IGluIHRoZSBFRFBBVCByZWdpc3RlciAqLworCXBfdGVt cGUtPmxjc3IuZWRwYXQgPSAweDIwMDAwMDAwOworCXZtZV9zeW5jX2RhdGEoKTsKKworCS8q IEFsc28gY2xlYXIgdGhlIFBDSSBlcnJvciBpbnRlcnJ1cHQgKFBFUlJDKSBpbiB0aGUgSU5U QyByZWdpc3RlciAqLworCXBfdGVtcGUtPmxjc3IuaW50YyA9IDB4MDAwMDIwMDA7CisJdm1l X3N5bmNfZGF0YSgpOworfQorCisvKgorICogRnVuY3Rpb246ICAgICBWRVJSX3RlbXBlX2ly cWhhbmRsZXIKKyAqIERlc2NyaXB0aW9uOiAgRGlzcGxheSBlcnJvciAmIHN0YXR1cyB3aGVu IFZNRSBlcnJvciBpbnRlcnJ1cHQgb2NjdXJzLgorICogTm90IG5vcm1hbGx5IGVuYWJsZWQg b3IgdXNlZC4gIHRlbXBlX2J1c19lcnJvcl9jaGsoKSBpcyB1c2VkIGluc3RlYWQuCisgKi8K Kworc3RhdGljIHZvaWQgVkVSUl90ZW1wZV9pcnFoYW5kbGVyKHZvaWQpCit7CisJdHNpMTQ4 X3QgKnBfdGVtcGUgPSAodHNpMTQ4X3QgKikgdm1lY2hpcF9iYXNlYWRkcjsKKworCXByaW50 ayhLRVJOX0VSUgorCSAgICAgICAidHNpMTQ4OiBWTUUgRXhjZXB0aW9uIGF0IGFkZHJlc3M6 IDB4JTA4eDolMDh4LCBhdHRyaWJ1dGVzOiAlMDh4XG4iLAorCSAgICAgICBwX3RlbXBlLT5s Y3NyLnZlYXUsIHBfdGVtcGUtPmxjc3IudmVhbCwgcF90ZW1wZS0+bGNzci52ZWF0KTsKKwlw X3RlbXBlLT5sY3NyLnZlYXQgPSAweDIwMDAwMDAwOworCXZtZV9zeW5jX2RhdGEoKTsKK30K KworLyoKKyAqIEZ1bmN0aW9uICAgOiBNQl90ZW1wZV9pcnFoYW5kbGVyCisgKiBEZXNjcmlw dGlvbjogV2FrZSB1cCBtYWlsIGJveCBxdWV1ZS4KKyAqLworCitzdGF0aWMgdm9pZCBNQl90 ZW1wZV9pcnFoYW5kbGVyKGludCBtYm94TWFzaykKK3sKKwlpZiAodm1lY2hpcF9pcnFfb3Zl cmhlYWRfdGlja3MgIT0gMCkgeworCQl3YWtlX3VwKCZtYm94X3F1ZXVlKTsKKwl9Cit9CisK Ky8qCisgKiBGdW5jdGlvbiAgIDogTE1fdGVtcGVfaXJxaGFuZGxlcgorICogRGVzY3JpcHRp b246IFdha2UgdXAgbG9jYXRpb24gbW9uaXRvciBxdWV1ZQorICovCisKK3N0YXRpYyB2b2lk IExNX3RlbXBlX2lycWhhbmRsZXIoaW50IGxtX21hc2spCit7CisJdGVtcGVfbG1fZXZlbnQg PSBsbV9tYXNrOworCXdha2VfdXAoJmxtX3F1ZXVlKTsKK30KKworLyoKKyAqIEZ1bmN0aW9u OiAgICBWSVJRX3RlbXBlX2lycWhhbmRsZXIKKyAqIERlc2NyaXB0aW9uOiBSZWNvcmQgdGhl IGxldmVsICYgdmVjdG9yIGZyb20gdGhlIFZNRSBidXMgaW50ZXJydXB0LgorICovCisKK3N0 YXRpYyB2b2lkIFZJUlFfdGVtcGVfaXJxaGFuZGxlcihpbnQgdmlycV9tYXNrKQoreworCXRz aTE0OF90ICpwX3RlbXBlID0gKHRzaTE0OF90ICopIHZtZWNoaXBfYmFzZWFkZHI7CisJaW50 IGlhY2t2ZWMsIGk7CisKKwlmb3IgKGkgPSA3OyBpID4gMDsgaS0tKSB7CisJCWlmICh2aXJx X21hc2sgJiAoMSA8PCBpKSkgeworCQkJaWFja3ZlYyA9IHBfdGVtcGUtPmxjc3IudmlhY2tb KGkgKiA0KSArIDNdOworCQkJdm1lX2lycWxvZ1tpXVtpYWNrdmVjXSsrOworCQkJd2FrZV91 cCgmdm1laW50X3F1ZXVlW2ldKTsKKwkJfQorCX0KKwl3YWtlX3VwKCZ2bWVpbnRfcXVldWVb MF0pOworfQorCisvKgorICogRnVuY3Rpb24gICA6IHRlbXBlX2lycWhhbmRsZXIKKyAqIERl c2NyaXB0aW9uOiBUb3AgbGV2ZWwgaW50ZXJydXB0IGhhbmRsZXIuICBDbGVhcnMgYXBwcm9w cmlhdGUgaW50ZXJydXB0CisgKiAgICAgICAgICAgICAgc3RhdHVzIGJpdHMgYW5kIHRoZW4g Y2FsbHMgYXBwcm9wcmlhdGUgc3ViIGhhbmRsZXIocykuCisgKi8KKworc3RhdGljIGlycXJl dHVybl90IHRlbXBlX2lycWhhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXRz aTE0OF90ICpwX3RlbXBlID0gKHRzaTE0OF90ICopIHZtZWNoaXBfYmFzZWFkZHI7CisJbG9u ZyBzdGF0LCBlbmFibGU7CisKKwlpZiAoZGV2X2lkICE9IHBfdGVtcGUpCisJCXJldHVybiBJ UlFfTk9ORTsKKworCS8qIFNhdmUgdGltZSB0aGF0IHRoaXMgSVJRIG9jY3VycmVkIGF0ICov CisJdGVtcGVfaXJxX3RpbWUgPSBnZXRfdGJsKCk7CisKKwkvKiBEZXRlcm1pbmUgd2hpY2gg aW50ZXJydXB0cyBhcmUgdW5tYXNrZWQgYW5kIGFjdGl2ZSAqLworCWVuYWJsZSA9IHBfdGVt cGUtPmxjc3IuaW50ZW87CisJc3RhdCA9IHBfdGVtcGUtPmxjc3IuaW50czsKKwlzdGF0ID0g c3RhdCAmIGVuYWJsZTsKKworCS8qIENsZWFyIHRoZW0gKi8KKwlwX3RlbXBlLT5sY3NyLmlu dGMgPSBzdGF0OworCXZtZV9zeW5jX2RhdGEoKTsKKworCS8qIENhbGwgc3ViaGFuZGxlcnMg YXMgYXBwcm9wcmlhdGUgKi8KKwlpZiAoc3RhdCAmIDB4MDMwMDAwMDApCS8qIERNQSBpcnFz ICovCisJCURNQV90ZW1wZV9pcnFoYW5kbGVyKChzdGF0ICYgMHgwMzAwMDAwMCkgPj4gMjQp OworCWlmIChzdGF0ICYgMHgwMDAwMjAwMCkJLyogUENJIGJ1cyBlcnJvciAqLworCQlMRVJS X3RlbXBlX2lycWhhbmRsZXIoKTsKKwlpZiAoc3RhdCAmIDB4MDAwMDEwMDApCS8qIFZNRSBi dXMgZXJyb3IgKi8KKwkJVkVSUl90ZW1wZV9pcnFoYW5kbGVyKCk7CisJaWYgKHN0YXQgJiAw eDAwMEYwMDAwKQkvKiBNYWlsIGJveCBpcnFzICovCisJCU1CX3RlbXBlX2lycWhhbmRsZXIo KHN0YXQgJiAweEYwMDAwKSA+PiAxNik7CisJaWYgKHN0YXQgJiAweDAwRjAwMDAwKQkvKiBM b2NhdGlvbiBtb25pdG9yIGlycXMgKi8KKwkJTE1fdGVtcGVfaXJxaGFuZGxlcigoc3RhdCAm IDB4RjAwMDAwKSA+PiAyMCk7CisJaWYgKHN0YXQgJiAweDAwMDAwMEZFKQkvKiBWTUUgYnVz IGlycXMgKi8KKwkJVklSUV90ZW1wZV9pcnFoYW5kbGVyKHN0YXQgJiAweDAwMDBGRSk7CisK KwlzdGF0ID0gcF90ZW1wZS0+bGNzci5pbnRzOworCQorCXJldHVybiBJUlFfSEFORExFRDsK K30KKworLyoKKyAqIEZ1bmN0aW9uICAgOiB0ZW1wZV9nZW5lcmF0ZV9pcnEKKyAqIERlc2Ny aXB0aW9uOiBHZW5lcmF0ZSBhIFZNRSBidXMgaW50ZXJydXB0IGF0IHRoZSByZXF1ZXN0ZWQg bGV2ZWwgJiB2ZWN0b3IuCisgKiAgICAgICAgICAgICAgV2FpdCBmb3Igc3lzdGVtIGNvbnRy b2xsZXIgdG8gYWNrIHRoZSBpbnRlcnJ1cHQuCisgKi8KK2ludCB0ZW1wZV9nZW5lcmF0ZV9p cnEodmlycUluZm9fdCAqIHZtZUlycSkKK3sKKwl0c2kxNDhfdCAqcF90ZW1wZSA9ICh0c2kx NDhfdCAqKSB2bWVjaGlwX2Jhc2VhZGRyOworCWludCB0aW1lb3V0OworCWludCBsb29wdGlt ZW91dDsKKwl1bnNpZ25lZCBpbnQgdG1wOworCisJdGltZW91dCA9IHZtZUlycS0+d2FpdFRp bWU7CisJaWYgKHRpbWVvdXQgPCAoSFogLyAyMCkpIAorCQl0aW1lb3V0ID0gSFogLyAyMDsJ CisJCisJbG9vcHRpbWVvdXQgPSBIWiAvIDIwOwkvKiB0cnkgZm9yIDEvMjAgc2Vjb25kICov CisKKwl2bWVJcnEtPnRpbWVPdXRGbGFnID0gMDsKKworCS8qIFZhbGlkYXRlICYgc2V0dXAg dmVjdG9yIHJlZ2lzdGVyICovCisJdG1wID0gcF90ZW1wZS0+bGNzci52aWNyOworCXRtcCAm PSB+MHhGRjsKKwlwX3RlbXBlLT5sY3NyLnZpY3IgPSB0bXAgfCB2bWVJcnEtPnZlY3RvcjsK Kwl2bWVfc3luY19kYXRhKCk7CisKKwkvKiBBc3NlcnQgVk1FYnVzIElSUSAqLworCXBfdGVt cGUtPmxjc3IudmljciA9IHRtcCB8ICh2bWVJcnEtPmxldmVsIDw8IDgpIHwgdm1lSXJxLT52 ZWN0b3I7CisJdm1lX3N5bmNfZGF0YSgpOworCisJLyogV2FpdCBmb3Igc3lzY29uIHRvIGRv IGlhY2sgKi8KKwl3aGlsZSAocF90ZW1wZS0+bGNzci52aWNyICYgMHg4MDApIHsKKwkJc2V0 X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJc2NoZWR1bGVfdGltZW91 dChsb29wdGltZW91dCk7CisJCXRpbWVvdXQgPSB0aW1lb3V0IC0gbG9vcHRpbWVvdXQ7CisJ CWlmICh0aW1lb3V0IDwgMCkgeworCQkJdm1lSXJxLT50aW1lT3V0RmxhZyA9IDE7CisJCQli cmVhazsKKwkJfQorCX0KKworCXJldHVybiAoMCk7Cit9CisKKy8qCisgKiBGdW5jdGlvbjog ICAgdGVtcGVfc2V0X2FyYml0ZXIKKyAqIERlc2NyaXB0aW9uOiBTZXQgdGhlIFZNRSBidXMg YXJiaXRlciB3aXRoIHRoZSByZXF1ZXN0ZWQgYXR0cmlidXRlcworICovCisKK2ludCB0ZW1w ZV9zZXRfYXJiaXRlcih2bWVBcmJpdGVyQ2ZnX3QgKiB2bWVBcmIpCit7CisJdHNpMTQ4X3Qg KnBfdGVtcGUgPSAodHNpMTQ4X3QgKikgdm1lY2hpcF9iYXNlYWRkcjsKKwlpbnQgdGVtcF9j dGwgPSAwOworCWludCBndG8gPSAwOworCisJdGVtcF9jdGwgPSBwX3RlbXBlLT5sY3NyLnZj dHJsOworCXRlbXBfY3RsICY9IDB4RkZFRkZGMDA7CisKKwlpZiAodm1lQXJiLT5nbG9iYWxU aW1lb3V0VGltZXIgPT0gMHhGRkZGRkZGRikgeworCQlndG8gPSA4OworCX0gZWxzZSBpZiAo dm1lQXJiLT5nbG9iYWxUaW1lb3V0VGltZXIgPiAyMDQ4KSB7CisJCXJldHVybiAoLUVJTlZB TCk7CisJfSBlbHNlIGlmICh2bWVBcmItPmdsb2JhbFRpbWVvdXRUaW1lciA9PSAwKSB7CisJ CWd0byA9IDA7CisJfSBlbHNlIHsKKwkJZ3RvID0gMTsKKwkJd2hpbGUgKCgxNiAqICgxIDw8 IChndG8gLSAxKSkpIDwgdm1lQXJiLT5nbG9iYWxUaW1lb3V0VGltZXIpIHsKKwkJCWd0byAr PSAxOworCQl9CisJfQorCXRlbXBfY3RsIHw9IGd0bzsKKworCWlmICh2bWVBcmItPmFyYml0 ZXJNb2RlICE9IFZNRV9QUklPUklUWV9NT0RFKSB7CisJCXRlbXBfY3RsIHw9IDEgPDwgNjsK Kwl9CisKKwlpZiAodm1lQXJiLT5hcmJpdGVyVGltZW91dEZsYWcpIHsKKwkJdGVtcF9jdGwg fD0gMSA8PCA3OworCX0KKworCWlmICh2bWVBcmItPm5vRWFybHlSZWxlYXNlRmxhZykgewor CQl0ZW1wX2N0bCB8PSAxIDw8IDIwOworCX0KKwlwX3RlbXBlLT5sY3NyLnZjdHJsID0gdGVt cF9jdGw7CisJdm1lX3N5bmNfZGF0YSgpOworCisJcmV0dXJuICgwKTsKK30KKworLyoKKyAq IEZ1bmN0aW9uOiAgICB0ZW1wZV9nZXRfYXJiaXRlcgorICogRGVzY3JpcHRpb246IFJldHVy biB0aGUgYXR0cmlidXRlcyBvZiB0aGUgVk1FIGJ1cyBhcmJpdGVyLgorICovCisKK2ludCB0 ZW1wZV9nZXRfYXJiaXRlcih2bWVBcmJpdGVyQ2ZnX3QgKiB2bWVBcmIpCit7CisJdHNpMTQ4 X3QgKnBfdGVtcGUgPSAodHNpMTQ4X3QgKikgdm1lY2hpcF9iYXNlYWRkcjsKKwlpbnQgdGVt cF9jdGwgPSAwOworCWludCBndG8gPSAwOworCisJdGVtcF9jdGwgPSBwX3RlbXBlLT5sY3Ny LnZjdHJsOworCisJZ3RvID0gdGVtcF9jdGwgJiAweEY7CisJaWYgKGd0byAhPSAwKSB7CisJ CXZtZUFyYi0+Z2xvYmFsVGltZW91dFRpbWVyID0gKDE2ICogKDEgPDwgKGd0byAtIDEpKSk7 CisJfQorCisJaWYgKHRlbXBfY3RsICYgKDEgPDwgNikpIHsKKwkJdm1lQXJiLT5hcmJpdGVy TW9kZSA9IFZNRV9SX1JPQklOX01PREU7CisJfSBlbHNlIHsKKwkJdm1lQXJiLT5hcmJpdGVy TW9kZSA9IFZNRV9QUklPUklUWV9NT0RFOworCX0KKworCWlmICh0ZW1wX2N0bCAmICgxIDw8 IDcpKSB7CisJCXZtZUFyYi0+YXJiaXRlclRpbWVvdXRGbGFnID0gMTsKKwl9CisKKwlpZiAo dGVtcF9jdGwgJiAoMSA8PCAyMCkpIHsKKwkJdm1lQXJiLT5ub0Vhcmx5UmVsZWFzZUZsYWcg PSAxOworCX0KKworCXJldHVybiAoMCk7Cit9CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKy8vIEZ1bmN0aW9uICAgOiB0ZW1wZV9zZXRfcmVxdWVzdG9yCisvLyBEZXNjcmlwdGlv bjogU2V0IHRoZSBWTUUgYnVzIHJlcXVlc3RvciB3aXRoIHRoZSByZXF1ZXN0ZWQgYXR0cmli dXRlcworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoraW50IHRlbXBlX3NldF9yZXF1ZXN0 b3Iodm1lUmVxdWVzdGVyQ2ZnX3QgKiB2bWVSZXEpCit7CisJdHNpMTQ4X3QgKnBfdGVtcGUg PSAodHNpMTQ4X3QgKikgdm1lY2hpcF9iYXNlYWRkcjsKKwlpbnQgdGVtcF9jdGwgPSAwOwor CisJdGVtcF9jdGwgPSBwX3RlbXBlLT5sY3NyLnZtY3RybDsKKwl0ZW1wX2N0bCAmPSAweEZG RkYwMDAwOworCisJaWYgKHZtZVJlcS0+cmVsZWFzZU1vZGUgPT0gMSkgeworCQl0ZW1wX2N0 bCB8PSAoMSA8PCAzKTsKKwl9CisKKwlpZiAodm1lUmVxLT5mYWlyTW9kZSA9PSAxKSB7CisJ CXRlbXBfY3RsIHw9ICgxIDw8IDIpOworCX0KKworCXRlbXBfY3RsIHw9ICh2bWVSZXEtPnRp bWVvblRpbWVvdXRUaW1lciAmIDcpIDw8IDg7CisJdGVtcF9jdGwgfD0gKHZtZVJlcS0+dGlt ZW9mZlRpbWVvdXRUaW1lciAmIDcpIDw8IDEyOworCXRlbXBfY3RsIHw9IHZtZVJlcS0+cmVx dWVzdExldmVsOworCisJcF90ZW1wZS0+bGNzci52bWN0cmwgPSB0ZW1wX2N0bDsKKwl2bWVf c3luY19kYXRhKCk7CisJcmV0dXJuICgwKTsKK30KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorLy8gRnVuY3Rpb24gICA6IHRlbXBlX2dldF9yZXF1ZXN0b3IKKy8vIERlc2NyaXB0 aW9uOiBSZXR1cm4gdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIFZNRSBidXMgcmVxdWVzdG9yCisv Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitpbnQgdGVtcGVfZ2V0X3JlcXVlc3Rvcih2bWVS ZXF1ZXN0ZXJDZmdfdCAqIHZtZVJlcSkKK3sKKwl0c2kxNDhfdCAqcF90ZW1wZSA9ICh0c2kx NDhfdCAqKSB2bWVjaGlwX2Jhc2VhZGRyOworCWludCB0ZW1wX2N0bCA9IDA7CisKKwl0ZW1w X2N0bCA9IHBfdGVtcGUtPmxjc3Iudm1jdHJsOworCisJaWYgKHRlbXBfY3RsICYgMHgxOCkg eworCQl2bWVSZXEtPnJlbGVhc2VNb2RlID0gMTsKKwl9CisKKwlpZiAodGVtcF9jdGwgJiAo MSA8PCAyKSkgeworCQl2bWVSZXEtPmZhaXJNb2RlID0gMTsKKwl9CisKKwl2bWVSZXEtPnJl cXVlc3RMZXZlbCA9IHRlbXBfY3RsICYgMzsKKwl2bWVSZXEtPnRpbWVvblRpbWVvdXRUaW1l ciA9ICh0ZW1wX2N0bCA+PiA4KSAmIDc7CisJdm1lUmVxLT50aW1lb2ZmVGltZW91dFRpbWVy ID0gKHRlbXBfY3RsID4+IDEyKSAmIDc7CisKKwlyZXR1cm4gKDApOworfQorCisvLy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisvLyBGdW5jdGlvbiAgIDogdGVtcGVfc2V0X2luX2JvdW5k CisvLyBEZXNjcmlwdGlvbjogSW5pdGlhbGl6ZSBhbiBpbmJvdW5kIHdpbmRvdyB3aXRoIHRo ZSByZXF1ZXN0ZWQgYXR0cmlidXRlcy4KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2lu dCB0ZW1wZV9zZXRfaW5fYm91bmQodm1lSW5XaW5kb3dDZmdfdCAqIHZtZUluKQoreworCXRz aTE0OF90ICpwX3RlbXBlID0gKHRzaTE0OF90ICopIHZtZWNoaXBfYmFzZWFkZHI7CisJaW50 IHRlbXBfY3RsID0gMDsKKwl1bnNpZ25lZCBpbnQgd2luLCB4LCBncmFudWxhcml0eSA9IDB4 MTAwMDA7CisJc3RydWN0IHBhZ2UgKnBhZ2UsICpwZW5kOworCisJLyogVmVyaWZ5IGlucHV0 IGRhdGEgKi8KKwlpZiAodm1lSW4tPndpbmRvd05iciA+IDcpIHsKKwkJcmV0dXJuICgtRUlO VkFMKTsKKwl9CisJd2luID0gdm1lSW4tPndpbmRvd05icjsKKworCS8qIEZyZWUgcHJldmlv dXMgYWxsb2NhdGlvbiAqLworI2lmbmRlZiBDT05GSUdfVk1FX0JSSURHRV9CT09UTUVNCisJ aWYgKGluX2ltYWdlX2JhW3dpbl0gIT0gTlVMTCkgeworI2Vsc2UKKwlpZiAoKHdpbiAhPSA3 KSAmJiAoaW5faW1hZ2VfYmFbd2luXSAhPSBOVUxMKSkgeworI2VuZGlmCisgICAgICAgICAg ICAgCSAvKiBVbmRvIG1hcmtpbmcgdGhlIHBhZ2VzIGFzIHJlc2VydmVkICovCisgICAgICAg ICAgICAgIAkgcGVuZCA9IHZpcnRfdG9fcGFnZShpbl9pbWFnZV9iYVt3aW5dICsgaW5faW1h Z2Vfc2l6ZVt3aW5dIC0gMSk7CisgICAgICAgICAgICAgIAkgZm9yIChwYWdlID0gdmlydF90 b19wYWdlKGluX2ltYWdlX2JhW3dpbl0pOyBwYWdlIDw9IHBlbmQ7IHBhZ2UrKykKKyAgICAg ICAgICAgICAgCSAgICAgICAgIENsZWFyUGFnZVJlc2VydmVkKHBhZ2UpOworICAgICAgICAg ICAgICAJIGRtYV9mcmVlX2NvaGVyZW50KCZ2bWVfcGNpX2Rldi0+ZGV2LAorICAgICAgICAg ICAgICAJICAgICAgICAgICAgICAgICAgICAgICAgIGluX2ltYWdlX3NpemVbd2luXSwKKyAg ICAgICAgICAgICAgCSAgICAgICAgICAgICAgICAgICAgICAgICBpbl9pbWFnZV9iYVt3aW5d LAorICAgICAgICAgICAgICAJICAgICAgICAgICAgICAgICAgICAgICAgIGluX2ltYWdlX3Bh W3dpbl0pOworICAgICAgICAgICAgICAJIGluX2ltYWdlX21hcHBlZFt3aW5dID0gMDsKKyAg ICAgICAJfQorCisJaWYgKHZtZUluLT53aW5kb3dFbmFibGUgPT0gMCkgeworCQl0ZW1wX2N0 bCA9IHBfdGVtcGUtPmxjc3IuaW5ib3VuZFRyYW5zbGF0aW9uW3dpbl0uaXRhdDsKKwkJdGVt cF9jdGwgJj0gfjB4ODAwMDAwMDA7CisJCXBfdGVtcGUtPmxjc3IuaW5ib3VuZFRyYW5zbGF0 aW9uW3dpbl0uaXRhdCA9IHRlbXBfY3RsOworCQl2bWVfc3luY19kYXRhKCk7CisJCXJldHVy biAwOworCX0KKworCXN3aXRjaCAodm1lSW4tPmFkZHJTcGFjZSkgeworCWNhc2UgVk1FX0NS Q1NSOgorCWNhc2UgVk1FX1VTRVIxOgorCWNhc2UgVk1FX1VTRVIyOgorCWNhc2UgVk1FX1VT RVIzOgorCWNhc2UgVk1FX1VTRVI0OgorCQlyZXR1cm4gKC1FSU5WQUwpOworCWNhc2UgVk1F X0ExNjoKKwkJZ3JhbnVsYXJpdHkgPSAweDEwOworCQl0ZW1wX2N0bCB8PSAweDAwOworCQli cmVhazsKKwljYXNlIFZNRV9BMjQ6CisJCWdyYW51bGFyaXR5ID0gMHgxMDAwOworCQl0ZW1w X2N0bCB8PSAweDEwOworCQlicmVhazsKKwljYXNlIFZNRV9BMzI6CisJCWdyYW51bGFyaXR5 ID0gMHgxMDAwMDsKKwkJdGVtcF9jdGwgfD0gMHgyMDsKKwkJYnJlYWs7CisJY2FzZSBWTUVf QTY0OgorCQlncmFudWxhcml0eSA9IDB4MTAwMDA7CisJCXRlbXBfY3RsIHw9IDB4NDA7CisJ CWJyZWFrOworCX0KKworI2lmZGVmIENPTkZJR19WTUVfQlJJREdFX0JPT1RNRU0KKwlpZiAo d2luID09IDcpIHsKKwkJdm1lSW4tPndpbmRvd1NpemVMID0gaW5faW1hZ2Vfc2l6ZVs3XTsK KwkJdm1lSW4tPndpbmRvd1NpemVVID0gMDsKKwl9CisjZW5kaWYgCisJaWYgKCh2bWVJbi0+ dm1lQWRkckwgJiAoZ3JhbnVsYXJpdHkgLSAxKSkgfHwgCisJCSh2bWVJbi0+d2luZG93U2l6 ZUwgJiAoZ3JhbnVsYXJpdHkgLSAxKSkpICAKKwkJcmV0dXJuICgtRUlOVkFMKTsKKworI2lm bmRlZiBDT05GSUdfVk1FX0JSSURHRV9CT09UTUVNCisJaWYgKCh2bWVJbi0+d2luZG93U2l6 ZUwgPCAweDEwKSB8fCAodm1lSW4tPndpbmRvd1NpemVMID4gMHg4MDAwMDApKSAKKyNlbHNl CisJaWYgKCh3aW4gIT0gNykgJiYgCisJCSgodm1lSW4tPndpbmRvd1NpemVMIDwgMHgxMCkg fHwgKHZtZUluLT53aW5kb3dTaXplTCA+IDB4ODAwMDAwKSkpIAorI2VuZGlmCisJCXJldHVy biAoLUVJTlZBTCk7CisKKyNpZm5kZWYgQ09ORklHX1ZNRV9CUklER0VfQk9PVE1FTQorCWlm ICh2bWVJbi0+d2luZG93RW5hYmxlID09IDEpIHsKKyNlbHNlCisJaWYgKCh3aW4gIT0gNykg JiYgKHZtZUluLT53aW5kb3dFbmFibGUgPT0gMSkpIHsKKyNlbmRpZgorCQlpbl9pbWFnZV9i YVt3aW5dID0gKGNoYXIgKilkbWFfYWxsb2NfY29oZXJlbnQoKHN0cnVjdCBkZXZpY2UgKikK KwkJCQkmdm1lX3BjaV9kZXYtPmRldiwgCisJCQkJdm1lSW4tPndpbmRvd1NpemVMLAorCQkJ CShkbWFfYWRkcl90ICopJmluX2ltYWdlX3BhW3dpbl0sCisJCQkJR0ZQX0tFUk5FTCk7Cisg ICAgICAgICAgICAgICAgaWYgKCFpbl9pbWFnZV9iYVt3aW5dKSB7CisgICAgICAgICAgICAg ICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgInZtZWRydjogTm8gbWVtb3J5IGZvciBpbmJv dW5kIHdpbmRvd1xuIik7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01F TTsKKyAgICAgICAgICAgICAgICB9CisJCWluX2ltYWdlX3NpemVbd2luXSA9IHZtZUluLT53 aW5kb3dTaXplTDsKKworCQkvKiBub3cgbWFyayB0aGUgcGFnZXMgYXMgcmVzZXJ2ZWQ7IG90 aGVyd2lzZSAqLworCQkvKiByZW1hcF9wZm5fcmFuZ2UgZG9lc24ndCBkbyB3aGF0IHdlIHdh bnQgKi8KKwkJcGVuZCA9IHZpcnRfdG9fcGFnZShpbl9pbWFnZV9iYVt3aW5dICsgaW5faW1h Z2Vfc2l6ZVt3aW5dIC0gMSk7CisgICAgICAgICAgICAgICAgZm9yIChwYWdlID0gdmlydF90 b19wYWdlKGluX2ltYWdlX2JhW3dpbl0pOyBwYWdlIDw9IHBlbmQ7IHBhZ2UrKykKKwkJCVNl dFBhZ2VSZXNlcnZlZChwYWdlKTsKKwkJbWVtc2V0KGluX2ltYWdlX2JhW3dpbl0sIDAsIGlu X2ltYWdlX3NpemVbd2luXSk7CisJCXZtZV9mbHVzaF9yYW5nZSgodW5zaWduZWQgbG9uZylp bl9pbWFnZV9iYVt3aW5dLAorCQkJCQkodW5zaWduZWQgbG9uZykoaW5faW1hZ2VfYmFbd2lu XSArIGluX2ltYWdlX3NpemVbd2luXSkpOworCQl2bWVJbi0+cGNpQWRkckwgPSAodW5zaWdu ZWQgaW50KWluX2ltYWdlX3BhW3dpbl07CisJCXZtZUluLT5wY2lBZGRyVSA9IDA7CisjaWZu ZGVmIENPTkZJR19WTUVfQlJJREdFX0JPT1RNRU0KKyAgICAgICAgfQorI2Vsc2UKKwl9IGVs c2UgaWYgKHdpbiA9PSA3KSAgeworCQl2bWVJbi0+cGNpQWRkckwgPSAodW5zaWduZWQgaW50 KWluX2ltYWdlX3BhW3dpbl07CisJCXZtZUluLT5wY2lBZGRyVSA9IDA7CisJfQorI2VuZGlm CisKKwkvLyBEaXNhYmxlIHdoaWxlIHdlIGFyZSBtdWNraW5nIGFyb3VuZAorCXBfdGVtcGUt Pmxjc3IuaW5ib3VuZFRyYW5zbGF0aW9uW3dpbl0uaXRhdCA9IDA7CisJdm1lX3N5bmNfZGF0 YSgpOworCisJcF90ZW1wZS0+bGNzci5pbmJvdW5kVHJhbnNsYXRpb25bd2luXS5pdHNhbCA9 IHZtZUluLT52bWVBZGRyTDsKKwlwX3RlbXBlLT5sY3NyLmluYm91bmRUcmFuc2xhdGlvblt3 aW5dLml0c2F1ID0gdm1lSW4tPnZtZUFkZHJVOworCXBfdGVtcGUtPmxjc3IuaW5ib3VuZFRy YW5zbGF0aW9uW3dpbl0uaXRlYWwgPQorCSAgICB2bWVJbi0+dm1lQWRkckwgKyB2bWVJbi0+ d2luZG93U2l6ZUwgLSBncmFudWxhcml0eTsKKworCXBfdGVtcGUtPmxjc3IuaW5ib3VuZFRy YW5zbGF0aW9uW3dpbl0uaXRlYXUgPQorCSAgICBhZGQ2NGhpKHZtZUluLT52bWVBZGRyTCwg dm1lSW4tPnZtZUFkZHJVLAorCQkgICAgdm1lSW4tPndpbmRvd1NpemVMIC0gZ3JhbnVsYXJp dHksIHZtZUluLT53aW5kb3dTaXplVSk7CisJcF90ZW1wZS0+bGNzci5pbmJvdW5kVHJhbnNs YXRpb25bd2luXS5pdG9mbCA9CisJICAgIHZtZUluLT5wY2lBZGRyTCAtIHZtZUluLT52bWVB ZGRyTDsKKwlwX3RlbXBlLT5sY3NyLmluYm91bmRUcmFuc2xhdGlvblt3aW5dLml0b2Z1ID0K KwkgICAgc3ViNjRoaSh2bWVJbi0+cGNpQWRkckwsIHZtZUluLT5wY2lBZGRyVSwgdm1lSW4t PnZtZUFkZHJMLAorCQkgICAgdm1lSW4tPnZtZUFkZHJVKTsKKworCS8qIFNldHVwIENUTCBy ZWdpc3RlciAqLworCXRlbXBfY3RsIHw9ICh2bWVJbi0+eGZlclByb3RvY29sICYgMHgzRSkg PDwgNjsKKwlmb3IgKHggPSAwOyB4IDwgNDsgeCsrKSB7CisJCWlmICgoNjQgPDwgeCkgPj0g dm1lSW4tPnByZWZldGNoU2l6ZSkgeworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKHggPT0g NCkKKwkJeC0tOworCXRlbXBfY3RsIHw9ICh4IDw8IDE2KTsKKworCWlmICh2bWVJbi0+cHJl ZmV0Y2hUaHJlc2hvbGQpCisKKwkJaWYgKHZtZUluLT5wcmVmZXRjaFRocmVzaG9sZCkKKwkJ CXRlbXBfY3RsIHw9IDB4NDAwMDA7CisKKwlzd2l0Y2ggKHZtZUluLT54ZmVyUmF0ZTJlc3N0 KSB7CisJY2FzZSBWTUVfU1NUTk9ORToKKwkJYnJlYWs7CisJY2FzZSBWTUVfU1NUMTYwOgor CQl0ZW1wX2N0bCB8PSAweDA0MDA7CisJCWJyZWFrOworCWNhc2UgVk1FX1NTVDI2NzoKKwkJ dGVtcF9jdGwgfD0gMHgxNDAwOworCQlicmVhazsKKwljYXNlIFZNRV9TU1QzMjA6CisJCXRl bXBfY3RsIHw9IDB4MjQwMDsKKwkJYnJlYWs7CisJfQorCisJaWYgKHZtZUluLT51c2VyQWNj ZXNzVHlwZSAmIFZNRV9VU0VSKQorCQl0ZW1wX2N0bCB8PSAweDQ7CisJaWYgKHZtZUluLT51 c2VyQWNjZXNzVHlwZSAmIFZNRV9TVVBFUikKKwkJdGVtcF9jdGwgfD0gMHg4OworCWlmICh2 bWVJbi0+ZGF0YUFjY2Vzc1R5cGUgJiBWTUVfREFUQSkKKwkJdGVtcF9jdGwgfD0gMHgxOwor CWlmICh2bWVJbi0+ZGF0YUFjY2Vzc1R5cGUgJiBWTUVfUFJPRykKKwkJdGVtcF9jdGwgfD0g MHgyOworCisJLyogV3JpdGUgY3RsIHJlZyB3aXRob3V0IGVuYWJsZSAqLworCXBfdGVtcGUt Pmxjc3IuaW5ib3VuZFRyYW5zbGF0aW9uW3dpbl0uaXRhdCA9IHRlbXBfY3RsOworCXZtZV9z eW5jX2RhdGEoKTsKKworCWlmICh2bWVJbi0+d2luZG93RW5hYmxlKQorCQl0ZW1wX2N0bCB8 PSAweDgwMDAwMDAwOworCisJcF90ZW1wZS0+bGNzci5pbmJvdW5kVHJhbnNsYXRpb25bd2lu XS5pdGF0ID0gdGVtcF9jdGw7CisJdm1lX3N5bmNfZGF0YSgpOworCisJcmV0dXJuICgwKTsK K30KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gRnVuY3Rpb24gICA6IHRlbXBl X2dldF9pbl9ib3VuZAorLy8gRGVzY3JpcHRpb246IFJldHVybiB0aGUgYXR0cmlidXRlcyBv ZiBhbiBpbmJvdW5kIHdpbmRvdy4KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2ludCB0 ZW1wZV9nZXRfaW5fYm91bmQodm1lSW5XaW5kb3dDZmdfdCAqIHZtZUluKQoreworCXRzaTE0 OF90ICpwX3RlbXBlID0gKHRzaTE0OF90ICopIHZtZWNoaXBfYmFzZWFkZHI7CisJaW50IHRl bXBfY3RsID0gMDsKKwl1bnNpZ25lZCBpbnQgaSwgdm1lX2VuZF91LCB2bWVfZW5kX2w7CisK KwkvKiBWZXJpZnkgaW5wdXQgZGF0YSAqLworCWlmICh2bWVJbi0+d2luZG93TmJyID4gNykg eworCQlyZXR1cm4gKC1FSU5WQUwpOworCX0KKwlpID0gdm1lSW4tPndpbmRvd05icjsKKwor CXRlbXBfY3RsID0gcF90ZW1wZS0+bGNzci5pbmJvdW5kVHJhbnNsYXRpb25baV0uaXRhdDsK KworCS8vIEdldCBDb250cm9sICYgQlVTIGF0dHJpYnV0ZXMKKwlpZiAodGVtcF9jdGwgJiAw eDgwMDAwMDAwKQorCQl2bWVJbi0+d2luZG93RW5hYmxlID0gMTsKKwl2bWVJbi0+eGZlclBy b3RvY29sID0gKCh0ZW1wX2N0bCAmIDB4RjgwKSA+PiA2KSB8IFZNRV9TQ1Q7CisJdm1lSW4t PnByZWZldGNoU2l6ZSA9IDY0IDw8ICgodGVtcF9jdGwgPj4gMTYpICYgMyk7CisJdm1lSW4t PndyUG9zdEVuYWJsZSA9IDE7CisJdm1lSW4tPnByZWZldGNoRW5hYmxlID0gMTsKKwlpZiAo dGVtcF9jdGwgJiAweDQwMDAwKQorCQl2bWVJbi0+cHJlZmV0Y2hUaHJlc2hvbGQgPSAxOwor CWlmICh0ZW1wX2N0bCAmIDB4NCkKKwkJdm1lSW4tPnVzZXJBY2Nlc3NUeXBlIHw9IFZNRV9V U0VSOworCWlmICh0ZW1wX2N0bCAmIDB4OCkKKwkJdm1lSW4tPnVzZXJBY2Nlc3NUeXBlIHw9 IFZNRV9TVVBFUjsKKwlpZiAodGVtcF9jdGwgJiAweDEpCisJCXZtZUluLT5kYXRhQWNjZXNz VHlwZSB8PSBWTUVfREFUQTsKKwlpZiAodGVtcF9jdGwgJiAweDIpCisJCXZtZUluLT5kYXRh QWNjZXNzVHlwZSB8PSBWTUVfUFJPRzsKKworCXN3aXRjaCAoKHRlbXBfY3RsICYgMHg3MCkg Pj4gNCkgeworCWNhc2UgMHgwOgorCQl2bWVJbi0+YWRkclNwYWNlID0gVk1FX0ExNjsKKwkJ YnJlYWs7CisJY2FzZSAweDE6CisJCXZtZUluLT5hZGRyU3BhY2UgPSBWTUVfQTI0OworCQli cmVhazsKKwljYXNlIDB4MjoKKwkJdm1lSW4tPmFkZHJTcGFjZSA9IFZNRV9BMzI7CisJCWJy ZWFrOworCWNhc2UgMHg0OgorCQl2bWVJbi0+YWRkclNwYWNlID0gVk1FX0E2NDsKKwkJYnJl YWs7CisJfQorCisJc3dpdGNoICgodGVtcF9jdGwgJiAweDcwMDApID4+IDEyKSB7CisJY2Fz ZSAweDA6CisJCXZtZUluLT54ZmVyUmF0ZTJlc3N0ID0gVk1FX1NTVDE2MDsKKwkJYnJlYWs7 CisJY2FzZSAweDE6CisJCXZtZUluLT54ZmVyUmF0ZTJlc3N0ID0gVk1FX1NTVDI2NzsKKwkJ YnJlYWs7CisJY2FzZSAweDI6CisJCXZtZUluLT54ZmVyUmF0ZTJlc3N0ID0gVk1FX1NTVDMy MDsKKwkJYnJlYWs7CisJfQorCisJLy8gR2V0IFZNRSBpbmJvdW5kIHN0YXJ0ICYgZW5kIGFk ZHJlc3NlcworCXZtZUluLT52bWVBZGRyTCA9IHBfdGVtcGUtPmxjc3IuaW5ib3VuZFRyYW5z bGF0aW9uW2ldLml0c2FsOworCXZtZUluLT52bWVBZGRyVSA9IHBfdGVtcGUtPmxjc3IuaW5i b3VuZFRyYW5zbGF0aW9uW2ldLml0c2F1OworCXZtZV9lbmRfbCA9IHBfdGVtcGUtPmxjc3Iu aW5ib3VuZFRyYW5zbGF0aW9uW2ldLml0ZWFsOworCXZtZV9lbmRfdSA9IHBfdGVtcGUtPmxj c3IuaW5ib3VuZFRyYW5zbGF0aW9uW2ldLml0ZWF1OworCisJLy8gQWRqdXN0IGFkZHJlc3Nl cyBmb3Igd2luZG93IGdyYW51bGFyaXR5CisJc3dpdGNoICh2bWVJbi0+YWRkclNwYWNlKSB7 CisJY2FzZSBWTUVfQTE2OgorCQl2bWVJbi0+dm1lQWRkclUgPSAwOworCQl2bWVJbi0+dm1l QWRkckwgJj0gMHgwMDAwRkZGMDsKKwkJdm1lX2VuZF91ID0gMDsKKwkJdm1lX2VuZF9sICY9 IDB4MDAwMEZGRjA7CisJCXZtZV9lbmRfbCArPSAweDEwOworCQlicmVhazsKKwljYXNlIFZN RV9BMjQ6CisJCXZtZUluLT52bWVBZGRyVSA9IDA7CisJCXZtZUluLT52bWVBZGRyTCAmPSAw eDAwRkZGMDAwOworCQl2bWVfZW5kX3UgPSAwOworCQl2bWVfZW5kX2wgJj0gMHgwMEZGRjAw MDsKKwkJdm1lX2VuZF9sICs9IDB4MTAwMDsKKwkJYnJlYWs7CisJY2FzZSBWTUVfQTMyOgor CQl2bWVJbi0+dm1lQWRkclUgPSAwOworCQl2bWVJbi0+dm1lQWRkckwgJj0gMHhGRkZGMDAw MDsKKwkJdm1lX2VuZF91ID0gMDsKKwkJdm1lX2VuZF9sICY9IDB4RkZGRjAwMDA7CisJCXZt ZV9lbmRfbCArPSAweDEwMDAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl2bWVJbi0+dm1l QWRkckwgJj0gMHhGRkZGMDAwMDsKKwkJdm1lX2VuZF9sICY9IDB4RkZGRjAwMDA7CisJCXZt ZV9lbmRfbCArPSAweDEwMDAwOworCQlicmVhazsKKwl9CisKKwkvKiBDYWxjdWxhdGUgc2l6 ZSBvZiB3aW5kb3cgKi8KKwl2bWVJbi0+d2luZG93U2l6ZUwgPSB2bWVfZW5kX2wgLSB2bWVJ bi0+dm1lQWRkckw7CisJdm1lSW4tPndpbmRvd1NpemVVID0gc3ViNjRoaSh2bWVfZW5kX2ws IHZtZV9lbmRfdSwKKwkJCQkgICAgIHZtZUluLT52bWVBZGRyTCwgdm1lSW4tPnZtZUFkZHJV KTsKKworCS8qIENhbGN1bGF0ZSBjb3JyZXNwb25kaW5nIFBDSSBidXMgYWRkcmVzcyAqLwor CXZtZUluLT5wY2lBZGRyTCA9CisJICAgIHZtZUluLT52bWVBZGRyTCArIHBfdGVtcGUtPmxj c3IuaW5ib3VuZFRyYW5zbGF0aW9uW2ldLml0b2ZsOworCXZtZUluLT5wY2lBZGRyVSA9CisJ ICAgIGFkZDY0aGkodm1lSW4tPnZtZUFkZHJMLCB2bWVJbi0+dm1lQWRkclUsCisJCSAgICBw X3RlbXBlLT5sY3NyLmluYm91bmRUcmFuc2xhdGlvbltpXS5pdG9mbCwKKwkJICAgIHBfdGVt cGUtPmxjc3IuaW5ib3VuZFRyYW5zbGF0aW9uW2ldLml0b2Z1KTsKKworCXJldHVybiAoMCk7 Cit9CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEZ1bmN0aW9uICAgOiB0ZW1w ZV9zZXRfb3V0X2JvdW5kCisvLyBEZXNjcmlwdGlvbjogU2V0IHRoZSBhdHRyaWJ1dGVzIG9m IGFuIG91dGJvdW5kIHdpbmRvdy4KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2ludCB0 ZW1wZV9zZXRfb3V0X2JvdW5kKHZtZU91dFdpbmRvd0NmZ190ICogdm1lT3V0KQoreworCXRz aTE0OF90ICpwX3RlbXBlID0gKHRzaTE0OF90ICopIHZtZWNoaXBfYmFzZWFkZHI7CisJaW50 IHRlbXBfY3RsID0gMDsKKwl1bnNpZ25lZCBpbnQgaSwgeDsKKworCS8qIFZlcmlmeSBpbnB1 dCBkYXRhICovCisJaWYgKHZtZU91dC0+d2luZG93TmJyID4gNykgeworCQlyZXR1cm4gKC1F SU5WQUwpOworCX0KKwlpID0gdm1lT3V0LT53aW5kb3dOYnI7CisKKwlpZiAodm1lT3V0LT53 aW5kb3dFbmFibGUgPT0gMCkgeworCQl0ZW1wX2N0bCA9IHBfdGVtcGUtPmxjc3Iub3V0Ym91 bmRUcmFuc2xhdGlvbltpXS5vdGF0OworCQl0ZW1wX2N0bCAmPSB+MHg4MDAwMDAwMDsKKwkJ cF90ZW1wZS0+bGNzci5vdXRib3VuZFRyYW5zbGF0aW9uW2ldLm90YXQgPSB0ZW1wX2N0bDsK KwkJdm1lX3N5bmNfZGF0YSgpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoKHZtZU91dC0+ eGxhdGVkQWRkckwgJiAweEZGRkYpIHx8CisJICAgICh2bWVPdXQtPndpbmRvd1NpemVMICYg MHhGRkZGKSB8fCAodm1lT3V0LT5wY2lCdXNBZGRyTCAmIDB4RkZGRikpIHsKKwkJcmV0dXJu ICgtRUlOVkFMKTsKKwl9CisKKwl0ZW1wX2N0bCA9IHRlbXBlX3NldHVwX2F0dHJpYnV0ZSh2 bWVPdXQtPmFkZHJTcGFjZSwKKwkJCQkJIHZtZU91dC0+dXNlckFjY2Vzc1R5cGUsCisJCQkJ CSB2bWVPdXQtPmRhdGFBY2Nlc3NUeXBlLAorCQkJCQkgdm1lT3V0LT5tYXhEYXRhV2lkdGgs CisJCQkJCSB2bWVPdXQtPnhmZXJQcm90b2NvbCwKKwkJCQkJIHZtZU91dC0+eGZlclJhdGUy ZXNzdCk7CisKKwlpZiAodm1lT3V0LT5wcmVmZXRjaEVuYWJsZSkgeworCQlmb3IgKHggPSAw OyB4IDwgNDsgeCsrKSB7CisJCQlpZiAoKDIgPDwgeCkgPj0gdm1lT3V0LT5wcmVmZXRjaFNp emUpCisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKHggPT0gNCkKKwkJCXggPSAzOworCQl0ZW1w X2N0bCB8PSAoeCA8PCAxNik7CisJfSBlbHNlIHsKKwkJdGVtcF9jdGwgfD0gMHg0MDAwMDsK Kwl9CisJLy8gRGlzYWJsZSB3aGlsZSB3ZSBhcmUgbXVja2luZyBhcm91bmQKKwlwX3RlbXBl LT5sY3NyLm91dGJvdW5kVHJhbnNsYXRpb25baV0ub3RhdCA9IDA7CisJdm1lX3N5bmNfZGF0 YSgpOworCisJcF90ZW1wZS0+bGNzci5vdXRib3VuZFRyYW5zbGF0aW9uW2ldLm90YnMgPSB2 bWVPdXQtPmJjYXN0U2VsZWN0MmVzc3Q7CisJcF90ZW1wZS0+bGNzci5vdXRib3VuZFRyYW5z bGF0aW9uW2ldLm90c2FsID0gdm1lT3V0LT5wY2lCdXNBZGRyTDsKKwlwX3RlbXBlLT5sY3Ny Lm91dGJvdW5kVHJhbnNsYXRpb25baV0ub3RzYXUgPSB2bWVPdXQtPnBjaUJ1c0FkZHJVOwor CXBfdGVtcGUtPmxjc3Iub3V0Ym91bmRUcmFuc2xhdGlvbltpXS5vdGVhbCA9CisJICAgIHZt ZU91dC0+cGNpQnVzQWRkckwgKyAodm1lT3V0LT53aW5kb3dTaXplTCAtIDB4MTAwMDApOwor CXBfdGVtcGUtPmxjc3Iub3V0Ym91bmRUcmFuc2xhdGlvbltpXS5vdGVhdSA9CisJICAgIGFk ZDY0aGkodm1lT3V0LT5wY2lCdXNBZGRyTCwgdm1lT3V0LT5wY2lCdXNBZGRyVSwKKwkJICAg IHZtZU91dC0+d2luZG93U2l6ZUwgLSAweDEwMDAwLCB2bWVPdXQtPndpbmRvd1NpemVVKTsK KwlwX3RlbXBlLT5sY3NyLm91dGJvdW5kVHJhbnNsYXRpb25baV0ub3RvZmwgPQorCSAgICB2 bWVPdXQtPnhsYXRlZEFkZHJMIC0gdm1lT3V0LT5wY2lCdXNBZGRyTDsKKwlpZiAodm1lT3V0 LT5hZGRyU3BhY2UgPT0gVk1FX0E2NCkgeworCQlwX3RlbXBlLT5sY3NyLm91dGJvdW5kVHJh bnNsYXRpb25baV0ub3RvZnUgPQorCQkgICAgc3ViNjRoaSh2bWVPdXQtPnhsYXRlZEFkZHJM LCB2bWVPdXQtPnhsYXRlZEFkZHJVLAorCQkJICAgIHZtZU91dC0+cGNpQnVzQWRkckwsIHZt ZU91dC0+cGNpQnVzQWRkclUpOworCX0gZWxzZSB7CisJCXBfdGVtcGUtPmxjc3Iub3V0Ym91 bmRUcmFuc2xhdGlvbltpXS5vdG9mdSA9IDA7CisJfQorCisJLy8gV3JpdGUgY3RsIHJlZyB3 aXRob3V0IGVuYWJsZQorCXBfdGVtcGUtPmxjc3Iub3V0Ym91bmRUcmFuc2xhdGlvbltpXS5v dGF0ID0gdGVtcF9jdGw7CisJdm1lX3N5bmNfZGF0YSgpOworCisJaWYgKHZtZU91dC0+d2lu ZG93RW5hYmxlKQorCQl0ZW1wX2N0bCB8PSAweDgwMDAwMDAwOworCisJcF90ZW1wZS0+bGNz ci5vdXRib3VuZFRyYW5zbGF0aW9uW2ldLm90YXQgPSB0ZW1wX2N0bDsKKwl2bWVfc3luY19k YXRhKCk7CisKKwlyZXR1cm4gKDApOworfQorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisvLyBGdW5jdGlvbiAgIDogdGVtcGVfZ2V0X291dF9ib3VuZAorLy8gRGVzY3JpcHRpb246 IFJldHVybiB0aGUgYXR0cmlidXRlcyBvZiBhbiBvdXRib3VuZCB3aW5kb3cuCisvLy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCitpbnQgdGVtcGVfZ2V0X291dF9ib3VuZCh2bWVPdXRXaW5k b3dDZmdfdCAqIHZtZU91dCkKK3sKKwl0c2kxNDhfdCAqcF90ZW1wZSA9ICh0c2kxNDhfdCAq KSB2bWVjaGlwX2Jhc2VhZGRyOworCWludCB0ZW1wX2N0bCA9IDA7CisJdW5zaWduZWQgaW50 IGk7CisKKwkvLyBWZXJpZnkgaW5wdXQgZGF0YQorCWlmICh2bWVPdXQtPndpbmRvd05iciA+ IDcpIHsKKwkJcmV0dXJuICgtRUlOVkFMKTsKKwl9CisJaSA9IHZtZU91dC0+d2luZG93TmJy OworCisJLy8gR2V0IENvbnRyb2wgJiBCVVMgYXR0cmlidXRlcworCXRlbXBfY3RsID0gcF90 ZW1wZS0+bGNzci5vdXRib3VuZFRyYW5zbGF0aW9uW2ldLm90YXQ7CisJdm1lT3V0LT53clBv c3RFbmFibGUgPSAxOworCWlmICh0ZW1wX2N0bCAmIDB4MDAyMCkKKwkJdm1lT3V0LT51c2Vy QWNjZXNzVHlwZSA9IFZNRV9TVVBFUjsKKwllbHNlCisJCXZtZU91dC0+dXNlckFjY2Vzc1R5 cGUgPSBWTUVfVVNFUjsKKwlpZiAodGVtcF9jdGwgJiAweDAwMTApCisJCXZtZU91dC0+ZGF0 YUFjY2Vzc1R5cGUgPSBWTUVfUFJPRzsKKwllbHNlCisJCXZtZU91dC0+ZGF0YUFjY2Vzc1R5 cGUgPSBWTUVfREFUQTsKKwlpZiAodGVtcF9jdGwgJiAweDgwMDAwMDAwKQorCQl2bWVPdXQt PndpbmRvd0VuYWJsZSA9IDE7CisKKwlzd2l0Y2ggKCh0ZW1wX2N0bCAmIDB4QzApID4+IDYp IHsKKwljYXNlIDA6CisJCXZtZU91dC0+bWF4RGF0YVdpZHRoID0gVk1FX0QxNjsKKwkJYnJl YWs7CisJY2FzZSAxOgorCQl2bWVPdXQtPm1heERhdGFXaWR0aCA9IFZNRV9EMzI7CisJCWJy ZWFrOworCX0KKwl2bWVPdXQtPnhmZXJQcm90b2NvbCA9IDEgPDwgKCh0ZW1wX2N0bCA+PiA4 KSAmIDcpOworCisJc3dpdGNoICh0ZW1wX2N0bCAmIDB4RikgeworCWNhc2UgMHgwOgorCQl2 bWVPdXQtPmFkZHJTcGFjZSA9IFZNRV9BMTY7CisJCWJyZWFrOworCWNhc2UgMHgxOgorCQl2 bWVPdXQtPmFkZHJTcGFjZSA9IFZNRV9BMjQ7CisJCWJyZWFrOworCWNhc2UgMHgyOgorCQl2 bWVPdXQtPmFkZHJTcGFjZSA9IFZNRV9BMzI7CisJCWJyZWFrOworCWNhc2UgMHg0OgorCQl2 bWVPdXQtPmFkZHJTcGFjZSA9IFZNRV9BNjQ7CisJCWJyZWFrOworCWNhc2UgMHg1OgorCQl2 bWVPdXQtPmFkZHJTcGFjZSA9IFZNRV9DUkNTUjsKKwkJYnJlYWs7CisJY2FzZSAweDg6CisJ CXZtZU91dC0+YWRkclNwYWNlID0gVk1FX1VTRVIxOworCQlicmVhazsKKwljYXNlIDB4OToK KwkJdm1lT3V0LT5hZGRyU3BhY2UgPSBWTUVfVVNFUjI7CisJCWJyZWFrOworCWNhc2UgMHhB OgorCQl2bWVPdXQtPmFkZHJTcGFjZSA9IFZNRV9VU0VSMzsKKwkJYnJlYWs7CisJY2FzZSAw eEI6CisJCXZtZU91dC0+YWRkclNwYWNlID0gVk1FX1VTRVI0OworCQlicmVhazsKKwl9CisK Kwl2bWVPdXQtPnhmZXJSYXRlMmVzc3QgPSBWTUVfU1NUTk9ORTsKKwlpZiAodm1lT3V0LT54 ZmVyUHJvdG9jb2wgPT0gVk1FXzJlU1NUKSB7CisKKwkJc3dpdGNoICh0ZW1wX2N0bCAmIDB4 MTgwMCkgeworCQljYXNlIDB4MDAwOgorCQkJdm1lT3V0LT54ZmVyUmF0ZTJlc3N0ID0gVk1F X1NTVDE2MDsKKwkJCWJyZWFrOworCQljYXNlIDB4ODAwOgorCQkJdm1lT3V0LT54ZmVyUmF0 ZTJlc3N0ID0gVk1FX1NTVDI2NzsKKwkJCWJyZWFrOworCQljYXNlIDB4MTAwMDoKKwkJCXZt ZU91dC0+eGZlclJhdGUyZXNzdCA9IFZNRV9TU1QzMjA7CisJCQlicmVhazsKKwkJfQorCisJ fQorCS8qIEdldCBXaW5kb3cgbWFwcGluZ3MgKi8KKworCXZtZU91dC0+YmNhc3RTZWxlY3Qy ZXNzdCA9IHBfdGVtcGUtPmxjc3Iub3V0Ym91bmRUcmFuc2xhdGlvbltpXS5vdGJzOworCXZt ZU91dC0+cGNpQnVzQWRkckwgPSBwX3RlbXBlLT5sY3NyLm91dGJvdW5kVHJhbnNsYXRpb25b aV0ub3RzYWw7CisJdm1lT3V0LT5wY2lCdXNBZGRyVSA9IHBfdGVtcGUtPmxjc3Iub3V0Ym91 bmRUcmFuc2xhdGlvbltpXS5vdHNhdTsKKworCXZtZU91dC0+d2luZG93U2l6ZUwgPQorCSAg ICAocF90ZW1wZS0+bGNzci5vdXRib3VuZFRyYW5zbGF0aW9uW2ldLm90ZWFsICsgMHgxMDAw MCkgLQorCSAgICB2bWVPdXQtPnBjaUJ1c0FkZHJMOworCXZtZU91dC0+d2luZG93U2l6ZVUg PQorCSAgICBzdWI2NGhpKHBfdGVtcGUtPmxjc3Iub3V0Ym91bmRUcmFuc2xhdGlvbltpXS5v dGVhbCArIDB4MTAwMDAsCisJCSAgICBwX3RlbXBlLT5sY3NyLm91dGJvdW5kVHJhbnNsYXRp b25baV0ub3RlYXUsCisJCSAgICB2bWVPdXQtPnBjaUJ1c0FkZHJMLCB2bWVPdXQtPnBjaUJ1 c0FkZHJVKTsKKwl2bWVPdXQtPnhsYXRlZEFkZHJMID0KKwkgICAgcF90ZW1wZS0+bGNzci5v dXRib3VuZFRyYW5zbGF0aW9uW2ldLm90b2ZsICsgdm1lT3V0LT5wY2lCdXNBZGRyTDsKKwlp ZiAodm1lT3V0LT5hZGRyU3BhY2UgPT0gVk1FX0E2NCkgeworCQl2bWVPdXQtPnhsYXRlZEFk ZHJVID0KKwkJICAgIGFkZDY0aGkocF90ZW1wZS0+bGNzci5vdXRib3VuZFRyYW5zbGF0aW9u W2ldLm90b2ZsLAorCQkJICAgIHBfdGVtcGUtPmxjc3Iub3V0Ym91bmRUcmFuc2xhdGlvbltp XS5vdG9mdSwKKwkJCSAgICB2bWVPdXQtPnBjaUJ1c0FkZHJMLCB2bWVPdXQtPnBjaUJ1c0Fk ZHJVKTsKKwl9IGVsc2UgeworCQl2bWVPdXQtPnhsYXRlZEFkZHJVID0gMDsKKwl9CisKKwly ZXR1cm4gKDApOworfQorCisvKgorICogRnVuY3Rpb24gICA6IHRlbXBlX3NldHVwX2xtCisg KiBEZXNjcmlwdGlvbjogU2V0IHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBsb2NhdGlvbiBtb25p dG9yCisgKi8KKworaW50IHRlbXBlX3NldHVwX2xtKHZtZUxtQ2ZnX3QgKiB2bWVMbSkKK3sK Kwl0c2kxNDhfdCAqcF90ZW1wZSA9ICh0c2kxNDhfdCAqKSB2bWVjaGlwX2Jhc2VhZGRyOwor CWludCB0ZW1wX2N0bCA9IDA7CisKKwkvKiBTZXR1cCBDVEwgcmVnaXN0ZXIgKi8KKwlzd2l0 Y2ggKHZtZUxtLT5hZGRyU3BhY2UpIHsKKwljYXNlIFZNRV9BMTY6CisJCXRlbXBfY3RsIHw9 IDB4MDA7CisJCWJyZWFrOworCWNhc2UgVk1FX0EyNDoKKwkJdGVtcF9jdGwgfD0gMHgxMDsK KwkJYnJlYWs7CisJY2FzZSBWTUVfQTMyOgorCQl0ZW1wX2N0bCB8PSAweDIwOworCQlicmVh azsKKwljYXNlIFZNRV9BNjQ6CisJCXRlbXBfY3RsIHw9IDB4NDA7CisJCWJyZWFrOworCWRl ZmF1bHQ6CisJCXJldHVybiAoLUVJTlZBTCk7CisJfQorCWlmICh2bWVMbS0+dXNlckFjY2Vz c1R5cGUgJiBWTUVfVVNFUikKKwkJdGVtcF9jdGwgfD0gMHg0OworCWlmICh2bWVMbS0+dXNl ckFjY2Vzc1R5cGUgJiBWTUVfU1VQRVIpCisJCXRlbXBfY3RsIHw9IDB4ODsKKwlpZiAodm1l TG0tPmRhdGFBY2Nlc3NUeXBlICYgVk1FX0RBVEEpCisJCXRlbXBfY3RsIHw9IDB4MTsKKwlp ZiAodm1lTG0tPmRhdGFBY2Nlc3NUeXBlICYgVk1FX1BST0cpCisJCXRlbXBfY3RsIHw9IDB4 MjsKKworCS8qIERpc2FibGUgd2hpbGUgd2UgYXJlIG11Y2tpbmcgYXJvdW5kICovCisJcF90 ZW1wZS0+bGNzci5sbWF0ID0gMDsKKwl2bWVfc3luY19kYXRhKCk7CisKKwlwX3RlbXBlLT5s Y3NyLmxtYmFsID0gdm1lTG0tPmFkZHI7CisJcF90ZW1wZS0+bGNzci5sbWJhdSA9IHZtZUxt LT5hZGRyVTsKKworCXRlbXBlX2xtX2V2ZW50ID0gMDsKKworCS8qIFdyaXRlIGN0bCByZWcg YW5kIGVuYWJsZSAqLworCXBfdGVtcGUtPmxjc3IubG1hdCA9IHRlbXBfY3RsIHwgMHg4MDsK Kwl2bWVfc3luY19kYXRhKCk7CisKKwlyZXR1cm4gKDApOworfQorCisvKgorICogRnVuY3Rp b246ICAgIHRlbXBlX3dhaXRfbG0KKyAqIERlc2NyaXB0aW9uOiBXYWl0IGZvciBsb2NhdGlv biBtb25pdG9yIHRvIGJlIHRyaWdnZXJlZC4KKyAqLworCitpbnQgdGVtcGVfd2FpdF9sbSh2 bWVMbUNmZ190ICogdm1lTG0pCit7CisJdHNpMTQ4X3QgKnBfdGVtcGUgPSAodHNpMTQ4X3Qg Kikgdm1lY2hpcF9iYXNlYWRkcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVk IGludCB0bXA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbG1fbG9jaywgZmxhZ3MpOworCXRt cCA9IHRlbXBlX2xtX2V2ZW50OworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxtX2xvY2ss IGZsYWdzKTsKKwlpZiAodG1wID09IDApIHsKKwkJaWYgKHZtZUxtLT5sbVdhaXQgPCAxMCkK KwkJCXZtZUxtLT5sbVdhaXQgPSAxMDsKKwkJaW50ZXJydXB0aWJsZV9zbGVlcF9vbl90aW1l b3V0KCZsbV9xdWV1ZSwgdm1lTG0tPmxtV2FpdCk7CisJfQorCXBfdGVtcGUtPmxjc3IubG1h dCA9IDA7CisJdm1lX3N5bmNfZGF0YSgpOworCXZtZUxtLT5sbUV2ZW50cyA9IHRlbXBlX2xt X2V2ZW50OworCXJldHVybiAoMCk7Cit9CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K Ky8vIEZ1bmN0aW9uICAgOiB0ZW1wZV9kb19ybXcKKy8vIERlc2NyaXB0aW9uOiBQZXJmb3Jt IGFuIFJNVyBjeWNsZSBvbiB0aGUgVk1FIGJ1cy4KKy8vICAgIEEgVk1FIG91dGJvdW5kIHdp bmRvdyBtdXN0IGFscmVhZHkgYmUgc2V0dXAgd2hpY2ggbWFwcyB0byB0aGUgZGVzaXJlZCAK Ky8vICAgIFJNVyBhZGRyZXNzLgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoraW50IHRl bXBlX2RvX3Jtdyh2bWVSbXdDZmdfdCAqIHZtZVJtdykKK3sKKwl0c2kxNDhfdCAqcF90ZW1w ZSA9ICh0c2kxNDhfdCAqKSB2bWVjaGlwX2Jhc2VhZGRyOworCWludCB0ZW1wX2N0bCA9IDA7 CisJdW5zaWduZWQgaW50IHZtZV9lbmRfdSwgdm1lX2VuZF9sOworCWludCAqcm13X3BjaV9k YXRhX3B0ciA9IE5VTEw7CisJaW50ICp2YV9kYXRhX3B0ciA9IE5VTEw7CisJaW50IGk7CisJ dm1lT3V0V2luZG93Q2ZnX3Qgdm1lT3V0OworCisJaWYgKHZtZVJtdy0+bWF4QXR0ZW1wdHMg PCAxKSB7CisJCXJldHVybiAoLUVJTlZBTCk7CisJfQorCS8vIEZpbmQgdGhlIFBDSSBhZGRy ZXNzIHRoYXQgbWFwcyB0byB0aGUgZGVzaXJlZCBWTUUgYWRkcmVzcyAKKwlmb3IgKGkgPSAw OyBpIDwgNzsgaSsrKSB7CisJCXRlbXBfY3RsID0gcF90ZW1wZS0+bGNzci5vdXRib3VuZFRy YW5zbGF0aW9uW2ldLm90YXQ7CisJCWlmICgodGVtcF9jdGwgJiAweDgwMDAwMDAwKSA9PSAw KSB7CisJCQljb250aW51ZTsKKwkJfQorCQltZW1zZXQoJnZtZU91dCwgMCwgc2l6ZW9mKHZt ZU91dCkpOworCQl2bWVPdXQud2luZG93TmJyID0gaTsKKwkJdGVtcGVfZ2V0X291dF9ib3Vu ZCgmdm1lT3V0KTsKKwkJaWYgKHZtZU91dC5hZGRyU3BhY2UgIT0gdm1lUm13LT5hZGRyU3Bh Y2UpIHsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICh2bWVPdXQueGxhdGVkQWRkclUgPiB2 bWVSbXctPnRhcmdldEFkZHJVKSB7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAodm1lT3V0 LnhsYXRlZEFkZHJVID09IHZtZVJtdy0+dGFyZ2V0QWRkclUpIHsKKwkJCWlmICh2bWVPdXQu eGxhdGVkQWRkckwgPiB2bWVSbXctPnRhcmdldEFkZHIpIHsKKwkJCQljb250aW51ZTsKKwkJ CX0KKwkJfQorCQl2bWVfZW5kX2wgPSB2bWVPdXQueGxhdGVkQWRkckwgKyB2bWVPdXQud2lu ZG93U2l6ZUw7CisJCXZtZV9lbmRfdSA9IGFkZDY0aGkodm1lT3V0LnhsYXRlZEFkZHJMLCB2 bWVPdXQueGxhdGVkQWRkclUsCisJCQkJICAgIHZtZU91dC53aW5kb3dTaXplTCwgdm1lT3V0 LndpbmRvd1NpemVVKTsKKwkJaWYgKHN1YjY0aGkodm1lX2VuZF9sLCB2bWVfZW5kX3UsCisJ CQkgICAgdm1lUm13LT50YXJnZXRBZGRyLCB2bWVSbXctPnRhcmdldEFkZHJVKSA+PSAwKSB7 CisJCQlybXdfcGNpX2RhdGFfcHRyID0KKwkJCSAgICAoaW50ICopKHZtZU91dC5wY2lCdXNB ZGRyTCArCisJCQkJICAgICh2bWVSbXctPnRhcmdldEFkZHIgLSB2bWVPdXQueGxhdGVkQWRk ckwpKTsKKwkJCXZhX2RhdGFfcHRyID0KKwkJCSAgICAoaW50ICopKG91dF9pbWFnZV92YVtp XSArCisJCQkJICAgICh2bWVSbXctPnRhcmdldEFkZHIgLSB2bWVPdXQueGxhdGVkQWRkckwp KTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLy8gSWYgbm8gd2luZG93IC0gZmFpbC4KKwlp ZiAocm13X3BjaV9kYXRhX3B0ciA9PSBOVUxMKSB7CisJCXJldHVybiAoLUVJTlZBTCk7CisJ fQorCS8vIFNldHVwIHRoZSBSTVcgcmVnaXN0ZXJzLgorCXBfdGVtcGUtPmxjc3Iudm1jdHJs ICY9IH4weDEwMDAwMDsKKwl2bWVfc3luY19kYXRhKCk7CisJcF90ZW1wZS0+bGNzci5ybXdl biA9IHZtZVJtdy0+ZW5hYmxlTWFzazsKKwlwX3RlbXBlLT5sY3NyLnJtd2MgPSB2bWVSbXct PmNvbXBhcmVEYXRhOworCXBfdGVtcGUtPmxjc3Iucm13cyA9IHZtZVJtdy0+c3dhcERhdGE7 CisJcF90ZW1wZS0+bGNzci5ybXdhdSA9IDA7CisJcF90ZW1wZS0+bGNzci5ybXdhbCA9IChp bnQpcm13X3BjaV9kYXRhX3B0cjsKKwlwX3RlbXBlLT5sY3NyLnZtY3RybCB8PSAweDEwMDAw MDsKKwl2bWVfc3luY19kYXRhKCk7CisKKwkvLyBSdW4gdGhlIFJNVyBjeWNsZSB1bnRpbCBl aXRoZXIgc3VjY2VzcyBvciBtYXggYXR0ZW1wdHMuCisJdm1lUm13LT5udW1BdHRlbXB0cyA9 IDE7CisJd2hpbGUgKHZtZVJtdy0+bnVtQXR0ZW1wdHMgPD0gdm1lUm13LT5tYXhBdHRlbXB0 cykgeworCisJCWlmICgoKnZhX2RhdGFfcHRyICYgdm1lUm13LT5lbmFibGVNYXNrKSA9PQor CQkgICAgKHZtZVJtdy0+c3dhcERhdGEgJiB2bWVSbXctPmVuYWJsZU1hc2spKSB7CisKKwkJ CWJyZWFrOworCisJCX0KKwkJdm1lUm13LT5udW1BdHRlbXB0cysrOworCX0KKworCXBfdGVt cGUtPmxjc3Iudm1jdHJsICY9IH4weDEwMDAwMDsKKwl2bWVfc3luY19kYXRhKCk7CisKKwkv LyBJZiBubyBzdWNjZXNzLCBzZXQgbnVtIEF0dGVtcHRzIHRvIGJlIGdyZWF0ZXIgdGhhbiBt YXggYXR0ZW1wdHMKKwlpZiAodm1lUm13LT5udW1BdHRlbXB0cyA+IHZtZVJtdy0+bWF4QXR0 ZW1wdHMpIHsKKwkJdm1lUm13LT5udW1BdHRlbXB0cyA9IHZtZVJtdy0+bWF4QXR0ZW1wdHMg KyAxOworCX0KKworCXJldHVybiAoMCk7Cit9CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKy8vIEZ1bmN0aW9uICAgOiBkbWFfc3JjX2F0dHIsIGRtYV9kc3RfYXR0cgorLy8gRGVz Y3JpcHRpb246IEhlbHBlciBmdW5jdGlvbnMgd2hpY2ggc2V0dXAgY29tbW9uIHBvcnRpb25z IG9mIHRoZSAKKy8vICAgICAgRE1BIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYXR0cmlidXRl IHJlZ2lzdGVycy4KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3N0YXRpYyBpbnQgZG1h X3NyY19hdHRyKHZtZURtYVBhY2tldF90ICp2bWVDdXIpCit7CisKKwlpbnQgZHNhdHJlZyA9 IDA7CisJLy8gY2FsY3VsYXRlIHNvdXJjZSBhdHRyaWJ1dGUgcmVnaXN0ZXIKKwlzd2l0Y2gg KHZtZUN1ci0+c3JjQnVzKSB7CisJY2FzZSBWTUVfRE1BX1BBVFRFUk5fQllURToKKwkJZHNh dHJlZyA9IDB4MjMwMDAwMDA7CisJCWJyZWFrOworCWNhc2UgVk1FX0RNQV9QQVRURVJOX0JZ VEVfSU5DUkVNRU5UOgorCQlkc2F0cmVnID0gMHgyMjAwMDAwMDsKKwkJYnJlYWs7CisJY2Fz ZSBWTUVfRE1BX1BBVFRFUk5fV09SRDoKKwkJZHNhdHJlZyA9IDB4MjEwMDAwMDA7CisJCWJy ZWFrOworCWNhc2UgVk1FX0RNQV9QQVRURVJOX1dPUkRfSU5DUkVNRU5UOgorCQlkc2F0cmVn ID0gMHgyMDAwMDAwMDsKKwkJYnJlYWs7CisJY2FzZSBWTUVfRE1BX1BDSToKKwkJZHNhdHJl ZyA9IDB4MDAwMDAwMDA7CisJCWJyZWFrOworCWNhc2UgVk1FX0RNQV9WTUU6CisJCWRzYXRy ZWcgPSAweDEwMDAwMDAwOworCQlkc2F0cmVnIHw9IHRlbXBlX3NldHVwX2F0dHJpYnV0ZSh2 bWVDdXItPnNyY1ZtZUF0dHIuYWRkclNwYWNlLAorCQkJCQkJIHZtZUN1ci0+c3JjVm1lQXR0 ci4KKwkJCQkJCSB1c2VyQWNjZXNzVHlwZSwKKwkJCQkJCSB2bWVDdXItPnNyY1ZtZUF0dHIu CisJCQkJCQkgZGF0YUFjY2Vzc1R5cGUsCisJCQkJCQkgdm1lQ3VyLT5zcmNWbWVBdHRyLgor CQkJCQkJIG1heERhdGFXaWR0aCwKKwkJCQkJCSB2bWVDdXItPnNyY1ZtZUF0dHIuCisJCQkJ CQkgeGZlclByb3RvY29sLAorCQkJCQkJIHZtZUN1ci0+c3JjVm1lQXR0ci4KKwkJCQkJCSB4 ZmVyUmF0ZTJlc3N0KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZHNhdHJlZyA9IC1FSU5W QUw7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gKGRzYXRyZWcpOworfQorCitzdGF0aWMgaW50 IGRtYV9kc3RfYXR0cih2bWVEbWFQYWNrZXRfdCAqIHZtZUN1cikKK3sKKwlpbnQgZGRhdHJl ZyA9IDA7CisJLy8gY2FsY3VsYXRlIGRlc3RpbmF0aW9uIGF0dHJpYnV0ZSByZWdpc3Rlcgor CXN3aXRjaCAodm1lQ3VyLT5kc3RCdXMpIHsKKwljYXNlIFZNRV9ETUFfUENJOgorCQlkZGF0 cmVnID0gMHgwMDAwMDAwMDsKKwkJYnJlYWs7CisJY2FzZSBWTUVfRE1BX1ZNRToKKwkJZGRh dHJlZyA9IDB4MTAwMDAwMDA7CisJCWRkYXRyZWcgfD0gdGVtcGVfc2V0dXBfYXR0cmlidXRl KHZtZUN1ci0+ZHN0Vm1lQXR0ci5hZGRyU3BhY2UsCisJCQkJCQkgdm1lQ3VyLT5kc3RWbWVB dHRyLgorCQkJCQkJIHVzZXJBY2Nlc3NUeXBlLAorCQkJCQkJIHZtZUN1ci0+ZHN0Vm1lQXR0 ci4KKwkJCQkJCSBkYXRhQWNjZXNzVHlwZSwKKwkJCQkJCSB2bWVDdXItPmRzdFZtZUF0dHIu CisJCQkJCQkgbWF4RGF0YVdpZHRoLAorCQkJCQkJIHZtZUN1ci0+ZHN0Vm1lQXR0ci4KKwkJ CQkJCSB4ZmVyUHJvdG9jb2wsCisJCQkJCQkgdm1lQ3VyLT5kc3RWbWVBdHRyLgorCQkJCQkJ IHhmZXJSYXRlMmVzc3QpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZGF0cmVnID0gLUVJ TlZBTDsKKwkJYnJlYWs7CisJfQorCXJldHVybiAoZGRhdHJlZyk7Cit9CisKKy8vLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKy8vIEZ1bmN0aW9uICAgOiB0ZW1wZV9zdGFydF9kbWEKKy8v IERlc2NyaXB0aW9uOiBXcml0ZSB0aGUgRE1BIGNvbnRyb2xsZXIgcmVnaXN0ZXJzIHdpdGgg dGhlIGNvbnRlbnRzCisvLyAgICBuZWVkZWQgdG8gYWN0dWFsbHkgc3RhcnQgdGhlIERNQSBv cGVyYXRpb24uCisvLyAgICByZXR1cm5zIHN0YXJ0aW5nIHRpbWUgc3RhbXAuCisvLworLy8g ICAgU3RhcnRzIGVpdGhlciBkaXJlY3Qgb3IgY2hhaW5lZCBtb2RlIGFzIGFwcHJvcHJpYXRl IChiYXNlZCBvbiBkY3RscmVnKQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorc3RhdGlj IHVuc2lnbmVkIGludAordGVtcGVfc3RhcnRfZG1hKGludCBjaGFubmVsLAorCQl1bnNpZ25l ZCBpbnQgZGN0bHJlZywgdHNpMTQ4RG1hRGVzY3JpcHRvcl90ICogdm1lTEwpCit7CisJdHNp MTQ4X3QgKnBfdGVtcGUgPSAodHNpMTQ4X3QgKikgdm1lY2hpcF9iYXNlYWRkcjsKKwl1bnNp Z25lZCBpbnQgdmFsOworCisJLy8gU2V0dXAgcmVnaXN0ZXJzIGFzIG5lZWRlZCBmb3IgZGly ZWN0IG9yIGNoYWluZWQuCisJaWYgKGRjdGxyZWcgJiAweDgwMDAwMCkgeworCisJCS8vIFdy aXRlIHJlZ2lzdGVycyAKKwkJcF90ZW1wZS0+bGNzci5kbWFbY2hhbm5lbF0uZHNhdSA9IHZt ZUxMLT5kc2F1OworCQlwX3RlbXBlLT5sY3NyLmRtYVtjaGFubmVsXS5kc2FsID0gdm1lTEwt PmRzYWw7CisJCXBfdGVtcGUtPmxjc3IuZG1hW2NoYW5uZWxdLmRkYXUgPSB2bWVMTC0+ZGRh dTsKKwkJcF90ZW1wZS0+bGNzci5kbWFbY2hhbm5lbF0uZGRhbCA9IHZtZUxMLT5kZGFsOwor CQlwX3RlbXBlLT5sY3NyLmRtYVtjaGFubmVsXS5kc2F0ID0gdm1lTEwtPmRzYXQ7CisJCXBf dGVtcGUtPmxjc3IuZG1hW2NoYW5uZWxdLmRkYXQgPSB2bWVMTC0+ZGRhdDsKKwkJcF90ZW1w ZS0+bGNzci5kbWFbY2hhbm5lbF0uZGNudCA9IHZtZUxMLT5kY250OworCQlwX3RlbXBlLT5s Y3NyLmRtYVtjaGFubmVsXS5kZGJzID0gdm1lTEwtPmRkYnM7CisJfSBlbHNlIHsKKwkJcF90 ZW1wZS0+bGNzci5kbWFbY2hhbm5lbF0uZG5sYXUgPSAwOworCQlwX3RlbXBlLT5sY3NyLmRt YVtjaGFubmVsXS5kbmxhbCA9ICh1bnNpZ25lZCBpbnQpdm1lTEw7CisJfQorCXZtZV9zeW5j X2RhdGEoKTsKKworCS8vIFN0YXJ0IHRoZSBvcGVyYXRpb24KKwlwX3RlbXBlLT5sY3NyLmRt YVtjaGFubmVsXS5kY3RsID0gZGN0bHJlZyB8IDB4MjAwMDAwMDsKKwl2YWwgPSBnZXRfdGJs KCk7CisJdm1lX3N5bmNfZGF0YSgpOworCXJldHVybiAodmFsKTsKK30KKworLy8tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorLy8gRnVuY3Rpb24gICA6IHRlbXBlX3NldHVwX2RtYQorLy8g RGVzY3JpcHRpb246IENyZWF0ZSBhIGxpbmtlZCBsaXN0IChwb3NzaWJseSBvbmx5IDEgZWxl bWVudCBsb25nKSBvZiAKKy8vICAgVGVtcGUgRE1BIGRlc2NyaXB0b3JzIHdoaWNoIHdpbGwg cGVyZm9ybSB0aGUgRE1BIG9wZXJhdGlvbiBkZXNjcmliZWQKKy8vICAgYnkgdGhlIERNQSBw YWNrZXQuICBGbHVzaCBkZXNjcmlwdG9ycyBmcm9tIGNhY2hlLgorLy8gICBSZXR1cm4gcG9p bnRlciB0byBiZWdpbm5pbmcgb2YgbGlzdCAob3IgMCBvbiBmYWlsdXJlLikuCisvLy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCitzdGF0aWMgdHNpMTQ4RG1hRGVzY3JpcHRvcl90ICp0ZW1w ZV9zZXR1cF9kbWEodm1lRG1hUGFja2V0X3QgKiB2bWVEbWEpCit7CisJdm1lRG1hUGFja2V0 X3QgKnZtZV9jdXI7CisJaW50IG1heF9wZXJfcGFnZTsKKwlpbnQgY3VycmVudExMY291bnQ7 CisJdHNpMTQ4RG1hRGVzY3JpcHRvcl90ICpzdGFydExMOworCXRzaTE0OERtYURlc2NyaXB0 b3JfdCAqY3VycmVudExMOworCXRzaTE0OERtYURlc2NyaXB0b3JfdCAqbmV4dExMOworCisJ bWF4X3Blcl9wYWdlID0gUEFHRV9TSVpFIC8gc2l6ZW9mKHRzaTE0OERtYURlc2NyaXB0b3Jf dCkgLSAxOworCXN0YXJ0TEwgPSAodHNpMTQ4RG1hRGVzY3JpcHRvcl90ICopIF9fZ2V0X2Zy ZWVfcGFnZXMoR0ZQX0tFUk5FTCwgMCk7CisJaWYgKHN0YXJ0TEwgPT0gMCkgeworCQlyZXR1 cm4gKHN0YXJ0TEwpOworCX0KKwkvLyBGaXJzdCBhbGxvY2F0ZSBwYWdlcyBmb3IgZGVzY3Jp cHRvcnMgYW5kIGNyZWF0ZSBsaW5rZWQgbGlzdAorCXZtZV9jdXIgPSB2bWVEbWE7CisJY3Vy cmVudExMID0gc3RhcnRMTDsKKwljdXJyZW50TExjb3VudCA9IDA7CisJd2hpbGUgKHZtZV9j dXIgIT0gMCkgeworCQlpZiAodm1lX2N1ci0+cE5leHRQYWNrZXQgIT0gMCkgeworCQkJY3Vy cmVudExMLT5kbmxhdSA9ICh1bnNpZ25lZCBpbnQpMDsKKwkJCWN1cnJlbnRMTC0+ZG5sYWwg PSAodW5zaWduZWQgaW50KShjdXJyZW50TEwgKyAxKTsKKwkJCWN1cnJlbnRMTGNvdW50Kys7 CisJCQlpZiAoY3VycmVudExMY291bnQgPj0gbWF4X3Blcl9wYWdlKSB7CisJCQkJY3VycmVu dExMLT5kbmxhbCA9CisJCQkJICAgIF9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwgMCk7 CisJCQkJY3VycmVudExMY291bnQgPSAwOworCQkJfQorCQkJY3VycmVudExMID0gKHRzaTE0 OERtYURlc2NyaXB0b3JfdCAqKSBjdXJyZW50TEwtPmRubGFsOworCQl9IGVsc2UgeworCQkJ Y3VycmVudExMLT5kbmxhdSA9ICh1bnNpZ25lZCBpbnQpMDsKKwkJCWN1cnJlbnRMTC0+ZG5s YWwgPSAodW5zaWduZWQgaW50KTA7CisJCX0KKwkJdm1lX2N1ciA9IHZtZV9jdXItPnBOZXh0 UGFja2V0OworCX0KKworCS8vIE5leHQgZmlsbCBpbiBpbmZvcm1hdGlvbiBmb3IgZWFjaCBk ZXNjcmlwdG9yCisJdm1lX2N1ciA9IHZtZURtYTsKKwljdXJyZW50TEwgPSBzdGFydExMOwor CXdoaWxlICh2bWVfY3VyICE9IDApIHsKKwkJY3VycmVudExMLT5kc2F1ID0gdm1lX2N1ci0+ c3JjQWRkclU7CisJCWN1cnJlbnRMTC0+ZHNhbCA9IHZtZV9jdXItPnNyY0FkZHI7CisJCWN1 cnJlbnRMTC0+ZGRhdSA9IHZtZV9jdXItPmRzdEFkZHJVOworCQljdXJyZW50TEwtPmRkYWwg PSB2bWVfY3VyLT5kc3RBZGRyOworCQljdXJyZW50TEwtPmRzYXQgPSBkbWFfc3JjX2F0dHIo dm1lX2N1cik7CisJCWN1cnJlbnRMTC0+ZGRhdCA9IGRtYV9kc3RfYXR0cih2bWVfY3VyKTsK KwkJY3VycmVudExMLT5kY250ID0gdm1lX2N1ci0+Ynl0ZUNvdW50OworCQljdXJyZW50TEwt PmRkYnMgPSB2bWVfY3VyLT5iY2FzdFNlbGVjdDJlc3N0OworCisJCWN1cnJlbnRMTCA9ICh0 c2kxNDhEbWFEZXNjcmlwdG9yX3QgKikgY3VycmVudExMLT5kbmxhbDsKKwkJdm1lX2N1ciA9 IHZtZV9jdXItPnBOZXh0UGFja2V0OworCX0KKworCS8vIENvbnZlcnQgTGlua3MgdG8gUENJ IGFkZHJlc3Nlcy4KKwljdXJyZW50TEwgPSBzdGFydExMOworCXdoaWxlIChjdXJyZW50TEwg IT0gMCkgeworCQluZXh0TEwgPSAodHNpMTQ4RG1hRGVzY3JpcHRvcl90ICopIGN1cnJlbnRM TC0+ZG5sYWw7CisJCWN1cnJlbnRMTC0+ZG5sYWwgPSAodW5zaWduZWQgaW50KXZpcnRfdG9f YnVzKG5leHRMTCk7CisJCWlmIChuZXh0TEwgPT0gMCkKKwkJCWN1cnJlbnRMTC0+ZG5sYWwg fD0gMTsKKwkJdm1lX2ZsdXNoX3JhbmdlKCh1bnNpZ25lZCBsb25nKWN1cnJlbnRMTCwgCisJ CQkodW5zaWduZWQgbG9uZykoY3VycmVudExMICsgc2l6ZW9mKHRzaTE0OERtYURlc2NyaXB0 b3JfdCkpKTsKKwkJY3VycmVudExMID0gbmV4dExMOworCX0KKworCS8vIFJldHVybiBwb2lu dGVyIHRvIGRlc2NyaXB0b3JzIGxpc3QgCisJcmV0dXJuIChzdGFydExMKTsKK30KKworLy8t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gRnVuY3Rpb24gICA6IHRlbXBlX2ZyZWVfZG1h CisvLyBEZXNjcmlwdGlvbjogRnJlZSBhbGwgbWVtb3J5IHRoYXQgaXMgdXNlZCB0byBob2xk IHRoZSBETUEgCisvLyAgICBkZXNjcmlwdG9yIGxpbmtlZCBsaXN0LiAgCisvLworLy8tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorc3RhdGljIGludCB0ZW1wZV9mcmVlX2RtYSh0c2kxNDhE bWFEZXNjcmlwdG9yX3QgKiBzdGFydExMKQoreworCXRzaTE0OERtYURlc2NyaXB0b3JfdCAq Y3VycmVudExMOworCXRzaTE0OERtYURlc2NyaXB0b3JfdCAqcHJldkxMOworCXRzaTE0OERt YURlc2NyaXB0b3JfdCAqbmV4dExMOworCisJLy8gQ29udmVydCBMaW5rcyB0byB2aXJ0dWFs IGFkZHJlc3Nlcy4KKwljdXJyZW50TEwgPSBzdGFydExMOworCXdoaWxlIChjdXJyZW50TEwg IT0gMCkgeworCQlpZiAoY3VycmVudExMLT5kbmxhbCAmIDEpIHsKKwkJCWN1cnJlbnRMTC0+ ZG5sYWwgPSAwOworCQl9IGVsc2UgeworCQkJY3VycmVudExMLT5kbmxhbCA9CisJCQkgICAg KHVuc2lnbmVkIGludClidXNfdG9fdmlydChjdXJyZW50TEwtPmRubGFsKTsKKwkJfQorCQlj dXJyZW50TEwgPSAodHNpMTQ4RG1hRGVzY3JpcHRvcl90ICopIGN1cnJlbnRMTC0+ZG5sYWw7 CisJfQorCisJLy8gRnJlZSBhbGwgcGFnZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBkZXNjcmlw dG9ycy4KKwljdXJyZW50TEwgPSBzdGFydExMOworCXByZXZMTCA9IGN1cnJlbnRMTDsKKwl3 aGlsZSAoY3VycmVudExMICE9IDApIHsKKwkJbmV4dExMID0gKHRzaTE0OERtYURlc2NyaXB0 b3JfdCAqKSBjdXJyZW50TEwtPmRubGFsOworCQlpZiAoY3VycmVudExMICsgMSAhPSBuZXh0 TEwpIHsKKwkJCWZyZWVfcGFnZXMoKGludClwcmV2TEwsIDApOworCQkJcHJldkxMID0gbmV4 dExMOworCQl9CisJCWN1cnJlbnRMTCA9IG5leHRMTDsKKwl9CisKKwkvLyBSZXR1cm4gcG9p bnRlciB0byBkZXNjcmlwdG9ycyBsaXN0IAorCXJldHVybiAoMCk7Cit9CisKKy8qCisgKiBG dW5jdGlvbiAgIDogdGVtcGVfZG9fZG1hCisgKiBEZXNjcmlwdGlvbjogIAorICogIFNhbml0 eSBjaGVjayB0aGUgRE1BIHJlcXVlc3QuIAorICogIFNldHVwIERNQSBhdHRyaWJ1dGUgcmVn aXN0ZXIuIAorICogIENyZWF0ZSBsaW5rZWQgbGlzdCBvZiBETUEgZGVzY3JpcHRvcnMuCisg KiAgSW52b2tlIGFjdHVhbCBETUEgb3BlcmF0aW9uLgorICogIFdhaXQgZm9yIGNvbXBsZXRp b24uICBSZWNvcmQgZW5kaW5nIHRpbWUuCisgKiAgRnJlZSB0aGUgbGlua2VkIGxpc3Qgb2Yg RE1BIGRlc2NyaXB0b3JzLgorICovCisKK2ludCB0ZW1wZV9kb19kbWEodm1lRG1hUGFja2V0 X3QgKiB2bWVEbWEpCit7CisJdHNpMTQ4X3QgKnBfdGVtcGUgPSAodHNpMTQ4X3QgKikgdm1l Y2hpcF9iYXNlYWRkcjsKKwl1bnNpZ25lZCBpbnQgZGN0bHJlZyA9IDA7CisJaW50IHZhbDsK KwlpbnQgY2hhbm5lbCwgeDsKKwl2bWVEbWFQYWNrZXRfdCAqY3VyX2RtYTsKKwl0c2kxNDhE bWFEZXNjcmlwdG9yX3QgKmRtYUxMOworCisJLyogU2FuaXR5IGNoZWNrIHRoZSBWTUUgY2hh aW4gKi8KKwljaGFubmVsID0gdm1lRG1hLT5jaGFubmVsX251bWJlcjsKKwlpZiAoY2hhbm5l bCA+IDEpIHsKKwkJcmV0dXJuICgtRUlOVkFMKTsKKwl9CisJY3VyX2RtYSA9IHZtZURtYTsK Kwl3aGlsZSAoY3VyX2RtYSAhPSAwKSB7CisJCWlmIChjdXJfZG1hLT5ieXRlQ291bnQgPT0g MCkgeworCQkJcmV0dXJuICgtRUlOVkFMKTsKKwkJfQorCQlpZiAoZG1hX3NyY19hdHRyKGN1 cl9kbWEpIDwgMCkgeworCQkJcmV0dXJuICgtRUlOVkFMKTsKKwkJfQorCQlpZiAoZG1hX2Rz dF9hdHRyKGN1cl9kbWEpIDwgMCkgeworCQkJcmV0dXJuICgtRUlOVkFMKTsKKwkJfQorCisJ CWN1cl9kbWEgPSBjdXJfZG1hLT5wTmV4dFBhY2tldDsKKwkJaWYgKGN1cl9kbWEgPT0gdm1l RG1hKSB7CS8vIEVuZGxlc3MgTG9vcCEKKwkJCXJldHVybiAoLUVJTlZBTCk7CisJCX0KKwl9 CisKKwkvKiBjYWxjdWxhdGUgY29udHJvbCByZWdpc3RlciAqLworCWlmICh2bWVEbWEtPnBO ZXh0UGFja2V0ICE9IDApIHsKKwkJZGN0bHJlZyA9IDA7CisJfSBlbHNlIHsKKwkJZGN0bHJl ZyA9IDB4ODAwMDAwOworCX0KKworCWZvciAoeCA9IDA7IHggPCA4OyB4KyspIHsJLy8gdm1l IGJsb2NrIHNpemUKKwkJaWYgKCgzMiA8PCB4KSA+PSB2bWVEbWEtPm1heFZtZUJsb2NrU2l6 ZSkgeworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKHggPT0gOCkKKwkJeCA9IDc7CisJZGN0 bHJlZyB8PSAoeCA8PCAxMik7CisKKwlmb3IgKHggPSAwOyB4IDwgODsgeCsrKSB7CS8vIHBj aSBibG9jayBzaXplCisJCWlmICgoMzIgPDwgeCkgPj0gdm1lRG1hLT5tYXhQY2lCbG9ja1Np emUpIHsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmICh4ID09IDgpCisJCXggPSA3OworCWRj dGxyZWcgfD0gKHggPDwgNCk7CisKKwlpZiAodm1lRG1hLT52bWVCYWNrT2ZmVGltZXIpIHsK KwkJZm9yICh4ID0gMTsgeCA8IDg7IHgrKykgewkvLyB2bWUgdGltZXIKKwkJCWlmICgoMSA8 PCAoeCAtIDEpKSA+PSB2bWVEbWEtPnZtZUJhY2tPZmZUaW1lcikgeworCQkJCWJyZWFrOwor CQkJfQorCQl9CisJCWlmICh4ID09IDgpCisJCQl4ID0gNzsKKwkJZGN0bHJlZyB8PSAoeCA8 PCA4KTsKKwl9CisKKwlpZiAodm1lRG1hLT5wY2lCYWNrT2ZmVGltZXIpIHsKKwkJZm9yICh4 ID0gMTsgeCA8IDg7IHgrKykgewkvLyBwY2kgdGltZXIKKwkJCWlmICgoMSA8PCAoeCAtIDEp KSA+PSB2bWVEbWEtPnBjaUJhY2tPZmZUaW1lcikgeworCQkJCWJyZWFrOworCQkJfQorCQl9 CisJCWlmICh4ID09IDgpCisJCQl4ID0gNzsKKwkJZGN0bHJlZyB8PSAoeCA8PCAwKTsKKwl9 CisJLyogU2V0dXAgdGhlIGRtYSBjaGFpbiAqLworCWRtYUxMID0gdGVtcGVfc2V0dXBfZG1h KHZtZURtYSk7CisKKwkvKiBTdGFydCB0aGUgRE1BICovCisJaWYgKGRjdGxyZWcgJiAweDgw MDAwMCkgeworCQl2bWVEbWEtPnZtZURtYVN0YXJ0VGljayA9CisJCSAgICB0ZW1wZV9zdGFy dF9kbWEoY2hhbm5lbCwgZGN0bHJlZywgZG1hTEwpOworCX0gZWxzZSB7CisJCXZtZURtYS0+ dm1lRG1hU3RhcnRUaWNrID0KKwkJICAgIHRlbXBlX3N0YXJ0X2RtYShjaGFubmVsLCBkY3Rs cmVnLCAodHNpMTQ4RG1hRGVzY3JpcHRvcl90ICopCisJCQkJICAgIHZpcnRfdG9fcGh5cyhk bWFMTCkpOworCX0KKworCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShkbWFfcXVldWVbY2hh bm5lbF0sCisJCQkJIChwX3RlbXBlLT5sY3NyLmRtYVtjaGFubmVsXS4KKwkJCQkgIGRzdGEg JiAweDEwMDAwMDApID09IDApOworCXZhbCA9IHBfdGVtcGUtPmxjc3IuZG1hW2NoYW5uZWxd LmRzdGE7CisKKwl2bWVEbWEtPnZtZURtYVN0b3BUaWNrID0gdGVtcGVfZG1hX2lycV90aW1l W2NoYW5uZWxdOworCXZtZURtYS0+dm1lRG1hU3RhdHVzID0gdmFsOworCWlmICh2bWVEbWEt PnZtZURtYVN0b3BUaWNrIDwgdm1lRG1hLT52bWVEbWFTdGFydFRpY2spIHsKKwkJdm1lRG1h LT52bWVEbWFFbGFwc2VkVGltZSA9CisJCSAgICAoMHhGRkZGRkZGRiAtIHZtZURtYS0+dm1l RG1hU3RhcnRUaWNrKSArCisJCSAgICB2bWVEbWEtPnZtZURtYVN0b3BUaWNrOworCX0gZWxz ZSB7CisJCXZtZURtYS0+dm1lRG1hRWxhcHNlZFRpbWUgPQorCQkgICAgdm1lRG1hLT52bWVE bWFTdG9wVGljayAtIHZtZURtYS0+dm1lRG1hU3RhcnRUaWNrOworCX0KKwl2bWVEbWEtPnZt ZURtYUVsYXBzZWRUaW1lIC09IHZtZWNoaXBfaXJxX292ZXJoZWFkX3RpY2tzOworCXZtZURt YS0+dm1lRG1hRWxhcHNlZFRpbWUgLz0gKHRiX3NwZWVkIC8gMTAwMDAwMCk7CisKKwl2bWVE bWEtPnZtZURtYVN0YXR1cyA9IDA7CisJaWYgKHZhbCAmIDB4MTAwMDAwMDApIHsKKwkJcHJp bnRrKEtFUk5fRVJSCisJCSAgICAgICAidHNpMTQ4OiBETUEgRXJyb3IgaW4gRE1BX3RlbXBl X2lycWhhbmRsZXIgRFNUQT0lMDhYXG4iLAorCQkgICAgICAgdmFsKTsKKwkJdm1lRG1hLT52 bWVEbWFTdGF0dXMgPSB2YWw7CisKKwl9CisJLyogRnJlZSB0aGUgZG1hIGNoYWluICovCisJ dGVtcGVfZnJlZV9kbWEoZG1hTEwpOworCisJcmV0dXJuICgwKTsKK30KKworLyoKKyAqIEZ1 bmN0aW9uOiAgICB0c2kxNDhfc2h1dGRvd24KKyAqIERlc2NyaXB0aW9uOiBQdXQgVk1FIGJy aWRnZSBpbiBxdWllc2NlbnQgc3RhdGUuICBEaXNhYmxlIGFsbCBkZWNvZGVycywKKyAqIGNs ZWFyIGFsbCBpbnRlcnJ1cHRzLgorICovCisKK3ZvaWQgdHNpMTQ4X3NodXRkb3duKHZvaWQp Cit7CisJdHNpMTQ4X3QgKnBfdGVtcGUgPSAodHNpMTQ4X3QgKikgdm1lY2hpcF9iYXNlYWRk cjsKKwlpbnQgaTsKKworCS8qCisJICogIFNodXRkb3duIGFsbCBpbmJvdW5kIGFuZCBvdXRi b3VuZCB3aW5kb3dzLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJcF90 ZW1wZS0+bGNzci5pbmJvdW5kVHJhbnNsYXRpb25baV0uaXRhdCA9IDA7CisJCXBfdGVtcGUt Pmxjc3Iub3V0Ym91bmRUcmFuc2xhdGlvbltpXS5vdGF0ID0gMDsKKwl9CisKKwkvKgorCSAq ICBTaHV0ZG93biBMb2NhdGlvbiBtb25pdG9yLgorCSAqLworCXBfdGVtcGUtPmxjc3IubG1h dCA9IDA7CisKKwkvKgorCSAqICBTaHV0ZG93biBDUkcgbWFwLgorCSAqLworCXBfdGVtcGUt Pmxjc3IuY3NyYXQgPSAwOworCisJLyoKKwkgKiAgQ2xlYXIgZXJyb3Igc3RhdHVzLgorCSAq LworCXBfdGVtcGUtPmxjc3IuZWRwYXQgPSAweEZGRkZGRkZGOworCXBfdGVtcGUtPmxjc3Iu dmVhdCA9IDB4RkZGRkZGRkY7CisJcF90ZW1wZS0+bGNzci5wc3RhdCA9IDB4MDcwMDA3MDA7 CisKKwkvKgorCSAqICBSZW1vdmUgVklSUSBpbnRlcnJ1cHQgKGlmIGFueSkKKwkgKi8KKwlp ZiAocF90ZW1wZS0+bGNzci52aWNyICYgMHg4MDApIHsKKwkJcF90ZW1wZS0+bGNzci52aWNy ID0gMHg4MDAwOworCX0KKworCS8qCisJICogIERpc2FibGUgYW5kIGNsZWFyIGFsbCBpbnRl cnJ1cHRzLgorCSAqLworCXBfdGVtcGUtPmxjc3IuaW50ZW8gPSAwOworCXZtZV9zeW5jX2Rh dGEoKTsKKwlwX3RlbXBlLT5sY3NyLmludGMgPSAweEZGRkZGRkZGOworCXZtZV9zeW5jX2Rh dGEoKTsKKwlwX3RlbXBlLT5sY3NyLmludGVuID0gMHhGRkZGRkZGRjsKKworCS8qCisJICog IE1hcCBhbGwgSW50ZXJydXB0cyB0byBQQ0kgSU5UQQorCSAqLworCXBfdGVtcGUtPmxjc3Iu aW50bTEgPSAwOworCXBfdGVtcGUtPmxjc3IuaW50bTIgPSAwOworCisJdm1lX3N5bmNfZGF0 YSgpOworfQorCisvKgorICogRnVuY3Rpb246ICAgIHRlbXBlX2luaXQoKQorICogRGVzY3Jp cHRpb246IEluaXRpYWxpemUgdGhlIFZNRSBjaGlwIGFzIG5lZWRlZCBieSB0aGUgZHJpdmVy LgorICogICAgUXVpZXNjZSBWTUUgYnJpZGdlLgorICogICAgU2V0dXAgZGVmYXVsdCBkZWNv ZGVycy4KKyAqICAgIENvbm5lY3QgSVJRIGhhbmRsZXIgYW5kIGVuYWJsZSBpbnRlcnJ1cHRz LgorICogICAgQ29uZHVjdCBxdWljayBzYW5pdHkgY2hlY2sgb2YgYnJpZGdlLgorICovCisK K2ludCB0ZW1wZV9pbml0KHZvaWQpCit7CisJdHNpMTQ4X3QgKnBfdGVtcGUgPSAodHNpMTQ4 X3QgKikgdm1lY2hpcF9iYXNlYWRkcjsKKwlpbnQgcmVzdWx0OworCXVuc2lnbmVkIGludCB0 bXA7CisJdW5zaWduZWQgaW50IGNyY3NyX2FkZHI7CisJdTMyIHZtZV9zdGF0X3JlZzsKKy8v CWludCBvdmVyaGVhZF90aWNrczsKKy8vCXVuc2lnbmVkIGludCBpcnFfb3ZlcmhlYWRfc3Rh cnQ7CisKKwl0c2kxNDhfc2h1dGRvd24oKTsKKworCS8qIERldGVybWluZSBzeXNjb24gYW5k IHNsb3QgbnVtYmVyICovCisJdG1wID0gcF90ZW1wZS0+bGNzci52c3RhdDsKKwlpZiAodG1w ICYgMHgxMDApIHsKKwkJdm1lX3N5c2NvbiA9IDE7CisJfSBlbHNlIHsKKwkJdm1lX3N5c2Nv biA9IDA7CisJfQorCisJLyogSW5pdGlhbGl6ZSBjcmNzciBtYXAgKi8KKwlpZiAodm1lX3Ns b3RudW0gIT0gLTEpIHsKKwkJcF90ZW1wZS0+Y3Jjc3IuY2JhciA9IHZtZV9zbG90bnVtIDw8 IDM7CisJCWNyY3NyX2FkZHIgPSB2bWVfc2xvdG51bSAqIDUxMiAqIDEwMjQ7CisJCXBfdGVt cGUtPmxjc3IuY3JvbCA9ICh1bnNpZ25lZCBsb25nKXZtZWNoaXBfaW50ZXJib2FyZF9kYXRh cDsKKwkJcF90ZW1wZS0+bGNzci5jcm91ID0gMDsKKwkJdm1lX3N5bmNfZGF0YSgpOworCQlw X3RlbXBlLT5sY3NyLmNyYXQgPSAweEZGRkZGRkZGOworCX0KKworCXJlc3VsdCA9IHJlcXVl c3RfaXJxKHZtZWNoaXBfaXJxLAorCQkJCXRlbXBlX2lycWhhbmRsZXIsCisJCQkJSVJRRl9T SEFSRUQsCisJCQkJIlZNRUJ1cyAoVHNpMTQ4KSIsIAorCQkJCXZtZWNoaXBfYmFzZWFkZHIp OworCWlmIChyZXN1bHQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAidHNpMTQ4 OiBjYW4ndCBnZXQgYXNzaWduZWQgcGNpIGlycSB2ZWN0b3IgJTAyWFxuIiwKKwkJICAgICAg IHZtZWNoaXBfaXJxKTsKKwkJcmV0dXJuICgwKTsKKwl9CisJLyogRW5hYmxlIERNQSwgbWFp bGJveCwgVklSUSAoc3lzY29uIG9ubHkpICYgTE0gSW50ZXJydXB0cyAqLworCWlmICh2bWVf c3lzY29uKQorCQl0bXAgPSAweDAzRkYyMEZFOworCWVsc2UKKwkJdG1wID0gMHgwM0ZGMjAw MDsKKwlwX3RlbXBlLT5sY3NyLmludGVvID0gdG1wOworCXBfdGVtcGUtPmxjc3IuaW50ZW4g PSB0bXA7CisKKwkvKiBEbyBhIHF1aWNrIHNhbml0eSB0ZXN0IG9mIHRoZSBicmlkZ2UgKi8K KwlpZiAocF90ZW1wZS0+bGNzci5pbnRlbyAhPSB0bXApIHsKKwkJcmV0dXJuICgwKTsKKwl9 CisJLyogU2FuaXR5IGNoZWNrIHJlZ2lzdGVyIGFjY2VzcyAqLworCWZvciAodG1wID0gMTsg dG1wIDwgMHg4MDAwMDAwMDsgdG1wID0gdG1wIDw8IDEpIHsKKwkJcF90ZW1wZS0+bGNzci5y bXdlbiA9IHRtcDsKKwkJcF90ZW1wZS0+bGNzci5ybXdjID0gfnRtcDsKKwkJdm1lX3N5bmNf ZGF0YSgpOworCQlpZiAocF90ZW1wZS0+bGNzci5ybXdlbiAhPSB0bXApIHsKKwkJCXJldHVy biAoMCk7CisJCX0KKwkJaWYgKHBfdGVtcGUtPmxjc3Iucm13YyAhPSB+dG1wKSB7CisJCQly ZXR1cm4gKDApOworCQl9CisJfQorCisJLyogQ2FsY3VsYXRlIElSUSBvdmVyaGVhZCAqLwor I2lmIDAKKwlpcnFfb3ZlcmhlYWRfc3RhcnQgPSBnZXRfdGJsKCk7CisJcF90ZW1wZS0+Z2Nz ci5tYm94WzBdID0gMDsKKwl2bWVfc3luY19kYXRhKCk7CisJZm9yICh0bXAgPSAwOyB0bXAg PCAxMDsgdG1wKyspIHsKKwkJdm1lX3N5bmNfZGF0YSgpOworCX0KKworCW92ZXJoZWFkX3Rp Y2tzID0gdGVtcGVfaXJxX3RpbWUgLSBpcnFfb3ZlcmhlYWRfc3RhcnQ7CisJaWYgKG92ZXJo ZWFkX3RpY2tzID4gMCkgeworCQl2bWVjaGlwX2lycV9vdmVyaGVhZF90aWNrcyA9IG92ZXJo ZWFkX3RpY2tzOworCX0gZWxzZSB7CisJCXZtZWNoaXBfaXJxX292ZXJoZWFkX3RpY2tzID0g MTsKKwl9CisjZW5kaWYKKwl2bWVjaGlwX2lycV9vdmVyaGVhZF90aWNrcyA9IDI7CisKKwkv KiBDbGVhciBib2FyZCBmYWlsLCBhbmQgcG93ZXItdXAgcmVzZXQgKi8KKwl2bWVfc3RhdF9y ZWcgPSBwX3RlbXBlLT5sY3NyLnZzdGF0OworCXZtZV9zdGF0X3JlZyAmPSB+VFNJMTQ4X0xD U1JfVlNUQVRfQlJERkw7CisJdm1lX3N0YXRfcmVnIHw9IFRTSTE0OF9MQ1NSX1ZTVEFUX0NQ VVJTVDsKKwlwX3RlbXBlLT5sY3NyLnZzdGF0ID0gdm1lX3N0YXRfcmVnOworCisJcmV0dXJu ICgxKTsKK30KZGlmZiAtdSAtLW5ldy1maWxlIC0tcmVjdXJzaXZlIGxpbnV4LTIuNi4yOS42 Lm9yaWcvZHJpdmVycy92bWUvdHNpMTQ4LmggbGludXgtMi42LjI5LjYubW9kL2RyaXZlcnMv dm1lL3RzaTE0OC5oCi0tLSBsaW51eC0yLjYuMjkuNi5vcmlnL2RyaXZlcnMvdm1lL3RzaTE0 OC5oCTE5NjktMTItMzEgMTc6MDA6MDAuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYu MjkuNi5tb2QvZHJpdmVycy92bWUvdHNpMTQ4LmgJMjAwOS0wNy0yMSAxMToyODoxOC4wMDAw MDAwMDAgLTA3MDAKQEAgLTAsMCArMSwxMTkwIEBACisvKgorICogdHNpMTQ4LmgKKyAqCisg KiBTdXBwb3J0IGZvciB0aGUgVHVuZHJhIFRTSTE0OCBWTUUgQnJpZGdlIGNoaXAKKyAqCisg KiBBdXRob3JzOiBUb20gQXJtaXN0ZWFkLCBBaml0IFByZW0gCisgKiBDb3B5cmlnaHQgMjAw NC0yMDA3IE1vdG9yb2xhIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVu ZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMg cHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVy IHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFu eSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgVFNJMTQ4X0gKKyNkZWZpbmUgVFNJ MTQ4X0gKKworLyoKKyAqICBEZWZpbmUgdGhlIG51bWJlciBvZiBlYWNoIHRoYXQgdGhlIFRz aTE0OCBzdXBwb3J0cy4KKyAqLworI2RlZmluZSBUU0kxNDhfTUFYX09VVF9XSU5ET1dTICAg ICAgICA4CS8qIE1heCBPdXRib3VuZCBXaW5kb3dzICovCisjZGVmaW5lIFRTSTE0OF9NQVhf SU5fV0lORE9XUyAgICAgICAgIDgJLyogTWF4IEluYm91bmQgV2luZG93cyAqLworI2RlZmlu ZSBUU0kxNDhfTUFYX0RNQV9DTlRSTFMgICAgICAgICAyCS8qIE1heCBETUEgQ29udHJvbGxl cnMgKi8KKyNkZWZpbmUgVFNJMTQ4X01BWF9NQUlMQk9YRVMgICAgICAgICAgNAkvKiBNYXgg TWFpbCBCb3ggcmVnaXN0ZXJzICovCisjZGVmaW5lIFRTSTE0OF9NQVhfU0VNQVBIT1JFUyAg ICAgICAgIDgJLyogTWF4IFNlbWFwaG9yZXMgKi8KKworICAgIC8qCisgICAgICogTWlzYyBT dHJ1Y3RzIHRoYXQgYXJlIHVzZWQgYXMgcGFydCBvZiB0aGUgbGFyZ2VyIHN0cnVjdHMKKyAg ICAgKi8KKworICAgIC8qCisgICAgICogT3V0Ym91bmQgRnVuY3Rpb25zIHVzZWQgaW4gTENT UgorICAgICAqLwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludCBvdHNhdTsJLyog U3RhcnRpbmcgYWRkcmVzcyAqLworCXVuc2lnbmVkIGludCBvdHNhbDsKKwl1bnNpZ25lZCBp bnQgb3RlYXU7CS8qIEVuZGluZyBhZGRyZXNzICovCisJdW5zaWduZWQgaW50IG90ZWFsOwor CXVuc2lnbmVkIGludCBvdG9mdTsJLyogVHJhbnNsYXRpb24gb2Zmc2V0ICovCisJdW5zaWdu ZWQgaW50IG90b2ZsOworCXVuc2lnbmVkIGludCBvdGJzOwkvKiAyZVNTVCBicm9hZGNhc3Qg c2VsZWN0ICovCisJdW5zaWduZWQgaW50IG90YXQ7CS8qIEF0dHJpYnV0ZXMgKi8KK30gdHNp MTQ4T3V0Ym91bmRUcmFuc2xhdGlvbl90OworCisgICAgLyoKKyAgICAgKiBJbmJvdW5kIEZ1 bmN0aW9ucyB1c2VkIGluIExDU1IKKyAgICAgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNp Z25lZCBpbnQgaXRzYXU7CS8qIFN0YXJ0aW5nIGFkZHJlc3MgKi8KKwl1bnNpZ25lZCBpbnQg aXRzYWw7CisJdW5zaWduZWQgaW50IGl0ZWF1OwkvKiBFbmRpbmcgYWRkcmVzcyAqLworCXVu c2lnbmVkIGludCBpdGVhbDsKKwl1bnNpZ25lZCBpbnQgaXRvZnU7CS8qIFRyYW5zbGF0aW9u IG9mZnNldCAqLworCXVuc2lnbmVkIGludCBpdG9mbDsKKwl1bnNpZ25lZCBpbnQgaXRhdDsJ LyogQXR0cmlidXRlcyAqLworCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWQxMFs0XTsKK30gdHNp MTQ4SW5ib3VuZFRyYW5zbGF0aW9uX3Q7CisKKyAgICAvKgorICAgICAqIERNQSBDb250cm9s bGVyIHVzZWQgaW4gTENTUgorICAgICAqLwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVk IGludCBkY3RsOwkvKiBDb250cm9sICovCisJdW5zaWduZWQgaW50IGRzdGE7CS8qIFN0YXR1 cyAqLworCXVuc2lnbmVkIGludCBkY3NhdTsJLyogUk8gQ3VycmVudCBTb3VyY2UgYWRkcmVz cyAqLworCXVuc2lnbmVkIGludCBkY3NhbDsKKwl1bnNpZ25lZCBpbnQgZGNkYXU7CS8qIFJP IEN1cnJlbnQgRGVzdGluYXRpb24gYWRkcmVzcyAqLworCXVuc2lnbmVkIGludCBkY2RhbDsK Kwl1bnNpZ25lZCBpbnQgZGNsYXU7CS8qIFJPIEN1cnJlbnQgTGluayBhZGRyZXNzICovCisJ dW5zaWduZWQgaW50IGRjbGFsOworCXVuc2lnbmVkIGludCBkc2F1OwkvKiBTb3VyY2UgQWRk cmVzcyAqLworCXVuc2lnbmVkIGludCBkc2FsOworCXVuc2lnbmVkIGludCBkZGF1OwkvKiBE ZXN0aW5hdGlvbiBBZGRyZXNzICovCisJdW5zaWduZWQgaW50IGRkYWw7CisJdW5zaWduZWQg aW50IGRzYXQ7CS8qIFNvdXJjZSBhdHRyaWJ1dGVzICovCisJdW5zaWduZWQgaW50IGRkYXQ7 CS8qIERlc3RpbmF0aW9uIGF0dHJpYnV0ZXMgKi8KKwl1bnNpZ25lZCBpbnQgZG5sYXU7CS8q IE5leHQgbGluayBhZGRyZXNzICovCisJdW5zaWduZWQgaW50IGRubGFsOworCXVuc2lnbmVk IGludCBkY250OwkvKiBCeXRlIGNvdW50ICovCisJdW5zaWduZWQgaW50IGRkYnM7CS8qIDJl U1NUIEJyb2FkY2FzdCBzZWxlY3QgKi8KKwl1bnNpZ25lZCBjaGFyIHJlc2VydmVkMTJbMHgz OF07Cit9IHRzaTE0OERtYV90OworCisgICAgLyoKKyAgICAgKiAgTGF5b3V0IG9mIGEgRE1B QyBMaW5rZWQtTGlzdCBEZXNjcmlwdG9yCisgICAgICovCitzdHJ1Y3QgdHNpMTQ4RG1hRGVz Y3JpcHRvciB7CisJdW5zaWduZWQgaW50IGRzYXU7CS8qIFNvdXJjZSBBZGRyZXNzICovCisJ dW5zaWduZWQgaW50IGRzYWw7CisJdW5zaWduZWQgaW50IGRkYXU7CS8qIERlc3RpbmF0aW9u IEFkZHJlc3MgKi8KKwl1bnNpZ25lZCBpbnQgZGRhbDsKKwl1bnNpZ25lZCBpbnQgZHNhdDsJ LyogU291cmNlIGF0dHJpYnV0ZXMgKi8KKwl1bnNpZ25lZCBpbnQgZGRhdDsJLyogRGVzdGlu YXRpb24gYXR0cmlidXRlcyAqLworCXVuc2lnbmVkIGludCBkbmxhdTsJLyogTmV4dCBsaW5r IGFkZHJlc3MgKi8KKwl1bnNpZ25lZCBpbnQgZG5sYWw7CisJdW5zaWduZWQgaW50IGRjbnQ7 CS8qIEJ5dGUgY291bnQgKi8KKwl1bnNpZ25lZCBpbnQgZGRiczsJLyogMmVTU1QgQnJvYWRj YXN0IHNlbGVjdCAqLworfTsKK3R5cGVkZWYgc3RydWN0IHRzaTE0OERtYURlc2NyaXB0b3Ig dHNpMTQ4RG1hRGVzY3JpcHRvcl90OworCisgICAgLyoKKyAgICAgKiBQQ0ZTIENvbmZpZ3Vy YXRpb24gLSBpbmNsdWRlcyBtZW1vcnkgYmFzZSBhZGRyZXNzIHJlZ2lzdGVyIE1CQVIKKyAg ICAgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydCB2ZW5pOwkvKiBQQ0kg aGVhZGVyIFZFTkkvREVWSSAqLworCXVuc2lnbmVkIHNob3J0IGRldmk7CisJdW5zaWduZWQg c2hvcnQgY21tZDsJLyogUENJIGhlYWRlciBDTU1EL1NUQVQgKi8KKwl1bnNpZ25lZCBzaG9y dCBzdGF0OworCXVuc2lnbmVkIGludCByZXZpQW5kQ2xhczsJLyogUENJIGhlYWRlciBSRVZJ L0NMQVMgKi8KKwl1bnNpZ25lZCBjaGFyIGNsc3o7CS8qIFBDSSBoZWFkZXIgQ0xTWi9NTEFU L0hFQUQvcmVzZXJ2ZWQgKi8KKwl1bnNpZ25lZCBjaGFyIG1sYXQ7CisJdW5zaWduZWQgY2hh ciBoZWFkOworCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWQwWzFdOworCXVuc2lnbmVkIGludCBt YmFybDsJLyogUENJIGhlYWRlciBNQkFSTCAqLworCXVuc2lnbmVkIGludCBtYmFydTsJLyog UENJIGhlYWRlciBNQkFSVSAqLworCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWQxWzIwXTsKKwl1 bnNpZ25lZCBzaG9ydCBzdWJ2OwkvKiBQQ0kgaGVhZGVyIFNVQlYvU1VCSSAqLworCXVuc2ln bmVkIHNob3J0IHN1Ymk7CisJdW5zaWduZWQgY2hhciByZXNlcnZlZDJbNF07CS8qIFBDSSBo ZWFkZXIgcmVzZXJ2ZWQgKi8KKwl1bnNpZ25lZCBjaGFyIGNhcHA7CS8qIFBDSSBoZWFkZXIg Q0FQUC9yZXNlcnZlZCAqLworCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWQzWzddOwkvKiBQQ0kg aGVhZGVyIHJlc2VydmVkICovCisJdW5zaWduZWQgY2hhciBpbnRsOwkvKiBQQ0kgaGVhZGVy IElOVEwvSU5UUC9NTkdNL01YTEEgKi8KKwl1bnNpZ25lZCBjaGFyIGludHA7CisJdW5zaWdu ZWQgY2hhciBtbmduOworCXVuc2lnbmVkIGNoYXIgbXhsYTsKKworCS8qCisJICogb2Zmc2V0 IDQwICAwNDAgLSBNU0kgQ2FwcCBNU0lDRC9OQ0FQUC9NU0NJCisJICogb2Zmc2V0IDQ0ICAw NDQgLSBNU0kgQ2FwcCBNU0lBTAorCSAqIG9mZnNldCA0OCAgMDQ4IC0gTVNJIENhcHAgTVNJ QVUKKwkgKiBvZmZzZXQgNEMgIDA0QyAtIE1TSSBDYXBwIE1TSU1EL3Jlc2VydmVkCisJICov CisJdW5zaWduZWQgY2hhciBtc2lDYXBJRDsKKwl1bnNpZ25lZCBjaGFyIG1zaU5leHRDYXBQ dHI7CisJdW5zaWduZWQgc2hvcnQgbXNpQ29udHJvbDsKKwl1bnNpZ25lZCBpbnQgbXNpTXNn QWRkckw7CisJdW5zaWduZWQgaW50IG1zaU1zZ0FkZHJVOworCXVuc2lnbmVkIHNob3J0IG1z aU1zZ0RhdGE7CisJdW5zaWduZWQgY2hhciByZXNlcnZlZDRbMl07CisKKwkvKgorCSAqIG9m ZnNldCA1MCAgMDUwIC0gUENJLVggQ2FwcCBQQ0lYQ0QvTkNBUFAvUENJWENBUAorCSAqIG9m ZnNldCA1NCAgMDU0IC0gUENJLVggQ2FwcCBQQ0lYU1RBVAorCSAqLworCXVuc2lnbmVkIGNo YXIgcGNpeENhcElEOworCXVuc2lnbmVkIGNoYXIgcGNpeE5leHRDYXBQdHI7CisJdW5zaWdu ZWQgc2hvcnQgcGNpeENvbW1hbmQ7CisJdW5zaWduZWQgaW50IHBjaXhTdGF0dXM7CisKKwkv KgorCSAqIG9mZnNldCA1OCAgMDU4ICBSZXNlcnZlZAorCSAqIC4uLgorCSAqIG9mZnNldCBG RiAgMEZGICBSZXNlcnZlZAorCSAqLworCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWQ1WzE2N107 CisKK30gdHNpMTQ4UGNmc190OworCisgICAgLyoKKyAgICAgKiBMQ1NSIGRlZmluaXRpb25z CisgICAgICovCit0eXBlZGVmIHN0cnVjdCB7CisKKwkvKgorCSAqICAgIE91dGJvdW5kIFRy YW5zbGF0aW9ucworCSAqLworCXRzaTE0OE91dGJvdW5kVHJhbnNsYXRpb25fdCBvdXRib3Vu ZFRyYW5zbGF0aW9uW1RTSTE0OF9NQVhfT1VUX1dJTkRPV1NdOworCisJLyoKKwkgKiBWTUVi dXMgaW50ZXJ1cHQgYWNrCisJICogb2Zmc2V0ICAyMDAKKwkgKgorCSAqICAgICAgTm90ZTog ICBFdmVuIHRob3VnaCB0aGUgcmVnaXN0ZXJzIGFyZSBkZWZpbmVkCisJICogICAgICAgICAg ICAgIGFzIDMyLWJpdHMgaW4gdGhlIHNwZWMsIHdlIG9ubHkgd2FudAorCSAqICAgICAgICAg ICAgICB0byBpc3N1ZSA4LWJpdCBJQUNLIGN5Y2xlcyBvbiB0aGUgYnVzLgorCSAqLworCXVu c2lnbmVkIGNoYXIgdmlhY2tbOCAqIDRdOworCisJLyoKKwkgKiBSTVcKKwkgKiBvZmZzZXQg ICAgMjIwCisJICovCisJdW5zaWduZWQgaW50IHJtd2F1OworCXVuc2lnbmVkIGludCBybXdh bDsKKwl1bnNpZ25lZCBpbnQgcm13ZW47CisJdW5zaWduZWQgaW50IHJtd2M7CisJdW5zaWdu ZWQgaW50IHJtd3M7CisKKwkvKgorCSAqIFZNRWJ1cyBjb250cm9sCisJICogb2Zmc2V0ICAg IDIzNAorCSAqLworCXVuc2lnbmVkIGludCB2bWN0cmw7CisJdW5zaWduZWQgaW50IHZjdHJs OworCXVuc2lnbmVkIGludCB2c3RhdDsKKworCS8qCisJICogUENJIHN0YXR1cworCSAqIG9m ZnNldCAgMjQwCisJICovCisJdW5zaWduZWQgaW50IHBzdGF0OworCXVuc2lnbmVkIGNoYXIg cHN0YXRyc3ZkWzB4Y107CisKKwkvKgorCSAqIFZNRSBmaWx0ZXIuCisJICogb2Zmc2V0ICAy NTAKKwkgKi8KKwl1bnNpZ25lZCBpbnQgdm1lZmw7CisJdW5zaWduZWQgY2hhciB2bWVmbHJz dmRbMHhjXTsKKworCS8qCisJICogVk1FIGV4Y2VwdGlvbi4KKwkgKiBvZmZzZXQgIDI2MAor CSAqLworCXVuc2lnbmVkIGludCB2ZWF1OworCXVuc2lnbmVkIGludCB2ZWFsOworCXVuc2ln bmVkIGludCB2ZWF0OworCXVuc2lnbmVkIGNoYXIgdmVhcnN2ZFsweDRdOworCisJLyoKKwkg KiBQQ0kgZXJyb3IKKwkgKiBvZmZzZXQgIDI3MAorCSAqLworCXVuc2lnbmVkIGludCBlZHBh dTsKKwl1bnNpZ25lZCBpbnQgZWRwYWw7CisJdW5zaWduZWQgaW50IGVkcHhhOworCXVuc2ln bmVkIGludCBlZHB4czsKKwl1bnNpZ25lZCBpbnQgZWRwYXQ7CisJdW5zaWduZWQgY2hhciBl ZHBhcnN2ZFsweDdjXTsKKworCS8qCisJICogSW5ib3VuZCBUcmFuc2xhdGlvbnMKKwkgKiBv ZmZzZXQgIDMwMAorCSAqLworCXRzaTE0OEluYm91bmRUcmFuc2xhdGlvbl90IGluYm91bmRU cmFuc2xhdGlvbltUU0kxNDhfTUFYX0lOX1dJTkRPV1NdOworCisJLyoKKwkgKiBJbmJvdW5k IFRyYW5zbGF0aW9uIEdDU1IKKwkgKiBvZmZzZXQgIDQwMCAKKwkgKi8KKwl1bnNpZ25lZCBp bnQgZ2JhdTsKKwl1bnNpZ25lZCBpbnQgZ2JhbDsKKwl1bnNpZ25lZCBpbnQgZ2NzcmF0Owor CisJLyoKKwkgKiBJbmJvdW5kIFRyYW5zbGF0aW9uIENSRworCSAqIG9mZnNldCAgNDBDIAor CSAqLworCXVuc2lnbmVkIGludCBjYmF1OworCXVuc2lnbmVkIGludCBjYmFsOworCXVuc2ln bmVkIGludCBjc3JhdDsKKworCS8qCisJICogSW5ib3VuZCBUcmFuc2xhdGlvbiBDUi9DU1IK KwkgKiAgICAgICAgIENSRworCSAqIG9mZnNldCAgNDE4CisJICovCisJdW5zaWduZWQgaW50 IGNyb3U7CisJdW5zaWduZWQgaW50IGNyb2w7CisJdW5zaWduZWQgaW50IGNyYXQ7CisKKwkv KgorCSAqIEluYm91bmQgVHJhbnNsYXRpb24gTG9jYXRpb24gTW9uaXRvcgorCSAqIG9mZnNl dCAgNDI0IAorCSAqLworCXVuc2lnbmVkIGludCBsbWJhdTsKKwl1bnNpZ25lZCBpbnQgbG1i YWw7CisJdW5zaWduZWQgaW50IGxtYXQ7CisKKwkvKgorCSAqIFZNRWJ1cyBJbnRlcnJ1cHQg Q29udHJvbC4KKwkgKiBvZmZzZXQgIDQzMAorCSAqLworCXVuc2lnbmVkIGludCBiY3U7CisJ dW5zaWduZWQgaW50IGJjbDsKKwl1bnNpZ25lZCBpbnQgYnBndHI7CisJdW5zaWduZWQgaW50 IGJwY3RyOworCXVuc2lnbmVkIGludCB2aWNyOworCisJdW5zaWduZWQgY2hhciB2aWNyc3Zk WzB4NF07CisKKwkvKgorCSAqIExvY2FsIEJ1cyBJbnRlcnJ1cHQgQ29udHJvbC4KKwkgKiBv ZmZzZXQgIDQ0OAorCSAqLworCXVuc2lnbmVkIGludCBpbnRlbjsKKwl1bnNpZ25lZCBpbnQg aW50ZW87CisJdW5zaWduZWQgaW50IGludHM7CisJdW5zaWduZWQgaW50IGludGM7CisJdW5z aWduZWQgaW50IGludG0xOworCXVuc2lnbmVkIGludCBpbnRtMjsKKworCXVuc2lnbmVkIGNo YXIgcmVzZXJ2ZWQ3WzB4YTBdOworCisJLyoKKwkgKiBETUEgQ29udHJvbGxlcnMKKwkgKiBv ZmZzZXQgNTAwCisJICovCisJdHNpMTQ4RG1hX3QgZG1hW1RTSTE0OF9NQVhfRE1BX0NOVFJM U107CisKK30gdHNpMTQ4TGNzcl90OworCisgICAgLyoKKyAgICAgKiBHQ1NSIFJlZ2lzdGVy IEdyb3VwCisgICAgICovCit0eXBlZGVmIHN0cnVjdCB7CisJLyoKKwkgKiBIZWFkZXIKKwkg KiAgICAgICAgIEdDU1IgICAgQ1JHCisJICogb2Zmc2V0ICAgMDAgICAgIDYwMCAtIERFVkkv VkVOSQorCSAqLworCXVuc2lnbmVkIHNob3J0IGRldmk7CisJdW5zaWduZWQgc2hvcnQgdmVu aTsKKworCS8qCisJICogQ29udHJvbAorCSAqICAgICAgICAgR0NTUiAgICBDUkcKKwkgKiBv ZmZzZXQgICAwNCAgICAgNjA0IC0gQ1RSTC9HQS9SRVZJRAorCSAqLworCXVuc2lnbmVkIHNo b3J0IGN0cmw7CisJdW5zaWduZWQgY2hhciBnYTsKKwl1bnNpZ25lZCBjaGFyIHJldmlkOwor CisJLyoKKwkgKiBTZW1hcGhvcmUKKwkgKiAgICAgICAgIEdDU1IgICAgQ1JHCisJICogb2Zm c2V0ICAgMDggICAgIDYwOCAtIFNlbWFwaG9yZTMvMi8xLzAKKwkgKiBvZmZzZXQgICAwQyAg ICAgNjBDIC0gU2VhbXBob3JlNy82LzUvNAorCSAqLworCXVuc2lnbmVkIGNoYXIgc2VtYXBo b3JlW1RTSTE0OF9NQVhfU0VNQVBIT1JFU107CisKKwkvKgorCSAqIE1haWwgQm94CisJICog ICAgICAgICBHQ1NSICAgIENSRworCSAqIG9mZnNldCAgIDEwICAgICA2MTAgLSBNYWlsYm94 MAorCSAqLworCXVuc2lnbmVkIGludCBtYm94W1RTSTE0OF9NQVhfTUFJTEJPWEVTXTsKKwor fSB0c2kxNDhHY3NyX3Q7CisKKyAgICAvKgorICAgICAqIENSL0NTUgorICAgICAqLwordHlw ZWRlZiBzdHJ1Y3QgeworCS8qCisJICogICAgICAgIENSL0NTUiAgIENSRworCSAqIG9mZnNl dCAgN0ZGRjQgICBGRjQgLSBDU1JCQ1IKKwkgKiBvZmZzZXQgIDdGRkY4ICAgRkY4IC0gQ1NS QlNSCisJICogb2Zmc2V0ICA3RkZGQyAgIEZGQyAtIENCQVIKKwkgKi8KKwl1bnNpZ25lZCBp bnQgY3NyYmNyOworCXVuc2lnbmVkIGludCBjc3Jic3I7CisJdW5zaWduZWQgaW50IGNiYXI7 Cit9IHRzaTE0OENyY3NyX3Q7CisKKyAgICAvKgorICAgICAqICBUU0kxNDggQVNJQyByZWdp c3RlciBzdHJ1Y3R1cmUgb3ZlcmxheXMgYW5kIGJpdCBmaWVsZCBkZWZpbml0aW9ucy4KKyAg ICAgKgorICAgICAqICAgICAgTm90ZTogICBUc2kxNDggUmVnaXN0ZXIgR3JvdXAgKENSRykg Y29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZworICAgICAqICAgICAgICAgICAgICBjb21iaW5h dGlvbiBvZiByZWdpc3RlcnM6CisgICAgICogICAgICAgICAgICAgICAgICAgICAgUENGUyAg ICAtIFBDSSBDb25maWd1cmF0aW9uIFNwYWNlIFJlZ2lzdGVycworICAgICAqICAgICAgICAg ICAgICAgICAgICAgIExDU1IgICAgLSBMb2NhbCBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0 ZXJzCisgICAgICogICAgICAgICAgICAgICAgICAgICAgR0NTUiAgICAtIEdsb2JhbCBDb250 cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXJzCisgICAgICogICAgICAgICAgICAgICAgICAgICAg Q1IvQ1NSICAtIFN1YnNldCBvZiBDb25maWd1cmF0aW9uIFJPTSAvCisgICAgICogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlcnMK KyAgICAgKi8KKworICAgIC8qCisgICAgICogIENvbWJpbmVkIFJlZ2lzdGVyIEdyb3VwIChD UkcpCisgICAgICovCit0eXBlZGVmIHN0cnVjdCB7CisJLyoKKwkgKiBQQ0ZTCisJICovCisJ dHNpMTQ4UGNmc190IHBjZnM7CisKKwkvKgorCSAqIExDU1IKKwkgKi8KKwl0c2kxNDhMY3Ny X3QgbGNzcjsKKworCS8qCisJICogR0NTUgorCSAqLworCXRzaTE0OEdjc3JfdCBnY3NyOwor CisJLyoKKwkgKiBGaWxsIFNwYWNlCisJICovCisJdW5zaWduZWQgY2hhciByZXNlcnZlZDlb MHhGRjQgLSAweDYxQyAtIDRdOworCisJLyoKKwkgKiBDUi9DU1IKKwkgKi8KKwl0c2kxNDhD cmNzcl90IGNyY3NyOworCit9IHRzaTE0OF90OworCisgICAgLyoKKyAgICAgKiAgVFNJMTQ4 IFJlZ2lzdGVyIEJpdCBEZWZpbml0aW9ucworICAgICAqLworCisgICAgLyoKKyAgICAgKiAg UEZDUyBSZWdpc3RlciBTZXQKKyAgICAgKi8KKworICAgIC8qCisgICAgICogIENvbW1hbmQv U3RhdHVzIFJlZ2lzdGVycyAoQ1JHICsgJDAwNCkKKyAgICAgKi8KKyNkZWZpbmUgVFNJMTQ4 X1BDRlNfQ01NRF9TRVJSICAgICAgICAgICgxPDw4KQkvKiBTRVJSX0wgb3V0IHBpbiBzc3lz IGVyciAqLworI2RlZmluZSBUU0kxNDhfUENGU19DTU1EX1BFUlIgICAgICAgICAgKDE8PDYp CS8qIFBFUlJfTCBvdXQgcGluICBwYXJpdHkgKi8KKyNkZWZpbmUgVFNJMTQ4X1BDRlNfQ01N RF9NU1RSICAgICAgICAgICgxPDwyKQkvKiBQQ0kgYnVzIG1hc3RlciAqLworI2RlZmluZSBU U0kxNDhfUENGU19DTU1EX01FTVNQICAgICAgICAgKDE8PDEpCS8qIFBDSSBtZW0gc3BhY2Ug YWNjZXNzICAqLworI2RlZmluZSBUU0kxNDhfUENGU19DTU1EX0lPU1AgICAgICAgICAgKDE8 PDApCS8qIFBDSSBJL08gc3BhY2UgZW5hYmxlICovCisKKyNkZWZpbmUgVFNJMTQ4X1BDRlNf U1RBVF9SQ1BWRSAgICAgICAgICgxPDwxNSkJLyogRGV0ZWN0ZWQgUGFyaXR5IEVycm9yICov CisjZGVmaW5lIFRTSTE0OF9QQ0ZTX1NUQVRfU0lHU0UgICAgICAgICAoMTw8MTQpCS8qIFNp Z25hbGxlZCBTeXN0ZW0gRXJyb3IgKi8KKyNkZWZpbmUgVFNJMTQ4X1BDRlNfU1RBVF9SQ1ZN QSAgICAgICAgICgxPDwxMykJLyogUmVjZWl2ZWQgTWFzdGVyIEFib3J0ICovCisjZGVmaW5l IFRTSTE0OF9QQ0ZTX1NUQVRfUkNWVEEgICAgICAgICAoMTw8MTIpCS8qIFJlY2VpdmVkIFRh cmdldCBBYm9ydCAqLworI2RlZmluZSBUU0kxNDhfUENGU19TVEFUX1NJR1RBICAgICAgICAg KDE8PDExKQkvKiBTaWduYWxsZWQgVGFyZ2V0IEFib3J0ICovCisjZGVmaW5lIFRTSTE0OF9Q Q0ZTX1NUQVRfU0VMVElNICAgICAgICAoMzw8OSkJLyogREVMU0VMIFRpbWluZyAqLworI2Rl ZmluZSBUU0kxNDhfUENGU19TVEFUX0RQQVIgICAgICAgICAgKDE8PDgpCS8qIERhdGEgUGFy aXR5IEVyciBSZXBvcnRlZCAqLworI2RlZmluZSBUU0kxNDhfUENGU19TVEFUX0ZBU1QgICAg ICAgICAgKDE8PDcpCS8qIEZhc3QgYmFjay10by1iYWNrIENhcCAqLworI2RlZmluZSBUU0kx NDhfUENGU19TVEFUX1A2Nk0gICAgICAgICAgKDE8PDUpCS8qIDY2IE1IeiBDYXBhYmxlICov CisjZGVmaW5lIFRTSTE0OF9QQ0ZTX1NUQVRfQ0FQTCAgICAgICAgICAoMTw8NCkJLyogQ2Fw YWIgTGlzdCAtIGFkZHJlc3MgJDM0ICovCisKKyAgICAvKgorICAgICAqICBSZXZpc2lvbiBJ RC9DbGFzcyBDb2RlIFJlZ2lzdGVycyAgIChDUkcgKyQwMDgpCisgICAgICovCisjZGVmaW5l IFRTSTE0OF9QQ0ZTX0NMQVNfTSAgICAgICAgICAgICAoMHhGRjw8MjQpCS8qIENsYXNzIElE ICovCisjZGVmaW5lIFRTSTE0OF9QQ0ZTX1NVQkNMQVNfTSAgICAgICAgICAoMHhGRjw8MTYp CS8qIFN1Yi1DbGFzcyBJRCAqLworI2RlZmluZSBUU0kxNDhfUENGU19QUk9HSUZfTSAgICAg ICAgICAgKDB4RkY8PDgpCS8qIFN1Yi1DbGFzcyBJRCAqLworI2RlZmluZSBUU0kxNDhfUENG U19SRVZJRF9NICAgICAgICAgICAgKDB4RkY8PDApCS8qIFJldiBJRCAqLworCisgICAgLyoK KyAgICAgKiBDYWNoZSBMaW5lIFNpemUvIE1hc3RlciBMYXRlbmN5IFRpbWVyLyBIZWFkZXIg VHlwZSBSZWdpc3RlcnMgKENSRyArICQwMEMpCisgICAgICovCisjZGVmaW5lIFRTSTE0OF9Q Q0ZTX0hFQURfTSAgICAgICAgICAgICAoMHhGRjw8MTYpCS8qIE1hc3RlciBMYXQgVGltZXIg Ki8KKyNkZWZpbmUgVFNJMTQ4X1BDRlNfTUxBVF9NICAgICAgICAgICAgICgweEZGPDw4KQkv KiBNYXN0ZXIgTGF0IFRpbWVyICovCisjZGVmaW5lIFRTSTE0OF9QQ0ZTX0NMU1pfTSAgICAg ICAgICAgICAoMHhGRjw8MCkJLyogQ2FjaGUgTGluZSBTaXplICovCisKKyAgICAvKgorICAg ICAqICBNZW1vcnkgQmFzZSBBZGRyZXNzIExvd2VyIFJlZyAoQ1JHICsgJDAxMCkKKyAgICAg Ki8KKyNkZWZpbmUgVFNJMTQ4X1BDRlNfTUJBUkxfQkFTRUxfTSAgICAgICgweEZGRkZGPDwx MikJLyogQmFzZSBBZGRyIExvd2VyIE1hc2sgKi8KKyNkZWZpbmUgVFNJMTQ4X1BDRlNfTUJB UkxfUFJFICAgICAgICAgICgxPDwzKQkvKiBQcmVmZXRjaCAqLworI2RlZmluZSBUU0kxNDhf UENGU19NQkFSTF9NVFlQRV9NICAgICAgKDM8PDEpCS8qIE1lbW9yeSBUeXBlIE1hc2sgKi8K KyNkZWZpbmUgVFNJMTQ4X1BDRlNfTUJBUkxfSU9NRU0gICAgICAgICgxPDwwKQkvKiBJL08g U3BhY2UgSW5kaWNhdG9yICovCisKKyAgICAvKgorICAgICAqICBNZXNzYWdlIFNpZ25hbGVk IEludGVycnVwdCBDYXBhYmlsaXRpZXMgUmVnaXN0ZXIgKENSRyArICQwNDApCisgICAgICov CisjZGVmaW5lIFRTSTE0OF9QQ0ZTX01TSUNBUF82NEJBQyAgICAgICAoMTw8NykJLyogNjQt Yml0IEFkZHJlc3MgQ2FwYWJsZSAqLworI2RlZmluZSBUU0kxNDhfUENGU19NU0lDQVBfTU1F X00gICAgICAgKDc8PDQpCS8qIE11bHRpcGxlIE1zZyBFbmFibGUgTWFzayAqLworI2RlZmlu ZSBUU0kxNDhfUENGU19NU0lDQVBfTU1DX00gICAgICAgKDc8PDEpCS8qIE11bHRpcGxlIE1z ZyBDYXBhYmxlIE1hc2sgKi8KKyNkZWZpbmUgVFNJMTQ4X1BDRlNfTVNJQ0FQX01TSUVOICAg ICAgICgxPDwwKQkvKiBNc2cgc2lnbmFsZWQgSU5UIEVuYWJsZSAqLworCisgICAgLyoKKyAg ICAgKiAgTWVzc2FnZSBBZGRyZXNzIExvd2VyIFJlZ2lzdGVyIChDUkcgKyQwNDQpCisgICAg ICovCisjZGVmaW5lIFRTSTE0OF9QQ0ZTX01TSUFMX00gICAgICAgICAgICAoMHgzRkZGRkZG Rjw8MikJLyogTWFzayAqLworCisgICAgLyoKKyAgICAgKiAgTWVzc2FnZSBEYXRhIFJlZ2lz dGVyIChDUkcgKyA0QykKKyAgICAgKi8KKyNkZWZpbmUgVFNJMTQ4X1BDRlNfTVNJTURfTSAg ICAgICAgICAgICgweEZGRkY8PDApCS8qIE1hc2sgKi8KKworICAgIC8qCisgICAgICogIFBD SS1YIENhcGFiaWxpdGllcyBSZWdpc3RlciAoQ1JHICsgJDA1MCkKKyAgICAgKi8KKyNkZWZp bmUgVFNJMTQ4X1BDRlNfUENJWENBUF9NT1NUX00gICAgICg3PDw0KQkvKiBNYXggb3V0c3Rh bmRpbmcgU3BsaXQgVHJhbiAqLworI2RlZmluZSBUU0kxNDhfUENGU19QQ0lYQ0FQX01NUkJD X00gICAgKDM8PDIpCS8qIE1heCBNZW0gUmVhZCBieXRlIGNudCAqLworI2RlZmluZSBUU0kx NDhfUENGU19QQ0lYQ0FQX0VSTyAgICAgICAgKDE8PDEpCS8qIEVuYWJsZSBSZWxheGVkIE9y ZGVyaW5nICovCisjZGVmaW5lIFRTSTE0OF9QQ0ZTX1BDSVhDQVBfRFBFUkUgICAgICAoMTw8 MCkJLyogRGF0YSBQYXJpdHkgUmVjb3ZlciBFbmFibGUgKi8KKworICAgIC8qCisgICAgICog IFBDSS1YIFN0YXR1cyBSZWdpc3RlciAoQ1JHICskMDU0KQorICAgICAqLworI2RlZmluZSBU U0kxNDhfUENGU19QQ0lYU1RBVF9SU0NFTSAgICAgKDE8PDI5KQkvKiBSZWNpZXZlZCBTcGxp dCBDb21wIEVycm9yICovCisjZGVmaW5lIFRTSTE0OF9QQ0ZTX1BDSVhTVEFUX0RNQ1JTX00g ICAoNzw8MjYpCS8qIG1heCBDdW11bGF0aXZlIFJlYWQgU2l6ZSAqLworI2RlZmluZSBUU0kx NDhfUENGU19QQ0lYU1RBVF9ETU9TVF9NICAgKDc8PDIzKQkvKiBtYXggb3V0c3RhbmRpbmcg U3BsaXQgVHJhbnMgKi8KKyNkZWZpbmUgVFNJMTQ4X1BDRlNfUENJWFNUQVRfRE1NUkNfTSAg ICgzPDwyMSkJLyogbWF4IG1lbSByZWFkIGJ5dGUgY291bnQgKi8KKyNkZWZpbmUgVFNJMTQ4 X1BDRlNfUENJWFNUQVRfREMgICAgICAgICgxPDwyMCkJLyogRGV2aWNlIENvbXBsZXhpdHkg Ki8KKyNkZWZpbmUgVFNJMTQ4X1BDRlNfUENJWFNUQVRfVVNDICAgICAgICgxPDwxOSkJLyog VW5leHBlY3RlZCBTcGxpdCBjb21wICovCisjZGVmaW5lIFRTSTE0OF9QQ0ZTX1BDSVhTVEFU X1NDRCAgICAgICAoMTw8MTgpCS8qIFNwbGl0IGNvbXBsZXRpb24gZGlzY2FyZCAqLworI2Rl ZmluZSBUU0kxNDhfUENGU19QQ0lYU1RBVF8xMzNDICAgICAgKDE8PDE3KQkvKiAxMzNNSHog Y2FwYWJsZSAqLworI2RlZmluZSBUU0kxNDhfUENGU19QQ0lYU1RBVF82NEQgICAgICAgKDE8 PDE2KQkvKiA2NCBiaXQgZGV2aWNlICovCisjZGVmaW5lIFRTSTE0OF9QQ0ZTX1BDSVhTVEFU X0JOX00gICAgICAoMHhGRjw8OCkJLyogQnVzIG51bWJlciAqLworI2RlZmluZSBUU0kxNDhf UENGU19QQ0lYU1RBVF9ETl9NICAgICAgKDB4MUY8PDMpCS8qIERldmljZSBudW1iZXIgKi8K KyNkZWZpbmUgVFNJMTQ4X1BDRlNfUENJWFNUQVRfRk5fTSAgICAgICg3PDwwKQkvKiBGdW5j dGlvbiBOdW1iZXIgKi8KKworICAgIC8qCisgICAgICogIExDU1IgUmVnaXN0ZXJzCisgICAg ICovCisKKyAgICAvKgorICAgICAqICBPdXRib3VuZCBUcmFuc2xhdGlvbiBTdGFydGluZyBB ZGRyZXNzIExvd2VyCisgICAgICovCisjZGVmaW5lIFRTSTE0OF9MQ1NSX09UU0FMX00gICAg ICAgICAgICAoMHhGRkZGPDwxNikJLyogTWFzayAqLworCisgICAgLyoKKyAgICAgKiAgT3V0 Ym91bmQgVHJhbnNsYXRpb24gRW5kaW5nIEFkZHJlc3MgTG93ZXIKKyAgICAgKi8KKyNkZWZp bmUgVFNJMTQ4X0xDU1JfT1RFQUxfTSAgICAgICAgICAgICgweEZGRkY8PDE2KQkvKiBNYXNr ICovCisKKyAgICAvKgorICAgICAqICBPdXRib3VuZCBUcmFuc2xhdGlvbiBPZmZzZXQgTG93 ZXIKKyAgICAgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfT1RPRkZMX00gICAgICAgICAgICgw eEZGRkY8PDE2KQkvKiBNYXNrICovCisKKyAgICAvKgorICAgICAqICBPdXRib3VuZCBUcmFu c2xhdGlvbiAyZVNTVCBCcm9hZGNhc3QgU2VsZWN0CisgICAgICovCisjZGVmaW5lIFRTSTE0 OF9MQ1NSX09UQlNfTSAgICAgICAgICAgICAoMHhGRkZGRjw8MCkJLyogTWFzayAqLworCisg ICAgLyoKKyAgICAgKiAgT3V0Ym91bmQgVHJhbnNsYXRpb24gQXR0cmlidXRlCisgICAgICov CisjZGVmaW5lIFRTSTE0OF9MQ1NSX09UQVRfRU4gICAgICAgICAgICAoMTw8MzEpCS8qIFdp bmRvdyBFbmFibGUgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfT1RBVF9NUlBGRCAgICAgICAg ICgxPDwxOCkJLyogUHJlZmV0Y2ggRGlzYWJsZSAqLworCisjZGVmaW5lIFRTSTE0OF9MQ1NS X09UQVRfUEZTX00gICAgICAgICAoMzw8MTYpCS8qIFByZWZldGNoIFNpemUgTWFzayAqLwor I2RlZmluZSBUU0kxNDhfTENTUl9PVEFUX1BGU18yICAgICAgICAgKDA8PDE2KQkvKiAyIENh Y2hlIExpbmVzIFAgU2l6ZSAqLworI2RlZmluZSBUU0kxNDhfTENTUl9PVEFUX1BGU180ICAg ICAgICAgKDE8PDE2KQkvKiA0IENhY2hlIExpbmVzIFAgU2l6ZSAqLworI2RlZmluZSBUU0kx NDhfTENTUl9PVEFUX1BGU184ICAgICAgICAgKDI8PDE2KQkvKiA4IENhY2hlIExpbmVzIFAg U2l6ZSAqLworI2RlZmluZSBUU0kxNDhfTENTUl9PVEFUX1BGU18xNiAgICAgICAgKDM8PDE2 KQkvKiAxNiBDYWNoZSBMaW5lcyBQIFNpemUgKi8KKworI2RlZmluZSBUU0kxNDhfTENTUl9P VEFUXzJlU1NUTV9NICAgICAgKDM8PDExKQkvKiAyZVNTVCBYZmVyIFJhdGUgTWFzayAqLwor I2RlZmluZSBUU0kxNDhfTENTUl9PVEFUXzJlU1NUTV8xNjAgICAgKDA8PDExKQkvKiAxNjBN Qi9zIDJlU1NUIFhmZXIgUmF0ZSAqLworI2RlZmluZSBUU0kxNDhfTENTUl9PVEFUXzJlU1NU TV8yNjcgICAgKDE8PDExKQkvKiAyNjdNQi9zIDJlU1NUIFhmZXIgUmF0ZSAqLworI2RlZmlu ZSBUU0kxNDhfTENTUl9PVEFUXzJlU1NUTV8zMjAgICAgKDI8PDExKQkvKiAzMjBNQi9zIDJl U1NUIFhmZXIgUmF0ZSAqLworCisjZGVmaW5lIFRTSTE0OF9MQ1NSX09UQVRfVE1fTSAgICAg ICAgICAoNzw8OCkJLyogWGZlciBQcm90b2NvbCBNYXNrICovCisjZGVmaW5lIFRTSTE0OF9M Q1NSX09UQVRfVE1fU0NUICAgICAgICAoMDw8OCkJLyogU0NUIFhmZXIgUHJvdG9jb2wgKi8K KyNkZWZpbmUgVFNJMTQ4X0xDU1JfT1RBVF9UTV9CTFQgICAgICAgICgxPDw4KQkvKiBCTFQg WGZlciBQcm90b2NvbCAqLworI2RlZmluZSBUU0kxNDhfTENTUl9PVEFUX1RNX01CTFQgICAg ICAgKDI8PDgpCS8qIE1CTFQgWGZlciBQcm90b2NvbCAqLworI2RlZmluZSBUU0kxNDhfTENT Ul9PVEFUX1RNXzJlVk1FICAgICAgKDM8PDgpCS8qIDJlVk1FIFhmZXIgUHJvdG9jb2wgKi8K KyNkZWZpbmUgVFNJMTQ4X0xDU1JfT1RBVF9UTV8yZVNTVCAgICAgICg0PDw4KQkvKiAyZVNT VCBYZmVyIFByb3RvY29sICovCisjZGVmaW5lIFRTSTE0OF9MQ1NSX09UQVRfVE1fMmVTU1RC ICAgICAoNTw8OCkJLyogMmVTU1QgQmNhc3QgWGZlciBQcm90b2NvbCAqLworCisjZGVmaW5l IFRTSTE0OF9MQ1NSX09UQVRfREJXX00gICAgICAgICAoMzw8NikJLyogTWF4IERhdGEgV2lk dGggKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfT1RBVF9EQldfMTYgICAgICAgICgwPDw2KQkv KiAxNi1iaXQgRGF0YSBXaWR0aCAqLworI2RlZmluZSBUU0kxNDhfTENTUl9PVEFUX0RCV18z MiAgICAgICAgKDE8PDYpCS8qIDMyLWJpdCBEYXRhIFdpZHRoICovCisKKyNkZWZpbmUgVFNJ MTQ4X0xDU1JfT1RBVF9TVVAgICAgICAgICAgICgxPDw1KQkvKiBTdXBlcnZpc29yeSBBY2Nl c3MgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfT1RBVF9QR00gICAgICAgICAgICgxPDw0KQkv KiBQcm9ncmFtIEFjY2VzcyAqLworCisjZGVmaW5lIFRTSTE0OF9MQ1NSX09UQVRfQU1PREVf TSAgICAgICAoMHhmPDwwKQkvKiBBZGRyZXNzIE1vZGUgTWFzayAqLworI2RlZmluZSBUU0kx NDhfTENTUl9PVEFUX0FNT0RFX0ExNiAgICAgKDA8PDApCS8qIEExNiBBZGRyZXNzIFNwYWNl ICovCisjZGVmaW5lIFRTSTE0OF9MQ1NSX09UQVRfQU1PREVfQTI0ICAgICAoMTw8MCkJLyog QTI0IEFkZHJlc3MgU3BhY2UgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfT1RBVF9BTU9ERV9B MzIgICAgICgyPDwwKQkvKiBBMzIgQWRkcmVzcyBTcGFjZSAqLworI2RlZmluZSBUU0kxNDhf TENTUl9PVEFUX0FNT0RFX0E2NCAgICAgKDQ8PDApCS8qIEEzMiBBZGRyZXNzIFNwYWNlICov CisjZGVmaW5lIFRTSTE0OF9MQ1NSX09UQVRfQU1PREVfQ1JDU1IgICAoNTw8MCkJLyogQ1Iv Q1NSIEFkZHJlc3MgU3BhY2UgKi8KKworICAgIC8qCisgICAgICogIFZNRSBNYXN0ZXIgQ29u dHJvbCBSZWdpc3RlciAgQ1JHKyQyMzQKKyAgICAgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1Jf Vk1DVFJMX1ZTQSAgICAgICAgICgxPDwyNykJLyogVk1FYnVzIFN0b3AgQWNrICovCisjZGVm aW5lIFRTSTE0OF9MQ1NSX1ZNQ1RSTF9WUyAgICAgICAgICAoMTw8MjYpCS8qIFZNRWJ1cyBT dG9wICovCisjZGVmaW5lIFRTSTE0OF9MQ1NSX1ZNQ1RSTF9ESEIgICAgICAgICAoMTw8MjUp CS8qIERldmljZSBIYXMgQnVzICovCisjZGVmaW5lIFRTSTE0OF9MQ1NSX1ZNQ1RSTF9EV0Ig ICAgICAgICAoMTw8MjQpCS8qIERldmljZSBXYW50cyBCdXMgKi8KKworI2RlZmluZSBUU0kx NDhfTENTUl9WTUNUUkxfUk1XRU4gICAgICAgKDE8PDIwKQkvKiBSTVcgRW5hYmxlICovCisK KyNkZWZpbmUgVFNJMTQ4X0xDU1JfVk1DVFJMX0FUT19NICAgICAgICg3PDwxNikJLyogTWFz dGVyIEFjY2VzcyBUaW1lLW91dCBNYXNrICovCisjZGVmaW5lIFRTSTE0OF9MQ1NSX1ZNQ1RS TF9BVE9fMzIgICAgICAoMDw8MTYpCS8qIDMyIHVzICovCisjZGVmaW5lIFRTSTE0OF9MQ1NS X1ZNQ1RSTF9BVE9fMTI4ICAgICAoMTw8MTYpCS8qIDEyOCB1cyAqLworI2RlZmluZSBUU0kx NDhfTENTUl9WTUNUUkxfQVRPXzUxMiAgICAgKDI8PDE2KQkvKiA1MTIgdXMgKi8KKyNkZWZp bmUgVFNJMTQ4X0xDU1JfVk1DVFJMX0FUT18yTSAgICAgICgzPDwxNikJLyogMiBtcyAqLwor I2RlZmluZSBUU0kxNDhfTENTUl9WTUNUUkxfQVRPXzhNICAgICAgKDQ8PDE2KQkvKiA4IG1z ICovCisjZGVmaW5lIFRTSTE0OF9MQ1NSX1ZNQ1RSTF9BVE9fMzJNICAgICAoNTw8MTYpCS8q IDMyIG1zICovCisjZGVmaW5lIFRTSTE0OF9MQ1NSX1ZNQ1RSTF9BVE9fMTI4TSAgICAoNjw8 MTYpCS8qIDEyOCBtcyAqLworI2RlZmluZSBUU0kxNDhfTENTUl9WTUNUUkxfQVRPX0RJUyAg ICAgKDc8PDE2KQkvKiBEaXNhYmxlZCAqLworCisjZGVmaW5lIFRTSTE0OF9MQ1NSX1ZNQ1RS TF9WVE9GRl9NICAgICAoNzw8MTIpCS8qIFZNRWJ1cyBNYXN0ZXIgVGltZSBvZmYgKi8KKyNk ZWZpbmUgVFNJMTQ4X0xDU1JfVk1DVFJMX1ZUT0ZGXzAgICAgICgwPDwxMikJLyogMHVzICov CisjZGVmaW5lIFRTSTE0OF9MQ1NSX1ZNQ1RSTF9WVE9GRl8xICAgICAoMTw8MTIpCS8qIDF1 cyAqLworI2RlZmluZSBUU0kxNDhfTENTUl9WTUNUUkxfVlRPRkZfMiAgICAgKDI8PDEyKQkv KiAydXMgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfVk1DVFJMX1ZUT0ZGXzQgICAgICgzPDwx MikJLyogNHVzICovCisjZGVmaW5lIFRTSTE0OF9MQ1NSX1ZNQ1RSTF9WVE9GRl84ICAgICAo NDw8MTIpCS8qIDh1cyAqLworI2RlZmluZSBUU0kxNDhfTENTUl9WTUNUUkxfVlRPRkZfMTYg ICAgKDU8PDEyKQkvKiAxNnVzICovCisjZGVmaW5lIFRTSTE0OF9MQ1NSX1ZNQ1RSTF9WVE9G Rl8zMiAgICAoNjw8MTIpCS8qIDMydXMgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfVk1DVFJM X1ZUT0ZGXzY0ICAgICg3PDwxMikJLyogNjR1cyAqLworCisjZGVmaW5lIFRTSTE0OF9MQ1NS X1ZNQ1RSTF9WVE9OX00gICAgICAoNzw8OCkJLyogVk1FYnVzIE1hc3RlciBUaW1lIE9uICov CisjZGVmaW5lIFRTSTE0OF9MQ1NSX1ZNQ1RSTF9WVE9OXzQgICAgICAoMDw8OCkJLyogOHVz ICovCisjZGVmaW5lIFRTSTE0OF9MQ1NSX1ZNQ1RSTF9WVE9OXzggICAgICAoMTw8OCkJLyog OHVzICovCisjZGVmaW5lIFRTSTE0OF9MQ1NSX1ZNQ1RSTF9WVE9OXzE2ICAgICAoMjw8OCkJ LyogMTZ1cyAqLworI2RlZmluZSBUU0kxNDhfTENTUl9WTUNUUkxfVlRPTl8zMiAgICAgKDM8 PDgpCS8qIDMydXMgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfVk1DVFJMX1ZUT05fNjQgICAg ICg0PDw4KQkvKiA2NHVzICovCisjZGVmaW5lIFRTSTE0OF9MQ1NSX1ZNQ1RSTF9WVE9OXzEy OCAgICAoNTw8OCkJLyogMTI4dXMgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfVk1DVFJMX1ZU T05fMjU2ICAgICg2PDw4KQkvKiAyNTZ1cyAqLworI2RlZmluZSBUU0kxNDhfTENTUl9WTUNU UkxfVlRPTl81MTIgICAgKDc8PDgpCS8qIDUxMnVzICovCisKKyNkZWZpbmUgVFNJMTQ4X0xD U1JfVk1DVFJMX1ZSRUxfTSAgICAgICgzPDwzKQkvKiBWTUVidXMgTWFzdGVyIFJlbCBNb2Rl IE1hc2sgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfVk1DVFJMX1ZSRUxfVF9EICAgICgwPDwz KQkvKiBUaW1lIG9uIG9yIERvbmUgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfVk1DVFJMX1ZS RUxfVF9SX0QgICgxPDwzKQkvKiBUaW1lIG9uIGFuZCBSRVEgb3IgRG9uZSAqLworI2RlZmlu ZSBUU0kxNDhfTENTUl9WTUNUUkxfVlJFTF9UX0JfRCAgKDI8PDMpCS8qIFRpbWUgb24gYW5k IEJDTFIgb3IgRG9uZSAqLworI2RlZmluZSBUU0kxNDhfTENTUl9WTUNUUkxfVlJFTF9UX0Rf UiAgKDM8PDMpCS8qIFRpbWUgb24gb3IgRG9uZSBhbmQgUkVRICovCisKKyNkZWZpbmUgVFNJ MTQ4X0xDU1JfVk1DVFJMX1ZGQUlSICAgICAgICgxPDwyKQkvKiBWTUVidXMgTWFzdGVyIEZh aXIgTW9kZSAqLworI2RlZmluZSBUU0kxNDhfTENTUl9WTUNUUkxfVlJFUUxfTSAgICAgKDM8 PDApCS8qIFZNRWJ1cyBNYXN0ZXIgUmVxIExldmVsIE1hc2sgKi8KKworICAgIC8qCisgICAg ICogIFZNRWJ1cyBDb250cm9sIFJlZ2lzdGVyIENSRyskMjM4CisgICAgICovCisjZGVmaW5l IFRTSTE0OF9MQ1NSX1ZDVFJMX0xSRSAgICAgICAgICAoMTw8MzEpCS8qIExhdGUgUmV0cnkg RW5hYmxlICovCisKKyNkZWZpbmUgVFNJMTQ4X0xDU1JfVkNUUkxfRExUX00gICAgICAgICgw eEY8PDI0KQkvKiBEZWFkbG9jayBUaW1lciAqLworI2RlZmluZSBUU0kxNDhfTENTUl9WQ1RS TF9ETFRfT0ZGICAgICAgKDA8PDI0KQkvKiBEZWFkbG9jayBUaW1lciBPZmYgKi8KKyNkZWZp bmUgVFNJMTQ4X0xDU1JfVkNUUkxfRExUXzE2ICAgICAgICgxPDwyNCkJLyogMTYgVkNMS1Mg Ki8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfVkNUUkxfRExUXzMyICAgICAgICgyPDwyNCkJLyog MzIgVkNMS1MgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfVkNUUkxfRExUXzY0ICAgICAgICgz PDwyNCkJLyogNjQgVkNMS1MgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfVkNUUkxfRExUXzEy OCAgICAgICg0PDwyNCkJLyogMTI4IFZDTEtTICovCisjZGVmaW5lIFRTSTE0OF9MQ1NSX1ZD VFJMX0RMVF8yNTYgICAgICAoNTw8MjQpCS8qIDI1NiBWQ0xLUyAqLworI2RlZmluZSBUU0kx NDhfTENTUl9WQ1RSTF9ETFRfNTEyICAgICAgKDY8PDI0KQkvKiA1MTIgVkNMS1MgKi8KKyNk ZWZpbmUgVFNJMTQ4X0xDU1JfVkNUUkxfRExUXzEwMjQgICAgICg3PDwyNCkJLyogMTAyNCBW Q0xLUyAqLworI2RlZmluZSBUU0kxNDhfTENTUl9WQ1RSTF9ETFRfMjA0OCAgICAgKDg8PDI0 KQkvKiAyMDQ4IFZDTEtTICovCisjZGVmaW5lIFRTSTE0OF9MQ1NSX1ZDVFJMX0RMVF80MDk2 ICAgICAoOTw8MjQpCS8qIDQwOTYgVkNMS1MgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfVkNU UkxfRExUXzgxOTIgICAgICgweEE8PDI0KQkvKiA4MTkyIFZDTEtTICovCisjZGVmaW5lIFRT STE0OF9MQ1NSX1ZDVFJMX0RMVF8xNjM4NCAgICAoMHhCPDwyNCkJLyogMTYzODQgVkNMS1Mg Ki8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfVkNUUkxfRExUXzMyNzY4ICAgICgweEM8PDI0KQkv KiAzMjc2OCBWQ0xLUyAqLworCisjZGVmaW5lIFRTSTE0OF9MQ1NSX1ZDVFJMX05FUkJCICAg ICAgICAoMTw8MjApCS8qIE5vIEVhcmx5IFJlbGVhc2Ugb2YgQnVzIEJ1c3kgKi8KKworI2Rl ZmluZSBUU0kxNDhfTENTUl9WQ1RSTF9TUkVTRVQgICAgICAgKDE8PDE3KQkvKiBTeXN0ZW0g UmVzZXQgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfVkNUUkxfTFJFU0VUICAgICAgICgxPDwx NikJLyogTG9jYWwgUmVzZXQgKi8KKworI2RlZmluZSBUU0kxNDhfTENTUl9WQ1RSTF9TRkFJ TEFJICAgICAgKDE8PDE1KQkvKiBTWVNGQUlMIEF1dG8gU2xvdCBJRCAqLworI2RlZmluZSBU U0kxNDhfTENTUl9WQ1RSTF9CSURfTSAgICAgICAgKDB4MUY8PDgpCS8qIEJyb2FkY2FzdCBJ RCBNYXNrICovCisKKyNkZWZpbmUgVFNJMTQ4X0xDU1JfVkNUUkxfQVRPRU4gICAgICAgICgx PDw3KQkvKiBBcmJpdGVyIFRpbWUtb3V0IEVuYWJsZSAqLworI2RlZmluZSBUU0kxNDhfTENT Ul9WQ1RSTF9ST0JJTiAgICAgICAgKDE8PDYpCS8qIFZNRWJ1cyBSb3VuZCBSb2JpbiAqLwor CisjZGVmaW5lIFRTSTE0OF9MQ1NSX1ZDVFJMX0dUT19NICAgICAgICAoNzw8MCkJLyogVk1F YnVzIEdsb2JhbCBUaW1lLW91dCBNYXNrICovCisjZGVmaW5lIFRTSTE0OF9MQ1NSX1ZDVFJM X0dUT184CSAgICAgICgwPDwwKQkvKiA4IHVzICovCisjZGVmaW5lIFRTSTE0OF9MQ1NSX1ZD VFJMX0dUT18xNgkgICAgICAoMTw8MCkJLyogMTYgdXMgKi8KKyNkZWZpbmUgVFNJMTQ4X0xD U1JfVkNUUkxfR1RPXzMyCSAgICAgICgyPDwwKQkvKiAzMiB1cyAqLworI2RlZmluZSBUU0kx NDhfTENTUl9WQ1RSTF9HVE9fNjQJICAgICAgKDM8PDApCS8qIDY0IHVzICovCisjZGVmaW5l IFRTSTE0OF9MQ1NSX1ZDVFJMX0dUT18xMjggICAgICAoNDw8MCkJLyogMTI4IHVzICovCisj ZGVmaW5lIFRTSTE0OF9MQ1NSX1ZDVFJMX0dUT18yNTYgICAgICAoNTw8MCkJLyogMjU2IHVz ICovCisjZGVmaW5lIFRTSTE0OF9MQ1NSX1ZDVFJMX0dUT181MTIgICAgICAoNjw8MCkJLyog NTEyIHVzICovCisjZGVmaW5lIFRTSTE0OF9MQ1NSX1ZDVFJMX0dUT19ESVMgICAgICAoNzw8 MCkJLyogRGlzYWJsZWQgKi8KKworICAgIC8qCisgICAgICogIFZNRWJ1cyBTdGF0dXMgUmVn aXN0ZXIgIENSRyArICQyM0MKKyAgICAgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfVlNUQVRf Q1BVUlNUICAgICAgICgxPDwxNSkJLyogQ2xlYXIgcG93ZXIgdXAgcmVzZXQgKi8KKyNkZWZp bmUgVFNJMTQ4X0xDU1JfVlNUQVRfQlJERkwgICAgICAgICgxPDwxNCkJLyogQm9hcmQgZmFp bCAqLworI2RlZmluZSBUU0kxNDhfTENTUl9WU1RBVF9QVVJTVFMgICAgICAgKDE8PDEyKQkv KiBQb3dlciB1cCByZXNldCBzdGF0dXMgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfVlNUQVRf QkRGQUlMUyAgICAgICgxPDwxMSkJLyogQm9hcmQgRmFpbCBTdGF0dXMgKi8KKyNkZWZpbmUg VFNJMTQ4X0xDU1JfVlNUQVRfU1lTRkFJTFMgICAgICgxPDwxMCkJLyogU3lzdGVtIEZhaWwg U3RhdHVzICovCisjZGVmaW5lIFRTSTE0OF9MQ1NSX1ZTVEFUX0FDRkFJTFMgICAgICAoMTw8 OSkJLyogQUMgZmFpbCBzdGF0dXMgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfVlNUQVRfU0NP TlMgICAgICAgICgxPDw4KQkvKiBTeXN0ZW0gQ29udCBTdGF0dXMgKi8KKyNkZWZpbmUgVFNJ MTQ4X0xDU1JfVlNUQVRfR0FQICAgICAgICAgICgxPDw1KQkvKiBHZW9ncmFwaGljIEFkZHIg UGFyaXR5ICovCisjZGVmaW5lIFRTSTE0OF9MQ1NSX1ZTVEFUX0dBX00gICAgICAgICAoMHgx Rjw8MCkJLyogR2VvZ3JhcGhpYyBBZGRyIE1hc2sgKi8KKworICAgIC8qCisgICAgICogIFBD SSBDb25maWd1cmF0aW9uIFN0YXR1cyBSZWdpc3RlciBDUkcrJDI0MAorICAgICAqLworI2Rl ZmluZSBUU0kxNDhfTENTUl9QU1RBVF9SRVE2NFMgICAgICAgKDE8PDYpCS8qIFJlcXVlc3Qg NjQgc3RhdHVzIHNldCAqLworI2RlZmluZSBUU0kxNDhfTENTUl9QU1RBVF9NNjZFTlMgICAg ICAgKDE8PDUpCS8qIE02NkVOUyA2Nk1oeiBlbmFibGUgKi8KKyNkZWZpbmUgVFNJMTQ4X0xD U1JfUFNUQVRfRlJBTUVTICAgICAgICgxPDw0KQkvKiBGcmFtZSBTdGF0dXMgKi8KKyNkZWZp bmUgVFNJMTQ4X0xDU1JfUFNUQVRfSVJEWVMgICAgICAgICgxPDwzKQkvKiBJUkRZIHN0YXR1 cyAqLworI2RlZmluZSBUU0kxNDhfTENTUl9QU1RBVF9ERVZTRUxTICAgICAgKDE8PDIpCS8q IERFVkwgc3RhdHVzICovCisjZGVmaW5lIFRTSTE0OF9MQ1NSX1BTVEFUX1NUT1BTICAgICAg ICAoMTw8MSkJLyogU1RPUCBzdGF0dXMgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfUFNUQVRf VFJEWVMgICAgICAgICgxPDwwKQkvKiBUUkRZIHN0YXR1cyAqLworCisgICAgLyoKKyAgICAg KiAgSW5ib3VuZCBUcmFuc2xhdGlvbiBTdGFydGluZyBBZGRyZXNzIExvd2VyCisgICAgICov CisjZGVmaW5lIFRTSTE0OF9MQ1NSX0lUU0FMNjQzMl9NICAgICAgICAoMHhGRkZGPDwxNikJ LyogTWFzayAqLworI2RlZmluZSBUU0kxNDhfTENTUl9JVFNBTDI0X00gICAgICAgICAgKDB4 MDBGRkY8PDEyKQkvKiBNYXNrICovCisjZGVmaW5lIFRTSTE0OF9MQ1NSX0lUU0FMMTZfTSAg ICAgICAgICAoMHgwMDAwRkZGPDw0KQkvKiBNYXNrICovCisKKyAgICAvKgorICAgICAqICBJ bmJvdW5kIFRyYW5zbGF0aW9uIEVuZGluZyBBZGRyZXNzIExvd2VyCisgICAgICovCisjZGVm aW5lIFRTSTE0OF9MQ1NSX0lURUFMNjQzMl9NICAgICAgICAoMHhGRkZGPDwxNikJLyogTWFz ayAqLworI2RlZmluZSBUU0kxNDhfTENTUl9JVEVBTDI0X00gICAgICAgICAgKDB4MDBGRkY8 PDEyKQkvKiBNYXNrICovCisjZGVmaW5lIFRTSTE0OF9MQ1NSX0lURUFMMTZfTSAgICAgICAg ICAoMHgwMDAwRkZGPDw0KQkvKiBNYXNrICovCisKKyAgICAvKgorICAgICAqICBJbmJvdW5k IFRyYW5zbGF0aW9uIE9mZnNldCBMb3dlcgorICAgICAqLworI2RlZmluZSBUU0kxNDhfTENT Ul9JVE9GRkw2NDMyX00gICAgICAgKDB4RkZGRjw8MTYpCS8qIE1hc2sgKi8KKyNkZWZpbmUg VFNJMTQ4X0xDU1JfSVRPRkZMMjRfTSAgICAgICAgICgweEZGRkZGPDwxMikJLyogTWFzayAq LworI2RlZmluZSBUU0kxNDhfTENTUl9JVE9GRkwxNl9NICAgICAgICAgKDB4RkZGRkZGRjw8 NCkJLyogTWFzayAqLworCisgICAgLyoKKyAgICAgKiAgSW5ib3VuZCBUcmFuc2xhdGlvbiBB dHRyaWJ1dGUKKyAgICAgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfSVRBVF9FTiAgICAgICAg ICAgICgxPDwzMSkJLyogV2luZG93IEVuYWJsZSAqLworI2RlZmluZSBUU0kxNDhfTENTUl9J VEFUX1RIICAgICAgICAgICAgKDE8PDE4KQkvKiBQcmVmZXRjaCBUaHJlc2hvbGQgKi8KKwor I2RlZmluZSBUU0kxNDhfTENTUl9JVEFUX1ZGU19NICAgICAgICAgKDM8PDE2KQkvKiBWaXJ0 dWFsIEZJRk8gU2l6ZSBNYXNrICovCisjZGVmaW5lIFRTSTE0OF9MQ1NSX0lUQVRfVkZTXzY0 ICAgICAgICAoMDw8MTYpCS8qIDY0IGJ5dGVzIFZpcnR1YWwgRklGTyBTaXplICovCisjZGVm aW5lIFRTSTE0OF9MQ1NSX0lUQVRfVkZTXzEyOCAgICAgICAoMTw8MTYpCS8qIDEyOCBieXRl cyBWaXJ0dWFsIEZJRk8gU3ogKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfSVRBVF9WRlNfMjU2 ICAgICAgICgyPDwxNikJLyogMjU2IGJ5dGVzIFZpcnR1YWwgRklGTyBTeiAqLworI2RlZmlu ZSBUU0kxNDhfTENTUl9JVEFUX1ZGU181MTIgICAgICAgKDM8PDE2KQkvKiA1MTIgYnl0ZXMg VmlydHVhbCBGSUZPIFN6ICovCisKKyNkZWZpbmUgVFNJMTQ4X0xDU1JfSVRBVF8yZVNTVE1f TSAgICAgICg3PDwxMikJLyogMmVTU1QgWGZlciBSYXRlIE1hc2sgKi8KKyNkZWZpbmUgVFNJ MTQ4X0xDU1JfSVRBVF8yZVNTVE1fMTYwICAgICgwPDwxMikJLyogMTYwTUIvcyAyZVNTVCBY ZmVyIFJhdGUgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfSVRBVF8yZVNTVE1fMjY3ICAgICgx PDwxMikJLyogMjY3TUIvcyAyZVNTVCBYZmVyIFJhdGUgKi8KKyNkZWZpbmUgVFNJMTQ4X0xD U1JfSVRBVF8yZVNTVE1fMzIwICAgICgyPDwxMikJLyogMzIwTUIvcyAyZVNTVCBYZmVyIFJh dGUgKi8KKworI2RlZmluZSBUU0kxNDhfTENTUl9JVEFUXzJlU1NUQiAgICAgICAgKDE8PDEx KQkvKiAyZVNTVCBCY2FzdCBYZmVyIFByb3RvY29sICovCisjZGVmaW5lIFRTSTE0OF9MQ1NS X0lUQVRfMmVTU1QgICAgICAgICAoMTw8MTApCS8qIDJlU1NUIFhmZXIgUHJvdG9jb2wgKi8K KyNkZWZpbmUgVFNJMTQ4X0xDU1JfSVRBVF8yZVZNRSAgICAgICAgICgxPDw5KQkvKiAyZVZN RSBYZmVyIFByb3RvY29sICovCisjZGVmaW5lIFRTSTE0OF9MQ1NSX0lUQVRfTUJMVCAgICAg ICAgICAoMTw8OCkJLyogTUJMVCBYZmVyIFByb3RvY29sICovCisjZGVmaW5lIFRTSTE0OF9M Q1NSX0lUQVRfQkxUICAgICAgICAgICAoMTw8NykJLyogQkxUIFhmZXIgUHJvdG9jb2wgKi8K KworI2RlZmluZSBUU0kxNDhfTENTUl9JVEFUX0FTX00gICAgICAgICAgKDc8PDQpCS8qIEFk ZHJlc3MgU3BhY2UgTWFzayAqLworI2RlZmluZSBUU0kxNDhfTENTUl9JVEFUX0FTX0ExNiAg ICAgICAgKDA8PDQpCS8qIEExNiBBZGRyZXNzIFNwYWNlICovCisjZGVmaW5lIFRTSTE0OF9M Q1NSX0lUQVRfQVNfQTI0ICAgICAgICAoMTw8NCkJLyogQTI0IEFkZHJlc3MgU3BhY2UgKi8K KyNkZWZpbmUgVFNJMTQ4X0xDU1JfSVRBVF9BU19BMzIgICAgICAgICgyPDw0KQkvKiBBMzIg QWRkcmVzcyBTcGFjZSAqLworI2RlZmluZSBUU0kxNDhfTENTUl9JVEFUX0FTX0E2NCAgICAg ICAgKDQ8PDQpCS8qIEE2NCBBZGRyZXNzIFNwYWNlICovCisKKyNkZWZpbmUgVFNJMTQ4X0xD U1JfSVRBVF9TVVBSICAgICAgICAgICgxPDwzKQkvKiBTdXBlcnZpc29yIEFjY2VzcyAqLwor I2RlZmluZSBUU0kxNDhfTENTUl9JVEFUX05QUklWICAgICAgICAgKDE8PDIpCS8qIE5vbi1Q cml2IChVc2VyKSBBY2Nlc3MgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfSVRBVF9QR00gICAg ICAgICAgICgxPDwxKQkvKiBQcm9ncmFtIEFjY2VzcyAqLworI2RlZmluZSBUU0kxNDhfTENT Ul9JVEFUX0RBVEEgICAgICAgICAgKDE8PDApCS8qIERhdGEgQWNjZXNzICovCisKKyAgICAv KgorICAgICAqICBHQ1NSIEJhc2UgQWRkcmVzcyBMb3dlciBBZGRyZXNzICBDUkcgKyQ0MDQK KyAgICAgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfR0JBTF9NICAgICAgICAgICAgICgweDdG RkZGRkY8PDUpCS8qIE1hc2sgKi8KKworICAgIC8qCisgICAgICogIEdDU1IgQXR0cmlidXRl IFJlZ2lzdGVyIENSRyArICQ0MDgKKyAgICAgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfR0NT UkFUX0VOICAgICAgICAgICgxPDw3KQkvKiBFbmFibGUgYWNjZXNzIHRvIEdDU1IgKi8KKwor I2RlZmluZSBUU0kxNDhfTENTUl9HQ1NSQVRfQVNfTSAgICAgICAgKDc8PDQpCS8qIEFkZHJl c3MgU3BhY2UgTWFzayAqLworI2RlZmluZSBUU0kxNDhfTENTUl9HQ1NSQVRfQVNfMTYgICAg ICAgKDA8PDQpCS8qIEFkZHJlc3MgU3BhY2UgMTYgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1Jf R0NTUkFUX0FTXzI0ICAgICAgICgxPDw0KQkvKiBBZGRyZXNzIFNwYWNlIDI0ICovCisjZGVm aW5lIFRTSTE0OF9MQ1NSX0dDU1JBVF9BU18zMiAgICAgICAoMjw8NCkJLyogQWRkcmVzcyBT cGFjZSAzMiAqLworI2RlZmluZSBUU0kxNDhfTENTUl9HQ1NSQVRfQVNfNjQgICAgICAgKDQ8 PDQpCS8qIEFkZHJlc3MgU3BhY2UgNjQgKi8KKworI2RlZmluZSBUU0kxNDhfTENTUl9HQ1NS QVRfU1VQUiAgICAgICAgKDE8PDMpCS8qIFN1cCBzZXQgLUdDU1IgZGVjb2RlciAqLworI2Rl ZmluZSBUU0kxNDhfTENTUl9HQ1NSQVRfTlBSSVYgICAgICAgKDE8PDIpCS8qIE5vbi1Qcml2 bGlnZWQgc2V0IC0gQ0dTUiAqLworI2RlZmluZSBUU0kxNDhfTENTUl9HQ1NSQVRfUEdNICAg ICAgICAgKDE8PDEpCS8qIFByb2dyYW0gc2V0IC0gR0NTUiBkZWNvZGVyICovCisjZGVmaW5l IFRTSTE0OF9MQ1NSX0dDU1JBVF9EQVRBICAgICAgICAoMTw8MCkJLyogREFUQSBzZXQgR0NT UiBkZWNvZGVyICovCisKKyAgICAvKgorICAgICAqICBDUkcgQmFzZSBBZGRyZXNzIExvd2Vy IEFkZHJlc3MgIENSRyArICQ0MTAKKyAgICAgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfQ0JB TF9NICAgICAgICAgICAgICgweEZGRkZGPDwxMikKKworICAgIC8qCisgICAgICogIENSRyBB dHRyaWJ1dGUgUmVnaXN0ZXIgIENSRyArICQ0MTQKKyAgICAgKi8KKyNkZWZpbmUgVFNJMTQ4 X0xDU1JfQ1JHQVRfRU4gICAgICAgICAgICgxPDw3KQkvKiBFbmFibGUgUFJHIEFjY2VzcyAq LworCisjZGVmaW5lIFRTSTE0OF9MQ1NSX0NSR0FUX0FTX00gICAgICAgICAoNzw8NCkJLyog QWRkcmVzcyBTcGFjZSAqLworI2RlZmluZSBUU0kxNDhfTENTUl9DUkdBVF9BU18xNiAgICAg ICAgKDA8PDQpCS8qIEFkZHJlc3MgU3BhY2UgMTYgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1Jf Q1JHQVRfQVNfMjQgICAgICAgICgxPDw0KQkvKiBBZGRyZXNzIFNwYWNlIDI0ICovCisjZGVm aW5lIFRTSTE0OF9MQ1NSX0NSR0FUX0FTXzMyICAgICAgICAoMjw8NCkJLyogQWRkcmVzcyBT cGFjZSAzMiAqLworI2RlZmluZSBUU0kxNDhfTENTUl9DUkdBVF9BU182NCAgICAgICAgKDQ8 PDQpCS8qIEFkZHJlc3MgU3BhY2UgNjQgKi8KKworI2RlZmluZSBUU0kxNDhfTENTUl9DUkdB VF9TVVBSICAgICAgICAgKDE8PDMpCS8qIFN1cGVydmlzb3IgQWNjZXNzICovCisjZGVmaW5l IFRTSTE0OF9MQ1NSX0NSR0FUX05QUklWICAgICAgICAoMTw8MikJLyogTm9uLVByaXZsaWdl ZChVc2VyKSBBY2Nlc3MgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfQ1JHQVRfUEdNICAgICAg ICAgICgxPDwxKQkvKiBQcm9ncmFtIEFjY2VzcyAqLworI2RlZmluZSBUU0kxNDhfTENTUl9D UkdBVF9EQVRBICAgICAgICAgKDE8PDApCS8qIERhdGEgQWNjZXNzICovCisKKyAgICAvKgor ICAgICAqICBDUi9DU1IgT2Zmc2V0IExvd2VyIFJlZ2lzdGVyICBDUkcgKyAkNDFDCisgICAg ICovCisjZGVmaW5lIFRTSTE0OF9MQ1NSX0NST0xfTSAgICAgICAgICAgICAoMHgxRkZGPDwx OSkJLyogTWFzayAqLworCisgICAgLyoKKyAgICAgKiAgQ1IvQ1NSIEF0dHJpYnV0ZSByZWdp c3RlciAgQ1JHICsgJDQyMAorICAgICAqLworI2RlZmluZSBUU0kxNDhfTENTUl9DUkFUX0VO ICAgICAgICAgICAgKDE8PDcpCS8qIEVuYWJsZSBhY2Nlc3MgdG8gQ1IvQ1NSICovCisKKyAg ICAvKgorICAgICAqICBMb2NhdGlvbiBNb25pdG9yIGJhc2UgYWRkcmVzcyBsb3dlciByZWdp c3RlciAgQ1JHICsgJDQyOAorICAgICAqLworI2RlZmluZSBUU0kxNDhfTENTUl9MTUJBTF9N ICAgICAgICAgICAgKDB4N0ZGRkZGRjw8NSkJLyogTWFzayAqLworCisgICAgLyoKKyAgICAg KiAgTG9jYXRpb24gTW9uaXRvciBBdHRyaWJ1dGUgUmVnaXN0ZXIgIENSRyArICQ0MkMKKyAg ICAgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfTE1BVF9FTiAgICAgICAgICAgICgxPDw3KQkv KiBFbmFibGUgTG9jYXRpb24gTW9uaXRvciAqLworCisjZGVmaW5lIFRTSTE0OF9MQ1NSX0xN QVRfQVNfTSAgICAgICAgICAoNzw8NCkJLyogQWRkcmVzcyBTcGFjZSBNQVNLICAqLworI2Rl ZmluZSBUU0kxNDhfTENTUl9MTUFUX0FTXzE2ICAgICAgICAgKDA8PDQpCS8qIEExNiAqLwor I2RlZmluZSBUU0kxNDhfTENTUl9MTUFUX0FTXzI0ICAgICAgICAgKDE8PDQpCS8qIEEyNCAq LworI2RlZmluZSBUU0kxNDhfTENTUl9MTUFUX0FTXzMyICAgICAgICAgKDI8PDQpCS8qIEEz MiAqLworI2RlZmluZSBUU0kxNDhfTENTUl9MTUFUX0FTXzY0ICAgICAgICAgKDQ8PDQpCS8q IEE2NCAqLworCisjZGVmaW5lIFRTSTE0OF9MQ1NSX0xNQVRfU1VQUiAgICAgICAgICAoMTw8 MykJLyogU3VwZXJ2aXNvciBBY2Nlc3MgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfTE1BVF9O UFJJViAgICAgICAgICgxPDwyKQkvKiBOb24tUHJpdiAoVXNlcikgQWNjZXNzICovCisjZGVm aW5lIFRTSTE0OF9MQ1NSX0xNQVRfUEdNICAgICAgICAgICAoMTw8MSkJLyogUHJvZ3JhbSBB Y2Nlc3MgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfTE1BVF9EQVRBICAgICAgICAgICgxPDww KQkvKiBEYXRhIEFjY2VzcyAgKi8KKworICAgIC8qCisgICAgICogIEJyb2FkY2FzdCBQdWxz ZSBHZW5lcmF0b3IgVGltZXIgUmVnaXN0ZXIgIENSRyArICQ0MzgKKyAgICAgKi8KKyNkZWZp bmUgVFNJMTQ4X0xDU1JfQlBHVFJfQlBHVF9NICAgICAgICgweEZGRkY8PDApCS8qIE1hc2sg Ki8KKworICAgIC8qCisgICAgICogIEJyb2FkY2FzdCBQcm9ncmFtbWFibGUgQ2xvY2sgVGlt ZXIgUmVnaXN0ZXIgIENSRyArICQ0M0MKKyAgICAgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1Jf QlBDVFJfQlBDVF9NICAgICAgICgweEZGRkZGRjw8MCkJLyogTWFzayAqLworCisgICAgLyoK KyAgICAgKiAgVk1FYnVzIEludGVycnVwdCBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICBD UkcgKyAkNDNDCisgICAgICovCisjZGVmaW5lIFRTSTE0OF9MQ1NSX1ZJQ1JfQ05UU19NICAg ICAgICAoMzw8MjIpCS8qIENudHIgU291cmNlIE1BU0sgKi8KKyNkZWZpbmUgVFNJMTQ4X0xD U1JfVklDUl9DTlRTX0RJUyAgICAgICgxPDwyMikJLyogQ250ciBEaXNhYmxlICovCisjZGVm aW5lIFRTSTE0OF9MQ1NSX1ZJQ1JfQ05UU19JUlExICAgICAoMjw8MjIpCS8qIElSUTEgdG8g Q250ciAqLworI2RlZmluZSBUU0kxNDhfTENTUl9WSUNSX0NOVFNfSVJRMiAgICAgKDM8PDIy KQkvKiBJUlEyIHRvIENudHIgKi8KKworI2RlZmluZSBUU0kxNDhfTENTUl9WSUNSX0VER0lT X00gICAgICAgKDM8PDIwKQkvKiBFZGdlIGludGVydXB0IE1BU0sgKi8KKyNkZWZpbmUgVFNJ MTQ4X0xDU1JfVklDUl9FREdJU19ESVMgICAgICgxPDwyMCkJLyogRWRnZSBpbnRlcnVwdCBE aXNhYmxlICovCisjZGVmaW5lIFRTSTE0OF9MQ1NSX1ZJQ1JfRURHSVNfSVJRMSAgICAoMjw8 MjApCS8qIElSUTEgdG8gRWRnZSAqLworI2RlZmluZSBUU0kxNDhfTENTUl9WSUNSX0VER0lT X0lSUTIgICAgKDM8PDIwKQkvKiBJUlEyIHRvIEVkZ2UgKi8KKworI2RlZmluZSBUU0kxNDhf TENTUl9WSUNSX0lSUUlGX00gICAgICAgKDM8PDE4KQkvKiBJUlExKiBGdW5jdGlvbiBNQVNL ICovCisjZGVmaW5lIFRTSTE0OF9MQ1NSX1ZJQ1JfSVJRSUZfTk9STSAgICAoMTw8MTgpCS8q IE5vcm1hbCAqLworI2RlZmluZSBUU0kxNDhfTENTUl9WSUNSX0lSUUlGX1BVTFNFICAgKDI8 PDE4KQkvKiBQdWxzZSBHZW5lcmF0b3IgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfVklDUl9J UlFJRl9QUk9HICAgICgzPDwxOCkJLyogUHJvZ3JhbW1hYmxlIENsb2NrICovCisjZGVmaW5l IFRTSTE0OF9MQ1NSX1ZJQ1JfSVJRSUZfMVUgICAgICAoNDw8MTgpCS8qIDF1cyBDbG9jayAq LworCisjZGVmaW5lIFRTSTE0OF9MQ1NSX1ZJQ1JfSVJRMkZfTSAgICAgICAoMzw8MTYpCS8q IElSUTIqIEZ1bmN0aW9uIE1BU0sgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfVklDUl9JUlEy Rl9OT1JNICAgICgxPDwxNikJLyogTm9ybWFsICovCisjZGVmaW5lIFRTSTE0OF9MQ1NSX1ZJ Q1JfSVJRMkZfUFVMU0UgICAoMjw8MTYpCS8qIFB1bHNlIEdlbmVyYXRvciAqLworI2RlZmlu ZSBUU0kxNDhfTENTUl9WSUNSX0lSUTJGX1BST0cgICAgKDM8PDE2KQkvKiBQcm9ncmFtbWFi bGUgQ2xvY2sgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfVklDUl9JUlEyRl8xVSAgICAgICg0 PDwxNikJLyogMXVzIENsb2NrICovCisKKyNkZWZpbmUgVFNJMTQ4X0xDU1JfVklDUl9CSVAg ICAgICAgICAgICgxPDwxNSkJLyogQnJvYWRjYXN0IEludGVycnVwdCBQdWxzZSAqLworCisj ZGVmaW5lIFRTSTE0OF9MQ1NSX1ZJQ1JfSVJRQyAgICAgICAgICAoMTw8MTIpCS8qIFZNRWJ1 cyBJUlEgQ2xlYXIgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfVklDUl9JUlFTICAgICAgICAg ICgxPDwxMSkJLyogVk1FYnVzIElSUSBTdGF0dXMgKi8KKworI2RlZmluZSBUU0kxNDhfTENT Ul9WSUNSX0lSUUxfTSAgICAgICAgKDc8PDgpCS8qIFZNRWJ1cyBTVyBJUlEgTGV2ZWwgTWFz ayAqLworI2RlZmluZSBUU0kxNDhfTENTUl9WSUNSX0lSUUxfMSAgICAgICAgKDE8PDgpCS8q IFZNRWJ1cyBTVyBJUlEgTGV2ZWwgMSAqLworI2RlZmluZSBUU0kxNDhfTENTUl9WSUNSX0lS UUxfMiAgICAgICAgKDI8PDgpCS8qIFZNRWJ1cyBTVyBJUlEgTGV2ZWwgMiAqLworI2RlZmlu ZSBUU0kxNDhfTENTUl9WSUNSX0lSUUxfMyAgICAgICAgKDM8PDgpCS8qIFZNRWJ1cyBTVyBJ UlEgTGV2ZWwgMyAqLworI2RlZmluZSBUU0kxNDhfTENTUl9WSUNSX0lSUUxfNCAgICAgICAg KDQ8PDgpCS8qIFZNRWJ1cyBTVyBJUlEgTGV2ZWwgNCAqLworI2RlZmluZSBUU0kxNDhfTENT Ul9WSUNSX0lSUUxfNSAgICAgICAgKDU8PDgpCS8qIFZNRWJ1cyBTVyBJUlEgTGV2ZWwgNSAq LworI2RlZmluZSBUU0kxNDhfTENTUl9WSUNSX0lSUUxfNiAgICAgICAgKDY8PDgpCS8qIFZN RWJ1cyBTVyBJUlEgTGV2ZWwgNiAqLworI2RlZmluZSBUU0kxNDhfTENTUl9WSUNSX0lSUUxf NyAgICAgICAgKDc8PDgpCS8qIFZNRWJ1cyBTVyBJUlEgTGV2ZWwgNyAqLworCisjZGVmaW5l IFRTSTE0OF9MQ1NSX1ZJQ1JfU1RJRF9NICAgICAgICAoMHhGRjw8MCkJLyogU3RhdHVzL0lE IE1hc2sgKi8KKworICAgIC8qCisgICAgICogIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIg ICBDUkcgKyAkNDQwCisgICAgICovCisjZGVmaW5lIFRTSTE0OF9MQ1NSX0lOVEVOX0RNQTFF TiAgICAgICAoMTw8MjUpCS8qIERNQUMgMSAqLworI2RlZmluZSBUU0kxNDhfTENTUl9JTlRF Tl9ETUEwRU4gICAgICAgKDE8PDI0KQkvKiBETUFDIDAgKi8KKyNkZWZpbmUgVFNJMTQ4X0xD U1JfSU5URU5fTE0zRU4gICAgICAgICgxPDwyMykJLyogTG9jYXRpb24gTW9uaXRvciAzICov CisjZGVmaW5lIFRTSTE0OF9MQ1NSX0lOVEVOX0xNMkVOICAgICAgICAoMTw8MjIpCS8qIExv Y2F0aW9uIE1vbml0b3IgMiAqLworI2RlZmluZSBUU0kxNDhfTENTUl9JTlRFTl9MTTFFTiAg ICAgICAgKDE8PDIxKQkvKiBMb2NhdGlvbiBNb25pdG9yIDEgKi8KKyNkZWZpbmUgVFNJMTQ4 X0xDU1JfSU5URU5fTE0wRU4gICAgICAgICgxPDwyMCkJLyogTG9jYXRpb24gTW9uaXRvciAw ICovCisjZGVmaW5lIFRTSTE0OF9MQ1NSX0lOVEVOX01CM0VOICAgICAgICAoMTw8MTkpCS8q IE1haWwgQm94IDMgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfSU5URU5fTUIyRU4gICAgICAg ICgxPDwxOCkJLyogTWFpbCBCb3ggMiAqLworI2RlZmluZSBUU0kxNDhfTENTUl9JTlRFTl9N QjFFTiAgICAgICAgKDE8PDE3KQkvKiBNYWlsIEJveCAxICovCisjZGVmaW5lIFRTSTE0OF9M Q1NSX0lOVEVOX01CMEVOICAgICAgICAoMTw8MTYpCS8qIE1haWwgQm94IDAgKi8KKyNkZWZp bmUgVFNJMTQ4X0xDU1JfSU5URU5fVkJFUkVOICAgICAgICgxPDwxMykJLyogVk1FYnVzIEVy cm9yICovCisjZGVmaW5lIFRTSTE0OF9MQ1NSX0lOVEVOX1ZBVE9FTiAgICAgICAoMTw8MTIp CS8qIFZNRWJ1cyBBY2Nlc3MgVGltZS1vdXQgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfSU5U RU5fVklFRU4gICAgICAgICgxPDwxMSkJLyogVk1FYnVzIElSUSBFZGdlICovCisjZGVmaW5l IFRTSTE0OF9MQ1NSX0lOVEVOX0lBQ0tFTiAgICAgICAoMTw8MTApCS8qIElBQ0sgKi8KKyNk ZWZpbmUgVFNJMTQ4X0xDU1JfSU5URU5fU1lTRkxFTiAgICAgICgxPDw5KQkvKiBTeXN0ZW0g RmFpbCAqLworI2RlZmluZSBUU0kxNDhfTENTUl9JTlRFTl9BQ0ZMRU4gICAgICAgKDE8PDgp CS8qIEFDIEZhaWwgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfSU5URU5fSVJRN0VOICAgICAg ICgxPDw3KQkvKiBJUlE3ICovCisjZGVmaW5lIFRTSTE0OF9MQ1NSX0lOVEVOX0lSUTZFTiAg ICAgICAoMTw8NikJLyogSVJRNiAqLworI2RlZmluZSBUU0kxNDhfTENTUl9JTlRFTl9JUlE1 RU4gICAgICAgKDE8PDUpCS8qIElSUTUgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfSU5URU5f SVJRNEVOICAgICAgICgxPDw0KQkvKiBJUlE0ICovCisjZGVmaW5lIFRTSTE0OF9MQ1NSX0lO VEVOX0lSUTNFTiAgICAgICAoMTw8MykJLyogSVJRMyAqLworI2RlZmluZSBUU0kxNDhfTENT Ul9JTlRFTl9JUlEyRU4gICAgICAgKDE8PDIpCS8qIElSUTIgKi8KKyNkZWZpbmUgVFNJMTQ4 X0xDU1JfSU5URU5fSVJRMUVOICAgICAgICgxPDwxKQkvKiBJUlExICovCisKKyAgICAvKgor ICAgICAqICBJbnRlcnJ1cHQgRW5hYmxlIE91dCBSZWdpc3RlciBDUkcgKyAkNDQ0CisgICAg ICovCisjZGVmaW5lIFRTSTE0OF9MQ1NSX0lOVEVPX0RNQTFFTyAgICAgICAoMTw8MjUpCS8q IERNQUMgMSAqLworI2RlZmluZSBUU0kxNDhfTENTUl9JTlRFT19ETUEwRU8gICAgICAgKDE8 PDI0KQkvKiBETUFDIDAgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfSU5URU9fTE0zRU8gICAg ICAgICgxPDwyMykJLyogTG9jIE1vbml0b3IgMyAqLworI2RlZmluZSBUU0kxNDhfTENTUl9J TlRFT19MTTJFTyAgICAgICAgKDE8PDIyKQkvKiBMb2MgTW9uaXRvciAyICovCisjZGVmaW5l IFRTSTE0OF9MQ1NSX0lOVEVPX0xNMUVPICAgICAgICAoMTw8MjEpCS8qIExvYyBNb25pdG9y IDEgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfSU5URU9fTE0wRU8gICAgICAgICgxPDwyMCkJ LyogTG9jYXRpb24gTW9uaXRvciAwICovCisjZGVmaW5lIFRTSTE0OF9MQ1NSX0lOVEVPX01C M0VPICAgICAgICAoMTw8MTkpCS8qIE1haWwgQm94IDMgKi8KKyNkZWZpbmUgVFNJMTQ4X0xD U1JfSU5URU9fTUIyRU8gICAgICAgICgxPDwxOCkJLyogTWFpbCBCb3ggMiAqLworI2RlZmlu ZSBUU0kxNDhfTENTUl9JTlRFT19NQjFFTyAgICAgICAgKDE8PDE3KQkvKiBNYWlsIEJveCAx ICovCisjZGVmaW5lIFRTSTE0OF9MQ1NSX0lOVEVPX01CMEVPICAgICAgICAoMTw8MTYpCS8q IE1haWwgQm94IDAgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfSU5URU9fVkJFUkVPICAgICAg ICgxPDwxMykJLyogVk1FYnVzIEVycm9yICovCisjZGVmaW5lIFRTSTE0OF9MQ1NSX0lOVEVP X1ZBVE9FTyAgICAgICAoMTw8MTIpCS8qIFZNRWJ1cyBBY2Nlc3MgVGltZS1vdXQgKi8KKyNk ZWZpbmUgVFNJMTQ4X0xDU1JfSU5URU9fVklFRU8gICAgICAgICgxPDwxMSkJLyogVk1FYnVz IElSUSBFZGdlICovCisjZGVmaW5lIFRTSTE0OF9MQ1NSX0lOVEVPX0lBQ0tFTyAgICAgICAo MTw8MTApCS8qIElBQ0sgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfSU5URU9fU1lTRkxFTyAg ICAgICgxPDw5KQkvKiBTeXN0ZW0gRmFpbCAqLworI2RlZmluZSBUU0kxNDhfTENTUl9JTlRF T19BQ0ZMRU8gICAgICAgKDE8PDgpCS8qIEFDIEZhaWwgKi8KKyNkZWZpbmUgVFNJMTQ4X0xD U1JfSU5URU9fSVJRN0VPICAgICAgICgxPDw3KQkvKiBJUlE3ICovCisjZGVmaW5lIFRTSTE0 OF9MQ1NSX0lOVEVPX0lSUTZFTyAgICAgICAoMTw8NikJLyogSVJRNiAqLworI2RlZmluZSBU U0kxNDhfTENTUl9JTlRFT19JUlE1RU8gICAgICAgKDE8PDUpCS8qIElSUTUgKi8KKyNkZWZp bmUgVFNJMTQ4X0xDU1JfSU5URU9fSVJRNEVPICAgICAgICgxPDw0KQkvKiBJUlE0ICovCisj ZGVmaW5lIFRTSTE0OF9MQ1NSX0lOVEVPX0lSUTNFTyAgICAgICAoMTw8MykJLyogSVJRMyAq LworI2RlZmluZSBUU0kxNDhfTENTUl9JTlRFT19JUlEyRU8gICAgICAgKDE8PDIpCS8qIElS UTIgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfSU5URU9fSVJRMUVPICAgICAgICgxPDwxKQkv KiBJUlExICovCisKKyAgICAvKgorICAgICAqICBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVy IENSRyArICQ0NDgKKyAgICAgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfSU5UU19ETUExUyAg ICAgICAgICgxPDwyNSkJLyogRE1BIDEgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfSU5UU19E TUEwUyAgICAgICAgICgxPDwyNCkJLyogRE1BIDAgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1Jf SU5UU19MTTNTICAgICAgICAgICgxPDwyMykJLyogTG9jYXRpb24gTW9uaXRvciAzICovCisj ZGVmaW5lIFRTSTE0OF9MQ1NSX0lOVFNfTE0yUyAgICAgICAgICAoMTw8MjIpCS8qIExvY2F0 aW9uIE1vbml0b3IgMiAqLworI2RlZmluZSBUU0kxNDhfTENTUl9JTlRTX0xNMVMgICAgICAg ICAgKDE8PDIxKQkvKiBMb2NhdGlvbiBNb25pdG9yIDEgKi8KKyNkZWZpbmUgVFNJMTQ4X0xD U1JfSU5UU19MTTBTICAgICAgICAgICgxPDwyMCkJLyogTG9jYXRpb24gTW9uaXRvciAwICov CisjZGVmaW5lIFRTSTE0OF9MQ1NSX0lOVFNfTUIzUyAgICAgICAgICAoMTw8MTkpCS8qIE1h aWwgQm94IDMgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfSU5UU19NQjJTICAgICAgICAgICgx PDwxOCkJLyogTWFpbCBCb3ggMiAqLworI2RlZmluZSBUU0kxNDhfTENTUl9JTlRTX01CMVMg ICAgICAgICAgKDE8PDE3KQkvKiBNYWlsIEJveCAxICovCisjZGVmaW5lIFRTSTE0OF9MQ1NS X0lOVFNfTUIwUyAgICAgICAgICAoMTw8MTYpCS8qIE1haWwgQm94IDAgKi8KKyNkZWZpbmUg VFNJMTQ4X0xDU1JfSU5UU19WQkVSUyAgICAgICAgICgxPDwxMykJLyogVk1FYnVzIEVycm9y ICovCisjZGVmaW5lIFRTSTE0OF9MQ1NSX0lOVFNfVkFUT1MgICAgICAgICAoMTw8MTIpCS8q IFZNRWJ1cyBBY2Nlc3MgVGltZS1vdXQgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfSU5UU19W SUVTICAgICAgICAgICgxPDwxMSkJLyogVk1FYnVzIElSUSBFZGdlICovCisjZGVmaW5lIFRT STE0OF9MQ1NSX0lOVFNfSUFDS1MgICAgICAgICAoMTw8MTApCS8qIElBQ0sgKi8KKyNkZWZp bmUgVFNJMTQ4X0xDU1JfSU5UU19TWVNGTFMgICAgICAgICgxPDw5KQkvKiBTeXN0ZW0gRmFp bCAqLworI2RlZmluZSBUU0kxNDhfTENTUl9JTlRTX0FDRkxTICAgICAgICAgKDE8PDgpCS8q IEFDIEZhaWwgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfSU5UU19JUlE3UyAgICAgICAgICgx PDw3KQkvKiBJUlE3ICovCisjZGVmaW5lIFRTSTE0OF9MQ1NSX0lOVFNfSVJRNlMgICAgICAg ICAoMTw8NikJLyogSVJRNiAqLworI2RlZmluZSBUU0kxNDhfTENTUl9JTlRTX0lSUTVTICAg ICAgICAgKDE8PDUpCS8qIElSUTUgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfSU5UU19JUlE0 UyAgICAgICAgICgxPDw0KQkvKiBJUlE0ICovCisjZGVmaW5lIFRTSTE0OF9MQ1NSX0lOVFNf SVJRM1MgICAgICAgICAoMTw8MykJLyogSVJRMyAqLworI2RlZmluZSBUU0kxNDhfTENTUl9J TlRTX0lSUTJTICAgICAgICAgKDE8PDIpCS8qIElSUTIgKi8KKyNkZWZpbmUgVFNJMTQ4X0xD U1JfSU5UU19JUlExUyAgICAgICAgICgxPDwxKQkvKiBJUlExICovCisKKyAgICAvKgorICAg ICAqICBJbnRlcnJ1cHQgQ2xlYXIgUmVnaXN0ZXIgQ1JHICsgJDQ0QworICAgICAqLworI2Rl ZmluZSBUU0kxNDhfTENTUl9JTlRDX0RNQTFDICAgICAgICAgKDE8PDI1KQkvKiBETUEgMSAq LworI2RlZmluZSBUU0kxNDhfTENTUl9JTlRDX0RNQTBDICAgICAgICAgKDE8PDI0KQkvKiBE TUEgMCAqLworI2RlZmluZSBUU0kxNDhfTENTUl9JTlRDX0xNM0MgICAgICAgICAgKDE8PDIz KQkvKiBMb2NhdGlvbiBNb25pdG9yIDMgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfSU5UQ19M TTJDICAgICAgICAgICgxPDwyMikJLyogTG9jYXRpb24gTW9uaXRvciAyICovCisjZGVmaW5l IFRTSTE0OF9MQ1NSX0lOVENfTE0xQyAgICAgICAgICAoMTw8MjEpCS8qIExvY2F0aW9uIE1v bml0b3IgMSAqLworI2RlZmluZSBUU0kxNDhfTENTUl9JTlRDX0xNMEMgICAgICAgICAgKDE8 PDIwKQkvKiBMb2NhdGlvbiBNb25pdG9yIDAgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfSU5U Q19NQjNDICAgICAgICAgICgxPDwxOSkJLyogTWFpbCBCb3ggMyAqLworI2RlZmluZSBUU0kx NDhfTENTUl9JTlRDX01CMkMgICAgICAgICAgKDE8PDE4KQkvKiBNYWlsIEJveCAyICovCisj ZGVmaW5lIFRTSTE0OF9MQ1NSX0lOVENfTUIxQyAgICAgICAgICAoMTw8MTcpCS8qIE1haWwg Qm94IDEgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfSU5UQ19NQjBDICAgICAgICAgICgxPDwx NikJLyogTWFpbCBCb3ggMCAqLworI2RlZmluZSBUU0kxNDhfTENTUl9JTlRDX1ZCRVJDICAg ICAgICAgKDE8PDEzKQkvKiBWTUVidXMgRXJyb3IgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1Jf SU5UQ19WQVRPQyAgICAgICAgICgxPDwxMikJLyogVk1FYnVzIEFjY2VzcyBUaW1lLW91dCAq LworI2RlZmluZSBUU0kxNDhfTENTUl9JTlRDX1ZJRUMgICAgICAgICAgKDE8PDExKQkvKiBW TUVidXMgSVJRIEVkZ2UgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfSU5UQ19JQUNLQyAgICAg ICAgICgxPDwxMCkJLyogSUFDSyAqLworI2RlZmluZSBUU0kxNDhfTENTUl9JTlRDX1NZU0ZM QyAgICAgICAgKDE8PDkpCS8qIFN5c3RlbSBGYWlsICovCisjZGVmaW5lIFRTSTE0OF9MQ1NS X0lOVENfQUNGTEMgICAgICAgICAoMTw8OCkJLyogQUMgRmFpbCAqLworCisgICAgLyoKKyAg ICAgKiAgSW50ZXJydXB0IE1hcCBSZWdpc3RlciAxIENSRyArICQ0NTgKKyAgICAgKi8KKyNk ZWZpbmUgVFNJMTQ4X0xDU1JfSU5UTTFfRE1BMU1fTSAgICAgICgzPDwxOCkJLyogRE1BIDEg Ki8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfSU5UTTFfRE1BME1fTSAgICAgICgzPDwxNikJLyog RE1BIDAgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfSU5UTTFfTE0zTV9NICAgICAgICgzPDwx NCkJLyogTG9jYXRpb24gTW9uaXRvciAzICovCisjZGVmaW5lIFRTSTE0OF9MQ1NSX0lOVE0x X0xNMk1fTSAgICAgICAoMzw8MTIpCS8qIExvY2F0aW9uIE1vbml0b3IgMiAqLworI2RlZmlu ZSBUU0kxNDhfTENTUl9JTlRNMV9MTTFNX00gICAgICAgKDM8PDEwKQkvKiBMb2NhdGlvbiBN b25pdG9yIDEgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfSU5UTTFfTE0wTV9NICAgICAgICgz PDw4KQkvKiBMb2NhdGlvbiBNb25pdG9yIDAgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfSU5U TTFfTUIzTV9NICAgICAgICgzPDw2KQkvKiBNYWlsIEJveCAzICovCisjZGVmaW5lIFRTSTE0 OF9MQ1NSX0lOVE0xX01CMk1fTSAgICAgICAoMzw8NCkJLyogTWFpbCBCb3ggMiAqLworI2Rl ZmluZSBUU0kxNDhfTENTUl9JTlRNMV9NQjFNX00gICAgICAgKDM8PDIpCS8qIE1haWwgQm94 IDEgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfSU5UTTFfTUIwTV9NICAgICAgICgzPDwwKQkv KiBNYWlsIEJveCAwICovCisKKyAgICAvKgorICAgICAqICBJbnRlcnJ1cHQgTWFwIFJlZ2lz dGVyIDIgQ1JHICsgJDQ1QworICAgICAqLworI2RlZmluZSBUU0kxNDhfTENTUl9JTlRNMl9Q RVJSTV9NICAgICAgKDM8PDI2KQkvKiBQQ0kgQnVzIEVycm9yICovCisjZGVmaW5lIFRTSTE0 OF9MQ1NSX0lOVE0yX1ZFUlJNX00gICAgICAoMzw8MjQpCS8qIFZNRWJ1cyBFcnJvciAqLwor I2RlZmluZSBUU0kxNDhfTENTUl9JTlRNMl9WSUVNX00gICAgICAgKDM8PDIyKQkvKiBWTUVi dXMgSVJRIEVkZ2UgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfSU5UTTJfSUFDS01fTSAgICAg ICgzPDwyMCkJLyogSUFDSyAqLworI2RlZmluZSBUU0kxNDhfTENTUl9JTlRNMl9TWVNGTE1f TSAgICAgKDM8PDE4KQkvKiBTeXN0ZW0gRmFpbCAqLworI2RlZmluZSBUU0kxNDhfTENTUl9J TlRNMl9BQ0ZMTV9NICAgICAgKDM8PDE2KQkvKiBBQyBGYWlsICovCisjZGVmaW5lIFRTSTE0 OF9MQ1NSX0lOVE0yX0lSUTdNX00gICAgICAoMzw8MTQpCS8qIElSUTcgKi8KKyNkZWZpbmUg VFNJMTQ4X0xDU1JfSU5UTTJfSVJRNk1fTSAgICAgICgzPDwxMikJLyogSVJRNiAqLworI2Rl ZmluZSBUU0kxNDhfTENTUl9JTlRNMl9JUlE1TV9NICAgICAgKDM8PDEwKQkvKiBJUlE1ICov CisjZGVmaW5lIFRTSTE0OF9MQ1NSX0lOVE0yX0lSUTRNX00gICAgICAoMzw8OCkJLyogSVJR NCAqLworI2RlZmluZSBUU0kxNDhfTENTUl9JTlRNMl9JUlEzTV9NICAgICAgKDM8PDYpCS8q IElSUTMgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfSU5UTTJfSVJRMk1fTSAgICAgICgzPDw0 KQkvKiBJUlEyICovCisjZGVmaW5lIFRTSTE0OF9MQ1NSX0lOVE0yX0lSUTFNX00gICAgICAo Mzw8MikJLyogSVJRMSAqLworCisgICAgLyoKKyAgICAgKiAgRE1BIENvbnRyb2wgKDAtMSkg UmVnaXN0ZXJzIENSRyArICQ1MDAKKyAgICAgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfRENU TF9BQlQgICAgICAgICAgICgxPDwyNykJLyogQWJvcnQgKi8KKyNkZWZpbmUgVFNJMTQ4X0xD U1JfRENUTF9QQVUgICAgICAgICAgICgxPDwyNikJLyogUGF1c2UgKi8KKyNkZWZpbmUgVFNJ MTQ4X0xDU1JfRENUTF9ER08gICAgICAgICAgICgxPDwyNSkJLyogRE1BIEdvICovCisKKyNk ZWZpbmUgVFNJMTQ4X0xDU1JfRENUTF9NT0QgICAgICAgICAgICgxPDwyMykJLyogTW9kZSAq LworCisjZGVmaW5lIFRTSTE0OF9MQ1NSX0RDVExfVkJLU19NICAgICAgICAoNzw8MTIpCS8q IFZNRWJ1cyBibG9jayBTaXplIE1BU0sgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfRENUTF9W QktTXzMyICAgICAgICgwPDwxMikJLyogVk1FYnVzIGJsb2NrIFNpemUgMzIgKi8KKyNkZWZp bmUgVFNJMTQ4X0xDU1JfRENUTF9WQktTXzY0ICAgICAgICgxPDwxMikJLyogVk1FYnVzIGJs b2NrIFNpemUgNjQgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfRENUTF9WQktTXzEyOCAgICAg ICgyPDwxMikJLyogVk1FYnVzIGJsb2NrIFNpemUgMTI4ICovCisjZGVmaW5lIFRTSTE0OF9M Q1NSX0RDVExfVkJLU18yNTYgICAgICAoMzw8MTIpCS8qIFZNRWJ1cyBibG9jayBTaXplIDI1 NiAqLworI2RlZmluZSBUU0kxNDhfTENTUl9EQ1RMX1ZCS1NfNTEyICAgICAgKDQ8PDEyKQkv KiBWTUVidXMgYmxvY2sgU2l6ZSA1MTIgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfRENUTF9W QktTXzEwMjQgICAgICg1PDwxMikJLyogVk1FYnVzIGJsb2NrIFNpemUgMTAyNCAqLworI2Rl ZmluZSBUU0kxNDhfTENTUl9EQ1RMX1ZCS1NfMjA0OCAgICAgKDY8PDEyKQkvKiBWTUVidXMg YmxvY2sgU2l6ZSAyMDQ4ICovCisjZGVmaW5lIFRTSTE0OF9MQ1NSX0RDVExfVkJLU180MDk2 ICAgICAoNzw8MTIpCS8qIFZNRWJ1cyBibG9jayBTaXplIDQwOTYgKi8KKworI2RlZmluZSBU U0kxNDhfTENTUl9EQ1RMX1ZCT1RfTSAgICAgICAgKDc8PDgpCS8qIFZNRWJ1cyBiYWNrLW9m ZiBNQVNLICovCisjZGVmaW5lIFRTSTE0OF9MQ1NSX0RDVExfVkJPVF8wICAgICAgICAoMDw8 OCkJLyogVk1FYnVzIGJhY2stb2ZmICAwdXMgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfRENU TF9WQk9UXzEgICAgICAgICgxPDw4KQkvKiBWTUVidXMgYmFjay1vZmYgMXVzICovCisjZGVm aW5lIFRTSTE0OF9MQ1NSX0RDVExfVkJPVF8yICAgICAgICAoMjw8OCkJLyogVk1FYnVzIGJh Y2stb2ZmIDJ1cyAqLworI2RlZmluZSBUU0kxNDhfTENTUl9EQ1RMX1ZCT1RfNCAgICAgICAg KDM8PDgpCS8qIFZNRWJ1cyBiYWNrLW9mZiA0dXMgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1Jf RENUTF9WQk9UXzggICAgICAgICg0PDw4KQkvKiBWTUVidXMgYmFjay1vZmYgOHVzICovCisj ZGVmaW5lIFRTSTE0OF9MQ1NSX0RDVExfVkJPVF8xNiAgICAgICAoNTw8OCkJLyogVk1FYnVz IGJhY2stb2ZmIDE2dXMgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfRENUTF9WQk9UXzMyICAg ICAgICg2PDw4KQkvKiBWTUVidXMgYmFjay1vZmYgMzJ1cyAqLworI2RlZmluZSBUU0kxNDhf TENTUl9EQ1RMX1ZCT1RfNjQgICAgICAgKDc8PDgpCS8qIFZNRWJ1cyBiYWNrLW9mZiA2NHVz ICovCisKKyNkZWZpbmUgVFNJMTQ4X0xDU1JfRENUTF9QQktTX00gICAgICAgICg3PDw0KQkv KiBQQ0kgYmxvY2sgc2l6ZSBNQVNLICovCisjZGVmaW5lIFRTSTE0OF9MQ1NSX0RDVExfUEJL U18zMiAgICAgICAoMDw8NCkJLyogUENJIGJsb2NrIHNpemUgMzIgYnl0ZXMgKi8KKyNkZWZp bmUgVFNJMTQ4X0xDU1JfRENUTF9QQktTXzY0ICAgICAgICgxPDw0KQkvKiBQQ0kgYmxvY2sg c2l6ZSA2NCBieXRlcyAqLworI2RlZmluZSBUU0kxNDhfTENTUl9EQ1RMX1BCS1NfMTI4ICAg ICAgKDI8PDQpCS8qIFBDSSBibG9jayBzaXplIDEyOCBieXRlcyAqLworI2RlZmluZSBUU0kx NDhfTENTUl9EQ1RMX1BCS1NfMjU2ICAgICAgKDM8PDQpCS8qIFBDSSBibG9jayBzaXplIDI1 NiBieXRlcyAqLworI2RlZmluZSBUU0kxNDhfTENTUl9EQ1RMX1BCS1NfNTEyICAgICAgKDQ8 PDQpCS8qIFBDSSBibG9jayBzaXplIDUxMiBieXRlcyAqLworI2RlZmluZSBUU0kxNDhfTENT Ul9EQ1RMX1BCS1NfMTAyNCAgICAgKDU8PDQpCS8qIFBDSSBibG9jayBzaXplIDEwMjQgYnl0 ZXMgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfRENUTF9QQktTXzIwNDggICAgICg2PDw0KQkv KiBQQ0kgYmxvY2sgc2l6ZSAyMDQ4IGJ5dGVzICovCisjZGVmaW5lIFRTSTE0OF9MQ1NSX0RD VExfUEJLU180MDk2ICAgICAoNzw8NCkJLyogUENJIGJsb2NrIHNpemUgNDA5NiBieXRlcyAq LworCisjZGVmaW5lIFRTSTE0OF9MQ1NSX0RDVExfUEJPVF9NICAgICAgICAoNzw8MCkJLyog UENJIGJhY2sgb2ZmIE1BU0sgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfRENUTF9QQk9UXzAg ICAgICAgICgwPDwwKQkvKiBQQ0kgYmFjayBvZmYgMHVzICovCisjZGVmaW5lIFRTSTE0OF9M Q1NSX0RDVExfUEJPVF8xICAgICAgICAoMTw8MCkJLyogUENJIGJhY2sgb2ZmIDF1cyAqLwor I2RlZmluZSBUU0kxNDhfTENTUl9EQ1RMX1BCT1RfMiAgICAgICAgKDI8PDApCS8qIFBDSSBi YWNrIG9mZiAydXMgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfRENUTF9QQk9UXzQgICAgICAg ICgzPDwwKQkvKiBQQ0kgYmFjayBvZmYgM3VzICovCisjZGVmaW5lIFRTSTE0OF9MQ1NSX0RD VExfUEJPVF84ICAgICAgICAoNDw8MCkJLyogUENJIGJhY2sgb2ZmIDR1cyAqLworI2RlZmlu ZSBUU0kxNDhfTENTUl9EQ1RMX1BCT1RfMTYgICAgICAgKDU8PDApCS8qIFBDSSBiYWNrIG9m ZiA4dXMgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfRENUTF9QQk9UXzMyICAgICAgICg2PDww KQkvKiBQQ0kgYmFjayBvZmYgMTZ1cyAqLworI2RlZmluZSBUU0kxNDhfTENTUl9EQ1RMX1BC T1RfNjQgICAgICAgKDc8PDApCS8qIFBDSSBiYWNrIG9mZiAzMnVzICovCisKKyAgICAvKgor ICAgICAqICBETUEgU3RhdHVzIFJlZ2lzdGVycyAoMC0xKSAgQ1JHICsgJDUwNAorICAgICAq LworI2RlZmluZSBUU0kxNDhfTENTUl9EU1RBX1NNQSAgICAgICAgICAgKDE8PDMxKQkvKiBQ Q0kgU2lnbmFsbGVkIE1hc3RlciBBYnQgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfRFNUQV9S VEEgICAgICAgICAgICgxPDwzMCkJLyogUENJIFJlY2VpdmVkIFRhcmdldCBBYnQgKi8KKyNk ZWZpbmUgVFNJMTQ4X0xDU1JfRFNUQV9NUkMgICAgICAgICAgICgxPDwyOSkJLyogUENJIE1h eCBSZXRyeSBDb3VudCAqLworI2RlZmluZSBUU0kxNDhfTENTUl9EU1RBX1ZCRSAgICAgICAg ICAgKDE8PDI4KQkvKiBWTUVidXMgZXJyb3IgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfRFNU QV9BQlQgICAgICAgICAgICgxPDwyNykJLyogQWJvcnQgKi8KKyNkZWZpbmUgVFNJMTQ4X0xD U1JfRFNUQV9QQVUgICAgICAgICAgICgxPDwyNikJLyogUGF1c2UgKi8KKyNkZWZpbmUgVFNJ MTQ4X0xDU1JfRFNUQV9ET04gICAgICAgICAgICgxPDwyNSkJLyogRG9uZSAqLworI2RlZmlu ZSBUU0kxNDhfTENTUl9EU1RBX0JTWSAgICAgICAgICAgKDE8PDI0KQkvKiBCdXN5ICovCisK KyAgICAvKgorICAgICAqICBETUEgQ3VycmVudCBMaW5rIEFkZHJlc3MgTG93ZXIgKDAtMSkK KyAgICAgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfRENMQUxfTSAgICAgICAgICAgICgweDNG RkZGRkY8PDYpCS8qIE1hc2sgKi8KKworICAgIC8qCisgICAgICogIERNQSBTb3VyY2UgQXR0 cmlidXRlICgwLTEpIFJlZworICAgICAqLworI2RlZmluZSBUU0kxNDhfTENTUl9EU0FUX1RZ UF9NICAgICAgICAgKDM8PDI4KQkvKiBTb3VyY2UgQnVzIFR5cGUgKi8KKyNkZWZpbmUgVFNJ MTQ4X0xDU1JfRFNBVF9UWVBfUENJICAgICAgICgwPDwyOCkJLyogUENJIEJ1cyAqLworI2Rl ZmluZSBUU0kxNDhfTENTUl9EU0FUX1RZUF9WTUUgICAgICAgKDE8PDI4KQkvKiBWTUVidXMg Ki8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfRFNBVF9UWVBfUEFUICAgICAgICgyPDwyOCkJLyog RGF0YSBQYXR0ZXJuICovCisKKyNkZWZpbmUgVFNJMTQ4X0xDU1JfRFNBVF9QU1ogICAgICAg ICAgICgxPDwyNSkJLyogUGF0dGVybiBTaXplICovCisjZGVmaW5lIFRTSTE0OF9MQ1NSX0RT QVRfTklOICAgICAgICAgICAoMTw8MjQpCS8qIE5vIEluY3JlbWVudCAqLworCisjZGVmaW5l IFRTSTE0OF9MQ1NSX0RTQVRfMmVTU1RNX00gICAgICAoMzw8MTEpCS8qIDJlU1NUIFRyYW5z IFJhdGUgTWFzayAqLworI2RlZmluZSBUU0kxNDhfTENTUl9EU0FUXzJlU1NUTV8xNjAgICAg KDA8PDExKQkvKiAxNjAgTUIvcyAqLworI2RlZmluZSBUU0kxNDhfTENTUl9EU0FUXzJlU1NU TV8yNjcgICAgKDE8PDExKQkvKiAyNjcgTUIvcyAqLworI2RlZmluZSBUU0kxNDhfTENTUl9E U0FUXzJlU1NUTV8zMjAgICAgKDI8PDExKQkvKiAzMjAgTUIvcyAqLworCisjZGVmaW5lIFRT STE0OF9MQ1NSX0RTQVRfVE1fTSAgICAgICAgICAoNzw8OCkJLyogQnVzIFRyYW5zZmVyIFBy b3RvY29sIE1hc2sgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfRFNBVF9UTV9TQ1QgICAgICAg ICgwPDw4KQkvKiBTQ1QgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfRFNBVF9UTV9CTFQgICAg ICAgICgxPDw4KQkvKiBCTFQgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfRFNBVF9UTV9NQkxU ICAgICAgICgyPDw4KQkvKiBNQkxUICovCisjZGVmaW5lIFRTSTE0OF9MQ1NSX0RTQVRfVE1f MmVWTUUgICAgICAoMzw8OCkJLyogMmVWTUUgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfRFNB VF9UTV8yZVNTVCAgICAgICg0PDw4KQkvKiAyZVNTVCAqLworI2RlZmluZSBUU0kxNDhfTENT Ul9EU0FUX1RNXzJlU1NUQiAgICAgKDU8PDgpCS8qIDJlU1NUIEJyb2FkY2FzdCAqLworCisj ZGVmaW5lIFRTSTE0OF9MQ1NSX0RTQVRfREJXX00gICAgICAgICAoMzw8NikJLyogTWF4IERh dGEgV2lkdGggTUFTSyAqLworI2RlZmluZSBUU0kxNDhfTENTUl9EU0FUX0RCV18xNiAgICAg ICAgKDA8PDYpCS8qIDE2IEJpdHMgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfRFNBVF9EQldf MzIgICAgICAgICgxPDw2KQkvKiAzMiBCaXRzICovCisKKyNkZWZpbmUgVFNJMTQ4X0xDU1Jf RFNBVF9TVVAgICAgICAgICAgICgxPDw1KQkvKiBTdXBlcnZpc29yeSBNb2RlICovCisjZGVm aW5lIFRTSTE0OF9MQ1NSX0RTQVRfUEdNICAgICAgICAgICAoMTw8NCkJLyogUHJvZ3JhbSBN b2RlICovCisKKyNkZWZpbmUgVFNJMTQ4X0xDU1JfRFNBVF9BTU9ERV9NICAgICAgICgweGY8 PDApCS8qIEFkZHJlc3MgU3BhY2UgTWFzayAqLworI2RlZmluZSBUU0kxNDhfTENTUl9EU0FU X0FNT0RFXzE2ICAgICAgKDA8PDApCS8qIEExNiAqLworI2RlZmluZSBUU0kxNDhfTENTUl9E U0FUX0FNT0RFXzI0ICAgICAgKDE8PDApCS8qIEEyNCAqLworI2RlZmluZSBUU0kxNDhfTENT Ul9EU0FUX0FNT0RFXzMyICAgICAgKDI8PDApCS8qIEEzMiAqLworI2RlZmluZSBUU0kxNDhf TENTUl9EU0FUX0FNT0RFXzY0ICAgICAgKDQ8PDApCS8qIEE2NCAqLworI2RlZmluZSBUU0kx NDhfTENTUl9EU0FUX0FNT0RFX0NSQ1NSICAgKDU8PDApCS8qIENSL0NTUiAqLworI2RlZmlu ZSBUU0kxNDhfTENTUl9EU0FUX0FNT0RFX1VTRVIxICAgKDg8PDApCS8qIFVzZXIxICovCisj ZGVmaW5lIFRTSTE0OF9MQ1NSX0RTQVRfQU1PREVfVVNFUjIgICAoOTw8MCkJLyogVXNlcjIg Ki8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfRFNBVF9BTU9ERV9VU0VSMyAgICgweGE8PDApCS8q IFVzZXIzICovCisjZGVmaW5lIFRTSTE0OF9MQ1NSX0RTQVRfQU1PREVfVVNFUjQgICAoMHhi PDwwKQkvKiBVc2VyNCAqLworCisgICAgLyoKKyAgICAgKiAgRE1BIERlc3RpbmF0aW9uIEF0 dHJpYnV0ZSBSZWdpc3RlcnMgKDAtMSkKKyAgICAgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1Jf RERBVF9UWVBfVk1FICAgICAgICgxPDwyOCkJLyogRGVzdGluYXRpb24gVk1FYnVzICovCisj ZGVmaW5lIFRTSTE0OF9MQ1NSX0REQVRfVFlQX1BDSSAgICAgICAoMDw8MjgpCS8qIERlc3Rp bmF0aW9uIFBDSSBCdXMgICovCisKKyNkZWZpbmUgVFNJMTQ4X0xDU1JfRERBVF9OSU4gICAg ICAgICAgICgxPDwyNCkJLyogTm8gSW5jcmVtZW50ICovCisKKyNkZWZpbmUgVFNJMTQ4X0xD U1JfRERBVF8yZVNTVE1fTSAgICAgICgzPDwxMSkJLyogMmVTU1QgVHJhbnNmZXIgUmF0ZSBN YXNrICovCisjZGVmaW5lIFRTSTE0OF9MQ1NSX0REQVRfMmVTU1RNXzE2MCAgICAoMDw8MTEp CS8qIDE2MCBNQi9zICovCisjZGVmaW5lIFRTSTE0OF9MQ1NSX0REQVRfMmVTU1RNXzI2NyAg ICAoMTw8MTEpCS8qIDI2NyBNQi9zICovCisjZGVmaW5lIFRTSTE0OF9MQ1NSX0REQVRfMmVT U1RNXzMyMCAgICAoMjw8MTEpCS8qIDMyMCBNQi9zICovCisKKyNkZWZpbmUgVFNJMTQ4X0xD U1JfRERBVF9UTV9NICAgICAgICAgICg3PDw4KQkvKiBCdXMgVHJhbnNmZXIgUHJvdG9jb2wg TWFzayAqLworI2RlZmluZSBUU0kxNDhfTENTUl9EREFUX1RNX1NDVCAgICAgICAgKDA8PDgp CS8qIFNDVCAqLworI2RlZmluZSBUU0kxNDhfTENTUl9EREFUX1RNX0JMVCAgICAgICAgKDE8 PDgpCS8qIEJMVCAqLworI2RlZmluZSBUU0kxNDhfTENTUl9EREFUX1RNX01CTFQgICAgICAg KDI8PDgpCS8qIE1CTFQgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfRERBVF9UTV8yZVZNRSAg ICAgICgzPDw4KQkvKiAyZVZNRSAqLworI2RlZmluZSBUU0kxNDhfTENTUl9EREFUX1RNXzJl U1NUICAgICAgKDQ8PDgpCS8qIDJlU1NUICovCisjZGVmaW5lIFRTSTE0OF9MQ1NSX0REQVRf VE1fMmVTU1RCICAgICAoNTw8OCkJLyogMmVTU1QgQnJvYWRjYXN0ICovCisKKyNkZWZpbmUg VFNJMTQ4X0xDU1JfRERBVF9EQldfTSAgICAgICAgICgzPDw2KQkvKiBNYXggRGF0YSBXaWR0 aCBNQVNLICovCisjZGVmaW5lIFRTSTE0OF9MQ1NSX0REQVRfREJXXzE2ICAgICAgICAoMDw8 NikJLyogMTYgQml0cyAqLworI2RlZmluZSBUU0kxNDhfTENTUl9EREFUX0RCV18zMiAgICAg ICAgKDE8PDYpCS8qIDMyIEJpdHMgKi8KKworI2RlZmluZSBUU0kxNDhfTENTUl9EREFUX1NV UCAgICAgICAgICAgKDE8PDUpCS8qIFN1cGVydmlzb3J5L1VzZXIgQWNjZXNzICovCisjZGVm aW5lIFRTSTE0OF9MQ1NSX0REQVRfUEdNICAgICAgICAgICAoMTw8NCkJLyogUHJvZ3JhbS9E YXRhIEFjY2VzcyAqLworCisjZGVmaW5lIFRTSTE0OF9MQ1NSX0REQVRfQU1PREVfTSAgICAg ICAoMHhmPDwwKQkvKiBBZGRyZXNzIFNwYWNlIE1hc2sgKi8KKyNkZWZpbmUgVFNJMTQ4X0xD U1JfRERBVF9BTU9ERV8xNiAgICAgICgwPDwwKQkvKiBBMTYgKi8KKyNkZWZpbmUgVFNJMTQ4 X0xDU1JfRERBVF9BTU9ERV8yNCAgICAgICgxPDwwKQkvKiBBMjQgKi8KKyNkZWZpbmUgVFNJ MTQ4X0xDU1JfRERBVF9BTU9ERV8zMiAgICAgICgyPDwwKQkvKiBBMzIgKi8KKyNkZWZpbmUg VFNJMTQ4X0xDU1JfRERBVF9BTU9ERV82NCAgICAgICg0PDwwKQkvKiBBNjQgKi8KKyNkZWZp bmUgVFNJMTQ4X0xDU1JfRERBVF9BTU9ERV9DUkNTUiAgICg1PDwwKQkvKiBDUkMvU1IgKi8K KyNkZWZpbmUgVFNJMTQ4X0xDU1JfRERBVF9BTU9ERV9VU0VSMSAgICg4PDwwKQkvKiBVc2Vy MSAqLworI2RlZmluZSBUU0kxNDhfTENTUl9EREFUX0FNT0RFX1VTRVIyICAgKDk8PDApCS8q IFVzZXIyICovCisjZGVmaW5lIFRTSTE0OF9MQ1NSX0REQVRfQU1PREVfVVNFUjMgICAoMHhB PDwwKQkvKiBVc2VyMyAqLworI2RlZmluZSBUU0kxNDhfTENTUl9EREFUX0FNT0RFX1VTRVI0 ICAgKDB4Qjw8MCkJLyogVXNlcjQgKi8KKworICAgIC8qCisgICAgICogIERNQSBOZXh0IExp bmsgQWRkcmVzcyBMb3dlcgorICAgICAqLworI2RlZmluZSBUU0kxNDhfTENTUl9ETkxBTF9E TkxBTF9NICAgICAgKDB4M0ZGRkZGRjw8NikJLyogQWRkcmVzcyBNYXNrICovCisjZGVmaW5l IFRTSTE0OF9MQ1NSX0ROTEFMX0xMQSAgICAgICAgICAoMTw8MCkJLyogTGFzdCBMaW5rIEFk ZHJlc3MgSW5kaWNhdG9yICovCisKKyAgICAvKgorICAgICAqICBETUEgMmVTU1QgQnJvYWRj YXN0IFNlbGVjdAorICAgICAqLworI2RlZmluZSBUU0kxNDhfTENTUl9EQlNfTSAgICAgICAg ICAgICAgKDB4MUZGRkZGPDwwKQkvKiBNYXNrICovCisKKyAgICAvKgorICAgICAqICBHQ1NS IFJlZ2lzdGVyIEdyb3VwCisgICAgICovCisKKyAgICAvKgorICAgICAqICBHQ1NSIENvbnRy b2wgYW5kIFN0YXR1cyBSZWdpc3RlciAgQ1JHICsgJDYwNAorICAgICAqLworI2RlZmluZSBU U0kxNDhfR0NTUl9HQ1RSTF9MUlNUICAgICAgICAgKDE8PDE1KQkvKiBMb2NhbCBSZXNldCAq LworI2RlZmluZSBUU0kxNDhfR0NTUl9HQ1RSTF9TRkFJTEVOICAgICAgKDE8PDE0KQkvKiBT eXN0ZW0gRmFpbCBlbmFibGUgKi8KKyNkZWZpbmUgVFNJMTQ4X0dDU1JfR0NUUkxfQkRGQUlM UyAgICAgICgxPDwxMykJLyogQm9hcmQgRmFpbCBTdGF0dXMgKi8KKyNkZWZpbmUgVFNJMTQ4 X0dDU1JfR0NUUkxfU0NPTiAgICAgICAgICgxPDwxMikJLyogU3lzdGVtIENvcG50cm9sbGVy ICovCisjZGVmaW5lIFRTSTE0OF9HQ1NSX0dDVFJMX01FTiAgICAgICAgICAoMTw8MTEpCS8q IE1vZHVsZSBFbmFibGUgKFJFQURZKSAqLworCisjZGVmaW5lIFRTSTE0OF9HQ1NSX0dDVFJM X0xNSTNTICAgICAgICAoMTw8NykJLyogTG9jIE1vbml0b3IgMyBJbnQgU3RhdHVzICovCisj ZGVmaW5lIFRTSTE0OF9HQ1NSX0dDVFJMX0xNSTJTICAgICAgICAoMTw8NikJLyogTG9jIE1v bml0b3IgMiBJbnQgU3RhdHVzICovCisjZGVmaW5lIFRTSTE0OF9HQ1NSX0dDVFJMX0xNSTFT ICAgICAgICAoMTw8NSkJLyogTG9jIE1vbml0b3IgMSBJbnQgU3RhdHVzICovCisjZGVmaW5l IFRTSTE0OF9HQ1NSX0dDVFJMX0xNSTBTICAgICAgICAoMTw8NCkJLyogTG9jIE1vbml0b3Ig MCBJbnQgU3RhdHVzICovCisjZGVmaW5lIFRTSTE0OF9HQ1NSX0dDVFJMX01CSTNTICAgICAg ICAoMTw8MykJLyogTWFpbCBib3ggMyBJbnQgU3RhdHVzICovCisjZGVmaW5lIFRTSTE0OF9H Q1NSX0dDVFJMX01CSTJTICAgICAgICAoMTw8MikJLyogTWFpbCBib3ggMiBJbnQgU3RhdHVz ICovCisjZGVmaW5lIFRTSTE0OF9HQ1NSX0dDVFJMX01CSTFTICAgICAgICAoMTw8MSkJLyog TWFpbCBib3ggMSBJbnQgU3RhdHVzICovCisjZGVmaW5lIFRTSTE0OF9HQ1NSX0dDVFJMX01C STBTICAgICAgICAoMTw8MCkJLyogTWFpbCBib3ggMCBJbnQgU3RhdHVzICovCisKKyNkZWZp bmUgVFNJMTQ4X0dDU1JfR0FQICAgICAgICAgICAgICAgICgxPDw1KQkvKiBHZW9ncmFwaGlj IEFkZHIgUGFyaXR5ICovCisjZGVmaW5lIFRTSTE0OF9HQ1NSX0dBX00gICAgICAgICAgICAg ICAoMHgxRjw8MCkJLyogR2VvZ3JhcGhpYyBBZGRyZXNzIE1hc2sgKi8KKworICAgIC8qCisg ICAgICogIENSL0NTUiBSZWdpc3RlciBHcm91cAorICAgICAqLworCisgICAgLyoKKyAgICAg KiAgQ1IvQ1NSIEJpdCBDbGVhciBSZWdpc3RlciBDUkcgKyAkRkY0CisgICAgICovCisjZGVm aW5lIFRTSTE0OF9DUkNTUl9DU1JCQ1JfTFJTVEMgICAgICAoMTw8NykJLyogTG9jYWwgUmVz ZXQgQ2xlYXIgKi8KKyNkZWZpbmUgVFNJMTQ4X0NSQ1NSX0NTUkJDUl9TRkFJTEMgICAgICgx PDw2KQkvKiBTeXN0ZW0gRmFpbCBFbmFibGUgQ2xlYXIgKi8KKyNkZWZpbmUgVFNJMTQ4X0NS Q1NSX0NTUkJDUl9CREZBSUxTICAgICgxPDw1KQkvKiBCb2FyZCBGYWlsIFN0YXR1cyAqLwor I2RlZmluZSBUU0kxNDhfQ1JDU1JfQ1NSQkNSX01FTkMgICAgICAgKDE8PDQpCS8qIE1vZHVs ZSBFbmFibGUgQ2xlYXIgKi8KKyNkZWZpbmUgVFNJMTQ4X0NSQ1NSX0NTUkJDUl9CRVJSU0Mg ICAgICgxPDwzKQkvKiBCdXMgRXJyb3IgU3RhdHVzIENsZWFyICovCisKKyAgICAvKgorICAg ICAqICBDUi9DU1IgQml0IFNldCBSZWdpc3RlciBDUkcrJEZGOAorICAgICAqLworI2RlZmlu ZSBUU0kxNDhfQ1JDU1JfQ1NSQlNSX0xJU1RTICAgICAgKDE8PDcpCS8qIExvY2FsIFJlc2V0 IENsZWFyICovCisjZGVmaW5lIFRTSTE0OF9DUkNTUl9DU1JCU1JfU0ZBSUxTICAgICAoMTw8 NikJLyogU3lzdGVtIEZhaWwgRW5hYmxlIENsZWFyICovCisjZGVmaW5lIFRTSTE0OF9DUkNT Ul9DU1JCU1JfQkRGQUlMUyAgICAoMTw8NSkJLyogQm9hcmQgRmFpbCBTdGF0dXMgKi8KKyNk ZWZpbmUgVFNJMTQ4X0NSQ1NSX0NTUkJTUl9NRU5TICAgICAgICgxPDw0KQkvKiBNb2R1bGUg RW5hYmxlIENsZWFyICovCisjZGVmaW5lIFRTSTE0OF9DUkNTUl9DU1JCU1JfQkVSUlMgICAg ICAoMTw8MykJLyogQnVzIEVycm9yIFN0YXR1cyBDbGVhciAqLworCisgICAgLyoKKyAgICAg KiAgQ1IvQ1NSIEJhc2UgQWRkcmVzcyBSZWdpc3RlciBDUkcgKyBGRkMKKyAgICAgKi8KKyNk ZWZpbmUgVFNJMTQ4X0NSQ1NSX0NCQVJfTSAgICAgICAgICAgICgweDFGPDwzKQkvKiBNYXNr ICovCisKKyNlbmRpZgkJCQkvKiBUU0kxNDhfSCAqLwpkaWZmIC11IC0tbmV3LWZpbGUgLS1y ZWN1cnNpdmUgbGludXgtMi42LjI5LjYub3JpZy9kcml2ZXJzL3ZtZS92bWVkcnYuYyBsaW51 eC0yLjYuMjkuNi5tb2QvZHJpdmVycy92bWUvdm1lZHJ2LmMKLS0tIGxpbnV4LTIuNi4yOS42 Lm9yaWcvZHJpdmVycy92bWUvdm1lZHJ2LmMJMTk2OS0xMi0zMSAxNzowMDowMC4wMDAwMDAw MDAgLTA3MDAKKysrIGxpbnV4LTIuNi4yOS42Lm1vZC9kcml2ZXJzL3ZtZS92bWVkcnYuYwky MDA5LTA3LTIxIDExOjI4OjE4LjAwMDAwMDAwMCAtMDcwMApAQCAtMCwwICsxLDc3NCBAQAor LyoKKyAqIHZtZWRydi5jCisgKgorICogUHJvdmlkZWQgZ2VuZXJpYyAobm9uIGJyaWRnZSBz cGVjaWZpYykgZW50cnktcG9pbnRzLiBUaGUgZW50cnktcG9pbnRzCisgKiBjYWxsIENBOTFD MDQyIG9yIFRTSTE0OCBzcGVjaWZpYyByb3V0aW5lcyBhbmQgcmV0dXJuIHRoZSByZXN1bHQu IAorICoKKyAqIEF1dGhvcnM6IFRvbSBBcm1pc3RlYWQsIEFqaXQgUHJlbQorICoKKyAqIENv cHlyaWdodCAyMDA0LTIwMDcgTW90b3JvbGEgSW5jLgorICogQ29weXJpZ2h0IDIwMDggRW1l cnNvbiBOZXR3b3JrIFBvd2VyIC0gRW1iZWRkZWQgQ29tcHV0aW5nLCBJbmMuCisgKgorICog VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBp dCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdl bmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBv ciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5j bHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2lu Y2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRl IDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUg PGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxs aW51eC9wb2xsLmg+CisKKyNpbmNsdWRlICJ2bWVkcnYuaCIKKyNpbmNsdWRlICJjYTkxYzA0 Mi5oIgorCitleHRlcm4gc3RydWN0IHJlc291cmNlICp2bWVwY2ltZW07CitleHRlcm4gc3Ry dWN0IHBjaV9kZXYgKnZtZV9wY2lfZGV2OworCisvKiBHbG9iYWwgVk1FIGNvbnRyb2xsZXIg aW5mb3JtYXRpb24gKi8KK2ludCB2bWVjaGlwX2lycTsJCS8vIFBDSSBpcnEKK2ludCB2bWVj aGlwX2lycV9vdmVyaGVhZF90aWNrczsJLy8gSW50ZXJydXB0IG92ZXJoZWFkCitpbnQgdm1l Y2hpcF9kZXZpZDsJCS8vIFBDSSBkZXZJRAoraW50IHZtZXBhcmVudF9kZXZpZDsJCS8vIFZN RSBicmlkZ2UgcGFyZW50IElECitpbnQgdm1lY2hpcF9yZXZpc2lvbjsJCS8vIFBDSSByZXZp c2lvbgoraW50IHZtZWNoaXBfYnVzOwkJLy8gUENJIGJ1cyBudW1iZXIuCit2b2lkIF9faW9t ZW0gKnZtZWNoaXBfYmFzZWFkZHI7CQkvLyB2aXJ0dWFsIGFkZHJlc3Mgb2YgY2hpcCByZWdp c3RlcnMKK2ludCB2bWVfc2xvdG51bSA9IC0xOwkJLy8gVk1FIHNsb3QgbnVtICgtMSA9IHVu a25vd24pCitpbnQgdm1lX3N5c2NvbiA9IC0xOwkJLy8gVk1FIHN5cyBjb250cm9sbGVyICgt MSA9IHVua25vd24pCisKKy8qIGFkZHJlc3Mgb2YgYm9hcmQgZGF0YSAqLworZXh0ZXJuIHN0 cnVjdCB2bWVTaGFyZWREYXRhICp2bWVjaGlwX2ludGVyYm9hcmRfZGF0YTsKKworZXh0ZXJu IHN0cnVjdCByZXNvdXJjZSBvdXRfcmVzb3VyY2VbVk1FX01BWF9XSU5ET1dTXTsKK3Vuc2ln bmVkIGludCBvdXRfaW1hZ2VfdmFbVk1FX01BWF9XSU5ET1dTXTsJLy8gQmFzZSB2aXJ0dWFs IGFkZHJlc3MKKworLyoKKyAqIEV4dGVybmFsIGZ1bmN0aW9ucyAKKyAqLworZXh0ZXJuIGlu dCB1bmlfaW5pdCh2b2lkICopOworZXh0ZXJuIHZvaWQgdW5pX3NodXRkb3duKHZvaWQpOwor ZXh0ZXJuIGludCB1bmlfc2V0X2FyYml0ZXIodm1lQXJiaXRlckNmZ190ICogdm1lQXJiKTsK K2V4dGVybiBpbnQgdW5pX2dldF9hcmJpdGVyKHZtZUFyYml0ZXJDZmdfdCAqIHZtZUFyYik7 CitleHRlcm4gaW50IHVuaV9zZXRfcmVxdWVzdG9yKHZtZVJlcXVlc3RlckNmZ190ICogdm1l UmVxKTsKK2V4dGVybiBpbnQgdW5pX2dldF9yZXF1ZXN0b3Iodm1lUmVxdWVzdGVyQ2ZnX3Qg KiB2bWVSZXEpOworZXh0ZXJuIGludCB1bmlfc2V0X2luX2JvdW5kKHZtZUluV2luZG93Q2Zn X3QgKiB2bWVJbik7CitleHRlcm4gaW50IHVuaV9nZXRfaW5fYm91bmQodm1lSW5XaW5kb3dD ZmdfdCAqIHZtZUluKTsKK2V4dGVybiBpbnQgdW5pX3NldF9vdXRfYm91bmQodm1lT3V0V2lu ZG93Q2ZnX3QgKiB2bWVPdXQpOworZXh0ZXJuIGludCB1bmlfZ2V0X291dF9ib3VuZCh2bWVP dXRXaW5kb3dDZmdfdCAqIHZtZU91dCk7CitleHRlcm4gaW50IHVuaV9zZXR1cF9sbSh2bWVM bUNmZ190ICogdm1lTG0pOworZXh0ZXJuIGludCB1bmlfd2FpdF9sbSh2bWVMbUNmZ190ICog dm1lTG0pOworZXh0ZXJuIGludCB1bmlfZG9fcm13KHZtZVJtd0NmZ190ICogdm1lUm13KTsK K2V4dGVybiBpbnQgdW5pX2RvX2RtYSh2bWVEbWFQYWNrZXRfdCAqIHZtZURtYSk7CitleHRl cm4gaW50IHVuaV9nZW5lcmF0ZV9pcnEodmlycUluZm9fdCAqKTsKK2V4dGVybiBpbnQgdW5p X2J1c19lcnJvcl9jaGsoaW50KTsKKworZXh0ZXJuIGludCB0ZW1wZV9pbml0KHZvaWQgKik7 CitleHRlcm4gdm9pZCB0ZW1wZV9zaHV0ZG93bih2b2lkKTsKK2V4dGVybiBpbnQgdGVtcGVf c2V0X2FyYml0ZXIodm1lQXJiaXRlckNmZ190ICogdm1lQXJiKTsKK2V4dGVybiBpbnQgdGVt cGVfZ2V0X2FyYml0ZXIodm1lQXJiaXRlckNmZ190ICogdm1lQXJiKTsKK2V4dGVybiBpbnQg dGVtcGVfc2V0X3JlcXVlc3Rvcih2bWVSZXF1ZXN0ZXJDZmdfdCAqIHZtZVJlcSk7CitleHRl cm4gaW50IHRlbXBlX2dldF9yZXF1ZXN0b3Iodm1lUmVxdWVzdGVyQ2ZnX3QgKiB2bWVSZXEp OworZXh0ZXJuIGludCB0ZW1wZV9zZXRfaW5fYm91bmQodm1lSW5XaW5kb3dDZmdfdCAqIHZt ZUluKTsKK2V4dGVybiBpbnQgdGVtcGVfZ2V0X2luX2JvdW5kKHZtZUluV2luZG93Q2ZnX3Qg KiB2bWVJbik7CitleHRlcm4gaW50IHRlbXBlX3NldF9vdXRfYm91bmQodm1lT3V0V2luZG93 Q2ZnX3QgKiB2bWVPdXQpOworZXh0ZXJuIGludCB0ZW1wZV9nZXRfb3V0X2JvdW5kKHZtZU91 dFdpbmRvd0NmZ190ICogdm1lT3V0KTsKK2V4dGVybiBpbnQgdGVtcGVfc2V0dXBfbG0odm1l TG1DZmdfdCAqIHZtZUxtKTsKK2V4dGVybiBpbnQgdGVtcGVfd2FpdF9sbSh2bWVMbUNmZ190 ICogdm1lTG0pOworZXh0ZXJuIGludCB0ZW1wZV9kb19ybXcodm1lUm13Q2ZnX3QgKiB2bWVS bXcpOworZXh0ZXJuIGludCB0ZW1wZV9kb19kbWEodm1lRG1hUGFja2V0X3QgKiB2bWVEbWEp OworZXh0ZXJuIGludCB0ZW1wZV9nZW5lcmF0ZV9pcnEodmlycUluZm9fdCAqKTsKK2V4dGVy biBpbnQgdGVtcGVfYnVzX2Vycm9yX2NoayhpbnQpOworCitleHRlcm4gd2FpdF9xdWV1ZV9o ZWFkX3Qgdm1laW50X3F1ZXVlW107CisKK2ludCB2bWVfaXJxbG9nWzhdWzB4MTAwXTsKKwor Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgU29tZSBrZXJuZWxzIGRvbid0IHN1cHBs eSBwY2lfYnVzX21lbV9iYXNlX3BoeXMoKS4uLiB0aGlzIHN1YnJvdXRpbmUKKy8vICBwcm92 aWRlcyB0aGF0IGZ1bmN0aW9uYWxpdHkuCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwor dW5zaWduZWQgbG9uZyB2bWVfcGNpX2J1c19tZW1fYmFzZV9waHlzKHN0cnVjdCBwY2lfYnVz ICpidXMpCit7CisJc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlOwkKKwkKKwlob3NlID0g YnVzLT5zeXNkYXRhOworCWlmICghaG9zZSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIGhvc2Ut PnBjaV9tZW1fb2Zmc2V0OworfQorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICB2 bWVfc3luY19kYXRhKCkKKy8vICAgIEVuc3VyZSBjb21wbGV0aW9uIG9mIGFsbCBwcmV2aW91 c2x5IGlzc3VlZCBsb2Fkcy9zdG9yZXMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordm9p ZCB2bWVfc3luY19kYXRhKHZvaWQpCit7CisJYXNtKCJzeW5jIik7CQkvLyBQUEMgc3BlY2lm aWMuCisJYXNtKCJlaWVpbyIpOworfQorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8v ICB2bWVfZmx1c2hfbGluZSh2b2lkICpwdHIpCisvLyAgICBGbHVzaCAmIGludmFsaWRhdGUg YSBjYWNoZSBsaW5lIAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitleHRlcm4gdm9pZCBm bHVzaF9kY2FjaGVfcmFuZ2UodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyApOworCisj aWZkZWYgQ09ORklHX01WTUU2MTAwCit2b2lkIHZtZV9mbHVzaF9saW5lKHVuc2lnbmVkIGxv bmcgc3RhcnQpCit7CisJZmx1c2hfZGNhY2hlX3JhbmdlKHN0YXJ0LCBzdGFydCArIEwxX0NB Q0hFX0JZVEVTKTsKK30KKyNlbHNlCit2b2lkIHZtZV9mbHVzaF9saW5lKHVuc2lnbmVkIGxv bmcgc3RhcnQpIHsgfQorI2VuZGlmCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8g IHZtZV9mbHVzaF9yYW5nZSgpCisvLyAgICBGbHVzaCAmIGludmFsaWRhdGUgYSByYW5nZSBv ZiBtZW1vcnkKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjaWZkZWYgQ09ORklHX01W TUU2MTAwCit2b2lkIHZtZV9mbHVzaF9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNp Z25lZCBsb25nIGVuZCkKK3sKKwlmbHVzaF9kY2FjaGVfcmFuZ2Uoc3RhcnQsIGVuZCk7Cit9 CisjZWxzZQordm9pZCB2bWVfZmx1c2hfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5z aWduZWQgbG9uZyBlbmQpIHt9CisjZW5kaWYKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisvLyAgdm1lX2J1c19lcnJvcl9jaGsoKQorLy8gICAgIFJldHVybiAxIGlmIFZNRSBidXMg ZXJyb3Igb2NjdXJlZCwgMCBvdGhlcndpc2UuCisvLyAgICAgT3B0aW9uYWxseSBjbGVhciBW TUUgYnVzIGVycm9yIHN0YXR1cy4KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoraW50IHZt ZV9idXNfZXJyb3JfY2hrKGludCBjbHJmbGFnKQoreworCXZtZV9zeW5jX2RhdGEoKTsKKwlz d2l0Y2ggKHZtZWNoaXBfZGV2aWQpIHsKKwljYXNlIFBDSV9ERVZJQ0VfSURfVFVORFJBX0NB OTFDMDQyOgorCQlyZXR1cm4gKHVuaV9idXNfZXJyb3JfY2hrKGNscmZsYWcpKTsKKwkJYnJl YWs7CisJY2FzZSBQQ0lfREVWSUNFX0lEX1RVTkRSQV9UU0kxNDg6CisJCXJldHVybiAodGVt cGVfYnVzX2Vycm9yX2NoayhjbHJmbGFnKSk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gKDAp OworfQorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICB2bWVfZ2V0X3Nsb3RfbnVt CisvLyAgICBEZXRlcm1pbmUgdGhlIHNsb3QgbnVtYmVyIHRoYXQgd2UgYXJlIGluLiAgVXNl cyBDUi9DU1IgYmFzZSAKKy8vICAgIGFkZHJlc3MgcmVnIGlmIGl0IGNvbnRhaW5zIGEgdmFs aWQgdmFsdWUuICBJZiBub3QsIG9idGFpbnMKKy8vICAgIHNsb3QgbnVtYmVyIGZyb20gYm9h cmQgbGV2ZWwgcmVnaXN0ZXIuCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2ludCB2bWVf Z2V0X3Nsb3RfbnVtKHZvaWQpCit7CisJaW50IHNsb3RudW0gPSAwOworCisJLy8gZ2V0IHNs b3QgbnVtIGZyb20gVk1FIGNoaXAgcmVnIGlmIGl0IGlzIHNldC4KKwlzd2l0Y2ggKHZtZWNo aXBfZGV2aWQpIHsKKwljYXNlIFBDSV9ERVZJQ0VfSURfVFVORFJBX0NBOTFDMDQyOgorCQlz bG90bnVtID0gcmVhZGwodm1lY2hpcF9iYXNlYWRkciArIFZDU1JfQlMpOworCQlzbG90bnVt ID0gKHNsb3RudW0gPj4gMjcpICYgMHgxRjsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfREVWSUNF X0lEX1RVTkRSQV9UU0kxNDg6CisJCXNsb3RudW0gPSAqKGludCAqKSh2bWVjaGlwX2Jhc2Vh ZGRyICsgMHgyM0MpOworCQlzbG90bnVtID0gc2xvdG51bSAmIDB4MUY7CisJCXJldHVybiAo c2xvdG51bSk7CisJCWJyZWFrOworCX0KKworCS8vIEZvbGxvd2luZyBpcyBib2FyZCBzcGVj aWZpYyEhCisKKyNpZmRlZglNQ0dfTVZNRTI2MDAKKwlpZiAoc2xvdG51bSA9PSAwKQorCQlz bG90bnVtID0gfmluYigweDEwMDYpICYgMHgxRjsJLy8gR2VuZXNpczIgc2xvdCByZWdpc3Rl cgorI2VuZGlmCisjaWZkZWYJTUNHX01WTUUyNDAwCisJaWYgKHNsb3RudW0gPT0gMCkKKwkJ c2xvdG51bSA9IH5pbmIoMHgxMDA2KSAmIDB4MUY7CS8vIEdlbmVzaXMyIHNsb3QgcmVnaXN0 ZXIKKyNlbmRpZgorI2lmZGVmCU1DR19NVk1FMjMwMAorCWlmIChzbG90bnVtID09IDApCisJ CXNsb3RudW0gPSB+aW5iKDB4MTAwNikgJiAweDFGOwkvLyBHZW5lc2lzMiBzbG90IHJlZ2lz dGVyCisjZW5kaWYKKworCXJldHVybiAoc2xvdG51bSk7Cit9CisKKy8vLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorLy8gIHZtZV9nZXRfb3V0X2JvdW5kCisvLyAgICBSZXR1cm4gYXR0cmli dXRlcyBvZiBhbiBvdXRib3VuZCB3aW5kb3cuCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K K2ludCB2bWVfZ2V0X291dF9ib3VuZCh2bWVPdXRXaW5kb3dDZmdfdCAqIHZtZU91dCkKK3sK KwlpbnQgd2luZG93X251bWJlcjsKKworCXdpbmRvd19udW1iZXIgPSB2bWVPdXQtPndpbmRv d05icjsKKwltZW1zZXQodm1lT3V0LCAwLCBzaXplb2Yodm1lT3V0V2luZG93Q2ZnX3QpKTsK Kwl2bWVPdXQtPndpbmRvd05iciA9IHdpbmRvd19udW1iZXI7CisJc3dpdGNoICh2bWVjaGlw X2RldmlkKSB7CisJY2FzZSBQQ0lfREVWSUNFX0lEX1RVTkRSQV9DQTkxQzA0MjoKKwkJcmV0 dXJuICh1bmlfZ2V0X291dF9ib3VuZCh2bWVPdXQpKTsKKwkJYnJlYWs7CisJY2FzZSBQQ0lf REVWSUNFX0lEX1RVTkRSQV9UU0kxNDg6CisJCXJldHVybiAodGVtcGVfZ2V0X291dF9ib3Vu ZCh2bWVPdXQpKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAoMCk7Cit9CisKKy8vLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorLy8gIHZtZV9zZXRfb3V0X2JvdW5kCisvLyAgICBTZXQgYXR0 cmlidXRlcyBvZiBhbiBvdXRib3VuZCB3aW5kb3cuCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KK2ludCB2bWVfc2V0X291dF9ib3VuZCh2bWVPdXRXaW5kb3dDZmdfdCAqIHZtZU91dCkK K3sKKwlpbnQgd2luZG93X251bWJlciA9IHZtZU91dC0+d2luZG93TmJyOworCXVuc2lnbmVk IGludCBleGlzdGluZ19zaXplOworCWNoYXIgKnJlc19uYW1lID0gTlVMTDsKKworICAgICAg ICBpZiAodm1lT3V0LT53aW5kb3dOYnIgPiA3KSAKKyAgICAgICAgICAgICAgICByZXR1cm4g KC1FSU5WQUwpOworCisJaWYgKHZtZXBjaW1lbSA9PSAwKQorCQlyZXR1cm4gKC1FTk9NRU0p OworCisJLy8gQWxsb2NhdGUgYW5kIG1hcCBQQ0kgbWVtb3J5IHNwYWNlIGZvciB0aGlzIHdp bmRvdy4KKwlleGlzdGluZ19zaXplID0KKwkgICAgb3V0X3Jlc291cmNlW3dpbmRvd19udW1i ZXJdLmVuZCAtIG91dF9yZXNvdXJjZVt3aW5kb3dfbnVtYmVyXS5zdGFydDsKKworCWlmICgo dm1lT3V0LT53aW5kb3dFbmFibGUgPT0gMCkgfHwgCisJCQkoZXhpc3Rpbmdfc2l6ZSAhPSB2 bWVPdXQtPndpbmRvd1NpemVMKSkgeworCQlpZiAoZXhpc3Rpbmdfc2l6ZSAhPSAwKSB7CisJ CQlpZiAob3V0X2ltYWdlX3ZhW3dpbmRvd19udW1iZXJdICE9IDApIAorCQkJCWlvdW5tYXAo KGNoYXIgKilvdXRfaW1hZ2VfdmFbd2luZG93X251bWJlcl0pOworCQkJaWYgKG91dF9yZXNv dXJjZVt3aW5kb3dfbnVtYmVyXS5uYW1lICE9IE5VTEwpCisJCQkJa2ZyZWUob3V0X3Jlc291 cmNlW3dpbmRvd19udW1iZXJdLm5hbWUpOworCQkJcmVsZWFzZV9yZXNvdXJjZSgmb3V0X3Jl c291cmNlW3dpbmRvd19udW1iZXJdKTsKKwkJCW1lbXNldCgmb3V0X3Jlc291cmNlW3dpbmRv d19udW1iZXJdLCAwLCBzaXplb2Yoc3RydWN0IHJlc291cmNlKSk7CisJCX0KKwl9CisKKwlp ZiAoKHZtZU91dC0+d2luZG93RW5hYmxlKSAmJiAKKwkJCShleGlzdGluZ19zaXplICE9IHZt ZU91dC0+d2luZG93U2l6ZUwpKSB7CisKKwkJaWYgKHZtZU91dC0+d2luZG93U2l6ZUwgPT0g MCkKKwkJCXJldHVybiAoLUVJTlZBTCk7CisKKwkJcmVzX25hbWUgPSBrbWFsbG9jKDMyLCBH RlBfS0VSTkVMKTsKKwkJaWYgKCFyZXNfbmFtZSkKKwkJCXByaW50ayhLRVJOX0VSUiAidm1l ZHJ2OiBrbWFsbG9jKCkgZmFpbGVkIVxuIik7CisJCWVsc2UKKwkJCXNwcmludGYocmVzX25h bWUsICJWTUUgV2luZG93ICUwMXgiLCB3aW5kb3dfbnVtYmVyKTsKKwkJb3V0X3Jlc291cmNl W3dpbmRvd19udW1iZXJdLm5hbWUgPSAoY2hhciAqKXJlc19uYW1lOworCQlvdXRfcmVzb3Vy Y2Vbd2luZG93X251bWJlcl0uc3RhcnQgPSAwOworCQlvdXRfcmVzb3VyY2Vbd2luZG93X251 bWJlcl0uZW5kID0gdm1lT3V0LT53aW5kb3dTaXplTDsKKyNpZmRlZiBDT05GSUdfTVZNRTcx MDAKKwkJb3V0X3Jlc291cmNlW3dpbmRvd19udW1iZXJdLmZsYWdzID0gSU9SRVNPVVJDRV9N RU0gfCBJT1JFU09VUkNFX1BSRUZFVENIOworI2Vsc2UKKwkJb3V0X3Jlc291cmNlW3dpbmRv d19udW1iZXJdLmZsYWdzID0gSU9SRVNPVVJDRV9NRU07CisjZW5kaWYKKworCQlpZiAocGNp X2J1c19hbGxvY19yZXNvdXJjZSh2bWVfcGNpX2Rldi0+YnVzLAorCQkJCSAgICZvdXRfcmVz b3VyY2Vbd2luZG93X251bWJlcl0sCisJCQkJICAgdm1lT3V0LT53aW5kb3dTaXplTCwKKwkJ CQkgICB2bWVPdXQtPndpbmRvd1NpemVMLAorCQkJCSAgIFBDSUJJT1NfTUlOX01FTSwgCisj aWZkZWYgQ09ORklHX01WTUU3MTAwCisJCQkJICAgSU9SRVNPVVJDRV9QUkVGRVRDSCwKKyNl bHNlCisJCQkJICAgMCwgCisjZW5kaWYKKwkJCQkgICBOVUxMLCAKKwkJCSAgICAgICAgICAg TlVMTCkpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJ2bWVkcnY6IEZhaWxl ZCB0byBhbGxvY2F0ZSBtZW0gcmVzb3VyY2UgZm9yIHdpbmRvdyAlZCBzaXplIDB4JXggc3Rh cnQgMHgleFxuIiwKKwkJCSAgICAgICB3aW5kb3dfbnVtYmVyLCB2bWVPdXQtPndpbmRvd1Np emVMLAorCQkJICAgICAgIG91dF9yZXNvdXJjZVt3aW5kb3dfbnVtYmVyXS5zdGFydCk7CisJ CQlpZiAob3V0X3Jlc291cmNlW3dpbmRvd19udW1iZXJdLm5hbWUgIT0gTlVMTCkKKwkJCQlr ZnJlZShvdXRfcmVzb3VyY2Vbd2luZG93X251bWJlcl0ubmFtZSk7CisJCQltZW1zZXQoJm91 dF9yZXNvdXJjZVt3aW5kb3dfbnVtYmVyXSwgMCwgc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSkp OworCQkJcmV0dXJuICgtRU5PTUVNKTsKKwkJfQorCisJCW91dF9pbWFnZV92YVt3aW5kb3df bnVtYmVyXSA9IChpbnQpaW9yZW1hcChvdXRfcmVzb3VyY2Vbd2luZG93X251bWJlcl0uc3Rh cnQsCisJCQkJIHZtZU91dC0+d2luZG93U2l6ZUwpOworCQlpZiAob3V0X2ltYWdlX3ZhW3dp bmRvd19udW1iZXJdID09IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgCSJ2 bWVkcnY6IE5vIG1lbW9yeSBmb3Igb3V0Ym91bmQgd2luZG93XG4iKTsKKwkJCWlmIChvdXRf cmVzb3VyY2Vbd2luZG93X251bWJlcl0ubmFtZSAhPSBOVUxMKQorCQkJCWtmcmVlKG91dF9y ZXNvdXJjZVt3aW5kb3dfbnVtYmVyXS5uYW1lKTsKKwkJCXJlbGVhc2VfcmVzb3VyY2UoJm91 dF9yZXNvdXJjZVt3aW5kb3dfbnVtYmVyXSk7CisJCQltZW1zZXQoJm91dF9yZXNvdXJjZVt3 aW5kb3dfbnVtYmVyXSwgMCwgc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSkpOworCQkJcmV0dXJu ICgtRU5PTUVNKTsKKwkJfQorCQl2bWVPdXQtPnBjaUJ1c0FkZHJMID0gb3V0X3Jlc291cmNl W3dpbmRvd19udW1iZXJdLnN0YXJ0CisJICAgIAkJLSB2bWVfcGNpX2J1c19tZW1fYmFzZV9w aHlzKHZtZV9wY2lfZGV2LT5idXMpOworCX0KKworCXN3aXRjaCAodm1lY2hpcF9kZXZpZCkg eworCWNhc2UgUENJX0RFVklDRV9JRF9UVU5EUkFfQ0E5MUMwNDI6CisJCXJldHVybiAodW5p X3NldF9vdXRfYm91bmQodm1lT3V0KSk7CisJCWJyZWFrOworCWNhc2UgUENJX0RFVklDRV9J RF9UVU5EUkFfVFNJMTQ4OgorCQlyZXR1cm4gKHRlbXBlX3NldF9vdXRfYm91bmQodm1lT3V0 KSk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gKC1FTk9ERVYpOworfQorCisvKgorICogIHZt ZV9nZXRfaW5fYm91bmQKKyAqICAgIFJldHVybiBhdHRyaWJ1dGVzIG9mIGFuIGluYm91bmQg d2luZG93LgorICovCisKK2ludCB2bWVfZ2V0X2luX2JvdW5kKHZtZUluV2luZG93Q2ZnX3Qg KiB2bWVJbikKK3sKKwlpbnQgd2luZG93X251bWJlcjsKKworCXdpbmRvd19udW1iZXIgPSB2 bWVJbi0+d2luZG93TmJyOworCW1lbXNldCh2bWVJbiwgMCwgc2l6ZW9mKHZtZUluV2luZG93 Q2ZnX3QpKTsKKwl2bWVJbi0+d2luZG93TmJyID0gd2luZG93X251bWJlcjsKKwlzd2l0Y2gg KHZtZWNoaXBfZGV2aWQpIHsKKwljYXNlIFBDSV9ERVZJQ0VfSURfVFVORFJBX0NBOTFDMDQy OgorCQlyZXR1cm4gKHVuaV9nZXRfaW5fYm91bmQodm1lSW4pKTsKKwkJYnJlYWs7CisJY2Fz ZSBQQ0lfREVWSUNFX0lEX1RVTkRSQV9UU0kxNDg6CisJCXJldHVybiAodGVtcGVfZ2V0X2lu X2JvdW5kKHZtZUluKSk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gKC1FTk9ERVYpOworfQor CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICB2bWVfc2V0X2luX2JvdW5kCisvLyAg ICBTZXQgYXR0cmlidXRlcyBvZiBhbiBpbmJvdW5kIHdpbmRvdy4KKy8vLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQoraW50IHZtZV9zZXRfaW5fYm91bmQodm1lSW5XaW5kb3dDZmdfdCAqIHZt ZUluKQoreworCWludCBzdGF0dXMgPSAtRU5PREVWOworCisJLy8gTWFzayBvZmYgVk1FIGFk ZHJlc3MgYml0cyBwZXIgYWRkcmVzcyBzcGFjZS4KKwlzd2l0Y2ggKHZtZUluLT5hZGRyU3Bh Y2UpIHsKKwljYXNlIFZNRV9BMTY6CisJCXZtZUluLT52bWVBZGRyVSA9IDA7CisJCXZtZUlu LT52bWVBZGRyTCAmPSAweEZGRkY7CisJCWJyZWFrOworCWNhc2UgVk1FX0EyNDoKKwljYXNl IFZNRV9DUkNTUjoKKwkJdm1lSW4tPnZtZUFkZHJVID0gMDsKKwkJdm1lSW4tPnZtZUFkZHJM ICY9IDB4RkZGRkZGOworCQlicmVhazsKKwljYXNlIFZNRV9BMzI6CisJCXZtZUluLT52bWVB ZGRyVSA9IDA7CisJCWJyZWFrOworCWNhc2UgVk1FX0E2NDoKKwljYXNlIFZNRV9VU0VSMToK KwljYXNlIFZNRV9VU0VSMjoKKwljYXNlIFZNRV9VU0VSMzoKKwljYXNlIFZNRV9VU0VSNDoK KwkJYnJlYWs7CisJfQorCisJc3dpdGNoICh2bWVjaGlwX2RldmlkKSB7CisJY2FzZSBQQ0lf REVWSUNFX0lEX1RVTkRSQV9DQTkxQzA0MjoKKwkJc3RhdHVzID0gdW5pX3NldF9pbl9ib3Vu ZCh2bWVJbik7CisJCWJyZWFrOworCWNhc2UgUENJX0RFVklDRV9JRF9UVU5EUkFfVFNJMTQ4 OgorCQlzdGF0dXMgPSB0ZW1wZV9zZXRfaW5fYm91bmQodm1lSW4pOworCQlicmVhazsKKwl9 CisKKwlpZiAoIXN0YXR1cykgeworCQl2bWVjaGlwX2ludGVyYm9hcmRfZGF0YS0+aW5Cb3Vu ZFZtZVNpemVbdm1lSW4tPndpbmRvd05icl0gPQorCQkgICAgdm1lSW4tPndpbmRvd1NpemVM OworCQl2bWVfZmx1c2hfbGluZSgodW5zaWduZWQgbG9uZykoJnZtZWNoaXBfaW50ZXJib2Fy ZF9kYXRhLT4KKwkJCSAgICAgICBpbkJvdW5kVm1lU2l6ZVt2bWVJbi0+d2luZG93TmJyXSkp OworCisJCXZtZWNoaXBfaW50ZXJib2FyZF9kYXRhLT5pbkJvdW5kVm1lQWRkckhpW3ZtZUlu LT53aW5kb3dOYnJdID0KKwkJICAgIHZtZUluLT52bWVBZGRyVTsKKwkJdm1lX2ZsdXNoX2xp bmUoKHVuc2lnbmVkIGxvbmcpKCZ2bWVjaGlwX2ludGVyYm9hcmRfZGF0YS0+CisJCQkgICAg ICAgaW5Cb3VuZFZtZUFkZHJIaVt2bWVJbi0+d2luZG93TmJyXSkpOworCisJCXZtZWNoaXBf aW50ZXJib2FyZF9kYXRhLT5pbkJvdW5kVm1lQWRkckxvW3ZtZUluLT53aW5kb3dOYnJdID0K KwkJICAgIHZtZUluLT52bWVBZGRyTDsKKwkJdm1lX2ZsdXNoX2xpbmUoKHVuc2lnbmVkIGxv bmcpKCZ2bWVjaGlwX2ludGVyYm9hcmRfZGF0YS0+CisJCQkgICAgICAgaW5Cb3VuZFZtZUFk ZHJMb1t2bWVJbi0+d2luZG93TmJyXSkpOworCisJCXZtZWNoaXBfaW50ZXJib2FyZF9kYXRh LT5pbkJvdW5kVm1lQU1bdm1lSW4tPndpbmRvd05icl0gPQorCQkgICAgdm1lSW4tPmFkZHJT cGFjZTsKKwkJdm1lX2ZsdXNoX2xpbmUoKHVuc2lnbmVkIGxvbmcpKCZ2bWVjaGlwX2ludGVy Ym9hcmRfZGF0YS0+CisJCQkgICAgICAgaW5Cb3VuZFZtZUFNW3ZtZUluLT53aW5kb3dOYnJd KSk7CisJfQorCisJcmV0dXJuIChzdGF0dXMpOworfQorCisvLy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKy8vICB2bWVfZG9fZG1hKCkKKy8vICAgICBQZXJmb3JtIHRoZSByZXF1ZXN0ZWQg RE1BIG9wZXJhdGlvbi4KKy8vICAgICBDYWxsZXIgbXVzdCBhc3N1cmUgZXhjbHVzaXZlIGFj Y2VzcyB0byB0aGUgRE1BIGNoYW5uZWwuICAKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor aW50IHZtZV9kb19kbWEodm1lRG1hUGFja2V0X3QgKiB2bWVEbWEpCit7CisJaW50IHJldHZh bCA9IC1FTk9ERVY7CisKKwlzd2l0Y2ggKHZtZWNoaXBfZGV2aWQpIHsKKwljYXNlIFBDSV9E RVZJQ0VfSURfVFVORFJBX0NBOTFDMDQyOgorCQlyZXR2YWwgPSB1bmlfZG9fZG1hKHZtZURt YSk7CisJCWJyZWFrOworCWNhc2UgUENJX0RFVklDRV9JRF9UVU5EUkFfVFNJMTQ4OgorCQly ZXR2YWwgPSB0ZW1wZV9kb19kbWEodm1lRG1hKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJu IChyZXR2YWwpOworfQorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICB2bWVfZ2V0 X3Nsb3RfaW5mbygpCisvLyAgICAgT2J0YWluIGluZm9ybWF0aW9uIGFib3V0IHRoZSBib2Fy ZCAoaWYgYW55KSB0aGF0IGlzIHByZXNlbnQgaW4KKy8vICAgICBhIHNwZWNpZmllZCBWTUUg YnVzIHNsb3QuICAgCisvLworLy8gICAgIChOb3RlIFZNRSBzbG90IG51bWJlcnMgc3RhcnQg YXQgMSwgbm90IDApLgorLy8gICAgIERlcGVuZHMgb24gYm9hcmQgbWFwcGluZyBpbiBDUy9D U1Igc3BhY2UuICBCb2FyZHMgd2hpY2ggZG8gbm90IAorLy8gICAgIHN1cHBvcnQgb3IgYXJl IG5vdCBjb25maWd1cmVkIHRvIHJlc3BvbmQgaW4gQ1MvQ1NSIHNwYWNlIHdpbGwgCisvLyAg ICAgbm90IGJlIGRldGVjdGVkIGJ5IHRoaXMgcm91dGluZS4KKy8vLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQoraW50IHZtZV9nZXRfc2xvdF9pbmZvKHZtZUluZm9DZmdfdCAqIHZtZUluZm8p Cit7CisJaW50IHNsb3Rfb2ZfaW50ZXJlc3Q7CisJdW5zaWduZWQgaW50IHRlbXA7CisJaW50 IGk7CisKKwlzdHJ1Y3Qgdm1lU2hhcmVkRGF0YSAqcmVtb3RlX2RhdGE7CisJdW5zaWduZWQg aW50ICpyZW1vdGVfY3NyOworCisJc2xvdF9vZl9pbnRlcmVzdCA9IHZtZUluZm8tPnZtZVNs b3ROdW07CisJbWVtc2V0KHZtZUluZm8sIDAsIHNpemVvZih2bWVJbmZvQ2ZnX3QpKTsKKwor CWlmIChzbG90X29mX2ludGVyZXN0ID4gMjEpIHsKKwkJcmV0dXJuICgtRUlOVkFMKTsKKwl9 CisJLy8gRmlsbCBpbiBpbmZvcm1hdGlvbiBmb3Igb3VyIG93biBib2FyZC4KKwlpZiAoKHNs b3Rfb2ZfaW50ZXJlc3QgPT0gMCkgfHwgKHNsb3Rfb2ZfaW50ZXJlc3QgPT0gdm1lX3Nsb3Ru dW0pKSB7CisJCXZtZUluZm8tPnZtZVNsb3ROdW0gPSB2bWVfc2xvdG51bTsKKwkJdm1lSW5m by0+Ym9hcmRSZXNwb25kZWQgPSAxOworCQl2bWVJbmZvLT5zeXNDb25GbGFnID0gdm1lX3N5 c2NvbjsKKwkJdm1lSW5mby0+dm1lQ29udHJvbGxlcklEID0KKwkJICAgIFBDSV9WRU5ET1Jf SURfVFVORFJBIHwgKHZtZWNoaXBfZGV2aWQgPDwgMTYpOworCQl2bWVJbmZvLT52bWVDb250 cm9sbGVyUmV2ID0gdm1lY2hpcF9yZXZpc2lvbjsKKwkJc3RyY3B5KHZtZUluZm8tPm9zTmFt ZSwgIkxpbnV4Iik7CisJCXZtZUluZm8tPnZtZURyaXZlclJldiA9IFZNRURSVl9SRVY7CisJ CXJldHVybiAoMCk7CisJfQorCS8vIEZpbGwgaW4gaW5mb3JtYXRpb24gZm9yIGFub3RoZXIg Ym9hcmQgaW4gdGhlIGNoYXNzaXMuCisJdm1lSW5mby0+dm1lU2xvdE51bSA9IHNsb3Rfb2Zf aW50ZXJlc3Q7CisJaWYgKG91dF9pbWFnZV92YVs3XSA9PSAwKSB7CisJCXJldHVybiAoLUVO T0RFVik7CisJfQorCS8vIFNlZSBpZiBzb21ldGhpbmcgcmVzcG9uZHMgYXQgdGhhdCBzbG90 LgorCXJlbW90ZV9kYXRhID0gKHN0cnVjdCB2bWVTaGFyZWREYXRhICopCisJICAgICh2bWVJ bmZvLT52bWVTbG90TnVtICogNTEyICogMTAyNCArIG91dF9pbWFnZV92YVs3XSk7CisKKwly ZW1vdGVfY3NyID0gKHVuc2lnbmVkIGludCAqKXJlbW90ZV9kYXRhOworCXRlbXAgPSByZW1v dGVfY3NyWzB4N0ZGRkMgLyA0XTsKKwlpZiAodm1lX2J1c19lcnJvcl9jaGsoMSkpIHsKKwkJ cmV0dXJuICgwKTsJLy8gbm8gcmVzcG9uc2UuCisJfQorCWlmICh0ZW1wICE9IChzbG90X29m X2ludGVyZXN0IDw8IDMpKSB7CisJCXJldHVybiAoMCk7CS8vIG5vbi1zZW5zaWNhbCByZXNw b25zZS4KKwl9CisJdm1lSW5mby0+Ym9hcmRSZXNwb25kZWQgPSAxOworCXZtZUluZm8tPnZt ZUNvbnRyb2xsZXJJRCA9IHJlYWRsKCZyZW1vdGVfY3NyWzB4N0YwMDAgLyA0XSk7CisJdm1l SW5mby0+dm1lQ29udHJvbGxlclJldiA9IHJlYWRsKCZyZW1vdGVfY3NyWzB4N0YwMDggLyA0 XSkgJiAweEZGOworCisJLy8gSWYgdGhlcmUgaXMgbm8gdmFsaWQgZHJpdmVyIGRhdGEgc3Ry dWN0dXJlIHRoZXJlLCAKKwkvLyBub3RoaW5nIGxlZnQgdG8gZG8KKworCWlmIChzdHJjbXAo IlZNRSIsIHJlbW90ZV9kYXRhLT52YWxpZGl0eTEpIHx8CisJICAgIHN0cmNtcCgiUkRZIiwg cmVtb3RlX2RhdGEtPnZhbGlkaXR5MikpIHsKKwkJcmV0dXJuICgwKTsKKwl9CisJLy8gQ29w eSBpbmZvcm1hdGlvbiBmcm9tIHN0cnVjdCAKKwl2bWVJbmZvLT52bWVTaGFyZWREYXRhVmFs aWQgPSAxOworCXZtZUluZm8tPnZtZURyaXZlclJldiA9IHJlbW90ZV9kYXRhLT5kcml2ZXJS ZXY7CisJc3RybmNweSh2bWVJbmZvLT5vc05hbWUsIHJlbW90ZV9kYXRhLT5vc25hbWUsIDgp OworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJdm1lSW5mby0+dm1lQWRkckhpW2ld ID0gcmVtb3RlX2RhdGEtPmluQm91bmRWbWVBZGRySGlbaV07CisJCXZtZUluZm8tPnZtZUFk ZHJMb1tpXSA9IHJlbW90ZV9kYXRhLT5pbkJvdW5kVm1lQWRkckxvW2ldOworCQl2bWVJbmZv LT52bWVBbVtpXSA9IHJlbW90ZV9kYXRhLT5pbkJvdW5kVm1lQU1baV07CisJCXZtZUluZm8t PnZtZVNpemVbaV0gPSByZW1vdGVfZGF0YS0+aW5Cb3VuZFZtZVNpemVbaV07CisJfQorCisJ cmV0dXJuICgwKTsKK30KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgdm1lX2dl dF9yZXF1ZXN0b3IKKy8vICAgIFJldHVybiBjdXJyZW50IFZNRSBidXMgcmVxdWVzdG9yIGF0 dHJpYnV0ZXMuCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2ludCB2bWVfZ2V0X3JlcXVl c3Rvcih2bWVSZXF1ZXN0ZXJDZmdfdCAqIHZtZVJlcSkKK3sKKwltZW1zZXQodm1lUmVxLCAw LCBzaXplb2Yodm1lUmVxdWVzdGVyQ2ZnX3QpKTsKKwlzd2l0Y2ggKHZtZWNoaXBfZGV2aWQp IHsKKwljYXNlIFBDSV9ERVZJQ0VfSURfVFVORFJBX0NBOTFDMDQyOgorCQlyZXR1cm4gKHVu aV9nZXRfcmVxdWVzdG9yKHZtZVJlcSkpOworCQlicmVhazsKKwljYXNlIFBDSV9ERVZJQ0Vf SURfVFVORFJBX1RTSTE0ODoKKwkJcmV0dXJuICh0ZW1wZV9nZXRfcmVxdWVzdG9yKHZtZVJl cSkpOworCQlicmVhazsKKwl9CisJcmV0dXJuICgtRU5PREVWKTsKK30KKworLy8tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisvLyAgdm1lX3NldF9yZXF1ZXN0b3IKKy8vICAgIFNldCBWTUUg YnVzIHJlcXVlc3RvciBhdHRyaWJ1dGVzLgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitp bnQgdm1lX3NldF9yZXF1ZXN0b3Iodm1lUmVxdWVzdGVyQ2ZnX3QgKiB2bWVSZXEpCit7CisJ aWYgKHZtZVJlcS0+cmVxdWVzdExldmVsID4gMykgeworCQlyZXR1cm4gKC1FSU5WQUwpOwor CX0KKworCXN3aXRjaCAodm1lY2hpcF9kZXZpZCkgeworCWNhc2UgUENJX0RFVklDRV9JRF9U VU5EUkFfQ0E5MUMwNDI6CisJCXJldHVybiAodW5pX3NldF9yZXF1ZXN0b3Iodm1lUmVxKSk7 CisJCWJyZWFrOworCWNhc2UgUENJX0RFVklDRV9JRF9UVU5EUkFfVFNJMTQ4OgorCQlyZXR1 cm4gKHRlbXBlX3NldF9yZXF1ZXN0b3Iodm1lUmVxKSk7CisJCWJyZWFrOworCX0KKwlyZXR1 cm4gKC1FTk9ERVYpOworfQorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICB2bWVf Z2V0X2FyYml0ZXIKKy8vICAgIFJldHVybiBWTUUgYnVzIGFyYml0ZXIgYXR0cmlidXRlcy4K Ky8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoraW50IHZtZV9nZXRfYXJiaXRlcih2bWVBcmJp dGVyQ2ZnX3QgKiB2bWVBcmIpCit7CisJLy8gT25seSB2YWxpZCBmb3Igc3lzdGVtIGNvbnRy b2xsZXIuCisJaWYgKHZtZV9zeXNjb24gPT0gMCkgeworCQlyZXR1cm4gKC1FSU5WQUwpOwor CX0KKwltZW1zZXQodm1lQXJiLCAwLCBzaXplb2Yodm1lQXJiaXRlckNmZ190KSk7CisJc3dp dGNoICh2bWVjaGlwX2RldmlkKSB7CisJY2FzZSBQQ0lfREVWSUNFX0lEX1RVTkRSQV9DQTkx QzA0MjoKKwkJcmV0dXJuICh1bmlfZ2V0X2FyYml0ZXIodm1lQXJiKSk7CisJCWJyZWFrOwor CWNhc2UgUENJX0RFVklDRV9JRF9UVU5EUkFfVFNJMTQ4OgorCQlyZXR1cm4gKHRlbXBlX2dl dF9hcmJpdGVyKHZtZUFyYikpOworCQlicmVhazsKKwl9CisJcmV0dXJuICgtRU5PREVWKTsK K30KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgdm1lX3NldF9hcmJpdGVyCisv LyAgICBTZXQgVk1FIGJ1cyBhcmJpdGVyIGF0dHJpYnV0ZXMuCisvLy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KK2ludCB2bWVfc2V0X2FyYml0ZXIodm1lQXJiaXRlckNmZ190ICogdm1lQXJi KQoreworCS8vIE9ubHkgdmFsaWQgZm9yIHN5c3RlbSBjb250cm9sbGVyLgorCWlmICh2bWVf c3lzY29uID09IDApIHsKKwkJcmV0dXJuICgtRUlOVkFMKTsKKwl9CisJc3dpdGNoICh2bWVj aGlwX2RldmlkKSB7CisJY2FzZSBQQ0lfREVWSUNFX0lEX1RVTkRSQV9DQTkxQzA0MjoKKwkJ cmV0dXJuICh1bmlfc2V0X2FyYml0ZXIodm1lQXJiKSk7CisJCWJyZWFrOworCWNhc2UgUENJ X0RFVklDRV9JRF9UVU5EUkFfVFNJMTQ4OgorCQlyZXR1cm4gKHRlbXBlX3NldF9hcmJpdGVy KHZtZUFyYikpOworCQlicmVhazsKKwl9CisJcmV0dXJuICgtRU5PREVWKTsKK30KKworLy8t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgdm1lX2dlbmVyYXRlX2lycQorLy8gICAgR2Vu ZXJhdGUgYSBWTUUgYnVzIGludGVycnVwdCBhdCB0aGUgc3BlY2lmaWVkIGxldmVsICYgdmVj dG9yLgorLy8KKy8vICBDYWxsZXIgbXVzdCBhc3N1cmUgZXhjbHVzaXZlIGFjY2VzcyB0byB0 aGUgVklSUSBnZW5lcmF0b3IuCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2ludCB2bWVf Z2VuZXJhdGVfaXJxKHZpcnFJbmZvX3QgKiB2bWVJcnEpCit7CisJaW50IHN0YXR1cyA9IC1F Tk9ERVY7CisKKwkvLyBPbmx5IHZhbGlkIGZvciBub24gc3lzdGVtIGNvbnRyb2xsZXIuCisJ aWYgKHZtZV9zeXNjb24gIT0gMCkgeworCQlyZXR1cm4gKC1FSU5WQUwpOworCX0KKwlpZiAo KHZtZUlycS0+bGV2ZWwgPCAxKSB8fCAodm1lSXJxLT5sZXZlbCA+IDcpKSB7CisJCXJldHVy biAoLUVJTlZBTCk7CisJfQorCWlmICgodm1lSXJxLT52ZWN0b3IgPCAwKSB8fCAodm1lSXJx LT52ZWN0b3IgPiAweEZGKSkgeworCQlyZXR1cm4gKC1FSU5WQUwpOworCX0KKworCXN3aXRj aCAodm1lY2hpcF9kZXZpZCkgeworCWNhc2UgUENJX0RFVklDRV9JRF9UVU5EUkFfQ0E5MUMw NDI6CisJCXN0YXR1cyA9IHVuaV9nZW5lcmF0ZV9pcnEodm1lSXJxKTsKKwkJYnJlYWs7CisJ Y2FzZSBQQ0lfREVWSUNFX0lEX1RVTkRSQV9UU0kxNDg6CisJCXN0YXR1cyA9IHRlbXBlX2dl bmVyYXRlX2lycSh2bWVJcnEpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gKHN0YXR1cyk7 Cit9CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gIHZtZV9nZXRfaXJxX3N0YXR1 cygpCisvLyAgICBXYWl0IGZvciBhIHNwZWNpZmljIG9yIGFueSBWTUUgYnVzIGludGVycnVw dCB0byBvY2N1ci4KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoraW50IHZtZV9nZXRfaXJx X3N0YXR1cyh2aXJxSW5mb190ICogdm1lSXJxKQoreworCWludCBpLCBqOworCisJLy8gT25s eSB2YWxpZCBmb3Igc3lzdGVtIGNvbnRyb2xsZXIuCisJaWYgKHZtZV9zeXNjb24gPT0gMCkg eworCQlyZXR1cm4gKC1FSU5WQUwpOworCX0KKwlpZiAoKHZtZUlycS0+bGV2ZWwgPj0gOCkg fHwgKHZtZUlycS0+dmVjdG9yID4gMHhGRikpIHsKKwkJcmV0dXJuICgtRUlOVkFMKTsKKwl9 CisJaWYgKCh2bWVJcnEtPmxldmVsID09IDApICYmICh2bWVJcnEtPnZlY3RvciAhPSAwKSkg eworCQlyZXR1cm4gKC1FSU5WQUwpOworCX0KKworCXZtZUlycS0+dGltZU91dEZsYWcgPSAw OworCisJaWYgKHZtZUlycS0+bGV2ZWwgPT0gMCkgeworCQlpZiAoaW50ZXJydXB0aWJsZV9z bGVlcF9vbl90aW1lb3V0KCZ2bWVpbnRfcXVldWVbMF0sCisJCQl2bWVJcnEtPndhaXRUaW1l KSAhPSAwKSB7CisJCQlmb3IgKGkgPSAxOyBpIDwgODsgaSsrKSB7CisJCQkJZm9yIChqID0g MDsgaiA8PSAweEZGOyBqKyspIHsKKwkJCQkJaWYgKHZtZV9pcnFsb2dbaV1bal0gIT0gMCkg eworCQkJCQkJdm1lSXJxLT5sZXZlbCA9IGk7CisJCQkJCQl2bWVJcnEtPnZlY3RvciA9IGo7 CisJCQkJCQlyZXR1cm4gKDApOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9IGVsc2UgCisJ CQl2bWVJcnEtPnRpbWVPdXRGbGFnID0gMTsKKwl9IGVsc2UgeworCQlpZiAod2FpdF9ldmVu dF9pbnRlcnJ1cHRpYmxlKHZtZWludF9xdWV1ZVt2bWVJcnEtPmxldmVsXSwKKwkJCSh2bWVf aXJxbG9nW3ZtZUlycS0+bGV2ZWxdW3ZtZUlycS0+dmVjdG9yXSAhPSAwKSkgPT0gMCkgewor CQkJCXZtZUlycS0+dGltZU91dEZsYWcgPSAxOworCQl9CisJfQorIAorCXJldHVybiAoMCk7 Cit9CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gIHZtZV9jbHJfaXJxX3N0YXR1 cygpCisvLyAgICBDbGVhciBpcnEgbG9nIG9mIGEgc3BlY2lmaWMgb3IgYWxsIFZNRSBpbnRl cnJ1cHRzLgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitpbnQgdm1lX2Nscl9pcnFfc3Rh dHVzKHZpcnFJbmZvX3QgKiB2bWVJcnEpCit7CisJaW50IGksIGo7CisKKwkvLyBPbmx5IHZh bGlkIGZvciBzeXN0ZW0gY29udHJvbGxlci4KKwlpZiAodm1lX3N5c2NvbiA9PSAwKSB7CisJ CXJldHVybiAoLUVJTlZBTCk7CisJfQorCS8vIFNhbml0eSBjaGVjayBpbnB1dAorCWlmICgo dm1lSXJxLT5sZXZlbCA+PSA4KSB8fCAodm1lSXJxLT52ZWN0b3IgPiAweEZGKSkgeworCQly ZXR1cm4gKC1FSU5WQUwpOworCX0KKwlpZiAoKHZtZUlycS0+bGV2ZWwgPT0gMCkgJiYgKHZt ZUlycS0+dmVjdG9yICE9IDApKSB7CisJCXJldHVybiAoLUVJTlZBTCk7CisJfQorCisJaWYg KCh2bWVJcnEtPmxldmVsID09IDApICYmICh2bWVJcnEtPnZlY3RvciA9PSAwKSkgeworCQkv LyBDbGVhciBhbGwgaXJxcy4KKwkJZm9yIChpID0gMTsgaSA8IDg7IGkrKykgeworCQkJZm9y IChqID0gMDsgaiA8PSAweEZGOyBqKyspIHsKKwkJCQl2bWVfaXJxbG9nW2ldW2pdID0gMDsK KwkJCX0KKwkJfQorCX0KKwkvLyBDbGVhciBhIHNpbmdsZSBpcnEuCisJdm1lX2lycWxvZ1t2 bWVJcnEtPmxldmVsXVt2bWVJcnEtPnZlY3Rvcl0gPSAwOworCXJldHVybiAoMCk7Cit9CisK Ky8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gIHZtZV9kb19ybXcoKQorLy8gICAgUGVy Zm9ybSBhIFJNVyBvcGVyYXRpb24gb24gdGhlIFZNRSBidXMuCisvLy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KK2ludCB2bWVfZG9fcm13KHZtZVJtd0NmZ190ICogdm1lUm13KQoreworCXN3 aXRjaCAodm1lY2hpcF9kZXZpZCkgeworCWNhc2UgUENJX0RFVklDRV9JRF9UVU5EUkFfQ0E5 MUMwNDI6CisJCXJldHVybiAodW5pX2RvX3Jtdyh2bWVSbXcpKTsKKwkJYnJlYWs7CisJY2Fz ZSBQQ0lfREVWSUNFX0lEX1RVTkRSQV9UU0kxNDg6CisJCXJldHVybiAodGVtcGVfZG9fcm13 KHZtZVJtdykpOworCQlicmVhazsKKwl9CisJcmV0dXJuICgtRU5PREVWKTsKK30KKworLy8t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgdm1lX3NldHVwX2xtKCkKKy8vICAgIFNldHVw IHRoZSBWTUUgYnVzIGxvY2F0aW9uIG1vbml0b3IgdG8gZGV0ZWN0IHRoZSBzcGVjaWZpZWQg YWNjZXNzLgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitpbnQgdm1lX3NldHVwX2xtKHZt ZUxtQ2ZnX3QgKiB2bWVMbSkKK3sKKwlzd2l0Y2ggKHZtZWNoaXBfZGV2aWQpIHsKKwljYXNl IFBDSV9ERVZJQ0VfSURfVFVORFJBX0NBOTFDMDQyOgorCQlyZXR1cm4gKHVuaV9zZXR1cF9s bSh2bWVMbSkpOworCQlicmVhazsKKwljYXNlIFBDSV9ERVZJQ0VfSURfVFVORFJBX1RTSTE0 ODoKKwkJcmV0dXJuICh0ZW1wZV9zZXR1cF9sbSh2bWVMbSkpOworCQlicmVhazsKKwl9CisJ cmV0dXJuICgtRU5PREVWKTsKK30KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAg dm1lX3dhaXRfbG0oKQorLy8gICAgV2FpdCBmb3IgdGhlIGxvY2F0aW9uIG1vbml0b3IgdG8g dHJpZ2dlci4KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoraW50IHZtZV93YWl0X2xtKHZt ZUxtQ2ZnX3QgKiB2bWVMbSkKK3sKKwlzd2l0Y2ggKHZtZWNoaXBfZGV2aWQpIHsKKwljYXNl IFBDSV9ERVZJQ0VfSURfVFVORFJBX0NBOTFDMDQyOgorCQlyZXR1cm4gKHVuaV93YWl0X2xt KHZtZUxtKSk7CisJCWJyZWFrOworCWNhc2UgUENJX0RFVklDRV9JRF9UVU5EUkFfVFNJMTQ4 OgorCQlyZXR1cm4gKHRlbXBlX3dhaXRfbG0odm1lTG0pKTsKKwkJYnJlYWs7CisJfQorCXJl dHVybiAoLUVOT0RFVik7Cit9CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gIHZt ZV9pbml0KCkKKy8vICAgIEluaXRpYWxpemUgdGhlIFZNRSBicmlkZ2UuCisvLy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KK2ludCB2bWVfaW5pdCh2b2lkICpkcml2ZXJkYXRhKQoreworCXN3 aXRjaCAodm1lY2hpcF9kZXZpZCkgeworCWNhc2UgUENJX0RFVklDRV9JRF9UVU5EUkFfQ0E5 MUMwNDI6CisJCXJldHVybiAodW5pX2luaXQoZHJpdmVyZGF0YSkpOworCQlicmVhazsKKwlj YXNlIFBDSV9ERVZJQ0VfSURfVFVORFJBX1RTSTE0ODoKKwkJcmV0dXJuICh0ZW1wZV9pbml0 KGRyaXZlcmRhdGEpKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAoMCk7Cit9CmRpZmYgLXUg LS1uZXctZmlsZSAtLXJlY3Vyc2l2ZSBsaW51eC0yLjYuMjkuNi5vcmlnL2RyaXZlcnMvdm1l L3ZtZWRydi5oIGxpbnV4LTIuNi4yOS42Lm1vZC9kcml2ZXJzL3ZtZS92bWVkcnYuaAotLS0g bGludXgtMi42LjI5LjYub3JpZy9kcml2ZXJzL3ZtZS92bWVkcnYuaAkxOTY5LTEyLTMxIDE3 OjAwOjAwLjAwMDAwMDAwMCAtMDcwMAorKysgbGludXgtMi42LjI5LjYubW9kL2RyaXZlcnMv dm1lL3ZtZWRydi5oCTIwMDktMDctMjEgMTE6Mjg6MTguMDAwMDAwMDAwIC0wNzAwCkBAIC0w LDAgKzEsNDQ3IEBACisvKgorICogdm1lZHJ2LmgKKyAqCisgKiBBcHBsaWNhdGlvbiBpbnRl cmZhY2UgdG8gVk1FIGRldmljZSBub2RlcworICoKKyAqIEF1dGhvcnM6IFRvbSBBcm1pc3Rl YWQsIEFqaXQgUHJlbQorICogQ29weXJpZ2h0IDIwMDQtMjAwNyBNb3Rvcm9sYSBJbmMuCisg KgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUg R05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNl bnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLwor CisvKgorICogVGhlIHJlc2VydmVkIGVsZW1lbnRzIGluIHRoZSBmb2xsb3dpbmcgc3RydWN0 dXJlcyBhcmUgCisgKiBpbnRlbmRlZCB0byBhbGxvdyBmdXR1cmUgdmVyc2lvbnMgb2YgdGhl IGRyaXZlciB0byAKKyAqIG1haW50YWluIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiAgQXBw bGljYXRpb25zIHNob3VsZCAKKyAqIGluaXRpYWxpemUgcmVzZXJ2ZWQgbG9jYXRpb25zIHRv IHplcm8uCisgKi8KKworI2lmbmRlZglWTUVEUlZfSAorI2RlZmluZQlWTUVEUlZfSAorCisj ZGVmaW5lCVZNRURSVl9SRVYJMHgwMzAxCisKKyNkZWZpbmUJVk1FX01JTk9SX1RZUEVfTUFT SwkweEYwCisjZGVmaW5lCVZNRV9NSU5PUl9PVVQJMHgwMAorI2RlZmluZQlWTUVfTUlOT1Jf RE1BCTB4MTAKKyNkZWZpbmUJVk1FX01JTk9SX01JU0MJMHgyMAorI2RlZmluZQlWTUVfTUlO T1JfU0xPVFMxCTB4MzAKKyNkZWZpbmUJVk1FX01JTk9SX1NMT1RTMgkweDQwCisKKyNkZWZp bmUJVk1FX01JTk9SX0NUTAkweDIwCisjZGVmaW5lCVZNRV9NSU5PUl9SRUdTCTB4MjEKKyNk ZWZpbmUJVk1FX01JTk9SX1JNVwkweDIyCisjZGVmaW5lCVZNRV9NSU5PUl9MTQkweDIzCisj ZGVmaW5lCVZNRV9NQVhfV0lORE9XUwk4CisKKyNpZm5kZWYJUENJX0RFVklDRV9JRF9UVU5E UkFfVFNJMTQ4CisjZGVmaW5lCVBDSV9ERVZJQ0VfSURfVFVORFJBX1RTSTE0OCAweDE0OAor I2VuZGlmCisKKyNpZm5kZWYJUENJX0RFVklDRV9JRF9UVU5EUkFfVEVNUEUKKyNkZWZpbmUJ UENJX0RFVklDRV9JRF9UVU5EUkFfVEVNUEUgMHgxNDgKKyNlbmRpZgorCisvKgorICogIFZN RSBhY2Nlc3MgdHlwZSBkZWZpbml0aW9ucworICovCisjZGVmaW5lCVZNRV9EQVRBCQkxCisj ZGVmaW5lCVZNRV9QUk9HCQkyCisjZGVmaW5lCVZNRV9VU0VSCQk0CisjZGVmaW5lCVZNRV9T VVBFUgkJOAorCisvKgorICogIFZNRSBhZGRyZXNzIHR5cGUgZGVmaW5pdGlvbnMKKyAqLwor dHlwZWRlZiBlbnVtIHsKKwlWTUVfQTE2LAorCVZNRV9BMjQsCisJVk1FX0EzMiwKKwlWTUVf QTY0LAorCVZNRV9DUkNTUiwKKwlWTUVfVVNFUjEsCisJVk1FX1VTRVIyLAorCVZNRV9VU0VS MywKKwlWTUVfVVNFUjQKK30gYWRkcmVzc01vZGVfdDsKKworLyoKKyAqICBWTUUgVHJhbnNm ZXIgUHJvdG9jb2wgRGVmaW5pdGlvbnMKKyAqLworI2RlZmluZQlWTUVfU0NUCQkJMHgxCisj ZGVmaW5lCVZNRV9CTFQJCQkweDIKKyNkZWZpbmUJVk1FX01CTFQJCTB4NAorI2RlZmluZQlW TUVfMmVWTUUJCTB4OAorI2RlZmluZQlWTUVfMmVTU1QJCTB4MTAKKyNkZWZpbmUJVk1FXzJl U1NUQgkJMHgyMAorCisvKgorICogIERhdGEgV2lkdGhzIAorICovCit0eXBlZGVmIGVudW0g eworCVZNRV9EOCA9IDgsCisJVk1FX0QxNiA9IDE2LAorCVZNRV9EMzIgPSAzMiwKKwlWTUVf RDY0ID0gNjQKK30gZGF0YVdpZHRoX3Q7CisKKy8qCisgKiAgMmVTU1QgRGF0YSBUcmFuc2Zl ciBSYXRlIENvZGVzCisgKi8KK3R5cGVkZWYgZW51bSB7CisJVk1FX1NTVE5PTkUgPSAwLAor CVZNRV9TU1QxNjAgPSAxNjAsCisJVk1FX1NTVDI2NyA9IDI2NywKKwlWTUVfU1NUMzIwID0g MzIwCit9IHZtZTJlc3N0UmF0ZV90OworCisvKgorICogIEFyYml0cmF0aW9uIFNjaGVkdWxp bmcgTW9kZXMKKyAqLwordHlwZWRlZiBlbnVtIHsKKwlWTUVfUl9ST0JJTl9NT0RFLAorCVZN RV9QUklPUklUWV9NT0RFCit9IHZtZTJBcmJNb2RlX3Q7CisKKy8qCisgKiAgL2Rldi92bWVf bSogT3V0Ym91bmQgV2luZG93IElvY3RsIENvbW1hbmRzCisgKi8KKyNkZWZpbmUJVk1FX0lP Q1RMX1NFVF9PVVRCT1VORAkJMHgxMAorI2RlZmluZQlWTUVfSU9DVExfR0VUX09VVEJPVU5E CQkweDExCisvKgorICogIFZNRWJ1cyBPdXRCb3VuZCBXaW5kb3cgQXJnIFN0cnVjdHVyZQor ICogIE5PVEU6CisgKglJZiBwY2lCdXNBZGRyW1UsTF0gYXJlIDAsIHRoZW4ga2VybmVsIHdp bGwgZHluYW1pY2FsbHkgYXNzaWduCisgKglwY2kgc3RhcnQgYWRkcmVzcyBvbiBQQ0kgYnVz LgorICovCitzdHJ1Y3Qgdm1lT3V0V2luZG93Q2ZnIHsKKwlpbnQgd2luZG93TmJyOwkJLyog IFdpbmRvdyBOdW1iZXIgKi8KKwljaGFyIHdpbmRvd0VuYWJsZTsJLyogIFN0YXRlIG9mIFdp bmRvdyAqLworCXVuc2lnbmVkIGludCBwY2lCdXNBZGRyVTsJLyogIFN0YXJ0IEFkZHJlc3Mg b24gdGhlIFBDSSBCdXMgKi8KKwl1bnNpZ25lZCBpbnQgcGNpQnVzQWRkckw7CS8qICBTdGFy dCBBZGRyZXNzIG9uIHRoZSBQQ0kgQnVzICovCisJdW5zaWduZWQgaW50IHdpbmRvd1NpemVV OwkvKiAgV2luZG93IFNpemUgKi8KKwl1bnNpZ25lZCBpbnQgd2luZG93U2l6ZUw7CS8qICBX aW5kb3cgU2l6ZSAqLworCXVuc2lnbmVkIGludCB4bGF0ZWRBZGRyVTsJLyogIFN0YXJ0aW5n IEFkZHJlc3Mgb24gdGhlIFZNRWJ1cyAqLworCXVuc2lnbmVkIGludCB4bGF0ZWRBZGRyTDsJ LyogIFN0YXJ0aW5nIEFkZHJlc3Mgb24gdGhlIFZNRWJ1cyAqLworCWludCBiY2FzdFNlbGVj dDJlc3N0OwkvKiAgMmVTU1QgQnJvYWRjYXN0IFNlbGVjdCAqLworCWNoYXIgd3JQb3N0RW5h YmxlOwkvKiAgV3JpdGUgUG9zdCBTdGF0ZSAqLworCWNoYXIgcHJlZmV0Y2hFbmFibGU7CS8q ICBQcmVmZXRjaCBSZWFkIEVuYWJsZSBTdGF0ZSAqLworCWludCBwcmVmZXRjaFNpemU7CS8q ICBQcmVmZXRjaCBSZWFkIFNpemUgKGluIENhY2hlIExpbmVzKSAqLworCXZtZTJlc3N0UmF0 ZV90IHhmZXJSYXRlMmVzc3Q7CS8qICAyZVNTVCBUcmFuc2ZlciBSYXRlICovCisJYWRkcmVz c01vZGVfdCBhZGRyU3BhY2U7CS8qICBBZGRyZXNzIFNwYWNlICovCisJZGF0YVdpZHRoX3Qg bWF4RGF0YVdpZHRoOwkvKiAgTWF4aW11bSBEYXRhIFdpZHRoICovCisJaW50IHhmZXJQcm90 b2NvbDsJLyogIFRyYW5zZmVyIFByb3RvY29sICovCisJaW50IHVzZXJBY2Nlc3NUeXBlOwkv KiAgVXNlci9TdXBlcnZpc29yIEFjY2VzcyBUeXBlICovCisJaW50IGRhdGFBY2Nlc3NUeXBl OwkvKiAgRGF0YS9Qcm9ncmFtIEFjY2VzcyBUeXBlICovCisJaW50IHJlc2VydmVkOwkJLyog Rm9yIGZ1dHVyZSB1c2UgKi8KK307Cit0eXBlZGVmIHN0cnVjdCB2bWVPdXRXaW5kb3dDZmcg dm1lT3V0V2luZG93Q2ZnX3Q7CisKKy8qCisgKiAgL2Rldi92bWVfZG1hKiBETUEgY29tbWFu ZHMKKyAqLworI2RlZmluZQlWTUVfSU9DVExfU1RBUlRfRE1BCQkweDMwCisjZGVmaW5lCVZN RV9JT0NUTF9QQVVTRV9ETUEJCTB4MzEKKyNkZWZpbmUJVk1FX0lPQ1RMX0NPTlRJTlVFX0RN QQkJMHgzMgorI2RlZmluZQlWTUVfSU9DVExfQUJPUlRfRE1BCQkweDMzCisjZGVmaW5lCVZN RV9JT0NUTF9XQUlUX0RNQQkJMHgzNAorCit0eXBlZGVmIGVudW0geworCS8qIE5PVEU6IFBB VFRFUk4gZW50cmllcyBvbmx5IHZhbGlkIGFzIHNvdXJjZSBvZiBkYXRhICovCisJVk1FX0RN QV9QQVRURVJOX0JZVEUsCisJVk1FX0RNQV9QQVRURVJOX0JZVEVfSU5DUkVNRU5ULAorCVZN RV9ETUFfUEFUVEVSTl9XT1JELAorCVZNRV9ETUFfUEFUVEVSTl9XT1JEX0lOQ1JFTUVOVCwK KwlWTUVfRE1BX1VTRVIsCisJVk1FX0RNQV9LRVJORUwsCisJVk1FX0RNQV9QQ0ksCisJVk1F X0RNQV9WTUUKK30gZG1hRGF0YV90OworCisvKgorICogIFZNRWJ1cyBUcmFuc2ZlciBBdHRy aWJ1dGVzIAorICovCitzdHJ1Y3Qgdm1lQXR0ciB7CisJZGF0YVdpZHRoX3QgbWF4RGF0YVdp ZHRoOwkvKiAgTWF4aW11bSBEYXRhIFdpZHRoICovCisJdm1lMmVzc3RSYXRlX3QgeGZlclJh dGUyZXNzdDsJLyogIDJlU1NUIFRyYW5zZmVyIFJhdGUgKi8KKwlpbnQgYmNhc3RTZWxlY3Qy ZXNzdDsJLyogIDJlU1NUIEJyb2FkY2FzdCBTZWxlY3QgKi8KKwlhZGRyZXNzTW9kZV90IGFk ZHJTcGFjZTsJLyogIEFkZHJlc3MgU3BhY2UgKi8KKwlpbnQgdXNlckFjY2Vzc1R5cGU7CS8q ICBVc2VyL1N1cGVydmlzb3IgQWNjZXNzIFR5cGUgKi8KKwlpbnQgZGF0YUFjY2Vzc1R5cGU7 CS8qICBEYXRhL1Byb2dyYW0gQWNjZXNzIFR5cGUgKi8KKwlpbnQgeGZlclByb3RvY29sOwkv KiAgVHJhbnNmZXIgUHJvdG9jb2wgKi8KKwlpbnQgcmVzZXJ2ZWQ7CQkvKiBGb3IgZnV0dXJl IHVzZSAqLworfTsKK3R5cGVkZWYgc3RydWN0IHZtZUF0dHIgdm1lQXR0cl90OworCisvKgor ICogIERNQSBhcmcgaW5mbworICogIE5PVEU6IAorICoJc3RydWN0dXJlIGNvbnRlbnRzIHJl bGF0aW5nIHRvIFZNRSBhcmUgZG9uJ3QgY2FyZSBmb3IgCisgKiAgICAgICBQQ0kgdHJhbnNh Y3Rpb25zCisgKglzdHJ1Y3R1cmUgY29udGVudHMgcmVsYXRpbmcgdG8gUENJIGFyZSBkb24n dCBjYXJlIGZvciAKKyAqICAgICAgIFZNRSB0cmFuc2FjdGlvbnMKKyAqCUlmIHNvdXJjZSBv ciBkZXN0aW5hdGlvbiBpcyB1c2VyIG1lbW9yeSBhbmQgdHJhbnNhY3Rpb24KKyAqCXdpbGwg Y3Jvc3MgcGFnZSBib3VuZGFyeSwgdGhlIERNQSByZXF1ZXN0IHdpbGwgYmUgc3BsaXQKKyAq CWludG8gbXVsdGlwbGUgRE1BIHRyYW5zYWN0aW9ucy4KKyAqLwordHlwZWRlZiBzdHJ1Y3Qg dm1lRG1hUGFja2V0IHsKKwlpbnQgdm1lRG1hVG9rZW47CS8qICBUb2tlbiBmb3IgZHJpdmVy IHVzZSAqLworCWludCB2bWVEbWFXYWl0OwkJLyogIFRpbWUgdG8gd2FpdCBmb3IgY29tcGxl dGlvbiAqLworCXVuc2lnbmVkIGludCB2bWVEbWFTdGFydFRpY2s7CS8qICBUaW1lIERNQSBz dGFydGVkICovCisJdW5zaWduZWQgaW50IHZtZURtYVN0b3BUaWNrOwkvKiAgVGltZSBETUEg c3RvcHBlZCAqLworCXVuc2lnbmVkIGludCB2bWVEbWFFbGFwc2VkVGltZTsJLyogIEVsYXBz ZWQgdGltZSAqLworCWludCB2bWVEbWFTdGF0dXM7CS8qICBETUEgY29tcGxldGlvbiBzdGF0 dXMgKi8KKworCWludCBieXRlQ291bnQ7CQkvKiAgQnl0ZSBDb3VudCAqLworCWludCBiY2Fz dFNlbGVjdDJlc3N0OwkvKiAgMmVTU1QgQnJvYWRjYXN0IFNlbGVjdCAqLworCisJLyoKKwkg KiAgRE1BIFNvdXJjZSBEYXRhCisJICovCisJZG1hRGF0YV90IHNyY0J1czsKKwl1bnNpZ25l ZCBpbnQgc3JjQWRkclU7CisJdW5zaWduZWQgaW50IHNyY0FkZHI7CisJaW50IHBjaVJlYWRD bWQ7CisJc3RydWN0IHZtZUF0dHIgc3JjVm1lQXR0cjsKKwljaGFyIHNyY2ZpZm9FbmFibGU7 CisKKwkvKgorCSAqICBETUEgRGVzdGluYXRpb24gRGF0YQorCSAqLworCWRtYURhdGFfdCBk c3RCdXM7CisJdW5zaWduZWQgaW50IGRzdEFkZHJVOworCXVuc2lnbmVkIGludCBkc3RBZGRy OworCWludCBwY2lXcml0ZUNtZDsKKwlzdHJ1Y3Qgdm1lQXR0ciBkc3RWbWVBdHRyOworCWNo YXIgZHN0Zmlmb0VuYWJsZTsKKworCS8qCisJICogIEJVUyB1c2FnZSBjb250cm9sCisJICov CisJaW50IG1heENwdUJ1c0Jsa1N6OwkvKiAgQ1BVIEJ1cyBNYXhpbXVtIEJsb2NrIFNpemUg Ki8KKwlpbnQgbWF4UGNpQmxvY2tTaXplOwkvKiBQQ0kgQnVzIE1heGltdW0gQmxvY2sgU2l6 ZSAqLworCWludCBwY2lCYWNrT2ZmVGltZXI7CS8qIFBDSSBCdXMgQmFjay1PZmYgVGltZXIg Ki8KKwlpbnQgbWF4Vm1lQmxvY2tTaXplOwkvKiBWTUVidXMgTWF4aW11bSBCbG9jayBTaXpl ICovCisJaW50IHZtZUJhY2tPZmZUaW1lcjsJLyogVk1FYnVzIEJhY2stT2ZmIFRpbWVyICov CisKKwlpbnQgY2hhbm5lbF9udW1iZXI7CS8qIENoYW5uZWwgbnVtYmVyICovCisJaW50IHJl c2VydmVkOwkJLyogRm9yIGZ1dHVyZSB1c2UgKi8KKwkvKgorCSAqICAgICAgUHRyIHRvIG5l eHQgUGFja2V0CisJICogICAgICAoTlVMTCA9PSBObyBtb3JlIFBhY2tldHMpCisJICovCisJ c3RydWN0IHZtZURtYVBhY2tldCAqcE5leHRQYWNrZXQ7CisKK30gdm1lRG1hUGFja2V0X3Q7 CisKKy8qCisgKiAgL2Rldi92bWVfY3RsIGlvY3RsIENvbW1hbmRzCisgKi8KKyNkZWZpbmUJ Vk1FX0lPQ1RMX0dFVF9TTE9UX1ZNRV9JTkZPCTB4NDEKKy8qCisgKiAgVk1FYnVzIEdFVCBJ TkZPIEFyZyBTdHJ1Y3R1cmUKKyAqLworc3RydWN0IHZtZUluZm9DZmcgeworCWludCB2bWVT bG90TnVtOwkJLyogIFZNRSBzbG90IG51bWJlciBvZiBpbnRlcmVzdCAqLworCWludCBib2Fy ZFJlc3BvbmRlZDsJLyogQm9hcmQgcmVzcG9uZGVkICovCisJY2hhciBzeXNDb25GbGFnOwkv KiAgU3lzdGVtIGNvbnRyb2xsZXIgZmxhZyAqLworCWludCB2bWVDb250cm9sbGVySUQ7CS8q ICBWZW5kb3IvZGV2aWNlIElEIG9mIFZNRSBicmlkZ2UgKi8KKwlpbnQgdm1lQ29udHJvbGxl clJldjsJLyogIFJldmlzaW9uIG9mIFZNRSBicmlkZ2UgKi8KKwljaGFyIG9zTmFtZVs4XTsJ CS8qICBOYW1lIG9mIE9TIGUuZy4gIkxpbnV4IiAqLworCWludCB2bWVTaGFyZWREYXRhVmFs aWQ7CS8qICBWYWxpZGl0eSBvZiBkYXRhIHN0cnVjdCAqLworCWludCB2bWVEcml2ZXJSZXY7 CS8qICBSZXZpc2lvbiBvZiBWTUUgZHJpdmVyICovCisJdW5zaWduZWQgaW50IHZtZUFkZHJI aVs4XTsJLyogQWRkcmVzcyBvbiBWTUUgYnVzICovCisJdW5zaWduZWQgaW50IHZtZUFkZHJM b1s4XTsJLyogQWRkcmVzcyBvbiBWTUUgYnVzICovCisJdW5zaWduZWQgaW50IHZtZVNpemVb OF07CS8qIFNpemUgb24gVk1FIGJ1cyAqLworCXVuc2lnbmVkIGludCB2bWVBbVs4XTsJLyog QWRkcmVzcyBtb2RpZmllciBvbiBWTUUgYnVzICovCisJaW50IHJlc2VydmVkOwkJLyogRm9y IGZ1dHVyZSB1c2UgKi8KK307Cit0eXBlZGVmIHN0cnVjdCB2bWVJbmZvQ2ZnIHZtZUluZm9D ZmdfdDsKKworI2RlZmluZQlWTUVfSU9DVExfU0VUX1JFUVVFU1RPUgkJMHg0MgorI2RlZmlu ZQlWTUVfSU9DVExfR0VUX1JFUVVFU1RPUgkJMHg0MworLyoKKyAqICBWTUVidXMgUmVxdWVz dGVyIEFyZyBTdHJ1Y3R1cmUKKyAqLworc3RydWN0IHZtZVJlcXVlc3RlckNmZyB7CisJaW50 IHJlcXVlc3RMZXZlbDsJLyogIFJlcXVlc3RlciBCdXMgUmVxdWVzdCBMZXZlbCAqLworCWNo YXIgZmFpck1vZGU7CQkvKiAgUmVxdWVzdGVyIEZhaXJuZXNzIE1vZGUgSW5kaWNhdG9yICov CisJaW50IHJlbGVhc2VNb2RlOwkvKiAgUmVxdWVzdGVyIEJ1cyBSZWxlYXNlIE1vZGUgKi8K KwlpbnQgdGltZW9uVGltZW91dFRpbWVyOwkvKiAgTWFzdGVyIFRpbWUtb24gVGltZS1vdXQg VGltZXIgKi8KKwlpbnQgdGltZW9mZlRpbWVvdXRUaW1lcjsJLyogIE1hc3RlciBUaW1lLW9m ZiBUaW1lLW91dCBUaW1lciAqLworCWludCByZXNlcnZlZDsJCS8qIEZvciBmdXR1cmUgdXNl ICovCit9OwordHlwZWRlZiBzdHJ1Y3Qgdm1lUmVxdWVzdGVyQ2ZnIHZtZVJlcXVlc3RlckNm Z190OworCisjZGVmaW5lCVZNRV9JT0NUTF9TRVRfQ09OVFJPTExFUgkweDQ0CisjZGVmaW5l CVZNRV9JT0NUTF9HRVRfQ09OVFJPTExFUgkweDQ1CisKKy8qCisgKiAgVk1FYnVzIEFyYml0 ZXIgQXJnIFN0cnVjdHVyZQorICovCitzdHJ1Y3Qgdm1lQXJiaXRlckNmZyB7CisJdm1lMkFy Yk1vZGVfdCBhcmJpdGVyTW9kZTsJLyogIEFyYml0cmF0aW9uIFNjaGVkdWxpbmcgQWxnb3Jp dGhtICovCisJY2hhciBhcmJpdGVyVGltZW91dEZsYWc7CS8qICBBcmJpdGVyIFRpbWUtb3V0 IFRpbWVyIEluZGljYXRvciAqLworCWludCBnbG9iYWxUaW1lb3V0VGltZXI7CS8qICBWTUVi dXMgR2xvYmFsIFRpbWUtb3V0IFRpbWVyICovCisJY2hhciBub0Vhcmx5UmVsZWFzZUZsYWc7 CS8qICBObyBFYXJseSBSZWxlYXNlIG9uIEJCVVNZICovCisJaW50IHJlc2VydmVkOwkJLyog Rm9yIGZ1dHVyZSB1c2UgKi8KK307Cit0eXBlZGVmIHN0cnVjdCB2bWVBcmJpdGVyQ2ZnIHZt ZUFyYml0ZXJDZmdfdDsKKworI2RlZmluZQlWTUVfSU9DVExfR0VORVJBVEVfSVJRCQkweDQ2 CisjZGVmaW5lCVZNRV9JT0NUTF9HRVRfSVJRX1NUQVRVUwkweDQ3CisjZGVmaW5lCVZNRV9J T0NUTF9DTFJfSVJRX1NUQVRVUwkweDQ4CisKKy8qCisgKiAgVk1FYnVzIElSUSBJbmZvCisg Ki8KK3R5cGVkZWYgc3RydWN0IHZpcnFJbmZvIHsKKwkvKgorCSAqICBUaW1lIHRvIHdhaXQg Zm9yIEV2ZW50IHRvIG9jY3VyIChpbiBjbG9jayB0aWNrcykKKwkgKi8KKwlzaG9ydCB3YWl0 VGltZTsKKwlzaG9ydCB0aW1lT3V0RmxhZzsKKworCS8qCisJICogIFZNRWJ1cyBJbnRlcnJ1 cHQgTGV2ZWwgYW5kIFZlY3RvciBEYXRhCisJICovCisJaW50IGxldmVsOworCWludCB2ZWN0 b3I7CisJaW50IHJlc2VydmVkOwkJLyogRm9yIGZ1dHVyZSB1c2UgKi8KKworfSB2aXJxSW5m b190OworCisjZGVmaW5lCVZNRV9JT0NUTF9TRVRfSU5CT1VORAkJMHg0OQorI2RlZmluZQlW TUVfSU9DVExfR0VUX0lOQk9VTkQJCTB4NTAKKworLyoKKyAqICBWTUVidXMgSW5Cb3VuZCBX aW5kb3cgQXJnIFN0cnVjdHVyZQorICogIE5PVEU6CisgKglJZiBwY2lCdXNBZGRyW1UsTF0g YW5kIHdpbmRvd1NpemVbVSxMXSBhcmUgMCwgdGhlbiBrZXJuZWwgCisgKiAgICAgIHdpbGwg ZHluYW1pY2FsbHkgYXNzaWduIGluYm91bmQgd2luZG93IHRvIG1hcCB0byBhIGtlcm5lbAor ICoJc3VwcGxpZWQgYnVmZmVyLgorICovCitzdHJ1Y3Qgdm1lSW5XaW5kb3dDZmcgeworCWlu dCB3aW5kb3dOYnI7CQkvKiAgV2luZG93IE51bWJlciAqLworCWNoYXIgd2luZG93RW5hYmxl OwkvKiAgU3RhdGUgb2YgV2luZG93ICovCisJdW5zaWduZWQgaW50IHZtZUFkZHJVOwkvKiAg U3RhcnQgQWRkcmVzcyByZXNwb25kZWQgdG8gb24gdGhlIFZNRWJ1cyAqLworCXVuc2lnbmVk IGludCB2bWVBZGRyTDsJLyogIFN0YXJ0IEFkZHJlc3MgcmVzcG9uZGVkIHRvIG9uIHRoZSBW TUVidXMgKi8KKwl1bnNpZ25lZCBpbnQgd2luZG93U2l6ZVU7CS8qICBXaW5kb3cgU2l6ZSAq LworCXVuc2lnbmVkIGludCB3aW5kb3dTaXplTDsJLyogIFdpbmRvdyBTaXplICovCisJdW5z aWduZWQgaW50IHBjaUFkZHJVOwkvKiAgU3RhcnQgQWRkcmVzcyBhcHBlYXJpbmcgb24gdGhl IFBDSSBCdXMgKi8KKwl1bnNpZ25lZCBpbnQgcGNpQWRkckw7CS8qICBTdGFydCBBZGRyZXNz IGFwcGVhcmluZyBvbiB0aGUgUENJIEJ1cyAqLworCWNoYXIgd3JQb3N0RW5hYmxlOwkvKiAg V3JpdGUgUG9zdCBTdGF0ZSAqLworCWNoYXIgcHJlZmV0Y2hFbmFibGU7CS8qICBQcmVmZXRj aCBSZWFkIFN0YXRlICovCisJY2hhciBwcmVmZXRjaFRocmVzaG9sZDsJLyogIFByZWZldGNo IFJlYWQgVGhyZXNob2xkIFN0YXRlICovCisJaW50IHByZWZldGNoU2l6ZTsJLyogIFByZWZl dGNoIFJlYWQgU2l6ZSAqLworCWNoYXIgcm13TG9jazsJCS8qICBMb2NrIFBDSSBkdXJpbmcg Uk1XIEN5Y2xlcyAqLworCWNoYXIgZGF0YTY0Qml0Q2FwYWJsZTsJLyogIG5vbi1WTUVidXMg Y2FwYWJsZSBvZiA2NC1iaXQgRGF0YSAqLworCWFkZHJlc3NNb2RlX3QgYWRkclNwYWNlOwkv KiAgQWRkcmVzcyBTcGFjZSAqLworCWludCB1c2VyQWNjZXNzVHlwZTsJLyogIFVzZXIvU3Vw ZXJ2aXNvciBBY2Nlc3MgVHlwZSAqLworCWludCBkYXRhQWNjZXNzVHlwZTsJLyogIERhdGEv UHJvZ3JhbSBBY2Nlc3MgVHlwZSAqLworCWludCB4ZmVyUHJvdG9jb2w7CS8qICBUcmFuc2Zl ciBQcm90b2NvbCAqLworCXZtZTJlc3N0UmF0ZV90IHhmZXJSYXRlMmVzc3Q7CS8qICAyZVNT VCBUcmFuc2ZlciBSYXRlICovCisJY2hhciBiY2FzdFJlc3BvbmQyZXNzdDsJLyogIFJlc3Bv bmQgdG8gMmVTU1QgQnJvYWRjYXN0ICovCisJaW50IHJlc2VydmVkOwkJLyogRm9yIGZ1dHVy ZSB1c2UgKi8KKworfTsKK3R5cGVkZWYgc3RydWN0IHZtZUluV2luZG93Q2ZnIHZtZUluV2lu ZG93Q2ZnX3Q7CisKKy8qCisgKiAgL2Rldi92bWVfcm13IFJNVyBJb2N0bCBDb21tYW5kcwor ICovCisjZGVmaW5lCVZNRV9JT0NUTF9ET19STVcJCTB4NjAKKy8qCisgKiAgVk1FYnVzIFJN VyBDb25maWd1cmF0aW9uIERhdGEKKyAqLworc3RydWN0IHZtZVJtd0NmZyB7CisJdW5zaWdu ZWQgaW50IHRhcmdldEFkZHJVOwkvKiAgVk1FIEFkZHJlc3MgKFVwcGVyKSB0byB0cmlnZ2Vy IFJNVyBjeWNsZSAqLworCXVuc2lnbmVkIGludCB0YXJnZXRBZGRyOwkvKiAgVk1FIEFkZHJl c3MgKExvd2VyKSB0byB0cmlnZ2VyIFJNVyBjeWNsZSAqLworCWFkZHJlc3NNb2RlX3QgYWRk clNwYWNlOwkvKiAgVk1FIEFkZHJlc3MgU3BhY2UgKi8KKwlpbnQgZW5hYmxlTWFzazsJCS8q ICBCaXQgbWFzayBkZWZpbmluZyB0aGUgYml0cyBvZiBpbnRlcmVzdCAqLworCWludCBjb21w YXJlRGF0YTsJLyogIERhdGEgdG8gYmUgY29tcGFyZWQgd2l0aCB0aGUgZGF0YSByZWFkICov CisJaW50IHN3YXBEYXRhOwkJLyogIERhdGEgd3JpdHRlbiB0byB0aGUgVk1FYnVzIG9uIHN1 Y2Nlc3MgKi8KKwlpbnQgbWF4QXR0ZW1wdHM7CS8qICBNYXhpbXVtIHRpbWVzIHRvIHRyeSAq LworCWludCBudW1BdHRlbXB0czsJLyogIE51bWJlciBvZiBhdHRlbXB0cyBiZWZvcmUgc3Vj Y2VzcyAqLworCWludCByZXNlcnZlZDsJCS8qIEZvciBmdXR1cmUgdXNlICovCisKK307Cit0 eXBlZGVmIHN0cnVjdCB2bWVSbXdDZmcgdm1lUm13Q2ZnX3Q7CisKKy8qCisgKiAgL2Rldi92 bWVfbG0gbG9jYXRpb24gTW9uaXRvciBJb2N0bCBDb21tYW5kcworICovCisjZGVmaW5lCVZN RV9JT0NUTF9TRVRVUF9MTQkJMHg3MAorI2RlZmluZQlWTUVfSU9DVExfV0FJVF9MTQkJMHg3 MQorLyoKKyAqICBWTUVidXMgTG9jYXRpb24gTW9uaXRvciBBcmcgU3RydWN0dXJlCisgKi8K K3N0cnVjdCB2bWVMbUNmZyB7CisJdW5zaWduZWQgaW50IGFkZHJVOwkvKiAgTG9jYXRpb24g TW9uaXRvciBBZGRyZXNzIHVwcGVyICovCisJdW5zaWduZWQgaW50IGFkZHI7CS8qICBMb2Nh dGlvbiBNb25pdG9yIEFkZHJlc3MgbG93ZXIgKi8KKwlhZGRyZXNzTW9kZV90IGFkZHJTcGFj ZTsJLyogIEFkZHJlc3MgU3BhY2UgKi8KKwlpbnQgdXNlckFjY2Vzc1R5cGU7CS8qICBVc2Vy L1N1cGVydmlzb3IgQWNjZXNzIFR5cGUgKi8KKwlpbnQgZGF0YUFjY2Vzc1R5cGU7CS8qICBE YXRhL1Byb2dyYW0gQWNjZXNzIFR5cGUgKi8KKwlpbnQgbG1XYWl0OwkJLyogVGltZSB0byB3 YWl0IGZvciBhY2Nlc3MgKi8KKwlpbnQgbG1FdmVudHM7CQkvKiBMbSBldmVudCBtYXNrICov CisJaW50IHJlc2VydmVkOwkJLyogRm9yIGZ1dHVyZSB1c2UgKi8KK307Cit0eXBlZGVmIHN0 cnVjdCB2bWVMbUNmZyB2bWVMbUNmZ190OworCisvKgorICogIERhdGEgc3RydWN0dXJlIGNy ZWF0ZWQgZm9yIGVhY2ggYm9hcmQgaW4gQ1MvQ1NSIHNwYWNlLiAgCisgKi8KK3N0cnVjdCB2 bWVTaGFyZWREYXRhIHsKKwkvKgorCSAqIFB1YmxpYyBlbGVtZW50cworCSAqLworCWNoYXIg dmFsaWRpdHkxWzRdOwkvKiAiVk1FIiB3aGVuIGNvbnRlbnRzIGFyZSB2YWxpZCAqLworCWNo YXIgdmFsaWRpdHkyWzRdOwkvKiAiUkRZIiB3aGVuIGNvbnRlbnRzIGFyZSB2YWxpZCAqLwor CWludCBzdHJ1Y3R1cmVSZXY7CS8qIFJldmlzaW9uIG9mIHRoaXMgc3RydWN0dXJlICovCisJ aW50IHJlc2VydmVkMTsKKworCWNoYXIgb3NuYW1lWzhdOwkJLyogT1MgbmFtZSBzdHJpbmcg Ki8KKwlpbnQgZHJpdmVyUmV2OwkJLyogUmV2aXNpb24gb2YgVk1FIGRyaXZlciAqLworCWlu dCByZXNlcnZlZDI7CisKKwljaGFyIGJvYXJkU3RyaW5nWzE2XTsJLyogdHlwZSBvZiBib2Fy ZCAqLworCisJaW50IHZtZUNvbnRyb2xsZXJUeXBlOworCWludCB2bWVDb250cm9sbGVyUmV2 OworCWludCBib2FyZFNlbWFwaG9yZVs4XTsJLyogZm9yIHVzZSBieSByZW1vdGUgKi8KKwl1 bnNpZ25lZCBpbnQgaW5Cb3VuZFZtZUFkZHJIaVs4XTsJLyogVGhpcyBib2FyZHMgVk1FIHdp bmRvd3MgKi8KKwl1bnNpZ25lZCBpbnQgaW5Cb3VuZFZtZUFkZHJMb1s4XTsJLyogVGhpcyBi b2FyZHMgVk1FIHdpbmRvd3MgKi8KKwlhZGRyZXNzTW9kZV90IGluQm91bmRWbWVBTVs4XTsJ LyogQWRkcmVzcyBtb2RpZmllciAqLworCWludCBpbkJvdW5kVm1lU2l6ZVs4XTsJLyogc2l6 ZSBhdmFpbGFibGUgdG8gcmVtb3RlcyAqLworCWNoYXIgcmVzZXJ2ZWQzWzB4MTAwMCAtIDI0 OF07CS8qIFBhZCB0byA0ayBib3VuZGFyeSAqLworCisJaW50IHJlYWRUZXN0UGF0dGVybnNb MTAyNF07CisJaW50IHJlbW90ZVNjcmF0Y2hBcmVhWzI0XVsyNTZdOwkvKiAxayBzY3JhdGNo IGZvciBlYWNoIHJlbW90ZSAqLworCS8qCisJICogUHJpdmF0ZSBhcmVhcyBmb3IgdXNlIGJ5 IGRyaXZlciBvbmx5LgorCSAqLworCWNoYXIgZHJpdmVyU2NyYXRjaFs0MDk2XTsKKwlzdHJ1 Y3QgeworCQljaGFyIEV5ZVs0XTsKKwkJaW50IE9mZnNldDsKKwkJaW50IEhlYWQ7CisJCWlu dCBUYWlsOworCQlpbnQgU2l6ZTsKKwkJaW50IFJlc2VydmVkMTsKKwkJaW50IFJlc2VydmVk MjsKKwkJaW50IFJlc2VydmVkMzsKKwkJY2hhciBEYXRhWzQwOTYgLSAzMl07CisJfSBib2Fy ZEZpZm9bMjNdOworfTsKKworLyoKKyAqICBEcml2ZXIgZXJyb3JzIHJlcG9ydGVkIGJhY2sg dG8gdGhlIEFwcGxpY2F0aW9uIChvdGhlciB0aGFuIHRoZQorICogIHN0YW5kYXJkIExpbnV4 IGVycm5vcy4uLikuCisgKi8KKyNkZWZpbmUJVk1FX0VSUl9WRVJSCQkxCS8qIFZNRSBidXMg ZXJyb3IgZGV0ZWN0ZWQgKi8KKyNkZWZpbmUJVk1FX0VSUl9QRVJSCQkyCS8qIFBDSSBidXMg ZXJyb3IgZGV0ZWN0ZWQgKi8KKworI2VuZGlmCQkJCS8qIFZNRURSVl9IICovCmRpZmYgLXUg LS1uZXctZmlsZSAtLXJlY3Vyc2l2ZSBsaW51eC0yLjYuMjkuNi5vcmlnL2RyaXZlcnMvdm1l L3ZtZWxpbnV4LmMgbGludXgtMi42LjI5LjYubW9kL2RyaXZlcnMvdm1lL3ZtZWxpbnV4LmMK LS0tIGxpbnV4LTIuNi4yOS42Lm9yaWcvZHJpdmVycy92bWUvdm1lbGludXguYwkxOTY5LTEy LTMxIDE3OjAwOjAwLjAwMDAwMDAwMCAtMDcwMAorKysgbGludXgtMi42LjI5LjYubW9kL2Ry aXZlcnMvdm1lL3ZtZWxpbnV4LmMJMjAwOS0wNy0yMSAxMToyODoxOC4wMDAwMDAwMDAgLTA3 MDAKQEAgLTAsMCArMSwxOTA3IEBACisvKgorICogdm1lbGludXguYworICoKKyAqIFByb3Zp ZGVzIHRoZSBkZXZpY2Ugbm9kZSBpbnRlcmZhY2UgZnJvbSB0aGUgdXNlciBzcGFjZSBwcm9n cmFtcyB0byAKKyAqIHRoZSBWTUUgYnJpZGdlLiAgUHJpbWFyeSBwdXJwb3NlIGlzIHRvIGNv bnZlcnQgdXNlciBzcGFjZQorICogZGF0YSB0byBrZXJuZWwgYW5kIGJhY2suCisgKiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAqIFRoaXMgZHJpdmVyIHN1cHBvcnRz IGJvdGggdGhlIFRlbXBlLCBhbmQgdGhlIFVuaXZlcnNlL1VuaXZlcnNlIElJIGNoaXBzLgor ICogCisgKiBBdXRob3JzOiBUb20gQXJtaXN0ZWFkLCBBaml0IFByZW0KKyAqIENvcHlyaWdo dCAyMDA0LTIwMDcgTW90b3JvbGEgSW5jLgorICogQ29weXJpZ2h0IDIwMDggRW1lcnNvbiBO ZXR3b3JrIFBvd2VyIC0gRW1iZWRkZWQgQ29tcHV0aW5nLCBJbmMuCisgKgorICogVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQv b3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwg IFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQg eW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8 bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUg PGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRl IDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUg PGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUg PGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51 eC9oaWdobWVtLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8 bGludXgvcGFnZW1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUg PGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvbXY2NDN4eC5oPgorI2lu Y2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNt L3VhY2Nlc3MuaD4KKyNpbmNsdWRlICJ2bWVkcnYuaCIKKworc3RhdGljIGNoYXIgVmVyc2lv bltdID0gIjQuMCA1LzIzLzIwMDgiOworCitzdGF0aWMgaW50IHZtZV9vcGVuKHN0cnVjdCBp bm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKK3N0YXRpYyBpbnQgdm1lX3JlbGVhc2Uoc3RydWN0 IGlub2RlICosIHN0cnVjdCBmaWxlICopOworc3RhdGljIHNzaXplX3Qgdm1lX3JlYWQoc3Ry dWN0IGZpbGUgKiwgY2hhciAqLCBzaXplX3QsIGxvZmZfdCAqKTsKK3N0YXRpYyBzc2l6ZV90 IHZtZV93cml0ZShzdHJ1Y3QgZmlsZSAqLCBjb25zdCBjaGFyICosIHNpemVfdCwgbG9mZl90 ICopOworc3RhdGljIHVuc2lnbmVkIGludCB2bWVfcG9sbChzdHJ1Y3QgZmlsZSAqLCBwb2xs X3RhYmxlICopOworc3RhdGljIGludCB2bWVfaW9jdGwoc3RydWN0IGlub2RlICosIHN0cnVj dCBmaWxlICosIHVuc2lnbmVkIGludCwKKwkJICAgICB1bnNpZ25lZCBsb25nKTsKK3N0YXRp YyBpbnQgdm1lX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVj dCAqdm1hKTsKK3N0YXRpYyBpbnQgdm1lX3Byb2NpbmZvKGNoYXIgKiwgY2hhciAqKiwgb2Zm X3QsIGludCwgaW50ICosIHZvaWQgKik7CitzdGF0aWMgc3RydWN0IGNsYXNzICp2bWVfY2xh c3M7CisKK3ZvaWQgdm1lbW9kX3NldHVwX29wdGlvbnMoY2hhciAqY21kX2xpbmUpOworCitl eHRlcm4gdW5zaWduZWQgdGJfdGlja3NfcGVyX2ppZmZ5OworCitzdGF0aWMgc3RydWN0IHBy b2NfZGlyX2VudHJ5ICp2bWVfcHJvY2RpcjsKKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJh dGlvbnMgdm1lX2ZvcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLnJlYWQgPSB2 bWVfcmVhZCwKKwkud3JpdGUgPSB2bWVfd3JpdGUsCisJLnBvbGwgPSB2bWVfcG9sbCwKKwku aW9jdGwgPSB2bWVfaW9jdGwsCisJLm1tYXAgPSB2bWVfbW1hcCwKKwkub3BlbiA9IHZtZV9v cGVuLAorCS5yZWxlYXNlID0gdm1lX3JlbGVhc2UKK307CisKKyNkZWZpbmUgVk1FX01BSk9S CTIyMQorI2RlZmluZSBNQVhfTUlOT1IJMHhGRgorCisjZGVmaW5lIERNQVRZUEVfU0lOR0xF ICAxCisjZGVmaW5lIERNQVRZUEVfTExJU1QgICAyCisKKyNkZWZpbmUgSU5URVJCT0FSRF9C VUZGRVJfU0laRSAJCQk1MTIgKiAxMDI0CisjZGVmaW5lIERFRkFVTFRfSU5CT1VORF9XSU5E T1dfQlVGRkVSX1NJWkUJNCAqIDEwMjQgKiAxMDI0CisKK3N0YXRpYyB1bnNpZ25lZCBsb25n IG9wZW5lZFtNQVhfTUlOT1IgKyAxXTsKK3N0cnVjdCBzZW1hcGhvcmUgZGV2aW51c2VbTUFY X01JTk9SICsgMV07CisKKy8vIEdsb2JhbCBWTUUgY29udHJvbGxlciBpbmZvcm1hdGlvbgor ZXh0ZXJuIGludCB2bWVjaGlwX2lycTsJCS8vIFBDSSBpcnEKK2V4dGVybiBpbnQgdm1lY2hp cF9kZXZpZDsJLy8gUENJIGRldklEIG9mIFZNRSBicmlkZ2UKK2V4dGVybiBpbnQgdm1lcGFy ZW50X2RldmlkOwkvLyBQQ0kgZGV2SUQgb2YgVk1FIGJyaWRnZSBwYXJlbnQKK2V4dGVybiBp bnQgdm1lY2hpcF9yZXZpc2lvbjsJLy8gUENJIHJldmlzaW9uCitleHRlcm4gdm9pZCBfX2lv bWVtICp2bWVjaGlwX2Jhc2VhZGRyOwkvLyB2aXJ0dWFsIGFkZHJlc3Mgb2YgY2hpcCByZWdp c3RlcnMKK2V4dGVybiBpbnQgdm1lX3Nsb3RudW07CQkvLyBWTUUgc2xvdCBudW0gKC0xID0g dW5rbm93bikKK2V4dGVybiBpbnQgdm1lX3N5c2NvbjsJCS8vIFZNRSBzeXMgY29udHJvbGxl ciAoLTEgPSB1bmtub3duKQorCisjaWZkZWYgQ09ORklHX1ZNRV9CUklER0VfQk9PVE1FTQor ZXh0ZXJuIHZvaWQgKnZtZV9kcml2ZXJfYm9vdG1lbTsKK2V4dGVybiB1bnNpZ25lZCBpbnQg dm1lX2Jvb3RtZW1fc2l6ZTsKKyNlbmRpZgorCitjaGFyICppbl9pbWFnZV9iYVsweDhdOwkJ Ly8gVmlydHVhbCBBZGRyZXNzCitkbWFfYWRkcl90IGluX2ltYWdlX3BhWzB4OF07CS8vIFBo eXNpY2FsIEFkZHJlc3MKK2ludCBpbl9pbWFnZV9zaXplWzB4OF07CQkvLyBTaXplCitpbnQg aW5faW1hZ2VfbWFwcGVkWzB4OF07CitzdGF0aWMgaW50IG91dF9pbWFnZV9tYXBwZWRbMHg4 XTsKK3N0YXRpYyBzdHJ1Y3Qgc2VtYXBob3JlIGluX2ltYWdlX3NlbVsweDhdOworc3RhdGlj IHN0cnVjdCBzZW1hcGhvcmUgb3V0X2ltYWdlX3NlbVsweDhdOworCitzdHJ1Y3QgcmVzb3Vy Y2Ugb3V0X3Jlc291cmNlWzB4OF07CitleHRlcm4gdW5zaWduZWQgaW50IG91dF9pbWFnZV92 YVs4XTsJLy8gQmFzZSB2aXJ0dWFsIGFkZHJlc3MKK2V4dGVybiB1bnNpZ25lZCBpbnQgb3V0 X2ltYWdlX3ZhbGlkWzhdOwkvLyB2YWxpZGl0eQorCisvKgorICogRXh0ZXJuYWwgZnVuY3Rp b25zCisgKi8KK2V4dGVybiB2b2lkIHVuaV9zaHV0ZG93bih2b2lkKTsKK2V4dGVybiB2b2lk IHRzaTE0OF9zaHV0ZG93bih2b2lkKTsKKworZXh0ZXJuIGludCB2bWVfaW5pdCh2b2lkICop OworZXh0ZXJuIGludCB2bWVfYnVzX2Vycm9yX2NoayhpbnQpOworZXh0ZXJuIGludCB2bWVf Z2V0X3Nsb3RfbnVtKHZvaWQpOworZXh0ZXJuIGludCB2bWVfZ2V0X291dF9ib3VuZCh2bWVP dXRXaW5kb3dDZmdfdCAqKTsKK2V4dGVybiBpbnQgdm1lX3NldF9vdXRfYm91bmQodm1lT3V0 V2luZG93Q2ZnX3QgKik7CitleHRlcm4gaW50IHZtZV9kb19kbWEodm1lRG1hUGFja2V0X3Qg Kik7CitleHRlcm4gaW50IHZtZV9nZXRfc2xvdF9pbmZvKHZtZUluZm9DZmdfdCAqKTsKK2V4 dGVybiBpbnQgdm1lX2dldF9yZXF1ZXN0b3Iodm1lUmVxdWVzdGVyQ2ZnX3QgKik7CitleHRl cm4gaW50IHZtZV9zZXRfcmVxdWVzdG9yKHZtZVJlcXVlc3RlckNmZ190ICopOworZXh0ZXJu IGludCB2bWVfZ2V0X2FyYml0ZXIodm1lQXJiaXRlckNmZ190ICopOworZXh0ZXJuIGludCB2 bWVfc2V0X2FyYml0ZXIodm1lQXJiaXRlckNmZ190ICopOworZXh0ZXJuIGludCB2bWVfZ2Vu ZXJhdGVfaXJxKHZpcnFJbmZvX3QgKik7CitleHRlcm4gaW50IHZtZV9nZXRfaXJxX3N0YXR1 cyh2aXJxSW5mb190ICopOworZXh0ZXJuIGludCB2bWVfY2xyX2lycV9zdGF0dXModmlycUlu Zm9fdCAqKTsKK2V4dGVybiBpbnQgdm1lX2dldF9pbl9ib3VuZCh2bWVJbldpbmRvd0NmZ190 ICopOworZXh0ZXJuIGludCB2bWVfc2V0X2luX2JvdW5kKHZtZUluV2luZG93Q2ZnX3QgKik7 CitleHRlcm4gaW50IHZtZV9kb19ybXcodm1lUm13Q2ZnX3QgKik7CitleHRlcm4gaW50IHZt ZV9zZXR1cF9sbSh2bWVMbUNmZ190ICopOworZXh0ZXJuIGludCB2bWVfd2FpdF9sbSh2bWVM bUNmZ190ICopOworCitleHRlcm4gdm9pZCB2bWVfc3luY19kYXRhKHZvaWQpOworZXh0ZXJu IHZvaWQgdm1lX2ZsdXNoX3JhbmdlKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwor CitleHRlcm4gaW50IHVuaV9wcm9jaW5mbyhjaGFyICopOworZXh0ZXJuIGludCB0c2kxNDhf cHJvY2luZm8oY2hhciAqKTsKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdm1lX3BjaV9idXNf bWVtX2Jhc2VfcGh5cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKTsKKworI2RlZmluZQlERVZfVkFM SUQJMQorI2RlZmluZQlERVZfRVhDTFVTSVZFCTIKKyNkZWZpbmUJREVWX1JXCQk0CisKK3N0 YXRpYyBjaGFyIHZtZV9taW5vcl9kZXZfZmxhZ3NbXSA9IHsKKwlERVZfVkFMSUQgfCBERVZf RVhDTFVTSVZFIHwgREVWX1JXLAkvKiAvZGV2L3ZtZV9tMCAqLworCURFVl9WQUxJRCB8IERF Vl9FWENMVVNJVkUgfCBERVZfUlcsCS8qIC9kZXYvdm1lX20xICovCisJREVWX1ZBTElEIHwg REVWX0VYQ0xVU0lWRSB8IERFVl9SVywJLyogL2Rldi92bWVfbTIgKi8KKwlERVZfVkFMSUQg fCBERVZfRVhDTFVTSVZFIHwgREVWX1JXLAkvKiAvZGV2L3ZtZV9tMyAqLworCURFVl9WQUxJ RCB8IERFVl9FWENMVVNJVkUgfCBERVZfUlcsCS8qIC9kZXYvdm1lX200ICovCisJREVWX1ZB TElEIHwgREVWX0VYQ0xVU0lWRSB8IERFVl9SVywJLyogL2Rldi92bWVfbTUgKi8KKwlERVZf VkFMSUQgfCBERVZfRVhDTFVTSVZFIHwgREVWX1JXLAkvKiAvZGV2L3ZtZV9tNiAqLworCURF Vl9WQUxJRCB8IERFVl9FWENMVVNJVkUgfCBERVZfUlcsCS8qIC9kZXYvdm1lX203ICovCisJ REVWX1ZBTElEIHwgREVWX0VYQ0xVU0lWRSB8IERFVl9SVywJLyogL2Rldi92bWVfczAgKi8K KwlERVZfVkFMSUQgfCBERVZfRVhDTFVTSVZFIHwgREVWX1JXLAkvKiAvZGV2L3ZtZV9zMSAq LworCURFVl9WQUxJRCB8IERFVl9FWENMVVNJVkUgfCBERVZfUlcsCS8qIC9kZXYvdm1lX3My ICovCisJREVWX1ZBTElEIHwgREVWX0VYQ0xVU0lWRSB8IERFVl9SVywJLyogL2Rldi92bWVf czMgKi8KKwlERVZfVkFMSUQgfCBERVZfRVhDTFVTSVZFIHwgREVWX1JXLAkvKiAvZGV2L3Zt ZV9zNCAqLworCURFVl9WQUxJRCB8IERFVl9FWENMVVNJVkUgfCBERVZfUlcsCS8qIC9kZXYv dm1lX3M1ICovCisJREVWX1ZBTElEIHwgREVWX0VYQ0xVU0lWRSB8IERFVl9SVywJLyogL2Rl di92bWVfczYgKi8KKwlERVZfVkFMSUQgfCBERVZfRVhDTFVTSVZFIHwgREVWX1JXLAkvKiAv ZGV2L3ZtZV9zNyAqLworCURFVl9WQUxJRCwJCS8qIC9kZXYvdm1lX2RtYTAgKi8KKwlERVZf VkFMSUQsCQkvKiAvZGV2L3ZtZV9kbWExICovCisJMCwgMCwgMCwgMCwgMCwgMCwKKwkwLCAw LCAwLCAwLCAwLCAwLCAwLCAwLAorCURFVl9WQUxJRCwJCS8qIC9kZXYvdm1lX2N0bCAqLwor CURFVl9WQUxJRCB8IERFVl9SVywJLyogL2Rldi92bWVfcmVncyAqLworCURFVl9WQUxJRCB8 IERFVl9FWENMVVNJVkUsCS8qIC9kZXYvdm1lX3JtdzAgKi8KKwlERVZfVkFMSUQgfCBERVZf RVhDTFVTSVZFLAkvKiAvZGV2L3ZtZV9sbTAgKi8KKwkwLCAwLCAwLCAwLAorCTAsIDAsIDAs IDAsIDAsIDAsIDAsIDAsCisJREVWX1ZBTElEIHwgREVWX1JXLAkvKiAvZGV2L3ZtZV9zbG90 MCAqLworCURFVl9WQUxJRCB8IERFVl9SVywJLyogL2Rldi92bWVfc2xvdDEgKi8KKwlERVZf VkFMSUQgfCBERVZfUlcsCS8qIC9kZXYvdm1lX3Nsb3QyICovCisJREVWX1ZBTElEIHwgREVW X1JXLAkvKiAvZGV2L3ZtZV9zbG90MyAqLworCURFVl9WQUxJRCB8IERFVl9SVywJLyogL2Rl di92bWVfc2xvdDQgKi8KKwlERVZfVkFMSUQgfCBERVZfUlcsCS8qIC9kZXYvdm1lX3Nsb3Q1 ICovCisJREVWX1ZBTElEIHwgREVWX1JXLAkvKiAvZGV2L3ZtZV9zbG90NiAqLworCURFVl9W QUxJRCB8IERFVl9SVywJLyogL2Rldi92bWVfc2xvdDcgKi8KKwlERVZfVkFMSUQgfCBERVZf UlcsCS8qIC9kZXYvdm1lX3Nsb3Q4ICovCisJREVWX1ZBTElEIHwgREVWX1JXLAkvKiAvZGV2 L3ZtZV9zbG90OSAqLworCURFVl9WQUxJRCB8IERFVl9SVywJLyogL2Rldi92bWVfc2xvdDEw ICovCisJREVWX1ZBTElEIHwgREVWX1JXLAkvKiAvZGV2L3ZtZV9zbG90MTEgKi8KKwlERVZf VkFMSUQgfCBERVZfUlcsCS8qIC9kZXYvdm1lX3Nsb3QxMiAqLworCURFVl9WQUxJRCB8IERF Vl9SVywJLyogL2Rldi92bWVfc2xvdDEzICovCisJREVWX1ZBTElEIHwgREVWX1JXLAkvKiAv ZGV2L3ZtZV9zbG90MTQgKi8KKwlERVZfVkFMSUQgfCBERVZfUlcsCS8qIC9kZXYvdm1lX3Ns b3QxNSAqLworCURFVl9WQUxJRCB8IERFVl9SVywJLyogL2Rldi92bWVfc2xvdDE2ICovCisJ REVWX1ZBTElEIHwgREVWX1JXLAkvKiAvZGV2L3ZtZV9zbG90MTcgKi8KKwlERVZfVkFMSUQg fCBERVZfUlcsCS8qIC9kZXYvdm1lX3Nsb3QxOCAqLworCURFVl9WQUxJRCB8IERFVl9SVywJ LyogL2Rldi92bWVfc2xvdDE5ICovCisJREVWX1ZBTElEIHwgREVWX1JXLAkvKiAvZGV2L3Zt ZV9zbG90MjAgKi8KKwlERVZfVkFMSUQgfCBERVZfUlcJLyogL2Rldi92bWVfc2xvdDIxICov Cit9OworCitzdGF0aWMgdW5zaWduZWQgaW50IHJlYWRzOworc3RhdGljIHVuc2lnbmVkIGlu dCB3cml0ZXM7CitzdGF0aWMgdW5zaWduZWQgaW50IGlvY3RsczsKKworLyogU2hhcmVkIGds b2JhbCAqLword2FpdF9xdWV1ZV9oZWFkX3QgZG1hX3F1ZXVlWzJdOword2FpdF9xdWV1ZV9o ZWFkX3QgbG1fcXVldWU7Cit3YWl0X3F1ZXVlX2hlYWRfdCBtYm94X3F1ZXVlOword2FpdF9x dWV1ZV9oZWFkX3Qgdm1laW50X3F1ZXVlWzhdOworc3RydWN0IHZtZVNoYXJlZERhdGEgKnZt ZWNoaXBfaW50ZXJib2FyZF9kYXRhOwkvLyB2YWRkcmVzcyBvZiBib2FyZCBkYXRhCitkbWFf YWRkcl90IHZtZWNoaXBfaW50ZXJib2FyZF9kYXRhcDsJLy8gcGFkZHJlc3Mgb2YgYm9hcmQg ZGF0YQorc3RydWN0IHJlc291cmNlICp2bWVwY2ltZW07CitpbnQgdGJfc3BlZWQ7CitzdHJ1 Y3Qgc2VtYXBob3JlIHZpcnFfaW51c2U7CitzdHJ1Y3QgcGNpX2RldiAqdm1lX3BjaV9kZXY7 CisKK01PRFVMRV9QQVJNX0RFU0Modm1lY2hpcF9pcnEsICJWTUUgY2hpcCBpcnEgaW4gdGhl IHJhbmdlIDEtMjU1Iik7Cittb2R1bGVfcGFyYW0odm1lY2hpcF9pcnEsIGludCwgMCk7CitN T0RVTEVfUEFSTV9ERVNDKHZtZV9zbG90bnVtLCAiU2xvdCBOdW1iZXIgaW4gdGhlIHJhbmdl IDEtMjEiKTsKK21vZHVsZV9wYXJhbSh2bWVfc2xvdG51bSwgaW50LCAwKTsKK01PRFVMRV9M SUNFTlNFKCJHUEwiKTsKKworc3RhdGljIGludCB2bWVfbWlub3JfdHlwZShpbnQgbWlub3Ip Cit7CisJaWYgKG1pbm9yID4gc2l6ZW9mKHZtZV9taW5vcl9kZXZfZmxhZ3MpKSB7CisJCXJl dHVybiAoMCk7CisJfQorCXJldHVybiAodm1lX21pbm9yX2Rldl9mbGFnc1ttaW5vcl0pOwor fQorCisvKgorICogdm1lX2FsbG9jX2J1ZmZlcnMoKQorICoKKyAqIE9idGFpbiBhIGJ1ZmZl ciBmb3IgdGhlIGRhdGEgc3RydWN0dXJlIHRoYXQgd2lsbCBiZSAKKyAqIGFkdmVydGl6ZWQg dGhyb3VnaCBDUy9DU1Igc3BhY2UuIFRoZSBDUy9DU1IgZGVjb2RlciBvbmx5CisgKiBhbGxv d3MgcmVtYXBwaW5nIG9uIDUxMksgYm91bmRhcmllcyBzbyB0aGlzIGJ1ZmZlciBtdXN0IGJl CisgKiBhbGlnbmVkIG9uIGEgNTEySyBieXRlIGJvdW5kYXJ5LiAKKyAqCisgKi8KKworc3Rh dGljIGludCB2bWVfYWxsb2NfYnVmZmVycyh2b2lkKQoreworCWlmICh2bWVjaGlwX2ludGVy Ym9hcmRfZGF0YSA9PSBOVUxMKSB7CisJCXZtZWNoaXBfaW50ZXJib2FyZF9kYXRhID0gKHN0 cnVjdCB2bWVTaGFyZWREYXRhICopCisJCSAgICBkbWFfYWxsb2NfY29oZXJlbnQoKHN0cnVj dCBkZXZpY2UgKikmdm1lX3BjaV9kZXYtPmRldiwKKwkJCQkgICAgICAgSU5URVJCT0FSRF9C VUZGRVJfU0laRSwKKwkJCQkgICAgICAgKGRtYV9hZGRyX3QgKikmdm1lY2hpcF9pbnRlcmJv YXJkX2RhdGFwLAorCQkJCQlHRlBfRE1BKTsKKwkJaWYgKCF2bWVjaGlwX2ludGVyYm9hcmRf ZGF0YSkgeworCQkJcHJpbnRrKCJ0c2kxNDg6IE5vIG1lbW9yeSBmb3IgaW50ZXJib2FyZCBk YXRhXG4iKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCWlmICgoKGludCl2bWVjaGlw X2ludGVyYm9hcmRfZGF0YSAmIDB4N0ZGRkYpICE9IDApIHsKKwkJCXByaW50aworCQkJICAg ICgidHNpMTQ4OiBVbmFibGUgdG8gZ2V0IERNQSBidWZmZXIgd2l0aCByZXF1aXJlZCBhbGln bm1lbnRcbiIpOworCQkJcmV0dXJuIC0xOworCQl9CisJfQorI2lmZGVmIENPTkZJR19WTUVf QlJJREdFX0JPT1RNRU0KKwl7CisJCXN0cnVjdCBwYWdlICpwYWdlLCAqcGVuZDsKKworCQlp bl9pbWFnZV9zaXplWzddID0gdm1lX2Jvb3RtZW1fc2l6ZTsKKwkJaWYgKHZtZV9kcml2ZXJf Ym9vdG1lbSAhPSBOVUxMKSB7CisJCQlpbl9pbWFnZV9iYVs3XSA9IChjaGFyICopIHZtZV9k cml2ZXJfYm9vdG1lbTsKKwkJCWluX2ltYWdlX3BhWzddID0gX19wYShpbl9pbWFnZV9iYVs3 XSk7CisJCQkvKiBub3cgbWFyayB0aGUgcGFnZXMgYXMgcmVzZXJ2ZWQ7IG90aGVyd2lzZSAq LworCQkJLyogcmVtYXBfcGZuX3JhbmdlIGRvZXNuJ3QgZG8gd2hhdCB3ZSB3YW50ICovCisJ CQlwZW5kID0gdmlydF90b19wYWdlKGluX2ltYWdlX2JhWzddICsgaW5faW1hZ2Vfc2l6ZVs3 XSAtIDEpOworCQkJZm9yIChwYWdlID0gdmlydF90b19wYWdlKGluX2ltYWdlX2JhWzddKTsg CisJCQkJcGFnZSA8PSBwZW5kOyBwYWdlKyspCisJCQkJU2V0UGFnZVJlc2VydmVkKHBhZ2Up OworCQl9CisJfQorI2VuZGlmCisJcmV0dXJuICgwKTsKK30KKworLy8tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisvLyAgdm1lX2ZyZWVfYnVmZmVycygpCisvLyAgIEZyZWUgYWxsIGJ1ZmZl cnMgYWxsb2NhdGVkIGJ5IHRoaXMgZHJpdmVyLgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CitzdGF0aWMgdm9pZCB2bWVfZnJlZV9idWZmZXJzKHZvaWQpCit7CisJaW50IGk7CisJc3Ry dWN0IHBhZ2UgKnBhZ2UsICpwZW5kOworCisJLyogCisJICogY2xlYXIgdmFsaWQgZmxhZ3Mg b2YgaW50ZXJib2FyZCBkYXRhIGFuZCBmcmVlIGl0CisJICovCisJaWYgKHZtZWNoaXBfaW50 ZXJib2FyZF9kYXRhICE9IE5VTEwpIHsKKwkJc3RyY3B5KHZtZWNoaXBfaW50ZXJib2FyZF9k YXRhLT52YWxpZGl0eTEsICJPRkYiKTsKKwkJc3RyY3B5KHZtZWNoaXBfaW50ZXJib2FyZF9k YXRhLT52YWxpZGl0eTIsICJPRkYiKTsKKwkJZG1hX2ZyZWVfY29oZXJlbnQoJnZtZV9wY2lf ZGV2LT5kZXYsCisJCQkJICBJTlRFUkJPQVJEX0JVRkZFUl9TSVpFLAorCQkJCSAgdm1lY2hp cF9pbnRlcmJvYXJkX2RhdGEsCisJCQkJICB2bWVjaGlwX2ludGVyYm9hcmRfZGF0YXApOwor CX0KKwkvLyBmcmVlIGluYm91bmQgYnVmZmVycworCWZvciAoaSA9IDA7IGkgPCA4OyBpKysp IHsKKwkJaWYgKGluX2ltYWdlX2JhW2ldICE9IE5VTEwpIHsKKwkJCS8qIHVuZG8gbWFya2lu ZyB0aGUgcGFnZXMgYXMgcmVzZXJ2ZWQgKi8KKwkJCXBlbmQgPSB2aXJ0X3RvX3BhZ2UoaW5f aW1hZ2VfYmFbaV0gKyBpbl9pbWFnZV9zaXplW2ldIC0gMSk7CisJCQlmb3IgKHBhZ2UgPSB2 aXJ0X3RvX3BhZ2UoaW5faW1hZ2VfYmFbaV0pOyBwYWdlIDw9IHBlbmQ7IHBhZ2UrKykKKwkJ CQlDbGVhclBhZ2VSZXNlcnZlZChwYWdlKTsKKworCQkJaWYgKGkgPT0gNykgeworI2lmbmRl ZiBDT05GSUdfVk1FX0JSSURHRV9CT09UTUVNCisJCQkJZG1hX2ZyZWVfY29oZXJlbnQoJnZt ZV9wY2lfZGV2LT5kZXYsCisJCQkJCSAgaW5faW1hZ2Vfc2l6ZVtpXSwKKwkJCQkJICBpbl9p bWFnZV9iYVtpXSwgaW5faW1hZ2VfcGFbaV0pOworI2VuZGlmCisJCQkJaW5faW1hZ2VfbWFw cGVkW2ldID0gMDsKKwkJCX0gZWxzZSB7CisJCQkJZG1hX2ZyZWVfY29oZXJlbnQoJnZtZV9w Y2lfZGV2LT5kZXYsCisJCQkJCSAgaW5faW1hZ2Vfc2l6ZVtpXSwKKwkJCQkJICBpbl9pbWFn ZV9iYVtpXSwgaW5faW1hZ2VfcGFbaV0pOworCQkJCWluX2ltYWdlX21hcHBlZFtpXSA9IDA7 CisJCQl9CisJCX0KKwl9Cit9CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gIHZt ZV9pbml0X3Rlc3RfZGF0YSgpCisvLyAgIEluaXRpYWxpemUgdGhlIHRlc3QgYXJlYSBvZiB0 aGUgaW50ZXJib2FyZCBkYXRhIHN0cnVjdHVyZSAKKy8vICAgd2l0aCB0aGUgZXhwZWN0ZWQg ZGF0YSBwYXR0ZXJucy4KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorc3RhdGljIHZvaWQg dm1lX2luaXRfdGVzdF9kYXRhKGludCB0ZXN0ZGF0YVtdKQoreworCWludCBpOworCisJLy8g d2Fsa2luZyAxICYgd2Fsa2luZyAwCisJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKKwkJ dGVzdGRhdGFbaSAqIDJdID0gMSA8PCBpOworCQl0ZXN0ZGF0YVtpICogMiArIDFdID0gfigx IDw8IGkpOworCX0KKworCS8vIGFsbCAwLCBhbGwgMSdzLCA1NSdzIGFuZCBBQSdzCisJdGVz dGRhdGFbNjRdID0gMHgwOworCXRlc3RkYXRhWzY1XSA9IDB4RkZGRkZGRkY7CisJdGVzdGRh dGFbNjZdID0gMHg1NTU1NTU1NTsKKwl0ZXN0ZGF0YVs2N10gPSAweEFBQUFBQUFBOworCisJ Ly8gSW5jcmVtZW50aW5nIGRhdGEuCisJZm9yIChpID0gNjg7IGkgPCAxMDI0OyBpKyspIHsK KwkJdGVzdGRhdGFbaV0gPSBpOworCX0KK30KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisvLyAgdm1lX2luaXRfaW50ZXJib2FyZF9kYXRhKCkKKy8vICAgIEluaXRpYWxpemUgdGhl IGludGVyYm9hcmQgZGF0YSBzdHJ1Y3R1cmUuCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K K3N0YXRpYyB2b2lkIHZtZV9pbml0X2ludGVyYm9hcmRfZGF0YShzdHJ1Y3Qgdm1lU2hhcmVk RGF0YSAqcHRyKQoreworCWlmIChwdHIgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJbWVtc2V0 KHB0ciwgMCwgc2l6ZW9mKHN0cnVjdCB2bWVTaGFyZWREYXRhKSk7CisJdm1lX2luaXRfdGVz dF9kYXRhKCZwdHItPnJlYWRUZXN0UGF0dGVybnNbMF0pOworCisJcHRyLT5zdHJ1Y3R1cmVS ZXYgPSAxOworCXN0cmNweSgmcHRyLT5vc25hbWVbMF0sICJsaW51eCIpOworCisJcHRyLT5k cml2ZXJSZXYgPSAxOworCisjaWZkZWYgQ09ORklHX01WTUU0MTAwCisJc3RyY3B5KCZwdHIt PmJvYXJkU3RyaW5nWzBdLCAiTVZNRTQxMDAiKTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19N Vk1FNzEwMAorCXN0cmNweSgmcHRyLT5ib2FyZFN0cmluZ1swXSwgIk1WTUU3MTAwIik7Cisj ZW5kaWYKKyNpZmRlZiBDT05GSUdfTVZNRTMxMDAKKwlzdHJjcHkoJnB0ci0+Ym9hcmRTdHJp bmdbMF0sICJNVk1FMzEwMCIpOworI2VuZGlmCisjaWZkZWYgQ09ORklHX01WTUU2MTAwCisJ c3RyY3B5KCZwdHItPmJvYXJkU3RyaW5nWzBdLCAiTVZNRTYxMDAiKTsKKyNlbmRpZgorI2lm ZGVmIENPTkZJR19NVk1FNTUwMAorCXN0cmNweSgmcHRyLT5ib2FyZFN0cmluZ1swXSwgIk1W TUU1NTAwIik7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfTVZNRTUxMDAKKwlzdHJjcHkoJnB0 ci0+Ym9hcmRTdHJpbmdbMF0sICJNVk1FNTEwMCIpOworI2VuZGlmCisJcHRyLT52bWVDb250 cm9sbGVyVHlwZSA9IHZtZWNoaXBfZGV2aWQ7CisJcHRyLT52bWVDb250cm9sbGVyUmV2ID0g dm1lY2hpcF9yZXZpc2lvbjsKKworCS8qIFNldCB2YWxpZCBzdHJpbmdzICJWTUUiLCAiUkRZ IiAqLworCXN0cmNweShwdHItPnZhbGlkaXR5MSwgIlZNRSIpOworCXN0cmNweShwdHItPnZh bGlkaXR5MiwgIlJEWSIpOworCXZtZV9mbHVzaF9yYW5nZSgodW5zaWduZWQgbG9uZylwdHIs ICh1bnNpZ25lZCBsb25nKXB0ciArIHNpemVvZihzdHJ1Y3Qgdm1lU2hhcmVkRGF0YSkpOwor fQorCisvKgorICogIHZtZV9wcm9jaW5mbygpCisgKiAgICAgL3Byb2MgaW50ZXJmYWNlIGlu dG8gdGhpcyBkcml2ZXIKKyAqLworCitzdGF0aWMgaW50IHZtZV9wcm9jaW5mbyhjaGFyICpi dWYsIGNoYXIgKipzdGFydCwgb2ZmX3QgZnBvcywgaW50IGxlbmd0aCwKKwkJCWludCAqZW9m LCB2b2lkICpkYXRhKQoreworCWNoYXIgKnA7CisKKwlwID0gYnVmOworCXAgKz0gc3ByaW50 ZihwLCAiVk1FIGRyaXZlciAlc1xuXG4iLCBWZXJzaW9uKTsKKworCXAgKz0gc3ByaW50Zihw LCAidm1lY2hpcCBiYXNlYWRkciA9ICUwOFhcbiIsIChpbnQpdm1lY2hpcF9iYXNlYWRkcik7 CisJcCArPSBzcHJpbnRmKHAsICJ2bWVjaGlwIGRldmljZSAgID0gJTA4WFxuIiwgKGludCl2 bWVjaGlwX2RldmlkKTsKKwlwICs9IHNwcmludGYocCwgInZtZWNoaXAgcmV2aXNpb24gPSAl MDhYXG4iLCAoaW50KXZtZWNoaXBfcmV2aXNpb24pOworCXAgKz0gc3ByaW50ZihwLCAidm1l IHNsb3QgbnVtYmVyICA9ICUyZFxuIiwgKGludCl2bWVfc2xvdG51bSk7CisJaWYgKHZtZV9z eXNjb24pCisJCXAgKz0gc3ByaW50ZihwLCAidm1lIHN5c3RlbSBjb250cm9sbGVyID0gVFJV RVxuIik7CisJZWxzZQorCQlwICs9IHNwcmludGYocCwgInZtZSBzeXN0ZW0gY29udHJvbGxl ciA9IEZBTFNFXG4iKTsKKworCWlmICh2bWVjaGlwX2RldmlkID09IFBDSV9ERVZJQ0VfSURf VFVORFJBX1RTSTE0OCkgeworCQlwICs9IHRzaTE0OF9wcm9jaW5mbyhwKTsKKwl9CisKKwlp ZiAodm1lY2hpcF9kZXZpZCA9PSBQQ0lfREVWSUNFX0lEX1RVTkRSQV9DQTkxQzA0Mikgewor CQlwICs9IHVuaV9wcm9jaW5mbyhwKTsKKwl9CisKKwlwICs9IHNwcmludGYocCwgIlxuIik7 CisJcCArPSBzcHJpbnRmKHAsICJzdGF0aXN0aWNzOiAgcmVhZHMgPSAlaSAgd3JpdGVzID0g JWkgIGlvY3RscyA9ICVpXG5cbiIsCisJCSAgICAgcmVhZHMsIHdyaXRlcywgaW9jdGxzKTsK KwlwICs9IHNwcmludGYocCwgIlxuIik7CisKKwkqZW9mID0gMTsKKwlyZXR1cm4gcCAtIGJ1 ZjsKK30KKworLyoKKyAgcmVnaXN0ZXJfcHJvYygpCisqLworc3RhdGljIHZvaWQgcmVnaXN0 ZXJfcHJvYyh2b2lkKQoreworCXZtZV9wcm9jZGlyID0gY3JlYXRlX3Byb2NfZW50cnkoInZt ZWluZm8iLCBTX0lGUkVHIHwgU19JUlVHTywgMCk7CisJdm1lX3Byb2NkaXItPnJlYWRfcHJv YyA9IHZtZV9wcm9jaW5mbzsKK30KKworLyoKKyAgdW5yZWdpc3Rlcl9wcm9jKCkKKyovCitz dGF0aWMgdm9pZCB1bnJlZ2lzdGVyX3Byb2Modm9pZCkKK3sKKwlyZW1vdmVfcHJvY19lbnRy eSgidm1laW5mbyIsIDApOworfQorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICB2 bWVfY2hpcF9yZWdfcmVhZAorLy8gICAgUmVhZCBhIFZNRSBjaGlwIHJlZ2lzdGVyLgorLy8K Ky8vICAgIE5vdGUgdGhhdCBUZW1wZSBzd2l6emxlcyByZWdpc3RlcnMgYXQgb2Zmc2V0cyA+ IDB4MTAwIG9uIGl0cyBvd24uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3Vuc2lnbmVk IGludCB2bWVfY2hpcF9yZWdfcmVhZCh1bnNpZ25lZCBpbnQgKnB0cikKK3sKKwlzd2l0Y2gg KHZtZWNoaXBfZGV2aWQpIHsKKwljYXNlIFBDSV9ERVZJQ0VfSURfVFVORFJBX0NBOTFDMDQy OgorCQlyZXR1cm4gKHJlYWRsKHB0cikpOworCQlicmVhazsKKwljYXNlIFBDSV9ERVZJQ0Vf SURfVFVORFJBX1RTSTE0ODoKKwkJaWYgKCgoY2hhciAqKXB0cikgLSAoKGNoYXIgKil2bWVj aGlwX2Jhc2VhZGRyKSA+IDB4MTAwKSB7CisJCQlyZXR1cm4gKCpwdHIpOworCQl9CisJCXJl dHVybiAocmVhZGwocHRyKSk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gKDApOworfQorCisv KgorICB2bWVfY2hpcF9yZWdfd3JpdGUKKyAgICBXcml0ZSBhIFZNRSBjaGlwIHJlZ2lzdGVy LgorCisgICAgTm90ZSB0aGF0IFRlbXBlIHN3aXp6bGVzIHJlZ2lzdGVycyBhdCBvZmZzZXRz ID4gMHgxMDAgb24gaXRzIG93bi4KKyovCit2b2lkIHZtZV9jaGlwX3JlZ193cml0ZSh1bnNp Z25lZCBpbnQgKnB0ciwgdW5zaWduZWQgaW50IHZhbHVlKQoreworCXN3aXRjaCAodm1lY2hp cF9kZXZpZCkgeworCWNhc2UgUENJX0RFVklDRV9JRF9UVU5EUkFfQ0E5MUMwNDI6CisJCXdy aXRlbCh2YWx1ZSwgcHRyKTsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfREVWSUNFX0lEX1RVTkRS QV9UU0kxNDg6CisJCWlmICgoKGNoYXIgKilwdHIpIC0gKChjaGFyICopdm1lY2hpcF9iYXNl YWRkcikgPiAweDEwMCkgeworCQkJKnB0ciA9IHZhbHVlOworCQl9IGVsc2UgeworCQkJd3Jp dGVsKHZhbHVlLCBwdHIpOworCQl9CisJCWJyZWFrOworCX0KK30KKworLyoKKyBGdW5jdGlv biAgIDogdm1lX2lvY3RsX2ZyZWVfZG1hCisgRGVzY3JpcHRpb246IEZyZWUgdGhlIHBhZ2Vz IGFzc29jaWF0ZWQgd2l0aCB0aGUgbGlua2VkIGxpc3Qgb2YgRE1BIHBhY2tldHMuCisqLwor c3RhdGljIGludCB2bWVfaW9jdGxfZnJlZV9kbWEodm1lRG1hUGFja2V0X3QgKnN0YXJ0X3Br dCkKK3sKKyAgICAgICAgdm1lRG1hUGFja2V0X3QgKmN1cnJlbnRfcGt0OworICAgICAgICB2 bWVEbWFQYWNrZXRfdCAqcHJldmlvdXNfcGt0OworICAgICAgICB2bWVEbWFQYWNrZXRfdCAq bmV4dF9wa3Q7CisKKyAgICAgICAgLyogRnJlZSBhbGwgcGFnZXMgYXNzb2NpYXRlZCB3aXRo IHRoZSBwYWNrZXRzLiAqLworICAgICAgICBjdXJyZW50X3BrdCA9IHN0YXJ0X3BrdDsKKyAg ICAgICAgcHJldmlvdXNfcGt0ID0gY3VycmVudF9wa3Q7CisgICAgICAgIHdoaWxlIChjdXJy ZW50X3BrdCAhPSAwKSB7CisgICAgICAgICAgICAgICAgbmV4dF9wa3QgPSBjdXJyZW50X3Br dC0+cE5leHRQYWNrZXQ7CisgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRfcGt0ICsgMSAh PSBuZXh0X3BrdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZnJlZV9wYWdlcygoaW50 KXByZXZpb3VzX3BrdCwgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c19w a3QgPSBuZXh0X3BrdDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY3Vy cmVudF9wa3QgPSBuZXh0X3BrdDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gKDApOwor fQorCisKKy8qCisgRnVuY3Rpb24gICA6IHZtZV9pb2N0bF9zZXR1cF9kbWEKKyBEZXNjcmlw dGlvbjoKKyAgICBSZWFkIGRlc2NyaXB0b3JzIGZyb20gdXNlciBzcGFjZSBhbmQgY3JlYXRl IGEgbGlua2VkIGxpc3QKKyAgICBvZiBETUEgcGFja2V0cy4KKyovCitzdGF0aWMgdm1lRG1h UGFja2V0X3QgKnZtZV9pb2N0bF9zZXR1cF9kbWEodm1lRG1hUGFja2V0X3QgKnZtZV9kbWEs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnJldHVybl9zdGF0 dXMpCit7CisgICAgICAgIHZtZURtYVBhY2tldF90ICp2bWVfY3VycmVudDsKKyAgICAgICAg aW50IG1heF9wZXJfcGFnZTsKKyAgICAgICAgaW50IGN1cnJlbnRfcGt0Y291bnQ7CisgICAg ICAgIHZtZURtYVBhY2tldF90ICpzdGFydF9wa3Q7CisgICAgICAgIHZtZURtYVBhY2tldF90 ICpjdXJyZW50X3BrdDsKKworICAgICAgICBtYXhfcGVyX3BhZ2UgPSBQQUdFX1NJWkUgLyBz aXplb2Yodm1lRG1hUGFja2V0X3QpIC0gMTsKKyAgICAgICAgc3RhcnRfcGt0ID0gKHZtZURt YVBhY2tldF90ICopIF9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwgMCk7CisgICAgICAg IGlmIChzdGFydF9wa3QgPT0gMCkgeworICAgICAgICAgICAgICAgICpyZXR1cm5fc3RhdHVz ID0gLUVOT01FTTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKDApOworICAgICAgICB9Cisg ICAgICAgIC8qIEZpcnN0IGFsbG9jYXRlIHBhZ2VzIGZvciBwYWNrZXRzIGFuZCBjcmVhdGUg bGlua2VkIGxpc3QgKi8KKyAgICAgICAgdm1lX2N1cnJlbnQgPSB2bWVfZG1hOworICAgICAg ICBjdXJyZW50X3BrdCA9IHN0YXJ0X3BrdDsKKyAgICAgICAgY3VycmVudF9wa3Rjb3VudCA9 IDA7CisKKyAgICAgICAgd2hpbGUgKHZtZV9jdXJyZW50ICE9IDApIHsKKyAgICAgICAgICAg ICAgICBpZiAoY29weV9mcm9tX3VzZXIKKyAgICAgICAgICAgICAgICAgICAgKGN1cnJlbnRf cGt0LCB2bWVfY3VycmVudCwgc2l6ZW9mKHZtZURtYVBhY2tldF90KSkpIHsKKyAgICAgICAg ICAgICAgICAgICAgICAgIGN1cnJlbnRfcGt0LT5wTmV4dFBhY2tldCA9IDA7CisgICAgICAg ICAgICAgICAgICAgICAgICB2bWVfaW9jdGxfZnJlZV9kbWEoc3RhcnRfcGt0KTsKKyAgICAg ICAgICAgICAgICAgICAgICAgICpyZXR1cm5fc3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAg ICAgICAgICAgICAgICAgIHJldHVybiAoMCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgIGlmICgoY3VycmVudF9wa3QtPnNyY0J1cyA9PSBWTUVfRE1BX1VTRVIpIHx8 CisgICAgICAgICAgICAgICAgICAgIChjdXJyZW50X3BrdC0+ZHN0QnVzID09IFZNRV9ETUFf VVNFUikgfHwgCisgICAgICAgICAgICAgICAgICAgIChjdXJyZW50X3BrdC0+c3JjQnVzID09 IFZNRV9ETUFfS0VSTkVMKSB8fAorICAgICAgICAgICAgICAgICAgICAoY3VycmVudF9wa3Qt PmRzdEJ1cyA9PSBWTUVfRE1BX0tFUk5FTCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY3VycmVudF9wa3QtPnBOZXh0UGFja2V0ID0gMDsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdm1lX2lvY3RsX2ZyZWVfZG1hKHN0YXJ0X3BrdCk7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICpyZXR1cm5fc3RhdHVzID0gLUVJTlZBTDsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgwKTsKKyAgICAgICAg ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoY3VycmVudF9wa3QtPnBOZXh0UGFj a2V0ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2bWVfY3VycmVudCA9IGN1cnJlbnRfcGt0 LT5wTmV4dFBhY2tldDsKKworICAgICAgICAgICAgICAgIGN1cnJlbnRfcGt0LT5wTmV4dFBh Y2tldCA9IGN1cnJlbnRfcGt0ICsgMTsKKyAgICAgICAgICAgICAgICBjdXJyZW50X3BrdGNv dW50Kys7CisgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRfcGt0Y291bnQgPj0gbWF4X3Bl cl9wYWdlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50X3BrdC0+cE5leHRQ YWNrZXQgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2bWVEbWFQYWNrZXRfdCAq KSBfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwsIDApOworICAgICAgICAgICAgICAgICAg ICAgICAgY3VycmVudF9wa3Rjb3VudCA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgIGN1cnJlbnRfcGt0ID0gY3VycmVudF9wa3QtPnBOZXh0UGFja2V0OworICAg ICAgICB9CisKKyAgICAgICAgLyogUmV0dXJuIHRvIHBhY2tldHMgbGlzdCAqLworICAgICAg ICAqcmV0dXJuX3N0YXR1cyA9IDA7CisgICAgICAgIHJldHVybiAoc3RhcnRfcGt0KTsKK30K KworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBGdW5jdGlvbiAgIDogdm1lX2lv Y3RsX2RtYSgpCisvLyBJbnB1dHMgICAgIDogCisvLyAgIFVzZXIgcG9pbnRlciB0byBETUEg cGFja2V0IChwb3NzaWJseSBjaGFpbmVkKQorLy8gICBETUEgY2hhbm5lbCBudW1iZXIuCisv LyBPdXRwdXRzICAgIDogcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGVycm9yIGNvZGUgb24gZmFp bHVyZS4KKy8vIERlc2NyaXB0aW9uOiAKKy8vICAgQ29weSBETUEgY2hhaW4gaW50byBrZXJu ZWwgc3BhY2UuCisvLyAgIFZlcmlmeSB2YWxpZGl0eSBvZiBjaGFpbi4KKy8vICAgV2FpdCwg aWYgbmVlZGVkLCBmb3IgRE1BIGNoYW5uZWwgdG8gYmUgYXZhaWxhYmxlLgorLy8gICBEbyB0 aGUgRE1BIG9wZXJhdGlvbi4KKy8vICAgRnJlZSB0aGUgRE1BIGNoYW5uZWwuCisvLyAgIENv cHkgdGhlIERNQSBwYWNrZXQgd2l0aCBzdGF0dXMgYmFjayB0byB1c2VyIHNwYWNlLgorLy8g ICBGcmVlIHJlc291cmNlcyBhbGxvY2F0ZWQgYnkgdGhpcyBvcGVyYXRpb24uCisvLyBSZW1h cmtzICAgIDogCisvLyAgICBOb3RlLCBkdWUgdG8gY29tcGxleGl0eSwgRE1BIHRvL2Zyb20g YSB1c2VyIHNwYWNlIGJ1ZmZlciBpcyBkZWFsdCB3aXRoIAorLy8gICAgdmlhIGEgc2VwYXJh dGUgcm91dGluZS4KKy8vIEhpc3RvcnkgICAgOiAKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KK3N0YXRpYyBpbnQgdm1lX2lvY3RsX2RtYSh2bWVEbWFQYWNrZXRfdCAqdm1lX2RtYSwg aW50IGNoYW5uZWwpCit7CisKKwl2bWVEbWFQYWNrZXRfdCAqc3RhcnRfcGt0OworCWludCBz dGF0dXMgPSAwOworCisJLy8gUmVhZCB0aGUgKHBvc3NpYmx5IGxpbmtlZCkgZGVzY3JpcHRv cnMgZnJvbSB0aGUgdXNlcgorCXN0YXJ0X3BrdCA9IHZtZV9pb2N0bF9zZXR1cF9kbWEodm1l X2RtYSwgJnN0YXR1cyk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJcmV0dXJuIChzdGF0dXMp OworCX0KKworCXN0YXJ0X3BrdC0+Y2hhbm5lbF9udW1iZXIgPSBjaGFubmVsOworCWlmIChz dGFydF9wa3QtPmJ5dGVDb3VudCA8PSAwKSB7CisJCXZtZV9pb2N0bF9mcmVlX2RtYShzdGFy dF9wa3QpOworCQlyZXR1cm4gKC1FSU5WQUwpOworCX0KKworCS8vIFdhaXQgZm9yIERNQSBj aGFubmVsIHRvIGJlIGF2YWlsYWJsZS4KKwlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZkZXZp bnVzZVtjaGFubmVsICsgVk1FX01JTk9SX0RNQV0pKSB7CisJCXZtZV9pb2N0bF9mcmVlX2Rt YShzdGFydF9wa3QpOworCQlyZXR1cm4gKC1FUkVTVEFSVFNZUyk7CisJfQorCisJLy8gRG8g dGhlIERNQS4KKwlzdGF0dXMgPSB2bWVfZG9fZG1hKHN0YXJ0X3BrdCk7CisKKwkvLyBGcmVl IHRoZSBETUEgY2hhbm5lbC4KKwl1cCgmZGV2aW51c2VbY2hhbm5lbCArIFZNRV9NSU5PUl9E TUFdKTsKKworCS8vIENvcHkgdGhlIHJlc3VsdCBiYWNrIHRvIHRoZSB1c2VyLgorCWlmIChj b3B5X3RvX3VzZXIodm1lX2RtYSwgc3RhcnRfcGt0LCBzaXplb2Yodm1lRG1hUGFja2V0X3Qp KSkgeworCQl2bWVfaW9jdGxfZnJlZV9kbWEoc3RhcnRfcGt0KTsKKwkJcmV0dXJuICgtRUZB VUxUKTsKKwl9CisJLy8gRnJlZSB0aGUgbGlua2VkIGxpc3QuCisJdm1lX2lvY3RsX2ZyZWVf ZG1hKHN0YXJ0X3BrdCk7CisJcmV0dXJuIChzdGF0dXMpOworfQorCisvLy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKy8vCisvLyAgdm1lX3BvbGwoKQorLy8gIFBsYWNlIGhvbGRlciAtIHRo aXMgZHJpdmVyIGZ1bmN0aW9uIG5vdCBpbXBsZW1lbnRlZC4KKy8vCisvLy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KK3N0YXRpYyB1bnNpZ25lZCBpbnQgdm1lX3BvbGwoc3RydWN0IGZpbGUg KmZpbGUsIHBvbGxfdGFibGUgKiB3YWl0KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMg aW50IHZtZV9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Qg KnZtYSkKK3sKKwlpbnQgbWlub3I7CisJaW50IHJldCA9IDA7CisKKwlpZiAoKCFmaWxlKSB8 fCAoIXZtYSkpCisJCXJldHVybiAtRU5YSU87CisJbWlub3IgPSBNSU5PUihmaWxlLT5mX2Rl bnRyeS0+ZF9pbm9kZS0+aV9yZGV2KTsKKworCWlmICgobWlub3IgPCAwKSB8fCAobWlub3Ig PiAxNSkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKG1pbm9yID4gNykgeworCQkvKiBJ bmJvdW5kIHdpbmRvd3MgKi8KKwkJbWlub3IgLT0gODsKKworCQlpZiAodm1hLT52bV9wZ29m ZikKKwkJCXJldHVybiAtRUlOVkFMOwkvKiB3YW50IG5vIG9mZnNldCAqLworCisJCS8qCisJ CSAqIExvY2sgYSByZWFkIG9yIHdyaXRlIGFnYWluc3QgYW4gbW1hcC4KKwkJICovCisJCWRv d24oJmluX2ltYWdlX3NlbVttaW5vcl0pOworCQlyZXQgPSAtRUFHQUlOOworCQlpZiAocmVt YXBfcGZuX3JhbmdlKHZtYSwKKwkJCQkgICAgdm1hLT52bV9zdGFydCwKKwkJCQkgICAgaW5f aW1hZ2VfcGFbbWlub3JdID4+IFBBR0VfU0hJRlQsCisJCQkJICAgIHZtYS0+dm1fZW5kIC0g dm1hLT52bV9zdGFydCwKKwkJCQkgICAgdm1hLT52bV9wYWdlX3Byb3QpKQorCQkJZ290byBt bWFwX2luOworCQlpbl9pbWFnZV9tYXBwZWRbbWlub3JdID0gMTsKKwkJcmV0ID0gMDsKK21t YXBfaW46CisJCXVwKCZpbl9pbWFnZV9zZW1bbWlub3JdKTsKKwkJcmV0dXJuIHJldDsKKwl9 IGVsc2UgeworCQl1bnNpZ25lZCBsb25nIHZzaXplID0gdm1hLT52bV9lbmQgLSB2bWEtPnZt X3N0YXJ0OworCQl1bnNpZ25lZCBsb25nIHBzaXplOworCisJCS8qIE91dGJvdW5kIHdpbmRv d3MgKi8KKwkJaWYgKG91dF9pbWFnZV92YVttaW5vcl0gPT0gMCkKKwkJCXJldHVybiAoLUVJ TlZBTCk7CisKKwkJcHNpemUgPSBvdXRfcmVzb3VyY2VbbWlub3JdLmVuZCAtIG91dF9yZXNv dXJjZVttaW5vcl0uc3RhcnQgKyAxOworCQlwc2l6ZSAtPSB2bWEtPnZtX3Bnb2ZmICogUEFH RV9TSVpFOworCisJCWlmICh2c2l6ZSA+IHBzaXplKQorCQkJcmV0dXJuIC1FSU5WQUw7CisK KwkJLyoKKwkJICogTG9jayBhIHJlYWQgb3Igd3JpdGUgYWdhaW5zdCBhbiBtbWFwLgorCQkg Ki8KKwkJZG93bigmb3V0X2ltYWdlX3NlbVttaW5vcl0pOworCQlyZXQgPSAtRUFHQUlOOwor CQl2bWEtPnZtX3BhZ2VfcHJvdCB8PSBfUEFHRV9OT19DQUNIRSB8IF9QQUdFX0dVQVJERUQ7 CisJCWlmIChpb19yZW1hcF9wZm5fcmFuZ2Uodm1hLAorCQkJdm1hLT52bV9zdGFydCwKKwkJ CSgob3V0X3Jlc291cmNlW21pbm9yXS5zdGFydCAtCisJCQkJdm1lX3BjaV9idXNfbWVtX2Jh c2VfcGh5cyh2bWVfcGNpX2Rldi0+YnVzKSkgPj4gCisJCQkJCVBBR0VfU0hJRlQpICsgdm1h LT52bV9wZ29mZiwgCisJCQl2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQsCisJCQl2bWEt PnZtX3BhZ2VfcHJvdCkpCisJCQlnb3RvIG1tYXBfb3V0OworCQlvdXRfaW1hZ2VfbWFwcGVk W21pbm9yXSA9IDE7CisJCXJldCA9IDA7CittbWFwX291dDoKKwkJdXAoJm91dF9pbWFnZV9z ZW1bbWlub3JdKTsKKwkJcmV0dXJuIHJldDsKKwl9Cit9CisKKy8qCisgRnVuY3Rpb24gICA6 IHZtZV9vcGVuKCkKKyBJbnB1dHMgICAgIDogc3RhbmRhcmQgTGludXggZGV2aWNlIGRyaXZl ciBvcGVuIGFyZ3VtZW50cy4KKyBPdXRwdXRzICAgIDogcmV0dXJucyAwIG9uIHN1Y2Nlc3Ms IGVycm9yIGNvZGUgb24gZmFpbHVyZS4KKyBEZXNjcmlwdGlvbjogCisgICBWZXJpZnkgZGV2 aWNlIGlzIHZhbGlkLAorICAgSWYgZGV2aWNlIGlzIGV4Y2x1c2l2ZSB1c2UgYW5kIGFscmVh ZHkgb3BlbiwgcmV0dXJuIC1FQlVTWQorICAgSW5jcmVtZW50IGRldmljZSB1c2UgY291bnQu CisqLworc3RhdGljIGludCB2bWVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qg ZmlsZSAqZmlsZSkKK3sKKwl1bnNpZ25lZCBpbnQgbWlub3IgPSBpbWlub3IoaW5vZGUpOwor CWludCBtaW5vcl9mbGFnczsKKworCS8qIENoZWNrIGZvciB2YWxpZCBtaW5vciBudW0gKi8K KwltaW5vcl9mbGFncyA9IHZtZV9taW5vcl90eXBlKG1pbm9yKTsKKwlpZiAoIW1pbm9yX2Zs YWdzKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIFJlc3RyaWN0IGV4Y2x1c2l2ZSB1c2Ug ZGV2aWNlcyB0byBvbmUgb3BlbiAqLworCWlmICgobWlub3JfZmxhZ3MgJiBERVZfRVhDTFVT SVZFKSAmJgorCSAgICB0ZXN0X2FuZF9zZXRfYml0KDAsICZvcGVuZWRbbWlub3JdKSkKKwkJ cmV0dXJuIC1FQlVTWTsKKwlyZXR1cm4gKDApOworfQorCisvKgorIEZ1bmN0aW9uICAgOiB2 bWVfcmVsZWFzZSgpCisgSW5wdXRzICAgICA6IHN0YW5kYXJkIExpbnV4IGRldmljZSBkcml2 ZXIgcmVsZWFzZSBhcmd1bWVudHMuCisgT3V0cHV0cyAgICA6IHJldHVybnMgMC4KKyBEZXNj cmlwdGlvbjogCisgICAgRGVjcmVtZW50IHVzZSBjb3VudCBhbmQgcmV0dXJuLgorKi8KK3N0 YXRpYyBpbnQgdm1lX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUg KmZpbGUpCit7CisJdW5zaWduZWQgaW50IG1pbm9yID0gaW1pbm9yKGlub2RlKTsKKwlpbnQg bWlub3JfZmxhZ3M7CisKKwltaW5vcl9mbGFncyA9IHZtZV9taW5vcl90eXBlKG1pbm9yKTsK KwlpZiAoKG1pbm9yICYgVk1FX01JTk9SX1RZUEVfTUFTSykgPT0gVk1FX01JTk9SX09VVCkg eworCQlpbnQgZGVjb2Rlcl9udW07CisKKwkJZGVjb2Rlcl9udW0gPSBtaW5vciAmIDB4RjsJ LyogR2V0IG91dGJvdW5kIHdpbmRvdyBudW0gKi8KKworCQlpZiAoZGVjb2Rlcl9udW0gPCA4 KSAKKwkJCW91dF9pbWFnZV9tYXBwZWRbZGVjb2Rlcl9udW1dID0gMDsKKwkJIGVsc2UgCisJ CQlpbl9pbWFnZV9tYXBwZWRbZGVjb2Rlcl9udW0gLSA4XSA9IDA7CisJfQorCWNsZWFyX2Jp dCgwLCAmb3BlbmVkW21pbm9yXSk7CisKKwlyZXR1cm4gMDsKK30KKworLy8tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorLy8gRnVuY3Rpb24gICA6IHZtZV9yZWFkKCkKKy8vIElucHV0cyAg ICAgOiBzdGFuZGFyZCBsaW51eCBkZXZpY2UgZHJpdmVyIHJlYWQoKSBhcmd1bWVudHMuCisv LyBPdXRwdXRzICAgIDogY291bnQgb2YgYnl0ZXMgcmVhZCBvciBlcnJvciBjb2RlLgorLy8g RGVzY3JpcHRpb246IAorLy8gICAgU2FuaXR5IGNoZWNrIGlucHV0cywKKy8vICAgIElmIHJl Z2lzdGVyIHJlYWQsICB3cml0ZSB1c2VyIGJ1ZmZlciBmcm9tIGNoaXAgcmVnaXN0ZXJzCisv LyAgICBJZiBWTUUgd2luZG93IHJlYWQsIGZpbmQgdGhlIG91dGJvdW5kIHdpbmRvdyBhbmQg cmVhZCBkYXRhCisvLyAgICB0aHJvdWdoIHRoZSB3aW5kb3cuICBSZXR1cm4gbnVtYmVyIG9m IGJ5dGVzIHN1Y2Nlc3NmdWxseSByZWFkLgorLy8gUmVtYXJrcyAgICA6IAorLy8gSGlzdG9y eSAgICA6IAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorc3RhdGljIHNzaXplX3Qgdm1l X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50LAorCQkJ bG9mZl90ICogcHBvcykKK3sKKwlpbnQgeCA9IDA7CisJaW50IGRlY29kZXJfbnVtOworCWlu dCBva2NvdW50ID0gMDsKKwljaGFyICppbWFnZV9wOworCXVuc2lnbmVkIGludCB2LCBudW10 LCByZW1haW47CisJY2hhciAqdGVtcCA9IGJ1ZjsKKwl1bnNpZ25lZCBpbnQgbWlub3IgPSBp bWlub3IoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpOworCXVuc2lnbmVkIGludCBmb2Zmc2V0 OworCisJdW5zaWduZWQgY2hhciB2YzsKKwl1bnNpZ25lZCBzaG9ydCB2czsKKwl1bnNpZ25l ZCBpbnQgdmw7CisJaW50IG1pbm9yX2ZsYWdzOworCWludCBpbWFnZV9zaXplOworCisJbWlu b3JfZmxhZ3MgPSB2bWVfbWlub3JfdHlwZShtaW5vcik7CisJaWYgKCEobWlub3JfZmxhZ3Mg JiBERVZfUlcpKSB7CisJCXJldHVybiAoLUVJTlZBTCk7CisJfQorCisJaWYgKCpwcG9zID4g MHhGRkZGRkZGRikgeworCQlyZXR1cm4gKC1FSU5WQUwpOworCX0KKwlmb2Zmc2V0ID0gKnBw b3M7CisKKwlpZiAobWlub3IgPT0gVk1FX01JTk9SX1JFR1MpIHsKKwkJaWYgKChjb3VudCAh PSA0KSB8fCAoZm9mZnNldCAmICg0IC0gMSkpKSB7CS8qIHdvcmQgYWNjZXNzIG9ubHkgKi8K KwkJCXJldHVybiAoLUVJTlZBTCk7CisJCX0KKwkJaWYgKGZvZmZzZXQgPj0gMHgxMDAwKSB7 CS8qIFRydW5jYXRlIGF0IGVuZCBvZiByZWcgaW1hZ2UgKi8KKwkJCXJldHVybiAoMCk7CisJ CX0KKwkJdiA9IHZtZV9jaGlwX3JlZ19yZWFkKCh1bnNpZ25lZCBpbnQgKikodm1lY2hpcF9i YXNlYWRkciArCisJCQkJCQkgICAgICAgZm9mZnNldCkpOworCQlfX2NvcHlfdG9fdXNlcih0 ZW1wLCAmdiwgNCk7CisJfQorCisJaWYgKChtaW5vciAmIFZNRV9NSU5PUl9UWVBFX01BU0sp ID09IFZNRV9NSU5PUl9PVVQpIHsKKworCQlkZWNvZGVyX251bSA9IG1pbm9yICYgMHhGOwkv KiBHZXQgb3V0Ym91bmQgd2luZG93IG51bSAqLworCisJCWlmIChkZWNvZGVyX251bSA8IDgp IHsKKwkJCWlmIChvdXRfaW1hZ2VfdmFbZGVjb2Rlcl9udW1dID09IDApIHsKKwkJCQlyZXR1 cm4gKC1FSU5WQUwpOworCQkJfQorCQkJaWYgKG91dF9pbWFnZV9tYXBwZWRbZGVjb2Rlcl9u dW1dKQorCQkJCXJldHVybiAtRU5YSU87CisJCQlpbWFnZV9zaXplID0KKwkJCSAgICBvdXRf cmVzb3VyY2VbZGVjb2Rlcl9udW1dLmVuZCAtCisJCQkgICAgb3V0X3Jlc291cmNlW2RlY29k ZXJfbnVtXS5zdGFydCArIDE7CisJCQlpZiAoZm9mZnNldCA+PSBpbWFnZV9zaXplKSB7CisJ CQkJcmV0dXJuICgwKTsKKwkJCX0KKwkJCWRvd24oJm91dF9pbWFnZV9zZW1bZGVjb2Rlcl9u dW1dKTsKKwkJCWlmICgoZm9mZnNldCArIGNvdW50KSA+IGltYWdlX3NpemUpIHsKKwkJCQlj b3VudCA9IGltYWdlX3NpemUgLSBmb2Zmc2V0OworCQkJfQorCQkJcmVhZHMrKzsKKwkJCWlt YWdlX3AgPSAoY2hhciAqKShvdXRfaW1hZ2VfdmFbZGVjb2Rlcl9udW1dICsgZm9mZnNldCk7 CisKKwkJCS8vIENhbGMgdGhlIG51bWJlciBvZiBsb25ncyB3ZSBuZWVkCisJCQludW10ID0g Y291bnQgLyA0OworCQkJcmVtYWluID0gY291bnQgJSA0OworCQkJZm9yICh4ID0gMDsgeCA8 IG51bXQ7IHgrKykgeworCQkJCXZsID0gKihpbnQgKikoaW1hZ2VfcCk7CisKKwkJCQkvLyBM ZXRzIENoZWNrIGZvciBhIEJ1cyBFcnJvcgorCQkJCWlmICh2bWVfYnVzX2Vycm9yX2Noaygx KSkgeworCQkJCQl1cCgmb3V0X2ltYWdlX3NlbVtkZWNvZGVyX251bV0pOworCQkJCQlyZXR1 cm4gKG9rY291bnQpOworCQkJCX0KKwkJCQlva2NvdW50ICs9IDQ7CisKKwkJCQlfX2NvcHlf dG9fdXNlcih0ZW1wLCAmdmwsIDQpOworCQkJCWltYWdlX3AgKz0gNDsKKwkJCQl0ZW1wICs9 IDQ7CisJCQl9CisKKwkJCS8vIENhbGMgdGhlIG51bWJlciBvZiBXb3JkcyB3ZSBuZWVkCisJ CQludW10ID0gcmVtYWluIC8gMjsKKwkJCXJlbWFpbiA9IHJlbWFpbiAlIDI7CisJCQlmb3Ig KHggPSAwOyB4IDwgbnVtdDsgeCsrKSB7CisJCQkJdnMgPSAqKHNob3J0ICopKGltYWdlX3Ap OworCisJCQkJLy8gTGV0cyBDaGVjayBmb3IgYSBCdXMgRXJyb3IKKwkJCQlpZiAodm1lX2J1 c19lcnJvcl9jaGsoMSkpIHsKKwkJCQkJdXAoJm91dF9pbWFnZV9zZW1bZGVjb2Rlcl9udW1d KTsKKwkJCQkJcmV0dXJuIChva2NvdW50KTsKKwkJCQl9CisJCQkJb2tjb3VudCArPSAyOwor CisJCQkJX19jb3B5X3RvX3VzZXIodGVtcCwgJnZzLCAyKTsKKwkJCQlpbWFnZV9wICs9IDI7 CisJCQkJdGVtcCArPSAyOworCQkJfQorCisJCQlmb3IgKHggPSAwOyB4IDwgcmVtYWluOyB4 KyspIHsKKwkJCQl2YyA9IHJlYWRiKGltYWdlX3ApOworCisJCQkJLy8gTGV0cyBDaGVjayBm b3IgYSBCdXMgRXJyb3IKKwkJCQlpZiAodm1lX2J1c19lcnJvcl9jaGsoMSkpIHsKKwkJCQkJ dXAoJm91dF9pbWFnZV9zZW1bZGVjb2Rlcl9udW1dKTsKKwkJCQkJcmV0dXJuIChva2NvdW50 KTsKKwkJCQl9CisJCQkJb2tjb3VudCsrOworCisJCQkJX19jb3B5X3RvX3VzZXIodGVtcCwg JnZjLCAxKTsKKwkJCQlpbWFnZV9wICs9IDE7CisJCQkJdGVtcCArPSAxOworCQkJfQorCQkJ dXAoJm91dF9pbWFnZV9zZW1bZGVjb2Rlcl9udW1dKTsKKwkJfSBlbHNlIHsJLyogaW5ib3Vu ZCB3aW5kb3dzICovCisJCQlkZWNvZGVyX251bSAtPSA4OworCQkJaWYgKGluX2ltYWdlX2Jh W2RlY29kZXJfbnVtXSA9PSAwKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJaWYgKGluX2lt YWdlX21hcHBlZFtkZWNvZGVyX251bV0pCisJCQkJcmV0dXJuIC1FTlhJTzsKKwkJCWltYWdl X3NpemUgPSBpbl9pbWFnZV9zaXplW2RlY29kZXJfbnVtXTsKKwkJCWlmIChmb2Zmc2V0ID49 IGltYWdlX3NpemUpIHsKKwkJCQlyZXR1cm4gKDApOworCQkJfQorCQkJZG93bigmaW5faW1h Z2Vfc2VtW2RlY29kZXJfbnVtXSk7CisJCQlpZiAoKGZvZmZzZXQgKyBjb3VudCkgPiBpbWFn ZV9zaXplKSB7CisJCQkJY291bnQgPSBpbWFnZV9zaXplIC0gZm9mZnNldDsKKwkJCX0KKwkJ CXJlYWRzKys7CisJCQlpbWFnZV9wID0gKGNoYXIgKikoaW5faW1hZ2VfYmFbZGVjb2Rlcl9u dW1dICsgZm9mZnNldCk7CisKKwkJCS8vIENhbGMgdGhlIG51bWJlciBvZiBsb25ncyB3ZSBu ZWVkCisJCQludW10ID0gY291bnQgLyA0OworCQkJcmVtYWluID0gY291bnQgJSA0OworCQkJ Zm9yICh4ID0gMDsgeCA8IG51bXQ7IHgrKykgeworCQkJCXZsID0gKihpbnQgKikoaW1hZ2Vf cCk7CisJCQkJX19jb3B5X3RvX3VzZXIodGVtcCwgJnZsLCA0KTsKKwkJCQlpbWFnZV9wICs9 IDQ7CisJCQkJdGVtcCArPSA0OworCQkJfQorCisJCQkvLyBDYWxjIHRoZSBudW1iZXIgb2Yg V29yZHMgd2UgbmVlZAorCQkJbnVtdCA9IHJlbWFpbiAvIDI7CisJCQlyZW1haW4gPSByZW1h aW4gJSAyOworCQkJZm9yICh4ID0gMDsgeCA8IG51bXQ7IHgrKykgeworCQkJCXZzID0gKihz aG9ydCAqKShpbWFnZV9wKTsKKwkJCQlfX2NvcHlfdG9fdXNlcih0ZW1wLCAmdnMsIDIpOwor CQkJCWltYWdlX3AgKz0gMjsKKwkJCQl0ZW1wICs9IDI7CisJCQl9CisKKwkJCWZvciAoeCA9 IDA7IHggPCByZW1haW47IHgrKykgeworCQkJCXZjID0gKihjaGFyICopKGltYWdlX3ApOwor CQkJCV9fY29weV90b191c2VyKHRlbXAsICZ2YywgMSk7CisJCQkJaW1hZ2VfcCArPSAxOwor CQkJCXRlbXAgKz0gMTsKKwkJCX0KKwkJCXVwKCZpbl9pbWFnZV9zZW1bZGVjb2Rlcl9udW1d KTsKKwkJfQorCX0KKworCWlmICgoKG1pbm9yICYgVk1FX01JTk9SX1RZUEVfTUFTSykgPT0g Vk1FX01JTk9SX1NMT1RTMSkgfHwKKwkgICAgKChtaW5vciAmIFZNRV9NSU5PUl9UWVBFX01B U0spID09IFZNRV9NSU5PUl9TTE9UUzIpKSB7CisJCXJldHVybiAoLUVJTlZBTCk7CS8qIE5v dCBpbXBsZW1lbnRlZCB5ZXQgKi8KKwl9CisJKnBwb3MgKz0gY291bnQ7CisJcmV0dXJuIChj b3VudCk7Cit9CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEZ1bmN0aW9uICAg OiB2bWVfd3JpdGUoKQorLy8gSW5wdXRzICAgICA6IHN0YW5kYXJkIGxpbnV4IGRldmljZSBk cml2ZXIgd3JpdGUoKSBhcmd1bWVudHMuCisvLyBPdXRwdXRzICAgIDogY291bnQgb2YgYnl0 ZXMgd3JpdHRlbiBvciBlcnJvciBjb2RlLgorLy8gRGVzY3JpcHRpb246IAorLy8gICAgU2Fu aXR5IGNoZWNrIGlucHV0cywKKy8vICAgIElmIHJlZ2lzdGVyIHdyaXRlLCAgd3JpdGUgVk1F IGNoaXAgcmVnaXN0ZXJzIHdpdGggdGhlIHVzZXIgZGF0YQorLy8gICAgSWYgVk1FIHdpbmRv dyB3cml0ZSwgZmluZCB0aGUgb3V0Ym91bmQgd2luZG93IGFuZCB3cml0ZSB1c2VyIGRhdGEK Ky8vICAgIHRocm91Z2ggdGhlIHdpbmRvdy4gIFJldHVybiBudW1iZXIgb2YgYnl0ZXMgc3Vj Y2Vzc2Z1bGx5IHdyaXR0ZW4uCisvLyBSZW1hcmtzICAgIDogCisvLyBIaXN0b3J5ICAgIDog CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzdGF0aWMgc3NpemVfdCB2bWVfd3JpdGUo c3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50LAorCQkJ IGxvZmZfdCAqIHBwb3MpCit7CisJaW50IHg7CisJaW50IGRlY29kZXJfbnVtOworCWNoYXIg KmltYWdlX3A7CisJaW50IG9rY291bnQgPSAwOworCXVuc2lnbmVkIGludCBudW10LCByZW1h aW47CisJY2hhciAqdGVtcCA9IChjaGFyICopYnVmOworCXVuc2lnbmVkIGludCBtaW5vciA9 IGltaW5vcihmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CisJdW5zaWduZWQgaW50IGZvZmZz ZXQ7CisKKwl1bnNpZ25lZCBjaGFyIHZjOworCXVuc2lnbmVkIHNob3J0IHZzOworCXVuc2ln bmVkIGludCB2bDsKKwlpbnQgbWlub3JfZmxhZ3M7CisJaW50IGltYWdlX3NpemU7CisKKwlt aW5vcl9mbGFncyA9IHZtZV9taW5vcl90eXBlKG1pbm9yKTsKKwlpZiAoIShtaW5vcl9mbGFn cyAmIERFVl9SVykpIHsKKwkJcmV0dXJuICgtRUlOVkFMKTsKKwl9CisKKwlpZiAoKnBwb3Mg PiAweEZGRkZGRkZGKSB7CisJCXJldHVybiAoLUVJTlZBTCk7CisJfQorCWZvZmZzZXQgPSAq cHBvczsKKworCXdyaXRlcysrOworCWlmIChtaW5vciA9PSBWTUVfTUlOT1JfUkVHUykgewor CQlpZiAoKGNvdW50ICE9IDQpIHx8IChmb2Zmc2V0ICYgKDQgLSAxKSkpIHsJLyogd29yZCBh Y2Nlc3Mgb25seSAqLworCQkJcmV0dXJuICgtRUlOVkFMKTsKKwkJfQorCQlpZiAoZm9mZnNl dCA+PSAweDEwMDApIHsJLyogVHJ1bmNhdGUgYXQgZW5kIG9mIHJlZyBpbWFnZSAqLworCQkJ cmV0dXJuICgwKTsKKwkJfQorCQlfX2NvcHlfZnJvbV91c2VyKCZ2bCwgdGVtcCwgNCk7CisJ CXZtZV9jaGlwX3JlZ193cml0ZSgodW5zaWduZWQgaW50ICopKHZtZWNoaXBfYmFzZWFkZHIg KyBmb2Zmc2V0KSwKKwkJCQkgICB2bCk7CisJfQorCisJaWYgKChtaW5vciAmIFZNRV9NSU5P Ul9UWVBFX01BU0spID09IFZNRV9NSU5PUl9PVVQpIHsKKworCQlkZWNvZGVyX251bSA9IG1p bm9yICYgMHhGOwkvKiBHZXQgb3V0Ym91bmQgd2luZG93IG51bSAqLworCQlpZiAoZGVjb2Rl cl9udW0gPCA4KSB7CisJCQlpZiAob3V0X2ltYWdlX3ZhW2RlY29kZXJfbnVtXSA9PSAwKSB7 CisJCQkJcmV0dXJuICgtRUlOVkFMKTsKKwkJCX0KKwkJCWlmIChvdXRfaW1hZ2VfbWFwcGVk W2RlY29kZXJfbnVtXSkKKwkJCQlyZXR1cm4gLUVOWElPOworCisJCQlpbWFnZV9zaXplID0K KwkJCSAgICBvdXRfcmVzb3VyY2VbZGVjb2Rlcl9udW1dLmVuZCAtCisJCQkgICAgb3V0X3Jl c291cmNlW2RlY29kZXJfbnVtXS5zdGFydDsKKworCQkJaWYgKGZvZmZzZXQgPj0gaW1hZ2Vf c2l6ZSkgeworCQkJCXJldHVybiAoMCk7CisJCQl9CisJCQlkb3duKCZvdXRfaW1hZ2Vfc2Vt W2RlY29kZXJfbnVtXSk7CisJCQlpZiAoKGZvZmZzZXQgKyBjb3VudCkgPiBpbWFnZV9zaXpl KSB7CisJCQkJY291bnQgPSBpbWFnZV9zaXplIC0gZm9mZnNldDsKKwkJCX0KKwkJCS8vIENh bGMgdGhlIG51bWJlciBvZiBsb25ncyB3ZSBuZWVkCisJCQludW10ID0gY291bnQgLyA0Owor CQkJcmVtYWluID0gY291bnQgJSA0OworCQkJaW1hZ2VfcCA9IChjaGFyICopKG91dF9pbWFn ZV92YVtkZWNvZGVyX251bV0gKyBmb2Zmc2V0KTsKKworCQkJZm9yICh4ID0gMDsgeCA8IG51 bXQ7IHgrKykgeworCQkJCV9fY29weV9mcm9tX3VzZXIoJnZsLCB0ZW1wLCA0KTsKKwkJCQkq KGludCAqKWltYWdlX3AgPSB2bDsKKworCQkJCS8vIExldHMgQ2hlY2sgZm9yIGEgQnVzIEVy cm9yCisJCQkJaWYgKHZtZV9idXNfZXJyb3JfY2hrKDEpKSB7CisJCQkJCXVwKCZvdXRfaW1h Z2Vfc2VtW2RlY29kZXJfbnVtXSk7CisJCQkJCXJldHVybiAob2tjb3VudCk7CisJCQkJfSBl bHNlCisJCQkJCW9rY291bnQgKz0gNDsKKworCQkJCWltYWdlX3AgKz0gNDsKKwkJCQl0ZW1w ICs9IDQ7CisJCQl9CisKKwkJCS8vIENhbGMgdGhlIG51bWJlciBvZiBXb3JkcyB3ZSBuZWVk CisJCQludW10ID0gcmVtYWluIC8gMjsKKwkJCXJlbWFpbiA9IHJlbWFpbiAlIDI7CisKKwkJ CWZvciAoeCA9IDA7IHggPCBudW10OyB4KyspIHsKKwkJCQlfX2NvcHlfZnJvbV91c2VyKCZ2 cywgdGVtcCwgMik7CisJCQkJKihzaG9ydCAqKWltYWdlX3AgPSB2czsKKworCQkJCS8vIExl dHMgQ2hlY2sgZm9yIGEgQnVzIEVycm9yCisJCQkJaWYgKHZtZV9idXNfZXJyb3JfY2hrKDEp KSB7CisJCQkJCXVwKCZvdXRfaW1hZ2Vfc2VtW2RlY29kZXJfbnVtXSk7CisJCQkJCXJldHVy biAob2tjb3VudCk7CisJCQkJfSBlbHNlCisJCQkJCW9rY291bnQgKz0gMjsKKworCQkJCWlt YWdlX3AgKz0gMjsKKwkJCQl0ZW1wICs9IDI7CisJCQl9CisKKwkJCWZvciAoeCA9IDA7IHgg PCByZW1haW47IHgrKykgeworCQkJCV9fY29weV9mcm9tX3VzZXIoJnZjLCB0ZW1wLCAxKTsK KwkJCQl3cml0ZWIodmMsIGltYWdlX3ApOworCisJCQkJLy8gTGV0cyBDaGVjayBmb3IgYSBC dXMgRXJyb3IKKwkJCQlpZiAodm1lX2J1c19lcnJvcl9jaGsoMSkpIHsKKwkJCQkJdXAoJm91 dF9pbWFnZV9zZW1bZGVjb2Rlcl9udW1dKTsKKwkJCQkJcmV0dXJuIChva2NvdW50KTsKKwkJ CQl9IGVsc2UKKwkJCQkJb2tjb3VudCArPSAyOworCisJCQkJaW1hZ2VfcCArPSAxOworCQkJ CXRlbXAgKz0gMTsKKwkJCX0KKwkJCXVwKCZvdXRfaW1hZ2Vfc2VtW2RlY29kZXJfbnVtXSk7 CisJCX0gZWxzZSB7CS8qIGluYm91bmQgd2luZG93cyAqLworCQkJZGVjb2Rlcl9udW0gLT0g ODsKKwkJCWlmIChpbl9pbWFnZV9iYVtkZWNvZGVyX251bV0gPT0gMCkKKwkJCQlyZXR1cm4g LUVJTlZBTDsKKwkJCWlmIChpbl9pbWFnZV9tYXBwZWRbZGVjb2Rlcl9udW1dKQorCQkJCXJl dHVybiAtRU5YSU87CisKKwkJCWltYWdlX3NpemUgPSBpbl9pbWFnZV9zaXplW2RlY29kZXJf bnVtXTsKKworCQkJaWYgKGZvZmZzZXQgPj0gaW1hZ2Vfc2l6ZSkgeworCQkJCXJldHVybiAo MCk7CisJCQl9CisJCQlkb3duKCZpbl9pbWFnZV9zZW1bZGVjb2Rlcl9udW1dKTsKKwkJCWlm ICgoZm9mZnNldCArIGNvdW50KSA+IGltYWdlX3NpemUpIHsKKwkJCQljb3VudCA9IGltYWdl X3NpemUgLSBmb2Zmc2V0OworCQkJfQorCQkJLy8gQ2FsYyB0aGUgbnVtYmVyIG9mIGxvbmdz IHdlIG5lZWQKKwkJCW51bXQgPSBjb3VudCAvIDQ7CisJCQlyZW1haW4gPSBjb3VudCAlIDQ7 CisJCQlpbWFnZV9wID0gKGNoYXIgKikoaW5faW1hZ2VfYmFbZGVjb2Rlcl9udW1dICsgZm9m ZnNldCk7CisKKwkJCWZvciAoeCA9IDA7IHggPCBudW10OyB4KyspIHsKKwkJCQlfX2NvcHlf ZnJvbV91c2VyKCZ2bCwgdGVtcCwgNCk7CisJCQkJKihpbnQgKilpbWFnZV9wID0gdmw7CisJ CQkJaW1hZ2VfcCArPSA0OworCQkJCXRlbXAgKz0gNDsKKwkJCX0KKworCQkJLy8gQ2FsYyB0 aGUgbnVtYmVyIG9mIFdvcmRzIHdlIG5lZWQKKwkJCW51bXQgPSByZW1haW4gLyAyOworCQkJ cmVtYWluID0gcmVtYWluICUgMjsKKworCQkJZm9yICh4ID0gMDsgeCA8IG51bXQ7IHgrKykg eworCQkJCV9fY29weV9mcm9tX3VzZXIoJnZzLCB0ZW1wLCAyKTsKKwkJCQkqKHNob3J0ICop aW1hZ2VfcCA9IHZzOworCQkJCWltYWdlX3AgKz0gMjsKKwkJCQl0ZW1wICs9IDI7CisJCQl9 CisKKwkJCWZvciAoeCA9IDA7IHggPCByZW1haW47IHgrKykgeworCQkJCV9fY29weV9mcm9t X3VzZXIoJnZjLCB0ZW1wLCAxKTsKKwkJCQkqKGNoYXIgKilpbWFnZV9wID0gdmM7CisJCQkJ aW1hZ2VfcCArPSAxOworCQkJCXRlbXAgKz0gMTsKKwkJCX0KKwkJCXVwKCZpbl9pbWFnZV9z ZW1bZGVjb2Rlcl9udW1dKTsKKwkJfQorCX0KKworCWlmICgoKG1pbm9yICYgVk1FX01JTk9S X1RZUEVfTUFTSykgPT0gVk1FX01JTk9SX1NMT1RTMSkgfHwKKwkgICAgKChtaW5vciAmIFZN RV9NSU5PUl9UWVBFX01BU0spID09IFZNRV9NSU5PUl9TTE9UUzIpKSB7CisJCXJldHVybiAo LUVJTlZBTCk7CS8qIE5vdCBpbXBsZW1lbnRlZCB5ZXQgKi8KKwl9CisKKwkqcHBvcyArPSBj b3VudDsKKwlyZXR1cm4gKGNvdW50KTsKK30KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorLy8gRnVuY3Rpb24gICA6IHZtZV9pb2N0bCgpCisvLyBJbnB1dHMgICAgIDogCisvLyAg ICBjbWQgLT4gdGhlIElPQ1RMIGNvbW1hbmQKKy8vICAgIGFyZyAtPiBwb2ludGVyIChpZiBh bnkpIHRvIHRoZSB1c2VyIGlvY3RsIGJ1ZmZlciAKKy8vIE91dHB1dHMgICAgOiAwIGZvciBz dWNlc3Mgb3IgZXJyb3Jjb2RlIGZvciBmYWlsdXJlLgorLy8gRGVzY3JpcHRpb246IAorLy8g ICAgQ29weSBpbiwgaWYgbmVlZGVkLCB0aGUgdXNlciBpbnB1dCBidWZmZXIgcG9pbnRlZCB0 byBieSBhcmcuCisvLyAgICBDYWxsIHZtZSBkcml2ZXIgdG8gcGVyZm9ybSBhY3R1YWwgaW9j dGwKKy8vICAgIENvcHkgb3V0LCBpZiBuZWVkZWQsIHRoZSB1c2VyIG91dHB1dCBidWZmZXIg cG9pbnRlZCB0byBiZSBhcmcuCisvLyBSZW1hcmtzICAgIDogCisvLyBIaXN0b3J5ICAgIDog CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzdGF0aWMgaW50IHZtZV9pb2N0bChzdHJ1 Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwK KwkJICAgICB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwl1bnNpZ25lZCBpbnQgbWlub3IgPSBp bWlub3IoaW5vZGUpOworCXZtZU91dFdpbmRvd0NmZ190IHZtZV9vdXQ7CisJdm1lSW5mb0Nm Z190IHZtZV9pbmZvOworCXZtZVJlcXVlc3RlckNmZ190IHZtZV9yZXE7CisJdm1lQXJiaXRl ckNmZ190IHZtZV9hcmI7CisJdm1lSW5XaW5kb3dDZmdfdCB2bWVfaW47CisJdmlycUluZm9f dCB2bWVfaXJxOworCXZtZVJtd0NmZ190IHZtZV9ybXc7CisJdm1lTG1DZmdfdCB2bWVfbG07 CisJaW50IHN0YXR1czsKKworCWlvY3RscysrOworCisJc3dpdGNoIChtaW5vciAmIFZNRV9N SU5PUl9UWVBFX01BU0spIHsKKwljYXNlIFZNRV9NSU5PUl9PVVQ6CisJCXN3aXRjaCAoY21k KSB7CisJCWNhc2UgVk1FX0lPQ1RMX0dFVF9PVVRCT1VORDoKKwkJCWlmIChjb3B5X2Zyb21f dXNlcgorCQkJICAgICgmdm1lX291dCwgKHZvaWQgKilhcmcsIHNpemVvZih2bWVfb3V0KSkp CisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQlzdGF0dXMgPSB2bWVfZ2V0X291dF9ib3VuZCgm dm1lX291dCk7CisJCQlpZiAoc3RhdHVzICE9IDApCisJCQkJcmV0dXJuIChzdGF0dXMpOwor CQkJaWYgKGNvcHlfdG9fdXNlcgorCQkJICAgICgodm9pZCAqKWFyZywgJnZtZV9vdXQsIHNp emVvZih2bWVfb3V0KSkpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQlicmVhazsKKwkJY2Fz ZSBWTUVfSU9DVExfU0VUX09VVEJPVU5EOgorCQkJaWYgKGNvcHlfZnJvbV91c2VyCisJCQkg ICAgKCZ2bWVfb3V0LCAodm9pZCAqKWFyZywgc2l6ZW9mKHZtZV9vdXQpKSkKKwkJCQlyZXR1 cm4gLUVGQVVMVDsKKwkJCWlmICgodm1lX291dC53aW5kb3dOYnIgPCAwKSB8fCAodm1lX291 dC53aW5kb3dOYnIgPiA3KSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWlmIChvdXRfaW1h Z2VfbWFwcGVkW3ZtZV9vdXQud2luZG93TmJyXSkKKwkJCQlyZXR1cm4gLUVOWElPOworCisJ CQlzdGF0dXMgPSB2bWVfc2V0X291dF9ib3VuZCgmdm1lX291dCk7CisJCQlpZiAoc3RhdHVz ICE9IDApCisJCQkJcmV0dXJuIChzdGF0dXMpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJ CQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlicmVhazsKKworCWNhc2UgVk1FX01JTk9SX0RN QToKKwkJc3dpdGNoIChjbWQpIHsKKwkJY2FzZSBWTUVfSU9DVExfUEFVU0VfRE1BOgorCQlj YXNlIFZNRV9JT0NUTF9DT05USU5VRV9ETUE6CisJCWNhc2UgVk1FX0lPQ1RMX0FCT1JUX0RN QToKKwkJY2FzZSBWTUVfSU9DVExfV0FJVF9ETUE6CisJCQlyZXR1cm4gKC1FSU5WQUwpOwkv KiBOb3Qgc3VwcG9ydGVkIGZvciBub3cuICovCisJCQlicmVhazsKKwkJY2FzZSBWTUVfSU9D VExfU1RBUlRfRE1BOgorCQkJc3RhdHVzID0KKwkJCSAgICB2bWVfaW9jdGxfZG1hKCh2bWVE bWFQYWNrZXRfdCAqKSBhcmcsCisJCQkJCSAgbWlub3IgLSBWTUVfTUlOT1JfRE1BKTsKKwkJ CWlmIChzdGF0dXMgIT0gMCkKKwkJCQlyZXR1cm4gKHN0YXR1cyk7CisJCQlicmVhazsKKwkJ ZGVmYXVsdDoKKwkJCXJldHVybiAoLUVJTlZBTCk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNl IFZNRV9NSU5PUl9NSVNDOgorCQlzd2l0Y2ggKG1pbm9yKSB7CisJCWNhc2UgVk1FX01JTk9S X0NUTDoKKwkJCXN3aXRjaCAoY21kKSB7CisJCQljYXNlIFZNRV9JT0NUTF9HRVRfU0xPVF9W TUVfSU5GTzoKKwkJCQlpZiAoY29weV9mcm9tX3VzZXIKKwkJCQkgICAgKCZ2bWVfaW5mbywg KHZvaWQgKilhcmcsIHNpemVvZih2bWVfaW5mbykpKQorCQkJCQlyZXR1cm4gKC1FRkFVTFQp OworCQkJCXN0YXR1cyA9IHZtZV9nZXRfc2xvdF9pbmZvKCZ2bWVfaW5mbyk7CisJCQkJaWYg KHN0YXR1cyAhPSAwKQorCQkJCQlyZXR1cm4gKHN0YXR1cyk7CisJCQkJaWYgKGNvcHlfdG9f dXNlcgorCQkJCSAgICAoKHZvaWQgKilhcmcsICZ2bWVfaW5mbywgc2l6ZW9mKHZtZV9pbmZv KSkpCisJCQkJCXJldHVybiAoLUVGQVVMVCk7CisJCQkJYnJlYWs7CisJCQljYXNlIFZNRV9J T0NUTF9TRVRfUkVRVUVTVE9SOgorCQkJCWlmIChjb3B5X2Zyb21fdXNlcgorCQkJCSAgICAo JnZtZV9yZXEsICh2b2lkICopYXJnLCBzaXplb2Yodm1lX3JlcSkpKQorCQkJCQlyZXR1cm4g KC1FRkFVTFQpOworCQkJCXN0YXR1cyA9IHZtZV9zZXRfcmVxdWVzdG9yKCZ2bWVfcmVxKTsK KwkJCQlpZiAoc3RhdHVzICE9IDApCisJCQkJCXJldHVybiAoc3RhdHVzKTsKKwkJCQlicmVh azsKKwkJCWNhc2UgVk1FX0lPQ1RMX0dFVF9SRVFVRVNUT1I6CisJCQkJaWYgKGNvcHlfZnJv bV91c2VyCisJCQkJICAgICgmdm1lX3JlcSwgKHZvaWQgKilhcmcsIHNpemVvZih2bWVfcmVx KSkpCisJCQkJCXJldHVybiAoLUVGQVVMVCk7CisJCQkJc3RhdHVzID0gdm1lX2dldF9yZXF1 ZXN0b3IoJnZtZV9yZXEpOworCQkJCWlmIChzdGF0dXMgIT0gMCkKKwkJCQkJcmV0dXJuIChz dGF0dXMpOworCQkJCWlmIChjb3B5X3RvX3VzZXIKKwkJCQkgICAgKCh2b2lkICopYXJnLCAm dm1lX3JlcSwgc2l6ZW9mKHZtZV9yZXEpKSkKKwkJCQkJcmV0dXJuICgtRUZBVUxUKTsKKwkJ CQlicmVhazsKKwkJCWNhc2UgVk1FX0lPQ1RMX1NFVF9DT05UUk9MTEVSOgorCQkJCWlmIChj b3B5X2Zyb21fdXNlcgorCQkJCSAgICAoJnZtZV9hcmIsICh2b2lkICopYXJnLCBzaXplb2Yo dm1lX2FyYikpKQorCQkJCQlyZXR1cm4gKC1FRkFVTFQpOworCQkJCXN0YXR1cyA9IHZtZV9z ZXRfYXJiaXRlcigmdm1lX2FyYik7CisJCQkJaWYgKHN0YXR1cyAhPSAwKQorCQkJCQlyZXR1 cm4gKHN0YXR1cyk7CisJCQkJaWYgKGNvcHlfdG9fdXNlcgorCQkJCSAgICAoKHZvaWQgKilh cmcsICZ2bWVfYXJiLCBzaXplb2Yodm1lX2FyYikpKQorCQkJCQlyZXR1cm4gKC1FRkFVTFQp OworCQkJCWJyZWFrOworCQkJY2FzZSBWTUVfSU9DVExfR0VUX0NPTlRST0xMRVI6CisJCQkJ c3RhdHVzID0gdm1lX2dldF9hcmJpdGVyKCZ2bWVfYXJiKTsKKwkJCQlpZiAoc3RhdHVzICE9 IDApCisJCQkJCXJldHVybiAoc3RhdHVzKTsKKwkJCQlpZiAoY29weV90b191c2VyCisJCQkJ ICAgICgodm9pZCAqKWFyZywgJnZtZV9hcmIsIHNpemVvZih2bWVfYXJiKSkpCisJCQkJCXJl dHVybiAoLUVGQVVMVCk7CisJCQkJYnJlYWs7CisJCQkJLyogRm9yIGxlZ2FjeSBwdXJwb3Nl cywgVk1FX0lPQ1RMX0dFVF9JTkJPVU5EIAorCQkJCSAqIGFuZCBWTUVfSU9DVExfU0VUX0lO Qk9VTkQgYXJlIGRvbmUgaGVyZQorCQkJCSAqLworCQkJY2FzZSBWTUVfSU9DVExfU0VUX0lO Qk9VTkQ6CisJCQkJaWYgKGNvcHlfZnJvbV91c2VyCisJCQkJICAgICgmdm1lX2luLCAodm9p ZCAqKWFyZywgc2l6ZW9mKHZtZV9pbikpKQorCQkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCQlp ZiAoKHZtZV9pbi53aW5kb3dOYnIgPCAwKSB8fAorCQkJCQkgKHZtZV9pbi53aW5kb3dOYnIg PiA3KSkKKwkJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQkJaWYgKGluX2ltYWdlX21hcHBlZFt2 bWVfaW4ud2luZG93TmJyXSkKKwkJCQkJcmV0dXJuIC1FTlhJTzsKKwkJCQlzdGF0dXMgPSB2 bWVfc2V0X2luX2JvdW5kKCZ2bWVfaW4pOworCQkJCWlmIChzdGF0dXMgIT0gMCkKKwkJCQkJ cmV0dXJuIChzdGF0dXMpOworCQkJCWJyZWFrOworCQkJY2FzZSBWTUVfSU9DVExfR0VUX0lO Qk9VTkQ6CisJCQkJaWYgKGNvcHlfZnJvbV91c2VyCisJCQkJICAgICgmdm1lX2luLCAodm9p ZCAqKWFyZywgc2l6ZW9mKHZtZV9pbikpKQorCQkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCQlz dGF0dXMgPSB2bWVfZ2V0X2luX2JvdW5kKCZ2bWVfaW4pOworCQkJCWlmIChzdGF0dXMgIT0g MCkKKwkJCQkJcmV0dXJuIChzdGF0dXMpOworCQkJCWlmIChjb3B5X3RvX3VzZXIKKwkJCQkg ICAgKCh2b2lkICopYXJnLCAmdm1lX2luLCBzaXplb2Yodm1lX2luKSkpCisJCQkJCXJldHVy biAoLUVGQVVMVCk7CisJCQkJYnJlYWs7CisJCQljYXNlIFZNRV9JT0NUTF9HRU5FUkFURV9J UlE6CisKKwkJCQlpZiAoY29weV9mcm9tX3VzZXIKKwkJCQkgICAgKCZ2bWVfaXJxLCAodm9p ZCAqKWFyZywgc2l6ZW9mKHZtZV9pcnEpKSkKKwkJCQkJcmV0dXJuICgtRUZBVUxUKTsKKwor CQkJCS8vIE9idGFpbiBhY2Nlc3MgdG8gVklSUSBnZW5lcmF0b3IuCisJCQkJaWYgKGRvd25f aW50ZXJydXB0aWJsZSgmdmlycV9pbnVzZSkpCisJCQkJCXJldHVybiAoLUVSRVNUQVJUU1lT KTsKKwkJCQlzdGF0dXMgPSB2bWVfZ2VuZXJhdGVfaXJxKCZ2bWVfaXJxKTsKKwkJCQl1cCgm dmlycV9pbnVzZSk7CS8vIFJlbGVhc2UgVklSUSBnZW5lcmF0b3IuCisKKwkJCQlpZiAoc3Rh dHVzICE9IDApCisJCQkJCXJldHVybiAoc3RhdHVzKTsKKwkJCQlpZiAoY29weV90b191c2Vy CisJCQkJICAgICgodm9pZCAqKWFyZywgJnZtZV9pcnEsIHNpemVvZih2bWVfaXJxKSkpCisJ CQkJCXJldHVybiAoLUVGQVVMVCk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgVk1FX0lPQ1RM X0dFVF9JUlFfU1RBVFVTOgorCQkJCWlmIChjb3B5X2Zyb21fdXNlcgorCQkJCSAgICAoJnZt ZV9pcnEsICh2b2lkICopYXJnLCBzaXplb2Yodm1lX2lycSkpKQorCQkJCQlyZXR1cm4gKC1F RkFVTFQpOworCQkJCXN0YXR1cyA9IHZtZV9nZXRfaXJxX3N0YXR1cygmdm1lX2lycSk7CisJ CQkJaWYgKHN0YXR1cyAhPSAwKQorCQkJCQlyZXR1cm4gKHN0YXR1cyk7CisJCQkJaWYgKGNv cHlfdG9fdXNlcgorCQkJCSAgICAoKHZvaWQgKilhcmcsICZ2bWVfaXJxLCBzaXplb2Yodm1l X2lycSkpKQorCQkJCQlyZXR1cm4gKC1FRkFVTFQpOworCQkJCWJyZWFrOworCQkJY2FzZSBW TUVfSU9DVExfQ0xSX0lSUV9TVEFUVVM6CisJCQkJaWYgKGNvcHlfZnJvbV91c2VyCisJCQkJ ICAgICgmdm1lX2lycSwgKHZvaWQgKilhcmcsIHNpemVvZih2bWVfaXJxKSkpCisJCQkJCXJl dHVybiAoLUVGQVVMVCk7CisJCQkJc3RhdHVzID0gdm1lX2Nscl9pcnFfc3RhdHVzKCZ2bWVf aXJxKTsKKwkJCQlpZiAoc3RhdHVzICE9IDApCisJCQkJCXJldHVybiAoc3RhdHVzKTsKKwkJ CQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJcmV0dXJuICgtRUlOVkFMKTsKKwkJCX0KKwkJ CWJyZWFrOworCQljYXNlIFZNRV9NSU5PUl9SRUdTOgorCQkJcmV0dXJuICgtRUlOVkFMKTsK KwkJY2FzZSBWTUVfTUlOT1JfUk1XOgorCQkJaWYgKGNvcHlfZnJvbV91c2VyCisJCQkgICAg KCZ2bWVfcm13LCAodm9pZCAqKWFyZywgc2l6ZW9mKHZtZV9ybXcpKSkKKwkJCQlyZXR1cm4g KC1FRkFVTFQpOworCQkJc3dpdGNoIChjbWQpIHsKKwkJCWNhc2UgVk1FX0lPQ1RMX0RPX1JN VzoKKwkJCQlzdGF0dXMgPSB2bWVfZG9fcm13KCZ2bWVfcm13KTsKKwkJCQlpZiAoc3RhdHVz ICE9IDApCisJCQkJCXJldHVybiAoc3RhdHVzKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6 CisJCQkJcmV0dXJuICgtRUlOVkFMKTsKKwkJCX0KKwkJCWlmIChjb3B5X3RvX3VzZXIKKwkJ CSAgICAoKHZvaWQgKilhcmcsICZ2bWVfcm13LCBzaXplb2Yodm1lX3JtdykpKQorCQkJCXJl dHVybiAoLUVGQVVMVCk7CisJCQlicmVhazsKKworCQljYXNlIFZNRV9NSU5PUl9MTToKKwkJ CWlmIChjb3B5X2Zyb21fdXNlcgorCQkJICAgICgmdm1lX2xtLCAodm9pZCAqKWFyZywgc2l6 ZW9mKHZtZV9sbSkpKQorCQkJCXJldHVybiAoLUVGQVVMVCk7CisJCQlzd2l0Y2ggKGNtZCkg eworCQkJY2FzZSBWTUVfSU9DVExfU0VUVVBfTE06CisJCQkJc3RhdHVzID0gdm1lX3NldHVw X2xtKCZ2bWVfbG0pOworCQkJCWlmIChzdGF0dXMgIT0gMCkKKwkJCQkJcmV0dXJuIChzdGF0 dXMpOworCQkJCWJyZWFrOworCQkJY2FzZSBWTUVfSU9DVExfV0FJVF9MTToKKwkJCQlzdGF0 dXMgPSB2bWVfd2FpdF9sbSgmdm1lX2xtKTsKKwkJCQlpZiAoc3RhdHVzICE9IDApCisJCQkJ CXJldHVybiAoc3RhdHVzKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJcmV0dXJu ICgtRUlOVkFMKTsKKwkJCX0KKwkJCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgKilhcmcsICZ2 bWVfbG0sIHNpemVvZih2bWVfbG0pKSkKKwkJCQlyZXR1cm4gKC1FRkFVTFQpOworCQkJYnJl YWs7CisKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAoLUVJTlZBTCk7CisJCX0KKwkJYnJlYWs7 CisKKyNpZgkwCQkJLy8gaW50ZXJib2FyZCBkYXRhIGNoYW5uZWxzIG5vdCBpbXBsZW1lbnRl ZCB5ZXQKKwljYXNlIFZNRV9NSU5PUl9TTE9UUzE6CisJY2FzZSBWTUVfTUlOT1JfU0xPVFMz OgorCQlicmVhazsKKyNlbmRpZgorCWRlZmF1bHQ6CisJCXJldHVybiAoLUVJTlZBTCk7CisJ fQkJCS8vIG1hc2tlZCBtaW5vcgorCXJldHVybiAoc3RhdHVzKTsKK30KKworLy8tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorLy8gRnVuY3Rpb24gICA6IGZpbmRfdm1lX2JyaWRnZSgpCisv LyBJbnB1dHMgICAgIDogdm9pZAorLy8gT3V0cHV0cyAgICA6IGZhaWxlZCBmbGFnLgorLy8g RGVzY3JpcHRpb246IAorLy8gICAgU2VhcmNoIGZvciBhIHN1cHBvcnRlZCBWTUUgYnJpZGdl IGNoaXAuICAKKy8vICAgIEluaXRpYWxpemUgVk1FIGNvbmZpZyByZWdpc3RlcnMuCisvLyBS ZW1hcmtzICAgIDogCisvLyBIaXN0b3J5ICAgIDogCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCitzdGF0aWMgc3RydWN0IHBjaV9kZXYgKmZpbmRfdm1lX2JyaWRnZSh2b2lkKQorewor CXN0cnVjdCBwY2lfZGV2ICp2bWVfcGNpX2RldiA9IE5VTEw7CisKKwlpZiAoKHZtZV9wY2lf ZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9UVU5EUkEsCisJCQkJCSAgIFBD SV9ERVZJQ0VfSURfVFVORFJBX0NBOTFDMDQyLAorCQkJCQkgICB2bWVfcGNpX2RldikpKSB7 CisJCXZtZWNoaXBfZGV2aWQgPSBQQ0lfREVWSUNFX0lEX1RVTkRSQV9DQTkxQzA0MjsKKwl9 CisJaWYgKHZtZV9wY2lfZGV2ID09IE5VTEwpIHsKKwkJaWYgKCh2bWVfcGNpX2RldiA9IHBj aV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfVFVORFJBLAorCQkJCQkJICAgUENJX0RFVklD RV9JRF9UVU5EUkFfVFNJMTQ4LAorCQkJCQkJICAgdm1lX3BjaV9kZXYpKSkgeworCQkJdm1l Y2hpcF9kZXZpZCA9IFBDSV9ERVZJQ0VfSURfVFVORFJBX1RTSTE0ODsKKwkJfQorCX0KKwlp ZiAodm1lX3BjaV9kZXYgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgInZtZW1vZDog Vk1FIGJyaWRnZSBub3QgZm91bmQgb24gUENJIEJ1cy5cbiIpOworCQlyZXR1cm4gKHZtZV9w Y2lfZGV2KTsKKwl9CisJLy8gcmVhZCByZXZpc2lvbi4KKwlwY2lfcmVhZF9jb25maWdfZHdv cmQodm1lX3BjaV9kZXYsIFBDSV9DTEFTU19SRVZJU0lPTiwKKwkJCSAgICAgICZ2bWVjaGlw X3JldmlzaW9uKTsKKwlwcmludGsoS0VSTl9ERUJVRyAidm1lbW9kOiBQQ0lfQ0xBU1NfUkVW SVNJT04gPSAlMDh4XG4iLAorCSAgICAgICB2bWVjaGlwX3JldmlzaW9uKTsKKwl2bWVjaGlw X3JldmlzaW9uICY9IDB4RkY7CisKKwkvLyBVbmxlc3MgdXNlciBoYXMgYWxyZWFkeSBzcGVj aWZpZWQgaXQsIAorCS8vIGRldGVybWluZSB0aGUgVk1FY2hpcCBJUlEgbnVtYmVyLgorCWlm ICh2bWVjaGlwX2lycSA9PSAwKSB7CisJCXZtZWNoaXBfaXJxID0gdm1lX3BjaV9kZXYtPmly cTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgInZtZTogaXJxICA9ICUwOHhcbiIsIHZtZWNoaXBf aXJxKTsKKwkJdm1lY2hpcF9pcnEgJj0gMHgwMDAwMDBGRjsJLy8gT25seSBhIGJ5dGUgaW4g c2l6ZQorCQlpZiAodm1lY2hpcF9pcnEgPT0gMCkKKwkJCXZtZWNoaXBfaXJxID0gMHgwMDAw MDA1MDsJLy8gT25seSBhIGJ5dGUgaW4gc2l6ZQorCX0KKwlpZiAoKHZtZWNoaXBfaXJxID09 IDApIHx8ICh2bWVjaGlwX2lycSA9PSAweEZGKSkgeworCQlwcmludGsoS0VSTl9FUlIgInZt ZW1vZDogQmFkIFZNRSBJUlEgbnVtYmVyOiAlMDJ4XG4iLAorCQkgICAgICAgdm1lY2hpcF9p cnEpOworCQlyZXR1cm4gKE5VTEwpOworCX0KKworCXJldHVybiAodm1lX3BjaV9kZXYpOwor fQorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBGdW5jdGlvbiAgIDogbWFwX2lu X3ZtZV9icmlkZ2UoKQorLy8gSW5wdXRzICAgICA6IHZvaWQKKy8vIE91dHB1dHMgICAgOiBm YWlsZWQgZmxhZy4KKy8vIERlc2NyaXB0aW9uOiAKKy8vICAgIE1hcCBWTUUgY2hpcCByZWdp c3RlcnMgaW4uICBQZXJmb3JtIGJhc2ljIHNhbml0eSBjaGVjayBvZiBjaGlwIElELgorLy8g UmVtYXJrcyAgICA6IAorLy8gSGlzdG9yeSAgICA6IAorLy8tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorc3RhdGljIGludCBtYXBfaW5fdm1lX2JyaWRnZShzdHJ1Y3QgcGNpX2RldiAqdm1l X3BjaV9kZXYpCit7CisJdW5zaWduZWQgaW50IHRlbXAsIGJhOworCisJLy8gU2V0dXAgVk1F IEJyaWRnZSBSZWdpc3RlciBTcGFjZQorCS8vIFRoaXMgaXMgYSA0ayB3aWRlIG1lbW9yeSBh cmVhIHRoYXQgbmVlZCB0byBiZSBtYXBwZWQgaW50byB0aGUga2VybmVsCisJLy8gdmlydHVh bCBtZW1vcnkgc3BhY2Ugc28gd2UgY2FuIGFjY2VzcyBpdC4KKwliYSA9IHBjaV9yZXNvdXJj ZV9zdGFydCh2bWVfcGNpX2RldiwgMCk7CisJdm1lY2hpcF9iYXNlYWRkciA9IGlvcmVtYXAo YmEsIDQwOTYpOworCWlmICghdm1lY2hpcF9iYXNlYWRkcikgeworCQlwcmludGsoImlvcmVt YXAgZmFpbGVkIHRvIG1hcCBWTUVjaGlwIHRvIEtlcm5lbCBTcGFjZS5cbiIpOworCQlyZXR1 cm4gMTsKKwl9CisJLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSBNYXBwaW5nIFdvcmtlZCBvdXQK Kwl0ZW1wID0gcmVhZGwodm1lY2hpcF9iYXNlYWRkcikgJiAweDAwMDBGRkZGOworCWlmICh0 ZW1wICE9IFBDSV9WRU5ET1JfSURfVFVORFJBKSB7CisJCXByaW50aygiVk1FIENoaXAgRmFp bGVkIHRvIFJldHVybiBQQ0lfSUQgaW4gTWVtb3J5IE1hcC5cbiIpOworCQlpb3VubWFwKHZt ZWNoaXBfYmFzZWFkZHIpOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuICgwKTsKK30KKwor Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gRnVuY3Rpb24gICA6IHZtZV9kcml2ZXJf c2V0dXBfd2luZG93cygpCisvLyBJbnB1dHMgICAgIDogdm9pZAorLy8gT3V0cHV0cyAgICA6 IHZvaWQKKy8vIERlc2NyaXB0aW9uOiAKKy8vICAgIENyZWF0ZXMgaW5pdGlhbCBpbmJvdW5k ICYgb3V0Ym91bmQgVk1FIHdpbmRvd3MuCisvLyBSZW1hcmtzICAgIDogCisvLyBIaXN0b3J5 ICAgIDogCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzdGF0aWMgdm9pZCB2bWVfZHJp dmVyX3NldHVwX3dpbmRvd3Modm9pZCkKK3sKKwl2bWVPdXRXaW5kb3dDZmdfdCB2bWVfZHJp dmVyX3dpbmRvdzsKKworCS8vIFNldHVwIHRoZSBvdXRib3VuZCBDUkNTUiB3aW5kb3cgZm9y IHVzZSBieSB0aGUgZHJpdmVyLgorCW1lbXNldCgmdm1lX2RyaXZlcl93aW5kb3csIDAsIHNp emVvZih2bWVfZHJpdmVyX3dpbmRvdykpOworCXZtZV9kcml2ZXJfd2luZG93LndpbmRvd05i ciA9IDc7CisJdm1lX2RyaXZlcl93aW5kb3cud2luZG93RW5hYmxlID0gMTsKKwl2bWVfZHJp dmVyX3dpbmRvdy53aW5kb3dTaXplTCA9ICg1MTIgKiAxMDI0KSAqIDMyOworCXZtZV9kcml2 ZXJfd2luZG93LnhsYXRlZEFkZHJMID0gMDsKKwl2bWVfZHJpdmVyX3dpbmRvdy53clBvc3RF bmFibGUgPSAxOworCXZtZV9kcml2ZXJfd2luZG93LmFkZHJTcGFjZSA9IFZNRV9DUkNTUjsK Kwl2bWVfZHJpdmVyX3dpbmRvdy5tYXhEYXRhV2lkdGggPSBWTUVfRDMyOworCXZtZV9kcml2 ZXJfd2luZG93LnhmZXJQcm90b2NvbCA9IDA7CisJdm1lX2RyaXZlcl93aW5kb3cuZGF0YUFj Y2Vzc1R5cGUgPSBWTUVfREFUQTsKKwl2bWVfZHJpdmVyX3dpbmRvdy51c2VyQWNjZXNzVHlw ZSA9IFZNRV9TVVBFUjsKKwl2bWVfc2V0X291dF9ib3VuZCgmdm1lX2RyaXZlcl93aW5kb3cp OworCisjaWYgMAorCS8qIFNldHVwIHRoZSBpbmJvdW5kIHdpbmRvd3MgKi8KKwlpZiAodm1l X3Nsb3RudW0gPiAwKSB7CisgICAgICAgIAl2bWVJbldpbmRvd0NmZ190IHZtZV9pbl93aW5k b3c7CisgICAgICAgIAl1bnNpZ25lZCBpbnQgeDsKKworCQltZW1zZXQoJnZtZV9pbl93aW5k b3csIDAsIHNpemVvZih2bWVfaW5fd2luZG93KSk7CisJCWlmIChpbl9pbWFnZV9zaXplW3hd ICE9IDApIHsKKwkJCW1lbXNldChpbl9pbWFnZV9iYVt4XSwgMCwgaW5faW1hZ2Vfc2l6ZVt4 XSk7CisJCQl2bWVfZmx1c2hfcmFuZ2UoaW5faW1hZ2VfYmFbeF0sIGluX2ltYWdlX2JhW3hd ICsgaW5faW1hZ2Vfc2l6ZVt4XSk7CisJCQl2bWVfaW5fd2luZG93LndpbmRvd05iciA9IHg7 CisJCQl2bWVfaW5fd2luZG93LndpbmRvd0VuYWJsZSA9IDE7CisJCQl2bWVfaW5fd2luZG93 LndpbmRvd1NpemVMID0gaW5faW1hZ2Vfc2l6ZVt4XTsKKwkJCXZtZV9pbl93aW5kb3cucGNp QWRkckwgPSAodW5zaWduZWQgaW50KWluX2ltYWdlX3BhW3hdOworCQkJdm1lX2luX3dpbmRv dy52bWVBZGRyTCA9CisJCQkgICAgMHg4MDAwMDAwMCArICh2bWVfc2xvdG51bSAqIDB4MDIw MDAwMDApICsgKDB4NDAwMDAwICogeCk7CisJCQl2bWVfaW5fd2luZG93LndyUG9zdEVuYWJs ZSA9IDE7CisJCQl2bWVfaW5fd2luZG93LmFkZHJTcGFjZSA9IFZNRV9BMzI7CisJCQl2bWVf aW5fd2luZG93LnhmZXJQcm90b2NvbCA9CisJCQkJICAgIFZNRV9TQ1QgfCBWTUVfQkxUIHwg Vk1FX01CTFQgfCBWTUVfMmVWTUUgfCBWTUVfMmVTU1Q7CisJCQkvKiAgMmVTU1QgVHJhbnNm ZXIgUmF0ZSAqLworCQkJdm1lX2luX3dpbmRvdy54ZmVyUmF0ZTJlc3N0ID0gVk1FX1NTVDMy MDsKKwkJCXZtZV9pbl93aW5kb3cuZGF0YUFjY2Vzc1R5cGUgPSBWTUVfREFUQSB8IFZNRV9Q Uk9HOworCQkJdm1lX2luX3dpbmRvdy51c2VyQWNjZXNzVHlwZSA9IFZNRV9TVVBFUiB8IFZN RV9VU0VSOworCQkJdm1lX3NldF9pbl9ib3VuZCgmdm1lX2luX3dpbmRvdyk7CisKKwkJfQor CX0KKyNlbmRpZgorfQorCit2b2lkIF9faW5pdCB2bWVtb2Rfc2V0dXBfb3B0aW9ucyhjaGFy ICpjbWRsaW5lKQoreworCWNoYXIgKm9wdGlvbnM7CisKKwkvKiAKKwkgKiBMb29rIGZvciB2 bWU9b3B0aW9uIG9uIGNvbW1hbmQgbGluZSAKKwkgKiBBY2NlcHQgc29tZXRoaW5nIGxpa2U6 IAorCSAqICAgICAgdm1lPXZtZV9zbG90bnVtPTxudW0+CisJICogICAgICB2bWU9dm1lX3Ns b3RudW09PG51bT4sdm1lY2hpcF9pcnE9PG51bT4KKwkgKi8KKworCW9wdGlvbnMgPSBzdHJz dHIoY21kbGluZSwgInZtZT0iKTsKKwlpZiAoIW9wdGlvbnMpCisJCXJldHVybjsKKwlvcHRp b25zID0gc3RyY2hyKG9wdGlvbnMsICc9JykgKyAxOworCWlmIChvcHRpb25zICYmICFzdHJu Y21wKG9wdGlvbnMsICJ2bWVfc2xvdG51bT0iLCAxMikpIHsKKwkJdm1lX3Nsb3RudW0gPSBz aW1wbGVfc3RydG91bChvcHRpb25zICsgMTIsIE5VTEwsIDApOworCQlvcHRpb25zID0gc3Ry Y2hyKG9wdGlvbnMsICcsJyk7CisJCWlmICghb3B0aW9ucykKKwkJCXJldHVybjsKKwkJaWYg KCFzdHJuY21wKG9wdGlvbnMgKyAxLCAidm1lY2hpcF9pcnE9IiwgMTIpKSB7CisJCQl2bWVj aGlwX2lycSA9IHNpbXBsZV9zdHJ0b3VsKG9wdGlvbnMgKyAxMywgTlVMTCwgMCk7CisJCX0K Kwl9IGVsc2UgaWYgKG9wdGlvbnMgJiYgIXN0cm5jbXAob3B0aW9ucywgInZtZWNoaXBfaXJx PSIsIDEyKSkgeworCQl2bWVjaGlwX2lycSA9IHNpbXBsZV9zdHJ0b3VsKG9wdGlvbnMgKyAx MiwgTlVMTCwgMCk7CisJCW9wdGlvbnMgPSBzdHJjaHIob3B0aW9ucywgJywnKTsKKwkJaWYg KCFvcHRpb25zKQorCQkJcmV0dXJuOworCQlpZiAoIXN0cm5jbXAob3B0aW9ucyArIDEsICJ2 bWVfc2xvdG51bT0iLCAxMikpIHsKKwkJCXZtZV9zbG90bnVtID0gc2ltcGxlX3N0cnRvdWwo b3B0aW9ucyArIDEzLCBOVUxMLCAwKTsKKwkJfQorCX0KKwlyZXR1cm47Cit9CisKKy8vLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEZ1bmN0aW9uICAgOiBjbGVhbnVwX21vZHVsZQor Ly8gSW5wdXRzICAgICA6IHZvaWQKKy8vIE91dHB1dHMgICAgOiB2b2lkCisvLyBEZXNjcmlw dGlvbjogCisvLyAgICBJbml0aWFsaXplIFZNRSBjaGlwIHRvIHF1aWVzY2VudCBzdGF0ZS4K Ky8vICAgIEZyZWUgZHJpdmVyIHJlc291cmNlcy4KKy8vIFJlbWFya3MgICAgOiAKKy8vIEhp c3RvcnkgICAgOiAKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3N0YXRpYyB2b2lkIF9f ZXhpdCB2bWVfYnJpZGdlX2V4aXQodm9pZCkKK3sKKwlpbnQgeDsKKworCS8vIFF1aWVzY2Ug dGhlIGhhcmR3YXJlLgorCXN3aXRjaCAodm1lY2hpcF9kZXZpZCkgeworCWNhc2UgUENJX0RF VklDRV9JRF9UVU5EUkFfQ0E5MUMwNDI6CisJCXVuaV9zaHV0ZG93bigpOworCQlicmVhazsK KwljYXNlIFBDSV9ERVZJQ0VfSURfVFVORFJBX1RTSTE0ODoKKwkJdHNpMTQ4X3NodXRkb3du KCk7CisJCWJyZWFrOworCX0KKworCS8vIEZyZWUgICYgdW5tYXAgcmVzb3VyY2VzCisJZnJl ZV9pcnEodm1lY2hpcF9pcnEsIHZtZWNoaXBfYmFzZWFkZHIpOworCWlvdW5tYXAodm1lY2hp cF9iYXNlYWRkcik7CisJdm1lX2ZyZWVfYnVmZmVycygpOworCisJZm9yICh4ID0gMDsgeCA8 IDg7IHgrKykgeworCQlpZiAob3V0X2ltYWdlX3ZhW3hdICE9IDApIHsKKwkJCWlvdW5tYXAo KHZvaWQgKilvdXRfaW1hZ2VfdmFbeF0pOworCQkJb3V0X2ltYWdlX3ZhW3hdID0gMDsKKwkJ CW91dF9pbWFnZV9tYXBwZWRbeF0gPSAwOworCQl9CisJCWlmIChvdXRfcmVzb3VyY2VbeF0u ZW5kIC0gb3V0X3Jlc291cmNlW3hdLnN0YXJ0KSB7CisJCQlpb3VubWFwKCh2b2lkICopb3V0 X2ltYWdlX3ZhW3hdKTsKKwkJCWlmIChvdXRfcmVzb3VyY2VbeF0ubmFtZSAhPSBOVUxMKQor CQkJCWtmcmVlKG91dF9yZXNvdXJjZVt4XS5uYW1lKTsKKwkJCXJlbGVhc2VfcmVzb3VyY2Uo Jm91dF9yZXNvdXJjZVt4XSk7CisJCQltZW1zZXQoJm91dF9yZXNvdXJjZVt4XSwgMCwgc2l6 ZW9mKHN0cnVjdCByZXNvdXJjZSkpOworCQl9CisJfQorCisJdW5yZWdpc3Rlcl9wcm9jKCk7 CisJdW5yZWdpc3Rlcl9jaHJkZXYoVk1FX01BSk9SLCAidm1lIik7CisJZGV2aWNlX2Rlc3Ry b3kodm1lX2NsYXNzLCBNS0RFVihWTUVfTUFKT1IsIDApKTsKKwlkZXZpY2VfZGVzdHJveSh2 bWVfY2xhc3MsIE1LREVWKFZNRV9NQUpPUiwgMSkpOworCWRldmljZV9kZXN0cm95KHZtZV9j bGFzcywgTUtERVYoVk1FX01BSk9SLCAyKSk7CisJZGV2aWNlX2Rlc3Ryb3kodm1lX2NsYXNz LCBNS0RFVihWTUVfTUFKT1IsIDMpKTsKKwlkZXZpY2VfZGVzdHJveSh2bWVfY2xhc3MsIE1L REVWKFZNRV9NQUpPUiwgNCkpOworCWRldmljZV9kZXN0cm95KHZtZV9jbGFzcywgTUtERVYo Vk1FX01BSk9SLCA1KSk7CisJZGV2aWNlX2Rlc3Ryb3kodm1lX2NsYXNzLCBNS0RFVihWTUVf TUFKT1IsIDYpKTsKKwlkZXZpY2VfZGVzdHJveSh2bWVfY2xhc3MsIE1LREVWKFZNRV9NQUpP UiwgNykpOworCWRldmljZV9kZXN0cm95KHZtZV9jbGFzcywgTUtERVYoVk1FX01BSk9SLCA4 KSk7CisJZGV2aWNlX2Rlc3Ryb3kodm1lX2NsYXNzLCBNS0RFVihWTUVfTUFKT1IsIDkpKTsK KwlkZXZpY2VfZGVzdHJveSh2bWVfY2xhc3MsIE1LREVWKFZNRV9NQUpPUiwgMTApKTsKKwlk ZXZpY2VfZGVzdHJveSh2bWVfY2xhc3MsIE1LREVWKFZNRV9NQUpPUiwgMTEpKTsKKwlkZXZp Y2VfZGVzdHJveSh2bWVfY2xhc3MsIE1LREVWKFZNRV9NQUpPUiwgMTIpKTsKKwlkZXZpY2Vf ZGVzdHJveSh2bWVfY2xhc3MsIE1LREVWKFZNRV9NQUpPUiwgMTMpKTsKKwlkZXZpY2VfZGVz dHJveSh2bWVfY2xhc3MsIE1LREVWKFZNRV9NQUpPUiwgMTQpKTsKKwlkZXZpY2VfZGVzdHJv eSh2bWVfY2xhc3MsIE1LREVWKFZNRV9NQUpPUiwgMTUpKTsKKwlkZXZpY2VfZGVzdHJveSh2 bWVfY2xhc3MsIE1LREVWKFZNRV9NQUpPUiwgMTYpKTsKKwlkZXZpY2VfZGVzdHJveSh2bWVf Y2xhc3MsIE1LREVWKFZNRV9NQUpPUiwgMTcpKTsKKwlkZXZpY2VfZGVzdHJveSh2bWVfY2xh c3MsIE1LREVWKFZNRV9NQUpPUiwgMzIpKTsKKwlkZXZpY2VfZGVzdHJveSh2bWVfY2xhc3Ms IE1LREVWKFZNRV9NQUpPUiwgMzMpKTsKKwlkZXZpY2VfZGVzdHJveSh2bWVfY2xhc3MsIE1L REVWKFZNRV9NQUpPUiwgMzQpKTsKKwlkZXZpY2VfZGVzdHJveSh2bWVfY2xhc3MsIE1LREVW KFZNRV9NQUpPUiwgMzUpKTsKKwljbGFzc19kZXN0cm95KHZtZV9jbGFzcyk7Cit9CisKKy8v LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEZ1bmN0aW9uICAgOiBpbml0X21vZHVsZSgp CisvLyBJbnB1dHMgICAgIDogdm9pZAorLy8gT3V0cHV0cyAgICA6IG1vZHVsZSBpbml0aWFs aXphdGlvbiBmYWlsIGZsYWcKKy8vIERlc2NyaXB0aW9uOiAKKy8vICB0b3AgbGV2ZWwgbW9k dWxlIGluaXRpYWxpemF0aW9uLgorLy8gIGZpbmQgVk1FIGJyaWRnZQorLy8gIGluaXRpYWxp emUgVk1FIGJyaWRnZSBjaGlwLgorLy8gIFNhbml0eSBjaGVjayBicmlkZ2UgY2hpcC4KKy8v ICBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBkcml2ZXIgcmVzb3VyY2VzLgorLy8gUmVtYXJr cyAgICA6IAorLy8gSGlzdG9yeSAgICA6IAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor CitzdGF0aWMgaW50IF9faW5pdCB2bWVfYnJpZGdlX2luaXQodm9pZCkKK3sKKwlpbnQgeDsK Kwl1bnNpZ25lZCBpbnQgdGVtcDsKKwlzdHJ1Y3QgcmVzb3VyY2UgcGNpbWVtcmVzOworI2lm ZGVmIENPTkZJR19NVk1FNTUwMAorCXN0cnVjdCBwY2lfZGV2ICp2bWVfcHRwX3BjaV9kZXYg PSBOVUxMOworI2VuZGlmCisjaWZkZWYgQ09ORklHX01WTUU2MTAwCisJdm9pZCBfX2lvbWVt ICptdjY0MzYwOworCXUzMiAgcGNpX2FjY19jbnRsX3JlZzsKKyNlbmRpZgorCisJcHJpbnRr KCJUdW5kcmEgVFNJMTQ4L0NBOTFDMDQyIFBDSS1WTUUgQnJpZGdlIERyaXZlciAlc1xuIiwg VmVyc2lvbik7CisKKwkvLyBmaW5kIFZNRSBicmlkZ2UKKwl2bWVfcGNpX2RldiA9IGZpbmRf dm1lX2JyaWRnZSgpOworCWlmICh2bWVfcGNpX2RldiA9PSBOVUxMKSB7CisJCXJldHVybiAt RU5PREVWOworCX0KKyNpZmRlZiBDT05GSUdfTVZNRTYxMDAKKyN1bmRlZglESVNBQkxFX01W NjQzNjBfU05PT1BfV09SS0FST1VORCAKKyNpZmRlZglESVNBQkxFX01WNjQzNjBfU05PT1Bf V09SS0FST1VORAorCS8vIFRoaXMgaXMgdWdseSBidXQgbmVlZGVkIGZvciBub3cuICBEaXNh YmxlIHNub29wIGF0IDY0MzYwLgorCWlmICh2bWVjaGlwX2RldmlkID09IFBDSV9ERVZJQ0Vf SURfVFVORFJBX1RTSTE0OCkgeworCQltdjY0MzYwID0gaW9yZW1hcChDT05GSUdfTVY2NFg2 MF9ORVdfQkFTRSwgMHgxMDAwMDApOworCQlpZiAoIW12NjQzNjApIHsKKwkJCXByaW50aygi aW9yZW1hcCBmYWlsZWQgdG8gbWFwIE1WNjQzNjAgcmVncy5cbiIpOworCQkJcmV0dXJuIC1F Tk9NRU07CisJCX0KKwkJcGNpX2FjY19jbnRsX3JlZyA9IHJlYWRsKG12NjQzNjAgKyAKKwkJ CU1WNjR4NjBfUENJMF9BQ0NfQ05UTF8wX0JBU0VfTE8pOworCSAgICAgICAgaWYgKHBjaV9h Y2NfY250bF9yZWcgJiAweDAwMDAwMDAxKSB7CQorCQkJcGNpX2FjY19jbnRsX3JlZyA9IE1W NjQzNjBfUENJX0FDQ19DTlRMX1NOT09QX05PTkUgfAorCQkJTVY2NDM2MF9QQ0lfQUNDX0NO VExfU1dBUF9OT05FIHwKKwkJCU1WNjQzNjBfUENJX0FDQ19DTlRMX01CVVJTVF8xMjhfQllU RVMgfAorCQkJTVY2NDM2MF9QQ0lfQUNDX0NOVExfUkRTSVpFXzI1Nl9CWVRFUyB8IDE7CisJ CQl3cml0ZWwocGNpX2FjY19jbnRsX3JlZywKKwkJCQltdjY0MzYwICsgTVY2NHg2MF9QQ0kw X0FDQ19DTlRMXzBfQkFTRV9MTyk7CisJCX0KKwkJcGNpX2FjY19jbnRsX3JlZyA9IHJlYWRs KG12NjQzNjAgKyAKKwkJCU1WNjR4NjBfUENJMF9BQ0NfQ05UTF8xX0JBU0VfTE8pOworCSAg ICAgICAgaWYgKHBjaV9hY2NfY250bF9yZWcgJiAweDAwMDAwMDAxKSB7CQorCQkJcGNpX2Fj Y19jbnRsX3JlZyA9IE1WNjQzNjBfUENJX0FDQ19DTlRMX1NOT09QX05PTkUgfAorCQkJTVY2 NDM2MF9QQ0lfQUNDX0NOVExfU1dBUF9OT05FIHwKKwkJCU1WNjQzNjBfUENJX0FDQ19DTlRM X01CVVJTVF8xMjhfQllURVMgfAorCQkJTVY2NDM2MF9QQ0lfQUNDX0NOVExfUkRTSVpFXzI1 Nl9CWVRFUyB8IDE7CisJCQl3cml0ZWwocGNpX2FjY19jbnRsX3JlZywKKwkJCQltdjY0MzYw ICsgTVY2NHg2MF9QQ0kwX0FDQ19DTlRMXzFfQkFTRV9MTyk7CisJCX0KKwkJcGNpX2FjY19j bnRsX3JlZyA9IHJlYWRsKG12NjQzNjAgKyAKKwkJCU1WNjR4NjBfUENJMF9BQ0NfQ05UTF8y X0JBU0VfTE8pOworCSAgICAgICAgaWYgKHBjaV9hY2NfY250bF9yZWcgJiAweDAwMDAwMDAx KSB7CQorCQkJcGNpX2FjY19jbnRsX3JlZyA9IE1WNjQzNjBfUENJX0FDQ19DTlRMX1NOT09Q X05PTkUgfAorCQkJTVY2NDM2MF9QQ0lfQUNDX0NOVExfU1dBUF9OT05FIHwKKwkJCU1WNjQz NjBfUENJX0FDQ19DTlRMX01CVVJTVF8xMjhfQllURVMgfAorCQkJTVY2NDM2MF9QQ0lfQUND X0NOVExfUkRTSVpFXzI1Nl9CWVRFUyB8IDE7CisJCQl3cml0ZWwocGNpX2FjY19jbnRsX3Jl ZywKKwkJCQltdjY0MzYwICsgTVY2NHg2MF9QQ0kwX0FDQ19DTlRMXzJfQkFTRV9MTyk7CisJ CX0KKwkJcGNpX2FjY19jbnRsX3JlZyA9IHJlYWRsKG12NjQzNjAgKyAKKwkJCU1WNjR4NjBf UENJMF9BQ0NfQ05UTF8zX0JBU0VfTE8pOworCSAgICAgICAgaWYgKHBjaV9hY2NfY250bF9y ZWcgJiAweDAwMDAwMDAxKSB7CQorCQkJcGNpX2FjY19jbnRsX3JlZyA9IE1WNjQzNjBfUENJ X0FDQ19DTlRMX1NOT09QX05PTkUgfAorCQkJTVY2NDM2MF9QQ0lfQUNDX0NOVExfU1dBUF9O T05FIHwKKwkJCU1WNjQzNjBfUENJX0FDQ19DTlRMX01CVVJTVF8xMjhfQllURVMgfAorCQkJ TVY2NDM2MF9QQ0lfQUNDX0NOVExfUkRTSVpFXzI1Nl9CWVRFUyB8IDE7CisJCQl3cml0ZWwo cGNpX2FjY19jbnRsX3JlZywKKwkJCQltdjY0MzYwICsgTVY2NHg2MF9QQ0kwX0FDQ19DTlRM XzNfQkFTRV9MTyk7CisJCX0KKwkJdm1lX3N5bmNfZGF0YSgpOworCQlpb3VubWFwKG12NjQz NjApOworCX0KKyNlbmRpZgorI2VuZGlmCisKKwkvLyBHZXQgcGFyZW50IFBDSSByZXNvdXJj ZSAmIHZlcmlmeSBlbm91Z2ggc3BhY2UgaXMgYXZhaWxhYmxlLgorCW1lbXNldCgmcGNpbWVt cmVzLCAwLCBzaXplb2YocGNpbWVtcmVzKSk7CisJcGNpbWVtcmVzLmZsYWdzID0gSU9SRVNP VVJDRV9NRU07CisJdm1lcGNpbWVtID0gcGNpX2ZpbmRfcGFyZW50X3Jlc291cmNlKHZtZV9w Y2lfZGV2LCAmcGNpbWVtcmVzKTsKKwlpZiAodm1lcGNpbWVtID09IDApIHsKKwkJcHJpbnRr KEtFUk5fRVJSCisJCSAgICAgICAidm1lbW9kOiBjYW5ub3QgZ2V0IFZNRSBwYXJlbnQgZGV2 aWNlIFBDSSByZXNvdXJjZVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKyNpZmRlZiBD T05GSUdfTVZNRTU1MDAKKyNkZWZpbmUJVk1FX0JFSElORF9CUklER0VfV09SS0FST1VORCAx CisjaWZkZWYJVk1FX0JFSElORF9CUklER0VfV09SS0FST1VORAorCS8vIElmIHRoZSBWTUUg YnJpZGdlIGlzIGJlaGluZCBhIFBDSSBicmlkZ2UsIG9ubHkgYSBtZWcgb2YgUENJIE1FTSBz cGFjZQorCS8vIGhhcyBiZWVuIGFsbG9jYXRlZC4gIEJ1bXAgaXQgdXAuICBUaGlzIGlzIHVn bHkgdG9vIGJ1dCBpcyBuZWVkZWQKKwkvLyBlc3Agb24gdGhlIE1WTUU1NTAwLgorCWlmICgo dm1lcGNpbWVtLT5lbmQgLSB2bWVwY2ltZW0tPnN0YXJ0ICsgMSkgPT0gMHgxMDAwMDApIHsK KwkJLy8gZmluZCBicmlkZ2UgVk1FIGlzIHVuZGVyIGluZm8KKwkJdm1lX3B0cF9wY2lfZGV2 ID0gdm1lX3BjaV9kZXYtPmJ1cy0+c2VsZjsKKwkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHZt ZV9wdHBfcGNpX2RldiwgUENJX01FTU9SWV9CQVNFLCAweDgwMDApOworCQl2bWVwY2ltZW0t PnN0YXJ0ID0gMHg4MDAwMDAwMDsKKwl9CisjZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIENP TkZJR19NVk1FNzEwMAorCWlmICgodm1lcGNpbWVtLT5lbmQgLSB2bWVwY2ltZW0tPnN0YXJ0 KSA8IDB4MjAwMDAwMCkgeworCQlwcmludGsoIk5vdCBlbm91Z2ggUENJIG1lbW9yeSBzcGFj ZSBhdmFpbGFibGUgJTA4eFxuIiwKKwkJICAgICAgICh1bnNpZ25lZCBpbnQpKHZtZXBjaW1l bS0+ZW5kIC0gdm1lcGNpbWVtLT5zdGFydCkpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9Cisj ZW5kaWYKKwkvLyBNYXAgaW4gVk1FIEJyaWRnZSByZWdpc3RlcnMuCisJaWYgKG1hcF9pbl92 bWVfYnJpZGdlKHZtZV9wY2lfZGV2KSkgeworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJLy8g VW5sZXNzLCB1c2VyIGhhcyBhbHJlYWR5IHNwZWNpZmllZCBpdCwgCisJLy8gZGV0ZXJtaW5l IHRoZSBWTUUgc2xvdCB0aGF0IHdlIGFyZSBpbi4KKwlpZiAodm1lX3Nsb3RudW0gPT0gLTEp IHsKKwkJdm1lX3Nsb3RudW0gPSB2bWVfZ2V0X3Nsb3RfbnVtKCk7CisJfQorCWlmICh2bWVf c2xvdG51bSA8PSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQmFkIFZNRSBzbG90ICMlMDJk XG4iLCB2bWVfc2xvdG51bSk7CisJCWlvdW5tYXAodm1lY2hpcF9iYXNlYWRkcik7CisJCXJl dHVybiAtRU5PREVWOworCX0KKwkvLyBJbml0aWFsaXplIHdhaXQgcXVldWVzICYgbXV0dWFs IGV4Y2x1c2lvbiBmbGFncworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRtYV9xdWV1ZVswXSk7 CisJaW5pdF93YWl0cXVldWVfaGVhZCgmZG1hX3F1ZXVlWzFdKTsKKwlpbml0X3dhaXRxdWV1 ZV9oZWFkKCZsbV9xdWV1ZSk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmbWJveF9xdWV1ZSk7 CisJZm9yICh4ID0gMDsgeCA8IDg7IHgrKykgeworCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ2 bWVpbnRfcXVldWVbeF0pOworCX0KKwlzZW1hX2luaXQoJnZpcnFfaW51c2UsIDEpOworCWZv ciAoeCA9IDA7IHggPCBNQVhfTUlOT1IgKyAxOyB4KyspIHsKKwkJc2VtYV9pbml0KCZkZXZp bnVzZVt4XSwgMSk7CisJfQorCWZvciAoeCA9IDA7IHggPCA4OyB4KyspIHsKKwkJaW5pdF9N VVRFWCgmaW5faW1hZ2Vfc2VtW3hdKTsKKwl9CisJZm9yICh4ID0gMDsgeCA8IDg7IHgrKykg eworCQlpbml0X01VVEVYKCZvdXRfaW1hZ2Vfc2VtW3hdKTsKKwl9CisKKwkvLyBhbGxvY2F0 ZSBidWZmZXJzIG5lZWRlZCBieSB0aGUgZHJpdmVyLgorCWlmICh2bWVfYWxsb2NfYnVmZmVy cygpICE9IDApCisJCXJldHVybiAtRU5PREVWOworCisJLy8gSW5pdGlhbGl6ZSB0aGUgaW50 ZXJib2FyZCBkYXRhIHN0cnVjdHVyZS4KKwlpZiAodm1lY2hpcF9pbnRlcmJvYXJkX2RhdGEg IT0gTlVMTCkgeworCQl2bWVfaW5pdF9pbnRlcmJvYXJkX2RhdGEodm1lY2hpcF9pbnRlcmJv YXJkX2RhdGEpOworCX0KKwkvLyBEaXNwbGF5IFZNRSBpbmZvcm1hdGlvbiAgCisJcHJpbnRr KEtFUk5fREVCVUcKKwkgICAgICAgIlZlbmRvciA9ICUwNFggIERldmljZSA9ICUwNFggIFJl dmlzaW9uID0gJTAyWFxuIiwKKwkgICAgICAgdm1lX3BjaV9kZXYtPnZlbmRvciwgdm1lX3Bj aV9kZXYtPmRldmljZSwgdm1lY2hpcF9yZXZpc2lvbik7CisJcHJpbnRrKEtFUk5fREVCVUcg IkNsYXNzID0gJTA4WFxuIiwgdm1lX3BjaV9kZXYtPmNsYXNzKTsKKworCXBjaV9yZWFkX2Nv bmZpZ19kd29yZCh2bWVfcGNpX2RldiwgUENJX0NBQ0hFX0xJTkVfU0laRSwgJnRlbXApOwor CXByaW50ayhLRVJOX0RFQlVHICJNaXNjMCA9ICUwOFhcbiIsIHRlbXApOworCXByaW50ayhL RVJOX0RFQlVHICJJcnEgPSAlMDRYXG4iLCB2bWVjaGlwX2lycSk7CisJaWYgKHZtZV9zbG90 bnVtID09IC0xKSB7CisJCXByaW50aygiVk1FIHNsb3QgbnVtYmVyOiB1bmtub3duXG4iKTsK Kwl9IGVsc2UgeworCQlwcmludGsoIlZNRSBzbG90IG51bWJlcjogJWRcbiIsIHZtZV9zbG90 bnVtKTsKKwl9CisKKwkvLyBJbml0aWFsaXplIGNoaXAgcmVnaXN0ZXJzIGFuZCByZWdpc3Rl ciBtb2R1bGUuCisJaWYgKCF2bWVfaW5pdCh2bWVjaGlwX2ludGVyYm9hcmRfZGF0YSkpIHsK KwkJcHJpbnRrKEtFUk5fRVJSICJ2bWVtb2Q6IFZNRSBDaGlwIEluaXRpYWxpemF0aW9uIGZh aWxlZC5cbiIpOworCQlpb3VubWFwKHZtZWNoaXBfYmFzZWFkZHIpOworCQl2bWVfZnJlZV9i dWZmZXJzKCk7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlpZiAocmVnaXN0ZXJfY2hyZGV2 KFZNRV9NQUpPUiwgInZtZSIsICZ2bWVfZm9wcykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ2 bWVtb2Q6IFVuYWJsZSB0byBnZXQgbWFqb3IgbnVtYmVyLlxuIik7CisJCWlvdW5tYXAodm1l Y2hpcF9iYXNlYWRkcik7CisJCXZtZV9mcmVlX2J1ZmZlcnMoKTsKKwkJcmV0dXJuIC1FTk9E RVY7CisJfQorCXZtZV9jbGFzcyA9IGNsYXNzX2NyZWF0ZShUSElTX01PRFVMRSwgInZtZSIp OworCWRldmljZV9jcmVhdGUodm1lX2NsYXNzLCBOVUxMLCBNS0RFVihWTUVfTUFKT1IsIDAp LCBOVUxMLCAidm1lX20wIik7CisJZGV2aWNlX2NyZWF0ZSh2bWVfY2xhc3MsIE5VTEwsIE1L REVWKFZNRV9NQUpPUiwgMSksIE5VTEwsICJ2bWVfbTEiKTsKKwlkZXZpY2VfY3JlYXRlKHZt ZV9jbGFzcywgTlVMTCwgTUtERVYoVk1FX01BSk9SLCAyKSwgTlVMTCwgInZtZV9tMiIpOwor CWRldmljZV9jcmVhdGUodm1lX2NsYXNzLCBOVUxMLCBNS0RFVihWTUVfTUFKT1IsIDMpLCBO VUxMLCAidm1lX20zIik7CisKKwlkZXZpY2VfY3JlYXRlKHZtZV9jbGFzcywgTlVMTCwgTUtE RVYoVk1FX01BSk9SLCA0KSwgTlVMTCwgInZtZV9tNCIpOworCisJZGV2aWNlX2NyZWF0ZSh2 bWVfY2xhc3MsIE5VTEwsIE1LREVWKFZNRV9NQUpPUiwgNSksIE5VTEwsICJ2bWVfbTUiKTsK KworCWRldmljZV9jcmVhdGUodm1lX2NsYXNzLCBOVUxMLCBNS0RFVihWTUVfTUFKT1IsIDYp LCBOVUxMLCAidm1lX202Iik7CisKKwlkZXZpY2VfY3JlYXRlKHZtZV9jbGFzcywgTlVMTCwg TUtERVYoVk1FX01BSk9SLCA3KSwgTlVMTCwgInZtZV9tNyIpOworCisJZGV2aWNlX2NyZWF0 ZSh2bWVfY2xhc3MsIE5VTEwsIE1LREVWKFZNRV9NQUpPUiwgOCksIE5VTEwsICJ2bWVfczAi KTsKKworCWRldmljZV9jcmVhdGUodm1lX2NsYXNzLCBOVUxMLCBNS0RFVihWTUVfTUFKT1Is IDkpLCBOVUxMLCAidm1lX3MxIik7CisKKwlkZXZpY2VfY3JlYXRlKHZtZV9jbGFzcywgTlVM TCwgTUtERVYoVk1FX01BSk9SLCAxMCksIE5VTEwsICJ2bWVfczIiKTsKKworCWRldmljZV9j cmVhdGUodm1lX2NsYXNzLCBOVUxMLCBNS0RFVihWTUVfTUFKT1IsIDExKSwgTlVMTCwgInZt ZV9zMyIpOworCisJZGV2aWNlX2NyZWF0ZSh2bWVfY2xhc3MsIE5VTEwsIE1LREVWKFZNRV9N QUpPUiwgMTIpLCBOVUxMLCAidm1lX3M0Iik7CisKKwlkZXZpY2VfY3JlYXRlKHZtZV9jbGFz cywgTlVMTCwgTUtERVYoVk1FX01BSk9SLCAxMyksIE5VTEwsICJ2bWVfczUiKTsKKworCWRl dmljZV9jcmVhdGUodm1lX2NsYXNzLCBOVUxMLCBNS0RFVihWTUVfTUFKT1IsIDE0KSwgTlVM TCwgInZtZV9zNiIpOworCisJZGV2aWNlX2NyZWF0ZSh2bWVfY2xhc3MsIE5VTEwsIE1LREVW KFZNRV9NQUpPUiwgMTUpLCBOVUxMLCAidm1lX3M3Iik7CisKKwlkZXZpY2VfY3JlYXRlKHZt ZV9jbGFzcywgTlVMTCwgTUtERVYoVk1FX01BSk9SLCAxNiksIE5VTEwsICJ2bWVfZG1hMCIp OworCisJZGV2aWNlX2NyZWF0ZSh2bWVfY2xhc3MsIE5VTEwsIE1LREVWKFZNRV9NQUpPUiwg MTcpLCBOVUxMLCAidm1lX2RtYTEiKTsKKworCWRldmljZV9jcmVhdGUodm1lX2NsYXNzLCBO VUxMLCBNS0RFVihWTUVfTUFKT1IsIDMyKSwgTlVMTCwgInZtZV9jdGwiKTsKKworCWRldmlj ZV9jcmVhdGUodm1lX2NsYXNzLCBOVUxMLCBNS0RFVihWTUVfTUFKT1IsIDMzKSwgTlVMTCwg InZtZV9yZWdzIik7CisKKwlkZXZpY2VfY3JlYXRlKHZtZV9jbGFzcywgTlVMTCwgTUtERVYo Vk1FX01BSk9SLCAzNCksIE5VTEwsICJ2bWVfcm13MCIpOworCisJZGV2aWNlX2NyZWF0ZSh2 bWVfY2xhc3MsIE5VTEwsIE1LREVWKFZNRV9NQUpPUiwgMzUpLCBOVUxMLCAidm1lX2xtMCIp OworCisJaWYgKHZtZV9zeXNjb24gPT0gMCkgeworCQlwcmludGsoIkJvYXJkIGlzIG5vdCB0 aGUgVk1FIHN5c3RlbSBjb250cm9sbGVyXG4iKTsKKwl9CisJaWYgKHZtZV9zeXNjb24gPT0g MSkgeworCQlwcmludGsoIkJvYXJkIGlzIHRoZSBWTUUgc3lzdGVtIGNvbnRyb2xsZXJcbiIp OworCX0KKworCXJlZ2lzdGVyX3Byb2MoKTsKKworCS8vIEdldCB0aW1lIGJhc2Ugc3BlZWQu ICBOZWVkZWQgdG8gc3VwcG9ydCBETUEgdGhyb3VnaHB1dCBtZWFzdXJlbWVudHMKKwl0Yl9z cGVlZCA9IHRiX3RpY2tzX3Blcl9qaWZmeSAqIEhaOworCisJLy8gT3BlbiB1cCB0aGUgZGVm YXVsdCBWTUUgd2luZG93cy4KKwl2bWVfZHJpdmVyX3NldHVwX3dpbmRvd3MoKTsKKworCXJl dHVybiAwOworfQorCittb2R1bGVfaW5pdCh2bWVfYnJpZGdlX2luaXQpCittb2R1bGVfZXhp dCh2bWVfYnJpZGdlX2V4aXQpCmRpZmYgLXUgLS1uZXctZmlsZSAtLXJlY3Vyc2l2ZSBsaW51 eC0yLjYuMjkuNi5vcmlnL2RyaXZlcnMvd2F0Y2hkb2cvY3BjaTYyMDBfd2R0LmMgbGludXgt Mi42LjI5LjYubW9kL2RyaXZlcnMvd2F0Y2hkb2cvY3BjaTYyMDBfd2R0LmMKLS0tIGxpbnV4 LTIuNi4yOS42Lm9yaWcvZHJpdmVycy93YXRjaGRvZy9jcGNpNjIwMF93ZHQuYwkxOTY5LTEy LTMxIDE3OjAwOjAwLjAwMDAwMDAwMCAtMDcwMAorKysgbGludXgtMi42LjI5LjYubW9kL2Ry aXZlcnMvd2F0Y2hkb2cvY3BjaTYyMDBfd2R0LmMJMjAwOS0wNy0yMSAxMToyODoxOC4wMDAw MDAwMDAgLTA3MDAKQEAgLTAsMCArMSw0NDkgQEAKKy8qCisgKglDUENJNjIwMCBXYXRjaGRv ZyBTdXBwb3J0CisgKgorICoJQXV0aG9yOiBBaml0IFByZW0gPGFqaXQucHJlbUBlbWVyc29u LmNvbT4KKyAqICAgCisgKglDb3B5cmlnaHQgMjAwOCBFbWVyc29uIE5ldHdvcmsgUG93ZXIg LSBFbWJlZGRlZCBDb21wdXRpbmcsIEluYy4KKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkg aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor ICoJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl ciB2ZXJzaW9uCisgKgkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0 Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxl cGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L21p c2NkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC93YXRjaGRvZy5oPgorI2luY2x1ZGUgPGxp bnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgv bm90aWZpZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KKyNpbmNsdWRlIDxsaW51 eC9pbml0Lmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vz cy5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxwbGF0Zm9ybXMvODV4 eC9jcGNpNjIwMC5oPgorCisjZGVmaW5lIFdEVF9JTlRFUlZBTAkoSFovMiArIDEpCisKK3N0 YXRpYyB1bnNpZ25lZCBsb25nIGNwY2k2MjAwX3dkdF9pc19vcGVuOworc3RhdGljIGNoYXIg Y3BjaTYyMDBfZXhwZWN0X2Nsb3NlOworc3RhdGljIHN0cnVjdCB0aW1lcl9saXN0IGNwY2k2 MjAwX3dkX3RpbWVyOworc3RhdGljIHVuc2lnbmVkIGxvbmcgbmV4dF9oZWFydGJlYXQ7CisK KyNkZWZpbmUgV0RfTE9BRF9SRUdfT0ZGU0VUCQkwCisjZGVmaW5lIFdEX0NPTlRST0xfUkVH X09GRlNFVAkJNAorI2RlZmluZSBXRF9SRVNPTFVUSU9OX1JFR19PRkZTRVQJNQorI2RlZmlu ZSBXRF9DT1VOVF9SRUdfT0ZGU0VUCQk2CisKKyNkZWZpbmUgV0RfTE9BRF9NQUdJQ19WQUxV RQkJCTB4REIKKyNkZWZpbmUgV0RfRU5BQkxFCQkJCTB4ODAKKworI2RlZmluZSBXRF9DT1VO VEVSX1JFU180X01JQ1JPU0VDCQkweDEKKyNkZWZpbmUgV0RfQ09VTlRFUl9SRVNfOF9NSUNS T1NFQwkJMHgyCisjZGVmaW5lIFdEX0NPVU5URVJfUkVTXzE2X01JQ1JPU0VDCQkweDMKKyNk ZWZpbmUgV0RfQ09VTlRFUl9SRVNfMzJfTUlDUk9TRUMJCTB4NAorI2RlZmluZSBXRF9DT1VO VEVSX1JFU182NF9NSUNST1NFQwkJMHg1CisjZGVmaW5lIFdEX0NPVU5URVJfUkVTXzEyOF9N SUNST1NFQwkJMHg2CisjZGVmaW5lIFdEX0NPVU5URVJfUkVTXzI1Nl9NSUNST1NFQwkJMHg3 CisjZGVmaW5lIFdEX0NPVU5URVJfUkVTXzUxMl9NSUNST1NFQwkJMHg4CisjZGVmaW5lIFdE X0NPVU5URVJfUkVTXzEwMjRfTUlDUk9TRUMJCTB4OQorI2RlZmluZSBXRF9DT1VOVEVSX1JF U18yMDQ4X01JQ1JPU0VDCQkweGEKKyNkZWZpbmUgV0RfQ09VTlRFUl9SRVNfNDA5Nl9NSUNS T1NFQwkJMHhiCisjZGVmaW5lIFdEX0NPVU5URVJfUkVTXzgxOTJfTUlDUk9TRUMJCTB4Ywor I2RlZmluZSBXRF9DT1VOVEVSX1JFU18xNjM4NF9NSUNST1NFQwkJMHhkCisjZGVmaW5lIFdE X0NPVU5URVJfUkVTXzMyNzY4X01JQ1JPU0VDCQkweGUKKyNkZWZpbmUgV0RfQ09VTlRFUl9S RVNfNjU1MzZfTUlDUk9TRUMJCTB4ZgorCisKKy8qIE1vZHVsZSBwYXJhbWV0ZXJzICovCisK KyNkZWZpbmUgV0RfVElNMCA2MAkJCS8qIERlZmF1bHQgaGVhcnRiZWF0ID0gNjAgc2Vjb25k cyAqLworCitzdGF0aWMgaW50IGhlYXJ0YmVhdCA9IFdEX1RJTTA7CitzdGF0aWMgaW50IHdk X2hlYXJ0YmVhdCA9IChXRF9USU0wICogMTAwMCkgPj4gNjsKKworbW9kdWxlX3BhcmFtKGhl YXJ0YmVhdCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoaGVhcnRiZWF0LCAiV2F0Y2hk b2cgaGVhcnRiZWF0IGluIHNlY29uZHMuICgwPGhlYXJ0YmVhdDwzNjAwLCBkZWZhdWx0PSIg X19NT0RVTEVfU1RSSU5HKFdEX1RJTU8pICIpIik7CisKK3N0YXRpYyBpbnQgbm93YXlvdXQg PSBXQVRDSERPR19OT1dBWU9VVDsKK21vZHVsZV9wYXJhbShub3dheW91dCwgaW50LCAwKTsK K01PRFVMRV9QQVJNX0RFU0Mobm93YXlvdXQsICJXYXRjaGRvZyBjYW5ub3QgYmUgc3RvcHBl ZCBvbmNlIHN0YXJ0ZWQgKGRlZmF1bHQ9Q09ORklHX1dBVENIRE9HX05PV0FZT1VUKSIpOwor CisKK3N0YXRpYyB2b2lkIF9faW9tZW0gKmNwY2k2MjAwX3dkdF9yZWdzOworCisvKiBTdGFy dCB0aGUgd2F0Y2hkb2cgZHJpdmVyICovCisKK3N0YXRpYyBpbnQgY3BjaTYyMDBfd2R0X3N0 YXJ0KHZvaWQpCit7CisJdTggY3RybF9yZWc7CisJdTE2IGNvdW50X3JlZzsKKworCS8qIERp c2FibGUgd2F0Y2hkb2cgKi8KKwljdHJsX3JlZyA9IHJlYWRiKGNwY2k2MjAwX3dkdF9yZWdz ICsgV0RfQ09OVFJPTF9SRUdfT0ZGU0VUKTsKKwlpZiAoY3RybF9yZWcgJiBXRF9FTkFCTEUp CisJCXdyaXRlYihjdHJsX3JlZyAmIH5XRF9FTkFCTEUsIGNwY2k2MjAwX3dkdF9yZWdzICsg V0RfQ09OVFJPTF9SRUdfT0ZGU0VUKTsKKworCS8qIExvYWQgY291bnRlciAqLworCWNvdW50 X3JlZyA9IHdkX2hlYXJ0YmVhdDsKKwl3cml0ZXcoc3dhYjE2KGNvdW50X3JlZyksIGNwY2k2 MjAwX3dkdF9yZWdzICsgV0RfQ09VTlRfUkVHX09GRlNFVCk7CisKKwkvKiBTdGFydCB0aGUg a2VybmVsIHRpbWVyICovCisJbmV4dF9oZWFydGJlYXQgPSBqaWZmaWVzICsgKGhlYXJ0YmVh dCAqIEhaKTsKKwltb2RfdGltZXIoJmNwY2k2MjAwX3dkX3RpbWVyLCBqaWZmaWVzICsgV0RU X0lOVEVSVkFMKTsgCisKKwkvKiBFbmFibGUgd2F0Y2hkb2cgKi8KKwljdHJsX3JlZyA9IHJl YWRiKGNwY2k2MjAwX3dkdF9yZWdzICsgV0RfQ09OVFJPTF9SRUdfT0ZGU0VUKTsKKwl3cml0 ZWIoY3RybF9yZWcgfCBXRF9FTkFCTEUsIGNwY2k2MjAwX3dkdF9yZWdzICsgV0RfQ09OVFJP TF9SRUdfT0ZGU0VUKTsKKworCXJldHVybiAwOworfQorCisvKgorICoJY3BjaTYyMDBfd2R0 X3N0b3A6CisgKgorICoJU3RvcCB0aGUgd2F0Y2hkb2cgZHJpdmVyLgorICovCisKK3N0YXRp YyBpbnQgY3BjaTYyMDBfd2R0X3N0b3Aodm9pZCkKK3sKKwl1OCBjdHJsX3JlZzsKKworCXBy aW50ayhLRVJOX0lORk8gImNwY2k2MjAwX3dkdDogU3RvcHBpbmcgd2F0Y2hkb2cgdGltZXJc biIpOworCWRlbF90aW1lcigmY3BjaTYyMDBfd2RfdGltZXIpOworCisJLyogVHVybiB0aGUg d2F0Y2hkb2cgb2ZmICovCisJY3RybF9yZWcgPSByZWFkYihjcGNpNjIwMF93ZHRfcmVncyAr IFdEX0NPTlRST0xfUkVHX09GRlNFVCk7CisJY3RybF9yZWcgJj0gfldEX0VOQUJMRTsKKwl3 cml0ZWIoY3RybF9yZWcsIGNwY2k2MjAwX3dkdF9yZWdzICsgV0RfQ09OVFJPTF9SRUdfT0ZG U0VUKTsKKworCXJldHVybiAwOworfQorCisvKgorICoJY3BjaTYyMDBfd2R0X3Bpbmc6Cisg KgorICoJUmVsb2FkIGNvdW50ZXIgd2l0aCB0aGUgd2F0Y2hkb2cgaGVhcnRiZWF0LiAKKyAq LworCitzdGF0aWMgdm9pZCBjcGNpNjIwMF93ZHRfcGluZyh1bnNpZ25lZCBsb25nIGRhdGEp Cit7CisJaWYodGltZV9iZWZvcmUoamlmZmllcywgbmV4dF9oZWFydGJlYXQpKSB7CisJCS8q IFdyaXRlIHRoZSBtYWdpYyB2YWx1ZSAgdG8gdGhlIExPQUQgUmVnaXN0ZXIgKi8KKwkJd3Jp dGViKFdEX0xPQURfTUFHSUNfVkFMVUUsIGNwY2k2MjAwX3dkdF9yZWdzICsgV0RfTE9BRF9S RUdfT0ZGU0VUKTsKKwkJbW9kX3RpbWVyKCZjcGNpNjIwMF93ZF90aW1lciwgamlmZmllcyAr IFdEVF9JTlRFUlZBTCk7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiSGVh cnRiZWF0IGxvc3QhIFdpbGwgbm90IHBpbmcgdGhlIHdhdGNoZG9nLlxuIik7CisJfQorCXJl dHVybjsKK30KKworCitzdGF0aWMgaW50IGNwY2k2MjAwX3dkdF9rZWVwYWxpdmUodm9pZCkK K3sKKwkvKiB1c2VybGFuZCBwaW5nICovCisJbmV4dF9oZWFydGJlYXQgPSBqaWZmaWVzICsg KGhlYXJ0YmVhdCAqIEhaKTsKKwlyZXR1cm4gMDsKK30KKworCisvKgorICoJY3BjaTYyMDBf d2R0X3NldF9oZWFydGJlYXQ6CisgKglAdDoJCXRoZSBuZXcgaGVhcnRiZWF0IHZhbHVlIHRo YXQgbmVlZHMgdG8gYmUgc2V0LgorICoKKyAqCVNldCBhIG5ldyBoZWFydGJlYXQgdmFsdWUg Zm9yIHRoZSB3YXRjaGRvZyBkZXZpY2UuIElmIHRoZSBoZWFydGJlYXQgCisgKiAgICAgIHZh bHVlIGlzIGluY29ycmVjdCB3ZSBrZWVwIHRoZSBvbGQgdmFsdWUgYW5kIHJldHVybiAtRUlO VkFMLiAKKyAqICAgICAgSWYgc3VjY2Vzc2Z1bGwgd2UgcmV0dXJuIDAuCisgKi8KK3N0YXRp YyBpbnQgY3BjaTYyMDBfd2R0X3NldF9oZWFydGJlYXQoaW50IHQpCit7CisJaWYgKCh0IDwg MSkgfHwgKHQgPiAzNjAwKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwloZWFydGJlYXQgPSB0 OworCS8qIGhlYXJ0YmVhdCBpcyBpbiBzZWNvbmRzLiBUaGUgd2F0Y2hkb2cgcmVzb2x1dGlv biBoYXMgYmVlbiAKKyAgICAgICAgICogc2V0IHRvIGNvdW50ZG93biBldmVyeSA2NTUzNiBt aWNyb3NlY29uZHMgKi8KKwl3ZF9oZWFydGJlYXQgPSAoKHQgKiAxMDAwKSA+PiA2KSAmIDB4 ZmZmZjsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKgljcGNpNjIwMF93ZHRfd3JpdGU6Cisg KglAZmlsZTogZmlsZSBoYW5kbGUgdG8gdGhlIHdhdGNoZG9nCisgKglAYnVmOiBidWZmZXIg dG8gd3JpdGUgKHVudXNlZCBhcyBkYXRhIGRvZXMgbm90IG1hdHRlciBoZXJlCisgKglAY291 bnQ6IGNvdW50IG9mIGJ5dGVzCisgKglAcHBvczogcG9pbnRlciB0byB0aGUgcG9zaXRpb24g dG8gd3JpdGUuIE5vIHNlZWtzIGFsbG93ZWQKKyAqCisgKglBIHdyaXRlIHRvIGEgd2F0Y2hk b2cgZGV2aWNlIGlzIGRlZmluZWQgYXMgYSBrZWVwYWxpdmUgc2lnbmFsLiBBbnkKKyAqCXdy aXRlIG9mIGRhdGEgd2lsbCBkbywgYXMgd2Ugd2UgZG9uJ3QgZGVmaW5lIGNvbnRlbnQgbWVh bmluZy4KKyAqLworCitzdGF0aWMgc3NpemVfdCBjcGNpNjIwMF93ZHRfd3JpdGUoc3RydWN0 IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9m Zl90ICpwcG9zKQoreworCWlmKGNvdW50KSB7CisJCWlmICghbm93YXlvdXQpIHsKKwkJCXNp emVfdCBpOworCisJCQkvKiBJbiBjYXNlIGl0IHdhcyBzZXQgbG9uZyBhZ28gKi8KKwkJCWNw Y2k2MjAwX2V4cGVjdF9jbG9zZSA9IDA7CisKKwkJCWZvciAoaSA9IDA7IGkgIT0gY291bnQ7 IGkrKykgeworCQkJCWNoYXIgYzsKKwkJCQlpZiAoZ2V0X3VzZXIoYywgYnVmICsgaSkpCisJ CQkJCXJldHVybiAtRUZBVUxUOworCQkJCWlmIChjID09ICdWJykKKwkJCQkJY3BjaTYyMDBf ZXhwZWN0X2Nsb3NlID0gNDI7CisJCQl9CisJCX0KKwkJY3BjaTYyMDBfd2R0X2tlZXBhbGl2 ZSgpOworCX0KKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qKgorICoJY3BjaTYyMDBfd2R0X2lv Y3RsOgorICoJQGlub2RlOiBpbm9kZSBvZiB0aGUgZGV2aWNlCisgKglAZmlsZTogZmlsZSBo YW5kbGUgdG8gdGhlIGRldmljZQorICoJQGNtZDogd2F0Y2hkb2cgY29tbWFuZAorICoJQGFy ZzogYXJndW1lbnQgcG9pbnRlcgorICoKKyAqCVRoZSB3YXRjaGRvZyBBUEkgZGVmaW5lcyBh IGNvbW1vbiBzZXQgb2YgZnVuY3Rpb25zIGZvciBhbGwgd2F0Y2hkb2dzCisgKglhY2NvcmRp bmcgdG8gdGhlaXIgYXZhaWxhYmxlIGZlYXR1cmVzLiBXZSBvbmx5IGFjdHVhbGx5IHVzZWZ1 bGx5IHN1cHBvcnQKKyAqCXF1ZXJ5aW5nIGNhcGFiaWxpdGllcyBhbmQgY3VycmVudCBzdGF0 dXMuCisgKi8KKworc3RhdGljIGludCBjcGNpNjIwMF93ZHRfaW9jdGwoc3RydWN0IGlub2Rl ICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIAorCQkgICAgICAgICAgICAgIHVuc2lnbmVk IGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXZvaWQgX191c2VyICphcmdwID0g KHZvaWQgX191c2VyICopYXJnOworCWludCBfX3VzZXIgKnAgPSBhcmdwOworCWludCBuZXdf aGVhcnRiZWF0OworCWludCBvcHRpb25zOworCisJc3RhdGljIHN0cnVjdCB3YXRjaGRvZ19p bmZvIGlkZW50ID0geworCQkub3B0aW9ucyA9CQlXRElPRl9TRVRUSU1FT1VUIHwKKwkJCQkJ V0RJT0ZfTUFHSUNDTE9TRSB8CisJCQkJCVdESU9GX0tFRVBBTElWRVBJTkcsCisJCS5maXJt d2FyZV92ZXJzaW9uID0JMSwKKwkJLmlkZW50aXR5ID0JCSJDUENJNjIwMF9XRFQiLAorCX07 CisKKwlzd2l0Y2goY21kKQorCXsKKwkJY2FzZSBXRElPQ19HRVRTVVBQT1JUOgorCQkJcmV0 dXJuIGNvcHlfdG9fdXNlcihhcmdwLCAmaWRlbnQsIHNpemVvZihpZGVudCkpPy1FRkFVTFQ6 MDsKKworCQljYXNlIFdESU9DX0dFVFNUQVRVUzoKKwkJY2FzZSBXRElPQ19HRVRCT09UU1RB VFVTOgorCQkJcmV0dXJuIHB1dF91c2VyKDAsIHApOworCQljYXNlIFdESU9DX0tFRVBBTElW RToKKwkJCWNwY2k2MjAwX3dkdF9rZWVwYWxpdmUoKTsKKwkJCXJldHVybiAwOworCQljYXNl IFdESU9DX1NFVFRJTUVPVVQ6CisJCQlpZiAoZ2V0X3VzZXIobmV3X2hlYXJ0YmVhdCwgcCkp CisJCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJCWlmIChjcGNpNjIwMF93ZHRfc2V0X2hlYXJ0 YmVhdChuZXdfaGVhcnRiZWF0KSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKworCQkJY3BjaTYy MDBfd2R0X2tlZXBhbGl2ZSgpOworCQkJLyogRmFsbCAqLworCQljYXNlIFdESU9DX0dFVFRJ TUVPVVQ6CisJCQlyZXR1cm4gcHV0X3VzZXIoaGVhcnRiZWF0LCBwKTsKKwkJY2FzZSBXRElP Q19TRVRPUFRJT05TOgorCQkJaWYgKGdldF91c2VyKG9wdGlvbnMsIHApKQorCQkJCXJldHVy biAtRUZBVUxUOworCQkJaWYgKG9wdGlvbnMgJiBXRElPU19ESVNBQkxFQ0FSRCkgeworCQkJ CWNwY2k2MjAwX3dkdF9zdG9wKCk7CisJCQkJcmV0dXJuIDA7CisJCQl9CisKKwkJCWlmIChv cHRpb25zICYgV0RJT1NfRU5BQkxFQ0FSRCkgeworCQkJCWNwY2k2MjAwX3dkdF9zdGFydCgp OworCQkJCXJldHVybiAwOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1 cm4gLUVOT1RUWTsKKworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqCWNwY2k2MjAwX3dk dF9vcGVuOgorICoJQGlub2RlOiBpbm9kZSBvZiBkZXZpY2UKKyAqCUBmaWxlOiBmaWxlIGhh bmRsZSB0byBkZXZpY2UKKyAqCisgKi8KKworc3RhdGljIGludCBjcGNpNjIwMF93ZHRfb3Bl bihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpZih0ZXN0 X2FuZF9zZXRfYml0KDAsICZjcGNpNjIwMF93ZHRfaXNfb3BlbikpCisJCXJldHVybiAtRUJV U1k7CisKKwkvKiBBY3RpdmF0ZSAqLworCXByaW50ayhLRVJOX0lORk8gImNwY2k2MjAwX3dk dDogU3RhcnRpbmcgd2F0Y2hkb2cgdGltZXJcbiIpOworCWNwY2k2MjAwX3dkdF9zdGFydCgp OworCisJcmV0dXJuIG5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbGUpOworfQorCisvKgor ICoJY3BjaTYyMDBfd2R0X3JlbGVhc2U6CisgKglAaW5vZGU6IGlub2RlIHRvIGJvYXJkCisg KglAZmlsZTogZmlsZSBoYW5kbGUgdG8gYm9hcmQKKyAqCisgKglUaGUgd2F0Y2hkb2cgaGFz IGEgY29uZmlndXJhYmxlIEFQSS4gVGhlcmUgaXMgYSByZWxpZ2lvdXMgZGlzcHV0ZQorICoJ YmV0d2VlbiBwZW9wbGUgd2hvIHdhbnQgdGhlaXIgd2F0Y2hkb2cgdG8gYmUgYWJsZSB0byBz aHV0IGRvd24gYW5kCisgKgl0aG9zZSB3aG8gd2FudCB0byBiZSBzdXJlIGlmIHRoZSB3YXRj aGRvZyBtYW5hZ2VyIGRpZXMgdGhlIG1hY2hpbmUKKyAqCXJlYm9vdHMuIEluIHRoZSBmb3Jt ZXIgY2FzZSB3ZSBkaXNhYmxlIHRoZSB3YXRjaGRvZyB0aW1lciwgaW4gdGhlIAorICogICAg ICBsYXR0ZXIgY2FzZSB5b3UgaGF2ZSB0byBvcGVuIGl0IGFnYWluIHZlcnkgc29vbi4KKyAq LworCitzdGF0aWMgaW50IGNwY2k2MjAwX3dkdF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5v ZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWlmIChjcGNpNjIwMF9leHBlY3RfY2xvc2Ug PT0gNDIpIHsKKwkJY3BjaTYyMDBfd2R0X3N0b3AoKTsKKwl9IGVsc2UgeworCQlwcmludGso S0VSTl9DUklUICJjcGNpNjIwMF93ZHQ6ICB3YXRjaGRvZyBkZXZpY2UgY2xvc2VkIHVuZXhw ZWN0ZWRseSAtIHdhdGNoZG9nIHdpbGwgbm90IHN0b3AhXG4iKTsKKwkJY3BjaTYyMDBfd2R0 X2tlZXBhbGl2ZSgpOworCX0KKwljcGNpNjIwMF9leHBlY3RfY2xvc2UgPSAwOworCWNsZWFy X2JpdCgwLCAmY3BjaTYyMDBfd2R0X2lzX29wZW4pOworCXJldHVybiAwOworfQorCisvKioK KyAqCW5vdGlmeV9zeXM6CisgKglAdGhpczogb3VyIG5vdGlmaWVyIGJsb2NrCisgKglAY29k ZTogdGhlIGV2ZW50IGJlaW5nIHJlcG9ydGVkCisgKglAdW51c2VkOiB1bnVzZWQKKyAqCisg KglPdXIgbm90aWZpZXIgaXMgY2FsbGVkIG9uIHN5c3RlbSBzaHV0ZG93bnMuIFdlIHdhbnQg dG8gdHVybiB0aGUgCisgKiAgICAgIHdhdGNoZG9nIG9mZiBhdCByZWJvb3QuCisgKi8KKwor c3RhdGljIGludCBjcGNpNjIwMF93ZHRfbm90aWZ5X3N5cyhzdHJ1Y3Qgbm90aWZpZXJfYmxv Y2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgY29kZSwKKwl2b2lkICp1bnVzZWQpCit7CisJaWYo Y29kZT09U1lTX0RPV04gfHwgY29kZT09U1lTX0hBTFQpIHsKKwkJLyogVHVybiB0aGUgY2Fy ZCBvZmYgKi8KKwkJY3BjaTYyMDBfd2R0X3N0b3AoKTsKKwl9CisJcmV0dXJuIE5PVElGWV9E T05FOworfQorCisvKgorICoJS2VybmVsIEludGVyZmFjZXMKKyAqLworCisKK3N0YXRpYyBj b25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNwY2k2MjAwX3dkdF9mb3BzID0geworCS5v d25lcgkJPSBUSElTX01PRFVMRSwKKwkubGxzZWVrCQk9IG5vX2xsc2VlaywKKwkud3JpdGUJ CT0gY3BjaTYyMDBfd2R0X3dyaXRlLAorCS5pb2N0bAkJPSBjcGNpNjIwMF93ZHRfaW9jdGws CisJLm9wZW4JCT0gY3BjaTYyMDBfd2R0X29wZW4sCisJLnJlbGVhc2UJPSBjcGNpNjIwMF93 ZHRfcmVsZWFzZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSBjcGNpNjIwMF93 ZHRfbWlzY2RldiA9IHsKKwkubWlub3IJPSBXQVRDSERPR19NSU5PUiwKKwkubmFtZQk9ICJ3 YXRjaGRvZyIsCisJLmZvcHMJPSAmY3BjaTYyMDBfd2R0X2ZvcHMsCit9OworCisvKgorICoJ VGhlIHdhdGNoZG9nIHRpbWVyIG5lZWRzIHRvIGJlIHN0b3BwZWQgb24gcmVib290cy9zaHV0 ZG93bnMgCisgKi8KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBjcGNpNjIwMF93 ZHRfbm90aWZpZXIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBjcGNpNjIwMF93ZHRfbm90aWZ5 X3N5cywKK307CisKKy8qCisgKgljbGVhbnVwX21vZHVsZToKKyAqCisgKglVbmxvYWQgdGhl IHdhdGNoZG9nLiBZb3UgY2Fubm90IGRvIHRoaXMgd2l0aCBhbnkgZmlsZSBoYW5kbGVzIG9w ZW4uCisgKglJZiB5b3VyIHdhdGNoZG9nIGlzIHNldCB0byBjb250aW51ZSB0aWNraW5nIG9u IGNsb3NlIGFuZCB5b3UgdW5sb2FkCisgKglpdCwgd2VsbCBpdCBrZWVwcyB0aWNraW5nLiAg WW91IGp1c3QgaGF2ZSB0byBsb2FkIGEgbmV3CisgKgltb2R1bGUgaW4gNjAgc2Vjb25kcyBv ciByZWJvb3QuCisgKi8KKworc3RhdGljIHZvaWQgX19kZXZleGl0IGNwY2k2MjAwX3dkdF9l eGl0KHZvaWQpCit7CisJaWYgKCFub3dheW91dCkgCisJCWNwY2k2MjAwX3dkdF9zdG9wKCk7 CisJaW91bm1hcChjcGNpNjIwMF93ZHRfcmVncyk7CQorCW1pc2NfZGVyZWdpc3RlcigmY3Bj aTYyMDBfd2R0X21pc2NkZXYpOworCXVucmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZjcGNp NjIwMF93ZHRfbm90aWZpZXIpOworfQorCisvKgorICogCWNwY2k2MjAwX3dkdF9pbml0Ogor ICoKKyAqCVNldCB1cCB0aGUgQ1BDSTYyMDAgd2F0Y2hkb2cuIAorICoJVGhlIG9wZW4oKSBm dW5jdGlvbiB3aWxsIGFjdHVhbGx5IGtpY2sgdGhlIHdhdGNoZG9nLgorICovCisKK3N0YXRp YyBpbnQgX19kZXZpbml0IGNwY2k2MjAwX3dkdF9pbml0KHZvaWQpCit7CisJaW50IHJldCA9 IDA7CisKKwkvKiBDaGVjayB0aGF0IHRoZSBoZWFydGJlYXQgdmFsdWUgaXMgd2l0aGluIGl0 J3MgcmFuZ2UgOyBpZiBub3QgcmVzZXQgdG8gdGhlIGRlZmF1bHQgKi8KKwlpZiAoY3BjaTYy MDBfd2R0X3NldF9oZWFydGJlYXQoaGVhcnRiZWF0KSkgeworCQljcGNpNjIwMF93ZHRfc2V0 X2hlYXJ0YmVhdChXRF9USU0wKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAid2R0OiBoZWFydGJl YXQgdmFsdWUgbXVzdCBiZSAwPGhlYXJ0YmVhdDwzNjAwIHNlY3MsIHVzaW5nICVkIHNlY3Nc biIsCisJCQlXRF9USU0wKTsKKwl9CisKKwljcGNpNjIwMF93ZHRfcmVncyA9IGlvcmVtYXAo Q1BDSTYyMDBfV0FUQ0hET0dfVElNRVJfTE9BRF9SRUcsIDgpOworCWlmIChjcGNpNjIwMF93 ZHRfcmVncyA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY3BjaTYyMDBfd2R0OiBp b3JlbWFwKCkgZmFpbGVkXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJ fQorCisJd3JpdGViKFdEX0NPVU5URVJfUkVTXzY1NTM2X01JQ1JPU0VDLCBjcGNpNjIwMF93 ZHRfcmVncyArIFdEX1JFU09MVVRJT05fUkVHX09GRlNFVCk7CisKKwlpbml0X3RpbWVyKCZj cGNpNjIwMF93ZF90aW1lcik7CisJY3BjaTYyMDBfd2RfdGltZXIuZnVuY3Rpb24gPSBjcGNp NjIwMF93ZHRfcGluZzsKKwljcGNpNjIwMF93ZF90aW1lci5kYXRhID0gMDsKKworCXJldCA9 IHJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmY3BjaTYyMDBfd2R0X25vdGlmaWVyKTsKKwlp ZihyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjcGNpNjIwMF93ZHQ6IGNhbm5vdCByZWdp c3RlciByZWJvb3Qgbm90aWZpZXIgKGVycj0lZClcbiIsIHJldCk7CisJCWdvdG8gb3V0Owor CX0KKworCXJldCA9IG1pc2NfcmVnaXN0ZXIoJmNwY2k2MjAwX3dkdF9taXNjZGV2KTsKKwlp ZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiY3BjaTYyMDBfd2R0OiBjYW5ub3QgcmVn aXN0ZXIgbWlzY2RldiBvbiBtaW5vcj0lZCAoZXJyPSVkKVxuIiwKKwkJCVdBVENIRE9HX01J Tk9SLCByZXQpOworCQlnb3RvIG91dG1pc2M7CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTyAi Y3BjaTYyMDAgd2F0Y2hkb2cgZHJpdmVyIHZlciAxLjA6IChoZWFydGJlYXQ9JWQgc2VjLCBu b3dheW91dD0lZClcbiIsCisJCWhlYXJ0YmVhdCwgbm93YXlvdXQpOworb3V0OgorCXJldHVy biByZXQ7CisKK291dG1pc2M6CisJdW5yZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJmNwY2k2 MjAwX3dkdF9ub3RpZmllcik7CisJZ290byBvdXQ7Cit9CisKK21vZHVsZV9pbml0KGNwY2k2 MjAwX3dkdF9pbml0KTsKK21vZHVsZV9leGl0KGNwY2k2MjAwX3dkdF9leGl0KTsKKworTU9E VUxFX0FVVEhPUigiQWppdCBQcmVtIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIldhdGNoZG9n IERyaXZlciBmb3IgdGhlIENQQ0k2MjAwIHdhdGNoZG9nIik7CitNT0RVTEVfQUxJQVNfTUlT Q0RFVihXQVRDSERPR19NSU5PUik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLXUg LS1uZXctZmlsZSAtLXJlY3Vyc2l2ZSBsaW51eC0yLjYuMjkuNi5vcmlnL2RyaXZlcnMvd2F0 Y2hkb2cvS2NvbmZpZyBsaW51eC0yLjYuMjkuNi5tb2QvZHJpdmVycy93YXRjaGRvZy9LY29u ZmlnCi0tLSBsaW51eC0yLjYuMjkuNi5vcmlnL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZwky MDA5LTA3LTAyIDE2OjQxOjIwLjAwMDAwMDAwMCAtMDcwMAorKysgbGludXgtMi42LjI5LjYu bW9kL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZwkyMDA5LTA3LTIxIDExOjI4OjE4LjAwMDAw MDAwMCAtMDcwMApAQCAtODExLDYgKzgxMSwzNSBAQAogCSAgUGxlYXNlIHNlZSBEb2N1bWVu dGF0aW9uL3dhdGNoZG9nL3dhdGNoZG9nLWFwaS50eHQgZm9yCiAJICBtb3JlIGluZm9ybWF0 aW9uLgogCitjb25maWcgTVZNRTcxMDBfV0RUCisgICAgICAgIHRyaXN0YXRlICJNVk1FNzEw MCBXYXRjaGRvZyBUaW1lciIKKyAgICAgICAgZGVwZW5kcyBvbiBXQVRDSERPRyAmJiBNVk1F NzEwMAorICAgICAgICAtLS1oZWxwLS0tCisgICAgICAgICAgSWYgeW91IGhhdmUgYW4gTVZN RTcxMDAgYm9hcmQsIHNheSBZIGhlcmUsIG90aGVyd2lzZSBOLgorCisgICAgICAgICAgVG8g Y29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisg ICAgICAgICAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG12bWU3MTAwX3dkdC4KKyAKK2NvbmZp ZyBNVk1FNDEwMF9XRFQKKyAgICAgICAgdHJpc3RhdGUgIk1WTUU0MTAwIFdhdGNoZG9nIFRp bWVyIgorICAgICAgICBkZXBlbmRzIG9uIFdBVENIRE9HICYmIE1WTUU0MTAwCisgICAgICAg IC0tLWhlbHAtLS0KKyAgICAgICAgICBJZiB5b3UgaGF2ZSBhbiBNVk1FNDEwMCBib2FyZCwg c2F5IFkgaGVyZSwgb3RoZXJ3aXNlIE4uCisKKyAgICAgICAgICBUbyBjb21waWxlIHRoaXMg ZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKyAgICAgICAgICBtb2R1 bGUgd2lsbCBiZSBjYWxsZWQgbXZtZTQxMDBfd2R0LgorIAorY29uZmlnIENQQ0k2MjAwX1dE VAorICAgICAgICB0cmlzdGF0ZSAiQ1BDSTYyMDAgV2F0Y2hkb2cgVGltZXIiCisgICAgICAg IGRlcGVuZHMgb24gV0FUQ0hET0cgJiYgQ1BDSTYyMDAKKyAgICAgICAgLS0taGVscC0tLQor ICAgICAgICAgIElmIHlvdSBoYXZlIGFuIENQQ0k2MjAwIGJvYXJkLCBzYXkgWSBoZXJlLCBv dGhlcndpc2UgTi4KKworICAgICAgICAgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBt b2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorICAgICAgICAgIG1vZHVsZSB3aWxsIGJlIGNh bGxlZCBjcGNpNjIwMF93ZHQuCisKKyMgUFBDNjQgQXJjaGl0ZWN0dXJlCisKICMgUFBDNjQg QXJjaGl0ZWN0dXJlCiAKIGNvbmZpZyBXQVRDSERPR19SVEFTCmRpZmYgLXUgLS1uZXctZmls ZSAtLXJlY3Vyc2l2ZSBsaW51eC0yLjYuMjkuNi5vcmlnL2RyaXZlcnMvd2F0Y2hkb2cvTWFr ZWZpbGUgbGludXgtMi42LjI5LjYubW9kL2RyaXZlcnMvd2F0Y2hkb2cvTWFrZWZpbGUKLS0t IGxpbnV4LTIuNi4yOS42Lm9yaWcvZHJpdmVycy93YXRjaGRvZy9NYWtlZmlsZQkyMDA5LTA3 LTAyIDE2OjQxOjIwLjAwMDAwMDAwMCAtMDcwMAorKysgbGludXgtMi42LjI5LjYubW9kL2Ry aXZlcnMvd2F0Y2hkb2cvTWFrZWZpbGUJMjAwOS0wNy0yMSAxMToyODoxOC4wMDAwMDAwMDAg LTA3MDAKQEAgLTExNyw2ICsxMTcsOSBAQAogb2JqLSQoQ09ORklHX01WNjRYNjBfV0RUKSAr PSBtdjY0eDYwX3dkdC5vCiBvYmotJChDT05GSUdfUElLQV9XRFQpICs9IHBpa2Ffd2R0Lm8K IG9iai0kKENPTkZJR19CT09LRV9XRFQpICs9IGJvb2tlX3dkdC5vCitvYmotJChDT05GSUdf TVZNRTcxMDBfV0RUKSArPSBtdm1lNzEwMF93ZHQubworb2JqLSQoQ09ORklHX01WTUU0MTAw X1dEVCkgKz0gbXZtZTQxMDBfd2R0Lm8KK29iai0kKENPTkZJR19DUENJNjIwMF9XRFQpICs9 IGNwY2k2MjAwX3dkdC5vCiAKICMgUFBDNjQgQXJjaGl0ZWN0dXJlCiBvYmotJChDT05GSUdf V0FUQ0hET0dfUlRBUykgKz0gd2RydGFzLm8KZGlmZiAtdSAtLW5ldy1maWxlIC0tcmVjdXJz aXZlIGxpbnV4LTIuNi4yOS42Lm9yaWcvZHJpdmVycy93YXRjaGRvZy9tdm1lNDEwMF93ZHQu YyBsaW51eC0yLjYuMjkuNi5tb2QvZHJpdmVycy93YXRjaGRvZy9tdm1lNDEwMF93ZHQuYwot LS0gbGludXgtMi42LjI5LjYub3JpZy9kcml2ZXJzL3dhdGNoZG9nL212bWU0MTAwX3dkdC5j CTE5NjktMTItMzEgMTc6MDA6MDAuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYuMjku Ni5tb2QvZHJpdmVycy93YXRjaGRvZy9tdm1lNDEwMF93ZHQuYwkyMDA5LTA3LTIxIDExOjI4 OjE4LjAwMDAwMDAwMCAtMDcwMApAQCAtMCwwICsxLDQ1MCBAQAorLyoKKyAqCU1WTUU0MTAw IFdhdGNoZG9nIFN1cHBvcnQKKyAqCisgKglBdXRob3I6IEFqaXQgUHJlbSA8YWppdC5wcmVt QGVtZXJzb24uY29tPgorICogICAKKyAqCUNvcHlyaWdodCAyMDA4IEVtZXJzb24gTmV0d29y ayBQb3dlciAtIEVtYmVkZGVkIENvbXB1dGluZywgSW5jLgorICoKKyAqCVRoaXMgcHJvZ3Jh bSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq CW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlCisgKglhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bjsgZWl0aGVyIHZlcnNpb24KKyAqCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9p bnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51 eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8 bGludXgvbWlzY2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3dhdGNoZG9nLmg+CisjaW5j bHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRl IDxsaW51eC9ub3RpZmllci5oPgorI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgorI2luY2x1 ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFz bS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPHBsYXRm b3Jtcy84NXh4L212bWU0MTAwLmg+CisKKyNkZWZpbmUgV0RUX0lOVEVSVkFMCShIWi8yICsg MSkKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgbXZtZTQxMDBfd2R0X2lzX29wZW47CitzdGF0 aWMgY2hhciBtdm1lNDEwMF9leHBlY3RfY2xvc2U7CitzdGF0aWMgc3RydWN0IHRpbWVyX2xp c3QgbXZtZTQxMDBfd2RfdGltZXI7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBuZXh0X2hlYXJ0 YmVhdDsKKworI2RlZmluZSBXRF9MT0FEX1JFR19PRkZTRVQJCTAKKyNkZWZpbmUgV0RfQ09O VFJPTF9SRUdfT0ZGU0VUCQk0CisjZGVmaW5lIFdEX1JFU09MVVRJT05fUkVHX09GRlNFVAk1 CisjZGVmaW5lIFdEX0NPVU5UX1JFR19PRkZTRVQJCTYKKworI2RlZmluZSBXRF9MT0FEX01B R0lDX1ZBTFVFCQkJMHhEQgorI2RlZmluZSBXRF9FTkFCTEUJCQkJMHg4MAorI2RlZmluZSBX RF9WTUVCVVNfU1lTX1JFU0VUCQkJMHg0MAorCisjZGVmaW5lIFdEX0NPVU5URVJfUkVTXzRf TUlDUk9TRUMJCTB4MQorI2RlZmluZSBXRF9DT1VOVEVSX1JFU184X01JQ1JPU0VDCQkweDIK KyNkZWZpbmUgV0RfQ09VTlRFUl9SRVNfMTZfTUlDUk9TRUMJCTB4MworI2RlZmluZSBXRF9D T1VOVEVSX1JFU18zMl9NSUNST1NFQwkJMHg0CisjZGVmaW5lIFdEX0NPVU5URVJfUkVTXzY0 X01JQ1JPU0VDCQkweDUKKyNkZWZpbmUgV0RfQ09VTlRFUl9SRVNfMTI4X01JQ1JPU0VDCQkw eDYKKyNkZWZpbmUgV0RfQ09VTlRFUl9SRVNfMjU2X01JQ1JPU0VDCQkweDcKKyNkZWZpbmUg V0RfQ09VTlRFUl9SRVNfNTEyX01JQ1JPU0VDCQkweDgKKyNkZWZpbmUgV0RfQ09VTlRFUl9S RVNfMTAyNF9NSUNST1NFQwkJMHg5CisjZGVmaW5lIFdEX0NPVU5URVJfUkVTXzIwNDhfTUlD Uk9TRUMJCTB4YQorI2RlZmluZSBXRF9DT1VOVEVSX1JFU180MDk2X01JQ1JPU0VDCQkweGIK KyNkZWZpbmUgV0RfQ09VTlRFUl9SRVNfODE5Ml9NSUNST1NFQwkJMHhjCisjZGVmaW5lIFdE X0NPVU5URVJfUkVTXzE2Mzg0X01JQ1JPU0VDCQkweGQKKyNkZWZpbmUgV0RfQ09VTlRFUl9S RVNfMzI3NjhfTUlDUk9TRUMJCTB4ZQorI2RlZmluZSBXRF9DT1VOVEVSX1JFU182NTUzNl9N SUNST1NFQwkJMHhmCisKKworLyogTW9kdWxlIHBhcmFtZXRlcnMgKi8KKworI2RlZmluZSBX RF9USU0wIDYwCQkJLyogRGVmYXVsdCBoZWFydGJlYXQgPSA2MCBzZWNvbmRzICovCisKK3N0 YXRpYyBpbnQgaGVhcnRiZWF0ID0gV0RfVElNMDsKK3N0YXRpYyBpbnQgd2RfaGVhcnRiZWF0 ID0gKFdEX1RJTTAgKiAxMDAwKSA+PiA2OworCittb2R1bGVfcGFyYW0oaGVhcnRiZWF0LCBp bnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhoZWFydGJlYXQsICJXYXRjaGRvZyBoZWFydGJl YXQgaW4gc2Vjb25kcy4gKDA8aGVhcnRiZWF0PDM2MDAsIGRlZmF1bHQ9IiBfX01PRFVMRV9T VFJJTkcoV0RfVElNTykgIikiKTsKKworc3RhdGljIGludCBub3dheW91dCA9IFdBVENIRE9H X05PV0FZT1VUOworbW9kdWxlX3BhcmFtKG5vd2F5b3V0LCBpbnQsIDApOworTU9EVUxFX1BB Uk1fREVTQyhub3dheW91dCwgIldhdGNoZG9nIGNhbm5vdCBiZSBzdG9wcGVkIG9uY2Ugc3Rh cnRlZCAoZGVmYXVsdD1DT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQpIik7CisKKworc3RhdGlj IHZvaWQgX19pb21lbSAqbXZtZTQxMDBfd2R0X3JlZ3M7CisKKy8qIFN0YXJ0IHRoZSB3YXRj aGRvZyBkcml2ZXIgKi8KKworc3RhdGljIGludCBtdm1lNDEwMF93ZHRfc3RhcnQodm9pZCkK K3sKKwl1OCBjdHJsX3JlZzsKKwl1MTYgY291bnRfcmVnOworCisJLyogRGlzYWJsZSB3YXRj aGRvZyAqLworCWN0cmxfcmVnID0gcmVhZGIobXZtZTQxMDBfd2R0X3JlZ3MgKyBXRF9DT05U Uk9MX1JFR19PRkZTRVQpOworCWlmIChjdHJsX3JlZyAmIFdEX0VOQUJMRSkKKwkJd3JpdGVi KGN0cmxfcmVnICYgfldEX0VOQUJMRSwgbXZtZTQxMDBfd2R0X3JlZ3MgKyBXRF9DT05UUk9M X1JFR19PRkZTRVQpOworCisJLyogTG9hZCBjb3VudGVyICovCisJY291bnRfcmVnID0gd2Rf aGVhcnRiZWF0OworCXdyaXRldyhzd2FiMTYoY291bnRfcmVnKSwgbXZtZTQxMDBfd2R0X3Jl Z3MgKyBXRF9DT1VOVF9SRUdfT0ZGU0VUKTsKKworCS8qIFN0YXJ0IHRoZSBrZXJuZWwgdGlt ZXIgKi8KKwluZXh0X2hlYXJ0YmVhdCA9IGppZmZpZXMgKyAoaGVhcnRiZWF0ICogSFopOwor CW1vZF90aW1lcigmbXZtZTQxMDBfd2RfdGltZXIsIGppZmZpZXMgKyBXRFRfSU5URVJWQUwp OyAKKworCS8qIEVuYWJsZSB3YXRjaGRvZyAqLworCWN0cmxfcmVnID0gcmVhZGIobXZtZTQx MDBfd2R0X3JlZ3MgKyBXRF9DT05UUk9MX1JFR19PRkZTRVQpOworCXdyaXRlYihjdHJsX3Jl ZyB8IFdEX0VOQUJMRSwgbXZtZTQxMDBfd2R0X3JlZ3MgKyBXRF9DT05UUk9MX1JFR19PRkZT RVQpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKgltdm1lNDEwMF93ZHRfc3RvcDoKKyAq CisgKglTdG9wIHRoZSB3YXRjaGRvZyBkcml2ZXIuCisgKi8KKworc3RhdGljIGludCBtdm1l NDEwMF93ZHRfc3RvcCh2b2lkKQoreworCXU4IGN0cmxfcmVnOworCisJcHJpbnRrKEtFUk5f SU5GTyAibXZtZTQxMDBfd2R0OiBTdG9wcGluZyB3YXRjaGRvZyB0aW1lclxuIik7CisJZGVs X3RpbWVyKCZtdm1lNDEwMF93ZF90aW1lcik7CisKKwkvKiBUdXJuIHRoZSB3YXRjaGRvZyBv ZmYgKi8KKwljdHJsX3JlZyA9IHJlYWRiKG12bWU0MTAwX3dkdF9yZWdzICsgV0RfQ09OVFJP TF9SRUdfT0ZGU0VUKTsKKwljdHJsX3JlZyAmPSB+V0RfRU5BQkxFOworCXdyaXRlYihjdHJs X3JlZywgbXZtZTQxMDBfd2R0X3JlZ3MgKyBXRF9DT05UUk9MX1JFR19PRkZTRVQpOworCisJ cmV0dXJuIDA7Cit9CisKKy8qCisgKgltdm1lNDEwMF93ZHRfcGluZzoKKyAqCisgKglSZWxv YWQgY291bnRlciB3aXRoIHRoZSB3YXRjaGRvZyBoZWFydGJlYXQuIAorICovCisKK3N0YXRp YyB2b2lkIG12bWU0MTAwX3dkdF9waW5nKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlpZih0 aW1lX2JlZm9yZShqaWZmaWVzLCBuZXh0X2hlYXJ0YmVhdCkpIHsKKwkJLyogV3JpdGUgdGhl IG1hZ2ljIHZhbHVlICB0byB0aGUgTE9BRCBSZWdpc3RlciAqLworCQl3cml0ZWIoV0RfTE9B RF9NQUdJQ19WQUxVRSwgbXZtZTQxMDBfd2R0X3JlZ3MgKyBXRF9MT0FEX1JFR19PRkZTRVQp OworCQltb2RfdGltZXIoJm12bWU0MTAwX3dkX3RpbWVyLCBqaWZmaWVzICsgV0RUX0lOVEVS VkFMKTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJIZWFydGJlYXQgbG9z dCEgV2lsbCBub3QgcGluZyB0aGUgd2F0Y2hkb2cuXG4iKTsKKwl9CisJcmV0dXJuOworfQor CisKK3N0YXRpYyBpbnQgbXZtZTQxMDBfd2R0X2tlZXBhbGl2ZSh2b2lkKQoreworCS8qIHVz ZXJsYW5kIHBpbmcgKi8KKwluZXh0X2hlYXJ0YmVhdCA9IGppZmZpZXMgKyAoaGVhcnRiZWF0 ICogSFopOworCXJldHVybiAwOworfQorCisKKy8qCisgKgltdm1lNDEwMF93ZHRfc2V0X2hl YXJ0YmVhdDoKKyAqCUB0OgkJdGhlIG5ldyBoZWFydGJlYXQgdmFsdWUgdGhhdCBuZWVkcyB0 byBiZSBzZXQuCisgKgorICoJU2V0IGEgbmV3IGhlYXJ0YmVhdCB2YWx1ZSBmb3IgdGhlIHdh dGNoZG9nIGRldmljZS4gSWYgdGhlIGhlYXJ0YmVhdCAKKyAqICAgICAgdmFsdWUgaXMgaW5j b3JyZWN0IHdlIGtlZXAgdGhlIG9sZCB2YWx1ZSBhbmQgcmV0dXJuIC1FSU5WQUwuIAorICog ICAgICBJZiBzdWNjZXNzZnVsbCB3ZSByZXR1cm4gMC4KKyAqLworc3RhdGljIGludCBtdm1l NDEwMF93ZHRfc2V0X2hlYXJ0YmVhdChpbnQgdCkKK3sKKwlpZiAoKHQgPCAxKSB8fCAodCA+ IDM2MDApKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWhlYXJ0YmVhdCA9IHQ7CisJLyogaGVh cnRiZWF0IGlzIGluIHNlY29uZHMuIFRoZSB3YXRjaGRvZyByZXNvbHV0aW9uIGhhcyBiZWVu IAorICAgICAgICAgKiBzZXQgdG8gY291bnRkb3duIGV2ZXJ5IDY1NTM2IG1pY3Jvc2Vjb25k cyAqLworCXdkX2hlYXJ0YmVhdCA9ICgodCAqIDEwMDApID4+IDYpICYgMHhmZmZmOworCXJl dHVybiAwOworfQorCisvKioKKyAqCW12bWU0MTAwX3dkdF93cml0ZToKKyAqCUBmaWxlOiBm aWxlIGhhbmRsZSB0byB0aGUgd2F0Y2hkb2cKKyAqCUBidWY6IGJ1ZmZlciB0byB3cml0ZSAo dW51c2VkIGFzIGRhdGEgZG9lcyBub3QgbWF0dGVyIGhlcmUKKyAqCUBjb3VudDogY291bnQg b2YgYnl0ZXMKKyAqCUBwcG9zOiBwb2ludGVyIHRvIHRoZSBwb3NpdGlvbiB0byB3cml0ZS4g Tm8gc2Vla3MgYWxsb3dlZAorICoKKyAqCUEgd3JpdGUgdG8gYSB3YXRjaGRvZyBkZXZpY2Ug aXMgZGVmaW5lZCBhcyBhIGtlZXBhbGl2ZSBzaWduYWwuIEFueQorICoJd3JpdGUgb2YgZGF0 YSB3aWxsIGRvLCBhcyB3ZSB3ZSBkb24ndCBkZWZpbmUgY29udGVudCBtZWFuaW5nLgorICov CisKK3N0YXRpYyBzc2l6ZV90IG12bWU0MTAwX3dkdF93cml0ZShzdHJ1Y3QgZmlsZSAqZmls ZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3Mp Cit7CisJaWYoY291bnQpIHsKKwkJaWYgKCFub3dheW91dCkgeworCQkJc2l6ZV90IGk7CisK KwkJCS8qIEluIGNhc2UgaXQgd2FzIHNldCBsb25nIGFnbyAqLworCQkJbXZtZTQxMDBfZXhw ZWN0X2Nsb3NlID0gMDsKKworCQkJZm9yIChpID0gMDsgaSAhPSBjb3VudDsgaSsrKSB7CisJ CQkJY2hhciBjOworCQkJCWlmIChnZXRfdXNlcihjLCBidWYgKyBpKSkKKwkJCQkJcmV0dXJu IC1FRkFVTFQ7CisJCQkJaWYgKGMgPT0gJ1YnKQorCQkJCQltdm1lNDEwMF9leHBlY3RfY2xv c2UgPSA0MjsKKwkJCX0KKwkJfQorCQltdm1lNDEwMF93ZHRfa2VlcGFsaXZlKCk7CisJfQor CXJldHVybiBjb3VudDsKK30KKworLyoqCisgKgltdm1lNDEwMF93ZHRfaW9jdGw6CisgKglA aW5vZGU6IGlub2RlIG9mIHRoZSBkZXZpY2UKKyAqCUBmaWxlOiBmaWxlIGhhbmRsZSB0byB0 aGUgZGV2aWNlCisgKglAY21kOiB3YXRjaGRvZyBjb21tYW5kCisgKglAYXJnOiBhcmd1bWVu dCBwb2ludGVyCisgKgorICoJVGhlIHdhdGNoZG9nIEFQSSBkZWZpbmVzIGEgY29tbW9uIHNl dCBvZiBmdW5jdGlvbnMgZm9yIGFsbCB3YXRjaGRvZ3MKKyAqCWFjY29yZGluZyB0byB0aGVp ciBhdmFpbGFibGUgZmVhdHVyZXMuIFdlIG9ubHkgYWN0dWFsbHkgdXNlZnVsbHkgc3VwcG9y dAorICoJcXVlcnlpbmcgY2FwYWJpbGl0aWVzIGFuZCBjdXJyZW50IHN0YXR1cy4KKyAqLwor CitzdGF0aWMgaW50IG12bWU0MTAwX3dkdF9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBz dHJ1Y3QgZmlsZSAqZmlsZSwgCisJCSAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNtZCwg dW5zaWduZWQgbG9uZyBhcmcpCit7CisJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3Vz ZXIgKilhcmc7CisJaW50IF9fdXNlciAqcCA9IGFyZ3A7CisJaW50IG5ld19oZWFydGJlYXQ7 CisJaW50IG9wdGlvbnM7CisKKwlzdGF0aWMgc3RydWN0IHdhdGNoZG9nX2luZm8gaWRlbnQg PSB7CisJCS5vcHRpb25zID0JCVdESU9GX1NFVFRJTUVPVVQgfAorCQkJCQlXRElPRl9NQUdJ Q0NMT1NFIHwKKwkJCQkJV0RJT0ZfS0VFUEFMSVZFUElORywKKwkJLmZpcm13YXJlX3ZlcnNp b24gPQkxLAorCQkuaWRlbnRpdHkgPQkJIk1WTUU0MTAwX1dEVCIsCisJfTsKKworCXN3aXRj aChjbWQpCisJeworCQljYXNlIFdESU9DX0dFVFNVUFBPUlQ6CisJCQlyZXR1cm4gY29weV90 b191c2VyKGFyZ3AsICZpZGVudCwgc2l6ZW9mKGlkZW50KSk/LUVGQVVMVDowOworCisJCWNh c2UgV0RJT0NfR0VUU1RBVFVTOgorCQljYXNlIFdESU9DX0dFVEJPT1RTVEFUVVM6CisJCQly ZXR1cm4gcHV0X3VzZXIoMCwgcCk7CisJCWNhc2UgV0RJT0NfS0VFUEFMSVZFOgorCQkJbXZt ZTQxMDBfd2R0X2tlZXBhbGl2ZSgpOworCQkJcmV0dXJuIDA7CisJCWNhc2UgV0RJT0NfU0VU VElNRU9VVDoKKwkJCWlmIChnZXRfdXNlcihuZXdfaGVhcnRiZWF0LCBwKSkKKwkJCQlyZXR1 cm4gLUVGQVVMVDsKKworCQkJaWYgKG12bWU0MTAwX3dkdF9zZXRfaGVhcnRiZWF0KG5ld19o ZWFydGJlYXQpKQorCQkJCXJldHVybiAtRUlOVkFMOworCisJCQltdm1lNDEwMF93ZHRfa2Vl cGFsaXZlKCk7CisJCQkvKiBGYWxsICovCisJCWNhc2UgV0RJT0NfR0VUVElNRU9VVDoKKwkJ CXJldHVybiBwdXRfdXNlcihoZWFydGJlYXQsIHApOworCQljYXNlIFdESU9DX1NFVE9QVElP TlM6CisJCQlpZiAoZ2V0X3VzZXIob3B0aW9ucywgcCkpCisJCQkJcmV0dXJuIC1FRkFVTFQ7 CisJCQlpZiAob3B0aW9ucyAmIFdESU9TX0RJU0FCTEVDQVJEKSB7CisJCQkJbXZtZTQxMDBf d2R0X3N0b3AoKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKworCQkJaWYgKG9wdGlvbnMgJiBX RElPU19FTkFCTEVDQVJEKSB7CisJCQkJbXZtZTQxMDBfd2R0X3N0YXJ0KCk7CisJCQkJcmV0 dXJuIDA7CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRU5PVFRZ OworCisJfQorCXJldHVybiAwOworfQorCisvKgorICoJbXZtZTQxMDBfd2R0X29wZW46Cisg KglAaW5vZGU6IGlub2RlIG9mIGRldmljZQorICoJQGZpbGU6IGZpbGUgaGFuZGxlIHRvIGRl dmljZQorICoKKyAqLworCitzdGF0aWMgaW50IG12bWU0MTAwX3dkdF9vcGVuKHN0cnVjdCBp bm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWlmKHRlc3RfYW5kX3NldF9i aXQoMCwgJm12bWU0MTAwX3dkdF9pc19vcGVuKSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCS8q IEFjdGl2YXRlICovCisJcHJpbnRrKEtFUk5fSU5GTyAibXZtZTQxMDBfd2R0OiBTdGFydGlu ZyB3YXRjaGRvZyB0aW1lclxuIik7CisJbXZtZTQxMDBfd2R0X3N0YXJ0KCk7CisKKwlyZXR1 cm4gbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlsZSk7Cit9CisKKy8qCisgKgltdm1lNDEw MF93ZHRfcmVsZWFzZToKKyAqCUBpbm9kZTogaW5vZGUgdG8gYm9hcmQKKyAqCUBmaWxlOiBm aWxlIGhhbmRsZSB0byBib2FyZAorICoKKyAqCVRoZSB3YXRjaGRvZyBoYXMgYSBjb25maWd1 cmFibGUgQVBJLiBUaGVyZSBpcyBhIHJlbGlnaW91cyBkaXNwdXRlCisgKgliZXR3ZWVuIHBl b3BsZSB3aG8gd2FudCB0aGVpciB3YXRjaGRvZyB0byBiZSBhYmxlIHRvIHNodXQgZG93biBh bmQKKyAqCXRob3NlIHdobyB3YW50IHRvIGJlIHN1cmUgaWYgdGhlIHdhdGNoZG9nIG1hbmFn ZXIgZGllcyB0aGUgbWFjaGluZQorICoJcmVib290cy4gSW4gdGhlIGZvcm1lciBjYXNlIHdl IGRpc2FibGUgdGhlIHdhdGNoZG9nIHRpbWVyLCBpbiB0aGUgCisgKiAgICAgIGxhdHRlciBj YXNlIHlvdSBoYXZlIHRvIG9wZW4gaXQgYWdhaW4gdmVyeSBzb29uLgorICovCisKK3N0YXRp YyBpbnQgbXZtZTQxMDBfd2R0X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0 IGZpbGUgKmZpbGUpCit7CisJaWYgKG12bWU0MTAwX2V4cGVjdF9jbG9zZSA9PSA0Mikgewor CQltdm1lNDEwMF93ZHRfc3RvcCgpOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0NSSVQg Im12bWU0MTAwX3dkdDogIHdhdGNoZG9nIGRldmljZSBjbG9zZWQgdW5leHBlY3RlZGx5IC0g d2F0Y2hkb2cgd2lsbCBub3Qgc3RvcCFcbiIpOworCQltdm1lNDEwMF93ZHRfa2VlcGFsaXZl KCk7CisJfQorCW12bWU0MTAwX2V4cGVjdF9jbG9zZSA9IDA7CisJY2xlYXJfYml0KDAsICZt dm1lNDEwMF93ZHRfaXNfb3Blbik7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICoJbm90aWZ5 X3N5czoKKyAqCUB0aGlzOiBvdXIgbm90aWZpZXIgYmxvY2sKKyAqCUBjb2RlOiB0aGUgZXZl bnQgYmVpbmcgcmVwb3J0ZWQKKyAqCUB1bnVzZWQ6IHVudXNlZAorICoKKyAqCU91ciBub3Rp ZmllciBpcyBjYWxsZWQgb24gc3lzdGVtIHNodXRkb3ducy4gV2Ugd2FudCB0byB0dXJuIHRo ZSAKKyAqICAgICAgd2F0Y2hkb2cgb2ZmIGF0IHJlYm9vdC4KKyAqLworCitzdGF0aWMgaW50 IG12bWU0MTAwX3dkdF9ub3RpZnlfc3lzKHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywg dW5zaWduZWQgbG9uZyBjb2RlLAorCXZvaWQgKnVudXNlZCkKK3sKKwlpZihjb2RlPT1TWVNf RE9XTiB8fCBjb2RlPT1TWVNfSEFMVCkgeworCQkvKiBUdXJuIHRoZSBjYXJkIG9mZiAqLwor CQltdm1lNDEwMF93ZHRfc3RvcCgpOworCX0KKwlyZXR1cm4gTk9USUZZX0RPTkU7Cit9CisK Ky8qCisgKglLZXJuZWwgSW50ZXJmYWNlcworICovCisKKworc3RhdGljIGNvbnN0IHN0cnVj dCBmaWxlX29wZXJhdGlvbnMgbXZtZTQxMDBfd2R0X2ZvcHMgPSB7CisJLm93bmVyCQk9IFRI SVNfTU9EVUxFLAorCS5sbHNlZWsJCT0gbm9fbGxzZWVrLAorCS53cml0ZQkJPSBtdm1lNDEw MF93ZHRfd3JpdGUsCisJLmlvY3RsCQk9IG12bWU0MTAwX3dkdF9pb2N0bCwKKwkub3BlbgkJ PSBtdm1lNDEwMF93ZHRfb3BlbiwKKwkucmVsZWFzZQk9IG12bWU0MTAwX3dkdF9yZWxlYXNl LAorfTsKKworc3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIG12bWU0MTAwX3dkdF9taXNjZGV2 ID0geworCS5taW5vcgk9IFdBVENIRE9HX01JTk9SLAorCS5uYW1lCT0gIndhdGNoZG9nIiwK KwkuZm9wcwk9ICZtdm1lNDEwMF93ZHRfZm9wcywKK307CisKKy8qCisgKglUaGUgd2F0Y2hk b2cgdGltZXIgbmVlZHMgdG8gYmUgc3RvcHBlZCBvbiByZWJvb3RzL3NodXRkb3ducyAKKyAq LworCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIG12bWU0MTAwX3dkdF9ub3RpZmll ciA9IHsKKwkubm90aWZpZXJfY2FsbCA9IG12bWU0MTAwX3dkdF9ub3RpZnlfc3lzLAorfTsK KworLyoKKyAqCWNsZWFudXBfbW9kdWxlOgorICoKKyAqCVVubG9hZCB0aGUgd2F0Y2hkb2cu IFlvdSBjYW5ub3QgZG8gdGhpcyB3aXRoIGFueSBmaWxlIGhhbmRsZXMgb3Blbi4KKyAqCUlm IHlvdXIgd2F0Y2hkb2cgaXMgc2V0IHRvIGNvbnRpbnVlIHRpY2tpbmcgb24gY2xvc2UgYW5k IHlvdSB1bmxvYWQKKyAqCWl0LCB3ZWxsIGl0IGtlZXBzIHRpY2tpbmcuICBZb3UganVzdCBo YXZlIHRvIGxvYWQgYSBuZXcKKyAqCW1vZHVsZSBpbiA2MCBzZWNvbmRzIG9yIHJlYm9vdC4K KyAqLworCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgbXZtZTQxMDBfd2R0X2V4aXQodm9pZCkK K3sKKwlpZiAoIW5vd2F5b3V0KSAKKwkJbXZtZTQxMDBfd2R0X3N0b3AoKTsKKwlpb3VubWFw KG12bWU0MTAwX3dkdF9yZWdzKTsJCisJbWlzY19kZXJlZ2lzdGVyKCZtdm1lNDEwMF93ZHRf bWlzY2Rldik7CisJdW5yZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJm12bWU0MTAwX3dkdF9u b3RpZmllcik7Cit9CisKKy8qCisgKiAJbXZtZTQxMDBfd2R0X2luaXQ6CisgKgorICoJU2V0 IHVwIHRoZSBNVk1FNDEwMCB3YXRjaGRvZy4gCisgKglUaGUgb3BlbigpIGZ1bmN0aW9uIHdp bGwgYWN0dWFsbHkga2ljayB0aGUgd2F0Y2hkb2cuCisgKi8KKworc3RhdGljIGludCBfX2Rl dmluaXQgbXZtZTQxMDBfd2R0X2luaXQodm9pZCkKK3sKKwlpbnQgcmV0ID0gMDsKKworCS8q IENoZWNrIHRoYXQgdGhlIGhlYXJ0YmVhdCB2YWx1ZSBpcyB3aXRoaW4gaXQncyByYW5nZSA7 IGlmIG5vdCByZXNldCB0byB0aGUgZGVmYXVsdCAqLworCWlmIChtdm1lNDEwMF93ZHRfc2V0 X2hlYXJ0YmVhdChoZWFydGJlYXQpKSB7CisJCW12bWU0MTAwX3dkdF9zZXRfaGVhcnRiZWF0 KFdEX1RJTTApOworCQlwcmludGsoS0VSTl9JTkZPICJ3ZHQ6IGhlYXJ0YmVhdCB2YWx1ZSBt dXN0IGJlIDA8aGVhcnRiZWF0PDM2MDAgc2VjcywgdXNpbmcgJWQgc2Vjc1xuIiwKKwkJCVdE X1RJTTApOworCX0KKworCW12bWU0MTAwX3dkdF9yZWdzID0gaW9yZW1hcChNVk1FNDEwMF9X QVRDSERPR19USU1FUl9MT0FEX1JFRywgOCk7CisJaWYgKG12bWU0MTAwX3dkdF9yZWdzID09 IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtdm1lNDEwMF93ZHQ6IGlvcmVtYXAoKSBm YWlsZWRcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwl3cml0 ZWIoV0RfQ09VTlRFUl9SRVNfNjU1MzZfTUlDUk9TRUMsIG12bWU0MTAwX3dkdF9yZWdzICsg V0RfUkVTT0xVVElPTl9SRUdfT0ZGU0VUKTsKKworCWluaXRfdGltZXIoJm12bWU0MTAwX3dk X3RpbWVyKTsKKwltdm1lNDEwMF93ZF90aW1lci5mdW5jdGlvbiA9IG12bWU0MTAwX3dkdF9w aW5nOworCW12bWU0MTAwX3dkX3RpbWVyLmRhdGEgPSAwOworCisJcmV0ID0gcmVnaXN0ZXJf cmVib290X25vdGlmaWVyKCZtdm1lNDEwMF93ZHRfbm90aWZpZXIpOworCWlmKHJldCkgewor CQlwcmludGsoS0VSTl9FUlIgIm12bWU0MTAwX3dkdDogY2Fubm90IHJlZ2lzdGVyIHJlYm9v dCBub3RpZmllciAoZXJyPSVkKVxuIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0 ID0gbWlzY19yZWdpc3RlcigmbXZtZTQxMDBfd2R0X21pc2NkZXYpOworCWlmIChyZXQpIHsK KwkJcHJpbnRrKEtFUk5fRVJSICJtdm1lNDEwMF93ZHQ6IGNhbm5vdCByZWdpc3RlciBtaXNj ZGV2IG9uIG1pbm9yPSVkIChlcnI9JWQpXG4iLAorCQkJV0FUQ0hET0dfTUlOT1IsIHJldCk7 CisJCWdvdG8gb3V0bWlzYzsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJtdm1lNDEwMCB3 YXRjaGRvZyBkcml2ZXIgdmVyIDEuMDogKGhlYXJ0YmVhdD0lZCBzZWMsIG5vd2F5b3V0PSVk KVxuIiwKKwkJaGVhcnRiZWF0LCBub3dheW91dCk7CitvdXQ6CisJcmV0dXJuIHJldDsKKwor b3V0bWlzYzoKKwl1bnJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmbXZtZTQxMDBfd2R0X25v dGlmaWVyKTsKKwlnb3RvIG91dDsKK30KKworbW9kdWxlX2luaXQobXZtZTQxMDBfd2R0X2lu aXQpOworbW9kdWxlX2V4aXQobXZtZTQxMDBfd2R0X2V4aXQpOworCitNT0RVTEVfQVVUSE9S KCJBaml0IFByZW0iKTsKK01PRFVMRV9ERVNDUklQVElPTigiV2F0Y2hkb2cgRHJpdmVyIGZv ciB0aGUgTVZNRTQxMDAgd2F0Y2hkb2ciKTsKK01PRFVMRV9BTElBU19NSVNDREVWKFdBVENI RE9HX01JTk9SKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtdSAtLW5ldy1maWxl IC0tcmVjdXJzaXZlIGxpbnV4LTIuNi4yOS42Lm9yaWcvZHJpdmVycy93YXRjaGRvZy9tdm1l NzEwMF93ZHQuYyBsaW51eC0yLjYuMjkuNi5tb2QvZHJpdmVycy93YXRjaGRvZy9tdm1lNzEw MF93ZHQuYwotLS0gbGludXgtMi42LjI5LjYub3JpZy9kcml2ZXJzL3dhdGNoZG9nL212bWU3 MTAwX3dkdC5jCTE5NjktMTItMzEgMTc6MDA6MDAuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51 eC0yLjYuMjkuNi5tb2QvZHJpdmVycy93YXRjaGRvZy9tdm1lNzEwMF93ZHQuYwkyMDA5LTA3 LTIxIDExOjI4OjE4LjAwMDAwMDAwMCAtMDcwMApAQCAtMCwwICsxLDQ1MCBAQAorLyoKKyAq CU1WTUU3MTAwIFdhdGNoZG9nIFN1cHBvcnQKKyAqCisgKglBdXRob3I6IEFqaXQgUHJlbSA8 YWppdC5wcmVtQGVtZXJzb24uY29tPgorICogICAKKyAqCUNvcHlyaWdodCAyMDA4IEVtZXJz b24gTmV0d29yayBQb3dlciAtIEVtYmVkZGVkIENvbXB1dGluZywgSW5jLgorICoKKyAqCVRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlCisgKglhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChh dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpbmNsdWRl IDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNs dWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Cisj aW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3dhdGNoZG9n Lmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4K KyNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgorI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5o PgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorI2lu Y2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1 ZGUgPHBsYXRmb3Jtcy84Nnh4L212bWU3MTAwLmg+CisKKyNkZWZpbmUgV0RUX0lOVEVSVkFM CShIWi8yICsgMSkKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgbXZtZTcxMDBfd2R0X2lzX29w ZW47CitzdGF0aWMgY2hhciBtdm1lNzEwMF9leHBlY3RfY2xvc2U7CitzdGF0aWMgc3RydWN0 IHRpbWVyX2xpc3QgbXZtZTcxMDBfd2RfdGltZXI7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBu ZXh0X2hlYXJ0YmVhdDsKKworI2RlZmluZSBXRF9MT0FEX1JFR19PRkZTRVQJCTAKKyNkZWZp bmUgV0RfQ09OVFJPTF9SRUdfT0ZGU0VUCQk0CisjZGVmaW5lIFdEX1JFU09MVVRJT05fUkVH X09GRlNFVAk1CisjZGVmaW5lIFdEX0NPVU5UX1JFR19PRkZTRVQJCTYKKworI2RlZmluZSBX RF9MT0FEX01BR0lDX1ZBTFVFCQkJMHhEQgorI2RlZmluZSBXRF9FTkFCTEUJCQkJMHg4MAor I2RlZmluZSBXRF9WTUVCVVNfU1lTX1JFU0VUCQkJMHg0MAorCisjZGVmaW5lIFdEX0NPVU5U RVJfUkVTXzRfTUlDUk9TRUMJCTB4MQorI2RlZmluZSBXRF9DT1VOVEVSX1JFU184X01JQ1JP U0VDCQkweDIKKyNkZWZpbmUgV0RfQ09VTlRFUl9SRVNfMTZfTUlDUk9TRUMJCTB4MworI2Rl ZmluZSBXRF9DT1VOVEVSX1JFU18zMl9NSUNST1NFQwkJMHg0CisjZGVmaW5lIFdEX0NPVU5U RVJfUkVTXzY0X01JQ1JPU0VDCQkweDUKKyNkZWZpbmUgV0RfQ09VTlRFUl9SRVNfMTI4X01J Q1JPU0VDCQkweDYKKyNkZWZpbmUgV0RfQ09VTlRFUl9SRVNfMjU2X01JQ1JPU0VDCQkweDcK KyNkZWZpbmUgV0RfQ09VTlRFUl9SRVNfNTEyX01JQ1JPU0VDCQkweDgKKyNkZWZpbmUgV0Rf Q09VTlRFUl9SRVNfMTAyNF9NSUNST1NFQwkJMHg5CisjZGVmaW5lIFdEX0NPVU5URVJfUkVT XzIwNDhfTUlDUk9TRUMJCTB4YQorI2RlZmluZSBXRF9DT1VOVEVSX1JFU180MDk2X01JQ1JP U0VDCQkweGIKKyNkZWZpbmUgV0RfQ09VTlRFUl9SRVNfODE5Ml9NSUNST1NFQwkJMHhjCisj ZGVmaW5lIFdEX0NPVU5URVJfUkVTXzE2Mzg0X01JQ1JPU0VDCQkweGQKKyNkZWZpbmUgV0Rf Q09VTlRFUl9SRVNfMzI3NjhfTUlDUk9TRUMJCTB4ZQorI2RlZmluZSBXRF9DT1VOVEVSX1JF U182NTUzNl9NSUNST1NFQwkJMHhmCisKKworLyogTW9kdWxlIHBhcmFtZXRlcnMgKi8KKwor I2RlZmluZSBXRF9USU0wIDYwCQkJLyogRGVmYXVsdCBoZWFydGJlYXQgPSA2MCBzZWNvbmRz ICovCisKK3N0YXRpYyBpbnQgaGVhcnRiZWF0ID0gV0RfVElNMDsKK3N0YXRpYyBpbnQgd2Rf aGVhcnRiZWF0ID0gKFdEX1RJTTAgKiAxMDAwKSA+PiA2OworCittb2R1bGVfcGFyYW0oaGVh cnRiZWF0LCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhoZWFydGJlYXQsICJXYXRjaGRv ZyBoZWFydGJlYXQgaW4gc2Vjb25kcy4gKDA8aGVhcnRiZWF0PDM2MDAsIGRlZmF1bHQ9IiBf X01PRFVMRV9TVFJJTkcoV0RfVElNTykgIikiKTsKKworc3RhdGljIGludCBub3dheW91dCA9 IFdBVENIRE9HX05PV0FZT1VUOworbW9kdWxlX3BhcmFtKG5vd2F5b3V0LCBpbnQsIDApOwor TU9EVUxFX1BBUk1fREVTQyhub3dheW91dCwgIldhdGNoZG9nIGNhbm5vdCBiZSBzdG9wcGVk IG9uY2Ugc3RhcnRlZCAoZGVmYXVsdD1DT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQpIik7CisK Kworc3RhdGljIHZvaWQgX19pb21lbSAqbXZtZTcxMDBfd2R0X3JlZ3M7CisKKy8qIFN0YXJ0 IHRoZSB3YXRjaGRvZyBkcml2ZXIgKi8KKworc3RhdGljIGludCBtdm1lNzEwMF93ZHRfc3Rh cnQodm9pZCkKK3sKKwl1OCBjdHJsX3JlZzsKKwl1MTYgY291bnRfcmVnOworCisJLyogRGlz YWJsZSB3YXRjaGRvZyAqLworCWN0cmxfcmVnID0gcmVhZGIobXZtZTcxMDBfd2R0X3JlZ3Mg KyBXRF9DT05UUk9MX1JFR19PRkZTRVQpOworCWlmIChjdHJsX3JlZyAmIFdEX0VOQUJMRSkK KwkJd3JpdGViKGN0cmxfcmVnICYgfldEX0VOQUJMRSwgbXZtZTcxMDBfd2R0X3JlZ3MgKyBX RF9DT05UUk9MX1JFR19PRkZTRVQpOworCisJLyogTG9hZCBjb3VudGVyICovCisJY291bnRf cmVnID0gd2RfaGVhcnRiZWF0OworCXdyaXRldyhzd2FiMTYoY291bnRfcmVnKSwgbXZtZTcx MDBfd2R0X3JlZ3MgKyBXRF9DT1VOVF9SRUdfT0ZGU0VUKTsKKworCS8qIFN0YXJ0IHRoZSBr ZXJuZWwgdGltZXIgKi8KKwluZXh0X2hlYXJ0YmVhdCA9IGppZmZpZXMgKyAoaGVhcnRiZWF0 ICogSFopOworCW1vZF90aW1lcigmbXZtZTcxMDBfd2RfdGltZXIsIGppZmZpZXMgKyBXRFRf SU5URVJWQUwpOyAKKworCS8qIEVuYWJsZSB3YXRjaGRvZyAqLworCWN0cmxfcmVnID0gcmVh ZGIobXZtZTcxMDBfd2R0X3JlZ3MgKyBXRF9DT05UUk9MX1JFR19PRkZTRVQpOworCXdyaXRl YihjdHJsX3JlZyB8IFdEX0VOQUJMRSwgbXZtZTcxMDBfd2R0X3JlZ3MgKyBXRF9DT05UUk9M X1JFR19PRkZTRVQpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKgltdm1lNzEwMF93ZHRf c3RvcDoKKyAqCisgKglTdG9wIHRoZSB3YXRjaGRvZyBkcml2ZXIuCisgKi8KKworc3RhdGlj IGludCBtdm1lNzEwMF93ZHRfc3RvcCh2b2lkKQoreworCXU4IGN0cmxfcmVnOworCisJcHJp bnRrKEtFUk5fSU5GTyAibXZtZTcxMDBfd2R0OiBTdG9wcGluZyB3YXRjaGRvZyB0aW1lclxu Iik7CisJZGVsX3RpbWVyKCZtdm1lNzEwMF93ZF90aW1lcik7CisKKwkvKiBUdXJuIHRoZSB3 YXRjaGRvZyBvZmYgKi8KKwljdHJsX3JlZyA9IHJlYWRiKG12bWU3MTAwX3dkdF9yZWdzICsg V0RfQ09OVFJPTF9SRUdfT0ZGU0VUKTsKKwljdHJsX3JlZyAmPSB+V0RfRU5BQkxFOworCXdy aXRlYihjdHJsX3JlZywgbXZtZTcxMDBfd2R0X3JlZ3MgKyBXRF9DT05UUk9MX1JFR19PRkZT RVQpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKgltdm1lNzEwMF93ZHRfcGluZzoKKyAq CisgKglSZWxvYWQgY291bnRlciB3aXRoIHRoZSB3YXRjaGRvZyBoZWFydGJlYXQuIAorICov CisKK3N0YXRpYyB2b2lkIG12bWU3MTAwX3dkdF9waW5nKHVuc2lnbmVkIGxvbmcgZGF0YSkK K3sKKwlpZih0aW1lX2JlZm9yZShqaWZmaWVzLCBuZXh0X2hlYXJ0YmVhdCkpIHsKKwkJLyog V3JpdGUgdGhlIG1hZ2ljIHZhbHVlICB0byB0aGUgTE9BRCBSZWdpc3RlciAqLworCQl3cml0 ZWIoV0RfTE9BRF9NQUdJQ19WQUxVRSwgbXZtZTcxMDBfd2R0X3JlZ3MgKyBXRF9MT0FEX1JF R19PRkZTRVQpOworCQltb2RfdGltZXIoJm12bWU3MTAwX3dkX3RpbWVyLCBqaWZmaWVzICsg V0RUX0lOVEVSVkFMKTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJIZWFy dGJlYXQgbG9zdCEgV2lsbCBub3QgcGluZyB0aGUgd2F0Y2hkb2cuXG4iKTsKKwl9CisJcmV0 dXJuOworfQorCisKK3N0YXRpYyBpbnQgbXZtZTcxMDBfd2R0X2tlZXBhbGl2ZSh2b2lkKQor eworCS8qIHVzZXJsYW5kIHBpbmcgKi8KKwluZXh0X2hlYXJ0YmVhdCA9IGppZmZpZXMgKyAo aGVhcnRiZWF0ICogSFopOworCXJldHVybiAwOworfQorCisKKy8qCisgKgltdm1lNzEwMF93 ZHRfc2V0X2hlYXJ0YmVhdDoKKyAqCUB0OgkJdGhlIG5ldyBoZWFydGJlYXQgdmFsdWUgdGhh dCBuZWVkcyB0byBiZSBzZXQuCisgKgorICoJU2V0IGEgbmV3IGhlYXJ0YmVhdCB2YWx1ZSBm b3IgdGhlIHdhdGNoZG9nIGRldmljZS4gSWYgdGhlIGhlYXJ0YmVhdCAKKyAqICAgICAgdmFs dWUgaXMgaW5jb3JyZWN0IHdlIGtlZXAgdGhlIG9sZCB2YWx1ZSBhbmQgcmV0dXJuIC1FSU5W QUwuIAorICogICAgICBJZiBzdWNjZXNzZnVsbCB3ZSByZXR1cm4gMC4KKyAqLworc3RhdGlj IGludCBtdm1lNzEwMF93ZHRfc2V0X2hlYXJ0YmVhdChpbnQgdCkKK3sKKwlpZiAoKHQgPCAx KSB8fCAodCA+IDM2MDApKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWhlYXJ0YmVhdCA9IHQ7 CisJLyogaGVhcnRiZWF0IGlzIGluIHNlY29uZHMuIFRoZSB3YXRjaGRvZyByZXNvbHV0aW9u IGhhcyBiZWVuIAorICAgICAgICAgKiBzZXQgdG8gY291bnRkb3duIGV2ZXJ5IDY1NTM2IG1p Y3Jvc2Vjb25kcyAqLworCXdkX2hlYXJ0YmVhdCA9ICgodCAqIDEwMDApID4+IDYpICYgMHhm ZmZmOworCXJldHVybiAwOworfQorCisvKioKKyAqCW12bWU3MTAwX3dkdF93cml0ZToKKyAq CUBmaWxlOiBmaWxlIGhhbmRsZSB0byB0aGUgd2F0Y2hkb2cKKyAqCUBidWY6IGJ1ZmZlciB0 byB3cml0ZSAodW51c2VkIGFzIGRhdGEgZG9lcyBub3QgbWF0dGVyIGhlcmUKKyAqCUBjb3Vu dDogY291bnQgb2YgYnl0ZXMKKyAqCUBwcG9zOiBwb2ludGVyIHRvIHRoZSBwb3NpdGlvbiB0 byB3cml0ZS4gTm8gc2Vla3MgYWxsb3dlZAorICoKKyAqCUEgd3JpdGUgdG8gYSB3YXRjaGRv ZyBkZXZpY2UgaXMgZGVmaW5lZCBhcyBhIGtlZXBhbGl2ZSBzaWduYWwuIEFueQorICoJd3Jp dGUgb2YgZGF0YSB3aWxsIGRvLCBhcyB3ZSB3ZSBkb24ndCBkZWZpbmUgY29udGVudCBtZWFu aW5nLgorICovCisKK3N0YXRpYyBzc2l6ZV90IG12bWU3MTAwX3dkdF93cml0ZShzdHJ1Y3Qg ZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2Zm X3QgKnBwb3MpCit7CisJaWYoY291bnQpIHsKKwkJaWYgKCFub3dheW91dCkgeworCQkJc2l6 ZV90IGk7CisKKwkJCS8qIEluIGNhc2UgaXQgd2FzIHNldCBsb25nIGFnbyAqLworCQkJbXZt ZTcxMDBfZXhwZWN0X2Nsb3NlID0gMDsKKworCQkJZm9yIChpID0gMDsgaSAhPSBjb3VudDsg aSsrKSB7CisJCQkJY2hhciBjOworCQkJCWlmIChnZXRfdXNlcihjLCBidWYgKyBpKSkKKwkJ CQkJcmV0dXJuIC1FRkFVTFQ7CisJCQkJaWYgKGMgPT0gJ1YnKQorCQkJCQltdm1lNzEwMF9l eHBlY3RfY2xvc2UgPSA0MjsKKwkJCX0KKwkJfQorCQltdm1lNzEwMF93ZHRfa2VlcGFsaXZl KCk7CisJfQorCXJldHVybiBjb3VudDsKK30KKworLyoqCisgKgltdm1lNzEwMF93ZHRfaW9j dGw6CisgKglAaW5vZGU6IGlub2RlIG9mIHRoZSBkZXZpY2UKKyAqCUBmaWxlOiBmaWxlIGhh bmRsZSB0byB0aGUgZGV2aWNlCisgKglAY21kOiB3YXRjaGRvZyBjb21tYW5kCisgKglAYXJn OiBhcmd1bWVudCBwb2ludGVyCisgKgorICoJVGhlIHdhdGNoZG9nIEFQSSBkZWZpbmVzIGEg Y29tbW9uIHNldCBvZiBmdW5jdGlvbnMgZm9yIGFsbCB3YXRjaGRvZ3MKKyAqCWFjY29yZGlu ZyB0byB0aGVpciBhdmFpbGFibGUgZmVhdHVyZXMuIFdlIG9ubHkgYWN0dWFsbHkgdXNlZnVs bHkgc3VwcG9ydAorICoJcXVlcnlpbmcgY2FwYWJpbGl0aWVzIGFuZCBjdXJyZW50IHN0YXR1 cy4KKyAqLworCitzdGF0aWMgaW50IG12bWU3MTAwX3dkdF9pb2N0bChzdHJ1Y3QgaW5vZGUg Kmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgCisJCSAgICAgICAgICAgICAgdW5zaWduZWQg aW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJdm9pZCBfX3VzZXIgKmFyZ3AgPSAo dm9pZCBfX3VzZXIgKilhcmc7CisJaW50IF9fdXNlciAqcCA9IGFyZ3A7CisJaW50IG5ld19o ZWFydGJlYXQ7CisJaW50IG9wdGlvbnM7CisKKwlzdGF0aWMgc3RydWN0IHdhdGNoZG9nX2lu Zm8gaWRlbnQgPSB7CisJCS5vcHRpb25zID0JCVdESU9GX1NFVFRJTUVPVVQgfAorCQkJCQlX RElPRl9NQUdJQ0NMT1NFIHwKKwkJCQkJV0RJT0ZfS0VFUEFMSVZFUElORywKKwkJLmZpcm13 YXJlX3ZlcnNpb24gPQkxLAorCQkuaWRlbnRpdHkgPQkJIk1WTUU3MTAwX1dEVCIsCisJfTsK KworCXN3aXRjaChjbWQpCisJeworCQljYXNlIFdESU9DX0dFVFNVUFBPUlQ6CisJCQlyZXR1 cm4gY29weV90b191c2VyKGFyZ3AsICZpZGVudCwgc2l6ZW9mKGlkZW50KSk/LUVGQVVMVDow OworCisJCWNhc2UgV0RJT0NfR0VUU1RBVFVTOgorCQljYXNlIFdESU9DX0dFVEJPT1RTVEFU VVM6CisJCQlyZXR1cm4gcHV0X3VzZXIoMCwgcCk7CisJCWNhc2UgV0RJT0NfS0VFUEFMSVZF OgorCQkJbXZtZTcxMDBfd2R0X2tlZXBhbGl2ZSgpOworCQkJcmV0dXJuIDA7CisJCWNhc2Ug V0RJT0NfU0VUVElNRU9VVDoKKwkJCWlmIChnZXRfdXNlcihuZXdfaGVhcnRiZWF0LCBwKSkK KwkJCQlyZXR1cm4gLUVGQVVMVDsKKworCQkJaWYgKG12bWU3MTAwX3dkdF9zZXRfaGVhcnRi ZWF0KG5ld19oZWFydGJlYXQpKQorCQkJCXJldHVybiAtRUlOVkFMOworCisJCQltdm1lNzEw MF93ZHRfa2VlcGFsaXZlKCk7CisJCQkvKiBGYWxsICovCisJCWNhc2UgV0RJT0NfR0VUVElN RU9VVDoKKwkJCXJldHVybiBwdXRfdXNlcihoZWFydGJlYXQsIHApOworCQljYXNlIFdESU9D X1NFVE9QVElPTlM6CisJCQlpZiAoZ2V0X3VzZXIob3B0aW9ucywgcCkpCisJCQkJcmV0dXJu IC1FRkFVTFQ7CisJCQlpZiAob3B0aW9ucyAmIFdESU9TX0RJU0FCTEVDQVJEKSB7CisJCQkJ bXZtZTcxMDBfd2R0X3N0b3AoKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKworCQkJaWYgKG9w dGlvbnMgJiBXRElPU19FTkFCTEVDQVJEKSB7CisJCQkJbXZtZTcxMDBfd2R0X3N0YXJ0KCk7 CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVy biAtRU5PVFRZOworCisJfQorCXJldHVybiAwOworfQorCisvKgorICoJbXZtZTcxMDBfd2R0 X29wZW46CisgKglAaW5vZGU6IGlub2RlIG9mIGRldmljZQorICoJQGZpbGU6IGZpbGUgaGFu ZGxlIHRvIGRldmljZQorICoKKyAqLworCitzdGF0aWMgaW50IG12bWU3MTAwX3dkdF9vcGVu KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWlmKHRlc3Rf YW5kX3NldF9iaXQoMCwgJm12bWU3MTAwX3dkdF9pc19vcGVuKSkKKwkJcmV0dXJuIC1FQlVT WTsKKworCS8qIEFjdGl2YXRlICovCisJcHJpbnRrKEtFUk5fSU5GTyAibXZtZTcxMDBfd2R0 OiBTdGFydGluZyB3YXRjaGRvZyB0aW1lclxuIik7CisJbXZtZTcxMDBfd2R0X3N0YXJ0KCk7 CisKKwlyZXR1cm4gbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlsZSk7Cit9CisKKy8qCisg Kgltdm1lNzEwMF93ZHRfcmVsZWFzZToKKyAqCUBpbm9kZTogaW5vZGUgdG8gYm9hcmQKKyAq CUBmaWxlOiBmaWxlIGhhbmRsZSB0byBib2FyZAorICoKKyAqCVRoZSB3YXRjaGRvZyBoYXMg YSBjb25maWd1cmFibGUgQVBJLiBUaGVyZSBpcyBhIHJlbGlnaW91cyBkaXNwdXRlCisgKgli ZXR3ZWVuIHBlb3BsZSB3aG8gd2FudCB0aGVpciB3YXRjaGRvZyB0byBiZSBhYmxlIHRvIHNo dXQgZG93biBhbmQKKyAqCXRob3NlIHdobyB3YW50IHRvIGJlIHN1cmUgaWYgdGhlIHdhdGNo ZG9nIG1hbmFnZXIgZGllcyB0aGUgbWFjaGluZQorICoJcmVib290cy4gSW4gdGhlIGZvcm1l ciBjYXNlIHdlIGRpc2FibGUgdGhlIHdhdGNoZG9nIHRpbWVyLCBpbiB0aGUgCisgKiAgICAg IGxhdHRlciBjYXNlIHlvdSBoYXZlIHRvIG9wZW4gaXQgYWdhaW4gdmVyeSBzb29uLgorICov CisKK3N0YXRpYyBpbnQgbXZtZTcxMDBfd2R0X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9k ZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJaWYgKG12bWU3MTAwX2V4cGVjdF9jbG9zZSA9 PSA0MikgeworCQltdm1lNzEwMF93ZHRfc3RvcCgpOworCX0gZWxzZSB7CisJCXByaW50ayhL RVJOX0NSSVQgIm12bWU3MTAwX3dkdDogIHdhdGNoZG9nIGRldmljZSBjbG9zZWQgdW5leHBl Y3RlZGx5IC0gd2F0Y2hkb2cgd2lsbCBub3Qgc3RvcCFcbiIpOworCQltdm1lNzEwMF93ZHRf a2VlcGFsaXZlKCk7CisJfQorCW12bWU3MTAwX2V4cGVjdF9jbG9zZSA9IDA7CisJY2xlYXJf Yml0KDAsICZtdm1lNzEwMF93ZHRfaXNfb3Blbik7CisJcmV0dXJuIDA7Cit9CisKKy8qKgor ICoJbm90aWZ5X3N5czoKKyAqCUB0aGlzOiBvdXIgbm90aWZpZXIgYmxvY2sKKyAqCUBjb2Rl OiB0aGUgZXZlbnQgYmVpbmcgcmVwb3J0ZWQKKyAqCUB1bnVzZWQ6IHVudXNlZAorICoKKyAq CU91ciBub3RpZmllciBpcyBjYWxsZWQgb24gc3lzdGVtIHNodXRkb3ducy4gV2Ugd2FudCB0 byB0dXJuIHRoZSAKKyAqICAgICAgd2F0Y2hkb2cgb2ZmIGF0IHJlYm9vdC4KKyAqLworCitz dGF0aWMgaW50IG12bWU3MTAwX3dkdF9ub3RpZnlfc3lzKHN0cnVjdCBub3RpZmllcl9ibG9j ayAqdGhpcywgdW5zaWduZWQgbG9uZyBjb2RlLAorCXZvaWQgKnVudXNlZCkKK3sKKwlpZihj b2RlPT1TWVNfRE9XTiB8fCBjb2RlPT1TWVNfSEFMVCkgeworCQkvKiBUdXJuIHRoZSBjYXJk IG9mZiAqLworCQltdm1lNzEwMF93ZHRfc3RvcCgpOworCX0KKwlyZXR1cm4gTk9USUZZX0RP TkU7Cit9CisKKy8qCisgKglLZXJuZWwgSW50ZXJmYWNlcworICovCisKKworc3RhdGljIGNv bnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbXZtZTcxMDBfd2R0X2ZvcHMgPSB7CisJLm93 bmVyCQk9IFRISVNfTU9EVUxFLAorCS5sbHNlZWsJCT0gbm9fbGxzZWVrLAorCS53cml0ZQkJ PSBtdm1lNzEwMF93ZHRfd3JpdGUsCisJLmlvY3RsCQk9IG12bWU3MTAwX3dkdF9pb2N0bCwK Kwkub3BlbgkJPSBtdm1lNzEwMF93ZHRfb3BlbiwKKwkucmVsZWFzZQk9IG12bWU3MTAwX3dk dF9yZWxlYXNlLAorfTsKKworc3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIG12bWU3MTAwX3dk dF9taXNjZGV2ID0geworCS5taW5vcgk9IFdBVENIRE9HX01JTk9SLAorCS5uYW1lCT0gIndh dGNoZG9nIiwKKwkuZm9wcwk9ICZtdm1lNzEwMF93ZHRfZm9wcywKK307CisKKy8qCisgKglU aGUgd2F0Y2hkb2cgdGltZXIgbmVlZHMgdG8gYmUgc3RvcHBlZCBvbiByZWJvb3RzL3NodXRk b3ducyAKKyAqLworCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIG12bWU3MTAwX3dk dF9ub3RpZmllciA9IHsKKwkubm90aWZpZXJfY2FsbCA9IG12bWU3MTAwX3dkdF9ub3RpZnlf c3lzLAorfTsKKworLyoKKyAqCWNsZWFudXBfbW9kdWxlOgorICoKKyAqCVVubG9hZCB0aGUg d2F0Y2hkb2cuIFlvdSBjYW5ub3QgZG8gdGhpcyB3aXRoIGFueSBmaWxlIGhhbmRsZXMgb3Bl bi4KKyAqCUlmIHlvdXIgd2F0Y2hkb2cgaXMgc2V0IHRvIGNvbnRpbnVlIHRpY2tpbmcgb24g Y2xvc2UgYW5kIHlvdSB1bmxvYWQKKyAqCWl0LCB3ZWxsIGl0IGtlZXBzIHRpY2tpbmcuICBZ b3UganVzdCBoYXZlIHRvIGxvYWQgYSBuZXcKKyAqCW1vZHVsZSBpbiA2MCBzZWNvbmRzIG9y IHJlYm9vdC4KKyAqLworCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgbXZtZTcxMDBfd2R0X2V4 aXQodm9pZCkKK3sKKwlpZiAoIW5vd2F5b3V0KSAKKwkJbXZtZTcxMDBfd2R0X3N0b3AoKTsK Kwlpb3VubWFwKG12bWU3MTAwX3dkdF9yZWdzKTsJCisJbWlzY19kZXJlZ2lzdGVyKCZtdm1l NzEwMF93ZHRfbWlzY2Rldik7CisJdW5yZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJm12bWU3 MTAwX3dkdF9ub3RpZmllcik7Cit9CisKKy8qCisgKiAJbXZtZTcxMDBfd2R0X2luaXQ6Cisg KgorICoJU2V0IHVwIHRoZSBNVk1FNzEwMCB3YXRjaGRvZy4gCisgKglUaGUgb3BlbigpIGZ1 bmN0aW9uIHdpbGwgYWN0dWFsbHkga2ljayB0aGUgd2F0Y2hkb2cuCisgKi8KKworc3RhdGlj IGludCBfX2RldmluaXQgbXZtZTcxMDBfd2R0X2luaXQodm9pZCkKK3sKKwlpbnQgcmV0ID0g MDsKKworCS8qIENoZWNrIHRoYXQgdGhlIGhlYXJ0YmVhdCB2YWx1ZSBpcyB3aXRoaW4gaXQn cyByYW5nZSA7IGlmIG5vdCByZXNldCB0byB0aGUgZGVmYXVsdCAqLworCWlmIChtdm1lNzEw MF93ZHRfc2V0X2hlYXJ0YmVhdChoZWFydGJlYXQpKSB7CisJCW12bWU3MTAwX3dkdF9zZXRf aGVhcnRiZWF0KFdEX1RJTTApOworCQlwcmludGsoS0VSTl9JTkZPICJ3ZHQ6IGhlYXJ0YmVh dCB2YWx1ZSBtdXN0IGJlIDA8aGVhcnRiZWF0PDM2MDAgc2VjcywgdXNpbmcgJWQgc2Vjc1xu IiwKKwkJCVdEX1RJTTApOworCX0KKworCW12bWU3MTAwX3dkdF9yZWdzID0gaW9yZW1hcChN Vk1FNzEwMF9XQVRDSERPR19USU1FUl9MT0FEX1JFRywgOCk7CisJaWYgKG12bWU3MTAwX3dk dF9yZWdzID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtdm1lNzEwMF93ZHQ6IGlv cmVtYXAoKSBmYWlsZWRcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9 CisKKwl3cml0ZWIoV0RfQ09VTlRFUl9SRVNfNjU1MzZfTUlDUk9TRUMsIG12bWU3MTAwX3dk dF9yZWdzICsgV0RfUkVTT0xVVElPTl9SRUdfT0ZGU0VUKTsKKworCWluaXRfdGltZXIoJm12 bWU3MTAwX3dkX3RpbWVyKTsKKwltdm1lNzEwMF93ZF90aW1lci5mdW5jdGlvbiA9IG12bWU3 MTAwX3dkdF9waW5nOworCW12bWU3MTAwX3dkX3RpbWVyLmRhdGEgPSAwOworCisJcmV0ID0g cmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZtdm1lNzEwMF93ZHRfbm90aWZpZXIpOworCWlm KHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgIm12bWU3MTAwX3dkdDogY2Fubm90IHJlZ2lz dGVyIHJlYm9vdCBub3RpZmllciAoZXJyPSVkKVxuIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJ fQorCisJcmV0ID0gbWlzY19yZWdpc3RlcigmbXZtZTcxMDBfd2R0X21pc2NkZXYpOworCWlm IChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtdm1lNzEwMF93ZHQ6IGNhbm5vdCByZWdp c3RlciBtaXNjZGV2IG9uIG1pbm9yPSVkIChlcnI9JWQpXG4iLAorCQkJV0FUQ0hET0dfTUlO T1IsIHJldCk7CisJCWdvdG8gb3V0bWlzYzsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJt dm1lNzEwMCB3YXRjaGRvZyBkcml2ZXIgdmVyIDEuMDogKGhlYXJ0YmVhdD0lZCBzZWMsIG5v d2F5b3V0PSVkKVxuIiwKKwkJaGVhcnRiZWF0LCBub3dheW91dCk7CitvdXQ6CisJcmV0dXJu IHJldDsKKworb3V0bWlzYzoKKwl1bnJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmbXZtZTcx MDBfd2R0X25vdGlmaWVyKTsKKwlnb3RvIG91dDsKK30KKworbW9kdWxlX2luaXQobXZtZTcx MDBfd2R0X2luaXQpOworbW9kdWxlX2V4aXQobXZtZTcxMDBfd2R0X2V4aXQpOworCitNT0RV TEVfQVVUSE9SKCJBaml0IFByZW0iKTsKK01PRFVMRV9ERVNDUklQVElPTigiV2F0Y2hkb2cg RHJpdmVyIGZvciB0aGUgTVZNRTcxMDAgd2F0Y2hkb2ciKTsKK01PRFVMRV9BTElBU19NSVND REVWKFdBVENIRE9HX01JTk9SKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtdSAt LW5ldy1maWxlIC0tcmVjdXJzaXZlIGxpbnV4LTIuNi4yOS42Lm9yaWcvZnMvS2NvbmZpZyBs aW51eC0yLjYuMjkuNi5tb2QvZnMvS2NvbmZpZwotLS0gbGludXgtMi42LjI5LjYub3JpZy9m cy9LY29uZmlnCTIwMDktMDctMDIgMTY6NDE6MjAuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51 eC0yLjYuMjkuNi5tb2QvZnMvS2NvbmZpZwkyMDA5LTA3LTIxIDExOjI4OjE4LjAwMDAwMDAw MCAtMDcwMApAQCAtMjEwLDYgKzIxMCw3IEBACiBzb3VyY2UgImZzL2Jmcy9LY29uZmlnIgog c291cmNlICJmcy9lZnMvS2NvbmZpZyIKIHNvdXJjZSAiZnMvamZmczIvS2NvbmZpZyIKK3Nv dXJjZSAiZnMveWFmZnMyL0tjb25maWciCiAjIFVCSUZTIEZpbGUgc3lzdGVtIGNvbmZpZ3Vy YXRpb24KIHNvdXJjZSAiZnMvdWJpZnMvS2NvbmZpZyIKIHNvdXJjZSAiZnMvY3JhbWZzL0tj b25maWciCmRpZmYgLXUgLS1uZXctZmlsZSAtLXJlY3Vyc2l2ZSBsaW51eC0yLjYuMjkuNi5v cmlnL2ZzL01ha2VmaWxlIGxpbnV4LTIuNi4yOS42Lm1vZC9mcy9NYWtlZmlsZQotLS0gbGlu dXgtMi42LjI5LjYub3JpZy9mcy9NYWtlZmlsZQkyMDA5LTA3LTAyIDE2OjQxOjIwLjAwMDAw MDAwMCAtMDcwMAorKysgbGludXgtMi42LjI5LjYubW9kL2ZzL01ha2VmaWxlCTIwMDktMDct MjEgMTE6Mjg6MTguMDAwMDAwMDAwIC0wNzAwCkBAIC0xMjQsMyArMTI0LDQgQEAKIG9iai0k KENPTkZJR19PQ0ZTMl9GUykJCSs9IG9jZnMyLwogb2JqLSQoQ09ORklHX0JUUkZTX0ZTKQkJ Kz0gYnRyZnMvCiBvYmotJChDT05GSUdfR0ZTMl9GUykgICAgICAgICAgICs9IGdmczIvCitv YmotJChDT05GSUdfWUFGRlNfRlMpICAgICAgICAgICs9IHlhZmZzMi8KZGlmZiAtdSAtLW5l dy1maWxlIC0tcmVjdXJzaXZlIGxpbnV4LTIuNi4yOS42Lm9yaWcvZnMveWFmZnMyL2RldmV4 dHJhcy5oIGxpbnV4LTIuNi4yOS42Lm1vZC9mcy95YWZmczIvZGV2ZXh0cmFzLmgKLS0tIGxp bnV4LTIuNi4yOS42Lm9yaWcvZnMveWFmZnMyL2RldmV4dHJhcy5oCTE5NjktMTItMzEgMTc6 MDA6MDAuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYuMjkuNi5tb2QvZnMveWFmZnMy L2RldmV4dHJhcy5oCTIwMDktMDctMjEgMTE6Mjg6MTguMDAwMDAwMDAwIC0wNzAwCkBAIC0w LDAgKzEsMTk2IEBACisvKgorICogWUFGRlM6IFlldCBhbm90aGVyIEZsYXNoIEZpbGUgU3lz dGVtIC4gQSBOQU5ELWZsYXNoIHNwZWNpZmljIGZpbGUgc3lzdGVtLgorICoKKyAqIENvcHly aWdodCAoQykgMjAwMi0yMDA3IEFsZXBoIE9uZSBMdGQuCisgKiAgIGZvciBUb2J5IENodXJj aGlsbCBMdGQgYW5kIEJyaWdodHN0YXIgRW5naW5lZXJpbmcKKyAqCisgKiBDcmVhdGVkIGJ5 IENoYXJsZXMgTWFubmluZyA8Y2hhcmxlc0BhbGVwaDEuY28udWs+CisgKgorICogVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v ciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBOb3RlOiBPbmx5IFlBRkZTIGhl YWRlcnMgYXJlIExHUEwsIFlBRkZTIEMgY29kZSBpcyBjb3ZlcmVkIGJ5IEdQTC4KKyAqLwor CisvKgorICogVGhpcyBmaWxlIGlzIGp1c3QgaG9sZHMgZXh0cmEgZGVjbGFyYXRpb25zIG9m IG1hY3JvcyB0aGF0IHdvdWxkIG5vcm1hbGx5CisgKiBiZSBwcm92aWRlc2QgaW4gdGhlIExp bnV4IGtlcm5lbC4gVGhlc2UgbWFjcm9zIGhhdmUgYmVlbiB3cml0dGVuIGZyb20KKyAqIHNj cmF0Y2ggYnV0IGFyZSBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCB0byB0aGUgTGludXggb25l cy4KKyAqCisgKi8KKworI2lmbmRlZiBfX0VYVFJBU19IX18KKyNkZWZpbmUgX19FWFRSQVNf SF9fCisKKworI2lmICEoZGVmaW5lZCBfX0tFUk5FTF9fKQorCisvKiBEZWZpbml0aW9uIG9m IHR5cGVzICovCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191ODsKK3R5cGVkZWYgdW5zaWdu ZWQgc2hvcnQgX191MTY7Cit0eXBlZGVmIHVuc2lnbmVkIF9fdTMyOworCisjZW5kaWYKKwor LyoKKyAqIFRoaXMgaXMgYSBzaW1wbGUgZG91Ymx5IGxpbmtlZCBsaXN0IGltcGxlbWVudGF0 aW9uIHRoYXQgbWF0Y2hlcyB0aGUKKyAqIHdheSB0aGUgTGludXgga2VybmVsIGRvdWJseSBs aW5rZWQgbGlzdCBpbXBsZW1lbnRhdGlvbiB3b3Jrcy4KKyAqLworCitzdHJ1Y3QgeWxpc3Rf aGVhZCB7CisJc3RydWN0IHlsaXN0X2hlYWQgKm5leHQ7IC8qIG5leHQgaW4gY2hhaW4gKi8K KwlzdHJ1Y3QgeWxpc3RfaGVhZCAqcHJldjsgLyogcHJldmlvdXMgaW4gY2hhaW4gKi8KK307 CisKKworLyogSW5pdGlhbGlzZSBhIHN0YXRpYyBsaXN0ICovCisjZGVmaW5lIFlMSVNUX0hF QUQobmFtZSkgXAorc3RydWN0IHlsaXN0X2hlYWQgbmFtZSA9IHsgJihuYW1lKSwgJihuYW1l KX0KKworCisKKy8qIEluaXRpYWxpc2UgYSBsaXN0IGhlYWQgdG8gYW4gZW1wdHkgbGlzdCAq LworI2RlZmluZSBZSU5JVF9MSVNUX0hFQUQocCkgXAorZG8geyBcCisJKHApLT5uZXh0ID0g KHApO1wKKwkocCktPnByZXYgPSAocCk7IFwKK30gd2hpbGUgKDApCisKKworLyogQWRkIGFu IGVsZW1lbnQgdG8gYSBsaXN0ICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHlsaXN0X2Fk ZChzdHJ1Y3QgeWxpc3RfaGVhZCAqbmV3RW50cnksCisJCQkJc3RydWN0IHlsaXN0X2hlYWQg Kmxpc3QpCit7CisJc3RydWN0IHlsaXN0X2hlYWQgKmxpc3ROZXh0ID0gbGlzdC0+bmV4dDsK KworCWxpc3QtPm5leHQgPSBuZXdFbnRyeTsKKwluZXdFbnRyeS0+cHJldiA9IGxpc3Q7CisJ bmV3RW50cnktPm5leHQgPSBsaXN0TmV4dDsKKwlsaXN0TmV4dC0+cHJldiA9IG5ld0VudHJ5 OworCit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgeWxpc3RfYWRkX3RhaWwoc3RydWN0 IHlsaXN0X2hlYWQgKm5ld0VudHJ5LAorCQkJCSBzdHJ1Y3QgeWxpc3RfaGVhZCAqbGlzdCkK K3sKKwlzdHJ1Y3QgeWxpc3RfaGVhZCAqbGlzdFByZXYgPSBsaXN0LT5wcmV2OworCisJbGlz dC0+cHJldiA9IG5ld0VudHJ5OworCW5ld0VudHJ5LT5uZXh0ID0gbGlzdDsKKwluZXdFbnRy eS0+cHJldiA9IGxpc3RQcmV2OworCWxpc3RQcmV2LT5uZXh0ID0gbmV3RW50cnk7CisKK30K KworCisvKiBUYWtlIGFuIGVsZW1lbnQgb3V0IG9mIGl0cyBjdXJyZW50IGxpc3QsIHdpdGgg b3Igd2l0aG91dAorICogcmVpbml0aWFsaXNpbmcgdGhlIGxpbmtzLm9mIHRoZSBlbnRyeSov CitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHlsaXN0X2RlbChzdHJ1Y3QgeWxpc3RfaGVhZCAq ZW50cnkpCit7CisJc3RydWN0IHlsaXN0X2hlYWQgKmxpc3ROZXh0ID0gZW50cnktPm5leHQ7 CisJc3RydWN0IHlsaXN0X2hlYWQgKmxpc3RQcmV2ID0gZW50cnktPnByZXY7CisKKwlsaXN0 TmV4dC0+cHJldiA9IGxpc3RQcmV2OworCWxpc3RQcmV2LT5uZXh0ID0gbGlzdE5leHQ7CisK K30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCB5bGlzdF9kZWxfaW5pdChzdHJ1Y3QgeWxp c3RfaGVhZCAqZW50cnkpCit7CisJeWxpc3RfZGVsKGVudHJ5KTsKKwllbnRyeS0+bmV4dCA9 IGVudHJ5LT5wcmV2ID0gZW50cnk7Cit9CisKKworLyogVGVzdCBpZiB0aGUgbGlzdCBpcyBl bXB0eSAqLworc3RhdGljIF9faW5saW5lX18gaW50IHlsaXN0X2VtcHR5KHN0cnVjdCB5bGlz dF9oZWFkICplbnRyeSkKK3sKKwlyZXR1cm4gKGVudHJ5LT5uZXh0ID09IGVudHJ5KTsKK30K KworCisvKiB5bGlzdF9lbnRyeSB0YWtlcyBhIHBvaW50ZXIgdG8gYSBsaXN0IGVudHJ5IGFu ZCBvZmZzZXRzIGl0IHRvIHRoYXQKKyAqIHdlIGNhbiBmaW5kIGEgcG9pbnRlciB0byB0aGUg b2JqZWN0IGl0IGlzIGVtYmVkZGVkIGluLgorICovCisKKworI2RlZmluZSB5bGlzdF9lbnRy eShlbnRyeSwgdHlwZSwgbWVtYmVyKSBcCisJKCh0eXBlICopKChjaGFyICopKGVudHJ5KS0o dW5zaWduZWQgbG9uZykoJigodHlwZSAqKU5VTEwpLT5tZW1iZXIpKSkKKworCisvKiB5bGlz dF9mb3JfZWFjaCBhbmQgbGlzdF9mb3JfZWFjaF9zYWZlICBpdGVyYXRlIG92ZXIgbGlzdHMu CisgKiB5bGlzdF9mb3JfZWFjaF9zYWZlIHVzZXMgdGVtcG9yYXJ5IHN0b3JhZ2UgdG8gbWFr ZSB0aGUgbGlzdCBkZWxldGUgc2FmZQorICovCisKKyNkZWZpbmUgeWxpc3RfZm9yX2VhY2go aXRlcnZhciwgbGlzdCkgXAorCWZvciAoaXRlcnZhciA9IChsaXN0KS0+bmV4dDsgaXRlcnZh ciAhPSAobGlzdCk7IGl0ZXJ2YXIgPSBpdGVydmFyLT5uZXh0KQorCisjZGVmaW5lIHlsaXN0 X2Zvcl9lYWNoX3NhZmUoaXRlcnZhciwgc2F2ZVZhciwgbGlzdCkgXAorCWZvciAoaXRlcnZh ciA9IChsaXN0KS0+bmV4dCwgc2F2ZVZhciA9IChsaXN0KS0+bmV4dC0+bmV4dDsgXAorCQlp dGVydmFyICE9IChsaXN0KTsgaXRlcnZhciA9IHNhdmVWYXIsIHNhdmVWYXIgPSBzYXZlVmFy LT5uZXh0KQorCisKKyNpZiAhKGRlZmluZWQgX19LRVJORUxfXykKKworCisjaWZuZGVmIFdJ TjMyCisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNlbmRpZgorCisKKyNpZmRlZiBDT05GSUdf WUFGRlNfUFJPVklERV9ERUZTCisvKiBGaWxlIHR5cGVzICovCisKKworI2RlZmluZSBEVF9V TktOT1dOCTAKKyNkZWZpbmUgRFRfRklGTwkJMQorI2RlZmluZSBEVF9DSFIJCTIKKyNkZWZp bmUgRFRfRElSCQk0CisjZGVmaW5lIERUX0JMSwkJNgorI2RlZmluZSBEVF9SRUcJCTgKKyNk ZWZpbmUgRFRfTE5LCQkxMAorI2RlZmluZSBEVF9TT0NLCQkxMgorI2RlZmluZSBEVF9XSFQJ CTE0CisKKworI2lmbmRlZiBXSU4zMgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjZW5kaWYK KworLyoKKyAqIEF0dHJpYnV0ZSBmbGFncy4gIFRoZXNlIHNob3VsZCBiZSBvci1lZCB0b2dl dGhlciB0byBmaWd1cmUgb3V0IHdoYXQKKyAqIGhhcyBiZWVuIGNoYW5nZWQhCisgKi8KKyNk ZWZpbmUgQVRUUl9NT0RFCTEKKyNkZWZpbmUgQVRUUl9VSUQJMgorI2RlZmluZSBBVFRSX0dJ RAk0CisjZGVmaW5lIEFUVFJfU0laRQk4CisjZGVmaW5lIEFUVFJfQVRJTUUJMTYKKyNkZWZp bmUgQVRUUl9NVElNRQkzMgorI2RlZmluZSBBVFRSX0NUSU1FCTY0CisKK3N0cnVjdCBpYXR0 ciB7CisJdW5zaWduZWQgaW50IGlhX3ZhbGlkOworCXVuc2lnbmVkIGlhX21vZGU7CisJdW5z aWduZWQgaWFfdWlkOworCXVuc2lnbmVkIGlhX2dpZDsKKwl1bnNpZ25lZCBpYV9zaXplOwor CXVuc2lnbmVkIGlhX2F0aW1lOworCXVuc2lnbmVkIGlhX210aW1lOworCXVuc2lnbmVkIGlh X2N0aW1lOworCXVuc2lnbmVkIGludCBpYV9hdHRyX2ZsYWdzOworfTsKKworI2VuZGlmCisK KyNlbHNlCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Zz Lmg+CisjaW5jbHVkZSA8bGludXgvc3RhdC5oPgorCisjZW5kaWYKKworCisjZW5kaWYKZGlm ZiAtdSAtLW5ldy1maWxlIC0tcmVjdXJzaXZlIGxpbnV4LTIuNi4yOS42Lm9yaWcvZnMveWFm ZnMyL0tjb25maWcgbGludXgtMi42LjI5LjYubW9kL2ZzL3lhZmZzMi9LY29uZmlnCi0tLSBs aW51eC0yLjYuMjkuNi5vcmlnL2ZzL3lhZmZzMi9LY29uZmlnCTE5NjktMTItMzEgMTc6MDA6 MDAuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYuMjkuNi5tb2QvZnMveWFmZnMyL0tj b25maWcJMjAwOS0wNy0yMSAxMToyODoxOC4wMDAwMDAwMDAgLTA3MDAKQEAgLTAsMCArMSwx NTYgQEAKKyMKKyMgWUFGRlMgZmlsZSBzeXN0ZW0gY29uZmlndXJhdGlvbnMKKyMKKworY29u ZmlnIFlBRkZTX0ZTCisJdHJpc3RhdGUgIllBRkZTMiBmaWxlIHN5c3RlbSBzdXBwb3J0Igor CWRlZmF1bHQgbgorCWRlcGVuZHMgb24gTVREX0JMT0NLCisJc2VsZWN0IFlBRkZTX1lBRkZT MQorCXNlbGVjdCBZQUZGU19ZQUZGUzIKKwloZWxwCisJICBZQUZGUzIsIG9yIFlldCBBbm90 aGVyIEZsYXNoIEZpbGluZyBTeXN0ZW0sIGlzIGEgZmlsaW5nIHN5c3RlbQorCSAgb3B0aW1p c2VkIGZvciBOQU5EIEZsYXNoIGNoaXBzLgorCisJICBUbyBjb21waWxlIHRoZSBZQUZGUzIg ZmlsZSBzeXN0ZW0gc3VwcG9ydCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0KKwkgIGhlcmU6IHRo ZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgeWFmZnMyLgorCisJICBJZiB1bnN1cmUsIHNheSBO LgorCisJICBGdXJ0aGVyIGluZm9ybWF0aW9uIG9uIFlBRkZTMiBpcyBhdmFpbGFibGUgYXQK KwkgIDxodHRwOi8vd3d3LmFsZXBoMS5jby51ay95YWZmcy8+LgorCitjb25maWcgWUFGRlNf WUFGRlMxCisJYm9vbCAiNTEyIGJ5dGUgLyBwYWdlIGRldmljZXMiCisJZGVwZW5kcyBvbiBZ QUZGU19GUworCWRlZmF1bHQgeQorCWhlbHAKKwkgIEVuYWJsZSBZQUZGUzEgc3VwcG9ydCAt LSB5YWZmcyBmb3IgNTEyIGJ5dGUgLyBwYWdlIGRldmljZXMKKworCSAgTm90IG5lZWRlZCBm b3IgMkstcGFnZSBkZXZpY2VzLgorCisJICBJZiB1bnN1cmUsIHNheSBZLgorCitjb25maWcg WUFGRlNfOUJZVEVfVEFHUworCWJvb2wgIlVzZSBvbGRlci1zdHlsZSBvbi1OQU5EIGRhdGEg Zm9ybWF0IHdpdGggcGFnZVN0YXR1cyBieXRlIgorCWRlcGVuZHMgb24gWUFGRlNfWUFGRlMx CisJZGVmYXVsdCBuCisJaGVscAorCisJICBPbGRlci1zdHlsZSBvbi1OQU5EIGRhdGEgZm9y bWF0IGhhcyBhICJwYWdlU3RhdHVzIiBieXRlIHRvIHJlY29yZAorCSAgY2h1bmsvcGFnZSBz dGF0ZS4gIFRoaXMgYnl0ZSBpcyB6ZXJvIHdoZW4gdGhlIHBhZ2UgaXMgZGlzY2FyZGVkLgor CSAgQ2hvb3NlIHRoaXMgb3B0aW9uIGlmIHlvdSBoYXZlIGV4aXN0aW5nIG9uLU5BTkQgZGF0 YSB1c2luZyB0aGlzCisJICBmb3JtYXQgdGhhdCB5b3UgbmVlZCB0byBjb250aW51ZSB0byBz dXBwb3J0LiAgTmV3IGRhdGEgd3JpdHRlbgorCSAgYWxzbyB1c2VzIHRoZSBvbGRlci1zdHls ZSBmb3JtYXQuICBOb3RlOiBVc2Ugb2YgdGhpcyBvcHRpb24KKwkgIGdlbmVyYWxseSByZXF1 aXJlcyB0aGF0IE1URCdzIG9vYiBsYXlvdXQgYmUgYWRqdXN0ZWQgdG8gdXNlIHRoZQorCSAg b2xkZXItc3R5bGUgZm9ybWF0LiAgU2VlIG5vdGVzIG9uIHRhZ3MgZm9ybWF0cyBhbmQgTVRE IHZlcnNpb25zCisJICBpbiB5YWZmc19tdGRpZjEuYy4KKworCSAgSWYgdW5zdXJlLCBzYXkg Ti4KKworY29uZmlnIFlBRkZTX0RPRVNfRUNDCisJYm9vbCAiTGV0cyBZYWZmcyBkbyBpdHMg b3duIEVDQyIKKwlkZXBlbmRzIG9uIFlBRkZTX0ZTICYmIFlBRkZTX1lBRkZTMSAmJiAhWUFG RlNfOUJZVEVfVEFHUworCWRlZmF1bHQgbgorCWhlbHAKKwkgIFRoaXMgZW5hYmxlcyBZYWZm cyB0byB1c2UgaXRzIG93biBFQ0MgZnVuY3Rpb25zIGluc3RlYWQgb2YgdXNpbmcKKwkgIHRo ZSBvbmVzIGZyb20gdGhlIGdlbmVyaWMgTVRELU5BTkQgZHJpdmVyLgorCisJICBJZiB1bnN1 cmUsIHNheSBOLgorCitjb25maWcgWUFGRlNfRUNDX1dST05HX09SREVSCisJYm9vbCAiVXNl IHRoZSBzYW1lIGVjYyBieXRlIG9yZGVyIGFzIFN0ZXZlbiBIaWxsJ3MgbmFuZF9lY2MuYyIK KwlkZXBlbmRzIG9uIFlBRkZTX0ZTICYmIFlBRkZTX0RPRVNfRUNDICYmICFZQUZGU185QllU RV9UQUdTCisJZGVmYXVsdCBuCisJaGVscAorCSAgVGhpcyBtYWtlcyB5YWZmc19lY2MuYyB1 c2UgdGhlIHNhbWUgZWNjIGJ5dGUgb3JkZXIgYXMgU3RldmVuCisJICBIaWxsJ3MgbmFuZF9l Y2MuYy4gSWYgbm90IHNldCwgdGhlbiB5b3UgZ2V0IHRoZSBzYW1lIGVjYyBieXRlCisJICBv cmRlciBhcyBTbWFydE1lZGlhLgorCisJICBJZiB1bnN1cmUsIHNheSBOLgorCitjb25maWcg WUFGRlNfWUFGRlMyCisJYm9vbCAiMjA0OCBieXRlIChvciBsYXJnZXIpIC8gcGFnZSBkZXZp Y2VzIgorCWRlcGVuZHMgb24gWUFGRlNfRlMKKwlkZWZhdWx0IHkKKwloZWxwCisJICBFbmFi bGUgWUFGRlMyIHN1cHBvcnQgLS0geWFmZnMgZm9yID49IDJLIGJ5dGVzIHBlciBwYWdlIGRl dmljZXMKKworCSAgSWYgdW5zdXJlLCBzYXkgWS4KKworY29uZmlnIFlBRkZTX0FVVE9fWUFG RlMyCisJYm9vbCAiQXV0b3NlbGVjdCB5YWZmczIgZm9ybWF0IgorCWRlcGVuZHMgb24gWUFG RlNfWUFGRlMyCisJZGVmYXVsdCB5CisJaGVscAorCSAgV2l0aG91dCB0aGlzLCB5b3UgbmVl ZCB0byBleHBsaWNpdGVseSB1c2UgeWFmZnMyIGFzIHRoZSBmaWxlCisJICBzeXN0ZW0gdHlw ZS4gV2l0aCB0aGlzLCB5b3UgY2FuIHNheSAieWFmZnMiIGFuZCB5YWZmcyBvciB5YWZmczIK KwkgIHdpbGwgYmUgdXNlZCBkZXBlbmRpbmcgb24gdGhlIGRldmljZSBwYWdlIHNpemUgKHlh ZmZzIG9uCisJICA1MTItYnl0ZSBwYWdlIGRldmljZXMsIHlhZmZzMiBvbiAySyBwYWdlIGRl dmljZXMpLgorCisJICBJZiB1bnN1cmUsIHNheSBZLgorCitjb25maWcgWUFGRlNfRElTQUJM RV9MQVpZX0xPQUQKKwlib29sICJEaXNhYmxlIGxhenkgbG9hZGluZyIKKwlkZXBlbmRzIG9u IFlBRkZTX1lBRkZTMgorCWRlZmF1bHQgbgorCWhlbHAKKwkgICJMYXp5IGxvYWRpbmciIGRl ZmVycyBsb2FkaW5nIGZpbGUgZGV0YWlscyB1bnRpbCB0aGV5IGFyZQorCSAgcmVxdWlyZWQu IFRoaXMgc2F2ZXMgbW91bnQgdGltZSwgYnV0IG1ha2VzIHRoZSBmaXJzdCBsb29rLXVwCisJ ICBhIGJpdCBsb25nZXIuCisKKwkgIExhenkgbG9hZGluZyB3aWxsIG9ubHkgaGFwcGVuIGlm IGVuYWJsZWQgYnkgdGhpcyBvcHRpb24gYmVpbmcgJ24nCisJICBhbmQgaWYgdGhlIGFwcHJv cHJpYXRlIHRhZ3MgYXJlIGF2YWlsYWJsZSwgZWxzZSB5YWZmczIgd2lsbAorCSAgYXV0b21h dGljYWxseSBmYWxsIGJhY2sgdG8gaW1tZWRpYXRlIGxvYWRpbmcgYW5kIGRvIHRoZSByaWdo dAorCSAgdGhpbmcuCisKKwkgIExhenkgbGFvZGluZyB3aWxsIGJlIHJlcXVpcmVkIGJ5IGNo ZWNrcG9pbnRpbmcuCisKKwkgIFNldHRpbmcgdGhpcyB0byAneScgd2lsbCBkaXNhYmxlIGxh enkgbG9hZGluZy4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KKworCitjb25maWcgWUFGRlNf RElTQUJMRV9XSURFX1ROT0RFUworCWJvb2wgIlR1cm4gb2ZmIHdpZGUgdG5vZGVzIgorCWRl cGVuZHMgb24gWUFGRlNfRlMKKwlkZWZhdWx0IG4KKwloZWxwCisJICBXaWRlIHRub2RlcyBh cmUgb25seSB1c2VkIGZvciBOQU5EIGFycmF5cyA+PTMyTUIgZm9yIDUxMi1ieXRlCisJICBw YWdlIGRldmljZXMgYW5kID49MTI4TUIgZm9yIDJrIHBhZ2UgZGV2aWNlcy4gVGhleSB1c2Ug c2xpZ2h0bHkKKwkgIG1vcmUgUkFNIGJ1dCBhcmUgZmFzdGVyIHNpbmNlIHRoZXkgZWxpbWlu YXRlIGNodW5rIGdyb3VwCisJICBzZWFyY2hpbmcuCisKKwkgIFNldHRpbmcgdGhpcyB0byAn eScgd2lsbCBmb3JjZSB0bm9kZSB3aWR0aCB0byAxNiBiaXRzIGFuZCBzYXZlCisJICBtZW1v cnkgYnV0IG1ha2UgbGFyZ2UgYXJyYXlzIHNsb3dlci4KKworCSAgSWYgdW5zdXJlLCBzYXkg Ti4KKworY29uZmlnIFlBRkZTX0FMV0FZU19DSEVDS19DSFVOS19FUkFTRUQKKwlib29sICJG b3JjZSBjaHVuayBlcmFzZSBjaGVjayIKKwlkZXBlbmRzIG9uIFlBRkZTX0ZTCisJZGVmYXVs dCBuCisJaGVscAorICAgICAgICAgIE5vcm1hbGx5IFlBRkZTIG9ubHkgY2hlY2tzIGNodW5r cyBiZWZvcmUgd3JpdGluZyB1bnRpbCBhbiBlcmFzZWQKKwkgIGNodW5rIGlzIGZvdW5kLiBU aGlzIGhlbHBzIHRvIGRldGVjdCBhbnkgcGFydGlhbGx5IHdyaXR0ZW4KKwkgIGNodW5rcyB0 aGF0IG1pZ2h0IGhhdmUgaGFwcGVuZWQgZHVlIHRvIHBvd2VyIGxvc3MuCisKKwkgIEVuYWJs aW5nIHRoaXMgZm9yY2VzIG9uIHRoZSB0ZXN0IHRoYXQgY2h1bmtzIGFyZSBlcmFzZWQgaW4g Zmxhc2gKKwkgIGJlZm9yZSB3cml0aW5nIHRvIHRoZW0uIFRoaXMgdGFrZXMgbW9yZSB0aW1l IGJ1dCBpcyBwb3RlbnRpYWxseQorCSAgYSBiaXQgbW9yZSBzZWN1cmUuCisKKwkgIFN1Z2dl c3Qgc2V0dGluZyBZIGR1cmluZyBkZXZlbG9wbWVudCBhbmQgaXJvbmluZyBvdXQgZHJpdmVy CisJICBpc3N1ZXMgZXRjLiBTdWdnZXN0IHNldHRpbmcgdG8gTiBpZiB5b3Ugd2FudCBmYXN0 ZXIgd3JpdGluZy4KKworCSAgSWYgdW5zdXJlLCBzYXkgWS4KKworY29uZmlnIFlBRkZTX1NI T1JUX05BTUVTX0lOX1JBTQorCWJvb2wgIkNhY2hlIHNob3J0IG5hbWVzIGluIFJBTSIKKwlk ZXBlbmRzIG9uIFlBRkZTX0ZTCisJZGVmYXVsdCB5CisJaGVscAorCSAgSWYgdGhpcyBjb25m aWcgaXMgc2V0LCB0aGVuIHNob3J0IG5hbWVzIGFyZSBzdG9yZWQgd2l0aCB0aGUKKwkgIHlh ZmZzX09iamVjdC4gIFRoaXMgY29zdHMgYW4gZXh0cmEgMTYgYnl0ZXMgb2YgUkFNIHBlciBv YmplY3QsCisJICBidXQgbWFrZXMgbG9vay11cHMgZmFzdGVyLgorCisJICBJZiB1bnN1cmUs IHNheSBZLgpkaWZmIC11IC0tbmV3LWZpbGUgLS1yZWN1cnNpdmUgbGludXgtMi42LjI5LjYu b3JpZy9mcy95YWZmczIvTWFrZWZpbGUgbGludXgtMi42LjI5LjYubW9kL2ZzL3lhZmZzMi9N YWtlZmlsZQotLS0gbGludXgtMi42LjI5LjYub3JpZy9mcy95YWZmczIvTWFrZWZpbGUJMTk2 OS0xMi0zMSAxNzowMDowMC4wMDAwMDAwMDAgLTA3MDAKKysrIGxpbnV4LTIuNi4yOS42Lm1v ZC9mcy95YWZmczIvTWFrZWZpbGUJMjAwOS0wNy0yMSAxMToyODoxOC4wMDAwMDAwMDAgLTA3 MDAKQEAgLTAsMCArMSwxMiBAQAorIworIyBNYWtlZmlsZSBmb3IgdGhlIGxpbnV4IFlBRkZT IGZpbGVzeXN0ZW0gcm91dGluZXMuCisjCisKK29iai0kKENPTkZJR19ZQUZGU19GUykgKz0g eWFmZnMubworCit5YWZmcy15IDo9IHlhZmZzX210ZGlmLm8geWFmZnNfbXRkaWYyLm8KK3lh ZmZzLXkgKz0geWFmZnNfbXRkaWYxLm8geWFmZnNfcGFja2VkdGFnczEubworeWFmZnMteSAr PSB5YWZmc19lY2MubyB5YWZmc19mcy5vIHlhZmZzX2d1dHMubworeWFmZnMteSArPSB5YWZm c19wYWNrZWR0YWdzMi5vIHlhZmZzX3Fzb3J0Lm8KK3lhZmZzLXkgKz0geWFmZnNfdGFnc2Nv bXBhdC5vIHlhZmZzX3RhZ3N2YWxpZGl0eS5vCit5YWZmcy15ICs9IHlhZmZzX2NoZWNrcHRy dy5vIHlhZmZzX25hbmQubwpkaWZmIC11IC0tbmV3LWZpbGUgLS1yZWN1cnNpdmUgbGludXgt Mi42LjI5LjYub3JpZy9mcy95YWZmczIvbW9kdWxlY29uZmlnLmggbGludXgtMi42LjI5LjYu bW9kL2ZzL3lhZmZzMi9tb2R1bGVjb25maWcuaAotLS0gbGludXgtMi42LjI5LjYub3JpZy9m cy95YWZmczIvbW9kdWxlY29uZmlnLmgJMTk2OS0xMi0zMSAxNzowMDowMC4wMDAwMDAwMDAg LTA3MDAKKysrIGxpbnV4LTIuNi4yOS42Lm1vZC9mcy95YWZmczIvbW9kdWxlY29uZmlnLmgJ MjAwOS0wNy0yMSAxMToyODoxOC4wMDAwMDAwMDAgLTA3MDAKQEAgLTAsMCArMSw2NSBAQAor LyoKKyAqIFlBRkZTOiBZZXQgYW5vdGhlciBGbGFzaCBGaWxlIFN5c3RlbSAuIEEgTkFORC1m bGFzaCBzcGVjaWZpYyBmaWxlIHN5c3RlbS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIt MjAwNyBBbGVwaCBPbmUgTHRkLgorICogICBmb3IgVG9ieSBDaHVyY2hpbGwgTHRkIGFuZCBC cmlnaHRzdGFyIEVuZ2luZWVyaW5nCisgKgorICogQ3JlYXRlZCBieSBNYXJ0aW4gRm91dHMg PE1hcnRpbi5Gb3V0c0BwYWxtc291cmNlLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQor ICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgdmVyc2lvbiAyLjEgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIE5vdGU6IE9ubHkgWUFGRlMgaGVhZGVycyBhcmUg TEdQTCwgWUFGRlMgQyBjb2RlIGlzIGNvdmVyZWQgYnkgR1BMLgorICovCisKKyNpZm5kZWYg X19ZQUZGU19DT05GSUdfSF9fCisjZGVmaW5lIF9fWUFGRlNfQ09ORklHX0hfXworCisjaWZk ZWYgWUFGRlNfT1VUX09GX1RSRUUKKworLyogRE8gTk9UIFVOU0VUIFRIRVNFIFRIUkVFLiBZ QUZGUzIgd2lsbCBub3QgY29tcGlsZSBpZiB5b3UgZG8uICovCisjZGVmaW5lIENPTkZJR19Z QUZGU19GUworI2RlZmluZSBDT05GSUdfWUFGRlNfWUFGRlMxCisjZGVmaW5lIENPTkZJR19Z QUZGU19ZQUZGUzIKKworLyogVGhlc2Ugb3B0aW9ucyBhcmUgaW5kZXBlbmRlbnQgb2YgZWFj aCBvdGhlci4gIFNlbGVjdCB0aG9zZSB0aGF0IG1hdHRlci4gKi8KKworLyogRGVmYXVsdDog Tm90IHNlbGVjdGVkICovCisvKiBNZWFuaW5nOiBZYWZmcyBkb2VzIGl0cyBvd24gRUNDLCBy YXRoZXIgdGhhbiB1c2luZyBNVEQgRUNDICovCisvKiAjZGVmaW5lIENPTkZJR19ZQUZGU19E T0VTX0VDQyAqLworCisvKiBEZWZhdWx0OiBOb3Qgc2VsZWN0ZWQgKi8KKy8qIE1lYW5pbmc6 IEVDQyBieXRlIG9yZGVyIGlzICd3cm9uZycuICBPbmx5IG1lYW5pbmdmdWwgaWYgKi8KKy8q ICAgICAgICAgIENPTkZJR19ZQUZGU19ET0VTX0VDQyBpcyBzZXQgKi8KKy8qICNkZWZpbmUg Q09ORklHX1lBRkZTX0VDQ19XUk9OR19PUkRFUiAqLworCisvKiBEZWZhdWx0OiBTZWxlY3Rl ZCAqLworLyogTWVhbmluZzogRGlzYWJsZXMgdGVzdGluZyB3aGV0aGVyIGNodW5rcyBhcmUg ZXJhc2VkIGJlZm9yZSB3cml0aW5nIHRvIHRoZW0qLworI2RlZmluZSBDT05GSUdfWUFGRlNf RElTQUJMRV9DSFVOS19FUkFTRURfQ0hFQ0sKKworLyogRGVmYXVsdDogU2VsZWN0ZWQgKi8K Ky8qIE1lYW5pbmc6IENhY2hlIHNob3J0IG5hbWVzLCB0YWtpbmcgbW9yZSBSQU0sIGJ1dCBm YXN0ZXIgbG9vay11cHMgKi8KKyNkZWZpbmUgQ09ORklHX1lBRkZTX1NIT1JUX05BTUVTX0lO X1JBTQorCisvKiBEZWZhdWx0OiAxMCAqLworLyogTWVhbmluZzogc2V0IHRoZSBjb3VudCBv ZiBibG9ja3MgdG8gcmVzZXJ2ZSBmb3IgY2hlY2twb2ludGluZyAqLworI2RlZmluZSBDT05G SUdfWUFGRlNfQ0hFQ0tQT0lOVF9SRVNFUlZFRF9CTE9DS1MgMTAKKworLyoKK09sZGVyLXN0 eWxlIG9uLU5BTkQgZGF0YSBmb3JtYXQgaGFzIGEgInBhZ2VTdGF0dXMiIGJ5dGUgdG8gcmVj b3JkCitjaHVuay9wYWdlIHN0YXRlLiAgVGhpcyBieXRlIGlzIHplcm9lZCB3aGVuIHRoZSBw YWdlIGlzIGRpc2NhcmRlZC4KK0Nob29zZSB0aGlzIG9wdGlvbiBpZiB5b3UgaGF2ZSBleGlz dGluZyBvbi1OQU5EIGRhdGEgaW4gdGhpcyBmb3JtYXQKK3RoYXQgeW91IG5lZWQgdG8gY29u dGludWUgdG8gc3VwcG9ydC4gIE5ldyBkYXRhIHdyaXR0ZW4gYWxzbyB1c2VzIHRoZQorb2xk ZXItc3R5bGUgZm9ybWF0LgorTm90ZTogVXNlIG9mIHRoaXMgb3B0aW9uIGdlbmVyYWxseSBy ZXF1aXJlcyB0aGF0IE1URCdzIG9vYiBsYXlvdXQgYmUKK2FkanVzdGVkIHRvIHVzZSB0aGUg b2xkZXItc3R5bGUgZm9ybWF0LiAgU2VlIG5vdGVzIG9uIHRhZ3MgZm9ybWF0cyBhbmQKK01U RCB2ZXJzaW9ucyBpbiB5YWZmc19tdGRpZjEuYy4KKyovCisvKiBEZWZhdWx0OiBOb3Qgc2Vs ZWN0ZWQgKi8KKy8qIE1lYW5pbmc6IFVzZSBvbGRlci1zdHlsZSBvbi1OQU5EIGRhdGEgZm9y bWF0IHdpdGggcGFnZVN0YXR1cyBieXRlICovCisvKiAjZGVmaW5lIENPTkZJR19ZQUZGU185 QllURV9UQUdTICovCisKKyNlbmRpZiAvKiBZQUZGU19PVVRfT0ZfVFJFRSAqLworCisjZW5k aWYgLyogX19ZQUZGU19DT05GSUdfSF9fICovCmRpZmYgLXUgLS1uZXctZmlsZSAtLXJlY3Vy c2l2ZSBsaW51eC0yLjYuMjkuNi5vcmlnL2ZzL3lhZmZzMi95YWZmc19jaGVja3B0cncuYyBs aW51eC0yLjYuMjkuNi5tb2QvZnMveWFmZnMyL3lhZmZzX2NoZWNrcHRydy5jCi0tLSBsaW51 eC0yLjYuMjkuNi5vcmlnL2ZzL3lhZmZzMi95YWZmc19jaGVja3B0cncuYwkxOTY5LTEyLTMx IDE3OjAwOjAwLjAwMDAwMDAwMCAtMDcwMAorKysgbGludXgtMi42LjI5LjYubW9kL2ZzL3lh ZmZzMi95YWZmc19jaGVja3B0cncuYwkyMDA5LTA3LTIxIDExOjI4OjE4LjAwMDAwMDAwMCAt MDcwMApAQCAtMCwwICsxLDM5NyBAQAorLyoKKyAqIFlBRkZTOiBZZXQgQW5vdGhlciBGbGFz aCBGaWxlIFN5c3RlbS4gQSBOQU5ELWZsYXNoIHNwZWNpZmljIGZpbGUgc3lzdGVtLgorICoK KyAqIENvcHlyaWdodCAoQykgMjAwMi0yMDA3IEFsZXBoIE9uZSBMdGQuCisgKiAgIGZvciBU b2J5IENodXJjaGlsbCBMdGQgYW5kIEJyaWdodHN0YXIgRW5naW5lZXJpbmcKKyAqCisgKiBD cmVhdGVkIGJ5IENoYXJsZXMgTWFubmluZyA8Y2hhcmxlc0BhbGVwaDEuY28udWs+CisgKgor ICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCitjb25zdCBjaGFyICp5YWZmc19j aGVja3B0cndfY192ZXJzaW9uID0KKwkiJElkOiB5YWZmc19jaGVja3B0cncuYyx2IDEuMTkg MjAwOS0wNi0xOSAwMTozNTo0NiBjaGFybGVzIEV4cCAkIjsKKworCisjaW5jbHVkZSAieWFm ZnNfY2hlY2twdHJ3LmgiCisjaW5jbHVkZSAieWFmZnNfZ2V0YmxvY2tpbmZvLmgiCisKK3N0 YXRpYyBpbnQgeWFmZnNfQ2hlY2twb2ludFNwYWNlT2soeWFmZnNfRGV2aWNlICpkZXYpCit7 CisJaW50IGJsb2Nrc0F2YWlsYWJsZSA9IGRldi0+bkVyYXNlZEJsb2NrcyAtIGRldi0+blJl c2VydmVkQmxvY2tzOworCisJVChZQUZGU19UUkFDRV9DSEVDS1BPSU5ULAorCQkoVFNUUigi Y2hlY2twdCBibG9ja3MgYXZhaWxhYmxlID0gJWQiIFRFTkRTVFIpLAorCQlibG9ja3NBdmFp bGFibGUpKTsKKworCXJldHVybiAoYmxvY2tzQXZhaWxhYmxlIDw9IDApID8gMCA6IDE7Cit9 CisKKworc3RhdGljIGludCB5YWZmc19DaGVja3BvaW50RXJhc2UoeWFmZnNfRGV2aWNlICpk ZXYpCit7CisJaW50IGk7CisKKwlpZiAoIWRldi0+ZXJhc2VCbG9ja0luTkFORCkKKwkJcmV0 dXJuIDA7CisJVChZQUZGU19UUkFDRV9DSEVDS1BPSU5ULCAoVFNUUigiY2hlY2tpbmcgYmxv Y2tzICVkIHRvICVkIlRFTkRTVFIpLAorCQlkZXYtPmludGVybmFsU3RhcnRCbG9jaywgZGV2 LT5pbnRlcm5hbEVuZEJsb2NrKSk7CisKKwlmb3IgKGkgPSBkZXYtPmludGVybmFsU3RhcnRC bG9jazsgaSA8PSBkZXYtPmludGVybmFsRW5kQmxvY2s7IGkrKykgeworCQl5YWZmc19CbG9j a0luZm8gKmJpID0geWFmZnNfR2V0QmxvY2tJbmZvKGRldiwgaSk7CisJCWlmIChiaS0+Ymxv Y2tTdGF0ZSA9PSBZQUZGU19CTE9DS19TVEFURV9DSEVDS1BPSU5UKSB7CisJCQlUKFlBRkZT X1RSQUNFX0NIRUNLUE9JTlQsIChUU1RSKCJlcmFzaW5nIGNoZWNrcHQgYmxvY2sgJWQiVEVO RFNUUiksIGkpKTsKKwkJCWlmIChkZXYtPmVyYXNlQmxvY2tJbk5BTkQoZGV2LCBpIC0gZGV2 LT5ibG9ja09mZnNldCAvKiByZWFsaWduICovKSkgeworCQkJCWJpLT5ibG9ja1N0YXRlID0g WUFGRlNfQkxPQ0tfU1RBVEVfRU1QVFk7CisJCQkJZGV2LT5uRXJhc2VkQmxvY2tzKys7CisJ CQkJZGV2LT5uRnJlZUNodW5rcyArPSBkZXYtPm5DaHVua3NQZXJCbG9jazsKKwkJCX0gZWxz ZSB7CisJCQkJZGV2LT5tYXJrTkFOREJsb2NrQmFkKGRldiwgaSk7CisJCQkJYmktPmJsb2Nr U3RhdGUgPSBZQUZGU19CTE9DS19TVEFURV9ERUFEOworCQkJfQorCQl9CisJfQorCisJZGV2 LT5ibG9ja3NJbkNoZWNrcG9pbnQgPSAwOworCisJcmV0dXJuIDE7Cit9CisKKworc3RhdGlj IHZvaWQgeWFmZnNfQ2hlY2twb2ludEZpbmROZXh0RXJhc2VkQmxvY2soeWFmZnNfRGV2aWNl ICpkZXYpCit7CisJaW50ICBpOworCWludCBibG9ja3NBdmFpbGFibGUgPSBkZXYtPm5FcmFz ZWRCbG9ja3MgLSBkZXYtPm5SZXNlcnZlZEJsb2NrczsKKwlUKFlBRkZTX1RSQUNFX0NIRUNL UE9JTlQsCisJCShUU1RSKCJhbGxvY2F0aW5nIGNoZWNrcHQgYmxvY2s6IGVyYXNlZCAlZCBy ZXNlcnZlZCAlZCBhdmFpbCAlZCBuZXh0ICVkICJURU5EU1RSKSwKKwkJZGV2LT5uRXJhc2Vk QmxvY2tzLCBkZXYtPm5SZXNlcnZlZEJsb2NrcywgYmxvY2tzQXZhaWxhYmxlLCBkZXYtPmNo ZWNrcG9pbnROZXh0QmxvY2spKTsKKworCWlmIChkZXYtPmNoZWNrcG9pbnROZXh0QmxvY2sg Pj0gMCAmJgorCQkJZGV2LT5jaGVja3BvaW50TmV4dEJsb2NrIDw9IGRldi0+aW50ZXJuYWxF bmRCbG9jayAmJgorCQkJYmxvY2tzQXZhaWxhYmxlID4gMCkgeworCisJCWZvciAoaSA9IGRl di0+Y2hlY2twb2ludE5leHRCbG9jazsgaSA8PSBkZXYtPmludGVybmFsRW5kQmxvY2s7IGkr KykgeworCQkJeWFmZnNfQmxvY2tJbmZvICpiaSA9IHlhZmZzX0dldEJsb2NrSW5mbyhkZXYs IGkpOworCQkJaWYgKGJpLT5ibG9ja1N0YXRlID09IFlBRkZTX0JMT0NLX1NUQVRFX0VNUFRZ KSB7CisJCQkJZGV2LT5jaGVja3BvaW50TmV4dEJsb2NrID0gaSArIDE7CisJCQkJZGV2LT5j aGVja3BvaW50Q3VycmVudEJsb2NrID0gaTsKKwkJCQlUKFlBRkZTX1RSQUNFX0NIRUNLUE9J TlQsIChUU1RSKCJhbGxvY2F0aW5nIGNoZWNrcHQgYmxvY2sgJWQiVEVORFNUUiksIGkpKTsK KwkJCQlyZXR1cm47CisJCQl9CisJCX0KKwl9CisJVChZQUZGU19UUkFDRV9DSEVDS1BPSU5U LCAoVFNUUigib3V0IG9mIGNoZWNrcHQgYmxvY2tzIlRFTkRTVFIpKSk7CisKKwlkZXYtPmNo ZWNrcG9pbnROZXh0QmxvY2sgPSAtMTsKKwlkZXYtPmNoZWNrcG9pbnRDdXJyZW50QmxvY2sg PSAtMTsKK30KKworc3RhdGljIHZvaWQgeWFmZnNfQ2hlY2twb2ludEZpbmROZXh0Q2hlY2tw b2ludEJsb2NrKHlhZmZzX0RldmljZSAqZGV2KQoreworCWludCAgaTsKKwl5YWZmc19FeHRl bmRlZFRhZ3MgdGFnczsKKworCVQoWUFGRlNfVFJBQ0VfQ0hFQ0tQT0lOVCwgKFRTVFIoImZp bmQgbmV4dCBjaGVja3B0IGJsb2NrOiBzdGFydDogIGJsb2NrcyAlZCBuZXh0ICVkIiBURU5E U1RSKSwKKwkJZGV2LT5ibG9ja3NJbkNoZWNrcG9pbnQsIGRldi0+Y2hlY2twb2ludE5leHRC bG9jaykpOworCisJaWYgKGRldi0+YmxvY2tzSW5DaGVja3BvaW50IDwgZGV2LT5jaGVja3Bv aW50TWF4QmxvY2tzKQorCQlmb3IgKGkgPSBkZXYtPmNoZWNrcG9pbnROZXh0QmxvY2s7IGkg PD0gZGV2LT5pbnRlcm5hbEVuZEJsb2NrOyBpKyspIHsKKwkJCWludCBjaHVuayA9IGkgKiBk ZXYtPm5DaHVua3NQZXJCbG9jazsKKwkJCWludCByZWFsaWduZWRDaHVuayA9IGNodW5rIC0g ZGV2LT5jaHVua09mZnNldDsKKworCQkJZGV2LT5yZWFkQ2h1bmtXaXRoVGFnc0Zyb21OQU5E KGRldiwgcmVhbGlnbmVkQ2h1bmssCisJCQkJCU5VTEwsICZ0YWdzKTsKKwkJCVQoWUFGRlNf VFJBQ0VfQ0hFQ0tQT0lOVCwgKFRTVFIoImZpbmQgbmV4dCBjaGVja3B0IGJsb2NrOiBzZWFy Y2g6IGJsb2NrICVkIG9pZCAlZCBzZXEgJWQgZWNjciAlZCIgVEVORFNUUiksCisJCQkJaSwg dGFncy5vYmplY3RJZCwgdGFncy5zZXF1ZW5jZU51bWJlciwgdGFncy5lY2NSZXN1bHQpKTsK KworCQkJaWYgKHRhZ3Muc2VxdWVuY2VOdW1iZXIgPT0gWUFGRlNfU0VRVUVOQ0VfQ0hFQ0tQ T0lOVF9EQVRBKSB7CisJCQkJLyogUmlnaHQga2luZCBvZiBibG9jayAqLworCQkJCWRldi0+ Y2hlY2twb2ludE5leHRCbG9jayA9IHRhZ3Mub2JqZWN0SWQ7CisJCQkJZGV2LT5jaGVja3Bv aW50Q3VycmVudEJsb2NrID0gaTsKKwkJCQlkZXYtPmNoZWNrcG9pbnRCbG9ja0xpc3RbZGV2 LT5ibG9ja3NJbkNoZWNrcG9pbnRdID0gaTsKKwkJCQlkZXYtPmJsb2Nrc0luQ2hlY2twb2lu dCsrOworCQkJCVQoWUFGRlNfVFJBQ0VfQ0hFQ0tQT0lOVCwgKFRTVFIoImZvdW5kIGNoZWNr cHQgYmxvY2sgJWQiVEVORFNUUiksIGkpKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCX0KKwor CVQoWUFGRlNfVFJBQ0VfQ0hFQ0tQT0lOVCwgKFRTVFIoImZvdW5kIG5vIG1vcmUgY2hlY2tw dCBibG9ja3MiVEVORFNUUikpKTsKKworCWRldi0+Y2hlY2twb2ludE5leHRCbG9jayA9IC0x OworCWRldi0+Y2hlY2twb2ludEN1cnJlbnRCbG9jayA9IC0xOworfQorCisKK2ludCB5YWZm c19DaGVja3BvaW50T3Blbih5YWZmc19EZXZpY2UgKmRldiwgaW50IGZvcldyaXRpbmcpCit7 CisKKwkvKiBHb3QgdGhlIGZ1bmN0aW9ucyB3ZSBuZWVkPyAqLworCWlmICghZGV2LT53cml0 ZUNodW5rV2l0aFRhZ3NUb05BTkQgfHwKKwkJCSFkZXYtPnJlYWRDaHVua1dpdGhUYWdzRnJv bU5BTkQgfHwKKwkJCSFkZXYtPmVyYXNlQmxvY2tJbk5BTkQgfHwKKwkJCSFkZXYtPm1hcmtO QU5EQmxvY2tCYWQpCisJCXJldHVybiAwOworCisJaWYgKGZvcldyaXRpbmcgJiYgIXlhZmZz X0NoZWNrcG9pbnRTcGFjZU9rKGRldikpCisJCXJldHVybiAwOworCisJaWYgKCFkZXYtPmNo ZWNrcG9pbnRCdWZmZXIpCisJCWRldi0+Y2hlY2twb2ludEJ1ZmZlciA9IFlNQUxMT0NfRE1B KGRldi0+dG90YWxCeXRlc1BlckNodW5rKTsKKwlpZiAoIWRldi0+Y2hlY2twb2ludEJ1ZmZl cikKKwkJcmV0dXJuIDA7CisKKworCWRldi0+Y2hlY2twb2ludFBhZ2VTZXF1ZW5jZSA9IDA7 CisKKwlkZXYtPmNoZWNrcG9pbnRPcGVuRm9yV3JpdGUgPSBmb3JXcml0aW5nOworCisJZGV2 LT5jaGVja3BvaW50Qnl0ZUNvdW50ID0gMDsKKwlkZXYtPmNoZWNrcG9pbnRTdW0gPSAwOwor CWRldi0+Y2hlY2twb2ludFhvciA9IDA7CisJZGV2LT5jaGVja3BvaW50Q3VycmVudEJsb2Nr ID0gLTE7CisJZGV2LT5jaGVja3BvaW50Q3VycmVudENodW5rID0gLTE7CisJZGV2LT5jaGVj a3BvaW50TmV4dEJsb2NrID0gZGV2LT5pbnRlcm5hbFN0YXJ0QmxvY2s7CisKKwkvKiBFcmFz ZSBhbGwgdGhlIGJsb2NrcyBpbiB0aGUgY2hlY2twb2ludCBhcmVhICovCisJaWYgKGZvcldy aXRpbmcpIHsKKwkJbWVtc2V0KGRldi0+Y2hlY2twb2ludEJ1ZmZlciwgMCwgZGV2LT5uRGF0 YUJ5dGVzUGVyQ2h1bmspOworCQlkZXYtPmNoZWNrcG9pbnRCeXRlT2Zmc2V0ID0gMDsKKwkJ cmV0dXJuIHlhZmZzX0NoZWNrcG9pbnRFcmFzZShkZXYpOworCX0gZWxzZSB7CisJCWludCBp OworCQkvKiBTZXQgdG8gYSB2YWx1ZSB0aGF0IHdpbGwga2ljayBvZmYgYSByZWFkICovCisJ CWRldi0+Y2hlY2twb2ludEJ5dGVPZmZzZXQgPSBkZXYtPm5EYXRhQnl0ZXNQZXJDaHVuazsK KwkJLyogQSBjaGVja3BvaW50IGJsb2NrIGxpc3Qgb2YgMSBjaGVja3BvaW50IGJsb2NrIHBl ciAxNiBibG9jayBpcyAoaG9wZWZ1bGx5KQorCQkgKiBnb2luZyB0byBiZSB3YXkgbW9yZSB0 aGFuIHdlIG5lZWQgKi8KKwkJZGV2LT5ibG9ja3NJbkNoZWNrcG9pbnQgPSAwOworCQlkZXYt PmNoZWNrcG9pbnRNYXhCbG9ja3MgPSAoZGV2LT5pbnRlcm5hbEVuZEJsb2NrIC0gZGV2LT5p bnRlcm5hbFN0YXJ0QmxvY2spLzE2ICsgMjsKKwkJZGV2LT5jaGVja3BvaW50QmxvY2tMaXN0 ID0gWU1BTExPQyhzaXplb2YoaW50KSAqIGRldi0+Y2hlY2twb2ludE1heEJsb2Nrcyk7CisJ CWlmKCFkZXYtPmNoZWNrcG9pbnRCbG9ja0xpc3QpCisJCQlyZXR1cm4gMDsKKworCQlmb3Ig KGkgPSAwOyBpIDwgZGV2LT5jaGVja3BvaW50TWF4QmxvY2tzOyBpKyspCisJCQlkZXYtPmNo ZWNrcG9pbnRCbG9ja0xpc3RbaV0gPSAtMTsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworaW50 IHlhZmZzX0dldENoZWNrcG9pbnRTdW0oeWFmZnNfRGV2aWNlICpkZXYsIF9fdTMyICpzdW0p Cit7CisJX191MzIgY29tcG9zaXRlU3VtOworCWNvbXBvc2l0ZVN1bSA9ICAoZGV2LT5jaGVj a3BvaW50U3VtIDw8IDgpIHwgKGRldi0+Y2hlY2twb2ludFhvciAmIDB4RkYpOworCSpzdW0g PSBjb21wb3NpdGVTdW07CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgeWFmZnNfQ2hl Y2twb2ludEZsdXNoQnVmZmVyKHlhZmZzX0RldmljZSAqZGV2KQoreworCWludCBjaHVuazsK KwlpbnQgcmVhbGlnbmVkQ2h1bms7CisKKwl5YWZmc19FeHRlbmRlZFRhZ3MgdGFnczsKKwor CWlmIChkZXYtPmNoZWNrcG9pbnRDdXJyZW50QmxvY2sgPCAwKSB7CisJCXlhZmZzX0NoZWNr cG9pbnRGaW5kTmV4dEVyYXNlZEJsb2NrKGRldik7CisJCWRldi0+Y2hlY2twb2ludEN1cnJl bnRDaHVuayA9IDA7CisJfQorCisJaWYgKGRldi0+Y2hlY2twb2ludEN1cnJlbnRCbG9jayA8 IDApCisJCXJldHVybiAwOworCisJdGFncy5jaHVua0RlbGV0ZWQgPSAwOworCXRhZ3Mub2Jq ZWN0SWQgPSBkZXYtPmNoZWNrcG9pbnROZXh0QmxvY2s7IC8qIEhpbnQgdG8gbmV4dCBwbGFj ZSB0byBsb29rICovCisJdGFncy5jaHVua0lkID0gZGV2LT5jaGVja3BvaW50UGFnZVNlcXVl bmNlICsgMTsKKwl0YWdzLnNlcXVlbmNlTnVtYmVyID0gIFlBRkZTX1NFUVVFTkNFX0NIRUNL UE9JTlRfREFUQTsKKwl0YWdzLmJ5dGVDb3VudCA9IGRldi0+bkRhdGFCeXRlc1BlckNodW5r OworCWlmIChkZXYtPmNoZWNrcG9pbnRDdXJyZW50Q2h1bmsgPT0gMCkgeworCQkvKiBGaXJz dCBjaHVuayB3ZSB3cml0ZSBmb3IgdGhlIGJsb2NrPyBTZXQgYmxvY2sgc3RhdGUgdG8KKwkJ ICAgY2hlY2twb2ludCAqLworCQl5YWZmc19CbG9ja0luZm8gKmJpID0geWFmZnNfR2V0Qmxv Y2tJbmZvKGRldiwgZGV2LT5jaGVja3BvaW50Q3VycmVudEJsb2NrKTsKKwkJYmktPmJsb2Nr U3RhdGUgPSBZQUZGU19CTE9DS19TVEFURV9DSEVDS1BPSU5UOworCQlkZXYtPmJsb2Nrc0lu Q2hlY2twb2ludCsrOworCX0KKworCWNodW5rID0gZGV2LT5jaGVja3BvaW50Q3VycmVudEJs b2NrICogZGV2LT5uQ2h1bmtzUGVyQmxvY2sgKyBkZXYtPmNoZWNrcG9pbnRDdXJyZW50Q2h1 bms7CisKKworCVQoWUFGRlNfVFJBQ0VfQ0hFQ0tQT0lOVCwgKFRTVFIoImNoZWNrcG9pbnQg d2l0ZSBidWZmZXIgbmFuZCAlZCglZDolZCkgb2JqaWQgJWQgY2hJZCAlZCIgVEVORFNUUiks CisJCWNodW5rLCBkZXYtPmNoZWNrcG9pbnRDdXJyZW50QmxvY2ssIGRldi0+Y2hlY2twb2lu dEN1cnJlbnRDaHVuaywgdGFncy5vYmplY3RJZCwgdGFncy5jaHVua0lkKSk7CisKKwlyZWFs aWduZWRDaHVuayA9IGNodW5rIC0gZGV2LT5jaHVua09mZnNldDsKKworCWRldi0+d3JpdGVD aHVua1dpdGhUYWdzVG9OQU5EKGRldiwgcmVhbGlnbmVkQ2h1bmssCisJCQlkZXYtPmNoZWNr cG9pbnRCdWZmZXIsICZ0YWdzKTsKKwlkZXYtPmNoZWNrcG9pbnRCeXRlT2Zmc2V0ID0gMDsK KwlkZXYtPmNoZWNrcG9pbnRQYWdlU2VxdWVuY2UrKzsKKwlkZXYtPmNoZWNrcG9pbnRDdXJy ZW50Q2h1bmsrKzsKKwlpZiAoZGV2LT5jaGVja3BvaW50Q3VycmVudENodW5rID49IGRldi0+ bkNodW5rc1BlckJsb2NrKSB7CisJCWRldi0+Y2hlY2twb2ludEN1cnJlbnRDaHVuayA9IDA7 CisJCWRldi0+Y2hlY2twb2ludEN1cnJlbnRCbG9jayA9IC0xOworCX0KKwltZW1zZXQoZGV2 LT5jaGVja3BvaW50QnVmZmVyLCAwLCBkZXYtPm5EYXRhQnl0ZXNQZXJDaHVuayk7CisKKwly ZXR1cm4gMTsKK30KKworCitpbnQgeWFmZnNfQ2hlY2twb2ludFdyaXRlKHlhZmZzX0Rldmlj ZSAqZGV2LCBjb25zdCB2b2lkICpkYXRhLCBpbnQgbkJ5dGVzKQoreworCWludCBpID0gMDsK KwlpbnQgb2sgPSAxOworCisKKwlfX3U4ICogZGF0YUJ5dGVzID0gKF9fdTggKilkYXRhOwor CisKKworCWlmICghZGV2LT5jaGVja3BvaW50QnVmZmVyKQorCQlyZXR1cm4gMDsKKworCWlm ICghZGV2LT5jaGVja3BvaW50T3BlbkZvcldyaXRlKQorCQlyZXR1cm4gLTE7CisKKwl3aGls ZSAoaSA8IG5CeXRlcyAmJiBvaykgeworCQlkZXYtPmNoZWNrcG9pbnRCdWZmZXJbZGV2LT5j aGVja3BvaW50Qnl0ZU9mZnNldF0gPSAqZGF0YUJ5dGVzOworCQlkZXYtPmNoZWNrcG9pbnRT dW0gKz0gKmRhdGFCeXRlczsKKwkJZGV2LT5jaGVja3BvaW50WG9yIF49ICpkYXRhQnl0ZXM7 CisKKwkJZGV2LT5jaGVja3BvaW50Qnl0ZU9mZnNldCsrOworCQlpKys7CisJCWRhdGFCeXRl cysrOworCQlkZXYtPmNoZWNrcG9pbnRCeXRlQ291bnQrKzsKKworCisJCWlmIChkZXYtPmNo ZWNrcG9pbnRCeXRlT2Zmc2V0IDwgMCB8fAorCQkgICBkZXYtPmNoZWNrcG9pbnRCeXRlT2Zm c2V0ID49IGRldi0+bkRhdGFCeXRlc1BlckNodW5rKQorCQkJb2sgPSB5YWZmc19DaGVja3Bv aW50Rmx1c2hCdWZmZXIoZGV2KTsKKwl9CisKKwlyZXR1cm4gaTsKK30KKworaW50IHlhZmZz X0NoZWNrcG9pbnRSZWFkKHlhZmZzX0RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBpbnQgbkJ5 dGVzKQoreworCWludCBpID0gMDsKKwlpbnQgb2sgPSAxOworCXlhZmZzX0V4dGVuZGVkVGFn cyB0YWdzOworCisKKwlpbnQgY2h1bms7CisJaW50IHJlYWxpZ25lZENodW5rOworCisJX191 OCAqZGF0YUJ5dGVzID0gKF9fdTggKilkYXRhOworCisJaWYgKCFkZXYtPmNoZWNrcG9pbnRC dWZmZXIpCisJCXJldHVybiAwOworCisJaWYgKGRldi0+Y2hlY2twb2ludE9wZW5Gb3JXcml0 ZSkKKwkJcmV0dXJuIC0xOworCisJd2hpbGUgKGkgPCBuQnl0ZXMgJiYgb2spIHsKKworCisJ CWlmIChkZXYtPmNoZWNrcG9pbnRCeXRlT2Zmc2V0IDwgMCB8fAorCQkJZGV2LT5jaGVja3Bv aW50Qnl0ZU9mZnNldCA+PSBkZXYtPm5EYXRhQnl0ZXNQZXJDaHVuaykgeworCisJCQlpZiAo ZGV2LT5jaGVja3BvaW50Q3VycmVudEJsb2NrIDwgMCkgeworCQkJCXlhZmZzX0NoZWNrcG9p bnRGaW5kTmV4dENoZWNrcG9pbnRCbG9jayhkZXYpOworCQkJCWRldi0+Y2hlY2twb2ludEN1 cnJlbnRDaHVuayA9IDA7CisJCQl9CisKKwkJCWlmIChkZXYtPmNoZWNrcG9pbnRDdXJyZW50 QmxvY2sgPCAwKQorCQkJCW9rID0gMDsKKwkJCWVsc2UgeworCQkJCWNodW5rID0gZGV2LT5j aGVja3BvaW50Q3VycmVudEJsb2NrICoKKwkJCQkJZGV2LT5uQ2h1bmtzUGVyQmxvY2sgKwor CQkJCQlkZXYtPmNoZWNrcG9pbnRDdXJyZW50Q2h1bms7CisKKwkJCQlyZWFsaWduZWRDaHVu ayA9IGNodW5rIC0gZGV2LT5jaHVua09mZnNldDsKKworCQkJCS8qIHJlYWQgaW4gdGhlIG5l eHQgY2h1bmsgKi8KKwkJCQkvKiBwcmludGYoInJlYWQgY2hlY2twb2ludCBwYWdlICVkXG4i LGRldi0+Y2hlY2twb2ludFBhZ2UpOyAqLworCQkJCWRldi0+cmVhZENodW5rV2l0aFRhZ3NG cm9tTkFORChkZXYsCisJCQkJCQlyZWFsaWduZWRDaHVuaywKKwkJCQkJCWRldi0+Y2hlY2tw b2ludEJ1ZmZlciwKKwkJCQkJCSZ0YWdzKTsKKworCQkJCWlmICh0YWdzLmNodW5rSWQgIT0g KGRldi0+Y2hlY2twb2ludFBhZ2VTZXF1ZW5jZSArIDEpIHx8CisJCQkJCXRhZ3MuZWNjUmVz dWx0ID4gWUFGRlNfRUNDX1JFU1VMVF9GSVhFRCB8fAorCQkJCQl0YWdzLnNlcXVlbmNlTnVt YmVyICE9IFlBRkZTX1NFUVVFTkNFX0NIRUNLUE9JTlRfREFUQSkKKwkJCQkJb2sgPSAwOwor CisJCQkJZGV2LT5jaGVja3BvaW50Qnl0ZU9mZnNldCA9IDA7CisJCQkJZGV2LT5jaGVja3Bv aW50UGFnZVNlcXVlbmNlKys7CisJCQkJZGV2LT5jaGVja3BvaW50Q3VycmVudENodW5rKys7 CisKKwkJCQlpZiAoZGV2LT5jaGVja3BvaW50Q3VycmVudENodW5rID49IGRldi0+bkNodW5r c1BlckJsb2NrKQorCQkJCQlkZXYtPmNoZWNrcG9pbnRDdXJyZW50QmxvY2sgPSAtMTsKKwkJ CX0KKwkJfQorCisJCWlmIChvaykgeworCQkJKmRhdGFCeXRlcyA9IGRldi0+Y2hlY2twb2lu dEJ1ZmZlcltkZXYtPmNoZWNrcG9pbnRCeXRlT2Zmc2V0XTsKKwkJCWRldi0+Y2hlY2twb2lu dFN1bSArPSAqZGF0YUJ5dGVzOworCQkJZGV2LT5jaGVja3BvaW50WG9yIF49ICpkYXRhQnl0 ZXM7CisJCQlkZXYtPmNoZWNrcG9pbnRCeXRlT2Zmc2V0Kys7CisJCQlpKys7CisJCQlkYXRh Qnl0ZXMrKzsKKwkJCWRldi0+Y2hlY2twb2ludEJ5dGVDb3VudCsrOworCQl9CisJfQorCisJ cmV0dXJuIAlpOworfQorCitpbnQgeWFmZnNfQ2hlY2twb2ludENsb3NlKHlhZmZzX0Rldmlj ZSAqZGV2KQoreworCisJaWYgKGRldi0+Y2hlY2twb2ludE9wZW5Gb3JXcml0ZSkgeworCQlp ZiAoZGV2LT5jaGVja3BvaW50Qnl0ZU9mZnNldCAhPSAwKQorCQkJeWFmZnNfQ2hlY2twb2lu dEZsdXNoQnVmZmVyKGRldik7CisJfSBlbHNlIHsKKwkJaW50IGk7CisJCWZvciAoaSA9IDA7 IGkgPCBkZXYtPmJsb2Nrc0luQ2hlY2twb2ludCAmJiBkZXYtPmNoZWNrcG9pbnRCbG9ja0xp c3RbaV0gPj0gMDsgaSsrKSB7CisJCQl5YWZmc19CbG9ja0luZm8gKmJpID0geWFmZnNfR2V0 QmxvY2tJbmZvKGRldiwgZGV2LT5jaGVja3BvaW50QmxvY2tMaXN0W2ldKTsKKwkJCWlmIChi aS0+YmxvY2tTdGF0ZSA9PSBZQUZGU19CTE9DS19TVEFURV9FTVBUWSkKKwkJCQliaS0+Ymxv Y2tTdGF0ZSA9IFlBRkZTX0JMT0NLX1NUQVRFX0NIRUNLUE9JTlQ7CisJCQllbHNlIHsKKwkJ CQkvKiBUb2RvIHRoaXMgbG9va3Mgb2RkLi4uICovCisJCQl9CisJCX0KKwkJWUZSRUUoZGV2 LT5jaGVja3BvaW50QmxvY2tMaXN0KTsKKwkJZGV2LT5jaGVja3BvaW50QmxvY2tMaXN0ID0g TlVMTDsKKwl9CisKKwlkZXYtPm5GcmVlQ2h1bmtzIC09IGRldi0+YmxvY2tzSW5DaGVja3Bv aW50ICogZGV2LT5uQ2h1bmtzUGVyQmxvY2s7CisJZGV2LT5uRXJhc2VkQmxvY2tzIC09IGRl di0+YmxvY2tzSW5DaGVja3BvaW50OworCisKKwlUKFlBRkZTX1RSQUNFX0NIRUNLUE9JTlQs IChUU1RSKCJjaGVja3BvaW50IGJ5dGUgY291bnQgJWQiIFRFTkRTVFIpLAorCQkJZGV2LT5j aGVja3BvaW50Qnl0ZUNvdW50KSk7CisKKwlpZiAoZGV2LT5jaGVja3BvaW50QnVmZmVyKSB7 CisJCS8qIGZyZWUgdGhlIGJ1ZmZlciAqLworCQlZRlJFRShkZXYtPmNoZWNrcG9pbnRCdWZm ZXIpOworCQlkZXYtPmNoZWNrcG9pbnRCdWZmZXIgPSBOVUxMOworCQlyZXR1cm4gMTsKKwl9 IGVsc2UKKwkJcmV0dXJuIDA7Cit9CisKK2ludCB5YWZmc19DaGVja3BvaW50SW52YWxpZGF0 ZVN0cmVhbSh5YWZmc19EZXZpY2UgKmRldikKK3sKKwkvKiBFcmFzZSB0aGUgZmlyc3QgY2hl Y2tzdW0gYmxvY2sgKi8KKworCVQoWUFGRlNfVFJBQ0VfQ0hFQ0tQT0lOVCwgKFRTVFIoImNo ZWNrcG9pbnQgaW52YWxpZGF0ZSJURU5EU1RSKSkpOworCisJaWYgKCF5YWZmc19DaGVja3Bv aW50U3BhY2VPayhkZXYpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiB5YWZmc19DaGVja3Bv aW50RXJhc2UoZGV2KTsKK30KKworCisKZGlmZiAtdSAtLW5ldy1maWxlIC0tcmVjdXJzaXZl IGxpbnV4LTIuNi4yOS42Lm9yaWcvZnMveWFmZnMyL3lhZmZzX2NoZWNrcHRydy5oIGxpbnV4 LTIuNi4yOS42Lm1vZC9mcy95YWZmczIveWFmZnNfY2hlY2twdHJ3LmgKLS0tIGxpbnV4LTIu Ni4yOS42Lm9yaWcvZnMveWFmZnMyL3lhZmZzX2NoZWNrcHRydy5oCTE5NjktMTItMzEgMTc6 MDA6MDAuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYuMjkuNi5tb2QvZnMveWFmZnMy L3lhZmZzX2NoZWNrcHRydy5oCTIwMDktMDctMjEgMTE6Mjg6MTguMDAwMDAwMDAwIC0wNzAw CkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBZQUZGUzogWWV0IGFub3RoZXIgRmxhc2ggRmls ZSBTeXN0ZW0gLiBBIE5BTkQtZmxhc2ggc3BlY2lmaWMgZmlsZSBzeXN0ZW0uCisgKgorICog Q29weXJpZ2h0IChDKSAyMDAyLTIwMDcgQWxlcGggT25lIEx0ZC4KKyAqICAgZm9yIFRvYnkg Q2h1cmNoaWxsIEx0ZCBhbmQgQnJpZ2h0c3RhciBFbmdpbmVlcmluZworICoKKyAqIENyZWF0 ZWQgYnkgQ2hhcmxlcyBNYW5uaW5nIDxjaGFybGVzQGFsZXBoMS5jby51az4KKyAqCisgKiBU aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEgYXMKKyAqIHB1Ymxpc2hlZCBi eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIE5vdGU6IE9ubHkgWUFG RlMgaGVhZGVycyBhcmUgTEdQTCwgWUFGRlMgQyBjb2RlIGlzIGNvdmVyZWQgYnkgR1BMLgor ICovCisKKyNpZm5kZWYgX19ZQUZGU19DSEVDS1BUUldfSF9fCisjZGVmaW5lIF9fWUFGRlNf Q0hFQ0tQVFJXX0hfXworCisjaW5jbHVkZSAieWFmZnNfZ3V0cy5oIgorCitpbnQgeWFmZnNf Q2hlY2twb2ludE9wZW4oeWFmZnNfRGV2aWNlICpkZXYsIGludCBmb3JXcml0aW5nKTsKKwor aW50IHlhZmZzX0NoZWNrcG9pbnRXcml0ZSh5YWZmc19EZXZpY2UgKmRldiwgY29uc3Qgdm9p ZCAqZGF0YSwgaW50IG5CeXRlcyk7CisKK2ludCB5YWZmc19DaGVja3BvaW50UmVhZCh5YWZm c19EZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgaW50IG5CeXRlcyk7CisKK2ludCB5YWZmc19H ZXRDaGVja3BvaW50U3VtKHlhZmZzX0RldmljZSAqZGV2LCBfX3UzMiAqc3VtKTsKKworaW50 IHlhZmZzX0NoZWNrcG9pbnRDbG9zZSh5YWZmc19EZXZpY2UgKmRldik7CisKK2ludCB5YWZm c19DaGVja3BvaW50SW52YWxpZGF0ZVN0cmVhbSh5YWZmc19EZXZpY2UgKmRldik7CisKKwor I2VuZGlmCisKZGlmZiAtdSAtLW5ldy1maWxlIC0tcmVjdXJzaXZlIGxpbnV4LTIuNi4yOS42 Lm9yaWcvZnMveWFmZnMyL3lhZmZzX2VjYy5jIGxpbnV4LTIuNi4yOS42Lm1vZC9mcy95YWZm czIveWFmZnNfZWNjLmMKLS0tIGxpbnV4LTIuNi4yOS42Lm9yaWcvZnMveWFmZnMyL3lhZmZz X2VjYy5jCTE5NjktMTItMzEgMTc6MDA6MDAuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0y LjYuMjkuNi5tb2QvZnMveWFmZnMyL3lhZmZzX2VjYy5jCTIwMDktMDctMjEgMTE6Mjg6MTgu MDAwMDAwMDAwIC0wNzAwCkBAIC0wLDAgKzEsMzI2IEBACisvKgorICogWUFGRlM6IFlldCBB bm90aGVyIEZsYXNoIEZpbGUgU3lzdGVtLiBBIE5BTkQtZmxhc2ggc3BlY2lmaWMgZmlsZSBz eXN0ZW0uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMDcgQWxlcGggT25lIEx0ZC4K KyAqICAgZm9yIFRvYnkgQ2h1cmNoaWxsIEx0ZCBhbmQgQnJpZ2h0c3RhciBFbmdpbmVlcmlu ZworICoKKyAqIENyZWF0ZWQgYnkgQ2hhcmxlcyBNYW5uaW5nIDxjaGFybGVzQGFsZXBoMS5j by51az4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxp c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKy8qCisgKiBU aGlzIGNvZGUgaW1wbGVtZW50cyB0aGUgRUNDIGFsZ29yaXRobSB1c2VkIGluIFNtYXJ0TWVk aWEuCisgKgorICogVGhlIEVDQyBjb21wcmlzZXMgMjIgYml0cyBvZiBwYXJpdHkgaW5mb3Jt YXRpb24gYW5kIGlzIHN0dWZmZWQgaW50byAzIGJ5dGVzLgorICogVGhlIHR3byB1bnVzZWQg Yml0IGFyZSBzZXQgdG8gMS4KKyAqIFRoZSBFQ0MgY2FuIGNvcnJlY3Qgc2luZ2xlIGJpdCBl cnJvcnMgaW4gYSAyNTYtYnl0ZSBwYWdlIG9mIGRhdGEuIFRodXMsIHR3byBzdWNoIEVDQwor ICogYmxvY2tzIGFyZSB1c2VkIG9uIGEgNTEyLWJ5dGUgTkFORCBwYWdlLgorICoKKyAqLwor CisvKiBUYWJsZSBnZW5lcmF0ZWQgYnkgZ2VuLWVjYy5jCisgKiBVc2luZyBhIHRhYmxlIG1l YW5zIHdlIGRvIG5vdCBoYXZlIHRvIGNhbGN1bGF0ZSBwMS4ucDQgYW5kIHAxJy4ucDQnCisg KiBmb3IgZWFjaCBieXRlIG9mIGRhdGEuIFRoZXNlIGFyZSBpbnN0ZWFkIHByb3ZpZGVkIGlu IGEgdGFibGUgaW4gYml0czcuLjIuCisgKiBCaXQgMCBvZiBlYWNoIGVudHJ5IGluZGljYXRl cyB3aGV0aGVyIHRoZSBlbnRyeSBoYXMgYW4gb2RkIG9yIGV2ZW4gcGFyaXR5LCBhbmQgdGhl cmVmb3JlCisgKiB0aGlzIGJ5dGVzIGluZmx1ZW5jZSBvbiB0aGUgbGluZSBwYXJpdHkuCisg Ki8KKworY29uc3QgY2hhciAqeWFmZnNfZWNjX2NfdmVyc2lvbiA9CisJIiRJZDogeWFmZnNf ZWNjLmMsdiAxLjExIDIwMDktMDMtMDYgMTc6MjA6NTAgd29va2V5IEV4cCAkIjsKKworI2lu Y2x1ZGUgInlwb3J0ZW52LmgiCisKKyNpbmNsdWRlICJ5YWZmc19lY2MuaCIKKworc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgY29sdW1uX3Bhcml0eV90YWJsZVtdID0geworCTB4MDAs IDB4NTUsIDB4NTksIDB4MGMsIDB4NjUsIDB4MzAsIDB4M2MsIDB4NjksCisJMHg2OSwgMHgz YywgMHgzMCwgMHg2NSwgMHgwYywgMHg1OSwgMHg1NSwgMHgwMCwKKwkweDk1LCAweGMwLCAw eGNjLCAweDk5LCAweGYwLCAweGE1LCAweGE5LCAweGZjLAorCTB4ZmMsIDB4YTksIDB4YTUs IDB4ZjAsIDB4OTksIDB4Y2MsIDB4YzAsIDB4OTUsCisJMHg5OSwgMHhjYywgMHhjMCwgMHg5 NSwgMHhmYywgMHhhOSwgMHhhNSwgMHhmMCwKKwkweGYwLCAweGE1LCAweGE5LCAweGZjLCAw eDk1LCAweGMwLCAweGNjLCAweDk5LAorCTB4MGMsIDB4NTksIDB4NTUsIDB4MDAsIDB4Njks IDB4M2MsIDB4MzAsIDB4NjUsCisJMHg2NSwgMHgzMCwgMHgzYywgMHg2OSwgMHgwMCwgMHg1 NSwgMHg1OSwgMHgwYywKKwkweGE1LCAweGYwLCAweGZjLCAweGE5LCAweGMwLCAweDk1LCAw eDk5LCAweGNjLAorCTB4Y2MsIDB4OTksIDB4OTUsIDB4YzAsIDB4YTksIDB4ZmMsIDB4ZjAs IDB4YTUsCisJMHgzMCwgMHg2NSwgMHg2OSwgMHgzYywgMHg1NSwgMHgwMCwgMHgwYywgMHg1 OSwKKwkweDU5LCAweDBjLCAweDAwLCAweDU1LCAweDNjLCAweDY5LCAweDY1LCAweDMwLAor CTB4M2MsIDB4NjksIDB4NjUsIDB4MzAsIDB4NTksIDB4MGMsIDB4MDAsIDB4NTUsCisJMHg1 NSwgMHgwMCwgMHgwYywgMHg1OSwgMHgzMCwgMHg2NSwgMHg2OSwgMHgzYywKKwkweGE5LCAw eGZjLCAweGYwLCAweGE1LCAweGNjLCAweDk5LCAweDk1LCAweGMwLAorCTB4YzAsIDB4OTUs IDB4OTksIDB4Y2MsIDB4YTUsIDB4ZjAsIDB4ZmMsIDB4YTksCisJMHhhOSwgMHhmYywgMHhm MCwgMHhhNSwgMHhjYywgMHg5OSwgMHg5NSwgMHhjMCwKKwkweGMwLCAweDk1LCAweDk5LCAw eGNjLCAweGE1LCAweGYwLCAweGZjLCAweGE5LAorCTB4M2MsIDB4NjksIDB4NjUsIDB4MzAs IDB4NTksIDB4MGMsIDB4MDAsIDB4NTUsCisJMHg1NSwgMHgwMCwgMHgwYywgMHg1OSwgMHgz MCwgMHg2NSwgMHg2OSwgMHgzYywKKwkweDMwLCAweDY1LCAweDY5LCAweDNjLCAweDU1LCAw eDAwLCAweDBjLCAweDU5LAorCTB4NTksIDB4MGMsIDB4MDAsIDB4NTUsIDB4M2MsIDB4Njks IDB4NjUsIDB4MzAsCisJMHhhNSwgMHhmMCwgMHhmYywgMHhhOSwgMHhjMCwgMHg5NSwgMHg5 OSwgMHhjYywKKwkweGNjLCAweDk5LCAweDk1LCAweGMwLCAweGE5LCAweGZjLCAweGYwLCAw eGE1LAorCTB4MGMsIDB4NTksIDB4NTUsIDB4MDAsIDB4NjksIDB4M2MsIDB4MzAsIDB4NjUs CisJMHg2NSwgMHgzMCwgMHgzYywgMHg2OSwgMHgwMCwgMHg1NSwgMHg1OSwgMHgwYywKKwkw eDk5LCAweGNjLCAweGMwLCAweDk1LCAweGZjLCAweGE5LCAweGE1LCAweGYwLAorCTB4ZjAs IDB4YTUsIDB4YTksIDB4ZmMsIDB4OTUsIDB4YzAsIDB4Y2MsIDB4OTksCisJMHg5NSwgMHhj MCwgMHhjYywgMHg5OSwgMHhmMCwgMHhhNSwgMHhhOSwgMHhmYywKKwkweGZjLCAweGE5LCAw eGE1LCAweGYwLCAweDk5LCAweGNjLCAweGMwLCAweDk1LAorCTB4MDAsIDB4NTUsIDB4NTks IDB4MGMsIDB4NjUsIDB4MzAsIDB4M2MsIDB4NjksCisJMHg2OSwgMHgzYywgMHgzMCwgMHg2 NSwgMHgwYywgMHg1OSwgMHg1NSwgMHgwMCwKK307CisKKy8qIENvdW50IHRoZSBiaXRzIGlu IGFuIHVuc2lnbmVkIGNoYXIgb3IgYSBVMzIgKi8KKworc3RhdGljIGludCB5YWZmc19Db3Vu dEJpdHModW5zaWduZWQgY2hhciB4KQoreworCWludCByID0gMDsKKwl3aGlsZSAoeCkgewor CQlpZiAoeCAmIDEpCisJCQlyKys7CisJCXggPj49IDE7CisJfQorCXJldHVybiByOworfQor CitzdGF0aWMgaW50IHlhZmZzX0NvdW50Qml0czMyKHVuc2lnbmVkIHgpCit7CisJaW50IHIg PSAwOworCXdoaWxlICh4KSB7CisJCWlmICh4ICYgMSkKKwkJCXIrKzsKKwkJeCA+Pj0gMTsK Kwl9CisJcmV0dXJuIHI7Cit9CisKKy8qIENhbGN1bGF0ZSB0aGUgRUNDIGZvciBhIDI1Ni1i eXRlIGJsb2NrIG9mIGRhdGEgKi8KK3ZvaWQgeWFmZnNfRUNDQ2FsY3VsYXRlKGNvbnN0IHVu c2lnbmVkIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGNoYXIgKmVjYykKK3sKKwl1bnNpZ25lZCBp bnQgaTsKKworCXVuc2lnbmVkIGNoYXIgY29sX3Bhcml0eSA9IDA7CisJdW5zaWduZWQgY2hh ciBsaW5lX3Bhcml0eSA9IDA7CisJdW5zaWduZWQgY2hhciBsaW5lX3Bhcml0eV9wcmltZSA9 IDA7CisJdW5zaWduZWQgY2hhciB0OworCXVuc2lnbmVkIGNoYXIgYjsKKworCWZvciAoaSA9 IDA7IGkgPCAyNTY7IGkrKykgeworCQliID0gY29sdW1uX3Bhcml0eV90YWJsZVsqZGF0YSsr XTsKKwkJY29sX3Bhcml0eSBePSBiOworCisJCWlmIChiICYgMHgwMSkgewkJLyogb2RkIG51 bWJlciBvZiBiaXRzIGluIHRoZSBieXRlICovCisJCQlsaW5lX3Bhcml0eSBePSBpOworCQkJ bGluZV9wYXJpdHlfcHJpbWUgXj0gfmk7CisJCX0KKwl9CisKKwllY2NbMl0gPSAofmNvbF9w YXJpdHkpIHwgMHgwMzsKKworCXQgPSAwOworCWlmIChsaW5lX3Bhcml0eSAmIDB4ODApCisJ CXQgfD0gMHg4MDsKKwlpZiAobGluZV9wYXJpdHlfcHJpbWUgJiAweDgwKQorCQl0IHw9IDB4 NDA7CisJaWYgKGxpbmVfcGFyaXR5ICYgMHg0MCkKKwkJdCB8PSAweDIwOworCWlmIChsaW5l X3Bhcml0eV9wcmltZSAmIDB4NDApCisJCXQgfD0gMHgxMDsKKwlpZiAobGluZV9wYXJpdHkg JiAweDIwKQorCQl0IHw9IDB4MDg7CisJaWYgKGxpbmVfcGFyaXR5X3ByaW1lICYgMHgyMCkK KwkJdCB8PSAweDA0OworCWlmIChsaW5lX3Bhcml0eSAmIDB4MTApCisJCXQgfD0gMHgwMjsK KwlpZiAobGluZV9wYXJpdHlfcHJpbWUgJiAweDEwKQorCQl0IHw9IDB4MDE7CisJZWNjWzFd ID0gfnQ7CisKKwl0ID0gMDsKKwlpZiAobGluZV9wYXJpdHkgJiAweDA4KQorCQl0IHw9IDB4 ODA7CisJaWYgKGxpbmVfcGFyaXR5X3ByaW1lICYgMHgwOCkKKwkJdCB8PSAweDQwOworCWlm IChsaW5lX3Bhcml0eSAmIDB4MDQpCisJCXQgfD0gMHgyMDsKKwlpZiAobGluZV9wYXJpdHlf cHJpbWUgJiAweDA0KQorCQl0IHw9IDB4MTA7CisJaWYgKGxpbmVfcGFyaXR5ICYgMHgwMikK KwkJdCB8PSAweDA4OworCWlmIChsaW5lX3Bhcml0eV9wcmltZSAmIDB4MDIpCisJCXQgfD0g MHgwNDsKKwlpZiAobGluZV9wYXJpdHkgJiAweDAxKQorCQl0IHw9IDB4MDI7CisJaWYgKGxp bmVfcGFyaXR5X3ByaW1lICYgMHgwMSkKKwkJdCB8PSAweDAxOworCWVjY1swXSA9IH50Owor CisjaWZkZWYgQ09ORklHX1lBRkZTX0VDQ19XUk9OR19PUkRFUgorCS8qIFN3YXAgdGhlIGJ5 dGVzIGludG8gdGhlIHdyb25nIG9yZGVyICovCisJdCA9IGVjY1swXTsKKwllY2NbMF0gPSBl Y2NbMV07CisJZWNjWzFdID0gdDsKKyNlbmRpZgorfQorCisKKy8qIENvcnJlY3QgdGhlIEVD QyBvbiBhIDI1NiBieXRlIGJsb2NrIG9mIGRhdGEgKi8KKworaW50IHlhZmZzX0VDQ0NvcnJl Y3QodW5zaWduZWQgY2hhciAqZGF0YSwgdW5zaWduZWQgY2hhciAqcmVhZF9lY2MsCisJCSAg ICAgY29uc3QgdW5zaWduZWQgY2hhciAqdGVzdF9lY2MpCit7CisJdW5zaWduZWQgY2hhciBk MCwgZDEsIGQyOwkvKiBkZWx0YXMgKi8KKworCWQwID0gcmVhZF9lY2NbMF0gXiB0ZXN0X2Vj Y1swXTsKKwlkMSA9IHJlYWRfZWNjWzFdIF4gdGVzdF9lY2NbMV07CisJZDIgPSByZWFkX2Vj Y1syXSBeIHRlc3RfZWNjWzJdOworCisJaWYgKChkMCB8IGQxIHwgZDIpID09IDApCisJCXJl dHVybiAwOyAvKiBubyBlcnJvciAqLworCisJaWYgKCgoZDAgXiAoZDAgPj4gMSkpICYgMHg1 NSkgPT0gMHg1NSAmJgorCSAgICAoKGQxIF4gKGQxID4+IDEpKSAmIDB4NTUpID09IDB4NTUg JiYKKwkgICAgKChkMiBeIChkMiA+PiAxKSkgJiAweDU0KSA9PSAweDU0KSB7CisJCS8qIFNp bmdsZSBiaXQgKHJlY292ZXJhYmxlKSBlcnJvciBpbiBkYXRhICovCisKKwkJdW5zaWduZWQg Ynl0ZTsKKwkJdW5zaWduZWQgYml0OworCisjaWZkZWYgQ09ORklHX1lBRkZTX0VDQ19XUk9O R19PUkRFUgorCQkvKiBzd2FwIHRoZSBieXRlcyB0byBjb3JyZWN0IGZvciB0aGUgd3Jvbmcg b3JkZXIgKi8KKwkJdW5zaWduZWQgY2hhciB0OworCisJCXQgPSBkMDsKKwkJZDAgPSBkMTsK KwkJZDEgPSB0OworI2VuZGlmCisKKwkJYml0ID0gYnl0ZSA9IDA7CisKKwkJaWYgKGQxICYg MHg4MCkKKwkJCWJ5dGUgfD0gMHg4MDsKKwkJaWYgKGQxICYgMHgyMCkKKwkJCWJ5dGUgfD0g MHg0MDsKKwkJaWYgKGQxICYgMHgwOCkKKwkJCWJ5dGUgfD0gMHgyMDsKKwkJaWYgKGQxICYg MHgwMikKKwkJCWJ5dGUgfD0gMHgxMDsKKwkJaWYgKGQwICYgMHg4MCkKKwkJCWJ5dGUgfD0g MHgwODsKKwkJaWYgKGQwICYgMHgyMCkKKwkJCWJ5dGUgfD0gMHgwNDsKKwkJaWYgKGQwICYg MHgwOCkKKwkJCWJ5dGUgfD0gMHgwMjsKKwkJaWYgKGQwICYgMHgwMikKKwkJCWJ5dGUgfD0g MHgwMTsKKworCQlpZiAoZDIgJiAweDgwKQorCQkJYml0IHw9IDB4MDQ7CisJCWlmIChkMiAm IDB4MjApCisJCQliaXQgfD0gMHgwMjsKKwkJaWYgKGQyICYgMHgwOCkKKwkJCWJpdCB8PSAw eDAxOworCisJCWRhdGFbYnl0ZV0gXj0gKDEgPDwgYml0KTsKKworCQlyZXR1cm4gMTsgLyog Q29ycmVjdGVkIHRoZSBlcnJvciAqLworCX0KKworCWlmICgoeWFmZnNfQ291bnRCaXRzKGQw KSArCisJICAgICB5YWZmc19Db3VudEJpdHMoZDEpICsKKwkgICAgIHlhZmZzX0NvdW50Qml0 cyhkMikpID09ICAxKSB7CisJCS8qIFJlY2NvdmVyYWJsZSBlcnJvciBpbiBlY2MgKi8KKwor CQlyZWFkX2VjY1swXSA9IHRlc3RfZWNjWzBdOworCQlyZWFkX2VjY1sxXSA9IHRlc3RfZWNj WzFdOworCQlyZWFkX2VjY1syXSA9IHRlc3RfZWNjWzJdOworCisJCXJldHVybiAxOyAvKiBD b3JyZWN0ZWQgdGhlIGVycm9yICovCisJfQorCisJLyogVW5yZWNvdmVyYWJsZSBlcnJvciAq LworCisJcmV0dXJuIC0xOworCit9CisKKworLyoKKyAqIEVDQ3h4eE90aGVyIGRvZXMgRUND IGNhbGNzIG9uIGFyYml0cmFyeSBuIGJ5dGVzIG9mIGRhdGEKKyAqLwordm9pZCB5YWZmc19F Q0NDYWxjdWxhdGVPdGhlcihjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCB1bnNpZ25lZCBu Qnl0ZXMsCisJCQkJeWFmZnNfRUNDT3RoZXIgKmVjY090aGVyKQoreworCXVuc2lnbmVkIGlu dCBpOworCisJdW5zaWduZWQgY2hhciBjb2xfcGFyaXR5ID0gMDsKKwl1bnNpZ25lZCBsaW5l X3Bhcml0eSA9IDA7CisJdW5zaWduZWQgbGluZV9wYXJpdHlfcHJpbWUgPSAwOworCXVuc2ln bmVkIGNoYXIgYjsKKworCWZvciAoaSA9IDA7IGkgPCBuQnl0ZXM7IGkrKykgeworCQliID0g Y29sdW1uX3Bhcml0eV90YWJsZVsqZGF0YSsrXTsKKwkJY29sX3Bhcml0eSBePSBiOworCisJ CWlmIChiICYgMHgwMSkJIHsKKwkJCS8qIG9kZCBudW1iZXIgb2YgYml0cyBpbiB0aGUgYnl0 ZSAqLworCQkJbGluZV9wYXJpdHkgXj0gaTsKKwkJCWxpbmVfcGFyaXR5X3ByaW1lIF49IH5p OworCQl9CisKKwl9CisKKwllY2NPdGhlci0+Y29sUGFyaXR5ID0gKGNvbF9wYXJpdHkgPj4g MikgJiAweDNmOworCWVjY090aGVyLT5saW5lUGFyaXR5ID0gbGluZV9wYXJpdHk7CisJZWNj T3RoZXItPmxpbmVQYXJpdHlQcmltZSA9IGxpbmVfcGFyaXR5X3ByaW1lOworfQorCitpbnQg eWFmZnNfRUNDQ29ycmVjdE90aGVyKHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVuc2lnbmVkIG5C eXRlcywKKwkJCXlhZmZzX0VDQ090aGVyICpyZWFkX2VjYywKKwkJCWNvbnN0IHlhZmZzX0VD Q090aGVyICp0ZXN0X2VjYykKK3sKKwl1bnNpZ25lZCBjaGFyIGNEZWx0YTsJLyogY29sdW1u IHBhcml0eSBkZWx0YSAqLworCXVuc2lnbmVkIGxEZWx0YTsJLyogbGluZSBwYXJpdHkgZGVs dGEgKi8KKwl1bnNpZ25lZCBsRGVsdGFQcmltZTsJLyogbGluZSBwYXJpdHkgZGVsdGEgKi8K Kwl1bnNpZ25lZCBiaXQ7CisKKwljRGVsdGEgPSByZWFkX2VjYy0+Y29sUGFyaXR5IF4gdGVz dF9lY2MtPmNvbFBhcml0eTsKKwlsRGVsdGEgPSByZWFkX2VjYy0+bGluZVBhcml0eSBeIHRl c3RfZWNjLT5saW5lUGFyaXR5OworCWxEZWx0YVByaW1lID0gcmVhZF9lY2MtPmxpbmVQYXJp dHlQcmltZSBeIHRlc3RfZWNjLT5saW5lUGFyaXR5UHJpbWU7CisKKwlpZiAoKGNEZWx0YSB8 IGxEZWx0YSB8IGxEZWx0YVByaW1lKSA9PSAwKQorCQlyZXR1cm4gMDsgLyogbm8gZXJyb3Ig Ki8KKworCWlmIChsRGVsdGEgPT0gfmxEZWx0YVByaW1lICYmCisJICAgICgoKGNEZWx0YSBe IChjRGVsdGEgPj4gMSkpICYgMHgxNSkgPT0gMHgxNSkpIHsKKwkJLyogU2luZ2xlIGJpdCAo cmVjb3ZlcmFibGUpIGVycm9yIGluIGRhdGEgKi8KKworCQliaXQgPSAwOworCisJCWlmIChj RGVsdGEgJiAweDIwKQorCQkJYml0IHw9IDB4MDQ7CisJCWlmIChjRGVsdGEgJiAweDA4KQor CQkJYml0IHw9IDB4MDI7CisJCWlmIChjRGVsdGEgJiAweDAyKQorCQkJYml0IHw9IDB4MDE7 CisKKwkJaWYgKGxEZWx0YSA+PSBuQnl0ZXMpCisJCQlyZXR1cm4gLTE7CisKKwkJZGF0YVts RGVsdGFdIF49ICgxIDw8IGJpdCk7CisKKwkJcmV0dXJuIDE7IC8qIGNvcnJlY3RlZCAqLwor CX0KKworCWlmICgoeWFmZnNfQ291bnRCaXRzMzIobERlbHRhKSArIHlhZmZzX0NvdW50Qml0 czMyKGxEZWx0YVByaW1lKSArCisJCQl5YWZmc19Db3VudEJpdHMoY0RlbHRhKSkgPT0gMSkg eworCQkvKiBSZWNjb3ZlcmFibGUgZXJyb3IgaW4gZWNjICovCisKKwkJKnJlYWRfZWNjID0g KnRlc3RfZWNjOworCQlyZXR1cm4gMTsgLyogY29ycmVjdGVkICovCisJfQorCisJLyogVW5y ZWNvdmVyYWJsZSBlcnJvciAqLworCisJcmV0dXJuIC0xOworfQpkaWZmIC11IC0tbmV3LWZp bGUgLS1yZWN1cnNpdmUgbGludXgtMi42LjI5LjYub3JpZy9mcy95YWZmczIveWFmZnNfZWNj LmggbGludXgtMi42LjI5LjYubW9kL2ZzL3lhZmZzMi95YWZmc19lY2MuaAotLS0gbGludXgt Mi42LjI5LjYub3JpZy9mcy95YWZmczIveWFmZnNfZWNjLmgJMTk2OS0xMi0zMSAxNzowMDow MC4wMDAwMDAwMDAgLTA3MDAKKysrIGxpbnV4LTIuNi4yOS42Lm1vZC9mcy95YWZmczIveWFm ZnNfZWNjLmgJMjAwOS0wNy0yMSAxMToyODoxOC4wMDAwMDAwMDAgLTA3MDAKQEAgLTAsMCAr MSw0NCBAQAorLyoKKyAqIFlBRkZTOiBZZXQgYW5vdGhlciBGbGFzaCBGaWxlIFN5c3RlbSAu IEEgTkFORC1mbGFzaCBzcGVjaWZpYyBmaWxlIHN5c3RlbS4KKyAqCisgKiBDb3B5cmlnaHQg KEMpIDIwMDItMjAwNyBBbGVwaCBPbmUgTHRkLgorICogICBmb3IgVG9ieSBDaHVyY2hpbGwg THRkIGFuZCBCcmlnaHRzdGFyIEVuZ2luZWVyaW5nCisgKgorICogQ3JlYXRlZCBieSBDaGFy bGVzIE1hbm5pbmcgPGNoYXJsZXNAYWxlcGgxLmNvLnVrPgorICoKKyAqIFRoaXMgcHJvZ3Jh bSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogTm90ZTogT25seSBZQUZGUyBoZWFkZXJz IGFyZSBMR1BMLCBZQUZGUyBDIGNvZGUgaXMgY292ZXJlZCBieSBHUEwuCisgKi8KKworLyoK KyAqIFRoaXMgY29kZSBpbXBsZW1lbnRzIHRoZSBFQ0MgYWxnb3JpdGhtIHVzZWQgaW4gU21h cnRNZWRpYS4KKyAqCisgKiBUaGUgRUNDIGNvbXByaXNlcyAyMiBiaXRzIG9mIHBhcml0eSBp bmZvcm1hdGlvbiBhbmQgaXMgc3R1ZmZlZCBpbnRvIDMgYnl0ZXMuCisgKiBUaGUgdHdvIHVu dXNlZCBiaXQgYXJlIHNldCB0byAxLgorICogVGhlIEVDQyBjYW4gY29ycmVjdCBzaW5nbGUg Yml0IGVycm9ycyBpbiBhIDI1Ni1ieXRlIHBhZ2Ugb2YgZGF0YS4gVGh1cywgdHdvIHN1Y2gg RUNDCisgKiBibG9ja3MgYXJlIHVzZWQgb24gYSA1MTItYnl0ZSBOQU5EIHBhZ2UuCisgKgor ICovCisKKyNpZm5kZWYgX19ZQUZGU19FQ0NfSF9fCisjZGVmaW5lIF9fWUFGRlNfRUNDX0hf XworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgY2hhciBjb2xQYXJpdHk7CisJdW5z aWduZWQgbGluZVBhcml0eTsKKwl1bnNpZ25lZCBsaW5lUGFyaXR5UHJpbWU7Cit9IHlhZmZz X0VDQ090aGVyOworCit2b2lkIHlhZmZzX0VDQ0NhbGN1bGF0ZShjb25zdCB1bnNpZ25lZCBj aGFyICpkYXRhLCB1bnNpZ25lZCBjaGFyICplY2MpOworaW50IHlhZmZzX0VDQ0NvcnJlY3Qo dW5zaWduZWQgY2hhciAqZGF0YSwgdW5zaWduZWQgY2hhciAqcmVhZF9lY2MsCisJCWNvbnN0 IHVuc2lnbmVkIGNoYXIgKnRlc3RfZWNjKTsKKwordm9pZCB5YWZmc19FQ0NDYWxjdWxhdGVP dGhlcihjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCB1bnNpZ25lZCBuQnl0ZXMsCisJCQl5 YWZmc19FQ0NPdGhlciAqZWNjKTsKK2ludCB5YWZmc19FQ0NDb3JyZWN0T3RoZXIodW5zaWdu ZWQgY2hhciAqZGF0YSwgdW5zaWduZWQgbkJ5dGVzLAorCQkJeWFmZnNfRUNDT3RoZXIgKnJl YWRfZWNjLAorCQkJY29uc3QgeWFmZnNfRUNDT3RoZXIgKnRlc3RfZWNjKTsKKyNlbmRpZgpk aWZmIC11IC0tbmV3LWZpbGUgLS1yZWN1cnNpdmUgbGludXgtMi42LjI5LjYub3JpZy9mcy95 YWZmczIveWFmZnNfZnMuYyBsaW51eC0yLjYuMjkuNi5tb2QvZnMveWFmZnMyL3lhZmZzX2Zz LmMKLS0tIGxpbnV4LTIuNi4yOS42Lm9yaWcvZnMveWFmZnMyL3lhZmZzX2ZzLmMJMTk2OS0x Mi0zMSAxNzowMDowMC4wMDAwMDAwMDAgLTA3MDAKKysrIGxpbnV4LTIuNi4yOS42Lm1vZC9m cy95YWZmczIveWFmZnNfZnMuYwkyMDA5LTA3LTIxIDExOjI4OjE4LjAwMDAwMDAwMCAtMDcw MApAQCAtMCwwICsxLDI1NDIgQEAKKy8qCisgKiBZQUZGUzogWWV0IEFub3RoZXIgRmxhc2gg RmlsZSBTeXN0ZW0uIEEgTkFORC1mbGFzaCBzcGVjaWZpYyBmaWxlIHN5c3RlbS4KKyAqCisg KiBDb3B5cmlnaHQgKEMpIDIwMDItMjAwOSBBbGVwaCBPbmUgTHRkLgorICogICBmb3IgVG9i eSBDaHVyY2hpbGwgTHRkIGFuZCBCcmlnaHRzdGFyIEVuZ2luZWVyaW5nCisgKgorICogQ3Jl YXRlZCBieSBDaGFybGVzIE1hbm5pbmcgPGNoYXJsZXNAYWxlcGgxLmNvLnVrPgorICogQWNr bm93bGVkZ2VtZW50czoKKyAqIEx1YyB2YW4gT29zdGVuUnljayBmb3IgbnVtZXJvdXMgcGF0 Y2hlcy4KKyAqIE5pY2sgQmFuZSBmb3IgbnVtZXJvdXMgcGF0Y2hlcy4KKyAqIE5pY2sgQmFu ZSBmb3IgMi41LzIuNiBpbnRlZ3JhdGlvbi4KKyAqIEFuZHJhcyBUb3RoIGZvciBta25vZCBy ZGV2IGlzc3VlLgorICogTWljaGFlbCBGaXNjaGVyIGZvciBmaW5kaW5nIHRoZSBwcm9ibGVt IHdpdGggaW5vZGUgaW5jb25zaXN0ZW5jeS4KKyAqIFNvbWUgY29kZSBib2RpbHkgbGlmdGVk IGZyb20gSkZGUworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICog cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworLyoK KyAqCisgKiBUaGlzIGlzIHRoZSBmaWxlIHN5c3RlbSBmcm9udC1lbmQgdG8gWUFGRlMgdGhh dCBob29rcyBpdCB1cCB0bworICogdGhlIFZGUy4KKyAqCisgKiBTcGVjaWFsIG5vdGVzOgor ICogPj4gMi40OiBzYi0+dS5nZW5lcmljX3NicCBwb2ludHMgdG8gdGhlIHlhZmZzX0Rldmlj ZSBhc3NvY2lhdGVkIHdpdGgKKyAqICAgICAgICAgdGhpcyBzdXBlcmJsb2NrCisgKiA+PiAy LjY6IHNiLT5zX2ZzX2luZm8gIHBvaW50cyB0byB0aGUgeWFmZnNfRGV2aWNlIGFzc29jaWF0 ZWQgd2l0aCB0aGlzCisgKiAgICAgICAgIHN1cGVyYmxvY2sKKyAqID4+IGlub2RlLT51Lmdl bmVyaWNfaXAgcG9pbnRzIHRvIHRoZSBhc3NvY2lhdGVkIHlhZmZzX09iamVjdC4KKyAqLwor Citjb25zdCBjaGFyICp5YWZmc19mc19jX3ZlcnNpb24gPQorICAgICIkSWQ6IHlhZmZzX2Zz LmMsdiAxLjgxIDIwMDktMDUtMjYgMDE6MjI6NDQgY2hhcmxlcyBFeHAgJCI7CitleHRlcm4g Y29uc3QgY2hhciAqeWFmZnNfZ3V0c19jX3ZlcnNpb247CisKKyNpbmNsdWRlIDxsaW51eC92 ZXJzaW9uLmg+CisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIs IDYsIDE5KSkKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNlbmRpZgorI2luY2x1ZGUg PGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUg PGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGlu dXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgv c21wX2xvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisjaW5jbHVkZSA8bGlu dXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUg PGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisKKyNpbmNsdWRl ICJhc20vZGl2NjQuaCIKKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVS U0lPTigyLCA1LCAwKSkKKworI2luY2x1ZGUgPGxpbnV4L3N0YXRmcy5oPgkvKiBBZGRlZCBO Q0IgMTUtOC0yMDAzICovCisjaW5jbHVkZSA8bGludXgvc3RhdGZzLmg+CisjZGVmaW5lIFVu bG9ja1BhZ2UocCkgdW5sb2NrX3BhZ2UocCkKKyNkZWZpbmUgUGFnZV9VcHRvZGF0ZShwYWdl KQl0ZXN0X2JpdChQR191cHRvZGF0ZSwgJihwYWdlKS0+ZmxhZ3MpCisKKy8qIEZJWE1FOiB1 c2Ugc2ItPnNfaWQgaW5zdGVhZCA/ICovCisjZGVmaW5lIHlhZmZzX2Rldm5hbWUoc2IsIGJ1 ZikJYmRldm5hbWUoc2ItPnNfYmRldiwgYnVmKQorCisjZWxzZQorCisjaW5jbHVkZSA8bGlu dXgvbG9ja3MuaD4KKyNkZWZpbmUJQkRFVk5BTUVfU0laRQkJMAorI2RlZmluZQl5YWZmc19k ZXZuYW1lKHNiLCBidWYpCWtkZXZuYW1lKHNiLT5zX2RldikKKworI2lmIChMSU5VWF9WRVJT SU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLCA1LCAwKSkKKy8qIGFkZGVkIE5DQiAyNi81 LzIwMDYgZm9yIDIuNC4yNS12cnMyLXRjbDEga2VybmVsICovCisjZGVmaW5lIF9fdXNlcgor I2VuZGlmCisKKyNlbmRpZgorCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9W RVJTSU9OKDIsIDYsIDI2KSkKKyNkZWZpbmUgWVBST0NfUk9PVCAgKCZwcm9jX3Jvb3QpCisj ZWxzZQorI2RlZmluZSBZUFJPQ19ST09UICBOVUxMCisjZW5kaWYKKworI2lmIChMSU5VWF9W RVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLCA2LCAxNykpCisjZGVmaW5lIFdSSVRF X1NJWkVfU1RSICJ3cml0ZXNpemUiCisjZGVmaW5lIFdSSVRFX1NJWkUobXRkKSAoKG10ZCkt PndyaXRlc2l6ZSkKKyNlbHNlCisjZGVmaW5lIFdSSVRFX1NJWkVfU1RSICJvb2JibG9jayIK KyNkZWZpbmUgV1JJVEVfU0laRShtdGQpICgobXRkKS0+b29iYmxvY2spCisjZW5kaWYKKwor I2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLCA2LCAyNykpCisj ZGVmaW5lIFlBRkZTX1VTRV9XUklURV9CRUdJTl9FTkQgMQorI2Vsc2UKKyNkZWZpbmUgWUFG RlNfVVNFX1dSSVRFX0JFR0lOX0VORCAwCisjZW5kaWYKKworI2lmIChMSU5VWF9WRVJTSU9O X0NPREUgPiBLRVJORUxfVkVSU0lPTigyLCA2LCAyOCkpCitzdGF0aWMgdWludDMyX3QgWUNB TENCTE9DS1ModWludDY0X3QgcGFydGl0aW9uX3NpemUsIHVpbnQzMl90IGJsb2NrX3NpemUp Cit7CisJdWludDY0X3QgcmVzdWx0ID0gcGFydGl0aW9uX3NpemU7CisJZG9fZGl2KHJlc3Vs dCwgYmxvY2tfc2l6ZSk7CisJcmV0dXJuICh1aW50MzJfdClyZXN1bHQ7Cit9CisjZWxzZQor I2RlZmluZSBZQ0FMQ0JMT0NLUyhzLCBiKSAoKHMpLyhiKSkKKyNlbmRpZgorCisjaW5jbHVk ZSA8bGludXgvdWFjY2Vzcy5oPgorCisjaW5jbHVkZSAieXBvcnRlbnYuaCIKKyNpbmNsdWRl ICJ5YWZmc19ndXRzLmgiCisKKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVk ZSAieWFmZnNfbXRkaWYuaCIKKyNpbmNsdWRlICJ5YWZmc19tdGRpZjEuaCIKKyNpbmNsdWRl ICJ5YWZmc19tdGRpZjIuaCIKKwordW5zaWduZWQgaW50IHlhZmZzX3RyYWNlTWFzayA9IFlB RkZTX1RSQUNFX0JBRF9CTE9DS1M7Cit1bnNpZ25lZCBpbnQgeWFmZnNfd3JfYXR0ZW1wdHMg PSBZQUZGU19XUl9BVFRFTVBUUzsKK3Vuc2lnbmVkIGludCB5YWZmc19hdXRvX2NoZWNrcG9p bnQgPSAxOworCisvKiBNb2R1bGUgUGFyYW1ldGVycyAqLworI2lmIChMSU5VWF9WRVJTSU9O X0NPREUgPiBLRVJORUxfVkVSU0lPTigyLCA1LCAwKSkKK21vZHVsZV9wYXJhbSh5YWZmc190 cmFjZU1hc2ssIHVpbnQsIDA2NDQpOworbW9kdWxlX3BhcmFtKHlhZmZzX3dyX2F0dGVtcHRz LCB1aW50LCAwNjQ0KTsKK21vZHVsZV9wYXJhbSh5YWZmc19hdXRvX2NoZWNrcG9pbnQsIHVp bnQsIDA2NDQpOworI2Vsc2UKK01PRFVMRV9QQVJNKHlhZmZzX3RyYWNlTWFzaywgImkiKTsK K01PRFVMRV9QQVJNKHlhZmZzX3dyX2F0dGVtcHRzLCAiaSIpOworTU9EVUxFX1BBUk0oeWFm ZnNfYXV0b19jaGVja3BvaW50LCAiaSIpOworI2VuZGlmCisKKyNpZiAoTElOVVhfVkVSU0lP Tl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiwgNiwgMjUpKQorLyogdXNlIGlnZXQgYW5kIHJl YWRfaW5vZGUgKi8KKyNkZWZpbmUgWV9JR0VUKHNiLCBpbnVtKSBpZ2V0KChzYiksIChpbnVt KSkKK3N0YXRpYyB2b2lkIHlhZmZzX3JlYWRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7 CisKKyNlbHNlCisvKiBDYWxsIGxvY2FsIGVxdWl2YWxlbnQgKi8KKyNkZWZpbmUgWUFGRlNf VVNFX09XTl9JR0VUCisjZGVmaW5lIFlfSUdFVChzYiwgaW51bSkgeWFmZnNfaWdldCgoc2Ip LCAoaW51bSkpCisKK3N0YXRpYyBzdHJ1Y3QgaW5vZGUgKnlhZmZzX2lnZXQoc3RydWN0IHN1 cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBpbm8pOworI2VuZGlmCisKKy8qI2RlZmlu ZSBUKHgpIHByaW50ayB4ICovCisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVM X1ZFUlNJT04oMiwgNiwgMTgpKQorI2RlZmluZSB5YWZmc19Jbm9kZVRvT2JqZWN0TFYoaXB0 cikgKChpcHRyKS0+aV9wcml2YXRlKQorI2Vsc2UKKyNkZWZpbmUgeWFmZnNfSW5vZGVUb09i amVjdExWKGlwdHIpICgoaXB0ciktPnUuZ2VuZXJpY19pcCkKKyNlbmRpZgorCisjZGVmaW5l IHlhZmZzX0lub2RlVG9PYmplY3QoaXB0cikgKCh5YWZmc19PYmplY3QgKikoeWFmZnNfSW5v ZGVUb09iamVjdExWKGlwdHIpKSkKKyNkZWZpbmUgeWFmZnNfRGVudHJ5VG9PYmplY3QoZHB0 cikgeWFmZnNfSW5vZGVUb09iamVjdCgoZHB0ciktPmRfaW5vZGUpCisKKyNpZiAoTElOVVhf VkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiwgNSwgMCkpCisjZGVmaW5lIHlhZmZz X1N1cGVyVG9EZXZpY2Uoc2IpCSgoeWFmZnNfRGV2aWNlICopc2ItPnNfZnNfaW5mbykKKyNl bHNlCisjZGVmaW5lIHlhZmZzX1N1cGVyVG9EZXZpY2Uoc2IpCSgoeWFmZnNfRGV2aWNlICop c2ItPnUuZ2VuZXJpY19zYnApCisjZW5kaWYKKworCisjZGVmaW5lIHVwZGF0ZV9kaXJfdGlt ZShkaXIpIGRvIHtcCisJCQkoZGlyKS0+aV9jdGltZSA9IChkaXIpLT5pX210aW1lID0gQ1VS UkVOVF9USU1FOyBcCisJCX0gd2hpbGUoMCkKKwkJCitzdGF0aWMgdm9pZCB5YWZmc19wdXRf c3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CisKK3N0YXRpYyBzc2l6ZV90IHlhZmZz X2ZpbGVfd3JpdGUoc3RydWN0IGZpbGUgKmYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IG4s CisJCQkJbG9mZl90ICpwb3MpOworc3RhdGljIHNzaXplX3QgeWFmZnNfaG9sZF9zcGFjZShz dHJ1Y3QgZmlsZSAqZik7CitzdGF0aWMgdm9pZCB5YWZmc19yZWxlYXNlX3NwYWNlKHN0cnVj dCBmaWxlICpmKTsKKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lP TigyLCA2LCAxNykpCitzdGF0aWMgaW50IHlhZmZzX2ZpbGVfZmx1c2goc3RydWN0IGZpbGUg KmZpbGUsIGZsX293bmVyX3QgaWQpOworI2Vsc2UKK3N0YXRpYyBpbnQgeWFmZnNfZmlsZV9m bHVzaChzdHJ1Y3QgZmlsZSAqZmlsZSk7CisjZW5kaWYKKworc3RhdGljIGludCB5YWZmc19z eW5jX29iamVjdChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAor CQkJCWludCBkYXRhc3luYyk7CisKK3N0YXRpYyBpbnQgeWFmZnNfcmVhZGRpcihzdHJ1Y3Qg ZmlsZSAqZiwgdm9pZCAqZGlyZW50LCBmaWxsZGlyX3QgZmlsbGRpcik7CisKKyNpZiAoTElO VVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiwgNSwgMCkpCitzdGF0aWMgaW50 IHlhZmZzX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5 LCBpbnQgbW9kZSwKKwkJCXN0cnVjdCBuYW1laWRhdGEgKm4pOworc3RhdGljIHN0cnVjdCBk ZW50cnkgKnlhZmZzX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAq ZGVudHJ5LAorCQkJCQlzdHJ1Y3QgbmFtZWlkYXRhICpuKTsKKyNlbHNlCitzdGF0aWMgaW50 IHlhZmZzX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5 LCBpbnQgbW9kZSk7CitzdGF0aWMgc3RydWN0IGRlbnRyeSAqeWFmZnNfbG9va3VwKHN0cnVj dCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOworI2VuZGlmCitzdGF0aWMg aW50IHlhZmZzX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2Rl ICpkaXIsCisJCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOworc3RhdGljIGludCB5YWZmc191 bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7CitzdGF0 aWMgaW50IHlhZmZzX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkg KmRlbnRyeSwKKwkJCWNvbnN0IGNoYXIgKnN5bW5hbWUpOworc3RhdGljIGludCB5YWZmc19t a2RpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9k ZSk7CisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiwgNSwg MCkpCitzdGF0aWMgaW50IHlhZmZzX21rbm9kKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3Qg ZGVudHJ5ICpkZW50cnksIGludCBtb2RlLAorCQkJZGV2X3QgZGV2KTsKKyNlbHNlCitzdGF0 aWMgaW50IHlhZmZzX21rbm9kKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpk ZW50cnksIGludCBtb2RlLAorCQkJaW50IGRldik7CisjZW5kaWYKK3N0YXRpYyBpbnQgeWFm ZnNfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2Rl bnRyeSwKKwkJCXN0cnVjdCBpbm9kZSAqbmV3X2Rpciwgc3RydWN0IGRlbnRyeSAqbmV3X2Rl bnRyeSk7CitzdGF0aWMgaW50IHlhZmZzX3NldGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5 LCBzdHJ1Y3QgaWF0dHIgKmF0dHIpOworCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+IEtF Uk5FTF9WRVJTSU9OKDIsIDYsIDE3KSkKK3N0YXRpYyBpbnQgeWFmZnNfc3luY19mcyhzdHJ1 Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgd2FpdCk7CitzdGF0aWMgdm9pZCB5YWZmc193cml0 ZV9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKKyNlbHNlCitzdGF0aWMgaW50IHlh ZmZzX3N5bmNfZnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CitzdGF0aWMgaW50IHlhZmZz X3dyaXRlX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOworI2VuZGlmCisKKyNpZiAo TElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiwgNiwgMTcpKQorc3RhdGlj IGludCB5YWZmc19zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRm cyAqYnVmKTsKKyNlbGlmIChMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigy LCA1LCAwKSkKK3N0YXRpYyBpbnQgeWFmZnNfc3RhdGZzKHN0cnVjdCBzdXBlcl9ibG9jayAq c2IsIHN0cnVjdCBrc3RhdGZzICpidWYpOworI2Vsc2UKK3N0YXRpYyBpbnQgeWFmZnNfc3Rh dGZzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBzdGF0ZnMgKmJ1Zik7CisjZW5k aWYKKworI2lmZGVmIFlBRkZTX0hBU19QVVRfSU5PREUKK3N0YXRpYyB2b2lkIHlhZmZzX3B1 dF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKKyNlbmRpZgorCitzdGF0aWMgdm9pZCB5 YWZmc19kZWxldGVfaW5vZGUoc3RydWN0IGlub2RlICopOworc3RhdGljIHZvaWQgeWFmZnNf Y2xlYXJfaW5vZGUoc3RydWN0IGlub2RlICopOworCitzdGF0aWMgaW50IHlhZmZzX3JlYWRw YWdlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgcGFnZSAqcGFnZSk7CisjaWYgKExJTlVY X1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsIDUsIDApKQorc3RhdGljIGludCB5 YWZmc193cml0ZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB3cml0ZWJhY2tfY29u dHJvbCAqd2JjKTsKKyNlbHNlCitzdGF0aWMgaW50IHlhZmZzX3dyaXRlcGFnZShzdHJ1Y3Qg cGFnZSAqcGFnZSk7CisjZW5kaWYKKworCisjaWYgKFlBRkZTX1VTRV9XUklURV9CRUdJTl9F TkQgIT0gMCkKK3N0YXRpYyBpbnQgeWFmZnNfd3JpdGVfYmVnaW4oc3RydWN0IGZpbGUgKmZp bHAsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAorCQkJCWxvZmZfdCBwb3MsIHVu c2lnbmVkIGxlbiwgdW5zaWduZWQgZmxhZ3MsCisJCQkJc3RydWN0IHBhZ2UgKipwYWdlcCwg dm9pZCAqKmZzZGF0YSk7CitzdGF0aWMgaW50IHlhZmZzX3dyaXRlX2VuZChzdHJ1Y3QgZmls ZSAqZmlscCwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCisJCQkJbG9mZl90IHBv cywgdW5zaWduZWQgbGVuLCB1bnNpZ25lZCBjb3BpZWQsCisJCQkJc3RydWN0IHBhZ2UgKnBn LCB2b2lkICpmc2RhZGF0YSk7CisjZWxzZQorc3RhdGljIGludCB5YWZmc19wcmVwYXJlX3dy aXRlKHN0cnVjdCBmaWxlICpmLCBzdHJ1Y3QgcGFnZSAqcGcsCisJCQkJdW5zaWduZWQgb2Zm c2V0LCB1bnNpZ25lZCB0byk7CitzdGF0aWMgaW50IHlhZmZzX2NvbW1pdF93cml0ZShzdHJ1 Y3QgZmlsZSAqZiwgc3RydWN0IHBhZ2UgKnBnLCB1bnNpZ25lZCBvZmZzZXQsCisJCQkJdW5z aWduZWQgdG8pOworCisjZW5kaWYKKworc3RhdGljIGludCB5YWZmc19yZWFkbGluayhzdHJ1 Y3QgZGVudHJ5ICpkZW50cnksIGNoYXIgX191c2VyICpidWZmZXIsCisJCQkJaW50IGJ1Zmxl bik7CisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDEz KSkKK3N0YXRpYyB2b2lkICp5YWZmc19mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50 cnksIHN0cnVjdCBuYW1laWRhdGEgKm5kKTsKKyNlbHNlCitzdGF0aWMgaW50IHlhZmZzX2Zv bGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IG5hbWVpZGF0YSAqbmQp OworI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHlh ZmZzX2ZpbGVfYWRkcmVzc19vcGVyYXRpb25zID0geworCS5yZWFkcGFnZSA9IHlhZmZzX3Jl YWRwYWdlLAorCS53cml0ZXBhZ2UgPSB5YWZmc193cml0ZXBhZ2UsCisjaWYgKFlBRkZTX1VT RV9XUklURV9CRUdJTl9FTkQgPiAwKQorCS53cml0ZV9iZWdpbiA9IHlhZmZzX3dyaXRlX2Jl Z2luLAorCS53cml0ZV9lbmQgPSB5YWZmc193cml0ZV9lbmQsCisjZWxzZQorCS5wcmVwYXJl X3dyaXRlID0geWFmZnNfcHJlcGFyZV93cml0ZSwKKwkuY29tbWl0X3dyaXRlID0geWFmZnNf Y29tbWl0X3dyaXRlLAorI2VuZGlmCit9OworCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+ IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDIyKSkKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9v cGVyYXRpb25zIHlhZmZzX2ZpbGVfb3BlcmF0aW9ucyA9IHsKKwkucmVhZCA9IGRvX3N5bmNf cmVhZCwKKwkud3JpdGUgPSBkb19zeW5jX3dyaXRlLAorCS5haW9fcmVhZCA9IGdlbmVyaWNf ZmlsZV9haW9fcmVhZCwKKwkuYWlvX3dyaXRlID0gZ2VuZXJpY19maWxlX2Fpb193cml0ZSwK KwkubW1hcCA9IGdlbmVyaWNfZmlsZV9tbWFwLAorCS5mbHVzaCA9IHlhZmZzX2ZpbGVfZmx1 c2gsCisJLmZzeW5jID0geWFmZnNfc3luY19vYmplY3QsCisJLnNwbGljZV9yZWFkID0gZ2Vu ZXJpY19maWxlX3NwbGljZV9yZWFkLAorCS5zcGxpY2Vfd3JpdGUgPSBnZW5lcmljX2ZpbGVf c3BsaWNlX3dyaXRlLAorCS5sbHNlZWsgPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAorfTsKKwor I2VsaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDE4KSkK Kworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgeWFmZnNfZmlsZV9vcGVy YXRpb25zID0geworCS5yZWFkID0gZG9fc3luY19yZWFkLAorCS53cml0ZSA9IGRvX3N5bmNf d3JpdGUsCisJLmFpb19yZWFkID0gZ2VuZXJpY19maWxlX2Fpb19yZWFkLAorCS5haW9fd3Jp dGUgPSBnZW5lcmljX2ZpbGVfYWlvX3dyaXRlLAorCS5tbWFwID0gZ2VuZXJpY19maWxlX21t YXAsCisJLmZsdXNoID0geWFmZnNfZmlsZV9mbHVzaCwKKwkuZnN5bmMgPSB5YWZmc19zeW5j X29iamVjdCwKKwkuc2VuZGZpbGUgPSBnZW5lcmljX2ZpbGVfc2VuZGZpbGUsCit9OworCisj ZWxzZQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB5YWZmc19maWxl X29wZXJhdGlvbnMgPSB7CisJLnJlYWQgPSBnZW5lcmljX2ZpbGVfcmVhZCwKKwkud3JpdGUg PSBnZW5lcmljX2ZpbGVfd3JpdGUsCisJLm1tYXAgPSBnZW5lcmljX2ZpbGVfbW1hcCwKKwku Zmx1c2ggPSB5YWZmc19maWxlX2ZsdXNoLAorCS5mc3luYyA9IHlhZmZzX3N5bmNfb2JqZWN0 LAorI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLCA1LCAwKSkK Kwkuc2VuZGZpbGUgPSBnZW5lcmljX2ZpbGVfc2VuZGZpbGUsCisjZW5kaWYKK307CisjZW5k aWYKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHlhZmZzX2ZpbGVf aW5vZGVfb3BlcmF0aW9ucyA9IHsKKwkuc2V0YXR0ciA9IHlhZmZzX3NldGF0dHIsCit9Owor CitzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgeWFmZnNfc3ltbGlua19p bm9kZV9vcGVyYXRpb25zID0geworCS5yZWFkbGluayA9IHlhZmZzX3JlYWRsaW5rLAorCS5m b2xsb3dfbGluayA9IHlhZmZzX2ZvbGxvd19saW5rLAorCS5zZXRhdHRyID0geWFmZnNfc2V0 YXR0ciwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyB5YWZm c19kaXJfaW5vZGVfb3BlcmF0aW9ucyA9IHsKKwkuY3JlYXRlID0geWFmZnNfY3JlYXRlLAor CS5sb29rdXAgPSB5YWZmc19sb29rdXAsCisJLmxpbmsgPSB5YWZmc19saW5rLAorCS51bmxp bmsgPSB5YWZmc191bmxpbmssCisJLnN5bWxpbmsgPSB5YWZmc19zeW1saW5rLAorCS5ta2Rp ciA9IHlhZmZzX21rZGlyLAorCS5ybWRpciA9IHlhZmZzX3VubGluaywKKwkubWtub2QgPSB5 YWZmc19ta25vZCwKKwkucmVuYW1lID0geWFmZnNfcmVuYW1lLAorCS5zZXRhdHRyID0geWFm ZnNfc2V0YXR0ciwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25z IHlhZmZzX2Rpcl9vcGVyYXRpb25zID0geworCS5yZWFkID0gZ2VuZXJpY19yZWFkX2RpciwK KwkucmVhZGRpciA9IHlhZmZzX3JlYWRkaXIsCisJLmZzeW5jID0geWFmZnNfc3luY19vYmpl Y3QsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgeWFmZnNf c3VwZXJfb3BzID0geworCS5zdGF0ZnMgPSB5YWZmc19zdGF0ZnMsCisKKyNpZm5kZWYgWUFG RlNfVVNFX09XTl9JR0VUCisJLnJlYWRfaW5vZGUgPSB5YWZmc19yZWFkX2lub2RlLAorI2Vu ZGlmCisjaWZkZWYgWUFGRlNfSEFTX1BVVF9JTk9ERQorCS5wdXRfaW5vZGUgPSB5YWZmc19w dXRfaW5vZGUsCisjZW5kaWYKKwkucHV0X3N1cGVyID0geWFmZnNfcHV0X3N1cGVyLAorCS5k ZWxldGVfaW5vZGUgPSB5YWZmc19kZWxldGVfaW5vZGUsCisJLmNsZWFyX2lub2RlID0geWFm ZnNfY2xlYXJfaW5vZGUsCisJLnN5bmNfZnMgPSB5YWZmc19zeW5jX2ZzLAorCS53cml0ZV9z dXBlciA9IHlhZmZzX3dyaXRlX3N1cGVyLAorfTsKKworc3RhdGljIHZvaWQgeWFmZnNfR3Jv c3NMb2NrKHlhZmZzX0RldmljZSAqZGV2KQoreworCVQoWUFGRlNfVFJBQ0VfT1MsICgieWFm ZnMgbG9ja2luZyAlcFxuIiwgY3VycmVudCkpOworCWRvd24oJmRldi0+Z3Jvc3NMb2NrKTsK KwlUKFlBRkZTX1RSQUNFX09TLCAoInlhZmZzIGxvY2tlZCAlcFxuIiwgY3VycmVudCkpOwor fQorCitzdGF0aWMgdm9pZCB5YWZmc19Hcm9zc1VubG9jayh5YWZmc19EZXZpY2UgKmRldikK K3sKKwlUKFlBRkZTX1RSQUNFX09TLCAoInlhZmZzIHVubG9ja2luZyAlcFxuIiwgY3VycmVu dCkpOworCXVwKCZkZXYtPmdyb3NzTG9jayk7Cit9CisKK3N0YXRpYyBpbnQgeWFmZnNfcmVh ZGxpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjaGFyIF9fdXNlciAqYnVmZmVyLAorCQkJ aW50IGJ1ZmxlbikKK3sKKwl1bnNpZ25lZCBjaGFyICphbGlhczsKKwlpbnQgcmV0OworCisJ eWFmZnNfRGV2aWNlICpkZXYgPSB5YWZmc19EZW50cnlUb09iamVjdChkZW50cnkpLT5teURl djsKKworCXlhZmZzX0dyb3NzTG9jayhkZXYpOworCisJYWxpYXMgPSB5YWZmc19HZXRTeW1s aW5rQWxpYXMoeWFmZnNfRGVudHJ5VG9PYmplY3QoZGVudHJ5KSk7CisKKwl5YWZmc19Hcm9z c1VubG9jayhkZXYpOworCisJaWYgKCFhbGlhcykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwly ZXQgPSB2ZnNfcmVhZGxpbmsoZGVudHJ5LCBidWZmZXIsIGJ1ZmxlbiwgYWxpYXMpOworCWtm cmVlKGFsaWFzKTsKKwlyZXR1cm4gcmV0OworfQorCisjaWYgKExJTlVYX1ZFUlNJT05fQ09E RSA+IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDEzKSkKK3N0YXRpYyB2b2lkICp5YWZmc19mb2xs b3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBuYW1laWRhdGEgKm5kKQor I2Vsc2UKK3N0YXRpYyBpbnQgeWFmZnNfZm9sbG93X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVu dHJ5LCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKKyNlbmRpZgoreworCXVuc2lnbmVkIGNoYXIg KmFsaWFzOworCWludCByZXQ7CisJeWFmZnNfRGV2aWNlICpkZXYgPSB5YWZmc19EZW50cnlU b09iamVjdChkZW50cnkpLT5teURldjsKKworCXlhZmZzX0dyb3NzTG9jayhkZXYpOworCisJ YWxpYXMgPSB5YWZmc19HZXRTeW1saW5rQWxpYXMoeWFmZnNfRGVudHJ5VG9PYmplY3QoZGVu dHJ5KSk7CisKKwl5YWZmc19Hcm9zc1VubG9jayhkZXYpOworCisJaWYgKCFhbGlhcykgewor CQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSB2ZnNfZm9sbG93 X2xpbmsobmQsIGFsaWFzKTsKKwlrZnJlZShhbGlhcyk7CitvdXQ6CisjaWYgKExJTlVYX1ZF UlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDEzKSkKKwlyZXR1cm4gRVJSX1BU UihyZXQpOworI2Vsc2UKKwlyZXR1cm4gcmV0OworI2VuZGlmCit9CisKK3N0cnVjdCBpbm9k ZSAqeWFmZnNfZ2V0X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBtb2RlLCBp bnQgZGV2LAorCQkJCXlhZmZzX09iamVjdCAqb2JqKTsKKworLyoKKyAqIExvb2t1cCBpcyB1 c2VkIHRvIGZpbmQgb2JqZWN0cyBpbiB0aGUgZnMKKyAqLworI2lmIChMSU5VWF9WRVJTSU9O X0NPREUgPiBLRVJORUxfVkVSU0lPTigyLCA1LCAwKSkKKworc3RhdGljIHN0cnVjdCBkZW50 cnkgKnlhZmZzX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVu dHJ5LAorCQkJCXN0cnVjdCBuYW1laWRhdGEgKm4pCisjZWxzZQorc3RhdGljIHN0cnVjdCBk ZW50cnkgKnlhZmZzX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAq ZGVudHJ5KQorI2VuZGlmCit7CisJeWFmZnNfT2JqZWN0ICpvYmo7CisJc3RydWN0IGlub2Rl ICppbm9kZSA9IE5VTEw7CS8qIE5DQiAyLjUvMi42IG5lZWRzIE5VTEwgaGVyZSAqLworCisJ eWFmZnNfRGV2aWNlICpkZXYgPSB5YWZmc19Jbm9kZVRvT2JqZWN0KGRpciktPm15RGV2Owor CisJeWFmZnNfR3Jvc3NMb2NrKGRldik7CisKKwlUKFlBRkZTX1RSQUNFX09TLAorCQkoInlh ZmZzX2xvb2t1cCBmb3IgJWQ6JXNcbiIsCisJCXlhZmZzX0lub2RlVG9PYmplY3QoZGlyKS0+ b2JqZWN0SWQsIGRlbnRyeS0+ZF9uYW1lLm5hbWUpKTsKKworCW9iaiA9IHlhZmZzX0ZpbmRP YmplY3RCeU5hbWUoeWFmZnNfSW5vZGVUb09iamVjdChkaXIpLAorCQkJCQlkZW50cnktPmRf bmFtZS5uYW1lKTsKKworCW9iaiA9IHlhZmZzX0dldEVxdWl2YWxlbnRPYmplY3Qob2JqKTsJ LyogaW4gY2FzZSBpdCB3YXMgYSBoYXJkbGluayAqLworCisJLyogQ2FuJ3QgaG9sZCBncm9z cyBsb2NrIHdoZW4gY2FsbGluZyB5YWZmc19nZXRfaW5vZGUoKSAqLworCXlhZmZzX0dyb3Nz VW5sb2NrKGRldik7CisKKwlpZiAob2JqKSB7CisJCVQoWUFGRlNfVFJBQ0VfT1MsCisJCQko InlhZmZzX2xvb2t1cCBmb3VuZCAlZFxuIiwgb2JqLT5vYmplY3RJZCkpOworCisJCWlub2Rl ID0geWFmZnNfZ2V0X2lub2RlKGRpci0+aV9zYiwgb2JqLT55c3RfbW9kZSwgMCwgb2JqKTsK KworCQlpZiAoaW5vZGUpIHsKKwkJCVQoWUFGRlNfVFJBQ0VfT1MsCisJCQkJKCJ5YWZmc19s b29va3VwIGRlbnRyeSBcbiIpKTsKKy8qICNpZiAwIGFzc2VydGVkIGJ5IE5DQiBmb3IgMi41 LzYgY29tcGF0YWJpbGl0eSAtIGZhbGxzIHRocm91Z2ggdG8KKyAqIGRfYWRkIGV2ZW4gaWYg TlVMTCBpbm9kZSAqLworI2lmIDAKKwkJCS8qZGdldChkZW50cnkpOyAvLyB0cnkgdG8gc29s dmUgZGlyZWN0b3J5IGJ1ZyAqLworCQkJZF9hZGQoZGVudHJ5LCBpbm9kZSk7CisKKwkJCS8q IHJldHVybiBkZW50cnk7ICovCisJCQlyZXR1cm4gTlVMTDsKKyNlbmRpZgorCQl9CisKKwl9 IGVsc2UgeworCQlUKFlBRkZTX1RSQUNFX09TLCAoInlhZmZzX2xvb2t1cCBub3QgZm91bmRc biIpKTsKKworCX0KKworLyogYWRkZWQgTkNCIGZvciAyLjUvNiBjb21wYXRhYmlsaXR5IC0g Zm9yY2VzIGFkZCBldmVuIGlmIGlub2RlIGlzCisgKiBOVUxMIHdoaWNoIGNyZWF0ZXMgZGVu dHJ5IGhhc2ggKi8KKwlkX2FkZChkZW50cnksIGlub2RlKTsKKworCXJldHVybiBOVUxMOwor fQorCisKKyNpZmRlZiBZQUZGU19IQVNfUFVUX0lOT0RFCisKKy8qIEZvciBub3cgcHV0IGlu b2RlIGlzIGp1c3QgZm9yIGRlYnVnZ2luZworICogUHV0IGlub2RlIGlzIGNhbGxlZCB3aGVu IHRoZSBpbm9kZSAqKnN0cnVjdHVyZSoqIGlzIHB1dC4KKyAqLworc3RhdGljIHZvaWQgeWFm ZnNfcHV0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJVChZQUZGU19UUkFDRV9P UywKKwkJKCJ5YWZmc19wdXRfaW5vZGU6IGlubyAlZCwgY291bnQgJWRcbiIsIChpbnQpaW5v ZGUtPmlfaW5vLAorCQlhdG9taWNfcmVhZCgmaW5vZGUtPmlfY291bnQpKSk7CisKK30KKyNl bmRpZgorCisvKiBjbGVhciBpcyBjYWxsZWQgdG8gdGVsbCB0aGUgZnMgdG8gcmVsZWFzZSBh bnkgcGVyLWlub2RlIGRhdGEgaXQgaG9sZHMgKi8KK3N0YXRpYyB2b2lkIHlhZmZzX2NsZWFy X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJeWFmZnNfT2JqZWN0ICpvYmo7CisJ eWFmZnNfRGV2aWNlICpkZXY7CisKKwlvYmogPSB5YWZmc19Jbm9kZVRvT2JqZWN0KGlub2Rl KTsKKworCVQoWUFGRlNfVFJBQ0VfT1MsCisJCSgieWFmZnNfY2xlYXJfaW5vZGU6IGlubyAl ZCwgY291bnQgJWQgJXNcbiIsIChpbnQpaW5vZGUtPmlfaW5vLAorCQlhdG9taWNfcmVhZCgm aW5vZGUtPmlfY291bnQpLAorCQlvYmogPyAib2JqZWN0IGV4aXN0cyIgOiAibnVsbCBvYmpl Y3QiKSk7CisKKwlpZiAob2JqKSB7CisJCWRldiA9IG9iai0+bXlEZXY7CisJCXlhZmZzX0dy b3NzTG9jayhkZXYpOworCisJCS8qIENsZWFyIHRoZSBhc3NvY2lhdGlvbiBiZXR3ZWVuIHRo ZSBpbm9kZSBhbmQKKwkJICogdGhlIHlhZmZzX09iamVjdC4KKwkJICovCisJCW9iai0+bXlJ bm9kZSA9IE5VTEw7CisJCXlhZmZzX0lub2RlVG9PYmplY3RMVihpbm9kZSkgPSBOVUxMOwor CisJCS8qIElmIHRoZSBvYmplY3QgZnJlZWluZyB3YXMgZGVmZXJyZWQsIHRoZW4gdGhlIHJl YWwKKwkJICogZnJlZSBoYXBwZW5zIG5vdy4KKwkJICogVGhpcyBzaG91bGQgZml4IHRoZSBp bm9kZSBpbmNvbnNpc3RlbmN5IHByb2JsZW0uCisJCSAqLworCisJCXlhZmZzX0hhbmRsZURl ZmVyZWRGcmVlKG9iaik7CisKKwkJeWFmZnNfR3Jvc3NVbmxvY2soZGV2KTsKKwl9CisKK30K KworLyogZGVsZXRlIGlzIGNhbGxlZCB3aGVuIHRoZSBsaW5rIGNvdW50IGlzIHplcm8gYW5k IHRoZSBpbm9kZQorICogaXMgcHV0IChpZS4gbm9ib2R5IHdhbnRzIHRvIGtub3cgYWJvdXQg aXQgYW55bW9yZSwgdGltZSB0bworICogZGVsZXRlIHRoZSBmaWxlKS4KKyAqIE5CIE11c3Qg Y2FsbCBjbGVhcl9pbm9kZSgpCisgKi8KK3N0YXRpYyB2b2lkIHlhZmZzX2RlbGV0ZV9pbm9k ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXlhZmZzX09iamVjdCAqb2JqID0geWFmZnNf SW5vZGVUb09iamVjdChpbm9kZSk7CisJeWFmZnNfRGV2aWNlICpkZXY7CisKKwlUKFlBRkZT X1RSQUNFX09TLAorCQkoInlhZmZzX2RlbGV0ZV9pbm9kZTogaW5vICVkLCBjb3VudCAlZCAl c1xuIiwgKGludClpbm9kZS0+aV9pbm8sCisJCWF0b21pY19yZWFkKCZpbm9kZS0+aV9jb3Vu dCksCisJCW9iaiA/ICJvYmplY3QgZXhpc3RzIiA6ICJudWxsIG9iamVjdCIpKTsKKworCWlm IChvYmopIHsKKwkJZGV2ID0gb2JqLT5teURldjsKKwkJeWFmZnNfR3Jvc3NMb2NrKGRldik7 CisJCXlhZmZzX0RlbGV0ZU9iamVjdChvYmopOworCQl5YWZmc19Hcm9zc1VubG9jayhkZXYp OworCX0KKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiwgNiwg MTMpKQorCXRydW5jYXRlX2lub2RlX3BhZ2VzKCZpbm9kZS0+aV9kYXRhLCAwKTsKKyNlbmRp ZgorCWNsZWFyX2lub2RlKGlub2RlKTsKK30KKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUg PiBLRVJORUxfVkVSU0lPTigyLCA2LCAxNykpCitzdGF0aWMgaW50IHlhZmZzX2ZpbGVfZmx1 c2goc3RydWN0IGZpbGUgKmZpbGUsIGZsX293bmVyX3QgaWQpCisjZWxzZQorc3RhdGljIGlu dCB5YWZmc19maWxlX2ZsdXNoKHN0cnVjdCBmaWxlICpmaWxlKQorI2VuZGlmCit7CisJeWFm ZnNfT2JqZWN0ICpvYmogPSB5YWZmc19EZW50cnlUb09iamVjdChmaWxlLT5mX2RlbnRyeSk7 CisKKwl5YWZmc19EZXZpY2UgKmRldiA9IG9iai0+bXlEZXY7CisKKwlUKFlBRkZTX1RSQUNF X09TLAorCQkoInlhZmZzX2ZpbGVfZmx1c2ggb2JqZWN0ICVkICglcylcbiIsIG9iai0+b2Jq ZWN0SWQsCisJCW9iai0+ZGlydHkgPyAiZGlydHkiIDogImNsZWFuIikpOworCisJeWFmZnNf R3Jvc3NMb2NrKGRldik7CisKKwl5YWZmc19GbHVzaEZpbGUob2JqLCAxKTsKKworCXlhZmZz X0dyb3NzVW5sb2NrKGRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB5YWZm c19yZWFkcGFnZV9ub2xvY2soc3RydWN0IGZpbGUgKmYsIHN0cnVjdCBwYWdlICpwZykKK3sK KwkvKiBMaWZ0ZWQgZnJvbSBqZmZzMiAqLworCisJeWFmZnNfT2JqZWN0ICpvYmo7CisJdW5z aWduZWQgY2hhciAqcGdfYnVmOworCWludCByZXQ7CisKKwl5YWZmc19EZXZpY2UgKmRldjsK KworCVQoWUFGRlNfVFJBQ0VfT1MsICgieWFmZnNfcmVhZHBhZ2UgYXQgJTA4eCwgc2l6ZSAl MDh4XG4iLAorCQkJKHVuc2lnbmVkKShwZy0+aW5kZXggPDwgUEFHRV9DQUNIRV9TSElGVCks CisJCQkodW5zaWduZWQpUEFHRV9DQUNIRV9TSVpFKSk7CisKKwlvYmogPSB5YWZmc19EZW50 cnlUb09iamVjdChmLT5mX2RlbnRyeSk7CisKKwlkZXYgPSBvYmotPm15RGV2OworCisjaWYg KExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsIDUsIDApKQorCUJVR19P TighUGFnZUxvY2tlZChwZykpOworI2Vsc2UKKwlpZiAoIVBhZ2VMb2NrZWQocGcpKQorCQlQ QUdFX0JVRyhwZyk7CisjZW5kaWYKKworCXBnX2J1ZiA9IGttYXAocGcpOworCS8qIEZJWE1F OiBDYW4ga21hcCBmYWlsPyAqLworCisJeWFmZnNfR3Jvc3NMb2NrKGRldik7CisKKwlyZXQg PSB5YWZmc19SZWFkRGF0YUZyb21GaWxlKG9iaiwgcGdfYnVmLAorCQkJCXBnLT5pbmRleCA8 PCBQQUdFX0NBQ0hFX1NISUZULAorCQkJCVBBR0VfQ0FDSEVfU0laRSk7CisKKwl5YWZmc19H cm9zc1VubG9jayhkZXYpOworCisJaWYgKHJldCA+PSAwKQorCQlyZXQgPSAwOworCisJaWYg KHJldCkgeworCQlDbGVhclBhZ2VVcHRvZGF0ZShwZyk7CisJCVNldFBhZ2VFcnJvcihwZyk7 CisJfSBlbHNlIHsKKwkJU2V0UGFnZVVwdG9kYXRlKHBnKTsKKwkJQ2xlYXJQYWdlRXJyb3Io cGcpOworCX0KKworCWZsdXNoX2RjYWNoZV9wYWdlKHBnKTsKKwlrdW5tYXAocGcpOworCisJ VChZQUZGU19UUkFDRV9PUywgKCJ5YWZmc19yZWFkcGFnZSBkb25lXG4iKSk7CisJcmV0dXJu IHJldDsKK30KKworc3RhdGljIGludCB5YWZmc19yZWFkcGFnZV91bmxvY2soc3RydWN0IGZp bGUgKmYsIHN0cnVjdCBwYWdlICpwZykKK3sKKwlpbnQgcmV0ID0geWFmZnNfcmVhZHBhZ2Vf bm9sb2NrKGYsIHBnKTsKKwlVbmxvY2tQYWdlKHBnKTsKKwlyZXR1cm4gcmV0OworfQorCitz dGF0aWMgaW50IHlhZmZzX3JlYWRwYWdlKHN0cnVjdCBmaWxlICpmLCBzdHJ1Y3QgcGFnZSAq cGcpCit7CisJcmV0dXJuIHlhZmZzX3JlYWRwYWdlX3VubG9jayhmLCBwZyk7Cit9CisKKy8q IHdyaXRlcGFnZSBpbnNwaXJlZCBieS9zdG9sZW4gZnJvbSBzbWJmcyAqLworCisjaWYgKExJ TlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsIDUsIDApKQorc3RhdGljIGlu dCB5YWZmc193cml0ZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB3cml0ZWJhY2tf Y29udHJvbCAqd2JjKQorI2Vsc2UKK3N0YXRpYyBpbnQgeWFmZnNfd3JpdGVwYWdlKHN0cnVj dCBwYWdlICpwYWdlKQorI2VuZGlmCit7CisJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBp bmcgPSBwYWdlLT5tYXBwaW5nOworCWxvZmZfdCBvZmZzZXQgPSAobG9mZl90KSBwYWdlLT5p bmRleCA8PCBQQUdFX0NBQ0hFX1NISUZUOworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisJdW5z aWduZWQgbG9uZyBlbmRfaW5kZXg7CisJY2hhciAqYnVmZmVyOworCXlhZmZzX09iamVjdCAq b2JqOworCWludCBuV3JpdHRlbiA9IDA7CisJdW5zaWduZWQgbkJ5dGVzOworCisJaWYgKCFt YXBwaW5nKQorCQlCVUcoKTsKKwlpbm9kZSA9IG1hcHBpbmctPmhvc3Q7CisJaWYgKCFpbm9k ZSkKKwkJQlVHKCk7CisKKwlpZiAob2Zmc2V0ID4gaW5vZGUtPmlfc2l6ZSkgeworCQlUKFlB RkZTX1RSQUNFX09TLAorCQkJKCJ5YWZmc193cml0ZXBhZ2UgYXQgJTA4eCwgaW5vZGUgc2l6 ZSA9ICUwOHghISFcbiIsCisJCQkodW5zaWduZWQpKHBhZ2UtPmluZGV4IDw8IFBBR0VfQ0FD SEVfU0hJRlQpLAorCQkJKHVuc2lnbmVkKWlub2RlLT5pX3NpemUpKTsKKwkJVChZQUZGU19U UkFDRV9PUywKKwkJCSgiICAgICAgICAgICAgICAgIC0+IGRvbid0IGNhcmUhIVxuIikpOwor CQl1bmxvY2tfcGFnZShwYWdlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJZW5kX2luZGV4ID0g aW5vZGUtPmlfc2l6ZSA+PiBQQUdFX0NBQ0hFX1NISUZUOworCisJLyogZWFzeSBjYXNlICov CisJaWYgKHBhZ2UtPmluZGV4IDwgZW5kX2luZGV4KQorCQluQnl0ZXMgPSBQQUdFX0NBQ0hF X1NJWkU7CisJZWxzZQorCQluQnl0ZXMgPSBpbm9kZS0+aV9zaXplICYgKFBBR0VfQ0FDSEVf U0laRSAtIDEpOworCisJZ2V0X3BhZ2UocGFnZSk7CisKKwlidWZmZXIgPSBrbWFwKHBhZ2Up OworCisJb2JqID0geWFmZnNfSW5vZGVUb09iamVjdChpbm9kZSk7CisJeWFmZnNfR3Jvc3NM b2NrKG9iai0+bXlEZXYpOworCisJVChZQUZGU19UUkFDRV9PUywKKwkJKCJ5YWZmc193cml0 ZXBhZ2UgYXQgJTA4eCwgc2l6ZSAlMDh4XG4iLAorCQkodW5zaWduZWQpKHBhZ2UtPmluZGV4 IDw8IFBBR0VfQ0FDSEVfU0hJRlQpLCBuQnl0ZXMpKTsKKwlUKFlBRkZTX1RSQUNFX09TLAor CQkoIndyaXRlcGFnMDogb2JqID0gJTA1eCwgaW5vID0gJTA1eFxuIiwKKwkJKGludClvYmot PnZhcmlhbnQuZmlsZVZhcmlhbnQuZmlsZVNpemUsIChpbnQpaW5vZGUtPmlfc2l6ZSkpOwor CisJbldyaXR0ZW4gPSB5YWZmc19Xcml0ZURhdGFUb0ZpbGUob2JqLCBidWZmZXIsCisJCQlw YWdlLT5pbmRleCA8PCBQQUdFX0NBQ0hFX1NISUZULCBuQnl0ZXMsIDApOworCisJVChZQUZG U19UUkFDRV9PUywKKwkJKCJ3cml0ZXBhZzE6IG9iaiA9ICUwNXgsIGlubyA9ICUwNXhcbiIs CisJCShpbnQpb2JqLT52YXJpYW50LmZpbGVWYXJpYW50LmZpbGVTaXplLCAoaW50KWlub2Rl LT5pX3NpemUpKTsKKworCXlhZmZzX0dyb3NzVW5sb2NrKG9iai0+bXlEZXYpOworCisJa3Vu bWFwKHBhZ2UpOworCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKKwlVbmxvY2tQYWdlKHBhZ2Up OworCXB1dF9wYWdlKHBhZ2UpOworCisJcmV0dXJuIChuV3JpdHRlbiA9PSBuQnl0ZXMpID8g MCA6IC1FTk9TUEM7Cit9CisKKworI2lmIChZQUZGU19VU0VfV1JJVEVfQkVHSU5fRU5EID4g MCkKK3N0YXRpYyBpbnQgeWFmZnNfd3JpdGVfYmVnaW4oc3RydWN0IGZpbGUgKmZpbHAsIHN0 cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAorCQkJCWxvZmZfdCBwb3MsIHVuc2lnbmVk IGxlbiwgdW5zaWduZWQgZmxhZ3MsCisJCQkJc3RydWN0IHBhZ2UgKipwYWdlcCwgdm9pZCAq KmZzZGF0YSkKK3sKKwlzdHJ1Y3QgcGFnZSAqcGcgPSBOVUxMOworCXBnb2ZmX3QgaW5kZXgg PSBwb3MgPj4gUEFHRV9DQUNIRV9TSElGVDsKKwl1aW50MzJfdCBvZmZzZXQgPSBwb3MgJiAo UEFHRV9DQUNIRV9TSVpFIC0gMSk7CisJdWludDMyX3QgdG8gPSBvZmZzZXQgKyBsZW47CisK KwlpbnQgcmV0ID0gMDsKKwlpbnQgc3BhY2VfaGVsZCA9IDA7CisKKwlUKFlBRkZTX1RSQUNF X09TLCAoInN0YXJ0IHlhZmZzX3dyaXRlX2JlZ2luXG4iKSk7CisJLyogR2V0IGEgcGFnZSAq LworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDI4KQor CXBnID0gZ3JhYl9jYWNoZV9wYWdlX3dyaXRlX2JlZ2luKG1hcHBpbmcsIGluZGV4LCBmbGFn cyk7CisjZWxzZQorCXBnID0gX19ncmFiX2NhY2hlX3BhZ2UobWFwcGluZywgaW5kZXgpOwor I2VuZGlmCisKKwkqcGFnZXAgPSBwZzsKKwlpZiAoIXBnKSB7CisJCXJldCA9ICAtRU5PTUVN OworCQlnb3RvIG91dDsKKwl9CisJLyogR2V0IGZzIHNwYWNlICovCisJc3BhY2VfaGVsZCA9 IHlhZmZzX2hvbGRfc3BhY2UoZmlscCk7CisKKwlpZiAoIXNwYWNlX2hlbGQpIHsKKwkJcmV0 ID0gLUVOT1NQQzsKKwkJZ290byBvdXQ7CisJfQorCisJLyogVXBkYXRlIHBhZ2UgaWYgcmVx dWlyZWQgKi8KKworCWlmICghUGFnZV9VcHRvZGF0ZShwZykgJiYgKG9mZnNldCB8fCB0byA8 IFBBR0VfQ0FDSEVfU0laRSkpCisJCXJldCA9IHlhZmZzX3JlYWRwYWdlX25vbG9jayhmaWxw LCBwZyk7CisKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCS8qIEhhcHB5IHBhdGggcmV0 dXJuICovCisJVChZQUZGU19UUkFDRV9PUywgKCJlbmQgeWFmZnNfd3JpdGVfYmVnaW4gLSBv a1xuIikpOworCisJcmV0dXJuIDA7CisKK291dDoKKwlUKFlBRkZTX1RSQUNFX09TLCAoImVu ZCB5YWZmc193cml0ZV9iZWdpbiBmYWlsIHJldHVybmluZyAlZFxuIiwgcmV0KSk7CisJaWYg KHNwYWNlX2hlbGQpCisJCXlhZmZzX3JlbGVhc2Vfc3BhY2UoZmlscCk7CisJaWYgKHBnKSB7 CisJCXVubG9ja19wYWdlKHBnKTsKKwkJcGFnZV9jYWNoZV9yZWxlYXNlKHBnKTsKKwl9CisJ cmV0dXJuIHJldDsKK30KKworI2Vsc2UKKworc3RhdGljIGludCB5YWZmc19wcmVwYXJlX3dy aXRlKHN0cnVjdCBmaWxlICpmLCBzdHJ1Y3QgcGFnZSAqcGcsCisJCQkJdW5zaWduZWQgb2Zm c2V0LCB1bnNpZ25lZCB0bykKK3sKKwlUKFlBRkZTX1RSQUNFX09TLCAoInlhZmZzX3ByZXBh aXJfd3JpdGVcbiIpKTsKKworCWlmICghUGFnZV9VcHRvZGF0ZShwZykgJiYgKG9mZnNldCB8 fCB0byA8IFBBR0VfQ0FDSEVfU0laRSkpCisJCXJldHVybiB5YWZmc19yZWFkcGFnZV9ub2xv Y2soZiwgcGcpOworCXJldHVybiAwOworfQorI2VuZGlmCisKKyNpZiAoWUFGRlNfVVNFX1dS SVRFX0JFR0lOX0VORCA+IDApCitzdGF0aWMgaW50IHlhZmZzX3dyaXRlX2VuZChzdHJ1Y3Qg ZmlsZSAqZmlscCwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCisJCQkJbG9mZl90 IHBvcywgdW5zaWduZWQgbGVuLCB1bnNpZ25lZCBjb3BpZWQsCisJCQkJc3RydWN0IHBhZ2Ug KnBnLCB2b2lkICpmc2RhZGF0YSkKK3sKKwlpbnQgcmV0ID0gMDsKKwl2b2lkICphZGRyLCAq a3ZhOworCXVpbnQzMl90IG9mZnNldF9pbnRvX3BhZ2UgPSBwb3MgJiAoUEFHRV9DQUNIRV9T SVpFIC0gMSk7CisKKwlrdmEgPSBrbWFwKHBnKTsKKwlhZGRyID0ga3ZhICsgb2Zmc2V0X2lu dG9fcGFnZTsKKworCVQoWUFGRlNfVFJBQ0VfT1MsCisJCSgieWFmZnNfd3JpdGVfZW5kIGFk ZHIgJXggcG9zICV4IG5CeXRlcyAlZFxuIiwKKwkJKHVuc2lnbmVkKSBhZGRyLAorCQkoaW50 KXBvcywgY29waWVkKSk7CisKKwlyZXQgPSB5YWZmc19maWxlX3dyaXRlKGZpbHAsIGFkZHIs IGNvcGllZCwgJnBvcyk7CisKKwlpZiAocmV0ICE9IGNvcGllZCkgeworCQlUKFlBRkZTX1RS QUNFX09TLAorCQkJKCJ5YWZmc193cml0ZV9lbmQgbm90IHNhbWUgc2l6ZSByZXQgJWQgIGNv cGllZCAlZFxuIiwKKwkJCXJldCwgY29waWVkKSk7CisJCVNldFBhZ2VFcnJvcihwZyk7CisJ CUNsZWFyUGFnZVVwdG9kYXRlKHBnKTsKKwl9IGVsc2UgeworCQlTZXRQYWdlVXB0b2RhdGUo cGcpOworCX0KKworCWt1bm1hcChwZyk7CisKKwl5YWZmc19yZWxlYXNlX3NwYWNlKGZpbHAp OworCXVubG9ja19wYWdlKHBnKTsKKwlwYWdlX2NhY2hlX3JlbGVhc2UocGcpOworCXJldHVy biByZXQ7Cit9CisjZWxzZQorCitzdGF0aWMgaW50IHlhZmZzX2NvbW1pdF93cml0ZShzdHJ1 Y3QgZmlsZSAqZiwgc3RydWN0IHBhZ2UgKnBnLCB1bnNpZ25lZCBvZmZzZXQsCisJCQkJdW5z aWduZWQgdG8pCit7CisJdm9pZCAqYWRkciwgKmt2YTsKKworCWxvZmZfdCBwb3MgPSAoKChs b2ZmX3QpIHBnLT5pbmRleCkgPDwgUEFHRV9DQUNIRV9TSElGVCkgKyBvZmZzZXQ7CisJaW50 IG5CeXRlcyA9IHRvIC0gb2Zmc2V0OworCWludCBuV3JpdHRlbjsKKworCXVuc2lnbmVkIHNw b3MgPSBwb3M7CisJdW5zaWduZWQgc2FkZHI7CisKKwlrdmEgPSBrbWFwKHBnKTsKKwlhZGRy ID0ga3ZhICsgb2Zmc2V0OworCisJc2FkZHIgPSAodW5zaWduZWQpIGFkZHI7CisKKwlUKFlB RkZTX1RSQUNFX09TLAorCQkoInlhZmZzX2NvbW1pdF93cml0ZSBhZGRyICV4IHBvcyAleCBu Qnl0ZXMgJWRcbiIsCisJCXNhZGRyLCBzcG9zLCBuQnl0ZXMpKTsKKworCW5Xcml0dGVuID0g eWFmZnNfZmlsZV93cml0ZShmLCBhZGRyLCBuQnl0ZXMsICZwb3MpOworCisJaWYgKG5Xcml0 dGVuICE9IG5CeXRlcykgeworCQlUKFlBRkZTX1RSQUNFX09TLAorCQkJKCJ5YWZmc19jb21t aXRfd3JpdGUgbm90IHNhbWUgc2l6ZSBuV3JpdHRlbiAlZCAgbkJ5dGVzICVkXG4iLAorCQkJ bldyaXR0ZW4sIG5CeXRlcykpOworCQlTZXRQYWdlRXJyb3IocGcpOworCQlDbGVhclBhZ2VV cHRvZGF0ZShwZyk7CisJfSBlbHNlIHsKKwkJU2V0UGFnZVVwdG9kYXRlKHBnKTsKKwl9CisK KwlrdW5tYXAocGcpOworCisJVChZQUZGU19UUkFDRV9PUywKKwkJKCJ5YWZmc19jb21taXRf d3JpdGUgcmV0dXJuaW5nICVkXG4iLAorCQluV3JpdHRlbiA9PSBuQnl0ZXMgPyAwIDogbldy aXR0ZW4pKTsKKworCXJldHVybiBuV3JpdHRlbiA9PSBuQnl0ZXMgPyAwIDogbldyaXR0ZW47 Cit9CisjZW5kaWYKKworCitzdGF0aWMgdm9pZCB5YWZmc19GaWxsSW5vZGVGcm9tT2JqZWN0 KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHlhZmZzX09iamVjdCAqb2JqKQoreworCWlmIChpbm9k ZSAmJiBvYmopIHsKKworCisJCS8qIENoZWNrIG1vZGUgYWdhaW5zdCB0aGUgdmFyaWFudCB0 eXBlIGFuZCBhdHRlbXB0IHRvIHJlcGFpciBpZiBicm9rZW4uICovCisJCV9fdTMyIG1vZGUg PSBvYmotPnlzdF9tb2RlOworCQlzd2l0Y2ggKG9iai0+dmFyaWFudFR5cGUpIHsKKwkJY2Fz ZSBZQUZGU19PQkpFQ1RfVFlQRV9GSUxFOgorCQkJaWYgKCFTX0lTUkVHKG1vZGUpKSB7CisJ CQkJb2JqLT55c3RfbW9kZSAmPSB+U19JRk1UOworCQkJCW9iai0+eXN0X21vZGUgfD0gU19J RlJFRzsKKwkJCX0KKworCQkJYnJlYWs7CisJCWNhc2UgWUFGRlNfT0JKRUNUX1RZUEVfU1lN TElOSzoKKwkJCWlmICghU19JU0xOSyhtb2RlKSkgeworCQkJCW9iai0+eXN0X21vZGUgJj0g flNfSUZNVDsKKwkJCQlvYmotPnlzdF9tb2RlIHw9IFNfSUZMTks7CisJCQl9CisKKwkJCWJy ZWFrOworCQljYXNlIFlBRkZTX09CSkVDVF9UWVBFX0RJUkVDVE9SWToKKwkJCWlmICghU19J U0RJUihtb2RlKSkgeworCQkJCW9iai0+eXN0X21vZGUgJj0gflNfSUZNVDsKKwkJCQlvYmot PnlzdF9tb2RlIHw9IFNfSUZESVI7CisJCQl9CisKKwkJCWJyZWFrOworCQljYXNlIFlBRkZT X09CSkVDVF9UWVBFX1VOS05PV046CisJCWNhc2UgWUFGRlNfT0JKRUNUX1RZUEVfSEFSRExJ Tks6CisJCWNhc2UgWUFGRlNfT0JKRUNUX1RZUEVfU1BFQ0lBTDoKKwkJZGVmYXVsdDoKKwkJ CS8qIFRPRE8/ICovCisJCQlicmVhazsKKwkJfQorCisJCWlub2RlLT5pX2ZsYWdzIHw9IFNf Tk9BVElNRTsKKworCQlpbm9kZS0+aV9pbm8gPSBvYmotPm9iamVjdElkOworCQlpbm9kZS0+ aV9tb2RlID0gb2JqLT55c3RfbW9kZTsKKwkJaW5vZGUtPmlfdWlkID0gb2JqLT55c3RfdWlk OworCQlpbm9kZS0+aV9naWQgPSBvYmotPnlzdF9naWQ7CisjaWYgKExJTlVYX1ZFUlNJT05f Q09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDE5KSkKKwkJaW5vZGUtPmlfYmxrc2l6ZSA9 IGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZTsKKyNlbmRpZgorI2lmIChMSU5VWF9WRVJTSU9O X0NPREUgPiBLRVJORUxfVkVSU0lPTigyLCA1LCAwKSkKKworCQlpbm9kZS0+aV9yZGV2ID0g b2xkX2RlY29kZV9kZXYob2JqLT55c3RfcmRldik7CisJCWlub2RlLT5pX2F0aW1lLnR2X3Nl YyA9ICh0aW1lX3QpIChvYmotPnlzdF9hdGltZSk7CisJCWlub2RlLT5pX2F0aW1lLnR2X25z ZWMgPSAwOworCQlpbm9kZS0+aV9tdGltZS50dl9zZWMgPSAodGltZV90KSBvYmotPnlzdF9t dGltZTsKKwkJaW5vZGUtPmlfbXRpbWUudHZfbnNlYyA9IDA7CisJCWlub2RlLT5pX2N0aW1l LnR2X3NlYyA9ICh0aW1lX3QpIG9iai0+eXN0X2N0aW1lOworCQlpbm9kZS0+aV9jdGltZS50 dl9uc2VjID0gMDsKKyNlbHNlCisJCWlub2RlLT5pX3JkZXYgPSBvYmotPnlzdF9yZGV2Owor CQlpbm9kZS0+aV9hdGltZSA9IG9iai0+eXN0X2F0aW1lOworCQlpbm9kZS0+aV9tdGltZSA9 IG9iai0+eXN0X210aW1lOworCQlpbm9kZS0+aV9jdGltZSA9IG9iai0+eXN0X2N0aW1lOwor I2VuZGlmCisJCWlub2RlLT5pX3NpemUgPSB5YWZmc19HZXRPYmplY3RGaWxlTGVuZ3RoKG9i aik7CisJCWlub2RlLT5pX2Jsb2NrcyA9IChpbm9kZS0+aV9zaXplICsgNTExKSA+PiA5Owor CisJCWlub2RlLT5pX25saW5rID0geWFmZnNfR2V0T2JqZWN0TGlua0NvdW50KG9iaik7CisK KwkJVChZQUZGU19UUkFDRV9PUywKKwkJCSgieWFmZnNfRmlsbElub2RlIG1vZGUgJXggdWlk ICVkIGdpZCAlZCBzaXplICVkIGNvdW50ICVkXG4iLAorCQkJaW5vZGUtPmlfbW9kZSwgaW5v ZGUtPmlfdWlkLCBpbm9kZS0+aV9naWQsCisJCQkoaW50KWlub2RlLT5pX3NpemUsIGF0b21p Y19yZWFkKCZpbm9kZS0+aV9jb3VudCkpKTsKKworCQlzd2l0Y2ggKG9iai0+eXN0X21vZGUg JiBTX0lGTVQpIHsKKwkJZGVmYXVsdDoJLyogZmlmbywgZGV2aWNlIG9yIHNvY2tldCAqLwor I2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLCA1LCAwKSkKKwkJ CWluaXRfc3BlY2lhbF9pbm9kZShpbm9kZSwgb2JqLT55c3RfbW9kZSwKKwkJCQkJb2xkX2Rl Y29kZV9kZXYob2JqLT55c3RfcmRldikpOworI2Vsc2UKKwkJCWluaXRfc3BlY2lhbF9pbm9k ZShpbm9kZSwgb2JqLT55c3RfbW9kZSwKKwkJCQkJKGRldl90KSAob2JqLT55c3RfcmRldikp OworI2VuZGlmCisJCQlicmVhazsKKwkJY2FzZSBTX0lGUkVHOgkvKiBmaWxlICovCisJCQlp bm9kZS0+aV9vcCA9ICZ5YWZmc19maWxlX2lub2RlX29wZXJhdGlvbnM7CisJCQlpbm9kZS0+ aV9mb3AgPSAmeWFmZnNfZmlsZV9vcGVyYXRpb25zOworCQkJaW5vZGUtPmlfbWFwcGluZy0+ YV9vcHMgPQorCQkJCSZ5YWZmc19maWxlX2FkZHJlc3Nfb3BlcmF0aW9uczsKKwkJCWJyZWFr OworCQljYXNlIFNfSUZESVI6CS8qIGRpcmVjdG9yeSAqLworCQkJaW5vZGUtPmlfb3AgPSAm eWFmZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7CisJCQlpbm9kZS0+aV9mb3AgPSAmeWFmZnNf ZGlyX29wZXJhdGlvbnM7CisJCQlicmVhazsKKwkJY2FzZSBTX0lGTE5LOgkvKiBzeW1saW5r ICovCisJCQlpbm9kZS0+aV9vcCA9ICZ5YWZmc19zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7 CisJCQlicmVhazsKKwkJfQorCisJCXlhZmZzX0lub2RlVG9PYmplY3RMVihpbm9kZSkgPSBv Ymo7CisKKwkJb2JqLT5teUlub2RlID0gaW5vZGU7CisKKwl9IGVsc2UgeworCQlUKFlBRkZT X1RSQUNFX09TLAorCQkJKCJ5YWZmc19GaWxlSW5vZGUgaW52YWxpZCBwYXJhbWV0ZXJzXG4i KSk7CisJfQorCit9CisKK3N0cnVjdCBpbm9kZSAqeWFmZnNfZ2V0X2lub2RlKHN0cnVjdCBz dXBlcl9ibG9jayAqc2IsIGludCBtb2RlLCBpbnQgZGV2LAorCQkJCXlhZmZzX09iamVjdCAq b2JqKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisKKwlpZiAoIXNiKSB7CisJCVQoWUFG RlNfVFJBQ0VfT1MsCisJCQkoInlhZmZzX2dldF9pbm9kZSBmb3IgTlVMTCBzdXBlcl9ibG9j ayEhXG4iKSk7CisJCXJldHVybiBOVUxMOworCisJfQorCisJaWYgKCFvYmopIHsKKwkJVChZ QUZGU19UUkFDRV9PUywKKwkJCSgieWFmZnNfZ2V0X2lub2RlIGZvciBOVUxMIG9iamVjdCEh XG4iKSk7CisJCXJldHVybiBOVUxMOworCisJfQorCisJVChZQUZGU19UUkFDRV9PUywKKwkJ KCJ5YWZmc19nZXRfaW5vZGUgZm9yIG9iamVjdCAlZFxuIiwgb2JqLT5vYmplY3RJZCkpOwor CisJaW5vZGUgPSBZX0lHRVQoc2IsIG9iai0+b2JqZWN0SWQpOworCWlmIChJU19FUlIoaW5v ZGUpKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIE5CIFNpZGUgZWZmZWN0OiBpZ2V0IGNhbGxz IGJhY2sgdG8geWFmZnNfcmVhZF9pbm9kZSgpLiAqLworCS8qIGlnZXQgYWxzbyBpbmNyZW1l bnRzIHRoZSBpbm9kZSdzIGlfY291bnQgKi8KKwkvKiBOQiBZb3UgY2FuJ3QgYmUgaG9sZGlu ZyBncm9zc0xvY2sgb3IgZGVhZGxvY2sgd2lsbCBoYXBwZW4hICovCisKKwlyZXR1cm4gaW5v ZGU7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHlhZmZzX2ZpbGVfd3JpdGUoc3RydWN0IGZpbGUg KmYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IG4sCisJCQkJbG9mZl90ICpwb3MpCit7CisJ eWFmZnNfT2JqZWN0ICpvYmo7CisJaW50IG5Xcml0dGVuLCBpcG9zOworCXN0cnVjdCBpbm9k ZSAqaW5vZGU7CisJeWFmZnNfRGV2aWNlICpkZXY7CisKKwlvYmogPSB5YWZmc19EZW50cnlU b09iamVjdChmLT5mX2RlbnRyeSk7CisKKwlkZXYgPSBvYmotPm15RGV2OworCisJeWFmZnNf R3Jvc3NMb2NrKGRldik7CisKKwlpbm9kZSA9IGYtPmZfZGVudHJ5LT5kX2lub2RlOworCisJ aWYgKCFTX0lTQkxLKGlub2RlLT5pX21vZGUpICYmIGYtPmZfZmxhZ3MgJiBPX0FQUEVORCkK KwkJaXBvcyA9IGlub2RlLT5pX3NpemU7CisJZWxzZQorCQlpcG9zID0gKnBvczsKKworCWlm ICghb2JqKQorCQlUKFlBRkZTX1RSQUNFX09TLAorCQkJKCJ5YWZmc19maWxlX3dyaXRlOiBo ZXkgb2JqIGlzIG51bGwhXG4iKSk7CisJZWxzZQorCQlUKFlBRkZTX1RSQUNFX09TLAorCQkJ KCJ5YWZmc19maWxlX3dyaXRlIGFib3V0IHRvIHdyaXRlIHdyaXRpbmcgJXp1IGJ5dGVzIgor CQkJInRvIG9iamVjdCAlZCBhdCAlZFxuIiwKKwkJCW4sIG9iai0+b2JqZWN0SWQsIGlwb3Mp KTsKKworCW5Xcml0dGVuID0geWFmZnNfV3JpdGVEYXRhVG9GaWxlKG9iaiwgYnVmLCBpcG9z LCBuLCAwKTsKKworCVQoWUFGRlNfVFJBQ0VfT1MsCisJCSgieWFmZnNfZmlsZV93cml0ZSB3 cml0aW5nICV6dSBieXRlcywgJWQgd3JpdHRlbiBhdCAlZFxuIiwKKwkJbiwgbldyaXR0ZW4s IGlwb3MpKTsKKworCWlmIChuV3JpdHRlbiA+IDApIHsKKwkJaXBvcyArPSBuV3JpdHRlbjsK KwkJKnBvcyA9IGlwb3M7CisJCWlmIChpcG9zID4gaW5vZGUtPmlfc2l6ZSkgeworCQkJaW5v ZGUtPmlfc2l6ZSA9IGlwb3M7CisJCQlpbm9kZS0+aV9ibG9ja3MgPSAoaXBvcyArIDUxMSkg Pj4gOTsKKworCQkJVChZQUZGU19UUkFDRV9PUywKKwkJCQkoInlhZmZzX2ZpbGVfd3JpdGUg c2l6ZSB1cGRhdGVkIHRvICVkIGJ5dGVzLCAiCisJCQkJIiVkIGJsb2Nrc1xuIiwKKwkJCQlp cG9zLCAoaW50KShpbm9kZS0+aV9ibG9ja3MpKSk7CisJCX0KKworCX0KKwl5YWZmc19Hcm9z c1VubG9jayhkZXYpOworCXJldHVybiAobldyaXR0ZW4gPT0gMCkgJiYgKG4gPiAwKSA/IC1F Tk9TUEMgOiBuV3JpdHRlbjsKK30KKworLyogU3BhY2UgaG9sZGluZyBhbmQgZnJlZWluZyBp cyBkb25lIHRvIGVuc3VyZSB3ZSBoYXZlIHNwYWNlIGF2YWlsYWJsZSBmb3Igd3JpdGVfYmVn aW4vZW5kICovCisvKiBGb3Igbm93IHdlIGp1c3QgYXNzdW1lIGZldyBwYXJhbGxlbCB3cml0 ZXMgYW5kIGNoZWNrIGFnYWluc3QgYSBzbWFsbCBudW1iZXIuICovCisvKiBUb2RvOiBuZWVk IHRvIGRvIHRoaXMgd2l0aCBhIGNvdW50ZXIgdG8gaGFuZGxlIHBhcmFsbGVsIHJlYWRzIGJl dHRlciAqLworCitzdGF0aWMgc3NpemVfdCB5YWZmc19ob2xkX3NwYWNlKHN0cnVjdCBmaWxl ICpmKQoreworCXlhZmZzX09iamVjdCAqb2JqOworCXlhZmZzX0RldmljZSAqZGV2OworCisJ aW50IG5GcmVlQ2h1bmtzOworCisKKwlvYmogPSB5YWZmc19EZW50cnlUb09iamVjdChmLT5m X2RlbnRyeSk7CisKKwlkZXYgPSBvYmotPm15RGV2OworCisJeWFmZnNfR3Jvc3NMb2NrKGRl dik7CisKKwluRnJlZUNodW5rcyA9IHlhZmZzX0dldE51bWJlck9mRnJlZUNodW5rcyhkZXYp OworCisJeWFmZnNfR3Jvc3NVbmxvY2soZGV2KTsKKworCXJldHVybiAobkZyZWVDaHVua3Mg PiAyMCkgPyAxIDogMDsKK30KKworc3RhdGljIHZvaWQgeWFmZnNfcmVsZWFzZV9zcGFjZShz dHJ1Y3QgZmlsZSAqZikKK3sKKwl5YWZmc19PYmplY3QgKm9iajsKKwl5YWZmc19EZXZpY2Ug KmRldjsKKworCisJb2JqID0geWFmZnNfRGVudHJ5VG9PYmplY3QoZi0+Zl9kZW50cnkpOwor CisJZGV2ID0gb2JqLT5teURldjsKKworCXlhZmZzX0dyb3NzTG9jayhkZXYpOworCisKKwl5 YWZmc19Hcm9zc1VubG9jayhkZXYpOworfQorCitzdGF0aWMgaW50IHlhZmZzX3JlYWRkaXIo c3RydWN0IGZpbGUgKmYsIHZvaWQgKmRpcmVudCwgZmlsbGRpcl90IGZpbGxkaXIpCit7CisJ eWFmZnNfT2JqZWN0ICpvYmo7CisJeWFmZnNfRGV2aWNlICpkZXY7CisJc3RydWN0IGlub2Rl ICppbm9kZSA9IGYtPmZfZGVudHJ5LT5kX2lub2RlOworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0 LCBjdXJvZmZzOworCXN0cnVjdCB5bGlzdF9oZWFkICppOworCXlhZmZzX09iamVjdCAqbDsK KworCWNoYXIgbmFtZVtZQUZGU19NQVhfTkFNRV9MRU5HVEggKyAxXTsKKworCW9iaiA9IHlh ZmZzX0RlbnRyeVRvT2JqZWN0KGYtPmZfZGVudHJ5KTsKKwlkZXYgPSBvYmotPm15RGV2Owor CisJeWFmZnNfR3Jvc3NMb2NrKGRldik7CisKKwlvZmZzZXQgPSBmLT5mX3BvczsKKworCVQo WUFGRlNfVFJBQ0VfT1MsICgieWFmZnNfcmVhZGRpcjogc3RhcnRpbmcgYXQgJWRcbiIsIChp bnQpb2Zmc2V0KSk7CisKKwlpZiAob2Zmc2V0ID09IDApIHsKKwkJVChZQUZGU19UUkFDRV9P UywKKwkJCSgieWFmZnNfcmVhZGRpcjogZW50cnkgLiBpbm8gJWQgXG4iLAorCQkJKGludClp bm9kZS0+aV9pbm8pKTsKKwkJaWYgKGZpbGxkaXIoZGlyZW50LCAiLiIsIDEsIG9mZnNldCwg aW5vZGUtPmlfaW5vLCBEVF9ESVIpIDwgMCkKKwkJCWdvdG8gb3V0OworCQlvZmZzZXQrKzsK KwkJZi0+Zl9wb3MrKzsKKwl9CisJaWYgKG9mZnNldCA9PSAxKSB7CisJCVQoWUFGRlNfVFJB Q0VfT1MsCisJCQkoInlhZmZzX3JlYWRkaXI6IGVudHJ5IC4uIGlubyAlZCBcbiIsCisJCQko aW50KWYtPmZfZGVudHJ5LT5kX3BhcmVudC0+ZF9pbm9kZS0+aV9pbm8pKTsKKwkJaWYgKGZp bGxkaXIoZGlyZW50LCAiLi4iLCAyLCBvZmZzZXQsCisJCQlmLT5mX2RlbnRyeS0+ZF9wYXJl bnQtPmRfaW5vZGUtPmlfaW5vLCBEVF9ESVIpIDwgMCkKKwkJCWdvdG8gb3V0OworCQlvZmZz ZXQrKzsKKwkJZi0+Zl9wb3MrKzsKKwl9CisKKwljdXJvZmZzID0gMTsKKworCS8qIElmIHRo ZSBkaXJlY3RvcnkgaGFzIGNoYW5nZWQgc2luY2UgdGhlIG9wZW4gb3IgbGFzdCBjYWxsIHRv CisJICAgcmVhZGRpciwgcmV3aW5kIHRvIGFmdGVyIHRoZSAyIGNhbm5lZCBlbnRyaWVzLiAq LworCisJaWYgKGYtPmZfdmVyc2lvbiAhPSBpbm9kZS0+aV92ZXJzaW9uKSB7CisJCW9mZnNl dCA9IDI7CisJCWYtPmZfcG9zID0gb2Zmc2V0OworCQlmLT5mX3ZlcnNpb24gPSBpbm9kZS0+ aV92ZXJzaW9uOworCX0KKworCXlsaXN0X2Zvcl9lYWNoKGksICZvYmotPnZhcmlhbnQuZGly ZWN0b3J5VmFyaWFudC5jaGlsZHJlbikgeworCQljdXJvZmZzKys7CisJCWlmIChjdXJvZmZz ID49IG9mZnNldCkgeworCQkJbCA9IHlsaXN0X2VudHJ5KGksIHlhZmZzX09iamVjdCwgc2li bGluZ3MpOworCisJCQl5YWZmc19HZXRPYmplY3ROYW1lKGwsIG5hbWUsCisJCQkJCSAgICBZ QUZGU19NQVhfTkFNRV9MRU5HVEggKyAxKTsKKwkJCVQoWUFGRlNfVFJBQ0VfT1MsCisJCQkg ICgieWFmZnNfcmVhZGRpcjogJXMgaW5vZGUgJWRcbiIsIG5hbWUsCisJCQkgICB5YWZmc19H ZXRPYmplY3RJbm9kZShsKSkpOworCisJCQlpZiAoZmlsbGRpcihkaXJlbnQsCisJCQkJCW5h bWUsCisJCQkJCXN0cmxlbihuYW1lKSwKKwkJCQkJb2Zmc2V0LAorCQkJCQl5YWZmc19HZXRP YmplY3RJbm9kZShsKSwKKwkJCQkJeWFmZnNfR2V0T2JqZWN0VHlwZShsKSkgPCAwKQorCQkJ CWdvdG8gdXBfYW5kX291dDsKKworCQkJb2Zmc2V0Kys7CisJCQlmLT5mX3BvcysrOworCQl9 CisJfQorCit1cF9hbmRfb3V0Ogorb3V0OgorCXlhZmZzX0dyb3NzVW5sb2NrKGRldik7CisK KwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEZpbGUgY3JlYXRpb24uIEFsbG9jYXRlIGFuIGlu b2RlLCBhbmQgd2UncmUgZG9uZS4uCisgKi8KKworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8 IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDI5KQorI2RlZmluZSBZQ1JFRCh4KSB4CisjZWxzZQor I2RlZmluZSBZQ1JFRCh4KSAoeC0+Y3JlZCkKKyNlbmRpZgorCisjaWYgKExJTlVYX1ZFUlNJ T05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsIDUsIDApKQorc3RhdGljIGludCB5YWZmc19t a25vZChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9k ZSwKKwkJCWRldl90IHJkZXYpCisjZWxzZQorc3RhdGljIGludCB5YWZmc19ta25vZChzdHJ1 Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9kZSwKKwkJCWlu dCByZGV2KQorI2VuZGlmCit7CisJc3RydWN0IGlub2RlICppbm9kZTsKKworCXlhZmZzX09i amVjdCAqb2JqID0gTlVMTDsKKwl5YWZmc19EZXZpY2UgKmRldjsKKworCXlhZmZzX09iamVj dCAqcGFyZW50ID0geWFmZnNfSW5vZGVUb09iamVjdChkaXIpOworCisJaW50IGVycm9yID0g LUVOT1NQQzsKKwl1aWRfdCB1aWQgPSBZQ1JFRChjdXJyZW50KS0+ZnN1aWQ7CisJZ2lkX3Qg Z2lkID0gKGRpci0+aV9tb2RlICYgU19JU0dJRCkgPyBkaXItPmlfZ2lkIDogWUNSRUQoY3Vy cmVudCktPmZzZ2lkOworCisJaWYgKChkaXItPmlfbW9kZSAmIFNfSVNHSUQpICYmIFNfSVNE SVIobW9kZSkpCisJCW1vZGUgfD0gU19JU0dJRDsKKworCWlmIChwYXJlbnQpIHsKKwkJVChZ QUZGU19UUkFDRV9PUywKKwkJCSgieWFmZnNfbWtub2Q6IHBhcmVudCBvYmplY3QgJWQgdHlw ZSAlZFxuIiwKKwkJCXBhcmVudC0+b2JqZWN0SWQsIHBhcmVudC0+dmFyaWFudFR5cGUpKTsK Kwl9IGVsc2UgeworCQlUKFlBRkZTX1RSQUNFX09TLAorCQkJKCJ5YWZmc19ta25vZDogY291 bGQgbm90IGdldCBwYXJlbnQgb2JqZWN0XG4iKSk7CisJCXJldHVybiAtRVBFUk07CisJfQor CisJVChZQUZGU19UUkFDRV9PUywgKCJ5YWZmc19ta25vZDogbWFraW5nIG9qZWN0IGZvciAl cywgIgorCQkJIm1vZGUgJXggZGV2ICV4XG4iLAorCQkJZGVudHJ5LT5kX25hbWUubmFtZSwg bW9kZSwgcmRldikpOworCisJZGV2ID0gcGFyZW50LT5teURldjsKKworCXlhZmZzX0dyb3Nz TG9jayhkZXYpOworCisJc3dpdGNoIChtb2RlICYgU19JRk1UKSB7CisJZGVmYXVsdDoKKwkJ LyogU3BlY2lhbCAoc29ja2V0LCBmaWZvLCBkZXZpY2UuLi4pICovCisJCVQoWUFGRlNfVFJB Q0VfT1MsICgieWFmZnNfbWtub2Q6IG1ha2luZyBzcGVjaWFsXG4iKSk7CisjaWYgKExJTlVY X1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsIDUsIDApKQorCQlvYmogPSB5YWZm c19Na25vZFNwZWNpYWwocGFyZW50LCBkZW50cnktPmRfbmFtZS5uYW1lLCBtb2RlLCB1aWQs CisJCQkJZ2lkLCBvbGRfZW5jb2RlX2RldihyZGV2KSk7CisjZWxzZQorCQlvYmogPSB5YWZm c19Na25vZFNwZWNpYWwocGFyZW50LCBkZW50cnktPmRfbmFtZS5uYW1lLCBtb2RlLCB1aWQs CisJCQkJZ2lkLCByZGV2KTsKKyNlbmRpZgorCQlicmVhazsKKwljYXNlIFNfSUZSRUc6CQkv KiBmaWxlICAgICAgICAgICovCisJCVQoWUFGRlNfVFJBQ0VfT1MsICgieWFmZnNfbWtub2Q6 IG1ha2luZyBmaWxlXG4iKSk7CisJCW9iaiA9IHlhZmZzX01rbm9kRmlsZShwYXJlbnQsIGRl bnRyeS0+ZF9uYW1lLm5hbWUsIG1vZGUsIHVpZCwKKwkJCQlnaWQpOworCQlicmVhazsKKwlj YXNlIFNfSUZESVI6CQkvKiBkaXJlY3RvcnkgKi8KKwkJVChZQUZGU19UUkFDRV9PUywKKwkJ CSgieWFmZnNfbWtub2Q6IG1ha2luZyBkaXJlY3RvcnlcbiIpKTsKKwkJb2JqID0geWFmZnNf TWtub2REaXJlY3RvcnkocGFyZW50LCBkZW50cnktPmRfbmFtZS5uYW1lLCBtb2RlLAorCQkJ CQl1aWQsIGdpZCk7CisJCWJyZWFrOworCWNhc2UgU19JRkxOSzoJCS8qIHN5bWxpbmsgKi8K KwkJVChZQUZGU19UUkFDRV9PUywgKCJ5YWZmc19ta25vZDogbWFraW5nIHN5bWxpbmtcbiIp KTsKKwkJb2JqID0gTlVMTDsJLyogRG8gd2UgZXZlciBnZXQgaGVyZT8gKi8KKwkJYnJlYWs7 CisJfQorCisJLyogQ2FuIG5vdCBjYWxsIHlhZmZzX2dldF9pbm9kZSgpIHdpdGggZ3Jvc3Mg bG9jayBoZWxkICovCisJeWFmZnNfR3Jvc3NVbmxvY2soZGV2KTsKKworCWlmIChvYmopIHsK KwkJaW5vZGUgPSB5YWZmc19nZXRfaW5vZGUoZGlyLT5pX3NiLCBtb2RlLCByZGV2LCBvYmop OworCQlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOworCQl1cGRhdGVfZGlyX3RpbWUo ZGlyKTsKKwkJVChZQUZGU19UUkFDRV9PUywKKwkJCSgieWFmZnNfbWtub2QgY3JlYXRlZCBv YmplY3QgJWQgY291bnQgPSAlZFxuIiwKKwkJCW9iai0+b2JqZWN0SWQsIGF0b21pY19yZWFk KCZpbm9kZS0+aV9jb3VudCkpKTsKKwkJZXJyb3IgPSAwOworCX0gZWxzZSB7CisJCVQoWUFG RlNfVFJBQ0VfT1MsCisJCQkoInlhZmZzX21rbm9kIGZhaWxlZCBtYWtpbmcgb2JqZWN0XG4i KSk7CisJCWVycm9yID0gLUVOT01FTTsKKwl9CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0 YXRpYyBpbnQgeWFmZnNfbWtkaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkg KmRlbnRyeSwgaW50IG1vZGUpCit7CisJaW50IHJldFZhbDsKKwlUKFlBRkZTX1RSQUNFX09T LCAoInlhZmZzX21rZGlyXG4iKSk7CisJcmV0VmFsID0geWFmZnNfbWtub2QoZGlyLCBkZW50 cnksIG1vZGUgfCBTX0lGRElSLCAwKTsKKwlyZXR1cm4gcmV0VmFsOworfQorCisjaWYgKExJ TlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsIDUsIDApKQorc3RhdGljIGlu dCB5YWZmc19jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRy eSwgaW50IG1vZGUsCisJCQlzdHJ1Y3QgbmFtZWlkYXRhICpuKQorI2Vsc2UKK3N0YXRpYyBp bnQgeWFmZnNfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50 cnksIGludCBtb2RlKQorI2VuZGlmCit7CisJVChZQUZGU19UUkFDRV9PUywgKCJ5YWZmc19j cmVhdGVcbiIpKTsKKwlyZXR1cm4geWFmZnNfbWtub2QoZGlyLCBkZW50cnksIG1vZGUgfCBT X0lGUkVHLCAwKTsKK30KKworc3RhdGljIGludCB5YWZmc191bmxpbmsoc3RydWN0IGlub2Rl ICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwlpbnQgcmV0VmFsOworCisJeWFm ZnNfRGV2aWNlICpkZXY7CisKKwlUKFlBRkZTX1RSQUNFX09TLAorCQkoInlhZmZzX3VubGlu ayAlZDolc1xuIiwgKGludCkoZGlyLT5pX2lubyksCisJCWRlbnRyeS0+ZF9uYW1lLm5hbWUp KTsKKworCWRldiA9IHlhZmZzX0lub2RlVG9PYmplY3QoZGlyKS0+bXlEZXY7CisKKwl5YWZm c19Hcm9zc0xvY2soZGV2KTsKKworCXJldFZhbCA9IHlhZmZzX1VubGluayh5YWZmc19Jbm9k ZVRvT2JqZWN0KGRpciksIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOworCisJaWYgKHJldFZhbCA9 PSBZQUZGU19PSykgeworCQlkZW50cnktPmRfaW5vZGUtPmlfbmxpbmstLTsKKwkJZGlyLT5p X3ZlcnNpb24rKzsKKwkJeWFmZnNfR3Jvc3NVbmxvY2soZGV2KTsKKwkJbWFya19pbm9kZV9k aXJ0eShkZW50cnktPmRfaW5vZGUpOworCQl1cGRhdGVfZGlyX3RpbWUoZGlyKTsKKwkJcmV0 dXJuIDA7CisJfQorCXlhZmZzX0dyb3NzVW5sb2NrKGRldik7CisJcmV0dXJuIC1FTk9URU1Q VFk7Cit9CisKKy8qCisgKiBDcmVhdGUgYSBsaW5rLi4uCisgKi8KK3N0YXRpYyBpbnQgeWFm ZnNfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwK KwkJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0g b2xkX2RlbnRyeS0+ZF9pbm9kZTsKKwl5YWZmc19PYmplY3QgKm9iaiA9IE5VTEw7CisJeWFm ZnNfT2JqZWN0ICpsaW5rID0gTlVMTDsKKwl5YWZmc19EZXZpY2UgKmRldjsKKworCVQoWUFG RlNfVFJBQ0VfT1MsICgieWFmZnNfbGlua1xuIikpOworCisJb2JqID0geWFmZnNfSW5vZGVU b09iamVjdChpbm9kZSk7CisJZGV2ID0gb2JqLT5teURldjsKKworCXlhZmZzX0dyb3NzTG9j ayhkZXYpOworCisJaWYgKCFTX0lTRElSKGlub2RlLT5pX21vZGUpKQkJLyogRG9uJ3QgbGlu ayBkaXJlY3RvcmllcyAqLworCQlsaW5rID0geWFmZnNfTGluayh5YWZmc19Jbm9kZVRvT2Jq ZWN0KGRpciksIGRlbnRyeS0+ZF9uYW1lLm5hbWUsCisJCQlvYmopOworCisJaWYgKGxpbmsp IHsKKwkJb2xkX2RlbnRyeS0+ZF9pbm9kZS0+aV9ubGluayA9IHlhZmZzX0dldE9iamVjdExp bmtDb3VudChvYmopOworCQlkX2luc3RhbnRpYXRlKGRlbnRyeSwgb2xkX2RlbnRyeS0+ZF9p bm9kZSk7CisJCWF0b21pY19pbmMoJm9sZF9kZW50cnktPmRfaW5vZGUtPmlfY291bnQpOwor CQlUKFlBRkZTX1RSQUNFX09TLAorCQkJKCJ5YWZmc19saW5rIGxpbmsgY291bnQgJWQgaV9j b3VudCAlZFxuIiwKKwkJCW9sZF9kZW50cnktPmRfaW5vZGUtPmlfbmxpbmssCisJCQlhdG9t aWNfcmVhZCgmb2xkX2RlbnRyeS0+ZF9pbm9kZS0+aV9jb3VudCkpKTsKKwl9CisKKwl5YWZm c19Hcm9zc1VubG9jayhkZXYpOworCisJaWYgKGxpbmspeworCQl1cGRhdGVfZGlyX3RpbWUo ZGlyKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIC1FUEVSTTsKK30KKworc3RhdGlj IGludCB5YWZmc19zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpk ZW50cnksCisJCQkJY29uc3QgY2hhciAqc3ltbmFtZSkKK3sKKwl5YWZmc19PYmplY3QgKm9i ajsKKwl5YWZmc19EZXZpY2UgKmRldjsKKwl1aWRfdCB1aWQgPSBZQ1JFRChjdXJyZW50KS0+ ZnN1aWQ7CisJZ2lkX3QgZ2lkID0gKGRpci0+aV9tb2RlICYgU19JU0dJRCkgPyBkaXItPmlf Z2lkIDogWUNSRUQoY3VycmVudCktPmZzZ2lkOworCisJVChZQUZGU19UUkFDRV9PUywgKCJ5 YWZmc19zeW1saW5rXG4iKSk7CisKKwlkZXYgPSB5YWZmc19Jbm9kZVRvT2JqZWN0KGRpcikt Pm15RGV2OworCXlhZmZzX0dyb3NzTG9jayhkZXYpOworCW9iaiA9IHlhZmZzX01rbm9kU3lt TGluayh5YWZmc19Jbm9kZVRvT2JqZWN0KGRpciksIGRlbnRyeS0+ZF9uYW1lLm5hbWUsCisJ CQkJU19JRkxOSyB8IFNfSVJXWFVHTywgdWlkLCBnaWQsIHN5bW5hbWUpOworCXlhZmZzX0dy b3NzVW5sb2NrKGRldik7CisKKwlpZiAob2JqKSB7CisJCXN0cnVjdCBpbm9kZSAqaW5vZGU7 CisKKwkJaW5vZGUgPSB5YWZmc19nZXRfaW5vZGUoZGlyLT5pX3NiLCBvYmotPnlzdF9tb2Rl LCAwLCBvYmopOworCQlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOworCQl1cGRhdGVf ZGlyX3RpbWUoZGlyKTsKKwkJVChZQUZGU19UUkFDRV9PUywgKCJzeW1saW5rIGNyZWF0ZWQg T0tcbiIpKTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJVChZQUZGU19UUkFDRV9PUywg KCJzeW1saW5rIG5vdCBjcmVhdGVkXG4iKSk7CisJfQorCisJcmV0dXJuIC1FTk9NRU07Cit9 CisKK3N0YXRpYyBpbnQgeWFmZnNfc3luY19vYmplY3Qoc3RydWN0IGZpbGUgKmZpbGUsIHN0 cnVjdCBkZW50cnkgKmRlbnRyeSwKKwkJCQlpbnQgZGF0YXN5bmMpCit7CisKKwl5YWZmc19P YmplY3QgKm9iajsKKwl5YWZmc19EZXZpY2UgKmRldjsKKworCW9iaiA9IHlhZmZzX0RlbnRy eVRvT2JqZWN0KGRlbnRyeSk7CisKKwlkZXYgPSBvYmotPm15RGV2OworCisJVChZQUZGU19U UkFDRV9PUywgKCJ5YWZmc19zeW5jX29iamVjdFxuIikpOworCXlhZmZzX0dyb3NzTG9jayhk ZXYpOworCXlhZmZzX0ZsdXNoRmlsZShvYmosIDEpOworCXlhZmZzX0dyb3NzVW5sb2NrKGRl dik7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGUgVkZTIGxheWVyIGFscmVhZHkgZG9l cyBhbGwgdGhlIGRlbnRyeSBzdHVmZiBmb3IgcmVuYW1lLgorICoKKyAqIE5COiBQT1NJWCBz YXlzIHlvdSBjYW4gcmVuYW1lIGFuIG9iamVjdCBvdmVyIGFuIG9sZCBvYmplY3Qgb2YgdGhl IHNhbWUgbmFtZQorICovCitzdGF0aWMgaW50IHlhZmZzX3JlbmFtZShzdHJ1Y3QgaW5vZGUg Km9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCisJCQlzdHJ1Y3QgaW5vZGUg Km5ld19kaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCit7CisJeWFmZnNfRGV2aWNl ICpkZXY7CisJaW50IHJldFZhbCA9IFlBRkZTX0ZBSUw7CisJeWFmZnNfT2JqZWN0ICp0YXJn ZXQ7CisKKwlUKFlBRkZTX1RSQUNFX09TLCAoInlhZmZzX3JlbmFtZVxuIikpOworCWRldiA9 IHlhZmZzX0lub2RlVG9PYmplY3Qob2xkX2RpciktPm15RGV2OworCisJeWFmZnNfR3Jvc3NM b2NrKGRldik7CisKKwkvKiBDaGVjayBpZiB0aGUgdGFyZ2V0IGlzIGFuIGV4aXN0aW5nIGRp cmVjdG9yeSB0aGF0IGlzIG5vdCBlbXB0eS4gKi8KKwl0YXJnZXQgPSB5YWZmc19GaW5kT2Jq ZWN0QnlOYW1lKHlhZmZzX0lub2RlVG9PYmplY3QobmV3X2RpciksCisJCQkJbmV3X2RlbnRy eS0+ZF9uYW1lLm5hbWUpOworCisKKworCWlmICh0YXJnZXQgJiYgdGFyZ2V0LT52YXJpYW50 VHlwZSA9PSBZQUZGU19PQkpFQ1RfVFlQRV9ESVJFQ1RPUlkgJiYKKwkJIXlsaXN0X2VtcHR5 KCZ0YXJnZXQtPnZhcmlhbnQuZGlyZWN0b3J5VmFyaWFudC5jaGlsZHJlbikpIHsKKworCQlU KFlBRkZTX1RSQUNFX09TLCAoInRhcmdldCBpcyBub24tZW1wdHkgZGlyXG4iKSk7CisKKwkJ cmV0VmFsID0gWUFGRlNfRkFJTDsKKwl9IGVsc2UgeworCQkvKiBOb3cgZG9lcyB1bmxpbmtp bmcgaW50ZXJuYWxseSB1c2luZyBzaGFkb3dpbmcgbWVjaGFuaXNtICovCisJCVQoWUFGRlNf VFJBQ0VfT1MsICgiY2FsbGluZyB5YWZmc19SZW5hbWVPYmplY3RcbiIpKTsKKworCQlyZXRW YWwgPSB5YWZmc19SZW5hbWVPYmplY3QoeWFmZnNfSW5vZGVUb09iamVjdChvbGRfZGlyKSwK KwkJCQlvbGRfZGVudHJ5LT5kX25hbWUubmFtZSwKKwkJCQl5YWZmc19Jbm9kZVRvT2JqZWN0 KG5ld19kaXIpLAorCQkJCW5ld19kZW50cnktPmRfbmFtZS5uYW1lKTsKKwl9CisJeWFmZnNf R3Jvc3NVbmxvY2soZGV2KTsKKworCWlmIChyZXRWYWwgPT0gWUFGRlNfT0spIHsKKwkJaWYg KHRhcmdldCkgeworCQkJbmV3X2RlbnRyeS0+ZF9pbm9kZS0+aV9ubGluay0tOworCQkJbWFy a19pbm9kZV9kaXJ0eShuZXdfZGVudHJ5LT5kX2lub2RlKTsKKwkJfQorCQkKKwkJdXBkYXRl X2Rpcl90aW1lKG9sZF9kaXIpOworCQlpZihvbGRfZGlyICE9IG5ld19kaXIpCisJCQl1cGRh dGVfZGlyX3RpbWUobmV3X2Rpcik7CisJCXJldHVybiAwOworCX0gZWxzZSB7CisJCXJldHVy biAtRU5PVEVNUFRZOworCX0KK30KKworc3RhdGljIGludCB5YWZmc19zZXRhdHRyKHN0cnVj dCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICphdHRyKQoreworCXN0cnVjdCBpbm9k ZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CisJaW50IGVycm9yOworCXlhZmZzX0Rldmlj ZSAqZGV2OworCisJVChZQUZGU19UUkFDRV9PUywKKwkJKCJ5YWZmc19zZXRhdHRyIG9mIG9i amVjdCAlZFxuIiwKKwkJeWFmZnNfSW5vZGVUb09iamVjdChpbm9kZSktPm9iamVjdElkKSk7 CisKKwllcnJvciA9IGlub2RlX2NoYW5nZV9vayhpbm9kZSwgYXR0cik7CisJaWYgKGVycm9y ID09IDApIHsKKwkJZGV2ID0geWFmZnNfSW5vZGVUb09iamVjdChpbm9kZSktPm15RGV2Owor CQl5YWZmc19Hcm9zc0xvY2soZGV2KTsKKwkJaWYgKHlhZmZzX1NldEF0dHJpYnV0ZXMoeWFm ZnNfSW5vZGVUb09iamVjdChpbm9kZSksIGF0dHIpID09CisJCQkJWUFGRlNfT0spIHsKKwkJ CWVycm9yID0gMDsKKwkJfSBlbHNlIHsKKwkJCWVycm9yID0gLUVQRVJNOworCQl9CisJCXlh ZmZzX0dyb3NzVW5sb2NrKGRldik7CisJCWlmICghZXJyb3IpCisJCQllcnJvciA9IGlub2Rl X3NldGF0dHIoaW5vZGUsIGF0dHIpOworCX0KKwlyZXR1cm4gZXJyb3I7Cit9CisKKyNpZiAo TElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiwgNiwgMTcpKQorc3RhdGlj IGludCB5YWZmc19zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRm cyAqYnVmKQoreworCXlhZmZzX0RldmljZSAqZGV2ID0geWFmZnNfRGVudHJ5VG9PYmplY3Qo ZGVudHJ5KS0+bXlEZXY7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGRlbnRyeS0+ZF9z YjsKKyNlbGlmIChMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLCA1LCAw KSkKK3N0YXRpYyBpbnQgeWFmZnNfc3RhdGZzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0 cnVjdCBrc3RhdGZzICpidWYpCit7CisJeWFmZnNfRGV2aWNlICpkZXYgPSB5YWZmc19TdXBl clRvRGV2aWNlKHNiKTsKKyNlbHNlCitzdGF0aWMgaW50IHlhZmZzX3N0YXRmcyhzdHJ1Y3Qg c3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3Qgc3RhdGZzICpidWYpCit7CisJeWFmZnNfRGV2aWNl ICpkZXYgPSB5YWZmc19TdXBlclRvRGV2aWNlKHNiKTsKKyNlbmRpZgorCisJVChZQUZGU19U UkFDRV9PUywgKCJ5YWZmc19zdGF0ZnNcbiIpKTsKKworCXlhZmZzX0dyb3NzTG9jayhkZXYp OworCisJYnVmLT5mX3R5cGUgPSBZQUZGU19NQUdJQzsKKwlidWYtPmZfYnNpemUgPSBzYi0+ c19ibG9ja3NpemU7CisJYnVmLT5mX25hbWVsZW4gPSAyNTU7CisKKwlpZiAoZGV2LT5uRGF0 YUJ5dGVzUGVyQ2h1bmsgJiAoZGV2LT5uRGF0YUJ5dGVzUGVyQ2h1bmsgLSAxKSkgeworCQkv KiBEbyB0aGlzIGlmIGNodW5rIHNpemUgaXMgbm90IGEgcG93ZXIgb2YgMiAqLworCisJCXVp bnQ2NF90IGJ5dGVzSW5EZXY7CisJCXVpbnQ2NF90IGJ5dGVzRnJlZTsKKworCQlieXRlc0lu RGV2ID0gKCh1aW50NjRfdCkoKGRldi0+ZW5kQmxvY2sgLSBkZXYtPnN0YXJ0QmxvY2sgKyAx KSkpICoKKwkJCSgodWludDY0X3QpKGRldi0+bkNodW5rc1BlckJsb2NrICogZGV2LT5uRGF0 YUJ5dGVzUGVyQ2h1bmspKTsKKworCQlkb19kaXYoYnl0ZXNJbkRldiwgc2ItPnNfYmxvY2tz aXplKTsgLyogYnl0ZXNJbkRldiBiZWNvbWVzIHRoZSBudW1iZXIgb2YgYmxvY2tzICovCisJ CWJ1Zi0+Zl9ibG9ja3MgPSBieXRlc0luRGV2OworCisJCWJ5dGVzRnJlZSAgPSAoKHVpbnQ2 NF90KSh5YWZmc19HZXROdW1iZXJPZkZyZWVDaHVua3MoZGV2KSkpICoKKwkJCSgodWludDY0 X3QpKGRldi0+bkRhdGFCeXRlc1BlckNodW5rKSk7CisKKwkJZG9fZGl2KGJ5dGVzRnJlZSwg c2ItPnNfYmxvY2tzaXplKTsKKworCQlidWYtPmZfYmZyZWUgPSBieXRlc0ZyZWU7CisKKwl9 IGVsc2UgaWYgKHNiLT5zX2Jsb2Nrc2l6ZSA+IGRldi0+bkRhdGFCeXRlc1BlckNodW5rKSB7 CisKKwkJYnVmLT5mX2Jsb2NrcyA9CisJCQkoZGV2LT5lbmRCbG9jayAtIGRldi0+c3RhcnRC bG9jayArIDEpICoKKwkJCWRldi0+bkNodW5rc1BlckJsb2NrIC8KKwkJCShzYi0+c19ibG9j a3NpemUgLyBkZXYtPm5EYXRhQnl0ZXNQZXJDaHVuayk7CisJCWJ1Zi0+Zl9iZnJlZSA9CisJ CQl5YWZmc19HZXROdW1iZXJPZkZyZWVDaHVua3MoZGV2KSAvCisJCQkoc2ItPnNfYmxvY2tz aXplIC8gZGV2LT5uRGF0YUJ5dGVzUGVyQ2h1bmspOworCX0gZWxzZSB7CisJCWJ1Zi0+Zl9i bG9ja3MgPQorCQkJKGRldi0+ZW5kQmxvY2sgLSBkZXYtPnN0YXJ0QmxvY2sgKyAxKSAqCisJ CQlkZXYtPm5DaHVua3NQZXJCbG9jayAqCisJCQkoZGV2LT5uRGF0YUJ5dGVzUGVyQ2h1bmsg LyBzYi0+c19ibG9ja3NpemUpOworCisJCWJ1Zi0+Zl9iZnJlZSA9CisJCQl5YWZmc19HZXRO dW1iZXJPZkZyZWVDaHVua3MoZGV2KSAqCisJCQkoZGV2LT5uRGF0YUJ5dGVzUGVyQ2h1bmsg LyBzYi0+c19ibG9ja3NpemUpOworCX0KKworCWJ1Zi0+Zl9maWxlcyA9IDA7CisJYnVmLT5m X2ZmcmVlID0gMDsKKwlidWYtPmZfYmF2YWlsID0gYnVmLT5mX2JmcmVlOworCisJeWFmZnNf R3Jvc3NVbmxvY2soZGV2KTsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHlhZmZz X2RvX3N5bmNfZnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKworCXlhZmZzX0Rldmlj ZSAqZGV2ID0geWFmZnNfU3VwZXJUb0RldmljZShzYik7CisJVChZQUZGU19UUkFDRV9PUywg KCJ5YWZmc19kb19zeW5jX2ZzXG4iKSk7CisKKwlpZiAoc2ItPnNfZGlydCkgeworCQl5YWZm c19Hcm9zc0xvY2soZGV2KTsKKworCQlpZiAoZGV2KSB7CisJCQl5YWZmc19GbHVzaEVudGly ZURldmljZUNhY2hlKGRldik7CisJCQl5YWZmc19DaGVja3BvaW50U2F2ZShkZXYpOworCQl9 CisKKwkJeWFmZnNfR3Jvc3NVbmxvY2soZGV2KTsKKworCQlzYi0+c19kaXJ0ID0gMDsKKwl9 CisJcmV0dXJuIDA7Cit9CisKKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxf VkVSU0lPTigyLCA2LCAxNykpCitzdGF0aWMgdm9pZCB5YWZmc193cml0ZV9zdXBlcihzdHJ1 Y3Qgc3VwZXJfYmxvY2sgKnNiKQorI2Vsc2UKK3N0YXRpYyBpbnQgeWFmZnNfd3JpdGVfc3Vw ZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKKyNlbmRpZgoreworCisJVChZQUZGU19UUkFD RV9PUywgKCJ5YWZmc193cml0ZV9zdXBlclxuIikpOworCWlmICh5YWZmc19hdXRvX2NoZWNr cG9pbnQgPj0gMikKKwkJeWFmZnNfZG9fc3luY19mcyhzYik7CisjaWYgKExJTlVYX1ZFUlNJ T05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDE4KSkKKwlyZXR1cm4gMDsKKyNlbmRp ZgorfQorCisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiwg NiwgMTcpKQorc3RhdGljIGludCB5YWZmc19zeW5jX2ZzKHN0cnVjdCBzdXBlcl9ibG9jayAq c2IsIGludCB3YWl0KQorI2Vsc2UKK3N0YXRpYyBpbnQgeWFmZnNfc3luY19mcyhzdHJ1Y3Qg c3VwZXJfYmxvY2sgKnNiKQorI2VuZGlmCit7CisJVChZQUZGU19UUkFDRV9PUywgKCJ5YWZm c19zeW5jX2ZzXG4iKSk7CisKKwlpZiAoeWFmZnNfYXV0b19jaGVja3BvaW50ID49IDEpCisJ CXlhZmZzX2RvX3N5bmNfZnMoc2IpOworCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBZQUZG U19VU0VfT1dOX0lHRVQKKworc3RhdGljIHN0cnVjdCBpbm9kZSAqeWFmZnNfaWdldChzdHJ1 Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGlubykKK3sKKwlzdHJ1Y3QgaW5v ZGUgKmlub2RlOworCXlhZmZzX09iamVjdCAqb2JqOworCXlhZmZzX0RldmljZSAqZGV2ID0g eWFmZnNfU3VwZXJUb0RldmljZShzYik7CisKKwlUKFlBRkZTX1RSQUNFX09TLAorCQkoInlh ZmZzX2lnZXQgZm9yICVsdVxuIiwgaW5vKSk7CisKKwlpbm9kZSA9IGlnZXRfbG9ja2VkKHNi LCBpbm8pOworCWlmICghaW5vZGUpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCWlm ICghKGlub2RlLT5pX3N0YXRlICYgSV9ORVcpKQorCQlyZXR1cm4gaW5vZGU7CisKKwkvKiBO QiBUaGlzIGlzIGNhbGxlZCBhcyBhIHNpZGUgZWZmZWN0IG9mIG90aGVyIGZ1bmN0aW9ucywg YnV0CisJICogd2UgaGFkIHRvIHJlbGVhc2UgdGhlIGxvY2sgdG8gcHJldmVudCBkZWFkbG9j a3MsIHNvCisJICogbmVlZCB0byBsb2NrIGFnYWluLgorCSAqLworCisJeWFmZnNfR3Jvc3NM b2NrKGRldik7CisKKwlvYmogPSB5YWZmc19GaW5kT2JqZWN0QnlOdW1iZXIoZGV2LCBpbm9k ZS0+aV9pbm8pOworCisJeWFmZnNfRmlsbElub2RlRnJvbU9iamVjdChpbm9kZSwgb2JqKTsK KworCXlhZmZzX0dyb3NzVW5sb2NrKGRldik7CisKKwl1bmxvY2tfbmV3X2lub2RlKGlub2Rl KTsKKwlyZXR1cm4gaW5vZGU7Cit9CisKKyNlbHNlCisKK3N0YXRpYyB2b2lkIHlhZmZzX3Jl YWRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwkvKiBOQiBUaGlzIGlzIGNhbGxl ZCBhcyBhIHNpZGUgZWZmZWN0IG9mIG90aGVyIGZ1bmN0aW9ucywgYnV0CisJICogd2UgaGFk IHRvIHJlbGVhc2UgdGhlIGxvY2sgdG8gcHJldmVudCBkZWFkbG9ja3MsIHNvCisJICogbmVl ZCB0byBsb2NrIGFnYWluLgorCSAqLworCisJeWFmZnNfT2JqZWN0ICpvYmo7CisJeWFmZnNf RGV2aWNlICpkZXYgPSB5YWZmc19TdXBlclRvRGV2aWNlKGlub2RlLT5pX3NiKTsKKworCVQo WUFGRlNfVFJBQ0VfT1MsCisJCSgieWFmZnNfcmVhZF9pbm9kZSBmb3IgJWRcbiIsIChpbnQp aW5vZGUtPmlfaW5vKSk7CisKKwl5YWZmc19Hcm9zc0xvY2soZGV2KTsKKworCW9iaiA9IHlh ZmZzX0ZpbmRPYmplY3RCeU51bWJlcihkZXYsIGlub2RlLT5pX2lubyk7CisKKwl5YWZmc19G aWxsSW5vZGVGcm9tT2JqZWN0KGlub2RlLCBvYmopOworCisJeWFmZnNfR3Jvc3NVbmxvY2so ZGV2KTsKK30KKworI2VuZGlmCisKK3N0YXRpYyBZTElTVF9IRUFEKHlhZmZzX2Rldl9saXN0 KTsKKworI2lmIDAgLyogbm90IHVzZWQgKi8KK3N0YXRpYyBpbnQgeWFmZnNfcmVtb3VudF9m cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgKmZsYWdzLCBjaGFyICpkYXRhKQorewor CXlhZmZzX0RldmljZSAgICAqZGV2ID0geWFmZnNfU3VwZXJUb0RldmljZShzYik7CisKKwlp ZiAoKmZsYWdzICYgTVNfUkRPTkxZKSB7CisJCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0geWFm ZnNfU3VwZXJUb0RldmljZShzYiktPmdlbmVyaWNEZXZpY2U7CisKKwkJVChZQUZGU19UUkFD RV9PUywKKwkJCSgieWFmZnNfcmVtb3VudF9mczogJXM6IFJPXG4iLCBkZXYtPm5hbWUpKTsK KworCQl5YWZmc19Hcm9zc0xvY2soZGV2KTsKKworCQl5YWZmc19GbHVzaEVudGlyZURldmlj ZUNhY2hlKGRldik7CisKKwkJeWFmZnNfQ2hlY2twb2ludFNhdmUoZGV2KTsKKworCQlpZiAo bXRkLT5zeW5jKQorCQkJbXRkLT5zeW5jKG10ZCk7CisKKwkJeWFmZnNfR3Jvc3NVbmxvY2so ZGV2KTsKKwl9IGVsc2UgeworCQlUKFlBRkZTX1RSQUNFX09TLAorCQkJKCJ5YWZmc19yZW1v dW50X2ZzOiAlczogUldcbiIsIGRldi0+bmFtZSkpOworCX0KKworCXJldHVybiAwOworfQor I2VuZGlmCisKK3N0YXRpYyB2b2lkIHlhZmZzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxv Y2sgKnNiKQoreworCXlhZmZzX0RldmljZSAqZGV2ID0geWFmZnNfU3VwZXJUb0RldmljZShz Yik7CisKKwlUKFlBRkZTX1RSQUNFX09TLCAoInlhZmZzX3B1dF9zdXBlclxuIikpOworCisJ eWFmZnNfR3Jvc3NMb2NrKGRldik7CisKKwl5YWZmc19GbHVzaEVudGlyZURldmljZUNhY2hl KGRldik7CisKKwl5YWZmc19DaGVja3BvaW50U2F2ZShkZXYpOworCisJaWYgKGRldi0+cHV0 U3VwZXJGdW5jKQorCQlkZXYtPnB1dFN1cGVyRnVuYyhzYik7CisKKwl5YWZmc19EZWluaXRp YWxpc2UoZGV2KTsKKworCXlhZmZzX0dyb3NzVW5sb2NrKGRldik7CisKKwkvKiB3ZSBhc3N1 bWUgdGhpcyBpcyBwcm90ZWN0ZWQgYnkgbG9ja19rZXJuZWwoKSBpbiBtb3VudC91bW91bnQg Ki8KKwl5bGlzdF9kZWwoJmRldi0+ZGV2TGlzdCk7CisKKwlpZiAoZGV2LT5zcGFyZUJ1ZmZl cikgeworCQlZRlJFRShkZXYtPnNwYXJlQnVmZmVyKTsKKwkJZGV2LT5zcGFyZUJ1ZmZlciA9 IE5VTEw7CisJfQorCisJa2ZyZWUoZGV2KTsKK30KKworCitzdGF0aWMgdm9pZCB5YWZmc19N VERQdXRTdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCXN0cnVjdCBtdGRfaW5m byAqbXRkID0geWFmZnNfU3VwZXJUb0RldmljZShzYiktPmdlbmVyaWNEZXZpY2U7CisKKwlp ZiAobXRkLT5zeW5jKQorCQltdGQtPnN5bmMobXRkKTsKKworCXB1dF9tdGRfZGV2aWNlKG10 ZCk7Cit9CisKKworc3RhdGljIHZvaWQgeWFmZnNfTWFya1N1cGVyQmxvY2tEaXJ0eSh2b2lk ICp2c2IpCit7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IChzdHJ1Y3Qgc3VwZXJfYmxv Y2sgKil2c2I7CisKKwlUKFlBRkZTX1RSQUNFX09TLCAoInlhZmZzX01hcmtTdXBlckJsb2Nr RGlydHkoKSBzYiA9ICVwXG4iLCBzYikpOworCWlmIChzYikKKwkJc2ItPnNfZGlydCA9IDE7 Cit9CisKK3R5cGVkZWYgc3RydWN0IHsKKwlpbnQgaW5iYW5kX3RhZ3M7CisJaW50IHNraXBf Y2hlY2twb2ludF9yZWFkOworCWludCBza2lwX2NoZWNrcG9pbnRfd3JpdGU7CisJaW50IG5v X2NhY2hlOworfSB5YWZmc19vcHRpb25zOworCisjZGVmaW5lIE1BWF9PUFRfTEVOIDIwCitz dGF0aWMgaW50IHlhZmZzX3BhcnNlX29wdGlvbnMoeWFmZnNfb3B0aW9ucyAqb3B0aW9ucywg Y29uc3QgY2hhciAqb3B0aW9uc19zdHIpCit7CisJY2hhciBjdXJfb3B0W01BWF9PUFRfTEVO ICsgMV07CisJaW50IHA7CisJaW50IGVycm9yID0gMDsKKworCS8qIFBhcnNlIHRocm91Z2gg dGhlIG9wdGlvbnMgd2hpY2ggaXMgYSBjb21tYSBzZXBlcmF0ZWQgbGlzdCAqLworCisJd2hp bGUgKG9wdGlvbnNfc3RyICYmICpvcHRpb25zX3N0ciAmJiAhZXJyb3IpIHsKKwkJbWVtc2V0 KGN1cl9vcHQsIDAsIE1BWF9PUFRfTEVOICsgMSk7CisJCXAgPSAwOworCisJCXdoaWxlICgq b3B0aW9uc19zdHIgJiYgKm9wdGlvbnNfc3RyICE9ICcsJykgeworCQkJaWYgKHAgPCBNQVhf T1BUX0xFTikgeworCQkJCWN1cl9vcHRbcF0gPSAqb3B0aW9uc19zdHI7CisJCQkJcCsrOwor CQkJfQorCQkJb3B0aW9uc19zdHIrKzsKKwkJfQorCisJCWlmICghc3RyY21wKGN1cl9vcHQs ICJpbmJhbmQtdGFncyIpKQorCQkJb3B0aW9ucy0+aW5iYW5kX3RhZ3MgPSAxOworCQllbHNl IGlmICghc3RyY21wKGN1cl9vcHQsICJuby1jYWNoZSIpKQorCQkJb3B0aW9ucy0+bm9fY2Fj aGUgPSAxOworCQllbHNlIGlmICghc3RyY21wKGN1cl9vcHQsICJuby1jaGVja3BvaW50LXJl YWQiKSkKKwkJCW9wdGlvbnMtPnNraXBfY2hlY2twb2ludF9yZWFkID0gMTsKKwkJZWxzZSBp ZiAoIXN0cmNtcChjdXJfb3B0LCAibm8tY2hlY2twb2ludC13cml0ZSIpKQorCQkJb3B0aW9u cy0+c2tpcF9jaGVja3BvaW50X3dyaXRlID0gMTsKKwkJZWxzZSBpZiAoIXN0cmNtcChjdXJf b3B0LCAibm8tY2hlY2twb2ludCIpKSB7CisJCQlvcHRpb25zLT5za2lwX2NoZWNrcG9pbnRf cmVhZCA9IDE7CisJCQlvcHRpb25zLT5za2lwX2NoZWNrcG9pbnRfd3JpdGUgPSAxOworCQl9 IGVsc2UgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAieWFmZnM6IEJhZCBtb3VudCBvcHRpb24g XCIlc1wiXG4iLAorCQkJCQljdXJfb3B0KTsKKwkJCWVycm9yID0gMTsKKwkJfQorCX0KKwor CXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIHN0cnVjdCBzdXBlcl9ibG9jayAqeWFmZnNf aW50ZXJuYWxfcmVhZF9zdXBlcihpbnQgeWFmZnNWZXJzaW9uLAorCQkJCQkJc3RydWN0IHN1 cGVyX2Jsb2NrICpzYiwKKwkJCQkJCXZvaWQgKmRhdGEsIGludCBzaWxlbnQpCit7CisJaW50 IG5CbG9ja3M7CisJc3RydWN0IGlub2RlICppbm9kZSA9IE5VTEw7CisJc3RydWN0IGRlbnRy eSAqcm9vdDsKKwl5YWZmc19EZXZpY2UgKmRldiA9IDA7CisJY2hhciBkZXZuYW1lX2J1ZltC REVWTkFNRV9TSVpFICsgMV07CisJc3RydWN0IG10ZF9pbmZvICptdGQ7CisJaW50IGVycjsK KwljaGFyICpkYXRhX3N0ciA9IChjaGFyICopZGF0YTsKKworCXlhZmZzX29wdGlvbnMgb3B0 aW9uczsKKworCXNiLT5zX21hZ2ljID0gWUFGRlNfTUFHSUM7CisJc2ItPnNfb3AgPSAmeWFm ZnNfc3VwZXJfb3BzOworCXNiLT5zX2ZsYWdzIHw9IE1TX05PQVRJTUU7CisKKwlpZiAoIXNi KQorCQlwcmludGsoS0VSTl9JTkZPICJ5YWZmczogc2IgaXMgTlVMTFxuIik7CisJZWxzZSBp ZiAoIXNiLT5zX2RldikKKwkJcHJpbnRrKEtFUk5fSU5GTyAieWFmZnM6IHNiLT5zX2RldiBp cyBOVUxMXG4iKTsKKwllbHNlIGlmICgheWFmZnNfZGV2bmFtZShzYiwgZGV2bmFtZV9idWYp KQorCQlwcmludGsoS0VSTl9JTkZPICJ5YWZmczogZGV2bmFtZSBpcyBOVUxMXG4iKTsKKwll bHNlCisJCXByaW50ayhLRVJOX0lORk8gInlhZmZzOiBkZXYgaXMgJWQgbmFtZSBpcyBcIiVz XCJcbiIsCisJCSAgICAgICBzYi0+c19kZXYsCisJCSAgICAgICB5YWZmc19kZXZuYW1lKHNi LCBkZXZuYW1lX2J1ZikpOworCisJaWYgKCFkYXRhX3N0cikKKwkJZGF0YV9zdHIgPSAiIjsK KworCXByaW50ayhLRVJOX0lORk8gInlhZmZzOiBwYXNzZWQgZmxhZ3MgXCIlc1wiXG4iLCBk YXRhX3N0cik7CisKKwltZW1zZXQoJm9wdGlvbnMsIDAsIHNpemVvZihvcHRpb25zKSk7CisK KwlpZiAoeWFmZnNfcGFyc2Vfb3B0aW9ucygmb3B0aW9ucywgZGF0YV9zdHIpKSB7CisJCS8q IE9wdGlvbiBwYXJzaW5nIGZhaWxlZCAqLworCQlyZXR1cm4gTlVMTDsKKwl9CisKKworCXNi LT5zX2Jsb2Nrc2l6ZSA9IFBBR0VfQ0FDSEVfU0laRTsKKwlzYi0+c19ibG9ja3NpemVfYml0 cyA9IFBBR0VfQ0FDSEVfU0hJRlQ7CisJVChZQUZGU19UUkFDRV9PUywgKCJ5YWZmc19yZWFk X3N1cGVyOiBVc2luZyB5YWZmcyVkXG4iLCB5YWZmc1ZlcnNpb24pKTsKKwlUKFlBRkZTX1RS QUNFX09TLAorCSAgKCJ5YWZmc19yZWFkX3N1cGVyOiBibG9jayBzaXplICVkXG4iLCAoaW50 KShzYi0+c19ibG9ja3NpemUpKSk7CisKKyNpZmRlZiBDT05GSUdfWUFGRlNfRElTQUJMRV9X UklURV9WRVJJRlkKKwlUKFlBRkZTX1RSQUNFX09TLAorCSAgKCJ5YWZmczogV3JpdGUgdmVy aWZpY2F0aW9uIGRpc2FibGVkLiBBbGwgZ3VhcmFudGVlcyAiCisJICAgIm51bGwgYW5kIHZv aWRcbiIpKTsKKyNlbmRpZgorCisJVChZQUZGU19UUkFDRV9PUywgKCJ5YWZmczogQXR0ZW1w dGluZyBNVEQgbW91bnQgb24gJXUuJXUsICIKKwkJCSAgICAgICAiXCIlc1wiXG4iLAorCQkJ ICAgICAgIE1BSk9SKHNiLT5zX2RldiksIE1JTk9SKHNiLT5zX2RldiksCisJCQkgICAgICAg eWFmZnNfZGV2bmFtZShzYiwgZGV2bmFtZV9idWYpKSk7CisKKwkvKiBDaGVjayBpdCdzIGFu IG10ZCBkZXZpY2UuLi4uLiAqLworCWlmIChNQUpPUihzYi0+c19kZXYpICE9IE1URF9CTE9D S19NQUpPUikKKwkJcmV0dXJuIE5VTEw7CS8qIFRoaXMgaXNuJ3QgYW4gbXRkIGRldmljZSAq LworCisJLyogR2V0IHRoZSBkZXZpY2UgKi8KKwltdGQgPSBnZXRfbXRkX2RldmljZShOVUxM LCBNSU5PUihzYi0+c19kZXYpKTsKKwlpZiAoIW10ZCkgeworCQlUKFlBRkZTX1RSQUNFX0FM V0FZUywKKwkJICAoInlhZmZzOiBNVEQgZGV2aWNlICMldSBkb2Vzbid0IGFwcGVhciB0byBl eGlzdFxuIiwKKwkJICAgTUlOT1Ioc2ItPnNfZGV2KSkpOworCQlyZXR1cm4gTlVMTDsKKwl9 CisJLyogQ2hlY2sgaXQncyBOQU5EICovCisJaWYgKG10ZC0+dHlwZSAhPSBNVERfTkFOREZM QVNIKSB7CisJCVQoWUFGRlNfVFJBQ0VfQUxXQVlTLAorCQkgICgieWFmZnM6IE1URCBkZXZp Y2UgaXMgbm90IE5BTkQgaXQncyB0eXBlICVkXG4iLCBtdGQtPnR5cGUpKTsKKwkJcmV0dXJu IE5VTEw7CisJfQorCisJVChZQUZGU19UUkFDRV9PUywgKCIgZXJhc2UgJXBcbiIsIG10ZC0+ ZXJhc2UpKTsKKwlUKFlBRkZTX1RSQUNFX09TLCAoIiByZWFkICVwXG4iLCBtdGQtPnJlYWQp KTsKKwlUKFlBRkZTX1RSQUNFX09TLCAoIiB3cml0ZSAlcFxuIiwgbXRkLT53cml0ZSkpOwor CVQoWUFGRlNfVFJBQ0VfT1MsICgiIHJlYWRvb2IgJXBcbiIsIG10ZC0+cmVhZF9vb2IpKTsK KwlUKFlBRkZTX1RSQUNFX09TLCAoIiB3cml0ZW9vYiAlcFxuIiwgbXRkLT53cml0ZV9vb2Ip KTsKKwlUKFlBRkZTX1RSQUNFX09TLCAoIiBibG9ja19pc2JhZCAlcFxuIiwgbXRkLT5ibG9j a19pc2JhZCkpOworCVQoWUFGRlNfVFJBQ0VfT1MsICgiIGJsb2NrX21hcmtiYWQgJXBcbiIs IG10ZC0+YmxvY2tfbWFya2JhZCkpOworCVQoWUFGRlNfVFJBQ0VfT1MsICgiICVzICVkXG4i LCBXUklURV9TSVpFX1NUUiwgV1JJVEVfU0laRShtdGQpKSk7CisJVChZQUZGU19UUkFDRV9P UywgKCIgb29ic2l6ZSAlZFxuIiwgbXRkLT5vb2JzaXplKSk7CisJVChZQUZGU19UUkFDRV9P UywgKCIgZXJhc2VzaXplICVkXG4iLCBtdGQtPmVyYXNlc2l6ZSkpOworI2lmIExJTlVYX1ZF UlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDI5KQorCVQoWUFGRlNfVFJBQ0Vf T1MsICgiIHNpemUgJXVcbiIsIG10ZC0+c2l6ZSkpOworI2Vsc2UKKwlUKFlBRkZTX1RSQUNF X09TLCAoIiBzaXplICVsbGRcbiIsIG10ZC0+c2l6ZSkpOworI2VuZGlmCisKKyNpZmRlZiBD T05GSUdfWUFGRlNfQVVUT19ZQUZGUzIKKworCWlmICh5YWZmc1ZlcnNpb24gPT0gMSAmJiBX UklURV9TSVpFKG10ZCkgPj0gMjA0OCkgeworCQlUKFlBRkZTX1RSQUNFX0FMV0FZUywgKCJ5 YWZmczogYXV0byBzZWxlY3RpbmcgeWFmZnMyXG4iKSk7CisJCXlhZmZzVmVyc2lvbiA9IDI7 CisJfQorCisJLyogQWRkZWQgTkNCIDI2LzUvMjAwNiBmb3IgY29tcGxldGVuZXNzICovCisJ aWYgKHlhZmZzVmVyc2lvbiA9PSAyICYmICFvcHRpb25zLmluYmFuZF90YWdzICYmIFdSSVRF X1NJWkUobXRkKSA9PSA1MTIpIHsKKwkJVChZQUZGU19UUkFDRV9BTFdBWVMsICgieWFmZnM6 IGF1dG8gc2VsZWN0aW5nIHlhZmZzMVxuIikpOworCQl5YWZmc1ZlcnNpb24gPSAxOworCX0K KworI2VuZGlmCisKKwlpZiAoeWFmZnNWZXJzaW9uID09IDIpIHsKKwkJLyogQ2hlY2sgZm9y IHZlcnNpb24gMiBzdHlsZSBmdW5jdGlvbnMgKi8KKwkJaWYgKCFtdGQtPmVyYXNlIHx8CisJ CSAgICAhbXRkLT5ibG9ja19pc2JhZCB8fAorCQkgICAgIW10ZC0+YmxvY2tfbWFya2JhZCB8 fAorCQkgICAgIW10ZC0+cmVhZCB8fAorCQkgICAgIW10ZC0+d3JpdGUgfHwKKyNpZiAoTElO VVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiwgNiwgMTcpKQorCQkgICAgIW10 ZC0+cmVhZF9vb2IgfHwgIW10ZC0+d3JpdGVfb29iKSB7CisjZWxzZQorCQkgICAgIW10ZC0+ d3JpdGVfZWNjIHx8CisJCSAgICAhbXRkLT5yZWFkX2VjYyB8fCAhbXRkLT5yZWFkX29vYiB8 fCAhbXRkLT53cml0ZV9vb2IpIHsKKyNlbmRpZgorCQkJVChZQUZGU19UUkFDRV9BTFdBWVMs CisJCQkgICgieWFmZnM6IE1URCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCByZXF1aXJlZCAi CisJCQkgICAiZnVuY3Rpb25zXG4iKSk7OworCQkJcmV0dXJuIE5VTEw7CisJCX0KKworCQlp ZiAoKFdSSVRFX1NJWkUobXRkKSA8IFlBRkZTX01JTl9ZQUZGUzJfQ0hVTktfU0laRSB8fAor CQkgICAgbXRkLT5vb2JzaXplIDwgWUFGRlNfTUlOX1lBRkZTMl9TUEFSRV9TSVpFKSAmJgor CQkgICAgIW9wdGlvbnMuaW5iYW5kX3RhZ3MpIHsKKwkJCVQoWUFGRlNfVFJBQ0VfQUxXQVlT LAorCQkJICAoInlhZmZzOiBNVEQgZGV2aWNlIGRvZXMgbm90IGhhdmUgdGhlICIKKwkJCSAg ICJyaWdodCBwYWdlIHNpemVzXG4iKSk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCX0gZWxz ZSB7CisJCS8qIENoZWNrIGZvciBWMSBzdHlsZSBmdW5jdGlvbnMgKi8KKwkJaWYgKCFtdGQt PmVyYXNlIHx8CisJCSAgICAhbXRkLT5yZWFkIHx8CisJCSAgICAhbXRkLT53cml0ZSB8fAor I2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLCA2LCAxNykpCisJ CSAgICAhbXRkLT5yZWFkX29vYiB8fCAhbXRkLT53cml0ZV9vb2IpIHsKKyNlbHNlCisJCSAg ICAhbXRkLT53cml0ZV9lY2MgfHwKKwkJICAgICFtdGQtPnJlYWRfZWNjIHx8ICFtdGQtPnJl YWRfb29iIHx8ICFtdGQtPndyaXRlX29vYikgeworI2VuZGlmCisJCQlUKFlBRkZTX1RSQUNF X0FMV0FZUywKKwkJCSAgKCJ5YWZmczogTVREIGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHJl cXVpcmVkICIKKwkJCSAgICJmdW5jdGlvbnNcbiIpKTs7CisJCQlyZXR1cm4gTlVMTDsKKwkJ fQorCisJCWlmIChXUklURV9TSVpFKG10ZCkgPCBZQUZGU19CWVRFU19QRVJfQ0hVTksgfHwK KwkJICAgIG10ZC0+b29ic2l6ZSAhPSBZQUZGU19CWVRFU19QRVJfU1BBUkUpIHsKKwkJCVQo WUFGRlNfVFJBQ0VfQUxXQVlTLAorCQkJICAoInlhZmZzOiBNVEQgZGV2aWNlIGRvZXMgbm90 IHN1cHBvcnQgaGF2ZSB0aGUgIgorCQkJICAgInJpZ2h0IHBhZ2Ugc2l6ZXNcbiIpKTsKKwkJ CXJldHVybiBOVUxMOworCQl9CisJfQorCisJLyogT0ssIHNvIGlmIHdlIGdvdCBoZXJlLCB3 ZSBoYXZlIGFuIE1URCB0aGF0J3MgTkFORCBhbmQgbG9va3MKKwkgKiBsaWtlIGl0IGhhcyB0 aGUgcmlnaHQgY2FwYWJpbGl0aWVzCisJICogU2V0IHRoZSB5YWZmc19EZXZpY2UgdXAgZm9y IG10ZAorCSAqLworCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9O KDIsIDUsIDApKQorCXNiLT5zX2ZzX2luZm8gPSBkZXYgPSBrbWFsbG9jKHNpemVvZih5YWZm c19EZXZpY2UpLCBHRlBfS0VSTkVMKTsKKyNlbHNlCisJc2ItPnUuZ2VuZXJpY19zYnAgPSBk ZXYgPSBrbWFsbG9jKHNpemVvZih5YWZmc19EZXZpY2UpLCBHRlBfS0VSTkVMKTsKKyNlbmRp ZgorCWlmICghZGV2KSB7CisJCS8qIERlZXAgc2hpdCBjb3VsZCBub3QgYWxsb2NhdGUgZGV2 aWNlIHN0cnVjdHVyZSAqLworCQlUKFlBRkZTX1RSQUNFX0FMV0FZUywKKwkJICAoInlhZmZz X3JlYWRfc3VwZXI6IEZhaWxlZCB0cnlpbmcgdG8gYWxsb2NhdGUgIgorCQkgICAieWFmZnNf RGV2aWNlLiBcbiIpKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJbWVtc2V0KGRldiwgMCwg c2l6ZW9mKHlhZmZzX0RldmljZSkpOworCWRldi0+Z2VuZXJpY0RldmljZSA9IG10ZDsKKwlk ZXYtPm5hbWUgPSBtdGQtPm5hbWU7CisKKwkvKiBTZXQgdXAgdGhlIG1lbW9yeSBzaXplIHBh cmFtZXRlcnMuLi4uICovCisKKwluQmxvY2tzID0gWUNBTENCTE9DS1MobXRkLT5zaXplLCAo WUFGRlNfQ0hVTktTX1BFUl9CTE9DSyAqIFlBRkZTX0JZVEVTX1BFUl9DSFVOSykpOworCisJ ZGV2LT5zdGFydEJsb2NrID0gMDsKKwlkZXYtPmVuZEJsb2NrID0gbkJsb2NrcyAtIDE7CisJ ZGV2LT5uQ2h1bmtzUGVyQmxvY2sgPSBZQUZGU19DSFVOS1NfUEVSX0JMT0NLOworCWRldi0+ dG90YWxCeXRlc1BlckNodW5rID0gWUFGRlNfQllURVNfUEVSX0NIVU5LOworCWRldi0+blJl c2VydmVkQmxvY2tzID0gNTsKKwlkZXYtPm5TaG9ydE9wQ2FjaGVzID0gKG9wdGlvbnMubm9f Y2FjaGUpID8gMCA6IDEwOworCWRldi0+aW5iYW5kVGFncyA9IG9wdGlvbnMuaW5iYW5kX3Rh Z3M7CisKKwkvKiAuLi4gYW5kIHRoZSBmdW5jdGlvbnMuICovCisJaWYgKHlhZmZzVmVyc2lv biA9PSAyKSB7CisJCWRldi0+d3JpdGVDaHVua1dpdGhUYWdzVG9OQU5EID0KKwkJICAgIG5h bmRtdGQyX1dyaXRlQ2h1bmtXaXRoVGFnc1RvTkFORDsKKwkJZGV2LT5yZWFkQ2h1bmtXaXRo VGFnc0Zyb21OQU5EID0KKwkJICAgIG5hbmRtdGQyX1JlYWRDaHVua1dpdGhUYWdzRnJvbU5B TkQ7CisJCWRldi0+bWFya05BTkRCbG9ja0JhZCA9IG5hbmRtdGQyX01hcmtOQU5EQmxvY2tC YWQ7CisJCWRldi0+cXVlcnlOQU5EQmxvY2sgPSBuYW5kbXRkMl9RdWVyeU5BTkRCbG9jazsK KwkJZGV2LT5zcGFyZUJ1ZmZlciA9IFlNQUxMT0MobXRkLT5vb2JzaXplKTsKKwkJZGV2LT5p c1lhZmZzMiA9IDE7CisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9O KDIsIDYsIDE3KSkKKwkJZGV2LT50b3RhbEJ5dGVzUGVyQ2h1bmsgPSBtdGQtPndyaXRlc2l6 ZTsKKwkJZGV2LT5uQ2h1bmtzUGVyQmxvY2sgPSBtdGQtPmVyYXNlc2l6ZSAvIG10ZC0+d3Jp dGVzaXplOworI2Vsc2UKKwkJZGV2LT50b3RhbEJ5dGVzUGVyQ2h1bmsgPSBtdGQtPm9vYmJs b2NrOworCQlkZXYtPm5DaHVua3NQZXJCbG9jayA9IG10ZC0+ZXJhc2VzaXplIC8gbXRkLT5v b2JibG9jazsKKyNlbmRpZgorCQluQmxvY2tzID0gWUNBTENCTE9DS1MobXRkLT5zaXplLCBt dGQtPmVyYXNlc2l6ZSk7CisKKwkJZGV2LT5zdGFydEJsb2NrID0gMDsKKwkJZGV2LT5lbmRC bG9jayA9IG5CbG9ja3MgLSAxOworCX0gZWxzZSB7CisjaWYgKExJTlVYX1ZFUlNJT05fQ09E RSA+IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDE3KSkKKwkJLyogdXNlIHRoZSBNVEQgaW50ZXJm YWNlIGluIHlhZmZzX210ZGlmMS5jICovCisJCWRldi0+d3JpdGVDaHVua1dpdGhUYWdzVG9O QU5EID0KKwkJCW5hbmRtdGQxX1dyaXRlQ2h1bmtXaXRoVGFnc1RvTkFORDsKKwkJZGV2LT5y ZWFkQ2h1bmtXaXRoVGFnc0Zyb21OQU5EID0KKwkJCW5hbmRtdGQxX1JlYWRDaHVua1dpdGhU YWdzRnJvbU5BTkQ7CisJCWRldi0+bWFya05BTkRCbG9ja0JhZCA9IG5hbmRtdGQxX01hcmtO QU5EQmxvY2tCYWQ7CisJCWRldi0+cXVlcnlOQU5EQmxvY2sgPSBuYW5kbXRkMV9RdWVyeU5B TkRCbG9jazsKKyNlbHNlCisJCWRldi0+d3JpdGVDaHVua1RvTkFORCA9IG5hbmRtdGRfV3Jp dGVDaHVua1RvTkFORDsKKwkJZGV2LT5yZWFkQ2h1bmtGcm9tTkFORCA9IG5hbmRtdGRfUmVh ZENodW5rRnJvbU5BTkQ7CisjZW5kaWYKKwkJZGV2LT5pc1lhZmZzMiA9IDA7CisJfQorCS8q IC4uLiBhbmQgY29tbW9uIGZ1bmN0aW9ucyAqLworCWRldi0+ZXJhc2VCbG9ja0luTkFORCA9 IG5hbmRtdGRfRXJhc2VCbG9ja0luTkFORDsKKwlkZXYtPmluaXRpYWxpc2VOQU5EID0gbmFu ZG10ZF9Jbml0aWFsaXNlTkFORDsKKworCWRldi0+cHV0U3VwZXJGdW5jID0geWFmZnNfTVRE UHV0U3VwZXI7CisKKwlkZXYtPnN1cGVyQmxvY2sgPSAodm9pZCAqKXNiOworCWRldi0+bWFy a1N1cGVyQmxvY2tEaXJ0eSA9IHlhZmZzX01hcmtTdXBlckJsb2NrRGlydHk7CisKKworI2lm bmRlZiBDT05GSUdfWUFGRlNfRE9FU19FQ0MKKwlkZXYtPnVzZU5BTkRFQ0MgPSAxOworI2Vu ZGlmCisKKyNpZmRlZiBDT05GSUdfWUFGRlNfRElTQUJMRV9XSURFX1ROT0RFUworCWRldi0+ d2lkZVRub2Rlc0Rpc2FibGVkID0gMTsKKyNlbmRpZgorCisJZGV2LT5za2lwQ2hlY2twb2lu dFJlYWQgPSBvcHRpb25zLnNraXBfY2hlY2twb2ludF9yZWFkOworCWRldi0+c2tpcENoZWNr cG9pbnRXcml0ZSA9IG9wdGlvbnMuc2tpcF9jaGVja3BvaW50X3dyaXRlOworCisJLyogd2Ug YXNzdW1lIHRoaXMgaXMgcHJvdGVjdGVkIGJ5IGxvY2tfa2VybmVsKCkgaW4gbW91bnQvdW1v dW50ICovCisJeWxpc3RfYWRkX3RhaWwoJmRldi0+ZGV2TGlzdCwgJnlhZmZzX2Rldl9saXN0 KTsKKworCWluaXRfTVVURVgoJmRldi0+Z3Jvc3NMb2NrKTsKKworCXlhZmZzX0dyb3NzTG9j ayhkZXYpOworCisJZXJyID0geWFmZnNfR3V0c0luaXRpYWxpc2UoZGV2KTsKKworCVQoWUFG RlNfVFJBQ0VfT1MsCisJICAoInlhZmZzX3JlYWRfc3VwZXI6IGd1dHMgaW5pdGlhbGlzZWQg JXNcbiIsCisJICAgKGVyciA9PSBZQUZGU19PSykgPyAiT0siIDogIkZBSUxFRCIpKTsKKwor CS8qIFJlbGVhc2UgbG9jayBiZWZvcmUgeWFmZnNfZ2V0X2lub2RlKCkgKi8KKwl5YWZmc19H cm9zc1VubG9jayhkZXYpOworCisJLyogQ3JlYXRlIHJvb3QgaW5vZGUgKi8KKwlpZiAoZXJy ID09IFlBRkZTX09LKQorCQlpbm9kZSA9IHlhZmZzX2dldF9pbm9kZShzYiwgU19JRkRJUiB8 IDA3NTUsIDAsCisJCQkJCXlhZmZzX1Jvb3QoZGV2KSk7CisKKwlpZiAoIWlub2RlKQorCQly ZXR1cm4gTlVMTDsKKworCWlub2RlLT5pX29wID0gJnlhZmZzX2Rpcl9pbm9kZV9vcGVyYXRp b25zOworCWlub2RlLT5pX2ZvcCA9ICZ5YWZmc19kaXJfb3BlcmF0aW9uczsKKworCVQoWUFG RlNfVFJBQ0VfT1MsICgieWFmZnNfcmVhZF9zdXBlcjogZ290IHJvb3QgaW5vZGVcbiIpKTsK KworCXJvb3QgPSBkX2FsbG9jX3Jvb3QoaW5vZGUpOworCisJVChZQUZGU19UUkFDRV9PUywg KCJ5YWZmc19yZWFkX3N1cGVyOiBkX2FsbG9jX3Jvb3QgZG9uZVxuIikpOworCisJaWYgKCFy b290KSB7CisJCWlwdXQoaW5vZGUpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJc2ItPnNfcm9v dCA9IHJvb3Q7CisJc2ItPnNfZGlydCA9ICFkZXYtPmlzQ2hlY2twb2ludGVkOworCVQoWUFG RlNfVFJBQ0VfQ0hFQ0tQT0lOVCwKKwkgICgieWFmZnNfcmVhZF9zdXBlcjogaXNDaGVja3Bv aW50ZWQgJWRcbiIsIGRldi0+aXNDaGVja3BvaW50ZWQpKTsKKworCVQoWUFGRlNfVFJBQ0Vf T1MsICgieWFmZnNfcmVhZF9zdXBlcjogZG9uZVxuIikpOworCXJldHVybiBzYjsKK30KKwor CisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsIDUsIDApKQor c3RhdGljIGludCB5YWZmc19pbnRlcm5hbF9yZWFkX3N1cGVyX210ZChzdHJ1Y3Qgc3VwZXJf YmxvY2sgKnNiLCB2b2lkICpkYXRhLAorCQkJCQkgaW50IHNpbGVudCkKK3sKKwlyZXR1cm4g eWFmZnNfaW50ZXJuYWxfcmVhZF9zdXBlcigxLCBzYiwgZGF0YSwgc2lsZW50KSA/IDAgOiAt RUlOVkFMOworfQorCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9O KDIsIDYsIDE3KSkKK3N0YXRpYyBpbnQgeWFmZnNfcmVhZF9zdXBlcihzdHJ1Y3QgZmlsZV9z eXN0ZW1fdHlwZSAqZnMsCisJCQkgICAgaW50IGZsYWdzLCBjb25zdCBjaGFyICpkZXZfbmFt ZSwKKwkJCSAgICB2b2lkICpkYXRhLCBzdHJ1Y3QgdmZzbW91bnQgKm1udCkKK3sKKworCXJl dHVybiBnZXRfc2JfYmRldihmcywgZmxhZ3MsIGRldl9uYW1lLCBkYXRhLAorCQkJICAgeWFm ZnNfaW50ZXJuYWxfcmVhZF9zdXBlcl9tdGQsIG1udCk7Cit9CisjZWxzZQorc3RhdGljIHN0 cnVjdCBzdXBlcl9ibG9jayAqeWFmZnNfcmVhZF9zdXBlcihzdHJ1Y3QgZmlsZV9zeXN0ZW1f dHlwZSAqZnMsCisJCQkJCSAgICBpbnQgZmxhZ3MsIGNvbnN0IGNoYXIgKmRldl9uYW1lLAor CQkJCQkgICAgdm9pZCAqZGF0YSkKK3sKKworCXJldHVybiBnZXRfc2JfYmRldihmcywgZmxh Z3MsIGRldl9uYW1lLCBkYXRhLAorCQkJICAgeWFmZnNfaW50ZXJuYWxfcmVhZF9zdXBlcl9t dGQpOworfQorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSB5YWZm c19mc190eXBlID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5uYW1lID0gInlhZmZz IiwKKwkuZ2V0X3NiID0geWFmZnNfcmVhZF9zdXBlciwKKwkua2lsbF9zYiA9IGtpbGxfYmxv Y2tfc3VwZXIsCisJLmZzX2ZsYWdzID0gRlNfUkVRVUlSRVNfREVWLAorfTsKKyNlbHNlCitz dGF0aWMgc3RydWN0IHN1cGVyX2Jsb2NrICp5YWZmc19yZWFkX3N1cGVyKHN0cnVjdCBzdXBl cl9ibG9jayAqc2IsIHZvaWQgKmRhdGEsCisJCQkJCSAgICBpbnQgc2lsZW50KQoreworCXJl dHVybiB5YWZmc19pbnRlcm5hbF9yZWFkX3N1cGVyKDEsIHNiLCBkYXRhLCBzaWxlbnQpOwor fQorCitzdGF0aWMgREVDTEFSRV9GU1RZUEUoeWFmZnNfZnNfdHlwZSwgInlhZmZzIiwgeWFm ZnNfcmVhZF9zdXBlciwKKwkJICAgICAgRlNfUkVRVUlSRVNfREVWKTsKKyNlbmRpZgorCisK KyNpZmRlZiBDT05GSUdfWUFGRlNfWUFGRlMyCisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RF ID4gS0VSTkVMX1ZFUlNJT04oMiwgNSwgMCkpCitzdGF0aWMgaW50IHlhZmZzMl9pbnRlcm5h bF9yZWFkX3N1cGVyX210ZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB2b2lkICpkYXRhLAor CQkJCQkgIGludCBzaWxlbnQpCit7CisJcmV0dXJuIHlhZmZzX2ludGVybmFsX3JlYWRfc3Vw ZXIoMiwgc2IsIGRhdGEsIHNpbGVudCkgPyAwIDogLUVJTlZBTDsKK30KKworI2lmIChMSU5V WF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLCA2LCAxNykpCitzdGF0aWMgaW50 IHlhZmZzMl9yZWFkX3N1cGVyKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICpmcywKKwkJCWlu dCBmbGFncywgY29uc3QgY2hhciAqZGV2X25hbWUsIHZvaWQgKmRhdGEsCisJCQlzdHJ1Y3Qg dmZzbW91bnQgKm1udCkKK3sKKwlyZXR1cm4gZ2V0X3NiX2JkZXYoZnMsIGZsYWdzLCBkZXZf bmFtZSwgZGF0YSwKKwkJCXlhZmZzMl9pbnRlcm5hbF9yZWFkX3N1cGVyX210ZCwgbW50KTsK K30KKyNlbHNlCitzdGF0aWMgc3RydWN0IHN1cGVyX2Jsb2NrICp5YWZmczJfcmVhZF9zdXBl cihzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqZnMsCisJCQkJCSAgICAgaW50IGZsYWdzLCBj b25zdCBjaGFyICpkZXZfbmFtZSwKKwkJCQkJICAgICB2b2lkICpkYXRhKQoreworCisJcmV0 dXJuIGdldF9zYl9iZGV2KGZzLCBmbGFncywgZGV2X25hbWUsIGRhdGEsCisJCQkgICB5YWZm czJfaW50ZXJuYWxfcmVhZF9zdXBlcl9tdGQpOworfQorI2VuZGlmCisKK3N0YXRpYyBzdHJ1 Y3QgZmlsZV9zeXN0ZW1fdHlwZSB5YWZmczJfZnNfdHlwZSA9IHsKKwkub3duZXIgPSBUSElT X01PRFVMRSwKKwkubmFtZSA9ICJ5YWZmczIiLAorCS5nZXRfc2IgPSB5YWZmczJfcmVhZF9z dXBlciwKKwkua2lsbF9zYiA9IGtpbGxfYmxvY2tfc3VwZXIsCisJLmZzX2ZsYWdzID0gRlNf UkVRVUlSRVNfREVWLAorfTsKKyNlbHNlCitzdGF0aWMgc3RydWN0IHN1cGVyX2Jsb2NrICp5 YWZmczJfcmVhZF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQkJCQkgICAgIHZv aWQgKmRhdGEsIGludCBzaWxlbnQpCit7CisJcmV0dXJuIHlhZmZzX2ludGVybmFsX3JlYWRf c3VwZXIoMiwgc2IsIGRhdGEsIHNpbGVudCk7Cit9CisKK3N0YXRpYyBERUNMQVJFX0ZTVFlQ RSh5YWZmczJfZnNfdHlwZSwgInlhZmZzMiIsIHlhZmZzMl9yZWFkX3N1cGVyLAorCQkgICAg ICBGU19SRVFVSVJFU19ERVYpOworI2VuZGlmCisKKyNlbmRpZgkJCQkvKiBDT05GSUdfWUFG RlNfWUFGRlMyICovCisKK3N0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKm15X3Byb2Nf ZW50cnk7CisKK3N0YXRpYyBjaGFyICp5YWZmc19kdW1wX2RldihjaGFyICpidWYsIHlhZmZz X0RldmljZSAqIGRldikKK3sKKwlidWYgKz0gc3ByaW50ZihidWYsICJzdGFydEJsb2NrLi4u Li4uLi4uICVkXG4iLCBkZXYtPnN0YXJ0QmxvY2spOworCWJ1ZiArPSBzcHJpbnRmKGJ1Ziwg ImVuZEJsb2NrLi4uLi4uLi4uLi4gJWRcbiIsIGRldi0+ZW5kQmxvY2spOworCWJ1ZiArPSBz cHJpbnRmKGJ1ZiwgInRvdGFsQnl0ZXNQZXJDaHVuay4gJWRcbiIsIGRldi0+dG90YWxCeXRl c1BlckNodW5rKTsKKwlidWYgKz0gc3ByaW50ZihidWYsICJuRGF0YUJ5dGVzUGVyQ2h1bmsu ICVkXG4iLCBkZXYtPm5EYXRhQnl0ZXNQZXJDaHVuayk7CisJYnVmICs9IHNwcmludGYoYnVm LCAiY2h1bmtHcm91cEJpdHMuLi4uLiAlZFxuIiwgZGV2LT5jaHVua0dyb3VwQml0cyk7CisJ YnVmICs9IHNwcmludGYoYnVmLCAiY2h1bmtHcm91cFNpemUuLi4uLiAlZFxuIiwgZGV2LT5j aHVua0dyb3VwU2l6ZSk7CisJYnVmICs9IHNwcmludGYoYnVmLCAibkVyYXNlZEJsb2Nrcy4u Li4uLiAlZFxuIiwgZGV2LT5uRXJhc2VkQmxvY2tzKTsKKwlidWYgKz0gc3ByaW50ZihidWYs ICJuUmVzZXJ2ZWRCbG9ja3MuLi4uICVkXG4iLCBkZXYtPm5SZXNlcnZlZEJsb2Nrcyk7CisJ YnVmICs9IHNwcmludGYoYnVmLCAiYmxvY2tzSW5DaGVja3BvaW50LiAlZFxuIiwgZGV2LT5i bG9ja3NJbkNoZWNrcG9pbnQpOworCWJ1ZiArPSBzcHJpbnRmKGJ1ZiwgIm5Ubm9kZXNDcmVh dGVkLi4uLi4gJWRcbiIsIGRldi0+blRub2Rlc0NyZWF0ZWQpOworCWJ1ZiArPSBzcHJpbnRm KGJ1ZiwgIm5GcmVlVG5vZGVzLi4uLi4uLi4gJWRcbiIsIGRldi0+bkZyZWVUbm9kZXMpOwor CWJ1ZiArPSBzcHJpbnRmKGJ1ZiwgIm5PYmplY3RzQ3JlYXRlZC4uLi4gJWRcbiIsIGRldi0+ bk9iamVjdHNDcmVhdGVkKTsKKwlidWYgKz0gc3ByaW50ZihidWYsICJuRnJlZU9iamVjdHMu Li4uLi4uICVkXG4iLCBkZXYtPm5GcmVlT2JqZWN0cyk7CisJYnVmICs9IHNwcmludGYoYnVm LCAibkZyZWVDaHVua3MuLi4uLi4uLiAlZFxuIiwgZGV2LT5uRnJlZUNodW5rcyk7CisJYnVm ICs9IHNwcmludGYoYnVmLCAiblBhZ2VXcml0ZXMuLi4uLi4uLiAlZFxuIiwgZGV2LT5uUGFn ZVdyaXRlcyk7CisJYnVmICs9IHNwcmludGYoYnVmLCAiblBhZ2VSZWFkcy4uLi4uLi4uLiAl ZFxuIiwgZGV2LT5uUGFnZVJlYWRzKTsKKwlidWYgKz0gc3ByaW50ZihidWYsICJuQmxvY2tF cmFzdXJlcy4uLi4uICVkXG4iLCBkZXYtPm5CbG9ja0VyYXN1cmVzKTsKKwlidWYgKz0gc3By aW50ZihidWYsICJuR0NDb3BpZXMuLi4uLi4uLi4uICVkXG4iLCBkZXYtPm5HQ0NvcGllcyk7 CisJYnVmICs9IHNwcmludGYoYnVmLCAiZ2FyYmFnZUNvbGxlY3Rpb25zLiAlZFxuIiwgZGV2 LT5nYXJiYWdlQ29sbGVjdGlvbnMpOworCWJ1ZiArPSBzcHJpbnRmKGJ1ZiwgInBhc3NpdmVH Q3MuLi4uLi4uLi4gJWRcbiIsCisJCSAgICBkZXYtPnBhc3NpdmVHYXJiYWdlQ29sbGVjdGlv bnMpOworCWJ1ZiArPSBzcHJpbnRmKGJ1ZiwgIm5SZXRyaWVkV3JpdGVzLi4uLi4gJWRcbiIs IGRldi0+blJldHJpZWRXcml0ZXMpOworCWJ1ZiArPSBzcHJpbnRmKGJ1ZiwgIm5TaG9ydE9w Q2FjaGVzLi4uLi4gJWRcbiIsIGRldi0+blNob3J0T3BDYWNoZXMpOworCWJ1ZiArPSBzcHJp bnRmKGJ1ZiwgIm5SZXRpcmVCbG9ja3MuLi4uLi4gJWRcbiIsIGRldi0+blJldGlyZWRCbG9j a3MpOworCWJ1ZiArPSBzcHJpbnRmKGJ1ZiwgImVjY0ZpeGVkLi4uLi4uLi4uLi4gJWRcbiIs IGRldi0+ZWNjRml4ZWQpOworCWJ1ZiArPSBzcHJpbnRmKGJ1ZiwgImVjY1VuZml4ZWQuLi4u Li4uLi4gJWRcbiIsIGRldi0+ZWNjVW5maXhlZCk7CisJYnVmICs9IHNwcmludGYoYnVmLCAi dGFnc0VjY0ZpeGVkLi4uLi4uLiAlZFxuIiwgZGV2LT50YWdzRWNjRml4ZWQpOworCWJ1ZiAr PSBzcHJpbnRmKGJ1ZiwgInRhZ3NFY2NVbmZpeGVkLi4uLi4gJWRcbiIsIGRldi0+dGFnc0Vj Y1VuZml4ZWQpOworCWJ1ZiArPSBzcHJpbnRmKGJ1ZiwgImNhY2hlSGl0cy4uLi4uLi4uLi4g JWRcbiIsIGRldi0+Y2FjaGVIaXRzKTsKKwlidWYgKz0gc3ByaW50ZihidWYsICJuRGVsZXRl ZEZpbGVzLi4uLi4uICVkXG4iLCBkZXYtPm5EZWxldGVkRmlsZXMpOworCWJ1ZiArPSBzcHJp bnRmKGJ1ZiwgIm5VbmxpbmtlZEZpbGVzLi4uLi4gJWRcbiIsIGRldi0+blVubGlua2VkRmls ZXMpOworCWJ1ZiArPQorCSAgICBzcHJpbnRmKGJ1ZiwgIm5CYWNrZ3JvdWREZWxldGlvbnMg JWRcbiIsIGRldi0+bkJhY2tncm91bmREZWxldGlvbnMpOworCWJ1ZiArPSBzcHJpbnRmKGJ1 ZiwgInVzZU5BTkRFQ0MuLi4uLi4uLi4gJWRcbiIsIGRldi0+dXNlTkFOREVDQyk7CisJYnVm ICs9IHNwcmludGYoYnVmLCAiaXNZYWZmczIuLi4uLi4uLi4uLiAlZFxuIiwgZGV2LT5pc1lh ZmZzMik7CisJYnVmICs9IHNwcmludGYoYnVmLCAiaW5iYW5kVGFncy4uLi4uLi4uLiAlZFxu IiwgZGV2LT5pbmJhbmRUYWdzKTsKKworCXJldHVybiBidWY7Cit9CisKK3N0YXRpYyBpbnQg eWFmZnNfcHJvY19yZWFkKGNoYXIgKnBhZ2UsCisJCQkgICBjaGFyICoqc3RhcnQsCisJCQkg ICBvZmZfdCBvZmZzZXQsIGludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCit7CisJ c3RydWN0IHlsaXN0X2hlYWQgKml0ZW07CisJY2hhciAqYnVmID0gcGFnZTsKKwlpbnQgc3Rl cCA9IG9mZnNldDsKKwlpbnQgbiA9IDA7CisKKwkvKiBHZXQgcHJvY19maWxlX3JlYWQoKSB0 byBzdGVwICdvZmZzZXQnIGJ5IG9uZSBvbiBlYWNoIHN1Y2Vzc2l2ZSBjYWxsLgorCSAqIFdl IHVzZSAnb2Zmc2V0JyAoKnBwb3MpIHRvIGluZGljYXRlIHdoZXJlIHdlIGFyZSBpbiBkZXZM aXN0LgorCSAqIFRoaXMgYWxzbyBhc3N1bWVzIHRoZSB1c2VyIGhhcyBwb3N0ZWQgYSByZWFk IGJ1ZmZlciBsYXJnZQorCSAqIGVub3VnaCB0byBob2xkIHRoZSBjb21wbGV0ZSBvdXRwdXQ7 IGJ1dCB0aGF0J3MgbGlmZSBpbiAvcHJvYy4KKwkgKi8KKworCSooaW50ICopc3RhcnQgPSAx OworCisJLyogUHJpbnQgaGVhZGVyIGZpcnN0ICovCisJaWYgKHN0ZXAgPT0gMCkgeworCQli dWYgKz0gc3ByaW50ZihidWYsICJZQUZGUyBidWlsdDoiIF9fREFURV9fICIgIiBfX1RJTUVf XworCQkJICAgICAgICJcbiVzXG4lc1xuIiwgeWFmZnNfZnNfY192ZXJzaW9uLAorCQkJICAg ICAgIHlhZmZzX2d1dHNfY192ZXJzaW9uKTsKKwl9CisKKwkvKiBob2xkIGxvY2tfa2VybmVs IHdoaWxlIHRyYXZlcnNpbmcgeWFmZnNfZGV2X2xpc3QgKi8KKwlsb2NrX2tlcm5lbCgpOwor CisJLyogTG9jYXRlIGFuZCBwcmludCB0aGUgTnRoIGVudHJ5LiAgT3JkZXIgTi1zcXVhcmVk IGJ1dCBOIGlzIHNtYWxsLiAqLworCXlsaXN0X2Zvcl9lYWNoKGl0ZW0sICZ5YWZmc19kZXZf bGlzdCkgeworCQl5YWZmc19EZXZpY2UgKmRldiA9IHlsaXN0X2VudHJ5KGl0ZW0sIHlhZmZz X0RldmljZSwgZGV2TGlzdCk7CisJCWlmIChuIDwgc3RlcCkgeworCQkJbisrOworCQkJY29u dGludWU7CisJCX0KKwkJYnVmICs9IHNwcmludGYoYnVmLCAiXG5EZXZpY2UgJWQgXCIlc1wi XG4iLCBuLCBkZXYtPm5hbWUpOworCQlidWYgPSB5YWZmc19kdW1wX2RldihidWYsIGRldik7 CisJCWJyZWFrOworCX0KKwl1bmxvY2tfa2VybmVsKCk7CisKKwlyZXR1cm4gYnVmIC0gcGFn ZSA8IGNvdW50ID8gYnVmIC0gcGFnZSA6IGNvdW50OworfQorCisvKioKKyAqIFNldCB0aGUg dmVyYm9zaXR5IG9mIHRoZSB3YXJuaW5ncyBhbmQgZXJyb3IgbWVzc2FnZXMuCisgKgorICog Tm90ZSB0aGF0IHRoZSBuYW1lcyBjYW4gb25seSBiZSBhLi56IG9yIF8gd2l0aCB0aGUgY3Vy cmVudCBjb2RlLgorICovCisKK3N0YXRpYyBzdHJ1Y3QgeworCWNoYXIgKm1hc2tfbmFtZTsK Kwl1bnNpZ25lZCBtYXNrX2JpdGZpZWxkOworfSBtYXNrX2ZsYWdzW10gPSB7CisJeyJhbGxv Y2F0ZSIsIFlBRkZTX1RSQUNFX0FMTE9DQVRFfSwKKwl7ImFsd2F5cyIsIFlBRkZTX1RSQUNF X0FMV0FZU30sCisJeyJiYWRfYmxvY2tzIiwgWUFGRlNfVFJBQ0VfQkFEX0JMT0NLU30sCisJ eyJidWZmZXJzIiwgWUFGRlNfVFJBQ0VfQlVGRkVSU30sCisJeyJidWciLCBZQUZGU19UUkFD RV9CVUd9LAorCXsiY2hlY2twdCIsIFlBRkZTX1RSQUNFX0NIRUNLUE9JTlR9LAorCXsiZGVs ZXRpb24iLCBZQUZGU19UUkFDRV9ERUxFVElPTn0sCisJeyJlcmFzZSIsIFlBRkZTX1RSQUNF X0VSQVNFfSwKKwl7ImVycm9yIiwgWUFGRlNfVFJBQ0VfRVJST1J9LAorCXsiZ2NfZGV0YWls IiwgWUFGRlNfVFJBQ0VfR0NfREVUQUlMfSwKKwl7ImdjIiwgWUFGRlNfVFJBQ0VfR0N9LAor CXsibXRkIiwgWUFGRlNfVFJBQ0VfTVREfSwKKwl7Im5hbmRhY2Nlc3MiLCBZQUZGU19UUkFD RV9OQU5EQUNDRVNTfSwKKwl7Im9zIiwgWUFGRlNfVFJBQ0VfT1N9LAorCXsic2Nhbl9kZWJ1 ZyIsIFlBRkZTX1RSQUNFX1NDQU5fREVCVUd9LAorCXsic2NhbiIsIFlBRkZTX1RSQUNFX1ND QU59LAorCXsidHJhY2luZyIsIFlBRkZTX1RSQUNFX1RSQUNJTkd9LAorCisJeyJ2ZXJpZnki LCBZQUZGU19UUkFDRV9WRVJJRll9LAorCXsidmVyaWZ5X25hbmQiLCBZQUZGU19UUkFDRV9W RVJJRllfTkFORH0sCisJeyJ2ZXJpZnlfZnVsbCIsIFlBRkZTX1RSQUNFX1ZFUklGWV9GVUxM fSwKKwl7InZlcmlmeV9hbGwiLCBZQUZGU19UUkFDRV9WRVJJRllfQUxMfSwKKworCXsid3Jp dGUiLCBZQUZGU19UUkFDRV9XUklURX0sCisJeyJhbGwiLCAweGZmZmZmZmZmfSwKKwl7Im5v bmUiLCAwfSwKKwl7TlVMTCwgMH0sCit9OworCisjZGVmaW5lIE1BWF9NQVNLX05BTUVfTEVO R1RIIDQwCitzdGF0aWMgaW50IHlhZmZzX3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUs IGNvbnN0IGNoYXIgKmJ1ZiwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKmRh dGEpCit7CisJdW5zaWduZWQgcmcgPSAwLCBtYXNrX2JpdGZpZWxkOworCWNoYXIgKmVuZDsK KwljaGFyICptYXNrX25hbWU7CisJY29uc3QgY2hhciAqeDsKKwljaGFyIHN1YnN0cmluZ1tN QVhfTUFTS19OQU1FX0xFTkdUSCArIDFdOworCWludCBpOworCWludCBkb25lID0gMDsKKwlp bnQgYWRkLCBsZW4gPSAwOworCWludCBwb3MgPSAwOworCisJcmcgPSB5YWZmc190cmFjZU1h c2s7CisKKwl3aGlsZSAoIWRvbmUgJiYgKHBvcyA8IGNvdW50KSkgeworCQlkb25lID0gMTsK KwkJd2hpbGUgKChwb3MgPCBjb3VudCkgJiYgaXNzcGFjZShidWZbcG9zXSkpCisJCQlwb3Mr KzsKKworCQlzd2l0Y2ggKGJ1Zltwb3NdKSB7CisJCWNhc2UgJysnOgorCQljYXNlICctJzoK KwkJY2FzZSAnPSc6CisJCQlhZGQgPSBidWZbcG9zXTsKKwkJCXBvcysrOworCQkJYnJlYWs7 CisKKwkJZGVmYXVsdDoKKwkJCWFkZCA9ICcgJzsKKwkJCWJyZWFrOworCQl9CisJCW1hc2tf bmFtZSA9IE5VTEw7CisKKwkJbWFza19iaXRmaWVsZCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiAr IHBvcywgJmVuZCwgMCk7CisKKwkJaWYgKGVuZCA+IGJ1ZiArIHBvcykgeworCQkJbWFza19u YW1lID0gIm51bWVyYWwiOworCQkJbGVuID0gZW5kIC0gKGJ1ZiArIHBvcyk7CisJCQlwb3Mg Kz0gbGVuOworCQkJZG9uZSA9IDA7CisJCX0gZWxzZSB7CisJCQlmb3IgKHggPSBidWYgKyBw b3MsIGkgPSAwOworCQkJICAgICgqeCA9PSAnXycgfHwgKCp4ID49ICdhJyAmJiAqeCA8PSAn eicpKSAmJgorCQkJICAgIGkgPCBNQVhfTUFTS19OQU1FX0xFTkdUSDsgeCsrLCBpKyssIHBv cysrKQorCQkJCXN1YnN0cmluZ1tpXSA9ICp4OworCQkJc3Vic3RyaW5nW2ldID0gJ1wwJzsK KworCQkJZm9yIChpID0gMDsgbWFza19mbGFnc1tpXS5tYXNrX25hbWUgIT0gTlVMTDsgaSsr KSB7CisJCQkJaWYgKHN0cmNtcChzdWJzdHJpbmcsIG1hc2tfZmxhZ3NbaV0ubWFza19uYW1l KSA9PSAwKSB7CisJCQkJCW1hc2tfbmFtZSA9IG1hc2tfZmxhZ3NbaV0ubWFza19uYW1lOwor CQkJCQltYXNrX2JpdGZpZWxkID0gbWFza19mbGFnc1tpXS5tYXNrX2JpdGZpZWxkOworCQkJ CQlkb25lID0gMDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisKKwkJaWYgKG1h c2tfbmFtZSAhPSBOVUxMKSB7CisJCQlkb25lID0gMDsKKwkJCXN3aXRjaCAoYWRkKSB7CisJ CQljYXNlICctJzoKKwkJCQlyZyAmPSB+bWFza19iaXRmaWVsZDsKKwkJCQlicmVhazsKKwkJ CWNhc2UgJysnOgorCQkJCXJnIHw9IG1hc2tfYml0ZmllbGQ7CisJCQkJYnJlYWs7CisJCQlj YXNlICc9JzoKKwkJCQlyZyA9IG1hc2tfYml0ZmllbGQ7CisJCQkJYnJlYWs7CisJCQlkZWZh dWx0OgorCQkJCXJnIHw9IG1hc2tfYml0ZmllbGQ7CisJCQkJYnJlYWs7CisJCQl9CisJCX0K Kwl9CisKKwl5YWZmc190cmFjZU1hc2sgPSByZyB8IFlBRkZTX1RSQUNFX0FMV0FZUzsKKwor CXByaW50ayhLRVJOX0RFQlVHICJuZXcgdHJhY2UgPSAweCUwOFhcbiIsIHlhZmZzX3RyYWNl TWFzayk7CisKKwlpZiAocmcgJiBZQUZGU19UUkFDRV9BTFdBWVMpIHsKKwkJZm9yIChpID0g MDsgbWFza19mbGFnc1tpXS5tYXNrX25hbWUgIT0gTlVMTDsgaSsrKSB7CisJCQljaGFyIGZs YWc7CisJCQlmbGFnID0gKChyZyAmIG1hc2tfZmxhZ3NbaV0ubWFza19iaXRmaWVsZCkgPT0g bWFza19mbGFnc1tpXS5tYXNrX2JpdGZpZWxkKSA/ICcrJyA6ICctJzsKKwkJCXByaW50ayhL RVJOX0RFQlVHICIlYyVzXG4iLCBmbGFnLCBtYXNrX2ZsYWdzW2ldLm1hc2tfbmFtZSk7CisJ CX0KKwl9CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qIFN0dWZmIHRvIGhhbmRsZSBpbnN0 YWxsYXRpb24gb2YgZmlsZSBzeXN0ZW1zICovCitzdHJ1Y3QgZmlsZV9zeXN0ZW1fdG9faW5z dGFsbCB7CisJc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKmZzdDsKKwlpbnQgaW5zdGFsbGVk OworfTsKKworc3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90b19pbnN0YWxsIGZzX3RvX2lu c3RhbGxbXSA9IHsKKwl7JnlhZmZzX2ZzX3R5cGUsIDB9LAorCXsmeWFmZnMyX2ZzX3R5cGUs IDB9LAorCXtOVUxMLCAwfQorfTsKKworc3RhdGljIGludCBfX2luaXQgaW5pdF95YWZmc19m cyh2b2lkKQoreworCWludCBlcnJvciA9IDA7CisJc3RydWN0IGZpbGVfc3lzdGVtX3RvX2lu c3RhbGwgKmZzaW5zdDsKKworCVQoWUFGRlNfVFJBQ0VfQUxXQVlTLAorCSAgKCJ5YWZmcyAi IF9fREFURV9fICIgIiBfX1RJTUVfXyAiIEluc3RhbGxpbmcuIFxuIikpOworCisJLyogSW5z dGFsbCB0aGUgcHJvY19mcyBlbnRyeSAqLworCW15X3Byb2NfZW50cnkgPSBjcmVhdGVfcHJv Y19lbnRyeSgieWFmZnMiLAorCQkJCQkgICAgICAgU19JUlVHTyB8IFNfSUZSRUcsCisJCQkJ CSAgICAgICBZUFJPQ19ST09UKTsKKworCWlmIChteV9wcm9jX2VudHJ5KSB7CisJCW15X3By b2NfZW50cnktPndyaXRlX3Byb2MgPSB5YWZmc19wcm9jX3dyaXRlOworCQlteV9wcm9jX2Vu dHJ5LT5yZWFkX3Byb2MgPSB5YWZmc19wcm9jX3JlYWQ7CisJCW15X3Byb2NfZW50cnktPmRh dGEgPSBOVUxMOworCX0gZWxzZQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIE5vdyBhZGQg dGhlIGZpbGUgc3lzdGVtIGVudHJpZXMgKi8KKworCWZzaW5zdCA9IGZzX3RvX2luc3RhbGw7 CisKKwl3aGlsZSAoZnNpbnN0LT5mc3QgJiYgIWVycm9yKSB7CisJCWVycm9yID0gcmVnaXN0 ZXJfZmlsZXN5c3RlbShmc2luc3QtPmZzdCk7CisJCWlmICghZXJyb3IpCisJCQlmc2luc3Qt Pmluc3RhbGxlZCA9IDE7CisJCWZzaW5zdCsrOworCX0KKworCS8qIEFueSBlcnJvcnM/IHVu aW5zdGFsbCAgKi8KKwlpZiAoZXJyb3IpIHsKKwkJZnNpbnN0ID0gZnNfdG9faW5zdGFsbDsK KworCQl3aGlsZSAoZnNpbnN0LT5mc3QpIHsKKwkJCWlmIChmc2luc3QtPmluc3RhbGxlZCkg eworCQkJCXVucmVnaXN0ZXJfZmlsZXN5c3RlbShmc2luc3QtPmZzdCk7CisJCQkJZnNpbnN0 LT5pbnN0YWxsZWQgPSAwOworCQkJfQorCQkJZnNpbnN0Kys7CisJCX0KKwl9CisKKwlyZXR1 cm4gZXJyb3I7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3lhZmZzX2ZzKHZvaWQp Cit7CisKKwlzdHJ1Y3QgZmlsZV9zeXN0ZW1fdG9faW5zdGFsbCAqZnNpbnN0OworCisJVChZ QUZGU19UUkFDRV9BTFdBWVMsICgieWFmZnMgIiBfX0RBVEVfXyAiICIgX19USU1FX18KKwkJ CSAgICAgICAiIHJlbW92aW5nLiBcbiIpKTsKKworCXJlbW92ZV9wcm9jX2VudHJ5KCJ5YWZm cyIsIFlQUk9DX1JPT1QpOworCisJZnNpbnN0ID0gZnNfdG9faW5zdGFsbDsKKworCXdoaWxl IChmc2luc3QtPmZzdCkgeworCQlpZiAoZnNpbnN0LT5pbnN0YWxsZWQpIHsKKwkJCXVucmVn aXN0ZXJfZmlsZXN5c3RlbShmc2luc3QtPmZzdCk7CisJCQlmc2luc3QtPmluc3RhbGxlZCA9 IDA7CisJCX0KKwkJZnNpbnN0Kys7CisJfQorfQorCittb2R1bGVfaW5pdChpbml0X3lhZmZz X2ZzKQorbW9kdWxlX2V4aXQoZXhpdF95YWZmc19mcykKKworTU9EVUxFX0RFU0NSSVBUSU9O KCJZQUZGUzIgLSBhIE5BTkQgc3BlY2lmaWMgZmxhc2ggZmlsZSBzeXN0ZW0iKTsKK01PRFVM RV9BVVRIT1IoIkNoYXJsZXMgTWFubmluZywgQWxlcGggT25lIEx0ZC4sIDIwMDItMjAwNiIp OworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC11IC0tbmV3LWZpbGUgLS1yZWN1cnNp dmUgbGludXgtMi42LjI5LjYub3JpZy9mcy95YWZmczIveWFmZnNfZ2V0YmxvY2tpbmZvLmgg bGludXgtMi42LjI5LjYubW9kL2ZzL3lhZmZzMi95YWZmc19nZXRibG9ja2luZm8uaAotLS0g bGludXgtMi42LjI5LjYub3JpZy9mcy95YWZmczIveWFmZnNfZ2V0YmxvY2tpbmZvLmgJMTk2 OS0xMi0zMSAxNzowMDowMC4wMDAwMDAwMDAgLTA3MDAKKysrIGxpbnV4LTIuNi4yOS42Lm1v ZC9mcy95YWZmczIveWFmZnNfZ2V0YmxvY2tpbmZvLmgJMjAwOS0wNy0yMSAxMToyODoxOC4w MDAwMDAwMDAgLTA3MDAKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIFlBRkZTOiBZZXQgYW5v dGhlciBGbGFzaCBGaWxlIFN5c3RlbSAuIEEgTkFORC1mbGFzaCBzcGVjaWZpYyBmaWxlIHN5 c3RlbS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNyBBbGVwaCBPbmUgTHRkLgor ICogICBmb3IgVG9ieSBDaHVyY2hpbGwgTHRkIGFuZCBCcmlnaHRzdGFyIEVuZ2luZWVyaW5n CisgKgorICogQ3JlYXRlZCBieSBDaGFybGVzIE1hbm5pbmcgPGNoYXJsZXNAYWxlcGgxLmNv LnVrPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSBhcwor ICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICog Tm90ZTogT25seSBZQUZGUyBoZWFkZXJzIGFyZSBMR1BMLCBZQUZGUyBDIGNvZGUgaXMgY292 ZXJlZCBieSBHUEwuCisgKi8KKworI2lmbmRlZiBfX1lBRkZTX0dFVEJMT0NLSU5GT19IX18K KyNkZWZpbmUgX19ZQUZGU19HRVRCTE9DS0lORk9fSF9fCisKKyNpbmNsdWRlICJ5YWZmc19n dXRzLmgiCisKKy8qIEZ1bmN0aW9uIHRvIG1hbmlwdWxhdGUgYmxvY2sgaW5mbyAqLworc3Rh dGljIFlfSU5MSU5FIHlhZmZzX0Jsb2NrSW5mbyAqeWFmZnNfR2V0QmxvY2tJbmZvKHlhZmZz X0RldmljZSAqIGRldiwgaW50IGJsaykKK3sKKwlpZiAoYmxrIDwgZGV2LT5pbnRlcm5hbFN0 YXJ0QmxvY2sgfHwgYmxrID4gZGV2LT5pbnRlcm5hbEVuZEJsb2NrKSB7CisJCVQoWUFGRlNf VFJBQ0VfRVJST1IsCisJCSAgKFRTVFIKKwkJICAgKCIqKj4+IHlhZmZzOiBnZXRCbG9ja0lu Zm8gYmxvY2sgJWQgaXMgbm90IHZhbGlkIiBURU5EU1RSKSwKKwkJICAgYmxrKSk7CisJCVlC VUcoKTsKKwl9CisJcmV0dXJuICZkZXYtPmJsb2NrSW5mb1tibGsgLSBkZXYtPmludGVybmFs U3RhcnRCbG9ja107Cit9CisKKyNlbmRpZgpkaWZmIC11IC0tbmV3LWZpbGUgLS1yZWN1cnNp dmUgbGludXgtMi42LjI5LjYub3JpZy9mcy95YWZmczIveWFmZnNfZ3V0cy5jIGxpbnV4LTIu Ni4yOS42Lm1vZC9mcy95YWZmczIveWFmZnNfZ3V0cy5jCi0tLSBsaW51eC0yLjYuMjkuNi5v cmlnL2ZzL3lhZmZzMi95YWZmc19ndXRzLmMJMTk2OS0xMi0zMSAxNzowMDowMC4wMDAwMDAw MDAgLTA3MDAKKysrIGxpbnV4LTIuNi4yOS42Lm1vZC9mcy95YWZmczIveWFmZnNfZ3V0cy5j CTIwMDktMDctMjEgMTE6Mjg6MTguMDAwMDAwMDAwIC0wNzAwCkBAIC0wLDAgKzEsNzU4MCBA QAorLyoKKyAqIFlBRkZTOiBZZXQgQW5vdGhlciBGbGFzaCBGaWxlIFN5c3RlbS4gQSBOQU5E LWZsYXNoIHNwZWNpZmljIGZpbGUgc3lzdGVtLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAw Mi0yMDA3IEFsZXBoIE9uZSBMdGQuCisgKiAgIGZvciBUb2J5IENodXJjaGlsbCBMdGQgYW5k IEJyaWdodHN0YXIgRW5naW5lZXJpbmcKKyAqCisgKiBDcmVhdGVkIGJ5IENoYXJsZXMgTWFu bmluZyA8Y2hhcmxlc0BhbGVwaDEuY28udWs+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZy ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAq IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug dmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbi4KKyAqLworCitjb25zdCBjaGFyICp5YWZmc19ndXRzX2NfdmVyc2lvbiA9CisgICAg IiRJZDogeWFmZnNfZ3V0cy5jLHYgMS44NSAyMDA5LTA2LTA4IDIzOjUwOjQ0IGNoYXJsZXMg RXhwICQiOworCisjaW5jbHVkZSAieXBvcnRlbnYuaCIKKworI2luY2x1ZGUgInlhZmZzaW50 ZXJmYWNlLmgiCisjaW5jbHVkZSAieWFmZnNfZ3V0cy5oIgorI2luY2x1ZGUgInlhZmZzX3Rh Z3N2YWxpZGl0eS5oIgorI2luY2x1ZGUgInlhZmZzX2dldGJsb2NraW5mby5oIgorCisjaW5j bHVkZSAieWFmZnNfdGFnc2NvbXBhdC5oIgorI2lmbmRlZiBDT05GSUdfWUFGRlNfVVNFX09X Tl9TT1JUCisjaW5jbHVkZSAieWFmZnNfcXNvcnQuaCIKKyNlbmRpZgorI2luY2x1ZGUgInlh ZmZzX25hbmQuaCIKKworI2luY2x1ZGUgInlhZmZzX2NoZWNrcHRydy5oIgorCisjaW5jbHVk ZSAieWFmZnNfbmFuZC5oIgorI2luY2x1ZGUgInlhZmZzX3BhY2tlZHRhZ3MyLmgiCisKKwor I2RlZmluZSBZQUZGU19QQVNTSVZFX0dDX0NIVU5LUyAyCisKKyNpbmNsdWRlICJ5YWZmc19l Y2MuaCIKKworCisvKiBSb2J1c3RpZmljYXRpb24gKGlmIGl0IGV2ZXIgY29tZXMgYWJvdXQu Li4pICovCitzdGF0aWMgdm9pZCB5YWZmc19SZXRpcmVCbG9jayh5YWZmc19EZXZpY2UgKmRl diwgaW50IGJsb2NrSW5OQU5EKTsKK3N0YXRpYyB2b2lkIHlhZmZzX0hhbmRsZVdyaXRlQ2h1 bmtFcnJvcih5YWZmc19EZXZpY2UgKmRldiwgaW50IGNodW5rSW5OQU5ELAorCQlpbnQgZXJh c2VkT2spOworc3RhdGljIHZvaWQgeWFmZnNfSGFuZGxlV3JpdGVDaHVua09rKHlhZmZzX0Rl dmljZSAqZGV2LCBpbnQgY2h1bmtJbk5BTkQsCisJCQkJY29uc3QgX191OCAqZGF0YSwKKwkJ CQljb25zdCB5YWZmc19FeHRlbmRlZFRhZ3MgKnRhZ3MpOworc3RhdGljIHZvaWQgeWFmZnNf SGFuZGxlVXBkYXRlQ2h1bmsoeWFmZnNfRGV2aWNlICpkZXYsIGludCBjaHVua0luTkFORCwK KwkJCQljb25zdCB5YWZmc19FeHRlbmRlZFRhZ3MgKnRhZ3MpOworCisvKiBPdGhlciBsb2Nh bCBwcm90b3R5cGVzICovCitzdGF0aWMgdm9pZCB5YWZmc19VcGRhdGVQYXJlbnQoeWFmZnNf T2JqZWN0ICpvYmopOworc3RhdGljIGludCB5YWZmc19VbmxpbmtPYmplY3QoeWFmZnNfT2Jq ZWN0ICpvYmopOworc3RhdGljIGludCB5YWZmc19PYmplY3RIYXNDYWNoZWRXcml0ZURhdGEo eWFmZnNfT2JqZWN0ICpvYmopOworCitzdGF0aWMgdm9pZCB5YWZmc19IYXJkbGlua0ZpeHVw KHlhZmZzX0RldmljZSAqZGV2LCB5YWZmc19PYmplY3QgKmhhcmRMaXN0KTsKKworc3RhdGlj IGludCB5YWZmc19Xcml0ZU5ld0NodW5rV2l0aFRhZ3NUb05BTkQoeWFmZnNfRGV2aWNlICpk ZXYsCisJCQkJCWNvbnN0IF9fdTggKmJ1ZmZlciwKKwkJCQkJeWFmZnNfRXh0ZW5kZWRUYWdz ICp0YWdzLAorCQkJCQlpbnQgdXNlUmVzZXJ2ZSk7CitzdGF0aWMgaW50IHlhZmZzX1B1dENo dW5rSW50b0ZpbGUoeWFmZnNfT2JqZWN0ICppbiwgaW50IGNodW5rSW5Jbm9kZSwKKwkJCQlp bnQgY2h1bmtJbk5BTkQsIGludCBpblNjYW4pOworCitzdGF0aWMgeWFmZnNfT2JqZWN0ICp5 YWZmc19DcmVhdGVOZXdPYmplY3QoeWFmZnNfRGV2aWNlICpkZXYsIGludCBudW1iZXIsCisJ CQkJCXlhZmZzX09iamVjdFR5cGUgdHlwZSk7CitzdGF0aWMgdm9pZCB5YWZmc19BZGRPYmpl Y3RUb0RpcmVjdG9yeSh5YWZmc19PYmplY3QgKmRpcmVjdG9yeSwKKwkJCQl5YWZmc19PYmpl Y3QgKm9iaik7CitzdGF0aWMgaW50IHlhZmZzX1VwZGF0ZU9iamVjdEhlYWRlcih5YWZmc19P YmplY3QgKmluLCBjb25zdCBZQ0hBUiAqbmFtZSwKKwkJCQlpbnQgZm9yY2UsIGludCBpc1No cmluaywgaW50IHNoYWRvd3MpOworc3RhdGljIHZvaWQgeWFmZnNfUmVtb3ZlT2JqZWN0RnJv bURpcmVjdG9yeSh5YWZmc19PYmplY3QgKm9iaik7CitzdGF0aWMgaW50IHlhZmZzX0NoZWNr U3RydWN0dXJlcyh2b2lkKTsKK3N0YXRpYyBpbnQgeWFmZnNfRGVsZXRlV29ya2VyKHlhZmZz X09iamVjdCAqaW4sIHlhZmZzX1Rub2RlICp0biwgX191MzIgbGV2ZWwsCisJCQlpbnQgY2h1 bmtPZmZzZXQsIGludCAqbGltaXQpOworc3RhdGljIGludCB5YWZmc19Eb0dlbmVyaWNPYmpl Y3REZWxldGlvbih5YWZmc19PYmplY3QgKmluKTsKKworc3RhdGljIHlhZmZzX0Jsb2NrSW5m byAqeWFmZnNfR2V0QmxvY2tJbmZvKHlhZmZzX0RldmljZSAqZGV2LCBpbnQgYmxvY2tObyk7 CisKKworc3RhdGljIGludCB5YWZmc19DaGVja0NodW5rRXJhc2VkKHN0cnVjdCB5YWZmc19E ZXZpY2VTdHJ1Y3QgKmRldiwKKwkJCQlpbnQgY2h1bmtJbk5BTkQpOworCitzdGF0aWMgaW50 IHlhZmZzX1VubGlua1dvcmtlcih5YWZmc19PYmplY3QgKm9iaik7CisKK3N0YXRpYyBpbnQg eWFmZnNfVGFnc01hdGNoKGNvbnN0IHlhZmZzX0V4dGVuZGVkVGFncyAqdGFncywgaW50IG9i amVjdElkLAorCQkJaW50IGNodW5rSW5PYmplY3QpOworCitzdGF0aWMgaW50IHlhZmZzX0Fs bG9jYXRlQ2h1bmsoeWFmZnNfRGV2aWNlICpkZXYsIGludCB1c2VSZXNlcnZlLAorCQkJCXlh ZmZzX0Jsb2NrSW5mbyAqKmJsb2NrVXNlZFB0cik7CisKK3N0YXRpYyB2b2lkIHlhZmZzX1Zl cmlmeUZyZWVDaHVua3MoeWFmZnNfRGV2aWNlICpkZXYpOworCitzdGF0aWMgdm9pZCB5YWZm c19DaGVja09iamVjdERldGFpbHNMb2FkZWQoeWFmZnNfT2JqZWN0ICppbik7CisKK3N0YXRp YyB2b2lkIHlhZmZzX1ZlcmlmeURpcmVjdG9yeSh5YWZmc19PYmplY3QgKmRpcmVjdG9yeSk7 CisjaWZkZWYgWUFGRlNfUEFSQU5PSUQKK3N0YXRpYyBpbnQgeWFmZnNfQ2hlY2tGaWxlU2Fu aXR5KHlhZmZzX09iamVjdCAqaW4pOworI2Vsc2UKKyNkZWZpbmUgeWFmZnNfQ2hlY2tGaWxl U2FuaXR5KGluKQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIHlhZmZzX0ludmFsaWRhdGVXaG9s ZUNodW5rQ2FjaGUoeWFmZnNfT2JqZWN0ICppbik7CitzdGF0aWMgdm9pZCB5YWZmc19JbnZh bGlkYXRlQ2h1bmtDYWNoZSh5YWZmc19PYmplY3QgKm9iamVjdCwgaW50IGNodW5rSWQpOwor CitzdGF0aWMgdm9pZCB5YWZmc19JbnZhbGlkYXRlQ2hlY2twb2ludCh5YWZmc19EZXZpY2Ug KmRldik7CisKK3N0YXRpYyBpbnQgeWFmZnNfRmluZENodW5rSW5GaWxlKHlhZmZzX09iamVj dCAqaW4sIGludCBjaHVua0luSW5vZGUsCisJCQkJeWFmZnNfRXh0ZW5kZWRUYWdzICp0YWdz KTsKKworc3RhdGljIF9fdTMyIHlhZmZzX0dldENodW5rR3JvdXBCYXNlKHlhZmZzX0Rldmlj ZSAqZGV2LCB5YWZmc19Ubm9kZSAqdG4sCisJCXVuc2lnbmVkIHBvcyk7CitzdGF0aWMgeWFm ZnNfVG5vZGUgKnlhZmZzX0ZpbmRMZXZlbDBUbm9kZSh5YWZmc19EZXZpY2UgKmRldiwKKwkJ CQkJeWFmZnNfRmlsZVN0cnVjdHVyZSAqZlN0cnVjdCwKKwkJCQkJX191MzIgY2h1bmtJZCk7 CisKKworLyogRnVuY3Rpb24gdG8gY2FsY3VsYXRlIGNodW5rIGFuZCBvZmZzZXQgKi8KKwor c3RhdGljIHZvaWQgeWFmZnNfQWRkclRvQ2h1bmsoeWFmZnNfRGV2aWNlICpkZXYsIGxvZmZf dCBhZGRyLCBpbnQgKmNodW5rT3V0LAorCQlfX3UzMiAqb2Zmc2V0T3V0KQoreworCWludCBj aHVuazsKKwlfX3UzMiBvZmZzZXQ7CisKKwljaHVuayAgPSAoX191MzIpKGFkZHIgPj4gZGV2 LT5jaHVua1NoaWZ0KTsKKworCWlmIChkZXYtPmNodW5rRGl2ID09IDEpIHsKKwkJLyogZWFz eSBwb3dlciBvZiAyIGNhc2UgKi8KKwkJb2Zmc2V0ID0gKF9fdTMyKShhZGRyICYgZGV2LT5j aHVua01hc2spOworCX0gZWxzZSB7CisJCS8qIE5vbiBwb3dlci1vZi0yIGNhc2UgKi8KKwor CQlsb2ZmX3QgY2h1bmtCYXNlOworCisJCWNodW5rIC89IGRldi0+Y2h1bmtEaXY7CisKKwkJ Y2h1bmtCYXNlID0gKChsb2ZmX3QpY2h1bmspICogZGV2LT5uRGF0YUJ5dGVzUGVyQ2h1bms7 CisJCW9mZnNldCA9IChfX3UzMikoYWRkciAtIGNodW5rQmFzZSk7CisJfQorCisJKmNodW5r T3V0ID0gY2h1bms7CisJKm9mZnNldE91dCA9IG9mZnNldDsKK30KKworLyogRnVuY3Rpb24g dG8gcmV0dXJuIHRoZSBudW1iZXIgb2Ygc2hpZnRzIGZvciBhIHBvd2VyIG9mIDIgZ3JlYXRl ciB0aGFuIG9yCisgKiBlcXVhbCB0byB0aGUgZ2l2ZW4gbnVtYmVyCisgKiBOb3RlIHdlIGRv bid0IHRyeSB0byBjYXRlciBmb3IgYWxsIHBvc3NpYmxlIG51bWJlcnMgYW5kIHRoaXMgZG9l cyBub3QgaGF2ZSB0bworICogYmUgaGVsbGlzaGx5IGVmZmljaWVudC4KKyAqLworCitzdGF0 aWMgX191MzIgU2hpZnRzR0UoX191MzIgeCkKK3sKKwlpbnQgZXh0cmFCaXRzOworCWludCBu U2hpZnRzOworCisJblNoaWZ0cyA9IGV4dHJhQml0cyA9IDA7CisKKwl3aGlsZSAoeCA+IDEp IHsKKwkJaWYgKHggJiAxKQorCQkJZXh0cmFCaXRzKys7CisJCXggPj49IDE7CisJCW5TaGlm dHMrKzsKKwl9CisKKwlpZiAoZXh0cmFCaXRzKQorCQluU2hpZnRzKys7CisKKwlyZXR1cm4g blNoaWZ0czsKK30KKworLyogRnVuY3Rpb24gdG8gcmV0dXJuIHRoZSBudW1iZXIgb2Ygc2hp ZnRzIHRvIGdldCBhIDEgaW4gYml0IDAKKyAqLworCitzdGF0aWMgX191MzIgU2hpZnRzKF9f dTMyIHgpCit7CisJaW50IG5TaGlmdHM7CisKKwluU2hpZnRzID0gIDA7CisKKwlpZiAoIXgp CisJCXJldHVybiAwOworCisJd2hpbGUgKCEoeCYxKSkgeworCQl4ID4+PSAxOworCQluU2hp ZnRzKys7CisJfQorCisJcmV0dXJuIG5TaGlmdHM7Cit9CisKKworCisvKgorICogVGVtcG9y YXJ5IGJ1ZmZlciBtYW5pcHVsYXRpb25zLgorICovCisKK3N0YXRpYyBpbnQgeWFmZnNfSW5p dGlhbGlzZVRlbXBCdWZmZXJzKHlhZmZzX0RldmljZSAqZGV2KQoreworCWludCBpOworCV9f dTggKmJ1ZiA9IChfX3U4ICopMTsKKworCW1lbXNldChkZXYtPnRlbXBCdWZmZXIsIDAsIHNp emVvZihkZXYtPnRlbXBCdWZmZXIpKTsKKworCWZvciAoaSA9IDA7IGJ1ZiAmJiBpIDwgWUFG RlNfTl9URU1QX0JVRkZFUlM7IGkrKykgeworCQlkZXYtPnRlbXBCdWZmZXJbaV0ubGluZSA9 IDA7CS8qIG5vdCBpbiB1c2UgKi8KKwkJZGV2LT50ZW1wQnVmZmVyW2ldLmJ1ZmZlciA9IGJ1 ZiA9CisJCSAgICBZTUFMTE9DX0RNQShkZXYtPnRvdGFsQnl0ZXNQZXJDaHVuayk7CisJfQor CisJcmV0dXJuIGJ1ZiA/IFlBRkZTX09LIDogWUFGRlNfRkFJTDsKK30KKworX191OCAqeWFm ZnNfR2V0VGVtcEJ1ZmZlcih5YWZmc19EZXZpY2UgKmRldiwgaW50IGxpbmVObykKK3sKKwlp bnQgaSwgajsKKworCWRldi0+dGVtcEluVXNlKys7CisJaWYgKGRldi0+dGVtcEluVXNlID4g ZGV2LT5tYXhUZW1wKQorCQlkZXYtPm1heFRlbXAgPSBkZXYtPnRlbXBJblVzZTsKKworCWZv ciAoaSA9IDA7IGkgPCBZQUZGU19OX1RFTVBfQlVGRkVSUzsgaSsrKSB7CisJCWlmIChkZXYt PnRlbXBCdWZmZXJbaV0ubGluZSA9PSAwKSB7CisJCQlkZXYtPnRlbXBCdWZmZXJbaV0ubGlu ZSA9IGxpbmVObzsKKwkJCWlmICgoaSArIDEpID4gZGV2LT5tYXhUZW1wKSB7CisJCQkJZGV2 LT5tYXhUZW1wID0gaSArIDE7CisJCQkJZm9yIChqID0gMDsgaiA8PSBpOyBqKyspCisJCQkJ CWRldi0+dGVtcEJ1ZmZlcltqXS5tYXhMaW5lID0KKwkJCQkJICAgIGRldi0+dGVtcEJ1ZmZl cltqXS5saW5lOworCQkJfQorCisJCQlyZXR1cm4gZGV2LT50ZW1wQnVmZmVyW2ldLmJ1ZmZl cjsKKwkJfQorCX0KKworCVQoWUFGRlNfVFJBQ0VfQlVGRkVSUywKKwkgIChUU1RSKCJPdXQg b2YgdGVtcCBidWZmZXJzIGF0IGxpbmUgJWQsIG90aGVyIGhlbGQgYnkgbGluZXM6IiksCisJ ICAgbGluZU5vKSk7CisJZm9yIChpID0gMDsgaSA8IFlBRkZTX05fVEVNUF9CVUZGRVJTOyBp KyspCisJCVQoWUFGRlNfVFJBQ0VfQlVGRkVSUywgKFRTVFIoIiAlZCAiKSwgZGV2LT50ZW1w QnVmZmVyW2ldLmxpbmUpKTsKKworCVQoWUFGRlNfVFJBQ0VfQlVGRkVSUywgKFRTVFIoIiAi IFRFTkRTVFIpKSk7CisKKwkvKgorCSAqIElmIHdlIGdvdCBoZXJlIHRoZW4gd2UgaGF2ZSB0 byBhbGxvY2F0ZSBhbiB1bm1hbmFnZWQgb25lCisJICogVGhpcyBpcyBub3QgZ29vZC4KKwkg Ki8KKworCWRldi0+dW5tYW5hZ2VkVGVtcEFsbG9jYXRpb25zKys7CisJcmV0dXJuIFlNQUxM T0MoZGV2LT5uRGF0YUJ5dGVzUGVyQ2h1bmspOworCit9CisKK3ZvaWQgeWFmZnNfUmVsZWFz ZVRlbXBCdWZmZXIoeWFmZnNfRGV2aWNlICpkZXYsIF9fdTggKmJ1ZmZlciwKKwkJCQkgICAg aW50IGxpbmVObykKK3sKKwlpbnQgaTsKKworCWRldi0+dGVtcEluVXNlLS07CisKKwlmb3Ig KGkgPSAwOyBpIDwgWUFGRlNfTl9URU1QX0JVRkZFUlM7IGkrKykgeworCQlpZiAoZGV2LT50 ZW1wQnVmZmVyW2ldLmJ1ZmZlciA9PSBidWZmZXIpIHsKKwkJCWRldi0+dGVtcEJ1ZmZlcltp XS5saW5lID0gMDsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCWlmIChidWZmZXIpIHsKKwkJ LyogYXNzdW1lIGl0IGlzIGFuIHVubWFuYWdlZCBvbmUuICovCisJCVQoWUFGRlNfVFJBQ0Vf QlVGRkVSUywKKwkJICAoVFNUUigiUmVsZWFzaW5nIHVubWFuYWdlZCB0ZW1wIGJ1ZmZlciBp biBsaW5lICVkIiBURU5EU1RSKSwKKwkJICAgbGluZU5vKSk7CisJCVlGUkVFKGJ1ZmZlcik7 CisJCWRldi0+dW5tYW5hZ2VkVGVtcERlYWxsb2NhdGlvbnMrKzsKKwl9CisKK30KKworLyoK KyAqIERldGVybWluZSBpZiB3ZSBoYXZlIGEgbWFuYWdlZCBidWZmZXIuCisgKi8KK2ludCB5 YWZmc19Jc01hbmFnZWRUZW1wQnVmZmVyKHlhZmZzX0RldmljZSAqZGV2LCBjb25zdCBfX3U4 ICpidWZmZXIpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgWUFGRlNfTl9URU1Q X0JVRkZFUlM7IGkrKykgeworCQlpZiAoZGV2LT50ZW1wQnVmZmVyW2ldLmJ1ZmZlciA9PSBi dWZmZXIpCisJCQlyZXR1cm4gMTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5uU2hv cnRPcENhY2hlczsgaSsrKSB7CisJCWlmIChkZXYtPnNyQ2FjaGVbaV0uZGF0YSA9PSBidWZm ZXIpCisJCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAoYnVmZmVyID09IGRldi0+Y2hlY2twb2lu dEJ1ZmZlcikKKwkJcmV0dXJuIDE7CisKKwlUKFlBRkZTX1RSQUNFX0FMV0FZUywKKwkJKFRT VFIoInlhZmZzOiB1bm1hZ2VkIGJ1ZmZlciBkZXRlY3RlZC5cbiIgVEVORFNUUikpKTsKKwly ZXR1cm4gMDsKK30KKworCisKKy8qCisgKiBDaHVuayBiaXRtYXAgbWFuaXB1bGF0aW9ucwor ICovCisKK3N0YXRpYyBZX0lOTElORSBfX3U4ICp5YWZmc19CbG9ja0JpdHMoeWFmZnNfRGV2 aWNlICpkZXYsIGludCBibGspCit7CisJaWYgKGJsayA8IGRldi0+aW50ZXJuYWxTdGFydEJs b2NrIHx8IGJsayA+IGRldi0+aW50ZXJuYWxFbmRCbG9jaykgeworCQlUKFlBRkZTX1RSQUNF X0VSUk9SLAorCQkJKFRTVFIoIioqPj4geWFmZnM6IEJsb2NrQml0cyBibG9jayAlZCBpcyBu b3QgdmFsaWQiIFRFTkRTVFIpLAorCQkJYmxrKSk7CisJCVlCVUcoKTsKKwl9CisJcmV0dXJu IGRldi0+Y2h1bmtCaXRzICsKKwkJKGRldi0+Y2h1bmtCaXRtYXBTdHJpZGUgKiAoYmxrIC0g ZGV2LT5pbnRlcm5hbFN0YXJ0QmxvY2spKTsKK30KKworc3RhdGljIFlfSU5MSU5FIHZvaWQg eWFmZnNfVmVyaWZ5Q2h1bmtCaXRJZCh5YWZmc19EZXZpY2UgKmRldiwgaW50IGJsaywgaW50 IGNodW5rKQoreworCWlmIChibGsgPCBkZXYtPmludGVybmFsU3RhcnRCbG9jayB8fCBibGsg PiBkZXYtPmludGVybmFsRW5kQmxvY2sgfHwKKwkJCWNodW5rIDwgMCB8fCBjaHVuayA+PSBk ZXYtPm5DaHVua3NQZXJCbG9jaykgeworCQlUKFlBRkZTX1RSQUNFX0VSUk9SLAorCQkoVFNU UigiKio+PiB5YWZmczogQ2h1bmsgSWQgKCVkOiVkKSBpbnZhbGlkIlRFTkRTVFIpLAorCQkJ YmxrLCBjaHVuaykpOworCQlZQlVHKCk7CisJfQorfQorCitzdGF0aWMgWV9JTkxJTkUgdm9p ZCB5YWZmc19DbGVhckNodW5rQml0cyh5YWZmc19EZXZpY2UgKmRldiwgaW50IGJsaykKK3sK KwlfX3U4ICpibGtCaXRzID0geWFmZnNfQmxvY2tCaXRzKGRldiwgYmxrKTsKKworCW1lbXNl dChibGtCaXRzLCAwLCBkZXYtPmNodW5rQml0bWFwU3RyaWRlKTsKK30KKworc3RhdGljIFlf SU5MSU5FIHZvaWQgeWFmZnNfQ2xlYXJDaHVua0JpdCh5YWZmc19EZXZpY2UgKmRldiwgaW50 IGJsaywgaW50IGNodW5rKQoreworCV9fdTggKmJsa0JpdHMgPSB5YWZmc19CbG9ja0JpdHMo ZGV2LCBibGspOworCisJeWFmZnNfVmVyaWZ5Q2h1bmtCaXRJZChkZXYsIGJsaywgY2h1bmsp OworCisJYmxrQml0c1tjaHVuayAvIDhdICY9IH4oMSA8PCAoY2h1bmsgJiA3KSk7Cit9CisK K3N0YXRpYyBZX0lOTElORSB2b2lkIHlhZmZzX1NldENodW5rQml0KHlhZmZzX0RldmljZSAq ZGV2LCBpbnQgYmxrLCBpbnQgY2h1bmspCit7CisJX191OCAqYmxrQml0cyA9IHlhZmZzX0Js b2NrQml0cyhkZXYsIGJsayk7CisKKwl5YWZmc19WZXJpZnlDaHVua0JpdElkKGRldiwgYmxr LCBjaHVuayk7CisKKwlibGtCaXRzW2NodW5rIC8gOF0gfD0gKDEgPDwgKGNodW5rICYgNykp OworfQorCitzdGF0aWMgWV9JTkxJTkUgaW50IHlhZmZzX0NoZWNrQ2h1bmtCaXQoeWFmZnNf RGV2aWNlICpkZXYsIGludCBibGssIGludCBjaHVuaykKK3sKKwlfX3U4ICpibGtCaXRzID0g eWFmZnNfQmxvY2tCaXRzKGRldiwgYmxrKTsKKwl5YWZmc19WZXJpZnlDaHVua0JpdElkKGRl diwgYmxrLCBjaHVuayk7CisKKwlyZXR1cm4gKGJsa0JpdHNbY2h1bmsgLyA4XSAmICgxIDw8 IChjaHVuayAmIDcpKSkgPyAxIDogMDsKK30KKworc3RhdGljIFlfSU5MSU5FIGludCB5YWZm c19TdGlsbFNvbWVDaHVua0JpdHMoeWFmZnNfRGV2aWNlICpkZXYsIGludCBibGspCit7CisJ X191OCAqYmxrQml0cyA9IHlhZmZzX0Jsb2NrQml0cyhkZXYsIGJsayk7CisJaW50IGk7CisJ Zm9yIChpID0gMDsgaSA8IGRldi0+Y2h1bmtCaXRtYXBTdHJpZGU7IGkrKykgeworCQlpZiAo KmJsa0JpdHMpCisJCQlyZXR1cm4gMTsKKwkJYmxrQml0cysrOworCX0KKwlyZXR1cm4gMDsK K30KKworc3RhdGljIGludCB5YWZmc19Db3VudENodW5rQml0cyh5YWZmc19EZXZpY2UgKmRl diwgaW50IGJsaykKK3sKKwlfX3U4ICpibGtCaXRzID0geWFmZnNfQmxvY2tCaXRzKGRldiwg YmxrKTsKKwlpbnQgaTsKKwlpbnQgbiA9IDA7CisJZm9yIChpID0gMDsgaSA8IGRldi0+Y2h1 bmtCaXRtYXBTdHJpZGU7IGkrKykgeworCQlfX3U4IHggPSAqYmxrQml0czsKKwkJd2hpbGUg KHgpIHsKKwkJCWlmICh4ICYgMSkKKwkJCQluKys7CisJCQl4ID4+PSAxOworCQl9CisKKwkJ YmxrQml0cysrOworCX0KKwlyZXR1cm4gbjsKK30KKworLyoKKyAqIFZlcmlmaWNhdGlvbiBj b2RlCisgKi8KKworc3RhdGljIGludCB5YWZmc19Ta2lwVmVyaWZpY2F0aW9uKHlhZmZzX0Rl dmljZSAqZGV2KQoreworCXJldHVybiAhKHlhZmZzX3RyYWNlTWFzayAmIChZQUZGU19UUkFD RV9WRVJJRlkgfCBZQUZGU19UUkFDRV9WRVJJRllfRlVMTCkpOworfQorCitzdGF0aWMgaW50 IHlhZmZzX1NraXBGdWxsVmVyaWZpY2F0aW9uKHlhZmZzX0RldmljZSAqZGV2KQoreworCXJl dHVybiAhKHlhZmZzX3RyYWNlTWFzayAmIChZQUZGU19UUkFDRV9WRVJJRllfRlVMTCkpOwor fQorCitzdGF0aWMgaW50IHlhZmZzX1NraXBOQU5EVmVyaWZpY2F0aW9uKHlhZmZzX0Rldmlj ZSAqZGV2KQoreworCXJldHVybiAhKHlhZmZzX3RyYWNlTWFzayAmIChZQUZGU19UUkFDRV9W RVJJRllfTkFORCkpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqYmxvY2tTdGF0ZU5hbWVb XSA9IHsKKyJVbmtub3duIiwKKyJOZWVkcyBzY2FubmluZyIsCisiU2Nhbm5pbmciLAorIkVt cHR5IiwKKyJBbGxvY2F0aW5nIiwKKyJGdWxsIiwKKyJEaXJ0eSIsCisiQ2hlY2twb2ludCIs CisiQ29sbGVjdGluZyIsCisiRGVhZCIKK307CisKK3N0YXRpYyB2b2lkIHlhZmZzX1Zlcmlm eUJsb2NrKHlhZmZzX0RldmljZSAqZGV2LCB5YWZmc19CbG9ja0luZm8gKmJpLCBpbnQgbikK K3sKKwlpbnQgYWN0dWFsbHlVc2VkOworCWludCBpblVzZTsKKworCWlmICh5YWZmc19Ta2lw VmVyaWZpY2F0aW9uKGRldikpCisJCXJldHVybjsKKworCS8qIFJlcG9ydCBpbGxlZ2FsIHJ1 bnRpbWUgc3RhdGVzICovCisJaWYgKGJpLT5ibG9ja1N0YXRlID49IFlBRkZTX05VTUJFUl9P Rl9CTE9DS19TVEFURVMpCisJCVQoWUFGRlNfVFJBQ0VfVkVSSUZZLCAoVFNUUigiQmxvY2sg JWQgaGFzIHVuZGVmaW5lZCBzdGF0ZSAlZCJURU5EU1RSKSwgbiwgYmktPmJsb2NrU3RhdGUp KTsKKworCXN3aXRjaCAoYmktPmJsb2NrU3RhdGUpIHsKKwljYXNlIFlBRkZTX0JMT0NLX1NU QVRFX1VOS05PV046CisJY2FzZSBZQUZGU19CTE9DS19TVEFURV9TQ0FOTklORzoKKwljYXNl IFlBRkZTX0JMT0NLX1NUQVRFX05FRURTX1NDQU5OSU5HOgorCQlUKFlBRkZTX1RSQUNFX1ZF UklGWSwgKFRTVFIoIkJsb2NrICVkIGhhcyBiYWQgcnVuLXN0YXRlICVzIlRFTkRTVFIpLAor CQluLCBibG9ja1N0YXRlTmFtZVtiaS0+YmxvY2tTdGF0ZV0pKTsKKwl9CisKKwkvKiBDaGVj ayBwYWdlcyBpbiB1c2UgYW5kIHNvZnQgZGVsZXRpb25zIGFyZSBsZWdhbCAqLworCisJYWN0 dWFsbHlVc2VkID0gYmktPnBhZ2VzSW5Vc2UgLSBiaS0+c29mdERlbGV0aW9uczsKKworCWlm IChiaS0+cGFnZXNJblVzZSA8IDAgfHwgYmktPnBhZ2VzSW5Vc2UgPiBkZXYtPm5DaHVua3NQ ZXJCbG9jayB8fAorCSAgIGJpLT5zb2Z0RGVsZXRpb25zIDwgMCB8fCBiaS0+c29mdERlbGV0 aW9ucyA+IGRldi0+bkNodW5rc1BlckJsb2NrIHx8CisJICAgYWN0dWFsbHlVc2VkIDwgMCB8 fCBhY3R1YWxseVVzZWQgPiBkZXYtPm5DaHVua3NQZXJCbG9jaykKKwkJVChZQUZGU19UUkFD RV9WRVJJRlksIChUU1RSKCJCbG9jayAlZCBoYXMgaWxsZWdhbCB2YWx1ZXMgcGFnZXNJblVz ZWQgJWQgc29mdERlbGV0aW9ucyAlZCJURU5EU1RSKSwKKwkJbiwgYmktPnBhZ2VzSW5Vc2Us IGJpLT5zb2Z0RGVsZXRpb25zKSk7CisKKworCS8qIENoZWNrIGNodW5rIGJpdG1hcCBsZWdh bCAqLworCWluVXNlID0geWFmZnNfQ291bnRDaHVua0JpdHMoZGV2LCBuKTsKKwlpZiAoaW5V c2UgIT0gYmktPnBhZ2VzSW5Vc2UpCisJCVQoWUFGRlNfVFJBQ0VfVkVSSUZZLCAoVFNUUigi QmxvY2sgJWQgaGFzIGluY29uc2lzdGVudCB2YWx1ZXMgcGFnZXNJblVzZSAlZCBjb3VudGVk IGNodW5rIGJpdHMgJWQiVEVORFNUUiksCisJCQluLCBiaS0+cGFnZXNJblVzZSwgaW5Vc2Up KTsKKworCS8qIENoZWNrIHRoYXQgdGhlIHNlcXVlbmNlIG51bWJlciBpcyB2YWxpZC4KKwkg KiBUZW4gbWlsbGlvbiBpcyBsZWdhbCwgYnV0IGlzIHZlcnkgdW5saWtlbHkKKwkgKi8KKwlp ZiAoZGV2LT5pc1lhZmZzMiAmJgorCSAgIChiaS0+YmxvY2tTdGF0ZSA9PSBZQUZGU19CTE9D S19TVEFURV9BTExPQ0FUSU5HIHx8IGJpLT5ibG9ja1N0YXRlID09IFlBRkZTX0JMT0NLX1NU QVRFX0ZVTEwpICYmCisJICAgKGJpLT5zZXF1ZW5jZU51bWJlciA8IFlBRkZTX0xPV0VTVF9T RVFVRU5DRV9OVU1CRVIgfHwgYmktPnNlcXVlbmNlTnVtYmVyID4gMTAwMDAwMDApKQorCQlU KFlBRkZTX1RSQUNFX1ZFUklGWSwgKFRTVFIoIkJsb2NrICVkIGhhcyBzdXNwZWN0IHNlcXVl bmNlIG51bWJlciBvZiAlZCJURU5EU1RSKSwKKwkJbiwgYmktPnNlcXVlbmNlTnVtYmVyKSk7 Cit9CisKK3N0YXRpYyB2b2lkIHlhZmZzX1ZlcmlmeUNvbGxlY3RlZEJsb2NrKHlhZmZzX0Rl dmljZSAqZGV2LCB5YWZmc19CbG9ja0luZm8gKmJpLAorCQlpbnQgbikKK3sKKwl5YWZmc19W ZXJpZnlCbG9jayhkZXYsIGJpLCBuKTsKKworCS8qIEFmdGVyIGNvbGxlY3Rpb24gdGhlIGJs b2NrIHNob3VsZCBiZSBpbiB0aGUgZXJhc2VkIHN0YXRlICovCisJLyogVGhpcyB3aWxsIG5l ZWQgdG8gY2hhbmdlIGlmIHdlIGRvIHBhcnRpYWwgZ2MgKi8KKworCWlmIChiaS0+YmxvY2tT dGF0ZSAhPSBZQUZGU19CTE9DS19TVEFURV9DT0xMRUNUSU5HICYmCisJCQliaS0+YmxvY2tT dGF0ZSAhPSBZQUZGU19CTE9DS19TVEFURV9FTVBUWSkgeworCQlUKFlBRkZTX1RSQUNFX0VS Uk9SLCAoVFNUUigiQmxvY2sgJWQgaXMgaW4gc3RhdGUgJWQgYWZ0ZXIgZ2MsIHNob3VsZCBi ZSBlcmFzZWQiVEVORFNUUiksCisJCQluLCBiaS0+YmxvY2tTdGF0ZSkpOworCX0KK30KKwor c3RhdGljIHZvaWQgeWFmZnNfVmVyaWZ5QmxvY2tzKHlhZmZzX0RldmljZSAqZGV2KQorewor CWludCBpOworCWludCBuQmxvY2tzUGVyU3RhdGVbWUFGRlNfTlVNQkVSX09GX0JMT0NLX1NU QVRFU107CisJaW50IG5JbGxlZ2FsQmxvY2tTdGF0ZXMgPSAwOworCisJaWYgKHlhZmZzX1Nr aXBWZXJpZmljYXRpb24oZGV2KSkKKwkJcmV0dXJuOworCisJbWVtc2V0KG5CbG9ja3NQZXJT dGF0ZSwgMCwgc2l6ZW9mKG5CbG9ja3NQZXJTdGF0ZSkpOworCisJZm9yIChpID0gZGV2LT5p bnRlcm5hbFN0YXJ0QmxvY2s7IGkgPD0gZGV2LT5pbnRlcm5hbEVuZEJsb2NrOyBpKyspIHsK KwkJeWFmZnNfQmxvY2tJbmZvICpiaSA9IHlhZmZzX0dldEJsb2NrSW5mbyhkZXYsIGkpOwor CQl5YWZmc19WZXJpZnlCbG9jayhkZXYsIGJpLCBpKTsKKworCQlpZiAoYmktPmJsb2NrU3Rh dGUgPCBZQUZGU19OVU1CRVJfT0ZfQkxPQ0tfU1RBVEVTKQorCQkJbkJsb2Nrc1BlclN0YXRl W2JpLT5ibG9ja1N0YXRlXSsrOworCQllbHNlCisJCQluSWxsZWdhbEJsb2NrU3RhdGVzKys7 CisJfQorCisJVChZQUZGU19UUkFDRV9WRVJJRlksIChUU1RSKCIiVEVORFNUUikpKTsKKwlU KFlBRkZTX1RSQUNFX1ZFUklGWSwgKFRTVFIoIkJsb2NrIHN1bW1hcnkiVEVORFNUUikpKTsK KworCVQoWUFGRlNfVFJBQ0VfVkVSSUZZLCAoVFNUUigiJWQgYmxvY2tzIGhhdmUgaWxsZWdh bCBzdGF0ZXMiVEVORFNUUiksIG5JbGxlZ2FsQmxvY2tTdGF0ZXMpKTsKKwlpZiAobkJsb2Nr c1BlclN0YXRlW1lBRkZTX0JMT0NLX1NUQVRFX0FMTE9DQVRJTkddID4gMSkKKwkJVChZQUZG U19UUkFDRV9WRVJJRlksIChUU1RSKCJUb28gbWFueSBhbGxvY2F0aW5nIGJsb2NrcyJURU5E U1RSKSkpOworCisJZm9yIChpID0gMDsgaSA8IFlBRkZTX05VTUJFUl9PRl9CTE9DS19TVEFU RVM7IGkrKykKKwkJVChZQUZGU19UUkFDRV9WRVJJRlksCisJCSAgKFRTVFIoIiVzICVkIGJs b2NrcyJURU5EU1RSKSwKKwkJICBibG9ja1N0YXRlTmFtZVtpXSwgbkJsb2Nrc1BlclN0YXRl W2ldKSk7CisKKwlpZiAoZGV2LT5ibG9ja3NJbkNoZWNrcG9pbnQgIT0gbkJsb2Nrc1BlclN0 YXRlW1lBRkZTX0JMT0NLX1NUQVRFX0NIRUNLUE9JTlRdKQorCQlUKFlBRkZTX1RSQUNFX1ZF UklGWSwKKwkJIChUU1RSKCJDaGVja3BvaW50IGJsb2NrIGNvdW50IHdyb25nIGRldiAlZCBj b3VudCAlZCJURU5EU1RSKSwKKwkJIGRldi0+YmxvY2tzSW5DaGVja3BvaW50LCBuQmxvY2tz UGVyU3RhdGVbWUFGRlNfQkxPQ0tfU1RBVEVfQ0hFQ0tQT0lOVF0pKTsKKworCWlmIChkZXYt Pm5FcmFzZWRCbG9ja3MgIT0gbkJsb2Nrc1BlclN0YXRlW1lBRkZTX0JMT0NLX1NUQVRFX0VN UFRZXSkKKwkJVChZQUZGU19UUkFDRV9WRVJJRlksCisJCSAoVFNUUigiRXJhc2VkIGJsb2Nr IGNvdW50IHdyb25nIGRldiAlZCBjb3VudCAlZCJURU5EU1RSKSwKKwkJIGRldi0+bkVyYXNl ZEJsb2NrcywgbkJsb2Nrc1BlclN0YXRlW1lBRkZTX0JMT0NLX1NUQVRFX0VNUFRZXSkpOwor CisJaWYgKG5CbG9ja3NQZXJTdGF0ZVtZQUZGU19CTE9DS19TVEFURV9DT0xMRUNUSU5HXSA+ IDEpCisJCVQoWUFGRlNfVFJBQ0VfVkVSSUZZLAorCQkgKFRTVFIoIlRvbyBtYW55IGNvbGxl Y3RpbmcgYmxvY2tzICVkIChtYXggaXMgMSkiVEVORFNUUiksCisJCSBuQmxvY2tzUGVyU3Rh dGVbWUFGRlNfQkxPQ0tfU1RBVEVfQ09MTEVDVElOR10pKTsKKworCVQoWUFGRlNfVFJBQ0Vf VkVSSUZZLCAoVFNUUigiIlRFTkRTVFIpKSk7CisKK30KKworLyoKKyAqIFZlcmlmeSB0aGUg b2JqZWN0IGhlYWRlci4gb2ggbXVzdCBiZSB2YWxpZCwgYnV0IG9iaiBhbmQgdGFncyBtYXkg YmUgTlVMTCBpbiB3aGljaAorICogY2FzZSB0aG9zZSB0ZXN0cyB3aWxsIG5vdCBiZSBwZXJm b3JtZWQuCisgKi8KK3N0YXRpYyB2b2lkIHlhZmZzX1ZlcmlmeU9iamVjdEhlYWRlcih5YWZm c19PYmplY3QgKm9iaiwgeWFmZnNfT2JqZWN0SGVhZGVyICpvaCwgeWFmZnNfRXh0ZW5kZWRU YWdzICp0YWdzLCBpbnQgcGFyZW50Q2hlY2spCit7CisJaWYgKG9iaiAmJiB5YWZmc19Ta2lw VmVyaWZpY2F0aW9uKG9iai0+bXlEZXYpKQorCQlyZXR1cm47CisKKwlpZiAoISh0YWdzICYm IG9iaiAmJiBvaCkpIHsKKwkJVChZQUZGU19UUkFDRV9WRVJJRlksCisJCQkJKFRTVFIoIlZl cmlmeWluZyBvYmplY3QgaGVhZGVyIHRhZ3MgJXggb2JqICV4IG9oICV4IlRFTkRTVFIpLAor CQkJCShfX3UzMil0YWdzLCAoX191MzIpb2JqLCAoX191MzIpb2gpKTsKKwkJcmV0dXJuOwor CX0KKworCWlmIChvaC0+dHlwZSA8PSBZQUZGU19PQkpFQ1RfVFlQRV9VTktOT1dOIHx8CisJ CQlvaC0+dHlwZSA+IFlBRkZTX09CSkVDVF9UWVBFX01BWCkKKwkJVChZQUZGU19UUkFDRV9W RVJJRlksCisJCQkoVFNUUigiT2JqICVkIGhlYWRlciB0eXBlIGlzIGlsbGVnYWwgdmFsdWUg MHgleCJURU5EU1RSKSwKKwkJCXRhZ3MtPm9iamVjdElkLCBvaC0+dHlwZSkpOworCisJaWYg KHRhZ3MtPm9iamVjdElkICE9IG9iai0+b2JqZWN0SWQpCisJCVQoWUFGRlNfVFJBQ0VfVkVS SUZZLAorCQkJKFRTVFIoIk9iaiAlZCBoZWFkZXIgbWlzbWF0Y2ggb2JqZWN0SWQgJWQiVEVO RFNUUiksCisJCQl0YWdzLT5vYmplY3RJZCwgb2JqLT5vYmplY3RJZCkpOworCisKKwkvKgor CSAqIENoZWNrIHRoYXQgdGhlIG9iamVjdCdzIHBhcmVudCBpZHMgbWF0Y2ggaWYgcGFyZW50 Q2hlY2sgcmVxdWVzdGVkLgorCSAqCisJICogVGVzdHMgZG8gbm90IGFwcGx5IHRvIHRoZSBy b290IG9iamVjdC4KKwkgKi8KKworCWlmIChwYXJlbnRDaGVjayAmJiB0YWdzLT5vYmplY3RJ ZCA+IDEgJiYgIW9iai0+cGFyZW50KQorCQlUKFlBRkZTX1RSQUNFX1ZFUklGWSwKKwkJCShU U1RSKCJPYmogJWQgaGVhZGVyIG1pc21hdGNoIHBhcmVudElkICVkIG9iai0+cGFyZW50IGlz IE5VTEwiVEVORFNUUiksCisJCQl0YWdzLT5vYmplY3RJZCwgb2gtPnBhcmVudE9iamVjdElk KSk7CisKKwlpZiAocGFyZW50Q2hlY2sgJiYgb2JqLT5wYXJlbnQgJiYKKwkJCW9oLT5wYXJl bnRPYmplY3RJZCAhPSBvYmotPnBhcmVudC0+b2JqZWN0SWQgJiYKKwkJCShvaC0+cGFyZW50 T2JqZWN0SWQgIT0gWUFGRlNfT0JKRUNUSURfVU5MSU5LRUQgfHwKKwkJCW9iai0+cGFyZW50 LT5vYmplY3RJZCAhPSBZQUZGU19PQkpFQ1RJRF9ERUxFVEVEKSkKKwkJVChZQUZGU19UUkFD RV9WRVJJRlksCisJCQkoVFNUUigiT2JqICVkIGhlYWRlciBtaXNtYXRjaCBwYXJlbnRJZCAl ZCBwYXJlbnRPYmplY3RJZCAlZCJURU5EU1RSKSwKKwkJCXRhZ3MtPm9iamVjdElkLCBvaC0+ cGFyZW50T2JqZWN0SWQsIG9iai0+cGFyZW50LT5vYmplY3RJZCkpOworCisJaWYgKHRhZ3Mt Pm9iamVjdElkID4gMSAmJiBvaC0+bmFtZVswXSA9PSAwKSAvKiBOdWxsIG5hbWUgKi8KKwkJ VChZQUZGU19UUkFDRV9WRVJJRlksCisJCQkoVFNUUigiT2JqICVkIGhlYWRlciBuYW1lIGlz IE5VTEwiVEVORFNUUiksCisJCQlvYmotPm9iamVjdElkKSk7CisKKwlpZiAodGFncy0+b2Jq ZWN0SWQgPiAxICYmICgoX191OCkob2gtPm5hbWVbMF0pKSA9PSAweGZmKSAvKiBUcmFzaGVk IG5hbWUgKi8KKwkJVChZQUZGU19UUkFDRV9WRVJJRlksCisJCQkoVFNUUigiT2JqICVkIGhl YWRlciBuYW1lIGlzIDB4RkYiVEVORFNUUiksCisJCQlvYmotPm9iamVjdElkKSk7Cit9CisK KworCitzdGF0aWMgaW50IHlhZmZzX1ZlcmlmeVRub2RlV29ya2VyKHlhZmZzX09iamVjdCAq b2JqLCB5YWZmc19Ubm9kZSAqdG4sCisJCQkJCV9fdTMyIGxldmVsLCBpbnQgY2h1bmtPZmZz ZXQpCit7CisJaW50IGk7CisJeWFmZnNfRGV2aWNlICpkZXYgPSBvYmotPm15RGV2OworCWlu dCBvayA9IDE7CisKKwlpZiAodG4pIHsKKwkJaWYgKGxldmVsID4gMCkgeworCisJCQlmb3Ig KGkgPSAwOyBpIDwgWUFGRlNfTlROT0RFU19JTlRFUk5BTCAmJiBvazsgaSsrKSB7CisJCQkJ aWYgKHRuLT5pbnRlcm5hbFtpXSkgeworCQkJCQlvayA9IHlhZmZzX1ZlcmlmeVRub2RlV29y a2VyKG9iaiwKKwkJCQkJCQl0bi0+aW50ZXJuYWxbaV0sCisJCQkJCQkJbGV2ZWwgLSAxLAor CQkJCQkJCShjaHVua09mZnNldDw8WUFGRlNfVE5PREVTX0lOVEVSTkFMX0JJVFMpICsgaSk7 CisJCQkJfQorCQkJfQorCQl9IGVsc2UgaWYgKGxldmVsID09IDApIHsKKwkJCXlhZmZzX0V4 dGVuZGVkVGFncyB0YWdzOworCQkJX191MzIgb2JqZWN0SWQgPSBvYmotPm9iamVjdElkOwor CisJCQljaHVua09mZnNldCA8PD0gIFlBRkZTX1ROT0RFU19MRVZFTDBfQklUUzsKKworCQkJ Zm9yIChpID0gMDsgaSA8IFlBRkZTX05UTk9ERVNfTEVWRUwwOyBpKyspIHsKKwkJCQlfX3Uz MiB0aGVDaHVuayA9IHlhZmZzX0dldENodW5rR3JvdXBCYXNlKGRldiwgdG4sIGkpOworCisJ CQkJaWYgKHRoZUNodW5rID4gMCkgeworCQkJCQkvKiBUKH4wLChUU1RSKCJ2ZXJpZnlpbmcg KCVkOiVkKSAlZCJURU5EU1RSKSx0YWdzLm9iamVjdElkLHRhZ3MuY2h1bmtJZCx0aGVDaHVu aykpOyAqLworCQkJCQl5YWZmc19SZWFkQ2h1bmtXaXRoVGFnc0Zyb21OQU5EKGRldiwgdGhl Q2h1bmssIE5VTEwsICZ0YWdzKTsKKwkJCQkJaWYgKHRhZ3Mub2JqZWN0SWQgIT0gb2JqZWN0 SWQgfHwgdGFncy5jaHVua0lkICE9IGNodW5rT2Zmc2V0KSB7CisJCQkJCQlUKH4wLCAoVFNU UigiT2JqZWN0ICVkIGNodW5rSWQgJWQgTkFORCBtaXNtYXRjaCBjaHVuayAlZCB0YWdzICgl ZDolZCkiVEVORFNUUiksCisJCQkJCQkJb2JqZWN0SWQsIGNodW5rT2Zmc2V0LCB0aGVDaHVu aywKKwkJCQkJCQl0YWdzLm9iamVjdElkLCB0YWdzLmNodW5rSWQpKTsKKwkJCQkJfQorCQkJ CX0KKwkJCQljaHVua09mZnNldCsrOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIG9rOwor Cit9CisKKworc3RhdGljIHZvaWQgeWFmZnNfVmVyaWZ5RmlsZSh5YWZmc19PYmplY3QgKm9i aikKK3sKKwlpbnQgcmVxdWlyZWRUYWxsbmVzczsKKwlpbnQgYWN0dWFsVGFsbG5lc3M7CisJ X191MzIgbGFzdENodW5rOworCV9fdTMyIHg7CisJX191MzIgaTsKKwl5YWZmc19EZXZpY2Ug KmRldjsKKwl5YWZmc19FeHRlbmRlZFRhZ3MgdGFnczsKKwl5YWZmc19Ubm9kZSAqdG47CisJ X191MzIgb2JqZWN0SWQ7CisKKwlpZiAoIW9iaikKKwkJcmV0dXJuOworCisJaWYgKHlhZmZz X1NraXBWZXJpZmljYXRpb24ob2JqLT5teURldikpCisJCXJldHVybjsKKworCWRldiA9IG9i ai0+bXlEZXY7CisJb2JqZWN0SWQgPSBvYmotPm9iamVjdElkOworCisJLyogQ2hlY2sgZmls ZSBzaXplIGlzIGNvbnNpc3RlbnQgd2l0aCB0bm9kZSBkZXB0aCAqLworCWxhc3RDaHVuayA9 ICBvYmotPnZhcmlhbnQuZmlsZVZhcmlhbnQuZmlsZVNpemUgLyBkZXYtPm5EYXRhQnl0ZXNQ ZXJDaHVuayArIDE7CisJeCA9IGxhc3RDaHVuayA+PiBZQUZGU19UTk9ERVNfTEVWRUwwX0JJ VFM7CisJcmVxdWlyZWRUYWxsbmVzcyA9IDA7CisJd2hpbGUgKHggPiAwKSB7CisJCXggPj49 IFlBRkZTX1ROT0RFU19JTlRFUk5BTF9CSVRTOworCQlyZXF1aXJlZFRhbGxuZXNzKys7CisJ fQorCisJYWN0dWFsVGFsbG5lc3MgPSBvYmotPnZhcmlhbnQuZmlsZVZhcmlhbnQudG9wTGV2 ZWw7CisKKwlpZiAocmVxdWlyZWRUYWxsbmVzcyA+IGFjdHVhbFRhbGxuZXNzKQorCQlUKFlB RkZTX1RSQUNFX1ZFUklGWSwKKwkJKFRTVFIoIk9iaiAlZCBoYWQgdG5vZGUgdGFsbG5lc3Mg JWQsIG5lZWRzIHRvIGJlICVkIlRFTkRTVFIpLAorCQkgb2JqLT5vYmplY3RJZCwgYWN0dWFs VGFsbG5lc3MsIHJlcXVpcmVkVGFsbG5lc3MpKTsKKworCisJLyogQ2hlY2sgdGhhdCB0aGUg Y2h1bmtzIGluIHRoZSB0bm9kZSB0cmVlIGFyZSBhbGwgY29ycmVjdC4KKwkgKiBXZSBkbyB0 aGlzIGJ5IHNjYW5uaW5nIHRocm91Z2ggdGhlIHRub2RlIHRyZWUgYW5kCisJICogY2hlY2tp bmcgdGhlIHRhZ3MgZm9yIGV2ZXJ5IGNodW5rIG1hdGNoLgorCSAqLworCisJaWYgKHlhZmZz X1NraXBOQU5EVmVyaWZpY2F0aW9uKGRldikpCisJCXJldHVybjsKKworCWZvciAoaSA9IDE7 IGkgPD0gbGFzdENodW5rOyBpKyspIHsKKwkJdG4gPSB5YWZmc19GaW5kTGV2ZWwwVG5vZGUo ZGV2LCAmb2JqLT52YXJpYW50LmZpbGVWYXJpYW50LCBpKTsKKworCQlpZiAodG4pIHsKKwkJ CV9fdTMyIHRoZUNodW5rID0geWFmZnNfR2V0Q2h1bmtHcm91cEJhc2UoZGV2LCB0biwgaSk7 CisJCQlpZiAodGhlQ2h1bmsgPiAwKSB7CisJCQkJLyogVCh+MCwoVFNUUigidmVyaWZ5aW5n ICglZDolZCkgJWQiVEVORFNUUiksb2JqZWN0SWQsaSx0aGVDaHVuaykpOyAqLworCQkJCXlh ZmZzX1JlYWRDaHVua1dpdGhUYWdzRnJvbU5BTkQoZGV2LCB0aGVDaHVuaywgTlVMTCwgJnRh Z3MpOworCQkJCWlmICh0YWdzLm9iamVjdElkICE9IG9iamVjdElkIHx8IHRhZ3MuY2h1bmtJ ZCAhPSBpKSB7CisJCQkJCVQofjAsIChUU1RSKCJPYmplY3QgJWQgY2h1bmtJZCAlZCBOQU5E IG1pc21hdGNoIGNodW5rICVkIHRhZ3MgKCVkOiVkKSJURU5EU1RSKSwKKwkJCQkJCW9iamVj dElkLCBpLCB0aGVDaHVuaywKKwkJCQkJCXRhZ3Mub2JqZWN0SWQsIHRhZ3MuY2h1bmtJZCkp OworCQkJCX0KKwkJCX0KKwkJfQorCX0KK30KKworCitzdGF0aWMgdm9pZCB5YWZmc19WZXJp ZnlIYXJkTGluayh5YWZmc19PYmplY3QgKm9iaikKK3sKKwlpZiAob2JqICYmIHlhZmZzX1Nr aXBWZXJpZmljYXRpb24ob2JqLT5teURldikpCisJCXJldHVybjsKKworCS8qIFZlcmlmeSBz YW5lIGVxdWl2YWxlbnQgb2JqZWN0ICovCit9CisKK3N0YXRpYyB2b2lkIHlhZmZzX1Zlcmlm eVN5bWxpbmsoeWFmZnNfT2JqZWN0ICpvYmopCit7CisJaWYgKG9iaiAmJiB5YWZmc19Ta2lw VmVyaWZpY2F0aW9uKG9iai0+bXlEZXYpKQorCQlyZXR1cm47CisKKwkvKiBWZXJpZnkgc3lt bGluayBzdHJpbmcgKi8KK30KKworc3RhdGljIHZvaWQgeWFmZnNfVmVyaWZ5U3BlY2lhbCh5 YWZmc19PYmplY3QgKm9iaikKK3sKKwlpZiAob2JqICYmIHlhZmZzX1NraXBWZXJpZmljYXRp b24ob2JqLT5teURldikpCisJCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgeWFmZnNfVmVy aWZ5T2JqZWN0KHlhZmZzX09iamVjdCAqb2JqKQoreworCXlhZmZzX0RldmljZSAqZGV2Owor CisJX191MzIgY2h1bmtNaW47CisJX191MzIgY2h1bmtNYXg7CisKKwlfX3UzMiBjaHVua0lk T2s7CisJX191MzIgY2h1bmtJblJhbmdlOworCV9fdTMyIGNodW5rU2hvdWxkTm90QmVEZWxl dGVkOworCV9fdTMyIGNodW5rVmFsaWQ7CisKKwlpZiAoIW9iaikKKwkJcmV0dXJuOworCisJ aWYgKG9iai0+YmVpbmdDcmVhdGVkKQorCQlyZXR1cm47CisKKwlkZXYgPSBvYmotPm15RGV2 OworCisJaWYgKHlhZmZzX1NraXBWZXJpZmljYXRpb24oZGV2KSkKKwkJcmV0dXJuOworCisJ LyogQ2hlY2sgc2FuZSBvYmplY3QgaGVhZGVyIGNodW5rICovCisKKwljaHVua01pbiA9IGRl di0+aW50ZXJuYWxTdGFydEJsb2NrICogZGV2LT5uQ2h1bmtzUGVyQmxvY2s7CisJY2h1bmtN YXggPSAoZGV2LT5pbnRlcm5hbEVuZEJsb2NrKzEpICogZGV2LT5uQ2h1bmtzUGVyQmxvY2sg LSAxOworCisJY2h1bmtJblJhbmdlID0gKCgodW5zaWduZWQpKG9iai0+aGRyQ2h1bmspKSA+ PSBjaHVua01pbiAmJiAoKHVuc2lnbmVkKShvYmotPmhkckNodW5rKSkgPD0gY2h1bmtNYXgp OworCWNodW5rSWRPayA9IGNodW5rSW5SYW5nZSB8fCBvYmotPmhkckNodW5rID09IDA7CisJ Y2h1bmtWYWxpZCA9IGNodW5rSW5SYW5nZSAmJgorCQkJeWFmZnNfQ2hlY2tDaHVua0JpdChk ZXYsCisJCQkJCW9iai0+aGRyQ2h1bmsgLyBkZXYtPm5DaHVua3NQZXJCbG9jaywKKwkJCQkJ b2JqLT5oZHJDaHVuayAlIGRldi0+bkNodW5rc1BlckJsb2NrKTsKKwljaHVua1Nob3VsZE5v dEJlRGVsZXRlZCA9IGNodW5rSW5SYW5nZSAmJiAhY2h1bmtWYWxpZDsKKworCWlmICghb2Jq LT5mYWtlICYmCisJCQkoIWNodW5rSWRPayB8fCBjaHVua1Nob3VsZE5vdEJlRGVsZXRlZCkp IHsKKwkJVChZQUZGU19UUkFDRV9WRVJJRlksCisJCQkoVFNUUigiT2JqICVkIGhhcyBjaHVu a0lkICVkICVzICVzIlRFTkRTVFIpLAorCQkJb2JqLT5vYmplY3RJZCwgb2JqLT5oZHJDaHVu aywKKwkJCWNodW5rSWRPayA/ICIiIDogIixvdXQgb2YgcmFuZ2UiLAorCQkJY2h1bmtTaG91 bGROb3RCZURlbGV0ZWQgPyAiLG1hcmtlZCBhcyBkZWxldGVkIiA6ICIiKSk7CisJfQorCisJ aWYgKGNodW5rVmFsaWQgJiYgIXlhZmZzX1NraXBOQU5EVmVyaWZpY2F0aW9uKGRldikpIHsK KwkJeWFmZnNfRXh0ZW5kZWRUYWdzIHRhZ3M7CisJCXlhZmZzX09iamVjdEhlYWRlciAqb2g7 CisJCV9fdTggKmJ1ZmZlciA9IHlhZmZzX0dldFRlbXBCdWZmZXIoZGV2LCBfX0xJTkVfXyk7 CisKKwkJb2ggPSAoeWFmZnNfT2JqZWN0SGVhZGVyICopYnVmZmVyOworCisJCXlhZmZzX1Jl YWRDaHVua1dpdGhUYWdzRnJvbU5BTkQoZGV2LCBvYmotPmhkckNodW5rLCBidWZmZXIsCisJ CQkJJnRhZ3MpOworCisJCXlhZmZzX1ZlcmlmeU9iamVjdEhlYWRlcihvYmosIG9oLCAmdGFn cywgMSk7CisKKwkJeWFmZnNfUmVsZWFzZVRlbXBCdWZmZXIoZGV2LCBidWZmZXIsIF9fTElO RV9fKTsKKwl9CisKKwkvKiBWZXJpZnkgaXQgaGFzIGEgcGFyZW50ICovCisJaWYgKG9iaiAm JiAhb2JqLT5mYWtlICYmCisJCQkoIW9iai0+cGFyZW50IHx8IG9iai0+cGFyZW50LT5teURl diAhPSBkZXYpKSB7CisJCVQoWUFGRlNfVFJBQ0VfVkVSSUZZLAorCQkJKFRTVFIoIk9iaiAl ZCBoYXMgcGFyZW50IHBvaW50ZXIgJXAgd2hpY2ggZG9lcyBub3QgbG9vayBsaWtlIGFuIG9i amVjdCJURU5EU1RSKSwKKwkJCW9iai0+b2JqZWN0SWQsIG9iai0+cGFyZW50KSk7CisJfQor CisJLyogVmVyaWZ5IHBhcmVudCBpcyBhIGRpcmVjdG9yeSAqLworCWlmIChvYmotPnBhcmVu dCAmJiBvYmotPnBhcmVudC0+dmFyaWFudFR5cGUgIT0gWUFGRlNfT0JKRUNUX1RZUEVfRElS RUNUT1JZKSB7CisJCVQoWUFGRlNfVFJBQ0VfVkVSSUZZLAorCQkJKFRTVFIoIk9iaiAlZCdz IHBhcmVudCBpcyBub3QgYSBkaXJlY3RvcnkgKHR5cGUgJWQpIlRFTkRTVFIpLAorCQkJb2Jq LT5vYmplY3RJZCwgb2JqLT5wYXJlbnQtPnZhcmlhbnRUeXBlKSk7CisJfQorCisJc3dpdGNo IChvYmotPnZhcmlhbnRUeXBlKSB7CisJY2FzZSBZQUZGU19PQkpFQ1RfVFlQRV9GSUxFOgor CQl5YWZmc19WZXJpZnlGaWxlKG9iaik7CisJCWJyZWFrOworCWNhc2UgWUFGRlNfT0JKRUNU X1RZUEVfU1lNTElOSzoKKwkJeWFmZnNfVmVyaWZ5U3ltbGluayhvYmopOworCQlicmVhazsK KwljYXNlIFlBRkZTX09CSkVDVF9UWVBFX0RJUkVDVE9SWToKKwkJeWFmZnNfVmVyaWZ5RGly ZWN0b3J5KG9iaik7CisJCWJyZWFrOworCWNhc2UgWUFGRlNfT0JKRUNUX1RZUEVfSEFSRExJ Tks6CisJCXlhZmZzX1ZlcmlmeUhhcmRMaW5rKG9iaik7CisJCWJyZWFrOworCWNhc2UgWUFG RlNfT0JKRUNUX1RZUEVfU1BFQ0lBTDoKKwkJeWFmZnNfVmVyaWZ5U3BlY2lhbChvYmopOwor CQlicmVhazsKKwljYXNlIFlBRkZTX09CSkVDVF9UWVBFX1VOS05PV046CisJZGVmYXVsdDoK KwkJVChZQUZGU19UUkFDRV9WRVJJRlksCisJCShUU1RSKCJPYmogJWQgaGFzIGlsbGVnYWx0 eXBlICVkIlRFTkRTVFIpLAorCQlvYmotPm9iamVjdElkLCBvYmotPnZhcmlhbnRUeXBlKSk7 CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgeWFmZnNfVmVyaWZ5T2JqZWN0cyh5 YWZmc19EZXZpY2UgKmRldikKK3sKKwl5YWZmc19PYmplY3QgKm9iajsKKwlpbnQgaTsKKwlz dHJ1Y3QgeWxpc3RfaGVhZCAqbGg7CisKKwlpZiAoeWFmZnNfU2tpcFZlcmlmaWNhdGlvbihk ZXYpKQorCQlyZXR1cm47CisKKwkvKiBJdGVyYXRlIHRocm91Z2ggdGhlIG9iamVjdHMgaW4g ZWFjaCBoYXNoIGVudHJ5ICovCisKKwlmb3IgKGkgPSAwOyBpIDwgIFlBRkZTX05PQkpFQ1Rf QlVDS0VUUzsgaSsrKSB7CisJCXlsaXN0X2Zvcl9lYWNoKGxoLCAmZGV2LT5vYmplY3RCdWNr ZXRbaV0ubGlzdCkgeworCQkJaWYgKGxoKSB7CisJCQkJb2JqID0geWxpc3RfZW50cnkobGgs IHlhZmZzX09iamVjdCwgaGFzaExpbmspOworCQkJCXlhZmZzX1ZlcmlmeU9iamVjdChvYmop OworCQkJfQorCQl9CisJfQorfQorCisKKy8qCisgKiAgU2ltcGxlIGhhc2ggZnVuY3Rpb24u IE5lZWRzIHRvIGhhdmUgYSByZWFzb25hYmxlIHNwcmVhZAorICovCisKK3N0YXRpYyBZX0lO TElORSBpbnQgeWFmZnNfSGFzaEZ1bmN0aW9uKGludCBuKQoreworCW4gPSBhYnMobik7CisJ cmV0dXJuIG4gJSBZQUZGU19OT0JKRUNUX0JVQ0tFVFM7Cit9CisKKy8qCisgKiBBY2Nlc3Mg ZnVuY3Rpb25zIHRvIHVzZWZ1bCBmYWtlIG9iamVjdHMuCisgKiBOb3RlIHRoYXQgcm9vdCBt aWdodCBoYXZlIGEgcHJlc2VuY2UgaW4gTkFORCBpZiBwZXJtaXNzaW9ucyBhcmUgc2V0Lgor ICovCisKK3lhZmZzX09iamVjdCAqeWFmZnNfUm9vdCh5YWZmc19EZXZpY2UgKmRldikKK3sK KwlyZXR1cm4gZGV2LT5yb290RGlyOworfQorCit5YWZmc19PYmplY3QgKnlhZmZzX0xvc3RO Rm91bmQoeWFmZnNfRGV2aWNlICpkZXYpCit7CisJcmV0dXJuIGRldi0+bG9zdE5Gb3VuZERp cjsKK30KKworCisvKgorICogIEVyYXNlZCBOQU5EIGNoZWNraW5nIGZ1bmN0aW9ucworICov CisKK2ludCB5YWZmc19DaGVja0ZGKF9fdTggKmJ1ZmZlciwgaW50IG5CeXRlcykKK3sKKwkv KiBIb3JyaWJsZSwgc2xvdyBpbXBsZW1lbnRhdGlvbiAqLworCXdoaWxlIChuQnl0ZXMtLSkg eworCQlpZiAoKmJ1ZmZlciAhPSAweEZGKQorCQkJcmV0dXJuIDA7CisJCWJ1ZmZlcisrOwor CX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCB5YWZmc19DaGVja0NodW5rRXJhc2Vk KHN0cnVjdCB5YWZmc19EZXZpY2VTdHJ1Y3QgKmRldiwKKwkJCQlpbnQgY2h1bmtJbk5BTkQp Cit7CisJaW50IHJldHZhbCA9IFlBRkZTX09LOworCV9fdTggKmRhdGEgPSB5YWZmc19HZXRU ZW1wQnVmZmVyKGRldiwgX19MSU5FX18pOworCXlhZmZzX0V4dGVuZGVkVGFncyB0YWdzOwor CWludCByZXN1bHQ7CisKKwlyZXN1bHQgPSB5YWZmc19SZWFkQ2h1bmtXaXRoVGFnc0Zyb21O QU5EKGRldiwgY2h1bmtJbk5BTkQsIGRhdGEsICZ0YWdzKTsKKworCWlmICh0YWdzLmVjY1Jl c3VsdCA+IFlBRkZTX0VDQ19SRVNVTFRfTk9fRVJST1IpCisJCXJldHZhbCA9IFlBRkZTX0ZB SUw7CisKKwlpZiAoIXlhZmZzX0NoZWNrRkYoZGF0YSwgZGV2LT5uRGF0YUJ5dGVzUGVyQ2h1 bmspIHx8IHRhZ3MuY2h1bmtVc2VkKSB7CisJCVQoWUFGRlNfVFJBQ0VfTkFOREFDQ0VTUywK KwkJICAoVFNUUigiQ2h1bmsgJWQgbm90IGVyYXNlZCIgVEVORFNUUiksIGNodW5rSW5OQU5E KSk7CisJCXJldHZhbCA9IFlBRkZTX0ZBSUw7CisJfQorCisJeWFmZnNfUmVsZWFzZVRlbXBC dWZmZXIoZGV2LCBkYXRhLCBfX0xJTkVfXyk7CisKKwlyZXR1cm4gcmV0dmFsOworCit9CisK K3N0YXRpYyBpbnQgeWFmZnNfV3JpdGVOZXdDaHVua1dpdGhUYWdzVG9OQU5EKHN0cnVjdCB5 YWZmc19EZXZpY2VTdHJ1Y3QgKmRldiwKKwkJCQkJY29uc3QgX191OCAqZGF0YSwKKwkJCQkJ eWFmZnNfRXh0ZW5kZWRUYWdzICp0YWdzLAorCQkJCQlpbnQgdXNlUmVzZXJ2ZSkKK3sKKwlp bnQgYXR0ZW1wdHMgPSAwOworCWludCB3cml0ZU9rID0gMDsKKwlpbnQgY2h1bms7CisKKwl5 YWZmc19JbnZhbGlkYXRlQ2hlY2twb2ludChkZXYpOworCisJZG8geworCQl5YWZmc19CbG9j a0luZm8gKmJpID0gMDsKKwkJaW50IGVyYXNlZE9rID0gMDsKKworCQljaHVuayA9IHlhZmZz X0FsbG9jYXRlQ2h1bmsoZGV2LCB1c2VSZXNlcnZlLCAmYmkpOworCQlpZiAoY2h1bmsgPCAw KSB7CisJCQkvKiBubyBzcGFjZSAqLworCQkJYnJlYWs7CisJCX0KKworCQkvKiBGaXJzdCBj aGVjayB0aGlzIGNodW5rIGlzIGVyYXNlZCwgaWYgaXQgbmVlZHMKKwkJICogY2hlY2tpbmcu ICBUaGUgY2hlY2tpbmcgcG9saWN5ICh1bmxlc3MgZm9yY2VkCisJCSAqIGFsd2F5cyBvbikg aXMgYXMgZm9sbG93czoKKwkJICoKKwkJICogQ2hlY2sgdGhlIGZpcnN0IHBhZ2Ugd2UgdHJ5 IHRvIHdyaXRlIGluIGEgYmxvY2suCisJCSAqIElmIHRoZSBjaGVjayBwYXNzZXMgdGhlbiB3 ZSBkb24ndCBuZWVkIHRvIGNoZWNrIGFueQorCQkgKiBtb3JlLglJZiB0aGUgY2hlY2sgZmFp bHMsIHdlIGNoZWNrIGFnYWluLi4uCisJCSAqIElmIHRoZSBibG9jayBoYXMgYmVlbiBlcmFz ZWQsIHdlIGRvbid0IG5lZWQgdG8gY2hlY2suCisJCSAqCisJCSAqIEhvd2V2ZXIsIGlmIHRo ZSBibG9jayBoYXMgYmVlbiBwcmlvcml0aXNlZCBmb3IgZ2MsCisJCSAqIHRoZW4gd2UgdGhp bmsgdGhlcmUgbWlnaHQgYmUgc29tZXRoaW5nIG9kZCBhYm91dAorCQkgKiB0aGlzIGJsb2Nr IGFuZCBzdG9wIHVzaW5nIGl0LgorCQkgKgorCQkgKiBSYXRpb25hbGU6IFdlIHNob3VsZCBv bmx5IGV2ZXIgc2VlIGNodW5rcyB0aGF0IGhhdmUKKwkJICogbm90IGJlZW4gZXJhc2VkIGlm IHRoZXJlIHdhcyBhIHBhcnRpYWxseSB3cml0dGVuCisJCSAqIGNodW5rIGR1ZSB0byBwb3dl ciBsb3NzLiAgVGhpcyBjaGVja2luZyBwb2xpY3kgc2hvdWxkCisJCSAqIGNhdGNoIHRoYXQg Y2FzZSB3aXRoIHZlcnkgZmV3IGNoZWNrcyBhbmQgdGh1cyBzYXZlIGEKKwkJICogbG90IG9m IGNoZWNrcyB0aGF0IGFyZSBtb3N0IGxpa2VseSBub3QgbmVlZGVkLgorCQkgKi8KKwkJaWYg KGJpLT5nY1ByaW9yaXRpc2UpIHsKKwkJCXlhZmZzX0RlbGV0ZUNodW5rKGRldiwgY2h1bmss IDEsIF9fTElORV9fKTsKKwkJCS8qIHRyeSBhbm90aGVyIGNodW5rICovCisJCQljb250aW51 ZTsKKwkJfQorCisJCS8qIGxldCdzIGdpdmUgaXQgYSB0cnkgKi8KKwkJYXR0ZW1wdHMrKzsK KworI2lmZGVmIENPTkZJR19ZQUZGU19BTFdBWVNfQ0hFQ0tfQ0hVTktfRVJBU0VECisJCWJp LT5za2lwRXJhc2VkQ2hlY2sgPSAwOworI2VuZGlmCisJCWlmICghYmktPnNraXBFcmFzZWRD aGVjaykgeworCQkJZXJhc2VkT2sgPSB5YWZmc19DaGVja0NodW5rRXJhc2VkKGRldiwgY2h1 bmspOworCQkJaWYgKGVyYXNlZE9rICE9IFlBRkZTX09LKSB7CisJCQkJVChZQUZGU19UUkFD RV9FUlJPUiwKKwkJCQkoVFNUUigiKio+PiB5YWZmcyBjaHVuayAlZCB3YXMgbm90IGVyYXNl ZCIKKwkJCQlURU5EU1RSKSwgY2h1bmspKTsKKworCQkJCS8qIHRyeSBhbm90aGVyIGNodW5r ICovCisJCQkJY29udGludWU7CisJCQl9CisJCQliaS0+c2tpcEVyYXNlZENoZWNrID0gMTsK KwkJfQorCisJCXdyaXRlT2sgPSB5YWZmc19Xcml0ZUNodW5rV2l0aFRhZ3NUb05BTkQoZGV2 LCBjaHVuaywKKwkJCQlkYXRhLCB0YWdzKTsKKwkJaWYgKHdyaXRlT2sgIT0gWUFGRlNfT0sp IHsKKwkJCXlhZmZzX0hhbmRsZVdyaXRlQ2h1bmtFcnJvcihkZXYsIGNodW5rLCBlcmFzZWRP ayk7CisJCQkvKiB0cnkgYW5vdGhlciBjaHVuayAqLworCQkJY29udGludWU7CisJCX0KKwor CQkvKiBDb3B5IHRoZSBkYXRhIGludG8gdGhlIHJvYnVzdGlmaWNhdGlvbiBidWZmZXIgKi8K KwkJeWFmZnNfSGFuZGxlV3JpdGVDaHVua09rKGRldiwgY2h1bmssIGRhdGEsIHRhZ3MpOwor CisJfSB3aGlsZSAod3JpdGVPayAhPSBZQUZGU19PSyAmJgorCQkoeWFmZnNfd3JfYXR0ZW1w dHMgPD0gMCB8fCBhdHRlbXB0cyA8PSB5YWZmc193cl9hdHRlbXB0cykpOworCisJaWYgKCF3 cml0ZU9rKQorCQljaHVuayA9IC0xOworCisJaWYgKGF0dGVtcHRzID4gMSkgeworCQlUKFlB RkZTX1RSQUNFX0VSUk9SLAorCQkJKFRTVFIoIioqPj4geWFmZnMgd3JpdGUgcmVxdWlyZWQg JWQgYXR0ZW1wdHMiIFRFTkRTVFIpLAorCQkJYXR0ZW1wdHMpKTsKKworCQlkZXYtPm5SZXRy aWVkV3JpdGVzICs9IChhdHRlbXB0cyAtIDEpOworCX0KKworCXJldHVybiBjaHVuazsKK30K KworLyoKKyAqIEJsb2NrIHJldGlyaW5nIGZvciBoYW5kbGluZyBhIGJyb2tlbiBibG9jay4K KyAqLworCitzdGF0aWMgdm9pZCB5YWZmc19SZXRpcmVCbG9jayh5YWZmc19EZXZpY2UgKmRl diwgaW50IGJsb2NrSW5OQU5EKQoreworCXlhZmZzX0Jsb2NrSW5mbyAqYmkgPSB5YWZmc19H ZXRCbG9ja0luZm8oZGV2LCBibG9ja0luTkFORCk7CisKKwl5YWZmc19JbnZhbGlkYXRlQ2hl Y2twb2ludChkZXYpOworCisJaWYgKHlhZmZzX01hcmtCbG9ja0JhZChkZXYsIGJsb2NrSW5O QU5EKSAhPSBZQUZGU19PSykgeworCQlpZiAoeWFmZnNfRXJhc2VCbG9ja0luTkFORChkZXYs IGJsb2NrSW5OQU5EKSAhPSBZQUZGU19PSykgeworCQkJVChZQUZGU19UUkFDRV9BTFdBWVMs IChUU1RSKAorCQkJCSJ5YWZmczogRmFpbGVkIHRvIG1hcmsgYmFkIGFuZCBlcmFzZSBibG9j ayAlZCIKKwkJCQlURU5EU1RSKSwgYmxvY2tJbk5BTkQpKTsKKwkJfSBlbHNlIHsKKwkJCXlh ZmZzX0V4dGVuZGVkVGFncyB0YWdzOworCQkJaW50IGNodW5rSWQgPSBibG9ja0luTkFORCAq IGRldi0+bkNodW5rc1BlckJsb2NrOworCisJCQlfX3U4ICpidWZmZXIgPSB5YWZmc19HZXRU ZW1wQnVmZmVyKGRldiwgX19MSU5FX18pOworCisJCQltZW1zZXQoYnVmZmVyLCAweGZmLCBk ZXYtPm5EYXRhQnl0ZXNQZXJDaHVuayk7CisJCQl5YWZmc19Jbml0aWFsaXNlVGFncygmdGFn cyk7CisJCQl0YWdzLnNlcXVlbmNlTnVtYmVyID0gWUFGRlNfU0VRVUVOQ0VfQkFEX0JMT0NL OworCQkJaWYgKGRldi0+d3JpdGVDaHVua1dpdGhUYWdzVG9OQU5EKGRldiwgY2h1bmtJZCAt CisJCQkJZGV2LT5jaHVua09mZnNldCwgYnVmZmVyLCAmdGFncykgIT0gWUFGRlNfT0spCisJ CQkJVChZQUZGU19UUkFDRV9BTFdBWVMsIChUU1RSKCJ5YWZmczogRmFpbGVkIHRvICIKKwkJ CQkJVENPTlQoIndyaXRlIGJhZCBibG9jayBtYXJrZXIgdG8gYmxvY2sgJWQiKQorCQkJCQlU RU5EU1RSKSwgYmxvY2tJbk5BTkQpKTsKKworCQkJeWFmZnNfUmVsZWFzZVRlbXBCdWZmZXIo ZGV2LCBidWZmZXIsIF9fTElORV9fKTsKKwkJfQorCX0KKworCWJpLT5ibG9ja1N0YXRlID0g WUFGRlNfQkxPQ0tfU1RBVEVfREVBRDsKKwliaS0+Z2NQcmlvcml0aXNlID0gMDsKKwliaS0+ bmVlZHNSZXRpcmluZyA9IDA7CisKKwlkZXYtPm5SZXRpcmVkQmxvY2tzKys7Cit9CisKKy8q CisgKiBGdW5jdGlvbnMgZm9yIHJvYnVzdGlzaXppbmcgVE9ETworICoKKyAqLworCitzdGF0 aWMgdm9pZCB5YWZmc19IYW5kbGVXcml0ZUNodW5rT2soeWFmZnNfRGV2aWNlICpkZXYsIGlu dCBjaHVua0luTkFORCwKKwkJCQljb25zdCBfX3U4ICpkYXRhLAorCQkJCWNvbnN0IHlhZmZz X0V4dGVuZGVkVGFncyAqdGFncykKK3sKK30KKworc3RhdGljIHZvaWQgeWFmZnNfSGFuZGxl VXBkYXRlQ2h1bmsoeWFmZnNfRGV2aWNlICpkZXYsIGludCBjaHVua0luTkFORCwKKwkJCQlj b25zdCB5YWZmc19FeHRlbmRlZFRhZ3MgKnRhZ3MpCit7Cit9CisKK3ZvaWQgeWFmZnNfSGFu ZGxlQ2h1bmtFcnJvcih5YWZmc19EZXZpY2UgKmRldiwgeWFmZnNfQmxvY2tJbmZvICpiaSkK K3sKKwlpZiAoIWJpLT5nY1ByaW9yaXRpc2UpIHsKKwkJYmktPmdjUHJpb3JpdGlzZSA9IDE7 CisJCWRldi0+aGFzUGVuZGluZ1ByaW9yaXRpc2VkR0NzID0gMTsKKwkJYmktPmNodW5rRXJy b3JTdHJpa2VzKys7CisKKwkJaWYgKGJpLT5jaHVua0Vycm9yU3RyaWtlcyA+IDMpIHsKKwkJ CWJpLT5uZWVkc1JldGlyaW5nID0gMTsgLyogVG9vIG1hbnkgc3Rpa2VzLCBzbyByZXRpcmUg dGhpcyAqLworCQkJVChZQUZGU19UUkFDRV9BTFdBWVMsIChUU1RSKCJ5YWZmczogQmxvY2sg c3RydWNrIG91dCIgVEVORFNUUikpKTsKKworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCB5 YWZmc19IYW5kbGVXcml0ZUNodW5rRXJyb3IoeWFmZnNfRGV2aWNlICpkZXYsIGludCBjaHVu a0luTkFORCwKKwkJaW50IGVyYXNlZE9rKQoreworCWludCBibG9ja0luTkFORCA9IGNodW5r SW5OQU5EIC8gZGV2LT5uQ2h1bmtzUGVyQmxvY2s7CisJeWFmZnNfQmxvY2tJbmZvICpiaSA9 IHlhZmZzX0dldEJsb2NrSW5mbyhkZXYsIGJsb2NrSW5OQU5EKTsKKworCXlhZmZzX0hhbmRs ZUNodW5rRXJyb3IoZGV2LCBiaSk7CisKKwlpZiAoZXJhc2VkT2spIHsKKwkJLyogV2FzIGFu IGFjdHVhbCB3cml0ZSBmYWlsdXJlLCBzbyBtYXJrIHRoZSBibG9jayBmb3IgcmV0aXJlbWVu dCAgKi8KKwkJYmktPm5lZWRzUmV0aXJpbmcgPSAxOworCQlUKFlBRkZTX1RSQUNFX0VSUk9S IHwgWUFGRlNfVFJBQ0VfQkFEX0JMT0NLUywKKwkJICAoVFNUUigiKio+PiBCbG9jayAlZCBu ZWVkcyByZXRpcmluZyIgVEVORFNUUiksIGJsb2NrSW5OQU5EKSk7CisJfQorCisJLyogRGVs ZXRlIHRoZSBjaHVuayAqLworCXlhZmZzX0RlbGV0ZUNodW5rKGRldiwgY2h1bmtJbk5BTkQs IDEsIF9fTElORV9fKTsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0gTmFtZSBoYW5kbGlu ZyBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIF9fdTE2IHlhZmZzX0NhbGNO YW1lU3VtKGNvbnN0IFlDSEFSICpuYW1lKQoreworCV9fdTE2IHN1bSA9IDA7CisJX191MTYg aSA9IDE7CisKKwljb25zdCBZVUNIQVIgKmJuYW1lID0gKGNvbnN0IFlVQ0hBUiAqKSBuYW1l OworCWlmIChibmFtZSkgeworCQl3aGlsZSAoKCpibmFtZSkgJiYgKGkgPCAoWUFGRlNfTUFY X05BTUVfTEVOR1RILzIpKSkgeworCisjaWZkZWYgQ09ORklHX1lBRkZTX0NBU0VfSU5TRU5T SVRJVkUKKwkJCXN1bSArPSB5YWZmc190b3VwcGVyKCpibmFtZSkgKiBpOworI2Vsc2UKKwkJ CXN1bSArPSAoKmJuYW1lKSAqIGk7CisjZW5kaWYKKwkJCWkrKzsKKwkJCWJuYW1lKys7CisJ CX0KKwl9CisJcmV0dXJuIHN1bTsKK30KKworc3RhdGljIHZvaWQgeWFmZnNfU2V0T2JqZWN0 TmFtZSh5YWZmc19PYmplY3QgKm9iaiwgY29uc3QgWUNIQVIgKm5hbWUpCit7CisjaWZkZWYg Q09ORklHX1lBRkZTX1NIT1JUX05BTUVTX0lOX1JBTQorCW1lbXNldChvYmotPnNob3J0TmFt ZSwgMCwgc2l6ZW9mKFlDSEFSKSAqIChZQUZGU19TSE9SVF9OQU1FX0xFTkdUSCsxKSk7CisJ aWYgKG5hbWUgJiYgeWFmZnNfc3RybGVuKG5hbWUpIDw9IFlBRkZTX1NIT1JUX05BTUVfTEVO R1RIKQorCQl5YWZmc19zdHJjcHkob2JqLT5zaG9ydE5hbWUsIG5hbWUpOworCWVsc2UKKwkJ b2JqLT5zaG9ydE5hbWVbMF0gPSBfWSgnXDAnKTsKKyNlbmRpZgorCW9iai0+c3VtID0geWFm ZnNfQ2FsY05hbWVTdW0obmFtZSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0gVE5P REVTIC0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogTGlzdCBvZiBzcGFyZSB0bm9kZXMKKyAq IFRoZSBsaXN0IGlzIGhvb2tlZCB0b2dldGhlciB1c2luZyB0aGUgZmlyc3QgcG9pbnRlcgor ICogaW4gdGhlIHRub2RlLgorICovCisKKy8qIHlhZmZzX0NyZWF0ZVRub2RlcyBjcmVhdGVz IGEgYnVuY2ggbW9yZSB0bm9kZXMgYW5kCisgKiBhZGRzIHRoZW0gdG8gdGhlIHRub2RlIGZy ZWUgbGlzdC4KKyAqIERvbid0IHVzZSB0aGlzIGZ1bmN0aW9uIGRpcmVjdGx5CisgKi8KKwor c3RhdGljIGludCB5YWZmc19DcmVhdGVUbm9kZXMoeWFmZnNfRGV2aWNlICpkZXYsIGludCBu VG5vZGVzKQoreworCWludCBpOworCWludCB0bm9kZVNpemU7CisJeWFmZnNfVG5vZGUgKm5l d1Rub2RlczsKKwlfX3U4ICptZW07CisJeWFmZnNfVG5vZGUgKmN1cnI7CisJeWFmZnNfVG5v ZGUgKm5leHQ7CisJeWFmZnNfVG5vZGVMaXN0ICp0bmw7CisKKwlpZiAoblRub2RlcyA8IDEp CisJCXJldHVybiBZQUZGU19PSzsKKworCS8qIENhbGN1bGF0ZSB0aGUgdG5vZGUgc2l6ZSBp biBieXRlcyBmb3IgdmFyaWFibGUgd2lkdGggdG5vZGUgc3VwcG9ydC4KKwkgKiBNdXN0IGJl IGEgbXVsdGlwbGUgb2YgMzItYml0cyAgKi8KKwl0bm9kZVNpemUgPSAoZGV2LT50bm9kZVdp ZHRoICogWUFGRlNfTlROT0RFU19MRVZFTDApLzg7CisKKwlpZiAodG5vZGVTaXplIDwgc2l6 ZW9mKHlhZmZzX1Rub2RlKSkKKwkJdG5vZGVTaXplID0gc2l6ZW9mKHlhZmZzX1Rub2RlKTsK KworCS8qIG1ha2UgdGhlc2UgdGhpbmdzICovCisKKwluZXdUbm9kZXMgPSBZTUFMTE9DKG5U bm9kZXMgKiB0bm9kZVNpemUpOworCW1lbSA9IChfX3U4ICopbmV3VG5vZGVzOworCisJaWYg KCFuZXdUbm9kZXMpIHsKKwkJVChZQUZGU19UUkFDRV9FUlJPUiwKKwkJCShUU1RSKCJ5YWZm czogQ291bGQgbm90IGFsbG9jYXRlIFRub2RlcyIgVEVORFNUUikpKTsKKwkJcmV0dXJuIFlB RkZTX0ZBSUw7CisJfQorCisJLyogSG9vayB0aGVtIGludG8gdGhlIGZyZWUgbGlzdCAqLwor I2lmIDAKKwlmb3IgKGkgPSAwOyBpIDwgblRub2RlcyAtIDE7IGkrKykgeworCQluZXdUbm9k ZXNbaV0uaW50ZXJuYWxbMF0gPSAmbmV3VG5vZGVzW2kgKyAxXTsKKyNpZmRlZiBDT05GSUdf WUFGRlNfVE5PREVfTElTVF9ERUJVRworCQluZXdUbm9kZXNbaV0uaW50ZXJuYWxbWUFGRlNf TlROT0RFU19JTlRFUk5BTF0gPSAodm9pZCAqKTE7CisjZW5kaWYKKwl9CisKKwluZXdUbm9k ZXNbblRub2RlcyAtIDFdLmludGVybmFsWzBdID0gZGV2LT5mcmVlVG5vZGVzOworI2lmZGVm IENPTkZJR19ZQUZGU19UTk9ERV9MSVNUX0RFQlVHCisJbmV3VG5vZGVzW25Ubm9kZXMgLSAx XS5pbnRlcm5hbFtZQUZGU19OVE5PREVTX0lOVEVSTkFMXSA9ICh2b2lkICopMTsKKyNlbmRp ZgorCWRldi0+ZnJlZVRub2RlcyA9IG5ld1Rub2RlczsKKyNlbHNlCisJLyogTmV3IGhvb2t1 cCBmb3Igd2lkZSB0bm9kZXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgblRub2RlcyAtIDE7IGkr KykgeworCQljdXJyID0gKHlhZmZzX1Rub2RlICopICZtZW1baSAqIHRub2RlU2l6ZV07CisJ CW5leHQgPSAoeWFmZnNfVG5vZGUgKikgJm1lbVsoaSsxKSAqIHRub2RlU2l6ZV07CisJCWN1 cnItPmludGVybmFsWzBdID0gbmV4dDsKKwl9CisKKwljdXJyID0gKHlhZmZzX1Rub2RlICop ICZtZW1bKG5Ubm9kZXMgLSAxKSAqIHRub2RlU2l6ZV07CisJY3Vyci0+aW50ZXJuYWxbMF0g PSBkZXYtPmZyZWVUbm9kZXM7CisJZGV2LT5mcmVlVG5vZGVzID0gKHlhZmZzX1Rub2RlICop bWVtOworCisjZW5kaWYKKworCisJZGV2LT5uRnJlZVRub2RlcyArPSBuVG5vZGVzOworCWRl di0+blRub2Rlc0NyZWF0ZWQgKz0gblRub2RlczsKKworCS8qIE5vdyBhZGQgdGhpcyBidW5j aCBvZiB0bm9kZXMgdG8gYSBsaXN0IGZvciBmcmVlaW5nIHVwLgorCSAqIE5CIElmIHdlIGNh bid0IGFkZCB0aGlzIHRvIHRoZSBtYW5hZ2VtZW50IGxpc3QgaXQgaXNuJ3QgZmF0YWwKKwkg KiBidXQgaXQganVzdCBtZWFucyB3ZSBjYW4ndCBmcmVlIHRoaXMgYnVuY2ggb2YgdG5vZGVz IGxhdGVyLgorCSAqLworCisJdG5sID0gWU1BTExPQyhzaXplb2YoeWFmZnNfVG5vZGVMaXN0 KSk7CisJaWYgKCF0bmwpIHsKKwkJVChZQUZGU19UUkFDRV9FUlJPUiwKKwkJICAoVFNUUgor CQkgICAoInlhZmZzOiBDb3VsZCBub3QgYWRkIHRub2RlcyB0byBtYW5hZ2VtZW50IGxpc3Qi IFRFTkRTVFIpKSk7CisJCSAgIHJldHVybiBZQUZGU19GQUlMOworCX0gZWxzZSB7CisJCXRu bC0+dG5vZGVzID0gbmV3VG5vZGVzOworCQl0bmwtPm5leHQgPSBkZXYtPmFsbG9jYXRlZFRu b2RlTGlzdDsKKwkJZGV2LT5hbGxvY2F0ZWRUbm9kZUxpc3QgPSB0bmw7CisJfQorCisJVChZ QUZGU19UUkFDRV9BTExPQ0FURSwgKFRTVFIoInlhZmZzOiBUbm9kZXMgYWRkZWQiIFRFTkRT VFIpKSk7CisKKwlyZXR1cm4gWUFGRlNfT0s7Cit9CisKKy8qIEdldFRub2RlIGdldHMgdXMg YSBjbGVhbiB0bm9kZS4gVHJpZXMgdG8gbWFrZSBhbGxvY2F0ZSBtb3JlIGlmIHdlIHJ1biBv dXQgKi8KKworc3RhdGljIHlhZmZzX1Rub2RlICp5YWZmc19HZXRUbm9kZVJhdyh5YWZmc19E ZXZpY2UgKmRldikKK3sKKwl5YWZmc19Ubm9kZSAqdG4gPSBOVUxMOworCisJLyogSWYgdGhl cmUgYXJlIG5vbmUgbGVmdCBtYWtlIG1vcmUgKi8KKwlpZiAoIWRldi0+ZnJlZVRub2RlcykK KwkJeWFmZnNfQ3JlYXRlVG5vZGVzKGRldiwgWUFGRlNfQUxMT0NBVElPTl9OVE5PREVTKTsK KworCWlmIChkZXYtPmZyZWVUbm9kZXMpIHsKKwkJdG4gPSBkZXYtPmZyZWVUbm9kZXM7Cisj aWZkZWYgQ09ORklHX1lBRkZTX1ROT0RFX0xJU1RfREVCVUcKKwkJaWYgKHRuLT5pbnRlcm5h bFtZQUZGU19OVE5PREVTX0lOVEVSTkFMXSAhPSAodm9pZCAqKTEpIHsKKwkJCS8qIEhvb3N0 ZXJtYW4sIHRoaXMgdGhpbmcgbG9va3MgbGlrZSBpdCBpc24ndCBpbiB0aGUgbGlzdCAqLwor CQkJVChZQUZGU19UUkFDRV9BTFdBWVMsCisJCQkgIChUU1RSKCJ5YWZmczogVG5vZGUgbGlz dCBidWcgMSIgVEVORFNUUikpKTsKKwkJfQorI2VuZGlmCisJCWRldi0+ZnJlZVRub2RlcyA9 IGRldi0+ZnJlZVRub2Rlcy0+aW50ZXJuYWxbMF07CisJCWRldi0+bkZyZWVUbm9kZXMtLTsK Kwl9CisKKwlkZXYtPm5DaGVja3BvaW50QmxvY2tzUmVxdWlyZWQgPSAwOyAvKiBmb3JjZSBy ZWNhbGN1bGF0aW9uKi8KKworCXJldHVybiB0bjsKK30KKworc3RhdGljIHlhZmZzX1Rub2Rl ICp5YWZmc19HZXRUbm9kZSh5YWZmc19EZXZpY2UgKmRldikKK3sKKwl5YWZmc19Ubm9kZSAq dG4gPSB5YWZmc19HZXRUbm9kZVJhdyhkZXYpOworCWludCB0bm9kZVNpemUgPSAoZGV2LT50 bm9kZVdpZHRoICogWUFGRlNfTlROT0RFU19MRVZFTDApLzg7CisKKwlpZiAodG5vZGVTaXpl IDwgc2l6ZW9mKHlhZmZzX1Rub2RlKSkKKwkJdG5vZGVTaXplID0gc2l6ZW9mKHlhZmZzX1Ru b2RlKTsKKworCWlmICh0bikKKwkJbWVtc2V0KHRuLCAwLCB0bm9kZVNpemUpOworCisJcmV0 dXJuIHRuOworfQorCisvKiBGcmVlVG5vZGUgZnJlZXMgdXAgYSB0bm9kZSBhbmQgcHV0cyBp dCBiYWNrIG9uIHRoZSBmcmVlIGxpc3QgKi8KK3N0YXRpYyB2b2lkIHlhZmZzX0ZyZWVUbm9k ZSh5YWZmc19EZXZpY2UgKmRldiwgeWFmZnNfVG5vZGUgKnRuKQoreworCWlmICh0bikgewor I2lmZGVmIENPTkZJR19ZQUZGU19UTk9ERV9MSVNUX0RFQlVHCisJCWlmICh0bi0+aW50ZXJu YWxbWUFGRlNfTlROT0RFU19JTlRFUk5BTF0gIT0gMCkgeworCQkJLyogSG9vc3Rlcm1hbiwg dGhpcyB0aGluZyBsb29rcyBsaWtlIGl0IGlzIGFscmVhZHkgaW4gdGhlIGxpc3QgKi8KKwkJ CVQoWUFGRlNfVFJBQ0VfQUxXQVlTLAorCQkJICAoVFNUUigieWFmZnM6IFRub2RlIGxpc3Qg YnVnIDIiIFRFTkRTVFIpKSk7CisJCX0KKwkJdG4tPmludGVybmFsW1lBRkZTX05UTk9ERVNf SU5URVJOQUxdID0gKHZvaWQgKikxOworI2VuZGlmCisJCXRuLT5pbnRlcm5hbFswXSA9IGRl di0+ZnJlZVRub2RlczsKKwkJZGV2LT5mcmVlVG5vZGVzID0gdG47CisJCWRldi0+bkZyZWVU bm9kZXMrKzsKKwl9CisJZGV2LT5uQ2hlY2twb2ludEJsb2Nrc1JlcXVpcmVkID0gMDsgLyog Zm9yY2UgcmVjYWxjdWxhdGlvbiovCit9CisKK3N0YXRpYyB2b2lkIHlhZmZzX0RlaW5pdGlh bGlzZVRub2Rlcyh5YWZmc19EZXZpY2UgKmRldikKK3sKKwkvKiBGcmVlIHRoZSBsaXN0IG9m IGFsbG9jYXRlZCB0bm9kZXMgKi8KKwl5YWZmc19Ubm9kZUxpc3QgKnRtcDsKKworCXdoaWxl IChkZXYtPmFsbG9jYXRlZFRub2RlTGlzdCkgeworCQl0bXAgPSBkZXYtPmFsbG9jYXRlZFRu b2RlTGlzdC0+bmV4dDsKKworCQlZRlJFRShkZXYtPmFsbG9jYXRlZFRub2RlTGlzdC0+dG5v ZGVzKTsKKwkJWUZSRUUoZGV2LT5hbGxvY2F0ZWRUbm9kZUxpc3QpOworCQlkZXYtPmFsbG9j YXRlZFRub2RlTGlzdCA9IHRtcDsKKworCX0KKworCWRldi0+ZnJlZVRub2RlcyA9IE5VTEw7 CisJZGV2LT5uRnJlZVRub2RlcyA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIHlhZmZzX0luaXRp YWxpc2VUbm9kZXMoeWFmZnNfRGV2aWNlICpkZXYpCit7CisJZGV2LT5hbGxvY2F0ZWRUbm9k ZUxpc3QgPSBOVUxMOworCWRldi0+ZnJlZVRub2RlcyA9IE5VTEw7CisJZGV2LT5uRnJlZVRu b2RlcyA9IDA7CisJZGV2LT5uVG5vZGVzQ3JlYXRlZCA9IDA7Cit9CisKKwordm9pZCB5YWZm c19QdXRMZXZlbDBUbm9kZSh5YWZmc19EZXZpY2UgKmRldiwgeWFmZnNfVG5vZGUgKnRuLCB1 bnNpZ25lZCBwb3MsCisJCXVuc2lnbmVkIHZhbCkKK3sKKwlfX3UzMiAqbWFwID0gKF9fdTMy ICopdG47CisJX191MzIgYml0SW5NYXA7CisJX191MzIgYml0SW5Xb3JkOworCV9fdTMyIHdv cmRJbk1hcDsKKwlfX3UzMiBtYXNrOworCisJcG9zICY9IFlBRkZTX1ROT0RFU19MRVZFTDBf TUFTSzsKKwl2YWwgPj49IGRldi0+Y2h1bmtHcm91cEJpdHM7CisKKwliaXRJbk1hcCA9IHBv cyAqIGRldi0+dG5vZGVXaWR0aDsKKwl3b3JkSW5NYXAgPSBiaXRJbk1hcCAvIDMyOworCWJp dEluV29yZCA9IGJpdEluTWFwICYgKDMyIC0gMSk7CisKKwltYXNrID0gZGV2LT50bm9kZU1h c2sgPDwgYml0SW5Xb3JkOworCisJbWFwW3dvcmRJbk1hcF0gJj0gfm1hc2s7CisJbWFwW3dv cmRJbk1hcF0gfD0gKG1hc2sgJiAodmFsIDw8IGJpdEluV29yZCkpOworCisJaWYgKGRldi0+ dG5vZGVXaWR0aCA+ICgzMiAtIGJpdEluV29yZCkpIHsKKwkJYml0SW5Xb3JkID0gKDMyIC0g Yml0SW5Xb3JkKTsKKwkJd29yZEluTWFwKys7OworCQltYXNrID0gZGV2LT50bm9kZU1hc2sg Pj4gKC8qZGV2LT50bm9kZVdpZHRoIC0qLyBiaXRJbldvcmQpOworCQltYXBbd29yZEluTWFw XSAmPSB+bWFzazsKKwkJbWFwW3dvcmRJbk1hcF0gfD0gKG1hc2sgJiAodmFsID4+IGJpdElu V29yZCkpOworCX0KK30KKworc3RhdGljIF9fdTMyIHlhZmZzX0dldENodW5rR3JvdXBCYXNl KHlhZmZzX0RldmljZSAqZGV2LCB5YWZmc19Ubm9kZSAqdG4sCisJCXVuc2lnbmVkIHBvcykK K3sKKwlfX3UzMiAqbWFwID0gKF9fdTMyICopdG47CisJX191MzIgYml0SW5NYXA7CisJX191 MzIgYml0SW5Xb3JkOworCV9fdTMyIHdvcmRJbk1hcDsKKwlfX3UzMiB2YWw7CisKKwlwb3Mg Jj0gWUFGRlNfVE5PREVTX0xFVkVMMF9NQVNLOworCisJYml0SW5NYXAgPSBwb3MgKiBkZXYt PnRub2RlV2lkdGg7CisJd29yZEluTWFwID0gYml0SW5NYXAgLyAzMjsKKwliaXRJbldvcmQg PSBiaXRJbk1hcCAmICgzMiAtIDEpOworCisJdmFsID0gbWFwW3dvcmRJbk1hcF0gPj4gYml0 SW5Xb3JkOworCisJaWYJKGRldi0+dG5vZGVXaWR0aCA+ICgzMiAtIGJpdEluV29yZCkpIHsK KwkJYml0SW5Xb3JkID0gKDMyIC0gYml0SW5Xb3JkKTsKKwkJd29yZEluTWFwKys7OworCQl2 YWwgfD0gKG1hcFt3b3JkSW5NYXBdIDw8IGJpdEluV29yZCk7CisJfQorCisJdmFsICY9IGRl di0+dG5vZGVNYXNrOworCXZhbCA8PD0gZGV2LT5jaHVua0dyb3VwQml0czsKKworCXJldHVy biB2YWw7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0gRW5kIG9mIGluZGl2aWR1YWwg dG5vZGUgbWFuaXB1bGF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogLS0tLS0tLS0t RnVuY3Rpb25zIHRvIG1hbmlwdWxhdGUgdGhlIGxvb2stdXAgdHJlZSAobWFkZSB1cCBvZiB0 bm9kZXMpIC0tLS0tLQorICogVGhlIGxvb2sgdXAgdHJlZSBpcyByZXByZXNlbnRlZCBieSB0 aGUgdG9wIHRub2RlIGFuZCB0aGUgbnVtYmVyIG9mIHRvcExldmVsCisgKiBpbiB0aGUgdHJl ZS4gMCBtZWFucyBvbmx5IHRoZSBsZXZlbCAwIHRub2RlIGlzIGluIHRoZSB0cmVlLgorICov CisKKy8qIEZpbmRMZXZlbDBUbm9kZSBmaW5kcyB0aGUgbGV2ZWwgMCB0bm9kZSwgaWYgb25l IGV4aXN0cy4gKi8KK3N0YXRpYyB5YWZmc19Ubm9kZSAqeWFmZnNfRmluZExldmVsMFRub2Rl KHlhZmZzX0RldmljZSAqZGV2LAorCQkJCQl5YWZmc19GaWxlU3RydWN0dXJlICpmU3RydWN0 LAorCQkJCQlfX3UzMiBjaHVua0lkKQoreworCXlhZmZzX1Rub2RlICp0biA9IGZTdHJ1Y3Qt PnRvcDsKKwlfX3UzMiBpOworCWludCByZXF1aXJlZFRhbGxuZXNzOworCWludCBsZXZlbCA9 IGZTdHJ1Y3QtPnRvcExldmVsOworCisJLyogQ2hlY2sgc2FuZSBsZXZlbCBhbmQgY2h1bmsg SWQgKi8KKwlpZiAobGV2ZWwgPCAwIHx8IGxldmVsID4gWUFGRlNfVE5PREVTX01BWF9MRVZF TCkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoY2h1bmtJZCA+IFlBRkZTX01BWF9DSFVOS19J RCkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBGaXJzdCBjaGVjayB3ZSdyZSB0YWxsIGVub3Vn aCAoaWUgZW5vdWdoIHRvcExldmVsKSAqLworCisJaSA9IGNodW5rSWQgPj4gWUFGRlNfVE5P REVTX0xFVkVMMF9CSVRTOworCXJlcXVpcmVkVGFsbG5lc3MgPSAwOworCXdoaWxlIChpKSB7 CisJCWkgPj49IFlBRkZTX1ROT0RFU19JTlRFUk5BTF9CSVRTOworCQlyZXF1aXJlZFRhbGxu ZXNzKys7CisJfQorCisJaWYgKHJlcXVpcmVkVGFsbG5lc3MgPiBmU3RydWN0LT50b3BMZXZl bCkKKwkJcmV0dXJuIE5VTEw7IC8qIE5vdCB0YWxsIGVub3VnaCwgc28gd2UgY2FuJ3QgZmlu ZCBpdCAqLworCisJLyogVHJhdmVyc2UgZG93biB0byBsZXZlbCAwICovCisJd2hpbGUgKGxl dmVsID4gMCAmJiB0bikgeworCQl0biA9IHRuLT5pbnRlcm5hbFsoY2h1bmtJZCA+PgorCQkJ KFlBRkZTX1ROT0RFU19MRVZFTDBfQklUUyArCisJCQkJKGxldmVsIC0gMSkgKgorCQkJCVlB RkZTX1ROT0RFU19JTlRFUk5BTF9CSVRTKSkgJgorCQkJWUFGRlNfVE5PREVTX0lOVEVSTkFM X01BU0tdOworCQlsZXZlbC0tOworCX0KKworCXJldHVybiB0bjsKK30KKworLyogQWRkT3JG aW5kTGV2ZWwwVG5vZGUgZmluZHMgdGhlIGxldmVsIDAgdG5vZGUgaWYgaXQgZXhpc3RzLCBv dGhlcndpc2UgZmlyc3QgZXhwYW5kcyB0aGUgdHJlZS4KKyAqIFRoaXMgaGFwcGVucyBpbiB0 d28gc3RlcHM6CisgKiAgMS4gSWYgdGhlIHRyZWUgaXNuJ3QgdGFsbCBlbm91Z2gsIHRoZW4g bWFrZSBpdCB0YWxsZXIuCisgKiAgMi4gU2NhbiBkb3duIHRoZSB0cmVlIHRvd2FyZHMgdGhl IGxldmVsIDAgdG5vZGUgYWRkaW5nIHRub2RlcyBpZiByZXF1aXJlZC4KKyAqCisgKiBVc2Vk IHdoZW4gbW9kaWZ5aW5nIHRoZSB0cmVlLgorICoKKyAqICBJZiB0aGUgdG4gYXJndW1lbnQg aXMgTlVMTCwgdGhlbiBhIGZyZXNoIHRub2RlIHdpbGwgYmUgYWRkZWQgb3RoZXJ3aXNlIHRo ZSBzcGVjaWZpZWQgdG4gd2lsbAorICogIGJlIHBsdWdnZWQgaW50byB0aGUgdHRyZWUuCisg Ki8KKworc3RhdGljIHlhZmZzX1Rub2RlICp5YWZmc19BZGRPckZpbmRMZXZlbDBUbm9kZSh5 YWZmc19EZXZpY2UgKmRldiwKKwkJCQkJeWFmZnNfRmlsZVN0cnVjdHVyZSAqZlN0cnVjdCwK KwkJCQkJX191MzIgY2h1bmtJZCwKKwkJCQkJeWFmZnNfVG5vZGUgKnBhc3NlZFRuKQorewor CWludCByZXF1aXJlZFRhbGxuZXNzOworCWludCBpOworCWludCBsOworCXlhZmZzX1Rub2Rl ICp0bjsKKworCV9fdTMyIHg7CisKKworCS8qIENoZWNrIHNhbmUgbGV2ZWwgYW5kIHBhZ2Ug SWQgKi8KKwlpZiAoZlN0cnVjdC0+dG9wTGV2ZWwgPCAwIHx8IGZTdHJ1Y3QtPnRvcExldmVs ID4gWUFGRlNfVE5PREVTX01BWF9MRVZFTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoY2h1 bmtJZCA+IFlBRkZTX01BWF9DSFVOS19JRCkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBGaXJz dCBjaGVjayB3ZSdyZSB0YWxsIGVub3VnaCAoaWUgZW5vdWdoIHRvcExldmVsKSAqLworCisJ eCA9IGNodW5rSWQgPj4gWUFGRlNfVE5PREVTX0xFVkVMMF9CSVRTOworCXJlcXVpcmVkVGFs bG5lc3MgPSAwOworCXdoaWxlICh4KSB7CisJCXggPj49IFlBRkZTX1ROT0RFU19JTlRFUk5B TF9CSVRTOworCQlyZXF1aXJlZFRhbGxuZXNzKys7CisJfQorCisKKwlpZiAocmVxdWlyZWRU YWxsbmVzcyA+IGZTdHJ1Y3QtPnRvcExldmVsKSB7CisJCS8qIE5vdCB0YWxsIGVub3VnaCwg Z290dGEgbWFrZSB0aGUgdHJlZSB0YWxsZXIgKi8KKwkJZm9yIChpID0gZlN0cnVjdC0+dG9w TGV2ZWw7IGkgPCByZXF1aXJlZFRhbGxuZXNzOyBpKyspIHsKKworCQkJdG4gPSB5YWZmc19H ZXRUbm9kZShkZXYpOworCisJCQlpZiAodG4pIHsKKwkJCQl0bi0+aW50ZXJuYWxbMF0gPSBm U3RydWN0LT50b3A7CisJCQkJZlN0cnVjdC0+dG9wID0gdG47CisJCQl9IGVsc2UgeworCQkJ CVQoWUFGRlNfVFJBQ0VfRVJST1IsCisJCQkJICAoVFNUUigieWFmZnM6IG5vIG1vcmUgdG5v ZGVzIiBURU5EU1RSKSkpOworCQkJfQorCQl9CisKKwkJZlN0cnVjdC0+dG9wTGV2ZWwgPSBy ZXF1aXJlZFRhbGxuZXNzOworCX0KKworCS8qIFRyYXZlcnNlIGRvd24gdG8gbGV2ZWwgMCwg YWRkaW5nIGFueXRoaW5nIHdlIG5lZWQgKi8KKworCWwgPSBmU3RydWN0LT50b3BMZXZlbDsK Kwl0biA9IGZTdHJ1Y3QtPnRvcDsKKworCWlmIChsID4gMCkgeworCQl3aGlsZSAobCA+IDAg JiYgdG4pIHsKKwkJCXggPSAoY2h1bmtJZCA+PgorCQkJICAgICAoWUFGRlNfVE5PREVTX0xF VkVMMF9CSVRTICsKKwkJCSAgICAgIChsIC0gMSkgKiBZQUZGU19UTk9ERVNfSU5URVJOQUxf QklUUykpICYKKwkJCSAgICBZQUZGU19UTk9ERVNfSU5URVJOQUxfTUFTSzsKKworCisJCQlp ZiAoKGwgPiAxKSAmJiAhdG4tPmludGVybmFsW3hdKSB7CisJCQkJLyogQWRkIG1pc3Npbmcg bm9uLWxldmVsLXplcm8gdG5vZGUgKi8KKwkJCQl0bi0+aW50ZXJuYWxbeF0gPSB5YWZmc19H ZXRUbm9kZShkZXYpOworCisJCQl9IGVsc2UgaWYgKGwgPT0gMSkgeworCQkJCS8qIExvb2tp bmcgZnJvbSBsZXZlbCAxIGF0IGxldmVsIDAgKi8KKwkJCQlpZiAocGFzc2VkVG4pIHsKKwkJ CQkJLyogSWYgd2UgYWxyZWFkeSBoYXZlIG9uZSwgdGhlbiByZWxlYXNlIGl0LiovCisJCQkJ CWlmICh0bi0+aW50ZXJuYWxbeF0pCisJCQkJCQl5YWZmc19GcmVlVG5vZGUoZGV2LCB0bi0+ aW50ZXJuYWxbeF0pOworCQkJCQl0bi0+aW50ZXJuYWxbeF0gPSBwYXNzZWRUbjsKKworCQkJ CX0gZWxzZSBpZiAoIXRuLT5pbnRlcm5hbFt4XSkgeworCQkJCQkvKiBEb24ndCBoYXZlIG9u ZSwgbm9uZSBwYXNzZWQgaW4gKi8KKwkJCQkJdG4tPmludGVybmFsW3hdID0geWFmZnNfR2V0 VG5vZGUoZGV2KTsKKwkJCQl9CisJCQl9CisKKwkJCXRuID0gdG4tPmludGVybmFsW3hdOwor CQkJbC0tOworCQl9CisJfSBlbHNlIHsKKwkJLyogdG9wIGlzIGxldmVsIDAgKi8KKwkJaWYg KHBhc3NlZFRuKSB7CisJCQltZW1jcHkodG4sIHBhc3NlZFRuLCAoZGV2LT50bm9kZVdpZHRo ICogWUFGRlNfTlROT0RFU19MRVZFTDApLzgpOworCQkJeWFmZnNfRnJlZVRub2RlKGRldiwg cGFzc2VkVG4pOworCQl9CisJfQorCisJcmV0dXJuIHRuOworfQorCitzdGF0aWMgaW50IHlh ZmZzX0ZpbmRDaHVua0luR3JvdXAoeWFmZnNfRGV2aWNlICpkZXYsIGludCB0aGVDaHVuaywK KwkJCQl5YWZmc19FeHRlbmRlZFRhZ3MgKnRhZ3MsIGludCBvYmplY3RJZCwKKwkJCQlpbnQg Y2h1bmtJbklub2RlKQoreworCWludCBqOworCisJZm9yIChqID0gMDsgdGhlQ2h1bmsgJiYg aiA8IGRldi0+Y2h1bmtHcm91cFNpemU7IGorKykgeworCQlpZiAoeWFmZnNfQ2hlY2tDaHVu a0JpdChkZXYsIHRoZUNodW5rIC8gZGV2LT5uQ2h1bmtzUGVyQmxvY2ssCisJCQkJdGhlQ2h1 bmsgJSBkZXYtPm5DaHVua3NQZXJCbG9jaykpIHsKKwkJCXlhZmZzX1JlYWRDaHVua1dpdGhU YWdzRnJvbU5BTkQoZGV2LCB0aGVDaHVuaywgTlVMTCwKKwkJCQkJCQl0YWdzKTsKKwkJCWlm ICh5YWZmc19UYWdzTWF0Y2godGFncywgb2JqZWN0SWQsIGNodW5rSW5Jbm9kZSkpIHsKKwkJ CQkvKiBmb3VuZCBpdDsgKi8KKwkJCQlyZXR1cm4gdGhlQ2h1bms7CisJCQl9CisJCX0KKwkJ dGhlQ2h1bmsrKzsKKwl9CisJcmV0dXJuIC0xOworfQorCisKKy8qIERlbGV0ZVdvcmtlciBz Y2FucyBiYWNrd2FyZHMgdGhyb3VnaCB0aGUgdG5vZGUgdHJlZSBhbmQgZGVsZXRlcyBhbGwg dGhlCisgKiBjaHVua3MgYW5kIHRub2RlcyBpbiB0aGUgZmlsZQorICogUmV0dXJucyAxIGlm IHRoZSB0cmVlIHdhcyBkZWxldGVkLgorICogUmV0dXJucyAwIGlmIGl0IHN0b3BwZWQgZWFy bHkgZHVlIHRvIGhpdHRpbmcgdGhlIGxpbWl0IGFuZCB0aGUgZGVsZXRlIGlzIGluY29tcGxl dGUuCisgKi8KKworc3RhdGljIGludCB5YWZmc19EZWxldGVXb3JrZXIoeWFmZnNfT2JqZWN0 ICppbiwgeWFmZnNfVG5vZGUgKnRuLCBfX3UzMiBsZXZlbCwKKwkJCSAgICAgIGludCBjaHVu a09mZnNldCwgaW50ICpsaW1pdCkKK3sKKwlpbnQgaTsKKwlpbnQgY2h1bmtJbklub2RlOwor CWludCB0aGVDaHVuazsKKwl5YWZmc19FeHRlbmRlZFRhZ3MgdGFnczsKKwlpbnQgZm91bmRD aHVuazsKKwl5YWZmc19EZXZpY2UgKmRldiA9IGluLT5teURldjsKKworCWludCBhbGxEb25l ID0gMTsKKworCWlmICh0bikgeworCQlpZiAobGV2ZWwgPiAwKSB7CisJCQlmb3IgKGkgPSBZ QUZGU19OVE5PREVTX0lOVEVSTkFMIC0gMTsgYWxsRG9uZSAmJiBpID49IDA7CisJCQkgICAg IGktLSkgeworCQkJCWlmICh0bi0+aW50ZXJuYWxbaV0pIHsKKwkJCQkJaWYgKGxpbWl0ICYm ICgqbGltaXQpIDwgMCkgeworCQkJCQkJYWxsRG9uZSA9IDA7CisJCQkJCX0gZWxzZSB7CisJ CQkJCQlhbGxEb25lID0KKwkJCQkJCQl5YWZmc19EZWxldGVXb3JrZXIoaW4sCisJCQkJCQkJ CXRuLT4KKwkJCQkJCQkJaW50ZXJuYWwKKwkJCQkJCQkJW2ldLAorCQkJCQkJCQlsZXZlbCAt CisJCQkJCQkJCTEsCisJCQkJCQkJCShjaHVua09mZnNldAorCQkJCQkJCQkJPDwKKwkJCQkJ CQkJCVlBRkZTX1ROT0RFU19JTlRFUk5BTF9CSVRTKQorCQkJCQkJCQkrIGksCisJCQkJCQkJ CWxpbWl0KTsKKwkJCQkJfQorCQkJCQlpZiAoYWxsRG9uZSkgeworCQkJCQkJeWFmZnNfRnJl ZVRub2RlKGRldiwKKwkJCQkJCQkJdG4tPgorCQkJCQkJCQlpbnRlcm5hbFtpXSk7CisJCQkJ CQl0bi0+aW50ZXJuYWxbaV0gPSBOVUxMOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJcmV0 dXJuIChhbGxEb25lKSA/IDEgOiAwOworCQl9IGVsc2UgaWYgKGxldmVsID09IDApIHsKKwkJ CWludCBoaXRMaW1pdCA9IDA7CisKKwkJCWZvciAoaSA9IFlBRkZTX05UTk9ERVNfTEVWRUww IC0gMTsgaSA+PSAwICYmICFoaXRMaW1pdDsKKwkJCQkJaS0tKSB7CisJCQkJdGhlQ2h1bmsg PSB5YWZmc19HZXRDaHVua0dyb3VwQmFzZShkZXYsIHRuLCBpKTsKKwkJCQlpZiAodGhlQ2h1 bmspIHsKKworCQkJCQljaHVua0luSW5vZGUgPSAoY2h1bmtPZmZzZXQgPDwKKwkJCQkJCVlB RkZTX1ROT0RFU19MRVZFTDBfQklUUykgKyBpOworCisJCQkJCWZvdW5kQ2h1bmsgPQorCQkJ CQkJeWFmZnNfRmluZENodW5rSW5Hcm91cChkZXYsCisJCQkJCQkJCXRoZUNodW5rLAorCQkJ CQkJCQkmdGFncywKKwkJCQkJCQkJaW4tPm9iamVjdElkLAorCQkJCQkJCQljaHVua0luSW5v ZGUpOworCisJCQkJCWlmIChmb3VuZENodW5rID4gMCkgeworCQkJCQkJeWFmZnNfRGVsZXRl Q2h1bmsoZGV2LAorCQkJCQkJCQkgIGZvdW5kQ2h1bmssIDEsCisJCQkJCQkJCSAgX19MSU5F X18pOworCQkJCQkJaW4tPm5EYXRhQ2h1bmtzLS07CisJCQkJCQlpZiAobGltaXQpIHsKKwkJ CQkJCQkqbGltaXQgPSAqbGltaXQgLSAxOworCQkJCQkJCWlmICgqbGltaXQgPD0gMCkKKwkJ CQkJCQkJaGl0TGltaXQgPSAxOworCQkJCQkJfQorCisJCQkJCX0KKworCQkJCQl5YWZmc19Q dXRMZXZlbDBUbm9kZShkZXYsIHRuLCBpLCAwKTsKKwkJCQl9CisKKwkJCX0KKwkJCXJldHVy biAoaSA8IDApID8gMSA6IDA7CisKKwkJfQorCisJfQorCisJcmV0dXJuIDE7CisKK30KKwor c3RhdGljIHZvaWQgeWFmZnNfU29mdERlbGV0ZUNodW5rKHlhZmZzX0RldmljZSAqZGV2LCBp bnQgY2h1bmspCit7CisJeWFmZnNfQmxvY2tJbmZvICp0aGVCbG9jazsKKworCVQoWUFGRlNf VFJBQ0VfREVMRVRJT04sIChUU1RSKCJzb2Z0IGRlbGV0ZSBjaHVuayAlZCIgVEVORFNUUiks IGNodW5rKSk7CisKKwl0aGVCbG9jayA9IHlhZmZzX0dldEJsb2NrSW5mbyhkZXYsIGNodW5r IC8gZGV2LT5uQ2h1bmtzUGVyQmxvY2spOworCWlmICh0aGVCbG9jaykgeworCQl0aGVCbG9j ay0+c29mdERlbGV0aW9ucysrOworCQlkZXYtPm5GcmVlQ2h1bmtzKys7CisJfQorfQorCisv KiBTb2Z0RGVsZXRlV29ya2VyIHNjYW5zIGJhY2t3YXJkcyB0aHJvdWdoIHRoZSB0bm9kZSB0 cmVlIGFuZCBzb2Z0IGRlbGV0ZXMgYWxsIHRoZSBjaHVua3MgaW4gdGhlIGZpbGUuCisgKiBB bGwgc29mdCBkZWxldGluZyBkb2VzIGlzIGluY3JlbWVudCB0aGUgYmxvY2sncyBzb2Z0ZGVs ZXRlIGNvdW50IGFuZCBwdWxscyB0aGUgY2h1bmsgb3V0CisgKiBvZiB0aGUgdG5vZGUuCisg KiBUaHVzLCBlc3NlbnRpYWxseSB0aGlzIGlzIHRoZSBzYW1lIGFzIERlbGV0ZVdvcmtlciBl eGNlcHQgdGhhdCB0aGUgY2h1bmtzIGFyZSBzb2Z0IGRlbGV0ZWQuCisgKi8KKworc3RhdGlj IGludCB5YWZmc19Tb2Z0RGVsZXRlV29ya2VyKHlhZmZzX09iamVjdCAqaW4sIHlhZmZzX1Ru b2RlICp0biwKKwkJCQkgIF9fdTMyIGxldmVsLCBpbnQgY2h1bmtPZmZzZXQpCit7CisJaW50 IGk7CisJaW50IHRoZUNodW5rOworCWludCBhbGxEb25lID0gMTsKKwl5YWZmc19EZXZpY2Ug KmRldiA9IGluLT5teURldjsKKworCWlmICh0bikgeworCQlpZiAobGV2ZWwgPiAwKSB7CisK KwkJCWZvciAoaSA9IFlBRkZTX05UTk9ERVNfSU5URVJOQUwgLSAxOyBhbGxEb25lICYmIGkg Pj0gMDsKKwkJCSAgICAgaS0tKSB7CisJCQkJaWYgKHRuLT5pbnRlcm5hbFtpXSkgeworCQkJ CQlhbGxEb25lID0KKwkJCQkJICAgIHlhZmZzX1NvZnREZWxldGVXb3JrZXIoaW4sCisJCQkJ CQkJCSAgIHRuLT4KKwkJCQkJCQkJICAgaW50ZXJuYWxbaV0sCisJCQkJCQkJCSAgIGxldmVs IC0gMSwKKwkJCQkJCQkJICAgKGNodW5rT2Zmc2V0CisJCQkJCQkJCSAgICA8PAorCQkJCQkJ CQkgICAgWUFGRlNfVE5PREVTX0lOVEVSTkFMX0JJVFMpCisJCQkJCQkJCSAgICsgaSk7CisJ CQkJCWlmIChhbGxEb25lKSB7CisJCQkJCQl5YWZmc19GcmVlVG5vZGUoZGV2LAorCQkJCQkJ CQl0bi0+CisJCQkJCQkJCWludGVybmFsW2ldKTsKKwkJCQkJCXRuLT5pbnRlcm5hbFtpXSA9 IE5VTEw7CisJCQkJCX0gZWxzZSB7CisJCQkJCQkvKiBIb29zdGVybWFuLi4uIGhvdyBjb3Vs ZCB0aGlzIGhhcHBlbj8gKi8KKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCXJldHVybiAoYWxs RG9uZSkgPyAxIDogMDsKKwkJfSBlbHNlIGlmIChsZXZlbCA9PSAwKSB7CisKKwkJCWZvciAo aSA9IFlBRkZTX05UTk9ERVNfTEVWRUwwIC0gMTsgaSA+PSAwOyBpLS0pIHsKKwkJCQl0aGVD aHVuayA9IHlhZmZzX0dldENodW5rR3JvdXBCYXNlKGRldiwgdG4sIGkpOworCQkJCWlmICh0 aGVDaHVuaykgeworCQkJCQkvKiBOb3RlIHRoaXMgZG9lcyBub3QgZmluZCB0aGUgcmVhbCBj aHVuaywgb25seSB0aGUgY2h1bmsgZ3JvdXAuCisJCQkJCSAqIFdlIG1ha2UgYW4gYXNzdW1w dGlvbiB0aGF0IGEgY2h1bmsgZ3JvdXAgaXMgbm90IGxhcmdlciB0aGFuCisJCQkJCSAqIGEg YmxvY2suCisJCQkJCSAqLworCQkJCQl5YWZmc19Tb2Z0RGVsZXRlQ2h1bmsoZGV2LCB0aGVD aHVuayk7CisJCQkJCXlhZmZzX1B1dExldmVsMFRub2RlKGRldiwgdG4sIGksIDApOworCQkJ CX0KKworCQkJfQorCQkJcmV0dXJuIDE7CisKKwkJfQorCisJfQorCisJcmV0dXJuIDE7CisK K30KKworc3RhdGljIHZvaWQgeWFmZnNfU29mdERlbGV0ZUZpbGUoeWFmZnNfT2JqZWN0ICpv YmopCit7CisJaWYgKG9iai0+ZGVsZXRlZCAmJgorCSAgICBvYmotPnZhcmlhbnRUeXBlID09 IFlBRkZTX09CSkVDVF9UWVBFX0ZJTEUgJiYgIW9iai0+c29mdERlbGV0ZWQpIHsKKwkJaWYg KG9iai0+bkRhdGFDaHVua3MgPD0gMCkgeworCQkJLyogRW1wdHkgZmlsZSB3aXRoIG5vIGR1 cGxpY2F0ZSBvYmplY3QgaGVhZGVycywganVzdCBkZWxldGUgaXQgaW1tZWRpYXRlbHkgKi8K KwkJCXlhZmZzX0ZyZWVUbm9kZShvYmotPm15RGV2LAorCQkJCQlvYmotPnZhcmlhbnQuZmls ZVZhcmlhbnQudG9wKTsKKwkJCW9iai0+dmFyaWFudC5maWxlVmFyaWFudC50b3AgPSBOVUxM OworCQkJVChZQUZGU19UUkFDRV9UUkFDSU5HLAorCQkJICAoVFNUUigieWFmZnM6IERlbGV0 aW5nIGVtcHR5IGZpbGUgJWQiIFRFTkRTVFIpLAorCQkJICAgb2JqLT5vYmplY3RJZCkpOwor CQkJeWFmZnNfRG9HZW5lcmljT2JqZWN0RGVsZXRpb24ob2JqKTsKKwkJfSBlbHNlIHsKKwkJ CXlhZmZzX1NvZnREZWxldGVXb3JrZXIob2JqLAorCQkJCQkgICAgICAgb2JqLT52YXJpYW50 LmZpbGVWYXJpYW50LnRvcCwKKwkJCQkJICAgICAgIG9iai0+dmFyaWFudC5maWxlVmFyaWFu dC4KKwkJCQkJICAgICAgIHRvcExldmVsLCAwKTsKKwkJCW9iai0+c29mdERlbGV0ZWQgPSAx OworCQl9CisJfQorfQorCisvKiBQcnVuaW5nIHJlbW92ZXMgYW55IHBhcnQgb2YgdGhlIGZp bGUgc3RydWN0dXJlIHRyZWUgdGhhdCBpcyBiZXlvbmQgdGhlCisgKiBib3VuZHMgb2YgdGhl IGZpbGUgKGllIHRoYXQgZG9lcyBub3QgcG9pbnQgdG8gY2h1bmtzKS4KKyAqCisgKiBBIGZp bGUgc2hvdWxkIG9ubHkgZ2V0IHBydW5lZCB3aGVuIGl0cyBzaXplIGlzIHJlZHVjZWQuCisg KgorICogQmVmb3JlIHBydW5pbmcsIHRoZSBjaHVua3MgbXVzdCBiZSBwdWxsZWQgZnJvbSB0 aGUgdHJlZSBhbmQgdGhlCisgKiBsZXZlbCAwIHRub2RlIGVudHJpZXMgbXVzdCBiZSB6ZXJv ZWQgb3V0LgorICogQ291bGQgYWxzbyB1c2UgdGhpcyBmb3IgZmlsZSBkZWxldGlvbiwgYnV0 IHRoYXQncyBwcm9iYWJseSBiZXR0ZXIgaGFuZGxlZAorICogYnkgYSBzcGVjaWFsIGNhc2Uu CisgKi8KKworc3RhdGljIHlhZmZzX1Rub2RlICp5YWZmc19QcnVuZVdvcmtlcih5YWZmc19E ZXZpY2UgKmRldiwgeWFmZnNfVG5vZGUgKnRuLAorCQkJCV9fdTMyIGxldmVsLCBpbnQgZGVs MCkKK3sKKwlpbnQgaTsKKwlpbnQgaGFzRGF0YTsKKworCWlmICh0bikgeworCQloYXNEYXRh ID0gMDsKKworCQlmb3IgKGkgPSAwOyBpIDwgWUFGRlNfTlROT0RFU19JTlRFUk5BTDsgaSsr KSB7CisJCQlpZiAodG4tPmludGVybmFsW2ldICYmIGxldmVsID4gMCkgeworCQkJCXRuLT5p bnRlcm5hbFtpXSA9CisJCQkJICAgIHlhZmZzX1BydW5lV29ya2VyKGRldiwgdG4tPmludGVy bmFsW2ldLAorCQkJCQkJICAgICAgbGV2ZWwgLSAxLAorCQkJCQkJICAgICAgKGkgPT0gMCkg PyBkZWwwIDogMSk7CisJCQl9CisKKwkJCWlmICh0bi0+aW50ZXJuYWxbaV0pCisJCQkJaGFz RGF0YSsrOworCQl9CisKKwkJaWYgKGhhc0RhdGEgPT0gMCAmJiBkZWwwKSB7CisJCQkvKiBG cmVlIGFuZCByZXR1cm4gTlVMTCAqLworCisJCQl5YWZmc19GcmVlVG5vZGUoZGV2LCB0bik7 CisJCQl0biA9IE5VTEw7CisJCX0KKworCX0KKworCXJldHVybiB0bjsKKworfQorCitzdGF0 aWMgaW50IHlhZmZzX1BydW5lRmlsZVN0cnVjdHVyZSh5YWZmc19EZXZpY2UgKmRldiwKKwkJ CQl5YWZmc19GaWxlU3RydWN0dXJlICpmU3RydWN0KQoreworCWludCBpOworCWludCBoYXNE YXRhOworCWludCBkb25lID0gMDsKKwl5YWZmc19Ubm9kZSAqdG47CisKKwlpZiAoZlN0cnVj dC0+dG9wTGV2ZWwgPiAwKSB7CisJCWZTdHJ1Y3QtPnRvcCA9CisJCSAgICB5YWZmc19QcnVu ZVdvcmtlcihkZXYsIGZTdHJ1Y3QtPnRvcCwgZlN0cnVjdC0+dG9wTGV2ZWwsIDApOworCisJ CS8qIE5vdyB3ZSBoYXZlIGEgdHJlZSB3aXRoIGFsbCB0aGUgbm9uLXplcm8gYnJhbmNoZXMg TlVMTCBidXQgdGhlIGhlaWdodAorCQkgKiBpcyB0aGUgc2FtZSBhcyBpdCB3YXMuCisJCSAq IExldCdzIHNlZSBpZiB3ZSBjYW4gdHJpbSBpbnRlcm5hbCB0bm9kZXMgdG8gc2hvcnRlbiB0 aGUgdHJlZS4KKwkJICogV2UgY2FuIGRvIHRoaXMgaWYgb25seSB0aGUgMHRoIGVsZW1lbnQg aW4gdGhlIHRub2RlIGlzIGluIHVzZQorCQkgKiAoaWUgYWxsIHRoZSBub24temVybyBhcmUg TlVMTCkKKwkJICovCisKKwkJd2hpbGUgKGZTdHJ1Y3QtPnRvcExldmVsICYmICFkb25lKSB7 CisJCQl0biA9IGZTdHJ1Y3QtPnRvcDsKKworCQkJaGFzRGF0YSA9IDA7CisJCQlmb3IgKGkg PSAxOyBpIDwgWUFGRlNfTlROT0RFU19JTlRFUk5BTDsgaSsrKSB7CisJCQkJaWYgKHRuLT5p bnRlcm5hbFtpXSkKKwkJCQkJaGFzRGF0YSsrOworCQkJfQorCisJCQlpZiAoIWhhc0RhdGEp IHsKKwkJCQlmU3RydWN0LT50b3AgPSB0bi0+aW50ZXJuYWxbMF07CisJCQkJZlN0cnVjdC0+ dG9wTGV2ZWwtLTsKKwkJCQl5YWZmc19GcmVlVG5vZGUoZGV2LCB0bik7CisJCQl9IGVsc2Ug eworCQkJCWRvbmUgPSAxOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIFlBRkZTX09LOwor fQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tIEVuZCBvZiBGaWxlIFN0cnVjdHVyZSBmdW5j dGlvbnMuLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIHlhZmZzX0NyZWF0ZUZyZWVPYmpl Y3RzIGNyZWF0ZXMgYSBidW5jaCBtb3JlIG9iamVjdHMgYW5kCisgKiBhZGRzIHRoZW0gdG8g dGhlIG9iamVjdCBmcmVlIGxpc3QuCisgKi8KK3N0YXRpYyBpbnQgeWFmZnNfQ3JlYXRlRnJl ZU9iamVjdHMoeWFmZnNfRGV2aWNlICpkZXYsIGludCBuT2JqZWN0cykKK3sKKwlpbnQgaTsK Kwl5YWZmc19PYmplY3QgKm5ld09iamVjdHM7CisJeWFmZnNfT2JqZWN0TGlzdCAqbGlzdDsK KworCWlmIChuT2JqZWN0cyA8IDEpCisJCXJldHVybiBZQUZGU19PSzsKKworCS8qIG1ha2Ug dGhlc2UgdGhpbmdzICovCisJbmV3T2JqZWN0cyA9IFlNQUxMT0Mobk9iamVjdHMgKiBzaXpl b2YoeWFmZnNfT2JqZWN0KSk7CisJbGlzdCA9IFlNQUxMT0Moc2l6ZW9mKHlhZmZzX09iamVj dExpc3QpKTsKKworCWlmICghbmV3T2JqZWN0cyB8fCAhbGlzdCkgeworCQlpZiAobmV3T2Jq ZWN0cykKKwkJCVlGUkVFKG5ld09iamVjdHMpOworCQlpZiAobGlzdCkKKwkJCVlGUkVFKGxp c3QpOworCQlUKFlBRkZTX1RSQUNFX0FMTE9DQVRFLAorCQkgIChUU1RSKCJ5YWZmczogQ291 bGQgbm90IGFsbG9jYXRlIG1vcmUgb2JqZWN0cyIgVEVORFNUUikpKTsKKwkJcmV0dXJuIFlB RkZTX0ZBSUw7CisJfQorCisJLyogSG9vayB0aGVtIGludG8gdGhlIGZyZWUgbGlzdCAqLwor CWZvciAoaSA9IDA7IGkgPCBuT2JqZWN0cyAtIDE7IGkrKykgeworCQluZXdPYmplY3RzW2ld LnNpYmxpbmdzLm5leHQgPQorCQkJCShzdHJ1Y3QgeWxpc3RfaGVhZCAqKSgmbmV3T2JqZWN0 c1tpICsgMV0pOworCX0KKworCW5ld09iamVjdHNbbk9iamVjdHMgLSAxXS5zaWJsaW5ncy5u ZXh0ID0gKHZvaWQgKilkZXYtPmZyZWVPYmplY3RzOworCWRldi0+ZnJlZU9iamVjdHMgPSBu ZXdPYmplY3RzOworCWRldi0+bkZyZWVPYmplY3RzICs9IG5PYmplY3RzOworCWRldi0+bk9i amVjdHNDcmVhdGVkICs9IG5PYmplY3RzOworCisJLyogTm93IGFkZCB0aGlzIGJ1bmNoIG9m IE9iamVjdHMgdG8gYSBsaXN0IGZvciBmcmVlaW5nIHVwLiAqLworCisJbGlzdC0+b2JqZWN0 cyA9IG5ld09iamVjdHM7CisJbGlzdC0+bmV4dCA9IGRldi0+YWxsb2NhdGVkT2JqZWN0TGlz dDsKKwlkZXYtPmFsbG9jYXRlZE9iamVjdExpc3QgPSBsaXN0OworCisJcmV0dXJuIFlBRkZT X09LOworfQorCisKKy8qIEFsbG9jYXRlRW1wdHlPYmplY3QgZ2V0cyB1cyBhIGNsZWFuIE9i amVjdC4gVHJpZXMgdG8gbWFrZSBhbGxvY2F0ZSBtb3JlIGlmIHdlIHJ1biBvdXQgKi8KK3N0 YXRpYyB5YWZmc19PYmplY3QgKnlhZmZzX0FsbG9jYXRlRW1wdHlPYmplY3QoeWFmZnNfRGV2 aWNlICpkZXYpCit7CisJeWFmZnNfT2JqZWN0ICp0biA9IE5VTEw7CisKKyNpZmRlZiBWQUxH UklORF9URVNUCisJdG4gPSBZTUFMTE9DKHNpemVvZih5YWZmc19PYmplY3QpKTsKKyNlbHNl CisJLyogSWYgdGhlcmUgYXJlIG5vbmUgbGVmdCBtYWtlIG1vcmUgKi8KKwlpZiAoIWRldi0+ ZnJlZU9iamVjdHMpCisJCXlhZmZzX0NyZWF0ZUZyZWVPYmplY3RzKGRldiwgWUFGRlNfQUxM T0NBVElPTl9OT0JKRUNUUyk7CisKKwlpZiAoZGV2LT5mcmVlT2JqZWN0cykgeworCQl0biA9 IGRldi0+ZnJlZU9iamVjdHM7CisJCWRldi0+ZnJlZU9iamVjdHMgPQorCQkJKHlhZmZzX09i amVjdCAqKSAoZGV2LT5mcmVlT2JqZWN0cy0+c2libGluZ3MubmV4dCk7CisJCWRldi0+bkZy ZWVPYmplY3RzLS07CisJfQorI2VuZGlmCisJaWYgKHRuKSB7CisJCS8qIE5vdyBzd2VldGVu IGl0IHVwLi4uICovCisKKwkJbWVtc2V0KHRuLCAwLCBzaXplb2YoeWFmZnNfT2JqZWN0KSk7 CisJCXRuLT5iZWluZ0NyZWF0ZWQgPSAxOworCisJCXRuLT5teURldiA9IGRldjsKKwkJdG4t PmhkckNodW5rID0gMDsKKwkJdG4tPnZhcmlhbnRUeXBlID0gWUFGRlNfT0JKRUNUX1RZUEVf VU5LTk9XTjsKKwkJWUlOSVRfTElTVF9IRUFEKCYodG4tPmhhcmRMaW5rcykpOworCQlZSU5J VF9MSVNUX0hFQUQoJih0bi0+aGFzaExpbmspKTsKKwkJWUlOSVRfTElTVF9IRUFEKCZ0bi0+ c2libGluZ3MpOworCisKKwkJLyogTm93IG1ha2UgdGhlIGRpcmVjdG9yeSBzYW5lICovCisJ CWlmIChkZXYtPnJvb3REaXIpIHsKKwkJCXRuLT5wYXJlbnQgPSBkZXYtPnJvb3REaXI7CisJ CQl5bGlzdF9hZGQoJih0bi0+c2libGluZ3MpLCAmZGV2LT5yb290RGlyLT52YXJpYW50LmRp cmVjdG9yeVZhcmlhbnQuY2hpbGRyZW4pOworCQl9CisKKwkJLyogQWRkIGl0IHRvIHRoZSBs b3N0IGFuZCBmb3VuZCBkaXJlY3RvcnkuCisJCSAqIE5CIENhbid0IHB1dCByb290IG9yIGxv c3RORm91bmQgaW4gbG9zdE5Gb3VuZCBzbworCQkgKiBjaGVjayBpZiBsb3N0TkZvdW5kIGV4 aXN0cyBmaXJzdAorCQkgKi8KKwkJaWYgKGRldi0+bG9zdE5Gb3VuZERpcikKKwkJCXlhZmZz X0FkZE9iamVjdFRvRGlyZWN0b3J5KGRldi0+bG9zdE5Gb3VuZERpciwgdG4pOworCisJCXRu LT5iZWluZ0NyZWF0ZWQgPSAwOworCX0KKworCWRldi0+bkNoZWNrcG9pbnRCbG9ja3NSZXF1 aXJlZCA9IDA7IC8qIGZvcmNlIHJlY2FsY3VsYXRpb24qLworCisJcmV0dXJuIHRuOworfQor CitzdGF0aWMgeWFmZnNfT2JqZWN0ICp5YWZmc19DcmVhdGVGYWtlRGlyZWN0b3J5KHlhZmZz X0RldmljZSAqZGV2LCBpbnQgbnVtYmVyLAorCQkJCQkgICAgICAgX191MzIgbW9kZSkKK3sK KworCXlhZmZzX09iamVjdCAqb2JqID0KKwkgICAgeWFmZnNfQ3JlYXRlTmV3T2JqZWN0KGRl diwgbnVtYmVyLCBZQUZGU19PQkpFQ1RfVFlQRV9ESVJFQ1RPUlkpOworCWlmIChvYmopIHsK KwkJb2JqLT5mYWtlID0gMTsJCS8qIGl0IGlzIGZha2Ugc28gaXQgbWlnaHQgaGF2ZSBubyBO QU5EIHByZXNlbmNlLi4uICovCisJCW9iai0+cmVuYW1lQWxsb3dlZCA9IDA7CS8qIC4uLiBh bmQgd2UncmUgbm90IGFsbG93ZWQgdG8gcmVuYW1lIGl0Li4uICovCisJCW9iai0+dW5saW5r QWxsb3dlZCA9IDA7CS8qIC4uLiBvciB1bmxpbmsgaXQgKi8KKwkJb2JqLT5kZWxldGVkID0g MDsKKwkJb2JqLT51bmxpbmtlZCA9IDA7CisJCW9iai0+eXN0X21vZGUgPSBtb2RlOworCQlv YmotPm15RGV2ID0gZGV2OworCQlvYmotPmhkckNodW5rID0gMDsJLyogTm90IGEgdmFsaWQg Y2h1bmsuICovCisJfQorCisJcmV0dXJuIG9iajsKKworfQorCitzdGF0aWMgdm9pZCB5YWZm c19Vbmhhc2hPYmplY3QoeWFmZnNfT2JqZWN0ICp0bikKK3sKKwlpbnQgYnVja2V0OworCXlh ZmZzX0RldmljZSAqZGV2ID0gdG4tPm15RGV2OworCisJLyogSWYgaXQgaXMgc3RpbGwgbGlu a2VkIGludG8gdGhlIGJ1Y2tldCBsaXN0LCBmcmVlIGZyb20gdGhlIGxpc3QgKi8KKwlpZiAo IXlsaXN0X2VtcHR5KCZ0bi0+aGFzaExpbmspKSB7CisJCXlsaXN0X2RlbF9pbml0KCZ0bi0+ aGFzaExpbmspOworCQlidWNrZXQgPSB5YWZmc19IYXNoRnVuY3Rpb24odG4tPm9iamVjdElk KTsKKwkJZGV2LT5vYmplY3RCdWNrZXRbYnVja2V0XS5jb3VudC0tOworCX0KK30KKworLyog IEZyZWVPYmplY3QgZnJlZXMgdXAgYSBPYmplY3QgYW5kIHB1dHMgaXQgYmFjayBvbiB0aGUg ZnJlZSBsaXN0ICovCitzdGF0aWMgdm9pZCB5YWZmc19GcmVlT2JqZWN0KHlhZmZzX09iamVj dCAqdG4pCit7CisJeWFmZnNfRGV2aWNlICpkZXYgPSB0bi0+bXlEZXY7CisKKyNpZmRlZiBf X0tFUk5FTF9fCisJVChZQUZGU19UUkFDRV9PUywgKFRTVFIoIkZyZWVPYmplY3QgJXAgaW5v ZGUgJXAiVEVORFNUUiksIHRuLCB0bi0+bXlJbm9kZSkpOworI2VuZGlmCisKKwlpZiAodG4t PnBhcmVudCkKKwkJWUJVRygpOworCWlmICgheWxpc3RfZW1wdHkoJnRuLT5zaWJsaW5ncykp CisJCVlCVUcoKTsKKworCisjaWZkZWYgX19LRVJORUxfXworCWlmICh0bi0+bXlJbm9kZSkg eworCQkvKiBXZSdyZSBzdGlsbCBob29rZWQgdXAgdG8gYSBjYWNoZWQgaW5vZGUuCisJCSAq IERvbid0IGRlbGV0ZSBub3csIGJ1dCBtYXJrIGZvciBsYXRlciBkZWxldGlvbgorCQkgKi8K KwkJdG4tPmRlZmVyZWRGcmVlID0gMTsKKwkJcmV0dXJuOworCX0KKyNlbmRpZgorCisJeWFm ZnNfVW5oYXNoT2JqZWN0KHRuKTsKKworI2lmZGVmIFZBTEdSSU5EX1RFU1QKKwlZRlJFRSh0 bik7CisjZWxzZQorCS8qIExpbmsgaW50byB0aGUgZnJlZSBsaXN0LiAqLworCXRuLT5zaWJs aW5ncy5uZXh0ID0gKHN0cnVjdCB5bGlzdF9oZWFkICopKGRldi0+ZnJlZU9iamVjdHMpOwor CWRldi0+ZnJlZU9iamVjdHMgPSB0bjsKKwlkZXYtPm5GcmVlT2JqZWN0cysrOworI2VuZGlm CisJZGV2LT5uQ2hlY2twb2ludEJsb2Nrc1JlcXVpcmVkID0gMDsgLyogZm9yY2UgcmVjYWxj dWxhdGlvbiovCit9CisKKyNpZmRlZiBfX0tFUk5FTF9fCisKK3ZvaWQgeWFmZnNfSGFuZGxl RGVmZXJlZEZyZWUoeWFmZnNfT2JqZWN0ICpvYmopCit7CisJaWYgKG9iai0+ZGVmZXJlZEZy ZWUpCisJCXlhZmZzX0ZyZWVPYmplY3Qob2JqKTsKK30KKworI2VuZGlmCisKK3N0YXRpYyB2 b2lkIHlhZmZzX0RlaW5pdGlhbGlzZU9iamVjdHMoeWFmZnNfRGV2aWNlICpkZXYpCit7CisJ LyogRnJlZSB0aGUgbGlzdCBvZiBhbGxvY2F0ZWQgT2JqZWN0cyAqLworCisJeWFmZnNfT2Jq ZWN0TGlzdCAqdG1wOworCisJd2hpbGUgKGRldi0+YWxsb2NhdGVkT2JqZWN0TGlzdCkgewor CQl0bXAgPSBkZXYtPmFsbG9jYXRlZE9iamVjdExpc3QtPm5leHQ7CisJCVlGUkVFKGRldi0+ YWxsb2NhdGVkT2JqZWN0TGlzdC0+b2JqZWN0cyk7CisJCVlGUkVFKGRldi0+YWxsb2NhdGVk T2JqZWN0TGlzdCk7CisKKwkJZGV2LT5hbGxvY2F0ZWRPYmplY3RMaXN0ID0gdG1wOworCX0K KworCWRldi0+ZnJlZU9iamVjdHMgPSBOVUxMOworCWRldi0+bkZyZWVPYmplY3RzID0gMDsK K30KKworc3RhdGljIHZvaWQgeWFmZnNfSW5pdGlhbGlzZU9iamVjdHMoeWFmZnNfRGV2aWNl ICpkZXYpCit7CisJaW50IGk7CisKKwlkZXYtPmFsbG9jYXRlZE9iamVjdExpc3QgPSBOVUxM OworCWRldi0+ZnJlZU9iamVjdHMgPSBOVUxMOworCWRldi0+bkZyZWVPYmplY3RzID0gMDsK KworCWZvciAoaSA9IDA7IGkgPCBZQUZGU19OT0JKRUNUX0JVQ0tFVFM7IGkrKykgeworCQlZ SU5JVF9MSVNUX0hFQUQoJmRldi0+b2JqZWN0QnVja2V0W2ldLmxpc3QpOworCQlkZXYtPm9i amVjdEJ1Y2tldFtpXS5jb3VudCA9IDA7CisJfQorfQorCitzdGF0aWMgaW50IHlhZmZzX0Zp bmROaWNlT2JqZWN0QnVja2V0KHlhZmZzX0RldmljZSAqZGV2KQoreworCXN0YXRpYyBpbnQg eDsKKwlpbnQgaTsKKwlpbnQgbCA9IDk5OTsKKwlpbnQgbG93ZXN0ID0gOTk5OTk5OworCisJ LyogRmlyc3QgbGV0J3Mgc2VlIGlmIHdlIGNhbiBmaW5kIG9uZSB0aGF0J3MgZW1wdHkuICov CisKKwlmb3IgKGkgPSAwOyBpIDwgMTAgJiYgbG93ZXN0ID4gMDsgaSsrKSB7CisJCXgrKzsK KwkJeCAlPSBZQUZGU19OT0JKRUNUX0JVQ0tFVFM7CisJCWlmIChkZXYtPm9iamVjdEJ1Y2tl dFt4XS5jb3VudCA8IGxvd2VzdCkgeworCQkJbG93ZXN0ID0gZGV2LT5vYmplY3RCdWNrZXRb eF0uY291bnQ7CisJCQlsID0geDsKKwkJfQorCisJfQorCisJLyogSWYgd2UgZGlkbid0IGZp bmQgYW4gZW1wdHkgbGlzdCwgdGhlbiB0cnkKKwkgKiBsb29raW5nIGEgYml0IGZ1cnRoZXIg Zm9yIGEgc2hvcnQgb25lCisJICovCisKKwlmb3IgKGkgPSAwOyBpIDwgMTAgJiYgbG93ZXN0 ID4gMzsgaSsrKSB7CisJCXgrKzsKKwkJeCAlPSBZQUZGU19OT0JKRUNUX0JVQ0tFVFM7CisJ CWlmIChkZXYtPm9iamVjdEJ1Y2tldFt4XS5jb3VudCA8IGxvd2VzdCkgeworCQkJbG93ZXN0 ID0gZGV2LT5vYmplY3RCdWNrZXRbeF0uY291bnQ7CisJCQlsID0geDsKKwkJfQorCisJfQor CisJcmV0dXJuIGw7Cit9CisKK3N0YXRpYyBpbnQgeWFmZnNfQ3JlYXRlTmV3T2JqZWN0TnVt YmVyKHlhZmZzX0RldmljZSAqZGV2KQoreworCWludCBidWNrZXQgPSB5YWZmc19GaW5kTmlj ZU9iamVjdEJ1Y2tldChkZXYpOworCisJLyogTm93IGZpbmQgYW4gb2JqZWN0IHZhbHVlIHRo YXQgaGFzIG5vdCBhbHJlYWR5IGJlZW4gdGFrZW4KKwkgKiBieSBzY2FubmluZyB0aGUgbGlz dC4KKwkgKi8KKworCWludCBmb3VuZCA9IDA7CisJc3RydWN0IHlsaXN0X2hlYWQgKmk7CisK KwlfX3UzMiBuID0gKF9fdTMyKSBidWNrZXQ7CisKKwkvKiB5YWZmc19DaGVja09iamVjdEhh c2hTYW5pdHkoKTsgICovCisKKwl3aGlsZSAoIWZvdW5kKSB7CisJCWZvdW5kID0gMTsKKwkJ biArPSBZQUZGU19OT0JKRUNUX0JVQ0tFVFM7CisJCWlmICgxIHx8IGRldi0+b2JqZWN0QnVj a2V0W2J1Y2tldF0uY291bnQgPiAwKSB7CisJCQl5bGlzdF9mb3JfZWFjaChpLCAmZGV2LT5v YmplY3RCdWNrZXRbYnVja2V0XS5saXN0KSB7CisJCQkJLyogSWYgdGhlcmUgaXMgYWxyZWFk eSBvbmUgaW4gdGhlIGxpc3QgKi8KKwkJCQlpZiAoaSAmJiB5bGlzdF9lbnRyeShpLCB5YWZm c19PYmplY3QsCisJCQkJCQloYXNoTGluayktPm9iamVjdElkID09IG4pIHsKKwkJCQkJZm91 bmQgPSAwOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCXJldHVybiBuOworfQorCitzdGF0 aWMgdm9pZCB5YWZmc19IYXNoT2JqZWN0KHlhZmZzX09iamVjdCAqaW4pCit7CisJaW50IGJ1 Y2tldCA9IHlhZmZzX0hhc2hGdW5jdGlvbihpbi0+b2JqZWN0SWQpOworCXlhZmZzX0Rldmlj ZSAqZGV2ID0gaW4tPm15RGV2OworCisJeWxpc3RfYWRkKCZpbi0+aGFzaExpbmssICZkZXYt Pm9iamVjdEJ1Y2tldFtidWNrZXRdLmxpc3QpOworCWRldi0+b2JqZWN0QnVja2V0W2J1Y2tl dF0uY291bnQrKzsKK30KKworeWFmZnNfT2JqZWN0ICp5YWZmc19GaW5kT2JqZWN0QnlOdW1i ZXIoeWFmZnNfRGV2aWNlICpkZXYsIF9fdTMyIG51bWJlcikKK3sKKwlpbnQgYnVja2V0ID0g eWFmZnNfSGFzaEZ1bmN0aW9uKG51bWJlcik7CisJc3RydWN0IHlsaXN0X2hlYWQgKmk7CisJ eWFmZnNfT2JqZWN0ICppbjsKKworCXlsaXN0X2Zvcl9lYWNoKGksICZkZXYtPm9iamVjdEJ1 Y2tldFtidWNrZXRdLmxpc3QpIHsKKwkJLyogTG9vayBpZiBpdCBpcyBpbiB0aGUgbGlzdCAq LworCQlpZiAoaSkgeworCQkJaW4gPSB5bGlzdF9lbnRyeShpLCB5YWZmc19PYmplY3QsIGhh c2hMaW5rKTsKKwkJCWlmIChpbi0+b2JqZWN0SWQgPT0gbnVtYmVyKSB7CisjaWZkZWYgX19L RVJORUxfXworCQkJCS8qIERvbid0IHRlbGwgdGhlIFZGUyBhYm91dCB0aGlzIG9uZSBpZiBp dCBpcyBkZWZlcmVkIGZyZWUgKi8KKwkJCQlpZiAoaW4tPmRlZmVyZWRGcmVlKQorCQkJCQly ZXR1cm4gTlVMTDsKKyNlbmRpZgorCisJCQkJcmV0dXJuIGluOworCQkJfQorCQl9CisJfQor CisJcmV0dXJuIE5VTEw7Cit9CisKK3lhZmZzX09iamVjdCAqeWFmZnNfQ3JlYXRlTmV3T2Jq ZWN0KHlhZmZzX0RldmljZSAqZGV2LCBpbnQgbnVtYmVyLAorCQkJCSAgICB5YWZmc19PYmpl Y3RUeXBlIHR5cGUpCit7CisJeWFmZnNfT2JqZWN0ICp0aGVPYmplY3Q7CisJeWFmZnNfVG5v ZGUgKnRuID0gTlVMTDsKKworCWlmIChudW1iZXIgPCAwKQorCQludW1iZXIgPSB5YWZmc19D cmVhdGVOZXdPYmplY3ROdW1iZXIoZGV2KTsKKworCXRoZU9iamVjdCA9IHlhZmZzX0FsbG9j YXRlRW1wdHlPYmplY3QoZGV2KTsKKwlpZiAoIXRoZU9iamVjdCkKKwkJcmV0dXJuIE5VTEw7 CisKKwlpZiAodHlwZSA9PSBZQUZGU19PQkpFQ1RfVFlQRV9GSUxFKSB7CisJCXRuID0geWFm ZnNfR2V0VG5vZGUoZGV2KTsKKwkJaWYgKCF0bikgeworCQkJeWFmZnNfRnJlZU9iamVjdCh0 aGVPYmplY3QpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9CisKKwlpZiAodGhlT2JqZWN0 KSB7CisJCXRoZU9iamVjdC0+ZmFrZSA9IDA7CisJCXRoZU9iamVjdC0+cmVuYW1lQWxsb3dl ZCA9IDE7CisJCXRoZU9iamVjdC0+dW5saW5rQWxsb3dlZCA9IDE7CisJCXRoZU9iamVjdC0+ b2JqZWN0SWQgPSBudW1iZXI7CisJCXlhZmZzX0hhc2hPYmplY3QodGhlT2JqZWN0KTsKKwkJ dGhlT2JqZWN0LT52YXJpYW50VHlwZSA9IHR5cGU7CisjaWZkZWYgQ09ORklHX1lBRkZTX1dJ TkNFCisJCXlmc2RfV2luRmlsZVRpbWVOb3codGhlT2JqZWN0LT53aW5fYXRpbWUpOworCQl0 aGVPYmplY3QtPndpbl9jdGltZVswXSA9IHRoZU9iamVjdC0+d2luX210aW1lWzBdID0KKwkJ ICAgIHRoZU9iamVjdC0+d2luX2F0aW1lWzBdOworCQl0aGVPYmplY3QtPndpbl9jdGltZVsx XSA9IHRoZU9iamVjdC0+d2luX210aW1lWzFdID0KKwkJICAgIHRoZU9iamVjdC0+d2luX2F0 aW1lWzFdOworCisjZWxzZQorCisJCXRoZU9iamVjdC0+eXN0X2F0aW1lID0gdGhlT2JqZWN0 LT55c3RfbXRpbWUgPQorCQkgICAgdGhlT2JqZWN0LT55c3RfY3RpbWUgPSBZX0NVUlJFTlRf VElNRTsKKyNlbmRpZgorCQlzd2l0Y2ggKHR5cGUpIHsKKwkJY2FzZSBZQUZGU19PQkpFQ1Rf VFlQRV9GSUxFOgorCQkJdGhlT2JqZWN0LT52YXJpYW50LmZpbGVWYXJpYW50LmZpbGVTaXpl ID0gMDsKKwkJCXRoZU9iamVjdC0+dmFyaWFudC5maWxlVmFyaWFudC5zY2FubmVkRmlsZVNp emUgPSAwOworCQkJdGhlT2JqZWN0LT52YXJpYW50LmZpbGVWYXJpYW50LnNocmlua1NpemUg PSAweEZGRkZGRkZGOwkvKiBtYXggX191MzIgKi8KKwkJCXRoZU9iamVjdC0+dmFyaWFudC5m aWxlVmFyaWFudC50b3BMZXZlbCA9IDA7CisJCQl0aGVPYmplY3QtPnZhcmlhbnQuZmlsZVZh cmlhbnQudG9wID0gdG47CisJCQlicmVhazsKKwkJY2FzZSBZQUZGU19PQkpFQ1RfVFlQRV9E SVJFQ1RPUlk6CisJCQlZSU5JVF9MSVNUX0hFQUQoJnRoZU9iamVjdC0+dmFyaWFudC5kaXJl Y3RvcnlWYXJpYW50LgorCQkJCQljaGlsZHJlbik7CisJCQlicmVhazsKKwkJY2FzZSBZQUZG U19PQkpFQ1RfVFlQRV9TWU1MSU5LOgorCQljYXNlIFlBRkZTX09CSkVDVF9UWVBFX0hBUkRM SU5LOgorCQljYXNlIFlBRkZTX09CSkVDVF9UWVBFX1NQRUNJQUw6CisJCQkvKiBObyBhY3Rp b24gcmVxdWlyZWQgKi8KKwkJCWJyZWFrOworCQljYXNlIFlBRkZTX09CSkVDVF9UWVBFX1VO S05PV046CisJCQkvKiB0b2RvIHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4gKi8KKwkJCWJyZWFr OworCQl9CisJfQorCisJcmV0dXJuIHRoZU9iamVjdDsKK30KKworc3RhdGljIHlhZmZzX09i amVjdCAqeWFmZnNfRmluZE9yQ3JlYXRlT2JqZWN0QnlOdW1iZXIoeWFmZnNfRGV2aWNlICpk ZXYsCisJCQkJCQkgICAgICBpbnQgbnVtYmVyLAorCQkJCQkJICAgICAgeWFmZnNfT2JqZWN0 VHlwZSB0eXBlKQoreworCXlhZmZzX09iamVjdCAqdGhlT2JqZWN0ID0gTlVMTDsKKworCWlm IChudW1iZXIgPiAwKQorCQl0aGVPYmplY3QgPSB5YWZmc19GaW5kT2JqZWN0QnlOdW1iZXIo ZGV2LCBudW1iZXIpOworCisJaWYgKCF0aGVPYmplY3QpCisJCXRoZU9iamVjdCA9IHlhZmZz X0NyZWF0ZU5ld09iamVjdChkZXYsIG51bWJlciwgdHlwZSk7CisKKwlyZXR1cm4gdGhlT2Jq ZWN0OworCit9CisKKworc3RhdGljIFlDSEFSICp5YWZmc19DbG9uZVN0cmluZyhjb25zdCBZ Q0hBUiAqc3RyKQoreworCVlDSEFSICpuZXdTdHIgPSBOVUxMOworCisJaWYgKHN0ciAmJiAq c3RyKSB7CisJCW5ld1N0ciA9IFlNQUxMT0MoKHlhZmZzX3N0cmxlbihzdHIpICsgMSkgKiBz aXplb2YoWUNIQVIpKTsKKwkJaWYgKG5ld1N0cikKKwkJCXlhZmZzX3N0cmNweShuZXdTdHIs IHN0cik7CisJfQorCisJcmV0dXJuIG5ld1N0cjsKKworfQorCisvKgorICogTWtub2QgKGNy ZWF0ZSkgYSBuZXcgb2JqZWN0LgorICogZXF1aXZhbGVudE9iamVjdCBvbmx5IGhhcyBtZWFu aW5nIGZvciBhIGhhcmQgbGluazsKKyAqIGFsaWFzU3RyaW5nIG9ubHkgaGFzIG1lYW5pbmcg Zm9yIGEgc3VtbGluay4KKyAqIHJkZXYgb25seSBoYXMgbWVhbmluZyBmb3IgZGV2aWNlcyAo YSBzdWJzZXQgb2Ygc3BlY2lhbCBvYmplY3RzKQorICovCisKK3N0YXRpYyB5YWZmc19PYmpl Y3QgKnlhZmZzX01rbm9kT2JqZWN0KHlhZmZzX09iamVjdFR5cGUgdHlwZSwKKwkJCQkgICAg ICAgeWFmZnNfT2JqZWN0ICpwYXJlbnQsCisJCQkJICAgICAgIGNvbnN0IFlDSEFSICpuYW1l LAorCQkJCSAgICAgICBfX3UzMiBtb2RlLAorCQkJCSAgICAgICBfX3UzMiB1aWQsCisJCQkJ ICAgICAgIF9fdTMyIGdpZCwKKwkJCQkgICAgICAgeWFmZnNfT2JqZWN0ICplcXVpdmFsZW50 T2JqZWN0LAorCQkJCSAgICAgICBjb25zdCBZQ0hBUiAqYWxpYXNTdHJpbmcsIF9fdTMyIHJk ZXYpCit7CisJeWFmZnNfT2JqZWN0ICppbjsKKwlZQ0hBUiAqc3RyID0gTlVMTDsKKworCXlh ZmZzX0RldmljZSAqZGV2ID0gcGFyZW50LT5teURldjsKKworCS8qIENoZWNrIGlmIHRoZSBl bnRyeSBleGlzdHMuIElmIGl0IGRvZXMgdGhlbiBmYWlsIHRoZSBjYWxsIHNpbmNlIHdlIGRv bid0IHdhbnQgYSBkdXAuKi8KKwlpZiAoeWFmZnNfRmluZE9iamVjdEJ5TmFtZShwYXJlbnQs IG5hbWUpKQorCQlyZXR1cm4gTlVMTDsKKworCWluID0geWFmZnNfQ3JlYXRlTmV3T2JqZWN0 KGRldiwgLTEsIHR5cGUpOworCisJaWYgKCFpbikKKwkJcmV0dXJuIFlBRkZTX0ZBSUw7CisK KwlpZiAodHlwZSA9PSBZQUZGU19PQkpFQ1RfVFlQRV9TWU1MSU5LKSB7CisJCXN0ciA9IHlh ZmZzX0Nsb25lU3RyaW5nKGFsaWFzU3RyaW5nKTsKKwkJaWYgKCFzdHIpIHsKKwkJCXlhZmZz X0ZyZWVPYmplY3QoaW4pOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9CisKKworCisJaWYg KGluKSB7CisJCWluLT5oZHJDaHVuayA9IDA7CisJCWluLT52YWxpZCA9IDE7CisJCWluLT52 YXJpYW50VHlwZSA9IHR5cGU7CisKKwkJaW4tPnlzdF9tb2RlID0gbW9kZTsKKworI2lmZGVm IENPTkZJR19ZQUZGU19XSU5DRQorCQl5ZnNkX1dpbkZpbGVUaW1lTm93KGluLT53aW5fYXRp bWUpOworCQlpbi0+d2luX2N0aW1lWzBdID0gaW4tPndpbl9tdGltZVswXSA9IGluLT53aW5f YXRpbWVbMF07CisJCWluLT53aW5fY3RpbWVbMV0gPSBpbi0+d2luX210aW1lWzFdID0gaW4t Pndpbl9hdGltZVsxXTsKKworI2Vsc2UKKwkJaW4tPnlzdF9hdGltZSA9IGluLT55c3RfbXRp bWUgPSBpbi0+eXN0X2N0aW1lID0gWV9DVVJSRU5UX1RJTUU7CisKKwkJaW4tPnlzdF9yZGV2 ID0gcmRldjsKKwkJaW4tPnlzdF91aWQgPSB1aWQ7CisJCWluLT55c3RfZ2lkID0gZ2lkOwor I2VuZGlmCisJCWluLT5uRGF0YUNodW5rcyA9IDA7CisKKwkJeWFmZnNfU2V0T2JqZWN0TmFt ZShpbiwgbmFtZSk7CisJCWluLT5kaXJ0eSA9IDE7CisKKwkJeWFmZnNfQWRkT2JqZWN0VG9E aXJlY3RvcnkocGFyZW50LCBpbik7CisKKwkJaW4tPm15RGV2ID0gcGFyZW50LT5teURldjsK KworCQlzd2l0Y2ggKHR5cGUpIHsKKwkJY2FzZSBZQUZGU19PQkpFQ1RfVFlQRV9TWU1MSU5L OgorCQkJaW4tPnZhcmlhbnQuc3ltTGlua1ZhcmlhbnQuYWxpYXMgPSBzdHI7CisJCQlicmVh azsKKwkJY2FzZSBZQUZGU19PQkpFQ1RfVFlQRV9IQVJETElOSzoKKwkJCWluLT52YXJpYW50 LmhhcmRMaW5rVmFyaWFudC5lcXVpdmFsZW50T2JqZWN0ID0KKwkJCQllcXVpdmFsZW50T2Jq ZWN0OworCQkJaW4tPnZhcmlhbnQuaGFyZExpbmtWYXJpYW50LmVxdWl2YWxlbnRPYmplY3RJ ZCA9CisJCQkJZXF1aXZhbGVudE9iamVjdC0+b2JqZWN0SWQ7CisJCQl5bGlzdF9hZGQoJmlu LT5oYXJkTGlua3MsICZlcXVpdmFsZW50T2JqZWN0LT5oYXJkTGlua3MpOworCQkJYnJlYWs7 CisJCWNhc2UgWUFGRlNfT0JKRUNUX1RZUEVfRklMRToKKwkJY2FzZSBZQUZGU19PQkpFQ1Rf VFlQRV9ESVJFQ1RPUlk6CisJCWNhc2UgWUFGRlNfT0JKRUNUX1RZUEVfU1BFQ0lBTDoKKwkJ Y2FzZSBZQUZGU19PQkpFQ1RfVFlQRV9VTktOT1dOOgorCQkJLyogZG8gbm90aGluZyAqLwor CQkJYnJlYWs7CisJCX0KKworCQlpZiAoeWFmZnNfVXBkYXRlT2JqZWN0SGVhZGVyKGluLCBu YW1lLCAwLCAwLCAwKSA8IDApIHsKKwkJCS8qIENvdWxkIG5vdCBjcmVhdGUgdGhlIG9iamVj dCBoZWFkZXIsIGZhaWwgdGhlIGNyZWF0aW9uICovCisJCQl5YWZmc19EZWxldGVPYmplY3Qo aW4pOworCQkJaW4gPSBOVUxMOworCQl9CisKKwkJeWFmZnNfVXBkYXRlUGFyZW50KHBhcmVu dCk7CisJfQorCisJcmV0dXJuIGluOworfQorCit5YWZmc19PYmplY3QgKnlhZmZzX01rbm9k RmlsZSh5YWZmc19PYmplY3QgKnBhcmVudCwgY29uc3QgWUNIQVIgKm5hbWUsCisJCQlfX3Uz MiBtb2RlLCBfX3UzMiB1aWQsIF9fdTMyIGdpZCkKK3sKKwlyZXR1cm4geWFmZnNfTWtub2RP YmplY3QoWUFGRlNfT0JKRUNUX1RZUEVfRklMRSwgcGFyZW50LCBuYW1lLCBtb2RlLAorCQkJ CXVpZCwgZ2lkLCBOVUxMLCBOVUxMLCAwKTsKK30KKworeWFmZnNfT2JqZWN0ICp5YWZmc19N a25vZERpcmVjdG9yeSh5YWZmc19PYmplY3QgKnBhcmVudCwgY29uc3QgWUNIQVIgKm5hbWUs CisJCQkJX191MzIgbW9kZSwgX191MzIgdWlkLCBfX3UzMiBnaWQpCit7CisJcmV0dXJuIHlh ZmZzX01rbm9kT2JqZWN0KFlBRkZTX09CSkVDVF9UWVBFX0RJUkVDVE9SWSwgcGFyZW50LCBu YW1lLAorCQkJCSBtb2RlLCB1aWQsIGdpZCwgTlVMTCwgTlVMTCwgMCk7Cit9CisKK3lhZmZz X09iamVjdCAqeWFmZnNfTWtub2RTcGVjaWFsKHlhZmZzX09iamVjdCAqcGFyZW50LCBjb25z dCBZQ0hBUiAqbmFtZSwKKwkJCQlfX3UzMiBtb2RlLCBfX3UzMiB1aWQsIF9fdTMyIGdpZCwg X191MzIgcmRldikKK3sKKwlyZXR1cm4geWFmZnNfTWtub2RPYmplY3QoWUFGRlNfT0JKRUNU X1RZUEVfU1BFQ0lBTCwgcGFyZW50LCBuYW1lLCBtb2RlLAorCQkJCSB1aWQsIGdpZCwgTlVM TCwgTlVMTCwgcmRldik7Cit9CisKK3lhZmZzX09iamVjdCAqeWFmZnNfTWtub2RTeW1MaW5r KHlhZmZzX09iamVjdCAqcGFyZW50LCBjb25zdCBZQ0hBUiAqbmFtZSwKKwkJCQlfX3UzMiBt b2RlLCBfX3UzMiB1aWQsIF9fdTMyIGdpZCwKKwkJCQljb25zdCBZQ0hBUiAqYWxpYXMpCit7 CisJcmV0dXJuIHlhZmZzX01rbm9kT2JqZWN0KFlBRkZTX09CSkVDVF9UWVBFX1NZTUxJTkss IHBhcmVudCwgbmFtZSwgbW9kZSwKKwkJCQl1aWQsIGdpZCwgTlVMTCwgYWxpYXMsIDApOwor fQorCisvKiB5YWZmc19MaW5rIHJldHVybnMgdGhlIG9iamVjdCBpZCBvZiB0aGUgZXF1aXZh bGVudCBvYmplY3QuKi8KK3lhZmZzX09iamVjdCAqeWFmZnNfTGluayh5YWZmc19PYmplY3Qg KnBhcmVudCwgY29uc3QgWUNIQVIgKm5hbWUsCisJCQl5YWZmc19PYmplY3QgKmVxdWl2YWxl bnRPYmplY3QpCit7CisJLyogR2V0IHRoZSByZWFsIG9iamVjdCBpbiBjYXNlIHdlIHdlcmUg ZmVkIGEgaGFyZCBsaW5rIGFzIGFuIGVxdWl2YWxlbnQgb2JqZWN0ICovCisJZXF1aXZhbGVu dE9iamVjdCA9IHlhZmZzX0dldEVxdWl2YWxlbnRPYmplY3QoZXF1aXZhbGVudE9iamVjdCk7 CisKKwlpZiAoeWFmZnNfTWtub2RPYmplY3QKKwkgICAgKFlBRkZTX09CSkVDVF9UWVBFX0hB UkRMSU5LLCBwYXJlbnQsIG5hbWUsIDAsIDAsIDAsCisJICAgICBlcXVpdmFsZW50T2JqZWN0 LCBOVUxMLCAwKSkgeworCQlyZXR1cm4gZXF1aXZhbGVudE9iamVjdDsKKwl9IGVsc2Ugewor CQlyZXR1cm4gTlVMTDsKKwl9CisKK30KKworc3RhdGljIGludCB5YWZmc19DaGFuZ2VPYmpl Y3ROYW1lKHlhZmZzX09iamVjdCAqb2JqLCB5YWZmc19PYmplY3QgKm5ld0RpciwKKwkJCQlj b25zdCBZQ0hBUiAqbmV3TmFtZSwgaW50IGZvcmNlLCBpbnQgc2hhZG93cykKK3sKKwlpbnQg dW5saW5rT3A7CisJaW50IGRlbGV0ZU9wOworCisJeWFmZnNfT2JqZWN0ICpleGlzdGluZ1Rh cmdldDsKKworCWlmIChuZXdEaXIgPT0gTlVMTCkKKwkJbmV3RGlyID0gb2JqLT5wYXJlbnQ7 CS8qIHVzZSB0aGUgb2xkIGRpcmVjdG9yeSAqLworCisJaWYgKG5ld0Rpci0+dmFyaWFudFR5 cGUgIT0gWUFGRlNfT0JKRUNUX1RZUEVfRElSRUNUT1JZKSB7CisJCVQoWUFGRlNfVFJBQ0Vf QUxXQVlTLAorCQkgIChUU1RSCisJCSAgICgidHJhZ2VkeTogeWFmZnNfQ2hhbmdlT2JqZWN0 TmFtZTogbmV3RGlyIGlzIG5vdCBhIGRpcmVjdG9yeSIKKwkJICAgIFRFTkRTVFIpKSk7CisJ CVlCVUcoKTsKKwl9CisKKwkvKiBUT0RPOiBEbyB3ZSBuZWVkIHRoaXMgZGlmZmVyZW50IGhh bmRsaW5nIGZvciBZQUZGUzIgYW5kIFlBRkZTMT8/ICovCisJaWYgKG9iai0+bXlEZXYtPmlz WWFmZnMyKQorCQl1bmxpbmtPcCA9IChuZXdEaXIgPT0gb2JqLT5teURldi0+dW5saW5rZWRE aXIpOworCWVsc2UKKwkJdW5saW5rT3AgPSAobmV3RGlyID09IG9iai0+bXlEZXYtPnVubGlu a2VkRGlyCisJCQkgICAgJiYgb2JqLT52YXJpYW50VHlwZSA9PSBZQUZGU19PQkpFQ1RfVFlQ RV9GSUxFKTsKKworCWRlbGV0ZU9wID0gKG5ld0RpciA9PSBvYmotPm15RGV2LT5kZWxldGVk RGlyKTsKKworCWV4aXN0aW5nVGFyZ2V0ID0geWFmZnNfRmluZE9iamVjdEJ5TmFtZShuZXdE aXIsIG5ld05hbWUpOworCisJLyogSWYgdGhlIG9iamVjdCBpcyBhIGZpbGUgZ29pbmcgaW50 byB0aGUgdW5saW5rZWQgZGlyZWN0b3J5LAorCSAqICAgdGhlbiBpdCBpcyBPSyB0byBqdXN0 IHN0dWZmIGl0IGluIHNpbmNlIGR1cGxpY2F0ZSBuYW1lcyBhcmUgYWxsb3dlZC4KKwkgKiAg IGVsc2Ugb25seSBwcm9jZWVkIGlmIHRoZSBuZXcgbmFtZSBkb2VzIG5vdCBleGlzdCBhbmQg aWYgd2UncmUgcHV0dGluZworCSAqICAgaXQgaW50byBhIGRpcmVjdG9yeS4KKwkgKi8KKwlp ZiAoKHVubGlua09wIHx8CisJICAgICBkZWxldGVPcCB8fAorCSAgICAgZm9yY2UgfHwKKwkg ICAgIChzaGFkb3dzID4gMCkgfHwKKwkgICAgICFleGlzdGluZ1RhcmdldCkgJiYKKwkgICAg bmV3RGlyLT52YXJpYW50VHlwZSA9PSBZQUZGU19PQkpFQ1RfVFlQRV9ESVJFQ1RPUlkpIHsK KwkJeWFmZnNfU2V0T2JqZWN0TmFtZShvYmosIG5ld05hbWUpOworCQlvYmotPmRpcnR5ID0g MTsKKworCQl5YWZmc19BZGRPYmplY3RUb0RpcmVjdG9yeShuZXdEaXIsIG9iaik7CisKKwkJ aWYgKHVubGlua09wKQorCQkJb2JqLT51bmxpbmtlZCA9IDE7CisKKwkJLyogSWYgaXQgaXMg YSBkZWxldGlvbiB0aGVuIHdlIG1hcmsgaXQgYXMgYSBzaHJpbmsgZm9yIGdjIHB1cnBvc2Vz LiAqLworCQlpZiAoeWFmZnNfVXBkYXRlT2JqZWN0SGVhZGVyKG9iaiwgbmV3TmFtZSwgMCwg ZGVsZXRlT3AsIHNoYWRvd3MpID49IDApCisJCQlyZXR1cm4gWUFGRlNfT0s7CisJfQorCisJ cmV0dXJuIFlBRkZTX0ZBSUw7Cit9CisKK2ludCB5YWZmc19SZW5hbWVPYmplY3QoeWFmZnNf T2JqZWN0ICpvbGREaXIsIGNvbnN0IFlDSEFSICpvbGROYW1lLAorCQl5YWZmc19PYmplY3Qg Km5ld0RpciwgY29uc3QgWUNIQVIgKm5ld05hbWUpCit7CisJeWFmZnNfT2JqZWN0ICpvYmog PSBOVUxMOworCXlhZmZzX09iamVjdCAqZXhpc3RpbmdUYXJnZXQgPSBOVUxMOworCWludCBm b3JjZSA9IDA7CisKKworCWlmICghb2xkRGlyIHx8IG9sZERpci0+dmFyaWFudFR5cGUgIT0g WUFGRlNfT0JKRUNUX1RZUEVfRElSRUNUT1JZKQorCQlZQlVHKCk7CisJaWYgKCFuZXdEaXIg fHwgbmV3RGlyLT52YXJpYW50VHlwZSAhPSBZQUZGU19PQkpFQ1RfVFlQRV9ESVJFQ1RPUlkp CisJCVlCVUcoKTsKKworI2lmZGVmIENPTkZJR19ZQUZGU19DQVNFX0lOU0VOU0lUSVZFCisJ LyogU3BlY2lhbCBjYXNlIGZvciBjYXNlIGluc2Vtc2l0aXZlIHN5c3RlbXMgKGVnLiBXaW5D RSkuCisJICogV2hpbGUgbG9vay11cCBpcyBjYXNlIGluc2Vuc2l0aXZlLCB0aGUgbmFtZSBp c24ndC4KKwkgKiBUaGVyZWZvcmUgd2UgbWlnaHQgd2FudCB0byBjaGFuZ2UgeC50eHQgdG8g WC50eHQKKwkqLworCWlmIChvbGREaXIgPT0gbmV3RGlyICYmIHlhZmZzX3N0cmNtcChvbGRO YW1lLCBuZXdOYW1lKSA9PSAwKQorCQlmb3JjZSA9IDE7CisjZW5kaWYKKworCWVsc2UgaWYg KHlhZmZzX3N0cmxlbihuZXdOYW1lKSA+IFlBRkZTX01BWF9OQU1FX0xFTkdUSCkKKwkJLyog RU5BTUVUT09MT05HICovCisJCXJldHVybiBZQUZGU19GQUlMOworCisJb2JqID0geWFmZnNf RmluZE9iamVjdEJ5TmFtZShvbGREaXIsIG9sZE5hbWUpOworCisJaWYgKG9iaiAmJiBvYmot PnJlbmFtZUFsbG93ZWQpIHsKKworCQkvKiBOb3cgZG8gdGhlIGhhbmRsaW5nIGZvciBhbiBl eGlzdGluZyB0YXJnZXQsIGlmIHRoZXJlIGlzIG9uZSAqLworCisJCWV4aXN0aW5nVGFyZ2V0 ID0geWFmZnNfRmluZE9iamVjdEJ5TmFtZShuZXdEaXIsIG5ld05hbWUpOworCQlpZiAoZXhp c3RpbmdUYXJnZXQgJiYKKwkJCWV4aXN0aW5nVGFyZ2V0LT52YXJpYW50VHlwZSA9PSBZQUZG U19PQkpFQ1RfVFlQRV9ESVJFQ1RPUlkgJiYKKwkJCSF5bGlzdF9lbXB0eSgmZXhpc3RpbmdU YXJnZXQtPnZhcmlhbnQuZGlyZWN0b3J5VmFyaWFudC5jaGlsZHJlbikpIHsKKwkJCS8qIFRo ZXJlIGlzIGEgdGFyZ2V0IHRoYXQgaXMgYSBub24tZW1wdHkgZGlyZWN0b3J5LCBzbyB3ZSBm YWlsICovCisJCQlyZXR1cm4gWUFGRlNfRkFJTDsJLyogRUVYSVNUIG9yIEVOT1RFTVBUWSAq LworCQl9IGVsc2UgaWYgKGV4aXN0aW5nVGFyZ2V0ICYmIGV4aXN0aW5nVGFyZ2V0ICE9IG9i aikgeworCQkJLyogTnVrZSB0aGUgdGFyZ2V0IGZpcnN0LCB1c2luZyBzaGFkb3dpbmcsCisJ CQkgKiBidXQgb25seSBpZiBpdCBpc24ndCB0aGUgc2FtZSBvYmplY3QKKwkJCSAqLworCQkJ eWFmZnNfQ2hhbmdlT2JqZWN0TmFtZShvYmosIG5ld0RpciwgbmV3TmFtZSwgZm9yY2UsCisJ CQkJCQlleGlzdGluZ1RhcmdldC0+b2JqZWN0SWQpOworCQkJeWFmZnNfVW5saW5rT2JqZWN0 KGV4aXN0aW5nVGFyZ2V0KTsKKwkJfQorCQl5YWZmc19VcGRhdGVQYXJlbnQob2xkRGlyKTsK KwkJaWYobmV3RGlyICE9IG9sZERpcikKKwkJCXlhZmZzX1VwZGF0ZVBhcmVudChuZXdEaXIp OworCisJCXJldHVybiB5YWZmc19DaGFuZ2VPYmplY3ROYW1lKG9iaiwgbmV3RGlyLCBuZXdO YW1lLCAxLCAwKTsKKwl9CisJcmV0dXJuIFlBRkZTX0ZBSUw7Cit9CisKKy8qLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSBCbG9jayBNYW5hZ2VtZW50IGFuZCBQYWdlIEFsbG9jYXRpb24g LS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgeWFmZnNfSW5pdGlhbGlzZUJsb2Nr cyh5YWZmc19EZXZpY2UgKmRldikKK3sKKwlpbnQgbkJsb2NrcyA9IGRldi0+aW50ZXJuYWxF bmRCbG9jayAtIGRldi0+aW50ZXJuYWxTdGFydEJsb2NrICsgMTsKKworCWRldi0+YmxvY2tJ bmZvID0gTlVMTDsKKwlkZXYtPmNodW5rQml0cyA9IE5VTEw7CisKKwlkZXYtPmFsbG9jYXRp b25CbG9jayA9IC0xOwkvKiBmb3JjZSBpdCB0byBnZXQgYSBuZXcgb25lICovCisKKwkvKiBJ ZiB0aGUgZmlyc3QgYWxsb2NhdGlvbiBzdHJhdGVneSBmYWlscywgdGhyeSB0aGUgYWx0ZXJu YXRlIG9uZSAqLworCWRldi0+YmxvY2tJbmZvID0gWU1BTExPQyhuQmxvY2tzICogc2l6ZW9m KHlhZmZzX0Jsb2NrSW5mbykpOworCWlmICghZGV2LT5ibG9ja0luZm8pIHsKKwkJZGV2LT5i bG9ja0luZm8gPSBZTUFMTE9DX0FMVChuQmxvY2tzICogc2l6ZW9mKHlhZmZzX0Jsb2NrSW5m bykpOworCQlkZXYtPmJsb2NrSW5mb0FsdCA9IDE7CisJfSBlbHNlCisJCWRldi0+YmxvY2tJ bmZvQWx0ID0gMDsKKworCWlmIChkZXYtPmJsb2NrSW5mbykgeworCQkvKiBTZXQgdXAgZHlu YW1pYyBibG9ja2luZm8gc3R1ZmYuICovCisJCWRldi0+Y2h1bmtCaXRtYXBTdHJpZGUgPSAo ZGV2LT5uQ2h1bmtzUGVyQmxvY2sgKyA3KSAvIDg7IC8qIHJvdW5kIHVwIGJ5dGVzICovCisJ CWRldi0+Y2h1bmtCaXRzID0gWU1BTExPQyhkZXYtPmNodW5rQml0bWFwU3RyaWRlICogbkJs b2Nrcyk7CisJCWlmICghZGV2LT5jaHVua0JpdHMpIHsKKwkJCWRldi0+Y2h1bmtCaXRzID0g WU1BTExPQ19BTFQoZGV2LT5jaHVua0JpdG1hcFN0cmlkZSAqIG5CbG9ja3MpOworCQkJZGV2 LT5jaHVua0JpdHNBbHQgPSAxOworCQl9IGVsc2UKKwkJCWRldi0+Y2h1bmtCaXRzQWx0ID0g MDsKKwl9CisKKwlpZiAoZGV2LT5ibG9ja0luZm8gJiYgZGV2LT5jaHVua0JpdHMpIHsKKwkJ bWVtc2V0KGRldi0+YmxvY2tJbmZvLCAwLCBuQmxvY2tzICogc2l6ZW9mKHlhZmZzX0Jsb2Nr SW5mbykpOworCQltZW1zZXQoZGV2LT5jaHVua0JpdHMsIDAsIGRldi0+Y2h1bmtCaXRtYXBT dHJpZGUgKiBuQmxvY2tzKTsKKwkJcmV0dXJuIFlBRkZTX09LOworCX0KKworCXJldHVybiBZ QUZGU19GQUlMOworfQorCitzdGF0aWMgdm9pZCB5YWZmc19EZWluaXRpYWxpc2VCbG9ja3Mo eWFmZnNfRGV2aWNlICpkZXYpCit7CisJaWYgKGRldi0+YmxvY2tJbmZvQWx0ICYmIGRldi0+ YmxvY2tJbmZvKQorCQlZRlJFRV9BTFQoZGV2LT5ibG9ja0luZm8pOworCWVsc2UgaWYgKGRl di0+YmxvY2tJbmZvKQorCQlZRlJFRShkZXYtPmJsb2NrSW5mbyk7CisKKwlkZXYtPmJsb2Nr SW5mb0FsdCA9IDA7CisKKwlkZXYtPmJsb2NrSW5mbyA9IE5VTEw7CisKKwlpZiAoZGV2LT5j aHVua0JpdHNBbHQgJiYgZGV2LT5jaHVua0JpdHMpCisJCVlGUkVFX0FMVChkZXYtPmNodW5r Qml0cyk7CisJZWxzZSBpZiAoZGV2LT5jaHVua0JpdHMpCisJCVlGUkVFKGRldi0+Y2h1bmtC aXRzKTsKKwlkZXYtPmNodW5rQml0c0FsdCA9IDA7CisJZGV2LT5jaHVua0JpdHMgPSBOVUxM OworfQorCitzdGF0aWMgaW50IHlhZmZzX0Jsb2NrTm90RGlzcXVhbGlmaWVkRnJvbUdDKHlh ZmZzX0RldmljZSAqZGV2LAorCQkJCQl5YWZmc19CbG9ja0luZm8gKmJpKQoreworCWludCBp OworCV9fdTMyIHNlcTsKKwl5YWZmc19CbG9ja0luZm8gKmI7CisKKwlpZiAoIWRldi0+aXNZ YWZmczIpCisJCXJldHVybiAxOwkvKiBkaXNxdWFsaWZpY2F0aW9uIG9ubHkgYXBwbGllcyB0 byB5YWZmczIuICovCisKKwlpZiAoIWJpLT5oYXNTaHJpbmtIZWFkZXIpCisJCXJldHVybiAx OwkvKiBjYW4gZ2MgKi8KKworCS8qIEZpbmQgdGhlIG9sZGVzdCBkaXJ0eSBzZXF1ZW5jZSBu dW1iZXIgaWYgd2UgZG9uJ3Qga25vdyBpdCBhbmQgc2F2ZSBpdAorCSAqIHNvIHdlIGRvbid0 IGhhdmUgdG8ga2VlcCByZWNvbXB1dGluZyBpdC4KKwkgKi8KKwlpZiAoIWRldi0+b2xkZXN0 RGlydHlTZXF1ZW5jZSkgeworCQlzZXEgPSBkZXYtPnNlcXVlbmNlTnVtYmVyOworCisJCWZv ciAoaSA9IGRldi0+aW50ZXJuYWxTdGFydEJsb2NrOyBpIDw9IGRldi0+aW50ZXJuYWxFbmRC bG9jazsKKwkJCQlpKyspIHsKKwkJCWIgPSB5YWZmc19HZXRCbG9ja0luZm8oZGV2LCBpKTsK KwkJCWlmIChiLT5ibG9ja1N0YXRlID09IFlBRkZTX0JMT0NLX1NUQVRFX0ZVTEwgJiYKKwkJ CSAgICAoYi0+cGFnZXNJblVzZSAtIGItPnNvZnREZWxldGlvbnMpIDwKKwkJCSAgICBkZXYt Pm5DaHVua3NQZXJCbG9jayAmJiBiLT5zZXF1ZW5jZU51bWJlciA8IHNlcSkgeworCQkJCXNl cSA9IGItPnNlcXVlbmNlTnVtYmVyOworCQkJfQorCQl9CisJCWRldi0+b2xkZXN0RGlydHlT ZXF1ZW5jZSA9IHNlcTsKKwl9CisKKwkvKiBDYW4ndCBkbyBnYyBvZiB0aGlzIGJsb2NrIGlm IHRoZXJlIGFyZSBhbnkgYmxvY2tzIG9sZGVyIHRoYW4gdGhpcyBvbmUgdGhhdCBoYXZlCisJ ICogZGlzY2FyZGVkIHBhZ2VzLgorCSAqLworCXJldHVybiAoYmktPnNlcXVlbmNlTnVtYmVy IDw9IGRldi0+b2xkZXN0RGlydHlTZXF1ZW5jZSk7Cit9CisKKy8qIEZpbmREaXJldGllc3RC bG9jayBpcyB1c2VkIHRvIHNlbGVjdCB0aGUgZGlydGllc3QgYmxvY2sgKG9yIGNsb3NlIGVu b3VnaCkKKyAqIGZvciBnYXJiYWdlIGNvbGxlY3Rpb24uCisgKi8KKworc3RhdGljIGludCB5 YWZmc19GaW5kQmxvY2tGb3JHYXJiYWdlQ29sbGVjdGlvbih5YWZmc19EZXZpY2UgKmRldiwK KwkJCQkJaW50IGFnZ3Jlc3NpdmUpCit7CisJaW50IGIgPSBkZXYtPmN1cnJlbnREaXJ0eUNo ZWNrZXI7CisKKwlpbnQgaTsKKwlpbnQgaXRlcmF0aW9uczsKKwlpbnQgZGlydGllc3QgPSAt MTsKKwlpbnQgcGFnZXNJblVzZSA9IDA7CisJaW50IHByaW9yaXRpc2VkID0gMDsKKwl5YWZm c19CbG9ja0luZm8gKmJpOworCWludCBwZW5kaW5nUHJpb3JpdGlzZWRFeGlzdCA9IDA7CisK KwkvKiBGaXJzdCBsZXQncyBzZWUgaWYgd2UgbmVlZCB0byBncmFiIGEgcHJpb3JpdGlzZWQg YmxvY2sgKi8KKwlpZiAoZGV2LT5oYXNQZW5kaW5nUHJpb3JpdGlzZWRHQ3MpIHsKKwkJZm9y IChpID0gZGV2LT5pbnRlcm5hbFN0YXJ0QmxvY2s7IGkgPCBkZXYtPmludGVybmFsRW5kQmxv Y2sgJiYgIXByaW9yaXRpc2VkOyBpKyspIHsKKworCQkJYmkgPSB5YWZmc19HZXRCbG9ja0lu Zm8oZGV2LCBpKTsKKwkJCS8qIHlhZmZzX1ZlcmlmeUJsb2NrKGRldixiaSxpKTsgKi8KKwor CQkJaWYgKGJpLT5nY1ByaW9yaXRpc2UpIHsKKwkJCQlwZW5kaW5nUHJpb3JpdGlzZWRFeGlz dCA9IDE7CisJCQkJaWYgKGJpLT5ibG9ja1N0YXRlID09IFlBRkZTX0JMT0NLX1NUQVRFX0ZV TEwgJiYKKwkJCQkgICB5YWZmc19CbG9ja05vdERpc3F1YWxpZmllZEZyb21HQyhkZXYsIGJp KSkgeworCQkJCQlwYWdlc0luVXNlID0gKGJpLT5wYWdlc0luVXNlIC0gYmktPnNvZnREZWxl dGlvbnMpOworCQkJCQlkaXJ0aWVzdCA9IGk7CisJCQkJCXByaW9yaXRpc2VkID0gMTsKKwkJ CQkJYWdncmVzc2l2ZSA9IDE7IC8qIEZvb2wgdGhlIG5vbi1hZ2dyZXNzaXZlIHNraXAgbG9n aXYgYmVsb3cgKi8KKwkJCQl9CisJCQl9CisJCX0KKworCQlpZiAoIXBlbmRpbmdQcmlvcml0 aXNlZEV4aXN0KSAvKiBOb25lIGZvdW5kLCBzbyB3ZSBjYW4gY2xlYXIgdGhpcyAqLworCQkJ ZGV2LT5oYXNQZW5kaW5nUHJpb3JpdGlzZWRHQ3MgPSAwOworCX0KKworCS8qIElmIHdlJ3Jl IGRvaW5nIGFnZ3Jlc3NpdmUgR0MgdGhlbiB3ZSBhcmUgaGFwcHkgdG8gdGFrZSBhIGxlc3Mt ZGlydHkgYmxvY2ssIGFuZAorCSAqIHNlYXJjaCBoYXJkZXIuCisJICogZWxzZSAod2UncmUg ZG9pbmcgYSBsZWFzdXJlbHkgZ2MpLCB0aGVuIHdlIG9ubHkgYm90aGVyIHRvIGRvIHRoaXMg aWYgdGhlCisJICogYmxvY2sgaGFzIG9ubHkgYSBmZXcgcGFnZXMgaW4gdXNlLgorCSAqLwor CisJZGV2LT5ub25BZ2dyZXNzaXZlU2tpcC0tOworCisJaWYgKCFhZ2dyZXNzaXZlICYmIChk ZXYtPm5vbkFnZ3Jlc3NpdmVTa2lwID4gMCkpCisJCXJldHVybiAtMTsKKworCWlmICghcHJp b3JpdGlzZWQpCisJCXBhZ2VzSW5Vc2UgPQorCQkJKGFnZ3Jlc3NpdmUpID8gZGV2LT5uQ2h1 bmtzUGVyQmxvY2sgOiBZQUZGU19QQVNTSVZFX0dDX0NIVU5LUyArIDE7CisKKwlpZiAoYWdn cmVzc2l2ZSkKKwkJaXRlcmF0aW9ucyA9CisJCSAgICBkZXYtPmludGVybmFsRW5kQmxvY2sg LSBkZXYtPmludGVybmFsU3RhcnRCbG9jayArIDE7CisJZWxzZSB7CisJCWl0ZXJhdGlvbnMg PQorCQkgICAgZGV2LT5pbnRlcm5hbEVuZEJsb2NrIC0gZGV2LT5pbnRlcm5hbFN0YXJ0Qmxv Y2sgKyAxOworCQlpdGVyYXRpb25zID0gaXRlcmF0aW9ucyAvIDE2OworCQlpZiAoaXRlcmF0 aW9ucyA+IDIwMCkKKwkJCWl0ZXJhdGlvbnMgPSAyMDA7CisJfQorCisJZm9yIChpID0gMDsg aSA8PSBpdGVyYXRpb25zICYmIHBhZ2VzSW5Vc2UgPiAwICYmICFwcmlvcml0aXNlZDsgaSsr KSB7CisJCWIrKzsKKwkJaWYgKGIgPCBkZXYtPmludGVybmFsU3RhcnRCbG9jayB8fCBiID4g ZGV2LT5pbnRlcm5hbEVuZEJsb2NrKQorCQkJYiA9IGRldi0+aW50ZXJuYWxTdGFydEJsb2Nr OworCisJCWlmIChiIDwgZGV2LT5pbnRlcm5hbFN0YXJ0QmxvY2sgfHwgYiA+IGRldi0+aW50 ZXJuYWxFbmRCbG9jaykgeworCQkJVChZQUZGU19UUkFDRV9FUlJPUiwKKwkJCSAgKFRTVFIo IioqPj4gQmxvY2sgJWQgaXMgbm90IHZhbGlkIiBURU5EU1RSKSwgYikpOworCQkJWUJVRygp OworCQl9CisKKwkJYmkgPSB5YWZmc19HZXRCbG9ja0luZm8oZGV2LCBiKTsKKworCQlpZiAo YmktPmJsb2NrU3RhdGUgPT0gWUFGRlNfQkxPQ0tfU1RBVEVfRlVMTCAmJgorCQkJKGJpLT5w YWdlc0luVXNlIC0gYmktPnNvZnREZWxldGlvbnMpIDwgcGFnZXNJblVzZSAmJgorCQkJCXlh ZmZzX0Jsb2NrTm90RGlzcXVhbGlmaWVkRnJvbUdDKGRldiwgYmkpKSB7CisJCQlkaXJ0aWVz dCA9IGI7CisJCQlwYWdlc0luVXNlID0gKGJpLT5wYWdlc0luVXNlIC0gYmktPnNvZnREZWxl dGlvbnMpOworCQl9CisJfQorCisJZGV2LT5jdXJyZW50RGlydHlDaGVja2VyID0gYjsKKwor CWlmIChkaXJ0aWVzdCA+IDApIHsKKwkJVChZQUZGU19UUkFDRV9HQywKKwkJICAoVFNUUigi R0MgU2VsZWN0ZWQgYmxvY2sgJWQgd2l0aCAlZCBmcmVlLCBwcmlvcml0aXNlZDolZCIgVEVO RFNUUiksIGRpcnRpZXN0LAorCQkgICBkZXYtPm5DaHVua3NQZXJCbG9jayAtIHBhZ2VzSW5V c2UsIHByaW9yaXRpc2VkKSk7CisJfQorCisJZGV2LT5vbGRlc3REaXJ0eVNlcXVlbmNlID0g MDsKKworCWlmIChkaXJ0aWVzdCA+IDApCisJCWRldi0+bm9uQWdncmVzc2l2ZVNraXAgPSA0 OworCisJcmV0dXJuIGRpcnRpZXN0OworfQorCitzdGF0aWMgdm9pZCB5YWZmc19CbG9ja0Jl Y2FtZURpcnR5KHlhZmZzX0RldmljZSAqZGV2LCBpbnQgYmxvY2tObykKK3sKKwl5YWZmc19C bG9ja0luZm8gKmJpID0geWFmZnNfR2V0QmxvY2tJbmZvKGRldiwgYmxvY2tObyk7CisKKwlp bnQgZXJhc2VkT2sgPSAwOworCisJLyogSWYgdGhlIGJsb2NrIGlzIHN0aWxsIGhlYWx0aHkg ZXJhc2UgaXQgYW5kIG1hcmsgYXMgY2xlYW4uCisJICogSWYgdGhlIGJsb2NrIGhhcyBoYWQg YSBkYXRhIGZhaWx1cmUsIHRoZW4gcmV0aXJlIGl0LgorCSAqLworCisJVChZQUZGU19UUkFD RV9HQyB8IFlBRkZTX1RSQUNFX0VSQVNFLAorCQkoVFNUUigieWFmZnNfQmxvY2tCZWNhbWVE aXJ0eSBibG9jayAlZCBzdGF0ZSAlZCAlcyJURU5EU1RSKSwKKwkJYmxvY2tObywgYmktPmJs b2NrU3RhdGUsIChiaS0+bmVlZHNSZXRpcmluZykgPyAibmVlZHMgcmV0aXJpbmciIDogIiIp KTsKKworCWJpLT5ibG9ja1N0YXRlID0gWUFGRlNfQkxPQ0tfU1RBVEVfRElSVFk7CisKKwlp ZiAoIWJpLT5uZWVkc1JldGlyaW5nKSB7CisJCXlhZmZzX0ludmFsaWRhdGVDaGVja3BvaW50 KGRldik7CisJCWVyYXNlZE9rID0geWFmZnNfRXJhc2VCbG9ja0luTkFORChkZXYsIGJsb2Nr Tm8pOworCQlpZiAoIWVyYXNlZE9rKSB7CisJCQlkZXYtPm5FcmFzdXJlRmFpbHVyZXMrKzsK KwkJCVQoWUFGRlNfVFJBQ0VfRVJST1IgfCBZQUZGU19UUkFDRV9CQURfQkxPQ0tTLAorCQkJ ICAoVFNUUigiKio+PiBFcmFzdXJlIGZhaWxlZCAlZCIgVEVORFNUUiksIGJsb2NrTm8pKTsK KwkJfQorCX0KKworCWlmIChlcmFzZWRPayAmJgorCSAgICAoKHlhZmZzX3RyYWNlTWFzayAm IFlBRkZTX1RSQUNFX0VSQVNFKSB8fCAheWFmZnNfU2tpcFZlcmlmaWNhdGlvbihkZXYpKSkg eworCQlpbnQgaTsKKwkJZm9yIChpID0gMDsgaSA8IGRldi0+bkNodW5rc1BlckJsb2NrOyBp KyspIHsKKwkJCWlmICgheWFmZnNfQ2hlY2tDaHVua0VyYXNlZAorCQkJICAgIChkZXYsIGJs b2NrTm8gKiBkZXYtPm5DaHVua3NQZXJCbG9jayArIGkpKSB7CisJCQkJVChZQUZGU19UUkFD RV9FUlJPUiwKKwkJCQkgIChUU1RSCisJCQkJICAgKCI+PkJsb2NrICVkIGVyYXN1cmUgc3Vw cG9zZWRseSBPSywgYnV0IGNodW5rICVkIG5vdCBlcmFzZWQiCisJCQkJICAgIFRFTkRTVFIp LCBibG9ja05vLCBpKSk7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoZXJhc2VkT2spIHsKKwkJ LyogQ2xlYW4gaXQgdXAuLi4gKi8KKwkJYmktPmJsb2NrU3RhdGUgPSBZQUZGU19CTE9DS19T VEFURV9FTVBUWTsKKwkJZGV2LT5uRXJhc2VkQmxvY2tzKys7CisJCWJpLT5wYWdlc0luVXNl ID0gMDsKKwkJYmktPnNvZnREZWxldGlvbnMgPSAwOworCQliaS0+aGFzU2hyaW5rSGVhZGVy ID0gMDsKKwkJYmktPnNraXBFcmFzZWRDaGVjayA9IDE7ICAvKiBUaGlzIGlzIGNsZWFuLCBz byBubyBuZWVkIHRvIGNoZWNrICovCisJCWJpLT5nY1ByaW9yaXRpc2UgPSAwOworCQl5YWZm c19DbGVhckNodW5rQml0cyhkZXYsIGJsb2NrTm8pOworCisJCVQoWUFGRlNfVFJBQ0VfRVJB U0UsCisJCSAgKFRTVFIoIkVyYXNlZCBibG9jayAlZCIgVEVORFNUUiksIGJsb2NrTm8pKTsK Kwl9IGVsc2UgeworCQlkZXYtPm5GcmVlQ2h1bmtzIC09IGRldi0+bkNodW5rc1BlckJsb2Nr OwkvKiBXZSBsb3N0IGEgYmxvY2sgb2YgZnJlZSBzcGFjZSAqLworCisJCXlhZmZzX1JldGly ZUJsb2NrKGRldiwgYmxvY2tObyk7CisJCVQoWUFGRlNfVFJBQ0VfRVJST1IgfCBZQUZGU19U UkFDRV9CQURfQkxPQ0tTLAorCQkgIChUU1RSKCIqKj4+IEJsb2NrICVkIHJldGlyZWQiIFRF TkRTVFIpLCBibG9ja05vKSk7CisJfQorfQorCitzdGF0aWMgaW50IHlhZmZzX0ZpbmRCbG9j a0ZvckFsbG9jYXRpb24oeWFmZnNfRGV2aWNlICpkZXYpCit7CisJaW50IGk7CisKKwl5YWZm c19CbG9ja0luZm8gKmJpOworCisJaWYgKGRldi0+bkVyYXNlZEJsb2NrcyA8IDEpIHsKKwkJ LyogSG9vc3Rlcm1hbiB3ZSd2ZSBnb3QgYSBwcm9ibGVtLgorCQkgKiBDYW4ndCBnZXQgc3Bh Y2UgdG8gZ2MKKwkJICovCisJCVQoWUFGRlNfVFJBQ0VfRVJST1IsCisJCSAgKFRTVFIoInlh ZmZzIHRyYWdlZHk6IG5vIG1vcmUgZXJhc2VkIGJsb2NrcyIgVEVORFNUUikpKTsKKworCQly ZXR1cm4gLTE7CisJfQorCisJLyogRmluZCBhbiBlbXB0eSBibG9jay4gKi8KKworCWZvciAo aSA9IGRldi0+aW50ZXJuYWxTdGFydEJsb2NrOyBpIDw9IGRldi0+aW50ZXJuYWxFbmRCbG9j azsgaSsrKSB7CisJCWRldi0+YWxsb2NhdGlvbkJsb2NrRmluZGVyKys7CisJCWlmIChkZXYt PmFsbG9jYXRpb25CbG9ja0ZpbmRlciA8IGRldi0+aW50ZXJuYWxTdGFydEJsb2NrCisJCSAg ICB8fCBkZXYtPmFsbG9jYXRpb25CbG9ja0ZpbmRlciA+IGRldi0+aW50ZXJuYWxFbmRCbG9j aykgeworCQkJZGV2LT5hbGxvY2F0aW9uQmxvY2tGaW5kZXIgPSBkZXYtPmludGVybmFsU3Rh cnRCbG9jazsKKwkJfQorCisJCWJpID0geWFmZnNfR2V0QmxvY2tJbmZvKGRldiwgZGV2LT5h bGxvY2F0aW9uQmxvY2tGaW5kZXIpOworCisJCWlmIChiaS0+YmxvY2tTdGF0ZSA9PSBZQUZG U19CTE9DS19TVEFURV9FTVBUWSkgeworCQkJYmktPmJsb2NrU3RhdGUgPSBZQUZGU19CTE9D S19TVEFURV9BTExPQ0FUSU5HOworCQkJZGV2LT5zZXF1ZW5jZU51bWJlcisrOworCQkJYmkt PnNlcXVlbmNlTnVtYmVyID0gZGV2LT5zZXF1ZW5jZU51bWJlcjsKKwkJCWRldi0+bkVyYXNl ZEJsb2Nrcy0tOworCQkJVChZQUZGU19UUkFDRV9BTExPQ0FURSwKKwkJCSAgKFRTVFIoIkFs bG9jYXRlZCBibG9jayAlZCwgc2VxICAlZCwgJWQgbGVmdCIgVEVORFNUUiksCisJCQkgICBk ZXYtPmFsbG9jYXRpb25CbG9ja0ZpbmRlciwgZGV2LT5zZXF1ZW5jZU51bWJlciwKKwkJCSAg IGRldi0+bkVyYXNlZEJsb2NrcykpOworCQkJcmV0dXJuIGRldi0+YWxsb2NhdGlvbkJsb2Nr RmluZGVyOworCQl9CisJfQorCisJVChZQUZGU19UUkFDRV9BTFdBWVMsCisJICAoVFNUUgor CSAgICgieWFmZnMgdHJhZ2VkeTogbm8gbW9yZSBlcmFzZWQgYmxvY2tzLCBidXQgdGhlcmUg c2hvdWxkIGhhdmUgYmVlbiAlZCIKKwkgICAgVEVORFNUUiksIGRldi0+bkVyYXNlZEJsb2Nr cykpOworCisJcmV0dXJuIC0xOworfQorCisKKworc3RhdGljIGludCB5YWZmc19DYWxjQ2hl Y2twb2ludEJsb2Nrc1JlcXVpcmVkKHlhZmZzX0RldmljZSAqZGV2KQoreworCWlmICghZGV2 LT5uQ2hlY2twb2ludEJsb2Nrc1JlcXVpcmVkICYmCisJICAgZGV2LT5pc1lhZmZzMikgewor CQkvKiBOb3QgYSB2YWxpZCB2YWx1ZSBzbyByZWNhbGN1bGF0ZSAqLworCQlpbnQgbkJ5dGVz ID0gMDsKKwkJaW50IG5CbG9ja3M7CisJCWludCBkZXZCbG9ja3MgPSAoZGV2LT5lbmRCbG9j ayAtIGRldi0+c3RhcnRCbG9jayArIDEpOworCQlpbnQgdG5vZGVTaXplOworCisJCXRub2Rl U2l6ZSA9IChkZXYtPnRub2RlV2lkdGggKiBZQUZGU19OVE5PREVTX0xFVkVMMCkvODsKKwor CQlpZiAodG5vZGVTaXplIDwgc2l6ZW9mKHlhZmZzX1Rub2RlKSkKKwkJCXRub2RlU2l6ZSA9 IHNpemVvZih5YWZmc19Ubm9kZSk7CisKKwkJbkJ5dGVzICs9IHNpemVvZih5YWZmc19DaGVj a3BvaW50VmFsaWRpdHkpOworCQluQnl0ZXMgKz0gc2l6ZW9mKHlhZmZzX0NoZWNrcG9pbnRE ZXZpY2UpOworCQluQnl0ZXMgKz0gZGV2QmxvY2tzICogc2l6ZW9mKHlhZmZzX0Jsb2NrSW5m byk7CisJCW5CeXRlcyArPSBkZXZCbG9ja3MgKiBkZXYtPmNodW5rQml0bWFwU3RyaWRlOwor CQluQnl0ZXMgKz0gKHNpemVvZih5YWZmc19DaGVja3BvaW50T2JqZWN0KSArIHNpemVvZihf X3UzMikpICogKGRldi0+bk9iamVjdHNDcmVhdGVkIC0gZGV2LT5uRnJlZU9iamVjdHMpOwor CQluQnl0ZXMgKz0gKHRub2RlU2l6ZSArIHNpemVvZihfX3UzMikpICogKGRldi0+blRub2Rl c0NyZWF0ZWQgLSBkZXYtPm5GcmVlVG5vZGVzKTsKKwkJbkJ5dGVzICs9IHNpemVvZih5YWZm c19DaGVja3BvaW50VmFsaWRpdHkpOworCQluQnl0ZXMgKz0gc2l6ZW9mKF9fdTMyKTsgLyog Y2hlY2tzdW0qLworCisJCS8qIFJvdW5kIHVwIGFuZCBhZGQgMiBibG9ja3MgdG8gYWxsb3cg Zm9yIHNvbWUgYmFkIGJsb2Nrcywgc28gYWRkIDMgKi8KKworCQluQmxvY2tzID0gKG5CeXRl cy8oZGV2LT5uRGF0YUJ5dGVzUGVyQ2h1bmsgKiBkZXYtPm5DaHVua3NQZXJCbG9jaykpICsg MzsKKworCQlkZXYtPm5DaGVja3BvaW50QmxvY2tzUmVxdWlyZWQgPSBuQmxvY2tzOworCX0K KworCXJldHVybiBkZXYtPm5DaGVja3BvaW50QmxvY2tzUmVxdWlyZWQ7Cit9CisKKy8qCisg KiBDaGVjayBpZiB0aGVyZSdzIHNwYWNlIHRvIGFsbG9jYXRlLi4uCisgKiBUaGlua3MuLi4u IGRvIHdlIG5lZWQgdG9wIG1ha2UgdGhpcyB0aHMgc2FtZSBhcyB5YWZmc19HZXRGcmVlQ2h1 bmtzKCk/CisgKi8KK3N0YXRpYyBpbnQgeWFmZnNfQ2hlY2tTcGFjZUZvckFsbG9jYXRpb24o eWFmZnNfRGV2aWNlICpkZXYpCit7CisJaW50IHJlc2VydmVkQ2h1bmtzOworCWludCByZXNl cnZlZEJsb2NrcyA9IGRldi0+blJlc2VydmVkQmxvY2tzOworCWludCBjaGVja3BvaW50Qmxv Y2tzOworCisJaWYgKGRldi0+aXNZYWZmczIpIHsKKwkJY2hlY2twb2ludEJsb2NrcyA9ICB5 YWZmc19DYWxjQ2hlY2twb2ludEJsb2Nrc1JlcXVpcmVkKGRldikgLQorCQkJCSAgICBkZXYt PmJsb2Nrc0luQ2hlY2twb2ludDsKKwkJaWYgKGNoZWNrcG9pbnRCbG9ja3MgPCAwKQorCQkJ Y2hlY2twb2ludEJsb2NrcyA9IDA7CisJfSBlbHNlIHsKKwkJY2hlY2twb2ludEJsb2NrcyA9 IDA7CisJfQorCisJcmVzZXJ2ZWRDaHVua3MgPSAoKHJlc2VydmVkQmxvY2tzICsgY2hlY2tw b2ludEJsb2NrcykgKiBkZXYtPm5DaHVua3NQZXJCbG9jayk7CisKKwlyZXR1cm4gKGRldi0+ bkZyZWVDaHVua3MgPiByZXNlcnZlZENodW5rcyk7Cit9CisKK3N0YXRpYyBpbnQgeWFmZnNf QWxsb2NhdGVDaHVuayh5YWZmc19EZXZpY2UgKmRldiwgaW50IHVzZVJlc2VydmUsCisJCXlh ZmZzX0Jsb2NrSW5mbyAqKmJsb2NrVXNlZFB0cikKK3sKKwlpbnQgcmV0VmFsOworCXlhZmZz X0Jsb2NrSW5mbyAqYmk7CisKKwlpZiAoZGV2LT5hbGxvY2F0aW9uQmxvY2sgPCAwKSB7CisJ CS8qIEdldCBuZXh0IGJsb2NrIHRvIGFsbG9jYXRlIG9mZiAqLworCQlkZXYtPmFsbG9jYXRp b25CbG9jayA9IHlhZmZzX0ZpbmRCbG9ja0ZvckFsbG9jYXRpb24oZGV2KTsKKwkJZGV2LT5h bGxvY2F0aW9uUGFnZSA9IDA7CisJfQorCisJaWYgKCF1c2VSZXNlcnZlICYmICF5YWZmc19D aGVja1NwYWNlRm9yQWxsb2NhdGlvbihkZXYpKSB7CisJCS8qIE5vdCBlbm91Z2ggc3BhY2Ug dG8gYWxsb2NhdGUgdW5sZXNzIHdlJ3JlIGFsbG93ZWQgdG8gdXNlIHRoZSByZXNlcnZlLiAq LworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKGRldi0+bkVyYXNlZEJsb2NrcyA8IGRldi0+ blJlc2VydmVkQmxvY2tzCisJCQkmJiBkZXYtPmFsbG9jYXRpb25QYWdlID09IDApIHsKKwkJ VChZQUZGU19UUkFDRV9BTExPQ0FURSwgKFRTVFIoIkFsbG9jYXRpbmcgcmVzZXJ2ZSIgVEVO RFNUUikpKTsKKwl9CisKKwkvKiBOZXh0IHBhZ2UgcGxlYXNlLi4uLiAqLworCWlmIChkZXYt PmFsbG9jYXRpb25CbG9jayA+PSAwKSB7CisJCWJpID0geWFmZnNfR2V0QmxvY2tJbmZvKGRl diwgZGV2LT5hbGxvY2F0aW9uQmxvY2spOworCisJCXJldFZhbCA9IChkZXYtPmFsbG9jYXRp b25CbG9jayAqIGRldi0+bkNodW5rc1BlckJsb2NrKSArCisJCQlkZXYtPmFsbG9jYXRpb25Q YWdlOworCQliaS0+cGFnZXNJblVzZSsrOworCQl5YWZmc19TZXRDaHVua0JpdChkZXYsIGRl di0+YWxsb2NhdGlvbkJsb2NrLAorCQkJCWRldi0+YWxsb2NhdGlvblBhZ2UpOworCisJCWRl di0+YWxsb2NhdGlvblBhZ2UrKzsKKworCQlkZXYtPm5GcmVlQ2h1bmtzLS07CisKKwkJLyog SWYgdGhlIGJsb2NrIGlzIGZ1bGwgc2V0IHRoZSBzdGF0ZSB0byBmdWxsICovCisJCWlmIChk ZXYtPmFsbG9jYXRpb25QYWdlID49IGRldi0+bkNodW5rc1BlckJsb2NrKSB7CisJCQliaS0+ YmxvY2tTdGF0ZSA9IFlBRkZTX0JMT0NLX1NUQVRFX0ZVTEw7CisJCQlkZXYtPmFsbG9jYXRp b25CbG9jayA9IC0xOworCQl9CisKKwkJaWYgKGJsb2NrVXNlZFB0cikKKwkJCSpibG9ja1Vz ZWRQdHIgPSBiaTsKKworCQlyZXR1cm4gcmV0VmFsOworCX0KKworCVQoWUFGRlNfVFJBQ0Vf RVJST1IsCisJCQkoVFNUUigiISEhISEhISEhIEFsbG9jYXRvciBvdXQgISEhISEhISEhISEh ISEhISEiIFRFTkRTVFIpKSk7CisKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgeWFm ZnNfR2V0RXJhc2VkQ2h1bmtzKHlhZmZzX0RldmljZSAqZGV2KQoreworCWludCBuOworCisJ biA9IGRldi0+bkVyYXNlZEJsb2NrcyAqIGRldi0+bkNodW5rc1BlckJsb2NrOworCisJaWYg KGRldi0+YWxsb2NhdGlvbkJsb2NrID4gMCkKKwkJbiArPSAoZGV2LT5uQ2h1bmtzUGVyQmxv Y2sgLSBkZXYtPmFsbG9jYXRpb25QYWdlKTsKKworCXJldHVybiBuOworCit9CisKK3N0YXRp YyBpbnQgeWFmZnNfR2FyYmFnZUNvbGxlY3RCbG9jayh5YWZmc19EZXZpY2UgKmRldiwgaW50 IGJsb2NrLAorCQlpbnQgd2hvbGVCbG9jaykKK3sKKwlpbnQgb2xkQ2h1bms7CisJaW50IG5l d0NodW5rOworCWludCBtYXJrTkFORDsKKwlpbnQgcmV0VmFsID0gWUFGRlNfT0s7CisJaW50 IGNsZWFudXBzID0gMDsKKwlpbnQgaTsKKwlpbnQgaXNDaGVja3BvaW50QmxvY2s7CisJaW50 IG1hdGNoaW5nQ2h1bms7CisJaW50IG1heENvcGllczsKKworCWludCBjaHVua3NCZWZvcmUg PSB5YWZmc19HZXRFcmFzZWRDaHVua3MoZGV2KTsKKwlpbnQgY2h1bmtzQWZ0ZXI7CisKKwl5 YWZmc19FeHRlbmRlZFRhZ3MgdGFnczsKKworCXlhZmZzX0Jsb2NrSW5mbyAqYmkgPSB5YWZm c19HZXRCbG9ja0luZm8oZGV2LCBibG9jayk7CisKKwl5YWZmc19PYmplY3QgKm9iamVjdDsK KworCWlzQ2hlY2twb2ludEJsb2NrID0gKGJpLT5ibG9ja1N0YXRlID09IFlBRkZTX0JMT0NL X1NUQVRFX0NIRUNLUE9JTlQpOworCisJYmktPmJsb2NrU3RhdGUgPSBZQUZGU19CTE9DS19T VEFURV9DT0xMRUNUSU5HOworCisJVChZQUZGU19UUkFDRV9UUkFDSU5HLAorCQkJKFRTVFIo IkNvbGxlY3RpbmcgYmxvY2sgJWQsIGluIHVzZSAlZCwgc2hyaW5rICVkLCB3aG9sZUJsb2Nr ICVkIiBURU5EU1RSKSwKKwkJCSBibG9jaywKKwkJCSBiaS0+cGFnZXNJblVzZSwKKwkJCSBi aS0+aGFzU2hyaW5rSGVhZGVyLAorCQkJIHdob2xlQmxvY2spKTsKKworCS8qeWFmZnNfVmVy aWZ5RnJlZUNodW5rcyhkZXYpOyAqLworCisJYmktPmhhc1Nocmlua0hlYWRlciA9IDA7CS8q IGNsZWFyIHRoZSBmbGFnIHNvIHRoYXQgdGhlIGJsb2NrIGNhbiBlcmFzZSAqLworCisJLyog VGFrZSBvZmYgdGhlIG51bWJlciBvZiBzb2Z0IGRlbGV0ZWQgZW50cmllcyBiZWNhdXNlCisJ ICogdGhleSdyZSBnb2luZyB0byBnZXQgcmVhbGx5IGRlbGV0ZWQgZHVyaW5nIEdDLgorCSAq LworCWlmKGRldi0+Z2NDaHVuayA9PSAwKSAvKiBmaXJzdCB0aW1lIHRocm91Z2ggZm9yIHRo aXMgYmxvY2sgKi8KKwkJZGV2LT5uRnJlZUNodW5rcyAtPSBiaS0+c29mdERlbGV0aW9uczsK KworCWRldi0+aXNEb2luZ0dDID0gMTsKKworCWlmIChpc0NoZWNrcG9pbnRCbG9jayB8fAor CQkJIXlhZmZzX1N0aWxsU29tZUNodW5rQml0cyhkZXYsIGJsb2NrKSkgeworCQlUKFlBRkZT X1RSQUNFX1RSQUNJTkcsCisJCQkJKFRTVFIKKwkJCQkgKCJDb2xsZWN0aW5nIGJsb2NrICVk IHRoYXQgaGFzIG5vIGNodW5rcyBpbiB1c2UiIFRFTkRTVFIpLAorCQkJCSBibG9jaykpOwor CQl5YWZmc19CbG9ja0JlY2FtZURpcnR5KGRldiwgYmxvY2spOworCX0gZWxzZSB7CisKKwkJ X191OCAqYnVmZmVyID0geWFmZnNfR2V0VGVtcEJ1ZmZlcihkZXYsIF9fTElORV9fKTsKKwor CQl5YWZmc19WZXJpZnlCbG9jayhkZXYsIGJpLCBibG9jayk7CisKKwkJbWF4Q29waWVzID0g KHdob2xlQmxvY2spID8gZGV2LT5uQ2h1bmtzUGVyQmxvY2sgOiAxMDsKKwkJb2xkQ2h1bmsg PSBibG9jayAqIGRldi0+bkNodW5rc1BlckJsb2NrICsgZGV2LT5nY0NodW5rOworCisJCWZv ciAoLyogaW5pdCBhbHJlYWR5IGRvbmUgKi87CisJCSAgICAgcmV0VmFsID09IFlBRkZTX09L ICYmCisJCSAgICAgZGV2LT5nY0NodW5rIDwgZGV2LT5uQ2h1bmtzUGVyQmxvY2sgJiYKKwkJ ICAgICAoYmktPmJsb2NrU3RhdGUgPT0gWUFGRlNfQkxPQ0tfU1RBVEVfQ09MTEVDVElORykg JiYKKwkJICAgICBtYXhDb3BpZXMgPiAwOworCQkgICAgIGRldi0+Z2NDaHVuaysrLCBvbGRD aHVuaysrKSB7CisJCQlpZiAoeWFmZnNfQ2hlY2tDaHVua0JpdChkZXYsIGJsb2NrLCBkZXYt PmdjQ2h1bmspKSB7CisKKwkJCQkvKiBUaGlzIHBhZ2UgaXMgaW4gdXNlIGFuZCBtaWdodCBu ZWVkIHRvIGJlIGNvcGllZCBvZmYgKi8KKworCQkJCW1heENvcGllcy0tOworCisJCQkJbWFy a05BTkQgPSAxOworCisJCQkJeWFmZnNfSW5pdGlhbGlzZVRhZ3MoJnRhZ3MpOworCisJCQkJ eWFmZnNfUmVhZENodW5rV2l0aFRhZ3NGcm9tTkFORChkZXYsIG9sZENodW5rLAorCQkJCQkJ CQlidWZmZXIsICZ0YWdzKTsKKworCQkJCW9iamVjdCA9CisJCQkJICAgIHlhZmZzX0ZpbmRP YmplY3RCeU51bWJlcihkZXYsCisJCQkJCQkJICAgICB0YWdzLm9iamVjdElkKTsKKworCQkJ CVQoWUFGRlNfVFJBQ0VfR0NfREVUQUlMLAorCQkJCSAgKFRTVFIKKwkJCQkgICAoIkNvbGxl Y3RpbmcgY2h1bmsgaW4gYmxvY2sgJWQsICVkICVkICVkICIgVEVORFNUUiksCisJCQkJICAg ZGV2LT5nY0NodW5rLCB0YWdzLm9iamVjdElkLCB0YWdzLmNodW5rSWQsCisJCQkJICAgdGFn cy5ieXRlQ291bnQpKTsKKworCQkJCWlmIChvYmplY3QgJiYgIXlhZmZzX1NraXBWZXJpZmlj YXRpb24oZGV2KSkgeworCQkJCQlpZiAodGFncy5jaHVua0lkID09IDApCisJCQkJCQltYXRj aGluZ0NodW5rID0gb2JqZWN0LT5oZHJDaHVuazsKKwkJCQkJZWxzZSBpZiAob2JqZWN0LT5z b2Z0RGVsZXRlZCkKKwkJCQkJCW1hdGNoaW5nQ2h1bmsgPSBvbGRDaHVuazsgLyogRGVmZWF0 IHRoZSB0ZXN0ICovCisJCQkJCWVsc2UKKwkJCQkJCW1hdGNoaW5nQ2h1bmsgPSB5YWZmc19G aW5kQ2h1bmtJbkZpbGUob2JqZWN0LCB0YWdzLmNodW5rSWQsIE5VTEwpOworCisJCQkJCWlm IChvbGRDaHVuayAhPSBtYXRjaGluZ0NodW5rKQorCQkJCQkJVChZQUZGU19UUkFDRV9FUlJP UiwKKwkJCQkJCSAgKFRTVFIoImdjOiBwYWdlIGluIGdjIG1pc21hdGNoOiAlZCAlZCAlZCAl ZCJURU5EU1RSKSwKKwkJCQkJCSAgb2xkQ2h1bmssIG1hdGNoaW5nQ2h1bmssIHRhZ3Mub2Jq ZWN0SWQsIHRhZ3MuY2h1bmtJZCkpOworCisJCQkJfQorCisJCQkJaWYgKCFvYmplY3QpIHsK KwkJCQkJVChZQUZGU19UUkFDRV9FUlJPUiwKKwkJCQkJICAoVFNUUgorCQkJCQkgICAoInBh Z2UgJWQgaW4gZ2MgaGFzIG5vIG9iamVjdDogJWQgJWQgJWQgIgorCQkJCQkgICAgVEVORFNU UiksIG9sZENodW5rLAorCQkJCQkgICAgdGFncy5vYmplY3RJZCwgdGFncy5jaHVua0lkLCB0 YWdzLmJ5dGVDb3VudCkpOworCQkJCX0KKworCQkJCWlmIChvYmplY3QgJiYKKwkJCQkgICAg b2JqZWN0LT5kZWxldGVkICYmCisJCQkJICAgIG9iamVjdC0+c29mdERlbGV0ZWQgJiYKKwkJ CQkgICAgdGFncy5jaHVua0lkICE9IDApIHsKKwkJCQkJLyogRGF0YSBjaHVuayBpbiBhIHNv ZnQgZGVsZXRlZCBmaWxlLCB0aHJvdyBpdCBhd2F5CisJCQkJCSAqIEl0J3MgYSBzb2Z0IGRl bGV0ZWQgZGF0YSBjaHVuaywKKwkJCQkJICogTm8gbmVlZCB0byBjb3B5IHRoaXMsIGp1c3Qg Zm9yZ2V0IGFib3V0IGl0IGFuZAorCQkJCQkgKiBmaXggdXAgdGhlIG9iamVjdC4KKwkJCQkJ ICovCisKKwkJCQkJb2JqZWN0LT5uRGF0YUNodW5rcy0tOworCisJCQkJCWlmIChvYmplY3Qt Pm5EYXRhQ2h1bmtzIDw9IDApIHsKKwkJCQkJCS8qIHJlbWViZXIgdG8gY2xlYW4gdXAgdGhl IG9iamVjdCAqLworCQkJCQkJZGV2LT5nY0NsZWFudXBMaXN0W2NsZWFudXBzXSA9CisJCQkJ CQkgICAgdGFncy5vYmplY3RJZDsKKwkJCQkJCWNsZWFudXBzKys7CisJCQkJCX0KKwkJCQkJ bWFya05BTkQgPSAwOworCQkJCX0gZWxzZSBpZiAoMCkgeworCQkJCQkvKiBUb2RvIG9iamVj dCAmJiBvYmplY3QtPmRlbGV0ZWQgJiYgb2JqZWN0LT5uRGF0YUNodW5rcyA9PSAwICovCisJ CQkJCS8qIERlbGV0ZWQgb2JqZWN0IGhlYWRlciB3aXRoIG5vIGRhdGEgY2h1bmtzLgorCQkJ CQkgKiBDYW4gYmUgZGlzY2FyZGVkIGFuZCB0aGUgZmlsZSBkZWxldGVkLgorCQkJCQkgKi8K KwkJCQkJb2JqZWN0LT5oZHJDaHVuayA9IDA7CisJCQkJCXlhZmZzX0ZyZWVUbm9kZShvYmpl Y3QtPm15RGV2LAorCQkJCQkJCW9iamVjdC0+dmFyaWFudC4KKwkJCQkJCQlmaWxlVmFyaWFu dC50b3ApOworCQkJCQlvYmplY3QtPnZhcmlhbnQuZmlsZVZhcmlhbnQudG9wID0gTlVMTDsK KwkJCQkJeWFmZnNfRG9HZW5lcmljT2JqZWN0RGVsZXRpb24ob2JqZWN0KTsKKworCQkJCX0g ZWxzZSBpZiAob2JqZWN0KSB7CisJCQkJCS8qIEl0J3MgZWl0aGVyIGEgZGF0YSBjaHVuayBp biBhIGxpdmUgZmlsZSBvcgorCQkJCQkgKiBhbiBPYmplY3RIZWFkZXIsIHNvIHdlJ3JlIGlu dGVyZXN0ZWQgaW4gaXQuCisJCQkJCSAqIE5CIE5lZWQgdG8ga2VlcCB0aGUgT2JqZWN0SGVh ZGVycyBvZiBkZWxldGVkIGZpbGVzCisJCQkJCSAqIHVudGlsIHRoZSB3aG9sZSBmaWxlIGhh cyBiZWVuIGRlbGV0ZWQgb2ZmCisJCQkJCSAqLworCQkJCQl0YWdzLnNlcmlhbE51bWJlcisr OworCisJCQkJCWRldi0+bkdDQ29waWVzKys7CisKKwkJCQkJaWYgKHRhZ3MuY2h1bmtJZCA9 PSAwKSB7CisJCQkJCQkvKiBJdCBpcyBhbiBvYmplY3QgSWQsCisJCQkJCQkgKiBXZSBuZWVk IHRvIG51a2UgdGhlIHNocmlua2hlYWRlciBmbGFncyBmaXJzdAorCQkJCQkJICogV2Ugbm8g bG9uZ2VyIHdhbnQgdGhlIHNocmlua0hlYWRlciBmbGFnIHNpbmNlIGl0cyB3b3JrIGlzIGRv bmUKKwkJCQkJCSAqIGFuZCBpZiBpdCBpcyBsZWZ0IGluIHBsYWNlIGl0IHdpbGwgbWVzcyB1 cCBzY2FubmluZy4KKwkJCQkJCSAqLworCisJCQkJCQl5YWZmc19PYmplY3RIZWFkZXIgKm9o OworCQkJCQkJb2ggPSAoeWFmZnNfT2JqZWN0SGVhZGVyICopYnVmZmVyOworCQkJCQkJb2gt PmlzU2hyaW5rID0gMDsKKwkJCQkJCXRhZ3MuZXh0cmFJc1Nocmlua0hlYWRlciA9IDA7CisK KwkJCQkJCXlhZmZzX1ZlcmlmeU9iamVjdEhlYWRlcihvYmplY3QsIG9oLCAmdGFncywgMSk7 CisJCQkJCX0KKworCQkJCQluZXdDaHVuayA9CisJCQkJCSAgICB5YWZmc19Xcml0ZU5ld0No dW5rV2l0aFRhZ3NUb05BTkQoZGV2LCBidWZmZXIsICZ0YWdzLCAxKTsKKworCQkJCQlpZiAo bmV3Q2h1bmsgPCAwKSB7CisJCQkJCQlyZXRWYWwgPSBZQUZGU19GQUlMOworCQkJCQl9IGVs c2UgeworCisJCQkJCQkvKiBPaywgbm93IGZpeCB1cCB0aGUgVG5vZGVzIGV0Yy4gKi8KKwor CQkJCQkJaWYgKHRhZ3MuY2h1bmtJZCA9PSAwKSB7CisJCQkJCQkJLyogSXQncyBhIGhlYWRl ciAqLworCQkJCQkJCW9iamVjdC0+aGRyQ2h1bmsgPSAgbmV3Q2h1bms7CisJCQkJCQkJb2Jq ZWN0LT5zZXJpYWwgPSAgIHRhZ3Muc2VyaWFsTnVtYmVyOworCQkJCQkJfSBlbHNlIHsKKwkJ CQkJCQkvKiBJdCdzIGEgZGF0YSBjaHVuayAqLworCQkJCQkJCXlhZmZzX1B1dENodW5rSW50 b0ZpbGUKKwkJCQkJCQkgICAgKG9iamVjdCwKKwkJCQkJCQkgICAgIHRhZ3MuY2h1bmtJZCwK KwkJCQkJCQkgICAgIG5ld0NodW5rLCAwKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwor CQkJCWlmIChyZXRWYWwgPT0gWUFGRlNfT0spCisJCQkJCXlhZmZzX0RlbGV0ZUNodW5rKGRl diwgb2xkQ2h1bmssIG1hcmtOQU5ELCBfX0xJTkVfXyk7CisKKwkJCX0KKwkJfQorCisJCXlh ZmZzX1JlbGVhc2VUZW1wQnVmZmVyKGRldiwgYnVmZmVyLCBfX0xJTkVfXyk7CisKKworCQkv KiBEbyBhbnkgcmVxdWlyZWQgY2xlYW51cHMgKi8KKwkJZm9yIChpID0gMDsgaSA8IGNsZWFu dXBzOyBpKyspIHsKKwkJCS8qIFRpbWUgdG8gZGVsZXRlIHRoZSBmaWxlIHRvbyAqLworCQkJ b2JqZWN0ID0KKwkJCSAgICB5YWZmc19GaW5kT2JqZWN0QnlOdW1iZXIoZGV2LAorCQkJCQkJ ICAgICBkZXYtPmdjQ2xlYW51cExpc3RbaV0pOworCQkJaWYgKG9iamVjdCkgeworCQkJCXlh ZmZzX0ZyZWVUbm9kZShkZXYsCisJCQkJCQlvYmplY3QtPnZhcmlhbnQuZmlsZVZhcmlhbnQu CisJCQkJCQl0b3ApOworCQkJCW9iamVjdC0+dmFyaWFudC5maWxlVmFyaWFudC50b3AgPSBO VUxMOworCQkJCVQoWUFGRlNfVFJBQ0VfR0MsCisJCQkJICAoVFNUUgorCQkJCSAgICgieWFm ZnM6IEFib3V0IHRvIGZpbmFsbHkgZGVsZXRlIG9iamVjdCAlZCIKKwkJCQkgICAgVEVORFNU UiksIG9iamVjdC0+b2JqZWN0SWQpKTsKKwkJCQl5YWZmc19Eb0dlbmVyaWNPYmplY3REZWxl dGlvbihvYmplY3QpOworCQkJCW9iamVjdC0+bXlEZXYtPm5EZWxldGVkRmlsZXMtLTsKKwkJ CX0KKworCQl9CisKKwl9CisKKwl5YWZmc19WZXJpZnlDb2xsZWN0ZWRCbG9jayhkZXYsIGJp LCBibG9jayk7CisKKwljaHVua3NBZnRlciA9IHlhZmZzX0dldEVyYXNlZENodW5rcyhkZXYp OworCWlmIChjaHVua3NCZWZvcmUgPj0gY2h1bmtzQWZ0ZXIpIHsKKwkJVChZQUZGU19UUkFD RV9HQywKKwkJICAoVFNUUgorCQkgICAoImdjIGRpZCBub3QgaW5jcmVhc2UgZnJlZSBjaHVu a3MgYmVmb3JlICVkIGFmdGVyICVkIgorCQkgICAgVEVORFNUUiksIGNodW5rc0JlZm9yZSwg Y2h1bmtzQWZ0ZXIpKTsKKwl9CisKKwkvKiBJZiB0aGUgZ2MgY29tcGxldGVkIHRoZW4gY2xl YXIgdGhlIGN1cnJlbnQgZ2NCbG9jayBzbyB0aGF0IHdlIGZpbmQgYW5vdGhlci4gKi8KKwlp ZiAoYmktPmJsb2NrU3RhdGUgIT0gWUFGRlNfQkxPQ0tfU1RBVEVfQ09MTEVDVElORykgewor CQlkZXYtPmdjQmxvY2sgPSAtMTsKKwkJZGV2LT5nY0NodW5rID0gMDsKKwl9CisKKwlkZXYt PmlzRG9pbmdHQyA9IDA7CisKKwlyZXR1cm4gcmV0VmFsOworfQorCisvKiBOZXcgZ2FyYmFn ZSBjb2xsZWN0b3IKKyAqIElmIHdlJ3JlIHZlcnkgbG93IG9uIGVyYXNlZCBibG9ja3MgdGhl biB3ZSBkbyBhZ2dyZXNzaXZlIGdhcmJhZ2UgY29sbGVjdGlvbgorICogb3RoZXJ3aXNlIHdl IGRvICJsZWFzdXJlbHkiIGdhcmJhZ2UgY29sbGVjdGlvbi4KKyAqIEFnZ3Jlc3NpdmUgZ2Mg bG9va3MgZnVydGhlciAod2hvbGUgYXJyYXkpIGFuZCB3aWxsIGFjY2VwdCBsZXNzIGRpcnR5 IGJsb2Nrcy4KKyAqIFBhc3NpdmUgZ2Mgb25seSBpbnNwZWN0cyBzbWFsbGVyIGFyZWFzIGFu ZCB3aWxsIG9ubHkgYWNjZXB0IG1vcmUgZGlydHkgYmxvY2tzLgorICoKKyAqIFRoZSBpZGVh IGlzIHRvIGhlbHAgY2xlYXIgb3V0IHNwYWNlIGluIGEgbW9yZSBzcHJlYWQtb3V0IG1hbm5l ci4KKyAqIER1bm5vIGlmIGl0IHJlYWxseSBkb2VzIGFueXRoaW5nIHVzZWZ1bC4KKyAqLwor c3RhdGljIGludCB5YWZmc19DaGVja0dhcmJhZ2VDb2xsZWN0aW9uKHlhZmZzX0RldmljZSAq ZGV2KQoreworCWludCBibG9jazsKKwlpbnQgYWdncmVzc2l2ZTsKKwlpbnQgZ2NPayA9IFlB RkZTX09LOworCWludCBtYXhUcmllcyA9IDA7CisKKwlpbnQgY2hlY2twb2ludEJsb2NrQWRq dXN0OworCisJaWYgKGRldi0+aXNEb2luZ0dDKSB7CisJCS8qIEJhaWwgb3V0IHNvIHdlIGRv bid0IGdldCByZWN1cnNpdmUgZ2MgKi8KKwkJcmV0dXJuIFlBRkZTX09LOworCX0KKworCS8q IFRoaXMgbG9vcCBzaG91bGQgcGFzcyB0aGUgZmlyc3QgdGltZS4KKwkgKiBXZSdsbCBvbmx5 IHNlZSBsb29waW5nIGhlcmUgaWYgdGhlIGVyYXNlIG9mIHRoZSBjb2xsZWN0ZWQgYmxvY2sg ZmFpbHMuCisJICovCisKKwlkbyB7CisJCW1heFRyaWVzKys7CisKKwkJY2hlY2twb2ludEJs b2NrQWRqdXN0ID0geWFmZnNfQ2FsY0NoZWNrcG9pbnRCbG9ja3NSZXF1aXJlZChkZXYpIC0g ZGV2LT5ibG9ja3NJbkNoZWNrcG9pbnQ7CisJCWlmIChjaGVja3BvaW50QmxvY2tBZGp1c3Qg PCAwKQorCQkJY2hlY2twb2ludEJsb2NrQWRqdXN0ID0gMDsKKworCQlpZiAoZGV2LT5uRXJh c2VkQmxvY2tzIDwgKGRldi0+blJlc2VydmVkQmxvY2tzICsgY2hlY2twb2ludEJsb2NrQWRq dXN0ICsgMikpIHsKKwkJCS8qIFdlIG5lZWQgYSBibG9jayBzb29uLi4uKi8KKwkJCWFnZ3Jl c3NpdmUgPSAxOworCQl9IGVsc2UgeworCQkJLyogV2UncmUgaW4gbm8gaHVycnkgKi8KKwkJ CWFnZ3Jlc3NpdmUgPSAwOworCQl9CisKKwkJaWYgKGRldi0+Z2NCbG9jayA8PSAwKSB7CisJ CQlkZXYtPmdjQmxvY2sgPSB5YWZmc19GaW5kQmxvY2tGb3JHYXJiYWdlQ29sbGVjdGlvbihk ZXYsIGFnZ3Jlc3NpdmUpOworCQkJZGV2LT5nY0NodW5rID0gMDsKKwkJfQorCisJCWJsb2Nr ID0gZGV2LT5nY0Jsb2NrOworCisJCWlmIChibG9jayA+IDApIHsKKwkJCWRldi0+Z2FyYmFn ZUNvbGxlY3Rpb25zKys7CisJCQlpZiAoIWFnZ3Jlc3NpdmUpCisJCQkJZGV2LT5wYXNzaXZl R2FyYmFnZUNvbGxlY3Rpb25zKys7CisKKwkJCVQoWUFGRlNfVFJBQ0VfR0MsCisJCQkgIChU U1RSCisJCQkgICAoInlhZmZzOiBHQyBlcmFzZWRCbG9ja3MgJWQgYWdncmVzc2l2ZSAlZCIg VEVORFNUUiksCisJCQkgICBkZXYtPm5FcmFzZWRCbG9ja3MsIGFnZ3Jlc3NpdmUpKTsKKwor CQkJZ2NPayA9IHlhZmZzX0dhcmJhZ2VDb2xsZWN0QmxvY2soZGV2LCBibG9jaywgYWdncmVz c2l2ZSk7CisJCX0KKworCQlpZiAoZGV2LT5uRXJhc2VkQmxvY2tzIDwgKGRldi0+blJlc2Vy dmVkQmxvY2tzKSAmJiBibG9jayA+IDApIHsKKwkJCVQoWUFGRlNfVFJBQ0VfR0MsCisJCQkg IChUU1RSCisJCQkgICAoInlhZmZzOiBHQyAhISFubyByZWNsYWltISEhIGVyYXNlZEJsb2Nr cyAlZCBhZnRlciB0cnkgJWQgYmxvY2sgJWQiCisJCQkgICAgVEVORFNUUiksIGRldi0+bkVy YXNlZEJsb2NrcywgbWF4VHJpZXMsIGJsb2NrKSk7CisJCX0KKwl9IHdoaWxlICgoZGV2LT5u RXJhc2VkQmxvY2tzIDwgZGV2LT5uUmVzZXJ2ZWRCbG9ja3MpICYmCisJCSAoYmxvY2sgPiAw KSAmJgorCQkgKG1heFRyaWVzIDwgMikpOworCisJcmV0dXJuIGFnZ3Jlc3NpdmUgPyBnY09r IDogWUFGRlNfT0s7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVEFHUyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgeWFmZnNf VGFnc01hdGNoKGNvbnN0IHlhZmZzX0V4dGVuZGVkVGFncyAqdGFncywgaW50IG9iamVjdElk LAorCQkJICAgaW50IGNodW5rSW5PYmplY3QpCit7CisJcmV0dXJuICh0YWdzLT5jaHVua0lk ID09IGNodW5rSW5PYmplY3QgJiYKKwkJdGFncy0+b2JqZWN0SWQgPT0gb2JqZWN0SWQgJiYg IXRhZ3MtPmNodW5rRGVsZXRlZCkgPyAxIDogMDsKKworfQorCisKKy8qLS0tLS0tLS0tLS0t LS0tLS0tLS0gRGF0YSBmaWxlIG1hbmlwdWxhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLSovCisK K3N0YXRpYyBpbnQgeWFmZnNfRmluZENodW5rSW5GaWxlKHlhZmZzX09iamVjdCAqaW4sIGlu dCBjaHVua0luSW5vZGUsCisJCQkJIHlhZmZzX0V4dGVuZGVkVGFncyAqdGFncykKK3sKKwkv KkdldCB0aGUgVG5vZGUsIHRoZW4gZ2V0IHRoZSBsZXZlbCAwIG9mZnNldCBjaHVuayBvZmZz ZXQgKi8KKwl5YWZmc19Ubm9kZSAqdG47CisJaW50IHRoZUNodW5rID0gLTE7CisJeWFmZnNf RXh0ZW5kZWRUYWdzIGxvY2FsVGFnczsKKwlpbnQgcmV0VmFsID0gLTE7CisKKwl5YWZmc19E ZXZpY2UgKmRldiA9IGluLT5teURldjsKKworCWlmICghdGFncykgeworCQkvKiBQYXNzZWQg YSBOVUxMLCBzbyB1c2Ugb3VyIG93biB0YWdzIHNwYWNlICovCisJCXRhZ3MgPSAmbG9jYWxU YWdzOworCX0KKworCXRuID0geWFmZnNfRmluZExldmVsMFRub2RlKGRldiwgJmluLT52YXJp YW50LmZpbGVWYXJpYW50LCBjaHVua0luSW5vZGUpOworCisJaWYgKHRuKSB7CisJCXRoZUNo dW5rID0geWFmZnNfR2V0Q2h1bmtHcm91cEJhc2UoZGV2LCB0biwgY2h1bmtJbklub2RlKTsK KworCQlyZXRWYWwgPQorCQkgICAgeWFmZnNfRmluZENodW5rSW5Hcm91cChkZXYsIHRoZUNo dW5rLCB0YWdzLCBpbi0+b2JqZWN0SWQsCisJCQkJCSAgIGNodW5rSW5Jbm9kZSk7CisJfQor CXJldHVybiByZXRWYWw7Cit9CisKK3N0YXRpYyBpbnQgeWFmZnNfRmluZEFuZERlbGV0ZUNo dW5rSW5GaWxlKHlhZmZzX09iamVjdCAqaW4sIGludCBjaHVua0luSW5vZGUsCisJCQkJCSAg eWFmZnNfRXh0ZW5kZWRUYWdzICp0YWdzKQoreworCS8qIEdldCB0aGUgVG5vZGUsIHRoZW4g Z2V0IHRoZSBsZXZlbCAwIG9mZnNldCBjaHVuayBvZmZzZXQgKi8KKwl5YWZmc19Ubm9kZSAq dG47CisJaW50IHRoZUNodW5rID0gLTE7CisJeWFmZnNfRXh0ZW5kZWRUYWdzIGxvY2FsVGFn czsKKworCXlhZmZzX0RldmljZSAqZGV2ID0gaW4tPm15RGV2OworCWludCByZXRWYWwgPSAt MTsKKworCWlmICghdGFncykgeworCQkvKiBQYXNzZWQgYSBOVUxMLCBzbyB1c2Ugb3VyIG93 biB0YWdzIHNwYWNlICovCisJCXRhZ3MgPSAmbG9jYWxUYWdzOworCX0KKworCXRuID0geWFm ZnNfRmluZExldmVsMFRub2RlKGRldiwgJmluLT52YXJpYW50LmZpbGVWYXJpYW50LCBjaHVu a0luSW5vZGUpOworCisJaWYgKHRuKSB7CisKKwkJdGhlQ2h1bmsgPSB5YWZmc19HZXRDaHVu a0dyb3VwQmFzZShkZXYsIHRuLCBjaHVua0luSW5vZGUpOworCisJCXJldFZhbCA9CisJCSAg ICB5YWZmc19GaW5kQ2h1bmtJbkdyb3VwKGRldiwgdGhlQ2h1bmssIHRhZ3MsIGluLT5vYmpl Y3RJZCwKKwkJCQkJICAgY2h1bmtJbklub2RlKTsKKworCQkvKiBEZWxldGUgdGhlIGVudHJ5 IGluIHRoZSBmaWxlc3RydWN0dXJlIChpZiBmb3VuZCkgKi8KKwkJaWYgKHJldFZhbCAhPSAt MSkKKwkJCXlhZmZzX1B1dExldmVsMFRub2RlKGRldiwgdG4sIGNodW5rSW5Jbm9kZSwgMCk7 CisJfQorCisJcmV0dXJuIHJldFZhbDsKK30KKworI2lmZGVmIFlBRkZTX1BBUkFOT0lECisK K3N0YXRpYyBpbnQgeWFmZnNfQ2hlY2tGaWxlU2FuaXR5KHlhZmZzX09iamVjdCAqaW4pCit7 CisJaW50IGNodW5rOworCWludCBuQ2h1bmtzOworCWludCBmU2l6ZTsKKwlpbnQgZmFpbGVk ID0gMDsKKwlpbnQgb2JqSWQ7CisJeWFmZnNfVG5vZGUgKnRuOworCXlhZmZzX1RhZ3MgbG9j YWxUYWdzOworCXlhZmZzX1RhZ3MgKnRhZ3MgPSAmbG9jYWxUYWdzOworCWludCB0aGVDaHVu azsKKwlpbnQgY2h1bmtEZWxldGVkOworCisJaWYgKGluLT52YXJpYW50VHlwZSAhPSBZQUZG U19PQkpFQ1RfVFlQRV9GSUxFKQorCQlyZXR1cm4gWUFGRlNfRkFJTDsKKworCW9iaklkID0g aW4tPm9iamVjdElkOworCWZTaXplID0gaW4tPnZhcmlhbnQuZmlsZVZhcmlhbnQuZmlsZVNp emU7CisJbkNodW5rcyA9CisJICAgIChmU2l6ZSArIGluLT5teURldi0+bkRhdGFCeXRlc1Bl ckNodW5rIC0gMSkgLyBpbi0+bXlEZXYtPm5EYXRhQnl0ZXNQZXJDaHVuazsKKworCWZvciAo Y2h1bmsgPSAxOyBjaHVuayA8PSBuQ2h1bmtzOyBjaHVuaysrKSB7CisJCXRuID0geWFmZnNf RmluZExldmVsMFRub2RlKGluLT5teURldiwgJmluLT52YXJpYW50LmZpbGVWYXJpYW50LAor CQkJCQkgICBjaHVuayk7CisKKwkJaWYgKHRuKSB7CisKKwkJCXRoZUNodW5rID0geWFmZnNf R2V0Q2h1bmtHcm91cEJhc2UoZGV2LCB0biwgY2h1bmspOworCisJCQlpZiAoeWFmZnNfQ2hl Y2tDaHVua0JpdHMKKwkJCSAgICAoZGV2LCB0aGVDaHVuayAvIGRldi0+bkNodW5rc1BlckJs b2NrLAorCQkJICAgICB0aGVDaHVuayAlIGRldi0+bkNodW5rc1BlckJsb2NrKSkgeworCisJ CQkJeWFmZnNfUmVhZENodW5rVGFnc0Zyb21OQU5EKGluLT5teURldiwgdGhlQ2h1bmssCisJ CQkJCQkJICAgIHRhZ3MsCisJCQkJCQkJICAgICZjaHVua0RlbGV0ZWQpOworCQkJCWlmICh5 YWZmc19UYWdzTWF0Y2gKKwkJCQkgICAgKHRhZ3MsIGluLT5vYmplY3RJZCwgY2h1bmssIGNo dW5rRGVsZXRlZCkpIHsKKwkJCQkJLyogZm91bmQgaXQ7ICovCisKKwkJCQl9CisJCQl9IGVs c2UgeworCisJCQkJZmFpbGVkID0gMTsKKwkJCX0KKworCQl9IGVsc2UgeworCQkJLyogVCgo Ik5vIGxldmVsIDAgZm91bmQgZm9yICVkXG4iLCBjaHVuaykpOyAqLworCQl9CisJfQorCisJ cmV0dXJuIGZhaWxlZCA/IFlBRkZTX0ZBSUwgOiBZQUZGU19PSzsKK30KKworI2VuZGlmCisK K3N0YXRpYyBpbnQgeWFmZnNfUHV0Q2h1bmtJbnRvRmlsZSh5YWZmc19PYmplY3QgKmluLCBp bnQgY2h1bmtJbklub2RlLAorCQkJCSAgaW50IGNodW5rSW5OQU5ELCBpbnQgaW5TY2FuKQor eworCS8qIE5CIGluU2NhbiBpcyB6ZXJvIHVubGVzcyBzY2FubmluZy4KKwkgKiBGb3IgZm9y d2FyZCBzY2FubmluZywgaW5TY2FuIGlzID4gMDsKKwkgKiBmb3IgYmFja3dhcmQgc2Nhbm5p bmcgaW5TY2FuIGlzIDwgMAorCSAqLworCisJeWFmZnNfVG5vZGUgKnRuOworCXlhZmZzX0Rl dmljZSAqZGV2ID0gaW4tPm15RGV2OworCWludCBleGlzdGluZ0NodW5rOworCXlhZmZzX0V4 dGVuZGVkVGFncyBleGlzdGluZ1RhZ3M7CisJeWFmZnNfRXh0ZW5kZWRUYWdzIG5ld1RhZ3M7 CisJdW5zaWduZWQgZXhpc3RpbmdTZXJpYWwsIG5ld1NlcmlhbDsKKworCWlmIChpbi0+dmFy aWFudFR5cGUgIT0gWUFGRlNfT0JKRUNUX1RZUEVfRklMRSkgeworCQkvKiBKdXN0IGlnbm9y ZSBhbiBhdHRlbXB0IGF0IHB1dHRpbmcgYSBjaHVuayBpbnRvIGEgbm9uLWZpbGUgZHVyaW5n IHNjYW5uaW5nCisJCSAqIElmIGl0IGlzIG5vdCBkdXJpbmcgU2Nhbm5pbmcgdGhlbiBzb21l dGhpbmcgd2VudCB3cm9uZyEKKwkJICovCisJCWlmICghaW5TY2FuKSB7CisJCQlUKFlBRkZT X1RSQUNFX0VSUk9SLAorCQkJICAoVFNUUgorCQkJICAgKCJ5YWZmcyB0cmFnZWR5OmF0dGVt cHQgdG8gcHV0IGRhdGEgY2h1bmsgaW50byBhIG5vbi1maWxlIgorCQkJICAgIFRFTkRTVFIp KSk7CisJCQlZQlVHKCk7CisJCX0KKworCQl5YWZmc19EZWxldGVDaHVuayhkZXYsIGNodW5r SW5OQU5ELCAxLCBfX0xJTkVfXyk7CisJCXJldHVybiBZQUZGU19PSzsKKwl9CisKKwl0biA9 IHlhZmZzX0FkZE9yRmluZExldmVsMFRub2RlKGRldiwKKwkJCQkJJmluLT52YXJpYW50LmZp bGVWYXJpYW50LAorCQkJCQljaHVua0luSW5vZGUsCisJCQkJCU5VTEwpOworCWlmICghdG4p CisJCXJldHVybiBZQUZGU19GQUlMOworCisJZXhpc3RpbmdDaHVuayA9IHlhZmZzX0dldENo dW5rR3JvdXBCYXNlKGRldiwgdG4sIGNodW5rSW5Jbm9kZSk7CisKKwlpZiAoaW5TY2FuICE9 IDApIHsKKwkJLyogSWYgd2UncmUgc2Nhbm5pbmcgdGhlbiB3ZSBuZWVkIHRvIHRlc3QgZm9y IGR1cGxpY2F0ZXMKKwkJICogTkIgVGhpcyBkb2VzIG5vdCBuZWVkIHRvIGJlIGVmZmljaWVu dCBzaW5jZSBpdCBzaG91bGQgb25seSBldmVyCisJCSAqIGhhcHBlbiB3aGVuIHRoZSBwb3dl ciBmYWlscyBkdXJpbmcgYSB3cml0ZSwgdGhlbiBvbmx5IG9uZQorCQkgKiBjaHVuayBzaG91 bGQgZXZlciBiZSBhZmZlY3RlZC4KKwkJICoKKwkJICogQ29ycmVjdGlvbiBmb3IgWUFGRlMy OiBUaGlzIGNvdWxkIGhhcHBlbiBxdWl0ZSBhIGxvdCBhbmQgd2UgbmVlZCB0byB0aGluayBh Ym91dCBlZmZpY2llbmN5ISBUT0RPCisJCSAqIFVwZGF0ZTogRm9yIGJhY2t3YXJkIHNjYW5u aW5nIHdlIGRvbid0IG5lZWQgdG8gcmUtcmVhZCB0YWdzIHNvIHRoaXMgaXMgcXVpdGUgY2hl YXAuCisJCSAqLworCisJCWlmIChleGlzdGluZ0NodW5rID4gMCkgeworCQkJLyogTkIgUmln aHQgbm93IGV4aXN0aW5nIGNodW5rIHdpbGwgbm90IGJlIHJlYWwgY2h1bmtJZCBpZiB0aGUg ZGV2aWNlID49IDMyTUIKKwkJCSAqICAgIHRodXMgd2UgaGF2ZSB0byBkbyBhIEZpbmRDaHVu a0luRmlsZSB0byBnZXQgdGhlIHJlYWwgY2h1bmsgaWQuCisJCQkgKgorCQkJICogV2UgaGF2 ZSBhIGR1cGxpY2F0ZSBub3cgd2UgbmVlZCB0byBkZWNpZGUgd2hpY2ggb25lIHRvIHVzZToK KwkJCSAqCisJCQkgKiBCYWNrd2FyZHMgc2Nhbm5pbmcgWUFGRlMyOiBUaGUgb2xkIG9uZSBp cyB3aGF0IHdlIHVzZSwgZHVtcCB0aGUgbmV3IG9uZS4KKwkJCSAqIEZvcndhcmQgc2Nhbm5p bmcgWUFGRlMyOiBUaGUgbmV3IG9uZSBpcyB3aGF0IHdlIHVzZSwgZHVtcCB0aGUgb2xkIG9u ZS4KKwkJCSAqIFlBRkZTMTogR2V0IGJvdGggc2V0cyBvZiB0YWdzIGFuZCBjb21wYXJlIHNl cmlhbCBudW1iZXJzLgorCQkJICovCisKKwkJCWlmIChpblNjYW4gPiAwKSB7CisJCQkJLyog T25seSBkbyB0aGlzIGZvciBmb3J3YXJkIHNjYW5uaW5nICovCisJCQkJeWFmZnNfUmVhZENo dW5rV2l0aFRhZ3NGcm9tTkFORChkZXYsCisJCQkJCQkJCWNodW5rSW5OQU5ELAorCQkJCQkJ CQlOVUxMLCAmbmV3VGFncyk7CisKKwkJCQkvKiBEbyBhIHByb3BlciBmaW5kICovCisJCQkJ ZXhpc3RpbmdDaHVuayA9CisJCQkJICAgIHlhZmZzX0ZpbmRDaHVua0luRmlsZShpbiwgY2h1 bmtJbklub2RlLAorCQkJCQkJCSAgJmV4aXN0aW5nVGFncyk7CisJCQl9CisKKwkJCWlmIChl eGlzdGluZ0NodW5rIDw9IDApIHsKKwkJCQkvKkhvb3N0ZXJtYW4gLSBob3cgZGlkIHRoaXMg aGFwcGVuPyAqLworCisJCQkJVChZQUZGU19UUkFDRV9FUlJPUiwKKwkJCQkgIChUU1RSCisJ CQkJICAgKCJ5YWZmcyB0cmFnZWR5OiBleGlzdGluZyBjaHVuayA8IDAgaW4gc2NhbiIKKwkJ CQkgICAgVEVORFNUUikpKTsKKworCQkJfQorCisJCQkvKiBOQiBUaGUgZGVsZXRlZCBmbGFn cyBzaG91bGQgYmUgZmFsc2UsIG90aGVyd2lzZSB0aGUgY2h1bmtzIHdpbGwKKwkJCSAqIG5v dCBiZSBsb2FkZWQgZHVyaW5nIGEgc2NhbgorCQkJICovCisKKwkJCWlmIChpblNjYW4gPiAw KSB7CisJCQkJbmV3U2VyaWFsID0gbmV3VGFncy5zZXJpYWxOdW1iZXI7CisJCQkJZXhpc3Rp bmdTZXJpYWwgPSBleGlzdGluZ1RhZ3Muc2VyaWFsTnVtYmVyOworCQkJfQorCisJCQlpZiAo KGluU2NhbiA+IDApICYmCisJCQkgICAgKGluLT5teURldi0+aXNZYWZmczIgfHwKKwkJCSAg ICAgZXhpc3RpbmdDaHVuayA8PSAwIHx8CisJCQkgICAgICgoZXhpc3RpbmdTZXJpYWwgKyAx KSAmIDMpID09IG5ld1NlcmlhbCkpIHsKKwkJCQkvKiBGb3J3YXJkIHNjYW5uaW5nLgorCQkJ CSAqIFVzZSBuZXcKKwkJCQkgKiBEZWxldGUgdGhlIG9sZCBvbmUgYW5kIGRyb3AgdGhyb3Vn aCB0byB1cGRhdGUgdGhlIHRub2RlCisJCQkJICovCisJCQkJeWFmZnNfRGVsZXRlQ2h1bmso ZGV2LCBleGlzdGluZ0NodW5rLCAxLAorCQkJCQkJICBfX0xJTkVfXyk7CisJCQl9IGVsc2Ug eworCQkJCS8qIEJhY2t3YXJkIHNjYW5uaW5nIG9yIHdlIHdhbnQgdG8gdXNlIHRoZSBleGlz dGluZyBvbmUKKwkJCQkgKiBVc2UgZXhpc3RpbmcuCisJCQkJICogRGVsZXRlIHRoZSBuZXcg b25lIGFuZCByZXR1cm4gZWFybHkgc28gdGhhdCB0aGUgdG5vZGUgaXNuJ3QgY2hhbmdlZAor CQkJCSAqLworCQkJCXlhZmZzX0RlbGV0ZUNodW5rKGRldiwgY2h1bmtJbk5BTkQsIDEsCisJ CQkJCQkgIF9fTElORV9fKTsKKwkJCQlyZXR1cm4gWUFGRlNfT0s7CisJCQl9CisJCX0KKwor CX0KKworCWlmIChleGlzdGluZ0NodW5rID09IDApCisJCWluLT5uRGF0YUNodW5rcysrOwor CisJeWFmZnNfUHV0TGV2ZWwwVG5vZGUoZGV2LCB0biwgY2h1bmtJbklub2RlLCBjaHVua0lu TkFORCk7CisKKwlyZXR1cm4gWUFGRlNfT0s7Cit9CisKK3N0YXRpYyBpbnQgeWFmZnNfUmVh ZENodW5rRGF0YUZyb21PYmplY3QoeWFmZnNfT2JqZWN0ICppbiwgaW50IGNodW5rSW5Jbm9k ZSwKKwkJCQkJX191OCAqYnVmZmVyKQoreworCWludCBjaHVua0luTkFORCA9IHlhZmZzX0Zp bmRDaHVua0luRmlsZShpbiwgY2h1bmtJbklub2RlLCBOVUxMKTsKKworCWlmIChjaHVua0lu TkFORCA+PSAwKQorCQlyZXR1cm4geWFmZnNfUmVhZENodW5rV2l0aFRhZ3NGcm9tTkFORChp bi0+bXlEZXYsIGNodW5rSW5OQU5ELAorCQkJCQkJYnVmZmVyLCBOVUxMKTsKKwllbHNlIHsK KwkJVChZQUZGU19UUkFDRV9OQU5EQUNDRVNTLAorCQkgIChUU1RSKCJDaHVuayAlZCBub3Qg Zm91bmQgemVybyBpbnN0ZWFkIiBURU5EU1RSKSwKKwkJICAgY2h1bmtJbk5BTkQpKTsKKwkJ LyogZ2V0IHNhbmUgKHplcm8pIGRhdGEgaWYgeW91IHJlYWQgYSBob2xlICovCisJCW1lbXNl dChidWZmZXIsIDAsIGluLT5teURldi0+bkRhdGFCeXRlc1BlckNodW5rKTsKKwkJcmV0dXJu IDA7CisJfQorCit9CisKK3ZvaWQgeWFmZnNfRGVsZXRlQ2h1bmsoeWFmZnNfRGV2aWNlICpk ZXYsIGludCBjaHVua0lkLCBpbnQgbWFya05BTkQsIGludCBseW4pCit7CisJaW50IGJsb2Nr OworCWludCBwYWdlOworCXlhZmZzX0V4dGVuZGVkVGFncyB0YWdzOworCXlhZmZzX0Jsb2Nr SW5mbyAqYmk7CisKKwlpZiAoY2h1bmtJZCA8PSAwKQorCQlyZXR1cm47CisKKwlkZXYtPm5E ZWxldGlvbnMrKzsKKwlibG9jayA9IGNodW5rSWQgLyBkZXYtPm5DaHVua3NQZXJCbG9jazsK KwlwYWdlID0gY2h1bmtJZCAlIGRldi0+bkNodW5rc1BlckJsb2NrOworCisKKwlpZiAoIXlh ZmZzX0NoZWNrQ2h1bmtCaXQoZGV2LCBibG9jaywgcGFnZSkpCisJCVQoWUFGRlNfVFJBQ0Vf VkVSSUZZLAorCQkJKFRTVFIoIkRlbGV0aW5nIGludmFsaWQgY2h1bmsgJWQiVEVORFNUUiks CisJCQkgY2h1bmtJZCkpOworCisJYmkgPSB5YWZmc19HZXRCbG9ja0luZm8oZGV2LCBibG9j ayk7CisKKwlUKFlBRkZTX1RSQUNFX0RFTEVUSU9OLAorCSAgKFRTVFIoImxpbmUgJWQgZGVs ZXRlIG9mIGNodW5rICVkIiBURU5EU1RSKSwgbHluLCBjaHVua0lkKSk7CisKKwlpZiAobWFy a05BTkQgJiYKKwkgICAgYmktPmJsb2NrU3RhdGUgIT0gWUFGRlNfQkxPQ0tfU1RBVEVfQ09M TEVDVElORyAmJiAhZGV2LT5pc1lhZmZzMikgeworCisJCXlhZmZzX0luaXRpYWxpc2VUYWdz KCZ0YWdzKTsKKworCQl0YWdzLmNodW5rRGVsZXRlZCA9IDE7CisKKwkJeWFmZnNfV3JpdGVD aHVua1dpdGhUYWdzVG9OQU5EKGRldiwgY2h1bmtJZCwgTlVMTCwgJnRhZ3MpOworCQl5YWZm c19IYW5kbGVVcGRhdGVDaHVuayhkZXYsIGNodW5rSWQsICZ0YWdzKTsKKwl9IGVsc2Ugewor CQlkZXYtPm5Vbm1hcmtlZERlbGV0aW9ucysrOworCX0KKworCS8qIFB1bGwgb3V0IG9mIHRo ZSBtYW5hZ2VtZW50IGFyZWEuCisJICogSWYgdGhlIHdob2xlIGJsb2NrIGJlY2FtZSBkaXJ0 eSwgdGhpcyB3aWxsIGtpY2sgb2ZmIGFuIGVyYXN1cmUuCisJICovCisJaWYgKGJpLT5ibG9j a1N0YXRlID09IFlBRkZTX0JMT0NLX1NUQVRFX0FMTE9DQVRJTkcgfHwKKwkgICAgYmktPmJs b2NrU3RhdGUgPT0gWUFGRlNfQkxPQ0tfU1RBVEVfRlVMTCB8fAorCSAgICBiaS0+YmxvY2tT dGF0ZSA9PSBZQUZGU19CTE9DS19TVEFURV9ORUVEU19TQ0FOTklORyB8fAorCSAgICBiaS0+ YmxvY2tTdGF0ZSA9PSBZQUZGU19CTE9DS19TVEFURV9DT0xMRUNUSU5HKSB7CisJCWRldi0+ bkZyZWVDaHVua3MrKzsKKworCQl5YWZmc19DbGVhckNodW5rQml0KGRldiwgYmxvY2ssIHBh Z2UpOworCisJCWJpLT5wYWdlc0luVXNlLS07CisKKwkJaWYgKGJpLT5wYWdlc0luVXNlID09 IDAgJiYKKwkJICAgICFiaS0+aGFzU2hyaW5rSGVhZGVyICYmCisJCSAgICBiaS0+YmxvY2tT dGF0ZSAhPSBZQUZGU19CTE9DS19TVEFURV9BTExPQ0FUSU5HICYmCisJCSAgICBiaS0+Ymxv Y2tTdGF0ZSAhPSBZQUZGU19CTE9DS19TVEFURV9ORUVEU19TQ0FOTklORykgeworCQkJeWFm ZnNfQmxvY2tCZWNhbWVEaXJ0eShkZXYsIGJsb2NrKTsKKwkJfQorCisJfQorCit9CisKK3N0 YXRpYyBpbnQgeWFmZnNfV3JpdGVDaHVua0RhdGFUb09iamVjdCh5YWZmc19PYmplY3QgKmlu LCBpbnQgY2h1bmtJbklub2RlLAorCQkJCQljb25zdCBfX3U4ICpidWZmZXIsIGludCBuQnl0 ZXMsCisJCQkJCWludCB1c2VSZXNlcnZlKQoreworCS8qIEZpbmQgb2xkIGNodW5rIE5lZWQg dG8gZG8gdGhpcyB0byBnZXQgc2VyaWFsIG51bWJlcgorCSAqIFdyaXRlIG5ldyBvbmUgYW5k IHBhdGNoIGludG8gdHJlZS4KKwkgKiBJbnZhbGlkYXRlIG9sZCB0YWdzLgorCSAqLworCisJ aW50IHByZXZDaHVua0lkOworCXlhZmZzX0V4dGVuZGVkVGFncyBwcmV2VGFnczsKKworCWlu dCBuZXdDaHVua0lkOworCXlhZmZzX0V4dGVuZGVkVGFncyBuZXdUYWdzOworCisJeWFmZnNf RGV2aWNlICpkZXYgPSBpbi0+bXlEZXY7CisKKwl5YWZmc19DaGVja0dhcmJhZ2VDb2xsZWN0 aW9uKGRldik7CisKKwkvKiBHZXQgdGhlIHByZXZpb3VzIGNodW5rIGF0IHRoaXMgbG9jYXRp b24gaW4gdGhlIGZpbGUgaWYgaXQgZXhpc3RzICovCisJcHJldkNodW5rSWQgPSB5YWZmc19G aW5kQ2h1bmtJbkZpbGUoaW4sIGNodW5rSW5Jbm9kZSwgJnByZXZUYWdzKTsKKworCS8qIFNl dCB1cCBuZXcgdGFncyAqLworCXlhZmZzX0luaXRpYWxpc2VUYWdzKCZuZXdUYWdzKTsKKwor CW5ld1RhZ3MuY2h1bmtJZCA9IGNodW5rSW5Jbm9kZTsKKwluZXdUYWdzLm9iamVjdElkID0g aW4tPm9iamVjdElkOworCW5ld1RhZ3Muc2VyaWFsTnVtYmVyID0KKwkgICAgKHByZXZDaHVu a0lkID49IDApID8gcHJldlRhZ3Muc2VyaWFsTnVtYmVyICsgMSA6IDE7CisJbmV3VGFncy5i eXRlQ291bnQgPSBuQnl0ZXM7CisKKwlpZiAobkJ5dGVzIDwgMSB8fCBuQnl0ZXMgPiBkZXYt PnRvdGFsQnl0ZXNQZXJDaHVuaykgeworCQlUKFlBRkZTX1RSQUNFX0VSUk9SLAorCQkoVFNU UigiV3JpdGluZyAlZCBieXRlcyB0byBjaHVuayEhISEhISEhISIgVEVORFNUUiksIG5CeXRl cykpOworCQlZQlVHKCk7CisJfQorCisJbmV3Q2h1bmtJZCA9CisJICAgIHlhZmZzX1dyaXRl TmV3Q2h1bmtXaXRoVGFnc1RvTkFORChkZXYsIGJ1ZmZlciwgJm5ld1RhZ3MsCisJCQkJCSAg ICAgIHVzZVJlc2VydmUpOworCisJaWYgKG5ld0NodW5rSWQgPj0gMCkgeworCQl5YWZmc19Q dXRDaHVua0ludG9GaWxlKGluLCBjaHVua0luSW5vZGUsIG5ld0NodW5rSWQsIDApOworCisJ CWlmIChwcmV2Q2h1bmtJZCA+PSAwKQorCQkJeWFmZnNfRGVsZXRlQ2h1bmsoZGV2LCBwcmV2 Q2h1bmtJZCwgMSwgX19MSU5FX18pOworCisJCXlhZmZzX0NoZWNrRmlsZVNhbml0eShpbik7 CisJfQorCXJldHVybiBuZXdDaHVua0lkOworCit9CisKKy8qIFVwZGF0ZU9iamVjdEhlYWRl ciB1cGRhdGVzIHRoZSBoZWFkZXIgb24gTkFORCBmb3IgYW4gb2JqZWN0LgorICogSWYgbmFt ZSBpcyBub3QgTlVMTCwgdGhlbiB0aGF0IG5ldyBuYW1lIGlzIHVzZWQuCisgKi8KK2ludCB5 YWZmc19VcGRhdGVPYmplY3RIZWFkZXIoeWFmZnNfT2JqZWN0ICppbiwgY29uc3QgWUNIQVIg Km5hbWUsIGludCBmb3JjZSwKKwkJCSAgICAgaW50IGlzU2hyaW5rLCBpbnQgc2hhZG93cykK K3sKKworCXlhZmZzX0Jsb2NrSW5mbyAqYmk7CisKKwl5YWZmc19EZXZpY2UgKmRldiA9IGlu LT5teURldjsKKworCWludCBwcmV2Q2h1bmtJZDsKKwlpbnQgcmV0VmFsID0gMDsKKwlpbnQg cmVzdWx0ID0gMDsKKworCWludCBuZXdDaHVua0lkOworCXlhZmZzX0V4dGVuZGVkVGFncyBu ZXdUYWdzOworCXlhZmZzX0V4dGVuZGVkVGFncyBvbGRUYWdzOworCisJX191OCAqYnVmZmVy ID0gTlVMTDsKKwlZQ0hBUiBvbGROYW1lW1lBRkZTX01BWF9OQU1FX0xFTkdUSCArIDFdOwor CisJeWFmZnNfT2JqZWN0SGVhZGVyICpvaCA9IE5VTEw7CisKKwl5YWZmc19zdHJjcHkob2xk TmFtZSwgX1koInNpbGx5IG9sZCBuYW1lIikpOworCisKKwlpZiAoIWluLT5mYWtlIHx8CisJ CWluID09IGRldi0+cm9vdERpciB8fCAvKiBUaGUgcm9vdERpciBzaG91bGQgYWxzbyBiZSBz YXZlZCAqLworCQlmb3JjZSkgeworCisJCXlhZmZzX0NoZWNrR2FyYmFnZUNvbGxlY3Rpb24o ZGV2KTsKKwkJeWFmZnNfQ2hlY2tPYmplY3REZXRhaWxzTG9hZGVkKGluKTsKKworCQlidWZm ZXIgPSB5YWZmc19HZXRUZW1wQnVmZmVyKGluLT5teURldiwgX19MSU5FX18pOworCQlvaCA9 ICh5YWZmc19PYmplY3RIZWFkZXIgKikgYnVmZmVyOworCisJCXByZXZDaHVua0lkID0gaW4t PmhkckNodW5rOworCisJCWlmIChwcmV2Q2h1bmtJZCA+IDApIHsKKwkJCXJlc3VsdCA9IHlh ZmZzX1JlYWRDaHVua1dpdGhUYWdzRnJvbU5BTkQoZGV2LCBwcmV2Q2h1bmtJZCwKKwkJCQkJ CQlidWZmZXIsICZvbGRUYWdzKTsKKworCQkJeWFmZnNfVmVyaWZ5T2JqZWN0SGVhZGVyKGlu LCBvaCwgJm9sZFRhZ3MsIDApOworCisJCQltZW1jcHkob2xkTmFtZSwgb2gtPm5hbWUsIHNp emVvZihvaC0+bmFtZSkpOworCQl9CisKKwkJbWVtc2V0KGJ1ZmZlciwgMHhGRiwgZGV2LT5u RGF0YUJ5dGVzUGVyQ2h1bmspOworCisJCW9oLT50eXBlID0gaW4tPnZhcmlhbnRUeXBlOwor CQlvaC0+eXN0X21vZGUgPSBpbi0+eXN0X21vZGU7CisJCW9oLT5zaGFkb3dzT2JqZWN0ID0g b2gtPmluYmFuZFNoYWRvd3NPYmplY3QgPSBzaGFkb3dzOworCisjaWZkZWYgQ09ORklHX1lB RkZTX1dJTkNFCisJCW9oLT53aW5fYXRpbWVbMF0gPSBpbi0+d2luX2F0aW1lWzBdOworCQlv aC0+d2luX2N0aW1lWzBdID0gaW4tPndpbl9jdGltZVswXTsKKwkJb2gtPndpbl9tdGltZVsw XSA9IGluLT53aW5fbXRpbWVbMF07CisJCW9oLT53aW5fYXRpbWVbMV0gPSBpbi0+d2luX2F0 aW1lWzFdOworCQlvaC0+d2luX2N0aW1lWzFdID0gaW4tPndpbl9jdGltZVsxXTsKKwkJb2gt Pndpbl9tdGltZVsxXSA9IGluLT53aW5fbXRpbWVbMV07CisjZWxzZQorCQlvaC0+eXN0X3Vp ZCA9IGluLT55c3RfdWlkOworCQlvaC0+eXN0X2dpZCA9IGluLT55c3RfZ2lkOworCQlvaC0+ eXN0X2F0aW1lID0gaW4tPnlzdF9hdGltZTsKKwkJb2gtPnlzdF9tdGltZSA9IGluLT55c3Rf bXRpbWU7CisJCW9oLT55c3RfY3RpbWUgPSBpbi0+eXN0X2N0aW1lOworCQlvaC0+eXN0X3Jk ZXYgPSBpbi0+eXN0X3JkZXY7CisjZW5kaWYKKwkJaWYgKGluLT5wYXJlbnQpCisJCQlvaC0+ cGFyZW50T2JqZWN0SWQgPSBpbi0+cGFyZW50LT5vYmplY3RJZDsKKwkJZWxzZQorCQkJb2gt PnBhcmVudE9iamVjdElkID0gMDsKKworCQlpZiAobmFtZSAmJiAqbmFtZSkgeworCQkJbWVt c2V0KG9oLT5uYW1lLCAwLCBzaXplb2Yob2gtPm5hbWUpKTsKKwkJCXlhZmZzX3N0cm5jcHko b2gtPm5hbWUsIG5hbWUsIFlBRkZTX01BWF9OQU1FX0xFTkdUSCk7CisJCX0gZWxzZSBpZiAo cHJldkNodW5rSWQgPj0gMCkKKwkJCW1lbWNweShvaC0+bmFtZSwgb2xkTmFtZSwgc2l6ZW9m KG9oLT5uYW1lKSk7CisJCWVsc2UKKwkJCW1lbXNldChvaC0+bmFtZSwgMCwgc2l6ZW9mKG9o LT5uYW1lKSk7CisKKwkJb2gtPmlzU2hyaW5rID0gaXNTaHJpbms7CisKKwkJc3dpdGNoIChp bi0+dmFyaWFudFR5cGUpIHsKKwkJY2FzZSBZQUZGU19PQkpFQ1RfVFlQRV9VTktOT1dOOgor CQkJLyogU2hvdWxkIG5vdCBoYXBwZW4gKi8KKwkJCWJyZWFrOworCQljYXNlIFlBRkZTX09C SkVDVF9UWVBFX0ZJTEU6CisJCQlvaC0+ZmlsZVNpemUgPQorCQkJICAgIChvaC0+cGFyZW50 T2JqZWN0SWQgPT0gWUFGRlNfT0JKRUNUSURfREVMRVRFRAorCQkJICAgICB8fCBvaC0+cGFy ZW50T2JqZWN0SWQgPT0KKwkJCSAgICAgWUFGRlNfT0JKRUNUSURfVU5MSU5LRUQpID8gMCA6 IGluLT52YXJpYW50LgorCQkJICAgIGZpbGVWYXJpYW50LmZpbGVTaXplOworCQkJYnJlYWs7 CisJCWNhc2UgWUFGRlNfT0JKRUNUX1RZUEVfSEFSRExJTks6CisJCQlvaC0+ZXF1aXZhbGVu dE9iamVjdElkID0KKwkJCSAgICBpbi0+dmFyaWFudC5oYXJkTGlua1ZhcmlhbnQuZXF1aXZh bGVudE9iamVjdElkOworCQkJYnJlYWs7CisJCWNhc2UgWUFGRlNfT0JKRUNUX1RZUEVfU1BF Q0lBTDoKKwkJCS8qIERvIG5vdGhpbmcgKi8KKwkJCWJyZWFrOworCQljYXNlIFlBRkZTX09C SkVDVF9UWVBFX0RJUkVDVE9SWToKKwkJCS8qIERvIG5vdGhpbmcgKi8KKwkJCWJyZWFrOwor CQljYXNlIFlBRkZTX09CSkVDVF9UWVBFX1NZTUxJTks6CisJCQl5YWZmc19zdHJuY3B5KG9o LT5hbGlhcywKKwkJCQkgICAgICBpbi0+dmFyaWFudC5zeW1MaW5rVmFyaWFudC5hbGlhcywK KwkJCQkgICAgICBZQUZGU19NQVhfQUxJQVNfTEVOR1RIKTsKKwkJCW9oLT5hbGlhc1tZQUZG U19NQVhfQUxJQVNfTEVOR1RIXSA9IDA7CisJCQlicmVhazsKKwkJfQorCisJCS8qIFRhZ3Mg Ki8KKwkJeWFmZnNfSW5pdGlhbGlzZVRhZ3MoJm5ld1RhZ3MpOworCQlpbi0+c2VyaWFsKys7 CisJCW5ld1RhZ3MuY2h1bmtJZCA9IDA7CisJCW5ld1RhZ3Mub2JqZWN0SWQgPSBpbi0+b2Jq ZWN0SWQ7CisJCW5ld1RhZ3Muc2VyaWFsTnVtYmVyID0gaW4tPnNlcmlhbDsKKworCQkvKiBB ZGQgZXh0cmEgaW5mbyBmb3IgZmlsZSBoZWFkZXIgKi8KKworCQluZXdUYWdzLmV4dHJhSGVh ZGVySW5mb0F2YWlsYWJsZSA9IDE7CisJCW5ld1RhZ3MuZXh0cmFQYXJlbnRPYmplY3RJZCA9 IG9oLT5wYXJlbnRPYmplY3RJZDsKKwkJbmV3VGFncy5leHRyYUZpbGVMZW5ndGggPSBvaC0+ ZmlsZVNpemU7CisJCW5ld1RhZ3MuZXh0cmFJc1Nocmlua0hlYWRlciA9IG9oLT5pc1Nocmlu azsKKwkJbmV3VGFncy5leHRyYUVxdWl2YWxlbnRPYmplY3RJZCA9IG9oLT5lcXVpdmFsZW50 T2JqZWN0SWQ7CisJCW5ld1RhZ3MuZXh0cmFTaGFkb3dzID0gKG9oLT5zaGFkb3dzT2JqZWN0 ID4gMCkgPyAxIDogMDsKKwkJbmV3VGFncy5leHRyYU9iamVjdFR5cGUgPSBpbi0+dmFyaWFu dFR5cGU7CisKKwkJeWFmZnNfVmVyaWZ5T2JqZWN0SGVhZGVyKGluLCBvaCwgJm5ld1RhZ3Ms IDEpOworCisJCS8qIENyZWF0ZSBuZXcgY2h1bmsgaW4gTkFORCAqLworCQluZXdDaHVua0lk ID0KKwkJICAgIHlhZmZzX1dyaXRlTmV3Q2h1bmtXaXRoVGFnc1RvTkFORChkZXYsIGJ1ZmZl ciwgJm5ld1RhZ3MsCisJCQkJCQkgICAgICAocHJldkNodW5rSWQgPj0gMCkgPyAxIDogMCk7 CisKKwkJaWYgKG5ld0NodW5rSWQgPj0gMCkgeworCisJCQlpbi0+aGRyQ2h1bmsgPSBuZXdD aHVua0lkOworCisJCQlpZiAocHJldkNodW5rSWQgPj0gMCkgeworCQkJCXlhZmZzX0RlbGV0 ZUNodW5rKGRldiwgcHJldkNodW5rSWQsIDEsCisJCQkJCQkgIF9fTElORV9fKTsKKwkJCX0K KworCQkJaWYgKCF5YWZmc19PYmplY3RIYXNDYWNoZWRXcml0ZURhdGEoaW4pKQorCQkJCWlu LT5kaXJ0eSA9IDA7CisKKwkJCS8qIElmIHRoaXMgd2FzIGEgc2hyaW5rLCB0aGVuIG1hcmsg dGhlIGJsb2NrIHRoYXQgdGhlIGNodW5rIGxpdmVzIG9uICovCisJCQlpZiAoaXNTaHJpbmsp IHsKKwkJCQliaSA9IHlhZmZzX0dldEJsb2NrSW5mbyhpbi0+bXlEZXYsCisJCQkJCW5ld0No dW5rSWQgLyBpbi0+bXlEZXYtPm5DaHVua3NQZXJCbG9jayk7CisJCQkJYmktPmhhc1Nocmlu a0hlYWRlciA9IDE7CisJCQl9CisKKwkJfQorCisJCXJldFZhbCA9IG5ld0NodW5rSWQ7CisK Kwl9CisKKwlpZiAoYnVmZmVyKQorCQl5YWZmc19SZWxlYXNlVGVtcEJ1ZmZlcihkZXYsIGJ1 ZmZlciwgX19MSU5FX18pOworCisJcmV0dXJuIHJldFZhbDsKK30KKworLyotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0gU2hvcnQgT3BlcmF0aW9ucyBDYWNoZSAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgIEluIG1hbnkgc2l0dWF0aW9ucyB3aGVy ZSB0aGVyZSBpcyBubyBoaWdoIGxldmVsIGJ1ZmZlcmluZyAoZWcgV2luQ0UpIGEgbG90IG9m CisgKiAgIHJlYWRzIG1pZ2h0IGJlIHNob3J0IHNlcXVlbnRpYWwgcmVhZHMsIGFuZCBhIGxv dCBvZiB3cml0ZXMgbWF5IGJlIHNob3J0CisgKiAgIHNlcXVlbnRpYWwgd3JpdGVzLiBlZy4g c2Nhbm5pbmcvd3JpdGluZyBhIGpwZWcgZmlsZS4KKyAqICAgSW4gdGhlc2UgY2FzZXMsIGEg c2hvcnQgcmVhZC93cml0ZSBjYWNoZSBjYW4gcHJvdmlkZSBhIGh1Z2UgcGVyZm9tYW5jZSBi ZW5lZml0CisgKiAgIHdpdGggZHVtYi1hcy1hLXJvY2sgY29kZS4KKyAqICAgSW4gTGludXgs IHRoZSBwYWdlIGNhY2hlIHByb3ZpZGVzIHJlYWQgYnVmZmVyaW5nIGFhbmQgdGhlIHNob3J0 IG9wIGNhY2hlIHByb3ZpZGVzIHdyaXRlCisgKiAgIGJ1ZmZlcmluZy4KKyAqCisgKiAgIFRo ZXJlIGFyZSBhIGxpbWl0ZWQgbnVtYmVyICh+MTApIG9mIGNhY2hlIGNodW5rcyBwZXIgZGV2 aWNlIHNvIHRoYXQgd2UgZG9uJ3QKKyAqICAgbmVlZCBhIHZlcnkgaW50ZWxsaWdlbnQgc2Vh cmNoLgorICovCisKK3N0YXRpYyBpbnQgeWFmZnNfT2JqZWN0SGFzQ2FjaGVkV3JpdGVEYXRh KHlhZmZzX09iamVjdCAqb2JqKQoreworCXlhZmZzX0RldmljZSAqZGV2ID0gb2JqLT5teURl djsKKwlpbnQgaTsKKwl5YWZmc19DaHVua0NhY2hlICpjYWNoZTsKKwlpbnQgbkNhY2hlcyA9 IG9iai0+bXlEZXYtPm5TaG9ydE9wQ2FjaGVzOworCisJZm9yIChpID0gMDsgaSA8IG5DYWNo ZXM7IGkrKykgeworCQljYWNoZSA9ICZkZXYtPnNyQ2FjaGVbaV07CisJCWlmIChjYWNoZS0+ b2JqZWN0ID09IG9iaiAmJgorCQkgICAgY2FjaGUtPmRpcnR5KQorCQkJcmV0dXJuIDE7CisJ fQorCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHZvaWQgeWFmZnNfRmx1c2hGaWxlc0No dW5rQ2FjaGUoeWFmZnNfT2JqZWN0ICpvYmopCit7CisJeWFmZnNfRGV2aWNlICpkZXYgPSBv YmotPm15RGV2OworCWludCBsb3dlc3QgPSAtOTk7CS8qIFN0b3AgY29tcGlsZXIgd2hpbmlu Zy4gKi8KKwlpbnQgaTsKKwl5YWZmc19DaHVua0NhY2hlICpjYWNoZTsKKwlpbnQgY2h1bmtX cml0dGVuID0gMDsKKwlpbnQgbkNhY2hlcyA9IG9iai0+bXlEZXYtPm5TaG9ydE9wQ2FjaGVz OworCisJaWYgKG5DYWNoZXMgPiAwKSB7CisJCWRvIHsKKwkJCWNhY2hlID0gTlVMTDsKKwor CQkJLyogRmluZCB0aGUgZGlydHkgY2FjaGUgZm9yIHRoaXMgb2JqZWN0IHdpdGggdGhlIGxv d2VzdCBjaHVuayBpZC4gKi8KKwkJCWZvciAoaSA9IDA7IGkgPCBuQ2FjaGVzOyBpKyspIHsK KwkJCQlpZiAoZGV2LT5zckNhY2hlW2ldLm9iamVjdCA9PSBvYmogJiYKKwkJCQkgICAgZGV2 LT5zckNhY2hlW2ldLmRpcnR5KSB7CisJCQkJCWlmICghY2FjaGUKKwkJCQkJICAgIHx8IGRl di0+c3JDYWNoZVtpXS5jaHVua0lkIDwKKwkJCQkJICAgIGxvd2VzdCkgeworCQkJCQkJY2Fj aGUgPSAmZGV2LT5zckNhY2hlW2ldOworCQkJCQkJbG93ZXN0ID0gY2FjaGUtPmNodW5rSWQ7 CisJCQkJCX0KKwkJCQl9CisJCQl9CisKKwkJCWlmIChjYWNoZSAmJiAhY2FjaGUtPmxvY2tl ZCkgeworCQkJCS8qIFdyaXRlIGl0IG91dCBhbmQgZnJlZSBpdCB1cCAqLworCisJCQkJY2h1 bmtXcml0dGVuID0KKwkJCQkgICAgeWFmZnNfV3JpdGVDaHVua0RhdGFUb09iamVjdChjYWNo ZS0+b2JqZWN0LAorCQkJCQkJCQkgY2FjaGUtPmNodW5rSWQsCisJCQkJCQkJCSBjYWNoZS0+ ZGF0YSwKKwkJCQkJCQkJIGNhY2hlLT5uQnl0ZXMsCisJCQkJCQkJCSAxKTsKKwkJCQljYWNo ZS0+ZGlydHkgPSAwOworCQkJCWNhY2hlLT5vYmplY3QgPSBOVUxMOworCQkJfQorCisJCX0g d2hpbGUgKGNhY2hlICYmIGNodW5rV3JpdHRlbiA+IDApOworCisJCWlmIChjYWNoZSkgewor CQkJLyogSG9vc3Rlcm1hbiwgZGlzayBmdWxsIHdoaWxlIHdyaXRpbmcgY2FjaGUgb3V0LiAq LworCQkJVChZQUZGU19UUkFDRV9FUlJPUiwKKwkJCSAgKFRTVFIoInlhZmZzIHRyYWdlZHk6 IG5vIHNwYWNlIGR1cmluZyBjYWNoZSB3cml0ZSIgVEVORFNUUikpKTsKKworCQl9CisJfQor Cit9CisKKy8qeWFmZnNfRmx1c2hFbnRpcmVEZXZpY2VDYWNoZShkZXYpCisgKgorICoKKyAq LworCit2b2lkIHlhZmZzX0ZsdXNoRW50aXJlRGV2aWNlQ2FjaGUoeWFmZnNfRGV2aWNlICpk ZXYpCit7CisJeWFmZnNfT2JqZWN0ICpvYmo7CisJaW50IG5DYWNoZXMgPSBkZXYtPm5TaG9y dE9wQ2FjaGVzOworCWludCBpOworCisJLyogRmluZCBhIGRpcnR5IG9iamVjdCBpbiB0aGUg Y2FjaGUgYW5kIGZsdXNoIGl0Li4uCisJICogdW50aWwgdGhlcmUgYXJlIG5vIGZ1cnRoZXIg ZGlydHkgb2JqZWN0cy4KKwkgKi8KKwlkbyB7CisJCW9iaiA9IE5VTEw7CisJCWZvciAoaSA9 IDA7IGkgPCBuQ2FjaGVzICYmICFvYmo7IGkrKykgeworCQkJaWYgKGRldi0+c3JDYWNoZVtp XS5vYmplY3QgJiYKKwkJCSAgICBkZXYtPnNyQ2FjaGVbaV0uZGlydHkpCisJCQkJb2JqID0g ZGV2LT5zckNhY2hlW2ldLm9iamVjdDsKKworCQl9CisJCWlmIChvYmopCisJCQl5YWZmc19G bHVzaEZpbGVzQ2h1bmtDYWNoZShvYmopOworCisJfSB3aGlsZSAob2JqKTsKKworfQorCisK Ky8qIEdyYWIgdXMgYSBjYWNoZSBjaHVuayBmb3IgdXNlLgorICogRmlyc3QgbG9vayBmb3Ig YW4gZW1wdHkgb25lLgorICogVGhlbiBsb29rIGZvciB0aGUgbGVhc3QgcmVjZW50bHkgdXNl ZCBub24tZGlydHkgb25lLgorICogVGhlbiBsb29rIGZvciB0aGUgbGVhc3QgcmVjZW50bHkg dXNlZCBkaXJ0eSBvbmUuLi4uLCBmbHVzaCBhbmQgbG9vayBhZ2Fpbi4KKyAqLworc3RhdGlj IHlhZmZzX0NodW5rQ2FjaGUgKnlhZmZzX0dyYWJDaHVua0NhY2hlV29ya2VyKHlhZmZzX0Rl dmljZSAqZGV2KQoreworCWludCBpOworCisJaWYgKGRldi0+blNob3J0T3BDYWNoZXMgPiAw KSB7CisJCWZvciAoaSA9IDA7IGkgPCBkZXYtPm5TaG9ydE9wQ2FjaGVzOyBpKyspIHsKKwkJ CWlmICghZGV2LT5zckNhY2hlW2ldLm9iamVjdCkKKwkJCQlyZXR1cm4gJmRldi0+c3JDYWNo ZVtpXTsKKwkJfQorCX0KKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgeWFmZnNfQ2h1 bmtDYWNoZSAqeWFmZnNfR3JhYkNodW5rQ2FjaGUoeWFmZnNfRGV2aWNlICpkZXYpCit7CisJ eWFmZnNfQ2h1bmtDYWNoZSAqY2FjaGU7CisJeWFmZnNfT2JqZWN0ICp0aGVPYmo7CisJaW50 IHVzYWdlOworCWludCBpOworCWludCBwdXNob3V0OworCisJaWYgKGRldi0+blNob3J0T3BD YWNoZXMgPiAwKSB7CisJCS8qIFRyeSBmaW5kIGEgbm9uLWRpcnR5IG9uZS4uLiAqLworCisJ CWNhY2hlID0geWFmZnNfR3JhYkNodW5rQ2FjaGVXb3JrZXIoZGV2KTsKKworCQlpZiAoIWNh Y2hlKSB7CisJCQkvKiBUaGV5IHdlcmUgYWxsIGRpcnR5LCBmaW5kIHRoZSBsYXN0IHJlY2Vu dGx5IHVzZWQgb2JqZWN0IGFuZCBmbHVzaAorCQkJICogaXRzIGNhY2hlLCB0aGVuICBmaW5k IGFnYWluLgorCQkJICogTkIgd2hhdCdzIGhlcmUgaXMgbm90IHZlcnkgYWNjdXJhdGUsIHdl IGFjdHVhbGx5IGZsdXNoIHRoZSBvYmplY3QKKwkJCSAqIHRoZSBsYXN0IHJlY2VudGx5IHVz ZWQgcGFnZS4KKwkJCSAqLworCisJCQkvKiBXaXRoIGxvY2tpbmcgd2UgY2FuJ3QgYXNzdW1l IHdlIGNhbiB1c2UgZW50cnkgemVybyAqLworCisJCQl0aGVPYmogPSBOVUxMOworCQkJdXNh Z2UgPSAtMTsKKwkJCWNhY2hlID0gTlVMTDsKKwkJCXB1c2hvdXQgPSAtMTsKKworCQkJZm9y IChpID0gMDsgaSA8IGRldi0+blNob3J0T3BDYWNoZXM7IGkrKykgeworCQkJCWlmIChkZXYt PnNyQ2FjaGVbaV0ub2JqZWN0ICYmCisJCQkJICAgICFkZXYtPnNyQ2FjaGVbaV0ubG9ja2Vk ICYmCisJCQkJICAgIChkZXYtPnNyQ2FjaGVbaV0ubGFzdFVzZSA8IHVzYWdlIHx8ICFjYWNo ZSkpIHsKKwkJCQkJdXNhZ2UgPSBkZXYtPnNyQ2FjaGVbaV0ubGFzdFVzZTsKKwkJCQkJdGhl T2JqID0gZGV2LT5zckNhY2hlW2ldLm9iamVjdDsKKwkJCQkJY2FjaGUgPSAmZGV2LT5zckNh Y2hlW2ldOworCQkJCQlwdXNob3V0ID0gaTsKKwkJCQl9CisJCQl9CisKKwkJCWlmICghY2Fj aGUgfHwgY2FjaGUtPmRpcnR5KSB7CisJCQkJLyogRmx1c2ggYW5kIHRyeSBhZ2FpbiAqLwor CQkJCXlhZmZzX0ZsdXNoRmlsZXNDaHVua0NhY2hlKHRoZU9iaik7CisJCQkJY2FjaGUgPSB5 YWZmc19HcmFiQ2h1bmtDYWNoZVdvcmtlcihkZXYpOworCQkJfQorCisJCX0KKwkJcmV0dXJu IGNhY2hlOworCX0gZWxzZQorCQlyZXR1cm4gTlVMTDsKKworfQorCisvKiBGaW5kIGEgY2Fj aGVkIGNodW5rICovCitzdGF0aWMgeWFmZnNfQ2h1bmtDYWNoZSAqeWFmZnNfRmluZENodW5r Q2FjaGUoY29uc3QgeWFmZnNfT2JqZWN0ICpvYmosCisJCQkJCSAgICAgIGludCBjaHVua0lk KQoreworCXlhZmZzX0RldmljZSAqZGV2ID0gb2JqLT5teURldjsKKwlpbnQgaTsKKwlpZiAo ZGV2LT5uU2hvcnRPcENhY2hlcyA+IDApIHsKKwkJZm9yIChpID0gMDsgaSA8IGRldi0+blNo b3J0T3BDYWNoZXM7IGkrKykgeworCQkJaWYgKGRldi0+c3JDYWNoZVtpXS5vYmplY3QgPT0g b2JqICYmCisJCQkgICAgZGV2LT5zckNhY2hlW2ldLmNodW5rSWQgPT0gY2h1bmtJZCkgewor CQkJCWRldi0+Y2FjaGVIaXRzKys7CisKKwkJCQlyZXR1cm4gJmRldi0+c3JDYWNoZVtpXTsK KwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyogTWFyayB0aGUgY2h1bmsg Zm9yIHRoZSBsZWFzdCByZWNlbnRseSB1c2VkIGFsZ29yaXRoeW0gKi8KK3N0YXRpYyB2b2lk IHlhZmZzX1VzZUNodW5rQ2FjaGUoeWFmZnNfRGV2aWNlICpkZXYsIHlhZmZzX0NodW5rQ2Fj aGUgKmNhY2hlLAorCQkJCWludCBpc0FXcml0ZSkKK3sKKworCWlmIChkZXYtPm5TaG9ydE9w Q2FjaGVzID4gMCkgeworCQlpZiAoZGV2LT5zckxhc3RVc2UgPCAwIHx8IGRldi0+c3JMYXN0 VXNlID4gMTAwMDAwMDAwKSB7CisJCQkvKiBSZXNldCB0aGUgY2FjaGUgdXNhZ2VzICovCisJ CQlpbnQgaTsKKwkJCWZvciAoaSA9IDE7IGkgPCBkZXYtPm5TaG9ydE9wQ2FjaGVzOyBpKysp CisJCQkJZGV2LT5zckNhY2hlW2ldLmxhc3RVc2UgPSAwOworCisJCQlkZXYtPnNyTGFzdFVz ZSA9IDA7CisJCX0KKworCQlkZXYtPnNyTGFzdFVzZSsrOworCisJCWNhY2hlLT5sYXN0VXNl ID0gZGV2LT5zckxhc3RVc2U7CisKKwkJaWYgKGlzQVdyaXRlKQorCQkJY2FjaGUtPmRpcnR5 ID0gMTsKKwl9Cit9CisKKy8qIEludmFsaWRhdGUgYSBzaW5nbGUgY2FjaGUgcGFnZS4KKyAq IERvIHRoaXMgd2hlbiBhIHdob2xlIHBhZ2UgZ2V0cyB3cml0dGVuLAorICogaWUgdGhlIHNo b3J0IGNhY2hlIGZvciB0aGlzIHBhZ2UgaXMgbm8gbG9uZ2VyIHZhbGlkLgorICovCitzdGF0 aWMgdm9pZCB5YWZmc19JbnZhbGlkYXRlQ2h1bmtDYWNoZSh5YWZmc19PYmplY3QgKm9iamVj dCwgaW50IGNodW5rSWQpCit7CisJaWYgKG9iamVjdC0+bXlEZXYtPm5TaG9ydE9wQ2FjaGVz ID4gMCkgeworCQl5YWZmc19DaHVua0NhY2hlICpjYWNoZSA9IHlhZmZzX0ZpbmRDaHVua0Nh Y2hlKG9iamVjdCwgY2h1bmtJZCk7CisKKwkJaWYgKGNhY2hlKQorCQkJY2FjaGUtPm9iamVj dCA9IE5VTEw7CisJfQorfQorCisvKiBJbnZhbGlkYXRlIGFsbCB0aGUgY2FjaGUgcGFnZXMg YXNzb2NpYXRlZCB3aXRoIHRoaXMgb2JqZWN0CisgKiBEbyB0aGlzIHdoZW5ldmVyIHRoZXIg ZmlsZSBpcyBkZWxldGVkIG9yIHJlc2l6ZWQuCisgKi8KK3N0YXRpYyB2b2lkIHlhZmZzX0lu dmFsaWRhdGVXaG9sZUNodW5rQ2FjaGUoeWFmZnNfT2JqZWN0ICppbikKK3sKKwlpbnQgaTsK Kwl5YWZmc19EZXZpY2UgKmRldiA9IGluLT5teURldjsKKworCWlmIChkZXYtPm5TaG9ydE9w Q2FjaGVzID4gMCkgeworCQkvKiBJbnZhbGlkYXRlIGl0LiAqLworCQlmb3IgKGkgPSAwOyBp IDwgZGV2LT5uU2hvcnRPcENhY2hlczsgaSsrKSB7CisJCQlpZiAoZGV2LT5zckNhY2hlW2ld Lm9iamVjdCA9PSBpbikKKwkJCQlkZXYtPnNyQ2FjaGVbaV0ub2JqZWN0ID0gTlVMTDsKKwkJ fQorCX0KK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ2hlY2twb2ludGluZyAtLS0t LS0tLS0tLS0tLS0tLS0tLSovCisKKworc3RhdGljIGludCB5YWZmc19Xcml0ZUNoZWNrcG9p bnRWYWxpZGl0eU1hcmtlcih5YWZmc19EZXZpY2UgKmRldiwgaW50IGhlYWQpCit7CisJeWFm ZnNfQ2hlY2twb2ludFZhbGlkaXR5IGNwOworCisJbWVtc2V0KCZjcCwgMCwgc2l6ZW9mKGNw KSk7CisKKwljcC5zdHJ1Y3RUeXBlID0gc2l6ZW9mKGNwKTsKKwljcC5tYWdpYyA9IFlBRkZT X01BR0lDOworCWNwLnZlcnNpb24gPSBZQUZGU19DSEVDS1BPSU5UX1ZFUlNJT047CisJY3Au aGVhZCA9IChoZWFkKSA/IDEgOiAwOworCisJcmV0dXJuICh5YWZmc19DaGVja3BvaW50V3Jp dGUoZGV2LCAmY3AsIHNpemVvZihjcCkpID09IHNpemVvZihjcCkpID8KKwkJMSA6IDA7Cit9 CisKK3N0YXRpYyBpbnQgeWFmZnNfUmVhZENoZWNrcG9pbnRWYWxpZGl0eU1hcmtlcih5YWZm c19EZXZpY2UgKmRldiwgaW50IGhlYWQpCit7CisJeWFmZnNfQ2hlY2twb2ludFZhbGlkaXR5 IGNwOworCWludCBvazsKKworCW9rID0gKHlhZmZzX0NoZWNrcG9pbnRSZWFkKGRldiwgJmNw LCBzaXplb2YoY3ApKSA9PSBzaXplb2YoY3ApKTsKKworCWlmIChvaykKKwkJb2sgPSAoY3Au c3RydWN0VHlwZSA9PSBzaXplb2YoY3ApKSAmJgorCQkgICAgIChjcC5tYWdpYyA9PSBZQUZG U19NQUdJQykgJiYKKwkJICAgICAoY3AudmVyc2lvbiA9PSBZQUZGU19DSEVDS1BPSU5UX1ZF UlNJT04pICYmCisJCSAgICAgKGNwLmhlYWQgPT0gKChoZWFkKSA/IDEgOiAwKSk7CisJcmV0 dXJuIG9rID8gMSA6IDA7Cit9CisKK3N0YXRpYyB2b2lkIHlhZmZzX0RldmljZVRvQ2hlY2tw b2ludERldmljZSh5YWZmc19DaGVja3BvaW50RGV2aWNlICpjcCwKKwkJCQkJICAgeWFmZnNf RGV2aWNlICpkZXYpCit7CisJY3AtPm5FcmFzZWRCbG9ja3MgPSBkZXYtPm5FcmFzZWRCbG9j a3M7CisJY3AtPmFsbG9jYXRpb25CbG9jayA9IGRldi0+YWxsb2NhdGlvbkJsb2NrOworCWNw LT5hbGxvY2F0aW9uUGFnZSA9IGRldi0+YWxsb2NhdGlvblBhZ2U7CisJY3AtPm5GcmVlQ2h1 bmtzID0gZGV2LT5uRnJlZUNodW5rczsKKworCWNwLT5uRGVsZXRlZEZpbGVzID0gZGV2LT5u RGVsZXRlZEZpbGVzOworCWNwLT5uVW5saW5rZWRGaWxlcyA9IGRldi0+blVubGlua2VkRmls ZXM7CisJY3AtPm5CYWNrZ3JvdW5kRGVsZXRpb25zID0gZGV2LT5uQmFja2dyb3VuZERlbGV0 aW9uczsKKwljcC0+c2VxdWVuY2VOdW1iZXIgPSBkZXYtPnNlcXVlbmNlTnVtYmVyOworCWNw LT5vbGRlc3REaXJ0eVNlcXVlbmNlID0gZGV2LT5vbGRlc3REaXJ0eVNlcXVlbmNlOworCit9 CisKK3N0YXRpYyB2b2lkIHlhZmZzX0NoZWNrcG9pbnREZXZpY2VUb0RldmljZSh5YWZmc19E ZXZpY2UgKmRldiwKKwkJCQkJICAgeWFmZnNfQ2hlY2twb2ludERldmljZSAqY3ApCit7CisJ ZGV2LT5uRXJhc2VkQmxvY2tzID0gY3AtPm5FcmFzZWRCbG9ja3M7CisJZGV2LT5hbGxvY2F0 aW9uQmxvY2sgPSBjcC0+YWxsb2NhdGlvbkJsb2NrOworCWRldi0+YWxsb2NhdGlvblBhZ2Ug PSBjcC0+YWxsb2NhdGlvblBhZ2U7CisJZGV2LT5uRnJlZUNodW5rcyA9IGNwLT5uRnJlZUNo dW5rczsKKworCWRldi0+bkRlbGV0ZWRGaWxlcyA9IGNwLT5uRGVsZXRlZEZpbGVzOworCWRl di0+blVubGlua2VkRmlsZXMgPSBjcC0+blVubGlua2VkRmlsZXM7CisJZGV2LT5uQmFja2dy b3VuZERlbGV0aW9ucyA9IGNwLT5uQmFja2dyb3VuZERlbGV0aW9uczsKKwlkZXYtPnNlcXVl bmNlTnVtYmVyID0gY3AtPnNlcXVlbmNlTnVtYmVyOworCWRldi0+b2xkZXN0RGlydHlTZXF1 ZW5jZSA9IGNwLT5vbGRlc3REaXJ0eVNlcXVlbmNlOworfQorCisKK3N0YXRpYyBpbnQgeWFm ZnNfV3JpdGVDaGVja3BvaW50RGV2aWNlKHlhZmZzX0RldmljZSAqZGV2KQoreworCXlhZmZz X0NoZWNrcG9pbnREZXZpY2UgY3A7CisJX191MzIgbkJ5dGVzOworCV9fdTMyIG5CbG9ja3Mg PSAoZGV2LT5pbnRlcm5hbEVuZEJsb2NrIC0gZGV2LT5pbnRlcm5hbFN0YXJ0QmxvY2sgKyAx KTsKKworCWludCBvazsKKworCS8qIFdyaXRlIGRldmljZSBydW50aW1lIHZhbHVlcyovCisJ eWFmZnNfRGV2aWNlVG9DaGVja3BvaW50RGV2aWNlKCZjcCwgZGV2KTsKKwljcC5zdHJ1Y3RU eXBlID0gc2l6ZW9mKGNwKTsKKworCW9rID0gKHlhZmZzX0NoZWNrcG9pbnRXcml0ZShkZXYs ICZjcCwgc2l6ZW9mKGNwKSkgPT0gc2l6ZW9mKGNwKSk7CisKKwkvKiBXcml0ZSBibG9jayBp bmZvICovCisJaWYgKG9rKSB7CisJCW5CeXRlcyA9IG5CbG9ja3MgKiBzaXplb2YoeWFmZnNf QmxvY2tJbmZvKTsKKwkJb2sgPSAoeWFmZnNfQ2hlY2twb2ludFdyaXRlKGRldiwgZGV2LT5i bG9ja0luZm8sIG5CeXRlcykgPT0gbkJ5dGVzKTsKKwl9CisKKwkvKiBXcml0ZSBjaHVuayBi aXRzICovCisJaWYgKG9rKSB7CisJCW5CeXRlcyA9IG5CbG9ja3MgKiBkZXYtPmNodW5rQml0 bWFwU3RyaWRlOworCQlvayA9ICh5YWZmc19DaGVja3BvaW50V3JpdGUoZGV2LCBkZXYtPmNo dW5rQml0cywgbkJ5dGVzKSA9PSBuQnl0ZXMpOworCX0KKwlyZXR1cm4JIG9rID8gMSA6IDA7 CisKK30KKworc3RhdGljIGludCB5YWZmc19SZWFkQ2hlY2twb2ludERldmljZSh5YWZmc19E ZXZpY2UgKmRldikKK3sKKwl5YWZmc19DaGVja3BvaW50RGV2aWNlIGNwOworCV9fdTMyIG5C eXRlczsKKwlfX3UzMiBuQmxvY2tzID0gKGRldi0+aW50ZXJuYWxFbmRCbG9jayAtIGRldi0+ aW50ZXJuYWxTdGFydEJsb2NrICsgMSk7CisKKwlpbnQgb2s7CisKKwlvayA9ICh5YWZmc19D aGVja3BvaW50UmVhZChkZXYsICZjcCwgc2l6ZW9mKGNwKSkgPT0gc2l6ZW9mKGNwKSk7CisJ aWYgKCFvaykKKwkJcmV0dXJuIDA7CisKKwlpZiAoY3Auc3RydWN0VHlwZSAhPSBzaXplb2Yo Y3ApKQorCQlyZXR1cm4gMDsKKworCisJeWFmZnNfQ2hlY2twb2ludERldmljZVRvRGV2aWNl KGRldiwgJmNwKTsKKworCW5CeXRlcyA9IG5CbG9ja3MgKiBzaXplb2YoeWFmZnNfQmxvY2tJ bmZvKTsKKworCW9rID0gKHlhZmZzX0NoZWNrcG9pbnRSZWFkKGRldiwgZGV2LT5ibG9ja0lu Zm8sIG5CeXRlcykgPT0gbkJ5dGVzKTsKKworCWlmICghb2spCisJCXJldHVybiAwOworCW5C eXRlcyA9IG5CbG9ja3MgKiBkZXYtPmNodW5rQml0bWFwU3RyaWRlOworCisJb2sgPSAoeWFm ZnNfQ2hlY2twb2ludFJlYWQoZGV2LCBkZXYtPmNodW5rQml0cywgbkJ5dGVzKSA9PSBuQnl0 ZXMpOworCisJcmV0dXJuIG9rID8gMSA6IDA7Cit9CisKK3N0YXRpYyB2b2lkIHlhZmZzX09i amVjdFRvQ2hlY2twb2ludE9iamVjdCh5YWZmc19DaGVja3BvaW50T2JqZWN0ICpjcCwKKwkJ CQkJICAgeWFmZnNfT2JqZWN0ICpvYmopCit7CisKKwljcC0+b2JqZWN0SWQgPSBvYmotPm9i amVjdElkOworCWNwLT5wYXJlbnRJZCA9IChvYmotPnBhcmVudCkgPyBvYmotPnBhcmVudC0+ b2JqZWN0SWQgOiAwOworCWNwLT5oZHJDaHVuayA9IG9iai0+aGRyQ2h1bms7CisJY3AtPnZh cmlhbnRUeXBlID0gb2JqLT52YXJpYW50VHlwZTsKKwljcC0+ZGVsZXRlZCA9IG9iai0+ZGVs ZXRlZDsKKwljcC0+c29mdERlbGV0ZWQgPSBvYmotPnNvZnREZWxldGVkOworCWNwLT51bmxp bmtlZCA9IG9iai0+dW5saW5rZWQ7CisJY3AtPmZha2UgPSBvYmotPmZha2U7CisJY3AtPnJl bmFtZUFsbG93ZWQgPSBvYmotPnJlbmFtZUFsbG93ZWQ7CisJY3AtPnVubGlua0FsbG93ZWQg PSBvYmotPnVubGlua0FsbG93ZWQ7CisJY3AtPnNlcmlhbCA9IG9iai0+c2VyaWFsOworCWNw LT5uRGF0YUNodW5rcyA9IG9iai0+bkRhdGFDaHVua3M7CisKKwlpZiAob2JqLT52YXJpYW50 VHlwZSA9PSBZQUZGU19PQkpFQ1RfVFlQRV9GSUxFKQorCQljcC0+ZmlsZVNpemVPckVxdWl2 YWxlbnRPYmplY3RJZCA9IG9iai0+dmFyaWFudC5maWxlVmFyaWFudC5maWxlU2l6ZTsKKwll bHNlIGlmIChvYmotPnZhcmlhbnRUeXBlID09IFlBRkZTX09CSkVDVF9UWVBFX0hBUkRMSU5L KQorCQljcC0+ZmlsZVNpemVPckVxdWl2YWxlbnRPYmplY3RJZCA9IG9iai0+dmFyaWFudC5o YXJkTGlua1ZhcmlhbnQuZXF1aXZhbGVudE9iamVjdElkOworfQorCitzdGF0aWMgaW50IHlh ZmZzX0NoZWNrcG9pbnRPYmplY3RUb09iamVjdCh5YWZmc19PYmplY3QgKm9iaiwgeWFmZnNf Q2hlY2twb2ludE9iamVjdCAqY3ApCit7CisKKwl5YWZmc19PYmplY3QgKnBhcmVudDsKKwor CWlmIChvYmotPnZhcmlhbnRUeXBlICE9IGNwLT52YXJpYW50VHlwZSkgeworCQlUKFlBRkZT X1RSQUNFX0VSUk9SLCAoVFNUUigiQ2hlY2twb2ludCByZWFkIG9iamVjdCAlZCB0eXBlICVk ICIKKwkJCVRDT05UKCJjaHVuayAlZCBkb2VzIG5vdCBtYXRjaCBleGlzdGluZyBvYmplY3Qg dHlwZSAlZCIpCisJCQlURU5EU1RSKSwgY3AtPm9iamVjdElkLCBjcC0+dmFyaWFudFR5cGUs IGNwLT5oZHJDaHVuaywKKwkJCW9iai0+dmFyaWFudFR5cGUpKTsKKwkJcmV0dXJuIDA7CisJ fQorCisJb2JqLT5vYmplY3RJZCA9IGNwLT5vYmplY3RJZDsKKworCWlmIChjcC0+cGFyZW50 SWQpCisJCXBhcmVudCA9IHlhZmZzX0ZpbmRPckNyZWF0ZU9iamVjdEJ5TnVtYmVyKAorCQkJ CQlvYmotPm15RGV2LAorCQkJCQljcC0+cGFyZW50SWQsCisJCQkJCVlBRkZTX09CSkVDVF9U WVBFX0RJUkVDVE9SWSk7CisJZWxzZQorCQlwYXJlbnQgPSBOVUxMOworCisJaWYgKHBhcmVu dCkgeworCQlpZiAocGFyZW50LT52YXJpYW50VHlwZSAhPSBZQUZGU19PQkpFQ1RfVFlQRV9E SVJFQ1RPUlkpIHsKKwkJCVQoWUFGRlNfVFJBQ0VfQUxXQVlTLCAoVFNUUigiQ2hlY2twb2lu dCByZWFkIG9iamVjdCAlZCBwYXJlbnQgJWQgdHlwZSAlZCIKKwkJCQlUQ09OVCgiIGNodW5r ICVkIFBhcmVudCB0eXBlLCAlZCwgbm90IGRpcmVjdG9yeSIpCisJCQkJVEVORFNUUiksCisJ CQkJY3AtPm9iamVjdElkLCBjcC0+cGFyZW50SWQsIGNwLT52YXJpYW50VHlwZSwKKwkJCQlj cC0+aGRyQ2h1bmssIHBhcmVudC0+dmFyaWFudFR5cGUpKTsKKwkJCXJldHVybiAwOworCQl9 CisJCXlhZmZzX0FkZE9iamVjdFRvRGlyZWN0b3J5KHBhcmVudCwgb2JqKTsKKwl9CisKKwlv YmotPmhkckNodW5rID0gY3AtPmhkckNodW5rOworCW9iai0+dmFyaWFudFR5cGUgPSBjcC0+ dmFyaWFudFR5cGU7CisJb2JqLT5kZWxldGVkID0gY3AtPmRlbGV0ZWQ7CisJb2JqLT5zb2Z0 RGVsZXRlZCA9IGNwLT5zb2Z0RGVsZXRlZDsKKwlvYmotPnVubGlua2VkID0gY3AtPnVubGlu a2VkOworCW9iai0+ZmFrZSA9IGNwLT5mYWtlOworCW9iai0+cmVuYW1lQWxsb3dlZCA9IGNw LT5yZW5hbWVBbGxvd2VkOworCW9iai0+dW5saW5rQWxsb3dlZCA9IGNwLT51bmxpbmtBbGxv d2VkOworCW9iai0+c2VyaWFsID0gY3AtPnNlcmlhbDsKKwlvYmotPm5EYXRhQ2h1bmtzID0g Y3AtPm5EYXRhQ2h1bmtzOworCisJaWYgKG9iai0+dmFyaWFudFR5cGUgPT0gWUFGRlNfT0JK RUNUX1RZUEVfRklMRSkKKwkJb2JqLT52YXJpYW50LmZpbGVWYXJpYW50LmZpbGVTaXplID0g Y3AtPmZpbGVTaXplT3JFcXVpdmFsZW50T2JqZWN0SWQ7CisJZWxzZSBpZiAob2JqLT52YXJp YW50VHlwZSA9PSBZQUZGU19PQkpFQ1RfVFlQRV9IQVJETElOSykKKwkJb2JqLT52YXJpYW50 LmhhcmRMaW5rVmFyaWFudC5lcXVpdmFsZW50T2JqZWN0SWQgPSBjcC0+ZmlsZVNpemVPckVx dWl2YWxlbnRPYmplY3RJZDsKKworCWlmIChvYmotPmhkckNodW5rID4gMCkKKwkJb2JqLT5s YXp5TG9hZGVkID0gMTsKKwlyZXR1cm4gMTsKK30KKworCisKK3N0YXRpYyBpbnQgeWFmZnNf Q2hlY2twb2ludFRub2RlV29ya2VyKHlhZmZzX09iamVjdCAqaW4sIHlhZmZzX1Rub2RlICp0 biwKKwkJCQkJX191MzIgbGV2ZWwsIGludCBjaHVua09mZnNldCkKK3sKKwlpbnQgaTsKKwl5 YWZmc19EZXZpY2UgKmRldiA9IGluLT5teURldjsKKwlpbnQgb2sgPSAxOworCWludCB0bm9k ZVNpemUgPSAoZGV2LT50bm9kZVdpZHRoICogWUFGRlNfTlROT0RFU19MRVZFTDApLzg7CisK KwlpZiAodG5vZGVTaXplIDwgc2l6ZW9mKHlhZmZzX1Rub2RlKSkKKwkJdG5vZGVTaXplID0g c2l6ZW9mKHlhZmZzX1Rub2RlKTsKKworCisJaWYgKHRuKSB7CisJCWlmIChsZXZlbCA+IDAp IHsKKworCQkJZm9yIChpID0gMDsgaSA8IFlBRkZTX05UTk9ERVNfSU5URVJOQUwgJiYgb2s7 IGkrKykgeworCQkJCWlmICh0bi0+aW50ZXJuYWxbaV0pIHsKKwkJCQkJb2sgPSB5YWZmc19D aGVja3BvaW50VG5vZGVXb3JrZXIoaW4sCisJCQkJCQkJdG4tPmludGVybmFsW2ldLAorCQkJ CQkJCWxldmVsIC0gMSwKKwkJCQkJCQkoY2h1bmtPZmZzZXQ8PFlBRkZTX1ROT0RFU19JTlRF Uk5BTF9CSVRTKSArIGkpOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIGlmIChsZXZlbCA9PSAw KSB7CisJCQlfX3UzMiBiYXNlT2Zmc2V0ID0gY2h1bmtPZmZzZXQgPDwgIFlBRkZTX1ROT0RF U19MRVZFTDBfQklUUzsKKwkJCW9rID0gKHlhZmZzX0NoZWNrcG9pbnRXcml0ZShkZXYsICZi YXNlT2Zmc2V0LCBzaXplb2YoYmFzZU9mZnNldCkpID09IHNpemVvZihiYXNlT2Zmc2V0KSk7 CisJCQlpZiAob2spCisJCQkJb2sgPSAoeWFmZnNfQ2hlY2twb2ludFdyaXRlKGRldiwgdG4s IHRub2RlU2l6ZSkgPT0gdG5vZGVTaXplKTsKKwkJfQorCX0KKworCXJldHVybiBvazsKKwor fQorCitzdGF0aWMgaW50IHlhZmZzX1dyaXRlQ2hlY2twb2ludFRub2Rlcyh5YWZmc19PYmpl Y3QgKm9iaikKK3sKKwlfX3UzMiBlbmRNYXJrZXIgPSB+MDsKKwlpbnQgb2sgPSAxOworCisJ aWYgKG9iai0+dmFyaWFudFR5cGUgPT0gWUFGRlNfT0JKRUNUX1RZUEVfRklMRSkgeworCQlv ayA9IHlhZmZzX0NoZWNrcG9pbnRUbm9kZVdvcmtlcihvYmosCisJCQkJCSAgICBvYmotPnZh cmlhbnQuZmlsZVZhcmlhbnQudG9wLAorCQkJCQkgICAgb2JqLT52YXJpYW50LmZpbGVWYXJp YW50LnRvcExldmVsLAorCQkJCQkgICAgMCk7CisJCWlmIChvaykKKwkJCW9rID0gKHlhZmZz X0NoZWNrcG9pbnRXcml0ZShvYmotPm15RGV2LCAmZW5kTWFya2VyLCBzaXplb2YoZW5kTWFy a2VyKSkgPT0KKwkJCQlzaXplb2YoZW5kTWFya2VyKSk7CisJfQorCisJcmV0dXJuIG9rID8g MSA6IDA7Cit9CisKK3N0YXRpYyBpbnQgeWFmZnNfUmVhZENoZWNrcG9pbnRUbm9kZXMoeWFm ZnNfT2JqZWN0ICpvYmopCit7CisJX191MzIgYmFzZUNodW5rOworCWludCBvayA9IDE7CisJ eWFmZnNfRGV2aWNlICpkZXYgPSBvYmotPm15RGV2OworCXlhZmZzX0ZpbGVTdHJ1Y3R1cmUg KmZpbGVTdHJ1Y3RQdHIgPSAmb2JqLT52YXJpYW50LmZpbGVWYXJpYW50OworCXlhZmZzX1Ru b2RlICp0bjsKKwlpbnQgbnJlYWQgPSAwOworCWludCB0bm9kZVNpemUgPSAoZGV2LT50bm9k ZVdpZHRoICogWUFGRlNfTlROT0RFU19MRVZFTDApLzg7CisKKwlpZiAodG5vZGVTaXplIDwg c2l6ZW9mKHlhZmZzX1Rub2RlKSkKKwkJdG5vZGVTaXplID0gc2l6ZW9mKHlhZmZzX1Rub2Rl KTsKKworCW9rID0gKHlhZmZzX0NoZWNrcG9pbnRSZWFkKGRldiwgJmJhc2VDaHVuaywgc2l6 ZW9mKGJhc2VDaHVuaykpID09IHNpemVvZihiYXNlQ2h1bmspKTsKKworCXdoaWxlIChvayAm JiAofmJhc2VDaHVuaykpIHsKKwkJbnJlYWQrKzsKKwkJLyogUmVhZCBsZXZlbCAwIHRub2Rl ICovCisKKworCQl0biA9IHlhZmZzX0dldFRub2RlUmF3KGRldik7CisJCWlmICh0bikKKwkJ CW9rID0gKHlhZmZzX0NoZWNrcG9pbnRSZWFkKGRldiwgdG4sIHRub2RlU2l6ZSkgPT0gdG5v ZGVTaXplKTsKKwkJZWxzZQorCQkJb2sgPSAwOworCisJCWlmICh0biAmJiBvaykKKwkJCW9r ID0geWFmZnNfQWRkT3JGaW5kTGV2ZWwwVG5vZGUoZGV2LAorCQkJCQkJCWZpbGVTdHJ1Y3RQ dHIsCisJCQkJCQkJYmFzZUNodW5rLAorCQkJCQkJCXRuKSA/IDEgOiAwOworCisJCWlmIChv aykKKwkJCW9rID0gKHlhZmZzX0NoZWNrcG9pbnRSZWFkKGRldiwgJmJhc2VDaHVuaywgc2l6 ZW9mKGJhc2VDaHVuaykpID09IHNpemVvZihiYXNlQ2h1bmspKTsKKworCX0KKworCVQoWUFG RlNfVFJBQ0VfQ0hFQ0tQT0lOVCwgKAorCQlUU1RSKCJDaGVja3BvaW50IHJlYWQgdG5vZGVz ICVkIHJlY29yZHMsIGxhc3QgJWQuIG9rICVkIiBURU5EU1RSKSwKKwkJbnJlYWQsIGJhc2VD aHVuaywgb2spKTsKKworCXJldHVybiBvayA/IDEgOiAwOworfQorCisKK3N0YXRpYyBpbnQg eWFmZnNfV3JpdGVDaGVja3BvaW50T2JqZWN0cyh5YWZmc19EZXZpY2UgKmRldikKK3sKKwl5 YWZmc19PYmplY3QgKm9iajsKKwl5YWZmc19DaGVja3BvaW50T2JqZWN0IGNwOworCWludCBp OworCWludCBvayA9IDE7CisJc3RydWN0IHlsaXN0X2hlYWQgKmxoOworCisKKwkvKiBJdGVy YXRlIHRocm91Z2ggdGhlIG9iamVjdHMgaW4gZWFjaCBoYXNoIGVudHJ5LAorCSAqIGR1bXBp bmcgdGhlbSB0byB0aGUgY2hlY2twb2ludGluZyBzdHJlYW0uCisJICovCisKKwlmb3IgKGkg PSAwOyBvayAmJiAgaSA8ICBZQUZGU19OT0JKRUNUX0JVQ0tFVFM7IGkrKykgeworCQl5bGlz dF9mb3JfZWFjaChsaCwgJmRldi0+b2JqZWN0QnVja2V0W2ldLmxpc3QpIHsKKwkJCWlmIChs aCkgeworCQkJCW9iaiA9IHlsaXN0X2VudHJ5KGxoLCB5YWZmc19PYmplY3QsIGhhc2hMaW5r KTsKKwkJCQlpZiAoIW9iai0+ZGVmZXJlZEZyZWUpIHsKKwkJCQkJeWFmZnNfT2JqZWN0VG9D aGVja3BvaW50T2JqZWN0KCZjcCwgb2JqKTsKKwkJCQkJY3Auc3RydWN0VHlwZSA9IHNpemVv ZihjcCk7CisKKwkJCQkJVChZQUZGU19UUkFDRV9DSEVDS1BPSU5ULCAoCisJCQkJCQlUU1RS KCJDaGVja3BvaW50IHdyaXRlIG9iamVjdCAlZCBwYXJlbnQgJWQgdHlwZSAlZCBjaHVuayAl ZCBvYmogYWRkciAleCIgVEVORFNUUiksCisJCQkJCQljcC5vYmplY3RJZCwgY3AucGFyZW50 SWQsIGNwLnZhcmlhbnRUeXBlLCBjcC5oZHJDaHVuaywgKHVuc2lnbmVkKSBvYmopKTsKKwor CQkJCQlvayA9ICh5YWZmc19DaGVja3BvaW50V3JpdGUoZGV2LCAmY3AsIHNpemVvZihjcCkp ID09IHNpemVvZihjcCkpOworCisJCQkJCWlmIChvayAmJiBvYmotPnZhcmlhbnRUeXBlID09 IFlBRkZTX09CSkVDVF9UWVBFX0ZJTEUpCisJCQkJCQlvayA9IHlhZmZzX1dyaXRlQ2hlY2tw b2ludFRub2RlcyhvYmopOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qIER1bXAgZW5k IG9mIGxpc3QgKi8KKwltZW1zZXQoJmNwLCAweEZGLCBzaXplb2YoeWFmZnNfQ2hlY2twb2lu dE9iamVjdCkpOworCWNwLnN0cnVjdFR5cGUgPSBzaXplb2YoY3ApOworCisJaWYgKG9rKQor CQlvayA9ICh5YWZmc19DaGVja3BvaW50V3JpdGUoZGV2LCAmY3AsIHNpemVvZihjcCkpID09 IHNpemVvZihjcCkpOworCisJcmV0dXJuIG9rID8gMSA6IDA7Cit9CisKK3N0YXRpYyBpbnQg eWFmZnNfUmVhZENoZWNrcG9pbnRPYmplY3RzKHlhZmZzX0RldmljZSAqZGV2KQoreworCXlh ZmZzX09iamVjdCAqb2JqOworCXlhZmZzX0NoZWNrcG9pbnRPYmplY3QgY3A7CisJaW50IG9r ID0gMTsKKwlpbnQgZG9uZSA9IDA7CisJeWFmZnNfT2JqZWN0ICpoYXJkTGlzdCA9IE5VTEw7 CisKKwl3aGlsZSAob2sgJiYgIWRvbmUpIHsKKwkJb2sgPSAoeWFmZnNfQ2hlY2twb2ludFJl YWQoZGV2LCAmY3AsIHNpemVvZihjcCkpID09IHNpemVvZihjcCkpOworCQlpZiAoY3Auc3Ry dWN0VHlwZSAhPSBzaXplb2YoY3ApKSB7CisJCQlUKFlBRkZTX1RSQUNFX0NIRUNLUE9JTlQs IChUU1RSKCJzdHJ1Y3Qgc2l6ZSAlZCBpbnN0ZWFkIG9mICVkIG9rICVkIlRFTkRTVFIpLAor CQkJCWNwLnN0cnVjdFR5cGUsIHNpemVvZihjcCksIG9rKSk7CisJCQlvayA9IDA7CisJCX0K KworCQlUKFlBRkZTX1RSQUNFX0NIRUNLUE9JTlQsIChUU1RSKCJDaGVja3BvaW50IHJlYWQg b2JqZWN0ICVkIHBhcmVudCAlZCB0eXBlICVkIGNodW5rICVkICIgVEVORFNUUiksCisJCQlj cC5vYmplY3RJZCwgY3AucGFyZW50SWQsIGNwLnZhcmlhbnRUeXBlLCBjcC5oZHJDaHVuaykp OworCisJCWlmIChvayAmJiBjcC5vYmplY3RJZCA9PSB+MCkKKwkJCWRvbmUgPSAxOworCQll bHNlIGlmIChvaykgeworCQkJb2JqID0geWFmZnNfRmluZE9yQ3JlYXRlT2JqZWN0QnlOdW1i ZXIoZGV2LCBjcC5vYmplY3RJZCwgY3AudmFyaWFudFR5cGUpOworCQkJaWYgKG9iaikgewor CQkJCW9rID0geWFmZnNfQ2hlY2twb2ludE9iamVjdFRvT2JqZWN0KG9iaiwgJmNwKTsKKwkJ CQlpZiAoIW9rKQorCQkJCQlicmVhazsKKwkJCQlpZiAob2JqLT52YXJpYW50VHlwZSA9PSBZ QUZGU19PQkpFQ1RfVFlQRV9GSUxFKSB7CisJCQkJCW9rID0geWFmZnNfUmVhZENoZWNrcG9p bnRUbm9kZXMob2JqKTsKKwkJCQl9IGVsc2UgaWYgKG9iai0+dmFyaWFudFR5cGUgPT0gWUFG RlNfT0JKRUNUX1RZUEVfSEFSRExJTkspIHsKKwkJCQkJb2JqLT5oYXJkTGlua3MubmV4dCA9 CisJCQkJCQkoc3RydWN0IHlsaXN0X2hlYWQgKikgaGFyZExpc3Q7CisJCQkJCWhhcmRMaXN0 ID0gb2JqOworCQkJCX0KKwkJCX0gZWxzZQorCQkJCW9rID0gMDsKKwkJfQorCX0KKworCWlm IChvaykKKwkJeWFmZnNfSGFyZGxpbmtGaXh1cChkZXYsIGhhcmRMaXN0KTsKKworCXJldHVy biBvayA/IDEgOiAwOworfQorCitzdGF0aWMgaW50IHlhZmZzX1dyaXRlQ2hlY2twb2ludFN1 bSh5YWZmc19EZXZpY2UgKmRldikKK3sKKwlfX3UzMiBjaGVja3BvaW50U3VtOworCWludCBv azsKKworCXlhZmZzX0dldENoZWNrcG9pbnRTdW0oZGV2LCAmY2hlY2twb2ludFN1bSk7CisK KwlvayA9ICh5YWZmc19DaGVja3BvaW50V3JpdGUoZGV2LCAmY2hlY2twb2ludFN1bSwgc2l6 ZW9mKGNoZWNrcG9pbnRTdW0pKSA9PSBzaXplb2YoY2hlY2twb2ludFN1bSkpOworCisJaWYg KCFvaykKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCB5YWZm c19SZWFkQ2hlY2twb2ludFN1bSh5YWZmc19EZXZpY2UgKmRldikKK3sKKwlfX3UzMiBjaGVj a3BvaW50U3VtMDsKKwlfX3UzMiBjaGVja3BvaW50U3VtMTsKKwlpbnQgb2s7CisKKwl5YWZm c19HZXRDaGVja3BvaW50U3VtKGRldiwgJmNoZWNrcG9pbnRTdW0wKTsKKworCW9rID0gKHlh ZmZzX0NoZWNrcG9pbnRSZWFkKGRldiwgJmNoZWNrcG9pbnRTdW0xLCBzaXplb2YoY2hlY2tw b2ludFN1bTEpKSA9PSBzaXplb2YoY2hlY2twb2ludFN1bTEpKTsKKworCWlmICghb2spCisJ CXJldHVybiAwOworCisJaWYgKGNoZWNrcG9pbnRTdW0wICE9IGNoZWNrcG9pbnRTdW0xKQor CQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCisKK3N0YXRpYyBpbnQgeWFmZnNfV3Jp dGVDaGVja3BvaW50RGF0YSh5YWZmc19EZXZpY2UgKmRldikKK3sKKwlpbnQgb2sgPSAxOwor CisJaWYgKGRldi0+c2tpcENoZWNrcG9pbnRXcml0ZSB8fCAhZGV2LT5pc1lhZmZzMikgewor CQlUKFlBRkZTX1RSQUNFX0NIRUNLUE9JTlQsIChUU1RSKCJza2lwcGluZyBjaGVja3BvaW50 IHdyaXRlIiBURU5EU1RSKSkpOworCQlvayA9IDA7CisJfQorCisJaWYgKG9rKQorCQlvayA9 IHlhZmZzX0NoZWNrcG9pbnRPcGVuKGRldiwgMSk7CisKKwlpZiAob2spIHsKKwkJVChZQUZG U19UUkFDRV9DSEVDS1BPSU5ULCAoVFNUUigid3JpdGUgY2hlY2twb2ludCB2YWxpZGl0eSIg VEVORFNUUikpKTsKKwkJb2sgPSB5YWZmc19Xcml0ZUNoZWNrcG9pbnRWYWxpZGl0eU1hcmtl cihkZXYsIDEpOworCX0KKwlpZiAob2spIHsKKwkJVChZQUZGU19UUkFDRV9DSEVDS1BPSU5U LCAoVFNUUigid3JpdGUgY2hlY2twb2ludCBkZXZpY2UiIFRFTkRTVFIpKSk7CisJCW9rID0g eWFmZnNfV3JpdGVDaGVja3BvaW50RGV2aWNlKGRldik7CisJfQorCWlmIChvaykgeworCQlU KFlBRkZTX1RSQUNFX0NIRUNLUE9JTlQsIChUU1RSKCJ3cml0ZSBjaGVja3BvaW50IG9iamVj dHMiIFRFTkRTVFIpKSk7CisJCW9rID0geWFmZnNfV3JpdGVDaGVja3BvaW50T2JqZWN0cyhk ZXYpOworCX0KKwlpZiAob2spIHsKKwkJVChZQUZGU19UUkFDRV9DSEVDS1BPSU5ULCAoVFNU Uigid3JpdGUgY2hlY2twb2ludCB2YWxpZGl0eSIgVEVORFNUUikpKTsKKwkJb2sgPSB5YWZm c19Xcml0ZUNoZWNrcG9pbnRWYWxpZGl0eU1hcmtlcihkZXYsIDApOworCX0KKworCWlmIChv aykKKwkJb2sgPSB5YWZmc19Xcml0ZUNoZWNrcG9pbnRTdW0oZGV2KTsKKworCWlmICgheWFm ZnNfQ2hlY2twb2ludENsb3NlKGRldikpCisJCW9rID0gMDsKKworCWlmIChvaykKKwkJZGV2 LT5pc0NoZWNrcG9pbnRlZCA9IDE7CisJZWxzZQorCQlkZXYtPmlzQ2hlY2twb2ludGVkID0g MDsKKworCXJldHVybiBkZXYtPmlzQ2hlY2twb2ludGVkOworfQorCitzdGF0aWMgaW50IHlh ZmZzX1JlYWRDaGVja3BvaW50RGF0YSh5YWZmc19EZXZpY2UgKmRldikKK3sKKwlpbnQgb2sg PSAxOworCisJaWYgKGRldi0+c2tpcENoZWNrcG9pbnRSZWFkIHx8ICFkZXYtPmlzWWFmZnMy KSB7CisJCVQoWUFGRlNfVFJBQ0VfQ0hFQ0tQT0lOVCwgKFRTVFIoInNraXBwaW5nIGNoZWNr cG9pbnQgcmVhZCIgVEVORFNUUikpKTsKKwkJb2sgPSAwOworCX0KKworCWlmIChvaykKKwkJ b2sgPSB5YWZmc19DaGVja3BvaW50T3BlbihkZXYsIDApOyAvKiBvcGVuIGZvciByZWFkICov CisKKwlpZiAob2spIHsKKwkJVChZQUZGU19UUkFDRV9DSEVDS1BPSU5ULCAoVFNUUigicmVh ZCBjaGVja3BvaW50IHZhbGlkaXR5IiBURU5EU1RSKSkpOworCQlvayA9IHlhZmZzX1JlYWRD aGVja3BvaW50VmFsaWRpdHlNYXJrZXIoZGV2LCAxKTsKKwl9CisJaWYgKG9rKSB7CisJCVQo WUFGRlNfVFJBQ0VfQ0hFQ0tQT0lOVCwgKFRTVFIoInJlYWQgY2hlY2twb2ludCBkZXZpY2Ui IFRFTkRTVFIpKSk7CisJCW9rID0geWFmZnNfUmVhZENoZWNrcG9pbnREZXZpY2UoZGV2KTsK Kwl9CisJaWYgKG9rKSB7CisJCVQoWUFGRlNfVFJBQ0VfQ0hFQ0tQT0lOVCwgKFRTVFIoInJl YWQgY2hlY2twb2ludCBvYmplY3RzIiBURU5EU1RSKSkpOworCQlvayA9IHlhZmZzX1JlYWRD aGVja3BvaW50T2JqZWN0cyhkZXYpOworCX0KKwlpZiAob2spIHsKKwkJVChZQUZGU19UUkFD RV9DSEVDS1BPSU5ULCAoVFNUUigicmVhZCBjaGVja3BvaW50IHZhbGlkaXR5IiBURU5EU1RS KSkpOworCQlvayA9IHlhZmZzX1JlYWRDaGVja3BvaW50VmFsaWRpdHlNYXJrZXIoZGV2LCAw KTsKKwl9CisKKwlpZiAob2spIHsKKwkJb2sgPSB5YWZmc19SZWFkQ2hlY2twb2ludFN1bShk ZXYpOworCQlUKFlBRkZTX1RSQUNFX0NIRUNLUE9JTlQsIChUU1RSKCJyZWFkIGNoZWNrcG9p bnQgY2hlY2tzdW0gJWQiIFRFTkRTVFIpLCBvaykpOworCX0KKworCWlmICgheWFmZnNfQ2hl Y2twb2ludENsb3NlKGRldikpCisJCW9rID0gMDsKKworCWlmIChvaykKKwkJZGV2LT5pc0No ZWNrcG9pbnRlZCA9IDE7CisJZWxzZQorCQlkZXYtPmlzQ2hlY2twb2ludGVkID0gMDsKKwor CXJldHVybiBvayA/IDEgOiAwOworCit9CisKK3N0YXRpYyB2b2lkIHlhZmZzX0ludmFsaWRh dGVDaGVja3BvaW50KHlhZmZzX0RldmljZSAqZGV2KQoreworCWlmIChkZXYtPmlzQ2hlY2tw b2ludGVkIHx8CisJCQlkZXYtPmJsb2Nrc0luQ2hlY2twb2ludCA+IDApIHsKKwkJZGV2LT5p c0NoZWNrcG9pbnRlZCA9IDA7CisJCXlhZmZzX0NoZWNrcG9pbnRJbnZhbGlkYXRlU3RyZWFt KGRldik7CisJCWlmIChkZXYtPnN1cGVyQmxvY2sgJiYgZGV2LT5tYXJrU3VwZXJCbG9ja0Rp cnR5KQorCQkJZGV2LT5tYXJrU3VwZXJCbG9ja0RpcnR5KGRldi0+c3VwZXJCbG9jayk7CisJ fQorfQorCisKK2ludCB5YWZmc19DaGVja3BvaW50U2F2ZSh5YWZmc19EZXZpY2UgKmRldikK K3sKKworCVQoWUFGRlNfVFJBQ0VfQ0hFQ0tQT0lOVCwgKFRTVFIoInNhdmUgZW50cnk6IGlz Q2hlY2twb2ludGVkICVkIlRFTkRTVFIpLCBkZXYtPmlzQ2hlY2twb2ludGVkKSk7CisKKwl5 YWZmc19WZXJpZnlPYmplY3RzKGRldik7CisJeWFmZnNfVmVyaWZ5QmxvY2tzKGRldik7CisJ eWFmZnNfVmVyaWZ5RnJlZUNodW5rcyhkZXYpOworCisJaWYgKCFkZXYtPmlzQ2hlY2twb2lu dGVkKSB7CisJCXlhZmZzX0ludmFsaWRhdGVDaGVja3BvaW50KGRldik7CisJCXlhZmZzX1dy aXRlQ2hlY2twb2ludERhdGEoZGV2KTsKKwl9CisKKwlUKFlBRkZTX1RSQUNFX0NIRUNLUE9J TlQsIChUU1RSKCJzYXZlIGV4aXQ6IGlzQ2hlY2twb2ludGVkICVkIlRFTkRTVFIpLCBkZXYt PmlzQ2hlY2twb2ludGVkKSk7CisKKwlyZXR1cm4gZGV2LT5pc0NoZWNrcG9pbnRlZDsKK30K KworaW50IHlhZmZzX0NoZWNrcG9pbnRSZXN0b3JlKHlhZmZzX0RldmljZSAqZGV2KQorewor CWludCByZXR2YWw7CisJVChZQUZGU19UUkFDRV9DSEVDS1BPSU5ULCAoVFNUUigicmVzdG9y ZSBlbnRyeTogaXNDaGVja3BvaW50ZWQgJWQiVEVORFNUUiksIGRldi0+aXNDaGVja3BvaW50 ZWQpKTsKKworCXJldHZhbCA9IHlhZmZzX1JlYWRDaGVja3BvaW50RGF0YShkZXYpOworCisJ aWYgKGRldi0+aXNDaGVja3BvaW50ZWQpIHsKKwkJeWFmZnNfVmVyaWZ5T2JqZWN0cyhkZXYp OworCQl5YWZmc19WZXJpZnlCbG9ja3MoZGV2KTsKKwkJeWFmZnNfVmVyaWZ5RnJlZUNodW5r cyhkZXYpOworCX0KKworCVQoWUFGRlNfVFJBQ0VfQ0hFQ0tQT0lOVCwgKFRTVFIoInJlc3Rv cmUgZXhpdDogaXNDaGVja3BvaW50ZWQgJWQiVEVORFNUUiksIGRldi0+aXNDaGVja3BvaW50 ZWQpKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t IEZpbGUgcmVhZC93cml0ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFJlYWQgYW5k IHdyaXRlIGhhdmUgdmVyeSBzaW1pbGFyIHN0cnVjdHVyZXMuCisgKiBJbiBnZW5lcmFsIHRo ZSByZWFkL3dyaXRlIGhhcyB0aHJlZSBwYXJ0cyB0byBpdAorICogQW4gaW5jb21wbGV0ZSBj aHVuayB0byBzdGFydCB3aXRoIChpZiB0aGUgcmVhZC93cml0ZSBpcyBub3QgY2h1bmstYWxp Z25lZCkKKyAqIFNvbWUgY29tcGxldGUgY2h1bmtzCisgKiBBbiBpbmNvbXBsZXRlIGNodW5r IHRvIGVuZCBvZmYgd2l0aAorICoKKyAqIEN1cnZlLWJhbGxzOiB0aGUgZmlyc3QgY2h1bmsg bWlnaHQgYWxzbyBiZSB0aGUgbGFzdCBjaHVuay4KKyAqLworCitpbnQgeWFmZnNfUmVhZERh dGFGcm9tRmlsZSh5YWZmc19PYmplY3QgKmluLCBfX3U4ICpidWZmZXIsIGxvZmZfdCBvZmZz ZXQsCisJCQlpbnQgbkJ5dGVzKQoreworCisJaW50IGNodW5rOworCV9fdTMyIHN0YXJ0Owor CWludCBuVG9Db3B5OworCWludCBuID0gbkJ5dGVzOworCWludCBuRG9uZSA9IDA7CisJeWFm ZnNfQ2h1bmtDYWNoZSAqY2FjaGU7CisKKwl5YWZmc19EZXZpY2UgKmRldjsKKworCWRldiA9 IGluLT5teURldjsKKworCXdoaWxlIChuID4gMCkgeworCQkvKiBjaHVuayA9IG9mZnNldCAv IGRldi0+bkRhdGFCeXRlc1BlckNodW5rICsgMTsgKi8KKwkJLyogc3RhcnQgPSBvZmZzZXQg JSBkZXYtPm5EYXRhQnl0ZXNQZXJDaHVuazsgKi8KKwkJeWFmZnNfQWRkclRvQ2h1bmsoZGV2 LCBvZmZzZXQsICZjaHVuaywgJnN0YXJ0KTsKKwkJY2h1bmsrKzsKKworCQkvKiBPSyBub3cg Y2hlY2sgZm9yIHRoZSBjdXJ2ZWJhbGwgd2hlcmUgdGhlIHN0YXJ0IGFuZCBlbmQgYXJlIGlu CisJCSAqIHRoZSBzYW1lIGNodW5rLgorCQkgKi8KKwkJaWYgKChzdGFydCArIG4pIDwgZGV2 LT5uRGF0YUJ5dGVzUGVyQ2h1bmspCisJCQluVG9Db3B5ID0gbjsKKwkJZWxzZQorCQkJblRv Q29weSA9IGRldi0+bkRhdGFCeXRlc1BlckNodW5rIC0gc3RhcnQ7CisKKwkJY2FjaGUgPSB5 YWZmc19GaW5kQ2h1bmtDYWNoZShpbiwgY2h1bmspOworCisJCS8qIElmIHRoZSBjaHVuayBp cyBhbHJlYWR5IGluIHRoZSBjYWNoZSBvciBpdCBpcyBsZXNzIHRoYW4gYSB3aG9sZSBjaHVu aworCQkgKiBvciB3ZSdyZSB1c2luZyBpbmJhbmQgdGFncyB0aGVuIHVzZSB0aGUgY2FjaGUg KGlmIHRoZXJlIGlzIGNhY2hpbmcpCisJCSAqIGVsc2UgYnlwYXNzIHRoZSBjYWNoZS4KKwkJ ICovCisJCWlmIChjYWNoZSB8fCBuVG9Db3B5ICE9IGRldi0+bkRhdGFCeXRlc1BlckNodW5r IHx8IGRldi0+aW5iYW5kVGFncykgeworCQkJaWYgKGRldi0+blNob3J0T3BDYWNoZXMgPiAw KSB7CisKKwkJCQkvKiBJZiB3ZSBjYW4ndCBmaW5kIHRoZSBkYXRhIGluIHRoZSBjYWNoZSwg dGhlbiBsb2FkIGl0IHVwLiAqLworCisJCQkJaWYgKCFjYWNoZSkgeworCQkJCQljYWNoZSA9 IHlhZmZzX0dyYWJDaHVua0NhY2hlKGluLT5teURldik7CisJCQkJCWNhY2hlLT5vYmplY3Qg PSBpbjsKKwkJCQkJY2FjaGUtPmNodW5rSWQgPSBjaHVuazsKKwkJCQkJY2FjaGUtPmRpcnR5 ID0gMDsKKwkJCQkJY2FjaGUtPmxvY2tlZCA9IDA7CisJCQkJCXlhZmZzX1JlYWRDaHVua0Rh dGFGcm9tT2JqZWN0KGluLCBjaHVuaywKKwkJCQkJCQkJICAgICAgY2FjaGUtPgorCQkJCQkJ CQkgICAgICBkYXRhKTsKKwkJCQkJY2FjaGUtPm5CeXRlcyA9IDA7CisJCQkJfQorCisJCQkJ eWFmZnNfVXNlQ2h1bmtDYWNoZShkZXYsIGNhY2hlLCAwKTsKKworCQkJCWNhY2hlLT5sb2Nr ZWQgPSAxOworCisKKwkJCQltZW1jcHkoYnVmZmVyLCAmY2FjaGUtPmRhdGFbc3RhcnRdLCBu VG9Db3B5KTsKKworCQkJCWNhY2hlLT5sb2NrZWQgPSAwOworCQkJfSBlbHNlIHsKKwkJCQkv KiBSZWFkIGludG8gdGhlIGxvY2FsIGJ1ZmZlciB0aGVuIGNvcHkuLiovCisKKwkJCQlfX3U4 ICpsb2NhbEJ1ZmZlciA9CisJCQkJICAgIHlhZmZzX0dldFRlbXBCdWZmZXIoZGV2LCBfX0xJ TkVfXyk7CisJCQkJeWFmZnNfUmVhZENodW5rRGF0YUZyb21PYmplY3QoaW4sIGNodW5rLAor CQkJCQkJCSAgICAgIGxvY2FsQnVmZmVyKTsKKworCQkJCW1lbWNweShidWZmZXIsICZsb2Nh bEJ1ZmZlcltzdGFydF0sIG5Ub0NvcHkpOworCisKKwkJCQl5YWZmc19SZWxlYXNlVGVtcEJ1 ZmZlcihkZXYsIGxvY2FsQnVmZmVyLAorCQkJCQkJCV9fTElORV9fKTsKKwkJCX0KKworCQl9 IGVsc2UgeworCisJCQkvKiBBIGZ1bGwgY2h1bmsuIFJlYWQgZGlyZWN0bHkgaW50byB0aGUg c3VwcGxpZWQgYnVmZmVyLiAqLworCQkJeWFmZnNfUmVhZENodW5rRGF0YUZyb21PYmplY3Qo aW4sIGNodW5rLCBidWZmZXIpOworCisJCX0KKworCQluIC09IG5Ub0NvcHk7CisJCW9mZnNl dCArPSBuVG9Db3B5OworCQlidWZmZXIgKz0gblRvQ29weTsKKwkJbkRvbmUgKz0gblRvQ29w eTsKKworCX0KKworCXJldHVybiBuRG9uZTsKK30KKworaW50IHlhZmZzX1dyaXRlRGF0YVRv RmlsZSh5YWZmc19PYmplY3QgKmluLCBjb25zdCBfX3U4ICpidWZmZXIsIGxvZmZfdCBvZmZz ZXQsCisJCQlpbnQgbkJ5dGVzLCBpbnQgd3JpdGVUaHJvdWdoKQoreworCisJaW50IGNodW5r OworCV9fdTMyIHN0YXJ0OworCWludCBuVG9Db3B5OworCWludCBuID0gbkJ5dGVzOworCWlu dCBuRG9uZSA9IDA7CisJaW50IG5Ub1dyaXRlQmFjazsKKwlpbnQgc3RhcnRPZldyaXRlID0g b2Zmc2V0OworCWludCBjaHVua1dyaXR0ZW4gPSAwOworCV9fdTMyIG5CeXRlc1JlYWQ7CisJ X191MzIgY2h1bmtTdGFydDsKKworCXlhZmZzX0RldmljZSAqZGV2OworCisJZGV2ID0gaW4t Pm15RGV2OworCisJd2hpbGUgKG4gPiAwICYmIGNodW5rV3JpdHRlbiA+PSAwKSB7CisJCS8q IGNodW5rID0gb2Zmc2V0IC8gZGV2LT5uRGF0YUJ5dGVzUGVyQ2h1bmsgKyAxOyAqLworCQkv KiBzdGFydCA9IG9mZnNldCAlIGRldi0+bkRhdGFCeXRlc1BlckNodW5rOyAqLworCQl5YWZm c19BZGRyVG9DaHVuayhkZXYsIG9mZnNldCwgJmNodW5rLCAmc3RhcnQpOworCisJCWlmIChj aHVuayAqIGRldi0+bkRhdGFCeXRlc1BlckNodW5rICsgc3RhcnQgIT0gb2Zmc2V0IHx8CisJ CQkJc3RhcnQgPj0gZGV2LT5uRGF0YUJ5dGVzUGVyQ2h1bmspIHsKKwkJCVQoWUFGRlNfVFJB Q0VfRVJST1IsICgKKwkJCSAgIFRTVFIoIkFkZHJUb0NodW5rIG9mIG9mZnNldCAlZCBnaXZl cyBjaHVuayAlZCBzdGFydCAlZCIKKwkJCSAgIFRFTkRTVFIpLAorCQkJICAgKGludClvZmZz ZXQsIGNodW5rLCBzdGFydCkpOworCQl9CisJCWNodW5rKys7CisKKwkJLyogT0sgbm93IGNo ZWNrIGZvciB0aGUgY3VydmViYWxsIHdoZXJlIHRoZSBzdGFydCBhbmQgZW5kIGFyZSBpbgor CQkgKiB0aGUgc2FtZSBjaHVuay4KKwkJICovCisKKwkJaWYgKChzdGFydCArIG4pIDwgZGV2 LT5uRGF0YUJ5dGVzUGVyQ2h1bmspIHsKKwkJCW5Ub0NvcHkgPSBuOworCisJCQkvKiBOb3cg Zm9sa3MsIHRvIGNhbGN1bGF0ZSBob3cgbWFueSBieXRlcyB0byB3cml0ZSBiYWNrLi4uLgor CQkJICogSWYgd2UncmUgb3ZlcndyaXRpbmcgYW5kIG5vdCB3cml0aW5nIHRvIHRoZW4gZW5k IG9mIGZpbGUgdGhlbgorCQkJICogd2UgbmVlZCB0byB3cml0ZSBiYWNrIGFzIG11Y2ggYXMg d2FzIHRoZXJlIGJlZm9yZS4KKwkJCSAqLworCisJCQljaHVua1N0YXJ0ID0gKChjaHVuayAt IDEpICogZGV2LT5uRGF0YUJ5dGVzUGVyQ2h1bmspOworCisJCQlpZiAoY2h1bmtTdGFydCA+ IGluLT52YXJpYW50LmZpbGVWYXJpYW50LmZpbGVTaXplKQorCQkJCW5CeXRlc1JlYWQgPSAw OyAvKiBQYXN0IGVuZCBvZiBmaWxlICovCisJCQllbHNlCisJCQkJbkJ5dGVzUmVhZCA9IGlu LT52YXJpYW50LmZpbGVWYXJpYW50LmZpbGVTaXplIC0gY2h1bmtTdGFydDsKKworCQkJaWYg KG5CeXRlc1JlYWQgPiBkZXYtPm5EYXRhQnl0ZXNQZXJDaHVuaykKKwkJCQluQnl0ZXNSZWFk ID0gZGV2LT5uRGF0YUJ5dGVzUGVyQ2h1bms7CisKKwkJCW5Ub1dyaXRlQmFjayA9CisJCQkg ICAgKG5CeXRlc1JlYWQgPgorCQkJICAgICAoc3RhcnQgKyBuKSkgPyBuQnl0ZXNSZWFkIDog KHN0YXJ0ICsgbik7CisKKwkJCWlmIChuVG9Xcml0ZUJhY2sgPCAwIHx8IG5Ub1dyaXRlQmFj ayA+IGRldi0+bkRhdGFCeXRlc1BlckNodW5rKQorCQkJCVlCVUcoKTsKKworCQl9IGVsc2Ug eworCQkJblRvQ29weSA9IGRldi0+bkRhdGFCeXRlc1BlckNodW5rIC0gc3RhcnQ7CisJCQlu VG9Xcml0ZUJhY2sgPSBkZXYtPm5EYXRhQnl0ZXNQZXJDaHVuazsKKwkJfQorCisJCWlmIChu VG9Db3B5ICE9IGRldi0+bkRhdGFCeXRlc1BlckNodW5rIHx8IGRldi0+aW5iYW5kVGFncykg eworCQkJLyogQW4gaW5jb21wbGV0ZSBzdGFydCBvciBlbmQgY2h1bmsgKG9yIG1heWJlIGJv dGggc3RhcnQgYW5kIGVuZCBjaHVuayksCisJCQkgKiBvciB3ZSdyZSB1c2luZyBpbmJhbmQg dGFncywgc28gd2Ugd2FudCB0byB1c2UgdGhlIGNhY2hlIGJ1ZmZlcnMuCisJCQkgKi8KKwkJ CWlmIChkZXYtPm5TaG9ydE9wQ2FjaGVzID4gMCkgeworCQkJCXlhZmZzX0NodW5rQ2FjaGUg KmNhY2hlOworCQkJCS8qIElmIHdlIGNhbid0IGZpbmQgdGhlIGRhdGEgaW4gdGhlIGNhY2hl LCB0aGVuIGxvYWQgdGhlIGNhY2hlICovCisJCQkJY2FjaGUgPSB5YWZmc19GaW5kQ2h1bmtD YWNoZShpbiwgY2h1bmspOworCisJCQkJaWYgKCFjYWNoZQorCQkJCSAgICAmJiB5YWZmc19D aGVja1NwYWNlRm9yQWxsb2NhdGlvbihpbi0+CisJCQkJCQkJCSAgICAgbXlEZXYpKSB7CisJ CQkJCWNhY2hlID0geWFmZnNfR3JhYkNodW5rQ2FjaGUoaW4tPm15RGV2KTsKKwkJCQkJY2Fj aGUtPm9iamVjdCA9IGluOworCQkJCQljYWNoZS0+Y2h1bmtJZCA9IGNodW5rOworCQkJCQlj YWNoZS0+ZGlydHkgPSAwOworCQkJCQljYWNoZS0+bG9ja2VkID0gMDsKKwkJCQkJeWFmZnNf UmVhZENodW5rRGF0YUZyb21PYmplY3QoaW4sIGNodW5rLAorCQkJCQkJCQkgICAgICBjYWNo ZS0+CisJCQkJCQkJCSAgICAgIGRhdGEpOworCQkJCX0gZWxzZSBpZiAoY2FjaGUgJiYKKwkJ CQkJIWNhY2hlLT5kaXJ0eSAmJgorCQkJCQkheWFmZnNfQ2hlY2tTcGFjZUZvckFsbG9jYXRp b24oaW4tPm15RGV2KSkgeworCQkJCQkvKiBEcm9wIHRoZSBjYWNoZSBpZiBpdCB3YXMgYSBy ZWFkIGNhY2hlIGl0ZW0gYW5kCisJCQkJCSAqIG5vIHNwYWNlIGNoZWNrIGhhcyBiZWVuIG1h ZGUgZm9yIGl0LgorCQkJCQkgKi8KKwkJCQkJIGNhY2hlID0gTlVMTDsKKwkJCQl9CisKKwkJ CQlpZiAoY2FjaGUpIHsKKwkJCQkJeWFmZnNfVXNlQ2h1bmtDYWNoZShkZXYsIGNhY2hlLCAx KTsKKwkJCQkJY2FjaGUtPmxvY2tlZCA9IDE7CisKKworCQkJCQltZW1jcHkoJmNhY2hlLT5k YXRhW3N0YXJ0XSwgYnVmZmVyLAorCQkJCQkgICAgICAgblRvQ29weSk7CisKKworCQkJCQlj YWNoZS0+bG9ja2VkID0gMDsKKwkJCQkJY2FjaGUtPm5CeXRlcyA9IG5Ub1dyaXRlQmFjazsK KworCQkJCQlpZiAod3JpdGVUaHJvdWdoKSB7CisJCQkJCQljaHVua1dyaXR0ZW4gPQorCQkJ CQkJICAgIHlhZmZzX1dyaXRlQ2h1bmtEYXRhVG9PYmplY3QKKwkJCQkJCSAgICAoY2FjaGUt Pm9iamVjdCwKKwkJCQkJCSAgICAgY2FjaGUtPmNodW5rSWQsCisJCQkJCQkgICAgIGNhY2hl LT5kYXRhLCBjYWNoZS0+bkJ5dGVzLAorCQkJCQkJICAgICAxKTsKKwkJCQkJCWNhY2hlLT5k aXJ0eSA9IDA7CisJCQkJCX0KKworCQkJCX0gZWxzZSB7CisJCQkJCWNodW5rV3JpdHRlbiA9 IC0xOwkvKiBmYWlsIHRoZSB3cml0ZSAqLworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJLyog QW4gaW5jb21wbGV0ZSBzdGFydCBvciBlbmQgY2h1bmsgKG9yIG1heWJlIGJvdGggc3RhcnQg YW5kIGVuZCBjaHVuaykKKwkJCQkgKiBSZWFkIGludG8gdGhlIGxvY2FsIGJ1ZmZlciB0aGVu IGNvcHksIHRoZW4gY29weSBvdmVyIGFuZCB3cml0ZSBiYWNrLgorCQkJCSAqLworCisJCQkJ X191OCAqbG9jYWxCdWZmZXIgPQorCQkJCSAgICB5YWZmc19HZXRUZW1wQnVmZmVyKGRldiwg X19MSU5FX18pOworCisJCQkJeWFmZnNfUmVhZENodW5rRGF0YUZyb21PYmplY3QoaW4sIGNo dW5rLAorCQkJCQkJCSAgICAgIGxvY2FsQnVmZmVyKTsKKworCisKKwkJCQltZW1jcHkoJmxv Y2FsQnVmZmVyW3N0YXJ0XSwgYnVmZmVyLCBuVG9Db3B5KTsKKworCQkJCWNodW5rV3JpdHRl biA9CisJCQkJICAgIHlhZmZzX1dyaXRlQ2h1bmtEYXRhVG9PYmplY3QoaW4sIGNodW5rLAor CQkJCQkJCQkgbG9jYWxCdWZmZXIsCisJCQkJCQkJCSBuVG9Xcml0ZUJhY2ssCisJCQkJCQkJ CSAwKTsKKworCQkJCXlhZmZzX1JlbGVhc2VUZW1wQnVmZmVyKGRldiwgbG9jYWxCdWZmZXIs CisJCQkJCQkJX19MSU5FX18pOworCisJCQl9CisKKwkJfSBlbHNlIHsKKwkJCS8qIEEgZnVs bCBjaHVuay4gV3JpdGUgZGlyZWN0bHkgZnJvbSB0aGUgc3VwcGxpZWQgYnVmZmVyLiAqLwor CisKKworCQkJY2h1bmtXcml0dGVuID0KKwkJCSAgICB5YWZmc19Xcml0ZUNodW5rRGF0YVRv T2JqZWN0KGluLCBjaHVuaywgYnVmZmVyLAorCQkJCQkJCSBkZXYtPm5EYXRhQnl0ZXNQZXJD aHVuaywKKwkJCQkJCQkgMCk7CisKKwkJCS8qIFNpbmNlIHdlJ3ZlIG92ZXJ3cml0dGVuIHRo ZSBjYWNoZWQgZGF0YSwgd2UgYmV0dGVyIGludmFsaWRhdGUgaXQuICovCisJCQl5YWZmc19J bnZhbGlkYXRlQ2h1bmtDYWNoZShpbiwgY2h1bmspOworCQl9CisKKwkJaWYgKGNodW5rV3Jp dHRlbiA+PSAwKSB7CisJCQluIC09IG5Ub0NvcHk7CisJCQlvZmZzZXQgKz0gblRvQ29weTsK KwkJCWJ1ZmZlciArPSBuVG9Db3B5OworCQkJbkRvbmUgKz0gblRvQ29weTsKKwkJfQorCisJ fQorCisJLyogVXBkYXRlIGZpbGUgb2JqZWN0ICovCisKKwlpZiAoKHN0YXJ0T2ZXcml0ZSAr IG5Eb25lKSA+IGluLT52YXJpYW50LmZpbGVWYXJpYW50LmZpbGVTaXplKQorCQlpbi0+dmFy aWFudC5maWxlVmFyaWFudC5maWxlU2l6ZSA9IChzdGFydE9mV3JpdGUgKyBuRG9uZSk7CisK Kwlpbi0+ZGlydHkgPSAxOworCisJcmV0dXJuIG5Eb25lOworfQorCisKKy8qIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0gRmlsZSByZXNpemluZyBzdHVmZiAtLS0tLS0tLS0tLS0tLS0tLS0g Ki8KKworc3RhdGljIHZvaWQgeWFmZnNfUHJ1bmVSZXNpemVkQ2h1bmtzKHlhZmZzX09iamVj dCAqaW4sIGludCBuZXdTaXplKQoreworCisJeWFmZnNfRGV2aWNlICpkZXYgPSBpbi0+bXlE ZXY7CisJaW50IG9sZEZpbGVTaXplID0gaW4tPnZhcmlhbnQuZmlsZVZhcmlhbnQuZmlsZVNp emU7CisKKwlpbnQgbGFzdERlbCA9IDEgKyAob2xkRmlsZVNpemUgLSAxKSAvIGRldi0+bkRh dGFCeXRlc1BlckNodW5rOworCisJaW50IHN0YXJ0RGVsID0gMSArIChuZXdTaXplICsgZGV2 LT5uRGF0YUJ5dGVzUGVyQ2h1bmsgLSAxKSAvCisJICAgIGRldi0+bkRhdGFCeXRlc1BlckNo dW5rOworCWludCBpOworCWludCBjaHVua0lkOworCisJLyogRGVsZXRlIGJhY2t3YXJkcyBz byB0aGF0IHdlIGRvbid0IGVuZCB1cCB3aXRoIGhvbGVzIGlmCisJICogcG93ZXIgaXMgbG9z dCBwYXJ0LXdheSB0aHJvdWdoIHRoZSBvcGVyYXRpb24uCisJICovCisJZm9yIChpID0gbGFz dERlbDsgaSA+PSBzdGFydERlbDsgaS0tKSB7CisJCS8qIE5CIHRoaXMgY291bGQgYmUgb3B0 aW1pc2VkIHNvbWV3aGF0LAorCQkgKiBlZy4gY291bGQgcmV0cmlldmUgdGhlIHRhZ3MgYW5k IHdyaXRlIHRoZW0gd2l0aG91dAorCQkgKiB1c2luZyB5YWZmc19EZWxldGVDaHVuaworCQkg Ki8KKworCQljaHVua0lkID0geWFmZnNfRmluZEFuZERlbGV0ZUNodW5rSW5GaWxlKGluLCBp LCBOVUxMKTsKKwkJaWYgKGNodW5rSWQgPiAwKSB7CisJCQlpZiAoY2h1bmtJZCA8CisJCQkg ICAgKGRldi0+aW50ZXJuYWxTdGFydEJsb2NrICogZGV2LT5uQ2h1bmtzUGVyQmxvY2spCisJ CQkgICAgfHwgY2h1bmtJZCA+PQorCQkJICAgICgoZGV2LT5pbnRlcm5hbEVuZEJsb2NrICsK KwkJCSAgICAgIDEpICogZGV2LT5uQ2h1bmtzUGVyQmxvY2spKSB7CisJCQkJVChZQUZGU19U UkFDRV9BTFdBWVMsCisJCQkJICAoVFNUUigiRm91bmQgZGFmdCBjaHVua0lkICVkIGZvciAl ZCIgVEVORFNUUiksCisJCQkJICAgY2h1bmtJZCwgaSkpOworCQkJfSBlbHNlIHsKKwkJCQlp bi0+bkRhdGFDaHVua3MtLTsKKwkJCQl5YWZmc19EZWxldGVDaHVuayhkZXYsIGNodW5rSWQs IDEsIF9fTElORV9fKTsKKwkJCX0KKwkJfQorCX0KKworfQorCitpbnQgeWFmZnNfUmVzaXpl RmlsZSh5YWZmc19PYmplY3QgKmluLCBsb2ZmX3QgbmV3U2l6ZSkKK3sKKworCWludCBvbGRG aWxlU2l6ZSA9IGluLT52YXJpYW50LmZpbGVWYXJpYW50LmZpbGVTaXplOworCV9fdTMyIG5l d1NpemVPZlBhcnRpYWxDaHVuazsKKwlpbnQgbmV3RnVsbENodW5rczsKKworCXlhZmZzX0Rl dmljZSAqZGV2ID0gaW4tPm15RGV2OworCisJeWFmZnNfQWRkclRvQ2h1bmsoZGV2LCBuZXdT aXplLCAmbmV3RnVsbENodW5rcywgJm5ld1NpemVPZlBhcnRpYWxDaHVuayk7CisKKwl5YWZm c19GbHVzaEZpbGVzQ2h1bmtDYWNoZShpbik7CisJeWFmZnNfSW52YWxpZGF0ZVdob2xlQ2h1 bmtDYWNoZShpbik7CisKKwl5YWZmc19DaGVja0dhcmJhZ2VDb2xsZWN0aW9uKGRldik7CisK KwlpZiAoaW4tPnZhcmlhbnRUeXBlICE9IFlBRkZTX09CSkVDVF9UWVBFX0ZJTEUpCisJCXJl dHVybiBZQUZGU19GQUlMOworCisJaWYgKG5ld1NpemUgPT0gb2xkRmlsZVNpemUpCisJCXJl dHVybiBZQUZGU19PSzsKKworCWlmIChuZXdTaXplIDwgb2xkRmlsZVNpemUpIHsKKworCQl5 YWZmc19QcnVuZVJlc2l6ZWRDaHVua3MoaW4sIG5ld1NpemUpOworCisJCWlmIChuZXdTaXpl T2ZQYXJ0aWFsQ2h1bmsgIT0gMCkgeworCQkJaW50IGxhc3RDaHVuayA9IDEgKyBuZXdGdWxs Q2h1bmtzOworCisJCQlfX3U4ICpsb2NhbEJ1ZmZlciA9IHlhZmZzX0dldFRlbXBCdWZmZXIo ZGV2LCBfX0xJTkVfXyk7CisKKwkJCS8qIEdvdCB0byByZWFkIGFuZCByZXdyaXRlIHRoZSBs YXN0IGNodW5rIHdpdGggaXRzIG5ldyBzaXplIGFuZCB6ZXJvIHBhZCAqLworCQkJeWFmZnNf UmVhZENodW5rRGF0YUZyb21PYmplY3QoaW4sIGxhc3RDaHVuaywKKwkJCQkJCSAgICAgIGxv Y2FsQnVmZmVyKTsKKworCQkJbWVtc2V0KGxvY2FsQnVmZmVyICsgbmV3U2l6ZU9mUGFydGlh bENodW5rLCAwLAorCQkJICAgICAgIGRldi0+bkRhdGFCeXRlc1BlckNodW5rIC0gbmV3U2l6 ZU9mUGFydGlhbENodW5rKTsKKworCQkJeWFmZnNfV3JpdGVDaHVua0RhdGFUb09iamVjdChp biwgbGFzdENodW5rLCBsb2NhbEJ1ZmZlciwKKwkJCQkJCSAgICAgbmV3U2l6ZU9mUGFydGlh bENodW5rLCAxKTsKKworCQkJeWFmZnNfUmVsZWFzZVRlbXBCdWZmZXIoZGV2LCBsb2NhbEJ1 ZmZlciwgX19MSU5FX18pOworCQl9CisKKwkJaW4tPnZhcmlhbnQuZmlsZVZhcmlhbnQuZmls ZVNpemUgPSBuZXdTaXplOworCisJCXlhZmZzX1BydW5lRmlsZVN0cnVjdHVyZShkZXYsICZp bi0+dmFyaWFudC5maWxlVmFyaWFudCk7CisJfSBlbHNlIHsKKwkJLyogbmV3c1NpemUgPiBv bGRGaWxlU2l6ZSAqLworCQlpbi0+dmFyaWFudC5maWxlVmFyaWFudC5maWxlU2l6ZSA9IG5l d1NpemU7CisJfQorCisKKwkvKiBXcml0ZSBhIG5ldyBvYmplY3QgaGVhZGVyLgorCSAqIHNo b3cgd2UndmUgc2hydW5rIHRoZSBmaWxlLCBpZiBuZWVkIGJlCisJICogRG8gdGhpcyBvbmx5 IGlmIHRoZSBmaWxlIGlzIG5vdCBpbiB0aGUgZGVsZXRlZCBkaXJlY3Rvcmllcy4KKwkgKi8K KwlpZiAoaW4tPnBhcmVudCAmJgorCSAgICBpbi0+cGFyZW50LT5vYmplY3RJZCAhPSBZQUZG U19PQkpFQ1RJRF9VTkxJTktFRCAmJgorCSAgICBpbi0+cGFyZW50LT5vYmplY3RJZCAhPSBZ QUZGU19PQkpFQ1RJRF9ERUxFVEVEKQorCQl5YWZmc19VcGRhdGVPYmplY3RIZWFkZXIoaW4s IE5VTEwsIDAsCisJCQkJCSAobmV3U2l6ZSA8IG9sZEZpbGVTaXplKSA/IDEgOiAwLCAwKTsK KworCXJldHVybiBZQUZGU19PSzsKK30KKworbG9mZl90IHlhZmZzX0dldEZpbGVTaXplKHlh ZmZzX09iamVjdCAqb2JqKQoreworCW9iaiA9IHlhZmZzX0dldEVxdWl2YWxlbnRPYmplY3Qo b2JqKTsKKworCXN3aXRjaCAob2JqLT52YXJpYW50VHlwZSkgeworCWNhc2UgWUFGRlNfT0JK RUNUX1RZUEVfRklMRToKKwkJcmV0dXJuIG9iai0+dmFyaWFudC5maWxlVmFyaWFudC5maWxl U2l6ZTsKKwljYXNlIFlBRkZTX09CSkVDVF9UWVBFX1NZTUxJTks6CisJCXJldHVybiB5YWZm c19zdHJsZW4ob2JqLT52YXJpYW50LnN5bUxpbmtWYXJpYW50LmFsaWFzKTsKKwlkZWZhdWx0 OgorCQlyZXR1cm4gMDsKKwl9Cit9CisKKworCitpbnQgeWFmZnNfRmx1c2hGaWxlKHlhZmZz X09iamVjdCAqaW4sIGludCB1cGRhdGVUaW1lKQoreworCWludCByZXRWYWw7CisJaWYgKGlu LT5kaXJ0eSkgeworCQl5YWZmc19GbHVzaEZpbGVzQ2h1bmtDYWNoZShpbik7CisJCWlmICh1 cGRhdGVUaW1lKSB7CisjaWZkZWYgQ09ORklHX1lBRkZTX1dJTkNFCisJCQl5ZnNkX1dpbkZp bGVUaW1lTm93KGluLT53aW5fbXRpbWUpOworI2Vsc2UKKworCQkJaW4tPnlzdF9tdGltZSA9 IFlfQ1VSUkVOVF9USU1FOworCisjZW5kaWYKKwkJfQorCisJCXJldFZhbCA9ICh5YWZmc19V cGRhdGVPYmplY3RIZWFkZXIoaW4sIE5VTEwsIDAsIDAsIDApID49CisJCQkwKSA/IFlBRkZT X09LIDogWUFGRlNfRkFJTDsKKwl9IGVsc2UgeworCQlyZXRWYWwgPSBZQUZGU19PSzsKKwl9 CisKKwlyZXR1cm4gcmV0VmFsOworCit9CisKK3N0YXRpYyBpbnQgeWFmZnNfRG9HZW5lcmlj T2JqZWN0RGVsZXRpb24oeWFmZnNfT2JqZWN0ICppbikKK3sKKworCS8qIEZpcnN0IG9mZiwg aW52YWxpZGF0ZSB0aGUgZmlsZSdzIGRhdGEgaW4gdGhlIGNhY2hlLCB3aXRob3V0IGZsdXNo aW5nLiAqLworCXlhZmZzX0ludmFsaWRhdGVXaG9sZUNodW5rQ2FjaGUoaW4pOworCisJaWYg KGluLT5teURldi0+aXNZYWZmczIgJiYgKGluLT5wYXJlbnQgIT0gaW4tPm15RGV2LT5kZWxl dGVkRGlyKSkgeworCQkvKiBNb3ZlIHRvIHRoZSB1bmxpbmtlZCBkaXJlY3Rvcnkgc28gd2Ug aGF2ZSBhIHJlY29yZCB0aGF0IGl0IHdhcyBkZWxldGVkLiAqLworCQl5YWZmc19DaGFuZ2VP YmplY3ROYW1lKGluLCBpbi0+bXlEZXYtPmRlbGV0ZWREaXIsIF9ZKCJkZWxldGVkIiksIDAs IDApOworCisJfQorCisJeWFmZnNfUmVtb3ZlT2JqZWN0RnJvbURpcmVjdG9yeShpbik7CisJ eWFmZnNfRGVsZXRlQ2h1bmsoaW4tPm15RGV2LCBpbi0+aGRyQ2h1bmssIDEsIF9fTElORV9f KTsKKwlpbi0+aGRyQ2h1bmsgPSAwOworCisJeWFmZnNfRnJlZU9iamVjdChpbik7CisJcmV0 dXJuIFlBRkZTX09LOworCit9CisKKy8qIHlhZmZzX0RlbGV0ZUZpbGUgZGVsZXRlcyB0aGUg d2hvbGUgZmlsZSBkYXRhCisgKiBhbmQgdGhlIGlub2RlIGFzc29jaWF0ZWQgd2l0aCB0aGUg ZmlsZS4KKyAqIEl0IGRvZXMgbm90IGRlbGV0ZSB0aGUgbGlua3MgYXNzb2NpYXRlZCB3aXRo IHRoZSBmaWxlLgorICovCitzdGF0aWMgaW50IHlhZmZzX1VubGlua0ZpbGVJZk5lZWRlZCh5 YWZmc19PYmplY3QgKmluKQoreworCisJaW50IHJldFZhbDsKKwlpbnQgaW1tZWRpYXRlRGVs ZXRpb24gPSAwOworCisjaWZkZWYgX19LRVJORUxfXworCWlmICghaW4tPm15SW5vZGUpCisJ CWltbWVkaWF0ZURlbGV0aW9uID0gMTsKKyNlbHNlCisJaWYgKGluLT5pblVzZSA8PSAwKQor CQlpbW1lZGlhdGVEZWxldGlvbiA9IDE7CisjZW5kaWYKKworCWlmIChpbW1lZGlhdGVEZWxl dGlvbikgeworCQlyZXRWYWwgPQorCQkgICAgeWFmZnNfQ2hhbmdlT2JqZWN0TmFtZShpbiwg aW4tPm15RGV2LT5kZWxldGVkRGlyLAorCQkJCQkgICBfWSgiZGVsZXRlZCIpLCAwLCAwKTsK KwkJVChZQUZGU19UUkFDRV9UUkFDSU5HLAorCQkgIChUU1RSKCJ5YWZmczogaW1tZWRpYXRl IGRlbGV0aW9uIG9mIGZpbGUgJWQiIFRFTkRTVFIpLAorCQkgICBpbi0+b2JqZWN0SWQpKTsK KwkJaW4tPmRlbGV0ZWQgPSAxOworCQlpbi0+bXlEZXYtPm5EZWxldGVkRmlsZXMrKzsKKwkJ aWYgKDEgfHwgaW4tPm15RGV2LT5pc1lhZmZzMikKKwkJCXlhZmZzX1Jlc2l6ZUZpbGUoaW4s IDApOworCQl5YWZmc19Tb2Z0RGVsZXRlRmlsZShpbik7CisJfSBlbHNlIHsKKwkJcmV0VmFs ID0KKwkJICAgIHlhZmZzX0NoYW5nZU9iamVjdE5hbWUoaW4sIGluLT5teURldi0+dW5saW5r ZWREaXIsCisJCQkJCSAgIF9ZKCJ1bmxpbmtlZCIpLCAwLCAwKTsKKwl9CisKKworCXJldHVy biByZXRWYWw7Cit9CisKK2ludCB5YWZmc19EZWxldGVGaWxlKHlhZmZzX09iamVjdCAqaW4p Cit7CisJaW50IHJldFZhbCA9IFlBRkZTX09LOworCWludCBkZWxldGVkID0gaW4tPmRlbGV0 ZWQ7CisKKwl5YWZmc19SZXNpemVGaWxlKGluLCAwKTsKKworCWlmIChpbi0+bkRhdGFDaHVu a3MgPiAwKSB7CisJCS8qIFVzZSBzb2Z0IGRlbGV0aW9uIGlmIHRoZXJlIGlzIGRhdGEgaW4g dGhlIGZpbGUuCisJCSAqIFRoYXQgd29uJ3QgYmUgdGhlIGNhc2UgaWYgaXQgaGFzIGJlZW4g cmVzaXplZCB0byB6ZXJvLgorCQkgKi8KKwkJaWYgKCFpbi0+dW5saW5rZWQpCisJCQlyZXRW YWwgPSB5YWZmc19VbmxpbmtGaWxlSWZOZWVkZWQoaW4pOworCisJCWlmIChyZXRWYWwgPT0g WUFGRlNfT0sgJiYgaW4tPnVubGlua2VkICYmICFpbi0+ZGVsZXRlZCkgeworCQkJaW4tPmRl bGV0ZWQgPSAxOworCQkJZGVsZXRlZCA9IDE7CisJCQlpbi0+bXlEZXYtPm5EZWxldGVkRmls ZXMrKzsKKwkJCXlhZmZzX1NvZnREZWxldGVGaWxlKGluKTsKKwkJfQorCQlyZXR1cm4gZGVs ZXRlZCA/IFlBRkZTX09LIDogWUFGRlNfRkFJTDsKKwl9IGVsc2UgeworCQkvKiBUaGUgZmls ZSBoYXMgbm8gZGF0YSBjaHVua3Mgc28gd2UgdG9zcyBpdCBpbW1lZGlhdGVseSAqLworCQl5 YWZmc19GcmVlVG5vZGUoaW4tPm15RGV2LCBpbi0+dmFyaWFudC5maWxlVmFyaWFudC50b3Ap OworCQlpbi0+dmFyaWFudC5maWxlVmFyaWFudC50b3AgPSBOVUxMOworCQl5YWZmc19Eb0dl bmVyaWNPYmplY3REZWxldGlvbihpbik7CisKKwkJcmV0dXJuIFlBRkZTX09LOworCX0KK30K Kworc3RhdGljIGludCB5YWZmc19EZWxldGVEaXJlY3RvcnkoeWFmZnNfT2JqZWN0ICppbikK K3sKKwkvKiBGaXJzdCBjaGVjayB0aGF0IHRoZSBkaXJlY3RvcnkgaXMgZW1wdHkuICovCisJ aWYgKHlsaXN0X2VtcHR5KCZpbi0+dmFyaWFudC5kaXJlY3RvcnlWYXJpYW50LmNoaWxkcmVu KSkKKwkJcmV0dXJuIHlhZmZzX0RvR2VuZXJpY09iamVjdERlbGV0aW9uKGluKTsKKworCXJl dHVybiBZQUZGU19GQUlMOworCit9CisKK3N0YXRpYyBpbnQgeWFmZnNfRGVsZXRlU3ltTGlu ayh5YWZmc19PYmplY3QgKmluKQoreworCVlGUkVFKGluLT52YXJpYW50LnN5bUxpbmtWYXJp YW50LmFsaWFzKTsKKworCXJldHVybiB5YWZmc19Eb0dlbmVyaWNPYmplY3REZWxldGlvbihp bik7Cit9CisKK3N0YXRpYyBpbnQgeWFmZnNfRGVsZXRlSGFyZExpbmsoeWFmZnNfT2JqZWN0 ICppbikKK3sKKwkvKiByZW1vdmUgdGhpcyBoYXJkbGluayBmcm9tIHRoZSBsaXN0IGFzc29j YWl0ZWQgd2l0aCB0aGUgZXF1aXZhbGVudAorCSAqIG9iamVjdAorCSAqLworCXlsaXN0X2Rl bF9pbml0KCZpbi0+aGFyZExpbmtzKTsKKwlyZXR1cm4geWFmZnNfRG9HZW5lcmljT2JqZWN0 RGVsZXRpb24oaW4pOworfQorCitpbnQgeWFmZnNfRGVsZXRlT2JqZWN0KHlhZmZzX09iamVj dCAqb2JqKQoreworaW50IHJldFZhbCA9IC0xOworCXN3aXRjaCAob2JqLT52YXJpYW50VHlw ZSkgeworCWNhc2UgWUFGRlNfT0JKRUNUX1RZUEVfRklMRToKKwkJcmV0VmFsID0geWFmZnNf RGVsZXRlRmlsZShvYmopOworCQlicmVhazsKKwljYXNlIFlBRkZTX09CSkVDVF9UWVBFX0RJ UkVDVE9SWToKKwkJcmV0dXJuIHlhZmZzX0RlbGV0ZURpcmVjdG9yeShvYmopOworCQlicmVh azsKKwljYXNlIFlBRkZTX09CSkVDVF9UWVBFX1NZTUxJTks6CisJCXJldFZhbCA9IHlhZmZz X0RlbGV0ZVN5bUxpbmsob2JqKTsKKwkJYnJlYWs7CisJY2FzZSBZQUZGU19PQkpFQ1RfVFlQ RV9IQVJETElOSzoKKwkJcmV0VmFsID0geWFmZnNfRGVsZXRlSGFyZExpbmsob2JqKTsKKwkJ YnJlYWs7CisJY2FzZSBZQUZGU19PQkpFQ1RfVFlQRV9TUEVDSUFMOgorCQlyZXRWYWwgPSB5 YWZmc19Eb0dlbmVyaWNPYmplY3REZWxldGlvbihvYmopOworCQlicmVhazsKKwljYXNlIFlB RkZTX09CSkVDVF9UWVBFX1VOS05PV046CisJCXJldFZhbCA9IDA7CisJCWJyZWFrOwkJLyog c2hvdWxkIG5vdCBoYXBwZW4uICovCisJfQorCisJcmV0dXJuIHJldFZhbDsKK30KKworc3Rh dGljIGludCB5YWZmc19VbmxpbmtXb3JrZXIoeWFmZnNfT2JqZWN0ICpvYmopCit7CisKKwlp bnQgaW1tZWRpYXRlRGVsZXRpb24gPSAwOworCisjaWZkZWYgX19LRVJORUxfXworCWlmICgh b2JqLT5teUlub2RlKQorCQlpbW1lZGlhdGVEZWxldGlvbiA9IDE7CisjZWxzZQorCWlmIChv YmotPmluVXNlIDw9IDApCisJCWltbWVkaWF0ZURlbGV0aW9uID0gMTsKKyNlbmRpZgorCisJ aWYob2JqKQorCQl5YWZmc19VcGRhdGVQYXJlbnQob2JqLT5wYXJlbnQpOworCisJaWYgKG9i ai0+dmFyaWFudFR5cGUgPT0gWUFGRlNfT0JKRUNUX1RZUEVfSEFSRExJTkspIHsKKwkJcmV0 dXJuIHlhZmZzX0RlbGV0ZUhhcmRMaW5rKG9iaik7CisJfSBlbHNlIGlmICgheWxpc3RfZW1w dHkoJm9iai0+aGFyZExpbmtzKSkgeworCQkvKiBDdXJ2ZSBiYWxsOiBXZSdyZSB1bmxpbmtp bmcgYW4gb2JqZWN0IHRoYXQgaGFzIGEgaGFyZGxpbmsuCisJCSAqCisJCSAqIFRoaXMgcHJv YmxlbSBhcmlzZXMgYmVjYXVzZSB3ZSBhcmUgbm90IHN0cmljdGx5IGZvbGxvd2luZworCQkg KiBUaGUgTGludXggbGluay9pbm9kZSBtb2RlbC4KKwkJICoKKwkJICogV2UgY2FuJ3QgcmVh bGx5IGRlbGV0ZSB0aGUgb2JqZWN0LgorCQkgKiBJbnN0ZWFkLCB3ZSBkbyB0aGUgZm9sbG93 aW5nOgorCQkgKiAtIFNlbGVjdCBhIGhhcmRsaW5rLgorCQkgKiAtIFVuaG9vayBpdCBmcm9t IHRoZSBoYXJkIGxpbmtzCisJCSAqIC0gVW5ob29rIGl0IGZyb20gaXRzIHBhcmVudCBkaXJl Y3RvcnkgKHNvIHRoYXQgdGhlIHJlbmFtZSBjYW4gd29yaykKKwkJICogLSBSZW5hbWUgdGhl IG9iamVjdCB0byB0aGUgaGFyZGxpbmsncyBuYW1lLgorCQkgKiAtIERlbGV0ZSB0aGUgaGFy ZGxpbmsKKwkJICovCisKKwkJeWFmZnNfT2JqZWN0ICpobDsKKwkJaW50IHJldFZhbDsKKwkJ WUNIQVIgbmFtZVtZQUZGU19NQVhfTkFNRV9MRU5HVEggKyAxXTsKKworCQlobCA9IHlsaXN0 X2VudHJ5KG9iai0+aGFyZExpbmtzLm5leHQsIHlhZmZzX09iamVjdCwgaGFyZExpbmtzKTsK KworCQl5bGlzdF9kZWxfaW5pdCgmaGwtPmhhcmRMaW5rcyk7CisJCXlsaXN0X2RlbF9pbml0 KCZobC0+c2libGluZ3MpOworCisJCXlhZmZzX0dldE9iamVjdE5hbWUoaGwsIG5hbWUsIFlB RkZTX01BWF9OQU1FX0xFTkdUSCArIDEpOworCisJCXJldFZhbCA9IHlhZmZzX0NoYW5nZU9i amVjdE5hbWUob2JqLCBobC0+cGFyZW50LCBuYW1lLCAwLCAwKTsKKworCQlpZiAocmV0VmFs ID09IFlBRkZTX09LKQorCQkJcmV0VmFsID0geWFmZnNfRG9HZW5lcmljT2JqZWN0RGVsZXRp b24oaGwpOworCisJCXJldHVybiByZXRWYWw7CisKKwl9IGVsc2UgaWYgKGltbWVkaWF0ZURl bGV0aW9uKSB7CisJCXN3aXRjaCAob2JqLT52YXJpYW50VHlwZSkgeworCQljYXNlIFlBRkZT X09CSkVDVF9UWVBFX0ZJTEU6CisJCQlyZXR1cm4geWFmZnNfRGVsZXRlRmlsZShvYmopOwor CQkJYnJlYWs7CisJCWNhc2UgWUFGRlNfT0JKRUNUX1RZUEVfRElSRUNUT1JZOgorCQkJcmV0 dXJuIHlhZmZzX0RlbGV0ZURpcmVjdG9yeShvYmopOworCQkJYnJlYWs7CisJCWNhc2UgWUFG RlNfT0JKRUNUX1RZUEVfU1lNTElOSzoKKwkJCXJldHVybiB5YWZmc19EZWxldGVTeW1MaW5r KG9iaik7CisJCQlicmVhazsKKwkJY2FzZSBZQUZGU19PQkpFQ1RfVFlQRV9TUEVDSUFMOgor CQkJcmV0dXJuIHlhZmZzX0RvR2VuZXJpY09iamVjdERlbGV0aW9uKG9iaik7CisJCQlicmVh azsKKwkJY2FzZSBZQUZGU19PQkpFQ1RfVFlQRV9IQVJETElOSzoKKwkJY2FzZSBZQUZGU19P QkpFQ1RfVFlQRV9VTktOT1dOOgorCQlkZWZhdWx0OgorCQkJcmV0dXJuIFlBRkZTX0ZBSUw7 CisJCX0KKwl9IGVsc2UKKwkJcmV0dXJuIHlhZmZzX0NoYW5nZU9iamVjdE5hbWUob2JqLCBv YmotPm15RGV2LT51bmxpbmtlZERpciwKKwkJCQkJICAgX1koInVubGlua2VkIiksIDAsIDAp OworfQorCisKK3N0YXRpYyBpbnQgeWFmZnNfVW5saW5rT2JqZWN0KHlhZmZzX09iamVjdCAq b2JqKQoreworCisJaWYgKG9iaiAmJiBvYmotPnVubGlua0FsbG93ZWQpCisJCXJldHVybiB5 YWZmc19VbmxpbmtXb3JrZXIob2JqKTsKKworCXJldHVybiBZQUZGU19GQUlMOworCit9Citp bnQgeWFmZnNfVW5saW5rKHlhZmZzX09iamVjdCAqZGlyLCBjb25zdCBZQ0hBUiAqbmFtZSkK K3sKKwl5YWZmc19PYmplY3QgKm9iajsKKworCW9iaiA9IHlhZmZzX0ZpbmRPYmplY3RCeU5h bWUoZGlyLCBuYW1lKTsKKwlyZXR1cm4geWFmZnNfVW5saW5rT2JqZWN0KG9iaik7Cit9CisK Ky8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSW5pdGlhbGlzYXRpb24gU2Nhbm5pbmcgLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgdm9pZCB5YWZmc19IYW5kbGVTaGFk b3dlZE9iamVjdCh5YWZmc19EZXZpY2UgKmRldiwgaW50IG9iaklkLAorCQkJCWludCBiYWNr d2FyZFNjYW5uaW5nKQoreworCXlhZmZzX09iamVjdCAqb2JqOworCisJaWYgKCFiYWNrd2Fy ZFNjYW5uaW5nKSB7CisJCS8qIEhhbmRsZSBZQUZGUzEgZm9yd2FyZCBzY2FubmluZyBjYXNl CisJCSAqIEZvciBZQUZGUzEgd2UgYWx3YXlzIGRvIHRoZSBkZWxldGlvbgorCQkgKi8KKwor CX0gZWxzZSB7CisJCS8qIEhhbmRsZSBZQUZGUzIgY2FzZSAoYmFja3dhcmQgc2Nhbm5pbmcp CisJCSAqIElmIHRoZSBzaGFkb3dlZCBvYmplY3QgZXhpc3RzIHRoZW4gaWdub3JlLgorCQkg Ki8KKwkJaWYgKHlhZmZzX0ZpbmRPYmplY3RCeU51bWJlcihkZXYsIG9iaklkKSkKKwkJCXJl dHVybjsKKwl9CisKKwkvKiBMZXQncyBjcmVhdGUgaXQgKGlmIGl0IGRvZXMgbm90IGV4aXN0 KSBhc3N1bWluZyBpdCBpcyBhIGZpbGUgc28gdGhhdCBpdCBjYW4gZG8gc2hyaW5raW5nIGV0 Yy4KKwkgKiBXZSBwdXQgaXQgaW4gdW5saW5rZWQgZGlyIHRvIGJlIGNsZWFuZWQgdXAgYWZ0 ZXIgdGhlIHNjYW5uaW5nCisJICovCisJb2JqID0KKwkgICAgeWFmZnNfRmluZE9yQ3JlYXRl T2JqZWN0QnlOdW1iZXIoZGV2LCBvYmpJZCwKKwkJCQkJICAgICBZQUZGU19PQkpFQ1RfVFlQ RV9GSUxFKTsKKwlpZiAoIW9iaikKKwkJcmV0dXJuOworCXlhZmZzX0FkZE9iamVjdFRvRGly ZWN0b3J5KGRldi0+dW5saW5rZWREaXIsIG9iaik7CisJb2JqLT52YXJpYW50LmZpbGVWYXJp YW50LnNocmlua1NpemUgPSAwOworCW9iai0+dmFsaWQgPSAxOwkJLyogU28gdGhhdCB3ZSBk b24ndCByZWFkIGFueSBvdGhlciBpbmZvIGZvciB0aGlzIGZpbGUgKi8KKworfQorCit0eXBl ZGVmIHN0cnVjdCB7CisJaW50IHNlcTsKKwlpbnQgYmxvY2s7Cit9IHlhZmZzX0Jsb2NrSW5k ZXg7CisKKworc3RhdGljIHZvaWQgeWFmZnNfSGFyZGxpbmtGaXh1cCh5YWZmc19EZXZpY2Ug KmRldiwgeWFmZnNfT2JqZWN0ICpoYXJkTGlzdCkKK3sKKwl5YWZmc19PYmplY3QgKmhsOwor CXlhZmZzX09iamVjdCAqaW47CisKKwl3aGlsZSAoaGFyZExpc3QpIHsKKwkJaGwgPSBoYXJk TGlzdDsKKwkJaGFyZExpc3QgPSAoeWFmZnNfT2JqZWN0ICopIChoYXJkTGlzdC0+aGFyZExp bmtzLm5leHQpOworCisJCWluID0geWFmZnNfRmluZE9iamVjdEJ5TnVtYmVyKGRldiwKKwkJ CQkJICAgICAgaGwtPnZhcmlhbnQuaGFyZExpbmtWYXJpYW50LgorCQkJCQkgICAgICBlcXVp dmFsZW50T2JqZWN0SWQpOworCisJCWlmIChpbikgeworCQkJLyogQWRkIHRoZSBoYXJkbGlu ayBwb2ludGVycyAqLworCQkJaGwtPnZhcmlhbnQuaGFyZExpbmtWYXJpYW50LmVxdWl2YWxl bnRPYmplY3QgPSBpbjsKKwkJCXlsaXN0X2FkZCgmaGwtPmhhcmRMaW5rcywgJmluLT5oYXJk TGlua3MpOworCQl9IGVsc2UgeworCQkJLyogVG9kbyBOZWVkIHRvIHJlcG9ydC9oYW5kbGUg dGhpcyBiZXR0ZXIuCisJCQkgKiBHb3QgYSBwcm9ibGVtLi4uIGhhcmRsaW5rIHRvIGEgbm9u LWV4aXN0YW50IG9iamVjdAorCQkJICovCisJCQlobC0+dmFyaWFudC5oYXJkTGlua1Zhcmlh bnQuZXF1aXZhbGVudE9iamVjdCA9IE5VTEw7CisJCQlZSU5JVF9MSVNUX0hFQUQoJmhsLT5o YXJkTGlua3MpOworCisJCX0KKwl9Cit9CisKKworCisKKworc3RhdGljIGludCB5YmljbXAo Y29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKK3sKKwlyZWdpc3RlciBpbnQgYXNlcSA9 ICgoeWFmZnNfQmxvY2tJbmRleCAqKWEpLT5zZXE7CisJcmVnaXN0ZXIgaW50IGJzZXEgPSAo KHlhZmZzX0Jsb2NrSW5kZXggKiliKS0+c2VxOworCXJlZ2lzdGVyIGludCBhYmxvY2sgPSAo KHlhZmZzX0Jsb2NrSW5kZXggKilhKS0+YmxvY2s7CisJcmVnaXN0ZXIgaW50IGJibG9jayA9 ICgoeWFmZnNfQmxvY2tJbmRleCAqKWIpLT5ibG9jazsKKwlpZiAoYXNlcSA9PSBic2VxKQor CQlyZXR1cm4gYWJsb2NrIC0gYmJsb2NrOworCWVsc2UKKwkJcmV0dXJuIGFzZXEgLSBic2Vx OworfQorCisKK3N0cnVjdCB5YWZmc19TaGFkb3dGaXhlclN0cnVjdCB7CisJaW50IG9iamVj dElkOworCWludCBzaGFkb3dlZElkOworCXN0cnVjdCB5YWZmc19TaGFkb3dGaXhlclN0cnVj dCAqbmV4dDsKK307CisKKworc3RhdGljIHZvaWQgeWFmZnNfU3RyaXBEZWxldGVkT2JqZWN0 cyh5YWZmc19EZXZpY2UgKmRldikKK3sKKwkvKgorCSogIFNvcnQgb3V0IHN0YXRlIG9mIHVu bGlua2VkIGFuZCBkZWxldGVkIG9iamVjdHMgYWZ0ZXIgc2Nhbm5pbmcuCisJKi8KKwlzdHJ1 Y3QgeWxpc3RfaGVhZCAqaTsKKwlzdHJ1Y3QgeWxpc3RfaGVhZCAqbjsKKwl5YWZmc19PYmpl Y3QgKmw7CisKKwkvKiBTb2Z0IGRlbGV0ZSBhbGwgdGhlIHVubGlua2VkIGZpbGVzICovCisJ eWxpc3RfZm9yX2VhY2hfc2FmZShpLCBuLAorCQkmZGV2LT51bmxpbmtlZERpci0+dmFyaWFu dC5kaXJlY3RvcnlWYXJpYW50LmNoaWxkcmVuKSB7CisJCWlmIChpKSB7CisJCQlsID0geWxp c3RfZW50cnkoaSwgeWFmZnNfT2JqZWN0LCBzaWJsaW5ncyk7CisJCQl5YWZmc19EZWxldGVP YmplY3QobCk7CisJCX0KKwl9CisKKwl5bGlzdF9mb3JfZWFjaF9zYWZlKGksIG4sCisJCSZk ZXYtPmRlbGV0ZWREaXItPnZhcmlhbnQuZGlyZWN0b3J5VmFyaWFudC5jaGlsZHJlbikgewor CQlpZiAoaSkgeworCQkJbCA9IHlsaXN0X2VudHJ5KGksIHlhZmZzX09iamVjdCwgc2libGlu Z3MpOworCQkJeWFmZnNfRGVsZXRlT2JqZWN0KGwpOworCQl9CisJfQorCit9CisKK3N0YXRp YyBpbnQgeWFmZnNfU2Nhbih5YWZmc19EZXZpY2UgKmRldikKK3sKKwl5YWZmc19FeHRlbmRl ZFRhZ3MgdGFnczsKKwlpbnQgYmxrOworCWludCBibG9ja0l0ZXJhdG9yOworCWludCBzdGFy dEl0ZXJhdG9yOworCWludCBlbmRJdGVyYXRvcjsKKwlpbnQgcmVzdWx0OworCisJaW50IGNo dW5rOworCWludCBjOworCWludCBkZWxldGVkOworCXlhZmZzX0Jsb2NrU3RhdGUgc3RhdGU7 CisJeWFmZnNfT2JqZWN0ICpoYXJkTGlzdCA9IE5VTEw7CisJeWFmZnNfQmxvY2tJbmZvICpi aTsKKwlfX3UzMiBzZXF1ZW5jZU51bWJlcjsKKwl5YWZmc19PYmplY3RIZWFkZXIgKm9oOwor CXlhZmZzX09iamVjdCAqaW47CisJeWFmZnNfT2JqZWN0ICpwYXJlbnQ7CisKKwlpbnQgYWxs b2NfZmFpbGVkID0gMDsKKworCXN0cnVjdCB5YWZmc19TaGFkb3dGaXhlclN0cnVjdCAqc2hh ZG93Rml4ZXJMaXN0ID0gTlVMTDsKKworCisJX191OCAqY2h1bmtEYXRhOworCisKKworCVQo WUFGRlNfVFJBQ0VfU0NBTiwKKwkgIChUU1RSKCJ5YWZmc19TY2FuIHN0YXJ0cyAgaW50c3Rh cnRibGsgJWQgaW50ZW5kYmxrICVkLi4uIiBURU5EU1RSKSwKKwkgICBkZXYtPmludGVybmFs U3RhcnRCbG9jaywgZGV2LT5pbnRlcm5hbEVuZEJsb2NrKSk7CisKKwljaHVua0RhdGEgPSB5 YWZmc19HZXRUZW1wQnVmZmVyKGRldiwgX19MSU5FX18pOworCisJZGV2LT5zZXF1ZW5jZU51 bWJlciA9IFlBRkZTX0xPV0VTVF9TRVFVRU5DRV9OVU1CRVI7CisKKwkvKiBTY2FuIGFsbCB0 aGUgYmxvY2tzIHRvIGRldGVybWluZSB0aGVpciBzdGF0ZSAqLworCWZvciAoYmxrID0gZGV2 LT5pbnRlcm5hbFN0YXJ0QmxvY2s7IGJsayA8PSBkZXYtPmludGVybmFsRW5kQmxvY2s7IGJs aysrKSB7CisJCWJpID0geWFmZnNfR2V0QmxvY2tJbmZvKGRldiwgYmxrKTsKKwkJeWFmZnNf Q2xlYXJDaHVua0JpdHMoZGV2LCBibGspOworCQliaS0+cGFnZXNJblVzZSA9IDA7CisJCWJp LT5zb2Z0RGVsZXRpb25zID0gMDsKKworCQl5YWZmc19RdWVyeUluaXRpYWxCbG9ja1N0YXRl KGRldiwgYmxrLCAmc3RhdGUsICZzZXF1ZW5jZU51bWJlcik7CisKKwkJYmktPmJsb2NrU3Rh dGUgPSBzdGF0ZTsKKwkJYmktPnNlcXVlbmNlTnVtYmVyID0gc2VxdWVuY2VOdW1iZXI7CisK KwkJaWYgKGJpLT5zZXF1ZW5jZU51bWJlciA9PSBZQUZGU19TRVFVRU5DRV9CQURfQkxPQ0sp CisJCQliaS0+YmxvY2tTdGF0ZSA9IHN0YXRlID0gWUFGRlNfQkxPQ0tfU1RBVEVfREVBRDsK KworCQlUKFlBRkZTX1RSQUNFX1NDQU5fREVCVUcsCisJCSAgKFRTVFIoIkJsb2NrIHNjYW5u aW5nIGJsb2NrICVkIHN0YXRlICVkIHNlcSAlZCIgVEVORFNUUiksIGJsaywKKwkJICAgc3Rh dGUsIHNlcXVlbmNlTnVtYmVyKSk7CisKKwkJaWYgKHN0YXRlID09IFlBRkZTX0JMT0NLX1NU QVRFX0RFQUQpIHsKKwkJCVQoWUFGRlNfVFJBQ0VfQkFEX0JMT0NLUywKKwkJCSAgKFRTVFIo ImJsb2NrICVkIGlzIGJhZCIgVEVORFNUUiksIGJsaykpOworCQl9IGVsc2UgaWYgKHN0YXRl ID09IFlBRkZTX0JMT0NLX1NUQVRFX0VNUFRZKSB7CisJCQlUKFlBRkZTX1RSQUNFX1NDQU5f REVCVUcsCisJCQkgIChUU1RSKCJCbG9jayBlbXB0eSAiIFRFTkRTVFIpKSk7CisJCQlkZXYt Pm5FcmFzZWRCbG9ja3MrKzsKKwkJCWRldi0+bkZyZWVDaHVua3MgKz0gZGV2LT5uQ2h1bmtz UGVyQmxvY2s7CisJCX0KKwl9CisKKwlzdGFydEl0ZXJhdG9yID0gZGV2LT5pbnRlcm5hbFN0 YXJ0QmxvY2s7CisJZW5kSXRlcmF0b3IgPSBkZXYtPmludGVybmFsRW5kQmxvY2s7CisKKwkv KiBGb3IgZWFjaCBibG9jay4uLi4gKi8KKwlmb3IgKGJsb2NrSXRlcmF0b3IgPSBzdGFydEl0 ZXJhdG9yOyAhYWxsb2NfZmFpbGVkICYmIGJsb2NrSXRlcmF0b3IgPD0gZW5kSXRlcmF0b3I7 CisJICAgICBibG9ja0l0ZXJhdG9yKyspIHsKKworCQlZWUlFTEQoKTsKKworCQlZWUlFTEQo KTsKKworCQlibGsgPSBibG9ja0l0ZXJhdG9yOworCisJCWJpID0geWFmZnNfR2V0QmxvY2tJ bmZvKGRldiwgYmxrKTsKKwkJc3RhdGUgPSBiaS0+YmxvY2tTdGF0ZTsKKworCQlkZWxldGVk ID0gMDsKKworCQkvKiBGb3IgZWFjaCBjaHVuayBpbiBlYWNoIGJsb2NrIHRoYXQgbmVlZHMg c2Nhbm5pbmcuLi4uKi8KKwkJZm9yIChjID0gMDsgIWFsbG9jX2ZhaWxlZCAmJiBjIDwgZGV2 LT5uQ2h1bmtzUGVyQmxvY2sgJiYKKwkJICAgICBzdGF0ZSA9PSBZQUZGU19CTE9DS19TVEFU RV9ORUVEU19TQ0FOTklORzsgYysrKSB7CisJCQkvKiBSZWFkIHRoZSB0YWdzIGFuZCBkZWNp ZGUgd2hhdCB0byBkbyAqLworCQkJY2h1bmsgPSBibGsgKiBkZXYtPm5DaHVua3NQZXJCbG9j ayArIGM7CisKKwkJCXJlc3VsdCA9IHlhZmZzX1JlYWRDaHVua1dpdGhUYWdzRnJvbU5BTkQo ZGV2LCBjaHVuaywgTlVMTCwKKwkJCQkJCQkmdGFncyk7CisKKwkJCS8qIExldCdzIGhhdmUg YSBnb29kIGxvb2sgYXQgdGhpcyBjaHVuay4uLiAqLworCisJCQlpZiAodGFncy5lY2NSZXN1 bHQgPT0gWUFGRlNfRUNDX1JFU1VMVF9VTkZJWEVEIHx8IHRhZ3MuY2h1bmtEZWxldGVkKSB7 CisJCQkJLyogWUFGRlMxIG9ubHkuLi4KKwkJCQkgKiBBIGRlbGV0ZWQgY2h1bmsKKwkJCQkg Ki8KKwkJCQlkZWxldGVkKys7CisJCQkJZGV2LT5uRnJlZUNodW5rcysrOworCQkJCS8qVCgo IiAlZCAlZCBkZWxldGVkXG4iLGJsayxjKSk7ICovCisJCQl9IGVsc2UgaWYgKCF0YWdzLmNo dW5rVXNlZCkgeworCQkJCS8qIEFuIHVuYXNzaWduZWQgY2h1bmsgaW4gdGhlIGJsb2NrCisJ CQkJICogVGhpcyBtZWFucyB0aGF0IGVpdGhlciB0aGUgYmxvY2sgaXMgZW1wdHkgb3IKKwkJ CQkgKiB0aGlzIGlzIHRoZSBvbmUgYmVpbmcgYWxsb2NhdGVkIGZyb20KKwkJCQkgKi8KKwor CQkJCWlmIChjID09IDApIHsKKwkJCQkJLyogV2UncmUgbG9va2luZyBhdCB0aGUgZmlyc3Qg Y2h1bmsgaW4gdGhlIGJsb2NrIHNvIHRoZSBibG9jayBpcyB1bnVzZWQgKi8KKwkJCQkJc3Rh dGUgPSBZQUZGU19CTE9DS19TVEFURV9FTVBUWTsKKwkJCQkJZGV2LT5uRXJhc2VkQmxvY2tz Kys7CisJCQkJfSBlbHNlIHsKKwkJCQkJLyogdGhpcyBpcyB0aGUgYmxvY2sgYmVpbmcgYWxs b2NhdGVkIGZyb20gKi8KKwkJCQkJVChZQUZGU19UUkFDRV9TQ0FOLAorCQkJCQkgIChUU1RS CisJCQkJCSAgICgiIEFsbG9jYXRpbmcgZnJvbSAlZCAlZCIgVEVORFNUUiksCisJCQkJCSAg IGJsaywgYykpOworCQkJCQlzdGF0ZSA9IFlBRkZTX0JMT0NLX1NUQVRFX0FMTE9DQVRJTkc7 CisJCQkJCWRldi0+YWxsb2NhdGlvbkJsb2NrID0gYmxrOworCQkJCQlkZXYtPmFsbG9jYXRp b25QYWdlID0gYzsKKwkJCQkJZGV2LT5hbGxvY2F0aW9uQmxvY2tGaW5kZXIgPSBibGs7CisJ CQkJCS8qIFNldCBpdCB0byBoZXJlIHRvIGVuY291cmFnZSB0aGUgYWxsb2NhdG9yIHRvIGdv IGZvcnRoIGZyb20gaGVyZS4gKi8KKworCQkJCX0KKworCQkJCWRldi0+bkZyZWVDaHVua3Mg Kz0gKGRldi0+bkNodW5rc1BlckJsb2NrIC0gYyk7CisJCQl9IGVsc2UgaWYgKHRhZ3MuY2h1 bmtJZCA+IDApIHsKKwkJCQkvKiBjaHVua0lkID4gMCBzbyBpdCBpcyBhIGRhdGEgY2h1bmsu Li4gKi8KKwkJCQl1bnNpZ25lZCBpbnQgZW5kcG9zOworCisJCQkJeWFmZnNfU2V0Q2h1bmtC aXQoZGV2LCBibGssIGMpOworCQkJCWJpLT5wYWdlc0luVXNlKys7CisKKwkJCQlpbiA9IHlh ZmZzX0ZpbmRPckNyZWF0ZU9iamVjdEJ5TnVtYmVyKGRldiwKKwkJCQkJCQkJICAgICAgdGFn cy4KKwkJCQkJCQkJICAgICAgb2JqZWN0SWQsCisJCQkJCQkJCSAgICAgIFlBRkZTX09CSkVD VF9UWVBFX0ZJTEUpOworCQkJCS8qIFB1dENodW5rSW50b0ZpbGUgY2hlY2tzIGZvciBhIGNs YXNoICh0d28gZGF0YSBjaHVua3Mgd2l0aAorCQkJCSAqIHRoZSBzYW1lIGNodW5rSWQpLgor CQkJCSAqLworCisJCQkJaWYgKCFpbikKKwkJCQkJYWxsb2NfZmFpbGVkID0gMTsKKworCQkJ CWlmIChpbikgeworCQkJCQlpZiAoIXlhZmZzX1B1dENodW5rSW50b0ZpbGUoaW4sIHRhZ3Mu Y2h1bmtJZCwgY2h1bmssIDEpKQorCQkJCQkJYWxsb2NfZmFpbGVkID0gMTsKKwkJCQl9CisK KwkJCQllbmRwb3MgPQorCQkJCSAgICAodGFncy5jaHVua0lkIC0gMSkgKiBkZXYtPm5EYXRh Qnl0ZXNQZXJDaHVuayArCisJCQkJICAgIHRhZ3MuYnl0ZUNvdW50OworCQkJCWlmIChpbiAm JgorCQkJCSAgICBpbi0+dmFyaWFudFR5cGUgPT0gWUFGRlNfT0JKRUNUX1RZUEVfRklMRQor CQkJCSAgICAmJiBpbi0+dmFyaWFudC5maWxlVmFyaWFudC5zY2FubmVkRmlsZVNpemUgPAor CQkJCSAgICBlbmRwb3MpIHsKKwkJCQkJaW4tPnZhcmlhbnQuZmlsZVZhcmlhbnQuCisJCQkJ CSAgICBzY2FubmVkRmlsZVNpemUgPSBlbmRwb3M7CisJCQkJCWlmICghZGV2LT51c2VIZWFk ZXJGaWxlU2l6ZSkgeworCQkJCQkJaW4tPnZhcmlhbnQuZmlsZVZhcmlhbnQuCisJCQkJCQkg ICAgZmlsZVNpemUgPQorCQkJCQkJICAgIGluLT52YXJpYW50LmZpbGVWYXJpYW50LgorCQkJ CQkJICAgIHNjYW5uZWRGaWxlU2l6ZTsKKwkJCQkJfQorCisJCQkJfQorCQkJCS8qIFQoKCIg JWQgJWQgZGF0YSAlZCAlZFxuIixibGssYyx0YWdzLm9iamVjdElkLHRhZ3MuY2h1bmtJZCkp OyAgICovCisJCQl9IGVsc2UgeworCQkJCS8qIGNodW5rSWQgPT0gMCwgc28gaXQgaXMgYW4g T2JqZWN0SGVhZGVyLgorCQkJCSAqIFRodXMsIHdlIHJlYWQgaW4gdGhlIG9iamVjdCBoZWFk ZXIgYW5kIG1ha2UgdGhlIG9iamVjdAorCQkJCSAqLworCQkJCXlhZmZzX1NldENodW5rQml0 KGRldiwgYmxrLCBjKTsKKwkJCQliaS0+cGFnZXNJblVzZSsrOworCisJCQkJcmVzdWx0ID0g eWFmZnNfUmVhZENodW5rV2l0aFRhZ3NGcm9tTkFORChkZXYsIGNodW5rLAorCQkJCQkJCQlj aHVua0RhdGEsCisJCQkJCQkJCU5VTEwpOworCisJCQkJb2ggPSAoeWFmZnNfT2JqZWN0SGVh ZGVyICopIGNodW5rRGF0YTsKKworCQkJCWluID0geWFmZnNfRmluZE9iamVjdEJ5TnVtYmVy KGRldiwKKwkJCQkJCQkgICAgICB0YWdzLm9iamVjdElkKTsKKwkJCQlpZiAoaW4gJiYgaW4t PnZhcmlhbnRUeXBlICE9IG9oLT50eXBlKSB7CisJCQkJCS8qIFRoaXMgc2hvdWxkIG5vdCBo YXBwZW4sIGJ1dCBzb21laG93CisJCQkJCSAqIFdldidlIGVuZGVkIHVwIHdpdGggYW4gb2Jq ZWN0SWQgdGhhdCBoYXMgYmVlbiByZXVzZWQgYnV0IG5vdCB5ZXQKKwkJCQkJICogZGVsZXRl ZCwgYW5kIHdvcnNlIHN0aWxsIGl0IGhhcyBjaGFuZ2VkIHR5cGUuIERlbGV0ZSB0aGUgb2xk IG9iamVjdC4KKwkJCQkJICovCisKKwkJCQkJeWFmZnNfRGVsZXRlT2JqZWN0KGluKTsKKwor CQkJCQlpbiA9IDA7CisJCQkJfQorCisJCQkJaW4gPSB5YWZmc19GaW5kT3JDcmVhdGVPYmpl Y3RCeU51bWJlcihkZXYsCisJCQkJCQkJCSAgICAgIHRhZ3MuCisJCQkJCQkJCSAgICAgIG9i amVjdElkLAorCQkJCQkJCQkgICAgICBvaC0+dHlwZSk7CisKKwkJCQlpZiAoIWluKQorCQkJ CQlhbGxvY19mYWlsZWQgPSAxOworCisJCQkJaWYgKGluICYmIG9oLT5zaGFkb3dzT2JqZWN0 ID4gMCkgeworCisJCQkJCXN0cnVjdCB5YWZmc19TaGFkb3dGaXhlclN0cnVjdCAqZml4ZXI7 CisJCQkJCWZpeGVyID0gWU1BTExPQyhzaXplb2Yoc3RydWN0IHlhZmZzX1NoYWRvd0ZpeGVy U3RydWN0KSk7CisJCQkJCWlmIChmaXhlcikgeworCQkJCQkJZml4ZXItPm5leHQgPSBzaGFk b3dGaXhlckxpc3Q7CisJCQkJCQlzaGFkb3dGaXhlckxpc3QgPSBmaXhlcjsKKwkJCQkJCWZp eGVyLT5vYmplY3RJZCA9IHRhZ3Mub2JqZWN0SWQ7CisJCQkJCQlmaXhlci0+c2hhZG93ZWRJ ZCA9IG9oLT5zaGFkb3dzT2JqZWN0OworCQkJCQl9CisKKwkJCQl9CisKKwkJCQlpZiAoaW4g JiYgaW4tPnZhbGlkKSB7CisJCQkJCS8qIFdlIGhhdmUgYWxyZWFkeSBmaWxsZWQgdGhpcyBv bmUuIFdlIGhhdmUgYSBkdXBsaWNhdGUgYW5kIG5lZWQgdG8gcmVzb2x2ZSBpdC4gKi8KKwor CQkJCQl1bnNpZ25lZCBleGlzdGluZ1NlcmlhbCA9IGluLT5zZXJpYWw7CisJCQkJCXVuc2ln bmVkIG5ld1NlcmlhbCA9IHRhZ3Muc2VyaWFsTnVtYmVyOworCisJCQkJCWlmICgoKGV4aXN0 aW5nU2VyaWFsICsgMSkgJiAzKSA9PSBuZXdTZXJpYWwpIHsKKwkJCQkJCS8qIFVzZSBuZXcg b25lIC0gZGVzdHJveSB0aGUgZXhpc2l0aW5nIG9uZSAqLworCQkJCQkJeWFmZnNfRGVsZXRl Q2h1bmsoZGV2LAorCQkJCQkJCQkgIGluLT5oZHJDaHVuaywKKwkJCQkJCQkJICAxLCBfX0xJ TkVfXyk7CisJCQkJCQlpbi0+dmFsaWQgPSAwOworCQkJCQl9IGVsc2UgeworCQkJCQkJLyog VXNlIGV4aXN0aW5nIC0gZGVzdHJveSB0aGlzIG9uZS4gKi8KKwkJCQkJCXlhZmZzX0RlbGV0 ZUNodW5rKGRldiwgY2h1bmssIDEsCisJCQkJCQkJCSAgX19MSU5FX18pOworCQkJCQl9CisJ CQkJfQorCisJCQkJaWYgKGluICYmICFpbi0+dmFsaWQgJiYKKwkJCQkgICAgKHRhZ3Mub2Jq ZWN0SWQgPT0gWUFGRlNfT0JKRUNUSURfUk9PVCB8fAorCQkJCSAgICAgdGFncy5vYmplY3RJ ZCA9PSBZQUZGU19PQkpFQ1RJRF9MT1NUTkZPVU5EKSkgeworCQkJCQkvKiBXZSBvbmx5IGxv YWQgc29tZSBpbmZvLCBkb24ndCBmaWRkbGUgd2l0aCBkaXJlY3Rvcnkgc3RydWN0dXJlICov CisJCQkJCWluLT52YWxpZCA9IDE7CisJCQkJCWluLT52YXJpYW50VHlwZSA9IG9oLT50eXBl OworCisJCQkJCWluLT55c3RfbW9kZSA9IG9oLT55c3RfbW9kZTsKKyNpZmRlZiBDT05GSUdf WUFGRlNfV0lOQ0UKKwkJCQkJaW4tPndpbl9hdGltZVswXSA9IG9oLT53aW5fYXRpbWVbMF07 CisJCQkJCWluLT53aW5fY3RpbWVbMF0gPSBvaC0+d2luX2N0aW1lWzBdOworCQkJCQlpbi0+ d2luX210aW1lWzBdID0gb2gtPndpbl9tdGltZVswXTsKKwkJCQkJaW4tPndpbl9hdGltZVsx XSA9IG9oLT53aW5fYXRpbWVbMV07CisJCQkJCWluLT53aW5fY3RpbWVbMV0gPSBvaC0+d2lu X2N0aW1lWzFdOworCQkJCQlpbi0+d2luX210aW1lWzFdID0gb2gtPndpbl9tdGltZVsxXTsK KyNlbHNlCisJCQkJCWluLT55c3RfdWlkID0gb2gtPnlzdF91aWQ7CisJCQkJCWluLT55c3Rf Z2lkID0gb2gtPnlzdF9naWQ7CisJCQkJCWluLT55c3RfYXRpbWUgPSBvaC0+eXN0X2F0aW1l OworCQkJCQlpbi0+eXN0X210aW1lID0gb2gtPnlzdF9tdGltZTsKKwkJCQkJaW4tPnlzdF9j dGltZSA9IG9oLT55c3RfY3RpbWU7CisJCQkJCWluLT55c3RfcmRldiA9IG9oLT55c3RfcmRl djsKKyNlbmRpZgorCQkJCQlpbi0+aGRyQ2h1bmsgPSBjaHVuazsKKwkJCQkJaW4tPnNlcmlh bCA9IHRhZ3Muc2VyaWFsTnVtYmVyOworCisJCQkJfSBlbHNlIGlmIChpbiAmJiAhaW4tPnZh bGlkKSB7CisJCQkJCS8qIHdlIG5lZWQgdG8gbG9hZCB0aGlzIGluZm8gKi8KKworCQkJCQlp bi0+dmFsaWQgPSAxOworCQkJCQlpbi0+dmFyaWFudFR5cGUgPSBvaC0+dHlwZTsKKworCQkJ CQlpbi0+eXN0X21vZGUgPSBvaC0+eXN0X21vZGU7CisjaWZkZWYgQ09ORklHX1lBRkZTX1dJ TkNFCisJCQkJCWluLT53aW5fYXRpbWVbMF0gPSBvaC0+d2luX2F0aW1lWzBdOworCQkJCQlp bi0+d2luX2N0aW1lWzBdID0gb2gtPndpbl9jdGltZVswXTsKKwkJCQkJaW4tPndpbl9tdGlt ZVswXSA9IG9oLT53aW5fbXRpbWVbMF07CisJCQkJCWluLT53aW5fYXRpbWVbMV0gPSBvaC0+ d2luX2F0aW1lWzFdOworCQkJCQlpbi0+d2luX2N0aW1lWzFdID0gb2gtPndpbl9jdGltZVsx XTsKKwkJCQkJaW4tPndpbl9tdGltZVsxXSA9IG9oLT53aW5fbXRpbWVbMV07CisjZWxzZQor CQkJCQlpbi0+eXN0X3VpZCA9IG9oLT55c3RfdWlkOworCQkJCQlpbi0+eXN0X2dpZCA9IG9o LT55c3RfZ2lkOworCQkJCQlpbi0+eXN0X2F0aW1lID0gb2gtPnlzdF9hdGltZTsKKwkJCQkJ aW4tPnlzdF9tdGltZSA9IG9oLT55c3RfbXRpbWU7CisJCQkJCWluLT55c3RfY3RpbWUgPSBv aC0+eXN0X2N0aW1lOworCQkJCQlpbi0+eXN0X3JkZXYgPSBvaC0+eXN0X3JkZXY7CisjZW5k aWYKKwkJCQkJaW4tPmhkckNodW5rID0gY2h1bms7CisJCQkJCWluLT5zZXJpYWwgPSB0YWdz LnNlcmlhbE51bWJlcjsKKworCQkJCQl5YWZmc19TZXRPYmplY3ROYW1lKGluLCBvaC0+bmFt ZSk7CisJCQkJCWluLT5kaXJ0eSA9IDA7CisKKwkJCQkJLyogZGlyZWN0b3J5IHN0dWZmLi4u CisJCQkJCSAqIGhvb2sgdXAgdG8gcGFyZW50CisJCQkJCSAqLworCisJCQkJCXBhcmVudCA9 CisJCQkJCSAgICB5YWZmc19GaW5kT3JDcmVhdGVPYmplY3RCeU51bWJlcgorCQkJCQkgICAg KGRldiwgb2gtPnBhcmVudE9iamVjdElkLAorCQkJCQkgICAgIFlBRkZTX09CSkVDVF9UWVBF X0RJUkVDVE9SWSk7CisJCQkJCWlmICghcGFyZW50KQorCQkJCQkJYWxsb2NfZmFpbGVkID0g MTsKKwkJCQkJaWYgKHBhcmVudCAmJiBwYXJlbnQtPnZhcmlhbnRUeXBlID09CisJCQkJCSAg ICBZQUZGU19PQkpFQ1RfVFlQRV9VTktOT1dOKSB7CisJCQkJCQkvKiBTZXQgdXAgYXMgYSBk aXJlY3RvcnkgKi8KKwkJCQkJCXBhcmVudC0+dmFyaWFudFR5cGUgPQorCQkJCQkJCVlBRkZT X09CSkVDVF9UWVBFX0RJUkVDVE9SWTsKKwkJCQkJCVlJTklUX0xJU1RfSEVBRCgmcGFyZW50 LT52YXJpYW50LgorCQkJCQkJCQlkaXJlY3RvcnlWYXJpYW50LgorCQkJCQkJCQljaGlsZHJl bik7CisJCQkJCX0gZWxzZSBpZiAoIXBhcmVudCB8fCBwYXJlbnQtPnZhcmlhbnRUeXBlICE9 CisJCQkJCQkgICBZQUZGU19PQkpFQ1RfVFlQRV9ESVJFQ1RPUlkpIHsKKwkJCQkJCS8qIEhv b3N0ZXJtYW4sIGFub3RoZXIgcHJvYmxlbS4uLi4KKwkJCQkJCSAqIFdlJ3JlIHRyeWluZyB0 byB1c2UgYSBub24tZGlyZWN0b3J5IGFzIGEgZGlyZWN0b3J5CisJCQkJCQkgKi8KKworCQkJ CQkJVChZQUZGU19UUkFDRV9FUlJPUiwKKwkJCQkJCSAgKFRTVFIKKwkJCQkJCSAgICgieWFm ZnMgdHJhZ2VkeTogYXR0ZW1wdGluZyB0byB1c2Ugbm9uLWRpcmVjdG9yeSBhcyBhIGRpcmVj dG9yeSBpbiBzY2FuLiBQdXQgaW4gbG9zdCtmb3VuZC4iCisJCQkJCQkgICAgVEVORFNUUikp KTsKKwkJCQkJCXBhcmVudCA9IGRldi0+bG9zdE5Gb3VuZERpcjsKKwkJCQkJfQorCisJCQkJ CXlhZmZzX0FkZE9iamVjdFRvRGlyZWN0b3J5KHBhcmVudCwgaW4pOworCisJCQkJCWlmICgw ICYmIChwYXJlbnQgPT0gZGV2LT5kZWxldGVkRGlyIHx8CisJCQkJCQkgIHBhcmVudCA9PSBk ZXYtPnVubGlua2VkRGlyKSkgeworCQkJCQkJaW4tPmRlbGV0ZWQgPSAxOwkvKiBJZiBpdCBp cyB1bmxpbmtlZCBhdCBzdGFydCB1cCB0aGVuIGl0IHdhbnRzIGRlbGV0aW5nICovCisJCQkJ CQlkZXYtPm5EZWxldGVkRmlsZXMrKzsKKwkJCQkJfQorCQkJCQkvKiBOb3RlIHJlIGhhcmRs aW5rcy4KKwkJCQkJICogU2luY2Ugd2UgbWlnaHQgc2NhbiBhIGhhcmRsaW5rIGJlZm9yZSBp dHMgZXF1aXZhbGVudCBvYmplY3QgaXMgc2Nhbm5lZAorCQkJCQkgKiB3ZSBwdXQgdGhlbSBh bGwgaW4gYSBsaXN0LgorCQkJCQkgKiBBZnRlciBzY2FubmluZyBpcyBjb21wbGV0ZSwgd2Ug c2hvdWxkIGhhdmUgYWxsIHRoZSBvYmplY3RzLCBzbyB3ZSBydW4gdGhyb3VnaCB0aGlzCisJ CQkJCSAqIGxpc3QgYW5kIGZpeCB1cCBhbGwgdGhlIGNoYWlucy4KKwkJCQkJICovCisKKwkJ CQkJc3dpdGNoIChpbi0+dmFyaWFudFR5cGUpIHsKKwkJCQkJY2FzZSBZQUZGU19PQkpFQ1Rf VFlQRV9VTktOT1dOOgorCQkJCQkJLyogVG9kbyBnb3QgYSBwcm9ibGVtICovCisJCQkJCQli cmVhazsKKwkJCQkJY2FzZSBZQUZGU19PQkpFQ1RfVFlQRV9GSUxFOgorCQkJCQkJaWYgKGRl di0+dXNlSGVhZGVyRmlsZVNpemUpCisKKwkJCQkJCQlpbi0+dmFyaWFudC5maWxlVmFyaWFu dC4KKwkJCQkJCQkgICAgZmlsZVNpemUgPQorCQkJCQkJCSAgICBvaC0+ZmlsZVNpemU7CisK KwkJCQkJCWJyZWFrOworCQkJCQljYXNlIFlBRkZTX09CSkVDVF9UWVBFX0hBUkRMSU5LOgor CQkJCQkJaW4tPnZhcmlhbnQuaGFyZExpbmtWYXJpYW50LgorCQkJCQkJCWVxdWl2YWxlbnRP YmplY3RJZCA9CisJCQkJCQkJb2gtPmVxdWl2YWxlbnRPYmplY3RJZDsKKwkJCQkJCWluLT5o YXJkTGlua3MubmV4dCA9CisJCQkJCQkJKHN0cnVjdCB5bGlzdF9oZWFkICopCisJCQkJCQkJ aGFyZExpc3Q7CisJCQkJCQloYXJkTGlzdCA9IGluOworCQkJCQkJYnJlYWs7CisJCQkJCWNh c2UgWUFGRlNfT0JKRUNUX1RZUEVfRElSRUNUT1JZOgorCQkJCQkJLyogRG8gbm90aGluZyAq LworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgWUFGRlNfT0JKRUNUX1RZUEVfU1BFQ0lBTDoK KwkJCQkJCS8qIERvIG5vdGhpbmcgKi8KKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIFlBRkZT X09CSkVDVF9UWVBFX1NZTUxJTks6CisJCQkJCQlpbi0+dmFyaWFudC5zeW1MaW5rVmFyaWFu dC5hbGlhcyA9CisJCQkJCQkgICAgeWFmZnNfQ2xvbmVTdHJpbmcob2gtPmFsaWFzKTsKKwkJ CQkJCWlmICghaW4tPnZhcmlhbnQuc3ltTGlua1ZhcmlhbnQuYWxpYXMpCisJCQkJCQkJYWxs b2NfZmFpbGVkID0gMTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisKKy8qCisJCQkJCWlmIChw YXJlbnQgPT0gZGV2LT5kZWxldGVkRGlyKSB7CisJCQkJCQl5YWZmc19EZXN0cm95T2JqZWN0 KGluKTsKKwkJCQkJCWJpLT5oYXNTaHJpbmtIZWFkZXIgPSAxOworCQkJCQl9CisqLworCQkJ CX0KKwkJCX0KKwkJfQorCisJCWlmIChzdGF0ZSA9PSBZQUZGU19CTE9DS19TVEFURV9ORUVE U19TQ0FOTklORykgeworCQkJLyogSWYgd2UgZ290IHRoaXMgZmFyIHdoaWxlIHNjYW5uaW5n LCB0aGVuIHRoZSBibG9jayBpcyBmdWxseSBhbGxvY2F0ZWQuKi8KKwkJCXN0YXRlID0gWUFG RlNfQkxPQ0tfU1RBVEVfRlVMTDsKKwkJfQorCisJCWJpLT5ibG9ja1N0YXRlID0gc3RhdGU7 CisKKwkJLyogTm93IGxldCdzIHNlZSBpZiBpdCB3YXMgZGlydHkgKi8KKwkJaWYgKGJpLT5w YWdlc0luVXNlID09IDAgJiYKKwkJICAgICFiaS0+aGFzU2hyaW5rSGVhZGVyICYmCisJCSAg ICBiaS0+YmxvY2tTdGF0ZSA9PSBZQUZGU19CTE9DS19TVEFURV9GVUxMKSB7CisJCQl5YWZm c19CbG9ja0JlY2FtZURpcnR5KGRldiwgYmxrKTsKKwkJfQorCisJfQorCisKKwkvKiBPaywg d2UndmUgZG9uZSBhbGwgdGhlIHNjYW5uaW5nLgorCSAqIEZpeCB1cCB0aGUgaGFyZCBsaW5r IGNoYWlucy4KKwkgKiBXZSBzaG91bGQgbm93IGhhdmUgc2Nhbm5lZCBhbGwgdGhlIG9iamVj dHMsIG5vdyBpdCdzIHRpbWUgdG8gYWRkIHRoZXNlCisJICogaGFyZGxpbmtzLgorCSAqLwor CisJeWFmZnNfSGFyZGxpbmtGaXh1cChkZXYsIGhhcmRMaXN0KTsKKworCS8qIEZpeCB1cCBh bnkgc2hhZG93ZWQgb2JqZWN0cyAqLworCXsKKwkJc3RydWN0IHlhZmZzX1NoYWRvd0ZpeGVy U3RydWN0ICpmaXhlcjsKKwkJeWFmZnNfT2JqZWN0ICpvYmo7CisKKwkJd2hpbGUgKHNoYWRv d0ZpeGVyTGlzdCkgeworCQkJZml4ZXIgPSBzaGFkb3dGaXhlckxpc3Q7CisJCQlzaGFkb3dG aXhlckxpc3QgPSBmaXhlci0+bmV4dDsKKwkJCS8qIENvbXBsZXRlIHRoZSByZW5hbWUgdHJh bnNhY3Rpb24gYnkgZGVsZXRpbmcgdGhlIHNoYWRvd2VkIG9iamVjdAorCQkJICogdGhlbiBz ZXR0aW5nIHRoZSBvYmplY3QgaGVhZGVyIHRvIHVuc2hhZG93ZWQuCisJCQkgKi8KKwkJCW9i aiA9IHlhZmZzX0ZpbmRPYmplY3RCeU51bWJlcihkZXYsIGZpeGVyLT5zaGFkb3dlZElkKTsK KwkJCWlmIChvYmopCisJCQkJeWFmZnNfRGVsZXRlT2JqZWN0KG9iaik7CisKKwkJCW9iaiA9 IHlhZmZzX0ZpbmRPYmplY3RCeU51bWJlcihkZXYsIGZpeGVyLT5vYmplY3RJZCk7CisKKwkJ CWlmIChvYmopCisJCQkJeWFmZnNfVXBkYXRlT2JqZWN0SGVhZGVyKG9iaiwgTlVMTCwgMSwg MCwgMCk7CisKKwkJCVlGUkVFKGZpeGVyKTsKKwkJfQorCX0KKworCXlhZmZzX1JlbGVhc2VU ZW1wQnVmZmVyKGRldiwgY2h1bmtEYXRhLCBfX0xJTkVfXyk7CisKKwlpZiAoYWxsb2NfZmFp bGVkKQorCQlyZXR1cm4gWUFGRlNfRkFJTDsKKworCVQoWUFGRlNfVFJBQ0VfU0NBTiwgKFRT VFIoInlhZmZzX1NjYW4gZW5kcyIgVEVORFNUUikpKTsKKworCisJcmV0dXJuIFlBRkZTX09L OworfQorCitzdGF0aWMgdm9pZCB5YWZmc19DaGVja09iamVjdERldGFpbHNMb2FkZWQoeWFm ZnNfT2JqZWN0ICppbikKK3sKKwlfX3U4ICpjaHVua0RhdGE7CisJeWFmZnNfT2JqZWN0SGVh ZGVyICpvaDsKKwl5YWZmc19EZXZpY2UgKmRldjsKKwl5YWZmc19FeHRlbmRlZFRhZ3MgdGFn czsKKwlpbnQgcmVzdWx0OworCWludCBhbGxvY19mYWlsZWQgPSAwOworCisJaWYgKCFpbikK KwkJcmV0dXJuOworCisJZGV2ID0gaW4tPm15RGV2OworCisjaWYgMAorCVQoWUFGRlNfVFJB Q0VfU0NBTiwgKFRTVFIoImRldGFpbHMgZm9yIG9iamVjdCAlZCAlcyBsb2FkZWQiIFRFTkRT VFIpLAorCQlpbi0+b2JqZWN0SWQsCisJCWluLT5sYXp5TG9hZGVkID8gIm5vdCB5ZXQiIDog ImFscmVhZHkiKSk7CisjZW5kaWYKKworCWlmIChpbi0+bGF6eUxvYWRlZCAmJiBpbi0+aGRy Q2h1bmsgPiAwKSB7CisJCWluLT5sYXp5TG9hZGVkID0gMDsKKwkJY2h1bmtEYXRhID0geWFm ZnNfR2V0VGVtcEJ1ZmZlcihkZXYsIF9fTElORV9fKTsKKworCQlyZXN1bHQgPSB5YWZmc19S ZWFkQ2h1bmtXaXRoVGFnc0Zyb21OQU5EKGRldiwgaW4tPmhkckNodW5rLCBjaHVua0RhdGEs ICZ0YWdzKTsKKwkJb2ggPSAoeWFmZnNfT2JqZWN0SGVhZGVyICopIGNodW5rRGF0YTsKKwor CQlpbi0+eXN0X21vZGUgPSBvaC0+eXN0X21vZGU7CisjaWZkZWYgQ09ORklHX1lBRkZTX1dJ TkNFCisJCWluLT53aW5fYXRpbWVbMF0gPSBvaC0+d2luX2F0aW1lWzBdOworCQlpbi0+d2lu X2N0aW1lWzBdID0gb2gtPndpbl9jdGltZVswXTsKKwkJaW4tPndpbl9tdGltZVswXSA9IG9o LT53aW5fbXRpbWVbMF07CisJCWluLT53aW5fYXRpbWVbMV0gPSBvaC0+d2luX2F0aW1lWzFd OworCQlpbi0+d2luX2N0aW1lWzFdID0gb2gtPndpbl9jdGltZVsxXTsKKwkJaW4tPndpbl9t dGltZVsxXSA9IG9oLT53aW5fbXRpbWVbMV07CisjZWxzZQorCQlpbi0+eXN0X3VpZCA9IG9o LT55c3RfdWlkOworCQlpbi0+eXN0X2dpZCA9IG9oLT55c3RfZ2lkOworCQlpbi0+eXN0X2F0 aW1lID0gb2gtPnlzdF9hdGltZTsKKwkJaW4tPnlzdF9tdGltZSA9IG9oLT55c3RfbXRpbWU7 CisJCWluLT55c3RfY3RpbWUgPSBvaC0+eXN0X2N0aW1lOworCQlpbi0+eXN0X3JkZXYgPSBv aC0+eXN0X3JkZXY7CisKKyNlbmRpZgorCQl5YWZmc19TZXRPYmplY3ROYW1lKGluLCBvaC0+ bmFtZSk7CisKKwkJaWYgKGluLT52YXJpYW50VHlwZSA9PSBZQUZGU19PQkpFQ1RfVFlQRV9T WU1MSU5LKSB7CisJCQlpbi0+dmFyaWFudC5zeW1MaW5rVmFyaWFudC5hbGlhcyA9CisJCQkJ CQkgICAgeWFmZnNfQ2xvbmVTdHJpbmcob2gtPmFsaWFzKTsKKwkJCWlmICghaW4tPnZhcmlh bnQuc3ltTGlua1ZhcmlhbnQuYWxpYXMpCisJCQkJYWxsb2NfZmFpbGVkID0gMTsgLyogTm90 IHJldHVybmVkIHRvIGNhbGxlciAqLworCQl9CisKKwkJeWFmZnNfUmVsZWFzZVRlbXBCdWZm ZXIoZGV2LCBjaHVua0RhdGEsIF9fTElORV9fKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgeWFm ZnNfU2NhbkJhY2t3YXJkcyh5YWZmc19EZXZpY2UgKmRldikKK3sKKwl5YWZmc19FeHRlbmRl ZFRhZ3MgdGFnczsKKwlpbnQgYmxrOworCWludCBibG9ja0l0ZXJhdG9yOworCWludCBzdGFy dEl0ZXJhdG9yOworCWludCBlbmRJdGVyYXRvcjsKKwlpbnQgbkJsb2Nrc1RvU2NhbiA9IDA7 CisKKwlpbnQgY2h1bms7CisJaW50IHJlc3VsdDsKKwlpbnQgYzsKKwlpbnQgZGVsZXRlZDsK Kwl5YWZmc19CbG9ja1N0YXRlIHN0YXRlOworCXlhZmZzX09iamVjdCAqaGFyZExpc3QgPSBO VUxMOworCXlhZmZzX0Jsb2NrSW5mbyAqYmk7CisJX191MzIgc2VxdWVuY2VOdW1iZXI7CisJ eWFmZnNfT2JqZWN0SGVhZGVyICpvaDsKKwl5YWZmc19PYmplY3QgKmluOworCXlhZmZzX09i amVjdCAqcGFyZW50OworCWludCBuQmxvY2tzID0gZGV2LT5pbnRlcm5hbEVuZEJsb2NrIC0g ZGV2LT5pbnRlcm5hbFN0YXJ0QmxvY2sgKyAxOworCWludCBpdHNVbmxpbmtlZDsKKwlfX3U4 ICpjaHVua0RhdGE7CisKKwlpbnQgZmlsZVNpemU7CisJaW50IGlzU2hyaW5rOworCWludCBm b3VuZENodW5rc0luQmxvY2s7CisJaW50IGVxdWl2YWxlbnRPYmplY3RJZDsKKwlpbnQgYWxs b2NfZmFpbGVkID0gMDsKKworCisJeWFmZnNfQmxvY2tJbmRleCAqYmxvY2tJbmRleCA9IE5V TEw7CisJaW50IGFsdEJsb2NrSW5kZXggPSAwOworCisJaWYgKCFkZXYtPmlzWWFmZnMyKSB7 CisJCVQoWUFGRlNfVFJBQ0VfU0NBTiwKKwkJICAoVFNUUigieWFmZnNfU2NhbkJhY2t3YXJk cyBpcyBvbmx5IGZvciBZQUZGUzIhIiBURU5EU1RSKSkpOworCQlyZXR1cm4gWUFGRlNfRkFJ TDsKKwl9CisKKwlUKFlBRkZTX1RSQUNFX1NDQU4sCisJICAoVFNUUgorCSAgICgieWFmZnNf U2NhbkJhY2t3YXJkcyBzdGFydHMgIGludHN0YXJ0YmxrICVkIGludGVuZGJsayAlZC4uLiIK KwkgICAgVEVORFNUUiksIGRldi0+aW50ZXJuYWxTdGFydEJsb2NrLCBkZXYtPmludGVybmFs RW5kQmxvY2spKTsKKworCisJZGV2LT5zZXF1ZW5jZU51bWJlciA9IFlBRkZTX0xPV0VTVF9T RVFVRU5DRV9OVU1CRVI7CisKKwlibG9ja0luZGV4ID0gWU1BTExPQyhuQmxvY2tzICogc2l6 ZW9mKHlhZmZzX0Jsb2NrSW5kZXgpKTsKKworCWlmICghYmxvY2tJbmRleCkgeworCQlibG9j a0luZGV4ID0gWU1BTExPQ19BTFQobkJsb2NrcyAqIHNpemVvZih5YWZmc19CbG9ja0luZGV4 KSk7CisJCWFsdEJsb2NrSW5kZXggPSAxOworCX0KKworCWlmICghYmxvY2tJbmRleCkgewor CQlUKFlBRkZTX1RSQUNFX1NDQU4sCisJCSAgKFRTVFIoInlhZmZzX1NjYW4oKSBjb3VsZCBu b3QgYWxsb2NhdGUgYmxvY2sgaW5kZXghIiBURU5EU1RSKSkpOworCQlyZXR1cm4gWUFGRlNf RkFJTDsKKwl9CisKKwlkZXYtPmJsb2Nrc0luQ2hlY2twb2ludCA9IDA7CisKKwljaHVua0Rh dGEgPSB5YWZmc19HZXRUZW1wQnVmZmVyKGRldiwgX19MSU5FX18pOworCisJLyogU2NhbiBh bGwgdGhlIGJsb2NrcyB0byBkZXRlcm1pbmUgdGhlaXIgc3RhdGUgKi8KKwlmb3IgKGJsayA9 IGRldi0+aW50ZXJuYWxTdGFydEJsb2NrOyBibGsgPD0gZGV2LT5pbnRlcm5hbEVuZEJsb2Nr OyBibGsrKykgeworCQliaSA9IHlhZmZzX0dldEJsb2NrSW5mbyhkZXYsIGJsayk7CisJCXlh ZmZzX0NsZWFyQ2h1bmtCaXRzKGRldiwgYmxrKTsKKwkJYmktPnBhZ2VzSW5Vc2UgPSAwOwor CQliaS0+c29mdERlbGV0aW9ucyA9IDA7CisKKwkJeWFmZnNfUXVlcnlJbml0aWFsQmxvY2tT dGF0ZShkZXYsIGJsaywgJnN0YXRlLCAmc2VxdWVuY2VOdW1iZXIpOworCisJCWJpLT5ibG9j a1N0YXRlID0gc3RhdGU7CisJCWJpLT5zZXF1ZW5jZU51bWJlciA9IHNlcXVlbmNlTnVtYmVy OworCisJCWlmIChiaS0+c2VxdWVuY2VOdW1iZXIgPT0gWUFGRlNfU0VRVUVOQ0VfQ0hFQ0tQ T0lOVF9EQVRBKQorCQkJYmktPmJsb2NrU3RhdGUgPSBzdGF0ZSA9IFlBRkZTX0JMT0NLX1NU QVRFX0NIRUNLUE9JTlQ7CisJCWlmIChiaS0+c2VxdWVuY2VOdW1iZXIgPT0gWUFGRlNfU0VR VUVOQ0VfQkFEX0JMT0NLKQorCQkJYmktPmJsb2NrU3RhdGUgPSBzdGF0ZSA9IFlBRkZTX0JM T0NLX1NUQVRFX0RFQUQ7CisKKwkJVChZQUZGU19UUkFDRV9TQ0FOX0RFQlVHLAorCQkgIChU U1RSKCJCbG9jayBzY2FubmluZyBibG9jayAlZCBzdGF0ZSAlZCBzZXEgJWQiIFRFTkRTVFIp LCBibGssCisJCSAgIHN0YXRlLCBzZXF1ZW5jZU51bWJlcikpOworCisKKwkJaWYgKHN0YXRl ID09IFlBRkZTX0JMT0NLX1NUQVRFX0NIRUNLUE9JTlQpIHsKKwkJCWRldi0+YmxvY2tzSW5D aGVja3BvaW50Kys7CisKKwkJfSBlbHNlIGlmIChzdGF0ZSA9PSBZQUZGU19CTE9DS19TVEFU RV9ERUFEKSB7CisJCQlUKFlBRkZTX1RSQUNFX0JBRF9CTE9DS1MsCisJCQkgIChUU1RSKCJi bG9jayAlZCBpcyBiYWQiIFRFTkRTVFIpLCBibGspKTsKKwkJfSBlbHNlIGlmIChzdGF0ZSA9 PSBZQUZGU19CTE9DS19TVEFURV9FTVBUWSkgeworCQkJVChZQUZGU19UUkFDRV9TQ0FOX0RF QlVHLAorCQkJICAoVFNUUigiQmxvY2sgZW1wdHkgIiBURU5EU1RSKSkpOworCQkJZGV2LT5u RXJhc2VkQmxvY2tzKys7CisJCQlkZXYtPm5GcmVlQ2h1bmtzICs9IGRldi0+bkNodW5rc1Bl ckJsb2NrOworCQl9IGVsc2UgaWYgKHN0YXRlID09IFlBRkZTX0JMT0NLX1NUQVRFX05FRURT X1NDQU5OSU5HKSB7CisKKwkJCS8qIERldGVybWluZSB0aGUgaGlnaGVzdCBzZXF1ZW5jZSBu dW1iZXIgKi8KKwkJCWlmIChzZXF1ZW5jZU51bWJlciA+PSBZQUZGU19MT1dFU1RfU0VRVUVO Q0VfTlVNQkVSICYmCisJCQkgICAgc2VxdWVuY2VOdW1iZXIgPCBZQUZGU19ISUdIRVNUX1NF UVVFTkNFX05VTUJFUikgeworCisJCQkJYmxvY2tJbmRleFtuQmxvY2tzVG9TY2FuXS5zZXEg PSBzZXF1ZW5jZU51bWJlcjsKKwkJCQlibG9ja0luZGV4W25CbG9ja3NUb1NjYW5dLmJsb2Nr ID0gYmxrOworCisJCQkJbkJsb2Nrc1RvU2NhbisrOworCisJCQkJaWYgKHNlcXVlbmNlTnVt YmVyID49IGRldi0+c2VxdWVuY2VOdW1iZXIpCisJCQkJCWRldi0+c2VxdWVuY2VOdW1iZXIg PSBzZXF1ZW5jZU51bWJlcjsKKwkJCX0gZWxzZSB7CisJCQkJLyogVE9ETzogTmFzdHkgc2Vx dWVuY2UgbnVtYmVyISAqLworCQkJCVQoWUFGRlNfVFJBQ0VfU0NBTiwKKwkJCQkgIChUU1RS CisJCQkJICAgKCJCbG9jayBzY2FubmluZyBibG9jayAlZCBoYXMgYmFkIHNlcXVlbmNlIG51 bWJlciAlZCIKKwkJCQkgICAgVEVORFNUUiksIGJsaywgc2VxdWVuY2VOdW1iZXIpKTsKKwor CQkJfQorCQl9CisJfQorCisJVChZQUZGU19UUkFDRV9TQ0FOLAorCShUU1RSKCIlZCBibG9j a3MgdG8gYmUgc29ydGVkLi4uIiBURU5EU1RSKSwgbkJsb2Nrc1RvU2NhbikpOworCisKKwor CVlZSUVMRCgpOworCisJLyogU29ydCB0aGUgYmxvY2tzICovCisjaWZuZGVmIENPTkZJR19Z QUZGU19VU0VfT1dOX1NPUlQKKwl7CisJCS8qIFVzZSBxc29ydCBub3cuICovCisJCXlhZmZz X3Fzb3J0KGJsb2NrSW5kZXgsIG5CbG9ja3NUb1NjYW4sIHNpemVvZih5YWZmc19CbG9ja0lu ZGV4KSwgeWJpY21wKTsKKwl9CisjZWxzZQorCXsKKwkJLyogRHVuZ3kgb2xkIGJ1YmJsZSBz b3J0Li4uICovCisKKwkJeWFmZnNfQmxvY2tJbmRleCB0ZW1wOworCQlpbnQgaTsKKwkJaW50 IGo7CisKKwkJZm9yIChpID0gMDsgaSA8IG5CbG9ja3NUb1NjYW47IGkrKykKKwkJCWZvciAo aiA9IGkgKyAxOyBqIDwgbkJsb2Nrc1RvU2NhbjsgaisrKQorCQkJCWlmIChibG9ja0luZGV4 W2ldLnNlcSA+IGJsb2NrSW5kZXhbal0uc2VxKSB7CisJCQkJCXRlbXAgPSBibG9ja0luZGV4 W2pdOworCQkJCQlibG9ja0luZGV4W2pdID0gYmxvY2tJbmRleFtpXTsKKwkJCQkJYmxvY2tJ bmRleFtpXSA9IHRlbXA7CisJCQkJfQorCX0KKyNlbmRpZgorCisJWVlJRUxEKCk7CisKKwlU KFlBRkZTX1RSQUNFX1NDQU4sIChUU1RSKCIuLi5kb25lIiBURU5EU1RSKSkpOworCisJLyog Tm93IHNjYW4gdGhlIGJsb2NrcyBsb29raW5nIGF0IHRoZSBkYXRhLiAqLworCXN0YXJ0SXRl cmF0b3IgPSAwOworCWVuZEl0ZXJhdG9yID0gbkJsb2Nrc1RvU2NhbiAtIDE7CisJVChZQUZG U19UUkFDRV9TQ0FOX0RFQlVHLAorCSAgKFRTVFIoIiVkIGJsb2NrcyB0byBiZSBzY2FubmVk IiBURU5EU1RSKSwgbkJsb2Nrc1RvU2NhbikpOworCisJLyogRm9yIGVhY2ggYmxvY2suLi4u IGJhY2t3YXJkcyAqLworCWZvciAoYmxvY2tJdGVyYXRvciA9IGVuZEl0ZXJhdG9yOyAhYWxs b2NfZmFpbGVkICYmIGJsb2NrSXRlcmF0b3IgPj0gc3RhcnRJdGVyYXRvcjsKKwkJCWJsb2Nr SXRlcmF0b3ItLSkgeworCQkvKiBDb29wZXJhdGl2ZSBtdWx0aXRhc2tpbmchIFRoaXMgbG9v cCBjYW4gcnVuIGZvciBzbworCQkgICBsb25nIHRoYXQgd2F0Y2hkb2cgdGltZXJzIGV4cGly ZS4gKi8KKwkJWVlJRUxEKCk7CisKKwkJLyogZ2V0IHRoZSBibG9jayB0byBzY2FuIGluIHRo ZSBjb3JyZWN0IG9yZGVyICovCisJCWJsayA9IGJsb2NrSW5kZXhbYmxvY2tJdGVyYXRvcl0u YmxvY2s7CisKKwkJYmkgPSB5YWZmc19HZXRCbG9ja0luZm8oZGV2LCBibGspOworCisKKwkJ c3RhdGUgPSBiaS0+YmxvY2tTdGF0ZTsKKworCQlkZWxldGVkID0gMDsKKworCQkvKiBGb3Ig ZWFjaCBjaHVuayBpbiBlYWNoIGJsb2NrIHRoYXQgbmVlZHMgc2Nhbm5pbmcuLi4uICovCisJ CWZvdW5kQ2h1bmtzSW5CbG9jayA9IDA7CisJCWZvciAoYyA9IGRldi0+bkNodW5rc1BlckJs b2NrIC0gMTsKKwkJICAgICAhYWxsb2NfZmFpbGVkICYmIGMgPj0gMCAmJgorCQkgICAgIChz dGF0ZSA9PSBZQUZGU19CTE9DS19TVEFURV9ORUVEU19TQ0FOTklORyB8fAorCQkgICAgICBz dGF0ZSA9PSBZQUZGU19CTE9DS19TVEFURV9BTExPQ0FUSU5HKTsgYy0tKSB7CisJCQkvKiBT Y2FuIGJhY2t3YXJkcy4uLgorCQkJICogUmVhZCB0aGUgdGFncyBhbmQgZGVjaWRlIHdoYXQg dG8gZG8KKwkJCSAqLworCisJCQljaHVuayA9IGJsayAqIGRldi0+bkNodW5rc1BlckJsb2Nr ICsgYzsKKworCQkJcmVzdWx0ID0geWFmZnNfUmVhZENodW5rV2l0aFRhZ3NGcm9tTkFORChk ZXYsIGNodW5rLCBOVUxMLAorCQkJCQkJCSZ0YWdzKTsKKworCQkJLyogTGV0J3MgaGF2ZSBh IGdvb2QgbG9vayBhdCB0aGlzIGNodW5rLi4uICovCisKKwkJCWlmICghdGFncy5jaHVua1Vz ZWQpIHsKKwkJCQkvKiBBbiB1bmFzc2lnbmVkIGNodW5rIGluIHRoZSBibG9jay4KKwkJCQkg KiBJZiB0aGVyZSBhcmUgdXNlZCBjaHVua3MgYWZ0ZXIgdGhpcyBvbmUsIHRoZW4KKwkJCQkg KiBpdCBpcyBhIGNodW5rIHRoYXQgd2FzIHNraXBwZWQgZHVlIHRvIGZhaWxpbmcgdGhlIGVy YXNlZAorCQkJCSAqIGNoZWNrLiBKdXN0IHNraXAgaXQgc28gdGhhdCBpdCBjYW4gYmUgZGVs ZXRlZC4KKwkJCQkgKiBCdXQsIG1vcmUgdHlwaWNhbGx5LCBXZSBnZXQgaGVyZSB3aGVuIHRo aXMgaXMgYW4gdW5hbGxvY2F0ZWQKKwkJCQkgKiBjaHVuayBhbmQgaGlzIG1lYW5zIHRoYXQg ZWl0aGVyIHRoZSBibG9jayBpcyBlbXB0eSBvcgorCQkJCSAqIHRoaXMgaXMgdGhlIG9uZSBi ZWluZyBhbGxvY2F0ZWQgZnJvbQorCQkJCSAqLworCisJCQkJaWYgKGZvdW5kQ2h1bmtzSW5C bG9jaykgeworCQkJCQkvKiBUaGlzIGlzIGEgY2h1bmsgdGhhdCB3YXMgc2tpcHBlZCBkdWUg dG8gZmFpbGluZyB0aGUgZXJhc2VkIGNoZWNrICovCisJCQkJfSBlbHNlIGlmIChjID09IDAp IHsKKwkJCQkJLyogV2UncmUgbG9va2luZyBhdCB0aGUgZmlyc3QgY2h1bmsgaW4gdGhlIGJs b2NrIHNvIHRoZSBibG9jayBpcyB1bnVzZWQgKi8KKwkJCQkJc3RhdGUgPSBZQUZGU19CTE9D S19TVEFURV9FTVBUWTsKKwkJCQkJZGV2LT5uRXJhc2VkQmxvY2tzKys7CisJCQkJfSBlbHNl IHsKKwkJCQkJaWYgKHN0YXRlID09IFlBRkZTX0JMT0NLX1NUQVRFX05FRURTX1NDQU5OSU5H IHx8CisJCQkJCSAgICBzdGF0ZSA9PSBZQUZGU19CTE9DS19TVEFURV9BTExPQ0FUSU5HKSB7 CisJCQkJCQlpZiAoZGV2LT5zZXF1ZW5jZU51bWJlciA9PSBiaS0+c2VxdWVuY2VOdW1iZXIp IHsKKwkJCQkJCQkvKiB0aGlzIGlzIHRoZSBibG9jayBiZWluZyBhbGxvY2F0ZWQgZnJvbSAq LworCisJCQkJCQkJVChZQUZGU19UUkFDRV9TQ0FOLAorCQkJCQkJCSAgKFRTVFIKKwkJCQkJ CQkgICAoIiBBbGxvY2F0aW5nIGZyb20gJWQgJWQiCisJCQkJCQkJICAgIFRFTkRTVFIpLCBi bGssIGMpKTsKKworCQkJCQkJCXN0YXRlID0gWUFGRlNfQkxPQ0tfU1RBVEVfQUxMT0NBVElO RzsKKwkJCQkJCQlkZXYtPmFsbG9jYXRpb25CbG9jayA9IGJsazsKKwkJCQkJCQlkZXYtPmFs bG9jYXRpb25QYWdlID0gYzsKKwkJCQkJCQlkZXYtPmFsbG9jYXRpb25CbG9ja0ZpbmRlciA9 IGJsazsKKwkJCQkJCX0gZWxzZSB7CisJCQkJCQkJLyogVGhpcyBpcyBhIHBhcnRpYWxseSB3 cml0dGVuIGJsb2NrIHRoYXQgaXMgbm90CisJCQkJCQkJICogdGhlIGN1cnJlbnQgYWxsb2Nh dGlvbiBibG9jay4gVGhpcyBibG9jayBtdXN0IGhhdmUKKwkJCQkJCQkgKiBoYWQgYSB3cml0 ZSBmYWlsdXJlLCBzbyBzZXQgdXAgZm9yIHJldGlyZW1lbnQuCisJCQkJCQkJICovCisKKwkJ CQkJCQkgLyogYmktPm5lZWRzUmV0aXJpbmcgPSAxOyA/Pz8gVE9ETyAqLworCQkJCQkJCSBi aS0+Z2NQcmlvcml0aXNlID0gMTsKKworCQkJCQkJCSBUKFlBRkZTX1RSQUNFX0FMV0FZUywK KwkJCQkJCQkgKFRTVFIoIlBhcnRpYWxseSB3cml0dGVuIGJsb2NrICVkIGRldGVjdGVkIiBU RU5EU1RSKSwKKwkJCQkJCQkgYmxrKSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisKKwkJ CQlkZXYtPm5GcmVlQ2h1bmtzKys7CisKKwkJCX0gZWxzZSBpZiAodGFncy5lY2NSZXN1bHQg PT0gWUFGRlNfRUNDX1JFU1VMVF9VTkZJWEVEKSB7CisJCQkJVChZQUZGU19UUkFDRV9TQ0FO LAorCQkJCSAgKFRTVFIoIiBVbmZpeGVkIEVDQyBpbiBjaHVuayglZDolZCksIGNodW5rIGln bm9yZWQiVEVORFNUUiksCisJCQkJICBibGssIGMpKTsKKworCQkJCSAgZGV2LT5uRnJlZUNo dW5rcysrOworCisJCQl9IGVsc2UgaWYgKHRhZ3MuY2h1bmtJZCA+IDApIHsKKwkJCQkvKiBj aHVua0lkID4gMCBzbyBpdCBpcyBhIGRhdGEgY2h1bmsuLi4gKi8KKwkJCQl1bnNpZ25lZCBp bnQgZW5kcG9zOworCQkJCV9fdTMyIGNodW5rQmFzZSA9CisJCQkJICAgICh0YWdzLmNodW5r SWQgLSAxKSAqIGRldi0+bkRhdGFCeXRlc1BlckNodW5rOworCisJCQkJZm91bmRDaHVua3NJ bkJsb2NrID0gMTsKKworCisJCQkJeWFmZnNfU2V0Q2h1bmtCaXQoZGV2LCBibGssIGMpOwor CQkJCWJpLT5wYWdlc0luVXNlKys7CisKKwkJCQlpbiA9IHlhZmZzX0ZpbmRPckNyZWF0ZU9i amVjdEJ5TnVtYmVyKGRldiwKKwkJCQkJCQkJICAgICAgdGFncy4KKwkJCQkJCQkJICAgICAg b2JqZWN0SWQsCisJCQkJCQkJCSAgICAgIFlBRkZTX09CSkVDVF9UWVBFX0ZJTEUpOworCQkJ CWlmICghaW4pIHsKKwkJCQkJLyogT3V0IG9mIG1lbW9yeSAqLworCQkJCQlhbGxvY19mYWls ZWQgPSAxOworCQkJCX0KKworCQkJCWlmIChpbiAmJgorCQkJCSAgICBpbi0+dmFyaWFudFR5 cGUgPT0gWUFGRlNfT0JKRUNUX1RZUEVfRklMRQorCQkJCSAgICAmJiBjaHVua0Jhc2UgPAor CQkJCSAgICBpbi0+dmFyaWFudC5maWxlVmFyaWFudC5zaHJpbmtTaXplKSB7CisJCQkJCS8q IFRoaXMgaGFzIG5vdCBiZWVuIGludmFsaWRhdGVkIGJ5IGEgcmVzaXplICovCisJCQkJCWlm ICgheWFmZnNfUHV0Q2h1bmtJbnRvRmlsZShpbiwgdGFncy5jaHVua0lkLAorCQkJCQkJCSAg ICAgICBjaHVuaywgLTEpKSB7CisJCQkJCQlhbGxvY19mYWlsZWQgPSAxOworCQkJCQl9CisK KwkJCQkJLyogRmlsZSBzaXplIGlzIGNhbGN1bGF0ZWQgYnkgbG9va2luZyBhdCB0aGUgZGF0 YSBjaHVua3MgaWYgd2UgaGF2ZSBub3QKKwkJCQkJICogc2VlbiBhbiBvYmplY3QgaGVhZGVy IHlldC4gU3RvcCB0aGlzIHByYWN0aWNlIG9uY2Ugd2UgZmluZCBhbiBvYmplY3QgaGVhZGVy LgorCQkJCQkgKi8KKwkJCQkJZW5kcG9zID0KKwkJCQkJICAgICh0YWdzLmNodW5rSWQgLQor CQkJCQkgICAgIDEpICogZGV2LT5uRGF0YUJ5dGVzUGVyQ2h1bmsgKworCQkJCQkgICAgdGFn cy5ieXRlQ291bnQ7CisKKwkJCQkJaWYgKCFpbi0+dmFsaWQgJiYJLyogaGF2ZSBub3QgZ290 IGFuIG9iamVjdCBoZWFkZXIgeWV0ICovCisJCQkJCSAgICBpbi0+dmFyaWFudC5maWxlVmFy aWFudC4KKwkJCQkJICAgIHNjYW5uZWRGaWxlU2l6ZSA8IGVuZHBvcykgeworCQkJCQkJaW4t PnZhcmlhbnQuZmlsZVZhcmlhbnQuCisJCQkJCQkgICAgc2Nhbm5lZEZpbGVTaXplID0gZW5k cG9zOworCQkJCQkJaW4tPnZhcmlhbnQuZmlsZVZhcmlhbnQuCisJCQkJCQkgICAgZmlsZVNp emUgPQorCQkJCQkJICAgIGluLT52YXJpYW50LmZpbGVWYXJpYW50LgorCQkJCQkJICAgIHNj YW5uZWRGaWxlU2l6ZTsKKwkJCQkJfQorCisJCQkJfSBlbHNlIGlmIChpbikgeworCQkJCQkv KiBUaGlzIGNodW5rIGhhcyBiZWVuIGludmFsaWRhdGVkIGJ5IGEgcmVzaXplLCBzbyBkZWxl dGUgKi8KKwkJCQkJeWFmZnNfRGVsZXRlQ2h1bmsoZGV2LCBjaHVuaywgMSwgX19MSU5FX18p OworCisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQkvKiBjaHVua0lkID09IDAsIHNvIGl0IGlz IGFuIE9iamVjdEhlYWRlci4KKwkJCQkgKiBUaHVzLCB3ZSByZWFkIGluIHRoZSBvYmplY3Qg aGVhZGVyIGFuZCBtYWtlIHRoZSBvYmplY3QKKwkJCQkgKi8KKwkJCQlmb3VuZENodW5rc0lu QmxvY2sgPSAxOworCisJCQkJeWFmZnNfU2V0Q2h1bmtCaXQoZGV2LCBibGssIGMpOworCQkJ CWJpLT5wYWdlc0luVXNlKys7CisKKwkJCQlvaCA9IE5VTEw7CisJCQkJaW4gPSBOVUxMOwor CisJCQkJaWYgKHRhZ3MuZXh0cmFIZWFkZXJJbmZvQXZhaWxhYmxlKSB7CisJCQkJCWluID0g eWFmZnNfRmluZE9yQ3JlYXRlT2JqZWN0QnlOdW1iZXIKKwkJCQkJICAgIChkZXYsIHRhZ3Mu b2JqZWN0SWQsCisJCQkJCSAgICAgdGFncy5leHRyYU9iamVjdFR5cGUpOworCQkJCQlpZiAo IWluKQorCQkJCQkJYWxsb2NfZmFpbGVkID0gMTsKKwkJCQl9CisKKwkJCQlpZiAoIWluIHx8 CisjaWZkZWYgQ09ORklHX1lBRkZTX0RJU0FCTEVfTEFaWV9MT0FECisJCQkJICAgICFpbi0+ dmFsaWQgfHwKKyNlbmRpZgorCQkJCSAgICB0YWdzLmV4dHJhU2hhZG93cyB8fAorCQkJCSAg ICAoIWluLT52YWxpZCAmJgorCQkJCSAgICAodGFncy5vYmplY3RJZCA9PSBZQUZGU19PQkpF Q1RJRF9ST09UIHx8CisJCQkJICAgICB0YWdzLm9iamVjdElkID09IFlBRkZTX09CSkVDVElE X0xPU1RORk9VTkQpKSkgeworCisJCQkJCS8qIElmIHdlIGRvbid0IGhhdmUgIHZhbGlkIGlu Zm8gdGhlbiB3ZSBuZWVkIHRvIHJlYWQgdGhlIGNodW5rCisJCQkJCSAqIFRPRE8gSW4gZnV0 dXJlIHdlIGNhbiBwcm9iYWJseSBkZWZlciByZWFkaW5nIHRoZSBjaHVuayBhbmQKKwkJCQkJ ICogbGl2aW5nIHdpdGggaW52YWxpZCBkYXRhIHVudGlsIG5lZWRlZC4KKwkJCQkJICovCisK KwkJCQkJcmVzdWx0ID0geWFmZnNfUmVhZENodW5rV2l0aFRhZ3NGcm9tTkFORChkZXYsCisJ CQkJCQkJCQljaHVuaywKKwkJCQkJCQkJCWNodW5rRGF0YSwKKwkJCQkJCQkJCU5VTEwpOwor CisJCQkJCW9oID0gKHlhZmZzX09iamVjdEhlYWRlciAqKSBjaHVua0RhdGE7CisKKwkJCQkJ aWYgKGRldi0+aW5iYW5kVGFncykgeworCQkJCQkJLyogRml4IHVwIHRoZSBoZWFkZXIgaWYg dGhleSBnb3QgY29ycnVwdGVkIGJ5IGluYmFuZCB0YWdzICovCisJCQkJCQlvaC0+c2hhZG93 c09iamVjdCA9IG9oLT5pbmJhbmRTaGFkb3dzT2JqZWN0OworCQkJCQkJb2gtPmlzU2hyaW5r ID0gb2gtPmluYmFuZElzU2hyaW5rOworCQkJCQl9CisKKwkJCQkJaWYgKCFpbikgeworCQkJ CQkJaW4gPSB5YWZmc19GaW5kT3JDcmVhdGVPYmplY3RCeU51bWJlcihkZXYsIHRhZ3Mub2Jq ZWN0SWQsIG9oLT50eXBlKTsKKwkJCQkJCWlmICghaW4pCisJCQkJCQkJYWxsb2NfZmFpbGVk ID0gMTsKKwkJCQkJfQorCisJCQkJfQorCisJCQkJaWYgKCFpbikgeworCQkJCQkvKiBUT0RP IEhvb3N0ZXJtYW4gd2UgaGF2ZSBhIHByb2JsZW0hICovCisJCQkJCVQoWUFGRlNfVFJBQ0Vf RVJST1IsCisJCQkJCSAgKFRTVFIKKwkJCQkJICAgKCJ5YWZmcyB0cmFnZWR5OiBDb3VsZCBu b3QgbWFrZSBvYmplY3QgZm9yIG9iamVjdCAgJWQgYXQgY2h1bmsgJWQgZHVyaW5nIHNjYW4i CisJCQkJCSAgICBURU5EU1RSKSwgdGFncy5vYmplY3RJZCwgY2h1bmspKTsKKwkJCQkJY29u dGludWU7CisJCQkJfQorCisJCQkJaWYgKGluLT52YWxpZCkgeworCQkJCQkvKiBXZSBoYXZl IGFscmVhZHkgZmlsbGVkIHRoaXMgb25lLgorCQkJCQkgKiBXZSBoYXZlIGEgZHVwbGljYXRl IHRoYXQgd2lsbCBiZSBkaXNjYXJkZWQsIGJ1dAorCQkJCQkgKiB3ZSBmaXJzdCBoYXZlIHRv IHN1Y2sgb3V0IHJlc2l6ZSBpbmZvIGlmIGl0IGlzIGEgZmlsZS4KKwkJCQkJICovCisKKwkJ CQkJaWYgKChpbi0+dmFyaWFudFR5cGUgPT0gWUFGRlNfT0JKRUNUX1RZUEVfRklMRSkgJiYK KwkJCQkJICAgICAoKG9oICYmCisJCQkJCSAgICAgICBvaC0+dHlwZSA9PSBZQUZGU19PQkpF Q1RfVFlQRV9GSUxFKSB8fAorCQkJCQkgICAgICAodGFncy5leHRyYUhlYWRlckluZm9BdmFp bGFibGUgICYmCisJCQkJCSAgICAgICB0YWdzLmV4dHJhT2JqZWN0VHlwZSA9PSBZQUZGU19P QkpFQ1RfVFlQRV9GSUxFKSkpIHsKKwkJCQkJCV9fdTMyIHRoaXNTaXplID0KKwkJCQkJCSAg ICAob2gpID8gb2gtPmZpbGVTaXplIDogdGFncy4KKwkJCQkJCSAgICBleHRyYUZpbGVMZW5n dGg7CisJCQkJCQlfX3UzMiBwYXJlbnRPYmplY3RJZCA9CisJCQkJCQkgICAgKG9oKSA/IG9o LT4KKwkJCQkJCSAgICBwYXJlbnRPYmplY3RJZCA6IHRhZ3MuCisJCQkJCQkgICAgZXh0cmFQ YXJlbnRPYmplY3RJZDsKKworCisJCQkJCQlpc1NocmluayA9CisJCQkJCQkgICAgKG9oKSA/ IG9oLT5pc1NocmluayA6IHRhZ3MuCisJCQkJCQkgICAgZXh0cmFJc1Nocmlua0hlYWRlcjsK KworCQkJCQkJLyogSWYgaXQgaXMgZGVsZXRlZCAodW5saW5rZWQgYXQgc3RhcnQgYWxzbyBt ZWFucyBkZWxldGVkKQorCQkJCQkJICogd2UgdHJlYXQgdGhlIGZpbGUgc2l6ZSBhcyBiZWlu ZyB6ZXJvZWQgYXQgdGhpcyBwb2ludC4KKwkJCQkJCSAqLworCQkJCQkJaWYgKHBhcmVudE9i amVjdElkID09CisJCQkJCQkgICAgWUFGRlNfT0JKRUNUSURfREVMRVRFRAorCQkJCQkJICAg IHx8IHBhcmVudE9iamVjdElkID09CisJCQkJCQkgICAgWUFGRlNfT0JKRUNUSURfVU5MSU5L RUQpIHsKKwkJCQkJCQl0aGlzU2l6ZSA9IDA7CisJCQkJCQkJaXNTaHJpbmsgPSAxOworCQkJ CQkJfQorCisJCQkJCQlpZiAoaXNTaHJpbmsgJiYKKwkJCQkJCSAgICBpbi0+dmFyaWFudC5m aWxlVmFyaWFudC4KKwkJCQkJCSAgICBzaHJpbmtTaXplID4gdGhpc1NpemUpIHsKKwkJCQkJ CQlpbi0+dmFyaWFudC5maWxlVmFyaWFudC4KKwkJCQkJCQkgICAgc2hyaW5rU2l6ZSA9CisJ CQkJCQkJICAgIHRoaXNTaXplOworCQkJCQkJfQorCisJCQkJCQlpZiAoaXNTaHJpbmspCisJ CQkJCQkJYmktPmhhc1Nocmlua0hlYWRlciA9IDE7CisKKwkJCQkJfQorCQkJCQkvKiBVc2Ug ZXhpc3RpbmcgLSBkZXN0cm95IHRoaXMgb25lLiAqLworCQkJCQl5YWZmc19EZWxldGVDaHVu ayhkZXYsIGNodW5rLCAxLCBfX0xJTkVfXyk7CisKKwkJCQl9CisKKwkJCQlpZiAoIWluLT52 YWxpZCAmJiBpbi0+dmFyaWFudFR5cGUgIT0KKwkJCQkgICAgKG9oID8gb2gtPnR5cGUgOiB0 YWdzLmV4dHJhT2JqZWN0VHlwZSkpCisJCQkJCVQoWUFGRlNfVFJBQ0VfRVJST1IsICgKKwkJ CQkJCVRTVFIoInlhZmZzIHRyYWdlZHk6IEJhZCBvYmplY3QgdHlwZSwgIgorCQkJCQkgICAg VENPTlQoIiVkICE9ICVkLCBmb3Igb2JqZWN0ICVkIGF0IGNodW5rICIpCisJCQkJCSAgICBU Q09OVCgiJWQgZHVyaW5nIHNjYW4iKQorCQkJCQkJVEVORFNUUiksIG9oID8KKwkJCQkJICAg IG9oLT50eXBlIDogdGFncy5leHRyYU9iamVjdFR5cGUsCisJCQkJCSAgICBpbi0+dmFyaWFu dFR5cGUsIHRhZ3Mub2JqZWN0SWQsCisJCQkJCSAgICBjaHVuaykpOworCisJCQkJaWYgKCFp bi0+dmFsaWQgJiYKKwkJCQkgICAgKHRhZ3Mub2JqZWN0SWQgPT0gWUFGRlNfT0JKRUNUSURf Uk9PVCB8fAorCQkJCSAgICAgdGFncy5vYmplY3RJZCA9PQorCQkJCSAgICAgWUFGRlNfT0JK RUNUSURfTE9TVE5GT1VORCkpIHsKKwkJCQkJLyogV2Ugb25seSBsb2FkIHNvbWUgaW5mbywg ZG9uJ3QgZmlkZGxlIHdpdGggZGlyZWN0b3J5IHN0cnVjdHVyZSAqLworCQkJCQlpbi0+dmFs aWQgPSAxOworCisJCQkJCWlmIChvaCkgeworCQkJCQkJaW4tPnZhcmlhbnRUeXBlID0gb2gt PnR5cGU7CisKKwkJCQkJCWluLT55c3RfbW9kZSA9IG9oLT55c3RfbW9kZTsKKyNpZmRlZiBD T05GSUdfWUFGRlNfV0lOQ0UKKwkJCQkJCWluLT53aW5fYXRpbWVbMF0gPSBvaC0+d2luX2F0 aW1lWzBdOworCQkJCQkJaW4tPndpbl9jdGltZVswXSA9IG9oLT53aW5fY3RpbWVbMF07CisJ CQkJCQlpbi0+d2luX210aW1lWzBdID0gb2gtPndpbl9tdGltZVswXTsKKwkJCQkJCWluLT53 aW5fYXRpbWVbMV0gPSBvaC0+d2luX2F0aW1lWzFdOworCQkJCQkJaW4tPndpbl9jdGltZVsx XSA9IG9oLT53aW5fY3RpbWVbMV07CisJCQkJCQlpbi0+d2luX210aW1lWzFdID0gb2gtPndp bl9tdGltZVsxXTsKKyNlbHNlCisJCQkJCQlpbi0+eXN0X3VpZCA9IG9oLT55c3RfdWlkOwor CQkJCQkJaW4tPnlzdF9naWQgPSBvaC0+eXN0X2dpZDsKKwkJCQkJCWluLT55c3RfYXRpbWUg PSBvaC0+eXN0X2F0aW1lOworCQkJCQkJaW4tPnlzdF9tdGltZSA9IG9oLT55c3RfbXRpbWU7 CisJCQkJCQlpbi0+eXN0X2N0aW1lID0gb2gtPnlzdF9jdGltZTsKKwkJCQkJCWluLT55c3Rf cmRldiA9IG9oLT55c3RfcmRldjsKKworI2VuZGlmCisJCQkJCX0gZWxzZSB7CisJCQkJCQlp bi0+dmFyaWFudFR5cGUgPSB0YWdzLmV4dHJhT2JqZWN0VHlwZTsKKwkJCQkJCWluLT5sYXp5 TG9hZGVkID0gMTsKKwkJCQkJfQorCisJCQkJCWluLT5oZHJDaHVuayA9IGNodW5rOworCisJ CQkJfSBlbHNlIGlmICghaW4tPnZhbGlkKSB7CisJCQkJCS8qIHdlIG5lZWQgdG8gbG9hZCB0 aGlzIGluZm8gKi8KKworCQkJCQlpbi0+dmFsaWQgPSAxOworCQkJCQlpbi0+aGRyQ2h1bmsg PSBjaHVuazsKKworCQkJCQlpZiAob2gpIHsKKwkJCQkJCWluLT52YXJpYW50VHlwZSA9IG9o LT50eXBlOworCisJCQkJCQlpbi0+eXN0X21vZGUgPSBvaC0+eXN0X21vZGU7CisjaWZkZWYg Q09ORklHX1lBRkZTX1dJTkNFCisJCQkJCQlpbi0+d2luX2F0aW1lWzBdID0gb2gtPndpbl9h dGltZVswXTsKKwkJCQkJCWluLT53aW5fY3RpbWVbMF0gPSBvaC0+d2luX2N0aW1lWzBdOwor CQkJCQkJaW4tPndpbl9tdGltZVswXSA9IG9oLT53aW5fbXRpbWVbMF07CisJCQkJCQlpbi0+ d2luX2F0aW1lWzFdID0gb2gtPndpbl9hdGltZVsxXTsKKwkJCQkJCWluLT53aW5fY3RpbWVb MV0gPSBvaC0+d2luX2N0aW1lWzFdOworCQkJCQkJaW4tPndpbl9tdGltZVsxXSA9IG9oLT53 aW5fbXRpbWVbMV07CisjZWxzZQorCQkJCQkJaW4tPnlzdF91aWQgPSBvaC0+eXN0X3VpZDsK KwkJCQkJCWluLT55c3RfZ2lkID0gb2gtPnlzdF9naWQ7CisJCQkJCQlpbi0+eXN0X2F0aW1l ID0gb2gtPnlzdF9hdGltZTsKKwkJCQkJCWluLT55c3RfbXRpbWUgPSBvaC0+eXN0X210aW1l OworCQkJCQkJaW4tPnlzdF9jdGltZSA9IG9oLT55c3RfY3RpbWU7CisJCQkJCQlpbi0+eXN0 X3JkZXYgPSBvaC0+eXN0X3JkZXY7CisjZW5kaWYKKworCQkJCQkJaWYgKG9oLT5zaGFkb3dz T2JqZWN0ID4gMCkKKwkJCQkJCQl5YWZmc19IYW5kbGVTaGFkb3dlZE9iamVjdChkZXYsCisJ CQkJCQkJCQkgICBvaC0+CisJCQkJCQkJCQkgICBzaGFkb3dzT2JqZWN0LAorCQkJCQkJCQkJ ICAgMSk7CisKKworCQkJCQkJeWFmZnNfU2V0T2JqZWN0TmFtZShpbiwgb2gtPm5hbWUpOwor CQkJCQkJcGFyZW50ID0KKwkJCQkJCSAgICB5YWZmc19GaW5kT3JDcmVhdGVPYmplY3RCeU51 bWJlcgorCQkJCQkJCShkZXYsIG9oLT5wYXJlbnRPYmplY3RJZCwKKwkJCQkJCQkgWUFGRlNf T0JKRUNUX1RZUEVfRElSRUNUT1JZKTsKKworCQkJCQkJIGZpbGVTaXplID0gb2gtPmZpbGVT aXplOworCQkJCQkJIGlzU2hyaW5rID0gb2gtPmlzU2hyaW5rOworCQkJCQkJIGVxdWl2YWxl bnRPYmplY3RJZCA9IG9oLT5lcXVpdmFsZW50T2JqZWN0SWQ7CisKKwkJCQkJfSBlbHNlIHsK KwkJCQkJCWluLT52YXJpYW50VHlwZSA9IHRhZ3MuZXh0cmFPYmplY3RUeXBlOworCQkJCQkJ cGFyZW50ID0KKwkJCQkJCSAgICB5YWZmc19GaW5kT3JDcmVhdGVPYmplY3RCeU51bWJlcgor CQkJCQkJCShkZXYsIHRhZ3MuZXh0cmFQYXJlbnRPYmplY3RJZCwKKwkJCQkJCQkgWUFGRlNf T0JKRUNUX1RZUEVfRElSRUNUT1JZKTsKKwkJCQkJCSBmaWxlU2l6ZSA9IHRhZ3MuZXh0cmFG aWxlTGVuZ3RoOworCQkJCQkJIGlzU2hyaW5rID0gdGFncy5leHRyYUlzU2hyaW5rSGVhZGVy OworCQkJCQkJIGVxdWl2YWxlbnRPYmplY3RJZCA9IHRhZ3MuZXh0cmFFcXVpdmFsZW50T2Jq ZWN0SWQ7CisJCQkJCQlpbi0+bGF6eUxvYWRlZCA9IDE7CisKKwkJCQkJfQorCQkJCQlpbi0+ ZGlydHkgPSAwOworCisJCQkJCWlmICghcGFyZW50KQorCQkJCQkJYWxsb2NfZmFpbGVkID0g MTsKKworCQkJCQkvKiBkaXJlY3Rvcnkgc3R1ZmYuLi4KKwkJCQkJICogaG9vayB1cCB0byBw YXJlbnQKKwkJCQkJICovCisKKwkJCQkJaWYgKHBhcmVudCAmJiBwYXJlbnQtPnZhcmlhbnRU eXBlID09CisJCQkJCSAgICBZQUZGU19PQkpFQ1RfVFlQRV9VTktOT1dOKSB7CisJCQkJCQkv KiBTZXQgdXAgYXMgYSBkaXJlY3RvcnkgKi8KKwkJCQkJCXBhcmVudC0+dmFyaWFudFR5cGUg PQorCQkJCQkJCVlBRkZTX09CSkVDVF9UWVBFX0RJUkVDVE9SWTsKKwkJCQkJCVlJTklUX0xJ U1RfSEVBRCgmcGFyZW50LT52YXJpYW50LgorCQkJCQkJCWRpcmVjdG9yeVZhcmlhbnQuCisJ CQkJCQkJY2hpbGRyZW4pOworCQkJCQl9IGVsc2UgaWYgKCFwYXJlbnQgfHwgcGFyZW50LT52 YXJpYW50VHlwZSAhPQorCQkJCQkJICAgWUFGRlNfT0JKRUNUX1RZUEVfRElSRUNUT1JZKSB7 CisJCQkJCQkvKiBIb29zdGVybWFuLCBhbm90aGVyIHByb2JsZW0uLi4uCisJCQkJCQkgKiBX ZSdyZSB0cnlpbmcgdG8gdXNlIGEgbm9uLWRpcmVjdG9yeSBhcyBhIGRpcmVjdG9yeQorCQkJ CQkJICovCisKKwkJCQkJCVQoWUFGRlNfVFJBQ0VfRVJST1IsCisJCQkJCQkgIChUU1RSCisJ CQkJCQkgICAoInlhZmZzIHRyYWdlZHk6IGF0dGVtcHRpbmcgdG8gdXNlIG5vbi1kaXJlY3Rv cnkgYXMgYSBkaXJlY3RvcnkgaW4gc2Nhbi4gUHV0IGluIGxvc3QrZm91bmQuIgorCQkJCQkJ ICAgIFRFTkRTVFIpKSk7CisJCQkJCQlwYXJlbnQgPSBkZXYtPmxvc3RORm91bmREaXI7CisJ CQkJCX0KKworCQkJCQl5YWZmc19BZGRPYmplY3RUb0RpcmVjdG9yeShwYXJlbnQsIGluKTsK KworCQkJCQlpdHNVbmxpbmtlZCA9IChwYXJlbnQgPT0gZGV2LT5kZWxldGVkRGlyKSB8fAor CQkJCQkJICAgICAgKHBhcmVudCA9PSBkZXYtPnVubGlua2VkRGlyKTsKKworCQkJCQlpZiAo aXNTaHJpbmspIHsKKwkJCQkJCS8qIE1hcmsgdGhlIGJsb2NrIGFzIGhhdmluZyBhIHNocmlu a0hlYWRlciAqLworCQkJCQkJYmktPmhhc1Nocmlua0hlYWRlciA9IDE7CisJCQkJCX0KKwor CQkJCQkvKiBOb3RlIHJlIGhhcmRsaW5rcy4KKwkJCQkJICogU2luY2Ugd2UgbWlnaHQgc2Nh biBhIGhhcmRsaW5rIGJlZm9yZSBpdHMgZXF1aXZhbGVudCBvYmplY3QgaXMgc2Nhbm5lZAor CQkJCQkgKiB3ZSBwdXQgdGhlbSBhbGwgaW4gYSBsaXN0LgorCQkJCQkgKiBBZnRlciBzY2Fu bmluZyBpcyBjb21wbGV0ZSwgd2Ugc2hvdWxkIGhhdmUgYWxsIHRoZSBvYmplY3RzLCBzbyB3 ZSBydW4KKwkJCQkJICogdGhyb3VnaCB0aGlzIGxpc3QgYW5kIGZpeCB1cCBhbGwgdGhlIGNo YWlucy4KKwkJCQkJICovCisKKwkJCQkJc3dpdGNoIChpbi0+dmFyaWFudFR5cGUpIHsKKwkJ CQkJY2FzZSBZQUZGU19PQkpFQ1RfVFlQRV9VTktOT1dOOgorCQkJCQkJLyogVG9kbyBnb3Qg YSBwcm9ibGVtICovCisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBZQUZGU19PQkpFQ1RfVFlQ RV9GSUxFOgorCisJCQkJCQlpZiAoaW4tPnZhcmlhbnQuZmlsZVZhcmlhbnQuCisJCQkJCQkg ICAgc2Nhbm5lZEZpbGVTaXplIDwgZmlsZVNpemUpIHsKKwkJCQkJCQkvKiBUaGlzIGNvdmVy cyB0aGUgY2FzZSB3aGVyZSB0aGUgZmlsZSBzaXplIGlzIGdyZWF0ZXIKKwkJCQkJCQkgKiB0 aGFuIHdoZXJlIHRoZSBkYXRhIGlzCisJCQkJCQkJICogVGhpcyB3aWxsIGhhcHBlbiBpZiB0 aGUgZmlsZSBpcyByZXNpemVkIHRvIGJlIGxhcmdlcgorCQkJCQkJCSAqIHRoYW4gaXRzIGN1 cnJlbnQgZGF0YSBleHRlbnRzLgorCQkJCQkJCSAqLworCQkJCQkJCWluLT52YXJpYW50LmZp bGVWYXJpYW50LmZpbGVTaXplID0gZmlsZVNpemU7CisJCQkJCQkJaW4tPnZhcmlhbnQuZmls ZVZhcmlhbnQuc2Nhbm5lZEZpbGVTaXplID0KKwkJCQkJCQkgICAgaW4tPnZhcmlhbnQuZmls ZVZhcmlhbnQuZmlsZVNpemU7CisJCQkJCQl9CisKKwkJCQkJCWlmIChpc1NocmluayAmJgor CQkJCQkJICAgIGluLT52YXJpYW50LmZpbGVWYXJpYW50LnNocmlua1NpemUgPiBmaWxlU2l6 ZSkgeworCQkJCQkJCWluLT52YXJpYW50LmZpbGVWYXJpYW50LnNocmlua1NpemUgPSBmaWxl U2l6ZTsKKwkJCQkJCX0KKworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgWUFGRlNfT0JKRUNU X1RZUEVfSEFSRExJTks6CisJCQkJCQlpZiAoIWl0c1VubGlua2VkKSB7CisJCQkJCQkJaW4t PnZhcmlhbnQuaGFyZExpbmtWYXJpYW50LmVxdWl2YWxlbnRPYmplY3RJZCA9CisJCQkJCQkJ CWVxdWl2YWxlbnRPYmplY3RJZDsKKwkJCQkJCQlpbi0+aGFyZExpbmtzLm5leHQgPQorCQkJ CQkJCQkoc3RydWN0IHlsaXN0X2hlYWQgKikgaGFyZExpc3Q7CisJCQkJCQkJaGFyZExpc3Qg PSBpbjsKKwkJCQkJCX0KKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIFlBRkZTX09CSkVDVF9U WVBFX0RJUkVDVE9SWToKKwkJCQkJCS8qIERvIG5vdGhpbmcgKi8KKwkJCQkJCWJyZWFrOwor CQkJCQljYXNlIFlBRkZTX09CSkVDVF9UWVBFX1NQRUNJQUw6CisJCQkJCQkvKiBEbyBub3Ro aW5nICovCisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBZQUZGU19PQkpFQ1RfVFlQRV9TWU1M SU5LOgorCQkJCQkJaWYgKG9oKSB7CisJCQkJCQkJaW4tPnZhcmlhbnQuc3ltTGlua1Zhcmlh bnQuYWxpYXMgPQorCQkJCQkJCQl5YWZmc19DbG9uZVN0cmluZyhvaC0+YWxpYXMpOworCQkJ CQkJCWlmICghaW4tPnZhcmlhbnQuc3ltTGlua1ZhcmlhbnQuYWxpYXMpCisJCQkJCQkJCWFs bG9jX2ZhaWxlZCA9IDE7CisJCQkJCQl9CisJCQkJCQlicmVhazsKKwkJCQkJfQorCisJCQkJ fQorCisJCQl9CisKKwkJfSAvKiBFbmQgb2Ygc2Nhbm5pbmcgZm9yIGVhY2ggY2h1bmsgKi8K KworCQlpZiAoc3RhdGUgPT0gWUFGRlNfQkxPQ0tfU1RBVEVfTkVFRFNfU0NBTk5JTkcpIHsK KwkJCS8qIElmIHdlIGdvdCB0aGlzIGZhciB3aGlsZSBzY2FubmluZywgdGhlbiB0aGUgYmxv Y2sgaXMgZnVsbHkgYWxsb2NhdGVkLiAqLworCQkJc3RhdGUgPSBZQUZGU19CTE9DS19TVEFU RV9GVUxMOworCQl9CisKKwkJYmktPmJsb2NrU3RhdGUgPSBzdGF0ZTsKKworCQkvKiBOb3cg bGV0J3Mgc2VlIGlmIGl0IHdhcyBkaXJ0eSAqLworCQlpZiAoYmktPnBhZ2VzSW5Vc2UgPT0g MCAmJgorCQkgICAgIWJpLT5oYXNTaHJpbmtIZWFkZXIgJiYKKwkJICAgIGJpLT5ibG9ja1N0 YXRlID09IFlBRkZTX0JMT0NLX1NUQVRFX0ZVTEwpIHsKKwkJCXlhZmZzX0Jsb2NrQmVjYW1l RGlydHkoZGV2LCBibGspOworCQl9CisKKwl9CisKKwlpZiAoYWx0QmxvY2tJbmRleCkKKwkJ WUZSRUVfQUxUKGJsb2NrSW5kZXgpOworCWVsc2UKKwkJWUZSRUUoYmxvY2tJbmRleCk7CisK KwkvKiBPaywgd2UndmUgZG9uZSBhbGwgdGhlIHNjYW5uaW5nLgorCSAqIEZpeCB1cCB0aGUg aGFyZCBsaW5rIGNoYWlucy4KKwkgKiBXZSBzaG91bGQgbm93IGhhdmUgc2Nhbm5lZCBhbGwg dGhlIG9iamVjdHMsIG5vdyBpdCdzIHRpbWUgdG8gYWRkIHRoZXNlCisJICogaGFyZGxpbmtz LgorCSAqLworCXlhZmZzX0hhcmRsaW5rRml4dXAoZGV2LCBoYXJkTGlzdCk7CisKKworCXlh ZmZzX1JlbGVhc2VUZW1wQnVmZmVyKGRldiwgY2h1bmtEYXRhLCBfX0xJTkVfXyk7CisKKwlp ZiAoYWxsb2NfZmFpbGVkKQorCQlyZXR1cm4gWUFGRlNfRkFJTDsKKworCVQoWUFGRlNfVFJB Q0VfU0NBTiwgKFRTVFIoInlhZmZzX1NjYW5CYWNrd2FyZHMgZW5kcyIgVEVORFNUUikpKTsK KworCXJldHVybiBZQUZGU19PSzsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0gIERpcmVjdG9yeSBGdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0gKi8KKworc3RhdGljIHZvaWQgeWFmZnNfVmVyaWZ5T2JqZWN0SW5EaXJlY3RvcnkoeWFm ZnNfT2JqZWN0ICpvYmopCit7CisJc3RydWN0IHlsaXN0X2hlYWQgKmxoOworCXlhZmZzX09i amVjdCAqbGlzdE9iajsKKworCWludCBjb3VudCA9IDA7CisKKwlpZiAoIW9iaikgeworCQlU KFlBRkZTX1RSQUNFX0FMV0FZUywgKFRTVFIoIk5vIG9iamVjdCB0byB2ZXJpZnkiIFRFTkRT VFIpKSk7CisJCVlCVUcoKTsKKwkJcmV0dXJuOworCX0KKworCWlmICh5YWZmc19Ta2lwVmVy aWZpY2F0aW9uKG9iai0+bXlEZXYpKQorCQlyZXR1cm47CisKKwlpZiAoIW9iai0+cGFyZW50 KSB7CisJCVQoWUFGRlNfVFJBQ0VfQUxXQVlTLCAoVFNUUigiT2JqZWN0IGRvZXMgbm90IGhh dmUgcGFyZW50IiBURU5EU1RSKSkpOworCQlZQlVHKCk7CisJCXJldHVybjsKKwl9CisKKwlp ZiAob2JqLT5wYXJlbnQtPnZhcmlhbnRUeXBlICE9IFlBRkZTX09CSkVDVF9UWVBFX0RJUkVD VE9SWSkgeworCQlUKFlBRkZTX1RSQUNFX0FMV0FZUywgKFRTVFIoIlBhcmVudCBpcyBub3Qg ZGlyZWN0b3J5IiBURU5EU1RSKSkpOworCQlZQlVHKCk7CisJfQorCisJLyogSXRlcmF0ZSB0 aHJvdWdoIHRoZSBvYmplY3RzIGluIGVhY2ggaGFzaCBlbnRyeSAqLworCisJeWxpc3RfZm9y X2VhY2gobGgsICZvYmotPnBhcmVudC0+dmFyaWFudC5kaXJlY3RvcnlWYXJpYW50LmNoaWxk cmVuKSB7CisJCWlmIChsaCkgeworCQkJbGlzdE9iaiA9IHlsaXN0X2VudHJ5KGxoLCB5YWZm c19PYmplY3QsIHNpYmxpbmdzKTsKKwkJCXlhZmZzX1ZlcmlmeU9iamVjdChsaXN0T2JqKTsK KwkJCWlmIChvYmogPT0gbGlzdE9iaikKKwkJCQljb3VudCsrOworCQl9CisJIH0KKworCWlm IChjb3VudCAhPSAxKSB7CisJCVQoWUFGRlNfVFJBQ0VfQUxXQVlTLCAoVFNUUigiT2JqZWN0 IGluIGRpcmVjdG9yeSAlZCB0aW1lcyIgVEVORFNUUiksIGNvdW50KSk7CisJCVlCVUcoKTsK Kwl9Cit9CisKK3N0YXRpYyB2b2lkIHlhZmZzX1ZlcmlmeURpcmVjdG9yeSh5YWZmc19PYmpl Y3QgKmRpcmVjdG9yeSkKK3sKKwlzdHJ1Y3QgeWxpc3RfaGVhZCAqbGg7CisJeWFmZnNfT2Jq ZWN0ICpsaXN0T2JqOworCisJaWYgKCFkaXJlY3RvcnkpIHsKKwkJWUJVRygpOworCQlyZXR1 cm47CisJfQorCisJaWYgKHlhZmZzX1NraXBGdWxsVmVyaWZpY2F0aW9uKGRpcmVjdG9yeS0+ bXlEZXYpKQorCQlyZXR1cm47CisKKwlpZiAoZGlyZWN0b3J5LT52YXJpYW50VHlwZSAhPSBZ QUZGU19PQkpFQ1RfVFlQRV9ESVJFQ1RPUlkpIHsKKwkJVChZQUZGU19UUkFDRV9BTFdBWVMs IChUU1RSKCJEaXJlY3RvcnkgaGFzIHdyb25nIHR5cGU6ICVkIiBURU5EU1RSKSwgZGlyZWN0 b3J5LT52YXJpYW50VHlwZSkpOworCQlZQlVHKCk7CisJfQorCisJLyogSXRlcmF0ZSB0aHJv dWdoIHRoZSBvYmplY3RzIGluIGVhY2ggaGFzaCBlbnRyeSAqLworCisJeWxpc3RfZm9yX2Vh Y2gobGgsICZkaXJlY3RvcnktPnZhcmlhbnQuZGlyZWN0b3J5VmFyaWFudC5jaGlsZHJlbikg eworCQlpZiAobGgpIHsKKwkJCWxpc3RPYmogPSB5bGlzdF9lbnRyeShsaCwgeWFmZnNfT2Jq ZWN0LCBzaWJsaW5ncyk7CisJCQlpZiAobGlzdE9iai0+cGFyZW50ICE9IGRpcmVjdG9yeSkg eworCQkJCVQoWUFGRlNfVFJBQ0VfQUxXQVlTLCAoVFNUUigiT2JqZWN0IGluIGRpcmVjdG9y eSBsaXN0IGhhcyB3cm9uZyBwYXJlbnQgJXAiIFRFTkRTVFIpLCBsaXN0T2JqLT5wYXJlbnQp KTsKKwkJCQlZQlVHKCk7CisJCQl9CisJCQl5YWZmc19WZXJpZnlPYmplY3RJbkRpcmVjdG9y eShsaXN0T2JqKTsKKwkJfQorCX0KK30KKworLyoKKyAqeWFmZnNfVXBkYXRlUGFyZW50KCkg aGFuZGxlcyBmaXhpbmcgYSBkaXJlY3RvcmllcyBtdGltZSBhbmQgY3RpbWUgd2hlbiBhIG5l dworICogbGluayAoaWUuIG5hbWUpIGlzIGNyZWF0ZWQgb3IgZGVsZXRlZCBpbiB0aGUgZGly ZWN0b3J5LgorICoKKyAqIGllLgorICogICBjcmVhdGUgZGlyL2EgOiB1cGRhdGUgZGlyJ3Mg bXRpbWUvY3RpbWUKKyAqICAgcm0gZGlyL2E6ICAgdXBkYXRlIGRpcidzIG10aW1lL2N0aW1l CisgKiAgIG1vZGlmeSBkaXIvYTogZG9uJ3QgdXBkYXRlIGRpcidzIG10aW1tZS9jdGltZQor ICovCisgCitzdGF0aWMgdm9pZCB5YWZmc19VcGRhdGVQYXJlbnQoeWFmZnNfT2JqZWN0ICpv YmopCit7CisJaWYoIW9iaikKKwkJcmV0dXJuOworCisJb2JqLT5kaXJ0eSA9IDE7CisJb2Jq LT55c3RfbXRpbWUgPSBvYmotPnlzdF9jdGltZSA9IFlfQ1VSUkVOVF9USU1FOworCisJeWFm ZnNfVXBkYXRlT2JqZWN0SGVhZGVyKG9iaixOVUxMLDAsMCwwKTsKK30KKworc3RhdGljIHZv aWQgeWFmZnNfUmVtb3ZlT2JqZWN0RnJvbURpcmVjdG9yeSh5YWZmc19PYmplY3QgKm9iaikK K3sKKwl5YWZmc19EZXZpY2UgKmRldiA9IG9iai0+bXlEZXY7CisJeWFmZnNfT2JqZWN0ICpw YXJlbnQ7CisKKwl5YWZmc19WZXJpZnlPYmplY3RJbkRpcmVjdG9yeShvYmopOworCXBhcmVu dCA9IG9iai0+cGFyZW50OworCisJeWFmZnNfVmVyaWZ5RGlyZWN0b3J5KHBhcmVudCk7CisK KwlpZiAoZGV2ICYmIGRldi0+cmVtb3ZlT2JqZWN0Q2FsbGJhY2spCisJCWRldi0+cmVtb3Zl T2JqZWN0Q2FsbGJhY2sob2JqKTsKKworCisJeWxpc3RfZGVsX2luaXQoJm9iai0+c2libGlu Z3MpOworCW9iai0+cGFyZW50ID0gTlVMTDsKKwkKKwl5YWZmc19WZXJpZnlEaXJlY3Rvcnko cGFyZW50KTsKK30KKworc3RhdGljIHZvaWQgeWFmZnNfQWRkT2JqZWN0VG9EaXJlY3Rvcnko eWFmZnNfT2JqZWN0ICpkaXJlY3RvcnksCisJCQkJCXlhZmZzX09iamVjdCAqb2JqKQorewor CWlmICghZGlyZWN0b3J5KSB7CisJCVQoWUFGRlNfVFJBQ0VfQUxXQVlTLAorCQkgIChUU1RS CisJCSAgICgidHJhZ2VkeTogVHJ5aW5nIHRvIGFkZCBhbiBvYmplY3QgdG8gYSBudWxsIHBv aW50ZXIgZGlyZWN0b3J5IgorCQkgICAgVEVORFNUUikpKTsKKwkJWUJVRygpOworCQlyZXR1 cm47CisJfQorCWlmIChkaXJlY3RvcnktPnZhcmlhbnRUeXBlICE9IFlBRkZTX09CSkVDVF9U WVBFX0RJUkVDVE9SWSkgeworCQlUKFlBRkZTX1RSQUNFX0FMV0FZUywKKwkJICAoVFNUUgor CQkgICAoInRyYWdlZHk6IFRyeWluZyB0byBhZGQgYW4gb2JqZWN0IHRvIGEgbm9uLWRpcmVj dG9yeSIKKwkJICAgIFRFTkRTVFIpKSk7CisJCVlCVUcoKTsKKwl9CisKKwlpZiAob2JqLT5z aWJsaW5ncy5wcmV2ID09IE5VTEwpIHsKKwkJLyogTm90IGluaXRpYWxpc2VkICovCisJCVlC VUcoKTsKKwl9CisKKworCXlhZmZzX1ZlcmlmeURpcmVjdG9yeShkaXJlY3RvcnkpOworCisJ eWFmZnNfUmVtb3ZlT2JqZWN0RnJvbURpcmVjdG9yeShvYmopOworCisKKwkvKiBOb3cgYWRk IGl0ICovCisJeWxpc3RfYWRkKCZvYmotPnNpYmxpbmdzLCAmZGlyZWN0b3J5LT52YXJpYW50 LmRpcmVjdG9yeVZhcmlhbnQuY2hpbGRyZW4pOworCW9iai0+cGFyZW50ID0gZGlyZWN0b3J5 OworCisJaWYgKGRpcmVjdG9yeSA9PSBvYmotPm15RGV2LT51bmxpbmtlZERpcgorCQkJfHwg ZGlyZWN0b3J5ID09IG9iai0+bXlEZXYtPmRlbGV0ZWREaXIpIHsKKwkJb2JqLT51bmxpbmtl ZCA9IDE7CisJCW9iai0+bXlEZXYtPm5VbmxpbmtlZEZpbGVzKys7CisJCW9iai0+cmVuYW1l QWxsb3dlZCA9IDA7CisJfQorCisJeWFmZnNfVmVyaWZ5RGlyZWN0b3J5KGRpcmVjdG9yeSk7 CisJeWFmZnNfVmVyaWZ5T2JqZWN0SW5EaXJlY3Rvcnkob2JqKTsKK30KKworeWFmZnNfT2Jq ZWN0ICp5YWZmc19GaW5kT2JqZWN0QnlOYW1lKHlhZmZzX09iamVjdCAqZGlyZWN0b3J5LAor CQkJCSAgICAgY29uc3QgWUNIQVIgKm5hbWUpCit7CisJaW50IHN1bTsKKworCXN0cnVjdCB5 bGlzdF9oZWFkICppOworCVlDSEFSIGJ1ZmZlcltZQUZGU19NQVhfTkFNRV9MRU5HVEggKyAx XTsKKworCXlhZmZzX09iamVjdCAqbDsKKworCWlmICghbmFtZSkKKwkJcmV0dXJuIE5VTEw7 CisKKwlpZiAoIWRpcmVjdG9yeSkgeworCQlUKFlBRkZTX1RSQUNFX0FMV0FZUywKKwkJICAo VFNUUgorCQkgICAoInRyYWdlZHk6IHlhZmZzX0ZpbmRPYmplY3RCeU5hbWU6IG51bGwgcG9p bnRlciBkaXJlY3RvcnkiCisJCSAgICBURU5EU1RSKSkpOworCQlZQlVHKCk7CisJCXJldHVy biBOVUxMOworCX0KKwlpZiAoZGlyZWN0b3J5LT52YXJpYW50VHlwZSAhPSBZQUZGU19PQkpF Q1RfVFlQRV9ESVJFQ1RPUlkpIHsKKwkJVChZQUZGU19UUkFDRV9BTFdBWVMsCisJCSAgKFRT VFIKKwkJICAgKCJ0cmFnZWR5OiB5YWZmc19GaW5kT2JqZWN0QnlOYW1lOiBub24tZGlyZWN0 b3J5IiBURU5EU1RSKSkpOworCQlZQlVHKCk7CisJfQorCisJc3VtID0geWFmZnNfQ2FsY05h bWVTdW0obmFtZSk7CisKKwl5bGlzdF9mb3JfZWFjaChpLCAmZGlyZWN0b3J5LT52YXJpYW50 LmRpcmVjdG9yeVZhcmlhbnQuY2hpbGRyZW4pIHsKKwkJaWYgKGkpIHsKKwkJCWwgPSB5bGlz dF9lbnRyeShpLCB5YWZmc19PYmplY3QsIHNpYmxpbmdzKTsKKworCQkJaWYgKGwtPnBhcmVu dCAhPSBkaXJlY3RvcnkpCisJCQkJWUJVRygpOworCisJCQl5YWZmc19DaGVja09iamVjdERl dGFpbHNMb2FkZWQobCk7CisKKwkJCS8qIFNwZWNpYWwgY2FzZSBmb3IgbG9zdC1uLWZvdW5k ICovCisJCQlpZiAobC0+b2JqZWN0SWQgPT0gWUFGRlNfT0JKRUNUSURfTE9TVE5GT1VORCkg eworCQkJCWlmICh5YWZmc19zdHJjbXAobmFtZSwgWUFGRlNfTE9TVE5GT1VORF9OQU1FKSA9 PSAwKQorCQkJCQlyZXR1cm4gbDsKKwkJCX0gZWxzZSBpZiAoeWFmZnNfU3VtQ29tcGFyZShs LT5zdW0sIHN1bSkgfHwgbC0+aGRyQ2h1bmsgPD0gMCkgeworCQkJCS8qIExvc3RuRm91bmQg Y2h1bmsgY2FsbGVkIE9ianh4eAorCQkJCSAqIERvIGEgcmVhbCBjaGVjaworCQkJCSAqLwor CQkJCXlhZmZzX0dldE9iamVjdE5hbWUobCwgYnVmZmVyLAorCQkJCQkJICAgIFlBRkZTX01B WF9OQU1FX0xFTkdUSCk7CisJCQkJaWYgKHlhZmZzX3N0cm5jbXAobmFtZSwgYnVmZmVyLCBZ QUZGU19NQVhfTkFNRV9MRU5HVEgpID09IDApCisJCQkJCXJldHVybiBsOworCQkJfQorCQl9 CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKworI2lmIDAKK2ludCB5YWZmc19BcHBseVRv RGlyZWN0b3J5Q2hpbGRyZW4oeWFmZnNfT2JqZWN0ICp0aGVEaXIsCisJCQkJCWludCAoKmZu KSAoeWFmZnNfT2JqZWN0ICopKQoreworCXN0cnVjdCB5bGlzdF9oZWFkICppOworCXlhZmZz X09iamVjdCAqbDsKKworCWlmICghdGhlRGlyKSB7CisJCVQoWUFGRlNfVFJBQ0VfQUxXQVlT LAorCQkgIChUU1RSCisJCSAgICgidHJhZ2VkeTogeWFmZnNfRmluZE9iamVjdEJ5TmFtZTog bnVsbCBwb2ludGVyIGRpcmVjdG9yeSIKKwkJICAgIFRFTkRTVFIpKSk7CisJCVlCVUcoKTsK KwkJcmV0dXJuIFlBRkZTX0ZBSUw7CisJfQorCWlmICh0aGVEaXItPnZhcmlhbnRUeXBlICE9 IFlBRkZTX09CSkVDVF9UWVBFX0RJUkVDVE9SWSkgeworCQlUKFlBRkZTX1RSQUNFX0FMV0FZ UywKKwkJICAoVFNUUgorCQkgICAoInRyYWdlZHk6IHlhZmZzX0ZpbmRPYmplY3RCeU5hbWU6 IG5vbi1kaXJlY3RvcnkiIFRFTkRTVFIpKSk7CisJCVlCVUcoKTsKKwkJcmV0dXJuIFlBRkZT X0ZBSUw7CisJfQorCisJeWxpc3RfZm9yX2VhY2goaSwgJnRoZURpci0+dmFyaWFudC5kaXJl Y3RvcnlWYXJpYW50LmNoaWxkcmVuKSB7CisJCWlmIChpKSB7CisJCQlsID0geWxpc3RfZW50 cnkoaSwgeWFmZnNfT2JqZWN0LCBzaWJsaW5ncyk7CisJCQlpZiAobCAmJiAhZm4obCkpCisJ CQkJcmV0dXJuIFlBRkZTX0ZBSUw7CisJCX0KKwl9CisKKwlyZXR1cm4gWUFGRlNfT0s7CisK K30KKyNlbmRpZgorCisvKiBHZXRFcXVpdmFsZW50T2JqZWN0IGRlcmVmZXJlbmNlcyBhbnkg aGFyZCBsaW5rcyB0byBnZXQgdG8gdGhlCisgKiBhY3R1YWwgb2JqZWN0LgorICovCisKK3lh ZmZzX09iamVjdCAqeWFmZnNfR2V0RXF1aXZhbGVudE9iamVjdCh5YWZmc19PYmplY3QgKm9i aikKK3sKKwlpZiAob2JqICYmIG9iai0+dmFyaWFudFR5cGUgPT0gWUFGRlNfT0JKRUNUX1RZ UEVfSEFSRExJTkspIHsKKwkJLyogV2Ugd2FudCB0aGUgb2JqZWN0IGlkIG9mIHRoZSBlcXVp dmFsZW50IG9iamVjdCwgbm90IHRoaXMgb25lICovCisJCW9iaiA9IG9iai0+dmFyaWFudC5o YXJkTGlua1ZhcmlhbnQuZXF1aXZhbGVudE9iamVjdDsKKwkJeWFmZnNfQ2hlY2tPYmplY3RE ZXRhaWxzTG9hZGVkKG9iaik7CisJfQorCXJldHVybiBvYmo7Cit9CisKK2ludCB5YWZmc19H ZXRPYmplY3ROYW1lKHlhZmZzX09iamVjdCAqb2JqLCBZQ0hBUiAqbmFtZSwgaW50IGJ1ZmZT aXplKQoreworCW1lbXNldChuYW1lLCAwLCBidWZmU2l6ZSAqIHNpemVvZihZQ0hBUikpOwor CisJeWFmZnNfQ2hlY2tPYmplY3REZXRhaWxzTG9hZGVkKG9iaik7CisKKwlpZiAob2JqLT5v YmplY3RJZCA9PSBZQUZGU19PQkpFQ1RJRF9MT1NUTkZPVU5EKSB7CisJCXlhZmZzX3N0cm5j cHkobmFtZSwgWUFGRlNfTE9TVE5GT1VORF9OQU1FLCBidWZmU2l6ZSAtIDEpOworCX0gZWxz ZSBpZiAob2JqLT5oZHJDaHVuayA8PSAwKSB7CisJCVlDSEFSIGxvY05hbWVbMjBdOworCQlZ Q0hBUiBudW1TdHJpbmdbMjBdOworCQlZQ0hBUiAqeCA9ICZudW1TdHJpbmdbMTldOworCQl1 bnNpZ25lZCB2ID0gb2JqLT5vYmplY3RJZDsKKwkJbnVtU3RyaW5nWzE5XSA9IDA7CisJCXdo aWxlICh2ID4gMCkgeworCQkJeC0tOworCQkJKnggPSAnMCcgKyAodiAlIDEwKTsKKwkJCXYg Lz0gMTA7CisJCX0KKwkJLyogbWFrZSB1cCBhIG5hbWUgKi8KKwkJeWFmZnNfc3RyY3B5KGxv Y05hbWUsIFlBRkZTX0xPU1RORk9VTkRfUFJFRklYKTsKKwkJeWFmZnNfc3RyY2F0KGxvY05h bWUsIHgpOworCQl5YWZmc19zdHJuY3B5KG5hbWUsIGxvY05hbWUsIGJ1ZmZTaXplIC0gMSk7 CisKKwl9CisjaWZkZWYgQ09ORklHX1lBRkZTX1NIT1JUX05BTUVTX0lOX1JBTQorCWVsc2Ug aWYgKG9iai0+c2hvcnROYW1lWzBdKQorCQl5YWZmc19zdHJjcHkobmFtZSwgb2JqLT5zaG9y dE5hbWUpOworI2VuZGlmCisJZWxzZSB7CisJCWludCByZXN1bHQ7CisJCV9fdTggKmJ1ZmZl ciA9IHlhZmZzX0dldFRlbXBCdWZmZXIob2JqLT5teURldiwgX19MSU5FX18pOworCisJCXlh ZmZzX09iamVjdEhlYWRlciAqb2ggPSAoeWFmZnNfT2JqZWN0SGVhZGVyICopIGJ1ZmZlcjsK KworCQltZW1zZXQoYnVmZmVyLCAwLCBvYmotPm15RGV2LT5uRGF0YUJ5dGVzUGVyQ2h1bmsp OworCisJCWlmIChvYmotPmhkckNodW5rID4gMCkgeworCQkJcmVzdWx0ID0geWFmZnNfUmVh ZENodW5rV2l0aFRhZ3NGcm9tTkFORChvYmotPm15RGV2LAorCQkJCQkJCW9iai0+aGRyQ2h1 bmssIGJ1ZmZlciwKKwkJCQkJCQlOVUxMKTsKKwkJfQorCQl5YWZmc19zdHJuY3B5KG5hbWUs IG9oLT5uYW1lLCBidWZmU2l6ZSAtIDEpOworCisJCXlhZmZzX1JlbGVhc2VUZW1wQnVmZmVy KG9iai0+bXlEZXYsIGJ1ZmZlciwgX19MSU5FX18pOworCX0KKworCXJldHVybiB5YWZmc19z dHJsZW4obmFtZSk7Cit9CisKK2ludCB5YWZmc19HZXRPYmplY3RGaWxlTGVuZ3RoKHlhZmZz X09iamVjdCAqb2JqKQoreworCS8qIERlcmVmZXJlbmNlIGFueSBoYXJkIGxpbmtpbmcgKi8K KwlvYmogPSB5YWZmc19HZXRFcXVpdmFsZW50T2JqZWN0KG9iaik7CisKKwlpZiAob2JqLT52 YXJpYW50VHlwZSA9PSBZQUZGU19PQkpFQ1RfVFlQRV9GSUxFKQorCQlyZXR1cm4gb2JqLT52 YXJpYW50LmZpbGVWYXJpYW50LmZpbGVTaXplOworCWlmIChvYmotPnZhcmlhbnRUeXBlID09 IFlBRkZTX09CSkVDVF9UWVBFX1NZTUxJTkspCisJCXJldHVybiB5YWZmc19zdHJsZW4ob2Jq LT52YXJpYW50LnN5bUxpbmtWYXJpYW50LmFsaWFzKTsKKwllbHNlIHsKKwkJLyogT25seSBh IGRpcmVjdG9yeSBzaG91bGQgZHJvcCB0aHJvdWdoIHRvIGhlcmUgKi8KKwkJcmV0dXJuIG9i ai0+bXlEZXYtPm5EYXRhQnl0ZXNQZXJDaHVuazsKKwl9Cit9CisKK2ludCB5YWZmc19HZXRP YmplY3RMaW5rQ291bnQoeWFmZnNfT2JqZWN0ICpvYmopCit7CisJaW50IGNvdW50ID0gMDsK KwlzdHJ1Y3QgeWxpc3RfaGVhZCAqaTsKKworCWlmICghb2JqLT51bmxpbmtlZCkKKwkJY291 bnQrKzsJCS8qIHRoZSBvYmplY3QgaXRzZWxmICovCisKKwl5bGlzdF9mb3JfZWFjaChpLCAm b2JqLT5oYXJkTGlua3MpCisJCWNvdW50Kys7CQkvKiBhZGQgdGhlIGhhcmQgbGlua3M7ICov CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK2ludCB5YWZmc19HZXRPYmplY3RJbm9kZSh5YWZm c19PYmplY3QgKm9iaikKK3sKKwlvYmogPSB5YWZmc19HZXRFcXVpdmFsZW50T2JqZWN0KG9i aik7CisKKwlyZXR1cm4gb2JqLT5vYmplY3RJZDsKK30KKwordW5zaWduZWQgeWFmZnNfR2V0 T2JqZWN0VHlwZSh5YWZmc19PYmplY3QgKm9iaikKK3sKKwlvYmogPSB5YWZmc19HZXRFcXVp dmFsZW50T2JqZWN0KG9iaik7CisKKwlzd2l0Y2ggKG9iai0+dmFyaWFudFR5cGUpIHsKKwlj YXNlIFlBRkZTX09CSkVDVF9UWVBFX0ZJTEU6CisJCXJldHVybiBEVF9SRUc7CisJCWJyZWFr OworCWNhc2UgWUFGRlNfT0JKRUNUX1RZUEVfRElSRUNUT1JZOgorCQlyZXR1cm4gRFRfRElS OworCQlicmVhazsKKwljYXNlIFlBRkZTX09CSkVDVF9UWVBFX1NZTUxJTks6CisJCXJldHVy biBEVF9MTks7CisJCWJyZWFrOworCWNhc2UgWUFGRlNfT0JKRUNUX1RZUEVfSEFSRExJTks6 CisJCXJldHVybiBEVF9SRUc7CisJCWJyZWFrOworCWNhc2UgWUFGRlNfT0JKRUNUX1RZUEVf U1BFQ0lBTDoKKwkJaWYgKFNfSVNGSUZPKG9iai0+eXN0X21vZGUpKQorCQkJcmV0dXJuIERU X0ZJRk87CisJCWlmIChTX0lTQ0hSKG9iai0+eXN0X21vZGUpKQorCQkJcmV0dXJuIERUX0NI UjsKKwkJaWYgKFNfSVNCTEsob2JqLT55c3RfbW9kZSkpCisJCQlyZXR1cm4gRFRfQkxLOwor CQlpZiAoU19JU1NPQ0sob2JqLT55c3RfbW9kZSkpCisJCQlyZXR1cm4gRFRfU09DSzsKKwlk ZWZhdWx0OgorCQlyZXR1cm4gRFRfUkVHOworCQlicmVhazsKKwl9Cit9CisKK1lDSEFSICp5 YWZmc19HZXRTeW1saW5rQWxpYXMoeWFmZnNfT2JqZWN0ICpvYmopCit7CisJb2JqID0geWFm ZnNfR2V0RXF1aXZhbGVudE9iamVjdChvYmopOworCWlmIChvYmotPnZhcmlhbnRUeXBlID09 IFlBRkZTX09CSkVDVF9UWVBFX1NZTUxJTkspCisJCXJldHVybiB5YWZmc19DbG9uZVN0cmlu ZyhvYmotPnZhcmlhbnQuc3ltTGlua1ZhcmlhbnQuYWxpYXMpOworCWVsc2UKKwkJcmV0dXJu IHlhZmZzX0Nsb25lU3RyaW5nKF9ZKCIiKSk7Cit9CisKKyNpZm5kZWYgQ09ORklHX1lBRkZT X1dJTkNFCisKK2ludCB5YWZmc19TZXRBdHRyaWJ1dGVzKHlhZmZzX09iamVjdCAqb2JqLCBz dHJ1Y3QgaWF0dHIgKmF0dHIpCit7CisJdW5zaWduZWQgaW50IHZhbGlkID0gYXR0ci0+aWFf dmFsaWQ7CisKKwlpZiAodmFsaWQgJiBBVFRSX01PREUpCisJCW9iai0+eXN0X21vZGUgPSBh dHRyLT5pYV9tb2RlOworCWlmICh2YWxpZCAmIEFUVFJfVUlEKQorCQlvYmotPnlzdF91aWQg PSBhdHRyLT5pYV91aWQ7CisJaWYgKHZhbGlkICYgQVRUUl9HSUQpCisJCW9iai0+eXN0X2dp ZCA9IGF0dHItPmlhX2dpZDsKKworCWlmICh2YWxpZCAmIEFUVFJfQVRJTUUpCisJCW9iai0+ eXN0X2F0aW1lID0gWV9USU1FX0NPTlZFUlQoYXR0ci0+aWFfYXRpbWUpOworCWlmICh2YWxp ZCAmIEFUVFJfQ1RJTUUpCisJCW9iai0+eXN0X2N0aW1lID0gWV9USU1FX0NPTlZFUlQoYXR0 ci0+aWFfY3RpbWUpOworCWlmICh2YWxpZCAmIEFUVFJfTVRJTUUpCisJCW9iai0+eXN0X210 aW1lID0gWV9USU1FX0NPTlZFUlQoYXR0ci0+aWFfbXRpbWUpOworCisJaWYgKHZhbGlkICYg QVRUUl9TSVpFKQorCQl5YWZmc19SZXNpemVGaWxlKG9iaiwgYXR0ci0+aWFfc2l6ZSk7CisK Kwl5YWZmc19VcGRhdGVPYmplY3RIZWFkZXIob2JqLCBOVUxMLCAxLCAwLCAwKTsKKworCXJl dHVybiBZQUZGU19PSzsKKworfQoraW50IHlhZmZzX0dldEF0dHJpYnV0ZXMoeWFmZnNfT2Jq ZWN0ICpvYmosIHN0cnVjdCBpYXR0ciAqYXR0cikKK3sKKwl1bnNpZ25lZCBpbnQgdmFsaWQg PSAwOworCisJYXR0ci0+aWFfbW9kZSA9IG9iai0+eXN0X21vZGU7CisJdmFsaWQgfD0gQVRU Ul9NT0RFOworCWF0dHItPmlhX3VpZCA9IG9iai0+eXN0X3VpZDsKKwl2YWxpZCB8PSBBVFRS X1VJRDsKKwlhdHRyLT5pYV9naWQgPSBvYmotPnlzdF9naWQ7CisJdmFsaWQgfD0gQVRUUl9H SUQ7CisKKwlZX1RJTUVfQ09OVkVSVChhdHRyLT5pYV9hdGltZSkgPSBvYmotPnlzdF9hdGlt ZTsKKwl2YWxpZCB8PSBBVFRSX0FUSU1FOworCVlfVElNRV9DT05WRVJUKGF0dHItPmlhX2N0 aW1lKSA9IG9iai0+eXN0X2N0aW1lOworCXZhbGlkIHw9IEFUVFJfQ1RJTUU7CisJWV9USU1F X0NPTlZFUlQoYXR0ci0+aWFfbXRpbWUpID0gb2JqLT55c3RfbXRpbWU7CisJdmFsaWQgfD0g QVRUUl9NVElNRTsKKworCWF0dHItPmlhX3NpemUgPSB5YWZmc19HZXRGaWxlU2l6ZShvYmop OworCXZhbGlkIHw9IEFUVFJfU0laRTsKKworCWF0dHItPmlhX3ZhbGlkID0gdmFsaWQ7CisK KwlyZXR1cm4gWUFGRlNfT0s7Cit9CisKKyNlbmRpZgorCisjaWYgMAoraW50IHlhZmZzX0R1 bXBPYmplY3QoeWFmZnNfT2JqZWN0ICpvYmopCit7CisJWUNIQVIgbmFtZVsyNTddOworCisJ eWFmZnNfR2V0T2JqZWN0TmFtZShvYmosIG5hbWUsIDI1Nik7CisKKwlUKFlBRkZTX1RSQUNF X0FMV0FZUywKKwkgIChUU1RSCisJICAgKCJPYmplY3QgJWQsIGlub2RlICVkIFwiJXNcIlxu IGRpcnR5ICVkIHZhbGlkICVkIHNlcmlhbCAlZCBzdW0gJWQiCisJICAgICIgY2h1bmsgJWQg dHlwZSAlZCBzaXplICVkXG4iCisJICAgIFRFTkRTVFIpLCBvYmotPm9iamVjdElkLCB5YWZm c19HZXRPYmplY3RJbm9kZShvYmopLCBuYW1lLAorCSAgIG9iai0+ZGlydHksIG9iai0+dmFs aWQsIG9iai0+c2VyaWFsLCBvYmotPnN1bSwgb2JqLT5oZHJDaHVuaywKKwkgICB5YWZmc19H ZXRPYmplY3RUeXBlKG9iaiksIHlhZmZzX0dldE9iamVjdEZpbGVMZW5ndGgob2JqKSkpOwor CisJcmV0dXJuIFlBRkZTX09LOworfQorI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSBJbml0aWFsaXNhdGlvbiBjb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBpbnQgeWFmZnNfQ2hlY2tEZXZGdW5jdGlv bnMoY29uc3QgeWFmZnNfRGV2aWNlICpkZXYpCit7CisKKwkvKiBDb21tb24gZnVuY3Rpb25z LCBnb3R0YSBoYXZlICovCisJaWYgKCFkZXYtPmVyYXNlQmxvY2tJbk5BTkQgfHwgIWRldi0+ aW5pdGlhbGlzZU5BTkQpCisJCXJldHVybiAwOworCisjaWZkZWYgQ09ORklHX1lBRkZTX1lB RkZTMgorCisJLyogQ2FuIHVzZSB0aGUgIndpdGggdGFncyIgc3R5bGUgaW50ZXJmYWNlIGZv ciB5YWZmczEgb3IgeWFmZnMyICovCisJaWYgKGRldi0+d3JpdGVDaHVua1dpdGhUYWdzVG9O QU5EICYmCisJICAgIGRldi0+cmVhZENodW5rV2l0aFRhZ3NGcm9tTkFORCAmJgorCSAgICAh ZGV2LT53cml0ZUNodW5rVG9OQU5EICYmCisJICAgICFkZXYtPnJlYWRDaHVua0Zyb21OQU5E ICYmCisJICAgIGRldi0+bWFya05BTkRCbG9ja0JhZCAmJiBkZXYtPnF1ZXJ5TkFOREJsb2Nr KQorCQlyZXR1cm4gMTsKKyNlbmRpZgorCisJLyogQ2FuIHVzZSB0aGUgInNwYXJlIiBzdHls ZSBpbnRlcmZhY2UgZm9yIHlhZmZzMSAqLworCWlmICghZGV2LT5pc1lhZmZzMiAmJgorCSAg ICAhZGV2LT53cml0ZUNodW5rV2l0aFRhZ3NUb05BTkQgJiYKKwkgICAgIWRldi0+cmVhZENo dW5rV2l0aFRhZ3NGcm9tTkFORCAmJgorCSAgICBkZXYtPndyaXRlQ2h1bmtUb05BTkQgJiYK KwkgICAgZGV2LT5yZWFkQ2h1bmtGcm9tTkFORCAmJgorCSAgICAhZGV2LT5tYXJrTkFOREJs b2NrQmFkICYmICFkZXYtPnF1ZXJ5TkFOREJsb2NrKQorCQlyZXR1cm4gMTsKKworCXJldHVy biAwOwkJLyogYmFkICovCit9CisKKworc3RhdGljIGludCB5YWZmc19DcmVhdGVJbml0aWFs RGlyZWN0b3JpZXMoeWFmZnNfRGV2aWNlICpkZXYpCit7CisJLyogSW5pdGlhbGlzZSB0aGUg dW5saW5rZWQsIGRlbGV0ZWQsIHJvb3QgYW5kIGxvc3QgYW5kIGZvdW5kIGRpcmVjdG9yaWVz ICovCisKKwlkZXYtPmxvc3RORm91bmREaXIgPSBkZXYtPnJvb3REaXIgPSAgTlVMTDsKKwlk ZXYtPnVubGlua2VkRGlyID0gZGV2LT5kZWxldGVkRGlyID0gTlVMTDsKKworCWRldi0+dW5s aW5rZWREaXIgPQorCSAgICB5YWZmc19DcmVhdGVGYWtlRGlyZWN0b3J5KGRldiwgWUFGRlNf T0JKRUNUSURfVU5MSU5LRUQsIFNfSUZESVIpOworCisJZGV2LT5kZWxldGVkRGlyID0KKwkg ICAgeWFmZnNfQ3JlYXRlRmFrZURpcmVjdG9yeShkZXYsIFlBRkZTX09CSkVDVElEX0RFTEVU RUQsIFNfSUZESVIpOworCisJZGV2LT5yb290RGlyID0KKwkgICAgeWFmZnNfQ3JlYXRlRmFr ZURpcmVjdG9yeShkZXYsIFlBRkZTX09CSkVDVElEX1JPT1QsCisJCQkJICAgICAgWUFGRlNf Uk9PVF9NT0RFIHwgU19JRkRJUik7CisJZGV2LT5sb3N0TkZvdW5kRGlyID0KKwkgICAgeWFm ZnNfQ3JlYXRlRmFrZURpcmVjdG9yeShkZXYsIFlBRkZTX09CSkVDVElEX0xPU1RORk9VTkQs CisJCQkJICAgICAgWUFGRlNfTE9TVE5GT1VORF9NT0RFIHwgU19JRkRJUik7CisKKwlpZiAo ZGV2LT5sb3N0TkZvdW5kRGlyICYmIGRldi0+cm9vdERpciAmJiBkZXYtPnVubGlua2VkRGly ICYmIGRldi0+ZGVsZXRlZERpcikgeworCQl5YWZmc19BZGRPYmplY3RUb0RpcmVjdG9yeShk ZXYtPnJvb3REaXIsIGRldi0+bG9zdE5Gb3VuZERpcik7CisJCXJldHVybiBZQUZGU19PSzsK Kwl9CisKKwlyZXR1cm4gWUFGRlNfRkFJTDsKK30KKworaW50IHlhZmZzX0d1dHNJbml0aWFs aXNlKHlhZmZzX0RldmljZSAqZGV2KQoreworCWludCBpbml0X2ZhaWxlZCA9IDA7CisJdW5z aWduZWQgeDsKKwlpbnQgYml0czsKKworCVQoWUFGRlNfVFJBQ0VfVFJBQ0lORywgKFRTVFIo InlhZmZzOiB5YWZmc19HdXRzSW5pdGlhbGlzZSgpIiBURU5EU1RSKSkpOworCisJLyogQ2hl Y2sgc3R1ZmYgdGhhdCBtdXN0IGJlIHNldCAqLworCisJaWYgKCFkZXYpIHsKKwkJVChZQUZG U19UUkFDRV9BTFdBWVMsIChUU1RSKCJ5YWZmczogTmVlZCBhIGRldmljZSIgVEVORFNUUikp KTsKKwkJcmV0dXJuIFlBRkZTX0ZBSUw7CisJfQorCisJZGV2LT5pbnRlcm5hbFN0YXJ0Qmxv Y2sgPSBkZXYtPnN0YXJ0QmxvY2s7CisJZGV2LT5pbnRlcm5hbEVuZEJsb2NrID0gZGV2LT5l bmRCbG9jazsKKwlkZXYtPmJsb2NrT2Zmc2V0ID0gMDsKKwlkZXYtPmNodW5rT2Zmc2V0ID0g MDsKKwlkZXYtPm5GcmVlQ2h1bmtzID0gMDsKKworCWRldi0+Z2NCbG9jayA9IC0xOworCisJ aWYgKGRldi0+c3RhcnRCbG9jayA9PSAwKSB7CisJCWRldi0+aW50ZXJuYWxTdGFydEJsb2Nr ID0gZGV2LT5zdGFydEJsb2NrICsgMTsKKwkJZGV2LT5pbnRlcm5hbEVuZEJsb2NrID0gZGV2 LT5lbmRCbG9jayArIDE7CisJCWRldi0+YmxvY2tPZmZzZXQgPSAxOworCQlkZXYtPmNodW5r T2Zmc2V0ID0gZGV2LT5uQ2h1bmtzUGVyQmxvY2s7CisJfQorCisJLyogQ2hlY2sgZ2VvbWV0 cnkgcGFyYW1ldGVycy4gKi8KKworCWlmICgoIWRldi0+aW5iYW5kVGFncyAmJiBkZXYtPmlz WWFmZnMyICYmIGRldi0+dG90YWxCeXRlc1BlckNodW5rIDwgMTAyNCkgfHwKKwkgICAgKCFk ZXYtPmlzWWFmZnMyICYmIGRldi0+dG90YWxCeXRlc1BlckNodW5rIDwgNTEyKSB8fAorCSAg ICAoZGV2LT5pbmJhbmRUYWdzICYmICFkZXYtPmlzWWFmZnMyKSB8fAorCSAgICAgZGV2LT5u Q2h1bmtzUGVyQmxvY2sgPCAyIHx8CisJICAgICBkZXYtPm5SZXNlcnZlZEJsb2NrcyA8IDIg fHwKKwkgICAgIGRldi0+aW50ZXJuYWxTdGFydEJsb2NrIDw9IDAgfHwKKwkgICAgIGRldi0+ aW50ZXJuYWxFbmRCbG9jayA8PSAwIHx8CisJICAgICBkZXYtPmludGVybmFsRW5kQmxvY2sg PD0gKGRldi0+aW50ZXJuYWxTdGFydEJsb2NrICsgZGV2LT5uUmVzZXJ2ZWRCbG9ja3MgKyAy KSkgewkvKiBvdGhlcndpc2UgaXQgaXMgdG9vIHNtYWxsICovCisJCVQoWUFGRlNfVFJBQ0Vf QUxXQVlTLAorCQkgIChUU1RSCisJCSAgICgieWFmZnM6IE5BTkQgZ2VvbWV0cnkgcHJvYmxl bXM6IGNodW5rIHNpemUgJWQsIHR5cGUgaXMgeWFmZnMlcywgaW5iYW5kVGFncyAlZCAiCisJ CSAgICBURU5EU1RSKSwgZGV2LT50b3RhbEJ5dGVzUGVyQ2h1bmssIGRldi0+aXNZYWZmczIg PyAiMiIgOiAiIiwgZGV2LT5pbmJhbmRUYWdzKSk7CisJCXJldHVybiBZQUZGU19GQUlMOwor CX0KKworCWlmICh5YWZmc19Jbml0aWFsaXNlTkFORChkZXYpICE9IFlBRkZTX09LKSB7CisJ CVQoWUFGRlNfVFJBQ0VfQUxXQVlTLAorCQkgIChUU1RSKCJ5YWZmczogSW5pdGlhbGlzZU5B TkQgZmFpbGVkIiBURU5EU1RSKSkpOworCQlyZXR1cm4gWUFGRlNfRkFJTDsKKwl9CisKKwkv KiBTb3J0IG91dCBzcGFjZSBmb3IgaW5iYW5kIHRhZ3MsIGlmIHJlcXVpcmVkICovCisJaWYg KGRldi0+aW5iYW5kVGFncykKKwkJZGV2LT5uRGF0YUJ5dGVzUGVyQ2h1bmsgPSBkZXYtPnRv dGFsQnl0ZXNQZXJDaHVuayAtIHNpemVvZih5YWZmc19QYWNrZWRUYWdzMlRhZ3NQYXJ0KTsK KwllbHNlCisJCWRldi0+bkRhdGFCeXRlc1BlckNodW5rID0gZGV2LT50b3RhbEJ5dGVzUGVy Q2h1bms7CisKKwkvKiBHb3QgdGhlIHJpZ2h0IG1peCBvZiBmdW5jdGlvbnM/ICovCisJaWYg KCF5YWZmc19DaGVja0RldkZ1bmN0aW9ucyhkZXYpKSB7CisJCS8qIEZ1bmN0aW9uIG1pc3Np bmcgKi8KKwkJVChZQUZGU19UUkFDRV9BTFdBWVMsCisJCSAgKFRTVFIKKwkJICAgKCJ5YWZm czogZGV2aWNlIGZ1bmN0aW9uKHMpIG1pc3Npbmcgb3Igd3JvbmdcbiIgVEVORFNUUikpKTsK KworCQlyZXR1cm4gWUFGRlNfRkFJTDsKKwl9CisKKwkvKiBUaGlzIGlzIHJlYWxseSBhIGNv bXBpbGF0aW9uIGNoZWNrLiAqLworCWlmICgheWFmZnNfQ2hlY2tTdHJ1Y3R1cmVzKCkpIHsK KwkJVChZQUZGU19UUkFDRV9BTFdBWVMsCisJCSAgKFRTVFIoInlhZmZzX0NoZWNrU3RydWN0 dXJlcyBmYWlsZWRcbiIgVEVORFNUUikpKTsKKwkJcmV0dXJuIFlBRkZTX0ZBSUw7CisJfQor CisJaWYgKGRldi0+aXNNb3VudGVkKSB7CisJCVQoWUFGRlNfVFJBQ0VfQUxXQVlTLAorCQkg IChUU1RSKCJ5YWZmczogZGV2aWNlIGFscmVhZHkgbW91bnRlZFxuIiBURU5EU1RSKSkpOwor CQlyZXR1cm4gWUFGRlNfRkFJTDsKKwl9CisKKwkvKiBGaW5pc2hlZCB3aXRoIG1vc3QgY2hl Y2tzLiBPbmUgb3IgdHdvIG1vcmUgY2hlY2tzIGhhcHBlbiBsYXRlciBvbiB0b28uICovCisK KwlkZXYtPmlzTW91bnRlZCA9IDE7CisKKwkvKiBPSyBub3cgY2FsY3VsYXRlIGEgZmV3IHRo aW5ncyBmb3IgdGhlIGRldmljZSAqLworCisJLyoKKwkgKiAgQ2FsY3VsYXRlIGFsbCB0aGUg Y2h1bmsgc2l6ZSBtYW5pcHVsYXRpb24gbnVtYmVyczoKKwkgKi8KKwl4ID0gZGV2LT5uRGF0 YUJ5dGVzUGVyQ2h1bms7CisJLyogV2UgYWx3YXlzIHVzZSBkZXYtPmNodW5rU2hpZnQgYW5k IGRldi0+Y2h1bmtEaXYgKi8KKwlkZXYtPmNodW5rU2hpZnQgPSBTaGlmdHMoeCk7CisJeCA+ Pj0gZGV2LT5jaHVua1NoaWZ0OworCWRldi0+Y2h1bmtEaXYgPSB4OworCS8qIFdlIG9ubHkg dXNlIGNodW5rIG1hc2sgaWYgY2h1bmtEaXYgaXMgMSAqLworCWRldi0+Y2h1bmtNYXNrID0g KDE8PGRldi0+Y2h1bmtTaGlmdCkgLSAxOworCisJLyoKKwkgKiBDYWxjdWxhdGUgY2h1bmtH cm91cEJpdHMuCisJICogV2UgbmVlZCB0byBmaW5kIHRoZSBuZXh0IHBvd2VyIG9mIDIgPiB0 aGFuIGludGVybmFsRW5kQmxvY2sKKwkgKi8KKworCXggPSBkZXYtPm5DaHVua3NQZXJCbG9j ayAqIChkZXYtPmludGVybmFsRW5kQmxvY2sgKyAxKTsKKworCWJpdHMgPSBTaGlmdHNHRSh4 KTsKKworCS8qIFNldCB1cCB0bm9kZSB3aWR0aCBpZiB3aWRlIHRub2RlcyBhcmUgZW5hYmxl ZC4gKi8KKwlpZiAoIWRldi0+d2lkZVRub2Rlc0Rpc2FibGVkKSB7CisJCS8qIGJpdHMgbXVz dCBiZSBldmVuIHNvIHRoYXQgd2UgZW5kIHVwIHdpdGggMzItYml0IHdvcmRzICovCisJCWlm IChiaXRzICYgMSkKKwkJCWJpdHMrKzsKKwkJaWYgKGJpdHMgPCAxNikKKwkJCWRldi0+dG5v ZGVXaWR0aCA9IDE2OworCQllbHNlCisJCQlkZXYtPnRub2RlV2lkdGggPSBiaXRzOworCX0g ZWxzZQorCQlkZXYtPnRub2RlV2lkdGggPSAxNjsKKworCWRldi0+dG5vZGVNYXNrID0gKDE8 PGRldi0+dG5vZGVXaWR0aCktMTsKKworCS8qIExldmVsMCBUbm9kZXMgYXJlIDE2IGJpdHMg b3Igd2lkZXIgKGlmIHdpZGUgdG5vZGVzIGFyZSBlbmFibGVkKSwKKwkgKiBzbyBpZiB0aGUg Yml0d2lkdGggb2YgdGhlCisJICogY2h1bmsgcmFuZ2Ugd2UncmUgdXNpbmcgaXMgZ3JlYXRl ciB0aGFuIDE2IHdlIG5lZWQKKwkgKiB0byBmaWd1cmUgb3V0IGNodW5rIHNoaWZ0IGFuZCBj aHVua0dyb3VwU2l6ZQorCSAqLworCisJaWYgKGJpdHMgPD0gZGV2LT50bm9kZVdpZHRoKQor CQlkZXYtPmNodW5rR3JvdXBCaXRzID0gMDsKKwllbHNlCisJCWRldi0+Y2h1bmtHcm91cEJp dHMgPSBiaXRzIC0gZGV2LT50bm9kZVdpZHRoOworCisKKwlkZXYtPmNodW5rR3JvdXBTaXpl ID0gMSA8PCBkZXYtPmNodW5rR3JvdXBCaXRzOworCisJaWYgKGRldi0+bkNodW5rc1BlckJs b2NrIDwgZGV2LT5jaHVua0dyb3VwU2l6ZSkgeworCQkvKiBXZSBoYXZlIGEgcHJvYmxlbSBi ZWNhdXNlIHRoZSBzb2Z0IGRlbGV0ZSB3b24ndCB3b3JrIGlmCisJCSAqIHRoZSBjaHVuayBn cm91cCBzaXplID4gY2h1bmtzIHBlciBibG9jay4KKwkJICogVGhpcyBjYW4gYmUgcmVtZWRp ZWQgYnkgdXNpbmcgbGFyZ2VyICJ2aXJ0dWFsIGJsb2NrcyIuCisJCSAqLworCQlUKFlBRkZT X1RSQUNFX0FMV0FZUywKKwkJICAoVFNUUigieWFmZnM6IGNodW5rIGdyb3VwIHRvbyBsYXJn ZVxuIiBURU5EU1RSKSkpOworCisJCXJldHVybiBZQUZGU19GQUlMOworCX0KKworCS8qIE9L LCB3ZSd2ZSBmaW5pc2hlZCB2ZXJpZnlpbmcgdGhlIGRldmljZSwgbGV0cyBjb250aW51ZSB3 aXRoIGluaXRpYWxpc2F0aW9uICovCisKKwkvKiBNb3JlIGRldmljZSBpbml0aWFsaXNhdGlv biAqLworCWRldi0+Z2FyYmFnZUNvbGxlY3Rpb25zID0gMDsKKwlkZXYtPnBhc3NpdmVHYXJi YWdlQ29sbGVjdGlvbnMgPSAwOworCWRldi0+Y3VycmVudERpcnR5Q2hlY2tlciA9IDA7CisJ ZGV2LT5idWZmZXJlZEJsb2NrID0gLTE7CisJZGV2LT5kb2luZ0J1ZmZlcmVkQmxvY2tSZXdy aXRlID0gMDsKKwlkZXYtPm5EZWxldGVkRmlsZXMgPSAwOworCWRldi0+bkJhY2tncm91bmRE ZWxldGlvbnMgPSAwOworCWRldi0+blVubGlua2VkRmlsZXMgPSAwOworCWRldi0+ZWNjRml4 ZWQgPSAwOworCWRldi0+ZWNjVW5maXhlZCA9IDA7CisJZGV2LT50YWdzRWNjRml4ZWQgPSAw OworCWRldi0+dGFnc0VjY1VuZml4ZWQgPSAwOworCWRldi0+bkVyYXN1cmVGYWlsdXJlcyA9 IDA7CisJZGV2LT5uRXJhc2VkQmxvY2tzID0gMDsKKwlkZXYtPmlzRG9pbmdHQyA9IDA7CisJ ZGV2LT5oYXNQZW5kaW5nUHJpb3JpdGlzZWRHQ3MgPSAxOyAvKiBBc3N1bWUgdGhlIHdvcnN0 IGZvciBub3csIHdpbGwgZ2V0IGZpeGVkIG9uIGZpcnN0IEdDICovCisKKwkvKiBJbml0aWFs aXNlIHRlbXBvcmFyeSBidWZmZXJzIGFuZCBjYWNoZXMuICovCisJaWYgKCF5YWZmc19Jbml0 aWFsaXNlVGVtcEJ1ZmZlcnMoZGV2KSkKKwkJaW5pdF9mYWlsZWQgPSAxOworCisJZGV2LT5z ckNhY2hlID0gTlVMTDsKKwlkZXYtPmdjQ2xlYW51cExpc3QgPSBOVUxMOworCisKKwlpZiAo IWluaXRfZmFpbGVkICYmCisJICAgIGRldi0+blNob3J0T3BDYWNoZXMgPiAwKSB7CisJCWlu dCBpOworCQl2b2lkICpidWY7CisJCWludCBzckNhY2hlQnl0ZXMgPSBkZXYtPm5TaG9ydE9w Q2FjaGVzICogc2l6ZW9mKHlhZmZzX0NodW5rQ2FjaGUpOworCisJCWlmIChkZXYtPm5TaG9y dE9wQ2FjaGVzID4gWUFGRlNfTUFYX1NIT1JUX09QX0NBQ0hFUykKKwkJCWRldi0+blNob3J0 T3BDYWNoZXMgPSBZQUZGU19NQVhfU0hPUlRfT1BfQ0FDSEVTOworCisJCWRldi0+c3JDYWNo ZSA9ICBZTUFMTE9DKHNyQ2FjaGVCeXRlcyk7CisKKwkJYnVmID0gKF9fdTggKikgZGV2LT5z ckNhY2hlOworCisJCWlmIChkZXYtPnNyQ2FjaGUpCisJCQltZW1zZXQoZGV2LT5zckNhY2hl LCAwLCBzckNhY2hlQnl0ZXMpOworCisJCWZvciAoaSA9IDA7IGkgPCBkZXYtPm5TaG9ydE9w Q2FjaGVzICYmIGJ1ZjsgaSsrKSB7CisJCQlkZXYtPnNyQ2FjaGVbaV0ub2JqZWN0ID0gTlVM TDsKKwkJCWRldi0+c3JDYWNoZVtpXS5sYXN0VXNlID0gMDsKKwkJCWRldi0+c3JDYWNoZVtp XS5kaXJ0eSA9IDA7CisJCQlkZXYtPnNyQ2FjaGVbaV0uZGF0YSA9IGJ1ZiA9IFlNQUxMT0Nf RE1BKGRldi0+dG90YWxCeXRlc1BlckNodW5rKTsKKwkJfQorCQlpZiAoIWJ1ZikKKwkJCWlu aXRfZmFpbGVkID0gMTsKKworCQlkZXYtPnNyTGFzdFVzZSA9IDA7CisJfQorCisJZGV2LT5j YWNoZUhpdHMgPSAwOworCisJaWYgKCFpbml0X2ZhaWxlZCkgeworCQlkZXYtPmdjQ2xlYW51 cExpc3QgPSBZTUFMTE9DKGRldi0+bkNodW5rc1BlckJsb2NrICogc2l6ZW9mKF9fdTMyKSk7 CisJCWlmICghZGV2LT5nY0NsZWFudXBMaXN0KQorCQkJaW5pdF9mYWlsZWQgPSAxOworCX0K KworCWlmIChkZXYtPmlzWWFmZnMyKQorCQlkZXYtPnVzZUhlYWRlckZpbGVTaXplID0gMTsK KworCWlmICghaW5pdF9mYWlsZWQgJiYgIXlhZmZzX0luaXRpYWxpc2VCbG9ja3MoZGV2KSkK KwkJaW5pdF9mYWlsZWQgPSAxOworCisJeWFmZnNfSW5pdGlhbGlzZVRub2RlcyhkZXYpOwor CXlhZmZzX0luaXRpYWxpc2VPYmplY3RzKGRldik7CisKKwlpZiAoIWluaXRfZmFpbGVkICYm ICF5YWZmc19DcmVhdGVJbml0aWFsRGlyZWN0b3JpZXMoZGV2KSkKKwkJaW5pdF9mYWlsZWQg PSAxOworCisKKwlpZiAoIWluaXRfZmFpbGVkKSB7CisJCS8qIE5vdyBzY2FuIHRoZSBmbGFz aC4gKi8KKwkJaWYgKGRldi0+aXNZYWZmczIpIHsKKwkJCWlmICh5YWZmc19DaGVja3BvaW50 UmVzdG9yZShkZXYpKSB7CisJCQkJeWFmZnNfQ2hlY2tPYmplY3REZXRhaWxzTG9hZGVkKGRl di0+cm9vdERpcik7CisJCQkJVChZQUZGU19UUkFDRV9DSEVDS1BPSU5ULAorCQkJCSAgKFRT VFIoInlhZmZzOiByZXN0b3JlZCBmcm9tIGNoZWNrcG9pbnQiIFRFTkRTVFIpKSk7CisJCQl9 IGVsc2UgeworCisJCQkJLyogQ2xlYW4gdXAgdGhlIG1lc3MgY2F1c2VkIGJ5IGFuIGFib3J0 ZWQgY2hlY2twb2ludCBsb2FkCisJCQkJICogYW5kIHNjYW4gYmFja3dhcmRzLgorCQkJCSAq LworCQkJCXlhZmZzX0RlaW5pdGlhbGlzZUJsb2NrcyhkZXYpOworCQkJCXlhZmZzX0RlaW5p dGlhbGlzZVRub2RlcyhkZXYpOworCQkJCXlhZmZzX0RlaW5pdGlhbGlzZU9iamVjdHMoZGV2 KTsKKworCisJCQkJZGV2LT5uRXJhc2VkQmxvY2tzID0gMDsKKwkJCQlkZXYtPm5GcmVlQ2h1 bmtzID0gMDsKKwkJCQlkZXYtPmFsbG9jYXRpb25CbG9jayA9IC0xOworCQkJCWRldi0+YWxs b2NhdGlvblBhZ2UgPSAtMTsKKwkJCQlkZXYtPm5EZWxldGVkRmlsZXMgPSAwOworCQkJCWRl di0+blVubGlua2VkRmlsZXMgPSAwOworCQkJCWRldi0+bkJhY2tncm91bmREZWxldGlvbnMg PSAwOworCQkJCWRldi0+b2xkZXN0RGlydHlTZXF1ZW5jZSA9IDA7CisKKwkJCQlpZiAoIWlu aXRfZmFpbGVkICYmICF5YWZmc19Jbml0aWFsaXNlQmxvY2tzKGRldikpCisJCQkJCWluaXRf ZmFpbGVkID0gMTsKKworCQkJCXlhZmZzX0luaXRpYWxpc2VUbm9kZXMoZGV2KTsKKwkJCQl5 YWZmc19Jbml0aWFsaXNlT2JqZWN0cyhkZXYpOworCisJCQkJaWYgKCFpbml0X2ZhaWxlZCAm JiAheWFmZnNfQ3JlYXRlSW5pdGlhbERpcmVjdG9yaWVzKGRldikpCisJCQkJCWluaXRfZmFp bGVkID0gMTsKKworCQkJCWlmICghaW5pdF9mYWlsZWQgJiYgIXlhZmZzX1NjYW5CYWNrd2Fy ZHMoZGV2KSkKKwkJCQkJaW5pdF9mYWlsZWQgPSAxOworCQkJfQorCQl9IGVsc2UgaWYgKCF5 YWZmc19TY2FuKGRldikpCisJCQkJaW5pdF9mYWlsZWQgPSAxOworCisJCXlhZmZzX1N0cmlw RGVsZXRlZE9iamVjdHMoZGV2KTsKKwl9CisKKwlpZiAoaW5pdF9mYWlsZWQpIHsKKwkJLyog Q2xlYW4gdXAgdGhlIG1lc3MgKi8KKwkJVChZQUZGU19UUkFDRV9UUkFDSU5HLAorCQkgIChU U1RSKCJ5YWZmczogeWFmZnNfR3V0c0luaXRpYWxpc2UoKSBhYm9ydGVkLlxuIiBURU5EU1RS KSkpOworCisJCXlhZmZzX0RlaW5pdGlhbGlzZShkZXYpOworCQlyZXR1cm4gWUFGRlNfRkFJ TDsKKwl9CisKKwkvKiBaZXJvIG91dCBzdGF0cyAqLworCWRldi0+blBhZ2VSZWFkcyA9IDA7 CisJZGV2LT5uUGFnZVdyaXRlcyA9IDA7CisJZGV2LT5uQmxvY2tFcmFzdXJlcyA9IDA7CisJ ZGV2LT5uR0NDb3BpZXMgPSAwOworCWRldi0+blJldHJpZWRXcml0ZXMgPSAwOworCisJZGV2 LT5uUmV0aXJlZEJsb2NrcyA9IDA7CisKKwl5YWZmc19WZXJpZnlGcmVlQ2h1bmtzKGRldik7 CisJeWFmZnNfVmVyaWZ5QmxvY2tzKGRldik7CisKKworCVQoWUFGRlNfVFJBQ0VfVFJBQ0lO RywKKwkgIChUU1RSKCJ5YWZmczogeWFmZnNfR3V0c0luaXRpYWxpc2UoKSBkb25lLlxuIiBU RU5EU1RSKSkpOworCXJldHVybiBZQUZGU19PSzsKKworfQorCit2b2lkIHlhZmZzX0RlaW5p dGlhbGlzZSh5YWZmc19EZXZpY2UgKmRldikKK3sKKwlpZiAoZGV2LT5pc01vdW50ZWQpIHsK KwkJaW50IGk7CisKKwkJeWFmZnNfRGVpbml0aWFsaXNlQmxvY2tzKGRldik7CisJCXlhZmZz X0RlaW5pdGlhbGlzZVRub2RlcyhkZXYpOworCQl5YWZmc19EZWluaXRpYWxpc2VPYmplY3Rz KGRldik7CisJCWlmIChkZXYtPm5TaG9ydE9wQ2FjaGVzID4gMCAmJgorCQkgICAgZGV2LT5z ckNhY2hlKSB7CisKKwkJCWZvciAoaSA9IDA7IGkgPCBkZXYtPm5TaG9ydE9wQ2FjaGVzOyBp KyspIHsKKwkJCQlpZiAoZGV2LT5zckNhY2hlW2ldLmRhdGEpCisJCQkJCVlGUkVFKGRldi0+ c3JDYWNoZVtpXS5kYXRhKTsKKwkJCQlkZXYtPnNyQ2FjaGVbaV0uZGF0YSA9IE5VTEw7CisJ CQl9CisKKwkJCVlGUkVFKGRldi0+c3JDYWNoZSk7CisJCQlkZXYtPnNyQ2FjaGUgPSBOVUxM OworCQl9CisKKwkJWUZSRUUoZGV2LT5nY0NsZWFudXBMaXN0KTsKKworCQlmb3IgKGkgPSAw OyBpIDwgWUFGRlNfTl9URU1QX0JVRkZFUlM7IGkrKykKKwkJCVlGUkVFKGRldi0+dGVtcEJ1 ZmZlcltpXS5idWZmZXIpOworCisJCWRldi0+aXNNb3VudGVkID0gMDsKKworCQlpZiAoZGV2 LT5kZWluaXRpYWxpc2VOQU5EKQorCQkJZGV2LT5kZWluaXRpYWxpc2VOQU5EKGRldik7CisJ fQorfQorCitzdGF0aWMgaW50IHlhZmZzX0NvdW50RnJlZUNodW5rcyh5YWZmc19EZXZpY2Ug KmRldikKK3sKKwlpbnQgbkZyZWU7CisJaW50IGI7CisKKwl5YWZmc19CbG9ja0luZm8gKmJs azsKKworCWZvciAobkZyZWUgPSAwLCBiID0gZGV2LT5pbnRlcm5hbFN0YXJ0QmxvY2s7IGIg PD0gZGV2LT5pbnRlcm5hbEVuZEJsb2NrOworCQkJYisrKSB7CisJCWJsayA9IHlhZmZzX0dl dEJsb2NrSW5mbyhkZXYsIGIpOworCisJCXN3aXRjaCAoYmxrLT5ibG9ja1N0YXRlKSB7CisJ CWNhc2UgWUFGRlNfQkxPQ0tfU1RBVEVfRU1QVFk6CisJCWNhc2UgWUFGRlNfQkxPQ0tfU1RB VEVfQUxMT0NBVElORzoKKwkJY2FzZSBZQUZGU19CTE9DS19TVEFURV9DT0xMRUNUSU5HOgor CQljYXNlIFlBRkZTX0JMT0NLX1NUQVRFX0ZVTEw6CisJCQluRnJlZSArPQorCQkJICAgIChk ZXYtPm5DaHVua3NQZXJCbG9jayAtIGJsay0+cGFnZXNJblVzZSArCisJCQkgICAgIGJsay0+ c29mdERlbGV0aW9ucyk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9 CisJfQorCisJcmV0dXJuIG5GcmVlOworfQorCitpbnQgeWFmZnNfR2V0TnVtYmVyT2ZGcmVl Q2h1bmtzKHlhZmZzX0RldmljZSAqZGV2KQoreworCS8qIFRoaXMgaXMgd2hhdCB3ZSByZXBv cnQgdG8gdGhlIG91dHNpZGUgd29ybGQgKi8KKworCWludCBuRnJlZTsKKwlpbnQgbkRpcnR5 Q2FjaGVDaHVua3M7CisJaW50IGJsb2Nrc0ZvckNoZWNrcG9pbnQ7CisJaW50IGk7CisKKyNp ZiAxCisJbkZyZWUgPSBkZXYtPm5GcmVlQ2h1bmtzOworI2Vsc2UKKwluRnJlZSA9IHlhZmZz X0NvdW50RnJlZUNodW5rcyhkZXYpOworI2VuZGlmCisKKwluRnJlZSArPSBkZXYtPm5EZWxl dGVkRmlsZXM7CisKKwkvKiBOb3cgY291bnQgdGhlIG51bWJlciBvZiBkaXJ0eSBjaHVua3Mg aW4gdGhlIGNhY2hlIGFuZCBzdWJ0cmFjdCB0aG9zZSAqLworCisJZm9yIChuRGlydHlDYWNo ZUNodW5rcyA9IDAsIGkgPSAwOyBpIDwgZGV2LT5uU2hvcnRPcENhY2hlczsgaSsrKSB7CisJ CWlmIChkZXYtPnNyQ2FjaGVbaV0uZGlydHkpCisJCQluRGlydHlDYWNoZUNodW5rcysrOwor CX0KKworCW5GcmVlIC09IG5EaXJ0eUNhY2hlQ2h1bmtzOworCisJbkZyZWUgLT0gKChkZXYt Pm5SZXNlcnZlZEJsb2NrcyArIDEpICogZGV2LT5uQ2h1bmtzUGVyQmxvY2spOworCisJLyog Tm93IHdlIGZpZ3VyZSBvdXQgaG93IG11Y2ggdG8gcmVzZXJ2ZSBmb3IgdGhlIGNoZWNrcG9p bnQgYW5kIHJlcG9ydCB0aGF0Li4uICovCisJYmxvY2tzRm9yQ2hlY2twb2ludCA9IHlhZmZz X0NhbGNDaGVja3BvaW50QmxvY2tzUmVxdWlyZWQoZGV2KSAtIGRldi0+YmxvY2tzSW5DaGVj a3BvaW50OworCWlmIChibG9ja3NGb3JDaGVja3BvaW50IDwgMCkKKwkJYmxvY2tzRm9yQ2hl Y2twb2ludCA9IDA7CisKKwluRnJlZSAtPSAoYmxvY2tzRm9yQ2hlY2twb2ludCAqIGRldi0+ bkNodW5rc1BlckJsb2NrKTsKKworCWlmIChuRnJlZSA8IDApCisJCW5GcmVlID0gMDsKKwor CXJldHVybiBuRnJlZTsKKworfQorCitzdGF0aWMgaW50IHlhZmZzX2ZyZWVWZXJpZmljYXRp b25GYWlsdXJlczsKKworc3RhdGljIHZvaWQgeWFmZnNfVmVyaWZ5RnJlZUNodW5rcyh5YWZm c19EZXZpY2UgKmRldikKK3sKKwlpbnQgY291bnRlZDsKKwlpbnQgZGlmZmVyZW5jZTsKKwor CWlmICh5YWZmc19Ta2lwVmVyaWZpY2F0aW9uKGRldikpCisJCXJldHVybjsKKworCWNvdW50 ZWQgPSB5YWZmc19Db3VudEZyZWVDaHVua3MoZGV2KTsKKworCWRpZmZlcmVuY2UgPSBkZXYt Pm5GcmVlQ2h1bmtzIC0gY291bnRlZDsKKworCWlmIChkaWZmZXJlbmNlKSB7CisJCVQoWUFG RlNfVFJBQ0VfQUxXQVlTLAorCQkgIChUU1RSKCJGcmVlY2h1bmtzIHZlcmlmaWNhdGlvbiBm YWlsdXJlICVkICVkICVkIiBURU5EU1RSKSwKKwkJICAgZGV2LT5uRnJlZUNodW5rcywgY291 bnRlZCwgZGlmZmVyZW5jZSkpOworCQl5YWZmc19mcmVlVmVyaWZpY2F0aW9uRmFpbHVyZXMr KzsKKwl9Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSBZQUZGUyB0ZXN0IGNvZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUg eWFmZnNfQ2hlY2tTdHJ1Y3Qoc3RydWN0dXJlLCBzeXplLCBuYW1lKSBcCisJZG8geyBcCisJ CWlmIChzaXplb2Yoc3RydWN0dXJlKSAhPSBzeXplKSB7IFwKKwkJCVQoWUFGRlNfVFJBQ0Vf QUxXQVlTLCAoVFNUUigiJXMgc2hvdWxkIGJlICVkIGJ1dCBpcyAlZFxuIiBURU5EU1RSKSxc CisJCQkJbmFtZSwgc3l6ZSwgc2l6ZW9mKHN0cnVjdHVyZSkpKTsgXAorCQkJcmV0dXJuIFlB RkZTX0ZBSUw7IFwKKwkJfSBcCisJfSB3aGlsZSAoMCkKKworc3RhdGljIGludCB5YWZmc19D aGVja1N0cnVjdHVyZXModm9pZCkKK3sKKy8qICAgICAgeWFmZnNfQ2hlY2tTdHJ1Y3QoeWFm ZnNfVGFncyw4LCJ5YWZmc19UYWdzIik7ICovCisvKiAgICAgIHlhZmZzX0NoZWNrU3RydWN0 KHlhZmZzX1RhZ3NVbmlvbiw4LCJ5YWZmc19UYWdzVW5pb24iKTsgKi8KKy8qICAgICAgeWFm ZnNfQ2hlY2tTdHJ1Y3QoeWFmZnNfU3BhcmUsMTYsInlhZmZzX1NwYXJlIik7ICovCisjaWZu ZGVmIENPTkZJR19ZQUZGU19UTk9ERV9MSVNUX0RFQlVHCisJeWFmZnNfQ2hlY2tTdHJ1Y3Qo eWFmZnNfVG5vZGUsIDIgKiBZQUZGU19OVE5PREVTX0xFVkVMMCwgInlhZmZzX1Rub2RlIik7 CisjZW5kaWYKKyNpZm5kZWYgQ09ORklHX1lBRkZTX1dJTkNFCisJeWFmZnNfQ2hlY2tTdHJ1 Y3QoeWFmZnNfT2JqZWN0SGVhZGVyLCA1MTIsICJ5YWZmc19PYmplY3RIZWFkZXIiKTsKKyNl bmRpZgorCXJldHVybiBZQUZGU19PSzsKK30KZGlmZiAtdSAtLW5ldy1maWxlIC0tcmVjdXJz aXZlIGxpbnV4LTIuNi4yOS42Lm9yaWcvZnMveWFmZnMyL3lhZmZzX2d1dHMuaCBsaW51eC0y LjYuMjkuNi5tb2QvZnMveWFmZnMyL3lhZmZzX2d1dHMuaAotLS0gbGludXgtMi42LjI5LjYu b3JpZy9mcy95YWZmczIveWFmZnNfZ3V0cy5oCTE5NjktMTItMzEgMTc6MDA6MDAuMDAwMDAw MDAwIC0wNzAwCisrKyBsaW51eC0yLjYuMjkuNi5tb2QvZnMveWFmZnMyL3lhZmZzX2d1dHMu aAkyMDA5LTA3LTIxIDExOjI4OjE4LjAwMDAwMDAwMCAtMDcwMApAQCAtMCwwICsxLDkwNCBA QAorLyoKKyAqIFlBRkZTOiBZZXQgYW5vdGhlciBGbGFzaCBGaWxlIFN5c3RlbSAuIEEgTkFO RC1mbGFzaCBzcGVjaWZpYyBmaWxlIHN5c3RlbS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIw MDItMjAwNyBBbGVwaCBPbmUgTHRkLgorICogICBmb3IgVG9ieSBDaHVyY2hpbGwgTHRkIGFu ZCBCcmlnaHRzdGFyIEVuZ2luZWVyaW5nCisgKgorICogQ3JlYXRlZCBieSBDaGFybGVzIE1h bm5pbmcgPGNoYXJsZXNAYWxlcGgxLmNvLnVrPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cisg KiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSB2ZXJzaW9uIDIuMSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24uCisgKgorICogTm90ZTogT25seSBZQUZGUyBoZWFkZXJzIGFyZSBM R1BMLCBZQUZGUyBDIGNvZGUgaXMgY292ZXJlZCBieSBHUEwuCisgKi8KKworI2lmbmRlZiBf X1lBRkZTX0dVVFNfSF9fCisjZGVmaW5lIF9fWUFGRlNfR1VUU19IX18KKworI2luY2x1ZGUg ImRldmV4dHJhcy5oIgorI2luY2x1ZGUgInlwb3J0ZW52LmgiCisKKyNkZWZpbmUgWUFGRlNf T0sJMQorI2RlZmluZSBZQUZGU19GQUlMICAwCisKKy8qIEdpdmUgdXMgYSAgWT0weDU5LAor ICogR2l2ZSB1cyBhbiBBPTB4NDEsCisgKiBHaXZlIHVzIGFuIEZGPTB4RkYKKyAqIEdpdmUg dXMgYW4gUz0weDUzCisgKiBBbmQgd2hhdCBoYXZlIHdlIGdvdC4uLgorICovCisjZGVmaW5l IFlBRkZTX01BR0lDCQkJMHg1OTQxRkY1MworCisjZGVmaW5lIFlBRkZTX05UTk9ERVNfTEVW RUwwCSAgCTE2CisjZGVmaW5lIFlBRkZTX1ROT0RFU19MRVZFTDBfQklUUwk0CisjZGVmaW5l IFlBRkZTX1ROT0RFU19MRVZFTDBfTUFTSwkweGYKKworI2RlZmluZSBZQUZGU19OVE5PREVT X0lOVEVSTkFMIAkJKFlBRkZTX05UTk9ERVNfTEVWRUwwIC8gMikKKyNkZWZpbmUgWUFGRlNf VE5PREVTX0lOVEVSTkFMX0JJVFMgCShZQUZGU19UTk9ERVNfTEVWRUwwX0JJVFMgLSAxKQor I2RlZmluZSBZQUZGU19UTk9ERVNfSU5URVJOQUxfTUFTSwkweDcKKyNkZWZpbmUgWUFGRlNf VE5PREVTX01BWF9MRVZFTAkJNgorCisjaWZuZGVmIENPTkZJR19ZQUZGU19OT19ZQUZGUzEK KyNkZWZpbmUgWUFGRlNfQllURVNfUEVSX1NQQVJFCQkxNgorI2RlZmluZSBZQUZGU19CWVRF U19QRVJfQ0hVTksJCTUxMgorI2RlZmluZSBZQUZGU19DSFVOS19TSVpFX1NISUZUCQk5Cisj ZGVmaW5lIFlBRkZTX0NIVU5LU19QRVJfQkxPQ0sJCTMyCisjZGVmaW5lIFlBRkZTX0JZVEVT X1BFUl9CTE9DSwkJKFlBRkZTX0NIVU5LU19QRVJfQkxPQ0sqWUFGRlNfQllURVNfUEVSX0NI VU5LKQorI2VuZGlmCisKKyNkZWZpbmUgWUFGRlNfTUlOX1lBRkZTMl9DSFVOS19TSVpFIAkx MDI0CisjZGVmaW5lIFlBRkZTX01JTl9ZQUZGUzJfU1BBUkVfU0laRQkzMgorCisjZGVmaW5l IFlBRkZTX01BWF9DSFVOS19JRAkJMHgwMDBGRkZGRgorCisjZGVmaW5lIFlBRkZTX1VOVVNF RF9PQkpFQ1RfSUQJCTB4MDAwM0ZGRkYKKworI2RlZmluZSBZQUZGU19BTExPQ0FUSU9OX05P QkpFQ1RTCTEwMAorI2RlZmluZSBZQUZGU19BTExPQ0FUSU9OX05UTk9ERVMJMTAwCisjZGVm aW5lIFlBRkZTX0FMTE9DQVRJT05fTkxJTktTCQkxMDAKKworI2RlZmluZSBZQUZGU19OT0JK RUNUX0JVQ0tFVFMJCTI1NgorCisKKyNkZWZpbmUgWUFGRlNfT0JKRUNUX1NQQUNFCQkweDQw MDAwCisKKyNkZWZpbmUgWUFGRlNfQ0hFQ0tQT0lOVF9WRVJTSU9OIAkzCisKKyNpZmRlZiBD T05GSUdfWUFGRlNfVU5JQ09ERQorI2RlZmluZSBZQUZGU19NQVhfTkFNRV9MRU5HVEgJCTEy NworI2RlZmluZSBZQUZGU19NQVhfQUxJQVNfTEVOR1RICQk3OQorI2Vsc2UKKyNkZWZpbmUg WUFGRlNfTUFYX05BTUVfTEVOR1RICQkyNTUKKyNkZWZpbmUgWUFGRlNfTUFYX0FMSUFTX0xF TkdUSAkJMTU5CisjZW5kaWYKKworI2RlZmluZSBZQUZGU19TSE9SVF9OQU1FX0xFTkdUSAkJ MTUKKworLyogU29tZSBzcGVjaWFsIG9iamVjdCBpZHMgZm9yIHBzZXVkbyBvYmplY3RzICov CisjZGVmaW5lIFlBRkZTX09CSkVDVElEX1JPT1QJCTEKKyNkZWZpbmUgWUFGRlNfT0JKRUNU SURfTE9TVE5GT1VORAkyCisjZGVmaW5lIFlBRkZTX09CSkVDVElEX1VOTElOS0VECQkzCisj ZGVmaW5lIFlBRkZTX09CSkVDVElEX0RFTEVURUQJCTQKKworLyogU3NldWRvIG9iamVjdCBp ZHMgZm9yIGNoZWNrcG9pbnRpbmcgKi8KKyNkZWZpbmUgWUFGRlNfT0JKRUNUSURfU0JfSEVB REVSCTB4MTAKKyNkZWZpbmUgWUFGRlNfT0JKRUNUSURfQ0hFQ0tQT0lOVF9EQVRBCTB4MjAK KyNkZWZpbmUgWUFGRlNfU0VRVUVOQ0VfQ0hFQ0tQT0lOVF9EQVRBICAweDIxCisKKy8qICov CisKKyNkZWZpbmUgWUFGRlNfTUFYX1NIT1JUX09QX0NBQ0hFUwkyMAorCisjZGVmaW5lIFlB RkZTX05fVEVNUF9CVUZGRVJTCQk2CisKKy8qIFdlIGxpbWl0IHRoZSBudW1iZXIgYXR0ZW1w dHMgYXQgc3VjZXNzZnVsbHkgc2F2aW5nIGEgY2h1bmsgb2YgZGF0YS4KKyAqIFNtYWxsLXBh Z2UgZGV2aWNlcyBoYXZlIDMyIHBhZ2VzIHBlciBibG9jazsgbGFyZ2UtcGFnZSBkZXZpY2Vz IGhhdmUgNjQuCisgKiBEZWZhdWx0IHRvIHNvbWV0aGluZyBpbiB0aGUgb3JkZXIgb2YgNSB0 byAxMCBibG9ja3Mgd29ydGggb2YgY2h1bmtzLgorICovCisjZGVmaW5lIFlBRkZTX1dSX0FU VEVNUFRTCQkoNSo2NCkKKworLyogU2VxdWVuY2UgbnVtYmVycyBhcmUgdXNlZCBpbiBZQUZG UzIgdG8gZGV0ZXJtaW5lIGJsb2NrIGFsbG9jYXRpb24gb3JkZXIuCisgKiBUaGUgcmFuZ2Ug aXMgbGltaXRlZCBzbGlnaHRseSB0byBoZWxwIGRpc3Rpbmd1aXNoIGJhZCBudW1iZXJzIGZy b20gZ29vZC4KKyAqIFRoaXMgYWxzbyBhbGxvd3MgdXMgdG8gcGVyaGFwcyBpbiB0aGUgZnV0 dXJlIHVzZSBzcGVjaWFsIG51bWJlcnMgZm9yCisgKiBzcGVjaWFsIHB1cnBvc2VzLgorICog RUZGRkZGMDAgYWxsb3dzIHRoZSBhbGxvY2F0aW9uIG9mIDggYmxvY2tzIHBlciBzZWNvbmQg KH4xTWJ5dGVzKSBmb3IgMTUgeWVhcnMsCisgKiBhbmQgaXMgYSBsYXJnZXIgbnVtYmVyIHRo YW4gdGhlIGxpZmV0aW1lIG9mIGEgMkdCIGRldmljZS4KKyAqLworI2RlZmluZSBZQUZGU19M T1dFU1RfU0VRVUVOQ0VfTlVNQkVSCTB4MDAwMDEwMDAKKyNkZWZpbmUgWUFGRlNfSElHSEVT VF9TRVFVRU5DRV9OVU1CRVIJMHhFRkZGRkYwMAorCisvKiBTcGVjaWFsIHNlcXVlbmNlIG51 bWJlciBmb3IgYmFkIGJsb2NrIHRoYXQgZmFpbGVkIHRvIGJlIG1hcmtlZCBiYWQgKi8KKyNk ZWZpbmUgWUFGRlNfU0VRVUVOQ0VfQkFEX0JMT0NLCTB4RkZGRjAwMDAKKworLyogQ2h1bmtD YWNoZSBpcyB1c2VkIGZvciBzaG9ydCByZWFkL3dyaXRlIG9wZXJhdGlvbnMuKi8KK3R5cGVk ZWYgc3RydWN0IHsKKwlzdHJ1Y3QgeWFmZnNfT2JqZWN0U3RydWN0ICpvYmplY3Q7CisJaW50 IGNodW5rSWQ7CisJaW50IGxhc3RVc2U7CisJaW50IGRpcnR5OworCWludCBuQnl0ZXM7CQkv KiBPbmx5IHZhbGlkIGlmIHRoZSBjYWNoZSBpcyBkaXJ0eSAqLworCWludCBsb2NrZWQ7CQkv KiBDYW4ndCBwdXNoIG91dCBvciBmbHVzaCB3aGlsZSBsb2NrZWQuICovCisjaWZkZWYgQ09O RklHX1lBRkZTX1lBRkZTMgorCV9fdTggKmRhdGE7CisjZWxzZQorCV9fdTggZGF0YVtZQUZG U19CWVRFU19QRVJfQ0hVTktdOworI2VuZGlmCit9IHlhZmZzX0NodW5rQ2FjaGU7CisKKwor CisvKiBUYWdzIHN0cnVjdHVyZXMgaW4gUkFNCisgKiBOQiBUaGlzIHVzZXMgYml0ZmllbGQu IEJpdGZpZWxkcyBzaG91bGQgbm90IHN0cmFkZGxlIGEgdTMyIGJvdW5kYXJ5IG90aGVyd2lz ZQorICogdGhlIHN0cnVjdHVyZSBzaXplIHdpbGwgZ2V0IGJsb3duIG91dC4KKyAqLworCisj aWZuZGVmIENPTkZJR19ZQUZGU19OT19ZQUZGUzEKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNp Z25lZCBjaHVua0lkOjIwOworCXVuc2lnbmVkIHNlcmlhbE51bWJlcjoyOworCXVuc2lnbmVk IGJ5dGVDb3VudExTQjoxMDsKKwl1bnNpZ25lZCBvYmplY3RJZDoxODsKKwl1bnNpZ25lZCBl Y2M6MTI7CisJdW5zaWduZWQgYnl0ZUNvdW50TVNCOjI7Cit9IHlhZmZzX1RhZ3M7CisKK3R5 cGVkZWYgdW5pb24geworCXlhZmZzX1RhZ3MgYXNUYWdzOworCV9fdTggYXNCeXRlc1s4XTsK K30geWFmZnNfVGFnc1VuaW9uOworCisjZW5kaWYKKworLyogU3R1ZmYgdXNlZCBmb3IgZXh0 ZW5kZWQgdGFncyBpbiBZQUZGUzIgKi8KKwordHlwZWRlZiBlbnVtIHsKKwlZQUZGU19FQ0Nf UkVTVUxUX1VOS05PV04sCisJWUFGRlNfRUNDX1JFU1VMVF9OT19FUlJPUiwKKwlZQUZGU19F Q0NfUkVTVUxUX0ZJWEVELAorCVlBRkZTX0VDQ19SRVNVTFRfVU5GSVhFRAorfSB5YWZmc19F Q0NSZXN1bHQ7CisKK3R5cGVkZWYgZW51bSB7CisJWUFGRlNfT0JKRUNUX1RZUEVfVU5LTk9X TiwKKwlZQUZGU19PQkpFQ1RfVFlQRV9GSUxFLAorCVlBRkZTX09CSkVDVF9UWVBFX1NZTUxJ TkssCisJWUFGRlNfT0JKRUNUX1RZUEVfRElSRUNUT1JZLAorCVlBRkZTX09CSkVDVF9UWVBF X0hBUkRMSU5LLAorCVlBRkZTX09CSkVDVF9UWVBFX1NQRUNJQUwKK30geWFmZnNfT2JqZWN0 VHlwZTsKKworI2RlZmluZSBZQUZGU19PQkpFQ1RfVFlQRV9NQVggWUFGRlNfT0JKRUNUX1RZ UEVfU1BFQ0lBTAorCit0eXBlZGVmIHN0cnVjdCB7CisKKwl1bnNpZ25lZCB2YWxpZE1hcmtl cjA7CisJdW5zaWduZWQgY2h1bmtVc2VkOwkvKiAgU3RhdHVzIG9mIHRoZSBjaHVuazogdXNl ZCBvciB1bnVzZWQgKi8KKwl1bnNpZ25lZCBvYmplY3RJZDsJLyogSWYgMCB0aGVuIHRoaXMg aXMgbm90IHBhcnQgb2YgYW4gb2JqZWN0ICh1bnVzZWQpICovCisJdW5zaWduZWQgY2h1bmtJ ZDsJLyogSWYgMCB0aGVuIHRoaXMgaXMgYSBoZWFkZXIsIGVsc2UgYSBkYXRhIGNodW5rICov CisJdW5zaWduZWQgYnl0ZUNvdW50OwkvKiBPbmx5IHZhbGlkIGZvciBkYXRhIGNodW5rcyAq LworCisJLyogVGhlIGZvbGxvd2luZyBzdHVmZiBvbmx5IGhhcyBtZWFuaW5nIHdoZW4gd2Ug cmVhZCAqLworCXlhZmZzX0VDQ1Jlc3VsdCBlY2NSZXN1bHQ7CisJdW5zaWduZWQgYmxvY2tC YWQ7CisKKwkvKiBZQUZGUyAxIHN0dWZmICovCisJdW5zaWduZWQgY2h1bmtEZWxldGVkOwkv KiBUaGUgY2h1bmsgaXMgbWFya2VkIGRlbGV0ZWQgKi8KKwl1bnNpZ25lZCBzZXJpYWxOdW1i ZXI7CS8qIFlhZmZzMSAyLWJpdCBzZXJpYWwgbnVtYmVyICovCisKKwkvKiBZQUZGUzIgc3R1 ZmYgKi8KKwl1bnNpZ25lZCBzZXF1ZW5jZU51bWJlcjsJLyogVGhlIHNlcXVlbmNlIG51bWJl ciBvZiB0aGlzIGJsb2NrICovCisKKwkvKiBFeHRyYSBpbmZvIGlmIHRoaXMgaXMgYW4gb2Jq ZWN0IGhlYWRlciAoWUFGRlMyIG9ubHkpICovCisKKwl1bnNpZ25lZCBleHRyYUhlYWRlcklu Zm9BdmFpbGFibGU7CS8qIFRoZXJlIGlzIGV4dHJhIGluZm8gYXZhaWxhYmxlIGlmIHRoaXMg aXMgbm90IHplcm8gKi8KKwl1bnNpZ25lZCBleHRyYVBhcmVudE9iamVjdElkOwkvKiBUaGUg cGFyZW50IG9iamVjdCAqLworCXVuc2lnbmVkIGV4dHJhSXNTaHJpbmtIZWFkZXI7CS8qIElz IGl0IGEgc2hyaW5rIGhlYWRlcj8gKi8KKwl1bnNpZ25lZCBleHRyYVNoYWRvd3M7CQkvKiBE b2VzIHRoaXMgc2hhZG93IGFub3RoZXIgb2JqZWN0PyAqLworCisJeWFmZnNfT2JqZWN0VHlw ZSBleHRyYU9iamVjdFR5cGU7CS8qIFdoYXQgb2JqZWN0IHR5cGU/ICovCisKKwl1bnNpZ25l ZCBleHRyYUZpbGVMZW5ndGg7CQkvKiBMZW5ndGggaWYgaXQgaXMgYSBmaWxlICovCisJdW5z aWduZWQgZXh0cmFFcXVpdmFsZW50T2JqZWN0SWQ7CS8qIEVxdWl2YWxlbnQgb2JqZWN0IElk IGlmIGl0IGlzIGEgaGFyZCBsaW5rICovCisKKwl1bnNpZ25lZCB2YWxpZE1hcmtlcjE7CisK K30geWFmZnNfRXh0ZW5kZWRUYWdzOworCisvKiBTcGFyZSBzdHJ1Y3R1cmUgZm9yIFlBRkZT MSAqLwordHlwZWRlZiBzdHJ1Y3QgeworCV9fdTggdGFnQnl0ZTA7CisJX191OCB0YWdCeXRl MTsKKwlfX3U4IHRhZ0J5dGUyOworCV9fdTggdGFnQnl0ZTM7CisJX191OCBwYWdlU3RhdHVz OwkvKiBzZXQgdG8gMCB0byBkZWxldGUgdGhlIGNodW5rICovCisJX191OCBibG9ja1N0YXR1 czsKKwlfX3U4IHRhZ0J5dGU0OworCV9fdTggdGFnQnl0ZTU7CisJX191OCBlY2MxWzNdOwor CV9fdTggdGFnQnl0ZTY7CisJX191OCB0YWdCeXRlNzsKKwlfX3U4IGVjYzJbM107Cit9IHlh ZmZzX1NwYXJlOworCisvKlNwZWNpYWwgc3RydWN0dXJlIGZvciBwYXNzaW5nIHRocm91Z2gg dG8gbXRkICovCitzdHJ1Y3QgeWFmZnNfTkFORFNwYXJlIHsKKwl5YWZmc19TcGFyZSBzcGFy ZTsKKwlpbnQgZWNjcmVzMTsKKwlpbnQgZWNjcmVzMjsKK307CisKKy8qIEJsb2NrIGRhdGEg aW4gUkFNICovCisKK3R5cGVkZWYgZW51bSB7CisJWUFGRlNfQkxPQ0tfU1RBVEVfVU5LTk9X TiA9IDAsCisKKwlZQUZGU19CTE9DS19TVEFURV9TQ0FOTklORywKKwlZQUZGU19CTE9DS19T VEFURV9ORUVEU19TQ0FOTklORywKKwkvKiBUaGUgYmxvY2sgbWlnaHQgaGF2ZSBzb21ldGhp bmcgb24gaXQgKGllIGl0IGlzIGFsbG9jYXRpbmcgb3IgZnVsbCwgcGVyaGFwcyBlbXB0eSkK KwkgKiBidXQgaXQgbmVlZHMgdG8gYmUgc2Nhbm5lZCB0byBkZXRlcm1pbmUgaXRzIHRydWUg c3RhdGUuCisJICogVGhpcyBzdGF0ZSBpcyBvbmx5IHZhbGlkIGR1cmluZyB5YWZmc19TY2Fu LgorCSAqIE5CIFdlIHRvbGVyYXRlIGVtcHR5IGJlY2F1c2UgdGhlIHByZS1zY2FubmVyIG1p Z2h0IGJlIGluY2FwYWJsZSBvZiBkZWNpZGluZworCSAqIEhvd2V2ZXIsIGlmIHRoaXMgc3Rh dGUgaXMgcmV0dXJuZWQgb24gYSBZQUZGUzIgZGV2aWNlLCB0aGVuIHdlIGV4cGVjdCBhIHNl cXVlbmNlIG51bWJlcgorCSAqLworCisJWUFGRlNfQkxPQ0tfU1RBVEVfRU1QVFksCisJLyog VGhpcyBibG9jayBpcyBlbXB0eSAqLworCisJWUFGRlNfQkxPQ0tfU1RBVEVfQUxMT0NBVElO RywKKwkvKiBUaGlzIGJsb2NrIGlzIHBhcnRpYWxseSBhbGxvY2F0ZWQuCisJICogQXQgbGVh c3Qgb25lIHBhZ2UgaG9sZHMgdmFsaWQgZGF0YS4KKwkgKiBUaGlzIGlzIHRoZSBvbmUgY3Vy cmVudGx5IGJlaW5nIHVzZWQgZm9yIHBhZ2UKKwkgKiBhbGxvY2F0aW9uLiBTaG91bGQgbmV2 ZXIgYmUgbW9yZSB0aGFuIG9uZSBvZiB0aGVzZQorCSAqLworCisJWUFGRlNfQkxPQ0tfU1RB VEVfRlVMTCwKKwkvKiBBbGwgdGhlIHBhZ2VzIGluIHRoaXMgYmxvY2sgaGF2ZSBiZWVuIGFs bG9jYXRlZC4KKwkgKi8KKworCVlBRkZTX0JMT0NLX1NUQVRFX0RJUlRZLAorCS8qIEFsbCBw YWdlcyBoYXZlIGJlZW4gYWxsb2NhdGVkIGFuZCBkZWxldGVkLgorCSAqIEVyYXNlIG1lLCBy ZXVzZSBtZS4KKwkgKi8KKworCVlBRkZTX0JMT0NLX1NUQVRFX0NIRUNLUE9JTlQsCisJLyog VGhpcyBibG9jayBpcyBhc3NpZ25lZCB0byBob2xkaW5nIGNoZWNrcG9pbnQgZGF0YS4KKwkg Ki8KKworCVlBRkZTX0JMT0NLX1NUQVRFX0NPTExFQ1RJTkcsCisJLyogVGhpcyBibG9jayBp cyBiZWluZyBnYXJiYWdlIGNvbGxlY3RlZCAqLworCisJWUFGRlNfQkxPQ0tfU1RBVEVfREVB RAorCS8qIFRoaXMgYmxvY2sgaGFzIGZhaWxlZCBhbmQgaXMgbm90IGluIHVzZSAqLworfSB5 YWZmc19CbG9ja1N0YXRlOworCisjZGVmaW5lCVlBRkZTX05VTUJFUl9PRl9CTE9DS19TVEFU RVMgKFlBRkZTX0JMT0NLX1NUQVRFX0RFQUQgKyAxKQorCisKK3R5cGVkZWYgc3RydWN0IHsK KworCWludCBzb2Z0RGVsZXRpb25zOjEwOwkvKiBudW1iZXIgb2Ygc29mdCBkZWxldGVkIHBh Z2VzICovCisJaW50IHBhZ2VzSW5Vc2U6MTA7CS8qIG51bWJlciBvZiBwYWdlcyBpbiB1c2Ug Ki8KKwl1bnNpZ25lZCBibG9ja1N0YXRlOjQ7CS8qIE9uZSBvZiB0aGUgYWJvdmUgYmxvY2sg c3RhdGVzLiBOQiB1c2UgdW5zaWduZWQgYmVjYXVzZSBlbnVtIGlzIHNvbWV0aW1lcyBhbiBp bnQgKi8KKwlfX3UzMiBuZWVkc1JldGlyaW5nOjE7CS8qIERhdGEgaGFzIGZhaWxlZCBvbiB0 aGlzIGJsb2NrLCBuZWVkIHRvIGdldCB2YWxpZCBkYXRhIG9mZiAqLworCQkJCS8qIGFuZCBy ZXRpcmUgdGhlIGJsb2NrLiAqLworCV9fdTMyIHNraXBFcmFzZWRDaGVjazoxOyAvKiBJZiB0 aGlzIGlzIHNldCB3ZSBjYW4gc2tpcCB0aGUgZXJhc2VkIGNoZWNrIG9uIHRoaXMgYmxvY2sg Ki8KKwlfX3UzMiBnY1ByaW9yaXRpc2U6MTsgCS8qIEFuIEVDQyBjaGVjayBvciBibGFuayBj aGVjayBoYXMgZmFpbGVkIG9uIHRoaXMgYmxvY2suCisJCQkJICAgSXQgc2hvdWxkIGJlIHBy aW9yaXRpc2VkIGZvciBHQyAqLworCV9fdTMyIGNodW5rRXJyb3JTdHJpa2VzOjM7IC8qIEhv dyBtYW55IHRpbWVzIHdlJ3ZlIGhhZCBlY2MgZXRjIGZhaWx1cmVzIG9uIHRoaXMgYmxvY2sg YW5kIHRyaWVkIHRvIHJldXNlIGl0ICovCisKKyNpZmRlZiBDT05GSUdfWUFGRlNfWUFGRlMy CisJX191MzIgaGFzU2hyaW5rSGVhZGVyOjE7IC8qIFRoaXMgYmxvY2sgaGFzIGF0IGxlYXN0 IG9uZSBzaHJpbmsgb2JqZWN0IGhlYWRlciAqLworCV9fdTMyIHNlcXVlbmNlTnVtYmVyOwkg LyogYmxvY2sgc2VxdWVuY2UgbnVtYmVyIGZvciB5YWZmczIgKi8KKyNlbmRpZgorCit9IHlh ZmZzX0Jsb2NrSW5mbzsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT2JqZWN0 IHN0cnVjdHVyZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFRoaXMg aXMgdGhlIG9iamVjdCBzdHJ1Y3R1cmUgYXMgc3RvcmVkIG9uIE5BTkQgKi8KKwordHlwZWRl ZiBzdHJ1Y3QgeworCXlhZmZzX09iamVjdFR5cGUgdHlwZTsKKworCS8qIEFwcGx5IHRvIGV2 ZXJ5dGhpbmcgICovCisJaW50IHBhcmVudE9iamVjdElkOworCV9fdTE2IHN1bV9fTm9Mb25n ZXJVc2VkOyAgICAgICAgLyogY2hlY2tzdW0gb2YgbmFtZS4gTm8gbG9uZ2VyIHVzZWQgKi8K KwlZQ0hBUiBuYW1lW1lBRkZTX01BWF9OQU1FX0xFTkdUSCArIDFdOworCisJLyogVGhlIGZv bGxvd2luZyBhcHBseSB0byBkaXJlY3RvcmllcywgZmlsZXMsIHN5bWxpbmtzIC0gbm90IGhh cmQgbGlua3MgKi8KKwlfX3UzMiB5c3RfbW9kZTsgICAgICAgICAvKiBwcm90ZWN0aW9uICov CisKKyNpZmRlZiBDT05GSUdfWUFGRlNfV0lOQ0UKKwlfX3UzMiBub3RGb3JXaW5DRVs1XTsK KyNlbHNlCisJX191MzIgeXN0X3VpZDsKKwlfX3UzMiB5c3RfZ2lkOworCV9fdTMyIHlzdF9h dGltZTsKKwlfX3UzMiB5c3RfbXRpbWU7CisJX191MzIgeXN0X2N0aW1lOworI2VuZGlmCisK KwkvKiBGaWxlIHNpemUgIGFwcGxpZXMgdG8gZmlsZXMgb25seSAqLworCWludCBmaWxlU2l6 ZTsKKworCS8qIEVxdWl2YWxlbnQgb2JqZWN0IGlkIGFwcGxpZXMgdG8gaGFyZCBsaW5rcyBv bmx5LiAqLworCWludCBlcXVpdmFsZW50T2JqZWN0SWQ7CisKKwkvKiBBbGlhcyBpcyBmb3Ig c3ltbGlua3Mgb25seS4gKi8KKwlZQ0hBUiBhbGlhc1tZQUZGU19NQVhfQUxJQVNfTEVOR1RI ICsgMV07CisKKwlfX3UzMiB5c3RfcmRldjsJCS8qIGRldmljZSBzdHVmZiBmb3IgYmxvY2sg YW5kIGNoYXIgZGV2aWNlcyAobWFqb3IvbWluKSAqLworCisjaWZkZWYgQ09ORklHX1lBRkZT X1dJTkNFCisJX191MzIgd2luX2N0aW1lWzJdOworCV9fdTMyIHdpbl9hdGltZVsyXTsKKwlf X3UzMiB3aW5fbXRpbWVbMl07CisjZWxzZQorCV9fdTMyIHJvb21Ub0dyb3dbNl07CisKKyNl bmRpZgorCV9fdTMyIGluYmFuZFNoYWRvd3NPYmplY3Q7CisJX191MzIgaW5iYW5kSXNTaHJp bms7CisKKwlfX3UzMiByZXNlcnZlZFNwYWNlWzJdOworCWludCBzaGFkb3dzT2JqZWN0Owkv KiBUaGlzIG9iamVjdCBoZWFkZXIgc2hhZG93cyB0aGUgc3BlY2lmaWVkIG9iamVjdCBpZiA+ IDAgKi8KKworCS8qIGlzU2hyaW5rIGFwcGxpZXMgdG8gb2JqZWN0IGhlYWRlcnMgd3JpdHRl biB3aGVuIHdlIHNocmluayB0aGUgZmlsZSAoaWUgcmVzaXplKSAqLworCV9fdTMyIGlzU2hy aW5rOworCit9IHlhZmZzX09iamVjdEhlYWRlcjsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0gVG5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwordW5pb24g eWFmZnNfVG5vZGVfdW5pb24geworI2lmZGVmIENPTkZJR19ZQUZGU19UTk9ERV9MSVNUX0RF QlVHCisJdW5pb24geWFmZnNfVG5vZGVfdW5pb24gKmludGVybmFsW1lBRkZTX05UTk9ERVNf SU5URVJOQUwgKyAxXTsKKyNlbHNlCisJdW5pb24geWFmZnNfVG5vZGVfdW5pb24gKmludGVy bmFsW1lBRkZTX05UTk9ERVNfSU5URVJOQUxdOworI2VuZGlmCisvKglfX3UxNiBsZXZlbDBb WUFGRlNfTlROT0RFU19MRVZFTDBdOyAqLworCit9OworCit0eXBlZGVmIHVuaW9uIHlhZmZz X1Rub2RlX3VuaW9uIHlhZmZzX1Rub2RlOworCitzdHJ1Y3QgeWFmZnNfVG5vZGVMaXN0X3N0 cnVjdCB7CisJc3RydWN0IHlhZmZzX1Rub2RlTGlzdF9zdHJ1Y3QgKm5leHQ7CisJeWFmZnNf VG5vZGUgKnRub2RlczsKK307CisKK3R5cGVkZWYgc3RydWN0IHlhZmZzX1Rub2RlTGlzdF9z dHJ1Y3QgeWFmZnNfVG5vZGVMaXN0OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAg T2JqZWN0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIEFuIG9iamVjdCBj YW4gYmUgb25lIG9mOgorICogLSBhIGRpcmVjdG9yeSAobm8gZGF0YSwgaGFzIGNoaWxkcmVu IGxpbmtzCisgKiAtIGEgcmVndWxhciBmaWxlIChkYXRhLi4uLiBub3QgcHJ1bmVzIDotPiku CisgKiAtIGEgc3ltbGluayBbc3ltYm9saWMgbGlua10gKHRoZSBhbGlhcykuCisgKiAtIGEg aGFyZCBsaW5rCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworCV9fdTMyIGZpbGVTaXplOwor CV9fdTMyIHNjYW5uZWRGaWxlU2l6ZTsKKwlfX3UzMiBzaHJpbmtTaXplOworCWludCB0b3BM ZXZlbDsKKwl5YWZmc19Ubm9kZSAqdG9wOworfSB5YWZmc19GaWxlU3RydWN0dXJlOworCit0 eXBlZGVmIHN0cnVjdCB7CisJc3RydWN0IHlsaXN0X2hlYWQgY2hpbGRyZW47ICAgICAvKiBs aXN0IG9mIGNoaWxkIGxpbmtzICovCit9IHlhZmZzX0RpcmVjdG9yeVN0cnVjdHVyZTsKKwor dHlwZWRlZiBzdHJ1Y3QgeworCVlDSEFSICphbGlhczsKK30geWFmZnNfU3ltTGlua1N0cnVj dHVyZTsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXN0cnVjdCB5YWZmc19PYmplY3RTdHJ1Y3Qg KmVxdWl2YWxlbnRPYmplY3Q7CisJX191MzIgZXF1aXZhbGVudE9iamVjdElkOworfSB5YWZm c19IYXJkTGlua1N0cnVjdHVyZTsKKwordHlwZWRlZiB1bmlvbiB7CisJeWFmZnNfRmlsZVN0 cnVjdHVyZSBmaWxlVmFyaWFudDsKKwl5YWZmc19EaXJlY3RvcnlTdHJ1Y3R1cmUgZGlyZWN0 b3J5VmFyaWFudDsKKwl5YWZmc19TeW1MaW5rU3RydWN0dXJlIHN5bUxpbmtWYXJpYW50Owor CXlhZmZzX0hhcmRMaW5rU3RydWN0dXJlIGhhcmRMaW5rVmFyaWFudDsKK30geWFmZnNfT2Jq ZWN0VmFyaWFudDsKKworc3RydWN0IHlhZmZzX09iamVjdFN0cnVjdCB7CisJX191OCBkZWxl dGVkOjE7CQkvKiBUaGlzIHNob3VsZCBvbmx5IGFwcGx5IHRvIHVubGlua2VkIGZpbGVzLiAq LworCV9fdTggc29mdERlbGV0ZWQ6MTsJLyogaXQgaGFzIGFsc28gYmVlbiBzb2Z0IGRlbGV0 ZWQgKi8KKwlfX3U4IHVubGlua2VkOjE7CS8qIEFuIHVubGlua2VkIGZpbGUuIFRoZSBmaWxl IHNob3VsZCBiZSBpbiB0aGUgdW5saW5rZWQgZGlyZWN0b3J5LiovCisJX191OCBmYWtlOjE7 CQkvKiBBIGZha2Ugb2JqZWN0IGhhcyBubyBwcmVzZW5jZSBvbiBOQU5ELiAqLworCV9fdTgg cmVuYW1lQWxsb3dlZDoxOwkvKiBTb21lIG9iamVjdHMgYXJlIG5vdCBhbGxvd2VkIHRvIGJl IHJlbmFtZWQuICovCisJX191OCB1bmxpbmtBbGxvd2VkOjE7CisJX191OCBkaXJ0eToxOwkJ LyogdGhlIG9iamVjdCBuZWVkcyB0byBiZSB3cml0dGVuIHRvIGZsYXNoICovCisJX191OCB2 YWxpZDoxOwkJLyogV2hlbiB0aGUgZmlsZSBzeXN0ZW0gaXMgYmVpbmcgbG9hZGVkIHVwLCB0 aGlzCisJCQkJICogb2JqZWN0IG1pZ2h0IGJlIGNyZWF0ZWQgYmVmb3JlIHRoZSBkYXRhCisJ CQkJICogaXMgYXZhaWxhYmxlIChpZS4gZmlsZSBkYXRhIHJlY29yZHMgYXBwZWFyIGJlZm9y ZSB0aGUgaGVhZGVyKS4KKwkJCQkgKi8KKwlfX3U4IGxhenlMb2FkZWQ6MTsJLyogVGhpcyBv YmplY3QgaGFzIGJlZW4gbGF6eSBsb2FkZWQgYW5kIGlzIG1pc3Npbmcgc29tZSBkZXRhaWwg Ki8KKworCV9fdTggZGVmZXJlZEZyZWU6MTsJLyogRm9yIExpbnV4IGtlcm5lbC4gT2JqZWN0 IGlzIHJlbW92ZWQgZnJvbSBOQU5ELCBidXQgaXMKKwkJCQkgKiBzdGlsbCBpbiB0aGUgaW5v ZGUgY2FjaGUuIEZyZWUgb2Ygb2JqZWN0IGlzIGRlZmVyZWQuCisJCQkJICogdW50aWwgdGhl IGlub2RlIGlzIHJlbGVhc2VkLgorCQkJCSAqLworCV9fdTggYmVpbmdDcmVhdGVkOjE7CS8q IFRoaXMgb2JqZWN0IGlzIHN0aWxsIGJlaW5nIGNyZWF0ZWQgc28gc2tpcCBzb21lIGNoZWNr cy4gKi8KKworCV9fdTggc2VyaWFsOwkJLyogc2VyaWFsIG51bWJlciBvZiBjaHVuayBpbiBO QU5ELiBDYWNoZWQgaGVyZSAqLworCV9fdTE2IHN1bTsJCS8qIHN1bSBvZiB0aGUgbmFtZSB0 byBzcGVlZCBzZWFyY2hpbmcgKi8KKworCXN0cnVjdCB5YWZmc19EZXZpY2VTdHJ1Y3QgKm15 RGV2OyAgICAgICAvKiBUaGUgZGV2aWNlIEknbSBvbiAqLworCisJc3RydWN0IHlsaXN0X2hl YWQgaGFzaExpbms7ICAgICAvKiBsaXN0IG9mIG9iamVjdHMgaW4gdGhpcyBoYXNoIGJ1Y2tl dCAqLworCisJc3RydWN0IHlsaXN0X2hlYWQgaGFyZExpbmtzOyAgICAvKiBhbGwgdGhlIGVx dWl2YWxlbnQgaGFyZCBsaW5rZWQgb2JqZWN0cyAqLworCisJLyogZGlyZWN0b3J5IHN0cnVj dHVyZSBzdHVmZiAqLworCS8qIGFsc28gdXNlZCBmb3IgbGlua2luZyB1cCB0aGUgZnJlZSBs aXN0ICovCisJc3RydWN0IHlhZmZzX09iamVjdFN0cnVjdCAqcGFyZW50OworCXN0cnVjdCB5 bGlzdF9oZWFkIHNpYmxpbmdzOworCisJLyogV2hlcmUncyBteSBvYmplY3QgaGVhZGVyIGlu IE5BTkQ/ICovCisJaW50IGhkckNodW5rOworCisJaW50IG5EYXRhQ2h1bmtzOwkvKiBOdW1i ZXIgb2YgZGF0YSBjaHVua3MgYXR0YWNoZWQgdG8gdGhlIGZpbGUuICovCisKKwlfX3UzMiBv YmplY3RJZDsJCS8qIHRoZSBvYmplY3QgaWQgdmFsdWUgKi8KKworCV9fdTMyIHlzdF9tb2Rl OworCisjaWZkZWYgQ09ORklHX1lBRkZTX1NIT1JUX05BTUVTX0lOX1JBTQorCVlDSEFSIHNo b3J0TmFtZVtZQUZGU19TSE9SVF9OQU1FX0xFTkdUSCArIDFdOworI2VuZGlmCisKKyNpZm5k ZWYgX19LRVJORUxfXworCV9fdTMyIGluVXNlOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdf WUFGRlNfV0lOQ0UKKwlfX3UzMiB3aW5fY3RpbWVbMl07CisJX191MzIgd2luX210aW1lWzJd OworCV9fdTMyIHdpbl9hdGltZVsyXTsKKyNlbHNlCisJX191MzIgeXN0X3VpZDsKKwlfX3Uz MiB5c3RfZ2lkOworCV9fdTMyIHlzdF9hdGltZTsKKwlfX3UzMiB5c3RfbXRpbWU7CisJX191 MzIgeXN0X2N0aW1lOworI2VuZGlmCisKKwlfX3UzMiB5c3RfcmRldjsKKworI2lmZGVmIF9f S0VSTkVMX18KKwlzdHJ1Y3QgaW5vZGUgKm15SW5vZGU7CisKKyNlbmRpZgorCisJeWFmZnNf T2JqZWN0VHlwZSB2YXJpYW50VHlwZTsKKworCXlhZmZzX09iamVjdFZhcmlhbnQgdmFyaWFu dDsKKworfTsKKwordHlwZWRlZiBzdHJ1Y3QgeWFmZnNfT2JqZWN0U3RydWN0IHlhZmZzX09i amVjdDsKKworc3RydWN0IHlhZmZzX09iamVjdExpc3Rfc3RydWN0IHsKKwl5YWZmc19PYmpl Y3QgKm9iamVjdHM7CisJc3RydWN0IHlhZmZzX09iamVjdExpc3Rfc3RydWN0ICpuZXh0Owor fTsKKwordHlwZWRlZiBzdHJ1Y3QgeWFmZnNfT2JqZWN0TGlzdF9zdHJ1Y3QgeWFmZnNfT2Jq ZWN0TGlzdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXN0cnVjdCB5bGlzdF9oZWFkIGxpc3Q7 CisJaW50IGNvdW50OworfSB5YWZmc19PYmplY3RCdWNrZXQ7CisKKworLyogeWFmZnNfQ2hl Y2twb2ludE9iamVjdCBob2xkcyB0aGUgZGVmaW5pdGlvbiBvZiBhbiBvYmplY3QgYXMgZHVt cGVkCisgKiBieSBjaGVja3BvaW50aW5nLgorICovCisKK3R5cGVkZWYgc3RydWN0IHsKKwlp bnQgc3RydWN0VHlwZTsKKwlfX3UzMiBvYmplY3RJZDsKKwlfX3UzMiBwYXJlbnRJZDsKKwlp bnQgaGRyQ2h1bms7CisJeWFmZnNfT2JqZWN0VHlwZSB2YXJpYW50VHlwZTozOworCV9fdTgg ZGVsZXRlZDoxOworCV9fdTggc29mdERlbGV0ZWQ6MTsKKwlfX3U4IHVubGlua2VkOjE7CisJ X191OCBmYWtlOjE7CisJX191OCByZW5hbWVBbGxvd2VkOjE7CisJX191OCB1bmxpbmtBbGxv d2VkOjE7CisJX191OCBzZXJpYWw7CisKKwlpbnQgbkRhdGFDaHVua3M7CisJX191MzIgZmls ZVNpemVPckVxdWl2YWxlbnRPYmplY3RJZDsKK30geWFmZnNfQ2hlY2twb2ludE9iamVjdDsK KworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVtcG9yYXJ5IGJ1ZmZlcnMgLS0tLS0tLS0t LS0tLS0tLQorICoKKyAqIFRoZXNlIGFyZSBjaHVuay1zaXplZCB3b3JraW5nIGJ1ZmZlcnMu IEVhY2ggZGV2aWNlIGhhcyBhIGZldworICovCisKK3R5cGVkZWYgc3RydWN0IHsKKwlfX3U4 ICpidWZmZXI7CisJaW50IGxpbmU7CS8qIHRyYWNrIGZyb20gd2hlbmNlIHRoaXMgYnVmZmVy IHdhcyBhbGxvY2F0ZWQgKi8KKwlpbnQgbWF4TGluZTsKK30geWFmZnNfVGVtcEJ1ZmZlcjsK KworLyotLS0tLS0tLS0tLS0tLS0tLSBEZXZpY2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKi8KKworc3RydWN0IHlhZmZzX0RldmljZVN0cnVjdCB7CisJc3RydWN0IHls aXN0X2hlYWQgZGV2TGlzdDsKKwljb25zdCBjaGFyICpuYW1lOworCisJLyogRW50cnkgcGFy YW1ldGVycyBzZXQgdXAgd2F5IGVhcmx5LiBZYWZmcyBzZXRzIHVwIHRoZSByZXN0LiovCisJ aW50IG5EYXRhQnl0ZXNQZXJDaHVuazsJLyogU2hvdWxkIGJlIGEgcG93ZXIgb2YgMiA+PSA1 MTIgKi8KKwlpbnQgbkNodW5rc1BlckJsb2NrOwkvKiBkb2VzIG5vdCBuZWVkIHRvIGJlIGEg cG93ZXIgb2YgMiAqLworCWludCBzcGFyZUJ5dGVzUGVyQ2h1bms7CS8qIHNwYXJlIGFyZWEg c2l6ZSAqLworCWludCBzdGFydEJsb2NrOwkJLyogU3RhcnQgYmxvY2sgd2UncmUgYWxsb3dl ZCB0byB1c2UgKi8KKwlpbnQgZW5kQmxvY2s7CQkvKiBFbmQgYmxvY2sgd2UncmUgYWxsb3dl ZCB0byB1c2UgKi8KKwlpbnQgblJlc2VydmVkQmxvY2tzOwkvKiBXZSB3YW50IHRoaXMgdHVu ZWFibGUgc28gdGhhdCB3ZSBjYW4gcmVkdWNlICovCisJCQkJLyogcmVzZXJ2ZWQgYmxvY2tz IG9uIE5PUiBhbmQgUkFNLiAqLworCisKKwkvKiBTdHVmZiB1c2VkIGJ5IHRoZSBzaGFyZWQg c3BhY2UgY2hlY2twb2ludGluZyBtZWNoYW5pc20gKi8KKwkvKiBJZiB0aGlzIHZhbHVlIGlz IHplcm8sIHRoZW4gdGhpcyBtZWNoYW5pc20gaXMgZGlzYWJsZWQgKi8KKworLyoJaW50IG5D aGVja3BvaW50UmVzZXJ2ZWRCbG9ja3M7ICovIC8qIEJsb2NrcyB0byByZXNlcnZlIGZvciBj aGVja3BvaW50IGRhdGEgKi8KKworCisJaW50IG5TaG9ydE9wQ2FjaGVzOwkvKiBJZiA8PSAw LCB0aGVuIHNob3J0IG9wIGNhY2hpbmcgaXMgZGlzYWJsZWQsIGVsc2UKKwkJCQkgKiB0aGUg bnVtYmVyIG9mIHNob3J0IG9wIGNhY2hlcyAoZG9uJ3QgdXNlIHRvbyBtYW55KQorCQkJCSAq LworCisJaW50IHVzZUhlYWRlckZpbGVTaXplOwkvKiBGbGFnIHRvIGRldGVybWluZSBpZiB3 ZSBzaG91bGQgdXNlIGZpbGUgc2l6ZXMgZnJvbSB0aGUgaGVhZGVyICovCisKKwlpbnQgdXNl TkFOREVDQzsJCS8qIEZsYWcgdG8gZGVjaWRlIHdoZXRoZXIgb3Igbm90IHRvIHVzZSBOQU5E RUNDICovCisKKwl2b2lkICpnZW5lcmljRGV2aWNlOwkvKiBQb2ludGVyIHRvIGRldmljZSBj b250ZXh0CisJCQkJICogT24gYW4gbXRkIHRoaXMgaG9sZHMgdGhlIG10ZCBwb2ludGVyLgor CQkJCSAqLworCXZvaWQgKnN1cGVyQmxvY2s7CisKKwkvKiBOQU5EIGFjY2VzcyBmdW5jdGlv bnMgKE11c3QgYmUgc2V0IGJlZm9yZSBjYWxsaW5nIFlBRkZTKSovCisKKwlpbnQgKCp3cml0 ZUNodW5rVG9OQU5EKSAoc3RydWN0IHlhZmZzX0RldmljZVN0cnVjdCAqZGV2LAorCQkJCQlp bnQgY2h1bmtJbk5BTkQsIGNvbnN0IF9fdTggKmRhdGEsCisJCQkJCWNvbnN0IHlhZmZzX1Nw YXJlICpzcGFyZSk7CisJaW50ICgqcmVhZENodW5rRnJvbU5BTkQpIChzdHJ1Y3QgeWFmZnNf RGV2aWNlU3RydWN0ICpkZXYsCisJCQkJCWludCBjaHVua0luTkFORCwgX191OCAqZGF0YSwK KwkJCQkJeWFmZnNfU3BhcmUgKnNwYXJlKTsKKwlpbnQgKCplcmFzZUJsb2NrSW5OQU5EKSAo c3RydWN0IHlhZmZzX0RldmljZVN0cnVjdCAqZGV2LAorCQkJCQlpbnQgYmxvY2tJbk5BTkQp OworCWludCAoKmluaXRpYWxpc2VOQU5EKSAoc3RydWN0IHlhZmZzX0RldmljZVN0cnVjdCAq ZGV2KTsKKwlpbnQgKCpkZWluaXRpYWxpc2VOQU5EKSAoc3RydWN0IHlhZmZzX0RldmljZVN0 cnVjdCAqZGV2KTsKKworI2lmZGVmIENPTkZJR19ZQUZGU19ZQUZGUzIKKwlpbnQgKCp3cml0 ZUNodW5rV2l0aFRhZ3NUb05BTkQpIChzdHJ1Y3QgeWFmZnNfRGV2aWNlU3RydWN0ICpkZXYs CisJCQkJCSBpbnQgY2h1bmtJbk5BTkQsIGNvbnN0IF9fdTggKmRhdGEsCisJCQkJCSBjb25z dCB5YWZmc19FeHRlbmRlZFRhZ3MgKnRhZ3MpOworCWludCAoKnJlYWRDaHVua1dpdGhUYWdz RnJvbU5BTkQpIChzdHJ1Y3QgeWFmZnNfRGV2aWNlU3RydWN0ICpkZXYsCisJCQkJCSAgaW50 IGNodW5rSW5OQU5ELCBfX3U4ICpkYXRhLAorCQkJCQkgIHlhZmZzX0V4dGVuZGVkVGFncyAq dGFncyk7CisJaW50ICgqbWFya05BTkRCbG9ja0JhZCkgKHN0cnVjdCB5YWZmc19EZXZpY2VT dHJ1Y3QgKmRldiwgaW50IGJsb2NrTm8pOworCWludCAoKnF1ZXJ5TkFOREJsb2NrKSAoc3Ry dWN0IHlhZmZzX0RldmljZVN0cnVjdCAqZGV2LCBpbnQgYmxvY2tObywKKwkJCSAgICAgICB5 YWZmc19CbG9ja1N0YXRlICpzdGF0ZSwgX191MzIgKnNlcXVlbmNlTnVtYmVyKTsKKyNlbmRp ZgorCisJaW50IGlzWWFmZnMyOworCisJLyogVGhlIHJlbW92ZU9iamVjdENhbGxiYWNrIGZ1 bmN0aW9uIG11c3QgYmUgc3VwcGxpZWQgYnkgT1MgZmxhdm91cnMgdGhhdAorCSAqIG5lZWQg aXQuIFRoZSBMaW51eCBrZXJuZWwgZG9lcyBub3QgdXNlIHRoaXMsIGJ1dCB5YWZmcyBkaXJl Y3QgZG9lcyB1c2UKKwkgKiBpdCB0byBpbXBsZW1lbnQgdGhlIGZhc3RlciByZWFkZGlyCisJ ICovCisJdm9pZCAoKnJlbW92ZU9iamVjdENhbGxiYWNrKShzdHJ1Y3QgeWFmZnNfT2JqZWN0 U3RydWN0ICpvYmopOworCisJLyogQ2FsbGJhY2sgdG8gbWFyayB0aGUgc3VwZXJibG9jayBk aXJzdHkgKi8KKwl2b2lkICgqbWFya1N1cGVyQmxvY2tEaXJ0eSkodm9pZCAqc3VwZXJibG9j ayk7CisKKwlpbnQgd2lkZVRub2Rlc0Rpc2FibGVkOyAvKiBTZXQgdG8gZGlzYWJsZSB3aWRl IHRub2RlcyAqLworCisJWUNIQVIgKnBhdGhEaXZpZGVyczsJLyogU3RyaW5nIG9mIGxlZ2Fs IHBhdGggZGl2aWRlcnMgKi8KKworCisJLyogRW5kIG9mIHN0dWZmIHRoYXQgbXVzdCBiZSBz ZXQgYmVmb3JlIGluaXRpYWxpc2F0aW9uLiAqLworCisJLyogQ2hlY2twb2ludCBjb250cm9s LiBDYW4gYmUgc2V0IGJlZm9yZSBvciBhZnRlciBpbml0aWFsaXNhdGlvbiAqLworCV9fdTgg c2tpcENoZWNrcG9pbnRSZWFkOworCV9fdTggc2tpcENoZWNrcG9pbnRXcml0ZTsKKworCS8q IFJ1bnRpbWUgcGFyYW1ldGVycy4gU2V0IHVwIGJ5IFlBRkZTLiAqLworCisJX191MTYgY2h1 bmtHcm91cEJpdHM7CS8qIDAgZm9yIGRldmljZXMgPD0gMzJNQi4gZWxzZSBsb2cyKG5jaHVu a3MpIC0gMTYgKi8KKwlfX3UxNiBjaHVua0dyb3VwU2l6ZTsJLyogPT0gMl5eY2h1bmtHcm91 cEJpdHMgKi8KKworCS8qIFN0dWZmIHRvIHN1cHBvcnQgd2lkZSB0bm9kZXMgKi8KKwlfX3Uz MiB0bm9kZVdpZHRoOworCV9fdTMyIHRub2RlTWFzazsKKworCS8qIFN0dWZmIGZvciBmaWd1 cmluZyBvdXQgZmlsZSBvZmZzZXQgdG8gY2h1bmsgY29udmVyc2lvbnMgKi8KKwlfX3UzMiBj aHVua1NoaWZ0OyAvKiBTaGlmdCB2YWx1ZSAqLworCV9fdTMyIGNodW5rRGl2OyAgIC8qIERp dmlzb3IgYWZ0ZXIgc2hpZnRpbmc6IDEgZm9yIHBvd2VyLW9mLTIgc2l6ZXMgKi8KKwlfX3Uz MiBjaHVua01hc2s7ICAvKiBNYXNrIHRvIHVzZSBmb3IgcG93ZXItb2YtMiBjYXNlICovCisK KwkvKiBTdHVmZiB0byBoYW5kbGUgaW5iYW5kIHRhZ3MgKi8KKwlpbnQgaW5iYW5kVGFnczsK KwlfX3UzMiB0b3RhbEJ5dGVzUGVyQ2h1bms7CisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKwlz dHJ1Y3Qgc2VtYXBob3JlIHNlbTsJLyogU2VtYXBob3JlIGZvciB3YWl0aW5nIG9uIGVyYXN1 cmUuKi8KKwlzdHJ1Y3Qgc2VtYXBob3JlIGdyb3NzTG9jazsJLyogR3Jvc3MgbG9ja2luZyBz ZW1hcGhvcmUgKi8KKwlfX3U4ICpzcGFyZUJ1ZmZlcjsJLyogRm9yIG10ZGlmMiB1c2UuIERv bid0IGtub3cgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlcgorCQkJCSAqIGF0IGNvbXBpbGUgdGlt ZSBzbyB3ZSBoYXZlIHRvIGFsbG9jYXRlIGl0LgorCQkJCSAqLworCXZvaWQgKCpwdXRTdXBl ckZ1bmMpIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKKyNlbmRpZgorCisJaW50IGlzTW91 bnRlZDsKKworCWludCBpc0NoZWNrcG9pbnRlZDsKKworCisJLyogU3R1ZmYgdG8gc3VwcG9y dCBibG9jayBvZmZzZXR0aW5nIHRvIHN1cHBvcnQgc3RhcnQgYmxvY2sgemVybyAqLworCWlu dCBpbnRlcm5hbFN0YXJ0QmxvY2s7CisJaW50IGludGVybmFsRW5kQmxvY2s7CisJaW50IGJs b2NrT2Zmc2V0OworCWludCBjaHVua09mZnNldDsKKworCisJLyogUnVudGltZSBjaGVja3Bv aW50aW5nIHN0dWZmICovCisJaW50IGNoZWNrcG9pbnRQYWdlU2VxdWVuY2U7ICAgLyogcnVu bmluZyBzZXF1ZW5jZSBudW1iZXIgb2YgY2hlY2twb2ludCBwYWdlcyAqLworCWludCBjaGVj a3BvaW50Qnl0ZUNvdW50OworCWludCBjaGVja3BvaW50Qnl0ZU9mZnNldDsKKwlfX3U4ICpj aGVja3BvaW50QnVmZmVyOworCWludCBjaGVja3BvaW50T3BlbkZvcldyaXRlOworCWludCBi bG9ja3NJbkNoZWNrcG9pbnQ7CisJaW50IGNoZWNrcG9pbnRDdXJyZW50Q2h1bms7CisJaW50 IGNoZWNrcG9pbnRDdXJyZW50QmxvY2s7CisJaW50IGNoZWNrcG9pbnROZXh0QmxvY2s7CisJ aW50ICpjaGVja3BvaW50QmxvY2tMaXN0OworCWludCBjaGVja3BvaW50TWF4QmxvY2tzOwor CV9fdTMyIGNoZWNrcG9pbnRTdW07CisJX191MzIgY2hlY2twb2ludFhvcjsKKworCWludCBu Q2hlY2twb2ludEJsb2Nrc1JlcXVpcmVkOyAvKiBOdW1iZXIgb2YgYmxvY2tzIG5lZWRlZCB0 byBzdG9yZSBjdXJyZW50IGNoZWNrcG9pbnQgc2V0ICovCisKKwkvKiBCbG9jayBJbmZvICov CisJeWFmZnNfQmxvY2tJbmZvICpibG9ja0luZm87CisJX191OCAqY2h1bmtCaXRzOwkvKiBi aXRtYXAgb2YgY2h1bmtzIGluIHVzZSAqLworCXVuc2lnbmVkIGJsb2NrSW5mb0FsdDoxOwkv KiB3YXMgYWxsb2NhdGVkIHVzaW5nIGFsdGVybmF0aXZlIHN0cmF0ZWd5ICovCisJdW5zaWdu ZWQgY2h1bmtCaXRzQWx0OjE7CS8qIHdhcyBhbGxvY2F0ZWQgdXNpbmcgYWx0ZXJuYXRpdmUg c3RyYXRlZ3kgKi8KKwlpbnQgY2h1bmtCaXRtYXBTdHJpZGU7CS8qIE51bWJlciBvZiBieXRl cyBvZiBjaHVua0JpdHMgcGVyIGJsb2NrLgorCQkJCSAqIE11c3QgYmUgY29uc2lzdGVudCB3 aXRoIG5DaHVua3NQZXJCbG9jay4KKwkJCQkgKi8KKworCWludCBuRXJhc2VkQmxvY2tzOwor CWludCBhbGxvY2F0aW9uQmxvY2s7CS8qIEN1cnJlbnQgYmxvY2sgYmVpbmcgYWxsb2NhdGVk IG9mZiAqLworCV9fdTMyIGFsbG9jYXRpb25QYWdlOworCWludCBhbGxvY2F0aW9uQmxvY2tG aW5kZXI7CS8qIFVzZWQgdG8gc2VhcmNoIGZvciBuZXh0IGFsbG9jYXRpb24gYmxvY2sgKi8K KworCS8qIFJ1bnRpbWUgc3RhdGUgKi8KKwlpbnQgblRub2Rlc0NyZWF0ZWQ7CisJeWFmZnNf VG5vZGUgKmZyZWVUbm9kZXM7CisJaW50IG5GcmVlVG5vZGVzOworCXlhZmZzX1Rub2RlTGlz dCAqYWxsb2NhdGVkVG5vZGVMaXN0OworCisJaW50IGlzRG9pbmdHQzsKKwlpbnQgZ2NCbG9j azsKKwlpbnQgZ2NDaHVuazsKKworCWludCBuT2JqZWN0c0NyZWF0ZWQ7CisJeWFmZnNfT2Jq ZWN0ICpmcmVlT2JqZWN0czsKKwlpbnQgbkZyZWVPYmplY3RzOworCisJaW50IG5IYXJkTGlu a3M7CisKKwl5YWZmc19PYmplY3RMaXN0ICphbGxvY2F0ZWRPYmplY3RMaXN0OworCisJeWFm ZnNfT2JqZWN0QnVja2V0IG9iamVjdEJ1Y2tldFtZQUZGU19OT0JKRUNUX0JVQ0tFVFNdOwor CisJaW50IG5GcmVlQ2h1bmtzOworCisJaW50IGN1cnJlbnREaXJ0eUNoZWNrZXI7CS8qIFVz ZWQgdG8gZmluZCBjdXJyZW50IGRpcnRpZXN0IGJsb2NrICovCisKKwlfX3UzMiAqZ2NDbGVh bnVwTGlzdDsJLyogb2JqZWN0cyB0byBkZWxldGUgYXQgdGhlIGVuZCBvZiBhIEdDLiAqLwor CWludCBub25BZ2dyZXNzaXZlU2tpcDsJLyogR0Mgc3RhdGUvbW9kZSAqLworCisJLyogU3Rh dGlzdGNzICovCisJaW50IG5QYWdlV3JpdGVzOworCWludCBuUGFnZVJlYWRzOworCWludCBu QmxvY2tFcmFzdXJlczsKKwlpbnQgbkVyYXN1cmVGYWlsdXJlczsKKwlpbnQgbkdDQ29waWVz OworCWludCBnYXJiYWdlQ29sbGVjdGlvbnM7CisJaW50IHBhc3NpdmVHYXJiYWdlQ29sbGVj dGlvbnM7CisJaW50IG5SZXRyaWVkV3JpdGVzOworCWludCBuUmV0aXJlZEJsb2NrczsKKwlp bnQgZWNjRml4ZWQ7CisJaW50IGVjY1VuZml4ZWQ7CisJaW50IHRhZ3NFY2NGaXhlZDsKKwlp bnQgdGFnc0VjY1VuZml4ZWQ7CisJaW50IG5EZWxldGlvbnM7CisJaW50IG5Vbm1hcmtlZERl bGV0aW9uczsKKworCWludCBoYXNQZW5kaW5nUHJpb3JpdGlzZWRHQ3M7IC8qIFdlIHRoaW5r IHRoaXMgZGV2aWNlIG1pZ2h0IGhhdmUgcGVuZGluZyBwcmlvcml0aXNlZCBnY3MgKi8KKwor CS8qIFNwZWNpYWwgZGlyZWN0b3JpZXMgKi8KKwl5YWZmc19PYmplY3QgKnJvb3REaXI7CisJ eWFmZnNfT2JqZWN0ICpsb3N0TkZvdW5kRGlyOworCisJLyogQnVmZmVyIGFyZWFzIGZvciBz dG9yaW5nIGRhdGEgdG8gcmVjb3ZlciBmcm9tIHdyaXRlIGZhaWx1cmVzIFRPRE8KKwkgKiAg ICAgIF9fdTggICAgICAgICAgICBidWZmZXJlZERhdGFbWUFGRlNfQ0hVTktTX1BFUl9CTE9D S11bWUFGRlNfQllURVNfUEVSX0NIVU5LXTsKKwkgKiAgICAgIHlhZmZzX1NwYXJlIGJ1ZmZl cmVkU3BhcmVbWUFGRlNfQ0hVTktTX1BFUl9CTE9DS107CisJICovCisKKwlpbnQgYnVmZmVy ZWRCbG9jazsJLyogV2hpY2ggYmxvY2sgaXMgYnVmZmVyZWQgaGVyZT8gKi8KKwlpbnQgZG9p bmdCdWZmZXJlZEJsb2NrUmV3cml0ZTsKKworCXlhZmZzX0NodW5rQ2FjaGUgKnNyQ2FjaGU7 CisJaW50IHNyTGFzdFVzZTsKKworCWludCBjYWNoZUhpdHM7CisKKwkvKiBTdHVmZiBmb3Ig YmFja2dyb3VuZCBkZWxldGlvbiBhbmQgdW5saW5rZWQgZmlsZXMuKi8KKwl5YWZmc19PYmpl Y3QgKnVubGlua2VkRGlyOwkvKiBEaXJlY3Rvcnkgd2hlcmUgdW5saW5rZWQgYW5kIGRlbGV0 ZWQgZmlsZXMgbGl2ZS4gKi8KKwl5YWZmc19PYmplY3QgKmRlbGV0ZWREaXI7CS8qIERpcmVj dG9yeSB3aGVyZSBkZWxldGVkIG9iamVjdHMgYXJlIHNlbnQgdG8gZGlzYXBwZWFyLiAqLwor CXlhZmZzX09iamVjdCAqdW5saW5rZWREZWxldGlvbjsJLyogQ3VycmVudCBmaWxlIGJlaW5n IGJhY2tncm91bmQgZGVsZXRlZC4qLworCWludCBuRGVsZXRlZEZpbGVzOwkJLyogQ291bnQg b2YgZmlsZXMgYXdhaXRpbmcgZGVsZXRpb247Ki8KKwlpbnQgblVubGlua2VkRmlsZXM7CQkv KiBDb3VudCBvZiB1bmxpbmtlZCBmaWxlcy4gKi8KKwlpbnQgbkJhY2tncm91bmREZWxldGlv bnM7CS8qIENvdW50IG9mIGJhY2tncm91bmQgZGVsZXRpb25zLiAqLworCisKKwkvKiBUZW1w b3JhcnkgYnVmZmVyIG1hbmFnZW1lbnQgKi8KKwl5YWZmc19UZW1wQnVmZmVyIHRlbXBCdWZm ZXJbWUFGRlNfTl9URU1QX0JVRkZFUlNdOworCWludCBtYXhUZW1wOworCWludCB0ZW1wSW5V c2U7CisJaW50IHVubWFuYWdlZFRlbXBBbGxvY2F0aW9uczsKKwlpbnQgdW5tYW5hZ2VkVGVt cERlYWxsb2NhdGlvbnM7CisKKwkvKiB5YWZmczIgcnVudGltZSBzdHVmZiAqLworCXVuc2ln bmVkIHNlcXVlbmNlTnVtYmVyOwkvKiBTZXF1ZW5jZSBudW1iZXIgb2YgY3VycmVudGx5IGFs bG9jYXRpbmcgYmxvY2sgKi8KKwl1bnNpZ25lZCBvbGRlc3REaXJ0eVNlcXVlbmNlOworCit9 OworCit0eXBlZGVmIHN0cnVjdCB5YWZmc19EZXZpY2VTdHJ1Y3QgeWFmZnNfRGV2aWNlOwor CisvKiBUaGUgc3RhdGljIGxheW91dCBvZiBibG9jayB1c2FnZSBldGMgaXMgc3RvcmVkIGlu IHRoZSBzdXBlciBibG9jayBoZWFkZXIgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwlpbnQgU3Ry dWN0VHlwZTsKKwlpbnQgdmVyc2lvbjsKKwlpbnQgY2hlY2twb2ludFN0YXJ0QmxvY2s7CisJ aW50IGNoZWNrcG9pbnRFbmRCbG9jazsKKwlpbnQgc3RhcnRCbG9jazsKKwlpbnQgZW5kQmxv Y2s7CisJaW50IHJmdVsxMDBdOworfSB5YWZmc19TdXBlckJsb2NrSGVhZGVyOworCisvKiBU aGUgQ2hlY2twb2ludERldmljZSBzdHJ1Y3R1cmUgaG9sZHMgdGhlIGRldmljZSBpbmZvcm1h dGlvbiB0aGF0IGNoYW5nZXMgYXQgcnVudGltZSBhbmQKKyAqIG11c3QgYmUgcHJlc2VydmVk IG92ZXIgdW5tb3VudC9tb3VudCBjeWNsZXMuCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwlp bnQgc3RydWN0VHlwZTsKKwlpbnQgbkVyYXNlZEJsb2NrczsKKwlpbnQgYWxsb2NhdGlvbkJs b2NrOwkvKiBDdXJyZW50IGJsb2NrIGJlaW5nIGFsbG9jYXRlZCBvZmYgKi8KKwlfX3UzMiBh bGxvY2F0aW9uUGFnZTsKKwlpbnQgbkZyZWVDaHVua3M7CisKKwlpbnQgbkRlbGV0ZWRGaWxl czsJCS8qIENvdW50IG9mIGZpbGVzIGF3YWl0aW5nIGRlbGV0aW9uOyovCisJaW50IG5Vbmxp bmtlZEZpbGVzOwkJLyogQ291bnQgb2YgdW5saW5rZWQgZmlsZXMuICovCisJaW50IG5CYWNr Z3JvdW5kRGVsZXRpb25zOwkvKiBDb3VudCBvZiBiYWNrZ3JvdW5kIGRlbGV0aW9ucy4gKi8K KworCS8qIHlhZmZzMiBydW50aW1lIHN0dWZmICovCisJdW5zaWduZWQgc2VxdWVuY2VOdW1i ZXI7CS8qIFNlcXVlbmNlIG51bWJlciBvZiBjdXJyZW50bHkgYWxsb2NhdGluZyBibG9jayAq LworCXVuc2lnbmVkIG9sZGVzdERpcnR5U2VxdWVuY2U7CisKK30geWFmZnNfQ2hlY2twb2lu dERldmljZTsKKworCit0eXBlZGVmIHN0cnVjdCB7CisJaW50IHN0cnVjdFR5cGU7CisJX191 MzIgbWFnaWM7CisJX191MzIgdmVyc2lvbjsKKwlfX3UzMiBoZWFkOworfSB5YWZmc19DaGVj a3BvaW50VmFsaWRpdHk7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBZQUZGUyBG dW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitpbnQgeWFmZnNfR3V0c0lu aXRpYWxpc2UoeWFmZnNfRGV2aWNlICpkZXYpOwordm9pZCB5YWZmc19EZWluaXRpYWxpc2Uo eWFmZnNfRGV2aWNlICpkZXYpOworCitpbnQgeWFmZnNfR2V0TnVtYmVyT2ZGcmVlQ2h1bmtz KHlhZmZzX0RldmljZSAqZGV2KTsKKworaW50IHlhZmZzX1JlbmFtZU9iamVjdCh5YWZmc19P YmplY3QgKm9sZERpciwgY29uc3QgWUNIQVIgKm9sZE5hbWUsCisJCSAgICAgICB5YWZmc19P YmplY3QgKm5ld0RpciwgY29uc3QgWUNIQVIgKm5ld05hbWUpOworCitpbnQgeWFmZnNfVW5s aW5rKHlhZmZzX09iamVjdCAqZGlyLCBjb25zdCBZQ0hBUiAqbmFtZSk7CitpbnQgeWFmZnNf RGVsZXRlT2JqZWN0KHlhZmZzX09iamVjdCAqb2JqKTsKKworaW50IHlhZmZzX0dldE9iamVj dE5hbWUoeWFmZnNfT2JqZWN0ICpvYmosIFlDSEFSICpuYW1lLCBpbnQgYnVmZlNpemUpOwor aW50IHlhZmZzX0dldE9iamVjdEZpbGVMZW5ndGgoeWFmZnNfT2JqZWN0ICpvYmopOworaW50 IHlhZmZzX0dldE9iamVjdElub2RlKHlhZmZzX09iamVjdCAqb2JqKTsKK3Vuc2lnbmVkIHlh ZmZzX0dldE9iamVjdFR5cGUoeWFmZnNfT2JqZWN0ICpvYmopOworaW50IHlhZmZzX0dldE9i amVjdExpbmtDb3VudCh5YWZmc19PYmplY3QgKm9iaik7CisKK2ludCB5YWZmc19TZXRBdHRy aWJ1dGVzKHlhZmZzX09iamVjdCAqb2JqLCBzdHJ1Y3QgaWF0dHIgKmF0dHIpOworaW50IHlh ZmZzX0dldEF0dHJpYnV0ZXMoeWFmZnNfT2JqZWN0ICpvYmosIHN0cnVjdCBpYXR0ciAqYXR0 cik7CisKKy8qIEZpbGUgb3BlcmF0aW9ucyAqLworaW50IHlhZmZzX1JlYWREYXRhRnJvbUZp bGUoeWFmZnNfT2JqZWN0ICpvYmosIF9fdTggKmJ1ZmZlciwgbG9mZl90IG9mZnNldCwKKwkJ CQlpbnQgbkJ5dGVzKTsKK2ludCB5YWZmc19Xcml0ZURhdGFUb0ZpbGUoeWFmZnNfT2JqZWN0 ICpvYmosIGNvbnN0IF9fdTggKmJ1ZmZlciwgbG9mZl90IG9mZnNldCwKKwkJCQlpbnQgbkJ5 dGVzLCBpbnQgd3JpdGVUaHJvdWdoKTsKK2ludCB5YWZmc19SZXNpemVGaWxlKHlhZmZzX09i amVjdCAqb2JqLCBsb2ZmX3QgbmV3U2l6ZSk7CisKK3lhZmZzX09iamVjdCAqeWFmZnNfTWtu b2RGaWxlKHlhZmZzX09iamVjdCAqcGFyZW50LCBjb25zdCBZQ0hBUiAqbmFtZSwKKwkJCQlf X3UzMiBtb2RlLCBfX3UzMiB1aWQsIF9fdTMyIGdpZCk7CitpbnQgeWFmZnNfRmx1c2hGaWxl KHlhZmZzX09iamVjdCAqb2JqLCBpbnQgdXBkYXRlVGltZSk7CisKKy8qIEZsdXNoaW5nIGFu ZCBjaGVja3BvaW50aW5nICovCit2b2lkIHlhZmZzX0ZsdXNoRW50aXJlRGV2aWNlQ2FjaGUo eWFmZnNfRGV2aWNlICpkZXYpOworCitpbnQgeWFmZnNfQ2hlY2twb2ludFNhdmUoeWFmZnNf RGV2aWNlICpkZXYpOworaW50IHlhZmZzX0NoZWNrcG9pbnRSZXN0b3JlKHlhZmZzX0Rldmlj ZSAqZGV2KTsKKworLyogRGlyZWN0b3J5IG9wZXJhdGlvbnMgKi8KK3lhZmZzX09iamVjdCAq eWFmZnNfTWtub2REaXJlY3RvcnkoeWFmZnNfT2JqZWN0ICpwYXJlbnQsIGNvbnN0IFlDSEFS ICpuYW1lLAorCQkJCV9fdTMyIG1vZGUsIF9fdTMyIHVpZCwgX191MzIgZ2lkKTsKK3lhZmZz X09iamVjdCAqeWFmZnNfRmluZE9iamVjdEJ5TmFtZSh5YWZmc19PYmplY3QgKnRoZURpciwg Y29uc3QgWUNIQVIgKm5hbWUpOworaW50IHlhZmZzX0FwcGx5VG9EaXJlY3RvcnlDaGlsZHJl bih5YWZmc19PYmplY3QgKnRoZURpciwKKwkJCQkgICBpbnQgKCpmbikgKHlhZmZzX09iamVj dCAqKSk7CisKK3lhZmZzX09iamVjdCAqeWFmZnNfRmluZE9iamVjdEJ5TnVtYmVyKHlhZmZz X0RldmljZSAqZGV2LCBfX3UzMiBudW1iZXIpOworCisvKiBMaW5rIG9wZXJhdGlvbnMgKi8K K3lhZmZzX09iamVjdCAqeWFmZnNfTGluayh5YWZmc19PYmplY3QgKnBhcmVudCwgY29uc3Qg WUNIQVIgKm5hbWUsCisJCQkgeWFmZnNfT2JqZWN0ICplcXVpdmFsZW50T2JqZWN0KTsKKwor eWFmZnNfT2JqZWN0ICp5YWZmc19HZXRFcXVpdmFsZW50T2JqZWN0KHlhZmZzX09iamVjdCAq b2JqKTsKKworLyogU3ltbGluayBvcGVyYXRpb25zICovCit5YWZmc19PYmplY3QgKnlhZmZz X01rbm9kU3ltTGluayh5YWZmc19PYmplY3QgKnBhcmVudCwgY29uc3QgWUNIQVIgKm5hbWUs CisJCQkJIF9fdTMyIG1vZGUsIF9fdTMyIHVpZCwgX191MzIgZ2lkLAorCQkJCSBjb25zdCBZ Q0hBUiAqYWxpYXMpOworWUNIQVIgKnlhZmZzX0dldFN5bWxpbmtBbGlhcyh5YWZmc19PYmpl Y3QgKm9iaik7CisKKy8qIFNwZWNpYWwgaW5vZGVzIChmaWZvcywgc29ja2V0cyBhbmQgZGV2 aWNlcykgKi8KK3lhZmZzX09iamVjdCAqeWFmZnNfTWtub2RTcGVjaWFsKHlhZmZzX09iamVj dCAqcGFyZW50LCBjb25zdCBZQ0hBUiAqbmFtZSwKKwkJCQkgX191MzIgbW9kZSwgX191MzIg dWlkLCBfX3UzMiBnaWQsIF9fdTMyIHJkZXYpOworCisvKiBTcGVjaWFsIGRpcmVjdG9yaWVz ICovCit5YWZmc19PYmplY3QgKnlhZmZzX1Jvb3QoeWFmZnNfRGV2aWNlICpkZXYpOworeWFm ZnNfT2JqZWN0ICp5YWZmc19Mb3N0TkZvdW5kKHlhZmZzX0RldmljZSAqZGV2KTsKKworI2lm ZGVmIENPTkZJR19ZQUZGU19XSU5DRQorLyogQ09ORklHX1lBRkZTX1dJTkNFIHNwZWNpYWwg c3R1ZmYgKi8KK3ZvaWQgeWZzZF9XaW5GaWxlVGltZU5vdyhfX3UzMiB0YXJnZXRbMl0pOwor I2VuZGlmCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKK3ZvaWQgeWFmZnNfSGFuZGxlRGVmZXJl ZEZyZWUoeWFmZnNfT2JqZWN0ICpvYmopOworI2VuZGlmCisKKy8qIERlYnVnIGR1bXAgICov CitpbnQgeWFmZnNfRHVtcE9iamVjdCh5YWZmc19PYmplY3QgKm9iaik7CisKK3ZvaWQgeWFm ZnNfR3V0c1Rlc3QoeWFmZnNfRGV2aWNlICpkZXYpOworCisvKiBBIGZldyB1c2VmdWwgZnVu Y3Rpb25zICovCit2b2lkIHlhZmZzX0luaXRpYWxpc2VUYWdzKHlhZmZzX0V4dGVuZGVkVGFn cyAqdGFncyk7Cit2b2lkIHlhZmZzX0RlbGV0ZUNodW5rKHlhZmZzX0RldmljZSAqZGV2LCBp bnQgY2h1bmtJZCwgaW50IG1hcmtOQU5ELCBpbnQgbHluKTsKK2ludCB5YWZmc19DaGVja0ZG KF9fdTggKmJ1ZmZlciwgaW50IG5CeXRlcyk7Cit2b2lkIHlhZmZzX0hhbmRsZUNodW5rRXJy b3IoeWFmZnNfRGV2aWNlICpkZXYsIHlhZmZzX0Jsb2NrSW5mbyAqYmkpOworCitfX3U4ICp5 YWZmc19HZXRUZW1wQnVmZmVyKHlhZmZzX0RldmljZSAqZGV2LCBpbnQgbGluZU5vKTsKK3Zv aWQgeWFmZnNfUmVsZWFzZVRlbXBCdWZmZXIoeWFmZnNfRGV2aWNlICpkZXYsIF9fdTggKmJ1 ZmZlciwgaW50IGxpbmVObyk7CisKKyNlbmRpZgpkaWZmIC11IC0tbmV3LWZpbGUgLS1yZWN1 cnNpdmUgbGludXgtMi42LjI5LjYub3JpZy9mcy95YWZmczIveWFmZnNpbnRlcmZhY2UuaCBs aW51eC0yLjYuMjkuNi5tb2QvZnMveWFmZnMyL3lhZmZzaW50ZXJmYWNlLmgKLS0tIGxpbnV4 LTIuNi4yOS42Lm9yaWcvZnMveWFmZnMyL3lhZmZzaW50ZXJmYWNlLmgJMTk2OS0xMi0zMSAx NzowMDowMC4wMDAwMDAwMDAgLTA3MDAKKysrIGxpbnV4LTIuNi4yOS42Lm1vZC9mcy95YWZm czIveWFmZnNpbnRlcmZhY2UuaAkyMDA5LTA3LTIxIDExOjI4OjE4LjAwMDAwMDAwMCAtMDcw MApAQCAtMCwwICsxLDIxIEBACisvKgorICogWUFGRlM6IFlldCBhbm90aGVyIEZsYXNoIEZp bGUgU3lzdGVtIC4gQSBOQU5ELWZsYXNoIHNwZWNpZmljIGZpbGUgc3lzdGVtLgorICoKKyAq IENvcHlyaWdodCAoQykgMjAwMi0yMDA3IEFsZXBoIE9uZSBMdGQuCisgKiAgIGZvciBUb2J5 IENodXJjaGlsbCBMdGQgYW5kIEJyaWdodHN0YXIgRW5naW5lZXJpbmcKKyAqCisgKiBDcmVh dGVkIGJ5IENoYXJsZXMgTWFubmluZyA8Y2hhcmxlc0BhbGVwaDEuY28udWs+CisgKgorICog VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xIGFzCisgKiBwdWJsaXNoZWQg YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBOb3RlOiBPbmx5IFlB RkZTIGhlYWRlcnMgYXJlIExHUEwsIFlBRkZTIEMgY29kZSBpcyBjb3ZlcmVkIGJ5IEdQTC4K KyAqLworCisjaWZuZGVmIF9fWUFGRlNJTlRFUkZBQ0VfSF9fCisjZGVmaW5lIF9fWUFGRlNJ TlRFUkZBQ0VfSF9fCisKK2ludCB5YWZmc19Jbml0aWFsaXNlKHVuc2lnbmVkIG5CbG9ja3Mp OworCisjZW5kaWYKZGlmZiAtdSAtLW5ldy1maWxlIC0tcmVjdXJzaXZlIGxpbnV4LTIuNi4y OS42Lm9yaWcvZnMveWFmZnMyL3lhZmZzX210ZGlmMS5jIGxpbnV4LTIuNi4yOS42Lm1vZC9m cy95YWZmczIveWFmZnNfbXRkaWYxLmMKLS0tIGxpbnV4LTIuNi4yOS42Lm9yaWcvZnMveWFm ZnMyL3lhZmZzX210ZGlmMS5jCTE5NjktMTItMzEgMTc6MDA6MDAuMDAwMDAwMDAwIC0wNzAw CisrKyBsaW51eC0yLjYuMjkuNi5tb2QvZnMveWFmZnMyL3lhZmZzX210ZGlmMS5jCTIwMDkt MDctMjEgMTE6Mjg6MTguMDAwMDAwMDAwIC0wNzAwCkBAIC0wLDAgKzEsMzY1IEBACisvKgor ICogWUFGRlM6IFlldCBhbm90aGVyIEZGUy4gQSBOQU5ELWZsYXNoIHNwZWNpZmljIGZpbGUg c3lzdGVtLgorICogeWFmZnNfbXRkaWYxLmMgIE5BTkQgbXRkIGludGVyZmFjZSBmdW5jdGlv bnMgZm9yIHNtYWxsLXBhZ2UgTkFORC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgQWxl cGggT25lIEx0ZC4KKyAqICAgZm9yIFRvYnkgQ2h1cmNoaWxsIEx0ZCBhbmQgQnJpZ2h0c3Rh ciBFbmdpbmVlcmluZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwor ICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKwor LyoKKyAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHRoZSBpbnRlcmZhY2UgYmV0d2VlbiB5YWZm c19uYW5kLmMgYW5kIHRoZQorICogTVREIEFQSS4gIFRoaXMgdmVyc2lvbiBpcyB1c2VkIHdo ZW4gdGhlIE1URCBpbnRlcmZhY2Ugc3VwcG9ydHMgdGhlCisgKiAnbXRkX29vYl9vcHMnIHN0 eWxlIGNhbGxzIHRvIHJlYWRfb29iIGFuZCB3cml0ZV9vb2IsIGNpcmNhIDIuNi4xNywKKyAq IGFuZCB3ZSBoYXZlIHNtYWxsLXBhZ2UgTkFORCBkZXZpY2UuCisgKgorICogVGhlc2UgZnVu Y3Rpb25zIGFyZSBpbnZva2VkIHZpYSBmdW5jdGlvbiBwb2ludGVycyBpbiB5YWZmc19uYW5k LmMuCisgKiBUaGlzIHJlcGxhY2VzIGZ1bmN0aW9uYWxpdHkgcHJvdmlkZWQgYnkgZnVuY3Rp b25zIGluIHlhZmZzX210ZGlmLmMKKyAqIGFuZCB0aGUgeWFmZnNfVGFnc0NvbXBhdGFiaWxp dHkgZnVuY3Rpb25zIGluIHlhZmZzX3RhZ3Njb21wYXQuYyB0aGF0IGFyZQorICogY2FsbGVk IGluIHlhZmZzX210ZGlmLmMgd2hlbiB0aGUgZnVuY3Rpb24gcG9pbnRlcnMgYXJlIE5VTEwu CisgKiBXZSBhc3N1bWUgdGhlIE1URCBsYXllciBpcyBwZXJmb3JtaW5nIEVDQyAodXNlTkFO REVDQyBpcyB0cnVlKS4KKyAqLworCisjaW5jbHVkZSAieXBvcnRlbnYuaCIKKyNpbmNsdWRl ICJ5YWZmc19ndXRzLmgiCisjaW5jbHVkZSAieWFmZnNfcGFja2VkdGFnczEuaCIKKyNpbmNs dWRlICJ5YWZmc190YWdzY29tcGF0LmgiCS8qIGZvciB5YWZmc19DYWxjVGFnc0VDQyAqLwor CisjaW5jbHVkZSAibGludXgva2VybmVsLmgiCisjaW5jbHVkZSAibGludXgvdmVyc2lvbi5o IgorI2luY2x1ZGUgImxpbnV4L3R5cGVzLmgiCisjaW5jbHVkZSAibGludXgvbXRkL210ZC5o IgorCisvKiBEb24ndCBjb21waWxlIHRoaXMgbW9kdWxlIGlmIHdlIGRvbid0IGhhdmUgTVRE J3MgbXRkX29vYl9vcHMgaW50ZXJmYWNlICovCisjaWYgKE1URF9WRVJTSU9OX0NPREUgPiBN VERfVkVSU0lPTigyLCA2LCAxNykpCisKK2NvbnN0IGNoYXIgKnlhZmZzX210ZGlmMV9jX3Zl cnNpb24gPSAiJElkOiB5YWZmc19tdGRpZjEuYyx2IDEuMTAgMjAwOS0wMy0wOSAwNzo0MTox MCBjaGFybGVzIEV4cCAkIjsKKworI2lmbmRlZiBDT05GSUdfWUFGRlNfOUJZVEVfVEFHUwor IyBkZWZpbmUgWVRBRzFfU0laRSA4CisjZWxzZQorIyBkZWZpbmUgWVRBRzFfU0laRSA5Cisj ZW5kaWYKKworI2lmIDAKKy8qIFVzZSB0aGUgZm9sbG93aW5nIG5hbmRfZWNjbGF5b3V0IHdp dGggTVREIHdoZW4gdXNpbmcKKyAqIENPTkZJR19ZQUZGU185QllURV9UQUdTIGFuZCB0aGUg b2xkZXIgb24tTkFORCB0YWdzIGxheW91dC4KKyAqIElmIHlvdSBoYXZlIGV4aXN0aW5nIFlh ZmZzIGltYWdlcyBhbmQgdGhlIGJ5dGUgb3JkZXIgZGlmZmVycyBmcm9tIHRoaXMsCisgKiBh ZGp1c3QgJ29vYmZyZWUnIHRvIG1hdGNoIHlvdXIgZXhpc3RpbmcgWWFmZnMgZGF0YS4KKyAq CisgKiBUaGlzIG5hbmRfZWNjbGF5b3V0IHNjYXR0ZXJzL2dhdGhlcnMgdG8vZnJvbSB0aGUg b2xkLXlhZmZzIGxheW91dCB3aXRoIHRoZQorICogcGFnZVN0YXR1cyBieXRlIChhdCBOQU5E IHNwYXJlIG9mZnNldCA0KSBzY2F0dGVyZWQvZ2F0aGVyZWQgZnJvbS90bworICogdGhlIDl0 aCBieXRlLgorICoKKyAqIE9sZC1zdHlsZSBvbi1OQU5EIGZvcm1hdDogVDAsVDEsVDIsVDMs UCxCLFQ0LFQ1LEUwLEUxLEUyLFQ2LFQ3LEUzLEU0LEU1CisgKiBXZSBoYXZlL25lZWQgUGFj a2VkVGFnczEgcGx1cyBwYWdlU3RhdHVzOiBUMCxUMSxUMixUMyxUNCxUNSxUNixUNyxQCisg KiB3aGVyZSBUbiBhcmUgdGhlIHRhZyBieXRlcywgRW4gYXJlIE1URCdzIEVDQyBieXRlcywg UCBpcyB0aGUgcGFnZVN0YXR1cworICogYnl0ZSBhbmQgQiBpcyB0aGUgc21hbGwtcGFnZSBi YWQtYmxvY2sgaW5kaWNhdG9yIGJ5dGUuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbmFuZF9lY2Ns YXlvdXQgbmFuZF9vb2JfMTYgPSB7CisJLmVjY2J5dGVzID0gNiwKKwkuZWNjcG9zID0geyA4 LCA5LCAxMCwgMTMsIDE0LCAxNSB9LAorCS5vb2JhdmFpbCA9IDksCisJLm9vYmZyZWUgPSB7 IHsgMCwgNCB9LCB7IDYsIDIgfSwgeyAxMSwgMiB9LCB7IDQsIDEgfSB9Cit9OworI2VuZGlm CisKKy8qIFdyaXRlIGEgY2h1bmsgKHBhZ2UpIG9mIGRhdGEgdG8gTkFORC4KKyAqCisgKiBD YWxsZXIgYWx3YXlzIHByb3ZpZGVzIEV4dGVuZGVkVGFncyBkYXRhIHdoaWNoIGFyZSBjb252 ZXJ0ZWQgdG8gYSBtb3JlCisgKiBjb21wYWN0IChwYWNrZWQpIGZvcm0gZm9yIHN0b3JhZ2Ug aW4gTkFORC4gIEEgbWluaS1FQ0MgcnVucyBvdmVyIHRoZQorICogY29udGVudHMgb2YgdGhl IHRhZ3MgbWV0YS1kYXRhOyB1c2VkIHRvIHZhbGlkIHRoZSB0YWdzIHdoZW4gcmVhZC4KKyAq CisgKiAgLSBQYWNrIEV4dGVuZGVkVGFncyB0byBQYWNrZWRUYWdzMSBmb3JtCisgKiAgLSBD b21wdXRlIG1pbmktRUNDIGZvciBQYWNrZWRUYWdzMQorICogIC0gV3JpdGUgZGF0YSBhbmQg cGFja2VkIHRhZ3MgdG8gTkFORC4KKyAqCisgKiBOb3RlOiBEdWUgdG8gdGhlIHVzZSBvZiB0 aGUgUGFja2VkVGFnczEgbWV0YS1kYXRhIHdoaWNoIGRvZXMgbm90IGluY2x1ZGUKKyAqIGEg ZnVsbCBzZXF1ZW5jZSBudW1iZXIgKGFzIGZvdW5kIGluIHRoZSBsYXJnZXIgUGFja2VkVGFn czIgZm9ybSkgaXQgaXMKKyAqIG5lY2Vzc2FyeSBmb3IgWWFmZnMgdG8gcmUtd3JpdGUgYSBj aHVuay9wYWdlIChqdXN0IG9uY2UpIHRvIG1hcmsgaXQgYXMKKyAqIGRpc2NhcmRlZCBhbmQg ZGlydHkuICBUaGlzIGlzIG5vdCBpZGVhbDogbmV3ZXIgTkFORCBwYXJ0cyBhcmUgc3VwcG9z ZWQKKyAqIHRvIGJlIHdyaXR0ZW4ganVzdCBvbmNlLiAgV2hlbiBZYWZmcyBwZXJmb3JtcyB0 aGlzIG9wZXJhdGlvbiwgdGhpcworICogZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggYSBOVUxM IGRhdGEgcG9pbnRlciAtLSBjYWxsaW5nIE1URCB3cml0ZV9vb2IKKyAqIHdpdGhvdXQgZGF0 YSBpcyB2YWxpZCB1c2FnZSAoMi42LjE3KS4KKyAqCisgKiBBbnkgdW5kZXJseWluZyBNVEQg ZXJyb3IgcmVzdWx0cyBpbiBZQUZGU19GQUlMLgorICogUmV0dXJucyBZQUZGU19PSyBvciBZ QUZGU19GQUlMLgorICovCitpbnQgbmFuZG10ZDFfV3JpdGVDaHVua1dpdGhUYWdzVG9OQU5E KHlhZmZzX0RldmljZSAqZGV2LAorCWludCBjaHVua0luTkFORCwgY29uc3QgX191OCAqZGF0 YSwgY29uc3QgeWFmZnNfRXh0ZW5kZWRUYWdzICpldGFncykKK3sKKwlzdHJ1Y3QgbXRkX2lu Zm8gKm10ZCA9IGRldi0+Z2VuZXJpY0RldmljZTsKKwlpbnQgY2h1bmtCeXRlcyA9IGRldi0+ bkRhdGFCeXRlc1BlckNodW5rOworCWxvZmZfdCBhZGRyID0gKChsb2ZmX3QpY2h1bmtJbk5B TkQpICogY2h1bmtCeXRlczsKKwlzdHJ1Y3QgbXRkX29vYl9vcHMgb3BzOworCXlhZmZzX1Bh Y2tlZFRhZ3MxIHB0MTsKKwlpbnQgcmV0dmFsOworCisJLyogd2UgYXNzdW1lIHRoYXQgUGFj a2VkVGFnczEgYW5kIHlhZmZzX1RhZ3MgYXJlIGNvbXBhdGlibGUgKi8KKwljb21waWxlX3Rp bWVfYXNzZXJ0aW9uKHNpemVvZih5YWZmc19QYWNrZWRUYWdzMSkgPT0gMTIpOworCWNvbXBp bGVfdGltZV9hc3NlcnRpb24oc2l6ZW9mKHlhZmZzX1RhZ3MpID09IDgpOworCisJZGV2LT5u UGFnZVdyaXRlcysrOworCisJeWFmZnNfUGFja1RhZ3MxKCZwdDEsIGV0YWdzKTsKKwl5YWZm c19DYWxjVGFnc0VDQygoeWFmZnNfVGFncyAqKSZwdDEpOworCisJLyogV2hlbiBkZWxldGlu ZyBhIGNodW5rLCB0aGUgdXBwZXIgbGF5ZXIgcHJvdmlkZXMgb25seSBza2VsZXRhbAorCSAq IGV0YWdzLCBvbmUgd2l0aCBjaHVua0RlbGV0ZWQgc2V0LiAgSG93ZXZlciwgd2UgbmVlZCB0 byB1cGRhdGUgdGhlCisJICogdGFncywgbm90IGVyYXNlIHRoZW0gY29tcGxldGVseS4gIFNv IHdlIHVzZSB0aGUgTkFORCB3cml0ZSBwcm9wZXJ0eQorCSAqIHRoYXQgb25seSB6ZXJvZWQt Yml0cyBzdGljayBhbmQgc2V0IHRhZyBieXRlcyB0byBhbGwtb25lcyBhbmQKKwkgKiB6ZXJv IGp1c3QgdGhlIChub3QpIGRlbGV0ZWQgYml0LgorCSAqLworI2lmbmRlZiBDT05GSUdfWUFG RlNfOUJZVEVfVEFHUworCWlmIChldGFncy0+Y2h1bmtEZWxldGVkKSB7CisJCW1lbXNldCgm cHQxLCAweGZmLCA4KTsKKwkJLyogY2xlYXIgZGVsZXRlIHN0YXR1cyBiaXQgdG8gaW5kaWNh dGUgZGVsZXRlZCAqLworCQlwdDEuZGVsZXRlZCA9IDA7CisJfQorI2Vsc2UKKwkoKF9fdTgg KikmcHQxKVs4XSA9IDB4ZmY7CisJaWYgKGV0YWdzLT5jaHVua0RlbGV0ZWQpIHsKKwkJbWVt c2V0KCZwdDEsIDB4ZmYsIDgpOworCQkvKiB6ZXJvIHBhZ2VTdGF0dXMgYnl0ZSB0byBpbmRp Y2F0ZSBkZWxldGVkICovCisJCSgoX191OCAqKSZwdDEpWzhdID0gMDsKKwl9CisjZW5kaWYK KworCW1lbXNldCgmb3BzLCAwLCBzaXplb2Yob3BzKSk7CisJb3BzLm1vZGUgPSBNVERfT09C X0FVVE87CisJb3BzLmxlbiA9IChkYXRhKSA/IGNodW5rQnl0ZXMgOiAwOworCW9wcy5vb2Js ZW4gPSBZVEFHMV9TSVpFOworCW9wcy5kYXRidWYgPSAoX191OCAqKWRhdGE7CisJb3BzLm9v YmJ1ZiA9IChfX3U4ICopJnB0MTsKKworCXJldHZhbCA9IG10ZC0+d3JpdGVfb29iKG10ZCwg YWRkciwgJm9wcyk7CisJaWYgKHJldHZhbCkgeworCQl5YWZmc190cmFjZShZQUZGU19UUkFD RV9NVEQsCisJCQkid3JpdGVfb29iIGZhaWxlZCwgY2h1bmsgJWQsIG10ZCBlcnJvciAlZFxu IiwKKwkJCWNodW5rSW5OQU5ELCByZXR2YWwpOworCX0KKwlyZXR1cm4gcmV0dmFsID8gWUFG RlNfRkFJTCA6IFlBRkZTX09LOworfQorCisvKiBSZXR1cm4gd2l0aCBlbXB0eSBFeHRlbmRl ZFRhZ3MgYnV0IGFkZCBlY2NSZXN1bHQuCisgKi8KK3N0YXRpYyBpbnQgcmV0dGFncyh5YWZm c19FeHRlbmRlZFRhZ3MgKmV0YWdzLCBpbnQgZWNjUmVzdWx0LCBpbnQgcmV0dmFsKQorewor CWlmIChldGFncykgeworCQltZW1zZXQoZXRhZ3MsIDAsIHNpemVvZigqZXRhZ3MpKTsKKwkJ ZXRhZ3MtPmVjY1Jlc3VsdCA9IGVjY1Jlc3VsdDsKKwl9CisJcmV0dXJuIHJldHZhbDsKK30K KworLyogUmVhZCBhIGNodW5rIChwYWdlKSBmcm9tIE5BTkQuCisgKgorICogQ2FsbGVyIGV4 cGVjdHMgRXh0ZW5kZWRUYWdzIGRhdGEgdG8gYmUgdXNhYmxlIGV2ZW4gb24gZXJyb3I7IHRo YXQgaXMsCisgKiBhbGwgbWVtYmVycyBleGNlcHQgZWNjUmVzdWx0IGFuZCBibG9ja0JhZCBh cmUgemVyb2VkLgorICoKKyAqICAtIENoZWNrIEVDQyByZXN1bHRzIGZvciBkYXRhIChpZiBh cHBsaWNhYmxlKQorICogIC0gQ2hlY2sgZm9yIGJsYW5rL2VyYXNlZCBibG9jayAocmV0dXJu IGVtcHR5IEV4dGVuZGVkVGFncyBpZiBibGFuaykKKyAqICAtIENoZWNrIHRoZSBQYWNrZWRU YWdzMSBtaW5pLUVDQyAoY29ycmVjdCBpZiBuZWNlc3NhcnkvcG9zc2libGUpCisgKiAgLSBD b252ZXJ0IFBhY2tlZFRhZ3MxIHRvIEV4dGVuZGVkVGFncworICogIC0gVXBkYXRlIGVjY1Jl c3VsdCBhbmQgYmxvY2tCYWQgbWVtYmVycyB0byByZWZlY3Qgc3RhdGUuCisgKgorICogUmV0 dXJucyBZQUZGU19PSyBvciBZQUZGU19GQUlMLgorICovCitpbnQgbmFuZG10ZDFfUmVhZENo dW5rV2l0aFRhZ3NGcm9tTkFORCh5YWZmc19EZXZpY2UgKmRldiwKKwlpbnQgY2h1bmtJbk5B TkQsIF9fdTggKmRhdGEsIHlhZmZzX0V4dGVuZGVkVGFncyAqZXRhZ3MpCit7CisJc3RydWN0 IG10ZF9pbmZvICptdGQgPSBkZXYtPmdlbmVyaWNEZXZpY2U7CisJaW50IGNodW5rQnl0ZXMg PSBkZXYtPm5EYXRhQnl0ZXNQZXJDaHVuazsKKwlsb2ZmX3QgYWRkciA9ICgobG9mZl90KWNo dW5rSW5OQU5EKSAqIGNodW5rQnl0ZXM7CisJaW50IGVjY3JlcyA9IFlBRkZTX0VDQ19SRVNV TFRfTk9fRVJST1I7CisJc3RydWN0IG10ZF9vb2Jfb3BzIG9wczsKKwl5YWZmc19QYWNrZWRU YWdzMSBwdDE7CisJaW50IHJldHZhbDsKKwlpbnQgZGVsZXRlZDsKKworCWRldi0+blBhZ2VS ZWFkcysrOworCisJbWVtc2V0KCZvcHMsIDAsIHNpemVvZihvcHMpKTsKKwlvcHMubW9kZSA9 IE1URF9PT0JfQVVUTzsKKwlvcHMubGVuID0gKGRhdGEpID8gY2h1bmtCeXRlcyA6IDA7CisJ b3BzLm9vYmxlbiA9IFlUQUcxX1NJWkU7CisJb3BzLmRhdGJ1ZiA9IGRhdGE7CisJb3BzLm9v YmJ1ZiA9IChfX3U4ICopJnB0MTsKKworI2lmIChNVERfVkVSU0lPTl9DT0RFIDwgTVREX1ZF UlNJT04oMiwgNiwgMjApKQorCS8qIEluIE1URCAyLjYuMTggdG8gMi42LjE5IG5hbmRfYmFz ZS5jOm5hbmRfZG9fcmVhZF9vb2IoKSBoYXMgYSBidWc7CisJICogaGVscCBpdCBvdXQgd2l0 aCBvcHMubGVuID0gb3BzLm9vYmxlbiB3aGVuIG9wcy5kYXRidWYgPT0gTlVMTC4KKwkgKi8K KwlvcHMubGVuID0gKG9wcy5kYXRidWYpID8gb3BzLmxlbiA6IG9wcy5vb2JsZW47CisjZW5k aWYKKwkvKiBSZWFkIHBhZ2UgYW5kIG9vYiB1c2luZyBNVEQuCisJICogQ2hlY2sgc3RhdHVz IGFuZCBkZXRlcm1pbmUgRUNDIHJlc3VsdC4KKwkgKi8KKwlyZXR2YWwgPSBtdGQtPnJlYWRf b29iKG10ZCwgYWRkciwgJm9wcyk7CisJaWYgKHJldHZhbCkgeworCQl5YWZmc190cmFjZShZ QUZGU19UUkFDRV9NVEQsCisJCQkicmVhZF9vb2IgZmFpbGVkLCBjaHVuayAlZCwgbXRkIGVy cm9yICVkXG4iLAorCQkJY2h1bmtJbk5BTkQsIHJldHZhbCk7CisJfQorCisJc3dpdGNoIChy ZXR2YWwpIHsKKwljYXNlIDA6CisJCS8qIG5vIGVycm9yICovCisJCWJyZWFrOworCisJY2Fz ZSAtRVVDTEVBTjoKKwkJLyogTVREJ3MgRUNDIGZpeGVkIHRoZSBkYXRhICovCisJCWVjY3Jl cyA9IFlBRkZTX0VDQ19SRVNVTFRfRklYRUQ7CisJCWRldi0+ZWNjRml4ZWQrKzsKKwkJYnJl YWs7CisKKwljYXNlIC1FQkFETVNHOgorCQkvKiBNVEQncyBFQ0MgY291bGQgbm90IGZpeCB0 aGUgZGF0YSAqLworCQlkZXYtPmVjY1VuZml4ZWQrKzsKKwkJLyogZmFsbCBpbnRvLi4uICov CisJZGVmYXVsdDoKKwkJcmV0dGFncyhldGFncywgWUFGRlNfRUNDX1JFU1VMVF9VTkZJWEVE LCAwKTsKKwkJZXRhZ3MtPmJsb2NrQmFkID0gKG10ZC0+YmxvY2tfaXNiYWQpKG10ZCwgYWRk cik7CisJCXJldHVybiBZQUZGU19GQUlMOworCX0KKworCS8qIENoZWNrIGZvciBhIGJsYW5r L2VyYXNlZCBjaHVuay4KKwkgKi8KKwlpZiAoeWFmZnNfQ2hlY2tGRigoX191OCAqKSZwdDEs IDgpKSB7CisJCS8qIHdoZW4gYmxhbmssIHVwcGVyIGxheWVycyB3YW50IGVjY1Jlc3VsdCB0 byBiZSA8PSBOT19FUlJPUiAqLworCQlyZXR1cm4gcmV0dGFncyhldGFncywgWUFGRlNfRUND X1JFU1VMVF9OT19FUlJPUiwgWUFGRlNfT0spOworCX0KKworI2lmbmRlZiBDT05GSUdfWUFG RlNfOUJZVEVfVEFHUworCS8qIFJlYWQgZGVsZXRlZCBzdGF0dXMgKGJpdCkgdGhlbiByZXR1 cm4gaXQgdG8gaXQncyBub24tZGVsZXRlZAorCSAqIHN0YXRlIGJlZm9yZSBwZXJmb3JtaW5n IHRhZ3MgbWluaS1FQ0MgY2hlY2suIHB0MS5kZWxldGVkIGlzCisJICogaW52ZXJ0ZWQuCisJ ICovCisJZGVsZXRlZCA9ICFwdDEuZGVsZXRlZDsKKwlwdDEuZGVsZXRlZCA9IDE7CisjZWxz ZQorCWRlbGV0ZWQgPSAoeWFmZnNfQ291bnRCaXRzKCgoX191OCAqKSZwdDEpWzhdKSA8IDcp OworI2VuZGlmCisKKwkvKiBDaGVjayB0aGUgcGFja2VkIHRhZ3MgbWluaS1FQ0MgYW5kIGNv cnJlY3QgaWYgbmVjZXNzYXJ5L3Bvc3NpYmxlLgorCSAqLworCXJldHZhbCA9IHlhZmZzX0No ZWNrRUNDT25UYWdzKCh5YWZmc19UYWdzICopJnB0MSk7CisJc3dpdGNoIChyZXR2YWwpIHsK KwljYXNlIDA6CisJCS8qIG5vIHRhZ3MgZXJyb3IsIHVzZSBNVEQgcmVzdWx0ICovCisJCWJy ZWFrOworCWNhc2UgMToKKwkJLyogcmVjb3ZlcmVkIHRhZ3MtRUNDIGVycm9yICovCisJCWRl di0+dGFnc0VjY0ZpeGVkKys7CisJCWlmIChlY2NyZXMgPT0gWUFGRlNfRUNDX1JFU1VMVF9O T19FUlJPUikKKwkJCWVjY3JlcyA9IFlBRkZTX0VDQ19SRVNVTFRfRklYRUQ7CisJCWJyZWFr OworCWRlZmF1bHQ6CisJCS8qIHVucmVjb3ZlcmVkIHRhZ3MtRUNDIGVycm9yICovCisJCWRl di0+dGFnc0VjY1VuZml4ZWQrKzsKKwkJcmV0dXJuIHJldHRhZ3MoZXRhZ3MsIFlBRkZTX0VD Q19SRVNVTFRfVU5GSVhFRCwgWUFGRlNfRkFJTCk7CisJfQorCisJLyogVW5wYWNrIHRoZSB0 YWdzIHRvIGV4dGVuZGVkIGZvcm0gYW5kIHNldCBFQ0MgcmVzdWx0LgorCSAqIFtzZXQgc2hv dWxkQmVGRiBqdXN0IHRvIGtlZXAgeWFmZnNfVW5wYWNrVGFnczEgaGFwcHldCisJICovCisJ cHQxLnNob3VsZEJlRkYgPSAweEZGRkZGRkZGOworCXlhZmZzX1VucGFja1RhZ3MxKGV0YWdz LCAmcHQxKTsKKwlldGFncy0+ZWNjUmVzdWx0ID0gZWNjcmVzOworCisJLyogU2V0IGRlbGV0 ZWQgc3RhdGUgKi8KKwlldGFncy0+Y2h1bmtEZWxldGVkID0gZGVsZXRlZDsKKwlyZXR1cm4g WUFGRlNfT0s7Cit9CisKKy8qIE1hcmsgYSBibG9jayBiYWQuCisgKgorICogVGhpcyBpcyBh IHBlcnNpc3RhbnQgc3RhdGUuCisgKiBVc2Ugb2YgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUg cmFyZS4KKyAqCisgKiBSZXR1cm5zIFlBRkZTX09LIG9yIFlBRkZTX0ZBSUwuCisgKi8KK2lu dCBuYW5kbXRkMV9NYXJrTkFOREJsb2NrQmFkKHN0cnVjdCB5YWZmc19EZXZpY2VTdHJ1Y3Qg KmRldiwgaW50IGJsb2NrTm8pCit7CisJc3RydWN0IG10ZF9pbmZvICptdGQgPSBkZXYtPmdl bmVyaWNEZXZpY2U7CisJaW50IGJsb2Nrc2l6ZSA9IGRldi0+bkNodW5rc1BlckJsb2NrICog ZGV2LT5uRGF0YUJ5dGVzUGVyQ2h1bms7CisJaW50IHJldHZhbDsKKworCXlhZmZzX3RyYWNl KFlBRkZTX1RSQUNFX0JBRF9CTE9DS1MsICJtYXJraW5nIGJsb2NrICVkIGJhZFxuIiwgYmxv Y2tObyk7CisKKwlyZXR2YWwgPSBtdGQtPmJsb2NrX21hcmtiYWQobXRkLCAobG9mZl90KWJs b2Nrc2l6ZSAqIGJsb2NrTm8pOworCXJldHVybiAocmV0dmFsKSA/IFlBRkZTX0ZBSUwgOiBZ QUZGU19PSzsKK30KKworLyogQ2hlY2sgYW55IE1URCBwcmVyZXF1aXN0cy4KKyAqCisgKiBS ZXR1cm5zIFlBRkZTX09LIG9yIFlBRkZTX0ZBSUwuCisgKi8KK3N0YXRpYyBpbnQgbmFuZG10 ZDFfVGVzdFByZXJlcXVpc3RzKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQoreworCS8qIDIuNi4x OCBoYXMgbXRkLT5lY2NsYXlvdXQtPm9vYmF2YWlsICovCisJLyogMi42LjIxIGhhcyBtdGQt PmVjY2xheW91dC0+b29iYXZhaWwgYW5kIG10ZC0+b29iYXZhaWwgKi8KKwlpbnQgb29iYXZh aWwgPSBtdGQtPmVjY2xheW91dC0+b29iYXZhaWw7CisKKwlpZiAob29iYXZhaWwgPCBZVEFH MV9TSVpFKSB7CisJCXlhZmZzX3RyYWNlKFlBRkZTX1RSQUNFX0VSUk9SLAorCQkJIm10ZCBk ZXZpY2UgaGFzIG9ubHkgJWQgYnl0ZXMgZm9yIHRhZ3MsIG5lZWQgJWRcbiIsCisJCQlvb2Jh dmFpbCwgWVRBRzFfU0laRSk7CisJCXJldHVybiBZQUZGU19GQUlMOworCX0KKwlyZXR1cm4g WUFGRlNfT0s7Cit9CisKKy8qIFF1ZXJ5IGZvciB0aGUgY3VycmVudCBzdGF0ZSBvZiBhIHNw ZWNpZmljIGJsb2NrLgorICoKKyAqIEV4YW1pbmUgdGhlIHRhZ3Mgb2YgdGhlIGZpcnN0IGNo dW5rIG9mIHRoZSBibG9jayBhbmQgcmV0dXJuIHRoZSBzdGF0ZToKKyAqICAtIFlBRkZTX0JM T0NLX1NUQVRFX0RFQUQsIHRoZSBibG9jayBpcyBtYXJrZWQgYmFkCisgKiAgLSBZQUZGU19C TE9DS19TVEFURV9ORUVEU19TQ0FOTklORywgdGhlIGJsb2NrIGlzIGluIHVzZQorICogIC0g WUFGRlNfQkxPQ0tfU1RBVEVfRU1QVFksIHRoZSBibG9jayBpcyBjbGVhbgorICoKKyAqIEFs d2F5cyByZXR1cm5zIFlBRkZTX09LLgorICovCitpbnQgbmFuZG10ZDFfUXVlcnlOQU5EQmxv Y2soc3RydWN0IHlhZmZzX0RldmljZVN0cnVjdCAqZGV2LCBpbnQgYmxvY2tObywKKwl5YWZm c19CbG9ja1N0YXRlICpwU3RhdGUsIF9fdTMyICpwU2VxdWVuY2VOdW1iZXIpCit7CisJc3Ry dWN0IG10ZF9pbmZvICptdGQgPSBkZXYtPmdlbmVyaWNEZXZpY2U7CisJaW50IGNodW5rTm8g PSBibG9ja05vICogZGV2LT5uQ2h1bmtzUGVyQmxvY2s7CisJbG9mZl90IGFkZHIgPSAobG9m Zl90KWNodW5rTm8gKiBkZXYtPm5EYXRhQnl0ZXNQZXJDaHVuazsKKwl5YWZmc19FeHRlbmRl ZFRhZ3MgZXRhZ3M7CisJaW50IHN0YXRlID0gWUFGRlNfQkxPQ0tfU1RBVEVfREVBRDsKKwlp bnQgc2VxbnVtID0gMDsKKwlpbnQgcmV0dmFsOworCisJLyogV2UgZG9uJ3QgeWV0IGhhdmUg YSBnb29kIHBsYWNlIHRvIHRlc3QgZm9yIE1URCBjb25maWcgcHJlcmVxdWlzdHMuCisJICog RG8gaXQgaGVyZSBhcyB3ZSBhcmUgY2FsbGVkIGR1cmluZyB0aGUgaW5pdGlhbCBzY2FuLgor CSAqLworCWlmIChuYW5kbXRkMV9UZXN0UHJlcmVxdWlzdHMobXRkKSAhPSBZQUZGU19PSykK KwkJcmV0dXJuIFlBRkZTX0ZBSUw7CisKKwlyZXR2YWwgPSBuYW5kbXRkMV9SZWFkQ2h1bmtX aXRoVGFnc0Zyb21OQU5EKGRldiwgY2h1bmtObywgTlVMTCwgJmV0YWdzKTsKKwlldGFncy5i bG9ja0JhZCA9IChtdGQtPmJsb2NrX2lzYmFkKShtdGQsIGFkZHIpOworCWlmIChldGFncy5i bG9ja0JhZCkgeworCQl5YWZmc190cmFjZShZQUZGU19UUkFDRV9CQURfQkxPQ0tTLAorCQkJ ImJsb2NrICVkIGlzIG1hcmtlZCBiYWRcbiIsIGJsb2NrTm8pOworCQlzdGF0ZSA9IFlBRkZT X0JMT0NLX1NUQVRFX0RFQUQ7CisJfSBlbHNlIGlmIChldGFncy5lY2NSZXN1bHQgIT0gWUFG RlNfRUNDX1JFU1VMVF9OT19FUlJPUikgeworCQkvKiBiYWQgdGFncywgbmVlZCB0byBsb29r IG1vcmUgY2xvc2VseSAqLworCQlzdGF0ZSA9IFlBRkZTX0JMT0NLX1NUQVRFX05FRURTX1ND QU5OSU5HOworCX0gZWxzZSBpZiAoZXRhZ3MuY2h1bmtVc2VkKSB7CisJCXN0YXRlID0gWUFG RlNfQkxPQ0tfU1RBVEVfTkVFRFNfU0NBTk5JTkc7CisJCXNlcW51bSA9IGV0YWdzLnNlcXVl bmNlTnVtYmVyOworCX0gZWxzZSB7CisJCXN0YXRlID0gWUFGRlNfQkxPQ0tfU1RBVEVfRU1Q VFk7CisJfQorCisJKnBTdGF0ZSA9IHN0YXRlOworCSpwU2VxdWVuY2VOdW1iZXIgPSBzZXFu dW07CisKKwkvKiBxdWVyeSBhbHdheXMgc3VjY2VlZHMgKi8KKwlyZXR1cm4gWUFGRlNfT0s7 Cit9CisKKyNlbmRpZiAvKk1URF9WRVJTSU9OKi8KZGlmZiAtdSAtLW5ldy1maWxlIC0tcmVj dXJzaXZlIGxpbnV4LTIuNi4yOS42Lm9yaWcvZnMveWFmZnMyL3lhZmZzX210ZGlmMS5oIGxp bnV4LTIuNi4yOS42Lm1vZC9mcy95YWZmczIveWFmZnNfbXRkaWYxLmgKLS0tIGxpbnV4LTIu Ni4yOS42Lm9yaWcvZnMveWFmZnMyL3lhZmZzX210ZGlmMS5oCTE5NjktMTItMzEgMTc6MDA6 MDAuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYuMjkuNi5tb2QvZnMveWFmZnMyL3lh ZmZzX210ZGlmMS5oCTIwMDktMDctMjEgMTE6Mjg6MTguMDAwMDAwMDAwIC0wNzAwCkBAIC0w LDAgKzEsMjggQEAKKy8qCisgKiBZQUZGUzogWWV0IGFub3RoZXIgRmxhc2ggRmlsZSBTeXN0 ZW0uIEEgTkFORC1mbGFzaCBzcGVjaWZpYyBmaWxlIHN5c3RlbS4KKyAqCisgKiBDb3B5cmln aHQgKEMpIDIwMDItMjAwNyBBbGVwaCBPbmUgTHRkLgorICogICBmb3IgVG9ieSBDaHVyY2hp bGwgTHRkIGFuZCBCcmlnaHRzdGFyIEVuZ2luZWVyaW5nCisgKgorICogVGhpcyBwcm9ncmFt IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBOb3RlOiBPbmx5IFlBRkZTIGhlYWRlcnMg YXJlIExHUEwsIFlBRkZTIEMgY29kZSBpcyBjb3ZlcmVkIGJ5IEdQTC4KKyAqLworCisjaWZu ZGVmIF9fWUFGRlNfTVRESUYxX0hfXworI2RlZmluZSBfX1lBRkZTX01URElGMV9IX18KKwor aW50IG5hbmRtdGQxX1dyaXRlQ2h1bmtXaXRoVGFnc1RvTkFORCh5YWZmc19EZXZpY2UgKmRl diwgaW50IGNodW5rSW5OQU5ELAorCWNvbnN0IF9fdTggKmRhdGEsIGNvbnN0IHlhZmZzX0V4 dGVuZGVkVGFncyAqdGFncyk7CisKK2ludCBuYW5kbXRkMV9SZWFkQ2h1bmtXaXRoVGFnc0Zy b21OQU5EKHlhZmZzX0RldmljZSAqZGV2LCBpbnQgY2h1bmtJbk5BTkQsCisJX191OCAqZGF0 YSwgeWFmZnNfRXh0ZW5kZWRUYWdzICp0YWdzKTsKKworaW50IG5hbmRtdGQxX01hcmtOQU5E QmxvY2tCYWQoc3RydWN0IHlhZmZzX0RldmljZVN0cnVjdCAqZGV2LCBpbnQgYmxvY2tObyk7 CisKK2ludCBuYW5kbXRkMV9RdWVyeU5BTkRCbG9jayhzdHJ1Y3QgeWFmZnNfRGV2aWNlU3Ry dWN0ICpkZXYsIGludCBibG9ja05vLAorCXlhZmZzX0Jsb2NrU3RhdGUgKnN0YXRlLCBfX3Uz MiAqc2VxdWVuY2VOdW1iZXIpOworCisjZW5kaWYKZGlmZiAtdSAtLW5ldy1maWxlIC0tcmVj dXJzaXZlIGxpbnV4LTIuNi4yOS42Lm9yaWcvZnMveWFmZnMyL3lhZmZzX210ZGlmMi5jIGxp bnV4LTIuNi4yOS42Lm1vZC9mcy95YWZmczIveWFmZnNfbXRkaWYyLmMKLS0tIGxpbnV4LTIu Ni4yOS42Lm9yaWcvZnMveWFmZnMyL3lhZmZzX210ZGlmMi5jCTE5NjktMTItMzEgMTc6MDA6 MDAuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYuMjkuNi5tb2QvZnMveWFmZnMyL3lh ZmZzX210ZGlmMi5jCTIwMDktMDctMjEgMTE6Mjg6MTguMDAwMDAwMDAwIC0wNzAwCkBAIC0w LDAgKzEsMjQ2IEBACisvKgorICogWUFGRlM6IFlldCBBbm90aGVyIEZsYXNoIEZpbGUgU3lz dGVtLiBBIE5BTkQtZmxhc2ggc3BlY2lmaWMgZmlsZSBzeXN0ZW0uCisgKgorICogQ29weXJp Z2h0IChDKSAyMDAyLTIwMDcgQWxlcGggT25lIEx0ZC4KKyAqICAgZm9yIFRvYnkgQ2h1cmNo aWxsIEx0ZCBhbmQgQnJpZ2h0c3RhciBFbmdpbmVlcmluZworICoKKyAqIENyZWF0ZWQgYnkg Q2hhcmxlcyBNYW5uaW5nIDxjaGFybGVzQGFsZXBoMS5jby51az4KKyAqCisgKiBUaGlzIHBy b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uLgorICovCisKKy8qIG10ZCBpbnRlcmZhY2UgZm9yIFlBRkZTMiAq LworCitjb25zdCBjaGFyICp5YWZmc19tdGRpZjJfY192ZXJzaW9uID0KKwkiJElkOiB5YWZm c19tdGRpZjIuYyx2IDEuMjMgMjAwOS0wMy0wNiAxNzoyMDo1MyB3b29rZXkgRXhwICQiOwor CisjaW5jbHVkZSAieXBvcnRlbnYuaCIKKworCisjaW5jbHVkZSAieWFmZnNfbXRkaWYyLmgi CisKKyNpbmNsdWRlICJsaW51eC9tdGQvbXRkLmgiCisjaW5jbHVkZSAibGludXgvdHlwZXMu aCIKKyNpbmNsdWRlICJsaW51eC90aW1lLmgiCisKKyNpbmNsdWRlICJ5YWZmc19wYWNrZWR0 YWdzMi5oIgorCisvKiBOQiBGb3IgdXNlIHdpdGggaW5iYW5kIHRhZ3MuLi4uCisgKiBXZSBh c3N1bWUgdGhhdCB0aGUgZGF0YSBidWZmZXIgaXMgb2Ygc2l6ZSB0b3RhbEJ5dGVyc1BlckNo dW5rIHNvIHRoYXQgd2UgY2FuIGFsc28KKyAqIHVzZSBpdCB0byBsb2FkIHRoZSB0YWdzLgor ICovCitpbnQgbmFuZG10ZDJfV3JpdGVDaHVua1dpdGhUYWdzVG9OQU5EKHlhZmZzX0Rldmlj ZSAqZGV2LCBpbnQgY2h1bmtJbk5BTkQsCisJCQkJICAgICAgY29uc3QgX191OCAqZGF0YSwK KwkJCQkgICAgICBjb25zdCB5YWZmc19FeHRlbmRlZFRhZ3MgKnRhZ3MpCit7CisJc3RydWN0 IG10ZF9pbmZvICptdGQgPSAoc3RydWN0IG10ZF9pbmZvICopKGRldi0+Z2VuZXJpY0Rldmlj ZSk7CisjaWYgKE1URF9WRVJTSU9OX0NPREUgPiBNVERfVkVSU0lPTigyLCA2LCAxNykpCisJ c3RydWN0IG10ZF9vb2Jfb3BzIG9wczsKKyNlbHNlCisJc2l6ZV90IGR1bW15OworI2VuZGlm CisJaW50IHJldHZhbCA9IDA7CisKKwlsb2ZmX3QgYWRkcjsKKworCXlhZmZzX1BhY2tlZFRh Z3MyIHB0OworCisJVChZQUZGU19UUkFDRV9NVEQsCisJICAoVFNUUgorCSAgICgibmFuZG10 ZDJfV3JpdGVDaHVua1dpdGhUYWdzVG9OQU5EIGNodW5rICVkIGRhdGEgJXAgdGFncyAlcCIK KwkgICAgVEVORFNUUiksIGNodW5rSW5OQU5ELCBkYXRhLCB0YWdzKSk7CisKKworCWFkZHIg ID0gKChsb2ZmX3QpIGNodW5rSW5OQU5EKSAqIGRldi0+dG90YWxCeXRlc1BlckNodW5rOwor CisJLyogRm9yIHlhZmZzMiB3cml0aW5nIHRoZXJlIG11c3QgYmUgYm90aCBkYXRhIGFuZCB0 YWdzLgorCSAqIElmIHdlJ3JlIHVzaW5nIGluYmFuZCB0YWdzLCB0aGVuIHRoZSB0YWdzIGFy ZSBzdHVmZmVkIGludG8KKwkgKiB0aGUgZW5kIG9mIHRoZSBkYXRhIGJ1ZmZlci4KKwkgKi8K KwlpZiAoIWRhdGEgfHwgIXRhZ3MpCisJCUJVRygpOworCWVsc2UgaWYgKGRldi0+aW5iYW5k VGFncykgeworCQl5YWZmc19QYWNrZWRUYWdzMlRhZ3NQYXJ0ICpwdDJ0cDsKKwkJcHQydHAg PSAoeWFmZnNfUGFja2VkVGFnczJUYWdzUGFydCAqKShkYXRhICsgZGV2LT5uRGF0YUJ5dGVz UGVyQ2h1bmspOworCQl5YWZmc19QYWNrVGFnczJUYWdzUGFydChwdDJ0cCwgdGFncyk7CisJ fSBlbHNlCisJCXlhZmZzX1BhY2tUYWdzMigmcHQsIHRhZ3MpOworCisjaWYgKExJTlVYX1ZF UlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDE3KSkKKwlvcHMubW9kZSA9IE1U RF9PT0JfQVVUTzsKKwlvcHMub29ibGVuID0gKGRldi0+aW5iYW5kVGFncykgPyAwIDogc2l6 ZW9mKHB0KTsKKwlvcHMubGVuID0gZGV2LT50b3RhbEJ5dGVzUGVyQ2h1bms7CisJb3BzLm9v Ym9mZnMgPSAwOworCW9wcy5kYXRidWYgPSAoX191OCAqKWRhdGE7CisJb3BzLm9vYmJ1ZiA9 IChkZXYtPmluYmFuZFRhZ3MpID8gTlVMTCA6ICh2b2lkICopJnB0OworCXJldHZhbCA9IG10 ZC0+d3JpdGVfb29iKG10ZCwgYWRkciwgJm9wcyk7CisKKyNlbHNlCisJaWYgKCFkZXYtPmlu YmFuZFRhZ3MpIHsKKwkJcmV0dmFsID0KKwkJICAgIG10ZC0+d3JpdGVfZWNjKG10ZCwgYWRk ciwgZGV2LT5uRGF0YUJ5dGVzUGVyQ2h1bmssCisJCQkJICAgJmR1bW15LCBkYXRhLCAoX191 OCAqKSAmcHQsIE5VTEwpOworCX0gZWxzZSB7CisJCXJldHZhbCA9CisJCSAgICBtdGQtPndy aXRlKG10ZCwgYWRkciwgZGV2LT50b3RhbEJ5dGVzUGVyQ2h1bmssICZkdW1teSwKKwkJCSAg ICAgICBkYXRhKTsKKwl9CisjZW5kaWYKKworCWlmIChyZXR2YWwgPT0gMCkKKwkJcmV0dXJu IFlBRkZTX09LOworCWVsc2UKKwkJcmV0dXJuIFlBRkZTX0ZBSUw7Cit9CisKK2ludCBuYW5k bXRkMl9SZWFkQ2h1bmtXaXRoVGFnc0Zyb21OQU5EKHlhZmZzX0RldmljZSAqZGV2LCBpbnQg Y2h1bmtJbk5BTkQsCisJCQkJICAgICAgIF9fdTggKmRhdGEsIHlhZmZzX0V4dGVuZGVkVGFn cyAqdGFncykKK3sKKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IChzdHJ1Y3QgbXRkX2luZm8g KikoZGV2LT5nZW5lcmljRGV2aWNlKTsKKyNpZiAoTVREX1ZFUlNJT05fQ09ERSA+IE1URF9W RVJTSU9OKDIsIDYsIDE3KSkKKwlzdHJ1Y3QgbXRkX29vYl9vcHMgb3BzOworI2VuZGlmCisJ c2l6ZV90IGR1bW15OworCWludCByZXR2YWwgPSAwOworCWludCBsb2NhbERhdGEgPSAwOwor CisJbG9mZl90IGFkZHIgPSAoKGxvZmZfdCkgY2h1bmtJbk5BTkQpICogZGV2LT50b3RhbEJ5 dGVzUGVyQ2h1bms7CisKKwl5YWZmc19QYWNrZWRUYWdzMiBwdDsKKworCVQoWUFGRlNfVFJB Q0VfTVRELAorCSAgKFRTVFIKKwkgICAoIm5hbmRtdGQyX1JlYWRDaHVua1dpdGhUYWdzRnJv bU5BTkQgY2h1bmsgJWQgZGF0YSAlcCB0YWdzICVwIgorCSAgICBURU5EU1RSKSwgY2h1bmtJ bk5BTkQsIGRhdGEsIHRhZ3MpKTsKKworCWlmIChkZXYtPmluYmFuZFRhZ3MpIHsKKworCQlp ZiAoIWRhdGEpIHsKKwkJCWxvY2FsRGF0YSA9IDE7CisJCQlkYXRhID0geWFmZnNfR2V0VGVt cEJ1ZmZlcihkZXYsIF9fTElORV9fKTsKKwkJfQorCisKKwl9CisKKworI2lmIChMSU5VWF9W RVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLCA2LCAxNykpCisJaWYgKGRldi0+aW5i YW5kVGFncyB8fCAoZGF0YSAmJiAhdGFncykpCisJCXJldHZhbCA9IG10ZC0+cmVhZChtdGQs IGFkZHIsIGRldi0+dG90YWxCeXRlc1BlckNodW5rLAorCQkJCSZkdW1teSwgZGF0YSk7CisJ ZWxzZSBpZiAodGFncykgeworCQlvcHMubW9kZSA9IE1URF9PT0JfQVVUTzsKKwkJb3BzLm9v YmxlbiA9IHNpemVvZihwdCk7CisJCW9wcy5sZW4gPSBkYXRhID8gZGV2LT5uRGF0YUJ5dGVz UGVyQ2h1bmsgOiBzaXplb2YocHQpOworCQlvcHMub29ib2ZmcyA9IDA7CisJCW9wcy5kYXRi dWYgPSBkYXRhOworCQlvcHMub29iYnVmID0gZGV2LT5zcGFyZUJ1ZmZlcjsKKwkJcmV0dmFs ID0gbXRkLT5yZWFkX29vYihtdGQsIGFkZHIsICZvcHMpOworCX0KKyNlbHNlCisJaWYgKCFk ZXYtPmluYmFuZFRhZ3MgJiYgZGF0YSAmJiB0YWdzKSB7CisKKwkJcmV0dmFsID0gbXRkLT5y ZWFkX2VjYyhtdGQsIGFkZHIsIGRldi0+bkRhdGFCeXRlc1BlckNodW5rLAorCQkJCQkgICZk dW1teSwgZGF0YSwgZGV2LT5zcGFyZUJ1ZmZlciwKKwkJCQkJICBOVUxMKTsKKwl9IGVsc2Ug eworCQlpZiAoZGF0YSkKKwkJCXJldHZhbCA9CisJCQkgICAgbXRkLT5yZWFkKG10ZCwgYWRk ciwgZGV2LT5uRGF0YUJ5dGVzUGVyQ2h1bmssICZkdW1teSwKKwkJCQkgICAgICBkYXRhKTsK KwkJaWYgKCFkZXYtPmluYmFuZFRhZ3MgJiYgdGFncykKKwkJCXJldHZhbCA9CisJCQkgICAg bXRkLT5yZWFkX29vYihtdGQsIGFkZHIsIG10ZC0+b29ic2l6ZSwgJmR1bW15LAorCQkJCQkg IGRldi0+c3BhcmVCdWZmZXIpOworCX0KKyNlbmRpZgorCisKKwlpZiAoZGV2LT5pbmJhbmRU YWdzKSB7CisJCWlmICh0YWdzKSB7CisJCQl5YWZmc19QYWNrZWRUYWdzMlRhZ3NQYXJ0ICpw dDJ0cDsKKwkJCXB0MnRwID0gKHlhZmZzX1BhY2tlZFRhZ3MyVGFnc1BhcnQgKikmZGF0YVtk ZXYtPm5EYXRhQnl0ZXNQZXJDaHVua107CisJCQl5YWZmc19VbnBhY2tUYWdzMlRhZ3NQYXJ0 KHRhZ3MsIHB0MnRwKTsKKwkJfQorCX0gZWxzZSB7CisJCWlmICh0YWdzKSB7CisJCQltZW1j cHkoJnB0LCBkZXYtPnNwYXJlQnVmZmVyLCBzaXplb2YocHQpKTsKKwkJCXlhZmZzX1VucGFj a1RhZ3MyKHRhZ3MsICZwdCk7CisJCX0KKwl9CisKKwlpZiAobG9jYWxEYXRhKQorCQl5YWZm c19SZWxlYXNlVGVtcEJ1ZmZlcihkZXYsIGRhdGEsIF9fTElORV9fKTsKKworCWlmICh0YWdz ICYmIHJldHZhbCA9PSAtRUJBRE1TRyAmJiB0YWdzLT5lY2NSZXN1bHQgPT0gWUFGRlNfRUND X1JFU1VMVF9OT19FUlJPUikKKwkJdGFncy0+ZWNjUmVzdWx0ID0gWUFGRlNfRUNDX1JFU1VM VF9VTkZJWEVEOworCWlmIChyZXR2YWwgPT0gMCkKKwkJcmV0dXJuIFlBRkZTX09LOworCWVs c2UKKwkJcmV0dXJuIFlBRkZTX0ZBSUw7Cit9CisKK2ludCBuYW5kbXRkMl9NYXJrTkFOREJs b2NrQmFkKHN0cnVjdCB5YWZmc19EZXZpY2VTdHJ1Y3QgKmRldiwgaW50IGJsb2NrTm8pCit7 CisJc3RydWN0IG10ZF9pbmZvICptdGQgPSAoc3RydWN0IG10ZF9pbmZvICopKGRldi0+Z2Vu ZXJpY0RldmljZSk7CisJaW50IHJldHZhbDsKKwlUKFlBRkZTX1RSQUNFX01URCwKKwkgIChU U1RSKCJuYW5kbXRkMl9NYXJrTkFOREJsb2NrQmFkICVkIiBURU5EU1RSKSwgYmxvY2tObykp OworCisJcmV0dmFsID0KKwkgICAgbXRkLT5ibG9ja19tYXJrYmFkKG10ZCwKKwkJCSAgICAg ICBibG9ja05vICogZGV2LT5uQ2h1bmtzUGVyQmxvY2sgKgorCQkJICAgICAgIGRldi0+dG90 YWxCeXRlc1BlckNodW5rKTsKKworCWlmIChyZXR2YWwgPT0gMCkKKwkJcmV0dXJuIFlBRkZT X09LOworCWVsc2UKKwkJcmV0dXJuIFlBRkZTX0ZBSUw7CisKK30KKworaW50IG5hbmRtdGQy X1F1ZXJ5TkFOREJsb2NrKHN0cnVjdCB5YWZmc19EZXZpY2VTdHJ1Y3QgKmRldiwgaW50IGJs b2NrTm8sCisJCQkgICAgeWFmZnNfQmxvY2tTdGF0ZSAqc3RhdGUsIF9fdTMyICpzZXF1ZW5j ZU51bWJlcikKK3sKKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IChzdHJ1Y3QgbXRkX2luZm8g KikoZGV2LT5nZW5lcmljRGV2aWNlKTsKKwlpbnQgcmV0dmFsOworCisJVChZQUZGU19UUkFD RV9NVEQsCisJICAoVFNUUigibmFuZG10ZDJfUXVlcnlOQU5EQmxvY2sgJWQiIFRFTkRTVFIp LCBibG9ja05vKSk7CisJcmV0dmFsID0KKwkgICAgbXRkLT5ibG9ja19pc2JhZChtdGQsCisJ CQkgICAgIGJsb2NrTm8gKiBkZXYtPm5DaHVua3NQZXJCbG9jayAqCisJCQkgICAgIGRldi0+ dG90YWxCeXRlc1BlckNodW5rKTsKKworCWlmIChyZXR2YWwpIHsKKwkJVChZQUZGU19UUkFD RV9NVEQsIChUU1RSKCJibG9jayBpcyBiYWQiIFRFTkRTVFIpKSk7CisKKwkJKnN0YXRlID0g WUFGRlNfQkxPQ0tfU1RBVEVfREVBRDsKKwkJKnNlcXVlbmNlTnVtYmVyID0gMDsKKwl9IGVs c2UgeworCQl5YWZmc19FeHRlbmRlZFRhZ3MgdDsKKwkJbmFuZG10ZDJfUmVhZENodW5rV2l0 aFRhZ3NGcm9tTkFORChkZXYsCisJCQkJCQkgICBibG9ja05vICoKKwkJCQkJCSAgIGRldi0+ bkNodW5rc1BlckJsb2NrLCBOVUxMLAorCQkJCQkJICAgJnQpOworCisJCWlmICh0LmNodW5r VXNlZCkgeworCQkJKnNlcXVlbmNlTnVtYmVyID0gdC5zZXF1ZW5jZU51bWJlcjsKKwkJCSpz dGF0ZSA9IFlBRkZTX0JMT0NLX1NUQVRFX05FRURTX1NDQU5OSU5HOworCQl9IGVsc2Ugewor CQkJKnNlcXVlbmNlTnVtYmVyID0gMDsKKwkJCSpzdGF0ZSA9IFlBRkZTX0JMT0NLX1NUQVRF X0VNUFRZOworCQl9CisJfQorCVQoWUFGRlNfVFJBQ0VfTVRELAorCSAgKFRTVFIoImJsb2Nr IGlzIGJhZCBzZXEgJWQgc3RhdGUgJWQiIFRFTkRTVFIpLCAqc2VxdWVuY2VOdW1iZXIsCisJ ICAgKnN0YXRlKSk7CisKKwlpZiAocmV0dmFsID09IDApCisJCXJldHVybiBZQUZGU19PSzsK KwllbHNlCisJCXJldHVybiBZQUZGU19GQUlMOworfQorCmRpZmYgLXUgLS1uZXctZmlsZSAt LXJlY3Vyc2l2ZSBsaW51eC0yLjYuMjkuNi5vcmlnL2ZzL3lhZmZzMi95YWZmc19tdGRpZjIu aCBsaW51eC0yLjYuMjkuNi5tb2QvZnMveWFmZnMyL3lhZmZzX210ZGlmMi5oCi0tLSBsaW51 eC0yLjYuMjkuNi5vcmlnL2ZzL3lhZmZzMi95YWZmc19tdGRpZjIuaAkxOTY5LTEyLTMxIDE3 OjAwOjAwLjAwMDAwMDAwMCAtMDcwMAorKysgbGludXgtMi42LjI5LjYubW9kL2ZzL3lhZmZz Mi95YWZmc19tdGRpZjIuaAkyMDA5LTA3LTIxIDExOjI4OjE4LjAwMDAwMDAwMCAtMDcwMApA QCAtMCwwICsxLDI5IEBACisvKgorICogWUFGRlM6IFlldCBhbm90aGVyIEZsYXNoIEZpbGUg U3lzdGVtIC4gQSBOQU5ELWZsYXNoIHNwZWNpZmljIGZpbGUgc3lzdGVtLgorICoKKyAqIENv cHlyaWdodCAoQykgMjAwMi0yMDA3IEFsZXBoIE9uZSBMdGQuCisgKiAgIGZvciBUb2J5IENo dXJjaGlsbCBMdGQgYW5kIEJyaWdodHN0YXIgRW5naW5lZXJpbmcKKyAqCisgKiBDcmVhdGVk IGJ5IENoYXJsZXMgTWFubmluZyA8Y2hhcmxlc0BhbGVwaDEuY28udWs+CisgKgorICogVGhp cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xIGFzCisgKiBwdWJsaXNoZWQgYnkg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBOb3RlOiBPbmx5IFlBRkZT IGhlYWRlcnMgYXJlIExHUEwsIFlBRkZTIEMgY29kZSBpcyBjb3ZlcmVkIGJ5IEdQTC4KKyAq LworCisjaWZuZGVmIF9fWUFGRlNfTVRESUYyX0hfXworI2RlZmluZSBfX1lBRkZTX01URElG Ml9IX18KKworI2luY2x1ZGUgInlhZmZzX2d1dHMuaCIKK2ludCBuYW5kbXRkMl9Xcml0ZUNo dW5rV2l0aFRhZ3NUb05BTkQoeWFmZnNfRGV2aWNlICpkZXYsIGludCBjaHVua0luTkFORCwK KwkJCQljb25zdCBfX3U4ICpkYXRhLAorCQkJCWNvbnN0IHlhZmZzX0V4dGVuZGVkVGFncyAq dGFncyk7CitpbnQgbmFuZG10ZDJfUmVhZENodW5rV2l0aFRhZ3NGcm9tTkFORCh5YWZmc19E ZXZpY2UgKmRldiwgaW50IGNodW5rSW5OQU5ELAorCQkJCV9fdTggKmRhdGEsIHlhZmZzX0V4 dGVuZGVkVGFncyAqdGFncyk7CitpbnQgbmFuZG10ZDJfTWFya05BTkRCbG9ja0JhZChzdHJ1 Y3QgeWFmZnNfRGV2aWNlU3RydWN0ICpkZXYsIGludCBibG9ja05vKTsKK2ludCBuYW5kbXRk Ml9RdWVyeU5BTkRCbG9jayhzdHJ1Y3QgeWFmZnNfRGV2aWNlU3RydWN0ICpkZXYsIGludCBi bG9ja05vLAorCQkJeWFmZnNfQmxvY2tTdGF0ZSAqc3RhdGUsIF9fdTMyICpzZXF1ZW5jZU51 bWJlcik7CisKKyNlbmRpZgpkaWZmIC11IC0tbmV3LWZpbGUgLS1yZWN1cnNpdmUgbGludXgt Mi42LjI5LjYub3JpZy9mcy95YWZmczIveWFmZnNfbXRkaWYuYyBsaW51eC0yLjYuMjkuNi5t b2QvZnMveWFmZnMyL3lhZmZzX210ZGlmLmMKLS0tIGxpbnV4LTIuNi4yOS42Lm9yaWcvZnMv eWFmZnMyL3lhZmZzX210ZGlmLmMJMTk2OS0xMi0zMSAxNzowMDowMC4wMDAwMDAwMDAgLTA3 MDAKKysrIGxpbnV4LTIuNi4yOS42Lm1vZC9mcy95YWZmczIveWFmZnNfbXRkaWYuYwkyMDA5 LTA3LTIxIDExOjI4OjE4LjAwMDAwMDAwMCAtMDcwMApAQCAtMCwwICsxLDI0MSBAQAorLyoK KyAqIFlBRkZTOiBZZXQgQW5vdGhlciBGbGFzaCBGaWxlIFN5c3RlbS4gQSBOQU5ELWZsYXNo IHNwZWNpZmljIGZpbGUgc3lzdGVtLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMi0yMDA3 IEFsZXBoIE9uZSBMdGQuCisgKiAgIGZvciBUb2J5IENodXJjaGlsbCBMdGQgYW5kIEJyaWdo dHN0YXIgRW5naW5lZXJpbmcKKyAqCisgKiBDcmVhdGVkIGJ5IENoYXJsZXMgTWFubmluZyA8 Y2hhcmxlc0BhbGVwaDEuY28udWs+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lv biAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4K KyAqLworCitjb25zdCBjaGFyICp5YWZmc19tdGRpZl9jX3ZlcnNpb24gPQorCSIkSWQ6IHlh ZmZzX210ZGlmLmMsdiAxLjIyIDIwMDktMDMtMDYgMTc6MjA6NTEgd29va2V5IEV4cCAkIjsK KworI2luY2x1ZGUgInlwb3J0ZW52LmgiCisKKworI2luY2x1ZGUgInlhZmZzX210ZGlmLmgi CisKKyNpbmNsdWRlICJsaW51eC9tdGQvbXRkLmgiCisjaW5jbHVkZSAibGludXgvdHlwZXMu aCIKKyNpbmNsdWRlICJsaW51eC90aW1lLmgiCisjaW5jbHVkZSAibGludXgvbXRkL25hbmQu aCIKKworI2lmIChNVERfVkVSU0lPTl9DT0RFIDwgTVREX1ZFUlNJT04oMiwgNiwgMTgpKQor c3RhdGljIHN0cnVjdCBuYW5kX29vYmluZm8geWFmZnNfb29iaW5mbyA9IHsKKwkudXNlZWNj ID0gMSwKKwkuZWNjYnl0ZXMgPSA2LAorCS5lY2Nwb3MgPSB7OCwgOSwgMTAsIDEzLCAxNCwg MTV9Cit9OworCitzdGF0aWMgc3RydWN0IG5hbmRfb29iaW5mbyB5YWZmc19ub2VjY2luZm8g PSB7CisJLnVzZWVjYyA9IDAsCit9OworI2VuZGlmCisKKyNpZiAoTVREX1ZFUlNJT05fQ09E RSA+IE1URF9WRVJTSU9OKDIsIDYsIDE3KSkKK3N0YXRpYyBpbmxpbmUgdm9pZCB0cmFuc2xh dGVfc3BhcmUyb29iKGNvbnN0IHlhZmZzX1NwYXJlICpzcGFyZSwgX191OCAqb29iKQorewor CW9vYlswXSA9IHNwYXJlLT50YWdCeXRlMDsKKwlvb2JbMV0gPSBzcGFyZS0+dGFnQnl0ZTE7 CisJb29iWzJdID0gc3BhcmUtPnRhZ0J5dGUyOworCW9vYlszXSA9IHNwYXJlLT50YWdCeXRl MzsKKwlvb2JbNF0gPSBzcGFyZS0+dGFnQnl0ZTQ7CisJb29iWzVdID0gc3BhcmUtPnRhZ0J5 dGU1ICYgMHgzZjsKKwlvb2JbNV0gfD0gc3BhcmUtPmJsb2NrU3RhdHVzID09ICdZJyA/IDAg OiAweDgwOworCW9vYls1XSB8PSBzcGFyZS0+cGFnZVN0YXR1cyA9PSAwID8gMCA6IDB4NDA7 CisJb29iWzZdID0gc3BhcmUtPnRhZ0J5dGU2OworCW9vYls3XSA9IHNwYXJlLT50YWdCeXRl NzsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHRyYW5zbGF0ZV9vb2Iyc3BhcmUoeWFmZnNf U3BhcmUgKnNwYXJlLCBfX3U4ICpvb2IpCit7CisJc3RydWN0IHlhZmZzX05BTkRTcGFyZSAq bnNwYXJlID0gKHN0cnVjdCB5YWZmc19OQU5EU3BhcmUgKilzcGFyZTsKKwlzcGFyZS0+dGFn Qnl0ZTAgPSBvb2JbMF07CisJc3BhcmUtPnRhZ0J5dGUxID0gb29iWzFdOworCXNwYXJlLT50 YWdCeXRlMiA9IG9vYlsyXTsKKwlzcGFyZS0+dGFnQnl0ZTMgPSBvb2JbM107CisJc3BhcmUt PnRhZ0J5dGU0ID0gb29iWzRdOworCXNwYXJlLT50YWdCeXRlNSA9IG9vYls1XSA9PSAweGZm ID8gMHhmZiA6IG9vYls1XSAmIDB4M2Y7CisJc3BhcmUtPmJsb2NrU3RhdHVzID0gb29iWzVd ICYgMHg4MCA/IDB4ZmYgOiAnWSc7CisJc3BhcmUtPnBhZ2VTdGF0dXMgPSBvb2JbNV0gJiAw eDQwID8gMHhmZiA6IDA7CisJc3BhcmUtPmVjYzFbMF0gPSBzcGFyZS0+ZWNjMVsxXSA9IHNw YXJlLT5lY2MxWzJdID0gMHhmZjsKKwlzcGFyZS0+dGFnQnl0ZTYgPSBvb2JbNl07CisJc3Bh cmUtPnRhZ0J5dGU3ID0gb29iWzddOworCXNwYXJlLT5lY2MyWzBdID0gc3BhcmUtPmVjYzJb MV0gPSBzcGFyZS0+ZWNjMlsyXSA9IDB4ZmY7CisKKwluc3BhcmUtPmVjY3JlczEgPSBuc3Bh cmUtPmVjY3JlczIgPSAwOyAvKiBGSVhNRSAqLworfQorI2VuZGlmCisKK2ludCBuYW5kbXRk X1dyaXRlQ2h1bmtUb05BTkQoeWFmZnNfRGV2aWNlICpkZXYsIGludCBjaHVua0luTkFORCwK KwkJCSAgICAgY29uc3QgX191OCAqZGF0YSwgY29uc3QgeWFmZnNfU3BhcmUgKnNwYXJlKQor eworCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gKHN0cnVjdCBtdGRfaW5mbyAqKShkZXYtPmdl bmVyaWNEZXZpY2UpOworI2lmIChNVERfVkVSU0lPTl9DT0RFID4gTVREX1ZFUlNJT04oMiwg NiwgMTcpKQorCXN0cnVjdCBtdGRfb29iX29wcyBvcHM7CisjZW5kaWYKKwlzaXplX3QgZHVt bXk7CisJaW50IHJldHZhbCA9IDA7CisKKwlsb2ZmX3QgYWRkciA9ICgobG9mZl90KSBjaHVu a0luTkFORCkgKiBkZXYtPm5EYXRhQnl0ZXNQZXJDaHVuazsKKyNpZiAoTVREX1ZFUlNJT05f Q09ERSA+IE1URF9WRVJTSU9OKDIsIDYsIDE3KSkKKwlfX3U4IHNwYXJlQXNCeXRlc1s4XTsg LyogT09CICovCisKKwlpZiAoZGF0YSAmJiAhc3BhcmUpCisJCXJldHZhbCA9IG10ZC0+d3Jp dGUobXRkLCBhZGRyLCBkZXYtPm5EYXRhQnl0ZXNQZXJDaHVuaywKKwkJCQkmZHVtbXksIGRh dGEpOworCWVsc2UgaWYgKHNwYXJlKSB7CisJCWlmIChkZXYtPnVzZU5BTkRFQ0MpIHsKKwkJ CXRyYW5zbGF0ZV9zcGFyZTJvb2Ioc3BhcmUsIHNwYXJlQXNCeXRlcyk7CisJCQlvcHMubW9k ZSA9IE1URF9PT0JfQVVUTzsKKwkJCW9wcy5vb2JsZW4gPSA4OyAvKiB0ZW1wIGhhY2sgKi8K KwkJfSBlbHNlIHsKKwkJCW9wcy5tb2RlID0gTVREX09PQl9SQVc7CisJCQlvcHMub29ibGVu ID0gWUFGRlNfQllURVNfUEVSX1NQQVJFOworCQl9CisJCW9wcy5sZW4gPSBkYXRhID8gZGV2 LT5uRGF0YUJ5dGVzUGVyQ2h1bmsgOiBvcHMub29ibGVuOworCQlvcHMuZGF0YnVmID0gKHU4 ICopZGF0YTsKKwkJb3BzLm9vYm9mZnMgPSAwOworCQlvcHMub29iYnVmID0gc3BhcmVBc0J5 dGVzOworCQlyZXR2YWwgPSBtdGQtPndyaXRlX29vYihtdGQsIGFkZHIsICZvcHMpOworCX0K KyNlbHNlCisJX191OCAqc3BhcmVBc0J5dGVzID0gKF9fdTggKikgc3BhcmU7CisKKwlpZiAo ZGF0YSAmJiBzcGFyZSkgeworCQlpZiAoZGV2LT51c2VOQU5ERUNDKQorCQkJcmV0dmFsID0K KwkJCSAgICBtdGQtPndyaXRlX2VjYyhtdGQsIGFkZHIsIGRldi0+bkRhdGFCeXRlc1BlckNo dW5rLAorCQkJCQkgICAmZHVtbXksIGRhdGEsIHNwYXJlQXNCeXRlcywKKwkJCQkJICAgJnlh ZmZzX29vYmluZm8pOworCQllbHNlCisJCQlyZXR2YWwgPQorCQkJICAgIG10ZC0+d3JpdGVf ZWNjKG10ZCwgYWRkciwgZGV2LT5uRGF0YUJ5dGVzUGVyQ2h1bmssCisJCQkJCSAgICZkdW1t eSwgZGF0YSwgc3BhcmVBc0J5dGVzLAorCQkJCQkgICAmeWFmZnNfbm9lY2NpbmZvKTsKKwl9 IGVsc2UgeworCQlpZiAoZGF0YSkKKwkJCXJldHZhbCA9CisJCQkgICAgbXRkLT53cml0ZSht dGQsIGFkZHIsIGRldi0+bkRhdGFCeXRlc1BlckNodW5rLCAmZHVtbXksCisJCQkJICAgICAg IGRhdGEpOworCQlpZiAoc3BhcmUpCisJCQlyZXR2YWwgPQorCQkJICAgIG10ZC0+d3JpdGVf b29iKG10ZCwgYWRkciwgWUFGRlNfQllURVNfUEVSX1NQQVJFLAorCQkJCQkgICAmZHVtbXks IHNwYXJlQXNCeXRlcyk7CisJfQorI2VuZGlmCisKKwlpZiAocmV0dmFsID09IDApCisJCXJl dHVybiBZQUZGU19PSzsKKwllbHNlCisJCXJldHVybiBZQUZGU19GQUlMOworfQorCitpbnQg bmFuZG10ZF9SZWFkQ2h1bmtGcm9tTkFORCh5YWZmc19EZXZpY2UgKmRldiwgaW50IGNodW5r SW5OQU5ELCBfX3U4ICpkYXRhLAorCQkJICAgICAgeWFmZnNfU3BhcmUgKnNwYXJlKQorewor CXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gKHN0cnVjdCBtdGRfaW5mbyAqKShkZXYtPmdlbmVy aWNEZXZpY2UpOworI2lmIChNVERfVkVSU0lPTl9DT0RFID4gTVREX1ZFUlNJT04oMiwgNiwg MTcpKQorCXN0cnVjdCBtdGRfb29iX29wcyBvcHM7CisjZW5kaWYKKwlzaXplX3QgZHVtbXk7 CisJaW50IHJldHZhbCA9IDA7CisKKwlsb2ZmX3QgYWRkciA9ICgobG9mZl90KSBjaHVua0lu TkFORCkgKiBkZXYtPm5EYXRhQnl0ZXNQZXJDaHVuazsKKyNpZiAoTVREX1ZFUlNJT05fQ09E RSA+IE1URF9WRVJTSU9OKDIsIDYsIDE3KSkKKwlfX3U4IHNwYXJlQXNCeXRlc1s4XTsgLyog T09CICovCisKKwlpZiAoZGF0YSAmJiAhc3BhcmUpCisJCXJldHZhbCA9IG10ZC0+cmVhZCht dGQsIGFkZHIsIGRldi0+bkRhdGFCeXRlc1BlckNodW5rLAorCQkJCSZkdW1teSwgZGF0YSk7 CisJZWxzZSBpZiAoc3BhcmUpIHsKKwkJaWYgKGRldi0+dXNlTkFOREVDQykgeworCQkJb3Bz Lm1vZGUgPSBNVERfT09CX0FVVE87CisJCQlvcHMub29ibGVuID0gODsgLyogdGVtcCBoYWNr ICovCisJCX0gZWxzZSB7CisJCQlvcHMubW9kZSA9IE1URF9PT0JfUkFXOworCQkJb3BzLm9v YmxlbiA9IFlBRkZTX0JZVEVTX1BFUl9TUEFSRTsKKwkJfQorCQlvcHMubGVuID0gZGF0YSA/ IGRldi0+bkRhdGFCeXRlc1BlckNodW5rIDogb3BzLm9vYmxlbjsKKwkJb3BzLmRhdGJ1ZiA9 IGRhdGE7CisJCW9wcy5vb2JvZmZzID0gMDsKKwkJb3BzLm9vYmJ1ZiA9IHNwYXJlQXNCeXRl czsKKwkJcmV0dmFsID0gbXRkLT5yZWFkX29vYihtdGQsIGFkZHIsICZvcHMpOworCQlpZiAo ZGV2LT51c2VOQU5ERUNDKQorCQkJdHJhbnNsYXRlX29vYjJzcGFyZShzcGFyZSwgc3BhcmVB c0J5dGVzKTsKKwl9CisjZWxzZQorCV9fdTggKnNwYXJlQXNCeXRlcyA9IChfX3U4ICopIHNw YXJlOworCisJaWYgKGRhdGEgJiYgc3BhcmUpIHsKKwkJaWYgKGRldi0+dXNlTkFOREVDQykg eworCQkJLyogQ2FyZWZ1bCwgdGhpcyBjYWxsIGFkZHMgMiBpbnRzICovCisJCQkvKiB0byB0 aGUgZW5kIG9mIHRoZSBzcGFyZSBkYXRhLiAgQ2FsbGluZyBmdW5jdGlvbiAqLworCQkJLyog c2hvdWxkIGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yIHNwYXJlLCAqLworCQkJLyogaS5l LiBbWUFGRlNfQllURVNfUEVSX1NQQVJFKzIqc2l6ZW9mKGludCldLiAqLworCQkJcmV0dmFs ID0KKwkJCSAgICBtdGQtPnJlYWRfZWNjKG10ZCwgYWRkciwgZGV2LT5uRGF0YUJ5dGVzUGVy Q2h1bmssCisJCQkJCSAgJmR1bW15LCBkYXRhLCBzcGFyZUFzQnl0ZXMsCisJCQkJCSAgJnlh ZmZzX29vYmluZm8pOworCQl9IGVsc2UgeworCQkJcmV0dmFsID0KKwkJCSAgICBtdGQtPnJl YWRfZWNjKG10ZCwgYWRkciwgZGV2LT5uRGF0YUJ5dGVzUGVyQ2h1bmssCisJCQkJCSAgJmR1 bW15LCBkYXRhLCBzcGFyZUFzQnl0ZXMsCisJCQkJCSAgJnlhZmZzX25vZWNjaW5mbyk7CisJ CX0KKwl9IGVsc2UgeworCQlpZiAoZGF0YSkKKwkJCXJldHZhbCA9CisJCQkgICAgbXRkLT5y ZWFkKG10ZCwgYWRkciwgZGV2LT5uRGF0YUJ5dGVzUGVyQ2h1bmssICZkdW1teSwKKwkJCQkg ICAgICBkYXRhKTsKKwkJaWYgKHNwYXJlKQorCQkJcmV0dmFsID0KKwkJCSAgICBtdGQtPnJl YWRfb29iKG10ZCwgYWRkciwgWUFGRlNfQllURVNfUEVSX1NQQVJFLAorCQkJCQkgICZkdW1t eSwgc3BhcmVBc0J5dGVzKTsKKwl9CisjZW5kaWYKKworCWlmIChyZXR2YWwgPT0gMCkKKwkJ cmV0dXJuIFlBRkZTX09LOworCWVsc2UKKwkJcmV0dXJuIFlBRkZTX0ZBSUw7Cit9CisKK2lu dCBuYW5kbXRkX0VyYXNlQmxvY2tJbk5BTkQoeWFmZnNfRGV2aWNlICpkZXYsIGludCBibG9j a051bWJlcikKK3sKKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IChzdHJ1Y3QgbXRkX2luZm8g KikoZGV2LT5nZW5lcmljRGV2aWNlKTsKKwlfX3UzMiBhZGRyID0KKwkgICAgKChsb2ZmX3Qp IGJsb2NrTnVtYmVyKSAqIGRldi0+bkRhdGFCeXRlc1BlckNodW5rCisJCSogZGV2LT5uQ2h1 bmtzUGVyQmxvY2s7CisJc3RydWN0IGVyYXNlX2luZm8gZWk7CisJaW50IHJldHZhbCA9IDA7 CisKKwllaS5tdGQgPSBtdGQ7CisJZWkuYWRkciA9IGFkZHI7CisJZWkubGVuID0gZGV2LT5u RGF0YUJ5dGVzUGVyQ2h1bmsgKiBkZXYtPm5DaHVua3NQZXJCbG9jazsKKwllaS50aW1lID0g MTAwMDsKKwllaS5yZXRyaWVzID0gMjsKKwllaS5jYWxsYmFjayA9IE5VTEw7CisJZWkucHJp diA9ICh1X2xvbmcpIGRldjsKKworCS8qIFRvZG8gZmluaXNoIG9mZiB0aGUgZWkgaWYgcmVx dWlyZWQgKi8KKworCXNlbWFfaW5pdCgmZGV2LT5zZW0sIDApOworCisJcmV0dmFsID0gbXRk LT5lcmFzZShtdGQsICZlaSk7CisKKwlpZiAocmV0dmFsID09IDApCisJCXJldHVybiBZQUZG U19PSzsKKwllbHNlCisJCXJldHVybiBZQUZGU19GQUlMOworfQorCitpbnQgbmFuZG10ZF9J bml0aWFsaXNlTkFORCh5YWZmc19EZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gWUFGRlNfT0s7 Cit9CisKZGlmZiAtdSAtLW5ldy1maWxlIC0tcmVjdXJzaXZlIGxpbnV4LTIuNi4yOS42Lm9y aWcvZnMveWFmZnMyL3lhZmZzX210ZGlmLmggbGludXgtMi42LjI5LjYubW9kL2ZzL3lhZmZz Mi95YWZmc19tdGRpZi5oCi0tLSBsaW51eC0yLjYuMjkuNi5vcmlnL2ZzL3lhZmZzMi95YWZm c19tdGRpZi5oCTE5NjktMTItMzEgMTc6MDA6MDAuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51 eC0yLjYuMjkuNi5tb2QvZnMveWFmZnMyL3lhZmZzX210ZGlmLmgJMjAwOS0wNy0yMSAxMToy ODoxOC4wMDAwMDAwMDAgLTA3MDAKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIFlBRkZTOiBZ ZXQgYW5vdGhlciBGbGFzaCBGaWxlIFN5c3RlbSAuIEEgTkFORC1mbGFzaCBzcGVjaWZpYyBm aWxlIHN5c3RlbS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNyBBbGVwaCBPbmUg THRkLgorICogICBmb3IgVG9ieSBDaHVyY2hpbGwgTHRkIGFuZCBCcmlnaHRzdGFyIEVuZ2lu ZWVyaW5nCisgKgorICogQ3JlYXRlZCBieSBDaGFybGVzIE1hbm5pbmcgPGNoYXJsZXNAYWxl cGgxLmNvLnVrPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIu MSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisg KgorICogTm90ZTogT25seSBZQUZGUyBoZWFkZXJzIGFyZSBMR1BMLCBZQUZGUyBDIGNvZGUg aXMgY292ZXJlZCBieSBHUEwuCisgKi8KKworI2lmbmRlZiBfX1lBRkZTX01URElGX0hfXwor I2RlZmluZSBfX1lBRkZTX01URElGX0hfXworCisjaW5jbHVkZSAieWFmZnNfZ3V0cy5oIgor CisjaWYgKE1URF9WRVJTSU9OX0NPREUgPCBNVERfVkVSU0lPTigyLCA2LCAxOCkpCitleHRl cm4gc3RydWN0IG5hbmRfb29iaW5mbyB5YWZmc19vb2JpbmZvOworZXh0ZXJuIHN0cnVjdCBu YW5kX29vYmluZm8geWFmZnNfbm9lY2NpbmZvOworI2VuZGlmCisKK2ludCBuYW5kbXRkX1dy aXRlQ2h1bmtUb05BTkQoeWFmZnNfRGV2aWNlICpkZXYsIGludCBjaHVua0luTkFORCwKKwkJ CWNvbnN0IF9fdTggKmRhdGEsIGNvbnN0IHlhZmZzX1NwYXJlICpzcGFyZSk7CitpbnQgbmFu ZG10ZF9SZWFkQ2h1bmtGcm9tTkFORCh5YWZmc19EZXZpY2UgKmRldiwgaW50IGNodW5rSW5O QU5ELCBfX3U4ICpkYXRhLAorCQkJeWFmZnNfU3BhcmUgKnNwYXJlKTsKK2ludCBuYW5kbXRk X0VyYXNlQmxvY2tJbk5BTkQoeWFmZnNfRGV2aWNlICpkZXYsIGludCBibG9ja051bWJlcik7 CitpbnQgbmFuZG10ZF9Jbml0aWFsaXNlTkFORCh5YWZmc19EZXZpY2UgKmRldik7CisjZW5k aWYKZGlmZiAtdSAtLW5ldy1maWxlIC0tcmVjdXJzaXZlIGxpbnV4LTIuNi4yOS42Lm9yaWcv ZnMveWFmZnMyL3lhZmZzX25hbmQuYyBsaW51eC0yLjYuMjkuNi5tb2QvZnMveWFmZnMyL3lh ZmZzX25hbmQuYwotLS0gbGludXgtMi42LjI5LjYub3JpZy9mcy95YWZmczIveWFmZnNfbmFu ZC5jCTE5NjktMTItMzEgMTc6MDA6MDAuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYu MjkuNi5tb2QvZnMveWFmZnMyL3lhZmZzX25hbmQuYwkyMDA5LTA3LTIxIDExOjI4OjE4LjAw MDAwMDAwMCAtMDcwMApAQCAtMCwwICsxLDEzNSBAQAorLyoKKyAqIFlBRkZTOiBZZXQgQW5v dGhlciBGbGFzaCBGaWxlIFN5c3RlbS4gQSBOQU5ELWZsYXNoIHNwZWNpZmljIGZpbGUgc3lz dGVtLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMi0yMDA3IEFsZXBoIE9uZSBMdGQuCisg KiAgIGZvciBUb2J5IENodXJjaGlsbCBMdGQgYW5kIEJyaWdodHN0YXIgRW5naW5lZXJpbmcK KyAqCisgKiBDcmVhdGVkIGJ5IENoYXJsZXMgTWFubmluZyA8Y2hhcmxlc0BhbGVwaDEuY28u dWs+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNo ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCitjb25zdCBjaGFy ICp5YWZmc19uYW5kX2NfdmVyc2lvbiA9CisJIiRJZDogeWFmZnNfbmFuZC5jLHYgMS4xMCAy MDA5LTAzLTA2IDE3OjIwOjU0IHdvb2tleSBFeHAgJCI7CisKKyNpbmNsdWRlICJ5YWZmc19u YW5kLmgiCisjaW5jbHVkZSAieWFmZnNfdGFnc2NvbXBhdC5oIgorI2luY2x1ZGUgInlhZmZz X3RhZ3N2YWxpZGl0eS5oIgorCisjaW5jbHVkZSAieWFmZnNfZ2V0YmxvY2tpbmZvLmgiCisK K2ludCB5YWZmc19SZWFkQ2h1bmtXaXRoVGFnc0Zyb21OQU5EKHlhZmZzX0RldmljZSAqZGV2 LCBpbnQgY2h1bmtJbk5BTkQsCisJCQkJCSAgIF9fdTggKmJ1ZmZlciwKKwkJCQkJICAgeWFm ZnNfRXh0ZW5kZWRUYWdzICp0YWdzKQoreworCWludCByZXN1bHQ7CisJeWFmZnNfRXh0ZW5k ZWRUYWdzIGxvY2FsVGFnczsKKworCWludCByZWFsaWduZWRDaHVua0luTkFORCA9IGNodW5r SW5OQU5EIC0gZGV2LT5jaHVua09mZnNldDsKKworCS8qIElmIHRoZXJlIGFyZSBubyB0YWdz IHByb3ZpZGVkLCB1c2UgbG9jYWwgdGFncyB0byBnZXQgcHJpb3JpdGlzZWQgZ2Mgd29ya2lu ZyAqLworCWlmICghdGFncykKKwkJdGFncyA9ICZsb2NhbFRhZ3M7CisKKwlpZiAoZGV2LT5y ZWFkQ2h1bmtXaXRoVGFnc0Zyb21OQU5EKQorCQlyZXN1bHQgPSBkZXYtPnJlYWRDaHVua1dp dGhUYWdzRnJvbU5BTkQoZGV2LCByZWFsaWduZWRDaHVua0luTkFORCwgYnVmZmVyLAorCQkJ CQkJICAgICAgdGFncyk7CisJZWxzZQorCQlyZXN1bHQgPSB5YWZmc19UYWdzQ29tcGF0YWJp bGl0eVJlYWRDaHVua1dpdGhUYWdzRnJvbU5BTkQoZGV2LAorCQkJCQkJCQkJcmVhbGlnbmVk Q2h1bmtJbk5BTkQsCisJCQkJCQkJCQlidWZmZXIsCisJCQkJCQkJCQl0YWdzKTsKKwlpZiAo dGFncyAmJgorCSAgIHRhZ3MtPmVjY1Jlc3VsdCA+IFlBRkZTX0VDQ19SRVNVTFRfTk9fRVJS T1IpIHsKKworCQl5YWZmc19CbG9ja0luZm8gKmJpID0geWFmZnNfR2V0QmxvY2tJbmZvKGRl diwgY2h1bmtJbk5BTkQvZGV2LT5uQ2h1bmtzUGVyQmxvY2spOworCQl5YWZmc19IYW5kbGVD aHVua0Vycm9yKGRldiwgYmkpOworCX0KKworCXJldHVybiByZXN1bHQ7Cit9CisKK2ludCB5 YWZmc19Xcml0ZUNodW5rV2l0aFRhZ3NUb05BTkQoeWFmZnNfRGV2aWNlICpkZXYsCisJCQkJ CQkgICBpbnQgY2h1bmtJbk5BTkQsCisJCQkJCQkgICBjb25zdCBfX3U4ICpidWZmZXIsCisJ CQkJCQkgICB5YWZmc19FeHRlbmRlZFRhZ3MgKnRhZ3MpCit7CisJY2h1bmtJbk5BTkQgLT0g ZGV2LT5jaHVua09mZnNldDsKKworCisJaWYgKHRhZ3MpIHsKKwkJdGFncy0+c2VxdWVuY2VO dW1iZXIgPSBkZXYtPnNlcXVlbmNlTnVtYmVyOworCQl0YWdzLT5jaHVua1VzZWQgPSAxOwor CQlpZiAoIXlhZmZzX1ZhbGlkYXRlVGFncyh0YWdzKSkgeworCQkJVChZQUZGU19UUkFDRV9F UlJPUiwKKwkJCSAgKFRTVFIoIldyaXRpbmcgdW5pbml0aWFsaXNlZCB0YWdzIiBURU5EU1RS KSkpOworCQkJWUJVRygpOworCQl9CisJCVQoWUFGRlNfVFJBQ0VfV1JJVEUsCisJCSAgKFRT VFIoIldyaXRpbmcgY2h1bmsgJWQgdGFncyAlZCAlZCIgVEVORFNUUiksIGNodW5rSW5OQU5E LAorCQkgICB0YWdzLT5vYmplY3RJZCwgdGFncy0+Y2h1bmtJZCkpOworCX0gZWxzZSB7CisJ CVQoWUFGRlNfVFJBQ0VfRVJST1IsIChUU1RSKCJXcml0aW5nIHdpdGggbm8gdGFncyIgVEVO RFNUUikpKTsKKwkJWUJVRygpOworCX0KKworCWlmIChkZXYtPndyaXRlQ2h1bmtXaXRoVGFn c1RvTkFORCkKKwkJcmV0dXJuIGRldi0+d3JpdGVDaHVua1dpdGhUYWdzVG9OQU5EKGRldiwg Y2h1bmtJbk5BTkQsIGJ1ZmZlciwKKwkJCQkJCSAgICAgdGFncyk7CisJZWxzZQorCQlyZXR1 cm4geWFmZnNfVGFnc0NvbXBhdGFiaWxpdHlXcml0ZUNodW5rV2l0aFRhZ3NUb05BTkQoZGV2 LAorCQkJCQkJCQkgICAgICAgY2h1bmtJbk5BTkQsCisJCQkJCQkJCSAgICAgICBidWZmZXIs CisJCQkJCQkJCSAgICAgICB0YWdzKTsKK30KKworaW50IHlhZmZzX01hcmtCbG9ja0JhZCh5 YWZmc19EZXZpY2UgKmRldiwgaW50IGJsb2NrTm8pCit7CisJYmxvY2tObyAtPSBkZXYtPmJs b2NrT2Zmc2V0OworCis7CisJaWYgKGRldi0+bWFya05BTkRCbG9ja0JhZCkKKwkJcmV0dXJu IGRldi0+bWFya05BTkRCbG9ja0JhZChkZXYsIGJsb2NrTm8pOworCWVsc2UKKwkJcmV0dXJu IHlhZmZzX1RhZ3NDb21wYXRhYmlsaXR5TWFya05BTkRCbG9ja0JhZChkZXYsIGJsb2NrTm8p OworfQorCitpbnQgeWFmZnNfUXVlcnlJbml0aWFsQmxvY2tTdGF0ZSh5YWZmc19EZXZpY2Ug KmRldiwKKwkJCQkJCSBpbnQgYmxvY2tObywKKwkJCQkJCSB5YWZmc19CbG9ja1N0YXRlICpz dGF0ZSwKKwkJCQkJCSBfX3UzMiAqc2VxdWVuY2VOdW1iZXIpCit7CisJYmxvY2tObyAtPSBk ZXYtPmJsb2NrT2Zmc2V0OworCisJaWYgKGRldi0+cXVlcnlOQU5EQmxvY2spCisJCXJldHVy biBkZXYtPnF1ZXJ5TkFOREJsb2NrKGRldiwgYmxvY2tObywgc3RhdGUsIHNlcXVlbmNlTnVt YmVyKTsKKwllbHNlCisJCXJldHVybiB5YWZmc19UYWdzQ29tcGF0YWJpbGl0eVF1ZXJ5TkFO REJsb2NrKGRldiwgYmxvY2tObywKKwkJCQkJCQkgICAgIHN0YXRlLAorCQkJCQkJCSAgICAg c2VxdWVuY2VOdW1iZXIpOworfQorCisKK2ludCB5YWZmc19FcmFzZUJsb2NrSW5OQU5EKHN0 cnVjdCB5YWZmc19EZXZpY2VTdHJ1Y3QgKmRldiwKKwkJCQkgIGludCBibG9ja0luTkFORCkK K3sKKwlpbnQgcmVzdWx0OworCisJYmxvY2tJbk5BTkQgLT0gZGV2LT5ibG9ja09mZnNldDsK KworCisJZGV2LT5uQmxvY2tFcmFzdXJlcysrOworCXJlc3VsdCA9IGRldi0+ZXJhc2VCbG9j a0luTkFORChkZXYsIGJsb2NrSW5OQU5EKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK2lu dCB5YWZmc19Jbml0aWFsaXNlTkFORChzdHJ1Y3QgeWFmZnNfRGV2aWNlU3RydWN0ICpkZXYp Cit7CisJcmV0dXJuIGRldi0+aW5pdGlhbGlzZU5BTkQoZGV2KTsKK30KKworCisKZGlmZiAt dSAtLW5ldy1maWxlIC0tcmVjdXJzaXZlIGxpbnV4LTIuNi4yOS42Lm9yaWcvZnMveWFmZnMy L3lhZmZzX25hbmRlbXVsMmsuaCBsaW51eC0yLjYuMjkuNi5tb2QvZnMveWFmZnMyL3lhZmZz X25hbmRlbXVsMmsuaAotLS0gbGludXgtMi42LjI5LjYub3JpZy9mcy95YWZmczIveWFmZnNf bmFuZGVtdWwyay5oCTE5NjktMTItMzEgMTc6MDA6MDAuMDAwMDAwMDAwIC0wNzAwCisrKyBs aW51eC0yLjYuMjkuNi5tb2QvZnMveWFmZnMyL3lhZmZzX25hbmRlbXVsMmsuaAkyMDA5LTA3 LTIxIDExOjI4OjE4LjAwMDAwMDAwMCAtMDcwMApAQCAtMCwwICsxLDM5IEBACisvKgorICog WUFGRlM6IFlldCBhbm90aGVyIEZsYXNoIEZpbGUgU3lzdGVtIC4gQSBOQU5ELWZsYXNoIHNw ZWNpZmljIGZpbGUgc3lzdGVtLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMi0yMDA3IEFs ZXBoIE9uZSBMdGQuCisgKiAgIGZvciBUb2J5IENodXJjaGlsbCBMdGQgYW5kIEJyaWdodHN0 YXIgRW5naW5lZXJpbmcKKyAqCisgKiBDcmVhdGVkIGJ5IENoYXJsZXMgTWFubmluZyA8Y2hh cmxlc0BhbGVwaDEuY28udWs+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZl cnNpb24gMi4xIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbi4KKyAqCisgKiBOb3RlOiBPbmx5IFlBRkZTIGhlYWRlcnMgYXJlIExHUEwsIFlBRkZT IEMgY29kZSBpcyBjb3ZlcmVkIGJ5IEdQTC4KKyAqLworCisvKiBJbnRlcmZhY2UgdG8gZW11 bGF0ZWQgTkFORCBmdW5jdGlvbnMgKDJrIHBhZ2Ugc2l6ZSkgKi8KKworI2lmbmRlZiBfX1lB RkZTX05BTkRFTVVMMktfSF9fCisjZGVmaW5lIF9fWUFGRlNfTkFOREVNVUwyS19IX18KKwor I2luY2x1ZGUgInlhZmZzX2d1dHMuaCIKKworaW50IG5hbmRlbXVsMmtfV3JpdGVDaHVua1dp dGhUYWdzVG9OQU5EKHN0cnVjdCB5YWZmc19EZXZpY2VTdHJ1Y3QgKmRldiwKKwkJCQkJaW50 IGNodW5rSW5OQU5ELCBjb25zdCBfX3U4ICpkYXRhLAorCQkJCQljb25zdCB5YWZmc19FeHRl bmRlZFRhZ3MgKnRhZ3MpOworaW50IG5hbmRlbXVsMmtfUmVhZENodW5rV2l0aFRhZ3NGcm9t TkFORChzdHJ1Y3QgeWFmZnNfRGV2aWNlU3RydWN0ICpkZXYsCisJCQkJCSBpbnQgY2h1bmtJ bk5BTkQsIF9fdTggKmRhdGEsCisJCQkJCSB5YWZmc19FeHRlbmRlZFRhZ3MgKnRhZ3MpOwor aW50IG5hbmRlbXVsMmtfTWFya05BTkRCbG9ja0JhZChzdHJ1Y3QgeWFmZnNfRGV2aWNlU3Ry dWN0ICpkZXYsIGludCBibG9ja05vKTsKK2ludCBuYW5kZW11bDJrX1F1ZXJ5TkFOREJsb2Nr KHN0cnVjdCB5YWZmc19EZXZpY2VTdHJ1Y3QgKmRldiwgaW50IGJsb2NrTm8sCisJCQkgICAg ICB5YWZmc19CbG9ja1N0YXRlICpzdGF0ZSwgX191MzIgKnNlcXVlbmNlTnVtYmVyKTsKK2lu dCBuYW5kZW11bDJrX0VyYXNlQmxvY2tJbk5BTkQoc3RydWN0IHlhZmZzX0RldmljZVN0cnVj dCAqZGV2LAorCQkJCWludCBibG9ja0luTkFORCk7CitpbnQgbmFuZGVtdWwya19Jbml0aWFs aXNlTkFORChzdHJ1Y3QgeWFmZnNfRGV2aWNlU3RydWN0ICpkZXYpOworaW50IG5hbmRlbXVs MmtfR2V0Qnl0ZXNQZXJDaHVuayh2b2lkKTsKK2ludCBuYW5kZW11bDJrX0dldENodW5rc1Bl ckJsb2NrKHZvaWQpOworaW50IG5hbmRlbXVsMmtfR2V0TnVtYmVyT2ZCbG9ja3Modm9pZCk7 CisKKyNlbmRpZgpkaWZmIC11IC0tbmV3LWZpbGUgLS1yZWN1cnNpdmUgbGludXgtMi42LjI5 LjYub3JpZy9mcy95YWZmczIveWFmZnNfbmFuZC5oIGxpbnV4LTIuNi4yOS42Lm1vZC9mcy95 YWZmczIveWFmZnNfbmFuZC5oCi0tLSBsaW51eC0yLjYuMjkuNi5vcmlnL2ZzL3lhZmZzMi95 YWZmc19uYW5kLmgJMTk2OS0xMi0zMSAxNzowMDowMC4wMDAwMDAwMDAgLTA3MDAKKysrIGxp bnV4LTIuNi4yOS42Lm1vZC9mcy95YWZmczIveWFmZnNfbmFuZC5oCTIwMDktMDctMjEgMTE6 Mjg6MTguMDAwMDAwMDAwIC0wNzAwCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBZQUZGUzog WWV0IGFub3RoZXIgRmxhc2ggRmlsZSBTeXN0ZW0gLiBBIE5BTkQtZmxhc2ggc3BlY2lmaWMg ZmlsZSBzeXN0ZW0uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMDcgQWxlcGggT25l IEx0ZC4KKyAqICAgZm9yIFRvYnkgQ2h1cmNoaWxsIEx0ZCBhbmQgQnJpZ2h0c3RhciBFbmdp bmVlcmluZworICoKKyAqIENyZWF0ZWQgYnkgQ2hhcmxlcyBNYW5uaW5nIDxjaGFybGVzQGFs ZXBoMS5jby51az4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAy LjEgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgor ICoKKyAqIE5vdGU6IE9ubHkgWUFGRlMgaGVhZGVycyBhcmUgTEdQTCwgWUFGRlMgQyBjb2Rl IGlzIGNvdmVyZWQgYnkgR1BMLgorICovCisKKyNpZm5kZWYgX19ZQUZGU19OQU5EX0hfXwor I2RlZmluZSBfX1lBRkZTX05BTkRfSF9fCisjaW5jbHVkZSAieWFmZnNfZ3V0cy5oIgorCisK KworaW50IHlhZmZzX1JlYWRDaHVua1dpdGhUYWdzRnJvbU5BTkQoeWFmZnNfRGV2aWNlICpk ZXYsIGludCBjaHVua0luTkFORCwKKwkJCQkJX191OCAqYnVmZmVyLAorCQkJCQl5YWZmc19F eHRlbmRlZFRhZ3MgKnRhZ3MpOworCitpbnQgeWFmZnNfV3JpdGVDaHVua1dpdGhUYWdzVG9O QU5EKHlhZmZzX0RldmljZSAqZGV2LAorCQkJCQkJaW50IGNodW5rSW5OQU5ELAorCQkJCQkJ Y29uc3QgX191OCAqYnVmZmVyLAorCQkJCQkJeWFmZnNfRXh0ZW5kZWRUYWdzICp0YWdzKTsK KworaW50IHlhZmZzX01hcmtCbG9ja0JhZCh5YWZmc19EZXZpY2UgKmRldiwgaW50IGJsb2Nr Tm8pOworCitpbnQgeWFmZnNfUXVlcnlJbml0aWFsQmxvY2tTdGF0ZSh5YWZmc19EZXZpY2Ug KmRldiwKKwkJCQkJCWludCBibG9ja05vLAorCQkJCQkJeWFmZnNfQmxvY2tTdGF0ZSAqc3Rh dGUsCisJCQkJCQl1bnNpZ25lZCAqc2VxdWVuY2VOdW1iZXIpOworCitpbnQgeWFmZnNfRXJh c2VCbG9ja0luTkFORChzdHJ1Y3QgeWFmZnNfRGV2aWNlU3RydWN0ICpkZXYsCisJCQkJICBp bnQgYmxvY2tJbk5BTkQpOworCitpbnQgeWFmZnNfSW5pdGlhbGlzZU5BTkQoc3RydWN0IHlh ZmZzX0RldmljZVN0cnVjdCAqZGV2KTsKKworI2VuZGlmCisKZGlmZiAtdSAtLW5ldy1maWxl IC0tcmVjdXJzaXZlIGxpbnV4LTIuNi4yOS42Lm9yaWcvZnMveWFmZnMyL3lhZmZzX3BhY2tl ZHRhZ3MxLmMgbGludXgtMi42LjI5LjYubW9kL2ZzL3lhZmZzMi95YWZmc19wYWNrZWR0YWdz MS5jCi0tLSBsaW51eC0yLjYuMjkuNi5vcmlnL2ZzL3lhZmZzMi95YWZmc19wYWNrZWR0YWdz MS5jCTE5NjktMTItMzEgMTc6MDA6MDAuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYu MjkuNi5tb2QvZnMveWFmZnMyL3lhZmZzX3BhY2tlZHRhZ3MxLmMJMjAwOS0wNy0yMSAxMToy ODoxOC4wMDAwMDAwMDAgLTA3MDAKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIFlBRkZTOiBZ ZXQgQW5vdGhlciBGbGFzaCBGaWxlIFN5c3RlbS4gQSBOQU5ELWZsYXNoIHNwZWNpZmljIGZp bGUgc3lzdGVtLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMi0yMDA3IEFsZXBoIE9uZSBM dGQuCisgKiAgIGZvciBUb2J5IENodXJjaGlsbCBMdGQgYW5kIEJyaWdodHN0YXIgRW5naW5l ZXJpbmcKKyAqCisgKiBDcmVhdGVkIGJ5IENoYXJsZXMgTWFubmluZyA8Y2hhcmxlc0BhbGVw aDEuY28udWs+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJt cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBw dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5j bHVkZSAieWFmZnNfcGFja2VkdGFnczEuaCIKKyNpbmNsdWRlICJ5cG9ydGVudi5oIgorCit2 b2lkIHlhZmZzX1BhY2tUYWdzMSh5YWZmc19QYWNrZWRUYWdzMSAqcHQsIGNvbnN0IHlhZmZz X0V4dGVuZGVkVGFncyAqdCkKK3sKKwlwdC0+Y2h1bmtJZCA9IHQtPmNodW5rSWQ7CisJcHQt PnNlcmlhbE51bWJlciA9IHQtPnNlcmlhbE51bWJlcjsKKwlwdC0+Ynl0ZUNvdW50ID0gdC0+ Ynl0ZUNvdW50OworCXB0LT5vYmplY3RJZCA9IHQtPm9iamVjdElkOworCXB0LT5lY2MgPSAw OworCXB0LT5kZWxldGVkID0gKHQtPmNodW5rRGVsZXRlZCkgPyAwIDogMTsKKwlwdC0+dW51 c2VkU3R1ZmYgPSAwOworCXB0LT5zaG91bGRCZUZGID0gMHhGRkZGRkZGRjsKKworfQorCit2 b2lkIHlhZmZzX1VucGFja1RhZ3MxKHlhZmZzX0V4dGVuZGVkVGFncyAqdCwgY29uc3QgeWFm ZnNfUGFja2VkVGFnczEgKnB0KQoreworCXN0YXRpYyBjb25zdCBfX3U4IGFsbEZGW10gPQor CSAgICB7IDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYs IDB4ZmYsIDB4ZmYsIDB4ZmYsCisweGZmIH07CisKKwlpZiAobWVtY21wKGFsbEZGLCBwdCwg c2l6ZW9mKHlhZmZzX1BhY2tlZFRhZ3MxKSkpIHsKKwkJdC0+YmxvY2tCYWQgPSAwOworCQlp ZiAocHQtPnNob3VsZEJlRkYgIT0gMHhGRkZGRkZGRikKKwkJCXQtPmJsb2NrQmFkID0gMTsK KwkJdC0+Y2h1bmtVc2VkID0gMTsKKwkJdC0+b2JqZWN0SWQgPSBwdC0+b2JqZWN0SWQ7CisJ CXQtPmNodW5rSWQgPSBwdC0+Y2h1bmtJZDsKKwkJdC0+Ynl0ZUNvdW50ID0gcHQtPmJ5dGVD b3VudDsKKwkJdC0+ZWNjUmVzdWx0ID0gWUFGRlNfRUNDX1JFU1VMVF9OT19FUlJPUjsKKwkJ dC0+Y2h1bmtEZWxldGVkID0gKHB0LT5kZWxldGVkKSA/IDAgOiAxOworCQl0LT5zZXJpYWxO dW1iZXIgPSBwdC0+c2VyaWFsTnVtYmVyOworCX0gZWxzZSB7CisJCW1lbXNldCh0LCAwLCBz aXplb2YoeWFmZnNfRXh0ZW5kZWRUYWdzKSk7CisJfQorfQpkaWZmIC11IC0tbmV3LWZpbGUg LS1yZWN1cnNpdmUgbGludXgtMi42LjI5LjYub3JpZy9mcy95YWZmczIveWFmZnNfcGFja2Vk dGFnczEuaCBsaW51eC0yLjYuMjkuNi5tb2QvZnMveWFmZnMyL3lhZmZzX3BhY2tlZHRhZ3Mx LmgKLS0tIGxpbnV4LTIuNi4yOS42Lm9yaWcvZnMveWFmZnMyL3lhZmZzX3BhY2tlZHRhZ3Mx LmgJMTk2OS0xMi0zMSAxNzowMDowMC4wMDAwMDAwMDAgLTA3MDAKKysrIGxpbnV4LTIuNi4y OS42Lm1vZC9mcy95YWZmczIveWFmZnNfcGFja2VkdGFnczEuaAkyMDA5LTA3LTIxIDExOjI4 OjE4LjAwMDAwMDAwMCAtMDcwMApAQCAtMCwwICsxLDM3IEBACisvKgorICogWUFGRlM6IFll dCBhbm90aGVyIEZsYXNoIEZpbGUgU3lzdGVtIC4gQSBOQU5ELWZsYXNoIHNwZWNpZmljIGZp bGUgc3lzdGVtLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMi0yMDA3IEFsZXBoIE9uZSBM dGQuCisgKiAgIGZvciBUb2J5IENodXJjaGlsbCBMdGQgYW5kIEJyaWdodHN0YXIgRW5naW5l ZXJpbmcKKyAqCisgKiBDcmVhdGVkIGJ5IENoYXJsZXMgTWFubmluZyA8Y2hhcmxlc0BhbGVw aDEuY28udWs+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJt cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4x IGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAq CisgKiBOb3RlOiBPbmx5IFlBRkZTIGhlYWRlcnMgYXJlIExHUEwsIFlBRkZTIEMgY29kZSBp cyBjb3ZlcmVkIGJ5IEdQTC4KKyAqLworCisvKiBUaGlzIGlzIHVzZWQgdG8gcGFjayBZQUZG UzEgdGFncywgbm90IFlBRkZTMiB0YWdzLiAqLworCisjaWZuZGVmIF9fWUFGRlNfUEFDS0VE VEFHUzFfSF9fCisjZGVmaW5lIF9fWUFGRlNfUEFDS0VEVEFHUzFfSF9fCisKKyNpbmNsdWRl ICJ5YWZmc19ndXRzLmgiCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBjaHVua0lk OjIwOworCXVuc2lnbmVkIHNlcmlhbE51bWJlcjoyOworCXVuc2lnbmVkIGJ5dGVDb3VudDox MDsKKwl1bnNpZ25lZCBvYmplY3RJZDoxODsKKwl1bnNpZ25lZCBlY2M6MTI7CisJdW5zaWdu ZWQgZGVsZXRlZDoxOworCXVuc2lnbmVkIHVudXNlZFN0dWZmOjE7CisJdW5zaWduZWQgc2hv dWxkQmVGRjsKKworfSB5YWZmc19QYWNrZWRUYWdzMTsKKwordm9pZCB5YWZmc19QYWNrVGFn czEoeWFmZnNfUGFja2VkVGFnczEgKnB0LCBjb25zdCB5YWZmc19FeHRlbmRlZFRhZ3MgKnQp Owordm9pZCB5YWZmc19VbnBhY2tUYWdzMSh5YWZmc19FeHRlbmRlZFRhZ3MgKnQsIGNvbnN0 IHlhZmZzX1BhY2tlZFRhZ3MxICpwdCk7CisjZW5kaWYKZGlmZiAtdSAtLW5ldy1maWxlIC0t cmVjdXJzaXZlIGxpbnV4LTIuNi4yOS42Lm9yaWcvZnMveWFmZnMyL3lhZmZzX3BhY2tlZHRh Z3MyLmMgbGludXgtMi42LjI5LjYubW9kL2ZzL3lhZmZzMi95YWZmc19wYWNrZWR0YWdzMi5j Ci0tLSBsaW51eC0yLjYuMjkuNi5vcmlnL2ZzL3lhZmZzMi95YWZmc19wYWNrZWR0YWdzMi5j CTE5NjktMTItMzEgMTc6MDA6MDAuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYuMjku Ni5tb2QvZnMveWFmZnMyL3lhZmZzX3BhY2tlZHRhZ3MyLmMJMjAwOS0wNy0yMSAxMToyODox OC4wMDAwMDAwMDAgLTA3MDAKQEAgLTAsMCArMSwyMDYgQEAKKy8qCisgKiBZQUZGUzogWWV0 IEFub3RoZXIgRmxhc2ggRmlsZSBTeXN0ZW0uIEEgTkFORC1mbGFzaCBzcGVjaWZpYyBmaWxl IHN5c3RlbS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNyBBbGVwaCBPbmUgTHRk LgorICogICBmb3IgVG9ieSBDaHVyY2hpbGwgTHRkIGFuZCBCcmlnaHRzdGFyIEVuZ2luZWVy aW5nCisgKgorICogQ3JlYXRlZCBieSBDaGFybGVzIE1hbm5pbmcgPGNoYXJsZXNAYWxlcGgx LmNvLnVrPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVi bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1 ZGUgInlhZmZzX3BhY2tlZHRhZ3MyLmgiCisjaW5jbHVkZSAieXBvcnRlbnYuaCIKKyNpbmNs dWRlICJ5YWZmc190YWdzdmFsaWRpdHkuaCIKKworLyogVGhpcyBjb2RlIHBhY2tzIGEgc2V0 IG9mIGV4dGVuZGVkIHRhZ3MgaW50byBhIGJpbmFyeSBzdHJ1Y3R1cmUgZm9yCisgKiBOQU5E IHN0b3JhZ2UKKyAqLworCisvKiBTb21lIG9mIHRoZSBpbmZvcm1hdGlvbiBpcyAiZXh0cmEi IHN0cnVmZiB3aGljaCBjYW4gYmUgcGFja2VkIGluIHRvCisgKiBzcGVlZCBzY2FubmluZwor ICogVGhpcyBpcyBkZWZpbmVkIGJ5IGhhdmluZyB0aGUgRVhUUkFfSEVBREVSX0lORk9fRkxB RyBzZXQuCisgKi8KKworLyogRXh0cmEgZmxhZ3MgYXBwbGllZCB0byBjaHVua0lkICovCisK KyNkZWZpbmUgRVhUUkFfSEVBREVSX0lORk9fRkxBRwkweDgwMDAwMDAwCisjZGVmaW5lIEVY VFJBX1NIUklOS19GTEFHCTB4NDAwMDAwMDAKKyNkZWZpbmUgRVhUUkFfU0hBRE9XU19GTEFH CTB4MjAwMDAwMDAKKyNkZWZpbmUgRVhUUkFfU1BBUkVfRkxBR1MJMHgxMDAwMDAwMAorCisj ZGVmaW5lIEFMTF9FWFRSQV9GTEFHUwkJMHhGMDAwMDAwMAorCisvKiBBbHNvLCB0aGUgdG9w IDQgYml0cyBvZiB0aGUgb2JqZWN0IElkIGFyZSBzZXQgdG8gdGhlIG9iamVjdCB0eXBlLiAq LworI2RlZmluZSBFWFRSQV9PQkpFQ1RfVFlQRV9TSElGVCAoMjgpCisjZGVmaW5lIEVYVFJB X09CSkVDVF9UWVBFX01BU0sgICgoMHgwRikgPDwgRVhUUkFfT0JKRUNUX1RZUEVfU0hJRlQp CisKKworc3RhdGljIHZvaWQgeWFmZnNfRHVtcFBhY2tlZFRhZ3MyVGFnc1BhcnQoY29uc3Qg eWFmZnNfUGFja2VkVGFnczJUYWdzUGFydCAqcHR0KQoreworCVQoWUFGRlNfVFJBQ0VfTVRE LAorCSAgKFRTVFIoInBhY2tlZCB0YWdzIG9iaiAlZCBjaHVuayAlZCBieXRlICVkIHNlcSAl ZCIgVEVORFNUUiksCisJICAgcHR0LT5vYmplY3RJZCwgcHR0LT5jaHVua0lkLCBwdHQtPmJ5 dGVDb3VudCwKKwkgICBwdHQtPnNlcXVlbmNlTnVtYmVyKSk7Cit9CitzdGF0aWMgdm9pZCB5 YWZmc19EdW1wUGFja2VkVGFnczIoY29uc3QgeWFmZnNfUGFja2VkVGFnczIgKnB0KQorewor CXlhZmZzX0R1bXBQYWNrZWRUYWdzMlRhZ3NQYXJ0KCZwdC0+dCk7Cit9CisKK3N0YXRpYyB2 b2lkIHlhZmZzX0R1bXBUYWdzMihjb25zdCB5YWZmc19FeHRlbmRlZFRhZ3MgKnQpCit7CisJ VChZQUZGU19UUkFDRV9NVEQsCisJICAoVFNUUgorCSAgICgiZXh0LnRhZ3MgZWNjcmVzICVk IGJsa2JhZCAlZCBjaHVzZWQgJWQgb2JqICVkIGNodW5rJWQgYnl0ZSAlZCBkZWwgJWQgc2Vy ICVkIHNlcSAlZCIKKwkgICAgVEVORFNUUiksIHQtPmVjY1Jlc3VsdCwgdC0+YmxvY2tCYWQs IHQtPmNodW5rVXNlZCwgdC0+b2JqZWN0SWQsCisJICAgdC0+Y2h1bmtJZCwgdC0+Ynl0ZUNv dW50LCB0LT5jaHVua0RlbGV0ZWQsIHQtPnNlcmlhbE51bWJlciwKKwkgICB0LT5zZXF1ZW5j ZU51bWJlcikpOworCit9CisKK3ZvaWQgeWFmZnNfUGFja1RhZ3MyVGFnc1BhcnQoeWFmZnNf UGFja2VkVGFnczJUYWdzUGFydCAqcHR0LAorCQljb25zdCB5YWZmc19FeHRlbmRlZFRhZ3Mg KnQpCit7CisJcHR0LT5jaHVua0lkID0gdC0+Y2h1bmtJZDsKKwlwdHQtPnNlcXVlbmNlTnVt YmVyID0gdC0+c2VxdWVuY2VOdW1iZXI7CisJcHR0LT5ieXRlQ291bnQgPSB0LT5ieXRlQ291 bnQ7CisJcHR0LT5vYmplY3RJZCA9IHQtPm9iamVjdElkOworCisJaWYgKHQtPmNodW5rSWQg PT0gMCAmJiB0LT5leHRyYUhlYWRlckluZm9BdmFpbGFibGUpIHsKKwkJLyogU3RvcmUgdGhl IGV4dHJhIGhlYWRlciBpbmZvIGluc3RlYWQgKi8KKwkJLyogV2Ugc2F2ZSB0aGUgcGFyZW50 IG9iamVjdCBpbiB0aGUgY2h1bmtJZCAqLworCQlwdHQtPmNodW5rSWQgPSBFWFRSQV9IRUFE RVJfSU5GT19GTEFHCisJCQl8IHQtPmV4dHJhUGFyZW50T2JqZWN0SWQ7CisJCWlmICh0LT5l eHRyYUlzU2hyaW5rSGVhZGVyKQorCQkJcHR0LT5jaHVua0lkIHw9IEVYVFJBX1NIUklOS19G TEFHOworCQlpZiAodC0+ZXh0cmFTaGFkb3dzKQorCQkJcHR0LT5jaHVua0lkIHw9IEVYVFJB X1NIQURPV1NfRkxBRzsKKworCQlwdHQtPm9iamVjdElkICY9IH5FWFRSQV9PQkpFQ1RfVFlQ RV9NQVNLOworCQlwdHQtPm9iamVjdElkIHw9CisJCSAgICAodC0+ZXh0cmFPYmplY3RUeXBl IDw8IEVYVFJBX09CSkVDVF9UWVBFX1NISUZUKTsKKworCQlpZiAodC0+ZXh0cmFPYmplY3RU eXBlID09IFlBRkZTX09CSkVDVF9UWVBFX0hBUkRMSU5LKQorCQkJcHR0LT5ieXRlQ291bnQg PSB0LT5leHRyYUVxdWl2YWxlbnRPYmplY3RJZDsKKwkJZWxzZSBpZiAodC0+ZXh0cmFPYmpl Y3RUeXBlID09IFlBRkZTX09CSkVDVF9UWVBFX0ZJTEUpCisJCQlwdHQtPmJ5dGVDb3VudCA9 IHQtPmV4dHJhRmlsZUxlbmd0aDsKKwkJZWxzZQorCQkJcHR0LT5ieXRlQ291bnQgPSAwOwor CX0KKworCXlhZmZzX0R1bXBQYWNrZWRUYWdzMlRhZ3NQYXJ0KHB0dCk7CisJeWFmZnNfRHVt cFRhZ3MyKHQpOworfQorCisKK3ZvaWQgeWFmZnNfUGFja1RhZ3MyKHlhZmZzX1BhY2tlZFRh Z3MyICpwdCwgY29uc3QgeWFmZnNfRXh0ZW5kZWRUYWdzICp0KQoreworCXlhZmZzX1BhY2tU YWdzMlRhZ3NQYXJ0KCZwdC0+dCwgdCk7CisKKyNpZm5kZWYgWUFGRlNfSUdOT1JFX1RBR1Nf RUNDCisJeworCQl5YWZmc19FQ0NDYWxjdWxhdGVPdGhlcigodW5zaWduZWQgY2hhciAqKSZw dC0+dCwKKwkJCQkJc2l6ZW9mKHlhZmZzX1BhY2tlZFRhZ3MyVGFnc1BhcnQpLAorCQkJCQkm cHQtPmVjYyk7CisJfQorI2VuZGlmCit9CisKKwordm9pZCB5YWZmc19VbnBhY2tUYWdzMlRh Z3NQYXJ0KHlhZmZzX0V4dGVuZGVkVGFncyAqdCwKKwkJeWFmZnNfUGFja2VkVGFnczJUYWdz UGFydCAqcHR0KQoreworCisJbWVtc2V0KHQsIDAsIHNpemVvZih5YWZmc19FeHRlbmRlZFRh Z3MpKTsKKworCXlhZmZzX0luaXRpYWxpc2VUYWdzKHQpOworCisJaWYgKHB0dC0+c2VxdWVu Y2VOdW1iZXIgIT0gMHhGRkZGRkZGRikgeworCQl0LT5ibG9ja0JhZCA9IDA7CisJCXQtPmNo dW5rVXNlZCA9IDE7CisJCXQtPm9iamVjdElkID0gcHR0LT5vYmplY3RJZDsKKwkJdC0+Y2h1 bmtJZCA9IHB0dC0+Y2h1bmtJZDsKKwkJdC0+Ynl0ZUNvdW50ID0gcHR0LT5ieXRlQ291bnQ7 CisJCXQtPmNodW5rRGVsZXRlZCA9IDA7CisJCXQtPnNlcmlhbE51bWJlciA9IDA7CisJCXQt PnNlcXVlbmNlTnVtYmVyID0gcHR0LT5zZXF1ZW5jZU51bWJlcjsKKworCQkvKiBEbyBleHRy YSBoZWFkZXIgaW5mbyBzdHVmZiAqLworCisJCWlmIChwdHQtPmNodW5rSWQgJiBFWFRSQV9I RUFERVJfSU5GT19GTEFHKSB7CisJCQl0LT5jaHVua0lkID0gMDsKKwkJCXQtPmJ5dGVDb3Vu dCA9IDA7CisKKwkJCXQtPmV4dHJhSGVhZGVySW5mb0F2YWlsYWJsZSA9IDE7CisJCQl0LT5l eHRyYVBhcmVudE9iamVjdElkID0KKwkJCSAgICBwdHQtPmNodW5rSWQgJiAofihBTExfRVhU UkFfRkxBR1MpKTsKKwkJCXQtPmV4dHJhSXNTaHJpbmtIZWFkZXIgPQorCQkJICAgIChwdHQt PmNodW5rSWQgJiBFWFRSQV9TSFJJTktfRkxBRykgPyAxIDogMDsKKwkJCXQtPmV4dHJhU2hh ZG93cyA9CisJCQkgICAgKHB0dC0+Y2h1bmtJZCAmIEVYVFJBX1NIQURPV1NfRkxBRykgPyAx IDogMDsKKwkJCXQtPmV4dHJhT2JqZWN0VHlwZSA9CisJCQkgICAgcHR0LT5vYmplY3RJZCA+ PiBFWFRSQV9PQkpFQ1RfVFlQRV9TSElGVDsKKwkJCXQtPm9iamVjdElkICY9IH5FWFRSQV9P QkpFQ1RfVFlQRV9NQVNLOworCisJCQlpZiAodC0+ZXh0cmFPYmplY3RUeXBlID09IFlBRkZT X09CSkVDVF9UWVBFX0hBUkRMSU5LKQorCQkJCXQtPmV4dHJhRXF1aXZhbGVudE9iamVjdElk ID0gcHR0LT5ieXRlQ291bnQ7CisJCQllbHNlCisJCQkJdC0+ZXh0cmFGaWxlTGVuZ3RoID0g cHR0LT5ieXRlQ291bnQ7CisJCX0KKwl9CisKKwl5YWZmc19EdW1wUGFja2VkVGFnczJUYWdz UGFydChwdHQpOworCXlhZmZzX0R1bXBUYWdzMih0KTsKKworfQorCisKK3ZvaWQgeWFmZnNf VW5wYWNrVGFnczIoeWFmZnNfRXh0ZW5kZWRUYWdzICp0LCB5YWZmc19QYWNrZWRUYWdzMiAq cHQpCit7CisKKwl5YWZmc19FQ0NSZXN1bHQgZWNjUmVzdWx0ID0gWUFGRlNfRUNDX1JFU1VM VF9OT19FUlJPUjsKKworCWlmIChwdC0+dC5zZXF1ZW5jZU51bWJlciAhPSAweEZGRkZGRkZG KSB7CisJCS8qIFBhZ2UgaXMgaW4gdXNlICovCisjaWZuZGVmIFlBRkZTX0lHTk9SRV9UQUdT X0VDQworCQl7CisJCQl5YWZmc19FQ0NPdGhlciBlY2M7CisJCQlpbnQgcmVzdWx0OworCQkJ eWFmZnNfRUNDQ2FsY3VsYXRlT3RoZXIoKHVuc2lnbmVkIGNoYXIgKikmcHQtPnQsCisJCQkJ CQlzaXplb2YKKwkJCQkJCSh5YWZmc19QYWNrZWRUYWdzMlRhZ3NQYXJ0KSwKKwkJCQkJCSZl Y2MpOworCQkJcmVzdWx0ID0KKwkJCSAgICB5YWZmc19FQ0NDb3JyZWN0T3RoZXIoKHVuc2ln bmVkIGNoYXIgKikmcHQtPnQsCisJCQkJCQkgIHNpemVvZgorCQkJCQkJICAoeWFmZnNfUGFj a2VkVGFnczJUYWdzUGFydCksCisJCQkJCQkgICZwdC0+ZWNjLCAmZWNjKTsKKwkJCXN3aXRj aCAocmVzdWx0KSB7CisJCQljYXNlIDA6CisJCQkJZWNjUmVzdWx0ID0gWUFGRlNfRUNDX1JF U1VMVF9OT19FUlJPUjsKKwkJCQlicmVhazsKKwkJCWNhc2UgMToKKwkJCQllY2NSZXN1bHQg PSBZQUZGU19FQ0NfUkVTVUxUX0ZJWEVEOworCQkJCWJyZWFrOworCQkJY2FzZSAtMToKKwkJ CQllY2NSZXN1bHQgPSBZQUZGU19FQ0NfUkVTVUxUX1VORklYRUQ7CisJCQkJYnJlYWs7CisJ CQlkZWZhdWx0OgorCQkJCWVjY1Jlc3VsdCA9IFlBRkZTX0VDQ19SRVNVTFRfVU5LTk9XTjsK KwkJCX0KKwkJfQorI2VuZGlmCisJfQorCisJeWFmZnNfVW5wYWNrVGFnczJUYWdzUGFydCh0 LCAmcHQtPnQpOworCisJdC0+ZWNjUmVzdWx0ID0gZWNjUmVzdWx0OworCisJeWFmZnNfRHVt cFBhY2tlZFRhZ3MyKHB0KTsKKwl5YWZmc19EdW1wVGFnczIodCk7CisKK30KKwpkaWZmIC11 IC0tbmV3LWZpbGUgLS1yZWN1cnNpdmUgbGludXgtMi42LjI5LjYub3JpZy9mcy95YWZmczIv eWFmZnNfcGFja2VkdGFnczIuaCBsaW51eC0yLjYuMjkuNi5tb2QvZnMveWFmZnMyL3lhZmZz X3BhY2tlZHRhZ3MyLmgKLS0tIGxpbnV4LTIuNi4yOS42Lm9yaWcvZnMveWFmZnMyL3lhZmZz X3BhY2tlZHRhZ3MyLmgJMTk2OS0xMi0zMSAxNzowMDowMC4wMDAwMDAwMDAgLTA3MDAKKysr IGxpbnV4LTIuNi4yOS42Lm1vZC9mcy95YWZmczIveWFmZnNfcGFja2VkdGFnczIuaAkyMDA5 LTA3LTIxIDExOjI4OjE4LjAwMDAwMDAwMCAtMDcwMApAQCAtMCwwICsxLDQzIEBACisvKgor ICogWUFGRlM6IFlldCBhbm90aGVyIEZsYXNoIEZpbGUgU3lzdGVtIC4gQSBOQU5ELWZsYXNo IHNwZWNpZmljIGZpbGUgc3lzdGVtLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMi0yMDA3 IEFsZXBoIE9uZSBMdGQuCisgKiAgIGZvciBUb2J5IENodXJjaGlsbCBMdGQgYW5kIEJyaWdo dHN0YXIgRW5naW5lZXJpbmcKKyAqCisgKiBDcmVhdGVkIGJ5IENoYXJsZXMgTWFubmluZyA8 Y2hhcmxlc0BhbGVwaDEuY28udWs+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IHZlcnNpb24gMi4xIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbi4KKyAqCisgKiBOb3RlOiBPbmx5IFlBRkZTIGhlYWRlcnMgYXJlIExHUEwsIFlB RkZTIEMgY29kZSBpcyBjb3ZlcmVkIGJ5IEdQTC4KKyAqLworCisvKiBUaGlzIGlzIHVzZWQg dG8gcGFjayBZQUZGUzIgdGFncywgbm90IFlBRkZTMXRhZ3MuICovCisKKyNpZm5kZWYgX19Z QUZGU19QQUNLRURUQUdTMl9IX18KKyNkZWZpbmUgX19ZQUZGU19QQUNLRURUQUdTMl9IX18K KworI2luY2x1ZGUgInlhZmZzX2d1dHMuaCIKKyNpbmNsdWRlICJ5YWZmc19lY2MuaCIKKwor dHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIHNlcXVlbmNlTnVtYmVyOworCXVuc2lnbmVk IG9iamVjdElkOworCXVuc2lnbmVkIGNodW5rSWQ7CisJdW5zaWduZWQgYnl0ZUNvdW50Owor fSB5YWZmc19QYWNrZWRUYWdzMlRhZ3NQYXJ0OworCit0eXBlZGVmIHN0cnVjdCB7CisJeWFm ZnNfUGFja2VkVGFnczJUYWdzUGFydCB0OworCXlhZmZzX0VDQ090aGVyIGVjYzsKK30geWFm ZnNfUGFja2VkVGFnczI7CisKKy8qIEZ1bGwgcGFja2VkIHRhZ3Mgd2l0aCBFQ0MsIHVzZWQg Zm9yIG9vYiB0YWdzICovCit2b2lkIHlhZmZzX1BhY2tUYWdzMih5YWZmc19QYWNrZWRUYWdz MiAqcHQsIGNvbnN0IHlhZmZzX0V4dGVuZGVkVGFncyAqdCk7Cit2b2lkIHlhZmZzX1VucGFj a1RhZ3MyKHlhZmZzX0V4dGVuZGVkVGFncyAqdCwgeWFmZnNfUGFja2VkVGFnczIgKnB0KTsK KworLyogT25seSB0aGUgdGFncyBwYXJ0IChubyBFQ0MgZm9yIHVzZSB3aXRoIGluYmFuZCB0 YWdzICovCit2b2lkIHlhZmZzX1BhY2tUYWdzMlRhZ3NQYXJ0KHlhZmZzX1BhY2tlZFRhZ3My VGFnc1BhcnQgKnB0LCBjb25zdCB5YWZmc19FeHRlbmRlZFRhZ3MgKnQpOwordm9pZCB5YWZm c19VbnBhY2tUYWdzMlRhZ3NQYXJ0KHlhZmZzX0V4dGVuZGVkVGFncyAqdCwgeWFmZnNfUGFj a2VkVGFnczJUYWdzUGFydCAqcHQpOworI2VuZGlmCmRpZmYgLXUgLS1uZXctZmlsZSAtLXJl Y3Vyc2l2ZSBsaW51eC0yLjYuMjkuNi5vcmlnL2ZzL3lhZmZzMi95YWZmc19xc29ydC5jIGxp bnV4LTIuNi4yOS42Lm1vZC9mcy95YWZmczIveWFmZnNfcXNvcnQuYwotLS0gbGludXgtMi42 LjI5LjYub3JpZy9mcy95YWZmczIveWFmZnNfcXNvcnQuYwkxOTY5LTEyLTMxIDE3OjAwOjAw LjAwMDAwMDAwMCAtMDcwMAorKysgbGludXgtMi42LjI5LjYubW9kL2ZzL3lhZmZzMi95YWZm c19xc29ydC5jCTIwMDktMDctMjEgMTE6Mjg6MTguMDAwMDAwMDAwIC0wNzAwCkBAIC0wLDAg KzEsMTYzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAxOTkyLCAxOTkzCisgKglUaGUgUmVn ZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNl cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0 aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRo ZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29u dHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lm aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg UFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E CisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUg RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJV VE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJ TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU RSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04g QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAor ICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBE QU1BR0UuCisgKi8KKworI2luY2x1ZGUgInlwb3J0ZW52LmgiCisvKiAjaW5jbHVkZSA8bGlu dXgvc3RyaW5nLmg+ICovCisKKy8qCisgKiBRc29ydCByb3V0aW5lIGZyb20gQmVudGxleSAm IE1jSWxyb3kncyAiRW5naW5lZXJpbmcgYSBTb3J0IEZ1bmN0aW9uIi4KKyAqLworI2RlZmlu ZSBzd2FwY29kZShUWVBFLCBwYXJtaSwgcGFybWosIG4pIGRvIHsgCQlcCisJbG9uZyBpID0g KG4pIC8gc2l6ZW9mIChUWVBFKTsgCQkJXAorCXJlZ2lzdGVyIFRZUEUgKnBpID0gKFRZUEUg KikgKHBhcm1pKTsgCQlcCisJcmVnaXN0ZXIgVFlQRSAqcGogPSAoVFlQRSAqKSAocGFybWop OyAJCVwKKwlkbyB7IAkJCQkJCVwKKwkJcmVnaXN0ZXIgVFlQRQl0ID0gKnBpOwkJXAorCQkq cGkrKyA9ICpwajsJCQkJXAorCQkqcGorKyA9IHQ7CQkJCVwKKwl9IHdoaWxlICgtLWkgPiAw KTsJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBTV0FQSU5JVChhLCBlcykgc3dhcHR5 cGUgPSAoKGNoYXIgKilhIC0gKGNoYXIgKikwKSAlIHNpemVvZihsb25nKSB8fCBcCisJZXMg JSBzaXplb2YobG9uZykgPyAyIDogZXMgPT0gc2l6ZW9mKGxvbmcpID8gMCA6IDE7CisKK3N0 YXRpYyBfX2lubGluZSB2b2lkCitzd2FwZnVuYyhjaGFyICphLCBjaGFyICpiLCBpbnQgbiwg aW50IHN3YXB0eXBlKQoreworCWlmIChzd2FwdHlwZSA8PSAxKQorCQlzd2FwY29kZShsb25n LCBhLCBiLCBuKTsKKwllbHNlCisJCXN3YXBjb2RlKGNoYXIsIGEsIGIsIG4pOworfQorCisj ZGVmaW5lIHlzd2FwKGEsIGIpIGRvIHsJCQkJCVwKKwlpZiAoc3dhcHR5cGUgPT0gMCkgewkJ CQlcCisJCWxvbmcgdCA9ICoobG9uZyAqKShhKTsJCQlcCisJCSoobG9uZyAqKShhKSA9ICoo bG9uZyAqKShiKTsJCVwKKwkJKihsb25nICopKGIpID0gdDsJCQlcCisJfSBlbHNlCQkJCQkJ XAorCQlzd2FwZnVuYyhhLCBiLCBlcywgc3dhcHR5cGUpOwkJXAorfSB3aGlsZSAoMCkKKwor I2RlZmluZSB2ZWNzd2FwKGEsIGIsIG4pIAlpZiAoKG4pID4gMCkgc3dhcGZ1bmMoYSwgYiwg biwgc3dhcHR5cGUpCisKK3N0YXRpYyBfX2lubGluZSBjaGFyICoKK21lZDMoY2hhciAqYSwg Y2hhciAqYiwgY2hhciAqYywgaW50ICgqY21wKShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQg KikpCit7CisJcmV0dXJuIGNtcChhLCBiKSA8IDAgPworCQkoY21wKGIsIGMpIDwgMCA/IGIg OiAoY21wKGEsIGMpIDwgMCA/IGMgOiBhKSkKKwkJOiAoY21wKGIsIGMpID4gMCA/IGIgOiAo Y21wKGEsIGMpIDwgMCA/IGEgOiBjKSk7Cit9CisKKyNpZm5kZWYgbWluCisjZGVmaW5lIG1p bihhLCBiKSAoKChhKSA8IChiKSkgPyAoYSkgOiAoYikpCisjZW5kaWYKKwordm9pZAoreWFm ZnNfcXNvcnQodm9pZCAqYWEsIHNpemVfdCBuLCBzaXplX3QgZXMsCisJaW50ICgqY21wKShj b25zdCB2b2lkICosIGNvbnN0IHZvaWQgKikpCit7CisJY2hhciAqcGEsICpwYiwgKnBjLCAq cGQsICpwbCwgKnBtLCAqcG47CisJaW50IGQsIHIsIHN3YXB0eXBlLCBzd2FwX2NudDsKKwly ZWdpc3RlciBjaGFyICphID0gYWE7CisKK2xvb3A6CVNXQVBJTklUKGEsIGVzKTsKKwlzd2Fw X2NudCA9IDA7CisJaWYgKG4gPCA3KSB7CisJCWZvciAocG0gPSAoY2hhciAqKWEgKyBlczsg cG0gPCAoY2hhciAqKSBhICsgbiAqIGVzOyBwbSArPSBlcykKKwkJCWZvciAocGwgPSBwbTsg cGwgPiAoY2hhciAqKSBhICYmIGNtcChwbCAtIGVzLCBwbCkgPiAwOworCQkJICAgICBwbCAt PSBlcykKKwkJCQl5c3dhcChwbCwgcGwgLSBlcyk7CisJCXJldHVybjsKKwl9CisJcG0gPSAo Y2hhciAqKWEgKyAobiAvIDIpICogZXM7CisJaWYgKG4gPiA3KSB7CisJCXBsID0gKGNoYXIg KilhOworCQlwbiA9IChjaGFyICopYSArIChuIC0gMSkgKiBlczsKKwkJaWYgKG4gPiA0MCkg eworCQkJZCA9IChuIC8gOCkgKiBlczsKKwkJCXBsID0gbWVkMyhwbCwgcGwgKyBkLCBwbCAr IDIgKiBkLCBjbXApOworCQkJcG0gPSBtZWQzKHBtIC0gZCwgcG0sIHBtICsgZCwgY21wKTsK KwkJCXBuID0gbWVkMyhwbiAtIDIgKiBkLCBwbiAtIGQsIHBuLCBjbXApOworCQl9CisJCXBt ID0gbWVkMyhwbCwgcG0sIHBuLCBjbXApOworCX0KKwl5c3dhcChhLCBwbSk7CisJcGEgPSBw YiA9IChjaGFyICopYSArIGVzOworCisJcGMgPSBwZCA9IChjaGFyICopYSArIChuIC0gMSkg KiBlczsKKwlmb3IgKDs7KSB7CisJCXdoaWxlIChwYiA8PSBwYyAmJiAociA9IGNtcChwYiwg YSkpIDw9IDApIHsKKwkJCWlmIChyID09IDApIHsKKwkJCQlzd2FwX2NudCA9IDE7CisJCQkJ eXN3YXAocGEsIHBiKTsKKwkJCQlwYSArPSBlczsKKwkJCX0KKwkJCXBiICs9IGVzOworCQl9 CisJCXdoaWxlIChwYiA8PSBwYyAmJiAociA9IGNtcChwYywgYSkpID49IDApIHsKKwkJCWlm IChyID09IDApIHsKKwkJCQlzd2FwX2NudCA9IDE7CisJCQkJeXN3YXAocGMsIHBkKTsKKwkJ CQlwZCAtPSBlczsKKwkJCX0KKwkJCXBjIC09IGVzOworCQl9CisJCWlmIChwYiA+IHBjKQor CQkJYnJlYWs7CisJCXlzd2FwKHBiLCBwYyk7CisJCXN3YXBfY250ID0gMTsKKwkJcGIgKz0g ZXM7CisJCXBjIC09IGVzOworCX0KKwlpZiAoc3dhcF9jbnQgPT0gMCkgeyAgLyogU3dpdGNo IHRvIGluc2VydGlvbiBzb3J0ICovCisJCWZvciAocG0gPSAoY2hhciAqKSBhICsgZXM7IHBt IDwgKGNoYXIgKikgYSArIG4gKiBlczsgcG0gKz0gZXMpCisJCQlmb3IgKHBsID0gcG07IHBs ID4gKGNoYXIgKikgYSAmJiBjbXAocGwgLSBlcywgcGwpID4gMDsKKwkJCSAgICAgcGwgLT0g ZXMpCisJCQkJeXN3YXAocGwsIHBsIC0gZXMpOworCQlyZXR1cm47CisJfQorCisJcG4gPSAo Y2hhciAqKWEgKyBuICogZXM7CisJciA9IG1pbihwYSAtIChjaGFyICopYSwgcGIgLSBwYSk7 CisJdmVjc3dhcChhLCBwYiAtIHIsIHIpOworCXIgPSBtaW4oKGxvbmcpKHBkIC0gcGMpLCAo bG9uZykocG4gLSBwZCAtIGVzKSk7CisJdmVjc3dhcChwYiwgcG4gLSByLCByKTsKKwlyID0g cGIgLSBwYTsKKwlpZiAociA+IGVzKQorCQl5YWZmc19xc29ydChhLCByIC8gZXMsIGVzLCBj bXApOworCXIgPSBwZCAtIHBjOworCWlmIChyID4gZXMpIHsKKwkJLyogSXRlcmF0ZSByYXRo ZXIgdGhhbiByZWN1cnNlIHRvIHNhdmUgc3RhY2sgc3BhY2UgKi8KKwkJYSA9IHBuIC0gcjsK KwkJbiA9IHIgLyBlczsKKwkJZ290byBsb29wOworCX0KKy8qCQl5YWZmc19xc29ydChwbiAt IHIsIHIgLyBlcywgZXMsIGNtcCk7Ki8KK30KZGlmZiAtdSAtLW5ldy1maWxlIC0tcmVjdXJz aXZlIGxpbnV4LTIuNi4yOS42Lm9yaWcvZnMveWFmZnMyL3lhZmZzX3Fzb3J0LmggbGludXgt Mi42LjI5LjYubW9kL2ZzL3lhZmZzMi95YWZmc19xc29ydC5oCi0tLSBsaW51eC0yLjYuMjku Ni5vcmlnL2ZzL3lhZmZzMi95YWZmc19xc29ydC5oCTE5NjktMTItMzEgMTc6MDA6MDAuMDAw MDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYuMjkuNi5tb2QvZnMveWFmZnMyL3lhZmZzX3Fz b3J0LmgJMjAwOS0wNy0yMSAxMToyODoxOC4wMDAwMDAwMDAgLTA3MDAKQEAgLTAsMCArMSwy MyBAQAorLyoKKyAqIFlBRkZTOiBZZXQgYW5vdGhlciBGbGFzaCBGaWxlIFN5c3RlbSAuIEEg TkFORC1mbGFzaCBzcGVjaWZpYyBmaWxlIHN5c3RlbS4KKyAqCisgKiBDb3B5cmlnaHQgKEMp IDIwMDItMjAwNyBBbGVwaCBPbmUgTHRkLgorICogICBmb3IgVG9ieSBDaHVyY2hpbGwgTHRk IGFuZCBCcmlnaHRzdGFyIEVuZ2luZWVyaW5nCisgKgorICogQ3JlYXRlZCBieSBDaGFybGVz IE1hbm5pbmcgPGNoYXJsZXNAYWxlcGgxLmNvLnVrPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSB2ZXJzaW9uIDIuMSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogTm90ZTogT25seSBZQUZGUyBoZWFkZXJzIGFy ZSBMR1BMLCBZQUZGUyBDIGNvZGUgaXMgY292ZXJlZCBieSBHUEwuCisgKi8KKworCisjaWZu ZGVmIF9fWUFGRlNfUVNPUlRfSF9fCisjZGVmaW5lIF9fWUFGRlNfUVNPUlRfSF9fCisKK2V4 dGVybiB2b2lkIHlhZmZzX3Fzb3J0KHZvaWQgKmNvbnN0IGJhc2UsIHNpemVfdCB0b3RhbF9l bGVtcywgc2l6ZV90IHNpemUsCisJCQlpbnQgKCpjbXApKGNvbnN0IHZvaWQgKiwgY29uc3Qg dm9pZCAqKSk7CisKKyNlbmRpZgpkaWZmIC11IC0tbmV3LWZpbGUgLS1yZWN1cnNpdmUgbGlu dXgtMi42LjI5LjYub3JpZy9mcy95YWZmczIveWFmZnNfdGFnc2NvbXBhdC5jIGxpbnV4LTIu Ni4yOS42Lm1vZC9mcy95YWZmczIveWFmZnNfdGFnc2NvbXBhdC5jCi0tLSBsaW51eC0yLjYu MjkuNi5vcmlnL2ZzL3lhZmZzMi95YWZmc190YWdzY29tcGF0LmMJMTk2OS0xMi0zMSAxNzow MDowMC4wMDAwMDAwMDAgLTA3MDAKKysrIGxpbnV4LTIuNi4yOS42Lm1vZC9mcy95YWZmczIv eWFmZnNfdGFnc2NvbXBhdC5jCTIwMDktMDctMjEgMTE6Mjg6MTguMDAwMDAwMDAwIC0wNzAw CkBAIC0wLDAgKzEsNTQxIEBACisvKgorICogWUFGRlM6IFlldCBBbm90aGVyIEZsYXNoIEZp bGUgU3lzdGVtLiBBIE5BTkQtZmxhc2ggc3BlY2lmaWMgZmlsZSBzeXN0ZW0uCisgKgorICog Q29weXJpZ2h0IChDKSAyMDAyLTIwMDcgQWxlcGggT25lIEx0ZC4KKyAqICAgZm9yIFRvYnkg Q2h1cmNoaWxsIEx0ZCBhbmQgQnJpZ2h0c3RhciBFbmdpbmVlcmluZworICoKKyAqIENyZWF0 ZWQgYnkgQ2hhcmxlcyBNYW5uaW5nIDxjaGFybGVzQGFsZXBoMS5jby51az4KKyAqCisgKiBU aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlICJ5YWZmc19ndXRzLmgi CisjaW5jbHVkZSAieWFmZnNfdGFnc2NvbXBhdC5oIgorI2luY2x1ZGUgInlhZmZzX2VjYy5o IgorI2luY2x1ZGUgInlhZmZzX2dldGJsb2NraW5mby5oIgorCitzdGF0aWMgdm9pZCB5YWZm c19IYW5kbGVSZWFkRGF0YUVycm9yKHlhZmZzX0RldmljZSAqZGV2LCBpbnQgY2h1bmtJbk5B TkQpOworI2lmZGVmIE5PVFlFVAorc3RhdGljIHZvaWQgeWFmZnNfQ2hlY2tXcml0dGVuQmxv Y2soeWFmZnNfRGV2aWNlICpkZXYsIGludCBjaHVua0luTkFORCk7CitzdGF0aWMgdm9pZCB5 YWZmc19IYW5kbGVXcml0ZUNodW5rT2soeWFmZnNfRGV2aWNlICpkZXYsIGludCBjaHVua0lu TkFORCwKKwkJCQkgICAgIGNvbnN0IF9fdTggKmRhdGEsCisJCQkJICAgICBjb25zdCB5YWZm c19TcGFyZSAqc3BhcmUpOworc3RhdGljIHZvaWQgeWFmZnNfSGFuZGxlVXBkYXRlQ2h1bmso eWFmZnNfRGV2aWNlICpkZXYsIGludCBjaHVua0luTkFORCwKKwkJCQkgICAgY29uc3QgeWFm ZnNfU3BhcmUgKnNwYXJlKTsKK3N0YXRpYyB2b2lkIHlhZmZzX0hhbmRsZVdyaXRlQ2h1bmtF cnJvcih5YWZmc19EZXZpY2UgKmRldiwgaW50IGNodW5rSW5OQU5EKTsKKyNlbmRpZgorCitz dGF0aWMgY29uc3QgY2hhciB5YWZmc19jb3VudEJpdHNUYWJsZVsyNTZdID0geworCTAsIDEs IDEsIDIsIDEsIDIsIDIsIDMsIDEsIDIsIDIsIDMsIDIsIDMsIDMsIDQsCisJMSwgMiwgMiwg MywgMiwgMywgMywgNCwgMiwgMywgMywgNCwgMywgNCwgNCwgNSwKKwkxLCAyLCAyLCAzLCAy LCAzLCAzLCA0LCAyLCAzLCAzLCA0LCAzLCA0LCA0LCA1LAorCTIsIDMsIDMsIDQsIDMsIDQs IDQsIDUsIDMsIDQsIDQsIDUsIDQsIDUsIDUsIDYsCisJMSwgMiwgMiwgMywgMiwgMywgMywg NCwgMiwgMywgMywgNCwgMywgNCwgNCwgNSwKKwkyLCAzLCAzLCA0LCAzLCA0LCA0LCA1LCAz LCA0LCA0LCA1LCA0LCA1LCA1LCA2LAorCTIsIDMsIDMsIDQsIDMsIDQsIDQsIDUsIDMsIDQs IDQsIDUsIDQsIDUsIDUsIDYsCisJMywgNCwgNCwgNSwgNCwgNSwgNSwgNiwgNCwgNSwgNSwg NiwgNSwgNiwgNiwgNywKKwkxLCAyLCAyLCAzLCAyLCAzLCAzLCA0LCAyLCAzLCAzLCA0LCAz LCA0LCA0LCA1LAorCTIsIDMsIDMsIDQsIDMsIDQsIDQsIDUsIDMsIDQsIDQsIDUsIDQsIDUs IDUsIDYsCisJMiwgMywgMywgNCwgMywgNCwgNCwgNSwgMywgNCwgNCwgNSwgNCwgNSwgNSwg NiwKKwkzLCA0LCA0LCA1LCA0LCA1LCA1LCA2LCA0LCA1LCA1LCA2LCA1LCA2LCA2LCA3LAor CTIsIDMsIDMsIDQsIDMsIDQsIDQsIDUsIDMsIDQsIDQsIDUsIDQsIDUsIDUsIDYsCisJMywg NCwgNCwgNSwgNCwgNSwgNSwgNiwgNCwgNSwgNSwgNiwgNSwgNiwgNiwgNywKKwkzLCA0LCA0 LCA1LCA0LCA1LCA1LCA2LCA0LCA1LCA1LCA2LCA1LCA2LCA2LCA3LAorCTQsIDUsIDUsIDYs IDUsIDYsIDYsIDcsIDUsIDYsIDYsIDcsIDYsIDcsIDcsIDgKK307CisKK2ludCB5YWZmc19D b3VudEJpdHMoX191OCB4KQoreworCWludCByZXRWYWw7CisJcmV0VmFsID0geWFmZnNfY291 bnRCaXRzVGFibGVbeF07CisJcmV0dXJuIHJldFZhbDsKK30KKworLyoqKioqKioqKiogVGFn cyBFQ0MgY2FsY3VsYXRpb25zICAqKioqKioqKiovCisKK3ZvaWQgeWFmZnNfQ2FsY0VDQyhj b25zdCBfX3U4ICpkYXRhLCB5YWZmc19TcGFyZSAqc3BhcmUpCit7CisJeWFmZnNfRUNDQ2Fs Y3VsYXRlKGRhdGEsIHNwYXJlLT5lY2MxKTsKKwl5YWZmc19FQ0NDYWxjdWxhdGUoJmRhdGFb MjU2XSwgc3BhcmUtPmVjYzIpOworfQorCit2b2lkIHlhZmZzX0NhbGNUYWdzRUNDKHlhZmZz X1RhZ3MgKnRhZ3MpCit7CisJLyogQ2FsY3VsYXRlIGFuIGVjYyAqLworCisJdW5zaWduZWQg Y2hhciAqYiA9ICgoeWFmZnNfVGFnc1VuaW9uICopIHRhZ3MpLT5hc0J5dGVzOworCXVuc2ln bmVkIGksIGo7CisJdW5zaWduZWQgZWNjID0gMDsKKwl1bnNpZ25lZCBiaXQgPSAwOworCisJ dGFncy0+ZWNjID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJZm9yIChq ID0gMTsgaiAmIDB4ZmY7IGogPDw9IDEpIHsKKwkJCWJpdCsrOworCQkJaWYgKGJbaV0gJiBq KQorCQkJCWVjYyBePSBiaXQ7CisJCX0KKwl9CisKKwl0YWdzLT5lY2MgPSBlY2M7CisKK30K KworaW50IHlhZmZzX0NoZWNrRUNDT25UYWdzKHlhZmZzX1RhZ3MgKnRhZ3MpCit7CisJdW5z aWduZWQgZWNjID0gdGFncy0+ZWNjOworCisJeWFmZnNfQ2FsY1RhZ3NFQ0ModGFncyk7CisK KwllY2MgXj0gdGFncy0+ZWNjOworCisJaWYgKGVjYyAmJiBlY2MgPD0gNjQpIHsKKwkJLyog VE9ETzogSGFuZGxlIHRoZSBmYWlsdXJlIGJldHRlci4gUmV0aXJlPyAqLworCQl1bnNpZ25l ZCBjaGFyICpiID0gKCh5YWZmc19UYWdzVW5pb24gKikgdGFncyktPmFzQnl0ZXM7CisKKwkJ ZWNjLS07CisKKwkJYltlY2MgLyA4XSBePSAoMSA8PCAoZWNjICYgNykpOworCisJCS8qIE5v dyByZWN2YWxjIHRoZSBlY2MgKi8KKwkJeWFmZnNfQ2FsY1RhZ3NFQ0ModGFncyk7CisKKwkJ cmV0dXJuIDE7CS8qIHJlY292ZXJlZCBlcnJvciAqLworCX0gZWxzZSBpZiAoZWNjKSB7CisJ CS8qIFdpZXJkIGVjYyBmYWlsdXJlIHZhbHVlICovCisJCS8qIFRPRE8gTmVlZCB0byBkbyBz b21ldGhpb25nIGhlcmUgKi8KKwkJcmV0dXJuIC0xOwkvKiB1bnJlY292ZXJlZCBlcnJvciAq LworCX0KKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKiBUYWdzICoqKioqKioqKiov CisKK3N0YXRpYyB2b2lkIHlhZmZzX0xvYWRUYWdzSW50b1NwYXJlKHlhZmZzX1NwYXJlICpz cGFyZVB0ciwKKwkJCQl5YWZmc19UYWdzICp0YWdzUHRyKQoreworCXlhZmZzX1RhZ3NVbmlv biAqdHUgPSAoeWFmZnNfVGFnc1VuaW9uICopIHRhZ3NQdHI7CisKKwl5YWZmc19DYWxjVGFn c0VDQyh0YWdzUHRyKTsKKworCXNwYXJlUHRyLT50YWdCeXRlMCA9IHR1LT5hc0J5dGVzWzBd OworCXNwYXJlUHRyLT50YWdCeXRlMSA9IHR1LT5hc0J5dGVzWzFdOworCXNwYXJlUHRyLT50 YWdCeXRlMiA9IHR1LT5hc0J5dGVzWzJdOworCXNwYXJlUHRyLT50YWdCeXRlMyA9IHR1LT5h c0J5dGVzWzNdOworCXNwYXJlUHRyLT50YWdCeXRlNCA9IHR1LT5hc0J5dGVzWzRdOworCXNw YXJlUHRyLT50YWdCeXRlNSA9IHR1LT5hc0J5dGVzWzVdOworCXNwYXJlUHRyLT50YWdCeXRl NiA9IHR1LT5hc0J5dGVzWzZdOworCXNwYXJlUHRyLT50YWdCeXRlNyA9IHR1LT5hc0J5dGVz WzddOworfQorCitzdGF0aWMgdm9pZCB5YWZmc19HZXRUYWdzRnJvbVNwYXJlKHlhZmZzX0Rl dmljZSAqZGV2LCB5YWZmc19TcGFyZSAqc3BhcmVQdHIsCisJCQkJeWFmZnNfVGFncyAqdGFn c1B0cikKK3sKKwl5YWZmc19UYWdzVW5pb24gKnR1ID0gKHlhZmZzX1RhZ3NVbmlvbiAqKSB0 YWdzUHRyOworCWludCByZXN1bHQ7CisKKwl0dS0+YXNCeXRlc1swXSA9IHNwYXJlUHRyLT50 YWdCeXRlMDsKKwl0dS0+YXNCeXRlc1sxXSA9IHNwYXJlUHRyLT50YWdCeXRlMTsKKwl0dS0+ YXNCeXRlc1syXSA9IHNwYXJlUHRyLT50YWdCeXRlMjsKKwl0dS0+YXNCeXRlc1szXSA9IHNw YXJlUHRyLT50YWdCeXRlMzsKKwl0dS0+YXNCeXRlc1s0XSA9IHNwYXJlUHRyLT50YWdCeXRl NDsKKwl0dS0+YXNCeXRlc1s1XSA9IHNwYXJlUHRyLT50YWdCeXRlNTsKKwl0dS0+YXNCeXRl c1s2XSA9IHNwYXJlUHRyLT50YWdCeXRlNjsKKwl0dS0+YXNCeXRlc1s3XSA9IHNwYXJlUHRy LT50YWdCeXRlNzsKKworCXJlc3VsdCA9IHlhZmZzX0NoZWNrRUNDT25UYWdzKHRhZ3NQdHIp OworCWlmIChyZXN1bHQgPiAwKQorCQlkZXYtPnRhZ3NFY2NGaXhlZCsrOworCWVsc2UgaWYg KHJlc3VsdCA8IDApCisJCWRldi0+dGFnc0VjY1VuZml4ZWQrKzsKK30KKworc3RhdGljIHZv aWQgeWFmZnNfU3BhcmVJbml0aWFsaXNlKHlhZmZzX1NwYXJlICpzcGFyZSkKK3sKKwltZW1z ZXQoc3BhcmUsIDB4RkYsIHNpemVvZih5YWZmc19TcGFyZSkpOworfQorCitzdGF0aWMgaW50 IHlhZmZzX1dyaXRlQ2h1bmtUb05BTkQoc3RydWN0IHlhZmZzX0RldmljZVN0cnVjdCAqZGV2 LAorCQkJCWludCBjaHVua0luTkFORCwgY29uc3QgX191OCAqZGF0YSwKKwkJCQl5YWZmc19T cGFyZSAqc3BhcmUpCit7CisJaWYgKGNodW5rSW5OQU5EIDwgZGV2LT5zdGFydEJsb2NrICog ZGV2LT5uQ2h1bmtzUGVyQmxvY2spIHsKKwkJVChZQUZGU19UUkFDRV9FUlJPUiwKKwkJICAo VFNUUigiKio+PiB5YWZmcyBjaHVuayAlZCBpcyBub3QgdmFsaWQiIFRFTkRTVFIpLAorCQkg ICBjaHVua0luTkFORCkpOworCQlyZXR1cm4gWUFGRlNfRkFJTDsKKwl9CisKKwlkZXYtPm5Q YWdlV3JpdGVzKys7CisJcmV0dXJuIGRldi0+d3JpdGVDaHVua1RvTkFORChkZXYsIGNodW5r SW5OQU5ELCBkYXRhLCBzcGFyZSk7Cit9CisKK3N0YXRpYyBpbnQgeWFmZnNfUmVhZENodW5r RnJvbU5BTkQoc3RydWN0IHlhZmZzX0RldmljZVN0cnVjdCAqZGV2LAorCQkJCSAgIGludCBj aHVua0luTkFORCwKKwkJCQkgICBfX3U4ICpkYXRhLAorCQkJCSAgIHlhZmZzX1NwYXJlICpz cGFyZSwKKwkJCQkgICB5YWZmc19FQ0NSZXN1bHQgKmVjY1Jlc3VsdCwKKwkJCQkgICBpbnQg ZG9FcnJvckNvcnJlY3Rpb24pCit7CisJaW50IHJldFZhbDsKKwl5YWZmc19TcGFyZSBsb2Nh bFNwYXJlOworCisJZGV2LT5uUGFnZVJlYWRzKys7CisKKwlpZiAoIXNwYXJlICYmIGRhdGEp IHsKKwkJLyogSWYgd2UgZG9uJ3QgaGF2ZSBhIHJlYWwgc3BhcmUsIHRoZW4gd2UgdXNlIGEg bG9jYWwgb25lLiAqLworCQkvKiBOZWVkIHRoaXMgZm9yIHRoZSBjYWxjdWxhdGlvbiBvZiB0 aGUgZWNjICovCisJCXNwYXJlID0gJmxvY2FsU3BhcmU7CisJfQorCisJaWYgKCFkZXYtPnVz ZU5BTkRFQ0MpIHsKKwkJcmV0VmFsID0gZGV2LT5yZWFkQ2h1bmtGcm9tTkFORChkZXYsIGNo dW5rSW5OQU5ELCBkYXRhLCBzcGFyZSk7CisJCWlmIChkYXRhICYmIGRvRXJyb3JDb3JyZWN0 aW9uKSB7CisJCQkvKiBEbyBFQ0MgY29ycmVjdGlvbiAqLworCQkJLyogVG9kbyBoYW5kbGUg YW55IGVycm9ycyAqLworCQkJaW50IGVjY1Jlc3VsdDEsIGVjY1Jlc3VsdDI7CisJCQlfX3U4 IGNhbGNFY2NbM107CisKKwkJCXlhZmZzX0VDQ0NhbGN1bGF0ZShkYXRhLCBjYWxjRWNjKTsK KwkJCWVjY1Jlc3VsdDEgPQorCQkJICAgIHlhZmZzX0VDQ0NvcnJlY3QoZGF0YSwgc3BhcmUt PmVjYzEsIGNhbGNFY2MpOworCQkJeWFmZnNfRUNDQ2FsY3VsYXRlKCZkYXRhWzI1Nl0sIGNh bGNFY2MpOworCQkJZWNjUmVzdWx0MiA9CisJCQkgICAgeWFmZnNfRUNDQ29ycmVjdCgmZGF0 YVsyNTZdLCBzcGFyZS0+ZWNjMiwgY2FsY0VjYyk7CisKKwkJCWlmIChlY2NSZXN1bHQxID4g MCkgeworCQkJCVQoWUFGRlNfVFJBQ0VfRVJST1IsCisJCQkJICAoVFNUUgorCQkJCSAgICgi Kio+PnlhZmZzIGVjYyBlcnJvciBmaXggcGVyZm9ybWVkIG9uIGNodW5rICVkOjAiCisJCQkJ ICAgIFRFTkRTVFIpLCBjaHVua0luTkFORCkpOworCQkJCWRldi0+ZWNjRml4ZWQrKzsKKwkJ CX0gZWxzZSBpZiAoZWNjUmVzdWx0MSA8IDApIHsKKwkJCQlUKFlBRkZTX1RSQUNFX0VSUk9S LAorCQkJCSAgKFRTVFIKKwkJCQkgICAoIioqPj55YWZmcyBlY2MgZXJyb3IgdW5maXhlZCBv biBjaHVuayAlZDowIgorCQkJCSAgICBURU5EU1RSKSwgY2h1bmtJbk5BTkQpKTsKKwkJCQlk ZXYtPmVjY1VuZml4ZWQrKzsKKwkJCX0KKworCQkJaWYgKGVjY1Jlc3VsdDIgPiAwKSB7CisJ CQkJVChZQUZGU19UUkFDRV9FUlJPUiwKKwkJCQkgIChUU1RSCisJCQkJICAgKCIqKj4+eWFm ZnMgZWNjIGVycm9yIGZpeCBwZXJmb3JtZWQgb24gY2h1bmsgJWQ6MSIKKwkJCQkgICAgVEVO RFNUUiksIGNodW5rSW5OQU5EKSk7CisJCQkJZGV2LT5lY2NGaXhlZCsrOworCQkJfSBlbHNl IGlmIChlY2NSZXN1bHQyIDwgMCkgeworCQkJCVQoWUFGRlNfVFJBQ0VfRVJST1IsCisJCQkJ ICAoVFNUUgorCQkJCSAgICgiKio+PnlhZmZzIGVjYyBlcnJvciB1bmZpeGVkIG9uIGNodW5r ICVkOjEiCisJCQkJICAgIFRFTkRTVFIpLCBjaHVua0luTkFORCkpOworCQkJCWRldi0+ZWNj VW5maXhlZCsrOworCQkJfQorCisJCQlpZiAoZWNjUmVzdWx0MSB8fCBlY2NSZXN1bHQyKSB7 CisJCQkJLyogV2UgaGFkIGEgZGF0YSBwcm9ibGVtIG9uIHRoaXMgcGFnZSAqLworCQkJCXlh ZmZzX0hhbmRsZVJlYWREYXRhRXJyb3IoZGV2LCBjaHVua0luTkFORCk7CisJCQl9CisKKwkJ CWlmIChlY2NSZXN1bHQxIDwgMCB8fCBlY2NSZXN1bHQyIDwgMCkKKwkJCQkqZWNjUmVzdWx0 ID0gWUFGRlNfRUNDX1JFU1VMVF9VTkZJWEVEOworCQkJZWxzZSBpZiAoZWNjUmVzdWx0MSA+ IDAgfHwgZWNjUmVzdWx0MiA+IDApCisJCQkJKmVjY1Jlc3VsdCA9IFlBRkZTX0VDQ19SRVNV TFRfRklYRUQ7CisJCQllbHNlCisJCQkJKmVjY1Jlc3VsdCA9IFlBRkZTX0VDQ19SRVNVTFRf Tk9fRVJST1I7CisJCX0KKwl9IGVsc2UgeworCQkvKiBNdXN0IGFsbG9jYXRlIGVub3VnaCBt ZW1vcnkgZm9yIHNwYXJlKzIqc2l6ZW9mKGludCkgKi8KKwkJLyogZm9yIGVjYyByZXN1bHRz IGZyb20gZGV2aWNlLiAqLworCQlzdHJ1Y3QgeWFmZnNfTkFORFNwYXJlIG5zcGFyZTsKKwor CQltZW1zZXQoJm5zcGFyZSwgMCwgc2l6ZW9mKG5zcGFyZSkpOworCisJCXJldFZhbCA9IGRl di0+cmVhZENodW5rRnJvbU5BTkQoZGV2LCBjaHVua0luTkFORCwgZGF0YSwKKwkJCQkJKHlh ZmZzX1NwYXJlICopICZuc3BhcmUpOworCQltZW1jcHkoc3BhcmUsICZuc3BhcmUsIHNpemVv Zih5YWZmc19TcGFyZSkpOworCQlpZiAoZGF0YSAmJiBkb0Vycm9yQ29ycmVjdGlvbikgewor CQkJaWYgKG5zcGFyZS5lY2NyZXMxID4gMCkgeworCQkJCVQoWUFGRlNfVFJBQ0VfRVJST1Is CisJCQkJICAoVFNUUgorCQkJCSAgICgiKio+Pm10ZCBlY2MgZXJyb3IgZml4IHBlcmZvcm1l ZCBvbiBjaHVuayAlZDowIgorCQkJCSAgICBURU5EU1RSKSwgY2h1bmtJbk5BTkQpKTsKKwkJ CX0gZWxzZSBpZiAobnNwYXJlLmVjY3JlczEgPCAwKSB7CisJCQkJVChZQUZGU19UUkFDRV9F UlJPUiwKKwkJCQkgIChUU1RSCisJCQkJICAgKCIqKj4+bXRkIGVjYyBlcnJvciB1bmZpeGVk IG9uIGNodW5rICVkOjAiCisJCQkJICAgIFRFTkRTVFIpLCBjaHVua0luTkFORCkpOworCQkJ fQorCisJCQlpZiAobnNwYXJlLmVjY3JlczIgPiAwKSB7CisJCQkJVChZQUZGU19UUkFDRV9F UlJPUiwKKwkJCQkgIChUU1RSCisJCQkJICAgKCIqKj4+bXRkIGVjYyBlcnJvciBmaXggcGVy Zm9ybWVkIG9uIGNodW5rICVkOjEiCisJCQkJICAgIFRFTkRTVFIpLCBjaHVua0luTkFORCkp OworCQkJfSBlbHNlIGlmIChuc3BhcmUuZWNjcmVzMiA8IDApIHsKKwkJCQlUKFlBRkZTX1RS QUNFX0VSUk9SLAorCQkJCSAgKFRTVFIKKwkJCQkgICAoIioqPj5tdGQgZWNjIGVycm9yIHVu Zml4ZWQgb24gY2h1bmsgJWQ6MSIKKwkJCQkgICAgVEVORFNUUiksIGNodW5rSW5OQU5EKSk7 CisJCQl9CisKKwkJCWlmIChuc3BhcmUuZWNjcmVzMSB8fCBuc3BhcmUuZWNjcmVzMikgewor CQkJCS8qIFdlIGhhZCBhIGRhdGEgcHJvYmxlbSBvbiB0aGlzIHBhZ2UgKi8KKwkJCQl5YWZm c19IYW5kbGVSZWFkRGF0YUVycm9yKGRldiwgY2h1bmtJbk5BTkQpOworCQkJfQorCisJCQlp ZiAobnNwYXJlLmVjY3JlczEgPCAwIHx8IG5zcGFyZS5lY2NyZXMyIDwgMCkKKwkJCQkqZWNj UmVzdWx0ID0gWUFGRlNfRUNDX1JFU1VMVF9VTkZJWEVEOworCQkJZWxzZSBpZiAobnNwYXJl LmVjY3JlczEgPiAwIHx8IG5zcGFyZS5lY2NyZXMyID4gMCkKKwkJCQkqZWNjUmVzdWx0ID0g WUFGRlNfRUNDX1JFU1VMVF9GSVhFRDsKKwkJCWVsc2UKKwkJCQkqZWNjUmVzdWx0ID0gWUFG RlNfRUNDX1JFU1VMVF9OT19FUlJPUjsKKworCQl9CisJfQorCXJldHVybiByZXRWYWw7Cit9 CisKKyNpZmRlZiBOT1RZRVQKK3N0YXRpYyBpbnQgeWFmZnNfQ2hlY2tDaHVua0VyYXNlZChz dHJ1Y3QgeWFmZnNfRGV2aWNlU3RydWN0ICpkZXYsCisJCQkJICBpbnQgY2h1bmtJbk5BTkQp Cit7CisJc3RhdGljIGludCBpbml0OworCXN0YXRpYyBfX3U4IGNtcGJ1ZltZQUZGU19CWVRF U19QRVJfQ0hVTktdOworCXN0YXRpYyBfX3U4IGRhdGFbWUFGRlNfQllURVNfUEVSX0NIVU5L XTsKKwkvKiBNaWdodCBhcyB3ZWxsIGFsd2F5cyBhbGxvY2F0ZSB0aGUgbGFyZ2VyIHNpemUg Zm9yICovCisJLyogZGV2LT51c2VOQU5ERUNDID09IHRydWU7ICovCisJc3RhdGljIF9fdTgg c3BhcmVbc2l6ZW9mKHN0cnVjdCB5YWZmc19OQU5EU3BhcmUpXTsKKworCWRldi0+cmVhZENo dW5rRnJvbU5BTkQoZGV2LCBjaHVua0luTkFORCwgZGF0YSwgKHlhZmZzX1NwYXJlICopIHNw YXJlKTsKKworCWlmICghaW5pdCkgeworCQltZW1zZXQoY21wYnVmLCAweGZmLCBZQUZGU19C WVRFU19QRVJfQ0hVTkspOworCQlpbml0ID0gMTsKKwl9CisKKwlpZiAobWVtY21wKGNtcGJ1 ZiwgZGF0YSwgWUFGRlNfQllURVNfUEVSX0NIVU5LKSkKKwkJcmV0dXJuIFlBRkZTX0ZBSUw7 CisJaWYgKG1lbWNtcChjbXBidWYsIHNwYXJlLCAxNikpCisJCXJldHVybiBZQUZGU19GQUlM OworCisJcmV0dXJuIFlBRkZTX09LOworCit9CisjZW5kaWYKKworLyoKKyAqIEZ1bmN0aW9u cyBmb3Igcm9idXN0aXNpemluZworICovCisKK3N0YXRpYyB2b2lkIHlhZmZzX0hhbmRsZVJl YWREYXRhRXJyb3IoeWFmZnNfRGV2aWNlICpkZXYsIGludCBjaHVua0luTkFORCkKK3sKKwlp bnQgYmxvY2tJbk5BTkQgPSBjaHVua0luTkFORCAvIGRldi0+bkNodW5rc1BlckJsb2NrOwor CisJLyogTWFyayB0aGUgYmxvY2sgZm9yIHJldGlyZW1lbnQgKi8KKwl5YWZmc19HZXRCbG9j a0luZm8oZGV2LCBibG9ja0luTkFORCArIGRldi0+YmxvY2tPZmZzZXQpLT5uZWVkc1JldGly aW5nID0gMTsKKwlUKFlBRkZTX1RSQUNFX0VSUk9SIHwgWUFGRlNfVFJBQ0VfQkFEX0JMT0NL UywKKwkgIChUU1RSKCIqKj4+QmxvY2sgJWQgbWFya2VkIGZvciByZXRpcmVtZW50IiBURU5E U1RSKSwgYmxvY2tJbk5BTkQpKTsKKworCS8qIFRPRE86CisJICogSnVzdCBkbyBhIGdhcmJh Z2UgY29sbGVjdGlvbiBvbiB0aGUgYWZmZWN0ZWQgYmxvY2sKKwkgKiB0aGVuIHJldGlyZSB0 aGUgYmxvY2sKKwkgKiBOQiByZWN1cnNpb24KKwkgKi8KK30KKworI2lmZGVmIE5PVFlFVAor c3RhdGljIHZvaWQgeWFmZnNfQ2hlY2tXcml0dGVuQmxvY2soeWFmZnNfRGV2aWNlICpkZXYs IGludCBjaHVua0luTkFORCkKK3sKK30KKworc3RhdGljIHZvaWQgeWFmZnNfSGFuZGxlV3Jp dGVDaHVua09rKHlhZmZzX0RldmljZSAqZGV2LCBpbnQgY2h1bmtJbk5BTkQsCisJCQkJICAg ICBjb25zdCBfX3U4ICpkYXRhLAorCQkJCSAgICAgY29uc3QgeWFmZnNfU3BhcmUgKnNwYXJl KQoreworfQorCitzdGF0aWMgdm9pZCB5YWZmc19IYW5kbGVVcGRhdGVDaHVuayh5YWZmc19E ZXZpY2UgKmRldiwgaW50IGNodW5rSW5OQU5ELAorCQkJCSAgICBjb25zdCB5YWZmc19TcGFy ZSAqc3BhcmUpCit7Cit9CisKK3N0YXRpYyB2b2lkIHlhZmZzX0hhbmRsZVdyaXRlQ2h1bmtF cnJvcih5YWZmc19EZXZpY2UgKmRldiwgaW50IGNodW5rSW5OQU5EKQoreworCWludCBibG9j a0luTkFORCA9IGNodW5rSW5OQU5EIC8gZGV2LT5uQ2h1bmtzUGVyQmxvY2s7CisKKwkvKiBN YXJrIHRoZSBibG9jayBmb3IgcmV0aXJlbWVudCAqLworCXlhZmZzX0dldEJsb2NrSW5mbyhk ZXYsIGJsb2NrSW5OQU5EKS0+bmVlZHNSZXRpcmluZyA9IDE7CisJLyogRGVsZXRlIHRoZSBj aHVuayAqLworCXlhZmZzX0RlbGV0ZUNodW5rKGRldiwgY2h1bmtJbk5BTkQsIDEsIF9fTElO RV9fKTsKK30KKworc3RhdGljIGludCB5YWZmc19WZXJpZnlDb21wYXJlKGNvbnN0IF9fdTgg KmQwLCBjb25zdCBfX3U4ICpkMSwKKwkJCSAgICAgICBjb25zdCB5YWZmc19TcGFyZSAqczAs IGNvbnN0IHlhZmZzX1NwYXJlICpzMSkKK3sKKworCWlmIChtZW1jbXAoZDAsIGQxLCBZQUZG U19CWVRFU19QRVJfQ0hVTkspICE9IDAgfHwKKwkgICAgczAtPnRhZ0J5dGUwICE9IHMxLT50 YWdCeXRlMCB8fAorCSAgICBzMC0+dGFnQnl0ZTEgIT0gczEtPnRhZ0J5dGUxIHx8CisJICAg IHMwLT50YWdCeXRlMiAhPSBzMS0+dGFnQnl0ZTIgfHwKKwkgICAgczAtPnRhZ0J5dGUzICE9 IHMxLT50YWdCeXRlMyB8fAorCSAgICBzMC0+dGFnQnl0ZTQgIT0gczEtPnRhZ0J5dGU0IHx8 CisJICAgIHMwLT50YWdCeXRlNSAhPSBzMS0+dGFnQnl0ZTUgfHwKKwkgICAgczAtPnRhZ0J5 dGU2ICE9IHMxLT50YWdCeXRlNiB8fAorCSAgICBzMC0+dGFnQnl0ZTcgIT0gczEtPnRhZ0J5 dGU3IHx8CisJICAgIHMwLT5lY2MxWzBdICE9IHMxLT5lY2MxWzBdIHx8CisJICAgIHMwLT5l Y2MxWzFdICE9IHMxLT5lY2MxWzFdIHx8CisJICAgIHMwLT5lY2MxWzJdICE9IHMxLT5lY2Mx WzJdIHx8CisJICAgIHMwLT5lY2MyWzBdICE9IHMxLT5lY2MyWzBdIHx8CisJICAgIHMwLT5l Y2MyWzFdICE9IHMxLT5lY2MyWzFdIHx8IHMwLT5lY2MyWzJdICE9IHMxLT5lY2MyWzJdKSB7 CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAxOworfQorI2VuZGlmCQkJCS8qIE5PVFlF VCAqLworCitpbnQgeWFmZnNfVGFnc0NvbXBhdGFiaWxpdHlXcml0ZUNodW5rV2l0aFRhZ3NU b05BTkQoeWFmZnNfRGV2aWNlICpkZXYsCisJCQkJCQlpbnQgY2h1bmtJbk5BTkQsCisJCQkJ CQljb25zdCBfX3U4ICpkYXRhLAorCQkJCQkJY29uc3QgeWFmZnNfRXh0ZW5kZWRUYWdzICpl VGFncykKK3sKKwl5YWZmc19TcGFyZSBzcGFyZTsKKwl5YWZmc19UYWdzIHRhZ3M7CisKKwl5 YWZmc19TcGFyZUluaXRpYWxpc2UoJnNwYXJlKTsKKworCWlmIChlVGFncy0+Y2h1bmtEZWxl dGVkKQorCQlzcGFyZS5wYWdlU3RhdHVzID0gMDsKKwllbHNlIHsKKwkJdGFncy5vYmplY3RJ ZCA9IGVUYWdzLT5vYmplY3RJZDsKKwkJdGFncy5jaHVua0lkID0gZVRhZ3MtPmNodW5rSWQ7 CisKKwkJdGFncy5ieXRlQ291bnRMU0IgPSBlVGFncy0+Ynl0ZUNvdW50ICYgMHgzZmY7CisK KwkJaWYgKGRldi0+bkRhdGFCeXRlc1BlckNodW5rID49IDEwMjQpCisJCQl0YWdzLmJ5dGVD b3VudE1TQiA9IChlVGFncy0+Ynl0ZUNvdW50ID4+IDEwKSAmIDM7CisJCWVsc2UKKwkJCXRh Z3MuYnl0ZUNvdW50TVNCID0gMzsKKworCisJCXRhZ3Muc2VyaWFsTnVtYmVyID0gZVRhZ3Mt PnNlcmlhbE51bWJlcjsKKworCQlpZiAoIWRldi0+dXNlTkFOREVDQyAmJiBkYXRhKQorCQkJ eWFmZnNfQ2FsY0VDQyhkYXRhLCAmc3BhcmUpOworCisJCXlhZmZzX0xvYWRUYWdzSW50b1Nw YXJlKCZzcGFyZSwgJnRhZ3MpOworCisJfQorCisJcmV0dXJuIHlhZmZzX1dyaXRlQ2h1bmtU b05BTkQoZGV2LCBjaHVua0luTkFORCwgZGF0YSwgJnNwYXJlKTsKK30KKworaW50IHlhZmZz X1RhZ3NDb21wYXRhYmlsaXR5UmVhZENodW5rV2l0aFRhZ3NGcm9tTkFORCh5YWZmc19EZXZp Y2UgKmRldiwKKwkJCQkJCSAgICAgaW50IGNodW5rSW5OQU5ELAorCQkJCQkJICAgICBfX3U4 ICpkYXRhLAorCQkJCQkJICAgICB5YWZmc19FeHRlbmRlZFRhZ3MgKmVUYWdzKQoreworCisJ eWFmZnNfU3BhcmUgc3BhcmU7CisJeWFmZnNfVGFncyB0YWdzOworCXlhZmZzX0VDQ1Jlc3Vs dCBlY2NSZXN1bHQgPSBZQUZGU19FQ0NfUkVTVUxUX1VOS05PV047CisKKwlzdGF0aWMgeWFm ZnNfU3BhcmUgc3BhcmVGRjsKKwlzdGF0aWMgaW50IGluaXQ7CisKKwlpZiAoIWluaXQpIHsK KwkJbWVtc2V0KCZzcGFyZUZGLCAweEZGLCBzaXplb2Yoc3BhcmVGRikpOworCQlpbml0ID0g MTsKKwl9CisKKwlpZiAoeWFmZnNfUmVhZENodW5rRnJvbU5BTkQKKwkgICAgKGRldiwgY2h1 bmtJbk5BTkQsIGRhdGEsICZzcGFyZSwgJmVjY1Jlc3VsdCwgMSkpIHsKKwkJLyogZVRhZ3Mg bWF5IGJlIE5VTEwgKi8KKwkJaWYgKGVUYWdzKSB7CisKKwkJCWludCBkZWxldGVkID0KKwkJ CSAgICAoeWFmZnNfQ291bnRCaXRzKHNwYXJlLnBhZ2VTdGF0dXMpIDwgNykgPyAxIDogMDsK KworCQkJZVRhZ3MtPmNodW5rRGVsZXRlZCA9IGRlbGV0ZWQ7CisJCQllVGFncy0+ZWNjUmVz dWx0ID0gZWNjUmVzdWx0OworCQkJZVRhZ3MtPmJsb2NrQmFkID0gMDsJLyogV2UncmUgcmVh ZGluZyBpdCAqLworCQkJLyogdGhlcmVmb3JlIGl0IGlzIG5vdCBhIGJhZCBibG9jayAqLwor CQkJZVRhZ3MtPmNodW5rVXNlZCA9CisJCQkgICAgKG1lbWNtcCgmc3BhcmVGRiwgJnNwYXJl LCBzaXplb2Yoc3BhcmVGRikpICE9CisJCQkgICAgIDApID8gMSA6IDA7CisKKwkJCWlmIChl VGFncy0+Y2h1bmtVc2VkKSB7CisJCQkJeWFmZnNfR2V0VGFnc0Zyb21TcGFyZShkZXYsICZz cGFyZSwgJnRhZ3MpOworCisJCQkJZVRhZ3MtPm9iamVjdElkID0gdGFncy5vYmplY3RJZDsK KwkJCQllVGFncy0+Y2h1bmtJZCA9IHRhZ3MuY2h1bmtJZDsKKwkJCQllVGFncy0+Ynl0ZUNv dW50ID0gdGFncy5ieXRlQ291bnRMU0I7CisKKwkJCQlpZiAoZGV2LT5uRGF0YUJ5dGVzUGVy Q2h1bmsgPj0gMTAyNCkKKwkJCQkJZVRhZ3MtPmJ5dGVDb3VudCB8PSAoKCh1bnNpZ25lZCkg dGFncy5ieXRlQ291bnRNU0IpIDw8IDEwKTsKKworCQkJCWVUYWdzLT5zZXJpYWxOdW1iZXIg PSB0YWdzLnNlcmlhbE51bWJlcjsKKwkJCX0KKwkJfQorCisJCXJldHVybiBZQUZGU19PSzsK Kwl9IGVsc2UgeworCQlyZXR1cm4gWUFGRlNfRkFJTDsKKwl9Cit9CisKK2ludCB5YWZmc19U YWdzQ29tcGF0YWJpbGl0eU1hcmtOQU5EQmxvY2tCYWQoc3RydWN0IHlhZmZzX0RldmljZVN0 cnVjdCAqZGV2LAorCQkJCQkgICAgaW50IGJsb2NrSW5OQU5EKQoreworCisJeWFmZnNfU3Bh cmUgc3BhcmU7CisKKwltZW1zZXQoJnNwYXJlLCAweGZmLCBzaXplb2YoeWFmZnNfU3BhcmUp KTsKKworCXNwYXJlLmJsb2NrU3RhdHVzID0gJ1knOworCisJeWFmZnNfV3JpdGVDaHVua1Rv TkFORChkZXYsIGJsb2NrSW5OQU5EICogZGV2LT5uQ2h1bmtzUGVyQmxvY2ssIE5VTEwsCisJ CQkgICAgICAgJnNwYXJlKTsKKwl5YWZmc19Xcml0ZUNodW5rVG9OQU5EKGRldiwgYmxvY2tJ bk5BTkQgKiBkZXYtPm5DaHVua3NQZXJCbG9jayArIDEsCisJCQkgICAgICAgTlVMTCwgJnNw YXJlKTsKKworCXJldHVybiBZQUZGU19PSzsKKworfQorCitpbnQgeWFmZnNfVGFnc0NvbXBh dGFiaWxpdHlRdWVyeU5BTkRCbG9jayhzdHJ1Y3QgeWFmZnNfRGV2aWNlU3RydWN0ICpkZXYs CisJCQkJCSAgaW50IGJsb2NrTm8sCisJCQkJCSAgeWFmZnNfQmxvY2tTdGF0ZSAqc3RhdGUs CisJCQkJCSAgX191MzIgKnNlcXVlbmNlTnVtYmVyKQoreworCisJeWFmZnNfU3BhcmUgc3Bh cmUwLCBzcGFyZTE7CisJc3RhdGljIHlhZmZzX1NwYXJlIHNwYXJlRkY7CisJc3RhdGljIGlu dCBpbml0OworCXlhZmZzX0VDQ1Jlc3VsdCBkdW1teTsKKworCWlmICghaW5pdCkgeworCQlt ZW1zZXQoJnNwYXJlRkYsIDB4RkYsIHNpemVvZihzcGFyZUZGKSk7CisJCWluaXQgPSAxOwor CX0KKworCSpzZXF1ZW5jZU51bWJlciA9IDA7CisKKwl5YWZmc19SZWFkQ2h1bmtGcm9tTkFO RChkZXYsIGJsb2NrTm8gKiBkZXYtPm5DaHVua3NQZXJCbG9jaywgTlVMTCwKKwkJCQkmc3Bh cmUwLCAmZHVtbXksIDEpOworCXlhZmZzX1JlYWRDaHVua0Zyb21OQU5EKGRldiwgYmxvY2tO byAqIGRldi0+bkNodW5rc1BlckJsb2NrICsgMSwgTlVMTCwKKwkJCQkmc3BhcmUxLCAmZHVt bXksIDEpOworCisJaWYgKHlhZmZzX0NvdW50Qml0cyhzcGFyZTAuYmxvY2tTdGF0dXMgJiBz cGFyZTEuYmxvY2tTdGF0dXMpIDwgNykKKwkJKnN0YXRlID0gWUFGRlNfQkxPQ0tfU1RBVEVf REVBRDsKKwllbHNlIGlmIChtZW1jbXAoJnNwYXJlRkYsICZzcGFyZTAsIHNpemVvZihzcGFy ZUZGKSkgPT0gMCkKKwkJKnN0YXRlID0gWUFGRlNfQkxPQ0tfU1RBVEVfRU1QVFk7CisJZWxz ZQorCQkqc3RhdGUgPSBZQUZGU19CTE9DS19TVEFURV9ORUVEU19TQ0FOTklORzsKKworCXJl dHVybiBZQUZGU19PSzsKK30KZGlmZiAtdSAtLW5ldy1maWxlIC0tcmVjdXJzaXZlIGxpbnV4 LTIuNi4yOS42Lm9yaWcvZnMveWFmZnMyL3lhZmZzX3RhZ3Njb21wYXQuaCBsaW51eC0yLjYu MjkuNi5tb2QvZnMveWFmZnMyL3lhZmZzX3RhZ3Njb21wYXQuaAotLS0gbGludXgtMi42LjI5 LjYub3JpZy9mcy95YWZmczIveWFmZnNfdGFnc2NvbXBhdC5oCTE5NjktMTItMzEgMTc6MDA6 MDAuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYuMjkuNi5tb2QvZnMveWFmZnMyL3lh ZmZzX3RhZ3Njb21wYXQuaAkyMDA5LTA3LTIxIDExOjI4OjE4LjAwMDAwMDAwMCAtMDcwMApA QCAtMCwwICsxLDM5IEBACisvKgorICogWUFGRlM6IFlldCBhbm90aGVyIEZsYXNoIEZpbGUg U3lzdGVtIC4gQSBOQU5ELWZsYXNoIHNwZWNpZmljIGZpbGUgc3lzdGVtLgorICoKKyAqIENv cHlyaWdodCAoQykgMjAwMi0yMDA3IEFsZXBoIE9uZSBMdGQuCisgKiAgIGZvciBUb2J5IENo dXJjaGlsbCBMdGQgYW5kIEJyaWdodHN0YXIgRW5naW5lZXJpbmcKKyAqCisgKiBDcmVhdGVk IGJ5IENoYXJsZXMgTWFubmluZyA8Y2hhcmxlc0BhbGVwaDEuY28udWs+CisgKgorICogVGhp cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xIGFzCisgKiBwdWJsaXNoZWQgYnkg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBOb3RlOiBPbmx5IFlBRkZT IGhlYWRlcnMgYXJlIExHUEwsIFlBRkZTIEMgY29kZSBpcyBjb3ZlcmVkIGJ5IEdQTC4KKyAq LworCisjaWZuZGVmIF9fWUFGRlNfVEFHU0NPTVBBVF9IX18KKyNkZWZpbmUgX19ZQUZGU19U QUdTQ09NUEFUX0hfXworCisjaW5jbHVkZSAieWFmZnNfZ3V0cy5oIgoraW50IHlhZmZzX1Rh Z3NDb21wYXRhYmlsaXR5V3JpdGVDaHVua1dpdGhUYWdzVG9OQU5EKHlhZmZzX0RldmljZSAq ZGV2LAorCQkJCQkJaW50IGNodW5rSW5OQU5ELAorCQkJCQkJY29uc3QgX191OCAqZGF0YSwK KwkJCQkJCWNvbnN0IHlhZmZzX0V4dGVuZGVkVGFncyAqdGFncyk7CitpbnQgeWFmZnNfVGFn c0NvbXBhdGFiaWxpdHlSZWFkQ2h1bmtXaXRoVGFnc0Zyb21OQU5EKHlhZmZzX0RldmljZSAq ZGV2LAorCQkJCQkJaW50IGNodW5rSW5OQU5ELAorCQkJCQkJX191OCAqZGF0YSwKKwkJCQkJ CXlhZmZzX0V4dGVuZGVkVGFncyAqdGFncyk7CitpbnQgeWFmZnNfVGFnc0NvbXBhdGFiaWxp dHlNYXJrTkFOREJsb2NrQmFkKHN0cnVjdCB5YWZmc19EZXZpY2VTdHJ1Y3QgKmRldiwKKwkJ CQkJICAgIGludCBibG9ja05vKTsKK2ludCB5YWZmc19UYWdzQ29tcGF0YWJpbGl0eVF1ZXJ5 TkFOREJsb2NrKHN0cnVjdCB5YWZmc19EZXZpY2VTdHJ1Y3QgKmRldiwKKwkJCQkJICBpbnQg YmxvY2tObywKKwkJCQkJICB5YWZmc19CbG9ja1N0YXRlICpzdGF0ZSwKKwkJCQkJICBfX3Uz MiAqc2VxdWVuY2VOdW1iZXIpOworCit2b2lkIHlhZmZzX0NhbGNUYWdzRUNDKHlhZmZzX1Rh Z3MgKnRhZ3MpOworaW50IHlhZmZzX0NoZWNrRUNDT25UYWdzKHlhZmZzX1RhZ3MgKnRhZ3Mp OworaW50IHlhZmZzX0NvdW50Qml0cyhfX3U4IGJ5dGUpOworCisjZW5kaWYKZGlmZiAtdSAt LW5ldy1maWxlIC0tcmVjdXJzaXZlIGxpbnV4LTIuNi4yOS42Lm9yaWcvZnMveWFmZnMyL3lh ZmZzX3RhZ3N2YWxpZGl0eS5jIGxpbnV4LTIuNi4yOS42Lm1vZC9mcy95YWZmczIveWFmZnNf dGFnc3ZhbGlkaXR5LmMKLS0tIGxpbnV4LTIuNi4yOS42Lm9yaWcvZnMveWFmZnMyL3lhZmZz X3RhZ3N2YWxpZGl0eS5jCTE5NjktMTItMzEgMTc6MDA6MDAuMDAwMDAwMDAwIC0wNzAwCisr KyBsaW51eC0yLjYuMjkuNi5tb2QvZnMveWFmZnMyL3lhZmZzX3RhZ3N2YWxpZGl0eS5jCTIw MDktMDctMjEgMTE6Mjg6MTguMDAwMDAwMDAwIC0wNzAwCkBAIC0wLDAgKzEsMjggQEAKKy8q CisgKiBZQUZGUzogWWV0IEFub3RoZXIgRmxhc2ggRmlsZSBTeXN0ZW0uIEEgTkFORC1mbGFz aCBzcGVjaWZpYyBmaWxlIHN5c3RlbS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAw NyBBbGVwaCBPbmUgTHRkLgorICogICBmb3IgVG9ieSBDaHVyY2hpbGwgTHRkIGFuZCBCcmln aHRzdGFyIEVuZ2luZWVyaW5nCisgKgorICogQ3JlYXRlZCBieSBDaGFybGVzIE1hbm5pbmcg PGNoYXJsZXNAYWxlcGgxLmNvLnVrPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNp b24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24u CisgKi8KKworI2luY2x1ZGUgInlhZmZzX3RhZ3N2YWxpZGl0eS5oIgorCit2b2lkIHlhZmZz X0luaXRpYWxpc2VUYWdzKHlhZmZzX0V4dGVuZGVkVGFncyAqdGFncykKK3sKKwltZW1zZXQo dGFncywgMCwgc2l6ZW9mKHlhZmZzX0V4dGVuZGVkVGFncykpOworCXRhZ3MtPnZhbGlkTWFy a2VyMCA9IDB4QUFBQUFBQUE7CisJdGFncy0+dmFsaWRNYXJrZXIxID0gMHg1NTU1NTU1NTsK K30KKworaW50IHlhZmZzX1ZhbGlkYXRlVGFncyh5YWZmc19FeHRlbmRlZFRhZ3MgKnRhZ3Mp Cit7CisJcmV0dXJuICh0YWdzLT52YWxpZE1hcmtlcjAgPT0gMHhBQUFBQUFBQSAmJgorCQl0 YWdzLT52YWxpZE1hcmtlcjEgPT0gMHg1NTU1NTU1NSk7CisKK30KZGlmZiAtdSAtLW5ldy1m aWxlIC0tcmVjdXJzaXZlIGxpbnV4LTIuNi4yOS42Lm9yaWcvZnMveWFmZnMyL3lhZmZzX3Rh Z3N2YWxpZGl0eS5oIGxpbnV4LTIuNi4yOS42Lm1vZC9mcy95YWZmczIveWFmZnNfdGFnc3Zh bGlkaXR5LmgKLS0tIGxpbnV4LTIuNi4yOS42Lm9yaWcvZnMveWFmZnMyL3lhZmZzX3RhZ3N2 YWxpZGl0eS5oCTE5NjktMTItMzEgMTc6MDA6MDAuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51 eC0yLjYuMjkuNi5tb2QvZnMveWFmZnMyL3lhZmZzX3RhZ3N2YWxpZGl0eS5oCTIwMDktMDct MjEgMTE6Mjg6MTguMDAwMDAwMDAwIC0wNzAwCkBAIC0wLDAgKzEsMjQgQEAKKy8qCisgKiBZ QUZGUzogWWV0IGFub3RoZXIgRmxhc2ggRmlsZSBTeXN0ZW0gLiBBIE5BTkQtZmxhc2ggc3Bl Y2lmaWMgZmlsZSBzeXN0ZW0uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMDcgQWxl cGggT25lIEx0ZC4KKyAqICAgZm9yIFRvYnkgQ2h1cmNoaWxsIEx0ZCBhbmQgQnJpZ2h0c3Rh ciBFbmdpbmVlcmluZworICoKKyAqIENyZWF0ZWQgYnkgQ2hhcmxlcyBNYW5uaW5nIDxjaGFy bGVzQGFsZXBoMS5jby51az4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVy c2lvbiAyLjEgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uLgorICoKKyAqIE5vdGU6IE9ubHkgWUFGRlMgaGVhZGVycyBhcmUgTEdQTCwgWUFGRlMg QyBjb2RlIGlzIGNvdmVyZWQgYnkgR1BMLgorICovCisKKworI2lmbmRlZiBfX1lBRkZTX1RB R1NfVkFMSURJVFlfSF9fCisjZGVmaW5lIF9fWUFGRlNfVEFHU19WQUxJRElUWV9IX18KKwor I2luY2x1ZGUgInlhZmZzX2d1dHMuaCIKKwordm9pZCB5YWZmc19Jbml0aWFsaXNlVGFncyh5 YWZmc19FeHRlbmRlZFRhZ3MgKnRhZ3MpOworaW50IHlhZmZzX1ZhbGlkYXRlVGFncyh5YWZm c19FeHRlbmRlZFRhZ3MgKnRhZ3MpOworI2VuZGlmCmRpZmYgLXUgLS1uZXctZmlsZSAtLXJl Y3Vyc2l2ZSBsaW51eC0yLjYuMjkuNi5vcmlnL2ZzL3lhZmZzMi95cG9ydGVudi5oIGxpbnV4 LTIuNi4yOS42Lm1vZC9mcy95YWZmczIveXBvcnRlbnYuaAotLS0gbGludXgtMi42LjI5LjYu b3JpZy9mcy95YWZmczIveXBvcnRlbnYuaAkxOTY5LTEyLTMxIDE3OjAwOjAwLjAwMDAwMDAw MCAtMDcwMAorKysgbGludXgtMi42LjI5LjYubW9kL2ZzL3lhZmZzMi95cG9ydGVudi5oCTIw MDktMDctMjEgMTE6Mjg6MTguMDAwMDAwMDAwIC0wNzAwCkBAIC0wLDAgKzEsMjAzIEBACisv KgorICogWUFGRlM6IFlldCBhbm90aGVyIEZsYXNoIEZpbGUgU3lzdGVtIC4gQSBOQU5ELWZs YXNoIHNwZWNpZmljIGZpbGUgc3lzdGVtLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMi0y MDA3IEFsZXBoIE9uZSBMdGQuCisgKiAgIGZvciBUb2J5IENodXJjaGlsbCBMdGQgYW5kIEJy aWdodHN0YXIgRW5naW5lZXJpbmcKKyAqCisgKiBDcmVhdGVkIGJ5IENoYXJsZXMgTWFubmlu ZyA8Y2hhcmxlc0BhbGVwaDEuY28udWs+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIHZlcnNpb24gMi4xIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbi4KKyAqCisgKiBOb3RlOiBPbmx5IFlBRkZTIGhlYWRlcnMgYXJlIExHUEws IFlBRkZTIEMgY29kZSBpcyBjb3ZlcmVkIGJ5IEdQTC4KKyAqLworCisKKyNpZm5kZWYgX19Z UE9SVEVOVl9IX18KKyNkZWZpbmUgX19ZUE9SVEVOVl9IX18KKworLyoKKyAqIERlZmluZSB0 aGUgTVREIHZlcnNpb24gaW4gdGVybXMgb2YgTGludXggS2VybmVsIHZlcnNpb25zCisgKiBU aGlzIGFsbG93cyB5YWZmcyB0byBiZSB1c2VkIGluZGVwZW5kYW50bHkgb2YgdGhlIGtlcm5l bAorICogYXMgd2VsbCBhcyB3aXRoIGl0LgorICovCisKKyNkZWZpbmUgTVREX1ZFUlNJT04o YSwgYiwgYykgKCgoYSkgPDwgMTYpICsgKChiKSA8PCA4KSArIChjKSkKKworI2lmIGRlZmlu ZWQgQ09ORklHX1lBRkZTX1dJTkNFCisKKyNpbmNsdWRlICJ5d2luY2VlbnYuaCIKKworI2Vs aWYgZGVmaW5lZCBfX0tFUk5FTF9fCisKKyNpbmNsdWRlICJtb2R1bGVjb25maWcuaCIKKwor LyogTGludXgga2VybmVsICovCisKKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjZGVm aW5lIE1URF9WRVJTSU9OX0NPREUgTElOVVhfVkVSU0lPTl9DT0RFCisKKyNpZiAoTElOVVhf VkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiwgNiwgMTkpKQorI2luY2x1ZGUgPGxp bnV4L2NvbmZpZy5oPgorI2VuZGlmCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5j bHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUg PGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxs aW51eC92bWFsbG9jLmg+CisKKyNkZWZpbmUgWUNIQVIgY2hhcgorI2RlZmluZSBZVUNIQVIg dW5zaWduZWQgY2hhcgorI2RlZmluZSBfWSh4KSAgICAgeAorI2RlZmluZSB5YWZmc19zdHJj YXQoYSwgYikgICAgIHN0cmNhdChhLCBiKQorI2RlZmluZSB5YWZmc19zdHJjcHkoYSwgYikg ICAgIHN0cmNweShhLCBiKQorI2RlZmluZSB5YWZmc19zdHJuY3B5KGEsIGIsIGMpIHN0cm5j cHkoYSwgYiwgYykKKyNkZWZpbmUgeWFmZnNfc3RybmNtcChhLCBiLCBjKSBzdHJuY21wKGEs IGIsIGMpCisjZGVmaW5lIHlhZmZzX3N0cmxlbihzKQkgICAgICAgc3RybGVuKHMpCisjZGVm aW5lIHlhZmZzX3NwcmludGYJICAgICAgIHNwcmludGYKKyNkZWZpbmUgeWFmZnNfdG91cHBl cihhKSAgICAgICB0b3VwcGVyKGEpCisKKyNkZWZpbmUgWV9JTkxJTkUgaW5saW5lCisKKyNk ZWZpbmUgWUFGRlNfTE9TVE5GT1VORF9OQU1FCQkibG9zdCtmb3VuZCIKKyNkZWZpbmUgWUFG RlNfTE9TVE5GT1VORF9QUkVGSVgJCSJvYmoiCisKKy8qICNkZWZpbmUgWVBSSU5URih4KSBw cmludGsgeCAqLworI2RlZmluZSBZTUFMTE9DKHgpIGttYWxsb2MoeCwgR0ZQX05PRlMpCisj ZGVmaW5lIFlGUkVFKHgpICAga2ZyZWUoeCkKKyNkZWZpbmUgWU1BTExPQ19BTFQoeCkgdm1h bGxvYyh4KQorI2RlZmluZSBZRlJFRV9BTFQoeCkgICB2ZnJlZSh4KQorI2RlZmluZSBZTUFM TE9DX0RNQSh4KSBZTUFMTE9DKHgpCisKKy8qIEtSIC0gYWRkZWQgZm9yIHVzZSBpbiBzY2Fu IHNvIHByb2Nlc3NlcyBhcmVuJ3QgYmxvY2tlZCBpbmRlZmluaXRlbHkuICovCisjZGVmaW5l IFlZSUVMRCgpIHNjaGVkdWxlKCkKKworI2RlZmluZSBZQUZGU19ST09UX01PREUJCQkwNjY2 CisjZGVmaW5lIFlBRkZTX0xPU1RORk9VTkRfTU9ERQkJMDY2NgorCisjaWYgKExJTlVYX1ZF UlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsIDUsIDApKQorI2RlZmluZSBZX0NVUlJF TlRfVElNRSBDVVJSRU5UX1RJTUUudHZfc2VjCisjZGVmaW5lIFlfVElNRV9DT05WRVJUKHgp ICh4KS50dl9zZWMKKyNlbHNlCisjZGVmaW5lIFlfQ1VSUkVOVF9USU1FIENVUlJFTlRfVElN RQorI2RlZmluZSBZX1RJTUVfQ09OVkVSVCh4KSAoeCkKKyNlbmRpZgorCisjZGVmaW5lIHlh ZmZzX1N1bUNvbXBhcmUoeCwgeSkgKCh4KSA9PSAoeSkpCisjZGVmaW5lIHlhZmZzX3N0cmNt cChhLCBiKSBzdHJjbXAoYSwgYikKKworI2RlZmluZSBURU5EU1RSICJcbiIKKyNkZWZpbmUg VFNUUih4KSBLRVJOX1dBUk5JTkcgeAorI2RlZmluZSBUQ09OVCh4KSB4CisjZGVmaW5lIFRP VVQocCkgcHJpbnRrIHAKKworI2RlZmluZSB5YWZmc190cmFjZShtYXNrLCBmbXQsIGFyZ3Mu Li4pIFwKKwlkbyB7IGlmICgobWFzaykgJiAoeWFmZnNfdHJhY2VNYXNrfFlBRkZTX1RSQUNF X0VSUk9SKSkgXAorCQlwcmludGsoS0VSTl9XQVJOSU5HICJ5YWZmczogIiBmbXQsICMjIGFy Z3MpOyBcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBjb21waWxlX3RpbWVfYXNzZXJ0aW9u KGFzc2VydGlvbikgXAorCSh7IGludCB4ID0gX19idWlsdGluX2Nob29zZV9leHByKGFzc2Vy dGlvbiwgMCwgKHZvaWQpMCk7ICh2b2lkKSB4OyB9KQorCisjZWxpZiBkZWZpbmVkIENPTkZJ R19ZQUZGU19ESVJFQ1QKKworI2RlZmluZSBNVERfVkVSU0lPTl9DT0RFIE1URF9WRVJTSU9O KDIsIDYsIDIyKQorCisvKiBEaXJlY3QgaW50ZXJmYWNlICovCisjaW5jbHVkZSAieWRpcmVj dGVudi5oIgorCisjZWxpZiBkZWZpbmVkIENPTkZJR19ZQUZGU19VVElMCisKKy8qIFN0dWZm IGZvciBZQUZGUyB1dGlsaXRpZXMgKi8KKworI2luY2x1ZGUgInN0ZGxpYi5oIgorI2luY2x1 ZGUgInN0ZGlvLmgiCisjaW5jbHVkZSAic3RyaW5nLmgiCisKKyNpbmNsdWRlICJkZXZleHRy YXMuaCIKKworI2RlZmluZSBZTUFMTE9DKHgpIG1hbGxvYyh4KQorI2RlZmluZSBZRlJFRSh4 KSAgIGZyZWUoeCkKKyNkZWZpbmUgWU1BTExPQ19BTFQoeCkgbWFsbG9jKHgpCisjZGVmaW5l IFlGUkVFX0FMVCh4KSBmcmVlKHgpCisKKyNkZWZpbmUgWUNIQVIgY2hhcgorI2RlZmluZSBZ VUNIQVIgdW5zaWduZWQgY2hhcgorI2RlZmluZSBfWSh4KSAgICAgeAorI2RlZmluZSB5YWZm c19zdHJjYXQoYSwgYikgICAgIHN0cmNhdChhLCBiKQorI2RlZmluZSB5YWZmc19zdHJjcHko YSwgYikgICAgIHN0cmNweShhLCBiKQorI2RlZmluZSB5YWZmc19zdHJuY3B5KGEsIGIsIGMp IHN0cm5jcHkoYSwgYiwgYykKKyNkZWZpbmUgeWFmZnNfc3RybGVuKHMpCSAgICAgICBzdHJs ZW4ocykKKyNkZWZpbmUgeWFmZnNfc3ByaW50ZgkgICAgICAgc3ByaW50ZgorI2RlZmluZSB5 YWZmc190b3VwcGVyKGEpICAgICAgIHRvdXBwZXIoYSkKKworI2RlZmluZSBZX0lOTElORSBp bmxpbmUKKworLyogI2RlZmluZSBZSU5GTyhzKSBZUFJJTlRGKCggX19GSUxFX18gIiAlZCAl c1xuIixfX0xJTkVfXyxzKSkgKi8KKy8qICNkZWZpbmUgWUFMRVJUKHMpIFlJTkZPKHMpICov CisKKyNkZWZpbmUgVEVORFNUUiAiXG4iCisjZGVmaW5lIFRTVFIoeCkgeAorI2RlZmluZSBU T1VUKHApIHByaW50ZiBwCisKKyNkZWZpbmUgWUFGRlNfTE9TVE5GT1VORF9OQU1FCQkibG9z dCtmb3VuZCIKKyNkZWZpbmUgWUFGRlNfTE9TVE5GT1VORF9QUkVGSVgJCSJvYmoiCisvKiAj ZGVmaW5lIFlQUklOVEYoeCkgcHJpbnRmIHggKi8KKworI2RlZmluZSBZQUZGU19ST09UX01P REUJCQkJMDY2NgorI2RlZmluZSBZQUZGU19MT1NUTkZPVU5EX01PREUJCTA2NjYKKworI2Rl ZmluZSB5YWZmc19TdW1Db21wYXJlKHgsIHkpICgoeCkgPT0gKHkpKQorI2RlZmluZSB5YWZm c19zdHJjbXAoYSwgYikgc3RyY21wKGEsIGIpCisKKyNlbHNlCisvKiBTaG91bGQgaGF2ZSBz cGVjaWZpZWQgYSBjb25maWd1cmF0aW9uIHR5cGUgKi8KKyNlcnJvciBVbmtub3duIGNvbmZp Z3VyYXRpb24KKworI2VuZGlmCisKKy8qIHNlZSB5YWZmc19mcy5jICovCitleHRlcm4gdW5z aWduZWQgaW50IHlhZmZzX3RyYWNlTWFzazsKK2V4dGVybiB1bnNpZ25lZCBpbnQgeWFmZnNf d3JfYXR0ZW1wdHM7CisKKy8qCisgKiBUcmFjaW5nIGZsYWdzLgorICogVGhlIGZsYWdzIG1h c2tlZCBpbiBZQUZGU19UUkFDRV9BTFdBWVMgYXJlIGFsd2F5cyB0cmFjZWQuCisgKi8KKwor I2RlZmluZSBZQUZGU19UUkFDRV9PUwkJCTB4MDAwMDAwMDIKKyNkZWZpbmUgWUFGRlNfVFJB Q0VfQUxMT0NBVEUJCTB4MDAwMDAwMDQKKyNkZWZpbmUgWUFGRlNfVFJBQ0VfU0NBTgkJMHgw MDAwMDAwOAorI2RlZmluZSBZQUZGU19UUkFDRV9CQURfQkxPQ0tTCQkweDAwMDAwMDEwCisj ZGVmaW5lIFlBRkZTX1RSQUNFX0VSQVNFCQkweDAwMDAwMDIwCisjZGVmaW5lIFlBRkZTX1RS QUNFX0dDCQkJMHgwMDAwMDA0MAorI2RlZmluZSBZQUZGU19UUkFDRV9XUklURQkJMHgwMDAw MDA4MAorI2RlZmluZSBZQUZGU19UUkFDRV9UUkFDSU5HCQkweDAwMDAwMTAwCisjZGVmaW5l IFlBRkZTX1RSQUNFX0RFTEVUSU9OCQkweDAwMDAwMjAwCisjZGVmaW5lIFlBRkZTX1RSQUNF X0JVRkZFUlMJCTB4MDAwMDA0MDAKKyNkZWZpbmUgWUFGRlNfVFJBQ0VfTkFOREFDQ0VTUwkJ MHgwMDAwMDgwMAorI2RlZmluZSBZQUZGU19UUkFDRV9HQ19ERVRBSUwJCTB4MDAwMDEwMDAK KyNkZWZpbmUgWUFGRlNfVFJBQ0VfU0NBTl9ERUJVRwkJMHgwMDAwMjAwMAorI2RlZmluZSBZ QUZGU19UUkFDRV9NVEQJCQkweDAwMDA0MDAwCisjZGVmaW5lIFlBRkZTX1RSQUNFX0NIRUNL UE9JTlQJCTB4MDAwMDgwMDAKKworI2RlZmluZSBZQUZGU19UUkFDRV9WRVJJRlkJCTB4MDAw MTAwMDAKKyNkZWZpbmUgWUFGRlNfVFJBQ0VfVkVSSUZZX05BTkQJCTB4MDAwMjAwMDAKKyNk ZWZpbmUgWUFGRlNfVFJBQ0VfVkVSSUZZX0ZVTEwJCTB4MDAwNDAwMDAKKyNkZWZpbmUgWUFG RlNfVFJBQ0VfVkVSSUZZX0FMTAkJMHgwMDBGMDAwMAorCisKKyNkZWZpbmUgWUFGRlNfVFJB Q0VfRVJST1IJCTB4NDAwMDAwMDAKKyNkZWZpbmUgWUFGRlNfVFJBQ0VfQlVHCQkJMHg4MDAw MDAwMAorI2RlZmluZSBZQUZGU19UUkFDRV9BTFdBWVMJCTB4RjAwMDAwMDAKKworCisjZGVm aW5lIFQobWFzaywgcCkgZG8geyBpZiAoKG1hc2spICYgKHlhZmZzX3RyYWNlTWFzayB8IFlB RkZTX1RSQUNFX0FMV0FZUykpIFRPVVQocCk7IH0gd2hpbGUgKDApCisKKyNpZm5kZWYgWUJV RworI2RlZmluZSBZQlVHKCkgZG8ge1QoWUFGRlNfVFJBQ0VfQlVHLCAoVFNUUigiPT0+PiB5 YWZmcyBidWc6ICIgX19GSUxFX18gIiAlZCIgVEVORFNUUiksIF9fTElORV9fKSk7IH0gd2hp bGUgKDApCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLXUgLS1uZXctZmlsZSAtLXJlY3Vyc2l2 ZSBsaW51eC0yLjYuMjkuNi5vcmlnL2luY2x1ZGUvbGludXgvaTJjLmggbGludXgtMi42LjI5 LjYubW9kL2luY2x1ZGUvbGludXgvaTJjLmgKLS0tIGxpbnV4LTIuNi4yOS42Lm9yaWcvaW5j bHVkZS9saW51eC9pMmMuaAkyMDA5LTA3LTAyIDE2OjQxOjIwLjAwMDAwMDAwMCAtMDcwMAor KysgbGludXgtMi42LjI5LjYubW9kL2luY2x1ZGUvbGludXgvaTJjLmgJMjAwOS0wNy0yMSAx MToyODoxOC4wMDAwMDAwMDAgLTA3MDAKQEAgLTM0LDggKzM0LDEzIEBACiAjaW5jbHVkZSA8 bGludXgvZGV2aWNlLmg+CS8qIGZvciBzdHJ1Y3QgZGV2aWNlICovCiAjaW5jbHVkZSA8bGlu dXgvc2NoZWQuaD4JLyogZm9yIGNvbXBsZXRpb24gKi8KICNpbmNsdWRlIDxsaW51eC9tdXRl eC5oPgorI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+ CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5o PgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIAotZXh0ZXJuIHN0cnVjdCBidXNfdHlwZSBp MmNfYnVzX3R5cGU7CisvLyBleHRlcm4gc3RydWN0IGJ1c190eXBlIGkyY19idXNfdHlwZTsK IAogLyogLS0tIEdlbmVyYWwgb3B0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0JKi8KIApAQCAtNDYsNiArNTEsNyBAQAogc3RydWN0IGky Y19kcml2ZXI7CiB1bmlvbiBpMmNfc21idXNfZGF0YTsKIHN0cnVjdCBpMmNfYm9hcmRfaW5m bzsKK3N0cnVjdCBpMmNfb3BfcV9lbnRyeTsKIAogLyoKICAqIFRoZSBtYXN0ZXIgcm91dGlu ZXMgYXJlIHRoZSBvbmVzIG5vcm1hbGx5IHVzZWQgdG8gdHJhbnNtaXQgZGF0YSB0byBkZXZp Y2VzCkBAIC05NCw2ICsxMDAsMjQgQEAKIAkJCQkJICB1OCBjb21tYW5kLCB1OCBsZW5ndGgs CiAJCQkJCSAgY29uc3QgdTggKnZhbHVlcyk7CiAKKy8qCisgKiBOb24tYmxvY2tpbmcgaW50 ZXJmYWNlLiAgVGhlIHVzZXIgc2hvdWxkIGZpbGwgb3V0IHRoZSBwdWJsaWMKKyAqIHBvcnRp b25zIG9mIHRoZSBlbnRyeSBzdHJ1Y3R1cmUuICBBbGwgZGF0YSBpbiB0aGUgZW50cnkgc3Ry dWN0dXJlCisgKiBzaG91bGQgYmUgZ3VhcmFudGVlZCB0byBiZSBhdmFpbGFibGUgdW50aWwg dGhlIGhhbmRsZXIgY2FsbGJhY2sgaXMKKyAqIGNhbGxlZCB3aXRoIHRoZSBlbnRyeS4KKyAq LworZXh0ZXJuIGludCBpMmNfbm9uX2Jsb2NraW5nX29wKHN0cnVjdCBpMmNfY2xpZW50ICpj bGllbnQsCisJCQkgICAgICAgc3RydWN0IGkyY19vcF9xX2VudHJ5ICplbnRyeSk7CisKKy8q CisgKiBQb2xsIHRoZSBpMmMgaW50ZXJmYWNlLiAgVGhpcyBzaG91bGQgb25seSBiZSBjYWxs ZWQgaW4gYSBzaXR1YXRpb24KKyAqIHdoZXJlIHNjaGVkdWxpbmcgYW5kIGludGVycnVwdHMg YXJlIG9mZi4gIFlvdSBzaG91bGQgcHV0IHRoZSBhbW91bnQKKyAqIG9mIG1pY3Jvc2Vjb25k cyBiZXR3ZWVuIGNhbGxzIGluIHVzX3NpbmNlX2xhc3RfY2FsbC4KKyAqLworZXh0ZXJuIHZv aWQgaTJjX3BvbGwoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJICAgICB1bnNpZ25l ZCBpbnQgdXNfc2luY2VfbGFzdF9jYWxsKTsKKworCiAvKioKICAqIHN0cnVjdCBpMmNfZHJp dmVyIC0gcmVwcmVzZW50IGFuIEkyQyBkZXZpY2UgZHJpdmVyCiAgKiBAaWQ6IFVuaXF1ZSBk cml2ZXIgSUQgKG9wdGlvbmFsKQpAQCAtMzE5LDYgKzM0MywzNyBAQAogI2VuZGlmCiAKIC8q CisgKiBBYm91dCBsb2NraW5nIGFuZCB0aGUgbm9uLWJsb2NraW5nIGludGVyZmFjZS4KKyAq CisgKiBUaGUgcG9sbCBvcGVyYXRpb25zIGFyZSBjYWxsZWQgc2luZ2xlLXRocmVhZGVkIChh bG9uZyB3aXRoIHRoZQorICogeHh4X3N0YXJ0IG9wZXJhdGlvbnMpLCBzbyBpZiB0aGUgZHJp dmVyIGlzIG9ubHkgcG9sbGVkIHRoZW4gdGhlcmUKKyAqIGlzIG5vIG5lZWQgdG8gZG8gYW55 IGxvY2tpbmcuICBJZiB5b3UgYXJlIHVzaW5nIGludGVycnVwdHMsIHRoZW4KKyAqIHRoZSB0 aW1lciBvcGVyYXRpb25zIGFuZCBpbnRlcnJ1cHRzIGNhbiByYWNlIGFuZCB5b3UgbmVlZCB0 byBsb2NrCisgKiBhcHByb3ByaWF0ZWx5LgorICoKKyAqIGkyY19vcF9kb25lKCkgY2FuIGJl IGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBvbiB0aGUgc2FtZSBlbnRyeSAoYXMKKyAqIGxvbmcg YXMgZWFjaCBvbmUgaGFzIGEgZ2V0IG9wZXJhdGlvbikuICBUaGlzIGhhbmRsZXMgcG9sbCBh bmQKKyAqIGludGVycnVwdCByYWNlcyBjYWxsaW5nIGkyY19vcF9kb25lKCkuICBJdCB3aWxs IGRvIHRoZSByaWdodCB0aGluZy4KKyAqLworCisvKgorICogQ2FsbGVkIGZyb20gYW4gbm9u LWJsb2NraW5nIGludGVyZmFjZSB0byBnZXQgdGhlIGN1cnJlbnQgd29ya2luZworICogZW50 cnkuICBSZXR1cm5zIE5VTEwgaWYgdGhlcmUgaXMgbm9uZS4gIFRoaXMgaXMgcHJpbWFyaWx5 IGZvcgorICogaW50ZXJydXB0IGhhbmRsZXJzIHRvIGRldGVybWluZSB3aGF0IHRoZXkgc2hv dWxkIGJlIHdvcmtpbmcgb24uCisgKiBOb3RlIHRoYXQgaWYgeW91IGNhbGwgaTJjX2VudHJ5 X2dldCgpIGFuZCBnZXQgYSBub24tbnVsbCBlbnRyeSwgeW91CisgKiBtdXN0IGNhbGwgaTJj X2VudHJ5X3B1dCgpIG9uIGl0LgorICovCitzdHJ1Y3QgaTJjX29wX3FfZW50cnkgKmkyY19l bnRyeV9nZXQoc3RydWN0IGkyY19hZGFwdGVyICphZGFwKTsKK3ZvaWQgaTJjX2VudHJ5X3B1 dChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsCisJCSAgIHN0cnVjdCBpMmNfb3BfcV9lbnRy eSAqZW50cnkpOworCisvKgorICogQ2FsbGVkIGZyb20gYW4gbm9uLWJsb2NraW5nIGludGVy ZmFjZSB0byByZXBvcnQgdGhhdCBhbiBvcGVyYXRpb24KKyAqIGhhcyBjb21wbGV0ZWQuICBD YW4gYmUgY2FsbGVkIGZyb20gaW50ZXJydXB0IGNvbnRleHQuCisgKi8KK3ZvaWQgaTJjX29w X2RvbmUoc3RydWN0IGkyY19hZGFwdGVyICphZGFwLCBzdHJ1Y3QgaTJjX29wX3FfZW50cnkg KmVudHJ5KTsKKworLyoKICAqIFRoZSBmb2xsb3dpbmcgc3RydWN0cyBhcmUgZm9yIHRob3Nl IHdobyBsaWtlIHRvIGltcGxlbWVudCBuZXcgYnVzIGRyaXZlcnM6CiAgKiBpMmNfYWxnb3Jp dGhtIGlzIHRoZSBpbnRlcmZhY2UgdG8gYSBjbGFzcyBvZiBoYXJkd2FyZSBzb2x1dGlvbnMg d2hpY2ggY2FuCiAgKiBiZSBhZGRyZXNzZWQgdXNpbmcgdGhlIHNhbWUgYnVzIGFsZ29yaXRo bXMgLSBpLmUuIGJpdC1iYW5naW5nIG9yIHRoZSBQQ0Y4NTg0CkBAIC0zMzcsMTEgKzM5Miw1 NCBAQAogCQkJICAgdW5zaWduZWQgc2hvcnQgZmxhZ3MsIGNoYXIgcmVhZF93cml0ZSwKIAkJ CSAgIHU4IGNvbW1hbmQsIGludCBzaXplLCB1bmlvbiBpMmNfc21idXNfZGF0YSAqZGF0YSk7 CiAKKwkvKgorCSAqIFRoZXNlIGFyZSBsaWtlIHRoZSBwcmV2aW91cyBjYWxscywgYnV0IHRo ZXkgd2lsbCBvbmx5IHN0YXJ0CisJICogdGhlIG9wZXJhdGlvbi4gIFRoZSBwb2xsIGNhbGwg d2lsbCBiZSBjYWxsZWQgcGVyaW9kaWNhbGx5CisJICogdG8gZHJpdmUgdGhlIG9wZXJhdGlv biBvZiB0aGUgYnVzLiAgRWFjaCBvZiB0aGVzZSBjYWxscworCSAqIHNob3VsZCBzZXQgdGhl IHJlc3VsdCBvbiBhbiBlcnJvciwgYW5kIHNldCB0aGUgdGltZW91dCBhcworCSAqIG5lY2Vz c2FyeS4gIE5vdGUgdGhhdCBldmVuIGludGVycnVwdCBkcml2ZW4gZHJpdmVycyBuZWVkIHRv CisJICogcG9sbCBzbyB0aGV5IGNhbiB0aW1lIG91dCBvcGVyYXRpb25zLiAgTm90ZSB0aGF0 IGFsbCB0aGUKKwkgKiBkYXRhIHN0cnVjdHVyZXMgcGFzc2VkIGluIGFyZSBndWFyYW50ZWVk IHRvIGJlIGtlcHQgYXJvdW5kCisJICogdW50aWwgdGhlIG9wZXJhdGlvbiBjb21wbGV0ZXMu ICBUaGVzZSBtYXkgYmUgY2FsbGVkIGZyb20KKwkgKiBpbnRlcnJ1cHQgY29udGV4dC4gIElm IHRoZSBzdGFydCBvcGVyYXRpb24gZmFpbHMsIHRoZXNlCisJICogc2hvdWxkIHJldHVybiBh biBlcnJvci4gIFRoZXkgYXJlIGNhbGxlZCB3aXRoIHRoZSBxdWV1ZSBsb2NrCisJICogaGVs ZCwgc28gdGhleSBzaG91bGQgbm90IGNhbGwgaTJjX29wX2RvbmUoKS4KKwkgKi8KKwlpbnQg KCptYXN0ZXJfc3RhcnQpKHN0cnVjdCBpMmNfYWRhcHRlciAgICAqYWRhcCwKKwkJCSAgICBz dHJ1Y3QgaTJjX29wX3FfZW50cnkgKmVudHJ5KTsKKwlpbnQgKCpzbWJ1c19zdGFydCkoc3Ry dWN0IGkyY19hZGFwdGVyICAgICphZGFwLAorCQkJICAgc3RydWN0IGkyY19vcF9xX2VudHJ5 ICplbnRyeSk7CisJLyoKKwkgKiB1c19zaW5jZV9sYXN0X3BvbGwgaXMgdGhlIGFtb3VudCBv ZiB0aW1lIHNpbmNlIHRoZSBsYXN0CisJICogdGltZSBwb2xsIHdhcyBjYWxsZWQuIE5vdGUg dGhhdCB0aGlzIG1heSBiZSAqbGVzcyogdGhhbiB0aGUKKwkgKiB0aW1lIHlvdSByZXF1ZXN0 ZWQsIHNvIGFsd2F5cyB1c2UgdGhpcyBudW1iZXIgYW5kIGRvbid0CisJICogYXNzdW1lIGl0 J3MgdGhlIG9uZSB5b3UgZ2F2ZSBpdC4gIFRoaXMgdGltZSBpcyBhcHByb3hpbWF0ZQorCSAq IGFuZCBpcyBvbmx5IGd1YXJhbnRlZWQgdG8gYmUgPj0gdGhlIHRpbWUgc2luY2UgdGhlIGxh c3QKKwkgKiBwb2xsLiAgVGhlIHZhbHVlIG1heSBiZSB6ZXJvLgorCSAqLworCXZvaWQgKCpw b2xsKShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsCisJCSAgICAgc3RydWN0IGkyY19vcF9x X2VudHJ5ICplbnRyeSwKKwkJICAgICB1bnNpZ25lZCBpbnQgdXNfc2luY2VfbGFzdF9wb2xs KTsKKwogCS8qIFRvIGRldGVybWluZSB3aGF0IHRoZSBhZGFwdGVyIHN1cHBvcnRzICovCiAJ dTMyICgqZnVuY3Rpb25hbGl0eSkgKHN0cnVjdCBpMmNfYWRhcHRlciAqKTsKIH07CiAKIC8q CisgKiBUaGUgdGltZXIgaGFzIGl0J3Mgb3duIHNlcGFyYXRlbHkgYWxsb2NhdGVkIGRhdGEg c3RydWN0dXJlIGJlY2F1c2UKKyAqIGl0IG5lZWRzIHRvIGJlIGFibGUgdG8gZXhpc3QgZXZl biBpZiB0aGUgYWRhcHRlciBpcyBkZWxldGVkIChkdWUgdG8KKyAqIHRpbWVyIGNhbmNlbGxh dGlvbiByYWNlcykuCisgKi8KK3N0cnVjdCBpMmNfdGltZXIgeworCXNwaW5sb2NrX3QgbG9j azsKKwljaGFyIGRlbGV0ZWQ7CisJY2hhciBydW5uaW5nOworCXN0cnVjdCB0aW1lcl9saXN0 IHRpbWVyOworCXVuc2lnbmVkIGludCBuZXh0X2NhbGxfdGltZTsKKwlzdHJ1Y3QgaTJjX2Fk YXB0ZXIgKmFkYXB0ZXI7Cit9OworCisvKgogICogaTJjX2FkYXB0ZXIgaXMgdGhlIHN0cnVj dHVyZSB1c2VkIHRvIGlkZW50aWZ5IGEgcGh5c2ljYWwgaTJjIGJ1cyBhbG9uZwogICogd2l0 aCB0aGUgYWNjZXNzIGFsZ29yaXRobXMgbmVjZXNzYXJ5IHRvIGFjY2VzcyBpdC4KICAqLwpA QCAtMzYxLDYgKzQ1OSwxNCBAQAogCXN0cnVjdCBtdXRleCBidXNfbG9jazsKIAlzdHJ1Y3Qg bXV0ZXggY2xpc3RfbG9jazsKIAorCXN0cnVjdCBsaXN0X2hlYWQgcTsKKyAJc3BpbmxvY2tf dCBxX2xvY2s7CisKKyAJLyoKKyAJICogVXNlZCB0byB0aW1lIG5vbi1ibG9ja2luZyBvcGVy YXRpb25zLgorIAkgKi8KKyAJc3RydWN0IGkyY190aW1lciAqdGltZXI7CisKIAlpbnQgdGlt ZW91dDsJCQkvKiBpbiBqaWZmaWVzICovCiAJaW50IHJldHJpZXM7CiAJc3RydWN0IGRldmlj ZSBkZXY7CQkvKiB0aGUgYWRhcHRlciBkZXZpY2UgKi8KQEAgLTQ3MSw2ICs1NzcsMTEgQEAK IHsKIAlyZXR1cm4gYWRhcC0+bnI7CiB9CisKK3N0YXRpYyBpbmxpbmUgaW50IGkyY19ub25f YmxvY2tpbmdfY2FwYWJsZShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXApCit7CisJcmV0dXJu IGFkYXAtPmFsZ28tPnBvbGwgIT0gTlVMTDsKK30KICNlbmRpZiAvKiBfX0tFUk5FTF9fICov CiAKIC8qKgpAQCAtNTQyLDYgKzY1Myw4IEBACiAjZGVmaW5lIEkyQ19GVU5DX1NNQlVTX1dS SVRFX0JMT0NLX0RBVEEgMHgwMjAwMDAwMAogI2RlZmluZSBJMkNfRlVOQ19TTUJVU19SRUFE X0kyQ19CTE9DSwkweDA0MDAwMDAwIC8qIEkyQy1saWtlIGJsb2NrIHhmZXIgICovCiAjZGVm aW5lIEkyQ19GVU5DX1NNQlVTX1dSSVRFX0kyQ19CTE9DSwkweDA4MDAwMDAwIC8qIHcvIDEt Ynl0ZSByZWcuIGFkZHIuICovCisjZGVmaW5lIEkyQ19GVU5DX1NNQlVTX1JFQURfSTJDX0JM T0NLXzIgIDB4MTAwMDAwMDAgLyogSTJDLWxpa2UgYmxvY2sgeGZlciAgKi8KKyNkZWZpbmUg STJDX0ZVTkNfU01CVVNfV1JJVEVfSTJDX0JMT0NLXzIgMHgyMDAwMDAwMCAvKiB3LyAyLWJ5 dGUgcmVnLiBhZGRyLiAqLwogCiAjZGVmaW5lIEkyQ19GVU5DX1NNQlVTX0JZVEUJCShJMkNf RlVOQ19TTUJVU19SRUFEX0JZVEUgfCBcCiAJCQkJCSBJMkNfRlVOQ19TTUJVU19XUklURV9C WVRFKQpAQCAtNTkzLDYgKzcwNiwxMTcgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAorLyoK KyAqIEhvbGQgYW4gSTJDIG9wZXJhdGlvbiB0byBwZXJmb3JtLCBhbmQgdXNlZCB0byBwYXNz IGRhdGEgYXJvdW5kLgorICovCisjZGVmaW5lIEkyQ19PUF9JMkMJMAorI2RlZmluZSBJMkNf T1BfU01CVVMJMQordHlwZWRlZiB2b2lkICgqaTJjX29wX2RvbmVfY2IpKHN0cnVjdCBpMmNf b3BfcV9lbnRyeSAqZW50cnkpOworc3RydWN0IGkyY19vcF9xX2VudHJ5IHsKKwkvKgorCSAq IFRoZSByZXN1bHQgd2lsbCBiZSBzZXQgdG8gdGhlIHJlc3VsdCBvZiB0aGUgb3BlcmF0aW9u IHdoZW4KKwkgKiBpdCBjb21wbGV0ZXMuCisJICovCisJczMyIHJlc3VsdDsKKworCS8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKi8KKwkvKgorCSAqIFB1YmxpYyBpbnRlcmZhY2UuICBUaGUgdXNlciBzaG91bGQgc2V0 IHRoZXNlIHVwIChhbmQgdGhlCisJICogcHJvcGVyIHN0cnVjdHVyZSBiZWxvdykuCisJICov CisKKwkvKgorCSAqIFNldCB0byBJMkNfT1BfSTJDIG9yIEkyQ19PUF9TTUJVUyBkZXBlbmRp bmcgb24gdGhlIHRyYW5zZmVyIHR5cGUuCisJICovCisJaW50ICAgICAgICAgICAgeGZlcl90 eXBlOworCisJLyoKKwkgKiBIYW5kbGVyIG1heSBiZSBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQg Y29udGV4dCwgc28gYmUKKwkgKiBjYXJlZnVsLgorCSAqLworCWkyY19vcF9kb25lX2NiIGhh bmRsZXI7CisJdm9pZCAgICAgICAgICAgKmhhbmRsZXJfZGF0YTsKKworCS8qCisJICogU2V0 IHVwIHRoZSBpMmMgb3Igc21idXMgc3RydWN0dXJlLCBkZXBlbmRpbmcgb24gdGhlIHRyYW5z ZmVyCisJICogdHlwZS4KKwkgKgorCSAqIE5vdGUgdGhhdCBpMmMgYW5kIHNtYnVzIGFyZSBu b3QgaW4gYSB1bmlvbiBiZWNhdXNlIGFuIHNtYnVzCisJICogb3BlcmF0aW9uIG1heSBiZSBj b252ZXJ0ZWQgaW50byBhbiBpMmMgb3BlcmF0aW9uICh0aHVzIGJvdGgKKwkgKiBzdHJ1Y3R1 cmVzIHdpbGwgYmUgdXNlZCkuICBUaGUgZGF0YSBpbiB0aGVzZSBtYXkgYmUgY2hhbmdlZAor CSAqIGJ5IHRoZSBkcml2ZXIuCisJICovCisJc3RydWN0IHsKKwkJc3RydWN0IGkyY19tc2cg Km1zZ3M7CisJCWludCBudW07CisJfSBpMmM7CisJc3RydWN0IHsKKwkJLyoKKwkJICogQWRk ciBhbmQgZmxhZ3MgYXJlIGZpbGxlZCBpbiBieSB0aGUgbm9uLWJsb2NraW5nCisJCSAqIHNl bmQgcm91dGluZSB0aGF0IHRha2VzIGEgY2xpZW50LgorCQkgKi8KKwkJdTE2IGFkZHI7CisJ CXVuc2lnbmVkIHNob3J0IGZsYWdzOworCisJCWNoYXIgcmVhZF93cml0ZTsKKwkJdTggY29t bWFuZDsKKworCQkvKgorCQkgKiBOb3RlIHRoYXQgdGhlIHNpemUgaXMgKm5vdCogdGhlIGxl bmd0aCBvZiB0aGUgZGF0YS4KKwkJICogSXQgaXMgdGhlIHRyYW5zYWN0aW9uIHR5cGUsIGxp a2UgSTJDX1NNQlVTX1FVSUNLCisJCSAqIGFuZCB0aGUgb25lcyBhZnRlciB0aGF0IGJlbG93 LiAgSWYgdGhpcyBpcyBhIGJsb2NrCisJCSAqIHRyYW5zYWN0aW9uLCB0aGUgbGVuZ3RoIG9m IHRoZSByZXN0IG9mIHRoZSBkYXRhIGlzCisJCSAqIGluIHRoZSBmaXJzdCBieXRlIG9mIHRo ZSBkYXRhLCBmb3IgYm90aCB0cmFuc21pdAorCQkgKiBhbmQgcmVjZWl2ZS4KKwkJICovCisJ CWludCBzaXplOworCQl1bmlvbiBpMmNfc21idXNfZGF0YSAqZGF0YTsKKwl9IHNtYnVzOwor CisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqLworCS8qIEJ1cyBJbnRlcmZhY2UgKi8KKwkvKgorCSAqIFRoZSBidXMg aW50ZXJmYWNlIG11c3Qgc2V0IGNhbGxfYWdhaW5fdXMgdG8gdGhlIHRpbWUgaW4KKwkgKiBt aWNyb3NlY29uZHMgdW50aWwgdGhlIG5leHQgcG9sbCBvcGVyYXRpb24gc2hvdWxkIGJlCisJ ICogY2FsbGVkLiAgVGhpcyAqbXVzdCogYmUgc2V0IGluIHRoZSBzdGFydCBvcGVyYXRpb24K KwkgKiBmdW5jdGlvbi4gIFRoZSB2YWx1ZSBtYXkgYmUgY2hhbmdlZCBpbiBwb2xsIGNhbGxz IGlmIHRoZQorCSAqIGJ1cyBpbnRlcmZhY2UgbmVlZHMgZGlmZmVyZW50IHRpbWVvdXRzIGF0 IGRpZmZlcmVudCB0aW1lcy4KKwkgKiBUaGUgdGltZV9sZWZ0IGFuZCBkYXRhIGNhbiBiZSB1 c2VkIGZvciBhbnl0aGluZyB0aGUgYnVzCisJICogaW50ZXJmYWNlIGxpa2VzLiAgZGF0YSB3 aWxsIGJlIHNldCB0byBOVUxMIGJlZm9yZSBiZWluZworCSAqIHN0YXJ0ZWQ7IHRoZSBidXMg aW50ZXJmYWNlIG11c3QgdXNlIHRoYXQgdG8gdGVsbCBpZiB0aGUKKwkgKiBlbnRyeSBoYXMg YmVlbiBzZXQgdXAuICBJdCBzaG91bGQgaWdub3JlIHBvbGwgb3BlcmF0aW9ucyBvbgorCSAq IGVudHJpZXMgdGhhdCBhcmUgbm90IHlldCBzZXQgdXAuCisJICovCisJdW5zaWduZWQgaW50 ICBjYWxsX2FnYWluX3VzOworCWxvbmcgICAgICAgICAgdGltZV9sZWZ0OworCXZvaWQJICAg ICAgKmRhdGE7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiovCisJLyogSW50ZXJuYWxzICovCisJc3RydWN0IGNv bXBsZXRpb24gKnN0YXJ0OworCXVuc2lnbmVkIGNoYXIgICAgIHVzZV90aW1lcjsKKyNkZWZp bmUgSTJDX09QX1FVRVVFRAkJMAorI2RlZmluZSBJMkNfT1BfSU5JVElBTElaRUQJMQorI2Rl ZmluZSBJMkNfT1BfRklOSVNIRUQJCTIKKwl1bnNpZ25lZCBjaGFyCSAgc3RhdGU7CisJdTgg ICAgICAgICAgICAgICAgcGVjOworCXU4ICAgICAgICAgICAgICAgIHBhcnRpYWxfcGVjOwor CXZvaWQgKCpjb21wbGV0ZSkoc3RydWN0IGkyY19hZGFwdGVyICAgICphZGFwLAorCQkJIHN0 cnVjdCBpMmNfb3BfcV9lbnRyeSAqZW50cnkpOworCisJc3RydWN0IGxpc3RfaGVhZCBsaW5r OworCXN0cnVjdCBrcmVmIHVzZWNvdW50OworCisJLyoKKwkgKiBUaGVzZSBhcmUgaGVyZSBm b3IgU01CdXMgZW11bGF0aW9uIG92ZXIgSTJDLiAgSSBkb24ndCBsaWtlCisJICogdGhlbSB0 YWtpbmcgdGhpcyBtdWNoIHJvb20gaW4gdGhlIGRhdGEgc3RydWN0dXJlLCBidXQgdGhleQor CSAqIG5lZWQgdG8gYmUgYXZhaWxhYmxlIGluIHRoaXMgY2FzZS4KKwkgKi8KKwl1bnNpZ25l ZCBjaGFyIG1zZ2J1ZjBbSTJDX1NNQlVTX0JMT0NLX01BWCArIDNdOworCXVuc2lnbmVkIGNo YXIgbXNnYnVmMVtJMkNfU01CVVNfQkxPQ0tfTUFYICsgMl07CisJc3RydWN0IGkyY19tc2cg bXNnWzJdOworfTsKKwogLyogVGhlc2UgZGVmaW5lcyBhcmUgdXNlZCBmb3IgcHJvYmluZyBp MmMgY2xpZW50IGFkZHJlc3NlcyAqLwogLyogVGhlIGxlbmd0aCBvZiB0aGUgb3B0aW9uIGxp c3RzICovCiAjZGVmaW5lIEkyQ19DTElFTlRfTUFYX09QVFMgNDgKZGlmZiAtdSAtLW5ldy1m aWxlIC0tcmVjdXJzaXZlIGxpbnV4LTIuNi4yOS42Lm9yaWcvaW5jbHVkZS9saW51eC9pcG1p LmggbGludXgtMi42LjI5LjYubW9kL2luY2x1ZGUvbGludXgvaXBtaS5oCi0tLSBsaW51eC0y LjYuMjkuNi5vcmlnL2luY2x1ZGUvbGludXgvaXBtaS5oCTIwMDktMDctMDIgMTY6NDE6MjAu MDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYuMjkuNi5tb2QvaW5jbHVkZS9saW51eC9p cG1pLmgJMjAwOS0wNy0yMSAxMToyODoxOC4wMDAwMDAwMDAgLTA3MDAKQEAgLTE5OCw2ICsx OTgsOCBAQAogCQkJCQkgICAgICByZXNwb25zZS4gIFdoZW4geW91IHNlbmQgYQogCQkJCQkg ICAgICByZXNwb25zZSBtZXNzYWdlLCB0aGlzIHdpbGwKIAkJCQkJICAgICAgYmUgcmV0dXJu ZWQuICovCisjZGVmaW5lIElQTUlfT0VNX1JFQ1ZfVFlQRQkJNSAvKiBUaGUgcmVzcG9uc2Ug Zm9yIE9FTSBDaGFubmVscyAqLworCiAvKiBOb3RlIHRoYXQgYXN5bmMgZXZlbnRzIGFuZCBy ZWNlaXZlZCBjb21tYW5kcyBkbyBub3QgaGF2ZSBhIGNvbXBsZXRpb24KICAgIGNvZGUgYXMg dGhlIGZpcnN0IGJ5dGUgb2YgdGhlIGluY29taW5nIGRhdGEsIHVubGlrZSBhIHJlc3BvbnNl LiAqLwogCkBAIC0yNjIsNiArMjY0LDcgQEAKIH07CiAKIC8qIEFsbG9jYXRlIGFuZCBmcmVl IHRoZSByZWNlaXZlIG1lc3NhZ2UuICovCitzdHJ1Y3QgaXBtaV9yZWN2X21zZyAqaXBtaV9h bGxvY19yZWN2X21zZyh2b2lkKTsKIHZvaWQgaXBtaV9mcmVlX3JlY3ZfbXNnKHN0cnVjdCBp cG1pX3JlY3ZfbXNnICptc2cpOwogCiBzdHJ1Y3QgaXBtaV91c2VyX2huZGwgewpAQCAtMzU3 LDYgKzM2MCwxOCBAQAogCQkJICAgICBpbnQgICAgICAgICAgICAgICAgICBwcmlvcml0eSk7 CiAKIC8qCisgKiBMaWtlIGlwbWlfcmVxdWVzdCwgYnV0IGxldHMgeW91IHNwZWNpZnkgdGhl IHNsYXZlIHJldHVybiBhZGRyZXNzLgorICovCitpbnQgaXBtaV9yZXF1ZXN0X3dpdGhfc291 cmNlKGlwbWlfdXNlcl90ICAgICAgdXNlciwKKwkJCSAgICAgc3RydWN0IGlwbWlfYWRkciAq YWRkciwKKwkJCSAgICAgbG9uZyAgICAgICAgICAgICBtc2dpZCwKKwkJCSAgICAgc3RydWN0 IGtlcm5lbF9pcG1pX21zZyAgKm1zZywKKwkJCSAgICAgdm9pZCAgICAgICAgICAgICAqdXNl cl9tc2dfZGF0YSwKKwkJCSAgICAgaW50ICAgICAgICAgICAgICBwcmlvcml0eSwKKwkJCSAg ICAgdW5zaWduZWQgY2hhciAgICBzb3VyY2VfYWRkcmVzcywKKwkJCSAgICAgdW5zaWduZWQg Y2hhciAgICBzb3VyY2VfbHVuKTsKKworLyoKICAqIFBvbGwgdGhlIElQTUkgaW50ZXJmYWNl IGZvciB0aGUgdXNlci4gIFRoaXMgY2F1c2VzIHRoZSBJUE1JIGNvZGUgdG8KICAqIGRvIGFu IGltbWVkaWF0ZSBjaGVjayBmb3IgaW5mb3JtYXRpb24gZnJvbSB0aGUgZHJpdmVyIGFuZCBo YW5kbGUKICAqIGFueXRoaW5nIHRoYXQgaXMgaW1tZWRpYXRlbHkgcGVuZGluZy4gIFRoaXMg d2lsbCBub3QgYmxvY2sgaW4gYW55CkBAIC0zNjYsNiArMzgxLDE2IEBACiB2b2lkIGlwbWlf cG9sbF9pbnRlcmZhY2UoaXBtaV91c2VyX3QgdXNlcik7CiAKIC8qCisgKiBSZWdpc3RlciB0 aGUgZ2l2ZW4gdXNlciB0byBoYW5kbGUgYWxsIHJlY2VpdmVkIElQTUkgY29tbWFuZHMuICBU aGlzCisgKiB3aWxsIGZhaWwgaWYgYW55b25lIGlzIHJlZ2lzdGVyZWQgYXMgYSBjb21tYW5k IHJlY2VpdmVyIG9yIGlmCisgKiBhbm90aGVyIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCB0byBy ZWNlaXZlIGFsbCBjb21tYW5kcy4gIE5PVEUgVEhBVAorICogVEhJUyBJUyBGT1IgRU1VTEFU SU9OIFVTRVJTIE9OTFksIERPIE5PVCBVU0VSIFRISVMgRk9SIE5PUk1BTAorICogU1RVRkYu CisgKi8KK2ludCBpcG1pX3JlZ2lzdGVyX2FsbF9jbWRfcmN2cihpcG1pX3VzZXJfdCB1c2Vy KTsKK2ludCBpcG1pX3VucmVnaXN0ZXJfYWxsX2NtZF9yY3ZyKGlwbWlfdXNlcl90IHVzZXIp OworCisvKgogICogV2hlbiBjb21tYW5kcyBjb21lIGluIHRvIHRoZSBTTVMsIHRoZSB1c2Vy IGNhbiByZWdpc3RlciB0byByZWNlaXZlCiAgKiB0aGVtLiAgT25seSBvbmUgdXNlciBjYW4g YmUgbGlzdGVuaW5nIG9uIGEgc3BlY2lmaWMgbmV0Zm4vY21kL2NoYW4gdHVwbGUKICAqIGF0 IGEgdGltZSwgeW91IHdpbGwgZ2V0IGFuIEVCVVNZIGVycm9yIGlmIHRoZSBjb21tYW5kIGlz IGFscmVhZHkKQEAgLTQ1Miw2ICs0NzcsOSBAQAogLyogVmFsaWRhdGUgdGhhdCB0aGUgZ2l2 ZW4gSVBNSSBhZGRyZXNzIGlzIHZhbGlkLiAqLwogaW50IGlwbWlfdmFsaWRhdGVfYWRkcihz dHJ1Y3QgaXBtaV9hZGRyICphZGRyLCBpbnQgbGVuKTsKIAorLyogUmV0dXJuIDEgaWYgdGhl IGdpdmVuIGFkZHJlc3NlcyBhcmUgZXF1YWwsIDAgaWYgbm90LiAqLworaW50IGlwbWlfYWRk cl9lcXVhbChzdHJ1Y3QgaXBtaV9hZGRyICphZGRyMSwgc3RydWN0IGlwbWlfYWRkciAqYWRk cjIpOworCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCiAKZGlmZiAtdSAtLW5ldy1maWxl IC0tcmVjdXJzaXZlIGxpbnV4LTIuNi4yOS42Lm9yaWcvaW5jbHVkZS9saW51eC9pcG1pX2lt Yi5oIGxpbnV4LTIuNi4yOS42Lm1vZC9pbmNsdWRlL2xpbnV4L2lwbWlfaW1iLmgKLS0tIGxp bnV4LTIuNi4yOS42Lm9yaWcvaW5jbHVkZS9saW51eC9pcG1pX2ltYi5oCTE5NjktMTItMzEg MTc6MDA6MDAuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYuMjkuNi5tb2QvaW5jbHVk ZS9saW51eC9pcG1pX2ltYi5oCTIwMDktMDctMjEgMTE6Mjg6MTguMDAwMDAwMDAwIC0wNzAw CkBAIC0wLDAgKzEsMTQ2IEBACisvKgorICogaXBtaV9pbWIuaAorICoKKyAqIEludGVscyBJ TUIgZW11bGF0aW9uIG9uIHRoZSBNb250YVZpc3RhIElQTUkgaW50ZXJmYWNlCisgKgorICog QXV0aG9yOiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKiAgICAgICAgIENvcmV5IE1p bnlhcmQgPG1pbnlhcmRAbXZpc3RhLmNvbT4KKyAqICAgICAgICAgc291cmNlQG12aXN0YS5j b20KKyAqCisgKiBDb3B5cmlnaHQgMjAwMiBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KKyAq CisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us IG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKgor ICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVT UyBPUiBJTVBMSUVECisgKiAgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqICBNRVJDSEFOVEFCSUxJVFkg QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgor ICogIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElS RUNULCBJTkRJUkVDVCwKKyAqICBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogIEJVVCBOT1QgTElNSVRF RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T UworICogIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IKKyAqICBUT1JU IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB WSBPVVQgT0YgVEhFCisgKiAgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogIFlvdSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGFsb25nCisgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqICA2NzUgTWFzcyBBdmUsIENh bWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmIF9fTElOVVhfSVBNSV9J TUJfSAorI2RlZmluZSBfX0xJTlVYX0lQTUlfSU1CX0gKKwordHlwZWRlZiBzdHJ1Y3Qgb3Zl cmxhcHBlZF9zIHsKKyAgICB1bnNpZ25lZCBsb25nIEludGVybmFsOworICAgIHVuc2lnbmVk IGxvbmcgSW50ZXJuYWxIaWdoOworICAgIHVuc2lnbmVkIGxvbmcgT2Zmc2V0OworICAgIHVu c2lnbmVkIGxvbmcgT2Zmc2V0SGlnaDsKK30gb3ZlcmxhcHBlZF90OworCitzdHJ1Y3Qgc21p IHsKKyAgICB1bnNpZ25lZCBsb25nIHNtaV9WZXJzaW9uTm87CisgICAgdW5zaWduZWQgbG9u ZyBzbWlfUmVzZXJ2ZWQxOworICAgIHVuc2lnbmVkIGxvbmcgc21pX1Jlc2VydmVkMjsKKyAg ICB2b2lkICAgICAgICAgICpudHN0YXR1czsJICAgICAgLyogYWRkcmVzcyBvZiBOVCBzdGF0 dXMgYmxvY2sqLworICAgIHZvaWQgICAgICAgICAgKmxwdkluQnVmZmVyOyAgICAgICAvKiBh ZGRyZXNzIG9mIGJ1ZmZlciBmb3IgaW5wdXQgZGF0YSovCisgICAgdW5zaWduZWQgbG9uZyBj YkluQnVmZmVyOyAgICAgICAgIC8qIHNpemUgb2YgaW5wdXQgYnVmZmVyKi8KKyAgICB2b2lk ICAgICAgICAgICpscHZPdXRCdWZmZXI7ICAgICAgLyogYWRkcmVzcyBvZiBvdXRwdXQgYnVm ZmVyKi8KKyAgICB1bnNpZ25lZCBsb25nIGNiT3V0QnVmZmVyOyAgICAgICAgLyogc2l6ZSBv ZiBvdXRwdXQgYnVmZmVyKi8KKyAgICB1bnNpZ25lZCBsb25nICpscGNiQnl0ZXNSZXR1cm5l ZDsgLyogYWRkcmVzcyBvZiBhY3R1YWwgYnl0ZXMgb2Ygb3V0cHV0Ki8KKyAgICBvdmVybGFw cGVkX3QgICpscG9PdmVybGFwcGVkOyAgICAgLyogYWRkcmVzcyBvZiBvdmVybGFwcGVkIHN0 cnVjdHVyZSovCit9OworCisKKyNkZWZpbmUgTUFYX0lNQl9QQUNLRVRfU0laRQkzMworCit0 eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgY2hhciByc1NhOworCXVuc2lnbmVkIGNoYXIg Y21kOworCXVuc2lnbmVkIGNoYXIgbmV0Rm47CisJdW5zaWduZWQgY2hhciByc0x1bjsKKwl1 bnNpZ25lZCBjaGFyIGRhdGFMZW5ndGg7CisJdW5zaWduZWQgY2hhciBkYXRhWzFdOworfSBJ bWJSZXF1ZXN0OworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgbG9uZyBmbGFnczsK KyNkZWZpbmUJICAgICAgCQlOT19SRVNQT05TRV9FWFBFQ1RFRAkweDAxCisKKwl1bnNpZ25l ZCBsb25nIHRpbWVPdXQ7CisJSW1iUmVxdWVzdCAgICByZXE7Cit9IEltYlJlcXVlc3RCdWZm ZXI7CisKKyNkZWZpbmUgTUlOX0lNQl9SRVFfQlVGX1NJWkUJMTMKKworCit0eXBlZGVmIHN0 cnVjdCB7CisJdW5zaWduZWQgY2hhciBjQ29kZTsKKwl1bnNpZ25lZCBjaGFyIGRhdGFbMV07 Cit9IEltYlJlc3BvbnNlQnVmZmVyOworCisjZGVmaW5lIEFTWU5DX1NFUV9TVEFSVAkJMAkv LyBzdGFydGluZyBzZXF1ZW5jZSBudW1iZXIKKworI2RlZmluZSBNSU5fSU1CX1JFU1BfQlVG X1NJWkUJMQkvLyBhIGJ1ZmZlciB3aXRob3V0IGFueSByZXF1ZXN0IGRhdGEKKyNkZWZpbmUg TUFYX0lNQl9SRVNQX1NJWkUJCShNSU5fSU1CX1JFU1BfQlVGX1NJWkUgKyBNQVhfSU1CX1JF U1BPTlNFX1NJWkUpCisKKyNkZWZpbmUgTUlOX0lNQl9SRVNQT05TRV9TSVpFCTcKKyNkZWZp bmUgTUFYX0lNQl9SRVNQT05TRV9TSVpFCU1BWF9JTUJfUEFDS0VUX1NJWkUKKwordHlwZWRl ZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcgdGltZU91dDsKKwl1bnNpZ25lZCBsb25nIGxh c3RTZXE7Cit9IEltYkFzeW5jUmVxdWVzdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2ln bmVkIGxvbmcgdGhpc1NlcTsKKwl1bnNpZ25lZCBjaGFyIGRhdGFbMV07Cit9IEltYkFzeW5j UmVzcG9uc2U7CisKKyNkZWZpbmUgTUlOX0FTWU5DX1JFU1BfU0laRQkJc2l6ZW9mKHVuc2ln bmVkIGxvbmcpCisjZGVmaW5lIE1BWF9BU1lOQ19SRVNQX1NJWkUJCShNSU5fQVNZTkNfUkVT UF9TSVpFICsgTUFYX0lNQl9QQUNLRVRfU0laRSkKKworI2RlZmluZSBTVEFUVVNfU1VDQ0VT UyAgICAgICAgICAgICAgICAgICgweDAwMDAwMDAwVSkKKyNkZWZpbmUgSU1CX05PX0FTWU5D X01TRwkJKCh1bnNpZ25lZCBsb25nKTB4RTAwNzAwMTJMKQorI2RlZmluZSBJTUJfU0VORF9S RVFVRVNUX0ZBSUxFRAkJKCh1bnNpZ25lZCBsb25nKTB4RTAwNzAwMTNMKQorI2RlZmluZSBJ TlZBTElEX0FSR1VNRU5UUwkJKCh1bnNpZ25lZCBsb25nKTB4RTAwNzAwMDJMKQorCisKKyNk ZWZpbmUgRklMRV9ERVZJQ0VfSU1CCQkJMHgwMDAwODAxMAorI2RlZmluZSBJT0NUTF9JTUJf QkFTRQkJCTB4MDAwMDA4ODAKKworI2RlZmluZSBDVExfQ09ERShEZXZpY2VUeXBlLCBGdW5j dGlvbiwgTWV0aG9kLCBBY2Nlc3MpXAorCQlfSU8oRGV2aWNlVHlwZSAmIDB4MDBGRiwgRnVu Y3Rpb24gJiAweDAwRkYpCisKKyNkZWZpbmUgRklMRV9ERVZJQ0VfSU1CCQkJMHgwMDAwODAx MAorI2RlZmluZSBJT0NUTF9JTUJfQkFTRQkJCTB4MDAwMDA4ODAKKyNkZWZpbmUgTUVUSE9E X0JVRkZFUkVEICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEZJTEVfQU5ZX0FDQ0VTUyAg ICAgICAgICAgICAgICAgMAorCisKK3R5cGVkZWYgc3RydWN0IHsKKwlpbnQJY29kZTsKKyNk ZWZpbmUJCVNEX05PX0FDVElPTgkJCQkwCisjZGVmaW5lCQlTRF9SRVNFVAkJCQkxCisjZGVm aW5lCQlTRF9QT1dFUl9PRkYJCQkJMgorCisJaW50CWRlbGF5VGltZTsgIC8qIGluIHVuaXRz IG9mIDEwMCBtaWxsaXNlY29uZCAqLworfSBTaHV0ZG93bkNtZEJ1ZmZlcjsKKworCisvKiBC TUMgYWRkZWQgcGFyZW50aGVzZXMgYXJvdW5kIElPQ1RMX0lNQl9CQVNFICsgMiAqLworI2Rl ZmluZSBJT0NUTF9JTUJfU0VORF9NRVNTQUdFCQlDVExfQ09ERShGSUxFX0RFVklDRV9JTUIs IChJT0NUTF9JTUJfQkFTRSArIDIpLCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfQU5ZX0FDQ0VT UykKKyNkZWZpbmUgSU9DVExfSU1CX0dFVF9BU1lOQ19NU0cJCUNUTF9DT0RFKEZJTEVfREVW SUNFX0lNQiwgKElPQ1RMX0lNQl9CQVNFICsgOCksIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9B TllfQUNDRVNTKQorI2RlZmluZSBJT0NUTF9JTUJfTUFQX01FTU9SWQkJQ1RMX0NPREUoRklM RV9ERVZJQ0VfSU1CLCAoSU9DVExfSU1CX0JBU0UgKyAxNCksTUVUSE9EX0JVRkZFUkVELCBG SUxFX0FOWV9BQ0NFU1MpCisjZGVmaW5lIElPQ1RMX0lNQl9VTk1BUF9NRU1PUlkJCUNUTF9D T0RFKEZJTEVfREVWSUNFX0lNQiwgKElPQ1RMX0lNQl9CQVNFICsgMTYpLE1FVEhPRF9CVUZG RVJFRCwgRklMRV9BTllfQUNDRVNTKQorI2RlZmluZSBJT0NUTF9JTUJfU0hVVERPV05fQ09E RQkJQ1RMX0NPREUoRklMRV9ERVZJQ0VfSU1CLCAoSU9DVExfSU1CX0JBU0UgKyAxOCksTUVU SE9EX0JVRkZFUkVELCBGSUxFX0FOWV9BQ0NFU1MpCisjZGVmaW5lIElPQ1RMX0lNQl9SRUdJ U1RFUl9BU1lOQ19PQkoJQ1RMX0NPREUoRklMRV9ERVZJQ0VfSU1CLCAoSU9DVExfSU1CX0JB U0UgKyAyNCksTUVUSE9EX0JVRkZFUkVELCBGSUxFX0FOWV9BQ0NFU1MpCisjZGVmaW5lIElP Q1RMX0lNQl9ERVJFR0lTVEVSX0FTWU5DX09CSglDVExfQ09ERShGSUxFX0RFVklDRV9JTUIs IChJT0NUTF9JTUJfQkFTRSArIDI2KSxNRVRIT0RfQlVGRkVSRUQsIEZJTEVfQU5ZX0FDQ0VT UykKKyNkZWZpbmUgSU9DVExfSU1CX0NIRUNLX0VWRU5UCQlDVExfQ09ERShGSUxFX0RFVklD RV9JTUIsIChJT0NUTF9JTUJfQkFTRSArIDI4KSxNRVRIT0RfQlVGRkVSRUQsIEZJTEVfQU5Z X0FDQ0VTUykKKyNkZWZpbmUgSU9DVExfSU1CX1BPTExfQVNZTkMJCUNUTF9DT0RFKEZJTEVf REVWSUNFX0lNQiwgKElPQ1RMX0lNQl9CQVNFICsgMjApLE1FVEhPRF9CVUZGRVJFRCwgRklM RV9BTllfQUNDRVNTKQorCisKKyNlbmRpZiAvKiBfX0xJTlVYX0lQTUlfSU1CX0ggKi8KZGlm ZiAtdSAtLW5ldy1maWxlIC0tcmVjdXJzaXZlIGxpbnV4LTIuNi4yOS42Lm9yaWcvaW5jbHVk ZS9saW51eC9pcG1pX21zZ2RlZnMuaCBsaW51eC0yLjYuMjkuNi5tb2QvaW5jbHVkZS9saW51 eC9pcG1pX21zZ2RlZnMuaAotLS0gbGludXgtMi42LjI5LjYub3JpZy9pbmNsdWRlL2xpbnV4 L2lwbWlfbXNnZGVmcy5oCTIwMDktMDctMDIgMTY6NDE6MjAuMDAwMDAwMDAwIC0wNzAwCisr KyBsaW51eC0yLjYuMjkuNi5tb2QvaW5jbHVkZS9saW51eC9pcG1pX21zZ2RlZnMuaAkyMDA5 LTA3LTIxIDExOjI4OjE4LjAwMDAwMDAwMCAtMDcwMApAQCAtNTgsNiArNTgsMTIgQEAKICNk ZWZpbmUgSVBNSV9SRUFEX0VWRU5UX01TR19CVUZGRVJfQ01ECTB4MzUKICNkZWZpbmUgSVBN SV9HRVRfQ0hBTk5FTF9JTkZPX0NNRAkweDQyCiAKKy8qIEJpdCBmb3IgQk1DIGdsb2JhbCBl bmFibGVzLiAqLworI2RlZmluZSBJUE1JX0JNQ19SQ1ZfTVNHX0lOVFIgICAgIDB4MDEKKyNk ZWZpbmUgSVBNSV9CTUNfRVZUX01TR19JTlRSICAgICAweDAyCisjZGVmaW5lIElQTUlfQk1D X0VWVF9NU0dfQlVGRiAgICAgMHgwNAorI2RlZmluZSBJUE1JX0JNQ19TWVNfTE9HICAgICAg ICAgIDB4MDgKKwogI2RlZmluZSBJUE1JX05FVEZOX1NUT1JBR0VfUkVRVUVTVAkJMHgwYQog I2RlZmluZSBJUE1JX05FVEZOX1NUT1JBR0VfUkVTUE9OU0UJCTB4MGIKICNkZWZpbmUgSVBN SV9BRERfU0VMX0VOVFJZX0NNRAkJMHg0NApAQCAtNjUsNiArNzEsOSBAQAogI2RlZmluZSBJ UE1JX05FVEZOX0ZJUk1XQVJFX1JFUVVFU1QJCTB4MDgKICNkZWZpbmUgSVBNSV9ORVRGTl9G SVJNV0FSRV9SRVNQT05TRQkJMHgwOQogCisjZGVmaW5lIElQTUlfTkVURk5fT0VNX1JFUVVF U1QJCQkweDJlCisjZGVmaW5lIElQTUlfTkVURk5fT0VNX1JFU1BPTlNFCQkJMHgyZgorCiAv KiBUaGUgZGVmYXVsdCBzbGF2ZSBhZGRyZXNzICovCiAjZGVmaW5lIElQTUlfQk1DX1NMQVZF X0FERFIJMHgyMAogCkBAIC0xMDksNSArMTE4LDcgQEAKICNkZWZpbmUgSVBNSV9DSEFOTkVM X01FRElVTV9VU0IxCTEwCiAjZGVmaW5lIElQTUlfQ0hBTk5FTF9NRURJVU1fVVNCMgkxMQog I2RlZmluZSBJUE1JX0NIQU5ORUxfTUVESVVNX1NZU0lOVEYJMTIKKyNkZWZpbmUgSVBNSV9D SEFOTkVMX01FRElVTV9PRU1fTUlOCTB4NjAKKyNkZWZpbmUgSVBNSV9DSEFOTkVMX01FRElV TV9PRU1fTUFYCTB4N2YKIAogI2VuZGlmIC8qIF9fTElOVVhfSVBNSV9NU0dERUZTX0ggKi8K ZGlmZiAtdSAtLW5ldy1maWxlIC0tcmVjdXJzaXZlIGxpbnV4LTIuNi4yOS42Lm9yaWcvaW5j bHVkZS9saW51eC9pcG1pX3JhZGlzeXMuaCBsaW51eC0yLjYuMjkuNi5tb2QvaW5jbHVkZS9s aW51eC9pcG1pX3JhZGlzeXMuaAotLS0gbGludXgtMi42LjI5LjYub3JpZy9pbmNsdWRlL2xp bnV4L2lwbWlfcmFkaXN5cy5oCTE5NjktMTItMzEgMTc6MDA6MDAuMDAwMDAwMDAwIC0wNzAw CisrKyBsaW51eC0yLjYuMjkuNi5tb2QvaW5jbHVkZS9saW51eC9pcG1pX3JhZGlzeXMuaAky MDA5LTA3LTIxIDExOjI4OjE4LjAwMDAwMDAwMCAtMDcwMApAQCAtMCwwICsxLDEyOCBAQAor LyoKKyAqIGlwbWlfcmFkaXN5cy5oCisgKgorICogQW4gZW11bGF0aW9uIG9mIHRoZSBSYWRp c3lzIElQTUkgaW50ZXJmYWNlIG9uIHRvcCBvZiB0aGUgTW9udGFWaXN0YQorICogaW50ZXJm YWNlLgorICoKKyAqIEF1dGhvcjogTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICogICAg ICAgICBDb3JleSBNaW55YXJkIDxtaW55YXJkQG12aXN0YS5jb20+CisgKiAgICAgICAgIHNv dXJjZUBtdmlzdGEuY29tCisgKgorICogQ29weXJpZ2h0IDIwMDIgTW9udGFWaXN0YSBTb2Z0 d2FyZSBJbmMuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg dGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9m IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp b24uCisgKgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBB TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorICogIFdBUlJBTlRJRVMsIElOQ0xVRElORywg QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiAgTUVS Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg RElTQ0xBSU1FRC4KKyAqICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJM RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiAgSU5DSURFTlRBTCwgU1BFQ0lBTCwg RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqICBC VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig U0VSVklDRVM7IExPU1MKKyAqICBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiAgT04gQU5ZIFRIRU9S WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks IE9SCisgKiAgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRQorICogIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoK KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3Qs IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgNjc1 IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBf X0xJTlVYX0lQTUlfUkFESVNZU19ICisjZGVmaW5lIF9fTElOVVhfSVBNSV9SQURJU1lTX0gK KworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVGhpcyBpcyB0aGUgb2xkIElQTUkg aW50ZXJmYWNlIGRlZmluZWQgYnkgUmFkaXN5cy4gIFdlIGFyZQorICogY29tcGxpYW50IHdp dGggdGhhdC4gIERvbid0IHVzZSBpdCBmb3IgbmV3IGRlc2lnbnMsIHRob3VnaC4KKyAqLwor I2RlZmluZSBJT0NUTF9JUE1JX1JDViAgICAgICAgICAoIElQTUlfSU9DX01BR0lDPDw4IHwg MSApCisjZGVmaW5lIElPQ1RMX0lQTUlfU0VORCAgICAgICAgICggSVBNSV9JT0NfTUFHSUM8 PDggfCAyICkKKyNkZWZpbmUgSU9DVExfSVBNSV9FVkVOVCAgICAgICAgKCBJUE1JX0lPQ19N QUdJQzw8OCB8IDMgKQorI2RlZmluZSBJT0NUTF9JUE1JX1JFR0lTVEVSICAgICAoIElQTUlf SU9DX01BR0lDPDw4IHwgNCApCisjZGVmaW5lIElPQ1RMX0lQTUlfVU5SRUdJU1RFUiAgICgg SVBNSV9JT0NfTUFHSUM8PDggfCA1ICkKKyNkZWZpbmUgSU9DVExfSVBNSV9DTEVBUiAgICAg ICAgKCBJUE1JX0lPQ19NQUdJQzw8OCB8IDkgKQorCisvKiBUaGVzZSBkb24ndCBzZWVtIHRv IGJlIGltcGxlbWVudGVkIGluIHRoZSBSYWRpc3lzIGRyaXZlci4KKyNkZWZpbmUgSU9DVExf SVBNSV9SRVNFVF9CTUMgICAgKCBJUE1JX0lPQ19NQUdJQzw8OCB8IDYgKQorI2RlZmluZSBJ T0NUTF9JUE1JX0dFVF9CTUNfQUREUiAoIElQTUlfSU9DX01BR0lDPDw4IHwgNyApCisjZGVm aW5lIElPQ1RMX0lQTUlfU0VUX0JNQ19BRERSICggSVBNSV9JT0NfTUFHSUM8PDggfCA4ICkK KyovCisKKy8qCisgKiBOZXR3b3JrIEZ1bmN0aW9uIENvZGVzCisgKi8KKyNkZWZpbmUgSVBN SV9ORVRGTl9DSEFTU0lTICAgICAgICAgIDB4MDAgICAgLyogQ2hhc3NpcyAtIDB4MDAgPDwg MiAqLworI2RlZmluZSBJUE1JX05FVEZOX0NIQVNTSVNfUkVTUCAgICAgMHgwNCAgICAvKiBD aGFzc2lzIC0gMHgwMSA8PCAyICovCisKKyNkZWZpbmUgSVBNSV9ORVRGTl9CUklER0UgICAg ICAgICAgIDB4MDggICAgLyogQnJpZGdlIC0gMHgwMiA8PCAyICovCisjZGVmaW5lIElQTUlf TkVURk5fQlJJREdFX1JFU1AgICAgICAweDBjICAgIC8qIEJyaWRnZSAtIDB4MDMgPDwgMiAq LworCisjZGVmaW5lIElQTUlfTkVURk5fU0VOU09SX0VWVCAgICAgICAweDEwICAgIC8qIFNl bnNvci9FdmVudCAtIDB4MDQgPDwgMiAqLworI2RlZmluZSBJUE1JX05FVEZOX1NFTlNPUl9F VlRfUkVTUCAgMHgxNCAgICAvKiBTZW5zb3IvRXZlbnQgLSAweDA1IDw8IDIgKi8KKworI2Rl ZmluZSBJUE1JX05FVEZOX0FQUCAgICAgICAgICAgICAgMHgxOCAgICAvKiBBcHBsaWNhdGlv biAtIDB4MDYgPDwgMiAqLworI2RlZmluZSBJUE1JX05FVEZOX0FQUF9SRVNQICAgICAgICAg MHgxYyAgICAvKiBBcHBsaWNhdGlvbiAtIDB4MDcgPDwgMiAqLworCisjZGVmaW5lIElQTUlf TkVURk5fRklSTVdBUkUgICAgICAgICAweDIwICAgIC8qIEZpcm13YXJlIC0gMHgwOCA8PCAy ICovCisjZGVmaW5lIElQTUlfTkVURk5fRklSTVdBUkVfUkVTUCAgICAweDI0ICAgIC8qIEZp cm13YXJlIC0gMHgwOSA8PCAyICovCisKKyNkZWZpbmUgSVBNSV9ORVRGTl9TVE9SQUdFICAg ICAgICAgIDB4MjggICAgLyogU3RvcmFnZSAtIDB4MGEgPDwgMiAqLworI2RlZmluZSBJUE1J X05FVEZOX1NUT1JBR0VfUkVTUCAgICAgMHgyYyAgICAvKiBTdG9yYWdlIC0gMHgwYiA8PCAy ICovCisKKyNkZWZpbmUgSVBNSV9ORVRGTl9PRU1fMSAgICAgICAgICAgIDB4QzAgICAgLyog U3RvcmFnZSAtIDB4MzAgPDwgMiAqLworI2RlZmluZSBJUE1JX05FVEZOX09FTV8xX1JFU1Ag ICAgICAgMHhDNCAgICAvKiBTdG9yYWdlIC0gMHgzMSA8PCAyICovCisKKy8qIHRoZXJlIGFy ZSAxNSBvdGhlciBPRU0gbmV0Zm4gcGFpcnMgKE9FTSAtIDB4MzAtMHgzZikgKi8KKwordHlw ZWRlZiBzdHJ1Y3QgX0lQTUlfTElTVF9FTlRSWSB7CisgICBzdHJ1Y3QgX0lQTUlfTElTVF9F TlRSWSAqIHZvbGF0aWxlIEZsaW5rOworICAgc3RydWN0IF9JUE1JX0xJU1RfRU5UUlkgKiB2 b2xhdGlsZSBCbGluazsKK30gSVBNSV9MSVNUX0VOVFJZLCAqUElQTUlfTElTVF9FTlRSWTsK KwordHlwZWRlZiBzdHJ1Y3QgSVBNSV9zZW1hcGhvcmUgICBJUE1JX0tTRU1BUEhPUkU7Cit0 eXBlZGVmIHN0cnVjdCBJUE1JX3NlbWFwaG9yZSAqIElQTUlfUEtTRU1BUEhPUkU7CisKKy8q IElQTUkgQWRkcmVzcyBzdHJ1Y3R1cmUgKi8KK3R5cGVkZWYgc3RydWN0IF9JUE1JX0FERFIg eworICAgIHVuc2lnbmVkIGNoYXIgdWNoU2xhdmU7ICAgICAgICAgICAgICAgIC8qIFNsYXZl IEFkZHJlc3MgKi8KKyAgICB1bnNpZ25lZCBjaGFyIHVjaEx1bjsgICAgICAgICAgICAgICAg ICAvKiBMb2dpY2FsIFVuaXQgTnVtYmVyICovCit9IElQTUlfQUREUiwgKlBJUE1JX0FERFI7 CisKKyNkZWZpbmUgSVBNSV9NQVhfTVNHX1NJWkUJMzYKKworLyogSVBNSSBNZXNzYWdlIERl c2NyaXB0b3Igc3RydWN0dXJlICovCit0eXBlZGVmIHN0cnVjdCBfSVBNSV9NU0dERVNDIHsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogRGV2aWNlIERyaXZlciBTcGVjaWZpYyBFbGVtZW50cyAgKi8K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICBJUE1JX0xJU1RfRU5UUlkgIEVudHJ5 OyAgICAgICAgICAgICAgICAgIC8qIExpbmtlZCBsaXN0IGVsZW1lbnQgKi8KKyAgICB2b2lk ICAgICAgICAgICAgICpwSVJQYWNrZXQ7ICAgICAgICAgICAgIC8qIFBvaW50ZXIgdG8gSVJQ IG9iamVjdCAqLworICAgIElQTUlfUEtTRU1BUEhPUkUgcFNlbWE7ICAgICAgICAgICAgICAg ICAgLyogU2VtYXBob3JlIE9iamVjdCAqLworICAgIGxvbmcgICAgICAgICAgICAgbFRpbWVv dXQ7ICAgICAgICAgICAgICAgLyogVGltZW91dCB2YWx1ZSAqLworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBTaGFyZWQgZWxlbWVudHMgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqLworICAgIHVuc2lnbmVkIGNoYXIgICBhdWNoQnVmZmVyW0lQTUlfTUFYX01T R19TSVpFXTsgLyogTWVzc2FnZSBidWZmZXIgKi8KKyAgICB1bnNpZ25lZCBsb25nICAgdWxM ZW5ndGg7ICAgICAgICAgICAgICAgLyogTGVuZ3RoIG9mIG1lc3NhZ2UgaW4gYnl0ZXMgKi8K KyAgICBpbnQgICAgICAgICAgICAgZkRlZmVyOyAgICAgICAgICAgICAgICAgLyogVFJVRSAt IERlZmVyIEkvTworCQkJCQkgICAgICAgb3BlcmF0aW9uLCBkb2Vzbid0IHNlZW0KKwkJCQkJ ICAgICAgIHRvIGJlIHVzZWQgaW4gdGhlCisJCQkJCSAgICAgICBSYWRpc3lzIGRyaXZlci4g Ki8KKyAgICBJUE1JX0FERFIgICAgICAgRGVzdDsgICAgICAgICAgICAgICAgICAgLyogRGVz dGluYXRpb24gSVBNIEFkZHJlc3MgKi8KKyAgICB1bnNpZ25lZCBjaGFyICAgdWNoTmV0Rm47 ICAgICAgICAgICAgICAgLyogTmV0d29yayBGdW5jdGlvbiAqLworICAgIHVuc2lnbmVkIGNo YXIgICB1Y2hDbWQ7ICAgICAgICAgICAgICAgICAvKiBDb21tYW5kICovCisgICAgdW5zaWdu ZWQgY2hhciAgIHVjaFNlcTsgICAgICAgICAgICAgICAgIC8qIFNlcXVlbmNlIE51bWJlciAq LworICAgIHVuc2lnbmVkIGNoYXIgICB1Y2hDb21wbGV0ZTsgICAgICAgICAgICAvKiBDb21w bGV0aW9uIENvZGUgKi8KK30gSVBNSV9NU0dERVNDLCAqUElQTUlfTVNHREVTQzsKKworLyog Qnl0ZSByZXR1cm4gY29kZXMgZm9yIHNvbWUgdGhpbmdzLiAqLworI2RlZmluZSBMT1dMUkNf U1VDQ0VTUyAgICAgICAgICAgICAgMHgwMCAvKiByb3V0aW5lIGNvbXBsZXRlZCBzdWNjZXNz ZnVsbHkgKi8KKyNkZWZpbmUgTE9XTFJDX0VSUk9SICAgICAgICAgICAgICAgIDB4ZmYgLyog cm91dGluZSBkaWQgbm90IGNvbXBsZXRlICovCisjZGVmaW5lIExPV0xSQ19JTlZBTElEX1BB UkFNRVRFUlMgICAweGZlIC8qIGludmFsaWQgcGFyYW1ldGVycyAqLworI2RlZmluZSBMT1dM UkNfSU5WQUxJRF9SRVFVRVNUX0RBVEEgMHhmZCAvKiBpbnZhbGlkIHJlcXVlc3QgZGF0YSAq LworCisjZW5kaWYgLyogX19MSU5VWF9JUE1JX1JBRElTWVNfSCAqLwpkaWZmIC11IC0tbmV3 LWZpbGUgLS1yZWN1cnNpdmUgbGludXgtMi42LjI5LjYub3JpZy9pbmNsdWRlL2xpbnV4L2lw bWlfc2VyaWFsX3NtLmggbGludXgtMi42LjI5LjYubW9kL2luY2x1ZGUvbGludXgvaXBtaV9z ZXJpYWxfc20uaAotLS0gbGludXgtMi42LjI5LjYub3JpZy9pbmNsdWRlL2xpbnV4L2lwbWlf c2VyaWFsX3NtLmgJMTk2OS0xMi0zMSAxNzowMDowMC4wMDAwMDAwMDAgLTA3MDAKKysrIGxp bnV4LTIuNi4yOS42Lm1vZC9pbmNsdWRlL2xpbnV4L2lwbWlfc2VyaWFsX3NtLmgJMjAwOS0w Ny0yMSAxMToyODoxOC4wMDAwMDAwMDAgLTA3MDAKQEAgLTAsMCArMSwzMDYgQEAKKy8qCisg KiBpcG1pX3NlcmlhbF9zbS5oCisgKgorICogU3RhdGUgbWFjaGluZSBpbnRlcmZhY2UgZm9y IGxvdy1sZXZlbCBJUE1JIHNlcmlhbCBpbnRlcmZhY2UgZHJpdmVyCisgKiBzdGF0ZSBtYWNo aW5lcy4gIFRoaXMgY29kZSBpcyB0aGUgaW50ZXJmYWNlIGJldHdlZW4KKyAqIHRoZSBpcG1p X3NlcmlhbCBjb2RlIGFuZCB0aGUgc3VwcG9ydGVkIGNvZGVjKHMpCisgKgorICogQXV0aG9y OiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKiAgICAgICAgIGRncmllZ29AbXZpc3Rh LmNvbQorICogICAgICAgICBjbWlueWFyZEBtdmlzdGEuY29tCisgKiAgICAgICAgIHNvdXJj ZUBtdmlzdGEuY29tCisgKgorICogQ29weXJpZ2h0IDIwMDYgTW9udGFWaXN0YSBTb2Z0d2Fy ZSBJbmMuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl CisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRo ZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u CisgKgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQg QU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorICogIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiAgTUVSQ0hB TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT Q0xBSU1FRC4KKyAqICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBG T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiAgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqICBCVVQg Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS VklDRVM7IExPU1MKKyAqICBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiAgT04gQU5ZIFRIRU9SWSBP RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S CisgKiAgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H IElOIEFOWSBXQVkgT1VUIE9GIFRIRQorICogIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAq ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBhbG9uZworICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdy aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgNjc1IE1h c3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBfSVBN SV9TRVJJQUxfU01fSAorI2RlZmluZSBfSVBNSV9TRVJJQUxfU01fSAorCisjaW5jbHVkZSA8 bGludXgvdGVybWlvcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lwbWlfc21pLmg+CisKKy8qCisg KiBUaGlzIGlzIHRoZSBpbnRlcmZhY2UgYmV0d2VlbiB0aGUgSVBNSSBzZXJpYWwgY29kZSBh bmQgdGhlIGNvZGVjcworICogdGhlbXNlbHZlcy4KKyAqCisgKiBUaGUgSVBNSSBzZXJpYWwg Y29kZSBoYW5kbGVzIHRoZSBpbnRlcmZhY2UgdG8gdGhlIElQTUkgbWVzc2FnZQorICogaGFu ZGxlciwgdGhlIHF1ZXVpbmcgb2YgbWVzc2FnZXMgdG8gdHJhbnNtaXQsIHRoZSBjb25maWd1 cmF0aW9uIG9mCisgKiB0aGUgc2VyaWFsIHBvcnQsIGFuZCBkZWFsaW5nIGRpcmVjdGx5IHdp dGggdGhlIHNlcmlhbCBwb3J0LiAgSXQgYWxzbworICogcmVxdWVzdHMgYW5kIGhhbmRsZXMg aW50ZXJmYWNlIGZsYWdzLgorICoKKyAqIFRoZSBsb3dlciBsYXllciBpcyBjb25jZXJuZWQg d2l0aCB0cmFuc21pc3Npb24gb2Ygb25lIG1lc3NhZ2UgYXQgYQorICogdGltZSwgdGhlIGhh bmRsaW5nIG9mIHJlY2VpdmVkIGJ5dGVzIHRvIGFzc2VtYmxlIGludG8gZnVsbCByZWNlaXZl ZAorICogbWVzc2FnZXMuCisgKgorICogQWxsIG1lc3NhZ2VzIGFyZSBmb3JtYXR0ZWQgaW4g dGhlIHNhbWUgbWFubmVyIGFzIGEgc3RhbmRhcmQgS0NTCisgKiBjb21tYW5kOgorICogICBz ZW5kOiBbKG5ldGZuIDw8IDIpIHwgbHVuXSBbY29tbWFuZF0gW2RhdGExXSAuLi4KKyAqICAg cmVjdjogWyhuZXRmbiA8PCAyKSB8IGx1bl0gW2NvbW1hbmRdIFtjb21wbGV0aW9uIGNvZGVd IFtkYXRhMV0gLi4uCisgKgorICogTm90ZSB0aGF0IHNvbWUgY29tbWFuZHMgbWF5IGhhdmUg YSBzcGVjaWFsIG1lYW5pbmc6CisgKiAgIElQTUlfR0VUX01TR19GTEFHU19DTUQgLSBJZiB0 aGUgQk1DIGRvZXMgbm90IGhhbmRsZSB0aGlzIGFuZCB0cmFuc2ZlcnMKKyAqICAgICB0aGlz IGluZm9ybWF0aW9uIHZpYSBhIGRpZmZlcmVudCBtZWNoYW5pc20sIHRoZSBsb3dlciBsYXll ciBtYXkKKyAqICAgICByZXR1cm4gLUVOT1RTVVAgZm9yIGEgc2VuZCBvZiB0aGlzIGNvbW1h bmQuCisgKiAgIElQTUlfUkVBRF9FVkVOVF9NU0dfQlVGRkVSX0NNRCAtIFVzZWQgdG8gcmVw b3J0IGEgcmVjZWl2ZWQgZXZlbnQuCisgKiAgICAgVGhlIGxvd2VyIGxheWVyIG1heSBzZW5k IHRoZXNlIGFzeW5jaHJvbm91c2x5IHRvIHRoZSB1cHBlciBsYXllcgorICogICAgIGlmIGl0 IGhhcyBhIGRpZmZlcmVudCBtZWNoYW5pc20gdG8gcmVjZWl2ZSB0aGVzZS4KKyAqICAgSVBN SV9HRVRfTVNHX0NNRCAtIFVzZWQgdG8gcmVwb3J0IGEgcmVjZWl2ZWQgY29tbWFuZC4KKyAq ICAgICBUaGUgbG93ZXIgbGF5ZXIgbWF5IHNlbmQgdGhlc2UgYXN5bmNocm9ub3VzbHkgdG8g dGhlIHVwcGVyIGxheWVyCisgKiAgICAgaWYgaXQgaGFzIGEgZGlmZmVyZW50IG1lY2hhbmlz bSB0byByZWNlaXZlIHRoZXNlLgorICogVGhlIGxvd2VyIGxheWVyIG1heSBub3QgYXN5bmNo cm9ub3VzbHkgc2VuZCBhbnl0aGluZyBlbHNlIHdpdGgKKyAqIHRoZSBhc3luYyBmdW5jdGlv biBleGNlcHQgd2hhdCBpcyBhbGxvd2VkIGFib3ZlLgorICoKKyAqIFNlZSB0aGUgZW5kIG9m IHRoaXMgZmlsZSBmb3IgZXhwZWN0ZWQgY2FsbCBmbG93cy4KKyAqLworCisvKgorICogVGhp cyBpcyBkZWZpbmVkIGJ5IHRoZSBjb2RlY3MgdGhlbXNlbHZlcywgaXQgaXMgYW4gb3BhcXVl CisgKiBkYXRhIHR5cGUgZm9yIHRoZW0gdG8gdXNlLgorICovCitzdHJ1Y3QgaXBtaV9zZXJp YWxfY29kZWNfZGF0YTsKKworLyoKKyAqIE9wYXF1ZSBkYXRhIHVzZWQgaW4gdGhlIHNlcmlh bCBpbnRlcmZhY2UgdGhhdCB0aGUgc3RhdGUgbWFjaGluZXMKKyAqIG11c3Qgc3VwcGx5IHRv IHRoZSBzZXJpYWwgaW50ZXJmYWNlIGluIGNhbGxiYWNrcy4KKyAqLworc3RydWN0IGlwbWlf c2VyaWFsX2luZm87CisKKy8qCisgKiBIYW5kbGVycyBmb3IgdGhlIElQTUkgc2VyaWFsIHN0 YXRlIG1hY2hpbmUuCisgKi8KK3N0cnVjdCBpcG1pX3NlcmlhbF9jb2RlYyB7CisJc3RydWN0 IG1vZHVsZSAqb3duZXI7CisJY2hhciAgICAgICAgICAqbmFtZTsKKworI2RlZmluZSBJUE1J X1NFUklBTF9ORUVEU19HRVRfRkxBR1NfUE9MTElORwkweDAwMDAwMDAxCisjZGVmaW5lIElQ TUlfU0VSSUFMX1NVUFBPUlRTX0dFVF9GTEFHUwkJMHgwMDAwMDAwMgorI2RlZmluZSBJUE1J X1NFUklBTF9TVVBQT1JUU19FVkVOVF9CVUZGRVIJMHgwMDAwMDAwNAorI2RlZmluZSBJUE1J X1NFUklBTF9IQVNfQVRUTgkJCTB4MDAwMDAwMDgKKwl1bnNpZ25lZCBpbnQgKCpjYXBhYmls aXRpZXMpKHN0cnVjdCBpcG1pX3NlcmlhbF9jb2RlY19kYXRhICpkYXRhKTsKKworCS8qCisJ ICogU2V0IHVwIHRoZSBiYXNpYyB0ZXJtaW9zIGZvciB0aGUgc2VyaWFsIHBvcnQgZm9yIHRo aXMKKwkgKiBpbnRlcmZhY2UgdHlwZS4gIFRoZSB1cHBlciBsYXllciB3aWxsIGNhbGwgdGhp cyB3aGVuCisJICogc2V0dGluZyB1cCB0aGUgc2VyaWFsIHBvcnQuICBUaGUgdXBwZXIgbGF5 ZXIgd2lsbCBjaGFuZ2UKKwkgKiBzb21lIG9mIHRoZXNlIHZhbHVlcyBiYXNlZCB1cG9uIGlu Zm9ybWF0aW9uIGZyb20gdGhlIHVzZXIsCisJICogcHJpbWFyaWx5IGJhdWQsIG51bWJlciBv ZiBiaXRzL2NoYXIsIHN0b3AgYml0cywgYW5kIHBhcml0eS4KKwkgKi8KKwlpbnQgKCpzZXR1 cF90ZXJtaW9zKShzdHJ1Y3Qga3Rlcm1pb3MgKnQpOworCisJLyoKKwkgKiBJbml0aWFsaXpl IHRoZSBkYXRhIHN0cnVjdHVyZSBmb3IgdGhlIGNvZGVjLiAgVGhlIGluZm8gbXVzdAorCSAq IGJlIHN1cHBsaWVkIHRvIGNhbGxiYWNrcy4gIE5vdGUgdGhhdCB0aGlzIHNob3VsZG4ndCBz ZW5kIG9yCisJICogcmVjZWl2ZSBhbnl0aGluZywgaXQgc2hvdWxkIGp1c3QgaW5pdGlhbGl6 ZS4gIFRoZSB1c2VyIG1heQorCSAqIHBhc3Mgb3B0aW9ucyBpbiBvbiB0aGUgc2VyaWFsIGNv bmZpZ3VyYXRpb24gY29tbWFuZCBsaW5lLAorCSAqIHRoZXNlIHdpbGwgYmUgcGFzc2VkIHRv IHRoaXMgZnVuY3Rpb24uCisJICovCisJaW50ICgqaW5pdCkoc3RydWN0IGlwbWlfc2VyaWFs X2NvZGVjX2RhdGEgKmRhdGEsCisJCSAgICBzdHJ1Y3QgaXBtaV9zZXJpYWxfaW5mbyAqaW5m bywKKwkJICAgIGNvbnN0IGNoYXIgKm9wdGlvbnMpOworCisJLyoKKwkgKiBTdGFydCBwcm9j ZXNzaW5nLiAgV2hlbiB0aGlzIGlzIGRvbmUsCisJICogaXBtaV9zZXJpYWxfbGxfaW5pdF9j b21wbGV0ZSgpIG11c3QgYmUgY2FsbGVkIGJ5IHRoZSBjb2RlYy4KKwkgKiBUaGlzIGZ1bmN0 aW9uIG1heSBzZW5kIGFuZCByZWNlaXZlIGRhdGEuICBJZiB0aGlzIGlzIE5VTEwsCisJICog dGhlIGNvZGVjIGlzIGFzc3VtZWQgdG8gYWxyZWFkeSBiZSBmdWxseSBvcGVyYXRpb25hbCBh ZnRlcgorCSAqIHRoZSBpbml0IGNhbGwuCisJICovCisJIGludCAoKnN0YXJ0KShzdHJ1Y3Qg aXBtaV9zZXJpYWxfY29kZWNfZGF0YSAqZGF0YSk7CisKKwkvKgorCSAqIENsZWFudXAgYW55 dGhpbmcgdGhhdCBuZWVkcyB0byBiZSBjbGVhbmVkIHVwIGJlZm9yZSB0aGUgY29kZWMKKwkg KiBpcyBmcmVlZC4KKwkgKi8KKwl2b2lkICgqY2xlYW51cCkoc3RydWN0IGlwbWlfc2VyaWFs X2NvZGVjX2RhdGEgKmRhdGEpOworCisJLyoKKwkgKiBSZXR1cm4gdGhlIHNpemUgb2YgdGhl IGlwbWlfc2VyaWFsX2NvZGVjX2RhdGEgc3RydWN0dXJlIGluCisJICogYnl0ZXMuICBUaGUg dXBwZXIgbGF5ZXIgd2lsbCB1c2UgdGhpcyB0byBhbGxvY2F0ZSB0aGUgZGF0YQorCSAqIHN0 cnVjdHVyZSBmb3IgdGhlIGNvZGVjLgorCSAqLworCWludCAoKnNpemUpKHZvaWQpOworCisJ LyoKKwkgKiBTZW5kIGEgbWVzc2FnZS4gIE9ubHkgb25lIG1lc3NhZ2Ugc2VuZCBhdCBhIHRp bWUgaXMKKwkgKiBhbGxvd2VkLiAgV2hlbiB0aGUgc2VuZCBpcyBjb21wbGV0ZSB0aGUgbG93 ZXIgbGF5ZXIgbXVzdAorCSAqIGNhbGwgaXBtaV9zZXJpYWxfbGxfc2VuZF9jb21wbGV0ZSgp LiAgTWF5IHJldHVybiBhbiBlcnJvcgorCSAqIGNvZGUgaWYgdGhlcmUgaXMgYWxyZWFkeSBh IG1lc3NhZ2UgaW4gcHJvZ3Jlc3MuICBUaGUgcmVzcG9uc2UKKwkgKiB0aGF0IGNvbWVzIGJh Y2sgd2lsbCBoYXZlIHRoZSBnaXZlbiBzZXEgdmFsdWUgaW4gdGhlIHJlY2VpdmUKKwkgKiBj YWxsLgorCSAqLworCWludCAoKnNlbmRfbXNnKShzdHJ1Y3QgaXBtaV9zZXJpYWxfY29kZWNf ZGF0YSAqZGF0YSwKKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm1zZywgdW5zaWduZWQgaW50 IG1zZ19sZW4sCisJCQl1bnNpZ25lZCBpbnQgc2VxKTsKKworCS8qCisJICogSGFuZGxlIGEg c2luZ2xlIHJlY2VpdmVkIGNoYXJhY3RlciBmcm9tIHRoZSBzZXJpYWwgcG9ydC4KKwkgKiBO b3RlIHRoYXQgdGhpcyBpcyBjYWxsZWQgd2l0aG91dCB0aGUgc2VyaWFsIGNvZGUgY2xhaW1p bmcgYQorCSAqIGxvY2ssIGJ1dCB3aWxsIGJlIHNpbmdsZS10aHJlYWRlZC4KKwkgKi8KKwl2 b2lkICgqaGFuZGxlX2NoYXIpKHN0cnVjdCBpcG1pX3NlcmlhbF9jb2RlY19kYXRhICpkYXRh LAorCQkJICAgIHVuc2lnbmVkIGNoYXIgY2gpOworCisJLyoKKwkgKiBDYWxsZWQgd2hlbiB0 aGUgdHJhbnNtaXR0ZXIgaGFzIHNwYWNlIHRvIHRha2UgbW9yZQorCSAqIGNoYXJhY3RlcnMu ICBJZiBpcG1pX3NlcmlhbF94bWl0X2RhdGEgcmV0dXJucyBsZXNzIHF1ZXVlZAorCSAqIGNo YXJhY3RlcnMgdGhhbiBhc2tlZCB0byB0cmFuc21pdCwgdGhlIGxvd2VyIGxheWVyIHNob3Vs ZAorCSAqIHdhaXQgZm9yIHRoaXMgY2FsbCBhbmQgdGhlbiBzZW5kIG1vcmUgZGF0YS4KKwkg Ki8KKwl2b2lkICgqdHhfcmVhZHkpKHN0cnVjdCBpcG1pX3NlcmlhbF9jb2RlY19kYXRhICpk YXRhKTsKKworCisJLyoKKwkgKiBJZiBub3QtTlVMTCwgdGhpcyB3aWxsIGJlIGNhbGxlZCBw ZXJpb2RpY2FsbHkuICBUaGUgdGltZQorCSAqIHNpbmNlIHRoZSBsYXN0IGNhbGwgd2lsbCBi ZSBwYXNzZWQsIHRpbWUgaXMgaW4gbWljcm9zZWNvbmRzLgorCSAqLworCXZvaWQgKCp0aW1l cl90aWNrKShzdHJ1Y3QgaXBtaV9zZXJpYWxfY29kZWNfZGF0YSAqZGF0YSwKKwkJCSAgIHVu c2lnbmVkIGludCB0aW1lX3NpbmNlX2xhc3QpOworCisJLyoKKwkgKiBPbmNlIHRoZSBkZXZp Y2UgaWQgaXMgZmV0Y2hlZCBieSB0aGUgbWFpbiBzZXJpYWwgY29kZSwgdGhpcworCSAqIHdp bGwgYmUgY2FsbGVkIGlmIGl0IGlzIG5vdCBOVUxMLiAgVGhpcyBhbGxvd3MgdGhlIGNvZGVj IHRvCisJICogZW5hYmxlIGNlcnRhaW4gaGFja3MgZm9yIGNlcnRhaW4gbWFjaGluZXMuCisJ ICovCisJdm9pZCAoKmNoZWNrX2Rldl9pZCkoc3RydWN0IGlwbWlfc2VyaWFsX2NvZGVjX2Rh dGEgKmRhdGEsCisJCQkgICAgIHN0cnVjdCBpcG1pX2RldmljZV9pZCAqZGV2X2lkKTsKKwor CS8qCisJICogUHJpbnQgdGhlIGN1cnJlbnQgb3B0aW9ucyBpbiB1c2UgYnkgdGhlIGNvZGVj LiAgSWYgdGhlcmUgYXJlCisJICogb3B0aW9ucyBwcmludGVkLCB0aGUgY29kZWMgc2hvdWxk IHByZXBlbmQgYSAnLCcuCisJICovCisJaW50ICgqYWRkX29wdGlvbnMpKHN0cnVjdCBpcG1p X3NlcmlhbF9jb2RlY19kYXRhICpkYXRhLCBjaGFyICpvdXQpOworCisJLyoKKwkgKiBVc2Vk IGJ5IHRoZSBzZXJpYWwgaW50ZXJmYWNlLCB0aGUgY29kZWMgc2hvdWxkbid0IHRvdWNoCisJ ICogYW55dGhpbmcgYmVsb3cuCisJICovCisJc3RydWN0IGxpc3RfaGVhZCBsaW5rOworfTsK KworLyoKKyAqIENhbGxlZCBieSB0aGUgbG93ZXIgbGF5ZXIgd2hlbiBpbml0aWFsaXphdGlv biBpcyBjb21wbGV0ZS4gIFBhc3MKKyAqIGluIHplcm8gYXMgdGhlIHNsYXZlX2FkZHIgaWYg eW91IGFyZSB1bmFibGUgdG8gY29tcHV0ZSBpdC4KKyAqLworZXh0ZXJuIHZvaWQgaXBtaV9z ZXJpYWxfbGxfaW5pdF9jb21wbGV0ZShzdHJ1Y3QgaXBtaV9zZXJpYWxfaW5mbyAqaW5mbywK KwkJCQkJIHVuc2lnbmVkIGNoYXIgc2xhdmVfYWRkciwKKwkJCQkJIGludCBlcnIpOworCisv KgorICogQ2FsbGVkIGJ5IHRoZSBsb3dlciBsYXllciB3aGVuIGl0IG5lZWRzIHRvIHNlbmQg c29tZSBkYXRhLiAgUmV0dXJucyB0aGUKKyAqIGFjdHVhbCBudW1iZXIgb2YgYnl0ZXMgcXVl dWVkIGZvciB0cmFuc21pdC4KKyAqLworZXh0ZXJuIHVuc2lnbmVkIGludCBpcG1pX3Nlcmlh bF9sbF94bWl0KHN0cnVjdCBpcG1pX3NlcmlhbF9pbmZvICppbmZvLAorCQkJCQljb25zdCB1 bnNpZ25lZCBjaGFyICpkYXRhLAorCQkJCQl1bnNpZ25lZCBpbnQgbGVuKTsKKworLyoKKyAq IENhbGxlZCBieSB0aGUgbG93ZXIgbGF5ZXIgd2hlbiBpdCBkZXRlY3RzIHRoYXQgbWVzc2Fn ZSBmbGFncyBhcmUKKyAqIGF2YWlsYWJsZS4KKyAqLworZXh0ZXJuIHZvaWQgaXBtaV9zZXJp YWxfbGxfYXR0bihzdHJ1Y3QgaXBtaV9zZXJpYWxfaW5mbyAqaW5mbyk7CisKKy8qCisgKiBD YWxsZWQgYnkgdGhlIGxvd2VyIGxheWVyIHdoZW4gYSBmdWxsIG1lc3NhZ2UgcmVzcG9uc2Ug aXMgcmVjZWl2ZWQuCisgKiBUaGUgc2VxIHdpbGwgYmUgc2V0IHRvIHRoZSB2YWx1ZSBzdXBw bGllZCB0byB0aGUgc3RhdGUgbWFjaGluZQorICogYXQgc2VuZCB0aW1lLgorICovCitleHRl cm4gdm9pZCBpcG1pX3NlcmlhbF9sbF9yZWN2KHN0cnVjdCBpcG1pX3NlcmlhbF9pbmZvICpp bmZvLAorCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsCisJCQkJdW5zaWduZWQgaW50 IGxlbiwKKwkJCQl1bnNpZ25lZCBpbnQgc2VxKTsKKworLyoKKyAqIENhbGxlZCB3aGVuIHRo ZSBsb3dlciBsYXllciByZWNlaXZlcyBhbiBhc3luYyBtZXNzYWdlIChhc3N1bWluZyBpdAor ICogaGFzIGEgZGlmZmVyZW50IHdheSB0byBkbyB0aGlzIHRoYW4gbm9ybWFsIGZsYWcgaGFu ZGxpbmcpIFRoZXNlIG1heQorICogYmUgcmVjZWl2ZWQgY29tbWFuZHMgb3IgZXZlbnRzIGJh c2VkIHVwb24gdGhlIHJ1bGVzIHNwZWNpZmllZAorICogYWJvdmUuCisgKi8KK2V4dGVybiB2 b2lkIGlwbWlfc2VyaWFsX2xsX2FzeW5jKHN0cnVjdCBpcG1pX3NlcmlhbF9pbmZvICppbmZv LAorCQkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLAorCQkJCSB1bnNpZ25lZCBpbnQg bGVuKTsKKworLyoKKyAqIFVzZWQgdG8gcmVwb3J0IHZhcmlvdXMgbG93LWxldmVsIGVycm9y cy4KKyAqLworZXh0ZXJuIHZvaWQgaXBtaV9zZXJpYWxfbGxfcHJvdG9jb2xfdmlvbGF0aW9u KHN0cnVjdCBpcG1pX3NlcmlhbF9pbmZvICppbmZvKTsKK2V4dGVybiB2b2lkIGlwbWlfc2Vy aWFsX2xsX2NoZWNrc3VtX2Vycm9yKHN0cnVjdCBpcG1pX3NlcmlhbF9pbmZvICppbmZvKTsK KworLyoKKyAqIFRoZXNlIGZ1bmN0aW9ucyBhbGxvdyBjb2RlY3MgdG8gcmVnaXN0ZXIgYW5k IHVucmVnaXN0ZXIgd2l0aCB0aGUgc2VyaWFsCisgKiBzeXN0ZW0gaW50ZXJmYWNlIGxheWVy LgorICovCitleHRlcm4gaW50IGlwbWlfc2VyaWFsX2NvZGVjX3JlZ2lzdGVyKHN0cnVjdCBp cG1pX3NlcmlhbF9jb2RlYyAqY29kZWMpOworZXh0ZXJuIHZvaWQgaXBtaV9zZXJpYWxfY29k ZWNfdW5yZWdpc3RlcihzdHJ1Y3QgaXBtaV9zZXJpYWxfY29kZWMgKmNvZGVjKTsKKworLyoK KyAqIEV4cGVjdGVkIGZsb3cgaG93IGhvdyB0aGluZ3MgaGFwcGVuIG9uIHRoaXMgaW50ZXJm YWNlOgorICoKKyAqICAgICBVcHBlciBMYXllciAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBMb3dlciBMYXllcgorICogICAgIAkgICB8ICAgCSAgICAgICAJICAgICAgIAkg ICAgICAgCQkJfAorICogCSAgIHwtLS0tLS0tLS0tLS0tLS0taW5pdC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tPnwKKyAqIAkgICB8CQkJICAgICAgIAkJCXwKKyAqICAgICAJICAgfDwtLS0t LS0tLS0tLS0tLS14bWl0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorICogCSAgIHwJCQkg ICAgICAgCQkJfAorICogICAgIAkgICB8LS0tLS0tLS0tLS1oYW5kbGVfY2hhci0tLS0tLS0t LS0tLS0tLS0tLS0tLT58CisgKiAgICAgCSAgIHwtLS0tLS0tLS0tLWhhbmRsZV9jaGFyLS0t LS0tLS0tLS0tLS0tLS0tLS0tPnwKKyAqICAgICAJICAgfC0tLS0tLS0tLS0taGFuZGxlX2No YXItLS0tLS0tLS0tLS0tLS0tLS0tLS0+fAorICogICAgIAkgICB8ICAgCSAgICAgICAJCSAg ICAgICAJCQl8CisgKiAgICAgCSAgIHw8LS0tLS0tLS0tLS0taW5pdF9jb21wbGV0ZS0tLS0t LS0tLS0tLS0tLS0tLXwKKyAqIAkgICB8CQkJICAgICAgIAkJCXwKKyAqICAgICAJICAgfC0t LS0tLS0tLS0tLS0tc2VuZF9tc2ctLS0tLS0tLS0tLS0tLS0tLS0tLS0+fAorICogCSAgIHwJ CQkgICAgICAgCQkJfAorICogICAgIAkgICB8PC0tLS0tLS0tLS0teG1pdCAocmV0dXJuIGxl c3MpLS0tLS0tLS0tLS0tLS18CisgKiAJICAgfAkJCSAgICAgICAJICAJCXwKKyAqICAgICAJ ICAgfC0tLS0tLS0tLS0tLXR4X3JlYWR5LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+fAorICog CSAgIHwJCQkgICAgICAgCQkJfAorICogICAgIAkgICB8PC0tLS0tLS0tLS0tLS0tLXhtaXQt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CisgKiAJICAgfAkJCSAgICAgICAJICAgICAJCXwK KyAqICAgICAJICAgfDwtLS0tLS0tLS0tLS0tc2VuZF9jb21wbGV0ZS0tLS0tLS0tLS0tLS0t LS0tfAorICogCSAgIHwJCQkgICAgICAgCSAgICAgCQl8CisgKiAgICAgCSAgIHwtLS0tLS0t LS0tLWhhbmRsZV9jaGFyLS0tLS0tLS0tLS0tLS0tLS0tLS0tPnwKKyAqICAgICAJICAgfC0t LS0tLS0tLS0taGFuZGxlX2NoYXItLS0tLS0tLS0tLS0tLS0tLS0tLS0+fAorICogICAgIAkg ICB8LS0tLS0tLS0tLS1oYW5kbGVfY2hhci0tLS0tLS0tLS0tLS0tLS0tLS0tLT58CisgKiAJ ICAgfAkJCSAgICAgICAJICAgICAJCXwKKyAqICAgICAJICAgfDwtLS0tLS0tLS0tLS0tLS1y ZWN2LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorICogCSAgIHwJCQkgICAgICAgCSAgICAg CQl8CisgKiAgICAgCSAgIHwtLS0tLS0tLS0tLWhhbmRsZV9jaGFyLS0tLS0tLS0tLS0tLS0t LS0tLS0tPnwKKyAqIAkgICB8CQkJICAgICAgIAkgICAgIAkJfAorICogICAgIAkgICB8PC0t LS0tLS0tLS0tLS0tLWF0dG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CisgKiAJICAgfAkJ CSAgICAgICAJICAgICAJCXwKKyAqICAgICAJICAgfC0tLS0tLS0tLS0tLS0tc2VuZF9tc2co R0VUX0ZMQUdTKS0tLS0tLS0tLS0+fAorICogCSAgIHwJCQkgICAgICAgCSAgICAgCQl8Cisg KiAgICAgCSAgIHw8LS0tLS0tLS0tLS0tLS0teG1pdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LXwKKyAqIAkgICB8CQkJICAgICAgIAkgICAgIAkJfAorICogICAgIAkgICB8PC0tLS0tLS0t LS0tLS1zZW5kX2NvbXBsZXRlLS0tLS0tLS0tLS0tLS0tLS18CisgKiAJICAgfAkJCSAgICAg ICAJICAgICAJCXwKKyAqICAgICAJICAgfC0tLS0tLS0tLS0taGFuZGxlX2NoYXItLS0tLS0t LS0tLS0tLS0tLS0tLS0+fAorICogICAgIAkgICB8LS0tLS0tLS0tLS1oYW5kbGVfY2hhci0t LS0tLS0tLS0tLS0tLS0tLS0tLT58CisgKiAgICAgCSAgIHwtLS0tLS0tLS0tLWhhbmRsZV9j aGFyLS0tLS0tLS0tLS0tLS0tLS0tLS0tPnwKKyAqIAkgICB8CQkJICAgICAgIAkgICAgIAkJ fAorICogICAgIAkgICB8PC0tLS0tLS0tLS0tLS0tLXJlY3YtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS18CisgKiAJICAgfAkJCSAgICAgICAJCQl8CisgKiAgICAgCSAgIHwtLS0tLS0tLS0t LS0tLWNsZWFudXAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tPnwKKyAqIAkgICB8CQkJICAgICAg IAkJCXwKKyAqLworI2VuZGlmIC8qIF9JUE1JX1NFUklBTF9TTV9IICovCmRpZmYgLXUgLS1u ZXctZmlsZSAtLXJlY3Vyc2l2ZSBsaW51eC0yLjYuMjkuNi5vcmlnL2luY2x1ZGUvbGludXgv cGNpX2lkcy5oIGxpbnV4LTIuNi4yOS42Lm1vZC9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaAot LS0gbGludXgtMi42LjI5LjYub3JpZy9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaAkyMDA5LTA3 LTAyIDE2OjQxOjIwLjAwMDAwMDAwMCAtMDcwMAorKysgbGludXgtMi42LjI5LjYubW9kL2lu Y2x1ZGUvbGludXgvcGNpX2lkcy5oCTIwMDktMDctMjEgMTE6Mjg6MTguMDAwMDAwMDAwIC0w NzAwCkBAIC0xMjU5LDYgKzEyNTksOSBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lNU19U VDEyOAkJMHg5MTI4CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU1TX1RUM0QJCTB4OTEzNQog CisjZGVmaW5lIFBDSV9WRU5ET1JfSURfVFVORFJBICAgICAgICAgICAgMHgxMGUzCisjZGVm aW5lIFBDSV9ERVZJQ0VfSURfVFVORFJBX0NBOTFDMDQyICAgMHgwMDAwCisKICNkZWZpbmUg UENJX1ZFTkRPUl9JRF9JTlRFUkcJCTB4MTBlYQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lO VEVSR18xNjgyCTB4MTY4MgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVSR18yMDAwCTB4 MjAwMApkaWZmIC11IC0tbmV3LWZpbGUgLS1yZWN1cnNpdmUgbGludXgtMi42LjI5LjYub3Jp Zy9pbml0L2RvX21vdW50cy5jIGxpbnV4LTIuNi4yOS42Lm1vZC9pbml0L2RvX21vdW50cy5j Ci0tLSBsaW51eC0yLjYuMjkuNi5vcmlnL2luaXQvZG9fbW91bnRzLmMJMjAwOS0wNy0wMiAx Njo0MToyMC4wMDAwMDAwMDAgLTA3MDAKKysrIGxpbnV4LTIuNi4yOS42Lm1vZC9pbml0L2Rv X21vdW50cy5jCTIwMDktMDctMjEgMTE6Mjg6MTguMDAwMDAwMDAwIC0wNzAwCkBAIC0yMzcs NiArMjM3LDcgQEAKICNlbHNlCiAJY29uc3QgY2hhciAqYiA9IG5hbWU7CiAjZW5kaWYKKwlp bnQgcmV0cmllcyA9IDA7CiAKIAlnZXRfZnNfbmFtZXMoZnNfbmFtZXMpOwogcmV0cnk6CkBA IC0yNTksMTYgKzI2MCwzMCBAQAogI2lmZGVmIENPTkZJR19CTE9DSwogCQlfX2JkZXZuYW1l KFJPT1RfREVWLCBiKTsKICNlbmRpZgotCQlwcmludGsoIlZGUzogQ2Fubm90IG9wZW4gcm9v dCBkZXZpY2UgXCIlc1wiIG9yICVzXG4iLAorCQlwcmludGsoIlZGUzogQ2Fubm90IG9wZW4g cm9vdCBkZXZpY2UgXCIlc1wiIG9yICVzLCByZXRyeWluZyBpbiAxIHNlY29uZFxuIiwKIAkJ CQlyb290X2RldmljZV9uYW1lLCBiKTsKLQkJcHJpbnRrKCJQbGVhc2UgYXBwZW5kIGEgY29y cmVjdCBcInJvb3Q9XCIgYm9vdCBvcHRpb247IGhlcmUgYXJlIHRoZSBhdmFpbGFibGUgcGFy dGl0aW9uczpcbiIpOworCQlyZXRyaWVzKys7CisJCWlmIChyZXRyaWVzIDwgMTApIHsKKwkJ CS8qIHdhaXQgMSBzZWNvbmQgYW5kIHRyeSBhZ2FpbiAqLworCQkJY3VycmVudC0+c3RhdGUg PSBUQVNLX0lOVEVSUlVQVElCTEU7CisJCQlzY2hlZHVsZV90aW1lb3V0KEhaKTsKKwkJCXJv b3RfZGV2aWNlX25hbWUgPSBzYXZlZF9yb290X25hbWU7CisJCQlST09UX0RFViA9IG5hbWVf dG9fZGV2X3Qocm9vdF9kZXZpY2VfbmFtZSk7CisJCQlpZiAoc3RybmNtcChyb290X2Rldmlj ZV9uYW1lLCAiL2Rldi8iLCA1KSA9PSAwKQorCQkJCXJvb3RfZGV2aWNlX25hbWUgKz0gNTsK KwkJCWNyZWF0ZV9kZXYoIi9kZXYvcm9vdCIsIFJPT1RfREVWKTsKKwkJCWdldF9mc19uYW1l cyhmc19uYW1lcyk7CisJCQlnb3RvIHJldHJ5OworCQl9IGVsc2UgeworCQkJcHJpbnRrKCJQ bGVhc2UgYXBwZW5kIGEgY29ycmVjdCBcInJvb3Q9XCIgYm9vdCBvcHRpb247IGhlcmUgYXJl IHRoZSBhdmFpbGFibGUgcGFydGl0aW9uczpcbiIpOwogCi0JCXByaW50a19hbGxfcGFydGl0 aW9ucygpOworCQkJcHJpbnRrX2FsbF9wYXJ0aXRpb25zKCk7CiAjaWZkZWYgQ09ORklHX0RF QlVHX0JMT0NLX0VYVF9ERVZUCi0JCXByaW50aygiREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMg ZW5hYmxlZCwgeW91IG5lZWQgdG8gc3BlY2lmeSAiCisJCQlwcmludGsoIkRFQlVHX0JMT0NL X0VYVF9ERVZUIGlzIGVuYWJsZWQsIHlvdSBuZWVkIHRvIHNwZWNpZnkgIgogCQkgICAgICAg ImV4cGxpY2l0IHRleHR1YWwgbmFtZSBmb3IgXCJyb290PVwiIGJvb3Qgb3B0aW9uLlxuIik7 CiAjZW5kaWYKLQkJcGFuaWMoIlZGUzogVW5hYmxlIHRvIG1vdW50IHJvb3QgZnMgb24gJXMi LCBiKTsKKwkJCXBhbmljKCJWRlM6IFVuYWJsZSB0byBtb3VudCByb290IGZzIG9uICVzIiwg Yik7CisJCX0KIAl9CiAKIAlwcmludGsoIkxpc3Qgb2YgYWxsIHBhcnRpdGlvbnM6XG4iKTsK ZGlmZiAtdSAtLW5ldy1maWxlIC0tcmVjdXJzaXZlIGxpbnV4LTIuNi4yOS42Lm9yaWcva2Vy bmVsL3Jlc291cmNlLmMgbGludXgtMi42LjI5LjYubW9kL2tlcm5lbC9yZXNvdXJjZS5jCi0t LSBsaW51eC0yLjYuMjkuNi5vcmlnL2tlcm5lbC9yZXNvdXJjZS5jCTIwMDktMDctMDIgMTY6 NDE6MjAuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYuMjkuNi5tb2Qva2VybmVsL3Jl c291cmNlLmMJMjAwOS0wNy0yMSAxMToyODoxOC4wMDAwMDAwMDAgLTA3MDAKQEAgLTM4MSw4 ICszODEsOCBAQAogCiAJCWlmICgoZmlyc3QtPnN0YXJ0ID4gbmV3LT5zdGFydCkgfHwgKGZp cnN0LT5lbmQgPCBuZXctPmVuZCkpCiAJCQlicmVhazsKLQkJaWYgKChmaXJzdC0+c3RhcnQg PT0gbmV3LT5zdGFydCkgJiYgKGZpcnN0LT5lbmQgPT0gbmV3LT5lbmQpKQotCQkJYnJlYWs7 CisvLwkJaWYgKChmaXJzdC0+c3RhcnQgPT0gbmV3LT5zdGFydCkgJiYgKGZpcnN0LT5lbmQg PT0gbmV3LT5lbmQpKQorLy8JCQlicmVhazsKIAl9CiAKIAlmb3IgKG5leHQgPSBmaXJzdDsg OyBuZXh0ID0gbmV4dC0+c2libGluZykgewpkaWZmIC11IC0tbmV3LWZpbGUgLS1yZWN1cnNp dmUgbGludXgtMi42LjI5LjYub3JpZy9NYWtlZmlsZSBsaW51eC0yLjYuMjkuNi5tb2QvTWFr ZWZpbGUKLS0tIGxpbnV4LTIuNi4yOS42Lm9yaWcvTWFrZWZpbGUJMjAwOS0wNy0wMiAxNjo0 MToyMC4wMDAwMDAwMDAgLTA3MDAKKysrIGxpbnV4LTIuNi4yOS42Lm1vZC9NYWtlZmlsZQky MDA5LTA3LTIxIDExOjI4OjE4LjAwMDAwMDAwMCAtMDcwMApAQCAtMTkwLDggKzE5MCwxOSBA QAogIyBEZWZhdWx0IHZhbHVlIGZvciBDUk9TU19DT01QSUxFIGlzIG5vdCB0byBwcmVmaXgg ZXhlY3V0YWJsZXMKICMgTm90ZTogU29tZSBhcmNoaXRlY3R1cmVzIGFzc2lnbiBDUk9TU19D T01QSUxFIGluIHRoZWlyIGFyY2gvKi9NYWtlZmlsZQogZXhwb3J0IEtCVUlMRF9CVUlMREhP U1QgOj0gJChTVUJBUkNIKQotQVJDSAkJPz0gJChTVUJBUkNIKQotQ1JPU1NfQ09NUElMRQk/ PQorI0FSQ0gJCT89ICQoU1VCQVJDSCkKKyNDUk9TU19DT01QSUxFCT89CisKKyNBUkNIICAg ICAgICAgICA/PSBwb3dlcnBjCisKKyMgdXNlIHBwY184NXh4LSBmb3IgTVZNRTMxMDAKKyMg dXNlIHBwY184NXh4RFAtIGZvciBNVk1FNDEwMCwgQ1BDSTYyMDAKKyMgdXNlIHBwY182eHgt IGZvciBNQ1A3NTAKKyMgdXNlIHBwY183NHh4LSBmb3IgTVZNRTU1MDAsIE1WTUU2MTAwLCBN Vk1FNzEwMCwgTUNQODIwLCBNQ1A5MDUKKyNDUk9TU19DT01QSUxFICA/PSBwcGNfODV4eC0K KyNDUk9TU19DT01QSUxFICA/PSBwcGNfODV4eERQLQorI0NST1NTX0NPTVBJTEUgID89IHBw Y183NHh4LQorI0NST1NTX0NPTVBJTEUgID89IHBwY182eHgtCiAKICMgQXJjaGl0ZWN0dXJl IGFzIHByZXNlbnQgaW4gY29tcGlsZS5oCiBVVFNfTUFDSElORSAJOj0gJChBUkNIKQo= --------------050004010800000100010608--