From owner-freebsd-xen@freebsd.org Fri Dec 14 13:54:00 2018 Return-Path: Delivered-To: freebsd-xen@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id A85151334640 for ; Fri, 14 Dec 2018 13:53:59 +0000 (UTC) (envelope-from pratiy0100@gmail.com) Received: from mail-ed1-f49.google.com (mail-ed1-f49.google.com [209.85.208.49]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id D5A7D75CFB; Fri, 14 Dec 2018 13:53:55 +0000 (UTC) (envelope-from pratiy0100@gmail.com) Received: by mail-ed1-f49.google.com with SMTP id z28so4998529edi.8; Fri, 14 Dec 2018 05:53:55 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to:cc; bh=O1fCnhmMEcypvd3uJc2MtAfFoNMWveFkorNlz1fuhdo=; b=KZjtN7DGi3jyauTBZlI/Tv1MiAFjXffX6vP0kHnJA344O6z5UomnGdCPPAShSJW/oN Ki6a+RjZAfM3StoC7ZU3iUklxCqWJdAExp1SaAbco381F5M3LEJGTn86SXSBm8jSwfy9 Ar2dpy0L5sRFPC7PX3avmMSvOEm1MdEzh/4LZHOO0lGQicQ0llmCXk1GHKarFYvQFO3k GDR7aLpC66h/E8GRNO3neydv6WNU3uEF8k/HmYRmWoC3keAJ+U2HMId0W+qlDncnOOTh hebB2tUadLj9QNykzstjCtut7i2FNnuYKAo7dndC+2Wo4xyTFDryLE0jk524zPDJAN2y gPCA== X-Gm-Message-State: AA+aEWbaSm1cEZtaB9RyJPsGP7sF+cxyet0WvqaBAxylwCxKpYZevGMY yYHyEncqRy2wxFiJ7qqeuQeVaQ+gMq4= X-Google-Smtp-Source: AFSGD/X3krkHc/aq0DEipy8K1AbY6Jq4wfoQmbsL3D8IxzvCI/WL1MCP8PGLZiOdvrF11qJ9hrsQ+g== X-Received: by 2002:a50:a5b8:: with SMTP id a53mr3215864edc.199.1544795628558; Fri, 14 Dec 2018 05:53:48 -0800 (PST) Received: from mail-ed1-f51.google.com (mail-ed1-f51.google.com. [209.85.208.51]) by smtp.gmail.com with ESMTPSA id a11sm1474457edc.28.2018.12.14.05.53.47 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 14 Dec 2018 05:53:48 -0800 (PST) Received: by mail-ed1-f51.google.com with SMTP id d3so5004697edx.7; Fri, 14 Dec 2018 05:53:47 -0800 (PST) X-Received: by 2002:a05:6402:8d2:: with SMTP id d18mr3193458edz.119.1544795627702; Fri, 14 Dec 2018 05:53:47 -0800 (PST) MIME-Version: 1.0 From: Pratyush Yadav Date: Fri, 14 Dec 2018 19:23:11 +0530 X-Gmail-Original-Message-ID: Message-ID: Subject: Testing request: Grant table handlers integrated with the bus_dma(9) API To: FreeBSD-Xen Cc: =?UTF-8?Q?Roger_Pau_Monn=C3=A9?= Content-Type: multipart/mixed; boundary="000000000000a402a0057cfbc278" X-Rspamd-Queue-Id: D5A7D75CFB X-Spamd-Bar: --- Authentication-Results: mx1.freebsd.org; spf=pass (mx1.freebsd.org: domain of pratiy0100@gmail.com designates 209.85.208.49 as permitted sender) smtp.mailfrom=pratiy0100@gmail.com X-Spamd-Result: default: False [-3.38 / 15.00]; RCVD_VIA_SMTP_AUTH(0.00)[]; R_SPF_ALLOW(-0.20)[+ip4:209.85.128.0/17]; HAS_ATTACHMENT(0.00)[]; RCVD_COUNT_THREE(0.00)[4]; TO_DN_ALL(0.00)[]; MX_GOOD(-0.01)[cached: alt3.gmail-smtp-in.l.google.com]; RCPT_COUNT_TWO(0.00)[2]; MIME_BASE64_TEXT(0.10)[]; NEURAL_HAM_SHORT(-0.99)[-0.992,0]; FORGED_SENDER(0.30)[pratyush@freebsd.org,pratiy0100@gmail.com]; MIME_TRACE(0.00)[0:+,1:+,2:~]; R_DKIM_NA(0.00)[]; FREEMAIL_ENVFROM(0.00)[gmail.com]; ASN(0.00)[asn:15169, ipnet:209.85.128.0/17, country:US]; FROM_NEQ_ENVFROM(0.00)[pratyush@freebsd.org,pratiy0100@gmail.com]; MIME_UNKNOWN(0.10)[text/x-patch]; ARC_NA(0.00)[]; NEURAL_HAM_MEDIUM(-1.00)[-0.999,0]; FROM_HAS_DN(0.00)[]; TO_MATCH_ENVRCPT_ALL(0.00)[]; MIME_GOOD(-0.10)[multipart/mixed,text/plain]; DMARC_NA(0.00)[freebsd.org]; IP_SCORE(-1.58)[ip: (-2.97), ipnet: 209.85.128.0/17(-3.54), asn: 15169(-1.32), country: US(-0.09)]; RCVD_IN_DNSWL_NONE(0.00)[49.208.85.209.list.dnswl.org : 127.0.5.0]; RCVD_TLS_LAST(0.00)[]; RWL_MAILSPIKE_POSSIBLE(0.00)[49.208.85.209.rep.mailspike.net : 127.0.0.17] X-BeenThere: freebsd-xen@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Discussion of the freebsd port to xen - implementation and usage List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Dec 2018 13:54:00 -0000 --000000000000a402a0057cfbc278 Content-Type: text/plain; charset="UTF-8" Hi freebsd-xen@ I participated in Google Summer of Code this summer. My project was to Import the Xen grant-table bus_dma(9) handlers from OpenBSD [0]. The code is up for review, and will be merged soon hopefully. But, I have only tested it on my system with my configurations. Even though I have tried to be thorough, I might have missed something that does not manifest itself on my setup. So, if any of you are able to, I would like you to test the patch and give me feedback/bug reports before it gets committed. The code does not add any new features or remove anything. So, you should not have to change anything at all to make it work. The system should keep working exactly like before. If you find any deviance from previous behaviour, please report it. The patch changes the kernel, so apply it and re-build the kernel. You shouldn't have to re-build the world AFAICT. You can find the reviews for the patches here [1][2][3][4]. It is split into 4 patches, so for your convenience I have attached a combined patch with this email. If you have any suggestions about the code, please let me know in the review. [0] https://wiki.freebsd.org/SummerOfCode2018Projects/ImportXenbus_dmaFromOpenBSD [1] https://reviews.freebsd.org/D18550 [2] https://reviews.freebsd.org/D18551 [3] https://reviews.freebsd.org/D18552 [4] https://reviews.freebsd.org/D18553 -- Regards, Pratyush Yadav --000000000000a402a0057cfbc278 Content-Type: text/x-patch; charset="US-ASCII"; name="busdma.diff" Content-Disposition: attachment; filename="busdma.diff" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_jpo2yj6p0 ZGlmZiAtLWdpdCBhL3N5cy9jb25mL2ZpbGVzLmFtZDY0IGIvc3lzL2NvbmYvZmlsZXMuYW1kNjQK aW5kZXggODcyMmNkZWI0Yi4uODAyMjNjNDZkZSAxMDA2NDQKLS0tIGEvc3lzL2NvbmYvZmlsZXMu YW1kNjQKKysrIGIvc3lzL2NvbmYvZmlsZXMuYW1kNjQKQEAgLTc1Miw2ICs3NTIsNyBAQCB4ODYv eDg2L3N0YWNrX21hY2hkZXAuYwkJb3B0aW9uYWwJZGRiIHwgc3RhY2sKIHg4Ni94ODYvdHNjLmMJ CQlzdGFuZGFyZAogeDg2L3g4Ni91Y29kZS5jCQkJc3RhbmRhcmQKIHg4Ni94ODYvZGVsYXkuYwkJ CXN0YW5kYXJkCit4ODYveGVuL2J1c2RtYV94ZW4uYwkJb3B0aW9uYWwJeGVuaHZtCiB4ODYveGVu L2h2bS5jCQkJb3B0aW9uYWwJeGVuaHZtCiB4ODYveGVuL3hlbl9pbnRyLmMJCW9wdGlvbmFsCXhl bmh2bQogeDg2L3hlbi9wdi5jCQkJb3B0aW9uYWwJeGVuaHZtCmRpZmYgLS1naXQgYS9zeXMvY29u Zi9maWxlcy5pMzg2IGIvc3lzL2NvbmYvZmlsZXMuaTM4NgppbmRleCAwOGQ5ODc1ODZhLi5hYWEx MGJlZWJjIDEwMDY0NAotLS0gYS9zeXMvY29uZi9maWxlcy5pMzg2CisrKyBiL3N5cy9jb25mL2Zp bGVzLmkzODYKQEAgLTYyMiw2ICs2MjIsNyBAQCB4ODYveDg2L3RzYy5jCQkJc3RhbmRhcmQKIHg4 Ni94ODYvdWNvZGUuYwkJCXN0YW5kYXJkCiB4ODYveDg2L3B2Y2xvY2suYwkJc3RhbmRhcmQKIHg4 Ni94ODYvZGVsYXkuYwkJCXN0YW5kYXJkCit4ODYveGVuL2J1c2RtYV94ZW4uYwkJb3B0aW9uYWwg eGVuaHZtCiB4ODYveGVuL2h2bS5jCQkJb3B0aW9uYWwgeGVuaHZtCiB4ODYveGVuL3hlbl9pbnRy LmMJCW9wdGlvbmFsIHhlbmh2bQogeDg2L3hlbi94ZW5fYXBpYy5jCQlvcHRpb25hbCB4ZW5odm0K ZGlmZiAtLWdpdCBhL3N5cy9kZXYveGVuL2Jsa2Zyb250L2Jsa2Zyb250LmMgYi9zeXMvZGV2L3hl bi9ibGtmcm9udC9ibGtmcm9udC5jCmluZGV4IDI2ZjkzNTE5OWIuLjhlN2EwN2ZiYjYgMTAwNjQ0 Ci0tLSBhL3N5cy9kZXYveGVuL2Jsa2Zyb250L2Jsa2Zyb250LmMKKysrIGIvc3lzL2Rldi94ZW4v YmxrZnJvbnQvYmxrZnJvbnQuYwpAQCAtNTcsNiArNTcsNyBAQCBfX0ZCU0RJRCgiJEZyZWVCU0Qk Iik7CiAjaW5jbHVkZSA8eGVuL2ludGVyZmFjZS9ncmFudF90YWJsZS5oPgogI2luY2x1ZGUgPHhl bi9pbnRlcmZhY2UvaW8vcHJvdG9jb2xzLmg+CiAjaW5jbHVkZSA8eGVuL3hlbmJ1cy94ZW5idXN2 YXIuaD4KKyNpbmNsdWRlIDx4ZW4vYnVzZG1hX3hlbi5oPgogCiAjaW5jbHVkZSA8bWFjaGluZS9f aW50dHlwZXMuaD4KIApAQCAtMTU5LDE0ICsxNjAsMTIgQEAgeGJkX2ZyZWVfY29tbWFuZChzdHJ1 Y3QgeGJkX2NvbW1hbmQgKmNtKQogfQogCiBzdGF0aWMgdm9pZAoteGJkX21rc2VnYXJyYXkoYnVz X2RtYV9zZWdtZW50X3QgKnNlZ3MsIGludCBuc2VncywKLSAgICBncmFudF9yZWZfdCAqIGdyZWZf aGVhZCwgaW50IG90aGVyZW5kX2lkLCBpbnQgcmVhZG9ubHksCi0gICAgZ3JhbnRfcmVmX3QgKiBz Z19yZWYsIHN0cnVjdCBibGtpZl9yZXF1ZXN0X3NlZ21lbnQgKnNnKQoreGJkX21rc2VnYXJyYXko YnVzX2RtYV9zZWdtZW50X3QgKnNlZ3MsIGludCBuc2VncywgZ3JhbnRfcmVmX3QgKiBzZ19yZWYs CisgICAgc3RydWN0IGJsa2lmX3JlcXVlc3Rfc2VnbWVudCAqc2cpCiB7CiAJc3RydWN0IGJsa2lm X3JlcXVlc3Rfc2VnbWVudCAqbGFzdF9ibG9ja19zZyA9IHNnICsgbnNlZ3M7CiAJdm1fcGFkZHJf dCBidWZmZXJfbWE7CiAJdWludDY0X3QgZnNlY3QsIGxzZWN0OwotCWludCByZWY7CiAKIAl3aGls ZSAoc2cgPCBsYXN0X2Jsb2NrX3NnKSB7CiAJCUtBU1NFUlQoc2Vncy0+ZHNfYWRkciAlICgxIDw8 IFhCRF9TRUNUT1JfU0hGVCkgPT0gMCwKQEAgLTE4MCwyNiArMTc5LDE1IEBAIHhiZF9ta3NlZ2Fy cmF5KGJ1c19kbWFfc2VnbWVudF90ICpzZWdzLCBpbnQgbnNlZ3MsCiAKIAkJS0FTU0VSVChsc2Vj dCA8PSA3LCAoIlhFTiBkaXNrIGRyaXZlciBkYXRhIGNhbm5vdCAiCiAJCSAgICAiY3Jvc3MgYSBw YWdlIGJvdW5kYXJ5IikpOwotCi0JCS8qIGluc3RhbGwgYSBncmFudCByZWZlcmVuY2UuICovCi0J CXJlZiA9IGdudHRhYl9jbGFpbV9ncmFudF9yZWZlcmVuY2UoZ3JlZl9oZWFkKTsKLQogCQkvKgog CQkgKiBHTlRUQUJfTElTVF9FTkQgPT0gMHhmZmZmZmZmZiwgYnV0IGl0IGlzIHByaXZhdGUKIAkJ ICogdG8gZ250dGFiLmMuCiAJCSAqLwotCQlLQVNTRVJUKHJlZiAhPSB+MCwgKCJncmFudF9yZWZl cmVuY2UgZmFpbGVkIikpOworCQlLQVNTRVJUKCpzZ19yZWYgIT0gfjAsICgiZ3JhbnRfcmVmZXJl bmNlIGZhaWxlZCIpKTsKIAotCQlnbnR0YWJfZ3JhbnRfZm9yZWlnbl9hY2Nlc3NfcmVmKAotCQkg ICAgcmVmLAotCQkgICAgb3RoZXJlbmRfaWQsCi0JCSAgICBidWZmZXJfbWEgPj4gUEFHRV9TSElG VCwKLQkJICAgIHJlYWRvbmx5KTsKLQotCQkqc2dfcmVmID0gcmVmOwogCQkqc2cgPSAoc3RydWN0 IGJsa2lmX3JlcXVlc3Rfc2VnbWVudCkgewotCQkJLmdyZWYgICAgICAgPSByZWYsCi0JCQkuZmly c3Rfc2VjdCA9IGZzZWN0LCAKKwkJCS5ncmVmICAgICAgID0gKnNnX3JlZiwKKwkJCS5maXJzdF9z ZWN0ID0gZnNlY3QsCiAJCQkubGFzdF9zZWN0ICA9IGxzZWN0CiAJCX07CiAJCXNnKys7CkBAIC0y NDEsMTAgKzIyOSw4IEBAIHhiZF9xdWV1ZV9jYih2b2lkICphcmcsIGJ1c19kbWFfc2VnbWVudF90 ICpzZWdzLCBpbnQgbnNlZ3MsIGludCBlcnJvcikKIAkJcmluZ19yZXEtPmhhbmRsZSA9IChibGtp Zl92ZGV2X3QpKHVpbnRwdHJfdClzYy0+eGJkX2Rpc2s7CiAJCXJpbmdfcmVxLT5ucl9zZWdtZW50 cyA9IG5zZWdzOwogCQljbS0+Y21fbnNlZyA9IG5zZWdzOwotCQl4YmRfbWtzZWdhcnJheShzZWdz LCBuc2VncywgJmNtLT5jbV9ncmVmX2hlYWQsCi0JCSAgICB4ZW5idXNfZ2V0X290aGVyZW5kX2lk KHNjLT54YmRfZGV2KSwKLQkJICAgIGNtLT5jbV9vcGVyYXRpb24gPT0gQkxLSUZfT1BfV1JJVEUs Ci0JCSAgICBjbS0+Y21fc2dfcmVmcywgcmluZ19yZXEtPnNlZyk7CisJCWNtLT5jbV9zZ19yZWZz ID0geGVuX2RtYW1hcF9nZXRfZ3JlZnMoY20tPmNtX21hcCk7CisJCXhiZF9ta3NlZ2FycmF5KHNl Z3MsIG5zZWdzLCBjbS0+Y21fc2dfcmVmcywgcmluZ19yZXEtPnNlZyk7CiAJfSBlbHNlIHsKIAkJ YmxraWZfcmVxdWVzdF9pbmRpcmVjdF90ICpyaW5nX3JlcTsKIApAQCAtMjU5LDExICsyNDUsMTAg QEAgeGJkX3F1ZXVlX2NiKHZvaWQgKmFyZywgYnVzX2RtYV9zZWdtZW50X3QgKnNlZ3MsIGludCBu c2VncywgaW50IGVycm9yKQogCQlyaW5nX3JlcS0+aGFuZGxlID0gKGJsa2lmX3ZkZXZfdCkodWlu dHB0cl90KXNjLT54YmRfZGlzazsKIAkJcmluZ19yZXEtPm5yX3NlZ21lbnRzID0gbnNlZ3M7CiAJ CWNtLT5jbV9uc2VnID0gbnNlZ3M7Ci0JCXhiZF9ta3NlZ2FycmF5KHNlZ3MsIG5zZWdzLCAmY20t PmNtX2dyZWZfaGVhZCwKLQkJICAgIHhlbmJ1c19nZXRfb3RoZXJlbmRfaWQoc2MtPnhiZF9kZXYp LAotCQkgICAgY20tPmNtX29wZXJhdGlvbiA9PSBCTEtJRl9PUF9XUklURSwKLQkJICAgIGNtLT5j bV9zZ19yZWZzLCBjbS0+Y21faW5kaXJlY3Rpb25wYWdlcyk7Ci0JCW1lbWNweShyaW5nX3JlcS0+ aW5kaXJlY3RfZ3JlZnMsICZjbS0+Y21faW5kaXJlY3Rpb25yZWZzLAorCQljbS0+Y21fc2dfcmVm cyA9IHhlbl9kbWFtYXBfZ2V0X2dyZWZzKGNtLT5jbV9tYXApOworCQl4YmRfbWtzZWdhcnJheShz ZWdzLCBuc2VncywgY20tPmNtX3NnX3JlZnMsCisJCSAgICBjbS0+Y21faW5kaXJlY3Rpb25wYWdl cyk7CisJCW1lbWNweShyaW5nX3JlcS0+aW5kaXJlY3RfZ3JlZnMsIGNtLT5jbV9pbmRpcmVjdGlv bnJlZnMsCiAJCSAgICBzaXplb2YoZ3JhbnRfcmVmX3QpICogc2MtPnhiZF9tYXhfcmVxdWVzdF9p bmRpcmVjdHBhZ2VzKTsKIAl9CiAKQEAgLTI3NSw4ICsyNjAsNiBAQCB4YmRfcXVldWVfY2Iodm9p ZCAqYXJnLCBidXNfZG1hX3NlZ21lbnRfdCAqc2VncywgaW50IG5zZWdzLCBpbnQgZXJyb3IpCiAJ CW9wID0gMDsKIAlidXNfZG1hbWFwX3N5bmMoc2MtPnhiZF9pb19kbWF0LCBjbS0+Y21fbWFwLCBv cCk7CiAKLQlnbnR0YWJfZnJlZV9ncmFudF9yZWZlcmVuY2VzKGNtLT5jbV9ncmVmX2hlYWQpOwot CiAJeGJkX2VucXVldWVfY20oY20sIFhCRF9RX0JVU1kpOwogCiAJLyoKQEAgLTI5OSwxMCArMjgy LDEyIEBAIHhiZF9xdWV1ZV9yZXF1ZXN0KHN0cnVjdCB4YmRfc29mdGMgKnNjLCBzdHJ1Y3QgeGJk X2NvbW1hbmQgKmNtKQogCiAJaWYgKGNtLT5jbV9icCAhPSBOVUxMKQogCQllcnJvciA9IGJ1c19k bWFtYXBfbG9hZF9iaW8oc2MtPnhiZF9pb19kbWF0LCBjbS0+Y21fbWFwLAotCQkgICAgY20tPmNt X2JwLCB4YmRfcXVldWVfY2IsIGNtLCAwKTsKKwkJICAgIGNtLT5jbV9icCwgeGJkX3F1ZXVlX2Ni LCBjbSwKKwkJICAgIChjbS0+Y21fb3BlcmF0aW9uID09IEJMS0lGX09QX1dSSVRFKSA/IEJVU19E TUFfWEVOX1JPIDogMCk7CiAJZWxzZQogCQllcnJvciA9IGJ1c19kbWFtYXBfbG9hZChzYy0+eGJk X2lvX2RtYXQsIGNtLT5jbV9tYXAsCi0JCSAgICBjbS0+Y21fZGF0YSwgY20tPmNtX2RhdGFsZW4s IHhiZF9xdWV1ZV9jYiwgY20sIDApOworCQkgICAgY20tPmNtX2RhdGEsIGNtLT5jbV9kYXRhbGVu LCB4YmRfcXVldWVfY2IsIGNtLAorCQkgICAgKGNtLT5jbV9vcGVyYXRpb24gPT0gQkxLSUZfT1Bf V1JJVEUpID8gQlVTX0RNQV9YRU5fUk8gOiAwKTsKIAlpZiAoZXJyb3IgPT0gRUlOUFJPR1JFU1Mp IHsKIAkJLyoKIAkJICogTWFpbnRhaW4gcXVldWluZyBvcmRlciBieSBmcmVlemluZyB0aGUgcXVl dWUuICBUaGUgbmV4dApAQCAtMzE3LDIwICszMDIsNiBAQCB4YmRfcXVldWVfcmVxdWVzdChzdHJ1 Y3QgeGJkX3NvZnRjICpzYywgc3RydWN0IHhiZF9jb21tYW5kICpjbSkKIAlyZXR1cm4gKGVycm9y KTsKIH0KIAotc3RhdGljIHZvaWQKLXhiZF9yZXN0YXJ0X3F1ZXVlX2NhbGxiYWNrKHZvaWQgKmFy ZykKLXsKLQlzdHJ1Y3QgeGJkX3NvZnRjICpzYyA9IGFyZzsKLQotCW10eF9sb2NrKCZzYy0+eGJk X2lvX2xvY2spOwotCi0JeGJkX3RoYXcoc2MsIFhCREZfR05UX1NIT1JUQUdFKTsKLQotCXhiZF9z dGFydGlvKHNjKTsKLQotCW10eF91bmxvY2soJnNjLT54YmRfaW9fbG9jayk7Ci19Ci0KIHN0YXRp YyBzdHJ1Y3QgeGJkX2NvbW1hbmQgKgogeGJkX2Jpb19jb21tYW5kKHN0cnVjdCB4YmRfc29mdGMg KnNjKQogewpAQCAtMzUwLDE3ICszMjEsNiBAQCB4YmRfYmlvX2NvbW1hbmQoc3RydWN0IHhiZF9z b2Z0YyAqc2MpCiAJCXJldHVybiAoTlVMTCk7CiAJfQogCi0JaWYgKGdudHRhYl9hbGxvY19ncmFu dF9yZWZlcmVuY2VzKHNjLT54YmRfbWF4X3JlcXVlc3Rfc2VnbWVudHMsCi0JICAgICZjbS0+Y21f Z3JlZl9oZWFkKSAhPSAwKSB7Ci0JCWdudHRhYl9yZXF1ZXN0X2ZyZWVfY2FsbGJhY2soJnNjLT54 YmRfY2FsbGJhY2ssCi0JCSAgICB4YmRfcmVzdGFydF9xdWV1ZV9jYWxsYmFjaywgc2MsCi0JCSAg ICBzYy0+eGJkX21heF9yZXF1ZXN0X3NlZ21lbnRzKTsKLQkJeGJkX2ZyZWV6ZShzYywgWEJERl9H TlRfU0hPUlRBR0UpOwotCQl4YmRfcmVxdWV1ZV9iaW8oc2MsIGJwKTsKLQkJeGJkX2VucXVldWVf Y20oY20sIFhCRF9RX0ZSRUUpOwotCQlyZXR1cm4gKE5VTEwpOwotCX0KLQogCWNtLT5jbV9icCA9 IGJwOwogCWNtLT5jbV9zZWN0b3JfbnVtYmVyID0gKGJsa2lmX3NlY3Rvcl90KWJwLT5iaW9fcGJs a25vOwogCkBAIC01MDIsOCArNDYyLDYgQEAgeGJkX2ludCh2b2lkICp4c2MpCiAJCWNtICAgPSAm c2MtPnhiZF9zaGFkb3dbYnJldC0+aWRdOwogCiAJCXhiZF9yZW1vdmVfY20oY20sIFhCRF9RX0JV U1kpOwotCQlnbnR0YWJfZW5kX2ZvcmVpZ25fYWNjZXNzX3JlZmVyZW5jZXMoY20tPmNtX25zZWcs Ci0JCSAgICBjbS0+Y21fc2dfcmVmcyk7CiAJCWkrKzsKIAogCQlpZiAoY20tPmNtX29wZXJhdGlv biA9PSBCTEtJRl9PUF9SRUFEKQpAQCAtNTE1LDYgKzQ3Myw3IEBAIHhiZF9pbnQodm9pZCAqeHNj KQogCQkJb3AgPSAwOwogCQlidXNfZG1hbWFwX3N5bmMoc2MtPnhiZF9pb19kbWF0LCBjbS0+Y21f bWFwLCBvcCk7CiAJCWJ1c19kbWFtYXBfdW5sb2FkKHNjLT54YmRfaW9fZG1hdCwgY20tPmNtX21h cCk7CisJCWNtLT5jbV9zZ19yZWZzID0gTlVMTDsKIAogCQkvKgogCQkgKiBSZWxlYXNlIGFueSBo b2xkIHRoaXMgY29tbWFuZCBoYXMgb24gZnV0dXJlIGNvbW1hbmQKQEAgLTYyMiwxNCArNTgxLDYg QEAgeGJkX2R1bXAodm9pZCAqYXJnLCB2b2lkICp2aXJ0dWFsLCB2bV9vZmZzZXRfdCBwaHlzaWNh bCwgb2ZmX3Qgb2Zmc2V0LAogCQkJcmV0dXJuIChFQlVTWSk7CiAJCX0KIAotCQlpZiAoZ250dGFi X2FsbG9jX2dyYW50X3JlZmVyZW5jZXMoc2MtPnhiZF9tYXhfcmVxdWVzdF9zZWdtZW50cywKLQkJ ICAgICZjbS0+Y21fZ3JlZl9oZWFkKSAhPSAwKSB7Ci0JCQl4YmRfZnJlZV9jb21tYW5kKGNtKTsK LQkJCW10eF91bmxvY2soJnNjLT54YmRfaW9fbG9jayk7Ci0JCQlkZXZpY2VfcHJpbnRmKHNjLT54 YmRfZGV2LCAibm8gbW9yZSBncmFudCBhbGxvY3M/XG4iKTsKLQkJCXJldHVybiAoRUJVU1kpOwot CQl9Ci0KIAkJY2h1bmsgPSBsZW5ndGggPiBzYy0+eGJkX21heF9yZXF1ZXN0X3NpemUgPwogCQkg ICAgc2MtPnhiZF9tYXhfcmVxdWVzdF9zaXplIDogbGVuZ3RoOwogCQljbS0+Y21fZGF0YSA9IHZp cnR1YWw7CkBAIC0xMDYyLDE4ICsxMDEzLDIxIEBAIHhiZF9mcmVlKHN0cnVjdCB4YmRfc29mdGMg KnNjKQogCiAJCQljbSA9ICZzYy0+eGJkX3NoYWRvd1tpXTsKIAkJCWlmIChjbS0+Y21fc2dfcmVm cyAhPSBOVUxMKSB7Ci0JCQkJZnJlZShjbS0+Y21fc2dfcmVmcywgTV9YRU5CTE9DS0ZST05UKTsK KwkJCQlidXNfZG1hbWFwX3VubG9hZChzYy0+eGJkX2lvX2RtYXQsIGNtLT5jbV9tYXApOwogCQkJ CWNtLT5jbV9zZ19yZWZzID0gTlVMTDsKIAkJCX0KIAogCQkJaWYgKGNtLT5jbV9pbmRpcmVjdGlv bnBhZ2VzICE9IE5VTEwpIHsKLQkJCQlnbnR0YWJfZW5kX2ZvcmVpZ25fYWNjZXNzX3JlZmVyZW5j ZXMoCi0JCQkJICAgIHNjLT54YmRfbWF4X3JlcXVlc3RfaW5kaXJlY3RwYWdlcywKLQkJCQkgICAg JmNtLT5jbV9pbmRpcmVjdGlvbnJlZnNbMF0pOworCQkJCWJ1c19kbWFtYXBfdW5sb2FkKHNjLT54 YmRfaW9fZG1hdCwKKwkJCQkgICAgY20tPmNtX2luZGlyZWN0aW9ubWFwKTsKKwkJCQlidXNfZG1h bWFwX2Rlc3Ryb3koc2MtPnhiZF9pb19kbWF0LAorCQkJCSAgICBjbS0+Y21faW5kaXJlY3Rpb25t YXApOwogCQkJCWNvbnRpZ2ZyZWUoY20tPmNtX2luZGlyZWN0aW9ucGFnZXMsIFBBR0VfU0laRSAq CiAJCQkJICAgIHNjLT54YmRfbWF4X3JlcXVlc3RfaW5kaXJlY3RwYWdlcywKIAkJCQkgICAgTV9Y RU5CTE9DS0ZST05UKTsKIAkJCQljbS0+Y21faW5kaXJlY3Rpb25wYWdlcyA9IE5VTEw7CisJCQkJ Y20tPmNtX2luZGlyZWN0aW9ucmVmcyA9IE5VTEw7CisJCQkJY20tPmNtX2luZGlyZWN0aW9ubWFw ID0gTlVMTDsKIAkJCX0KIAogCQkJYnVzX2RtYW1hcF9kZXN0cm95KHNjLT54YmRfaW9fZG1hdCwg Y20tPmNtX21hcCk7CkBAIC0xMjE0LDcgKzExNjgsMzYgQEAgeGJkX2luaXRpYWxpemUoc3RydWN0 IHhiZF9zb2Z0YyAqc2MpCiAJeGVuYnVzX3NldF9zdGF0ZShzYy0+eGJkX2RldiwgWGVuYnVzU3Rh dGVJbml0aWFsaXNlZCk7CiB9CiAKLS8qIAorCisvKgorICogQ2FsbGJhY2sgcmVjZWl2ZWQgZnJv bSB0aGUgZG1hIGxvYWQgd2hlbiB4YmRfY29ubmVjdCgpIGxvYWRzIHRoZSBpbmRpcmVjdGlvbgor ICogcGFnZXMuCisgKi8KK3N0YXRpYyB2b2lkCit4YmRfaW5kaXJlY3RwYWdlX2NiKHZvaWQgKmNh bGxiYWNrX2FyZywgYnVzX2RtYV9zZWdtZW50X3QgKnNlZ3MsIGludCBuc2VnLAorICAgICAgICBp bnQgZXJyb3IpCit7CisJc3RydWN0IHhiZF9jb21tYW5kICpjbTsKKworCWNtID0gY2FsbGJhY2tf YXJnOworCisJaWYgKGVycm9yKSB7CisJCS8qIERpc2FibGUgaW5kaXJlY3Rpb24gcGFnZXMgYW5k IGNvbnRpbnVlLiAqLworCQljbS0+Y21fc2MtPnhiZF9tYXhfcmVxdWVzdF9zZWdtZW50cyA9IDA7 CisJCWNtLT5jbV9pbmRpcmVjdGlvbnBhZ2VzID0gTlVMTDsKKwkJcmV0dXJuOworCX0KKworCUtB U1NFUlQoKG5zZWcgPT0gY20tPmNtX3NjLT54YmRfbWF4X3JlcXVlc3RfaW5kaXJlY3RwYWdlcyks CisJICAgICgiJXM6IG51bWJlciBvZiBkbWEgc2VnbWVudHMgbm90IGVxdWFsIHRvIHRoZSBleHBl Y3RlZCBudW1iZXIuICIKKwkgICAgIm5zZWcgPSAlZCwgeGJkX21heF9yZXF1ZXN0X3NlZ21lbnRz ID0gJWQuIFZlcmlmeSB0aGF0IHRoZSAiCisJICAgICJjb25zdHJhaW50cyBwYXNzZWQgd2hlbiBj cmVhdGluZyB0aGUgdGFnIGFyZSBjb3JyZWN0LiIsIF9fZnVuY19fLAorCSAgICBuc2VnLCBjbS0+ Y21fc2MtPnhiZF9tYXhfcmVxdWVzdF9zZWdtZW50cykpOworCisJY20tPmNtX2luZGlyZWN0aW9u cmVmcyA9IHhlbl9kbWFtYXBfZ2V0X2dyZWZzKGNtLT5jbV9pbmRpcmVjdGlvbm1hcCk7Cit9CisK Ky8qCiAgKiBJbnZva2VkIHdoZW4gdGhlIGJhY2tlbmQgaXMgZmluYWxseSAncmVhZHknIChhbmQg aGFzIHB1Ymxpc2hlZAogICogdGhlIGRldGFpbHMgYWJvdXQgdGhlIHBoeXNpY2FsIGRldmljZSAt ICNzZWN0b3JzLCBzaXplLCBldGMpLiAKICAqLwpAQCAtMTIyNSw3ICsxMjA4LDcgQEAgeGJkX2Nv bm5lY3Qoc3RydWN0IHhiZF9zb2Z0YyAqc2MpCiAJdW5zaWduZWQgbG9uZyBzZWN0b3JzLCBzZWN0 b3Jfc2l6ZSwgcGh5c19zZWN0b3Jfc2l6ZTsKIAl1bnNpZ25lZCBpbnQgYmluZm87CiAJaW50IGVy ciwgZmVhdHVyZV9iYXJyaWVyLCBmZWF0dXJlX2ZsdXNoOwotCWludCBpLCBqOworCWludCBpLCBm bGFnczsKIAogCWlmIChzYy0+eGJkX3N0YXRlID09IFhCRF9TVEFURV9DT05ORUNURUQgfHwgCiAJ ICAgIHNjLT54YmRfc3RhdGUgPT0gWEJEX1NUQVRFX1NVU1BFTkRFRCkKQEAgLTEyODUsNiArMTI2 OCw5IEBAIHhiZF9jb25uZWN0KHN0cnVjdCB4YmRfc29mdGMgKnNjKQogCXNjLT54YmRfbWF4X3Jl cXVlc3Rfc2l6ZSA9CiAJICAgIFhCRF9TRUdTX1RPX1NJWkUoc2MtPnhiZF9tYXhfcmVxdWVzdF9z ZWdtZW50cyk7CiAKKwlmbGFncyA9IEJVU19ETUFfQUxMT0NOT1cgfAorCSAgICAoeGVuYnVzX2dl dF9vdGhlcmVuZF9pZChzYy0+eGJkX2RldikgPDwgQlVTX0RNQV9YRU5fRE9NSURfU0hJRlQpOwor CiAJLyogQWxsb2NhdGUgZGF0YXN0cnVjdHVyZXMgYmFzZWQgb24gbmVnb3RpYXRlZCB2YWx1ZXMu ICovCiAJZXJyID0gYnVzX2RtYV90YWdfY3JlYXRlKAogCSAgICBidXNfZ2V0X2RtYV90YWcoc2Mt PnhiZF9kZXYpLAkvKiBwYXJlbnQgKi8KQEAgLTEyOTUsNyArMTI4MSw3IEBAIHhiZF9jb25uZWN0 KHN0cnVjdCB4YmRfc29mdGMgKnNjKQogCSAgICBzYy0+eGJkX21heF9yZXF1ZXN0X3NpemUsCiAJ ICAgIHNjLT54YmRfbWF4X3JlcXVlc3Rfc2VnbWVudHMsCiAJICAgIFBBR0VfU0laRSwJCQkJLyog bWF4c2Vnc2l6ZSAqLwotCSAgICBCVVNfRE1BX0FMTE9DTk9XLAkJCS8qIGZsYWdzICovCisJICAg IGZsYWdzLAkJCQkvKiBmbGFncyAqLwogCSAgICBidXNkbWFfbG9ja19tdXRleCwJCQkvKiBsb2Nr ZnVuYyAqLwogCSAgICAmc2MtPnhiZF9pb19sb2NrLAkJCS8qIGxvY2thcmcgKi8KIAkgICAgJnNj LT54YmRfaW9fZG1hdCk7CkBAIC0xMzE4LDEzICsxMzA0LDkgQEAgeGJkX2Nvbm5lY3Qoc3RydWN0 IHhiZF9zb2Z0YyAqc2MpCiAJZm9yIChpID0gMDsgaSA8IHNjLT54YmRfbWF4X3JlcXVlc3RzOyBp KyspIHsKIAkJc3RydWN0IHhiZF9jb21tYW5kICpjbTsKIAkJdm9pZCAqIGluZGlyZWN0cGFnZXM7 CisJCWludCBpbmRpcmVjdGZsYWdzOwogCiAJCWNtID0gJnNjLT54YmRfc2hhZG93W2ldOwotCQlj bS0+Y21fc2dfcmVmcyA9IG1hbGxvYygKLQkJICAgIHNpemVvZihncmFudF9yZWZfdCkgKiBzYy0+ eGJkX21heF9yZXF1ZXN0X3NlZ21lbnRzLAotCQkgICAgTV9YRU5CTE9DS0ZST05ULCBNX05PV0FJ VCk7Ci0JCWlmIChjbS0+Y21fc2dfcmVmcyA9PSBOVUxMKQotCQkJYnJlYWs7CiAJCWNtLT5jbV9p ZCA9IGk7CiAJCWNtLT5jbV9mbGFncyA9IFhCRENGX0lOSVRJQUxJWkVSOwogCQljbS0+Y21fc2Mg PSBzYzsKQEAgLTEzMzksMjEgKzEzMjEsMjkgQEAgeGJkX2Nvbm5lY3Qoc3RydWN0IHhiZF9zb2Z0 YyAqc2MpCiAJCQkJc2MtPnhiZF9tYXhfcmVxdWVzdF9pbmRpcmVjdHBhZ2VzID0gMDsKIAkJfSBl bHNlIHsKIAkJCWluZGlyZWN0cGFnZXMgPSBOVUxMOworCQkJY20tPmNtX2luZGlyZWN0aW9ucGFn ZXMgPSBpbmRpcmVjdHBhZ2VzOworCQkJeGJkX2ZyZWVfY29tbWFuZChjbSk7CisJCQljb250aW51 ZTsKIAkJfQotCQlmb3IgKGogPSAwOyBqIDwgc2MtPnhiZF9tYXhfcmVxdWVzdF9pbmRpcmVjdHBh Z2VzOyBqKyspIHsKLQkJCWlmIChnbnR0YWJfZ3JhbnRfZm9yZWlnbl9hY2Nlc3MoCi0JCQkgICAg eGVuYnVzX2dldF9vdGhlcmVuZF9pZChzYy0+eGJkX2RldiksCi0JCQkgICAgKHZ0b3BoeXMoaW5k aXJlY3RwYWdlcykgPj4gUEFHRV9TSElGVCkgKyBqLAotCQkJICAgIDEgLyogZ3JhbnQgcmVhZC1v bmx5IGFjY2VzcyAqLywKLQkJCSAgICAmY20tPmNtX2luZGlyZWN0aW9ucmVmc1tqXSkpCi0JCQkJ YnJlYWs7CisKKwkJaWYgKGJ1c19kbWFtYXBfY3JlYXRlKHNjLT54YmRfaW9fZG1hdCwgMCwKKwkJ ICAgICZjbS0+Y21faW5kaXJlY3Rpb25tYXApKSB7CisJCQljb250aWdmcmVlKGluZGlyZWN0cGFn ZXMsIFBBR0VfU0laRSAqCisJCQkgICAgc2MtPnhiZF9tYXhfcmVxdWVzdF9pbmRpcmVjdHBhZ2Vz LCBNX1hFTkJMT0NLRlJPTlQpOworCQkJYnJlYWs7CiAJCX0KLQkJaWYgKGogPCBzYy0+eGJkX21h eF9yZXF1ZXN0X2luZGlyZWN0cGFnZXMpIHsKLQkJCWNvbnRpZ2ZyZWUoaW5kaXJlY3RwYWdlcywK LQkJCSAgICBQQUdFX1NJWkUgKiBzYy0+eGJkX21heF9yZXF1ZXN0X2luZGlyZWN0cGFnZXMsCi0J CQkgICAgTV9YRU5CTE9DS0ZST05UKTsKKworCQkvKiBHcmFudCByZWFkLW9ubHkgYWNjZXNzICov CisJCWluZGlyZWN0ZmxhZ3MgPSBCVVNfRE1BX05PV0FJVCB8IEJVU19ETUFfWEVOX1JPOworCQlp ZiAoYnVzX2RtYW1hcF9sb2FkKHNjLT54YmRfaW9fZG1hdCwgY20tPmNtX2luZGlyZWN0aW9ubWFw LAorCQkgICAgaW5kaXJlY3RwYWdlcywgUEFHRV9TSVpFICogc2MtPnhiZF9tYXhfcmVxdWVzdF9p bmRpcmVjdHBhZ2VzLAorCQkgICAgeGJkX2luZGlyZWN0cGFnZV9jYiwgY20sIGluZGlyZWN0Zmxh Z3MpKSB7CisKKwkJCWNvbnRpZ2ZyZWUoaW5kaXJlY3RwYWdlcywgUEFHRV9TSVpFICoKKwkJCSAg ICBzYy0+eGJkX21heF9yZXF1ZXN0X2luZGlyZWN0cGFnZXMsIE1fWEVOQkxPQ0tGUk9OVCk7CiAJ CQlicmVhazsKIAkJfQorCiAJCWNtLT5jbV9pbmRpcmVjdGlvbnBhZ2VzID0gaW5kaXJlY3RwYWdl czsKIAkJeGJkX2ZyZWVfY29tbWFuZChjbSk7CiAJfQpkaWZmIC0tZ2l0IGEvc3lzL2Rldi94ZW4v YmxrZnJvbnQvYmxvY2suaCBiL3N5cy9kZXYveGVuL2Jsa2Zyb250L2Jsb2NrLmgKaW5kZXggYjQ4 MTM5NjU5Yi4uNTc4N2YzMzc3NSAxMDA2NDQKLS0tIGEvc3lzL2Rldi94ZW4vYmxrZnJvbnQvYmxv Y2suaAorKysgYi9zeXMvZGV2L3hlbi9ibGtmcm9udC9ibG9jay5oCkBAIC0xMTcsNyArMTE3LDYg QEAgc3RydWN0IHhiZF9jb21tYW5kIHsKIAl1aW50NjRfdAkJIGNtX2lkOwogCWdyYW50X3JlZl90 CQkqY21fc2dfcmVmczsKIAlzdHJ1Y3QgYmlvCQkqY21fYnA7Ci0JZ3JhbnRfcmVmX3QJCSBjbV9n cmVmX2hlYWQ7CiAJdm9pZAkJCSpjbV9kYXRhOwogCXNpemVfdAkJCSBjbV9kYXRhbGVuOwogCXVf aW50CQkJIGNtX25zZWc7CkBAIC0xMjYsNyArMTI1LDggQEAgc3RydWN0IHhiZF9jb21tYW5kIHsK IAlpbnQJCQkgY21fc3RhdHVzOwogCXhiZF9jYmNmX3QJCSpjbV9jb21wbGV0ZTsKIAl2b2lkCQkJ KmNtX2luZGlyZWN0aW9ucGFnZXM7Ci0JZ3JhbnRfcmVmX3QJCSBjbV9pbmRpcmVjdGlvbnJlZnNb QkxLSUZfTUFYX0lORElSRUNUX1BBR0VTX1BFUl9SRVFVRVNUXTsKKwlncmFudF9yZWZfdAkJKmNt X2luZGlyZWN0aW9ucmVmczsKKwlidXNfZG1hbWFwX3QJCSBjbV9pbmRpcmVjdGlvbm1hcDsKIH07 CiAKIHR5cGVkZWYgZW51bSB7CmRpZmYgLS1naXQgYS9zeXMvZGV2L3hlbi9uZXRmcm9udC9uZXRm cm9udC5jIGIvc3lzL2Rldi94ZW4vbmV0ZnJvbnQvbmV0ZnJvbnQuYwppbmRleCAzOGMzYjVhNmZm Li40NTZjYTk4ZDkwIDEwMDY0NAotLS0gYS9zeXMvZGV2L3hlbi9uZXRmcm9udC9uZXRmcm9udC5j CisrKyBiL3N5cy9kZXYveGVuL25ldGZyb250L25ldGZyb250LmMKQEAgLTYzLDYgKzYzLDggQEAg X19GQlNESUQoIiRGcmVlQlNEJCIpOwogCiAjaW5jbHVkZSA8c3lzL2J1cy5oPgogCisjaW5jbHVk ZSA8bWFjaGluZS9idXMuaD4KKwogI2luY2x1ZGUgPHhlbi94ZW4tb3MuaD4KICNpbmNsdWRlIDx4 ZW4vaHlwZXJ2aXNvci5oPgogI2luY2x1ZGUgPHhlbi94ZW5faW50ci5oPgpAQCAtNzAsNiArNzIs NyBAQCBfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CiAjaW5jbHVkZSA8eGVuL2ludGVyZmFjZS9tZW1v cnkuaD4KICNpbmNsdWRlIDx4ZW4vaW50ZXJmYWNlL2lvL25ldGlmLmg+CiAjaW5jbHVkZSA8eGVu L3hlbmJ1cy94ZW5idXN2YXIuaD4KKyNpbmNsdWRlIDx4ZW4vYnVzZG1hX3hlbi5oPgogCiAjaW5j bHVkZSAieGVuYnVzX2lmLmgiCiAKQEAgLTE2OSw5ICsxNzIsMTMgQEAgc3RydWN0IG5ldGZyb250 X3J4cSB7CiAJbmV0aWZfcnhfZnJvbnRfcmluZ190IAlyaW5nOwogCXhlbl9pbnRyX2hhbmRsZV90 CXhlbl9pbnRyX2hhbmRsZTsKIAotCWdyYW50X3JlZl90IAkJZ3JlZl9oZWFkOwogCWdyYW50X3Jl Zl90IAkJZ3JhbnRfcmVmW05FVF9SWF9SSU5HX1NJWkUgKyAxXTsKIAorCWJ1c19kbWFfdGFnX3QJ CWRtYXQ7CisJYnVzX2RtYW1hcF90CQltYXBfcG9vbFtORVRfUlhfUklOR19TSVpFICsgMV07CisJ dW5zaWduZWQgaW50CQlwb29sX2lkeDsKKwlidXNfZG1hbWFwX3QgCQltYXBzW05FVF9SWF9SSU5H X1NJWkUgKyAxXTsKKwogCXN0cnVjdCBtYnVmCQkqbWJ1ZnNbTkVUX1JYX1JJTkdfU0laRSArIDFd OwogCiAJc3RydWN0IGxyb19jdHJsCQlscm87CkBAIC0xODksOSArMTk2LDEzIEBAIHN0cnVjdCBu ZXRmcm9udF90eHEgewogCW5ldGlmX3R4X2Zyb250X3JpbmdfdAlyaW5nOwogCXhlbl9pbnRyX2hh bmRsZV90IAl4ZW5faW50cl9oYW5kbGU7CiAKLQlncmFudF9yZWZfdAkJZ3JlZl9oZWFkOwogCWdy YW50X3JlZl90CQlncmFudF9yZWZbTkVUX1RYX1JJTkdfU0laRSArIDFdOwogCisJYnVzX2RtYV90 YWdfdAkJZG1hdDsKKwlidXNfZG1hbWFwX3QJCW1hcF9wb29sW05FVF9UWF9SSU5HX1NJWkUgKyAx XTsKKwl1bnNpZ25lZCBpbnQJCXBvb2xfaWR4OworCWJ1c19kbWFtYXBfdCAJCW1hcHNbTkVUX1RY X1JJTkdfU0laRSArIDFdOworCiAJc3RydWN0IG1idWYJCSptYnVmc1tORVRfVFhfUklOR19TSVpF ICsgMV07CiAJaW50CQkJbWJ1ZnNfY250OwogCXN0cnVjdCBidWZfcmluZwkJKmJyOwpAQCAtMzAx LDYgKzMxMiw5MCBAQCB4bl9nZXRfcnhfcmVmKHN0cnVjdCBuZXRmcm9udF9yeHEgKnJ4cSwgUklO R19JRFggcmkpCiAJcmV0dXJuIChyZWYpOwogfQogCitzdGF0aWMgaW5saW5lIGJ1c19kbWFtYXBf dAoreG5fZ2V0X3J4X21hcChzdHJ1Y3QgbmV0ZnJvbnRfcnhxICpyeHEsIFJJTkdfSURYIHJpKQor eworCWludCBpOworCWJ1c19kbWFtYXBfdCBtYXA7CisKKwlpID0geG5fcnhpZHgocmkpOworCW1h cCA9IHJ4cS0+bWFwc1tpXTsKKworCUtBU1NFUlQobWFwICE9IE5VTEwsICgiSW52YWxpZCBkbWEg bWFwIikpOworCXJ4cS0+bWFwc1tpXSA9IE5VTEw7CisJcmV0dXJuKG1hcCk7Cit9CisKKy8qIFhY WCBTdWdnZXN0IGEgYmV0dGVyIGZ1bmN0aW9uIG5hbWU/ICovCitzdGF0aWMgaW5saW5lIGJ1c19k bWFtYXBfdAoreG5fdW5wb29sX3J4X21hcChzdHJ1Y3QgbmV0ZnJvbnRfcnhxICpyeHEpCit7CisJ LyogWFhYIFNob3VsZCBJIGNvbnZlcnQgdGhpcyB0byBhIEtBU1NFUlQ/ICovCisJaWYgKHJ4cS0+ cG9vbF9pZHggPCAwKSB7CisJCXJldHVybiAoTlVMTCk7CisJfQorCisJcmV0dXJuIChyeHEtPm1h cF9wb29sW3J4cS0+cG9vbF9pZHgtLV0pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3huX3Jl cG9vbF9yeF9tYXAoc3RydWN0IG5ldGZyb250X3J4cSAqcnhxLCBidXNfZG1hbWFwX3QgbWFwKQor eworCUtBU1NFUlQocnhxLT5wb29sX2lkeCA8PSBORVRfUlhfUklOR19TSVpFLAorCSAgICAoIlRv byBtYW55IHJ4IG1hcHMiKSk7CisKKwlyeHEtPm1hcF9wb29sWysrcnhxLT5wb29sX2lkeF0gPSBt YXA7Cit9CisKK3N0YXRpYyBpbmxpbmUgYnVzX2RtYW1hcF90Cit4bl91bnBvb2xfdHhfbWFwKHN0 cnVjdCBuZXRmcm9udF90eHEgKnR4cSkKK3sKKwlpZiAodHhxLT5wb29sX2lkeCA8IDApIHsKKwkJ cmV0dXJuIChOVUxMKTsKKwl9CisKKwlyZXR1cm4gKHR4cS0+bWFwX3Bvb2xbdHhxLT5wb29sX2lk eC0tXSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAoreG5fcmVwb29sX3R4X21hcChzdHJ1Y3Qg bmV0ZnJvbnRfdHhxICp0eHEsIGJ1c19kbWFtYXBfdCBtYXApCit7CisJS0FTU0VSVCh0eHEtPnBv b2xfaWR4IDw9IE5FVF9UWF9SSU5HX1NJWkUsCisJICAgICgiVG9vIG1hbnkgdHggbWFwcyIpKTsK KwlLQVNTRVJUKG1hcCAhPSBOVUxMLCAoIk5VTEwgbWFwIGJlaW5nIHB1dCBpbiB0aGUgdHggcG9v bCIpKTsKKworCXR4cS0+bWFwX3Bvb2xbKyt0eHEtPnBvb2xfaWR4XSA9IG1hcDsKK30KKworc3Rh dGljIGlubGluZSBncmFudF9yZWZfdAoreG5fZ2V0X21hcF9ncmVmKGJ1c19kbWFtYXBfdCBtYXAp Cit7CisJZ3JhbnRfcmVmX3QgKnJlZnM7CisKKwkvKgorCSAqIFdlIGFzc3VtZSB0aGF0IHRoZXJl IGlzIG9ubHkgb25lIGdyYW50IHJlZmVyZW5jZS4gSXQgaXMgdGhlCisJICogcmVzcG9uc2liaWxp dHkgb2YgdGhlIGZ1bmN0aW9uIGNhbGxpbmcgdGhlIGxvYWQgdG8gbWFrZSBzdXJlIHRoaXMKKwkg KiBhc3N1bXB0aW9uIGhvbGRzIHRydWUuCisJICovCisJcmVmcyA9IHhlbl9kbWFtYXBfZ2V0X2dy ZWZzKG1hcCk7CisKKwlyZXR1cm4gKnJlZnM7Cit9CisKKy8qCisgKiBDYWxsYmFjayByZWNlaXZl ZCB3aGVuIHRoZSBkbWEgbG9hZCBpcyBjb21wbGV0ZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlz IGEgZ2VuZXJpYyBvbmUgdXNlZCBieSByeCBhbmQgdHggZnVuY3Rpb25zLiBJZiB5b3Ugd2FudCB0 bworICogYWRkIGZ1bmN0aW9uLXNwZWNpZmljIGZ1bmN0aW9uYWxpdHksIGRvbid0IGRvIGl0IGhl cmUuIENyZWF0ZSBhIG5ldyBvbmUuCisgKi8KK3N0YXRpYyB2b2lkCit4bl9kbWFfY2Iodm9pZCAq YXJnLCBidXNfZG1hX3NlZ21lbnRfdCAqc2VncywgaW50IG5zZWcsIGludCBlcnJvcikKK3sKKwlL QVNTRVJUKGVycm9yID09IDAsICgiJXM6IExvYWQgZmFpbGVkIHdpdGggZXJyb3IgY29kZSAlZCIs IF9fZnVuY19fLAorCSAgICBlcnJvcikpOworCUtBU1NFUlQobnNlZyA9PSAxLCAoIiVzOiBNb3Jl IGRtYSBzZWdtZW50cyB0aGFuIGV4cGVjdGVkIiwgX19mdW5jX18pKTsKK30KKwogI2RlZmluZSBJ UFJJTlRLKGZtdCwgYXJncy4uLikgXAogICAgIHByaW50ZigiW1hFTl0gIiBmbXQsICMjYXJncykK ICNpZmRlZiBJTlZBUklBTlRTCkBAIC02NjYsOSArNzYxLDI2IEBAIHhuX3R4cV90cV9kZWZlcnJl ZCh2b2lkICp4dHhxLCBpbnQgcGVuZGluZykKIHN0YXRpYyB2b2lkCiBkaXNjb25uZWN0X3J4cShz dHJ1Y3QgbmV0ZnJvbnRfcnhxICpyeHEpCiB7CisJaW50IGksIGVycm9yOwogCiAJeG5fcmVsZWFz ZV9yeF9idWZzKHJ4cSk7Ci0JZ250dGFiX2ZyZWVfZ3JhbnRfcmVmZXJlbmNlcyhyeHEtPmdyZWZf aGVhZCk7CisJaWYgKHJ4cS0+cG9vbF9pZHggIT0gTkVUX1JYX1JJTkdfU0laRSkgeworCQlwcmlu dGYoIiVzOiBTb21lIG1hcHMgYXJlIHN0aWxsIGluLXVzZVxuIiwgX19mdW5jX18pOworCX0KKwor CWZvciAoaSA9IDA7IGkgPD0gTkVUX1JYX1JJTkdfU0laRTsgaSsrKSB7CisJCWVycm9yID0gYnVz X2RtYW1hcF9kZXN0cm95KHJ4cS0+ZG1hdCwKKwkJICAgIHJ4cS0+bWFwX3Bvb2xbaV0pOworCQlL QVNTRVJUKGVycm9yID09IDAsICgiJXM6IGRlc3RydWN0aW9uIG9mIG1hcCBwb29sIGZhaWxlZCIs CisJCSAgICBfX2Z1bmNfXykpOworCX0KKworCXJ4cS0+cG9vbF9pZHggPSAtMTsKKworCWVycm9y ID0gYnVzX2RtYV90YWdfZGVzdHJveShyeHEtPmRtYXQpOworCUtBU1NFUlQoZXJyb3IgPT0gMCwg KCIlczogZGVzdHJ1Y3Rpb24gb2YgcnhxIGRtYSB0YWcgZmFpbGVkIiwKKwkgICAgIF9fZnVuY19f KSk7CisKIAlnbnR0YWJfZW5kX2ZvcmVpZ25fYWNjZXNzKHJ4cS0+cmluZ19yZWYsIE5VTEwpOwog CS8qCiAJICogTm8gc3BsaXQgZXZlbnQgY2hhbm5lbCBzdXBwb3J0IGF0IHRoZSBtb21lbnQsIGhh bmRsZSB3aWxsCkBAIC03MDMsMTMgKzgxNSwxNiBAQCBzZXR1cF9yeHFzKGRldmljZV90IGRldiwg c3RydWN0IG5ldGZyb250X2luZm8gKmluZm8sCiAJICAgdW5zaWduZWQgbG9uZyBudW1fcXVldWVz KQogewogCWludCBxLCBpOwotCWludCBlcnJvcjsKKwlpbnQgZXJyb3IsIGZsYWdzOwogCW5ldGlm X3J4X3NyaW5nX3QgKnJ4czsKIAlzdHJ1Y3QgbmV0ZnJvbnRfcnhxICpyeHE7CiAKIAlpbmZvLT5y eHEgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBuZXRmcm9udF9yeHEpICogbnVtX3F1ZXVlcywKIAkg ICAgTV9ERVZCVUYsIE1fV0FJVE9LfE1fWkVSTyk7CiAKKwkvKiBGbGFncyB0byBiZSBwYXNzZWQg dG8gYnVzX2RtYV90YWdfY3JlYXRlKCkuICovCisJZmxhZ3MgPSB4ZW5idXNfZ2V0X290aGVyZW5k X2lkKGRldikgPDwgQlVTX0RNQV9YRU5fRE9NSURfU0hJRlQ7CisKIAlmb3IgKHEgPSAwOyBxIDwg bnVtX3F1ZXVlczsgcSsrKSB7CiAJCXJ4cSA9ICZpbmZvLT5yeHFbcV07CiAKQEAgLTcxNywyMiAr ODMyLDQ1IEBAIHNldHVwX3J4cXMoZGV2aWNlX3QgZGV2LCBzdHJ1Y3QgbmV0ZnJvbnRfaW5mbyAq aW5mbywKIAkJcnhxLT5pbmZvID0gaW5mbzsKIAkJcnhxLT5yaW5nX3JlZiA9IEdSQU5UX1JFRl9J TlZBTElEOwogCQlyeHEtPnJpbmcuc3JpbmcgPSBOVUxMOworCQlyeHEtPnBvb2xfaWR4ID0gLTE7 CiAJCXNucHJpbnRmKHJ4cS0+bmFtZSwgWE5fUVVFVUVfTkFNRV9MRU4sICJ4bnJ4XyV1IiwgcSk7 CiAJCW10eF9pbml0KCZyeHEtPmxvY2ssIHJ4cS0+bmFtZSwgIm5ldGZyb250IHJlY2VpdmUgbG9j ayIsCiAJCSAgICBNVFhfREVGKTsKIAorCQllcnJvciA9IGJ1c19kbWFfdGFnX2NyZWF0ZSgKKwkJ ICAgIGJ1c19nZXRfZG1hX3RhZyhkZXYpLAkvKiBwYXJlbnQgKi8KKwkJICAgIDEsIFBBR0VfU0la RSwJCS8qIGFsaWdubWVudCwgYm91bmRhcnkgKi8KKwkJICAgIEJVU19TUEFDRV9NQVhBRERSLAkJ LyogbG93YWRkciAqLworCQkgICAgQlVTX1NQQUNFX01BWEFERFIsCQkvKiBoaWdoYWRkciAqLwor CQkgICAgTlVMTCwgTlVMTCwJCQkvKiBmaWx0ZXIsIGZpbHRlcmFyZyAqLworCQkgICAgUEFHRV9T SVpFLAkJCS8qIG1heHNpemUgKi8KKwkJICAgIDEsCQkJCS8qIG5zZWdtZW50cyAqLworCQkgICAg UEFHRV9TSVpFLAkJCS8qIG1heHNlZ3NpemUgKi8KKwkJICAgIGZsYWdzLAkJCS8qIGZsYWdzICov CisJCSAgICBOVUxMLAkJCS8qIGxvY2tmdW5jICovCisJCSAgICBOVUxMLAkJCS8qIGxvY2thcmcg Ki8KKwkJICAgICZyeHEtPmRtYXQpOworCisJCWlmIChlcnJvcikgeworCQkJZGV2aWNlX3ByaW50 ZihkZXYsICJDcmVhdGluZyB0eCB0YWcgZmFpbGVkXG4iKTsKKwkJCWdvdG8gZmFpbDsKKwkJfQor CiAJCWZvciAoaSA9IDA7IGkgPD0gTkVUX1JYX1JJTkdfU0laRTsgaSsrKSB7CiAJCQlyeHEtPm1i dWZzW2ldID0gTlVMTDsKLQkJCXJ4cS0+Z3JhbnRfcmVmW2ldID0gR1JBTlRfUkVGX0lOVkFMSUQ7 CisJCQlyeHEtPm1hcHNbaV0gPSBOVUxMOwogCQl9CiAKIAkJLyogU3RhcnQgcmVzb3VyY2VzIGFs bG9jYXRpb24gKi8KIAotCQlpZiAoZ250dGFiX2FsbG9jX2dyYW50X3JlZmVyZW5jZXMoTkVUX1JY X1JJTkdfU0laRSwKLQkJICAgICZyeHEtPmdyZWZfaGVhZCkgIT0gMCkgewotCQkJZGV2aWNlX3By aW50ZihkZXYsICJhbGxvY2F0aW5nIHJ4IGdyZWYiKTsKLQkJCWVycm9yID0gRU5PTUVNOwotCQkJ Z290byBmYWlsOworCQlmb3IgKGkgPSAwOyBpIDw9IE5FVF9SWF9SSU5HX1NJWkU7IGkrKykgewor CQkJZXJyb3IgPSBidXNfZG1hbWFwX2NyZWF0ZShyeHEtPmRtYXQsCisJCQkgICAgQlVTX0RNQV9Y RU5fUFJFQUxMT0NfUkVGUywgJnJ4cS0+bWFwX3Bvb2xbaV0pOworCQkJaWYgKGVycm9yKSB7CisJ CQkJZGV2aWNlX3ByaW50ZihkZXYsICJjcmVhdGluZyByeCBtYXAgZmFpbGVkIik7CisJCQkJZ290 byBmYWlsX2RtYV9tYXA7CisJCQl9CisJCQlyeHEtPnBvb2xfaWR4Kys7CiAJCX0KIAogCQlyeHMg PSAobmV0aWZfcnhfc3JpbmdfdCAqKW1hbGxvYyhQQUdFX1NJWkUsIE1fREVWQlVGLApAQCAtNzUz LDkgKzg5MSwyNCBAQCBzZXR1cF9yeHFzKGRldmljZV90IGRldiwgc3RydWN0IG5ldGZyb250X2lu Zm8gKmluZm8sCiAJcmV0dXJuICgwKTsKIAogZmFpbF9ncmFudF9yaW5nOgotCWdudHRhYl9mcmVl X2dyYW50X3JlZmVyZW5jZXMocnhxLT5ncmVmX2hlYWQpOwogCWZyZWUocnhxLT5yaW5nLnNyaW5n LCBNX0RFVkJVRik7CitmYWlsX2RtYV9tYXA6CisJLyoKKwkgKiBDbGVhbiB1cCBmb3IgdGhlIGN1 cnJlbnQgcXVldWUsIHRoZW4gY2FsbCByeHFfZGlzY29ubmVjdCgpIGZvciB0aGUKKwkgKiByZXN0 LgorCSAqCisJICogWFhYIEFkZGluZyBhbm90aGVyIGxvb3AgYWZ0ZXIgdGhlIG1hcCBjcmVhdGlv biBsb29wIHRoYXQgdXNlcyBpCisJICogd2lsbCBicmVhayB0aGlzLgorCSAqLworCWZvciAoaS0t OyBpID49IDA7IGktLSkgeworCQllcnJvciA9IGJ1c19kbWFtYXBfZGVzdHJveShyeHEtPmRtYXQs IHJ4cS0+bWFwX3Bvb2xbaV0pOworCQlLQVNTRVJUKGVycm9yID09IDAsICgiJXM6IGRlc3RydWN0 aW9uIG9mIG1hcCBwb29sIGZhaWxlZCIsCisJCSAgICBfX2Z1bmNfXykpOworCX0KKwllcnJvciA9 IGJ1c19kbWFfdGFnX2Rlc3Ryb3kocnhxLT5kbWF0KTsKKwlLQVNTRVJUKGVycm9yID09IDAsICgi JXM6IGRlc3RydWN0aW9uIG9mIGRtYSB0YWcgZmFpbGVkIiwgX19mdW5jX18pKTsKIGZhaWw6CisJ cS0tOwogCWZvciAoOyBxID49IDA7IHEtLSkgewogCQlkaXNjb25uZWN0X3J4cSgmaW5mby0+cnhx W3FdKTsKIAkJZGVzdHJveV9yeHEoJmluZm8tPnJ4cVtxXSk7CkBAIC03NjgsOSArOTIxLDI1IEBA IHNldHVwX3J4cXMoZGV2aWNlX3QgZGV2LCBzdHJ1Y3QgbmV0ZnJvbnRfaW5mbyAqaW5mbywKIHN0 YXRpYyB2b2lkCiBkaXNjb25uZWN0X3R4cShzdHJ1Y3QgbmV0ZnJvbnRfdHhxICp0eHEpCiB7Ci0K KwlpbnQgaSwgZXJyb3I7CiAJeG5fcmVsZWFzZV90eF9idWZzKHR4cSk7Ci0JZ250dGFiX2ZyZWVf Z3JhbnRfcmVmZXJlbmNlcyh0eHEtPmdyZWZfaGVhZCk7CisJaWYgKHR4cS0+cG9vbF9pZHggIT0g TkVUX1RYX1JJTkdfU0laRSkgeworCQlwcmludGYoIiVzOiBTb21lIG1hcHMgYXJlIHN0aWxsIGlu LXVzZVxuIiwgX19mdW5jX18pOworCX0KKworCWZvciAoaSA9IDA7IGkgPD0gTkVUX1RYX1JJTkdf U0laRTsgaSsrKSB7CisJCWVycm9yID0gYnVzX2RtYW1hcF9kZXN0cm95KHR4cS0+ZG1hdCwKKwkJ ICAgIHR4cS0+bWFwX3Bvb2xbaV0pOworCQlLQVNTRVJUKGVycm9yID09IDAsICgiJXM6IGRlc3Ry dWN0aW9uIG9mIG1hcCBwb29sIGZhaWxlZCIsCisJCSAgICBfX2Z1bmNfXykpOworCX0KKworCXR4 cS0+cG9vbF9pZHggPSAtMTsKKworCWVycm9yID0gYnVzX2RtYV90YWdfZGVzdHJveSh0eHEtPmRt YXQpOworCUtBU1NFUlQoZXJyb3IgPT0gMCwgKCIlczogZGVzdHJ1Y3Rpb24gb2YgdHhxIGRtYSB0 YWcgZmFpbGVkIiwKKwkgICAgIF9fZnVuY19fKSk7CisKIAlnbnR0YWJfZW5kX2ZvcmVpZ25fYWNj ZXNzKHR4cS0+cmluZ19yZWYsIE5VTEwpOwogCXhlbl9pbnRyX3VuYmluZCgmdHhxLT54ZW5faW50 cl9oYW5kbGUpOwogfQpAQCAtODAyLDE5ICs5NzEsMjQgQEAgc2V0dXBfdHhxcyhkZXZpY2VfdCBk ZXYsIHN0cnVjdCBuZXRmcm9udF9pbmZvICppbmZvLAogCSAgIHVuc2lnbmVkIGxvbmcgbnVtX3F1 ZXVlcykKIHsKIAlpbnQgcSwgaTsKLQlpbnQgZXJyb3I7CisJaW50IGVycm9yLCBmbGFnczsKIAlu ZXRpZl90eF9zcmluZ190ICp0eHM7CiAJc3RydWN0IG5ldGZyb250X3R4cSAqdHhxOwogCiAJaW5m by0+dHhxID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgbmV0ZnJvbnRfdHhxKSAqIG51bV9xdWV1ZXMs CiAJICAgIE1fREVWQlVGLCBNX1dBSVRPS3xNX1pFUk8pOwogCisJLyogRmxhZ3MgdG8gYmUgcGFz c2VkIHRvIGJ1c19kbWFfdGFnX2NyZWF0ZSgpLiAqLworCWZsYWdzID0geGVuYnVzX2dldF9vdGhl cmVuZF9pZChkZXYpIDw8IEJVU19ETUFfWEVOX0RPTUlEX1NISUZUOworCiAJZm9yIChxID0gMDsg cSA8IG51bV9xdWV1ZXM7IHErKykgewogCQl0eHEgPSAmaW5mby0+dHhxW3FdOwogCiAJCXR4cS0+ aWQgPSBxOwogCQl0eHEtPmluZm8gPSBpbmZvOwogCisJCXR4cS0+cG9vbF9pZHggPSAtMTsKKwog CQl0eHEtPnJpbmdfcmVmID0gR1JBTlRfUkVGX0lOVkFMSUQ7CiAJCXR4cS0+cmluZy5zcmluZyA9 IE5VTEw7CiAKQEAgLTgyMywxOSArOTk3LDQxIEBAIHNldHVwX3R4cXMoZGV2aWNlX3QgZGV2LCBz dHJ1Y3QgbmV0ZnJvbnRfaW5mbyAqaW5mbywKIAkJbXR4X2luaXQoJnR4cS0+bG9jaywgdHhxLT5u YW1lLCAibmV0ZnJvbnQgdHJhbnNtaXQgbG9jayIsCiAJCSAgICBNVFhfREVGKTsKIAorCQllcnJv ciA9IGJ1c19kbWFfdGFnX2NyZWF0ZSgKKwkJICAgIGJ1c19nZXRfZG1hX3RhZyhkZXYpLAkvKiBw YXJlbnQgKi8KKwkJICAgIDEsIFBBR0VfU0laRSwJCS8qIGFsaWdubWVudCwgYm91bmRhcnkgKi8K KwkJICAgIEJVU19TUEFDRV9NQVhBRERSLAkJLyogbG93YWRkciAqLworCQkgICAgQlVTX1NQQUNF X01BWEFERFIsCQkvKiBoaWdoYWRkciAqLworCQkgICAgTlVMTCwgTlVMTCwJCQkvKiBmaWx0ZXIs IGZpbHRlcmFyZyAqLworCQkgICAgUEFHRV9TSVpFLAkJCS8qIG1heHNpemUgKi8KKwkJICAgIDEs CQkJCS8qIG5zZWdtZW50cyAqLworCQkgICAgUEFHRV9TSVpFLAkJCS8qIG1heHNlZ3NpemUgKi8K KwkJICAgIGZsYWdzLAkJCS8qIGZsYWdzICovCisJCSAgICBOVUxMLAkJCS8qIGxvY2tmdW5jICov CisJCSAgICBOVUxMLAkJCS8qIGxvY2thcmcgKi8KKwkJICAgICZ0eHEtPmRtYXQpOworCQlpZiAo ZXJyb3IpIHsKKwkJCWRldmljZV9wcmludGYoZGV2LCAiQ3JlYXRpbmcgdHggdGFnIGZhaWxlZFxu Iik7CisJCQlnb3RvIGZhaWw7CisJCX0KKwogCQlmb3IgKGkgPSAwOyBpIDw9IE5FVF9UWF9SSU5H X1NJWkU7IGkrKykgewogCQkJdHhxLT5tYnVmc1tpXSA9ICh2b2lkICopICgodV9sb25nKSBpKzEp OwogCQkJdHhxLT5ncmFudF9yZWZbaV0gPSBHUkFOVF9SRUZfSU5WQUxJRDsKKwkJCXR4cS0+bWFw c1tpXSA9IE5VTEw7CiAJCX0KIAkJdHhxLT5tYnVmc1tORVRfVFhfUklOR19TSVpFXSA9ICh2b2lk ICopMDsKIAogCQkvKiBTdGFydCByZXNvdXJjZXMgYWxsb2NhdGlvbi4gKi8KIAotCQlpZiAoZ250 dGFiX2FsbG9jX2dyYW50X3JlZmVyZW5jZXMoTkVUX1RYX1JJTkdfU0laRSwKLQkJICAgICZ0eHEt PmdyZWZfaGVhZCkgIT0gMCkgewotCQkJZGV2aWNlX3ByaW50ZihkZXYsICJmYWlsZWQgdG8gYWxs b2NhdGUgdHggZ3JhbnQgcmVmc1xuIik7Ci0JCQllcnJvciA9IEVOT01FTTsKLQkJCWdvdG8gZmFp bDsKKwkJZm9yIChpID0gMDsgaSA8PSBORVRfVFhfUklOR19TSVpFOyBpKyspIHsKKwkJCWVycm9y ID0gYnVzX2RtYW1hcF9jcmVhdGUodHhxLT5kbWF0LAorCQkJICAgIEJVU19ETUFfWEVOX1BSRUFM TE9DX1JFRlMsICZ0eHEtPm1hcF9wb29sW2ldKTsKKwkJCWlmIChlcnJvcikgeworCQkJCWRldmlj ZV9wcmludGYoZGV2LCAiQ3JlYXRpbmcgdHggbWFwIGZhaWxlZFxuIik7CisJCQkJZ290byBmYWls X2RtYV9tYXA7CisJCQl9CisJCQl0eHEtPnBvb2xfaWR4Kys7CiAJCX0KIAogCQl0eHMgPSAobmV0 aWZfdHhfc3JpbmdfdCAqKW1hbGxvYyhQQUdFX1NJWkUsIE1fREVWQlVGLApAQCAtODg1LDkgKzEw ODEsMjQgQEAgc2V0dXBfdHhxcyhkZXZpY2VfdCBkZXYsIHN0cnVjdCBuZXRmcm9udF9pbmZvICpp bmZvLAogCXRhc2txdWV1ZV9mcmVlKHR4cS0+dHEpOwogCWdudHRhYl9lbmRfZm9yZWlnbl9hY2Nl c3ModHhxLT5yaW5nX3JlZiwgTlVMTCk7CiBmYWlsX2dyYW50X3Jpbmc6Ci0JZ250dGFiX2ZyZWVf Z3JhbnRfcmVmZXJlbmNlcyh0eHEtPmdyZWZfaGVhZCk7CiAJZnJlZSh0eHEtPnJpbmcuc3Jpbmcs IE1fREVWQlVGKTsKK2ZhaWxfZG1hX21hcDoKKwkvKgorCSAqIENsZWFuIHVwIGZvciB0aGUgY3Vy cmVudCBxdWV1ZSwgdGhlbiBjYWxsIHR4cV9kaXNjb25uZWN0KCkgZm9yIHRoZQorCSAqIHJlc3Qu CisJICoKKwkgKiBYWFggQWRkaW5nIGFub3RoZXIgbG9vcCBhZnRlciB0aGUgbWFwIGNyZWF0aW9u IGxvb3AgdGhhdCB1c2VzIGkKKwkgKiB3aWxsIGJyZWFrIHRoaXMuCisJICovCisJZm9yIChpLS07 IGkgPj0gMDsgaS0tKSB7CisJCWVycm9yID0gYnVzX2RtYW1hcF9kZXN0cm95KHR4cS0+ZG1hdCwg dHhxLT5tYXBfcG9vbFtpXSk7CisJCUtBU1NFUlQoZXJyb3IgPT0gMCwgKCIlczogZGVzdHJ1Y3Rp b24gb2YgbWFwIHBvb2wgZmFpbGVkIiwKKwkJICAgIF9fZnVuY19fKSk7CisJfQorCWVycm9yID0g YnVzX2RtYV90YWdfZGVzdHJveSh0eHEtPmRtYXQpOworCUtBU1NFUlQoZXJyb3IgPT0gMCwgKCIl czogZGVzdHJ1Y3Rpb24gb2YgZG1hIHRhZyBmYWlsZWQiLCBfX2Z1bmNfXykpOwogZmFpbDoKKwlx LS07CiAJZm9yICg7IHEgPj0gMDsgcS0tKSB7CiAJCWRpc2Nvbm5lY3RfdHhxKCZpbmZvLT50eHFb cV0pOwogCQlkZXN0cm95X3R4cSgmaW5mby0+dHhxW3FdKTsKQEAgLTEwMzIsMTAgKzEyNDMsMTUg QEAgeG5fcmVsZWFzZV90eF9idWZzKHN0cnVjdCBuZXRmcm9udF90eHEgKnR4cSkKIAkJICovCiAJ CWlmICgoKHVpbnRwdHJfdCltKSA8PSBORVRfVFhfUklOR19TSVpFKQogCQkJY29udGludWU7Ci0J CWdudHRhYl9lbmRfZm9yZWlnbl9hY2Nlc3NfcmVmKHR4cS0+Z3JhbnRfcmVmW2ldKTsKLQkJZ250 dGFiX3JlbGVhc2VfZ3JhbnRfcmVmZXJlbmNlKCZ0eHEtPmdyZWZfaGVhZCwKLQkJICAgIHR4cS0+ Z3JhbnRfcmVmW2ldKTsKKworCQlidXNfZG1hbWFwX3VubG9hZCh0eHEtPmRtYXQsIHR4cS0+bWFw c1tpXSk7CisKKwkJLyogUHV0IHRoZSBtYXAgYmFjayBpbiB0aGUgbWFwIHBvb2wuICovCisJCXhu X3JlcG9vbF90eF9tYXAodHhxLCB0eHEtPm1hcHNbaV0pOworCiAJCXR4cS0+Z3JhbnRfcmVmW2ld ID0gR1JBTlRfUkVGX0lOVkFMSUQ7CisJCXR4cS0+bWFwc1tpXSA9IE5VTEw7CisKIAkJYWRkX2lk X3RvX2ZyZWVsaXN0KHR4cS0+bWJ1ZnMsIGkpOwogCQl0eHEtPm1idWZzX2NudC0tOwogCQlpZiAo dHhxLT5tYnVmc19jbnQgPCAwKSB7CkBAIC0xMDYyLDcgKzEyNzgsNyBAQCBzdGF0aWMgdm9pZAog eG5fYWxsb2NfcnhfYnVmZmVycyhzdHJ1Y3QgbmV0ZnJvbnRfcnhxICpyeHEpCiB7CiAJUklOR19J RFggcmVxX3Byb2Q7Ci0JaW50IG5vdGlmeTsKKwlpbnQgbm90aWZ5LCBlcnJvcjsKIAogCVhOX1JY X0xPQ0tfQVNTRVJUKHJ4cSk7CiAKQEAgLTEwNzYsNyArMTI5Miw3IEBAIHhuX2FsbG9jX3J4X2J1 ZmZlcnMoc3RydWN0IG5ldGZyb250X3J4cSAqcnhxKQogCQl1bnNpZ25lZCBzaG9ydCBpZDsKIAkJ Z3JhbnRfcmVmX3QgcmVmOwogCQlzdHJ1Y3QgbmV0aWZfcnhfcmVxdWVzdCAqcmVxOwotCQl1bnNp Z25lZCBsb25nIHBmbjsKKwkJYnVzX2RtYW1hcF90IG1hcDsKIAogCQltID0geG5fYWxsb2Nfb25l X3J4X2J1ZmZlcihyeHEpOwogCQlpZiAobSA9PSBOVUxMKQpAQCAtMTA4NywxNiArMTMwMywxOSBA QCB4bl9hbGxvY19yeF9idWZmZXJzKHN0cnVjdCBuZXRmcm9udF9yeHEgKnJ4cSkKIAkJS0FTU0VS VChyeHEtPm1idWZzW2lkXSA9PSBOVUxMLCAoIm5vbi1OVUxMIHhuX3J4X2NoYWluIikpOwogCQly eHEtPm1idWZzW2lkXSA9IG07CiAKLQkJcmVmID0gZ250dGFiX2NsYWltX2dyYW50X3JlZmVyZW5j ZSgmcnhxLT5ncmVmX2hlYWQpOwotCQlLQVNTRVJUKHJlZiAhPSBHTlRUQUJfTElTVF9FTkQsCi0J CSAgICAoInJlc2VydmVkIGdyYW50IHJlZmVyZW5jZXMgZXhodWFzdGVkIikpOwotCQlyeHEtPmdy YW50X3JlZltpZF0gPSByZWY7CisJCS8qIFRha2UgYSBtYXAgZnJvbSB0aGUgcG9vbC4gKi8KKwkJ bWFwID0geG5fdW5wb29sX3J4X21hcChyeHEpOworCQlLQVNTRVJUKG1hcCAhPSBOVUxMLCAoIlJl c2VydmVkIGRtYSBtYXAgcG9vbCBleGhhdXN0ZWQiKSk7CisJCXJ4cS0+bWFwc1tpZF0gPSBtYXA7 CisKKwkJZXJyb3IgPSBidXNfZG1hbWFwX2xvYWQocnhxLT5kbWF0LCBtYXAsIG0tPm1fZGF0YSwK KwkJICAgIG0tPm1fbGVuLCB4bl9kbWFfY2IsIHJ4cSwgQlVTX0RNQV9OT1dBSVQpOworCQlLQVNT RVJUKGVycm9yID09IDAsICgiJXM6IG1hcCBsb2FkIGZhaWxlZCIsIF9fZnVuY19fKSk7CisKKwkJ cmVmID0gcnhxLT5ncmFudF9yZWZbaWRdID0geG5fZ2V0X21hcF9ncmVmKG1hcCk7CiAKLQkJcGZu ID0gYXRvcCh2dG9waHlzKG10b2QobSwgdm1fb2Zmc2V0X3QpKSk7CiAJCXJlcSA9IFJJTkdfR0VU X1JFUVVFU1QoJnJ4cS0+cmluZywgcmVxX3Byb2QpOwogCi0JCWdudHRhYl9ncmFudF9mb3JlaWdu X2FjY2Vzc19yZWYocmVmLAotCQkgICAgeGVuYnVzX2dldF9vdGhlcmVuZF9pZChyeHEtPmluZm8t PnhiZGV2KSwgcGZuLCAwKTsKIAkJcmVxLT5pZCA9IGlkOwogCQlyZXEtPmdyZWYgPSByZWY7CiAJ fQpAQCAtMTEzMCw4ICsxMzQ5LDkgQEAgc3RhdGljIHZvaWQgeG5fYWxsb2NfcnhfYnVmZmVyc19j YWxsb3V0KHZvaWQgKmFyZykKIHN0YXRpYyB2b2lkCiB4bl9yZWxlYXNlX3J4X2J1ZnMoc3RydWN0 IG5ldGZyb250X3J4cSAqcnhxKQogewotCWludCBpLCAgcmVmOworCWludCBpOwogCXN0cnVjdCBt YnVmICptOworCWJ1c19kbWFtYXBfdCBtYXA7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTkVUX1JYX1JJ TkdfU0laRTsgaSsrKSB7CiAJCW0gPSByeHEtPm1idWZzW2ldOwpAQCAtMTEzOSwxNCArMTM1OSwx NiBAQCB4bl9yZWxlYXNlX3J4X2J1ZnMoc3RydWN0IG5ldGZyb250X3J4cSAqcnhxKQogCQlpZiAo bSA9PSBOVUxMKQogCQkJY29udGludWU7CiAKLQkJcmVmID0gcnhxLT5ncmFudF9yZWZbaV07Ci0J CWlmIChyZWYgPT0gR1JBTlRfUkVGX0lOVkFMSUQpCi0JCQljb250aW51ZTsKKwkJbWFwID0gcnhx LT5tYXBzW2ldOworCisJCWJ1c19kbWFtYXBfdW5sb2FkKHJ4cS0+ZG1hdCwgbWFwKTsKKworCQkv KiBQdXQgdGhlIG1hcCBiYWNrIGluIHRoZSBtYXAgcG9vbC4gKi8KKwkJeG5fcmVwb29sX3J4X21h cChyeHEsIG1hcCk7CiAKLQkJZ250dGFiX2VuZF9mb3JlaWduX2FjY2Vzc19yZWYocmVmKTsKLQkJ Z250dGFiX3JlbGVhc2VfZ3JhbnRfcmVmZXJlbmNlKCZyeHEtPmdyZWZfaGVhZCwgcmVmKTsKIAkJ cnhxLT5tYnVmc1tpXSA9IE5VTEw7CiAJCXJ4cS0+Z3JhbnRfcmVmW2ldID0gR1JBTlRfUkVGX0lO VkFMSUQ7CisJCXJ4cS0+bWFwc1tpXSA9IE5VTEw7CiAJCW1fZnJlZW0obSk7CiAJfQogfQpAQCAt MTMwMywxMCArMTUyNSwxMiBAQCB4bl90eGVvZihzdHJ1Y3QgbmV0ZnJvbnRfdHhxICp0eHEpCiAJ CQkJcGFuaWMoIiVzOiBncmFudCBpZCAldSBzdGlsbCBpbiB1c2UgYnkgdGhlICIKIAkJCQkgICAg ImJhY2tlbmQiLCBfX2Z1bmNfXywgaWQpOwogCQkJfQotCQkJZ250dGFiX2VuZF9mb3JlaWduX2Fj Y2Vzc19yZWYodHhxLT5ncmFudF9yZWZbaWRdKTsKLQkJCWdudHRhYl9yZWxlYXNlX2dyYW50X3Jl ZmVyZW5jZSgKLQkJCQkmdHhxLT5ncmVmX2hlYWQsIHR4cS0+Z3JhbnRfcmVmW2lkXSk7CisKKwkJ CWJ1c19kbWFtYXBfdW5sb2FkKHR4cS0+ZG1hdCwgdHhxLT5tYXBzW2lkXSk7CisJCQl4bl9yZXBv b2xfdHhfbWFwKHR4cSwgdHhxLT5tYXBzW2lkXSk7CisKIAkJCXR4cS0+Z3JhbnRfcmVmW2lkXSA9 IEdSQU5UX1JFRl9JTlZBTElEOworCQkJdHhxLT5tYXBzW2lkXSA9IE5VTEw7CiAKIAkJCXR4cS0+ bWJ1ZnNbaWRdID0gTlVMTDsKIAkJCWFkZF9pZF90b19mcmVlbGlzdCh0eHEtPm1idWZzLCBpZCk7 CkBAIC0xMzUzLDEzICsxNTc3LDE1IEBAIHhuX2ludHIodm9pZCAqeHNjKQogCiBzdGF0aWMgdm9p ZAogeG5fbW92ZV9yeF9zbG90KHN0cnVjdCBuZXRmcm9udF9yeHEgKnJ4cSwgc3RydWN0IG1idWYg Km0sCi0gICAgZ3JhbnRfcmVmX3QgcmVmKQorICAgIGdyYW50X3JlZl90IHJlZiwgYnVzX2RtYW1h cF90IG1hcCkKIHsKIAlpbnQgbmV3ID0geG5fcnhpZHgocnhxLT5yaW5nLnJlcV9wcm9kX3B2dCk7 CiAKIAlLQVNTRVJUKHJ4cS0+bWJ1ZnNbbmV3XSA9PSBOVUxMLCAoIm1idWZzICE9IE5VTEwiKSk7 CisJS0FTU0VSVChyeHEtPm1hcHNbbmV3XSA9PSBOVUxMLCAoIm1hcHMgIT0gTlVMTCIpKTsKIAly eHEtPm1idWZzW25ld10gPSBtOwogCXJ4cS0+Z3JhbnRfcmVmW25ld10gPSByZWY7CisJcnhxLT5t YXBzW25ld10gPSBtYXA7CiAJUklOR19HRVRfUkVRVUVTVCgmcnhxLT5yaW5nLCByeHEtPnJpbmcu cmVxX3Byb2RfcHZ0KS0+aWQgPSBuZXc7CiAJUklOR19HRVRfUkVRVUVTVCgmcnhxLT5yaW5nLCBy eHEtPnJpbmcucmVxX3Byb2RfcHZ0KS0+Z3JlZiA9IHJlZjsKIAlyeHEtPnJpbmcucmVxX3Byb2Rf cHZ0Kys7CkBAIC0xMzc2LDYgKzE2MDIsNyBAQCB4bl9nZXRfZXh0cmFzKHN0cnVjdCBuZXRmcm9u dF9yeHEgKnJ4cSwKIAlkbyB7CiAJCXN0cnVjdCBtYnVmICptOwogCQlncmFudF9yZWZfdCByZWY7 CisJCWJ1c19kbWFtYXBfdCBtYXA7CiAKIAkJaWYgKF9fcHJlZGljdF9mYWxzZSgqY29ucyArIDEg PT0gcnApKSB7CiAJCQllcnIgPSBFSU5WQUw7CkBAIC0xMzk0LDcgKzE2MjEsOCBAQCB4bl9nZXRf ZXh0cmFzKHN0cnVjdCBuZXRmcm9udF9yeHEgKnJ4cSwKIAogCQltID0geG5fZ2V0X3J4X21idWYo cnhxLCAqY29ucyk7CiAJCXJlZiA9IHhuX2dldF9yeF9yZWYocnhxLCAgKmNvbnMpOwotCQl4bl9t b3ZlX3J4X3Nsb3QocnhxLCBtLCByZWYpOworCQltYXAgPSB4bl9nZXRfcnhfbWFwKHJ4cSwgKmNv bnMpOworCQl4bl9tb3ZlX3J4X3Nsb3QocnhxLCBtLCByZWYsIG1hcCk7CiAJfSB3aGlsZSAoZXh0 cmEtPmZsYWdzICYgWEVOX05FVElGX0VYVFJBX0ZMQUdfTU9SRSk7CiAKIAlyZXR1cm4gZXJyOwpA QCAtMTQxMiw5ICsxNjQwLDEwIEBAIHhuX2dldF9yZXNwb25zZXMoc3RydWN0IG5ldGZyb250X3J4 cSAqcnhxLAogCVJJTkdfSURYIHJlZl9jb25zID0gKmNvbnM7CiAJaW50IGZyYWdzID0gMTsKIAlp bnQgZXJyID0gMDsKLQl1X2xvbmcgcmV0OworCWJ1c19kbWFtYXBfdCBtYXA7CiAKIAltMCA9IG0g PSBtX3ByZXYgPSB4bl9nZXRfcnhfbWJ1ZihyeHEsICpjb25zKTsKKwltYXAgPSB4bl9nZXRfcnhf bWFwKHJ4cSwgKmNvbnMpOwogCiAJaWYgKHJ4LT5mbGFncyAmIE5FVFJYRl9leHRyYV9pbmZvKSB7 CiAJCWVyciA9IHhuX2dldF9leHRyYXMocnhxLCBleHRyYXMsIHJwLCBjb25zKTsKQEAgLTE0MzMs MTAgKzE2NjIsMTEgQEAgeG5fZ2V0X3Jlc3BvbnNlcyhzdHJ1Y3QgbmV0ZnJvbnRfcnhxICpyeHEs CiAJCWlmIChfX3ByZWRpY3RfZmFsc2UocngtPnN0YXR1cyA8IDAgfHwKIAkJCXJ4LT5vZmZzZXQg KyByeC0+c3RhdHVzID4gUEFHRV9TSVpFKSkgewogCi0JCQl4bl9tb3ZlX3J4X3Nsb3QocnhxLCBt LCByZWYpOworCQkJeG5fbW92ZV9yeF9zbG90KHJ4cSwgbSwgcmVmLCBtYXApOwogCQkJaWYgKG0w ID09IG0pCiAJCQkJbTAgPSBOVUxMOwogCQkJbSA9IE5VTEw7CisJCQltYXAgPSBOVUxMOwogCQkJ ZXJyID0gRUlOVkFMOwogCQkJZ290byBuZXh0X3NraXBfcXVldWU7CiAJCX0KQEAgLTE0NTIsMTAg KzE2ODIsMTAgQEAgeG5fZ2V0X3Jlc3BvbnNlcyhzdHJ1Y3QgbmV0ZnJvbnRfcnhxICpyeHEsCiAJ CQlnb3RvIG5leHQ7CiAJCX0KIAotCQlyZXQgPSBnbnR0YWJfZW5kX2ZvcmVpZ25fYWNjZXNzX3Jl ZihyZWYpOwotCQlLQVNTRVJUKHJldCwgKCJVbmFibGUgdG8gZW5kIGFjY2VzcyB0byBncmFudCBy ZWZlcmVuY2VzIikpOwotCi0JCWdudHRhYl9yZWxlYXNlX2dyYW50X3JlZmVyZW5jZSgmcnhxLT5n cmVmX2hlYWQsIHJlZik7CisJCUtBU1NFUlQobWFwICE9IE5VTEwsCisJCSAgICAoIkJhZCBtYXAg Y29ycmVzcG9uZGluZyB0byBhIHZhbGlkIGdyYW50IHJlZiIpKTsKKwkJYnVzX2RtYW1hcF91bmxv YWQocnhxLT5kbWF0LCBtYXApOworCQl4bl9yZXBvb2xfcnhfbWFwKHJ4cSwgbWFwKTsKIAogbmV4 dDoKIAkJaWYgKG0gPT0gTlVMTCkKQEAgLTE1MDEsNiArMTczMSw3IEBAIHhuX2dldF9yZXNwb25z ZXMoc3RydWN0IG5ldGZyb250X3J4cSAqcnhxLAogCQkJbTAgPSBtOwogCQltLT5tX25leHQgPSBO VUxMOwogCQlyZWYgPSB4bl9nZXRfcnhfcmVmKHJ4cSwgKmNvbnMgKyBmcmFncyk7CisJCW1hcCA9 IHhuX2dldF9yeF9tYXAocnhxLCAqY29ucyArIGZyYWdzKTsKIAkJcmVmX2NvbnMgPSAqY29ucyAr IGZyYWdzOwogCQlmcmFncysrOwogCX0KQEAgLTE1MzcsNyArMTc2OCw3IEBAIHhuX2Fzc2VtYmxl X3R4X3JlcXVlc3Qoc3RydWN0IG5ldGZyb250X3R4cSAqdHhxLCBzdHJ1Y3QgbWJ1ZiAqbV9oZWFk KQogCXN0cnVjdCBuZXRmcm9udF9pbmZvICpucCA9IHR4cS0+aW5mbzsKIAlzdHJ1Y3QgaWZuZXQg KmlmcCA9IG5wLT54bl9pZnA7CiAJdV9pbnQgbmZyYWdzOwotCWludCBvdGhlcmVuZF9pZDsKKwlp bnQgZXJyb3I7CiAKIAkvKioKIAkgKiBEZWZyYWdtZW50IHRoZSBtYnVmIGlmIG5lY2Vzc2FyeS4K QEAgLTE2MDgsMTIgKzE4MzksMTEgQEAgeG5fYXNzZW1ibGVfdHhfcmVxdWVzdChzdHJ1Y3QgbmV0 ZnJvbnRfdHhxICp0eHEsIHN0cnVjdCBtYnVmICptX2hlYWQpCiAJICogb2YgZnJhZ21lbnRzIG9y IGhpdCB0aGUgZW5kIG9mIHRoZSBtYnVmIGNoYWluLgogCSAqLwogCW0gPSBtX2hlYWQ7Ci0Jb3Ro ZXJlbmRfaWQgPSB4ZW5idXNfZ2V0X290aGVyZW5kX2lkKG5wLT54YmRldik7CiAJZm9yIChtID0g bV9oZWFkOyBtOyBtID0gbS0+bV9uZXh0KSB7CiAJCW5ldGlmX3R4X3JlcXVlc3RfdCAqdHg7CiAJ CXVpbnRwdHJfdCBpZDsKIAkJZ3JhbnRfcmVmX3QgcmVmOwotCQl1X2xvbmcgbWZuOyAvKiBYWFgg V3JvbmcgdHlwZT8gKi8KKwkJYnVzX2RtYW1hcF90IG1hcDsKIAogCQl0eCA9IFJJTkdfR0VUX1JF UVVFU1QoJnR4cS0+cmluZywgdHhxLT5yaW5nLnJlcV9wcm9kX3B2dCk7CiAJCWlkID0gZ2V0X2lk X2Zyb21fZnJlZWxpc3QodHhxLT5tYnVmcyk7CkBAIC0xNjI2LDEyICsxODU2LDIxIEBAIHhuX2Fz c2VtYmxlX3R4X3JlcXVlc3Qoc3RydWN0IG5ldGZyb250X3R4cSAqdHhxLCBzdHJ1Y3QgbWJ1ZiAq bV9oZWFkKQogCQkJICAgIF9fZnVuY19fKTsKIAkJdHhxLT5tYnVmc1tpZF0gPSBtOwogCQl0eC0+ aWQgPSBpZDsKLQkJcmVmID0gZ250dGFiX2NsYWltX2dyYW50X3JlZmVyZW5jZSgmdHhxLT5ncmVm X2hlYWQpOwotCQlLQVNTRVJUKChzaG9ydClyZWYgPj0gMCwgKCJOZWdhdGl2ZSByZWYiKSk7Ci0J CW1mbiA9IHZpcnRfdG9fbWZuKG10b2QobSwgdm1fb2Zmc2V0X3QpKTsKLQkJZ250dGFiX2dyYW50 X2ZvcmVpZ25fYWNjZXNzX3JlZihyZWYsIG90aGVyZW5kX2lkLAotCQkgICAgbWZuLCBHTlRNQVBf cmVhZG9ubHkpOwotCQl0eC0+Z3JlZiA9IHR4cS0+Z3JhbnRfcmVmW2lkXSA9IHJlZjsKKworCQkv KiBUYWtlIGEgbWFwIGZyb20gdGhlIHBvb2wuICovCisJCW1hcCA9IHhuX3VucG9vbF90eF9tYXAo dHhxKTsKKwkJS0FTU0VSVChtYXAgIT0gTlVMTCwgKCIlczogUmVzZXJ2ZWQgZG1hIG1hcCBwb29s IGV4aGF1c3RlZCIsCisJCSAgICBfX2Z1bmNfXykpOworCQl0eHEtPm1hcHNbaWRdID0gbWFwOwor CisJCWVycm9yID0gYnVzX2RtYW1hcF9sb2FkKHR4cS0+ZG1hdCwgbWFwLCBtLT5tX2RhdGEsCisJ CSAgICBtLT5tX2xlbiwgeG5fZG1hX2NiLCB0eHEsIEJVU19ETUFfWEVOX1JPIHwKKwkJICAgIEJV U19ETUFfTk9XQUlUKTsKKwkJS0FTU0VSVChlcnJvciA9PSAwLCAoIiVzOiBtYXAgbG9hZCBmYWls ZWQiLCBfX2Z1bmNfXykpOworCisJCXJlZiA9IHR4cS0+Z3JhbnRfcmVmW2lkXSA9IHhuX2dldF9t YXBfZ3JlZihtYXApOworCisJCXR4LT5ncmVmID0gcmVmOwogCQl0eC0+b2Zmc2V0ID0gbXRvZCht LCB2bV9vZmZzZXRfdCkgJiAoUEFHRV9TSVpFIC0gMSk7CiAJCXR4LT5mbGFncyA9IDA7CiAJCWlm IChtID09IG1faGVhZCkgewpAQCAtMTg4OCwyOSArMjEyNywzMSBAQCB4bl9zdG9wKHN0cnVjdCBu ZXRmcm9udF9pbmZvICpzYykKIAlpZl9saW5rX3N0YXRlX2NoYW5nZShpZnAsIExJTktfU1RBVEVf RE9XTik7CiB9CiAKKy8qIFhYWCBJJ20gbm90IHN1cmUgdGhpcyBpcyBjb3JyZWN0LiAqLwogc3Rh dGljIHZvaWQKIHhuX3JlYnVpbGRfcnhfYnVmcyhzdHJ1Y3QgbmV0ZnJvbnRfcnhxICpyeHEpCiB7 Ci0JaW50IHJlcXVldWVfaWR4LCBpOworCWludCByZXF1ZXVlX2lkeCwgaSwgZXJyb3I7CiAJZ3Jh bnRfcmVmX3QgcmVmOwogCW5ldGlmX3J4X3JlcXVlc3RfdCAqcmVxOworCWJ1c19kbWFtYXBfdCBt YXA7CiAKIAlmb3IgKHJlcXVldWVfaWR4ID0gMCwgaSA9IDA7IGkgPCBORVRfUlhfUklOR19TSVpF OyBpKyspIHsKIAkJc3RydWN0IG1idWYgKm07Ci0JCXVfbG9uZyBwZm47CiAKIAkJaWYgKHJ4cS0+ bWJ1ZnNbaV0gPT0gTlVMTCkKIAkJCWNvbnRpbnVlOwogCiAJCW0gPSByeHEtPm1idWZzW3JlcXVl dWVfaWR4XSA9IHhuX2dldF9yeF9tYnVmKHJ4cSwgaSk7Ci0JCXJlZiA9IHJ4cS0+Z3JhbnRfcmVm W3JlcXVldWVfaWR4XSA9IHhuX2dldF9yeF9yZWYocnhxLCBpKTsKKwkJbWFwID0gcnhxLT5tYXBz W3JlcXVldWVfaWR4XSA9IHhuX2dldF9yeF9tYXAocnhxLCBpKTsKIAogCQlyZXEgPSBSSU5HX0dF VF9SRVFVRVNUKCZyeHEtPnJpbmcsIHJlcXVldWVfaWR4KTsKLQkJcGZuID0gdnRvcGh5cyhtdG9k KG0sIHZtX29mZnNldF90KSkgPj4gUEFHRV9TSElGVDsKIAotCQlnbnR0YWJfZ3JhbnRfZm9yZWln bl9hY2Nlc3NfcmVmKHJlZiwKLQkJICAgIHhlbmJ1c19nZXRfb3RoZXJlbmRfaWQocnhxLT5pbmZv LT54YmRldiksCi0JCSAgICBwZm4sIDApOworCQllcnJvciA9IGJ1c19kbWFtYXBfbG9hZChyeHEt PmRtYXQsIG1hcCwgbS0+bV9kYXRhLAorCQkgICAgbS0+bV9sZW4sIHhuX2RtYV9jYiwgcnhxLCBC VVNfRE1BX05PV0FJVCk7CisJCUtBU1NFUlQoZXJyb3IgPT0gMCwgKCIlczogbWFwIGxvYWQgZmFp bGVkIiwgX19mdW5jX18pKTsKKworCQlyZWYgPSByeHEtPmdyYW50X3JlZltyZXF1ZXVlX2lkeF0g PSB4bl9nZXRfbWFwX2dyZWYobWFwKTsKIAogCQlyZXEtPmdyZWYgPSByZWY7CiAJCXJlcS0+aWQg ICA9IHJlcXVldWVfaWR4OwpkaWZmIC0tZ2l0IGEvc3lzL3g4Ni94ZW4vYnVzZG1hX3hlbi5jIGIv c3lzL3g4Ni94ZW4vYnVzZG1hX3hlbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAuLmNkODVkZTk3OTEKLS0tIC9kZXYvbnVsbAorKysgYi9zeXMveDg2L3hlbi9idXNkbWFf eGVuLmMKQEAgLTAsMCArMSw4ODIgQEAKKy8qLQorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEJTRC0yLUNsYXVzZS1GcmVlQlNECisgKgorICogQ29weXJpZ2h0IChjKSAyMDE4IFByYXR5dXNo IFlhZGF2IDxwcmF0eXVzaEBGcmVlQlNELm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0 ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX QVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycg QU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xB SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJ QUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJW SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ VElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQg T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ QklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVm cy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+Cisj aW5jbHVkZSA8c3lzL2tlcm5lbC5oPgorI2luY2x1ZGUgPHN5cy9tYWxsb2MuaD4KKyNpbmNsdWRl IDxzeXMvYnVzLmg+CisjaW5jbHVkZSA8c3lzL3N5c3RtLmg+CisKKyNpbmNsdWRlIDxtYWNoaW5l L2J1cy5oPgorCisjaW5jbHVkZSA8eDg2L2luY2x1ZGUvYnVzZG1hX2ltcGwuaD4KKworI2luY2x1 ZGUgPHhlbi9nbnR0YWIuaD4KKyNpbmNsdWRlIDx4ZW4vYnVzZG1hX3hlbi5oPgorCitNQUxMT0Nf REVGSU5FKE1fQlVTRE1BX1hFTiwgImJ1c2RtYV94ZW5fYnVmIiwgIlhlbi1zcGVjaWZpYyBidXNf ZG1hKDkpIGJ1ZmZlciIpOworCisvKgorICogQlVTX0RNQV9CVVMxIGlzIHJlc2VydmVkIGZvciBi dXMgZnVuY3Rpb25zIHRvIHVzZSBhcyB0aGV5IHdpc2guIEhlcmUsIGl0IGlzCisgKiB1c2VkIGJ5 IHhlbl9nZXRfZG1hX3RhZygpIHRvIHRlbGwgeGVuX2J1c19kbWFfdGFnX2NyZWF0ZSgpIHRoYXQg dGhlCisgKiBYZW4tc3BlY2lmaWMgdGFnIGhhcyB0byBiZSAiYm9vdHN0cmFwcGVkIi4geGVuX2dl dF9kbWFfdGFnKCkgcGFzc2VzIHRoZQorICogbWFjaGluZS1zcGVjaWZpYyB0YWcgbm90IHRoZSBY ZW4gdGFnICh3aGljaCB0YWdfY3JlYXRlKCkgZXhwZWN0cyBpbiB0aGUKKyAqIHVzdWFsIGNhc2Up LCBzbyBpdCBoYXMgdG8gYmUgaGFuZGxlZCBkaWZmZXJlbnRseS4gVGhpcyBpcyB3aGF0CisgKiAi Ym9vdHN0cmFwcGluZyIgbWVhbnMuCisgKi8KKyNkZWZpbmUgQlVTRE1BX1hFTl9UQUdfSU5JVCBC VVNfRE1BX0JVUzEKKworc3RydWN0IGJ1c19kbWFfdGFnX3hlbiB7CisJc3RydWN0IGJ1c19kbWFf dGFnX2NvbW1vbgljb21tb247CisJYnVzX2RtYV90YWdfdAkJCXBhcmVudDsKKwl1bnNpZ25lZCBp bnQJCQltYXhfc2VnbWVudHM7CisJZG9taWRfdAkJCQlkb21pZDsKK307CisKK3N0cnVjdCBidXNf ZG1hbWFwX3hlbiB7CisJc3RydWN0IGJ1c19kbWFfdGFnX3hlbgkJKnRhZzsKKwlidXNfZG1hbWFw X3QJCQkgbWFwOworCWdyYW50X3JlZl90CQkJKnJlZnM7CisJdW5zaWduZWQgaW50CQkJIG5yZWZz OworCisJYnVzX2RtYW1hcF9jYWxsYmFja190CQkqY2FsbGJhY2s7CisJdm9pZAkJCQkqY2FsbGJh Y2tfYXJnOworCisJc3RydWN0IGdudHRhYl9mcmVlX2NhbGxiYWNrCSBnbnR0YWJfY2FsbGJhY2s7 CisJYnVzX2RtYV9zZWdtZW50X3QJCSp0ZW1wX3NlZ3M7CisKKwkvKiBGbGFncy4gKi8KKwlib29s CQkJCSBzbGVlcGFibGU7CisJYm9vbAkJCQkgZ3JlZnNfcHJlYWxsb2NhdGVkOworCXVuc2lnbmVk IGludAkJCSBnbnR0YWJfZmxhZ3M7Cit9OworCitzdHJ1Y3QgbG9hZF9vcCB7CisJZW51bSB4ZW5f bG9hZF90eXBlIHsKKwkJTE9BRF9NQSwKKwkJTE9BRF9QSFlTLAorCQlMT0FEX0JVRkZFUiwKKwl9 IHR5cGU7CisJYnVzX3NpemVfdCBzaXplOworCWludCBmbGFnczsKKwlidXNfZG1hX3NlZ21lbnRf dCAqc2VnczsKKwlpbnQgKnNlZ3A7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJc3RydWN0IHZt X3BhZ2UgKiptYTsKKwkJCXVuc2lnbmVkIGludCBtYV9vZmZzOworCQl9IG1hOworCQlzdHJ1Y3Qg eworCQkJdm1fcGFkZHJfdCBidWY7CisJCX0gcGh5czsKKwkJc3RydWN0IHsKKwkJCXZvaWQgKmJ1 ZjsKKwkJCXN0cnVjdCBwbWFwICpwbWFwOworCQl9IGJ1ZmZlcjsKKwl9OworfTsKKworc3RhdGlj IHN0cnVjdCBidXNfZG1hX2ltcGwgYnVzX2RtYV94ZW5faW1wbDsKKworc3RhdGljIGludAoreGVu X2J1c19kbWFfdGFnX2NyZWF0ZShidXNfZG1hX3RhZ190IHBhcmVudCwgYnVzX3NpemVfdCBhbGln bm1lbnQsCisgICAgYnVzX2FkZHJfdCBib3VuZGFyeSwgYnVzX2FkZHJfdCBsb3dhZGRyLCBidXNf YWRkcl90IGhpZ2hhZGRyLAorICAgIGJ1c19kbWFfZmlsdGVyX3QgKmZpbHRmdW5jLCB2b2lkICpm aWx0ZnVuY2FyZywgYnVzX3NpemVfdCBtYXhzaXplLAorICAgIGludCBuc2VnbWVudHMsIGJ1c19z aXplX3QgbWF4c2Vnc3osIGludCBmbGFncywKKyAgICBidXNfZG1hX2xvY2tfdCAqbG9ja2Z1bmMs IHZvaWQgKmxvY2tmdW5jYXJnLCBidXNfZG1hX3RhZ190ICpkbWF0KQoreworCWRvbWlkX3QgZG9t aWQ7CisJc3RydWN0IGJ1c19kbWFfdGFnX3hlbiAqbmV3dGFnOworCWJ1c19kbWFfdGFnX3QgbmV3 cGFyZW50LCBvbGRwYXJlbnQ7CisJaW50IGVycm9yOworCisJaWYgKG1heHNlZ3N6ID4gUEFHRV9T SVpFKSB7CisJCXJldHVybiAoRUlOVkFMKTsKKwl9CisKKwlkb21pZCA9IGZsYWdzID4+IEJVU19E TUFfWEVOX0RPTUlEX1NISUZUOworCWZsYWdzICY9IDB4ZmZmZjsKKworCWlmIChmbGFncyAmIEJV U0RNQV9YRU5fVEFHX0lOSVQpIHsKKwkJb2xkcGFyZW50ID0gcGFyZW50OworCQkvKgorCQkgKiBU aGUgY29kZSBiZWxvdyB0cmVhdHMgcGFyZW50IGFzIGEgeGVuLXNwZWNpZmljIERNQSB0YWcuCisJ CSAqIFRoaXMgcGFyZW50IGNhbiBub3QgYmUgdXNlZCB0aGVyZS4KKwkJICovCisJCXBhcmVudCA9 IE5VTEw7CisJfSBlbHNlIHsKKwkJb2xkcGFyZW50ID0gKChzdHJ1Y3QgYnVzX2RtYV90YWdfeGVu ICopcGFyZW50KS0+cGFyZW50OworCX0KKworCSpkbWF0ID0gTlVMTDsKKworCS8qCisJICogV2Ug Y3JlYXRlIHR3byB0YWdzIGhlcmUuIFRoZSBmaXJzdCB0YWcgaXMgdGhlIGNvbW1vbiB0YWcuIEl0 IHdpbGwKKwkgKiBiZSB1c2VkIHRvIGhvbGQgdGhlIHhlbi1zcGVjaWZpYyBidXNfZG1hX2ltcGwu IEJ1dCwgaW4gdGhlIG1hcCBjcmVhdGUKKwkgKiBhbmQgbG9hZCBvcGVyYXRpb25zLCB3ZSBuZWVk IHRvIHVzZSB0aGUgc3RhbmRhcmQgZG1hIHRhZyB0byBsb2FkIHRoZQorCSAqIGRtYSBtYXBzIGFu ZCBleHRyYWN0IHRoZSBwaHlzaWNhbCBhZGRyZXNzZXMuIFNvIGZvciB0aG9zZSBvcGVyYXRpb25z LAorCSAqIHdlIGNyZWF0ZSBhbm90aGVyIHRhZyBmcm9tIHRoZSBwYXJlbnQgYW5kIHVzZSBpdCBp biB0aG9zZSBvcGVyYXRpb25zLgorCSAqLworCWVycm9yID0gY29tbW9uX2J1c19kbWFfdGFnX2Ny ZWF0ZShwYXJlbnQgIT0gTlVMTCA/CisJICAgICYoKHN0cnVjdCBidXNfZG1hX3RhZ194ZW4gKilw YXJlbnQpLT5jb21tb24gOiBOVUxMLCBhbGlnbm1lbnQsCisJICAgIGJvdW5kYXJ5LCBsb3dhZGRy LCBoaWdoYWRkciwgZmlsdGZ1bmMsIGZpbHRmdW5jYXJnLCBtYXhzaXplLAorCSAgICBuc2VnbWVu dHMsIG1heHNlZ3N6LCBmbGFncywgbG9ja2Z1bmMsIGxvY2tmdW5jYXJnLAorCSAgICBzaXplb2Yo c3RydWN0IGJ1c19kbWFfdGFnX3hlbiksICh2b2lkICoqKSZuZXd0YWcpOworCWlmIChlcnJvcikg eworCQlyZXR1cm4gKGVycm9yKTsKKwl9CisKKwllcnJvciA9IGJ1c19kbWFfdGFnX2NyZWF0ZShv bGRwYXJlbnQsIGFsaWdubWVudCwgYm91bmRhcnksIGxvd2FkZHIsCisJICAgIGhpZ2hhZGRyLCBm aWx0ZnVuYywgZmlsdGZ1bmNhcmcsIG1heHNpemUsIG5zZWdtZW50cywgbWF4c2Vnc3osCisJICAg IGZsYWdzLCBsb2NrZnVuYywgbG9ja2Z1bmNhcmcsICZuZXdwYXJlbnQpOworCWlmIChlcnJvcikg eworCQlidXNfZG1hX3RhZ19kZXN0cm95KChidXNfZG1hX3RhZ190KW5ld3RhZyk7CisJCXJldHVy biAoZXJyb3IpOworCX0KKworCW5ld3RhZy0+Y29tbW9uLmltcGwgPSAmYnVzX2RtYV94ZW5faW1w bDsKKwluZXd0YWctPnBhcmVudCA9IG5ld3BhcmVudDsKKwluZXd0YWctPm1heF9zZWdtZW50cyA9 IG5zZWdtZW50czsKKwluZXd0YWctPmRvbWlkID0gZG9taWQ7CisKKwkqZG1hdCA9IChidXNfZG1h X3RhZ190KW5ld3RhZzsKKworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBpbnQKK3hlbl9idXNf ZG1hX3RhZ19kZXN0cm95KGJ1c19kbWFfdGFnX3QgZG1hdCkKK3sKKwlzdHJ1Y3QgYnVzX2RtYV90 YWdfeGVuICp4ZW50YWcsICp4ZW5wYXJlbnQ7CisJaW50IGVycm9yOworCisJeGVudGFnID0gKHN0 cnVjdCBidXNfZG1hX3RhZ194ZW4gKilkbWF0OworCisJZXJyb3IgPSBidXNfZG1hX3RhZ19kZXN0 cm95KHhlbnRhZy0+cGFyZW50KTsKKwlpZiAoZXJyb3IpIHsKKwkJcmV0dXJuIChlcnJvcik7CisJ fQorCisJd2hpbGUgKHhlbnRhZyAhPSBOVUxMKSB7CisJCXhlbnBhcmVudCA9IChzdHJ1Y3QgYnVz X2RtYV90YWdfeGVuICopeGVudGFnLT5jb21tb24ucGFyZW50OworCQlpZiAoYXRvbWljX2ZldGNo YWRkX2ludCgmeGVudGFnLT5jb21tb24ucmVmX2NvdW50LCAtMSkgPT0gMSkgeworCQkJZnJlZSh4 ZW50YWcsIE1fREVWQlVGKTsKKwkJCS8qCisJCQkgKiBMYXN0IHJlZmVyZW5jZSBjb3VudCwgc28g cmVsZWFzZSBvdXIgcmVmZXJlbmNlIGNvdW50CisJCQkgKiBvbiBvdXIgcGFyZW50LgorCQkJICov CisJCQl4ZW50YWcgPSB4ZW5wYXJlbnQ7CisJCX0gZWxzZSB7CisJCQl4ZW50YWcgPSBOVUxMOwor CQl9CisJfQorCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAoreGVuX2J1c19kbWFfdGFn X3NldF9kb21haW4oYnVzX2RtYV90YWdfdCBkbWF0KQoreworCXN0cnVjdCBidXNfZG1hX3RhZ194 ZW4gKnhlbnRhZzsKKwlzdHJ1Y3QgYnVzX2RtYV90YWdfY29tbW9uICpwYXJlbnQ7CisKKwl4ZW50 YWcgPSAoc3RydWN0IGJ1c19kbWFfdGFnX3hlbiAqKWRtYXQ7CisJcGFyZW50ID0gKHN0cnVjdCBi dXNfZG1hX3RhZ19jb21tb24gKil4ZW50YWctPnBhcmVudDsKKworCXJldHVybiAocGFyZW50LT5p bXBsLT50YWdfc2V0X2RvbWFpbigoYnVzX2RtYV90YWdfdClwYXJlbnQpKTsKK30KKworc3RhdGlj IGludAoreGVuX2J1c19kbWFtYXBfY3JlYXRlKGJ1c19kbWFfdGFnX3QgZG1hdCwgaW50IGZsYWdz LCBidXNfZG1hbWFwX3QgKm1hcHApCit7CisJc3RydWN0IGJ1c19kbWFfdGFnX3hlbiAqeGVudGFn OworCXN0cnVjdCBidXNfZG1hbWFwX3hlbiAqeGVubWFwOworCWdyYW50X3JlZl90IGdyZWZfaGVh ZDsKKwlpbnQgZXJyb3I7CisJdW5zaWduZWQgaW50IGksIG5yZWZzOworCisJeGVudGFnID0gKHN0 cnVjdCBidXNfZG1hX3RhZ194ZW4gKilkbWF0OworCisJLyogbWFwcCBzaG91bGQgYmUgTlVMTCBp biBjYXNlIG9mIGFuIGVycm9yLiAqLworCSptYXBwID0gTlVMTDsKKworCXhlbm1hcCA9IG1hbGxv YyhzaXplb2Yoc3RydWN0IGJ1c19kbWFtYXBfeGVuKSwgTV9CVVNETUFfWEVOLAorCSAgICBNX05P V0FJVCB8IE1fWkVSTyk7CisJaWYgKHhlbm1hcCA9PSBOVUxMKSB7CisJCXJldHVybiAoRU5PTUVN KTsKKwl9CisKKwllcnJvciA9IGJ1c19kbWFtYXBfY3JlYXRlKHhlbnRhZy0+cGFyZW50LCBmbGFn cywgJnhlbm1hcC0+bWFwKTsKKwlpZiAoZXJyb3IpIHsKKwkJZnJlZSh4ZW5tYXAsIE1fQlVTRE1B X1hFTik7CisJCXJldHVybiAoZXJyb3IpOworCX0KKworCXhlbm1hcC0+dGFnID0geGVudGFnOwor CisJLyogQ2hlY2sgaWYgd2UgbmVlZCB0byBwcmUtYWxsb2NhdGUgZ3JhbnQgcmVmcy4gKi8KKwlp ZiAoZmxhZ3MgJiBCVVNfRE1BX1hFTl9QUkVBTExPQ19SRUZTKSB7CisJCW5yZWZzID0geGVudGFn LT5tYXhfc2VnbWVudHM7CisJCXhlbm1hcC0+cmVmcyA9IG1hbGxvYyhucmVmcyAqIHNpemVvZihn cmFudF9yZWZfdCksCisJCSAgICBNX0JVU0RNQV9YRU4sIE1fTk9XQUlUKTsKKwkJaWYgKHhlbm1h cC0+cmVmcyA9PSBOVUxMKSB7CisJCQlidXNfZG1hbWFwX2Rlc3Ryb3koZG1hdCwgKGJ1c19kbWFt YXBfdCl4ZW5tYXApOworCQkJcmV0dXJuIChFTk9NRU0pOworCQl9CisKKwkJZXJyb3IgPSBnbnR0 YWJfYWxsb2NfZ3JhbnRfcmVmZXJlbmNlcyhucmVmcywKKwkJICAgICZncmVmX2hlYWQpOworCQlp ZiAoZXJyb3IpIHsKKwkJCWZyZWUoeGVubWFwLT5yZWZzLCBNX0JVU0RNQV9YRU4pOworCQkJeGVu bWFwLT5yZWZzID0gTlVMTDsKKwkJCWJ1c19kbWFtYXBfZGVzdHJveShkbWF0LCAoYnVzX2RtYW1h cF90KXhlbm1hcCk7CisJCQlyZXR1cm4gKGVycm9yKTsKKwkJfQorCisJCWZvciAoaSA9IDA7IGkg PCBucmVmczsgaSsrKSB7CisJCQl4ZW5tYXAtPnJlZnNbaV0gPQorCQkJICAgIGdudHRhYl9jbGFp bV9ncmFudF9yZWZlcmVuY2UoJmdyZWZfaGVhZCk7CisJCX0KKworCQl4ZW5tYXAtPmdyZWZzX3By ZWFsbG9jYXRlZCA9IHRydWU7CisJfQorCisJKm1hcHAgPSAoYnVzX2RtYW1hcF90KXhlbm1hcDsK KwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50Cit4ZW5fYnVzX2RtYW1hcF9kZXN0cm95KGJ1 c19kbWFfdGFnX3QgZG1hdCwgYnVzX2RtYW1hcF90IG1hcCkKK3sKKwlzdHJ1Y3QgYnVzX2RtYV90 YWdfeGVuICp4ZW50YWc7CisJc3RydWN0IGJ1c19kbWFtYXBfeGVuICp4ZW5tYXA7CisJaW50IGVy cm9yOworCisJeGVudGFnID0gKHN0cnVjdCBidXNfZG1hX3RhZ194ZW4gKilkbWF0OworCXhlbm1h cCA9IChzdHJ1Y3QgYnVzX2RtYW1hcF94ZW4gKiltYXA7CisKKwlpZiAobWFwID09IE5VTEwpIHsK KwkJcmV0dXJuICgwKTsKKwl9CisKKwllcnJvciA9IGJ1c19kbWFtYXBfZGVzdHJveSh4ZW50YWct PnBhcmVudCwgeGVubWFwLT5tYXApOworCWlmIChlcnJvcikgeworCQlyZXR1cm4gKGVycm9yKTsK Kwl9CisKKwkvKgorCSAqIElmIHRoZSBncmFudCByZWZlcmVuY2VzIHdlcmUgcHJlLWFsbG9jYXRl ZCBvbiBtYXAgY3JlYXRpb24sIHdlIG5lZWQKKwkgKiB0byBjbGVhbiB0aGVtIHVwIGhlcmUuIElm IG5vdCwgdW5sb2FkIGhhcyBjbGVhbmVkIHRoZW0gdXAgYWxyZWFkeS4KKwkgKi8KKwlpZiAoeGVu bWFwLT5ncmVmc19wcmVhbGxvY2F0ZWQpIHsKKwkJZ250dGFiX2VuZF9mb3JlaWduX2FjY2Vzc19y ZWZlcmVuY2VzKHhlbnRhZy0+bWF4X3NlZ21lbnRzLAorCQkgICAgeGVubWFwLT5yZWZzKTsKKwor CQlmcmVlKHhlbm1hcC0+cmVmcywgTV9CVVNETUFfWEVOKTsKKwkJeGVubWFwLT5yZWZzID0gTlVM TDsKKwl9CisKKwlLQVNTRVJUKHhlbm1hcC0+cmVmcyA9PSBOVUxMLAorCSAgICAoImJ1c2RtYV94 ZW46IHhlbm1hcC0+cmVmcyBub3QgTlVMTC4gQ2hlY2sgaWYgdW5sb2FkIHdhcyBjYWxsZWQiKSk7 CisKKwlmcmVlKHhlbm1hcCwgTV9CVVNETUFfWEVOKTsKKwlyZXR1cm4gKDApOworfQorCitzdGF0 aWMgaW50Cit4ZW5fYnVzX2RtYW1lbV9hbGxvYyhidXNfZG1hX3RhZ190IGRtYXQsIHZvaWQqKiB2 YWRkciwgaW50IGZsYWdzLAorICAgIGJ1c19kbWFtYXBfdCAqbWFwcCkKK3sKKwlzdHJ1Y3QgYnVz X2RtYV90YWdfeGVuICp4ZW50YWc7CisJc3RydWN0IGJ1c19kbWFtYXBfeGVuICp4ZW5tYXA7CisJ aW50IGVycm9yOworCisJeGVudGFnID0gKHN0cnVjdCBidXNfZG1hX3RhZ194ZW4gKilkbWF0Owor CisJLyogbWFwcCBzaG91bGQgYmUgTlVMTCBpbiBjYXNlIG9mIGFuIGVycm9yLiAqLworCSptYXBw ID0gTlVMTDsKKworCXhlbm1hcCA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGJ1c19kbWFtYXBfeGVu KSwgTV9CVVNETUFfWEVOLAorCSAgICBNX05PV0FJVCB8IE1fWkVSTyk7CisJaWYgKHhlbm1hcCA9 PSBOVUxMKSB7CisJCXJldHVybiAoRU5PTUVNKTsKKwl9CisKKwllcnJvciA9IGJ1c19kbWFtZW1f YWxsb2MoeGVudGFnLT5wYXJlbnQsIHZhZGRyLCBmbGFncywgJnhlbm1hcC0+bWFwKTsKKwlpZiAo ZXJyb3IpIHsKKwkJZnJlZSh4ZW5tYXAsIE1fQlVTRE1BX1hFTik7CisJCXJldHVybiAoZXJyb3Ip OworCX0KKworCSptYXBwID0gKGJ1c19kbWFtYXBfdCl4ZW5tYXA7CisJcmV0dXJuICgwKTsKK30K Kworc3RhdGljIHZvaWQKK3hlbl9idXNfZG1hbWVtX2ZyZWUoYnVzX2RtYV90YWdfdCBkbWF0LCB2 b2lkICp2YWRkciwgYnVzX2RtYW1hcF90IG1hcCkKK3sKKwlzdHJ1Y3QgYnVzX2RtYV90YWdfeGVu ICp4ZW50YWc7CisJc3RydWN0IGJ1c19kbWFtYXBfeGVuICp4ZW5tYXA7CisKKwl4ZW50YWcgPSAo c3RydWN0IGJ1c19kbWFfdGFnX3hlbiAqKWRtYXQ7CisJeGVubWFwID0gKHN0cnVjdCBidXNfZG1h bWFwX3hlbiAqKW1hcDsKKworCWJ1c19kbWFtZW1fZnJlZSh4ZW50YWctPnBhcmVudCwgdmFkZHIs IHhlbm1hcC0+bWFwKTsKKworCUtBU1NFUlQoeGVubWFwLT5yZWZzID09IE5VTEwsCisJICAgICgi YnVzZG1hX3hlbjogeGVubWFwLT5yZWZzIG5vdCBOVUxMLiBDaGVjayBpZiB1bmxvYWQgd2FzIGNh bGxlZCIpKTsKKworCWZyZWUoeGVubWFwLCBNX0JVU0RNQV9YRU4pOworfQorCisvKgorICogWFhY IFRoaXMgd2lsbCBicmVhayB3aGVuIG11bHRpcGxlIGxvYWRzIGFyZSBjYWxsZWQgb24gdGhlIHNh bWUgbWFwIGFuZCBvbmUgb2YKKyAqIHRoZSBsb2FkcyAod2hpY2ggaXMgbm90IHRoZSBsYXN0KSBm YWlscyBiZWNhdXNlIG9mIGEgc2hvcnRhZ2Ugb2YgZ3JhbnQgcmVmcy4KKyAqIFRoZSByZWFzb24g aXMgdGhhdCB0aGVyZSBpcyBubyBjbGVhbiB3YXkgdG8gY29udGludWUgd2hlcmUgd2UgbGVmdCBv ZmYuIE1heWJlCisgKiBjYWxsaW5nIGJ1c19kbWFtYXBfbG9hZF9tZW0oKSBjYW4gd29yayBpZiB3 ZSB0cmFjayBhbGwgdGhlIG1lbW9yeSBzZWdtZW50cworICogYWxyZWFkeSBhbGxvY2F0ZWQgYnkg b3VyIG1hcC4KKyAqCisgKiBNb3JlIHNwZWNpZmljYWxseSwgX2J1c19kbWFtYXBfbG9hZF92bGlz dCgpLCBfYnVzX2RtYW1hcF9sb2FkX3BsaXN0KCkgd2lsbAorICogYnJlYWsgaWYgYSBzaG9ydGFn ZSBvZiBncmFudCByZWZlcmVuY2VzIG9jY3Vycy4KKyAqLworc3RhdGljIHZvaWQKK3hlbl9nbnR0 YWJfZnJlZV9jYWxsYmFjayh2b2lkICphcmcpCit7CisJc3RydWN0IGJ1c19kbWFtYXBfeGVuICp4 ZW5tYXA7CisJc3RydWN0IGJ1c19kbWFfdGFnX3hlbiAqeGVudGFnOworCWdyYW50X3JlZl90IGdy ZWZfaGVhZDsKKwlidXNfZG1hX3NlZ21lbnRfdCAqc2VnczsKKwlidXNfZG1hbWFwX2NhbGxiYWNr X3QgKmNhbGxiYWNrOworCWludCBlcnJvcjsKKwl1bnNpZ25lZCBpbnQgaTsKKworCXhlbm1hcCA9 IGFyZzsKKwl4ZW50YWcgPSB4ZW5tYXAtPnRhZzsKKwljYWxsYmFjayA9IHhlbm1hcC0+Y2FsbGJh Y2s7CisKKwllcnJvciA9IGdudHRhYl9hbGxvY19ncmFudF9yZWZlcmVuY2VzKHhlbm1hcC0+bnJl ZnMsICZncmVmX2hlYWQpOworCUtBU1NFUlQoZXJyb3IgPT0gMCwgKCJidXNkbWFfeGVuOiBhbGxv Y2F0aW9uIG9mIGdyYW50IHJlZnMgaW4gdGhlICIKKwkgICAgImdyYW50IHRhYmxlIGZyZWUgY2Fs bGJhY2sgZmFpbGVkLiIpKTsKKworCXNlZ3MgPSB4ZW5tYXAtPnRlbXBfc2VnczsKKwlLQVNTRVJU KHNlZ3MgIT0gTlVMTCwKKwkgICAgKCJidXNkbWFfeGVuOiAlczogeGVubWFwLT50ZW1wX3NlZ3Mg PSBOVUxMIiAsIF9fZnVuY19fKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgeGVubWFwLT5ucmVmczsg aSsrKSB7CisJCXhlbm1hcC0+cmVmc1tpXSA9IGdudHRhYl9jbGFpbV9ncmFudF9yZWZlcmVuY2Uo JmdyZWZfaGVhZCk7CisJCWdudHRhYl9ncmFudF9mb3JlaWduX2FjY2Vzc19yZWYoeGVubWFwLT5y ZWZzW2ldLCB4ZW50YWctPmRvbWlkLAorCQkgICAgYXRvcChzZWdzW2ldLmRzX2FkZHIpLCB4ZW5t YXAtPmdudHRhYl9mbGFncyk7CisJfQorCisJeGVudGFnLT5jb21tb24ubG9ja2Z1bmMoeGVudGFn LT5jb21tb24ubG9ja2Z1bmNhcmcsIEJVU19ETUFfTE9DSyk7CisJKCpjYWxsYmFjaykoeGVubWFw LT5jYWxsYmFja19hcmcsIHNlZ3MsIHhlbm1hcC0+bnJlZnMsIDApOworCXhlbnRhZy0+Y29tbW9u LmxvY2tmdW5jKHhlbnRhZy0+Y29tbW9uLmxvY2tmdW5jYXJnLAorCSAgICBCVVNfRE1BX1VOTE9D Syk7CisKKwkvKiBXZSBkb24ndCBuZWVkIHRoZSB0ZW1wX3NlZ3MgYXJyYXkgYW55bW9yZS4gKi8K KwlmcmVlKHhlbm1hcC0+dGVtcF9zZWdzLCBNX0JVU0RNQV9YRU4pOworCXhlbm1hcC0+dGVtcF9z ZWdzID0gTlVMTDsKKworCXJldHVybjsKK30KKworLyoKKyAqIFRoaXMgZGFuY2Ugd2l0aCB0ZW1w X3NlZ3Mgd2FycmFudHMgYSBkZXRhaWxlZCBleHBsYW5hdGlvbi4gVGhlIHNlZ3MgcmV0dXJuZWQK KyAqIGJ5IG1hcF9jb21wbGV0ZSgpIGFycmF5IHdvdWxkIGdldCBvdmVyLXdyaXR0ZW4gd2hlbiBh bm90aGVyIGxvYWQgb24gdGhlIHNhbWUKKyAqIHRhZyBpcyBjYWxsZWQuIFRoZSBzY29wZSBvZiB0 aGUgc2VncyBhcnJheSBpcyBsaW1pdGVkIHRvIHRoZSBjYWxsYmFjaworICogcHJvdmlkZWQgdG8g dGhlIGxvYWQgb2YgdGhlIHBhcmVudCAoeGVuX2RtYW1hcF9jYWxsYmFjayBpbiB0aGlzIGNhc2Up LiBBZnRlcgorICogdGhhdCwgaXQgY2FuIGJlIG92ZXItd3JpdHRlbi4gU28sIHdlIG5lZWQgdG8g bWFrZSBhIGJhY2t1cCBvZiBpdCBiZWZvcmUgd2UKKyAqIHdhaXQgZm9yIGdyYW50IHJlZmVyZW5j ZXMsIGJlY2F1c2UgaXQgaXMgcG9zc2libGUgdGhhdCBieSB0aGUgdGltZSB0aGUgZ3JhbnQKKyAq IHRhYmxlIGNhbGxiYWNrIGlzIHJlY2VpdmVkLCB0aGUgc2VncyBhcnJheSBoYXMgYWxyZWFkeSBi ZWVuIG92ZXItd3JpdHRlbi4KKyAqLworc3RhdGljIGlubGluZSBpbnQKK3hlbl9kbWFtYXBfc2V0 dXBfdGVtcF9zZWdzKHN0cnVjdCBidXNfZG1hbWFwX3hlbiAqeGVubWFwLAorICAgIGJ1c19kbWFf c2VnbWVudF90ICpzZWdzKQoreworCXVuc2lnbmVkIGludCBpOworCisJS0FTU0VSVCh4ZW5tYXAt PnRlbXBfc2VncyA9PSBOVUxMLCAoIiVzOiB0ZW1wX3NlZ3MgYWxyZWFkeSBzZXQtdXAiLAorCSAg ICBfX2Z1bmNfXykpOworCisJeGVubWFwLT50ZW1wX3NlZ3MgPSBtYWxsb2MoeGVubWFwLT5ucmVm cyAqIHNpemVvZihidXNfZG1hX3NlZ21lbnRfdCksCisJICAgIE1fQlVTRE1BX1hFTiwgTV9OT1dB SVQpOworCWlmICh4ZW5tYXAtPnRlbXBfc2VncyA9PSBOVUxMKSB7CisJCXJldHVybiAoRU5PTUVN KTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgeGVubWFwLT5ucmVmczsgaSsrKSB7CisJCXhlbm1h cC0+dGVtcF9zZWdzW2ldID0gc2Vnc1tpXTsKKwl9CisKKwlyZXR1cm4gKDApOworfQorCitzdGF0 aWMgaW50Cit4ZW5fZG1hbWFwX2FsbG9jX3JlZnMoc3RydWN0IGJ1c19kbWFtYXBfeGVuICp4ZW5t YXAsIHVuc2lnbmVkIGludCBucmVmcykKK3sKKwlpbnQgZXJyb3I7CisJdW5zaWduZWQgaW50IGk7 CisJLyogVGhlIGhlYWQgb2YgdGhlIGdyYW50IHJlZiBsaXN0IHVzZWQgZm9yIGJhdGNoIGFsbG9j YXRpbmcgdGhlIHJlZnMuICovCisJZ3JhbnRfcmVmX3QgZ3JlZl9oZWFkOworCWJ1c19kbWFfc2Vn bWVudF90ICpzZWdzOworCXN0cnVjdCBidXNfZG1hX3RhZ194ZW4gKnhlbnRhZzsKKworCXhlbnRh ZyA9IHhlbm1hcC0+dGFnOworCisJaWYgKHhlbm1hcC0+cmVmcyA9PSBOVUxMKSB7CisJCXhlbm1h cC0+cmVmcyA9IG1hbGxvYyh4ZW50YWctPm1heF9zZWdtZW50cyAqCisJCSAgICBzaXplb2YoZ3Jh bnRfcmVmX3QpLCBNX0JVU0RNQV9YRU4sIE1fTk9XQUlUKTsKKwkJaWYgKHhlbm1hcC0+cmVmcyA9 PSBOVUxMKSB7CisJCQlyZXR1cm4gKEVOT01FTSk7CisJCX0KKwl9CisKKwllcnJvciA9IGdudHRh Yl9hbGxvY19ncmFudF9yZWZlcmVuY2VzKG5yZWZzLCAmZ3JlZl9oZWFkKTsKKwlpZiAoZXJyb3Ip IHsKKwkJaWYgKCF4ZW5tYXAtPnNsZWVwYWJsZSkgeworCQkJZ250dGFiX2VuZF9mb3JlaWduX2Fj Y2Vzc19yZWZlcmVuY2VzKHhlbm1hcC0+bnJlZnMsCisJCQkgICAgeGVubWFwLT5yZWZzKTsKKwkJ CWZyZWUoeGVubWFwLT5yZWZzLCBNX0JVU0RNQV9YRU4pOworCQkJeGVubWFwLT5yZWZzID0gTlVM TDsKKwkJCXJldHVybiAoZXJyb3IpOworCQl9CisKKwkJLyoKKwkJICogV2UgbmVlZCB0byB1cGRh dGUgdGhlIHZhbHVlIG9mIG5yZWZzIGJlZm9yZSB3YWl0aW5nLCBiZWNhdXNlCisJCSAqIHhlbl9n bnR0YWJfZnJlZV9jYWxsYmFjaygpIGV4cGVjdHMgdGhlIHVwZGF0ZWQgdmFsdWUuCisJCSAqLwor CQl4ZW5tYXAtPm5yZWZzICs9IG5yZWZzOworCisJCS8qCisJCSAqIFRoZSByZWFzb24gZm9yIHRo ZSBOVUxMIGNoZWNrIGlzIHRoYXQgd2UgY2FuIGdldCBoZXJlIGZyb20KKwkJICogdHdvIHBsYWNl czogeGVuX2RtYW1hcF9jYWxsYmFjaygpIG9yIG9uZSBvZiB0aGUgbG9hZHMuIFdoZW4KKwkJICog d2UgYXJlIGNvbWluZyBmcm9tIHRoZSB4ZW5fZG1hbWFwX2NhbGxiYWNrKCksIGl0IG1lYW5zIHRo ZQorCQkgKiBsb2FkIHdhcyBkZWZlcnJlZCwgYW5kIHRoZW4gdGhlIGNhbGxiYWNrIHdhcyBjYWxs ZWQuCisJCSAqIHhlbl9kbWFtYXBfY2FsbGJhY2soKSBzZXRzIHVwIHRlbXBfc2VncyBiZWZvcmUg Y2FsbGluZyB0aGlzCisJCSAqIGZ1bmN0aW9uLCBzbyBubyBuZWVkIHRvIGNvcHkgdGhlIHNlZ3Mg YXJyYXksIGl0IGhhcyBhbHJlYWR5CisJCSAqIGJlZW4gZG9uZS4gVGhlIHJlYXNvbiB3ZSBkb24n dCBzaW1wbHkgY2FsbCBtYXBfY29tcGxldGUoKQorCQkgKiBpbiBib3RoIGNhc2VzIGlzIGJlY2F1 c2UgbWFwX2NvbXBsZXRlKCkgZm9yIHRoZSBtYXAgd2FzCisJCSAqIGFscmVhZHkgY2FsbGVkIGJl Zm9yZSB4ZW5fZG1hbWFwX2NhbGxiYWNrKCkgd2FzIGNhbGxlZC4gV2UKKwkJICogc2hvdWxkIG5v dCBjYWxsIG1hcF9jb21wbGV0ZSgpIHR3aWNlLiBJdCB3b3VsZG4ndCBiZSBhCisJCSAqIHByb2Js ZW0gZm9yIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIGJ1c2RtYV9ib3VuY2UsCisJCSAq IGJ1dCBpdCBpcyBub3QgYSBnb29kIHRoaW5nIHRvIGFzc3VtZSB0aGluZ3MgYWJvdXQgdGhlCisJ CSAqIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgYW4gaW50ZXJmYWNlLgorCQkgKi8KKwkJaWYg KHhlbm1hcC0+dGVtcF9zZWdzID09IE5VTEwpIHsKKwkJCS8qCisJCQkgKiBDb21wbGV0ZSB0aGUg cGFyZW50J3MgbG9hZCBjeWNsZSBieSBjYWxsaW5nCisJCQkgKiBtYXBfY29tcGxldGUuCisJCQkg Ki8KKwkJCXNlZ3MgPSBfYnVzX2RtYW1hcF9jb21wbGV0ZSh4ZW50YWctPnBhcmVudCwgeGVubWFw LT5tYXAsCisJCQkgICAgTlVMTCwgeGVubWFwLT5ucmVmcywgMCk7CisKKwkJCS8qIFNhdmUgYSBj b3B5IG9mIHRoZSBzZWdzIGFycmF5LCB3ZSBuZWVkIGl0IGxhdGVyLiAqLworCQkJZXJyb3IgPSB4 ZW5fZG1hbWFwX3NldHVwX3RlbXBfc2Vncyh4ZW5tYXAsIHNlZ3MpOworCQkJaWYgKGVycm9yKSB7 CisJCQkJcmV0dXJuIChlcnJvcik7CisJCQl9CisJCX0KKworCQkvKgorCQkgKiBSZXF1ZXN0IGEg ZnJlZSBjYWxsYmFjayBzbyB3ZSB3aWxsIGJlIG5vdGlmaWVkIHdoZW4gdGhlCisJCSAqIGdyYW50 IHJlZnMgYXJlIGF2YWlsYWJsZS4KKwkJICovCisJCWdudHRhYl9yZXF1ZXN0X2ZyZWVfY2FsbGJh Y2soJnhlbm1hcC0+Z250dGFiX2NhbGxiYWNrLAorCQkgICAgeGVuX2dudHRhYl9mcmVlX2NhbGxi YWNrLCB4ZW5tYXAsCisJCSAgICB4ZW5tYXAtPm5yZWZzKTsKKworCQlyZXR1cm4gKEVJTlBST0dS RVNTKTsKKwl9CisKKwkvKiBDbGFpbSB0aGUgZ3JhbnQgcmVmZXJlbmNlcyBhbGxvY2F0ZWQgYW5k IHN0b3JlIGluIHRoZSByZWZzIGFycmF5LiAqLworCWZvciAoaSA9IHhlbm1hcC0+bnJlZnM7IGkg PCB4ZW5tYXAtPm5yZWZzICsgbnJlZnM7IGkrKykgeworCQl4ZW5tYXAtPnJlZnNbaV0gPSBnbnR0 YWJfY2xhaW1fZ3JhbnRfcmVmZXJlbmNlKCZncmVmX2hlYWQpOworCX0KKworCXJldHVybiAoMCk7 Cit9CisKKy8qIEFuIGludGVybmFsIGZ1bmN0aW9uIHRoYXQgaXMgYSBoZWxwZXIgZm9yIHRoZSB0 aHJlZSBsb2FkIHZhcmlhbnRzLiAqLworc3RhdGljIGludAoreGVuX2xvYWRfaGVscGVyKHN0cnVj dCBidXNfZG1hX3RhZ194ZW4gKnhlbnRhZywgc3RydWN0IGJ1c19kbWFtYXBfeGVuICp4ZW5tYXAs CisgICAgc3RydWN0IGxvYWRfb3Agb3ApCit7CisJaW50IGVycm9yLCBzZWdjb3VudDsKKworCUtB U1NFUlQoeGVubWFwICE9IE5VTEwsICgiJXM6IExvYWQgY2FsbGVkIG9uIGEgTlVMTCBtYXAiLCBf X2Z1bmNfXykpOworCisJeGVubWFwLT5nbnR0YWJfZmxhZ3MgPSBvcC5mbGFncyA+PiBCVVNfRE1B X1hFTl9HTlRUQUJfRkxBR1NfU0hJRlQ7CisJb3AuZmxhZ3MgJj0gMHhGRkZGOworCisJLyoKKwkg KiBzZWdwIGNvbnRhaW5zIHRoZSBzdGFydGluZyBzZWdtZW50IG9uIGVudHJhY2UsIGFuZCB0aGUg ZW5kaW5nIHNlZ21lbnQKKwkgKiBvbiBleGl0LiBXZSBjYW4gdXNlIGl0IHRvIGNhbGN1bGF0ZSBo b3cgbWFueSBzZWdtZW50cyB0aGUgbWFwIHVzZXMuCisJICovCisJc2VnY291bnQgPSAqb3Auc2Vn cDsKKworCXN3aXRjaCAob3AudHlwZSkgeworCWNhc2UgTE9BRF9NQToKKwkJZXJyb3IgPSBfYnVz X2RtYW1hcF9sb2FkX21hKHhlbnRhZy0+cGFyZW50LCB4ZW5tYXAtPm1hcCwKKwkJICAgIG9wLm1h Lm1hLCBvcC5zaXplLCBvcC5tYS5tYV9vZmZzLCBvcC5mbGFncywgb3Auc2VncywKKwkJICAgIG9w LnNlZ3ApOworCQlicmVhazsKKwljYXNlIExPQURfUEhZUzoKKwkJZXJyb3IgPSBfYnVzX2RtYW1h cF9sb2FkX3BoeXMoeGVudGFnLT5wYXJlbnQsIHhlbm1hcC0+bWFwLAorCQkgICAgb3AucGh5cy5i dWYsIG9wLnNpemUsIG9wLmZsYWdzLCBvcC5zZWdzLCBvcC5zZWdwKTsKKwkJYnJlYWs7CisJY2Fz ZSBMT0FEX0JVRkZFUjoKKwkJZXJyb3IgPSBfYnVzX2RtYW1hcF9sb2FkX2J1ZmZlcih4ZW50YWct PnBhcmVudCwgeGVubWFwLT5tYXAsCisJCSAgICBvcC5idWZmZXIuYnVmLCBvcC5zaXplLCBvcC5i dWZmZXIucG1hcCwgb3AuZmxhZ3MsIG9wLnNlZ3MsCisJCSAgICBvcC5zZWdwKTsKKwkJYnJlYWs7 CisJfQorCisJaWYgKGVycm9yID09IEVJTlBST0dSRVNTKSB7CisJCXJldHVybiAoZXJyb3IpOwor CX0KKwlpZiAoZXJyb3IgIT0gMCkgeworCQlnb3RvIGVycjsKKwl9CisKKwlzZWdjb3VudCA9ICpv cC5zZWdwIC0gc2VnY291bnQ7CisJS0FTU0VSVCh4ZW5tYXAtPm5yZWZzICsgc2VnY291bnQgPD0g eGVudGFnLT5tYXhfc2VnbWVudHMsICgiYnVzZG1hX3hlbjoiCisJICAgICIgc2VnY291bnQgdG9v IGxhcmdlOiBzZWdjb3VudCA9ICVkLCB4ZW50YWctPm1heF9zZWdtZW50cyA9ICVkIiwKKwkgICAg c2VnY291bnQsIHhlbnRhZy0+bWF4X3NlZ21lbnRzKSk7CisKKwkvKiBUaGUgZ3JhbnQgcmVmcyB3 ZXJlIGFsbG9jYXRlZCBvbiBtYXAgY3JlYXRpb24uICovCisJaWYgKHhlbm1hcC0+Z3JlZnNfcHJl YWxsb2NhdGVkKSB7CisJCXhlbm1hcC0+bnJlZnMgKz0gc2VnY291bnQ7CisJCXJldHVybiAoMCk7 CisJfQorCisJZXJyb3IgPSB4ZW5fZG1hbWFwX2FsbG9jX3JlZnMoeGVubWFwLCBzZWdjb3VudCk7 CisJaWYgKGVycm9yID09IEVJTlBST0dSRVNTKSB7CisJCXJldHVybiAoRUlOUFJPR1JFU1MpOwor CX0KKwlpZiAoZXJyb3IgIT0gMCkgeworCQlnb3RvIGVycjsKKwl9CisKKwl4ZW5tYXAtPm5yZWZz ICs9IHNlZ2NvdW50OworCisJcmV0dXJuICgwKTsKKworZXJyOgorCUtBU1NFUlQoZXJyb3IgIT0g MCwKKwkgICAgKCJidXNkbWFfeGVuOiAlczogSW4gZXJyb3IgaGFuZGxpbmcgc2VjdGlvbiBidXQg ZXJyb3IgaXMgMCIsCisJICAgIF9fZnVuY19fKSk7CisJLyogVW5sb2FkIHRoZSBtYXAgYmVmb3Jl IHJldHVybmluZy4gKi8KKwlidXNfZG1hbWFwX3VubG9hZCh4ZW50YWctPnBhcmVudCwgeGVubWFw LT5tYXApOworCXJldHVybiAoZXJyb3IpOworfQorCitzdGF0aWMgaW50Cit4ZW5fYnVzX2RtYW1h cF9sb2FkX21hKGJ1c19kbWFfdGFnX3QgZG1hdCwgYnVzX2RtYW1hcF90IG1hcCwKKyAgICBzdHJ1 Y3Qgdm1fcGFnZSAqKm1hLCBidXNfc2l6ZV90IHRsZW4sIGludCBtYV9vZmZzLCBpbnQgZmxhZ3Ms CisgICAgYnVzX2RtYV9zZWdtZW50X3QgKnNlZ3MsIGludCAqc2VncCkKK3sKKwlzdHJ1Y3QgYnVz X2RtYV90YWdfeGVuICp4ZW50YWc7CisJc3RydWN0IGJ1c19kbWFtYXBfeGVuICp4ZW5tYXA7CisJ c3RydWN0IGxvYWRfb3Agb3A7CisKKwl4ZW50YWcgPSAoc3RydWN0IGJ1c19kbWFfdGFnX3hlbiAq KWRtYXQ7CisJeGVubWFwID0gKHN0cnVjdCBidXNfZG1hbWFwX3hlbiAqKW1hcDsKKworCW9wLnR5 cGUgPSBMT0FEX01BOworCW9wLnNpemUgPSB0bGVuOworCW9wLmZsYWdzID0gZmxhZ3M7CisJb3Au c2VncyA9IHNlZ3M7CisJb3Auc2VncCA9IHNlZ3A7CisJb3AubWEubWEgPSBtYTsKKwlvcC5tYS5t YV9vZmZzID0gbWFfb2ZmczsKKworCXJldHVybiAoeGVuX2xvYWRfaGVscGVyKHhlbnRhZywgeGVu bWFwLCBvcCkpOworfQorCitzdGF0aWMgaW50Cit4ZW5fYnVzX2RtYW1hcF9sb2FkX3BoeXMoYnVz X2RtYV90YWdfdCBkbWF0LCBidXNfZG1hbWFwX3QgbWFwLAorICAgIHZtX3BhZGRyX3QgYnVmLCBi dXNfc2l6ZV90IGJ1ZmxlbiwgaW50IGZsYWdzLAorICAgIGJ1c19kbWFfc2VnbWVudF90ICpzZWdz LCBpbnQgKnNlZ3ApCit7CisJc3RydWN0IGJ1c19kbWFfdGFnX3hlbiAqeGVudGFnOworCXN0cnVj dCBidXNfZG1hbWFwX3hlbiAqeGVubWFwOworCXN0cnVjdCBsb2FkX29wIG9wOworCisJeGVudGFn ID0gKHN0cnVjdCBidXNfZG1hX3RhZ194ZW4gKilkbWF0OworCXhlbm1hcCA9IChzdHJ1Y3QgYnVz X2RtYW1hcF94ZW4gKiltYXA7CisKKwlvcC50eXBlID0gTE9BRF9QSFlTOworCW9wLnNpemUgPSBi dWZsZW47CisJb3AuZmxhZ3MgPSBmbGFnczsKKwlvcC5zZWdzID0gc2VnczsKKwlvcC5zZWdwID0g c2VncDsKKwlvcC5waHlzLmJ1ZiA9IGJ1ZjsKKworCXJldHVybiAoeGVuX2xvYWRfaGVscGVyKHhl bnRhZywgeGVubWFwLCBvcCkpOworfQorCitzdGF0aWMgaW50Cit4ZW5fYnVzX2RtYW1hcF9sb2Fk X2J1ZmZlcihidXNfZG1hX3RhZ190IGRtYXQsIGJ1c19kbWFtYXBfdCBtYXAsCisgICAgdm9pZCAq YnVmLCBidXNfc2l6ZV90IGJ1Zmxlbiwgc3RydWN0IHBtYXAgKnBtYXAsIGludCBmbGFncywKKyAg ICBidXNfZG1hX3NlZ21lbnRfdCAqc2VncywgaW50ICpzZWdwKQoreworCXN0cnVjdCBidXNfZG1h X3RhZ194ZW4gKnhlbnRhZzsKKwlzdHJ1Y3QgYnVzX2RtYW1hcF94ZW4gKnhlbm1hcDsKKwlzdHJ1 Y3QgbG9hZF9vcCBvcDsKKworCXhlbnRhZyA9IChzdHJ1Y3QgYnVzX2RtYV90YWdfeGVuICopZG1h dDsKKwl4ZW5tYXAgPSAoc3RydWN0IGJ1c19kbWFtYXBfeGVuICopbWFwOworCisJb3AudHlwZSA9 IExPQURfQlVGRkVSOworCW9wLnNpemUgPSBidWZsZW47CisJb3AuZmxhZ3MgPSBmbGFnczsKKwlv cC5zZWdzID0gc2VnczsKKwlvcC5zZWdwID0gc2VncDsKKwlvcC5idWZmZXIuYnVmID0gYnVmOwor CW9wLmJ1ZmZlci5wbWFwID0gcG1hcDsKKworCXJldHVybiAoeGVuX2xvYWRfaGVscGVyKHhlbnRh ZywgeGVubWFwLCBvcCkpOworfQorCisvKgorICogSWYgdGhlIGxvYWQgaXMgY2FsbGVkIHdpdGgg dGhlIGZsYWcgQlVTX0RNQV9XQUlUT0ssIGFuZCB0aGUgYWxsb2NhdGlvbiBpcworICogZGVmZXJy ZWQsIHRoZSBncmFudCByZWZlcmVuY2VzIG5lZWQgdG8gYmUgYWxsb2NhdGVkIGJlZm9yZSBjYWxs aW5nIHRoZQorICogY2xpZW50J3MgY2FsbGJhY2suCisgKi8KK3N0YXRpYyB2b2lkCit4ZW5fZG1h bWFwX2NhbGxiYWNrKHZvaWQgKmNhbGxiYWNrX2FyZywgYnVzX2RtYV9zZWdtZW50X3QgKnNlZ3Ms IGludCBuc2VnLAorICAgIGludCBlcnJvcikKK3sKKwlzdHJ1Y3QgYnVzX2RtYV90YWdfeGVuICp4 ZW50YWc7CisJc3RydWN0IGJ1c19kbWFtYXBfeGVuICp4ZW5tYXA7CisJYnVzX2RtYW1hcF9jYWxs YmFja190ICpjYWxsYmFjazsKKwl1bnNpZ25lZCBpbnQgaTsKKworCXhlbm1hcCA9IGNhbGxiYWNr X2FyZzsKKwl4ZW50YWcgPSB4ZW5tYXAtPnRhZzsKKwljYWxsYmFjayA9IHhlbm1hcC0+Y2FsbGJh Y2s7CisKKwl4ZW5tYXAtPm5yZWZzID0gbnNlZzsKKworCWlmIChlcnJvcikgeworCQlnb3RvIGVy cjsKKwl9CisKKwllcnJvciA9IHhlbl9kbWFtYXBfc2V0dXBfdGVtcF9zZWdzKHhlbm1hcCwgc2Vn cyk7CisJaWYgKGVycm9yKSB7CisJCWdvdG8gZXJyOworCX0KKworCWVycm9yID0geGVuX2RtYW1h cF9hbGxvY19yZWZzKHhlbm1hcCwgeGVubWFwLT5ucmVmcyk7CisJaWYgKGVycm9yID09IEVJTlBS T0dSRVNTKSB7CisJCXJldHVybjsKKwl9CisJaWYgKGVycm9yICE9IDApeworCQlmcmVlKHhlbm1h cC0+dGVtcF9zZWdzLCBNX0JVU0RNQV9YRU4pOworCQl4ZW5tYXAtPnRlbXBfc2VncyA9IE5VTEw7 CisJCWdvdG8gZXJyOworCX0KKworCS8qIFdlIGRvbid0IG5lZWQgdGVtcF9zZWdzIGFueSBtb3Jl LiAqLworCWZyZWUoeGVubWFwLT50ZW1wX3NlZ3MsIE1fQlVTRE1BX1hFTik7CisJeGVubWFwLT50 ZW1wX3NlZ3MgPSBOVUxMOworCisJZm9yIChpID0gMDsgaSA8IHhlbm1hcC0+bnJlZnM7IGkrKykg eworCQlnbnR0YWJfZ3JhbnRfZm9yZWlnbl9hY2Nlc3NfcmVmKHhlbm1hcC0+cmVmc1tpXSwgeGVu dGFnLT5kb21pZCwKKwkJICAgIGF0b3Aoc2Vnc1tpXS5kc19hZGRyKSwgeGVubWFwLT5nbnR0YWJf ZmxhZ3MpOworCX0KKworCSgqY2FsbGJhY2spKHhlbm1hcC0+Y2FsbGJhY2tfYXJnLCBzZWdzLCBu c2VnLCAwKTsKKwlyZXR1cm47CisKK2VycjoKKwlLQVNTRVJUKGVycm9yICE9IDAsICgiJXM6IElu IGVycm9yIGhhbmRsaW5nIHNlY3Rpb24sIGJ1dCBlcnJvciBpcyAwIiwKKwkgICAgX19mdW5jX18p KTsKKwkoKmNhbGxiYWNrKSh4ZW5tYXAtPmNhbGxiYWNrX2FyZywgc2VncywgbnNlZywgZXJyb3Ip OworfQorCitzdGF0aWMgdm9pZAoreGVuX2J1c19kbWFtYXBfd2FpdG9rKGJ1c19kbWFfdGFnX3Qg ZG1hdCwgYnVzX2RtYW1hcF90IG1hcCwKKyAgICBzdHJ1Y3QgbWVtZGVzYyAqbWVtLCBidXNfZG1h bWFwX2NhbGxiYWNrX3QgKmNhbGxiYWNrLAorICAgIHZvaWQgKmNhbGxiYWNrX2FyZykKK3sKKwlz dHJ1Y3QgYnVzX2RtYV90YWdfeGVuICp4ZW50YWc7CisJc3RydWN0IGJ1c19kbWFtYXBfeGVuICp4 ZW5tYXA7CisKKwl4ZW50YWcgPSAoc3RydWN0IGJ1c19kbWFfdGFnX3hlbiAqKWRtYXQ7CisJeGVu bWFwID0gKHN0cnVjdCBidXNfZG1hbWFwX3hlbiAqKW1hcDsKKworCXhlbm1hcC0+Y2FsbGJhY2sg PSBjYWxsYmFjazsKKwl4ZW5tYXAtPmNhbGxiYWNrX2FyZyA9IGNhbGxiYWNrX2FyZzsKKwl4ZW5t YXAtPnNsZWVwYWJsZSA9IHRydWU7CisKKwkvKgorCSAqIFNvbWUgZXh0cmEgd29yayBoYXMgdG8g YmUgZG9uZSBiZWZvcmUgY2FsbGluZyB0aGUgY2xpZW50IGNhbGxiYWNrCisJICogZnJvbSBhIGRl ZmVycmVkIGNvbnRleHQuIFdoZW4gdGhlIGxvYWQgZ2V0cyBkZWZlcnJlZCwgdGhlIGdyYW50CisJ ICogcmVmZXJlbmNlcyBhcmUgbm90IGFsbG9jYXRlZC4geGVuX2RtYW1hcF9jYWxsYmFjayBhbGxv Y2F0ZXMgdGhlCisJICogZ3JhbnQgcmVmcyBiZWZvcmUgY2FsbGluZyB0aGUgY2xpZW50J3MgY2Fs bGJhY2suCisJICovCisJX2J1c19kbWFtYXBfd2FpdG9rKHhlbnRhZy0+cGFyZW50LCB4ZW5tYXAt Pm1hcCwgbWVtLAorCSAgICB4ZW5fZG1hbWFwX2NhbGxiYWNrLCB4ZW5tYXApOworfQorCitzdGF0 aWMgYnVzX2RtYV9zZWdtZW50X3QgKgoreGVuX2J1c19kbWFtYXBfY29tcGxldGUoYnVzX2RtYV90 YWdfdCBkbWF0LCBidXNfZG1hbWFwX3QgbWFwLAorICAgIGJ1c19kbWFfc2VnbWVudF90ICpzZWdz LCBpbnQgbnNlZ3MsIGludCBlcnJvcikKK3sKKwlzdHJ1Y3QgYnVzX2RtYV90YWdfeGVuICp4ZW50 YWc7CisJc3RydWN0IGJ1c19kbWFtYXBfeGVuICp4ZW5tYXA7CisJdW5zaWduZWQgaW50IGk7CisK Kwl4ZW50YWcgPSAoc3RydWN0IGJ1c19kbWFfdGFnX3hlbiAqKWRtYXQ7CisJeGVubWFwID0gKHN0 cnVjdCBidXNfZG1hbWFwX3hlbiAqKW1hcDsKKworCXNlZ3MgPSBfYnVzX2RtYW1hcF9jb21wbGV0 ZSh4ZW50YWctPnBhcmVudCwgeGVubWFwLT5tYXAsIHNlZ3MsIG5zZWdzLAorCSAgICBlcnJvcik7 CisKKwkvKiBJZiB0aGVyZSB3YXMgYW4gZXJyb3IsIGRvIG5vdCBtYXAgdGhlIGdyYW50IHJlZmVy ZW5jZXMuICovCisJaWYgKGVycm9yKSB7CisJCXJldHVybiAoc2Vncyk7CisJfQorCisJZm9yIChp ID0gMDsgaSA8IHhlbm1hcC0+bnJlZnM7IGkrKykgeworCQlnbnR0YWJfZ3JhbnRfZm9yZWlnbl9h Y2Nlc3NfcmVmKHhlbm1hcC0+cmVmc1tpXSwgeGVudGFnLT5kb21pZCwKKwkJICAgIGF0b3Aoc2Vn c1tpXS5kc19hZGRyKSwgeGVubWFwLT5nbnR0YWJfZmxhZ3MpOworCX0KKworCXJldHVybiAoc2Vn cyk7Cit9CisKKy8qCisgKiBYWFggSWYgdGhlIG1hcCBpcyB1bmxvYWRlZCB3aGVuIHRoZSBsb2Fk IGhhcyBub3QgY29tcGxldGVkLCBhbmQgYWxsb2NhdGlvbiBvZgorICogZ3JhbnQgcmVmZXJlbmNl cyBoYXMgYmVlbiBkZWZlcmVkLCB0aGlzIG1pZ2h0IGNhdXNlIGEgc2VnbWVudGF0aW9uIGZhdWx0 IGJ5CisgKiBhY2Nlc3NpbmcgeGVubWFwLT5yZWZzLiBUaGlzIHdpbGwgYWxzbyBsZWFrIGdyYW50 IHJlZnMuCisgKi8KK3N0YXRpYyB2b2lkCit4ZW5fYnVzX2RtYW1hcF91bmxvYWQoYnVzX2RtYV90 YWdfdCBkbWF0LCBidXNfZG1hbWFwX3QgbWFwKQoreworCXN0cnVjdCBidXNfZG1hX3RhZ194ZW4g KnhlbnRhZzsKKwlzdHJ1Y3QgYnVzX2RtYW1hcF94ZW4gKnhlbm1hcDsKKwl1bnNpZ25lZCBpbnQg aTsKKworCXhlbnRhZyA9IChzdHJ1Y3QgYnVzX2RtYV90YWdfeGVuICopZG1hdDsKKwl4ZW5tYXAg PSAoc3RydWN0IGJ1c19kbWFtYXBfeGVuICopbWFwOworCisJLyoKKwkgKiBJZiB0aGUgZ3JhbnQg cmVmZXJlbmNlcyB3ZXJlIHByZS1hbGxvY2F0ZWQgb24gbWFwIGNyZWF0aW9uLAorCSAqIHhlbl9i dXNfZG1hbWFwX2Rlc3Ryb3koKSB3aWxsIGNsZWFuIHRoZW0gdXAsIGRvbid0IGRvIGl0IGhlcmUu IEp1c3QKKwkgKiBlbmQgZm9yZWlnbiBhY2Nlc3MuCisJICovCisJaWYgKHhlbm1hcC0+Z3JlZnNf cHJlYWxsb2NhdGVkKSB7CisJCWZvciAoaSA9IDA7IGkgPCB4ZW5tYXAtPm5yZWZzOyBpKyspIHsK KwkJCWdudHRhYl9lbmRfZm9yZWlnbl9hY2Nlc3NfcmVmKHhlbm1hcC0+cmVmc1tpXSk7CisJCX0K Kwl9IGVsc2UgeworCQlnbnR0YWJfZW5kX2ZvcmVpZ25fYWNjZXNzX3JlZmVyZW5jZXMoeGVubWFw LT5ucmVmcywKKwkJICAgIHhlbm1hcC0+cmVmcyk7CisKKwkJZnJlZSh4ZW5tYXAtPnJlZnMsIE1f QlVTRE1BX1hFTik7CisJCXhlbm1hcC0+cmVmcyA9IE5VTEw7CisJfQorCisJeGVubWFwLT5ucmVm cyA9IDA7CisKKwkvKiBSZXNldCB0aGUgZmxhZ3MuICovCisJeGVubWFwLT5zbGVlcGFibGUgPSBm YWxzZTsKKworCUtBU1NFUlQoeGVubWFwLT50ZW1wX3NlZ3MgPT0gTlVMTCwKKwkgICAgKCJidXNk bWFfeGVuOiAlczogeGVubWFwLT50ZW1wX3NlZ3Mgbm90IE5VTEwuIiwgX19mdW5jX18pKTsKKwor CWJ1c19kbWFtYXBfdW5sb2FkKHhlbnRhZy0+cGFyZW50LCB4ZW5tYXAtPm1hcCk7Cit9CisKK3N0 YXRpYyB2b2lkCit4ZW5fYnVzX2RtYW1hcF9zeW5jKGJ1c19kbWFfdGFnX3QgZG1hdCwgYnVzX2Rt YW1hcF90IG1hcCwgYnVzX2RtYXN5bmNfb3BfdCBvcCkKK3sKKwlzdHJ1Y3QgYnVzX2RtYV90YWdf eGVuICp4ZW50YWc7CisJc3RydWN0IGJ1c19kbWFtYXBfeGVuICp4ZW5tYXA7CisKKwl4ZW50YWcg PSAoc3RydWN0IGJ1c19kbWFfdGFnX3hlbiAqKWRtYXQ7CisJeGVubWFwID0gKHN0cnVjdCBidXNf ZG1hbWFwX3hlbiAqKW1hcDsKKworCWJ1c19kbWFtYXBfc3luYyh4ZW50YWctPnBhcmVudCwgeGVu bWFwLT5tYXAsIG9wKTsKK30KKworYnVzX2RtYV90YWdfdAoreGVuX2dldF9kbWFfdGFnKGJ1c19k bWFfdGFnX3QgcGFyZW50KQoreworCWJ1c19kbWFfdGFnX3QgbmV3dGFnOworCWJ1c19hZGRyX3Qg bWF4YWRkcjsKKwlpbnQgZXJyb3I7CisKKwltYXhhZGRyID0gQlVTX1NQQUNFX01BWEFERFI7CisK KwllcnJvciA9IHhlbl9idXNfZG1hX3RhZ19jcmVhdGUocGFyZW50LAorCSAgICBQQUdFX1NJWkUs IFBBR0VfU0laRSwJCS8qIGFsaWdubWVudCwgYm91bmRhcnkgKi8KKwkgICAgbWF4YWRkciwJCQkJ LyogbG93YWRkciAqLworCSAgICBtYXhhZGRyLAkJCQkvKiBoaWdoYWRkciAqLworCSAgICBOVUxM LCBOVUxMLAkJCQkvKiBmaWx0ZnVuYywgZmlsdGZ1bmNhcmcgKi8KKwkgICAgbWF4YWRkciwJCQkJ LyogbWF4c2l6ZSAqLworCSAgICBCVVNfU1BBQ0VfVU5SRVNUUklDVEVELAkJLyogbnNlZ21lbnRz ICovCisJICAgIFBBR0VfU0laRSwJCQkJLyogbWF4c2Vnc3ogKi8KKwkgICAgQlVTRE1BX1hFTl9U QUdfSU5JVCwJCS8qIGZsYWdzICovCisJICAgIE5VTEwsIE5VTEwsCQkJCS8qIGxvY2tmdW5jLCBs b2NrZnVuY2FyZyAqLworCSAgICAmbmV3dGFnKTsKKworCXJldHVybiAobmV3dGFnKTsKK30KKwor Z3JhbnRfcmVmX3QgKgoreGVuX2RtYW1hcF9nZXRfZ3JlZnMoYnVzX2RtYW1hcF90IG1hcCkKK3sK KwlzdHJ1Y3QgYnVzX2RtYW1hcF94ZW4gKnhlbm1hcDsKKworCXhlbm1hcCA9IChzdHJ1Y3QgYnVz X2RtYW1hcF94ZW4gKiltYXA7CisKKwlyZXR1cm4gKHhlbm1hcC0+cmVmcyk7Cit9CisKK3N0YXRp YyBzdHJ1Y3QgYnVzX2RtYV9pbXBsIGJ1c19kbWFfeGVuX2ltcGwgPSB7CisJLnRhZ19jcmVhdGUg PSB4ZW5fYnVzX2RtYV90YWdfY3JlYXRlLAorCS50YWdfZGVzdHJveSA9IHhlbl9idXNfZG1hX3Rh Z19kZXN0cm95LAorCS50YWdfc2V0X2RvbWFpbiA9IHhlbl9idXNfZG1hX3RhZ19zZXRfZG9tYWlu LAorCS5tYXBfY3JlYXRlID0geGVuX2J1c19kbWFtYXBfY3JlYXRlLAorCS5tYXBfZGVzdHJveSA9 IHhlbl9idXNfZG1hbWFwX2Rlc3Ryb3ksCisJLm1lbV9hbGxvYyA9IHhlbl9idXNfZG1hbWVtX2Fs bG9jLAorCS5tZW1fZnJlZSA9IHhlbl9idXNfZG1hbWVtX2ZyZWUsCisJLmxvYWRfcGh5cyA9IHhl bl9idXNfZG1hbWFwX2xvYWRfcGh5cywKKwkubG9hZF9idWZmZXIgPSB4ZW5fYnVzX2RtYW1hcF9s b2FkX2J1ZmZlciwKKwkubG9hZF9tYSA9IHhlbl9idXNfZG1hbWFwX2xvYWRfbWEsCisJLm1hcF93 YWl0b2sgPSB4ZW5fYnVzX2RtYW1hcF93YWl0b2ssCisJLm1hcF9jb21wbGV0ZSA9IHhlbl9idXNf ZG1hbWFwX2NvbXBsZXRlLAorCS5tYXBfdW5sb2FkID0geGVuX2J1c19kbWFtYXBfdW5sb2FkLAor CS5tYXBfc3luYyA9IHhlbl9idXNfZG1hbWFwX3N5bmMsCit9OwpkaWZmIC0tZ2l0IGEvc3lzL3g4 Ni94ZW4veGVucHYuYyBiL3N5cy94ODYveGVuL3hlbnB2LmMKaW5kZXggNTg3Y2VkOTEzZS4uMmMx OTkwN2FiOSAxMDA2NDQKLS0tIGEvc3lzL3g4Ni94ZW4veGVucHYuYworKysgYi9zeXMveDg2L3hl bi94ZW5wdi5jCkBAIC00NSw2ICs0NSw3IEBAIF9fRkJTRElEKCIkRnJlZUJTRCQiKTsKIAogI2lu Y2x1ZGUgPHhlbi94ZW4tb3MuaD4KICNpbmNsdWRlIDx4ZW4vZ250dGFiLmg+CisjaW5jbHVkZSA8 eGVuL2J1c2RtYV94ZW4uaD4KIAogI2luY2x1ZGUgInhlbm1lbV9pZi5oIgogCkBAIC0xNDUsNiAr MTQ2LDE5IEBAIHhlbnB2X2ZyZWVfcGh5c21lbShkZXZpY2VfdCBkZXYsIGRldmljZV90IGNoaWxk LCBpbnQgcmVzX2lkLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlCiAJcmV0dXJuIChidXNfcmVsZWFzZV9y ZXNvdXJjZShjaGlsZCwgU1lTX1JFU19NRU1PUlksIHJlc19pZCwgcmVzKSk7CiB9CiAKK3N0YXRp YyBidXNfZG1hX3RhZ190Cit4ZW5wdl9nZXRfZG1hX3RhZyhkZXZpY2VfdCBidXMsIGRldmljZV90 IGNoaWxkKQoreworCWJ1c19kbWFfdGFnX3QgcGFyZW50LCBuZXd0YWc7CisKKwlwYXJlbnQgPSBi dXNfZ2V0X2RtYV90YWcoYnVzKTsKKworCW5ld3RhZyA9IHhlbl9nZXRfZG1hX3RhZyhwYXJlbnQp OworCUtBU1NFUlQobmV3dGFnICE9IE5VTEwsICgiJXM6IEZhaWxlZCB0byBjcmVhdGUgWGVuIERN QSB0YWciLCBfX2Z1bmNfXykpOworCisJcmV0dXJuIChuZXd0YWcpOworfQorCiBzdGF0aWMgZGV2 aWNlX21ldGhvZF90IHhlbnB2X21ldGhvZHNbXSA9IHsKIAkvKiBEZXZpY2UgaW50ZXJmYWNlICov CiAJREVWTUVUSE9EKGRldmljZV9pZGVudGlmeSwJCXhlbnB2X2lkZW50aWZ5KSwKQEAgLTE1OSw2 ICsxNzMsNyBAQCBzdGF0aWMgZGV2aWNlX21ldGhvZF90IHhlbnB2X21ldGhvZHNbXSA9IHsKIAlE RVZNRVRIT0QoYnVzX3JlbGVhc2VfcmVzb3VyY2UsCQlidXNfZ2VuZXJpY19yZWxlYXNlX3Jlc291 cmNlKSwKIAlERVZNRVRIT0QoYnVzX2FjdGl2YXRlX3Jlc291cmNlLAlidXNfZ2VuZXJpY19hY3Rp dmF0ZV9yZXNvdXJjZSksCiAJREVWTUVUSE9EKGJ1c19kZWFjdGl2YXRlX3Jlc291cmNlLAlidXNf Z2VuZXJpY19kZWFjdGl2YXRlX3Jlc291cmNlKSwKKwlERVZNRVRIT0QoYnVzX2dldF9kbWFfdGFn LAkJeGVucHZfZ2V0X2RtYV90YWcpLAogCiAJLyogSW50ZXJmYWNlIHRvIGFsbG9jYXRlIG1lbW9y eSBmb3IgZm9yZWlnbiBtYXBwaW5ncyAqLwogCURFVk1FVEhPRCh4ZW5tZW1fYWxsb2MsCQkJeGVu cHZfYWxsb2NfcGh5c21lbSksCmRpZmYgLS1naXQgYS9zeXMveGVuL2J1c2RtYV94ZW4uaCBiL3N5 cy94ZW4vYnVzZG1hX3hlbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAu LjAwOGFhODA5NDUKLS0tIC9kZXYvbnVsbAorKysgYi9zeXMveGVuL2J1c2RtYV94ZW4uaApAQCAt MCwwICsxLDExNyBAQAorLyotCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xh dXNlLUZyZWVCU0QKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTggUHJhdHl1c2ggWWFkYXYgPHBy YXR5dXNoQEZyZWVCU0Qub3JnPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291 cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP VklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFO WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4g Tk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBG T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg T1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NT IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICog SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO IENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNF IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YK KyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEJAorICoKKyAqICoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioKKyAqIFRoaXMgaXMgdGhlIGludGVyZmFjZSBvZiB0aGUgWGVuLXNwZWNpZmljIGJ1c19k bWEoOSkgaW1wbGVtZW50YXRpb24uIFRoaXMKKyAqIGludGVyZmFjZSBzaG91bGQgYmUgdXNlZCBi eSBYZW4gZGV2aWNlIGRyaXZlcnMgdGhhdCBuZWVkIHRvIGFsbG9jYXRlIGFuZCBtYXAKKyAqIGdy YW50IHJlZmVyZW5jZXMuIFRoZSBkbWEgaW1wbGVtZW50YXRpb24gdGFrZXMgY2FyZSBvZiBhbGwg dGhlIGJvb2trZWVwaW5nCisgKiBuZWVkZWQsIGxpa2UgZXh0cmFjdGluZyBwaHlzaWNhbCBhZGRy ZXNzZXMgZnJvbSB2aXJ0dWFsIHBhZ2VzLCBhbGxvY2F0aW5nCisgKiB0aGUgZ3JhbnQgcmVmZXJl bmNlcywgbWFwcGluZyB0aGVtLCB3YWl0aW5nIHdoZW4gdGhlcmUgaXMgYSBzaG9ydGFnZSBvZgor ICogcmVmZXJlbmNlcywgZXRjLgorICoKKyAqIFVzaW5nIHRoZSBpbXBsZW1lbnRhdGlvbjoKKyAq CisgKiBBbGwgdGhlIGRldmljZXMgaGFuZ2luZyBvZmYgdGhlIHhlbnB2IGJ1cyBoYXZlIHhlbi1z cGVjaWZpYyBkbWEgdGFncy4gVG8gdXNlCisgKiB0aGUgaW1wbGVtZW50YXRpb24sIGNyZWF0ZSBh IGRtYSB0YWcgKHJlYWQgdGhlIGJ1c19kbWEoOSkgbWFuIHBhZ2UgZm9yCisgKiBkZXRhaWxzKS4g V2hlbiBjcmVhdGluZyB0aGUgdGFnLCB0aGUgZG9taWQgb2YgdGhlIG90aGVyIGVuZCBoYXMgdG8g YmUgT1InZAorICogd2l0aCB0aGUgZmxhZ3MgYXJndW1lbnQsIGxlZnQgc2hpZnRlZCBieSBCVVNf RE1BX1hFTl9ET01JRF9TSElGVC4gU2VlIHRoZQorICogI2RlZmluZSBiZWxvdyBmb3IgbW9yZSBp bmZvLgorICoKKyAqIE9uY2UgeW91IGhhdmUgdGhlIHRhZywgdXNlIGJ1c19kbWFtYXBfbG9hZCgp IHRvIGFsbG9jYXRlIGEgZ3JhbnQgcmVmZXJlbmNlCisgKiBhbmQgZ3JhbnQgZm9yZWlnbiBhY2Nl c3MgdG8gdGhlIHBhZ2Uocykgc3BlY2lmaWVkIGluIG1hcF9sb2FkKCkncyBidWYKKyAqIGFyZ3Vt ZW50LiBUaGUgYWNjZXNzIGlzIGdyYW50ZWQgdG8gdGhlIGRvbWlkIHNwZWNpZmllZCB3aGVuIGNy ZWF0aW5nIHRoZSB0YWcuCisgKgorICogU29tZSBmbGFncyBjYW4gYmUgcGFzc2VkIHRvIGNoYW5n ZSB0aGUgYmVoYXZpb3I7IHNlZSB0aGUgZGVmaW5lcyBiZWxvdyBmb3IKKyAqIG1vcmUgaW5mby4g SWYgQlVTX0RNQV9OT1dBSVQgaXMgbm90IHBhc3NlZCB3aGVuIGxvYWRpbmcsIHRoZSBsb2FkIG1p Z2h0IGJlCisgKiBkZWZlcnJlZCBpbiBjYXNlIHRoZXJlIGlzIGEgc2hvcnRhZ2Ugb2YgZ3JhbnQg cmVmZXJlbmNlcy4gVGhlIHNlbWFudGljcyBvZgorICogZGVmZXJyZWQgbG9hZHMgaW4gdGhlIGJ1 c19kbWEoOSkgaW50ZXJmYWNlIGFyZSB1c2VkIGluIHRoaXMgY2FzZS4KKyAqCisgKiBUbyBmcmVl IHRoZSByZWZlcmVuY2UsIGFuZCB0byBlbmQgZm9yZWlnbiBhY2Nlc3MsIGNhbGwgYnVzX2RtYW1h cF91bmxvYWQoKS4KKyAqCisgKiBGb3IgZXhhbXBsZSB1c2FnZSwgY2hlY2sgc3lzL2Rldi94ZW4v bmV0ZnJvbnQvbmV0ZnJvbnQuYworICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKyNpZm5k ZWYgX19YRU5fQlVTRE1BX0gKKyNkZWZpbmUgX19YRU5fQlVTRE1BX0gKKworLyoKKyAqIEFtb3Vu dCBvZiBzaGlmdCBuZWVkZWQgdG8gZW5jb2RlL2RlY29kZSBncmFudCB0YWJsZSBmbGFncyBpbiBk bWEgbG9hZCBmbGFncy4KKyAqIEl0IGlzIHVzZWQgYnkgdGhlIGJ1c2RtYSBpbXBsZW1lbnRhdGlv biBmdW5jdGlvbnMgeGVuX2J1c19kbWFtYXBfbG9hZF9tYSgpLAorICogeGVuX2J1c19kbWFtYXBf bG9hZF9waHlzKCksIHhlbl9idXNfZG1hbWFwX2xvYWRfYnVmZmVyKCkgdG8gZGVjb2RlIHRoZQor ICogZmxhZ3MgdGhhdCBzaG91bGQgYmUgcGFzc2VkIHdoZW4gZG9pbmcgZ3JhbnQgdGFibGUgb3Bl cmF0aW9ucy4gVGhlIGRyaXZlcnMKKyAqIHNob3VsZCBub3QgZGlyZWN0bHkgdXNlIHRoaXMgdmFs dWUsIGFuZCBpbnN0ZWFkIHVzZSBCVVNfRE1BX1hFTl9STy4KKyAqLworI2RlZmluZSBCVVNfRE1B X1hFTl9HTlRUQUJfRkxBR1NfU0hJRlQgMTYKKworLyoKKyAqIFRoaXMgZmxhZyBjYW4gYmUgdXNl ZCBieSBkcml2ZXJzIHRvIGluZGljYXRlIHRoYXQgcmVhZC1vbmx5IGFjY2VzcyBzaG91bGQgYmUK KyAqIGdyYW50ZWQgdG8gdGhlIHBhZ2VzLiBUaGV5IHNob3VsZCBkbyBzb21ldGhpbmcgbGlrZToK KyAqCisgKiBmbGFncyA9IHlvdXJfYnVzZG1hX2ZsYWdzIHwgQlVTX0RNQV9YRU5fUk87CisgKi8K KyNkZWZpbmUgQlVTX0RNQV9YRU5fUk8gKDF1IDw8IEJVU19ETUFfWEVOX0dOVFRBQl9GTEFHU19T SElGVCkKKworLyoKKyAqIEFtb3VudCBvZiBzaGlmdCBuZWVkZWQgdG8gZW5jb2RlL2RlY29kZSBk b21pbiBJRCBpbiBkbWEgdGFnIGNyZWF0ZSBmbGFncy4KKyAqIFVzZWQgYnkgeGVuX2J1c19kbWFf dGFnX2NyZWF0ZSgpIHRvIGRlY29kZSB0aGUgZG9taWQgZnJvbSB0aGUgZmxhZ3MgcGFzc2VkLgor ICogVGhlIGNsaWVudCBkcml2ZXJzIHNob3VsZCB1c2UgdGhpcyB0byBlbmNvZGUgdGhlIGRvbWlk IGluIHRoZSBmbGFncyBwYXJhbWV0ZXIKKyAqIHBhc3NlZCB0byBidXNfZG1hX3RhZ19jcmVhdGUo KSBieSBkb2luZyBzb21ldGhpbmcgbGlrZToKKyAqCisgKiBmbGFncyA9IHlvdXJfYnVzZG1hX2Zs YWdzIHwgKG90aGVyZW5kX2lkIDw8IEJVU19ETUFfWEVOX0RPTUlEX1NISUZUKTsKKyAqLworI2Rl ZmluZSBCVVNfRE1BX1hFTl9ET01JRF9TSElGVCAxNgorCisvKgorICogVGhlIGRyaXZlcnMgY2Fu IHBhc3MgaXQgdG8gbWFwX2NyZWF0ZSgpJ3MgZmxhZ3MgdG8gcHJlLWFsbG9jYXRlIGdyYW50IHJl ZnMgc28KKyAqIHRoZXkgZG9uJ3QgaGF2ZSB0byBkZWFsIHdpdGggZmFpbGVkIGdyYW50IHJlZmVy ZW5jZSBhbGxvY2F0aW9uIHdoZW4gbG9hZGluZy4KKyAqIFRoZSBudW1iZXIgb2YgZ3JhbnQgcmVm ZXJlbmNlcyBhbGxvY2F0ZWQgaXMgZXF1YWwgdG8gdGhlIG1heGltdW0gbnVtYmVyIG9mCisgKiBz ZWdtZW50cyBwYXNzZWQgdXBvbiB0YWcgY3JlYXRpb24uCisgKgorICogQlVTX0RNQV9CVVMyIGlz IHJlc2VydmVkIGZvciB0aGUgYnVzZG1hIGltcGxlbWVudGF0aW9ucyB0byB1c2UgYXMgdGhleSB3 aXNoLgorICoKKyAqIE5vdGU6IEdyYW50IHJlZmVyZW5jZXMgYXJlIGEgc2NhcmNlIHJlc291cmNl LiBUcnkgdG8gbm90IHByZS1hbGxvY2F0ZSB0b28KKyAqIG1hbnkgZ3JhbnQgcmVmZXJlbmNlcywg b3IgaXQgbWlnaHQgZW5kIHVwIGhpbmRlcmluZyBvdGhlciBkcml2ZXJzLgorICovCisjZGVmaW5l IEJVU19ETUFfWEVOX1BSRUFMTE9DX1JFRlMgQlVTX0RNQV9CVVMyCisKK2J1c19kbWFfdGFnX3Qg eGVuX2dldF9kbWFfdGFnKGJ1c19kbWFfdGFnX3QgcGFyZW50KTsKKworLyoKKyAqIEdldCB0aGUg Z3JhbnQgcmVmZXJlbmNlcyBjb3JyZXNwb25kaW5nIHRvIE1BUC4KKyAqCisgKiBUaGUgbnVtYmVy IG9mIGdyYW50IHJlZmVyZW5jZXMgaXMgZXF1YWwgdG8gdGhlIG51bWJlciBvZiBzZWdtZW50cywg d2hpY2ggaXMKKyAqIHBhc3NlZCB0byB0aGUgY2FsbGJhY2sgc3BlY2lmaWVkIHdoZW4gbG9hZGlu ZyB0aGUgbWFwLgorICoKKyAqIE5vdGU6IERvIG5vdCBtb2RpZnkgdGhlIGdyYW50IHJlZmVyZW5j ZSBhcnJheSByZXR1cm5lZCBpbiBhbnkgd2F5LiBJdCBpcworICogYWxsb2NhdGVkIGFuZCBmcmVl ZCBieSB0aGUgZG1hbWFwLCBhbmQgaXQgc2hvdWxkIGJlIGNvbnNpZGVyZWQgcmVhZC1vbmx5IGJ5 CisgKiB0aGUgY2xpZW50IGRyaXZlcnMuCisgKi8KK2dyYW50X3JlZl90ICp4ZW5fZG1hbWFwX2dl dF9ncmVmcyhidXNfZG1hbWFwX3QgbWFwKTsKKworI2VuZGlmIC8qIF9fWEVOX0JVU0RNQV9IICov Cg== --000000000000a402a0057cfbc278--