From mboxrd@z Thu Jan 1 00:00:00 1970 From: Keith Packard Subject: [PATCH 5/6] dri3: Add DRI3 support to GLX, DRI common and Intel driver Date: Thu, 31 Oct 2013 16:13:15 -0700 Message-ID: <1383261196-25093-6-git-send-email-keithp@keithp.com> References: <1383261196-25093-1-git-send-email-keithp@keithp.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1383261196-25093-1-git-send-email-keithp@keithp.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: dri-devel-bounces@lists.freedesktop.org Errors-To: dri-devel-bounces@lists.freedesktop.org To: mesa3d-dev@lists.sourceforge.net Cc: dri-devel@lists.sourceforge.net List-Id: dri-devel@lists.freedesktop.org VGhpcyBob29rcyBEUkkzIHN1cHBvcnQgaW50byB0aGUgR0xYIGxheWVyLCB0aGUgRFJJIGNvbW1v biBsYXllciBhbmQgdGhlIEludGVsCmRyaXZlci4KClNpZ25lZC1vZmYtYnk6IEtlaXRoIFBhY2th cmQgPGtlaXRocEBrZWl0aHAuY29tPgotLS0KIGNvbmZpZ3VyZS5hYyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB8ICAgMTAgKy0KIGluY2x1ZGUvR0wvaW50ZXJuYWwvZHJpX2ludGVy ZmFjZS5oICAgICAgICAgICB8ICAxNTggKysrCiBzcmMvZ2x4L01ha2VmaWxlLmFtICAgICAgICAg ICAgICAgICAgICAgICAgICAgfCAgICAyICsKIHNyYy9nbHgvZHJpM19jb21tb24uYyAgICAgICAg ICAgICAgICAgICAgICAgICB8ICAxNDYgKysrCiBzcmMvZ2x4L2RyaTNfZ2x4LmMgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfCAxNTM5ICsrKysrKysrKysrKysrKysrKysrKysrKysKIHNyYy9n bHgvZHJpM19wcml2LmggICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxMjggKysKIHNyYy9n bHgvZ2x4Y2xpZW50LmggICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKwogc3JjL2ds eC9nbHhleHQuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNiArLQogc3JjL21l c2EvZHJpdmVycy9kcmkvY29tbW9uL2RyaV91dGlsLmMgICAgICAgIHwgIDE2MyArKy0KIHNyYy9t ZXNhL2RyaXZlcnMvZHJpL2NvbW1vbi9kcmlfdXRpbC5oICAgICAgICB8ICAgMjMgKwogc3JjL21l c2EvZHJpdmVycy9kcmkvaTkxNS9pbnRlbF9jb250ZXh0LmMgICAgIHwgIDEwOSArLQogc3JjL21l c2EvZHJpdmVycy9kcmkvaTkxNS9pbnRlbF9taXBtYXBfdHJlZS5jIHwgICAzMyArCiBzcmMvbWVz YS9kcml2ZXJzL2RyaS9pOTE1L2ludGVsX21pcG1hcF90cmVlLmggfCAgICA4ICsKIHNyYy9tZXNh L2RyaXZlcnMvZHJpL2k5NjUvYnJ3X2NvbnRleHQuYyAgICAgICB8ICAxMTAgKy0KIHNyYy9tZXNh L2RyaXZlcnMvZHJpL2k5NjUvaW50ZWxfbWlwbWFwX3RyZWUuYyB8ICAgNjEgKwogc3JjL21lc2Ev ZHJpdmVycy9kcmkvaTk2NS9pbnRlbF9taXBtYXBfdHJlZS5oIHwgICAgOCArCiBzcmMvbWVzYS9k cml2ZXJzL2RyaS9pOTY1L2ludGVsX3NjcmVlbi5jICAgICAgfCAgMTA3ICstCiAxNyBmaWxlcyBj aGFuZ2VkLCAyNTk0IGluc2VydGlvbnMoKyksIDE5IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUg MTAwNjQ0IHNyYy9nbHgvZHJpM19jb21tb24uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9nbHgv ZHJpM19nbHguYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9nbHgvZHJpM19wcml2LmgKCmRpZmYg LS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKaW5kZXggZjk0YzliOS4uYjYxNThk OSAxMDA2NDQKLS0tIGEvY29uZmlndXJlLmFjCisrKyBiL2NvbmZpZ3VyZS5hYwpAQCAtMzgsNiAr MzgsOCBAQCBMSUJEUk1fTlZWSUVVWF9SRVFVSVJFRD0yLjQuMzMKIExJQkRSTV9OT1VWRUFVX1JF UVVJUkVEPSIyLjQuMzMgbGliZHJtID49IDIuNC40MSIKIExJQkRSTV9GUkVFRFJFTk9fUkVRVUlS RUQ9Mi40LjM5CiBEUkkyUFJPVE9fUkVRVUlSRUQ9Mi42CitEUkkzUFJPVE9fUkVRVUlSRUQ9MS4w CitMSUJVREVWX1JFUVVJUkVEPTE1MQogR0xQUk9UT19SRVFVSVJFRD0xLjQuMTQKIExJQkRSTV9Y T1JHX1JFUVVJUkVEPTIuNC4yNAogTElCS01TX1hPUkdfUkVRVUlSRUQ9MS4wLjAKQEAgLTgyMCwx MCArODIyLDEyIEBAIHh5ZXNubykKICAgICAgICAgZmkKICAgICAgICAgUEtHX0NIRUNLX01PRFVM RVMoW0RSSTJQUk9UT10sIFtkcmkycHJvdG8gPj0gJERSSTJQUk9UT19SRVFVSVJFRF0pCiAgICAg ICAgIEdMX1BDX1JFUV9QUklWPSIkR0xfUENfUkVRX1BSSVYgbGliZHJtID49ICRMSUJEUk1fUkVR VUlSRUQiCisgICAgICAgIFBLR19DSEVDS19NT0RVTEVTKFtEUkkzUFJPVE9dLCBbZHJpM3Byb3Rv ID49ICREUkkzUFJPVE9fUkVRVUlSRURdKQorICAgICAgICBQS0dfQ0hFQ0tfTU9EVUxFUyhbTElC VURFVl0sIFtsaWJ1ZGV2ID49ICRMSUJVREVWX1JFUVVJUkVEXSkKICAgICBmaQogCiAgICAgIyBm aW5kIHRoZSBEUkkgZGVwcyBmb3IgbGliR0wKLSAgICBkcmlfbW9kdWxlcz0ieDExIHhleHQgeGRh bWFnZSB4Zml4ZXMgeDExLXhjYiB4Y2ItZ2x4ID49IDEuOC4xIHhjYi1kcmkyID49IDEuOCIKKyAg ICBkcmlfbW9kdWxlcz0ieDExIHhleHQgeGRhbWFnZSB4Zml4ZXMgeDExLXhjYiB4Y2ItZ2x4ID49 IDEuOC4xIHhjYi1kcmkyID49IDEuOCB4Y2ItZHJpMyB4Y2Itc3luYyB4c2htZmVuY2UiCiAKICAg ICAjIGFkZCB4Zjg2dmlkbW9kZSBpZiBhdmFpbGFibGUKICAgICBQS0dfQ0hFQ0tfTU9EVUxFUyhb WEY4NlZJRE1PREVdLCBbeHhmODZ2bV0sIEhBVkVfWEY4NlZJRE1PREU9eWVzLCBIQVZFX1hGODZW SURNT0RFPW5vKQpAQCAtODMzLDggKzgzNyw4IEBAIHh5ZXNubykKIAogICAgIFBLR19DSEVDS19N T0RVTEVTKFtEUklHTF0sIFskZHJpX21vZHVsZXNdKQogICAgIEdMX1BDX1JFUV9QUklWPSIkR0xf UENfUkVRX1BSSVYgJGRyaV9tb2R1bGVzIgotICAgIFgxMV9JTkNMVURFUz0iJFgxMV9JTkNMVURF UyAkRFJJR0xfQ0ZMQUdTIgotICAgIEdMX0xJQl9ERVBTPSIkRFJJR0xfTElCUyIKKyAgICBYMTFf SU5DTFVERVM9IiRYMTFfSU5DTFVERVMgJERSSUdMX0NGTEFHUyAkTElCVURFVl9DRkxBR1MiCisg ICAgR0xfTElCX0RFUFM9IiREUklHTF9MSUJTICRMSUJVREVWX0xJQlMiCiAKICAgICAjIG5lZWQg RFJNIGxpYnMsICRQVEhSRUFEX0xJQlMsIGV0Yy4KICAgICBHTF9MSUJfREVQUz0iJEdMX0xJQl9E RVBTICRMSUJEUk1fTElCUyAtbG0gJFBUSFJFQURfTElCUyAkRExPUEVOX0xJQlMiCmRpZmYgLS1n aXQgYS9pbmNsdWRlL0dML2ludGVybmFsL2RyaV9pbnRlcmZhY2UuaCBiL2luY2x1ZGUvR0wvaW50 ZXJuYWwvZHJpX2ludGVyZmFjZS5oCmluZGV4IDQ4OTkzYjkuLmIwNmFkOGQgMTAwNjQ0Ci0tLSBh L2luY2x1ZGUvR0wvaW50ZXJuYWwvZHJpX2ludGVyZmFjZS5oCisrKyBiL2luY2x1ZGUvR0wvaW50 ZXJuYWwvZHJpX2ludGVyZmFjZS5oCkBAIC04Niw2ICs4NiwxMSBAQCB0eXBlZGVmIHN0cnVjdCBf X0RSSWRyaTJMb2FkZXJFeHRlbnNpb25SZWMJX19EUklkcmkyTG9hZGVyRXh0ZW5zaW9uOwogdHlw ZWRlZiBzdHJ1Y3QgX19EUkkyZmx1c2hFeHRlbnNpb25SZWMJX19EUkkyZmx1c2hFeHRlbnNpb247 CiB0eXBlZGVmIHN0cnVjdCBfX0RSSTJ0aHJvdHRsZUV4dGVuc2lvblJlYwlfX0RSSTJ0aHJvdHRs ZUV4dGVuc2lvbjsKIAorCit0eXBlZGVmIHN0cnVjdCBfX0RSSWRyaTNCdWZmZXJSZWMgICAgICAg ICAgICAgICBfX0RSSWRyaTNCdWZmZXI7Cit0eXBlZGVmIHN0cnVjdCBfX0RSSWRyaTNFeHRlbnNp b25SZWMgICAgICAgICAgICBfX0RSSWRyaTNFeHRlbnNpb247Cit0eXBlZGVmIHN0cnVjdCBfX0RS SWRyaTNMb2FkZXJFeHRlbnNpb25SZWMgICAgICBfX0RSSWRyaTNMb2FkZXJFeHRlbnNpb247CisK IC8qQH0qLwogCiAKQEAgLTk2Niw2ICs5NzEsMTU5IEBAIHN0cnVjdCBfX0RSSWRyaTJFeHRlbnNp b25SZWMgewogCiAKIC8qKgorICogRFJJMyBMb2FkZXIgZXh0ZW5zaW9uLgorICovCisKKyNkZWZp bmUgX19EUkkzX0RSSVZFUl9FWFRFTlNJT05TICJfX2RyaTNEcml2ZXJFeHRlbnNpb25zIgorCitl bnVtIF9fRFJJM2J1ZmZlclR5cGUgeworICAgX19EUkkzX0JVRkZFUl9CQUNLID0gMCwKKyAgIF9f RFJJM19CVUZGRVJfRlJPTlQgPSAxCit9OworCitzdHJ1Y3QgX19EUklkcmkzQnVmZmVyUmVjIHsK KyAgIHVuc2lnbmVkIGludCBzaXplOworICAgdW5zaWduZWQgaW50IHBpdGNoOworICAgdW5zaWdu ZWQgaW50IGNwcDsKKyAgIHVuc2lnbmVkIGludCBmbGFnczsKKyAgIHVuc2lnbmVkIGludCB3aWR0 aCwgaGVpZ2h0OworICAgZW51bSBfX0RSSTNidWZmZXJUeXBlIGJ1ZmZlcl90eXBlOworICAgdWlu dDMyX3QgcGl4bWFwOworICAgdWludDMyX3Qgc3luY19mZW5jZTsKKyAgIGludDMyX3QgKnNobV9m ZW5jZTsKKyAgIHZvaWQgKmRyaXZlclByaXZhdGU7Cit9OworCisjZGVmaW5lIF9fRFJJX0RSSTNf TE9BREVSICJEUklfRFJJM0xvYWRlciIKKyNkZWZpbmUgX19EUklfRFJJM19MT0FERVJfVkVSU0lP TiAxCisKK3N0cnVjdCBfX0RSSWRyaTNMb2FkZXJFeHRlbnNpb25SZWMgeworICAgIF9fRFJJZXh0 ZW5zaW9uIGJhc2U7CisKKyAgIGludCAoKmdldEJ1ZmZlcnMpKF9fRFJJZHJhd2FibGUgKmRyaURy YXdhYmxlLAorICAgICAgICAgICAgICAgICAgICAgaW50ICp3aWR0aCwgaW50ICpoZWlnaHQsCisg ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZm9ybWF0LAorICAgICAgICAgICAgICAg ICAgICAgdm9pZCAqbG9hZGVyUHJpdmF0ZSwKKyAgICAgICAgICAgICAgICAgICAgIGludCBuZWVk X2Zyb250LAorICAgICAgICAgICAgICAgICAgICAgaW50IG5lZWRfYmFjaywKKyAgICAgICAgICAg ICAgICAgICAgIF9fRFJJZHJpM0J1ZmZlciAqKmZyb250LAorICAgICAgICAgICAgICAgICAgICAg X19EUklkcmkzQnVmZmVyICoqYmFjayk7CisKKyAgICAvKioKKyAgICAgKiBGbHVzaCBwZW5kaW5n IGZyb250LWJ1ZmZlciByZW5kZXJpbmcKKyAgICAgKgorICAgICAqIEFueSByZW5kZXJpbmcgdGhh dCBoYXMgYmVlbiBwZXJmb3JtZWQgdG8gdGhlCisgICAgICogXGMgX19EUkkzX0JVRkZFUl9GQUtF X0ZST05UX0xFRlQgd2lsbCBiZSBmbHVzaGVkIHRvIHRoZQorICAgICAqIFxjIF9fRFJJM19CVUZG RVJfRlJPTlRfTEVGVC4KKyAgICAgKgorICAgICAqIFxwYXJhbSBkcmlEcmF3YWJsZSAgICBEcmF3 YWJsZSB3aG9zZSBmcm9udC1idWZmZXIgaXMgdG8gYmUgZmx1c2hlZAorICAgICAqIFxwYXJhbSBs b2FkZXJQcml2YXRlICBMb2FkZXIncyBwcml2YXRlIGRhdGEgdGhhdCB3YXMgcHJldmlvdXNseSBw YXNzZWQKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgaW50byBfX0RSSWRyaTJFeHRlbnNp b25SZWM6OmNyZWF0ZU5ld0RyYXdhYmxlCisgICAgICovCisgICAgdm9pZCAoKmZsdXNoRnJvbnRC dWZmZXIpKF9fRFJJZHJhd2FibGUgKmRyaURyYXdhYmxlLCB2b2lkICpsb2FkZXJQcml2YXRlKTsK K307CisKKy8qKgorICogRFJJMyBleHRlbnNpb24uCisgKi8KKworc3RydWN0IGdsX2NvbnRleHQ7 CitzdHJ1Y3QgZGRfZnVuY3Rpb25fdGFibGU7CisKK3R5cGVkZWYgX19EUklzY3JlZW4gKgorKCpf X0RSSWNyZWF0ZU5ld1NjcmVlbjIpKGludCBzY3JlZW4sIGludCBmZCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBfX0RSSWV4dGVuc2lvbiAqKmV4dGVuc2lvbnMsCisgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgX19EUklleHRlbnNpb24gKipkcml2ZXJfZXh0ZW5zaW9ucywK KyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX0RSSWNvbmZpZyAqKipkcml2ZXJfY29u ZmlncywKKyAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpsb2FkZXJQcml2YXRlKTsKKwor dHlwZWRlZiBfX0RSSWRyYXdhYmxlICoKKygqX19EUkljcmVhdGVOZXdEcmF3YWJsZSkoX19EUklz Y3JlZW4gKnNjcmVlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19EUkljb25m aWcgKmNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqbG9hZGVyUHJpdmF0 ZSk7CisKK3R5cGVkZWYgX19EUkljb250ZXh0ICoKKygqX19EUkljcmVhdGVOZXdDb250ZXh0KShf X0RSSXNjcmVlbiAqc2NyZWVuLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fRFJJ Y29uZmlnICpjb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgX19EUkljb250ZXh0ICpz aGFyZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqbG9hZGVyUHJpdmF0ZSk7CisK K3R5cGVkZWYgX19EUkljb250ZXh0ICoKKygqX19EUkljcmVhdGVDb250ZXh0QXR0cmlicykoX19E UklzY3JlZW4gKnNjcmVlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFwaSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19EUkljb25maWcgKmNvbmZpZywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19EUkljb250ZXh0ICpzaGFyZWQsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bV9hdHRyaWJzLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50MzJfdCAqYXR0cmlicywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgKmVycm9yLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB2b2lkICpsb2FkZXJQcml2YXRlKTsKKwordHlwZWRlZiB1bnNpZ25lZCBpbnQKKygq X19EUklnZXRBUElNYXNrKShfX0RSSXNjcmVlbiAqc2NyZWVuKTsKKwordHlwZWRlZiBfX0RSSWRy aTNCdWZmZXIgKgorKCpfX0RSSWRyaTNBbGxvY2F0ZUJ1ZmZlcikoX19EUklzY3JlZW4gKnNjcmVl biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBicHAsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgaGVpZ2h0KTsKKwordHlwZWRlZiB2b2lkCisoKl9fRFJJZHJpM1JlbGVhc2VCdWZmZXIp KF9fRFJJc2NyZWVuICpzY3JlZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIF9fRFJJZHJp M0J1ZmZlciAqYnVmZmVyKTsKKwordHlwZWRlZiBpbnQKKygqX19EUklkcmkzQnVmZmVyVG9GZCko X19EUklzY3JlZW4gKnNjcmVlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgX19EUklkcmkzQnVm ZmVyICpidWZmZXIpOworCit0eXBlZGVmIF9fRFJJZHJpM0J1ZmZlciAqCisoKl9fRFJJZHJpM0Zk VG9CdWZmZXIpKF9fRFJJc2NyZWVuICpzY3JlZW4sCisgICAgICAgICAgICAgICAgICAgICAgIGlu dCBmZCwgdW5zaWduZWQgaW50IGJwcCwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRo LCBpbnQgaGVpZ2h0LCBpbnQgc3RyaWRlLAorICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l ZCBpbnQgc2l6ZSk7CisKK3R5cGVkZWYgdWludDMyX3QgKgorKCpfX0RSSWRyaTNTdGFtcCkoX19E UklkcmF3YWJsZSAqZHJhd2FibGUpOworCisjZGVmaW5lIF9fRFJJX0RSSTMgICAgICAgICAgICAg ICJEUklfRFJJMyIKKyNkZWZpbmUgX19EUklfRFJJM19WRVJTSU9OICAgICAgMQorCitzdHJ1Y3Qg X19EUklkcmkzRXh0ZW5zaW9uUmVjIHsKKyAgIF9fRFJJZXh0ZW5zaW9uICAgICAgICAgICAgICAg YmFzZTsKKworICAgLyogQ29tbW9uIERSSSBmdW5jdGlvbnMsIHNoYXJlZCB3aXRoIERSSTIgKi8K KyAgIF9fRFJJY3JlYXRlTmV3U2NyZWVuMiAgICAgICAgY3JlYXRlTmV3U2NyZWVuMjsKKyAgIF9f RFJJY3JlYXRlTmV3RHJhd2FibGUgICAgICAgY3JlYXRlTmV3RHJhd2FibGU7CisgICBfX0RSSWNy ZWF0ZU5ld0NvbnRleHQgICAgICAgIGNyZWF0ZU5ld0NvbnRleHQ7CisgICBfX0RSSWNyZWF0ZUNv bnRleHRBdHRyaWJzICAgIGNyZWF0ZUNvbnRleHRBdHRyaWJzOworICAgX19EUklnZXRBUElNYXNr ICAgICAgICAgICAgICBnZXRBUElNYXNrOworCisgICAvKiBEUkkzLXNwZWNpZmljIGZ1bmN0aW9u cyovCisKKyAgIC8qIEFsbG9jYXRlIGNvbG9yIGJ1ZmZlciBmb3IgZnJvbnQvYmFjayBvZiB3aW5k b3dzIGFuZCBwaXhtYXBzCisgICAgKi8KKyAgIF9fRFJJZHJpM0FsbG9jYXRlQnVmZmVyICAgICAg YWxsb2NhdGVCdWZmZXI7CisKKyAgIC8qIFJlbGVhc2UgY29sb3IgYnVmZmVyCisgICAgKi8KKyAg IF9fRFJJZHJpM1JlbGVhc2VCdWZmZXIgICAgICAgcmVsZWFzZUJ1ZmZlcjsKKworICAgLyogR2l2 ZW4gYSBidWZmZXIsIHdyYXAgaXQgaW4gYSBETUEtQlVGIGZpbGUgZGVzY3JpcHRvcgorICAgICov CisgICBfX0RSSWRyaTNCdWZmZXJUb0ZkICAgICAgICAgIGJ1ZmZlclRvRmQ7CisKKyAgIC8qIEdp dmVuIGEgRE1BLUJVRiBmaWxlIGRlc2NyaXB0b3IsIGNvbnN0cnVjdCBhIHN1aXRhYmxlCisgICAg KiBjb2xvciBidWZmZXIKKyAgICAqLworICAgX19EUklkcmkzRmRUb0J1ZmZlciAgICAgICAgICBm ZFRvQnVmZmVyOworCisgICAvKiBBc2sgdGhlIGRyaXZlciBmb3IgYSBwb2ludGVyIHRvIGFuIGlu dGVnZXIgd2hpY2gKKyAgICAqIGNhbiBiZSBpbmNyZW1lbnRlZCB3aGVuIHRoZSBkcmF3YWJsZSBu ZWVkcyB0byBiZQorICAgICogcmV2YWxpZGF0ZWQKKyAgICAqLworICAgX19EUklkcmkzU3RhbXAg ICAgICAgICAgICAgICBzdGFtcDsKK307CisKKy8qKgogICogVGhpcyBleHRlbnNpb24gcHJvdmlk ZXMgZnVuY3Rpb25hbGl0eSB0byBlbmFibGUgdmFyaW91cyBFR0xJbWFnZQogICogZXh0ZW5zaW9u cy4KICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2dseC9NYWtlZmlsZS5hbSBiL3NyYy9nbHgvTWFrZWZp bGUuYW0KaW5kZXggZjAxNzA5Yi4uODU0MDI1ZCAxMDA2NDQKLS0tIGEvc3JjL2dseC9NYWtlZmls ZS5hbQorKysgYi9zcmMvZ2x4L01ha2VmaWxlLmFtCkBAIC05Miw2ICs5Miw4IEBAIGxpYmdseF9s YV9TT1VSQ0VTID0gXAogCSAgZ2x4aGFzaC5jIFwKIAkgIGRyaTJfZ2x4LmMgXAogCSAgZHJpMi5j IFwKKyAgICAgICAgICBkcmkzX2dseC5jIFwKKyAgICAgICAgICBkcmkzX2NvbW1vbi5jIFwKIAkg IGFwcGxlZ2xfZ2x4LmMKIAogR0xfTElCUyA9IFwKZGlmZiAtLWdpdCBhL3NyYy9nbHgvZHJpM19j b21tb24uYyBiL3NyYy9nbHgvZHJpM19jb21tb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi5jNzU4Zjk2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2dseC9kcmkzX2NvbW1v bi5jCkBAIC0wLDAgKzEsMTQ2IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTMgS2VpdGggUGFj a2FyZAorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUs IGFuZCBzZWxsIHRoaXMgc29mdHdhcmUgYW5kIGl0cworICogZG9jdW1lbnRhdGlvbiBmb3IgYW55 IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQKKyAq IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0 IGJvdGggdGhhdCBjb3B5cmlnaHQKKyAqIG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGlj ZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBhbmQKKyAqIHRoYXQgdGhlIG5h bWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXJzIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9y CisgKiBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJl IHdpdGhvdXQgc3BlY2lmaWMsCisgKiB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uICBUaGUgY29w eXJpZ2h0IGhvbGRlcnMgbWFrZSBubyByZXByZXNlbnRhdGlvbnMKKyAqIGFib3V0IHRoZSBzdWl0 YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVk ICJhcworICogaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAq IFRIRSBDT1BZUklHSFQgSE9MREVSUyBESVNDTEFJTSBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FS RCBUTyBUSElTIFNPRlRXQVJFLAorICogSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLCBJTiBOTworICogRVZFTlQgU0hBTEwgVEhF IENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNUIE9S CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNV TFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwKKyAqIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBB TiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIKKyAqIFRPUlRJT1VTIEFD VElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVS Rk9STUFOQ0UKKyAqIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworLyoKKyAqIFRoaXMgY29kZSBp cyBkZXJpdmVkIGZyb20gc3JjL2VnbC9kcml2ZXJzL2RyaTIvY29tbW9uLmMgd2hpY2gKKyAqIGNh cnJpZXMgdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQ6CisgKiAKKyAqIENvcHlyaWdodCDCqSAyMDEx IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwg ZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhp cyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3 YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBp bmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwg bW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9v ciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3 aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGlj ZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJh Z3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9y dGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklE RUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1Ig SU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgor ICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQK KyAqIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENP UFlSSUdIVAorICogSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBP VEhFUiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9S VCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9O IFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKKyAqIERFQUxJTkdTIElOIFRI RSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOgorICogICAgS3Jpc3RpYW4gSMO4Z3NiZXJnIDxr cmhAYml0cGxhbmV0Lm5ldD4KKyAqICAgIEJlbmphbWluIEZyYW56a2UgPGJlbmphbWluZnJhbnpr ZUBnb29nbGVtYWlsLmNvbT4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxz dHJpbmcuaD4KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+ CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8R0wvZ2wuaD4KKyNpbmNsdWRlICJnbGFw aS5oIgorI2luY2x1ZGUgImdseGNsaWVudC5oIgorI2luY2x1ZGUgInhmODZkcmkuaCIKKyNpbmNs dWRlIDxkbGZjbi5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+Cisj aW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyNpbmNsdWRlIDxz eXMvdGltZS5oPgorI2luY2x1ZGUgInhmODZkcm0uaCIKKyNpbmNsdWRlICJkcmlfY29tbW9uLmgi CisjaW5jbHVkZSAiZHJpM19wcml2LmgiCisKKyNkZWZpbmUgRFJJVkVSX01BUF9EUkkzX09OTFkK KyNpbmNsdWRlICJwY2lfaWRzL3BjaV9pZF9kcml2ZXJfbWFwLmgiCisKKyNpbmNsdWRlIDxsaWJ1 ZGV2Lmg+CisKK3N0YXRpYyBzdHJ1Y3QgdWRldl9kZXZpY2UgKgorZHJpM191ZGV2X2RldmljZV9u ZXdfZnJvbV9mZChzdHJ1Y3QgdWRldiAqdWRldiwgaW50IGZkKQoreworICAgc3RydWN0IHVkZXZf ZGV2aWNlICpkZXZpY2U7CisgICBzdHJ1Y3Qgc3RhdCBidWY7CisKKyAgIGlmIChmc3RhdChmZCwg JmJ1ZikgPCAwKSB7CisgICAgICBFcnJvck1lc3NhZ2VGKCJEUkkzOiBmYWlsZWQgdG8gc3RhdCBm ZCAlZCIsIGZkKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgfQorCisgICBkZXZpY2UgPSB1ZGV2 X2RldmljZV9uZXdfZnJvbV9kZXZudW0odWRldiwgJ2MnLCBidWYuc3RfcmRldik7CisgICBpZiAo ZGV2aWNlID09IE5VTEwpIHsKKyAgICAgIEVycm9yTWVzc2FnZUYoIkRSSTM6IGNvdWxkIG5vdCBj cmVhdGUgdWRldiBkZXZpY2UgZm9yIGZkICVkIiwgZmQpOworICAgICAgcmV0dXJuIE5VTEw7Cisg ICB9CisKKyAgIHJldHVybiBkZXZpY2U7Cit9CisKK2NoYXIgKgorZHJpM19nZXRfZHJpdmVyX2Zv cl9mZChpbnQgZmQpCit7CisgICBzdHJ1Y3QgdWRldiAqdWRldjsKKyAgIHN0cnVjdCB1ZGV2X2Rl dmljZSAqZGV2aWNlLCAqcGFyZW50OworICAgY29uc3QgY2hhciAqcGNpX2lkOworICAgY2hhciAq ZHJpdmVyID0gTlVMTDsKKyAgIGludCB2ZW5kb3JfaWQsIGNoaXBfaWQsIGksIGo7CisKKyAgIHVk ZXYgPSB1ZGV2X25ldygpOworICAgZGV2aWNlID0gZHJpM191ZGV2X2RldmljZV9uZXdfZnJvbV9m ZCh1ZGV2LCBmZCk7CisgICBpZiAoZGV2aWNlID09IE5VTEwpCisgICAgICByZXR1cm4gTlVMTDsK KworICAgcGFyZW50ID0gdWRldl9kZXZpY2VfZ2V0X3BhcmVudChkZXZpY2UpOworICAgaWYgKHBh cmVudCA9PSBOVUxMKSB7CisgICAgICBFcnJvck1lc3NhZ2VGKCJEUkkzOiBjb3VsZCBub3QgZ2V0 IHBhcmVudCBkZXZpY2UiKTsKKyAgICAgIGdvdG8gb3V0OworICAgfQorCisgICBwY2lfaWQgPSB1 ZGV2X2RldmljZV9nZXRfcHJvcGVydHlfdmFsdWUocGFyZW50LCAiUENJX0lEIik7CisgICBpZiAo cGNpX2lkID09IE5VTEwgfHwKKyAgICAgICBzc2NhbmYocGNpX2lkLCAiJXg6JXgiLCAmdmVuZG9y X2lkLCAmY2hpcF9pZCkgIT0gMikgeworICAgICAgRXJyb3JNZXNzYWdlRigiRFJJMzogbWFsZm9y bWVkIG9yIG5vIFBDSSBJRCIpOworICAgICAgZ290byBvdXQ7CisgICB9CisKKyAgIGZvciAoaSA9 IDA7IGRyaXZlcl9tYXBbaV0uZHJpdmVyOyBpKyspIHsKKyAgICAgIGlmICh2ZW5kb3JfaWQgIT0g ZHJpdmVyX21hcFtpXS52ZW5kb3JfaWQpCisgICAgICAgICBjb250aW51ZTsKKyAgICAgIGlmIChk cml2ZXJfbWFwW2ldLm51bV9jaGlwc19pZHMgPT0gLTEpIHsKKyAgICAgICAgIGRyaXZlciA9IHN0 cmR1cChkcml2ZXJfbWFwW2ldLmRyaXZlcik7CisgICAgICAgICBnb3RvIG91dDsKKyAgICAgIH0K KworICAgICAgZm9yIChqID0gMDsgaiA8IGRyaXZlcl9tYXBbaV0ubnVtX2NoaXBzX2lkczsgaisr KQorICAgICAgICAgaWYgKGRyaXZlcl9tYXBbaV0uY2hpcF9pZHNbal0gPT0gY2hpcF9pZCkgewor ICAgICAgICAgICAgZHJpdmVyID0gc3RyZHVwKGRyaXZlcl9tYXBbaV0uZHJpdmVyKTsKKyAgICAg ICAgICAgIGdvdG8gb3V0OworICAgICAgICAgfQorICAgfQorCitvdXQ6CisgICB1ZGV2X2Rldmlj ZV91bnJlZihkZXZpY2UpOworICAgdWRldl91bnJlZih1ZGV2KTsKKworICAgcmV0dXJuIGRyaXZl cjsKK30KZGlmZiAtLWdpdCBhL3NyYy9nbHgvZHJpM19nbHguYyBiL3NyYy9nbHgvZHJpM19nbHgu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDI3NWYyCi0tLSAvZGV2L251 bGwKKysrIGIvc3JjL2dseC9kcmkzX2dseC5jCkBAIC0wLDAgKzEsMTUzOSBAQAorLyoKKyAqIENv cHlyaWdodCDCqSAyMDEzIEtlaXRoIFBhY2thcmQKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwg Y29weSwgbW9kaWZ5LCBkaXN0cmlidXRlLCBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlIGFuZCBpdHMK KyAqIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhv dXQgZmVlLCBwcm92aWRlZCB0aGF0CisgKiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBl YXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0CisgKiBub3RpY2Ug YW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRh dGlvbiwgYW5kCisgKiB0aGF0IHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVycyBub3Qg YmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvcgorICogcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlz dHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLAorICogd3JpdHRlbiBw cmlvciBwZXJtaXNzaW9uLiAgVGhlIGNvcHlyaWdodCBob2xkZXJzIG1ha2Ugbm8gcmVwcmVzZW50 YXRpb25zCisgKiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55 IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMKKyAqIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3Ig aW1wbGllZCB3YXJyYW50eS4KKyAqCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUlMgRElTQ0xBSU0g QUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwKKyAqIElOQ0xVRElO RyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUywg SU4gTk8KKyAqIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9S IEFOWSBTUEVDSUFMLCBJTkRJUkVDVCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFO WSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsCisgKiBEQVRB IE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNF IE9SIE9USEVSCisgKiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5F Q1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFCisgKiBPRiBUSElTIFNPRlRXQVJFLgor ICovCisKKy8qCisgKiBQb3J0aW9ucyBvZiB0aGlzIGNvZGUgd2VyZSBhZGFwdGVkIGZyb20gZHJp Ml9nbHguYyB3aGljaCBjYXJyaWVzIHRoZQorICogZm9sbG93aW5nIGNvcHlyaWdodDoKKyAqCisg KiBDb3B5cmlnaHQgwqkgMjAwOCBSZWQgSGF0LCBJbmMuCisgKgorICogUGVybWlzc2lvbiBpcyBo ZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEK KyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZp bGVzICh0aGUgIlNvZnQtCisgKiB3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhv dXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0CisgKiBsaW1pdGF0aW9uIHRoZSByaWdo dHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLAorICog YW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25z IHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHByb3ZpZGVk IHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlKHMpIGFuZCB0aGlzIHBlcm1pc3Np b24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIG9mIHRoZSBTb2Z0LQorICogd2FyZSBhbmQg dGhhdCBib3RoIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlKHMpIGFuZCB0aGlzIHBlcm1pc3Np b24KKyAqIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLgorICoKKyAq IFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFO WSBLSU5ELCBFWFBSRVNTCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVE IFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTC0KKyAqIElUWSwgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVCBPRiBUSElSRCBQQVJUWQor ICogUklHSFRTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBIT0xE RVJTIElOQ0xVREVEIElOCisgKiBUSElTIE5PVElDRSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwg T1IgQU5ZIFNQRUNJQUwgSU5ESVJFQ1QgT1IgQ09OU0UtCisgKiBRVUVOVElBTCBEQU1BR0VTLCBP UiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLAorICog REFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElH RU5DRSBPUiBPVEhFUgorICogVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBD T05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1ItCisgKiBNQU5DRSBPRiBUSElTIFNPRlRX QVJFLgorICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1l IG9mIGEgY29weXJpZ2h0IGhvbGRlciBzaGFsbAorICogbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNp bmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsIHVzZSBvcgorICogb3RoZXIgZGVh bGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gYXV0aG9yaXphdGlv biBvZgorICogdGhlIGNvcHlyaWdodCBob2xkZXIuCisgKgorICogQXV0aG9yczoKKyAqICAgS3Jp c3RpYW4gSMO4Z3NiZXJnIChrcmhAcmVkaGF0LmNvbSkKKyAqLworCisjaWYgZGVmaW5lZChHTFhf RElSRUNUX1JFTkRFUklORykgJiYgIWRlZmluZWQoR0xYX1VTRV9BUFBMRUdMKQorCisjaW5jbHVk ZSA8WDExL1hsaWIuaD4KKyNpbmNsdWRlIDxYMTEvZXh0ZW5zaW9ucy9YZml4ZXMuaD4KKyNpbmNs dWRlIDxYMTEvWGxpYi14Y2IuaD4KKyNpbmNsdWRlIDxYMTEveHNobWZlbmNlLmg+CisjaW5jbHVk ZSA8eGNiL3hjYi5oPgorI2luY2x1ZGUgPHhjYi9kcmkzLmg+CisjaW5jbHVkZSA8eGNiL3ByZXNl bnQuaD4KKyNpbmNsdWRlIDxHTC9nbC5oPgorI2luY2x1ZGUgImdsYXBpLmgiCisjaW5jbHVkZSAi Z2x4Y2xpZW50LmgiCisjaW5jbHVkZSAieGY4NmRyaS5oIgorI2luY2x1ZGUgPGRsZmNuLmg+Cisj aW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvdHlw ZXMuaD4KKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5j bHVkZSAieGY4NmRybS5oIgorI2luY2x1ZGUgImRyaV9jb21tb24uaCIKKyNpbmNsdWRlICJkcmkz X3ByaXYuaCIKKworc3RhdGljIGNvbnN0IHN0cnVjdCBnbHhfY29udGV4dF92dGFibGUgZHJpM19j b250ZXh0X3Z0YWJsZTsKKworI2RlZmluZSBIQVNfU0JDIDAKKworI2lmIEhBU19TQkMKKworLyog Rm9yIFhDQidzIGhhbmRsaW5nIG9mIHVzdC9tc2Mvc2JjIGNvdW50ZXJzLCB3ZSBoYXZlIHRvIGhh bmQgaXQgdGhlIGhpZ2ggYW5kCisgKiBsb3cgaGFsdmVzIHNlcGFyYXRlbHkuICBUaGlzIGhlbHBz IHlvdSBzcGxpdCB0aGVtLgorICovCitzdGF0aWMgdm9pZAorc3BsaXRfY291bnRlcih1aW50NjRf dCBjb3VudGVyLCB1aW50MzJfdCAqaGksIHVpbnQzMl90ICpsbykKK3sKKyAgICpoaSA9IChjb3Vu dGVyID4+IDMyKTsKKyAgICpsbyA9IGNvdW50ZXIgJiAweGZmZmZmZmZmOworfQorCitzdGF0aWMg dWludDY0X3QKK21lcmdlX2NvdW50ZXIodWludDMyX3QgaGksIHVpbnQzMl90IGxvKQoreworICAg cmV0dXJuICgodWludDY0X3QpaGkgPDwgMzIpIHwgbG87Cit9CisjZW5kaWYgLyogSEFTX1NCQyAq LworCitzdGF0aWMgaW5saW5lIHZvaWQKK2RyaTNfZmVuY2VfcmVzZXQoeGNiX2Nvbm5lY3Rpb25f dCAqYywgX19EUklkcmkzQnVmZmVyICpidWZmZXIpIHsKKyAgIHhzaG1mZW5jZV9yZXNldChidWZm ZXItPnNobV9mZW5jZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZHJpM19mZW5jZV90cmln Z2VyKHhjYl9jb25uZWN0aW9uX3QgKmMsIF9fRFJJZHJpM0J1ZmZlciAqYnVmZmVyKSB7CisgICB4 Y2Jfc3luY190cmlnZ2VyX2ZlbmNlKGMsIGJ1ZmZlci0+c3luY19mZW5jZSk7Cit9CisKK3N0YXRp YyBpbmxpbmUgdm9pZAorZHJpM19mZW5jZV9hd2FpdCh4Y2JfY29ubmVjdGlvbl90ICpjLCBfX0RS SWRyaTNCdWZmZXIgKmJ1ZmZlcikgeworICAgeGNiX2ZsdXNoKGMpOworICAgeHNobWZlbmNlX2F3 YWl0KGJ1ZmZlci0+c2htX2ZlbmNlKTsKK30KKworc3RhdGljIHZvaWQKK2RyaTNfZGVzdHJveV9j b250ZXh0KHN0cnVjdCBnbHhfY29udGV4dCAqY29udGV4dCkKK3sKKyAgIHN0cnVjdCBkcmkzX2Nv bnRleHQgKnBjcCA9IChzdHJ1Y3QgZHJpM19jb250ZXh0ICopIGNvbnRleHQ7CisgICBzdHJ1Y3Qg ZHJpM19zY3JlZW4gKnBzYyA9IChzdHJ1Y3QgZHJpM19zY3JlZW4gKikgY29udGV4dC0+cHNjOwor CisgICBkcmlSZWxlYXNlRHJhd2FibGVzKCZwY3AtPmJhc2UpOworCisgICBmcmVlKChjaGFyICop IGNvbnRleHQtPmV4dGVuc2lvbnMpOworCisgICAoKnBzYy0+Y29yZS0+ZGVzdHJveUNvbnRleHQp IChwY3AtPmRyaUNvbnRleHQpOworCisgICBmcmVlKHBjcCk7Cit9CisKK3N0YXRpYyBCb29sCitk cmkzX2JpbmRfY29udGV4dChzdHJ1Y3QgZ2x4X2NvbnRleHQgKmNvbnRleHQsIHN0cnVjdCBnbHhf Y29udGV4dCAqb2xkLAorCQkgIEdMWERyYXdhYmxlIGRyYXcsIEdMWERyYXdhYmxlIHJlYWQpCit7 CisgICBzdHJ1Y3QgZHJpM19jb250ZXh0ICpwY3AgPSAoc3RydWN0IGRyaTNfY29udGV4dCAqKSBj b250ZXh0OworICAgc3RydWN0IGRyaTNfc2NyZWVuICpwc2MgPSAoc3RydWN0IGRyaTNfc2NyZWVu ICopIHBjcC0+YmFzZS5wc2M7CisgICBzdHJ1Y3QgZHJpM19kcmF3YWJsZSAqcGRyYXcsICpwcmVh ZDsKKworICAgcGRyYXcgPSAoc3RydWN0IGRyaTNfZHJhd2FibGUgKikgZHJpRmV0Y2hEcmF3YWJs ZShjb250ZXh0LCBkcmF3KTsKKyAgIHByZWFkID0gKHN0cnVjdCBkcmkzX2RyYXdhYmxlICopIGRy aUZldGNoRHJhd2FibGUoY29udGV4dCwgcmVhZCk7CisKKyAgIGRyaVJlbGVhc2VEcmF3YWJsZXMo JnBjcC0+YmFzZSk7CisKKyAgIGlmIChwZHJhdyA9PSBOVUxMIHx8IHByZWFkID09IE5VTEwpCisg ICAgICByZXR1cm4gR0xYQmFkRHJhd2FibGU7CisKKyAgIGlmICghKCpwc2MtPmNvcmUtPmJpbmRD b250ZXh0KSAocGNwLT5kcmlDb250ZXh0LAorCQkJCSAgIHBkcmF3LT5kcmlEcmF3YWJsZSwgcHJl YWQtPmRyaURyYXdhYmxlKSkKKyAgICAgIHJldHVybiBHTFhCYWRDb250ZXh0OworCisgICByZXR1 cm4gU3VjY2VzczsKK30KKworc3RhdGljIHZvaWQKK2RyaTNfdW5iaW5kX2NvbnRleHQoc3RydWN0 IGdseF9jb250ZXh0ICpjb250ZXh0LCBzdHJ1Y3QgZ2x4X2NvbnRleHQgKm5ldykKK3sKKyAgIHN0 cnVjdCBkcmkzX2NvbnRleHQgKnBjcCA9IChzdHJ1Y3QgZHJpM19jb250ZXh0ICopIGNvbnRleHQ7 CisgICBzdHJ1Y3QgZHJpM19zY3JlZW4gKnBzYyA9IChzdHJ1Y3QgZHJpM19zY3JlZW4gKikgcGNw LT5iYXNlLnBzYzsKKworICAgKCpwc2MtPmNvcmUtPnVuYmluZENvbnRleHQpIChwY3AtPmRyaUNv bnRleHQpOworfQorCitzdGF0aWMgc3RydWN0IGdseF9jb250ZXh0ICoKK2RyaTNfY3JlYXRlX2Nv bnRleHQoc3RydWN0IGdseF9zY3JlZW4gKmJhc2UsCisJCSAgICBzdHJ1Y3QgZ2x4X2NvbmZpZyAq Y29uZmlnX2Jhc2UsCisJCSAgICBzdHJ1Y3QgZ2x4X2NvbnRleHQgKnNoYXJlTGlzdCwgaW50IHJl bmRlclR5cGUpCit7CisgICBzdHJ1Y3QgZHJpM19jb250ZXh0ICpwY3AsICpwY3Bfc2hhcmVkOwor ICAgc3RydWN0IGRyaTNfc2NyZWVuICpwc2MgPSAoc3RydWN0IGRyaTNfc2NyZWVuICopIGJhc2U7 CisgICBfX0dMWERSSWNvbmZpZ1ByaXZhdGUgKmNvbmZpZyA9IChfX0dMWERSSWNvbmZpZ1ByaXZh dGUgKikgY29uZmlnX2Jhc2U7CisgICBfX0RSSWNvbnRleHQgKnNoYXJlZCA9IE5VTEw7CisKKyAg IGlmIChzaGFyZUxpc3QpIHsKKyAgICAgIC8qIElmIHRoZSBzaGFyZUxpc3QgY29udGV4dCBpcyBu b3QgYSBEUkkzIGNvbnRleHQsIHdlIGNhbm5vdCBwb3NzaWJseQorICAgICAgICogY3JlYXRlIGEg RFJJMyBjb250ZXh0IHRoYXQgc2hhcmVzIGl0LgorICAgICAgICovCisgICAgICBpZiAoc2hhcmVM aXN0LT52dGFibGUtPmRlc3Ryb3kgIT0gZHJpM19kZXN0cm95X2NvbnRleHQpIHsKKwkgcmV0dXJu IE5VTEw7CisgICAgICB9CisKKyAgICAgIHBjcF9zaGFyZWQgPSAoc3RydWN0IGRyaTNfY29udGV4 dCAqKSBzaGFyZUxpc3Q7CisgICAgICBzaGFyZWQgPSBwY3Bfc2hhcmVkLT5kcmlDb250ZXh0Owor ICAgfQorCisgICBwY3AgPSBjYWxsb2MoMSwgc2l6ZW9mICpwY3ApOworICAgaWYgKHBjcCA9PSBO VUxMKQorICAgICAgcmV0dXJuIE5VTEw7CisKKyAgIGlmICghZ2x4X2NvbnRleHRfaW5pdCgmcGNw LT5iYXNlLCAmcHNjLT5iYXNlLCAmY29uZmlnLT5iYXNlKSkgeworICAgICAgZnJlZShwY3ApOwor ICAgICAgcmV0dXJuIE5VTEw7CisgICB9CisKKyAgIHBjcC0+ZHJpQ29udGV4dCA9CisgICAgICAo KnBzYy0+ZHJpMy0+Y3JlYXRlTmV3Q29udGV4dCkgKHBzYy0+ZHJpU2NyZWVuLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWctPmRyaUNvbmZpZywgc2hhcmVkLCBw Y3ApOworCisgICBpZiAocGNwLT5kcmlDb250ZXh0ID09IE5VTEwpIHsKKyAgICAgIGZyZWUocGNw KTsKKyAgICAgIHJldHVybiBOVUxMOworICAgfQorCisgICBwY3AtPmJhc2UudnRhYmxlID0gJmRy aTNfY29udGV4dF92dGFibGU7CisKKyAgIHJldHVybiAmcGNwLT5iYXNlOworfQorCitzdGF0aWMg c3RydWN0IGdseF9jb250ZXh0ICoKK2RyaTNfY3JlYXRlX2NvbnRleHRfYXR0cmlicyhzdHJ1Y3Qg Z2x4X3NjcmVlbiAqYmFzZSwKKwkJCSAgICBzdHJ1Y3QgZ2x4X2NvbmZpZyAqY29uZmlnX2Jhc2Us CisJCQkgICAgc3RydWN0IGdseF9jb250ZXh0ICpzaGFyZUxpc3QsCisJCQkgICAgdW5zaWduZWQg bnVtX2F0dHJpYnMsCisJCQkgICAgY29uc3QgdWludDMyX3QgKmF0dHJpYnMsCisJCQkgICAgdW5z aWduZWQgKmVycm9yKQoreworICAgc3RydWN0IGRyaTNfY29udGV4dCAqcGNwID0gTlVMTDsKKyAg IHN0cnVjdCBkcmkzX2NvbnRleHQgKnBjcF9zaGFyZWQgPSBOVUxMOworICAgc3RydWN0IGRyaTNf c2NyZWVuICpwc2MgPSAoc3RydWN0IGRyaTNfc2NyZWVuICopIGJhc2U7CisgICBfX0dMWERSSWNv bmZpZ1ByaXZhdGUgKmNvbmZpZyA9IChfX0dMWERSSWNvbmZpZ1ByaXZhdGUgKikgY29uZmlnX2Jh c2U7CisgICBfX0RSSWNvbnRleHQgKnNoYXJlZCA9IE5VTEw7CisKKyAgIHVpbnQzMl90IG1pbm9y X3ZlciA9IDE7CisgICB1aW50MzJfdCBtYWpvcl92ZXIgPSAyOworICAgdWludDMyX3QgZmxhZ3Mg PSAwOworICAgdW5zaWduZWQgYXBpOworICAgaW50IHJlc2V0ID0gX19EUklfQ1RYX1JFU0VUX05P X05PVElGSUNBVElPTjsKKyAgIHVpbnQzMl90IGN0eF9hdHRyaWJzWzIgKiA1XTsKKyAgIHVuc2ln bmVkIG51bV9jdHhfYXR0cmlicyA9IDA7CisgICB1aW50MzJfdCByZW5kZXJfdHlwZTsKKworICAg LyogUmVtYXAgdGhlIEdMWCB0b2tlbnMgdG8gRFJJMiB0b2tlbnMuCisgICAgKi8KKyAgIGlmICgh ZHJpMl9jb252ZXJ0X2dseF9hdHRyaWJzKG51bV9hdHRyaWJzLCBhdHRyaWJzLAorCQkJCSAmbWFq b3JfdmVyLCAmbWlub3JfdmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJl bmRlcl90eXBlLCAmZmxhZ3MsICZhcGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmcmVzZXQsIGVycm9yKSkKKyAgICAgIGdvdG8gZXJyb3JfZXhpdDsKKworICAgLyogQ2hlY2sg dGhlIHJlbmRlclR5cGUgdmFsdWUgKi8KKyAgIGlmICghdmFsaWRhdGVfcmVuZGVyVHlwZV9hZ2Fp bnN0X2NvbmZpZyhjb25maWdfYmFzZSwgcmVuZGVyX3R5cGUpKQorICAgICAgIGdvdG8gZXJyb3Jf ZXhpdDsKKworICAgaWYgKHNoYXJlTGlzdCkgeworICAgICAgcGNwX3NoYXJlZCA9IChzdHJ1Y3Qg ZHJpM19jb250ZXh0ICopIHNoYXJlTGlzdDsKKyAgICAgIHNoYXJlZCA9IHBjcF9zaGFyZWQtPmRy aUNvbnRleHQ7CisgICB9CisKKyAgIHBjcCA9IGNhbGxvYygxLCBzaXplb2YgKnBjcCk7CisgICBp ZiAocGNwID09IE5VTEwpIHsKKyAgICAgICplcnJvciA9IF9fRFJJX0NUWF9FUlJPUl9OT19NRU1P Ulk7CisgICAgICBnb3RvIGVycm9yX2V4aXQ7CisgICB9CisKKyAgIGlmICghZ2x4X2NvbnRleHRf aW5pdCgmcGNwLT5iYXNlLCAmcHNjLT5iYXNlLCAmY29uZmlnLT5iYXNlKSkKKyAgICAgIGdvdG8g ZXJyb3JfZXhpdDsKKworICAgY3R4X2F0dHJpYnNbbnVtX2N0eF9hdHRyaWJzKytdID0gX19EUklf Q1RYX0FUVFJJQl9NQUpPUl9WRVJTSU9OOworICAgY3R4X2F0dHJpYnNbbnVtX2N0eF9hdHRyaWJz KytdID0gbWFqb3JfdmVyOworICAgY3R4X2F0dHJpYnNbbnVtX2N0eF9hdHRyaWJzKytdID0gX19E UklfQ1RYX0FUVFJJQl9NSU5PUl9WRVJTSU9OOworICAgY3R4X2F0dHJpYnNbbnVtX2N0eF9hdHRy aWJzKytdID0gbWlub3JfdmVyOworCisgICAvKiBPbmx5IHNlbmQgYSB2YWx1ZSB3aGVuIHRoZSBu b24tZGVmYXVsdCB2YWx1ZSBpcyByZXF1ZXN0ZWQuICBCeSBkb2luZworICAgICogdGhpcyB3ZSBk b24ndCBoYXZlIHRvIGNoZWNrIHRoZSBkcml2ZXIncyBEUkkzIHZlcnNpb24gYmVmb3JlIHNlbmRp bmcgdGhlCisgICAgKiBkZWZhdWx0IHZhbHVlLgorICAgICovCisgICBpZiAocmVzZXQgIT0gX19E UklfQ1RYX1JFU0VUX05PX05PVElGSUNBVElPTikgeworICAgICAgY3R4X2F0dHJpYnNbbnVtX2N0 eF9hdHRyaWJzKytdID0gX19EUklfQ1RYX0FUVFJJQl9SRVNFVF9TVFJBVEVHWTsKKyAgICAgIGN0 eF9hdHRyaWJzW251bV9jdHhfYXR0cmlicysrXSA9IHJlc2V0OworICAgfQorCisgICBpZiAoZmxh Z3MgIT0gMCkgeworICAgICAgY3R4X2F0dHJpYnNbbnVtX2N0eF9hdHRyaWJzKytdID0gX19EUklf Q1RYX0FUVFJJQl9GTEFHUzsKKworICAgICAgLyogVGhlIGN1cnJlbnQgX19EUklfQ1RYX0ZMQUdf KiB2YWx1ZXMgYXJlIGlkZW50aWNhbCB0byB0aGUKKyAgICAgICAqIEdMWF9DT05URVhUXypfQklU IHZhbHVlcy4KKyAgICAgICAqLworICAgICAgY3R4X2F0dHJpYnNbbnVtX2N0eF9hdHRyaWJzKytd ID0gZmxhZ3M7CisgICB9CisKKyAgIHBjcC0+ZHJpQ29udGV4dCA9CisgICAgICAoKnBzYy0+ZHJp My0+Y3JlYXRlQ29udGV4dEF0dHJpYnMpIChwc2MtPmRyaVNjcmVlbiwKKwkJCQkJICBhcGksCisJ CQkJCSAgY29uZmlnLT5kcmlDb25maWcsCisJCQkJCSAgc2hhcmVkLAorCQkJCQkgIG51bV9jdHhf YXR0cmlicyAvIDIsCisJCQkJCSAgY3R4X2F0dHJpYnMsCisJCQkJCSAgZXJyb3IsCisJCQkJCSAg cGNwKTsKKworICAgaWYgKHBjcC0+ZHJpQ29udGV4dCA9PSBOVUxMKQorICAgICAgZ290byBlcnJv cl9leGl0OworCisgICBwY3AtPmJhc2UudnRhYmxlID0gJmRyaTNfY29udGV4dF92dGFibGU7CisK KyAgIHJldHVybiAmcGNwLT5iYXNlOworCitlcnJvcl9leGl0OgorICAgZnJlZShwY3ApOworCisg ICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQKK2RyaTNfZGVzdHJveV9kcmF3YWJsZShf X0dMWERSSWRyYXdhYmxlICpiYXNlKQoreworICAgc3RydWN0IGRyaTNfc2NyZWVuICpwc2MgPSAo c3RydWN0IGRyaTNfc2NyZWVuICopIGJhc2UtPnBzYzsKKyAgIHN0cnVjdCBkcmkzX2RyYXdhYmxl ICpwZHJhdyA9IChzdHJ1Y3QgZHJpM19kcmF3YWJsZSAqKSBiYXNlOworCisgICAoKnBzYy0+Y29y ZS0+ZGVzdHJveURyYXdhYmxlKSAocGRyYXctPmRyaURyYXdhYmxlKTsKKworICAgZnJlZShwZHJh dyk7Cit9CisKK3N0YXRpYyBfX0dMWERSSWRyYXdhYmxlICoKK2RyaTNfY3JlYXRlX2RyYXdhYmxl KHN0cnVjdCBnbHhfc2NyZWVuICpiYXNlLCBYSUQgeERyYXdhYmxlLAorICAgICAgICAgICAgICAg ICAgICAgR0xYRHJhd2FibGUgZHJhd2FibGUsIHN0cnVjdCBnbHhfY29uZmlnICpjb25maWdfYmFz ZSkKK3sKKyAgIHN0cnVjdCBkcmkzX2RyYXdhYmxlICpwZHJhdzsKKyAgIHN0cnVjdCBkcmkzX3Nj cmVlbiAqcHNjID0gKHN0cnVjdCBkcmkzX3NjcmVlbiAqKSBiYXNlOworICAgX19HTFhEUkljb25m aWdQcml2YXRlICpjb25maWcgPSAoX19HTFhEUkljb25maWdQcml2YXRlICopIGNvbmZpZ19iYXNl OworICAgR0xpbnQgdmJsYW5rX21vZGUgPSBEUklfQ09ORl9WQkxBTktfREVGX0lOVEVSVkFMXzE7 CisKKyAgIHBkcmF3ID0gY2FsbG9jKDEsIHNpemVvZigqcGRyYXcpKTsKKyAgIGlmICghcGRyYXcp CisgICAgICByZXR1cm4gTlVMTDsKKworICAgcGRyYXctPmJhc2UuZGVzdHJveURyYXdhYmxlID0g ZHJpM19kZXN0cm95X2RyYXdhYmxlOworICAgcGRyYXctPmJhc2UueERyYXdhYmxlID0geERyYXdh YmxlOworICAgcGRyYXctPmJhc2UuZHJhd2FibGUgPSBkcmF3YWJsZTsKKyAgIHBkcmF3LT5iYXNl LnBzYyA9ICZwc2MtPmJhc2U7CisvLyAgIHBkcmF3LT5idWZmZXJDb3VudCA9IDA7CisgICBwZHJh dy0+c3dhcF9pbnRlcnZhbCA9IDE7IC8qIGRlZmF1bHQgbWF5IGJlIG92ZXJyaWRkZW4gYmVsb3cg Ki8KKyAgIHBkcmF3LT5oYXZlX2JhY2sgPSAwOworICAgcGRyYXctPmhhdmVfZmFrZV9mcm9udCA9 IDA7CisKKyAgIGlmIChwc2MtPmNvbmZpZykKKyAgICAgIHBzYy0+Y29uZmlnLT5jb25maWdRdWVy eWkocHNjLT5kcmlTY3JlZW4sCisJCQkJInZibGFua19tb2RlIiwgJnZibGFua19tb2RlKTsKKwor ICAgc3dpdGNoICh2YmxhbmtfbW9kZSkgeworICAgY2FzZSBEUklfQ09ORl9WQkxBTktfTkVWRVI6 CisgICBjYXNlIERSSV9DT05GX1ZCTEFOS19ERUZfSU5URVJWQUxfMDoKKyAgICAgIHBkcmF3LT5z d2FwX2ludGVydmFsID0gMDsKKyAgICAgIGJyZWFrOworICAgY2FzZSBEUklfQ09ORl9WQkxBTktf REVGX0lOVEVSVkFMXzE6CisgICBjYXNlIERSSV9DT05GX1ZCTEFOS19BTFdBWVNfU1lOQzoKKyAg IGRlZmF1bHQ6CisgICAgICBwZHJhdy0+c3dhcF9pbnRlcnZhbCA9IDE7CisgICAgICBicmVhazsK KyAgIH0KKworICAgKHZvaWQpIF9fZ2xYSW5pdGlhbGl6ZShwc2MtPmJhc2UuZHB5KTsKKworICAg LyogQ3JlYXRlIGEgbmV3IGRyYXdhYmxlICovCisgICBwZHJhdy0+ZHJpRHJhd2FibGUgPQorICAg ICAgKCpwc2MtPmRyaTMtPmNyZWF0ZU5ld0RyYXdhYmxlKSAocHNjLT5kcmlTY3JlZW4sCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWctPmRyaUNvbmZpZywgcGRy YXcpOworCisgICBpZiAoIXBkcmF3LT5kcmlEcmF3YWJsZSkgeworICAgICAgZnJlZShwZHJhdyk7 CisgICAgICByZXR1cm4gTlVMTDsKKyAgIH0KKworICAgLyoKKyAgICAqIE1ha2Ugc3VyZSBzZXJ2 ZXIgaGFzIHRoZSBzYW1lIHN3YXAgaW50ZXJ2YWwgd2UgZG8gZm9yIHRoZSBuZXcKKyAgICAqIGRy YXdhYmxlLgorICAgICovCisgICBpZiAocHNjLT52dGFibGUuc2V0U3dhcEludGVydmFsKQorICAg ICAgcHNjLT52dGFibGUuc2V0U3dhcEludGVydmFsKCZwZHJhdy0+YmFzZSwgcGRyYXctPnN3YXBf aW50ZXJ2YWwpOworCisgICByZXR1cm4gJnBkcmF3LT5iYXNlOworfQorCisjaWYgSEFTX1NCQwor c3RhdGljIGludAorZHJpM19kcmF3YWJsZV9nZXRfbXNjKHN0cnVjdCBnbHhfc2NyZWVuICpwc2Ms IF9fR0xYRFJJZHJhd2FibGUgKnBkcmF3LAorICAgICAgICAgICAgICAgICAgICAgIGludDY0X3Qg KnVzdCwgaW50NjRfdCAqbXNjLCBpbnQ2NF90ICpzYmMpCit7CisgICB4Y2JfY29ubmVjdGlvbl90 ICpjID0gWEdldFhDQkNvbm5lY3Rpb24ocGRyYXctPnBzYy0+ZHB5KTsKKyAgIHhjYl9kcmkyX2dl dF9tc2NfY29va2llX3QgZ2V0X21zY19jb29raWU7CisgICB4Y2JfZHJpMl9nZXRfbXNjX3JlcGx5 X3QgKmdldF9tc2NfcmVwbHk7CisKKyAgIGdldF9tc2NfY29va2llID0geGNiX2RyaTJfZ2V0X21z Y191bmNoZWNrZWQoYywgcGRyYXctPnhEcmF3YWJsZSk7CisgICBnZXRfbXNjX3JlcGx5ID0geGNi X2RyaTJfZ2V0X21zY19yZXBseShjLCBnZXRfbXNjX2Nvb2tpZSwgTlVMTCk7CisKKyAgIGlmICgh Z2V0X21zY19yZXBseSkKKyAgICAgIHJldHVybiAwOworCisgICAqdXN0ID0gbWVyZ2VfY291bnRl cihnZXRfbXNjX3JlcGx5LT51c3RfaGksIGdldF9tc2NfcmVwbHktPnVzdF9sbyk7CisgICAqbXNj ID0gbWVyZ2VfY291bnRlcihnZXRfbXNjX3JlcGx5LT5tc2NfaGksIGdldF9tc2NfcmVwbHktPm1z Y19sbyk7CisgICAqc2JjID0gbWVyZ2VfY291bnRlcihnZXRfbXNjX3JlcGx5LT5zYmNfaGksIGdl dF9tc2NfcmVwbHktPnNiY19sbyk7CisgICBmcmVlKGdldF9tc2NfcmVwbHkpOworCisgICByZXR1 cm4gMTsKK30KKworc3RhdGljIGludAorZHJpM193YWl0X2Zvcl9tc2MoX19HTFhEUklkcmF3YWJs ZSAqcGRyYXcsIGludDY0X3QgdGFyZ2V0X21zYywgaW50NjRfdCBkaXZpc29yLAorICAgICAgICAg ICAgICAgICAgaW50NjRfdCByZW1haW5kZXIsIGludDY0X3QgKnVzdCwgaW50NjRfdCAqbXNjLCBp bnQ2NF90ICpzYmMpCit7CisgICB4Y2JfY29ubmVjdGlvbl90ICpjID0gWEdldFhDQkNvbm5lY3Rp b24ocGRyYXctPnBzYy0+ZHB5KTsKKyAgIHhjYl9kcmkyX3dhaXRfbXNjX2Nvb2tpZV90IHdhaXRf bXNjX2Nvb2tpZTsKKyAgIHhjYl9kcmkyX3dhaXRfbXNjX3JlcGx5X3QgKndhaXRfbXNjX3JlcGx5 OworICAgdWludDMyX3QgdGFyZ2V0X21zY19oaSwgdGFyZ2V0X21zY19sbzsKKyAgIHVpbnQzMl90 IGRpdmlzb3JfaGksIGRpdmlzb3JfbG87CisgICB1aW50MzJfdCByZW1haW5kZXJfaGksIHJlbWFp bmRlcl9sbzsKKworICAgc3BsaXRfY291bnRlcih0YXJnZXRfbXNjLCAmdGFyZ2V0X21zY19oaSwg JnRhcmdldF9tc2NfbG8pOworICAgc3BsaXRfY291bnRlcihkaXZpc29yLCAmZGl2aXNvcl9oaSwg JmRpdmlzb3JfbG8pOworICAgc3BsaXRfY291bnRlcihyZW1haW5kZXIsICZyZW1haW5kZXJfaGks ICZyZW1haW5kZXJfbG8pOworCisgICB3YWl0X21zY19jb29raWUgPSB4Y2JfZHJpMl93YWl0X21z Y191bmNoZWNrZWQoYywgcGRyYXctPnhEcmF3YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRfbXNjX2hpLCB0YXJnZXRfbXNjX2xvLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpdmlzb3Jf aGksIGRpdmlzb3JfbG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcmVtYWluZGVyX2hpLCByZW1haW5kZXJfbG8pOworICAgd2FpdF9tc2NfcmVwbHkg PSB4Y2JfZHJpMl93YWl0X21zY19yZXBseShjLCB3YWl0X21zY19jb29raWUsIE5VTEwpOworCisg ICBpZiAoIXdhaXRfbXNjX3JlcGx5KQorICAgICAgcmV0dXJuIDA7CisKKyAgICp1c3QgPSBtZXJn ZV9jb3VudGVyKHdhaXRfbXNjX3JlcGx5LT51c3RfaGksIHdhaXRfbXNjX3JlcGx5LT51c3RfbG8p OworICAgKm1zYyA9IG1lcmdlX2NvdW50ZXIod2FpdF9tc2NfcmVwbHktPm1zY19oaSwgd2FpdF9t c2NfcmVwbHktPm1zY19sbyk7CisgICAqc2JjID0gbWVyZ2VfY291bnRlcih3YWl0X21zY19yZXBs eS0+c2JjX2hpLCB3YWl0X21zY19yZXBseS0+c2JjX2xvKTsKKyAgIGZyZWUod2FpdF9tc2NfcmVw bHkpOworCisgICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorZHJpM193YWl0X2Zvcl9zYmMo X19HTFhEUklkcmF3YWJsZSAqcGRyYXcsIGludDY0X3QgdGFyZ2V0X3NiYywgaW50NjRfdCAqdXN0 LAorICAgICAgICAgICAgICAgICAgaW50NjRfdCAqbXNjLCBpbnQ2NF90ICpzYmMpCit7CisgICB4 Y2JfY29ubmVjdGlvbl90ICpjID0gWEdldFhDQkNvbm5lY3Rpb24ocGRyYXctPnBzYy0+ZHB5KTsK KyAgIHhjYl9kcmkyX3dhaXRfc2JjX2Nvb2tpZV90IHdhaXRfc2JjX2Nvb2tpZTsKKyAgIHhjYl9k cmkyX3dhaXRfc2JjX3JlcGx5X3QgKndhaXRfc2JjX3JlcGx5OworICAgdWludDMyX3QgdGFyZ2V0 X3NiY19oaSwgdGFyZ2V0X3NiY19sbzsKKworICAgc3BsaXRfY291bnRlcih0YXJnZXRfc2JjLCAm dGFyZ2V0X3NiY19oaSwgJnRhcmdldF9zYmNfbG8pOworCisgICB3YWl0X3NiY19jb29raWUgPSB4 Y2JfZHJpMl93YWl0X3NiY191bmNoZWNrZWQoYywgcGRyYXctPnhEcmF3YWJsZSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRfc2JjX2hpLCB0 YXJnZXRfc2JjX2xvKTsKKyAgIHdhaXRfc2JjX3JlcGx5ID0geGNiX2RyaTJfd2FpdF9zYmNfcmVw bHkoYywgd2FpdF9zYmNfY29va2llLCBOVUxMKTsKKworICAgaWYgKCF3YWl0X3NiY19yZXBseSkK KyAgICAgIHJldHVybiAwOworCisgICAqdXN0ID0gbWVyZ2VfY291bnRlcih3YWl0X3NiY19yZXBs eS0+dXN0X2hpLCB3YWl0X3NiY19yZXBseS0+dXN0X2xvKTsKKyAgICptc2MgPSBtZXJnZV9jb3Vu dGVyKHdhaXRfc2JjX3JlcGx5LT5tc2NfaGksIHdhaXRfc2JjX3JlcGx5LT5tc2NfbG8pOworICAg KnNiYyA9IG1lcmdlX2NvdW50ZXIod2FpdF9zYmNfcmVwbHktPnNiY19oaSwgd2FpdF9zYmNfcmVw bHktPnNiY19sbyk7CisgICBmcmVlKHdhaXRfc2JjX3JlcGx5KTsKKworICAgcmV0dXJuIDE7Cit9 CisjZW5kaWYgLyogSEFTX1NCQyAqLworCitzdGF0aWMgX19EUkljb250ZXh0ICoKK2RyaTNfZ2V0 X2N1cnJlbnRfY29udGV4dCh2b2lkKQoreworICAgc3RydWN0IGdseF9jb250ZXh0ICpnYyA9IF9f Z2xYR2V0Q3VycmVudENvbnRleHQoKTsKKyAgIHN0cnVjdCBkcmkzX2NvbnRleHQgKmRyaTNDdHgg PSAoc3RydWN0IGRyaTNfY29udGV4dCAqKWdjOworCisgICByZXR1cm4gZHJpM0N0eCA/IGRyaTND dHgtPmRyaUNvbnRleHQgOiBOVUxMOworfQorCisvKioKKyAqIGRyaTNUaHJvdHRsZSAtIFJlcXVl c3QgZHJpdmVyIHRocm90dGxpbmcKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHVzZXMgdGhlIERSSTIg dGhyb3R0bGUgZXh0ZW5zaW9uIHRvIGdpdmUgdGhlCisgKiBkcml2ZXIgdGhlIG9wcG9ydHVuaXR5 IHRvIHRocm90dGxlIG9uIGZsdXNoIGZyb250LCBjb3B5c3ViYnVmZmVyCisgKiBhbmQgc3dhcGJ1 ZmZlcnMuCisgKi8KK3N0YXRpYyB2b2lkCitkcmkzX3Rocm90dGxlKHN0cnVjdCBkcmkzX3NjcmVl biAqcHNjLAorICAgICAgICAgICAgICBzdHJ1Y3QgZHJpM19kcmF3YWJsZSAqZHJhdywKKyAgICAg ICAgICAgICAgZW51bSBfX0RSSTJ0aHJvdHRsZVJlYXNvbiByZWFzb24pCit7CisgICBpZiAocHNj LT50aHJvdHRsZSkgeworICAgICAgX19EUkljb250ZXh0ICpjdHggPSBkcmkzX2dldF9jdXJyZW50 X2NvbnRleHQoKTsKKworICAgICAgcHNjLT50aHJvdHRsZS0+dGhyb3R0bGUoY3R4LCBkcmF3LT5k cmlEcmF3YWJsZSwgcmVhc29uKTsKKyAgIH0KK30KKworLyoqCisgKiBBc2tzIHRoZSBkcml2ZXIg dG8gZmx1c2ggYW55IHF1ZXVlZCB3b3JrIG5lY2Vzc2FyeSBmb3Igc2VyaWFsaXppbmcgd2l0aCB0 aGUKKyAqIFggY29tbWFuZCBzdHJlYW0sIGFuZCBvcHRpb25hbGx5IHRoZSBzbGlnaHRseSBtb3Jl IHN0cmljdCByZXF1aXJlbWVudCBvZgorICogZ2xGbHVzaCgpIGVxdWl2YWxlbmNlICh3aGljaCB3 b3VsZCByZXF1aXJlIGZsdXNoaW5nIGV2ZW4gaWYgbm90aGluZyBoYWQKKyAqIGJlZW4gZHJhd24g dG8gYSB3aW5kb3cgc3lzdGVtIGZyYW1lYnVmZmVyLCBmb3IgZXhhbXBsZSkuCisgKi8KK3N0YXRp YyB2b2lkCitkcmkzX2ZsdXNoKHN0cnVjdCBkcmkzX3NjcmVlbiAqcHNjLAorICAgICAgICAgICBf X0RSSWNvbnRleHQgKmN0eCwKKyAgICAgICAgICAgc3RydWN0IGRyaTNfZHJhd2FibGUgKmRyYXcs CisgICAgICAgICAgIHVuc2lnbmVkIGZsYWdzLAorICAgICAgICAgICBlbnVtIF9fRFJJMnRocm90 dGxlUmVhc29uIHRocm90dGxlX3JlYXNvbikKK3sKKyAgIGlmIChjdHggJiYgcHNjLT5mICYmIHBz Yy0+Zi0+YmFzZS52ZXJzaW9uID49IDQpIHsKKyAgICAgIHBzYy0+Zi0+Zmx1c2hfd2l0aF9mbGFn cyhjdHgsIGRyYXctPmRyaURyYXdhYmxlLCBmbGFncywgdGhyb3R0bGVfcmVhc29uKTsKKyAgIH0g ZWxzZSB7CisgICAgICBpZiAoZmxhZ3MgJiBfX0RSSTJfRkxVU0hfQ09OVEVYVCkKKyAgICAgICAg IGdsRmx1c2goKTsKKworICAgICAgaWYgKHBzYy0+ZikKKyAgICAgICAgIHBzYy0+Zi0+Zmx1c2go ZHJhdy0+ZHJpRHJhd2FibGUpOworCisgICAgICBkcmkzX3Rocm90dGxlKHBzYywgZHJhdywgdGhy b3R0bGVfcmVhc29uKTsKKyAgIH0KK30KKworc3RhdGljIHhjYl9nY29udGV4dF90CitkcmkzX2Ry YXdhYmxlX2djKHN0cnVjdCBkcmkzX2RyYXdhYmxlICpwcml2KQoreworICAgaWYgKCFwcml2LT5n YykgeworICAgICAgdWludDMyX3QgdjsKKyAgICAgIHhjYl9jb25uZWN0aW9uX3QgKmMgPSBYR2V0 WENCQ29ubmVjdGlvbihwcml2LT5iYXNlLnBzYy0+ZHB5KTsKKworICAgICAgdiA9IDA7CisgICAg ICB4Y2JfY3JlYXRlX2djKGMsCisgICAgICAgICAgICAgICAgICAgIChwcml2LT5nYyA9IHhjYl9n ZW5lcmF0ZV9pZChjKSksCisgICAgICAgICAgICAgICAgICAgIHByaXYtPmJhc2UueERyYXdhYmxl LAorICAgICAgICAgICAgICAgICAgICBYQ0JfR0NfR1JBUEhJQ1NfRVhQT1NVUkVTLAorICAgICAg ICAgICAgICAgICAgICAmdik7CisgICB9CisgICByZXR1cm4gcHJpdi0+Z2M7Cit9CisKK3N0YXRp YyBfX0RSSWRyaTNCdWZmZXIgKgorZHJpM19iYWNrX2J1ZmZlcihzdHJ1Y3QgZHJpM19kcmF3YWJs ZSAqcHJpdikKK3sKKyAgIHJldHVybiBwcml2LT5idWZmZXJzW19fRFJJM19CVUZGRVJfQkFDS107 Cit9CisKK3N0YXRpYyBfX0RSSWRyaTNCdWZmZXIgKgorZHJpM19mYWtlX2Zyb250X2J1ZmZlcihz dHJ1Y3QgZHJpM19kcmF3YWJsZSAqcHJpdikKK3sKKyAgIHJldHVybiBwcml2LT5idWZmZXJzW19f RFJJM19CVUZGRVJfRlJPTlRdOworfQorCitzdGF0aWMgdm9pZAorZHJpM19jb3B5X2FyZWEgKHhj Yl9jb25uZWN0aW9uX3QgKmMgIC8qKjwgKi8sCisgICAgICAgICAgICAgICAgeGNiX2RyYXdhYmxl X3QgICAgc3JjX2RyYXdhYmxlICAvKio8ICovLAorICAgICAgICAgICAgICAgIHhjYl9kcmF3YWJs ZV90ICAgIGRzdF9kcmF3YWJsZSAgLyoqPCAqLywKKyAgICAgICAgICAgICAgICB4Y2JfZ2NvbnRl eHRfdCAgICBnYyAgLyoqPCAqLywKKyAgICAgICAgICAgICAgICBpbnQxNl90ICAgICAgICAgICBz cmNfeCAgLyoqPCAqLywKKyAgICAgICAgICAgICAgICBpbnQxNl90ICAgICAgICAgICBzcmNfeSAg LyoqPCAqLywKKyAgICAgICAgICAgICAgICBpbnQxNl90ICAgICAgICAgICBkc3RfeCAgLyoqPCAq LywKKyAgICAgICAgICAgICAgICBpbnQxNl90ICAgICAgICAgICBkc3RfeSAgLyoqPCAqLywKKyAg ICAgICAgICAgICAgICB1aW50MTZfdCAgICAgICAgICB3aWR0aCAgLyoqPCAqLywKKyAgICAgICAg ICAgICAgICB1aW50MTZfdCAgICAgICAgICBoZWlnaHQgIC8qKjwgKi8pCit7CisgICB4Y2Jfdm9p ZF9jb29raWVfdCBjb29raWU7CisKKyAgIGNvb2tpZSA9IHhjYl9jb3B5X2FyZWFfY2hlY2tlZChj LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19kcmF3YWJsZSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RfZHJhd2FibGUsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZ2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3JjX3gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3ksCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0X3gsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZHN0X3ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg d2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0KTsKKyAgIHhj Yl9kaXNjYXJkX3JlcGx5KGMsIGNvb2tpZS5zZXF1ZW5jZSk7Cit9CisKK3N0YXRpYyB2b2lkCitf ZHJpM19jb3B5X3N1Yl9idWZmZXIoX19HTFhEUklkcmF3YWJsZSAqcGRyYXcsIGludCB4LCBpbnQg eSwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAorICAgICAg ICAgICAgICAgICAgICAgICBlbnVtIF9fRFJJMnRocm90dGxlUmVhc29uIHJlYXNvbiwgQm9vbCBm bHVzaCkKK3sKKyAgIHN0cnVjdCBkcmkzX2RyYXdhYmxlICpwcml2ID0gKHN0cnVjdCBkcmkzX2Ry YXdhYmxlICopIHBkcmF3OworICAgc3RydWN0IGRyaTNfc2NyZWVuICpwc2MgPSAoc3RydWN0IGRy aTNfc2NyZWVuICopIHBkcmF3LT5wc2M7CisgICB4Y2JfY29ubmVjdGlvbl90ICAgICAqYyA9IFhH ZXRYQ0JDb25uZWN0aW9uKHByaXYtPmJhc2UucHNjLT5kcHkpOworICAgX19EUkljb250ZXh0ICpj dHggPSBkcmkzX2dldF9jdXJyZW50X2NvbnRleHQoKTsKKyAgIF9fRFJJZHJpM0J1ZmZlciAqYmFj ayA9IGRyaTNfYmFja19idWZmZXIocHJpdik7CisKKyAgIHVuc2lnbmVkIGZsYWdzOworCisgICAv KiBDaGVjayB3ZSBoYXZlIHRoZSByaWdodCBhdHRhY2htZW50cyAqLworICAgaWYgKCFwcml2LT5o YXZlX2JhY2sgfHwgcHJpdi0+aXNfcGl4bWFwKQorICAgICAgcmV0dXJuOworCisgICBmbGFncyA9 IF9fRFJJMl9GTFVTSF9EUkFXQUJMRTsKKyAgIGlmIChmbHVzaCkKKyAgICAgIGZsYWdzIHw9IF9f RFJJMl9GTFVTSF9DT05URVhUOworICAgZHJpM19mbHVzaChwc2MsIGN0eCwgcHJpdiwgZmxhZ3Ms IF9fRFJJMl9USFJPVFRMRV9TV0FQQlVGRkVSKTsKKworICAgeSA9IHByaXYtPmhlaWdodCAtIHkg LSBoZWlnaHQ7CisKKyAgIGRyaTNfZmVuY2VfcmVzZXQoYywgYmFjayk7CisgICBkcmkzX2NvcHlf YXJlYShjLAorICAgICAgICAgICAgICAgICAgZHJpM19iYWNrX2J1ZmZlcihwcml2KS0+cGl4bWFw LAorICAgICAgICAgICAgICAgICAgcHJpdi0+YmFzZS54RHJhd2FibGUsCisgICAgICAgICAgICAg ICAgICBkcmkzX2RyYXdhYmxlX2djKHByaXYpLAorICAgICAgICAgICAgICAgICAgeCwgeSwgeCwg eSwgd2lkdGgsIGhlaWdodCk7CisgICBkcmkzX2ZlbmNlX3RyaWdnZXIoYywgYmFjayk7CisgICAv KiBSZWZyZXNoIHRoZSBmYWtlIGZyb250IChpZiBwcmVzZW50KSBhZnRlciB3ZSBqdXN0IGRhbWFn ZWQgdGhlIHJlYWwKKyAgICAqIGZyb250LgorICAgICovCisgICBpZiAocHJpdi0+aGF2ZV9mYWtl X2Zyb250KSB7CisgICAgICBkcmkzX2ZlbmNlX3Jlc2V0KGMsIGRyaTNfZmFrZV9mcm9udF9idWZm ZXIocHJpdikpOworICAgICAgZHJpM19jb3B5X2FyZWEoYywKKyAgICAgICAgICAgICAgICAgICAg IGRyaTNfYmFja19idWZmZXIocHJpdiktPnBpeG1hcCwKKyAgICAgICAgICAgICAgICAgICAgIGRy aTNfZmFrZV9mcm9udF9idWZmZXIocHJpdiktPnBpeG1hcCwKKyAgICAgICAgICAgICAgICAgICAg IGRyaTNfZHJhd2FibGVfZ2MocHJpdiksCisgICAgICAgICAgICAgICAgICAgICB4LCB5LCB4LCB5 LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgIGRyaTNfZmVuY2VfdHJpZ2dlcihjLCBkcmkzX2Zha2Vf ZnJvbnRfYnVmZmVyKHByaXYpKTsKKyAgICAgIGRyaTNfZmVuY2VfYXdhaXQoYywgZHJpM19mYWtl X2Zyb250X2J1ZmZlcihwcml2KSk7CisgICB9CisgICBkcmkzX2ZlbmNlX2F3YWl0KGMsIGJhY2sp OworfQorCitzdGF0aWMgdm9pZAorZHJpM19jb3B5X3N1Yl9idWZmZXIoX19HTFhEUklkcmF3YWJs ZSAqcGRyYXcsIGludCB4LCBpbnQgeSwKKwkJICBpbnQgd2lkdGgsIGludCBoZWlnaHQsIEJvb2wg Zmx1c2gpCit7CisgICBfZHJpM19jb3B5X3N1Yl9idWZmZXIocGRyYXcsIHgsIHksIHdpZHRoLCBo ZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgX19EUkkyX1RIUk9UVExFX0NPUFlTVUJC VUZGRVIsIGZsdXNoKTsKK30KKworCitzdGF0aWMgdm9pZAorZHJpM19jb3B5X2RyYXdhYmxlKHN0 cnVjdCBkcmkzX2RyYXdhYmxlICpwcml2LCBEcmF3YWJsZSBkZXN0LCBEcmF3YWJsZSBzcmMpCit7 CisgICBzdHJ1Y3QgZHJpM19zY3JlZW4gKnBzYyA9IChzdHJ1Y3QgZHJpM19zY3JlZW4gKikgcHJp di0+YmFzZS5wc2M7CisgICB4Y2JfY29ubmVjdGlvbl90ICAgICAqYyA9IFhHZXRYQ0JDb25uZWN0 aW9uKHByaXYtPmJhc2UucHNjLT5kcHkpOworCisgICBpZiAocHNjLT5mKQorICAgICAgKCpwc2Mt PmYtPmZsdXNoKSAocHJpdi0+ZHJpRHJhd2FibGUpOworCisgICBkcmkzX2NvcHlfYXJlYShjLAor ICAgICAgICAgICAgICAgICAgc3JjLCBkZXN0LAorICAgICAgICAgICAgICAgICAgZHJpM19kcmF3 YWJsZV9nYyhwcml2KSwKKyAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDAsIHByaXYtPndpZHRo LCBwcml2LT5oZWlnaHQpOworfQorCitzdGF0aWMgdm9pZAorZHJpM193YWl0X3goc3RydWN0IGds eF9jb250ZXh0ICpnYykKK3sKKyAgIHN0cnVjdCBkcmkzX2RyYXdhYmxlICpwcml2ID0gKHN0cnVj dCBkcmkzX2RyYXdhYmxlICopCisgICAgICBHZXRHTFhEUklEcmF3YWJsZShnYy0+Y3VycmVudERw eSwgZ2MtPmN1cnJlbnREcmF3YWJsZSk7CisKKyAgIGlmIChwcml2ID09IE5VTEwgfHwgIXByaXYt PmhhdmVfZmFrZV9mcm9udCkKKyAgICAgIHJldHVybjsKKworICAgZHJpM19jb3B5X2RyYXdhYmxl KHByaXYsIGRyaTNfZmFrZV9mcm9udF9idWZmZXIocHJpdiktPnBpeG1hcCwgcHJpdi0+YmFzZS54 RHJhd2FibGUpOworfQorCitzdGF0aWMgdm9pZAorZHJpM193YWl0X2dsKHN0cnVjdCBnbHhfY29u dGV4dCAqZ2MpCit7CisgICBzdHJ1Y3QgZHJpM19kcmF3YWJsZSAqcHJpdiA9IChzdHJ1Y3QgZHJp M19kcmF3YWJsZSAqKQorICAgICAgR2V0R0xYRFJJRHJhd2FibGUoZ2MtPmN1cnJlbnREcHksIGdj LT5jdXJyZW50RHJhd2FibGUpOworCisgICBpZiAocHJpdiA9PSBOVUxMIHx8ICFwcml2LT5oYXZl X2Zha2VfZnJvbnQpCisgICAgICByZXR1cm47CisKKyAgIGRyaTNfY29weV9kcmF3YWJsZShwcml2 LCBwcml2LT5iYXNlLnhEcmF3YWJsZSwgZHJpM19mYWtlX2Zyb250X2J1ZmZlcihwcml2KS0+cGl4 bWFwKTsKK30KKworLyoqCisgKiBDYWxsZWQgYnkgdGhlIGRyaXZlciB3aGVuIGl0IG5lZWRzIHRv IHVwZGF0ZSB0aGUgcmVhbCBmcm9udCBidWZmZXIgd2l0aCB0aGUKKyAqIGNvbnRlbnRzIG9mIGl0 cyBmYWtlIGZyb250IGJ1ZmZlci4KKyAqLworc3RhdGljIHZvaWQKK2RyaTNfZmx1c2hfZnJvbnRf YnVmZmVyKF9fRFJJZHJhd2FibGUgKmRyaURyYXdhYmxlLCB2b2lkICpsb2FkZXJQcml2YXRlKQor eworICAgc3RydWN0IGdseF9jb250ZXh0ICpnYzsKKyAgIHN0cnVjdCBkcmkzX2RyYXdhYmxlICpw ZHJhdyA9IGxvYWRlclByaXZhdGU7CisgICBzdHJ1Y3QgZHJpM19zY3JlZW4gKnBzYzsKKworICAg aWYgKCFwZHJhdykKKyAgICAgIHJldHVybjsKKworICAgaWYgKCFwZHJhdy0+YmFzZS5wc2MpCisg ICAgICByZXR1cm47CisKKyAgIHBzYyA9IChzdHJ1Y3QgZHJpM19zY3JlZW4gKikgcGRyYXctPmJh c2UucHNjOworCisgICAodm9pZCkgX19nbFhJbml0aWFsaXplKHBzYy0+YmFzZS5kcHkpOworCisg ICBnYyA9IF9fZ2xYR2V0Q3VycmVudENvbnRleHQoKTsKKworICAgZHJpM190aHJvdHRsZShwc2Ms IHBkcmF3LCBfX0RSSTJfVEhST1RUTEVfRkxVU0hGUk9OVCk7CisKKyAgIGRyaTNfd2FpdF9nbChn Yyk7Cit9CisKK3N0YXRpYyBfX0RSSWRyaTNCdWZmZXIgKgorZHJpM19hbGxvY19yZW5kZXJfYnVm ZmVyKHN0cnVjdCBnbHhfc2NyZWVuICpnbHhfc2NyZWVuLCBEcmF3YWJsZSBkcmF3LCB1bnNpZ25l ZCBpbnQgZm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBkZXB0aCkKK3sKKyAgIHN0 cnVjdCBkcmkzX3NjcmVlbiAqcHNjID0gKHN0cnVjdCBkcmkzX3NjcmVlbiAqKSBnbHhfc2NyZWVu OworICAgRGlzcGxheSAqZHB5ID0gZ2x4X3NjcmVlbi0+ZHB5OworICAgX19EUklkcmkzQnVmZmVy ICpidWZmZXI7CisgICB4Y2JfY29ubmVjdGlvbl90ICpjID0gWEdldFhDQkNvbm5lY3Rpb24oZHB5 KTsKKyAgIHhjYl9waXhtYXBfdCBwaXhtYXA7CisgICB4Y2Jfc3luY19mZW5jZV90IHN5bmNfZmVu Y2U7CisgICBpbnQzMl90ICpzaG1fZmVuY2U7CisgICBpbnQgYnVmZmVyX2ZkLCBmZW5jZV9mZDsK KworICAgZmVuY2VfZmQgPSB4c2htZmVuY2VfYWxsb2Nfc2htKCk7CisgICBpZiAoZmVuY2VfZmQg PCAwKQorICAgICAgcmV0dXJuIE5VTEw7CisgICBzaG1fZmVuY2UgPSB4c2htZmVuY2VfbWFwX3No bShmZW5jZV9mZCk7CisgICBpZiAoc2htX2ZlbmNlID09IE5VTEwpCisgICAgICBnb3RvIG5vX3No bV9mZW5jZTsKKworICAgYnVmZmVyID0gKCpwc2MtPmRyaTMtPmFsbG9jYXRlQnVmZmVyKSAocHNj LT5kcmlTY3JlZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm b3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCk7CisgICBp ZiAoYnVmZmVyID09IE5VTEwpCisgICAgICBnb3RvIG5vX2J1ZmZlcjsKKworICAgYnVmZmVyX2Zk ID0gKCpwc2MtPmRyaTMtPmJ1ZmZlclRvRmQpKHBzYy0+ZHJpU2NyZWVuLCBidWZmZXIpOworICAg aWYgKGJ1ZmZlcl9mZCA8IDApCisgICAgICBnb3RvIG5vX2J1ZmZlcl9mZDsKKworICAgeGNiX2Ry aTNfcGl4bWFwX2Zyb21fYnVmZmVyKGMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KHBpeG1hcCA9IHhjYl9nZW5lcmF0ZV9pZChjKSksCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZHJhdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXItPnNpemUs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsIGhlaWdodCwgYnVmZmVyLT5w aXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXB0aCwgYnVmZmVyLT5jcHAg KiA4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl9mZCk7CisKKyAgIHhj Yl9kcmkzX2ZlbmNlX2Zyb21fZmQoYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcGl4bWFw LAorICAgICAgICAgICAgICAgICAgICAgICAgICAoc3luY19mZW5jZSA9IHhjYl9nZW5lcmF0ZV9p ZChjKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLAorICAgICAgICAgICAgICAg ICAgICAgICAgICBmZW5jZV9mZCk7CisKKyAgIGJ1ZmZlci0+cGl4bWFwID0gcGl4bWFwOworICAg YnVmZmVyLT5zeW5jX2ZlbmNlID0gc3luY19mZW5jZTsKKyAgIGJ1ZmZlci0+c2htX2ZlbmNlID0g c2htX2ZlbmNlOworICAgYnVmZmVyLT53aWR0aCA9IHdpZHRoOworICAgYnVmZmVyLT5oZWlnaHQg PSBoZWlnaHQ7CisgICByZXR1cm4gYnVmZmVyOworICAgCitub19idWZmZXJfZmQ6CisgICAoKnBz Yy0+ZHJpMy0+cmVsZWFzZUJ1ZmZlcikocHNjLT5kcmlTY3JlZW4sIGJ1ZmZlcik7Citub19idWZm ZXI6CisgICB4c2htZmVuY2VfdW5tYXBfc2htKHNobV9mZW5jZSk7Citub19zaG1fZmVuY2U6Cisg ICBjbG9zZShmZW5jZV9mZCk7CisgICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQKK2Ry aTNfZnJlZV9yZW5kZXJfYnVmZmVyKHN0cnVjdCBkcmkzX2RyYXdhYmxlICpwZHJhdywgX19EUklk cmkzQnVmZmVyICpidWZmZXIpCit7CisgICBzdHJ1Y3QgZHJpM19zY3JlZW4gICAqcHNjID0gKHN0 cnVjdCBkcmkzX3NjcmVlbiAqKSBwZHJhdy0+YmFzZS5wc2M7CisgICB4Y2JfY29ubmVjdGlvbl90 ICAgICAqYyA9IFhHZXRYQ0JDb25uZWN0aW9uKHBkcmF3LT5iYXNlLnBzYy0+ZHB5KTsKKworICAg eGNiX2ZyZWVfcGl4bWFwKGMsIGJ1ZmZlci0+cGl4bWFwKTsKKyAgIHhjYl9zeW5jX2Rlc3Ryb3lf ZmVuY2UoYywgYnVmZmVyLT5zeW5jX2ZlbmNlKTsKKyAgIHhzaG1mZW5jZV91bm1hcF9zaG0oYnVm ZmVyLT5zaG1fZmVuY2UpOworICAgKCpwc2MtPmRyaTMtPnJlbGVhc2VCdWZmZXIpKHBzYy0+ZHJp U2NyZWVuLCBidWZmZXIpOworfQorCitzdGF0aWMgaW50CitkcmkzX3VwZGF0ZV9kcmF3YWJsZShf X0RSSWRyYXdhYmxlICpkcmlEcmF3YWJsZSwgdm9pZCAqbG9hZGVyUHJpdmF0ZSkKK3sKKyAgIHN0 cnVjdCBkcmkzX2RyYXdhYmxlICpwcml2ID0gbG9hZGVyUHJpdmF0ZTsKKyAgIHhjYl9jb25uZWN0 aW9uX3QgICAgICpjID0gWEdldFhDQkNvbm5lY3Rpb24ocHJpdi0+YmFzZS5wc2MtPmRweSk7CisK KyAgIC8qIEZpcnN0IHRpbWUgdGhyb3VnaCwgZ28gZ2V0IHRoZSBjdXJyZW50IGRyYXdhYmxlIGdl b21ldHJ5CisgICAgKi8KKyAgIGlmIChwcml2LT53aWR0aCA9PSAwIHx8IHByaXYtPmhlaWdodCA9 PSAwIHx8IHByaXYtPmRlcHRoID09IDApIHsKKyAgICAgIHhjYl9nZXRfZ2VvbWV0cnlfY29va2ll X3QgICAgICAgICAgICAgICAgIGdlb21fY29va2llOworICAgICAgeGNiX2dldF9nZW9tZXRyeV9y ZXBseV90ICAgICAgICAgICAgICAgICAgKmdlb21fcmVwbHk7CisgICAgICBzdHJ1Y3QgZHJpM19z Y3JlZW4gICAgICAgICAgICAgICAgICAgICAgICAqcHNjOworICAgICAgeGNiX3ZvaWRfY29va2ll X3QgICAgICAgICAgICAgICAgICAgICAgICAgY29va2llOworICAgICAgeGNiX2dlbmVyaWNfZXJy b3JfdCAgICAgICAgICAgICAgICAgICAgICAgKmVycm9yOworCisgICAgICBjb29raWUgPSB4Y2Jf cHJlc2VudF9zZWxlY3RfaW5wdXRfY2hlY2tlZChjLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKHByaXYtPmVpZCA9IHhjYl9nZW5lcmF0ZV9pZChjKSks CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2LT5i YXNlLnhEcmF3YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFhDQl9QUkVTRU5UX0VWRU5UX01BU0tfQ09ORklHVVJFX05PVElGWXwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDQl9QUkVTRU5UX0VWRU5U X01BU0tfSURMRV9OT1RJRlkpOworICAgICAgICAgCisgICAgICBpZiAoIXByaXYtPnByZXNlbnRf ZXh0ZW5zaW9uKSB7CisgICAgICAgICBwcml2LT5wcmVzZW50X2V4dGVuc2lvbiA9IHhjYl9nZXRf ZXh0ZW5zaW9uX2RhdGEoYywgJnhjYl9wcmVzZW50X2lkKTsKKyAgICAgICAgIGlmICghcHJpdi0+ cHJlc2VudF9leHRlbnNpb24pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9CisK KyAgICAgIHBzYyA9IChzdHJ1Y3QgZHJpM19zY3JlZW4gKikgcHJpdi0+YmFzZS5wc2M7CisgICAg ICBwcml2LT5zcGVjaWFsX2V2ZW50ID0geGNiX3JlZ2lzdGVyX2Zvcl9zcGVjaWFsX2V2ZW50KGMs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHByaXYtPnByZXNlbnRfZXh0ZW5zaW9uLT5tYWpvcl9vcGNvZGUsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPmVpZCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcHNjLT5kcmkzLT5zdGFtcChkcmlEcmF3YWJsZSkpOworCisgICAgICBnZW9tX2Nvb2tpZSA9 IHhjYl9nZXRfZ2VvbWV0cnkoYywgcHJpdi0+YmFzZS54RHJhd2FibGUpOworCisgICAgICBnZW9t X3JlcGx5ID0geGNiX2dldF9nZW9tZXRyeV9yZXBseShjLCBnZW9tX2Nvb2tpZSwgTlVMTCk7CisK KyAgICAgIGlmICghZ2VvbV9yZXBseSkKKyAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAg cHJpdi0+d2lkdGggPSBnZW9tX3JlcGx5LT53aWR0aDsKKyAgICAgIHByaXYtPmhlaWdodCA9IGdl b21fcmVwbHktPmhlaWdodDsKKyAgICAgIHByaXYtPmRlcHRoID0gZ2VvbV9yZXBseS0+ZGVwdGg7 CisgICAgICBwcml2LT5pc19waXhtYXAgPSBmYWxzZTsKKworICAgICAgZnJlZShnZW9tX3JlcGx5 KTsKKworICAgICAgZXJyb3IgPSB4Y2JfcmVxdWVzdF9jaGVjayhjLCBjb29raWUpOworCisgICAg ICBpZiAoZXJyb3IpIHsKKyAgICAgICAgIGlmIChlcnJvci0+ZXJyb3JfY29kZSAhPSBCYWRXaW5k b3cpIHsKKyAgICAgICAgICAgIGZyZWUoZXJyb3IpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNl OworICAgICAgICAgfQorICAgICAgICAgcHJpdi0+aXNfcGl4bWFwID0gdHJ1ZTsKKyAgICAgICAg IHhjYl91bnJlZ2lzdGVyX2Zvcl9zcGVjaWFsX2V2ZW50KGMsIHByaXYtPnNwZWNpYWxfZXZlbnQp OworICAgICAgICAgcHJpdi0+c3BlY2lhbF9ldmVudCA9IE5VTEw7CisgICAgICB9CisgICB9CisK KyAgIC8qIENoZWNrIHRvIHNlZSBpZiBhbnkgY29uZmlndXJhdGlvbiBjaGFuZ2VzIGhhdmUgb2Nj dXJyZWQKKyAgICAqIHNpbmNlIHdlIHdlcmUgbGFzdCBpbnZva2VkCisgICAgKi8KKyAgIGlmIChw cml2LT5zcGVjaWFsX2V2ZW50KSB7CisgICAgICB4Y2JfZ2VuZXJpY19ldmVudF90ICAgICpldjsK KworICAgICAgd2hpbGUgKChldiA9IHhjYl9jaGVja19mb3Jfc3BlY2lhbF9ldmVudChjLCBwcml2 LT5zcGVjaWFsX2V2ZW50KSkgIT0gTlVMTCkgeworICAgICAgICAgeGNiX3ByZXNlbnRfZ2VuZXJp Y19ldmVudF90ICpwZSA9ICh2b2lkICopIGV2OworCisgICAgICAgICBzd2l0Y2ggKHBlLT5ldnR5 cGUpIHsKKyAgICAgICAgIGNhc2UgWENCX1BSRVNFTlRfRVZFTlRfQ09ORklHVVJFX05PVElGWTog eworICAgICAgICAgICAgeGNiX2NvbmZpZ3VyZV9ub3RpZnlfZXZlbnRfdCAqY2UgPSAodm9pZCAq KSBldjsKKworICAgICAgICAgICAgcHJpdi0+d2lkdGggPSBjZS0+d2lkdGg7CisgICAgICAgICAg ICBwcml2LT5oZWlnaHQgPSBjZS0+aGVpZ2h0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg ICB9CisgICAgICAgICBjYXNlIFhDQl9QUkVTRU5UX0VWRU5UX0lETEVfTk9USUZZOgorICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICB9CisgICAgICAgICBmcmVlKGV2KTsKKyAgICAgIH0KKyAg IH0KKyAgIHJldHVybiB0cnVlOworfQorICAgCitzdGF0aWMgX19EUklkcmkzQnVmZmVyICoKK2Ry aTNfZ2V0X3BpeG1hcF9idWZmZXIoX19EUklkcmF3YWJsZSAqZHJpRHJhd2FibGUsCisgICAgICAg ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAg ICAgIGVudW0gX19EUkkzYnVmZmVyVHlwZSBidWZmZXJfdHlwZSwKKyAgICAgICAgICAgICAgICAg ICAgICAgdm9pZCAqbG9hZGVyUHJpdmF0ZSkKK3sKKyAgIHN0cnVjdCBkcmkzX2RyYXdhYmxlICAg ICAgICAgICAgICAgICAqcGRyYXcgPSBsb2FkZXJQcml2YXRlOworICAgX19EUklkcmkzQnVmZmVy ICAgICAgICAgICAgICAgICAgICAgICpidWZmZXIgPSBwZHJhdy0+YnVmZmVyc1tidWZmZXJfdHlw ZV07CisgICBQaXhtYXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGl4bWFwOworICAg eGNiX2RyaTNfYnVmZmVyX2Zyb21fcGl4bWFwX2Nvb2tpZV90IGJwX2Nvb2tpZTsKKyAgIHhjYl9k cmkzX2J1ZmZlcl9mcm9tX3BpeG1hcF9yZXBseV90ICAqYnBfcmVwbHk7CisgICBpbnQgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKmZkczsKKyAgIGludCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBidWZmZXJfZmQ7CisgICBEaXNwbGF5ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKmRweTsKKyAgIHN0cnVjdCBkcmkzX3NjcmVlbiAgICAgICAgICAgICAgICAg ICAqcHNjOworICAgeGNiX2Nvbm5lY3Rpb25fdCAgICAgICAgICAgICAgICAgICAgICpjOworICAg eGNiX3N5bmNfZmVuY2VfdCAgICAgICAgICAgICAgICAgICAgIHN5bmNfZmVuY2U7CisgICBpbnQz Ml90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnNobV9mZW5jZTsKKyAgIGludCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZW5jZV9mZDsKKworICAgaWYgKGJ1ZmZlcikK KyAgICAgIHJldHVybiBidWZmZXI7CisKKyAgIHBpeG1hcCA9IHBkcmF3LT5iYXNlLnhEcmF3YWJs ZTsKKyAgIHBzYyA9IChzdHJ1Y3QgZHJpM19zY3JlZW4gKikgcGRyYXctPmJhc2UucHNjOworICAg ZHB5ID0gcHNjLT5iYXNlLmRweTsKKyAgIGMgPSBYR2V0WENCQ29ubmVjdGlvbihkcHkpOworCisg ICBmZW5jZV9mZCA9IHhzaG1mZW5jZV9hbGxvY19zaG0oKTsKKyAgIGlmIChmZW5jZV9mZCA8IDAp CisgICAgICByZXR1cm4gTlVMTDsKKyAgIHNobV9mZW5jZSA9IHhzaG1mZW5jZV9tYXBfc2htKGZl bmNlX2ZkKTsKKyAgIGlmIChzaG1fZmVuY2UgPT0gTlVMTCkgeworICAgICAgY2xvc2UgKGZlbmNl X2ZkKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgfQorCisgICB4Y2JfZHJpM19mZW5jZV9mcm9t X2ZkKGMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHBpeG1hcCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgKHN5bmNfZmVuY2UgPSB4Y2JfZ2VuZXJhdGVfaWQoYykpLAorICAgICAgICAg ICAgICAgICAgICAgICAgICBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmVuY2Vf ZmQpOworCisgICBicF9jb29raWUgPSB4Y2JfZHJpM19idWZmZXJfZnJvbV9waXhtYXAoYywgcGl4 bWFwKTsKKyAgIGJwX3JlcGx5ID0geGNiX2RyaTNfYnVmZmVyX2Zyb21fcGl4bWFwX3JlcGx5KGMs IGJwX2Nvb2tpZSwgTlVMTCk7CisgICBpZiAoIWJwX3JlcGx5KQorICAgICAgZ290byBub19waXht YXA7CisgICBmZHMgPSB4Y2JfZHJpM19idWZmZXJfZnJvbV9waXhtYXBfcmVwbHlfZmRzKGMsIGJw X3JlcGx5KTsKKyAgIGJ1ZmZlcl9mZCA9IGZkc1swXTsKKyAgIGJ1ZmZlciA9ICgqcHNjLT5kcmkz LT5mZFRvQnVmZmVyKShwc2MtPmRyaVNjcmVlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBidWZmZXJfZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJwX3JlcGx5 LT53aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicF9yZXBseS0+ aGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJwX3JlcGx5LT5z dHJpZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnBfcmVwbHktPnNp emUpOworICAgY2xvc2UoYnVmZmVyX2ZkKTsKKyAgIGlmICghYnVmZmVyKQorICAgICAgZ290byBu b19waXhtYXA7CisKKyAgIGJ1ZmZlci0+cGl4bWFwID0gcGl4bWFwOworICAgYnVmZmVyLT53aWR0 aCA9IGJwX3JlcGx5LT53aWR0aDsKKyAgIGJ1ZmZlci0+aGVpZ2h0ID0gYnBfcmVwbHktPmhlaWdo dDsKKyAgIGJ1ZmZlci0+YnVmZmVyX3R5cGUgPSBidWZmZXJfdHlwZTsKKyAgIGJ1ZmZlci0+c2ht X2ZlbmNlID0gc2htX2ZlbmNlOworICAgYnVmZmVyLT5zeW5jX2ZlbmNlID0gc3luY19mZW5jZTsK KworICAgcGRyYXctPmJ1ZmZlcnNbYnVmZmVyX3R5cGVdID0gYnVmZmVyOworICAgcmV0dXJuIGJ1 ZmZlcjsKKworbm9fcGl4bWFwOgorICAgeGNiX3N5bmNfZGVzdHJveV9mZW5jZShjLCBzeW5jX2Zl bmNlKTsKKyAgIHhzaG1mZW5jZV91bm1hcF9zaG0oc2htX2ZlbmNlKTsKKyAgIHJldHVybiBOVUxM OworfQorCitzdGF0aWMgX19EUklkcmkzQnVmZmVyICoKK2RyaTNfZ2V0X2J1ZmZlcihfX0RSSWRy YXdhYmxlICpkcmlEcmF3YWJsZSwKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZm9ybWF0 LAorICAgICAgICAgICAgICAgIGVudW0gX19EUkkzYnVmZmVyVHlwZSBidWZmZXJfdHlwZSwKKyAg ICAgICAgICAgICAgICB2b2lkICpsb2FkZXJQcml2YXRlKQoreworICAgc3RydWN0IGRyaTNfZHJh d2FibGUgKnByaXYgPSBsb2FkZXJQcml2YXRlOworICAgX19EUklkcmkzQnVmZmVyICAgICAgKmJ1 ZmZlciA9IHByaXYtPmJ1ZmZlcnNbYnVmZmVyX3R5cGVdOworCisgICBpZiAoIWJ1ZmZlciB8fCBi dWZmZXItPndpZHRoICE9IHByaXYtPndpZHRoIHx8IGJ1ZmZlci0+aGVpZ2h0ICE9IHByaXYtPmhl aWdodCkgeworICAgICAgeGNiX2Nvbm5lY3Rpb25fdCAgKmMgPSBYR2V0WENCQ29ubmVjdGlvbihw cml2LT5iYXNlLnBzYy0+ZHB5KTsKKyAgICAgIF9fRFJJZHJpM0J1ZmZlciAgICpuZXdfYnVmZmVy OworCisgICAgICAvKiBBbGxvY2F0ZSB0aGUgbmV3IGJ1ZmZlcnMKKyAgICAgICAqLworICAgICAg bmV3X2J1ZmZlciA9IGRyaTNfYWxsb2NfcmVuZGVyX2J1ZmZlcihwcml2LT5iYXNlLnBzYywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+YmFzZS54RHJh d2FibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1h dCwgcHJpdi0+d2lkdGgsIHByaXYtPmhlaWdodCwgcHJpdi0+ZGVwdGgpOworICAgICAgaWYgKCFu ZXdfYnVmZmVyKQorICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICBzd2l0Y2ggKGJ1ZmZlcl90 eXBlKSB7CisgICAgICBjYXNlIF9fRFJJM19CVUZGRVJfQkFDSzoKKyAgICAgICAgIGlmIChidWZm ZXIpIHsKKyAgICAgICAgICAgIGRyaTNfZmVuY2VfcmVzZXQoYywgbmV3X2J1ZmZlcik7CisgICAg ICAgICAgICBkcmkzX2ZlbmNlX2F3YWl0KGMsIGJ1ZmZlcik7CisgICAgICAgICAgICBkcmkzX2Nv cHlfYXJlYShjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLT5waXhtYXAsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfYnVmZmVyLT5waXhtYXAsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICBkcmkzX2RyYXdhYmxlX2djKHByaXYpLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgMCwgMCwgMCwgMCwgcHJpdi0+d2lkdGgsIHByaXYtPmhlaWdodCk7CisgICAg ICAgICAgICBkcmkzX2ZlbmNlX3RyaWdnZXIoYywgbmV3X2J1ZmZlcik7CisgICAgICAgICAgICBk cmkzX2ZyZWVfcmVuZGVyX2J1ZmZlcihwcml2LCBidWZmZXIpOworICAgICAgICAgICAgZHJpM19m ZW5jZV9hd2FpdChjLCBuZXdfYnVmZmVyKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOwor ICAgICAgY2FzZSBfX0RSSTNfQlVGRkVSX0ZST05UOgorICAgICAgICAgZHJpM19mZW5jZV9yZXNl dChjLCBuZXdfYnVmZmVyKTsKKyAgICAgICAgIGRyaTNfY29weV9hcmVhKGMsCisgICAgICAgICAg ICAgICAgICAgICAgICBwcml2LT5iYXNlLnhEcmF3YWJsZSwKKyAgICAgICAgICAgICAgICAgICAg ICAgIG5ld19idWZmZXItPnBpeG1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRyaTNfZHJh d2FibGVfZ2MocHJpdiksCisgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAwLCBwcml2 LT53aWR0aCwgcHJpdi0+aGVpZ2h0KTsKKyAgICAgICAgIGRyaTNfZmVuY2VfdHJpZ2dlcihjLCBu ZXdfYnVmZmVyKTsKKyAgICAgICAgIGRyaTNfZmVuY2VfYXdhaXQoYywgbmV3X2J1ZmZlcik7Cisg ICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGJ1ZmZlciA9IG5ld19idWZmZXI7CisgICAg ICBidWZmZXItPmJ1ZmZlcl90eXBlID0gYnVmZmVyX3R5cGU7CisgICAgICBwcml2LT5idWZmZXJz W2J1ZmZlcl90eXBlXSA9IGJ1ZmZlcjsKKyAgIH0KKworICAgLyogUmV0dXJuIHRoZSByZXF1ZXN0 ZWQgYnVmZmVyICovCisgICByZXR1cm4gYnVmZmVyOworfQorCitzdGF0aWMgdm9pZAorZHJpM19m cmVlX2J1ZmZlcihfX0RSSWRyYXdhYmxlICpkcmlEcmF3YWJsZSwKKyAgICAgICAgICAgICAgICAg ZW51bSBfX0RSSTNidWZmZXJUeXBlIGJ1ZmZlcl90eXBlLAorICAgICAgICAgICAgICAgICB2b2lk ICpsb2FkZXJQcml2YXRlKQoreworICAgc3RydWN0IGRyaTNfZHJhd2FibGUgKnByaXYgPSBsb2Fk ZXJQcml2YXRlOworICAgX19EUklkcmkzQnVmZmVyICAgICAgKmJ1ZmZlciA9IHByaXYtPmJ1ZmZl cnNbYnVmZmVyX3R5cGVdOworCisgICBpZiAoYnVmZmVyKSB7CisgICAgICBkcmkzX2ZyZWVfcmVu ZGVyX2J1ZmZlcihwcml2LCBidWZmZXIpOworICAgICAgcHJpdi0+YnVmZmVyc1tidWZmZXJfdHlw ZV0gPSBOVUxMOworICAgfQorfQorCitzdGF0aWMgaW50CitkcmkzX2dldF9idWZmZXJzKF9fRFJJ ZHJhd2FibGUgKmRyaURyYXdhYmxlLAorICAgICAgICAgICAgICAgICBpbnQgKndpZHRoLCBpbnQg KmhlaWdodCwKKyAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZvcm1hdCwKKyAgICAgICAg ICAgICAgICAgdm9pZCAqbG9hZGVyUHJpdmF0ZSwKKyAgICAgICAgICAgICAgICAgaW50IG5lZWRf ZnJvbnQsCisgICAgICAgICAgICAgICAgIGludCBuZWVkX2JhY2ssCisgICAgICAgICAgICAgICAg IF9fRFJJZHJpM0J1ZmZlciAqKmZyb250LAorICAgICAgICAgICAgICAgICBfX0RSSWRyaTNCdWZm ZXIgKipiYWNrKQoreworICAgc3RydWN0IGRyaTNfZHJhd2FibGUgKnByaXYgPSBsb2FkZXJQcml2 YXRlOworCisgICAqZnJvbnQgPSBOVUxMOworICAgKmJhY2sgPSBOVUxMOworCisgICBpZiAoIWRy aTNfdXBkYXRlX2RyYXdhYmxlKGRyaURyYXdhYmxlLCBsb2FkZXJQcml2YXRlKSkKKyAgICAgIHJl dHVybiBmYWxzZTsKKworICAgaWYgKHByaXYtPmlzX3BpeG1hcCkKKyAgICAgIG5lZWRfZnJvbnQg PSAxOworCisgICBpZiAobmVlZF9mcm9udCkgeworICAgICAgaWYgKHByaXYtPmlzX3BpeG1hcCkK KyAgICAgICAgICpmcm9udCA9IGRyaTNfZ2V0X3BpeG1hcF9idWZmZXIoZHJpRHJhd2FibGUsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19EUkkzX0JVRkZFUl9GUk9OVCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyUHJpdmF0ZSk7Cisg ICAgICBlbHNlCisgICAgICAgICAqZnJvbnQgPSBkcmkzX2dldF9idWZmZXIoZHJpRHJhd2FibGUs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fRFJJM19CVUZGRVJfRlJPTlQsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbG9hZGVyUHJpdmF0ZSk7CisKKyAgICAgIGlmICghKmZyb250 KQorICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgcHJpdi0+aGF2ZV9mYWtlX2Zyb250ID0g IXByaXYtPmlzX3BpeG1hcDsKKyAgIH0gZWxzZSB7CisgICAgICBkcmkzX2ZyZWVfYnVmZmVyKGRy aURyYXdhYmxlLCBfX0RSSTNfQlVGRkVSX0ZST05ULCBsb2FkZXJQcml2YXRlKTsKKyAgICAgIHBy aXYtPmhhdmVfZmFrZV9mcm9udCA9IDA7CisgICB9CisKKyAgIGlmIChuZWVkX2JhY2spIHsKKyAg ICAgICpiYWNrID0gZHJpM19nZXRfYnVmZmVyKGRyaURyYXdhYmxlLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19E UkkzX0JVRkZFUl9CQUNLLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyUHJp dmF0ZSk7CisgICAgICBpZiAoISpiYWNrKQorICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg cHJpdi0+aGF2ZV9iYWNrID0gMTsKKyAgIH0gZWxzZSB7CisgICAgICBkcmkzX2ZyZWVfYnVmZmVy KGRyaURyYXdhYmxlLCBfX0RSSTNfQlVGRkVSX0JBQ0ssIGxvYWRlclByaXZhdGUpOworICAgICAg cHJpdi0+aGF2ZV9iYWNrID0gMDsKKyAgIH0KKworICAgLyogUmVwb3J0IGJhY2sgY3VycmVudCBn ZW9tZXRyeSAqLworICAgKndpZHRoID0gcHJpdi0+d2lkdGg7CisgICAqaGVpZ2h0ID0gcHJpdi0+ aGVpZ2h0OworICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBpbnQ2NF90CitkcmkzX3N3YXBf YnVmZmVycyhfX0dMWERSSWRyYXdhYmxlICpwZHJhdywgaW50NjRfdCB0YXJnZXRfbXNjLCBpbnQ2 NF90IGRpdmlzb3IsCisgICAgICAgICAgICAgICAgICBpbnQ2NF90IHJlbWFpbmRlciwgQm9vbCBm bHVzaCkKK3sKKyAgIHN0cnVjdCBkcmkzX2RyYXdhYmxlICpwcml2ID0gKHN0cnVjdCBkcmkzX2Ry YXdhYmxlICopIHBkcmF3OworICAgc3RydWN0IGRyaTNfc2NyZWVuICpwc2MgPSAoc3RydWN0IGRy aTNfc2NyZWVuICopIHByaXYtPmJhc2UucHNjOworICAgeGNiX2Nvbm5lY3Rpb25fdCAqYyA9IFhH ZXRYQ0JDb25uZWN0aW9uKHByaXYtPmJhc2UucHNjLT5kcHkpOworICAgaW50NjRfdCByZXQgPSAw OworCisgICBfX0RSSWNvbnRleHQgKmN0eCA9IGRyaTNfZ2V0X2N1cnJlbnRfY29udGV4dCgpOwor ICAgdW5zaWduZWQgZmxhZ3MgPSBfX0RSSTJfRkxVU0hfRFJBV0FCTEU7CisgICBpZiAoZmx1c2gp CisgICAgICBmbGFncyB8PSBfX0RSSTJfRkxVU0hfQ09OVEVYVDsKKyAgIGRyaTNfZmx1c2gocHNj LCBjdHgsIHByaXYsIGZsYWdzLCBfX0RSSTJfVEhST1RUTEVfU1dBUEJVRkZFUik7CisgICAgCisg ICBpZiAocHJpdi0+YnVmZmVyc1swXSAmJiAhcHJpdi0+aXNfcGl4bWFwKSB7CisgICAgICBkcmkz X2ZlbmNlX3Jlc2V0KGMsIHByaXYtPmJ1ZmZlcnNbMF0pOworICAgICAgZHJpM19jb3B5X2FyZWEo YywKKyAgICAgICAgICAgICAgICAgICAgIHByaXYtPmJ1ZmZlcnNbMF0tPnBpeG1hcCwKKyAgICAg ICAgICAgICAgICAgICAgIHByaXYtPmJhc2UueERyYXdhYmxlLAorICAgICAgICAgICAgICAgICAg ICAgZHJpM19kcmF3YWJsZV9nYyhwcml2KSwKKyAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAs IDAsIHByaXYtPndpZHRoLCBwcml2LT5oZWlnaHQpOworICAgICAgZHJpM19mZW5jZV90cmlnZ2Vy KGMsIHByaXYtPmJ1ZmZlcnNbMF0pOworICAgICAgaWYgKHByaXYtPmhhdmVfZmFrZV9mcm9udCkg eworICAgICAgICAgZHJpM19mZW5jZV9yZXNldChjLCBwcml2LT5idWZmZXJzWzFdKTsKKyAgICAg ICAgIGRyaTNfY29weV9hcmVhKGMsCisgICAgICAgICAgICAgICAgICAgICAgICBwcml2LT5idWZm ZXJzWzBdLT5waXhtYXAsCisgICAgICAgICAgICAgICAgICAgICAgICBwcml2LT5idWZmZXJzWzFd LT5waXhtYXAsCisgICAgICAgICAgICAgICAgICAgICAgICBkcmkzX2RyYXdhYmxlX2djKHByaXYp LAorICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMCwgcHJpdi0+d2lkdGgsIHByaXYt PmhlaWdodCk7CisgICAgICAgICBkcmkzX2ZlbmNlX3RyaWdnZXIoYywgcHJpdi0+YnVmZmVyc1sx XSk7CisgICAgICB9CisgICAgICBkcmkzX2ZlbmNlX2F3YWl0KGMsIHByaXYtPmJ1ZmZlcnNbMF0p OworICAgICAgaWYgKHByaXYtPmhhdmVfZmFrZV9mcm9udCkKKyAgICAgICAgIGRyaTNfZmVuY2Vf YXdhaXQoYywgcHJpdi0+YnVmZmVyc1sxXSk7CisgICB9CisKKyAgIHJldHVybiByZXQ7Cit9CisK K3N0YXRpYyBpbnQKK2RyaTNfcXVlcnlfdmVyc2lvbihEaXNwbGF5ICpkcHksIGludCAqbWFqb3Is IGludCAqbWlub3IpCit7CisgICB4Y2JfZHJpM19xdWVyeV92ZXJzaW9uX2Nvb2tpZV90ICAgICAg Y29va2llOworICAgeGNiX2RyaTNfcXVlcnlfdmVyc2lvbl9yZXBseV90ICAgICAgICpyZXBseTsg ICAgICAgCisgICB4Y2JfY29ubmVjdGlvbl90ICAgICAgICAgICAgICAgICAgICAgKmMgPSBYR2V0 WENCQ29ubmVjdGlvbihkcHkpOworICAgeGNiX2dlbmVyaWNfZXJyb3JfdCAgICAgICAgICAgICAg ICAgICplcnJvcjsKKworICAgY29va2llID0geGNiX2RyaTNfcXVlcnlfdmVyc2lvbihjLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ0JfRFJJM19NQUpPUl9WRVJTSU9OLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ0JfRFJJM19NSU5PUl9WRVJTSU9O KTsKKyAgIHJlcGx5ID0geGNiX2RyaTNfcXVlcnlfdmVyc2lvbl9yZXBseShjLCBjb29raWUsICZl cnJvcik7CisgICBpZiAoIXJlcGx5KSB7CisgICAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgIGZy ZWUoZXJyb3IpOworICAgICAgfQorICAgICAgcmV0dXJuIDA7CisgICB9CisgICAqbWFqb3IgPSBy ZXBseS0+bWFqb3JfdmVyc2lvbjsKKyAgICptaW5vciA9IHJlcGx5LT5taW5vcl92ZXJzaW9uOwor ICAgZnJlZShyZXBseSk7CisgICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorZHJpM19vcGVu KERpc3BsYXkgKmRweSwKKyAgICAgICAgICBXaW5kb3cgcm9vdCwKKyAgICAgICAgICBDQVJEMzIg cHJvdmlkZXIpCit7CisgICB4Y2JfZHJpM19vcGVuX2Nvb2tpZV90ICAgICAgIGNvb2tpZTsKKyAg IHhjYl9kcmkzX29wZW5fcmVwbHlfdCAgICAgICAgKnJlcGx5OyAgICAgICAKKyAgIHhjYl9jb25u ZWN0aW9uX3QgICAgICAgICAgICAgKmMgPSBYR2V0WENCQ29ubmVjdGlvbihkcHkpOworICAgeGNi X2dlbmVyaWNfZXJyb3JfdCAgICAgICAgICAqZXJyb3I7CisgICBpbnQgICAgICAgICAgICAgICAg ICAgICAgICAgIGZkOworCisgICBjb29raWUgPSB4Y2JfZHJpM19vcGVuKGMsCisgICAgICAgICAg ICAgICAgICAgICAgICAgIHJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVy KTsKKworICAgcmVwbHkgPSB4Y2JfZHJpM19vcGVuX3JlcGx5KGMsIGNvb2tpZSwgJmVycm9yKTsK KyAgIGlmICghcmVwbHkpCisgICAgICByZXR1cm4gLTE7CisKKyAgIGlmIChyZXBseS0+bmZkICE9 IDEpIHsKKyAgICAgIGZyZWUocmVwbHkpOworICAgICAgcmV0dXJuIC0xOworICAgfQorCisgICBm ZCA9IHhjYl9kcmkzX29wZW5fcmVwbHlfZmRzKGMsIHJlcGx5KVswXTsKKyAgIGZjbnRsKGZkLCBG X1NFVEZELCBGRF9DTE9FWEVDKTsKKworICAgcmV0dXJuIGZkOworfQorCisKK3N0YXRpYyB2b2lk CitkcmkzX2Rlc3Ryb3lfc2NyZWVuKHN0cnVjdCBnbHhfc2NyZWVuICpiYXNlKQoreworICAgc3Ry dWN0IGRyaTNfc2NyZWVuICpwc2MgPSAoc3RydWN0IGRyaTNfc2NyZWVuICopIGJhc2U7CisKKyAg IC8qIEZyZWUgdGhlIGRpcmVjdCByZW5kZXJpbmcgcGVyIHNjcmVlbiBkYXRhICovCisgICAoKnBz Yy0+Y29yZS0+ZGVzdHJveVNjcmVlbikgKHBzYy0+ZHJpU2NyZWVuKTsKKyAgIGRyaURlc3Ryb3lD b25maWdzKHBzYy0+ZHJpdmVyX2NvbmZpZ3MpOworICAgY2xvc2UocHNjLT5mZCk7CisgICBmcmVl KHBzYyk7Cit9CisKKyNpZiBIQVNfU0JDCitzdGF0aWMgaW50CitkcmkzX3NldF9zd2FwX2ludGVy dmFsKF9fR0xYRFJJZHJhd2FibGUgKnBkcmF3LCBpbnQgaW50ZXJ2YWwpCit7CisgICB4Y2JfY29u bmVjdGlvbl90ICpjID0gWEdldFhDQkNvbm5lY3Rpb24ocGRyYXctPnBzYy0+ZHB5KTsKKyAgIHN0 cnVjdCBkcmkzX2RyYXdhYmxlICpwcml2ID0gIChzdHJ1Y3QgZHJpM19kcmF3YWJsZSAqKSBwZHJh dzsKKyAgIEdMaW50IHZibGFua19tb2RlID0gRFJJX0NPTkZfVkJMQU5LX0RFRl9JTlRFUlZBTF8x OworICAgc3RydWN0IGRyaTNfc2NyZWVuICpwc2MgPSAoc3RydWN0IGRyaTNfc2NyZWVuICopIHBy aXYtPmJhc2UucHNjOworCisgICBpZiAocHNjLT5jb25maWcpCisgICAgICBwc2MtPmNvbmZpZy0+ Y29uZmlnUXVlcnlpKHBzYy0+ZHJpU2NyZWVuLAorCQkJCSJ2YmxhbmtfbW9kZSIsICZ2Ymxhbmtf bW9kZSk7CisKKyAgIHN3aXRjaCAodmJsYW5rX21vZGUpIHsKKyAgIGNhc2UgRFJJX0NPTkZfVkJM QU5LX05FVkVSOgorICAgICAgaWYgKGludGVydmFsICE9IDApCisgICAgICAgICByZXR1cm4gR0xY X0JBRF9WQUxVRTsKKyAgICAgIGJyZWFrOworICAgY2FzZSBEUklfQ09ORl9WQkxBTktfQUxXQVlT X1NZTkM6CisgICAgICBpZiAoaW50ZXJ2YWwgPD0gMCkKKwkgcmV0dXJuIEdMWF9CQURfVkFMVUU7 CisgICAgICBicmVhazsKKyAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgIH0KKworICAgeGNi X2RyaTJfc3dhcF9pbnRlcnZhbChjLCBwcml2LT5iYXNlLnhEcmF3YWJsZSwgaW50ZXJ2YWwpOwor ICAgcHJpdi0+c3dhcF9pbnRlcnZhbCA9IGludGVydmFsOworCisgICByZXR1cm4gMDsKK30KKwor c3RhdGljIGludAorZHJpM19nZXRfc3dhcF9pbnRlcnZhbChfX0dMWERSSWRyYXdhYmxlICpwZHJh dykKK3sKKyAgIHN0cnVjdCBkcmkzX2RyYXdhYmxlICpwcml2ID0gIChzdHJ1Y3QgZHJpM19kcmF3 YWJsZSAqKSBwZHJhdzsKKworICByZXR1cm4gcHJpdi0+c3dhcF9pbnRlcnZhbDsKK30KKyNlbmRp ZgorCitzdGF0aWMgY29uc3QgX19EUklkcmkzTG9hZGVyRXh0ZW5zaW9uIGRyaTNMb2FkZXJFeHRl bnNpb24gPSB7CisgICB7X19EUklfRFJJM19MT0FERVIsIF9fRFJJX0RSSTNfTE9BREVSX1ZFUlNJ T059LAorICAgLmdldEJ1ZmZlcnMgPSBkcmkzX2dldF9idWZmZXJzLAorICAgLmZsdXNoRnJvbnRC dWZmZXIgPSBkcmkzX2ZsdXNoX2Zyb250X2J1ZmZlciwKK307CisKK3N0YXRpYyB2b2lkCitkcmkz X2JpbmRfdGV4X2ltYWdlKERpc3BsYXkgKiBkcHksCisJCSAgICBHTFhEcmF3YWJsZSBkcmF3YWJs ZSwKKwkJICAgIGludCBidWZmZXIsIGNvbnN0IGludCAqYXR0cmliX2xpc3QpCit7CisgICBzdHJ1 Y3QgZ2x4X2NvbnRleHQgKmdjID0gX19nbFhHZXRDdXJyZW50Q29udGV4dCgpOworICAgc3RydWN0 IGRyaTNfY29udGV4dCAqcGNwID0gKHN0cnVjdCBkcmkzX2NvbnRleHQgKikgZ2M7CisgICBfX0dM WERSSWRyYXdhYmxlICpiYXNlID0gR2V0R0xYRFJJRHJhd2FibGUoZHB5LCBkcmF3YWJsZSk7Cisg ICBzdHJ1Y3QgZHJpM19kcmF3YWJsZSAqcGRyYXcgPSAoc3RydWN0IGRyaTNfZHJhd2FibGUgKikg YmFzZTsKKyAgIHN0cnVjdCBkcmkzX3NjcmVlbiAqcHNjOworCisgICBpZiAocGRyYXcgIT0gTlVM TCkgeworICAgICAgcHNjID0gKHN0cnVjdCBkcmkzX3NjcmVlbiAqKSBiYXNlLT5wc2M7CisKKyAg ICAgIGlmIChwc2MtPmYgJiYKKyAgICAgICAgICAgcHNjLT5mLT5iYXNlLnZlcnNpb24gPj0gMyAm JiBwc2MtPmYtPmludmFsaWRhdGUpCisJIHBzYy0+Zi0+aW52YWxpZGF0ZShwZHJhdy0+ZHJpRHJh d2FibGUpOworCisgICAgICBYU3luYyhkcHksIGZhbHNlKTsKKyAgICAgIGlmIChwc2MtPnRleEJ1 ZmZlci0+YmFzZS52ZXJzaW9uID49IDIgJiYKKwkgIHBzYy0+dGV4QnVmZmVyLT5zZXRUZXhCdWZm ZXIyICE9IE5VTEwpIHsKKwkgKCpwc2MtPnRleEJ1ZmZlci0+c2V0VGV4QnVmZmVyMikgKHBjcC0+ ZHJpQ29udGV4dCwKKwkJCQkJICAgcGRyYXctPmJhc2UudGV4dHVyZVRhcmdldCwKKwkJCQkJICAg cGRyYXctPmJhc2UudGV4dHVyZUZvcm1hdCwKKwkJCQkJICAgcGRyYXctPmRyaURyYXdhYmxlKTsK KyAgICAgIH0KKyAgICAgIGVsc2UgeworCSAoKnBzYy0+dGV4QnVmZmVyLT5zZXRUZXhCdWZmZXIp IChwY3AtPmRyaUNvbnRleHQsCisJCQkJCSAgcGRyYXctPmJhc2UudGV4dHVyZVRhcmdldCwKKwkJ CQkJICBwZHJhdy0+ZHJpRHJhd2FibGUpOworICAgICAgfQorICAgfQorfQorCitzdGF0aWMgdm9p ZAorZHJpM19yZWxlYXNlX3RleF9pbWFnZShEaXNwbGF5ICogZHB5LCBHTFhEcmF3YWJsZSBkcmF3 YWJsZSwgaW50IGJ1ZmZlcikKK3sKKyNpZiBfX0RSSV9URVhfQlVGRkVSX1ZFUlNJT04gPj0gMwor ICAgc3RydWN0IGdseF9jb250ZXh0ICpnYyA9IF9fZ2xYR2V0Q3VycmVudENvbnRleHQoKTsKKyAg IHN0cnVjdCBkcmkzX2NvbnRleHQgKnBjcCA9IChzdHJ1Y3QgZHJpM19jb250ZXh0ICopIGdjOwor ICAgX19HTFhEUklkcmF3YWJsZSAqYmFzZSA9IEdldEdMWERSSURyYXdhYmxlKGRweSwgZHJhd2Fi bGUpOworICAgc3RydWN0IGdseF9kaXNwbGF5ICpkcHlQcml2ID0gX19nbFhJbml0aWFsaXplKGRw eSk7CisgICBzdHJ1Y3QgZHJpM19kcmF3YWJsZSAqcGRyYXcgPSAoc3RydWN0IGRyaTNfZHJhd2Fi bGUgKikgYmFzZTsKKyAgIHN0cnVjdCBkcmkzX2Rpc3BsYXkgKnBkcCA9CisgICAgICAoc3RydWN0 IGRyaTNfZGlzcGxheSAqKSBkcHlQcml2LT5kcmkzRGlzcGxheTsKKyAgIHN0cnVjdCBkcmkzX3Nj cmVlbiAqcHNjOworCisgICBpZiAocGRyYXcgIT0gTlVMTCkgeworICAgICAgcHNjID0gKHN0cnVj dCBkcmkzX3NjcmVlbiAqKSBiYXNlLT5wc2M7CisKKyAgICAgIGlmIChwc2MtPnRleEJ1ZmZlci0+ YmFzZS52ZXJzaW9uID49IDMgJiYKKyAgICAgICAgICBwc2MtPnRleEJ1ZmZlci0+cmVsZWFzZVRl eEJ1ZmZlciAhPSBOVUxMKSB7CisgICAgICAgICAoKnBzYy0+dGV4QnVmZmVyLT5yZWxlYXNlVGV4 QnVmZmVyKSAocGNwLT5kcmlDb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHBkcmF3LT5iYXNlLnRleHR1cmVUYXJnZXQsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGRyYXctPmRyaURyYXdhYmxlKTsKKyAgICAgIH0K KyAgIH0KKyNlbmRpZgorfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGdseF9jb250ZXh0X3Z0YWJs ZSBkcmkzX2NvbnRleHRfdnRhYmxlID0geworICAgZHJpM19kZXN0cm95X2NvbnRleHQsCisgICBk cmkzX2JpbmRfY29udGV4dCwKKyAgIGRyaTNfdW5iaW5kX2NvbnRleHQsCisgICBkcmkzX3dhaXRf Z2wsCisgICBkcmkzX3dhaXRfeCwKKyAgIERSSV9nbFhVc2VYRm9udCwKKyAgIGRyaTNfYmluZF90 ZXhfaW1hZ2UsCisgICBkcmkzX3JlbGVhc2VfdGV4X2ltYWdlLAorICAgTlVMTCwgLyogZ2V0X3By b2NfYWRkcmVzcyAqLworfTsKKworc3RhdGljIHZvaWQKK2RyaTNfYmluZF9leHRlbnNpb25zKHN0 cnVjdCBkcmkzX3NjcmVlbiAqcHNjLCBzdHJ1Y3QgZ2x4X2Rpc3BsYXkgKiBwcml2LAorICAgICAg ICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZHJpdmVyTmFtZSkKK3sKKy8vICAgY29uc3Qgc3Ry dWN0IGRyaTNfZGlzcGxheSAqY29uc3QgcGRwID0gKHN0cnVjdCBkcmkzX2Rpc3BsYXkgKikgcHJp di0+ZHJpM0Rpc3BsYXk7CisgICBjb25zdCBfX0RSSWV4dGVuc2lvbiAqKmV4dGVuc2lvbnM7Cisg ICB1bnNpZ25lZCBtYXNrOworICAgaW50IGk7CisKKyAgIGV4dGVuc2lvbnMgPSBwc2MtPmNvcmUt PmdldEV4dGVuc2lvbnMocHNjLT5kcmlTY3JlZW4pOworCisgICBfX2dsWEVuYWJsZURpcmVjdEV4 dGVuc2lvbigmcHNjLT5iYXNlLCAiR0xYX1NHSV92aWRlb19zeW5jIik7CisgICBfX2dsWEVuYWJs ZURpcmVjdEV4dGVuc2lvbigmcHNjLT5iYXNlLCAiR0xYX1NHSV9zd2FwX2NvbnRyb2wiKTsKKyAg IF9fZ2xYRW5hYmxlRGlyZWN0RXh0ZW5zaW9uKCZwc2MtPmJhc2UsICJHTFhfTUVTQV9zd2FwX2Nv bnRyb2wiKTsKKyAgIF9fZ2xYRW5hYmxlRGlyZWN0RXh0ZW5zaW9uKCZwc2MtPmJhc2UsICJHTFhf U0dJX21ha2VfY3VycmVudF9yZWFkIik7CisKKyAgIC8qCisgICAgKiBHTFhfSU5URUxfc3dhcF9l dmVudCBpcyBicm9rZW4gb24gdGhlIHNlcnZlciBzaWRlLCB3aGVyZSBpdCdzCisgICAgKiBjdXJy ZW50bHkgdW5jb25kaXRpb25hbGx5IGVuYWJsZWQuIFRoaXMgY29tcGxldGVseSBicmVha3MKKyAg ICAqIHN5c3RlbXMgcnVubmluZyBvbiBkcml2ZXJzIHdoaWNoIGRvbid0IHN1cHBvcnQgdGhhdCBl eHRlbnNpb24uCisgICAgKiBUaGVyZSdzIG5vIHdheSB0byB0ZXN0IGZvciBpdHMgcHJlc2VuY2Ug b24gdGhpcyBzaWRlLCBzbyBpbnN0ZWFkCisgICAgKiBvZiBkaXNhYmxpbmcgaXQgdW5jb25kaXRp b25hbGx5LCBqdXN0IGRpc2FibGUgaXQgZm9yIGRyaXZlcnMKKyAgICAqIHdoaWNoIGFyZSBrbm93 biB0byBub3Qgc3VwcG9ydCBpdCwgb3IgZm9yIEREWCBkcml2ZXJzIHN1cHBvcnRpbmcKKyAgICAq IG9ubHkgYW4gb2xkZXIgKHByZS1TY2hlZHVsZVN3YXApIHZlcnNpb24gb2YgRFJJMi4KKyAgICAq CisgICAgKiBUaGlzIGlzIGEgaGFjayB3aGljaCBpcyByZXF1aXJlZCB1bnRpbDoKKyAgICAqIGh0 dHA6Ly9saXN0cy54Lm9yZy9hcmNoaXZlcy94b3JnLWRldmVsLzIwMTMtRmVicnVhcnkvMDM1NDQ5 Lmh0bWwKKyAgICAqIGlzIG1lcmdlZCBhbmQgdXBkYXRlZCB4c2VydmVyIG1ha2VzIGl0J3Mgd2F5 IGludG8gZGlzdHJvczoKKyAgICAqLworLy8gICBpZiAocGRwLT5zd2FwQXZhaWxhYmxlICYmIHN0 cmNtcChkcml2ZXJOYW1lLCAidm13Z2Z4IikgIT0gMCkgeworLy8gICAgICBfX2dsWEVuYWJsZURp cmVjdEV4dGVuc2lvbigmcHNjLT5iYXNlLCAiR0xYX0lOVEVMX3N3YXBfZXZlbnQiKTsKKy8vICAg fQorCisgICBtYXNrID0gcHNjLT5kcmkzLT5nZXRBUElNYXNrKHBzYy0+ZHJpU2NyZWVuKTsKKwor ICAgX19nbFhFbmFibGVEaXJlY3RFeHRlbnNpb24oJnBzYy0+YmFzZSwgIkdMWF9BUkJfY3JlYXRl X2NvbnRleHQiKTsKKyAgIF9fZ2xYRW5hYmxlRGlyZWN0RXh0ZW5zaW9uKCZwc2MtPmJhc2UsICJH TFhfQVJCX2NyZWF0ZV9jb250ZXh0X3Byb2ZpbGUiKTsKKworICAgaWYgKChtYXNrICYgKDEgPDwg X19EUklfQVBJX0dMRVMyKSkgIT0gMCkKKyAgICAgIF9fZ2xYRW5hYmxlRGlyZWN0RXh0ZW5zaW9u KCZwc2MtPmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiR0xYX0VYVF9j cmVhdGVfY29udGV4dF9lczJfcHJvZmlsZSIpOworCisgICBmb3IgKGkgPSAwOyBleHRlbnNpb25z W2ldOyBpKyspIHsKKyAgICAgIGlmICgoc3RyY21wKGV4dGVuc2lvbnNbaV0tPm5hbWUsIF9fRFJJ X1RFWF9CVUZGRVIpID09IDApKSB7CisJIHBzYy0+dGV4QnVmZmVyID0gKF9fRFJJdGV4QnVmZmVy RXh0ZW5zaW9uICopIGV4dGVuc2lvbnNbaV07CisJIF9fZ2xYRW5hYmxlRGlyZWN0RXh0ZW5zaW9u KCZwc2MtPmJhc2UsICJHTFhfRVhUX3RleHR1cmVfZnJvbV9waXhtYXAiKTsKKyAgICAgIH0KKwor ICAgICAgaWYgKChzdHJjbXAoZXh0ZW5zaW9uc1tpXS0+bmFtZSwgX19EUkkyX0ZMVVNIKSA9PSAw KSkgeworCSBwc2MtPmYgPSAoX19EUkkyZmx1c2hFeHRlbnNpb24gKikgZXh0ZW5zaW9uc1tpXTsK KwkgLyogaW50ZXJuYWwgZHJpdmVyIGV4dGVuc2lvbiwgbm8gR0wgZXh0ZW5zaW9uIGV4cG9zZWQg Ki8KKyAgICAgIH0KKworICAgICAgaWYgKChzdHJjbXAoZXh0ZW5zaW9uc1tpXS0+bmFtZSwgX19E UkkyX0NPTkZJR19RVUVSWSkgPT0gMCkpCisJIHBzYy0+Y29uZmlnID0gKF9fRFJJMmNvbmZpZ1F1 ZXJ5RXh0ZW5zaW9uICopIGV4dGVuc2lvbnNbaV07CisKKyAgICAgIGlmICgoKHN0cmNtcChleHRl bnNpb25zW2ldLT5uYW1lLCBfX0RSSTJfVEhST1RUTEUpID09IDApKSkKKwkgcHNjLT50aHJvdHRs ZSA9IChfX0RSSTJ0aHJvdHRsZUV4dGVuc2lvbiAqKSBleHRlbnNpb25zW2ldOworCisgICAgICBp ZiAoc3RyY21wKGV4dGVuc2lvbnNbaV0tPm5hbWUsIF9fRFJJMl9ST0JVU1RORVNTKSA9PSAwKQor ICAgICAgICAgX19nbFhFbmFibGVEaXJlY3RFeHRlbnNpb24oJnBzYy0+YmFzZSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJHTFhfQVJCX2NyZWF0ZV9jb250ZXh0X3JvYnVz dG5lc3MiKTsKKyAgIH0KK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBnbHhfc2NyZWVuX3Z0YWJs ZSBkcmkzX3NjcmVlbl92dGFibGUgPSB7CisgICBkcmkzX2NyZWF0ZV9jb250ZXh0LAorICAgZHJp M19jcmVhdGVfY29udGV4dF9hdHRyaWJzCit9OworCitzdGF0aWMgc3RydWN0IGdseF9zY3JlZW4g KgorZHJpM19jcmVhdGVfc2NyZWVuKGludCBzY3JlZW4sIHN0cnVjdCBnbHhfZGlzcGxheSAqIHBy aXYpCit7CisgICBjb25zdCBfX0RSSWNvbmZpZyAqKmRyaXZlcl9jb25maWdzOworICAgY29uc3Qg X19EUklleHRlbnNpb24gKipleHRlbnNpb25zOworICAgY29uc3Qgc3RydWN0IGRyaTNfZGlzcGxh eSAqY29uc3QgcGRwID0gKHN0cnVjdCBkcmkzX2Rpc3BsYXkgKikKKyAgICAgIHByaXYtPmRyaTNE aXNwbGF5OworICAgc3RydWN0IGRyaTNfc2NyZWVuICpwc2M7CisgICBfX0dMWERSSXNjcmVlbiAq cHNwOworICAgc3RydWN0IGdseF9jb25maWcgKmNvbmZpZ3MgPSBOVUxMLCAqdmlzdWFscyA9IE5V TEw7CisgICBjaGFyICpkcml2ZXJOYW1lLCAqZGV2aWNlTmFtZSwgKnRtcDsKKyAgIGludCBpOwor CisgICBwc2MgPSBjYWxsb2MoMSwgc2l6ZW9mICpwc2MpOworICAgaWYgKHBzYyA9PSBOVUxMKQor ICAgICAgcmV0dXJuIE5VTEw7CisKKyAgIHBzYy0+ZmQgPSAtMTsKKworICAgaWYgKCFnbHhfc2Ny ZWVuX2luaXQoJnBzYy0+YmFzZSwgc2NyZWVuLCBwcml2KSkgeworICAgICAgZnJlZShwc2MpOwor ICAgICAgcmV0dXJuIE5VTEw7CisgICB9CisKKyAgIHBzYy0+ZmQgPSBkcmkzX29wZW4ocHJpdi0+ ZHB5LCBSb290V2luZG93KHByaXYtPmRweSwgc2NyZWVuKSwgTm9uZSk7CisgICBpZiAocHNjLT5m ZCA8IDApIHsKKyAgICAgIGdseF9zY3JlZW5fY2xlYW51cCgmcHNjLT5iYXNlKTsKKyAgICAgIGZy ZWUocHNjKTsKKyAgICAgIEluZm9NZXNzYWdlRigic2NyZWVuICVkIGRvZXMgbm90IGFwcGVhciB0 byBiZSBEUkkzIGNhcGFibGVcbiIsIHNjcmVlbik7CisgICAgICByZXR1cm4gTlVMTDsKKyAgIH0K KyAgIGRldmljZU5hbWUgPSBOVUxMOworCisgICBkcml2ZXJOYW1lID0gZHJpM19nZXRfZHJpdmVy X2Zvcl9mZChwc2MtPmZkKTsKKyAgIGlmICghZHJpdmVyTmFtZSkgeworICAgICAgRXJyb3JNZXNz YWdlRigiTm8gZHJpdmVyIGZvdW5kXG4iKTsKKyAgICAgIGdvdG8gaGFuZGxlX2Vycm9yOworICAg fQorCisgICBwc2MtPmRyaXZlciA9IGRyaU9wZW5Ecml2ZXIoZHJpdmVyTmFtZSk7CisgICBpZiAo cHNjLT5kcml2ZXIgPT0gTlVMTCkgeworICAgICAgRXJyb3JNZXNzYWdlRigiZHJpdmVyIHBvaW50 ZXIgbWlzc2luZ1xuIik7CisgICAgICBnb3RvIGhhbmRsZV9lcnJvcjsKKyAgIH0KKworICAgZXh0 ZW5zaW9ucyA9IGRyaUdldERyaXZlckV4dGVuc2lvbnMocHNjLT5kcml2ZXIsIGRyaXZlck5hbWUp OworICAgaWYgKGV4dGVuc2lvbnMgPT0gTlVMTCkKKyAgICAgIGdvdG8gaGFuZGxlX2Vycm9yOwor CisgICBmb3IgKGkgPSAwOyBleHRlbnNpb25zW2ldOyBpKyspIHsKKyAgICAgIGlmIChzdHJjbXAo ZXh0ZW5zaW9uc1tpXS0+bmFtZSwgX19EUklfQ09SRSkgPT0gMCkKKwkgcHNjLT5jb3JlID0gKF9f RFJJY29yZUV4dGVuc2lvbiAqKSBleHRlbnNpb25zW2ldOworICAgICAgaWYgKHN0cmNtcChleHRl bnNpb25zW2ldLT5uYW1lLCBfX0RSSV9EUkkzKSA9PSAwKQorCSBwc2MtPmRyaTMgPSAoX19EUklk cmkzRXh0ZW5zaW9uICopIGV4dGVuc2lvbnNbaV07CisgICB9CisKKyAgIGlmIChwc2MtPmNvcmUg PT0gTlVMTCB8fCBwc2MtPmRyaTMgPT0gTlVMTCkgeworICAgICAgRXJyb3JNZXNzYWdlRigiY29y ZSBkcmkgb3IgZHJpMyBleHRlbnNpb24gbm90IGZvdW5kXG4iKTsKKyAgICAgIGdvdG8gaGFuZGxl X2Vycm9yOworICAgfQorCisgICBwc2MtPmRyaVNjcmVlbiA9CisgICAgICBwc2MtPmRyaTMtPmNy ZWF0ZU5ld1NjcmVlbjIoc2NyZWVuLCBwc2MtPmZkLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChjb25zdCBfX0RSSWV4dGVuc2lvbiAqKikKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmcGRwLT5sb2FkZXJfZXh0ZW5zaW9uc1swXSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBleHRlbnNpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICZkcml2ZXJfY29uZmlncywgcHNjKTsKKworICAgaWYgKHBzYy0+ZHJpU2NyZWVu ID09IE5VTEwpIHsKKyAgICAgIEVycm9yTWVzc2FnZUYoImZhaWxlZCB0byBjcmVhdGUgZHJpIHNj cmVlblxuIik7CisgICAgICBnb3RvIGhhbmRsZV9lcnJvcjsKKyAgIH0KKworICAgZHJpM19iaW5k X2V4dGVuc2lvbnMocHNjLCBwcml2LCBkcml2ZXJOYW1lKTsKKworICAgY29uZmlncyA9IGRyaUNv bnZlcnRDb25maWdzKHBzYy0+Y29yZSwgcHNjLT5iYXNlLmNvbmZpZ3MsIGRyaXZlcl9jb25maWdz KTsKKyAgIHZpc3VhbHMgPSBkcmlDb252ZXJ0Q29uZmlncyhwc2MtPmNvcmUsIHBzYy0+YmFzZS52 aXN1YWxzLCBkcml2ZXJfY29uZmlncyk7CisKKyAgIGlmICghY29uZmlncyB8fCAhdmlzdWFscykK KyAgICAgICBnb3RvIGhhbmRsZV9lcnJvcjsKKworICAgZ2x4X2NvbmZpZ19kZXN0cm95X2xpc3Qo cHNjLT5iYXNlLmNvbmZpZ3MpOworICAgcHNjLT5iYXNlLmNvbmZpZ3MgPSBjb25maWdzOworICAg Z2x4X2NvbmZpZ19kZXN0cm95X2xpc3QocHNjLT5iYXNlLnZpc3VhbHMpOworICAgcHNjLT5iYXNl LnZpc3VhbHMgPSB2aXN1YWxzOworCisgICBwc2MtPmRyaXZlcl9jb25maWdzID0gZHJpdmVyX2Nv bmZpZ3M7CisKKyAgIHBzYy0+YmFzZS52dGFibGUgPSAmZHJpM19zY3JlZW5fdnRhYmxlOworICAg cHNwID0gJnBzYy0+dnRhYmxlOworICAgcHNjLT5iYXNlLmRyaVNjcmVlbiA9IHBzcDsKKyAgIHBz cC0+ZGVzdHJveVNjcmVlbiA9IGRyaTNfZGVzdHJveV9zY3JlZW47CisgICBwc3AtPmNyZWF0ZURy YXdhYmxlID0gZHJpM19jcmVhdGVfZHJhd2FibGU7CisgICBwc3AtPnN3YXBCdWZmZXJzID0gZHJp M19zd2FwX2J1ZmZlcnM7CisgICBwc3AtPmdldERyYXdhYmxlTVNDID0gTlVMTDsKKyAgIHBzcC0+ d2FpdEZvck1TQyA9IE5VTEw7CisgICBwc3AtPndhaXRGb3JTQkMgPSBOVUxMOworICAgcHNwLT5z ZXRTd2FwSW50ZXJ2YWwgPSBOVUxMOworICAgcHNwLT5nZXRTd2FwSW50ZXJ2YWwgPSBOVUxMOwor CisjaWYgSEFTX1NCQworICAgaWYgKHBkcC0+ZHJpTWlub3IgPj0gMikgeworICAgICAgcHNwLT5n ZXREcmF3YWJsZU1TQyA9IGRyaTNEcmF3YWJsZUdldE1TQzsKKyAgICAgIHBzcC0+d2FpdEZvck1T QyA9IGRyaTNXYWl0Rm9yTVNDOworICAgICAgcHNwLT53YWl0Rm9yU0JDID0gZHJpM1dhaXRGb3JT QkM7CisgICAgICBwc3AtPnNldFN3YXBJbnRlcnZhbCA9IGRyaTNTZXRTd2FwSW50ZXJ2YWw7Cisg ICAgICBwc3AtPmdldFN3YXBJbnRlcnZhbCA9IGRyaTNHZXRTd2FwSW50ZXJ2YWw7CisgICAgICBf X2dsWEVuYWJsZURpcmVjdEV4dGVuc2lvbigmcHNjLT5iYXNlLCAiR0xYX09NTF9zeW5jX2NvbnRy b2wiKTsKKyAgIH0KKyNlbmRpZgorCisgICBwc3AtPmNvcHlTdWJCdWZmZXIgPSBkcmkzX2NvcHlf c3ViX2J1ZmZlcjsKKyAgIF9fZ2xYRW5hYmxlRGlyZWN0RXh0ZW5zaW9uKCZwc2MtPmJhc2UsICJH TFhfTUVTQV9jb3B5X3N1Yl9idWZmZXIiKTsKKworICAgZnJlZShkcml2ZXJOYW1lKTsKKyAgIGZy ZWUoZGV2aWNlTmFtZSk7CisKKyAgIHRtcCA9IGdldGVudigiTElCR0xfU0hPV19GUFMiKTsKKyAg IHBzYy0+c2hvd19mcHMgPSB0bXAgJiYgc3RyY21wKHRtcCwgIjEiKSA9PSAwOworCisgICByZXR1 cm4gJnBzYy0+YmFzZTsKKworaGFuZGxlX2Vycm9yOgorICAgQ3JpdGljYWxFcnJvck1lc3NhZ2VG KCJmYWlsZWQgdG8gbG9hZCBkcml2ZXI6ICVzXG4iLCBkcml2ZXJOYW1lKTsKKworICAgaWYgKGNv bmZpZ3MpCisgICAgICAgZ2x4X2NvbmZpZ19kZXN0cm95X2xpc3QoY29uZmlncyk7CisgICBpZiAo dmlzdWFscykKKyAgICAgICBnbHhfY29uZmlnX2Rlc3Ryb3lfbGlzdCh2aXN1YWxzKTsKKyAgIGlm IChwc2MtPmRyaVNjcmVlbikKKyAgICAgICBwc2MtPmNvcmUtPmRlc3Ryb3lTY3JlZW4ocHNjLT5k cmlTY3JlZW4pOworICAgcHNjLT5kcmlTY3JlZW4gPSBOVUxMOworICAgaWYgKHBzYy0+ZmQgPj0g MCkKKyAgICAgIGNsb3NlKHBzYy0+ZmQpOworICAgaWYgKHBzYy0+ZHJpdmVyKQorICAgICAgZGxj bG9zZShwc2MtPmRyaXZlcik7CisKKyAgIGZyZWUoZHJpdmVyTmFtZSk7CisgICBmcmVlKGRldmlj ZU5hbWUpOworICAgZ2x4X3NjcmVlbl9jbGVhbnVwKCZwc2MtPmJhc2UpOworICAgZnJlZShwc2Mp OworCisgICByZXR1cm4gTlVMTDsKK30KKworLyogQ2FsbGVkIGZyb20gX19nbFhGcmVlRGlzcGxh eVByaXZhdGUuCisgKi8KK3N0YXRpYyB2b2lkCitkcmkzX2Rlc3Ryb3lfZGlzcGxheShfX0dMWERS SWRpc3BsYXkgKiBkcHkpCit7CisgICBmcmVlKGRweSk7Cit9CisKKy8qCisgKiBBbGxvY2F0ZSwg aW5pdGlhbGl6ZSBhbmQgcmV0dXJuIGEgX19EUklkaXNwbGF5UHJpdmF0ZSBvYmplY3QuCisgKiBU aGlzIGlzIGNhbGxlZCBmcm9tIF9fZ2xYSW5pdGlhbGl6ZSgpIHdoZW4gd2UgYXJlIGdpdmVuIGEg bmV3CisgKiBkaXNwbGF5IHBvaW50ZXIuCisgKi8KK19YX0hJRERFTiBfX0dMWERSSWRpc3BsYXkg KgorZHJpM19jcmVhdGVfZGlzcGxheShEaXNwbGF5ICogZHB5KQoreworICAgc3RydWN0IGRyaTNf ZGlzcGxheSAqcGRwOworICAgaW50IGk7CisKKyAgIHBkcCA9IG1hbGxvYyhzaXplb2YgKnBkcCk7 CisgICBpZiAocGRwID09IE5VTEwpCisgICAgICByZXR1cm4gTlVMTDsKKworICAgaWYgKCFkcmkz X3F1ZXJ5X3ZlcnNpb24oZHB5LCAmcGRwLT5kcmkzTWFqb3IsICZwZHAtPmRyaTNNaW5vcikpIHsK KyAgICAgIGZyZWUocGRwKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgfQorCisgICBwZHAtPmJh c2UuZGVzdHJveURpc3BsYXkgPSBkcmkzX2Rlc3Ryb3lfZGlzcGxheTsKKyAgIHBkcC0+YmFzZS5j cmVhdGVTY3JlZW4gPSBkcmkzX2NyZWF0ZV9zY3JlZW47CisKKyAgIGkgPSAwOworCisgICBwZHAt PmxvYWRlcl9leHRlbnNpb25zW2krK10gPSAmZHJpM0xvYWRlckV4dGVuc2lvbi5iYXNlOworICAg CisgICBwZHAtPmxvYWRlcl9leHRlbnNpb25zW2krK10gPSAmc3lzdGVtVGltZUV4dGVuc2lvbi5i YXNlOworCisgICBwZHAtPmxvYWRlcl9leHRlbnNpb25zW2krK10gPSBOVUxMOworCisgICByZXR1 cm4gJnBkcC0+YmFzZTsKK30KKworI2VuZGlmIC8qIEdMWF9ESVJFQ1RfUkVOREVSSU5HICovCmRp ZmYgLS1naXQgYS9zcmMvZ2x4L2RyaTNfcHJpdi5oIGIvc3JjL2dseC9kcmkzX3ByaXYuaApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzAzYjM5Ci0tLSAvZGV2L251bGwKKysr IGIvc3JjL2dseC9kcmkzX3ByaXYuaApAQCAtMCwwICsxLDEyOCBAQAorLyoKKyAqIENvcHlyaWdo dCDCqSAyMDEzIEtlaXRoIFBhY2thcmQKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwg bW9kaWZ5LCBkaXN0cmlidXRlLCBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKKyAqIGRv Y3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVl LCBwcm92aWRlZCB0aGF0CisgKiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4g YWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0CisgKiBub3RpY2UgYW5kIHRo aXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwg YW5kCisgKiB0aGF0IHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVycyBub3QgYmUgdXNl ZCBpbiBhZHZlcnRpc2luZyBvcgorICogcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0 aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLAorICogd3JpdHRlbiBwcmlvciBw ZXJtaXNzaW9uLiAgVGhlIGNvcHlyaWdodCBob2xkZXJzIG1ha2Ugbm8gcmVwcmVzZW50YXRpb25z CisgKiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBv c2UuICBJdCBpcyBwcm92aWRlZCAiYXMKKyAqIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGll ZCB3YXJyYW50eS4KKyAqCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUlMgRElTQ0xBSU0gQUxMIFdB UlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwKKyAqIElOQ0xVRElORyBBTEwg SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUywgSU4gTk8K KyAqIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBT UEVDSUFMLCBJTkRJUkVDVCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1B R0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsCisgKiBEQVRBIE9SIFBS T0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9U SEVSCisgKiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04g V0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFCisgKiBPRiBUSElTIFNPRlRXQVJFLgorICovCisK Ky8qIFRoaXMgZmlsZSB3YXMgZGVyaXZlZCBmcm9tIGRyaTJfcHJpdi5oIHdoaWNoIGNhcnJpZXMg dGhlIGZvbGxvd2luZworICogY29weXJpZ2h0OgorICoKKyAqIENvcHlyaWdodCDCqSAyMDA4IFJl ZCBIYXQsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9m IGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3 YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdC0KKyAqIHdh cmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVk aW5nIHdpdGhvdXQKKyAqIGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlm eSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2Yg dGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3 YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJp Z2h0CisgKiBub3RpY2UocykgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFs bCBjb3BpZXMgb2YgdGhlIFNvZnQtCisgKiB3YXJlIGFuZCB0aGF0IGJvdGggdGhlIGFib3ZlIGNv cHlyaWdodCBub3RpY2UocykgYW5kIHRoaXMgcGVybWlzc2lvbgorICogbm90aWNlIGFwcGVhciBp biBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJ REVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MKKyAqIE9S IElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMLQorICogSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB TkQgTk9OSU5GUklOR0VNRU5UIE9GIFRISVJEIFBBUlRZCisgKiBSSUdIVFMuIElOIE5PIEVWRU5U IFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIEhPTERFUlMgSU5DTFVERUQgSU4KKyAqIFRI SVMgTk9USUNFIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBPUiBBTlkgU1BFQ0lBTCBJTkRJUkVD VCBPUiBDT05TRS0KKyAqIFFVRU5USUFMIERBTUFHRVMsIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VW RVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsCisgKiBEQVRBIE9SIFBST0ZJVFMsIFdIRVRI RVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSCisgKiBUT1JU SU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNF IE9SIFBFUkZPUi0KKyAqIE1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKgorICogRXhjZXB0IGFz IGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUgb2YgYSBjb3B5cmlnaHQgaG9sZGVy IHNoYWxsCisgKiBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJv bW90ZSB0aGUgc2FsZSwgdXNlIG9yCisgKiBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJl IHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBhdXRob3JpemF0aW9uIG9mCisgKiB0aGUgY29weXJpZ2h0 IGhvbGRlci4KKyAqCisgKiBBdXRob3JzOgorICogICBLcmlzdGlhbiBIw7hnc2JlcmcgKGtyaEBy ZWRoYXQuY29tKQorICovCisKKyNpbmNsdWRlIDx4Y2IveGNiLmg+CisjaW5jbHVkZSA8eGNiL2Ry aTMuaD4KKyNpbmNsdWRlIDx4Y2Ivc3luYy5oPgorCisvKiBGcm9tIHhtbHBvb2wvb3B0aW9ucy5o LCB1c2VyIGV4cG9zZWQgc28gc2hvdWxkIGJlIHN0YWJsZSAqLworI2RlZmluZSBEUklfQ09ORl9W QkxBTktfTkVWRVIgMAorI2RlZmluZSBEUklfQ09ORl9WQkxBTktfREVGX0lOVEVSVkFMXzAgMQor I2RlZmluZSBEUklfQ09ORl9WQkxBTktfREVGX0lOVEVSVkFMXzEgMgorI2RlZmluZSBEUklfQ09O Rl9WQkxBTktfQUxXQVlTX1NZTkMgMworCitzdHJ1Y3QgZHJpM19kaXNwbGF5Cit7CisgICBfX0dM WERSSWRpc3BsYXkgYmFzZTsKKworICAgY29uc3QgX19EUklleHRlbnNpb24gKmxvYWRlcl9leHRl bnNpb25zWzhdOworCisgICAvKiBEUkkzIGJpdHMgKi8KKyAgIGludCBkcmkzTWFqb3I7CisgICBp bnQgZHJpM01pbm9yOworfTsKKworc3RydWN0IGRyaTNfc2NyZWVuIHsKKyAgIHN0cnVjdCBnbHhf c2NyZWVuIGJhc2U7CisKKyAgIF9fRFJJc2NyZWVuICpkcmlTY3JlZW47CisgICBfX0dMWERSSXNj cmVlbiB2dGFibGU7CisKKyAgIGNvbnN0IF9fRFJJZHJpM0V4dGVuc2lvbiAqZHJpMzsKKyAgIGNv bnN0IF9fRFJJY29yZUV4dGVuc2lvbiAqY29yZTsKKyAgIGNvbnN0IF9fRFJJMmZsdXNoRXh0ZW5z aW9uICpmOworICAgY29uc3QgX19EUkkyY29uZmlnUXVlcnlFeHRlbnNpb24gKmNvbmZpZzsKKyAg IGNvbnN0IF9fRFJJdGV4QnVmZmVyRXh0ZW5zaW9uICp0ZXhCdWZmZXI7CisgICBjb25zdCBfX0RS STJ0aHJvdHRsZUV4dGVuc2lvbiAqdGhyb3R0bGU7CisgICBjb25zdCBfX0RSSWNvbmZpZyAqKmRy aXZlcl9jb25maWdzOworCisgICB2b2lkICpkcml2ZXI7CisgICBpbnQgZmQ7CisKKyAgIEJvb2wg c2hvd19mcHM7Cit9OworCitzdHJ1Y3QgZHJpM19jb250ZXh0Cit7CisgICBzdHJ1Y3QgZ2x4X2Nv bnRleHQgYmFzZTsKKyAgIF9fRFJJY29udGV4dCAqZHJpQ29udGV4dDsKK307CisKK3N0cnVjdCBk cmkzX2RyYXdhYmxlCit7CisgICBfX0dMWERSSWRyYXdhYmxlIGJhc2U7CisgICBfX0RSSWRyYXdh YmxlICpkcmlEcmF3YWJsZTsKKyAgIGludCB3aWR0aCwgaGVpZ2h0OworICAgaW50IHN3YXBfaW50 ZXJ2YWw7CisgICB1aW50OF90IGhhdmVfYmFjazsKKyAgIHVpbnQ4X3QgaGF2ZV9mYWtlX2Zyb250 OworICAgdWludDhfdCBpc19waXhtYXA7CisKKyAgIHVpbnQ2NF90IHByZXZpb3VzX3RpbWU7Cisg ICB1bnNpZ25lZCBmcmFtZXM7CisKKyAgIF9fRFJJZHJpM0J1ZmZlciAqYnVmZmVyc1syXTsKKyAg IGludCBkZXB0aDsKKworICAgeGNiX3ByZXNlbnRfZXZlbnRfdCBlaWQ7CisgICB4Y2JfZ2NvbnRl eHRfdCBnYzsKKyAgIGNvbnN0IHhjYl9xdWVyeV9leHRlbnNpb25fcmVwbHlfdCAqZHJpM19leHRl bnNpb247CisgICBjb25zdCB4Y2JfcXVlcnlfZXh0ZW5zaW9uX3JlcGx5X3QgKnByZXNlbnRfZXh0 ZW5zaW9uOworICAgeGNiX3NwZWNpYWxfZXZlbnRfdCAqc3BlY2lhbF9ldmVudDsKK307CisKK2No YXIgKgorZHJpM19nZXRfZHJpdmVyX2Zvcl9mZChpbnQgZmQpOwpkaWZmIC0tZ2l0IGEvc3JjL2ds eC9nbHhjbGllbnQuaCBiL3NyYy9nbHgvZ2x4Y2xpZW50LmgKaW5kZXggODFhZTc5Mi4uZWMxNjhh YSAxMDA2NDQKLS0tIGEvc3JjL2dseC9nbHhjbGllbnQuaAorKysgYi9zcmMvZ2x4L2dseGNsaWVu dC5oCkBAIC0xNTAsNiArMTUwLDcgQEAgZXh0ZXJuIF9fR0xYRFJJZGlzcGxheSAqZHJpMkNyZWF0 ZURpc3BsYXkoRGlzcGxheSAqIGRweSk7CiBleHRlcm4gdm9pZCBkcmkySW52YWxpZGF0ZUJ1ZmZl cnMoRGlzcGxheSAqZHB5LCBYSUQgZHJhd2FibGUpOwogZXh0ZXJuIHVuc2lnbmVkIGRyaTJHZXRT d2FwRXZlbnRUeXBlKERpc3BsYXkgKmRweSwgWElEIGRyYXdhYmxlKTsKIAorZXh0ZXJuIF9fR0xY RFJJZGlzcGxheSAqZHJpM19jcmVhdGVfZGlzcGxheShEaXNwbGF5ICogZHB5KTsKIAogLyoKICoq IEZ1bmN0aW9ucyB0byBvYnRhaW4gZHJpdmVyIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZnJv bSBhIGRpcmVjdApAQCAtNTgyLDYgKzU4Myw3IEBAIHN0cnVjdCBnbHhfZGlzcGxheQogICAgX19H TFhEUklkaXNwbGF5ICpkcmlzd0Rpc3BsYXk7CiAgICBfX0dMWERSSWRpc3BsYXkgKmRyaURpc3Bs YXk7CiAgICBfX0dMWERSSWRpc3BsYXkgKmRyaTJEaXNwbGF5OworICAgX19HTFhEUklkaXNwbGF5 ICpkcmkzRGlzcGxheTsKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvc3JjL2dseC9nbHhleHQu YyBiL3NyYy9nbHgvZ2x4ZXh0LmMKaW5kZXggYmVhMWNjYi4uYzZlNGQ5ZiAxMDA2NDQKLS0tIGEv c3JjL2dseC9nbHhleHQuYworKysgYi9zcmMvZ2x4L2dseGV4dC5jCkBAIC03NzAsNyArNzcwLDkg QEAgQWxsb2NBbmRGZXRjaFNjcmVlbkNvbmZpZ3MoRGlzcGxheSAqIGRweSwgc3RydWN0IGdseF9k aXNwbGF5ICogcHJpdikKICAgIGZvciAoaSA9IDA7IGkgPCBzY3JlZW5zOyBpKyssIHBzYysrKSB7 CiAgICAgICBwc2MgPSBOVUxMOwogI2lmIGRlZmluZWQoR0xYX0RJUkVDVF9SRU5ERVJJTkcpICYm ICFkZWZpbmVkKEdMWF9VU0VfQVBQTEVHTCkKLSAgICAgIGlmIChwcml2LT5kcmkyRGlzcGxheSkK KyAgICAgIGlmIChwcml2LT5kcmkzRGlzcGxheSkKKyAgICAgICAgIHBzYyA9ICgqcHJpdi0+ZHJp M0Rpc3BsYXktPmNyZWF0ZVNjcmVlbikgKGksIHByaXYpOworICAgICAgaWYgKHBzYyA9PSBOVUxM ICYmIHByaXYtPmRyaTJEaXNwbGF5KQogCSBwc2MgPSAoKnByaXYtPmRyaTJEaXNwbGF5LT5jcmVh dGVTY3JlZW4pIChpLCBwcml2KTsKICAgICAgIGlmIChwc2MgPT0gTlVMTCAmJiBwcml2LT5kcmlE aXNwbGF5KQogCSBwc2MgPSAoKnByaXYtPmRyaURpc3BsYXktPmNyZWF0ZVNjcmVlbikgKGksIHBy aXYpOwpAQCAtODYzLDYgKzg2NSw4IEBAIF9fZ2xYSW5pdGlhbGl6ZShEaXNwbGF5ICogZHB5KQog ICAgICoqIChlLmcuLCB0aG9zZSBjYWxsZWQgaW4gQWxsb2NBbmRGZXRjaFNjcmVlbkNvbmZpZ3Mp LgogICAgICovCiAgICBpZiAoZ2x4X2RpcmVjdCAmJiBnbHhfYWNjZWwpIHsKKyAgICAgIGlmICgh Z2V0ZW52KCJMSUJHTF9EUkkzX0RJU0FCTEUiKSkKKyAgICAgICAgIGRweVByaXYtPmRyaTNEaXNw bGF5ID0gZHJpM19jcmVhdGVfZGlzcGxheShkcHkpOwogICAgICAgZHB5UHJpdi0+ZHJpMkRpc3Bs YXkgPSBkcmkyQ3JlYXRlRGlzcGxheShkcHkpOwogICAgICAgZHB5UHJpdi0+ZHJpRGlzcGxheSA9 IGRyaUNyZWF0ZURpc3BsYXkoZHB5KTsKICAgIH0KZGlmZiAtLWdpdCBhL3NyYy9tZXNhL2RyaXZl cnMvZHJpL2NvbW1vbi9kcmlfdXRpbC5jIGIvc3JjL21lc2EvZHJpdmVycy9kcmkvY29tbW9uL2Ry aV91dGlsLmMKaW5kZXggNTM5ZmI0Yi4uOWIyNGU1NCAxMDA2NDQKLS0tIGEvc3JjL21lc2EvZHJp dmVycy9kcmkvY29tbW9uL2RyaV91dGlsLmMKKysrIGIvc3JjL21lc2EvZHJpdmVycy9kcmkvY29t bW9uL2RyaV91dGlsLmMKQEAgLTcyOSw3ICs3MjksNyBAQCBjb25zdCBfX0RSSWNvcmVFeHRlbnNp b24gZHJpQ29yZUV4dGVuc2lvbiA9IHsKICAgICAuY3JlYXRlTmV3RHJhd2FibGUgICAgICAgICAg PSBOVUxMLAogICAgIC5kZXN0cm95RHJhd2FibGUgICAgICAgICAgICA9IGRyaURlc3Ryb3lEcmF3 YWJsZSwKICAgICAuc3dhcEJ1ZmZlcnMgICAgICAgICAgICAgICAgPSBkcmlTd2FwQnVmZmVycywg Lyogc3dyYXN0ICovCi0gICAgLmNyZWF0ZU5ld0NvbnRleHQgICAgICAgICAgID0gZHJpMkNyZWF0 ZU5ld0NvbnRleHQsIC8qIHN3cmFzdCAqLworICAgIC5jcmVhdGVOZXdDb250ZXh0ICAgICAgICAg ICA9IGRyaUNyZWF0ZU5ld0NvbnRleHQsIC8qIHN3cmFzdCAqLwogICAgIC5jb3B5Q29udGV4dCAg ICAgICAgICAgICAgICA9IGRyaUNvcHlDb250ZXh0LAogICAgIC5kZXN0cm95Q29udGV4dCAgICAg ICAgICAgICA9IGRyaURlc3Ryb3lDb250ZXh0LAogICAgIC5iaW5kQ29udGV4dCAgICAgICAgICAg ICAgICA9IGRyaUJpbmRDb250ZXh0LApAQCAtNzQ3LDE2ICs3NDcsMTYgQEAgY29uc3QgX19EUklk cmkyRXh0ZW5zaW9uIGRyaURSSTJFeHRlbnNpb24gPSB7CiAgICAgLmNyZWF0ZU5ld0NvbnRleHRG b3JBUEkgICAgID0gZHJpQ3JlYXRlTmV3Q29udGV4dEZvckFQSSwKICAgICAuYWxsb2NhdGVCdWZm ZXIgICAgICAgICAgICAgPSBkcmkyQWxsb2NhdGVCdWZmZXIsCiAgICAgLnJlbGVhc2VCdWZmZXIg ICAgICAgICAgICAgID0gZHJpMlJlbGVhc2VCdWZmZXIsCi0gICAgLmNyZWF0ZUNvbnRleHRBdHRy aWJzICAgICAgID0gZHJpQ3JlYXRlQ29udGV4dEF0dHJpYnMKKyAgICAuY3JlYXRlQ29udGV4dEF0 dHJpYnMgICAgICAgPSBkcmlDcmVhdGVDb250ZXh0QXR0cmlicywKICAgICAuY3JlYXRlTmV3U2Ny ZWVuMiAgICAgICAgICAgPSBkcmkyQ3JlYXRlTmV3U2NyZWVuMiwKIH07CiAKIGNvbnN0IF9fRFJJ c3dyYXN0RXh0ZW5zaW9uIGRyaVNXUmFzdEV4dGVuc2lvbiA9IHsKICAgICB7IF9fRFJJX1NXUkFT VCwgNCB9LAogICAgIGRyaVNXUmFzdENyZWF0ZU5ld1NjcmVlbiwKLSAgICBkcmkyQ3JlYXRlTmV3 RHJhd2FibGUsCi0gICAgZHJpMkNyZWF0ZU5ld0NvbnRleHRGb3JBUEksCi0gICAgZHJpMkNyZWF0 ZUNvbnRleHRBdHRyaWJzLAorICAgIGRyaUNyZWF0ZU5ld0RyYXdhYmxlLAorICAgIGRyaUNyZWF0 ZU5ld0NvbnRleHRGb3JBUEksCisgICAgZHJpQ3JlYXRlQ29udGV4dEF0dHJpYnMsCiAgICAgZHJp U1dSYXN0Q3JlYXRlTmV3U2NyZWVuMiwKIH07CiAKQEAgLTc5MiwzICs3OTIsMTU2IEBAIGRyaVVw ZGF0ZUZyYW1lYnVmZmVyU2l6ZShzdHJ1Y3QgZ2xfY29udGV4dCAqY3R4LCBjb25zdCBfX0RSSWRy YXdhYmxlICpkUHJpdikKICAgICAgIGFzc2VydChmYi0+SGVpZ2h0ID09IGRQcml2LT5oKTsKICAg IH0KIH0KKworLyoKKyAqIENvcHlyaWdodCDCqSAyMDEzIEtlaXRoIFBhY2thcmQKKyAqCisgKiBQ ZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlLCBhbmQgc2VsbCB0aGlz IHNvZnR3YXJlIGFuZCBpdHMKKyAqIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhl cmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0CisgKiB0aGUgYWJvdmUgY29w eXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29w eXJpZ2h0CisgKiBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1 cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5kCisgKiB0aGF0IHRoZSBuYW1lIG9mIHRoZSBjb3B5 cmlnaHQgaG9sZGVycyBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvcgorICogcHVibGljaXR5 IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp ZmljLAorICogd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAgVGhlIGNvcHlyaWdodCBob2xkZXJz IG1ha2Ugbm8gcmVwcmVzZW50YXRpb25zCisgKiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhp cyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMKKyAqIGlzIiB3 aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqCisgKiBUSEUgQ09QWVJJR0hU IEhPTERFUlMgRElTQ0xBSU0gQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZU V0FSRSwKKyAqIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ TElUWSBBTkQgRklUTkVTUywgSU4gTk8KKyAqIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9M REVSUyBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCBPUgorICogQ09OU0VRVUVO VElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9T UyBPRiBVU0UsCisgKiBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENP TlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSCisgKiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcg T1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFCisgKiBP RiBUSElTIFNPRlRXQVJFLgorICovCisKK3VpbnQzMl90ICoKK2RyaTNEcmF3YWJsZVN0YW1wKF9f RFJJZHJhd2FibGUgKmRyYXdhYmxlKQoreworICAgcmV0dXJuICZkcmF3YWJsZS0+ZHJpMi5zdGFt cDsKK30KKworc3RhdGljIF9fRFJJZHJpM0J1ZmZlciAqCitkcmkzQWxsb2NhdGVCdWZmZXIoX19E UklzY3JlZW4gKnNjcmVlbiwgdW5zaWduZWQgaW50IGRlcHRoLCBpbnQgd2lkdGgsIGludCBoZWln aHQpCit7CisgICByZXR1cm4gKCpkcmkzRHJpdmVyQVBJLmFsbG9jYXRlX2J1ZmZlcikgKHNjcmVl biwgZGVwdGgsIHdpZHRoLCBoZWlnaHQpOworfQorCitzdGF0aWMgdm9pZAorZHJpM1JlbGVhc2VC dWZmZXIoX19EUklzY3JlZW4gKnNjcmVlbiwgX19EUklkcmkzQnVmZmVyICpidWZmZXIpCit7Cisg ICByZXR1cm4gKCpkcmkzRHJpdmVyQVBJLnJlbGVhc2VfYnVmZmVyKSAoc2NyZWVuLCBidWZmZXIp OworfQorCitzdGF0aWMgaW50CitkcmkzQnVmZmVyVG9GZChfX0RSSXNjcmVlbiAqc2NyZWVuLCBf X0RSSWRyaTNCdWZmZXIgKmJ1ZmZlcikKK3sKKyAgIHJldHVybiAoKmRyaTNEcml2ZXJBUEkuYnVm ZmVyX3RvX2ZkKShzY3JlZW4sIGJ1ZmZlcik7Cit9CisKK3N0YXRpYyBfX0RSSWRyaTNCdWZmZXIg KgorZHJpM0ZkVG9CdWZmZXIoX19EUklzY3JlZW4gKnNjcmVlbiwgaW50IGZkLCB1bnNpZ25lZCBp bnQgZm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBzdHJpZGUsIHVuc2lnbmVkIGlu dCBzaXplKQoreworICAgcmV0dXJuICgqZHJpM0RyaXZlckFQSS5mZF90b19idWZmZXIpKHNjcmVl biwgZmQsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgc3RyaWRlLCBzaXplKTsKK30KKworc3RhdGlj IHVpbnQzMl90ICoKK2RyaTNTdGFtcChfX0RSSWRyYXdhYmxlICpkcmF3YWJsZSkKK3sKKyAgIHJl dHVybiAoKmRyaTNEcml2ZXJBUEkuc3RhbXApKGRyYXdhYmxlKTsKK30KKworUFVCTElDIGNvbnN0 IGNoYXIgX19kcmkzQ29uZmlnT3B0aW9uc1tdID0KKyAgIERSSV9DT05GX0JFR0lOCisgICAgICBE UklfQ09ORl9TRUNUSU9OX1BFUkZPUk1BTkNFCisgICAgICAgICBEUklfQ09ORl9WQkxBTktfTU9E RShEUklfQ09ORl9WQkxBTktfREVGX0lOVEVSVkFMXzEpCisgICAgICBEUklfQ09ORl9TRUNUSU9O X0VORAorICAgRFJJX0NPTkZfRU5EOworCitzdGF0aWMgX19EUklzY3JlZW4gKgorZHJpM0NyZWF0 ZU5ld1NjcmVlbjIoaW50IHNjcm4sIGludCBmZCwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IF9fRFJJZXh0ZW5zaW9uICoqZXh0ZW5zaW9ucywKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IF9fRFJJZXh0ZW5zaW9uICoqZHJpdmVyX2V4dGVuc2lvbnMsCisgICAgICAgICAgICAgICAgICAg ICBjb25zdCBfX0RSSWNvbmZpZyAqKipkcml2ZXJfY29uZmlncywgdm9pZCAqZGF0YSkKK3sKKyAg ICBzdGF0aWMgY29uc3QgX19EUklleHRlbnNpb24gKmVtcHR5RXh0ZW5zaW9uTGlzdFtdID0geyBO VUxMIH07CisgICAgX19EUklzY3JlZW4gKnBzcDsKKyAgICBkcm1WZXJzaW9uUHRyIHZlcnNpb247 CisKKyAgICBwc3AgPSBjYWxsb2MoMSwgc2l6ZW9mKCpwc3ApKTsKKyAgICBpZiAoIXBzcCkKKwly ZXR1cm4gTlVMTDsKKworICAgIC8qIEJ5IGRlZmF1bHQsIHVzZSB0aGUgZ2xvYmFsIGRyaURyaXZl ckFQSSBzeW1ib2wgKG5vbi1tZWdhZHJpdmVycykuICovCisgICAgcHNwLT5kcml2ZXIgPSBnbG9i YWxEcml2ZXJBUEk7CisKKyAgICAvKiBJZiB0aGUgZHJpdmVyIGV4cG9zZXMgaXRzIHZ0YWJsZSB0 aHJvdWdoIGl0cyBleHRlbnNpb25zIGxpc3QKKyAgICAgKiAobWVnYWRyaXZlcnMpLCB1c2UgdGhh dCBpbnN0ZWFkLgorICAgICAqLworICAgIGlmIChkcml2ZXJfZXh0ZW5zaW9ucykgeworICAgICAg IGZvciAoaW50IGkgPSAwOyBkcml2ZXJfZXh0ZW5zaW9uc1tpXTsgaSsrKSB7CisgICAgICAgICAg aWYgKHN0cmNtcChkcml2ZXJfZXh0ZW5zaW9uc1tpXS0+bmFtZSwgX19EUklfRFJJVkVSX1ZUQUJM RSkgPT0gMCkgeworICAgICAgICAgICAgIHBzcC0+ZHJpdmVyID0KKyAgICAgICAgICAgICAgICAo KF9fRFJJRHJpdmVyVnRhYmxlRXh0ZW5zaW9uICopZHJpdmVyX2V4dGVuc2lvbnNbaV0pLT52dGFi bGU7CisgICAgICAgICAgfQorICAgICAgIH0KKyAgICB9CisKKyAgICBzZXR1cExvYWRlckV4dGVu c2lvbnMocHNwLCBleHRlbnNpb25zKTsKKyAgICBzZXR1cF9kcmkzX2xvYWRlcl9leHRlbnNpb25z KHBzcCwgZXh0ZW5zaW9ucyk7CisKKyAgICB2ZXJzaW9uID0gZHJtR2V0VmVyc2lvbihmZCk7Cisg ICAgaWYgKHZlcnNpb24pIHsKKwlwc3AtPmRybV92ZXJzaW9uLm1ham9yID0gdmVyc2lvbi0+dmVy c2lvbl9tYWpvcjsKKwlwc3AtPmRybV92ZXJzaW9uLm1pbm9yID0gdmVyc2lvbi0+dmVyc2lvbl9t aW5vcjsKKwlwc3AtPmRybV92ZXJzaW9uLnBhdGNoID0gdmVyc2lvbi0+dmVyc2lvbl9wYXRjaGxl dmVsOworCWRybUZyZWVWZXJzaW9uKHZlcnNpb24pOworICAgIH0KKworICAgIHBzcC0+bG9hZGVy UHJpdmF0ZSA9IGRhdGE7CisKKyAgICBwc3AtPmV4dGVuc2lvbnMgPSBlbXB0eUV4dGVuc2lvbkxp c3Q7CisgICAgcHNwLT5mZCA9IGZkOworICAgIHBzcC0+bXlOdW0gPSBzY3JuOworCisgICAgcHNw LT5hcGlfbWFzayA9ICgxIDw8IF9fRFJJX0FQSV9PUEVOR0wpOworCisgICAgKmRyaXZlcl9jb25m aWdzID0gcHNwLT5kcml2ZXItPkluaXRTY3JlZW4ocHNwKTsKKyAgICBpZiAoKmRyaXZlcl9jb25m aWdzID09IE5VTEwpIHsKKwlmcmVlKHBzcCk7CisJcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAg ZHJpUGFyc2VPcHRpb25JbmZvKCZwc3AtPm9wdGlvbkluZm8sIF9fZHJpM0NvbmZpZ09wdGlvbnMp OworICAgIGRyaVBhcnNlQ29uZmlnRmlsZXMoJnBzcC0+b3B0aW9uQ2FjaGUsICZwc3AtPm9wdGlv bkluZm8sIHBzcC0+bXlOdW0sICJkcmkzIik7CisKKyAgICByZXR1cm4gcHNwOworfQorCit2b2lk CitzZXR1cF9kcmkzX2xvYWRlcl9leHRlbnNpb25zKF9fRFJJc2NyZWVuICpwc3AsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19EUklleHRlbnNpb24gKmNvbnN0KmV4dGVuc2lv bnMpCit7CisgICAgaW50IGk7CisKKyAgICBmb3IgKGkgPSAwOyBleHRlbnNpb25zW2ldOyBpKysp IHsKKyAgICAgICAgaWYgKHN0cmNtcChleHRlbnNpb25zW2ldLT5uYW1lLCBfX0RSSV9EUkkzX0xP QURFUikgPT0gMCkKKyAgICAgICAgICAgcHNwLT5kcmkzLmxvYWRlciA9IChfX0RSSWRyaTNMb2Fk ZXJFeHRlbnNpb24gKikgZXh0ZW5zaW9uc1tpXTsKKyAgICB9Cit9CisKKy8qKiBEUkkzIGludGVy ZmFjZSAqLworY29uc3QgX19EUklkcmkzRXh0ZW5zaW9uIGRyaURSSTNFeHRlbnNpb24gPSB7Cisg ICAgLmJhc2UgPSB7IF9fRFJJX0RSSTMsIDEgfSwKKworICAgIC5jcmVhdGVOZXdTY3JlZW4yICAg ICAgICAgICA9IGRyaTNDcmVhdGVOZXdTY3JlZW4yLAorICAgIC5jcmVhdGVOZXdEcmF3YWJsZSAg ICAgICAgICA9IGRyaUNyZWF0ZU5ld0RyYXdhYmxlLAorICAgIC5jcmVhdGVOZXdDb250ZXh0ICAg ICAgICAgICA9IGRyaUNyZWF0ZU5ld0NvbnRleHQsCisgICAgLmdldEFQSU1hc2sgICAgICAgICAg ICAgICAgID0gZHJpR2V0QVBJTWFzaywKKyAgICAuY3JlYXRlQ29udGV4dEF0dHJpYnMgICAgICAg PSBkcmlDcmVhdGVDb250ZXh0QXR0cmlicywKKyAgICAuYWxsb2NhdGVCdWZmZXIgICAgICAgICAg ICAgPSBkcmkzQWxsb2NhdGVCdWZmZXIsCisgICAgLnJlbGVhc2VCdWZmZXIgICAgICAgICAgICAg ID0gZHJpM1JlbGVhc2VCdWZmZXIsCisgICAgLmJ1ZmZlclRvRmQgICAgICAgICAgICAgICAgID0g ZHJpM0J1ZmZlclRvRmQsCisgICAgLmZkVG9CdWZmZXIgICAgICAgICAgICAgICAgID0gZHJpM0Zk VG9CdWZmZXIsCisgICAgLnN0YW1wICAgICAgICAgICAgICAgICAgICAgID0gZHJpM1N0YW1wLAor fTsKZGlmZiAtLWdpdCBhL3NyYy9tZXNhL2RyaXZlcnMvZHJpL2NvbW1vbi9kcmlfdXRpbC5oIGIv c3JjL21lc2EvZHJpdmVycy9kcmkvY29tbW9uL2RyaV91dGlsLmgKaW5kZXggNWI1NjA2MS4uOWU5 NjI4MiAxMDA2NDQKLS0tIGEvc3JjL21lc2EvZHJpdmVycy9kcmkvY29tbW9uL2RyaV91dGlsLmgK KysrIGIvc3JjL21lc2EvZHJpdmVycy9kcmkvY29tbW9uL2RyaV91dGlsLmgKQEAgLTE3NCw2ICsx NzQsMTAgQEAgc3RydWN0IF9fRFJJc2NyZWVuUmVjIHsKIAlfX0RSSXVzZUludmFsaWRhdGVFeHRl bnNpb24gKnVzZUludmFsaWRhdGU7CiAgICAgfSBkcmkyOwogCisgICAgc3RydWN0IHsKKyAgICAg ICAgX19EUklkcmkzTG9hZGVyRXh0ZW5zaW9uICpsb2FkZXI7CisgICAgfSBkcmkzOworCiAgICAg ZHJpT3B0aW9uQ2FjaGUgb3B0aW9uSW5mbzsKICAgICBkcmlPcHRpb25DYWNoZSBvcHRpb25DYWNo ZTsKIApAQCAtMjc3LDQgKzI4MSwyMyBAQCBkcmkySW52YWxpZGF0ZURyYXdhYmxlKF9fRFJJZHJh d2FibGUgKmRyYXdhYmxlKTsKIGV4dGVybiB2b2lkCiBkcmlVcGRhdGVGcmFtZWJ1ZmZlclNpemUo c3RydWN0IGdsX2NvbnRleHQgKmN0eCwgY29uc3QgX19EUklkcmF3YWJsZSAqZFByaXYpOwogCit1 aW50MzJfdCAqCitkcmkzRHJhd2FibGVTdGFtcChfX0RSSWRyYXdhYmxlICpkcmF3YWJsZSk7CisK K3ZvaWQKK3NldHVwX2RyaTNfbG9hZGVyX2V4dGVuc2lvbnMoX19EUklzY3JlZW4gKnBzcCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19EUklleHRlbnNpb24gKmNvbnN0KmV4 dGVuc2lvbnMpOworCitzdHJ1Y3QgX19kcmkzRHJpdmVyQVBJUmVjIHsKKyAgIF9fRFJJZHJpM0Fs bG9jYXRlQnVmZmVyICAgICAgYWxsb2NhdGVfYnVmZmVyOworICAgX19EUklkcmkzUmVsZWFzZUJ1 ZmZlciAgICAgICByZWxlYXNlX2J1ZmZlcjsKKyAgIF9fRFJJZHJpM0J1ZmZlclRvRmQgICAgICAg ICAgYnVmZmVyX3RvX2ZkOworICAgX19EUklkcmkzRmRUb0J1ZmZlciAgICAgICAgICBmZF90b19i dWZmZXI7CisgICBfX0RSSWRyaTNTdGFtcCAgICAgICAgICAgICAgIHN0YW1wOworfTsKKworZXh0 ZXJuIGNvbnN0IHN0cnVjdCBfX2RyaTNEcml2ZXJBUElSZWMgZHJpM0RyaXZlckFQSTsKKworZXh0 ZXJuIGNvbnN0IF9fRFJJZHJpM0V4dGVuc2lvbiBkcmlEUkkzRXh0ZW5zaW9uOworCiAjZW5kaWYg LyogX0RSSV9VVElMX0hfICovCmRpZmYgLS1naXQgYS9zcmMvbWVzYS9kcml2ZXJzL2RyaS9pOTE1 L2ludGVsX2NvbnRleHQuYyBiL3NyYy9tZXNhL2RyaXZlcnMvZHJpL2k5MTUvaW50ZWxfY29udGV4 dC5jCmluZGV4IDE3OThiYzcuLmI5OWZmMDkgMTAwNjQ0Ci0tLSBhL3NyYy9tZXNhL2RyaXZlcnMv ZHJpL2k5MTUvaW50ZWxfY29udGV4dC5jCisrKyBiL3NyYy9tZXNhL2RyaXZlcnMvZHJpL2k5MTUv aW50ZWxfY29udGV4dC5jCkBAIC05MSw2ICs5MSw4IEBAIGludGVsR2V0U3RyaW5nKHN0cnVjdCBn bF9jb250ZXh0ICogY3R4LCBHTGVudW0gbmFtZSkKICAgIH0KIH0KIAorI2RlZmluZSBmbHVzaEZy b250KHNjcmVlbikgICAgICAoKHNjcmVlbiktPmRyaTMubG9hZGVyID8gKHNjcmVlbiktPmRyaTMu bG9hZGVyLT5mbHVzaEZyb250QnVmZmVyIDogKHNjcmVlbiktPmRyaTIubG9hZGVyLT5mbHVzaEZy b250QnVmZmVyKQorCiBzdGF0aWMgdm9pZAogaW50ZWxfZmx1c2hfZnJvbnQoc3RydWN0IGdsX2Nv bnRleHQgKmN0eCkKIHsKQEAgLTEwMCwxMSArMTAyLDEwIEBAIGludGVsX2ZsdXNoX2Zyb250KHN0 cnVjdCBnbF9jb250ZXh0ICpjdHgpCiAgICAgX19EUklzY3JlZW4gKmNvbnN0IHNjcmVlbiA9IGlu dGVsLT5pbnRlbFNjcmVlbi0+ZHJpU2NyblByaXY7CiAKICAgICBpZiAoaW50ZWwtPmZyb250X2J1 ZmZlcl9kaXJ0eSAmJiBfbWVzYV9pc193aW5zeXNfZmJvKGN0eC0+RHJhd0J1ZmZlcikpIHsKLSAg ICAgIGlmIChzY3JlZW4tPmRyaTIubG9hZGVyLT5mbHVzaEZyb250QnVmZmVyICE9IE5VTEwgJiYK KyAgICAgIGlmIChmbHVzaEZyb250KHNjcmVlbikgJiYgCiAgICAgICAgICAgZHJpRHJhd2FibGUg JiYKICAgICAgICAgICBkcmlEcmF3YWJsZS0+bG9hZGVyUHJpdmF0ZSkgewotICAgICAgICAgc2Ny ZWVuLT5kcmkyLmxvYWRlci0+Zmx1c2hGcm9udEJ1ZmZlcihkcmlEcmF3YWJsZSwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJpRHJhd2FibGUtPmxvYWRl clByaXZhdGUpOworICAgICAgICAgZmx1c2hGcm9udChzY3JlZW4pKGRyaURyYXdhYmxlLCBkcmlE cmF3YWJsZS0+bG9hZGVyUHJpdmF0ZSk7CiAKIAkgLyogV2Ugc2V0IHRoZSBkaXJ0eSBiaXQgaW4g aW50ZWxfcHJlcGFyZV9yZW5kZXIoKSBpZiB3ZSdyZQogCSAgKiBmcm9udCBidWZmZXIgcmVuZGVy aW5nIG9uY2Ugd2UgZ2V0IHRoZXJlLgpAQCAtMTE0LDYgKzExNSw5IEBAIGludGVsX2ZsdXNoX2Zy b250KHN0cnVjdCBnbF9jb250ZXh0ICpjdHgpCiAgICB9CiB9CiAKK3N0YXRpYyB2b2lkCitpbnRl bF91cGRhdGVfZHJpM19idWZmZXJzKHN0cnVjdCBpbnRlbF9jb250ZXh0ICppbnRlbCwgX19EUklk cmF3YWJsZSAqZHJhd2FibGUpOworCiBzdGF0aWMgdW5zaWduZWQKIGludGVsX2JpdHNfcGVyX3Bp eGVsKGNvbnN0IHN0cnVjdCBpbnRlbF9yZW5kZXJidWZmZXIgKnJiKQogewpAQCAtMTk0LDcgKzE5 OCwxMCBAQCBpbnRlbF91cGRhdGVfcmVuZGVyYnVmZmVycyhfX0RSSWNvbnRleHQgKmNvbnRleHQs IF9fRFJJZHJhd2FibGUgKmRyYXdhYmxlKQogICAgaWYgKHVubGlrZWx5KElOVEVMX0RFQlVHICYg REVCVUdfRFJJKSkKICAgICAgIGZwcmludGYoc3RkZXJyLCAiZW50ZXIgJXMsIGRyYXdhYmxlICVw XG4iLCBfX2Z1bmNfXywgZHJhd2FibGUpOwogCi0gICBpbnRlbF91cGRhdGVfZHJpMl9idWZmZXJz KGludGVsLCBkcmF3YWJsZSk7CisgICBpZiAoc2NyZWVuLT5kcmkzLmxvYWRlcikKKyAgICAgIGlu dGVsX3VwZGF0ZV9kcmkzX2J1ZmZlcnMoaW50ZWwsIGRyYXdhYmxlKTsKKyAgIGVsc2UKKyAgICAg IGludGVsX3VwZGF0ZV9kcmkyX2J1ZmZlcnMoaW50ZWwsIGRyYXdhYmxlKTsKIAogICAgZHJpVXBk YXRlRnJhbWVidWZmZXJTaXplKCZpbnRlbC0+Y3R4LCBkcmF3YWJsZSk7CiB9CkBAIC03ODcsMyAr Nzk0LDk3IEBAIGludGVsX3Byb2Nlc3NfZHJpMl9idWZmZXIoc3RydWN0IGludGVsX2NvbnRleHQg KmludGVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHJlZ2lvbik7CiAgICBpbnRlbF9yZWdpb25fcmVsZWFzZSgmcmVnaW9uKTsKIH0KKworLyoqCisg KiBcYnJpZWYgUXVlcnkgRFJJMyB0byBvYnRhaW4gYSBEUklkcmF3YWJsZSdzIGJ1ZmZlcnMuCisg KgorICogVG8gZGV0ZXJtaW5lIHdoaWNoIERSSSBidWZmZXJzIHRvIHJlcXVlc3QsIGV4YW1pbmUg dGhlIHJlbmRlcmJ1ZmZlcnMKKyAqIGF0dGFjaGVkIHRvIHRoZSBkcmF3YWJsZSdzIGZyYW1lYnVm ZmVyLiBUaGVuIHJlcXVlc3QgdGhlIGJ1ZmZlcnMgd2l0aAorICogZHJpMworICoKKyAqIFRoaXMg aXMgY2FsbGVkIGZyb20gaW50ZWxfdXBkYXRlX3JlbmRlcmJ1ZmZlcnMoKS4KKyAqCisgKiBccGFy YW0gZHJhd2FibGUgICAgICBEcmF3YWJsZSB3aG9zZSBidWZmZXJzIGFyZSBxdWVyaWVkLgorICog XHBhcmFtIGJ1ZmZlcnMgICAgICAgW291dF0gTGlzdCBvZiBidWZmZXJzIHJldHVybmVkIGJ5IERS STIgcXVlcnkuCisgKiBccGFyYW0gYnVmZmVyX2NvdW50ICBbb3V0XSBOdW1iZXIgb2YgYnVmZmVy cyByZXR1cm5lZC4KKyAqCisgKiBcc2VlIGludGVsX3VwZGF0ZV9yZW5kZXJidWZmZXJzKCkKKyAq LworCitzdGF0aWMgdm9pZAoraW50ZWxfdXBkYXRlX2RyaTNfYnVmZmVyKHN0cnVjdCBpbnRlbF9j b250ZXh0ICppbnRlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBfX0RSSWRyYXdhYmxlICpk cmF3YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaW50ZWxfcmVuZGVyYnVm ZmVyICpyYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBfX0RSSWRyaTNCdWZmZXIgKmJ1ZmZl cikKK3sKKyAgIHN0cnVjdCBpbnRlbF9yZWdpb24gKnJlZ2lvbiA9IGJ1ZmZlci0+ZHJpdmVyUHJp dmF0ZTsKKworICAgaWYgKCFyYiB8fCAhcmVnaW9uKQorICAgICAgcmV0dXJuOworCisgICB1bnNp Z25lZCBudW1fc2FtcGxlcyA9IHJiLT5CYXNlLkJhc2UuTnVtU2FtcGxlczsKKworICAgaWYgKHJi LT5tdCAmJgorICAgICAgIHJiLT5tdC0+cmVnaW9uICYmCisgICAgICAgcmItPm10LT5yZWdpb24g PT0gcmVnaW9uKQorICAgICAgcmV0dXJuOworCisgICBpbnRlbF9taXB0cmVlX3JlbGVhc2UoJnJi LT5tdCk7CisgICByYi0+bXQgPSBpbnRlbF9taXB0cmVlX2NyZWF0ZV9mb3JfZHJpM19idWZmZXIo aW50ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg YnVmZmVyLT5idWZmZXJfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnRlbF9yYl9mb3JtYXQocmIpLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bV9zYW1wbGVzLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lvbik7Cit9CisKKworc3RhdGlj IHZvaWQKK2ludGVsX3VwZGF0ZV9kcmkzX2J1ZmZlcnMoc3RydWN0IGludGVsX2NvbnRleHQgKmlu dGVsLCBfX0RSSWRyYXdhYmxlICpkcmF3YWJsZSkKK3sKKyAgIHN0cnVjdCBnbF9mcmFtZWJ1ZmZl ciAqZmIgPSBkcmF3YWJsZS0+ZHJpdmVyUHJpdmF0ZTsKKyAgIF9fRFJJc2NyZWVuICpzY3JlZW4g PSBpbnRlbC0+aW50ZWxTY3JlZW4tPmRyaVNjcm5Qcml2OworICAgc3RydWN0IGludGVsX3JlbmRl cmJ1ZmZlciAqZnJvbnRfcmI7CisgICBzdHJ1Y3QgaW50ZWxfcmVuZGVyYnVmZmVyICpiYWNrX3Ji OworICAgaW50IG5lZWRfZnJvbnQgPSAwLCBuZWVkX2JhY2sgPSAwOworICAgX19EUklkcmkzQnVm ZmVyICpmcm9udCwgKmJhY2s7CisgICB1bnNpZ25lZCBpbnQgZm9ybWF0OworCisgICBmcm9udF9y YiA9IGludGVsX2dldF9yZW5kZXJidWZmZXIoZmIsIEJVRkZFUl9GUk9OVF9MRUZUKTsKKyAgIGJh Y2tfcmIgPSBpbnRlbF9nZXRfcmVuZGVyYnVmZmVyKGZiLCBCVUZGRVJfQkFDS19MRUZUKTsKKwor ICAgaWYgKGJhY2tfcmIpCisgICAgICBmb3JtYXQgPSBpbnRlbF9yYl9mb3JtYXQoYmFja19yYik7 CisgICBlbHNlIGlmIChmcm9udF9yYikKKyAgICAgIGZvcm1hdCA9IGludGVsX3JiX2Zvcm1hdChm cm9udF9yYik7CisgICBlbHNlCisgICAgICByZXR1cm47CisKKyAgIGlmICgoaW50ZWwtPmlzX2Zy b250X2J1ZmZlcl9yZW5kZXJpbmcgfHwgaW50ZWwtPmlzX2Zyb250X2J1ZmZlcl9yZWFkaW5nIHx8 ICFiYWNrX3JiKSAmJiBmcm9udF9yYikKKyAgICAgIG5lZWRfZnJvbnQgPSAxOworCisgICBpZiAo YmFja19yYikKKyAgICAgIG5lZWRfYmFjayA9IDE7CisKKyAgICgqc2NyZWVuLT5kcmkzLmxvYWRl ci0+Z2V0QnVmZmVycykgKGRyYXdhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJmRyYXdhYmxlLT53LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJmRyYXdhYmxlLT5oLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJhd2Fi bGUtPmxvYWRlclByaXZhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBuZWVkX2Zyb250LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVl ZF9iYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZyb250LAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJhY2spOworCisgICBpZiAo ZnJvbnQpIHsKKyAgICAgIGFzc2VydChmcm9udF9yYik7CisgICAgICBpbnRlbF91cGRhdGVfZHJp M19idWZmZXIoaW50ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJhd2FibGUs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbnRfcmIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZnJvbnQpOworICAgfQorICAgaWYgKGJhY2spCisgICAgICBpbnRl bF91cGRhdGVfZHJpM19idWZmZXIoaW50ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZHJhd2FibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja19yYiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9t ZXNhL2RyaXZlcnMvZHJpL2k5MTUvaW50ZWxfbWlwbWFwX3RyZWUuYyBiL3NyYy9tZXNhL2RyaXZl cnMvZHJpL2k5MTUvaW50ZWxfbWlwbWFwX3RyZWUuYwppbmRleCA4NDMyYjZkLi45N2RjZjgwIDEw MDY0NAotLS0gYS9zcmMvbWVzYS9kcml2ZXJzL2RyaS9pOTE1L2ludGVsX21pcG1hcF90cmVlLmMK KysrIGIvc3JjL21lc2EvZHJpdmVycy9kcmkvaTkxNS9pbnRlbF9taXBtYXBfdHJlZS5jCkBAIC0z MjIsNiArMzIyLDM5IEBAIGludGVsX21pcHRyZWVfY3JlYXRlX2Zvcl9kcmkyX2J1ZmZlcihzdHJ1 Y3QgaW50ZWxfY29udGV4dCAqaW50ZWwsCiAgICByZXR1cm4gbXQ7CiB9CiAKKy8qKgorICogRm9y IGEgc2luZ2xlc2FtcGxlIERSSTMgYnVmZmVyLCB0aGlzIHNpbXBseSB3cmFwcyB0aGUgZ2l2ZW4g cmVnaW9uIHdpdGggYSBtaXB0cmVlLgorICoKKyAqIEZvciBhIG11bHRpc2FtcGxlIERSSTMgYnVm ZmVyLCB0aGlzIHdyYXBzIHRoZSBnaXZlbiByZWdpb24gd2l0aAorICogYSBzaW5nbGVzYW1wbGUg bWlwdHJlZSwgdGhlbiBjcmVhdGVzIGEgbXVsdGlzYW1wbGUgbWlwdHJlZSBpbnRvIHdoaWNoIHRo ZQorICogc2luZ2xlc2FtcGxlIG1pcHRyZWUgaXMgZW1iZWRkZWQgYXMgYSBjaGlsZC4KKyAqLwor c3RydWN0IGludGVsX21pcG1hcF90cmVlKgoraW50ZWxfbWlwdHJlZV9jcmVhdGVfZm9yX2RyaTNf YnVmZmVyKHN0cnVjdCBpbnRlbF9jb250ZXh0ICppbnRlbCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBlbnVtIF9fRFJJM2J1ZmZlclR5cGUgYnVmZmVyX3R5cGUsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfZm9ybWF0IGZvcm1hdCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBudW1fc2FtcGxlcywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaW50ZWxfcmVnaW9uICpy ZWdpb24pCit7CisgICBzdHJ1Y3QgaW50ZWxfbWlwbWFwX3RyZWUgKm10ID0gTlVMTDsKKworICAg LyogT25seSB0aGUgZnJvbnQgYW5kIGJhY2sgYnVmZmVycywgd2hpY2ggYXJlIGNvbG9yIGJ1ZmZl cnMsIGFyZSBhbGxvY2F0ZWQKKyAgICAqIHRocm91Z2ggRFJJMy4KKyAgICAqLworICAgYXNzZXJ0 KF9tZXNhX2dldF9mb3JtYXRfYmFzZV9mb3JtYXQoZm9ybWF0KSA9PSBHTF9SR0IgfHwKKyAgICAg ICAgICBfbWVzYV9nZXRfZm9ybWF0X2Jhc2VfZm9ybWF0KGZvcm1hdCkgPT0gR0xfUkdCQSk7CisK KyAgIG10ID0gaW50ZWxfbWlwdHJlZV9jcmVhdGVfZm9yX2JvKGludGVsLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcmVnaW9uLT5ibywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpb24tPndpZHRo LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaW9uLT5oZWlnaHQsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpb24tPnBpdGNoLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaW9uLT50aWxpbmcpOworICAgcmV0dXJu IG10OworfQorCiBzdHJ1Y3QgaW50ZWxfbWlwbWFwX3RyZWUqCiBpbnRlbF9taXB0cmVlX2NyZWF0 ZV9mb3JfcmVuZGVyYnVmZmVyKHN0cnVjdCBpbnRlbF9jb250ZXh0ICppbnRlbCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfZm9ybWF0IGZvcm1hdCwKZGlmZiAtLWdp dCBhL3NyYy9tZXNhL2RyaXZlcnMvZHJpL2k5MTUvaW50ZWxfbWlwbWFwX3RyZWUuaCBiL3NyYy9t ZXNhL2RyaXZlcnMvZHJpL2k5MTUvaW50ZWxfbWlwbWFwX3RyZWUuaAppbmRleCAxMTQyYWY2Li4y OTlhZTk5IDEwMDY0NAotLS0gYS9zcmMvbWVzYS9kcml2ZXJzL2RyaS9pOTE1L2ludGVsX21pcG1h cF90cmVlLmgKKysrIGIvc3JjL21lc2EvZHJpdmVycy9kcmkvaTkxNS9pbnRlbF9taXBtYXBfdHJl ZS5oCkBAIC0zMiw2ICszMiw3IEBACiAKICNpbmNsdWRlICJpbnRlbF9zY3JlZW4uaCIKICNpbmNs dWRlICJpbnRlbF9yZWdpb25zLmgiCisjaW5jbHVkZSAiR0wvaW50ZXJuYWwvZHJpX2ludGVyZmFj ZS5oIgogCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIgewpAQCAtMjU4LDYgKzI1OSwx MyBAQCBpbnRlbF9taXB0cmVlX2NyZWF0ZV9mb3JfZHJpMl9idWZmZXIoc3RydWN0IGludGVsX2Nv bnRleHQgKmludGVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2Zv cm1hdCBmb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0 IGludGVsX3JlZ2lvbiAqcmVnaW9uKTsKIAorc3RydWN0IGludGVsX21pcG1hcF90cmVlKgoraW50 ZWxfbWlwdHJlZV9jcmVhdGVfZm9yX2RyaTNfYnVmZmVyKHN0cnVjdCBpbnRlbF9jb250ZXh0ICpp bnRlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIF9fRFJJM2J1 ZmZlclR5cGUgYnVmZmVyX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZ2xfZm9ybWF0IGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB1aW50MzJfdCBudW1fc2FtcGxlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzdHJ1Y3QgaW50ZWxfcmVnaW9uICpyZWdpb24pOworCiAvKioKICAqIENyZWF0ZSBhIG1p cHRyZWUgYXBwcm9wcmlhdGUgYXMgdGhlIHN0b3JhZ2UgZm9yIGEgbm9uLXRleHR1cmUgcmVuZGVy YnVmZmVyLgogICogVGhlIG1pcHRyZWUgaGFzIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczoKZGlm ZiAtLWdpdCBhL3NyYy9tZXNhL2RyaXZlcnMvZHJpL2k5NjUvYnJ3X2NvbnRleHQuYyBiL3NyYy9t ZXNhL2RyaXZlcnMvZHJpL2k5NjUvYnJ3X2NvbnRleHQuYwppbmRleCBjMjEzYjMxLi5lY2Y1YmQ3 IDEwMDY0NAotLS0gYS9zcmMvbWVzYS9kcml2ZXJzL2RyaS9pOTY1L2Jyd19jb250ZXh0LmMKKysr IGIvc3JjL21lc2EvZHJpdmVycy9kcmkvaTk2NS9icndfY29udGV4dC5jCkBAIC0xNTEsNiArMTUx LDggQEAgaW50ZWxJbnZhbGlkYXRlU3RhdGUoc3RydWN0IGdsX2NvbnRleHQgKiBjdHgsIEdMdWlu dCBuZXdfc3RhdGUpCiAgICBicnctPk5ld0dMU3RhdGUgfD0gbmV3X3N0YXRlOwogfQogCisjZGVm aW5lIGZsdXNoRnJvbnQoc2NyZWVuKSAgICAgICgoc2NyZWVuKS0+ZHJpMy5sb2FkZXIgPyAoc2Ny ZWVuKS0+ZHJpMy5sb2FkZXItPmZsdXNoRnJvbnRCdWZmZXIgOiAoc2NyZWVuKS0+ZHJpMi5sb2Fk ZXItPmZsdXNoRnJvbnRCdWZmZXIpCisKIHN0YXRpYyB2b2lkCiBpbnRlbF9mbHVzaF9mcm9udChz dHJ1Y3QgZ2xfY29udGV4dCAqY3R4KQogewpAQCAtMTYwLDggKzE2Miw3IEBAIGludGVsX2ZsdXNo X2Zyb250KHN0cnVjdCBnbF9jb250ZXh0ICpjdHgpCiAgICBfX0RSSXNjcmVlbiAqY29uc3Qgc2Ny ZWVuID0gYnJ3LT5pbnRlbFNjcmVlbi0+ZHJpU2NyblByaXY7CiAKICAgIGlmIChicnctPmZyb250 X2J1ZmZlcl9kaXJ0eSAmJiBfbWVzYV9pc193aW5zeXNfZmJvKGN0eC0+RHJhd0J1ZmZlcikpIHsK LSAgICAgIGlmIChzY3JlZW4tPmRyaTIubG9hZGVyLT5mbHVzaEZyb250QnVmZmVyICE9IE5VTEwg JiYKLSAgICAgICAgICBkcmlEcmF3YWJsZSAmJgorICAgICAgaWYgKGZsdXNoRnJvbnQoc2NyZWVu KSAmJiBkcmlEcmF3YWJsZSAmJgogICAgICAgICAgIGRyaURyYXdhYmxlLT5sb2FkZXJQcml2YXRl KSB7CiAKICAgICAgICAgIC8qIFJlc29sdmUgYmVmb3JlIGZsdXNoaW5nIEZBS0VfRlJPTlRfTEVG VCB0byBGUk9OVF9MRUZULgpAQCAtMTc0LDggKzE3NSw3IEBAIGludGVsX2ZsdXNoX2Zyb250KHN0 cnVjdCBnbF9jb250ZXh0ICpjdHgpCiAgICAgICAgICBpbnRlbF9yZXNvbHZlX2Zvcl9kcmkyX2Zs dXNoKGJydywgZHJpRHJhd2FibGUpOwogICAgICAgICAgaW50ZWxfYmF0Y2hidWZmZXJfZmx1c2go YnJ3KTsKIAotICAgICAgICAgc2NyZWVuLT5kcmkyLmxvYWRlci0+Zmx1c2hGcm9udEJ1ZmZlcihk cmlEcmF3YWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZHJpRHJhd2FibGUtPmxvYWRlclByaXZhdGUpOworICAgICAgICAgZmx1c2hGcm9udChzY3Jl ZW4pKGRyaURyYXdhYmxlLCBkcmlEcmF3YWJsZS0+bG9hZGVyUHJpdmF0ZSk7CiAKICAgICAgICAg IC8qIFdlIHNldCB0aGUgZGlydHkgYml0IGluIGludGVsX3ByZXBhcmVfcmVuZGVyKCkgaWYgd2Un cmUKICAgICAgICAgICAqIGZyb250IGJ1ZmZlciByZW5kZXJpbmcgb25jZSB3ZSBnZXQgdGhlcmUu CkBAIC05MzAsNiArOTMwLDkgQEAgaW50ZWxfcHJvY2Vzc19kcmkyX2J1ZmZlcihzdHJ1Y3QgYnJ3 X2NvbnRleHQgKmJydywKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYnVm ZmVyX25hbWUpOwogCiBzdGF0aWMgdm9pZAoraW50ZWxfdXBkYXRlX2RyaTNfYnVmZmVycyhzdHJ1 Y3QgYnJ3X2NvbnRleHQgKmJydywgX19EUklkcmF3YWJsZSAqZHJhd2FibGUpOworCitzdGF0aWMg dm9pZAogaW50ZWxfdXBkYXRlX2RyaTJfYnVmZmVycyhzdHJ1Y3QgYnJ3X2NvbnRleHQgKmJydywg X19EUklkcmF3YWJsZSAqZHJhd2FibGUpCiB7CiAgICBzdHJ1Y3QgZ2xfZnJhbWVidWZmZXIgKmZi ID0gZHJhd2FibGUtPmRyaXZlclByaXZhdGU7CkBAIC05ODksNiArOTkyLDcgQEAgdm9pZAogaW50 ZWxfdXBkYXRlX3JlbmRlcmJ1ZmZlcnMoX19EUkljb250ZXh0ICpjb250ZXh0LCBfX0RSSWRyYXdh YmxlICpkcmF3YWJsZSkKIHsKICAgIHN0cnVjdCBicndfY29udGV4dCAqYnJ3ID0gY29udGV4dC0+ ZHJpdmVyUHJpdmF0ZTsKKyAgIF9fRFJJc2NyZWVuICpzY3JlZW4gPSBicnctPmludGVsU2NyZWVu LT5kcmlTY3JuUHJpdjsKIAogICAgLyogU2V0IHRoaXMgdXAgZnJvbnQsIHNvIHRoYXQgaW4gY2Fz ZSBvdXIgYnVmZmVycyBnZXQgaW52YWxpZGF0ZWQKICAgICAqIHdoaWxlIHdlJ3JlIGdldHRpbmcg bmV3IGJ1ZmZlcnMsIHdlIGRvbid0IGNsb2JiZXIgdGhlIHN0YW1wIGFuZApAQCAtOTk4LDcgKzEw MDIsMTAgQEAgaW50ZWxfdXBkYXRlX3JlbmRlcmJ1ZmZlcnMoX19EUkljb250ZXh0ICpjb250ZXh0 LCBfX0RSSWRyYXdhYmxlICpkcmF3YWJsZSkKICAgIGlmICh1bmxpa2VseShJTlRFTF9ERUJVRyAm IERFQlVHX0RSSSkpCiAgICAgICBmcHJpbnRmKHN0ZGVyciwgImVudGVyICVzLCBkcmF3YWJsZSAl cFxuIiwgX19mdW5jX18sIGRyYXdhYmxlKTsKIAotICAgaW50ZWxfdXBkYXRlX2RyaTJfYnVmZmVy cyhicncsIGRyYXdhYmxlKTsKKyAgIGlmIChzY3JlZW4tPmRyaTMubG9hZGVyKQorICAgICAgaW50 ZWxfdXBkYXRlX2RyaTNfYnVmZmVycyhicncsIGRyYXdhYmxlKTsKKyAgIGVsc2UKKyAgICAgIGlu dGVsX3VwZGF0ZV9kcmkyX2J1ZmZlcnMoYnJ3LCBkcmF3YWJsZSk7CiAKICAgIGRyaVVwZGF0ZUZy YW1lYnVmZmVyU2l6ZSgmYnJ3LT5jdHgsIGRyYXdhYmxlKTsKIH0KQEAgLTEyMDQsMyArMTIxMSw5 NiBAQCBpbnRlbF9wcm9jZXNzX2RyaTJfYnVmZmVyKHN0cnVjdCBicndfY29udGV4dCAqYnJ3LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lvbik7 CiAgICBpbnRlbF9yZWdpb25fcmVsZWFzZSgmcmVnaW9uKTsKIH0KKworLyoqCisgKiBcYnJpZWYg UXVlcnkgRFJJMyB0byBvYnRhaW4gYSBEUklkcmF3YWJsZSdzIGJ1ZmZlcnMuCisgKgorICogVG8g ZGV0ZXJtaW5lIHdoaWNoIERSSSBidWZmZXJzIHRvIHJlcXVlc3QsIGV4YW1pbmUgdGhlIHJlbmRl cmJ1ZmZlcnMKKyAqIGF0dGFjaGVkIHRvIHRoZSBkcmF3YWJsZSdzIGZyYW1lYnVmZmVyLiBUaGVu IHJlcXVlc3QgdGhlIGJ1ZmZlcnMgd2l0aAorICogZHJpMworICoKKyAqIFRoaXMgaXMgY2FsbGVk IGZyb20gaW50ZWxfdXBkYXRlX3JlbmRlcmJ1ZmZlcnMoKS4KKyAqCisgKiBccGFyYW0gZHJhd2Fi bGUgICAgICBEcmF3YWJsZSB3aG9zZSBidWZmZXJzIGFyZSBxdWVyaWVkLgorICogXHBhcmFtIGJ1 ZmZlcnMgICAgICAgW291dF0gTGlzdCBvZiBidWZmZXJzIHJldHVybmVkIGJ5IERSSTIgcXVlcnku CisgKiBccGFyYW0gYnVmZmVyX2NvdW50ICBbb3V0XSBOdW1iZXIgb2YgYnVmZmVycyByZXR1cm5l ZC4KKyAqCisgKiBcc2VlIGludGVsX3VwZGF0ZV9yZW5kZXJidWZmZXJzKCkKKyAqLworCitzdGF0 aWMgdm9pZAoraW50ZWxfdXBkYXRlX2RyaTNfYnVmZmVyKHN0cnVjdCBicndfY29udGV4dCAqaW50 ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgX19EUklkcmF3YWJsZSAqZHJhd2FibGUsCisg ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGludGVsX3JlbmRlcmJ1ZmZlciAqcmIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgX19EUklkcmkzQnVmZmVyICpidWZmZXIpCit7CisgICBz dHJ1Y3QgaW50ZWxfcmVnaW9uICpyZWdpb24gPSBidWZmZXItPmRyaXZlclByaXZhdGU7CisKKyAg IGlmICghcmIgfHwgIXJlZ2lvbikKKyAgICAgIHJldHVybjsKKworICAgdW5zaWduZWQgbnVtX3Nh bXBsZXMgPSByYi0+QmFzZS5CYXNlLk51bVNhbXBsZXM7CisKKyAgIGlmIChyYi0+bXQgJiYKKyAg ICAgICByYi0+bXQtPnJlZ2lvbiAmJgorICAgICAgIHJiLT5tdC0+cmVnaW9uID09IHJlZ2lvbikK KyAgICAgIHJldHVybjsKKworICAgaW50ZWxfbWlwdHJlZV9yZWxlYXNlKCZyYi0+bXQpOworICAg cmItPm10ID0gaW50ZWxfbWlwdHJlZV9jcmVhdGVfZm9yX2RyaTNfYnVmZmVyKGludGVsLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci0+YnVm ZmVyX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW50ZWxfcmJfZm9ybWF0KHJiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBudW1fc2FtcGxlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICByZWdpb24pOworfQorCitzdGF0aWMgdm9pZAoraW50ZWxf dXBkYXRlX2RyaTNfYnVmZmVycyhzdHJ1Y3QgYnJ3X2NvbnRleHQgKmJydywgX19EUklkcmF3YWJs ZSAqZHJhd2FibGUpCit7CisgICBzdHJ1Y3QgZ2xfZnJhbWVidWZmZXIgKmZiID0gZHJhd2FibGUt PmRyaXZlclByaXZhdGU7CisgICBfX0RSSXNjcmVlbiAqc2NyZWVuID0gYnJ3LT5pbnRlbFNjcmVl bi0+ZHJpU2NyblByaXY7CisgICBzdHJ1Y3QgaW50ZWxfcmVuZGVyYnVmZmVyICpmcm9udF9yYjsK KyAgIHN0cnVjdCBpbnRlbF9yZW5kZXJidWZmZXIgKmJhY2tfcmI7CisgICBpbnQgbmVlZF9mcm9u dCA9IDAsIG5lZWRfYmFjayA9IDA7CisgICBfX0RSSWRyaTNCdWZmZXIgKmZyb250LCAqYmFjazsK KyAgIHVuc2lnbmVkIGludCBmb3JtYXQ7CisKKyAgIGZyb250X3JiID0gaW50ZWxfZ2V0X3JlbmRl cmJ1ZmZlcihmYiwgQlVGRkVSX0ZST05UX0xFRlQpOworICAgYmFja19yYiA9IGludGVsX2dldF9y ZW5kZXJidWZmZXIoZmIsIEJVRkZFUl9CQUNLX0xFRlQpOworCisgICBpZiAoYmFja19yYikKKyAg ICAgIGZvcm1hdCA9IGludGVsX3JiX2Zvcm1hdChiYWNrX3JiKTsKKyAgIGVsc2UgaWYgKGZyb250 X3JiKQorICAgICAgZm9ybWF0ID0gaW50ZWxfcmJfZm9ybWF0KGZyb250X3JiKTsKKyAgIGVsc2UK KyAgICAgIHJldHVybjsKKworICAgaWYgKChicnctPmlzX2Zyb250X2J1ZmZlcl9yZW5kZXJpbmcg fHwgYnJ3LT5pc19mcm9udF9idWZmZXJfcmVhZGluZyB8fCAhYmFja19yYikgJiYgZnJvbnRfcmIp CisgICAgICBuZWVkX2Zyb250ID0gMTsKKworICAgaWYgKGJhY2tfcmIpCisgICAgICBuZWVkX2Jh Y2sgPSAxOworCisgICAoKnNjcmVlbi0+ZHJpMy5sb2FkZXItPmdldEJ1ZmZlcnMpIChkcmF3YWJs ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkcmF3YWJsZS0+dywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkcmF3YWJsZS0+aCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyYXdhYmxlLT5sb2FkZXJQcml2YXRlLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVlZF9mcm9udCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRfYmFjaywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICZmcm9udCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZiYWNrKTsKKworICAgaWYgKGZyb250KSB7CisgICAgICBhc3NlcnQo ZnJvbnRfcmIpOworICAgICAgaW50ZWxfdXBkYXRlX2RyaTNfYnVmZmVyKGJydywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBkcmF3YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBmcm9udF9yYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9udCk7 CisgICB9CisgICBpZiAoYmFjaykKKyAgICAgIGludGVsX3VwZGF0ZV9kcmkzX2J1ZmZlcihicncs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJhd2FibGUsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYmFja19yYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBiYWNrKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9tZXNhL2RyaXZlcnMvZHJpL2k5NjUvaW50ZWxf bWlwbWFwX3RyZWUuYyBiL3NyYy9tZXNhL2RyaXZlcnMvZHJpL2k5NjUvaW50ZWxfbWlwbWFwX3Ry ZWUuYwppbmRleCAyZjVlMDRmLi41YzYyYTc0IDEwMDY0NAotLS0gYS9zcmMvbWVzYS9kcml2ZXJz L2RyaS9pOTY1L2ludGVsX21pcG1hcF90cmVlLmMKKysrIGIvc3JjL21lc2EvZHJpdmVycy9kcmkv aTk2NS9pbnRlbF9taXBtYXBfdHJlZS5jCkBAIC03MjUsNiArNzI1LDY3IEBAIGludGVsX21pcHRy ZWVfY3JlYXRlX2Zvcl9kcmkyX2J1ZmZlcihzdHJ1Y3QgYnJ3X2NvbnRleHQgKmJydywKICAgIHJl dHVybiBtdWx0aXNhbXBsZV9tdDsKIH0KIAorLyoqCisgKiBGb3IgYSBzaW5nbGVzYW1wbGUgRFJJ MyBidWZmZXIsIHRoaXMgc2ltcGx5IHdyYXBzIHRoZSBnaXZlbiByZWdpb24gd2l0aCBhIG1pcHRy ZWUuCisgKgorICogRm9yIGEgbXVsdGlzYW1wbGUgRFJJMyBidWZmZXIsIHRoaXMgd3JhcHMgdGhl IGdpdmVuIHJlZ2lvbiB3aXRoCisgKiBhIHNpbmdsZXNhbXBsZSBtaXB0cmVlLCB0aGVuIGNyZWF0 ZXMgYSBtdWx0aXNhbXBsZSBtaXB0cmVlIGludG8gd2hpY2ggdGhlCisgKiBzaW5nbGVzYW1wbGUg bWlwdHJlZSBpcyBlbWJlZGRlZCBhcyBhIGNoaWxkLgorICovCitzdHJ1Y3QgaW50ZWxfbWlwbWFw X3RyZWUqCitpbnRlbF9taXB0cmVlX2NyZWF0ZV9mb3JfZHJpM19idWZmZXIoc3RydWN0IGJyd19j b250ZXh0ICppbnRlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVt IF9fRFJJM2J1ZmZlclR5cGUgYnVmZmVyX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZ2xfZm9ybWF0IGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB1aW50MzJfdCBudW1fc2FtcGxlcywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgaW50ZWxfcmVnaW9uICpyZWdpb24pCit7CisgICBzdHJ1Y3Qg aW50ZWxfbWlwbWFwX3RyZWUgKnNpbmdsZXNhbXBsZV9tdCA9IE5VTEw7CisgICBzdHJ1Y3QgaW50 ZWxfbWlwbWFwX3RyZWUgKm11bHRpc2FtcGxlX210ID0gTlVMTDsKKworICAgLyogT25seSB0aGUg ZnJvbnQgYW5kIGJhY2sgYnVmZmVycywgd2hpY2ggYXJlIGNvbG9yIGJ1ZmZlcnMsIGFyZSBhbGxv Y2F0ZWQKKyAgICAqIHRocm91Z2ggRFJJMy4KKyAgICAqLworICAgYXNzZXJ0KF9tZXNhX2dldF9m b3JtYXRfYmFzZV9mb3JtYXQoZm9ybWF0KSA9PSBHTF9SR0IgfHwKKyAgICAgICAgICBfbWVzYV9n ZXRfZm9ybWF0X2Jhc2VfZm9ybWF0KGZvcm1hdCkgPT0gR0xfUkdCQSk7CisKKyAgIHNpbmdsZXNh bXBsZV9tdCA9IGludGVsX21pcHRyZWVfY3JlYXRlX2Zvcl9ibyhpbnRlbCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpb24tPmJvLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lvbi0+d2lkdGgsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaW9uLT5o ZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cmVnaW9uLT5waXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICByZWdpb24tPnRpbGluZyk7CisgICBpZiAoIXNpbmdsZXNhbXBsZV9tdCkKKyAgICAg IHJldHVybiBOVUxMOworCisgICBpbnRlbF9yZWdpb25fcmVmZXJlbmNlKCZzaW5nbGVzYW1wbGVf bXQtPnJlZ2lvbiwgcmVnaW9uKTsKKworICAgaWYgKG51bV9zYW1wbGVzID09IDApCisgICAgICBy ZXR1cm4gc2luZ2xlc2FtcGxlX210OworCisgICBtdWx0aXNhbXBsZV9tdCA9IGludGVsX21pcHRy ZWVfY3JlYXRlX2Zvcl9yZW5kZXJidWZmZXIoaW50ZWwsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lvbi0+d2lk dGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcmVnaW9uLT5oZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbnVtX3NhbXBsZXMpOworICAgaWYgKCFtdWx0aXNhbXBs ZV9tdCkgeworICAgICAgaW50ZWxfbWlwdHJlZV9yZWxlYXNlKCZzaW5nbGVzYW1wbGVfbXQpOwor ICAgICAgcmV0dXJuIE5VTEw7CisgICB9CisKKyAgIG11bHRpc2FtcGxlX210LT5zaW5nbGVzYW1w bGVfbXQgPSBzaW5nbGVzYW1wbGVfbXQ7CisgICBtdWx0aXNhbXBsZV9tdC0+bmVlZF9kb3duc2Ft cGxlID0gZmFsc2U7CisKKyAgIGludGVsX3JlZ2lvbl9yZWZlcmVuY2UoJm11bHRpc2FtcGxlX210 LT5yZWdpb24sIHJlZ2lvbik7CisKKyAgIGlmIChpbnRlbC0+aXNfZnJvbnRfYnVmZmVyX3JlbmRl cmluZyAmJiBidWZmZXJfdHlwZSA9PSBfX0RSSTNfQlVGRkVSX0ZST05UKSB7CisgICAgICBpbnRl bF9taXB0cmVlX3Vwc2FtcGxlKGludGVsLCBtdWx0aXNhbXBsZV9tdCk7CisgICB9CisKKyAgIHJl dHVybiBtdWx0aXNhbXBsZV9tdDsKK30KKwogc3RydWN0IGludGVsX21pcG1hcF90cmVlKgogaW50 ZWxfbWlwdHJlZV9jcmVhdGVfZm9yX3JlbmRlcmJ1ZmZlcihzdHJ1Y3QgYnJ3X2NvbnRleHQgKmJy dywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfZm9ybWF0IGZvcm1h dCwKZGlmZiAtLWdpdCBhL3NyYy9tZXNhL2RyaXZlcnMvZHJpL2k5NjUvaW50ZWxfbWlwbWFwX3Ry ZWUuaCBiL3NyYy9tZXNhL2RyaXZlcnMvZHJpL2k5NjUvaW50ZWxfbWlwbWFwX3RyZWUuaAppbmRl eCBkNzE4MTI1Li4wYzE5MjJkIDEwMDY0NAotLS0gYS9zcmMvbWVzYS9kcml2ZXJzL2RyaS9pOTY1 L2ludGVsX21pcG1hcF90cmVlLmgKKysrIGIvc3JjL21lc2EvZHJpdmVycy9kcmkvaTk2NS9pbnRl bF9taXBtYXBfdHJlZS5oCkBAIC0zMiw2ICszMiw3IEBACiAKICNpbmNsdWRlICJpbnRlbF9yZWdp b25zLmgiCiAjaW5jbHVkZSAiaW50ZWxfcmVzb2x2ZV9tYXAuaCIKKyNpbmNsdWRlIDxHTC9pbnRl cm5hbC9kcmlfaW50ZXJmYWNlLmg+CiAKICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7 CkBAIC01MjksNiArNTMwLDEzIEBAIGludGVsX21pcHRyZWVfY3JlYXRlX2Zvcl9kcmkyX2J1ZmZl cihzdHJ1Y3QgYnJ3X2NvbnRleHQgKmJydywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB1aW50MzJfdCBudW1fc2FtcGxlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3QgaW50ZWxfcmVnaW9uICpyZWdpb24pOwogCitzdHJ1Y3QgaW50ZWxf bWlwbWFwX3RyZWUqCitpbnRlbF9taXB0cmVlX2NyZWF0ZV9mb3JfZHJpM19idWZmZXIoc3RydWN0 IGJyd19jb250ZXh0ICppbnRlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBlbnVtIF9fRFJJM2J1ZmZlclR5cGUgYnVmZmVyX3R5cGUsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZ2xfZm9ybWF0IGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB1aW50MzJfdCBudW1fc2FtcGxlcywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaW50ZWxfcmVnaW9uICpyZWdpb24pOworCiAvKioK ICAqIENyZWF0ZSBhIG1pcHRyZWUgYXBwcm9wcmlhdGUgYXMgdGhlIHN0b3JhZ2UgZm9yIGEgbm9u LXRleHR1cmUgcmVuZGVyYnVmZmVyLgogICogVGhlIG1pcHRyZWUgaGFzIHRoZSBmb2xsb3dpbmcg cHJvcGVydGllczoKZGlmZiAtLWdpdCBhL3NyYy9tZXNhL2RyaXZlcnMvZHJpL2k5NjUvaW50ZWxf c2NyZWVuLmMgYi9zcmMvbWVzYS9kcml2ZXJzL2RyaS9pOTY1L2ludGVsX3NjcmVlbi5jCmluZGV4 IDBiZDA3ODkuLmI5NzUxNDIgMTAwNjQ0Ci0tLSBhL3NyYy9tZXNhL2RyaXZlcnMvZHJpL2k5NjUv aW50ZWxfc2NyZWVuLmMKKysrIGIvc3JjL21lc2EvZHJpdmVycy9kcmkvaTk2NS9pbnRlbF9zY3Jl ZW4uYwpAQCAtMTIyNSw3ICsxMjI1LDggQEAgX19EUkljb25maWcgKippbnRlbEluaXRTY3JlZW4y KF9fRFJJc2NyZWVuICpwc3ApCiB7CiAgICBzdHJ1Y3QgaW50ZWxfc2NyZWVuICppbnRlbFNjcmVl bjsKIAotICAgaWYgKHBzcC0+ZHJpMi5sb2FkZXItPmJhc2UudmVyc2lvbiA8PSAyIHx8CisgICBp ZiAocHNwLT5kcmkzLmxvYWRlcikgeworICAgfSBlbHNlIGlmIChwc3AtPmRyaTIubG9hZGVyLT5i YXNlLnZlcnNpb24gPD0gMiB8fAogICAgICAgIHBzcC0+ZHJpMi5sb2FkZXItPmdldEJ1ZmZlcnNX aXRoRm9ybWF0ID09IE5VTEwpIHsKICAgICAgIGZwcmludGYoc3RkZXJyLAogCSAgICAgICJcbkVS Uk9SISAgRFJJMiBsb2FkZXIgd2l0aCBnZXRCdWZmZXJzV2l0aEZvcm1hdCgpICIKQEAgLTEzMTMs NiArMTMxNCwxMDkgQEAgaW50ZWxSZWxlYXNlQnVmZmVyKF9fRFJJc2NyZWVuICpzY3JlZW4sIF9f RFJJYnVmZmVyICpidWZmZXIpCiAgICBmcmVlKGludGVsQnVmZmVyKTsKIH0KIAorLyoKKyAqIERS STMgYml0cworICovCisKK3N0YXRpYyBfX0RSSWRyaTNCdWZmZXIgKgoraW50ZWxfZHJpM19hbGxv Y2F0ZV9idWZmZXIoX19EUklzY3JlZW4gKnNjcmVlbiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIHVuc2lnbmVkIGludCBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg d2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaGVpZ2h0KQoreworICAgc3Ry dWN0IGludGVsX3NjcmVlbiAqaW50ZWxfc2NyZWVuID0gc2NyZWVuLT5kcml2ZXJQcml2YXRlOwor ICAgX19EUklkcmkzQnVmZmVyICpidWZmZXI7CisgICBzdHJ1Y3QgaW50ZWxfcmVnaW9uICpyZWdp b247CisKKyAgIGJ1ZmZlciA9IGNhbGxvYygxLCBzaXplb2YgKmJ1ZmZlcik7CisgICBpZiAoYnVm ZmVyID09IE5VTEwpCisgICAgICByZXR1cm4gTlVMTDsKKworICAgLyogVGhlIGZyb250IGFuZCBi YWNrIGJ1ZmZlcnMgYXJlIGNvbG9yIGJ1ZmZlcnMsIHdoaWNoIGFyZSBYIHRpbGVkLiAqLworICAg cmVnaW9uID0gaW50ZWxfcmVnaW9uX2FsbG9jKGludGVsX3NjcmVlbiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBJOTE1X1RJTElOR19YLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9tZXNhX2dldF9mb3JtYXRfYnl0ZXMoZm9ybWF0KSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWln aHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSk7CisgICAKKyAgIGlmIChy ZWdpb24gPT0gTlVMTCkgeworCSAgIGZyZWUoYnVmZmVyKTsKKwkgICByZXR1cm4gTlVMTDsKKyAg IH0KKyAgIAorICAgYnVmZmVyLT5jcHAgPSByZWdpb24tPmNwcDsKKyAgIGJ1ZmZlci0+cGl0Y2gg PSByZWdpb24tPnBpdGNoOworICAgYnVmZmVyLT5zaXplID0gcmVnaW9uLT5iby0+c2l6ZTsKKyAg IGJ1ZmZlci0+d2lkdGggPSB3aWR0aDsKKyAgIGJ1ZmZlci0+aGVpZ2h0ID0gaGVpZ2h0OworICAg YnVmZmVyLT5kcml2ZXJQcml2YXRlID0gcmVnaW9uOworCisgICByZXR1cm4gYnVmZmVyOworfQor CitzdGF0aWMgdm9pZAoraW50ZWxfZHJpM19yZWxlYXNlX2J1ZmZlcihfX0RSSXNjcmVlbiAqc2Ny ZWVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICBfX0RSSWRyaTNCdWZmZXIgKmJ1ZmZlcikK K3sKKyAgIGludGVsX3JlZ2lvbl9yZWxlYXNlKChzdHJ1Y3QgaW50ZWxfcmVnaW9uICoqKSAmYnVm ZmVyLT5kcml2ZXJQcml2YXRlKTsKKyAgIGZyZWUoYnVmZmVyKTsKK30KKworc3RhdGljIGludAor aW50ZWxfZHJpM19idWZmZXJfdG9fZmQoX19EUklzY3JlZW4gKnNjcmVlbiwKKyAgICAgICAgICAg ICAgICAgICAgICAgIF9fRFJJZHJpM0J1ZmZlciAqYnVmZmVyKQoreworICAgc3RydWN0IGludGVs X3NjcmVlbiAqaW50ZWxfc2NyZWVuID0gc2NyZWVuLT5kcml2ZXJQcml2YXRlOworICAgc3RydWN0 IGludGVsX3JlZ2lvbiAqcmVnaW9uID0gYnVmZmVyLT5kcml2ZXJQcml2YXRlOworCisgICBpZiAo IXJlZ2lvbikKKyAgICAgIHJldHVybiAtMTsKKyAgIHJldHVybiBpbnRlbF9mZF9mb3JfcmVnaW9u KGludGVsX3NjcmVlbiwgcmVnaW9uKTsKK30KKworc3RhdGljIF9fRFJJZHJpM0J1ZmZlciAqCitp bnRlbF9kcmkzX2ZkX3RvX2J1ZmZlcihfX0RSSXNjcmVlbiAqc2NyZWVuLAorICAgICAgICAgICAg ICAgICAgICAgICAgaW50IGZkLAorICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50 IGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCwKKyAgICAgICAgICAg ICAgICAgICAgICAgIGludCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGl0 Y2gsCisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2l6ZSkKK3sKKyAgIHN0 cnVjdCBpbnRlbF9zY3JlZW4gKmludGVsX3NjcmVlbiA9IHNjcmVlbi0+ZHJpdmVyUHJpdmF0ZTsK KyAgIHN0cnVjdCBpbnRlbF9yZWdpb24gKnJlZ2lvbjsKKyAgIF9fRFJJZHJpM0J1ZmZlciAqYnVm ZmVyOworCisgICBidWZmZXIgPSBjYWxsb2MoMSwgc2l6ZW9mICpidWZmZXIpOworICAgaWYgKCFi dWZmZXIpCisgICAgICByZXR1cm4gTlVMTDsKKyAgIAorICAgcmVnaW9uID0gaW50ZWxfcmVnaW9u X2FsbG9jX2Zvcl9mZChpbnRlbF9zY3JlZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9tZXNhX2dldF9mb3JtYXRfYnl0ZXMoZm9ybWF0KSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsIGhlaWdodCwgcGl0Y2gsIHNpemUsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkLCAiYnVmZmVyIik7CisgICBpZiAo cmVnaW9uID09IE5VTEwpIHsKKyAgICAgIGZyZWUgKGJ1ZmZlcik7CisgICAgICByZXR1cm4gTlVM TDsKKyAgIH0KKworICAgYnVmZmVyLT5jcHAgPSByZWdpb24tPmNwcDsKKyAgIGJ1ZmZlci0+cGl0 Y2ggPSByZWdpb24tPnBpdGNoOworICAgYnVmZmVyLT53aWR0aCA9IHdpZHRoOworICAgYnVmZmVy LT5oZWlnaHQgPSBoZWlnaHQ7CisgICBidWZmZXItPmRyaXZlclByaXZhdGUgPSByZWdpb247CisK KyAgIHJldHVybiBidWZmZXI7Cit9CisKK2NvbnN0IHN0cnVjdCBfX2RyaTNEcml2ZXJBUElSZWMg ZHJpM0RyaXZlckFQSSA9IHsKKyAgIC5hbGxvY2F0ZV9idWZmZXIgICAgID0gaW50ZWxfZHJpM19h bGxvY2F0ZV9idWZmZXIsCisgICAucmVsZWFzZV9idWZmZXIgICAgICA9IGludGVsX2RyaTNfcmVs ZWFzZV9idWZmZXIsCisgICAuYnVmZmVyX3RvX2ZkICAgICAgICA9IGludGVsX2RyaTNfYnVmZmVy X3RvX2ZkLAorICAgLmZkX3RvX2J1ZmZlciAgICAgICAgPSBpbnRlbF9kcmkzX2ZkX3RvX2J1ZmZl ciwKKyAgIC5zdGFtcCAgICAgICAgICAgICAgID0gZHJpM0RyYXdhYmxlU3RhbXAsCit9OwogCiBz dGF0aWMgY29uc3Qgc3RydWN0IF9fRHJpdmVyQVBJUmVjIGJyd19kcml2ZXJfYXBpID0gewogICAg LkluaXRTY3JlZW4JCSA9IGludGVsSW5pdFNjcmVlbjIsCkBAIC0xMzM0LDYgKzE0MzgsNyBAQCBz dGF0aWMgY29uc3Qgc3RydWN0IF9fRFJJRHJpdmVyVnRhYmxlRXh0ZW5zaW9uUmVjIGJyd192dGFi bGUgPSB7CiAKIHN0YXRpYyBjb25zdCBfX0RSSWV4dGVuc2lvbiAqYnJ3X2RyaXZlcl9leHRlbnNp b25zW10gPSB7CiAgICAgJmRyaUNvcmVFeHRlbnNpb24uYmFzZSwKKyAgICAmZHJpRFJJM0V4dGVu c2lvbi5iYXNlLAogICAgICZkcmlEUkkyRXh0ZW5zaW9uLmJhc2UsCiAgICAgJmJyd192dGFibGUu YmFzZSwKICAgICAmYnJ3X2NvbmZpZ19vcHRpb25zLmJhc2UsCi0tIAoxLjguNC4yCgoKLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCkFuZHJvaWQgaXMgaW5jcmVhc2luZyBpbiBwb3B1bGFyaXR5LCBidXQg dGhlIG9wZW4gZGV2ZWxvcG1lbnQgcGxhdGZvcm0gdGhhdApkZXZlbG9wZXJzIGxvdmUgaXMgYWxz byBhdHRyYWN0aXZlIHRvIG1hbHdhcmUgY3JlYXRvcnMuIERvd25sb2FkIHRoaXMgd2hpdGUKcGFw ZXIgdG8gbGVhcm4gbW9yZSBhYm91dCBzZWN1cmUgY29kZSBzaWduaW5nIHByYWN0aWNlcyB0aGF0 IGNhbiBoZWxwIGtlZXAKQW5kcm9pZCBhcHBzIHNlY3VyZS4KaHR0cDovL3B1YmFkcy5nLmRvdWJs ZWNsaWNrLm5ldC9nYW1wYWQvY2xrP2lkPTY1ODM5OTUxJml1PS80MTQwL29zdGcuY2xrdHJrCi0t Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkRyaS1kZXZl bCBtYWlsaW5nIGxpc3QKRHJpLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldApodHRwczovL2xp c3RzLnNvdXJjZWZvcmdlLm5ldC9saXN0cy9saXN0aW5mby9kcmktZGV2ZWwKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlz dApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3Rv cC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK