From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from blu139-omc3-s11.blu139.hotmail.com (blu139-omc3-s11.blu139.hotmail.com [65.55.175.211]) by ozlabs.org (Postfix) with ESMTP id 2E072DDF5A for ; Wed, 5 Mar 2008 23:36:12 +1100 (EST) Message-ID: Content-Type: multipart/mixed; boundary="_982237a7-e73e-422a-873a-bfb03cdf8ff1_" From: "Pedro Luis D. L." To: Subject: RE: I2S driver Date: Wed, 5 Mar 2008 13:36:11 +0100 MIME-Version: 1.0 List-Id: Linux on Embedded PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , --_982237a7-e73e-422a-873a-bfb03cdf8ff1_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Angelo wrote: > > Pedro wrote: >>Which library do you mean? I don't understand, sorry. > > In your previous mail (with code), each lines with an "#include " don't s= how the name of header file. > > thanks > Ups! Sorry, I send the code as an attached file, then. > > > ________________________________ > L'email della prossima generazione? Puoi averla con la Nuova Yahoo! Mail _________________________________________________________________ MSN Video.=20 http://video.msn.com/?mkt=3Des-es= --_982237a7-e73e-422a-873a-bfb03cdf8ff1_ Content-Type: text/x-csrc Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="mpc52xx_spi.c" LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKgogKiAgIENvcHlyaWdodCAoQykgMjAwNyBieSBQZWRybyBMLiBE b23DrW5ndWV6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogKiAgIHBlZHJvLmRvbWlu Z3VlekBhZWQtZW5naW5lZXJpbmcuY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICoKICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgogKiAgIGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVk IGJ5ICAqCiAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24g MiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl ciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogKiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAqCiAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgogKiAgIE1F UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUgICAgICAgICAqCiAqICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKICogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogKiAg IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlICAgICAqCiAqICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3Jp dGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKICogICBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgog KiAgIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywg VVNBLiAgICAgICAgICAgICAqCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICogICBIaXN0b3J5ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KgogKiAgICAgT3JpZ2luYWwgVmVyc2lvbiBieSBCZXJuaGFyZCBLdWhuIDxia3VobkBmcmVlc2Nh bGUuY29tPiAgICAgICAgICAgICAqCiAqICAgICAgICAgICAgZm9yIDIuNi4xNiBrZXJuZWwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKi8KCiNkZWZpbmUgU1BJX0RCRwoKI2lmZGVmIFNQSV9EQkcKI2RlZmluZSBEQkcoeC4uLikg cHJpbnRrKCIoZGVidWcpICIgeCkKI2Vsc2UKI2RlZmluZSBEQkcoeC4uLikKI2VuZGlmCgojaW5j bHVkZSA8bGludXgvaW5pdC5oPgojaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiNpbmNsdWRlIDxs aW51eC9tb2R1bGUuaD4KI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KI2luY2x1ZGUgPGxpbnV4L2Zz Lmg+CiNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgojaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KI2lu Y2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KI2luY2x1ZGUgPGxpbnV4L2ZjbnRsLmg+CiNpbmNsdWRl IDxsaW51eC9zcGlubG9jay5oPgojaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiNp bmNsdWRlIDxhc20vc3lzdGVtLmg+CiNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgojaW5jbHVkZSA8 YXNtL2lvLmg+CiNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KI2luY2x1ZGUgPGxpbnV4L2F1dG9j b25mLmg+CiNpbmNsdWRlIDxsaW51eC90aW1lci5oPgojaW5jbHVkZSA8bGludXgvaW5pdC5oPgoj aW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgojaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KI2luY2x1 ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CiNpbmNs dWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KI2luY2x1ZGUgPGxpbnV4L2lycS5oPgojaW5jbHVkZSA8 bGludXgvaW9wb3J0Lmg+CiNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiNpbmNsdWRlIDxhc20vaW8u aD4KI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiNpbmNs dWRlIDxhc20vZGVsYXkuaD4KI2luY2x1ZGUgPGFzbS9tcGM1Mnh4Lmg+CiNpbmNsdWRlIDxhc20v bXBjNTJ4eF9wc2MuaD4KI2luY2x1ZGUgPGFzbS9vZl9wbGF0Zm9ybS5oPgojaW5jbHVkZSA8c3lz ZGV2L2Jlc3Rjb21tL2Jlc3Rjb21tLmg+CiNpbmNsdWRlIDxzeXNkZXYvYmVzdGNvbW0vZ2VuX2Jk Lmg+CiNpbmNsdWRlIDxzeXNkZXYvYmVzdGNvbW0vYmVzdGNvbW1fcHJpdi5oPgojaW5jbHVkZSA8 c291bmQvcGNtLmg+CiNpbmNsdWRlIDxzb3VuZC9hc291bmQuaD4KLy8gI2luY2x1ZGUgPHNvdW5k L3R5cGVkZWZzLmg+CgojZGVmaW5lIEJQRiAgICAgICAgICAgICAyICAgICAgLy8gYnl0ZXMgcGVy IGZyYW1lCiNkZWZpbmUgU0xPVFMgICAgICAgICAgIDIKI2RlZmluZSBTQU1QTEVTSVpFICAgICAg KEJQRipTTE9UUykKI2RlZmluZSBGUFAgICAgICAgICAgICAgMTAyNCAgIC8vIGJ5dGVzIHBlciBj b3B5IHBlcmlvZCAKI2RlZmluZSBQRVJJT0RTICAgICAgICAgOCAgICAgIC8vIHBlcmlvZHMKI2Rl ZmluZSBQRVJJT0RTSVpFICAgICAgKFNBTVBMRVNJWkUvMipGUFApCiNkZWZpbmUgQlVGU0laRSAg ICAgICAgIChTQU1QTEVTSVpFKkZQUCpQRVJJT0RTKQojZGVmaW5lIEZQUF9IVyAgICAgICAgICAx MjgKLy81MTIgICAgLy8gMTAgbXMKI2RlZmluZSBQRVJJT0RTX0hXICAgICAgOCAgICAgIC8vIHBl cmlvZHMKI2RlZmluZSBQRVJJT0RTSVpFX0hXICAgKFNBTVBMRVNJWkUqRlBQX0hXKQoKI2RlZmlu ZSBGSUZPU0laRQk1MTIKI2RlZmluZSBSWF9HUkFOCQk0CiNkZWZpbmUgVFhfR1JBTgkJNAojZGVm aW5lCVJYX0FMQVJNCTB4MTIwCiNkZWZpbmUJVFhfQUxBUk0JRklGT1NJWkUgLSAoVFhfR1JBTiAq IDQpIC0gMjA4CgojZGVmaW5lIERFTEFZX1RJTUVfU0xPVCAweDIwMDAwMDAwCiNkZWZpbmUgR0VO X0NMS19JTlQgMHgwMDgwMDAwMAojZGVmaW5lIE1VTFRJV0RfRU5BQkxFIDB4MDA0MDAwMDAKI2Rl ZmluZSBDTEtfUE9MX1JJU0lORyAweDAwMjAwMDAwCgojZGVmaW5lIFBST0NGU19OQU1FCSJNUEM1 Mnh4X1NQSSIKI2RlZmluZSBNQ0xLRU5fRElWIDB4ODAwMQojZGVmaW5lIERSVl9OQU1FICJtcGM1 Mnh4LXBzYy1zcGkiCiNkZWZpbmUgUFJPQ0ZTX01BWF9TSVpFCQkxMDI0CiNkZWZpbmUgQlVGX0ZS QU1FUyAzMDAKCi8qIE1CQVIgcG9zaXRpb24gKi8KI2RlZmluZSBNUEM1Mnh4X01CQVIJCTB4ZjAw MDAwMDAJLyogUGh5cyBhZGRyZXNzICovCiNkZWZpbmUgTVBDNTJ4eF9NQkFSX1ZJUlQJMHhmMDAw MDAwMAkvKiBWaXJ0IGFkZHJlc3MgKi8KI2RlZmluZSBNUEM1Mnh4X01CQVJfU0laRQkweDAwMDEw MDAwCgojZGVmaW5lIE1QQzUyeHhfUEEoeCkJCSgocGh5c19hZGRyX3QpKE1QQzUyeHhfTUJBUiAr ICh4KSkpCiNkZWZpbmUgTVBDNTJ4eF9WQSh4KQkJKCh2b2lkIF9faW9tZW0gKikoTVBDNTJ4eF9N QkFSX1ZJUlQgKyAoeCkpKQoKLyogUmVnaXN0ZXJzIHpvbmUgb2Zmc2V0L3NpemUgICovCiNkZWZp bmUgTVBDNTJ4eF9NTUFQX0NUTF9PRkZTRVQJCTB4MDAwMAojZGVmaW5lIE1QQzUyeHhfTU1BUF9D VExfU0laRQkJMHgwNjgKI2RlZmluZSBNUEM1Mnh4X1NEUkFNX09GRlNFVAkJMHgwMTAwCiNkZWZp bmUgTVBDNTJ4eF9TRFJBTV9TSVpFCQkweDAxMAojZGVmaW5lIE1QQzUyeHhfQ0RNX09GRlNFVAkJ MHgwMjAwCiNkZWZpbmUgTVBDNTJ4eF9DRE1fU0laRQkJMHgwMzgKI2RlZmluZSBNUEM1Mnh4X0lO VFJfT0ZGU0VUCQkweDA1MDAKI2RlZmluZSBNUEM1Mnh4X0lOVFJfU0laRQkJMHgwNGMKI2RlZmlu ZSBNUEM1Mnh4X0dQVHhfT0ZGU0VUKHgpCQkoMHgwNjAwICsgKCh4KTw8NCkpCiNkZWZpbmUgTVBD NTJ4eF9HUFRfU0laRQkJMHgwMTAKI2RlZmluZSBNUEM1Mnh4X1JUQ19PRkZTRVQJCTB4MDgwMAoj ZGVmaW5lIE1QQzUyeHhfUlRDX1NJWkUJCTB4MDI0CiNkZWZpbmUgTVBDNTJ4eF9HUElPX09GRlNF VAkJMHgwYjAwCiNkZWZpbmUgTVBDNTJ4eF9HUElPX1NJWkUJCTB4MDQwCiNkZWZpbmUgTVBDNTJ4 eF9HUElPX1dLVVBfT0ZGU0VUCTB4MGMwMAojZGVmaW5lIE1QQzUyeHhfR1BJT19XS1VQX1NJWkUJ CTB4MDI4CiNkZWZpbmUgTVBDNTJ4eF9QQ0lfT0ZGU0VUCQkweDBkMDAKI2RlZmluZSBNUEM1Mnh4 X1BDSV9TSVpFCQkweDEwMAojZGVmaW5lIE1QQzUyeHhfU0RNQV9PRkZTRVQJCTB4MTIwMAojZGVm aW5lIE1QQzUyeHhfU0RNQV9TSVpFCQkweDEwMAojZGVmaW5lIE1QQzUyeHhfWExCX09GRlNFVAkJ MHgxZjAwCiNkZWZpbmUgTVBDNTJ4eF9YTEJfU0laRQkJMHgxMDAKI2RlZmluZSBNUEM1Mnh4X1BT Q3hfT0ZGU0VUKHgpCQkoKCh4KSE9Nik/KDB4MWUwMCsoKHgpPDw5KSk6MHgyYzAwKQojZGVmaW5l IE1QQzUyeHhfUFNDX1NJWkUJCTB4MGEwCiNkZWZpbmUgUE9SVF9DT05GSUdfUFNDMQkJMHgwMDAw MDAwNgojZGVmaW5lIFBTQzFfQ0xLX0VOCQkJMHgwMDAwMDAyMAoKdHlwZWRlZiB1bnNpZ25lZCBs b25nCQl1aW50MzI7CnR5cGVkZWYgdW5zaWduZWQgbG9uZwkJVUludGVnZXIzMjsKdHlwZWRlZiB1 bnNpZ25lZCBzaG9ydCAJCVVJbnRlZ2VyMTY7CgpzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKk91cl9Q cm9jX0ZpbGU7CgpzdHJ1Y3QgU1BJX2J1ZmZlciB7CgljaGFyICp2YTsKCWRtYV9hZGRyX3QgcGE7 Cn07CgpzdGF0aWMgc3RydWN0IFNQSV9idWZmZXIgU1BJX3R4X3NpbGVuY2U7CnN0YXRpYyBzdHJ1 Y3QgU1BJX2J1ZmZlciBTUElfcnhfYnVmczsKCnR5cGVkZWYgc3RydWN0IF9ub2RlIHsKICAgc3Ry dWN0IFNQSV9idWZmZXIgYnVmZmVyOwogICBzdHJ1Y3QgX25vZGUgKm5leHQ7Cn0gTm9kZTsKCnN0 YXRpYyBOb2RlICpMYXN0Tm9kZTsKc3RhdGljIE5vZGUgKkZpcnN0Tm9kZTsKTm9kZSAqRmlyc3RO b2RlRnJlZTsKTm9kZSAqTGFzdE5vZGVGcmVlOwoKc3RydWN0IGJjb21fdGFzayAqdHhfYmNvbTsK c3RydWN0IGJjb21fdGFzayAqcnhfYmNvbTsKaW50IHJfaXJxOwppbnQgdF9pcnE7CgpzdHJ1Y3Qg bXBjNTJ4eF9wc2MgKnBzYzsKCnN0cnVjdCBtcGM1Mnh4X3NwaV9wcml2IHsKCXN0cnVjdCBkZXZp Y2UgKmRldjsKCXJlc291cmNlX3NpemVfdAltZW1fc3RhcnQ7CglyZXNvdXJjZV9zaXplX3QgbWVt X2xlbjsKCWludCBpcnE7CglzdHJ1Y3QgbXBjNTJ4eF9wc2MgX19pb21lbSAqcHNjOwoKCXN0cnVj dCBiY29tX3Rhc2sgKnRza190eDsKCXNwaW5sb2NrX3QgZG1hX2xvY2s7CgoJaW50IHBlcmlvZF9i eXRlX3NpemU7Cgl1MzIgcGVyaW9kX3N0YXJ0LCBwZXJpb2RfZW5kLCBwZXJpb2RfbmV4dF9wOwp9 OwoKc3RhdGljIGludCBpbml0aWF0b3JfdHg7CnN0YXRpYyBpbnQgaW5pdGlhdG9yX3J4OwoKc3Rh dGljIHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc25kX1NQSV9zdWJzdHJlYW07CnN0YXRpYyBp bnQgc25kX1NQSW1ndF9ydW5uaW5nID0gMDsKc3RhdGljIGludCBzbmRfU1BJbWd0X3N0YXJ0ZWQg PSAyOwpzdGF0aWMgaW50IFNQSV9wb3MgPSAwOwpzdGF0aWMgaW50IFNQSV9wbGF5ID0gMDsKc3Rh dGljIGludCBub2RlY291bnRlcj0wOwpzdGF0aWMgdW5zaWduZWQgaW50IGRtYWJsb2NrY291bnRl cj0wOwoKc3RhdGljIHN0cnVjdCBocnRpbWVyIHN0YXJ0X3RpbWVyOwpzdGF0aWMgc3RydWN0IHRp bWV2YWwgdGNsb2NrdXAgPSB7LnR2X3NlYyA9IDEsLnR2X3VzZWMgPSAwfTsKc3RhdGljIHN0cnVj dCB0aW1ldmFsIHRjbG9ja2Rvd249IHsudHZfc2VjID0gMCwudHZfdXNlYyA9IDYxNTA4MH07CnN0 YXRpYyBrdGltZV90IGt0X3RpbWVkb3duLCBrdF90aW1ldXAgOwoKdm9pZCAoKmhvb2tfcGVyX2Vs YXApKGludCwgaW50KTsKVUludGVnZXIzMiAoKmhvb2tfZnJhbWVzX3Jjdikodm9pZCk7CgppbnQg U1BJX2J1ZmZlcnNfaW5pdCh2b2lkKSB7CglpbnQgaTsKIAlOb2RlICpub2RlOwoKCglGaXJzdE5v ZGVGcmVlID0gKE5vZGUgKilrbWFsbG9jKHNpemVvZihOb2RlKSwgR0ZQX0tFUk5FTCk7CQoJRmly c3ROb2RlRnJlZS0+YnVmZmVyLnZhID0ga21hbGxvYyhQRVJJT0RTSVpFX0hXLCBHRlBfRE1BKTsK CUZpcnN0Tm9kZUZyZWUtPmJ1ZmZlci5wYSA9IHZpcnRfdG9fcGh5cygodm9pZCAqKUZpcnN0Tm9k ZUZyZWUtPmJ1ZmZlci52YSk7Cglub2RlID0gRmlyc3ROb2RlRnJlZTsKCglmb3IgKGk9MTtpPEJV Rl9GUkFNRVM7aSsrKQoJewoJCW5vZGUtPm5leHQgPSAoTm9kZSAqKWttYWxsb2Moc2l6ZW9mKE5v ZGUpLCBHRlBfS0VSTkVMKTsJCgkJbm9kZS0+bmV4dC0+YnVmZmVyLnZhID0ga21hbGxvYyhQRVJJ T0RTSVpFX0hXLCBHRlBfRE1BKTsKCQlub2RlLT5uZXh0LT5idWZmZXIucGEgPSB2aXJ0X3RvX3Bo eXMoKHZvaWQgKilub2RlLT5uZXh0LT5idWZmZXIudmEpOwoJCW5vZGUgPSBub2RlLT5uZXh0OwoJ fQoJTGFzdE5vZGVGcmVlID0gbm9kZTsKCUxhc3ROb2RlRnJlZS0+bmV4dD1OVUxMOwoJREJHKCJT UElfYnVmZmVyc19pbml0KClcbiIpOwoJLy8gcHJlcGFyZSByZWNlcHRpb24gYnVmZmVyCQoJU1BJ X3J4X2J1ZnMudmEgPSBrbWFsbG9jKEJVRlNJWkUsIEdGUF9ETUEpOwoKCVNQSV9yeF9idWZzLnBh ID0gdmlydF90b19waHlzKCh2b2lkICopU1BJX3J4X2J1ZnMudmEpOwoKCS8vIHByZXBhcmUgc2ls ZW5jZSBidWZmZXIKCVNQSV90eF9zaWxlbmNlLnZhID0ga21hbGxvYyhCVUZTSVpFLCBHRlBfRE1B KTsKCglTUElfdHhfc2lsZW5jZS5wYSA9IHZpcnRfdG9fcGh5cygodm9pZCAqKVNQSV90eF9zaWxl bmNlLnZhKTsKCgltZW1zZXQoU1BJX3R4X3NpbGVuY2UudmEsMCxCVUZTSVpFKTsKCglyZXR1cm4g MDsKfQoKaW50IHNuZF9TUElfcGNtX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpz dWJzdHJlYW0sIGludCBjbWQpIHsKI2lmZGVmIFNORF9JMlNfREVCVUcKCXByaW50aygic25kX1NQ SV9wY21fdHJpZ2dlclxuIik7CiNlbmRpZgoJc3dpdGNoIChjbWQpIHsKCQljYXNlIFNORFJWX1BD TV9UUklHR0VSX1NUQVJUOgoJCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUkVTVU1FOgojaWZkZWYg U05EX0kyU19ERUJVRwoJCQlwcmludGsoIlNUQVJUXG4iKTsKI2VuZGlmCgkJCXNuZF9TUElfc3Vi c3RyZWFtPXN1YnN0cmVhbTsKCQkJc25kX1NQSW1ndF9zdGFydGVkPTI7CgkJCXNuZF9TUEltZ3Rf cnVubmluZz0xOwoKCQkJYnJlYWs7CgkJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgoJCWNh c2UgU05EUlZfUENNX1RSSUdHRVJfU1VTUEVORDoKI2lmZGVmIFNORF9JMlNfREVCVUcKCQkJcHJp bnRrKCJTVE9QXG4iKTsKI2VuZGlmCgkJCXNuZF9TUEltZ3RfcnVubmluZz0wOwoJCQlicmVhazsK CgkJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9QVVNIOgoJCQlwcmludGsoIiAgUEFVU0Vf UFVTSFxuIik7CgkJCWJyZWFrOwoJCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUkVMRUFT RToKCQkJcHJpbnRrKCIgIFBBVVNFX1JFTEVBU0VcbiIpOwoJCQlicmVhazsKCQlkZWZhdWx0OgoJ CQlyZXR1cm4gLUVJTlZBTDsKCX0KCXJldHVybiAwOwp9OwoKRVhQT1JUX1NZTUJPTChzbmRfU1BJ X3BjbV90cmlnZ2VyKTsKCgpzdGF0aWMgaXJxcmV0dXJuX3QgU1BJX3J4X2lycShpbnQgaXJxLCB2 b2lkICpkZXZfaWQpIHsKCS8vIG5vIG5lZWQgZm9yIFRhc2tJbnRDbGVhcihyeHRhc2spLCBPUyBt YXNrcyBhbmQgYWNrcyBJUlEKCglzdHJ1Y3QgbXBjNTJ4eF9zcGlfcHJpdiAqcHJpdiA9IGRldl9p ZDsKCglzcGluX2xvY2soJnByaXYtPmRtYV9sb2NrKTsKCXdoaWxlIChiY29tX2J1ZmZlcl9kb25l KHJ4X2Jjb20pKSB7CgkJc3RydWN0IGJjb21fZ2VuX2JkICpiZDsKCQliY29tX3JldHJpZXZlX2J1 ZmZlcihyeF9iY29tLCBOVUxMLCBOVUxMKTsKCQkvKiBTdWJtaXQgYSBuZXcgb25lICovCgkJYmQg PSAoc3RydWN0IGJjb21fZ2VuX2JkICopIGJjb21fcHJlcGFyZV9uZXh0X2J1ZmZlcihyeF9iY29t KTsKCQliZC0+c3RhdHVzID0gNTEyOwoJCWJkLT5idWZfcGEgPSBTUElfcnhfYnVmcy5wYTsKCQkK CQliY29tX3N1Ym1pdF9uZXh0X2J1ZmZlcihyeF9iY29tLCBOVUxMKTsKCQliY29tX2VuYWJsZShy eF9iY29tKTsKCX0KCXNwaW5fdW5sb2NrKCZwcml2LT5kbWFfbG9jayk7CglyZXR1cm4gSVJRX0hB TkRMRUQ7Cn07CgpzdGF0aWMgaXJxcmV0dXJuX3QgU1BJX3R4X2lycShpbnQgaXJxLCB2b2lkICpk ZXZfaWQpIHsKCS8vIG5vIG5lZWQgZm9yIFRhc2tJbnRDbGVhcih0eHRhc2spLCBPUyBtYXNrcyBh bmQgYWNrcyBJUlEKCXN0cnVjdCBtcGM1Mnh4X3NwaV9wcml2ICpwcml2ID0gZGV2X2lkOwoJc3Ry dWN0IGJjb21fZ2VuX2JkICpiZDsKCglOb2RlICpub2RlOwoKCWlmKHBzYy0+bXBjNTJ4eF9wc2Nf c3RhdHVzJjB4MTgwMCkgewoKCQlwcmludGsoIlBTQyBSZXNldFxuIik7CgkJcHNjLT5jb21tYW5k ID0gTVBDNTJ4eF9QU0NfUlNUX1JYOwoJCXBzYy0+Y29tbWFuZCA9IE1QQzUyeHhfUFNDX1JTVF9U WDsKCQlwc2MtPmNvbW1hbmQgPSBNUEM1Mnh4X1BTQ19TRUxfTU9ERV9SRUdfMTsKCQlwc2MtPmNv bW1hbmQgPSBNUEM1Mnh4X1BTQ19SU1RfRVJSX1NUQVQ7CgkJcHNjLT5jb21tYW5kID0gTVBDNTJ4 eF9QU0NfVFhfRU5BQkxFIHwgTVBDNTJ4eF9QU0NfUlhfRU5BQkxFOwoJfTsKCQoJc3Bpbl9sb2Nr KCZwcml2LT5kbWFfbG9jayk7CgkKCWZvcig7OykKCXsKCQlpZighYmNvbV9idWZmZXJfZG9uZSh0 eF9iY29tKSkgewoJCQlicmVhazsKCQl9CgkJYmNvbV9yZXRyaWV2ZV9idWZmZXIodHhfYmNvbSwg TlVMTCwgTlVMTCk7CgkJLyogU3VibWl0IGEgbmV3IG9uZSAqLwoJCWJkID0gKHN0cnVjdCBiY29t X2dlbl9iZCAqKSBiY29tX3ByZXBhcmVfbmV4dF9idWZmZXIodHhfYmNvbSk7CgoJCWlmIChzbmRf U1BJbWd0X3J1bm5pbmcpCgkJewoJCQlpZigoRmlyc3ROb2RlID09IE5VTEwpKSB7CgkJCQliZC0+ c3RhdHVzID0gUEVSSU9EU0laRV9IVzsKCQkJCWJkLT5idWZfcGEgPSBTUElfdHhfc2lsZW5jZS5w YTsKCQkJCWJjb21fc3VibWl0X25leHRfYnVmZmVyKHR4X2Jjb20sIE5VTEwpOwoJCQkJCgkJCQlp Zihob29rX3Blcl9lbGFwICE9IE5VTEwpIHsKCQkJCQlob29rX3Blcl9lbGFwKFNQSV9wb3MsIFNQ SV9wbGF5KTsKCQkJCX0KCQkJfSAKCQkJZWxzZQoJCQl7CgkJCQlub2RlPUZpcnN0Tm9kZTsKCQkJ CUZpcnN0Tm9kZT1ub2RlLT5uZXh0OwoJCQkJaWYoRmlyc3ROb2RlPT1OVUxMKUxhc3ROb2RlPU5V TEw7CgkJCQliZC0+c3RhdHVzID0gUEVSSU9EU0laRV9IVzsKCQkJCWJkLT5idWZfcGEgPSAodm9p ZCAqKSgoKHUzMilub2RlLT5idWZmZXIucGEpKTsKCQkJCWJjb21fc3VibWl0X25leHRfYnVmZmVy KHR4X2Jjb20sIE5VTEwpOwoJCQkJbm9kZS0+bmV4dD1OVUxMOwoJCQkJaWYoTGFzdE5vZGVGcmVl IT1OVUxMKQoJCQkJCUxhc3ROb2RlRnJlZS0+bmV4dD1ub2RlOwoJCQkJTGFzdE5vZGVGcmVlPW5v ZGU7CQkJCQkKCQkJCWlmKEZpcnN0Tm9kZUZyZWU9PU5VTEwpRmlyc3ROb2RlRnJlZT1MYXN0Tm9k ZUZyZWU7CgkJCQlub2RlY291bnRlci0tOwoJCQl9CgkJCWRtYWJsb2NrY291bnRlcisrOwoKCQl9 IGVsc2UgewoJCQliZC0+c3RhdHVzID0gUEVSSU9EU0laRV9IVzsKCQkJYmQtPmJ1Zl9wYSA9IFNQ SV90eF9zaWxlbmNlLnBhOwoJCQliY29tX3N1Ym1pdF9uZXh0X2J1ZmZlcih0eF9iY29tLCBOVUxM KTsKCgkJfQoJCWJjb21fZW5hYmxlKHR4X2Jjb20pOwoKCX0KCXNwaW5fdW5sb2NrKCZwcml2LT5k bWFfbG9jayk7CgoJcmV0dXJuIElSUV9IQU5ETEVEOwp9OwoKdHlwZWRlZiBzdHJ1Y3QgewoJdW5z aWduZWQgc2hvcnQgbDsKCXVuc2lnbmVkIHNob3J0IHI7Cn0gc2FtcGxlX3Q7CgpzdGF0aWMgaW50 IGZyYW1lPTA7CnN0YXRpYyBOb2RlICpub2RlYnVpbGQ7CnN0YXRpYyBpbnQgY291bnRlciA9MDsK c3RhdGljIGludCAqcHRyPU5VTEw7CgppbnQgc25kX1NQSV9wY21fY29weShzdHJ1Y3Qgc25kX3Bj bV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKCQlpbnQgdm9pY2UsCgkJc25kX3BjbV91ZnJhbWVzX3Qg cG9zLAoJCXZvaWQgKnNyYywKCQlzbmRfcGNtX3VmcmFtZXNfdCBjb3VudCkgewoKCXNuZF9wY21f dWZyYW1lc190IGk7Ci8vIAlzYW1wbGVfdCogZGF0YSA9IChzYW1wbGVfdCopIHNyYzsKCVVJbnRl Z2VyMzIgKmRhdGEgPSAoVUludGVnZXIzMiAqKSBzcmM7CgoJaW50IGNudD1jb3VudDsKLy8gCXVu c2lnbmVkIHNob3J0IGF1eDsKCi8vICAgCXByaW50aygiMS5jbnQgJWQsIGZyYW1lICVkXG4iLGNu dCwgZnJhbWUpOyAKCXdoaWxlIChjbnQgPiAwKQoJewoJCWNvdW50ZXIrKzsKCQlpZihjb3VudGVy ID09IDEwMDApewoKLy8gCQkJcHJpbnRrKCJGcmFtZXM6ICVkXG4iLG5vZGVjb3VudGVyKTsKCQkJ Y291bnRlcj0wOwoKCQl9CgkJaWYocHRyPT1OVUxMKQoJCXsgCgoJCQlpZihGaXJzdE5vZGVGcmVl ICE9IE5VTEwpCgkJCXsKCQkJCW5vZGVidWlsZCA9IEZpcnN0Tm9kZUZyZWU7CgkJCQlGaXJzdE5v ZGVGcmVlID0gRmlyc3ROb2RlRnJlZS0+bmV4dDsKCQkJCWlmKEZpcnN0Tm9kZUZyZWU9PU5VTEwp TGFzdE5vZGVGcmVlPU5VTEw7CQkKCQkJfQoJCQllbHNlCgkJCXsJCQkKCQkJCW5vZGVidWlsZCA9 IChOb2RlICopa21hbGxvYyhzaXplb2YoTm9kZSksIEdGUF9LRVJORUwpOwkKCQkJCW5vZGVidWls ZC0+YnVmZmVyLnZhID0ga21hbGxvYyhQRVJJT0RTSVpFX0hXLCBHRlBfRE1BKTsKCQkJCW5vZGVi dWlsZC0+YnVmZmVyLnBhID0gdmlydF90b19waHlzKCh2b2lkICopbm9kZWJ1aWxkLT5idWZmZXIu dmEpOwoJCQkJbm9kZWJ1aWxkLT5uZXh0PU5VTEw7Ci8vIAkJCQlwcmludGsoIkdldHRpbmcgbW9y ZSBGcmFtZXMgYnVmZmVycywgbnVtIG9mIG5vZGVzICVkXG4iLG5vZGVjb3VudGVyKTsKCQkJfQkJ CQoJCQlwdHI9KGludCAqKW5vZGVidWlsZC0+YnVmZmVyLnZhOwoJCQlmcmFtZT0wOwkKCQl9Ci8v ICAgCQlwcmludGsoIjIuY250ICVkLCBmcmFtZSAlZFxuIixjbnQsIGZyYW1lKTsgCgkJaWYoY250 ID49IChGUFBfSFcgLWZyYW1lKSkKCQl7CgoJCQlmb3IoaT0wO2k8KEZQUF9IVy1mcmFtZSk7aSsr KSB7Ci8vIAkJCQlwcmludGsoIiAweCUwNHggIixkYXRhLT5sKTsKLy8gCQkJCXByaW50aygiIDB4 JTA0eCAiLGRhdGEtPnIpOwkKLy9CaWcgRW5kaWFuCi8vIAkJCQlhdXg9KChkYXRhLT5sPj44KSYw eGZmKSsoKGRhdGEtPmwgPDwgOCkmMHhmZjAwKTsKLy8gCQkJCSoocHRyKyhpKlNMT1RTKSsoZnJh bWUqU0xPVFMpKSA9IChhdXg8PDE2KTsKLy8gCQkJCWF1eD0oKGRhdGEtPnI+PjgpJjB4ZmYpKygo ZGF0YS0+ciA8PCA4KSYweGZmMDApOwovLyAJCQkJKihwdHIrKGkqU0xPVFMpKyhmcmFtZSpTTE9U UykrMSkgPSAoYXV4PDwxNik7Ci8vTGl0dGxlIEVuZGlhbgovLyAJCQkJKihwdHIrKGkqU0xPVFMp KyhmcmFtZSpTTE9UUykpID0gKGRhdGEtPmw8PDE2KTsKLy8gCQkJCSoocHRyKyhpKlNMT1RTKSso ZnJhbWUqU0xPVFMpKzEpID0gKGRhdGEtPnI8PDE2KTsKLy9SYXcgRGF0YQkJCQovLyAJCQkJcHJp bnRrKCJzcmM6IDB4JTA4eFxuIiwgKihVSW50ZWdlcjMyICopZGF0YSk7CgkJCQkqKHB0citpKSA9 ICooVUludGVnZXIzMiAqKWRhdGE7CgkJCQlkYXRhKys7CgkJCX07CgkJCWNudD1jbnQtKEZQUF9I Vy1mcmFtZSk7CgkJCWZyYW1lPTA7CQkJCgkJCXB0cj1OVUxMOwoJCQlub2RlYnVpbGQtPm5leHQ9 TlVMTDsKCQkJaWYoTGFzdE5vZGUgIT0gTlVMTCkgTGFzdE5vZGUtPm5leHQgPSBub2RlYnVpbGQ7 CgkJCWlmKEZpcnN0Tm9kZSA9PSBOVUxMKSBGaXJzdE5vZGUgPSBub2RlYnVpbGQ7CgkJCUxhc3RO b2RlID0gbm9kZWJ1aWxkOwoJCQlub2RlY291bnRlcisrOwovLyAgIAkJCXByaW50aygiMy5jbnQg JWQsIGZyYW1lICVkXG4iLGNudCwgZnJhbWUpOyAKCQl9CgkJZWxzZQoJCXsKCQkJZm9yKGk9MDtp PGNudDtpKyspIHsKLy8gCQkJCXByaW50aygiJTA0eCAiLGRhdGEtPmwpOwovLyAJCQkJcHJpbnRr KCIlMDR4ICIsZGF0YS0+cik7Ci8vQmlnIEVuZGlhbgovLyAJCQkJYXV4PSgoZGF0YS0+bD4+OCkm MHhmZikrKChkYXRhLT5sIDw8IDgpJjB4ZmYwMCk7Ci8vIAkJCQkqKHB0cisoaSpTTE9UUykrKGZy YW1lKlNMT1RTKSkgPSAoYXV4PDwxNik7Ci8vIAkJCQlhdXg9KChkYXRhLT5yPj44KSYweGZmKSso KGRhdGEtPnIgPDwgOCkmMHhmZjAwKTsKLy8gCQkJCSoocHRyKyhpKlNMT1RTKSsoZnJhbWUqU0xP VFMpKzEpID0gKGF1eDw8MTYpOwovL0xpdHRsZSBFbmRpYW4KLy8gCQkJCSoocHRyKyhpKlNMT1RT KSsoZnJhbWUqU0xPVFMpKSA9IChkYXRhLT5sPDwxNik7Ci8vIAkJCQkqKHB0cisoaSpTTE9UUykr KGZyYW1lKlNMT1RTKSsxKSA9IChkYXRhLT5yPDwxNik7Ci8vUmF3IERhdGEKCQkJCSoocHRyK2kp ID0gKihVSW50ZWdlcjMyICopZGF0YTsKCQkJCWRhdGErKzsKLy8gCQkJCXByaW50aygiZlxuIik7 CgkJCX0KCQkJZnJhbWU9Y250K2ZyYW1lOwoJCQljbnQ9MDsKLy8gICAJCQlwcmludGsoIjQuY250 ICVkLCBmcmFtZSAlZFxuIixjbnQsIGZyYW1lKTsgCgkJfQkJCQkJCgl9CglyZXR1cm4gMDsKfTsK CkVYUE9SVF9TWU1CT0woc25kX1NQSV9wY21fY29weSk7CgpzdGF0aWMgZW51bSBocnRpbWVyX3Jl c3RhcnQgdGltZXJfZnVuY3QgKHZvaWQgKmRhdGEpIHsKCglzdGF0aWMgdW5zaWduZWQgaW50IGNv dW50ZXIgPSAwOwoJc3RhdGljIHVuc2lnbmVkIGludCBzdGFydCA9IDA7CglVSW50ZWdlcjMyIGZy YW1lc251bTsKCXN0YXRpYyBpbnQgZGlmZj0wOwoKCWNvdW50ZXIgPSBkbWFibG9ja2NvdW50ZXIq MTI4OwoJZG1hYmxvY2tjb3VudGVyPTA7CglmcmFtZXNudW09aG9va19mcmFtZXNfcmN2KCk7Ci8v IAlwcmludGsoIkZyZXF1ZW56PSVkXG4iLGZyYW1lc251bSk7CglpZihzbmRfU1BJbWd0X3J1bm5p bmcpewoJCWRpZmY9ZGlmZitjb3VudGVyLWZyYW1lc251bTsKCQlzdGFydD0xOwoJCQoJCgl9Cgll bHNlCgl7CgkJc3RhcnQ9MDsKCX0KCWhydGltZXJfZm9yd2FyZCgmc3RhcnRfdGltZXIsIGhydGlt ZXJfY2JfZ2V0X3RpbWUoJnN0YXJ0X3RpbWVyKSxrdF90aW1ldXApOwoKCXJldHVybiBIUlRJTUVS X1JFU1RBUlQ7Cn0KCnN0YXRpYyB2b2lkIFNQSV9zZXR1cCh2b2lkKQp7Ci8vIAlwcmludGsoIlNQ SV9zZXR1cCgpXG4iKTsKCWludCBwc2NfbnVtID0gMSwgcnY7CglwaHlzX2FkZHJfdCByeF9maWZv OwoJcGh5c19hZGRyX3QgdHhfZmlmbzsKCXN0cnVjdCBiY29tX2JkICpiZDsKCXN0cnVjdCBtcGM1 Mnh4X3NwaV9wcml2ICpwcml2OwoJdWludDMyIFNJQ1I7CglzdHJ1Y3QgbXBjNTJ4eF9jZG0gX19p b21lbSAqY2RtOwoKCXByaXYgPSAoc3RydWN0IG1wYzUyeHhfc3BpX3ByaXYgKilrbWFsbG9jKHNp emVvZihzdHJ1Y3QgbXBjNTJ4eF9zcGlfcHJpdiksIEdGUF9LRVJORUwpOwoKCXN0cnVjdCBtcGM1 Mnh4X2dwaW8gX19pb21lbSAqZ3BpbyA9CgkJKHN0cnVjdCBtcGM1Mnh4X2dwaW8gX19pb21lbSAq KSBNUEM1Mnh4X1BBKE1QQzUyeHhfR1BJT19PRkZTRVQpOwoKCXN3aXRjaChwc2NfbnVtKSB7CgkJ Y2FzZSAxOgoJCQlpbml0aWF0b3JfdHggPSBCQ09NX0lOSVRJQVRPUl9QU0MxX1RYOwoJCQlpbml0 aWF0b3JfcnggPSBCQ09NX0lOSVRJQVRPUl9QU0MxX1JYOwoJCQlicmVhazsKCQljYXNlIDI6CgkJ CWluaXRpYXRvcl90eCA9IEJDT01fSU5JVElBVE9SX1BTQzJfVFg7CgkJCWluaXRpYXRvcl9yeCA9 IEJDT01fSU5JVElBVE9SX1BTQzJfUlg7CgkJCWJyZWFrOwoJCWRlZmF1bHQ6CgkJCXBhbmljKCJz bmQtU1BJbWd0Lm86IGludmFsaWQgdmFsdWUgZm9yIHBzY19udW0gKCVpKVxuIixwc2NfbnVtKTsK CQkJYnJlYWs7Cgl9OwoKLy8gCXByaW50aygiQmVmb3JlIHJlcXVlc3QgbWVtIHJlZ2lvblxuIik7 CglpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbigweEYwMDAyMDAwLCAweDAwMDAwMTAwLCBEUlZfTkFN RSkpIHsKCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogcmVxdWVzdF9tZW1fcmVnaW9uIGZh aWxlZFxuIik7CgkJcnYgPSAtRUJVU1k7Cgl9CgovLyAJcHJpbnRrKCJCZWZvcmUgaW9yZW1hcHNc biIpOwoJcHNjID0gaW9yZW1hcChNUEM1Mnh4X1BBKE1QQzUyeHhfUFNDeF9PRkZTRVQoMSkpLCBN UEM1Mnh4X1BTQ19TSVpFKTsKCWdwaW8gPSBpb3JlbWFwKE1QQzUyeHhfUEEoTVBDNTJ4eF9HUElP X09GRlNFVCksIE1QQzUyeHhfR1BJT19TSVpFKTsKCWNkbSA9IGlvcmVtYXAoTVBDNTJ4eF9QQShN UEM1Mnh4X0NETV9PRkZTRVQpLCBNUEM1Mnh4X0NETV9TSVpFKTsKCglwc2MtPnRmZGF0YSA9IDB4 RjAwMTAwMDA7IAkJIC8vIFBvd2VyLWRvd24gW1RhYmxlIDEsIE1BWDU3MTIgRGF0YXNoZWV0XQkK CglncGlvLT5wb3J0X2NvbmZpZyB8PSBQT1JUX0NPTkZJR19QU0MxOwoKCWNkbS0+Y2xrX2VuYWJs ZXMgfD0gUFNDMV9DTEtfRU47CgoJY2RtLT5tY2xrZW5fZGl2X3BzYzEgCT0gMHg4MDEwOwoKCXJ4 X2ZpZm8gPSBNUEM1Mnh4X1BBKE1QQzUyeHhfUFNDeF9PRkZTRVQocHNjX251bSkpKzB4NjA7Cgl0 eF9maWZvID0gTVBDNTJ4eF9QQShNUEM1Mnh4X1BTQ3hfT0ZGU0VUKHBzY19udW0pKSsweDgwOwoK CglzcGluX2xvY2tfaW5pdCgmcHJpdi0+ZG1hX2xvY2spOwoKLy8gCXByaW50aygiQmVmb3JlIFRh c2tzIGluaXRcbiIpOwoKCXJ4X2Jjb20gPSBiY29tX2dlbl9iZF9yeF9pbml0KDIsIChwaHlzX2Fk ZHJfdClyeF9maWZvLCBpbml0aWF0b3JfcngsIEJDT01fSVBSX1BTQzFfUlgsIDUxMik7CgoJdHhf YmNvbSA9IGJjb21fZ2VuX2JkX3R4X2luaXQoOCwgKHBoeXNfYWRkcl90KXR4X2ZpZm8sIGluaXRp YXRvcl90eCwgQkNPTV9JUFJfUFNDMV9UWCk7CgoKCXJfaXJxID0gYmNvbV9nZXRfdGFza19pcnEo cnhfYmNvbSk7Cgl0X2lycSA9IGJjb21fZ2V0X3Rhc2tfaXJxKHR4X2Jjb20pOwoKCXByaW50aygi cl9pcnEgJWQgMHglMDh4IHRfaXJxICVkIDB4JTA4eCwgcl90YXNrbnVtICVkLCB0X3Rhc2tudW0g JWRcbiIsIHJfaXJxLCByX2lycSwgdF9pcnEsIHRfaXJxLCByeF9iY29tLT50YXNrbnVtLCB0eF9i Y29tLT50YXNrbnVtKTsKCXBzYy0+Y29tbWFuZCA9IChNUEM1Mnh4X1BTQ19UWF9ESVNBQkxFIHwg TVBDNTJ4eF9QU0NfUlhfRElTQUJMRSk7Cglwc2MtPmNvbW1hbmQgPSBNUEM1Mnh4X1BTQ19SU1Rf Ulg7Cglwc2MtPmNvbW1hbmQgPSBNUEM1Mnh4X1BTQ19SU1RfVFg7Cglwc2MtPmNvbW1hbmQgPSBN UEM1Mnh4X1BTQ19SU1RfRVJSX1NUQVQ7CgoJcHNjLT5vcDEgPSAweDAzOwoJdWRlbGF5KDEwKTsK CXBzYy0+b3AwID0gMHgwMjsKCXVkZWxheSg1MCk7CgkKCVNJQ1IgPSAweDBGOTBFMDAwOwoJCglw c2MtPmNvbW1hbmQgCT0gMHgwQTsKCXBzYy0+c2ljcgk9IFNJQ1I7Cglwc2MtPmN0dXIJPSAweDAz OwoJcHNjLT5jdGxyCT0gMHgzNDsKCXBzYy0+Y2NyCT0gMHgwNzBGMDAwMDsKCglwc2MtPnJmYWxh cm0JPSBSWF9BTEFSTTsJCQoJcHNjLT50ZmFsYXJtCT0gVFhfQUxBUk07CQkKCXBzYy0+cmZjbnRs CT0gUlhfR1JBTjsJCQoJcHNjLT50ZmNudGwJPSBUWF9HUkFOOwkJCglwc2MtPmlzcl9pbXIuaXNy CT0gMHgwMDsKCXBzYy0+aXNyX2ltci5pbXIJPSAweDAwOwkKCXBzYy0+bW9kZQk9IDB4MDA7CQkJ Lyogc2V0IFJYIGludGVycnVwdCB0byBSeFJEWSAqLwoJcHNjLT5jb21tYW5kID0gKE1QQzUyeHhf UFNDX1RYX0VOQUJMRSB8IE1QQzUyeHhfUFNDX1JYX0VOQUJMRSk7CgoJcHNjLT50ZmRhdGEgPSAw eEYwMDEwMDAwOyAJLy8gUG93ZXItZG93biBbVGFibGUgMSwgTUFYNTcxMiBEYXRhc2hlZXRdCgl1 ZGVsYXkoMTAwKTsJCgoJcHNjLT50ZmRhdGEgPSAweEYwMDAwMDAwOyAJLy8gV2FrZS11cCBbVGFi bGUgMSwgTUFYNTcxMiBEYXRhc2hlZXRdCQkKCgl1ZGVsYXkoMTAwKTsKCQovLyAJcHJpbnRrKCJC ZWZvcmUgcmVxdWVzdF9pcnEnc1xuIik7CglpZiAocmVxdWVzdF9pcnEocl9pcnEsICZTUElfcnhf aXJxLCAvKklSUUZfRElTQUJMRUQqLzAsICJTUEkgcnggZG1hIiwgcHJpdikpIHsKCQlwcmludGso S0VSTl9FUlIgIlNQSTogU0RNQSByeCBpcnEgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOwoJCXJldHVy bjsKCX0gCglpZiAocmVxdWVzdF9pcnEodF9pcnEsICZTUElfdHhfaXJxLCAvKklSUUZfRElTQUJM RUQqLzAsICJTUEkgdHggZG1hIiwgcHJpdikpIHsKCQlwcmludGsoS0VSTl9FUlIgIlNQSTogU0RN QSB0eCBpcnEgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOwoJCXJldHVybjsKCX0gCgoJYmNvbV9nZW5f YmRfdHhfcmVzZXQodHhfYmNvbSk7CgliY29tX2dlbl9iZF9yeF9yZXNldChyeF9iY29tKTsKCi8v IAlwcmludGsoIkJlZm9yZSBzdWJtaXR0aW5nIGEgYnVmZmVyXG4iKTsKCXNwaW5fbG9jaygmcHJp di0+ZG1hX2xvY2spOwoJd2hpbGUgKCFiY29tX3F1ZXVlX2Z1bGwodHhfYmNvbSkpIHsKCQlzdHJ1 Y3QgYmNvbV9nZW5fYmQgKmJkOwoKCQkvKiBTdWJtaXQgYSBuZXcgb25lICovCgkJYmQgPSAoc3Ry dWN0IGJjb21fZ2VuX2JkICopIGJjb21fcHJlcGFyZV9uZXh0X2J1ZmZlcih0eF9iY29tKTsKCQli ZC0+c3RhdHVzID0gUEVSSU9EU0laRV9IVzsKCQliZC0+YnVmX3BhID0gU1BJX3R4X3NpbGVuY2Uu cGE7CgkJYmNvbV9zdWJtaXRfbmV4dF9idWZmZXIodHhfYmNvbSwgTlVMTCk7OwoJfQoJc3Bpbl91 bmxvY2soJnByaXYtPmRtYV9sb2NrKTsKCgliZCA9IGJjb21fcHJlcGFyZV9uZXh0X2J1ZmZlcihy eF9iY29tKTsKCgliZC0+c3RhdHVzID0gNTEyOwoJYmQtPmRhdGFbMF0gPSBTUElfcnhfYnVmcy5w YTsKCgliY29tX3N1Ym1pdF9uZXh0X2J1ZmZlcihyeF9iY29tLCAodm9pZCAqKVNQSV9yeF9idWZz LnBhKTsKCglwc2MtPmNvbW1hbmQgPSBNUEM1Mnh4X1BTQ19SU1RfUlg7Cglwc2MtPmNvbW1hbmQg PSBNUEM1Mnh4X1BTQ19SU1RfVFg7Cglwc2MtPmNvbW1hbmQgPSBNUEM1Mnh4X1BTQ19UWF9FTkFC TEUgfCBNUEM1Mnh4X1BTQ19SWF9FTkFCTEU7CgoKCWJjb21fZW5hYmxlKHR4X2Jjb20pOwoJYmNv bV9lbmFibGUocnhfYmNvbSk7CgoJa3RfdGltZXVwICAgPSB0aW1ldmFsX3RvX2t0aW1lKHRjbG9j a3VwKTsKCWt0X3RpbWVkb3duID0gdGltZXZhbF90b19rdGltZSh0Y2xvY2tkb3duKTsKCWhydGlt ZXJfaW5pdCgmc3RhcnRfdGltZXIsIENMT0NLX1JFQUxUSU1FLCBIUlRJTUVSX01PREVfUkVMKTsJ CglzdGFydF90aW1lci5mdW5jdGlvbiA9IHRpbWVyX2Z1bmN0OwovLyAJcHJpbnRrKCJCZWZvcmUg ZXhpdCBpbiBTZXR1cF9TUEkoKVxuIik7Cn0KCnZvaWQgcmVnaXN0ZXJfcGVyaW9kX2VsYXBzZWQo dm9pZCAoKmZ1bmNwdHIpKCkpIHsKLyoJcHJpbnRrKCJGdW5jdGlvbiByZWdpc3RlcmVkXG4iKTsq LwoJaG9va19wZXJfZWxhcCA9IGZ1bmNwdHI7Cn07Cgp2b2lkIHJlZ2lzdGVyX2hvb2tfZnJhbWVz X3JjdihVSW50ZWdlcjMyICgqZnVuY3B0cikoKSkgewovKglwcmludGsoIkZ1bmN0aW9uIHJlZ2lz dGVyZWRcbiIpOyovCglob29rX2ZyYW1lc19yY3YgPSBmdW5jcHRyOwoJaHJ0aW1lcl9zdGFydCgm c3RhcnRfdGltZXIsIGt0X3RpbWV1cCwgSFJUSU1FUl9NT0RFX1JFTCk7Cn07CgppbnQgc25kX1NQ SV9wY21fcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKiBzdWJzdHJlYW0pIHsKI2lm ZGVmIFNORF9JMlNfREVCVUcKCXNuZF9wY21fcnVudGltZV90ICpydW50aW1lID0gc3Vic3RyZWFt LT5ydW50aW1lOwoJcHJpbnRrKCJzbmRfSTJTbWd0X3BjbV9wcmVwYXJlXG4iKTsKCXByaW50aygi ICBydW50aW1lLT5idWZmZXJfc2l6ZT0laVxuIiwoaW50KXJ1bnRpbWUtPmJ1ZmZlcl9zaXplKTsK CXByaW50aygiICBydW50aW1lLT5wZXJpb2Rfc2l6ZT0laVxuIiwoaW50KXJ1bnRpbWUtPnBlcmlv ZF9zaXplKTsKCXByaW50aygiICBydW50aW1lLT5wZXJpb2RzPSVpXG4iLChpbnQpcnVudGltZS0+ cGVyaW9kcyk7CiNlbmRpZgoJU1BJX3BsYXkgPSBTUElfcG9zID0gMDsKCXJldHVybiAwOwp9OwoK RVhQT1JUX1NZTUJPTChyZWdpc3Rlcl9wZXJpb2RfZWxhcHNlZCk7CkVYUE9SVF9TWU1CT0wocmVn aXN0ZXJfaG9va19mcmFtZXNfcmN2KTsKRVhQT1JUX1NZTUJPTChzbmRfU1BJX3BjbV9wcmVwYXJl KTsKCgppbnQgU1BJc3BlYWtlcl9pbml0KHZvaWQpIHsKCglTUElfYnVmZmVyc19pbml0KCk7CglT UElfc2V0dXAoKTsKCXJldHVybiAwOwp9Cgp2b2lkIFNQSXNwZWFrZXJfZXhpdCh2b2lkKSB7CgoJ LyogRnJlZWluZyBidWZmZXIgU1BJc3BlYWtlciAqLwoJaWYgKFNQSV9yeF9idWZzLnZhKSB7Cglr ZnJlZShTUElfcnhfYnVmcy52YSk7Cgl9CglpZiAoU1BJX3R4X3NpbGVuY2UudmEpIHsKCWtmcmVl KFNQSV90eF9zaWxlbmNlLnZhKTsKCX0KfQoKbW9kdWxlX2luaXQoU1BJc3BlYWtlcl9pbml0KTsK bW9kdWxlX2V4aXQoU1BJc3BlYWtlcl9leGl0KTsKCk1PRFVMRV9ERVNDUklQVElPTigiTVBDNTJ4 eCBTUEkiKTsKTU9EVUxFX0FVVEhPUigiUGVkcm8gRG9tw61uZ3VleiwsLCwgKHBlZHJvLmRvbWlu Z3VlekBhZWQtZW5naW5lZXJpbmcuY29tKSIpOwpNT0RVTEVfTElDRU5TRSgiR1BMIik7Cgo= --_982237a7-e73e-422a-873a-bfb03cdf8ff1_--