Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1sRDJb-00Dtgi-Bp for pgsql-hackers@arkaria.postgresql.org; Tue, 09 Jul 2024 16:03:40 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1sRDJZ-00GNFY-NW for pgsql-hackers@arkaria.postgresql.org; Tue, 09 Jul 2024 16:03:37 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1sRDJY-00GNFQ-KD for pgsql-hackers@lists.postgresql.org; Tue, 09 Jul 2024 16:03:37 +0000 Received: from mail-ej1-x636.google.com ([2a00:1450:4864:20::636]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1sRDJU-001EDr-Q5 for pgsql-hackers@postgresql.org; Tue, 09 Jul 2024 16:03:35 +0000 Received: by mail-ej1-x636.google.com with SMTP id a640c23a62f3a-a77cc73d35fso691799266b.0 for ; Tue, 09 Jul 2024 09:03:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cybertec-at.20230601.gappssmtp.com; s=20230601; t=1720541011; x=1721145811; darn=postgresql.org; h=message-id:date:mime-version:comments:references:in-reply-to :subject:to:from:from:to:cc:subject:date:message-id:reply-to; bh=GYfUBHS0uMudG97NoOSHCmvCyLYHTuHIWf94uEQkDuI=; b=1lP253SvmlrfHf4UUU0u0ffWmqohYk434kBsq72Oapd1NUV6eeAvGBwpe6plLP+42I 0ZqJhTxoqagAj6UkmO6en1qLCLVJj5eENaxS3BK3cQBfokrFt/jvUopjOyVhnzC/L2/f R6uxhgNT7uXVET7nPoDDmtfVZ5d7dPdZEyE2hYmEYOoZDu98k8loYboj1YjeMl58DRmh XDD3R+q2KZu90rs3jUFhCBkBIm7i7dVwqXDrSPa5C//w5miyazmjxGV9O+kKEz1gtgu0 sokoN/ftK6KCZsLXtpR8yvgcVb8lPkEprVNcsvENoZeh5/8jRBwPfasit7Sux92jfFaK KWzQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1720541011; x=1721145811; h=message-id:date:mime-version:comments:references:in-reply-to :subject:to:from:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=GYfUBHS0uMudG97NoOSHCmvCyLYHTuHIWf94uEQkDuI=; b=FhePtQEhr5jo5I6ny6zyomQy2oXnFWAplwiaG3ZiboYdxvSCjQyItLh6cwOUHy+nNi eGpSPkNvSP0kJur1ZFUHTbFS2PROj8nQ43fkF2376ULH6zCl5TTqSOZUjmINAFNtTxf2 TtibZObPE8rCL0GYRsFP1C4cc//fC5U9RvWlZJpon6I8npMYZ+WDy9OHAElZWpSlENYV 4PJw38gn2Cic8RylGWjcllAXnyw1GnPPG71Rh3gw9ZNM+0Zns7AUMfaDxZNUJBdbJqDi nppfzulWH9TJ8nO5q9BZ8GRuy8JFCvUhLsRN8wVnpo3+6MVlAoW8ejYKeiNhoDmqdexk h7YA== X-Forwarded-Encrypted: i=1; AJvYcCWNOAUGLJAHdPGNbzqBPFI6+Vb5SlQ5w9YthDjKCLtmEWxXk6kig41OM8apMxGlvu5Am5T+jcr3bFqZYfEtkLZ/kvnsbM/h57nj5oA+ X-Gm-Message-State: AOJu0YxW9GVZdO99Lo7MDJbVf9Y+94soMqDTnfqeW09xhB06m/cG3hdR kF3bKvauG4Rv4tC+E8TXvN7sQfvzqGhzWR48UxHu5Kj9P+7Z5lUiSVBQRkYu0so= X-Google-Smtp-Source: AGHT+IErxfxA47pXwoEYQ8CiM9U6BwwC3KH57XSnU2/cEuLTmjjyeDVolv1IXzkvjLjThb1VlW+nwA== X-Received: by 2002:a17:906:b7d4:b0:a77:ba4d:a4ea with SMTP id a640c23a62f3a-a780d267c60mr193367066b.23.1720541010716; Tue, 09 Jul 2024 09:03:30 -0700 (PDT) Received: from antos (109-81-174-87.rct.o2.cz. [109.81.174.87]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-a780a73039fsm88007266b.96.2024.07.09.09.03.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Jul 2024 09:03:30 -0700 (PDT) From: Antonin Houska To: Alvaro Herrera , Pavel Stehule , Michael Paquier , PostgreSQL Hackers Subject: Re: why there is not VACUUM FULL CONCURRENTLY? In-reply-to: <82651.1720540558@antos> References: <202401311004.2yky72qydzxn@alvherre.pgsql> <82651.1720540558@antos> Comments: In-reply-to Antonin Houska message dated "Tue, 09 Jul 2024 17:55:58 +0200." X-Mailer: MH-E 8.6+git; nmh 1.8; GNU Emacs 28.2.50 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Date: Tue, 09 Jul 2024 18:03:29 +0200 Message-ID: <83298.1720541009@antos> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=-=-= Content-Type: text/plain Antonin Houska wrote: > Alvaro Herrera wrote: > > > > Is your plan to work on it soon or should I try to write a draft patch? (I > > > assume this is for PG >= 18.) > > > > I don't have plans for it, so if you have resources, please go for it. > > The first version is attached. The actual feature is in 0003. 0004 is probably > not necessary now, but I haven't realized until I coded it. The mailing list archive indicates something is wrong with the 0003 attachment. Sending it all again, as *.tar. -- Antonin Houska Web: https://www.cybertec-postgresql.com --=-=-= Content-Type: application/x-tar Content-Disposition: attachment; filename=vacuum_full_concurrently_v01.tar Content-Transfer-Encoding: base64 djAxLTAwMDEtQWRqdXN0LXNpZ25hdHVyZS1vZi1jbHVzdGVyX3JlbC1hbmQtaXRzLXN1YnJvdXRp bmVzLnBhdGNoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDY0NCAAMDAxNzUx IAAwMDE3NTEgADAwMDAwMDM1NjczIDE0NjQzMjU1NTI3IDAyNDIzMQAgMAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhcgAwMGFoAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAYWgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAwMDAgADAwMDAw MCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABG cm9tIGY0N2E5OGI5YjQ1ODBhNTgxYWFjZjczYzU1M2I4N2NhNmJmMTY1MzMgTW9uIFNlcCAxNyAw MDowMDowMCAyMDAxCkZyb206IEFudG9uaW4gSG91c2thIDxhaEBjeWJlcnRlYy5hdD4KRGF0ZTog VHVlLCA5IEp1bCAyMDI0IDE3OjQ1OjU5ICswMjAwClN1YmplY3Q6IFtQQVRDSCAxLzRdIEFkanVz dCBzaWduYXR1cmUgb2YgY2x1c3Rlcl9yZWwoKSBhbmQgaXRzIHN1YnJvdXRpbmVzLgoKU28gZmFy IGNsdXN0ZXJfcmVsKCkgcmVjZWl2ZWQgT0lEIG9mIHRoZSByZWxhdGlvbiBpdCBzaG91bGQgcHJv Y2VzcyBhbmQgaXQKcGVyZm9ybWVkIG9wZW5pbmcgYW5kIGxvY2tpbmcgb2YgdGhlIHJlbGF0aW9u IGl0c2VsZi4gWWV0IGNvcHlfdGFibGVfZGF0YSgpCnJlY2VpdmVkIHRoZSBPSUQgYXMgd2VsbCBh bmQgYWxzbyBoYWQgdG8gb3BlbiB0aGUgcmVsYXRpb24gaXRzZWxmLiBUaGlzIHBhdGNoCnRyaWVz IHRvIGVsaW1pbmF0ZSB0aGUgcmVwZWF0ZWQgb3BlbmluZyBhbmQgY2xvc2luZy4KCk9uZSBwYXJ0 aWN1bGFyIHJlYXNvbiBmb3IgdGhpcyBjaGFuZ2UgaXMgdGhhdCB0aGUgVkFDVVVNIEZVTEwgLyBD TFVTVEVSCmNvbW1hbmQgd2l0aCB0aGUgQ09OQ1VSUkVOVExZIG9wdGlvbiB3aWxsIG5lZWQgdG8g cmVsZWFzZSBhbGwgbG9ja3Mgb24gdGhlCnJlbGF0aW9uIChhbmQgcG9zc2libHkgb24gdGhlIGNs dXN0ZXJpbmcgaW5kZXgpIGF0IHNvbWUgcG9pbnQuIFNpbmNlIGl0IG1ha2VzCmxpdHRsZSBzZW5z ZSB0byBrZWVwIHJlbGF0aW9uIHJlZmVyZW5jZSB3L28gbG9jaywgdGhlIGNsdXN0ZXJfcmVsKCkg ZnVuY3Rpb24KYWxzbyBjbG9zZXMgaXRzIHJlZmVyZW5jZSB0byB0aGUgcmVsYXRpb24gKGFuZCBp dHMgaW5kZXgpLiBOZWl0aGVyIHRoZQpmdW5jdGlvbiBub3IgaXRzIHN1YnJvdXRpbmVzIG1heSBv cGVuIGV4dHJhIHJlZmVyZW5jZXMgYmVjYXVzZSB0aGVuIGl0J2QgYmUgYQpiaXQgaGFyZGVyIHRv IGNsb3NlIHRoZW0gYWxsLgotLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2NsdXN0ZXIuYyAgIHwg MTQ2ICsrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRz L21hdHZpZXcuYyAgIHwgICAyICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyB8 ICAgMiArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtLmMgICAgfCAgMTIgKy0tCiBzcmMv aW5jbHVkZS9jb21tYW5kcy9jbHVzdGVyLmggICB8ICAgNSArLQogNSBmaWxlcyBjaGFuZ2VkLCA5 OSBpbnNlcnRpb25zKCspLCA2OCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9jb21tYW5kcy9jbHVzdGVyLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jbHVzdGVyLmMKaW5k ZXggNzhmOTY3ODliMC4uMTk0ZDE0M2NmNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFu ZHMvY2x1c3Rlci5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NsdXN0ZXIuYwpAQCAtNzAs OCArNzAsOCBAQCB0eXBlZGVmIHN0cnVjdAogCiAKIHN0YXRpYyB2b2lkIGNsdXN0ZXJfbXVsdGlw bGVfcmVscyhMaXN0ICpydGNzLCBDbHVzdGVyUGFyYW1zICpwYXJhbXMpOwotc3RhdGljIHZvaWQg cmVidWlsZF9yZWxhdGlvbihSZWxhdGlvbiBPbGRIZWFwLCBPaWQgaW5kZXhPaWQsIGJvb2wgdmVy Ym9zZSk7Ci1zdGF0aWMgdm9pZCBjb3B5X3RhYmxlX2RhdGEoT2lkIE9JRE5ld0hlYXAsIE9pZCBP SURPbGRIZWFwLCBPaWQgT0lET2xkSW5kZXgsCitzdGF0aWMgdm9pZCByZWJ1aWxkX3JlbGF0aW9u KFJlbGF0aW9uIE9sZEhlYXAsIFJlbGF0aW9uIGluZGV4LCBib29sIHZlcmJvc2UpOworc3RhdGlj IHZvaWQgY29weV90YWJsZV9kYXRhKFJlbGF0aW9uIE5ld0hlYXAsIFJlbGF0aW9uIE9sZEhlYXAs IFJlbGF0aW9uIE9sZEluZGV4LAogCQkJCQkJCWJvb2wgdmVyYm9zZSwgYm9vbCAqcFN3YXBUb2Fz dEJ5Q29udGVudCwKIAkJCQkJCQlUcmFuc2FjdGlvbklkICpwRnJlZXplWGlkLCBNdWx0aVhhY3RJ ZCAqcEN1dG9mZk11bHRpKTsKIHN0YXRpYyBMaXN0ICpnZXRfdGFibGVzX3RvX2NsdXN0ZXIoTWVt b3J5Q29udGV4dCBjbHVzdGVyX2NvbnRleHQpOwpAQCAtMTk0LDExICsxOTQsMTEgQEAgY2x1c3Rl cihQYXJzZVN0YXRlICpwc3RhdGUsIENsdXN0ZXJTdG10ICpzdG10LCBib29sIGlzVG9wTGV2ZWwp CiAKIAkJaWYgKHJlbC0+cmRfcmVsLT5yZWxraW5kICE9IFJFTEtJTkRfUEFSVElUSU9ORURfVEFC TEUpCiAJCXsKLQkJCS8qIGNsb3NlIHJlbGF0aW9uLCBrZWVwIGxvY2sgdGlsbCBjb21taXQgKi8K LQkJCXRhYmxlX2Nsb3NlKHJlbCwgTm9Mb2NrKTsKLQotCQkJLyogRG8gdGhlIGpvYi4gKi8KLQkJ CWNsdXN0ZXJfcmVsKHRhYmxlT2lkLCBpbmRleE9pZCwgJnBhcmFtcyk7CisJCQkvKgorCQkJICog RG8gdGhlIGpvYi4gKFRoZSBmdW5jdGlvbiB3aWxsIGNsb3NlIHRoZSByZWxhdGlvbiwgbG9jayBp cyBrZXB0CisJCQkgKiB0aWxsIGNvbW1pdC4pCisJCQkgKi8KKwkJCWNsdXN0ZXJfcmVsKHJlbCwg aW5kZXhPaWQsICZwYXJhbXMpOwogCiAJCQlyZXR1cm47CiAJCX0KQEAgLTI3NSw2ICsyNzUsNyBA QCBjbHVzdGVyX211bHRpcGxlX3JlbHMoTGlzdCAqcnRjcywgQ2x1c3RlclBhcmFtcyAqcGFyYW1z KQogCWZvcmVhY2gobGMsIHJ0Y3MpCiAJewogCQlSZWxUb0NsdXN0ZXIgKnJ0YyA9IChSZWxUb0Ns dXN0ZXIgKikgbGZpcnN0KGxjKTsKKwkJUmVsYXRpb24JcmVsOwogCiAJCS8qIFN0YXJ0IGEgbmV3 IHRyYW5zYWN0aW9uIGZvciBlYWNoIHJlbGF0aW9uLiAqLwogCQlTdGFydFRyYW5zYWN0aW9uQ29t bWFuZCgpOwpAQCAtMjgyLDggKzI4MywxMyBAQCBjbHVzdGVyX211bHRpcGxlX3JlbHMoTGlzdCAq cnRjcywgQ2x1c3RlclBhcmFtcyAqcGFyYW1zKQogCQkvKiBmdW5jdGlvbnMgaW4gaW5kZXhlcyBt YXkgd2FudCBhIHNuYXBzaG90IHNldCAqLwogCQlQdXNoQWN0aXZlU25hcHNob3QoR2V0VHJhbnNh Y3Rpb25TbmFwc2hvdCgpKTsKIAotCQkvKiBEbyB0aGUgam9iLiAqLwotCQljbHVzdGVyX3JlbChy dGMtPnRhYmxlT2lkLCBydGMtPmluZGV4T2lkLCBwYXJhbXMpOworCQlyZWwgPSB0YWJsZV9vcGVu KHJ0Yy0+dGFibGVPaWQsIEFjY2Vzc0V4Y2x1c2l2ZUxvY2spOworCisJCS8qCisJCSAqIERvIHRo ZSBqb2IuIChUaGUgZnVuY3Rpb24gd2lsbCBjbG9zZSB0aGUgcmVsYXRpb24sIGxvY2sgaXMga2Vw dAorCQkgKiB0aWxsIGNvbW1pdC4pCisJCSAqLworCQljbHVzdGVyX3JlbChyZWwsIHJ0Yy0+aW5k ZXhPaWQsIHBhcmFtcyk7CiAKIAkJUG9wQWN0aXZlU25hcHNob3QoKTsKIAkJQ29tbWl0VHJhbnNh Y3Rpb25Db21tYW5kKCk7CkBAIC0zMDYsMTYgKzMxMiwxOSBAQCBjbHVzdGVyX211bHRpcGxlX3Jl bHMoTGlzdCAqcnRjcywgQ2x1c3RlclBhcmFtcyAqcGFyYW1zKQogICogSWYgaW5kZXhPaWQgaXMg SW52YWxpZE9pZCwgdGhlIHRhYmxlIHdpbGwgYmUgcmV3cml0dGVuIGluIHBoeXNpY2FsIG9yZGVy CiAgKiBpbnN0ZWFkIG9mIGluZGV4IG9yZGVyLiAgVGhpcyBpcyB0aGUgbmV3IGltcGxlbWVudGF0 aW9uIG9mIFZBQ1VVTSBGVUxMLAogICogYW5kIGVycm9yIG1lc3NhZ2VzIHNob3VsZCByZWZlciB0 byB0aGUgb3BlcmF0aW9uIGFzIFZBQ1VVTSBub3QgQ0xVU1RFUi4KKyAqCisgKiBXZSBleHBlY3Qg dGhhdCBPbGRIZWFwIGlzIGFscmVhZHkgbG9ja2VkIGluIEFjY2Vzc0V4Y2x1c2l2ZUxvY2sgbW9k ZS4KICAqLwogdm9pZAotY2x1c3Rlcl9yZWwoT2lkIHRhYmxlT2lkLCBPaWQgaW5kZXhPaWQsIENs dXN0ZXJQYXJhbXMgKnBhcmFtcykKK2NsdXN0ZXJfcmVsKFJlbGF0aW9uIE9sZEhlYXAsIE9pZCBp bmRleE9pZCwgQ2x1c3RlclBhcmFtcyAqcGFyYW1zKQogewotCVJlbGF0aW9uCU9sZEhlYXA7CisJ T2lkCQkJdGFibGVPaWQgPSBSZWxhdGlvbkdldFJlbGlkKE9sZEhlYXApOwogCU9pZAkJCXNhdmVf dXNlcmlkOwogCWludAkJCXNhdmVfc2VjX2NvbnRleHQ7CiAJaW50CQkJc2F2ZV9uZXN0bGV2ZWw7 CiAJYm9vbAkJdmVyYm9zZSA9ICgocGFyYW1zLT5vcHRpb25zICYgQ0xVT1BUX1ZFUkJPU0UpICE9 IDApOwogCWJvb2wJCXJlY2hlY2sgPSAoKHBhcmFtcy0+b3B0aW9ucyAmIENMVU9QVF9SRUNIRUNL KSAhPSAwKTsKKwlSZWxhdGlvbglpbmRleCA9IE5VTEw7CiAKIAkvKiBDaGVjayBmb3IgdXNlci1y ZXF1ZXN0ZWQgYWJvcnQuICovCiAJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKQEAgLTMyOCwyMSAr MzM3LDYgQEAgY2x1c3Rlcl9yZWwoT2lkIHRhYmxlT2lkLCBPaWQgaW5kZXhPaWQsIENsdXN0ZXJQ YXJhbXMgKnBhcmFtcykKIAkJcGdzdGF0X3Byb2dyZXNzX3VwZGF0ZV9wYXJhbShQUk9HUkVTU19D TFVTVEVSX0NPTU1BTkQsCiAJCQkJCQkJCQkgUFJPR1JFU1NfQ0xVU1RFUl9DT01NQU5EX1ZBQ1VV TV9GVUxMKTsKIAotCS8qCi0JICogV2UgZ3JhYiBleGNsdXNpdmUgYWNjZXNzIHRvIHRoZSB0YXJn ZXQgcmVsIGFuZCBpbmRleCBmb3IgdGhlIGR1cmF0aW9uCi0JICogb2YgdGhlIHRyYW5zYWN0aW9u LiAgKFRoaXMgaXMgcmVkdW5kYW50IGZvciB0aGUgc2luZ2xlLXRyYW5zYWN0aW9uCi0JICogY2Fz ZSwgc2luY2UgY2x1c3RlcigpIGFscmVhZHkgZGlkIGl0LikgIFRoZSBpbmRleCBsb2NrIGlzIHRh a2VuIGluc2lkZQotCSAqIGNoZWNrX2luZGV4X2lzX2NsdXN0ZXJhYmxlLgotCSAqLwotCU9sZEhl YXAgPSB0cnlfcmVsYXRpb25fb3Blbih0YWJsZU9pZCwgQWNjZXNzRXhjbHVzaXZlTG9jayk7Ci0K LQkvKiBJZiB0aGUgdGFibGUgaGFzIGdvbmUgYXdheSwgd2UgY2FuIHNraXAgcHJvY2Vzc2luZyBp dCAqLwotCWlmICghT2xkSGVhcCkKLQl7Ci0JCXBnc3RhdF9wcm9ncmVzc19lbmRfY29tbWFuZCgp OwotCQlyZXR1cm47Ci0JfQotCiAJLyoKIAkgKiBTd2l0Y2ggdG8gdGhlIHRhYmxlIG93bmVyJ3Mg dXNlcmlkLCBzbyB0aGF0IGFueSBpbmRleCBmdW5jdGlvbnMgYXJlIHJ1bgogCSAqIGFzIHRoYXQg dXNlci4gIEFsc28gbG9jayBkb3duIHNlY3VyaXR5LXJlc3RyaWN0ZWQgb3BlcmF0aW9ucyBhbmQK QEAgLTQ0NSw3ICs0MzksMTEgQEAgY2x1c3Rlcl9yZWwoT2lkIHRhYmxlT2lkLCBPaWQgaW5kZXhP aWQsIENsdXN0ZXJQYXJhbXMgKnBhcmFtcykKIAogCS8qIENoZWNrIGhlYXAgYW5kIGluZGV4IGFy ZSB2YWxpZCB0byBjbHVzdGVyIG9uICovCiAJaWYgKE9pZElzVmFsaWQoaW5kZXhPaWQpKQorCXsK IAkJY2hlY2tfaW5kZXhfaXNfY2x1c3RlcmFibGUoT2xkSGVhcCwgaW5kZXhPaWQsIEFjY2Vzc0V4 Y2x1c2l2ZUxvY2spOworCQkvKiBPcGVuIHRoZSBpbmRleCAoSXQgc2hvdWxkIGFscmVhZHkgYmUg bG9ja2VkLikgKi8KKwkJaW5kZXggPSBpbmRleF9vcGVuKGluZGV4T2lkLCBOb0xvY2spOworCX0K IAogCS8qCiAJICogUXVpZXRseSBpZ25vcmUgdGhlIHJlcXVlc3QgaWYgdGhpcyBpcyBhIG1hdGVy aWFsaXplZCB2aWV3IHdoaWNoIGhhcyBub3QKQEAgLTQ3NCw5ICs0NzIsMTIgQEAgY2x1c3Rlcl9y ZWwoT2lkIHRhYmxlT2lkLCBPaWQgaW5kZXhPaWQsIENsdXN0ZXJQYXJhbXMgKnBhcmFtcykKIAlU cmFuc2ZlclByZWRpY2F0ZUxvY2tzVG9IZWFwUmVsYXRpb24oT2xkSGVhcCk7CiAKIAkvKiByZWJ1 aWxkX3JlbGF0aW9uIGRvZXMgYWxsIHRoZSBkaXJ0eSB3b3JrICovCi0JcmVidWlsZF9yZWxhdGlv bihPbGRIZWFwLCBpbmRleE9pZCwgdmVyYm9zZSk7CisJcmVidWlsZF9yZWxhdGlvbihPbGRIZWFw LCBpbmRleCwgdmVyYm9zZSk7CiAKLQkvKiBOQjogcmVidWlsZF9yZWxhdGlvbiBkb2VzIHRhYmxl X2Nsb3NlKCkgb24gT2xkSGVhcCAqLworCS8qCisJICogTkI6IHJlYnVpbGRfcmVsYXRpb24gZG9l cyB0YWJsZV9jbG9zZSgpIG9uIE9sZEhlYXAsIGFuZCBhbHNvIG9uIGluZGV4LAorCSAqIGlmIHRo ZSBwb2ludGVyIGlzIHZhbGlkLgorCSAqLwogCiBvdXQ6CiAJLyogUm9sbCBiYWNrIGFueSBHVUMg Y2hhbmdlcyBleGVjdXRlZCBieSBpbmRleCBmdW5jdGlvbnMgKi8KQEAgLTYyNSwyMiArNjI2LDI3 IEBAIG1hcmtfaW5kZXhfY2x1c3RlcmVkKFJlbGF0aW9uIHJlbCwgT2lkIGluZGV4T2lkLCBib29s IGlzX2ludGVybmFsKQogICogcmVidWlsZF9yZWxhdGlvbjogcmVidWlsZCBhbiBleGlzdGluZyBy ZWxhdGlvbiBpbiBpbmRleCBvciBwaHlzaWNhbCBvcmRlcgogICoKICAqIE9sZEhlYXA6IHRhYmxl IHRvIHJlYnVpbGQgLS0tIG11c3QgYmUgb3BlbmVkIGFuZCBleGNsdXNpdmUtbG9ja2VkIQotICog aW5kZXhPaWQ6IGluZGV4IHRvIGNsdXN0ZXIgYnksIG9yIEludmFsaWRPaWQgdG8gcmV3cml0ZSBp biBwaHlzaWNhbCBvcmRlci4KKyAqIGluZGV4OiBpbmRleCB0byBjbHVzdGVyIGJ5LCBvciBOVUxM IHRvIHJld3JpdGUgaW4gcGh5c2ljYWwgb3JkZXIuIE11c3QgYmUKKyAqIG9wZW5lZCBhbmQgbG9j a2VkLgogICoKLSAqIE5COiB0aGlzIHJvdXRpbmUgY2xvc2VzIE9sZEhlYXAgYXQgdGhlIHJpZ2h0 IHRpbWU7IGNhbGxlciBzaG91bGQgbm90LgorICogT24gZXhpdCwgdGhlIGhlYXAgKGFuZCBhbHNv IHRoZSBpbmRleCwgaWYgb25lIHdhcyBwYXNzZWQpIGFyZSBjbG9zZWQsIGJ1dAorICogc3RpbGwg bG9ja2VkIHdpdGggQWNjZXNzRXhjbHVzaXZlTG9jay4KICAqLwogc3RhdGljIHZvaWQKLXJlYnVp bGRfcmVsYXRpb24oUmVsYXRpb24gT2xkSGVhcCwgT2lkIGluZGV4T2lkLCBib29sIHZlcmJvc2Up CityZWJ1aWxkX3JlbGF0aW9uKFJlbGF0aW9uIE9sZEhlYXAsIFJlbGF0aW9uIGluZGV4LCBib29s IHZlcmJvc2UpCiB7CiAJT2lkCQkJdGFibGVPaWQgPSBSZWxhdGlvbkdldFJlbGlkKE9sZEhlYXAp OworCU9pZAkJCWluZGV4T2lkID0gaW5kZXggPyBSZWxhdGlvbkdldFJlbGlkKGluZGV4KSA6IElu dmFsaWRPaWQ7CiAJT2lkCQkJYWNjZXNzTWV0aG9kID0gT2xkSGVhcC0+cmRfcmVsLT5yZWxhbTsK IAlPaWQJCQl0YWJsZVNwYWNlID0gT2xkSGVhcC0+cmRfcmVsLT5yZWx0YWJsZXNwYWNlOwogCU9p ZAkJCU9JRE5ld0hlYXA7CisJUmVsYXRpb24JTmV3SGVhcDsKIAljaGFyCQlyZWxwZXJzaXN0ZW5j ZTsKIAlib29sCQlpc19zeXN0ZW1fY2F0YWxvZzsKIAlib29sCQlzd2FwX3RvYXN0X2J5X2NvbnRl bnQ7CiAJVHJhbnNhY3Rpb25JZCBmcm96ZW5YaWQ7CiAJTXVsdGlYYWN0SWQgY3V0b2ZmTXVsdGk7 CisJTE9DS01PREUJbG1vZGVfbmV3OwogCiAJaWYgKE9pZElzVmFsaWQoaW5kZXhPaWQpKQogCQkv KiBNYXJrIHRoZSBjb3JyZWN0IGluZGV4IGFzIGNsdXN0ZXJlZCAqLwpAQCAtNjUwLDE5ICs2NTYs NDAgQEAgcmVidWlsZF9yZWxhdGlvbihSZWxhdGlvbiBPbGRIZWFwLCBPaWQgaW5kZXhPaWQsIGJv b2wgdmVyYm9zZSkKIAlyZWxwZXJzaXN0ZW5jZSA9IE9sZEhlYXAtPnJkX3JlbC0+cmVscGVyc2lz dGVuY2U7CiAJaXNfc3lzdGVtX2NhdGFsb2cgPSBJc1N5c3RlbVJlbGF0aW9uKE9sZEhlYXApOwog Ci0JLyogQ2xvc2UgcmVsY2FjaGUgZW50cnksIGJ1dCBrZWVwIGxvY2sgdW50aWwgdHJhbnNhY3Rp b24gY29tbWl0ICovCi0JdGFibGVfY2xvc2UoT2xkSGVhcCwgTm9Mb2NrKTsKLQotCS8qIENyZWF0 ZSB0aGUgdHJhbnNpZW50IHRhYmxlIHRoYXQgd2lsbCByZWNlaXZlIHRoZSByZS1vcmRlcmVkIGRh dGEgKi8KKwkvKgorCSAqIENyZWF0ZSB0aGUgdHJhbnNpZW50IHRhYmxlIHRoYXQgd2lsbCByZWNl aXZlIHRoZSByZS1vcmRlcmVkIGRhdGEuCisJICoKKwkgKiBOb0xvY2sgZm9yIHRoZSBvbGQgaGVh cCBiZWNhdXNlIHdlIGFscmVhZHkgaGF2ZSBpdCBsb2NrZWQgYW5kIHdhbnQgdG8KKwkgKiBrZWVw IHVubG9ja2luZyBzdHJhaWdodGZvcndhcmQuCisJICovCisJbG1vZGVfbmV3ID0gQWNjZXNzRXhj bHVzaXZlTG9jazsKIAlPSUROZXdIZWFwID0gbWFrZV9uZXdfaGVhcCh0YWJsZU9pZCwgdGFibGVT cGFjZSwKIAkJCQkJCQkgICBhY2Nlc3NNZXRob2QsCiAJCQkJCQkJICAgcmVscGVyc2lzdGVuY2Us Ci0JCQkJCQkJICAgQWNjZXNzRXhjbHVzaXZlTG9jayk7CisJCQkJCQkJICAgTm9Mb2NrLCAmbG1v ZGVfbmV3KTsKKwlBc3NlcnQobG1vZGVfbmV3ID09IEFjY2Vzc0V4Y2x1c2l2ZUxvY2sgfHwgbG1v ZGVfbmV3ID09IE5vTG9jayk7CisJLyogTG9jayBpZmYgbm90IGRvbmUgYWJvdmUuICovCisJTmV3 SGVhcCA9IHRhYmxlX29wZW4oT0lETmV3SGVhcCwgbG1vZGVfbmV3ID09IE5vTG9jayA/CisJCQkJ CQkgQWNjZXNzRXhjbHVzaXZlTG9jayA6IE5vTG9jayk7CiAKIAkvKiBDb3B5IHRoZSBoZWFwIGRh dGEgaW50byB0aGUgbmV3IHRhYmxlIGluIHRoZSBkZXNpcmVkIG9yZGVyICovCi0JY29weV90YWJs ZV9kYXRhKE9JRE5ld0hlYXAsIHRhYmxlT2lkLCBpbmRleE9pZCwgdmVyYm9zZSwKKwljb3B5X3Rh YmxlX2RhdGEoTmV3SGVhcCwgT2xkSGVhcCwgaW5kZXgsIHZlcmJvc2UsCiAJCQkJCSZzd2FwX3Rv YXN0X2J5X2NvbnRlbnQsICZmcm96ZW5YaWQsICZjdXRvZmZNdWx0aSk7CiAKKworCS8qIENsb3Nl IHJlbGNhY2hlIGVudHJpZXMsIGJ1dCBrZWVwIGxvY2sgdW50aWwgdHJhbnNhY3Rpb24gY29tbWl0 ICovCisJdGFibGVfY2xvc2UoT2xkSGVhcCwgTm9Mb2NrKTsKKwlpZiAoaW5kZXgpCisJCWluZGV4 X2Nsb3NlKGluZGV4LCBOb0xvY2spOworCisJLyoKKwkgKiBDbG9zZSB0aGUgbmV3IHJlbGF0aW9u IHNvIGl0IGNhbiBiZSBkcm9wcGVkIGFzIHNvb24gYXMgdGhlIHN0b3JhZ2UgaXMKKwkgKiBzd2Fw cGVkLiBUaGUgcmVsYXRpb24gaXMgbm90IHZpc2libGUgdG8gb3RoZXJzLCBzbyB3ZSBjb3VsZCB1 bmxvY2sgaXQKKwkgKiBjb21wbGV0ZWx5LCBidXQgaXQncyBzaW1wbGVyIHRvIHBhc3MgTm9Mb2Nr IHRoYW4gdG8gdHJhY2sgYWxsIHRoZSBsb2NrcworCSAqIGFjcXVpcmVkIHNvIGZhci4KKwkgKi8K Kwl0YWJsZV9jbG9zZShOZXdIZWFwLCBOb0xvY2spOworCiAJLyoKIAkgKiBTd2FwIHRoZSBwaHlz aWNhbCBmaWxlcyBvZiB0aGUgdGFyZ2V0IGFuZCB0cmFuc2llbnQgdGFibGVzLCB0aGVuCiAJICog cmVidWlsZCB0aGUgdGFyZ2V0J3MgaW5kZXhlcyBhbmQgdGhyb3cgYXdheSB0aGUgdHJhbnNpZW50 IHRhYmxlLgpAQCAtNjgzLDEwICs3MTAsMTUgQEAgcmVidWlsZF9yZWxhdGlvbihSZWxhdGlvbiBP bGRIZWFwLCBPaWQgaW5kZXhPaWQsIGJvb2wgdmVyYm9zZSkKICAqCiAgKiBBZnRlciB0aGlzLCB0 aGUgY2FsbGVyIHNob3VsZCBsb2FkIHRoZSBuZXcgaGVhcCB3aXRoIHRyYW5zZmVycmVkL21vZGlm aWVkCiAgKiBkYXRhLCB0aGVuIGNhbGwgZmluaXNoX2hlYXBfc3dhcCB0byBjb21wbGV0ZSB0aGUg b3BlcmF0aW9uLgorICoKKyAqIElmIGEgc3BlY2lmaWMgbG9jayBtb2RlIGlzIG5lZWRlZCBmb3Ig dGhlIG5ldyByZWxhdGlvbiwgcGFzcyBpdCB2aWEgdGhlCisgKiBpbi9vdXQgcGFyYW1ldGVyIGxv Y2ttb2RlX25ld19wLiBPbiBleGl0LCB0aGUgb3V0cHV0IHZhbHVlIHRlbGxzIHdoZXRoZXIKKyAq IHRoZSBsb2NrIHdhcyBhY3R1YWxseSBhY3F1aXJlZC4KICAqLwogT2lkCiBtYWtlX25ld19oZWFw KE9pZCBPSURPbGRIZWFwLCBPaWQgTmV3VGFibGVTcGFjZSwgT2lkIE5ld0FjY2Vzc01ldGhvZCwK LQkJCSAgY2hhciByZWxwZXJzaXN0ZW5jZSwgTE9DS01PREUgbG9ja21vZGUpCisJCQkgIGNoYXIg cmVscGVyc2lzdGVuY2UsIExPQ0tNT0RFIGxvY2ttb2RlX29sZCwKKwkJCSAgTE9DS01PREUgKmxv Y2ttb2RlX25ld19wKQogewogCVR1cGxlRGVzYwlPbGRIZWFwRGVzYzsKIAljaGFyCQlOZXdIZWFw TmFtZVtOQU1FREFUQUxFTl07CkBAIC02OTcsOCArNzI5LDE3IEBAIG1ha2VfbmV3X2hlYXAoT2lk IE9JRE9sZEhlYXAsIE9pZCBOZXdUYWJsZVNwYWNlLCBPaWQgTmV3QWNjZXNzTWV0aG9kLAogCURh dHVtCQlyZWxvcHRpb25zOwogCWJvb2wJCWlzTnVsbDsKIAlPaWQJCQluYW1lc3BhY2VpZDsKKwlM T0NLTU9ERQlsb2NrbW9kZV9uZXc7CiAKLQlPbGRIZWFwID0gdGFibGVfb3BlbihPSURPbGRIZWFw LCBsb2NrbW9kZSk7CisJaWYgKGxvY2ttb2RlX25ld19wKQorCXsKKwkJbG9ja21vZGVfbmV3ID0g KmxvY2ttb2RlX25ld19wOworCQkqbG9ja21vZGVfbmV3X3AgPSBOb0xvY2s7CisJfQorCWVsc2UK KwkJbG9ja21vZGVfbmV3ID0gbG9ja21vZGVfb2xkOworCisJT2xkSGVhcCA9IHRhYmxlX29wZW4o T0lET2xkSGVhcCwgbG9ja21vZGVfb2xkKTsKIAlPbGRIZWFwRGVzYyA9IFJlbGF0aW9uR2V0RGVz Y3IoT2xkSGVhcCk7CiAKIAkvKgpAQCAtNzkyLDcgKzgzMyw5IEBAIG1ha2VfbmV3X2hlYXAoT2lk IE9JRE9sZEhlYXAsIE9pZCBOZXdUYWJsZVNwYWNlLCBPaWQgTmV3QWNjZXNzTWV0aG9kLAogCQlp ZiAoaXNOdWxsKQogCQkJcmVsb3B0aW9ucyA9IChEYXR1bSkgMDsKIAotCQlOZXdIZWFwQ3JlYXRl VG9hc3RUYWJsZShPSUROZXdIZWFwLCByZWxvcHRpb25zLCBsb2NrbW9kZSwgdG9hc3RpZCk7CisJ CU5ld0hlYXBDcmVhdGVUb2FzdFRhYmxlKE9JRE5ld0hlYXAsIHJlbG9wdGlvbnMsIGxvY2ttb2Rl X25ldywgdG9hc3RpZCk7CisJCWlmIChsb2NrbW9kZV9uZXdfcCkKKwkJCSpsb2NrbW9kZV9uZXdf cCA9IGxvY2ttb2RlX25ldzsKIAogCQlSZWxlYXNlU3lzQ2FjaGUodHVwbGUpOwogCX0KQEAgLTgx MSwxMyArODU0LDEzIEBAIG1ha2VfbmV3X2hlYXAoT2lkIE9JRE9sZEhlYXAsIE9pZCBOZXdUYWJs ZVNwYWNlLCBPaWQgTmV3QWNjZXNzTWV0aG9kLAogICogKnBDdXRvZmZNdWx0aSByZWNlaXZlcyB0 aGUgTXVsdGlYYWN0SWQgdXNlZCBhcyBhIGN1dG9mZiBwb2ludC4KICAqLwogc3RhdGljIHZvaWQK LWNvcHlfdGFibGVfZGF0YShPaWQgT0lETmV3SGVhcCwgT2lkIE9JRE9sZEhlYXAsIE9pZCBPSURP bGRJbmRleCwgYm9vbCB2ZXJib3NlLAorY29weV90YWJsZV9kYXRhKFJlbGF0aW9uIE5ld0hlYXAs IFJlbGF0aW9uIE9sZEhlYXAsIFJlbGF0aW9uIE9sZEluZGV4LCBib29sIHZlcmJvc2UsCiAJCQkJ Ym9vbCAqcFN3YXBUb2FzdEJ5Q29udGVudCwgVHJhbnNhY3Rpb25JZCAqcEZyZWV6ZVhpZCwKIAkJ CQlNdWx0aVhhY3RJZCAqcEN1dG9mZk11bHRpKQogewotCVJlbGF0aW9uCU5ld0hlYXAsCi0JCQkJ T2xkSGVhcCwKLQkJCQlPbGRJbmRleDsKKwlPaWQJCU9JRE9sZEhlYXAgPSBSZWxhdGlvbkdldFJl bGlkKE9sZEhlYXApOworCU9pZAkJT0lET2xkSW5kZXggPSBPbGRJbmRleCA/IFJlbGF0aW9uR2V0 UmVsaWQoT2xkSW5kZXgpIDogSW52YWxpZE9pZDsKKwlPaWQJCU9JRE5ld0hlYXAgPSBSZWxhdGlv bkdldFJlbGlkKE5ld0hlYXApOwogCVJlbGF0aW9uCXJlbFJlbGF0aW9uOwogCUhlYXBUdXBsZQly ZWx0dXA7CiAJRm9ybV9wZ19jbGFzcyByZWxmb3JtOwpAQCAtODM2LDE2ICs4NzksNiBAQCBjb3B5 X3RhYmxlX2RhdGEoT2lkIE9JRE5ld0hlYXAsIE9pZCBPSURPbGRIZWFwLCBPaWQgT0lET2xkSW5k ZXgsIGJvb2wgdmVyYm9zZSwKIAogCXBnX3J1c2FnZV9pbml0KCZydTApOwogCi0JLyoKLQkgKiBP cGVuIHRoZSByZWxhdGlvbnMgd2UgbmVlZC4KLQkgKi8KLQlOZXdIZWFwID0gdGFibGVfb3BlbihP SUROZXdIZWFwLCBBY2Nlc3NFeGNsdXNpdmVMb2NrKTsKLQlPbGRIZWFwID0gdGFibGVfb3BlbihP SURPbGRIZWFwLCBBY2Nlc3NFeGNsdXNpdmVMb2NrKTsKLQlpZiAoT2lkSXNWYWxpZChPSURPbGRJ bmRleCkpCi0JCU9sZEluZGV4ID0gaW5kZXhfb3BlbihPSURPbGRJbmRleCwgQWNjZXNzRXhjbHVz aXZlTG9jayk7Ci0JZWxzZQotCQlPbGRJbmRleCA9IE5VTEw7Ci0KIAkvKiBTdG9yZSBhIGNvcHkg b2YgdGhlIG5hbWVzcGFjZSBuYW1lIGZvciBsb2dnaW5nIHB1cnBvc2VzICovCiAJbnNwbmFtZSA9 IGdldF9uYW1lc3BhY2VfbmFtZShSZWxhdGlvbkdldE5hbWVzcGFjZShPbGRIZWFwKSk7CiAKQEAg LTEwMDEsMTEgKzEwMzQsNiBAQCBjb3B5X3RhYmxlX2RhdGEoT2lkIE9JRE5ld0hlYXAsIE9pZCBP SURPbGRIZWFwLCBPaWQgT0lET2xkSW5kZXgsIGJvb2wgdmVyYm9zZSwKIAkJCQkJICAgdHVwc19y ZWNlbnRseV9kZWFkLAogCQkJCQkgICBwZ19ydXNhZ2Vfc2hvdygmcnUwKSkpKTsKIAotCWlmIChP bGRJbmRleCAhPSBOVUxMKQotCQlpbmRleF9jbG9zZShPbGRJbmRleCwgTm9Mb2NrKTsKLQl0YWJs ZV9jbG9zZShPbGRIZWFwLCBOb0xvY2spOwotCXRhYmxlX2Nsb3NlKE5ld0hlYXAsIE5vTG9jayk7 Ci0KIAkvKiBVcGRhdGUgcGdfY2xhc3MgdG8gcmVmbGVjdCB0aGUgY29ycmVjdCB2YWx1ZXMgb2Yg cGFnZXMgYW5kIHR1cGxlcy4gKi8KIAlyZWxSZWxhdGlvbiA9IHRhYmxlX29wZW4oUmVsYXRpb25S ZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv Y29tbWFuZHMvbWF0dmlldy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvbWF0dmlldy5jCmluZGV4 IGVhMDVkNGIyMjQuLjQ4OGNhOTUwZDkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRz L21hdHZpZXcuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9tYXR2aWV3LmMKQEAgLTI5Niw3 ICsyOTYsNyBAQCBFeGVjUmVmcmVzaE1hdFZpZXcoUmVmcmVzaE1hdFZpZXdTdG10ICpzdG10LCBj b25zdCBjaGFyICpxdWVyeVN0cmluZywKIAkgKi8KIAlPSUROZXdIZWFwID0gbWFrZV9uZXdfaGVh cChtYXR2aWV3T2lkLCB0YWJsZVNwYWNlLAogCQkJCQkJCSAgIG1hdHZpZXdSZWwtPnJkX3JlbC0+ cmVsYW0sCi0JCQkJCQkJICAgcmVscGVyc2lzdGVuY2UsIEV4Y2x1c2l2ZUxvY2spOworCQkJCQkJ CSAgIHJlbHBlcnNpc3RlbmNlLCBFeGNsdXNpdmVMb2NrLCBOVUxMKTsKIAlMb2NrUmVsYXRpb25P aWQoT0lETmV3SGVhcCwgQWNjZXNzRXhjbHVzaXZlTG9jayk7CiAJZGVzdCA9IENyZWF0ZVRyYW5z aWVudFJlbERlc3RSZWNlaXZlcihPSUROZXdIZWFwKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvdGFibGVjbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMu YwppbmRleCBkYmZlMGQ2YjFjLi41ZDYxNTFkYWQxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9j b21tYW5kcy90YWJsZWNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMu YwpAQCAtNTg0MSw3ICs1ODQxLDcgQEAgQVRSZXdyaXRlVGFibGVzKEFsdGVyVGFibGVTdG10ICpw YXJzZXRyZWUsIExpc3QgKip3cXVldWUsIExPQ0tNT0RFIGxvY2ttb2RlLAogCQkJICogdW5sb2dn ZWQgYW55d2F5LgogCQkJICovCiAJCQlPSUROZXdIZWFwID0gbWFrZV9uZXdfaGVhcCh0YWItPnJl bGlkLCBOZXdUYWJsZVNwYWNlLCBOZXdBY2Nlc3NNZXRob2QsCi0JCQkJCQkJCQkgICBwZXJzaXN0 ZW5jZSwgbG9ja21vZGUpOworCQkJCQkJCQkJICAgcGVyc2lzdGVuY2UsIGxvY2ttb2RlLCBOVUxM KTsKIAogCQkJLyoKIAkJCSAqIENvcHkgdGhlIGhlYXAgZGF0YSBpbnRvIHRoZSBuZXcgdGFibGUg d2l0aCB0aGUgZGVzaXJlZApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVt LmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW0uYwppbmRleCA0OGY4ZWFiMjAyLi4wYmQw MDBhY2M1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW0uYworKysgYi9z cmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW0uYwpAQCAtMjE5NiwxNSArMjE5NiwxNyBAQCB2YWN1 dW1fcmVsKE9pZCByZWxpZCwgUmFuZ2VWYXIgKnJlbGF0aW9uLCBWYWN1dW1QYXJhbXMgKnBhcmFt cywKIAkJewogCQkJQ2x1c3RlclBhcmFtcyBjbHVzdGVyX3BhcmFtcyA9IHswfTsKIAotCQkJLyog Y2xvc2UgcmVsYXRpb24gYmVmb3JlIHZhY3V1bWluZywgYnV0IGhvbGQgbG9jayB1bnRpbCBjb21t aXQgKi8KLQkJCXJlbGF0aW9uX2Nsb3NlKHJlbCwgTm9Mb2NrKTsKLQkJCXJlbCA9IE5VTEw7Ci0K IAkJCWlmICgocGFyYW1zLT5vcHRpb25zICYgVkFDT1BUX1ZFUkJPU0UpICE9IDApCiAJCQkJY2x1 c3Rlcl9wYXJhbXMub3B0aW9ucyB8PSBDTFVPUFRfVkVSQk9TRTsKIAogCQkJLyogVkFDVVVNIEZV TEwgaXMgbm93IGEgdmFyaWFudCBvZiBDTFVTVEVSOyBzZWUgY2x1c3Rlci5jICovCi0JCQljbHVz dGVyX3JlbChyZWxpZCwgSW52YWxpZE9pZCwgJmNsdXN0ZXJfcGFyYW1zKTsKKwkJCWNsdXN0ZXJf cmVsKHJlbCwgSW52YWxpZE9pZCwgJmNsdXN0ZXJfcGFyYW1zKTsKKworCQkJLyoKKwkJCSAqIGNs dXN0ZXJfcmVsKCkgc2hvdWxkIGhhdmUgY2xvc2VkIHRoZSByZWxhdGlvbiwgbG9jayBpcyBrZXB0 CisJCQkgKiB0aWxsIGNvbW1pdC4KKwkJCSAqLworCQkJcmVsID0gTlVMTDsKIAkJfQogCQllbHNl CiAJCQl0YWJsZV9yZWxhdGlvbl92YWN1dW0ocmVsLCBwYXJhbXMsIGJzdHJhdGVneSk7CmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9jbHVzdGVyLmggYi9zcmMvaW5jbHVkZS9jb21t YW5kcy9jbHVzdGVyLmgKaW5kZXggNGUzMjM4MDQxNy4uNzQ5Mjc5NmVhMiAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvY29tbWFuZHMvY2x1c3Rlci5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1hbmRz L2NsdXN0ZXIuaApAQCAtMzIsMTMgKzMyLDE0IEBAIHR5cGVkZWYgc3RydWN0IENsdXN0ZXJQYXJh bXMKIH0gQ2x1c3RlclBhcmFtczsKIAogZXh0ZXJuIHZvaWQgY2x1c3RlcihQYXJzZVN0YXRlICpw c3RhdGUsIENsdXN0ZXJTdG10ICpzdG10LCBib29sIGlzVG9wTGV2ZWwpOwotZXh0ZXJuIHZvaWQg Y2x1c3Rlcl9yZWwoT2lkIHRhYmxlT2lkLCBPaWQgaW5kZXhPaWQsIENsdXN0ZXJQYXJhbXMgKnBh cmFtcyk7CitleHRlcm4gdm9pZCBjbHVzdGVyX3JlbChSZWxhdGlvbiBPbGRIZWFwLCBPaWQgaW5k ZXhPaWQsIENsdXN0ZXJQYXJhbXMgKnBhcmFtcyk7CiBleHRlcm4gdm9pZCBjaGVja19pbmRleF9p c19jbHVzdGVyYWJsZShSZWxhdGlvbiBPbGRIZWFwLCBPaWQgaW5kZXhPaWQsCiAJCQkJCQkJCQkg ICBMT0NLTU9ERSBsb2NrbW9kZSk7CiBleHRlcm4gdm9pZCBtYXJrX2luZGV4X2NsdXN0ZXJlZChS ZWxhdGlvbiByZWwsIE9pZCBpbmRleE9pZCwgYm9vbCBpc19pbnRlcm5hbCk7CiAKIGV4dGVybiBP aWQJbWFrZV9uZXdfaGVhcChPaWQgT0lET2xkSGVhcCwgT2lkIE5ld1RhYmxlU3BhY2UsIE9pZCBO ZXdBY2Nlc3NNZXRob2QsCi0JCQkJCQkgIGNoYXIgcmVscGVyc2lzdGVuY2UsIExPQ0tNT0RFIGxv Y2ttb2RlKTsKKwkJCQkJCSAgY2hhciByZWxwZXJzaXN0ZW5jZSwgTE9DS01PREUgbG9ja21vZGVf b2xkLAorCQkJCQkJICBMT0NLTU9ERSAqbG9ja21vZGVfbmV3X3ApOwogZXh0ZXJuIHZvaWQgZmlu aXNoX2hlYXBfc3dhcChPaWQgT0lET2xkSGVhcCwgT2lkIE9JRE5ld0hlYXAsCiAJCQkJCQkJIGJv b2wgaXNfc3lzdGVtX2NhdGFsb2csCiAJCQkJCQkJIGJvb2wgc3dhcF90b2FzdF9ieV9jb250ZW50 LAotLSAKMi40NS4yCgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2MDEtMDAwMi1Nb3ZlLXByb2dyZXNzLXJlbGF0ZWQt ZmllbGRzLWZyb20tUGdCYWNrZW5kU3RhdHVzLXRvLnBhdGNoAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAMDAwNjQ0IAAwMDE3NTEgADAwMTc1MSAAMDAwMDAwMTQ1NzIgMTQ2NDMyNTU1 MjcgMDI0MTY3ACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVz dGFyADAwYWgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABhaAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAADAwMDAwMCAAMDAwMDAwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEZyb20gY2RmNjdkOTMzYTU2MzIzYzBlNWNhNzc0OTVm NjAwMTdkMzk4YmJkNSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKRnJvbTogQW50b25pbiBIb3Vz a2EgPGFoQGN5YmVydGVjLmF0PgpEYXRlOiBUdWUsIDkgSnVsIDIwMjQgMTc6NDU6NTkgKzAyMDAK U3ViamVjdDogW1BBVENIIDIvNF0gTW92ZSBwcm9ncmVzcyByZWxhdGVkIGZpZWxkcyBmcm9tIFBn QmFja2VuZFN0YXR1cyB0bwogUGdCYWNrZW5kUHJvZ3Jlc3MuCgpWQUNVVU0gRlVMTCAvIENMVVNU RVIgQ09OQ1VSUkVOVExZIHdpbGwgbmVlZCB0byBzYXZlIGFuZCByZXN0b3JlIHRoZXNlIGZpZWxk cwphdCBzb21lIHBvaW50LgotLS0KIHNyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L2JhY2tlbmRf cHJvZ3Jlc3MuYyB8IDE4ICsrKysrKysrKy0tLS0tLS0tLQogc3JjL2JhY2tlbmQvdXRpbHMvYWN0 aXZpdHkvYmFja2VuZF9zdGF0dXMuYyAgIHwgIDQgKystLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L3Bnc3RhdGZ1bmNzLmMgICAgICAgICAgIHwgIDYgKysrLS0tCiBzcmMvaW5jbHVkZS91dGlscy9i YWNrZW5kX3Byb2dyZXNzLmggICAgICAgICAgfCAxNCArKysrKysrKysrKysrKwogc3JjL2luY2x1 ZGUvdXRpbHMvYmFja2VuZF9zdGF0dXMuaCAgICAgICAgICAgIHwgMTQgKystLS0tLS0tLS0tLS0K IDUgZmlsZXMgY2hhbmdlZCwgMzAgaW5zZXJ0aW9ucygrKSwgMjYgZGVsZXRpb25zKC0pCgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvYmFja2VuZF9wcm9ncmVzcy5jIGIv c3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvYmFja2VuZF9wcm9ncmVzcy5jCmluZGV4IGJmYjli NzcwNGIuLmU3YzhiZmJhOTQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5 L2JhY2tlbmRfcHJvZ3Jlc3MuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS9iYWNr ZW5kX3Byb2dyZXNzLmMKQEAgLTMzLDkgKzMzLDkgQEAgcGdzdGF0X3Byb2dyZXNzX3N0YXJ0X2Nv bW1hbmQoUHJvZ3Jlc3NDb21tYW5kVHlwZSBjbWR0eXBlLCBPaWQgcmVsaWQpCiAJCXJldHVybjsK IAogCVBHU1RBVF9CRUdJTl9XUklURV9BQ1RJVklUWShiZWVudHJ5KTsKLQliZWVudHJ5LT5zdF9w cm9ncmVzc19jb21tYW5kID0gY21kdHlwZTsKLQliZWVudHJ5LT5zdF9wcm9ncmVzc19jb21tYW5k X3RhcmdldCA9IHJlbGlkOwotCU1lbVNldCgmYmVlbnRyeS0+c3RfcHJvZ3Jlc3NfcGFyYW0sIDAs IHNpemVvZihiZWVudHJ5LT5zdF9wcm9ncmVzc19wYXJhbSkpOworCWJlZW50cnktPnN0X3Byb2dy ZXNzLmNvbW1hbmQgPSBjbWR0eXBlOworCWJlZW50cnktPnN0X3Byb2dyZXNzLmNvbW1hbmRfdGFy Z2V0ID0gcmVsaWQ7CisJTWVtU2V0KCZiZWVudHJ5LT5zdF9wcm9ncmVzcy5wYXJhbSwgMCwgc2l6 ZW9mKGJlZW50cnktPnN0X3Byb2dyZXNzLnBhcmFtKSk7CiAJUEdTVEFUX0VORF9XUklURV9BQ1RJ VklUWShiZWVudHJ5KTsKIH0KIApAQCAtNTYsNyArNTYsNyBAQCBwZ3N0YXRfcHJvZ3Jlc3NfdXBk YXRlX3BhcmFtKGludCBpbmRleCwgaW50NjQgdmFsKQogCQlyZXR1cm47CiAKIAlQR1NUQVRfQkVH SU5fV1JJVEVfQUNUSVZJVFkoYmVlbnRyeSk7Ci0JYmVlbnRyeS0+c3RfcHJvZ3Jlc3NfcGFyYW1b aW5kZXhdID0gdmFsOworCWJlZW50cnktPnN0X3Byb2dyZXNzLnBhcmFtW2luZGV4XSA9IHZhbDsK IAlQR1NUQVRfRU5EX1dSSVRFX0FDVElWSVRZKGJlZW50cnkpOwogfQogCkBAIC03Nyw3ICs3Nyw3 IEBAIHBnc3RhdF9wcm9ncmVzc19pbmNyX3BhcmFtKGludCBpbmRleCwgaW50NjQgaW5jcikKIAkJ cmV0dXJuOwogCiAJUEdTVEFUX0JFR0lOX1dSSVRFX0FDVElWSVRZKGJlZW50cnkpOwotCWJlZW50 cnktPnN0X3Byb2dyZXNzX3BhcmFtW2luZGV4XSArPSBpbmNyOworCWJlZW50cnktPnN0X3Byb2dy ZXNzLnBhcmFtW2luZGV4XSArPSBpbmNyOwogCVBHU1RBVF9FTkRfV1JJVEVfQUNUSVZJVFkoYmVl bnRyeSk7CiB9CiAKQEAgLTEzNCw3ICsxMzQsNyBAQCBwZ3N0YXRfcHJvZ3Jlc3NfdXBkYXRlX211 bHRpX3BhcmFtKGludCBucGFyYW0sIGNvbnN0IGludCAqaW5kZXgsCiAJewogCQlBc3NlcnQoaW5k ZXhbaV0gPj0gMCAmJiBpbmRleFtpXSA8IFBHU1RBVF9OVU1fUFJPR1JFU1NfUEFSQU0pOwogCi0J CWJlZW50cnktPnN0X3Byb2dyZXNzX3BhcmFtW2luZGV4W2ldXSA9IHZhbFtpXTsKKwkJYmVlbnRy eS0+c3RfcHJvZ3Jlc3MucGFyYW1baW5kZXhbaV1dID0gdmFsW2ldOwogCX0KIAogCVBHU1RBVF9F TkRfV1JJVEVfQUNUSVZJVFkoYmVlbnRyeSk7CkBAIC0xNTUsMTEgKzE1NSwxMSBAQCBwZ3N0YXRf cHJvZ3Jlc3NfZW5kX2NvbW1hbmQodm9pZCkKIAlpZiAoIWJlZW50cnkgfHwgIXBnc3RhdF90cmFj a19hY3Rpdml0aWVzKQogCQlyZXR1cm47CiAKLQlpZiAoYmVlbnRyeS0+c3RfcHJvZ3Jlc3NfY29t bWFuZCA9PSBQUk9HUkVTU19DT01NQU5EX0lOVkFMSUQpCisJaWYgKGJlZW50cnktPnN0X3Byb2dy ZXNzLmNvbW1hbmQgPT0gUFJPR1JFU1NfQ09NTUFORF9JTlZBTElEKQogCQlyZXR1cm47CiAKIAlQ R1NUQVRfQkVHSU5fV1JJVEVfQUNUSVZJVFkoYmVlbnRyeSk7Ci0JYmVlbnRyeS0+c3RfcHJvZ3Jl c3NfY29tbWFuZCA9IFBST0dSRVNTX0NPTU1BTkRfSU5WQUxJRDsKLQliZWVudHJ5LT5zdF9wcm9n cmVzc19jb21tYW5kX3RhcmdldCA9IEludmFsaWRPaWQ7CisJYmVlbnRyeS0+c3RfcHJvZ3Jlc3Mu Y29tbWFuZCA9IFBST0dSRVNTX0NPTU1BTkRfSU5WQUxJRDsKKwliZWVudHJ5LT5zdF9wcm9ncmVz cy5jb21tYW5kX3RhcmdldCA9IEludmFsaWRPaWQ7CiAJUEdTVEFUX0VORF9XUklURV9BQ1RJVklU WShiZWVudHJ5KTsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L2Jh Y2tlbmRfc3RhdHVzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS9iYWNrZW5kX3N0YXR1 cy5jCmluZGV4IDFjY2Y0YzZkODMuLmI1NGEzNWQ5MWMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3V0aWxzL2FjdGl2aXR5L2JhY2tlbmRfc3RhdHVzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMv YWN0aXZpdHkvYmFja2VuZF9zdGF0dXMuYwpAQCAtMzc4LDggKzM3OCw4IEBAIHBnc3RhdF9iZXN0 YXJ0KHZvaWQpCiAjZW5kaWYKIAogCWxiZWVudHJ5LnN0X3N0YXRlID0gU1RBVEVfVU5ERUZJTkVE OwotCWxiZWVudHJ5LnN0X3Byb2dyZXNzX2NvbW1hbmQgPSBQUk9HUkVTU19DT01NQU5EX0lOVkFM SUQ7Ci0JbGJlZW50cnkuc3RfcHJvZ3Jlc3NfY29tbWFuZF90YXJnZXQgPSBJbnZhbGlkT2lkOwor CWxiZWVudHJ5LnN0X3Byb2dyZXNzLmNvbW1hbmQgPSBQUk9HUkVTU19DT01NQU5EX0lOVkFMSUQ7 CisJbGJlZW50cnkuc3RfcHJvZ3Jlc3MuY29tbWFuZF90YXJnZXQgPSBJbnZhbGlkT2lkOwogCWxi ZWVudHJ5LnN0X3F1ZXJ5X2lkID0gVUlOVDY0Q09OU1QoMCk7CiAKIAkvKgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L3Bnc3RhdGZ1bmNzLmMgYi9zcmMvYmFja2VuZC91dGlscy9h ZHQvcGdzdGF0ZnVuY3MuYwppbmRleCAzODc2MzM5ZWUxLi5mZTA5YWU4ZjYzIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdzdGF0ZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC91 dGlscy9hZHQvcGdzdGF0ZnVuY3MuYwpAQCAtMjY5LDcgKzI2OSw3IEBAIHBnX3N0YXRfZ2V0X3By b2dyZXNzX2luZm8oUEdfRlVOQ1RJT05fQVJHUykKIAkJICogUmVwb3J0IHZhbHVlcyBmb3Igb25s eSB0aG9zZSBiYWNrZW5kcyB3aGljaCBhcmUgcnVubmluZyB0aGUgZ2l2ZW4KIAkJICogY29tbWFu ZC4KIAkJICovCi0JCWlmIChiZWVudHJ5LT5zdF9wcm9ncmVzc19jb21tYW5kICE9IGNtZHR5cGUp CisJCWlmIChiZWVudHJ5LT5zdF9wcm9ncmVzcy5jb21tYW5kICE9IGNtZHR5cGUpCiAJCQljb250 aW51ZTsKIAogCQkvKiBWYWx1ZSBhdmFpbGFibGUgdG8gYWxsIGNhbGxlcnMgKi8KQEAgLTI3OSw5 ICsyNzksOSBAQCBwZ19zdGF0X2dldF9wcm9ncmVzc19pbmZvKFBHX0ZVTkNUSU9OX0FSR1MpCiAJ CS8qIHNob3cgcmVzdCBvZiB0aGUgdmFsdWVzIGluY2x1ZGluZyByZWxpZCBvbmx5IHRvIHJvbGUg bWVtYmVycyAqLwogCQlpZiAoSEFTX1BHU1RBVF9QRVJNSVNTSU9OUyhiZWVudHJ5LT5zdF91c2Vy aWQpKQogCQl7Ci0JCQl2YWx1ZXNbMl0gPSBPYmplY3RJZEdldERhdHVtKGJlZW50cnktPnN0X3By b2dyZXNzX2NvbW1hbmRfdGFyZ2V0KTsKKwkJCXZhbHVlc1syXSA9IE9iamVjdElkR2V0RGF0dW0o YmVlbnRyeS0+c3RfcHJvZ3Jlc3MuY29tbWFuZF90YXJnZXQpOwogCQkJZm9yIChpID0gMDsgaSA8 IFBHU1RBVF9OVU1fUFJPR1JFU1NfUEFSQU07IGkrKykKLQkJCQl2YWx1ZXNbaSArIDNdID0gSW50 NjRHZXREYXR1bShiZWVudHJ5LT5zdF9wcm9ncmVzc19wYXJhbVtpXSk7CisJCQkJdmFsdWVzW2kg KyAzXSA9IEludDY0R2V0RGF0dW0oYmVlbnRyeS0+c3RfcHJvZ3Jlc3MucGFyYW1baV0pOwogCQl9 CiAJCWVsc2UKIAkJewpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvYmFja2VuZF9wcm9n cmVzcy5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvYmFja2VuZF9wcm9ncmVzcy5oCmluZGV4IDdiNjNk MzhmOTcuLmUwOTU5OGVhZmMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL2JhY2tlbmRf cHJvZ3Jlc3MuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9iYWNrZW5kX3Byb2dyZXNzLmgKQEAg LTMwLDggKzMwLDIyIEBAIHR5cGVkZWYgZW51bSBQcm9ncmVzc0NvbW1hbmRUeXBlCiAJUFJPR1JF U1NfQ09NTUFORF9DT1BZLAogfSBQcm9ncmVzc0NvbW1hbmRUeXBlOwogCisKICNkZWZpbmUgUEdT VEFUX05VTV9QUk9HUkVTU19QQVJBTQkyMAogCisvKgorICogQW55IGNvbW1hbmQgd2hpY2ggd2lz aGVzIGNhbiBhZHZlcnRpc2UgdGhhdCBpdCBpcyBydW5uaW5nIGJ5IHNldHRpbmcKKyAqIGNvbW1h bmQsIGNvbW1hbmRfdGFyZ2V0LCBhbmQgcGFyYW1bXS4gIGNvbW1hbmRfdGFyZ2V0IHNob3VsZCBi ZSB0aGUgT0lEIG9mCisgKiB0aGUgcmVsYXRpb24gd2hpY2ggdGhlIGNvbW1hbmQgdGFyZ2V0cyAo d2UgYXNzdW1lIHRoZXJlJ3MganVzdCBvbmUsIGFzIHRoaXMKKyAqIGlzIG1lYW50IGZvciB1dGls aXR5IGNvbW1hbmRzKSwgYnV0IHRoZSBtZWFuaW5nIG9mIGVhY2ggZWxlbWVudCBpbiB0aGUKKyAq IHBhcmFtIGFycmF5IGlzIGNvbW1hbmQtc3BlY2lmaWMuCisgKi8KK3R5cGVkZWYgc3RydWN0IFBn QmFja2VuZFByb2dyZXNzCit7CisJUHJvZ3Jlc3NDb21tYW5kVHlwZSBjb21tYW5kOworCU9pZAkJ CWNvbW1hbmRfdGFyZ2V0OworCWludDY0CQlwYXJhbVtQR1NUQVRfTlVNX1BST0dSRVNTX1BBUkFN XTsKK30gUGdCYWNrZW5kUHJvZ3Jlc3M7CiAKIGV4dGVybiB2b2lkIHBnc3RhdF9wcm9ncmVzc19z dGFydF9jb21tYW5kKFByb2dyZXNzQ29tbWFuZFR5cGUgY21kdHlwZSwKIAkJCQkJCQkJCQkgIE9p ZCByZWxpZCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9iYWNrZW5kX3N0YXR1cy5o IGIvc3JjL2luY2x1ZGUvdXRpbHMvYmFja2VuZF9zdGF0dXMuaAppbmRleCA3YjdmNmY1OWQwLi4x MWNkZjdmOTVhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9iYWNrZW5kX3N0YXR1cy5o CisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2JhY2tlbmRfc3RhdHVzLmgKQEAgLTE1NSwxOCArMTU1 LDggQEAgdHlwZWRlZiBzdHJ1Y3QgUGdCYWNrZW5kU3RhdHVzCiAJICovCiAJY2hhcgkgICAqc3Rf YWN0aXZpdHlfcmF3OwogCi0JLyoKLQkgKiBDb21tYW5kIHByb2dyZXNzIHJlcG9ydGluZy4gIEFu eSBjb21tYW5kIHdoaWNoIHdpc2hlcyBjYW4gYWR2ZXJ0aXNlCi0JICogdGhhdCBpdCBpcyBydW5u aW5nIGJ5IHNldHRpbmcgc3RfcHJvZ3Jlc3NfY29tbWFuZCwKLQkgKiBzdF9wcm9ncmVzc19jb21t YW5kX3RhcmdldCwgYW5kIHN0X3Byb2dyZXNzX3BhcmFtW10uCi0JICogc3RfcHJvZ3Jlc3NfY29t bWFuZF90YXJnZXQgc2hvdWxkIGJlIHRoZSBPSUQgb2YgdGhlIHJlbGF0aW9uIHdoaWNoIHRoZQot CSAqIGNvbW1hbmQgdGFyZ2V0cyAod2UgYXNzdW1lIHRoZXJlJ3MganVzdCBvbmUsIGFzIHRoaXMg aXMgbWVhbnQgZm9yCi0JICogdXRpbGl0eSBjb21tYW5kcyksIGJ1dCB0aGUgbWVhbmluZyBvZiBl YWNoIGVsZW1lbnQgaW4gdGhlCi0JICogc3RfcHJvZ3Jlc3NfcGFyYW0gYXJyYXkgaXMgY29tbWFu ZC1zcGVjaWZpYy4KLQkgKi8KLQlQcm9ncmVzc0NvbW1hbmRUeXBlIHN0X3Byb2dyZXNzX2NvbW1h bmQ7Ci0JT2lkCQkJc3RfcHJvZ3Jlc3NfY29tbWFuZF90YXJnZXQ7Ci0JaW50NjQJCXN0X3Byb2dy ZXNzX3BhcmFtW1BHU1RBVF9OVU1fUFJPR1JFU1NfUEFSQU1dOworCS8qIENvbW1hbmQgcHJvZ3Jl c3MgcmVwb3J0aW5nLiAqLworCVBnQmFja2VuZFByb2dyZXNzCXN0X3Byb2dyZXNzOwogCiAJLyog cXVlcnkgaWRlbnRpZmllciwgb3B0aW9uYWxseSBjb21wdXRlZCB1c2luZyBwb3N0X3BhcnNlX2Fu YWx5emVfaG9vayAqLwogCXVpbnQ2NAkJc3RfcXVlcnlfaWQ7Ci0tIAoyLjQ1LjIKCgAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAdjAxLTAwMDMtQWRkLUNPTkNVUlJFTlRMWS1vcHRpb24tdG8tYm90aC1WQUNV VU0tRlVMTC1hbmQtQ0xVUy5wYXRjaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAw MDY0NCAAMDAxNzUxIAAwMDE3NTEgADAwMDAwNjA2NjE2IDE0NjQzMjU1NTI3IDAyMjUwMgAgMAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhcgAwMGFoAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYWgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAw MDAwMDAgADAwMDAwMCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAABGcm9tIDFjYjUzNjY2M2MwMThkOThmYWYzNDlhNjgwYjc3MzM2NGI0NjQwMjYg TW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCkZyb206IEFudG9uaW4gSG91c2thIDxhaEBjeWJlcnRl Yy5hdD4KRGF0ZTogVHVlLCA5IEp1bCAyMDI0IDE3OjQ1OjU5ICswMjAwClN1YmplY3Q6IFtQQVRD SCAzLzRdIEFkZCBDT05DVVJSRU5UTFkgb3B0aW9uIHRvIGJvdGggVkFDVVVNIEZVTEwgYW5kIENM VVNURVIKIGNvbW1hbmRzLgoKQm90aCBWQUNVVU0gRlVMTCBhbmQgQ0xVU1RFUiBjb21tYW5kcyBj b3B5IHRoZSByZWxhdGlvbiBkYXRhIGludG8gYSBuZXcgZmlsZSwKY3JlYXRlIG5ldyBpbmRleGVz IGFuZCBldmVudHVhbGx5IHN3YXAgdGhlIGZpbGVzLiBUbyBtYWtlIHN1cmUgdGhhdCB0aGUgb2xk CmZpbGUgZG9lcyBub3QgY2hhbmdlIGR1cmluZyB0aGUgY29weWluZywgdGhlIHJlbGF0aW9uIGlz IGxvY2tlZCBpbiBhbgpleGNsdXNpdmUgbW9kZSwgd2hpY2ggcHJldmVudHMgYXBwbGljYXRpb25z IGZyb20gYm90aCByZWFkaW5nIGFuZCB3cml0aW5nLiAoVG8Ka2VlcCB0aGUgZGF0YSBjb25zaXN0 ZW50LCB3ZSdkIG9ubHkgbmVlZCB0byBwcmV2ZW50IHRoZSBhcHBsaWNhdGlvbnMgZnJvbQp3cml0 aW5nLCBidXQgZXZlbiByZWFkaW5nIG5lZWRzIHRvIGJlIGJsb2NrZWQgYmVmb3JlIHdlIGNhbiBz d2FwIHRoZSBmaWxlcyAtCm90aGVyd2lzZSBzb21lIGFwcGxpY2F0aW9ucyBjb3VsZCBjb250aW51 ZSB1c2luZyB0aGUgb2xkIGZpbGUuIFNpbmNlIHdlIGNhbm5vdApnZXQgc3Ryb25nZXIgbG9jayB3 aXRob3V0IHJlbGVhc2luZyB0aGUgd2Vha2VyIG9uZSBmaXJzdCwgd2UgYWNxdWlyZSB0aGUKZXhj bHVzaXZlIGxvY2sgaW4gdGhlIGJlZ2lubmluZyBhbmQga2VlcCBpdCB0aWxsIHRoZSBlbmQgb2Yg dGhlIHByb2Nlc3NpbmcuKQoKVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFuIGFsdGVybmF0aXZlIHdv cmtmbG93LCB3aGljaCBvbmx5IHJlcXVpcmVzIHRoZQpleGNsdXNpdmUgbG9jayB3aGVuIHRoZSBy ZWxhdGlvbiAoYW5kIGluZGV4KSBmaWxlcyBhcmUgYmVpbmcgc3dhcHBlZC4KKFN1cHBvc2VkbHks IHRoZSBzd2FwcGluZyBzaG91bGQgYmUgcHJldHR5IGZhc3QuKSBPbiB0aGUgb3RoZXIgaGFuZCwg d2hlbiB3ZQpjb3B5IHRoZSBkYXRhIHRvIHRoZSBuZXcgZmlsZSwgd2UgYWxsb3cgYXBwbGljYXRp b25zIHRvIHJlYWQgZnJvbSB0aGUgcmVsYXRpb24KYW5kIGV2ZW4gd3JpdGUgaW50byBpdC4KCkZp cnN0LCB3ZSBzY2FuIHRoZSByZWxhdGlvbiB1c2luZyBhICJoaXN0b3JpYyBzbmFwc2hvdCIsIGFu ZCBpbnNlcnQgYWxsIHRoZQp0dXBsZXMgc2F0aXNmeWluZyB0aGlzIHNuYXBzaG90IGludG8gdGhl IG5ldyBmaWxlLiBOb3RlIHRoYXQsIGJlZm9yZSBjcmVhdGluZwp0aGF0IHNuYXBzaG90LCB3ZSBu ZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGFsbCB0aGUgb3RoZXIgYmFja2VuZHMgdHJlYXQgdGhlCnJl bGF0aW9uIGFzIGEgc3lzdGVtIGNhdGFsb2c6IGluIHBhcnRpY3VsYXIsIHRoZXkgbXVzdCBsb2cg aW5mb3JtYXRpb24gb24gbmV3CmNvbW1hbmQgSURzIChDSURzKS4gV2UgYWNoaWV2ZSB0aGF0IGJ5 IGFkZGluZyB0aGUgcmVsYXRpb24gSUQgaW50byBhIHNoYXJlZApoYXNoIHRhYmxlIGFuZCB3YWl0 aW5nIHVudGlsIGFsbCB0aGUgdHJhbnNhY3Rpb25zIGN1cnJlbnRseSB3cml0aW5nIGludG8gdGhl CnRhYmxlIChpLmUuIHRyYW5zYWN0aW9ucyBwb3NzaWJseSBub3QgYXdhcmUgb2YgdGhlIG5ldyBl bnRyeSkgaGF2ZSBmaW5pc2hlZC4KClNlY29uZCwgbG9naWNhbCBkZWNvZGluZyBpcyB1c2VkIHRv IGNhcHR1cmUgdGhlIGRhdGEgY2hhbmdlcyBkb25lIGJ5CmFwcGxpY2F0aW9ucyBkdXJpbmcgdGhl IGNvcHlpbmcgKGkuZS4gY2hhbmdlcyB0aGF0IGRvIG5vdCBzYXRpc2Z5IHRoZSBoaXN0b3JpYwpz bmFwc2hvdCBtZW50aW9uZWQgYWJvdmUpLCBhbmQgdGhvc2UgYXJlIGFwcGxpZWQgdG8gdGhlIG5l dyBmaWxlIGJlZm9yZSB3ZQphY3F1aXJlIHRoZSBleGNsdXNpdmUgbG9jayB3ZSBuZWVkIHRvIHN3 YXAgdGhlIGZpbGVzLiAoT2YgY291cnNlLCBtb3JlIGRhdGEKY2hhbmdlcyBjYW4gdGFrZSBwbGFj ZSB3aGlsZSB3ZSBhcmUgd2FpdGluZyBmb3IgdGhlIGxvY2sgLSB0aGVzZSB3aWxsIGJlCmFwcGxp ZWQgdG8gdGhlIG5ldyBmaWxlIGFmdGVyIHdlIGhhdmUgYWNxdWlyZWQgdGhlIGxvY2ssIGJlZm9y ZSB3ZSBzd2FwIHRoZQpmaWxlcy4pCgpXaGlsZSBjb3B5aW5nIHRoZSBkYXRhIGludG8gdGhlIG5l dyBmaWxlLCB3ZSBob2xkIGEgbG9jayB0aGF0IHByZXZlbnRzCmFwcGxpY2F0aW9ucyBmcm9tIGNo YW5naW5nIHRoZSByZWxhdGlvbiB0dXBsZSBkZXNjcmlwdG9yICh0dXBsZXMgaW5zZXJ0ZWQgaW50 bwp0aGUgb2xkIGZpbGUgbXVzdCBmaXQgaW50byB0aGUgbmV3IGZpbGUpLiBIb3dldmVyLCBhcyB3 ZSBoYXZlIHRvIHJlbGVhc2UgdGhhdApsb2NrIGJlZm9yZSBnZXR0aW5nIHRoZSBleGNsdXNpdmUg b25lLCBpdCdzIHBvc3NpYmxlIHRoYXQgc29tZW9uZSBhZGRzIG9yCmRyb3BzIGEgY29sdW1uLCBv ciBjaGFuZ2VzIHRoZSBkYXRhIHR5cGUgb2YgYW4gZXhpc3Rpbmcgb25lLiBUaGVyZWZvcmUgd2Ug aGF2ZQp0byBjaGVjayB0aGUgdHVwbGUgZGVzY3JpcHRvciBiZWZvcmUgd2Ugc3dhcCB0aGUgZmls ZXMuIElmIHdlIGZpbmQgb3V0IHRoYXQKdGhlIHR1cGxlIGRlc2NyaXB0b3IgY2hhbmdlZCwgRVJS T1IgaXMgcmFpc2VkIGFuZCBhbGwgdGhlIGNoYW5nZXMgYXJlIHJvbGxlZApiYWNrLiBTaW5jZSBh IGxvdCBvZiBlZmZvcnQgY2FuIGJlIHdhc3RlZCBpbiBzdWNoIGEgY2FzZSwgdGhlIEFMVEVSIFRB QkxFCmNvbW1hbmQgYWxzbyB0cmllcyB0byBjaGVjayBpZiBWQUNVVU0gRlVMTCAvIENMVVNURVIg d2l0aCB0aGUgQ09OQ1VSUkVOVExZCm9wdGlvbiBpcyBydW5uaW5nIG9uIHRoZSBzYW1lIHJlbGF0 aW9uLCBhbmQgcmFpc2VzIGFuIEVSUk9SIGlmIGl0IGlzLgoKTGlrZSB0aGUgZXhpc3RpbmcgaW1w bGVtZW50YXRpb24gb2YgYm90aCBWQUNVVU0gRlVMTCBhbmQgQ0xVU1RFUiBjb21tYW5kcywgdGhl CnZhcmlhbnQgd2l0aCB0aGUgQ09OQ1VSUkVOVExZIG9wdGlvbiBhbHNvIHJlcXVpcmVzIGFuIGV4 dHJhIHNwYWNlIGZvciB0aGUgbmV3CnJlbGF0aW9uIGFuZCBpbmRleCBmaWxlcyAod2hpY2ggY29l eGlzdCB3aXRoIHRoZSBvbGQgZmlsZXMgZm9yIHNvbWUgdGltZSkuIEluCmFkZGl0aW9uLCB0aGUg Q09OQ1VSUkVOVExZIG9wdGlvbiBtaWdodCBpbnRyb2R1Y2UgYSBsYWcgaW4gcmVsZWFzaW5nIFdB TApzZWdtZW50cyBmb3IgYXJjaGl2aW5nIC8gcmVjeWNsaW5nLiBUaGlzIGlzIGR1ZSB0byB0aGUg ZGVjb2Rpbmcgb2YgdGhlIGRhdGEKY2hhbmdlcyBkb25lIGJ5IGFwcGxpY2F0aW9uIGNvbmN1cnJl bnRseS4gSG93ZXZlciwgdGhpcyBsYWcgc2hvdWxkIG5vdCBiZSBtb3JlCnRoYW4gYSBzaW5nbGUg V0FMIHNlZ21lbnQuCi0tLQogZG9jL3NyYy9zZ21sL21vbml0b3Jpbmcuc2dtbCAgICAgICAgICAg ICAgICAgIHwgICAzNiArLQogZG9jL3NyYy9zZ21sL3JlZi9jbHVzdGVyLnNnbWwgICAgICAgICAg ICAgICAgIHwgIDExNCArLQogZG9jL3NyYy9zZ21sL3JlZi92YWN1dW0uc2dtbCAgICAgICAgICAg ICAgICAgIHwgICAyNyArLQogc3JjL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwgICAgMSArCiBzcmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL3RvYXN0X2ludGVybmFs cy5jICAgfCAgICAzICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYyAgICAgICAg ICAgICAgfCAgIDgwICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5j ICAgICAgfCAgMTU1ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1fdmlzaWJpbGl0 eS5jICAgfCAgIDMwICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94YWN0LmMgICAgICAg ICAgICAgfCAgIDUyICsKIHNyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYyAgICAgICAgICAgICAg ICAgICB8ICAgNDMgKy0KIHNyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNxbCAgICAg ICAgICB8ICAgMTcgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2NsdXN0ZXIuYyAgICAgICAgICAg ICAgICB8IDI2MTggKysrKysrKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL21hdHZp ZXcuYyAgICAgICAgICAgICAgICB8ICAgIDIgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxl Y21kcy5jICAgICAgICAgICAgICB8ICAgMTEgKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVt LmMgICAgICAgICAgICAgICAgIHwgIDEzNyArLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC9kZWNvZGUuYyAgICAgIHwgICA1OCArLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC9zbmFwYnVpbGQuYyAgIHwgICA4NyArLQogLi4uL3JlcGxpY2F0aW9uL3Bnb3V0cHV0X2Ns dXN0ZXIvTWFrZWZpbGUgICAgIHwgICAzMiArCiAuLi4vcmVwbGljYXRpb24vcGdvdXRwdXRfY2x1 c3Rlci9tZXNvbi5idWlsZCAgfCAgIDE4ICsKIC4uLi9wZ291dHB1dF9jbHVzdGVyL3Bnb3V0cHV0 X2NsdXN0ZXIuYyAgICAgICB8ICAzMjEgKysKIHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2ku YyAgICAgICAgICAgICAgICB8ICAgIDMgKwogc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5LmMgICAg ICAgICAgICAgICAgICAgIHwgICAxMSArCiBzcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS9iYWNr ZW5kX3Byb2dyZXNzLmMgfCAgIDE2ICsKIC4uLi91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50X25h bWVzLnR4dCAgICAgICB8ICAgIDEgKwogc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvaW52YWwuYyAg ICAgICAgICAgICAgIHwgICAyMiArCiBzcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5j ICAgICAgICAgICAgfCAgICA1ICsKIHNyYy9iYWNrZW5kL3V0aWxzL3RpbWUvc25hcG1nci5jICAg ICAgICAgICAgICB8ICAgIDYgKy0KIHNyYy9iaW4vcHNxbC90YWItY29tcGxldGUuYyAgICAgICAg ICAgICAgICAgICB8ICAgIDUgKy0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaCAgICAgICAg ICAgICAgICAgICB8ICAgMTkgKy0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW1feGxvZy5oICAg ICAgICAgICAgICB8ICAgIDIgKwogc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaCAgICAgICAg ICAgICAgICAgIHwgICAxMCArCiBzcmMvaW5jbHVkZS9hY2Nlc3MveGFjdC5oICAgICAgICAgICAg ICAgICAgICAgfCAgICAyICsKIHNyYy9pbmNsdWRlL2NhdGFsb2cvaW5kZXguaCAgICAgICAgICAg ICAgICAgICB8ICAgIDMgKwogc3JjL2luY2x1ZGUvY29tbWFuZHMvY2x1c3Rlci5oICAgICAgICAg ICAgICAgIHwgIDExNyArLQogc3JjL2luY2x1ZGUvY29tbWFuZHMvcHJvZ3Jlc3MuaCAgICAgICAg ICAgICAgIHwgICAxNyArLQogc3JjL2luY2x1ZGUvY29tbWFuZHMvdmFjdXVtLmggICAgICAgICAg ICAgICAgIHwgICAxNyArLQogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vc25hcGJ1aWxkLmggICAg ICAgICAgIHwgICAgMiArCiBzcmMvaW5jbHVkZS9zdG9yYWdlL2xvY2tkZWZzLmggICAgICAgICAg ICAgICAgfCAgICAyICstCiBzcmMvaW5jbHVkZS9zdG9yYWdlL2x3bG9ja2xpc3QuaCAgICAgICAg ICAgICAgfCAgICAxICsKIHNyYy9pbmNsdWRlL3V0aWxzL2JhY2tlbmRfcHJvZ3Jlc3MuaCAgICAg ICAgICB8ICAgIDMgKy0KIHNyYy9pbmNsdWRlL3V0aWxzL2ludmFsLmggICAgICAgICAgICAgICAg ICAgICB8ICAgIDIgKwogc3JjL2luY2x1ZGUvdXRpbHMvcmVsLmggICAgICAgICAgICAgICAgICAg ICAgIHwgICAgNyArLQogc3JjL2luY2x1ZGUvdXRpbHMvc25hcG1nci5oICAgICAgICAgICAgICAg ICAgIHwgICAgMyArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3J1bGVzLm91dCAgICAgICAg ICAgfCAgIDE3ICstCiA0NCBmaWxlcyBjaGFuZ2VkLCAzODc2IGluc2VydGlvbnMoKyksIDI1OSBk ZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9w Z291dHB1dF9jbHVzdGVyL01ha2VmaWxlCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vcGdvdXRwdXRfY2x1c3Rlci9tZXNvbi5idWlsZAogY3JlYXRlIG1vZGUgMTAw NjQ0IHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0X2NsdXN0ZXIvcGdvdXRwdXRfY2x1 c3Rlci5jCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL21vbml0b3Jpbmcuc2dtbCBiL2RvYy9z cmMvc2dtbC9tb25pdG9yaW5nLnNnbWwKaW5kZXggOTkxZjYyOTkwNy4uZmUxYmEzNmY0MCAxMDA2 NDQKLS0tIGEvZG9jL3NyYy9zZ21sL21vbml0b3Jpbmcuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwv bW9uaXRvcmluZy5zZ21sCkBAIC01NTY3LDE0ICs1NTY3LDM1IEBAIEZST00gcGdfc3RhdF9nZXRf YmFja2VuZF9pZHNldCgpIEFTIGJhY2tlbmRpZDsKIAogICAgICA8cm93PgogICAgICAgPGVudHJ5 IHJvbGU9ImNhdGFsb2dfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImNvbHVtbl9kZWZpbml0aW9u Ij4KLSAgICAgICA8c3RydWN0ZmllbGQ+aGVhcF90dXBsZXNfd3JpdHRlbjwvc3RydWN0ZmllbGQ+ IDx0eXBlPmJpZ2ludDwvdHlwZT4KKyAgICAgICA8c3RydWN0ZmllbGQ+aGVhcF90dXBsZXNfaW5z ZXJ0ZWQ8L3N0cnVjdGZpZWxkPiA8dHlwZT5iaWdpbnQ8L3R5cGU+CiAgICAgICA8L3BhcmE+CiAg ICAgICA8cGFyYT4KLSAgICAgICBOdW1iZXIgb2YgaGVhcCB0dXBsZXMgd3JpdHRlbi4KKyAgICAg ICBOdW1iZXIgb2YgaGVhcCB0dXBsZXMgaW5zZXJ0ZWQuCiAgICAgICAgVGhpcyBjb3VudGVyIG9u bHkgYWR2YW5jZXMgd2hlbiB0aGUgcGhhc2UgaXMKICAgICAgICA8bGl0ZXJhbD5zZXEgc2Nhbm5p bmcgaGVhcDwvbGl0ZXJhbD4sCi0gICAgICAgPGxpdGVyYWw+aW5kZXggc2Nhbm5pbmcgaGVhcDwv bGl0ZXJhbD4KLSAgICAgICBvciA8bGl0ZXJhbD53cml0aW5nIG5ldyBoZWFwPC9saXRlcmFsPi4K KyAgICAgICA8bGl0ZXJhbD5pbmRleCBzY2FubmluZyBoZWFwPC9saXRlcmFsPiwKKyAgICAgICA8 bGl0ZXJhbD53cml0aW5nIG5ldyBoZWFwPC9saXRlcmFsPgorICAgICAgIG9yIDxsaXRlcmFsPmNh dGNoLXVwPC9saXRlcmFsPi4KKyAgICAgIDwvcGFyYT48L2VudHJ5PgorICAgICA8L3Jvdz4KKwor ICAgICA8cm93PgorICAgICAgPGVudHJ5IHJvbGU9ImNhdGFsb2dfdGFibGVfZW50cnkiPjxwYXJh IHJvbGU9ImNvbHVtbl9kZWZpbml0aW9uIj4KKyAgICAgICA8c3RydWN0ZmllbGQ+aGVhcF90dXBs ZXNfdXBkYXRlZDwvc3RydWN0ZmllbGQ+IDx0eXBlPmJpZ2ludDwvdHlwZT4KKyAgICAgIDwvcGFy YT4KKyAgICAgIDxwYXJhPgorICAgICAgIE51bWJlciBvZiBoZWFwIHR1cGxlcyB1cGRhdGVkLgor ICAgICAgIFRoaXMgY291bnRlciBvbmx5IGFkdmFuY2VzIHdoZW4gdGhlIHBoYXNlIGlzIDxsaXRl cmFsPmNhdGNoLXVwPC9saXRlcmFsPi4KKyAgICAgIDwvcGFyYT48L2VudHJ5PgorICAgICA8L3Jv dz4KKworICAgICA8cm93PgorICAgICAgPGVudHJ5IHJvbGU9ImNhdGFsb2dfdGFibGVfZW50cnki PjxwYXJhIHJvbGU9ImNvbHVtbl9kZWZpbml0aW9uIj4KKyAgICAgICA8c3RydWN0ZmllbGQ+aGVh cF90dXBsZXNfZGVsZXRlZDwvc3RydWN0ZmllbGQ+IDx0eXBlPmJpZ2ludDwvdHlwZT4KKyAgICAg IDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgIE51bWJlciBvZiBoZWFwIHR1cGxlcyBkZWxl dGVkLgorICAgICAgIFRoaXMgY291bnRlciBvbmx5IGFkdmFuY2VzIHdoZW4gdGhlIHBoYXNlIGlz IDxsaXRlcmFsPmNhdGNoLXVwPC9saXRlcmFsPi4KICAgICAgIDwvcGFyYT48L2VudHJ5PgogICAg ICA8L3Jvdz4KIApAQCAtNTY1NSw2ICs1Njc2LDEzIEBAIEZST00gcGdfc3RhdF9nZXRfYmFja2Vu ZF9pZHNldCgpIEFTIGJhY2tlbmRpZDsKICAgICAgICA8Y29tbWFuZD5DTFVTVEVSPC9jb21tYW5k PiBpcyBjdXJyZW50bHkgd3JpdGluZyB0aGUgbmV3IGhlYXAuCiAgICAgIDwvZW50cnk+CiAgICAg PC9yb3c+CisgICAgPHJvdz4KKyAgICAgPGVudHJ5PjxsaXRlcmFsPmNhdGNoLXVwPC9saXRlcmFs PjwvZW50cnk+CisgICAgIDxlbnRyeT4KKyAgICAgICA8Y29tbWFuZD5DTFVTVEVSPC9jb21tYW5k PiBpcyBjdXJyZW50bHkgcHJvY2Vzc2luZyB0aGUgRE1MIGNvbW1hbmRzCisgICAgICAgdGhhdCBv dGhlciB0cmFuc2FjdGlvbnMgZXhlY3V0ZWQgZHVyaW5nIGFueSBvZiB0aGUgcHJlY2VkaW5nIHBo YXNlLgorICAgICA8L2VudHJ5PgorICAgIDwvcm93PgogICAgIDxyb3c+CiAgICAgIDxlbnRyeT48 bGl0ZXJhbD5zd2FwcGluZyByZWxhdGlvbiBmaWxlczwvbGl0ZXJhbD48L2VudHJ5PgogICAgICA8 ZW50cnk+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL2NsdXN0ZXIuc2dtbCBiL2RvYy9z cmMvc2dtbC9yZWYvY2x1c3Rlci5zZ21sCmluZGV4IGM1NzYwMjQ0ZTYuLjBmZTRlOTYwM2IgMTAw NjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvY2x1c3Rlci5zZ21sCisrKyBiL2RvYy9zcmMvc2dt bC9yZWYvY2x1c3Rlci5zZ21sCkBAIC0yNiw2ICsyNiw3IEBAIENMVVNURVIgWyAoIDxyZXBsYWNl YWJsZSBjbGFzcz0icGFyYW1ldGVyIj5vcHRpb248L3JlcGxhY2VhYmxlPiBbLCAuLi5dICkgXSBb IDxyCiA8cGhyYXNlPndoZXJlIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5vcHRpb248 L3JlcGxhY2VhYmxlPiBjYW4gYmUgb25lIG9mOjwvcGhyYXNlPgogCiAgICAgVkVSQk9TRSBbIDxy ZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5ib29sZWFuPC9yZXBsYWNlYWJsZT4gXQorICAg IENPTkNVUlJFTlRMWSBbIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5ib29sZWFuPC9y ZXBsYWNlYWJsZT4gXQogPC9zeW5vcHNpcz4KICA8L3JlZnN5bm9wc2lzZGl2PgogCkBAIC02OSwx NCArNzAsMTggQEAgQ0xVU1RFUiBbICggPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm9w dGlvbjwvcmVwbGFjZWFibGU+IFssIC4uLl0gKSBdIFsgPHIKICAgIDxyZXBsYWNlYWJsZSBjbGFz cz0icGFyYW1ldGVyIj50YWJsZV9uYW1lPC9yZXBsYWNlYWJsZT4gcmVjbHVzdGVycyBhbGwgdGhl CiAgICBwcmV2aW91c2x5LWNsdXN0ZXJlZCB0YWJsZXMgaW4gdGhlIGN1cnJlbnQgZGF0YWJhc2Ug dGhhdCB0aGUgY2FsbGluZyB1c2VyCiAgICBoYXMgcHJpdmlsZWdlcyBmb3IuICBUaGlzIGZvcm0g b2YgPGNvbW1hbmQ+Q0xVU1RFUjwvY29tbWFuZD4gY2Fubm90IGJlCi0gICBleGVjdXRlZCBpbnNp ZGUgYSB0cmFuc2FjdGlvbiBibG9jay4KKyAgIGV4ZWN1dGVkIGluc2lkZSBhIHRyYW5zYWN0aW9u IGJsb2NrLiBBbHNvLCBpZgorICAgdGhlIDxsaXRlcmFsPkNPTkNVUlJFTlRMWTwvbGl0ZXJhbD4g b3B0aW9uIGlzIHVzZWQgd2l0aCB0aGlzIGZvcm0sIHN5c3RlbQorICAgY2F0YWxvZ3MgYW5kIDxh Y3JvbnltPlRPQVNUPC9hY3JvbnltPiB0YWJsZXMgYXJlIG5vdCBwcm9jZXNzZWQuCiAgIDwvcGFy YT4KIAogICA8cGFyYT4KLSAgIFdoZW4gYSB0YWJsZSBpcyBiZWluZyBjbHVzdGVyZWQsIGFuIDxs aXRlcmFsPkFDQ0VTUwotICAgRVhDTFVTSVZFPC9saXRlcmFsPiBsb2NrIGlzIGFjcXVpcmVkIG9u IGl0LiBUaGlzIHByZXZlbnRzIGFueSBvdGhlcgotICAgZGF0YWJhc2Ugb3BlcmF0aW9ucyAoYm90 aCByZWFkcyBhbmQgd3JpdGVzKSBmcm9tIG9wZXJhdGluZyBvbiB0aGUKLSAgIHRhYmxlIHVudGls IHRoZSA8Y29tbWFuZD5DTFVTVEVSPC9jb21tYW5kPiBpcyBmaW5pc2hlZC4KKyAgIFdoZW4gYSB0 YWJsZSBpcyBiZWluZyBjbHVzdGVyZWQsIGFuIDxsaXRlcmFsPkFDQ0VTUyBFWENMVVNJVkU8L2xp dGVyYWw+CisgICBsb2NrIGlzIGFjcXVpcmVkIG9uIGl0LiBUaGlzIHByZXZlbnRzIGFueSBvdGhl ciBkYXRhYmFzZSBvcGVyYXRpb25zIChib3RoCisgICByZWFkcyBhbmQgd3JpdGVzKSBmcm9tIG9w ZXJhdGluZyBvbiB0aGUgdGFibGUgdW50aWwKKyAgIHRoZSA8Y29tbWFuZD5DTFVTVEVSPC9jb21t YW5kPiBpcyBmaW5pc2hlZC4gSWYgeW91IHdhbnQgdG8ga2VlcCB0aGUgdGFibGUKKyAgIGFjY2Vz c2libGUgZHVyaW5nIHRoZSBjbHVzdGVyaW5nLCBjb25zaWRlciB1c2luZworICAgdGhlIDxsaXRl cmFsPkNPTkNVUlJFTlRMWTwvbGl0ZXJhbD4gb3B0aW9uLgogICA8L3BhcmE+CiAgPC9yZWZzZWN0 MT4KIApAQCAtMTExLDYgKzExNiwxMDUgQEAgQ0xVU1RFUiBbICggPHJlcGxhY2VhYmxlIGNsYXNz PSJwYXJhbWV0ZXIiPm9wdGlvbjwvcmVwbGFjZWFibGU+IFssIC4uLl0gKSBdIFsgPHIKICAgICA8 L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAg PHRlcm0+PGxpdGVyYWw+Q09OQ1VSUkVOVExZPC9saXRlcmFsPjwvdGVybT4KKyAgICA8bGlzdGl0 ZW0+CisgICAgIDxwYXJhPgorICAgICAgQWxsb3cgb3RoZXIgdHJhbnNhY3Rpb25zIHRvIHVzZSB0 aGUgdGFibGUgd2hpbGUgaXQgaXMgYmVpbmcgY2x1c3RlcmVkLgorICAgICA8L3BhcmE+CisKKyAg ICAgPHBhcmE+CisgICAgICBJbnRlcm5hbGx5LCA8Y29tbWFuZD5DTFVTVEVSPC9jb21tYW5kPiBj b3BpZXMgdGhlIGNvbnRlbnRzIG9mIHRoZSB0YWJsZQorICAgICAgKGlnbm9yaW5nIGRlYWQgdHVw bGVzKSBpbnRvIGEgbmV3IGZpbGUsIHNvcnRlZCBieSB0aGUgc3BlY2lmaWVkIGluZGV4LAorICAg ICAgYW5kIGFsc28gY3JlYXRlcyBhIG5ldyBmaWxlIGZvciBlYWNoIGluZGV4LiBUaGVuIGl0IHN3 YXBzIHRoZSBvbGQgYW5kCisgICAgICBuZXcgZmlsZXMgZm9yIHRoZSB0YWJsZSBhbmQgYWxsIHRo ZSBpbmRleGVzLCBhbmQgZGVsZXRlcyB0aGUgb2xkCisgICAgICBmaWxlcy4gVGhlIDxsaXRlcmFs PkFDQ0VTUyBFWENMVVNJVkU8L2xpdGVyYWw+IGxvY2sgaXMgbmVlZGVkIHRvIG1ha2UKKyAgICAg IHN1cmUgdGhhdCB0aGUgb2xkIGZpbGVzIGRvIG5vdCBjaGFuZ2UgZHVyaW5nIHRoZSBwcm9jZXNz aW5nIGJlY2F1c2UgdGhlCisgICAgICBjaG5hZ2VzIHdvdWxkIGdldCBsb3N0IGR1ZSB0byB0aGUg c3dhcC4KKyAgICAgPC9wYXJhPgorCisgICAgIDxwYXJhPgorICAgICAgV2l0aCB0aGUgPGxpdGVy YWw+Q09OQ1VSUkVOVExZPC9saXRlcmFsPiBvcHRpb24sIHRoZSA8bGl0ZXJhbD5BQ0NFU1MKKyAg ICAgIEVYQ0xVU0lWRTwvbGl0ZXJhbD4gbG9jayBpcyBvbmx5IGFjcXVpcmVkIHRvIHN3YXAgdGhl IHRhYmxlIGFuZCBpbmRleAorICAgICAgZmlsZXMuIFRoZSBkYXRhIGNoYW5nZXMgdGhhdCB0b29r IHBsYWNlIGR1cmluZyB0aGUgY3JlYXRpb24gb2YgdGhlIG5ldworICAgICAgdGFibGUgYW5kIGlu ZGV4IGZpbGVzIGFyZSBjYXB0dXJlZCB1c2luZyBsb2dpY2FsIGRlY29kaW5nCisgICAgICAoPHhy ZWYgbGlua2VuZD0ibG9naWNhbGRlY29kaW5nIi8+KSBhbmQgYXBwbGllZCBiZWZvcmUKKyAgICAg IHRoZSA8bGl0ZXJhbD5BQ0NFU1MgRVhDTFVTSVZFPC9saXRlcmFsPiBsb2NrIGlzIHJlcXVlc3Rl ZC4gVGh1cyB0aGUgbG9jaworICAgICAgaXMgdHlwaWNhbGx5IGhlbGQgb25seSBmb3IgdGhlIHRp bWUgbmVlZGVkIHRvIHN3YXAgdGhlIGZpbGVzLCB3aGljaAorICAgICAgc2hvdWxkIGJlIHByZXR0 eSBzaG9ydC4gSG93ZXZlciwgdGhlIHRpbWUgbWlnaHQgc3RpbGwgYmUgbm90aWNlYWJsZQorICAg ICAgbm90aWNlYWJsZSBpZiB0b28gbWFueSBkYXRhIGNoYW5nZXMgaGF2ZSBiZWVuIGRvbmUgdG8g dGhlIHRhYmxlCisgICAgICB3aGlsZSA8Y29tbWFuZD5DTFVTVEVSPC9jb21tYW5kPiB3YXMgd2Fp dGluZyBmb3IgdGhlIGxvY2s6IHRob3NlIGNoYW5nZXMKKyAgICAgIG11c3QgYmUgcHJvY2Vzc2Vk IGJlZm9yZSB0aGUgZmlsZXMgYXJlIHN3YXBwZWQuCisgICAgIDwvcGFyYT4KKworICAgICA8cGFy YT4KKyAgICAgIE5vdGUgdGhhdCA8Y29tbWFuZD5DTFVTVEVSPC9jb21tYW5kPiB3aXRoIHRoZQor ICAgICAgdGhlIDxsaXRlcmFsPkNPTkNVUlJFTlRMWTwvbGl0ZXJhbD4gb3B0aW9uIGRvZXMgbm90 IHRyeSB0byBvcmRlciB0aGUKKyAgICAgIHJvd3MgaW5zZXJ0ZWQgaW50byB0aGUgdGFibGUgYWZ0 ZXIgdGhlIGNsdXN0ZXJpbmcgc3RhcnRlZC4gQWxzbworICAgICAgbm90ZSA8Y29tbWFuZD5DTFVT VEVSPC9jb21tYW5kPiBtaWdodCBmYWlsIHRvIGNvbXBsZXRlIGR1ZSB0byBEREwKKyAgICAgIGNv bW1hbmRzIGV4ZWN1dGVkIG9uIHRoZSB0YWJsZSBieSBvdGhlciB0cmFuc2FjdGlvbnMgZHVyaW5n IHRoZQorICAgICAgY2x1c3RlcmluZy4KKyAgICAgPC9wYXJhPgorCisgICAgIDxub3RlPgorICAg ICAgPHBhcmE+CisgICAgICAgSW4gYWRkaXRpb24gdG8gdGhlIHRlbXBvcmFyeSBzcGFjZSByZXF1 aXJlbWVudHMgZXhwbGFpbmVkIGJlbG93LAorICAgICAgIHRoZSA8bGl0ZXJhbD5DT05DVVJSRU5U TFk8L2xpdGVyYWw+IG9wdGlvbiBjYW4gYWRkIHRvIHRoZSB1c2FnZSBvZgorICAgICAgIHRlbXBv cmFyeSBzcGFjZSBhIGJpdCBtb3JlLiBUaGUgcmVhc29uIGlzIHRoYXQgb3RoZXIgdHJhbnNhY3Rp b25zIGNhbgorICAgICAgIHBlcmZvcm0gRE1MIG9wZXJhdGlvbnMgd2hpY2ggY2Fubm90IGJlIGFw cGxpZWQgdG8gdGhlIG5ldyBmaWxlIHVudGlsCisgICAgICAgPGNvbW1hbmQ+Q0xVU1RFUjwvY29t bWFuZD4gaGFzIGNvcGllZCBhbGwgdGhlIHR1cGxlcyBmcm9tIHRoZSBvbGQKKyAgICAgICBmaWxl LiBUaHVzIHRoZSB0dXBsZXMgaW5zZXJ0ZWQgaW50byB0aGUgb2xkIGZpbGUgZHVyaW5nIHRoZSBj b3B5aW5nIGFyZQorICAgICAgIGFsc28gc3RvcmVkIGluIHNlcGFyYXRlbHkgaW4gYSB0ZW1wb3Jh cnkgZmlsZSwgc28gdGhleSBjYW4gZXZlbnR1YWxseQorICAgICAgIGJlIGFwcGxpZWQgdG8gdGhl IG5ldyBmaWxlLgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICBGdXJ0aGVy bW9yZSwgdGhlIGRhdGEgY2hhbmdlcyBwZXJmb3JtZWQgZHVyaW5nIHRoZSBjb3B5aW5nIGFyZQor ICAgICAgIGV4dHJhY3RlZCBmcm9tIDxsaW5rIGxpbmtlbmQ9IndhbCI+d3JpdGUtYWhlYWQgbG9n PC9saW5rPiAoV0FMKSwgYW5kCisgICAgICAgdGhpcyBleHRyYWN0aW9uIChkZWNvZGluZykgb25s eSB0YWtlcyBwbGFjZSB3aGVuIGNlcnRhaW4gYW1vdW50IG9mIFdBTAorICAgICAgIGhhcyBiZWVu IHdyaXR0ZW4uIFRoZXJlZm9yZSwgV0FMIHJlbW92YWwgY2FuIGJlIGRlbGF5ZWQgYnkgdGhpcwor ICAgICAgIHRocmVzaG9sZC4gQ3VycmVudGx5IHRoZSB0aHJlc2hvbGQgaXMgZXF1YWwgdG8gdGhl IHZhbHVlIG9mCisgICAgICAgdGhlIDxsaW5rIGxpbmtlbmQ9Imd1Yy13YWwtc2VnbWVudC1zaXpl Ij48dmFybmFtZT53YWxfc2VnbWVudF9zaXplPC92YXJuYW1lPjwvbGluaz4KKyAgICAgICBjb25m aWd1cmF0aW9uIHBhcmFtZXRlci4KKyAgICAgIDwvcGFyYT4KKyAgICAgPC9ub3RlPgorCisgICAg IDxwYXJhPgorICAgICAgVGhlIDxsaXRlcmFsPkNPTkNVUlJFTlRMWTwvbGl0ZXJhbD4gb3B0aW9u IGNhbm5vdCBiZSB1c2VkIGluIHRoZQorICAgICAgZm9sbG93aW5nIGNhc2VzOgorCisgICAgICA8 aXRlbWl6ZWRsaXN0PgorICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAg ICAgVGhlIHRhYmxlIGlzIGEgc3lzdGVtIGNhdGFsb2cgb3IgYSA8YWNyb255bT5UT0FTVDwvYWNy b255bT4gdGFibGUuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICA8L2xpc3RpdGVtPgorCisgICAg ICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgIDxjb21tYW5kPkNMVVNURVI8 L2NvbW1hbmQ+IGlzIGV4ZWN1dGVkIGluc2lkZSBhIHRyYW5zYWN0aW9uIGJsb2NrLgorICAgICAg ICA8L3BhcmE+CisgICAgICAgPC9saXN0aXRlbT4KKworICAgICAgIDxsaXN0aXRlbT4KKyAgICAg ICAgPHBhcmE+CisgICAgICAgICAgVGhlIDxsaW5rIGxpbmtlbmQ9Imd1Yy13YWwtbGV2ZWwiPjx2 YXJuYW1lPndhbF9sZXZlbDwvdmFybmFtZT48L2xpbms+CisgICAgICAgICAgY29uZmlndXJhdGlv biBwYXJhbWV0ZXIgaXMgbGVzcyB0aGFuIDxsaXRlcmFsPmxvZ2ljYWw8L2xpdGVyYWw+LgorICAg ICAgICA8L3BhcmE+CisgICAgICAgPC9saXN0aXRlbT4KKworICAgICAgIDxsaXN0aXRlbT4KKyAg ICAgICAgPHBhcmE+CisgICAgICAgICBUaGUgPGxpbmsgbGlua2VuZD0iZ3VjLW1heC1yZXBsaWNh dGlvbi1zbG90cyI+PHZhcm5hbWU+bWF4X3JlcGxpY2F0aW9uX3Nsb3RzPC92YXJuYW1lPjwvbGlu az4KKyAgICAgICAgIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIGRvZXMgbm90IGFsbG93IGZvciBj cmVhdGlvbiBvZiBhbiBhZGRpdGlvbmFsCisgICAgICAgICByZXBsaWNhdGlvbiBzbG90LgorICAg ICAgICA8L3BhcmE+CisgICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDwvaXRlbWl6ZWRsaXN0Pgor ICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCiAgICA8 dmFybGlzdGVudHJ5PgogICAgIDx0ZXJtPjxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5i b29sZWFuPC9yZXBsYWNlYWJsZT48L3Rlcm0+CiAgICAgPGxpc3RpdGVtPgpkaWZmIC0tZ2l0IGEv ZG9jL3NyYy9zZ21sL3JlZi92YWN1dW0uc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvdmFjdXVtLnNn bWwKaW5kZXggOTg1N2IzNTYyNy4uMjk4Y2Y3Mjk4ZCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21s L3JlZi92YWN1dW0uc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL3ZhY3V1bS5zZ21sCkBAIC0z OSw2ICszOSw3IEBAIFZBQ1VVTSBbICggPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm9w dGlvbjwvcmVwbGFjZWFibGU+IFssIC4uLl0gKSBdIFsgPHJlCiAgICAgU0tJUF9EQVRBQkFTRV9T VEFUUyBbIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5ib29sZWFuPC9yZXBsYWNlYWJs ZT4gXQogICAgIE9OTFlfREFUQUJBU0VfU1RBVFMgWyA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFt ZXRlciI+Ym9vbGVhbjwvcmVwbGFjZWFibGU+IF0KICAgICBCVUZGRVJfVVNBR0VfTElNSVQgPHJl cGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnNpemU8L3JlcGxhY2VhYmxlPgorICAgIENPTkNV UlJFTlRMWSBbIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5ib29sZWFuPC9yZXBsYWNl YWJsZT4gXQogCiA8cGhyYXNlPmFuZCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+dGFi bGVfYW5kX2NvbHVtbnM8L3JlcGxhY2VhYmxlPiBpczo8L3BocmFzZT4KIApAQCAtNjEsOCArNjIs MTIgQEAgVkFDVVVNIFsgKCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+b3B0aW9uPC9y ZXBsYWNlYWJsZT4gWywgLi4uXSApIF0gWyA8cmUKICAgPHBhcmE+CiAgICBXaXRob3V0IGEgPHJl cGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnRhYmxlX2FuZF9jb2x1bW5zPC9yZXBsYWNlYWJs ZT4KICAgIGxpc3QsIDxjb21tYW5kPlZBQ1VVTTwvY29tbWFuZD4gcHJvY2Vzc2VzIGV2ZXJ5IHRh YmxlIGFuZCBtYXRlcmlhbGl6ZWQgdmlldwotICAgaW4gdGhlIGN1cnJlbnQgZGF0YWJhc2UgdGhh dCB0aGUgY3VycmVudCB1c2VyIGhhcyBwZXJtaXNzaW9uIHRvIHZhY3V1bS4KLSAgIFdpdGggYSBs aXN0LCA8Y29tbWFuZD5WQUNVVU08L2NvbW1hbmQ+IHByb2Nlc3NlcyBvbmx5IHRob3NlIHRhYmxl KHMpLgorICAgaW4gdGhlIGN1cnJlbnQgZGF0YWJhc2UgdGhhdCB0aGUgY3VycmVudCB1c2VyIGhh cyBwZXJtaXNzaW9uIHRvIHZhY3V1bS4gSWYKKyAgIHRoZSA8bGl0ZXJhbD5DT05DVVJSRU5UTFk8 L2xpdGVyYWw+IGlzIHNwZWNpZmllZCAoc2VlIGJlbG93KSwgdGFibGVzIHdoaWNoCisgICBoYXZl IG5vdCBiZWVuIGNsdXN0ZXJlZCB5ZXQgYXJlIHNpbGVudGx5IHNraXBwZWQuIFdpdGggYQorICAg bGlzdCwgPGNvbW1hbmQ+VkFDVVVNPC9jb21tYW5kPiBwcm9jZXNzZXMgb25seSB0aG9zZSB0YWJs ZShzKS4gSWYKKyAgIHRoZSA8bGl0ZXJhbD5DT05DVVJSRU5UTFk8L2xpdGVyYWw+IGlzIHNwZWNp ZmllZCwgdGhlIGxpc3QgbWF5IG9ubHkgY29udGFpbgorICAgdGFibGVzIHdoaWNoIGhhdmUgYWxy ZWFkeSBiZWVuIGNsdXN0ZXJlZC4KICAgPC9wYXJhPgogCiAgIDxwYXJhPgpAQCAtMzYwLDYgKzM2 NSwyNCBAQCBWQUNVVU0gWyAoIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5vcHRpb248 L3JlcGxhY2VhYmxlPiBbLCAuLi5dICkgXSBbIDxyZQogICAgIDwvbGlzdGl0ZW0+CiAgICA8L3Zh cmxpc3RlbnRyeT4KIAorICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT48bGl0ZXJhbD5DT05D VVJSRU5UTFk8L2xpdGVyYWw+PC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+Cisg ICAgICBBbGxvdyBvdGhlciB0cmFuc2FjdGlvbnMgdG8gdXNlIHRoZSB0YWJsZSB3aGlsZSBpdCBp cyBiZWluZyB2YWN1dW1lZC4gSWYKKyAgICAgIHRoaXMgb3B0aW9uIGlzIHNwZWNpZmllZCwgPGNv bW1hbmQ+VkFDVVVNPC9jb21tYW5kPiBjYW4gb25seSBwcm9jZXNzCisgICAgICB0YWJsZXMgd2hp Y2ggaGF2ZSBhbHJlYWR5IGJlZW4gY2x1c3RlcmVkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2Vl IHRoZQorICAgICAgZGVzY3JpcHRpb24gb2YgdGhlIDxsaXRlcmFsPkNPTkNVUlJFTlRMWTwvbGl0 ZXJhbD4gb2YgdGhlCisgICAgICA8eHJlZiBsaW5rZW5kPSJzcWwtY2x1c3RlciIvPiBjb21tYW5k LgorICAgICA8L3BhcmE+CisKKyAgICAgPHBhcmE+CisgICAgICBUaGUgPGxpdGVyYWw+Q09OQ1VS UkVOVExZPC9saXRlcmFsPiBvcHRpb24gY2FuIG9ubHkgYmUgdXNlZAorICAgICAgaWYgPGxpdGVy YWw+RlVMTDwvbGl0ZXJhbD4gaXMgdXNlZCBhdCB0aGUgc2FtZSB0aW1lLgorICAgICA8L3BhcmE+ CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCiAgICA8dmFybGlzdGVudHJ5 PgogICAgIDx0ZXJtPjxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5ib29sZWFuPC9yZXBs YWNlYWJsZT48L3Rlcm0+CiAgICAgPGxpc3RpdGVtPgpkaWZmIC0tZ2l0IGEvc3JjL01ha2VmaWxl IGIvc3JjL01ha2VmaWxlCmluZGV4IDJmMzFhMmYyMGEuLjhiOWQzMGZmNzIgMTAwNjQ0Ci0tLSBh L3NyYy9NYWtlZmlsZQorKysgYi9zcmMvTWFrZWZpbGUKQEAgLTIzLDYgKzIzLDcgQEAgU1VCRElS UyA9IFwKIAlpbnRlcmZhY2VzIFwKIAliYWNrZW5kL3JlcGxpY2F0aW9uL2xpYnBxd2FscmVjZWl2 ZXIgXAogCWJhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQgXAorCWJhY2tlbmQvcmVwbGljYXRp b24vcGdvdXRwdXRfY2x1c3RlciBcCiAJZmVfdXRpbHMgXAogCWJpbiBcCiAJcGwgXApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi90b2FzdF9pbnRlcm5hbHMuYyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy9jb21tb24vdG9hc3RfaW50ZXJuYWxzLmMKaW5kZXggOTBkMDY1NGU2Mi4u MTgzMDU1NjQ3YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi90b2FzdF9p bnRlcm5hbHMuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL3RvYXN0X2ludGVybmFs cy5jCkBAIC0zMjAsNyArMzIwLDggQEAgdG9hc3Rfc2F2ZV9kYXR1bShSZWxhdGlvbiByZWwsIERh dHVtIHZhbHVlLAogCQltZW1jcHkoVkFSREFUQSgmY2h1bmtfZGF0YSksIGRhdGFfcCwgY2h1bmtf c2l6ZSk7CiAJCXRvYXN0dHVwID0gaGVhcF9mb3JtX3R1cGxlKHRvYXN0dHVwRGVzYywgdF92YWx1 ZXMsIHRfaXNudWxsKTsKIAotCQloZWFwX2luc2VydCh0b2FzdHJlbCwgdG9hc3R0dXAsIG15Y2lk LCBvcHRpb25zLCBOVUxMKTsKKwkJaGVhcF9pbnNlcnQodG9hc3RyZWwsIHRvYXN0dHVwLCBHZXRD dXJyZW50VHJhbnNhY3Rpb25JZCgpLCBteWNpZCwKKwkJCQkJb3B0aW9ucywgTlVMTCk7CiAKIAkJ LyoKIAkJICogQ3JlYXRlIHRoZSBpbmRleCBlbnRyeS4gIFdlIGNoZWF0IGEgbGl0dGxlIGhlcmUg Ynkgbm90IHVzaW5nCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0u YyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jCmluZGV4IDkxYjIwMTQ3YTAuLjQ5 M2MzNTFkN2YgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jCisr KyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jCkBAIC03NSw3ICs3NSw4IEBAIHN0 YXRpYyBIZWFwVHVwbGUgaGVhcF9wcmVwYXJlX2luc2VydChSZWxhdGlvbiByZWxhdGlvbiwgSGVh cFR1cGxlIHR1cCwKIHN0YXRpYyBYTG9nUmVjUHRyIGxvZ19oZWFwX3VwZGF0ZShSZWxhdGlvbiBy ZWxuLCBCdWZmZXIgb2xkYnVmLAogCQkJCQkJCQkgIEJ1ZmZlciBuZXdidWYsIEhlYXBUdXBsZSBv bGR0dXAsCiAJCQkJCQkJCSAgSGVhcFR1cGxlIG5ld3R1cCwgSGVhcFR1cGxlIG9sZF9rZXlfdHVw bGUsCi0JCQkJCQkJCSAgYm9vbCBhbGxfdmlzaWJsZV9jbGVhcmVkLCBib29sIG5ld19hbGxfdmlz aWJsZV9jbGVhcmVkKTsKKwkJCQkJCQkJICBib29sIGFsbF92aXNpYmxlX2NsZWFyZWQsIGJvb2wg bmV3X2FsbF92aXNpYmxlX2NsZWFyZWQsCisJCQkJCQkJCSAgYm9vbCB3YWxfbG9naWNhbCk7CiBz dGF0aWMgQml0bWFwc2V0ICpIZWFwRGV0ZXJtaW5lQ29sdW1uc0luZm8oUmVsYXRpb24gcmVsYXRp b24sCiAJCQkJCQkJCQkJICAgQml0bWFwc2V0ICppbnRlcmVzdGluZ19jb2xzLAogCQkJCQkJCQkJ CSAgIEJpdG1hcHNldCAqZXh0ZXJuYWxfY29scywKQEAgLTE5NzUsNyArMTk3Niw3IEBAIFJlbGVh c2VCdWxrSW5zZXJ0U3RhdGVQaW4oQnVsa0luc2VydFN0YXRlIGJpc3RhdGUpCiAvKgogICoJaGVh cF9pbnNlcnQJCS0gaW5zZXJ0IHR1cGxlIGludG8gYSBoZWFwCiAgKgotICogVGhlIG5ldyB0dXBs ZSBpcyBzdGFtcGVkIHdpdGggY3VycmVudCB0cmFuc2FjdGlvbiBJRCBhbmQgdGhlIHNwZWNpZmll ZAorICogVGhlIG5ldyB0dXBsZSBpcyBzdGFtcGVkIHdpdGggc3BlY2lmaWVkIHRyYW5zYWN0aW9u IElEIGFuZCB0aGUgc3BlY2lmaWVkCiAgKiBjb21tYW5kIElELgogICoKICAqIFNlZSB0YWJsZV90 dXBsZV9pbnNlcnQgZm9yIGNvbW1lbnRzIGFib3V0IG1vc3Qgb2YgdGhlIGlucHV0IGZsYWdzLCBl eGNlcHQKQEAgLTE5OTEsMTUgKzE5OTIsMTYgQEAgUmVsZWFzZUJ1bGtJbnNlcnRTdGF0ZVBpbihC dWxrSW5zZXJ0U3RhdGUgYmlzdGF0ZSkKICAqIHJlZmxlY3RlZCBpbnRvICp0dXAuCiAgKi8KIHZv aWQKLWhlYXBfaW5zZXJ0KFJlbGF0aW9uIHJlbGF0aW9uLCBIZWFwVHVwbGUgdHVwLCBDb21tYW5k SWQgY2lkLAotCQkJaW50IG9wdGlvbnMsIEJ1bGtJbnNlcnRTdGF0ZSBiaXN0YXRlKQoraGVhcF9p bnNlcnQoUmVsYXRpb24gcmVsYXRpb24sIEhlYXBUdXBsZSB0dXAsIFRyYW5zYWN0aW9uSWQgeGlk LAorCQkJQ29tbWFuZElkIGNpZCwgaW50IG9wdGlvbnMsIEJ1bGtJbnNlcnRTdGF0ZSBiaXN0YXRl KQogewotCVRyYW5zYWN0aW9uSWQgeGlkID0gR2V0Q3VycmVudFRyYW5zYWN0aW9uSWQoKTsKIAlI ZWFwVHVwbGUJaGVhcHR1cDsKIAlCdWZmZXIJCWJ1ZmZlcjsKIAlCdWZmZXIJCXZtYnVmZmVyID0g SW52YWxpZEJ1ZmZlcjsKIAlib29sCQlhbGxfdmlzaWJsZV9jbGVhcmVkID0gZmFsc2U7CiAKKwlB c3NlcnQoVHJhbnNhY3Rpb25JZElzVmFsaWQoeGlkKSk7CisKIAkvKiBDaGVhcCwgc2ltcGxpc3Rp YyBjaGVjayB0aGF0IHRoZSB0dXBsZSBtYXRjaGVzIHRoZSByZWwncyByb3d0eXBlLiAqLwogCUFz c2VydChIZWFwVHVwbGVIZWFkZXJHZXROYXR0cyh0dXAtPnRfZGF0YSkgPD0KIAkJICAgUmVsYXRp b25HZXROdW1iZXJPZkF0dHJpYnV0ZXMocmVsYXRpb24pKTsKQEAgLTIwNzksOCArMjA4MSwxMyBA QCBoZWFwX2luc2VydChSZWxhdGlvbiByZWxhdGlvbiwgSGVhcFR1cGxlIHR1cCwgQ29tbWFuZElk IGNpZCwKIAkJLyoKIAkJICogSWYgdGhpcyBpcyBhIGNhdGFsb2csIHdlIG5lZWQgdG8gdHJhbnNt aXQgY29tYm8gQ0lEcyB0byBwcm9wZXJseQogCQkgKiBkZWNvZGUsIHNvIGxvZyB0aGF0IGFzIHdl bGwuCisJCSAqCisJCSAqIEN1cnJlbnRseSB3ZSBvbmx5IHBhc3MgSEVBUF9JTlNFUlRfTk9fTE9H SUNBTCB3aGVuIGRvaW5nIFZBQ1VVTQorCQkgKiBGVUxMIC8gQ0xVU1RFUiwgaW4gd2hpY2ggY2Fz ZSB0aGUgdmlzaWJpbGl0eSBpbmZvcm1hdGlvbiBkb2VzIG5vdAorCQkgKiBjaGFuZ2UuIFRoZXJl Zm9yZSwgdGhlcmUncyBubyBuZWVkIHRvIHVwZGF0ZSB0aGUgZGVjb2Rpbmcgc25hcHNob3QuCiAJ CSAqLwotCQlpZiAoUmVsYXRpb25Jc0FjY2Vzc2libGVJbkxvZ2ljYWxEZWNvZGluZyhyZWxhdGlv bikpCisJCWlmICgob3B0aW9ucyAmIEhFQVBfSU5TRVJUX05PX0xPR0lDQUwpID09IDAgJiYKKwkJ CVJlbGF0aW9uSXNBY2Nlc3NpYmxlSW5Mb2dpY2FsRGVjb2RpbmcocmVsYXRpb24pKQogCQkJbG9n X2hlYXBfbmV3X2NpZChyZWxhdGlvbiwgaGVhcHR1cCk7CiAKIAkJLyoKQEAgLTI2MjQsNyArMjYz MSw4IEBAIGhlYXBfbXVsdGlfaW5zZXJ0KFJlbGF0aW9uIHJlbGF0aW9uLCBUdXBsZVRhYmxlU2xv dCAqKnNsb3RzLCBpbnQgbnR1cGxlcywKIHZvaWQKIHNpbXBsZV9oZWFwX2luc2VydChSZWxhdGlv biByZWxhdGlvbiwgSGVhcFR1cGxlIHR1cCkKIHsKLQloZWFwX2luc2VydChyZWxhdGlvbiwgdHVw LCBHZXRDdXJyZW50Q29tbWFuZElkKHRydWUpLCAwLCBOVUxMKTsKKwloZWFwX2luc2VydChyZWxh dGlvbiwgdHVwLCBHZXRDdXJyZW50VHJhbnNhY3Rpb25JZCgpLAorCQkJCUdldEN1cnJlbnRDb21t YW5kSWQodHJ1ZSksIDAsIE5VTEwpOwogfQogCiAvKgpAQCAtMjY4MSwxMSArMjY4OSwxMSBAQCB4 bWF4X2luZm9tYXNrX2NoYW5nZWQodWludDE2IG5ld19pbmZvbWFzaywgdWludDE2IG9sZF9pbmZv bWFzaykKICAqLwogVE1fUmVzdWx0CiBoZWFwX2RlbGV0ZShSZWxhdGlvbiByZWxhdGlvbiwgSXRl bVBvaW50ZXIgdGlkLAotCQkJQ29tbWFuZElkIGNpZCwgU25hcHNob3QgY3Jvc3NjaGVjaywgYm9v bCB3YWl0LAotCQkJVE1fRmFpbHVyZURhdGEgKnRtZmQsIGJvb2wgY2hhbmdpbmdQYXJ0KQorCQkJ VHJhbnNhY3Rpb25JZCB4aWQsIENvbW1hbmRJZCBjaWQsIFNuYXBzaG90IGNyb3NzY2hlY2ssIGJv b2wgd2FpdCwKKwkJCVRNX0ZhaWx1cmVEYXRhICp0bWZkLCBib29sIGNoYW5naW5nUGFydCwKKwkJ CWJvb2wgd2FsX2xvZ2ljYWwpCiB7CiAJVE1fUmVzdWx0CXJlc3VsdDsKLQlUcmFuc2FjdGlvbklk IHhpZCA9IEdldEN1cnJlbnRUcmFuc2FjdGlvbklkKCk7CiAJSXRlbUlkCQlscDsKIAlIZWFwVHVw bGVEYXRhIHRwOwogCVBhZ2UJCXBhZ2U7CkBAIC0yNzAyLDYgKzI3MTAsNyBAQCBoZWFwX2RlbGV0 ZShSZWxhdGlvbiByZWxhdGlvbiwgSXRlbVBvaW50ZXIgdGlkLAogCWJvb2wJCW9sZF9rZXlfY29w aWVkID0gZmFsc2U7CiAKIAlBc3NlcnQoSXRlbVBvaW50ZXJJc1ZhbGlkKHRpZCkpOworCUFzc2Vy dChUcmFuc2FjdGlvbklkSXNWYWxpZCh4aWQpKTsKIAogCS8qCiAJICogRm9yYmlkIHRoaXMgZHVy aW5nIGEgcGFyYWxsZWwgb3BlcmF0aW9uLCBsZXN0IGl0IGFsbG9jYXRlIGEgY29tYm8gQ0lELgpA QCAtMjkyNyw3ICsyOTM2LDggQEAgbDE6CiAJICogQ29tcHV0ZSByZXBsaWNhIGlkZW50aXR5IHR1 cGxlIGJlZm9yZSBlbnRlcmluZyB0aGUgY3JpdGljYWwgc2VjdGlvbiBzbwogCSAqIHdlIGRvbid0 IFBBTklDIHVwb24gYSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlLgogCSAqLwotCW9sZF9rZXlf dHVwbGUgPSBFeHRyYWN0UmVwbGljYUlkZW50aXR5KHJlbGF0aW9uLCAmdHAsIHRydWUsICZvbGRf a2V5X2NvcGllZCk7CisJb2xkX2tleV90dXBsZSA9IHdhbF9sb2dpY2FsID8KKwkJRXh0cmFjdFJl cGxpY2FJZGVudGl0eShyZWxhdGlvbiwgJnRwLCB0cnVlLCAmb2xkX2tleV9jb3BpZWQpIDogTlVM TDsKIAogCS8qCiAJICogSWYgdGhpcyBpcyB0aGUgZmlyc3QgcG9zc2libHktbXVsdGl4YWN0LWFi bGUgb3BlcmF0aW9uIGluIHRoZSBjdXJyZW50CkBAIC0yOTk1LDggKzMwMDUsMTIgQEAgbDE6CiAJ CS8qCiAJCSAqIEZvciBsb2dpY2FsIGRlY29kZSB3ZSBuZWVkIGNvbWJvIENJRHMgdG8gcHJvcGVy bHkgZGVjb2RlIHRoZQogCQkgKiBjYXRhbG9nCisJCSAqCisJCSAqIExpa2UgaW4gaGVhcF9pbnNl cnQoKSwgdmlzaWJpbGl0eSBpcyB1bmNoYW5nZWQgd2hlbiBjYWxsZWQgZnJvbQorCQkgKiBWQUNV VU0gRlVMTCAvIENMVVNURVIuCiAJCSAqLwotCQlpZiAoUmVsYXRpb25Jc0FjY2Vzc2libGVJbkxv Z2ljYWxEZWNvZGluZyhyZWxhdGlvbikpCisJCWlmICh3YWxfbG9naWNhbCAmJgorCQkJUmVsYXRp b25Jc0FjY2Vzc2libGVJbkxvZ2ljYWxEZWNvZGluZyhyZWxhdGlvbikpCiAJCQlsb2dfaGVhcF9u ZXdfY2lkKHJlbGF0aW9uLCAmdHApOwogCiAJCXhscmVjLmZsYWdzID0gMDsKQEAgLTMwMTcsNiAr MzAzMSwxNSBAQCBsMToKIAkJCQl4bHJlYy5mbGFncyB8PSBYTEhfREVMRVRFX0NPTlRBSU5TX09M RF9LRVk7CiAJCX0KIAorCQkvKgorCQkgKiBVbmxpa2UgVVBEQVRFLCBERUxFVEUgaXMgZGVjb2Rl ZCBldmVuIGlmIHRoZXJlIGlzIG5vIG9sZCBrZXksIHNvIGl0CisJCSAqIGRvZXMgbm90IGhlbHAg dG8gY2xlYXIgYm90aCBYTEhfREVMRVRFX0NPTlRBSU5TX09MRF9UVVBMRSBhbmQKKwkJICogWExI X0RFTEVURV9DT05UQUlOU19PTERfS0VZLiBUaHVzIHdlIG5lZWQgYW4gZXh0cmEgZmxhZy4gVE9E TworCQkgKiBDb25zaWRlciBub3QgZGVjb2RpbmcgdHVwbGVzIHcvbyB0aGUgb2xkIHR1cGxlL2tl eSBpbnN0ZWFkLgorCQkgKi8KKwkJaWYgKCF3YWxfbG9naWNhbCkKKwkJCXhscmVjLmZsYWdzIHw9 IFhMSF9ERUxFVEVfTk9fTE9HSUNBTDsKKwogCQlYTG9nQmVnaW5JbnNlcnQoKTsKIAkJWExvZ1Jl Z2lzdGVyRGF0YSgoY2hhciAqKSAmeGxyZWMsIFNpemVPZkhlYXBEZWxldGUpOwogCkBAIC0zMTA2 LDEwICszMTI5LDExIEBAIHNpbXBsZV9oZWFwX2RlbGV0ZShSZWxhdGlvbiByZWxhdGlvbiwgSXRl bVBvaW50ZXIgdGlkKQogCVRNX1Jlc3VsdAlyZXN1bHQ7CiAJVE1fRmFpbHVyZURhdGEgdG1mZDsK IAotCXJlc3VsdCA9IGhlYXBfZGVsZXRlKHJlbGF0aW9uLCB0aWQsCisJcmVzdWx0ID0gaGVhcF9k ZWxldGUocmVsYXRpb24sIHRpZCwgR2V0Q3VycmVudFRyYW5zYWN0aW9uSWQoKSwKIAkJCQkJCSBH ZXRDdXJyZW50Q29tbWFuZElkKHRydWUpLCBJbnZhbGlkU25hcHNob3QsCiAJCQkJCQkgdHJ1ZSAv KiB3YWl0IGZvciBjb21taXQgKi8gLAotCQkJCQkJICZ0bWZkLCBmYWxzZSAvKiBjaGFuZ2luZ1Bh cnQgKi8gKTsKKwkJCQkJCSAmdG1mZCwgZmFsc2UsIC8qIGNoYW5naW5nUGFydCAqLworCQkJCQkJ IHRydWUgLyogd2FsX2xvZ2ljYWwgKi8pOwogCXN3aXRjaCAocmVzdWx0KQogCXsKIAkJY2FzZSBU TV9TZWxmTW9kaWZpZWQ6CkBAIC0zMTQ4LDEyICszMTcyLDExIEBAIHNpbXBsZV9oZWFwX2RlbGV0 ZShSZWxhdGlvbiByZWxhdGlvbiwgSXRlbVBvaW50ZXIgdGlkKQogICovCiBUTV9SZXN1bHQKIGhl YXBfdXBkYXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBJdGVtUG9pbnRlciBvdGlkLCBIZWFwVHVwbGUg bmV3dHVwLAotCQkJQ29tbWFuZElkIGNpZCwgU25hcHNob3QgY3Jvc3NjaGVjaywgYm9vbCB3YWl0 LAotCQkJVE1fRmFpbHVyZURhdGEgKnRtZmQsIExvY2tUdXBsZU1vZGUgKmxvY2ttb2RlLAotCQkJ VFVfVXBkYXRlSW5kZXhlcyAqdXBkYXRlX2luZGV4ZXMpCisJCQlUcmFuc2FjdGlvbklkIHhpZCwg Q29tbWFuZElkIGNpZCwgU25hcHNob3QgY3Jvc3NjaGVjaywKKwkJCWJvb2wgd2FpdCwgVE1fRmFp bHVyZURhdGEgKnRtZmQsIExvY2tUdXBsZU1vZGUgKmxvY2ttb2RlLAorCQkJVFVfVXBkYXRlSW5k ZXhlcyAqdXBkYXRlX2luZGV4ZXMsIGJvb2wgd2FsX2xvZ2ljYWwpCiB7CiAJVE1fUmVzdWx0CXJl c3VsdDsKLQlUcmFuc2FjdGlvbklkIHhpZCA9IEdldEN1cnJlbnRUcmFuc2FjdGlvbklkKCk7CiAJ Qml0bWFwc2V0ICAqaG90X2F0dHJzOwogCUJpdG1hcHNldCAgKnN1bV9hdHRyczsKIAlCaXRtYXBz ZXQgICprZXlfYXR0cnM7CkBAIC0zMTkzLDYgKzMyMTYsNyBAQCBoZWFwX3VwZGF0ZShSZWxhdGlv biByZWxhdGlvbiwgSXRlbVBvaW50ZXIgb3RpZCwgSGVhcFR1cGxlIG5ld3R1cCwKIAkJCQlpbmZv bWFzazJfbmV3X3R1cGxlOwogCiAJQXNzZXJ0KEl0ZW1Qb2ludGVySXNWYWxpZChvdGlkKSk7CisJ QXNzZXJ0KFRyYW5zYWN0aW9uSWRJc1ZhbGlkKHhpZCkpOwogCiAJLyogQ2hlYXAsIHNpbXBsaXN0 aWMgY2hlY2sgdGhhdCB0aGUgdHVwbGUgbWF0Y2hlcyB0aGUgcmVsJ3Mgcm93dHlwZS4gKi8KIAlB c3NlcnQoSGVhcFR1cGxlSGVhZGVyR2V0TmF0dHMobmV3dHVwLT50X2RhdGEpIDw9CkBAIC0zOTgx LDggKzQwMDUsMTIgQEAgbDI6CiAJCS8qCiAJCSAqIEZvciBsb2dpY2FsIGRlY29kaW5nIHdlIG5l ZWQgY29tYm8gQ0lEcyB0byBwcm9wZXJseSBkZWNvZGUgdGhlCiAJCSAqIGNhdGFsb2cuCisJCSAq CisJCSAqIExpa2UgaW4gaGVhcF9pbnNlcnQoKSwgdmlzaWJpbGl0eSBpcyB1bmNoYW5nZWQgd2hl biBjYWxsZWQgZnJvbQorCQkgKiBWQUNVVU0gRlVMTCAvIENMVVNURVIuCiAJCSAqLwotCQlpZiAo UmVsYXRpb25Jc0FjY2Vzc2libGVJbkxvZ2ljYWxEZWNvZGluZyhyZWxhdGlvbikpCisJCWlmICh3 YWxfbG9naWNhbCAmJgorCQkJUmVsYXRpb25Jc0FjY2Vzc2libGVJbkxvZ2ljYWxEZWNvZGluZyhy ZWxhdGlvbikpCiAJCXsKIAkJCWxvZ19oZWFwX25ld19jaWQocmVsYXRpb24sICZvbGR0dXApOwog CQkJbG9nX2hlYXBfbmV3X2NpZChyZWxhdGlvbiwgaGVhcHR1cCk7CkBAIC0zOTkyLDcgKzQwMjAs OCBAQCBsMjoKIAkJCQkJCQkJIG5ld2J1ZiwgJm9sZHR1cCwgaGVhcHR1cCwKIAkJCQkJCQkJIG9s ZF9rZXlfdHVwbGUsCiAJCQkJCQkJCSBhbGxfdmlzaWJsZV9jbGVhcmVkLAotCQkJCQkJCQkgYWxs X3Zpc2libGVfY2xlYXJlZF9uZXcpOworCQkJCQkJCQkgYWxsX3Zpc2libGVfY2xlYXJlZF9uZXcs CisJCQkJCQkJCSB3YWxfbG9naWNhbCk7CiAJCWlmIChuZXdidWYgIT0gYnVmZmVyKQogCQl7CiAJ CQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UobmV3YnVmKSwgcmVjcHRyKTsKQEAgLTQyMjUsMTAg KzQyNTQsMTAgQEAgc2ltcGxlX2hlYXBfdXBkYXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBJdGVtUG9p bnRlciBvdGlkLCBIZWFwVHVwbGUgdHVwLAogCVRNX0ZhaWx1cmVEYXRhIHRtZmQ7CiAJTG9ja1R1 cGxlTW9kZSBsb2NrbW9kZTsKIAotCXJlc3VsdCA9IGhlYXBfdXBkYXRlKHJlbGF0aW9uLCBvdGlk LCB0dXAsCisJcmVzdWx0ID0gaGVhcF91cGRhdGUocmVsYXRpb24sIG90aWQsIHR1cCwgR2V0Q3Vy cmVudFRyYW5zYWN0aW9uSWQoKSwKIAkJCQkJCSBHZXRDdXJyZW50Q29tbWFuZElkKHRydWUpLCBJ bnZhbGlkU25hcHNob3QsCiAJCQkJCQkgdHJ1ZSAvKiB3YWl0IGZvciBjb21taXQgKi8gLAotCQkJ CQkJICZ0bWZkLCAmbG9ja21vZGUsIHVwZGF0ZV9pbmRleGVzKTsKKwkJCQkJCSAmdG1mZCwgJmxv Y2ttb2RlLCB1cGRhdGVfaW5kZXhlcywgdHJ1ZSk7CiAJc3dpdGNoIChyZXN1bHQpCiAJewogCQlj YXNlIFRNX1NlbGZNb2RpZmllZDoKQEAgLTgzNTcsNyArODM4Niw4IEBAIHN0YXRpYyBYTG9nUmVj UHRyCiBsb2dfaGVhcF91cGRhdGUoUmVsYXRpb24gcmVsbiwgQnVmZmVyIG9sZGJ1ZiwKIAkJCQlC dWZmZXIgbmV3YnVmLCBIZWFwVHVwbGUgb2xkdHVwLCBIZWFwVHVwbGUgbmV3dHVwLAogCQkJCUhl YXBUdXBsZSBvbGRfa2V5X3R1cGxlLAotCQkJCWJvb2wgYWxsX3Zpc2libGVfY2xlYXJlZCwgYm9v bCBuZXdfYWxsX3Zpc2libGVfY2xlYXJlZCkKKwkJCQlib29sIGFsbF92aXNpYmxlX2NsZWFyZWQs IGJvb2wgbmV3X2FsbF92aXNpYmxlX2NsZWFyZWQsCisJCQkJYm9vbCB3YWxfbG9naWNhbCkKIHsK IAl4bF9oZWFwX3VwZGF0ZSB4bHJlYzsKIAl4bF9oZWFwX2hlYWRlciB4bGhkcjsKQEAgLTgzNjgs MTAgKzgzOTgsMTIgQEAgbG9nX2hlYXBfdXBkYXRlKFJlbGF0aW9uIHJlbG4sIEJ1ZmZlciBvbGRi dWYsCiAJCQkJc3VmZml4bGVuID0gMDsKIAlYTG9nUmVjUHRyCXJlY3B0cjsKIAlQYWdlCQlwYWdl ID0gQnVmZmVyR2V0UGFnZShuZXdidWYpOwotCWJvb2wJCW5lZWRfdHVwbGVfZGF0YSA9IFJlbGF0 aW9uSXNMb2dpY2FsbHlMb2dnZWQocmVsbik7CisJYm9vbAkJbmVlZF90dXBsZV9kYXRhOwogCWJv b2wJCWluaXQ7CiAJaW50CQkJYnVmZmxhZ3M7CiAKKwluZWVkX3R1cGxlX2RhdGEgPSBSZWxhdGlv bklzTG9naWNhbGx5TG9nZ2VkKHJlbG4pICYmIHdhbF9sb2dpY2FsOworCiAJLyogQ2FsbGVyIHNo b3VsZCBub3QgY2FsbCBtZSBvbiBhIG5vbi1XQUwtbG9nZ2VkIHJlbGF0aW9uICovCiAJQXNzZXJ0 KFJlbGF0aW9uTmVlZHNXQUwocmVsbikpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nl c3MvaGVhcC9oZWFwYW1faGFuZGxlci5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFt X2hhbmRsZXIuYwppbmRleCA2ZjhiMWI3OTI5Li4wMmZkNmQyOTgzIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCisrKyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJj YXRhbG9nL2luZGV4LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9zdG9yYWdlLmgiCiAjaW5jbHVkZSAi Y2F0YWxvZy9zdG9yYWdlX3hsb2cuaCIKKyNpbmNsdWRlICJjb21tYW5kcy9jbHVzdGVyLmgiCiAj aW5jbHVkZSAiY29tbWFuZHMvcHJvZ3Jlc3MuaCIKICNpbmNsdWRlICJleGVjdXRvci9leGVjdXRv ci5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgpAQCAtNTMsNiArNTQsOSBAQCBzdGF0aWMgdm9p ZCByZWZvcm1fYW5kX3Jld3JpdGVfdHVwbGUoSGVhcFR1cGxlIHR1cGxlLAogc3RhdGljIGJvb2wg U2FtcGxlSGVhcFR1cGxlVmlzaWJsZShUYWJsZVNjYW5EZXNjIHNjYW4sIEJ1ZmZlciBidWZmZXIs CiAJCQkJCQkJCSAgIEhlYXBUdXBsZSB0dXBsZSwKIAkJCQkJCQkJICAgT2Zmc2V0TnVtYmVyIHR1 cG9mZnNldCk7CitzdGF0aWMgYm9vbCBhY2NlcHRfdHVwbGVfZm9yX2NvbmN1cnJlbnRfY29weShI ZWFwVHVwbGUgdHVwbGUsCisJCQkJCQkJCQkJCSBTbmFwc2hvdCBzbmFwc2hvdCwKKwkJCQkJCQkJ CQkJIEJ1ZmZlciBidWZmZXIpOwogCiBzdGF0aWMgQmxvY2tOdW1iZXIgaGVhcGFtX3NjYW5fZ2V0 X2Jsb2Nrc19kb25lKEhlYXBTY2FuRGVzYyBoc2Nhbik7CiAKQEAgLTI1MCw3ICsyNTQsOCBAQCBo ZWFwYW1fdHVwbGVfaW5zZXJ0KFJlbGF0aW9uIHJlbGF0aW9uLCBUdXBsZVRhYmxlU2xvdCAqc2xv dCwgQ29tbWFuZElkIGNpZCwKIAl0dXBsZS0+dF90YWJsZU9pZCA9IHNsb3QtPnR0c190YWJsZU9p ZDsKIAogCS8qIFBlcmZvcm0gdGhlIGluc2VydGlvbiwgYW5kIGNvcHkgdGhlIHJlc3VsdGluZyBJ dGVtUG9pbnRlciAqLwotCWhlYXBfaW5zZXJ0KHJlbGF0aW9uLCB0dXBsZSwgY2lkLCBvcHRpb25z LCBiaXN0YXRlKTsKKwloZWFwX2luc2VydChyZWxhdGlvbiwgdHVwbGUsIEdldEN1cnJlbnRUcmFu c2FjdGlvbklkKCksIGNpZCwgb3B0aW9ucywKKwkJCQliaXN0YXRlKTsKIAlJdGVtUG9pbnRlckNv cHkoJnR1cGxlLT50X3NlbGYsICZzbG90LT50dHNfdGlkKTsKIAogCWlmIChzaG91bGRGcmVlKQpA QCAtMjczLDcgKzI3OCw4IEBAIGhlYXBhbV90dXBsZV9pbnNlcnRfc3BlY3VsYXRpdmUoUmVsYXRp b24gcmVsYXRpb24sIFR1cGxlVGFibGVTbG90ICpzbG90LAogCW9wdGlvbnMgfD0gSEVBUF9JTlNF UlRfU1BFQ1VMQVRJVkU7CiAKIAkvKiBQZXJmb3JtIHRoZSBpbnNlcnRpb24sIGFuZCBjb3B5IHRo ZSByZXN1bHRpbmcgSXRlbVBvaW50ZXIgKi8KLQloZWFwX2luc2VydChyZWxhdGlvbiwgdHVwbGUs IGNpZCwgb3B0aW9ucywgYmlzdGF0ZSk7CisJaGVhcF9pbnNlcnQocmVsYXRpb24sIHR1cGxlLCBH ZXRDdXJyZW50VHJhbnNhY3Rpb25JZCgpLCBjaWQsIG9wdGlvbnMsCisJCQkJYmlzdGF0ZSk7CiAJ SXRlbVBvaW50ZXJDb3B5KCZ0dXBsZS0+dF9zZWxmLCAmc2xvdC0+dHRzX3RpZCk7CiAKIAlpZiAo c2hvdWxkRnJlZSkKQEAgLTMwNyw3ICszMTMsOCBAQCBoZWFwYW1fdHVwbGVfZGVsZXRlKFJlbGF0 aW9uIHJlbGF0aW9uLCBJdGVtUG9pbnRlciB0aWQsIENvbW1hbmRJZCBjaWQsCiAJICogdGhlIHN0 b3JhZ2UgaXRzZWxmIGlzIGNsZWFuaW5nIHRoZSBkZWFkIHR1cGxlcyBieSBpdHNlbGYsIGl0IGlz IHRoZQogCSAqIHRpbWUgdG8gY2FsbCB0aGUgaW5kZXggdHVwbGUgZGVsZXRpb24gYWxzby4KIAkg Ki8KLQlyZXR1cm4gaGVhcF9kZWxldGUocmVsYXRpb24sIHRpZCwgY2lkLCBjcm9zc2NoZWNrLCB3 YWl0LCB0bWZkLCBjaGFuZ2luZ1BhcnQpOworCXJldHVybiBoZWFwX2RlbGV0ZShyZWxhdGlvbiwg dGlkLCBHZXRDdXJyZW50VHJhbnNhY3Rpb25JZCgpLCBjaWQsCisJCQkJCSAgIGNyb3NzY2hlY2ss IHdhaXQsIHRtZmQsIGNoYW5naW5nUGFydCwgdHJ1ZSk7CiB9CiAKIApAQCAtMzI1LDggKzMzMiw5 IEBAIGhlYXBhbV90dXBsZV91cGRhdGUoUmVsYXRpb24gcmVsYXRpb24sIEl0ZW1Qb2ludGVyIG90 aWQsIFR1cGxlVGFibGVTbG90ICpzbG90LAogCXNsb3QtPnR0c190YWJsZU9pZCA9IFJlbGF0aW9u R2V0UmVsaWQocmVsYXRpb24pOwogCXR1cGxlLT50X3RhYmxlT2lkID0gc2xvdC0+dHRzX3RhYmxl T2lkOwogCi0JcmVzdWx0ID0gaGVhcF91cGRhdGUocmVsYXRpb24sIG90aWQsIHR1cGxlLCBjaWQs IGNyb3NzY2hlY2ssIHdhaXQsCi0JCQkJCQkgdG1mZCwgbG9ja21vZGUsIHVwZGF0ZV9pbmRleGVz KTsKKwlyZXN1bHQgPSBoZWFwX3VwZGF0ZShyZWxhdGlvbiwgb3RpZCwgdHVwbGUsIEdldEN1cnJl bnRUcmFuc2FjdGlvbklkKCksCisJCQkJCQkgY2lkLCBjcm9zc2NoZWNrLCB3YWl0LAorCQkJCQkJ IHRtZmQsIGxvY2ttb2RlLCB1cGRhdGVfaW5kZXhlcywgdHJ1ZSk7CiAJSXRlbVBvaW50ZXJDb3B5 KCZ0dXBsZS0+dF9zZWxmLCAmc2xvdC0+dHRzX3RpZCk7CiAKIAkvKgpAQCAtNjg2LDYgKzY5NCw4 IEBAIHN0YXRpYyB2b2lkCiBoZWFwYW1fcmVsYXRpb25fY29weV9mb3JfY2x1c3RlcihSZWxhdGlv biBPbGRIZWFwLCBSZWxhdGlvbiBOZXdIZWFwLAogCQkJCQkJCQkgUmVsYXRpb24gT2xkSW5kZXgs IGJvb2wgdXNlX3NvcnQsCiAJCQkJCQkJCSBUcmFuc2FjdGlvbklkIE9sZGVzdFhtaW4sCisJCQkJ CQkJCSBTbmFwc2hvdCBzbmFwc2hvdCwKKwkJCQkJCQkJIExvZ2ljYWxEZWNvZGluZ0NvbnRleHQg KmRlY29kaW5nX2N0eCwKIAkJCQkJCQkJIFRyYW5zYWN0aW9uSWQgKnhpZF9jdXRvZmYsCiAJCQkJ CQkJCSBNdWx0aVhhY3RJZCAqbXVsdGlfY3V0b2ZmLAogCQkJCQkJCQkgZG91YmxlICpudW1fdHVw bGVzLApAQCAtNzA2LDYgKzcxNiw4IEBAIGhlYXBhbV9yZWxhdGlvbl9jb3B5X2Zvcl9jbHVzdGVy KFJlbGF0aW9uIE9sZEhlYXAsIFJlbGF0aW9uIE5ld0hlYXAsCiAJYm9vbAkgICAqaXNudWxsOwog CUJ1ZmZlckhlYXBUdXBsZVRhYmxlU2xvdCAqaHNsb3Q7CiAJQmxvY2tOdW1iZXIgcHJldl9jYmxv Y2sgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CisJYm9vbAljb25jdXJyZW50ID0gc25hcHNob3QgIT0g TlVMTDsKKwlYTG9nUmVjUHRyCWVuZF9vZl93YWxfcHJldiA9IEdldEZsdXNoUmVjUHRyKE5VTEwp OwogCiAJLyogUmVtZW1iZXIgaWYgaXQncyBhIHN5c3RlbSBjYXRhbG9nICovCiAJaXNfc3lzdGVt X2NhdGFsb2cgPSBJc1N5c3RlbVJlbGF0aW9uKE9sZEhlYXApOwpAQCAtNzg2LDYgKzc5OCw3IEBA IGhlYXBhbV9yZWxhdGlvbl9jb3B5X2Zvcl9jbHVzdGVyKFJlbGF0aW9uIE9sZEhlYXAsIFJlbGF0 aW9uIE5ld0hlYXAsCiAJCUhlYXBUdXBsZQl0dXBsZTsKIAkJQnVmZmVyCQlidWY7CiAJCWJvb2wJ CWlzZGVhZDsKKwkJSFRTVl9SZXN1bHQJdmlzOwogCiAJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7 CiAKQEAgLTg0MCw3ICs4NTMsNyBAQCBoZWFwYW1fcmVsYXRpb25fY29weV9mb3JfY2x1c3RlcihS ZWxhdGlvbiBPbGRIZWFwLCBSZWxhdGlvbiBOZXdIZWFwLAogCiAJCUxvY2tCdWZmZXIoYnVmLCBC VUZGRVJfTE9DS19TSEFSRSk7CiAKLQkJc3dpdGNoIChIZWFwVHVwbGVTYXRpc2ZpZXNWYWN1dW0o dHVwbGUsIE9sZGVzdFhtaW4sIGJ1ZikpCisJCXN3aXRjaCAoKHZpcyA9IEhlYXBUdXBsZVNhdGlz Zmllc1ZhY3V1bSh0dXBsZSwgT2xkZXN0WG1pbiwgYnVmKSkpCiAJCXsKIAkJCWNhc2UgSEVBUFRV UExFX0RFQUQ6CiAJCQkJLyogRGVmaW5pdGVseSBkZWFkICovCkBAIC04NTYsMTQgKzg2OSwxNSBA QCBoZWFwYW1fcmVsYXRpb25fY29weV9mb3JfY2x1c3RlcihSZWxhdGlvbiBPbGRIZWFwLCBSZWxh dGlvbiBOZXdIZWFwLAogCQkJY2FzZSBIRUFQVFVQTEVfSU5TRVJUX0lOX1BST0dSRVNTOgogCiAJ CQkJLyoKLQkJCQkgKiBTaW5jZSB3ZSBob2xkIGV4Y2x1c2l2ZSBsb2NrIG9uIHRoZSByZWxhdGlv biwgbm9ybWFsbHkgdGhlCi0JCQkJICogb25seSB3YXkgdG8gc2VlIHRoaXMgaXMgaWYgaXQgd2Fz IGluc2VydGVkIGVhcmxpZXIgaW4gb3VyCi0JCQkJICogb3duIHRyYW5zYWN0aW9uLiAgSG93ZXZl ciwgaXQgY2FuIGhhcHBlbiBpbiBzeXN0ZW0KKwkJCQkgKiBBcyBsb25nIGFzIHdlIGhvbGQgZXhj bHVzaXZlIGxvY2sgb24gdGhlIHJlbGF0aW9uLCBub3JtYWxseQorCQkJCSAqIHRoZSBvbmx5IHdh eSB0byBzZWUgdGhpcyBpcyBpZiBpdCB3YXMgaW5zZXJ0ZWQgZWFybGllciBpbgorCQkJCSAqIG91 ciBvd24gdHJhbnNhY3Rpb24uICBIb3dldmVyLCBpdCBjYW4gaGFwcGVuIGluIHN5c3RlbQogCQkJ CSAqIGNhdGFsb2dzLCBzaW5jZSB3ZSB0ZW5kIHRvIHJlbGVhc2Ugd3JpdGUgbG9jayBiZWZvcmUg Y29tbWl0Ci0JCQkJICogdGhlcmUuICBHaXZlIGEgd2FybmluZyBpZiBuZWl0aGVyIGNhc2UgYXBw bGllczsgYnV0IGluIGFueQotCQkJCSAqIGNhc2Ugd2UgaGFkIGJldHRlciBjb3B5IGl0LgorCQkJ CSAqIHRoZXJlLiBBbHNvLCB0aGVyZSdzIG5vIGV4Y2x1c2l2ZSBsb2NrIGR1cmluZyBjb25jdXJy ZW50CisJCQkJICogcHJvY2Vzc2luZy4gR2l2ZSBhIHdhcm5pbmcgaWYgbmVpdGhlciBjYXNlIGFw cGxpZXM7IGJ1dCBpbgorCQkJCSAqIGFueSBjYXNlIHdlIGhhZCBiZXR0ZXIgY29weSBpdC4KIAkJ CQkgKi8KLQkJCQlpZiAoIWlzX3N5c3RlbV9jYXRhbG9nICYmCisJCQkJaWYgKCFpc19zeXN0ZW1f Y2F0YWxvZyAmJiAhY29uY3VycmVudCAmJgogCQkJCQkhVHJhbnNhY3Rpb25JZElzQ3VycmVudFRy YW5zYWN0aW9uSWQoSGVhcFR1cGxlSGVhZGVyR2V0WG1pbih0dXBsZS0+dF9kYXRhKSkpCiAJCQkJ CWVsb2coV0FSTklORywgImNvbmN1cnJlbnQgaW5zZXJ0IGluIHByb2dyZXNzIHdpdGhpbiB0YWJs ZSBcIiVzXCIiLAogCQkJCQkJIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKE9sZEhlYXApKTsKQEAg LTg3NSw3ICs4ODksNyBAQCBoZWFwYW1fcmVsYXRpb25fY29weV9mb3JfY2x1c3RlcihSZWxhdGlv biBPbGRIZWFwLCBSZWxhdGlvbiBOZXdIZWFwLAogCQkJCS8qCiAJCQkJICogU2ltaWxhciBzaXR1 YXRpb24gdG8gSU5TRVJUX0lOX1BST0dSRVNTIGNhc2UuCiAJCQkJICovCi0JCQkJaWYgKCFpc19z eXN0ZW1fY2F0YWxvZyAmJgorCQkJCWlmICghaXNfc3lzdGVtX2NhdGFsb2cgJiYgIWNvbmN1cnJl bnQgJiYKIAkJCQkJIVRyYW5zYWN0aW9uSWRJc0N1cnJlbnRUcmFuc2FjdGlvbklkKEhlYXBUdXBs ZUhlYWRlckdldFVwZGF0ZVhpZCh0dXBsZS0+dF9kYXRhKSkpCiAJCQkJCWVsb2coV0FSTklORywg ImNvbmN1cnJlbnQgZGVsZXRlIGluIHByb2dyZXNzIHdpdGhpbiB0YWJsZSBcIiVzXCIiLAogCQkJ CQkJIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKE9sZEhlYXApKTsKQEAgLTg4OSw4ICs5MDMsNiBA QCBoZWFwYW1fcmVsYXRpb25fY29weV9mb3JfY2x1c3RlcihSZWxhdGlvbiBPbGRIZWFwLCBSZWxh dGlvbiBOZXdIZWFwLAogCQkJCWJyZWFrOwogCQl9CiAKLQkJTG9ja0J1ZmZlcihidWYsIEJVRkZF Ul9MT0NLX1VOTE9DSyk7Ci0KIAkJaWYgKGlzZGVhZCkKIAkJewogCQkJKnR1cHNfdmFjdXVtZWQg Kz0gMTsKQEAgLTkwMSw5ICs5MTMsMzkgQEAgaGVhcGFtX3JlbGF0aW9uX2NvcHlfZm9yX2NsdXN0 ZXIoUmVsYXRpb24gT2xkSGVhcCwgUmVsYXRpb24gTmV3SGVhcCwKIAkJCQkqdHVwc192YWN1dW1l ZCArPSAxOwogCQkJCSp0dXBzX3JlY2VudGx5X2RlYWQgLT0gMTsKIAkJCX0KKworCQkJTG9ja0J1 ZmZlcihidWYsIEJVRkZFUl9MT0NLX1VOTE9DSyk7CiAJCQljb250aW51ZTsKIAkJfQogCisJCS8q CisJCSAqIElnbm9yZSBjb25jdXJyZW50IGNoYW5nZXMgbm93LCB0aGV5J2xsIGJlIHByb2Nlc3Nl ZCBsYXRlciB2aWEKKwkJICogbG9naWNhbCBkZWNvZGluZy4gSU5TRVJUX0lOX1BST0dSRVNTIGlz IHJlamVjdGVkIHJpZ2h0IGF3YXkgYmVjYXVzZQorCQkgKiBvdXIgc25hcHNob3Qgc2hvdWxkIHJl cHJlc2VudCBhIHBvaW50IGluIHRpbWUgd2hpY2ggc2hvdWxkIHByZWNlZGUKKwkJICogKG9yIGJl IGVxdWFsIHRvKSB0aGUgc3RhdGUgb2YgdHJhbnNhY3Rpb25zIGFzIGl0IHdhcyB3aGVuIHRoZQor CQkgKiAiU2F0aXNmaWVzVmFjdXVtIiB0ZXN0IHdhcyBwZXJmb3JtZWQuIFRodXMKKwkJICogYWNj ZXB0X3R1cGxlX2Zvcl9jb25jdXJyZW50X2NvcHkoKSBzaG91bGQgbm90IGNvbnNpZGVyIHRoZSB0 dXBsZQorCQkgKiBpbnNlcnRlZC4KKwkJICovCisJCWlmIChjb25jdXJyZW50ICYmCisJCQkodmlz ID09IEhFQVBUVVBMRV9JTlNFUlRfSU5fUFJPR1JFU1MgfHwKKwkJCSAhYWNjZXB0X3R1cGxlX2Zv cl9jb25jdXJyZW50X2NvcHkodHVwbGUsIHNuYXBzaG90LCBidWYpKSkKKwkJeworCQkJTG9ja0J1 ZmZlcihidWYsIEJVRkZFUl9MT0NLX1VOTE9DSyk7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8q CisJCSAqIEluIHRoZSBjb25jdXJyZW50IGNhc2UsIHdlIHNob3VsZCBub3QgdW5sb2NrIHRoZSBi dWZmZXIgdW50aWwgdGhlCisJCSAqIHR1cGxlIGhhcyBiZWVuIGNvcGllZCB0byB0aGUgbmV3IGZp bGU6IGlmIGEgY29uY3VycmVudCB0cmFuc2FjdGlvbgorCQkgKiBtYXJrZWQgaXQgdXBkYXRlZCBv ciBkZWxldGVkIGluIGJldHdlZW4sIHdlJ2QgZmFpbCB0byByZXBsYXkgdGhhdAorCQkgKiB0cmFu c2FjdGlvbidzIGNoYW5nZXMgYmVjYXVzZSB0aGVuIHdlJ2QgdHJ5IHRvIHBlcmZvcm0gdGhlIHNh bWUKKwkJICogVVBEQVRFIC8gREVMRVRFIHR3aWNlLiBYWFggU2hvdWxkIHdlIGluc3RlYWQgY3Jl YXRlIGEgY29weSBvZiB0aGUKKwkJICogdHVwbGUgc28gdGhhdCB0aGUgYnVmZmVyIGNhbiBiZSB1 bmxvY2tlZCByaWdodCBhd2F5PworCQkgKi8KKwkJaWYgKCFjb25jdXJyZW50KQorCQkJTG9ja0J1 ZmZlcihidWYsIEJVRkZFUl9MT0NLX1VOTE9DSyk7CisKIAkJKm51bV90dXBsZXMgKz0gMTsKIAkJ aWYgKHR1cGxlc29ydCAhPSBOVUxMKQogCQl7CkBAIC05MjAsNyArOTYyLDcgQEAgaGVhcGFtX3Jl bGF0aW9uX2NvcHlfZm9yX2NsdXN0ZXIoUmVsYXRpb24gT2xkSGVhcCwgUmVsYXRpb24gTmV3SGVh cCwKIAkJewogCQkJY29uc3QgaW50CWN0X2luZGV4W10gPSB7CiAJCQkJUFJPR1JFU1NfQ0xVU1RF Ul9IRUFQX1RVUExFU19TQ0FOTkVELAotCQkJCVBST0dSRVNTX0NMVVNURVJfSEVBUF9UVVBMRVNf V1JJVFRFTgorCQkJCVBST0dSRVNTX0NMVVNURVJfSEVBUF9UVVBMRVNfSU5TRVJURUQKIAkJCX07 CiAJCQlpbnQ2NAkJY3RfdmFsWzJdOwogCkBAIC05MzUsNiArOTc3LDM1IEBAIGhlYXBhbV9yZWxh dGlvbl9jb3B5X2Zvcl9jbHVzdGVyKFJlbGF0aW9uIE9sZEhlYXAsIFJlbGF0aW9uIE5ld0hlYXAs CiAJCQljdF92YWxbMV0gPSAqbnVtX3R1cGxlczsKIAkJCXBnc3RhdF9wcm9ncmVzc191cGRhdGVf bXVsdGlfcGFyYW0oMiwgY3RfaW5kZXgsIGN0X3ZhbCk7CiAJCX0KKworCQkvKiBTZWUgdGhlIGNv bW1lbnQgb24gdW5sb2NraW5nIGFib3ZlLiAqLworCQlpZiAoY29uY3VycmVudCkKKwkJCUxvY2tC dWZmZXIoYnVmLCBCVUZGRVJfTE9DS19VTkxPQ0spOworCisJCS8qCisJCSAqIFByb2Nlc3MgdGhl IFdBTCBwcm9kdWNlZCBieSB0aGUgbG9hZCwgYXMgd2VsbCBhcyBieSBvdGhlcgorCQkgKiB0cmFu c2FjdGlvbnMsIHNvIHRoYXQgdGhlIHJlcGxpY2F0aW9uIHNsb3QgY2FuIGFkdmFuY2UgYW5kIFdB TCBkb2VzCisJCSAqIG5vdCBwaWxlIHVwLiBVc2Ugd2FsX3NlZ21lbnRfc2l6ZSBhcyBhIHRocmVz aG9sZCBzbyB0aGF0IHdlIGRvIG5vdAorCQkgKiBpbnRyb2R1Y2UgdGhlIGRlY29kaW5nIG92ZXJo ZWFkIHRvbyBvZnRlbi4KKwkJICoKKwkJICogT2YgY291cnNlLCB3ZSBtdXN0IG5vdCBhcHBseSB0 aGUgY2hhbmdlcyB1bnRpbCB0aGUgaW5pdGlhbCBsb2FkIGhhcworCQkgKiBjb21wbGV0ZWQuCisJ CSAqCisJCSAqIE5vdGUgdGhhdCBvdXIgaW5zZXJ0aW9ucyBpbnRvIHRoZSBuZXcgdGFibGUgc2hv dWxkIG5vdCBiZSBkZWNvZGVkCisJCSAqIGFzIHdlIChpbnRlbnRpb25hbGx5KSBkbyBub3Qgd3Jp dGUgdGhlIGxvZ2ljYWwgZGVjb2Rpbmcgc3BlY2lmaWMKKwkJICogaW5mb3JtYXRpb24gdG8gV0FM LgorCQkgKi8KKwkJaWYgKGNvbmN1cnJlbnQpCisJCXsKKwkJCVhMb2dSZWNQdHIJZW5kX29mX3dh bDsKKworCQkJZW5kX29mX3dhbCA9IEdldEZsdXNoUmVjUHRyKE5VTEwpOworCQkJaWYgKChlbmRf b2Zfd2FsIC0gZW5kX29mX3dhbF9wcmV2KSA+IHdhbF9zZWdtZW50X3NpemUpCisJCQl7CisJCQkJ Y2x1c3Rlcl9kZWNvZGVfY29uY3VycmVudF9jaGFuZ2VzKGRlY29kaW5nX2N0eCwgZW5kX29mX3dh bCk7CisJCQkJZW5kX29mX3dhbF9wcmV2ID0gZW5kX29mX3dhbDsKKwkJCX0KKwkJfQogCX0KIAog CWlmIChpbmRleFNjYW4gIT0gTlVMTCkKQEAgLTk3OCw3ICsxMDQ5LDcgQEAgaGVhcGFtX3JlbGF0 aW9uX2NvcHlfZm9yX2NsdXN0ZXIoUmVsYXRpb24gT2xkSGVhcCwgUmVsYXRpb24gTmV3SGVhcCwK IAkJCQkJCQkJCSB2YWx1ZXMsIGlzbnVsbCwKIAkJCQkJCQkJCSByd3N0YXRlKTsKIAkJCS8qIFJl cG9ydCBuX3R1cGxlcyAqLwotCQkJcGdzdGF0X3Byb2dyZXNzX3VwZGF0ZV9wYXJhbShQUk9HUkVT U19DTFVTVEVSX0hFQVBfVFVQTEVTX1dSSVRURU4sCisJCQlwZ3N0YXRfcHJvZ3Jlc3NfdXBkYXRl X3BhcmFtKFBST0dSRVNTX0NMVVNURVJfSEVBUF9UVVBMRVNfSU5TRVJURUQsCiAJCQkJCQkJCQkJ IG5fdHVwbGVzKTsKIAkJfQogCkBAIC0yNTgzLDYgKzI2NTQsNTYgQEAgU2FtcGxlSGVhcFR1cGxl VmlzaWJsZShUYWJsZVNjYW5EZXNjIHNjYW4sIEJ1ZmZlciBidWZmZXIsCiAJfQogfQogCisvKgor ICogQ2hlY2sgaWYgdGhlIHR1cGxlIHdhcyBpbnNlcnRlZCwgdXBkYXRlZCBvciBkZWxldGVkIHdo aWxlCisgKiBoZWFwYW1fcmVsYXRpb25fY29weV9mb3JfY2x1c3RlcigpIHdhcyBjb3B5aW5nIHRo ZSBkYXRhLgorICoKKyAqICdzbmFwc2hvdCcgaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciB4 bWluL3htYXggd2FzIHNldCBieSBhIHRyYW5zYWN0aW9uCisgKiB0aGF0IGlzIHN0aWxsIGluLXBy b2dyZXNzLCBvciBvbmUgdGhhdCBzdGFydGVkIGluIHRoZSBmdXR1cmUgZnJvbSB0aGUKKyAqIHNu YXBzaG90IHBlcnNwZWN0aXZlLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgaW5zZXJ0aW9u IGlzIHZpc2libGUgdG8gJ3NuYXBzaG90JywgYnV0IGNsZWFyIHhtYXggaWYKKyAqIGl0IHdhcyBz ZXQgYnkgYSB0cmFuc2FjdGlvbiB3aGljaCBpcyBpbi1wcm9ncmVzcyBvciBpbiB0aGUgZnV0dXJl IGZyb20gdGhlCisgKiBzbmFwc2hvdCBwZXJzcGVjdGl2ZS4gKFRoZSB4bWF4IHdpbGwgYmUgc2V0 IGxhdGVyLCB3aGVuIHdlIGRlY29kZSB0aGUKKyAqIGNvcnJlc3BvbmRpbmcgVVBEQVRFIC8gREVM RVRFIGZyb20gV0FMLikKKyAqCisgKiBSZXR1cm5zIGZhbHNlIGlmIHRoZSBpbnNlcnRpb24gaXMg bm90IHZpc2libGUgdG8gJ3NuYXBzaG90Jy4KKyAqLworc3RhdGljIGJvb2wKK2FjY2VwdF90dXBs ZV9mb3JfY29uY3VycmVudF9jb3B5KEhlYXBUdXBsZSB0dXBsZSwgU25hcHNob3Qgc25hcHNob3Qs CisJCQkJCQkJCSBCdWZmZXIgYnVmZmVyKQoreworCUFzc2VydChzbmFwc2hvdC0+c25hcHNob3Rf dHlwZSA9PSBTTkFQU0hPVF9NVkNDKTsKKworCS8qCisJICogRmlyc3QsIGNoZWNrIGlmIHRoZSB0 dXBsZSBzaG91bGQgYmUgcmVqZWN0ZWQgYmVjYXVzZSBpdCB3YXMgaW5zZXJ0ZWQKKwkgKiBjb25j dXJyZW50bHkuCisJICovCisJaWYgKCFIZWFwVHVwbGVNVkNDSW5zZXJ0ZWQodHVwbGUsIHNuYXBz aG90LCBidWZmZXIpKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKgorCSAqIElmIHRoZSB0dXBsZSB3 YXMgZGVsZXRlZCAvIHVwZGF0ZWQgYnV0IG91ciBzbmFwc2hvdCBzdGlsbCBzZWVzIGl0LCB3ZQor CSAqIG5lZWQgdG8ga2VlcCBpdC4gSW4gdGhhdCBjYXNlLCBjbGVhciB0aGUgaW5mb3JtYXRpb24g dGhhdCBpbmRpY2F0ZXMgdGhlCisJICogZGVsZXRpb24gLyB1cGRhdGUuIE90aGVyd2lzZSB0aGUg dHVwbGUgY2hhaW4gd291bGQgc3RheSBpbmNvbXBsZXRlIChhcworCSAqIHdlIHdpbGwgcmVqZWN0 IHRoZSBuZXcgdHVwbGUgYWJvdmUpLCBhbmQgdGhlIGRlbGV0ZSAvIHVwZGF0ZSB3b3VsZCBmYWls CisJICogaWYgZXhlY3V0ZWQgbGF0ZXIgZHVyaW5nIGxvZ2ljYWwgZGVjb2RpbmcuCisJICovCisJ aWYgKFRyYW5zYWN0aW9uSWRJc05vcm1hbChIZWFwVHVwbGVIZWFkZXJHZXRSYXdYbWF4KHR1cGxl LT50X2RhdGEpKSAmJgorCQlIZWFwVHVwbGVNVkNDTm90RGVsZXRlZCh0dXBsZSwgc25hcHNob3Qs IGJ1ZmZlcikpCisJeworCQkvKiBUT0RPIE1vcmUgd29yayBuZWVkZWQgaGVyZT8qLworCQl0dXBs ZS0+dF9kYXRhLT50X2luZm9tYXNrIHw9IEhFQVBfWE1BWF9JTlZBTElEOworCQlIZWFwVHVwbGVI ZWFkZXJTZXRYbWF4KHR1cGxlLT50X2RhdGEsIDApOworCX0KKworCS8qCisJICogQWNjZXB0IHRo ZSB0dXBsZSBldmVuIGlmIG91ciBzbmFwc2hvdCBjb25zaWRlcnMgaXQgZGVsZXRlZCAtIG9sZGVy CisJICogc25hcHNob3RzIGNhbiBzdGlsbCBzZWUgdGhlIHR1cGxlLgorCSAqLworCXJldHVybiB0 cnVlOworfQorCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogRGVmaW5pdGlvbiBvZiB0aGUgaGVh cCB0YWJsZSBhY2Nlc3MgbWV0aG9kLgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hl YXAvaGVhcGFtX3Zpc2liaWxpdHkuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV92 aXNpYmlsaXR5LmMKaW5kZXggOTI0M2ZlZWQwMS4uZDcwMjU5MjQ2OSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX3Zpc2liaWxpdHkuYworKysgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvaGVhcC9oZWFwYW1fdmlzaWJpbGl0eS5jCkBAIC05NTUsMTYgKzk1NSwzMSBAQCBI ZWFwVHVwbGVTYXRpc2ZpZXNEaXJ0eShIZWFwVHVwbGUgaHR1cCwgU25hcHNob3Qgc25hcHNob3Qs CiAgKiBkaWQgVHJhbnNhY3Rpb25JZElzSW5Qcm9ncmVzcyBpbiBlYWNoIGNhbGwgLS0tIHRvIG5v IGF2YWlsLCBhcyBsb25nIGFzIHRoZQogICogaW5zZXJ0aW5nL2RlbGV0aW5nIHRyYW5zYWN0aW9u IHdhcyBzdGlsbCBydW5uaW5nIC0tLSB3aGljaCB3YXMgbW9yZSBjeWNsZXMKICAqIGFuZCBtb3Jl IGNvbnRlbnRpb24gb24gUHJvY0FycmF5TG9jay4KKyAqCisgKiBUaGUgY2hlY2tzIGFyZSBzcGxp dCBpbnRvIHR3byBmdW5jdGlvbnMsIEhlYXBUdXBsZU1WQ0NJbnNlcnRlZCgpIGFuZAorICogSGVh cFR1cGxlTVZDQ05vdERlbGV0ZWQoKSwgYmVjYXVzZSB0aGV5IGFyZSBhbHNvIHVzZWZ1bCBzZXBh cmF0ZWx5LgogICovCiBzdGF0aWMgYm9vbAogSGVhcFR1cGxlU2F0aXNmaWVzTVZDQyhIZWFwVHVw bGUgaHR1cCwgU25hcHNob3Qgc25hcHNob3QsCiAJCQkJCSAgIEJ1ZmZlciBidWZmZXIpCiB7Ci0J SGVhcFR1cGxlSGVhZGVyIHR1cGxlID0gaHR1cC0+dF9kYXRhOwotCiAJQXNzZXJ0KEl0ZW1Qb2lu dGVySXNWYWxpZCgmaHR1cC0+dF9zZWxmKSk7CiAJQXNzZXJ0KGh0dXAtPnRfdGFibGVPaWQgIT0g SW52YWxpZE9pZCk7CiAKKwlyZXR1cm4gSGVhcFR1cGxlTVZDQ0luc2VydGVkKGh0dXAsIHNuYXBz aG90LCBidWZmZXIpICYmCisJCUhlYXBUdXBsZU1WQ0NOb3REZWxldGVkKGh0dXAsIHNuYXBzaG90 LCBidWZmZXIpOworfQorCisvKgorICogSGVhcFR1cGxlTVZDQ0luc2VydGVkCisgKgkJVHJ1ZSBp ZmYgaGVhcCB0dXBsZSB3YXMgc3VjY2Vzc2Z1bGx5IGluc2VydGVkIGZvciB0aGUgZ2l2ZW4gTVZD QworICoJCXNuYXBzaG90LgorICovCitib29sCitIZWFwVHVwbGVNVkNDSW5zZXJ0ZWQoSGVhcFR1 cGxlIGh0dXAsIFNuYXBzaG90IHNuYXBzaG90LCBCdWZmZXIgYnVmZmVyKQoreworCUhlYXBUdXBs ZUhlYWRlciB0dXBsZSA9IGh0dXAtPnRfZGF0YTsKKwogCWlmICghSGVhcFR1cGxlSGVhZGVyWG1p bkNvbW1pdHRlZCh0dXBsZSkpCiAJewogCQlpZiAoSGVhcFR1cGxlSGVhZGVyWG1pbkludmFsaWQo dHVwbGUpKQpAQCAtMTA3Myw2ICsxMDg4LDE3IEBAIEhlYXBUdXBsZVNhdGlzZmllc01WQ0MoSGVh cFR1cGxlIGh0dXAsIFNuYXBzaG90IHNuYXBzaG90LAogCX0KIAogCS8qIGJ5IGhlcmUsIHRoZSBp bnNlcnRpbmcgdHJhbnNhY3Rpb24gaGFzIGNvbW1pdHRlZCAqLworCXJldHVybiB0cnVlOworfQor CisvKgorICogSGVhcFR1cGxlTVZDQ05vdERlbGV0ZWQKKyAqCQlUcnVlIGlmZiBoZWFwIHR1cGxl IHdhcyBub3QgZGVsZXRlZCBmb3IgdGhlIGdpdmVuIE1WQ0Mgc25hcHNob3QuCisgKi8KK2Jvb2wK K0hlYXBUdXBsZU1WQ0NOb3REZWxldGVkKEhlYXBUdXBsZSBodHVwLCBTbmFwc2hvdCBzbmFwc2hv dCwgQnVmZmVyIGJ1ZmZlcikKK3sKKwlIZWFwVHVwbGVIZWFkZXIgdHVwbGUgPSBodHVwLT50X2Rh dGE7CiAKIAlpZiAodHVwbGUtPnRfaW5mb21hc2sgJiBIRUFQX1hNQVhfSU5WQUxJRCkJLyogeGlk IGludmFsaWQgb3IgYWJvcnRlZCAqLwogCQlyZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hhY3QuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2Ft L3hhY3QuYwppbmRleCBkMTE5YWI5MDlkLi5mOWI4Y2I0ZGE3IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9hY2Nlc3MvdHJhbnNhbS94YWN0LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5z YW0veGFjdC5jCkBAIC0xMjQsNiArMTI0LDE4IEBAIHN0YXRpYyBGdWxsVHJhbnNhY3Rpb25JZCBY YWN0VG9wRnVsbFRyYW5zYWN0aW9uSWQgPSB7SW52YWxpZFRyYW5zYWN0aW9uSWR9Owogc3RhdGlj IGludAluUGFyYWxsZWxDdXJyZW50WGlkcyA9IDA7CiBzdGF0aWMgVHJhbnNhY3Rpb25JZCAqUGFy YWxsZWxDdXJyZW50WGlkczsKIAorLyoKKyAqIEFub3RoZXIgY2FzZSB0aGF0IHJlcXVpcmVzIFRy YW5zYWN0aW9uSWRJc0N1cnJlbnRUcmFuc2FjdGlvbklkKCkgdG8gYmVoYXZlCisgKiBzcGVjaWFs bHkgaXMgd2hlbiBDTFVTVEVSIENPTkNVUlJFTlRMWSBpcyBwcm9jZXNzaW5nIGRhdGEgY2hhbmdl cyBtYWRlIGluCisgKiB0aGUgb2xkIHN0b3JhZ2Ugb2YgYSB0YWJsZSBieSBvdGhlciB0cmFuc2Fj dGlvbnMuIFdoZW4gYXBwbHlpbmcgdGhlIGNoYW5nZXMKKyAqIHRvIHRoZSBuZXcgc3RvcmFnZSwg dGhlIGJhY2tlbmQgZXhlY3V0aW5nIHRoZSBDTFVTVEVSIGNvbW1hbmQgbmVlZHMgdG8gYWN0Cisg KiBvbiBiZWhhbGYgb24gdGhvc2Ugb3RoZXIgdHJhbnNhY3Rpb25zLiBUaGUgdHJhbnNhY3Rpb25z IHJlc3BvbnNpYmxlIGZvciB0aGUKKyAqIGNoYW5nZXMgaW4gdGhlIG9sZCBzdG9yYWdlIGFyZSBz dG9yZWQgaW4gdGhpcyBhcnJheSwgc29ydGVkIGJ5CisgKiB4aWRDb21wYXJhdG9yLgorICovCitz dGF0aWMgaW50CQkJCSBuQ2x1c3RlckN1cnJlbnRYaWRzID0gMDsKK3N0YXRpYyBUcmFuc2FjdGlv bklkCSpDbHVzdGVyQ3VycmVudFhpZHMgPSBOVUxMOworCiAvKgogICogTWlzY2VsbGFuZW91cyBm bGFnIGJpdHMgdG8gcmVjb3JkIGV2ZW50cyB3aGljaCBvY2N1ciBvbiB0aGUgdG9wIGxldmVsCiAg KiB0cmFuc2FjdGlvbi4gVGhlc2UgZmxhZ3MgYXJlIG9ubHkgcGVyc2lzdGVkIGluIE15WGFjdEZs YWdzIGFuZCBhcmUgaW50ZW5kZWQKQEAgLTk3MCw2ICs5ODIsOCBAQCBUcmFuc2FjdGlvbklkSXND dXJyZW50VHJhbnNhY3Rpb25JZChUcmFuc2FjdGlvbklkIHhpZCkKIAkJaW50CQkJbG93LAogCQkJ CQloaWdoOwogCisJCUFzc2VydChuQ2x1c3RlckN1cnJlbnRYaWRzID09IDApOworCiAJCWxvdyA9 IDA7CiAJCWhpZ2ggPSBuUGFyYWxsZWxDdXJyZW50WGlkcyAtIDE7CiAJCXdoaWxlIChsb3cgPD0g aGlnaCkKQEAgLTk4OSw2ICsxMDAzLDIxIEBAIFRyYW5zYWN0aW9uSWRJc0N1cnJlbnRUcmFuc2Fj dGlvbklkKFRyYW5zYWN0aW9uSWQgeGlkKQogCQlyZXR1cm4gZmFsc2U7CiAJfQogCisJLyoKKwkg KiBXaGVuIGV4ZWN1dGluZyBDTFVTVEVSIENPTkNVUlJFTlRMWSwgdGhlIGFycmF5IG9mIGN1cnJl bnQgdHJhbnNhY3Rpb25zCisJICogaXMgZ2l2ZW4uCisJICovCisJaWYgKG5DbHVzdGVyQ3VycmVu dFhpZHMgPiAwKQorCXsKKwkJQXNzZXJ0KG5QYXJhbGxlbEN1cnJlbnRYaWRzID09IDApOworCisJ CXJldHVybiBic2VhcmNoKCZ4aWQsCisJCQkJCSAgIENsdXN0ZXJDdXJyZW50WGlkcywKKwkJCQkJ ICAgbkNsdXN0ZXJDdXJyZW50WGlkcywKKwkJCQkJICAgc2l6ZW9mKFRyYW5zYWN0aW9uSWQpLAor CQkJCQkgICB4aWRDb21wYXJhdG9yKSAhPSBOVUxMOworCX0KKwogCS8qCiAJICogV2Ugd2lsbCBy ZXR1cm4gdHJ1ZSBmb3IgdGhlIFhpZCBvZiB0aGUgY3VycmVudCBzdWJ0cmFuc2FjdGlvbiwgYW55 IG9mCiAJICogaXRzIHN1YmNvbW1pdHRlZCBjaGlsZHJlbiwgYW55IG9mIGl0cyBwYXJlbnRzLCBv ciBhbnkgb2YgdGhlaXIKQEAgLTU2MjEsNiArNTY1MCwyOSBAQCBFbmRQYXJhbGxlbFdvcmtlclRy YW5zYWN0aW9uKHZvaWQpCiAJQ3VycmVudFRyYW5zYWN0aW9uU3RhdGUtPmJsb2NrU3RhdGUgPSBU QkxPQ0tfREVGQVVMVDsKIH0KIAorLyoKKyAqIFNldENsdXN0ZXJDdXJyZW50WGlkcworICoJCVNl dCB0aGUgWElEIGFycmF5IHRoYXQgVHJhbnNhY3Rpb25JZElzQ3VycmVudFRyYW5zYWN0aW9uSWQo KSBzaG91bGQKKyAqCQl1c2UuCisgKi8KK3ZvaWQKK1NldENsdXN0ZXJDdXJyZW50WGlkcyhUcmFu c2FjdGlvbklkICp4aXAsIGludCB4Y250KQoreworCUNsdXN0ZXJDdXJyZW50WGlkcyA9IHhpcDsK KwluQ2x1c3RlckN1cnJlbnRYaWRzID0geGNudDsKK30KKworLyoKKyAqIFJlc2V0Q2x1c3RlckN1 cnJlbnRYaWRzCisgKgkJVW5kbyB0aGUgZWZmZWN0IG9mIFNldENsdXN0ZXJDdXJyZW50WGlkcygp LgorICovCit2b2lkCitSZXNldENsdXN0ZXJDdXJyZW50WGlkcyh2b2lkKQoreworCUNsdXN0ZXJD dXJyZW50WGlkcyA9IE5VTEw7CisJbkNsdXN0ZXJDdXJyZW50WGlkcyA9IDA7Cit9CisKIC8qCiAg KiBTaG93VHJhbnNhY3Rpb25TdGF0ZQogICoJCURlYnVnIHN1cHBvcnQKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYwpp bmRleCBhODE5YjQxOTdjLi5hMjVjODRkN2FlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRh bG9nL2luZGV4LmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jCkBAIC0xNDE1LDIy ICsxNDE1LDcgQEAgaW5kZXhfY29uY3VycmVudGx5X2NyZWF0ZV9jb3B5KFJlbGF0aW9uIGhlYXBS ZWxhdGlvbiwgT2lkIG9sZEluZGV4SWQsCiAJZm9yIChpbnQgaSA9IDA7IGkgPCBuZXdJbmZvLT5p aV9OdW1JbmRleEF0dHJzOyBpKyspCiAJCW9wY2xhc3NPcHRpb25zW2ldID0gZ2V0X2F0dG9wdGlv bnMob2xkSW5kZXhJZCwgaSArIDEpOwogCi0JLyogRXh0cmFjdCBzdGF0aXN0aWMgdGFyZ2V0cyBm b3IgZWFjaCBhdHRyaWJ1dGUgKi8KLQlzdGF0dGFyZ2V0cyA9IHBhbGxvYzBfYXJyYXkoTnVsbGFi bGVEYXR1bSwgbmV3SW5mby0+aWlfTnVtSW5kZXhBdHRycyk7Ci0JZm9yIChpbnQgaSA9IDA7IGkg PCBuZXdJbmZvLT5paV9OdW1JbmRleEF0dHJzOyBpKyspCi0JewotCQlIZWFwVHVwbGUJdHA7Ci0J CURhdHVtCQlkYXQ7Ci0KLQkJdHAgPSBTZWFyY2hTeXNDYWNoZTIoQVRUTlVNLCBPYmplY3RJZEdl dERhdHVtKG9sZEluZGV4SWQpLCBJbnQxNkdldERhdHVtKGkgKyAxKSk7Ci0JCWlmICghSGVhcFR1 cGxlSXNWYWxpZCh0cCkpCi0JCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Ig YXR0cmlidXRlICVkIG9mIHJlbGF0aW9uICV1IiwKLQkJCQkgaSArIDEsIG9sZEluZGV4SWQpOwot CQlkYXQgPSBTeXNDYWNoZUdldEF0dHIoQVRUTlVNLCB0cCwgQW51bV9wZ19hdHRyaWJ1dGVfYXR0 c3RhdHRhcmdldCwgJmlzbnVsbCk7Ci0JCVJlbGVhc2VTeXNDYWNoZSh0cCk7Ci0JCXN0YXR0YXJn ZXRzW2ldLnZhbHVlID0gZGF0OwotCQlzdGF0dGFyZ2V0c1tpXS5pc251bGwgPSBpc251bGw7Ci0J fQorCXN0YXR0YXJnZXRzID0gZ2V0X2luZGV4X3N0YXR0YXJnZXRzKG9sZEluZGV4SWQsIG5ld0lu Zm8pOwogCiAJLyoKIAkgKiBOb3cgY3JlYXRlIHRoZSBuZXcgaW5kZXguCkBAIC0xNDY5LDYgKzE0 NTQsMzIgQEAgaW5kZXhfY29uY3VycmVudGx5X2NyZWF0ZV9jb3B5KFJlbGF0aW9uIGhlYXBSZWxh dGlvbiwgT2lkIG9sZEluZGV4SWQsCiAJcmV0dXJuIG5ld0luZGV4SWQ7CiB9CiAKK051bGxhYmxl RGF0dW0gKgorZ2V0X2luZGV4X3N0YXR0YXJnZXRzKE9pZCBpbmRleGlkLCBJbmRleEluZm8gKmlu ZEluZm8pCit7CisJTnVsbGFibGVEYXR1bSAqc3RhdHRhcmdldHM7CisKKwkvKiBFeHRyYWN0IHN0 YXRpc3RpYyB0YXJnZXRzIGZvciBlYWNoIGF0dHJpYnV0ZSAqLworCXN0YXR0YXJnZXRzID0gcGFs bG9jMF9hcnJheShOdWxsYWJsZURhdHVtLCBpbmRJbmZvLT5paV9OdW1JbmRleEF0dHJzKTsKKwlm b3IgKGludCBpID0gMDsgaSA8IGluZEluZm8tPmlpX051bUluZGV4QXR0cnM7IGkrKykKKwl7CisJ CUhlYXBUdXBsZQl0cDsKKwkJRGF0dW0JCWRhdDsKKwkJYm9vbAkJaXNudWxsOworCisJCXRwID0g U2VhcmNoU3lzQ2FjaGUyKEFUVE5VTSwgT2JqZWN0SWRHZXREYXR1bShpbmRleGlkKSwgSW50MTZH ZXREYXR1bShpICsgMSkpOworCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHApKQorCQkJZWxvZyhF UlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGF0dHJpYnV0ZSAlZCBvZiByZWxhdGlvbiAl dSIsCisJCQkJIGkgKyAxLCBpbmRleGlkKTsKKwkJZGF0ID0gU3lzQ2FjaGVHZXRBdHRyKEFUVE5V TSwgdHAsIEFudW1fcGdfYXR0cmlidXRlX2F0dHN0YXR0YXJnZXQsICZpc251bGwpOworCQlSZWxl YXNlU3lzQ2FjaGUodHApOworCQlzdGF0dGFyZ2V0c1tpXS52YWx1ZSA9IGRhdDsKKwkJc3RhdHRh cmdldHNbaV0uaXNudWxsID0gaXNudWxsOworCX0KKworCXJldHVybiBzdGF0dGFyZ2V0czsKK30K KwogLyoKICAqIGluZGV4X2NvbmN1cnJlbnRseV9idWlsZAogICoKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNxbCBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3lz dGVtX3ZpZXdzLnNxbAppbmRleCAxOWNhYmM5YTQ3Li5mZGRhYjFjZmE5IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV92aWV3cy5zcWwKKysrIGIvc3JjL2JhY2tlbmQvY2F0 YWxvZy9zeXN0ZW1fdmlld3Muc3FsCkBAIC0xMjM2LDE2ICsxMjM2LDE5IEBAIENSRUFURSBWSUVX IHBnX3N0YXRfcHJvZ3Jlc3NfY2x1c3RlciBBUwogICAgICAgICAgICAgICAgICAgICAgIFdIRU4g MiBUSEVOICdpbmRleCBzY2FubmluZyBoZWFwJwogICAgICAgICAgICAgICAgICAgICAgIFdIRU4g MyBUSEVOICdzb3J0aW5nIHR1cGxlcycKICAgICAgICAgICAgICAgICAgICAgICBXSEVOIDQgVEhF TiAnd3JpdGluZyBuZXcgaGVhcCcKLSAgICAgICAgICAgICAgICAgICAgICBXSEVOIDUgVEhFTiAn c3dhcHBpbmcgcmVsYXRpb24gZmlsZXMnCi0gICAgICAgICAgICAgICAgICAgICAgV0hFTiA2IFRI RU4gJ3JlYnVpbGRpbmcgaW5kZXgnCi0gICAgICAgICAgICAgICAgICAgICAgV0hFTiA3IFRIRU4g J3BlcmZvcm1pbmcgZmluYWwgY2xlYW51cCcKKyAgICAgICAgICAgICAgICAgICAgICBXSEVOIDUg VEhFTiAnY2F0Y2gtdXAnCisgICAgICAgICAgICAgICAgICAgICAgV0hFTiA2IFRIRU4gJ3N3YXBw aW5nIHJlbGF0aW9uIGZpbGVzJworICAgICAgICAgICAgICAgICAgICAgIFdIRU4gNyBUSEVOICdy ZWJ1aWxkaW5nIGluZGV4JworICAgICAgICAgICAgICAgICAgICAgIFdIRU4gOCBUSEVOICdwZXJm b3JtaW5nIGZpbmFsIGNsZWFudXAnCiAgICAgICAgICAgICAgICAgICAgICAgRU5EIEFTIHBoYXNl LAogICAgICAgICBDQVNUKFMucGFyYW0zIEFTIG9pZCkgQVMgY2x1c3Rlcl9pbmRleF9yZWxpZCwK ICAgICAgICAgUy5wYXJhbTQgQVMgaGVhcF90dXBsZXNfc2Nhbm5lZCwKLSAgICAgICAgUy5wYXJh bTUgQVMgaGVhcF90dXBsZXNfd3JpdHRlbiwKLSAgICAgICAgUy5wYXJhbTYgQVMgaGVhcF9ibGtz X3RvdGFsLAotICAgICAgICBTLnBhcmFtNyBBUyBoZWFwX2Jsa3Nfc2Nhbm5lZCwKLSAgICAgICAg Uy5wYXJhbTggQVMgaW5kZXhfcmVidWlsZF9jb3VudAorICAgICAgICBTLnBhcmFtNSBBUyBoZWFw X3R1cGxlc19pbnNlcnRlZCwKKyAgICAgICAgUy5wYXJhbTYgQVMgaGVhcF90dXBsZXNfdXBkYXRl ZCwKKyAgICAgICAgUy5wYXJhbTcgQVMgaGVhcF90dXBsZXNfZGVsZXRlZCwKKyAgICAgICAgUy5w YXJhbTggQVMgaGVhcF9ibGtzX3RvdGFsLAorICAgICAgICBTLnBhcmFtOSBBUyBoZWFwX2Jsa3Nf c2Nhbm5lZCwKKyAgICAgICAgUy5wYXJhbTEwIEFTIGluZGV4X3JlYnVpbGRfY291bnQKICAgICBG Uk9NIHBnX3N0YXRfZ2V0X3Byb2dyZXNzX2luZm8oJ0NMVVNURVInKSBBUyBTCiAgICAgICAgIExF RlQgSk9JTiBwZ19kYXRhYmFzZSBEIE9OIFMuZGF0aWQgPSBELm9pZDsKIApkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvY29tbWFuZHMvY2x1c3Rlci5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY2x1 c3Rlci5jCmluZGV4IDE5NGQxNDNjZjQuLjYzOTdmN2Y4YzQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2NsdXN0ZXIuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jbHVzdGVy LmMKQEAgLTI1LDYgKzI1LDEwIEBACiAjaW5jbHVkZSAiYWNjZXNzL3RvYXN0X2ludGVybmFscy5o IgogI2luY2x1ZGUgImFjY2Vzcy90cmFuc2FtLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hhY3QuaCIK KyNpbmNsdWRlICJhY2Nlc3MveGxvZy5oIgorI2luY2x1ZGUgImFjY2Vzcy94bG9nX2ludGVybmFs LmgiCisjaW5jbHVkZSAiYWNjZXNzL3hsb2dpbnNlcnQuaCIKKyNpbmNsdWRlICJhY2Nlc3MveGxv Z3V0aWxzLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9jYXRhbG9nLmgiCiAjaW5jbHVkZSAiY2F0YWxv Zy9kZXBlbmRlbmN5LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9oZWFwLmgiCkBAIC0zMiw2ICszNiw3 IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9uYW1lc3BhY2UuaCIKICNpbmNsdWRlICJjYXRhbG9nL29i amVjdGFjY2Vzcy5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfYW0uaCIKKyNpbmNsdWRlICJjYXRh bG9nL3BnX2NvbnRyb2wuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2RhdGFiYXNlLmgiCiAjaW5j bHVkZSAiY2F0YWxvZy9wZ19pbmhlcml0cy5oIgogI2luY2x1ZGUgImNhdGFsb2cvdG9hc3Rpbmcu aCIKQEAgLTQwLDEwICs0NSwxNSBAQAogI2luY2x1ZGUgImNvbW1hbmRzL3Byb2dyZXNzLmgiCiAj aW5jbHVkZSAiY29tbWFuZHMvdGFibGVjbWRzLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvdmFjdXVt LmgiCisjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY3V0b3IuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4u aCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvb3B0aW1pemVyLmgiCiAjaW5jbHVkZSAicGdzdGF0Lmgi CisjaW5jbHVkZSAicmVwbGljYXRpb24vZGVjb2RlLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24v bG9naWNhbC5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL3NuYXBidWlsZC5oIgogI2luY2x1ZGUg InN0b3JhZ2UvYnVmbWdyLmgiCisjaW5jbHVkZSAic3RvcmFnZS9pcGMuaCIKICNpbmNsdWRlICJz dG9yYWdlL2xtZ3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL3ByZWRpY2F0ZS5oIgogI2luY2x1ZGUg InV0aWxzL2FjbC5oIgpAQCAtNTcsNiArNjcsOCBAQAogI2luY2x1ZGUgInV0aWxzL3NuYXBtZ3Iu aCIKICNpbmNsdWRlICJ1dGlscy9zeXNjYWNoZS5oIgogCit0eXBlZGVmIHN0cnVjdCBSZXdyaXRl U3RhdGVEYXRhICpSZXdyaXRlU3RhdGU7CisKIC8qCiAgKiBUaGlzIHN0cnVjdCBpcyB1c2VkIHRv IHBhc3MgYXJvdW5kIHRoZSBpbmZvcm1hdGlvbiBvbiB0YWJsZXMgdG8gYmUKICAqIGNsdXN0ZXJl ZC4gV2UgbmVlZCB0aGlzIHNvIHdlIGNhbiBtYWtlIGEgbGlzdCBvZiB0aGVtIHdoZW4gaW52b2tl ZCB3aXRob3V0CkBAIC02OCwxNyArODAsMTc1IEBAIHR5cGVkZWYgc3RydWN0CiAJT2lkCQkJaW5k ZXhPaWQ7CiB9IFJlbFRvQ2x1c3RlcjsKIAorLyoKKyAqIFRoZSBmb2xsb3dpbmcgZGVmaW5pdGlv bnMgYXJlIHVzZWQgZm9yIGNvbmN1cnJlbnQgcHJvY2Vzc2luZy4KKyAqLworCisvKgorICogT0lE IG9mIHRoZSB0YWJsZSBiZWluZyBwcm9jZXNzZWQgYnkgQ0xVU1RFUiBDT05DVVJSRU5UTFkgYnkg dGhpcyBiYWNrZW5kLgorICovCitzdGF0aWMgT2lkCWNsdXN0ZXJlZF9yZWwJPSBJbnZhbGlkT2lk OworLyogVGhlIHNhbWUgZm9yIGl0cyBUT0FTVCByZWxhdGlvbi4gKi8KK3N0YXRpYyBPaWQJY2x1 c3RlcmVkX3JlbF90b2FzdAk9IEludmFsaWRPaWQ7CisKKy8qIFhYWCBEbyB3ZSBhbHNvIG5lZWQg dG8gbWVudGlvbiBWQUNVVU0gRlVMTCBDT05DVVJSRU5UTFk/ICovCisjZGVmaW5lIENMVVNURVJf SU5fUFJPR1JFU1NfTUVTU0FHRSBcCisJInJlbGF0aW9uIFwiJXNcIiBpcyBhbHJlYWR5IGJlaW5n IHByb2Nlc3NlZCBieSBDTFVTVEVSIENPTkNVUlJFTlRMWSIKKworLyoKKyAqIEV2ZXJ5dGhpbmcg d2UgbmVlZCB0byBjYWxsIEV4ZWNJbnNlcnRJbmRleFR1cGxlcygpLgorICovCit0eXBlZGVmIHN0 cnVjdCBJbmRleEluc2VydFN0YXRlCit7CisJUmVzdWx0UmVsSW5mbyAqcnJpOworCUVTdGF0ZQkg ICAqZXN0YXRlOworCUV4cHJDb250ZXh0ICplY29udGV4dDsKKworCVJlbGF0aW9uCWlkZW50X2lu ZGV4OworfSBJbmRleEluc2VydFN0YXRlOwogCi1zdGF0aWMgdm9pZCBjbHVzdGVyX211bHRpcGxl X3JlbHMoTGlzdCAqcnRjcywgQ2x1c3RlclBhcmFtcyAqcGFyYW1zKTsKLXN0YXRpYyB2b2lkIHJl YnVpbGRfcmVsYXRpb24oUmVsYXRpb24gT2xkSGVhcCwgUmVsYXRpb24gaW5kZXgsIGJvb2wgdmVy Ym9zZSk7CisvKgorICogQ2F0YWxvZyBpbmZvcm1hdGlvbiB0byBjaGVjayBpZiBhbm90aGVyIGJh Y2tlbmQgY2hhbmdlZCB0aGUgcmVsYXRpb24gaW4KKyAqIHN1Y2ggYSB3YXkgdGhhdCBtYWtlcyBD TFVTVEVSIENPTkNVUlJFTlRMWSB1bmFibGUgdG8gY29udGludWUuIFN1Y2ggY2hhbmdlcworICog YXJlIHBvc3NpYmxlIGJlY2F1c2UgY2x1c3Rlcl9yZWwoKSBoYXMgdG8gcmVsZWFzZSBpdHMgbG9j ayBvbiB0aGUgcmVsYXRpb24KKyAqIGluIG9yZGVyIHRvIGFjcXVpcmUgQWNjZXNzRXhjbHVzaXZl TG9jayB0aGF0IGl0IG5lZWRzIHRvIHN3YXAgdGhlIHJlbGF0aW9uCisgKiBmaWxlcy4KKyAqCisg KiBUaGUgbW9zdCBvYnZpb3VzIHByb2JsZW0gaXMgdGhhdCB0aGUgdHVwbGUgZGVzY3JpcHRvciBo YXMgY2hhbmdlZCwgc2luY2UKKyAqIHRoZW4gdGhlIHR1cGxlcyB3ZSB0cnkgdG8gaW5zZXJ0IGlu dG8gdGhlIG5ldyBzdG9yYWdlIGFyZSBub3QgZ3VhcmFudGVlZCB0bworICogZml0IGludG8gdGhl IHN0b3JhZ2UuCisgKgorICogQW5vdGhlciBwcm9ibGVtIGlzIHRoYXQgbXVsdGlwbGUgYmFja2Vu ZHMgbWlnaHQgY2FsbCBjbHVzdGVyX3JlbCgpLiBUaGlzIGlzCisgKiBub3QgbmVjZXNzYXJpbHkg YSBjb3JyZWN0bmVzcyBpc3N1ZSwgYnV0IGl0IGRlZmluaXRlbHkgbWVhbnMgd2FzdGVkIENQVQor ICogdGltZS4KKyAqCisgKiBXaGVyZSBwb3NzaWJsZSwgY29tbWFuZHMgd2hpY2ggbWlnaHQgY2hh bmdlIHRoZSByZWxhdGlvbiBpbiBhbiBpbmNvbXBhdGlibGUKKyAqIHdheSBzaG91bGQgY2hlY2sg aWYgQ0xVU1RFUiBDT05DVVJSRU5UTFkgaXMgcnVubmluZywgYmVmb3JlIHRoZXkgc3RhcnQgdG8K KyAqIGRvIHRoZSBhY3R1YWwgY2hhbmdlcyAoc2VlIGlzX2NvbmN1cnJlbnRfY2x1c3Rlcl9pbl9w cm9ncmVzcygpKS4gQW55dGhpbmcKKyAqIGVsc2UgbXVzdCBiZSBjYXVnaHQgYnkgY2hlY2tfY2F0 YWxvZ19jaGFuZ2VzKCksIHdoaWNoIHVzZXMgdGhpcyBzdHJ1Y3R1cmUuCisgKi8KK3R5cGVkZWYg c3RydWN0IENhdGFsb2dTdGF0ZQoreworCS8qIFR1cGxlIGRlc2NyaXB0b3Igb2YgdGhlIHJlbGF0 aW9uLiAqLworCVR1cGxlRGVzYwl0dXBkZXNjOworCisJLyogVGhlIG51bWJlciBvZiBpbmRleGVz IHRyYWNrZWQuICovCisJaW50CQluaW5kczsKKwkvKiBUaGUgaW5kZXggT0lEcy4gKi8KKwlPaWQJ CSppbmRfb2lkczsKKwkvKiBUaGUgaW5kZXggdHVwbGUgZGVzY3JpcHRvcnMuICovCisJVHVwbGVE ZXNjCSppbmRfdHVwZGVzY3M7CisKKwkvKiBUaGUgZm9sbG93aW5nIGFyZSBjb3BpZXMgb2YgdGhl IGNvcnJlc3BvbmRpbmcgZmllbGRzIG9mIHBnX2NsYXNzLiAqLworCU9pZAkJcmVsdG9hc3RyZWxp ZDsKKwljaGFyCXJlbHBlcnNpc3RlbmNlOworCWNoYXIJcmVwbGlkZW50OworCisJLyogcmRfcmVw bGlkaW5kZXggKi8KKwlPaWQJCXJlcGxpZGluZGV4OworfSBDYXRhbG9nU3RhdGU7CisKKy8qIFRo ZSBXQUwgc2VnbWVudCBiZWluZyBkZWNvZGVkLiAqLworc3RhdGljIFhMb2dTZWdObwljbHVzdGVy X2N1cnJlbnRfc2VnbWVudCA9IDA7CisKK3N0YXRpYyB2b2lkIGNsdXN0ZXJfbXVsdGlwbGVfcmVs cyhMaXN0ICpydGNzLCBDbHVzdGVyUGFyYW1zICpwYXJhbXMsCisJCQkJCQkJCSAgTE9DS01PREUg bG9ja19tb2RlLCBib29sIGlzVG9wTGV2ZWwpOworc3RhdGljIHZvaWQgcmVidWlsZF9yZWxhdGlv bihSZWxhdGlvbiBPbGRIZWFwLCBSZWxhdGlvbiBpbmRleCwgYm9vbCB2ZXJib3NlLAorCQkJCQkJ CSBib29sIGNvbmN1cnJlbnQpOwogc3RhdGljIHZvaWQgY29weV90YWJsZV9kYXRhKFJlbGF0aW9u IE5ld0hlYXAsIFJlbGF0aW9uIE9sZEhlYXAsIFJlbGF0aW9uIE9sZEluZGV4LAorCQkJCQkJCVNu YXBzaG90IHNuYXBzaG90LCBMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpkZWNvZGluZ19jdHgsCiAJ CQkJCQkJYm9vbCB2ZXJib3NlLCBib29sICpwU3dhcFRvYXN0QnlDb250ZW50LAogCQkJCQkJCVRy YW5zYWN0aW9uSWQgKnBGcmVlemVYaWQsIE11bHRpWGFjdElkICpwQ3V0b2ZmTXVsdGkpOwogc3Rh dGljIExpc3QgKmdldF90YWJsZXNfdG9fY2x1c3RlcihNZW1vcnlDb250ZXh0IGNsdXN0ZXJfY29u dGV4dCk7CiBzdGF0aWMgTGlzdCAqZ2V0X3RhYmxlc190b19jbHVzdGVyX3BhcnRpdGlvbmVkKE1l bW9yeUNvbnRleHQgY2x1c3Rlcl9jb250ZXh0LAogCQkJCQkJCQkJCQkgICBPaWQgaW5kZXhPaWQp Owogc3RhdGljIGJvb2wgY2x1c3Rlcl9pc19wZXJtaXR0ZWRfZm9yX3JlbGF0aW9uKE9pZCByZWxp ZCwgT2lkIHVzZXJpZCk7CitzdGF0aWMgdm9pZCBjaGVja19jb25jdXJyZW50X2NsdXN0ZXJfcmVx dWlyZW1lbnRzKFJlbGF0aW9uIHJlbCwKKwkJCQkJCQkJCQkJCSAgYm9vbCBpc1RvcExldmVsLAor CQkJCQkJCQkJCQkJICBib29sIGlzQ2x1c3Rlcik7CitzdGF0aWMgdm9pZCBiZWdpbl9jb25jdXJy ZW50X2NsdXN0ZXIoUmVsYXRpb24gKnJlbF9wLCBSZWxhdGlvbiAqaW5kZXhfcCwKKwkJCQkJCQkJ CSBib29sICplbnRlcmVkX3ApOworc3RhdGljIHZvaWQgZW5kX2NvbmN1cnJlbnRfY2x1c3RlcihP aWQgcmVsaWQsIGJvb2wgZXJyb3IpOworc3RhdGljIHZvaWQgY2x1c3Rlcl9iZWZvcmVfc2htZW1f ZXhpdF9jYWxsYmFjayhpbnQgY29kZSwgRGF0dW0gYXJnKTsKK3N0YXRpYyBDYXRhbG9nU3RhdGUg KmdldF9jYXRhbG9nX3N0YXRlKFJlbGF0aW9uIHJlbCk7CitzdGF0aWMgdm9pZCBmcmVlX2NhdGFs b2dfc3RhdGUoQ2F0YWxvZ1N0YXRlICpzdGF0ZSk7CitzdGF0aWMgdm9pZCBjaGVja19jYXRhbG9n X2NoYW5nZXMoUmVsYXRpb24gcmVsLCBDYXRhbG9nU3RhdGUgKmNhdF9zdGF0ZSk7CitzdGF0aWMg TG9naWNhbERlY29kaW5nQ29udGV4dCAqc2V0dXBfbG9naWNhbF9kZWNvZGluZyhPaWQgcmVsaWQs CisJCQkJCQkJCQkJCQkJICBjb25zdCBjaGFyICpzbG90bmFtZSwKKwkJCQkJCQkJCQkJCQkgIFR1 cGxlRGVzYyB0dXBkZXNjKTsKK3N0YXRpYyBIZWFwVHVwbGUgZ2V0X2NoYW5nZWRfdHVwbGUoQ29u Y3VycmVudENoYW5nZSAqY2hhbmdlKTsKK3N0YXRpYyB2b2lkIGFwcGx5X2NvbmN1cnJlbnRfY2hh bmdlcyhDbHVzdGVyRGVjb2RpbmdTdGF0ZSAqZHN0YXRlLAorCQkJCQkJCQkJIFJlbGF0aW9uIHJl bCwgU2NhbktleSBrZXksIGludCBua2V5cywKKwkJCQkJCQkJCSBJbmRleEluc2VydFN0YXRlICpp aXN0YXRlKTsKK3N0YXRpYyB2b2lkIGFwcGx5X2NvbmN1cnJlbnRfaW5zZXJ0KFJlbGF0aW9uIHJl bCwgQ29uY3VycmVudENoYW5nZSAqY2hhbmdlLAorCQkJCQkJCQkJSGVhcFR1cGxlIHR1cCwgSW5k ZXhJbnNlcnRTdGF0ZSAqaWlzdGF0ZSwKKwkJCQkJCQkJCVR1cGxlVGFibGVTbG90ICppbmRleF9z bG90KTsKK3N0YXRpYyB2b2lkIGFwcGx5X2NvbmN1cnJlbnRfdXBkYXRlKFJlbGF0aW9uIHJlbCwg SGVhcFR1cGxlIHR1cCwKKwkJCQkJCQkJCUhlYXBUdXBsZSB0dXBfdGFyZ2V0LAorCQkJCQkJCQkJ Q29uY3VycmVudENoYW5nZSAqY2hhbmdlLAorCQkJCQkJCQkJSW5kZXhJbnNlcnRTdGF0ZSAqaWlz dGF0ZSwKKwkJCQkJCQkJCVR1cGxlVGFibGVTbG90ICppbmRleF9zbG90KTsKK3N0YXRpYyB2b2lk IGFwcGx5X2NvbmN1cnJlbnRfZGVsZXRlKFJlbGF0aW9uIHJlbCwgSGVhcFR1cGxlIHR1cF90YXJn ZXQsCisJCQkJCQkJCQlDb25jdXJyZW50Q2hhbmdlICpjaGFuZ2UpOworc3RhdGljIEhlYXBUdXBs ZSBmaW5kX3RhcmdldF90dXBsZShSZWxhdGlvbiByZWwsIFNjYW5LZXkga2V5LCBpbnQgbmtleXMs CisJCQkJCQkJCSAgIEhlYXBUdXBsZSB0dXBfa2V5LAorCQkJCQkJCQkgICBTbmFwc2hvdCBzbmFw c2hvdCwKKwkJCQkJCQkJICAgSW5kZXhJbnNlcnRTdGF0ZSAqaWlzdGF0ZSwKKwkJCQkJCQkJICAg VHVwbGVUYWJsZVNsb3QgKmlkZW50X3Nsb3QsCisJCQkJCQkJCSAgIEluZGV4U2NhbkRlc2MgKnNj YW5fcCk7CitzdGF0aWMgdm9pZCBwcm9jZXNzX2NvbmN1cnJlbnRfY2hhbmdlcyhMb2dpY2FsRGVj b2RpbmdDb250ZXh0ICpjdHgsCisJCQkJCQkJCQkgICBYTG9nUmVjUHRyIGVuZF9vZl93YWwsCisJ CQkJCQkJCQkgICBSZWxhdGlvbiByZWxfZHN0LAorCQkJCQkJCQkJICAgUmVsYXRpb24gcmVsX3Ny YywKKwkJCQkJCQkJCSAgIFNjYW5LZXkgaWRlbnRfa2V5LAorCQkJCQkJCQkJICAgaW50IGlkZW50 X2tleV9uZW50cmllcywKKwkJCQkJCQkJCSAgIEluZGV4SW5zZXJ0U3RhdGUgKmlpc3RhdGUpOwor c3RhdGljIEluZGV4SW5zZXJ0U3RhdGUgKmdldF9pbmRleF9pbnNlcnRfc3RhdGUoUmVsYXRpb24g cmVsYXRpb24sCisJCQkJCQkJCQkJCQlPaWQgaWRlbnRfaW5kZXhfaWQpOworc3RhdGljIFNjYW5L ZXkgYnVpbGRfaWRlbnRpdHlfa2V5KE9pZCBpZGVudF9pZHhfb2lkLCBSZWxhdGlvbiByZWxfc3Jj LAorCQkJCQkJCQkgIGludCAqbmVudHJpZXMpOworc3RhdGljIHZvaWQgZnJlZV9pbmRleF9pbnNl cnRfc3RhdGUoSW5kZXhJbnNlcnRTdGF0ZSAqaWlzdGF0ZSk7CitzdGF0aWMgdm9pZCBjbGVhbnVw X2xvZ2ljYWxfZGVjb2RpbmcoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4KTsKK3N0YXRpYyB2 b2lkIHJlYnVpbGRfcmVsYXRpb25fZmluaXNoX2NvbmN1cnJlbnQoUmVsYXRpb24gTmV3SGVhcCwg UmVsYXRpb24gT2xkSGVhcCwKKwkJCQkJCQkJCQkJICAgUmVsYXRpb24gY2xfaW5kZXgsCisJCQkJ CQkJCQkJCSAgIENhdGFsb2dTdGF0ZQkqY2F0X3N0YXRlLAorCQkJCQkJCQkJCQkgICBMb2dpY2Fs RGVjb2RpbmdDb250ZXh0ICpjdHgsCisJCQkJCQkJCQkJCSAgIGJvb2wgc3dhcF90b2FzdF9ieV9j b250ZW50LAorCQkJCQkJCQkJCQkgICBUcmFuc2FjdGlvbklkIGZyb3plblhpZCwKKwkJCQkJCQkJ CQkJICAgTXVsdGlYYWN0SWQgY3V0b2ZmTXVsdGkpOworc3RhdGljIExpc3QgKmJ1aWxkX25ld19p bmRleGVzKFJlbGF0aW9uIE5ld0hlYXAsIFJlbGF0aW9uIE9sZEhlYXAsIExpc3QgKk9sZEluZGV4 ZXMpOworCisvKgorICogVXNlIHRoaXMgQVBJIHdoZW4gcmVsYXRpb24gbmVlZHMgdG8gYmUgdW5s b2NrZWQsIGNsb3NlZCBhbmQgcmUtb3BlbmVkLiBJZgorICogdGhlIHJlbGF0aW9uIGdvdCBkcm9w cGVkIHdoaWxlIGJlaW5nIHVubG9ja2VkLCByYWlzZSBFUlJPUiB0aGF0IG1lbnRpb25zCisgKiB0 aGUgcmVsYXRpb24gbmFtZSByYXRoZXIgdGhhbiBPSUQuCisgKi8KK3R5cGVkZWYgc3RydWN0IFJl bFJlb3BlbkluZm8KK3sKKwkvKgorCSAqIFRoZSByZWxhdGlvbiB0byBiZSBjbG9zZWQuIFBvaW50 ZXIgdG8gdGhlIHZhbHVlIGlzIHN0b3JlZCBoZXJlIHNvIHRoYXQKKwkgKiB0aGUgdXNlciBnZXRz IGhpcyByZWZlcmVuY2UgdXBkYXRlZCBhdXRvbWF0aWNhbGx5IG9uIHJlLW9wZW5pbmcuCisJICoK KwkgKiBXaGVuIGNhbGxpbmcgdW5sb2NrX2FuZF9jbG9zZV9yZWxhdGlvbnMoKSwgJ3JlbGlkJyBj YW4gYmUgcGFzc2VkCisJICogaW5zdGVhZCBvZiAncmVsX3AnIHdoZW4gdGhlIGNhbGxlciBvbmx5 IG5lZWRzIHRvIGdhdGhlciBpbmZvcm1hdGlvbiBmb3IKKwkgKiBzdWJzZXF1ZW50IG9wZW5pbmcu CisJICovCisJUmVsYXRpb24JKnJlbF9wOworCU9pZAkJcmVsaWQ7CisKKwljaGFyCQlyZWxraW5k OworCUxPQ0tNT0RFCWxvY2ttb2RlX29yaWc7CS8qIFRoZSBleGlzdGluZyBsb2NrIG1vZGUgKi8K KwlMT0NLTU9ERQlsb2NrbW9kZV9uZXc7CS8qIFRoZSBsb2NrIG1vZGUgYWZ0ZXIgdGhlIHJlbGF0 aW9uIGlzCisJCQkJCQkJCSAqIHJlLW9wZW5lZCAqLwogCisJY2hhcgkqcmVsbmFtZTsJCQkvKiBS ZWxhdGlvbiBuYW1lLCBpbml0aWFsaXplZCBhdXRvbWF0aWNhbGx5LiAqLworfSBSZWxSZW9wZW5J bmZvOworCitzdGF0aWMgdm9pZCBpbml0X3JlbF9yZW9wZW5faW5mbyhSZWxSZW9wZW5JbmZvICpy cmksIFJlbGF0aW9uICpyZWxfcCwKKwkJCQkJCQkJIE9pZCByZWxpZCwgTE9DS01PREUgbG9ja21v ZGVfb3JpZywKKwkJCQkJCQkJIExPQ0tNT0RFIGxvY2ttb2RlX25ldyk7CitzdGF0aWMgdm9pZCB1 bmxvY2tfYW5kX2Nsb3NlX3JlbGF0aW9ucyhSZWxSZW9wZW5JbmZvICpyZWxzLCBpbnQgbnJlbCk7 CitzdGF0aWMgdm9pZCByZW9wZW5fcmVsYXRpb25zKFJlbFJlb3BlbkluZm8gKnJlbHMsIGludCBu cmVsKTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIFRoaXMgY2x1c3RlciBjb2RlIGFsbG93 cyBmb3IgY2x1c3RlcmluZyBtdWx0aXBsZSB0YWJsZXMgYXQgb25jZS4gQmVjYXVzZQpAQCAtMTEw LDEwICsyODAsMTIgQEAgY2x1c3RlcihQYXJzZVN0YXRlICpwc3RhdGUsIENsdXN0ZXJTdG10ICpz dG10LCBib29sIGlzVG9wTGV2ZWwpCiAJTGlzdENlbGwgICAqbGM7CiAJQ2x1c3RlclBhcmFtcyBw YXJhbXMgPSB7MH07CiAJYm9vbAkJdmVyYm9zZSA9IGZhbHNlOworCWJvb2wJCWNvbmN1cnJlbnQg PSBmYWxzZTsKIAlSZWxhdGlvbglyZWwgPSBOVUxMOwogCU9pZAkJCWluZGV4T2lkID0gSW52YWxp ZE9pZDsKIAlNZW1vcnlDb250ZXh0IGNsdXN0ZXJfY29udGV4dDsKIAlMaXN0CSAgICpydGNzOwor CUxPQ0tNT0RFIGxvY2tfbW9kZTsKIAogCS8qIFBhcnNlIG9wdGlvbiBsaXN0ICovCiAJZm9yZWFj aChsYywgc3RtdC0+cGFyYW1zKQpAQCAtMTIyLDYgKzI5NCw4IEBAIGNsdXN0ZXIoUGFyc2VTdGF0 ZSAqcHN0YXRlLCBDbHVzdGVyU3RtdCAqc3RtdCwgYm9vbCBpc1RvcExldmVsKQogCiAJCWlmIChz dHJjbXAob3B0LT5kZWZuYW1lLCAidmVyYm9zZSIpID09IDApCiAJCQl2ZXJib3NlID0gZGVmR2V0 Qm9vbGVhbihvcHQpOworCQllbHNlIGlmIChzdHJjbXAob3B0LT5kZWZuYW1lLCAiY29uY3VycmVu dGx5IikgPT0gMCkKKwkJCWNvbmN1cnJlbnQgPSBkZWZHZXRCb29sZWFuKG9wdCk7CiAJCWVsc2UK IAkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwK QEAgLTEzMCwyMCArMzA0LDMwIEBAIGNsdXN0ZXIoUGFyc2VTdGF0ZSAqcHN0YXRlLCBDbHVzdGVy U3RtdCAqc3RtdCwgYm9vbCBpc1RvcExldmVsKQogCQkJCQkgcGFyc2VyX2VycnBvc2l0aW9uKHBz dGF0ZSwgb3B0LT5sb2NhdGlvbikpKTsKIAl9CiAKLQlwYXJhbXMub3B0aW9ucyA9ICh2ZXJib3Nl ID8gQ0xVT1BUX1ZFUkJPU0UgOiAwKTsKKwlwYXJhbXMub3B0aW9ucyA9CisJCSh2ZXJib3NlID8g Q0xVT1BUX1ZFUkJPU0UgOiAwKSB8CisJCShjb25jdXJyZW50ID8gQ0xVT1BUX0NPTkNVUlJFTlQg OiAwKTsKKworCS8qCisJICogRGV0ZXJtaW5lIHRoZSBsb2NrIG1vZGUgZXhwZWN0ZWQgYnkgY2x1 c3Rlcl9yZWwoKS4KKwkgKgorCSAqIEluIHRoZSBleGNsdXNpdmUgY2FzZSwgd2Ugb2J0YWluIEFj Y2Vzc0V4Y2x1c2l2ZUxvY2sgcmlnaHQgYXdheSB0bworCSAqIGF2b2lkIGxvY2stdXBncmFkZSBo YXphcmQgaW4gdGhlIHNpbmdsZS10cmFuc2FjdGlvbiBjYXNlLiBJbiB0aGUKKwkgKiBDT05DVVJS RU5UIGNhc2UsIHRoZSBBY2Nlc3NFeGNsdXNpdmVMb2NrIHdpbGwgb25seSBiZSB1c2VkIGF0IHRo ZSBlbmQKKwkgKiBvZiBwcm9jZXNzaW5nLCBzdXBwb3NlZGx5IGZvciB2ZXJ5IHNob3J0IHRpbWUu IFVudGlsIHRoZW4sIHdlJ2xsIGhhdmUKKwkgKiB0byB1bmxvY2sgdGhlIHJlbGF0aW9uIHRlbXBv cmFyaWx5LCBzbyB0aGVyZSdzIG5vIGxvY2stdXBncmFkZSBoYXphcmQuCisJICovCisJbG9ja19t b2RlID0gKHBhcmFtcy5vcHRpb25zICYgQ0xVT1BUX0NPTkNVUlJFTlQpID09IDAgPworCQlBY2Nl c3NFeGNsdXNpdmVMb2NrIDogTE9DS19DTFVTVEVSX0NPTkNVUlJFTlQ7CiAKIAlpZiAoc3RtdC0+ cmVsYXRpb24gIT0gTlVMTCkKIAl7CiAJCS8qIFRoaXMgaXMgdGhlIHNpbmdsZS1yZWxhdGlvbiBj YXNlLiAqLwogCQlPaWQJCQl0YWJsZU9pZDsKIAotCQkvKgotCQkgKiBGaW5kLCBsb2NrLCBhbmQg Y2hlY2sgcGVybWlzc2lvbnMgb24gdGhlIHRhYmxlLiAgV2Ugb2J0YWluCi0JCSAqIEFjY2Vzc0V4 Y2x1c2l2ZUxvY2sgcmlnaHQgYXdheSB0byBhdm9pZCBsb2NrLXVwZ3JhZGUgaGF6YXJkIGluIHRo ZQotCQkgKiBzaW5nbGUtdHJhbnNhY3Rpb24gY2FzZS4KLQkJICovCisJCS8qIEZpbmQsIGxvY2ss IGFuZCBjaGVjayBwZXJtaXNzaW9ucyBvbiB0aGUgdGFibGUuICovCiAJCXRhYmxlT2lkID0gUmFu Z2VWYXJHZXRSZWxpZEV4dGVuZGVkKHN0bXQtPnJlbGF0aW9uLAotCQkJCQkJCQkJCQlBY2Nlc3NF eGNsdXNpdmVMb2NrLAorCQkJCQkJCQkJCQlsb2NrX21vZGUsCiAJCQkJCQkJCQkJCTAsCiAJCQkJ CQkJCQkJCVJhbmdlVmFyQ2FsbGJhY2tNYWludGFpbnNUYWJsZSwKIAkJCQkJCQkJCQkJTlVMTCk7 CkBAIC0xOTgsNyArMzgyLDcgQEAgY2x1c3RlcihQYXJzZVN0YXRlICpwc3RhdGUsIENsdXN0ZXJT dG10ICpzdG10LCBib29sIGlzVG9wTGV2ZWwpCiAJCQkgKiBEbyB0aGUgam9iLiAoVGhlIGZ1bmN0 aW9uIHdpbGwgY2xvc2UgdGhlIHJlbGF0aW9uLCBsb2NrIGlzIGtlcHQKIAkJCSAqIHRpbGwgY29t bWl0LikKIAkJCSAqLwotCQkJY2x1c3Rlcl9yZWwocmVsLCBpbmRleE9pZCwgJnBhcmFtcyk7CisJ CQljbHVzdGVyX3JlbChyZWwsIGluZGV4T2lkLCAmcGFyYW1zLCBpc1RvcExldmVsKTsKIAogCQkJ cmV0dXJuOwogCQl9CkBAIC0yMzcsNyArNDIxLDcgQEAgY2x1c3RlcihQYXJzZVN0YXRlICpwc3Rh dGUsIENsdXN0ZXJTdG10ICpzdG10LCBib29sIGlzVG9wTGV2ZWwpCiAJCXJ0Y3MgPSBnZXRfdGFi bGVzX3RvX2NsdXN0ZXJfcGFydGl0aW9uZWQoY2x1c3Rlcl9jb250ZXh0LCBpbmRleE9pZCk7CiAK IAkJLyogY2xvc2UgcmVsYXRpb24sIHJlbGVhc2luZyBsb2NrIG9uIHBhcmVudCB0YWJsZSAqLwot CQl0YWJsZV9jbG9zZShyZWwsIEFjY2Vzc0V4Y2x1c2l2ZUxvY2spOworCQl0YWJsZV9jbG9zZShy ZWwsIGxvY2tfbW9kZSk7CiAJfQogCWVsc2UKIAl7CkBAIC0yNDYsNyArNDMwLDcgQEAgY2x1c3Rl cihQYXJzZVN0YXRlICpwc3RhdGUsIENsdXN0ZXJTdG10ICpzdG10LCBib29sIGlzVG9wTGV2ZWwp CiAJfQogCiAJLyogRG8gdGhlIGpvYi4gKi8KLQljbHVzdGVyX211bHRpcGxlX3JlbHMocnRjcywg JnBhcmFtcyk7CisJY2x1c3Rlcl9tdWx0aXBsZV9yZWxzKHJ0Y3MsICZwYXJhbXMsIGxvY2tfbW9k ZSwgaXNUb3BMZXZlbCk7CiAKIAkvKiBTdGFydCBhIG5ldyB0cmFuc2FjdGlvbiBmb3IgdGhlIGNs ZWFudXAgd29yay4gKi8KIAlTdGFydFRyYW5zYWN0aW9uQ29tbWFuZCgpOwpAQCAtMjYzLDcgKzQ0 Nyw4IEBAIGNsdXN0ZXIoUGFyc2VTdGF0ZSAqcHN0YXRlLCBDbHVzdGVyU3RtdCAqc3RtdCwgYm9v bCBpc1RvcExldmVsKQogICogcmV0dXJuLgogICovCiBzdGF0aWMgdm9pZAotY2x1c3Rlcl9tdWx0 aXBsZV9yZWxzKExpc3QgKnJ0Y3MsIENsdXN0ZXJQYXJhbXMgKnBhcmFtcykKK2NsdXN0ZXJfbXVs dGlwbGVfcmVscyhMaXN0ICpydGNzLCBDbHVzdGVyUGFyYW1zICpwYXJhbXMsIExPQ0tNT0RFIGxv Y2tfbW9kZSwKKwkJCQkJICBib29sIGlzVG9wTGV2ZWwpCiB7CiAJTGlzdENlbGwgICAqbGM7CiAK QEAgLTI4MywxMyArNDY4LDE5IEBAIGNsdXN0ZXJfbXVsdGlwbGVfcmVscyhMaXN0ICpydGNzLCBD bHVzdGVyUGFyYW1zICpwYXJhbXMpCiAJCS8qIGZ1bmN0aW9ucyBpbiBpbmRleGVzIG1heSB3YW50 IGEgc25hcHNob3Qgc2V0ICovCiAJCVB1c2hBY3RpdmVTbmFwc2hvdChHZXRUcmFuc2FjdGlvblNu YXBzaG90KCkpOwogCi0JCXJlbCA9IHRhYmxlX29wZW4ocnRjLT50YWJsZU9pZCwgQWNjZXNzRXhj bHVzaXZlTG9jayk7CisJCXJlbCA9IHRhYmxlX29wZW4ocnRjLT50YWJsZU9pZCwgbG9ja19tb2Rl KTsKIAotCQkvKgotCQkgKiBEbyB0aGUgam9iLiAoVGhlIGZ1bmN0aW9uIHdpbGwgY2xvc2UgdGhl IHJlbGF0aW9uLCBsb2NrIGlzIGtlcHQKLQkJICogdGlsbCBjb21taXQuKQotCQkgKi8KLQkJY2x1 c3Rlcl9yZWwocmVsLCBydGMtPmluZGV4T2lkLCBwYXJhbXMpOworCQkvKiBOb3QgYWxsIHJlbGF0 aW9ucyBjYW5ub3QgYmUgcHJvY2Vzc2VkIGluIHRoZSBjb25jdXJyZW50IG1vZGUuICovCisJCWlm ICgocGFyYW1zLT5vcHRpb25zICYgQ0xVT1BUX0NPTkNVUlJFTlQpID09IDAgfHwKKwkJCWNoZWNr X3JlbGF0aW9uX2lzX2NsdXN0ZXJhYmxlX2NvbmN1cnJlbnRseShyZWwsIERFQlVHMSwKKwkJCQkJ CQkJCQkJCQkgICAiQ0xVU1RFUiAoQ09OQ1VSUkVOVExZKSIpKQorCQl7CisJCQkvKiBEbyB0aGUg am9iLiAoVGhlIGZ1bmN0aW9uIHdpbGwgY2xvc2UgdGhlIHJlbGF0aW9uLCBsb2NrIGlzIGtlcHQK KwkJCSAqIHRpbGwgY29tbWl0LikgKi8KKwkJCWNsdXN0ZXJfcmVsKHJlbCwgcnRjLT5pbmRleE9p ZCwgcGFyYW1zLCBpc1RvcExldmVsKTsKKwkJfQorCQllbHNlCisJCQl0YWJsZV9jbG9zZShyZWws IGxvY2tfbW9kZSk7CiAKIAkJUG9wQWN0aXZlU25hcHNob3QoKTsKIAkJQ29tbWl0VHJhbnNhY3Rp b25Db21tYW5kKCk7CkBAIC0zMTMsMTAgKzUwNCwyMSBAQCBjbHVzdGVyX211bHRpcGxlX3JlbHMo TGlzdCAqcnRjcywgQ2x1c3RlclBhcmFtcyAqcGFyYW1zKQogICogaW5zdGVhZCBvZiBpbmRleCBv cmRlci4gIFRoaXMgaXMgdGhlIG5ldyBpbXBsZW1lbnRhdGlvbiBvZiBWQUNVVU0gRlVMTCwKICAq IGFuZCBlcnJvciBtZXNzYWdlcyBzaG91bGQgcmVmZXIgdG8gdGhlIG9wZXJhdGlvbiBhcyBWQUNV VU0gbm90IENMVVNURVIuCiAgKgotICogV2UgZXhwZWN0IHRoYXQgT2xkSGVhcCBpcyBhbHJlYWR5 IGxvY2tlZCBpbiBBY2Nlc3NFeGNsdXNpdmVMb2NrIG1vZGUuCisgKiBXZSBleHBlY3QgdGhhdCBP bGRIZWFwIGlzIGFscmVhZHkgbG9ja2VkLiBUaGUgbG9jayBtb2RlIGlzCisgKiBBY2Nlc3NFeGNs dXNpdmVMb2NrIGZvciBub3JtYWwgcHJvY2Vzc2luZyBhbmQgTE9DS19DTFVTVEVSX0NPTkNVUlJF TlQgZm9yCisgKiBjb25jdXJyZW50IHByb2Nlc3NpbmcgKHNvIHRoYXQgU0VMRUNULCBJTlNFUlQs IFVQREFURSBhbmQgREVMRVRFIGNvbW1hbmRzCisgKiB3b3JrLCBidXQgY2x1c3Rlcl9yZWwoKSBj YW5ub3QgYmUgY2FsbGVkIGNvbmN1cnJlbnRseSBmb3IgdGhlIHNhbWUKKyAqIHJlbGF0aW9uKS4K KyAqCisgKiBOb3RlIHRoYXQsIGluIHRoZSBjb25jdXJyZW50IGNhc2UsIHRoZSBmdW5jdGlvbiBy ZWxlYXNlcyB0aGUgbG9jayBhdCBzb21lCisgKiBwb2ludCwgaW4gb3JkZXIgdG8gZ2V0IEFjY2Vz c0V4Y2x1c2l2ZUxvY2sgZm9yIHRoZSBmaW5hbCBzdGVwcyAoaS5lLiB0bworICogc3dhcCB0aGUg cmVsYXRpb24gZmlsZXMpLiBUbyBtYWtlIHRoaW5ncyBzaW1wbGVyLCB0aGUgY2FsbGVyIHNob3Vs ZCBleHBlY3QKKyAqIE9sZEhlYXAgdG8gYmUgY2xvc2VkIG9uIHJldHVybiwgcmVnYXJkbGVzcyBD TFVPUFRfQ09OQ1VSUkVOVC4gKFRoZQorICogQWNjZXNzRXhjbHVzaXZlTG9jayBpcyBrZXB0IHRp bGwgdGhlIGVuZCBvZiB0aGUgdHJhbnNhY3Rpb24uKQogICovCiB2b2lkCi1jbHVzdGVyX3JlbChS ZWxhdGlvbiBPbGRIZWFwLCBPaWQgaW5kZXhPaWQsIENsdXN0ZXJQYXJhbXMgKnBhcmFtcykKK2Ns dXN0ZXJfcmVsKFJlbGF0aW9uIE9sZEhlYXAsIE9pZCBpbmRleE9pZCwgQ2x1c3RlclBhcmFtcyAq cGFyYW1zLAorCQkJYm9vbCBpc1RvcExldmVsKQogewogCU9pZAkJCXRhYmxlT2lkID0gUmVsYXRp b25HZXRSZWxpZChPbGRIZWFwKTsKIAlPaWQJCQlzYXZlX3VzZXJpZDsKQEAgLTMyNSw2ICs1Mjcs NDEgQEAgY2x1c3Rlcl9yZWwoUmVsYXRpb24gT2xkSGVhcCwgT2lkIGluZGV4T2lkLCBDbHVzdGVy UGFyYW1zICpwYXJhbXMpCiAJYm9vbAkJdmVyYm9zZSA9ICgocGFyYW1zLT5vcHRpb25zICYgQ0xV T1BUX1ZFUkJPU0UpICE9IDApOwogCWJvb2wJCXJlY2hlY2sgPSAoKHBhcmFtcy0+b3B0aW9ucyAm IENMVU9QVF9SRUNIRUNLKSAhPSAwKTsKIAlSZWxhdGlvbglpbmRleCA9IE5VTEw7CisJYm9vbAkJ Y29uY3VycmVudCA9ICgocGFyYW1zLT5vcHRpb25zICYgQ0xVT1BUX0NPTkNVUlJFTlQpICE9IDAp OworCUxPQ0tNT0RFCWxtb2RlOworCWJvb2wJCWVudGVyZWQsIHN1Y2Nlc3M7CisKKwkvKiBDaGVj ayB0aGF0IHRoZSBjb3JyZWN0IGxvY2sgaXMgaGVsZC4gKi8KKwlsbW9kZSA9ICFjb25jdXJyZW50 ID8gQWNjZXNzRXhjbHVzaXZlTG9jayA6IExPQ0tfQ0xVU1RFUl9DT05DVVJSRU5UOworCisJLyoK KwkgKiBTa2lwIHRoZSByZWxhdGlvbiBpZiBpdCdzIGJlaW5nIHByb2Nlc3NlZCBjb25jdXJyZW50 bHkuIEluIHN1Y2ggYSBjYXNlLAorCSAqIHdlIGNhbm5vdCByZWx5IG9uIGEgbG9jayBiZWNhdXNl IHRoZSBvdGhlciBiYWNrZW5kIG5lZWRzIHRvIHJlbGVhc2UgaXQKKwkgKiB0ZW1wb3JhcmlseSBh dCBzb21lIHBvaW50LgorCSAqCisJICogVGhpcyBjaGVjayBzaG91bGQgbm90IHRha2UgcGxhY2Ug dW50aWwgd2UgaGF2ZSBhIGxvY2sgdGhhdCBwcmV2ZW50cworCSAqIGFub3RoZXIgYmFja2VuZCBm cm9tIHN0YXJ0aW5nIFZBQ1VVTSBGVUxMIC8gQ0xVU1RFUiBDT05DVVJSRU5UTFkgYWZ0ZXIKKwkg KiBvdXIgY2hlY2suCisJICovCisJQXNzZXJ0KENoZWNrUmVsYXRpb25Mb2NrZWRCeU1lKE9sZEhl YXAsIGxtb2RlLCBmYWxzZSkpOworCWlmIChpc19jb25jdXJyZW50X2NsdXN0ZXJfaW5fcHJvZ3Jl c3ModGFibGVPaWQpKQorCXsKKwkJZXJlcG9ydChOT1RJQ0UsCisJCQkJKGVycm1zZyhDTFVTVEVS X0lOX1BST0dSRVNTX01FU1NBR0UsCisJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShPbGRI ZWFwKSkpKTsKKwkJdGFibGVfY2xvc2UoT2xkSGVhcCwgbG1vZGUpOworCQlyZXR1cm47CisJfQor CisJLyogVGhlcmUgYXJlIHNwZWNpZmljIHJlcXVpcmVtZW50cyBvbiBjb25jdXJyZW50IHByb2Nl c3NpbmcuICovCisJaWYgKGNvbmN1cnJlbnQpCisJeworCQljaGVja19jb25jdXJyZW50X2NsdXN0 ZXJfcmVxdWlyZW1lbnRzKE9sZEhlYXAsIGlzVG9wTGV2ZWwsCisJCQkJCQkJCQkJCSAgT2lkSXNW YWxpZChpbmRleE9pZCkpOworCisJCWNoZWNrX3JlbGF0aW9uX2lzX2NsdXN0ZXJhYmxlX2NvbmN1 cnJlbnRseShPbGRIZWFwLCBFUlJPUiwKKwkJCQkJCQkJCQkJCSAgICJDTFVTVEVSIChDT05DVVJS RU5UTFkpIik7CisJfQogCiAJLyogQ2hlY2sgZm9yIHVzZXItcmVxdWVzdGVkIGFib3J0LiAqLwog CUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CkBAIC0zNjEsNyArNTk4LDcgQEAgY2x1c3Rlcl9yZWwo UmVsYXRpb24gT2xkSGVhcCwgT2lkIGluZGV4T2lkLCBDbHVzdGVyUGFyYW1zICpwYXJhbXMpCiAJ CS8qIENoZWNrIHRoYXQgdGhlIHVzZXIgc3RpbGwgaGFzIHByaXZpbGVnZXMgZm9yIHRoZSByZWxh dGlvbiAqLwogCQlpZiAoIWNsdXN0ZXJfaXNfcGVybWl0dGVkX2Zvcl9yZWxhdGlvbih0YWJsZU9p ZCwgc2F2ZV91c2VyaWQpKQogCQl7Ci0JCQlyZWxhdGlvbl9jbG9zZShPbGRIZWFwLCBBY2Nlc3NF eGNsdXNpdmVMb2NrKTsKKwkJCXJlbGF0aW9uX2Nsb3NlKE9sZEhlYXAsIGxtb2RlKTsKIAkJCWdv dG8gb3V0OwogCQl9CiAKQEAgLTM3Niw3ICs2MTMsNyBAQCBjbHVzdGVyX3JlbChSZWxhdGlvbiBP bGRIZWFwLCBPaWQgaW5kZXhPaWQsIENsdXN0ZXJQYXJhbXMgKnBhcmFtcykKIAkJICovCiAJCWlm IChSRUxBVElPTl9JU19PVEhFUl9URU1QKE9sZEhlYXApKQogCQl7Ci0JCQlyZWxhdGlvbl9jbG9z ZShPbGRIZWFwLCBBY2Nlc3NFeGNsdXNpdmVMb2NrKTsKKwkJCXJlbGF0aW9uX2Nsb3NlKE9sZEhl YXAsIGxtb2RlKTsKIAkJCWdvdG8gb3V0OwogCQl9CiAKQEAgLTM4Nyw3ICs2MjQsNyBAQCBjbHVz dGVyX3JlbChSZWxhdGlvbiBPbGRIZWFwLCBPaWQgaW5kZXhPaWQsIENsdXN0ZXJQYXJhbXMgKnBh cmFtcykKIAkJCSAqLwogCQkJaWYgKCFTZWFyY2hTeXNDYWNoZUV4aXN0czEoUkVMT0lELCBPYmpl Y3RJZEdldERhdHVtKGluZGV4T2lkKSkpCiAJCQl7Ci0JCQkJcmVsYXRpb25fY2xvc2UoT2xkSGVh cCwgQWNjZXNzRXhjbHVzaXZlTG9jayk7CisJCQkJcmVsYXRpb25fY2xvc2UoT2xkSGVhcCwgbG1v ZGUpOwogCQkJCWdvdG8gb3V0OwogCQkJfQogCkBAIC0zOTgsNyArNjM1LDcgQEAgY2x1c3Rlcl9y ZWwoUmVsYXRpb24gT2xkSGVhcCwgT2lkIGluZGV4T2lkLCBDbHVzdGVyUGFyYW1zICpwYXJhbXMp CiAJCQlpZiAoKHBhcmFtcy0+b3B0aW9ucyAmIENMVU9QVF9SRUNIRUNLX0lTQ0xVU1RFUkVEKSAh PSAwICYmCiAJCQkJIWdldF9pbmRleF9pc2NsdXN0ZXJlZChpbmRleE9pZCkpCiAJCQl7Ci0JCQkJ cmVsYXRpb25fY2xvc2UoT2xkSGVhcCwgQWNjZXNzRXhjbHVzaXZlTG9jayk7CisJCQkJcmVsYXRp b25fY2xvc2UoT2xkSGVhcCwgbG1vZGUpOwogCQkJCWdvdG8gb3V0OwogCQkJfQogCQl9CkBAIC00 MTQsNiArNjUxLDExIEBAIGNsdXN0ZXJfcmVsKFJlbGF0aW9uIE9sZEhlYXAsIE9pZCBpbmRleE9p ZCwgQ2x1c3RlclBhcmFtcyAqcGFyYW1zKQogCQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJjb2Rl KEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKIAkJCQkgZXJybXNnKCJjYW5ub3QgY2x1 c3RlciBhIHNoYXJlZCBjYXRhbG9nIikpKTsKKwkvKgorCSAqIFRoZSBDT05DVVJSRU5UIGNhc2Ug c2hvdWxkIGhhdmUgYmVlbiByZWplY3RlZCBlYXJsaWVyIGJlY2F1c2UgaXQgZG9lcworCSAqIG5v dCBzdXBwb3J0IHN5c3RlbSBjYXRhbG9ncy4KKwkgKi8KKwlBc3NlcnQoIShPbGRIZWFwLT5yZF9y ZWwtPnJlbGlzc2hhcmVkICYmIGNvbmN1cnJlbnQpKTsKIAogCS8qCiAJICogRG9uJ3QgcHJvY2Vz cyB0ZW1wIHRhYmxlcyBvZiBvdGhlciBiYWNrZW5kcyAuLi4gdGhlaXIgbG9jYWwgYnVmZmVyCkBA IC00NDAsNyArNjgyLDcgQEAgY2x1c3Rlcl9yZWwoUmVsYXRpb24gT2xkSGVhcCwgT2lkIGluZGV4 T2lkLCBDbHVzdGVyUGFyYW1zICpwYXJhbXMpCiAJLyogQ2hlY2sgaGVhcCBhbmQgaW5kZXggYXJl IHZhbGlkIHRvIGNsdXN0ZXIgb24gKi8KIAlpZiAoT2lkSXNWYWxpZChpbmRleE9pZCkpCiAJewot CQljaGVja19pbmRleF9pc19jbHVzdGVyYWJsZShPbGRIZWFwLCBpbmRleE9pZCwgQWNjZXNzRXhj bHVzaXZlTG9jayk7CisJCWNoZWNrX2luZGV4X2lzX2NsdXN0ZXJhYmxlKE9sZEhlYXAsIGluZGV4 T2lkLCBsbW9kZSk7CiAJCS8qIE9wZW4gdGhlIGluZGV4IChJdCBzaG91bGQgYWxyZWFkeSBiZSBs b2NrZWQuKSAqLwogCQlpbmRleCA9IGluZGV4X29wZW4oaW5kZXhPaWQsIE5vTG9jayk7CiAJfQpA QCAtNDU1LDcgKzY5Nyw4IEBAIGNsdXN0ZXJfcmVsKFJlbGF0aW9uIE9sZEhlYXAsIE9pZCBpbmRl eE9pZCwgQ2x1c3RlclBhcmFtcyAqcGFyYW1zKQogCWlmIChPbGRIZWFwLT5yZF9yZWwtPnJlbGtp bmQgPT0gUkVMS0lORF9NQVRWSUVXICYmCiAJCSFSZWxhdGlvbklzUG9wdWxhdGVkKE9sZEhlYXAp KQogCXsKLQkJcmVsYXRpb25fY2xvc2UoT2xkSGVhcCwgQWNjZXNzRXhjbHVzaXZlTG9jayk7CisJ CWluZGV4X2Nsb3NlKGluZGV4LCBsbW9kZSk7CisJCXJlbGF0aW9uX2Nsb3NlKE9sZEhlYXAsIGxt b2RlKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC00NjgsMTEgKzcxMSw0MiBAQCBjbHVzdGVyX3Jl bChSZWxhdGlvbiBPbGRIZWFwLCBPaWQgaW5kZXhPaWQsIENsdXN0ZXJQYXJhbXMgKnBhcmFtcykK IAkgKiBpbnZhbGlkLCBiZWNhdXNlIHdlIG1vdmUgdHVwbGVzIGFyb3VuZC4gIFByb21vdGUgdGhl bSB0byByZWxhdGlvbgogCSAqIGxvY2tzLiAgUHJlZGljYXRlIGxvY2tzIG9uIGluZGV4ZXMgd2ls bCBiZSBwcm9tb3RlZCB3aGVuIHRoZXkgYXJlCiAJICogcmVpbmRleGVkLgorCSAqCisJICogRHVy aW5nIGNvbmN1cnJlbnQgcHJvY2Vzc2luZywgdGhlIGhlYXAgYXMgd2VsbCBhcyBpdHMgaW5kZXhl cyBzdGF5IGluCisJICogb3BlcmF0aW9uLCBzbyB3ZSBwb3N0cG9uZSB0aGlzIHN0ZXAgdW50aWwg dGhleSBhcmUgbG9ja2VkIHVzaW5nCisJICogQWNjZXNzRXhjbHVzaXZlTG9jayBuZWFyIHRoZSBl bmQgb2YgdGhlIHByb2Nlc3NpbmcuCiAJICovCi0JVHJhbnNmZXJQcmVkaWNhdGVMb2Nrc1RvSGVh cFJlbGF0aW9uKE9sZEhlYXApOworCWlmICghY29uY3VycmVudCkKKwkJVHJhbnNmZXJQcmVkaWNh dGVMb2Nrc1RvSGVhcFJlbGF0aW9uKE9sZEhlYXApOwogCiAJLyogcmVidWlsZF9yZWxhdGlvbiBk b2VzIGFsbCB0aGUgZGlydHkgd29yayAqLwotCXJlYnVpbGRfcmVsYXRpb24oT2xkSGVhcCwgaW5k ZXgsIHZlcmJvc2UpOworCWVudGVyZWQgPSBmYWxzZTsKKwlzdWNjZXNzID0gZmFsc2U7CisJUEdf VFJZKCk7CisJeworCQkvKgorCQkgKiBGb3IgY29uY3VycmVudCBwcm9jZXNzaW5nLCBtYWtlIHN1 cmUgb3RoZXIgdHJhbnNhY3Rpb25zIHRyZWF0IHRoaXMKKwkJICogdGFibGUgYXMgaWYgaXQgd2Fz IGEgc3lzdGVtIC8gdXNlciBjYXRhbG9nLCBhbmQgV0FMIHRoZSByZWxldmFudAorCQkgKiBhZGRp dGlvbmFsIGluZm9ybWF0aW9uLiBFUlJPUiBpcyByYWlzZWQgaWYgYW5vdGhlciBiYWNrZW5kIGlz CisJCSAqIHByb2Nlc3NpbmcgdGhlIHNhbWUgdGFibGUuCisJCSAqLworCQlpZiAoY29uY3VycmVu dCkKKwkJeworCQkJUmVsYXRpb24JKmluZGV4X3AgPSBpbmRleCA/ICZpbmRleCA6IE5VTEw7CisK KwkJCWJlZ2luX2NvbmN1cnJlbnRfY2x1c3RlcigmT2xkSGVhcCwgaW5kZXhfcCwgJmVudGVyZWQp OworCQl9CisKKwkJcmVidWlsZF9yZWxhdGlvbihPbGRIZWFwLCBpbmRleCwgdmVyYm9zZSwKKwkJ CQkJCSAocGFyYW1zLT5vcHRpb25zICYgQ0xVT1BUX0NPTkNVUlJFTlQpICE9IDApOworCQlzdWNj ZXNzID0gdHJ1ZTsKKwl9CisJUEdfRklOQUxMWSgpOworCXsKKwkJaWYgKGNvbmN1cnJlbnQgJiYg ZW50ZXJlZCkKKwkJCWVuZF9jb25jdXJyZW50X2NsdXN0ZXIodGFibGVPaWQsICFzdWNjZXNzKTsK Kwl9CisJUEdfRU5EX1RSWSgpOwogCiAJLyoKIAkgKiBOQjogcmVidWlsZF9yZWxhdGlvbiBkb2Vz IHRhYmxlX2Nsb3NlKCkgb24gT2xkSGVhcCwgYW5kIGFsc28gb24gaW5kZXgsCkBAIC02MjIsMTgg Kzg5Niw5OSBAQCBtYXJrX2luZGV4X2NsdXN0ZXJlZChSZWxhdGlvbiByZWwsIE9pZCBpbmRleE9p ZCwgYm9vbCBpc19pbnRlcm5hbCkKIAl0YWJsZV9jbG9zZShwZ19pbmRleCwgUm93RXhjbHVzaXZl TG9jayk7CiB9CiAKKy8qCisgKiBDaGVjayBpZiB0aGUgQ09OQ1VSUkVOVExZIG9wdGlvbiBpcyBs ZWdhbCBmb3IgdGhlIHJlbGF0aW9uLgorICovCitib29sCitjaGVja19yZWxhdGlvbl9pc19jbHVz dGVyYWJsZV9jb25jdXJyZW50bHkoUmVsYXRpb24gcmVsLCBpbnQgZWxldmVsLAorCQkJCQkJCQkJ CSAgIGNvbnN0IGNoYXIgKnN0bXQpCit7CisJY2hhcglyZWxwZXJzaXN0ZW5jZSwgcmVwbGlkZW50 OworCU9pZAkJaWRlbnRfaWR4OworCisJLyogRGF0YSBjaGFuZ2VzIGluIHN5c3RlbSByZWxhdGlv bnMgYXJlIG5vdCBsb2dpY2FsbHkgZGVjb2RlZC4gKi8KKwlpZiAoSXNDYXRhbG9nUmVsYXRpb24o cmVsKSkKKwl7CisJCWVyZXBvcnQoZWxldmVsLAorCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVS RV9OT1RfU1VQUE9SVEVEKSwKKwkJCQkgZXJybXNnKCJjYW5ub3QgcHJvY2VzcyByZWxhdGlvbiBc IiVzXCIiLAorCQkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSksCisJCQkJIGVycmhp bnQoIiVzIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGNhdGFsb2cgcmVsYXRpb25zIiwgc3RtdCkpKTsK KwkJcmV0dXJuIGZhbHNlOworCX0KKworCWlmIChJc1RvYXN0UmVsYXRpb24ocmVsKSkKKwl7CisJ CWVyZXBvcnQoZWxldmVsLAorCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9S VEVEKSwKKwkJCQkgZXJybXNnKCJjYW5ub3QgcHJvY2VzcyByZWxhdGlvbiBcIiVzXCIiLAorCQkJ CQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSksCisJCQkJIGVycmhpbnQoIiVzIGlzIG5v dCBzdXBwb3J0ZWQgZm9yIFRPQVNUIHJlbGF0aW9ucywgdW5sZXNzIHRoZSBtYWluIHJlbGF0aW9u IGlzIHByb2Nlc3NlZCB0b28iLAorCQkJCQkJIHN0bXQpKSk7CisJCXJldHVybiBmYWxzZTsKKwl9 CisKKwlyZWxwZXJzaXN0ZW5jZSA9IHJlbC0+cmRfcmVsLT5yZWxwZXJzaXN0ZW5jZTsKKwlpZiAo cmVscGVyc2lzdGVuY2UgIT0gUkVMUEVSU0lTVEVOQ0VfUEVSTUFORU5UKQorCXsKKwkJZXJlcG9y dChlbGV2ZWwsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lU RV9TVEFURSksCisJCQkJIGVycm1zZygiY2Fubm90IHByb2Nlc3MgcmVsYXRpb24gXCIlc1wiIiwK KwkJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCkpLAorCQkJCSBlcnJoaW50KCJDTFVT VEVSIENPTkNVUlJFTlRMWSBpcyBvbmx5IGFsbG93ZWQgZm9yIHBlcm1hbmVudCByZWxhdGlvbnMi KSkpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyogV2l0aCBOT1RISU5HLCBXQUwgZG9lcyBu b3QgY29udGFpbiB0aGUgb2xkIHR1cGxlLiAqLworCXJlcGxpZGVudCA9IHJlbC0+cmRfcmVsLT5y ZWxyZXBsaWRlbnQ7CisJaWYgKHJlcGxpZGVudCA9PSBSRVBMSUNBX0lERU5USVRZX05PVEhJTkcp CisJeworCQllcmVwb3J0KGVsZXZlbCwKKwkJCQkoZXJyY29kZShFUlJDT0RFX09CSkVDVF9OT1Rf SU5fUFJFUkVRVUlTSVRFX1NUQVRFKSwKKwkJCQkgZXJybXNnKCJjYW5ub3QgcHJvY2VzcyByZWxh dGlvbiBcIiVzXCIiLAorCQkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSksCisJCQkJ IGVycmhpbnQoInJlbGF0aW9uIFwiJXNcIiBoYXMgaW5zdWZmaWNpZW50IHJlcGxpY2F0aW9uIGlk ZW50aXR5IiwKKwkJCQkJCSBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpKSkpOworCQlyZXR1 cm4gZmFsc2U7CisJfQorCisJLyoKKwkgKiBJZGVudGl0eSBpbmRleCBpcyBub3Qgc2V0IGlmIHRo ZSByZXBsaWNhIGlkZW50aXR5IGlzIEZVTEwsIGJ1dCBQSyBtaWdodAorCSAqIGV4aXN0IGluIHN1 Y2ggYSBjYXNlLgorCSAqLworCWlkZW50X2lkeCA9IFJlbGF0aW9uR2V0UmVwbGljYUluZGV4KHJl bCk7CisJaWYgKCFPaWRJc1ZhbGlkKGlkZW50X2lkeCkgJiYgT2lkSXNWYWxpZChyZWwtPnJkX3Br aW5kZXgpKQorCQlpZGVudF9pZHggPSByZWwtPnJkX3BraW5kZXg7CisJaWYgKCFPaWRJc1ZhbGlk KGlkZW50X2lkeCkpCisJeworCQllcmVwb3J0KGVsZXZlbCwKKwkJCQkoZXJyY29kZShFUlJDT0RF X09CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NUQVRFKSwKKwkJCQkgZXJybXNnKCJjYW5ub3Qg cHJvY2VzcyByZWxhdGlvbiBcIiVzXCIiLAorCQkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUo cmVsKSksCisJCQkJIChlcnJoaW50KCJyZWxhdGlvbiBcIiVzXCIgaGFzIG5vIGlkZW50aXR5IGlu ZGV4IiwKKwkJCQkJCSAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSkpKSk7CisJCXJldHVy biBmYWxzZTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKwogLyoKICAqIHJlYnVpbGRfcmVsYXRp b246IHJlYnVpbGQgYW4gZXhpc3RpbmcgcmVsYXRpb24gaW4gaW5kZXggb3IgcGh5c2ljYWwgb3Jk ZXIKICAqCi0gKiBPbGRIZWFwOiB0YWJsZSB0byByZWJ1aWxkIC0tLSBtdXN0IGJlIG9wZW5lZCBh bmQgZXhjbHVzaXZlLWxvY2tlZCEKKyAqIE9sZEhlYXA6IHRhYmxlIHRvIHJlYnVpbGQgLS0tIG11 c3QgYmUgb3BlbmVkIGFuZCBsb2NrZWQuIFNlZSBjbHVzdGVyX3JlbCgpCisgKiBmb3IgY29tbWVu dHMgb24gdGhlIHJlcXVpcmVkIGxvY2sgc3RyZW5ndGguCisgKgogICogaW5kZXg6IGluZGV4IHRv IGNsdXN0ZXIgYnksIG9yIE5VTEwgdG8gcmV3cml0ZSBpbiBwaHlzaWNhbCBvcmRlci4gTXVzdCBi ZQogICogb3BlbmVkIGFuZCBsb2NrZWQuCiAgKgogICogT24gZXhpdCwgdGhlIGhlYXAgKGFuZCBh bHNvIHRoZSBpbmRleCwgaWYgb25lIHdhcyBwYXNzZWQpIGFyZSBjbG9zZWQsIGJ1dAotICogc3Rp bGwgbG9ja2VkIHdpdGggQWNjZXNzRXhjbHVzaXZlTG9jay4KKyAqIHN0aWxsIGxvY2tlZCB3aXRo IEFjY2Vzc0V4Y2x1c2l2ZUxvY2suIChUaGUgZnVuY3Rpb24gaGFuZGxlcyB0aGUgbG9jaworICog dXBncmFkZSBpZiAnY29uY3VycmVudCcgaXMgdHJ1ZS4pCiAgKi8KIHN0YXRpYyB2b2lkCi1yZWJ1 aWxkX3JlbGF0aW9uKFJlbGF0aW9uIE9sZEhlYXAsIFJlbGF0aW9uIGluZGV4LCBib29sIHZlcmJv c2UpCityZWJ1aWxkX3JlbGF0aW9uKFJlbGF0aW9uIE9sZEhlYXAsIFJlbGF0aW9uIGluZGV4LCBi b29sIHZlcmJvc2UsCisJCQkJIGJvb2wgY29uY3VycmVudCkKIHsKIAlPaWQJCQl0YWJsZU9pZCA9 IFJlbGF0aW9uR2V0UmVsaWQoT2xkSGVhcCk7CiAJT2lkCQkJaW5kZXhPaWQgPSBpbmRleCA/IFJl bGF0aW9uR2V0UmVsaWQoaW5kZXgpIDogSW52YWxpZE9pZDsKQEAgLTY0MiwxOSArOTk3LDgzIEBA IHJlYnVpbGRfcmVsYXRpb24oUmVsYXRpb24gT2xkSGVhcCwgUmVsYXRpb24gaW5kZXgsIGJvb2wg dmVyYm9zZSkKIAlPaWQJCQlPSUROZXdIZWFwOwogCVJlbGF0aW9uCU5ld0hlYXA7CiAJY2hhcgkJ cmVscGVyc2lzdGVuY2U7Ci0JYm9vbAkJaXNfc3lzdGVtX2NhdGFsb2c7CiAJYm9vbAkJc3dhcF90 b2FzdF9ieV9jb250ZW50OwogCVRyYW5zYWN0aW9uSWQgZnJvemVuWGlkOwogCU11bHRpWGFjdElk IGN1dG9mZk11bHRpOworCU5hbWVEYXRhCXNsb3RuYW1lOworCUxvZ2ljYWxEZWNvZGluZ0NvbnRl eHQgKmN0eCA9IE5VTEw7CisJU25hcHNob3QJc25hcHNob3QgPSBOVUxMOworCUNhdGFsb2dTdGF0 ZQkqY2F0X3N0YXRlID0gTlVMTDsKIAlMT0NLTU9ERQlsbW9kZV9uZXc7CiAKKwlpZiAoY29uY3Vy cmVudCkKKwl7CisJCVR1cGxlRGVzYwl0dXBkZXNjOworCQlSZWxSZW9wZW5JbmZvCXJyaVsyXTsK KwkJaW50CQlucmVsOworCisJCS8qCisJCSAqIENMVVNURVIgQ09OQ1VSUkVOVExZIGlzIG5vdCBh bGxvd2VkIGluIGEgdHJhbnNhY3Rpb24gYmxvY2ssIHNvIHRoaXMKKwkJICogc2hvdWxkIG5ldmVy IGZpcmUuCisJCSAqLworCQlBc3NlcnQoR2V0VG9wVHJhbnNhY3Rpb25JZElmQW55KCkgPT0gSW52 YWxpZFRyYW5zYWN0aW9uSWQpOworCisJCS8qCisJCSAqIEEgc2luZ2xlIGJhY2tlbmQgc2hvdWxk IG5vdCBleGVjdXRlIG11bHRpcGxlIENMVVNURVIgY29tbWFuZHMgYXQgYQorCQkgKiB0aW1lLCBz byB1c2UgUElEIHRvIG1ha2UgdGhlIHNsb3QgdW5pcXVlLgorCQkgKi8KKwkJc25wcmludGYoTmFt ZVN0cihzbG90bmFtZSksIE5BTUVEQVRBTEVOLCAiY2x1c3Rlcl8lZCIsIE15UHJvY1BpZCk7CisK KwkJLyoKKwkJICogR2F0aGVyIGNhdGFsb2cgaW5mb3JtYXRpb24gc28gdGhhdCB3ZSBjYW4gY2hl Y2sgbGF0ZXIgaWYgdGhlIG9sZAorCQkgKiByZWxhdGlvbiBoYXMgbm90IGNoYW5nZWQgd2hpbGUg dW5sb2NrZWQuCisJCSAqCisJCSAqIFNpbmNlIHRoaXMgZnVuY3Rpb24gYWxzbyBjaGVja3MgaWYg dGhlIHJlbGF0aW9uIGNhbiBiZSBwcm9jZXNzZWQsCisJCSAqIGl0J3MgaW1wb3J0YW50IHRvIGNh bGwgaXQgYmVmb3JlIHdlIHNldHVwIHRoZSBsb2dpY2FsIGRlY29kaW5nLAorCQkgKiBiZWNhdXNl IHRoYXQgY2FuIHRha2Ugc29tZSB0aW1lLiBOb3Qgc3VyZSBpZiBpdCdzIG5lY2Vzc2FyeSB0byBk bworCQkgKiBpdCBldmVuIGVhcmxpZXIuCisJCSAqLworCQljYXRfc3RhdGUgPSBnZXRfY2F0YWxv Z19zdGF0ZShPbGRIZWFwKTsKKworCQl0dXBkZXNjID0gQ3JlYXRlVHVwbGVEZXNjQ29weShSZWxh dGlvbkdldERlc2NyKE9sZEhlYXApKTsKKworCQkvKgorCQkgKiBVbmxvY2sgdGhlIHJlbGF0aW9u IChhbmQgcG9zc2libHkgdGhlIGNsdXN0ZXJpbmcgaW5kZXgpIHRvIGF2b2lkCisJCSAqIGRlYWRs b2NrIGJlY2F1c2Ugc2V0dXBfbG9naWNhbF9kZWNvZGluZygpIHdpbGwgd2FpdCBmb3IgYWxsIHRo ZQorCQkgKiBydW5uaW5nIHRyYW5zYWN0aW9ucyAod2l0aCBYSUQgYXNzaWduZWQpIHRvIGZpbmlz aC4gU29tZSBvZiB0aG9zZQorCQkgKiB0cmFuc2FjdGlvbnMgbWlnaHQgYmUgd2FpdGluZyBmb3Ig YSBsb2NrIG9uIG91ciByZWxhdGlvbi4KKwkJICovCisJCW5yZWwgPSAwOworCQlpbml0X3JlbF9y ZW9wZW5faW5mbygmcnJpW25yZWwrK10sICZPbGRIZWFwLCBJbnZhbGlkT2lkLAorCQkJCQkJCSBM T0NLX0NMVVNURVJfQ09OQ1VSUkVOVCwKKwkJCQkJCQkgTE9DS19DTFVTVEVSX0NPTkNVUlJFTlQp OworCQlpZiAoaW5kZXgpCisJCQlpbml0X3JlbF9yZW9wZW5faW5mbygmcnJpW25yZWwrK10sICZp bmRleCwgSW52YWxpZE9pZCwKKwkJCQkJCQkJIExPQ0tfQ0xVU1RFUl9DT05DVVJSRU5ULAorCQkJ CQkJCQkgTE9DS19DTFVTVEVSX0NPTkNVUlJFTlQpOworCQl1bmxvY2tfYW5kX2Nsb3NlX3JlbGF0 aW9ucyhycmksIG5yZWwpOworCisJCS8qIFByZXBhcmUgdG8gY2FwdHVyZSB0aGUgY29uY3VycmVu dCBkYXRhIGNoYW5nZXMuICovCisJCWN0eCA9IHNldHVwX2xvZ2ljYWxfZGVjb2RpbmcodGFibGVP aWQsIE5hbWVTdHIoc2xvdG5hbWUpLCB0dXBkZXNjKTsKKworCQkvKiBMb2NrIHRoZSB0YWJsZSAo YW5kIGluZGV4KSBhZ2Fpbi4gKi8KKwkJcmVvcGVuX3JlbGF0aW9ucyhycmksIG5yZWwpOworCisJ CS8qCisJCSAqIENoZWNrIGlmIGEgJ3R1cGRlc2MnIGNvdWxkIGhhdmUgY2hhbmdlZCB3aGlsZSB0 aGUgcmVsYXRpb24gd2FzCisJCSAqIHVubG9ja2VkLgorCQkgKi8KKwkJY2hlY2tfY2F0YWxvZ19j aGFuZ2VzKE9sZEhlYXAsIGNhdF9zdGF0ZSk7CisKKwkJc25hcHNob3QgPSBTbmFwQnVpbGRJbml0 aWFsU25hcHNob3RGb3JDbHVzdGVyKGN0eC0+c25hcHNob3RfYnVpbGRlcik7CisJfQorCiAJaWYg KE9pZElzVmFsaWQoaW5kZXhPaWQpKQogCQkvKiBNYXJrIHRoZSBjb3JyZWN0IGluZGV4IGFzIGNs dXN0ZXJlZCAqLwogCQltYXJrX2luZGV4X2NsdXN0ZXJlZChPbGRIZWFwLCBpbmRleE9pZCwgdHJ1 ZSk7CiAKIAkvKiBSZW1lbWJlciBpbmZvIGFib3V0IHJlbCBiZWZvcmUgY2xvc2luZyBPbGRIZWFw ICovCiAJcmVscGVyc2lzdGVuY2UgPSBPbGRIZWFwLT5yZF9yZWwtPnJlbHBlcnNpc3RlbmNlOwot CWlzX3N5c3RlbV9jYXRhbG9nID0gSXNTeXN0ZW1SZWxhdGlvbihPbGRIZWFwKTsKIAogCS8qCiAJ ICogQ3JlYXRlIHRoZSB0cmFuc2llbnQgdGFibGUgdGhhdCB3aWxsIHJlY2VpdmUgdGhlIHJlLW9y ZGVyZWQgZGF0YS4KQEAgLTY3MywzMSArMTA5Miw1MiBAQCByZWJ1aWxkX3JlbGF0aW9uKFJlbGF0 aW9uIE9sZEhlYXAsIFJlbGF0aW9uIGluZGV4LCBib29sIHZlcmJvc2UpCiAJCQkJCQkgQWNjZXNz RXhjbHVzaXZlTG9jayA6IE5vTG9jayk7CiAKIAkvKiBDb3B5IHRoZSBoZWFwIGRhdGEgaW50byB0 aGUgbmV3IHRhYmxlIGluIHRoZSBkZXNpcmVkIG9yZGVyICovCi0JY29weV90YWJsZV9kYXRhKE5l d0hlYXAsIE9sZEhlYXAsIGluZGV4LCB2ZXJib3NlLAorCWNvcHlfdGFibGVfZGF0YShOZXdIZWFw LCBPbGRIZWFwLCBpbmRleCwgc25hcHNob3QsIGN0eCwgdmVyYm9zZSwKIAkJCQkJJnN3YXBfdG9h c3RfYnlfY29udGVudCwgJmZyb3plblhpZCwgJmN1dG9mZk11bHRpKTsKIAorCWlmIChjb25jdXJy ZW50KQorCXsKKwkJcmVidWlsZF9yZWxhdGlvbl9maW5pc2hfY29uY3VycmVudChOZXdIZWFwLCBP bGRIZWFwLCBpbmRleCwKKwkJCQkJCQkJCQkgICBjYXRfc3RhdGUsIGN0eCwKKwkJCQkJCQkJCQkg ICBzd2FwX3RvYXN0X2J5X2NvbnRlbnQsCisJCQkJCQkJCQkJICAgZnJvemVuWGlkLCBjdXRvZmZN dWx0aSk7CisKKwkJcGdzdGF0X3Byb2dyZXNzX3VwZGF0ZV9wYXJhbShQUk9HUkVTU19DTFVTVEVS X1BIQVNFLAorCQkJCQkJCQkJIFBST0dSRVNTX0NMVVNURVJfUEhBU0VfRklOQUxfQ0xFQU5VUCk7 CisKKwkJLyogRG9uZSB3aXRoIGRlY29kaW5nLiAqLworCQlGcmVlU25hcHNob3Qoc25hcHNob3Qp OworCQlmcmVlX2NhdGFsb2dfc3RhdGUoY2F0X3N0YXRlKTsKKwkJY2xlYW51cF9sb2dpY2FsX2Rl Y29kaW5nKGN0eCk7CisJCVJlcGxpY2F0aW9uU2xvdFJlbGVhc2UoKTsKKwkJUmVwbGljYXRpb25T bG90RHJvcChOYW1lU3RyKHNsb3RuYW1lKSwgZmFsc2UpOworCX0KKwllbHNlCisJeworCQlib29s CQlpc19zeXN0ZW1fY2F0YWxvZyA9IElzU3lzdGVtUmVsYXRpb24oT2xkSGVhcCk7CiAKLQkvKiBD bG9zZSByZWxjYWNoZSBlbnRyaWVzLCBidXQga2VlcCBsb2NrIHVudGlsIHRyYW5zYWN0aW9uIGNv bW1pdCAqLwotCXRhYmxlX2Nsb3NlKE9sZEhlYXAsIE5vTG9jayk7Ci0JaWYgKGluZGV4KQotCQlp bmRleF9jbG9zZShpbmRleCwgTm9Mb2NrKTsKKwkJLyogQ2xvc2UgcmVsY2FjaGUgZW50cmllcywg YnV0IGtlZXAgbG9jayB1bnRpbCB0cmFuc2FjdGlvbiBjb21taXQgKi8KKwkJdGFibGVfY2xvc2Uo T2xkSGVhcCwgTm9Mb2NrKTsKKwkJaWYgKGluZGV4KQorCQkJaW5kZXhfY2xvc2UoaW5kZXgsIE5v TG9jayk7CiAKLQkvKgotCSAqIENsb3NlIHRoZSBuZXcgcmVsYXRpb24gc28gaXQgY2FuIGJlIGRy b3BwZWQgYXMgc29vbiBhcyB0aGUgc3RvcmFnZSBpcwotCSAqIHN3YXBwZWQuIFRoZSByZWxhdGlv biBpcyBub3QgdmlzaWJsZSB0byBvdGhlcnMsIHNvIHdlIGNvdWxkIHVubG9jayBpdAotCSAqIGNv bXBsZXRlbHksIGJ1dCBpdCdzIHNpbXBsZXIgdG8gcGFzcyBOb0xvY2sgdGhhbiB0byB0cmFjayBh bGwgdGhlIGxvY2tzCi0JICogYWNxdWlyZWQgc28gZmFyLgotCSAqLwotCXRhYmxlX2Nsb3NlKE5l d0hlYXAsIE5vTG9jayk7CisJCS8qCisJCSAqIENsb3NlIHRoZSBuZXcgcmVsYXRpb24gc28gaXQg Y2FuIGJlIGRyb3BwZWQgYXMgc29vbiBhcyB0aGUgc3RvcmFnZQorCQkgKiBpcyBzd2FwcGVkLiBU aGUgcmVsYXRpb24gaXMgbm90IHZpc2libGUgdG8gb3RoZXJzLCBzbyB3ZSBjb3VsZAorCQkgKiB1 bmxvY2sgaXQgY29tcGxldGVseSwgYnV0IGl0J3Mgc2ltcGxlciB0byBwYXNzIE5vTG9jayB0aGFu IHRvIHRyYWNrCisJCSAqIGFsbCB0aGUgbG9jayBhY3F1aXJlZCBzbyBmYXIuCisJCSAqLworCQl0 YWJsZV9jbG9zZShOZXdIZWFwLCBOb0xvY2spOwogCi0JLyoKLQkgKiBTd2FwIHRoZSBwaHlzaWNh bCBmaWxlcyBvZiB0aGUgdGFyZ2V0IGFuZCB0cmFuc2llbnQgdGFibGVzLCB0aGVuCi0JICogcmVi dWlsZCB0aGUgdGFyZ2V0J3MgaW5kZXhlcyBhbmQgdGhyb3cgYXdheSB0aGUgdHJhbnNpZW50IHRh YmxlLgotCSAqLwotCWZpbmlzaF9oZWFwX3N3YXAodGFibGVPaWQsIE9JRE5ld0hlYXAsIGlzX3N5 c3RlbV9jYXRhbG9nLAotCQkJCQkgc3dhcF90b2FzdF9ieV9jb250ZW50LCBmYWxzZSwgdHJ1ZSwK LQkJCQkJIGZyb3plblhpZCwgY3V0b2ZmTXVsdGksCi0JCQkJCSByZWxwZXJzaXN0ZW5jZSk7CisJ CS8qCisJCSAqIFN3YXAgdGhlIHBoeXNpY2FsIGZpbGVzIG9mIHRoZSB0YXJnZXQgYW5kIHRyYW5z aWVudCB0YWJsZXMsIHRoZW4KKwkJICogcmVidWlsZCB0aGUgdGFyZ2V0J3MgaW5kZXhlcyBhbmQg dGhyb3cgYXdheSB0aGUgdHJhbnNpZW50IHRhYmxlLgorCQkgKi8KKwkJZmluaXNoX2hlYXBfc3dh cCh0YWJsZU9pZCwgT0lETmV3SGVhcCwgaXNfc3lzdGVtX2NhdGFsb2csCisJCQkJCQkgc3dhcF90 b2FzdF9ieV9jb250ZW50LCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwKKwkJCQkJCSBmcm96ZW5YaWQsIGN1 dG9mZk11bHRpLAorCQkJCQkJIHJlbHBlcnNpc3RlbmNlKTsKKwl9CiB9CiAKIApAQCAtODQ4LDE1 ICsxMjg4LDE5IEBAIG1ha2VfbmV3X2hlYXAoT2lkIE9JRE9sZEhlYXAsIE9pZCBOZXdUYWJsZVNw YWNlLCBPaWQgTmV3QWNjZXNzTWV0aG9kLAogLyoKICAqIERvIHRoZSBwaHlzaWNhbCBjb3B5aW5n IG9mIHRhYmxlIGRhdGEuCiAgKgorICogJ3NuYXBzaG90JyBhbmQgJ2RlY29kaW5nX2N0eCc6IHNl ZSB0YWJsZV9yZWxhdGlvbl9jb3B5X2Zvcl9jbHVzdGVyKCkuIFBhc3MKKyAqIGlmZiBjb25jdXJy ZW50IHByb2Nlc3NpbmcgaXMgcmVxdWlyZWQuCisgKgogICogVGhlcmUgYXJlIHRocmVlIG91dHB1 dCBwYXJhbWV0ZXJzOgogICogKnBTd2FwVG9hc3RCeUNvbnRlbnQgaXMgc2V0IHRydWUgaWYgdG9h c3QgdGFibGVzIG11c3QgYmUgc3dhcHBlZCBieSBjb250ZW50LgogICogKnBGcmVlemVYaWQgcmVj ZWl2ZXMgdGhlIFRyYW5zYWN0aW9uSWQgdXNlZCBhcyBmcmVlemUgY3V0b2ZmIHBvaW50LgogICog KnBDdXRvZmZNdWx0aSByZWNlaXZlcyB0aGUgTXVsdGlYYWN0SWQgdXNlZCBhcyBhIGN1dG9mZiBw b2ludC4KICAqLwogc3RhdGljIHZvaWQKLWNvcHlfdGFibGVfZGF0YShSZWxhdGlvbiBOZXdIZWFw LCBSZWxhdGlvbiBPbGRIZWFwLCBSZWxhdGlvbiBPbGRJbmRleCwgYm9vbCB2ZXJib3NlLAotCQkJ CWJvb2wgKnBTd2FwVG9hc3RCeUNvbnRlbnQsIFRyYW5zYWN0aW9uSWQgKnBGcmVlemVYaWQsCi0J CQkJTXVsdGlYYWN0SWQgKnBDdXRvZmZNdWx0aSkKK2NvcHlfdGFibGVfZGF0YShSZWxhdGlvbiBO ZXdIZWFwLCBSZWxhdGlvbiBPbGRIZWFwLCBSZWxhdGlvbiBPbGRJbmRleCwKKwkJCQlTbmFwc2hv dCBzbmFwc2hvdCwgTG9naWNhbERlY29kaW5nQ29udGV4dCAqZGVjb2RpbmdfY3R4LAorCQkJCWJv b2wgdmVyYm9zZSwgYm9vbCAqcFN3YXBUb2FzdEJ5Q29udGVudCwKKwkJCQlUcmFuc2FjdGlvbklk ICpwRnJlZXplWGlkLCBNdWx0aVhhY3RJZCAqcEN1dG9mZk11bHRpKQogewogCU9pZAkJT0lET2xk SGVhcCA9IFJlbGF0aW9uR2V0UmVsaWQoT2xkSGVhcCk7CiAJT2lkCQlPSURPbGRJbmRleCA9IE9s ZEluZGV4ID8gUmVsYXRpb25HZXRSZWxpZChPbGRJbmRleCkgOiBJbnZhbGlkT2lkOwpAQCAtODc2 LDYgKzEzMjAsNyBAQCBjb3B5X3RhYmxlX2RhdGEoUmVsYXRpb24gTmV3SGVhcCwgUmVsYXRpb24g T2xkSGVhcCwgUmVsYXRpb24gT2xkSW5kZXgsIGJvb2wgdmVyYgogCWludAkJCWVsZXZlbCA9IHZl cmJvc2UgPyBJTkZPIDogREVCVUcyOwogCVBHUlVzYWdlCXJ1MDsKIAljaGFyCSAgICpuc3BuYW1l OworCWJvb2wJCWNvbmN1cnJlbnQgPSBzbmFwc2hvdCAhPSBOVUxMOwogCiAJcGdfcnVzYWdlX2lu aXQoJnJ1MCk7CiAKQEAgLTkwMiw4ICsxMzQ3LDEyIEBAIGNvcHlfdGFibGVfZGF0YShSZWxhdGlv biBOZXdIZWFwLCBSZWxhdGlvbiBPbGRIZWFwLCBSZWxhdGlvbiBPbGRJbmRleCwgYm9vbCB2ZXJi CiAJICoKIAkgKiBXZSBkb24ndCBuZWVkIHRvIG9wZW4gdGhlIHRvYXN0IHJlbGF0aW9uIGhlcmUs IGp1c3QgbG9jayBpdC4gIFRoZSBsb2NrCiAJICogd2lsbCBiZSBoZWxkIHRpbGwgZW5kIG9mIHRy YW5zYWN0aW9uLgorCSAqCisJICogSW4gdGhlIENPTkNVUlJFTlQgY2FzZSwgdGhlIGxvY2sgZG9l cyBub3QgaGVscCBiZWNhdXNlIHdlIG5lZWQgdG8KKwkgKiByZWxlYXNlIGl0IHRlbXBvcmFyaWx5 IGF0IHNvbWUgcG9pbnQuIEluc3RlYWQsIHdlIGV4cGVjdCBWQUNVVU0gLworCSAqIENMVVNURVIg dG8gc2tpcCB0YWJsZXMgd2hpY2ggYXJlIHByZXNlbnQgaW4gQ2x1c3RlcmVkUmVsc0hhc2guCiAJ ICovCi0JaWYgKE9sZEhlYXAtPnJkX3JlbC0+cmVsdG9hc3RyZWxpZCkKKwlpZiAoT2xkSGVhcC0+ cmRfcmVsLT5yZWx0b2FzdHJlbGlkICYmICFjb25jdXJyZW50KQogCQlMb2NrUmVsYXRpb25PaWQo T2xkSGVhcC0+cmRfcmVsLT5yZWx0b2FzdHJlbGlkLCBBY2Nlc3NFeGNsdXNpdmVMb2NrKTsKIAog CS8qCkBAIC05NzksNyArMTQyOCw0NSBAQCBjb3B5X3RhYmxlX2RhdGEoUmVsYXRpb24gTmV3SGVh cCwgUmVsYXRpb24gT2xkSGVhcCwgUmVsYXRpb24gT2xkSW5kZXgsIGJvb2wgdmVyYgogCSAqIHBy b3ZpZGVkLCBlbHNlIHBsYWluIHNlcXNjYW4uCiAJICovCiAJaWYgKE9sZEluZGV4ICE9IE5VTEwg JiYgT2xkSW5kZXgtPnJkX3JlbC0+cmVsYW0gPT0gQlRSRUVfQU1fT0lEKQorCXsKKwkJUmVzb3Vy Y2VPd25lcglvbGRvd25lciA9IEN1cnJlbnRSZXNvdXJjZU93bmVyOworCisJCS8qCisJCSAqIElu IHRoZSBDT05DVVJSRU5UIGNhc2UsIGRvIHRoZSBwbGFubmluZyBpbiBhIHN1YnRyZW5zYWN0aW9u IHNvIHRoYXQKKwkJICogd2UgZG9uJ3QgbGVhdmUgYW55IGFkZGl0aW9uYWwgbG9ja3MgYmVoaW5k IHVzIHRoYXQgd2UgY2Fubm90CisJCSAqIHJlbGVhc2UgZWFzaWx5LgorCQkgKi8KKwkJaWYgKGNv bmN1cnJlbnQpCisJCXsKKwkJCUFzc2VydChDaGVja1JlbGF0aW9uTG9ja2VkQnlNZShPbGRIZWFw LCBMT0NLX0NMVVNURVJfQ09OQ1VSUkVOVCwKKwkJCQkJCQkJCQkgICBmYWxzZSkpOworCQkJQXNz ZXJ0KENoZWNrUmVsYXRpb25Mb2NrZWRCeU1lKE9sZEluZGV4LCBMT0NLX0NMVVNURVJfQ09OQ1VS UkVOVCwKKwkJCQkJCQkJCQkgICBmYWxzZSkpOworCQkJQmVnaW5JbnRlcm5hbFN1YlRyYW5zYWN0 aW9uKCJwbGFuX2NsdXN0ZXJfdXNlX3NvcnQiKTsKKwkJfQorCiAJCXVzZV9zb3J0ID0gcGxhbl9j bHVzdGVyX3VzZV9zb3J0KE9JRE9sZEhlYXAsIE9JRE9sZEluZGV4KTsKKworCQlpZiAoY29uY3Vy cmVudCkKKwkJeworCQkJUGdCYWNrZW5kUHJvZ3Jlc3MJcHJvZ3Jlc3M7CisKKwkJCS8qCisJCQkg KiBDb21tYW5kIHByb2dyZXNzIHJlcG9ydGluZyBnZXRzIHRlcm1pbmF0ZWQgYXQgc3VidHJhbnNh Y3Rpb24KKwkJCSAqIGVuZC4gU2F2ZSB0aGUgc3RhdHVzIHNvIGl0IGNhbiBiZSBldmVudHVhbGx5 IHJlc3RvcmVkLgorCQkJICovCisJCQltZW1jcHkoJnByb2dyZXNzLCAmTXlCRUVudHJ5LT5zdF9w cm9ncmVzcywKKwkJCQkgICBzaXplb2YoUGdCYWNrZW5kUHJvZ3Jlc3MpKTsKKworCQkJLyogUmVs ZWFzZSB0aGUgbG9ja3MgYnkgYWJvcnRpbmcgdGhlIHN1YnRyYW5zYWN0aW9uLiAqLworCQkJUm9s bGJhY2tBbmRSZWxlYXNlQ3VycmVudFN1YlRyYW5zYWN0aW9uKCk7CisKKwkJCS8qIFJlc3RvcmUg dGhlIHByb2dyZXNzIHJlcG9ydGluZyBzdGF0dXMuICovCisJCQlwZ3N0YXRfcHJvZ3Jlc3NfcmVz dG9yZV9zdGF0ZSgmcHJvZ3Jlc3MpOworCisJCQlDdXJyZW50UmVzb3VyY2VPd25lciA9IG9sZG93 bmVyOworCQl9CisJfQogCWVsc2UKIAkJdXNlX3NvcnQgPSBmYWxzZTsKIApAQCAtMTAwOCw3ICsx NDk1LDkgQEAgY29weV90YWJsZV9kYXRhKFJlbGF0aW9uIE5ld0hlYXAsIFJlbGF0aW9uIE9sZEhl YXAsIFJlbGF0aW9uIE9sZEluZGV4LCBib29sIHZlcmIKIAkgKiB2YWx1ZXMgKGUuZy4gYmVjYXVz ZSB0aGUgQU0gZG9lc24ndCB1c2UgZnJlZXppbmcpLgogCSAqLwogCXRhYmxlX3JlbGF0aW9uX2Nv cHlfZm9yX2NsdXN0ZXIoT2xkSGVhcCwgTmV3SGVhcCwgT2xkSW5kZXgsIHVzZV9zb3J0LAotCQkJ CQkJCQkJY3V0b2Zmcy5PbGRlc3RYbWluLCAmY3V0b2Zmcy5GcmVlemVMaW1pdCwKKwkJCQkJCQkJ CWN1dG9mZnMuT2xkZXN0WG1pbiwgc25hcHNob3QsCisJCQkJCQkJCQlkZWNvZGluZ19jdHgsCisJ CQkJCQkJCQkmY3V0b2Zmcy5GcmVlemVMaW1pdCwKIAkJCQkJCQkJCSZjdXRvZmZzLk11bHRpWGFj dEN1dG9mZiwKIAkJCQkJCQkJCSZudW1fdHVwbGVzLCAmdHVwc192YWN1dW1lZCwKIAkJCQkJCQkJ CSZ0dXBzX3JlY2VudGx5X2RlYWQpOwpAQCAtMTAxNyw3ICsxNTA2LDExIEBAIGNvcHlfdGFibGVf ZGF0YShSZWxhdGlvbiBOZXdIZWFwLCBSZWxhdGlvbiBPbGRIZWFwLCBSZWxhdGlvbiBPbGRJbmRl eCwgYm9vbCB2ZXJiCiAJKnBGcmVlemVYaWQgPSBjdXRvZmZzLkZyZWV6ZUxpbWl0OwogCSpwQ3V0 b2ZmTXVsdGkgPSBjdXRvZmZzLk11bHRpWGFjdEN1dG9mZjsKIAotCS8qIFJlc2V0IHJkX3RvYXN0 b2lkIGp1c3QgdG8gYmUgdGlkeSAtLS0gaXQgc2hvdWxkbid0IGJlIGxvb2tlZCBhdCBhZ2FpbiAq LworCS8qCisJICogUmVzZXQgcmRfdG9hc3RvaWQganVzdCB0byBiZSB0aWR5IC0tLSBpdCBzaG91 bGRuJ3QgYmUgbG9va2VkIGF0CisJICogYWdhaW4uIEluIHRoZSBDT05DVVJSRU5UIGNhc2UsIHdl IG5lZWQgdG8gc2V0IGl0IGFnYWluIGJlZm9yZSBhcHBseWluZworCSAqIHRoZSBjb25jdXJyZW50 IGNoYW5nZXMuCisJICovCiAJTmV3SGVhcC0+cmRfdG9hc3RvaWQgPSBJbnZhbGlkT2lkOwogCiAJ bnVtX3BhZ2VzID0gUmVsYXRpb25HZXROdW1iZXJPZkJsb2NrcyhOZXdIZWFwKTsKQEAgLTE0Njgs MTQgKzE5NjEsMTMgQEAgZmluaXNoX2hlYXBfc3dhcChPaWQgT0lET2xkSGVhcCwgT2lkIE9JRE5l d0hlYXAsCiAJCQkJIGJvb2wgc3dhcF90b2FzdF9ieV9jb250ZW50LAogCQkJCSBib29sIGNoZWNr X2NvbnN0cmFpbnRzLAogCQkJCSBib29sIGlzX2ludGVybmFsLAorCQkJCSBib29sIHJlaW5kZXgs CiAJCQkJIFRyYW5zYWN0aW9uSWQgZnJvemVuWGlkLAogCQkJCSBNdWx0aVhhY3RJZCBjdXRvZmZN dWx0aSwKIAkJCQkgY2hhciBuZXdyZWxwZXJzaXN0ZW5jZSkKIHsKIAlPYmplY3RBZGRyZXNzIG9i amVjdDsKIAlPaWQJCQltYXBwZWRfdGFibGVzWzRdOwotCWludAkJCXJlaW5kZXhfZmxhZ3M7Ci0J UmVpbmRleFBhcmFtcyByZWluZGV4X3BhcmFtcyA9IHswfTsKIAlpbnQJCQlpOwogCiAJLyogUmVw b3J0IHRoYXQgd2UgYXJlIG5vdyBzd2FwcGluZyByZWxhdGlvbiBmaWxlcyAqLwpAQCAtMTUwMSwz OSArMTk5Myw0NiBAQCBmaW5pc2hfaGVhcF9zd2FwKE9pZCBPSURPbGRIZWFwLCBPaWQgT0lETmV3 SGVhcCwKIAlpZiAoaXNfc3lzdGVtX2NhdGFsb2cpCiAJCUNhY2hlSW52YWxpZGF0ZUNhdGFsb2co T0lET2xkSGVhcCk7CiAKLQkvKgotCSAqIFJlYnVpbGQgZWFjaCBpbmRleCBvbiB0aGUgcmVsYXRp b24gKGJ1dCBub3QgdGhlIHRvYXN0IHRhYmxlLCB3aGljaCBpcwotCSAqIGFsbC1uZXcgYXQgdGhp cyBwb2ludCkuICBJdCBpcyBpbXBvcnRhbnQgdG8gZG8gdGhpcyBiZWZvcmUgdGhlIERST1AKLQkg KiBzdGVwIGJlY2F1c2UgaWYgd2UgYXJlIHByb2Nlc3NpbmcgYSBzeXN0ZW0gY2F0YWxvZyB0aGF0 IHdpbGwgYmUgdXNlZAotCSAqIGR1cmluZyBEUk9QLCB3ZSB3YW50IHRvIGhhdmUgaXRzIGluZGV4 ZXMgYXZhaWxhYmxlLiAgVGhlcmUgaXMgbm8KLQkgKiBhZHZhbnRhZ2UgdG8gdGhlIG90aGVyIG9y ZGVyIGFueXdheSBiZWNhdXNlIHRoaXMgaXMgYWxsIHRyYW5zYWN0aW9uYWwsCi0JICogc28gbm8g Y2hhbmNlIHRvIHJlY2xhaW0gZGlzayBzcGFjZSBiZWZvcmUgY29tbWl0LiAgV2UgZG8gbm90IG5l ZWQgYQotCSAqIGZpbmFsIENvbW1hbmRDb3VudGVySW5jcmVtZW50KCkgYmVjYXVzZSByZWluZGV4 X3JlbGF0aW9uIGRvZXMgaXQuCi0JICoKLQkgKiBOb3RlOiBiZWNhdXNlIGluZGV4X2J1aWxkIGlz IGNhbGxlZCB2aWEgcmVpbmRleF9yZWxhdGlvbiwgaXQgd2lsbCBuZXZlcgotCSAqIHNldCBpbmRj aGVja3htaW4gdHJ1ZSBmb3IgdGhlIGluZGV4ZXMuICBUaGlzIGlzIE9LIGV2ZW4gdGhvdWdoIGlu IHNvbWUKLQkgKiBzZW5zZSB3ZSBhcmUgYnVpbGRpbmcgbmV3IGluZGV4ZXMgcmF0aGVyIHRoYW4g cmVidWlsZGluZyBleGlzdGluZyBvbmVzLAotCSAqIGJlY2F1c2UgdGhlIG5ldyBoZWFwIHdvbid0 IGNvbnRhaW4gYW55IEhPVCBjaGFpbnMgYXQgYWxsLCBsZXQgYWxvbmUKLQkgKiBicm9rZW4gb25l cywgc28gaXQgY2FuJ3QgYmUgbmVjZXNzYXJ5IHRvIHNldCBpbmRjaGVja3htaW4uCi0JICovCi0J cmVpbmRleF9mbGFncyA9IFJFSU5ERVhfUkVMX1NVUFBSRVNTX0lOREVYX1VTRTsKLQlpZiAoY2hl Y2tfY29uc3RyYWludHMpCi0JCXJlaW5kZXhfZmxhZ3MgfD0gUkVJTkRFWF9SRUxfQ0hFQ0tfQ09O U1RSQUlOVFM7CisJaWYgKHJlaW5kZXgpCisJeworCQlpbnQJCQlyZWluZGV4X2ZsYWdzOworCQlS ZWluZGV4UGFyYW1zIHJlaW5kZXhfcGFyYW1zID0gezB9OwogCi0JLyoKLQkgKiBFbnN1cmUgdGhh dCB0aGUgaW5kZXhlcyBoYXZlIHRoZSBzYW1lIHBlcnNpc3RlbmNlIGFzIHRoZSBwYXJlbnQKLQkg KiByZWxhdGlvbi4KLQkgKi8KLQlpZiAobmV3cmVscGVyc2lzdGVuY2UgPT0gUkVMUEVSU0lTVEVO Q0VfVU5MT0dHRUQpCi0JCXJlaW5kZXhfZmxhZ3MgfD0gUkVJTkRFWF9SRUxfRk9SQ0VfSU5ERVhF U19VTkxPR0dFRDsKLQllbHNlIGlmIChuZXdyZWxwZXJzaXN0ZW5jZSA9PSBSRUxQRVJTSVNURU5D RV9QRVJNQU5FTlQpCi0JCXJlaW5kZXhfZmxhZ3MgfD0gUkVJTkRFWF9SRUxfRk9SQ0VfSU5ERVhF U19QRVJNQU5FTlQ7CisJCS8qCisJCSAqIFJlYnVpbGQgZWFjaCBpbmRleCBvbiB0aGUgcmVsYXRp b24gKGJ1dCBub3QgdGhlIHRvYXN0IHRhYmxlLCB3aGljaAorCQkgKiBpcyBhbGwtbmV3IGF0IHRo aXMgcG9pbnQpLiAgSXQgaXMgaW1wb3J0YW50IHRvIGRvIHRoaXMgYmVmb3JlIHRoZQorCQkgKiBE Uk9QIHN0ZXAgYmVjYXVzZSBpZiB3ZSBhcmUgcHJvY2Vzc2luZyBhIHN5c3RlbSBjYXRhbG9nIHRo YXQgd2lsbAorCQkgKiBiZSB1c2VkIGR1cmluZyBEUk9QLCB3ZSB3YW50IHRvIGhhdmUgaXRzIGlu ZGV4ZXMgYXZhaWxhYmxlLiAgVGhlcmUKKwkJICogaXMgbm8gYWR2YW50YWdlIHRvIHRoZSBvdGhl ciBvcmRlciBhbnl3YXkgYmVjYXVzZSB0aGlzIGlzIGFsbAorCQkgKiB0cmFuc2FjdGlvbmFsLCBz byBubyBjaGFuY2UgdG8gcmVjbGFpbSBkaXNrIHNwYWNlIGJlZm9yZSBjb21taXQuCisJCSAqIFdl IGRvIG5vdCBuZWVkIGEgZmluYWwgQ29tbWFuZENvdW50ZXJJbmNyZW1lbnQoKSBiZWNhdXNlCisJ CSAqIHJlaW5kZXhfcmVsYXRpb24gZG9lcyBpdC4KKwkJICoKKwkJICogTm90ZTogYmVjYXVzZSBp bmRleF9idWlsZCBpcyBjYWxsZWQgdmlhIHJlaW5kZXhfcmVsYXRpb24sIGl0IHdpbGwgbmV2ZXIK KwkJICogc2V0IGluZGNoZWNreG1pbiB0cnVlIGZvciB0aGUgaW5kZXhlcy4gIFRoaXMgaXMgT0sg ZXZlbiB0aG91Z2ggaW4gc29tZQorCQkgKiBzZW5zZSB3ZSBhcmUgYnVpbGRpbmcgbmV3IGluZGV4 ZXMgcmF0aGVyIHRoYW4gcmVidWlsZGluZyBleGlzdGluZyBvbmVzLAorCQkgKiBiZWNhdXNlIHRo ZSBuZXcgaGVhcCB3b24ndCBjb250YWluIGFueSBIT1QgY2hhaW5zIGF0IGFsbCwgbGV0IGFsb25l CisJCSAqIGJyb2tlbiBvbmVzLCBzbyBpdCBjYW4ndCBiZSBuZWNlc3NhcnkgdG8gc2V0IGluZGNo ZWNreG1pbi4KKwkJICovCisJCXJlaW5kZXhfZmxhZ3MgPSBSRUlOREVYX1JFTF9TVVBQUkVTU19J TkRFWF9VU0U7CisJCWlmIChjaGVja19jb25zdHJhaW50cykKKwkJCXJlaW5kZXhfZmxhZ3MgfD0g UkVJTkRFWF9SRUxfQ0hFQ0tfQ09OU1RSQUlOVFM7CiAKLQkvKiBSZXBvcnQgdGhhdCB3ZSBhcmUg bm93IHJlaW5kZXhpbmcgcmVsYXRpb25zICovCi0JcGdzdGF0X3Byb2dyZXNzX3VwZGF0ZV9wYXJh bShQUk9HUkVTU19DTFVTVEVSX1BIQVNFLAotCQkJCQkJCQkgUFJPR1JFU1NfQ0xVU1RFUl9QSEFT RV9SRUJVSUxEX0lOREVYKTsKKwkJLyoKKwkJICogRW5zdXJlIHRoYXQgdGhlIGluZGV4ZXMgaGF2 ZSB0aGUgc2FtZSBwZXJzaXN0ZW5jZSBhcyB0aGUgcGFyZW50CisJCSAqIHJlbGF0aW9uLgorCQkg Ki8KKwkJaWYgKG5ld3JlbHBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNFX1VOTE9HR0VEKQor CQkJcmVpbmRleF9mbGFncyB8PSBSRUlOREVYX1JFTF9GT1JDRV9JTkRFWEVTX1VOTE9HR0VEOwor CQllbHNlIGlmIChuZXdyZWxwZXJzaXN0ZW5jZSA9PSBSRUxQRVJTSVNURU5DRV9QRVJNQU5FTlQp CisJCQlyZWluZGV4X2ZsYWdzIHw9IFJFSU5ERVhfUkVMX0ZPUkNFX0lOREVYRVNfUEVSTUFORU5U OwogCi0JcmVpbmRleF9yZWxhdGlvbihOVUxMLCBPSURPbGRIZWFwLCByZWluZGV4X2ZsYWdzLCAm cmVpbmRleF9wYXJhbXMpOworCQkvKiBSZXBvcnQgdGhhdCB3ZSBhcmUgbm93IHJlaW5kZXhpbmcg cmVsYXRpb25zICovCisJCXBnc3RhdF9wcm9ncmVzc191cGRhdGVfcGFyYW0oUFJPR1JFU1NfQ0xV U1RFUl9QSEFTRSwKKwkJCQkJCQkJCSBQUk9HUkVTU19DTFVTVEVSX1BIQVNFX1JFQlVJTERfSU5E RVgpOworCisJCXJlaW5kZXhfcmVsYXRpb24oTlVMTCwgT0lET2xkSGVhcCwgcmVpbmRleF9mbGFn cywgJnJlaW5kZXhfcGFyYW1zKTsKKwl9CiAKIAkvKiBSZXBvcnQgdGhhdCB3ZSBhcmUgbm93IGRv aW5nIGNsZWFuIHVwICovCiAJcGdzdGF0X3Byb2dyZXNzX3VwZGF0ZV9wYXJhbShQUk9HUkVTU19D TFVTVEVSX1BIQVNFLApAQCAtMTc3MywzICsyMjcyLDE5MzggQEAgY2x1c3Rlcl9pc19wZXJtaXR0 ZWRfZm9yX3JlbGF0aW9uKE9pZCByZWxpZCwgT2lkIHVzZXJpZCkKIAkJCQkJZ2V0X3JlbF9uYW1l KHJlbGlkKSkpKTsKIAlyZXR1cm4gZmFsc2U7CiB9CisKKyNkZWZpbmUgUkVQTF9QTFVHSU5fTkFN RQkicGdvdXRwdXRfY2x1c3RlciIKKworLyoKKyAqIEVhY2ggcmVsYXRpb24gYmVpbmcgcHJvY2Vz c2VkIGJ5IENMVVNURVIgQ09OQ1VSUkVOVExZIG11c3QgYmUgaW4gdGhlCisgKiBjbHVzdGVyZWRS ZWxzIGhhc2h0YWJsZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgQ2x1c3RlcmVkUmVsCit7CisJT2lk CQlyZWxpZDsKKwlPaWQJCWRiaWQ7Cit9IENsdXN0ZXJlZFJlbDsKKworc3RhdGljIEhUQUIgKkNs dXN0ZXJlZFJlbHNIYXNoID0gTlVMTDsKKworLyogTWF4aW11bSBudW1iZXIgb2YgZW50cmllcyBp biB0aGUgaGFzaHRhYmxlLiAqLworc3RhdGljIGludCBtYXhDbHVzdGVyZWRSZWxzID0gMDsKKwor U2l6ZQorQ2x1c3RlclNobWVtU2l6ZSh2b2lkKQoreworCS8qCisJICogQSByZXBsaWNhdGlvbiBz bG90IGlzIG5lZWRlZCBmb3IgdGhlIHByb2Nlc3NpbmcsIHNvIHVzZSB0aGlzIEdVQyB0bworCSAq IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGhhc2h0YWJsZS4gUmVzZXJ2ZSBhbHNvIHNwYWNlIGZv ciBUT0FTVAorCSAqIHJlbGF0aW9ucy4KKwkgKi8KKwltYXhDbHVzdGVyZWRSZWxzID0gbWF4X3Jl cGxpY2F0aW9uX3Nsb3RzICogMjsKKworCXJldHVybiBoYXNoX2VzdGltYXRlX3NpemUobWF4Q2x1 c3RlcmVkUmVscywgc2l6ZW9mKENsdXN0ZXJlZFJlbCkpOworfQorCit2b2lkCitDbHVzdGVyU2ht ZW1Jbml0KHZvaWQpCit7CisJSEFTSENUTAkJaW5mbzsKKworCWluZm8ua2V5c2l6ZSA9IHNpemVv ZihDbHVzdGVyZWRSZWwpOworCWluZm8uZW50cnlzaXplID0gaW5mby5rZXlzaXplOworCisJQ2x1 c3RlcmVkUmVsc0hhc2ggPSBTaG1lbUluaXRIYXNoKCJDbHVzdGVyZWQgUmVsYXRpb25zIiwKKwkJ CQkJCQkJCSAgbWF4Q2x1c3RlcmVkUmVscywKKwkJCQkJCQkJCSAgbWF4Q2x1c3RlcmVkUmVscywK KwkJCQkJCQkJCSAgJmluZm8sCisJCQkJCQkJCQkgIEhBU0hfRUxFTSB8IEhBU0hfQkxPQlMpOwor fQorCisvKgorICogUGVyZm9ybSBhIHByZWxpbWluYXJ5IGNoZWNrIHdoZXRoZXIgQ0xVU1RFUiAv IFZBQ1VVTSBGVUxMIENPTkNVUlJFTlRMWSBpcworICogcG9zc2libGUuIE5vdGUgdGhhdCBoZXJl IHdlIG9ubHkgY2hlY2sgdGhpbmdzIHRoYXQgc2hvdWxkIG5vdCBjaGFuZ2UgaWYgd2UKKyAqIHJl bGVhc2UgdGhlIHJlbGF0aW9uIGxvY2sgdGVtcG9yYXJpbHkuIFRoZSBpbmZvcm1hdGlvbiB0aGF0 IGNhbiBjaGFuZ2UgZHVlCisgKiB0byB1bmxvY2tpbmcgaXMgY2hlY2tlZCBpbiBnZXRfY2F0YWxv Z19zdGF0ZSgpLgorICovCitzdGF0aWMgdm9pZAorY2hlY2tfY29uY3VycmVudF9jbHVzdGVyX3Jl cXVpcmVtZW50cyhSZWxhdGlvbiByZWwsIGJvb2wgaXNUb3BMZXZlbCwKKwkJCQkJCQkJCSAgYm9v bCBpc0NsdXN0ZXIpCit7CisJY29uc3QgY2hhcgkqc3RtdDsKKworCWlmIChpc0NsdXN0ZXIpCisJ CXN0bXQgPSAiQ0xVU1RFUiAoQ09OQ1VSUkVOVExZKSI7CisJZWxzZQorCQlzdG10ID0gIlZBQ1VV TSAoRlVMTCwgQ09OQ1VSUkVOVExZKSI7CisKKwkvKgorCSAqIE1ha2Ugc3VyZSB3ZSBoYXZlIG5v IFhJRCBhc3NpZ25lZCwgb3RoZXJ3aXNlIGNhbGwgb2YKKwkgKiBzZXR1cF9sb2dpY2FsX2RlY29k aW5nKCkgY2FuIGNhdXNlIGEgZGVhZGxvY2suCisJICovCisJUHJldmVudEluVHJhbnNhY3Rpb25C bG9jayhpc1RvcExldmVsLCBzdG10KTsKKworCUNoZWNrU2xvdFBlcm1pc3Npb25zKCk7CisKKwkv KgorCSAqIFVzZSBhbiBleGlzdGluZyBmdW5jdGlvbiB0byBjaGVjayBpZiB3ZSBjYW4gdXNlIGxv Z2ljYWwKKwkgKiBkZWNvZGluZy4gSG93ZXZlciBub3RlIHRoYXQgUmVjb3ZlcnlJblByb2dyZXNz KCkgc2hvdWxkIGFscmVhZHkgaGF2ZQorCSAqIGNhdXNlZCBlcnJvciwgYXMgaXQgZG9lcyBmb3Ig dGhlIG5vbi1jb25jdXJyZW50IFZBQ1VVTSBGVUxMIC8gQ0xVU1RFUi4KKwkgKi8KKwlDaGVja0xv Z2ljYWxEZWNvZGluZ1JlcXVpcmVtZW50cygpOworCisJLyogU2VlIENsdXN0ZXJTaG1lbVNpemUo KSAqLworCWlmIChtYXhfcmVwbGljYXRpb25fc2xvdHMgPCAyKQorCQllcmVwb3J0KEVSUk9SLAor CQkJCWVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFURSksCisJ CQkJKGVycm1zZygiJXMgcmVxdWlyZXMgXCJtYXhfcmVwbGljYXRpb25fc2xvdHNcIiB0byBiZSBh dCBsZWFzdCAyIiwKKwkJCQkJCXN0bXQpKSk7Cit9CisKKy8qCisgKiBDYWxsIHRoaXMgZnVuY3Rp b24gYmVmb3JlIENMVVNURVIgQ09OQ1VSUkVOVExZIHN0YXJ0cyB0byBzZXR1cCBsb2dpY2FsCisg KiBkZWNvZGluZy4gSXQgbWFrZXMgc3VyZSB0aGF0IG90aGVyIHVzZXJzIG9mIHRoZSB0YWJsZSBw dXQgZW5vdWdoCisgKiBpbmZvcm1hdGlvbiBpbnRvIFdBTC4KKyAqCisgKiBUaGUgcG9pbnQgaXMg dGhhdCBvbiB2YXJpb3VzIHBsYWNlcyB3ZSBleHBlY3QgdGhhdCB0aGUgdGFibGUgd2UncmUKKyAq IHByb2Nlc3NpbmcgaXMgdHJlYXRlZCBsaWtlIGEgc3lzdGVtIGNhdGFsb2cuIEZvciBleGFtcGxl LCB3ZSBuZWVkIHRvIGJlCisgKiBhYmxlIHRvIHNjYW4gaXQgdXNpbmcgYSAiaGlzdG9yaWMgc25h cHNob3QiIGFueXRpbWUgZHVyaW5nIHRoZSBwcm9jZXNzaW5nCisgKiAoYXMgb3Bwb3NlZCB0byBz Y2FubmluZyBvbmx5IGF0IHRoZSBzdGFydCBwb2ludCBvZiB0aGUgZGVjb2RpbmcsIGxvZ2ljYWwK KyAqIHJlcGxpY2F0aW9uIGRvZXMgZHVyaW5nIGluaXRpYWwgdGFibGUgc3luY2hyb25pemF0aW9u KSwgaW4gb3JkZXIgdG8gYXBwbHkKKyAqIGNvbmN1cnJlbnQgVVBEQVRFIC8gREVMRVRFIGNvbW1h bmRzLgorICoKKyAqIFNpbmNlIHdlIG5lZWQgdG8gY2xvc2UgYW5kIHJlb3BlbiB0aGUgcmVsYXRp b24gaGVyZSwgdGhlICdyZWxfcCcgYW5kCisgKiAnaW5kZXhfcCcgYXJndW1lbnRzIGFyZSBpbi9v dXQuCisgKgorICogJ2VudGVyX3AnIHJlY2VpdmVzIGEgYm9vbCB2YWx1ZSB0ZWxsaW5nIHdoZXRo ZXIgcmVsYXRpb24gT0lEIHdhcyBlbnRlcmVkCisgKiBpbnRvIHRoZSBoYXNodGFibGUgb3Igbm90 LgorICovCitzdGF0aWMgdm9pZAorYmVnaW5fY29uY3VycmVudF9jbHVzdGVyKFJlbGF0aW9uICpy ZWxfcCwgUmVsYXRpb24gKmluZGV4X3AsCisJCQkJCQkgYm9vbCAqZW50ZXJlZF9wKQoreworCVJl bGF0aW9uCXJlbCA9ICpyZWxfcDsKKwlPaWQJCXJlbGlkLCB0b2FzdHJlbGlkOworCUNsdXN0ZXJl ZFJlbAlrZXksICplbnRyeTsKKwlib29sCWZvdW5kOworCVJlbFJlb3BlbkluZm8JcnJpWzJdOwor CWludAkJbnJlbDsKKwlzdGF0aWMgYm9vbCBiZWZvcmVfc2htZW1fZXhpdF9jYWxsYmFja19zZXR1 cCA9IGZhbHNlOworCisJcmVsaWQgPSBSZWxhdGlvbkdldFJlbGlkKHJlbCk7CisKKwkvKgorCSAq IE1ha2Ugc3VyZSB0aGF0IHdlIGRvIG5vdCBsZWF2ZSBhbiBlbnRyeSBpbiBDbHVzdGVyZWRSZWxz SGFzaCBpZiBleGl0aW5nCisJICogZHVlIHRvIEZBVEFMLgorCSAqLworCWlmICghYmVmb3JlX3No bWVtX2V4aXRfY2FsbGJhY2tfc2V0dXApCisJeworCQliZWZvcmVfc2htZW1fZXhpdChjbHVzdGVy X2JlZm9yZV9zaG1lbV9leGl0X2NhbGxiYWNrLCAwKTsKKwkJYmVmb3JlX3NobWVtX2V4aXRfY2Fs bGJhY2tfc2V0dXAgPSB0cnVlOworCX0KKworCW1lbXNldCgma2V5LCAwLCBzaXplb2Yoa2V5KSk7 CisJa2V5LnJlbGlkID0gcmVsaWQ7CisJa2V5LmRiaWQgPSBNeURhdGFiYXNlSWQ7CisKKwkqZW50 ZXJlZF9wID0gZmFsc2U7CisJTFdMb2NrQWNxdWlyZShDbHVzdGVyZWRSZWxzTG9jaywgTFdfRVhD TFVTSVZFKTsKKwllbnRyeSA9IChDbHVzdGVyZWRSZWwgKikKKwkJaGFzaF9zZWFyY2goQ2x1c3Rl cmVkUmVsc0hhc2gsICZrZXksIEhBU0hfRU5URVJfTlVMTCwgJmZvdW5kKTsKKwlpZiAoZm91bmQp CisJeworCQkvKgorCQkgKiBTaW5jZSBDTFVTVEVSIENPTkNVUlJFTlRMWSB0YWtlcyBTaGFyZVJv d0V4Y2x1c2l2ZUxvY2ssIGEgY29uZmxpY3QKKwkJICogc2hvdWxkIG9jY3VyIG11Y2ggZWFybGll ci4gSG93ZXZlciB0aGF0IGxvY2sgbWF5IGJlIHJlbGVhc2VkCisJCSAqIHRlbXBvcmFyaWx5LCBz ZWUgYmVsb3cuICBBbnl3YXksIHdlIHNob3VsZCBjb21wbGFpbiB3aGF0ZXZlciB0aGUKKwkJICog cmVhc29uIG9mIHRoZSBjb25mbGljdCBtaWdodCBiZS4KKwkJICovCisJCWVyZXBvcnQoRVJST1Is CisJCQkJKGVycm1zZyhDTFVTVEVSX0lOX1BST0dSRVNTX01FU1NBR0UsCisJCQkJCQlSZWxhdGlv bkdldFJlbGF0aW9uTmFtZShyZWwpKSkpOworCX0KKwlpZiAoZW50cnkgPT0gTlVMTCkKKwkJZXJl cG9ydChFUlJPUiwKKwkJCQkoZXJybXNnKCJ0b28gbWFueSByZXF1ZXN0cyBmb3IgQ0xVU1RFUiBD T05DVVJSRU5UTFkgYXQgYSB0aW1lIikpLAorCQkJCShlcnJoaW50KCJjb25zaWRlciBpbmNyZWFz aW5nIHRoZSBcIm1heF9yZXBsaWNhdGlvbl9zbG90c1wiIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVy IikpKTsKKworCS8qCisJICogRXZlbiBpZiB0aGUgaW5zZXJ0aW9uIG9mIFRPQVNUIHJlbGlkIHNo b3VsZCBmYWlsIGJlbG93LCB0aGUgY2FsbGVyIGhhcworCSAqIHRvIGRvIGNsZWFudXAuCisJICov CisJKmVudGVyZWRfcCA9IHRydWU7CisKKwkvKgorCSAqIEVuYWJsZSB0aGUgY2FsbGJhY2sgdG8g cmVtb3ZlIHRoZSBlbnRyeSBpbiBjYXNlIG9mIGV4aXQuIFdlIHNob3VsZCBub3QKKwkgKiBkbyB0 aGlzIGVhcmxpZXIsIG90aGVyd2lzZSBhbiBhdHRlbXB0IHRvIGluc2VydCBhbHJlYWR5IGV4aXN0 aW5nIGVudHJ5CisJICogY291bGQgbWFrZSB1cyByZW1vdmUgdGhhdCBlbnRyeSAoaW5zZXJ0ZWQg YnkgYW5vdGhlciBiYWNrZW5kKSBkdXJpbmcKKwkgKiBFUlJPUiBoYW5kbGluZy4KKwkgKi8KKwlB c3NlcnQoIU9pZElzVmFsaWQoY2x1c3RlcmVkX3JlbCkpOworCWNsdXN0ZXJlZF9yZWwgPSByZWxp ZDsKKworCS8qCisJICogVE9BU1QgcmVsYXRpb24gaXMgbm90IGFjY2Vzc2VkIHVzaW5nIGhpc3Rv cmljIHNuYXBzaG90LCBidXQgd2UgZW50ZXIgaXQKKwkgKiBoZXJlIHRvIHByb3RlY3QgaXQgZnJv bSBiZWluZyBWQUNVVU1lZCBieSBhbm90aGVyIGJhY2tlbmQuIChMb2NrIGRvZXMKKwkgKiBub3Qg aGVscCBpbiB0aGUgQ09OQ1VSUkVOVCBjYXNlIGJlY2F1c2UgY2Fubm90IGhvbGQgaXQgY29udGlu dW91c2x5CisJICogdGlsbCB0aGUgZW5kIG9mIHRoZSB0cmFuc2FjdGlvbi4pIFNlZSB0aGUgY29t bWVudHMgb24gbG9ja2luZyBUT0FTVAorCSAqIHJlbGF0aW9uIGluIGNvcHlfdGFibGVfZGF0YSgp LgorCSAqLworCXRvYXN0cmVsaWQgPSByZWwtPnJkX3JlbC0+cmVsdG9hc3RyZWxpZDsKKwlpZiAo T2lkSXNWYWxpZCh0b2FzdHJlbGlkKSkKKwl7CisJCWtleS5yZWxpZCA9IHRvYXN0cmVsaWQ7CisJ CWVudHJ5ID0gKENsdXN0ZXJlZFJlbCAqKQorCQkJaGFzaF9zZWFyY2goQ2x1c3RlcmVkUmVsc0hh c2gsICZrZXksIEhBU0hfRU5URVJfTlVMTCwgJmZvdW5kKTsKKwkJaWYgKGZvdW5kKQorCQkJLyoK KwkJCSAqIElmIHdlIGNvdWxkIGVudGVyIHRoZSBtYWluIGZvcmsgdGhlIFRPQVNUIHNob3VsZCBz dWNjZWVkCisJCQkgKiB0b28uIE5ldmVydGhlbGVzcywgY2hlY2suCisJCQkgKi8KKwkJCWVyZXBv cnQoRVJST1IsCisJCQkJCShlcnJtc2coIlRPQVNUIHJlbGF0aW9uIG9mIFwiJXNcIiBpcyBhbHJl YWR5IGJlaW5nIHByb2Nlc3NlZCBieSBDTFVTVEVSIENPTkNVUlJFTlRMWSIsCisJCQkJCQkJUmVs YXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSkpKTsKKwkJaWYgKGVudHJ5ID09IE5VTEwpCisJCQll cmVwb3J0KEVSUk9SLAorCQkJCQkoZXJybXNnKCJ0b28gbWFueSByZXF1ZXN0cyBmb3IgQ0xVU1RF UiBDT05DVVJSRU5UIGF0IGEgdGltZSIpKSwKKwkJCQkJKGVycmhpbnQoImNvbnNpZGVyIGluY3Jl YXNpbmcgdGhlIFwibWF4X3JlcGxpY2F0aW9uX3Nsb3RzXCIgY29uZmlndXJhdGlvbiBwYXJhbWV0 ZXIiKSkpOworCisJCUFzc2VydCghT2lkSXNWYWxpZChjbHVzdGVyZWRfcmVsX3RvYXN0KSk7CisJ CWNsdXN0ZXJlZF9yZWxfdG9hc3QgPSB0b2FzdHJlbGlkOworCX0KKwlMV0xvY2tSZWxlYXNlKENs dXN0ZXJlZFJlbHNMb2NrKTsKKworCS8qCisJICogTWFrZSBzdXJlIHRoYXQgb3RoZXIgYmFja2Vu ZHMgYXJlIGF3YXJlIG9mIHRoZSBuZXcgaGFzaCBlbnRyeS4KKwkgKgorCSAqIEJlc2lkZXMgc2Vu ZGluZyB0aGUgaW52YWxpZGF0aW9uIG1lc3NhZ2UsIHdlIG5lZWQgdG8gZm9yY2UgcmUtb3Blbmlu ZworCSAqIG9mIHRoZSByZWxhdGlvbiwgd2hpY2ggaW5jbHVkZXMgdGhlIGFjdHVhbCBpbnZhbGlk YXRpb24gKGFuZCB0aHVzCisJICogY2hlY2tpbmcgb2Ygb3VyIGhhc2h0YWJsZSBvbiB0aGUgbmV4 dCBhY2Nlc3MpLgorCSAqLworCUNhY2hlSW52YWxpZGF0ZVJlbGNhY2hlSW1tZWRpYXRlKHJlbCk7 CisJLyoKKwkgKiBTaW5jZSB0aGUgaGFzaHRhYmxlIG9ubHkgbmVlZHMgdG8gYmUgY2hlY2tlZCBi eSB3cml0ZSB0cmFuc2FjdGlvbnMsCisJICogbG9jayB0aGUgcmVsYXRpb24gaW4gYSBtb2RlIHRo YXQgY29uZmxpY3RzIHdpdGggYW55IERNTCBjb21tYW5kLiAoVGhlCisJICogcmVhZGluZyB0cmFu c2FjdGlvbnMgYXJlIHN1cHBvc2VkIHRvIGNsb3NlIHRoZSByZWxhdGlvbiBiZWZvcmUgb3Blbmlu ZworCSAqIGl0IHdpdGggaGlnaGVyIGxvY2suKSBPbmNlIHdlIGhhdmUgdGhlIHJlbGF0aW9uIChh bmQgaXRzIGluZGV4KSBsb2NrZWQsCisJICogd2UgdW5sb2NrIGl0IGltbWVkaWF0ZWx5IGFuZCB0 aGVuIHJlLWxvY2sgdXNpbmcgdGhlIG9yaWdpbmFsIG1vZGUuCisJICovCisJbnJlbCA9IDA7CisJ aW5pdF9yZWxfcmVvcGVuX2luZm8oJnJyaVtucmVsKytdLCByZWxfcCwgSW52YWxpZE9pZCwKKwkJ CQkJCSBMT0NLX0NMVVNURVJfQ09OQ1VSUkVOVCwgU2hhcmVMb2NrKTsKKwlpZiAoaW5kZXhfcCkK Kwl7CisJCS8qCisJCSAqIEFub3RoZXIgdHJhbnNhY3Rpb24gbWlnaHQgd2FudCB0byBvcGVuIGJv dGggdGhlIHJlbGF0aW9uIGFuZCB0aGUKKwkJICogaW5kZXguIElmIGl0IGFscmVhZHkgaGFzIHRo ZSByZWxhdGlvbiBsb2NrIGFuZCBpcyB3YWl0aW5nIGZvciB0aGUKKwkJICogaW5kZXggbG9jaywg d2Ugc2hvdWxkIHJlbGVhc2UgdGhlIGluZGV4IGxvY2ssIG90aGVyd2lzZSBvdXIgcmVxdWVzdAor CQkgKiBmb3IgU2hhcmVMb2NrIG9uIHRoZSByZWxhdGlvbiBjYW4gZW5kIHVwIGluIGEgZGVhZGxv Y2suCisJCSAqLworCQlpbml0X3JlbF9yZW9wZW5faW5mbygmcnJpW25yZWwrK10sIGluZGV4X3As IEludmFsaWRPaWQsCisJCQkJCQkJIExPQ0tfQ0xVU1RFUl9DT05DVVJSRU5ULCBTaGFyZUxvY2sp OworCX0KKwl1bmxvY2tfYW5kX2Nsb3NlX3JlbGF0aW9ucyhycmksIG5yZWwpOworCS8qCisJICog WFhYIEl0J3Mgbm90IHN0cmljdGx5IG5lY2Vzc2FyeSB0byBsb2NrIHRoZSBpbmRleCBoZXJlLCBi dXQgaXQncworCSAqIHByb2JhYmx5IG5vdCB3b3J0aCB0ZWFjaGluZyB0aGUgInJlb3BlbiBBUEki IGFib3V0IHRoaXMgc3BlY2lhbCBjYXNlLgorCSAqLworCXJlb3Blbl9yZWxhdGlvbnMocnJpLCBu cmVsKTsKKworCS8qIFN3aXRjaCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBsb2NrLiAqLworCW5yZWwg PSAwOworCWluaXRfcmVsX3Jlb3Blbl9pbmZvKCZycmlbbnJlbCsrXSwgcmVsX3AsIEludmFsaWRP aWQsCisJCQkJCQkgU2hhcmVMb2NrLCBMT0NLX0NMVVNURVJfQ09OQ1VSUkVOVCk7CisJaWYgKGlu ZGV4X3ApCisJCWluaXRfcmVsX3Jlb3Blbl9pbmZvKCZycmlbbnJlbCsrXSwgaW5kZXhfcCwgSW52 YWxpZE9pZCwKKwkJCQkJCQkgU2hhcmVMb2NrLCBMT0NLX0NMVVNURVJfQ09OQ1VSUkVOVCk7CisJ dW5sb2NrX2FuZF9jbG9zZV9yZWxhdGlvbnMocnJpLCBucmVsKTsKKwlyZW9wZW5fcmVsYXRpb25z KHJyaSwgbnJlbCk7Cit9CisKKy8qCisgKiBDYWxsIHRoaXMgd2hlbiBkb25lIHdpdGggQ0xVU1RF UiBDT05DVVJSRU5UTFkuCisgKgorICogJ2Vycm9yJyB0ZWxscyB3aGV0aGVyIHRoZSBmdW5jdGlv biBpcyBiZWluZyBjYWxsZWQgaW4gb3JkZXIgdG8gaGFuZGxlCisgKiBlcnJvci4KKyAqLworc3Rh dGljIHZvaWQKK2VuZF9jb25jdXJyZW50X2NsdXN0ZXIoT2lkIHJlbGlkLCBib29sIGVycm9yKQor eworCUNsdXN0ZXJlZFJlbAlrZXksICplbnRyeSwgKmVudHJ5X3RvYXN0ID0gTlVMTDsKKworCS8q IFJlbW92ZSB0aGUgcmVsYXRpb24gZnJvbSB0aGUgaGFzaC4gKi8KKwltZW1zZXQoJmtleSwgMCwg c2l6ZW9mKGtleSkpOworCWtleS5yZWxpZCA9IHJlbGlkOworCWtleS5kYmlkID0gTXlEYXRhYmFz ZUlkOworCUxXTG9ja0FjcXVpcmUoQ2x1c3RlcmVkUmVsc0xvY2ssIExXX0VYQ0xVU0lWRSk7CisJ ZW50cnkgPSBoYXNoX3NlYXJjaChDbHVzdGVyZWRSZWxzSGFzaCwgJmtleSwgSEFTSF9SRU1PVkUs IE5VTEwpOworCisJLyogRGlzYWJsZSBlbmRfY29uY3VycmVudF9jbHVzdGVyX29uX2V4aXRfY2Fs bGJhY2soKS4gKi8KKwlpZiAoT2lkSXNWYWxpZChjbHVzdGVyZWRfcmVsKSkKKwkJY2x1c3RlcmVk X3JlbCA9IEludmFsaWRPaWQ7CisKKwkvKiBSZW1vdmUgdGhlIFRPQVNUIHJlbGF0aW9uIGlmIHRo ZXJlIGlzIG9uZS4gKi8KKwlpZiAoT2lkSXNWYWxpZChjbHVzdGVyZWRfcmVsX3RvYXN0KSkKKwl7 CisJCWtleS5yZWxpZCA9IGNsdXN0ZXJlZF9yZWxfdG9hc3Q7CisJCWVudHJ5X3RvYXN0ID0gaGFz aF9zZWFyY2goQ2x1c3RlcmVkUmVsc0hhc2gsICZrZXksIEhBU0hfUkVNT1ZFLAorCQkJCQkJCQkg IE5VTEwpOworCisJCWNsdXN0ZXJlZF9yZWxfdG9hc3QgPSBJbnZhbGlkT2lkOworCX0KKwllbHNl CisJCWtleS5yZWxpZCA9IEludmFsaWRPaWQ7CisJTFdMb2NrUmVsZWFzZShDbHVzdGVyZWRSZWxz TG9jayk7CisKKwkvKgorCSAqIE9uIG5vcm1hbCBjb21wbGV0aW9uICghZXJyb3IpLCB3ZSBzaG91 bGQgbm90IHJlYWxseSBmYWlsIHRvIHJlbW92ZSB0aGUKKwkgKiBlbnRyeS4gQnV0IGlmIGl0IGRp ZCBmb3IgYW55IHJlYXNvbiwgbWFrZSBzdXJlIHRoZSB0cmFuc2FjdGlvbiBpcworCSAqIGFib3J0 ZWQ6IGlmIG90aGVyIHRyYW5zYWN0aW9ucywgd2hpbGUgY2hhbmdpbmcgdGhlIGNvbnRlbnRzIG9m IHRoZQorCSAqIHJlbGF0aW9uLCBkaWRuJ3Qga25vdyB0aGF0IENMVVNURVIgQ09OQ1VSUkVOVExZ IHdhcyBpbiBwcm9ncmVzcywgdGhleQorCSAqIGNvdWxkIGhhdmUgbWlzc2VkIHRvIFdBTCBlbm91 Z2ggaW5mb3JtYXRpb24sIGFuZCB0aHVzIHdlIGNvdWxkIGhhdmUKKwkgKiBwcm9kdWNlZCBhbiBp bmNvbnNpc3RlbnQgdGFibGUgY29udGVudHMuCisJICoKKwkgKiBPbiB0aGUgb3RoZXIgaGFuZCwg aWYgd2UgYXJlIGFscmVhZHkgaGFuZGxpbmcgYW4gZXJyb3IsIHRoZXJlJ3Mgbm8KKwkgKiByZWFz b24gdG8gd29ycnkgYWJvdXQgaW5jb25zaXN0ZW50IGNvbnRlbnRzIG9mIHRoZSBuZXcgc3RvcmFn ZSBiZWNhdXNlCisJICogdGhlIHRyYW5zYWN0aW9uIGlzIGdvaW5nIHRvIGJlIHJvbGxlZCBiYWNr IGFueXdheS4gRnVydGhlcm1vcmUsIGJ5CisJICogcmFpc2luZyBFUlJPUiBoZXJlIHdlJ2Qgc2hh ZG93IHRoZSBvcmlnaW5hbCBlcnJvci4KKwkgKi8KKwlpZiAoIWVycm9yKQorCXsKKwkJY2hhcgkq cmVsbmFtZTsKKworCQlpZiAoZW50cnkgPT0gTlVMTCkKKwkJeworCQkJcmVsbmFtZSA9IGdldF9y ZWxfbmFtZShyZWxpZCk7CisJCQlpZiAoIXJlbG5hbWUpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJ CQkJCShlcnJtc2coImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHJlbGF0aW9uICV1IiwKKwkJCQkJ CQkJcmVsaWQpKSk7CisKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJtc2coInJlbGF0aW9u IFwiJXNcIiBub3QgZm91bmQgYW1vbmcgY2x1c3RlcmVkIHJlbGF0aW9ucyIsCisJCQkJCQkJcmVs bmFtZSkpKTsKKwkJfQorCisJCS8qCisJCSAqIE1pc3NpbmcgVE9BU1QgcmVsYXRpb24gaW5kaWNh dGVzIHRoYXQgaXQgY291bGQgaGF2ZSBiZWVuIFZBQ1VVTWVkCisJCSAqIG9yIENMVVNURVJlZCBi eSBhbm90aGVyIGJhY2tlbmQgd2hpbGUgd2UgZGlkIG5vdCBob2xkIGEgbG9jayBvbiBpdC4KKwkJ ICovCisJCWlmIChlbnRyeV90b2FzdCA9PSBOVUxMICYmIE9pZElzVmFsaWQoa2V5LnJlbGlkKSkK KwkJeworCQkJcmVsbmFtZSA9IGdldF9yZWxfbmFtZShrZXkucmVsaWQpOworCQkJaWYgKCFyZWxu YW1lKQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJybXNnKCJjYWNoZSBsb29rdXAgZmFp bGVkIGZvciByZWxhdGlvbiAldSIsCisJCQkJCQkJCWtleS5yZWxpZCkpKTsKKworCQkJZXJlcG9y dChFUlJPUiwKKwkJCQkJKGVycm1zZygicmVsYXRpb24gXCIlc1wiIG5vdCBmb3VuZCBhbW9uZyBj bHVzdGVyZWQgcmVsYXRpb25zIiwKKwkJCQkJCQlyZWxuYW1lKSkpOworCQl9CisJfQorCisJLyoK KwkgKiBOb3RlOiB1bmxpa2UgYmVnaW5fY29uY3VycmVudF9jbHVzdGVyKCksIGhlcmUgd2UgZG8g bm90IGxvY2svdW5sb2NrIHRoZQorCSAqIHJlbGF0aW9uOiAxKSBPbiBub3JtYWwgY29tcGxldGlv biwgdGhlIGNhbGxlciBpcyBhbHJlYWR5IGhvbGRpbmcKKwkgKiBBY2Nlc3NFeGNsdXNpdmVMb2Nr ICh0aWxsIHRoZSBlbmQgb2YgdGhlIHRyYW5zYWN0aW9uKSwgMikgb24gRVJST1IgLworCSAqIEZB VEFMLCB3ZSB0cnkgdG8gZG8gdGhlIGNsZWFudXAgYXNhcCwgYnV0IHRoZSB3b3JzdCBjYXNlIGlz IHRoYXQgb3RoZXIKKwkgKiBiYWNrZW5kcyB3aWxsIHdyaXRlIHVubmVjZXNzYXJ5IGluZm9ybWF0 aW9uIHRvIFdBTCB1bnRpbCB0aGV5IGNsb3NlIHRoZQorCSAqIHJlbGF0aW9uLgorCSAqLworfQor CisvKgorICogQSB3cmFwcGVyIHRvIGNhbGwgZW5kX2NvbmN1cnJlbnRfY2x1c3RlcigpIGFzIGEg YmVmb3JlX3NobWVtX2V4aXQgY2FsbGJhY2suCisgKi8KK3N0YXRpYyB2b2lkCitjbHVzdGVyX2Jl Zm9yZV9zaG1lbV9leGl0X2NhbGxiYWNrKGludCBjb2RlLCBEYXR1bSBhcmcpCit7CisJaWYgKE9p ZElzVmFsaWQoY2x1c3RlcmVkX3JlbCkgfHwgT2lkSXNWYWxpZChjbHVzdGVyZWRfcmVsX3RvYXN0 KSkKKwkJZW5kX2NvbmN1cnJlbnRfY2x1c3RlcihjbHVzdGVyZWRfcmVsLCB0cnVlKTsKK30KKwor LyoKKyAqIENoZWNrIGlmIHJlbGF0aW9uIGlzIGN1cnJlbnRseSBiZWluZyBwcm9jZXNzZWQgYnkg Q0xVU1RFUiBDT05DVVJSRU5UTFkuCisgKi8KK2Jvb2wKK2lzX2NvbmN1cnJlbnRfY2x1c3Rlcl9p bl9wcm9ncmVzcyhPaWQgcmVsaWQpCit7CisJQ2x1c3RlcmVkUmVsCWtleSwgKmVudHJ5OworCisJ bWVtc2V0KCZrZXksIDAsIHNpemVvZihrZXkpKTsKKwlrZXkucmVsaWQgPSByZWxpZDsKKwlrZXku ZGJpZCA9IE15RGF0YWJhc2VJZDsKKworCUxXTG9ja0FjcXVpcmUoQ2x1c3RlcmVkUmVsc0xvY2ss IExXX1NIQVJFRCk7CisJZW50cnkgPSAoQ2x1c3RlcmVkUmVsICopCisJCWhhc2hfc2VhcmNoKENs dXN0ZXJlZFJlbHNIYXNoLCAma2V5LCBIQVNIX0ZJTkQsIE5VTEwpOworCUxXTG9ja1JlbGVhc2Uo Q2x1c3RlcmVkUmVsc0xvY2spOworCisJcmV0dXJuIGVudHJ5ICE9IE5VTEw7Cit9CisKKy8qCisg KiBDaGVjayBpZiBWQUNVVU0gRlVMTCAvIENMVVNURVIgQ09OQ1VSUkVOVExZIGlzIGFscmVhZHkg cnVubmluZyBmb3IgZ2l2ZW4KKyAqIHJlbGF0aW9uLCBhbmQgaWYgc28sIHJhaXNlIEVSUk9SLiBU aGUgcHJvYmxlbSBpcyB0aGF0IGNsdXN0ZXJfcmVsKCkgbmVlZHMKKyAqIHRvIHJlbGVhc2UgaXRz IGxvY2sgb24gdGhlIHJlbGF0aW9uIHRlbXBvcmFyaWx5IGF0IHNvbWUgcG9pbnQsIHNvIG91ciBs b2NrCisgKiBhbG9uZSBkb2VzIG5vdCBoZWxwLiBDb21tYW5kcyB0aGF0IG1pZ2h0IGJyZWFrIHdo YXQgY2x1c3Rlcl9yZWwoKSBpcyBkb2luZworICogc2hvdWxkIGNhbGwgdGhpcyBmdW5jdGlvbiBm aXJzdC4KKyAqCisgKiBSZXR1cm4gd2l0aG91dCBjaGVja2luZyBpZiBsb2NrbW9kZSBhbGxvd3Mg Zm9yIHJhY2UgY29uZGl0aW9ucyB3aGljaCB3b3VsZAorICogbWFrZSB0aGUgcmVzdWx0IG1lYW5p bmdsZXNzLiBJbiB0aGF0IGNhc2UsIGNsdXN0ZXJfcmVsKCkgaXRzZWxmIHNob3VsZAorICogdGhy b3cgRVJST1IgaWYgdGhlIHJlbGF0aW9uIHdhcyBjaGFuZ2VkIGJ5IHVzIGluIGFuIGluY29tcGF0 aWJsZQorICogd2F5LiBIb3dldmVyLCBpZiBpdCBtYW5hZ2VkIHRvIGRvIG1vc3Qgb2YgaXRzIHdv cmsgYnkgdGhlbiwgYSBsb3Qgb2YgQ1BVCisgKiB0aW1lIG1pZ2h0IGJlIHdhc3RlZC4KKyAqLwor dm9pZAorY2hlY2tfZm9yX2NvbmN1cnJlbnRfY2x1c3RlcihPaWQgcmVsaWQsIExPQ0tNT0RFIGxv Y2ttb2RlKQoreworCS8qCisJICogSWYgdGhlIGNhbGxlciBkb2VzIG5vdCBoYXZlIGEgbG9jayB0 aGF0IGNvbmZsaWN0cyB3aXRoCisJICogTE9DS19DTFVTVEVSX0NPTkNVUlJFTlQsIHRoZSBjaGVj ayBtYWtlcyBsaXR0bGUgc2Vuc2UgYmVjYXVzZSB0aGUKKwkgKiBWQUNVVU0gRlVMTCAvIENMVVNU RVIgQ09OQ1VSUkVOVExZIGNhbiBzdGFydCBhbnl0aW1lIGFmdGVyIHRoZSBjaGVjay4KKwkgKi8K KwlpZiAobG9ja21vZGUgPCBMT0NLX0NMVVNURVJfQ09OQ1VSUkVOVCkKKwkJcmV0dXJuOworCisJ aWYgKGlzX2NvbmN1cnJlbnRfY2x1c3Rlcl9pbl9wcm9ncmVzcyhyZWxpZCkpCisJCWVyZXBvcnQo RVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAorCQkJ CSBlcnJtc2coQ0xVU1RFUl9JTl9QUk9HUkVTU19NRVNTQUdFLAorCQkJCQkJZ2V0X3JlbF9uYW1l KHJlbGlkKSkpKTsKKworfQorCisvKgorICogQ2hlY2sgaWYgcmVsYXRpb24gaXMgZWxpZ2libGUg Zm9yIENMVVNURVIgQ09OQ1VSUkVOVExZIGFuZCByZXRyaWV2ZSB0aGUKKyAqIGNhdGFsb2cgc3Rh dGUgdG8gYmUgcGFzc2VkIGxhdGVyIHRvIGNoZWNrX2NhdGFsb2dfY2hhbmdlcy4KKyAqCisgKiBD YWxsZXIgaXMgc3VwcG9zZWQgdG8gaG9sZCAoYXQgbGVhc3QpIExPQ0tfQ0xVU1RFUl9DT05DVVJS RU5UIG9uIHRoZQorICogcmVsYXRpb24uCisgKi8KK3N0YXRpYyBDYXRhbG9nU3RhdGUgKgorZ2V0 X2NhdGFsb2dfc3RhdGUoUmVsYXRpb24gcmVsKQoreworCUNhdGFsb2dTdGF0ZQkqcmVzdWx0ID0g cGFsbG9jX29iamVjdChDYXRhbG9nU3RhdGUpOworCUxpc3QJKmluZF9vaWRzOworCUxpc3RDZWxs CSpsYzsKKwlpbnQJCW5pbmRzLCBpOworCU9pZAkJcmVsdG9hc3RyZWxpZCA9IHJlbC0+cmRfcmVs LT5yZWx0b2FzdHJlbGlkOworCWNoYXIJcmVscGVyc2lzdGVuY2UgPSByZWwtPnJkX3JlbC0+cmVs cGVyc2lzdGVuY2U7CisJY2hhcglyZXBsaWRlbnQgPSByZWwtPnJkX3JlbC0+cmVscmVwbGlkZW50 OworCU9pZAkJaWRlbnRfaWR4ID0gUmVsYXRpb25HZXRSZXBsaWNhSW5kZXgocmVsKTsKKwlUdXBs ZURlc2MJdGRfc3JjID0gUmVsYXRpb25HZXREZXNjcihyZWwpOworCisJLyoKKwkgKiBXaGlsZSBn YXRoZXJpbmcgdGhlIGNhdGFsb2cgaW5mb3JtYXRpb24sIGNoZWNrIGlmIHRoZXJlIGlzIGEgcmVh c29uIG5vdAorCSAqIHRvIHByb2NlZWQuCisJICovCisJY2hlY2tfcmVsYXRpb25faXNfY2x1c3Rl cmFibGVfY29uY3VycmVudGx5KHJlbCwgRVJST1IsCisJCQkJCQkJCQkJCSAgICJDTFVTVEVSIChD T05DVVJSRU5UTFkpIik7CisKKwkvKgorCSAqIFRPQVNUIHNob3VsZCBub3QgcmVhbGx5IGNoYW5n ZSwgYnV0IGJlIGNhcmVmdWwuIElmIGl0IGRpZCwgd2Ugd291bGQgYmUKKwkgKiB1bmFibGUgdG8g cmVtb3ZlIHRoZSBuZXcgb25lIGZyb20gQ2x1c3RlcmVkUmVsc0hhc2guCisJICovCisJaWYgKE9p ZElzVmFsaWQoY2x1c3RlcmVkX3JlbF90b2FzdCkgJiYKKwkJY2x1c3RlcmVkX3JlbF90b2FzdCAh PSByZWx0b2FzdHJlbGlkKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJtc2coIlRPQVNUIHJl bGF0aW9uIGNoYW5nZWQgYnkgYW5vdGhlciB0cmFuc2FjdGlvbiIpKSk7CisKKwkvKiBObyBpbmRl eCBzaG91bGQgYmUgZHJvcHBlZCB3aGlsZSB3ZSBhcmUgY2hlY2tpbmcgaXQuICovCisJQXNzZXJ0 KENoZWNrUmVsYXRpb25Mb2NrZWRCeU1lKHJlbCwgU2hhcmVVcGRhdGVFeGNsdXNpdmVMb2NrLCB0 cnVlKSk7CisKKwlpbmRfb2lkcyA9IFJlbGF0aW9uR2V0SW5kZXhMaXN0KHJlbCk7CisJcmVzdWx0 LT5uaW5kcyA9IG5pbmRzID0gbGlzdF9sZW5ndGgoaW5kX29pZHMpOworCXJlc3VsdC0+aW5kX29p ZHMgPSBwYWxsb2NfYXJyYXkoT2lkLCBuaW5kcyk7CisJcmVzdWx0LT5pbmRfdHVwZGVzY3MgPSBw YWxsb2NfYXJyYXkoVHVwbGVEZXNjLCBuaW5kcyk7CisJaSA9IDA7CisJZm9yZWFjaChsYywgaW5k X29pZHMpCisJeworCQlPaWQJaW5kX29pZCA9IGxmaXJzdF9vaWQobGMpOworCQlSZWxhdGlvbglp bmRleDsKKwkJVHVwbGVEZXNjCXRkX3NyYywgdGRfZHN0OworCisJCS8qCisJCSAqIFdlYWtlciBs b2NrIHNob3VsZCBiZSBvLmsuIGZvciB0aGUgaW5kZXgsIGJ1dCB0aGlzIG9uZSBzaG91bGQgYnJl YWsKKwkJICogYW55dGhpbmcgZWl0aGVyLgorCQkgKi8KKwkJaW5kZXggPSBpbmRleF9vcGVuKGlu ZF9vaWQsIFNoYXJlVXBkYXRlRXhjbHVzaXZlTG9jayk7CisKKwkJcmVzdWx0LT5pbmRfb2lkc1tp XSA9IFJlbGF0aW9uR2V0UmVsaWQoaW5kZXgpOworCQl0ZF9zcmMgPSBSZWxhdGlvbkdldERlc2Ny KGluZGV4KTsKKwkJdGRfZHN0ID0gcGFsbG9jKFR1cGxlRGVzY1NpemUodGRfc3JjKSk7CisJCVR1 cGxlRGVzY0NvcHkodGRfZHN0LCB0ZF9zcmMpOworCQlyZXN1bHQtPmluZF90dXBkZXNjc1tpXSA9 IHRkX2RzdDsKKwkJaSsrOworCisJCWluZGV4X2Nsb3NlKGluZGV4LCBTaGFyZVVwZGF0ZUV4Y2x1 c2l2ZUxvY2spOworCX0KKworCS8qIEZpbGwtaW4gdGhlIHJlbGF0aW9uIGluZm8uICovCisJcmVz dWx0LT50dXBkZXNjID0gcGFsbG9jKFR1cGxlRGVzY1NpemUodGRfc3JjKSk7CisJVHVwbGVEZXNj Q29weShyZXN1bHQtPnR1cGRlc2MsIHRkX3NyYyk7CisJcmVzdWx0LT5yZWx0b2FzdHJlbGlkID0g cmVsdG9hc3RyZWxpZDsKKwlyZXN1bHQtPnJlbHBlcnNpc3RlbmNlID0gcmVscGVyc2lzdGVuY2U7 CisJcmVzdWx0LT5yZXBsaWRlbnQgPSByZXBsaWRlbnQ7CisJcmVzdWx0LT5yZXBsaWRpbmRleCA9 IGlkZW50X2lkeDsKKworCXJldHVybglyZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitmcmVlX2Nh dGFsb2dfc3RhdGUoQ2F0YWxvZ1N0YXRlICpzdGF0ZSkKK3sKKwkvKiBXZSBhcmUgb25seSBpbnRl cmVzdGVkIGluIGluZGV4ZXMuICovCisJaWYgKHN0YXRlLT5uaW5kcyA9PSAwKQorCQlyZXR1cm47 CisKKwlmb3IgKGludCBpID0gMDsgaSA8IHN0YXRlLT5uaW5kczsgaSsrKQorCQlGcmVlVHVwbGVE ZXNjKHN0YXRlLT5pbmRfdHVwZGVzY3NbaV0pOworCisJRnJlZVR1cGxlRGVzYyhzdGF0ZS0+dHVw ZGVzYyk7CisJcGZyZWUoc3RhdGUtPmluZF9vaWRzKTsKKwlwZnJlZShzdGF0ZS0+aW5kX3R1cGRl c2NzKTsKKwlwZnJlZShzdGF0ZSk7Cit9CisKKy8qCisgKiBSYWlzZSBFUlJPUiBpZiAncmVsJyBj aGFuZ2VkIGluIGEgd2F5IHRoYXQgZG9lcyBub3QgYWxsb3cgZnVydGhlcgorICogcHJvY2Vzc2lu ZyBvZiBDTFVTVEVSIENPTkNVUlJFTlRMWS4KKyAqCisgKiBCZXNpZGVzIHRoZSByZWxhdGlvbidz IHR1cGxlIGRlc2NyaXB0b3IsIGl0J3MgaW1wb3J0YW50IHRvIGNoZWNrIGluZGV4ZXM6CisgKiBj b25jdXJyZW50IGNoYW5nZSBvZiBpbmRleCBkZWZpbml0aW9uIChjYW4gaXQgaGFwcGVuIGluIG90 aGVyIHdheSB0aGFuCisgKiBkcm9wcGluZyBhbmQgcmUtY3JlYXRpbmcgdGhlIGluZGV4LCBhY2Np ZGVudGFsbHkgd2l0aCB0aGUgc2FtZSBPSUQ/KSBjYW4gYmUKKyAqIGEgcHJvYmxlbSBiZWNhdXNl IHdlIG1heSBhbHJlYWR5IGhhdmUgdGhlIG5ldyBpbmRleCBidWlsdC4gSWYgYW4gaW5kZXggd2Fz CisgKiBjcmVhdGVkIG9yIGRyb3BwZWQgY29uY3VycmVudGx5LCB3ZSdkIGZhaWwgdG8gc3dhcCB0 aGUgaW5kZXggc3RvcmFnZS4gSW4KKyAqIGFueSBjYXNlLCB3ZSBwcmVmZXIgdG8gY2hlY2sgdGhl IGluZGV4ZXMgZWFybHkgdG8gZ2V0IGFuIGV4cGxpY2l0IGVycm9yCisgKiBtZXNzYWdlIGFib3V0 IHRoZSBtaXNtYXRjaC4gRnVydGhlcm1vcmUsIHRoZSBlYXJsaWVyIHdlIGRldGVjdCB0aGUgY2hh bmdlLAorICogdGhlIGZld2VyIENQVSBjeWNsZXMgd2Ugd2FzdGUuCisgKgorICogTm90ZSB0aGF0 IHdlIGRvIG5vdCBjaGVjayBjb25zdHJhaW50cyBiZWNhdXNlIHRoZSB0cmFuc2FjdGlvbiB3aGlj aCBjaGFuZ2VkCisgKiB0aGVtIG11c3QgaGF2ZSBlbnN1cmVkIHRoYXQgdGhlIGV4aXN0aW5nIHR1 cGxlcyBzYXRpc2Z5IHRoZSBuZXcKKyAqIGNvbnN0cmFpbnRzLiBJZiBhbnkgRE1MIGNvbW1hbmRz IHdlcmUgbmVjZXNzYXJ5IGZvciB0aGF0LCB3ZSB3aWxsIHNpbXBseQorICogZGVjb2RlIHRoZW0g ZnJvbSBXQUwgYW5kIGFwcGx5IHRoZW0gdG8gdGhlIG5ldyBzdG9yYWdlLgorICoKKyAqIENhbGxl ciBpcyBzdXBwb3NlZCB0byBob2xkIChhdCBsZWFzdCkgU2hhcmVVcGRhdGVFeGNsdXNpdmVMb2Nr IG9uIHRoZQorICogcmVsYXRpb24uCisgKi8KK3N0YXRpYyB2b2lkCitjaGVja19jYXRhbG9nX2No YW5nZXMoUmVsYXRpb24gcmVsLCBDYXRhbG9nU3RhdGUgKmNhdF9zdGF0ZSkKK3sKKwlMaXN0CSpp bmRfb2lkczsKKwlMaXN0Q2VsbAkqbGM7CisJTE9DS01PREUJbG1vZGU7CisJT2lkCQlpZGVudF9p ZHg7CisJVHVwbGVEZXNjCXRkLCB0ZF9jcDsKKworCS8qIEZpcnN0LCBjaGVjayB0aGUgcmVsYXRp b24gaW5mby4gKi8KKworCS8qIFRPQVNUIGlzIG5vdCBlYXN5IHRvIGNoYW5nZSwgYnV0IGNoZWNr LiAqLworCWlmIChyZWwtPnJkX3JlbC0+cmVsdG9hc3RyZWxpZCAhPSBjYXRfc3RhdGUtPnJlbHRv YXN0cmVsaWQpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJZXJybXNnKCJUT0FTVCByZWxhdGlvbiBv ZiByZWxhdGlvbiBcIiVzXCIgY2hhbmdlZCBieSBhbm90aGVyIHRyYW5zYWN0aW9uIiwKKwkJCQkJ ICAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSkpOworCisJaWYgKHJlbC0+cmRfcmVsLT5y ZWxwZXJzaXN0ZW5jZSAhPSBjYXRfc3RhdGUtPnJlbHBlcnNpc3RlbmNlKQorCQllcmVwb3J0KEVS Uk9SLAorCQkJCWVycm1zZygicGVyc2lzdGVuY2Ugb2YgcmVsYXRpb24gXCIlc1wiIGNoYW5nZWQg YnkgYW5vdGhlciB0cmFuc2FjdGlvbiIsCisJCQkJCSAgIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1l KHJlbCkpKTsKKworCWlmIChjYXRfc3RhdGUtPnJlcGxpZGVudCAhPSByZWwtPnJkX3JlbC0+cmVs cmVwbGlkZW50KQorCQllcmVwb3J0KEVSUk9SLAorCQkJCWVycm1zZygicmVwbGljYSBpZGVudGl0 eSBvZiByZWxhdGlvbiBcIiVzXCIgY2hhbmdlZCBieSBhbm90aGVyIHRyYW5zYWN0aW9uIiwKKwkJ CQkJICAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSkpOworCisJaWRlbnRfaWR4ID0gUmVs YXRpb25HZXRSZXBsaWNhSW5kZXgocmVsKTsKKwlpZiAoaWRlbnRfaWR4ID09IEludmFsaWRPaWQg JiYgcmVsLT5yZF9wa2luZGV4ICE9IEludmFsaWRPaWQpCisJCWlkZW50X2lkeCA9IHJlbC0+cmRf cGtpbmRleDsKKwlpZiAoY2F0X3N0YXRlLT5yZXBsaWRpbmRleCAhPSBpZGVudF9pZHgpCisJCWVy ZXBvcnQoRVJST1IsCisJCQkJZXJybXNnKCJpZGVudGl0eSBpbmRleCBvZiByZWxhdGlvbiBcIiVz XCIgY2hhbmdlZCBieSBhbm90aGVyIHRyYW5zYWN0aW9uIiwKKwkJCQkJICAgUmVsYXRpb25HZXRS ZWxhdGlvbk5hbWUocmVsKSkpOworCisJLyoKKwkgKiBBcyBjYXRfc3RhdGUgY29udGFpbnMgYSBj b3B5ICh3aGljaCBoYXMgdGhlIGNvbnN0cmFpbnQgaW5mbyBjbGVhcmVkKSwKKwkgKiBjcmVhdGUg YSB0ZW1wb3JhcnkgY29weSBmb3IgdGhlIGNvbXBhcmlzb24uCisJICovCisJdGQgPSBSZWxhdGlv bkdldERlc2NyKHJlbCk7CisJdGRfY3AgPSBwYWxsb2MoVHVwbGVEZXNjU2l6ZSh0ZCkpOworCVR1 cGxlRGVzY0NvcHkodGRfY3AsIHRkKTsKKwlpZiAoIWVxdWFsVHVwbGVEZXNjcyhjYXRfc3RhdGUt PnR1cGRlc2MsIHRkX2NwKSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQllcnJtc2coImRlZmluaXRp b24gb2YgcmVsYXRpb24gXCIlc1wiIGNoYW5nZWQgYnkgYW5vdGhlciB0cmFuc2FjdGlvbiIsCisJ CQkJCSAgIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCkpKTsKKwlGcmVlVHVwbGVEZXNjKHRk X2NwKTsKKworCS8qIE5vdyB3ZSBhcmUgb25seSBpbnRlcmVzdGVkIGluIGluZGV4ZXMuICovCisJ aWYgKGNhdF9zdGF0ZS0+bmluZHMgPT0gMCkKKwkJcmV0dXJuOworCisJLyogTm8gaW5kZXggc2hv dWxkIGJlIGRyb3BwZWQgd2hpbGUgd2UgYXJlIGNoZWNraW5nIHRoZSByZWxhdGlvbi4gKi8KKwls bW9kZSA9IFNoYXJlVXBkYXRlRXhjbHVzaXZlTG9jazsKKwlBc3NlcnQoQ2hlY2tSZWxhdGlvbkxv Y2tlZEJ5TWUocmVsLCBsbW9kZSwgdHJ1ZSkpOworCisJaW5kX29pZHMgPSBSZWxhdGlvbkdldElu ZGV4TGlzdChyZWwpOworCWlmIChsaXN0X2xlbmd0aChpbmRfb2lkcykgIT0gY2F0X3N0YXRlLT5u aW5kcykKKwkJZ290byBmYWlsZWRfaW5kZXg7CisKKwlmb3JlYWNoKGxjLCBpbmRfb2lkcykKKwl7 CisJCU9pZAlpbmRfb2lkID0gbGZpcnN0X29pZChsYyk7CisJCWludAkJaTsKKwkJVHVwbGVEZXNj CXR1cGRlc2M7CisJCVJlbGF0aW9uCWluZGV4OworCisJCS8qIEZpbmQgdGhlIGluZGV4IGluIGNh dF9zdGF0ZS4gKi8KKwkJZm9yIChpID0gMDsgaSA8IGNhdF9zdGF0ZS0+bmluZHM7IGkrKykKKwkJ eworCQkJaWYgKGNhdF9zdGF0ZS0+aW5kX29pZHNbaV0gPT0gaW5kX29pZCkKKwkJCQlicmVhazsK KwkJfQorCQkvKgorCQkgKiBPSUQgbm90IGZvdW5kLCBpLmUuIHRoZSBpbmRleCB3YXMgcmVwbGFj ZWQgYnkgYW5vdGhlciBvbmUuIFhYWAorCQkgKiBTaG91bGQgd2UgeWV0IHRyeSB0byBmaW5kIGlm IGFuIGluZGV4IGhhdmluZyB0aGUgZGVzaXJlZCB0dXBsZQorCQkgKiBkZXNjcmlwdG9yIGV4aXN0 cz8gT3Igc2hvdWxkIHdlIGFsd2F5cyBsb29rIGZvciB0aGUgdHVwbGUKKwkJICogZGVzY3JpcHRv ciBhbmQgbm90IHVzZSBPSURzIGF0IGFsbD8KKwkJICovCisJCWlmIChpID09IGNhdF9zdGF0ZS0+ bmluZHMpCisJCQlnb3RvIGZhaWxlZF9pbmRleDsKKworCQkvKiBDaGVjayB0aGUgdHVwbGUgZGVz Y3JpcHRvci4gKi8KKwkJaW5kZXggPSB0cnlfaW5kZXhfb3BlbihpbmRfb2lkLCBsbW9kZSk7CisJ CWlmIChpbmRleCA9PSBOVUxMKQorCQkJZ290byBmYWlsZWRfaW5kZXg7CisJCXR1cGRlc2MgPSBS ZWxhdGlvbkdldERlc2NyKGluZGV4KTsKKwkJaWYgKCFlcXVhbFR1cGxlRGVzY3MoY2F0X3N0YXRl LT5pbmRfdHVwZGVzY3NbaV0sIHR1cGRlc2MpKQorCQkJZ290byBmYWlsZWRfaW5kZXg7CisJCWlu ZGV4X2Nsb3NlKGluZGV4LCBsbW9kZSk7CisJfQorCisJcmV0dXJuOworCitmYWlsZWRfaW5kZXg6 CisJZXJlcG9ydChFUlJPUiwKKwkJCShlcnJtc2coImluZGV4KGVzKSBvZiByZWxhdGlvbiBcIiVz XCIgY2hhbmdlZCBieSBhbm90aGVyIHRyYW5zYWN0aW9uIiwKKwkJCQkJUmVsYXRpb25HZXRSZWxh dGlvbk5hbWUocmVsKSkpKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgbXVjaCBsaWtl IHBnX2NyZWF0ZV9sb2dpY2FsX3JlcGxpY2F0aW9uX3Nsb3QoKSBleGNlcHQgdGhhdAorICogdGhl IG5ldyBzbG90IGlzIG5laXRoZXIgcmVsZWFzZWQgKGlmIGFueW9uZSBlbHNlIGNvdWxkIHJlYWQg Y2hhbmdlcyBmcm9tCisgKiBvdXIgc2xvdCwgd2UgY291bGQgbWlzcyBjaGFuZ2VzIG90aGVyIGJh Y2tlbmRzIGRvIHdoaWxlIHdlIGNvcHkgdGhlCisgKiBleGlzdGluZyBkYXRhIGludG8gdGVtcG9y YXJ5IHRhYmxlKSwgbm9yIHBlcnNpc3RlZCAoaXQncyBlYXNpZXIgdG8gaGFuZGxlCisgKiBjcmFz aCBieSByZXN0YXJ0aW5nIGFsbCB0aGUgd29yayBmcm9tIHNjcmF0Y2gpLgorICoKKyAqIFhYWCBF dmVuIHRob3VnaCBDcmVhdGVJbml0RGVjb2RpbmdDb250ZXh0KCkgZG9lcyBub3Qgc2V0IHN0YXRl IHRvCisgKiBSU19QRVJTSVNURU5ULCBpdCBkb2VzIHdyaXRlIHRoZSBzbG90IHRvIGRpc2suIFdl IHJlbHkgb24KKyAqIFJlc3RvcmVTbG90RnJvbURpc2soKSB0byBkZWxldGUgZXBoZW1lcmFsIHNs b3RzIGR1cmluZyBzdGFydHVwLiAoQm90aCBFUlJPUgorICogYW5kIEZBVEFMIHNob3VsZCBsZWFk IHRvIGNsZWFudXAgZXZlbiBiZWZvcmUgdGhlIGNsdXN0ZXIgZ29lcyBkb3duLikKKyAqLworc3Rh dGljIExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKgorc2V0dXBfbG9naWNhbF9kZWNvZGluZyhPaWQg cmVsaWQsIGNvbnN0IGNoYXIgKnNsb3RuYW1lLCBUdXBsZURlc2MgdHVwZGVzYykKK3sKKwlMb2dp Y2FsRGVjb2RpbmdDb250ZXh0ICpjdHg7CisJQ2x1c3RlckRlY29kaW5nU3RhdGUgKmRzdGF0ZTsK KworCS8qIFJTX1RFTVBPUkFSWSBzbyB0aGF0IHRoZSBzbG90IGdldHMgY2xlYW5lZCB1cCBvbiBF UlJPUi4gKi8KKwlSZXBsaWNhdGlvblNsb3RDcmVhdGUoc2xvdG5hbWUsIHRydWUsIFJTX1RFTVBP UkFSWSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CisKKwkvKgorCSAqIE5laXRoZXIgcHJlcGFyZV93 cml0ZSBub3IgZG9fd3JpdGUgY2FsbGJhY2sgbm9yIHVwZGF0ZV9wcm9ncmVzcyBpcworCSAqIHVz ZWZ1bCBmb3IgdXMuCisJICoKKwkgKiBSZWdhcmRpbmcgdGhlIHZhbHVlIG9mIG5lZWRfZnVsbF9z bmFwc2hvdCwgd2UgcGFzcyBmYWxzZSBiZWNhdXNlIHRoZQorCSAqIHRhYmxlIHdlIGFyZSBwcm9j ZXNzaW5nIGlzIHByZXNlbnQgaW4gQ2x1c3RlcmVkUmVsc0hhc2ggYW5kIHRoZXJlZm9yZSwKKwkg KiByZWdhcmRpbmcgbG9naWNhbCBkZWNvZGluZywgdHJlYXRlZCBsaWtlIGEgY2F0YWxvZy4KKwkg Ki8KKwljdHggPSBDcmVhdGVJbml0RGVjb2RpbmdDb250ZXh0KFJFUExfUExVR0lOX05BTUUsCisJ CQkJCQkJCQlOSUwsCisJCQkJCQkJCQlmYWxzZSwKKwkJCQkJCQkJCUludmFsaWRYTG9nUmVjUHRy LAorCQkJCQkJCQkJWExfUk9VVElORSgucGFnZV9yZWFkID0gcmVhZF9sb2NhbF94bG9nX3BhZ2Us CisJCQkJCQkJCQkJCSAgIC5zZWdtZW50X29wZW4gPSB3YWxfc2VnbWVudF9vcGVuLAorCQkJCQkJ CQkJCQkgICAuc2VnbWVudF9jbG9zZSA9IHdhbF9zZWdtZW50X2Nsb3NlKSwKKwkJCQkJCQkJCU5V TEwsIE5VTEwsIE5VTEwpOworCisJLyoKKwkgKiBXZSBkb24ndCBoYXZlIGNvbnRyb2wgb24gc2V0 dGluZyBmYXN0X2ZvcndhcmQsIHNvIGF0IGxlYXN0IGNoZWNrIGl0LgorCSAqLworCUFzc2VydCgh Y3R4LT5mYXN0X2ZvcndhcmQpOworCisJRGVjb2RpbmdDb250ZXh0RmluZFN0YXJ0cG9pbnQoY3R4 KTsKKworCS8qIFNvbWUgV0FMIHJlY29yZHMgc2hvdWxkIGhhdmUgYmVlbiByZWFkLiAqLworCUFz c2VydChjdHgtPnJlYWRlci0+RW5kUmVjUHRyICE9IEludmFsaWRYTG9nUmVjUHRyKTsKKworCVhM Qnl0ZVRvU2VnKGN0eC0+cmVhZGVyLT5FbmRSZWNQdHIsIGNsdXN0ZXJfY3VycmVudF9zZWdtZW50 LAorCQkJCXdhbF9zZWdtZW50X3NpemUpOworCisJLyoKKwkgKiBTZXR1cCBzdHJ1Y3R1cmVzIHRv IHN0b3JlIGRlY29kZWQgY2hhbmdlcy4KKwkgKi8KKwlkc3RhdGUgPSBwYWxsb2MwKHNpemVvZihD bHVzdGVyRGVjb2RpbmdTdGF0ZSkpOworCWRzdGF0ZS0+cmVsaWQgPSByZWxpZDsKKwlkc3RhdGUt PnRzdG9yZSA9IHR1cGxlc3RvcmVfYmVnaW5faGVhcChmYWxzZSwgZmFsc2UsCisJCQkJCQkJCQkJ ICAgbWFpbnRlbmFuY2Vfd29ya19tZW0pOworCWRzdGF0ZS0+dHVwZGVzYyA9IHR1cGRlc2M7CisK KwkvKiBJbml0aWFsaXplIHRoZSBkZXNjcmlwdG9yIHRvIHN0b3JlIHRoZSBjaGFuZ2VzIC4uLiAq LworCWRzdGF0ZS0+dHVwZGVzY19jaGFuZ2UgPSBDcmVhdGVUZW1wbGF0ZVR1cGxlRGVzYygxKTsK KworCVR1cGxlRGVzY0luaXRFbnRyeShkc3RhdGUtPnR1cGRlc2NfY2hhbmdlLCAxLCBOVUxMLCBC WVRFQU9JRCwgLTEsIDApOworCS8qIC4uLiBhcyB3ZWxsIGFzIHRoZSBjb3JyZXNwb25kaW5nIHNs b3QuICovCisJZHN0YXRlLT50c3Nsb3QgPSBNYWtlU2luZ2xlVHVwbGVUYWJsZVNsb3QoZHN0YXRl LT50dXBkZXNjX2NoYW5nZSwKKwkJCQkJCQkJCQkJICAmVFRTT3BzTWluaW1hbFR1cGxlKTsKKwor CWRzdGF0ZS0+cmVzb3duZXIgPSBSZXNvdXJjZU93bmVyQ3JlYXRlKEN1cnJlbnRSZXNvdXJjZU93 bmVyLAorCQkJCQkJCQkJCSAgICJsb2dpY2FsIGRlY29kaW5nIik7CisKKwljdHgtPm91dHB1dF93 cml0ZXJfcHJpdmF0ZSA9IGRzdGF0ZTsKKwlyZXR1cm4gY3R4OworfQorCisvKgorICogUmV0cmll dmUgdHVwbGUgZnJvbSBhIGNoYW5nZSBzdHJ1Y3R1cmUuIEFzIGZvciB0aGUgY2hhbmdlLCBubyBh bGlnbm1lbnQgaXMKKyAqIGFzc3VtZWQuCisgKi8KK3N0YXRpYyBIZWFwVHVwbGUKK2dldF9jaGFu Z2VkX3R1cGxlKENvbmN1cnJlbnRDaGFuZ2UgKmNoYW5nZSkKK3sKKwlIZWFwVHVwbGVEYXRhIHR1 cF9kYXRhOworCUhlYXBUdXBsZQlyZXN1bHQ7CisJY2hhcgkgICAqc3JjOworCisJLyoKKwkgKiBF bnN1cmUgYWxpZ25tZW50IGJlZm9yZSBhY2Nlc3NpbmcgdGhlIGZpZWxkcy4gKFRoaXMgaXMgd2h5 IHdlIGNhbid0IHVzZQorCSAqIGhlYXBfY29weXR1cGxlKCkgaW5zdGVhZCBvZiB0aGlzIGZ1bmN0 aW9uLikKKwkgKi8KKwltZW1jcHkoJnR1cF9kYXRhLCAmY2hhbmdlLT50dXBfZGF0YSwgc2l6ZW9m KEhlYXBUdXBsZURhdGEpKTsKKworCXJlc3VsdCA9IChIZWFwVHVwbGUpIHBhbGxvYyhIRUFQVFVQ TEVTSVpFICsgdHVwX2RhdGEudF9sZW4pOworCW1lbWNweShyZXN1bHQsICZ0dXBfZGF0YSwgc2l6 ZW9mKEhlYXBUdXBsZURhdGEpKTsKKwlyZXN1bHQtPnRfZGF0YSA9IChIZWFwVHVwbGVIZWFkZXIp ICgoY2hhciAqKSByZXN1bHQgKyBIRUFQVFVQTEVTSVpFKTsKKwlzcmMgPSAoY2hhciAqKSBjaGFu Z2UgKyBzaXplb2YoQ29uY3VycmVudENoYW5nZSk7CisJbWVtY3B5KHJlc3VsdC0+dF9kYXRhLCBz cmMsIHJlc3VsdC0+dF9sZW4pOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIERlY29k ZSBsb2dpY2FsIGNoYW5nZXMgZnJvbSB0aGUgV0FMIHNlcXVlbmNlIHVwIHRvIGVuZF9vZl93YWwu CisgKi8KK3ZvaWQKK2NsdXN0ZXJfZGVjb2RlX2NvbmN1cnJlbnRfY2hhbmdlcyhMb2dpY2FsRGVj b2RpbmdDb250ZXh0ICpjdHgsCisJCQkJCQkJCSAgWExvZ1JlY1B0ciBlbmRfb2Zfd2FsKQorewor CUNsdXN0ZXJEZWNvZGluZ1N0YXRlICpkc3RhdGU7CisJUmVzb3VyY2VPd25lciByZXNvd25lcl9v bGQ7CisJUGdCYWNrZW5kUHJvZ3Jlc3MJcHJvZ3Jlc3M7CisKKwkvKgorCSAqIEludmFsaWRhdGUg dGhlICJwcmVzZW50IiBjYWNoZSBiZWZvcmUgbW92aW5nIHRvICIocmVjZW50KSBoaXN0b3J5Ii4K KwkgKi8KKwlJbnZhbGlkYXRlU3lzdGVtQ2FjaGVzKCk7CisKKwlkc3RhdGUgPSAoQ2x1c3RlckRl Y29kaW5nU3RhdGUgKikgY3R4LT5vdXRwdXRfd3JpdGVyX3ByaXZhdGU7CisJcmVzb3duZXJfb2xk ID0gQ3VycmVudFJlc291cmNlT3duZXI7CisJQ3VycmVudFJlc291cmNlT3duZXIgPSBkc3RhdGUt PnJlc293bmVyOworCisJLyoKKwkgKiByZW9yZGVyYnVmZmVyLmMgdXNlcyBpbnRlcm5hbCBzdWJ0 cmFuc2FjdGlvbiwgd2hvc2UgYWJvcnQgZW5kcyB0aGUKKwkgKiBjb21tYW5kIHByb2dyZXNzIHJl cG9ydGluZy4gU2F2ZSB0aGUgc3RhdHVzIGhlcmUgc28gd2UgY2FuIHJlc3RvcmUgd2hlbgorCSAq IGRvbmUgd2l0aCB0aGUgZGVjb2RpbmcuCisJICovCisJbWVtY3B5KCZwcm9ncmVzcywgJk15QkVF bnRyeS0+c3RfcHJvZ3Jlc3MsIHNpemVvZihQZ0JhY2tlbmRQcm9ncmVzcykpOworCisJUEdfVFJZ KCk7CisJeworCQl3aGlsZSAoY3R4LT5yZWFkZXItPkVuZFJlY1B0ciA8IGVuZF9vZl93YWwpCisJ CXsKKwkJCVhMb2dSZWNvcmQgKnJlY29yZDsKKwkJCVhMb2dTZWdObwlzZWdub19uZXc7CisJCQlj aGFyCSAgICplcnJtID0gTlVMTDsKKwkJCVhMb2dSZWNQdHIJZW5kX2xzbjsKKworCQkJcmVjb3Jk ID0gWExvZ1JlYWRSZWNvcmQoY3R4LT5yZWFkZXIsICZlcnJtKTsKKwkJCWlmIChlcnJtKQorCQkJ CWVsb2coRVJST1IsICIlcyIsIGVycm0pOworCisJCQlpZiAocmVjb3JkICE9IE5VTEwpCisJCQkJ TG9naWNhbERlY29kaW5nUHJvY2Vzc1JlY29yZChjdHgsIGN0eC0+cmVhZGVyKTsKKworCQkJLyoK KwkJCSAqIElmIFdBTCBzZWdtZW50IGJvdW5kYXJ5IGhhcyBiZWVuIGNyb3NzZWQsIGluZm9ybSB0 aGUgZGVjb2RpbmcKKwkJCSAqIHN5c3RlbSB0aGF0IHRoZSBjYXRhbG9nX3htaW4gY2FuIGFkdmFu Y2UuIChXZSBjYW4gY29uZmlybSBtb3JlCisJCQkgKiBvZnRlbiwgYnV0IGEgZmlsbGluZyBhIHNp bmdsZSBXQUwgc2VnbWVudCBzaG91bGQgbm90IHRha2UgbXVjaAorCQkJICogdGltZS4pCisJCQkg Ki8KKwkJCWVuZF9sc24gPSBjdHgtPnJlYWRlci0+RW5kUmVjUHRyOworCQkJWExCeXRlVG9TZWco ZW5kX2xzbiwgc2Vnbm9fbmV3LCB3YWxfc2VnbWVudF9zaXplKTsKKwkJCWlmIChzZWdub19uZXcg IT0gY2x1c3Rlcl9jdXJyZW50X3NlZ21lbnQpCisJCQl7CisJCQkJTG9naWNhbENvbmZpcm1SZWNl aXZlZExvY2F0aW9uKGVuZF9sc24pOworCQkJCWVsb2coREVCVUcxLCAiY2x1c3RlcjogY29uZmly bWVkIHJlY2VpdmUgbG9jYXRpb24gJVgvJVgiLAorCQkJCQkgKHVpbnQzMikgKGVuZF9sc24gPj4g MzIpLCAodWludDMyKSBlbmRfbHNuKTsKKwkJCQljbHVzdGVyX2N1cnJlbnRfc2VnbWVudCA9IHNl Z25vX25ldzsKKwkJCX0KKworCQkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKwkJfQorCQlJbnZh bGlkYXRlU3lzdGVtQ2FjaGVzKCk7CisJCUN1cnJlbnRSZXNvdXJjZU93bmVyID0gcmVzb3duZXJf b2xkOworCX0KKwlQR19DQVRDSCgpOworCXsKKwkJSW52YWxpZGF0ZVN5c3RlbUNhY2hlcygpOwor CQlDdXJyZW50UmVzb3VyY2VPd25lciA9IHJlc293bmVyX29sZDsKKwkJUEdfUkVfVEhST1coKTsK Kwl9CisJUEdfRU5EX1RSWSgpOworCisJLyogUmVzdG9yZSB0aGUgcHJvZ3Jlc3MgcmVwb3J0aW5n IHN0YXR1cy4gKi8KKwlwZ3N0YXRfcHJvZ3Jlc3NfcmVzdG9yZV9zdGF0ZSgmcHJvZ3Jlc3MpOwor fQorCisvKgorICogQXBwbHkgY2hhbmdlcyB0aGF0IGhhcHBlbmVkIGR1cmluZyB0aGUgaW5pdGlh bCBsb2FkLgorICoKKyAqIFNjYW4ga2V5IGlzIHBhc3NlZCBieSBjYWxsZXIsIHNvIGl0IGRvZXMg bm90IGhhdmUgdG8gYmUgY29uc3RydWN0ZWQKKyAqIG11bHRpcGxlIHRpbWVzLiBLZXkgZW50cmll cyBoYXZlIGFsbCBmaWVsZHMgaW5pdGlhbGl6ZWQsIGV4Y2VwdCBmb3IKKyAqIHNrX2FyZ3VtZW50 LgorICovCitzdGF0aWMgdm9pZAorYXBwbHlfY29uY3VycmVudF9jaGFuZ2VzKENsdXN0ZXJEZWNv ZGluZ1N0YXRlICpkc3RhdGUsIFJlbGF0aW9uIHJlbCwKKwkJCQkJCSBTY2FuS2V5IGtleSwgaW50 IG5rZXlzLCBJbmRleEluc2VydFN0YXRlICppaXN0YXRlKQoreworCVR1cGxlVGFibGVTbG90ICpp bmRleF9zbG90LCAqaWRlbnRfc2xvdDsKKwlIZWFwVHVwbGUJdHVwX29sZCA9IE5VTEw7CisKKwlp ZiAoZHN0YXRlLT5uY2hhbmdlcyA9PSAwKQorCQlyZXR1cm47CisKKwkvKiBUdXBsZVRhYmxlU2xv dCBpcyBuZWVkZWQgdG8gcGFzcyB0aGUgdHVwbGUgdG8gRXhlY0luc2VydEluZGV4VHVwbGVzKCku ICovCisJaW5kZXhfc2xvdCA9IE1ha2VTaW5nbGVUdXBsZVRhYmxlU2xvdChkc3RhdGUtPnR1cGRl c2MsICZUVFNPcHNIZWFwVHVwbGUpOworCWlpc3RhdGUtPmVjb250ZXh0LT5lY3h0X3NjYW50dXBs ZSA9IGluZGV4X3Nsb3Q7CisKKwkvKiBBIHNsb3QgdG8gZmV0Y2ggdHVwbGVzIGZyb20gaWRlbnRp dHkgaW5kZXguICovCisJaWRlbnRfc2xvdCA9IHRhYmxlX3Nsb3RfY3JlYXRlKHJlbCwgTlVMTCk7 CisKKwl3aGlsZSAodHVwbGVzdG9yZV9nZXR0dXBsZXNsb3QoZHN0YXRlLT50c3RvcmUsIHRydWUs IGZhbHNlLAorCQkJCQkJCQkgICBkc3RhdGUtPnRzc2xvdCkpCisJeworCQlib29sCQlzaG91bGRG cmVlOworCQlIZWFwVHVwbGUJdHVwX2NoYW5nZSwKKwkJCQkJdHVwLAorCQkJCQl0dXBfZXhpc3Q7 CisJCWNoYXIJICAgKmNoYW5nZV9yYXc7CisJCUNvbmN1cnJlbnRDaGFuZ2UgKmNoYW5nZTsKKwkJ U25hcHNob3QJc25hcHNob3Q7CisJCWJvb2wJCWlzbnVsbFsxXTsKKwkJRGF0dW0JCXZhbHVlc1sx XTsKKworCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOworCisJCS8qIEdldCB0aGUgY2hhbmdlIGZy b20gdGhlIHNpbmdsZS1jb2x1bW4gdHVwbGUuICovCisJCXR1cF9jaGFuZ2UgPSBFeGVjRmV0Y2hT bG90SGVhcFR1cGxlKGRzdGF0ZS0+dHNzbG90LCBmYWxzZSwgJnNob3VsZEZyZWUpOworCQloZWFw X2RlZm9ybV90dXBsZSh0dXBfY2hhbmdlLCBkc3RhdGUtPnR1cGRlc2NfY2hhbmdlLCB2YWx1ZXMs IGlzbnVsbCk7CisJCUFzc2VydCghaXNudWxsWzBdKTsKKworCQkvKiBUaGlzIGlzIGJ5dGVhLCBi dXQgY2hhciogaXMgZWFzaWVyIHRvIHdvcmsgd2l0aC4gKi8KKwkJY2hhbmdlX3JhdyA9IChjaGFy ICopIERhdHVtR2V0Qnl0ZWFQKHZhbHVlc1swXSk7CisKKwkJY2hhbmdlID0gKENvbmN1cnJlbnRD aGFuZ2UgKikgVkFSREFUQShjaGFuZ2VfcmF3KTsKKworCQkvKiBUUlVOQ0FURSBjaGFuZ2UgY29u dGFpbnMgbm8gdHVwbGUsIHNvIHByb2Nlc3MgaXQgc2VwYXJhdGVseS4gKi8KKwkJaWYgKGNoYW5n ZS0+a2luZCA9PSBDSEFOR0VfVFJVTkNBVEUpCisJCXsKKwkJCS8qCisJCQkgKiBBbGwgdGhlIHRo aW5ncyB0aGF0IEV4ZWN1dGVUcnVuY2F0ZUd1dHMoKSBkb2VzIChzdWNoIGFzIGZpcmluZworCQkJ ICogdHJpZ2dlcnMgb3IgaGFuZGxpbmcgdGhlIERST1BfQ0FTQ0FERSBiZWhhdmlvcikgc2hvdWxk IGhhdmUKKwkJCSAqIHRha2VuIHBsYWNlIG9uIHRoZSBzb3VyY2UgcmVsYXRpb24uIFRodXMgd2Ug b25seSBkbyB0aGUgYWN0dWFsCisJCQkgKiB0cnVuY2F0aW9uIG9mIHRoZSBuZXcgcmVsYXRpb24g KGFuZCBpdHMgaW5kZXhlcykuCisJCQkgKi8KKwkJCWhlYXBfdHJ1bmNhdGVfb25lX3JlbChyZWwp OworCisJCQlwZnJlZSh0dXBfY2hhbmdlKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJ ICogRXh0cmFjdCB0aGUgdHVwbGUgZnJvbSB0aGUgY2hhbmdlLiBUaGUgdHVwbGUgaXMgY29waWVk IGhlcmUgYmVjYXVzZQorCQkgKiBpdCBtaWdodCBiZSBhc3NpZ25lZCB0byAndHVwX29sZCcsIGlu IHdoaWNoIGNhc2UgaXQgbmVlZHMgdG8KKwkJICogc3Vydml2ZSBpbnRvIHRoZSBuZXh0IGl0ZXJh dGlvbi4KKwkJICovCisJCXR1cCA9IGdldF9jaGFuZ2VkX3R1cGxlKGNoYW5nZSk7CisKKwkJaWYg KGNoYW5nZS0+a2luZCA9PSBDSEFOR0VfVVBEQVRFX09MRCkKKwkJeworCQkJQXNzZXJ0KHR1cF9v bGQgPT0gTlVMTCk7CisJCQl0dXBfb2xkID0gdHVwOworCQl9CisJCWVsc2UgaWYgKGNoYW5nZS0+ a2luZCA9PSBDSEFOR0VfSU5TRVJUKQorCQl7CisJCQlBc3NlcnQodHVwX29sZCA9PSBOVUxMKTsK KworCQkJYXBwbHlfY29uY3VycmVudF9pbnNlcnQocmVsLCBjaGFuZ2UsIHR1cCwgaWlzdGF0ZSwg aW5kZXhfc2xvdCk7CisKKwkJCXBmcmVlKHR1cCk7CisJCX0KKwkJZWxzZSBpZiAoY2hhbmdlLT5r aW5kID09IENIQU5HRV9VUERBVEVfTkVXIHx8CisJCQkJIGNoYW5nZS0+a2luZCA9PSBDSEFOR0Vf REVMRVRFKQorCQl7CisJCQlJbmRleFNjYW5EZXNjCWluZF9zY2FuID0gTlVMTDsKKwkJCUhlYXBU dXBsZQl0dXBfa2V5OworCisJCQlpZiAoY2hhbmdlLT5raW5kID09IENIQU5HRV9VUERBVEVfTkVX KQorCQkJeworCQkJCXR1cF9rZXkgPSB0dXBfb2xkICE9IE5VTEwgPyB0dXBfb2xkIDogdHVwOwor CQkJfQorCQkJZWxzZQorCQkJeworCQkJCUFzc2VydCh0dXBfb2xkID09IE5VTEwpOworCQkJCXR1 cF9rZXkgPSB0dXA7CisJCQl9CisKKwkJCS8qCisJCQkgKiBGaW5kIHRoZSB0dXBsZSB0byBiZSB1 cGRhdGVkIG9yIGRlbGV0ZWQuCisJCQkgKgorCQkJICogQXMgdGhlIHRhYmxlIGJlaW5nIENMVVNU RVJlZCBjb25jdXJyZW50bHkgaXMgY29uc2lkZXJlZCBhbgorCQkJICogInVzZXIgY2F0YWxvZyIs IG5ldyBDSUQgaXMgV0FMLWxvZ2dlZCBhbmQgZGVjb2RlZC4gQW5kIHNpbmNlIHdlCisJCQkgKiB1 c2UgdGhlIHNhbWUgWElEIHRoYXQgdGhlIG9yaWdpbmFsIERNTHMgZGlkLCB0aGUgc25hcHNob3Qg dXNlZAorCQkJICogZm9yIHRoZSBsb2dpY2FsIGRlY29kaW5nIChieSBub3cgY29udmVydGVkIHRv IGEgbm9uLWhpc3RvcmljCisJCQkgKiBNVkNDIHNuYXBzaG90KSBzaG91bGQgc2VlIHRoZSB0dXBs ZXMgaW5zZXJ0ZWQgcHJldmlvdXNseSBpbnRvCisJCQkgKiB0aGUgbmV3IGhlYXAgYW5kL29yIHVw ZGF0ZWQgdGhlcmUuCisJCQkgKi8KKwkJCXNuYXBzaG90ID0gY2hhbmdlLT5zbmFwc2hvdDsKKwor CQkJLyoKKwkJCSAqIFNldCB3aGF0IHNob3VsZCBiZSBjb25zaWRlcmVkIGN1cnJlbnQgdHJhbnNh Y3Rpb24gKGFuZAorCQkJICogc3VidHJhbnNhY3Rpb25zKSBkdXJpbmcgdmlzaWJpbGl0eSBjaGVj ay4KKwkJCSAqCisJCQkgKiBOb3RlIHRoYXQgdGhpcyBzbmFwc2hvdCB3YXMgY3JlYXRlZCBmcm9t IGEgaGlzdG9yaWMgc25hcHNob3QKKwkJCSAqIHVzaW5nIFNuYXBCdWlsZE1WQ0NGcm9tSGlzdG9y aWMoKSwgd2hpY2ggZG9lcyBub3QgdG91Y2gKKwkJCSAqICdzdWJ4aXAnLiBUaHVzLCB1bmxpa2Ug aW4gYSByZWd1bGFyIE1WQ0Mgc25hcHNob3QsIHRoZSBhcnJheQorCQkJICogZG9lcyBub3QgY29u dGFpbiAoc3ViKXRyYW5zYWN0aW9ucyBvdGhlciB0aGFuIHRoZSBvbmUgd2hvc2UKKwkJCSAqIGRh dGEgY2hhbmdlcyB3ZSBhcmUgYXBwbHlpbmcuCisJCQkgKi8KKwkJCVNldENsdXN0ZXJDdXJyZW50 WGlkcyhzbmFwc2hvdC0+c3VieGlwLCBzbmFwc2hvdC0+c3VieGNudCk7CisKKwkJCXR1cF9leGlz dCA9IGZpbmRfdGFyZ2V0X3R1cGxlKHJlbCwga2V5LCBua2V5cywgdHVwX2tleSwgc25hcHNob3Qs CisJCQkJCQkJCQkJICBpaXN0YXRlLCBpZGVudF9zbG90LCAmaW5kX3NjYW4pOworCQkJaWYgKHR1 cF9leGlzdCA9PSBOVUxMKQorCQkJCWVsb2coRVJST1IsICJGYWlsZWQgdG8gZmluZCB0YXJnZXQg dHVwbGUiKTsKKworCQkJaWYgKGNoYW5nZS0+a2luZCA9PSBDSEFOR0VfVVBEQVRFX05FVykKKwkJ CQlhcHBseV9jb25jdXJyZW50X3VwZGF0ZShyZWwsIHR1cCwgdHVwX2V4aXN0LCBjaGFuZ2UsIGlp c3RhdGUsCisJCQkJCQkJCQkJaW5kZXhfc2xvdCk7CisJCQllbHNlCisJCQkJYXBwbHlfY29uY3Vy cmVudF9kZWxldGUocmVsLCB0dXBfZXhpc3QsIGNoYW5nZSk7CisKKwkJCVJlc2V0Q2x1c3RlckN1 cnJlbnRYaWRzKCk7CisKKwkJCWlmICh0dXBfb2xkICE9IE5VTEwpCisJCQl7CisJCQkJcGZyZWUo dHVwX29sZCk7CisJCQkJdHVwX29sZCA9IE5VTEw7CisJCQl9CisKKwkJCXBmcmVlKHR1cCk7CisJ CQlpbmRleF9lbmRzY2FuKGluZF9zY2FuKTsKKwkJfQorCQllbHNlCisJCQllbG9nKEVSUk9SLCAi VW5yZWNvZ25pemVkIGtpbmQgb2YgY2hhbmdlOiAlZCIsIGNoYW5nZS0+a2luZCk7CisKKwkJLyog RnJlZSB0aGUgc25hcHNob3QgaWYgdGhpcyBpcyB0aGUgbGFzdCBjaGFuZ2UgdGhhdCBuZWVkZWQg aXQuICovCisJCUFzc2VydChjaGFuZ2UtPnNuYXBzaG90LT5hY3RpdmVfY291bnQgPiAwKTsKKwkJ Y2hhbmdlLT5zbmFwc2hvdC0+YWN0aXZlX2NvdW50LS07CisJCWlmIChjaGFuZ2UtPnNuYXBzaG90 LT5hY3RpdmVfY291bnQgPT0gMCkKKwkJeworCQkJaWYgKGNoYW5nZS0+c25hcHNob3QgPT0gZHN0 YXRlLT5zbmFwc2hvdCkKKwkJCQlkc3RhdGUtPnNuYXBzaG90ID0gTlVMTDsKKwkJCUZyZWVTbmFw c2hvdChjaGFuZ2UtPnNuYXBzaG90KTsKKwkJfQorCisJCS8qIFRUU09wc01pbmltYWxUdXBsZSBo YXMgLmdldF9oZWFwX3R1cGxlPT1OVUxMLiAqLworCQlBc3NlcnQoc2hvdWxkRnJlZSk7CisJCXBm cmVlKHR1cF9jaGFuZ2UpOworCX0KKworCXR1cGxlc3RvcmVfY2xlYXIoZHN0YXRlLT50c3RvcmUp OworCWRzdGF0ZS0+bmNoYW5nZXMgPSAwOworCisJLyogQ2xlYW51cC4gKi8KKwlFeGVjRHJvcFNp bmdsZVR1cGxlVGFibGVTbG90KGluZGV4X3Nsb3QpOworCUV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJs ZVNsb3QoaWRlbnRfc2xvdCk7Cit9CisKK3N0YXRpYyB2b2lkCithcHBseV9jb25jdXJyZW50X2lu c2VydChSZWxhdGlvbiByZWwsIENvbmN1cnJlbnRDaGFuZ2UgKmNoYW5nZSwgSGVhcFR1cGxlIHR1 cCwKKwkJCQkJCUluZGV4SW5zZXJ0U3RhdGUgKmlpc3RhdGUsIFR1cGxlVGFibGVTbG90ICppbmRl eF9zbG90KQoreworCVNuYXBzaG90CXNuYXBzaG90ID0gY2hhbmdlLT5zbmFwc2hvdDsKKwlMaXN0 CSAgICpyZWNoZWNrOworCisJLyoKKwkgKiBGb3IgSU5TRVJULCB0aGUgdmlzaWJpbGl0eSBpbmZv cm1hdGlvbiBpcyBub3QgaW1wb3J0YW50LCBidXQgd2UgdXNlIHRoZQorCSAqIHNuYXBzaG90IHRv IGdldCBDSUQuIEluZGV4IGZ1bmN0aW9ucyBtaWdodCBuZWVkIHRoZSB3aG9sZSBzbmFwc2hvdAor CSAqIGFueXdheS4KKwkgKi8KKwlTZXRDbHVzdGVyQ3VycmVudFhpZHMoc25hcHNob3QtPnN1Ynhp cCwgc25hcHNob3QtPnN1YnhjbnQpOworCisJLyoKKwkgKiBXcml0ZSB0aGUgdHVwbGUgaW50byB0 aGUgbmV3IGhlYXAuCisJICoKKwkgKiBUaGUgc25hcHNob3QgaXMgdGhlIG9uZSB3ZSB1c2VkIHRv IGRlY29kZSB0aGUgaW5zZXJ0ICh0aG91Z2ggY29udmVydGVkCisJICogdG8gIm5vbi1oaXN0b3Jp YyIgTVZDQyBzbmFwc2hvdCksIGkuZS4gdGhlIHNuYXBzaG90J3MgY3VyY2lkIGlzIHRoZQorCSAq IHR1cGxlIENJRCBpbmNyZW1lbnRlZCBieSBvbmUgKGR1ZSB0byB0aGUgIm5ldyBDSUQiIFdBTCBy ZWNvcmQgdGhhdCBnb3QKKwkgKiB3cml0dGVuIGFsb25nIHdpdGggdGhlIElOU0VSVCByZWNvcmQp LiBUaHVzIGlmIHdlIHdhbnQgdG8gdXNlIHRoZQorCSAqIG9yaWdpbmFsIENJRCwgd2UgbmVlZCB0 byBzdWJ0cmFjdCAxIGZyb20gY3VyY2lkLgorCSAqLworCUFzc2VydChzbmFwc2hvdC0+Y3VyY2lk ICE9IEludmFsaWRDb21tYW5kSWQgJiYKKwkJICAgc25hcHNob3QtPmN1cmNpZCA+IEZpcnN0Q29t bWFuZElkKTsKKworCWhlYXBfaW5zZXJ0KHJlbCwgdHVwLCBjaGFuZ2UtPnhpZCwgc25hcHNob3Qt PmN1cmNpZCAtIDEsCisJCQkJSEVBUF9JTlNFUlRfTk9fTE9HSUNBTCwgTlVMTCk7CisKKwkvKgor CSAqIFVwZGF0ZSBpbmRleGVzLgorCSAqCisJICogSW4gY2FzZSBmdW5jdGlvbnMgaW4gdGhlIGlu ZGV4IG5lZWQgdGhlIGFjdGl2ZSBzbmFwc2hvdCBhbmQgY2FsbGVyCisJICogaGFzbid0IHNldCBv bmUuCisJICovCisJUHVzaEFjdGl2ZVNuYXBzaG90KHNuYXBzaG90KTsKKwlFeGVjU3RvcmVIZWFw VHVwbGUodHVwLCBpbmRleF9zbG90LCBmYWxzZSk7CisJcmVjaGVjayA9IEV4ZWNJbnNlcnRJbmRl eFR1cGxlcyhpaXN0YXRlLT5ycmksCisJCQkJCQkJCQlpbmRleF9zbG90LAorCQkJCQkJCQkJaWlz dGF0ZS0+ZXN0YXRlLAorCQkJCQkJCQkJZmFsc2UsCS8qIHVwZGF0ZSAqLworCQkJCQkJCQkJZmFs c2UsCS8qIG5vRHVwRXJyICovCisJCQkJCQkJCQlOVUxMLAkvKiBzcGVjQ29uZmxpY3QgKi8KKwkJ CQkJCQkJCU5JTCwgLyogYXJiaXRlckluZGV4ZXMgKi8KKwkJCQkJCQkJCWZhbHNlCS8qIG9ubHlT dW1tYXJpemluZyAqLworCQkpOworCVBvcEFjdGl2ZVNuYXBzaG90KCk7CisJUmVzZXRDbHVzdGVy Q3VycmVudFhpZHMoKTsKKworCS8qCisJICogSWYgcmVjaGVjayBpcyByZXF1aXJlZCwgaXQgbXVz dCBoYXZlIGJlZW4gcHJlZm9ybWVkIG9uIHRoZSBzb3VyY2UKKwkgKiByZWxhdGlvbiBieSBub3cu IChBbGwgdGhlIGxvZ2ljYWwgY2hhbmdlcyB3ZSBwcm9jZXNzIGhlcmUgYXJlIGFscmVhZHkKKwkg KiBjb21taXR0ZWQuKQorCSAqLworCWxpc3RfZnJlZShyZWNoZWNrKTsKKworCXBnc3RhdF9wcm9n cmVzc19pbmNyX3BhcmFtKFBST0dSRVNTX0NMVVNURVJfSEVBUF9UVVBMRVNfSU5TRVJURUQsIDEp OworfQorCitzdGF0aWMgdm9pZAorYXBwbHlfY29uY3VycmVudF91cGRhdGUoUmVsYXRpb24gcmVs LCBIZWFwVHVwbGUgdHVwLCBIZWFwVHVwbGUgdHVwX3RhcmdldCwKKwkJCQkJCUNvbmN1cnJlbnRD aGFuZ2UgKmNoYW5nZSwgSW5kZXhJbnNlcnRTdGF0ZSAqaWlzdGF0ZSwKKwkJCQkJCVR1cGxlVGFi bGVTbG90ICppbmRleF9zbG90KQoreworCUxpc3QJICAgKnJlY2hlY2s7CisJTG9ja1R1cGxlTW9k ZQlsb2NrbW9kZTsKKwlUVV9VcGRhdGVJbmRleGVzCXVwZGF0ZV9pbmRleGVzOworCUl0ZW1Qb2lu dGVyRGF0YQkJdGlkX29sZF9uZXdfaGVhcDsKKwlUTV9SZXN1bHQJcmVzOworCVNuYXBzaG90IHNu YXBzaG90CT0gY2hhbmdlLT5zbmFwc2hvdDsKKwlUTV9GYWlsdXJlRGF0YSB0bWZkOworCisJLyog TG9jYXRpb24gb2YgdGhlIGV4aXN0aW5nIHR1cGxlIGluIHRoZSBuZXcgaGVhcC4gKi8KKwlJdGVt UG9pbnRlckNvcHkoJnR1cF90YXJnZXQtPnRfc2VsZiwgJnRpZF9vbGRfbmV3X2hlYXApOworCisJ LyoKKwkgKiBXcml0ZSB0aGUgbmV3IHR1cGxlIGludG8gdGhlIG5ldyBoZWFwLiAoJ3R1cCcgZ2V0 cyB0aGUgVElEIGFzc2lnbmVkCisJICogaGVyZS4pCisJICoKKwkgKiBSZWdhcmRpbmcgQ0lELCBz ZWUgdGhlIGNvbW1lbnQgaW4gYXBwbHlfY29uY3VycmVudF9pbnNlcnQoKS4KKwkgKi8KKwlBc3Nl cnQoc25hcHNob3QtPmN1cmNpZCAhPSBJbnZhbGlkQ29tbWFuZElkICYmCisJCSAgIHNuYXBzaG90 LT5jdXJjaWQgPiBGaXJzdENvbW1hbmRJZCk7CisKKwlyZXMgPSBoZWFwX3VwZGF0ZShyZWwsICZ0 aWRfb2xkX25ld19oZWFwLCB0dXAsCisJCQkJCSAgY2hhbmdlLT54aWQsIHNuYXBzaG90LT5jdXJj aWQgLSAxLAorCQkJCQkgIEludmFsaWRTbmFwc2hvdCwKKwkJCQkJICBmYWxzZSwgLyogbm8gd2Fp dCAtIG9ubHkgd2UgYXJlIGRvaW5nIGNoYW5nZXMgKi8KKwkJCQkJICAmdG1mZCwgJmxvY2ttb2Rl LCAmdXBkYXRlX2luZGV4ZXMsCisJCQkJCSAgLyogd2FsX2xvZ2ljYWwgKi8KKwkJCQkJICBmYWxz ZSk7CisJaWYgKHJlcyAhPSBUTV9PaykKKwkJZXJlcG9ydChFUlJPUiwgKGVycm1zZygiZmFpbGVk IHRvIGFwcGx5IGNvbmN1cnJlbnQgVVBEQVRFIikpKTsKKworCUV4ZWNTdG9yZUhlYXBUdXBsZSh0 dXAsIGluZGV4X3Nsb3QsIGZhbHNlKTsKKworCWlmICh1cGRhdGVfaW5kZXhlcyAhPSBUVV9Ob25l KQorCXsKKwkJUHVzaEFjdGl2ZVNuYXBzaG90KHNuYXBzaG90KTsKKwkJcmVjaGVjayA9IEV4ZWNJ bnNlcnRJbmRleFR1cGxlcyhpaXN0YXRlLT5ycmksCisJCQkJCQkJCQkJaW5kZXhfc2xvdCwKKwkJ CQkJCQkJCQlpaXN0YXRlLT5lc3RhdGUsCisJCQkJCQkJCQkJdHJ1ZSwJLyogdXBkYXRlICovCisJ CQkJCQkJCQkJZmFsc2UsCS8qIG5vRHVwRXJyICovCisJCQkJCQkJCQkJTlVMTCwJLyogc3BlY0Nv bmZsaWN0ICovCisJCQkJCQkJCQkJTklMLCAvKiBhcmJpdGVySW5kZXhlcyAqLworCQkJCQkJCQkJ CS8qIG9ubHlTdW1tYXJpemluZyAqLworCQkJCQkJCQkJCXVwZGF0ZV9pbmRleGVzID09IFRVX1N1 bW1hcml6aW5nKTsKKwkJUG9wQWN0aXZlU25hcHNob3QoKTsKKwkJbGlzdF9mcmVlKHJlY2hlY2sp OworCX0KKworCXBnc3RhdF9wcm9ncmVzc19pbmNyX3BhcmFtKFBST0dSRVNTX0NMVVNURVJfSEVB UF9UVVBMRVNfVVBEQVRFRCwgMSk7Cit9CisKK3N0YXRpYyB2b2lkCithcHBseV9jb25jdXJyZW50 X2RlbGV0ZShSZWxhdGlvbiByZWwsIEhlYXBUdXBsZSB0dXBfdGFyZ2V0LAorCQkJCQkJQ29uY3Vy cmVudENoYW5nZSAqY2hhbmdlKQoreworCUl0ZW1Qb2ludGVyRGF0YQkJdGlkX29sZF9uZXdfaGVh cDsKKwlUTV9SZXN1bHQJcmVzOworCVRNX0ZhaWx1cmVEYXRhIHRtZmQ7CisJU25hcHNob3QJc25h cHNob3QgPSBjaGFuZ2UtPnNuYXBzaG90OworCisJLyogUmVnYXJkaW5nIENJRCwgc2VlIHRoZSBj b21tZW50IGluIGFwcGx5X2NvbmN1cnJlbnRfaW5zZXJ0KCkuICovCisJQXNzZXJ0KHNuYXBzaG90 LT5jdXJjaWQgIT0gSW52YWxpZENvbW1hbmRJZCAmJgorCQkgICBzbmFwc2hvdC0+Y3VyY2lkID4g Rmlyc3RDb21tYW5kSWQpOworCisJLyogTG9jYXRpb24gb2YgdGhlIGV4aXN0aW5nIHR1cGxlIGlu IHRoZSBuZXcgaGVhcC4gKi8KKwlJdGVtUG9pbnRlckNvcHkoJnR1cF90YXJnZXQtPnRfc2VsZiwg JnRpZF9vbGRfbmV3X2hlYXApOworCisJcmVzID0gaGVhcF9kZWxldGUocmVsLCAmdGlkX29sZF9u ZXdfaGVhcCwgY2hhbmdlLT54aWQsCisJCQkJCSAgc25hcHNob3QtPmN1cmNpZCAtIDEsIEludmFs aWRTbmFwc2hvdCwgZmFsc2UsCisJCQkJCSAgJnRtZmQsIGZhbHNlLAorCQkJCQkgIC8qIHdhbF9s b2dpY2FsICovCisJCQkJCSAgZmFsc2UpOworCisJaWYgKHJlcyAhPSBUTV9PaykKKwkJZXJlcG9y dChFUlJPUiwgKGVycm1zZygiZmFpbGVkIHRvIGFwcGx5IGNvbmN1cnJlbnQgREVMRVRFIikpKTsK KworCXBnc3RhdF9wcm9ncmVzc19pbmNyX3BhcmFtKFBST0dSRVNTX0NMVVNURVJfSEVBUF9UVVBM RVNfREVMRVRFRCwgMSk7Cit9CisKKy8qCisgKiBGaW5kIHRoZSB0dXBsZSB0byBiZSB1cGRhdGVk IG9yIGRlbGV0ZWQuCisgKgorICogJ2tleScgaXMgYSBwcmUtaW5pdGlhbGl6ZWQgc2NhbiBrZXks IGludG8gd2hpY2ggdGhlIGZ1bmN0aW9uIHdpbGwgcHV0IHRoZQorICoga2V5IHZhbHVlcy4KKyAq CisgKiAndHVwX2tleScgaXMgYSB0dXBsZSBjb250YWluaW5nIHRoZSBrZXkgdmFsdWVzIGZvciB0 aGUgc2Nhbi4KKyAqCisgKiBPbiBleGl0LCcqc2Nhbl9wJyBjb250YWlucyB0aGUgc2NhbiBkZXNj cmlwdG9yIHVzZWQuIFRoZSBjYWxsZXIgbXVzdCBjbG9zZQorICogaXQgd2hlbiBoZSBubyBsb25n ZXIgbmVlZHMgdGhlIHR1cGxlIHJldHVybmVkLgorICovCitzdGF0aWMgSGVhcFR1cGxlCitmaW5k X3RhcmdldF90dXBsZShSZWxhdGlvbiByZWwsIFNjYW5LZXkga2V5LCBpbnQgbmtleXMsIEhlYXBU dXBsZSB0dXBfa2V5LAorCQkJCSAgU25hcHNob3Qgc25hcHNob3QsIEluZGV4SW5zZXJ0U3RhdGUg Kmlpc3RhdGUsCisJCQkJICBUdXBsZVRhYmxlU2xvdCAqaWRlbnRfc2xvdCwgSW5kZXhTY2FuRGVz YyAqc2Nhbl9wKQoreworCUluZGV4U2NhbkRlc2Mgc2NhbjsKKwlGb3JtX3BnX2luZGV4IGlkZW50 X2Zvcm07CisJaW50MnZlY3RvciAqaWRlbnRfaW5ka2V5OworCUhlYXBUdXBsZQlyZXN1bHQgPSBO VUxMOworCisJc2NhbiA9IGluZGV4X2JlZ2luc2NhbihyZWwsIGlpc3RhdGUtPmlkZW50X2luZGV4 LCBzbmFwc2hvdCwKKwkJCQkJCSAgIG5rZXlzLCAwKTsKKwkqc2Nhbl9wID0gc2NhbjsKKwlpbmRl eF9yZXNjYW4oc2Nhbiwga2V5LCBua2V5cywgTlVMTCwgMCk7CisKKwkvKiBJbmZvIG5lZWRlZCB0 byByZXRyaWV2ZSBrZXkgdmFsdWVzIGZyb20gaGVhcCB0dXBsZS4gKi8KKwlpZGVudF9mb3JtID0g aWlzdGF0ZS0+aWRlbnRfaW5kZXgtPnJkX2luZGV4OworCWlkZW50X2luZGtleSA9ICZpZGVudF9m b3JtLT5pbmRrZXk7CisKKwkvKiBVc2UgdGhlIGluY29taW5nIHR1cGxlIHRvIGZpbmFsaXplIHRo ZSBzY2FuIGtleS4gKi8KKwlmb3IgKGludCBpID0gMDsgaSA8IHNjYW4tPm51bWJlck9mS2V5czsg aSsrKQorCXsKKwkJU2NhbktleQkJZW50cnk7CisJCWJvb2wJCWlzbnVsbDsKKwkJaW50MTYJCWF0 dG5vX2hlYXA7CisKKwkJZW50cnkgPSAmc2Nhbi0+a2V5RGF0YVtpXTsKKwkJYXR0bm9faGVhcCA9 IGlkZW50X2luZGtleS0+dmFsdWVzW2ldOworCQllbnRyeS0+c2tfYXJndW1lbnQgPSBoZWFwX2dl dGF0dHIodHVwX2tleSwKKwkJCQkJCQkJCQkgIGF0dG5vX2hlYXAsCisJCQkJCQkJCQkJICByZWwt PnJkX2F0dCwKKwkJCQkJCQkJCQkgICZpc251bGwpOworCQlBc3NlcnQoIWlzbnVsbCk7CisJfQor CWlmIChpbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIGlkZW50 X3Nsb3QpKQorCXsKKwkJYm9vbAkJc2hvdWxkRnJlZTsKKworCQlyZXN1bHQgPSBFeGVjRmV0Y2hT bG90SGVhcFR1cGxlKGlkZW50X3Nsb3QsIGZhbHNlLCAmc2hvdWxkRnJlZSk7CisJCS8qIFRUU09w c0J1ZmZlckhlYXBUdXBsZSBoYXMgLmdldF9oZWFwX3R1cGxlICE9IE5VTEwuICovCisJCUFzc2Vy dCghc2hvdWxkRnJlZSk7CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIERlY29k ZSBhbmQgYXBwbHkgY29uY3VycmVudCBjaGFuZ2VzLgorICoKKyAqIFBhc3MgcmVsX3NyYyBpZmYg aXRzIHJlbHRvYXN0cmVsaWQgaXMgbmVlZGVkLgorICovCitzdGF0aWMgdm9pZAorcHJvY2Vzc19j b25jdXJyZW50X2NoYW5nZXMoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjUHRy IGVuZF9vZl93YWwsCisJCQkJCQkgICBSZWxhdGlvbiByZWxfZHN0LCBSZWxhdGlvbiByZWxfc3Jj LCBTY2FuS2V5IGlkZW50X2tleSwKKwkJCQkJCSAgIGludCBpZGVudF9rZXlfbmVudHJpZXMsIElu ZGV4SW5zZXJ0U3RhdGUgKmlpc3RhdGUpCit7CisJQ2x1c3RlckRlY29kaW5nU3RhdGUgKmRzdGF0 ZTsKKworCXBnc3RhdF9wcm9ncmVzc191cGRhdGVfcGFyYW0oUFJPR1JFU1NfQ0xVU1RFUl9QSEFT RSwKKwkJCQkJCQkJIFBST0dSRVNTX0NMVVNURVJfUEhBU0VfQ0FUQ0hfVVApOworCisJZHN0YXRl ID0gKENsdXN0ZXJEZWNvZGluZ1N0YXRlICopIGN0eC0+b3V0cHV0X3dyaXRlcl9wcml2YXRlOwor CisJY2x1c3Rlcl9kZWNvZGVfY29uY3VycmVudF9jaGFuZ2VzKGN0eCwgZW5kX29mX3dhbCk7CisK KwlpZiAoZHN0YXRlLT5uY2hhbmdlcyA9PSAwKQorCQlyZXR1cm47CisKKwlQR19UUlkoKTsKKwl7 CisJCS8qCisJCSAqIE1ha2Ugc3VyZSB0aGF0IFRPQVNUIHZhbHVlcyBjYW4gZXZlbnR1YWxseSBi ZSBhY2Nlc3NlZCB2aWEgdGhlIG9sZAorCQkgKiByZWxhdGlvbiAtIHNlZSBjb21tZW50IGluIGNv cHlfdGFibGVfZGF0YSgpLgorCQkgKi8KKwkJaWYgKHJlbF9zcmMpCisJCQlyZWxfZHN0LT5yZF90 b2FzdG9pZCA9IHJlbF9zcmMtPnJkX3JlbC0+cmVsdG9hc3RyZWxpZDsKKworCQlhcHBseV9jb25j dXJyZW50X2NoYW5nZXMoZHN0YXRlLCByZWxfZHN0LCBpZGVudF9rZXksCisJCQkJCQkJCSBpZGVu dF9rZXlfbmVudHJpZXMsIGlpc3RhdGUpOworCX0KKwlQR19GSU5BTExZKCk7CisJeworCQlSZXNl dENsdXN0ZXJDdXJyZW50WGlkcygpOworCisJCWlmIChyZWxfc3JjKQorCQkJcmVsX2RzdC0+cmRf dG9hc3RvaWQgPSBJbnZhbGlkT2lkOworCX0KKwlQR19FTkRfVFJZKCk7Cit9CisKK3N0YXRpYyBJ bmRleEluc2VydFN0YXRlICoKK2dldF9pbmRleF9pbnNlcnRfc3RhdGUoUmVsYXRpb24gcmVsYXRp b24sIE9pZCBpZGVudF9pbmRleF9pZCkKK3sKKwlFU3RhdGUJICAgKmVzdGF0ZTsKKwlpbnQJCQlp OworCUluZGV4SW5zZXJ0U3RhdGUgKnJlc3VsdDsKKworCXJlc3VsdCA9IChJbmRleEluc2VydFN0 YXRlICopIHBhbGxvYzAoc2l6ZW9mKEluZGV4SW5zZXJ0U3RhdGUpKTsKKwllc3RhdGUgPSBDcmVh dGVFeGVjdXRvclN0YXRlKCk7CisJcmVzdWx0LT5lY29udGV4dCA9IEdldFBlclR1cGxlRXhwckNv bnRleHQoZXN0YXRlKTsKKworCXJlc3VsdC0+cnJpID0gKFJlc3VsdFJlbEluZm8gKikgcGFsbG9j KHNpemVvZihSZXN1bHRSZWxJbmZvKSk7CisJSW5pdFJlc3VsdFJlbEluZm8ocmVzdWx0LT5ycmks IHJlbGF0aW9uLCAwLCAwLCAwKTsKKwlFeGVjT3BlbkluZGljZXMocmVzdWx0LT5ycmksIGZhbHNl KTsKKworCS8qCisJICogRmluZCB0aGUgcmVsY2FjaGUgZW50cnkgb2YgdGhlIGlkZW50aXR5IGlu ZGV4IHNvIHRoYXQgd2Ugc3BlbmQgbm8gZXh0cmEKKwkgKiBlZmZvcnQgdG8gb3BlbiAvIGNsb3Nl IGl0LgorCSAqLworCWZvciAoaSA9IDA7IGkgPCByZXN1bHQtPnJyaS0+cmlfTnVtSW5kaWNlczsg aSsrKQorCXsKKwkJUmVsYXRpb24JaW5kX3JlbDsKKworCQlpbmRfcmVsID0gcmVzdWx0LT5ycmkt PnJpX0luZGV4UmVsYXRpb25EZXNjc1tpXTsKKwkJaWYgKGluZF9yZWwtPnJkX2lkID09IGlkZW50 X2luZGV4X2lkKQorCQkJcmVzdWx0LT5pZGVudF9pbmRleCA9IGluZF9yZWw7CisJfQorCWlmIChy ZXN1bHQtPmlkZW50X2luZGV4ID09IE5VTEwpCisJCWVsb2coRVJST1IsICJGYWlsZWQgdG8gb3Bl biBpZGVudGl0eSBpbmRleCIpOworCisJLyogT25seSBpbml0aWFsaXplIGZpZWxkcyBuZWVkZWQg YnkgRXhlY0luc2VydEluZGV4VHVwbGVzKCkuICovCisJcmVzdWx0LT5lc3RhdGUgPSBlc3RhdGU7 CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogQnVpbGQgc2NhbiBrZXkgdG8gcHJvY2Vz cyBsb2dpY2FsIGNoYW5nZXMuCisgKi8KK3N0YXRpYyBTY2FuS2V5CitidWlsZF9pZGVudGl0eV9r ZXkoT2lkIGlkZW50X2lkeF9vaWQsIFJlbGF0aW9uIHJlbF9zcmMsIGludCAqbmVudHJpZXMpCit7 CisJUmVsYXRpb24JaWRlbnRfaWR4X3JlbDsKKwlGb3JtX3BnX2luZGV4IGlkZW50X2lkeDsKKwlp bnQJCQluLAorCQkJCWk7CisJU2NhbktleQkJcmVzdWx0OworCisJQXNzZXJ0KE9pZElzVmFsaWQo aWRlbnRfaWR4X29pZCkpOworCWlkZW50X2lkeF9yZWwgPSBpbmRleF9vcGVuKGlkZW50X2lkeF9v aWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJaWRlbnRfaWR4ID0gaWRlbnRfaWR4X3JlbC0+cmRfaW5k ZXg7CisJbiA9IGlkZW50X2lkeC0+aW5kbmF0dHM7CisJcmVzdWx0ID0gKFNjYW5LZXkpIHBhbGxv YyhzaXplb2YoU2NhbktleURhdGEpICogbik7CisJZm9yIChpID0gMDsgaSA8IG47IGkrKykKKwl7 CisJCVNjYW5LZXkJCWVudHJ5OworCQlpbnQxNgkJcmVsYXR0bm87CisJCUZvcm1fcGdfYXR0cmli dXRlIGF0dDsKKwkJT2lkCQkJb3BmYW1pbHksCisJCQkJCW9wY2ludHlwZSwKKwkJCQkJb3BubywK KwkJCQkJb3Bjb2RlOworCisJCWVudHJ5ID0gJnJlc3VsdFtpXTsKKwkJcmVsYXR0bm8gPSBpZGVu dF9pZHgtPmluZGtleS52YWx1ZXNbaV07CisJCWlmIChyZWxhdHRubyA+PSAxKQorCQl7CisJCQlU dXBsZURlc2MJZGVzYzsKKworCQkJZGVzYyA9IHJlbF9zcmMtPnJkX2F0dDsKKwkJCWF0dCA9IFR1 cGxlRGVzY0F0dHIoZGVzYywgcmVsYXR0bm8gLSAxKTsKKwkJfQorCQllbHNlCisJCQllbG9nKEVS Uk9SLCAiVW5leHBlY3RlZCBhdHRyaWJ1dGUgbnVtYmVyICVkIGluIGluZGV4IiwgcmVsYXR0bm8p OworCisJCW9wZmFtaWx5ID0gaWRlbnRfaWR4X3JlbC0+cmRfb3BmYW1pbHlbaV07CisJCW9wY2lu dHlwZSA9IGlkZW50X2lkeF9yZWwtPnJkX29wY2ludHlwZVtpXTsKKwkJb3BubyA9IGdldF9vcGZh bWlseV9tZW1iZXIob3BmYW1pbHksIG9wY2ludHlwZSwgb3BjaW50eXBlLAorCQkJCQkJCQkgICBC VEVxdWFsU3RyYXRlZ3lOdW1iZXIpOworCisJCWlmICghT2lkSXNWYWxpZChvcG5vKSkKKwkJCWVs b2coRVJST1IsICJGYWlsZWQgdG8gZmluZCA9IG9wZXJhdG9yIGZvciB0eXBlICV1Iiwgb3BjaW50 eXBlKTsKKworCQlvcGNvZGUgPSBnZXRfb3Bjb2RlKG9wbm8pOworCQlpZiAoIU9pZElzVmFsaWQo b3Bjb2RlKSkKKwkJCWVsb2coRVJST1IsICJGYWlsZWQgdG8gZmluZCA9IG9wZXJhdG9yIGZvciBv cGVyYXRvciAldSIsIG9wbm8pOworCisJCS8qIEluaXRpYWxpemUgZXZlcnl0aGluZyBidXQgYXJn dW1lbnQuICovCisJCVNjYW5LZXlJbml0KGVudHJ5LAorCQkJCQlpICsgMSwKKwkJCQkJQlRFcXVh bFN0cmF0ZWd5TnVtYmVyLCBvcGNvZGUsCisJCQkJCShEYXR1bSkgTlVMTCk7CisJCWVudHJ5LT5z a19jb2xsYXRpb24gPSBhdHQtPmF0dGNvbGxhdGlvbjsKKwl9CisJaW5kZXhfY2xvc2UoaWRlbnRf aWR4X3JlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCSpuZW50cmllcyA9IG47CisJcmV0dXJuIHJl c3VsdDsKK30KKworc3RhdGljIHZvaWQKK2ZyZWVfaW5kZXhfaW5zZXJ0X3N0YXRlKEluZGV4SW5z ZXJ0U3RhdGUgKmlpc3RhdGUpCit7CisJRXhlY0Nsb3NlSW5kaWNlcyhpaXN0YXRlLT5ycmkpOwor CUZyZWVFeGVjdXRvclN0YXRlKGlpc3RhdGUtPmVzdGF0ZSk7CisJcGZyZWUoaWlzdGF0ZS0+cnJp KTsKKwlwZnJlZShpaXN0YXRlKTsKK30KKworc3RhdGljIHZvaWQKK2NsZWFudXBfbG9naWNhbF9k ZWNvZGluZyhMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgpCit7CisJQ2x1c3RlckRlY29kaW5n U3RhdGUgKmRzdGF0ZTsKKworCWRzdGF0ZSA9IChDbHVzdGVyRGVjb2RpbmdTdGF0ZSAqKSBjdHgt Pm91dHB1dF93cml0ZXJfcHJpdmF0ZTsKKworCUV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNsb3Qo ZHN0YXRlLT50c3Nsb3QpOworCUZyZWVUdXBsZURlc2MoZHN0YXRlLT50dXBkZXNjX2NoYW5nZSk7 CisJRnJlZVR1cGxlRGVzYyhkc3RhdGUtPnR1cGRlc2MpOworCXR1cGxlc3RvcmVfZW5kKGRzdGF0 ZS0+dHN0b3JlKTsKKworCUZyZWVEZWNvZGluZ0NvbnRleHQoY3R4KTsKK30KKworLyoKKyAqIFRo ZSBmaW5hbCBzdGVwcyBvZiByZWJ1aWxkX3JlbGF0aW9uKCkgZm9yIGNvbmN1cnJlbnQgcHJvY2Vz c2luZy4KKyAqCisgKiBPbiBlbnRyeSwgTmV3SGVhcCBpcyBsb2NrZWQgaW4gQWNjZXNzRXhjbHVz aXZlTG9jayBtb2RlLiBPbGRIZWFwIGFuZCBpdHMKKyAqIGNsdXN0ZXJpbmcgaW5kZXggKGlmIG9u ZSBpcyBwYXNzZWQpIGFyZSBzdGlsbCBsb2NrZWQgaW4gYSBtb2RlIHRoYXQgYWxsb3dzCisgKiBj b25jdXJyZW50IGRhdGEgY2hhbmdlcy4gT24gZXhpdCwgYm90aCB0YWJsZXMgYW5kIHRoZWlyIGlu ZGV4ZXMgYXJlIGNsb3NlZCwKKyAqIGJ1dCBsb2NrZWQgaW4gQWNjZXNzRXhjbHVzaXZlTG9jayBt b2RlLgorICovCitzdGF0aWMgdm9pZAorcmVidWlsZF9yZWxhdGlvbl9maW5pc2hfY29uY3VycmVu dChSZWxhdGlvbiBOZXdIZWFwLCBSZWxhdGlvbiBPbGRIZWFwLAorCQkJCQkJCQkgICBSZWxhdGlv biBjbF9pbmRleCwKKwkJCQkJCQkJICAgQ2F0YWxvZ1N0YXRlCSpjYXRfc3RhdGUsCisJCQkJCQkJ CSAgIExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKKwkJCQkJCQkJICAgYm9vbCBzd2FwX3Rv YXN0X2J5X2NvbnRlbnQsCisJCQkJCQkJCSAgIFRyYW5zYWN0aW9uSWQgZnJvemVuWGlkLAorCQkJ CQkJCQkgICBNdWx0aVhhY3RJZCBjdXRvZmZNdWx0aSkKK3sKKwlMT0NLTU9ERQlsbW9kZV9vbGQ7 CisJTGlzdAkqaW5kX29pZHNfbmV3OworCU9pZAkJb2xkX3RhYmxlX29pZCA9IFJlbGF0aW9uR2V0 UmVsaWQoT2xkSGVhcCk7CisJT2lkCQluZXdfdGFibGVfb2lkID0gUmVsYXRpb25HZXRSZWxpZChO ZXdIZWFwKTsKKwlMaXN0CSppbmRfb2lkc19vbGQgPSBSZWxhdGlvbkdldEluZGV4TGlzdChPbGRI ZWFwKTsKKwlMaXN0Q2VsbAkqbGMsICpsYzI7CisJY2hhcgkJcmVscGVyc2lzdGVuY2U7CisJYm9v bAkJaXNfc3lzdGVtX2NhdGFsb2c7CisJT2lkCQlpZGVudF9pZHhfb2xkLCBpZGVudF9pZHhfbmV3 OworCUluZGV4SW5zZXJ0U3RhdGUgKmlpc3RhdGU7CisJU2NhbktleQkJaWRlbnRfa2V5OworCWlu dAkJaWRlbnRfa2V5X25lbnRyaWVzOworCVhMb2dSZWNQdHIJd2FsX2luc2VydF9wdHIsIGVuZF9v Zl93YWw7CisJY2hhcgkJZHVtbXlfcmVjX2RhdGEgPSAnXDAnOworCVJlbFJlb3BlbkluZm8JKnJy aSA9IE5VTEw7CisJaW50CQlucmVsOworCVJlbGF0aW9uCSppbmRfcmVmc19hbGwsICppbmRfcmVm c19wOworCisJLyogTGlrZSBpbiBjbHVzdGVyX3JlbCgpLiAqLworCWxtb2RlX29sZCA9IExPQ0tf Q0xVU1RFUl9DT05DVVJSRU5UOworCUFzc2VydChDaGVja1JlbGF0aW9uTG9ja2VkQnlNZShPbGRI ZWFwLCBsbW9kZV9vbGQsIGZhbHNlKSk7CisJQXNzZXJ0KGNsX2luZGV4ID09IE5VTEwgfHwKKwkJ ICAgQ2hlY2tSZWxhdGlvbkxvY2tlZEJ5TWUoY2xfaW5kZXgsIGxtb2RlX29sZCwgZmFsc2UpKTsK KwkvKiBUaGlzIGlzIGV4cGVjdGVkIGZyb20gdGhlIGNhbGxlci4gKi8KKwlBc3NlcnQoQ2hlY2tS ZWxhdGlvbkxvY2tlZEJ5TWUoTmV3SGVhcCwgQWNjZXNzRXhjbHVzaXZlTG9jaywgZmFsc2UpKTsK KworCWlkZW50X2lkeF9vbGQgPSBSZWxhdGlvbkdldFJlcGxpY2FJbmRleChPbGRIZWFwKTsKKwor CS8qCisJICogVW5saWtlIHRoZSBleGNsdXNpdmUgY2FzZSwgd2UgYnVpbGQgbmV3IGluZGV4ZXMg Zm9yIHRoZSBuZXcgcmVsYXRpb24KKwkgKiByYXRoZXIgdGhhbiBzd2FwcGluZyB0aGUgc3RvcmFn ZSBhbmQgcmVpbmRleGluZyB0aGUgb2xkIHJlbGF0aW9uLiBUaGUKKwkgKiBwb2ludCBpcyB0aGF0 IHRoZSBpbmRleCBidWlsZCBjYW4gdGFrZSBzb21lIHRpbWUsIHNvIHdlIGRvIGl0IGJlZm9yZSB3 ZQorCSAqIGdldCBBY2Nlc3NFeGNsdXNpdmVMb2NrIG9uIHRoZSBvbGQgaGVhcCBhbmQgdGhlcmVm b3JlIHdlIGNhbm5vdCBzd2FwCisJICogdGhlIGhlYXAgc3RvcmFnZSB5ZXQuCisJICoKKwkgKiBp bmRleF9jcmVhdGUoKSB3aWxsIGxvY2sgdGhlIG5ldyBpbmRleGVzIHVzaW5nIEFjY2Vzc0V4Y2x1 c2l2ZUxvY2sKKwkgKiBjcmVhdGlvbiAtIG5vIG5lZWQgdG8gY2hhbmdlIHRoYXQuCisJICovCisJ aW5kX29pZHNfbmV3ID0gYnVpbGRfbmV3X2luZGV4ZXMoTmV3SGVhcCwgT2xkSGVhcCwgaW5kX29p ZHNfb2xkKTsKKworCS8qCisJICogUHJvY2Vzc2luZyBzaG91bGRuJ3Qgc3RhcnQgdy9vIHZhbGlk IGlkZW50aXR5IGluZGV4LgorCSAqLworCUFzc2VydChPaWRJc1ZhbGlkKGlkZW50X2lkeF9vbGQp KTsKKworCS8qIEZpbmQgImlkZW50aXR5IGluZGV4IiBvbiB0aGUgbmV3IHJlbGF0aW9uLiAqLwor CWlkZW50X2lkeF9uZXcgPSBJbnZhbGlkT2lkOworCWZvcmJvdGgobGMsIGluZF9vaWRzX29sZCwg bGMyLCBpbmRfb2lkc19uZXcpCisJeworCQlPaWQJaW5kX29sZCA9IGxmaXJzdF9vaWQobGMpOwor CQlPaWQJaW5kX25ldyA9IGxmaXJzdF9vaWQobGMyKTsKKworCQlpZiAoaWRlbnRfaWR4X29sZCA9 PSBpbmRfb2xkKQorCQl7CisJCQlpZGVudF9pZHhfbmV3ID0gaW5kX25ldzsKKwkJCWJyZWFrOwor CQl9CisJfQorCWlmICghT2lkSXNWYWxpZChpZGVudF9pZHhfbmV3KSkKKwkJLyoKKwkJICogU2hv dWxkIG5vdCBoYXBwZW4sIGdpdmVuIG91ciBsb2NrIG9uIHRoZSBvbGQgcmVsYXRpb24uCisJCSAq LworCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJtc2coIklkZW50aXR5IGluZGV4IG1pc3Npbmcg b24gdGhlIG5ldyByZWxhdGlvbiIpKSk7CisKKwkvKiBFeGVjdXRvciBzdGF0ZSB0byB1cGRhdGUg aW5kZXhlcy4gKi8KKwlpaXN0YXRlID0gZ2V0X2luZGV4X2luc2VydF9zdGF0ZShOZXdIZWFwLCBp ZGVudF9pZHhfbmV3KTsKKworCS8qCisJICogQnVpbGQgc2NhbiBrZXkgdGhhdCB3ZSdsbCB1c2Ug dG8gbG9vayBmb3Igcm93cyB0byBiZSB1cGRhdGVkIC8gZGVsZXRlZAorCSAqIGR1cmluZyBsb2dp Y2FsIGRlY29kaW5nLgorCSAqLworCWlkZW50X2tleSA9IGJ1aWxkX2lkZW50aXR5X2tleShpZGVu dF9pZHhfbmV3LCBPbGRIZWFwLCAmaWRlbnRfa2V5X25lbnRyaWVzKTsKKworCS8qCisJICogRmx1 c2ggYWxsIFdBTCByZWNvcmRzIGluc2VydGVkIHNvIGZhciAocG9zc2libHkgZXhjZXB0IGZvciB0 aGUgbGFzdAorCSAqIGluY29tcGxldGUgcGFnZSwgc2VlIEdldEluc2VydFJlY1B0ciksIHRvIG1p bmltaXplIHRoZSBhbW91bnQgb2YgZGF0YQorCSAqIHdlIG5lZWQgdG8gZmx1c2ggd2hpbGUgaG9s ZGluZyBleGNsdXNpdmUgbG9jayBvbiB0aGUgc291cmNlIHRhYmxlLgorCSAqLworCXdhbF9pbnNl cnRfcHRyID0gR2V0SW5zZXJ0UmVjUHRyKCk7CisJWExvZ0ZsdXNoKHdhbF9pbnNlcnRfcHRyKTsK KwllbmRfb2Zfd2FsID0gR2V0Rmx1c2hSZWNQdHIoTlVMTCk7CisKKwkvKgorCSAqIEFwcGx5IGNv bmN1cnJlbnQgY2hhbmdlcyBmaXJzdCB0aW1lLCB0byBtaW5pbWl6ZSB0aGUgdGltZSB3ZSBuZWVk IHRvCisJICogaG9sZCBBY2Nlc3NFeGNsdXNpdmVMb2NrLiAoUXVpdGUgc29tZSBhbW91bnQgb2Yg V0FMIGNvdWxkIGhhdmUgYmVlbgorCSAqIHdyaXR0ZW4gZHVyaW5nIHRoZSBkYXRhIGNvcHlpbmcg YW5kIGluZGV4IGNyZWF0aW9uLikKKwkgKi8KKwlwcm9jZXNzX2NvbmN1cnJlbnRfY2hhbmdlcyhj dHgsIGVuZF9vZl93YWwsIE5ld0hlYXAsCisJCQkJCQkJICAgc3dhcF90b2FzdF9ieV9jb250ZW50 ID8gT2xkSGVhcCA6IE5VTEwsCisJCQkJCQkJICAgaWRlbnRfa2V5LCBpZGVudF9rZXlfbmVudHJp ZXMsIGlpc3RhdGUpOworCisJLyoKKwkgKiBSZWxlYXNlIHRoZSBsb2NrcyB0aGF0IGFsbG93ZWQg Y29uY3VycmVudCBkYXRhIGNoYW5nZXMsIGluIG9yZGVyIHRvCisJICogYWNxdWlyZSB0aGUgQWNj ZXNzRXhjbHVzaXZlTG9jay4KKwkgKi8KKwlucmVsID0gMDsKKwkvKgorCSAqIFdlIHVubG9jayB0 aGUgb2xkIHJlbGF0aW9uIChhbmQgaXRzIGNsdXN0ZXJpbmcgaW5kZXgpLCBidXQgdGhlbiB3ZSB3 aWxsCisJICogbG9jayB0aGUgcmVsYXRpb24gYW5kICphbGwqIGl0cyBpbmRleGVzIGJlY2F1c2Ug d2Ugd2FudCB0byBzd2FwIHRoZWlyCisJICogc3RvcmFnZS4KKwkgKgorCSAqIChOZXdIZWFwIGlz IGFscmVhZHkgbG9ja2VkLCBhcyB3ZWxsIGFzIGl0cyBpbmRleGVzLikKKwkgKi8KKwlycmkgPSBw YWxsb2NfYXJyYXkoUmVsUmVvcGVuSW5mbywgMSArIGxpc3RfbGVuZ3RoKGluZF9vaWRzX29sZCkp OworCWluaXRfcmVsX3Jlb3Blbl9pbmZvKCZycmlbbnJlbCsrXSwgJk9sZEhlYXAsIEludmFsaWRP aWQsCisJCQkJCQkgTE9DS19DTFVTVEVSX0NPTkNVUlJFTlQsIEFjY2Vzc0V4Y2x1c2l2ZUxvY2sp OworCS8qIFJlZmVyZW5jZXMgdG8gdGhlIHJlLW9wZW5lZCBpbmRleGVzIHdpbGwgYmUgc3RvcmVk IGluIHRoaXMgYXJyYXkuICovCisJaW5kX3JlZnNfYWxsID0gcGFsbG9jX2FycmF5KFJlbGF0aW9u LCBsaXN0X2xlbmd0aChpbmRfb2lkc19vbGQpKTsKKwlpbmRfcmVmc19wID0gaW5kX3JlZnNfYWxs OworCS8qIFRoZSBjbHVzdGVyaW5nIGluZGV4IGlzIGEgc3BlY2lhbCBjYXNlLiAqLworCWlmIChj bF9pbmRleCkKKwl7CisJCSppbmRfcmVmc19wID0gY2xfaW5kZXg7CisJCWluaXRfcmVsX3Jlb3Bl bl9pbmZvKCZycmlbbnJlbF0sIGluZF9yZWZzX3AsIEludmFsaWRPaWQsCisJCQkJCQkJIExPQ0tf Q0xVU1RFUl9DT05DVVJSRU5ULCBBY2Nlc3NFeGNsdXNpdmVMb2NrKTsKKwkJbnJlbCsrOworCQlp bmRfcmVmc19wKys7CisJfQorCS8qCisJICogSW5pdGlhbGl6ZSBhbHNvIHRoZSBlbnRyaWVzIGZv ciB0aGUgb3RoZXIgaW5kZXhlcyAoY3VycmVudGx5IHVubG9ja2VkKQorCSAqIGJlY2F1c2Ugd2Ug d2lsbCBoYXZlIHRvIGxvY2sgdGhlbS4KKwkgKi8KKwlmb3JlYWNoKGxjLCBpbmRfb2lkc19vbGQp CisJeworCQlPaWQJCWluZF9vaWQ7CisKKwkJaW5kX29pZCA9IGxmaXJzdF9vaWQobGMpOworCQkv KiBDbHVzdGVyaW5nIGluZGV4IGlzIGFscmVhZHkgaW4gdGhlIGFycmF5LCBvciB0aGVyZSBpcyBu b25lLiAqLworCQlpZiAoY2xfaW5kZXggJiYgUmVsYXRpb25HZXRSZWxpZChjbF9pbmRleCkgPT0g aW5kX29pZCkKKwkJCWNvbnRpbnVlOworCisJCUFzc2VydChucmVsIDwgKDEgKyBsaXN0X2xlbmd0 aChpbmRfb2lkc19vbGQpKSk7CisKKwkJKmluZF9yZWZzX3AgPSBOVUxMOworCQlpbml0X3JlbF9y ZW9wZW5faW5mbygmcnJpW25yZWxdLAorCQkJCQkJCSAvKgorCQkJCQkJCSAgKiBJbiB0aGlzIHNw ZWNpYWwgY2FzZSB3ZSBkbyBub3QgaGF2ZSB0aGUKKwkJCQkJCQkgICogcmVsY2FjaGUgcmVmZXJl bmNlLCB1c2UgT0lEIGluc3RlYWQuCisJCQkJCQkJICAqLworCQkJCQkJCSBpbmRfcmVmc19wLAor CQkJCQkJCSBpbmRfb2lkLAorCQkJCQkJCSBOb0xvY2ssIC8qIE5vdGhpbmcgdG8gdW5sb2NrLiAq LworCQkJCQkJCSBBY2Nlc3NFeGNsdXNpdmVMb2NrKTsKKworCQlucmVsKys7CisJCWluZF9yZWZz X3ArKzsKKwl9CisJLyogUGVyZm9ybSB0aGUgYWN0dWFsIHVubG9ja2luZyBhbmQgcmUtbG9ja2lu Zy4gKi8KKwl1bmxvY2tfYW5kX2Nsb3NlX3JlbGF0aW9ucyhycmksIG5yZWwpOworCXJlb3Blbl9y ZWxhdGlvbnMocnJpLCBucmVsKTsKKworCS8qCisJICogSW4gYWRkaXRpb24sIGxvY2sgdGhlIE9s ZEhlYXAncyBUT0FTVCByZWxhdGlvbiB0aGF0IHdlIHNraXBwZWQgZm9yIHRoZQorCSAqIENPTkNV UlJFTlRMWSBvcHRpb24gaW4gY29weV90YWJsZV9kYXRhKCkuIFRoaXMgbG9jayB3aWxsIGJlIG5l ZWRlZCB0bworCSAqIHN3YXAgdGhlIHJlbGF0aW9uIGZpbGVzLgorCSAqLworCWlmIChPaWRJc1Zh bGlkKE9sZEhlYXAtPnJkX3JlbC0+cmVsdG9hc3RyZWxpZCkpCisJCUxvY2tSZWxhdGlvbk9pZChP bGRIZWFwLT5yZF9yZWwtPnJlbHRvYXN0cmVsaWQsIEFjY2Vzc0V4Y2x1c2l2ZUxvY2spOworCisJ LyoKKwkgKiBDaGVjayBpZiB0aGUgbmV3IGluZGV4ZXMgbWF0Y2ggdGhlIG9sZCBvbmVzLCBpLmUu IG5vIGNoYW5nZXMgb2NjdXJyZWQKKwkgKiB3aGlsZSBPbGRIZWFwIHdhcyB1bmxvY2tlZC4KKwkg KgorCSAqIFhYWCBJdCdzIHByb2JhYmx5IG5vdCBuZWNlc3NhcnkgdG8gY2hlY2sgdGhlIHJlbGF0 aW9uIHR1cGxlIGRlc2NyaXB0b3IKKwkgKiBoZXJlIGJlY2F1c2UgdGhlIGxvZ2ljYWwgZGVjb2Rp bmcgd2FzIGFscmVhZHkgYWN0aXZlIHdoZW4gd2UgcmVsZWFzZWQKKwkgKiB0aGUgbG9jaywgYW5k IHRodXMgdGhlIGNvcnJlc3BvbmRpbmcgZGF0YSBjaGFuZ2VzIHdvbid0IGJlIGxvc3QuCisJICog SG93ZXZlciBwcm9jZXNzaW5nIG9mIHRob3NlIGNoYW5nZXMgbWlnaHQgdGFrZSBhIGxvdCBvZiB0 aW1lLgorCSAqLworCWNoZWNrX2NhdGFsb2dfY2hhbmdlcyhPbGRIZWFwLCBjYXRfc3RhdGUpOwor CisJLyoKKwkgKiBUdXBsZXMgYW5kIHBhZ2VzIG9mIHRoZSBvbGQgaGVhcCB3aWxsIGJlIGdvbmUs IGJ1dCB0aGUgaGVhcCB3aWxsIHN0YXkuCisJICovCisJVHJhbnNmZXJQcmVkaWNhdGVMb2Nrc1Rv SGVhcFJlbGF0aW9uKE9sZEhlYXApOworCS8qIFRoZSBzYW1lIGZvciBpbmRleGVzLiAqLworCWZv ciAoaW50IGkgPSAwOyBpIDwgKG5yZWwgLSAxKTsgaSsrKQorCXsKKwkJUmVsYXRpb24JaW5kZXgg PSBpbmRfcmVmc19hbGxbaV07CisKKwkJVHJhbnNmZXJQcmVkaWNhdGVMb2Nrc1RvSGVhcFJlbGF0 aW9uKGluZGV4KTsKKworCQkvKgorCQkgKiBSZWZlcmVuY2VzIHRvIGluZGV4ZXMgb24gdGhlIG9s ZCByZWxhdGlvbiBhcmUgbm90IG5lZWRlZCBhbnltb3JlLAorCQkgKiBob3dldmVyIGxvY2tzIHN0 YXkgdGlsbCB0aGUgZW5kIG9mIHRoZSB0cmFuc2FjdGlvbi4KKwkJICovCisJCWluZGV4X2Nsb3Nl KGluZGV4LCBOb0xvY2spOworCX0KKwlwZnJlZShpbmRfcmVmc19hbGwpOworCisJLyoKKwkgKiBG bHVzaCBhbnl0aGluZyB3ZSBzZWUgaW4gV0FMLCB0byBtYWtlIHN1cmUgdGhhdCBhbGwgY2hhbmdl cyBjb21taXR0ZWQKKwkgKiB3aGlsZSB3ZSB3ZXJlIHdhaXRpbmcgZm9yIHRoZSBleGNsdXNpdmUg bG9jayBhcmUgYXZhaWxhYmxlIGZvcgorCSAqIGRlY29kaW5nLiBUaGlzIHNob3VsZCBub3QgYmUg bmVjZXNzYXJ5IGlmIGFsbCBiYWNrZW5kcyBoYWQKKwkgKiBzeW5jaHJvbm91c19jb21taXQgc2V0 LCBidXQgd2UgY2FuJ3QgcmVseSBvbiB0aGlzIHNldHRpbmcuCisJICoKKwkgKiBVbmZvcnR1bmF0 ZWx5LCBHZXRJbnNlcnRSZWNQdHIoKSBtYXkgbGFnIGJlaGluZCB0aGUgYWN0dWFsIGluc2VydAor CSAqIHBvc2l0aW9uLCBhbmQgR2V0TGFzdEltcG9ydGFudFJlY1B0cigpIHBvaW50cyBhdCB0aGUg c3RhcnQgb2YgdGhlIGxhc3QKKwkgKiByZWNvcmQgcmF0aGVyIHRoYW4gYXQgdGhlIGVuZC4gVGh1 cyB0aGUgc2ltcGxlc3Qgd2F5IHRvIGRldGVybWluZSB0aGUKKwkgKiBpbnNlcnQgcG9zaXRpb24g aXMgdG8gaW5zZXJ0IGEgZHVtbXkgcmVjb3JkIGFuZCB1c2UgaXRzIExTTi4KKwkgKgorCSAqIFhY WCBDb25zaWRlciB1c2luZyBHZXRMYXN0SW1wb3J0YW50UmVjUHRyKCkgYW5kIGFkZGluZyB0aGUg c2l6ZSBvZiB0aGUKKwkgKiBsYXN0IHJlY29yZCAocGx1cyB0aGUgdG90YWwgc2l6ZSBvZiBhbGwg dGhlIHBhZ2UgaGVhZGVycyB0aGUgcmVjb3JkCisJICogc3BhbnMpPworCSAqLworCVhMb2dCZWdp bkluc2VydCgpOworCVhMb2dSZWdpc3RlckRhdGEoJmR1bW15X3JlY19kYXRhLCAxKTsKKwl3YWxf aW5zZXJ0X3B0ciA9IFhMb2dJbnNlcnQoUk1fWExPR19JRCwgWExPR19OT09QKTsKKwlYTG9nRmx1 c2god2FsX2luc2VydF9wdHIpOworCWVuZF9vZl93YWwgPSBHZXRGbHVzaFJlY1B0cihOVUxMKTsK KworCS8qIEFwcGx5IHRoZSBjb25jdXJyZW50IGNoYW5nZXMgYWdhaW4uICovCisJcHJvY2Vzc19j b25jdXJyZW50X2NoYW5nZXMoY3R4LCBlbmRfb2Zfd2FsLCBOZXdIZWFwLAorCQkJCQkJCSAgIHN3 YXBfdG9hc3RfYnlfY29udGVudCA/IE9sZEhlYXAgOiBOVUxMLAorCQkJCQkJCSAgIGlkZW50X2tl eSwgaWRlbnRfa2V5X25lbnRyaWVzLCBpaXN0YXRlKTsKKworCS8qIFJlbWVtYmVyIGluZm8gYWJv dXQgcmVsIGJlZm9yZSBjbG9zaW5nIE9sZEhlYXAgKi8KKwlyZWxwZXJzaXN0ZW5jZSA9IE9sZEhl YXAtPnJkX3JlbC0+cmVscGVyc2lzdGVuY2U7CisJaXNfc3lzdGVtX2NhdGFsb2cgPSBJc1N5c3Rl bVJlbGF0aW9uKE9sZEhlYXApOworCisJcGdzdGF0X3Byb2dyZXNzX3VwZGF0ZV9wYXJhbShQUk9H UkVTU19DTFVTVEVSX1BIQVNFLAorCQkJCQkJCQkgUFJPR1JFU1NfQ0xVU1RFUl9QSEFTRV9TV0FQ X1JFTF9GSUxFUyk7CisKKwlmb3Jib3RoKGxjLCBpbmRfb2lkc19vbGQsIGxjMiwgaW5kX29pZHNf bmV3KQorCXsKKwkJT2lkCWluZF9vbGQgPSBsZmlyc3Rfb2lkKGxjKTsKKwkJT2lkCWluZF9uZXcg PSBsZmlyc3Rfb2lkKGxjMik7CisJCU9pZAkJCW1hcHBlZF90YWJsZXNbNF07CisKKwkJLyogWmVy byBvdXQgcG9zc2libGUgcmVzdWx0cyBmcm9tIHN3YXBwZWRfcmVsYXRpb25fZmlsZXMgKi8KKwkJ bWVtc2V0KG1hcHBlZF90YWJsZXMsIDAsIHNpemVvZihtYXBwZWRfdGFibGVzKSk7CisKKwkJc3dh cF9yZWxhdGlvbl9maWxlcyhpbmRfb2xkLCBpbmRfbmV3LAorCQkJCQkJCShvbGRfdGFibGVfb2lk ID09IFJlbGF0aW9uUmVsYXRpb25JZCksCisJCQkJCQkJc3dhcF90b2FzdF9ieV9jb250ZW50LAor CQkJCQkJCXRydWUsCisJCQkJCQkJSW52YWxpZFRyYW5zYWN0aW9uSWQsCisJCQkJCQkJSW52YWxp ZE11bHRpWGFjdElkLAorCQkJCQkJCW1hcHBlZF90YWJsZXMpOworCisjaWZkZWYgVVNFX0FTU0VS VF9DSEVDS0lORworCQkvKgorCQkgKiBDb25jdXJyZW50IHByb2Nlc3NpbmcgaXMgbm90IHN1cHBv cnRlZCBmb3Igc3lzdGVtIHJlbGF0aW9ucywgc28KKwkJICogdGhlcmUgc2hvdWxkIGJlIG5vIG1h cHBlZCB0YWJsZXMuCisJCSAqLworCQlmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykKKwkJCUFz c2VydChtYXBwZWRfdGFibGVzW2ldID09IDApOworI2VuZGlmCisJfQorCisJLyogVGhlIG5ldyBp bmRleGVzIG11c3QgYmUgdmlzaWJsZSBmb3IgZGVsZXRpb24uICovCisJQ29tbWFuZENvdW50ZXJJ bmNyZW1lbnQoKTsKKworCS8qIENsb3NlIHRoZSBvbGQgaGVhcCBidXQga2VlcCBsb2NrIHVudGls IHRyYW5zYWN0aW9uIGNvbW1pdC4gKi8KKwl0YWJsZV9jbG9zZShPbGRIZWFwLCBOb0xvY2spOwor CS8qIENsb3NlIHRoZSBuZXcgaGVhcC4gKFdlIGRpZG4ndCBoYXZlIHRvIG9wZW4gaXRzIGluZGV4 ZXMpLiAqLworCXRhYmxlX2Nsb3NlKE5ld0hlYXAsIE5vTG9jayk7CisKKwkvKiBDbGVhbnVwIHdo YXQgd2UgZG9uJ3QgbmVlZCBhbnltb3JlLiAoQW5kIGNsb3NlIHRoZSBpZGVudGl0eSBpbmRleC4p ICovCisJcGZyZWUoaWRlbnRfa2V5KTsKKwlmcmVlX2luZGV4X2luc2VydF9zdGF0ZShpaXN0YXRl KTsKKworCS8qCisJICogU3dhcCB0aGUgcmVsYXRpb25zIGFuZCB0aGVpciBUT0FTVCByZWxhdGlv bnMgYW5kIFRPQVNUIGluZGV4ZXMuIFRoaXMKKwkgKiBhbHNvIGRyb3BzIHRoZSBuZXcgcmVsYXRp b24gYW5kIGl0cyBpbmRleGVzLgorCSAqCisJICogKFN5c3RlbSBjYXRhbG9ncyBhcmUgY3VycmVu dGx5IG5vdCBzdXBwb3J0ZWQuKQorCSAqLworCUFzc2VydCghaXNfc3lzdGVtX2NhdGFsb2cpOwor CWZpbmlzaF9oZWFwX3N3YXAob2xkX3RhYmxlX29pZCwgbmV3X3RhYmxlX29pZCwKKwkJCQkJIGlz X3N5c3RlbV9jYXRhbG9nLAorCQkJCQkgc3dhcF90b2FzdF9ieV9jb250ZW50LAorCQkJCQkgZmFs c2UsIHRydWUsIGZhbHNlLAorCQkJCQkgZnJvemVuWGlkLCBjdXRvZmZNdWx0aSwKKwkJCQkJIHJl bHBlcnNpc3RlbmNlKTsKKworCXBmcmVlKHJyaSk7Cit9CisKKy8qCisgKiBCdWlsZCBpbmRleGVz IG9uIE5ld0hlYXAgYWNjb3JkaW5nIHRvIHRob3NlIG9uIE9sZEhlYXAuCisgKgorICogT2xkSW5k ZXhlcyBpcyB0aGUgbGlzdCBvZiBpbmRleCBPSURzIG9uIE9sZEhlYXAuCisgKgorICogQSBsaXN0 IG9mIE9JRHMgb2YgdGhlIGNvcnJlc3BvbmRpbmcgaW5kZXhlcyBjcmVhdGVkIG9uIE5ld0hlYXAg aXMKKyAqIHJldHVybmVkLiBUaGUgb3JkZXIgb2YgaXRlbXMgZG9lcyBtYXRjaCwgc28gd2UgY2Fu IHVzZSB0aGVzZSBhcnJheXMgdG8gc3dhcAorICogaW5kZXggc3RvcmFnZS4KKyAqLworc3RhdGlj IExpc3QgKgorYnVpbGRfbmV3X2luZGV4ZXMoUmVsYXRpb24gTmV3SGVhcCwgUmVsYXRpb24gT2xk SGVhcCwgTGlzdCAqT2xkSW5kZXhlcykKK3sKKwlTdHJpbmdJbmZvCWluZF9uYW1lOworCUxpc3RD ZWxsCSpsYzsKKwlMaXN0CSAgICpyZXN1bHQgPSBOSUw7CisKKwlwZ3N0YXRfcHJvZ3Jlc3NfdXBk YXRlX3BhcmFtKFBST0dSRVNTX0NMVVNURVJfUEhBU0UsCisJCQkJCQkJCSBQUk9HUkVTU19DTFVT VEVSX1BIQVNFX1JFQlVJTERfSU5ERVgpOworCisJaW5kX25hbWUgPSBtYWtlU3RyaW5nSW5mbygp OworCisJZm9yZWFjaChsYywgT2xkSW5kZXhlcykKKwl7CisJCU9pZAkJCWluZF9vaWQsCisJCQkJ CWluZF9vaWRfbmV3LAorCQkJCQl0YnNwX29pZDsKKwkJUmVsYXRpb24JaW5kOworCQlJbmRleElu Zm8gICppbmRfaW5mbzsKKwkJaW50CQkJaSwKKwkJCQkJaGVhcF9jb2xfaWQ7CisJCUxpc3QJICAg KmNvbG5hbWVzOworCQlpbnQxNgkJaW5kbmF0dHM7CisJCU9pZAkJICAgKmNvbGxhdGlvbnMsCisJ CQkJICAgKm9wY2xhc3NlczsKKwkJSGVhcFR1cGxlCXR1cDsKKwkJYm9vbAkJaXNudWxsOworCQlE YXR1bQkJZDsKKwkJb2lkdmVjdG9yICAqb2lkdmVjOworCQlpbnQydmVjdG9yICppbnQydmVjOwor CQlzaXplX3QJCW9pZF9hcnJfc2l6ZTsKKwkJc2l6ZV90CQlpbnQyX2Fycl9zaXplOworCQlpbnQx NgkgICAqaW5kb3B0aW9uczsKKwkJdGV4dAkgICAqcmVsb3B0aW9ucyA9IE5VTEw7CisJCWJpdHMx NgkJZmxhZ3M7CisJCURhdHVtCQkqb3BjbGFzc09wdGlvbnM7CisJCU51bGxhYmxlRGF0dW0gKnN0 YXR0YXJnZXRzOworCisJCWluZF9vaWQgPSBsZmlyc3Rfb2lkKGxjKTsKKwkJaW5kID0gaW5kZXhf b3BlbihpbmRfb2lkLCBBY2Nlc3NTaGFyZUxvY2spOworCQlpbmRfaW5mbyA9IEJ1aWxkSW5kZXhJ bmZvKGluZCk7CisKKwkJdGJzcF9vaWQgPSBpbmQtPnJkX3JlbC0+cmVsdGFibGVzcGFjZTsKKwkJ LyoKKwkJICogSW5kZXggbmFtZSByZWFsbHkgZG9lc24ndCBtYXR0ZXIsIHdlJ2xsIGV2ZW50dWFs bHkgdXNlIG9ubHkgdGhlaXIKKwkJICogc3RvcmFnZS4gSnVzdCBtYWtlIHRoZW0gdW5pcXVlIHdp dGhpbiB0aGUgdGFibGUuCisJCSAqLworCQlyZXNldFN0cmluZ0luZm8oaW5kX25hbWUpOworCQlh cHBlbmRTdHJpbmdJbmZvKGluZF9uYW1lLCAiaW5kXyVkIiwKKwkJCQkJCSBsaXN0X2NlbGxfbnVt YmVyKE9sZEluZGV4ZXMsIGxjKSk7CisKKwkJZmxhZ3MgPSAwOworCQlpZiAoaW5kLT5yZF9pbmRl eC0+aW5kaXNwcmltYXJ5KQorCQkJZmxhZ3MgfD0gSU5ERVhfQ1JFQVRFX0lTX1BSSU1BUlk7CisK KwkJY29sbmFtZXMgPSBOSUw7CisJCWluZG5hdHRzID0gaW5kLT5yZF9pbmRleC0+aW5kbmF0dHM7 CisJCW9pZF9hcnJfc2l6ZSA9IHNpemVvZihPaWQpICogaW5kbmF0dHM7CisJCWludDJfYXJyX3Np emUgPSBzaXplb2YoaW50MTYpICogaW5kbmF0dHM7CisKKwkJY29sbGF0aW9ucyA9IChPaWQgKikg cGFsbG9jKG9pZF9hcnJfc2l6ZSk7CisJCWZvciAoaSA9IDA7IGkgPCBpbmRuYXR0czsgaSsrKQor CQl7CisJCQljaGFyCSAgICpjb2xuYW1lOworCisJCQloZWFwX2NvbF9pZCA9IGluZC0+cmRfaW5k ZXgtPmluZGtleS52YWx1ZXNbaV07CisJCQlpZiAoaGVhcF9jb2xfaWQgPiAwKQorCQkJeworCQkJ CUZvcm1fcGdfYXR0cmlidXRlIGF0dDsKKworCQkJCS8qIE5vcm1hbCBhdHRyaWJ1dGUuICovCisJ CQkJYXR0ID0gVHVwbGVEZXNjQXR0cihPbGRIZWFwLT5yZF9hdHQsIGhlYXBfY29sX2lkIC0gMSk7 CisJCQkJY29sbmFtZSA9IHBzdHJkdXAoTmFtZVN0cihhdHQtPmF0dG5hbWUpKTsKKwkJCQljb2xs YXRpb25zW2ldID0gYXR0LT5hdHRjb2xsYXRpb247CisJCQl9CisJCQllbHNlIGlmIChoZWFwX2Nv bF9pZCA9PSAwKQorCQkJeworCQkJCUhlYXBUdXBsZQl0dXBsZTsKKwkJCQlGb3JtX3BnX2F0dHJp YnV0ZSBhdHQ7CisKKwkJCQkvKgorCQkJCSAqIEV4cHJlc3Npb24gY29sdW1uIGlzIG5vdCBwcmVz ZW50IGluIHJlbGNhY2hlLiBXaGF0IHdlIG5lZWQKKwkJCQkgKiBoZXJlIGlzIGFuIGF0dHJpYnV0 ZSBvZiB0aGUgKmluZGV4KiByZWxhdGlvbi4KKwkJCQkgKi8KKwkJCQl0dXBsZSA9IFNlYXJjaFN5 c0NhY2hlMihBVFROVU0sCisJCQkJCQkJCQkJT2JqZWN0SWRHZXREYXR1bShpbmRfb2lkKSwKKwkJ CQkJCQkJCQlJbnQxNkdldERhdHVtKGkgKyAxKSk7CisJCQkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlk KHR1cGxlKSkKKwkJCQkJZWxvZyhFUlJPUiwKKwkJCQkJCSAiY2FjaGUgbG9va3VwIGZhaWxlZCBm b3IgYXR0cmlidXRlICVkIG9mIHJlbGF0aW9uICV1IiwKKwkJCQkJCSBpICsgMSwgaW5kX29pZCk7 CisJCQkJYXR0ID0gKEZvcm1fcGdfYXR0cmlidXRlKSBHRVRTVFJVQ1QodHVwbGUpOworCQkJCWNv bG5hbWUgPSBwc3RyZHVwKE5hbWVTdHIoYXR0LT5hdHRuYW1lKSk7CisJCQkJY29sbGF0aW9uc1tp XSA9IGF0dC0+YXR0Y29sbGF0aW9uOworCQkJCVJlbGVhc2VTeXNDYWNoZSh0dXBsZSk7CisJCQl9 CisJCQllbHNlCisJCQkJZWxvZyhFUlJPUiwgIlVuZXhwZWN0ZWQgY29sdW1uIG51bWJlcjogJWQi LAorCQkJCQkgaGVhcF9jb2xfaWQpOworCisJCQljb2xuYW1lcyA9IGxhcHBlbmQoY29sbmFtZXMs IGNvbG5hbWUpOworCQl9CisKKwkJLyoKKwkJICogU3BlY2lhbCBlZmZvcnQgbmVlZGVkIGZvciB2 YXJpYWJsZSBsZW5ndGggYXR0cmlidXRlcyBvZgorCQkgKiBGb3JtX3BnX2luZGV4LgorCQkgKi8K KwkJdHVwID0gU2VhcmNoU3lzQ2FjaGUxKElOREVYUkVMSUQsIE9iamVjdElkR2V0RGF0dW0oaW5k X29pZCkpOworCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHVwKSkKKwkJCWVsb2coRVJST1IsICJj YWNoZSBsb29rdXAgZmFpbGVkIGZvciBpbmRleCAldSIsIGluZF9vaWQpOworCQlkID0gU3lzQ2Fj aGVHZXRBdHRyKElOREVYUkVMSUQsIHR1cCwgQW51bV9wZ19pbmRleF9pbmRjbGFzcywgJmlzbnVs bCk7CisJCUFzc2VydCghaXNudWxsKTsKKwkJb2lkdmVjID0gKG9pZHZlY3RvciAqKSBEYXR1bUdl dFBvaW50ZXIoZCk7CisJCW9wY2xhc3NlcyA9IChPaWQgKikgcGFsbG9jKG9pZF9hcnJfc2l6ZSk7 CisJCW1lbWNweShvcGNsYXNzZXMsIG9pZHZlYy0+dmFsdWVzLCBvaWRfYXJyX3NpemUpOworCisJ CWQgPSBTeXNDYWNoZUdldEF0dHIoSU5ERVhSRUxJRCwgdHVwLCBBbnVtX3BnX2luZGV4X2luZG9w dGlvbiwKKwkJCQkJCQkmaXNudWxsKTsKKwkJQXNzZXJ0KCFpc251bGwpOworCQlpbnQydmVjID0g KGludDJ2ZWN0b3IgKikgRGF0dW1HZXRQb2ludGVyKGQpOworCQlpbmRvcHRpb25zID0gKGludDE2 ICopIHBhbGxvYyhpbnQyX2Fycl9zaXplKTsKKwkJbWVtY3B5KGluZG9wdGlvbnMsIGludDJ2ZWMt PnZhbHVlcywgaW50Ml9hcnJfc2l6ZSk7CisJCVJlbGVhc2VTeXNDYWNoZSh0dXApOworCisJCXR1 cCA9IFNlYXJjaFN5c0NhY2hlMShSRUxPSUQsIE9iamVjdElkR2V0RGF0dW0oaW5kX29pZCkpOwor CQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHVwKSkKKwkJCWVsb2coRVJST1IsICJjYWNoZSBsb29r dXAgZmFpbGVkIGZvciBpbmRleCByZWxhdGlvbiAldSIsIGluZF9vaWQpOworCQlkID0gU3lzQ2Fj aGVHZXRBdHRyKFJFTE9JRCwgdHVwLCBBbnVtX3BnX2NsYXNzX3JlbG9wdGlvbnMsICZpc251bGwp OworCQlyZWxvcHRpb25zID0gIWlzbnVsbCA/IERhdHVtR2V0VGV4dFBDb3B5KGQpIDogTlVMTDsK KwkJUmVsZWFzZVN5c0NhY2hlKHR1cCk7CisKKwkJb3BjbGFzc09wdGlvbnMgPSBwYWxsb2MwKHNp emVvZihEYXR1bSkgKiBpbmRfaW5mby0+aWlfTnVtSW5kZXhBdHRycyk7CisJCWZvciAoaSA9IDA7 IGkgPCBpbmRfaW5mby0+aWlfTnVtSW5kZXhBdHRyczsgaSsrKQorCQkJb3BjbGFzc09wdGlvbnNb aV0gPSBnZXRfYXR0b3B0aW9ucyhpbmRfb2lkLCBpICsgMSk7CisKKwkJc3RhdHRhcmdldHMgPSBn ZXRfaW5kZXhfc3RhdHRhcmdldHMoaW5kX29pZCwgaW5kX2luZm8pOworCisJCS8qCisJCSAqIE5l aXRoZXIgcGFyZW50SW5kZXhSZWxpZCBub3IgcGFyZW50Q29uc3RyYWludElkIG5lZWRzIHRvIGJl IHBhc3NlZAorCQkgKiBzaW5jZSB0aGUgbmV3IGNhdGFsb2cgZW50cmllcyAocGdfY29uc3RyYWlu dCwgcGdfaW5oZXJpdHMpIHdvdWxkCisJCSAqIGV2ZW50dWFsbHkgYmUgZHJvcHBlZC4gVGhlcmVm b3JlIHRoZXJlJ3Mgbm8gbmVlZCB0byByZWNvcmQgdmFsaWQKKwkJICogZGVwZW5kZW5jeSBvbiBw YXJlbnRzLgorCQkgKi8KKwkJaW5kX29pZF9uZXcgPSBpbmRleF9jcmVhdGUoTmV3SGVhcCwKKwkJ CQkJCQkJICAgaW5kX25hbWUtPmRhdGEsCisJCQkJCQkJCSAgIEludmFsaWRPaWQsCisJCQkJCQkJ CSAgIEludmFsaWRPaWQsCS8qIHBhcmVudEluZGV4UmVsaWQgKi8KKwkJCQkJCQkJICAgSW52YWxp ZE9pZCwJLyogcGFyZW50Q29uc3RyYWludElkICovCisJCQkJCQkJCSAgIEludmFsaWRPaWQsCisJ CQkJCQkJCSAgIGluZF9pbmZvLAorCQkJCQkJCQkgICBjb2xuYW1lcywKKwkJCQkJCQkJICAgaW5k LT5yZF9yZWwtPnJlbGFtLAorCQkJCQkJCQkgICB0YnNwX29pZCwKKwkJCQkJCQkJICAgY29sbGF0 aW9ucywKKwkJCQkJCQkJICAgb3BjbGFzc2VzLAorCQkJCQkJCQkgICBvcGNsYXNzT3B0aW9ucywK KwkJCQkJCQkJICAgaW5kb3B0aW9ucywKKwkJCQkJCQkJICAgc3RhdHRhcmdldHMsCisJCQkJCQkJ CSAgIFBvaW50ZXJHZXREYXR1bShyZWxvcHRpb25zKSwKKwkJCQkJCQkJICAgZmxhZ3MsCS8qIGZs YWdzICovCisJCQkJCQkJCSAgIDAsCS8qIGNvbnN0cl9mbGFncyAqLworCQkJCQkJCQkgICBmYWxz ZSwJLyogYWxsb3dfc3lzdGVtX3RhYmxlX21vZHMgKi8KKwkJCQkJCQkJICAgZmFsc2UsCS8qIGlz X2ludGVybmFsICovCisJCQkJCQkJCSAgIE5VTEwgLyogY29uc3RyYWludElkICovCisJCQkpOwor CQlyZXN1bHQgPSBsYXBwZW5kX29pZChyZXN1bHQsIGluZF9vaWRfbmV3KTsKKworCQlpbmRleF9j bG9zZShpbmQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCWxpc3RfZnJlZV9kZWVwKGNvbG5hbWVzKTsK KwkJcGZyZWUoY29sbGF0aW9ucyk7CisJCXBmcmVlKG9wY2xhc3Nlcyk7CisJCXBmcmVlKGluZG9w dGlvbnMpOworCQlpZiAocmVsb3B0aW9ucykKKwkJCXBmcmVlKHJlbG9wdGlvbnMpOworCX0KKwor CXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitpbml0X3JlbF9yZW9wZW5faW5mbyhS ZWxSZW9wZW5JbmZvICpycmksIFJlbGF0aW9uICpyZWxfcCwgT2lkIHJlbGlkLAorCQkJCQkgTE9D S01PREUgbG9ja21vZGVfb3JpZywgTE9DS01PREUgbG9ja21vZGVfbmV3KQoreworCXJyaS0+cmVs X3AgPSByZWxfcDsKKwlycmktPnJlbGlkID0gcmVsaWQ7CisJcnJpLT5sb2NrbW9kZV9vcmlnID0g bG9ja21vZGVfb3JpZzsKKwlycmktPmxvY2ttb2RlX25ldyA9IGxvY2ttb2RlX25ldzsKK30KKwor LyoKKyAqIFVubG9jayBhbmQgY2xvc2UgcmVsYXRpb25zIHNwZWNpZmllZCBieSBpdGVtcyBvZiB0 aGUgJ3JlbHMnIGFycmF5LiAnbnJlbHMnCisgKiBpcyB0aGUgbnVtYmVyIG9mIGl0ZW1zLgorICoK KyAqIEluZm9ybWF0aW9uIG5lZWRlZCB0byAocmUpb3BlbiB0aGUgcmVsYXRpb25zIChvciB0byBp c3N1ZSBtZWFuaW5nZnVsIEVSUk9SKQorICogaXMgYWRkZWQgdG8gdGhlIGFycmF5IGl0ZW1zLgor ICovCitzdGF0aWMgdm9pZAordW5sb2NrX2FuZF9jbG9zZV9yZWxhdGlvbnMoUmVsUmVvcGVuSW5m byAqcmVscywgaW50IG5yZWwpCit7CisJaW50CQlpOworCVJlbFJlb3BlbkluZm8JKnJyaTsKKwor CS8qCisJICogRmlyc3QsIHJldHJpZXZlIHRoZSBpbmZvcm1hdGlvbiB0aGF0IHdlIHdpbGwgbmVl ZCBmb3IgcmUtb3BlbmluZy4KKwkgKgorCSAqIFdlIGNvdWxkIGNsb3NlIChhbmQgdW5sb2NrKSBl YWNoIHJlbGF0aW9uIGFzIHNvb24gYXMgd2UgaGF2ZSBnYXRoZXJlZAorCSAqIHRoZSByZWxhdGVk IGluZm9ybWF0aW9uLCBidXQgdGhlbiB3ZSB3b3VsZCBoYXZlIHRvIGJlIGNhcmVmdWwgbm90IHRv CisJICogdW5sb2NrIHRoZSB0YWJsZSB1bnRpbCB3ZSBoYXZlIHRoZSBpbmZvIG9uIGFsbCBpdHMg aW5kZXhlcy4gKE9uY2Ugd2UKKwkgKiB1bmxvY2sgdGhlIHRhYmxlLCBhbnkgaW5kZXggY2FuIGJl IGRyb3BwZWQsIGFuZCB0aHVzIHdlIGNhbiBmYWlsIHRvIGdldAorCSAqIHRoZSBuYW1lIHdlIHdh bnQgdG8gcmVwb3J0IGlmIHJlLW9wZW5pbmcgZmFpbHMuKSBJdCBzZWVtIHNpbXBsZXIgdG8KKwkg KiBzZXBhcmF0ZSB0aGUgd29yayBpbnRvIHR3byBpdGVyYXRpb25zLgorCSAqLworCWZvciAoaSA9 IDA7IGkgPCBucmVsOyBpKyspCisJeworCQlSZWxhdGlvbglyZWw7CisKKwkJcnJpID0gJnJlbHNb aV07CisJCXJlbCA9ICpycmktPnJlbF9wOworCisJCWlmIChyZWwpCisJCXsKKwkJCUFzc2VydChD aGVja1JlbGF0aW9uTG9ja2VkQnlNZShyZWwsIHJyaS0+bG9ja21vZGVfb3JpZywgZmFsc2UpKTsK KwkJCUFzc2VydCghT2lkSXNWYWxpZChycmktPnJlbGlkKSk7CisKKwkJCXJyaS0+cmVsaWQgPSBS ZWxhdGlvbkdldFJlbGlkKHJlbCk7CisJCQlycmktPnJlbGtpbmQgPSByZWwtPnJkX3JlbC0+cmVs a2luZDsKKwkJCXJyaS0+cmVsbmFtZSA9IHBzdHJkdXAoUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUo cmVsKSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlBc3NlcnQoT2lkSXNWYWxpZChycmktPnJlbGlk KSk7CisKKwkJCXJyaS0+cmVsbmFtZSA9IGdldF9yZWxfbmFtZShycmktPnJlbGlkKTsKKwkJCXJy aS0+cmVsa2luZCA9IGdldF9yZWxfcmVsa2luZChycmktPnJlbGlkKTsKKwkJfQorCX0KKworCS8q IFNlY29uZCwgY2xvc2UgdGhlIHJlbGF0aW9ucy4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnJlbDsg aSsrKQorCXsKKwkJUmVsYXRpb24JcmVsOworCisJCXJyaSA9ICZyZWxzW2ldOworCQlyZWwgPSAq cnJpLT5yZWxfcDsKKworCQkvKiBDbG9zZSB0aGUgcmVsYXRpb24gaWYgdGhlIGNhbGxlciBwYXNz ZWQgb25lLiAqLworCQlpZiAocmVsKQorCQl7CisJCQlpZiAocnJpLT5yZWxraW5kID09IFJFTEtJ TkRfUkVMQVRJT04pCisJCQkJdGFibGVfY2xvc2UocmVsLCBycmktPmxvY2ttb2RlX29yaWcpOwor CQkJZWxzZQorCQkJeworCQkJCUFzc2VydChycmktPnJlbGtpbmQgPT0gUkVMS0lORF9JTkRFWCk7 CisKKwkJCQlpbmRleF9jbG9zZShyZWwsIHJyaS0+bG9ja21vZGVfb3JpZyk7CisJCQl9CisJCX0K Kwl9Cit9CisKKy8qCisgKiBSZS1vcGVuIHRoZSByZWxhdGlvbnMgY2xvc2VkIHByZXZpb3VzbHkg YnkgdW5sb2NrX2FuZF9jbG9zZV9yZWxhdGlvbnMoKS4KKyAqLworc3RhdGljIHZvaWQKK3Jlb3Bl bl9yZWxhdGlvbnMoUmVsUmVvcGVuSW5mbyAqcmVscywgaW50IG5yZWwpCit7CisJZm9yIChpbnQg aSA9IDA7IGkgPCBucmVsOyBpKyspCisJeworCQlSZWxSZW9wZW5JbmZvCSpycmkgPSAmcmVsc1tp XTsKKwkJUmVsYXRpb24JcmVsOworCisJCWlmIChycmktPnJlbGtpbmQgPT0gUkVMS0lORF9SRUxB VElPTikKKwkJeworCQkJcmVsID0gdHJ5X3RhYmxlX29wZW4ocnJpLT5yZWxpZCwgcnJpLT5sb2Nr bW9kZV9uZXcpOworCQl9CisJCWVsc2UKKwkJeworCQkJQXNzZXJ0KHJyaS0+cmVsa2luZCA9PSBS RUxLSU5EX0lOREVYKTsKKworCQkJcmVsID0gdHJ5X2luZGV4X29wZW4ocnJpLT5yZWxpZCwgcnJp LT5sb2NrbW9kZV9uZXcpOworCQl9CisKKwkJaWYgKHJlbCA9PSBOVUxMKQorCQl7CisJCQljb25z dCBjaGFyCSpraW5kX3N0cjsKKworCQkJa2luZF9zdHIgPSAocnJpLT5yZWxraW5kID09IFJFTEtJ TkRfUkVMQVRJT04pID8gInRhYmxlIiA6ICJpbmRleCI7CisJCQllcmVwb3J0KEVSUk9SLAorCQkJ CQkoZXJybXNnKCJjb3VsZCBub3Qgb3BlbiBcJXMgXCIlc1wiIiwga2luZF9zdHIsCisJCQkJCQkJ cnJpLT5yZWxuYW1lKSwKKwkJCQkJIGVycmhpbnQoInRoZSAlcyBjb3VsZCBoYXZlIGJlZW4gZHJv cHBlZCBieSBhbm90aGVyIHRyYW5zYWN0aW9uIiwKKwkJCQkJCQkga2luZF9zdHIpKSk7CisJCX0K KwkJKnJyaS0+cmVsX3AgPSByZWw7CisKKwkJcGZyZWUocnJpLT5yZWxuYW1lKTsKKwl9Cit9CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9tYXR2aWV3LmMgYi9zcmMvYmFja2VuZC9j b21tYW5kcy9tYXR2aWV3LmMKaW5kZXggNDg4Y2E5NTBkOS4uYWYxOTQ1ZTFlZCAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvbWF0dmlldy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1h bmRzL21hdHZpZXcuYwpAQCAtODczLDcgKzg3Myw3IEBAIHJlZnJlc2hfYnlfbWF0Y2hfbWVyZ2Uo T2lkIG1hdHZpZXdPaWQsIE9pZCB0ZW1wT2lkLCBPaWQgcmVsb3duZXIsCiBzdGF0aWMgdm9pZAog cmVmcmVzaF9ieV9oZWFwX3N3YXAoT2lkIG1hdHZpZXdPaWQsIE9pZCBPSUROZXdIZWFwLCBjaGFy IHJlbHBlcnNpc3RlbmNlKQogewotCWZpbmlzaF9oZWFwX3N3YXAobWF0dmlld09pZCwgT0lETmV3 SGVhcCwgZmFsc2UsIGZhbHNlLCB0cnVlLCB0cnVlLAorCWZpbmlzaF9oZWFwX3N3YXAobWF0dmll d09pZCwgT0lETmV3SGVhcCwgZmFsc2UsIGZhbHNlLCB0cnVlLCB0cnVlLCB0cnVlLAogCQkJCQkg UmVjZW50WG1pbiwgUmVhZE5leHRNdWx0aVhhY3RJZCgpLCByZWxwZXJzaXN0ZW5jZSk7CiB9CiAK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvdGFibGVjbWRzLmMKaW5kZXggNWQ2MTUxZGFkMS4uMTNmMzJlZGU5MiAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKKysrIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvdGFibGVjbWRzLmMKQEAgLTQzOTUsNiArNDM5NSwxNiBAQCBBbHRlclRhYmxl SW50ZXJuYWwoT2lkIHJlbGlkLCBMaXN0ICpjbWRzLCBib29sIHJlY3Vyc2UpCiAKIAlyZWwgPSBy ZWxhdGlvbl9vcGVuKHJlbGlkLCBsb2NrbW9kZSk7CiAKKwkvKgorCSAqIElmIGxvY2ttb2RlIGFs bG93cywgY2hlY2sgaWYgVkFDVVVNIEZVTEwgLyBDTFVTVEVSIENPTkNVUlJFTlRMWSBpcyBpbgor CSAqIHByb2dyZXNzLiBJZiBsb2NrbW9kZSBpcyB0b28gd2VhaywgY2x1c3Rlcl9yZWwoKSBzaG91 bGQgZGV0ZWN0CisJICogaW5jb21wYXRpYmxlIERETHMgZXhlY3V0ZWQgYnkgdXMuCisJICoKKwkg KiBYWFggV2UgbWlnaHQgc2tpcCB0aGUgY2hhbmdlcyBmb3IgRERMcyB3aGljaCBkbyBub3QgY2hh bmdlIHRoZSB0dXBsZQorCSAqIGRlc2NyaXB0b3IuCisJICovCisJY2hlY2tfZm9yX2NvbmN1cnJl bnRfY2x1c3RlcihyZWxpZCwgbG9ja21vZGUpOworCiAJRXZlbnRUcmlnZ2VyQWx0ZXJUYWJsZVJl bGlkKHJlbGlkKTsKIAogCUFUQ29udHJvbGxlcihOVUxMLCByZWwsIGNtZHMsIHJlY3Vyc2UsIGxv Y2ttb2RlLCBOVUxMKTsKQEAgLTU4NjEsNiArNTg3MSw3IEBAIEFUUmV3cml0ZVRhYmxlcyhBbHRl clRhYmxlU3RtdCAqcGFyc2V0cmVlLCBMaXN0ICoqd3F1ZXVlLCBMT0NLTU9ERSBsb2NrbW9kZSwK IAkJCWZpbmlzaF9oZWFwX3N3YXAodGFiLT5yZWxpZCwgT0lETmV3SGVhcCwKIAkJCQkJCQkgZmFs c2UsIGZhbHNlLCB0cnVlLAogCQkJCQkJCSAhT2lkSXNWYWxpZCh0YWItPm5ld1RhYmxlU3BhY2Up LAorCQkJCQkJCSB0cnVlLAogCQkJCQkJCSBSZWNlbnRYbWluLAogCQkJCQkJCSBSZWFkTmV4dE11 bHRpWGFjdElkKCksCiAJCQkJCQkJIHBlcnNpc3RlbmNlKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL3ZhY3V1bS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtLmMKaW5k ZXggMGJkMDAwYWNjNS4uNTI5YzQ2YzE4NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFu ZHMvdmFjdXVtLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtLmMKQEAgLTExMiw3 ICsxMTIsOCBAQCBzdGF0aWMgdm9pZCB2YWNfdHJ1bmNhdGVfY2xvZyhUcmFuc2FjdGlvbklkIGZy b3plblhJRCwKIAkJCQkJCQkgIFRyYW5zYWN0aW9uSWQgbGFzdFNhbmVGcm96ZW5YaWQsCiAJCQkJ CQkJICBNdWx0aVhhY3RJZCBsYXN0U2FuZU1pbk11bHRpKTsKIHN0YXRpYyBib29sIHZhY3V1bV9y ZWwoT2lkIHJlbGlkLCBSYW5nZVZhciAqcmVsYXRpb24sIFZhY3V1bVBhcmFtcyAqcGFyYW1zLAot CQkJCQkgICBCdWZmZXJBY2Nlc3NTdHJhdGVneSBic3RyYXRlZ3kpOworCQkJCQkgICBCdWZmZXJB Y2Nlc3NTdHJhdGVneSBic3RyYXRlZ3ksIGJvb2wgaXNUb3BMZXZlbCwKKwkJCQkJICAgYm9vbCB3 aG9sZV9kYXRhYmFzZSk7CiBzdGF0aWMgZG91YmxlIGNvbXB1dGVfcGFyYWxsZWxfZGVsYXkodm9p ZCk7CiBzdGF0aWMgVmFjT3B0VmFsdWUgZ2V0X3ZhY29wdHZhbF9mcm9tX2Jvb2xlYW4oRGVmRWxl bSAqZGVmKTsKIHN0YXRpYyBib29sIHZhY190aWRfcmVhcGVkKEl0ZW1Qb2ludGVyIGl0ZW1wdHIs IHZvaWQgKnN0YXRlKTsKQEAgLTE1Myw2ICsxNTQsNyBAQCBFeGVjVmFjdXVtKFBhcnNlU3RhdGUg KnBzdGF0ZSwgVmFjdXVtU3RtdCAqdmFjc3RtdCwgYm9vbCBpc1RvcExldmVsKQogCWJvb2wJCWFu YWx5emUgPSBmYWxzZTsKIAlib29sCQlmcmVlemUgPSBmYWxzZTsKIAlib29sCQlmdWxsID0gZmFs c2U7CisJYm9vbAkJY29uY3VycmVudCA9IGZhbHNlOwogCWJvb2wJCWRpc2FibGVfcGFnZV9za2lw cGluZyA9IGZhbHNlOwogCWJvb2wJCXByb2Nlc3NfbWFpbiA9IHRydWU7CiAJYm9vbAkJcHJvY2Vz c190b2FzdCA9IHRydWU7CkBAIC0yMjYsNiArMjI4LDggQEAgRXhlY1ZhY3V1bShQYXJzZVN0YXRl ICpwc3RhdGUsIFZhY3V1bVN0bXQgKnZhY3N0bXQsIGJvb2wgaXNUb3BMZXZlbCkKIAkJCWZyZWV6 ZSA9IGRlZkdldEJvb2xlYW4ob3B0KTsKIAkJZWxzZSBpZiAoc3RyY21wKG9wdC0+ZGVmbmFtZSwg ImZ1bGwiKSA9PSAwKQogCQkJZnVsbCA9IGRlZkdldEJvb2xlYW4ob3B0KTsKKwkJZWxzZSBpZiAo c3RyY21wKG9wdC0+ZGVmbmFtZSwgImNvbmN1cnJlbnRseSIpID09IDApCisJCQljb25jdXJyZW50 ID0gZGVmR2V0Qm9vbGVhbihvcHQpOwogCQllbHNlIGlmIChzdHJjbXAob3B0LT5kZWZuYW1lLCAi ZGlzYWJsZV9wYWdlX3NraXBwaW5nIikgPT0gMCkKIAkJCWRpc2FibGVfcGFnZV9za2lwcGluZyA9 IGRlZkdldEJvb2xlYW4ob3B0KTsKIAkJZWxzZSBpZiAoc3RyY21wKG9wdC0+ZGVmbmFtZSwgImlu ZGV4X2NsZWFudXAiKSA9PSAwKQpAQCAtMzAwLDcgKzMwNCw3IEBAIEV4ZWNWYWN1dW0oUGFyc2VT dGF0ZSAqcHN0YXRlLCBWYWN1dW1TdG10ICp2YWNzdG10LCBib29sIGlzVG9wTGV2ZWwpCiAJCShz a2lwX2xvY2tlZCA/IFZBQ09QVF9TS0lQX0xPQ0tFRCA6IDApIHwKIAkJKGFuYWx5emUgPyBWQUNP UFRfQU5BTFlaRSA6IDApIHwKIAkJKGZyZWV6ZSA/IFZBQ09QVF9GUkVFWkUgOiAwKSB8Ci0JCShm dWxsID8gVkFDT1BUX0ZVTEwgOiAwKSB8CisJCShmdWxsID8gKGNvbmN1cnJlbnQgPyBWQUNPUFRf RlVMTF9DT05DVVJSRU5UIDogVkFDT1BUX0ZVTExfRVhDTFVTSVZFKSA6IDApIHwKIAkJKGRpc2Fi bGVfcGFnZV9za2lwcGluZyA/IFZBQ09QVF9ESVNBQkxFX1BBR0VfU0tJUFBJTkcgOiAwKSB8CiAJ CShwcm9jZXNzX21haW4gPyBWQUNPUFRfUFJPQ0VTU19NQUlOIDogMCkgfAogCQkocHJvY2Vzc190 b2FzdCA/IFZBQ09QVF9QUk9DRVNTX1RPQVNUIDogMCkgfApAQCAtMzgwLDYgKzM4NCwxMiBAQCBF eGVjVmFjdXVtKFBhcnNlU3RhdGUgKnBzdGF0ZSwgVmFjdXVtU3RtdCAqdmFjc3RtdCwgYm9vbCBp c1RvcExldmVsKQogCQkJCQkgZXJybXNnKCJPTkxZX0RBVEFCQVNFX1NUQVRTIGNhbm5vdCBiZSBz cGVjaWZpZWQgd2l0aCBvdGhlciBWQUNVVU0gb3B0aW9ucyIpKSk7CiAJfQogCisJLyogVGhpcyBw cm9ibGVtIGNhbm5vdCBiZSBpZGVudGlmaWVkIGZyb20gdGhlIG9wdGlvbnMuICovCisJaWYgKGNv bmN1cnJlbnQgJiYgIWZ1bGwpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09E RV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAorCQkJCSBlcnJtc2coIkNPTkNVUlJFTlRMWSBjYW4g b25seSBiZSBzcGVjaWZpZWQgd2l0aCBWQUNVVU0gRlVMTCIpKSk7CisKIAkvKgogCSAqIEFsbCBm cmVlemUgYWdlcyBhcmUgemVybyBpZiB0aGUgRlJFRVpFIG9wdGlvbiBpcyBnaXZlbjsgb3RoZXJ3 aXNlIHBhc3MKIAkgKiB0aGVtIGFzIC0xIHdoaWNoIG1lYW5zIHRvIHVzZSB0aGUgZGVmYXVsdCB2 YWx1ZXMuCkBAIC00ODMsNiArNDkzLDcgQEAgdmFjdXVtKExpc3QgKnJlbGF0aW9ucywgVmFjdXVt UGFyYW1zICpwYXJhbXMsIEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IGJzdHJhdGVneSwKIAljb25zdCBj aGFyICpzdG10dHlwZTsKIAl2b2xhdGlsZSBib29sIGluX291dGVyX3hhY3QsCiAJCQkJdXNlX293 bl94YWN0czsKKwlib29sCQl3aG9sZV9kYXRhYmFzZSA9IGZhbHNlOwogCiAJQXNzZXJ0KHBhcmFt cyAhPSBOVUxMKTsKIApAQCAtNTQzLDcgKzU1NCwxNSBAQCB2YWN1dW0oTGlzdCAqcmVsYXRpb25z LCBWYWN1dW1QYXJhbXMgKnBhcmFtcywgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgYnN0cmF0ZWd5LAog CQlyZWxhdGlvbnMgPSBuZXdyZWxzOwogCX0KIAllbHNlCisJewogCQlyZWxhdGlvbnMgPSBnZXRf YWxsX3ZhY3V1bV9yZWxzKHZhY19jb250ZXh0LCBwYXJhbXMtPm9wdGlvbnMpOworCQkvKgorCQkg KiBJZiBhbGwgdGFibGVzIHNob3VsZCBiZSBwcm9jZXNzZWQsIHRoZSBDT05DVVJSRU5UTFkgb3B0 aW9uIGltcGxpZXMKKwkJICogdGhhdCB3ZSBzaG91bGQgc2tpcCBzeXN0ZW0gcmVsYXRpb25zIHJh dGhlciB0aGFuIHJhaXNpbmcgRVJST1JzLgorCQkgKi8KKwkJaWYgKHBhcmFtcy0+b3B0aW9ucyAm IFZBQ09QVF9GVUxMX0NPTkNVUlJFTlQpCisJCQl3aG9sZV9kYXRhYmFzZSA9IHRydWU7CisJfQog CiAJLyoKIAkgKiBEZWNpZGUgd2hldGhlciB3ZSBuZWVkIHRvIHN0YXJ0L2NvbW1pdCBvdXIgb3du IHRyYW5zYWN0aW9ucy4KQEAgLTYxOSw3ICs2MzgsOCBAQCB2YWN1dW0oTGlzdCAqcmVsYXRpb25z LCBWYWN1dW1QYXJhbXMgKnBhcmFtcywgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgYnN0cmF0ZWd5LAog CiAJCQlpZiAocGFyYW1zLT5vcHRpb25zICYgVkFDT1BUX1ZBQ1VVTSkKIAkJCXsKLQkJCQlpZiAo IXZhY3V1bV9yZWwodnJlbC0+b2lkLCB2cmVsLT5yZWxhdGlvbiwgcGFyYW1zLCBic3RyYXRlZ3kp KQorCQkJCWlmICghdmFjdXVtX3JlbCh2cmVsLT5vaWQsIHZyZWwtPnJlbGF0aW9uLCBwYXJhbXMs IGJzdHJhdGVneSwKKwkJCQkJCQkJaXNUb3BMZXZlbCwgd2hvbGVfZGF0YWJhc2UpKQogCQkJCQlj b250aW51ZTsKIAkJCX0KIApAQCAtMTkzMiwxMCArMTk1MiwxNCBAQCB2YWNfdHJ1bmNhdGVfY2xv ZyhUcmFuc2FjdGlvbklkIGZyb3plblhJRCwKIC8qCiAgKgl2YWN1dW1fcmVsKCkgLS0gdmFjdXVt IG9uZSBoZWFwIHJlbGF0aW9uCiAgKgotICoJCXJlbGlkIGlkZW50aWZpZXMgdGhlIHJlbGF0aW9u IHRvIHZhY3V1bS4gIElmIHJlbGF0aW9uIGlzIHN1cHBsaWVkLAotICoJCXVzZSB0aGUgbmFtZSB0 aGVyZWluIGZvciByZXBvcnRpbmcgYW55IGZhaWx1cmUgdG8gb3Blbi9sb2NrIHRoZSByZWw7Ci0g KgkJZG8gbm90IHVzZSBpdCBvbmNlIHdlJ3ZlIHN1Y2Nlc3NmdWxseSBvcGVuZWQgdGhlIHJlbCwg c2luY2UgaXQgbWlnaHQKLSAqCQliZSBzdGFsZS4KKyAqCQlyZWxpZCBpZGVudGlmaWVzIHRoZSBy ZWxhdGlvbiB0byB2YWN1dW0uICBJZiByZWxhdGlvbiBpcyBzdXBwbGllZCwgdXNlCisgKgkJdGhl IG5hbWUgdGhlcmVpbiBmb3IgcmVwb3J0aW5nIGFueSBmYWlsdXJlIHRvIG9wZW4vbG9jayB0aGUg cmVsOyBkbworICoJCW5vdCB1c2UgaXQgb25jZSB3ZSd2ZSBzdWNjZXNzZnVsbHkgb3BlbmVkIHRo ZSByZWwsIHNpbmNlIGl0IG1pZ2h0IGJlCisgKgkJc3RhbGUuCisgKgorICoJCUlmIHdob2xlX2Rh dGFiYXNlIGlzIHRydWUsIHdlIGFyZSBwcm9jZXNzaW5nIGFsbCB0aGUgcmVsYXRpb25zIG9mIHRo ZQorICoJCWN1cnJlbnQgZGF0YWJhc2UuIEluIHRoYXQgY2FzZSB3ZSBtaWdodCBuZWVkIHRvIHNp bGVudGx5IHNraXAKKyAqCQlyZWxhdGlvbnMgd2hpY2ggY291bGQgb3RoZXJ3aXNlIGNhdXNlIEVS Uk9SLgogICoKICAqCQlSZXR1cm5zIHRydWUgaWYgaXQncyBva2F5IHRvIHByb2NlZWQgd2l0aCBh IHJlcXVlc3RlZCBBTkFMWVpFCiAgKgkJb3BlcmF0aW9uIG9uIHRoaXMgdGFibGUuCkBAIC0xOTUw LDcgKzE5NzQsOCBAQCB2YWNfdHJ1bmNhdGVfY2xvZyhUcmFuc2FjdGlvbklkIGZyb3plblhJRCwK ICAqLwogc3RhdGljIGJvb2wKIHZhY3V1bV9yZWwoT2lkIHJlbGlkLCBSYW5nZVZhciAqcmVsYXRp b24sIFZhY3V1bVBhcmFtcyAqcGFyYW1zLAotCQkgICBCdWZmZXJBY2Nlc3NTdHJhdGVneSBic3Ry YXRlZ3kpCisJCSAgIEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IGJzdHJhdGVneSwgYm9vbCBpc1RvcExl dmVsLAorCQkgICBib29sIHdob2xlX2RhdGFiYXNlKQogewogCUxPQ0tNT0RFCWxtb2RlOwogCVJl bGF0aW9uCXJlbDsKQEAgLTIwMTMsMTAgKzIwMzgsMTEgQEAgdmFjdXVtX3JlbChPaWQgcmVsaWQs IFJhbmdlVmFyICpyZWxhdGlvbiwgVmFjdXVtUGFyYW1zICpwYXJhbXMsCiAKIAkvKgogCSAqIERl dGVybWluZSB0aGUgdHlwZSBvZiBsb2NrIHdlIHdhbnQgLS0tIGhhcmQgZXhjbHVzaXZlIGxvY2sg Zm9yIGEgRlVMTAotCSAqIHZhY3V1bSwgYnV0IGp1c3QgU2hhcmVVcGRhdGVFeGNsdXNpdmVMb2Nr IGZvciBjb25jdXJyZW50IHZhY3V1bS4gRWl0aGVyCi0JICogd2F5LCB3ZSBjYW4gYmUgc3VyZSB0 aGF0IG5vIG90aGVyIGJhY2tlbmQgaXMgdmFjdXVtaW5nIHRoZSBzYW1lIHRhYmxlLgorCSAqIGV4 Y2x1c2l2ZSB2YWN1dW0sIGJ1dCBhIHdlYWtlciBsb2NrIChTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxv Y2spIGZvcgorCSAqIGNvbmN1cnJlbnQgdmFjdXVtLiBFaXRoZXIgd2F5LCB3ZSBjYW4gYmUgc3Vy ZSB0aGF0IG5vIG90aGVyIGJhY2tlbmQgaXMKKwkgKiB2YWN1dW1pbmcgdGhlIHNhbWUgdGFibGUu CiAJICovCi0JbG1vZGUgPSAocGFyYW1zLT5vcHRpb25zICYgVkFDT1BUX0ZVTEwpID8KKwlsbW9k ZSA9IChwYXJhbXMtPm9wdGlvbnMgJiBWQUNPUFRfRlVMTF9FWENMVVNJVkUpID8KIAkJQWNjZXNz RXhjbHVzaXZlTG9jayA6IFNoYXJlVXBkYXRlRXhjbHVzaXZlTG9jazsKIAogCS8qIG9wZW4gdGhl IHJlbGF0aW9uIGFuZCBnZXQgdGhlIGFwcHJvcHJpYXRlIGxvY2sgb24gaXQgKi8KQEAgLTIwMzEs NiArMjA1NywzOSBAQCB2YWN1dW1fcmVsKE9pZCByZWxpZCwgUmFuZ2VWYXIgKnJlbGF0aW9uLCBW YWN1dW1QYXJhbXMgKnBhcmFtcywKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAorCS8qCisJICogTGVh dmUgaWYgdGhlIENPTkNVUlJFTlRMWSBvcHRpb24gd2FzIHBhc3NlZCwgYnV0IHRoZSByZWxhdGlv biBpcyBub3QKKwkgKiBzdWl0YWJsZSBmb3IgdGhhdC4gTm90ZSB0aGF0IHdlIG9ubHkgc2tpcCBz dWNoIHJlbGF0aW9ucyBpZiB0aGUgdXNlcgorCSAqIHdhbnRzIHRvIHZhY3V1bSB0aGUgd2hvbGUg ZGF0YWJhc2UuIEluIGNvbnRyYXN0LCBpZiBoZSBzcGVjaWZpZWQKKwkgKiBpbmFwcHJvcHJpYXRl IHJlbGF0aW9uKHMpIGV4cGxpY2l0bHksIHRoZSBjb21tYW5kIHdpbGwgZW5kIHVwIHdpdGgKKwkg KiBFUlJPUi4KKwkgKi8KKwlpZiAod2hvbGVfZGF0YWJhc2UgJiYgKHBhcmFtcy0+b3B0aW9ucyAm IFZBQ09QVF9GVUxMX0NPTkNVUlJFTlQpICYmCisJCSFjaGVja19yZWxhdGlvbl9pc19jbHVzdGVy YWJsZV9jb25jdXJyZW50bHkocmVsLCBERUJVRzEsCisJCQkJCQkJCQkJCQkJIlZBQ1VVTSAoRlVM TCwgQ09OQ1VSUkVOVExZKSIpKQorCXsKKwkJcmVsYXRpb25fY2xvc2UocmVsLCBsbW9kZSk7CisJ CVBvcEFjdGl2ZVNuYXBzaG90KCk7CisJCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCQly ZXR1cm4gZmFsc2U7CisJfQorCisJLyoKKwkgKiBTa2lwIHRoZSByZWxhdGlvbiBpZiBWQUNVVU0g RlVMTCAvIENMVVNURVIgQ09OQ1VSUkVOVExZIGlzIGluIHByb2dyZXNzCisJICogYXMgaXQgd2ls bCBkcm9wIHRoZSBjdXJyZW50IHN0b3JhZ2Ugb2YgdGhlIHJlbGF0aW9uLgorCSAqCisJICogVGhp cyBjaGVjayBzaG91bGQgbm90IHRha2UgcGxhY2UgdW50aWwgd2UgaGF2ZSBhIGxvY2sgdGhhdCBw cmV2ZW50cworCSAqIGFub3RoZXIgYmFja2VuZCBmcm9tIHN0YXJ0aW5nIFZBQ1VVTSBGVUxMIC8g Q0xVU1RFUiBDT05DVVJSRU5UTFkgbGF0ZXIuCisJICovCisJQXNzZXJ0KGxtb2RlID49IExPQ0tf Q0xVU1RFUl9DT05DVVJSRU5UKTsKKwlpZiAoaXNfY29uY3VycmVudF9jbHVzdGVyX2luX3Byb2dy ZXNzKHJlbGlkKSkKKwl7CisJCXJlbGF0aW9uX2Nsb3NlKHJlbCwgbG1vZGUpOworCQlQb3BBY3Rp dmVTbmFwc2hvdCgpOworCQlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKwkJcmV0dXJuIGZh bHNlOworCX0KKwogCS8qCiAJICogV2hlbiByZWN1cnNpbmcgdG8gYSBUT0FTVCB0YWJsZSwgY2hl Y2sgcHJpdmlsZWdlcyBvbiB0aGUgcGFyZW50LiAgTkI6CiAJICogVGhpcyBpcyBvbmx5IHNhZmUg dG8gZG8gYmVjYXVzZSB3ZSBob2xkIGEgc2Vzc2lvbiBsb2NrIG9uIHRoZSBtYWluCkBAIC0yMTA0 LDE5ICsyMTYzLDYgQEAgdmFjdXVtX3JlbChPaWQgcmVsaWQsIFJhbmdlVmFyICpyZWxhdGlvbiwg VmFjdXVtUGFyYW1zICpwYXJhbXMsCiAJCXJldHVybiB0cnVlOwogCX0KIAotCS8qCi0JICogR2V0 IGEgc2Vzc2lvbi1sZXZlbCBsb2NrIHRvby4gVGhpcyB3aWxsIHByb3RlY3Qgb3VyIGFjY2VzcyB0 byB0aGUKLQkgKiByZWxhdGlvbiBhY3Jvc3MgbXVsdGlwbGUgdHJhbnNhY3Rpb25zLCBzbyB0aGF0 IHdlIGNhbiB2YWN1dW0gdGhlCi0JICogcmVsYXRpb24ncyBUT0FTVCB0YWJsZSAoaWYgYW55KSBz ZWN1cmUgaW4gdGhlIGtub3dsZWRnZSB0aGF0IG5vIG9uZSBpcwotCSAqIGRlbGV0aW5nIHRoZSBw YXJlbnQgcmVsYXRpb24uCi0JICoKLQkgKiBOT1RFOiB0aGlzIGNhbm5vdCBibG9jaywgZXZlbiBp ZiBzb21lb25lIGVsc2UgaXMgd2FpdGluZyBmb3IgYWNjZXNzLAotCSAqIGJlY2F1c2UgdGhlIGxv Y2sgbWFuYWdlciBrbm93cyB0aGF0IGJvdGggbG9jayByZXF1ZXN0cyBhcmUgZnJvbSB0aGUKLQkg KiBzYW1lIHByb2Nlc3MuCi0JICovCi0JbG9ja3JlbGlkID0gcmVsLT5yZF9sb2NrSW5mby5sb2Nr UmVsSWQ7Ci0JTG9ja1JlbGF0aW9uSWRGb3JTZXNzaW9uKCZsb2NrcmVsaWQsIGxtb2RlKTsKLQog CS8qCiAJICogU2V0IGluZGV4X2NsZWFudXAgb3B0aW9uIGJhc2VkIG9uIGluZGV4X2NsZWFudXAg cmVsb3B0aW9uIGlmIGl0IHdhc24ndAogCSAqIHNwZWNpZmllZCBpbiBWQUNVVU0gY29tbWFuZCwg b3Igd2hlbiBydW5uaW5nIGluIGFuIGF1dG92YWN1dW0gd29ya2VyCkBAIC0yMTY5LDYgKzIyMTUs MzAgQEAgdmFjdXVtX3JlbChPaWQgcmVsaWQsIFJhbmdlVmFyICpyZWxhdGlvbiwgVmFjdXVtUGFy YW1zICpwYXJhbXMsCiAJZWxzZQogCQl0b2FzdF9yZWxpZCA9IEludmFsaWRPaWQ7CiAKKwkvKgor CSAqIEdldCBhIHNlc3Npb24tbGV2ZWwgbG9jayB0b28uIFRoaXMgd2lsbCBwcm90ZWN0IG91ciBh Y2Nlc3MgdG8gdGhlCisJICogcmVsYXRpb24gYWNyb3NzIG11bHRpcGxlIHRyYW5zYWN0aW9ucywg c28gdGhhdCB3ZSBjYW4gdmFjdXVtIHRoZQorCSAqIHJlbGF0aW9uJ3MgVE9BU1QgdGFibGUgKGlm IGFueSkgc2VjdXJlIGluIHRoZSBrbm93bGVkZ2UgdGhhdCBubyBvbmUgaXMKKwkgKiBkZWxldGlu ZyB0aGUgcGFyZW50IHJlbGF0aW9uLgorCSAqCisJICogTk9URTogdGhpcyBjYW5ub3QgYmxvY2ss IGV2ZW4gaWYgc29tZW9uZSBlbHNlIGlzIHdhaXRpbmcgZm9yIGFjY2VzcywKKwkgKiBiZWNhdXNl IHRoZSBsb2NrIG1hbmFnZXIga25vd3MgdGhhdCBib3RoIGxvY2sgcmVxdWVzdHMgYXJlIGZyb20g dGhlCisJICogc2FtZSBwcm9jZXNzLgorCSAqLworCWlmIChPaWRJc1ZhbGlkKHRvYXN0X3JlbGlk KSkKKwl7CisJCS8qCisJCSAqIFlvdSBtaWdodCB3b3JyeSB0aGF0LCBpbiB0aGUgVkFDVVVNIChG VUxMLCBDT05DVVJSRU5UTFkpIGNhc2UsCisJCSAqIGNsdXN0ZXJfcmVsKCkgbmVlZHMgdG8gcmVs ZWFzZSBhbGwgdGhlIGxvY2tzIG9uIHRoZSByZWxhdGlvbiBhdAorCQkgKiBzb21lIHBvaW50LCBi dXQgdGhpcyBzZXNzaW9uIGxvY2sgbWFrZXMgaXQgaW1wb3NzaWJsZS4gSW4gZmFjdCwKKwkJICog Y2x1c3Rlcl9yZWwoKSB3aWxsIHdpbGwgZXZlbnR1YWxseSBiZSBjYWxsZWQgZm9yIHRoZSBUT0FT VCByZWxhdGlvbgorCQkgKiBhbmQgcmFpc2UgRVJST1IgYmVjYXVzZSwgaW4gdGhlIGNvbmN1cnJl bnQgbW9kZSwgaXQgY2Fubm90IHByb2Nlc3MKKwkJICogVE9BU1QgcmVsYXRpb24gYWxvbmUgYW55 d2F5LgorCQkgKi8KKwkJbG9ja3JlbGlkID0gcmVsLT5yZF9sb2NrSW5mby5sb2NrUmVsSWQ7CisJ CUxvY2tSZWxhdGlvbklkRm9yU2Vzc2lvbigmbG9ja3JlbGlkLCBsbW9kZSk7CisJfQorCiAJLyoK IAkgKiBTd2l0Y2ggdG8gdGhlIHRhYmxlIG93bmVyJ3MgdXNlcmlkLCBzbyB0aGF0IGFueSBpbmRl eCBmdW5jdGlvbnMgYXJlIHJ1bgogCSAqIGFzIHRoYXQgdXNlci4gIEFsc28gbG9jayBkb3duIHNl Y3VyaXR5LXJlc3RyaWN0ZWQgb3BlcmF0aW9ucyBhbmQKQEAgLTIxOTYsMTEgKzIyNjYsMjIgQEAg dmFjdXVtX3JlbChPaWQgcmVsaWQsIFJhbmdlVmFyICpyZWxhdGlvbiwgVmFjdXVtUGFyYW1zICpw YXJhbXMsCiAJCXsKIAkJCUNsdXN0ZXJQYXJhbXMgY2x1c3Rlcl9wYXJhbXMgPSB7MH07CiAKKwkJ CS8qCisJCQkgKiBJbnZhbGlkIHRvYXN0X3JlbGlkIG1lYW5zIHRoYXQgdGhlcmUgaXMgbm8gc2Vz c2lvbiBsb2NrIG9uIHRoZQorCQkJICogcmVsYXRpb24uIFN1Y2ggYSBsb2NrIHdvdWxkIGJlIGEg cHJvYmxlbSBiZWNhdXNlIGl0IHdvdWxkCisJCQkgKiBwcmV2ZW50IGNsdXN0ZXJfcmVsKCkgZnJv bSByZWxlYXNpbmcgYWxsIGxvY2tzIHdoZW4gaXQgdHJpZXMgdG8KKwkJCSAqIGdldCBBY2Nlc3NF eGNsdXNpdmVMb2NrLgorCQkJICovCisJCQlBc3NlcnQoIU9pZElzVmFsaWQodG9hc3RfcmVsaWQp KTsKKwogCQkJaWYgKChwYXJhbXMtPm9wdGlvbnMgJiBWQUNPUFRfVkVSQk9TRSkgIT0gMCkKIAkJ CQljbHVzdGVyX3BhcmFtcy5vcHRpb25zIHw9IENMVU9QVF9WRVJCT1NFOwogCisJCQlpZiAoKHBh cmFtcy0+b3B0aW9ucyAmIFZBQ09QVF9GVUxMX0NPTkNVUlJFTlQpICE9IDApCisJCQkJY2x1c3Rl cl9wYXJhbXMub3B0aW9ucyB8PSBDTFVPUFRfQ09OQ1VSUkVOVDsKKwogCQkJLyogVkFDVVVNIEZV TEwgaXMgbm93IGEgdmFyaWFudCBvZiBDTFVTVEVSOyBzZWUgY2x1c3Rlci5jICovCi0JCQljbHVz dGVyX3JlbChyZWwsIEludmFsaWRPaWQsICZjbHVzdGVyX3BhcmFtcyk7CisJCQljbHVzdGVyX3Jl bChyZWwsIEludmFsaWRPaWQsICZjbHVzdGVyX3BhcmFtcywgaXNUb3BMZXZlbCk7CiAKIAkJCS8q CiAJCQkgKiBjbHVzdGVyX3JlbCgpIHNob3VsZCBoYXZlIGNsb3NlZCB0aGUgcmVsYXRpb24sIGxv Y2sgaXMga2VwdApAQCAtMjI0OSwxMyArMjMzMCwxNSBAQCB2YWN1dW1fcmVsKE9pZCByZWxpZCwg UmFuZ2VWYXIgKnJlbGF0aW9uLCBWYWN1dW1QYXJhbXMgKnBhcmFtcywKIAkJdG9hc3RfdmFjdXVt X3BhcmFtcy5vcHRpb25zIHw9IFZBQ09QVF9QUk9DRVNTX01BSU47CiAJCXRvYXN0X3ZhY3V1bV9w YXJhbXMudG9hc3RfcGFyZW50ID0gcmVsaWQ7CiAKLQkJdmFjdXVtX3JlbCh0b2FzdF9yZWxpZCwg TlVMTCwgJnRvYXN0X3ZhY3V1bV9wYXJhbXMsIGJzdHJhdGVneSk7CisJCXZhY3V1bV9yZWwodG9h c3RfcmVsaWQsIE5VTEwsICZ0b2FzdF92YWN1dW1fcGFyYW1zLCBic3RyYXRlZ3ksCisJCQkJICAg aXNUb3BMZXZlbCwgd2hvbGVfZGF0YWJhc2UpOwogCX0KIAogCS8qCiAJICogTm93IHJlbGVhc2Ug dGhlIHNlc3Npb24tbGV2ZWwgbG9jayBvbiB0aGUgbWFpbiB0YWJsZS4KIAkgKi8KLQlVbmxvY2tS ZWxhdGlvbklkRm9yU2Vzc2lvbigmbG9ja3JlbGlkLCBsbW9kZSk7CisJaWYgKE9pZElzVmFsaWQo dG9hc3RfcmVsaWQpKQorCQlVbmxvY2tSZWxhdGlvbklkRm9yU2Vzc2lvbigmbG9ja3JlbGlkLCBs bW9kZSk7CiAKIAkvKiBSZXBvcnQgdGhhdCB3ZSByZWFsbHkgZGlkIGl0LiAqLwogCXJldHVybiB0 cnVlOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZWNvZGUu YyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2RlLmMKaW5kZXggZDY4N2Nl ZWUzMy4uMDY2ZDk2ZGVhMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC9kZWNvZGUuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RlY29k ZS5jCkBAIC00NjcsNiArNDY3LDU3IEBAIGhlYXBfZGVjb2RlKExvZ2ljYWxEZWNvZGluZ0NvbnRl eHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVmKQogCVRyYW5zYWN0aW9uSWQgeGlkID0gWExv Z1JlY0dldFhpZChidWYtPnJlY29yZCk7CiAJU25hcEJ1aWxkICAqYnVpbGRlciA9IGN0eC0+c25h cHNob3RfYnVpbGRlcjsKIAorCS8qCisJICogSWYgdGhlIGNoYW5nZSBpcyBub3QgaW50ZW5kZWQg Zm9yIGxvZ2ljYWwgZGVjb2RpbmcsIGRvIG5vdCBldmVuCisJICogZXN0YWJsaXNoIHRyYW5zYWN0 aW9uIGZvciBpdC4gVGhpcyBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IGlmIHRoZQorCSAqIHJl Y29yZCB3YXMgZ2VuZXJhdGVkIGJ5IENMVVNURVIgQ09OQ1VSUkVOVExZIGJlY2F1c2UgdGhpcyBj b21tYW5kIHVzZXMKKwkgKiB0aGUgb3JpZ2luYWwgWElEIHdoZW4gZG9pbmcgY2hhbmdlcyBpbiB0 aGUgbmV3IHN0b3JhZ2UuIFRoZSBkZWNvZGluZworCSAqIHN1YnN5c3RlbSBwcm9iYWJseSBkb2Vz IG5vdCBleHBlY3QgdG8gc2VlIHRoZSBzYW1lIHRyYW5zYWN0aW9uIG11bHRpcGxlCisJICogdGlt ZXMuCisJICovCisJc3dpdGNoIChpbmZvKQorCXsKKwkJY2FzZSBYTE9HX0hFQVBfSU5TRVJUOgor CQl7CisJCQl4bF9oZWFwX2luc2VydAkqcmVjOworCisJCQlyZWMgPSAoeGxfaGVhcF9pbnNlcnQg KikgWExvZ1JlY0dldERhdGEoYnVmLT5yZWNvcmQpOworCQkJLyoKKwkJCSAqIChUaGlzIGRvZXMg aGFwcGVuIHdoZW4gcmF3X2hlYXBfaW5zZXJ0IG1hcmtzIHRoZSBUT0FTVCByZWNvcmQKKwkJCSAq IGFzIEhFQVBfSU5TRVJUX05PX0xPR0lDQUwpLgorCQkJICovCisJCQlpZiAoKHJlYy0+ZmxhZ3Mg JiBYTEhfSU5TRVJUX0NPTlRBSU5TX05FV19UVVBMRSkgPT0gMCkKKwkJCQlyZXR1cm47CisKKwkJ CWJyZWFrOworCQl9CisKKwkJY2FzZSBYTE9HX0hFQVBfSE9UX1VQREFURToKKwkJY2FzZSBYTE9H X0hFQVBfVVBEQVRFOgorCQl7CisJCQl4bF9oZWFwX3VwZGF0ZQkqcmVjOworCisJCQlyZWMgPSAo eGxfaGVhcF91cGRhdGUgKikgWExvZ1JlY0dldERhdGEoYnVmLT5yZWNvcmQpOworCQkJaWYgKChy ZWMtPmZsYWdzICYKKwkJCQkgKFhMSF9VUERBVEVfQ09OVEFJTlNfTkVXX1RVUExFIHwKKwkJCQkg IFhMSF9VUERBVEVfQ09OVEFJTlNfT0xEX1RVUExFIHwKKwkJCQkgIFhMSF9VUERBVEVfQ09OVEFJ TlNfT0xEX0tFWSkpID09IDApCisJCQkJcmV0dXJuOworCisJCQlicmVhazsKKwkJfQorCisJCWNh c2UgWExPR19IRUFQX0RFTEVURToKKwkJeworCQkJeGxfaGVhcF9kZWxldGUJKnJlYzsKKworCQkJ cmVjID0gKHhsX2hlYXBfZGVsZXRlICopIFhMb2dSZWNHZXREYXRhKGJ1Zi0+cmVjb3JkKTsKKwkJ CWlmIChyZWMtPmZsYWdzICYgWExIX0RFTEVURV9OT19MT0dJQ0FMKQorCQkJCXJldHVybjsKKwkJ CWJyZWFrOworCQl9CisJfQorCiAJUmVvcmRlckJ1ZmZlclByb2Nlc3NYaWQoY3R4LT5yZW9yZGVy LCB4aWQsIGJ1Zi0+b3JpZ3B0cik7CiAKIAkvKgpAQCAtOTAzLDEzICs5NTQsNiBAQCBEZWNvZGVJ bnNlcnQoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYp CiAKIAl4bHJlYyA9ICh4bF9oZWFwX2luc2VydCAqKSBYTG9nUmVjR2V0RGF0YShyKTsKIAotCS8q Ci0JICogSWdub3JlIGluc2VydCByZWNvcmRzIHdpdGhvdXQgbmV3IHR1cGxlcyAodGhpcyBkb2Vz IGhhcHBlbiB3aGVuCi0JICogcmF3X2hlYXBfaW5zZXJ0IG1hcmtzIHRoZSBUT0FTVCByZWNvcmQg YXMgSEVBUF9JTlNFUlRfTk9fTE9HSUNBTCkuCi0JICovCi0JaWYgKCEoeGxyZWMtPmZsYWdzICYg WExIX0lOU0VSVF9DT05UQUlOU19ORVdfVFVQTEUpKQotCQlyZXR1cm47Ci0KIAkvKiBvbmx5IGlu dGVyZXN0ZWQgaW4gb3VyIGRhdGFiYXNlICovCiAJWExvZ1JlY0dldEJsb2NrVGFnKHIsIDAsICZ0 YXJnZXRfbG9jYXRvciwgTlVMTCwgTlVMTCk7CiAJaWYgKHRhcmdldF9sb2NhdG9yLmRiT2lkICE9 IGN0eC0+c2xvdC0+ZGF0YS5kYXRhYmFzZSkKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL2xvZ2ljYWwvc25hcGJ1aWxkLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL3NuYXBidWlsZC5jCmluZGV4IGUzN2UyMmY0NDEuLmVkMTVhMGIxNzUgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvc25hcGJ1aWxkLmMKKysrIGIvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9zbmFwYnVpbGQuYwpAQCAtMjg2LDcgKzI4Niw3IEBA IHN0YXRpYyBib29sIEV4cG9ydEluUHJvZ3Jlc3MgPSBmYWxzZTsKIHN0YXRpYyB2b2lkIFNuYXBC dWlsZFB1cmdlT2xkZXJUeG4oU25hcEJ1aWxkICpidWlsZGVyKTsKIAogLyogc25hcHNob3QgYnVp bGRpbmcvbWFuaXB1bGF0aW9uL2Rpc3RyaWJ1dGlvbiBmdW5jdGlvbnMgKi8KLXN0YXRpYyBTbmFw c2hvdCBTbmFwQnVpbGRCdWlsZFNuYXBzaG90KFNuYXBCdWlsZCAqYnVpbGRlcik7CitzdGF0aWMg U25hcHNob3QgU25hcEJ1aWxkQnVpbGRTbmFwc2hvdChTbmFwQnVpbGQgKmJ1aWxkZXIsIFhMb2dS ZWNQdHIgbHNuKTsKIAogc3RhdGljIHZvaWQgU25hcEJ1aWxkRnJlZVNuYXBzaG90KFNuYXBzaG90 IHNuYXApOwogCkBAIC00ODEsMTIgKzQ4MSwxNyBAQCBTbmFwQnVpbGRTbmFwRGVjUmVmY291bnQo U25hcHNob3Qgc25hcCkKICAqIEJ1aWxkIGEgbmV3IHNuYXBzaG90LCBiYXNlZCBvbiBjdXJyZW50 bHkgY29tbWl0dGVkIGNhdGFsb2ctbW9kaWZ5aW5nCiAgKiB0cmFuc2FjdGlvbnMuCiAgKgorICog J2xzbicgaXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBjb21taXQgcmVjb3JkIChvZiBhIGNhdGFsb2ct Y2hhbmdpbmcKKyAqIHRyYW5zYWN0aW9uKSB0aGF0IHRyaWdnZXJlZCBjcmVhdGlvbiBvZiB0aGUg c25hcHNob3QuIFBhc3MKKyAqIEludmFsaWRYTG9nUmVjUHRyIGZvciB0aGUgdHJhbnNhY3Rpb24g YmFzZSBzbmFwc2hvdCBvciBpZiBpdCB0aGUgdXNlciBvZgorICogdGhlIHNuYXBzaG90IHNob3Vs ZCBub3QgbmVlZCB0aGUgTFNOLgorICoKICAqIEluLXByb2dyZXNzIHRyYW5zYWN0aW9ucyB3aXRo IGNhdGFsb2cgYWNjZXNzIGFyZSAqbm90KiBhbGxvd2VkIHRvIG1vZGlmeQogICogdGhlc2Ugc25h cHNob3RzOyB0aGV5IGhhdmUgdG8gY29weSB0aGVtIGFuZCBmaWxsIGluIGFwcHJvcHJpYXRlIC0+ Y3VyY2lkCiAgKiBhbmQgLT5zdWJ4aXAvc3VieGNudCB2YWx1ZXMuCiAgKi8KIHN0YXRpYyBTbmFw c2hvdAotU25hcEJ1aWxkQnVpbGRTbmFwc2hvdChTbmFwQnVpbGQgKmJ1aWxkZXIpCitTbmFwQnVp bGRCdWlsZFNuYXBzaG90KFNuYXBCdWlsZCAqYnVpbGRlciwgWExvZ1JlY1B0ciBsc24pCiB7CiAJ U25hcHNob3QJc25hcHNob3Q7CiAJU2l6ZQkJc3NpemU7CkBAIC01NTQsNiArNTU5LDcgQEAgU25h cEJ1aWxkQnVpbGRTbmFwc2hvdChTbmFwQnVpbGQgKmJ1aWxkZXIpCiAJc25hcHNob3QtPmFjdGl2 ZV9jb3VudCA9IDA7CiAJc25hcHNob3QtPnJlZ2RfY291bnQgPSAwOwogCXNuYXBzaG90LT5zbmFw WGFjdENvbXBsZXRpb25Db3VudCA9IDA7CisJc25hcHNob3QtPmxzbiA9IGxzbjsKIAogCXJldHVy biBzbmFwc2hvdDsKIH0KQEAgLTU2OSwxMCArNTc1LDcgQEAgU25hcHNob3QKIFNuYXBCdWlsZElu aXRpYWxTbmFwc2hvdChTbmFwQnVpbGQgKmJ1aWxkZXIpCiB7CiAJU25hcHNob3QJc25hcDsKLQlU cmFuc2FjdGlvbklkIHhpZDsKIAlUcmFuc2FjdGlvbklkIHNhZmVYaWQ7Ci0JVHJhbnNhY3Rpb25J ZCAqbmV3eGlwOwotCWludAkJCW5ld3hjbnQgPSAwOwogCiAJQXNzZXJ0KFhhY3RJc29MZXZlbCA9 PSBYQUNUX1JFUEVBVEFCTEVfUkVBRCk7CiAJQXNzZXJ0KGJ1aWxkZXItPmJ1aWxkaW5nX2Z1bGxf c25hcHNob3QpOwpAQCAtNTkzLDcgKzU5Niw3IEBAIFNuYXBCdWlsZEluaXRpYWxTbmFwc2hvdChT bmFwQnVpbGQgKmJ1aWxkZXIpCiAJaWYgKFRyYW5zYWN0aW9uSWRJc1ZhbGlkKE15UHJvYy0+eG1p bikpCiAJCWVsb2coRVJST1IsICJjYW5ub3QgYnVpbGQgYW4gaW5pdGlhbCBzbG90IHNuYXBzaG90 IHdoZW4gTXlQcm9jLT54bWluIGFscmVhZHkgaXMgdmFsaWQiKTsKIAotCXNuYXAgPSBTbmFwQnVp bGRCdWlsZFNuYXBzaG90KGJ1aWxkZXIpOworCXNuYXAgPSBTbmFwQnVpbGRCdWlsZFNuYXBzaG90 KGJ1aWxkZXIsIEludmFsaWRYTG9nUmVjUHRyKTsKIAogCS8qCiAJICogV2Uga25vdyB0aGF0IHNu YXAtPnhtaW4gaXMgYWxpdmUsIGVuZm9yY2VkIGJ5IHRoZSBsb2dpY2FsIHhtaW4KQEAgLTYxNCw2 ICs2MTcsNDcgQEAgU25hcEJ1aWxkSW5pdGlhbFNuYXBzaG90KFNuYXBCdWlsZCAqYnVpbGRlcikK IAogCU15UHJvYy0+eG1pbiA9IHNuYXAtPnhtaW47CiAKKwkvKiBDb252ZXJ0IHRoZSBoaXN0b3Jp YyBzbmFwc2hvdCB0byBNVkNDIHNuYXBzaG90LiAqLworCXJldHVybiBTbmFwQnVpbGRNVkNDRnJv bUhpc3RvcmljKHNuYXAsIHRydWUpOworfQorCisvKgorICogQnVpbGQgYW4gTVZDQyBzbmFwc2hv dCBmb3IgdGhlIGluaXRpYWwgZGF0YSBsb2FkIHBlcmZvcm1lZCBieSBDTFVTVEVSCisgKiBDT05D VVJSRU5UTFkgY29tbWFuZC4KKyAqCisgKiBUaGUgc25hcHNob3Qgd2lsbCBvbmx5IGJlIHVzZWQg dG8gc2NhbiBvbmUgcGFydGljdWxhciByZWxhdGlvbiwgd2hpY2ggaXMKKyAqIHRyZWF0ZWQgbGlr ZSBhIGNhdGFsb2cgKHRoZXJlZm9yZSAtPmJ1aWxkaW5nX2Z1bGxfc25hcHNob3QgaXMgbm90Cisg KiBpbXBvcnRhbnQpLCBhbmQgdGhlIGNhbGxlciBzaG91bGQgYWxyZWFkeSBoYXZlIGEgcmVwbGlj YXRpb24gc2xvdCBzZXR1cCAoc28KKyAqIHdlIGRvIG5vdCBzZXQgTXlQcm9jLT54bWluKS4gWFhY IERvIHdlIHlldCBuZWVkIHRvIGFkZCBzb21lIHJlc3RyaWN0aW9ucz8KKyAqLworU25hcHNob3QK K1NuYXBCdWlsZEluaXRpYWxTbmFwc2hvdEZvckNsdXN0ZXIoU25hcEJ1aWxkICpidWlsZGVyKQor eworCVNuYXBzaG90CXNuYXA7CisKKwlBc3NlcnQoYnVpbGRlci0+c3RhdGUgPT0gU05BUEJVSUxE X0NPTlNJU1RFTlQpOworCisJc25hcCA9IFNuYXBCdWlsZEJ1aWxkU25hcHNob3QoYnVpbGRlciwg SW52YWxpZFhMb2dSZWNQdHIpOworCXJldHVybiBTbmFwQnVpbGRNVkNDRnJvbUhpc3RvcmljKHNu YXAsIGZhbHNlKTsKK30KKworLyoKKyAqIFR1cm4gYSBoaXN0b3JpYyBNVkNDIHNuYXBzaG90IGlu dG8gYW4gb3JkaW5hcnkgTVZDQyBzbmFwc2hvdC4KKyAqCisgKiBQYXNzIHRydWUgZm9yICdpbl9w bGFjZScgaWYgeW91IGRvbid0IGNhcmUgYWJvdXQgbW9kaWZ5aW5nIHRoZSBzb3VyY2UKKyAqIHNu YXBzaG90LiBJZiB5b3UgbmVlZCBhIG5ldyBpbnN0YW5jZSwgYW5kIG9uZSB0aGF0IHdhcyBhbGxv Y2F0ZWQgYXMgYQorICogc2luZ2xlIGNodW5rIG9mIG1lbW9yeSwgcGFzcyBmYWxzZS4KKyAqLwor U25hcHNob3QKK1NuYXBCdWlsZE1WQ0NGcm9tSGlzdG9yaWMoU25hcHNob3Qgc25hcHNob3QsIGJv b2wgaW5fcGxhY2UpCit7CisJVHJhbnNhY3Rpb25JZCB4aWQ7CisJVHJhbnNhY3Rpb25JZCAqb2xk eGlwID0gc25hcHNob3QtPnhpcDsKKwl1aW50MzIJCW9sZHhjbnQJPSBzbmFwc2hvdC0+eGNudDsK KwlUcmFuc2FjdGlvbklkICpuZXd4aXA7CisJaW50CQkJbmV3eGNudCA9IDA7CisJU25hcHNob3QJ cmVzdWx0OworCiAJLyogYWxsb2NhdGUgaW4gdHJhbnNhY3Rpb24gY29udGV4dCAqLwogCW5ld3hp cCA9IChUcmFuc2FjdGlvbklkICopCiAJCXBhbGxvYyhzaXplb2YoVHJhbnNhY3Rpb25JZCkgKiBH ZXRNYXhTbmFwc2hvdFhpZENvdW50KCkpOwpAQCAtNjI0LDcgKzY2OCw3IEBAIFNuYXBCdWlsZElu aXRpYWxTbmFwc2hvdChTbmFwQnVpbGQgKmJ1aWxkZXIpCiAJICogY2xhc3NpY2FsIHNuYXBzaG90 IGJ5IG1hcmtpbmcgYWxsIG5vbi1jb21taXR0ZWQgdHJhbnNhY3Rpb25zIGFzCiAJICogaW4tcHJv Z3Jlc3MuIFRoaXMgY2FuIGJlIGV4cGVuc2l2ZS4KIAkgKi8KLQlmb3IgKHhpZCA9IHNuYXAtPnht aW47IE5vcm1hbFRyYW5zYWN0aW9uSWRQcmVjZWRlcyh4aWQsIHNuYXAtPnhtYXgpOykKKwlmb3Ig KHhpZCA9IHNuYXBzaG90LT54bWluOyBOb3JtYWxUcmFuc2FjdGlvbklkUHJlY2VkZXMoeGlkLCBz bmFwc2hvdC0+eG1heCk7KQogCXsKIAkJdm9pZAkgICAqdGVzdDsKIApAQCAtNjMyLDcgKzY3Niw3 IEBAIFNuYXBCdWlsZEluaXRpYWxTbmFwc2hvdChTbmFwQnVpbGQgKmJ1aWxkZXIpCiAJCSAqIENo ZWNrIHdoZXRoZXIgdHJhbnNhY3Rpb24gY29tbWl0dGVkIHVzaW5nIHRoZSBkZWNvZGluZyBzbmFw c2hvdAogCQkgKiBtZWFuaW5nIG9mIC0+eGlwLgogCQkgKi8KLQkJdGVzdCA9IGJzZWFyY2goJnhp ZCwgc25hcC0+eGlwLCBzbmFwLT54Y250LAorCQl0ZXN0ID0gYnNlYXJjaCgmeGlkLCBzbmFwc2hv dC0+eGlwLCBzbmFwc2hvdC0+eGNudCwKIAkJCQkJICAgc2l6ZW9mKFRyYW5zYWN0aW9uSWQpLCB4 aWRDb21wYXJhdG9yKTsKIAogCQlpZiAodGVzdCA9PSBOVUxMKQpAQCAtNjQ5LDExICs2OTMsMjIg QEAgU25hcEJ1aWxkSW5pdGlhbFNuYXBzaG90KFNuYXBCdWlsZCAqYnVpbGRlcikKIAl9CiAKIAkv KiBhZGp1c3QgcmVtYWluaW5nIHNuYXBzaG90IGZpZWxkcyBhcyBuZWVkZWQgKi8KLQlzbmFwLT5z bmFwc2hvdF90eXBlID0gU05BUFNIT1RfTVZDQzsKLQlzbmFwLT54Y250ID0gbmV3eGNudDsKLQlz bmFwLT54aXAgPSBuZXd4aXA7CisJc25hcHNob3QtPnhjbnQgPSBuZXd4Y250OworCXNuYXBzaG90 LT54aXAgPSBuZXd4aXA7CisKKwlpZiAoaW5fcGxhY2UpCisJCXJlc3VsdCA9IHNuYXBzaG90Owor CWVsc2UKKwl7CisJCXJlc3VsdCA9IENvcHlTbmFwc2hvdChzbmFwc2hvdCk7CisKKwkJLyogUmVz dG9yZSB0aGUgb3JpZ2luYWwgdmFsdWVzIHNvIHRoZSBzb3VyY2UgaXMgaW50YWN0LiAqLworCQlz bmFwc2hvdC0+eGlwID0gb2xkeGlwOworCQlzbmFwc2hvdC0+eGNudCA9IG9sZHhjbnQ7CisJfQor CXJlc3VsdC0+c25hcHNob3RfdHlwZSA9IFNOQVBTSE9UX01WQ0M7CiAKLQlyZXR1cm4gc25hcDsK KwlyZXR1cm4gcmVzdWx0OwogfQogCiAvKgpAQCAtNzEyLDcgKzc2Nyw3IEBAIFNuYXBCdWlsZEdl dE9yQnVpbGRTbmFwc2hvdChTbmFwQnVpbGQgKmJ1aWxkZXIpCiAJLyogb25seSBidWlsZCBhIG5l dyBzbmFwc2hvdCBpZiB3ZSBkb24ndCBoYXZlIGEgcHJlYnVpbHQgb25lICovCiAJaWYgKGJ1aWxk ZXItPnNuYXBzaG90ID09IE5VTEwpCiAJewotCQlidWlsZGVyLT5zbmFwc2hvdCA9IFNuYXBCdWls ZEJ1aWxkU25hcHNob3QoYnVpbGRlcik7CisJCWJ1aWxkZXItPnNuYXBzaG90ID0gU25hcEJ1aWxk QnVpbGRTbmFwc2hvdChidWlsZGVyLCBJbnZhbGlkWExvZ1JlY1B0cik7CiAJCS8qIGluY3JlYXNl IHJlZmNvdW50IGZvciB0aGUgc25hcHNob3QgYnVpbGRlciAqLwogCQlTbmFwQnVpbGRTbmFwSW5j UmVmY291bnQoYnVpbGRlci0+c25hcHNob3QpOwogCX0KQEAgLTc5Miw3ICs4NDcsNyBAQCBTbmFw QnVpbGRQcm9jZXNzQ2hhbmdlKFNuYXBCdWlsZCAqYnVpbGRlciwgVHJhbnNhY3Rpb25JZCB4aWQs IFhMb2dSZWNQdHIgbHNuKQogCQkvKiBvbmx5IGJ1aWxkIGEgbmV3IHNuYXBzaG90IGlmIHdlIGRv bid0IGhhdmUgYSBwcmVidWlsdCBvbmUgKi8KIAkJaWYgKGJ1aWxkZXItPnNuYXBzaG90ID09IE5V TEwpCiAJCXsKLQkJCWJ1aWxkZXItPnNuYXBzaG90ID0gU25hcEJ1aWxkQnVpbGRTbmFwc2hvdChi dWlsZGVyKTsKKwkJCWJ1aWxkZXItPnNuYXBzaG90ID0gU25hcEJ1aWxkQnVpbGRTbmFwc2hvdChi dWlsZGVyLCBsc24pOwogCQkJLyogaW5jcmVhc2UgcmVmY291bnQgZm9yIHRoZSBzbmFwc2hvdCBi dWlsZGVyICovCiAJCQlTbmFwQnVpbGRTbmFwSW5jUmVmY291bnQoYnVpbGRlci0+c25hcHNob3Qp OwogCQl9CkBAIC0xMTYxLDcgKzEyMTYsNyBAQCBTbmFwQnVpbGRDb21taXRUeG4oU25hcEJ1aWxk ICpidWlsZGVyLCBYTG9nUmVjUHRyIGxzbiwgVHJhbnNhY3Rpb25JZCB4aWQsCiAJCWlmIChidWls ZGVyLT5zbmFwc2hvdCkKIAkJCVNuYXBCdWlsZFNuYXBEZWNSZWZjb3VudChidWlsZGVyLT5zbmFw c2hvdCk7CiAKLQkJYnVpbGRlci0+c25hcHNob3QgPSBTbmFwQnVpbGRCdWlsZFNuYXBzaG90KGJ1 aWxkZXIpOworCQlidWlsZGVyLT5zbmFwc2hvdCA9IFNuYXBCdWlsZEJ1aWxkU25hcHNob3QoYnVp bGRlciwgbHNuKTsKIAogCQkvKiB3ZSBtaWdodCBuZWVkIHRvIGV4ZWN1dGUgaW52YWxpZGF0aW9u cywgYWRkIHNuYXBzaG90ICovCiAJCWlmICghUmVvcmRlckJ1ZmZlclhpZEhhc0Jhc2VTbmFwc2hv dChidWlsZGVyLT5yZW9yZGVyLCB4aWQpKQpAQCAtMTk4OSw3ICsyMDQ0LDcgQEAgU25hcEJ1aWxk UmVzdG9yZShTbmFwQnVpbGQgKmJ1aWxkZXIsIFhMb2dSZWNQdHIgbHNuKQogCXsKIAkJU25hcEJ1 aWxkU25hcERlY1JlZmNvdW50KGJ1aWxkZXItPnNuYXBzaG90KTsKIAl9Ci0JYnVpbGRlci0+c25h cHNob3QgPSBTbmFwQnVpbGRCdWlsZFNuYXBzaG90KGJ1aWxkZXIpOworCWJ1aWxkZXItPnNuYXBz aG90ID0gU25hcEJ1aWxkQnVpbGRTbmFwc2hvdChidWlsZGVyLCBJbnZhbGlkWExvZ1JlY1B0cik7 CiAJU25hcEJ1aWxkU25hcEluY1JlZmNvdW50KGJ1aWxkZXItPnNuYXBzaG90KTsKIAogCVJlb3Jk ZXJCdWZmZXJTZXRSZXN0YXJ0UG9pbnQoYnVpbGRlci0+cmVvcmRlciwgbHNuKTsKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0X2NsdXN0ZXIvTWFrZWZpbGUgYi9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dF9jbHVzdGVyL01ha2VmaWxlCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjMxNDcxYmI1NDYKLS0tIC9kZXYvbnVsbAor KysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dF9jbHVzdGVyL01ha2VmaWxlCkBA IC0wLDAgKzEsMzIgQEAKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCisjIE1ha2VmaWxlLS0KKyMgICAg TWFrZWZpbGUgZm9yIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0X2NsdXN0ZXIKKyMK KyMgSURFTlRJRklDQVRJT04KKyMgICAgc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXRf Y2x1c3RlcgorIworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworc3ViZGlyID0gc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vcGdvdXRwdXRfY2x1c3RlcgordG9wX2J1aWxkZGlyID0gLi4vLi4vLi4vLi4KK2lu Y2x1ZGUgJCh0b3BfYnVpbGRkaXIpL3NyYy9NYWtlZmlsZS5nbG9iYWwKKworT0JKUyA9IFwKKwkk KFdJTjMyUkVTKSBcCisJcGdvdXRwdXRfY2x1c3Rlci5vCitQR0ZJTEVERVNDID0gInBnb3V0cHV0 X2NsdXN0ZXIgLSBsb2dpY2FsIHJlcGxpY2F0aW9uIG91dHB1dCBwbHVnaW4gZm9yIENMVVNURVIg Y29tbWFuZCIKK05BTUUgPSBwZ291dHB1dF9jbHVzdGVyCisKK2FsbDogYWxsLXNoYXJlZC1saWIK KworaW5jbHVkZSAkKHRvcF9zcmNkaXIpL3NyYy9NYWtlZmlsZS5zaGxpYgorCitpbnN0YWxsOiBh bGwgaW5zdGFsbGRpcnMgaW5zdGFsbC1saWIKKworaW5zdGFsbGRpcnM6IGluc3RhbGxkaXJzLWxp YgorCit1bmluc3RhbGw6IHVuaW5zdGFsbC1saWIKKworY2xlYW4gZGlzdGNsZWFuOiBjbGVhbi1s aWIKKwlybSAtZiAkKE9CSlMpCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9w Z291dHB1dF9jbHVzdGVyL21lc29uLmJ1aWxkIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdv dXRwdXRfY2x1c3Rlci9tZXNvbi5idWlsZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwLi4wZjAzMzA2NGYyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vcGdvdXRwdXRfY2x1c3Rlci9tZXNvbi5idWlsZApAQCAtMCwwICsxLDE4IEBACisjIENv cHlyaWdodCAoYykgMjAyMi0yMDI0LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91 cAorCitwZ291dHB1dF9jbHVzdGVyX3NvdXJjZXMgPSBmaWxlcygKKyAgJ3Bnb3V0cHV0X2NsdXN0 ZXIuYycsCispCisKK2lmIGhvc3Rfc3lzdGVtID09ICd3aW5kb3dzJworICBwZ291dHB1dF9jbHVz dGVyX3NvdXJjZXMgKz0gcmNfbGliX2dlbi5wcm9jZXNzKHdpbjMydmVyX3JjLCBleHRyYV9hcmdz OiBbCisgICAgJy0tTkFNRScsICdwZ291dHB1dF9jbHVzdGVyJywKKyAgICAnLS1GSUxFREVTQycs ICdwZ291dHB1dF9jbHVzdGVyIC0gbG9naWNhbCByZXBsaWNhdGlvbiBvdXRwdXQgcGx1Z2luIGZv ciBDTFVTVEVSIGNvbW1hbmQnLF0pCitlbmRpZgorCitwZ291dHB1dF9jbHVzdGVyID0gc2hhcmVk X21vZHVsZSgncGdvdXRwdXRfY2x1c3RlcicsCisgIHBnb3V0cHV0X2NsdXN0ZXJfc291cmNlcywK KyAga3dhcmdzOiBwZ19tb2RfYXJncywKKykKKworYmFja2VuZF90YXJnZXRzICs9IHBnb3V0cHV0 X2NsdXN0ZXIKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0X2Ns dXN0ZXIvcGdvdXRwdXRfY2x1c3Rlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRw dXRfY2x1c3Rlci9wZ291dHB1dF9jbHVzdGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMC4uOWZlNDQwMTdhOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL3Bnb3V0cHV0X2NsdXN0ZXIvcGdvdXRwdXRfY2x1c3Rlci5jCkBAIC0wLDAgKzEs MzIxIEBACisvKiBUT0RPIE1vdmUgaW50byBzcmMvYmFja2VuZC9jbHVzdGVyLyAoYW5kIHJlbmFt ZT8pICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ291dHB1dF9jbHVzdGVyLmMKKyAq CQlMb2dpY2FsIFJlcGxpY2F0aW9uIG91dHB1dCBwbHVnaW4gZm9yIENMVVNURVIgY29tbWFuZAor ICoKKyAqIENvcHlyaWdodCAoYykgMjAxMi0yMDI0LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9w bWVudCBHcm91cAorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkJICBzcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9wZ291dHB1dF9jbHVzdGVyL3Bnb3V0cHV0X2NsdXN0ZXIuYworICoKKyAqLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgImFjY2Vz cy9oZWFwdG9hc3QuaCIKKyNpbmNsdWRlICJjb21tYW5kcy9jbHVzdGVyLmgiCisjaW5jbHVkZSAi cmVwbGljYXRpb24vc25hcGJ1aWxkLmgiCisKK1BHX01PRFVMRV9NQUdJQzsKKworc3RhdGljIHZv aWQgcGx1Z2luX3N0YXJ0dXAoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAorCQkJCQkJICAg T3V0cHV0UGx1Z2luT3B0aW9ucyAqb3B0LCBib29sIGlzX2luaXQpOworc3RhdGljIHZvaWQgcGx1 Z2luX3NodXRkb3duKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCk7CitzdGF0aWMgdm9pZCBw bHVnaW5fYmVnaW5fdHhuKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKKwkJCQkJCQkgUmVv cmRlckJ1ZmZlclRYTiAqdHhuKTsKK3N0YXRpYyB2b2lkIHBsdWdpbl9jb21taXRfdHhuKExvZ2lj YWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKKwkJCQkJCQkgIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwg WExvZ1JlY1B0ciBjb21taXRfbHNuKTsKK3N0YXRpYyB2b2lkIHBsdWdpbl9jaGFuZ2UoTG9naWNh bERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkgIFJl bGF0aW9uIHJlbCwgUmVvcmRlckJ1ZmZlckNoYW5nZSAqY2hhbmdlKTsKK3N0YXRpYyB2b2lkIHBs dWdpbl90cnVuY2F0ZShzdHJ1Y3QgTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAorCQkJCQkJ CVJlb3JkZXJCdWZmZXJUWE4gKnR4biwgaW50IG5yZWxhdGlvbnMsCisJCQkJCQkJUmVsYXRpb24g cmVsYXRpb25zW10sCisJCQkJCQkJUmVvcmRlckJ1ZmZlckNoYW5nZSAqY2hhbmdlKTsKK3N0YXRp YyB2b2lkIHN0b3JlX2NoYW5nZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCisJCQkJCQkg Q29uY3VycmVudENoYW5nZUtpbmQga2luZCwgSGVhcFR1cGxlIHR1cGxlLAorCQkJCQkJIFRyYW5z YWN0aW9uSWQgeGlkKTsKKwordm9pZAorX1BHX291dHB1dF9wbHVnaW5faW5pdChPdXRwdXRQbHVn aW5DYWxsYmFja3MgKmNiKQoreworCUFzc2VydFZhcmlhYmxlSXNPZlR5cGUoJl9QR19vdXRwdXRf cGx1Z2luX2luaXQsIExvZ2ljYWxPdXRwdXRQbHVnaW5Jbml0KTsKKworCWNiLT5zdGFydHVwX2Ni ID0gcGx1Z2luX3N0YXJ0dXA7CisJY2ItPmJlZ2luX2NiID0gcGx1Z2luX2JlZ2luX3R4bjsKKwlj Yi0+Y2hhbmdlX2NiID0gcGx1Z2luX2NoYW5nZTsKKwljYi0+dHJ1bmNhdGVfY2IgPSBwbHVnaW5f dHJ1bmNhdGU7CisJY2ItPmNvbW1pdF9jYiA9IHBsdWdpbl9jb21taXRfdHhuOworCWNiLT5zaHV0 ZG93bl9jYiA9IHBsdWdpbl9zaHV0ZG93bjsKK30KKworCisvKiBpbml0aWFsaXplIHRoaXMgcGx1 Z2luICovCitzdGF0aWMgdm9pZAorcGx1Z2luX3N0YXJ0dXAoTG9naWNhbERlY29kaW5nQ29udGV4 dCAqY3R4LCBPdXRwdXRQbHVnaW5PcHRpb25zICpvcHQsCisJCQkgICBib29sIGlzX2luaXQpCit7 CisJY3R4LT5vdXRwdXRfcGx1Z2luX3ByaXZhdGUgPSBOVUxMOworCisJLyogUHJvYmFibHkgdW5u ZWNlc3NhcnksIGFzIHdlIGRvbid0IHVzZSB0aGUgU1FMIGludGVyZmFjZSAuLi4gKi8KKwlvcHQt Pm91dHB1dF90eXBlID0gT1VUUFVUX1BMVUdJTl9CSU5BUllfT1VUUFVUOworCisJaWYgKGN0eC0+ b3V0cHV0X3BsdWdpbl9vcHRpb25zICE9IE5JTCkKKwl7CisJCWVyZXBvcnQoRVJST1IsCisJCQkJ KGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVycm1zZygi VGhpcyBwbHVnaW4gZG9lcyBub3QgZXhwZWN0IGFueSBvcHRpb25zIikpKTsKKwl9Cit9CisKK3N0 YXRpYyB2b2lkCitwbHVnaW5fc2h1dGRvd24oTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4KQor eworfQorCisvKgorICogQXMgd2UgZG9uJ3QgcmVsZWFzZSB0aGUgc2xvdCBkdXJpbmcgcHJvY2Vz c2luZyBvZiBwYXJ0aWN1bGFyIHRhYmxlLCB0aGVyZSdzCisgKiBubyByb29tIGZvciBTUUwgaW50 ZXJmYWNlLCBldmVuIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuIFRoZXJlZm9yZSB3ZSBuZWVkCisg KiBuZWl0aGVyIE91dHB1dFBsdWdpblByZXBhcmVXcml0ZSgpIG5vciBPdXRwdXRQbHVnaW5Xcml0 ZSgpIGluIHRoZSBwbHVnaW4KKyAqIGNhbGxiYWNrcy4gKEFsdGhvdWdoIHdlIG1pZ2h0IHdhbnQg dG8gd3JpdGUgY3VzdG9tIGNhbGxiYWNrcywgdGhpcyBBUEkKKyAqIHNlZW1zIHRvIGJlIHVubmVj ZXNzYXJpbHkgZ2VuZXJpYyBmb3Igb3VyIHB1cnBvc2VzLikKKyAqLworCisvKiBCRUdJTiBjYWxs YmFjayAqLworc3RhdGljIHZvaWQKK3BsdWdpbl9iZWdpbl90eG4oTG9naWNhbERlY29kaW5nQ29u dGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4pCit7Cit9CisKKy8qIENPTU1JVCBjYWxs YmFjayAqLworc3RhdGljIHZvaWQKK3BsdWdpbl9jb21taXRfdHhuKExvZ2ljYWxEZWNvZGluZ0Nv bnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCSAgWExvZ1JlY1B0ciBjb21t aXRfbHNuKQoreworfQorCisvKgorICogQ2FsbGJhY2sgZm9yIGluZGl2aWR1YWwgY2hhbmdlZCB0 dXBsZXMKKyAqLworc3RhdGljIHZvaWQKK3BsdWdpbl9jaGFuZ2UoTG9naWNhbERlY29kaW5nQ29u dGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkgIFJlbGF0aW9uIHJlbGF0aW9u LCBSZW9yZGVyQnVmZmVyQ2hhbmdlICpjaGFuZ2UpCit7CisJQ2x1c3RlckRlY29kaW5nU3RhdGUg KmRzdGF0ZTsKKwlTbmFwc2hvdAlzbmFwc2hvdDsKKworCWRzdGF0ZSA9IChDbHVzdGVyRGVjb2Rp bmdTdGF0ZSAqKSBjdHgtPm91dHB1dF93cml0ZXJfcHJpdmF0ZTsKKworCS8qIE9ubHkgaW50ZXJl c3RlZCBpbiBvbmUgcGFydGljdWxhciByZWxhdGlvbi4gKi8KKwlpZiAocmVsYXRpb24tPnJkX2lk ICE9IGRzdGF0ZS0+cmVsaWQpCisJCXJldHVybjsKKworCS8qCisJICogQ2F0YWxvZyBzbmFwc2hv dCBpcyBmaW5lIGJlY2F1c2UgdGhlIHRhYmxlIHdlIGFyZSBwcm9jZXNzaW5nIGlzCisJICogdGVt cG9yYXJpbHkgY29uc2lkZXJlZCBhIHVzZXIgY2F0YWxvZyB0YWJsZS4KKwkgKi8KKwlzbmFwc2hv dCA9IEdldENhdGFsb2dTbmFwc2hvdChJbnZhbGlkT2lkKTsKKwlBc3NlcnQoc25hcHNob3QtPnNu YXBzaG90X3R5cGUgPT0gU05BUFNIT1RfSElTVE9SSUNfTVZDQyk7CisJQXNzZXJ0KCFzbmFwc2hv dC0+c3Vib3ZlcmZsb3dlZCk7CisKKwkvKgorCSAqIFRoaXMgc2hvdWxkIG5vdCBoYXBwZW4sIGJ1 dCBpZiB3ZSBkb24ndCBoYXZlIGVub3VnaCBpbmZvcm1hdGlvbiB0bworCSAqIGFwcGx5IGEgbmV3 IHNuYXBzaG90LCB0aGUgY29uc2VxdWVuY2VzIHdvdWxkIGJlIGJhZC4gVGh1cyBwcmVmZXIgRVJS T1IKKwkgKiB0byBBc3NlcnQoKS4KKwkgKi8KKwlpZiAoWExvZ1JlY1B0cklzSW52YWxpZChzbmFw c2hvdC0+bHNuKSkKKwkJZXJlcG9ydChFUlJPUiwgKGVycm1zZygic25hcHNob3QgaGFzIGludmFs aWQgTFNOIikpKTsKKworCS8qCisJICogcmVvcmRlcmJ1ZmZlci5jIGNoYW5nZXMgdGhlIGNhdGFs b2cgc25hcHNob3QgYXMgc29vbiBhcyBpdCBzZWVzIGEgbmV3CisJICogQ0lEIG9yIGEgY29tbWl0 IHJlY29yZCBvZiBhIGNhdGFsb2ctY2hhbmdpbmcgdHJhbnNhY3Rpb24uCisJICovCisJaWYgKGRz dGF0ZS0+c25hcHNob3QgPT0gTlVMTCB8fCBzbmFwc2hvdC0+bHNuICE9IGRzdGF0ZS0+c25hcHNo b3RfbHNuIHx8CisJCXNuYXBzaG90LT5jdXJjaWQgIT0gZHN0YXRlLT5zbmFwc2hvdC0+Y3VyY2lk KQorCXsKKwkJLyogQ0lEIHNob3VsZCBub3QgZ28gYmFja3dhcmRzLiAqLworCQlBc3NlcnQoZHN0 YXRlLT5zbmFwc2hvdCA9PSBOVUxMIHx8CisJCQkgICBzbmFwc2hvdC0+Y3VyY2lkID49IGRzdGF0 ZS0+c25hcHNob3QtPmN1cmNpZCk7CisKKwkJLyoKKwkJICogWFhYIElzIGl0IGEgcHJvYmxlbSB0 aGF0IHRoZSBjb3B5IGlzIGNyZWF0ZWQgaW4KKwkJICogVG9wVHJhbnNhY3Rpb25Db250ZXh0Pwor CQkgKi8KKwkJZHN0YXRlLT5zbmFwc2hvdCA9IFNuYXBCdWlsZE1WQ0NGcm9tSGlzdG9yaWMoc25h cHNob3QsIGZhbHNlKTsKKwkJZHN0YXRlLT5zbmFwc2hvdF9sc24gPSBzbmFwc2hvdC0+bHNuOwor CX0KKworCS8qIERlY29kZSBlbnRyeSBkZXBlbmRpbmcgb24gaXRzIHR5cGUgKi8KKwlzd2l0Y2gg KGNoYW5nZS0+YWN0aW9uKQorCXsKKwkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfSU5TRVJU OgorCQkJeworCQkJCUhlYXBUdXBsZQluZXd0dXBsZTsKKworCQkJCW5ld3R1cGxlID0gY2hhbmdl LT5kYXRhLnRwLm5ld3R1cGxlICE9IE5VTEwgPworCQkJCQljaGFuZ2UtPmRhdGEudHAubmV3dHVw bGUgOiBOVUxMOworCisJCQkJLyoKKwkJCQkgKiBJZGVudGl0eSBjaGVja3MgaW4gdGhlIG1haW4g ZnVuY3Rpb24gc2hvdWxkIGhhdmUgbWFkZSB0aGlzCisJCQkJICogaW1wb3NzaWJsZS4KKwkJCQkg Ki8KKwkJCQlpZiAobmV3dHVwbGUgPT0gTlVMTCkKKwkJCQkJZWxvZyhFUlJPUiwgIkluY29tcGxl dGUgaW5zZXJ0IGluZm8uIik7CisKKwkJCQlzdG9yZV9jaGFuZ2UoY3R4LCBDSEFOR0VfSU5TRVJU LCBuZXd0dXBsZSwgY2hhbmdlLT50eG4tPnhpZCk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBS RU9SREVSX0JVRkZFUl9DSEFOR0VfVVBEQVRFOgorCQkJeworCQkJCUhlYXBUdXBsZQlvbGR0dXBs ZSwKKwkJCQkJCQluZXd0dXBsZTsKKworCQkJCW9sZHR1cGxlID0gY2hhbmdlLT5kYXRhLnRwLm9s ZHR1cGxlICE9IE5VTEwgPworCQkJCQljaGFuZ2UtPmRhdGEudHAub2xkdHVwbGUgOiBOVUxMOwor CQkJCW5ld3R1cGxlID0gY2hhbmdlLT5kYXRhLnRwLm5ld3R1cGxlICE9IE5VTEwgPworCQkJCQlj aGFuZ2UtPmRhdGEudHAubmV3dHVwbGUgOiBOVUxMOworCisJCQkJaWYgKG5ld3R1cGxlID09IE5V TEwpCisJCQkJCWVsb2coRVJST1IsICJJbmNvbXBsZXRlIHVwZGF0ZSBpbmZvLiIpOworCisJCQkJ aWYgKG9sZHR1cGxlICE9IE5VTEwpCisJCQkJCXN0b3JlX2NoYW5nZShjdHgsIENIQU5HRV9VUERB VEVfT0xELCBvbGR0dXBsZSwKKwkJCQkJCQkJIGNoYW5nZS0+dHhuLT54aWQpOworCisJCQkJc3Rv cmVfY2hhbmdlKGN0eCwgQ0hBTkdFX1VQREFURV9ORVcsIG5ld3R1cGxlLAorCQkJCQkJCSBjaGFu Z2UtPnR4bi0+eGlkKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFJFT1JERVJfQlVGRkVSX0NI QU5HRV9ERUxFVEU6CisJCQl7CisJCQkJSGVhcFR1cGxlCW9sZHR1cGxlOworCisJCQkJb2xkdHVw bGUgPSBjaGFuZ2UtPmRhdGEudHAub2xkdHVwbGUgPworCQkJCQljaGFuZ2UtPmRhdGEudHAub2xk dHVwbGUgOiBOVUxMOworCisJCQkJaWYgKG9sZHR1cGxlID09IE5VTEwpCisJCQkJCWVsb2coRVJS T1IsICJJbmNvbXBsZXRlIGRlbGV0ZSBpbmZvLiIpOworCisJCQkJc3RvcmVfY2hhbmdlKGN0eCwg Q0hBTkdFX0RFTEVURSwgb2xkdHVwbGUsIGNoYW5nZS0+dHhuLT54aWQpOworCQkJfQorCQkJYnJl YWs7CisJCWRlZmF1bHQ6CisJCQkvKiBTaG91bGQgbm90IGNvbWUgaGVyZSAqLworCQkJQXNzZXJ0 KGZhbHNlKTsKKwkJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQKK3BsdWdpbl90cnVuY2F0 ZShzdHJ1Y3QgTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0 eG4sCisJCQkJaW50IG5yZWxhdGlvbnMsIFJlbGF0aW9uIHJlbGF0aW9uc1tdLAorCQkJCVJlb3Jk ZXJCdWZmZXJDaGFuZ2UgKmNoYW5nZSkKK3sKKwlDbHVzdGVyRGVjb2RpbmdTdGF0ZSAqZHN0YXRl OworCWludAkJaTsKKwlSZWxhdGlvbglyZWxhdGlvbiA9IE5VTEw7CisKKwlkc3RhdGUgPSAoQ2x1 c3RlckRlY29kaW5nU3RhdGUgKikgY3R4LT5vdXRwdXRfd3JpdGVyX3ByaXZhdGU7CisKKwkvKiBG aW5kIHRoZSByZWxhdGlvbiB3ZSBhcmUgcHJvY2Vzc2luZy4gKi8KKwlmb3IgKGkgPSAwOyBpIDwg bnJlbGF0aW9uczsgaSsrKQorCXsKKwkJcmVsYXRpb24gPSByZWxhdGlvbnNbaV07CisKKwkJaWYg KFJlbGF0aW9uR2V0UmVsaWQocmVsYXRpb24pID09IGRzdGF0ZS0+cmVsaWQpCisJCQlicmVhazsK Kwl9CisKKwkvKiBJcyB0aGlzIHRydW5jYXRpb24gb2YgYW5vdGhlciByZWxhdGlvbj8gKi8KKwlp ZiAoaSA9PSBucmVsYXRpb25zKQorCQlyZXR1cm47CisKKwlzdG9yZV9jaGFuZ2UoY3R4LCBDSEFO R0VfVFJVTkNBVEUsIE5VTEwsIEludmFsaWRUcmFuc2FjdGlvbklkKTsKK30KKworLyogU3RvcmUg Y29uY3VycmVudCBkYXRhIGNoYW5nZS4gKi8KK3N0YXRpYyB2b2lkCitzdG9yZV9jaGFuZ2UoTG9n aWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBDb25jdXJyZW50Q2hhbmdlS2luZCBraW5kLAorCQkJ IEhlYXBUdXBsZSB0dXBsZSwgVHJhbnNhY3Rpb25JZCB4aWQpCit7CisJQ2x1c3RlckRlY29kaW5n U3RhdGUgKmRzdGF0ZTsKKwljaGFyCSAgICpjaGFuZ2VfcmF3OworCUNvbmN1cnJlbnRDaGFuZ2Ug KmNoYW5nZTsKKwlib29sCQlmbGF0dGVuZWQgPSBmYWxzZTsKKwlTaXplCQlzaXplOworCURhdHVt CQl2YWx1ZXNbMV07CisJYm9vbAkJaXNudWxsWzFdOworCWNoYXIJICAgKmRzdDsKKworCWRzdGF0 ZSA9IChDbHVzdGVyRGVjb2RpbmdTdGF0ZSAqKSBjdHgtPm91dHB1dF93cml0ZXJfcHJpdmF0ZTsK KworCXNpemUgPSBNQVhBTElHTihWQVJIRFJTWikgKyBzaXplb2YoQ29uY3VycmVudENoYW5nZSk7 CisKKwlpZiAodHVwbGUpCisJeworCQkvKgorCQkgKiBSZW9yZGVyQnVmZmVyQ29tbWl0KCkgc3Rv cmVzIHRoZSBUT0FTVCBjaHVua3MgaW4gaXRzIHByaXZhdGUgbWVtb3J5CisJCSAqIGNvbnRleHQg YW5kIGZyZWVzIHRoZW0gYWZ0ZXIgaGF2aW5nIGNhbGxlZAorCQkgKiBhcHBseV9jaGFuZ2UoKS4g VGhlcmVmb3JlIHdlIG5lZWQgZmxhdCBjb3B5IChpbmNsdWRpbmcgVE9BU1QpIHRoYXQKKwkJICog d2UgZXZlbnR1YWxseSBjb3B5IGludG8gdGhlIG1lbW9yeSBjb250ZXh0IHdoaWNoIGlzIGF2YWls YWJsZSB0bworCQkgKiBkZWNvZGVfY29uY3VycmVudF9jaGFuZ2VzKCkuCisJCSAqLworCQlpZiAo SGVhcFR1cGxlSGFzRXh0ZXJuYWwodHVwbGUpKQorCQl7CisJCQkvKgorCQkJICogdG9hc3RfZmxh dHRlbl90dXBsZV90b19kYXR1bSgpIG1pZ2h0IGJlIG1vcmUgY29udmVuaWVudCBidXQgd2UKKwkJ CSAqIGRvbid0IHdhbnQgdGhlIGRlY29tcHJlc3Npb24gaXQgZG9lcy4KKwkJCSAqLworCQkJdHVw bGUgPSB0b2FzdF9mbGF0dGVuX3R1cGxlKHR1cGxlLCBkc3RhdGUtPnR1cGRlc2MpOworCQkJZmxh dHRlbmVkID0gdHJ1ZTsKKwkJfQorCisJCXNpemUgKz0gdHVwbGUtPnRfbGVuOworCX0KKworCS8q IFhYWCBJc24ndCB0aGVyZSBhbnkgZnVuY3Rpb24gLyBtYWNybyB0byBkbyB0aGlzPyAqLworCWlm IChzaXplID49IDB4M0ZGRkZGRkYpCisJCWVsb2coRVJST1IsICJDaGFuZ2UgaXMgdG9vIGJpZy4i KTsKKworCS8qIENvbnN0cnVjdCB0aGUgY2hhbmdlLiAqLworCWNoYW5nZV9yYXcgPSAoY2hhciAq KSBwYWxsb2MwKHNpemUpOworCVNFVF9WQVJTSVpFKGNoYW5nZV9yYXcsIHNpemUpOworCWNoYW5n ZSA9IChDb25jdXJyZW50Q2hhbmdlICopIFZBUkRBVEEoY2hhbmdlX3Jhdyk7CisJY2hhbmdlLT5r aW5kID0ga2luZDsKKworCS8qIE5vIG90aGVyIGluZm9ybWF0aW9uIGlzIG5lZWRlZCBmb3IgVFJV TkNBVEUuICovCisJaWYgKGNoYW5nZS0+a2luZCA9PSBDSEFOR0VfVFJVTkNBVEUpCisJCWdvdG8g c3RvcmU7CisKKwkvKgorCSAqIENvcHkgdGhlIHR1cGxlLgorCSAqCisJICogQ0FVVElPTjogY2hh bmdlLT50dXBfZGF0YS50X2RhdGEgbXVzdCBiZSBmaXhlZCBvbiByZXRyaWV2YWwhCisJICovCisJ bWVtY3B5KCZjaGFuZ2UtPnR1cF9kYXRhLCB0dXBsZSwgc2l6ZW9mKEhlYXBUdXBsZURhdGEpKTsK Kwlkc3QgPSAoY2hhciAqKSBjaGFuZ2UgKyBzaXplb2YoQ29uY3VycmVudENoYW5nZSk7CisJbWVt Y3B5KGRzdCwgdHVwbGUtPnRfZGF0YSwgdHVwbGUtPnRfbGVuKTsKKworCS8qIEluaXRpYWxpemUg dGhlIG90aGVyIGZpZWxkcy4gKi8KKwljaGFuZ2UtPnhpZCA9IHhpZDsKKwljaGFuZ2UtPnNuYXBz aG90ID0gZHN0YXRlLT5zbmFwc2hvdDsKKwlkc3RhdGUtPnNuYXBzaG90LT5hY3RpdmVfY291bnQr KzsKKworCS8qIFRoZSBkYXRhIGhhcyBiZWVuIGNvcGllZC4gKi8KKwlpZiAoZmxhdHRlbmVkKQor CQlwZnJlZSh0dXBsZSk7CisKK3N0b3JlOgorCS8qIFN0b3JlIGFzIHR1cGxlIG9mIDEgYnl0ZWEg Y29sdW1uLiAqLworCXZhbHVlc1swXSA9IFBvaW50ZXJHZXREYXR1bShjaGFuZ2VfcmF3KTsKKwlp c251bGxbMF0gPSBmYWxzZTsKKwl0dXBsZXN0b3JlX3B1dHZhbHVlcyhkc3RhdGUtPnRzdG9yZSwg ZHN0YXRlLT50dXBkZXNjX2NoYW5nZSwKKwkJCQkJCSB2YWx1ZXMsIGlzbnVsbCk7CisKKwkvKiBB Y2NvdW50aW5nLiAqLworCWRzdGF0ZS0+bmNoYW5nZXMrKzsKKworCS8qIENsZWFudXAuICovCisJ cGZyZWUoY2hhbmdlX3Jhdyk7Cit9CisKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv aXBjL2lwY2kuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYwppbmRleCAyMTAwMTUw ZjAxLi5hODRkZTA2MTFhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNp LmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jCkBAIC0yNSw2ICsyNSw3IEBA CiAjaW5jbHVkZSAiYWNjZXNzL3hsb2dwcmVmZXRjaGVyLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hs b2dyZWNvdmVyeS5oIgogI2luY2x1ZGUgImNvbW1hbmRzL2FzeW5jLmgiCisjaW5jbHVkZSAiY29t bWFuZHMvY2x1c3Rlci5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBnc3Rh dC5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5oIgpAQCAtMTUyLDYgKzE1Myw3 IEBAIENhbGN1bGF0ZVNobWVtU2l6ZShpbnQgKm51bV9zZW1hcGhvcmVzKQogCXNpemUgPSBhZGRf c2l6ZShzaXplLCBXYWl0RXZlbnRDdXN0b21TaG1lbVNpemUoKSk7CiAJc2l6ZSA9IGFkZF9zaXpl KHNpemUsIEluamVjdGlvblBvaW50U2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6ZShzaXpl LCBTbG90U3luY1NobWVtU2l6ZSgpKTsKKwlzaXplID0gYWRkX3NpemUoc2l6ZSwgQ2x1c3RlclNo bWVtU2l6ZSgpKTsKICNpZmRlZiBFWEVDX0JBQ0tFTkQKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwg U2htZW1CYWNrZW5kQXJyYXlTaXplKCkpOwogI2VuZGlmCkBAIC0zNTcsNiArMzU5LDcgQEAgQ3Jl YXRlT3JBdHRhY2hTaG1lbVN0cnVjdHModm9pZCkKIAlTdGF0c1NobWVtSW5pdCgpOwogCVdhaXRF dmVudEN1c3RvbVNobWVtSW5pdCgpOwogCUluamVjdGlvblBvaW50U2htZW1Jbml0KCk7CisJQ2x1 c3RlclNobWVtSW5pdCgpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdGNvcC91 dGlsaXR5LmMgYi9zcmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYwppbmRleCBmYTY2YjgwMTdlLi5h NmRkYTliNTIwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYworKysgYi9z cmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYwpAQCAtMTI5OSw2ICsxMjk5LDE3IEBAIFByb2Nlc3NV dGlsaXR5U2xvdyhQYXJzZVN0YXRlICpwc3RhdGUsCiAJCQkJCWxvY2ttb2RlID0gQWx0ZXJUYWJs ZUdldExvY2tMZXZlbChhdHN0bXQtPmNtZHMpOwogCQkJCQlyZWxpZCA9IEFsdGVyVGFibGVMb29r dXBSZWxhdGlvbihhdHN0bXQsIGxvY2ttb2RlKTsKIAorCQkJCQkvKgorCQkJCQkgKiBJZiBsb2Nr bW9kZSBhbGxvd3MsIGNoZWNrIGlmIFZBQ1VVTSBGVUxMIC8gQ0xVU1RFUgorCQkJCQkgKiBDT05D VVJSRU5UIGlzIGluIHByb2dyZXNzLiBJZiBsb2NrbW9kZSBpcyB0b28gd2VhaywKKwkJCQkJICog Y2x1c3Rlcl9yZWwoKSBzaG91bGQgZGV0ZWN0IGluY29tcGF0aWJsZSBERExzIGV4ZWN1dGVkCisJ CQkJCSAqIGJ5IHVzLgorCQkJCQkgKgorCQkJCQkgKiBYWFggV2UgbWlnaHQgc2tpcCB0aGUgY2hh bmdlcyBmb3IgRERMcyB3aGljaCBkbyBub3QKKwkJCQkJICogY2hhbmdlIHRoZSB0dXBsZSBkZXNj cmlwdG9yLgorCQkJCQkgKi8KKwkJCQkJY2hlY2tfZm9yX2NvbmN1cnJlbnRfY2x1c3RlcihyZWxp ZCwgbG9ja21vZGUpOworCiAJCQkJCWlmIChPaWRJc1ZhbGlkKHJlbGlkKSkKIAkJCQkJewogCQkJ CQkJQWx0ZXJUYWJsZVV0aWxpdHlDb250ZXh0IGF0Y29udGV4dDsKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3V0aWxzL2FjdGl2aXR5L2JhY2tlbmRfcHJvZ3Jlc3MuYyBiL3NyYy9iYWNrZW5kL3V0 aWxzL2FjdGl2aXR5L2JhY2tlbmRfcHJvZ3Jlc3MuYwppbmRleCBlN2M4YmZiYTk0Li5jNTJlYzky YTk3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS9iYWNrZW5kX3Byb2dy ZXNzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvYmFja2VuZF9wcm9ncmVzcy5j CkBAIC0xNjMsMyArMTYzLDE5IEBAIHBnc3RhdF9wcm9ncmVzc19lbmRfY29tbWFuZCh2b2lkKQog CWJlZW50cnktPnN0X3Byb2dyZXNzLmNvbW1hbmRfdGFyZ2V0ID0gSW52YWxpZE9pZDsKIAlQR1NU QVRfRU5EX1dSSVRFX0FDVElWSVRZKGJlZW50cnkpOwogfQorCit2b2lkCitwZ3N0YXRfcHJvZ3Jl c3NfcmVzdG9yZV9zdGF0ZShQZ0JhY2tlbmRQcm9ncmVzcyAqYmFja3VwKQoreworCXZvbGF0aWxl IFBnQmFja2VuZFN0YXR1cyAqYmVlbnRyeSA9IE15QkVFbnRyeTsKKworCWlmICghYmVlbnRyeSB8 fCAhcGdzdGF0X3RyYWNrX2FjdGl2aXRpZXMpCisJCXJldHVybjsKKworCVBHU1RBVF9CRUdJTl9X UklURV9BQ1RJVklUWShiZWVudHJ5KTsKKwliZWVudHJ5LT5zdF9wcm9ncmVzcy5jb21tYW5kID0g YmFja3VwLT5jb21tYW5kOworCWJlZW50cnktPnN0X3Byb2dyZXNzLmNvbW1hbmRfdGFyZ2V0ID0g YmFja3VwLT5jb21tYW5kX3RhcmdldDsKKwltZW1jcHkoTXlCRUVudHJ5LT5zdF9wcm9ncmVzcy5w YXJhbSwgYmFja3VwLT5wYXJhbSwKKwkJICAgc2l6ZW9mKGJlZW50cnktPnN0X3Byb2dyZXNzLnBh cmFtKSk7CisJUEdTVEFUX0VORF9XUklURV9BQ1RJVklUWShiZWVudHJ5KTsKK30KZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnRfbmFtZXMudHh0IGIvc3Jj L2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudF9uYW1lcy50eHQKaW5kZXggZGIzN2Jl ZWFhZS4uODI0NWJlNzg0NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkv d2FpdF9ldmVudF9uYW1lcy50eHQKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvd2Fp dF9ldmVudF9uYW1lcy50eHQKQEAgLTM0NSw2ICszNDUsNyBAQCBXQUxTdW1tYXJpemVyCSJXYWl0 aW5nIHRvIHJlYWQgb3IgdXBkYXRlIFdBTCBzdW1tYXJpemF0aW9uIHN0YXRlLiIKIERTTVJlZ2lz dHJ5CSJXYWl0aW5nIHRvIHJlYWQgb3IgdXBkYXRlIHRoZSBkeW5hbWljIHNoYXJlZCBtZW1vcnkg cmVnaXN0cnkuIgogSW5qZWN0aW9uUG9pbnQJIldhaXRpbmcgdG8gcmVhZCBvciB1cGRhdGUgaW5m b3JtYXRpb24gcmVsYXRlZCB0byBpbmplY3Rpb24gcG9pbnRzLiIKIFNlcmlhbENvbnRyb2wJIldh aXRpbmcgdG8gcmVhZCBvciB1cGRhdGUgc2hhcmVkIDxmaWxlbmFtZT5wZ19zZXJpYWw8L2ZpbGVu YW1lPiBzdGF0ZS4iCitDbHVzdGVyZWRSZWxzCSJXYWl0aW5nIHRvIHJlYWQgb3IgdXBkYXRlIGlu Zm9ybWF0aW9uIG9uIHRhYmxlcyBiZWluZyBjbHVzdGVyZWQgY29uY3VycmVudGx5LiIKIAogIwog IyBFTkQgT0YgUFJFREVGSU5FRCBMV0xPQ0tTIChETyBOT1QgQ0hBTkdFIFRISVMgTElORSkKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL2ludmFsLmMgYi9zcmMvYmFja2VuZC91 dGlscy9jYWNoZS9pbnZhbC5jCmluZGV4IDYwM2FhNDE1N2IuLjVhMmQ1ZDYxMzggMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL2ludmFsLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRp bHMvY2FjaGUvaW52YWwuYwpAQCAtMTM3Myw2ICsxMzczLDI4IEBAIENhY2hlSW52YWxpZGF0ZVJl bGNhY2hlKFJlbGF0aW9uIHJlbGF0aW9uKQogCVJlZ2lzdGVyUmVsY2FjaGVJbnZhbGlkYXRpb24o ZGF0YWJhc2VJZCwgcmVsYXRpb25JZCk7CiB9CiAKKy8qCisgKiBDYWNoZUludmFsaWRhdGVSZWxj YWNoZUltbWVkaWF0ZQorICoJCVNlbmQgaW52YWxpZGF0aW9uIG1lc3NhZ2UgZm9yIHRoZSBzcGVj aWZpZWQgcmVsYXRpb24ncyByZWxjYWNoZSBlbnRyeS4KKyAqCisgKiBDdXJyZW50bHkgdGhpcyBp cyB1c2VkIGluIFZBQ1VVTSBGVUxML0NMVVNURVIgQ09OQ1VSUkVOVExZLCB0byBtYWtlIHN1cmUK KyAqIHRoYXQgb3RoZXIgYmFja2VuZHMgYXJlIGF3YXJlIHRoYXQgdGhlIGNvbW1hbmQgaXMgYmVp bmcgZXhlY3V0ZWQgZm9yIHRoZQorICogcmVsYXRpb24uCisgKi8KK3ZvaWQKK0NhY2hlSW52YWxp ZGF0ZVJlbGNhY2hlSW1tZWRpYXRlKFJlbGF0aW9uIHJlbGF0aW9uKQoreworCVNoYXJlZEludmFs aWRhdGlvbk1lc3NhZ2UgbXNnOworCisJbXNnLnJjLmlkID0gU0hBUkVESU5WQUxSRUxDQUNIRV9J RDsKKwltc2cucmMuZGJJZCA9IE15RGF0YWJhc2VJZDsKKwltc2cucmMucmVsSWQgPSBSZWxhdGlv bkdldFJlbGlkKHJlbGF0aW9uKTsKKwkvKiBjaGVjayBBZGRDYXRjYWNoZUludmFsaWRhdGlvbk1l c3NhZ2UoKSBmb3IgYW4gZXhwbGFuYXRpb24gKi8KKwlWQUxHUklORF9NQUtFX01FTV9ERUZJTkVE KCZtc2csIHNpemVvZihtc2cpKTsKKworCVNlbmRTaGFyZWRJbnZhbGlkTWVzc2FnZXMoJm1zZywg MSk7Cit9CisKIC8qCiAgKiBDYWNoZUludmFsaWRhdGVSZWxjYWNoZUFsbAogICoJCVJlZ2lzdGVy IGludmFsaWRhdGlvbiBvZiB0aGUgd2hvbGUgcmVsY2FjaGUgYXQgdGhlIGVuZCBvZiBjb21tYW5k LgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYyBiL3NyYy9i YWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMKaW5kZXggNjZlZDI0ZTQwMS4uNzA4ZDFlZTI3 YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYworKysgYi9z cmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jCkBAIC02NCw2ICs2NCw3IEBACiAjaW5j bHVkZSAiY2F0YWxvZy9wZ190eXBlLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9zY2hlbWFwZy5oIgog I2luY2x1ZGUgImNhdGFsb2cvc3RvcmFnZS5oIgorI2luY2x1ZGUgImNvbW1hbmRzL2NsdXN0ZXIu aCIKICNpbmNsdWRlICJjb21tYW5kcy9wb2xpY3kuaCIKICNpbmNsdWRlICJjb21tYW5kcy9wdWJs aWNhdGlvbmNtZHMuaCIKICNpbmNsdWRlICJjb21tYW5kcy90cmlnZ2VyLmgiCkBAIC0xMjU3LDYg KzEyNTgsMTAgQEAgcmV0cnk6CiAJLyogbWFrZSBzdXJlIHJlbGF0aW9uIGlzIG1hcmtlZCBhcyBo YXZpbmcgbm8gb3BlbiBmaWxlIHlldCAqLwogCXJlbGF0aW9uLT5yZF9zbWdyID0gTlVMTDsKIAor CS8qIElzIENMVVNURVIgQ09OQ1VSUkVOVExZIGluIHByb2dyZXNzPyAqLworCXJlbGF0aW9uLT5y ZF9jbHVzdGVyX2NvbmN1cnJlbnQgPQorCQlpc19jb25jdXJyZW50X2NsdXN0ZXJfaW5fcHJvZ3Jl c3ModGFyZ2V0UmVsSWQpOworCiAJLyoKIAkgKiBub3cgd2UgY2FuIGZyZWUgdGhlIG1lbW9yeSBh bGxvY2F0ZWQgZm9yIHBnX2NsYXNzX3R1cGxlCiAJICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC91dGlscy90aW1lL3NuYXBtZ3IuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL3RpbWUvc25hcG1nci5j CmluZGV4IDdkMmIzNGQ0ZjIuLjZiZTBmZWY4NGMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0 aWxzL3RpbWUvc25hcG1nci5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL3RpbWUvc25hcG1nci5j CkBAIC0xNTUsOSArMTU1LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgRXhwb3J0ZWRTbmFwc2hvdAogc3Rh dGljIExpc3QgKmV4cG9ydGVkU25hcHNob3RzID0gTklMOwogCiAvKiBQcm90b3R5cGVzIGZvciBs b2NhbCBmdW5jdGlvbnMgKi8KLXN0YXRpYyBTbmFwc2hvdCBDb3B5U25hcHNob3QoU25hcHNob3Qg c25hcHNob3QpOwogc3RhdGljIHZvaWQgVW5yZWdpc3RlclNuYXBzaG90Tm9Pd25lcihTbmFwc2hv dCBzbmFwc2hvdCk7Ci1zdGF0aWMgdm9pZCBGcmVlU25hcHNob3QoU25hcHNob3Qgc25hcHNob3Qp Owogc3RhdGljIHZvaWQgU25hcHNob3RSZXNldFhtaW4odm9pZCk7CiAKIC8qIFJlc291cmNlT3du ZXIgY2FsbGJhY2tzIHRvIHRyYWNrIHNuYXBzaG90IHJlZmVyZW5jZXMgKi8KQEAgLTU3MCw3ICs1 NjgsNyBAQCBTZXRUcmFuc2FjdGlvblNuYXBzaG90KFNuYXBzaG90IHNvdXJjZXNuYXAsIFZpcnR1 YWxUcmFuc2FjdGlvbklkICpzb3VyY2V2eGlkLAogICogVGhlIGNvcHkgaXMgcGFsbG9jJ2QgaW4g VG9wVHJhbnNhY3Rpb25Db250ZXh0IGFuZCBoYXMgaW5pdGlhbCByZWZjb3VudHMgc2V0CiAgKiB0 byAwLiAgVGhlIHJldHVybmVkIHNuYXBzaG90IGhhcyB0aGUgY29waWVkIGZsYWcgc2V0LgogICov Ci1zdGF0aWMgU25hcHNob3QKK1NuYXBzaG90CiBDb3B5U25hcHNob3QoU25hcHNob3Qgc25hcHNo b3QpCiB7CiAJU25hcHNob3QJbmV3c25hcDsKQEAgLTYyNiw3ICs2MjQsNyBAQCBDb3B5U25hcHNo b3QoU25hcHNob3Qgc25hcHNob3QpCiAgKiBGcmVlU25hcHNob3QKICAqCQlGcmVlIHRoZSBtZW1v cnkgYXNzb2NpYXRlZCB3aXRoIGEgc25hcHNob3QuCiAgKi8KLXN0YXRpYyB2b2lkCit2b2lkCiBG cmVlU25hcHNob3QoU25hcHNob3Qgc25hcHNob3QpCiB7CiAJQXNzZXJ0KHNuYXBzaG90LT5yZWdk X2NvdW50ID09IDApOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wc3FsL3RhYi1jb21wbGV0ZS5jIGIv c3JjL2Jpbi9wc3FsL3RhYi1jb21wbGV0ZS5jCmluZGV4IGQ0NTNlMjI0ZDkuLjZjYWI2ZWQ1ZWUg MTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcHNxbC90YWItY29tcGxldGUuYworKysgYi9zcmMvYmluL3Bz cWwvdGFiLWNvbXBsZXRlLmMKQEAgLTI3ODcsNyArMjc4Nyw3IEBAIHBzcWxfY29tcGxldGlvbihj b25zdCBjaGFyICp0ZXh0LCBpbnQgc3RhcnQsIGludCBlbmQpCiAJCSAqIG9uZSB3b3JkLCBzbyB0 aGUgYWJvdmUgdGVzdCBpcyBjb3JyZWN0LgogCQkgKi8KIAkJaWYgKGVuZHNfd2l0aChwcmV2X3dk LCAnKCcpIHx8IGVuZHNfd2l0aChwcmV2X3dkLCAnLCcpKQotCQkJQ09NUExFVEVfV0lUSCgiVkVS Qk9TRSIpOworCQkJQ09NUExFVEVfV0lUSCgiVkVSQk9TRSIsICJDT05DVVJSRU5UTFkiKTsKIAl9 CiAKIC8qIENPTU1FTlQgKi8KQEAgLTQ3NjQsNyArNDc2NCw4IEBAIHBzcWxfY29tcGxldGlvbihj b25zdCBjaGFyICp0ZXh0LCBpbnQgc3RhcnQsIGludCBlbmQpCiAJCQkJCQkgICJESVNBQkxFX1BB R0VfU0tJUFBJTkciLCAiU0tJUF9MT0NLRUQiLAogCQkJCQkJICAiSU5ERVhfQ0xFQU5VUCIsICJQ Uk9DRVNTX01BSU4iLCAiUFJPQ0VTU19UT0FTVCIsCiAJCQkJCQkgICJUUlVOQ0FURSIsICJQQVJB TExFTCIsICJTS0lQX0RBVEFCQVNFX1NUQVRTIiwKLQkJCQkJCSAgIk9OTFlfREFUQUJBU0VfU1RB VFMiLCAiQlVGRkVSX1VTQUdFX0xJTUlUIik7CisJCQkJCQkgICJPTkxZX0RBVEFCQVNFX1NUQVRT IiwgIkJVRkZFUl9VU0FHRV9MSU1JVCIsCisJCQkJCQkgICJDT05DVVJSRU5UTFkiKTsKIAkJZWxz ZSBpZiAoVGFpbE1hdGNoZXMoIkZVTEx8RlJFRVpFfEFOQUxZWkV8VkVSQk9TRXxESVNBQkxFX1BB R0VfU0tJUFBJTkd8U0tJUF9MT0NLRUR8UFJPQ0VTU19NQUlOfFBST0NFU1NfVE9BU1R8VFJVTkNB VEV8U0tJUF9EQVRBQkFTRV9TVEFUU3xPTkxZX0RBVEFCQVNFX1NUQVRTIikpCiAJCQlDT01QTEVU RV9XSVRIKCJPTiIsICJPRkYiKTsKIAkJZWxzZSBpZiAoVGFpbE1hdGNoZXMoIklOREVYX0NMRUFO VVAiKSkKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaCBiL3NyYy9pbmNs dWRlL2FjY2Vzcy9oZWFwYW0uaAppbmRleCA5ZTlhZWM4OGE2Li5lODdlYjJmODYxIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNz L2hlYXBhbS5oCkBAIC0zMTYsMjEgKzMxNiwyNCBAQCBleHRlcm4gQnVsa0luc2VydFN0YXRlIEdl dEJ1bGtJbnNlcnRTdGF0ZSh2b2lkKTsKIGV4dGVybiB2b2lkIEZyZWVCdWxrSW5zZXJ0U3RhdGUo QnVsa0luc2VydFN0YXRlKTsKIGV4dGVybiB2b2lkIFJlbGVhc2VCdWxrSW5zZXJ0U3RhdGVQaW4o QnVsa0luc2VydFN0YXRlIGJpc3RhdGUpOwogCi1leHRlcm4gdm9pZCBoZWFwX2luc2VydChSZWxh dGlvbiByZWxhdGlvbiwgSGVhcFR1cGxlIHR1cCwgQ29tbWFuZElkIGNpZCwKLQkJCQkJCWludCBv cHRpb25zLCBCdWxrSW5zZXJ0U3RhdGUgYmlzdGF0ZSk7CitleHRlcm4gdm9pZCBoZWFwX2luc2Vy dChSZWxhdGlvbiByZWxhdGlvbiwgSGVhcFR1cGxlIHR1cCwgVHJhbnNhY3Rpb25JZCB4aWQsCisJ CQkJCQlDb21tYW5kSWQgY2lkLCBpbnQgb3B0aW9ucywgQnVsa0luc2VydFN0YXRlIGJpc3RhdGUp OwogZXh0ZXJuIHZvaWQgaGVhcF9tdWx0aV9pbnNlcnQoUmVsYXRpb24gcmVsYXRpb24sIHN0cnVj dCBUdXBsZVRhYmxlU2xvdCAqKnNsb3RzLAogCQkJCQkJCSAgaW50IG50dXBsZXMsIENvbW1hbmRJ ZCBjaWQsIGludCBvcHRpb25zLAogCQkJCQkJCSAgQnVsa0luc2VydFN0YXRlIGJpc3RhdGUpOwog ZXh0ZXJuIFRNX1Jlc3VsdCBoZWFwX2RlbGV0ZShSZWxhdGlvbiByZWxhdGlvbiwgSXRlbVBvaW50 ZXIgdGlkLAotCQkJCQkJCSBDb21tYW5kSWQgY2lkLCBTbmFwc2hvdCBjcm9zc2NoZWNrLCBib29s IHdhaXQsCi0JCQkJCQkJIHN0cnVjdCBUTV9GYWlsdXJlRGF0YSAqdG1mZCwgYm9vbCBjaGFuZ2lu Z1BhcnQpOworCQkJCQkJCSBUcmFuc2FjdGlvbklkIHhpZCwgQ29tbWFuZElkIGNpZCwKKwkJCQkJ CQkgU25hcHNob3QgY3Jvc3NjaGVjaywgYm9vbCB3YWl0LAorCQkJCQkJCSBzdHJ1Y3QgVE1fRmFp bHVyZURhdGEgKnRtZmQsIGJvb2wgY2hhbmdpbmdQYXJ0LAorCQkJCQkJCSBib29sIHdhbF9sb2dp Y2FsKTsKIGV4dGVybiB2b2lkIGhlYXBfZmluaXNoX3NwZWN1bGF0aXZlKFJlbGF0aW9uIHJlbGF0 aW9uLCBJdGVtUG9pbnRlciB0aWQpOwogZXh0ZXJuIHZvaWQgaGVhcF9hYm9ydF9zcGVjdWxhdGl2 ZShSZWxhdGlvbiByZWxhdGlvbiwgSXRlbVBvaW50ZXIgdGlkKTsKIGV4dGVybiBUTV9SZXN1bHQg aGVhcF91cGRhdGUoUmVsYXRpb24gcmVsYXRpb24sIEl0ZW1Qb2ludGVyIG90aWQsCi0JCQkJCQkJ IEhlYXBUdXBsZSBuZXd0dXAsCisJCQkJCQkJIEhlYXBUdXBsZSBuZXd0dXAsIFRyYW5zYWN0aW9u SWQgeGlkLAogCQkJCQkJCSBDb21tYW5kSWQgY2lkLCBTbmFwc2hvdCBjcm9zc2NoZWNrLCBib29s IHdhaXQsCiAJCQkJCQkJIHN0cnVjdCBUTV9GYWlsdXJlRGF0YSAqdG1mZCwgTG9ja1R1cGxlTW9k ZSAqbG9ja21vZGUsCi0JCQkJCQkJIFRVX1VwZGF0ZUluZGV4ZXMgKnVwZGF0ZV9pbmRleGVzKTsK KwkJCQkJCQkgVFVfVXBkYXRlSW5kZXhlcyAqdXBkYXRlX2luZGV4ZXMsCisJCQkJCQkJIGJvb2wg d2FsX2xvZ2ljYWwpOwogZXh0ZXJuIFRNX1Jlc3VsdCBoZWFwX2xvY2tfdHVwbGUoUmVsYXRpb24g cmVsYXRpb24sIEhlYXBUdXBsZSB0dXBsZSwKIAkJCQkJCQkJIENvbW1hbmRJZCBjaWQsIExvY2tU dXBsZU1vZGUgbW9kZSwgTG9ja1dhaXRQb2xpY3kgd2FpdF9wb2xpY3ksCiAJCQkJCQkJCSBib29s IGZvbGxvd191cGRhdGVzLApAQCAtNDA1LDYgKzQwOCwxMCBAQCBleHRlcm4gSFRTVl9SZXN1bHQg SGVhcFR1cGxlU2F0aXNmaWVzVmFjdXVtSG9yaXpvbihIZWFwVHVwbGUgaHR1cCwgQnVmZmVyIGJ1 ZmZlcgogCQkJCQkJCQkJCQkJICAgVHJhbnNhY3Rpb25JZCAqZGVhZF9hZnRlcik7CiBleHRlcm4g dm9pZCBIZWFwVHVwbGVTZXRIaW50Qml0cyhIZWFwVHVwbGVIZWFkZXIgdHVwbGUsIEJ1ZmZlciBi dWZmZXIsCiAJCQkJCQkJCSB1aW50MTYgaW5mb21hc2ssIFRyYW5zYWN0aW9uSWQgeGlkKTsKK2V4 dGVybiBib29sIEhlYXBUdXBsZU1WQ0NJbnNlcnRlZChIZWFwVHVwbGUgaHR1cCwgU25hcHNob3Qg c25hcHNob3QsCisJCQkJCQkJCSAgQnVmZmVyIGJ1ZmZlcik7CitleHRlcm4gYm9vbCBIZWFwVHVw bGVNVkNDTm90RGVsZXRlZChIZWFwVHVwbGUgaHR1cCwgU25hcHNob3Qgc25hcHNob3QsCisJCQkJ CQkJCQlCdWZmZXIgYnVmZmVyKTsKIGV4dGVybiBib29sIEhlYXBUdXBsZUhlYWRlcklzT25seUxv Y2tlZChIZWFwVHVwbGVIZWFkZXIgdHVwbGUpOwogZXh0ZXJuIGJvb2wgSGVhcFR1cGxlSXNTdXJl bHlEZWFkKEhlYXBUdXBsZSBodHVwLAogCQkJCQkJCQkgIHN0cnVjdCBHbG9iYWxWaXNTdGF0ZSAq dmlzdGVzdCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtX3hsb2cuaCBi L3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW1feGxvZy5oCmluZGV4IDQyNzM2ZjM3ZTcuLjFjNWNi N2M3MjggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW1feGxvZy5oCisrKyBi L3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW1feGxvZy5oCkBAIC0xMDMsNiArMTAzLDggQEAKICNk ZWZpbmUgWExIX0RFTEVURV9DT05UQUlOU19PTERfS0VZCQkJCSgxPDwyKQogI2RlZmluZSBYTEhf REVMRVRFX0lTX1NVUEVSCQkJCQkJKDE8PDMpCiAjZGVmaW5lIFhMSF9ERUxFVEVfSVNfUEFSVElU SU9OX01PVkUJCQkoMTw8NCkKKy8qIFNlZSBoZWFwX2RlbGV0ZSgpICovCisjZGVmaW5lIFhMSF9E RUxFVEVfTk9fTE9HSUNBTAkJCQkJKDE8PDUpCiAKIC8qIGNvbnZlbmllbmNlIG1hY3JvIGZvciBj aGVja2luZyB3aGV0aGVyIGFueSBmb3JtIG9mIG9sZCB0dXBsZSB3YXMgbG9nZ2VkICovCiAjZGVm aW5lIFhMSF9ERUxFVEVfQ09OVEFJTlNfT0xECQkJCQkJXApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvYWNjZXNzL3RhYmxlYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKaW5kZXgg ZGE2NjEyODljMS4uMTM4MGJhODFmYyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3Rh YmxlYW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oCkBAIC0yMSw2ICsyMSw3 IEBACiAjaW5jbHVkZSAiYWNjZXNzL3NkaXIuaCIKICNpbmNsdWRlICJhY2Nlc3MveGFjdC5oIgog I2luY2x1ZGUgImV4ZWN1dG9yL3R1cHRhYmxlLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vbG9n aWNhbC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcmVhZF9zdHJlYW0uaCIKICNpbmNsdWRlICJ1dGls cy9yZWwuaCIKICNpbmNsdWRlICJ1dGlscy9zbmFwc2hvdC5oIgpAQCAtNjMwLDYgKzYzMSw4IEBA IHR5cGVkZWYgc3RydWN0IFRhYmxlQW1Sb3V0aW5lCiAJCQkJCQkJCQkJCSAgUmVsYXRpb24gT2xk SW5kZXgsCiAJCQkJCQkJCQkJCSAgYm9vbCB1c2Vfc29ydCwKIAkJCQkJCQkJCQkJICBUcmFuc2Fj dGlvbklkIE9sZGVzdFhtaW4sCisJCQkJCQkJCQkJCSAgU25hcHNob3Qgc25hcHNob3QsCisJCQkJ CQkJCQkJCSAgTG9naWNhbERlY29kaW5nQ29udGV4dCAqZGVjb2RpbmdfY3R4LAogCQkJCQkJCQkJ CQkgIFRyYW5zYWN0aW9uSWQgKnhpZF9jdXRvZmYsCiAJCQkJCQkJCQkJCSAgTXVsdGlYYWN0SWQg Km11bHRpX2N1dG9mZiwKIAkJCQkJCQkJCQkJICBkb3VibGUgKm51bV90dXBsZXMsCkBAIC0xNjY3 LDYgKzE2NzAsMTAgQEAgdGFibGVfcmVsYXRpb25fY29weV9kYXRhKFJlbGF0aW9uIHJlbCwgY29u c3QgUmVsRmlsZUxvY2F0b3IgKm5ld3Jsb2NhdG9yKQogICogICBub3QgbmVlZGVkIGZvciB0aGUg cmVsYXRpb24ncyBBTQogICogLSAqeGlkX2N1dG9mZiAtIGRpdHRvCiAgKiAtICptdWx0aV9jdXRv ZmYgLSBkaXR0bworICogLSBzbmFwc2hvdCAtIGlmICE9IE5VTEwsIGlnbm9yZSBkYXRhIGNoYW5n ZXMgZG9uZSBieSB0cmFuc2FjdGlvbnMgdGhhdCB0aGlzCisgKgkgKE1WQ0MpIHNuYXBzaG90IGNv bnNpZGVycyBzdGlsbCBpbi1wcm9ncmVzcyBvciBpbiB0aGUgZnV0dXJlLgorICogLSBkZWNvZGlu Z19jdHggLSBsb2dpY2FsIGRlY29kaW5nIGNvbnRleHQsIHRvIGNhcHR1cmUgY29uY3VycmVudCBk YXRhCisgKiAgIGNoYW5nZXMuCiAgKgogICogT3V0cHV0IHBhcmFtZXRlcnM6CiAgKiAtICp4aWRf Y3V0b2ZmIC0gcmVsJ3MgbmV3IHJlbGZyb3plbnhpZCB2YWx1ZSwgbWF5IGJlIGludmFsaWQKQEAg LTE2NzksNiArMTY4Niw4IEBAIHRhYmxlX3JlbGF0aW9uX2NvcHlfZm9yX2NsdXN0ZXIoUmVsYXRp b24gT2xkVGFibGUsIFJlbGF0aW9uIE5ld1RhYmxlLAogCQkJCQkJCQlSZWxhdGlvbiBPbGRJbmRl eCwKIAkJCQkJCQkJYm9vbCB1c2Vfc29ydCwKIAkJCQkJCQkJVHJhbnNhY3Rpb25JZCBPbGRlc3RY bWluLAorCQkJCQkJCQlTbmFwc2hvdCBzbmFwc2hvdCwKKwkJCQkJCQkJTG9naWNhbERlY29kaW5n Q29udGV4dCAqZGVjb2RpbmdfY3R4LAogCQkJCQkJCQlUcmFuc2FjdGlvbklkICp4aWRfY3V0b2Zm LAogCQkJCQkJCQlNdWx0aVhhY3RJZCAqbXVsdGlfY3V0b2ZmLAogCQkJCQkJCQlkb3VibGUgKm51 bV90dXBsZXMsCkBAIC0xNjg3LDYgKzE2OTYsNyBAQCB0YWJsZV9yZWxhdGlvbl9jb3B5X2Zvcl9j bHVzdGVyKFJlbGF0aW9uIE9sZFRhYmxlLCBSZWxhdGlvbiBOZXdUYWJsZSwKIHsKIAlPbGRUYWJs ZS0+cmRfdGFibGVhbS0+cmVsYXRpb25fY29weV9mb3JfY2x1c3RlcihPbGRUYWJsZSwgTmV3VGFi bGUsIE9sZEluZGV4LAogCQkJCQkJCQkJCQkJCXVzZV9zb3J0LCBPbGRlc3RYbWluLAorCQkJCQkJ CQkJCQkJCXNuYXBzaG90LCBkZWNvZGluZ19jdHgsCiAJCQkJCQkJCQkJCQkJeGlkX2N1dG9mZiwg bXVsdGlfY3V0b2ZmLAogCQkJCQkJCQkJCQkJCW51bV90dXBsZXMsIHR1cHNfdmFjdXVtZWQsCiAJ CQkJCQkJCQkJCQkJdHVwc19yZWNlbnRseV9kZWFkKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L2FjY2Vzcy94YWN0LmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MveGFjdC5oCmluZGV4IDZkNDQzOWYw NTIuLmUwMDE2NjMxZjYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy94YWN0LmgKKysr IGIvc3JjL2luY2x1ZGUvYWNjZXNzL3hhY3QuaApAQCAtNDc2LDYgKzQ3Niw4IEBAIGV4dGVybiBT aXplIEVzdGltYXRlVHJhbnNhY3Rpb25TdGF0ZVNwYWNlKHZvaWQpOwogZXh0ZXJuIHZvaWQgU2Vy aWFsaXplVHJhbnNhY3Rpb25TdGF0ZShTaXplIG1heHNpemUsIGNoYXIgKnN0YXJ0X2FkZHJlc3Mp OwogZXh0ZXJuIHZvaWQgU3RhcnRQYXJhbGxlbFdvcmtlclRyYW5zYWN0aW9uKGNoYXIgKnRzdGF0 ZXNwYWNlKTsKIGV4dGVybiB2b2lkIEVuZFBhcmFsbGVsV29ya2VyVHJhbnNhY3Rpb24odm9pZCk7 CitleHRlcm4gdm9pZCBTZXRDbHVzdGVyQ3VycmVudFhpZHMoVHJhbnNhY3Rpb25JZCAqeGlwLCBp bnQgeGNudCk7CitleHRlcm4gdm9pZCBSZXNldENsdXN0ZXJDdXJyZW50WGlkcyh2b2lkKTsKIGV4 dGVybiBib29sIElzVHJhbnNhY3Rpb25CbG9jayh2b2lkKTsKIGV4dGVybiBib29sIElzVHJhbnNh Y3Rpb25PclRyYW5zYWN0aW9uQmxvY2sodm9pZCk7CiBleHRlcm4gY2hhciBUcmFuc2FjdGlvbkJs b2NrU3RhdHVzQ29kZSh2b2lkKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvaW5k ZXguaCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvaW5kZXguaAppbmRleCA3ZDQzNGY4ZTY1Li43N2Q1 MjI1NjFiIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL2luZGV4LmgKKysrIGIvc3Jj L2luY2x1ZGUvY2F0YWxvZy9pbmRleC5oCkBAIC05OSw2ICs5OSw5IEBAIGV4dGVybiBPaWQJaW5k ZXhfY29uY3VycmVudGx5X2NyZWF0ZV9jb3B5KFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIAkJCQkJ CQkJCQkgICBPaWQgdGFibGVzcGFjZU9pZCwKIAkJCQkJCQkJCQkgICBjb25zdCBjaGFyICpuZXdO YW1lKTsKIAorZXh0ZXJuIE51bGxhYmxlRGF0dW0gKmdldF9pbmRleF9zdGF0dGFyZ2V0cyhPaWQg aW5kZXhpZCwKKwkJCQkJCQkJCQkJSW5kZXhJbmZvICppbmRJbmZvKTsKKwogZXh0ZXJuIHZvaWQg aW5kZXhfY29uY3VycmVudGx5X2J1aWxkKE9pZCBoZWFwUmVsYXRpb25JZCwKIAkJCQkJCQkJCSBP aWQgaW5kZXhSZWxhdGlvbklkKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMv Y2x1c3Rlci5oIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvY2x1c3Rlci5oCmluZGV4IDc0OTI3OTZl YTIuLmY5OGI4NTVmMjEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2NsdXN0ZXIu aAorKysgYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9jbHVzdGVyLmgKQEAgLTEzLDEwICsxMywxNSBA QAogI2lmbmRlZiBDTFVTVEVSX0gKICNkZWZpbmUgQ0xVU1RFUl9ICiAKKyNpbmNsdWRlICJub2Rl cy9leGVjbm9kZXMuaCIKICNpbmNsdWRlICJub2Rlcy9wYXJzZW5vZGVzLmgiCiAjaW5jbHVkZSAi cGFyc2VyL3BhcnNlX25vZGUuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2FsLmgiCiAj aW5jbHVkZSAic3RvcmFnZS9sb2NrLmgiCisjaW5jbHVkZSAic3RvcmFnZS9yZWxmaWxlbG9jYXRv ci5oIgogI2luY2x1ZGUgInV0aWxzL3JlbGNhY2hlLmgiCisjaW5jbHVkZSAidXRpbHMvcmVzb3du ZXIuaCIKKyNpbmNsdWRlICJ1dGlscy90dXBsZXN0b3JlLmgiCiAKIAogLyogZmxhZyBiaXRzIGZv ciBDbHVzdGVyUGFyYW1zLT5vcHRpb25zICovCkBAIC0yNCw2ICsyOSw3IEBACiAjZGVmaW5lIENM VU9QVF9SRUNIRUNLIDB4MDIJCS8qIHJlY2hlY2sgcmVsYXRpb24gc3RhdGUgKi8KICNkZWZpbmUg Q0xVT1BUX1JFQ0hFQ0tfSVNDTFVTVEVSRUQgMHgwNCAvKiByZWNoZWNrIHJlbGF0aW9uIHN0YXRl IGZvcgogCQkJCQkJCQkJCSAqIGluZGlzY2x1c3RlcmVkICovCisjZGVmaW5lIENMVU9QVF9DT05D VVJSRU5UIDB4MDgJLyogYWxsb3cgY29uY3VycmVudCBkYXRhIGNoYW5nZXMgKi8KIAogLyogb3B0 aW9ucyBmb3IgQ0xVU1RFUiAqLwogdHlwZWRlZiBzdHJ1Y3QgQ2x1c3RlclBhcmFtcwpAQCAtMzEs MTIgKzM3LDExNCBAQCB0eXBlZGVmIHN0cnVjdCBDbHVzdGVyUGFyYW1zCiAJYml0czMyCQlvcHRp b25zOwkJLyogYml0bWFzayBvZiBDTFVPUFRfKiAqLwogfSBDbHVzdGVyUGFyYW1zOwogCisvKgor ICogVGhlIGZvbGxvd2luZyBkZWZpbml0aW9ucyBhcmUgdXNlZCBmb3IgY29uY3VycmVudCBwcm9j ZXNzaW5nLgorICovCisKKy8qCisgKiBMb2NrIGxldmVsIGZvciB0aGUgY29uY3VycmVudCB2YXJp YW50IG9mIENMVVNURVIgLyBWQUNVVU0gRlVMTC4KKyAqCisgKiBMaWtlIGZvciBsYXp5IFZBQ1VV TSwgd2UgY2hvb3NlIHRoZSBzdHJvbmdlc3QgbG9jayB0aGF0IHN0aWxsIGFsbG93cworICogSU5T RVJULCBVUERBVEUgYW5kIERFTEVURS4KKyAqCisgKiBOb3RlIHRoYXQgdGhlIGxvY2sgbmVlZHMg dG8gYmUgcmVsZWFzZWQgdGVtcG9yYXJpbHkgYSBmZXcgdGltZXMgZHVyaW5nIHRoZQorICogcHJv Y2Vzc2luZy4gSW4gc3VjaCBjYXNlcyBpdCBzaG91bGQgYmUgY2hlY2tlZCBhZnRlciByZS1sb2Nr aW5nIHRoYXQgdGhlCisgKiByZWxhdGlvbiAvIGluZGV4IGhhc24ndCBjaGFuZ2VkIGluIHRoZSBz eXN0ZW0gY2F0YWxvZyB3aGlsZSB0aGUgbG9jayB3YXMKKyAqIG5vdCBoZWxkLgorICovCisjZGVm aW5lIExPQ0tfQ0xVU1RFUl9DT05DVVJSRU5UCVNoYXJlVXBkYXRlRXhjbHVzaXZlTG9jaworCit0 eXBlZGVmIGVudW0KK3sKKwlDSEFOR0VfSU5TRVJULAorCUNIQU5HRV9VUERBVEVfT0xELAorCUNI QU5HRV9VUERBVEVfTkVXLAorCUNIQU5HRV9ERUxFVEUsCisJQ0hBTkdFX1RSVU5DQVRFCit9IENv bmN1cnJlbnRDaGFuZ2VLaW5kOworCit0eXBlZGVmIHN0cnVjdCBDb25jdXJyZW50Q2hhbmdlCit7 CisJLyogU2VlIHRoZSBlbnVtIGFib3ZlLiAqLworCUNvbmN1cnJlbnRDaGFuZ2VLaW5kIGtpbmQ7 CisKKwkvKiBUcmFuc2FjdGlvbiB0aGF0IGNoYW5nZXMgdGhlIGRhdGEuICovCisJVHJhbnNhY3Rp b25JZAl4aWQ7CisKKwkvKgorCSAqIEhpc3RvcmljIGNhdGFsb2cgc25hcHNob3QgdGhhdCB3YXMg dXNlZCB0byBkZWNvZGUgdGhpcyBjaGFuZ2UuCisJICovCisJU25hcHNob3QJc25hcHNob3Q7CisK KwkvKgorCSAqIFRoZSBhY3R1YWwgdHVwbGUuCisJICoKKwkgKiBUaGUgdHVwbGUgZGF0YSBmb2xs b3dzIHRoZSBDb25jdXJyZW50Q2hhbmdlIHN0cnVjdHVyZS4gQmVmb3JlIHVzZSBtYWtlCisJICog c3VyZSB0aGUgdHVwbGUgaXMgY29ycmVjdGx5IGFsaWduZWQgKENvbmN1cnJlbnRDaGFuZ2UgY2Fu IGJlIHN0b3JlZCBhcworCSAqIGJ5dGVhKSBhbmQgdGhhdCB0dXBsZS0+dF9kYXRhIGlzIGZpeGVk LgorCSAqLworCUhlYXBUdXBsZURhdGEgdHVwX2RhdGE7Cit9IENvbmN1cnJlbnRDaGFuZ2U7CisK Ky8qCisgKiBMb2dpY2FsIGRlY29kaW5nIHN0YXRlLgorICoKKyAqIEhlcmUgd2Ugc3RvcmUgdGhl IGRhdGEgY2hhbmdlcyB0aGF0IHdlIGRlY29kZSBmcm9tIFdBTCB3aGlsZSB0aGUgdGFibGUKKyAq IGNvbnRlbnRzIGlzIGJlaW5nIGNvcGllZCB0byBhIG5ldyBzdG9yYWdlLiBBbHNvIHRoZSBuZWNl c3NhcnkgbWV0YWRhdGEKKyAqIG5lZWRlZCB0byBhcHBseSB0aGVzZSBjaGFuZ2VzIHRvIHRoZSB0 YWJsZSBpcyBzdG9yZWQgaGVyZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgQ2x1c3RlckRlY29kaW5n U3RhdGUKK3sKKwkvKiBUaGUgcmVsYXRpb24gd2hvc2UgY2hhbmdlcyB3ZSdyZSBkZWNvZGluZy4g Ki8KKwlPaWQJCQlyZWxpZDsKKworCS8qCisJICogRGVjb2RlZCBjaGFuZ2VzIGFyZSBzdG9yZWQg aGVyZS4gQWx0aG91Z2ggd2UgdHJ5IHRvIGF2b2lkIGV4Y2Vzc2l2ZQorCSAqIGJhdGNoZXMsIGl0 IGNhbiBoYXBwZW4gdGhhdCB0aGUgY2hhbmdlcyBuZWVkIHRvIGJlIHN0b3JlZCB0byBkaXNrLiBU aGUKKwkgKiB0dXBsZXN0b3JlIGRvZXMgdGhpcyB0cmFuc3BhcmVudGx5LgorCSAqLworCVR1cGxl c3RvcmVzdGF0ZSAqdHN0b3JlOworCisJLyogVGhlIGN1cnJlbnQgbnVtYmVyIG9mIGNoYW5nZXMg aW4gdHN0b3JlLiAqLworCWRvdWJsZQkJbmNoYW5nZXM7CisKKwkvKgorCSAqIERlc2NyaXB0b3Ig dG8gc3RvcmUgdGhlIENvbmN1cnJlbnRDaGFuZ2Ugc3RydWN0dXJlIHNlcmlhbGl6ZWQgKGJ5dGVh KS4KKwkgKiBXZSBjYW4ndCBzdG9yZSB0aGUgdHVwbGUgZGlyZWN0bHkgYmVjYXVzZSB0dXBsZXN0 b3JlIG9ubHkgc3VwcG9ydHMKKwkgKiBtaW5pbXVtIHR1cGxlIGFuZCB3ZSBtYXkgbmVlZCB0byB0 cmFuc2ZlciBPSUQgc3lzdGVtIGNvbHVtbiBmcm9tIHRoZQorCSAqIG91dHB1dCBwbHVnaW4uIEFs c28gd2UgbmVlZCB0byB0cmFuc2ZlciB0aGUgY2hhbmdlIGtpbmQsIHNvIGl0J3MgYmV0dGVyCisJ ICogdG8gcHV0IGV2ZXJ5dGhpbmcgaW4gdGhlIHN0cnVjdHVyZSB0aGFuIHRvIHVzZSAyIHR1cGxl c3RvcmVzICJpbgorCSAqIHBhcmFsbGVsIi4KKwkgKi8KKwlUdXBsZURlc2MJdHVwZGVzY19jaGFu Z2U7CisKKwkvKiBUdXBsZSBkZXNjcmlwdG9yIG5lZWRlZCB0byB1cGRhdGUgaW5kZXhlcy4gKi8K KwlUdXBsZURlc2MJdHVwZGVzYzsKKworCS8qIFNsb3QgdG8gcmV0cmlldmUgZGF0YSBmcm9tIHRz dG9yZS4gKi8KKwlUdXBsZVRhYmxlU2xvdCAqdHNzbG90OworCisJLyoKKwkgKiBIaXN0b3JpYyBj YXRhbG9nIHNuYXBzaG90IHRoYXQgd2FzIHVzZWQgdG8gZGVjb2RlIHRoZSBtb3N0IHJlY2VudAor CSAqIGNoYW5nZS4KKwkgKi8KKwlTbmFwc2hvdAlzbmFwc2hvdDsKKwkvKiBMU04gb2YgdGhlIHJl Y29yZCAgKi8KKwlYTG9nUmVjUHRyCXNuYXBzaG90X2xzbjsKKworCVJlc291cmNlT3duZXIgcmVz b3duZXI7Cit9IENsdXN0ZXJEZWNvZGluZ1N0YXRlOworCiBleHRlcm4gdm9pZCBjbHVzdGVyKFBh cnNlU3RhdGUgKnBzdGF0ZSwgQ2x1c3RlclN0bXQgKnN0bXQsIGJvb2wgaXNUb3BMZXZlbCk7Ci1l eHRlcm4gdm9pZCBjbHVzdGVyX3JlbChSZWxhdGlvbiBPbGRIZWFwLCBPaWQgaW5kZXhPaWQsIENs dXN0ZXJQYXJhbXMgKnBhcmFtcyk7CitleHRlcm4gdm9pZCBjbHVzdGVyX3JlbChSZWxhdGlvbiBP bGRIZWFwLCBPaWQgaW5kZXhPaWQsCUNsdXN0ZXJQYXJhbXMgKnBhcmFtcywKKwkJCQkJCWJvb2wg aXNUb3BMZXZlbCk7CiBleHRlcm4gdm9pZCBjaGVja19pbmRleF9pc19jbHVzdGVyYWJsZShSZWxh dGlvbiBPbGRIZWFwLCBPaWQgaW5kZXhPaWQsCiAJCQkJCQkJCQkgICBMT0NLTU9ERSBsb2NrbW9k ZSk7CiBleHRlcm4gdm9pZCBtYXJrX2luZGV4X2NsdXN0ZXJlZChSZWxhdGlvbiByZWwsIE9pZCBp bmRleE9pZCwgYm9vbCBpc19pbnRlcm5hbCk7Ci0KK2V4dGVybiBib29sIGNoZWNrX3JlbGF0aW9u X2lzX2NsdXN0ZXJhYmxlX2NvbmN1cnJlbnRseShSZWxhdGlvbiByZWwsIGludCBlbGV2ZWwsCisJ CQkJCQkJCQkJCQkJICAgY29uc3QgY2hhciAqc3RtdCk7CitleHRlcm4gdm9pZCBjbHVzdGVyX2Rl Y29kZV9jb25jdXJyZW50X2NoYW5nZXMoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAorCQkJ CQkJCQkJCQkgIFhMb2dSZWNQdHIgZW5kX29mX3dhbCk7CiBleHRlcm4gT2lkCW1ha2VfbmV3X2hl YXAoT2lkIE9JRE9sZEhlYXAsIE9pZCBOZXdUYWJsZVNwYWNlLCBPaWQgTmV3QWNjZXNzTWV0aG9k LAogCQkJCQkJICBjaGFyIHJlbHBlcnNpc3RlbmNlLCBMT0NLTU9ERSBsb2NrbW9kZV9vbGQsCiAJ CQkJCQkgIExPQ0tNT0RFICpsb2NrbW9kZV9uZXdfcCk7CkBAIC00NSw4ICsxNTMsMTMgQEAgZXh0 ZXJuIHZvaWQgZmluaXNoX2hlYXBfc3dhcChPaWQgT0lET2xkSGVhcCwgT2lkIE9JRE5ld0hlYXAs CiAJCQkJCQkJIGJvb2wgc3dhcF90b2FzdF9ieV9jb250ZW50LAogCQkJCQkJCSBib29sIGNoZWNr X2NvbnN0cmFpbnRzLAogCQkJCQkJCSBib29sIGlzX2ludGVybmFsLAorCQkJCQkJCSBib29sIHJl aW5kZXgsCiAJCQkJCQkJIFRyYW5zYWN0aW9uSWQgZnJvemVuWGlkLAogCQkJCQkJCSBNdWx0aVhh Y3RJZCBjdXRvZmZNdWx0aSwKIAkJCQkJCQkgY2hhciBuZXdyZWxwZXJzaXN0ZW5jZSk7CiAKK2V4 dGVybiBTaXplIENsdXN0ZXJTaG1lbVNpemUodm9pZCk7CitleHRlcm4gdm9pZCBDbHVzdGVyU2ht ZW1Jbml0KHZvaWQpOworZXh0ZXJuIGJvb2wgaXNfY29uY3VycmVudF9jbHVzdGVyX2luX3Byb2dy ZXNzKE9pZCByZWxpZCk7CitleHRlcm4gdm9pZCBjaGVja19mb3JfY29uY3VycmVudF9jbHVzdGVy KE9pZCByZWxpZCwgTE9DS01PREUgbG9ja21vZGUpOwogI2VuZGlmCQkJCQkJCS8qIENMVVNURVJf SCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvcHJvZ3Jlc3MuaCBiL3NyYy9p bmNsdWRlL2NvbW1hbmRzL3Byb2dyZXNzLmgKaW5kZXggNTYxNmQ2NDUyMy4uMDNlMzcxMmVkZSAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvcHJvZ3Jlc3MuaAorKysgYi9zcmMvaW5j bHVkZS9jb21tYW5kcy9wcm9ncmVzcy5oCkBAIC01OSwxOSArNTksMjIgQEAKICNkZWZpbmUgUFJP R1JFU1NfQ0xVU1RFUl9QSEFTRQkJCQkJMQogI2RlZmluZSBQUk9HUkVTU19DTFVTVEVSX0lOREVY X1JFTElECQkJMgogI2RlZmluZSBQUk9HUkVTU19DTFVTVEVSX0hFQVBfVFVQTEVTX1NDQU5ORUQJ MwotI2RlZmluZSBQUk9HUkVTU19DTFVTVEVSX0hFQVBfVFVQTEVTX1dSSVRURU4JNAotI2RlZmlu ZSBQUk9HUkVTU19DTFVTVEVSX1RPVEFMX0hFQVBfQkxLUwkJNQotI2RlZmluZSBQUk9HUkVTU19D TFVTVEVSX0hFQVBfQkxLU19TQ0FOTkVECQk2Ci0jZGVmaW5lIFBST0dSRVNTX0NMVVNURVJfSU5E RVhfUkVCVUlMRF9DT1VOVAk3CisjZGVmaW5lIFBST0dSRVNTX0NMVVNURVJfSEVBUF9UVVBMRVNf SU5TRVJURUQJNAorI2RlZmluZSBQUk9HUkVTU19DTFVTVEVSX0hFQVBfVFVQTEVTX1VQREFURUQJ NQorI2RlZmluZSBQUk9HUkVTU19DTFVTVEVSX0hFQVBfVFVQTEVTX0RFTEVURUQJNgorI2RlZmlu ZSBQUk9HUkVTU19DTFVTVEVSX1RPVEFMX0hFQVBfQkxLUwkJNworI2RlZmluZSBQUk9HUkVTU19D TFVTVEVSX0hFQVBfQkxLU19TQ0FOTkVECQk4CisjZGVmaW5lIFBST0dSRVNTX0NMVVNURVJfSU5E RVhfUkVCVUlMRF9DT1VOVAk5CiAKIC8qIFBoYXNlcyBvZiBjbHVzdGVyIChhcyBhZHZlcnRpc2Vk IHZpYSBQUk9HUkVTU19DTFVTVEVSX1BIQVNFKSAqLwogI2RlZmluZSBQUk9HUkVTU19DTFVTVEVS X1BIQVNFX1NFUV9TQ0FOX0hFQVAJMQogI2RlZmluZSBQUk9HUkVTU19DTFVTVEVSX1BIQVNFX0lO REVYX1NDQU5fSEVBUAkyCiAjZGVmaW5lIFBST0dSRVNTX0NMVVNURVJfUEhBU0VfU09SVF9UVVBM RVMJCTMKICNkZWZpbmUgUFJPR1JFU1NfQ0xVU1RFUl9QSEFTRV9XUklURV9ORVdfSEVBUAk0Ci0j ZGVmaW5lIFBST0dSRVNTX0NMVVNURVJfUEhBU0VfU1dBUF9SRUxfRklMRVMJNQotI2RlZmluZSBQ Uk9HUkVTU19DTFVTVEVSX1BIQVNFX1JFQlVJTERfSU5ERVgJNgotI2RlZmluZSBQUk9HUkVTU19D TFVTVEVSX1BIQVNFX0ZJTkFMX0NMRUFOVVAJNworI2RlZmluZSBQUk9HUkVTU19DTFVTVEVSX1BI QVNFX0NBVENIX1VQCQkJNQorI2RlZmluZSBQUk9HUkVTU19DTFVTVEVSX1BIQVNFX1NXQVBfUkVM X0ZJTEVTCTYKKyNkZWZpbmUgUFJPR1JFU1NfQ0xVU1RFUl9QSEFTRV9SRUJVSUxEX0lOREVYCTcK KyNkZWZpbmUgUFJPR1JFU1NfQ0xVU1RFUl9QSEFTRV9GSU5BTF9DTEVBTlVQCTgKIAogLyogQ29t bWFuZHMgb2YgUFJPR1JFU1NfQ0xVU1RFUiAqLwogI2RlZmluZSBQUk9HUkVTU19DTFVTVEVSX0NP TU1BTkRfQ0xVU1RFUgkJMQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvdmFjdXVt LmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy92YWN1dW0uaAppbmRleCA3NTlmOWE4N2QzLi4yZjY5 M2UwZmMwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy92YWN1dW0uaAorKysgYi9z cmMvaW5jbHVkZS9jb21tYW5kcy92YWN1dW0uaApAQCAtMTgxLDEzICsxODEsMTYgQEAgdHlwZWRl ZiBzdHJ1Y3QgVmFjQXR0clN0YXRzCiAjZGVmaW5lIFZBQ09QVF9BTkFMWVpFIDB4MDIJCS8qIGRv IEFOQUxZWkUgKi8KICNkZWZpbmUgVkFDT1BUX1ZFUkJPU0UgMHgwNAkJLyogb3V0cHV0IElORk8g aW5zdHJ1bWVudGF0aW9uIG1lc3NhZ2VzICovCiAjZGVmaW5lIFZBQ09QVF9GUkVFWkUgMHgwOAkJ LyogRlJFRVpFIG9wdGlvbiAqLwotI2RlZmluZSBWQUNPUFRfRlVMTCAweDEwCQkvKiBGVUxMIChu b24tY29uY3VycmVudCkgdmFjdXVtICovCi0jZGVmaW5lIFZBQ09QVF9TS0lQX0xPQ0tFRCAweDIw IC8qIHNraXAgaWYgY2Fubm90IGdldCBsb2NrICovCi0jZGVmaW5lIFZBQ09QVF9QUk9DRVNTX01B SU4gMHg0MAkvKiBwcm9jZXNzIG1haW4gcmVsYXRpb24gKi8KLSNkZWZpbmUgVkFDT1BUX1BST0NF U1NfVE9BU1QgMHg4MAkvKiBwcm9jZXNzIHRoZSBUT0FTVCB0YWJsZSwgaWYgYW55ICovCi0jZGVm aW5lIFZBQ09QVF9ESVNBQkxFX1BBR0VfU0tJUFBJTkcgMHgxMDAJLyogZG9uJ3Qgc2tpcCBhbnkg cGFnZXMgKi8KLSNkZWZpbmUgVkFDT1BUX1NLSVBfREFUQUJBU0VfU1RBVFMgMHgyMDAJLyogc2tp cCB2YWNfdXBkYXRlX2RhdGZyb3plbnhpZCgpICovCi0jZGVmaW5lIFZBQ09QVF9PTkxZX0RBVEFC QVNFX1NUQVRTIDB4NDAwCS8qIG9ubHkgdmFjX3VwZGF0ZV9kYXRmcm96ZW54aWQoKSAqLworI2Rl ZmluZSBWQUNPUFRfRlVMTF9FWENMVVNJVkUgMHgxMAkvKiBGVUxMIChub24tY29uY3VycmVudCkg dmFjdXVtICovCisjZGVmaW5lIFZBQ09QVF9GVUxMX0NPTkNVUlJFTlQgMHgyMAkvKiBGVUxMIChj b25jdXJyZW50KSB2YWN1dW0gKi8KKyNkZWZpbmUgVkFDT1BUX1NLSVBfTE9DS0VEIDB4NDAgLyog c2tpcCBpZiBjYW5ub3QgZ2V0IGxvY2sgKi8KKyNkZWZpbmUgVkFDT1BUX1BST0NFU1NfTUFJTiAw eDgwCS8qIHByb2Nlc3MgbWFpbiByZWxhdGlvbiAqLworI2RlZmluZSBWQUNPUFRfUFJPQ0VTU19U T0FTVCAweDEwMAkvKiBwcm9jZXNzIHRoZSBUT0FTVCB0YWJsZSwgaWYgYW55ICovCisjZGVmaW5l IFZBQ09QVF9ESVNBQkxFX1BBR0VfU0tJUFBJTkcgMHgyMDAJLyogZG9uJ3Qgc2tpcCBhbnkgcGFn ZXMgKi8KKyNkZWZpbmUgVkFDT1BUX1NLSVBfREFUQUJBU0VfU1RBVFMgMHg0MDAJLyogc2tpcCB2 YWNfdXBkYXRlX2RhdGZyb3plbnhpZCgpICovCisjZGVmaW5lIFZBQ09QVF9PTkxZX0RBVEFCQVNF X1NUQVRTIDB4ODAwCS8qIG9ubHkgdmFjX3VwZGF0ZV9kYXRmcm96ZW54aWQoKSAqLworCisjZGVm aW5lIFZBQ09QVF9GVUxMIChWQUNPUFRfRlVMTF9FWENMVVNJVkUgfCBWQUNPUFRfRlVMTF9DT05D VVJSRU5UKQogCiAvKgogICogVmFsdWVzIHVzZWQgYnkgaW5kZXhfY2xlYW51cCBhbmQgdHJ1bmNh dGUgcGFyYW1zLgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vc25hcGJ1aWxk LmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9zbmFwYnVpbGQuaAppbmRleCBhMzM2MGExYzVl Li5hYmJmYjYxNmNlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9zbmFwYnVp bGQuaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9zbmFwYnVpbGQuaApAQCAtNjgsNiAr NjgsOCBAQCBleHRlcm4gdm9pZCBGcmVlU25hcHNob3RCdWlsZGVyKFNuYXBCdWlsZCAqYnVpbGRl cik7CiBleHRlcm4gdm9pZCBTbmFwQnVpbGRTbmFwRGVjUmVmY291bnQoU25hcHNob3Qgc25hcCk7 CiAKIGV4dGVybiBTbmFwc2hvdCBTbmFwQnVpbGRJbml0aWFsU25hcHNob3QoU25hcEJ1aWxkICpi dWlsZGVyKTsKK2V4dGVybiBTbmFwc2hvdCBTbmFwQnVpbGRJbml0aWFsU25hcHNob3RGb3JDbHVz dGVyKFNuYXBCdWlsZCAqYnVpbGRlcik7CitleHRlcm4gU25hcHNob3QgU25hcEJ1aWxkTVZDQ0Zy b21IaXN0b3JpYyhTbmFwc2hvdCBzbmFwc2hvdCwgYm9vbCBpbl9wbGFjZSk7CiBleHRlcm4gY29u c3QgY2hhciAqU25hcEJ1aWxkRXhwb3J0U25hcHNob3QoU25hcEJ1aWxkICpidWlsZGVyKTsKIGV4 dGVybiB2b2lkIFNuYXBCdWlsZENsZWFyRXhwb3J0ZWRTbmFwc2hvdCh2b2lkKTsKIGV4dGVybiB2 b2lkIFNuYXBCdWlsZFJlc2V0RXhwb3J0ZWRTbmFwc2hvdFN0YXRlKHZvaWQpOwpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9sb2NrZGVmcy5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9s b2NrZGVmcy5oCmluZGV4IDkzNGJhODRmNmEuLmNhYzNkN2Y4YzcgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL3N0b3JhZ2UvbG9ja2RlZnMuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2xvY2tk ZWZzLmgKQEAgLTM2LDcgKzM2LDcgQEAgdHlwZWRlZiBpbnQgTE9DS01PREU7CiAjZGVmaW5lIEFj Y2Vzc1NoYXJlTG9jawkJCTEJLyogU0VMRUNUICovCiAjZGVmaW5lIFJvd1NoYXJlTG9jawkJCTIJ LyogU0VMRUNUIEZPUiBVUERBVEUvRk9SIFNIQVJFICovCiAjZGVmaW5lIFJvd0V4Y2x1c2l2ZUxv Y2sJCTMJLyogSU5TRVJULCBVUERBVEUsIERFTEVURSAqLwotI2RlZmluZSBTaGFyZVVwZGF0ZUV4 Y2x1c2l2ZUxvY2sgNAkvKiBWQUNVVU0gKG5vbi1GVUxMKSwgQU5BTFlaRSwgQ1JFQVRFCisjZGVm aW5lIFNoYXJlVXBkYXRlRXhjbHVzaXZlTG9jayA0CS8qIFZBQ1VVTSAobm9uLWV4Y2x1c2l2ZSks IEFOQUxZWkUsIENSRUFURQogCQkJCQkJCQkJICogSU5ERVggQ09OQ1VSUkVOVExZICovCiAjZGVm aW5lIFNoYXJlTG9jawkJCQk1CS8qIENSRUFURSBJTkRFWCAoV0lUSE9VVCBDT05DVVJSRU5UTFkp ICovCiAjZGVmaW5lIFNoYXJlUm93RXhjbHVzaXZlTG9jawk2CS8qIGxpa2UgRVhDTFVTSVZFIE1P REUsIGJ1dCBhbGxvd3MgUk9XCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2x3bG9j a2xpc3QuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbHdsb2NrbGlzdC5oCmluZGV4IDZhMmY2NGM1 NGYuLmE1ZjU5YjZjMTIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbHdsb2NrbGlz dC5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbHdsb2NrbGlzdC5oCkBAIC04MywzICs4Myw0 IEBAIFBHX0xXTE9DSyg0OSwgV0FMU3VtbWFyaXplcikKIFBHX0xXTE9DSyg1MCwgRFNNUmVnaXN0 cnkpCiBQR19MV0xPQ0soNTEsIEluamVjdGlvblBvaW50KQogUEdfTFdMT0NLKDUyLCBTZXJpYWxD b250cm9sKQorUEdfTFdMT0NLKDUzLCBDbHVzdGVyZWRSZWxzKQpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvdXRpbHMvYmFja2VuZF9wcm9ncmVzcy5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvYmFja2Vu ZF9wcm9ncmVzcy5oCmluZGV4IGUwOTU5OGVhZmMuLjVhYjVkZjlkNDEgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL3V0aWxzL2JhY2tlbmRfcHJvZ3Jlc3MuaAorKysgYi9zcmMvaW5jbHVkZS91dGls cy9iYWNrZW5kX3Byb2dyZXNzLmgKQEAgLTM1LDcgKzM1LDcgQEAgdHlwZWRlZiBlbnVtIFByb2dy ZXNzQ29tbWFuZFR5cGUKIAogLyoKICAqIEFueSBjb21tYW5kIHdoaWNoIHdpc2hlcyBjYW4gYWR2 ZXJ0aXNlIHRoYXQgaXQgaXMgcnVubmluZyBieSBzZXR0aW5nCi0gKiBjb21tYW5kLCBjb21tYW5k X3RhcmdldCwgYW5kIHBhcmFtW10uICBjb21tYW5kX3RhcmdldCBzaG91bGQgYmUgdGhlIE9JRCBv ZgorICogb21tYW5kLCBjb21tYW5kX3RhcmdldCwgYW5kIHBhcmFtW10uICBjb21tYW5kX3Rhcmdl dCBzaG91bGQgYmUgdGhlIE9JRCBvZgogICogdGhlIHJlbGF0aW9uIHdoaWNoIHRoZSBjb21tYW5k IHRhcmdldHMgKHdlIGFzc3VtZSB0aGVyZSdzIGp1c3Qgb25lLCBhcyB0aGlzCiAgKiBpcyBtZWFu dCBmb3IgdXRpbGl0eSBjb21tYW5kcyksIGJ1dCB0aGUgbWVhbmluZyBvZiBlYWNoIGVsZW1lbnQg aW4gdGhlCiAgKiBwYXJhbSBhcnJheSBpcyBjb21tYW5kLXNwZWNpZmljLgpAQCAtNTUsNiArNTUs NyBAQCBleHRlcm4gdm9pZCBwZ3N0YXRfcHJvZ3Jlc3NfcGFyYWxsZWxfaW5jcl9wYXJhbShpbnQg aW5kZXgsIGludDY0IGluY3IpOwogZXh0ZXJuIHZvaWQgcGdzdGF0X3Byb2dyZXNzX3VwZGF0ZV9t dWx0aV9wYXJhbShpbnQgbnBhcmFtLCBjb25zdCBpbnQgKmluZGV4LAogCQkJCQkJCQkJCQkgICBj b25zdCBpbnQ2NCAqdmFsKTsKIGV4dGVybiB2b2lkIHBnc3RhdF9wcm9ncmVzc19lbmRfY29tbWFu ZCh2b2lkKTsKK2V4dGVybiB2b2lkIHBnc3RhdF9wcm9ncmVzc19yZXN0b3JlX3N0YXRlKFBnQmFj a2VuZFByb2dyZXNzICpiYWNrdXApOwogCiAKICNlbmRpZgkJCQkJCQkvKiBCQUNLRU5EX1BST0dS RVNTX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL2ludmFsLmggYi9zcmMvaW5j bHVkZS91dGlscy9pbnZhbC5oCmluZGV4IDI0Njk1ZmFjZjIuLjRhY2Y5ZDBlZDkgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL3V0aWxzL2ludmFsLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvaW52 YWwuaApAQCAtNDIsNiArNDIsOCBAQCBleHRlcm4gdm9pZCBDYWNoZUludmFsaWRhdGVDYXRhbG9n KE9pZCBjYXRhbG9nSWQpOwogCiBleHRlcm4gdm9pZCBDYWNoZUludmFsaWRhdGVSZWxjYWNoZShS ZWxhdGlvbiByZWxhdGlvbik7CiAKK2V4dGVybiB2b2lkIENhY2hlSW52YWxpZGF0ZVJlbGNhY2hl SW1tZWRpYXRlKFJlbGF0aW9uIHJlbGF0aW9uKTsKKwogZXh0ZXJuIHZvaWQgQ2FjaGVJbnZhbGlk YXRlUmVsY2FjaGVBbGwodm9pZCk7CiAKIGV4dGVybiB2b2lkIENhY2hlSW52YWxpZGF0ZVJlbGNh Y2hlQnlUdXBsZShIZWFwVHVwbGUgY2xhc3NUdXBsZSk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS91dGlscy9yZWwuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3JlbC5oCmluZGV4IDg3MDAyMDQ5NTMu LmFkZGE0NmM5ODUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL3JlbC5oCisrKyBiL3Ny Yy9pbmNsdWRlL3V0aWxzL3JlbC5oCkBAIC0yNTMsNiArMjUzLDkgQEAgdHlwZWRlZiBzdHJ1Y3Qg UmVsYXRpb25EYXRhCiAJYm9vbAkJcGdzdGF0X2VuYWJsZWQ7IC8qIHNob3VsZCByZWxhdGlvbiBz dGF0cyBiZSBjb3VudGVkICovCiAJLyogdXNlICJzdHJ1Y3QiIGhlcmUgdG8gYXZvaWQgbmVlZGlu ZyB0byBpbmNsdWRlIHBnc3RhdC5oOiAqLwogCXN0cnVjdCBQZ1N0YXRfVGFibGVTdGF0dXMgKnBn c3RhdF9pbmZvOyAvKiBzdGF0aXN0aWNzIGNvbGxlY3Rpb24gYXJlYSAqLworCisJLyogSXMgQ0xV U1RFUiBDT05DVVJSRU5UTFkgYmVpbmcgcGVyZm9ybWVkIG9uIHRoaXMgcmVsYXRpb24/ICovCisJ Ym9vbAlyZF9jbHVzdGVyX2NvbmN1cnJlbnQ7CiB9IFJlbGF0aW9uRGF0YTsKIAogCkBAIC02ODQs NyArNjg3LDkgQEAgUmVsYXRpb25DbG9zZVNtZ3IoUmVsYXRpb24gcmVsYXRpb24pCiAjZGVmaW5l IFJlbGF0aW9uSXNBY2Nlc3NpYmxlSW5Mb2dpY2FsRGVjb2RpbmcocmVsYXRpb24pIFwKIAkoWExv Z0xvZ2ljYWxJbmZvQWN0aXZlKCkgJiYgXAogCSBSZWxhdGlvbk5lZWRzV0FMKHJlbGF0aW9uKSAm JiBcCi0JIChJc0NhdGFsb2dSZWxhdGlvbihyZWxhdGlvbikgfHwgUmVsYXRpb25Jc1VzZWRBc0Nh dGFsb2dUYWJsZShyZWxhdGlvbikpKQorCSAoSXNDYXRhbG9nUmVsYXRpb24ocmVsYXRpb24pIHx8 IFwKKwkgIFJlbGF0aW9uSXNVc2VkQXNDYXRhbG9nVGFibGUocmVsYXRpb24pIHx8IFwKKwkgIChy ZWxhdGlvbiktPnJkX2NsdXN0ZXJfY29uY3VycmVudCkpCiAKIC8qCiAgKiBSZWxhdGlvbklzTG9n aWNhbGx5TG9nZ2VkCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9zbmFwbWdyLmggYi9z cmMvaW5jbHVkZS91dGlscy9zbmFwbWdyLmgKaW5kZXggOTM5OGE4NDA1MS4uZjU4YzkxMDhmYyAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvc25hcG1nci5oCisrKyBiL3NyYy9pbmNsdWRl L3V0aWxzL3NuYXBtZ3IuaApAQCAtNjgsNiArNjgsOSBAQCBleHRlcm4gU25hcHNob3QgR2V0TGF0 ZXN0U25hcHNob3Qodm9pZCk7CiBleHRlcm4gdm9pZCBTbmFwc2hvdFNldENvbW1hbmRJZChDb21t YW5kSWQgY3VyY2lkKTsKIGV4dGVybiBTbmFwc2hvdCBHZXRPbGRlc3RTbmFwc2hvdCh2b2lkKTsK IAorZXh0ZXJuIFNuYXBzaG90IENvcHlTbmFwc2hvdChTbmFwc2hvdCBzbmFwc2hvdCk7CitleHRl cm4gdm9pZCBGcmVlU25hcHNob3QoU25hcHNob3Qgc25hcHNob3QpOworCiBleHRlcm4gU25hcHNo b3QgR2V0Q2F0YWxvZ1NuYXBzaG90KE9pZCByZWxpZCk7CiBleHRlcm4gU25hcHNob3QgR2V0Tm9u SGlzdG9yaWNDYXRhbG9nU25hcHNob3QoT2lkIHJlbGlkKTsKIGV4dGVybiB2b2lkIEludmFsaWRh dGVDYXRhbG9nU25hcHNob3Qodm9pZCk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL3J1bGVzLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnVsZXMub3V0Cmlu ZGV4IDRjNzg5Mjc5ZTUuLjIyY2IwNzAyZGMgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvcnVsZXMub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnVsZXMu b3V0CkBAIC0xOTU4LDE3ICsxOTU4LDIwIEBAIHBnX3N0YXRfcHJvZ3Jlc3NfY2x1c3RlcnwgU0VM RUNUIHMucGlkLAogICAgICAgICAgICAgV0hFTiAyIFRIRU4gJ2luZGV4IHNjYW5uaW5nIGhlYXAn Ojp0ZXh0CiAgICAgICAgICAgICBXSEVOIDMgVEhFTiAnc29ydGluZyB0dXBsZXMnOjp0ZXh0CiAg ICAgICAgICAgICBXSEVOIDQgVEhFTiAnd3JpdGluZyBuZXcgaGVhcCc6OnRleHQKLSAgICAgICAg ICAgIFdIRU4gNSBUSEVOICdzd2FwcGluZyByZWxhdGlvbiBmaWxlcyc6OnRleHQKLSAgICAgICAg ICAgIFdIRU4gNiBUSEVOICdyZWJ1aWxkaW5nIGluZGV4Jzo6dGV4dAotICAgICAgICAgICAgV0hF TiA3IFRIRU4gJ3BlcmZvcm1pbmcgZmluYWwgY2xlYW51cCc6OnRleHQKKyAgICAgICAgICAgIFdI RU4gNSBUSEVOICdjYXRjaC11cCc6OnRleHQKKyAgICAgICAgICAgIFdIRU4gNiBUSEVOICdzd2Fw cGluZyByZWxhdGlvbiBmaWxlcyc6OnRleHQKKyAgICAgICAgICAgIFdIRU4gNyBUSEVOICdyZWJ1 aWxkaW5nIGluZGV4Jzo6dGV4dAorICAgICAgICAgICAgV0hFTiA4IFRIRU4gJ3BlcmZvcm1pbmcg ZmluYWwgY2xlYW51cCc6OnRleHQKICAgICAgICAgICAgIEVMU0UgTlVMTDo6dGV4dAogICAgICAg ICBFTkQgQVMgcGhhc2UsCiAgICAgKHMucGFyYW0zKTo6b2lkIEFTIGNsdXN0ZXJfaW5kZXhfcmVs aWQsCiAgICAgcy5wYXJhbTQgQVMgaGVhcF90dXBsZXNfc2Nhbm5lZCwKLSAgICBzLnBhcmFtNSBB UyBoZWFwX3R1cGxlc193cml0dGVuLAotICAgIHMucGFyYW02IEFTIGhlYXBfYmxrc190b3RhbCwK LSAgICBzLnBhcmFtNyBBUyBoZWFwX2Jsa3Nfc2Nhbm5lZCwKLSAgICBzLnBhcmFtOCBBUyBpbmRl eF9yZWJ1aWxkX2NvdW50CisgICAgcy5wYXJhbTUgQVMgaGVhcF90dXBsZXNfaW5zZXJ0ZWQsCisg ICAgcy5wYXJhbTYgQVMgaGVhcF90dXBsZXNfdXBkYXRlZCwKKyAgICBzLnBhcmFtNyBBUyBoZWFw X3R1cGxlc19kZWxldGVkLAorICAgIHMucGFyYW04IEFTIGhlYXBfYmxrc190b3RhbCwKKyAgICBz LnBhcmFtOSBBUyBoZWFwX2Jsa3Nfc2Nhbm5lZCwKKyAgICBzLnBhcmFtMTAgQVMgaW5kZXhfcmVi dWlsZF9jb3VudAogICAgRlJPTSAocGdfc3RhdF9nZXRfcHJvZ3Jlc3NfaW5mbygnQ0xVU1RFUic6 OnRleHQpIHMocGlkLCBkYXRpZCwgcmVsaWQsIHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMsIHBhcmFt NCwgcGFyYW01LCBwYXJhbTYsIHBhcmFtNywgcGFyYW04LCBwYXJhbTksIHBhcmFtMTAsIHBhcmFt MTEsIHBhcmFtMTIsIHBhcmFtMTMsIHBhcmFtMTQsIHBhcmFtMTUsIHBhcmFtMTYsIHBhcmFtMTcs IHBhcmFtMTgsIHBhcmFtMTksIHBhcmFtMjApCiAgICAgIExFRlQgSk9JTiBwZ19kYXRhYmFzZSBk IE9OICgocy5kYXRpZCA9IGQub2lkKSkpOwogcGdfc3RhdF9wcm9ncmVzc19jb3B5fCBTRUxFQ1Qg cy5waWQsCi0tIAoyLjQ1LjIKCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAHYwMS0wMDA0LUNhbGwtbG9naWNhbF9yZXdyaXRlX2hlYXBfdHVw bGUtd2hlbi1hcHBseWluZy1jb25jdXIucGF0Y2gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAwMDA2NDQgADAwMTc1MSAAMDAxNzUxIAAwMDAwMDA2MTYxMyAxNDY0MzI1NTUyNyAwMjQ0 MzUAIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIAMDBh aAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGFoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAMDAwMDAwIAAwMDAwMDAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAARnJvbSA4YWNmYjkwM2NiNjJiYWFiZWEyYjMyMTc0Y2U5OGI3OGQ4 NDBlMDY4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBbnRvbmluIEhvdXNrYSA8YWhA Y3liZXJ0ZWMuYXQ+CkRhdGU6IFR1ZSwgOSBKdWwgMjAyNCAxNzo0NjowMCArMDIwMApTdWJqZWN0 OiBbUEFUQ0ggNC80XSBDYWxsIGxvZ2ljYWxfcmV3cml0ZV9oZWFwX3R1cGxlKCkgd2hlbiBhcHBs eWluZwogY29uY3VycmVudCBkYXRhIGNoYW5nZXMuCgpUaGlzIHdhcyBpbXBsZW1lbnRlZCBmb3Ig dGhlIHNha2Ugb2YgY29tcGxldGVuZXNzLCBidXQgSSB0aGluayBpdCdzIGN1cnJlbnRseQpub3Qg bmVlZGVkLiBQb3NzaWJsZSB1c2UgY2FzZXMgY291bGQgYmU6CgoxLiBWQUNVVU0gRlVMTCAvIENM VVNURVIgQ09OQ1VSUkVOVExZIGNhbiBwcm9jZXNzIHN5c3RlbSBjYXRhbG9ncy4KClN5c3RlbSBj YXRhbG9ncyBhcmUgc2Nhbm5lZCB1c2luZyBhIGhpc3RvcmljIHNuYXBzaG90IGR1cmluZyBsb2dp Y2FsIGRlY29kaW5nLAphbmQgdGhlICJjb21ibyBDSURzIiBpbmZvcm1hdGlvbiBpcyBuZWVkZWQg Zm9yIHRoYXQuIFNpbmNlICJjb21ibyBDSUQiIGlzCmFzc29jaWF0ZWQgd2l0aCB0aGUgImZpbGUg bG9jYXRvciIgYW5kIHRoYXQgbG9jYXRvciBpcyBjaGFuZ2VkIGJ5IFZBQ1VVTSBGVUxMCi8gQ0xV U1RFUiwgdGhlc2UgY29tbWFuZHMgbXVzdCByZWNvcmQgdGhlIGluZm9ybWF0aW9uIG9uIGluZGl2 aWR1YWwgdHVwbGVzCmJlaW5nIG1vdmVkIGZyb20gdGhlIG9sZCBmaWxlIHRvIHRoZSBuZXcgb25l LiBUaGlzIGlzIHdoYXQKbG9naWNhbF9yZXdyaXRlX2hlYXBfdHVwbGUoKSBkb2VzLgoKSG93ZXZl ciwgdGhlIGxvZ2ljYWwgZGVjb2Rpbmcgc3Vic3lzdGVtIGN1cnJlbnRseSBkb2VzIG5vdCBzdXBw b3J0IGRlY29kaW5nIG9mCmRhdGEgY2hhbmdlcyBpbiB0aGUgc3lzdGVtIGNhdGFsb2cuIFRoZXJl Zm9yZSwgdGhlIENPTkNVUlJFTlRMWSBvcHRpb24gY2Fubm90CmJlIHVzZWQgZm9yIHN5c3RlbSBj YXRhbG9ncy4KCjIuIFZBQ1VVTSBGVUxMIC8gQ0xVU1RFUiBDT05DVVJSRU5UTFkgaXMgcHJvY2Vz c2luZyBhIHJlbGF0aW9uLCBidXQgb25jZSBpdApoYXMgcmVsZWFzZWQgYWxsIHRoZSBsb2NrcyAo aW4gb3JkZXIgdG8gZ2V0IHRoZSBleGNsdXNpdmUgbG9jayksIGFub3RoZXIKYmFja2VuZCBydW5z IFZBQ1VVTSBGVUxMIC8gQ0xVU1RFUiBDT05DVVJSRU5UTFkgb24gdGhlIHNhbWUgdGFibGUuIFNp bmNlIHRoZQpyZWxhdGlvbiBpcyB0cmVhdGVkIGFzIGEgc3lzdGVtIGNhdGFsb2cgd2hpbGUgdGhl c2UgY29tbWFuZHMgYXJlIHByb2Nlc3NpbmcgaXQKKHNvIGl0IGNhbiBiZSBzY2FubmVkIHVzaW5n IGEgaGlzdG9yaWMgc25hcHNob3QgZHVyaW5nIHRoZSAiaW5pdGlhbCBsb2FkIiksIGl0CmlzIGlt cG9ydGFudCB0aGF0IHRoZSAybmQgYmFja2VuZCBkb2VzIG5vdCBicmVhayBkZWNvZGluZyBvZiB0 aGUgImNvbWJvIENJRHMiCnBlcmZvcm1lZCBieSB0aGUgMXN0IGJhY2tlbmQuCgpIb3dldmVyLCBp dCdzIG5vdCBwcmFjdGljYWwgdG8gbGV0IG11bHRpcGxlIGJhY2tlbmRzIHJ1biBWQUNVVU0gRlVM TCAvIENMVVNURVIKQ09OQ1VSUkVOVExZIG9uIHRoZSBzYW1lIHJlbGF0aW9uLCBzbyB3ZSBmb3Ji aWQgdGhhdC4KLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jICAg ICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3Jld3JpdGVoZWFwLmMgICAgICAg ICB8ICA2NSArKysrKystLS0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvY2x1c3Rlci5jICAgICAg ICAgICAgICAgIHwgMTAyICsrKysrKysrKysrKysrLS0tLQogc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC9kZWNvZGUuYyAgICAgIHwgIDQxICsrKysrKy0KIC4uLi9wZ291dHB1dF9jbHVz dGVyL3Bnb3V0cHV0X2NsdXN0ZXIuYyAgICAgICB8ICAyMSArKy0tCiBzcmMvaW5jbHVkZS9hY2Nl c3MvcmV3cml0ZWhlYXAuaCAgICAgICAgICAgICAgfCAgIDUgKy0KIHNyYy9pbmNsdWRlL2NvbW1h bmRzL2NsdXN0ZXIuaCAgICAgICAgICAgICAgICB8ICAgMyArCiBzcmMvaW5jbHVkZS9yZXBsaWNh dGlvbi9yZW9yZGVyYnVmZmVyLmggICAgICAgfCAgIDcgKysKIDggZmlsZXMgY2hhbmdlZCwgMTg3 IGluc2VydGlvbnMoKyksIDU5IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9o ZWFwYW1faGFuZGxlci5jCmluZGV4IDAyZmQ2ZDI5ODMuLmNjY2ZmZjYyYmQgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKKysrIGIvc3JjL2JhY2tl bmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwpAQCAtNzM1LDcgKzczNSw3IEBAIGhlYXBh bV9yZWxhdGlvbl9jb3B5X2Zvcl9jbHVzdGVyKFJlbGF0aW9uIE9sZEhlYXAsIFJlbGF0aW9uIE5l d0hlYXAsCiAKIAkvKiBJbml0aWFsaXplIHRoZSByZXdyaXRlIG9wZXJhdGlvbiAqLwogCXJ3c3Rh dGUgPSBiZWdpbl9oZWFwX3Jld3JpdGUoT2xkSGVhcCwgTmV3SGVhcCwgT2xkZXN0WG1pbiwgKnhp ZF9jdXRvZmYsCi0JCQkJCQkJCSAqbXVsdGlfY3V0b2ZmKTsKKwkJCQkJCQkJICptdWx0aV9jdXRv ZmYsIHRydWUpOwogCiAKIAkvKiBTZXQgdXAgc29ydGluZyBpZiB3YW50ZWQgKi8KZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3Jld3JpdGVoZWFwLmMgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvaGVhcC9yZXdyaXRlaGVhcC5jCmluZGV4IDQ3M2YzYWE5YmUuLjA1MGM4MzA2ZGEgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3Jld3JpdGVoZWFwLmMKKysrIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL2hlYXAvcmV3cml0ZWhlYXAuYwpAQCAtMjE0LDEwICsyMTQsOCBAQCBz dGF0aWMgdm9pZCByYXdfaGVhcF9pbnNlcnQoUmV3cml0ZVN0YXRlIHN0YXRlLCBIZWFwVHVwbGUg dHVwKTsKIAogLyogaW50ZXJuYWwgbG9naWNhbCByZW1hcHBpbmcgcHJvdG90eXBlcyAqLwogc3Rh dGljIHZvaWQgbG9naWNhbF9iZWdpbl9oZWFwX3Jld3JpdGUoUmV3cml0ZVN0YXRlIHN0YXRlKTsK LXN0YXRpYyB2b2lkIGxvZ2ljYWxfcmV3cml0ZV9oZWFwX3R1cGxlKFJld3JpdGVTdGF0ZSBzdGF0 ZSwgSXRlbVBvaW50ZXJEYXRhIG9sZF90aWQsIEhlYXBUdXBsZSBuZXdfdHVwbGUpOwogc3RhdGlj IHZvaWQgbG9naWNhbF9lbmRfaGVhcF9yZXdyaXRlKFJld3JpdGVTdGF0ZSBzdGF0ZSk7CiAKLQog LyoKICAqIEJlZ2luIGEgcmV3cml0ZSBvZiBhIHRhYmxlCiAgKgpAQCAtMjI2LDE4ICsyMjQsMTkg QEAgc3RhdGljIHZvaWQgbG9naWNhbF9lbmRfaGVhcF9yZXdyaXRlKFJld3JpdGVTdGF0ZSBzdGF0 ZSk7CiAgKiBvbGRlc3RfeG1pbgl4aWQgdXNlZCBieSB0aGUgY2FsbGVyIHRvIGRldGVybWluZSB3 aGljaCB0dXBsZXMgYXJlIGRlYWQKICAqIGZyZWV6ZV94aWQJeGlkIGJlZm9yZSB3aGljaCB0dXBs ZXMgd2lsbCBiZSBmcm96ZW4KICAqIGN1dG9mZl9tdWx0aQltdWx0aXhhY3QgYmVmb3JlIHdoaWNo IG11bHRpcyB3aWxsIGJlIHJlbW92ZWQKKyAqIHRpZF9jaGFpbnMJbmVlZCB0byBtYWludGFpbiBU SUQgY2hhaW5zPwogICoKICAqIFJldHVybnMgYW4gb3BhcXVlIFJld3JpdGVTdGF0ZSwgYWxsb2Nh dGVkIGluIGN1cnJlbnQgbWVtb3J5IGNvbnRleHQsCiAgKiB0byBiZSB1c2VkIGluIHN1YnNlcXVl bnQgY2FsbHMgdG8gdGhlIG90aGVyIGZ1bmN0aW9ucy4KICAqLwogUmV3cml0ZVN0YXRlCiBiZWdp bl9oZWFwX3Jld3JpdGUoUmVsYXRpb24gb2xkX2hlYXAsIFJlbGF0aW9uIG5ld19oZWFwLCBUcmFu c2FjdGlvbklkIG9sZGVzdF94bWluLAotCQkJCSAgIFRyYW5zYWN0aW9uSWQgZnJlZXplX3hpZCwg TXVsdGlYYWN0SWQgY3V0b2ZmX211bHRpKQorCQkJCSAgIFRyYW5zYWN0aW9uSWQgZnJlZXplX3hp ZCwgTXVsdGlYYWN0SWQgY3V0b2ZmX211bHRpLAorCQkJCSAgIGJvb2wgdGlkX2NoYWlucykKIHsK IAlSZXdyaXRlU3RhdGUgc3RhdGU7CiAJTWVtb3J5Q29udGV4dCByd19jeHQ7CiAJTWVtb3J5Q29u dGV4dCBvbGRfY3h0OwotCUhBU0hDVEwJCWhhc2hfY3RsOwogCiAJLyoKIAkgKiBUbyBlYXNlIGNs ZWFudXAsIG1ha2UgYSBzZXBhcmF0ZSBjb250ZXh0IHRoYXQgd2lsbCBjb250YWluIHRoZQpAQCAt MjYyLDI5ICsyNjEsMzQgQEAgYmVnaW5faGVhcF9yZXdyaXRlKFJlbGF0aW9uIG9sZF9oZWFwLCBS ZWxhdGlvbiBuZXdfaGVhcCwgVHJhbnNhY3Rpb25JZCBvbGRlc3RfeG0KIAlzdGF0ZS0+cnNfY3h0 ID0gcndfY3h0OwogCXN0YXRlLT5yc19idWxrc3RhdGUgPSBzbWdyX2J1bGtfc3RhcnRfcmVsKG5l d19oZWFwLCBNQUlOX0ZPUktOVU0pOwogCi0JLyogSW5pdGlhbGl6ZSBoYXNoIHRhYmxlcyB1c2Vk IHRvIHRyYWNrIHVwZGF0ZSBjaGFpbnMgKi8KLQloYXNoX2N0bC5rZXlzaXplID0gc2l6ZW9mKFRp ZEhhc2hLZXkpOwotCWhhc2hfY3RsLmVudHJ5c2l6ZSA9IHNpemVvZihVbnJlc29sdmVkVHVwRGF0 YSk7Ci0JaGFzaF9jdGwuaGN4dCA9IHN0YXRlLT5yc19jeHQ7Ci0KLQlzdGF0ZS0+cnNfdW5yZXNv bHZlZF90dXBzID0KLQkJaGFzaF9jcmVhdGUoIlJld3JpdGUgLyBVbnJlc29sdmVkIGN0aWRzIiwK LQkJCQkJMTI4LAkJLyogYXJiaXRyYXJ5IGluaXRpYWwgc2l6ZSAqLwotCQkJCQkmaGFzaF9jdGws Ci0JCQkJCUhBU0hfRUxFTSB8IEhBU0hfQkxPQlMgfCBIQVNIX0NPTlRFWFQpOwotCi0JaGFzaF9j dGwuZW50cnlzaXplID0gc2l6ZW9mKE9sZFRvTmV3TWFwcGluZ0RhdGEpOworCWlmICh0aWRfY2hh aW5zKQorCXsKKwkJSEFTSENUTAkJaGFzaF9jdGw7CisKKwkJLyogSW5pdGlhbGl6ZSBoYXNoIHRh YmxlcyB1c2VkIHRvIHRyYWNrIHVwZGF0ZSBjaGFpbnMgKi8KKwkJaGFzaF9jdGwua2V5c2l6ZSA9 IHNpemVvZihUaWRIYXNoS2V5KTsKKwkJaGFzaF9jdGwuZW50cnlzaXplID0gc2l6ZW9mKFVucmVz b2x2ZWRUdXBEYXRhKTsKKwkJaGFzaF9jdGwuaGN4dCA9IHN0YXRlLT5yc19jeHQ7CisKKwkJc3Rh dGUtPnJzX3VucmVzb2x2ZWRfdHVwcyA9CisJCQloYXNoX2NyZWF0ZSgiUmV3cml0ZSAvIFVucmVz b2x2ZWQgY3RpZHMiLAorCQkJCQkJMTI4LAkJLyogYXJiaXRyYXJ5IGluaXRpYWwgc2l6ZSAqLwor CQkJCQkJJmhhc2hfY3RsLAorCQkJCQkJSEFTSF9FTEVNIHwgSEFTSF9CTE9CUyB8IEhBU0hfQ09O VEVYVCk7CisKKwkJaGFzaF9jdGwuZW50cnlzaXplID0gc2l6ZW9mKE9sZFRvTmV3TWFwcGluZ0Rh dGEpOworCisJCXN0YXRlLT5yc19vbGRfbmV3X3RpZF9tYXAgPQorCQkJaGFzaF9jcmVhdGUoIlJl d3JpdGUgLyBPbGQgdG8gbmV3IHRpZCBtYXAiLAorCQkJCQkJMTI4LAkJLyogYXJiaXRyYXJ5IGlu aXRpYWwgc2l6ZSAqLworCQkJCQkJJmhhc2hfY3RsLAorCQkJCQkJSEFTSF9FTEVNIHwgSEFTSF9C TE9CUyB8IEhBU0hfQ09OVEVYVCk7CisJfQogCi0Jc3RhdGUtPnJzX29sZF9uZXdfdGlkX21hcCA9 Ci0JCWhhc2hfY3JlYXRlKCJSZXdyaXRlIC8gT2xkIHRvIG5ldyB0aWQgbWFwIiwKLQkJCQkJMTI4 LAkJLyogYXJiaXRyYXJ5IGluaXRpYWwgc2l6ZSAqLwotCQkJCQkmaGFzaF9jdGwsCi0JCQkJCUhB U0hfRUxFTSB8IEhBU0hfQkxPQlMgfCBIQVNIX0NPTlRFWFQpOworCWxvZ2ljYWxfYmVnaW5faGVh cF9yZXdyaXRlKHN0YXRlKTsKIAogCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRfY3h0KTsKIAot CWxvZ2ljYWxfYmVnaW5faGVhcF9yZXdyaXRlKHN0YXRlKTsKLQogCXJldHVybiBzdGF0ZTsKIH0K IApAQCAtMzAzLDEyICszMDcsMTUgQEAgZW5kX2hlYXBfcmV3cml0ZShSZXdyaXRlU3RhdGUgc3Rh dGUpCiAJICogV3JpdGUgYW55IHJlbWFpbmluZyB0dXBsZXMgaW4gdGhlIFVucmVzb2x2ZWRUdXBz IHRhYmxlLiBJZiB3ZSBoYXZlIGFueQogCSAqIGxlZnQsIHRoZXkgc2hvdWxkIGluIGZhY3QgYmUg ZGVhZCwgYnV0IGxldCdzIGVyciBvbiB0aGUgc2FmZSBzaWRlLgogCSAqLwotCWhhc2hfc2VxX2lu aXQoJnNlcV9zdGF0dXMsIHN0YXRlLT5yc191bnJlc29sdmVkX3R1cHMpOwotCi0Jd2hpbGUgKCh1 bnJlc29sdmVkID0gaGFzaF9zZXFfc2VhcmNoKCZzZXFfc3RhdHVzKSkgIT0gTlVMTCkKKwlpZiAo c3RhdGUtPnJzX3VucmVzb2x2ZWRfdHVwcykKIAl7Ci0JCUl0ZW1Qb2ludGVyU2V0SW52YWxpZCgm dW5yZXNvbHZlZC0+dHVwbGUtPnRfZGF0YS0+dF9jdGlkKTsKLQkJcmF3X2hlYXBfaW5zZXJ0KHN0 YXRlLCB1bnJlc29sdmVkLT50dXBsZSk7CisJCWhhc2hfc2VxX2luaXQoJnNlcV9zdGF0dXMsIHN0 YXRlLT5yc191bnJlc29sdmVkX3R1cHMpOworCisJCXdoaWxlICgodW5yZXNvbHZlZCA9IGhhc2hf c2VxX3NlYXJjaCgmc2VxX3N0YXR1cykpICE9IE5VTEwpCisJCXsKKwkJCUl0ZW1Qb2ludGVyU2V0 SW52YWxpZCgmdW5yZXNvbHZlZC0+dHVwbGUtPnRfZGF0YS0+dF9jdGlkKTsKKwkJCXJhd19oZWFw X2luc2VydChzdGF0ZSwgdW5yZXNvbHZlZC0+dHVwbGUpOworCQl9CiAJfQogCiAJLyogV3JpdGUg dGhlIGxhc3QgcGFnZSwgaWYgYW55ICovCkBAIC05OTUsNyArMTAwMiw3IEBAIGxvZ2ljYWxfcmV3 cml0ZV9sb2dfbWFwcGluZyhSZXdyaXRlU3RhdGUgc3RhdGUsIFRyYW5zYWN0aW9uSWQgeGlkLAog ICogUGVyZm9ybSBsb2dpY2FsIHJlbWFwcGluZyBmb3IgYSB0dXBsZSB0aGF0J3MgbWFwcGVkIGZy b20gb2xkX3RpZCB0bwogICogbmV3X3R1cGxlLT50X3NlbGYgYnkgcmV3cml0ZV9oZWFwX3R1cGxl KCkgaWYgbmVjZXNzYXJ5IGZvciB0aGUgdHVwbGUuCiAgKi8KLXN0YXRpYyB2b2lkCit2b2lkCiBs b2dpY2FsX3Jld3JpdGVfaGVhcF90dXBsZShSZXdyaXRlU3RhdGUgc3RhdGUsIEl0ZW1Qb2ludGVy RGF0YSBvbGRfdGlkLAogCQkJCQkJICAgSGVhcFR1cGxlIG5ld190dXBsZSkKIHsKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NsdXN0ZXIuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L2NsdXN0ZXIuYwppbmRleCA2Mzk3ZjdmOGM0Li40MmU4MTE4YjdkIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9jb21tYW5kcy9jbHVzdGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY2x1 c3Rlci5jCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSAiYWNjZXNzL2hlYXBhbS5oIgogI2lu Y2x1ZGUgImFjY2Vzcy9tdWx0aXhhY3QuaCIKICNpbmNsdWRlICJhY2Nlc3MvcmVsc2Nhbi5oIgor I2luY2x1ZGUgImFjY2Vzcy9yZXdyaXRlaGVhcC5oIgogI2luY2x1ZGUgImFjY2Vzcy90YWJsZWFt LmgiCiAjaW5jbHVkZSAiYWNjZXNzL3RvYXN0X2ludGVybmFscy5oIgogI2luY2x1ZGUgImFjY2Vz cy90cmFuc2FtLmgiCkBAIC0xNzksMTcgKzE4MCwyMSBAQCBzdGF0aWMgTG9naWNhbERlY29kaW5n Q29udGV4dCAqc2V0dXBfbG9naWNhbF9kZWNvZGluZyhPaWQgcmVsaWQsCiBzdGF0aWMgSGVhcFR1 cGxlIGdldF9jaGFuZ2VkX3R1cGxlKENvbmN1cnJlbnRDaGFuZ2UgKmNoYW5nZSk7CiBzdGF0aWMg dm9pZCBhcHBseV9jb25jdXJyZW50X2NoYW5nZXMoQ2x1c3RlckRlY29kaW5nU3RhdGUgKmRzdGF0 ZSwKIAkJCQkJCQkJCSBSZWxhdGlvbiByZWwsIFNjYW5LZXkga2V5LCBpbnQgbmtleXMsCi0JCQkJ CQkJCQkgSW5kZXhJbnNlcnRTdGF0ZSAqaWlzdGF0ZSk7CisJCQkJCQkJCQkgSW5kZXhJbnNlcnRT dGF0ZSAqaWlzdGF0ZSwKKwkJCQkJCQkJCSBSZXdyaXRlU3RhdGUgcndzdGF0ZSk7CiBzdGF0aWMg dm9pZCBhcHBseV9jb25jdXJyZW50X2luc2VydChSZWxhdGlvbiByZWwsIENvbmN1cnJlbnRDaGFu Z2UgKmNoYW5nZSwKIAkJCQkJCQkJCUhlYXBUdXBsZSB0dXAsIEluZGV4SW5zZXJ0U3RhdGUgKmlp c3RhdGUsCi0JCQkJCQkJCQlUdXBsZVRhYmxlU2xvdCAqaW5kZXhfc2xvdCk7CisJCQkJCQkJCQlU dXBsZVRhYmxlU2xvdCAqaW5kZXhfc2xvdCwKKwkJCQkJCQkJCVJld3JpdGVTdGF0ZSByd3N0YXRl KTsKIHN0YXRpYyB2b2lkIGFwcGx5X2NvbmN1cnJlbnRfdXBkYXRlKFJlbGF0aW9uIHJlbCwgSGVh cFR1cGxlIHR1cCwKIAkJCQkJCQkJCUhlYXBUdXBsZSB0dXBfdGFyZ2V0LAogCQkJCQkJCQkJQ29u Y3VycmVudENoYW5nZSAqY2hhbmdlLAogCQkJCQkJCQkJSW5kZXhJbnNlcnRTdGF0ZSAqaWlzdGF0 ZSwKLQkJCQkJCQkJCVR1cGxlVGFibGVTbG90ICppbmRleF9zbG90KTsKKwkJCQkJCQkJCVR1cGxl VGFibGVTbG90ICppbmRleF9zbG90LAorCQkJCQkJCQkJUmV3cml0ZVN0YXRlIHJ3c3RhdGUpOwog c3RhdGljIHZvaWQgYXBwbHlfY29uY3VycmVudF9kZWxldGUoUmVsYXRpb24gcmVsLCBIZWFwVHVw bGUgdHVwX3RhcmdldCwKLQkJCQkJCQkJCUNvbmN1cnJlbnRDaGFuZ2UgKmNoYW5nZSk7CisJCQkJ CQkJCQlDb25jdXJyZW50Q2hhbmdlICpjaGFuZ2UsCisJCQkJCQkJCQlSZXdyaXRlU3RhdGUgcndz dGF0ZSk7CiBzdGF0aWMgSGVhcFR1cGxlIGZpbmRfdGFyZ2V0X3R1cGxlKFJlbGF0aW9uIHJlbCwg U2NhbktleSBrZXksIGludCBua2V5cywKIAkJCQkJCQkJICAgSGVhcFR1cGxlIHR1cF9rZXksCiAJ CQkJCQkJCSAgIFNuYXBzaG90IHNuYXBzaG90LApAQCAtMjAyLDcgKzIwNyw4IEBAIHN0YXRpYyB2 b2lkIHByb2Nlc3NfY29uY3VycmVudF9jaGFuZ2VzKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0 eCwKIAkJCQkJCQkJCSAgIFJlbGF0aW9uIHJlbF9zcmMsCiAJCQkJCQkJCQkgICBTY2FuS2V5IGlk ZW50X2tleSwKIAkJCQkJCQkJCSAgIGludCBpZGVudF9rZXlfbmVudHJpZXMsCi0JCQkJCQkJCQkg ICBJbmRleEluc2VydFN0YXRlICppaXN0YXRlKTsKKwkJCQkJCQkJCSAgIEluZGV4SW5zZXJ0U3Rh dGUgKmlpc3RhdGUsCisJCQkJCQkJCQkgICBSZXdyaXRlU3RhdGUgcndzdGF0ZSk7CiBzdGF0aWMg SW5kZXhJbnNlcnRTdGF0ZSAqZ2V0X2luZGV4X2luc2VydF9zdGF0ZShSZWxhdGlvbiByZWxhdGlv biwKIAkJCQkJCQkJCQkJCU9pZCBpZGVudF9pbmRleF9pZCk7CiBzdGF0aWMgU2NhbktleSBidWls ZF9pZGVudGl0eV9rZXkoT2lkIGlkZW50X2lkeF9vaWQsIFJlbGF0aW9uIHJlbF9zcmMsCkBAIC0z MDczLDcgKzMwNzksOCBAQCBjbHVzdGVyX2RlY29kZV9jb25jdXJyZW50X2NoYW5nZXMoTG9naWNh bERlY29kaW5nQ29udGV4dCAqY3R4LAogICovCiBzdGF0aWMgdm9pZAogYXBwbHlfY29uY3VycmVu dF9jaGFuZ2VzKENsdXN0ZXJEZWNvZGluZ1N0YXRlICpkc3RhdGUsIFJlbGF0aW9uIHJlbCwKLQkJ CQkJCSBTY2FuS2V5IGtleSwgaW50IG5rZXlzLCBJbmRleEluc2VydFN0YXRlICppaXN0YXRlKQor CQkJCQkJIFNjYW5LZXkga2V5LCBpbnQgbmtleXMsIEluZGV4SW5zZXJ0U3RhdGUgKmlpc3RhdGUs CisJCQkJCQkgUmV3cml0ZVN0YXRlIHJ3c3RhdGUpCiB7CiAJVHVwbGVUYWJsZVNsb3QgKmluZGV4 X3Nsb3QsICppZGVudF9zbG90OwogCUhlYXBUdXBsZQl0dXBfb2xkID0gTlVMTDsKQEAgLTMxNDQs NyArMzE1MSw4IEBAIGFwcGx5X2NvbmN1cnJlbnRfY2hhbmdlcyhDbHVzdGVyRGVjb2RpbmdTdGF0 ZSAqZHN0YXRlLCBSZWxhdGlvbiByZWwsCiAJCXsKIAkJCUFzc2VydCh0dXBfb2xkID09IE5VTEwp OwogCi0JCQlhcHBseV9jb25jdXJyZW50X2luc2VydChyZWwsIGNoYW5nZSwgdHVwLCBpaXN0YXRl LCBpbmRleF9zbG90KTsKKwkJCWFwcGx5X2NvbmN1cnJlbnRfaW5zZXJ0KHJlbCwgY2hhbmdlLCB0 dXAsIGlpc3RhdGUsIGluZGV4X3Nsb3QsCisJCQkJCQkJCQlyd3N0YXRlKTsKIAogCQkJcGZyZWUo dHVwKTsKIAkJfQpAQCAtMzE1Miw3ICszMTYwLDcgQEAgYXBwbHlfY29uY3VycmVudF9jaGFuZ2Vz KENsdXN0ZXJEZWNvZGluZ1N0YXRlICpkc3RhdGUsIFJlbGF0aW9uIHJlbCwKIAkJCQkgY2hhbmdl LT5raW5kID09IENIQU5HRV9ERUxFVEUpCiAJCXsKIAkJCUluZGV4U2NhbkRlc2MJaW5kX3NjYW4g PSBOVUxMOwotCQkJSGVhcFR1cGxlCXR1cF9rZXk7CisJCQlIZWFwVHVwbGUJdHVwX2tleSwgdHVw X2V4aXN0X2NwOwogCiAJCQlpZiAoY2hhbmdlLT5raW5kID09IENIQU5HRV9VUERBVEVfTkVXKQog CQkJewpAQCAtMzE5MywxMSArMzIwMSwyMyBAQCBhcHBseV9jb25jdXJyZW50X2NoYW5nZXMoQ2x1 c3RlckRlY29kaW5nU3RhdGUgKmRzdGF0ZSwgUmVsYXRpb24gcmVsLAogCQkJaWYgKHR1cF9leGlz dCA9PSBOVUxMKQogCQkJCWVsb2coRVJST1IsICJGYWlsZWQgdG8gZmluZCB0YXJnZXQgdHVwbGUi KTsKIAorCQkJLyoKKwkJCSAqIFVwZGF0ZSB0aGUgbWFwcGluZyBmb3IgeG1heCBvZiB0aGUgb2xk IHZlcnNpb24uCisJCQkgKgorCQkJICogVXNlIGEgY29weSAoJ3R1cF9leGlzdCcgY2FuIHBvaW50 IHRvIHNoYXJlZCBidWZmZXIpIHdpdGggeG1pbgorCQkJICogaW52YWxpZCBiZWNhdXNlIG1hcHBp bmcgb2YgdGhhdCBzaG91bGQgaGF2ZSBiZWVuIHdyaXR0ZW4gb24KKwkJCSAqIGluc2VydGlvbi4K KwkJCSAqLworCQkJdHVwX2V4aXN0X2NwID0gaGVhcF9jb3B5dHVwbGUodHVwX2V4aXN0KTsKKwkJ CUhlYXBUdXBsZUhlYWRlclNldFhtaW4odHVwX2V4aXN0X2NwLT50X2RhdGEsIEludmFsaWRUcmFu c2FjdGlvbklkKTsKKwkJCWxvZ2ljYWxfcmV3cml0ZV9oZWFwX3R1cGxlKHJ3c3RhdGUsIGNoYW5n ZS0+b2xkX3RpZCwgdHVwX2V4aXN0X2NwKTsKKwkJCXBmcmVlKHR1cF9leGlzdF9jcCk7CisKIAkJ CWlmIChjaGFuZ2UtPmtpbmQgPT0gQ0hBTkdFX1VQREFURV9ORVcpCiAJCQkJYXBwbHlfY29uY3Vy cmVudF91cGRhdGUocmVsLCB0dXAsIHR1cF9leGlzdCwgY2hhbmdlLCBpaXN0YXRlLAotCQkJCQkJ CQkJCWluZGV4X3Nsb3QpOworCQkJCQkJCQkJCWluZGV4X3Nsb3QsIHJ3c3RhdGUpOwogCQkJZWxz ZQotCQkJCWFwcGx5X2NvbmN1cnJlbnRfZGVsZXRlKHJlbCwgdHVwX2V4aXN0LCBjaGFuZ2UpOwor CQkJCWFwcGx5X2NvbmN1cnJlbnRfZGVsZXRlKHJlbCwgdHVwX2V4aXN0LCBjaGFuZ2UsIHJ3c3Rh dGUpOwogCiAJCQlSZXNldENsdXN0ZXJDdXJyZW50WGlkcygpOwogCkBAIC0zMjM4LDkgKzMyNTgs MTIgQEAgYXBwbHlfY29uY3VycmVudF9jaGFuZ2VzKENsdXN0ZXJEZWNvZGluZ1N0YXRlICpkc3Rh dGUsIFJlbGF0aW9uIHJlbCwKIAogc3RhdGljIHZvaWQKIGFwcGx5X2NvbmN1cnJlbnRfaW5zZXJ0 KFJlbGF0aW9uIHJlbCwgQ29uY3VycmVudENoYW5nZSAqY2hhbmdlLCBIZWFwVHVwbGUgdHVwLAot CQkJCQkJSW5kZXhJbnNlcnRTdGF0ZSAqaWlzdGF0ZSwgVHVwbGVUYWJsZVNsb3QgKmluZGV4X3Ns b3QpCisJCQkJCQlJbmRleEluc2VydFN0YXRlICppaXN0YXRlLCBUdXBsZVRhYmxlU2xvdCAqaW5k ZXhfc2xvdCwKKwkJCQkJCVJld3JpdGVTdGF0ZSByd3N0YXRlKQogeworCUhlYXBUdXBsZUhlYWRl cgl0dXBfaGRyID0gdHVwLT50X2RhdGE7CiAJU25hcHNob3QJc25hcHNob3QgPSBjaGFuZ2UtPnNu YXBzaG90OworCUl0ZW1Qb2ludGVyRGF0YQkJb2xkX3RpZDsKIAlMaXN0CSAgICpyZWNoZWNrOwog CiAJLyoKQEAgLTMyNTAsNiArMzI3Myw5IEBAIGFwcGx5X2NvbmN1cnJlbnRfaW5zZXJ0KFJlbGF0 aW9uIHJlbCwgQ29uY3VycmVudENoYW5nZSAqY2hhbmdlLCBIZWFwVHVwbGUgdHVwLAogCSAqLwog CVNldENsdXN0ZXJDdXJyZW50WGlkcyhzbmFwc2hvdC0+c3VieGlwLCBzbmFwc2hvdC0+c3VieGNu dCk7CiAKKwkvKiBSZW1lbWJlciBsb2NhdGlvbiBpbiB0aGUgb2xkIGhlYXAuICovCisJSXRlbVBv aW50ZXJDb3B5KCZ0dXBfaGRyLT50X2N0aWQsICZvbGRfdGlkKTsKKwogCS8qCiAJICogV3JpdGUg dGhlIHR1cGxlIGludG8gdGhlIG5ldyBoZWFwLgogCSAqCkBAIC0zMjY1LDYgKzMyOTEsMTQgQEAg YXBwbHlfY29uY3VycmVudF9pbnNlcnQoUmVsYXRpb24gcmVsLCBDb25jdXJyZW50Q2hhbmdlICpj aGFuZ2UsIEhlYXBUdXBsZSB0dXAsCiAJaGVhcF9pbnNlcnQocmVsLCB0dXAsIGNoYW5nZS0+eGlk LCBzbmFwc2hvdC0+Y3VyY2lkIC0gMSwKIAkJCQlIRUFQX0lOU0VSVF9OT19MT0dJQ0FMLCBOVUxM KTsKIAorCS8qCisJICogVXBkYXRlIHRoZSBtYXBwaW5nIGZvciB4bWluLiAoeG1heCBzaG91bGQg YmUgaW52YWxpZCkuIFRoaXMgaXMgbmVlZGVkCisJICogYmVjYXVzZSwgZHVyaW5nIHRoZSBwcm9j ZXNzaW5nLCB0aGUgdGFibGUgaXMgY29uc2lkZXJlZCBhbiAidXNlcgorCSAqIGNhdGFsb2ciLgor CSAqLworCUFzc2VydCghVHJhbnNhY3Rpb25JZElzVmFsaWQoSGVhcFR1cGxlSGVhZGVyR2V0UmF3 WG1heCh0dXAtPnRfZGF0YSkpKTsKKwlsb2dpY2FsX3Jld3JpdGVfaGVhcF90dXBsZShyd3N0YXRl LCBvbGRfdGlkLCB0dXApOworCiAJLyoKIAkgKiBVcGRhdGUgaW5kZXhlcy4KIAkgKgpAQCAtMzI5 OCwxNiArMzMzMiwxOSBAQCBhcHBseV9jb25jdXJyZW50X2luc2VydChSZWxhdGlvbiByZWwsIENv bmN1cnJlbnRDaGFuZ2UgKmNoYW5nZSwgSGVhcFR1cGxlIHR1cCwKIHN0YXRpYyB2b2lkCiBhcHBs eV9jb25jdXJyZW50X3VwZGF0ZShSZWxhdGlvbiByZWwsIEhlYXBUdXBsZSB0dXAsIEhlYXBUdXBs ZSB0dXBfdGFyZ2V0LAogCQkJCQkJQ29uY3VycmVudENoYW5nZSAqY2hhbmdlLCBJbmRleEluc2Vy dFN0YXRlICppaXN0YXRlLAotCQkJCQkJVHVwbGVUYWJsZVNsb3QgKmluZGV4X3Nsb3QpCisJCQkJ CQlUdXBsZVRhYmxlU2xvdCAqaW5kZXhfc2xvdCwgUmV3cml0ZVN0YXRlIHJ3c3RhdGUpCiB7CiAJ TGlzdAkgICAqcmVjaGVjazsKIAlMb2NrVHVwbGVNb2RlCWxvY2ttb2RlOwogCVRVX1VwZGF0ZUlu ZGV4ZXMJdXBkYXRlX2luZGV4ZXM7Ci0JSXRlbVBvaW50ZXJEYXRhCQl0aWRfb2xkX25ld19oZWFw OworCUl0ZW1Qb2ludGVyRGF0YQkJdGlkX25ld19vbGRfaGVhcCwgdGlkX29sZF9uZXdfaGVhcDsK IAlUTV9SZXN1bHQJcmVzOwogCVNuYXBzaG90IHNuYXBzaG90CT0gY2hhbmdlLT5zbmFwc2hvdDsK IAlUTV9GYWlsdXJlRGF0YSB0bWZkOwogCisJLyogTG9jYXRpb24gb2YgdGhlIG5ldyB0dXBsZSBp biB0aGUgb2xkIGhlYXAuICovCisJSXRlbVBvaW50ZXJDb3B5KCZ0dXAtPnRfZGF0YS0+dF9jdGlk LCAmdGlkX25ld19vbGRfaGVhcCk7CisKIAkvKiBMb2NhdGlvbiBvZiB0aGUgZXhpc3RpbmcgdHVw bGUgaW4gdGhlIG5ldyBoZWFwLiAqLwogCUl0ZW1Qb2ludGVyQ29weSgmdHVwX3RhcmdldC0+dF9z ZWxmLCAmdGlkX29sZF9uZXdfaGVhcCk7CiAKQEAgLTMzMzAsNiArMzM2NywxMCBAQCBhcHBseV9j b25jdXJyZW50X3VwZGF0ZShSZWxhdGlvbiByZWwsIEhlYXBUdXBsZSB0dXAsIEhlYXBUdXBsZSB0 dXBfdGFyZ2V0LAogCWlmIChyZXMgIT0gVE1fT2spCiAJCWVyZXBvcnQoRVJST1IsIChlcnJtc2co ImZhaWxlZCB0byBhcHBseSBjb25jdXJyZW50IFVQREFURSIpKSk7CiAKKwkvKiBVcGRhdGUgdGhl IG1hcHBpbmcgZm9yIHhtaW4gb2YgdGhlIG5ldyB2ZXJzaW9uLiAqLworCUFzc2VydCghVHJhbnNh Y3Rpb25JZElzVmFsaWQoSGVhcFR1cGxlSGVhZGVyR2V0UmF3WG1heCh0dXAtPnRfZGF0YSkpKTsK Kwlsb2dpY2FsX3Jld3JpdGVfaGVhcF90dXBsZShyd3N0YXRlLCB0aWRfbmV3X29sZF9oZWFwLCB0 dXApOworCiAJRXhlY1N0b3JlSGVhcFR1cGxlKHR1cCwgaW5kZXhfc2xvdCwgZmFsc2UpOwogCiAJ aWYgKHVwZGF0ZV9pbmRleGVzICE9IFRVX05vbmUpCkBAIC0zMzUzLDcgKzMzOTQsNyBAQCBhcHBs eV9jb25jdXJyZW50X3VwZGF0ZShSZWxhdGlvbiByZWwsIEhlYXBUdXBsZSB0dXAsIEhlYXBUdXBs ZSB0dXBfdGFyZ2V0LAogCiBzdGF0aWMgdm9pZAogYXBwbHlfY29uY3VycmVudF9kZWxldGUoUmVs YXRpb24gcmVsLCBIZWFwVHVwbGUgdHVwX3RhcmdldCwKLQkJCQkJCUNvbmN1cnJlbnRDaGFuZ2Ug KmNoYW5nZSkKKwkJCQkJCUNvbmN1cnJlbnRDaGFuZ2UgKmNoYW5nZSwgUmV3cml0ZVN0YXRlIHJ3 c3RhdGUpCiB7CiAJSXRlbVBvaW50ZXJEYXRhCQl0aWRfb2xkX25ld19oZWFwOwogCVRNX1Jlc3Vs dAlyZXM7CkBAIC0zNDQ0LDcgKzM0ODUsOCBAQCBmaW5kX3RhcmdldF90dXBsZShSZWxhdGlvbiBy ZWwsIFNjYW5LZXkga2V5LCBpbnQgbmtleXMsIEhlYXBUdXBsZSB0dXBfa2V5LAogc3RhdGljIHZv aWQKIHByb2Nlc3NfY29uY3VycmVudF9jaGFuZ2VzKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0 eCwgWExvZ1JlY1B0ciBlbmRfb2Zfd2FsLAogCQkJCQkJICAgUmVsYXRpb24gcmVsX2RzdCwgUmVs YXRpb24gcmVsX3NyYywgU2NhbktleSBpZGVudF9rZXksCi0JCQkJCQkgICBpbnQgaWRlbnRfa2V5 X25lbnRyaWVzLCBJbmRleEluc2VydFN0YXRlICppaXN0YXRlKQorCQkJCQkJICAgaW50IGlkZW50 X2tleV9uZW50cmllcywgSW5kZXhJbnNlcnRTdGF0ZSAqaWlzdGF0ZSwKKwkJCQkJCSAgIFJld3Jp dGVTdGF0ZSByd3N0YXRlKQogewogCUNsdXN0ZXJEZWNvZGluZ1N0YXRlICpkc3RhdGU7CiAKQEAg LTM0NjgsNyArMzUxMCw3IEBAIHByb2Nlc3NfY29uY3VycmVudF9jaGFuZ2VzKExvZ2ljYWxEZWNv ZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY1B0ciBlbmRfb2Zfd2FsLAogCQkJcmVsX2RzdC0+cmRf dG9hc3RvaWQgPSByZWxfc3JjLT5yZF9yZWwtPnJlbHRvYXN0cmVsaWQ7CiAKIAkJYXBwbHlfY29u Y3VycmVudF9jaGFuZ2VzKGRzdGF0ZSwgcmVsX2RzdCwgaWRlbnRfa2V5LAotCQkJCQkJCQkgaWRl bnRfa2V5X25lbnRyaWVzLCBpaXN0YXRlKTsKKwkJCQkJCQkJIGlkZW50X2tleV9uZW50cmllcywg aWlzdGF0ZSwgcndzdGF0ZSk7CiAJfQogCVBHX0ZJTkFMTFkoKTsKIAl7CkBAIC0zNjMxLDYgKzM2 NzMsNyBAQCByZWJ1aWxkX3JlbGF0aW9uX2ZpbmlzaF9jb25jdXJyZW50KFJlbGF0aW9uIE5ld0hl YXAsIFJlbGF0aW9uIE9sZEhlYXAsCiAJYm9vbAkJaXNfc3lzdGVtX2NhdGFsb2c7CiAJT2lkCQlp ZGVudF9pZHhfb2xkLCBpZGVudF9pZHhfbmV3OwogCUluZGV4SW5zZXJ0U3RhdGUgKmlpc3RhdGU7 CisJUmV3cml0ZVN0YXRlCXJ3c3RhdGU7CiAJU2NhbktleQkJaWRlbnRfa2V5OwogCWludAkJaWRl bnRfa2V5X25lbnRyaWVzOwogCVhMb2dSZWNQdHIJd2FsX2luc2VydF9wdHIsIGVuZF9vZl93YWw7 CkBAIC0zNzA4LDEwICszNzUxLDI2IEBAIHJlYnVpbGRfcmVsYXRpb25fZmluaXNoX2NvbmN1cnJl bnQoUmVsYXRpb24gTmV3SGVhcCwgUmVsYXRpb24gT2xkSGVhcCwKIAkgKiBBcHBseSBjb25jdXJy ZW50IGNoYW5nZXMgZmlyc3QgdGltZSwgdG8gbWluaW1pemUgdGhlIHRpbWUgd2UgbmVlZCB0bwog CSAqIGhvbGQgQWNjZXNzRXhjbHVzaXZlTG9jay4gKFF1aXRlIHNvbWUgYW1vdW50IG9mIFdBTCBj b3VsZCBoYXZlIGJlZW4KIAkgKiB3cml0dGVuIGR1cmluZyB0aGUgZGF0YSBjb3B5aW5nIGFuZCBp bmRleCBjcmVhdGlvbi4pCisJICoKKwkgKiBOb3cgd2UgYXJlIHByb2Nlc3NpbmcgaW5kaXZpZHVh bCB0dXBsZXMsIHNvIHBhc3MgZmFsc2UgZm9yCisJICogJ3RpZF9jaGFpbnMnLiBTaW5jZSByd3N0 YXRlIGlzIG5vdyBvbmx5IG5lZWRlZCBmb3IKKwkgKiBsb2dpY2FsX2JlZ2luX2hlYXBfcmV3cml0 ZSgpLCBub25lIG9mIHRoZSB0cmFuc2FjdGlvbiBJRHMgbmVlZHMgdG8gYmUKKwkgKiB2YWxpZC4K IAkgKi8KKwlyd3N0YXRlID0gYmVnaW5faGVhcF9yZXdyaXRlKE9sZEhlYXAsIE5ld0hlYXAsCisJ CQkJCQkJCSBJbnZhbGlkVHJhbnNhY3Rpb25JZCwKKwkJCQkJCQkJIEludmFsaWRUcmFuc2FjdGlv bklkLAorCQkJCQkJCQkgSW52YWxpZFRyYW5zYWN0aW9uSWQsCisJCQkJCQkJCSBmYWxzZSk7CiAJ cHJvY2Vzc19jb25jdXJyZW50X2NoYW5nZXMoY3R4LCBlbmRfb2Zfd2FsLCBOZXdIZWFwLAogCQkJ CQkJCSAgIHN3YXBfdG9hc3RfYnlfY29udGVudCA/IE9sZEhlYXAgOiBOVUxMLAotCQkJCQkJCSAg IGlkZW50X2tleSwgaWRlbnRfa2V5X25lbnRyaWVzLCBpaXN0YXRlKTsKKwkJCQkJCQkgICBpZGVu dF9rZXksIGlkZW50X2tleV9uZW50cmllcywgaWlzdGF0ZSwKKwkJCQkJCQkgICByd3N0YXRlKTsK KwkvKgorCSAqIE9sZEhlYXAgd2lsbCBiZSBjbG9zZWQsIHNvIHdlIG5lZWQgdG8gaW5pdGlhbGl6 ZSByd3N0YXRlIGFnYWluIGZvciB0aGUKKwkgKiBuZXh0IGNhbGwgb2YgcHJvY2Vzc19jb25jdXJy ZW50X2NoYW5nZXMoKS4KKwkgKi8KKwllbmRfaGVhcF9yZXdyaXRlKHJ3c3RhdGUpOwogCiAJLyoK IAkgKiBSZWxlYXNlIHRoZSBsb2NrcyB0aGF0IGFsbG93ZWQgY29uY3VycmVudCBkYXRhIGNoYW5n ZXMsIGluIG9yZGVyIHRvCkBAIC0zODMzLDkgKzM4OTIsMTYgQEAgcmVidWlsZF9yZWxhdGlvbl9m aW5pc2hfY29uY3VycmVudChSZWxhdGlvbiBOZXdIZWFwLCBSZWxhdGlvbiBPbGRIZWFwLAogCWVu ZF9vZl93YWwgPSBHZXRGbHVzaFJlY1B0cihOVUxMKTsKIAogCS8qIEFwcGx5IHRoZSBjb25jdXJy ZW50IGNoYW5nZXMgYWdhaW4uICovCisJcndzdGF0ZSA9IGJlZ2luX2hlYXBfcmV3cml0ZShPbGRI ZWFwLCBOZXdIZWFwLAorCQkJCQkJCQkgSW52YWxpZFRyYW5zYWN0aW9uSWQsCisJCQkJCQkJCSBJ bnZhbGlkVHJhbnNhY3Rpb25JZCwKKwkJCQkJCQkJIEludmFsaWRUcmFuc2FjdGlvbklkLAorCQkJ CQkJCQkgZmFsc2UpOwogCXByb2Nlc3NfY29uY3VycmVudF9jaGFuZ2VzKGN0eCwgZW5kX29mX3dh bCwgTmV3SGVhcCwKIAkJCQkJCQkgICBzd2FwX3RvYXN0X2J5X2NvbnRlbnQgPyBPbGRIZWFwIDog TlVMTCwKLQkJCQkJCQkgICBpZGVudF9rZXksIGlkZW50X2tleV9uZW50cmllcywgaWlzdGF0ZSk7 CisJCQkJCQkJICAgaWRlbnRfa2V5LCBpZGVudF9rZXlfbmVudHJpZXMsIGlpc3RhdGUsCisJCQkJ CQkJICAgcndzdGF0ZSk7CisJZW5kX2hlYXBfcmV3cml0ZShyd3N0YXRlKTsKIAogCS8qIFJlbWVt YmVyIGluZm8gYWJvdXQgcmVsIGJlZm9yZSBjbG9zaW5nIE9sZEhlYXAgKi8KIAlyZWxwZXJzaXN0 ZW5jZSA9IE9sZEhlYXAtPnJkX3JlbC0+cmVscGVyc2lzdGVuY2U7CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RlY29kZS5jIGIvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC9kZWNvZGUuYwppbmRleCAwNjZkOTZkZWEyLi42OWE0M2UzNTEwIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RlY29kZS5jCisrKyBiL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2RlLmMKQEAgLTk1MSwxMSArOTUxLDEz IEBAIERlY29kZUluc2VydChMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFhMb2dSZWNvcmRC dWZmZXIgKmJ1ZikKIAl4bF9oZWFwX2luc2VydCAqeGxyZWM7CiAJUmVvcmRlckJ1ZmZlckNoYW5n ZSAqY2hhbmdlOwogCVJlbEZpbGVMb2NhdG9yIHRhcmdldF9sb2NhdG9yOworCUJsb2NrTnVtYmVy CQlibGtudW07CisJSGVhcFR1cGxlSGVhZGVyCXR1cGhkcjsKIAogCXhscmVjID0gKHhsX2hlYXBf aW5zZXJ0ICopIFhMb2dSZWNHZXREYXRhKHIpOwogCiAJLyogb25seSBpbnRlcmVzdGVkIGluIG91 ciBkYXRhYmFzZSAqLwotCVhMb2dSZWNHZXRCbG9ja1RhZyhyLCAwLCAmdGFyZ2V0X2xvY2F0b3Is IE5VTEwsIE5VTEwpOworCVhMb2dSZWNHZXRCbG9ja1RhZyhyLCAwLCAmdGFyZ2V0X2xvY2F0b3Is IE5VTEwsICZibGtudW0pOwogCWlmICh0YXJnZXRfbG9jYXRvci5kYk9pZCAhPSBjdHgtPnNsb3Qt PmRhdGEuZGF0YWJhc2UpCiAJCXJldHVybjsKIApAQCAtOTgwLDYgKzk4MiwxMyBAQCBEZWNvZGVJ bnNlcnQoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYp CiAKIAlEZWNvZGVYTG9nVHVwbGUodHVwbGVkYXRhLCBkYXRhbGVuLCBjaGFuZ2UtPmRhdGEudHAu bmV3dHVwbGUpOwogCisJLyoKKwkgKiBDVElEIGlzIG5lZWRlZCBmb3IgbG9naWNhbF9yZXdyaXRl X2hlYXBfdHVwbGUoKSwgd2hlbiBkb2luZyBDTFVTVEVSCisJICogQ09OQ1VSUkVOVExZLgorCSAq LworCXR1cGhkciA9IGNoYW5nZS0+ZGF0YS50cC5uZXd0dXBsZS0+dF9kYXRhOworCUl0ZW1Qb2lu dGVyU2V0KCZ0dXBoZHItPnRfY3RpZCwgYmxrbnVtLCB4bHJlYy0+b2ZmbnVtKTsKKwogCWNoYW5n ZS0+ZGF0YS50cC5jbGVhcl90b2FzdF9hZnRlcndhcmRzID0gdHJ1ZTsKIAogCVJlb3JkZXJCdWZm ZXJRdWV1ZUNoYW5nZShjdHgtPnJlb3JkZXIsIFhMb2dSZWNHZXRYaWQociksIGJ1Zi0+b3JpZ3B0 ciwKQEAgLTEwMDEsMTEgKzEwMTAsMTQgQEAgRGVjb2RlVXBkYXRlKExvZ2ljYWxEZWNvZGluZ0Nv bnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVmKQogCVJlb3JkZXJCdWZmZXJDaGFuZ2Ug KmNoYW5nZTsKIAljaGFyCSAgICpkYXRhOwogCVJlbEZpbGVMb2NhdG9yIHRhcmdldF9sb2NhdG9y OworCUJsb2NrTnVtYmVyCQlvbGRfYmxrbnVtLCBuZXdfYmxrbnVtOwogCiAJeGxyZWMgPSAoeGxf aGVhcF91cGRhdGUgKikgWExvZ1JlY0dldERhdGEocik7CiAKKwkvKiBSZXRyaWV2ZSBibGtudW0s IHNvIHRoYXQgd2UgY2FuIGNvbXBvc2UgQ1RJRCBiZWxvdy4gKi8KKwlYTG9nUmVjR2V0QmxvY2tU YWcociwgMCwgJnRhcmdldF9sb2NhdG9yLCBOVUxMLCAmbmV3X2Jsa251bSk7CisKIAkvKiBvbmx5 IGludGVyZXN0ZWQgaW4gb3VyIGRhdGFiYXNlICovCi0JWExvZ1JlY0dldEJsb2NrVGFnKHIsIDAs ICZ0YXJnZXRfbG9jYXRvciwgTlVMTCwgTlVMTCk7CiAJaWYgKHRhcmdldF9sb2NhdG9yLmRiT2lk ICE9IGN0eC0+c2xvdC0+ZGF0YS5kYXRhYmFzZSkKIAkJcmV0dXJuOwogCkBAIC0xMDIyLDYgKzEw MzQsNyBAQCBEZWNvZGVVcGRhdGUoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVj b3JkQnVmZmVyICpidWYpCiAJewogCQlTaXplCQlkYXRhbGVuOwogCQlTaXplCQl0dXBsZWxlbjsK KwkJSGVhcFR1cGxlSGVhZGVyCXR1cGhkcjsKIAogCQlkYXRhID0gWExvZ1JlY0dldEJsb2NrRGF0 YShyLCAwLCAmZGF0YWxlbik7CiAKQEAgLTEwMzEsNiArMTA0NCwxMyBAQCBEZWNvZGVVcGRhdGUo TG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYpCiAJCQlS ZW9yZGVyQnVmZmVyR2V0VHVwbGVCdWYoY3R4LT5yZW9yZGVyLCB0dXBsZWxlbik7CiAKIAkJRGVj b2RlWExvZ1R1cGxlKGRhdGEsIGRhdGFsZW4sIGNoYW5nZS0+ZGF0YS50cC5uZXd0dXBsZSk7CisK KwkJLyoKKwkJICogQ1RJRCBpcyBuZWVkZWQgZm9yIGxvZ2ljYWxfcmV3cml0ZV9oZWFwX3R1cGxl KCksIHdoZW4gZG9pbmcgQ0xVU1RFUgorCQkgKiBDT05DVVJSRU5UTFkuCisJCSAqLworCQl0dXBo ZHIgPSBjaGFuZ2UtPmRhdGEudHAubmV3dHVwbGUtPnRfZGF0YTsKKwkJSXRlbVBvaW50ZXJTZXQo JnR1cGhkci0+dF9jdGlkLCBuZXdfYmxrbnVtLCB4bHJlYy0+bmV3X29mZm51bSk7CiAJfQogCiAJ aWYgKHhscmVjLT5mbGFncyAmIFhMSF9VUERBVEVfQ09OVEFJTlNfT0xEKQpAQCAtMTA0OSw2ICsx MDY5LDE0IEBAIERlY29kZVVwZGF0ZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFhMb2dS ZWNvcmRCdWZmZXIgKmJ1ZikKIAkJRGVjb2RlWExvZ1R1cGxlKGRhdGEsIGRhdGFsZW4sIGNoYW5n ZS0+ZGF0YS50cC5vbGR0dXBsZSk7CiAJfQogCisJLyoKKwkgKiBSZW1lbWJlciB0aGUgb2xkIHR1 cGxlIENUSUQsIGZvciB0aGUgc2FrZSBvZgorCSAqIGxvZ2ljYWxfcmV3cml0ZV9oZWFwX3R1cGxl KCkuCisJICovCisJaWYgKCFYTG9nUmVjR2V0QmxvY2tUYWdFeHRlbmRlZChyLCAxLCBOVUxMLCBO VUxMLCAmb2xkX2Jsa251bSwgTlVMTCkpCisJCW9sZF9ibGtudW0gPSBuZXdfYmxrbnVtOworCUl0 ZW1Qb2ludGVyU2V0KCZjaGFuZ2UtPmRhdGEudHAub2xkX3RpZCwgb2xkX2Jsa251bSwgeGxyZWMt Pm9sZF9vZmZudW0pOworCiAJY2hhbmdlLT5kYXRhLnRwLmNsZWFyX3RvYXN0X2FmdGVyd2FyZHMg PSB0cnVlOwogCiAJUmVvcmRlckJ1ZmZlclF1ZXVlQ2hhbmdlKGN0eC0+cmVvcmRlciwgWExvZ1Jl Y0dldFhpZChyKSwgYnVmLT5vcmlncHRyLApAQCAtMTA2NywxMSArMTA5NSwxMiBAQCBEZWNvZGVE ZWxldGUoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYp CiAJeGxfaGVhcF9kZWxldGUgKnhscmVjOwogCVJlb3JkZXJCdWZmZXJDaGFuZ2UgKmNoYW5nZTsK IAlSZWxGaWxlTG9jYXRvciB0YXJnZXRfbG9jYXRvcjsKKwlCbG9ja051bWJlcgkJYmxrbnVtOwog CiAJeGxyZWMgPSAoeGxfaGVhcF9kZWxldGUgKikgWExvZ1JlY0dldERhdGEocik7CiAKIAkvKiBv bmx5IGludGVyZXN0ZWQgaW4gb3VyIGRhdGFiYXNlICovCi0JWExvZ1JlY0dldEJsb2NrVGFnKHIs IDAsICZ0YXJnZXRfbG9jYXRvciwgTlVMTCwgTlVMTCk7CisJWExvZ1JlY0dldEJsb2NrVGFnKHIs IDAsICZ0YXJnZXRfbG9jYXRvciwgTlVMTCwgJmJsa251bSk7CiAJaWYgKHRhcmdldF9sb2NhdG9y LmRiT2lkICE9IGN0eC0+c2xvdC0+ZGF0YS5kYXRhYmFzZSkKIAkJcmV0dXJuOwogCkBAIC0xMTAz LDYgKzExMzIsMTIgQEAgRGVjb2RlRGVsZXRlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwg WExvZ1JlY29yZEJ1ZmZlciAqYnVmKQogCiAJCURlY29kZVhMb2dUdXBsZSgoY2hhciAqKSB4bHJl YyArIFNpemVPZkhlYXBEZWxldGUsCiAJCQkJCQlkYXRhbGVuLCBjaGFuZ2UtPmRhdGEudHAub2xk dHVwbGUpOworCisJCS8qCisJCSAqIENUSUQgaXMgbmVlZGVkIGZvciBsb2dpY2FsX3Jld3JpdGVf aGVhcF90dXBsZSgpLCB3aGVuIGRvaW5nIENMVVNURVIKKwkJICogQ09OQ1VSUkVOVExZLgorCQkg Ki8KKwkJSXRlbVBvaW50ZXJTZXQoJmNoYW5nZS0+ZGF0YS50cC5vbGRfdGlkLCBibGtudW0sIHhs cmVjLT5vZmZudW0pOwogCX0KIAogCWNoYW5nZS0+ZGF0YS50cC5jbGVhcl90b2FzdF9hZnRlcndh cmRzID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0 X2NsdXN0ZXIvcGdvdXRwdXRfY2x1c3Rlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdv dXRwdXRfY2x1c3Rlci9wZ291dHB1dF9jbHVzdGVyLmMKaW5kZXggOWZlNDQwMTdhOC4uMmMzM2Zi YWQ4MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXRfY2x1c3Rl ci9wZ291dHB1dF9jbHVzdGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRw dXRfY2x1c3Rlci9wZ291dHB1dF9jbHVzdGVyLmMKQEAgLTM0LDcgKzM0LDcgQEAgc3RhdGljIHZv aWQgcGx1Z2luX3RydW5jYXRlKHN0cnVjdCBMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCiAJ CQkJCQkJUmVvcmRlckJ1ZmZlckNoYW5nZSAqY2hhbmdlKTsKIHN0YXRpYyB2b2lkIHN0b3JlX2No YW5nZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCiAJCQkJCQkgQ29uY3VycmVudENoYW5n ZUtpbmQga2luZCwgSGVhcFR1cGxlIHR1cGxlLAotCQkJCQkJIFRyYW5zYWN0aW9uSWQgeGlkKTsK KwkJCQkJCSBUcmFuc2FjdGlvbklkIHhpZCwgSXRlbVBvaW50ZXIgb2xkX3RpZCk7CiAKIHZvaWQK IF9QR19vdXRwdXRfcGx1Z2luX2luaXQoT3V0cHV0UGx1Z2luQ2FsbGJhY2tzICpjYikKQEAgLTE2 Miw3ICsxNjIsOCBAQCBwbHVnaW5fY2hhbmdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwg UmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCWlmIChuZXd0dXBsZSA9PSBOVUxMKQogCQkJCQll bG9nKEVSUk9SLCAiSW5jb21wbGV0ZSBpbnNlcnQgaW5mby4iKTsKIAotCQkJCXN0b3JlX2NoYW5n ZShjdHgsIENIQU5HRV9JTlNFUlQsIG5ld3R1cGxlLCBjaGFuZ2UtPnR4bi0+eGlkKTsKKwkJCQlz dG9yZV9jaGFuZ2UoY3R4LCBDSEFOR0VfSU5TRVJULCBuZXd0dXBsZSwgY2hhbmdlLT50eG4tPnhp ZCwKKwkJCQkJCQkgTlVMTCk7CiAJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBSRU9SREVSX0JVRkZF Ul9DSEFOR0VfVVBEQVRFOgpAQCAtMTgwLDEwICsxODEsMTAgQEAgcGx1Z2luX2NoYW5nZShMb2dp Y2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAogCQkJCWlm IChvbGR0dXBsZSAhPSBOVUxMKQogCQkJCQlzdG9yZV9jaGFuZ2UoY3R4LCBDSEFOR0VfVVBEQVRF X09MRCwgb2xkdHVwbGUsCi0JCQkJCQkJCSBjaGFuZ2UtPnR4bi0+eGlkKTsKKwkJCQkJCQkJIGNo YW5nZS0+dHhuLT54aWQsIE5VTEwpOwogCiAJCQkJc3RvcmVfY2hhbmdlKGN0eCwgQ0hBTkdFX1VQ REFURV9ORVcsIG5ld3R1cGxlLAotCQkJCQkJCSBjaGFuZ2UtPnR4bi0+eGlkKTsKKwkJCQkJCQkg Y2hhbmdlLT50eG4tPnhpZCwgJmNoYW5nZS0+ZGF0YS50cC5vbGRfdGlkKTsKIAkJCX0KIAkJCWJy ZWFrOwogCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9ERUxFVEU6CkBAIC0xOTYsNyArMTk3 LDggQEAgcGx1Z2luX2NoYW5nZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJC dWZmZXJUWE4gKnR4biwKIAkJCQlpZiAob2xkdHVwbGUgPT0gTlVMTCkKIAkJCQkJZWxvZyhFUlJP UiwgIkluY29tcGxldGUgZGVsZXRlIGluZm8uIik7CiAKLQkJCQlzdG9yZV9jaGFuZ2UoY3R4LCBD SEFOR0VfREVMRVRFLCBvbGR0dXBsZSwgY2hhbmdlLT50eG4tPnhpZCk7CisJCQkJc3RvcmVfY2hh bmdlKGN0eCwgQ0hBTkdFX0RFTEVURSwgb2xkdHVwbGUsIGNoYW5nZS0+dHhuLT54aWQsCisJCQkJ CQkJICZjaGFuZ2UtPmRhdGEudHAub2xkX3RpZCk7CiAJCQl9CiAJCQlicmVhazsKIAkJZGVmYXVs dDoKQEAgLTIzMCwxMyArMjMyLDEzIEBAIHBsdWdpbl90cnVuY2F0ZShzdHJ1Y3QgTG9naWNhbERl Y29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJaWYgKGkgPT0gbnJl bGF0aW9ucykKIAkJcmV0dXJuOwogCi0Jc3RvcmVfY2hhbmdlKGN0eCwgQ0hBTkdFX1RSVU5DQVRF LCBOVUxMLCBJbnZhbGlkVHJhbnNhY3Rpb25JZCk7CisJc3RvcmVfY2hhbmdlKGN0eCwgQ0hBTkdF X1RSVU5DQVRFLCBOVUxMLCBJbnZhbGlkVHJhbnNhY3Rpb25JZCwgTlVMTCk7CiB9CiAKIC8qIFN0 b3JlIGNvbmN1cnJlbnQgZGF0YSBjaGFuZ2UuICovCiBzdGF0aWMgdm9pZAogc3RvcmVfY2hhbmdl KExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgQ29uY3VycmVudENoYW5nZUtpbmQga2luZCwK LQkJCSBIZWFwVHVwbGUgdHVwbGUsIFRyYW5zYWN0aW9uSWQgeGlkKQorCQkJIEhlYXBUdXBsZSB0 dXBsZSwgVHJhbnNhY3Rpb25JZCB4aWQsIEl0ZW1Qb2ludGVyIG9sZF90aWQpCiB7CiAJQ2x1c3Rl ckRlY29kaW5nU3RhdGUgKmRzdGF0ZTsKIAljaGFyCSAgICpjaGFuZ2VfcmF3OwpAQCAtMzAxLDYg KzMwMywxMSBAQCBzdG9yZV9jaGFuZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBDb25j dXJyZW50Q2hhbmdlS2luZCBraW5kLAogCWNoYW5nZS0+c25hcHNob3QgPSBkc3RhdGUtPnNuYXBz aG90OwogCWRzdGF0ZS0+c25hcHNob3QtPmFjdGl2ZV9jb3VudCsrOwogCisJaWYgKG9sZF90aWQp CisJCUl0ZW1Qb2ludGVyQ29weShvbGRfdGlkLCAmY2hhbmdlLT5vbGRfdGlkKTsKKwllbHNlCisJ CUl0ZW1Qb2ludGVyU2V0SW52YWxpZCgmY2hhbmdlLT5vbGRfdGlkKTsKKwogCS8qIFRoZSBkYXRh IGhhcyBiZWVuIGNvcGllZC4gKi8KIAlpZiAoZmxhdHRlbmVkKQogCQlwZnJlZSh0dXBsZSk7CmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvcmV3cml0ZWhlYXAuaCBiL3NyYy9pbmNsdWRl L2FjY2Vzcy9yZXdyaXRlaGVhcC5oCmluZGV4IDU4NjZhMjZiZGQuLmRlNjJiNmFiZjggMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZXdyaXRlaGVhcC5oCisrKyBiL3NyYy9pbmNsdWRl L2FjY2Vzcy9yZXdyaXRlaGVhcC5oCkBAIC0yMywxMSArMjMsMTQgQEAgdHlwZWRlZiBzdHJ1Y3Qg UmV3cml0ZVN0YXRlRGF0YSAqUmV3cml0ZVN0YXRlOwogCiBleHRlcm4gUmV3cml0ZVN0YXRlIGJl Z2luX2hlYXBfcmV3cml0ZShSZWxhdGlvbiBvbGRfaGVhcCwgUmVsYXRpb24gbmV3X2hlYXAsCiAJ CQkJCQkJCQkgICBUcmFuc2FjdGlvbklkIG9sZGVzdF94bWluLCBUcmFuc2FjdGlvbklkIGZyZWV6 ZV94aWQsCi0JCQkJCQkJCQkgICBNdWx0aVhhY3RJZCBjdXRvZmZfbXVsdGkpOworCQkJCQkJCQkJ ICAgTXVsdGlYYWN0SWQgY3V0b2ZmX211bHRpLCBib29sIHRpZF9jaGFpbnMpOwogZXh0ZXJuIHZv aWQgZW5kX2hlYXBfcmV3cml0ZShSZXdyaXRlU3RhdGUgc3RhdGUpOwogZXh0ZXJuIHZvaWQgcmV3 cml0ZV9oZWFwX3R1cGxlKFJld3JpdGVTdGF0ZSBzdGF0ZSwgSGVhcFR1cGxlIG9sZF90dXBsZSwK IAkJCQkJCQkgICBIZWFwVHVwbGUgbmV3X3R1cGxlKTsKIGV4dGVybiBib29sIHJld3JpdGVfaGVh cF9kZWFkX3R1cGxlKFJld3JpdGVTdGF0ZSBzdGF0ZSwgSGVhcFR1cGxlIG9sZF90dXBsZSk7Citl eHRlcm4gdm9pZCBsb2dpY2FsX3Jld3JpdGVfaGVhcF90dXBsZShSZXdyaXRlU3RhdGUgc3RhdGUs CisJCQkJCQkJCQkgICBJdGVtUG9pbnRlckRhdGEgb2xkX3RpZCwKKwkJCQkJCQkJCSAgIEhlYXBU dXBsZSBuZXdfdHVwbGUpOwogCiAvKgogICogT24tRGlzayBkYXRhIGZvcm1hdCBmb3IgYW4gaW5k aXZpZHVhbCBsb2dpY2FsIHJld3JpdGUgbWFwcGluZy4KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L2NvbW1hbmRzL2NsdXN0ZXIuaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2NsdXN0ZXIuaAppbmRl eCBmOThiODU1ZjIxLi5jMzk0ZWYzODcxIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5k cy9jbHVzdGVyLmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvY2x1c3Rlci5oCkBAIC03MSw2 ICs3MSw5IEBAIHR5cGVkZWYgc3RydWN0IENvbmN1cnJlbnRDaGFuZ2UKIAkvKiBUcmFuc2FjdGlv biB0aGF0IGNoYW5nZXMgdGhlIGRhdGEuICovCiAJVHJhbnNhY3Rpb25JZAl4aWQ7CiAKKwkvKiBG b3IgVVBEQVRFIC8gREVMRVRFLCB0aGUgbG9jYXRpb24gb2YgdGhlIG9sZCB0dXBsZSB2ZXJzaW9u LiAqLworCUl0ZW1Qb2ludGVyRGF0YQlvbGRfdGlkOworCiAJLyoKIAkgKiBIaXN0b3JpYyBjYXRh bG9nIHNuYXBzaG90IHRoYXQgd2FzIHVzZWQgdG8gZGVjb2RlIHRoaXMgY2hhbmdlLgogCSAqLwpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oIGIvc3Jj L2luY2x1ZGUvcmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oCmluZGV4IDg1MWEwMDFjOGIuLjFm YThmOGJkNmEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Jlb3JkZXJidWZm ZXIuaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9yZW9yZGVyYnVmZmVyLmgKQEAgLTk5 LDYgKzk5LDEzIEBAIHR5cGVkZWYgc3RydWN0IFJlb3JkZXJCdWZmZXJDaGFuZ2UKIAkJCUhlYXBU dXBsZQlvbGR0dXBsZTsKIAkJCS8qIHZhbGlkIGZvciBJTlNFUlQgfHwgVVBEQVRFICovCiAJCQlI ZWFwVHVwbGUJbmV3dHVwbGU7CisKKwkJCS8qCisJCQkgKiBDTFVTVEVSIENPTkNVUlJFTlRMWSBu ZWVkcyB0aGUgb2xkIFRJRCwgZXZlbiBpZiB0aGUgb2xkIHR1cGxlCisJCQkgKiBpdHNlbGYgaXMg bm90IFdBTC1sb2dnZWQgKGkuZS4gd2hlbiB0aGUgaWRlbnRpdHkga2V5IGRvZXMgbm90CisJCQkg KiBjaGFuZ2UpLgorCQkJICovCisJCQlJdGVtUG9pbnRlckRhdGEJb2xkX3RpZDsKIAkJfQkJCXRw OwogCiAJCS8qCi0tIAoyLjQ1LjIKCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= --=-=-=--