From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTPS id 33ABF89AD2 for ; Tue, 16 Apr 2019 08:55:50 +0000 (UTC) From: Simon Ser Date: Tue, 16 Apr 2019 11:55:48 +0300 Message-Id: <20190416085548.5016-1-simon.ser@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v3] lib/igt_edid: new library for generating EDIDs List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: igt-dev@lists.freedesktop.org List-ID: Rm9yIHRoZSBwdXJwb3NlcyBvZiB0ZXN0aW5nIGRpZmZlcmVudCBFRElEIGZlYXR1cmVzLCB3ZSBu ZWVkIHRvIGdlbmVyYXRlIG1vcmUKYW5kIG1vcmUgY29tcGxleCBFRElEIGJsb2JzIChlLmcuIHdp dGggYXVkaW8gc3VwcG9ydCkuIEhvd2V2ZXIgY3VycmVudGx5IElHVAp1c2VzIGEgbWFjcm8tYmFz ZWQgc3lzdGVtIHRvIGdlbmVyYXRlIEVESURzLiBUaGlzIGRvZXNuJ3Qgc2NhbGUgd2VsbCBhbmQg aXMKcHJldHR5IGluZmxleGlibGUuCgpUaGlzIGNvbW1pdCBpbnRyb2R1Y2VzIGEgbmV3IGxpdHRs ZSBsaWJyYXJ5IHRvIGdlbmVyYXRlIEVESURzLiBGb3Igbm93IGl0IGNhbid0CmRvIG1vcmUgdGhh biB0aGUgb2xkIG1hY3JvLiBGdXR1cmUgY29tbWl0cyB3aWxsIGV4dGVuZCB0aGUgQVBJLgoKVGhl IHN0cnVjdHVyZXMgYXJlIG1vc3RseSBiYXNlZCBvbiB0aGUgTGludXgga2VybmVsIGNvZGUgKGRy bV9lZGlkLmgpLiBTZXR0ZXJzCmhhdmUgYmVlbiBhZGRlZCBmb3IgY29udmVuaWVuY2UuCgpTaWdu ZWQtb2ZmLWJ5OiBTaW1vbiBTZXIgPHNpbW9uLnNlckBpbnRlbC5jb20+Ci0tLQoKQ2hhbmdlcyBp biB2MzoKLSBGaXggd2hpdGVzcGFjZSBpc3N1ZXMKLSBSZW5hbWUgZWRpZF9maW5hbGl6ZSB0byBl ZGlkX3VwZGF0ZV9jaGVja3N1bSBmb3IgY2xhcml0eQoKIGxpYi9pZ3RfZWRpZC5jICAgICAgICAg IHwgMjY4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGxpYi9pZ3Rf ZWRpZC5oICAgICAgICAgIHwgMTk2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBsaWIv aWd0X2VkaWRfdGVtcGxhdGUuaCB8ICA3NCAtLS0tLS0tLS0tLQogbGliL2lndF9rbXMuYyAgICAg ICAgICAgfCAxMTMgKysrKysrKysrLS0tLS0tLS0KIGxpYi9tZXNvbi5idWlsZCAgICAgICAgIHwg ICAzICstCiA1IGZpbGVzIGNoYW5nZWQsIDUyMSBpbnNlcnRpb25zKCspLCAxMzMgZGVsZXRpb25z KC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL2lndF9lZGlkLmMKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBsaWIvaWd0X2VkaWQuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGxpYi9pZ3RfZWRpZF90ZW1wbGF0 ZS5oCgpkaWZmIC0tZ2l0IGEvbGliL2lndF9lZGlkLmMgYi9saWIvaWd0X2VkaWQuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uYjkzNTUxNGYKLS0tIC9kZXYvbnVsbAorKysg Yi9saWIvaWd0X2VkaWQuYwpAQCAtMCwwICsxLDI2OCBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAy MDE5IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRl ZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2Yg dGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNv ZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9u LCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29w eSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFu ZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0 byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRv IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5v dGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBw YXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwg cG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJP VklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgor ICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBP RiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB TkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9S IENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9U SEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JU IE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04g V0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhF IFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6IFNpbW9uIFNlciA8c2ltb24uc2VyQGludGVsLmNv bT4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNp bmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDx0aW1lLmg+ CisjaW5jbHVkZSA8eGY4NmRybU1vZGUuaD4KKworI2luY2x1ZGUgImlndF9jb3JlLmgiCisjaW5j bHVkZSAiaWd0X2VkaWQuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgZWRpZF9oZWFkZXJbXSA9IHsK KwkweDAwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDAwCit9OworCisv KiB2ZnJlcSBpcyBpbiBIeiAqLworc3RhdGljIHZvaWQgc3RkX3RpbWluZ19zZXQoc3RydWN0IHN0 ZF90aW1pbmcgKnN0LCBpbnQgaHNpemUsIGludCB2ZnJlcSwKKwkJCSAgIGVudW0gc3RkX3RpbWlu Z19hc3BlY3QgYXNwZWN0KQoreworCWFzc2VydChoc2l6ZSA+PSAyNTYgJiYgaHNpemUgPD0gMjI4 OCk7CisJc3QtPmhzaXplID0gaHNpemUgLyA4IC0gMzE7CisJc3QtPnZmcmVxX2FzcGVjdCA9IGFz cGVjdCA8PCA2IHwgKHZmcmVxIC0gNjApOworfQorCitzdGF0aWMgdm9pZCBzdGRfdGltaW5nX3Vu c2V0KHN0cnVjdCBzdGRfdGltaW5nICpzdCkKK3sKKwltZW1zZXQoc3QsIDB4MDEsIHNpemVvZihz dHJ1Y3Qgc3RkX3RpbWluZykpOworfQorCisvKioKKyAqIGRldGFpbGVkX3RpbWluZ19zZXRfbW9k ZTogZmlsbCBhIGRldGFpbGVkIHRpbWluZyBiYXNlZCBvbiBhIG1vZGUKKyAqLwordm9pZCBkZXRh aWxlZF90aW1pbmdfc2V0X21vZGUoc3RydWN0IGRldGFpbGVkX3RpbWluZyAqZHQsIGRybU1vZGVN b2RlSW5mbyAqbW9kZSwKKwkJCSAgICAgIGludCB3aWR0aF9tbSwgaW50IGhlaWdodF9tbSkKK3sK KwlpbnQgaGFjdGl2ZSwgaGJsYW5rLCB2YWN0aXZlLCB2YmxhbmssIGhzeW5jX29mZnNldCwgaHN5 bmNfcHVsc2Vfd2lkdGgsCisJICAgIHZzeW5jX29mZnNldCwgdnN5bmNfcHVsc2Vfd2lkdGg7CisJ c3RydWN0IGRldGFpbGVkX3BpeGVsX3RpbWluZyAqcHQgPSAmZHQtPmRhdGEucGl4ZWxfZGF0YTsK KworCWhhY3RpdmUgPSBtb2RlLT5oZGlzcGxheTsKKwloc3luY19vZmZzZXQgPSBtb2RlLT5oc3lu Y19zdGFydCAtIG1vZGUtPmhkaXNwbGF5OworCWhzeW5jX3B1bHNlX3dpZHRoID0gbW9kZS0+aHN5 bmNfZW5kIC0gbW9kZS0+aHN5bmNfc3RhcnQ7CisJaGJsYW5rID0gbW9kZS0+aHRvdGFsIC0gbW9k ZS0+aGRpc3BsYXk7CisKKwl2YWN0aXZlID0gbW9kZS0+dmRpc3BsYXk7CisJdnN5bmNfb2Zmc2V0 ID0gbW9kZS0+dnN5bmNfc3RhcnQgLSBtb2RlLT52ZGlzcGxheTsKKwl2c3luY19wdWxzZV93aWR0 aCA9IG1vZGUtPnZzeW5jX2VuZCAtIG1vZGUtPnZzeW5jX3N0YXJ0OworCXZibGFuayA9IG1vZGUt PnZ0b3RhbCAtIG1vZGUtPnZkaXNwbGF5OworCisJZHQtPnBpeGVsX2Nsb2NrWzBdID0gKG1vZGUt PmNsb2NrIC8gMTApICYgMHgwMEZGOworCWR0LT5waXhlbF9jbG9ja1sxXSA9ICgobW9kZS0+Y2xv Y2sgLyAxMCkgJiAweEZGMDApID4+IDg7CisKKwlhc3NlcnQoaGFjdGl2ZSA8PSAweEZGRik7CisJ YXNzZXJ0KGhibGFuayA8PSAweEZGRik7CisJcHQtPmhhY3RpdmVfbG8gPSBoYWN0aXZlICYgMHgw RkY7CisJcHQtPmhibGFua19sbyA9IGhibGFuayAmIDB4MEZGOworCXB0LT5oYWN0aXZlX2hibGFu a19oaSA9IChoYWN0aXZlICYgMHhGMDApID4+IDQgfCAoaGJsYW5rICYgMHhGMDApID4+IDg7CisK Kwlhc3NlcnQodmFjdGl2ZSA8PSAweEZGRik7CisJYXNzZXJ0KHZibGFuayA8PSAweEZGRik7CisJ cHQtPnZhY3RpdmVfbG8gPSB2YWN0aXZlICYgMHgwRkY7CisJcHQtPnZibGFua19sbyA9IHZibGFu ayAmIDB4MEZGOworCXB0LT52YWN0aXZlX3ZibGFua19oaSA9ICh2YWN0aXZlICYgMHhGMDApID4+ IDQgfCAodmJsYW5rICYgMHhGMDApID4+IDg7CisKKwlhc3NlcnQoaHN5bmNfb2Zmc2V0IDw9IDB4 M0ZGKTsKKwlhc3NlcnQoaHN5bmNfcHVsc2Vfd2lkdGggPD0gMHgzRkYpOworCWFzc2VydCh2c3lu Y19vZmZzZXQgPD0gMHgzRik7CisJYXNzZXJ0KHZzeW5jX3B1bHNlX3dpZHRoIDw9IDB4M0YpOwor CXB0LT5oc3luY19vZmZzZXRfbG8gPSBoc3luY19vZmZzZXQgJiAweDBGRjsKKwlwdC0+aHN5bmNf cHVsc2Vfd2lkdGhfbG8gPSBoc3luY19wdWxzZV93aWR0aCAmIDB4MEZGOworCXB0LT52c3luY19v ZmZzZXRfcHVsc2Vfd2lkdGhfbG8gPSAodnN5bmNfb2Zmc2V0ICYgMHhGKSA8PCA0CisJCQkJCSAg fCAodnN5bmNfcHVsc2Vfd2lkdGggJiAweEYpOworCXB0LT5oc3luY192c3luY19vZmZzZXRfcHVs c2Vfd2lkdGhfaGkgPQorCQkoKGhzeW5jX29mZnNldCAmIDB4MzAwKSA+PiAyKSB8ICgoaHN5bmNf cHVsc2Vfd2lkdGggJiAweDMwMCkgPj4gNCkKKwkJfCAoKHZzeW5jX29mZnNldCAmIDB4MzApID4+ IDIpIHwgKCh2c3luY19wdWxzZV93aWR0aCAmIDB4MzApID4+IDQpOworCisJYXNzZXJ0KHdpZHRo X21tIDw9IDB4RkZGKTsKKwlhc3NlcnQoaGVpZ2h0X21tIDw9IDB4RkZGKTsKKwlwdC0+d2lkdGhf bW1fbG8gPSB3aWR0aF9tbSAmIDB4MEZGOworCXB0LT5oZWlnaHRfbW1fbG8gPSBoZWlnaHRfbW0g JiAweDBGRjsKKwlwdC0+d2lkdGhfaGVpZ2h0X21tX2hpID0gKHdpZHRoX21tICYgMHhGMDApID4+ IDQKKwkJCQkgfCAoaGVpZ2h0X21tICYgMHhGMDApID4+IDg7CisKKwlwdC0+bWlzYyA9IDA7CisJ aWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19QSFNZTkMpCisJCXB0LT5taXNjIHw9IEVE SURfUFRfSFNZTkNfUE9TSVRJVkU7CisJaWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19Q VlNZTkMpCisJCXB0LT5taXNjIHw9IEVESURfUFRfVlNZTkNfUE9TSVRJVkU7Cit9CisKKy8qKgor ICogZGV0YWlsZWRfdGltaW5nX3NldF9tb25pdG9yX3JhbmdlX21vZGU6IHNldCBhIGRldGFpbGVk IHRpbWluZyB0byBiZSBhCisgKiBtb25pdG9yIHJhbmdlIGJhc2VkIG9uIGEgbW9kZQorICovCit2 b2lkIGRldGFpbGVkX3RpbWluZ19zZXRfbW9uaXRvcl9yYW5nZV9tb2RlKHN0cnVjdCBkZXRhaWxl ZF90aW1pbmcgKmR0LAorCQkJCQkgICAgZHJtTW9kZU1vZGVJbmZvICptb2RlKQoreworCXN0cnVj dCBkZXRhaWxlZF9ub25fcGl4ZWwgKm5wID0gJmR0LT5kYXRhLm90aGVyX2RhdGE7CisJc3RydWN0 IGRldGFpbGVkX2RhdGFfbW9uaXRvcl9yYW5nZSAqbXIgPSAmbnAtPmRhdGEucmFuZ2U7CisKKwlk dC0+cGl4ZWxfY2xvY2tbMF0gPSBkdC0+cGl4ZWxfY2xvY2tbMV0gPSAwOworCisJbnAtPnR5cGUg PSBFRElEX0RFVEFJTF9NT05JVE9SX1JBTkdFOworCisJbXItPm1pbl92ZnJlcSA9IG1vZGUtPnZy ZWZyZXNoIC0gMTsKKwltci0+bWF4X3ZmcmVxID0gbW9kZS0+dnJlZnJlc2ggKyAxOworCW1yLT5t aW5faGZyZXFfa2h6ID0gKG1vZGUtPmNsb2NrIC8gbW9kZS0+aHRvdGFsKSAtIDE7CisJbXItPm1h eF9oZnJlcV9raHogPSAobW9kZS0+Y2xvY2sgLyBtb2RlLT5odG90YWwpICsgMTsKKwltci0+cGl4 ZWxfY2xvY2tfbWh6ID0gKG1vZGUtPmNsb2NrIC8gMTAwMDApICsgMTsKKwltci0+ZmxhZ3MgPSAw OworCisJc3RhdGljIGNvbnN0IGNoYXIgcGFkZGluZ1tdID0geworCQkweDBhLCAweDIwLCAweDIw LCAweDIwLCAweDIwLCAweDIwLCAweDIwCisJfTsKKwltZW1jcHkobXItPmZvcm11bGEucGFkLCBw YWRkaW5nLCBzaXplb2YocGFkZGluZykpOworfQorCisvKioKKyAqIGRldGFpbGVkX3RpbWluZ19z ZXRfc3RyaW5nOiBzZXQgYSBkZXRhaWxlZCB0aW1pbmcgdG8gYmUgYSBzdHJpbmcKKyAqLwordm9p ZCBkZXRhaWxlZF90aW1pbmdfc2V0X3N0cmluZyhzdHJ1Y3QgZGV0YWlsZWRfdGltaW5nICpkdCwK KwkJCQllbnVtIGRldGFpbGVkX25vbl9waXhlbF90eXBlIHR5cGUsCisJCQkJY29uc3QgY2hhciAq c3RyKQoreworCXN0cnVjdCBkZXRhaWxlZF9ub25fcGl4ZWwgKm5wID0gJmR0LT5kYXRhLm90aGVy X2RhdGE7CisJc3RydWN0IGRldGFpbGVkX2RhdGFfc3RyaW5nICpkcyA9ICZucC0+ZGF0YS5zdHJp bmc7CisJc2l6ZV90IGxlbjsKKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgRURJRF9ERVRBSUxf TU9OSVRPUl9OQU1FOgorCWNhc2UgRURJRF9ERVRBSUxfTU9OSVRPUl9TVFJJTkc6CisJY2FzZSBF RElEX0RFVEFJTF9NT05JVE9SX1NFUklBTDoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYXNzZXJ0 KDApOyAvKiBub3QgYSBzdHJpbmcgdHlwZSAqLworCX0KKworCWR0LT5waXhlbF9jbG9ja1swXSA9 IGR0LT5waXhlbF9jbG9ja1sxXSA9IDA7CisKKwlucC0+dHlwZSA9IHR5cGU7CisKKwlzdHJuY3B5 KGRzLT5zdHIsIHN0ciwgc2l6ZW9mKGRzLT5zdHIpKTsKKwlsZW4gPSBzdHJsZW4oc3RyKTsKKwlp ZiAobGVuIDwgc2l6ZW9mKGRzLT5zdHIpKQorCQlkcy0+c3RyW2xlbl0gPSAnXG4nOworfQorCitz dGF0aWMgdm9pZCBlZGlkX3NldF9tZmcoc3RydWN0IGVkaWQgKmVkaWQsIGNoYXIgbWZnW3N0YXRp YyAzXSkKK3sKKwllZGlkLT5tZmdfaWRbMF0gPSAobWZnWzBdIC0gJ0AnKSA8PCAyIHwgKG1mZ1sx XSAtICdAJykgPj4gMzsKKwllZGlkLT5tZmdfaWRbMV0gPSAobWZnWzFdIC0gJ0AnKSA8PCA1IHwg KG1mZ1syXSAtICdAJyk7Cit9CisKK3N0YXRpYyB2b2lkIGVkaWRfc2V0X2dhbW1hKHN0cnVjdCBl ZGlkICplZGlkLCBmbG9hdCBnYW1tYSkKK3sKKwllZGlkLT5nYW1tYSA9IChnYW1tYSAqIDEwMCkg LSAxMDA7Cit9CisKKy8qKgorICogZWRpZF9pbml0OiBpbml0aWFsaXplIGFuIEVESUQKKyAqCisg KiBUaGUgRURJRCB3aWxsIGJlIHByZS1maWxsZWQgd2l0aCBlc3RhYmxpc2hlZCBhbmQgc3RhbmRh cmQgdGltaW5nczoKKyAqCisgKiAgLSAxOTIweDEwODAgNjBIegorICogIC0gMTI4MHg3MjAgNjBI egorICogIC0gMTAyNHg3NjggNjBIegorICogIC0gODAweDYwMCA2MEh6CisgKiAgLSA2NDB4NDgw IDYwSHoKKyAqLwordm9pZCBlZGlkX2luaXQoc3RydWN0IGVkaWQgKmVkaWQpCit7CisJc2l6ZV90 IGk7CisJdGltZV90IHQ7CisJc3RydWN0IHRtICp0bTsKKworCW1lbXNldChlZGlkLCAwLCBzaXpl b2Yoc3RydWN0IGVkaWQpKTsKKworCW1lbWNweShlZGlkLT5oZWFkZXIsIGVkaWRfaGVhZGVyLCBz aXplb2YoZWRpZF9oZWFkZXIpKTsKKwllZGlkX3NldF9tZmcoZWRpZCwgIklHVCIpOworCWVkaWQt PnZlcnNpb24gPSAxOworCWVkaWQtPnJldmlzaW9uID0gMzsKKwllZGlkLT5pbnB1dCA9IDB4ODA7 CisJZWRpZC0+d2lkdGhfY20gPSA1MjsKKwllZGlkLT5oZWlnaHRfY20gPSAzMDsKKwllZGlkX3Nl dF9nYW1tYShlZGlkLCAyLjIwKTsKKwllZGlkLT5mZWF0dXJlcyA9IDB4MDI7CisKKwkvKiBZZWFy IG9mIG1hbnVmYWN0dXJlICovCisJdCA9IHRpbWUoTlVMTCk7CisJdG0gPSBsb2NhbHRpbWUoJnQp OworCWVkaWQtPm1mZ195ZWFyID0gdG0tPnRtX3llYXIgLSA5MDsKKworCS8qIEVzdGFibGlzaGVk IHRpbWluZ3M6IDY0MHg0ODAgNjBIeiwgODAweDYwMCA2MEh6LCAxMDI0eDc2OCA2MEh6ICovCisJ ZWRpZC0+ZXN0YWJsaXNoZWRfdGltaW5ncy50MSA9IDB4MjE7CisJZWRpZC0+ZXN0YWJsaXNoZWRf dGltaW5ncy50MiA9IDB4MDg7CisKKwkvKiBTdGFuZGFyZCB0aW1pbmdzICovCisJLyogMTkyMHgx MDgwIDYwSHogKi8KKwlzdGRfdGltaW5nX3NldCgmZWRpZC0+c3RhbmRhcmRfdGltaW5nc1swXSwg MTkyMCwgNjAsIFNURF9USU1JTkdfMTZfOSk7CisJLyogMTI4MHg3MjAgNjBIeiAqLworCXN0ZF90 aW1pbmdfc2V0KCZlZGlkLT5zdGFuZGFyZF90aW1pbmdzWzFdLCAxMjgwLCA2MCwgU1REX1RJTUlO R18xNl85KTsKKwkvKiAxMDI0eDc2OCA2MEh6ICovCisJc3RkX3RpbWluZ19zZXQoJmVkaWQtPnN0 YW5kYXJkX3RpbWluZ3NbMl0sIDEwMjQsIDYwLCBTVERfVElNSU5HXzRfMyk7CisJLyogODAweDYw MCA2MEh6ICovCisJc3RkX3RpbWluZ19zZXQoJmVkaWQtPnN0YW5kYXJkX3RpbWluZ3NbM10sIDgw MCwgNjAsIFNURF9USU1JTkdfNF8zKTsKKwkvKiA2NDB4NDgwIDYwSHogKi8KKwlzdGRfdGltaW5n X3NldCgmZWRpZC0+c3RhbmRhcmRfdGltaW5nc1s0XSwgNjQwLCA2MCwgU1REX1RJTUlOR180XzMp OworCWZvciAoaSA9IDU7IGkgPCBTVERfVElNSU5HU19MRU47IGkrKykKKwkJc3RkX3RpbWluZ191 bnNldCgmZWRpZC0+c3RhbmRhcmRfdGltaW5nc1tpXSk7Cit9CisKKy8qKgorICogZWRpZF9pbml0 X3dpdGhfbW9kZTogaW5pdGlhbGl6ZSBhbiBFRElEIGFuZCBzZXRzIGl0cyBwcmVmZXJyZWQgbW9k ZQorICovCit2b2lkIGVkaWRfaW5pdF93aXRoX21vZGUoc3RydWN0IGVkaWQgKmVkaWQsIGRybU1v ZGVNb2RlSW5mbyAqbW9kZSkKK3sKKwllZGlkX2luaXQoZWRpZCk7CisKKwkvKiBQcmVmZXJyZWQg dGltaW5nICovCisJZGV0YWlsZWRfdGltaW5nX3NldF9tb2RlKCZlZGlkLT5kZXRhaWxlZF90aW1p bmdzWzBdLCBtb2RlLAorCQkJCSBlZGlkLT53aWR0aF9jbSAqIDEwLCBlZGlkLT5oZWlnaHRfY20g KiAxMCk7CisJZGV0YWlsZWRfdGltaW5nX3NldF9tb25pdG9yX3JhbmdlX21vZGUoJmVkaWQtPmRl dGFpbGVkX3RpbWluZ3NbMV0sCisJCQkJCSAgICAgICBtb2RlKTsKKwlkZXRhaWxlZF90aW1pbmdf c2V0X3N0cmluZygmZWRpZC0+ZGV0YWlsZWRfdGltaW5nc1syXSwKKwkJCQkgICBFRElEX0RFVEFJ TF9NT05JVE9SX05BTUUsICJJR1QiKTsKK30KKworLyoqCisgKiBlZGlkX3VwZGF0ZV9jaGVja3N1 bTogY29tcHV0ZSBhbmQgdXBkYXRlIHRoZSBFRElEIGNoZWNrc3VtCisgKi8KK3ZvaWQgZWRpZF91 cGRhdGVfY2hlY2tzdW0oc3RydWN0IGVkaWQgKmVkaWQpCit7CisJc2l6ZV90IGk7CisJY29uc3Qg dWludDhfdCAqYnVmID0gKGNvbnN0IHVpbnQ4X3QgKikgZWRpZDsKKwl1aW50OF90IHN1bSA9IDA7 CisKKwkvKiBjYWxjdWxhdGUgY2hlY2tzdW0gKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHN0 cnVjdCBlZGlkKSAtIDE7IGkrKykgeworCQlzdW0gPSBzdW0gKyBidWZbaV07CisJfQorCisJZWRp ZC0+Y2hlY2tzdW0gPSAyNTYgLSBzdW07Cit9CmRpZmYgLS1naXQgYS9saWIvaWd0X2VkaWQuaCBi L2xpYi9pZ3RfZWRpZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi5iYmNi OTM5YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9pZ3RfZWRpZC5oCkBAIC0wLDAgKzEsMTk2IEBA CisvKgorICogQ29weXJpZ2h0IMKpIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJt aXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBv YnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3Vt ZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3 YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAq IHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmli dXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwg YW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNo ZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAq IFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChp bmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxs IGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoK KyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9G IEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1J VEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBT SEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBB TlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBB Q1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBP VVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9U SEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczogU2ltb24g U2VyIDxzaW1vbi5zZXJAaW50ZWwuY29tPgorICovCisKKyNpZm5kZWYgSUdUX0VESURfSAorI2Rl ZmluZSBJR1RfRURJRF9ICisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPHN0ZGlu dC5oPgorCitzdHJ1Y3QgZXN0X3RpbWluZ3MgeworCXVpbnQ4X3QgdDE7CisJdWludDhfdCB0MjsK Kwl1aW50OF90IG1mZ19yc3ZkOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmlu ZSBTVERfVElNSU5HU19MRU4gOAorCitlbnVtIHN0ZF90aW1pbmdfYXNwZWN0IHsKKwlTVERfVElN SU5HXzE2XzEwID0gMGIwMCwKKwlTVERfVElNSU5HXzRfMyA9IDBiMDEsCisJU1REX1RJTUlOR181 XzQgPSAwYjEwLAorCVNURF9USU1JTkdfMTZfOSA9IDBiMTEsCit9OworCitzdHJ1Y3Qgc3RkX3Rp bWluZyB7CisJdWludDhfdCBoc2l6ZTsKKwl1aW50OF90IHZmcmVxX2FzcGVjdDsKK30gX19hdHRy aWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgREVUQUlMRURfVElNSU5HU19MRU4gNAorCisj ZGVmaW5lIEVESURfUFRfSFNZTkNfUE9TSVRJVkUgKDEgPDwgMSkKKyNkZWZpbmUgRURJRF9QVF9W U1lOQ19QT1NJVElWRSAoMSA8PCAyKQorI2RlZmluZSBFRElEX1BUX1NFUEFSQVRFX1NZTkMgICgz IDw8IDMpCisjZGVmaW5lIEVESURfUFRfU1RFUkVPICAgICAgICAgKDEgPDwgNSkKKyNkZWZpbmUg RURJRF9QVF9JTlRFUkxBQ0VEICAgICAoMSA8PCA3KQorCitzdHJ1Y3QgZGV0YWlsZWRfcGl4ZWxf dGltaW5nIHsKKwl1aW50OF90IGhhY3RpdmVfbG87CisJdWludDhfdCBoYmxhbmtfbG87CisJdWlu dDhfdCBoYWN0aXZlX2hibGFua19oaTsKKwl1aW50OF90IHZhY3RpdmVfbG87CisJdWludDhfdCB2 YmxhbmtfbG87CisJdWludDhfdCB2YWN0aXZlX3ZibGFua19oaTsKKwl1aW50OF90IGhzeW5jX29m ZnNldF9sbzsKKwl1aW50OF90IGhzeW5jX3B1bHNlX3dpZHRoX2xvOworCXVpbnQ4X3QgdnN5bmNf b2Zmc2V0X3B1bHNlX3dpZHRoX2xvOworCXVpbnQ4X3QgaHN5bmNfdnN5bmNfb2Zmc2V0X3B1bHNl X3dpZHRoX2hpOworCXVpbnQ4X3Qgd2lkdGhfbW1fbG87CisJdWludDhfdCBoZWlnaHRfbW1fbG87 CisJdWludDhfdCB3aWR0aF9oZWlnaHRfbW1faGk7CisJdWludDhfdCBoYm9yZGVyOworCXVpbnQ4 X3QgdmJvcmRlcjsKKwl1aW50OF90IG1pc2M7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwor CitzdHJ1Y3QgZGV0YWlsZWRfZGF0YV9zdHJpbmcgeworCWNoYXIgc3RyWzEzXTsKK30gX19hdHRy aWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBkZXRhaWxlZF9kYXRhX21vbml0b3JfcmFuZ2Ug eworCXVpbnQ4X3QgbWluX3ZmcmVxOworCXVpbnQ4X3QgbWF4X3ZmcmVxOworCXVpbnQ4X3QgbWlu X2hmcmVxX2toejsKKwl1aW50OF90IG1heF9oZnJlcV9raHo7CisJdWludDhfdCBwaXhlbF9jbG9j a19taHo7IC8qIG5lZWQgdG8gbXVsdGlwbHkgYnkgMTAgKi8KKwl1aW50OF90IGZsYWdzOworCXVu aW9uIHsKKwkJY2hhciBwYWRbN107CisJCXN0cnVjdCB7CisJCQl1aW50OF90IHJlc2VydmVkOwor CQkJdWludDhfdCBoZnJlcV9zdGFydF9raHo7IC8qIG5lZWQgdG8gbXVsdGlwbHkgYnkgMiAqLwor CQkJdWludDhfdCBjOyAvKiBuZWVkIHRvIGRpdmlkZSBieSAyICovCisJCQl1aW50OF90IG1bMl07 CisJCQl1aW50OF90IGs7CisJCQl1aW50OF90IGo7IC8qIG5lZWQgdG8gZGl2aWRlIGJ5IDIgKi8K KwkJfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBndGYyOworCQlzdHJ1Y3QgeworCQkJdWludDhf dCB2ZXJzaW9uOworCQkJdWludDhfdCBkYXRhMTsgLyogaGlnaCA2IGJpdHM6IGV4dHJhIGNsb2Nr IHJlc29sdXRpb24gKi8KKwkJCXVpbnQ4X3QgZGF0YTI7IC8qIHBsdXMgbG93IDIgb2YgYWJvdmU6 IG1heCBoYWN0aXZlICovCisJCQl1aW50OF90IHN1cHBvcnRlZF9hc3BlY3RzOworCQkJdWludDhf dCBmbGFnczsgLyogcHJlZmVycmVkIGFzcGVjdCBhbmQgYmxhbmtpbmcgc3VwcG9ydCAqLworCQkJ dWludDhfdCBzdXBwb3J0ZWRfc2NhbGluZ3M7CisJCQl1aW50OF90IHByZWZlcnJlZF9yZWZyZXNo OworCQl9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGN2dDsKKwl9IGZvcm11bGE7Cit9IF9fYXR0 cmlidXRlX18oKHBhY2tlZCkpOworCitlbnVtIGRldGFpbGVkX25vbl9waXhlbF90eXBlIHsKKwlF RElEX0RFVEFJTF9FU1RfVElNSU5HUyA9IDB4ZjcsCisJRURJRF9ERVRBSUxfQ1ZUXzNCWVRFID0g MHhmOCwKKwlFRElEX0RFVEFJTF9DT0xPUl9NR01UX0RBVEEgPSAweGY5LAorCUVESURfREVUQUlM X1NURF9NT0RFUyA9IDB4ZmEsCisJRURJRF9ERVRBSUxfTU9OSVRPUl9DUERBVEEgPSAweGZiLAor CUVESURfREVUQUlMX01PTklUT1JfTkFNRSA9IDB4ZmMsCisJRURJRF9ERVRBSUxfTU9OSVRPUl9S QU5HRSA9IDB4ZmQsCisJRURJRF9ERVRBSUxfTU9OSVRPUl9TVFJJTkcgPSAweGZlLAorCUVESURf REVUQUlMX01PTklUT1JfU0VSSUFMID0gMHhmZiwKK307CisKK3N0cnVjdCBkZXRhaWxlZF9ub25f cGl4ZWwgeworCXVpbnQ4X3QgcGFkMTsKKwl1aW50OF90IHR5cGU7IC8qIGVudW0gZGV0YWlsZWRf bm9uX3BpeGVsX3R5cGUgKi8KKwl1aW50OF90IHBhZDI7CisJdW5pb24geworCQlzdHJ1Y3QgZGV0 YWlsZWRfZGF0YV9zdHJpbmcgc3RyOworCQlzdHJ1Y3QgZGV0YWlsZWRfZGF0YV9tb25pdG9yX3Jh bmdlIHJhbmdlOworCQlzdHJ1Y3QgZGV0YWlsZWRfZGF0YV9zdHJpbmcgc3RyaW5nOworCQkvKiBU T0RPOiBvdGhlciB0eXBlcyAqLworCX0gZGF0YTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7 CisKK3N0cnVjdCBkZXRhaWxlZF90aW1pbmcgeworCXVpbnQ4X3QgcGl4ZWxfY2xvY2tbMl07IC8q IG5lZWQgdG8gbXVsdGlwbHkgYnkgMTAgS0h6LCB6ZXJvIGlmIG5vdCBhIHBpeGVsIHRpbWluZyAq LworCXVuaW9uIHsKKwkJc3RydWN0IGRldGFpbGVkX3BpeGVsX3RpbWluZyBwaXhlbF9kYXRhOwor CQlzdHJ1Y3QgZGV0YWlsZWRfbm9uX3BpeGVsIG90aGVyX2RhdGE7CisJfSBkYXRhOworfSBfX2F0 dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGVkaWQgeworCWNoYXIgaGVhZGVyWzhdOwor CS8qIFZlbmRvciAmIHByb2R1Y3QgaW5mbyAqLworCXVpbnQ4X3QgbWZnX2lkWzJdOworCXVpbnQ4 X3QgcHJvZF9jb2RlWzJdOworCXVpbnQ4X3Qgc2VyaWFsWzRdOworCXVpbnQ4X3QgbWZnX3dlZWs7 CisJdWludDhfdCBtZmdfeWVhcjsKKwkvKiBFRElEIHZlcnNpb24gKi8KKwl1aW50OF90IHZlcnNp b247CisJdWludDhfdCByZXZpc2lvbjsKKwkvKiBEaXNwbGF5IGluZm86ICovCisJdWludDhfdCBp bnB1dDsKKwl1aW50OF90IHdpZHRoX2NtOworCXVpbnQ4X3QgaGVpZ2h0X2NtOworCXVpbnQ4X3Qg Z2FtbWE7CisJdWludDhfdCBmZWF0dXJlczsKKwkvKiBDb2xvciBjaGFyYWN0ZXJpc3RpY3MgKi8K Kwl1aW50OF90IHJlZF9ncmVlbl9sbzsKKwl1aW50OF90IGJsYWNrX3doaXRlX2xvOworCXVpbnQ4 X3QgcmVkX3g7CisJdWludDhfdCByZWRfeTsKKwl1aW50OF90IGdyZWVuX3g7CisJdWludDhfdCBn cmVlbl95OworCXVpbnQ4X3QgYmx1ZV94OworCXVpbnQ4X3QgYmx1ZV95OworCXVpbnQ4X3Qgd2hp dGVfeDsKKwl1aW50OF90IHdoaXRlX3k7CisJLyogRXN0LiB0aW1pbmdzIGFuZCBtZmcgcnN2ZCB0 aW1pbmdzKi8KKwlzdHJ1Y3QgZXN0X3RpbWluZ3MgZXN0YWJsaXNoZWRfdGltaW5nczsKKwkvKiBT dGFuZGFyZCB0aW1pbmdzIDEtOCovCisJc3RydWN0IHN0ZF90aW1pbmcgc3RhbmRhcmRfdGltaW5n c1tTVERfVElNSU5HU19MRU5dOworCS8qIERldGFpbGluZyB0aW1pbmdzIDEtNCAqLworCXN0cnVj dCBkZXRhaWxlZF90aW1pbmcgZGV0YWlsZWRfdGltaW5nc1tERVRBSUxFRF9USU1JTkdTX0xFTl07 CisJLyogTnVtYmVyIG9mIDEyOCBieXRlIGV4dC4gYmxvY2tzICovCisJdWludDhfdCBleHRlbnNp b25zOworCS8qIENoZWNrc3VtICovCisJdWludDhfdCBjaGVja3N1bTsKK30gX19hdHRyaWJ1dGVf XygocGFja2VkKSk7CisKK3ZvaWQgZWRpZF9pbml0KHN0cnVjdCBlZGlkICplZGlkKTsKK3ZvaWQg ZWRpZF9pbml0X3dpdGhfbW9kZShzdHJ1Y3QgZWRpZCAqZWRpZCwgZHJtTW9kZU1vZGVJbmZvICpt b2RlKTsKK3ZvaWQgZWRpZF91cGRhdGVfY2hlY2tzdW0oc3RydWN0IGVkaWQgKmVkaWQpOwordm9p ZCBkZXRhaWxlZF90aW1pbmdfc2V0X21vZGUoc3RydWN0IGRldGFpbGVkX3RpbWluZyAqZHQsIGRy bU1vZGVNb2RlSW5mbyAqbW9kZSwKKwkJCSAgICAgIGludCB3aWR0aF9tbSwgaW50IGhlaWdodF9t bSk7Cit2b2lkIGRldGFpbGVkX3RpbWluZ19zZXRfbW9uaXRvcl9yYW5nZV9tb2RlKHN0cnVjdCBk ZXRhaWxlZF90aW1pbmcgKmR0LAorCQkJCQkgICAgZHJtTW9kZU1vZGVJbmZvICptb2RlKTsKK3Zv aWQgZGV0YWlsZWRfdGltaW5nX3NldF9zdHJpbmcoc3RydWN0IGRldGFpbGVkX3RpbWluZyAqZHQs CisJCQkJZW51bSBkZXRhaWxlZF9ub25fcGl4ZWxfdHlwZSB0eXBlLAorCQkJCWNvbnN0IGNoYXIg KnN0cik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL2lndF9lZGlkX3RlbXBsYXRlLmggYi9s aWIvaWd0X2VkaWRfdGVtcGxhdGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGRi ZDE5Y2EuLjAwMDAwMDAwCi0tLSBhL2xpYi9pZ3RfZWRpZF90ZW1wbGF0ZS5oCisrKyAvZGV2L251 bGwKQEAgLTEsNzQgKzAsMCBAQAotI2RlZmluZSBHQU1NQSh4KSAoKCh4KSAqIDEwMCkgLSAxMDAp Ci0KLSNkZWZpbmUgTUFOVUZBQ1RVUkVSX0lEKGEsIGIsIGMpIChhIC0gJ0AnKSA8PCAyIHwgKGIg LSAnQCcpID4+IDMsIFwKLQkJCQkgKGIgLSAnQCcpIDw8IDUgfCAoYyAtICdAJykKLQotCi0jZGVm aW5lIGFiKHgsIHkpICgoeCkgJiAweGZmKSwgKCh5KSAmIDB4ZmYpLCAoKCh4KSAmIDB4ZjAwKSA+ PiA0KSB8ICgoKHkpICYgMHhmMDApID4+IDgpCi0jZGVmaW5lIG9wKGhvLCBocCwgdm8sIHZwKSAo KGhvKSAmIDB4ZmYpLCAoKGhwKSAmIDB4ZmYpLCBcCi0JCSgoKHZvKSAmIDB4ZikgPDwgNCkgfCAo KHZwKSAmIDB4ZiksIFwKLQkJKCgoaG8pICYgMHgzMDApID4+IDIpIHwgKCgoaHApICYgMHgzMDAp ID4+IDQpIFwKLQkJfCAoKCh2bykgJiAweDMwKSA+PiAyKSB8ICgoKHZwKSAmIDB4MzApID4+IDQp Ci0KLXN0YXRpYyB1bnNpZ25lZCBjaGFyIEVESURfTkFNRVtFRElEX0xFTkdUSF0gPSB7Ci0JMHgw MCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHgwMCwgLyogaGVhZGVyICov Ci0JTUFOVUZBQ1RVUkVSX0lEKCdJJywgJ0cnLCAnVCcpLAotCS8qIHByb2R1Y3QgY29kZSwgc2Vy aWFsIG51bWJlciwgd2VlayBhbmQgeWVhciBvZiBtYW51ZmFjdHVyZSAqLwotCTB4MDAsIDB4MDAs IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMSwgMHgwMywgLyogZWRp ZCB2ZXJzaW9uICgxLjMpICovCi0JLyogYmFzaWMgZGlzcGxheSBwYXJhbWV0ZXJzICovCi0JLyog ZGlnaXRhbCBkaXNwbGF5LCBtYXhpbXVtIGhvcml6b250YWwgaW1hZ2Ugc2l6ZSwgbWF4aW11bSB2 ZXJ0aWNhbAotCSAqIGltYWdlIHNpemUsIGdhbW1hLCBmZWF0dXJlczogUkdCIDQ6NDo0LCBuYXRp dmUgcGl4ZWwgZm9ybWF0IGFuZAotCSAqIHJlZnJlc2ggcmF0ZSBpbiBkZXNjcmlwdG9yIDEgKi8K LQkweDgwLCBIU0laRSwgVlNJWkUsIEdBTU1BKDIuMjApLCAweDAyLAotCS8qIGNocm9tYXRpY2l0 eSBjb29yZGluYXRlcyAqLwotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4 MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JLyogZXN0YWJsaXNoZWQgdGltaW5nczogNjQweDQ4MCA2 MEh6LCA4MDB4NjAwIDYwSHosIDEwMjR4NzY4IDYwSHogKi8KLQkweDIxLCAweDA4LCAweDAwLAot CS8qIHN0YW5kYXJkIHRpbWluZ3MgKi8KLQkweGQxLCAweGMwLCAvKiAxOTIweDEwODAgNjBIeiAq LwotCTB4ODEsIDB4YzAsIC8qIDEyODB4NzIwIDYwSHogKi8KLQkweDYxLCAweDQwLCAvKiAxMDI0 eDc2OCA2MEh6ICovCi0JMHg0NSwgMHg0MCwgLyogODAweDYwMCA2MEh6ICovCi0JMHgzMSwgMHg0 MCwgLyogNjQweDQ4MCA2MEh6ICovCi0JMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgw MSwKLQkvKiBkZXNjcmlwdG9yIDEgKHByZWZlcnJlZCB0aW1pbmcpICovCi0JKENMT0NLIC8gMTAp ICYgMHgwMGZmLCAoKENMT0NLIC8gMTApICYgMHhmZjAwKSA+PiA4LAotCWFiKEhBQ1RJVkUsIEhC TEFOSyksIGFiKFZBQ1RJVkUsIFZCTEFOSyksCi0Jb3AoSE9GRlNFVCwgSFBVTFNFLCBWT0ZGU0VU LCBWUFVMU0UpLAotCWFiKEhTSVpFICogMTAsIFZTSVpFICogMTApLAotCTB4MDAsIDB4MDAsIDB4 MDAsCi0JLyogZGVzY3JpcHRvciAyIChtb25pdG9yIHJhbmdlIGxpbWl0cykgKi8KLQkweDAwLCAw eDAwLCAweDAwLCAweGZkLCAweDAwLAotCVZGUkVRIC0gMSwgVkZSRVEgKyAxLCAvKiBtaW5pbXVt LCBtYXhpbXVtIHZlcnRpY2FsIGZpZWxkIHJhdGUgKi8KLQkoQ0xPQ0sgLyAoSEFDVElWRSArIEhC TEFOSykpIC0gMSwgLyogbWluaW11bSBob3Jpem9udGFsIGxpbmUgcmF0ZSAqLwotCShDTE9DSyAv IChIQUNUSVZFICsgSEJMQU5LKSkgKyAxLCAvKiBtYXhpbXVtIGhvcml6b250YWwgbGluZSByYXRl ICovCi0JKENMT0NLIC8gMTAwMDApICsgMSwgLyogbWF4aW11bSBwaXhlbCBjbG9jayByYXRlICov Ci0JMHgwMCwgMHgwYSwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwKLQkvKiBk ZXNjcmlwdG9yIDMgKG5hbWUgZGVzY3JpcHRvcikgKi8KLQkweDAwLCAweDAwLCAweDAwLCAweGZj LCAweDAwLCAgJ0knLCAgJ0cnLCAgJ1QnLCAweDBhLAotCTB4MjAsIDB4MjAsIDB4MjAsIDB4MjAs IDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsCi0JLyogZGVzY3JpcHRvciA0ICovCi0JMHgw MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAw LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCS8qIGV4 dGVuc2lvbnMsIGNoZWNrc3VtICovCi0JMHgwMCwgMHgwMAotfTsKLQotI3VuZGVmIEVESURfTkFN RQotI3VuZGVmIFZGUkVRCi0jdW5kZWYgQ0xPQ0sKLSN1bmRlZiBIQUNUSVZFCi0jdW5kZWYgSEJM QU5LCi0jdW5kZWYgVkFDVElWRQotI3VuZGVmIFZCTEFOSwotI3VuZGVmIEhPRkZTRVQKLSN1bmRl ZiBIUFVMU0UKLSN1bmRlZiBWT0ZGU0VUCi0jdW5kZWYgVlBVTFNFCi0jdW5kZWYgSFNJWkUKLSN1 bmRlZiBWU0laRQotI3VuZGVmIEdBTU1BCi0jdW5kZWYgTUFOVUZBQ1RVUkVSX0lECi0jdW5kZWYg YWIKLSN1bmRlZiBvcApkaWZmIC0tZ2l0IGEvbGliL2lndF9rbXMuYyBiL2xpYi9pZ3Rfa21zLmMK aW5kZXggZjhiMGRhYjIuLmRmOWFhZmQyIDEwMDY0NAotLS0gYS9saWIvaWd0X2ttcy5jCisrKyBi L2xpYi9pZ3Rfa21zLmMKQEAgLTUwLDYgKzUwLDcgQEAKICNpbmNsdWRlICJkcm10ZXN0LmgiCiAj aW5jbHVkZSAiaWd0X2ttcy5oIgogI2luY2x1ZGUgImlndF9hdXguaCIKKyNpbmNsdWRlICJpZ3Rf ZWRpZC5oIgogI2luY2x1ZGUgImludGVsX2NoaXBzZXQuaCIKICNpbmNsdWRlICJpZ3RfZGVidWdm cy5oIgogI2luY2x1ZGUgImlndF9kZXZpY2UuaCIKQEAgLTEwMiwyMyArMTAzLDYgQEAgc3RhdGlj IHZvaWQgdXBkYXRlX2VkaWRfY3N1bSh1bnNpZ25lZCBjaGFyICplZGlkLCBpbnQgY2VhX3BvcykK IAllZGlkW2NlYV9wb3MgKyAxMjddID0gMjU2IC0gc3VtOwogfQogCi0jZGVmaW5lIFZGUkVRIDYw Ci0jZGVmaW5lIENMT0NLIDE0ODUwMAotI2RlZmluZSBIQUNUSVZFIDE5MjAKLSNkZWZpbmUgSEJM QU5LIDI4MAotI2RlZmluZSBWQUNUSVZFIDEwODAKLSNkZWZpbmUgVkJMQU5LIDQ1Ci0jZGVmaW5l IEhPRkZTRVQgODgKLSNkZWZpbmUgSFBVTFNFIDQ0Ci0jZGVmaW5lIFZPRkZTRVQgNAotI2RlZmlu ZSBWUFVMU0UgNQotCi0jZGVmaW5lIEhTSVpFIDUyCi0jZGVmaW5lIFZTSVpFIDMwCi0KLSNkZWZp bmUgRURJRF9OQU1FIGJhc2VfZWRpZAotI2luY2x1ZGUgImlndF9lZGlkX3RlbXBsYXRlLmgiCi0K IC8qKgogICogaWd0X2ttc19nZXRfYmFzZV9lZGlkOgogICoKQEAgLTEzNSwyOSArMTE5LDY2IEBA IHN0YXRpYyB2b2lkIHVwZGF0ZV9lZGlkX2NzdW0odW5zaWduZWQgY2hhciAqZWRpZCwgaW50IGNl YV9wb3MpCiAgKgogICogUmV0dXJuczogYSBiYXNpYyBlZGlkIGJsb2NrCiAgKi8KLWNvbnN0IHVu c2lnbmVkIGNoYXIqIGlndF9rbXNfZ2V0X2Jhc2VfZWRpZCh2b2lkKQorY29uc3QgdW5zaWduZWQg Y2hhciAqaWd0X2ttc19nZXRfYmFzZV9lZGlkKHZvaWQpCiB7Ci0JdXBkYXRlX2VkaWRfY3N1bShi YXNlX2VkaWQsIDApOworCXN0YXRpYyBzdHJ1Y3QgZWRpZCBlZGlkOworCWRybU1vZGVNb2RlSW5m byBtb2RlID0ge307CiAKLQlyZXR1cm4gYmFzZV9lZGlkOworCW1vZGUuY2xvY2sgPSAxNDg1MDA7 CisJbW9kZS5oZGlzcGxheSA9IDE5MjA7CisJbW9kZS5oc3luY19zdGFydCA9IDIwMDg7CisJbW9k ZS5oc3luY19lbmQgPSAyMDUyOworCW1vZGUuaHRvdGFsID0gMjIwMDsKKwltb2RlLnZkaXNwbGF5 ID0gMTA4MDsKKwltb2RlLnZzeW5jX3N0YXJ0ID0gMTA4NDsKKwltb2RlLnZzeW5jX2VuZCA9IDEw ODk7CisJbW9kZS52dG90YWwgPSAxMTI1OworCW1vZGUudnJlZnJlc2ggPSA2MDsKKworCWVkaWRf aW5pdF93aXRoX21vZGUoJmVkaWQsICZtb2RlKTsKKwllZGlkX3VwZGF0ZV9jaGVja3N1bSgmZWRp ZCk7CisKKwlyZXR1cm4gKHVuc2lnbmVkIGNoYXIgKikgJmVkaWQ7CiB9CiAKLSNkZWZpbmUgVkZS RVEgNjAKLSNkZWZpbmUgQ0xPQ0sgMTAxMDAwCi0jZGVmaW5lIEhBQ1RJVkUgMTQwMAotI2RlZmlu ZSBIQkxBTksgMTYwCi0jZGVmaW5lIFZBQ1RJVkUgMTA1MAotI2RlZmluZSBWQkxBTksgMzAKLSNk ZWZpbmUgSE9GRlNFVCA0OAotI2RlZmluZSBIUFVMU0UgMzIKLSNkZWZpbmUgVk9GRlNFVCAzCi0j ZGVmaW5lIFZQVUxTRSA0CisvKioKKyAqIGlndF9rbXNfZ2V0X2FsdF9lZGlkOgorICoKKyAqIEdl dCBhbiBhbHRlcm5hdGUgZWRpZCBibG9jaywgd2hpY2ggaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBt b2RlczoKKyAqCisgKiAgLSAxNDAweDEwNTAgNjBIegorICogIC0gMTkyMHgxMDgwIDYwSHoKKyAq ICAtIDEyODB4NzIwIDYwSHoKKyAqICAtIDEwMjR4NzY4IDYwSHoKKyAqICAtIDgwMHg2MDAgNjBI egorICogIC0gNjQweDQ4MCA2MEh6CisgKgorICogVGhpcyBjYW4gYmUgZXh0ZW5kZWQgd2l0aCBm dXJ0aGVyIGZlYXR1cmVzIHVzaW5nIGZ1bmN0aW9ucyBzdWNoIGFzCisgKiAja21zdGVzdF9lZGlk X2FkZF8zZC4KKyAqCisgKiBSZXR1cm5zOiBhbiBhbHRlcm5hdGUgZWRpZCBibG9jaworICovCitj b25zdCB1bnNpZ25lZCBjaGFyICppZ3Rfa21zX2dldF9hbHRfZWRpZCh2b2lkKQoreworCXN0YXRp YyBzdHJ1Y3QgZWRpZCBlZGlkOworCWRybU1vZGVNb2RlSW5mbyBtb2RlID0ge307CisKKwltb2Rl LmNsb2NrID0gMTAxMDAwOworCW1vZGUuaGRpc3BsYXkgPSAxNDAwOworCW1vZGUuaHN5bmNfc3Rh cnQgPSAxNDQ4OworCW1vZGUuaHN5bmNfZW5kID0gMTQ4MDsKKwltb2RlLmh0b3RhbCA9IDE1NjA7 CisJbW9kZS52ZGlzcGxheSA9IDEwNTA7CisJbW9kZS52c3luY19zdGFydCA9IDEwNTM7CisJbW9k ZS52c3luY19lbmQgPSAxMDU3OworCW1vZGUudnRvdGFsID0gMTA4MDsKKwltb2RlLnZyZWZyZXNo ID0gNjA7CiAKLSNkZWZpbmUgSFNJWkUgNTIKLSNkZWZpbmUgVlNJWkUgMzAKKwllZGlkX2luaXRf d2l0aF9tb2RlKCZlZGlkLCAmbW9kZSk7CisJZWRpZF91cGRhdGVfY2hlY2tzdW0oJmVkaWQpOwog Ci0jZGVmaW5lIEVESURfTkFNRSBhbHRfZWRpZAotI2luY2x1ZGUgImlndF9lZGlkX3RlbXBsYXRl LmgiCisJcmV0dXJuICh1bnNpZ25lZCBjaGFyICopICZlZGlkOworfQogCiBjb25zdCBjaGFyICog Y29uc3QgaWd0X3BsYW5lX3Byb3BfbmFtZXNbSUdUX05VTV9QTEFORV9QUk9QU10gPSB7CiAJW0lH VF9QTEFORV9TUkNfWF0gPSAiU1JDX1giLApAQCAtMzAxLDMwICszMjIsNiBAQCBpZ3RfZmlsbF9w aXBlX3Byb3BzKGlndF9kaXNwbGF5X3QgKmRpc3BsYXksIGlndF9waXBlX3QgKnBpcGUsCiAJZHJt TW9kZUZyZWVPYmplY3RQcm9wZXJ0aWVzKHByb3BzKTsKIH0KIAotLyoqCi0gKiBpZ3Rfa21zX2dl dF9hbHRfZWRpZDoKLSAqCi0gKiBHZXQgYW4gYWx0ZXJuYXRlIGVkaWQgYmxvY2ssIHdoaWNoIGlu Y2x1ZGVzIHRoZSBmb2xsb3dpbmcgbW9kZXM6Ci0gKgotICogIC0gMTQwMHgxMDUwIDYwSHoKLSAq ICAtIDE5MjB4MTA4MCA2MEh6Ci0gKiAgLSAxMjgweDcyMCA2MEh6Ci0gKiAgLSAxMDI0eDc2OCA2 MEh6Ci0gKiAgLSA4MDB4NjAwIDYwSHoKLSAqICAtIDY0MHg0ODAgNjBIegotICoKLSAqIFRoaXMg Y2FuIGJlIGV4dGVuZGVkIHdpdGggZnVydGhlciBmZWF0dXJlcyB1c2luZyBmdW5jdGlvbnMgc3Vj aCBhcwotICogI2ttc3Rlc3RfZWRpZF9hZGRfM2QuCi0gKgotICogUmV0dXJuczogYW4gYWx0ZXJu YXRlIGVkaWQgYmxvY2sKLSAqLwotY29uc3QgdW5zaWduZWQgY2hhciogaWd0X2ttc19nZXRfYWx0 X2VkaWQodm9pZCkKLXsKLQl1cGRhdGVfZWRpZF9jc3VtKGFsdF9lZGlkLCAwKTsKLQotCXJldHVy biBhbHRfZWRpZDsKLX0KLQogLyoqCiAgKiBrbXN0ZXN0X3BpcGVfbmFtZToKICAqIEBwaXBlOiBk aXNwbGF5IHBpcGUKZGlmZiAtLWdpdCBhL2xpYi9tZXNvbi5idWlsZCBiL2xpYi9tZXNvbi5idWls ZAppbmRleCBhODQ2MjkzMy4uMjBjMGUzZTYgMTAwNjQ0Ci0tLSBhL2xpYi9tZXNvbi5idWlsZAor KysgYi9saWIvbWVzb24uYnVpbGQKQEAgLTU0LDcgKzU0LDggQEAgbGliX3NvdXJjZXMgPSBbCiAJ J2lndF92M2QuYycsCiAJJ2lndF92YzQuYycsCiAJJ2lndF9wc3IuYycsCi0JJ2lndF9hbWQuYycK KwknaWd0X2FtZC5jJywKKwknaWd0X2VkaWQuYycsCiBdCiAKIGxpYl9kZXBzID0gWwotLSAKMi4y MS4wCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwppZ3Qt ZGV2IG1haWxpbmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xp c3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1kZXY=