From owner-freebsd-multimedia@FreeBSD.ORG Sat Feb 5 16:23:36 2011 Return-Path: Delivered-To: freebsd-multimedia@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 3348A106566B for ; Sat, 5 Feb 2011 16:23:36 +0000 (UTC) (envelope-from lists@yamagi.org) Received: from mail.yamagi.overkill.yamagi.org (unknown [IPv6:2a01:4f8:121:2102:1::7]) by mx1.freebsd.org (Postfix) with ESMTP id 1E5CB8FC0A for ; Sat, 5 Feb 2011 16:23:33 +0000 (UTC) Received: from [2001:6f8:108a:1:21b:21ff:fe07:b562] (unknown [IPv6:2001:6f8:108a:1:21b:21ff:fe07:b562]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.yamagi.overkill.yamagi.org (Postfix) with ESMTPSA id 1925116663D1 for ; Sat, 5 Feb 2011 17:23:28 +0100 (CET) Date: Sat, 5 Feb 2011 17:23:21 +0100 (CET) From: Yamagi Burmeister X-X-Sender: yamagi@saya.home.yamagi.org To: freebsd-multimedia@freebsd.org Message-ID: User-Agent: Alpine 2.00 (BSF 1167 2008-08-23) MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="2787499574-1545880458-1296923009=:82659" Subject: [patch] webcamd support for TerraTec Cinergy TStick RC MK2 X-BeenThere: freebsd-multimedia@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Multimedia discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 05 Feb 2011 16:23:36 -0000 This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. --2787499574-1545880458-1296923009=:82659 Content-Type: TEXT/PLAIN; format=flowed; charset=US-ASCII Hi, I recently bought a "TerraTec Cinergy TStick RC" in revision "MK2". This is currently unsupported by v4l and by webcamd but with somes hours hacking I was able to get i work. This stick is another af9015 device, the tuner is a rather uncommon tda18218. This work is based upon the patchset found here: http://media.cdn.ubuntu-de.org/forum/attachments/2489836/cinergy-stick-rc.patch.gz Attached are two patches. In case they're stripped by mailman they can be found on my webspace: http://deponie.yamagi.org/freebsd/dvbt/ Both patches are against webcamd r1724. cinergy_rc_mk2.diff This one adds support for the tda18218 tuner to v4l and the device id of the stick to af9015.c. This patch applies against the patched(!) v4l-dvb-abd3aac6644e/ directory. webcamd_r1724.diff This is the Makefile glue for the tda18218 tuner for the webcamd Makefile. It just adds the new file tda18218.c and the DCONFIG_MEDIA_TUNER_TDA18218 preprocessor makro. This device needs a firmware file named "dvb-usb-af9015.fw". For license reasons I won't upload it to my webspace but google is your friend... ---- Some information: dmesg: ugen2.2: at usbus2 ukbd1: on usbus2 kbd3 at ukbd1 usbconfig -u 2 -a 2 dump_device_desc: bLength = 0x0012 bDescriptorType = 0x0001 bcdUSB = 0x0200 bDeviceClass = 0x0000 bDeviceSubClass = 0x0000 bDeviceProtocol = 0x0000 bMaxPacketSize0 = 0x0040 idVendor = 0x0ccd idProduct = 0x0097 bcdDevice = 0x0200 iManufacturer = 0x0001 iProduct = 0x0002 iSerialNumber = 0x0003 <010101010600001> bNumConfigurations = 0x0001 webcamd: Attached ugen2.2[0] to cuse unit 0 Creating /dev/dvb/adapter0/demux0 Creating /dev/dvb/adapter0/dvr0 Creating /dev/dvb/adapter0/frontend0 ---- Status: - Scan for dvb-t station with w_scan is working. All available stations are found. - Playback with mplayer works - Station switching with mplayer works ---- Little tutorial: % svn --username anonsvn --password anonsvn checkout \ svn://svn.turbocat.net/i4b/trunk/usbcam/ulinux % cd ulinux % make fetch % cd patches % ./do_patch.sh % cd .. % patch < webcamd_r1724.diff % patch < cinergy_rc_mk2.diff % make -j4 Ciao, Yamagi -- Homepage: www.yamagi.org Jabber: yamagi@yamagi.org GnuPG/GPG: 0xEFBCCBCB --2787499574-1545880458-1296923009=:82659 Content-Type: TEXT/PLAIN; charset=US-ASCII; name=webcamd_r1724.diff Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename=webcamd_r1724.diff SW5kZXg6IE1ha2VmaWxlDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0g TWFrZWZpbGUJKFJldmlzaW9uIDE3MjQpDQorKysgTWFrZWZpbGUJKEFyYmVp dHNrb3BpZSkNCkBAIC03MTcsNiArNzE3LDcgQEANCiBDRkxBR1MrPSAtRENP TkZJR19NRURJQV9UVU5FUl9RVDEwMTANCiBDRkxBR1MrPSAtRENPTkZJR19N RURJQV9UVU5FUl9TSU1QTEUNCiBDRkxBR1MrPSAtRENPTkZJR19NRURJQV9U VU5FUl9UREExODI3MQ0KK0NGTEFHUys9IC1EQ09ORklHX01FRElBX1RVTkVS X1REQTE4MjE4DQogQ0ZMQUdTKz0gLURDT05GSUdfTUVESUFfVFVORVJfVERB ODI3WA0KIENGTEFHUys9IC1EQ09ORklHX01FRElBX1RVTkVSX1REQTgyOTAN CiBDRkxBR1MrPSAtRENPTkZJR19NRURJQV9UVU5FUl9UREE5ODg3DQpAQCAt Nzc1LDYgKzc3Niw3IEBADQogU1JDUys9IHRkYTgyNnguYw0KIFNSQ1MrPSB0 ZGE4Mjd4LmMNCiBTUkNTKz0gdGRhODI5MC5jDQorU1JDUys9IHRkYTE4MjE4 LmMNCiBTUkNTKz0gdHVuZXItc2ltcGxlLmMNCiBTUkNTKz0gdHVuZXItdHlw ZXMuYw0KIFNSQ1MrPSB0dW5lci14YzIwMjguYw0K --2787499574-1545880458-1296923009=:82659 Content-Type: TEXT/PLAIN; charset=US-ASCII; name=cinergy_rc_mk2.diff Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename=cinergy_rc_mk2.diff LS0tIHY0bC1kdmItYWJkM2FhYzY2NDRlL2xpbnV4L2RyaXZlcnMvbWVkaWEv Y29tbW9uL3R1bmVycy9LY29uZmlnLm9yaWcJMjAxMC0wNy0wMiAwNTozODo1 NC4wMDAwMDAwMDAgKzAyMDANCisrKyB2NGwtZHZiLWFiZDNhYWM2NjQ0ZS9s aW51eC9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvS2NvbmZpZwkyMDEx LTAyLTA1IDE2OjMxOjQ1LjM5MDE0Njc5NiArMDEwMA0KQEAgLTE3OSw0ICsx NzksMTEgQEANCiAJaGVscA0KIAkgIEEgZHJpdmVyIGZvciB0aGUgc2lsaWNv biB0dW5lciBNQVgyMTY1IGZyb20gTWF4aW0uDQogDQorY29uZmlnIE1FRElB X1RVTkVSX1REQTE4MjE4DQorICAgICAgICB0cmlzdGF0ZSAiTlhQIFREQTE4 MjE4IHNpbGljb24gdHVuZXIiDQorICAgICAgICBkZXBlbmRzIG9uIFZJREVP X01FRElBICYmIEkyQw0KKyAgICAgICAgZGVmYXVsdCBtIGlmIE1FRElBX1RV TkVSX0NVU1RPTUlTRQ0KKyAgICAgICAgaGVscA0KKyAgICAgICAgICBBIGRy aXZlciBmb3IgdGhlIHNpbGljb24gdHVuZXIgVERBMTgyMTggZnJvbSBOWFAu DQorDQogZW5kaWYgIyBNRURJQV9UVU5FUl9DVVNUT01JU0UNCi0tLSB2NGwt ZHZiLWFiZDNhYWM2NjQ0ZS9saW51eC9kcml2ZXJzL21lZGlhL2NvbW1vbi90 dW5lcnMvdGRhMTgyMTguYy5vcmlnCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAw MDAwMDAwICswMTAwDQorKysgdjRsLWR2Yi1hYmQzYWFjNjY0NGUvbGludXgv ZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjE4LmMJMjAxMS0w Mi0wNSAxNjozMTo0NS40MDExNzU5MDMgKzAxMDANCkBAIC0wLDAgKzEsNDcx IEBADQorLyoNCisgKiAgRHJpdmVyIGZvciBOWFAgVERBMTgyMTggc2lsaWNv biB0dW5lcg0KKyAqDQorICogIENvcHlyaWdodCAoQykgMjAxMCBMYXVyaXMg RGluZyA8bGRpbmdAZ214LmRlPg0KKyAqICBUaGlzIHByb2dyYW0gaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v ZGlmeQ0KKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQ0KKyAqICB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9m IHRoZSBMaWNlbnNlLCBvcg0KKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBs YXRlciB2ZXJzaW9uLg0KKyAqDQorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0K KyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KKyAqICBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl DQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuDQorICoNCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg Y29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UNCisgKiAg YWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhl IEZyZWUgU29mdHdhcmUNCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1h c3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuDQorICovDQorI2lu Y2x1ZGUgInRkYTE4MjE4LmgiDQorI2luY2x1ZGUgImNvbXBhdC5oIg0KKyNp bmNsdWRlICJ0ZGExODIxOF9wcml2LmgiDQorDQorc3RhdGljIGludCB0ZGEx ODIxOF93cml0ZV9yZWcoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHU4IHJl ZywgdTggdmFsKQ0KK3sNCisJc3RydWN0IHRkYTE4MjE4X3ByaXYgKnByaXYg PSBmZS0+dHVuZXJfcHJpdjsNCisJdTggYnVmWzJdID0geyByZWcsIHZhbCB9 Ow0KKwlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7IC5hZGRyID0gcHJpdi0+Y2Zn LT5pMmNfYWRkcmVzcywgLmZsYWdzID0gMCwNCisJCQkgICAgICAgLmJ1ZiA9 IGJ1ZiwgLmxlbiA9IDIgfTsNCisJaW50IHJldDsNCisNCisJaWYgKGZlLT5v cHMuaTJjX2dhdGVfY3RybCkNCisJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChm ZSwgMSk7DQorCS8qIHdyaXRlIHJlZ2lzdGVyICovDQorCXJldCA9IGkyY190 cmFuc2Zlcihwcml2LT5pMmMsICZtc2csIDEpOw0KKwlpZiAoZmUtPm9wcy5p MmNfZ2F0ZV9jdHJsKQ0KKwkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAw KTsNCisNCisJaWYgKHJldCAhPSAxKQ0KKwkJcHJpbnRrKEtFUk5fV0FSTklO RyAiSTJDIHdyaXRlIGZhaWxlZCByZXQ6ICVkIHJlZzogJTAyeFxuIiwgcmV0 LCByZWcpOw0KKw0KKwlyZXR1cm4gKHJldCA9PSAxID8gMCA6IHJldCk7DQor fQ0KKw0KK3N0YXRpYyBpbnQgdGRhMTgyMThfd3JpdGVfcmVncyhzdHJ1Y3Qg ZHZiX2Zyb250ZW5kICpmZSwgdTggcmVnLA0KKwl1OCAqdmFsLCB1OCBsZW4p DQorew0KKwlzdHJ1Y3QgdGRhMTgyMThfcHJpdiAqcHJpdiA9IGZlLT50dW5l cl9wcml2Ow0KKwl1OCBidWZbMStsZW5dOw0KKwlzdHJ1Y3QgaTJjX21zZyBt c2cgPSB7DQorCQkuYWRkciA9IHByaXYtPmNmZy0+aTJjX2FkZHJlc3MsDQor CQkuZmxhZ3MgPSAwLA0KKwkJLmxlbiA9IHNpemVvZihidWYpLA0KKwkJLmJ1 ZiA9IGJ1ZiB9Ow0KKwkJDQorCWludCByZXQ7DQorDQorCWJ1ZlswXSA9IHJl ZzsNCisJbWVtY3B5KCZidWZbMV0sIHZhbCwgbGVuKTsNCisJDQorCWlmIChm ZS0+b3BzLmkyY19nYXRlX2N0cmwpDQorCQlmZS0+b3BzLmkyY19nYXRlX2N0 cmwoZmUsIDEpOw0KKwlyZXQgPSBpMmNfdHJhbnNmZXIocHJpdi0+aTJjLCAm bXNnLCAxKTsNCisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkNCisJCWZl LT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7DQorDQorCWlmIChyZXQgIT0g MSkNCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkkyQyB3cml0ZSBmYWlsZWQg cmV0OiAlZCByZWc6ICUwMnggbGVuOiAlZFxuIiwgcmV0LCByZWcsIGxlbik7 DQorCQ0KKwlyZXR1cm4gKHJldCA9PSAxID8gMCA6IHJldCk7DQorfQ0KKw0K Ky8qc3RhdGljIGludCB0ZGExODIxOF9yZWFkX3JlZyhzdHJ1Y3QgdGRhMTgy MThfcHJpdiAqcHJpdiwgdTE2IHJlZywgdTggKnZhbCkNCit7DQorCXU4IG9i dWZbM10gPSB7IHJlZyA+PiA4LCByZWcgJiAweGZmLCAwIH07DQorCXU4IGli dWZbMV07DQorCXN0cnVjdCBpMmNfbXNnIG1zZ1syXSA9IHsNCisJCXsNCisJ CQkuYWRkciA9IDB4M2EsDQorCQkJLmZsYWdzID0gMCwNCisJCQkubGVuID0g c2l6ZW9mKG9idWYpLA0KKwkJCS5idWYgPSBvYnVmDQorCQl9LCB7DQorCQkJ LmFkZHIgPSAweDNhLA0KKwkJCS5mbGFncyA9IEkyQ19NX1JELA0KKwkJCS5s ZW4gPSBzaXplb2YoaWJ1ZiksDQorCQkJLmJ1ZiA9IGlidWYNCisJCX0NCisJ fTsNCisNCisJaWYgKGkyY190cmFuc2Zlcihwcml2LT5pMmMsIG1zZywgMikg IT0gMikgew0KKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiSTJDIHJlYWQgZmFp bGVkIHJlZzolMDR4XG4iLCByZWcpOw0KKwkJcmV0dXJuIC1FUkVNT1RFSU87 DQorCX0NCisJKnZhbCA9IGlidWZbMF07DQorCXJldHVybiAwOw0KK30qLw0K Kw0KK3N0YXRpYyBpbnQgdGRhMTgyMThfcmVhZF9yZWdzKHN0cnVjdCBkdmJf ZnJvbnRlbmQgKmZlKQ0KK3sNCisJc3RydWN0IHRkYTE4MjE4X3ByaXYgKnBy aXYgPSBmZS0+dHVuZXJfcHJpdjsNCisJdTggKnJlZ3MgPSBwcml2LT50ZGEx ODIxOF9yZWdzOw0KKwl1OCBidWYgPSAweDAwOw0KKwlpbnQgcmV0Ow0KKwkv L2ludCBpOw0KKwlzdHJ1Y3QgaTJjX21zZyBtc2dbXSA9IHsNCisJCXsgLmFk ZHIgPSAweGMwLCAuZmxhZ3MgPSAwLA0KKwkJICAuYnVmID0gJmJ1ZiwgLmxl biA9IDEgfSwNCisJCXsgLmFkZHIgPSAweGMwLCAuZmxhZ3MgPSBJMkNfTV9S RCwNCisJCSAgLmJ1ZiA9IHJlZ3MsIC5sZW4gPSA1OSB9DQorCX07DQorDQor CWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpDQorCQlmZS0+b3BzLmkyY19n YXRlX2N0cmwoZmUsIDEpOw0KKw0KKwkvKiByZWFkIGFsbCByZWdpc3RlcnMg Ki8NCisJcmV0ID0gaTJjX3RyYW5zZmVyKHByaXYtPmkyYywgbXNnLCAyKTsN CisNCisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkNCisJCWZlLT5vcHMu aTJjX2dhdGVfY3RybChmZSwgMCk7DQorDQorCWlmIChyZXQgIT0gMikNCisJ CXByaW50ayhLRVJOX1dBUk5JTkcgIkkyQyByZWFkIGZhaWxlZCByZXQ6ICVk XG4iLCByZXQpOw0KKwkNCisJLypmb3IoaSA9IDA7IGkgPD0gNTg7IGkrKykN CisJCXByaW50aygiUmVnaXN0ZXIgJWQ6ICUwMnhcbiIsIGksIDB4ZmYgJiBy ZWdzW2ldKTsqLw0KKw0KKwlyZXR1cm4gKHJldCA9PSAyID8gMCA6IHJldCk7 DQorfQ0KKw0KK3N0YXRpYyBpbnQgdGRhMTgyMThfc2V0X3BhcmFtcyhzdHJ1 Y3QgZHZiX2Zyb250ZW5kICpmZSwgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJh bWV0ZXJzICpwYXJhbXMpDQorew0KKwlzdHJ1Y3QgdGRhMTgyMThfcHJpdiAq cHJpdiA9IGZlLT50dW5lcl9wcml2Ow0KKwl1OCAqcmVncyA9IHByaXYtPnRk YTE4MjE4X3JlZ3M7DQorCXU4IEZjLCBCUDsNCisJaW50IGksIHJldDsNCisJ dTE2IGlmMSwgYnc7DQorCXUzMiBmcmVxOw0KKwkNCisJdTggcGFyYW1zYnVm WzRdWzZdID0gew0KKwkJeyAweDAzLCAweDFhIH0sDQorCQl7IDB4MDQsIDB4 MGEgfSwNCisJCXsgMHgwMSwgMHgwZiB9LA0KKwkJeyAweDAxLCAweDBmIH0s DQorCX07DQorCQ0KKwl1OCBhZ2NidWZbXVsyXSA9IHsNCisJCXsgMHgxYSwg MHgwZSB9LA0KKwkJeyAweDIwLCAweDYwIH0sDQorCQl7IDB4MjMsIDB4MDIg fSwNCisJCXsgMHgyMCwgMHhhMCB9LA0KKwkJeyAweDIzLCAweDA5IH0sDQor CQl7IDB4MjAsIDB4ZTAgfSwNCisJCXsgMHgyMywgMHgwYyB9LA0KKwkJeyAw eDIwLCAweDQwIH0sDQorCQl7IDB4MjMsIDB4MDEgfSwNCisJCXsgMHgyMCwg MHg4MCB9LA0KKwkJeyAweDIzLCAweDA4IH0sDQorCQl7IDB4MjAsIDB4YzAg fSwNCisJCXsgMHgyMywgMHgwYiB9LA0KKwkJeyAweDI0LCAweDFjIH0sDQor CQl7IDB4MjQsIDB4MGMgfSwNCisJfTsNCisJDQorCXN3aXRjaCAocGFyYW1z LT51Lm9mZG0uYmFuZHdpZHRoKSB7DQorCWNhc2UgQkFORFdJRFRIXzZfTUha Og0KKwkJYncgPSA2MDAwOw0KKwkJRmMgPSAwOw0KKwkJYnJlYWs7DQorCWNh c2UgQkFORFdJRFRIXzdfTUhaOg0KKwkJYncgPSA3MDAwOw0KKwkJRmMgPSAx Ow0KKwkJYnJlYWs7DQorCWNhc2UgQkFORFdJRFRIXzhfTUhaOg0KKwkJYncg PSA4MDAwOw0KKwkJRmMgPSAyOw0KKwkJYnJlYWs7DQorCWRlZmF1bHQ6DQor CQlwcmludGsoS0VSTl9XQVJOSU5HICJJbnZhbGlkIGJhbmR3aWR0aCIpOw0K KwkJcmV0dXJuIC1FSU5WQUw7DQorCX0NCisJDQorCWlmMSA9IGJ3IC8gMjsN CisJDQorCWlmKChwYXJhbXMtPmZyZXF1ZW5jeSA+PSAxNzQwMDAwMDApICYm IChwYXJhbXMtPmZyZXF1ZW5jeSA8IDE4ODAwMDAwMCkpIHsNCisJCUJQID0g MzsNCisJfQ0KKwllbHNlIGlmKChwYXJhbXMtPmZyZXF1ZW5jeSA+PSAxODgw MDAwMDApICYmIChwYXJhbXMtPmZyZXF1ZW5jeSA8IDI1MzAwMDAwMCkpIHsN CisJCUJQID0gNDsNCisJfQ0KKwllbHNlIGlmKChwYXJhbXMtPmZyZXF1ZW5j eSA+PSAyNTMwMDAwMDApICYmIChwYXJhbXMtPmZyZXF1ZW5jeSA8IDM0MzAw MDAwMCkpIHsNCisJCUJQID0gNTsNCisJfQ0KKwllbHNlIGlmKChwYXJhbXMt PmZyZXF1ZW5jeSA+PSAzNDMwMDAwMDApICYmIChwYXJhbXMtPmZyZXF1ZW5j eSA8PSA4NzAwMDAwMDApKSB7DQorCQlCUCA9IDY7DQorCX0NCisJZWxzZSB7 DQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJGcmVxdWVuY3kgb3V0IG9mIHJh bmdlIik7DQorCQlyZXR1cm4gLUVJTlZBTDsNCisJfQ0KKwkNCisJZnJlcSA9 IHBhcmFtcy0+ZnJlcXVlbmN5Ow0KKwlmcmVxIC89IDEwMDA7DQorCWZyZXEg Kz1pZjE7DQorCWZyZXEgKj0gMTY7DQorCQ0KKwl0ZGExODIxOF9yZWFkX3Jl Z3MoZmUpOw0KKwkNCisJcGFyYW1zYnVmWzBdWzJdID0gcmVnc1sweDFhXSB8 IEJQOw0KKwlwYXJhbXNidWZbMF1bM10gPSByZWdzWzB4MWJdICYgfjM7DQor CXBhcmFtc2J1ZlswXVszXSA9IHJlZ3NbMHgxYl0gfCBGYzsNCisJcGFyYW1z YnVmWzBdWzRdID0gcmVnc1sweDFjXSB8IDB4MGE7DQorCQ0KKwlwYXJhbXNi dWZbMV1bMl0gPSBmcmVxID4+IDE2Ow0KKwlwYXJhbXNidWZbMV1bM10gPSBm cmVxID4+IDg7DQorCXBhcmFtc2J1ZlsxXVs0XSA9IChmcmVxICYgMHhmMCkg fCAocmVnc1sweDBjXSAmIDB4MGYpOw0KKwlwYXJhbXNidWZbMV1bNV0gPSAw eGZmOw0KKwlwYXJhbXNidWZbMl1bMl0gPSByZWdzWzB4MGZdIHwgMHg0MDsN CisJcGFyYW1zYnVmWzNdWzJdID0gMHgwOTsNCisJDQorCXRkYTE4MjE4X3dy aXRlX3JlZyhmZSwgMHgwNCwgMHgwMyk7DQorDQorCWZvcihpID0gMDsgaSA8 IEFSUkFZX1NJWkUocGFyYW1zYnVmKTsgaSsrKSB7DQorDQorCQkvKiB3cml0 ZSByZWdpc3RlcnMgKi8NCisJCXJldCA9IHRkYTE4MjE4X3dyaXRlX3JlZ3Mo ZmUsIHBhcmFtc2J1ZltpXVsxXSwgJnBhcmFtc2J1ZltpXVsyXSwgcGFyYW1z YnVmW2ldWzBdKTsNCisNCisJCWlmIChyZXQpDQorCQkJZ290byBlcnJvcjsN CisJfQ0KKwlmb3IoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFnY2J1Zik7IGkr Kykgew0KKwkJdGRhMTgyMThfd3JpdGVfcmVnKGZlLCBhZ2NidWZbaV1bMF0s IGFnY2J1ZltpXVsxXSk7DQorCX0NCisJDQorCS8vdGRhMTgyMThfd3JpdGVf cmVnKGZlLCAweDAzLCAweDAwKTsNCisJLy90ZGExODIxOF93cml0ZV9yZWco ZmUsIDB4MDQsIDB4MDApOw0KKwkvL3RkYTE4MjE4X3dyaXRlX3JlZyhmZSwg MHgyMCwgMHhjNyk7DQorCQ0KKwltc2xlZXAoNjApOw0KKwlpID0gMDsNCisJ d2hpbGUoaSA8IDEwKSB7DQorCQl0ZGExODIxOF9yZWFkX3JlZ3MoZmUpOw0K KwkJaWYoKHJlZ3NbMHgwMV0gJiAweDYwKSA9PSAweDYwKQ0KKwkJCXByaW50 ayhLRVJOX0lORk8gIldlJ3ZlIGdvdCBhIGxvY2shIik7IGJyZWFrOw0KKwkJ bXNsZWVwKDIwKTsNCisJCWkrKzsNCisJfQ0KKwkNCisJcHJpdi0+YmFuZHdp ZHRoID0gcGFyYW1zLT51Lm9mZG0uYmFuZHdpZHRoOw0KKwlwcml2LT5mcmVx dWVuY3kgPSBwYXJhbXMtPmZyZXF1ZW5jeTsNCisJcmV0dXJuIDA7DQorZXJy b3I6DQorCXJldHVybiByZXQ7DQorfQ0KKw0KK3N0YXRpYyBpbnQgdGRhMTgy MThfZ2V0X2ZyZXF1ZW5jeShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMy ICpmcmVxdWVuY3kpDQorew0KKwlzdHJ1Y3QgdGRhMTgyMThfcHJpdiAqcHJp diA9IGZlLT50dW5lcl9wcml2Ow0KKwkqZnJlcXVlbmN5ID0gcHJpdi0+ZnJl cXVlbmN5Ow0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCB0ZGEx ODIxOF9nZXRfYmFuZHdpZHRoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1 MzIgKmJhbmR3aWR0aCkNCit7DQorCXN0cnVjdCB0ZGExODIxOF9wcml2ICpw cml2ID0gZmUtPnR1bmVyX3ByaXY7DQorCSpiYW5kd2lkdGggPSBwcml2LT5i YW5kd2lkdGg7DQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IHRk YTE4MjE4X2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpDQorew0KKwkv L3N0cnVjdCB0ZGExODIxOF9wcml2ICpwcml2ID0gZmUtPnR1bmVyX3ByaXY7 DQorCS8vdTggKnJlZ3MgPSBwcml2LT50ZGExODIxOF9yZWdzOw0KKwlpbnQg aTsNCisJaW50IHJldDsNCisJDQorCXU4IGluaXRidWZbXVsxOF0gPSB7DQor CQl7IDB4MTAsIDB4MDUsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4NDAs IDB4MDAsIDB4MDAsIDB4MDcsIDB4ZmYsIDB4ODQsIDB4MDksIDB4MDAsIDB4 MTMsIDB4MDAsIDB4MDAsIDB4MDEgfSwNCisJCXsgMHgwYiwgMHgxNSwgMHg4 NCwgMHgwOSwgMHhmMCwgMHgxOSwgMHgwYSwgMHgwZSwgMHgyOSwgMHg5OCwg MHgwMCwgMHgwMCwgMHg1OCB9LA0KKwkJeyAweDEwLCAweDI0LCAweDBjLCAw eDQ4LCAweDg1LCAweGM5LCAweGE3LCAweDAwLCAweDAwLCAweDAwLCAweDMw LCAweDgxLCAweDgwLCAweDAwLCAweDM5LCAweDAwLCAweDhhLCAweDAwIH0s DQorCQl7IDB4MDcsIDB4MzQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4 MDAsIDB4ZjYsIDB4ZjYgfSwNCisJfTsNCisJDQorCXU4IGluaXRidWYyWzRd Ow0KKw0KKwlmb3IoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGluaXRidWYpOyBp KyspIHsNCisJCQ0KKwkJLyogd3JpdGUgcmVnaXN0ZXJzICovDQorCQlyZXQg PSB0ZGExODIxOF93cml0ZV9yZWdzKGZlLCBpbml0YnVmW2ldWzFdLCAmaW5p dGJ1ZltpXVsyXSwgaW5pdGJ1ZltpXVswXSk7DQorDQorCQlpZiAocmV0ICE9 IDApIHsNCisJCQlwcmludGsoS0VSTl9FUlIgImluaXQ6IEVSUk9SOiBpMmNf dHJhbnNmZXIgcmV0dXJuZWQ6ICVkXG4iLCByZXQpOw0KKwkJCXJldHVybiAt RVJFTU9URUlPOw0KKwkJfQ0KKwkJaWYoaSA9PSAxKSB7DQorCQkJdGRhMTgy MThfd3JpdGVfcmVnKGZlLCAweDIyLCAweDhjKTsNCisJCX0NCisJfQ0KKwkN CisJdGRhMTgyMThfd3JpdGVfcmVnKGZlLCAweDA1LCAweDgwKTsNCisJdGRh MTgyMThfd3JpdGVfcmVnKGZlLCAweDA1LCAweDAwKTsNCisJdGRhMTgyMThf d3JpdGVfcmVnKGZlLCAweDA1LCAweDIwKTsNCisJdGRhMTgyMThfd3JpdGVf cmVnKGZlLCAweDA1LCAweDAwKTsNCisJdGRhMTgyMThfd3JpdGVfcmVnKGZl LCAweDI3LCAweGRlKTsNCisJdGRhMTgyMThfd3JpdGVfcmVnKGZlLCAweDE3 LCAweGY4KTsNCisJdGRhMTgyMThfd3JpdGVfcmVnKGZlLCAweDE4LCAweDBm KTsNCisJdGRhMTgyMThfd3JpdGVfcmVnKGZlLCAweDFjLCAweDhiKTsNCisJ dGRhMTgyMThfd3JpdGVfcmVnKGZlLCAweDI5LCAweDAyKTsNCisJdGRhMTgy MThfd3JpdGVfcmVnKGZlLCAweDE5LCAweDFhKTsNCisJdGRhMTgyMThfd3Jp dGVfcmVnKGZlLCAweDExLCAweDEzKTsNCisNCisJaW5pdGJ1ZjJbMF0gPSAw eDBhOw0KKwlpbml0YnVmMlsxXSA9IDB4NWM7DQorCWluaXRidWYyWzJdID0g MHhjNjsNCisJaW5pdGJ1ZjJbM10gPSAweDA3Ow0KKwl0ZGExODIxOF93cml0 ZV9yZWdzKGZlLCBpbml0YnVmMlswXSwgJmluaXRidWYyWzFdLCAzKTsNCisJ dGRhMTgyMThfd3JpdGVfcmVnKGZlLCAweDBmLCAweDQ5KTsNCisJdGRhMTgy MThfd3JpdGVfcmVnKGZlLCAweDA1LCAweDQwKTsNCisJdGRhMTgyMThfd3Jp dGVfcmVnKGZlLCAweDA1LCAweDAwKTsNCisJdGRhMTgyMThfd3JpdGVfcmVn KGZlLCAweDA1LCAweDIwKTsNCisJdGRhMTgyMThfd3JpdGVfcmVnKGZlLCAw eDExLCAweGVkKTsNCisJdGRhMTgyMThfd3JpdGVfcmVnKGZlLCAweDBmLCAw eDQ5KTsNCisJdGRhMTgyMThfd3JpdGVfcmVnKGZlLCAweDE5LCAweDJhKTsN CisJdGRhMTgyMThfd3JpdGVfcmVnKGZlLCAweDA1LCAweDU4KTsNCisJdGRh MTgyMThfd3JpdGVfcmVnKGZlLCAweDA1LCAweDE4KTsNCisJdGRhMTgyMThf d3JpdGVfcmVnKGZlLCAweDA1LCAweDM4KTsNCisJdGRhMTgyMThfd3JpdGVf cmVnKGZlLCAweDI5LCAweDAzKTsNCisJdGRhMTgyMThfd3JpdGVfcmVnKGZl LCAweDE5LCAweDFhKTsNCisJdGRhMTgyMThfd3JpdGVfcmVnKGZlLCAweDEx LCAweDEzKTsNCisJaW5pdGJ1ZjJbMF0gPSAweDBhOw0KKwlpbml0YnVmMlsx XSA9IDB4YmU7DQorCWluaXRidWYyWzJdID0gMHg2ZTsNCisJaW5pdGJ1ZjJb M10gPSAweDA3Ow0KKwl0ZGExODIxOF93cml0ZV9yZWdzKGZlLCBpbml0YnVm MlswXSwgJmluaXRidWYyWzFdLCAzKTsNCisJdGRhMTgyMThfd3JpdGVfcmVn KGZlLCAweDBmLCAweDQ5KTsNCisJdGRhMTgyMThfd3JpdGVfcmVnKGZlLCAw eDA1LCAweDU4KTsNCisJdGRhMTgyMThfd3JpdGVfcmVnKGZlLCAweDA1LCAw eDE4KTsNCisJdGRhMTgyMThfd3JpdGVfcmVnKGZlLCAweDA1LCAweDM4KTsN CisJdGRhMTgyMThfd3JpdGVfcmVnKGZlLCAweDExLCAweGVkKTsNCisJdGRh MTgyMThfd3JpdGVfcmVnKGZlLCAweDBmLCAweDQ5KTsNCisJdGRhMTgyMThf d3JpdGVfcmVnKGZlLCAweDE5LCAweDJhKTsNCisJdGRhMTgyMThfd3JpdGVf cmVnKGZlLCAweDA1LCAweDU4KTsNCisJdGRhMTgyMThfd3JpdGVfcmVnKGZl LCAweDA1LCAweDE4KTsNCisJdGRhMTgyMThfd3JpdGVfcmVnKGZlLCAweDA1 LCAweDM4KTsNCisJdGRhMTgyMThfd3JpdGVfcmVnKGZlLCAweDE5LCAweDBh KTsNCisJdGRhMTgyMThfd3JpdGVfcmVnKGZlLCAweDI3LCAweGM5KTsNCisJ dGRhMTgyMThfd3JpdGVfcmVnKGZlLCAweDExLCAweDEzKTsNCisJaW5pdGJ1 ZjJbMF0gPSAweDE3Ow0KKwlpbml0YnVmMlsxXSA9IDB4ZjA7DQorCWluaXRi dWYyWzJdID0gMHgxOTsNCisJaW5pdGJ1ZjJbM10gPSAweDAwOw0KKwl0ZGEx ODIxOF93cml0ZV9yZWdzKGZlLCBpbml0YnVmMlswXSwgJmluaXRidWYyWzFd LCAyKTsNCisJdGRhMTgyMThfd3JpdGVfcmVnKGZlLCAweDFjLCAweDk4KTsN CisJdGRhMTgyMThfd3JpdGVfcmVnKGZlLCAweDI5LCAweDAzKTsNCisJdGRh MTgyMThfd3JpdGVfcmVnKGZlLCAweDJhLCAweDAwKTsNCisJdGRhMTgyMThf d3JpdGVfcmVnKGZlLCAweDJhLCAweDAxKTsNCisJdGRhMTgyMThfd3JpdGVf cmVnKGZlLCAweDJhLCAweDAyKTsNCisJdGRhMTgyMThfd3JpdGVfcmVnKGZl LCAweDJhLCAweDAzKTsNCisJdGRhMTgyMThfd3JpdGVfcmVnKGZlLCAweDFj LCAweDk4KTsNCisJdGRhMTgyMThfd3JpdGVfcmVnKGZlLCAweDE4LCAweDE5 KTsNCisJdGRhMTgyMThfd3JpdGVfcmVnKGZlLCAweDIyLCAweDljKTsNCisJ dGRhMTgyMThfd3JpdGVfcmVnKGZlLCAweDFmLCAweDU4KTsNCisJdGRhMTgy MThfd3JpdGVfcmVnKGZlLCAweDI0LCAweDBjKTsNCisJdGRhMTgyMThfd3Jp dGVfcmVnKGZlLCAweDFjLCAweDg4KTsNCisJdGRhMTgyMThfd3JpdGVfcmVn KGZlLCAweDIwLCAweDEwKTsNCisJdGRhMTgyMThfd3JpdGVfcmVnKGZlLCAw eDIxLCAweDRjKTsNCisJdGRhMTgyMThfd3JpdGVfcmVnKGZlLCAweDIwLCAw eDAwKTsNCisJdGRhMTgyMThfd3JpdGVfcmVnKGZlLCAweDIxLCAweDQ4KTsN CisJdGRhMTgyMThfd3JpdGVfcmVnKGZlLCAweDFmLCAweDViKTsNCisJdGRh MTgyMThfd3JpdGVfcmVnKGZlLCAweDIwLCAweDAwKTsNCisJdGRhMTgyMThf d3JpdGVfcmVnKGZlLCAweDFmLCAweDU5KTsNCisJdGRhMTgyMThfd3JpdGVf cmVnKGZlLCAweDIwLCAweDAwKTsNCisJdGRhMTgyMThfd3JpdGVfcmVnKGZl LCAweDFmLCAweDVhKTsNCisJdGRhMTgyMThfd3JpdGVfcmVnKGZlLCAweDIw LCAweDAwKTsNCisJdGRhMTgyMThfd3JpdGVfcmVnKGZlLCAweDFmLCAweDVm KTsNCisJdGRhMTgyMThfd3JpdGVfcmVnKGZlLCAweDIwLCAweDAwKTsNCisJ dGRhMTgyMThfd3JpdGVfcmVnKGZlLCAweDFmLCAweDVkKTsNCisJdGRhMTgy MThfd3JpdGVfcmVnKGZlLCAweDIwLCAweDAwKTsNCisJdGRhMTgyMThfd3Jp dGVfcmVnKGZlLCAweDFmLCAweDVlKTsNCisJdGRhMTgyMThfd3JpdGVfcmVn KGZlLCAweDIwLCAweDAwKTsNCisJdGRhMTgyMThfd3JpdGVfcmVnKGZlLCAw eDIwLCAweDYwKTsNCisJdGRhMTgyMThfd3JpdGVfcmVnKGZlLCAweDIzLCAw eDAyKTsNCisJdGRhMTgyMThfd3JpdGVfcmVnKGZlLCAweDIwLCAweGEwKTsN CisJdGRhMTgyMThfd3JpdGVfcmVnKGZlLCAweDIzLCAweDA5KTsNCisJdGRh MTgyMThfd3JpdGVfcmVnKGZlLCAweDIwLCAweGUwKTsNCisJdGRhMTgyMThf d3JpdGVfcmVnKGZlLCAweDIzLCAweDBjKTsNCisJdGRhMTgyMThfd3JpdGVf cmVnKGZlLCAweDIwLCAweDQwKTsNCisJdGRhMTgyMThfd3JpdGVfcmVnKGZl LCAweDIzLCAweDAxKTsNCisJdGRhMTgyMThfd3JpdGVfcmVnKGZlLCAweDIw LCAweDgwKTsNCisJdGRhMTgyMThfd3JpdGVfcmVnKGZlLCAweDIzLCAweDA4 KTsNCisJdGRhMTgyMThfd3JpdGVfcmVnKGZlLCAweDIwLCAweGMwKTsNCisJ dGRhMTgyMThfd3JpdGVfcmVnKGZlLCAweDIzLCAweDBiKTsNCisJdGRhMTgy MThfd3JpdGVfcmVnKGZlLCAweDFjLCAweDk4KTsNCisJdGRhMTgyMThfd3Jp dGVfcmVnKGZlLCAweDIyLCAweDhjKTsNCisJaW5pdGJ1ZjJbMF0gPSAweDE3 Ow0KKwlpbml0YnVmMlsxXSA9IDB4YjA7DQorCWluaXRidWYyWzJdID0gMHg1 OTsNCisJaW5pdGJ1ZjJbM10gPSAweDAwOw0KKwkvL3RkYTE4MjE4X3dyaXRl X3JlZ3MoZmUsIGluaXRidWYyWzBdLCAmaW5pdGJ1ZjJbMV0sIDIpOw0KKwlp bml0YnVmMlswXSA9IDB4MWE7DQorCWluaXRidWYyWzFdID0gMHgwZTsNCisJ aW5pdGJ1ZjJbMl0gPSAweDJhOw0KKwlpbml0YnVmMlszXSA9IDB4OTg7DQor CXRkYTE4MjE4X3dyaXRlX3JlZ3MoZmUsIGluaXRidWYyWzBdLCAmaW5pdGJ1 ZjJbMV0sIDMpOw0KKwlpbml0YnVmMlswXSA9IDB4MTc7DQorCWluaXRidWYy WzFdID0gMHhiMDsNCisJaW5pdGJ1ZjJbMl0gPSAweDU5Ow0KKwlpbml0YnVm MlszXSA9IDB4MDA7DQorCXRkYTE4MjE4X3dyaXRlX3JlZ3MoZmUsIGluaXRi dWYyWzBdLCAmaW5pdGJ1ZjJbMV0sIDIpOw0KKwl0ZGExODIxOF93cml0ZV9y ZWcoZmUsIDB4MmQsIDB4ODEpOw0KKwl0ZGExODIxOF93cml0ZV9yZWcoZmUs IDB4MjksIDB4MDIpOw0KKwkNCisJcmV0dXJuIDA7DQorfQ0KKwkNCitzdGF0 aWMgaW50IHRkYTE4MjE4X3JlbGVhc2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAq ZmUpDQorew0KKwlrZnJlZShmZS0+dHVuZXJfcHJpdik7DQorCWZlLT50dW5l cl9wcml2ID0gTlVMTDsNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBj b25zdCBzdHJ1Y3QgZHZiX3R1bmVyX29wcyB0ZGExODIxOF90dW5lcl9vcHMg PSB7DQorCS5pbmZvID0gew0KKwkJLm5hbWUgICAgICAgICAgID0gIk5YUCBU REExODIxOCIsDQorCQkuZnJlcXVlbmN5X21pbiAgPSBUREExODIxOF9NSU5f RlJFUSwNCisJCS5mcmVxdWVuY3lfbWF4ICA9IFREQTE4MjE4X01BWF9GUkVR LA0KKwkJLmZyZXF1ZW5jeV9zdGVwID0gVERBMTgyMThfU1RFUCwNCisJfSwN CisNCisJLnJlbGVhc2UgICAgICAgPSB0ZGExODIxOF9yZWxlYXNlLA0KKwku aW5pdCAgICAgICAgICA9IHRkYTE4MjE4X2luaXQsDQorCQ0KKwkuc2V0X3Bh cmFtcyA9IHRkYTE4MjE4X3NldF9wYXJhbXMsDQorCS5nZXRfZnJlcXVlbmN5 ID0gdGRhMTgyMThfZ2V0X2ZyZXF1ZW5jeSwNCisJLmdldF9iYW5kd2lkdGgg PSB0ZGExODIxOF9nZXRfYmFuZHdpZHRoLA0KK307DQorDQorc3RydWN0IGR2 Yl9mcm9udGVuZCAqIHRkYTE4MjE4X2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250 ZW5kICpmZSwNCisJCQkJICAgIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLA0K KwkJCQkgICAgc3RydWN0IHRkYTE4MjE4X2NvbmZpZyAqY2ZnKQ0KK3sNCisJ c3RydWN0IHRkYTE4MjE4X3ByaXYgKnByaXYgPSBOVUxMOw0KKw0KKwlwcml2 ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHRkYTE4MjE4X3ByaXYpLCBHRlBf S0VSTkVMKTsNCisJaWYgKHByaXYgPT0gTlVMTCkNCisJCXJldHVybiBOVUxM Ow0KKw0KKwlwcml2LT5jZmcgPSBjZmc7DQorCXByaXYtPmkyYyA9IGkyYzsN CisNCisJZmUtPnR1bmVyX3ByaXYgPSBwcml2Ow0KKwkNCisJdGRhMTgyMThf cmVhZF9yZWdzKGZlKTsNCisJaWYgKHByaXYtPnRkYTE4MjE4X3JlZ3NbMHgw MF0gIT0gMHhjMCkgew0KKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiRGV2aWNl IGlzIG5vdCBhIFREQTE4MjE4IVxuIik7DQorCQlrZnJlZShwcml2KTsNCisJ CXJldHVybiBOVUxMOw0KKwl9DQorCQ0KKwlwcmludGsoS0VSTl9JTkZPICJO WFAgVERBMTgyMTggc3VjY2Vzc2Z1bGx5IGlkZW50aWZpZWQuXG4iKTsNCisJ bWVtY3B5KCZmZS0+b3BzLnR1bmVyX29wcywgJnRkYTE4MjE4X3R1bmVyX29w cywNCisJICAgICAgIHNpemVvZihzdHJ1Y3QgZHZiX3R1bmVyX29wcykpOw0K KwkNCisJcmV0dXJuIGZlOw0KK30NCitFWFBPUlRfU1lNQk9MKHRkYTE4MjE4 X2F0dGFjaCk7DQorDQorTU9EVUxFX0RFU0NSSVBUSU9OKCJOWFAgVERBMTgy MTggc2lsaWNvbiB0dW5lciBkcml2ZXIiKTsNCitNT0RVTEVfQVVUSE9SKCJM YXVyaXMgRGluZyA8bGRpbmdAZ214LmRlPiIpOw0KK01PRFVMRV9WRVJTSU9O KCIwLjEiKTsNCitNT0RVTEVfTElDRU5TRSgiR1BMIik7DQotLS0gdjRsLWR2 Yi1hYmQzYWFjNjY0NGUvbGludXgvZHJpdmVycy9tZWRpYS9jb21tb24vdHVu ZXJzL3RkYTE4MjE4Lmgub3JpZwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAw MDAwMCArMDEwMA0KKysrIHY0bC1kdmItYWJkM2FhYzY2NDRlL2xpbnV4L2Ry aXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGExODIxOC5oCTIwMTEtMDIt MDUgMTY6MzE6NDUuNDAzMTgxNDI0ICswMTAwDQpAQCAtMCwwICsxLDQ0IEBA DQorLyoNCisgKiAgRHJpdmVyIGZvciAgTlhQIFREQTE4MjE4IHNpbGljb24g dHVuZXINCisgKg0KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgTGF1cmlzIERp bmcgPGxkaW5nQGdteC5kZT4NCisgKg0KKyAqICBUaGlzIHByb2dyYW0gaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeQ0KKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQ0KKyAqICB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAy IG9mIHRoZSBMaWNlbnNlLCBvcg0KKyAqICAoYXQgeW91ciBvcHRpb24pIGFu eSBsYXRlciB2ZXJzaW9uLg0KKyAqDQorICogIFRoaXMgcHJvZ3JhbSBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LA0KKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KKyAqICBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlDQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuDQorICoNCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk IGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UNCisg KiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8g dGhlIEZyZWUgU29mdHdhcmUNCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1 IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuDQorICovDQor DQorI2lmbmRlZiBUREExODIxOF9IDQorI2RlZmluZSBUREExODIxOF9IDQor DQorI2luY2x1ZGUgImR2Yl9mcm9udGVuZC5oIg0KKw0KK3N0cnVjdCB0ZGEx ODIxOF9jb25maWcgew0KKwl1OCBpMmNfYWRkcmVzczsNCit9Ow0KKw0KKyNp ZiBkZWZpbmVkKENPTkZJR19NRURJQV9UVU5FUl9UREExODIxOCkgfHwgKGRl ZmluZWQoQ09ORklHX01FRElBX1RVTkVSX1REQTE4MjE4X01PRFVMRSkgJiYg ZGVmaW5lZChNT0RVTEUpKQ0KK2V4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5k ICp0ZGExODIxOF9hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsDQor CQkJCQkgIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLA0KKwkJCQkJICBzdHJ1 Y3QgdGRhMTgyMThfY29uZmlnICpjZmcpOw0KKyNlbHNlDQorc3RhdGljIGlu bGluZSBzdHJ1Y3QgZHZiX2Zyb250ZW5kICp0ZGExODIxOF9hdHRhY2goc3Ry dWN0IGR2Yl9mcm9udGVuZCAqZmUsDQorCQkJCQkJIHN0cnVjdCBpMmNfYWRh cHRlciAqaTJjLA0KKwkJCQkJCSBzdHJ1Y3QgdGRhMTgyMThfY29uZmlnICpj ZmcpDQorew0KKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRp c2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsNCisJcmV0dXJuIE5V TEw7DQorfQ0KKyNlbmRpZiAvLyBDT05GSUdfTUVESUFfVFVORVJfVERBMTgy MTgNCisNCisjZW5kaWYNCi0tLSB2NGwtZHZiLWFiZDNhYWM2NjQ0ZS9saW51 eC9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhMTgyMThfcHJpdi5o Lm9yaWcJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDANCisr KyB2NGwtZHZiLWFiZDNhYWM2NjQ0ZS9saW51eC9kcml2ZXJzL21lZGlhL2Nv bW1vbi90dW5lcnMvdGRhMTgyMThfcHJpdi5oCTIwMTEtMDItMDUgMTY6MzE6 NDUuNDA2MTkyMDg3ICswMTAwDQpAQCAtMCwwICsxLDM2IEBADQorLyoNCisg KiAgRHJpdmVyIGZvciBOWFAgVERBMTgyMTggc2lsaWNvbiB0dW5lcg0KKyAq DQorICogIENvcHlyaWdodCAoQykgMjAxMCBMYXVyaXMgRGluZyA8bGRpbmdA Z214LmRlPg0KKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQ0KKyAqICBp dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGFzIHB1Ymxpc2hlZCBieQ0KKyAqICB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl LCBvcg0KKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u Lg0KKyAqDQorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KKyAqICBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZg0KKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlDQorICogIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQorICoN CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UNCisgKiAgYWxvbmcgd2l0aCB0 aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh cmUNCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1i cmlkZ2UsIE1BIDAyMTM5LCBVU0EuDQorICovDQorDQorI2lmbmRlZiBUREEx ODIxOF9QUklWX0gNCisjZGVmaW5lIFREQTE4MjE4X1BSSVZfSA0KKw0KKyNk ZWZpbmUgVERBMTgyMThfU1RFUCAgICAgICAgIDEwMDAgLyogMSBrSHogKi8N CisjZGVmaW5lIFREQTE4MjE4X01JTl9GUkVRICAgMTc0MDAwMDAwIC8qICAg MTc0IE1IeiAqLw0KKyNkZWZpbmUgVERBMTgyMThfTUFYX0ZSRVEgIDg2NDAw MDAwMCAvKiAgODY0IE1IeiAqLw0KKw0KK3N0cnVjdCB0ZGExODIxOF9wcml2 IHsNCisJdTggdGRhMTgyMThfcmVnc1sweDNiXTsNCisJc3RydWN0IHRkYTE4 MjE4X2NvbmZpZyAqY2ZnOw0KKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYzsN CisNCisJdTMyIGZyZXF1ZW5jeTsNCisJdTMyIGJhbmR3aWR0aDsNCit9Ow0K Kw0KKyNlbmRpZg0KLS0tIHY0bC1kdmItYWJkM2FhYzY2NDRlL2xpbnV4L2Ry aXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYWY5MDE1LmMub3JpZwkyMDExLTAy LTA1IDE2OjQ2OjEzLjI5NTAxMTM2NiArMDEwMA0KKysrIHY0bC1kdmItYWJk M2FhYzY2NDRlL2xpbnV4L2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYWY5 MDE1LmMJMjAxMS0wMi0wNSAxNjozMTo0NS40MTAxOTYxMjggKzAxMDANCkBA IC0zMyw2ICszMyw3IEBADQogI2luY2x1ZGUgInRkYTE4MjcxLmgiDQogI2lu Y2x1ZGUgIm14bDUwMDVzLmgiDQogI2luY2x1ZGUgIm1jNDRzODAzLmgiDQor I2luY2x1ZGUgInRkYTE4MjE4LmgiDQogDQogc3RhdGljIGludCBkdmJfdXNi X2FmOTAxNV9kZWJ1ZzsNCiBtb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIGR2 Yl91c2JfYWY5MDE1X2RlYnVnLCBpbnQsIDA2NDQpOw0KQEAgLTEwNDIsOCAr MTA0Myw4IEBADQogCQkJYWY5MDE1X2FmOTAxM19jb25maWdbaV0ucmZfc3Bl Y19pbnYgPSAxOw0KIAkJCWJyZWFrOw0KIAkJY2FzZSBBRjkwMTNfVFVORVJf VERBMTgyMTg6DQotCQkJd2FybigidHVuZXIgTlhQIFREQTE4MjE4IG5vdCBz dXBwb3J0ZWQgeWV0Iik7DQotCQkJcmV0dXJuIC1FTk9ERVY7DQorICAgICAg ICAgICAgICAgICAgICAgICAgYWY5MDE1X2FmOTAxM19jb25maWdbaV0ucmZf c3BlY19pbnYgPSAxOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr Ow0KIAkJZGVmYXVsdDoNCiAJCQl3YXJuKCJ0dW5lciBpZDolZCBub3Qgc3Vw cG9ydGVkLCBwbGVhc2UgcmVwb3J0ISIsIHZhbCk7DQogCQkJcmV0dXJuIC1F Tk9ERVY7DQpAQCAtMTI1MSw2ICsxMjUyLDEwIEBADQogCS5kaWdfb3V0ID0g MSwNCiB9Ow0KIA0KK3N0YXRpYyBzdHJ1Y3QgdGRhMTgyMThfY29uZmlnIGFm OTAxNV90ZGExODIxOF9jb25maWcgPSB7DQorICAgICAgICAuaTJjX2FkZHJl c3MgPSAweGMwLA0KK307DQorDQogc3RhdGljIGludCBhZjkwMTVfdHVuZXJf YXR0YWNoKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXApDQogew0KIAlz dHJ1Y3QgYWY5MDE1X3N0YXRlICpzdGF0ZSA9IGFkYXAtPmRldi0+cHJpdjsN CkBAIC0xMjk4LDYgKzEzMDMsOSBAQA0KIAkJcmV0ID0gZHZiX2F0dGFjaCht YzQ0czgwM19hdHRhY2gsIGFkYXAtPmZlLCBpMmNfYWRhcCwNCiAJCQkmYWY5 MDE1X21jNDRzODAzX2NvbmZpZykgPT0gTlVMTCA/IC1FTk9ERVYgOiAwOw0K IAkJYnJlYWs7DQorICAgICAgICBjYXNlIEFGOTAxM19UVU5FUl9UREExODIx ODoNCisgICAgICAgICAgICAgICAgcmV0ID0gZHZiX2F0dGFjaCh0ZGExODIx OF9hdHRhY2gsIGFkYXAtPmZlLCBpMmNfYWRhcCwNCisgICAgICAgICAgICAg ICAgICAgICAgICAmYWY5MDE1X3RkYTE4MjE4X2NvbmZpZykgPT0gTlVMTCA/ IC1FTk9ERVYgOiAwOw0KIAljYXNlIEFGOTAxM19UVU5FUl9VTktOT1dOOg0K IAlkZWZhdWx0Og0KIAkJcmV0ID0gLUVOT0RFVjsNCkBAIC0xMzQyLDYgKzEz NTAsNyBAQA0KIAl7VVNCX0RFVklDRShVU0JfVklEX0xFQURURUssICAgVVNC X1BJRF9XSU5GQVNUX0RUVjIwMDBEUyl9LA0KIC8qIDMwICove1VTQl9ERVZJ Q0UoVVNCX1ZJRF9LV09STERfMiwgIFVTQl9QSURfS1dPUkxEX1VCMzgzX1Qp fSwNCiAJe1VTQl9ERVZJQ0UoVVNCX1ZJRF9LV09STERfMiwgIFVTQl9QSURf S1dPUkxEXzM5NVVfNCl9LA0KKyAgICAgICAge1VTQl9ERVZJQ0UoVVNCX1ZJ RF9URVJSQVRFQywgIFVTQl9QSURfVEVSUkFURUNfQ0lORVJHWV9UX1NUSUNL X1JDKX0sDQogCXswfSwNCiB9Ow0KIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNi LCBhZjkwMTVfdXNiX3RhYmxlKTsNCkBAIC0xNjE4LDcgKzE2MjcsNyBAQA0K IA0KIAkJLmkyY19hbGdvID0gJmFmOTAxNV9pMmNfYWxnbywNCiANCi0JCS5u dW1fZGV2aWNlX2Rlc2NzID0gOCwgLyogbWF4IDkgKi8NCisJCS5udW1fZGV2 aWNlX2Rlc2NzID0gOSwgLyogbWF4IDkgKi8NCiAJCS5kZXZpY2VzID0gew0K IAkJCXsNCiAJCQkJLm5hbWUgPSAiQXZlck1lZGlhIEFWZXJUViBWb2xhciBH UFMgODA1IChBODA1KSIsDQpAQCAtMTY2Myw2ICsxNjcyLDEyIEBADQogCQkJ CS5jb2xkX2lkcyA9IHsmYWY5MDE1X3VzYl90YWJsZVszMF0sIE5VTEx9LA0K IAkJCQkud2FybV9pZHMgPSB7TlVMTH0sDQogCQkJfSwNCisgICAgICAgICAg ICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAubmFtZSA9ICJUZXJyYVRlYyBDaW5lcmd5IFQgU3RpY2sgUkMiLA0K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNvbGRfaWRzID0g eyZhZjkwMTVfdXNiX3RhYmxlWzMyXSwgTlVMTH0sDQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAud2FybV9pZHMgPSB7TlVMTH0sDQorICAg ICAgICAgICAgICAgICAgICAgICAgfSwNCisNCiAJCX0NCiAJfSwNCiB9Ow0K LS0tIHY0bC1kdmItYWJkM2FhYzY2NDRlL2xpbnV4L2RyaXZlcnMvbWVkaWEv ZHZiL2R2Yi11c2IvZHZiLXVzYi1pZHMuaC5vcmlnCTIwMTEtMDItMDUgMTY6 NDY6MDkuNjY5NzExNjE3ICswMTAwDQorKysgdjRsLWR2Yi1hYmQzYWFjNjY0 NGUvbGludXgvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWlk cy5oCTIwMTEtMDItMDUgMTY6MzI6MjkuMzQ5ODg4MjY5ICswMTAwDQpAQCAt MTg0LDYgKzE4NCw3IEBADQogI2RlZmluZSBVU0JfUElEX1RFUlJBVEVDX0NJ TkVSR1lfVF9FWFBSRVNTCQkweDAwNjINCiAjZGVmaW5lIFVTQl9QSURfVEVS UkFURUNfQ0lORVJHWV9UX1VTQl9YRQkJMHgwMDU1DQogI2RlZmluZSBVU0Jf UElEX1RFUlJBVEVDX0NJTkVSR1lfVF9VU0JfWEVfUkVWMgkJMHgwMDY5DQor I2RlZmluZSBVU0JfUElEX1RFUlJBVEVDX0NJTkVSR1lfVF9TVElDS19SQwkJ MHgwMDk3DQogI2RlZmluZSBVU0JfUElEX1RFUlJBVEVDX0NJTkVSR1lfVF9Y WFMJCQkweDAwNzgNCiAjZGVmaW5lIFVTQl9QSURfVEVSUkFURUNfQ0lORVJH WV9UX1hYU18yCQkweDAwYWINCiAjZGVmaW5lIFVTQl9QSURfVEVSUkFURUNf RFZCUzJDSV9WMQkJCTB4MTBhNA0KLS0tIHY0bC1kdmItYWJkM2FhYzY2NDRl L2xpbnV4L2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hZjkwMTMuYy5v cmlnCTIwMTAtMDctMDIgMDU6Mzg6NTQuMDAwMDAwMDAwICswMjAwDQorKysg djRsLWR2Yi1hYmQzYWFjNjY0NGUvbGludXgvZHJpdmVycy9tZWRpYS9kdmIv ZnJvbnRlbmRzL2FmOTAxMy5jCTIwMTEtMDItMDUgMTY6MzE6NDUuNDE3MjE0 NzUyICswMTAwDQpAQCAtNDg4LDYgKzQ4OCwyMSBAQA0KIAkJCQlicmVhazsN CiAJCQl9DQogCQl9DQorICAgICAgICAgICAgICAgIGVsc2UgaWYoc3RhdGUt PmNvbmZpZy50dW5lciA9PSBBRjkwMTNfVFVORVJfVERBMTgyMTgpIHsNCisg ICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGJ3KSB7DQorICAgICAg ICAgICAgICAgICAgICAgICAgY2FzZSBCQU5EV0lEVEhfNl9NSFo6DQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZl9zYW1wbGVfZnJlcSA9 IDMwMDAwMDA7IC8qIDMgTUh6ICovDQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICAgICAgICAgICAgICBj YXNlIEJBTkRXSURUSF83X01IWjoNCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGlmX3NhbXBsZV9mcmVxID0gMzUwMDAwMDsgLyogMy41IE1I eiAqLw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7 DQorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBCQU5EV0lEVEhfOF9N SFo6DQorICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoNCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmX3NhbXBsZV9mcmVxID0g NDAwMDAwMDsgLyogNCBNSHogKi8NCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0N CisgICAgICAgICAgICAgICAgfQ0KKw0KIA0KIAkJd2hpbGUgKGlmX3NhbXBs ZV9mcmVxID4gKGFkY19mcmVxIC8gMikpDQogCQkJaWZfc2FtcGxlX2ZyZXEg PSBpZl9zYW1wbGVfZnJlcSAtIGFkY19mcmVxOw0KQEAgLTEzOTAsNiArMTQw NSw3IEBADQogCQlpbml0ID0gdHVuZXJfaW5pdF9tdDIwNjBfMjsNCiAJCWJy ZWFrOw0KIAljYXNlIEFGOTAxM19UVU5FUl9UREExODI3MToNCisgICAgICAg IGNhc2UgQUY5MDEzX1RVTkVSX1REQTE4MjE4Og0KIAkJbGVuID0gQVJSQVlf U0laRSh0dW5lcl9pbml0X3RkYTE4MjcxKTsNCiAJCWluaXQgPSB0dW5lcl9p bml0X3RkYTE4MjcxOw0KIAkJYnJlYWs7DQotLS0gdjRsLWR2Yi1hYmQzYWFj NjY0NGUvbGludXgvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2FmOTAx M19wcml2Lmgub3JpZwkyMDEwLTA3LTAyIDA1OjM4OjU0LjAwMDAwMDAwMCAr MDIwMA0KKysrIHY0bC1kdmItYWJkM2FhYzY2NDRlL2xpbnV4L2RyaXZlcnMv bWVkaWEvZHZiL2Zyb250ZW5kcy9hZjkwMTNfcHJpdi5oCTIwMTEtMDItMDUg MTY6MzE6NDUuNDIwMjIwNjU0ICswMTAwDQpAQCAtNzkwLDcgKzc5MCw4IEBA DQogfTsNCiANCiAvKiBOWFAgVERBMTgyNzEgdHVuZXIgaW5pdA0KLSAgIEFG OTAxM19UVU5FUl9UREExODI3MSAgID0gMTU2ICovDQorICAgQUY5MDEzX1RV TkVSX1REQTE4MjcxICAgPSAxNTYgDQorICAgQUY5MDEzX1RVTkVSX1REQTE4 MjE4ICAgPSAxNzkgKi8NCiBzdGF0aWMgc3RydWN0IHJlZ2Rlc2MgdHVuZXJf aW5pdF90ZGExODI3MVtdID0gew0KIAl7IDB4OWJkNSwgMCwgOCwgMHgwMSB9 LA0KIAl7IDB4OWJkNiwgMCwgOCwgMHgwNCB9LA0K --2787499574-1545880458-1296923009=:82659--