From owner-freebsd-multimedia Sat Mar 22 16:25:10 1997 Return-Path: Received: (from root@localhost) by freefall.freebsd.org (8.8.5/8.8.5) id QAA09993 for multimedia-outgoing; Sat, 22 Mar 1997 16:25:10 -0800 (PST) Received: from rah.star-gate.com (rah.star-gate.com [204.188.121.18]) by freefall.freebsd.org (8.8.5/8.8.5) with ESMTP id QAA09988 for ; Sat, 22 Mar 1997 16:25:06 -0800 (PST) Received: from rah.star-gate.com (localhost.star-gate.com [127.0.0.1]) by rah.star-gate.com (8.8.5/8.7.3) with ESMTP id QAA00352; Sat, 22 Mar 1997 16:24:56 -0800 (PST) Message-Id: <199703230024.QAA00352@rah.star-gate.com> X-Mailer: exmh version 1.6.9 8/22/96 To: multimedia@freebsd.org cc: Steve Passe Subject: First Cut at separating tuner and capture devices Mime-Version: 1.0 Content-Type: multipart/mixed ; boundary="===_0_Sat_Mar_22_16:21:48_PST_1997" Date: Sat, 22 Mar 1997 16:24:56 -0800 From: Amancio Hasty Sender: owner-multimedia@freebsd.org X-Loop: FreeBSD.org Precedence: bulk This is a multipart MIME message. --===_0_Sat_Mar_22_16:21:48_PST_1997 Content-Type: text/plain; charset=us-ascii This is patch is against the /sys/pci/brooktree848.c found in 3.0-current. Create a tuner device: mknod tuner0 c 79 16 This means that there can only be a maximum of 15 capture devices . Access your tuner ioctl thru your tuner device handle and anything which controls the video capture process thru the video device handle. The functions which have been added are: tuner_open tuner_close tuner_ioctl Which are access thru the minor device. What this means is that applications if they want to access the tuner, they should open the device "/dev/tuner0", then set channels, mute audio, etc... Tuner hackers now have a nice isolated home in the driver 8) Please let me know if you like the changes or not . Enjoy, Amancio --===_0_Sat_Mar_22_16:21:48_PST_1997 Content-Type: application/octet-stream Content-Description: patch Content-Transfer-Encoding: base64 KioqIGJyb29rdHJlZTg0OC5jLm9sZAlTYXQgTWFyIDIyIDE2OjEwOjE1IDE5OTcKLS0tIGJy b29rdHJlZTg0OC5jCVNhdCBNYXIgMjIgMTY6MDU6MTEgMTk5NwoqKioqKioqKioqKioqKioK KioqIDMxMywzMTggKioqKgotLS0gMzEzLDMyMyAtLS0tCiAgLyoKICAgKiB0dW5lciBzcGVj aWZpYyBmdW5jdGlvbnMuCiAgICovCisgaW50IHR1bmVyX29wZW4oIGRldl90IGRldiwgaW50 IGZsYWdzLCBpbnQgZm10LCBzdHJ1Y3QgcHJvYyAqcCApOworIGludCB0dW5lcl9jbG9zZSgg ZGV2X3QgZGV2LCBpbnQgZmxhZ3MsIGludCBmbXQsIHN0cnVjdCBwcm9jICpwICk7CisgaW50 IHR1bmVyX2lvY3RsKCBkZXZfdCBkZXYsIGludCBjbWQsIGNhZGRyX3QgYXJnLCBpbnQgZmxh Zywgc3RydWN0IHByb2MgKnByICk7CisgCisgCiAgc3RhdGljIGludAl0dl9jaGFubmVsKCBi a3RyX3JlZ190KiBia3RyLCBpbnQgY2hhbm5lbCApOwogIHN0YXRpYyBpbnQJdHZfZnJlcSgg Ymt0cl9yZWdfdCogYmt0ciwgaW50IGZyZXF1ZW5jeSApOwogIHN0YXRpYyBpbnQJdHVuZXJf c3RhdHVzKCBia3RyX3JlZ190KiBia3RyICk7CioqKioqKioqKioqKioqKgoqKiogNjMzLDYz OSAqKioqCiAgI2VuZGlmIC8qIERFVkZTICovCiAgfQogIAohICNkZWZpbmUgVU5JVCh4KSAo KHgpICYgMHgwNykKICAKICAKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gNjM4LDY0NCAtLS0tCiAgI2VuZGlmIC8q IERFVkZTICovCiAgfQogIAohICNkZWZpbmUgVU5JVCh4KSAoKHgpICYgMHgwZikKICAKICAK ICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQoqKioqKioqKioqKioqKioKKioqIDY0OCw2NzAgKioqKgogICAqIAogICAqLwog IGludAogIGJrdHJfb3BlbiggZGV2X3QgZGV2LCBpbnQgZmxhZ3MsIGludCBmbXQsIHN0cnVj dCBwcm9jICpwICkKICB7CiAgCWJrdHJfcmVnX3QJKmJrdHI7CiEgCWludAkJdW5pdDsKICAJ aW50CQlpOwogIAl2b2xhdGlsZSB1X2NoYXIJKmJ0ODQ4OwogIAl2b2xhdGlsZSB1X2NoYXIJ KmJ0X3JlZzsKICAJdm9sYXRpbGUgdV9sb25nCSpidGxfcmVnOwogIAogIAl1bml0ID0gVU5J VChtaW5vcihkZXYpKTsKICAJaWYgKHVuaXQgPj0gTkJLVFIpCQkJLyogdW5pdCBvdXQgb2Yg cmFuZ2UgKi8KICAJCXJldHVybihFTlhJTyk7CiAgCiAgCWJrdHIgPSAmKGJyb29rdHJlZVt1 bml0XSk7CiAgCiAgCWlmICghKGJrdHItPmZsYWdzICYgTUVURU9SX0lOSVRBTElaRUQpKSAv KiBkZXZpY2Ugbm90IGZvdW5kICovCiAgCQlyZXR1cm4oRU5YSU8pOwkKICAKICAjaWYgZGVm aW5lZCggTVVMVElQTEVfT1BFTlMgKQogIAlpZiAoYmt0ci0+ZmxhZ3MgJiBNRVRFT1JfT1BF TikJCS8qIGRldmljZSBhbHJlYWR5IG9wZW4gKi8KLS0tIDY1Myw3MDMgLS0tLQogICAqIAog ICAqLwogIGludAorIHR1bmVyX29wZW4oIGRldl90IGRldiwgaW50IGZsYWdzLCBpbnQgZm10 LCBzdHJ1Y3QgcHJvYyAqcCApIHsKKyAJYmt0cl9yZWdfdAkqYmt0cjsKKyAJaW50CQl1bml0 LCBtaW5vcjsKKyAJdm9sYXRpbGUgdV9jaGFyCSpidDg0ODsKKyAJdW5pdCA9IFVOSVQobWlu b3IoZGV2KSk7CisgCWJrdHIgPSAmKGJyb29rdHJlZVt1bml0XSk7CisgCisgI2lmIGRlZmlu ZWQoIEFVRElPX1NVUFBPUlQgKQorIAlzZXRfYXVkaW8oIGJrdHIsIEFVRElPX1VOTVVURSAp OworIAlpZiAoIGNhcmRfdHlwZXNbIGJrdHItPmNhcmRfdHlwZSBdLmRieCApCisgCSAgICBz ZXRfQlRTQyggYmt0ciwgMCApOwkJLyogZW5hYmxlIHRoZSBzdGVyZW8gY2hpcCAqLworICNl bmRpZiAvKiBBVURJT19TVVBQT1JUICovCisgCSAgICByZXR1cm4gMDsKKyAKKyB9CisgCisg CisgaW50CiAgYmt0cl9vcGVuKCBkZXZfdCBkZXYsIGludCBmbGFncywgaW50IGZtdCwgc3Ry dWN0IHByb2MgKnAgKQogIHsKICAJYmt0cl9yZWdfdAkqYmt0cjsKISAJaW50CQl1bml0LCBt aW5vcjsKICAJaW50CQlpOwogIAl2b2xhdGlsZSB1X2NoYXIJKmJ0ODQ4OwogIAl2b2xhdGls ZSB1X2NoYXIJKmJ0X3JlZzsKICAJdm9sYXRpbGUgdV9sb25nCSpidGxfcmVnOwogIAogIAl1 bml0ID0gVU5JVChtaW5vcihkZXYpKTsKKyAJbWlub3IgPSBtaW5vcihkZXYpOworIAogIAlp ZiAodW5pdCA+PSBOQktUUikJCQkvKiB1bml0IG91dCBvZiByYW5nZSAqLwogIAkJcmV0dXJu KEVOWElPKTsKICAKKyAKICAJYmt0ciA9ICYoYnJvb2t0cmVlW3VuaXRdKTsKICAKICAJaWYg KCEoYmt0ci0+ZmxhZ3MgJiBNRVRFT1JfSU5JVEFMSVpFRCkpIC8qIGRldmljZSBub3QgZm91 bmQgKi8KICAJCXJldHVybihFTlhJTyk7CQorIAlpZiAobWlub3IgIT0gMCApIHsKKyAjaWYg ZGVmaW5lZCggQVVESU9fU1VQUE9SVCApCisgCSAgICBzZXRfYXVkaW8oIGJrdHIsIEFVRElP X1VOTVVURSApOworIAkgICAgaWYgKCBjYXJkX3R5cGVzWyBia3RyLT5jYXJkX3R5cGUgXS5k YnggKQorIAkJc2V0X0JUU0MoIGJrdHIsIDAgKTsJCS8qIGVuYWJsZSB0aGUgc3RlcmVvIGNo aXAgKi8KKyAjZW5kaWYgLyogQVVESU9fU1VQUE9SVCAqLworIAl9CiAgCiAgI2lmIGRlZmlu ZWQoIE1VTFRJUExFX09QRU5TICkKICAJaWYgKGJrdHItPmZsYWdzICYgTUVURU9SX09QRU4p CQkvKiBkZXZpY2UgYWxyZWFkeSBvcGVuICovCioqKioqKioqKioqKioqKgoqKiogNzM2LDc0 MSAqKioqCi0tLSA3NjksNzkzIC0tLS0KICAvKgogICAqIAogICAqLworIC8qIHR1bmVyIGNs b3NlIGhhbmRsZSAqLworIGludCAKKyB0dW5lcl9jbG9zZSggZGV2X3QgZGV2LCBpbnQgZmxh Z3MsIGludCBmbXQsIHN0cnVjdCBwcm9jICpwICkgeworIAlpbnQJCXVuaXQ7CisgCWJrdHJf cmVnX3QJKmJrdHI7CisgCXVuaXQgPSBVTklUKG1pbm9yKGRldikpOworIAlia3RyID0gJihi cm9va3RyZWVbdW5pdF0pOworIAorIAkvKiBQbGFjZSBIb2xkZXIgZm9yIHR1bmVyIHNwZWNp ZmljIG9wZXJhdGlvbnMgb24gYSBjbG9zZSAqLworICNpZiBkZWZpbmVkKCBBVURJT19TVVBQ T1JUICkKKyAJLyogbXV0ZSB0aGUgYXVkaW8gYnkgc3dpdGNoaW5nIHRoZSBtdXggKi8KKyAJ c2V0X2F1ZGlvKCBia3RyLCBBVURJT19NVVRFICk7CisgI2VuZGlmIC8qIEFVRElPX1NVUFBP UlQgKi8KKyAKKyAKKyAJcmV0dXJuIDA7CisgfQorIAorIAogIGludAogIGJrdHJfY2xvc2Uo IGRldl90IGRldiwgaW50IGZsYWdzLCBpbnQgZm10LCBzdHJ1Y3QgcHJvYyAqcCApCiAgewoq KioqKioqKioqKioqKioKKioqIDc1MSw3NTYgKioqKgotLS0gODAzLDgxMSAtLS0tCiAgCXVu aXQgPSBVTklUKG1pbm9yKGRldikpOwogIAlpZiAodW5pdCA+PSBOQktUUikJCQkvKiB1bml0 IG91dCBvZiByYW5nZSAqLwogIAkJcmV0dXJuKEVOWElPKTsKKyAJaWYgKG1pbm9yKGRldikg IT0gMCApIHsKKyAJICAgIHJldHVybiB0dW5lcl9jbG9zZShkZXYsIGZsYWdzLCBmbXQsIHAp OworIAl9CiAgCiAgCWJrdHIgPSAmKGJyb29rdHJlZVt1bml0XSk7CiAgCioqKioqKioqKioq KioqKgoqKiogNzcxLDc4MiAqKioqCiAgCWJ0bF9yZWcgPSAodV9sb25nICopICZidDg0OFtC S1RSX0lOVF9TVEFUXSA7CiAgCSpidGxfcmVnID0gMHhmZmZmZmZmZjsKICAKISAjaWYgZGVm aW5lZCggQVVESU9fU1VQUE9SVCApCiEgCS8qIG11dGUgdGhlIGF1ZGlvIGJ5IHN3aXRjaGlu ZyB0aGUgbXV4ICovCiEgCXNldF9hdWRpbyggYmt0ciwgQVVESU9fTVVURSApOwohICNlbmRp ZiAvKiBBVURJT19TVVBQT1JUICovCiEgCiEgCXJldHVybigwKTsKICB9CiAgCiAgCi0tLSA4 MjYsODMyIC0tLS0KICAJYnRsX3JlZyA9ICh1X2xvbmcgKikgJmJ0ODQ4W0JLVFJfSU5UX1NU QVRdIDsKICAJKmJ0bF9yZWcgPSAweGZmZmZmZmZmOwogIAohIAlyZXR1cm4gdHVuZXJfY2xv c2UgKCAgZGV2LCBmbGFncywgIGZtdCwgIHAgKTsKICB9CiAgCiAgCioqKioqKioqKioqKioq KgoqKiogNzkyLDc5OCAqKioqCiAgCWludAkJY291bnQ7CiAgCXZvbGF0aWxlIHVfY2hhciAq YnQ4NDg7CiAgCXVfc2hvcnQJCSpidHNfcmVnOwohIAogIAl1bml0ID0gVU5JVChtaW5vcihk ZXYpKTsKICAJaWYgKHVuaXQgPj0gTkJLVFIpCS8qIHVuaXQgb3V0IG9mIHJhbmdlICovCiAg CQlyZXR1cm4oRU5YSU8pOwotLS0gODQyLDg0OSAtLS0tCiAgCWludAkJY291bnQ7CiAgCXZv bGF0aWxlIHVfY2hhciAqYnQ4NDg7CiAgCXVfc2hvcnQJCSpidHNfcmVnOwohIAkKISAJaWYg KG1pbm9yKGRldikgPiAwICkgcmV0dXJuKEVOWElPKTsKICAJdW5pdCA9IFVOSVQobWlub3Io ZGV2KSk7CiAgCWlmICh1bml0ID49IE5CS1RSKQkvKiB1bml0IG91dCBvZiByYW5nZSAqLwog IAkJcmV0dXJuKEVOWElPKTsKKioqKioqKioqKioqKioqCioqKiA4MzksODc3ICoqKioKICB9 CiAgCiAgCiEgLyoKISAgKiAKISAgKi8KICBpbnQKISBia3RyX2lvY3RsKCBkZXZfdCBkZXYs IGludCBjbWQsIGNhZGRyX3QgYXJnLCBpbnQgZmxhZywgc3RydWN0IHByb2MgKnByICkKICB7 CiAgCWJrdHJfcmVnX3QJCSpia3RyOwogIAlpbnQJCQl1bml0OwogIAlpbnQJCQlzdGF0dXM7 CiEgCWludAkJCWNvdW50OwohIAlpbnQJCQl0bXBfaW50OwohIAl2b2xhdGlsZSB1X2NoYXIJ CSpidDg0OCwgY190ZW1wOwohIAl2b2xhdGlsZSB1X3Nob3J0CSpidHNfcmVnLCBzX3RlbXA7 CiEgCXZvbGF0aWxlIHVfbG9uZwkJKmJ0bF9yZWc7CiEgCXVuc2lnbmVkIGludAkJdGVtcCwg dGVtcDE7CiAgCXVuc2lnbmVkIGludAkJZXJyb3I7Ci0gCXN0cnVjdCBtZXRlb3JfZ2VvbWV0 CSpnZW87Ci0gCXN0cnVjdCBtZXRlb3JfY291bnRzCSpjbnQ7Ci0gCXN0cnVjdCBtZXRlb3Jf dmlkZW8JKnZpZGVvOwotIAl2bV9vZmZzZXRfdAkJYnVmOwogIAogIAl1bml0ID0gVU5JVCht aW5vcihkZXYpKTsKICAJaWYgKHVuaXQgPj0gTkJLVFIpCS8qIHVuaXQgb3V0IG9mIHJhbmdl ICovCiAgCQlyZXR1cm4oRU5YSU8pOwogIAogIAotIAlia3RyID0gJihicm9va3RyZWVbdW5p dF0pOwotIAlpZiAoYmt0ci0+YmlnYnVmID09IDApCS8qIG5vIGZyYW1lIGJ1ZmZlciBhbGxv Y2F0ZWQgKGlvY3RsIGZhaWxlZCkgKi8KLSAJCXJldHVybihFTk9NRU0pOwogIAogIAlidDg0 OCA9CSBia3RyLT5iYXNlOwotIAlzd2l0Y2ggKGNtZCkgewogIAogIAljYXNlIFRWVFVORVJf U0VUQ0hOTDoKICAjaWYgZGVmaW5lZCggQVVESU9fU1VQUE9SVCApCiAgCQlzZXRfYXVkaW8o IGJrdHIsIEFVRElPX01VVEUgKTsKLS0tIDg5MCw5MTcgLS0tLQogIH0KICAKICAKISAvKiB0 dW5lciBpb2N0bHMgKi8KISAKICBpbnQKISB0dW5lcl9pb2N0bCggZGV2X3QgZGV2LCBpbnQg Y21kLCBjYWRkcl90IGFyZywgaW50IGZsYWcsIHN0cnVjdCBwcm9jICpwciApCiAgewogIAli a3RyX3JlZ190CQkqYmt0cjsKICAJaW50CQkJdW5pdDsKICAJaW50CQkJc3RhdHVzOwohIAl2 b2xhdGlsZSB1X2NoYXIJCSpidDg0ODsKISAJdW5zaWduZWQgaW50CQl0ZW1wOwogIAl1bnNp Z25lZCBpbnQJCWVycm9yOwogIAogIAl1bml0ID0gVU5JVChtaW5vcihkZXYpKTsKICAJaWYg KHVuaXQgPj0gTkJLVFIpCS8qIHVuaXQgb3V0IG9mIHJhbmdlICovCiAgCQlyZXR1cm4oRU5Y SU8pOwogIAogIAogIAorIAlia3RyID0gJihicm9va3RyZWVbdW5pdF0pOwogIAlidDg0OCA9 CSBia3RyLT5iYXNlOwogIAorIAlzd2l0Y2ggKGNtZCkgewogIAljYXNlIFRWVFVORVJfU0VU Q0hOTDoKICAjaWYgZGVmaW5lZCggQVVESU9fU1VQUE9SVCApCiAgCQlzZXRfYXVkaW8oIGJr dHIsIEFVRElPX01VVEUgKTsKKioqKioqKioqKioqKioqCioqKiA5MjEsOTI4ICoqKioKICAJ Y2FzZSBUVlRVTkVSX0dFVEZSRVE6CiAgCQkqKHVuc2lnbmVkIGxvbmcgKilhcmcgPSBia3Ry LT50dW5lci5mcmVxdWVuY3k7CiAgCQlicmVhazsKICAKISAJY2FzZSBNRVRFT1JTVEFUVVM6 CS8qIGdldCA3MTk2IHN0YXR1cyAqLwogIAkJY190ZW1wID0gYnQ4NDhbMF07CiAgCQl0ZW1w ID0gMDsKICAJCWlmICghKGNfdGVtcCAmIDB4NDApKSB0ZW1wIHw9IE1FVEVPUl9TVEFUVVNf SENMSzsKLS0tIDk2MSwxMDMwIC0tLS0KICAJY2FzZSBUVlRVTkVSX0dFVEZSRVE6CiAgCQkq KHVuc2lnbmVkIGxvbmcgKilhcmcgPSBia3RyLT50dW5lci5mcmVxdWVuY3k7CiAgCQlicmVh azsKKyAjaWYgZGVmaW5lZCggQVVESU9fU1VQUE9SVCApCisgCWNhc2UgQlQ4NDhfU0FVRElP OgkvKiBzZXQgYXVkaW8gY2hhbm5lbCAqLworIAkJaWYgKCBzZXRfYXVkaW8oIGJrdHIsICoo aW50KilhcmcgKSA8IDAgKQorIAkJCXJldHVybiBFSU87CisgCQlicmVhazsKICAKISAJY2Fz ZSBCVDg0OF9HQVVESU86CS8qIGdldCBhdWRpbyBjaGFubmVsICovCiEgCQl0ZW1wID0gYmt0 ci0+YXVkaW9fbXV4X3NlbGVjdDsKISAJCWlmICggYmt0ci0+YXVkaW9fbXV0ZV9zdGF0ZSA9 PSBUUlVFICkKISAJCQl0ZW1wIHw9IEFVRElPX01VVEU7CiEgCQkqKGludCopYXJnID0gdGVt cDsKISAJCWJyZWFrOwohIAohIAljYXNlIEJUODQ4X1NCVFNDOgkvKiBzZXQgYXVkaW8gY2hh bm5lbCAqLwohIAkJaWYgKCBzZXRfQlRTQyggYmt0ciwgKihpbnQqKWFyZyApIDwgMCApCiEg CQkJcmV0dXJuIEVJTzsKISAJCWJyZWFrOwohICNlbmRpZiAvKiBBVURJT19TVVBQT1JUICov CiEgCWRlZmF1bHQ6CiEgCQlyZXR1cm4gRU5PREVWOwohIAkgICAgCiEgCX0KISAKISAJcmV0 dXJuIDA7CiEgfQohIAohIC8qCiEgICogCiEgICovCiEgaW50CiEgYmt0cl9pb2N0bCggZGV2 X3QgZGV2LCBpbnQgY21kLCBjYWRkcl90IGFyZywgaW50IGZsYWcsIHN0cnVjdCBwcm9jICpw ciApCiEgewohIAlia3RyX3JlZ190CQkqYmt0cjsKISAJaW50CQkJdW5pdDsKISAJaW50CQkJ c3RhdHVzOwohIAlpbnQJCQljb3VudDsKISAJaW50CQkJdG1wX2ludDsKISAJdm9sYXRpbGUg dV9jaGFyCQkqYnQ4NDgsIGNfdGVtcDsKISAJdm9sYXRpbGUgdV9zaG9ydAkqYnRzX3JlZywg c190ZW1wOwohIAl2b2xhdGlsZSB1X2xvbmcJCSpidGxfcmVnOwohIAl1bnNpZ25lZCBpbnQJ CXRlbXAsIHRlbXAxOwohIAl1bnNpZ25lZCBpbnQJCWVycm9yOwohIAlzdHJ1Y3QgbWV0ZW9y X2dlb21ldAkqZ2VvOwohIAlzdHJ1Y3QgbWV0ZW9yX2NvdW50cwkqY250OwohIAlzdHJ1Y3Qg bWV0ZW9yX3ZpZGVvCSp2aWRlbzsKISAJdm1fb2Zmc2V0X3QJCWJ1ZjsKISAKISAJdW5pdCA9 IFVOSVQobWlub3IoZGV2KSk7CiEgCWlmICh1bml0ID49IE5CS1RSKQkvKiB1bml0IG91dCBv ZiByYW5nZSAqLwohIAkJcmV0dXJuKEVOWElPKTsKISAKISAJaWYgKG1pbm9yKGRldikgPiAw ICkgewohIAkgICByZXR1cm4gIHR1bmVyX2lvY3RsKG1pbm9yKGRldiksIGNtZCwgYXJnLCBm bGFnLCBwcik7CiEgCX0KISAKISAKISAJYmt0ciA9ICYoYnJvb2t0cmVlW3VuaXRdKTsKISAJ aWYgKGJrdHItPmJpZ2J1ZiA9PSAwKQkvKiBubyBmcmFtZSBidWZmZXIgYWxsb2NhdGVkIChp b2N0bCBmYWlsZWQpICovCiEgCQlyZXR1cm4oRU5PTUVNKTsKISAKISAJYnQ4NDggPQkgYmt0 ci0+YmFzZTsKISAJc3dpdGNoIChjbWQpIHsKISAKISAJY2FzZSBNRVRFT1JTVEFUVVM6CS8q IGdldCBCdDg0OCAgc3RhdHVzICovCiAgCQljX3RlbXAgPSBidDg0OFswXTsKICAJCXRlbXAg PSAwOwogIAkJaWYgKCEoY190ZW1wICYgMHg0MCkpIHRlbXAgfD0gTUVURU9SX1NUQVRVU19I Q0xLOwoqKioqKioqKioqKioqKioKKioqIDEyMjksMTI1MyAqKioqCiAgCQlidDg0OFtCS1RS X0NPTE9SX0NUTF0gJj0gfjB4NDA7CiAgCQlicmVhazsKICAKLSAjaWYgZGVmaW5lZCggQVVE SU9fU1VQUE9SVCApCi0gCWNhc2UgQlQ4NDhfU0FVRElPOgkvKiBzZXQgYXVkaW8gY2hhbm5l bCAqLwotIAkJaWYgKCBzZXRfYXVkaW8oIGJrdHIsICooaW50KilhcmcgKSA8IDAgKQotIAkJ CXJldHVybiBFSU87Ci0gCQlicmVhazsKLSAKLSAJY2FzZSBCVDg0OF9HQVVESU86CS8qIGdl dCBhdWRpbyBjaGFubmVsICovCi0gCQl0ZW1wID0gYmt0ci0+YXVkaW9fbXV4X3NlbGVjdDsK LSAJCWlmICggYmt0ci0+YXVkaW9fbXV0ZV9zdGF0ZSA9PSBUUlVFICkKLSAJCQl0ZW1wIHw9 IEFVRElPX01VVEU7Ci0gCQkqKGludCopYXJnID0gdGVtcDsKLSAJCWJyZWFrOwotIAotIAlj YXNlIEJUODQ4X1NCVFNDOgkvKiBzZXQgYXVkaW8gY2hhbm5lbCAqLwotIAkJaWYgKCBzZXRf QlRTQyggYmt0ciwgKihpbnQqKWFyZyApIDwgMCApCi0gCQkJcmV0dXJuIEVJTzsKLSAJCWJy ZWFrOwotICNlbmRpZiAvKiBBVURJT19TVVBQT1JUICovCi0gCiAgCWNhc2UgTUVURU9SU1NJ R05BTDoKICAJCWJrdHItPnNpZ25hbCA9ICooaW50ICopIGFyZzsKICAJCWJrdHItPnByb2Mg PSBwcjsKLS0tIDEzMzEsMTMzNiAtLS0tCioqKioqKioqKioqKioqKgoqKiogMTU0NiwxNTUz ICoqKioKICAKICAJdW5pdCA9IFVOSVQobWlub3IoZGV2KSk7CiAgCiEgCWlmICh1bml0ID49 IE5CS1RSKQkJLyogYXQgdGhpcyBwb2ludCBjb3VsZCB0aGlzIGhhcHBlbj8gKi8KICAJCXJl dHVybigtMSk7CiAgCiAgCWJrdHIgPSAmKGJyb29rdHJlZVt1bml0XSk7CiAgCi0tLSAxNjI5 LDE2MzcgLS0tLQogIAogIAl1bml0ID0gVU5JVChtaW5vcihkZXYpKTsKICAKISAJaWYgKHVu aXQgPj0gTkJLVFIgfHwgbWlub3IoZGV2KSA+IDAgKQkvKiBhdCB0aGlzIHBvaW50IGNvdWxk IHRoaXMgaGFwcGVuPyAqLwogIAkJcmV0dXJuKC0xKTsKKyAKICAKICAJYmt0ciA9ICYoYnJv b2t0cmVlW3VuaXRdKTsKICAK --===_0_Sat_Mar_22_16:21:48_PST_1997--