From mboxrd@z Thu Jan 1 00:00:00 1970 From: Marius Vlad Subject: [PATCH i-g-t 1/2 v2] lib/igt_kms: Various fixes and add remaining documentation Date: Fri, 15 Jan 2016 11:06:41 +0200 Message-ID: <1452848802-8041-1-git-send-email-marius.c.vlad@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTP id E7D42A56E for ; Fri, 15 Jan 2016 01:05:30 -0800 (PST) List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org bGliL2lndF9rbXM6IEZpeCBtaW5vciBzcGVsbGluZy9ndGstZG9jIGxpbmtzLiBTdHlsZSBjaGFu Z2VzIC0tIHRyaW1tZWQgc2V2ZXJhbApjYWxscyB0byBhc3ByaW50ZigpLiBQbGFjZWQgU0VDVElP TiBoZWFkZXIgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS4gIEFkZApkb2N1bWVudGF0aW9u IGZvciByZW1haW5pbmcgZnVuY3Rpb25zIGFuZCBtYWNyb3MuCgp2MjogSW5pdGlhbGx5LCBJIHdh bnRlZCB0byBhZ2dyZWdhdGUgdGhlIGRvY3VtZW50YXRpb24gaW4gaGVhZGVyIGZpbGUocykuClRo aXMgdmVyc2lvbiBrZWVwcyB0aGUgaW5pdGlhbCBmb3JtYXQgb2YgdGhlIGRvY3VtZW50YXRpb24u CgpTaWduZWQtb2ZmLWJ5OiBNYXJpdXMgVmxhZCA8bWFyaXVzLmMudmxhZEBpbnRlbC5jb20+Ci0t LQogbGliL2lndF9rbXMuYyB8IDE2MCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrLS0tLS0tLS0tLS0tLS0tCiBsaWIvaWd0X2ttcy5oIHwgMTIzICsrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tCiAyIGZpbGVzIGNoYW5nZWQsIDIzNiBp bnNlcnRpb25zKCspLCA0NyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9saWIvaWd0X2ttcy5j IGIvbGliL2lndF9rbXMuYwppbmRleCA1ZDVhOTVjLi5jN2EwYjc3IDEwMDY0NAotLS0gYS9saWIv aWd0X2ttcy5jCisrKyBiL2xpYi9pZ3Rfa21zLmMKQEAgLTQ5LDYgKzQ5LDMwIEBACiAjaW5jbHVk ZSAiaW50ZWxfY2hpcHNldC5oIgogI2luY2x1ZGUgImlndF9kZWJ1Z2ZzLmgiCiAKKy8qKgorICog U0VDVElPTjppZ3Rfa21zCisgKiBAc2hvcnRfZGVzY3JpcHRpb246IEtlcm5lbCBtb2Rlc2V0dGlu ZyBzdXBwb3J0IGxpYnJhcnkKKyAqIEB0aXRsZTogS01TCisgKiBAaW5jbHVkZTogaWd0LmgKKyAq CisgKiBUaGlzIGxpYnJhcnkgcHJvdmlkZXMgc3VwcG9ydCB0byBlbnVtZXJhdGUgYW5kIHNldCBt b2Rlc2V0IGNvbmZpZ3VyYXRpb25zLgorICoKKyAqIFRoZXJlIGFyZSB0d28gcGFydHMgaW4gdGhp cyBsaWJyYXJ5OiBGaXJzdCB0aGUgbG93IGxldmVsIGhlbHBlciBmdW5jdGlvbgorICogd2hpY2gg ZGlyZWN0bHkgYnVpbGQgb24gdG9wIG9mIHJhdyBpb2N0bHMgb3IgdGhlIGludGVyZmFjZXMgcHJv dmlkZWQgYnkKKyAqIGxpYmRybS4gVGhvc2UgZnVuY3Rpb25zIGFsbCBoYXZlIGEga21zdGVzdF8g cHJlZml4LgorICoKKyAqIFRoZSBzZWNvbmQgcGFydCBpcyBhIGhpZ2gtbGV2ZWwgbGlicmFyeSB0 byBtYW5hZ2UgbW9kZXNldCBjb25maWd1cmF0aW9ucworICogd2hpY2ggYWJzdHJhY3RzIGF3YXkg c29tZSBvZiB0aGUgbG93LWxldmVsIGRldGFpbHMgbGlrZSB0aGUgZGlmZmVyZW5jZQorICogYmV0 d2VlbiBsZWdhY3kgYW5kIHVuaXZlcnNhbCBwbGFuZSBzdXBwb3J0IGZvciBzZXR0aW5nIGN1cnNv cnMgb3IgaW4gdGhlCisgKiBmdXR1cmUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBsZWdhY3kgYW5k IGF0b21pYyBjb21taXQuIFRoZXNlIGhpZ2gtbGV2ZWwKKyAqIGZ1bmN0aW9ucyBoYXZlIGFsbCBp Z3RfIHByZWZpeGVzLiBUaGlzIHBhcnQgaXMgc3RpbGwgdmVyeSBtdWNoIHdvcmsgaW4KKyAqIHBy b2dyZXNzIGFuZCBzbyBhbHNvIGxhY2tzIGEgYml0IGRvY3VtZW50YXRpb24gZm9yIHRoZSBpbmRp dmlkdWFsIGZ1bmN0aW9ucy4KKyAqCisgKiBOb3RlIHRoYXQgdGhpcyBsaWJyYXJ5J3MgaGVhZGVy IHB1bGxzIGluIHRoZSBbaS1nLXQKKyAqIGZyYW1lYnVmZmVyXShpbnRlbC1ncHUtdG9vbHMtRnJh bWVidWZmZXIuaHRtbCkgbGlicmFyeSBhcyBhCisgKiBkZXBlbmRlbmN5LgorICovCisKIC8qIGxp c3Qgb2YgY29ubmVjdG9ycyB0aGF0IG5lZWQgcmVzZXR0aW5nIG9uIGV4aXQgKi8KICNkZWZpbmUg TUFYX0NPTk5FQ1RPUlMgMzIKIHN0YXRpYyBjaGFyICpmb3JjZWRfY29ubmVjdG9yc1tNQVhfQ09O TkVDVE9SUyArIDFdOwpAQCAtMTA0LDcgKzEyOCw3IEBAIHN0YXRpYyB2b2lkIHVwZGF0ZV9lZGlk X2NzdW0odW5zaWduZWQgY2hhciAqZWRpZCkKICAqCiAgKiBSZXR1cm5zOiBhIGJhc2ljIGVkaWQg YmxvY2sKICAqLwotY29uc3QgdW5zaWduZWQgY2hhciogaWd0X2ttc19nZXRfYmFzZV9lZGlkKHZv aWQpCitjb25zdCB1bnNpZ25lZCBjaGFyICppZ3Rfa21zX2dldF9iYXNlX2VkaWQodm9pZCkKIHsK IAl1cGRhdGVfZWRpZF9jc3VtKGJhc2VfZWRpZCk7CiAKQEAgLTE0NSw3ICsxNjksNyBAQCBjb25z dCB1bnNpZ25lZCBjaGFyKiBpZ3Rfa21zX2dldF9iYXNlX2VkaWQodm9pZCkKICAqCiAgKiBSZXR1 cm5zOiBhbiBhbHRlcm5hdGUgZWRpZCBibG9jawogICovCi1jb25zdCB1bnNpZ25lZCBjaGFyKiBp Z3Rfa21zX2dldF9hbHRfZWRpZCh2b2lkKQorY29uc3QgdW5zaWduZWQgY2hhciAqaWd0X2ttc19n ZXRfYWx0X2VkaWQodm9pZCkKIHsKIAl1cGRhdGVfZWRpZF9jc3VtKGFsdF9lZGlkKTsKIApAQCAt MTUzLDMzICsxNzcsMTAgQEAgY29uc3QgdW5zaWduZWQgY2hhciogaWd0X2ttc19nZXRfYWx0X2Vk aWQodm9pZCkKIH0KIAogLyoqCi0gKiBTRUNUSU9OOmlndF9rbXMKLSAqIEBzaG9ydF9kZXNjcmlw dGlvbjogS2VybmVsIG1vZGVzZXR0aW5nIHN1cHBvcnQgbGlicmFyeQotICogQHRpdGxlOiBLTVMK LSAqIEBpbmNsdWRlOiBpZ3QuaAotICoKLSAqIFRoaXMgbGlicmFyeSBwcm92aWRlcyBzdXBwb3J0 IHRvIGVudW1lcmF0ZSBhbmQgc2V0IG1vZGVzZXQgY29uZmlndXJhdGlvbnMuCi0gKgotICogVGhl cmUgYXJlIHR3byBwYXJ0cyBpbiB0aGlzIGxpYnJhcnk6IEZpcnN0IHRoZSBsb3cgbGV2ZWwgaGVs cGVyIGZ1bmN0aW9uCi0gKiB3aGljaCBkaXJlY3RseSBidWlsZCBvbiB0b3Agb2YgcmF3IGlvY3Rs cyBvciB0aGUgaW50ZXJmYWNlcyBwcm92aWRlZCBieQotICogbGliZHJtLiBUaG9zZSBmdW5jdGlv bnMgYWxsIGhhdmUgYSBrbXN0ZXN0XyBwcmVmaXguCi0gKgotICogVGhlIHNlY29uZCBwYXJ0IGlz IGEgaGlnaC1sZXZlbCBsaWJyYXJ5IHRvIG1hbmFnZSBtb2Rlc2V0IGNvbmZpZ3VyYXRpb25zCi0g KiB3aGljaCBhYnN0cmFjdHMgYXdheSBzb21lIG9mIHRoZSBsb3ctbGV2ZWwgZGV0YWlscyBsaWtl IHRoZSBkaWZmZXJlbmNlCi0gKiBiZXR3ZWVuIGxlZ2FjeSBhbmQgdW5pdmVyc2FsIHBsYW5lIHN1 cHBvcnQgZm9yIHNldHRpbmcgY3Vyc29ycyBvciBpbiB0aGUKLSAqIGZ1dHVyZSB0aGUgZGlmZmVy ZW5jZSBiZXR3ZWVuIGxlZ2FjeSBhbmQgYXRvbWljIGNvbW1pdC4gVGhlc2UgaGlnaC1sZXZlbAot ICogZnVuY3Rpb25zIGhhdmUgYWxsIGlndF8gcHJlZml4ZXMuIFRoaXMgcGFydCBpcyBzdGlsbCB2 ZXJ5IG11Y2ggd29yayBpbgotICogcHJvZ3Jlc3MgYW5kIHNvIGFsc28gbGFja3MgYSBiaXQgZG9j dW1lbnRhdGlvbiBmb3IgdGhlIGluZGl2aWR1YWwgZnVuY3Rpb25zLgotICoKLSAqIE5vdGUgdGhh dCB0aGlzIGxpYnJhcnkncyBoZWFkZXIgcHVsbHMgaW4gdGhlIFtpLWctdCBmcmFtZWJ1ZmZlcl0o aW50ZWwtZ3B1LXRvb2xzLWktZy10LWZyYW1lYnVmZmVyLmh0bWwpCi0gKiBsaWJyYXJ5IGFzIGEg ZGVwZW5kZW5jeS4KLSAqLwotCi0vKioKICAqIGttc3Rlc3RfcGlwZV9uYW1lOgogICogQHBpcGU6 IGRpc3BsYXkgcGlwZQogICoKLSAqIFJldHVybnM6IFN0cmluZyByZXByZXNudGluZyBAcGlwZSwg ZS5nLiAiQSIuCisgKiBSZXR1cm5zOiBTdHJpbmcgcmVwcmVzZW50aW5nIEBwaXBlLCBlLmcuICJB Ii4KICAqLwogY29uc3QgY2hhciAqa21zdGVzdF9waXBlX25hbWUoZW51bSBwaXBlIHBpcGUpCiB7 CkBAIC0xOTUsNyArMTk2LDcgQEAgY29uc3QgY2hhciAqa21zdGVzdF9waXBlX25hbWUoZW51bSBw aXBlIHBpcGUpCiAgKiBrbXN0ZXN0X3BsYW5lX25hbWU6CiAgKiBAcGxhbmU6IGRpc3BsYXkgcGxh bmUKICAqCi0gKiBSZXR1cm5zOiBTdHJpbmcgcmVwcmVzbnRpbmcgQHBpcGUsIGUuZy4gInBsYW5l MSIuCisgKiBSZXR1cm5zOiBTdHJpbmcgcmVwcmVzZW50aW5nIEBwaXBlLCBlLmcuICJwbGFuZTEi LgogICovCiBjb25zdCBjaGFyICprbXN0ZXN0X3BsYW5lX25hbWUoZW51bSBpZ3RfcGxhbmUgcGxh bmUpCiB7CkBAIC0yMzksNyArMjQwLDcgQEAgc3RhdGljIGNvbnN0IGNoYXIgKm1vZGVfc3RlcmVv X25hbWUoY29uc3QgZHJtTW9kZU1vZGVJbmZvICptb2RlKQogICoga21zdGVzdF9kdW1wX21vZGU6 CiAgKiBAbW9kZTogbGliZHJtIG1vZGUgc3RydWN0dXJlCiAgKgotICogUHJpbnRzIEBtb2RlIHRv IHN0ZG91dCBpbiBhIGh1bWEtcmVhZGFibGUgZm9ybS4KKyAqIFByaW50cyBAbW9kZSB0byBzdGRv dXQgaW4gYSBodW1hbi1yZWFkYWJsZSBmb3JtLgogICovCiB2b2lkIGttc3Rlc3RfZHVtcF9tb2Rl KGRybU1vZGVNb2RlSW5mbyAqbW9kZSkKIHsKQEAgLTQxMyw4ICs0MTQsOSBAQCBib29sIGttc3Rl c3RfZm9yY2VfY29ubmVjdG9yKGludCBkcm1fZmQsIGRybU1vZGVDb25uZWN0b3IgKmNvbm5lY3Rv ciwKIAkJYnJlYWs7CiAJfQogCi0JaWd0X2Fzc2VydF9uZXEoYXNwcmludGYoJnBhdGgsICIlcy0l ZC9mb3JjZSIsIGttc3Rlc3RfY29ubmVjdG9yX3R5cGVfc3RyKGNvbm5lY3Rvci0+Y29ubmVjdG9y X3R5cGUpLCBjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlX2lkKSwKLQkJICAgICAgIC0xKTsKKwlp Z3RfYXNzZXJ0X25lcShhc3ByaW50ZigmcGF0aCwgIiVzLSVkL2ZvcmNlIiwKKwkJICAgICAgIGtt c3Rlc3RfY29ubmVjdG9yX3R5cGVfc3RyKGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUpLAorCQkg ICAgICAgY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZV9pZCksIC0xKTsKIAlkZWJ1Z2ZzX2ZkID0g aWd0X2RlYnVnZnNfb3BlbihwYXRoLCBPX1dST05MWSB8IE9fVFJVTkMpOwogCiAJaWYgKGRlYnVn ZnNfZmQgPT0gLTEpIHsKQEAgLTQ3OCw4ICs0ODAsOSBAQCB2b2lkIGttc3Rlc3RfZm9yY2VfZWRp ZChpbnQgZHJtX2ZkLCBkcm1Nb2RlQ29ubmVjdG9yICpjb25uZWN0b3IsCiAJaW50IGRlYnVnZnNf ZmQsIHJldDsKIAlkcm1Nb2RlQ29ubmVjdG9yICp0ZW1wOwogCi0JaWd0X2Fzc2VydF9uZXEoYXNw cmludGYoJnBhdGgsICIlcy0lZC9lZGlkX292ZXJyaWRlIiwga21zdGVzdF9jb25uZWN0b3JfdHlw ZV9zdHIoY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSksIGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5 cGVfaWQpLAotCQkgICAgICAgLTEpOworCWlndF9hc3NlcnRfbmVxKGFzcHJpbnRmKCZwYXRoLCAi JXMtJWQvZWRpZF9vdmVycmlkZSIsCisJCSAgICAgICBrbXN0ZXN0X2Nvbm5lY3Rvcl90eXBlX3N0 cihjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlKSwKKwkJICAgICAgIGNvbm5lY3Rvci0+Y29ubmVj dG9yX3R5cGVfaWQpLCAtMSk7CiAJZGVidWdmc19mZCA9IGlndF9kZWJ1Z2ZzX29wZW4ocGF0aCwg T19XUk9OTFkgfCBPX1RSVU5DKTsKIAlmcmVlKHBhdGgpOwogCkBAIC00OTEsOCArNDk0LDggQEAg dm9pZCBrbXN0ZXN0X2ZvcmNlX2VkaWQoaW50IGRybV9mZCwgZHJtTW9kZUNvbm5lY3RvciAqY29u bmVjdG9yLAogCQlyZXQgPSB3cml0ZShkZWJ1Z2ZzX2ZkLCBlZGlkLCBsZW5ndGgpOwogCWNsb3Nl KGRlYnVnZnNfZmQpOwogCi0JLyogVG8gYWxsb3cgY2FsbGVycyB0byBhbHdheXMgdXNlIEdldENv bm5lY3RvckN1cnJlbnQgd2UgbmVlZCB0byBmb3JjZSBhCi0JICogcmVkZXRlY3Rpb24gaGVyZS4g Ki8KKwkvKiBUbyBhbGxvdyBjYWxsZXJzIHRvIGFsd2F5cyB1c2UgR2V0Q29ubmVjdG9yQ3VycmVu dCB3ZSBuZWVkIHRvIGZvcmNlCisJICogYSByZWRldGVjdGlvbiBoZXJlLiAqLwogCXRlbXAgPSBk cm1Nb2RlR2V0Q29ubmVjdG9yKGRybV9mZCwgY29ubmVjdG9yLT5jb25uZWN0b3JfaWQpOwogCWRy bU1vZGVGcmVlQ29ubmVjdG9yKHRlbXApOwogCkBAIC05MDEsOCArOTA0LDkgQEAgc3RhdGljIHZv aWQgaWd0X291dHB1dF9yZWZyZXNoKGlndF9vdXRwdXRfdCAqb3V0cHV0KQogCWlmICghb3V0cHV0 LT5uYW1lKSB7CiAJCWRybU1vZGVDb25uZWN0b3IgKmMgPSBvdXRwdXQtPmNvbmZpZy5jb25uZWN0 b3I7CiAKLQkJaWd0X2Fzc2VydF9uZXEoYXNwcmludGYoJm91dHB1dC0+bmFtZSwgIiVzLSVkIiwg a21zdGVzdF9jb25uZWN0b3JfdHlwZV9zdHIoYy0+Y29ubmVjdG9yX3R5cGUpLCBjLT5jb25uZWN0 b3JfdHlwZV9pZCksCi0JCQkgICAgICAgLTEpOworCQlpZ3RfYXNzZXJ0X25lcShhc3ByaW50Zigm b3V0cHV0LT5uYW1lLCAiJXMtJWQiLAorCQkJICAgICAgIGttc3Rlc3RfY29ubmVjdG9yX3R5cGVf c3RyKGMtPmNvbm5lY3Rvcl90eXBlKSwKKwkJCSAgICAgICBjLT5jb25uZWN0b3JfdHlwZV9pZCks IC0xKTsKIAl9CiAKIAlMT0coZGlzcGxheSwgIiVzOiBTZWxlY3RpbmcgcGlwZSAlc1xuIiwgb3V0 cHV0LT5uYW1lLApAQCAtOTI2LDggKzkzMCw5IEBAIGlndF9wbGFuZV9zZXRfcHJvcGVydHkoaWd0 X3BsYW5lX3QgKnBsYW5lLCB1aW50MzJfdCBwcm9wX2lkLCB1aW50NjRfdCB2YWx1ZSkKIAlpZ3Rf cGlwZV90ICpwaXBlID0gcGxhbmUtPnBpcGU7CiAJaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSA9IHBp cGUtPmRpc3BsYXk7CiAKLQlyZXR1cm4gZHJtTW9kZU9iamVjdFNldFByb3BlcnR5KGRpc3BsYXkt PmRybV9mZCwgcGxhbmUtPmRybV9wbGFuZS0+cGxhbmVfaWQsCi0JCQkJIERSTV9NT0RFX09CSkVD VF9QTEFORSwgcHJvcF9pZCwgdmFsdWUpOworCXJldHVybiBkcm1Nb2RlT2JqZWN0U2V0UHJvcGVy dHkoZGlzcGxheS0+ZHJtX2ZkLAorCQkJCQlwbGFuZS0+ZHJtX3BsYW5lLT5wbGFuZV9pZCwKKwkJ CQkJRFJNX01PREVfT0JKRUNUX1BMQU5FLCBwcm9wX2lkLCB2YWx1ZSk7CiB9CiAKIHN0YXRpYyBi b29sCkBAIC0xMTQ1LDYgKzExNTAsMTIgQEAgdm9pZCBpZ3RfZGlzcGxheV9pbml0KGlndF9kaXNw bGF5X3QgKmRpc3BsYXksIGludCBkcm1fZmQpCiAJTE9HX1VOSU5ERU5UKGRpc3BsYXkpOwogfQog CisvKioKKyAqIGlndF9kaXNwbGF5X2dldF9uX3BpcGVzOgorICogQGRpc3BsYXk6IHRoZSBkaXNw bGF5IG9uIHdoaWNoIHRvIHJldHJpZXZlIHRoZSBudW1iZXIgb2YgcGlwZXMKKyAqCisgKiBSZXR1 cm5zOiBBbiBpbnRlZ2VyIHdpdGggdG90YWwgbnVtYmVyIG9mIHBpcGVzIGZvciB0aGF0IEBkaXNw bGF5LgorICovCiBpbnQgaWd0X2Rpc3BsYXlfZ2V0X25fcGlwZXMoaWd0X2Rpc3BsYXlfdCAqZGlz cGxheSkKIHsKIAlyZXR1cm4gZGlzcGxheS0+bl9waXBlczsKQEAgLTE2NTUsMTYgKzE2NjYsMTYg QEAgc3RhdGljIGludCBkb19kaXNwbGF5X2NvbW1pdChpZ3RfZGlzcGxheV90ICpkaXNwbGF5LAog ICoKICAqIENvbW1pdHMgZnJhbWVidWZmZXIgYW5kIHBvc2l0aW9uaW5nIGNoYW5nZXMgdG8gYWxs IHBsYW5lcyBvZiBlYWNoIGRpc3BsYXkKICAqIHBpcGUsIHVzaW5nIGEgc3BlY2lmaWMgQVBJIHRv IHBlcmZvcm0gdGhlIHByb2dyYW1taW5nLiAgVGhpcyBmdW5jdGlvbiBzaG91bGQKLSAqIGJlIHVz ZWQgdG8gZXhlcmNpc2UgYSBzcGVjaWZpYyBkcml2ZXIgcHJvZ3JhbW1pbmcgQVBJOyBpZ3RfZGlz cGxheV9jb21taXQKKyAqIGJlIHVzZWQgdG8gZXhlcmNpc2UgYSBzcGVjaWZpYyBkcml2ZXIgcHJv Z3JhbW1pbmcgQVBJOyAjaWd0X2Rpc3BsYXlfY29tbWl0CiAgKiBzaG91bGQgYmUgdXNlZCBpbnN0 ZWFkIGlmIHRoZSBBUEkgdXNlZCBpcyB1bmltcG9ydGFudCB0byB0aGUgdGVzdCBiZWluZyBydW4u CiAgKgogICogVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSB1c2VkIHRvIGNvbW1pdCBjaGFu Z2VzIHRoYXQgYXJlIGV4cGVjdGVkIHRvCiAgKiBzdWNjZWVkLCBzaW5jZSBhbnkgZmFpbHVyZSBk dXJpbmcgdGhlIGNvbW1pdCBwcm9jZXNzIHdpbGwgY2F1c2UgdGhlIElHVAogICogc3VidGVzdCB0 byBmYWlsLiAgVG8gY29tbWl0IGNoYW5nZXMgdGhhdCBhcmUgZXhwZWN0ZWQgdG8gZmFpbCwgdXNl Ci0gKiBAaWd0X3RyeV9kaXNwbGF5X2NvbW1pdDIgaW5zdGVhZC4KKyAqICNpZ3RfdHJ5X2Rpc3Bs YXlfY29tbWl0MiBpbnN0ZWFkLgogICoKICAqIFJldHVybnM6IDAgdXBvbiBzdWNjZXNzLiAgVGhp cyBmdW5jdGlvbiB3aWxsIG5ldmVyIHJldHVybiB1cG9uIGZhaWx1cmUKLSAqIHNpbmNlIGlndF9m YWlsKCkgYXQgbG93ZXIgbGV2ZWxzIHdpbGwgbG9uZ2ptcCBvdXQgb2YgaXQuCisgKiBzaW5jZSAj aWd0X2ZhaWwoKSBhdCBsb3dlciBsZXZlbHMgd2lsbCBsb25nam1wIG91dCBvZiBpdC4KICAqLwog aW50IGlndF9kaXNwbGF5X2NvbW1pdDIoaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSwKIAkJICAgICAg IGVudW0gaWd0X2NvbW1pdF9zdHlsZSBzKQpAQCAtMTcxMywxMSArMTcyNCwyNiBAQCBpbnQgaWd0 X2Rpc3BsYXlfY29tbWl0KGlndF9kaXNwbGF5X3QgKmRpc3BsYXkpCiAJcmV0dXJuIGlndF9kaXNw bGF5X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlUX0xFR0FDWSk7CiB9CiAKKy8qKgorICogaWd0X291 dHB1dF9uYW1lOgorICogQG91dHB1dDogT3V0cHV0IG9mIHdoaWNoIHdlIHJldHJpZXZlIHRoZSBu YW1lCisgKgorICogUmV0dXJuczogQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBuYW1lIG9mIEBv dXRwdXQuCisgKi8KIGNvbnN0IGNoYXIgKmlndF9vdXRwdXRfbmFtZShpZ3Rfb3V0cHV0X3QgKm91 dHB1dCkKIHsKIAlyZXR1cm4gb3V0cHV0LT5uYW1lOwogfQogCisvKioKKyAqIGlndF9vdXRwdXRf Z2V0X21vZGU6CisgKiBAb3V0cHV0OiBPdXRwdXQgYXMgcG9pbnRlciB0byAjaWd0X291dHB1dF90 CisgKgorICogUmV0cmlldmVzIHRoZSBkZWZhdWx0IG1vZGUgb2YgQG91dHB1dAorICoKKyAqIFJl dHVybnM6IGEgcG9pbnRlciB0byBkcm1Nb2RlTW9kZUluZm8KKyAqCisgKi8KIGRybU1vZGVNb2Rl SW5mbyAqaWd0X291dHB1dF9nZXRfbW9kZShpZ3Rfb3V0cHV0X3QgKm91dHB1dCkKIHsKIAlyZXR1 cm4gJm91dHB1dC0+Y29uZmlnLmRlZmF1bHRfbW9kZTsKQEAgLTE3MzgsNiArMTc2NCwxMiBAQCB2 b2lkIGlndF9vdXRwdXRfb3ZlcnJpZGVfbW9kZShpZ3Rfb3V0cHV0X3QgKm91dHB1dCwgZHJtTW9k ZU1vZGVJbmZvICptb2RlKQogCW91dHB1dC0+dXNlX292ZXJyaWRlX21vZGUgPSB0cnVlOwogfQog CisvKioKKyAqIGlndF9vdXRwdXRfc2V0X3BpcGU6CisgKiBAb3V0cHV0OiBPdXRwdXQgb2Ygd2hp Y2ggdGhlIHBpcGUgd2lsbCBiZSBvdmVycmlkZW4KKyAqIEBwaXBlOiBvbmUgb2YgI3BpcGUKKyAq CisgKi8KIHZvaWQgaWd0X291dHB1dF9zZXRfcGlwZShpZ3Rfb3V0cHV0X3QgKm91dHB1dCwgZW51 bSBwaXBlIHBpcGUpCiB7CiAJaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSA9IG91dHB1dC0+ZGlzcGxh eTsKQEAgLTE3NTIsNiArMTc4NCwxNCBAQCB2b2lkIGlndF9vdXRwdXRfc2V0X3BpcGUoaWd0X291 dHB1dF90ICpvdXRwdXQsIGVudW0gcGlwZSBwaXBlKQogCX0KIH0KIAorLyoqCisgKiBpZ3Rfb3V0 cHV0X2dldF9wbGFuZToKKyAqIEBvdXRwdXQ6IGEgcG9pbnRlciB0byAjaWd0X291dHB1dF90Cisg KiBAcGxhbmU6IGEgI2lndF9wbGFuZSBwbGFuZQorICoKKyAqIFJldHVybnM6IGEgcG9pbnRlciB0 byAjaWd0X3BsYW5lX3QgbWF0Y2hpbmcgQHBsYW5lCisgKgorICovCiBpZ3RfcGxhbmVfdCAqaWd0 X291dHB1dF9nZXRfcGxhbmUoaWd0X291dHB1dF90ICpvdXRwdXQsIGVudW0gaWd0X3BsYW5lIHBs YW5lKQogewogCWlndF9waXBlX3QgKnBpcGU7CkBAIC0xNzYwLDYgKzE4MDAsMTQgQEAgaWd0X3Bs YW5lX3QgKmlndF9vdXRwdXRfZ2V0X3BsYW5lKGlndF9vdXRwdXRfdCAqb3V0cHV0LCBlbnVtIGln dF9wbGFuZSBwbGFuZSkKIAlyZXR1cm4gaWd0X3BpcGVfZ2V0X3BsYW5lKHBpcGUsIHBsYW5lKTsK IH0KIAorLyoqCisgKiBpZ3RfcGxhbmVfc2V0X2ZiOgorICogQHBsYW5lOiBwbGFuZSBwb2ludGVy CisgKiBAZmI6IHBvaW50ZXIgdG8gYSAjaWd0X2ZiCisgKgorICogTm90ZTogU2V0cyB0aGUgZGVm YXVsdCBwbGFuZSBzaXplIGFuZCBwb3NpdGlvbiBhcyBmcmFtZWJ1ZmZlcnMgc2l6ZS4KKyAqCisg Ki8KIHZvaWQgaWd0X3BsYW5lX3NldF9mYihpZ3RfcGxhbmVfdCAqcGxhbmUsIHN0cnVjdCBpZ3Rf ZmIgKmZiKQogewogCWlndF9waXBlX3QgKnBpcGUgPSBwbGFuZS0+cGlwZTsKQEAgLTE3ODksNiAr MTgzNywxMyBAQCB2b2lkIGlndF9wbGFuZV9zZXRfZmIoaWd0X3BsYW5lX3QgKnBsYW5lLCBzdHJ1 Y3QgaWd0X2ZiICpmYikKIAlwbGFuZS0+c2l6ZV9jaGFuZ2VkID0gdHJ1ZTsKIH0KIAorLyoqCisg KiBpZ3RfcGxhbmVfc2V0X3Bvc2l0aW9uOgorICogQHBsYW5lOiBwbGFuZSBwb2ludGVyIGZvciB3 aGljaCB0aGUgcG9zaXRpb24gc2hvdWxkIGJlIHNldAorICogQHg6IHRoZSB4LWF4aXMKKyAqIEB5 OiB0aGUgeS1heGlzCisgKgorICovCiB2b2lkIGlndF9wbGFuZV9zZXRfcG9zaXRpb24oaWd0X3Bs YW5lX3QgKnBsYW5lLCBpbnQgeCwgaW50IHkpCiB7CiAJaWd0X3BpcGVfdCAqcGlwZSA9IHBsYW5l LT5waXBlOwpAQCAtMTg3OCw2ICsxOTMzLDEzIEBAIHZvaWQgaWd0X2ZiX3NldF9zaXplKHN0cnVj dCBpZ3RfZmIgKmZiLCBpZ3RfcGxhbmVfdCAqcGxhbmUsCiAJcGxhbmUtPmZiX2NoYW5nZWQgPSB0 cnVlOwogfQogCisvKioKKyAqIGlndF9wbGFuZV9zZXRfcGFubmluZzoKKyAqIEBwbGFuZTogcGxh bmUgcG9pbnRlciBmb3Igd2hpY2ggcGFubmlnIHNob3VsZCBiZSBzZXQKKyAqIEB4OiBzcGVjaWZp ZXMgdGhlIHgtYXhpcworICogQHk6IHNwZWNpZmllcyB0aGUgeS1heGlzCisgKgorICovCiB2b2lk IGlndF9wbGFuZV9zZXRfcGFubmluZyhpZ3RfcGxhbmVfdCAqcGxhbmUsIGludCB4LCBpbnQgeSkK IHsKIAlpZ3RfcGlwZV90ICpwaXBlID0gcGxhbmUtPnBpcGU7CkBAIC0xOTA5LDYgKzE5NzEsMTIg QEAgc3RhdGljIGNvbnN0IGNoYXIgKnJvdGF0aW9uX25hbWUoaWd0X3JvdGF0aW9uX3Qgcm90YXRp b24pCiAJfQogfQogCisvKioKKyAqIGlndF9wbGFuZV9zZXRfcm90YXRpb246CisgKiBAcGxhbmU6 IHBsYW5lIHBvaW50ZXIgZm9yIHdoaWNoIHJvdGF0aW9uIHNob3VsZCBiZSBzZXQKKyAqIEByb3Rh dGlvbjogb25lIG9mICNpZ3Rfcm90YXRpb25fdAorICoKKyAqLwogdm9pZCBpZ3RfcGxhbmVfc2V0 X3JvdGF0aW9uKGlndF9wbGFuZV90ICpwbGFuZSwgaWd0X3JvdGF0aW9uX3Qgcm90YXRpb24pCiB7 CiAJaWd0X3BpcGVfdCAqcGlwZSA9IHBsYW5lLT5waXBlOwpAQCAtMTk0Niw3ICsyMDE0LDE1IEBA IHZvaWQgaWd0X2NydGNfc2V0X2JhY2tncm91bmQoaWd0X3BpcGVfdCAqcGlwZSwgdWludDY0X3Qg YmFja2dyb3VuZCkKIAlwaXBlLT5iYWNrZ3JvdW5kX2NoYW5nZWQgPSB0cnVlOwogfQogCi0KKy8q KgorICogaWd0X3dhaXRfZm9yX3ZibGFuazoKKyAqIEBkcm1fZmQ6IERSTSBmZAorICogQHBpcGU6 IHRoZSBwaXBlIG9uIHdoaWNoIHRvIHdhaXQgZm9yIGEgdmVydGljYWwgYmxhbmsKKyAqCisgKiBU aGlzIGZ1bmN0aW9ucyBjYW4gdXNlZCB0byB3YWl0IHVudGlsIHRoZSBlbmQgb2YgdGhlIGZyYW1l IGFuZCBzdGFydCBvZiB0aGUKKyAqIG5leHQgZnJhbWUgb24gQHBpcGUsIGNhbGxlZCBhIHZibGFu ay4KKyAqCisgKi8KIHZvaWQgaWd0X3dhaXRfZm9yX3ZibGFuayhpbnQgZHJtX2ZkLCBlbnVtIHBp cGUgcGlwZSkKIHsKIAlkcm1WQmxhbmsgd2FpdF92Ymw7CmRpZmYgLS1naXQgYS9saWIvaWd0X2tt cy5oIGIvbGliL2lndF9rbXMuaAppbmRleCA5NGYzMTVmLi5hMDY5NjRmIDEwMDY0NAotLS0gYS9s aWIvaWd0X2ttcy5oCisrKyBiL2xpYi9pZ3Rfa21zLmgKQEAgLTM5LDYgKzM5LDEyIEBACiAKIC8q IExvdy1sZXZlbCBoZWxwZXJzIHdpdGgga21zdGVzdF8gcHJlZml4ICovCiAKKy8qKgorICogcGlw ZToKKyAqCisgKiBUaGUgZnJvbnQgZW5kIG9mIHRoZSBkaXNwbGF5IGNvbnRhaW5zIHRoZSBwaXBl cy4gVGhlcmUgYXJlIHRocmVlIGluc3RhbmNlcworICogd2hpY2ggYXJlIHJlZmVycmVkIHRvIGFz IFBpcGUgQSwgUGlwZSBCLCBhbmQgUGlwZSBDLgorICovCiBlbnVtIHBpcGUgewogICAgICAgICBQ SVBFX0FOWSA9IC0xLAogICAgICAgICBQSVBFX0EgPSAwLApAQCAtNDYsOSArNTIsMjAgQEAgZW51 bSBwaXBlIHsKICAgICAgICAgUElQRV9DLAogICAgICAgICBJOTE1X01BWF9QSVBFUwogfTsKKwog Y29uc3QgY2hhciAqa21zdGVzdF9waXBlX25hbWUoZW51bSBwaXBlIHBpcGUpOwogCi0vKiBXZSBu YW1lc3BhY2UgdGhpcyBlbnVtIHRvIG5vdCBjb25mbGljdCB3aXRoIHRoZSBBbmRyb2lkIGk5MTVf ZHJtLmggKi8KKy8qKgorICogaWd0X3BsYW5lOgorICoKKyAqIFByaW9yIHRvIEdFTjksIGVhY2gg ZGlzcGxheSBwaXBlIGhhZCBhIHByaW1hcnkgcGxhbmUsIGEgb3ZlcmxheS9zcHJpdGUKKyAqIHBs YW5lLCBhbmQgYSBjdXJzb3IgcGxhbmUuIEZyb20gU0tML0JYVCBlYWNoIHBsYW5lIGNhbiBiZSBh IHByaW1hcnkgcGxhbmUsCisgKiBhIHNwcml0ZSBwbGFuZSBvciBhbiBvdmVybGF5IHBsYW5lLgor ICoKKyAqIFNlZSAjaWd0X2Rpc3BsYXkgYW5kICNpZ3RfZGlzcGxheV9pbml0IHRoYXQgcmV0cmll dmVzIHRoaXMgaW5mb3JtYXRpb24uCisgKgorICogV2UgbmFtZXNwYWNlIHRoaXMgZW51bSB0byBu b3QgY29uZmxpY3Qgd2l0aCB0aGUgQW5kcm9pZCBpOTE1X2RybS5oLgorICovCiBlbnVtIGlndF9w bGFuZSB7CiAgICAgICAgIElHVF9QTEFORV8xID0gMCwKICAgICAgICAgSUdUX1BMQU5FX1BSSU1B UlkgPSBJR1RfUExBTkVfMSwKQEAgLTU3LDcgKzc0LDYgQEAgZW51bSBpZ3RfcGxhbmUgewogICAg ICAgICBJR1RfUExBTkVfQ1VSU09SLAogfTsKIAotY29uc3QgY2hhciAqa21zdGVzdF9wbGFuZV9u YW1lKGVudW0gaWd0X3BsYW5lIHBsYW5lKTsKIAogZW51bSBwb3J0IHsKICAgICAgICAgUE9SVF9B ID0gMCwKQEAgLTY4LDYgKzg0LDggQEAgZW51bSBwb3J0IHsKICAgICAgICAgSTkxNV9NQVhfUE9S VFMKIH07CiAKK2NvbnN0IGNoYXIgKmttc3Rlc3RfcGxhbmVfbmFtZShlbnVtIGlndF9wbGFuZSBw bGFuZSk7CisKIC8qKgogICoga21zdGVzdF9wb3J0X25hbWU6CiAgKiBAcG9ydDogZGlzcGxheSBw bGFuZQpAQCAtODAsNyArOTgsMTEgQEAgZW51bSBwb3J0IHsKICAqIGttc3Rlc3RfZW5jb2Rlcl90 eXBlX3N0cjoKICAqIEB0eXBlOiBEUk1fTU9ERV9FTkNPREVSXyogZW51bWVyYXRpb24gdmFsdWUK ICAqCisgKiBIZWxwZXIgbWFjcm8gdGhhdCBkZWZpbmVzIHRoaXMgZnVuY3Rpb24KKyAqIGNhbiBi ZSBmb3VuZCBpbiBbYXV4XShpbnRlbC1ncHUtdG9vbHMtYXV4Lmh0bWwpLgorICoKICAqIFJldHVy bnM6IEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgZHJtIGVuY29kZXIgQHR5cGUuCisgKgogICov CiBjb25zdCBjaGFyICprbXN0ZXN0X2VuY29kZXJfdHlwZV9zdHIoaW50IHR5cGUpOwogCkBAIC04 OCw2ICsxMTAsOSBAQCBjb25zdCBjaGFyICprbXN0ZXN0X2VuY29kZXJfdHlwZV9zdHIoaW50IHR5 cGUpOwogICoga21zdGVzdF9jb25uZWN0b3Jfc3RhdHVzX3N0cjoKICAqIEBzdGF0dXM6IERSTV9N T0RFXyogY29ubmVjdG9yIHN0YXR1cyB2YWx1ZQogICoKKyAqIEhlbHBlciBtYWNybyB0aGF0IGRl ZmluZXMgdGhpcyBmdW5jdGlvbgorICogY2FuIGJlIGZvdW5kIGluIFthdXhdKGludGVsLWdwdS10 b29scy1hdXguaHRtbCkuCisgKgogICogUmV0dXJuczogQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRo ZSBkcm0gY29ubmVjdG9yIHN0YXR1cyBAc3RhdHVzLgogICovCiBjb25zdCBjaGFyICprbXN0ZXN0 X2Nvbm5lY3Rvcl9zdGF0dXNfc3RyKGludCBzdGF0dXMpOwpAQCAtOTYsNiArMTIxLDkgQEAgY29u c3QgY2hhciAqa21zdGVzdF9jb25uZWN0b3Jfc3RhdHVzX3N0cihpbnQgc3RhdHVzKTsKICAqIGtt c3Rlc3RfY29ubmVjdG9yX3R5cGVfc3RyOgogICogQHR5cGU6IERSTV9NT0RFX0NPTk5FQ1RPUl8q IGVudW1lcmF0aW9uIHZhbHVlCiAgKgorICogSGVscGVyIG1hY3JvIHRoYXQgZGVmaW5lcyB0aGlz IGZ1bmN0aW9uCisgKiBjYW4gYmUgZm91bmQgaW4gW2F1eF0oaW50ZWwtZ3B1LXRvb2xzLWF1eC5o dG1sKS4KKyAqCiAgKiBSZXR1cm5zOiBBIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGRybSBjb25u ZWN0b3IgQHR5cGUuCiAgKi8KIGNvbnN0IGNoYXIgKmttc3Rlc3RfY29ubmVjdG9yX3R5cGVfc3Ry KGludCB0eXBlKTsKQEAgLTEwNiw2ICsxMzQsMTkgQEAgaW50IGttc3Rlc3RfZ2V0X3BpcGVfZnJv bV9jcnRjX2lkKGludCBmZCwgaW50IGNydGNfaWQpOwogdm9pZCBrbXN0ZXN0X3NldF92dF9ncmFw aGljc19tb2RlKHZvaWQpOwogdm9pZCBrbXN0ZXN0X3Jlc3RvcmVfdnRfbW9kZSh2b2lkKTsKIAor LyoqCisgKiBrbXN0ZXN0X2Nvbm5lY3Rvcl9jb25maWc6CisgKiBAY3J0YzogRFJNIHBpcGUsIHBv aW50ZXIgdG8gI2RybU1vZGVDcnRjCisgKiBAY29ubmVjdG9yOiBlbmQtcG9pbnQgY29ubmVjdG9y OyBwb2ludGVyIHRvICNkcm1Nb2RlQ29ubmVjdG9yCisgKiBAZW5jb2RlcjogcG9pbnRlciB0byAj ZHJtTW9kZUVuY29kZXIKKyAqIEBkZWZhdWx0X21vZGU6IGRlZmF1bHQgbW9kZSBmb3VuZAorICog QGNydGNfaWR4OiBwaXBlIGZvdW5kIHdoZW4gc2VhcmNoaW5nIGZvciBhdmFpbGFibGUgY29ubmVj dG9ycworICogQHBpcGU6IHRoaXMgdHJhbnNsYXRlcyBkaXJlY3RseSB0byAjcGlwZQorICoKKyAq IFN0cnVjdHVyZSB1c2VkIHRvIHJldHJpZXZlIGVuY29kZXJzLCBjb25uZWN0b3JzIGFuZCBwaXBl cworICogd2l0aCB0aGUgaGVscCBvZiAja21zdGVzdF9nZXRfY29ubmVjdG9yX2NvbmZpZygpLgor ICoKKyAqLwogc3RydWN0IGttc3Rlc3RfY29ubmVjdG9yX2NvbmZpZyB7CiAJZHJtTW9kZUNydGMg KmNydGM7CiAJZHJtTW9kZUNvbm5lY3RvciAqY29ubmVjdG9yOwpAQCAtMTMxLDcgKzE3Miw5IEBA IGVudW0ga21zdGVzdF9mb3JjZV9jb25uZWN0b3Jfc3RhdGUgewogCiBib29sIGttc3Rlc3RfZm9y Y2VfY29ubmVjdG9yKGludCBmZCwgZHJtTW9kZUNvbm5lY3RvciAqY29ubmVjdG9yLAogCQkJICAg ICBlbnVtIGttc3Rlc3RfZm9yY2VfY29ubmVjdG9yX3N0YXRlIHN0YXRlKTsKLXZvaWQga21zdGVz dF9lZGlkX2FkZF8zZChjb25zdCB1bnNpZ25lZCBjaGFyICplZGlkLCBzaXplX3QgbGVuZ3RoLCB1 bnNpZ25lZCBjaGFyICpuZXdfZWRpZF9wdHJbXSwgc2l6ZV90ICpuZXdfbGVuZ3RoKTsKK3ZvaWQg a21zdGVzdF9lZGlkX2FkZF8zZChjb25zdCB1bnNpZ25lZCBjaGFyICplZGlkLCBzaXplX3QgbGVu Z3RoLAorCQkJIHVuc2lnbmVkIGNoYXIgKm5ld19lZGlkX3B0cltdLCBzaXplX3QgKm5ld19sZW5n dGgpOworCiB2b2lkIGttc3Rlc3RfZm9yY2VfZWRpZChpbnQgZHJtX2ZkLCBkcm1Nb2RlQ29ubmVj dG9yICpjb25uZWN0b3IsCiAJCQljb25zdCB1bnNpZ25lZCBjaGFyICplZGlkLCBzaXplX3QgbGVu Z3RoKTsKIApAQCAtMTU5LDEyICsyMDIsMzMgQEAgZW51bSBpZ3RfY29tbWl0X3N0eWxlIHsKIAkv KiBXZSdsbCBhZGQgYXRvbWljIGhlcmUgZXZlbnR1YWxseS4gKi8KIH07CiAKKy8qKgorICogaWd0 X2Rpc3BsYXlfdDoKKyAqCisgKiBzZWUgI2lndF9kaXNwbGF5CisgKi8KIHR5cGVkZWYgc3RydWN0 IGlndF9kaXNwbGF5IGlndF9kaXNwbGF5X3Q7CisKKy8qKgorICogaWd0X3BpcGVfdDoKKyAqCisg KiBzZWUgI2lndF9waXBlCisgKi8KIHR5cGVkZWYgc3RydWN0IGlndF9waXBlIGlndF9waXBlX3Q7 Ci10eXBlZGVmIHVpbnQzMl90IGlndF9maXhlZF90OwkJCS8qIDE2LjE2IGZpeGVkIHBvaW50ICov CiAKKy8qKgorICogaWd0X2ZpeGVkX3Q6CisgKgorICogMTYuMTYgZml4ZWQgcG9pbnQKKyAqLwor dHlwZWRlZiB1aW50MzJfdCBpZ3RfZml4ZWRfdDsKKworLyoqCisgKiBpZ3Rfcm90YXRpb25fdDoK KyAqCisgKiB0aGlzIG1hcHMgdG8gdGhlIGtlcm5lbCBBUEkKKyAqLwogdHlwZWRlZiBlbnVtIHsK LQkvKiB0aGlzIG1hcHMgdG8gdGhlIGtlcm5lbCBBUEkgKi8KIAlJR1RfUk9UQVRJT05fMCAgID0g MSA8PCAwLAogCUlHVF9ST1RBVElPTl85MCAgPSAxIDw8IDEsCiAJSUdUX1JPVEFUSU9OXzE4MCA9 IDEgPDwgMiwKQEAgLTIwMiw2ICsyNjYsMjEgQEAgdHlwZWRlZiBzdHJ1Y3QgewogCWlndF9yb3Rh dGlvbl90IHJvdGF0aW9uOwogfSBpZ3RfcGxhbmVfdDsKIAorLyoqCisgKiBpZ3RfcGlwZToKKyAq IEBkaXNwbGF5OiBhIHBvaW50ZXIgdG8gI2lndF9kaXNwbGF5X3QKKyAqIEBwaXBlOiB3aGljaCBw aXBlIHNlZSAjcGlwZQorICogQGVuYWJsZWQ6IGlmIHRoaXMgcGlwZSBpcyBlbmFibGVkCisgKiBA bl9wbGFuZXM6IG51bWJlciBvZiBwbGFuZXMgZm9yIHRoaXMgcGlwZQorICogQHBsYW5lczogYXJy YXkgb2YgI2lndF9wbGFuZXNfdAorICogQGJhY2tncm91bmQ6IEJhY2tncm91bmQgY29sb3IgTVNC IEJHUiAxNmJwYyBMU0IKKyAqIEBiYWNrZ3JvdW5kX2NoYW5nZWQ6IGlmIHRoZSBiYWNrZ3JvdW5k IGhhcyBjaGFuZ2VkCisgKiBAYmFja2dyb3VuZF9wcm9wZXJ0eTogYmFja2dyb3VuZCBwcm9wZXJ0 eQorICoKKyAqIFJlcHJlc2VudGF0aW9uIG9mIGEgcGlwZSwgdGhhdCBjb25uZWN0cyB0byAjaWd0 X3BsYW5lX3QgYW5kCisgKiAjaWd0X2Rpc3BsYXlfdC4KKyAqCisgKi8KIHN0cnVjdCBpZ3RfcGlw ZSB7CiAJaWd0X2Rpc3BsYXlfdCAqZGlzcGxheTsKIAllbnVtIHBpcGUgcGlwZTsKQEAgLTIyNiw2 ICszMDUsMTggQEAgdHlwZWRlZiBzdHJ1Y3QgewogCWRybU1vZGVNb2RlSW5mbyBvdmVycmlkZV9t b2RlOwogfSBpZ3Rfb3V0cHV0X3Q7CiAKKy8qKgorICogaWd0X2Rpc3BsYXk6CisgKiBAZHJtX2Zk OiBEUk0gZmQKKyAqIEBsb2dfc2hpZnQ6IHVzZWZ1bCBmb3IgbG9nZ2luZzsgc2VlICNMT0dfSU5E RU5UCisgKiBAbl9waXBlczogbnVtYmVyIG9mIHBpcGVzCisgKiBAbl9vdXRwdXRzOiBudW1iZXIg b2Ygb3V0cHV0cworICogQHBpcGVzX2luX3VzZTogaG93IG1hbnkgcGlwZXMgYXJlIGluIHVzZQor ICogQG91dHB1dHM6IGEgcG9pbnRlciB0byAjaWd0X291dHB1dF90OyBzZWUgI2lndF9kaXNwbGF5 X2luaXQKKyAqIEBwaXBlczogYXJyYXkgb2YgI2lndF9waXBlX3QKKyAqIEBoYXNfdW5pdmVyc2Fs X3BsYW5lczogaWYgdGhlIGhhcmR3YXJlIHN1cHBvcnRzIHVuaXZlcnNhbCBwbGFuZXMKKyAqCisg Ki8KIHN0cnVjdCBpZ3RfZGlzcGxheSB7CiAJaW50IGRybV9mZDsKIAlpbnQgbG9nX3NoaWZ0OwpA QCAtMjY4LDEzICszNTksMzUgQEAgdm9pZCBpZ3RfZmJfc2V0X3NpemUoc3RydWN0IGlndF9mYiAq ZmIsIGlndF9wbGFuZV90ICpwbGFuZSwKIAogdm9pZCBpZ3Rfd2FpdF9mb3JfdmJsYW5rKGludCBk cm1fZmQsIGVudW0gcGlwZSBwaXBlKTsKIAorLyoqCisgKiBmb3JfZWFjaF9jb25uZWN0ZWRfb3V0 cHV0OgorICogQGRpc3BsYXk6IGEgcG9pbnRlciB0byAjaWd0X2Rpc3BsYXlfdCB3aGljaCBjb250 YWlucyB0aGUgZGlzcGxheQorICogQG91dHB1dDogYSBwb2ludGVyIHRvICNpZ3Rfb3V0cHV0X3Qg dG8gZGV0ZXJtaW5lIGlmIHRoZSBvdXRwdXQgaXMgdmFsaWQKKyAqCisgKiBJdGVyYXRlIG92ZXIg YWxsIGNvbm5lY3RvcnMgb2YgYSBkaXNwbGF5LgorICovCiAjZGVmaW5lIGZvcl9lYWNoX2Nvbm5l Y3RlZF9vdXRwdXQoZGlzcGxheSwgb3V0cHV0KQkJXAogCWZvciAoaW50IGlfXyA9IDA7ICBpX18g PCAoZGlzcGxheSktPm5fb3V0cHV0czsgaV9fKyspCVwKIAkJaWYgKChvdXRwdXQgPSAmKGRpc3Bs YXkpLT5vdXRwdXRzW2lfX10pLCBvdXRwdXQtPnZhbGlkKQogCisvKioKKyAqIGZvcl9lYWNoX3Bp cGU6CisgKiBAZGlzcGxheTogYSBwb2ludGVydG8gI2lndF9kaXNwbGF5X3QKKyAqIEBwaXBlOiBh ICNwaXBlIHR5cGUgYXMgYSBsb29wIGN1cnNvcgorICoKKyAqIEl0ZXJhdGUgb3ZlciB0aGUgcGlw ZXMgb2YgYSBkaXNwbGF5LgorICovCiAjZGVmaW5lIGZvcl9lYWNoX3BpcGUoZGlzcGxheSwgcGlw ZSkJCQkJCVwKIAlmb3IgKHBpcGUgPSAwOyBwaXBlIDwgaWd0X2Rpc3BsYXlfZ2V0X25fcGlwZXMo ZGlzcGxheSk7IHBpcGUrKykJXAogCisvKioKKyAqIGZvcl9lYWNoX3BsYW5lX29uX3BpcGU6Cisg KiBAZGlzcGxheTogYSBwb2ludGVyIHRvICNpZ3RfZGlzcGxheV90CisgKiBAcGlwZTogYSAjcGlw ZSB0eXBlIGFzIGEgaW5kZXhlciBpbnRvICNpZ3RfZGlzcGxheTpwaXBlcworICogQHBsYW5lOiBh IHBvaW50ZXIgdG8gI2lndF9wbGFuZV90IGFzIGEgbG9vcCBjdXJzb3IKKyAqCisgKiBJdGVyYXRl IG92ZXIgdGhlIHBsYW5lcyBvZiBhIHBpcGUuCisgKi8KICNkZWZpbmUgZm9yX2VhY2hfcGxhbmVf b25fcGlwZShkaXNwbGF5LCBwaXBlLCBwbGFuZSkJCQlcCiAJZm9yIChpbnQgaV9fID0gMDsgKHBs YW5lKSA9ICYoZGlzcGxheSktPnBpcGVzWyhwaXBlKV0ucGxhbmVzW2lfX10sIFwKIAkJICAgICBp X18gPCAoZGlzcGxheSktPnBpcGVzWyhwaXBlKV0ubl9wbGFuZXM7IGlfXysrKQotLSAKMi42LjIK Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdm eCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlz dHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==