From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from mga11.intel.com ([192.55.52.93]:8850 "EHLO mga11.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754633AbZLCTld (ORCPT ); Thu, 3 Dec 2009 14:41:33 -0500 Subject: [PATCH] mac80211: refactor association From: Johannes Berg To: John Linville Cc: linux-wireless Date: Thu, 03 Dec 2009 20:41:36 +0100 Message-ID: <1259869296.12843.15.camel@johannes.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Sender: linux-wireless-owner@vger.kernel.org List-ID: UmVmYWN0b3IgdGhlIGNvZGUgdG8gcmVzZXJ2ZSBhbiBza2Igb2YgdGhlIHJpZ2h0IHNpemUKKGlu c3RlYWQgb2YgaG9waW5nIDIwMCBieXRlcyBhcmUgZW5vdWdoIGZvcmV2ZXIpLCBhbmQKYWxzbyBw dXQgSFQgSUUgZ2VuZXJhdGlvbiBpbnRvIGFuIG93biBmdW5jdGlvbi4KCkFkZGl0aW9uYWxseSwg cHV0IHRoZSBIVCBJRSBiZWZvcmUgdGhlIHZlbmRvci1zcGVjaWZpYwpXTU0gSUUuIFRoaXMgc3Rp bGwgbGVhdmVzIHRoaW5ncyBub3QgcXVpdGUgb3JkZXJlZApjb3JyZWN0bHksIGR1ZSB0byB1c2Vy LXNwZWNpZmllZCBJRXMsIGFkZCBhIG5vdGUgYWJvdXQKdGhhdCBmb3Igbm93LgoKU2lnbmVkLW9m Zi1ieTogSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KLS0tCiBuZXQv bWFjODAyMTEvbWxtZS5jIHwgICAgNyArCiBuZXQvbWFjODAyMTEvd29yay5jIHwgIDIzOSArKysr KysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAyIGZpbGVz IGNoYW5nZWQsIDEzNyBpbnNlcnRpb25zKCspLCAxMDkgZGVsZXRpb25zKC0pCgotLS0gd2lyZWxl c3MtdGVzdGluZy5vcmlnL25ldC9tYWM4MDIxMS93b3JrLmMJMjAwOS0xMi0wMyAxNjoyODoyMC4w MDAwMDAwMDAgKzAxMDAKKysrIHdpcmVsZXNzLXRlc3RpbmcvbmV0L21hYzgwMjExL3dvcmsuYwky MDA5LTEyLTAzIDIwOjMzOjIwLjAwMDAwMDAwMCArMDEwMApAQCAtMTAwLDYgKzEwMCwxMDIgQEAg c3RhdGljIGludCBpZWVlODAyMTFfY29tcGF0aWJsZV9yYXRlcyhjbwogCiAvKiBmcmFtZSBzZW5k aW5nIGZ1bmN0aW9ucyAqLwogCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfYWRkX2h0X2llKHN0cnVj dCBza19idWZmICpza2IsIGNvbnN0IHU4ICpodF9pbmZvX2llLAorCQkJCXN0cnVjdCBpZWVlODAy MTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kLAorCQkJCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAq Y2hhbm5lbCwKKwkJCQllbnVtIGllZWU4MDIxMV9zbXBzX21vZGUgc21wcykKK3sKKwlzdHJ1Y3Qg aWVlZTgwMjExX2h0X2luZm8gKmh0X2luZm87CisJdTggKnBvczsKKwl1MzIgZmxhZ3MgPSBjaGFu bmVsLT5mbGFnczsKKwl1MTYgY2FwID0gc2JhbmQtPmh0X2NhcC5jYXA7CisJX19sZTE2IHRtcDsK KworCWlmICghc2JhbmQtPmh0X2NhcC5odF9zdXBwb3J0ZWQpCisJCXJldHVybjsKKworCWlmICgh aHRfaW5mb19pZSkKKwkJcmV0dXJuOworCisJaWYgKGh0X2luZm9faWVbMV0gPCBzaXplb2Yoc3Ry dWN0IGllZWU4MDIxMV9odF9pbmZvKSkKKwkJcmV0dXJuOworCisJaHRfaW5mbyA9IChzdHJ1Y3Qg aWVlZTgwMjExX2h0X2luZm8gKikoaHRfaW5mb19pZSArIDIpOworCisJLyogZGV0ZXJtaW5lIGNh cGFiaWxpdHkgZmxhZ3MgKi8KKworCWlmIChpZWVlODAyMTFfZGlzYWJsZV80MG1oel8yNGdoeiAm JgorCSAgICBzYmFuZC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haKSB7CisJCWNhcCAmPSB+ SUVFRTgwMjExX0hUX0NBUF9TVVBfV0lEVEhfMjBfNDA7CisJCWNhcCAmPSB+SUVFRTgwMjExX0hU X0NBUF9TR0lfNDA7CisJfQorCisJc3dpdGNoIChodF9pbmZvLT5odF9wYXJhbSAmIElFRUU4MDIx MV9IVF9QQVJBTV9DSEFfU0VDX09GRlNFVCkgeworCWNhc2UgSUVFRTgwMjExX0hUX1BBUkFNX0NI QV9TRUNfQUJPVkU6CisJCWlmIChmbGFncyAmIElFRUU4MDIxMV9DSEFOX05PX0hUNDBQTFVTKSB7 CisJCQljYXAgJj0gfklFRUU4MDIxMV9IVF9DQVBfU1VQX1dJRFRIXzIwXzQwOworCQkJY2FwICY9 IH5JRUVFODAyMTFfSFRfQ0FQX1NHSV80MDsKKwkJfQorCQlicmVhazsKKwljYXNlIElFRUU4MDIx MV9IVF9QQVJBTV9DSEFfU0VDX0JFTE9XOgorCQlpZiAoZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9O T19IVDQwTUlOVVMpIHsKKwkJCWNhcCAmPSB+SUVFRTgwMjExX0hUX0NBUF9TVVBfV0lEVEhfMjBf NDA7CisJCQljYXAgJj0gfklFRUU4MDIxMV9IVF9DQVBfU0dJXzQwOworCQl9CisJCWJyZWFrOwor CX0KKworCS8qIHNldCBTTSBQUyBtb2RlIHByb3Blcmx5ICovCisJY2FwICY9IH5JRUVFODAyMTFf SFRfQ0FQX1NNX1BTOworCXN3aXRjaCAoc21wcykgeworCWNhc2UgSUVFRTgwMjExX1NNUFNfQVVU T01BVElDOgorCWNhc2UgSUVFRTgwMjExX1NNUFNfTlVNX01PREVTOgorCQlXQVJOX09OKDEpOwor CWNhc2UgSUVFRTgwMjExX1NNUFNfT0ZGOgorCQljYXAgfD0gV0xBTl9IVF9DQVBfU01fUFNfRElT QUJMRUQgPDwKKwkJCUlFRUU4MDIxMV9IVF9DQVBfU01fUFNfU0hJRlQ7CisJCWJyZWFrOworCWNh c2UgSUVFRTgwMjExX1NNUFNfU1RBVElDOgorCQljYXAgfD0gV0xBTl9IVF9DQVBfU01fUFNfU1RB VElDIDw8CisJCQlJRUVFODAyMTFfSFRfQ0FQX1NNX1BTX1NISUZUOworCQlicmVhazsKKwljYXNl IElFRUU4MDIxMV9TTVBTX0RZTkFNSUM6CisJCWNhcCB8PSBXTEFOX0hUX0NBUF9TTV9QU19EWU5B TUlDIDw8CisJCQlJRUVFODAyMTFfSFRfQ0FQX1NNX1BTX1NISUZUOworCQlicmVhazsKKwl9CisK KwkvKiByZXNlcnZlIGFuZCBmaWxsIElFICovCisKKwlwb3MgPSBza2JfcHV0KHNrYiwgc2l6ZW9m KHN0cnVjdCBpZWVlODAyMTFfaHRfY2FwKSArIDIpOworCSpwb3MrKyA9IFdMQU5fRUlEX0hUX0NB UEFCSUxJVFk7CisJKnBvcysrID0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaHRfY2FwKTsKKwlt ZW1zZXQocG9zLCAwLCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9odF9jYXApKTsKKworCS8qIGNh cGFiaWxpdHkgZmxhZ3MgKi8KKwl0bXAgPSBjcHVfdG9fbGUxNihjYXApOworCW1lbWNweShwb3Ms ICZ0bXAsIHNpemVvZih1MTYpKTsKKwlwb3MgKz0gc2l6ZW9mKHUxNik7CisKKwkvKiBBTVBEVSBw YXJhbWV0ZXJzICovCisJKnBvcysrID0gc2JhbmQtPmh0X2NhcC5hbXBkdV9mYWN0b3IgfAorCQkg KHNiYW5kLT5odF9jYXAuYW1wZHVfZGVuc2l0eSA8PAorCQkJSUVFRTgwMjExX0hUX0FNUERVX1BB Uk1fREVOU0lUWV9TSElGVCk7CisKKwkvKiBNQ1Mgc2V0ICovCisJbWVtY3B5KHBvcywgJnNiYW5k LT5odF9jYXAubWNzLCBzaXplb2Yoc2JhbmQtPmh0X2NhcC5tY3MpKTsKKwlwb3MgKz0gc2l6ZW9m KHNiYW5kLT5odF9jYXAubWNzKTsKKworCS8qIGV4dGVuZGVkIGNhcGFiaWxpdGllcyAqLworCXBv cyArPSBzaXplb2YoX19sZTE2KTsKKworCS8qIEJGIGNhcGFiaWxpdGllcyAqLworCXBvcyArPSBz aXplb2YoX19sZTMyKTsKKworCS8qIGFudGVubmEgc2VsZWN0aW9uICovCisJcG9zICs9IHNpemVv Zih1OCk7Cit9CisKIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9zZW5kX2Fzc29jKHN0cnVjdCBpZWVl ODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3dvcmsgKndr KQogewpAQCAtMTA3LDE1ICsyMDMsMzQgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX3NlbmRfYXNz b2Moc3RydWN0IAogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IGllZWU4MDIxMV9tZ210 ICptZ210OwogCXU4ICpwb3M7Ci0JY29uc3QgdTggKmllcywgKmh0X2llOworCWNvbnN0IHU4ICpp ZXM7CiAJaW50IGksIGxlbiwgY291bnQsIHJhdGVzX2xlbiwgc3VwcF9yYXRlc19sZW47CiAJdTE2 IGNhcGFiOwogCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOwogCXUzMiBy YXRlcyA9IDA7CiAKLQlza2IgPSBkZXZfYWxsb2Nfc2tiKGxvY2FsLT5ody5leHRyYV90eF9oZWFk cm9vbSArCi0JCQkgICAgc2l6ZW9mKCptZ210KSArIDIwMCArIHdrLT5pZV9sZW4gKwotCQkJICAg IHdrLT5hc3NvYy5zc2lkX2xlbik7CisJc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW3dr LT5jaGFuLT5iYW5kXTsKKworCS8qCisJICogR2V0IGFsbCByYXRlcyBzdXBwb3J0ZWQgYnkgdGhl IGRldmljZSBhbmQgdGhlIEFQIGFzCisJICogc29tZSBBUHMgZG9uJ3QgbGlrZSBnZXR0aW5nIGEg c3VwZXJzZXQgb2YgdGhlaXIgcmF0ZXMKKwkgKiBpbiB0aGUgYXNzb2NpYXRpb24gcmVxdWVzdCAo ZS5nLiBELUxpbmsgREFQIDEzNTMgaW4KKwkgKiBiLW9ubHkgbW9kZSkuLi4KKwkgKi8KKwlyYXRl c19sZW4gPSBpZWVlODAyMTFfY29tcGF0aWJsZV9yYXRlcyh3ay0+YXNzb2Muc3VwcF9yYXRlcywK KwkJCQkJICAgICAgIHdrLT5hc3NvYy5zdXBwX3JhdGVzX2xlbiwKKwkJCQkJICAgICAgIHNiYW5k LCAmcmF0ZXMpOworCisJc2tiID0gYWxsb2Nfc2tiKGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9v bSArCisJCQlzaXplb2YoKm1nbXQpICsgLyogYml0IHRvbyBtdWNoIGJ1dCBkb2Vzbid0IG1hdHRl ciAqLworCQkJMiArIHdrLT5hc3NvYy5zc2lkX2xlbiArIC8qIFNTSUQgKi8KKwkJCTQgKyByYXRl c19sZW4gKyAvKiAoZXh0ZW5kZWQpIHJhdGVzICovCisJCQk0ICsgLyogcG93ZXIgY2FwYWJpbGl0 eSAqLworCQkJMiArIDIgKiBzYmFuZC0+bl9jaGFubmVscyArIC8qIHN1cHBvcnRlZCBjaGFubmVs cyAqLworCQkJMiArIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2h0X2NhcCkgKyAvKiBIVCAqLwor CQkJd2stPmllX2xlbiArIC8qIGV4dHJhIElFcyAqLworCQkJOSwgLyogV01NICovCisJCQlHRlBf S0VSTkVMKTsKIAlpZiAoIXNrYikgewogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0 byBhbGxvY2F0ZSBidWZmZXIgZm9yIGFzc29jICIKIAkJICAgICAgICJmcmFtZVxuIiwgc2RhdGEt Pm5hbWUpOwpAQCAtMTIzLDggKzIzOCw2IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9zZW5kX2Fz c29jKHN0cnVjdCAKIAl9CiAJc2tiX3Jlc2VydmUoc2tiLCBsb2NhbC0+aHcuZXh0cmFfdHhfaGVh ZHJvb20pOwogCi0Jc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW3drLT5jaGFuLT5iYW5k XTsKLQogCWNhcGFiID0gV0xBTl9DQVBBQklMSVRZX0VTUzsKIAogCWlmIChzYmFuZC0+YmFuZCA9 PSBJRUVFODAyMTFfQkFORF8yR0haKSB7CkBAIC0xMzcsMTYgKzI1MCw2IEBAIHN0YXRpYyB2b2lk IGllZWU4MDIxMV9zZW5kX2Fzc29jKHN0cnVjdCAKIAlpZiAod2stPmFzc29jLmNhcGFiaWxpdHkg JiBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSkKIAkJY2FwYWIgfD0gV0xBTl9DQVBBQklMSVRZX1BS SVZBQ1k7CiAKLQkvKgotCSAqIEdldCBhbGwgcmF0ZXMgc3VwcG9ydGVkIGJ5IHRoZSBkZXZpY2Ug YW5kIHRoZSBBUCBhcwotCSAqIHNvbWUgQVBzIGRvbid0IGxpa2UgZ2V0dGluZyBhIHN1cGVyc2V0 IG9mIHRoZWlyIHJhdGVzCi0JICogaW4gdGhlIGFzc29jaWF0aW9uIHJlcXVlc3QgKGUuZy4gRC1M aW5rIERBUCAxMzUzIGluCi0JICogYi1vbmx5IG1vZGUpLi4uCi0JICovCi0JcmF0ZXNfbGVuID0g aWVlZTgwMjExX2NvbXBhdGlibGVfcmF0ZXMod2stPmFzc29jLnN1cHBfcmF0ZXMsCi0JCQkJCSAg ICAgICB3ay0+YXNzb2Muc3VwcF9yYXRlc19sZW4sCi0JCQkJCSAgICAgICBzYmFuZCwgJnJhdGVz KTsKLQogCWlmICgod2stPmFzc29jLmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfU1BFQ1RS VU1fTUdNVCkgJiYKIAkgICAgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TUEVDVFJV TV9NR01UKSkKIAkJY2FwYWIgfD0gV0xBTl9DQVBBQklMSVRZX1NQRUNUUlVNX01HTVQ7CkBAIC0y MjAsNyArMzIzLDcgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX3NlbmRfYXNzb2Moc3RydWN0IAog CQkqcG9zKysgPSBXTEFOX0VJRF9QV1JfQ0FQQUJJTElUWTsKIAkJKnBvcysrID0gMjsKIAkJKnBv cysrID0gMDsgLyogbWluIHR4IHBvd2VyICovCi0JCSpwb3MrKyA9IGxvY2FsLT5ody5jb25mLmNo YW5uZWwtPm1heF9wb3dlcjsgLyogbWF4IHR4IHBvd2VyICovCisJCSpwb3MrKyA9IHdrLT5jaGFu LT5tYXhfcG93ZXI7IC8qIG1heCB0eCBwb3dlciAqLwogCiAJCS8qIDIuIHN1cHBvcnRlZCBjaGFu bmVscyAqLwogCQkvKiBUT0RPOiBnZXQgdGhpcyBpbiByZWcgZG9tYWluIGZvcm1hdCAqLwpAQCAt MjM0LDExICszMzcsMjEgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX3NlbmRfYXNzb2Moc3RydWN0 IAogCQl9CiAJfQogCisJLyoKKwkgKiBYWFg6CVRoZXNlIElFcyBjb3VsZCBjb250YWluICh2ZW5k b3Itc3BlY2lmaWVkKQorCSAqCUlFcyB0aGF0IGJlbG9uZyBhZnRlciBIVCAtLSB0aGUgYnVmZmVy IG1heQorCSAqCW5lZWQgdG8gYmUgc3BsaXQgdXAuCisJICovCiAJaWYgKHdrLT5pZV9sZW4gJiYg d2stPmllKSB7CiAJCXBvcyA9IHNrYl9wdXQoc2tiLCB3ay0+aWVfbGVuKTsKIAkJbWVtY3B5KHBv cywgd2stPmllLCB3ay0+aWVfbGVuKTsKIAl9CiAKKwlpZiAod2stPmFzc29jLnVzZV8xMW4gJiYg d2stPmFzc29jLndtbV91c2VkICYmCisJICAgIGxvY2FsLT5ody5xdWV1ZXMgPj0gNCkKKwkJaWVl ZTgwMjExX2FkZF9odF9pZShza2IsIHdrLT5hc3NvYy5odF9pbmZvcm1hdGlvbl9pZSwKKwkJCQkg ICAgc2JhbmQsIHdrLT5jaGFuLCB3ay0+YXNzb2Muc21wcyk7CisKIAlpZiAod2stPmFzc29jLndt bV91c2VkICYmIGxvY2FsLT5ody5xdWV1ZXMgPj0gNCkgewogCQlwb3MgPSBza2JfcHV0KHNrYiwg OSk7CiAJCSpwb3MrKyA9IFdMQU5fRUlEX1ZFTkRPUl9TUEVDSUZJQzsKQEAgLTI1Miw5OCArMzY1 LDYgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX3NlbmRfYXNzb2Moc3RydWN0IAogCQkqcG9zKysg PSAwOwogCX0KIAotCS8qIHdtbSBzdXBwb3J0IGlzIGEgbXVzdCB0byBIVCAqLwotCS8qCi0JICog SUVFRTgwMi4xMW4gZG9lcyBub3QgYWxsb3cgVEtJUC9XRVAgYXMgcGFpcndpc2UKLQkgKiBjaXBo ZXJzIGluIEhUIG1vZGUuIFdlIHN0aWxsIGFzc29jaWF0ZSBpbiBub24taHQKLQkgKiBtb2RlICgx MWEvYi9nKSBpZiBhbnkgb25lIG9mIHRoZXNlIGNpcGhlcnMgaXMKLQkgKiBjb25maWd1cmVkIGFz IHBhaXJ3aXNlLgotCSAqLwotCWlmICh3ay0+YXNzb2MudXNlXzExbiAmJiB3ay0+YXNzb2Mud21t X3VzZWQgJiYKLQkgICAgKGxvY2FsLT5ody5xdWV1ZXMgPj0gNCkgJiYKLQkgICAgc2JhbmQtPmh0 X2NhcC5odF9zdXBwb3J0ZWQgJiYKLQkgICAgKGh0X2llID0gd2stPmFzc29jLmh0X2luZm9ybWF0 aW9uX2llKSAmJgotCSAgICBodF9pZVsxXSA+PSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9odF9p bmZvKSkgewotCQlzdHJ1Y3QgaWVlZTgwMjExX2h0X2luZm8gKmh0X2luZm8gPQotCQkJKHN0cnVj dCBpZWVlODAyMTFfaHRfaW5mbyAqKShodF9pZSArIDIpOwotCQl1MTYgY2FwID0gc2JhbmQtPmh0 X2NhcC5jYXA7Ci0JCV9fbGUxNiB0bXA7Ci0JCXUzMiBmbGFncyA9IGxvY2FsLT5ody5jb25mLmNo YW5uZWwtPmZsYWdzOwotCi0JCS8qIGRldGVybWluZSBjYXBhYmlsaXR5IGZsYWdzICovCi0KLQkJ aWYgKGllZWU4MDIxMV9kaXNhYmxlXzQwbWh6XzI0Z2h6ICYmCi0JCSAgICBzYmFuZC0+YmFuZCA9 PSBJRUVFODAyMTFfQkFORF8yR0haKSB7Ci0JCQljYXAgJj0gfklFRUU4MDIxMV9IVF9DQVBfU1VQ X1dJRFRIXzIwXzQwOwotCQkJY2FwICY9IH5JRUVFODAyMTFfSFRfQ0FQX1NHSV80MDsKLQkJfQot Ci0JCXN3aXRjaCAoaHRfaW5mby0+aHRfcGFyYW0gJiBJRUVFODAyMTFfSFRfUEFSQU1fQ0hBX1NF Q19PRkZTRVQpIHsKLQkJY2FzZSBJRUVFODAyMTFfSFRfUEFSQU1fQ0hBX1NFQ19BQk9WRToKLQkJ CWlmIChmbGFncyAmIElFRUU4MDIxMV9DSEFOX05PX0hUNDBQTFVTKSB7Ci0JCQkJY2FwICY9IH5J RUVFODAyMTFfSFRfQ0FQX1NVUF9XSURUSF8yMF80MDsKLQkJCQljYXAgJj0gfklFRUU4MDIxMV9I VF9DQVBfU0dJXzQwOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgSUVFRTgwMjExX0hUX1BBUkFN X0NIQV9TRUNfQkVMT1c6Ci0JCQlpZiAoZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9OT19IVDQwTUlO VVMpIHsKLQkJCQljYXAgJj0gfklFRUU4MDIxMV9IVF9DQVBfU1VQX1dJRFRIXzIwXzQwOwotCQkJ CWNhcCAmPSB+SUVFRTgwMjExX0hUX0NBUF9TR0lfNDA7Ci0JCQl9Ci0JCQlicmVhazsKLQkJfQot Ci0JCS8qIHNldCBTTSBQUyBtb2RlIHByb3Blcmx5ICovCi0JCWNhcCAmPSB+SUVFRTgwMjExX0hU X0NBUF9TTV9QUzsKLQkJc3dpdGNoICh3ay0+YXNzb2Muc21wcykgewotCQljYXNlIElFRUU4MDIx MV9TTVBTX0FVVE9NQVRJQzoKLQkJY2FzZSBJRUVFODAyMTFfU01QU19OVU1fTU9ERVM6Ci0JCQlX QVJOX09OKDEpOwotCQljYXNlIElFRUU4MDIxMV9TTVBTX09GRjoKLQkJCWNhcCB8PSBXTEFOX0hU X0NBUF9TTV9QU19ESVNBQkxFRCA8PAotCQkJCUlFRUU4MDIxMV9IVF9DQVBfU01fUFNfU0hJRlQ7 Ci0JCQlicmVhazsKLQkJY2FzZSBJRUVFODAyMTFfU01QU19TVEFUSUM6Ci0JCQljYXAgfD0gV0xB Tl9IVF9DQVBfU01fUFNfU1RBVElDIDw8Ci0JCQkJSUVFRTgwMjExX0hUX0NBUF9TTV9QU19TSElG VDsKLQkJCWJyZWFrOwotCQljYXNlIElFRUU4MDIxMV9TTVBTX0RZTkFNSUM6Ci0JCQljYXAgfD0g V0xBTl9IVF9DQVBfU01fUFNfRFlOQU1JQyA8PAotCQkJCUlFRUU4MDIxMV9IVF9DQVBfU01fUFNf U0hJRlQ7Ci0JCQlicmVhazsKLQkJfQotCi0JCS8qIHJlc2VydmUgYW5kIGZpbGwgSUUgKi8KLQot CQlwb3MgPSBza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaHRfY2FwKSArIDIp OwotCQkqcG9zKysgPSBXTEFOX0VJRF9IVF9DQVBBQklMSVRZOwotCQkqcG9zKysgPSBzaXplb2Yo c3RydWN0IGllZWU4MDIxMV9odF9jYXApOwotCQltZW1zZXQocG9zLCAwLCBzaXplb2Yoc3RydWN0 IGllZWU4MDIxMV9odF9jYXApKTsKLQotCQkvKiBjYXBhYmlsaXR5IGZsYWdzICovCi0JCXRtcCA9 IGNwdV90b19sZTE2KGNhcCk7Ci0JCW1lbWNweShwb3MsICZ0bXAsIHNpemVvZih1MTYpKTsKLQkJ cG9zICs9IHNpemVvZih1MTYpOwotCi0JCS8qIEFNUERVIHBhcmFtZXRlcnMgKi8KLQkJKnBvcysr ID0gc2JhbmQtPmh0X2NhcC5hbXBkdV9mYWN0b3IgfAotCQkJIChzYmFuZC0+aHRfY2FwLmFtcGR1 X2RlbnNpdHkgPDwKLQkJCSAJSUVFRTgwMjExX0hUX0FNUERVX1BBUk1fREVOU0lUWV9TSElGVCk7 Ci0KLQkJLyogTUNTIHNldCAqLwotCQltZW1jcHkocG9zLCAmc2JhbmQtPmh0X2NhcC5tY3MsIHNp emVvZihzYmFuZC0+aHRfY2FwLm1jcykpOwotCQlwb3MgKz0gc2l6ZW9mKHNiYW5kLT5odF9jYXAu bWNzKTsKLQotCQkvKiBleHRlbmRlZCBjYXBhYmlsaXRpZXMgKi8KLQkJcG9zICs9IHNpemVvZihf X2xlMTYpOwotCi0JCS8qIEJGIGNhcGFiaWxpdGllcyAqLwotCQlwb3MgKz0gc2l6ZW9mKF9fbGUz Mik7Ci0KLQkJLyogYW50ZW5uYSBzZWxlY3Rpb24gKi8KLQkJcG9zICs9IHNpemVvZih1OCk7Ci0J fQotCiAJSUVFRTgwMjExX1NLQl9DQihza2IpLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfSU5URkxf RE9OVF9FTkNSWVBUOwogCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYik7CiB9Ci0tLSB3aXJl bGVzcy10ZXN0aW5nLm9yaWcvbmV0L21hYzgwMjExL21sbWUuYwkyMDA5LTEyLTAzIDE2OjQwOjU5 LjAwMDAwMDAwMCArMDEwMAorKysgd2lyZWxlc3MtdGVzdGluZy9uZXQvbWFjODAyMTEvbWxtZS5j CTIwMDktMTItMDMgMTY6NDE6NDUuMDAwMDAwMDAwICswMTAwCkBAIC0xODc2LDYgKzE4NzYsMTMg QEAgaW50IGllZWU4MDIxMV9tZ2RfYXNzb2Moc3RydWN0IGllZWU4MDIxMQogCQlpZm1nZC0+YXBf c21wcyA9IGlmbWdkLT5yZXFfc21wczsKIAogCXdrLT5hc3NvYy5zbXBzID0gaWZtZ2QtPmFwX3Nt cHM7CisJLyoKKwkgKiBJRUVFODAyLjExbiBkb2VzIG5vdCBhbGxvdyBUS0lQL1dFUCBhcyBwYWly d2lzZSBjaXBoZXJzIGluIEhUIG1vZGUuCisJICogV2Ugc3RpbGwgYXNzb2NpYXRlIGluIG5vbi1I VCBtb2RlICgxMWEvYi9nKSBpZiBhbnkgb25lIG9mIHRoZXNlCisJICogY2lwaGVycyBpcyBjb25m aWd1cmVkIGFzIHBhaXJ3aXNlLgorCSAqIFdlIGNhbiBzZXQgdGhpcyB0byB0cnVlIGZvciBub24t MTFuIGhhcmR3YXJlLCB0aGF0J2xsIGJlIGNoZWNrZWQKKwkgKiBzZXBhcmF0ZWx5IGFsb25nIHdp dGggdGhlIHBlZXIgY2FwYWJpbGl0aWVzLgorCSAqLwogCXdrLT5hc3NvYy51c2VfMTFuID0gIShp Zm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0RJU0FCTEVfMTFOKTsKIAl3ay0+YXNzb2MuY2Fw YWJpbGl0eSA9IHJlcS0+YnNzLT5jYXBhYmlsaXR5OwogCXdrLT5hc3NvYy53bW1fdXNlZCA9IHdr LT5hc3NvYy5ic3MtPndtbV91c2VkOwoKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpJbnRlbCBFbGVjdHJvbmljcyBM dGQuCgpUaGlzIGUtbWFpbCBhbmQgYW55IGF0dGFjaG1lbnRzIG1heSBjb250YWluIGNvbmZpZGVu dGlhbCBtYXRlcmlhbCBmb3IKdGhlIHNvbGUgdXNlIG9mIHRoZSBpbnRlbmRlZCByZWNpcGllbnQo cykuIEFueSByZXZpZXcgb3IgZGlzdHJpYnV0aW9uCmJ5IG90aGVycyBpcyBzdHJpY3RseSBwcm9o aWJpdGVkLiBJZiB5b3UgYXJlIG5vdCB0aGUgaW50ZW5kZWQKcmVjaXBpZW50LCBwbGVhc2UgY29u dGFjdCB0aGUgc2VuZGVyIGFuZCBkZWxldGUgYWxsIGNvcGllcy4K