From mboxrd@z Thu Jan 1 00:00:00 1970 From: Arun Sharma Date: Sat, 18 Oct 2003 00:36:30 +0000 Subject: NPTL support on ia32 MIME-Version: 1 Content-Type: multipart/mixed; boundary="------------060906020709090108010806" Message-Id: List-Id: To: linux-ia64@vger.kernel.org This is a multi-part message in MIME format. --------------060906020709090108010806 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit The attached patch helps you run NPTL based IA-32 threaded programs on Itanium. Specifically it: - adds support for new NPTL related system calls - adds support for a per-CPU GDT, just like i386 does - adds support for new clone related flags - Fix clobbering of %ebp (r13) (see process.c) Please review and let me know if you have any comments. -Arun --------------060906020709090108010806 Content-Type: text/plain; name="nptl-2.6.patch" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="nptl-2.6.patch" SW5kZXg6IGxpbnV4LTIuNi9pbmNsdWRlL2FzbS1pYTY0L2lhMzIuaAo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 Ci0tLSBsaW51eC0yLjYvaW5jbHVkZS9hc20taWE2NC9pYTMyLmgJKHJldmlzaW9uIDE0MTEx KQorKysgbGludXgtMi42L2luY2x1ZGUvYXNtLWlhNjQvaWEzMi5oCSh3b3JraW5nIGNvcHkp CkBAIC05LDkgKzksMTEgQEAKICNpZmRlZiBDT05GSUdfSUEzMl9TVVBQT1JUCiAKIGV4dGVy biB2b2lkIGlhMzJfY3B1X2luaXQgKHZvaWQpOworZXh0ZXJuIHZvaWQgaWEzMl9ib290X2dk dF9pbml0ICh2b2lkKTsKIGV4dGVybiB2b2lkIGlhMzJfZ2R0X2luaXQgKHZvaWQpOwogZXh0 ZXJuIGludCBpYTMyX2V4Y2VwdGlvbiAoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVk IGxvbmcgaXNyKTsKIGV4dGVybiBpbnQgaWEzMl9pbnRlcmNlcHQgKHN0cnVjdCBwdF9yZWdz ICpyZWdzLCB1bnNpZ25lZCBsb25nIGlzcik7CitleHRlcm4gaW50IGlhMzJfY2xvbmVfdGxz KHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIHN0cnVjdCBwdF9yZWdzICpjaGlsZHJlZ3Mp OwogCiAjZW5kaWYgLyogIUNPTkZJR19JQTMyX1NVUFBPUlQgKi8KIApJbmRleDogbGludXgt Mi42L2luY2x1ZGUvYXNtLWlhNjQvcHJvY2Vzc29yLmgKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbGlu dXgtMi42L2luY2x1ZGUvYXNtLWlhNjQvcHJvY2Vzc29yLmgJKHJldmlzaW9uIDE0MTExKQor KysgbGludXgtMi42L2luY2x1ZGUvYXNtLWlhNjQvcHJvY2Vzc29yLmgJKHdvcmtpbmcgY29w eSkKQEAgLTIzMCw2ICsyMzAsMjUgQEAKIAkJIChpbnQgKikgKGFkZHIpKTsJCQkJCQkJCVwK IH0pCiAKKyNpZmRlZiBDT05GSUdfSUEzMl9TVVBQT1JUCitzdHJ1Y3QgZGVzY19zdHJ1Y3Qg eworCXVuc2lnbmVkIGludCBhLGI7Cit9OworCisjZGVmaW5lIGRlc2NfZW1wdHkoZGVzYykg XAorCQkoISgoZGVzYyktPmEgKyAoZGVzYyktPmIpKQorCisjZGVmaW5lIGRlc2NfZXF1YWwo ZGVzYzEsIGRlc2MyKSBcCisJCSgoKGRlc2MxKS0+YSA9PSAoZGVzYzIpLT5hKSAmJiAoKGRl c2MxKS0+YiA9PSAoZGVzYzIpLT5iKSkKKworI2RlZmluZSBHRFRfRU5UUllfVExTX0VOVFJJ RVMJMworI2RlZmluZSBHRFRfRU5UUllfVExTX01JTgk2CisjZGVmaW5lIEdEVF9FTlRSWV9U TFNfTUFYIAkoR0RUX0VOVFJZX1RMU19NSU4gKyBHRFRfRU5UUllfVExTX0VOVFJJRVMgLSAx KQorCisjZGVmaW5lIFRMU19TSVpFIChHRFRfRU5UUllfVExTX0VOVFJJRVMgKiA4KQorCisj ZW5kaWYKKwogc3RydWN0IHRocmVhZF9zdHJ1Y3QgewogCV9fdTMyIGZsYWdzOwkJCS8qIHZh cmlvdXMgdGhyZWFkIGZsYWdzIChzZWUgSUE2NF9USFJFQURfKikgKi8KIAkvKiB3cml0aW5n IG9uX3VzdGFjayBpcyBwZXJmb3JtYW5jZS1jcml0aWNhbCwgc28gaXQncyB3b3J0aCBzcGVu ZGluZyA4IGJpdHMgb24gaXQuLi4gKi8KQEAgLTI0OSw2ICsyNjgsOSBAQAogCV9fdTY0IGZk cjsJCQkvKiBJQTMyIGZwIGV4Y2VwdC4gZGF0YSByZWcgKi8KIAlfX3U2NCBvbGRfazE7CQkJ Lyogb2xkIHZhbHVlIG9mIGFyLmsxICovCiAJX191NjQgb2xkX2lvYjsJCQkvKiBvbGQgSU9C YXNlIHZhbHVlICovCisgICAgICAgIC8qIGNhY2hlZCBUTFMgZGVzY3JpcHRvcnMuICovCisJ c3RydWN0IGRlc2Nfc3RydWN0IHRsc19hcnJheVtHRFRfRU5UUllfVExTX0VOVFJJRVNdOwor CiAjIGRlZmluZSBJTklUX1RIUkVBRF9JQTMyCS5lZmxhZyA9CTAsCQkJXAogCQkJCS5mc3Ig PQkJMCwJCQlcCiAJCQkJLmZjciA9CQkweDE3ODAwMDAwMDM3ZlVMTCwJXApJbmRleDogbGlu dXgtMi42L2FyY2gvaWE2NC9rZXJuZWwvcHJvY2Vzcy5jCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGxp bnV4LTIuNi9hcmNoL2lhNjQva2VybmVsL3Byb2Nlc3MuYwkocmV2aXNpb24gMTQxMTEpCisr KyBsaW51eC0yLjYvYXJjaC9pYTY0L2tlcm5lbC9wcm9jZXNzLmMJKHdvcmtpbmcgY29weSkK QEAgLTM2LDYgKzM2LDEwIEBACiAjIGluY2x1ZGUgPGFzbS9wZXJmbW9uLmg+CiAjZW5kaWYK IAorI2lmZGVmIENPTkZJR19JQTMyX1NVUFBPUlQKKyNpbmNsdWRlIDxhc20vaWEzMi5oPgor I2VuZGlmCisKICNpbmNsdWRlICJzaWdmcmFtZS5oIgogCiB2b2lkICgqaWE2NF9tYXJrX2lk bGUpKGludCk7CkBAIC0zMjQsNyArMzI4LDggQEAKIAltZW1jcHkoKHZvaWQgKikgY2hpbGRf cmJzLCAodm9pZCAqKSByYnMsIHJic19zaXplKTsKIAogCWlmICh1c2VyX21vZGUoY2hpbGRf cHRyZWdzKSkgewotCQlpZiAoY2xvbmVfZmxhZ3MgJiBDTE9ORV9TRVRUTFMpCisJCWlmICgo Y2xvbmVfZmxhZ3MgJiBDTE9ORV9TRVRUTFMpICYmICghSVNfSUEzMl9QUk9DRVNTKHJlZ3Mp KSkKKwogCQkJY2hpbGRfcHRyZWdzLT5yMTMgPSByZWdzLT5yMTY7CS8qIHNlZSBzeXNfY2xv bmUyKCkgaW4gZW50cnkuUyAqLwogCQlpZiAodXNlcl9zdGFja19iYXNlKSB7CiAJCQljaGls ZF9wdHJlZ3MtPnIxMiA9IHVzZXJfc3RhY2tfYmFzZSArIHVzZXJfc3RhY2tfc2l6ZSAtIDE2 OwpAQCAtMzgzLDggKzM4OCwxMSBAQAogCSAqIElmIHdlJ3JlIGNsb25pbmcgYW4gSUEzMiB0 YXNrIHRoZW4gc2F2ZSB0aGUgSUEzMiBleHRyYQogCSAqIHN0YXRlIGZyb20gdGhlIGN1cnJl bnQgdGFzayB0byB0aGUgbmV3IHRhc2sKIAkgKi8KLQlpZiAoSVNfSUEzMl9QUk9DRVNTKGlh NjRfdGFza19yZWdzKGN1cnJlbnQpKSkKKwlpZiAoSVNfSUEzMl9QUk9DRVNTKGlhNjRfdGFz a19yZWdzKGN1cnJlbnQpKSkgewogCQlpYTMyX3NhdmVfc3RhdGUocCk7CisJCWlmIChjbG9u ZV9mbGFncyAmIENMT05FX1NFVFRMUykKKwkJCXJldHZhbCA9IGlhMzJfY2xvbmVfdGxzKHAs IGNoaWxkX3B0cmVncyk7CisJfQogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfUEVSRk1PTgpJ bmRleDogbGludXgtMi42L2FyY2gvaWE2NC9rZXJuZWwvc21wYm9vdC5jCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLS0tIGxpbnV4LTIuNi9hcmNoL2lhNjQva2VybmVsL3NtcGJvb3QuYwkocmV2aXNpb24g MTQxMTEpCisrKyBsaW51eC0yLjYvYXJjaC9pYTY0L2tlcm5lbC9zbXBib290LmMJKHdvcmtp bmcgY29weSkKQEAgLTQ3LDYgKzQ3LDkgQEAKICNpbmNsdWRlIDxhc20vc2FsLmg+CiAjaW5j bHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpZmRlZiBD T05GSUdfSUEzMl9TVVBQT1JUCisjaW5jbHVkZSA8YXNtL2lhMzIuaD4KKyNlbmRpZgogCiAj ZGVmaW5lIFNNUF9ERUJVRyAwCiAKQEAgLTMxMiw2ICszMTUsOSBAQAogCWxvY2FsX2lycV9l bmFibGUoKTsKIAljYWxpYnJhdGVfZGVsYXkoKTsKIAlsb2NhbF9jcHVfZGF0YS0+bG9vcHNf cGVyX2ppZmZ5ID0gbG9vcHNfcGVyX2ppZmZ5OworI2lmZGVmIENPTkZJR19JQTMyX1NVUFBP UlQKKwlpYTMyX2dkdF9pbml0KCk7CisjZW5kaWYKIAogCWlmICghKHNhbF9wbGF0Zm9ybV9m ZWF0dXJlcyAmIElBNjRfU0FMX1BMQVRGT1JNX0ZFQVRVUkVfSVRDX0RSSUZUKSkgewogCQkv KgpJbmRleDogbGludXgtMi42L2FyY2gvaWE2NC9tbS9pbml0LmMKPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot LS0gbGludXgtMi42L2FyY2gvaWE2NC9tbS9pbml0LmMJKHJldmlzaW9uIDE0MTExKQorKysg bGludXgtMi42L2FyY2gvaWE2NC9tbS9pbml0LmMJKHdvcmtpbmcgY29weSkKQEAgLTU1NSw2 ICs1NTUsNiBAQAogCXNldHVwX2dhdGUoKTsJLyogc2V0dXAgZ2F0ZSBwYWdlcyBiZWZvcmUg d2UgZnJlZSB1cCBib290IG1lbW9yeS4uLiAqLwogCiAjaWZkZWYgQ09ORklHX0lBMzJfU1VQ UE9SVAotCWlhMzJfZ2R0X2luaXQoKTsKKwlpYTMyX2Jvb3RfZ2R0X2luaXQoKTsKICNlbmRp ZgogfQpJbmRleDogbGludXgtMi42L2FyY2gvaWE2NC9pYTMyL2lhMzJfZW50cnkuUwo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ci0tLSBsaW51eC0yLjYvYXJjaC9pYTY0L2lhMzIvaWEzMl9lbnRyeS5TCShy ZXZpc2lvbiAxNDExMSkKKysrIGxpbnV4LTIuNi9hcmNoL2lhNjQvaWEzMi9pYTMyX2VudHJ5 LlMJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKIAogRU5UUlkoaWEzMl9jbG9u ZSkKIAkucHJvbG9ndWUgQVNNX1VOV19QUkxHX1JQfEFTTV9VTldfUFJMR19QRlMsIEFTTV9V TldfUFJMR19HUlNBVkUoMikKLQlhbGxvYyByMTY9YXIucGZzLDIsMiw0LDAKKwlhbGxvYyBy MTY9YXIucGZzLDUsMiw2LDAKIAlET19TQVZFX1NXSVRDSF9TVEFDSwogCW1vdiBsb2MwPXJw CiAJbW92IGxvYzE9cjE2CQkJCS8vIHNhdmUgYXIucGZzIGFjcm9zcyBkb19mb3JrCkBAIC00 MSw2ICs0MSw4IEBACiAJbW92IG91dDM9MTYJCQkJLy8gc3RhY2tzaXplIChjb21wZW5zYXRl cyBmb3IgMTYtYnl0ZSBzY3JhdGNoIGFyZWEpCiAJYWRkcyBvdXQyPUlBNjRfU1dJVENIX1NU QUNLX1NJWkUrMTYsc3AJLy8gb3V0MiA9ICZyZWdzCiAJZGVwIG91dDA9MCxpbjAsQ0xPTkVf SURMRVRBU0tfQklULDEJLy8gb3V0MCA9IGNsb25lX2ZsYWdzICYgfkNMT05FX0lETEVUQVNL CisJenh0NCBvdXQ0PWluMgkJCQkvLyBvdXQ0ID0gcGFyZW50X3RpZHB0cgorCXp4dDQgb3V0 NT1pbjQJCQkJLy8gb3V0NSA9IGNoaWxkX3RpZHB0cgogCWJyLmNhbGwuc3B0ay5tYW55IHJw PWRvX2ZvcmsKIC5yZXQwOgkucmVzdG9yZSBzcAogCWFkZHMgc3A9SUE2NF9TV0lUQ0hfU1RB Q0tfU0laRSxzcAkvLyBwb3AgdGhlIHN3aXRjaCBzdGFjawpAQCAtNDI0LDEzICs0MjYsMTMg QEAKIAlkYXRhOCBzeXNfbmlfc3lzY2FsbAkvKiAyMzUgKi8KIAlkYXRhOCBzeXNfbmlfc3lz Y2FsbAogCWRhdGE4IHN5c19uaV9zeXNjYWxsCisJZGF0YTggc3lzX3RraWxsCiAJZGF0YTgg c3lzX25pX3N5c2NhbGwKLQlkYXRhOCBzeXNfbmlfc3lzY2FsbAogCWRhdGE4IGNvbXBhdF9z eXNfZnV0ZXgJLyogMjQwICovCiAJZGF0YTggY29tcGF0X3N5c19zY2hlZF9zZXRhZmZpbml0 eQogCWRhdGE4IGNvbXBhdF9zeXNfc2NoZWRfZ2V0YWZmaW5pdHkKLQlkYXRhOCBzeXNfbmlf c3lzY2FsbAotCWRhdGE4IHN5c19uaV9zeXNjYWxsCisJZGF0YTggc3lzMzJfc2V0X3RocmVh ZF9hcmVhCisJZGF0YTggc3lzMzJfZ2V0X3RocmVhZF9hcmVhCiAJZGF0YTggc3lzX25pX3N5 c2NhbGwJLyogMjQ1ICovCiAJZGF0YTggc3lzX25pX3N5c2NhbGwKIAlkYXRhOCBzeXNfbmlf c3lzY2FsbApAQCAtNDM4LDE0ICs0NDAsMTQgQEAKIAlkYXRhOCBzeXNfbmlfc3lzY2FsbAog CWRhdGE4IHN5c19uaV9zeXNjYWxsCS8qIDI1MCAqLwogCWRhdGE4IHN5c19uaV9zeXNjYWxs CisJZGF0YTggc3lzX2V4aXRfZ3JvdXAKIAlkYXRhOCBzeXNfbmlfc3lzY2FsbAotCWRhdGE4 IHN5c19uaV9zeXNjYWxsCiAJZGF0YTggc3lzX2Vwb2xsX2NyZWF0ZQogCWRhdGE4IHN5czMy X2Vwb2xsX2N0bAkvKiAyNTUgKi8KIAlkYXRhOCBzeXMzMl9lcG9sbF93YWl0CisJZGF0YTgg c3lzX3JlbWFwX2ZpbGVfcGFnZXMKKwlkYXRhOCBzeXNfc2V0X3RpZF9hZGRyZXNzCiAJZGF0 YTggc3lzX25pX3N5c2NhbGwKLQlkYXRhOCBzeXNfbmlfc3lzY2FsbAotCWRhdGE4IHN5c19u aV9zeXNjYWxsCiAJZGF0YTggc3lzX25pX3N5c2NhbGwJLyogMjYwICovCiAJZGF0YTggc3lz X25pX3N5c2NhbGwKIAlkYXRhOCBzeXNfbmlfc3lzY2FsbApJbmRleDogbGludXgtMi42L2Fy Y2gvaWE2NC9pYTMyL2lhMzJfbGR0LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbGludXgtMi42L2Fy Y2gvaWE2NC9pYTMyL2lhMzJfbGR0LmMJKHJldmlzaW9uIDE0MTExKQorKysgbGludXgtMi42 L2FyY2gvaWE2NC9pYTMyL2lhMzJfbGR0LmMJKHdvcmtpbmcgY29weSkKQEAgLTgyLDcgKzgy LDcgQEAKIHN0YXRpYyBpbnQKIHdyaXRlX2xkdCAodm9pZCAqIHB0ciwgdW5zaWduZWQgbG9u ZyBieXRlY291bnQsIGludCBvbGRtb2RlKQogewotCXN0cnVjdCBpYTMyX21vZGlmeV9sZHRf bGR0X3MgbGR0X2luZm87CisJc3RydWN0IGlhMzJfdXNlcl9kZXNjIGxkdF9pbmZvOwogCV9f dTY0IGVudHJ5OwogCWludCByZXQ7CiAKSW5kZXg6IGxpbnV4LTIuNi9hcmNoL2lhNjQvaWEz Mi9pYTMycHJpdi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGxpbnV4LTIuNi9hcmNoL2lhNjQvaWEz Mi9pYTMycHJpdi5oCShyZXZpc2lvbiAxNDExMSkKKysrIGxpbnV4LTIuNi9hcmNoL2lhNjQv aWEzMi9pYTMycHJpdi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMjcsMTUgKzMyNywzMCBAQAog I2RlZmluZSBfX1VTRVJfQ1MgICAgICAweDIzCiAjZGVmaW5lIF9fVVNFUl9EUyAgICAgIDB4 MkIKIAotI2RlZmluZSBGSVJTVF9UU1NfRU5UUlkgNgotI2RlZmluZSBGSVJTVF9MRFRfRU5U UlkgKEZJUlNUX1RTU19FTlRSWSsxKQotI2RlZmluZSBfVFNTKG4pICgoKCh1bnNpZ25lZCBs b25nKSBuKTw8NCkrKEZJUlNUX1RTU19FTlRSWTw8MykpCi0jZGVmaW5lIF9MRFQobikgKCgo KHVuc2lnbmVkIGxvbmcpIG4pPDw0KSsoRklSU1RfTERUX0VOVFJZPDwzKSkKKy8qCisgKiBU aGUgcGVyLWNwdSBHRFQgaGFzIDMyIGVudHJpZXM6IHNlZSA8YXNtLWkzODYvc2VnbWVudC5o PgorICovCisjZGVmaW5lIEdEVF9FTlRSSUVTIDMyCiAKKyNkZWZpbmUgR0RUX1NJWkUgKEdE VF9FTlRSSUVTICogOCkKKworI2RlZmluZSBHRFRfRU5UUllfVExTX0VOVFJJRVMJMworI2Rl ZmluZSBHRFRfRU5UUllfVExTX01JTgk2CisjZGVmaW5lIEdEVF9FTlRSWV9UTFNfTUFYIAko R0RUX0VOVFJZX1RMU19NSU4gKyBHRFRfRU5UUllfVExTX0VOVFJJRVMgLSAxKQorCisjZGVm aW5lIFRMU19TSVpFIChHRFRfRU5UUllfVExTX0VOVFJJRVMgKiA4KQorCisjZGVmaW5lIFRT U19FTlRSWSAxNAorI2RlZmluZSBMRFRfRU5UUlkgKFRTU19FTlRSWSsxKQorCisKICNkZWZp bmUgSUEzMl9TRUdTRUxfUlBMCQkoMHgzIDw8IDApCiAjZGVmaW5lIElBMzJfU0VHU0VMX1RJ CQkoMHgxIDw8IDIpCiAjZGVmaW5lIElBMzJfU0VHU0VMX0lOREVYX1NISUZUCTMKIAorI2Rl ZmluZSBfVFNTICgodW5zaWduZWQgbG9uZykgVFNTX0VOVFJZIDw8IElBMzJfU0VHU0VMX0lO REVYX1NISUZUKQkKKyNkZWZpbmUgX0xEVCAoKHVuc2lnbmVkIGxvbmcpIExEVF9FTlRSWSA8 PCBJQTMyX1NFR1NFTF9JTkRFWF9TSElGVCkJCisKICNkZWZpbmUgSUEzMl9TRUdfQkFTRQkJ MTYKICNkZWZpbmUgSUEzMl9TRUdfVFlQRQkJNDAKICNkZWZpbmUgSUEzMl9TRUdfU1lTCQk0 NApAQCAtNDE5LDcgKzQzNCw0MSBAQAogI2RlZmluZSBJQTMyX0xEVF9FTlRSSUVTCTgxOTIJ CS8qIE1heGltdW0gbnVtYmVyIG9mIExEVCBlbnRyaWVzIHN1cHBvcnRlZC4gKi8KICNkZWZp bmUgSUEzMl9MRFRfRU5UUllfU0laRQk4CQkvKiBUaGUgc2l6ZSBvZiBlYWNoIExEVCBlbnRy eS4gKi8KIAotc3RydWN0IGlhMzJfbW9kaWZ5X2xkdF9sZHRfcyB7CisjZGVmaW5lIExEVF9l bnRyeV9hKGluZm8pIFwKKwkoKCgoaW5mbyktPmJhc2VfYWRkciAmIDB4MDAwMGZmZmYpIDw8 IDE2KSB8ICgoaW5mbyktPmxpbWl0ICYgMHgwZmZmZikpCisKKyNkZWZpbmUgTERUX2VudHJ5 X2IoaW5mbykgXAorCSgoKGluZm8pLT5iYXNlX2FkZHIgJiAweGZmMDAwMDAwKSB8IFwKKwko KChpbmZvKS0+YmFzZV9hZGRyICYgMHgwMGZmMDAwMCkgPj4gMTYpIHwgXAorCSgoaW5mbykt PmxpbWl0ICYgMHhmMDAwMCkgfCBcCisJKCgoaW5mbyktPnJlYWRfZXhlY19vbmx5IF4gMSkg PDwgOSkgfCBcCisJKChpbmZvKS0+Y29udGVudHMgPDwgMTApIHwgXAorCSgoKGluZm8pLT5z ZWdfbm90X3ByZXNlbnQgXiAxKSA8PCAxNSkgfCBcCisJKChpbmZvKS0+c2VnXzMyYml0IDw8 IDIyKSB8IFwKKwkoKGluZm8pLT5saW1pdF9pbl9wYWdlcyA8PCAyMykgfCBcCisJKChpbmZv KS0+dXNlYWJsZSA8PCAyMCkgfCBcCisJMHg3MTAwKQorCisjZGVmaW5lIExEVF9lbXB0eShp bmZvKSAoXAorCShpbmZvKS0+YmFzZV9hZGRyCT09IDAJJiYgXAorCShpbmZvKS0+bGltaXQJ CT09IDAJJiYgXAorCShpbmZvKS0+Y29udGVudHMJPT0gMAkmJiBcCisJKGluZm8pLT5yZWFk X2V4ZWNfb25seQk9PSAxCSYmIFwKKwkoaW5mbyktPnNlZ18zMmJpdAk9PSAwCSYmIFwKKwko aW5mbyktPmxpbWl0X2luX3BhZ2VzCT09IDAJJiYgXAorCShpbmZvKS0+c2VnX25vdF9wcmVz ZW50CT09IDEJJiYgXAorCShpbmZvKS0+dXNlYWJsZQkJPT0gMAkpCisKK3N0YXRpYyBpbmxp bmUgdm9pZCBsb2FkX1RMUyhzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqdCwgdW5zaWduZWQgaW50 IGNwdSkKK3sKKwlleHRlcm4gc3RydWN0IGRlc2Nfc3RydWN0ICpjcHVfZ2R0X3RhYmxlW05S X0NQVVNdOworCisjZGVmaW5lIEMoaSkgY3B1X2dkdF90YWJsZVtjcHVdW0dEVF9FTlRSWV9U TFNfTUlOICsgaV0gPSB0LT50bHNfYXJyYXlbaV0KKwlDKDApOyBDKDEpOyBDKDIpOworI3Vu ZGVmIEMKK30KKworc3RydWN0IGlhMzJfdXNlcl9kZXNjIHsKIAl1bnNpZ25lZCBpbnQgZW50 cnlfbnVtYmVyOwogCXVuc2lnbmVkIGludCBiYXNlX2FkZHI7CiAJdW5zaWduZWQgaW50IGxp bWl0OwpJbmRleDogbGludXgtMi42L2FyY2gvaWE2NC9pYTMyL2JpbmZtdF9lbGYzMi5jCj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KLS0tIGxpbnV4LTIuNi9hcmNoL2lhNjQvaWEzMi9iaW5mbXRfZWxmMzIu YwkocmV2aXNpb24gMTQxMTEpCisrKyBsaW51eC0yLjYvYXJjaC9pYTY0L2lhMzIvYmluZm10 X2VsZjMyLmMJKHdvcmtpbmcgY29weSkKQEAgLTYyLDcgKzYyLDcgQEAKIHN0cnVjdCBwYWdl ICoKIGlhMzJfaW5zdGFsbF9zaGFyZWRfcGFnZSAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2 bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgaW50IG5vX3NoYXJlKQogewotCXN0cnVjdCBw YWdlICpwZyA9IGlhMzJfc2hhcmVkX3BhZ2VbKGFkZHJlc3MgLSB2bWEtPnZtX3N0YXJ0KS9Q QUdFX1NJWkVdOworCXN0cnVjdCBwYWdlICpwZyA9IGlhMzJfc2hhcmVkX3BhZ2VbIHNtcF9w cm9jZXNzb3JfaWQoKSArIChhZGRyZXNzIC0gdm1hLT52bV9zdGFydCkvUEFHRV9TSVpFXTsK IAogCWdldF9wYWdlKHBnKTsKIAlyZXR1cm4gcGc7CkluZGV4OiBsaW51eC0yLjYvYXJjaC9p YTY0L2lhMzIvaWEzMl9zdXBwb3J0LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbGludXgtMi42L2Fy Y2gvaWE2NC9pYTMyL2lhMzJfc3VwcG9ydC5jCShyZXZpc2lvbiAxNDExMSkKKysrIGxpbnV4 LTIuNi9hcmNoL2lhNjQvaWEzMi9pYTMyX3N1cHBvcnQuYwkod29ya2luZyBjb3B5KQpAQCAt MjMsMTQgKzIzLDE2IEBACiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxh c20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFz bS91YWNjZXNzLmg+CiAKICNpbmNsdWRlICJpYTMycHJpdi5oIgogCiBleHRlcm4gdm9pZCBk aWVfaWZfa2VybmVsIChjaGFyICpzdHIsIHN0cnVjdCBwdF9yZWdzICpyZWdzLCBsb25nIGVy cik7CiAKIHN0cnVjdCBleGVjX2RvbWFpbiBpYTMyX2V4ZWNfZG9tYWluOwotc3RydWN0IHBh Z2UgKmlhMzJfc2hhcmVkX3BhZ2VbKDIqSUEzMl9QQUdFX1NJWkUgKyBQQUdFX1NJWkUgLSAx KS9QQUdFX1NJWkVdOwotdW5zaWduZWQgbG9uZyAqaWEzMl9nZHQ7CitzdHJ1Y3QgcGFnZSAq aWEzMl9zaGFyZWRfcGFnZVsoUEFHRV9BTElHTihJQTMyX1BBR0VfU0laRSkvUEFHRV9TSVpF KSAqIE5SX0NQVVNdOwordW5zaWduZWQgbG9uZyAqaWEzMl9ib290X2dkdDsKK3Vuc2lnbmVk IGxvbmcgKmNwdV9nZHRfdGFibGVbTlJfQ1BVU107CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25n CiBsb2FkX2Rlc2MgKHUxNiBzZWxlY3RvcikKQEAgLTQzLDggKzQ1LDggQEAKIAkJdGFibGUg PSAodW5zaWduZWQgbG9uZyAqKSBJQTMyX0xEVF9PRkZTRVQ7CiAJCWxpbWl0ID0gSUEzMl9M RFRfRU5UUklFUzsKIAl9IGVsc2UgewotCQl0YWJsZSA9IGlhMzJfZ2R0OwotCQlsaW1pdCA9 IElBMzJfUEFHRV9TSVpFIC8gc2l6ZW9mKGlhMzJfZ2R0WzBdKTsKKwkJdGFibGUgPSBjcHVf Z2R0X3RhYmxlW3NtcF9wcm9jZXNzb3JfaWQoKV07CisJCWxpbWl0ID0gSUEzMl9QQUdFX1NJ WkUgLyBzaXplb2YoaWEzMl9ib290X2dkdFswXSk7CiAJfQogCWluZGV4ID0gc2VsZWN0b3Ig Pj4gSUEzMl9TRUdTRUxfSU5ERVhfU0hJRlQ7CiAJaWYgKGluZGV4ID49IGxpbWl0KQpAQCAt NjYsNiArNjgsMzUgQEAKIAlyZWdzLT5hcl9zc2QgPSBsb2FkX2Rlc2MocmVncy0+cjE3ID4+ IDE2KTsJLyogU1NEICovCiB9CiAKK2ludAoraWEzMl9jbG9uZV90bHMoc3RydWN0IHRhc2tf c3RydWN0ICpjaGlsZCwgc3RydWN0IHB0X3JlZ3MgKmNoaWxkcmVncykKK3sKKwlzdHJ1Y3Qg ZGVzY19zdHJ1Y3QgKmRlc2M7CisJc3RydWN0IGlhMzJfdXNlcl9kZXNjIGluZm87CisJaW50 IGlkeDsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmaW5mbywgKHZvaWQgKikoY2hpbGRyZWdz LT5yMTQgJiAweGZmZmZmZmZmKSwgCisJCQkgICBzaXplb2YoaW5mbykpKQorCQlyZXR1cm4g LUVGQVVMVDsKKwlpZiAoTERUX2VtcHR5KCZpbmZvKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisK KwlpZHggPSBpbmZvLmVudHJ5X251bWJlcjsKKwlpZiAoaWR4IDwgR0RUX0VOVFJZX1RMU19N SU4gfHwgaWR4ID4gR0RUX0VOVFJZX1RMU19NQVgpCisJCXJldHVybiAtRUlOVkFMOworCisJ ZGVzYyA9IGNoaWxkLT50aHJlYWQudGxzX2FycmF5ICsgaWR4IC0gR0RUX0VOVFJZX1RMU19N SU47CisJZGVzYy0+YSA9IExEVF9lbnRyeV9hKCZpbmZvKTsKKwlkZXNjLT5iID0gTERUX2Vu dHJ5X2IoJmluZm8pOworCisJLyogWFhYOiBjYW4gdGhpcyBiZSBkb25lIGluIGEgY2xlYW5l ciB3YXkgPyAqLworCWxvYWRfVExTKCZjaGlsZC0+dGhyZWFkLCBzbXBfcHJvY2Vzc29yX2lk KCkpOworCWlhMzJfbG9hZF9zZWdtZW50X2Rlc2NyaXB0b3JzKGNoaWxkKTsKKwlsb2FkX1RM UygmY3VycmVudC0+dGhyZWFkLCBzbXBfcHJvY2Vzc29yX2lkKCkpOworCisJcmV0dXJuIDA7 Cit9CisKIHZvaWQKIGlhMzJfc2F2ZV9zdGF0ZSAoc3RydWN0IHRhc2tfc3RydWN0ICp0KQog ewpAQCAtNzYsNiArMTA3LDcgQEAKIAl0LT50aHJlYWQuZmRyICAgPSBpYTY0X2dldHJlZyhf SUE2NF9SRUdfQVJfRkRSKTsKIAlpYTY0X3NldF9rcihJQTY0X0tSX0lPX0JBU0UsIHQtPnRo cmVhZC5vbGRfaW9iKTsKIAlpYTY0X3NldF9rcihJQTY0X0tSX1RTU0QsIHQtPnRocmVhZC5v bGRfazEpOworCiB9CiAKIHZvaWQKQEAgLTgzLDE0ICsxMTUsMTMgQEAKIHsKIAl1bnNpZ25l ZCBsb25nIGVmbGFnLCBmc3IsIGZjciwgZmlyLCBmZHIsIHRzc2Q7CiAJc3RydWN0IHB0X3Jl Z3MgKnJlZ3MgPSBpYTY0X3Rhc2tfcmVncyh0KTsKLQlpbnQgbnIgPSBnZXRfY3B1KCk7CS8q IExEVCBhbmQgVFNTIGRlcGVuZCBvbiBDUFUgbnVtYmVyOiAqLwogCiAJZWZsYWcgPSB0LT50 aHJlYWQuZWZsYWc7CiAJZnNyID0gdC0+dGhyZWFkLmZzcjsKIAlmY3IgPSB0LT50aHJlYWQu ZmNyOwogCWZpciA9IHQtPnRocmVhZC5maXI7CiAJZmRyID0gdC0+dGhyZWFkLmZkcjsKLQl0 c3NkID0gbG9hZF9kZXNjKF9UU1MobnIpKTsJCQkJCS8qIFRTU0QgKi8KKwl0c3NkID0gbG9h ZF9kZXNjKF9UU1MpOwkJCQkJLyogVFNTRCAqLwogCiAJaWE2NF9zZXRyZWcoX0lBNjRfUkVH X0FSX0VGTEFHLCBlZmxhZyk7CiAJaWE2NF9zZXRyZWcoX0lBNjRfUkVHX0FSX0ZTUiwgZnNy KTsKQEAgLTEwMiw4ICsxMzMsMTAgQEAKIAlpYTY0X3NldF9rcihJQTY0X0tSX0lPX0JBU0Us IElBMzJfSU9CQVNFKTsKIAlpYTY0X3NldF9rcihJQTY0X0tSX1RTU0QsIHRzc2QpOwogCi0J cmVncy0+cjE3ID0gKF9UU1MobnIpIDw8IDQ4KSB8IChfTERUKG5yKSA8PCAzMikgfCAoX191 MzIpIHJlZ3MtPnIxNzsKLQlyZWdzLT5yMzAgPSBsb2FkX2Rlc2MoX0xEVChucikpOwkJCQkv KiBMRFREICovCisJcmVncy0+cjE3ID0gKF9UU1MgPDwgNDgpIHwgKF9MRFQgPDwgMzIpIHwg KF9fdTMyKSByZWdzLT5yMTc7CisJcmVncy0+cjMwID0gbG9hZF9kZXNjKF9MRFQpOwkJCQkv KiBMRFREICovCisJbG9hZF9UTFMoJnQtPnRocmVhZCwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsK KwogCXB1dF9jcHUoKTsKIH0KIApAQCAtMTEzLDM3ICsxNDYsNDMgQEAKIHZvaWQKIGlhMzJf Z2R0X2luaXQgKHZvaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyAqdHNzOworCWludCBjcHUgPSBz bXBfcHJvY2Vzc29yX2lkKCk7CisKKwlpYTMyX3NoYXJlZF9wYWdlW2NwdV0gPSBhbGxvY19w YWdlKEdGUF9LRVJORUwpOworCWNwdV9nZHRfdGFibGVbY3B1XSA9IHBhZ2VfYWRkcmVzcyhp YTMyX3NoYXJlZF9wYWdlW2NwdV0pOworCisJLyogQ29weSBmcm9tIHRoZSBib290IGNwdSdz IEdEVCAqLworCW1lbWNweShjcHVfZ2R0X3RhYmxlW2NwdV0sIGlhMzJfYm9vdF9nZHQsIFBB R0VfU0laRSk7Cit9CisKKworLyoKKyAqIFNldHVwIElBMzIgR0RUIGFuZCBUU1MKKyAqLwor dm9pZAoraWEzMl9ib290X2dkdF9pbml0ICh2b2lkKQorewogCXVuc2lnbmVkIGxvbmcgbGR0 X3NpemU7Ci0JaW50IG5yOwogCiAJaWEzMl9zaGFyZWRfcGFnZVswXSA9IGFsbG9jX3BhZ2Uo R0ZQX0tFUk5FTCk7Ci0JaWEzMl9nZHQgPSBwYWdlX2FkZHJlc3MoaWEzMl9zaGFyZWRfcGFn ZVswXSk7Ci0JdHNzID0gaWEzMl9nZHQgKyBJQTMyX1BBR0VfU0laRS9zaXplb2YoaWEzMl9n ZHRbMF0pOworCWlhMzJfYm9vdF9nZHQgPSBwYWdlX2FkZHJlc3MoaWEzMl9zaGFyZWRfcGFn ZVswXSk7CisJY3B1X2dkdF90YWJsZVswXSA9IGlhMzJfYm9vdF9nZHQ7CiAKLQlpZiAoSUEz Ml9QQUdFX1NJWkUgPT0gUEFHRV9TSVpFKSB7Ci0JCWlhMzJfc2hhcmVkX3BhZ2VbMV0gPSBh bGxvY19wYWdlKEdGUF9LRVJORUwpOwotCQl0c3MgPSBwYWdlX2FkZHJlc3MoaWEzMl9zaGFy ZWRfcGFnZVsxXSk7Ci0JfQotCiAJLyogQ1MgZGVzY3JpcHRvciBpbiBJQS0zMiAoc2NyYW1i bGVkKSBmb3JtYXQgKi8KLQlpYTMyX2dkdFtfX1VTRVJfQ1MgPj4gM10gPSBJQTMyX1NFR19E RVNDUklQVE9SKDAsIChJQTMyX1BBR0VfT0ZGU0VULTEpID4+IElBMzJfUEFHRV9TSElGVCwK KwlpYTMyX2Jvb3RfZ2R0W19fVVNFUl9DUyA+PiAzXSA9IElBMzJfU0VHX0RFU0NSSVBUT1Io MCwgKElBMzJfUEFHRV9PRkZTRVQtMSkgPj4gSUEzMl9QQUdFX1NISUZULAogCQkJCQkJICAg ICAgIDB4YiwgMSwgMywgMSwgMSwgMSwgMSk7CiAKIAkvKiBEUyBkZXNjcmlwdG9yIGluIElB LTMyIChzY3JhbWJsZWQpIGZvcm1hdCAqLwotCWlhMzJfZ2R0W19fVVNFUl9EUyA+PiAzXSA9 IElBMzJfU0VHX0RFU0NSSVBUT1IoMCwgKElBMzJfUEFHRV9PRkZTRVQtMSkgPj4gSUEzMl9Q QUdFX1NISUZULAorCWlhMzJfYm9vdF9nZHRbX19VU0VSX0RTID4+IDNdID0gSUEzMl9TRUdf REVTQ1JJUFRPUigwLCAoSUEzMl9QQUdFX09GRlNFVC0xKSA+PiBJQTMyX1BBR0VfU0hJRlQs CiAJCQkJCQkgICAgICAgMHgzLCAxLCAzLCAxLCAxLCAxLCAxKTsKIAotCS8qIFdlIG5ldmVy IGNoYW5nZSB0aGUgVFNTIGFuZCBMRFQgZGVzY3JpcHRvcnMsIHNvIHdlIGNhbiBzaGFyZSB0 aGVtIGFjcm9zcyBhbGwgQ1BVcy4gICovCiAJbGR0X3NpemUgPSBQQUdFX0FMSUdOKElBMzJf TERUX0VOVFJJRVMqSUEzMl9MRFRfRU5UUllfU0laRSk7Ci0JZm9yIChuciA9IDA7IG5yIDwg TlJfQ1BVUzsgKytucikgewotCQlpYTMyX2dkdFtfVFNTKG5yKSA+PiBJQTMyX1NFR1NFTF9J TkRFWF9TSElGVF0KLQkJCT0gSUEzMl9TRUdfREVTQ1JJUFRPUihJQTMyX1RTU19PRkZTRVQs IDIzNSwKLQkJCQkJICAgICAgMHhiLCAwLCAzLCAxLCAxLCAxLCAwKTsKLQkJaWEzMl9nZHRb X0xEVChucikgPj4gSUEzMl9TRUdTRUxfSU5ERVhfU0hJRlRdCi0JCQk9IElBMzJfU0VHX0RF U0NSSVBUT1IoSUEzMl9MRFRfT0ZGU0VULCBsZHRfc2l6ZSAtIDEsCi0JCQkJCSAgICAgIDB4 MiwgMCwgMywgMSwgMSwgMSwgMCk7Ci0JfQorCWlhMzJfYm9vdF9nZHRbVFNTX0VOVFJZXQor CQk9IElBMzJfU0VHX0RFU0NSSVBUT1IoSUEzMl9UU1NfT0ZGU0VULCAyMzUsCisJCQkJICAg ICAgMHhiLCAwLCAzLCAxLCAxLCAxLCAwKTsKKwlpYTMyX2Jvb3RfZ2R0W0xEVF9FTlRSWV0J CisJCT0gSUEzMl9TRUdfREVTQ1JJUFRPUihJQTMyX0xEVF9PRkZTRVQsIGxkdF9zaXplIC0g MSwKKwkJCQkgICAgICAweDIsIDAsIDMsIDEsIDEsIDEsIDApOwogfQogCiAvKgpJbmRleDog bGludXgtMi42L2FyY2gvaWE2NC9pYTMyL3N5c19pYTMyLmMKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g bGludXgtMi42L2FyY2gvaWE2NC9pYTMyL3N5c19pYTMyLmMJKHJldmlzaW9uIDE0MTExKQor KysgbGludXgtMi42L2FyY2gvaWE2NC9pYTMyL3N5c19pYTMyLmMJKHdvcmtpbmcgY29weSkK QEAgLTI4MTcsNiArMjgxNywxMTYgQEAKIAlyZXR1cm4gbnVtZXZlbnRzOwogfQogCisvKgor ICogR2V0IGEgeWV0IHVudXNlZCBUTFMgZGVzY3JpcHRvciBpbmRleC4KKyAqLworc3RhdGlj IGludCBnZXRfZnJlZV9pZHgodm9pZCkKK3sKKwlzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqdCA9 ICZjdXJyZW50LT50aHJlYWQ7CisJaW50IGlkeDsKKworCWZvciAoaWR4ID0gMDsgaWR4IDwg R0RUX0VOVFJZX1RMU19FTlRSSUVTOyBpZHgrKykKKwkJaWYgKGRlc2NfZW1wdHkodC0+dGxz X2FycmF5ICsgaWR4KSkKKwkJCXJldHVybiBpZHggKyBHRFRfRU5UUllfVExTX01JTjsKKwly ZXR1cm4gLUVTUkNIOworfQorCisvKgorICogU2V0IGEgZ2l2ZW4gVExTIGRlc2NyaXB0b3I6 CisgKi8KK2FzbWxpbmthZ2UgaW50CitzeXMzMl9zZXRfdGhyZWFkX2FyZWEoc3RydWN0IGlh MzJfdXNlcl9kZXNjICp1X2luZm8pCit7CisJc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnQgPSAm Y3VycmVudC0+dGhyZWFkOworCXN0cnVjdCBpYTMyX3VzZXJfZGVzYyBpbmZvOworCXN0cnVj dCBkZXNjX3N0cnVjdCAqZGVzYzsKKwlpbnQgY3B1LCBpZHg7CisKKwlpZiAoY29weV9mcm9t X3VzZXIoJmluZm8sIHVfaW5mbywgc2l6ZW9mKGluZm8pKSkKKwkJcmV0dXJuIC1FRkFVTFQ7 CisJaWR4ID0gaW5mby5lbnRyeV9udW1iZXI7CisKKwkvKgorCSAqIGluZGV4IC0xIG1lYW5z IHRoZSBrZXJuZWwgc2hvdWxkIHRyeSB0byBmaW5kIGFuZAorCSAqIGFsbG9jYXRlIGFuIGVt cHR5IGRlc2NyaXB0b3I6CisJICovCisJaWYgKGlkeCA9PSAtMSkgeworCQlpZHggPSBnZXRf ZnJlZV9pZHgoKTsKKwkJaWYgKGlkeCA8IDApCisJCQlyZXR1cm4gaWR4OworCQlpZiAocHV0 X3VzZXIoaWR4LCAmdV9pbmZvLT5lbnRyeV9udW1iZXIpKQorCQkJcmV0dXJuIC1FRkFVTFQ7 CisJfQorCisJaWYgKGlkeCA8IEdEVF9FTlRSWV9UTFNfTUlOIHx8IGlkeCA+IEdEVF9FTlRS WV9UTFNfTUFYKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRlc2MgPSB0LT50bHNfYXJyYXkg KyBpZHggLSBHRFRfRU5UUllfVExTX01JTjsKKworCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQo KTsKKworCWlmIChMRFRfZW1wdHkoJmluZm8pKSB7CisJCWRlc2MtPmEgPSAwOworCQlkZXNj LT5iID0gMDsKKwl9IGVsc2UgeworCQlkZXNjLT5hID0gTERUX2VudHJ5X2EoJmluZm8pOwor CQlkZXNjLT5iID0gTERUX2VudHJ5X2IoJmluZm8pOworCX0KKwlsb2FkX1RMUyh0LCBjcHUp OworCisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEdldCB0aGUgY3VycmVudCBUaHJlYWQt TG9jYWwgU3RvcmFnZSBhcmVhOgorICovCisKKyNkZWZpbmUgR0VUX0JBU0UoZGVzYykgKCBc CisJKCgoZGVzYyktPmEgPj4gMTYpICYgMHgwMDAwZmZmZikgfCBcCisJKCgoZGVzYyktPmIg PDwgMTYpICYgMHgwMGZmMDAwMCkgfCBcCisJKCAoZGVzYyktPmIgICAgICAgICYgMHhmZjAw MDAwMCkgICApCisKKyNkZWZpbmUgR0VUX0xJTUlUKGRlc2MpICggXAorCSgoZGVzYyktPmEg JiAweDBmZmZmKSB8IFwKKwkgKChkZXNjKS0+YiAmIDB4ZjAwMDApICkKKwkKKyNkZWZpbmUg R0VUXzMyQklUKGRlc2MpCQkoKChkZXNjKS0+YiA+PiAyMykgJiAxKQorI2RlZmluZSBHRVRf Q09OVEVOVFMoZGVzYykJKCgoZGVzYyktPmIgPj4gMTApICYgMykKKyNkZWZpbmUgR0VUX1dS SVRBQkxFKGRlc2MpCSgoKGRlc2MpLT5iID4+ICA5KSAmIDEpCisjZGVmaW5lIEdFVF9MSU1J VF9QQUdFUyhkZXNjKQkoKChkZXNjKS0+YiA+PiAyMykgJiAxKQorI2RlZmluZSBHRVRfUFJF U0VOVChkZXNjKQkoKChkZXNjKS0+YiA+PiAxNSkgJiAxKQorI2RlZmluZSBHRVRfVVNFQUJM RShkZXNjKQkoKChkZXNjKS0+YiA+PiAyMCkgJiAxKQorCithc21saW5rYWdlIGludAorc3lz MzJfZ2V0X3RocmVhZF9hcmVhKHN0cnVjdCBpYTMyX3VzZXJfZGVzYyAqdV9pbmZvKQorewor CXN0cnVjdCBpYTMyX3VzZXJfZGVzYyBpbmZvOworCXN0cnVjdCBkZXNjX3N0cnVjdCAqZGVz YzsKKwlpbnQgaWR4OworCisJaWYgKGdldF91c2VyKGlkeCwgJnVfaW5mby0+ZW50cnlfbnVt YmVyKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJaWYgKGlkeCA8IEdEVF9FTlRSWV9UTFNfTUlO IHx8IGlkeCA+IEdEVF9FTlRSWV9UTFNfTUFYKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRl c2MgPSBjdXJyZW50LT50aHJlYWQudGxzX2FycmF5ICsgaWR4IC0gR0RUX0VOVFJZX1RMU19N SU47CisKKwlpbmZvLmVudHJ5X251bWJlciA9IGlkeDsKKwlpbmZvLmJhc2VfYWRkciA9IEdF VF9CQVNFKGRlc2MpOworCWluZm8ubGltaXQgPSBHRVRfTElNSVQoZGVzYyk7CisJaW5mby5z ZWdfMzJiaXQgPSBHRVRfMzJCSVQoZGVzYyk7CisJaW5mby5jb250ZW50cyA9IEdFVF9DT05U RU5UUyhkZXNjKTsKKwlpbmZvLnJlYWRfZXhlY19vbmx5ID0gIUdFVF9XUklUQUJMRShkZXNj KTsKKwlpbmZvLmxpbWl0X2luX3BhZ2VzID0gR0VUX0xJTUlUX1BBR0VTKGRlc2MpOworCWlu Zm8uc2VnX25vdF9wcmVzZW50ID0gIUdFVF9QUkVTRU5UKGRlc2MpOworCWluZm8udXNlYWJs ZSA9IEdFVF9VU0VBQkxFKGRlc2MpOworCisJaWYgKGNvcHlfdG9fdXNlcih1X2luZm8sICZp bmZvLCBzaXplb2YoaW5mbykpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlyZXR1cm4gMDsKK30K KwogI2lmZGVmCU5PVFlFVCAgLyogVU5URVNURUQgRk9SIElBNjQgRlJPTSBIRVJFIERPV04g Ki8KIAogc3RydWN0IG5jcF9tb3VudF9kYXRhMzIgewo= --------------060906020709090108010806--