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 1tzUfI-002iR0-Cg for pgsql-hackers@arkaria.postgresql.org; Tue, 01 Apr 2025 06:00:00 +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 1tzUfG-00GU5k-Rn for pgsql-hackers@arkaria.postgresql.org; Tue, 01 Apr 2025 05:59:58 +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 1tzUfF-00GU5c-Ua for pgsql-hackers@lists.postgresql.org; Tue, 01 Apr 2025 05:59:58 +0000 Received: from mail-qt1-x82d.google.com ([2607:f8b0:4864:20::82d]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1tzUfD-002H9n-2J for pgsql-hackers@lists.postgresql.org; Tue, 01 Apr 2025 05:59:57 +0000 Received: by mail-qt1-x82d.google.com with SMTP id d75a77b69052e-47692b9d059so72315981cf.3 for ; Mon, 31 Mar 2025 22:59:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1743487194; x=1744091994; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=ZjrhYhZciZ0wzLHOhXdoh3AsAW+sFpih9jya8d5GOyQ=; b=WK7LBMEWjFDnZkg7g2huTkgmS8seXSCG+6ahntnvbD+ObZDzR17Yq+4A5ynyOMklkP FMs1DIbxoiVnvprjo+hnrSR64GDXSUjrSnKP/zyZ4Fql0Jyzuhp/RyV1U5Dyw7UosGuN Sx68ATf4YLYKEbhpCVR8oJylc0w+EEyD92aJ6KcFGw1Kby5SgE+uatIK+n4EO8AAZ7Ol jtOeCvj+Gp79FKK+X/qfoH0x70IsYUTDxp3VMhD/rAQx2qoSeFYhekmlbuu83wCPONvJ et2pbDKcPmpxTJs2G44QhCJ6falxQ6Xnr11BpOWIiGXVFnj0t+QhovQ3lSWNPv3gJDfn DTsw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1743487194; x=1744091994; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=ZjrhYhZciZ0wzLHOhXdoh3AsAW+sFpih9jya8d5GOyQ=; b=M2BDpB8vwwqGWjlDhklNahQBOkW3kj4E0hPHNXx1qnEvs8NdVjfQTGft1gQ99Zv9Fo oVZpL85P9a4xHxv2QN7OpZSXJb9VwOXv/nnCpr9/KCL0Y1H35D+vUJXUS9xAD29Urt/2 Mwlyadpl8OE6NEWRHzajoyfDfhYJdXQogomAMywrwje1fZfyMi4WIvVKHPAGB/+n7w5b C+ksgPXWlbsc4P7GYk/lHarP/eLfAoipoMnQjbbZ01Bh5twMnnF1vTmLiZeDYtqguYg9 0OrQRzf4R2MSCAfR6GLtkh+d61eSP+i564iYIYrgH+rIrA4tcqipYvJ+onqngXEs/CGx pyMg== X-Forwarded-Encrypted: i=1; AJvYcCWS0zdt1MWe6L2rzD9sBILtVRdoLvLxFDn/hB3sXSPeh0SkHrxKVh4AX4pb0NF7FMfV1banIDgJ/sSMy34P@lists.postgresql.org X-Gm-Message-State: AOJu0YwppDeq7hmGQPxkAijcM+hvjFdQCkg4tQL+ovrWo665AJoucnqN QkcNcj290jc9njHPyNPfhKnVPSX01BDW2hqEzqZuSqb2xPqAgMyKEmMLv8S/1DNB9oBMvuL0GJ6 Z3r1dIjNc/xlSQ2gH83eCz571Duo= X-Gm-Gg: ASbGncuD8tZIM1QS4QkwjNvEoHU4jCDCM7hf4UYWk4ItgAy3x3+isVQAoNxAKHY/72k ppE83LWB4wI/wwN/oLtrXUxgAe8SvoaC3OGK9LrV97g/+BEzZE4TU9kG//ePIOf0GpchIDl5WcQ fqBy5QXJm+haSTrfuLeMdT9prLc/GolXcru0fVAhZuAx2fM4iG4+TNTq997l6h X-Google-Smtp-Source: AGHT+IFgB7EKZH19s5JA6j+HKqQWZ5+n7D1OKtUmssXW+ZY40uMqz019QJPb10fphiBX5qc0Igs9HaK7j6PEuq3p/Lg= X-Received: by 2002:ac8:5712:0:b0:476:8fcb:9aa3 with SMTP id d75a77b69052e-477e4b59073mr188589591cf.13.1743487194486; Mon, 31 Mar 2025 22:59:54 -0700 (PDT) MIME-Version: 1.0 References: <202503311812.vxg5b7rzfgf6@alvherre.pgsql> In-Reply-To: <202503311812.vxg5b7rzfgf6@alvherre.pgsql> From: Mahendra Singh Thalor Date: Tue, 1 Apr 2025 11:29:43 +0530 X-Gm-Features: AQ5f1Jp8Fb1-jFU9WSAiqfxiaGr7f-PeZbNzXZoEX_KxB0SET3AR1kCUZ2wddA4 Message-ID: Subject: Re: Non-text mode for pg_dumpall To: =?UTF-8?Q?=C3=81lvaro_Herrera?= Cc: Andrew Dunstan , jian he , Srinath Reddy , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="000000000000e5fb030631b13e80" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000e5fb030631b13e80 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, 31 Mar 2025 at 23:43, =C3=81lvaro Herrera = wrote: > > Hi > > FWIW I don't think the on_exit_nicely business is in final shape just > yet. We're doing something super strange and novel about keeping track > of an array index, so that we can modify it later. Or something like > that, I think? That doesn't sound all that nice to me. Elsewhere it > was suggested that we need some way to keep track of the list of things > that need cleanup (a list of connections IIRC?) -- perhaps in a > thread-local variable or a global or something -- and we install the > cleanup function once, and that reads from the variable. The program > can add things to the list, or remove them, at will; and we don't need > to modify the cleanup function in any way. > > -- > =C3=81lvaro Herrera Breisgau, Deutschland =E2=80=94 https://www.= EnterpriseDB.com/ Thanks =C3=81lvaro for the feedback. I removed the old handling of on_exit_nicely_list from the last patch set and added one simple function to just update the archive handle in shutdown_info. (shutdown_info.AHX =3D AHX;) For first database, we will add entry into on_exit_nicely_list array and for rest database, we will update only shutdown_info as we already closed connection for previous database.With this fix, we will not touch entry of on_exit_nicely_list for each database. Here, I am attaching updated patches. --=20 Thanks and Regards Mahendra Singh Thalor EnterpriseDB: http://www.enterprisedb.com --000000000000e5fb030631b13e80 Content-Type: application/octet-stream; name="v25_0002-add-new-list-type-simple_oid_string_list-to-fe-utils.patch" Content-Disposition: attachment; filename="v25_0002-add-new-list-type-simple_oid_string_list-to-fe-utils.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m8y38xsa1 RnJvbSBhMTcwMTAxNmNhNjY0N2RmMjI4NDdmYjg3YjM2OWQ5NGJkNjBlY2U5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXcgRHVuc3RhbiA8YW5kcmV3QGR1bnNsYW5lLm5ldD4K RGF0ZTogRnJpLCAyOCBNYXIgMjAyNSAxODoxMDoyNCAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggMi80 XSBhZGQgbmV3IGxpc3QgdHlwZSBzaW1wbGVfb2lkX3N0cmluZ19saXN0IHRvCiBmZS11dGlscy9z aW1wbGVfbGlzdAoKLS0tCiBzcmMvZmVfdXRpbHMvc2ltcGxlX2xpc3QuYyAgICAgICAgIHwgNDEg KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvaW5jbHVkZS9mZV91dGlscy9zaW1w bGVfbGlzdC5oIHwgMTYgKysrKysrKysrKysrCiAyIGZpbGVzIGNoYW5nZWQsIDU3IGluc2VydGlv bnMoKykKCmRpZmYgLS1naXQgYS9zcmMvZmVfdXRpbHMvc2ltcGxlX2xpc3QuYyBiL3NyYy9mZV91 dGlscy9zaW1wbGVfbGlzdC5jCmluZGV4IDQ4M2Q1NDU1NTk0Li5iYmNjNGVmNjE4ZCAxMDA2NDQK LS0tIGEvc3JjL2ZlX3V0aWxzL3NpbXBsZV9saXN0LmMKKysrIGIvc3JjL2ZlX3V0aWxzL3NpbXBs ZV9saXN0LmMKQEAgLTE5MiwzICsxOTIsNDQgQEAgc2ltcGxlX3B0cl9saXN0X2Rlc3Ryb3koU2lt cGxlUHRyTGlzdCAqbGlzdCkKIAkJY2VsbCA9IG5leHQ7CiAJfQogfQorCisvKgorICogQWRkIHRv IGFuIG9pZF9zdHJpbmcgbGlzdAorICovCit2b2lkCitzaW1wbGVfb2lkX3N0cmluZ19saXN0X2Fw cGVuZChTaW1wbGVPaWRTdHJpbmdMaXN0ICogbGlzdCwgT2lkIG9pZCwgY29uc3QgY2hhciAqc3Ry KQoreworCVNpbXBsZU9pZFN0cmluZ0xpc3RDZWxsICpjZWxsOworCisJY2VsbCA9IChTaW1wbGVP aWRTdHJpbmdMaXN0Q2VsbCAqKQorCQlwZ19tYWxsb2Mob2Zmc2V0b2YoU2ltcGxlT2lkU3RyaW5n TGlzdENlbGwsIHN0cikgKyBzdHJsZW4oc3RyKSArIDEpOworCisJY2VsbC0+bmV4dCA9IE5VTEw7 CisJY2VsbC0+b2lkID0gb2lkOworCXN0cmNweShjZWxsLT5zdHIsIHN0cik7CisKKwlpZiAobGlz dC0+dGFpbCkKKwkJbGlzdC0+dGFpbC0+bmV4dCA9IGNlbGw7CisJZWxzZQorCQlsaXN0LT5oZWFk ID0gY2VsbDsKKwlsaXN0LT50YWlsID0gY2VsbDsKK30KKworLyoKKyAqIERlc3Ryb3kgYW4gb2lk X3N0cmluZyBsaXN0CisgKi8KK3ZvaWQKK3NpbXBsZV9vaWRfc3RyaW5nX2xpc3RfZGVzdHJveShT aW1wbGVPaWRTdHJpbmdMaXN0ICogbGlzdCkKK3sKKwlTaW1wbGVPaWRTdHJpbmdMaXN0Q2VsbCAq Y2VsbDsKKworCWNlbGwgPSBsaXN0LT5oZWFkOworCXdoaWxlIChjZWxsICE9IE5VTEwpCisJewor CQlTaW1wbGVPaWRTdHJpbmdMaXN0Q2VsbCAqbmV4dDsKKworCQluZXh0ID0gY2VsbC0+bmV4dDsK KwkJcGdfZnJlZShjZWxsKTsKKwkJY2VsbCA9IG5leHQ7CisJfQorfQpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvZmVfdXRpbHMvc2ltcGxlX2xpc3QuaCBiL3NyYy9pbmNsdWRlL2ZlX3V0aWxzL3Np bXBsZV9saXN0LmgKaW5kZXggM2I4ZTM4NDE0ZWMuLmFmNjE1NDVkN2ZmIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9mZV91dGlscy9zaW1wbGVfbGlzdC5oCisrKyBiL3NyYy9pbmNsdWRlL2ZlX3V0 aWxzL3NpbXBsZV9saXN0LmgKQEAgLTU1LDYgKzU1LDE5IEBAIHR5cGVkZWYgc3RydWN0IFNpbXBs ZVB0ckxpc3QKIAlTaW1wbGVQdHJMaXN0Q2VsbCAqdGFpbDsKIH0gU2ltcGxlUHRyTGlzdDsKIAor dHlwZWRlZiBzdHJ1Y3QgU2ltcGxlT2lkU3RyaW5nTGlzdENlbGwKK3sKKwlzdHJ1Y3QgU2ltcGxl T2lkU3RyaW5nTGlzdENlbGwgKm5leHQ7CisJT2lkCQkJb2lkOworCWNoYXIJCXN0cltGTEVYSUJM RV9BUlJBWV9NRU1CRVJdOyAvKiBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nIGhlcmUgKi8KK30JCQlT aW1wbGVPaWRTdHJpbmdMaXN0Q2VsbDsKKwordHlwZWRlZiBzdHJ1Y3QgU2ltcGxlT2lkU3RyaW5n TGlzdAoreworCVNpbXBsZU9pZFN0cmluZ0xpc3RDZWxsICpoZWFkOworCVNpbXBsZU9pZFN0cmlu Z0xpc3RDZWxsICp0YWlsOworfQkJCVNpbXBsZU9pZFN0cmluZ0xpc3Q7CisKIGV4dGVybiB2b2lk IHNpbXBsZV9vaWRfbGlzdF9hcHBlbmQoU2ltcGxlT2lkTGlzdCAqbGlzdCwgT2lkIHZhbCk7CiBl eHRlcm4gYm9vbCBzaW1wbGVfb2lkX2xpc3RfbWVtYmVyKFNpbXBsZU9pZExpc3QgKmxpc3QsIE9p ZCB2YWwpOwogZXh0ZXJuIHZvaWQgc2ltcGxlX29pZF9saXN0X2Rlc3Ryb3koU2ltcGxlT2lkTGlz dCAqbGlzdCk7CkBAIC02OCw0ICs4MSw3IEBAIGV4dGVybiBjb25zdCBjaGFyICpzaW1wbGVfc3Ry aW5nX2xpc3Rfbm90X3RvdWNoZWQoU2ltcGxlU3RyaW5nTGlzdCAqbGlzdCk7CiBleHRlcm4gdm9p ZCBzaW1wbGVfcHRyX2xpc3RfYXBwZW5kKFNpbXBsZVB0ckxpc3QgKmxpc3QsIHZvaWQgKnB0cik7 CiBleHRlcm4gdm9pZCBzaW1wbGVfcHRyX2xpc3RfZGVzdHJveShTaW1wbGVQdHJMaXN0ICpsaXN0 KTsKIAorZXh0ZXJuIHZvaWQgc2ltcGxlX29pZF9zdHJpbmdfbGlzdF9hcHBlbmQoU2ltcGxlT2lk U3RyaW5nTGlzdCAqIGxpc3QsIE9pZCBvaWQsIGNvbnN0IGNoYXIgKnN0cik7CitleHRlcm4gdm9p ZCBzaW1wbGVfb2lkX3N0cmluZ19saXN0X2Rlc3Ryb3koU2ltcGxlT2lkU3RyaW5nTGlzdCAqIGxp c3QpOworCiAjZW5kaWYJCQkJCQkJLyogU0lNUExFX0xJU1RfSCAqLwotLSAKMi4zOS4zCgo= --000000000000e5fb030631b13e80 Content-Type: application/octet-stream; name="v25_0001-Move-common-pg_dump-code-related-to-connections.patch" Content-Disposition: attachment; filename="v25_0001-Move-common-pg_dump-code-related-to-connections.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m8y38xs50 RnJvbSAyNTk2NDRhMmIwZDIyYjI4NmMwZjU5OTkyNzEzNTMyNWU4OTA1ODk0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYWhlbmRyYSBTaW5naCBUaGFsb3IgPG1haGk2cnVuQGdtYWls LmNvbT4KRGF0ZTogV2VkLCAxOSBNYXIgMjAyNSAwMToxODo0NiArMDUzMApTdWJqZWN0OiBbUEFU Q0ggMS80XSBNb3ZlIGNvbW1vbiBwZ19kdW1wIGNvZGUgcmVsYXRlZCB0byBjb25uZWN0aW9ucyB0 byBhIG5ldwogZmlsZQoKQ29ubmVjdERhdGFiYXNlIGlzIHVzZWQgYnkgcGdfZHVtcGFsbCwgcGdf cmVzdG9yZSBhbmQgcGdfZHVtcCBzbyBtb3ZlCmNvbW1vbiBjb2RlIHRvIG5ldyBmaWxlLgoKbmV3 IGZpbGUgbmFtZTogY29ubmVjdGRiLmMKCkF1dGhvcjogICAgTWFoZW5kcmEgU2luZ2ggVGhhbG9y IDxtYWhpNnJ1bkBnbWFpbC5jb20+Ci0tLQogc3JjL2Jpbi9wZ19kdW1wL01ha2VmaWxlICAgICAg ICAgICAgIHwgICA1ICstCiBzcmMvYmluL3BnX2R1bXAvY29ubmVjdGRiLmMgICAgICAgICAgfCAy OTQgKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvYmluL3BnX2R1bXAvY29ubmVjdGRi LmggICAgICAgICAgfCAgMjYgKysrCiBzcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQgICAgICAg ICAgfCAgIDEgKwogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cC5oICAgICAgICAgIHwgICA2ICst CiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMgfCAgIDYgKy0KIHNyYy9iaW4v cGdfZHVtcC9wZ19iYWNrdXBfZGIuYyAgICAgICB8ICA3OSArLS0tLS0tCiBzcmMvYmluL3BnX2R1 bXAvcGdfZHVtcC5jICAgICAgICAgICAgfCAgIDIgKy0KIHNyYy9iaW4vcGdfZHVtcC9wZ19kdW1w YWxsLmMgICAgICAgICB8IDI3OCArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiA5IGZpbGVzIGNo YW5nZWQsIDM1MiBpbnNlcnRpb25zKCspLCAzNDUgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAx MDA2NDQgc3JjL2Jpbi9wZ19kdW1wL2Nvbm5lY3RkYi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3Jj L2Jpbi9wZ19kdW1wL2Nvbm5lY3RkYi5oCgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL01h a2VmaWxlIGIvc3JjL2Jpbi9wZ19kdW1wL01ha2VmaWxlCmluZGV4IDIzM2FkMTVjYTc1Li5mYTc5 NTg4M2U5ZiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL01ha2VmaWxlCisrKyBiL3NyYy9i aW4vcGdfZHVtcC9NYWtlZmlsZQpAQCAtMzEsNiArMzEsNyBAQCBPQkpTID0gXAogCWNvbXByZXNz X2x6NC5vIFwKIAljb21wcmVzc19ub25lLm8gXAogCWNvbXByZXNzX3pzdGQubyBcCisJY29ubmVj dGRiLm8gXAogCWR1bXB1dGlscy5vIFwKIAlmaWx0ZXIubyBcCiAJcGFyYWxsZWwubyBcCkBAIC01 MCw4ICs1MSw4IEBAIHBnX2R1bXA6IHBnX2R1bXAubyBjb21tb24ubyBwZ19kdW1wX3NvcnQubyAk KE9CSlMpIHwgc3VibWFrZS1saWJwcSBzdWJtYWtlLWxpYnBnCiBwZ19yZXN0b3JlOiBwZ19yZXN0 b3JlLm8gJChPQkpTKSB8IHN1Ym1ha2UtbGlicHEgc3VibWFrZS1saWJwZ3BvcnQgc3VibWFrZS1s aWJwZ2ZldXRpbHMKIAkkKENDKSAkKENGTEFHUykgcGdfcmVzdG9yZS5vICQoT0JKUykgJChMREZM QUdTKSAkKExERkxBR1NfRVgpICQoTElCUykgLW8gJEAkKFgpCiAKLXBnX2R1bXBhbGw6IHBnX2R1 bXBhbGwubyBkdW1wdXRpbHMubyBmaWx0ZXIubyAkKFdJTjMyUkVTKSB8IHN1Ym1ha2UtbGlicHEg c3VibWFrZS1saWJwZ3BvcnQgc3VibWFrZS1saWJwZ2ZldXRpbHMKLQkkKENDKSAkKENGTEFHUykg cGdfZHVtcGFsbC5vIGR1bXB1dGlscy5vIGZpbHRlci5vICQoV0lOMzJSRVMpICQoTERGTEFHUykg JChMREZMQUdTX0VYKSAkKExJQlMpIC1vICRAJChYKQorcGdfZHVtcGFsbDogcGdfZHVtcGFsbC5v ICQoT0JKUykgfCBzdWJtYWtlLWxpYnBxIHN1Ym1ha2UtbGlicGdwb3J0IHN1Ym1ha2UtbGlicGdm ZXV0aWxzCisJJChDQykgJChDRkxBR1MpIHBnX2R1bXBhbGwubyAkKE9CSlMpICQoTERGTEFHUykg JChMREZMQUdTX0VYKSAkKExJQlMpIC1vICRAJChYKQogCiBpbnN0YWxsOiBhbGwgaW5zdGFsbGRp cnMKIAkkKElOU1RBTExfUFJPR1JBTSkgcGdfZHVtcCQoWCkgJyQoREVTVERJUikkKGJpbmRpcikn L3BnX2R1bXAkKFgpCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvY29ubmVjdGRiLmMgYi9z cmMvYmluL3BnX2R1bXAvY29ubmVjdGRiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAuLjllNTkzYjcwZTgxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Jpbi9wZ19kdW1w L2Nvbm5lY3RkYi5jCkBAIC0wLDAgKzEsMjk0IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisg KiBjb25uZWN0ZGIuYworICogICAgVGhpcyBpcyBhIGNvbW1vbiBmaWxlIGNvbm5lY3Rpb24gdG8g dGhlIGRhdGFiYXNlLgorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDI1LCBQ b3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0 IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisg KiBJREVOVElGSUNBVElPTgorICogICAgc3JjL2Jpbi9wZ19kdW1wL2Nvbm5lY3RkYi5jCisgKgor ICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzX2ZlLmgiCisKKyNp bmNsdWRlICJjb21tb24vY29ubmVjdC5oIgorI2luY2x1ZGUgImNvbW1vbi9sb2dnaW5nLmgiCisj aW5jbHVkZSAiY29tbW9uL3N0cmluZy5oIgorI2luY2x1ZGUgImNvbm5lY3RkYi5oIgorI2luY2x1 ZGUgImR1bXB1dGlscy5oIgorI2luY2x1ZGUgImZlX3V0aWxzL3N0cmluZ191dGlscy5oIgorCitz dGF0aWMgY2hhciAqY29uc3RydWN0Q29ublN0cihjb25zdCBjaGFyICoqa2V5d29yZHMsIGNvbnN0 IGNoYXIgKip2YWx1ZXMpOworCisvKgorICogQ29ubmVjdERhdGFiYXNlCisgKgorICogTWFrZSBh IGRhdGFiYXNlIGNvbm5lY3Rpb24gd2l0aCB0aGUgZ2l2ZW4gcGFyYW1ldGVycy4gIEFuCisgKiBp bnRlcmFjdGl2ZSBwYXNzd29yZCBwcm9tcHQgaXMgYXV0b21hdGljYWxseSBpc3N1ZWQgaWYgcmVx dWlyZWQuCisgKgorICogSWYgZmFpbF9vbl9lcnJvciBpcyBmYWxzZSwgd2UgcmV0dXJuIE5VTEwg d2l0aG91dCBwcmludGluZyBhbnkgbWVzc2FnZQorICogb24gZmFpbHVyZSwgYnV0IHByZXNlcnZl IGFueSBwcm9tcHRlZCBwYXNzd29yZCBmb3IgdGhlIG5leHQgdHJ5LgorICoKKyAqIE9uIHN1Y2Nl c3MsIHRoZSAnY29ubnN0cicgaXMgc2V0IHRvIGEgY29ubmVjdGlvbiBzdHJpbmcgY29udGFpbmlu ZworICogdGhlIG9wdGlvbnMgdXNlZCBhbmQgJ3NlcnZlcl92ZXJzaW9uJyBpcyBzZXQgdG8gdmVy c2lvbiBzbyB0aGF0IGNhbGxlcgorICogY2FuIHVzZSB0aGVtLgorICovCitQR2Nvbm4gKgorQ29u bmVjdERhdGFiYXNlKGNvbnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqY29ubmVjdGlvbl9z dHJpbmcsCisJCQkJY29uc3QgY2hhciAqcGdob3N0LCBjb25zdCBjaGFyICpwZ3BvcnQsIGNvbnN0 IGNoYXIgKnBndXNlciwKKwkJCQl0cml2YWx1ZSBwcm9tcHRfcGFzc3dvcmQsIGJvb2wgZmFpbF9v bl9lcnJvciwgY29uc3QgY2hhciAqcHJvZ25hbWUsCisJCQkJY29uc3QgY2hhciAqKmNvbm5zdHIs IGludCAqc2VydmVyX3ZlcnNpb24sIGNoYXIgKnBhc3N3b3JkLAorCQkJCWNoYXIgKm92ZXJyaWRl X2RibmFtZSkKK3sKKwlQR2Nvbm4JICAgKmNvbm47CisJYm9vbAkJbmV3X3Bhc3M7CisJY29uc3Qg Y2hhciAqcmVtb3RldmVyc2lvbl9zdHI7CisJaW50CQkJbXlfdmVyc2lvbjsKKwljb25zdCBjaGFy ICoqa2V5d29yZHMgPSBOVUxMOworCWNvbnN0IGNoYXIgKip2YWx1ZXMgPSBOVUxMOworCVBRY29u bmluZm9PcHRpb24gKmNvbm5fb3B0cyA9IE5VTEw7CisJaW50CQkJc2VydmVyX3ZlcnNpb25fdGVt cDsKKworCWlmIChwcm9tcHRfcGFzc3dvcmQgPT0gVFJJX1lFUyAmJiAhcGFzc3dvcmQpCisJCXBh c3N3b3JkID0gc2ltcGxlX3Byb21wdCgiUGFzc3dvcmQ6ICIsIGZhbHNlKTsKKworCS8qCisJICog U3RhcnQgdGhlIGNvbm5lY3Rpb24uICBMb29wIHVudGlsIHdlIGhhdmUgYSBwYXNzd29yZCBpZiBy ZXF1ZXN0ZWQgYnkKKwkgKiBiYWNrZW5kLgorCSAqLworCWRvCisJeworCQlpbnQJCQlhcmdjb3Vu dCA9IDg7CisJCVBRY29ubmluZm9PcHRpb24gKmNvbm5fb3B0OworCQljaGFyCSAgICplcnJfbXNn ID0gTlVMTDsKKwkJaW50CQkJaSA9IDA7CisKKwkJZnJlZShrZXl3b3Jkcyk7CisJCWZyZWUodmFs dWVzKTsKKwkJUFFjb25uaW5mb0ZyZWUoY29ubl9vcHRzKTsKKworCQkvKgorCQkgKiBNZXJnZSB0 aGUgY29ubmVjdGlvbiBpbmZvIGlucHV0cyBnaXZlbiBpbiBmb3JtIG9mIGNvbm5lY3Rpb24gc3Ry aW5nCisJCSAqIGFuZCBvdGhlciBvcHRpb25zLiAgRXhwbGljaXRseSBkaXNjYXJkIGFueSBkYm5h bWUgdmFsdWUgaW4gdGhlCisJCSAqIGNvbm5lY3Rpb24gc3RyaW5nOyBvdGhlcndpc2UsIFBRY29u bmVjdGRiUGFyYW1zKCkgd291bGQgaW50ZXJwcmV0CisJCSAqIHRoYXQgdmFsdWUgYXMgYmVpbmcg aXRzZWxmIGEgY29ubmVjdGlvbiBzdHJpbmcuCisJCSAqLworCQlpZiAoY29ubmVjdGlvbl9zdHJp bmcpCisJCXsKKwkJCWNvbm5fb3B0cyA9IFBRY29ubmluZm9QYXJzZShjb25uZWN0aW9uX3N0cmlu ZywgJmVycl9tc2cpOworCQkJaWYgKGNvbm5fb3B0cyA9PSBOVUxMKQorCQkJCXBnX2ZhdGFsKCIl cyIsIGVycl9tc2cpOworCisJCQlmb3IgKGNvbm5fb3B0ID0gY29ubl9vcHRzOyBjb25uX29wdC0+ a2V5d29yZCAhPSBOVUxMOyBjb25uX29wdCsrKQorCQkJeworCQkJCWlmIChjb25uX29wdC0+dmFs ICE9IE5VTEwgJiYgY29ubl9vcHQtPnZhbFswXSAhPSAnXDAnICYmCisJCQkJCXN0cmNtcChjb25u X29wdC0+a2V5d29yZCwgImRibmFtZSIpICE9IDApCisJCQkJCWFyZ2NvdW50Kys7CisJCQl9CisK KwkJCWtleXdvcmRzID0gcGdfbWFsbG9jMCgoYXJnY291bnQgKyAxKSAqIHNpemVvZigqa2V5d29y ZHMpKTsKKwkJCXZhbHVlcyA9IHBnX21hbGxvYzAoKGFyZ2NvdW50ICsgMSkgKiBzaXplb2YoKnZh bHVlcykpOworCisJCQlmb3IgKGNvbm5fb3B0ID0gY29ubl9vcHRzOyBjb25uX29wdC0+a2V5d29y ZCAhPSBOVUxMOyBjb25uX29wdCsrKQorCQkJeworCQkJCWlmIChjb25uX29wdC0+dmFsICE9IE5V TEwgJiYgY29ubl9vcHQtPnZhbFswXSAhPSAnXDAnICYmCisJCQkJCXN0cmNtcChjb25uX29wdC0+ a2V5d29yZCwgImRibmFtZSIpICE9IDApCisJCQkJeworCQkJCQlrZXl3b3Jkc1tpXSA9IGNvbm5f b3B0LT5rZXl3b3JkOworCQkJCQl2YWx1ZXNbaV0gPSBjb25uX29wdC0+dmFsOworCQkJCQlpKys7 CisJCQkJfQorCQkJfQorCQl9CisJCWVsc2UKKwkJeworCQkJa2V5d29yZHMgPSBwZ19tYWxsb2Mw KChhcmdjb3VudCArIDEpICogc2l6ZW9mKCprZXl3b3JkcykpOworCQkJdmFsdWVzID0gcGdfbWFs bG9jMCgoYXJnY291bnQgKyAxKSAqIHNpemVvZigqdmFsdWVzKSk7CisJCX0KKworCQlpZiAocGdo b3N0KQorCQl7CisJCQlrZXl3b3Jkc1tpXSA9ICJob3N0IjsKKwkJCXZhbHVlc1tpXSA9IHBnaG9z dDsKKwkJCWkrKzsKKwkJfQorCQlpZiAocGdwb3J0KQorCQl7CisJCQlrZXl3b3Jkc1tpXSA9ICJw b3J0IjsKKwkJCXZhbHVlc1tpXSA9IHBncG9ydDsKKwkJCWkrKzsKKwkJfQorCQlpZiAocGd1c2Vy KQorCQl7CisJCQlrZXl3b3Jkc1tpXSA9ICJ1c2VyIjsKKwkJCXZhbHVlc1tpXSA9IHBndXNlcjsK KwkJCWkrKzsKKwkJfQorCQlpZiAocGFzc3dvcmQpCisJCXsKKwkJCWtleXdvcmRzW2ldID0gInBh c3N3b3JkIjsKKwkJCXZhbHVlc1tpXSA9IHBhc3N3b3JkOworCQkJaSsrOworCQl9CisJCWlmIChk Ym5hbWUpCisJCXsKKwkJCWtleXdvcmRzW2ldID0gImRibmFtZSI7CisJCQl2YWx1ZXNbaV0gPSBk Ym5hbWU7CisJCQlpKys7CisJCX0KKwkJaWYgKG92ZXJyaWRlX2RibmFtZSkKKwkJeworCQkJa2V5 d29yZHNbaV0gPSAiZGJuYW1lIjsKKwkJCXZhbHVlc1tpKytdID0gb3ZlcnJpZGVfZGJuYW1lOwor CQl9CisKKwkJa2V5d29yZHNbaV0gPSAiZmFsbGJhY2tfYXBwbGljYXRpb25fbmFtZSI7CisJCXZh bHVlc1tpXSA9IHByb2duYW1lOworCQlpKys7CisKKwkJbmV3X3Bhc3MgPSBmYWxzZTsKKwkJY29u biA9IFBRY29ubmVjdGRiUGFyYW1zKGtleXdvcmRzLCB2YWx1ZXMsIHRydWUpOworCisJCWlmICgh Y29ubikKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY29ubmVjdCB0byBkYXRhYmFzZSBcIiVzXCIi LCBkYm5hbWUpOworCisJCWlmIChQUXN0YXR1cyhjb25uKSA9PSBDT05ORUNUSU9OX0JBRCAmJgor CQkJUFFjb25uZWN0aW9uTmVlZHNQYXNzd29yZChjb25uKSAmJgorCQkJIXBhc3N3b3JkICYmCisJ CQlwcm9tcHRfcGFzc3dvcmQgIT0gVFJJX05PKQorCQl7CisJCQlQUWZpbmlzaChjb25uKTsKKwkJ CXBhc3N3b3JkID0gc2ltcGxlX3Byb21wdCgiUGFzc3dvcmQ6ICIsIGZhbHNlKTsKKwkJCW5ld19w YXNzID0gdHJ1ZTsKKwkJfQorCX0gd2hpbGUgKG5ld19wYXNzKTsKKworCS8qIGNoZWNrIHRvIHNl ZSB0aGF0IHRoZSBiYWNrZW5kIGNvbm5lY3Rpb24gd2FzIHN1Y2Nlc3NmdWxseSBtYWRlICovCisJ aWYgKFBRc3RhdHVzKGNvbm4pID09IENPTk5FQ1RJT05fQkFEKQorCXsKKwkJaWYgKGZhaWxfb25f ZXJyb3IpCisJCQlwZ19mYXRhbCgiJXMiLCBQUWVycm9yTWVzc2FnZShjb25uKSk7CisJCWVsc2UK KwkJeworCQkJUFFmaW5pc2goY29ubik7CisKKwkJCWZyZWUoa2V5d29yZHMpOworCQkJZnJlZSh2 YWx1ZXMpOworCQkJUFFjb25uaW5mb0ZyZWUoY29ubl9vcHRzKTsKKworCQkJcmV0dXJuIE5VTEw7 CisJCX0KKwl9CisKKwkvKgorCSAqIE9rLCBjb25uZWN0ZWQgc3VjY2Vzc2Z1bGx5LiBJZiByZXF1 ZXN0ZWQsIHJlbWVtYmVyIHRoZSBvcHRpb25zIHVzZWQsIGluCisJICogdGhlIGZvcm0gb2YgYSBj b25uZWN0aW9uIHN0cmluZy4KKwkgKi8KKwlpZiAoY29ubnN0cikKKwkJKmNvbm5zdHIgPSBjb25z dHJ1Y3RDb25uU3RyKGtleXdvcmRzLCB2YWx1ZXMpOworCisJZnJlZShrZXl3b3Jkcyk7CisJZnJl ZSh2YWx1ZXMpOworCVBRY29ubmluZm9GcmVlKGNvbm5fb3B0cyk7CisKKwkvKiBDaGVjayB2ZXJz aW9uICovCisJcmVtb3RldmVyc2lvbl9zdHIgPSBQUXBhcmFtZXRlclN0YXR1cyhjb25uLCAic2Vy dmVyX3ZlcnNpb24iKTsKKwlpZiAoIXJlbW90ZXZlcnNpb25fc3RyKQorCQlwZ19mYXRhbCgiY291 bGQgbm90IGdldCBzZXJ2ZXIgdmVyc2lvbiIpOworCisJc2VydmVyX3ZlcnNpb25fdGVtcCA9IFBR c2VydmVyVmVyc2lvbihjb25uKTsKKwlpZiAoc2VydmVyX3ZlcnNpb25fdGVtcCA9PSAwKQorCQlw Z19mYXRhbCgiY291bGQgbm90IHBhcnNlIHNlcnZlciB2ZXJzaW9uIFwiJXNcIiIsCisJCQkJIHJl bW90ZXZlcnNpb25fc3RyKTsKKworCS8qIElmIHJlcXVlc3RlZCwgdGhlbiBjb3B5IHNlcnZlciB2 ZXJzaW9uIHRvIG91dCB2YXJpYWJsZS4gKi8KKwlpZiAoc2VydmVyX3ZlcnNpb24pCisJCSpzZXJ2 ZXJfdmVyc2lvbiA9IHNlcnZlcl92ZXJzaW9uX3RlbXA7CisKKwlteV92ZXJzaW9uID0gUEdfVkVS U0lPTl9OVU07CisKKwkvKgorCSAqIFdlIGFsbG93IHRoZSBzZXJ2ZXIgdG8gYmUgYmFjayB0byA5 LjIsIGFuZCB1cCB0byBhbnkgbWlub3IgcmVsZWFzZSBvZgorCSAqIG91ciBvd24gbWFqb3IgdmVy c2lvbi4gIChTZWUgYWxzbyB2ZXJzaW9uIGNoZWNrIGluIHBnX2R1bXAuYy4pCisJICovCisJaWYg KG15X3ZlcnNpb24gIT0gc2VydmVyX3ZlcnNpb25fdGVtcAorCQkmJiAoc2VydmVyX3ZlcnNpb25f dGVtcCA8IDkwMjAwIHx8CisJCQkoc2VydmVyX3ZlcnNpb25fdGVtcCAvIDEwMCkgPiAobXlfdmVy c2lvbiAvIDEwMCkpKQorCXsKKwkJcGdfbG9nX2Vycm9yKCJhYm9ydGluZyBiZWNhdXNlIG9mIHNl cnZlciB2ZXJzaW9uIG1pc21hdGNoIik7CisJCXBnX2xvZ19lcnJvcl9kZXRhaWwoInNlcnZlciB2 ZXJzaW9uOiAlczsgJXMgdmVyc2lvbjogJXMiLAorCQkJCQkJCXJlbW90ZXZlcnNpb25fc3RyLCBw cm9nbmFtZSwgUEdfVkVSU0lPTik7CisJCWV4aXRfbmljZWx5KDEpOworCX0KKworCVBRY2xlYXIo ZXhlY3V0ZVF1ZXJ5KGNvbm4sIEFMV0FZU19TRUNVUkVfU0VBUkNIX1BBVEhfU1FMKSk7CisKKwly ZXR1cm4gY29ubjsKK30KKworLyoKKyAqIGNvbnN0cnVjdENvbm5TdHIKKyAqCisgKiBDb25zdHJ1 Y3QgYSBjb25uZWN0aW9uIHN0cmluZyBmcm9tIHRoZSBnaXZlbiBrZXl3b3JkL3ZhbHVlIHBhaXJz LiBJdCBpcworICogdXNlZCB0byBwYXNzIHRoZSBjb25uZWN0aW9uIG9wdGlvbnMgdG8gdGhlIHBn X2R1bXAgc3VicHJvY2Vzcy4KKyAqCisgKiBUaGUgZm9sbG93aW5nIHBhcmFtZXRlcnMgYXJlIGV4 Y2x1ZGVkOgorICoJZGJuYW1lCQktIHZhcmllcyBpbiBlYWNoIHBnX2R1bXAgaW52b2NhdGlvbgor ICoJcGFzc3dvcmQJLSBpdCdzIG5vdCBzZWN1cmUgdG8gcGFzcyBhIHBhc3N3b3JkIG9uIHRoZSBj b21tYW5kIGxpbmUKKyAqCWZhbGxiYWNrX2FwcGxpY2F0aW9uX25hbWUgLSB3ZSdsbCBsZXQgcGdf ZHVtcCBzZXQgaXQKKyAqLworc3RhdGljIGNoYXIgKgorY29uc3RydWN0Q29ublN0cihjb25zdCBj aGFyICoqa2V5d29yZHMsIGNvbnN0IGNoYXIgKip2YWx1ZXMpCit7CisJUFFFeHBCdWZmZXIgYnVm ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKwljaGFyCSAgICpjb25uc3RyOworCWludAkJCWk7CisJ Ym9vbAkJZmlyc3RrZXl3b3JkID0gdHJ1ZTsKKworCS8qIENvbnN0cnVjdCBhIG5ldyBjb25uZWN0 aW9uIHN0cmluZyBpbiBrZXk9J3ZhbHVlJyBmb3JtYXQuICovCisJZm9yIChpID0gMDsga2V5d29y ZHNbaV0gIT0gTlVMTDsgaSsrKQorCXsKKwkJaWYgKHN0cmNtcChrZXl3b3Jkc1tpXSwgImRibmFt ZSIpID09IDAgfHwKKwkJCXN0cmNtcChrZXl3b3Jkc1tpXSwgInBhc3N3b3JkIikgPT0gMCB8fAor CQkJc3RyY21wKGtleXdvcmRzW2ldLCAiZmFsbGJhY2tfYXBwbGljYXRpb25fbmFtZSIpID09IDAp CisJCQljb250aW51ZTsKKworCQlpZiAoIWZpcnN0a2V5d29yZCkKKwkJCWFwcGVuZFBRRXhwQnVm ZmVyQ2hhcihidWYsICcgJyk7CisJCWZpcnN0a2V5d29yZCA9IGZhbHNlOworCQlhcHBlbmRQUUV4 cEJ1ZmZlcihidWYsICIlcz0iLCBrZXl3b3Jkc1tpXSk7CisJCWFwcGVuZENvbm5TdHJWYWwoYnVm LCB2YWx1ZXNbaV0pOworCX0KKworCWNvbm5zdHIgPSBwZ19zdHJkdXAoYnVmLT5kYXRhKTsKKwlk ZXN0cm95UFFFeHBCdWZmZXIoYnVmKTsKKwlyZXR1cm4gY29ubnN0cjsKK30KKworLyoKKyAqIGV4 ZWN1dGVRdWVyeQorICoKKyAqIFJ1biBhIHF1ZXJ5LCByZXR1cm4gdGhlIHJlc3VsdHMsIGV4aXQg cHJvZ3JhbSBvbiBmYWlsdXJlLgorICovCitQR3Jlc3VsdCAqCitleGVjdXRlUXVlcnkoUEdjb25u ICpjb25uLCBjb25zdCBjaGFyICpxdWVyeSkKK3sKKwlQR3Jlc3VsdCAgICpyZXM7CisKKwlwZ19s b2dfaW5mbygiZXhlY3V0aW5nICVzIiwgcXVlcnkpOworCisJcmVzID0gUFFleGVjKGNvbm4sIHF1 ZXJ5KTsKKwlpZiAoIXJlcyB8fAorCQlQUXJlc3VsdFN0YXR1cyhyZXMpICE9IFBHUkVTX1RVUExF U19PSykKKwl7CisJCXBnX2xvZ19lcnJvcigicXVlcnkgZmFpbGVkOiAlcyIsIFBRZXJyb3JNZXNz YWdlKGNvbm4pKTsKKwkJcGdfbG9nX2Vycm9yX2RldGFpbCgiUXVlcnkgd2FzOiAlcyIsIHF1ZXJ5 KTsKKwkJUFFmaW5pc2goY29ubik7CisJCWV4aXRfbmljZWx5KDEpOworCX0KKworCXJldHVybiBy ZXM7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvY29ubmVjdGRiLmggYi9zcmMvYmlu L3BnX2R1bXAvY29ubmVjdGRiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAuLjZjMWUxOTU0NzY5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL2Nvbm5l Y3RkYi5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGNvbm5l Y3RkYi5oCisgKiAgICAgIENvbW1vbiBoZWFkZXIgZmlsZSBmb3IgY29ubmVjdGlvbiB0byB0aGUg ZGF0YWJhc2UuCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjUsIFBvc3Rn cmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMp IDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIElE RU5USUZJQ0FUSU9OCisgKiAgICBzcmMvYmluL3BnX2R1bXAvY29ubmVjdGRiLmgKKyAqCisgKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBDT05ORUNUREJfSAorI2RlZmluZSBDT05ORUNU REJfSAorCisjaW5jbHVkZSAicGdfYmFja3VwLmgiCisjaW5jbHVkZSAicGdfYmFja3VwX3V0aWxz LmgiCisKK2V4dGVybiBQR2Nvbm4gKkNvbm5lY3REYXRhYmFzZShjb25zdCBjaGFyICpkYm5hbWUs IGNvbnN0IGNoYXIgKmNvbm5lY3Rpb25fc3RyaW5nLCBjb25zdCBjaGFyICpwZ2hvc3QsCisJCQkJ CQkJICAgY29uc3QgY2hhciAqcGdwb3J0LCBjb25zdCBjaGFyICpwZ3VzZXIsCisJCQkJCQkJICAg dHJpdmFsdWUgcHJvbXB0X3Bhc3N3b3JkLCBib29sIGZhaWxfb25fZXJyb3IsCisJCQkJCQkJICAg Y29uc3QgY2hhciAqcHJvZ25hbWUsIGNvbnN0IGNoYXIgKipjb25uc3RyLCBpbnQgKnNlcnZlcl92 ZXJzaW9uLAorCQkJCQkJCSAgIGNoYXIgKnBhc3N3b3JkLCBjaGFyICpvdmVycmlkZV9kYm5hbWUp OworZXh0ZXJuIFBHcmVzdWx0ICpleGVjdXRlUXVlcnkoUEdjb25uICpjb25uLCBjb25zdCBjaGFy ICpxdWVyeSk7CisjZW5kaWYJCQkJCQkJLyogQ09OTkVDVERCX0ggKi8KZGlmZiAtLWdpdCBhL3Ny Yy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZCBiL3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZApp bmRleCA2MDNiYTZjZmJmMC4uMjU5ODllOGYxNmIgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVt cC9tZXNvbi5idWlsZAorKysgYi9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQKQEAgLTYsNiAr Niw3IEBAIHBnX2R1bXBfY29tbW9uX3NvdXJjZXMgPSBmaWxlcygKICAgJ2NvbXByZXNzX2x6NC5j JywKICAgJ2NvbXByZXNzX25vbmUuYycsCiAgICdjb21wcmVzc196c3RkLmMnLAorICAnY29ubmVj dGRiLmMnLAogICAnZHVtcHV0aWxzLmMnLAogICAnZmlsdGVyLmMnLAogICAncGFyYWxsZWwuYycs CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwLmggYi9zcmMvYmluL3BnX2R1 bXAvcGdfYmFja3VwLmgKaW5kZXggNjU4OTg2ZGU2ZjguLjQ5YmMxZWU3MWVmIDEwMDY0NAotLS0g YS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwLmgKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2Jh Y2t1cC5oCkBAIC0yOTMsOSArMjkzLDkgQEAgdHlwZWRlZiB2b2lkICgqU2V0dXBXb3JrZXJQdHJU eXBlKSAoQXJjaGl2ZSAqQUgpOwogICogTWFpbiBhcmNoaXZlciBpbnRlcmZhY2UuCiAgKi8KIAot ZXh0ZXJuIHZvaWQgQ29ubmVjdERhdGFiYXNlKEFyY2hpdmUgKkFIWCwKLQkJCQkJCQljb25zdCBD b25uUGFyYW1zICpjcGFyYW1zLAotCQkJCQkJCWJvb2wgaXNSZWNvbm5lY3QpOworZXh0ZXJuIHZv aWQgQ29ubmVjdERhdGFiYXNlQWh4KEFyY2hpdmUgKkFIWCwKKwkJCQkJCQkgICBjb25zdCBDb25u UGFyYW1zICpjcGFyYW1zLAorCQkJCQkJCSAgIGJvb2wgaXNSZWNvbm5lY3QpOwogZXh0ZXJuIHZv aWQgRGlzY29ubmVjdERhdGFiYXNlKEFyY2hpdmUgKkFIWCk7CiBleHRlcm4gUEdjb25uICpHZXRD b25uZWN0aW9uKEFyY2hpdmUgKkFIWCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9w Z19iYWNrdXBfYXJjaGl2ZXIuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIu YwppbmRleCAxZDEzMWU1YTU3ZC4uM2Y1OWY4ZjlkOWQgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdf ZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3Vw X2FyY2hpdmVyLmMKQEAgLTQxNSw3ICs0MTUsNyBAQCBSZXN0b3JlQXJjaGl2ZShBcmNoaXZlICpB SFgpCiAJCUFIWC0+bWluUmVtb3RlVmVyc2lvbiA9IDA7CiAJCUFIWC0+bWF4UmVtb3RlVmVyc2lv biA9IDk5OTk5OTk7CiAKLQkJQ29ubmVjdERhdGFiYXNlKEFIWCwgJnJvcHQtPmNwYXJhbXMsIGZh bHNlKTsKKwkJQ29ubmVjdERhdGFiYXNlQWh4KEFIWCwgJnJvcHQtPmNwYXJhbXMsIGZhbHNlKTsK IAogCQkvKgogCQkgKiBJZiB3ZSdyZSB0YWxraW5nIHRvIHRoZSBEQiBkaXJlY3RseSwgZG9uJ3Qg c2VuZCBjb21tZW50cyBzaW5jZSB0aGV5CkBAIC00NDU4LDcgKzQ0NTgsNyBAQCByZXN0b3JlX3Rv Y19lbnRyaWVzX3Bvc3Rmb3JrKEFyY2hpdmVIYW5kbGUgKkFILCBUb2NFbnRyeSAqcGVuZGluZ19s aXN0KQogCS8qCiAJICogTm93IHJlY29ubmVjdCB0aGUgc2luZ2xlIHBhcmVudCBjb25uZWN0aW9u LgogCSAqLwotCUNvbm5lY3REYXRhYmFzZSgoQXJjaGl2ZSAqKSBBSCwgJnJvcHQtPmNwYXJhbXMs IHRydWUpOworCUNvbm5lY3REYXRhYmFzZUFoeCgoQXJjaGl2ZSAqKSBBSCwgJnJvcHQtPmNwYXJh bXMsIHRydWUpOwogCiAJLyogcmUtZXN0YWJsaXNoIGZpeGVkIHN0YXRlICovCiAJX2RvU2V0Rml4 ZWRPdXRwdXRTdGF0ZShBSCk7CkBAIC01MDc2LDcgKzUwNzYsNyBAQCBDbG9uZUFyY2hpdmUoQXJj aGl2ZUhhbmRsZSAqQUgpCiAJICogQ29ubmVjdCBvdXIgbmV3IGNsb25lIG9iamVjdCB0byB0aGUg ZGF0YWJhc2UsIHVzaW5nIHRoZSBzYW1lIGNvbm5lY3Rpb24KIAkgKiBwYXJhbWV0ZXJzIHVzZWQg Zm9yIHRoZSBvcmlnaW5hbCBjb25uZWN0aW9uLgogCSAqLwotCUNvbm5lY3REYXRhYmFzZSgoQXJj aGl2ZSAqKSBjbG9uZSwgJmNsb25lLT5wdWJsaWMucm9wdC0+Y3BhcmFtcywgdHJ1ZSk7CisJQ29u bmVjdERhdGFiYXNlQWh4KChBcmNoaXZlICopIGNsb25lLCAmY2xvbmUtPnB1YmxpYy5yb3B0LT5j cGFyYW1zLCB0cnVlKTsKIAogCS8qIHJlLWVzdGFibGlzaCBmaXhlZCBzdGF0ZSAqLwogCWlmIChB SC0+bW9kZSA9PSBhcmNoTW9kZVJlYWQpCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdf YmFja3VwX2RiLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2RiLmMKaW5kZXggNzFjNTVk MjQ2NmEuLjVjMzQ5Mjc5YmViIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3Vw X2RiLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9kYi5jCkBAIC0xOSw2ICsxOSw3 IEBACiAKICNpbmNsdWRlICJjb21tb24vY29ubmVjdC5oIgogI2luY2x1ZGUgImNvbW1vbi9zdHJp bmcuaCIKKyNpbmNsdWRlICJjb25uZWN0ZGIuaCIKICNpbmNsdWRlICJwYXJhbGxlbC5oIgogI2lu Y2x1ZGUgInBnX2JhY2t1cF9hcmNoaXZlci5oIgogI2luY2x1ZGUgInBnX2JhY2t1cF9kYi5oIgpA QCAtODYsOSArODcsOSBAQCBSZWNvbm5lY3RUb1NlcnZlcihBcmNoaXZlSGFuZGxlICpBSCwgY29u c3QgY2hhciAqZGJuYW1lKQogCSAqIEFyY2hpdmVIYW5kbGUncyBjb25uQ2FuY2VsLCBiZWZvcmUg Y2xvc2luZyBvbGQgY29ubmVjdGlvbi4gIE90aGVyd2lzZQogCSAqIGFuIGlsbC10aW1lZCBTSUdJ TlQgY291bGQgdHJ5IHRvIGFjY2VzcyBhIGRlYWQgY29ubmVjdGlvbi4KIAkgKi8KLQlBSC0+Y29u bmVjdGlvbiA9IE5VTEw7CQkvKiBkb2RnZSBlcnJvciBjaGVjayBpbiBDb25uZWN0RGF0YWJhc2Ug Ki8KKwlBSC0+Y29ubmVjdGlvbiA9IE5VTEw7CQkvKiBkb2RnZSBlcnJvciBjaGVjayBpbiBDb25u ZWN0RGF0YWJhc2VBaHggKi8KIAotCUNvbm5lY3REYXRhYmFzZSgoQXJjaGl2ZSAqKSBBSCwgJnJv cHQtPmNwYXJhbXMsIHRydWUpOworCUNvbm5lY3REYXRhYmFzZUFoeCgoQXJjaGl2ZSAqKSBBSCwg JnJvcHQtPmNwYXJhbXMsIHRydWUpOwogCiAJUFFmaW5pc2gob2xkQ29ubik7CiB9CkBAIC0xMDUs MTQgKzEwNiwxMyBAQCBSZWNvbm5lY3RUb1NlcnZlcihBcmNoaXZlSGFuZGxlICpBSCwgY29uc3Qg Y2hhciAqZGJuYW1lKQogICogdXNlcm5hbWUgbmV2ZXIgZG9lcyBjaGFuZ2UsIHNvIG9uZSBzYXZl ZFBhc3N3b3JkIGlzIHN1ZmZpY2llbnQuCiAgKi8KIHZvaWQKLUNvbm5lY3REYXRhYmFzZShBcmNo aXZlICpBSFgsCi0JCQkJY29uc3QgQ29ublBhcmFtcyAqY3BhcmFtcywKLQkJCQlib29sIGlzUmVj b25uZWN0KQorQ29ubmVjdERhdGFiYXNlQWh4KEFyY2hpdmUgKkFIWCwKKwkJCQkgICBjb25zdCBD b25uUGFyYW1zICpjcGFyYW1zLAorCQkJCSAgIGJvb2wgaXNSZWNvbm5lY3QpCiB7CiAJQXJjaGl2 ZUhhbmRsZSAqQUggPSAoQXJjaGl2ZUhhbmRsZSAqKSBBSFg7CiAJdHJpdmFsdWUJcHJvbXB0X3Bh c3N3b3JkOwogCWNoYXIJICAgKnBhc3N3b3JkOwotCWJvb2wJCW5ld19wYXNzOwogCiAJaWYgKEFI LT5jb25uZWN0aW9uKQogCQlwZ19mYXRhbCgiYWxyZWFkeSBjb25uZWN0ZWQgdG8gYSBkYXRhYmFz ZSIpOwpAQCAtMTI1LDY5ICsxMjUsMTAgQEAgQ29ubmVjdERhdGFiYXNlKEFyY2hpdmUgKkFIWCwK IAlpZiAocHJvbXB0X3Bhc3N3b3JkID09IFRSSV9ZRVMgJiYgcGFzc3dvcmQgPT0gTlVMTCkKIAkJ cGFzc3dvcmQgPSBzaW1wbGVfcHJvbXB0KCJQYXNzd29yZDogIiwgZmFsc2UpOwogCi0JLyoKLQkg KiBTdGFydCB0aGUgY29ubmVjdGlvbi4gIExvb3AgdW50aWwgd2UgaGF2ZSBhIHBhc3N3b3JkIGlm IHJlcXVlc3RlZCBieQotCSAqIGJhY2tlbmQuCi0JICovCi0JZG8KLQl7Ci0JCWNvbnN0IGNoYXIg KmtleXdvcmRzWzhdOwotCQljb25zdCBjaGFyICp2YWx1ZXNbOF07Ci0JCWludAkJCWkgPSAwOwot Ci0JCS8qCi0JCSAqIElmIGRibmFtZSBpcyBhIGNvbm5zdHJpbmcsIGl0cyBlbnRyaWVzIGNhbiBv dmVycmlkZSB0aGUgb3RoZXIKLQkJICogdmFsdWVzIG9idGFpbmVkIGZyb20gY3BhcmFtczsgYnV0 IGluIHR1cm4sIG92ZXJyaWRlX2RibmFtZSBjYW4KLQkJICogb3ZlcnJpZGUgdGhlIGRibmFtZSBj b21wb25lbnQgb2YgaXQuCi0JCSAqLwotCQlrZXl3b3Jkc1tpXSA9ICJob3N0IjsKLQkJdmFsdWVz W2krK10gPSBjcGFyYW1zLT5wZ2hvc3Q7Ci0JCWtleXdvcmRzW2ldID0gInBvcnQiOwotCQl2YWx1 ZXNbaSsrXSA9IGNwYXJhbXMtPnBncG9ydDsKLQkJa2V5d29yZHNbaV0gPSAidXNlciI7Ci0JCXZh bHVlc1tpKytdID0gY3BhcmFtcy0+dXNlcm5hbWU7Ci0JCWtleXdvcmRzW2ldID0gInBhc3N3b3Jk IjsKLQkJdmFsdWVzW2krK10gPSBwYXNzd29yZDsKLQkJa2V5d29yZHNbaV0gPSAiZGJuYW1lIjsK LQkJdmFsdWVzW2krK10gPSBjcGFyYW1zLT5kYm5hbWU7Ci0JCWlmIChjcGFyYW1zLT5vdmVycmlk ZV9kYm5hbWUpCi0JCXsKLQkJCWtleXdvcmRzW2ldID0gImRibmFtZSI7Ci0JCQl2YWx1ZXNbaSsr XSA9IGNwYXJhbXMtPm92ZXJyaWRlX2RibmFtZTsKLQkJfQotCQlrZXl3b3Jkc1tpXSA9ICJmYWxs YmFja19hcHBsaWNhdGlvbl9uYW1lIjsKLQkJdmFsdWVzW2krK10gPSBwcm9nbmFtZTsKLQkJa2V5 d29yZHNbaV0gPSBOVUxMOwotCQl2YWx1ZXNbaSsrXSA9IE5VTEw7Ci0JCUFzc2VydChpIDw9IGxl bmd0aG9mKGtleXdvcmRzKSk7Ci0KLQkJbmV3X3Bhc3MgPSBmYWxzZTsKLQkJQUgtPmNvbm5lY3Rp b24gPSBQUWNvbm5lY3RkYlBhcmFtcyhrZXl3b3JkcywgdmFsdWVzLCB0cnVlKTsKLQotCQlpZiAo IUFILT5jb25uZWN0aW9uKQotCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjb25uZWN0IHRvIGRhdGFi YXNlIik7Ci0KLQkJaWYgKFBRc3RhdHVzKEFILT5jb25uZWN0aW9uKSA9PSBDT05ORUNUSU9OX0JB RCAmJgotCQkJUFFjb25uZWN0aW9uTmVlZHNQYXNzd29yZChBSC0+Y29ubmVjdGlvbikgJiYKLQkJ CXBhc3N3b3JkID09IE5VTEwgJiYKLQkJCXByb21wdF9wYXNzd29yZCAhPSBUUklfTk8pCi0JCXsK LQkJCVBRZmluaXNoKEFILT5jb25uZWN0aW9uKTsKLQkJCXBhc3N3b3JkID0gc2ltcGxlX3Byb21w dCgiUGFzc3dvcmQ6ICIsIGZhbHNlKTsKLQkJCW5ld19wYXNzID0gdHJ1ZTsKLQkJfQotCX0gd2hp bGUgKG5ld19wYXNzKTsKLQotCS8qIGNoZWNrIHRvIHNlZSB0aGF0IHRoZSBiYWNrZW5kIGNvbm5l Y3Rpb24gd2FzIHN1Y2Nlc3NmdWxseSBtYWRlICovCi0JaWYgKFBRc3RhdHVzKEFILT5jb25uZWN0 aW9uKSA9PSBDT05ORUNUSU9OX0JBRCkKLQl7Ci0JCWlmIChpc1JlY29ubmVjdCkKLQkJCXBnX2Zh dGFsKCJyZWNvbm5lY3Rpb24gZmFpbGVkOiAlcyIsCi0JCQkJCSBQUWVycm9yTWVzc2FnZShBSC0+ Y29ubmVjdGlvbikpOwotCQllbHNlCi0JCQlwZ19mYXRhbCgiJXMiLAotCQkJCQkgUFFlcnJvck1l c3NhZ2UoQUgtPmNvbm5lY3Rpb24pKTsKLQl9CisJQUgtPmNvbm5lY3Rpb24gPSBDb25uZWN0RGF0 YWJhc2UoY3BhcmFtcy0+ZGJuYW1lLCBOVUxMLCBjcGFyYW1zLT5wZ2hvc3QsCisJCQkJCQkJCQkg Y3BhcmFtcy0+cGdwb3J0LCBjcGFyYW1zLT51c2VybmFtZSwKKwkJCQkJCQkJCSBwcm9tcHRfcGFz c3dvcmQsIHRydWUsCisJCQkJCQkJCQkgcHJvZ25hbWUsIE5VTEwsIE5VTEwsIHBhc3N3b3JkLCBj cGFyYW1zLT5vdmVycmlkZV9kYm5hbWUpOwogCiAJLyogU3RhcnQgc3RyaWN0OyBsYXRlciBwaGFz ZXMgbWF5IG92ZXJyaWRlIHRoaXMuICovCiAJUFFjbGVhcihFeGVjdXRlU3FsUXVlcnlGb3JTaW5n bGVSb3coKEFyY2hpdmUgKikgQUgsCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVt cC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwppbmRleCA0Y2EzNGJlMjMwYy4uZjg0ZWE2 ZWNjNDggMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKKysrIGIvc3JjL2Jp bi9wZ19kdW1wL3BnX2R1bXAuYwpAQCAtOTY2LDcgKzk2Niw3IEBAIG1haW4oaW50IGFyZ2MsIGNo YXIgKiphcmd2KQogCSAqIE9wZW4gdGhlIGRhdGFiYXNlIHVzaW5nIHRoZSBBcmNoaXZlciwgc28g aXQga25vd3MgYWJvdXQgaXQuIEVycm9ycyBtZWFuCiAJICogZGVhdGguCiAJICovCi0JQ29ubmVj dERhdGFiYXNlKGZvdXQsICZkb3B0LmNwYXJhbXMsIGZhbHNlKTsKKwlDb25uZWN0RGF0YWJhc2VB aHgoZm91dCwgJmRvcHQuY3BhcmFtcywgZmFsc2UpOwogCXNldHVwX2Nvbm5lY3Rpb24oZm91dCwg ZHVtcGVuY29kaW5nLCBkdW1wc25hcHNob3QsIHVzZV9yb2xlKTsKIAogCS8qCmRpZmYgLS1naXQg YS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcGFsbC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBh bGwuYwppbmRleCAyZWE1NzRiMGYwNi4uNTczYThiNjFhNDUgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4v cGdfZHVtcC9wZ19kdW1wYWxsLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBhbGwuYwpA QCAtMjQsMTEgKzI0LDExIEBACiAjaW5jbHVkZSAiY29tbW9uL2hhc2hmbl91bnN0YWJsZS5oIgog I2luY2x1ZGUgImNvbW1vbi9sb2dnaW5nLmgiCiAjaW5jbHVkZSAiY29tbW9uL3N0cmluZy5oIgor I2luY2x1ZGUgImNvbm5lY3RkYi5oIgogI2luY2x1ZGUgImR1bXB1dGlscy5oIgogI2luY2x1ZGUg ImZlX3V0aWxzL3N0cmluZ191dGlscy5oIgogI2luY2x1ZGUgImZpbHRlci5oIgogI2luY2x1ZGUg ImdldG9wdF9sb25nLmgiCi0jaW5jbHVkZSAicGdfYmFja3VwLmgiCiAKIC8qIHZlcnNpb24gc3Ry aW5nIHdlIGV4cGVjdCBiYWNrIGZyb20gcGdfZHVtcCAqLwogI2RlZmluZSBQR0RVTVBfVkVSU0lP TlNUUiAicGdfZHVtcCAoUG9zdGdyZVNRTCkgIiBQR19WRVJTSU9OICJcbiIKQEAgLTcxLDIxICs3 MSwxNCBAQCBzdGF0aWMgdm9pZCBidWlsZFNoU2VjTGFiZWxzKFBHY29ubiAqY29ubiwKIAkJCQkJ CQkgY29uc3QgY2hhciAqY2F0YWxvZ19uYW1lLCBPaWQgb2JqZWN0SWQsCiAJCQkJCQkJIGNvbnN0 IGNoYXIgKm9ianR5cGUsIGNvbnN0IGNoYXIgKm9iam5hbWUsCiAJCQkJCQkJIFBRRXhwQnVmZmVy IGJ1ZmZlcik7Ci1zdGF0aWMgUEdjb25uICpjb25uZWN0RGF0YWJhc2UoY29uc3QgY2hhciAqZGJu YW1lLAotCQkJCQkJCSAgIGNvbnN0IGNoYXIgKmNvbm5lY3Rpb25fc3RyaW5nLCBjb25zdCBjaGFy ICpwZ2hvc3QsCi0JCQkJCQkJICAgY29uc3QgY2hhciAqcGdwb3J0LCBjb25zdCBjaGFyICpwZ3Vz ZXIsCi0JCQkJCQkJICAgdHJpdmFsdWUgcHJvbXB0X3Bhc3N3b3JkLCBib29sIGZhaWxfb25fZXJy b3IpOwotc3RhdGljIGNoYXIgKmNvbnN0cnVjdENvbm5TdHIoY29uc3QgY2hhciAqKmtleXdvcmRz LCBjb25zdCBjaGFyICoqdmFsdWVzKTsKLXN0YXRpYyBQR3Jlc3VsdCAqZXhlY3V0ZVF1ZXJ5KFBH Y29ubiAqY29ubiwgY29uc3QgY2hhciAqcXVlcnkpOwogc3RhdGljIHZvaWQgZXhlY3V0ZUNvbW1h bmQoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICpxdWVyeSk7CiBzdGF0aWMgdm9pZCBleHBhbmRf ZGJuYW1lX3BhdHRlcm5zKFBHY29ubiAqY29ubiwgU2ltcGxlU3RyaW5nTGlzdCAqcGF0dGVybnMs CiAJCQkJCQkJCSAgIFNpbXBsZVN0cmluZ0xpc3QgKm5hbWVzKTsKIHN0YXRpYyB2b2lkIHJlYWRf ZHVtcGFsbF9maWx0ZXJzKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBTaW1wbGVTdHJpbmdMaXN0ICpw YXR0ZXJuKTsKIAogc3RhdGljIGNoYXIgcGdfZHVtcF9iaW5bTUFYUEdQQVRIXTsKLXN0YXRpYyBj b25zdCBjaGFyICpwcm9nbmFtZTsKIHN0YXRpYyBQUUV4cEJ1ZmZlciBwZ2R1bXBvcHRzOwotc3Rh dGljIGNoYXIgKmNvbm5zdHIgPSAiIjsKK3N0YXRpYyBjb25zdCBjaGFyICpjb25uc3RyID0gIiI7 CiBzdGF0aWMgYm9vbCBvdXRwdXRfY2xlYW4gPSBmYWxzZTsKIHN0YXRpYyBib29sIHNraXBfYWNs cyA9IGZhbHNlOwogc3RhdGljIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwpAQCAtMTI5LDggKzEyMiw2 IEBAIHN0YXRpYyBjaGFyICpmaWxlbmFtZSA9IE5VTEw7CiBzdGF0aWMgU2ltcGxlU3RyaW5nTGlz dCBkYXRhYmFzZV9leGNsdWRlX3BhdHRlcm5zID0ge05VTEwsIE5VTEx9Owogc3RhdGljIFNpbXBs ZVN0cmluZ0xpc3QgZGF0YWJhc2VfZXhjbHVkZV9uYW1lcyA9IHtOVUxMLCBOVUxMfTsKIAotI2Rl ZmluZSBleGl0X25pY2VseShjb2RlKSBleGl0KGNvZGUpCi0KIGludAogbWFpbihpbnQgYXJnYywg Y2hhciAqYXJndltdKQogewpAQCAtNDk5LDE5ICs0OTAsMjIgQEAgbWFpbihpbnQgYXJnYywgY2hh ciAqYXJndltdKQogCSAqLwogCWlmIChwZ2RiKQogCXsKLQkJY29ubiA9IGNvbm5lY3REYXRhYmFz ZShwZ2RiLCBjb25uc3RyLCBwZ2hvc3QsIHBncG9ydCwgcGd1c2VyLAotCQkJCQkJCSAgIHByb21w dF9wYXNzd29yZCwgZmFsc2UpOworCQljb25uID0gQ29ubmVjdERhdGFiYXNlKHBnZGIsIGNvbm5z dHIsIHBnaG9zdCwgcGdwb3J0LCBwZ3VzZXIsCisJCQkJCQkJICAgcHJvbXB0X3Bhc3N3b3JkLCBm YWxzZSwKKwkJCQkJCQkgICBwcm9nbmFtZSwgJmNvbm5zdHIsICZzZXJ2ZXJfdmVyc2lvbiwgTlVM TCwgTlVMTCk7CiAKIAkJaWYgKCFjb25uKQogCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjb25uZWN0 IHRvIGRhdGFiYXNlIFwiJXNcIiIsIHBnZGIpOwogCX0KIAllbHNlCiAJewotCQljb25uID0gY29u bmVjdERhdGFiYXNlKCJwb3N0Z3JlcyIsIGNvbm5zdHIsIHBnaG9zdCwgcGdwb3J0LCBwZ3VzZXIs Ci0JCQkJCQkJICAgcHJvbXB0X3Bhc3N3b3JkLCBmYWxzZSk7CisJCWNvbm4gPSBDb25uZWN0RGF0 YWJhc2UoInBvc3RncmVzIiwgY29ubnN0ciwgcGdob3N0LCBwZ3BvcnQsIHBndXNlciwKKwkJCQkJ CQkgICBwcm9tcHRfcGFzc3dvcmQsIGZhbHNlLAorCQkJCQkJCSAgIHByb2duYW1lLCAmY29ubnN0 ciwgJnNlcnZlcl92ZXJzaW9uLCBOVUxMLCBOVUxMKTsKIAkJaWYgKCFjb25uKQotCQkJY29ubiA9 IGNvbm5lY3REYXRhYmFzZSgidGVtcGxhdGUxIiwgY29ubnN0ciwgcGdob3N0LCBwZ3BvcnQsIHBn dXNlciwKLQkJCQkJCQkJICAgcHJvbXB0X3Bhc3N3b3JkLCB0cnVlKTsKKwkJCWNvbm4gPSBDb25u ZWN0RGF0YWJhc2UoInRlbXBsYXRlMSIsIGNvbm5zdHIsIHBnaG9zdCwgcGdwb3J0LCBwZ3VzZXIs CisJCQkJCQkJCSAgIHByb21wdF9wYXNzd29yZCwgdHJ1ZSwKKwkJCQkJCQkJICAgcHJvZ25hbWUs ICZjb25uc3RyLCAmc2VydmVyX3ZlcnNpb24sIE5VTEwsIE5VTEwpOwogCiAJCWlmICghY29ubikK IAkJewpAQCAtMTczOCwyNTYgKzE3MzIsNiBAQCBidWlsZFNoU2VjTGFiZWxzKFBHY29ubiAqY29u biwgY29uc3QgY2hhciAqY2F0YWxvZ19uYW1lLCBPaWQgb2JqZWN0SWQsCiAJZGVzdHJveVBRRXhw QnVmZmVyKHNxbCk7CiB9CiAKLS8qCi0gKiBNYWtlIGEgZGF0YWJhc2UgY29ubmVjdGlvbiB3aXRo IHRoZSBnaXZlbiBwYXJhbWV0ZXJzLiAgQW4KLSAqIGludGVyYWN0aXZlIHBhc3N3b3JkIHByb21w dCBpcyBhdXRvbWF0aWNhbGx5IGlzc3VlZCBpZiByZXF1aXJlZC4KLSAqCi0gKiBJZiBmYWlsX29u X2Vycm9yIGlzIGZhbHNlLCB3ZSByZXR1cm4gTlVMTCB3aXRob3V0IHByaW50aW5nIGFueSBtZXNz YWdlCi0gKiBvbiBmYWlsdXJlLCBidXQgcHJlc2VydmUgYW55IHByb21wdGVkIHBhc3N3b3JkIGZv ciB0aGUgbmV4dCB0cnkuCi0gKgotICogT24gc3VjY2VzcywgdGhlIGdsb2JhbCB2YXJpYWJsZSAn Y29ubnN0cicgaXMgc2V0IHRvIGEgY29ubmVjdGlvbiBzdHJpbmcKLSAqIGNvbnRhaW5pbmcgdGhl IG9wdGlvbnMgdXNlZC4KLSAqLwotc3RhdGljIFBHY29ubiAqCi1jb25uZWN0RGF0YWJhc2UoY29u c3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpjb25uZWN0aW9uX3N0cmluZywKLQkJCQljb25z dCBjaGFyICpwZ2hvc3QsIGNvbnN0IGNoYXIgKnBncG9ydCwgY29uc3QgY2hhciAqcGd1c2VyLAot CQkJCXRyaXZhbHVlIHByb21wdF9wYXNzd29yZCwgYm9vbCBmYWlsX29uX2Vycm9yKQotewotCVBH Y29ubgkgICAqY29ubjsKLQlib29sCQluZXdfcGFzczsKLQljb25zdCBjaGFyICpyZW1vdGV2ZXJz aW9uX3N0cjsKLQlpbnQJCQlteV92ZXJzaW9uOwotCWNvbnN0IGNoYXIgKiprZXl3b3JkcyA9IE5V TEw7Ci0JY29uc3QgY2hhciAqKnZhbHVlcyA9IE5VTEw7Ci0JUFFjb25uaW5mb09wdGlvbiAqY29u bl9vcHRzID0gTlVMTDsKLQlzdGF0aWMgY2hhciAqcGFzc3dvcmQgPSBOVUxMOwotCi0JaWYgKHBy b21wdF9wYXNzd29yZCA9PSBUUklfWUVTICYmICFwYXNzd29yZCkKLQkJcGFzc3dvcmQgPSBzaW1w bGVfcHJvbXB0KCJQYXNzd29yZDogIiwgZmFsc2UpOwotCi0JLyoKLQkgKiBTdGFydCB0aGUgY29u bmVjdGlvbi4gIExvb3AgdW50aWwgd2UgaGF2ZSBhIHBhc3N3b3JkIGlmIHJlcXVlc3RlZCBieQot CSAqIGJhY2tlbmQuCi0JICovCi0JZG8KLQl7Ci0JCWludAkJCWFyZ2NvdW50ID0gNjsKLQkJUFFj b25uaW5mb09wdGlvbiAqY29ubl9vcHQ7Ci0JCWNoYXIJICAgKmVycl9tc2cgPSBOVUxMOwotCQlp bnQJCQlpID0gMDsKLQotCQlmcmVlKGtleXdvcmRzKTsKLQkJZnJlZSh2YWx1ZXMpOwotCQlQUWNv bm5pbmZvRnJlZShjb25uX29wdHMpOwotCi0JCS8qCi0JCSAqIE1lcmdlIHRoZSBjb25uZWN0aW9u IGluZm8gaW5wdXRzIGdpdmVuIGluIGZvcm0gb2YgY29ubmVjdGlvbiBzdHJpbmcKLQkJICogYW5k IG90aGVyIG9wdGlvbnMuICBFeHBsaWNpdGx5IGRpc2NhcmQgYW55IGRibmFtZSB2YWx1ZSBpbiB0 aGUKLQkJICogY29ubmVjdGlvbiBzdHJpbmc7IG90aGVyd2lzZSwgUFFjb25uZWN0ZGJQYXJhbXMo KSB3b3VsZCBpbnRlcnByZXQKLQkJICogdGhhdCB2YWx1ZSBhcyBiZWluZyBpdHNlbGYgYSBjb25u ZWN0aW9uIHN0cmluZy4KLQkJICovCi0JCWlmIChjb25uZWN0aW9uX3N0cmluZykKLQkJewotCQkJ Y29ubl9vcHRzID0gUFFjb25uaW5mb1BhcnNlKGNvbm5lY3Rpb25fc3RyaW5nLCAmZXJyX21zZyk7 Ci0JCQlpZiAoY29ubl9vcHRzID09IE5VTEwpCi0JCQkJcGdfZmF0YWwoIiVzIiwgZXJyX21zZyk7 Ci0KLQkJCWZvciAoY29ubl9vcHQgPSBjb25uX29wdHM7IGNvbm5fb3B0LT5rZXl3b3JkICE9IE5V TEw7IGNvbm5fb3B0KyspCi0JCQl7Ci0JCQkJaWYgKGNvbm5fb3B0LT52YWwgIT0gTlVMTCAmJiBj b25uX29wdC0+dmFsWzBdICE9ICdcMCcgJiYKLQkJCQkJc3RyY21wKGNvbm5fb3B0LT5rZXl3b3Jk LCAiZGJuYW1lIikgIT0gMCkKLQkJCQkJYXJnY291bnQrKzsKLQkJCX0KLQotCQkJa2V5d29yZHMg PSBwZ19tYWxsb2MwKChhcmdjb3VudCArIDEpICogc2l6ZW9mKCprZXl3b3JkcykpOwotCQkJdmFs dWVzID0gcGdfbWFsbG9jMCgoYXJnY291bnQgKyAxKSAqIHNpemVvZigqdmFsdWVzKSk7Ci0KLQkJ CWZvciAoY29ubl9vcHQgPSBjb25uX29wdHM7IGNvbm5fb3B0LT5rZXl3b3JkICE9IE5VTEw7IGNv bm5fb3B0KyspCi0JCQl7Ci0JCQkJaWYgKGNvbm5fb3B0LT52YWwgIT0gTlVMTCAmJiBjb25uX29w dC0+dmFsWzBdICE9ICdcMCcgJiYKLQkJCQkJc3RyY21wKGNvbm5fb3B0LT5rZXl3b3JkLCAiZGJu YW1lIikgIT0gMCkKLQkJCQl7Ci0JCQkJCWtleXdvcmRzW2ldID0gY29ubl9vcHQtPmtleXdvcmQ7 Ci0JCQkJCXZhbHVlc1tpXSA9IGNvbm5fb3B0LT52YWw7Ci0JCQkJCWkrKzsKLQkJCQl9Ci0JCQl9 Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQlrZXl3b3JkcyA9IHBnX21hbGxvYzAoKGFyZ2NvdW50ICsg MSkgKiBzaXplb2YoKmtleXdvcmRzKSk7Ci0JCQl2YWx1ZXMgPSBwZ19tYWxsb2MwKChhcmdjb3Vu dCArIDEpICogc2l6ZW9mKCp2YWx1ZXMpKTsKLQkJfQotCi0JCWlmIChwZ2hvc3QpCi0JCXsKLQkJ CWtleXdvcmRzW2ldID0gImhvc3QiOwotCQkJdmFsdWVzW2ldID0gcGdob3N0OwotCQkJaSsrOwot CQl9Ci0JCWlmIChwZ3BvcnQpCi0JCXsKLQkJCWtleXdvcmRzW2ldID0gInBvcnQiOwotCQkJdmFs dWVzW2ldID0gcGdwb3J0OwotCQkJaSsrOwotCQl9Ci0JCWlmIChwZ3VzZXIpCi0JCXsKLQkJCWtl eXdvcmRzW2ldID0gInVzZXIiOwotCQkJdmFsdWVzW2ldID0gcGd1c2VyOwotCQkJaSsrOwotCQl9 Ci0JCWlmIChwYXNzd29yZCkKLQkJewotCQkJa2V5d29yZHNbaV0gPSAicGFzc3dvcmQiOwotCQkJ dmFsdWVzW2ldID0gcGFzc3dvcmQ7Ci0JCQlpKys7Ci0JCX0KLQkJaWYgKGRibmFtZSkKLQkJewot CQkJa2V5d29yZHNbaV0gPSAiZGJuYW1lIjsKLQkJCXZhbHVlc1tpXSA9IGRibmFtZTsKLQkJCWkr KzsKLQkJfQotCQlrZXl3b3Jkc1tpXSA9ICJmYWxsYmFja19hcHBsaWNhdGlvbl9uYW1lIjsKLQkJ dmFsdWVzW2ldID0gcHJvZ25hbWU7Ci0JCWkrKzsKLQotCQluZXdfcGFzcyA9IGZhbHNlOwotCQlj b25uID0gUFFjb25uZWN0ZGJQYXJhbXMoa2V5d29yZHMsIHZhbHVlcywgdHJ1ZSk7Ci0KLQkJaWYg KCFjb25uKQotCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjb25uZWN0IHRvIGRhdGFiYXNlIFwiJXNc IiIsIGRibmFtZSk7Ci0KLQkJaWYgKFBRc3RhdHVzKGNvbm4pID09IENPTk5FQ1RJT05fQkFEICYm Ci0JCQlQUWNvbm5lY3Rpb25OZWVkc1Bhc3N3b3JkKGNvbm4pICYmCi0JCQkhcGFzc3dvcmQgJiYK LQkJCXByb21wdF9wYXNzd29yZCAhPSBUUklfTk8pCi0JCXsKLQkJCVBRZmluaXNoKGNvbm4pOwot CQkJcGFzc3dvcmQgPSBzaW1wbGVfcHJvbXB0KCJQYXNzd29yZDogIiwgZmFsc2UpOwotCQkJbmV3 X3Bhc3MgPSB0cnVlOwotCQl9Ci0JfSB3aGlsZSAobmV3X3Bhc3MpOwotCi0JLyogY2hlY2sgdG8g c2VlIHRoYXQgdGhlIGJhY2tlbmQgY29ubmVjdGlvbiB3YXMgc3VjY2Vzc2Z1bGx5IG1hZGUgKi8K LQlpZiAoUFFzdGF0dXMoY29ubikgPT0gQ09OTkVDVElPTl9CQUQpCi0JewotCQlpZiAoZmFpbF9v bl9lcnJvcikKLQkJCXBnX2ZhdGFsKCIlcyIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKLQkJZWxz ZQotCQl7Ci0JCQlQUWZpbmlzaChjb25uKTsKLQotCQkJZnJlZShrZXl3b3Jkcyk7Ci0JCQlmcmVl KHZhbHVlcyk7Ci0JCQlQUWNvbm5pbmZvRnJlZShjb25uX29wdHMpOwotCi0JCQlyZXR1cm4gTlVM TDsKLQkJfQotCX0KLQotCS8qCi0JICogT2ssIGNvbm5lY3RlZCBzdWNjZXNzZnVsbHkuIFJlbWVt YmVyIHRoZSBvcHRpb25zIHVzZWQsIGluIHRoZSBmb3JtIG9mIGEKLQkgKiBjb25uZWN0aW9uIHN0 cmluZy4KLQkgKi8KLQljb25uc3RyID0gY29uc3RydWN0Q29ublN0cihrZXl3b3JkcywgdmFsdWVz KTsKLQotCWZyZWUoa2V5d29yZHMpOwotCWZyZWUodmFsdWVzKTsKLQlQUWNvbm5pbmZvRnJlZShj b25uX29wdHMpOwotCi0JLyogQ2hlY2sgdmVyc2lvbiAqLwotCXJlbW90ZXZlcnNpb25fc3RyID0g UFFwYXJhbWV0ZXJTdGF0dXMoY29ubiwgInNlcnZlcl92ZXJzaW9uIik7Ci0JaWYgKCFyZW1vdGV2 ZXJzaW9uX3N0cikKLQkJcGdfZmF0YWwoImNvdWxkIG5vdCBnZXQgc2VydmVyIHZlcnNpb24iKTsK LQlzZXJ2ZXJfdmVyc2lvbiA9IFBRc2VydmVyVmVyc2lvbihjb25uKTsKLQlpZiAoc2VydmVyX3Zl cnNpb24gPT0gMCkKLQkJcGdfZmF0YWwoImNvdWxkIG5vdCBwYXJzZSBzZXJ2ZXIgdmVyc2lvbiBc IiVzXCIiLAotCQkJCSByZW1vdGV2ZXJzaW9uX3N0cik7Ci0KLQlteV92ZXJzaW9uID0gUEdfVkVS U0lPTl9OVU07Ci0KLQkvKgotCSAqIFdlIGFsbG93IHRoZSBzZXJ2ZXIgdG8gYmUgYmFjayB0byA5 LjIsIGFuZCB1cCB0byBhbnkgbWlub3IgcmVsZWFzZSBvZgotCSAqIG91ciBvd24gbWFqb3IgdmVy c2lvbi4gIChTZWUgYWxzbyB2ZXJzaW9uIGNoZWNrIGluIHBnX2R1bXAuYy4pCi0JICovCi0JaWYg KG15X3ZlcnNpb24gIT0gc2VydmVyX3ZlcnNpb24KLQkJJiYgKHNlcnZlcl92ZXJzaW9uIDwgOTAy MDAgfHwKLQkJCShzZXJ2ZXJfdmVyc2lvbiAvIDEwMCkgPiAobXlfdmVyc2lvbiAvIDEwMCkpKQot CXsKLQkJcGdfbG9nX2Vycm9yKCJhYm9ydGluZyBiZWNhdXNlIG9mIHNlcnZlciB2ZXJzaW9uIG1p c21hdGNoIik7Ci0JCXBnX2xvZ19lcnJvcl9kZXRhaWwoInNlcnZlciB2ZXJzaW9uOiAlczsgJXMg dmVyc2lvbjogJXMiLAotCQkJCQkJCXJlbW90ZXZlcnNpb25fc3RyLCBwcm9nbmFtZSwgUEdfVkVS U0lPTik7Ci0JCWV4aXRfbmljZWx5KDEpOwotCX0KLQotCVBRY2xlYXIoZXhlY3V0ZVF1ZXJ5KGNv bm4sIEFMV0FZU19TRUNVUkVfU0VBUkNIX1BBVEhfU1FMKSk7Ci0KLQlyZXR1cm4gY29ubjsKLX0K LQotLyogLS0tLS0tLS0tLQotICogQ29uc3RydWN0IGEgY29ubmVjdGlvbiBzdHJpbmcgZnJvbSB0 aGUgZ2l2ZW4ga2V5d29yZC92YWx1ZSBwYWlycy4gSXQgaXMKLSAqIHVzZWQgdG8gcGFzcyB0aGUg Y29ubmVjdGlvbiBvcHRpb25zIHRvIHRoZSBwZ19kdW1wIHN1YnByb2Nlc3MuCi0gKgotICogVGhl IGZvbGxvd2luZyBwYXJhbWV0ZXJzIGFyZSBleGNsdWRlZDoKLSAqCWRibmFtZQkJLSB2YXJpZXMg aW4gZWFjaCBwZ19kdW1wIGludm9jYXRpb24KLSAqCXBhc3N3b3JkCS0gaXQncyBub3Qgc2VjdXJl IHRvIHBhc3MgYSBwYXNzd29yZCBvbiB0aGUgY29tbWFuZCBsaW5lCi0gKglmYWxsYmFja19hcHBs aWNhdGlvbl9uYW1lIC0gd2UnbGwgbGV0IHBnX2R1bXAgc2V0IGl0Ci0gKiAtLS0tLS0tLS0tCi0g Ki8KLXN0YXRpYyBjaGFyICoKLWNvbnN0cnVjdENvbm5TdHIoY29uc3QgY2hhciAqKmtleXdvcmRz LCBjb25zdCBjaGFyICoqdmFsdWVzKQotewotCVBRRXhwQnVmZmVyIGJ1ZiA9IGNyZWF0ZVBRRXhw QnVmZmVyKCk7Ci0JY2hhcgkgICAqY29ubnN0cjsKLQlpbnQJCQlpOwotCWJvb2wJCWZpcnN0a2V5 d29yZCA9IHRydWU7Ci0KLQkvKiBDb25zdHJ1Y3QgYSBuZXcgY29ubmVjdGlvbiBzdHJpbmcgaW4g a2V5PSd2YWx1ZScgZm9ybWF0LiAqLwotCWZvciAoaSA9IDA7IGtleXdvcmRzW2ldICE9IE5VTEw7 IGkrKykKLQl7Ci0JCWlmIChzdHJjbXAoa2V5d29yZHNbaV0sICJkYm5hbWUiKSA9PSAwIHx8Ci0J CQlzdHJjbXAoa2V5d29yZHNbaV0sICJwYXNzd29yZCIpID09IDAgfHwKLQkJCXN0cmNtcChrZXl3 b3Jkc1tpXSwgImZhbGxiYWNrX2FwcGxpY2F0aW9uX25hbWUiKSA9PSAwKQotCQkJY29udGludWU7 Ci0KLQkJaWYgKCFmaXJzdGtleXdvcmQpCi0JCQlhcHBlbmRQUUV4cEJ1ZmZlckNoYXIoYnVmLCAn ICcpOwotCQlmaXJzdGtleXdvcmQgPSBmYWxzZTsKLQkJYXBwZW5kUFFFeHBCdWZmZXIoYnVmLCAi JXM9Iiwga2V5d29yZHNbaV0pOwotCQlhcHBlbmRDb25uU3RyVmFsKGJ1ZiwgdmFsdWVzW2ldKTsK LQl9Ci0KLQljb25uc3RyID0gcGdfc3RyZHVwKGJ1Zi0+ZGF0YSk7Ci0JZGVzdHJveVBRRXhwQnVm ZmVyKGJ1Zik7Ci0JcmV0dXJuIGNvbm5zdHI7Ci19Ci0KLS8qCi0gKiBSdW4gYSBxdWVyeSwgcmV0 dXJuIHRoZSByZXN1bHRzLCBleGl0IHByb2dyYW0gb24gZmFpbHVyZS4KLSAqLwotc3RhdGljIFBH cmVzdWx0ICoKLWV4ZWN1dGVRdWVyeShQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnF1ZXJ5KQot ewotCVBHcmVzdWx0ICAgKnJlczsKLQotCXBnX2xvZ19pbmZvKCJleGVjdXRpbmcgJXMiLCBxdWVy eSk7Ci0KLQlyZXMgPSBQUWV4ZWMoY29ubiwgcXVlcnkpOwotCWlmICghcmVzIHx8Ci0JCVBRcmVz dWx0U3RhdHVzKHJlcykgIT0gUEdSRVNfVFVQTEVTX09LKQotCXsKLQkJcGdfbG9nX2Vycm9yKCJx dWVyeSBmYWlsZWQ6ICVzIiwgUFFlcnJvck1lc3NhZ2UoY29ubikpOwotCQlwZ19sb2dfZXJyb3Jf ZGV0YWlsKCJRdWVyeSB3YXM6ICVzIiwgcXVlcnkpOwotCQlQUWZpbmlzaChjb25uKTsKLQkJZXhp dF9uaWNlbHkoMSk7Ci0JfQotCi0JcmV0dXJuIHJlczsKLX0KLQogLyoKICAqIEFzIGFib3ZlIGZv ciBhIFNRTCBjb21tYW5kICh3aGljaCByZXR1cm5zIG5vdGhpbmcpLgogICovCi0tIAoyLjM5LjMK Cg== --000000000000e5fb030631b13e80 Content-Type: application/octet-stream; name="v25_0004-update-AX-handle-for-each-database-for-cleanup.patch" Content-Disposition: attachment; filename="v25_0004-update-AX-handle-for-each-database-for-cleanup.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m8y38xsh3 RnJvbSA4NDUwMDg2MDc5NDgwZjM3ODRkMjZjNmM4NTk3M2I4NGNmYThiNDg0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYWhlbmRyYSBTaW5naCBUaGFsb3IgPG1haGk2cnVuQGdtYWls LmNvbT4KRGF0ZTogVHVlLCAxIEFwciAyMDI1IDExOjA4OjM4ICswNTMwClN1YmplY3Q6IFtQQVRD SCA0LzRdIHVwZGF0ZSBBWCBoYW5kbGUgZm9yIGVhY2ggZGF0YWJhc2UgZm9yIGNsZWFudXAuCgot LS0KIHNyYy9iaW4vcGdfZHVtcC9wYXJhbGxlbC5jICAgICAgICAgICB8IDEwICsrKysrKysrKysK IHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuaCB8ICAxICsKIHNyYy9iaW4vcGdf ZHVtcC9wZ19yZXN0b3JlLmMgICAgICAgICB8IDEwICsrKysrLS0tLS0KIDMgZmlsZXMgY2hhbmdl ZCwgMTYgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmlu L3BnX2R1bXAvcGFyYWxsZWwuYyBiL3NyYy9iaW4vcGdfZHVtcC9wYXJhbGxlbC5jCmluZGV4IDA4 NmFkY2RjNTAyLi41OTc0ZDY3MDZmZCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BhcmFs bGVsLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BhcmFsbGVsLmMKQEAgLTMzMyw2ICszMzMsMTYg QEAgb25fZXhpdF9jbG9zZV9hcmNoaXZlKEFyY2hpdmUgKkFIWCkKIAlvbl9leGl0X25pY2VseShh cmNoaXZlX2Nsb3NlX2Nvbm5lY3Rpb24sICZzaHV0ZG93bl9pbmZvKTsKIH0KIAorLyoKKyAqIFdo ZW4gcGdfcmVzdG9yZSByZXN0b3JlcyBtdWx0aXBsZSBkYXRhYmFzZXMsIHRoZW4gdXBkYXRlIGFs cmVhZHkgYWRkZWQgZW50cnkKKyAqIGludG8gYXJyYXkgZm9yIGNsZWFudXAuCisgKi8KK3ZvaWQK K3JlcGxhY2Vfb25fZXhpdF9jbG9zZV9hcmNoaXZlKEFyY2hpdmUgKkFIWCkKK3sKKwlzaHV0ZG93 bl9pbmZvLkFIWCA9IEFIWDsKK30KKwogLyoKICAqIG9uX2V4aXRfbmljZWx5IGhhbmRsZXIgZm9y IHNodXR0aW5nIGRvd24gZGF0YWJhc2UgY29ubmVjdGlvbnMgYW5kCiAgKiB3b3JrZXIgcHJvY2Vz c2VzIGNsZWFubHkuCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hp dmVyLmggYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmgKaW5kZXggYTIwNjRm NDcxZWQuLmVkMDIzOGNjYTQ3IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3Vw X2FyY2hpdmVyLmgKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oCkBA IC0zODYsNiArMzg2LDcgQEAgc3RydWN0IF90b2NFbnRyeQogCiBleHRlcm4gaW50CXBhcmFsbGVs X3Jlc3RvcmUoQXJjaGl2ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSk7CiBleHRlcm4gdm9pZCBv bl9leGl0X2Nsb3NlX2FyY2hpdmUoQXJjaGl2ZSAqQUhYKTsKK2V4dGVybiB2b2lkIHJlcGxhY2Vf b25fZXhpdF9jbG9zZV9hcmNoaXZlKEFyY2hpdmUgKkFIWCk7CiAKIGV4dGVybiB2b2lkIHdhcm5f b3JfZXhpdF9ob3JyaWJseShBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqZm10LC4uLikg cGdfYXR0cmlidXRlX3ByaW50ZigyLCAzKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1w L3BnX3Jlc3RvcmUuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19yZXN0b3JlLmMKaW5kZXggYWE4ODg3 YTRlYjAuLmExNDJiNzQ0MjIyIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfcmVzdG9y ZS5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19yZXN0b3JlLmMKQEAgLTYwMywxNCArNjAzLDE0 IEBAIHJlc3RvcmVfb25lX2RhdGFiYXNlKGNvbnN0IGNoYXIgKmlucHV0RmlsZVNwZWMsIFJlc3Rv cmVPcHRpb25zICpvcHRzLAogCSAqIFdlIGRvbid0IGhhdmUgYSBjb25uZWN0aW9uIHlldCBidXQg dGhhdCBkb2Vzbid0IG1hdHRlci4gVGhlIGNvbm5lY3Rpb24KIAkgKiBpcyBpbml0aWFsaXplZCB0 byBOVUxMIGFuZCBpZiB3ZSB0ZXJtaW5hdGUgdGhyb3VnaCBleGl0X25pY2VseSgpIHdoaWxlCiAJ ICogaXQncyBzdGlsbCBOVUxMLCB0aGUgY2xlYW51cCBmdW5jdGlvbiB3aWxsIGp1c3QgYmUgYSBu by1vcC4gSWYgd2UgYXJlCi0JICogcmVzdG9yaW5nIG11bHRpcGxlIGRhdGFiYXNlcywgdGhlbiBz YXZlIGluZGV4IG9mIGV4aXRfbmljZWx5IHNvIHRoYXQgd2UKLQkgKiBjYW4gdXNlIHNhbWUgc2xv dCBmb3IgYWxsIHRoZSBkYXRhYmFzZXMgYXMgd2UgYWxyZWFkeSBjbG9zZWQgdGhlCi0JICogcHJl dmlvdXMgYXJjaGl2ZSBieSBDbG9zZUFyY2hpdmUuCisJICogcmVzdG9yaW5nIG11bHRpcGxlIGRh dGFiYXNlcywgdGhlbiBvbmx5IHVwZGF0ZSBBWCBoYW5kbGUgZm9yIGNsZWFudXAgYXMKKwkgKiBw cmV2aW91cyBlbnRyeSB3YXMgYWxyZWFkeSBpbiBhcnJheSBhbmQgd2UgaGFkIGNsb3NlZCBwcmV2 aW91cworCSAqIGNvbm5lY3Rpb24gc28gd2UgY2FuIHVzZSBzYW1lIHNsb3QgZnJvbSBhcnJheS4K IAkgKi8KIAlpZiAoIWFwcGVuZF9kYXRhIHx8IG51bSA9PSAwKQogCQlvbl9leGl0X2Nsb3NlX2Fy Y2hpdmUoQUgpOwotCS8vZWxzZQotCQkvL3JlcGxhY2Vfb25fZXhpdF9jbG9zZV9hcmNoaXZlKEFI KTsKKwllbHNlCisJCXJlcGxhY2Vfb25fZXhpdF9jbG9zZV9hcmNoaXZlKEFIKTsKIAogCS8qIExl dCB0aGUgYXJjaGl2ZXIga25vdyBob3cgbm9pc3kgdG8gYmUgKi8KIAlBSC0+dmVyYm9zZSA9IG9w dHMtPnZlcmJvc2U7Ci0tIAoyLjM5LjMKCg== --000000000000e5fb030631b13e80 Content-Type: application/octet-stream; name="v25_0003-pg_dumpall-with-directory-tar-custom-format.patch" Content-Disposition: attachment; filename="v25_0003-pg_dumpall-with-directory-tar-custom-format.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m8y38xse2 RnJvbSAxMDQxMWM5NmIwMjk0ZDQxNGRlYWY0NzVhZDgyYTFkZDc4MjFiZTM2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYWhlbmRyYSBTaW5naCBUaGFsb3IgPG1haGk2cnVuQGdtYWls LmNvbT4KRGF0ZTogVHVlLCAxIEFwciAyMDI1IDEwOjQ4OjUyICswNTMwClN1YmplY3Q6IFtQQVRD SCAzLzRdIHBnX2R1bXBhbGwgd2l0aCBkaXJlY3Rvcnl8dGFyfGN1c3RvbSBmb3JtYXQgYW5kICBy ZXN0b3JlCiBpdCBieSBwZ19yZXN0b3JlCgpuZXcgb3B0aW9uIHRvIHBnX2R1bXBhbGw6Ci1GLCAt LWZvcm1hdD1kfHR8Y3xwICBvdXRwdXQgZmlsZSBmb3JtYXQgKCBwbGFpbiB0ZXh0IChkZWZhdWx0 KSkKCkV4OjEgLi9wZ19kdW1wYWxsIC0tZm9ybWF0PWRpcmVjdG9yeSAtLWZpbGU9ZHVtcERpck5h bWUKRXg6MiAuL3BnX2R1bXBhbGwgLS1mb3JtYXQ9dGFyIC0tZmlsZT1kdW1wRGlyTmFtZQpFeDoz IC4vcGdfZHVtcGFsbCAtLWZvcm1hdD1jdXN0b20gLS1maWxlPWR1bXBEaXJOYW1lCkV4OjQgLi9w Z19kdW1wYWxsIC0tZm9ybWF0PXBsYWluIC0tZmlsZT1kdW1wRGlyTmFtZQoKZHVtcHMgYXJlIGFz OgpnbG9iYWwuZGF0IDo6OiBnbG9iYWwgc3FsIGNvbW1hbmRzIGluIHNpbXBsZSBwbGFpbiBmb3Jt YXQKbWFwLmRhdC4gICA6OjogZGJvaWQgZGJuYW1lIC0tLWVudHJpZXMgZm9yIGFsbCBkYXRhYmFz ZXMgaW4gc2ltcGxlIHRleHQgZm9ybQpkYXRhYmFzZXMuIDo6OgogICAgICBzdWJkaXIgICAgIGRi b2lkMSAgLT4gdG9jLmRhdCBhbmQgZGF0YSBmaWxlcyBpbiBhcmNoaXZlIGZvcm1hdAogICAgICBz dWJkaXIgICAgIGRib2lkMi4gLT4gdG9jLmRhdCBhbmQgZGF0YSBmaWxlcyBpbiBhcmNoaXZlIGZv cm1hdAogICAgICAgICAgICAgIGV0YwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KTk9URToKaWYgbmVlZGVk LCByZXN0b3JlIHNpbmdsZSBkYiBieSBwYXJ0aWN1bGFyIHN1YmRpcgoKRXg6IC4vcGdfcmVzdG9y ZSAtLWZvcm1hdD1kaXJlY3RvcnkgLWQgcG9zdGdyZXMgZHVtcERpck5hbWUvZGF0YWJhc2VzLzUK ICAgLS0gaGVyZSwgNSBpcyB0aGUgZGJvaWQgb2YgcG9zdGdyZXMgZGIKICAgLS0gdG8gZ2V0IGRi b2lkLCByZWZlciBkYm5hbWUgaW4gbWFwLmZpbGUKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCm5ldyBvcHRp b25zIHRvIHBnX3Jlc3RvcmU6Ci1nLCAtLWdsb2JhbHMtb25seSAgICAgICAgICAgcmVzdG9yZSBv bmx5IGdsb2JhbCBvYmplY3RzLCBubyBkYXRhYmFzZXMKLS1leGNsdWRlLWRhdGFiYXNlPVBBVFRF Uk4gICBleGNsdWRlIGRhdGFiYXNlIHdob3NlIG5hbWUgbWF0Y2hlcyBwYXR0ZXJuCgpXaGVuIHdl IGdpdmUgLWcvLS1nbG9iYWxzLW9ubHkgb3B0aW9uLCB0aGVuIG9ubHkgcmVzdG9yZSBnbG9iYWxz LCBubyBkYiByZXN0b3JpbmcuCgpEZXNpZ246CldoZW4gLS1mb3JtYXQ9ZHx0fGMgaXMgc3BlY2lm aWVkIGFuZCB0aGVyZSBpcyBubyB0b2MuZGF0IGluIG1haW4gZGlyZWN0b3J5LCB0aGVuIGNoZWNr CmZvciBnbG9iYWwuZGF0IHRvIHJlc3RvcmUgYWxsIGRhdGFiYXNlcy4gSWYgZ2xvYmFsLmRhdCBm aWxlIGlzIGV4aXN0IGluIGRpcmVjdG9yeSwKdGhlbiBmaXJzdCByZXN0b3JlIGFsbCBnbG9iYWxz IGZyb20gZ2xvYmFsLmRhdCBhbmQgdGhlbiByZXN0b3JlIGFsbCBkYXRhYmFzZXMgb25lIGJ5IG9u ZQpmcm9tIG1hcC5kYXQgbGlzdCAoaWYgZXhpc3QpCgpmb3IgLS1leGNsdWRlLWRhdGFiYXNlPVBB VFRFUk4gZm9yIHBnX3Jlc3RvcmUKCmFzIG9mIG5vdywgU0VMRUNUIDEgV0hFUkUgWFhYIE9QRVJB VE9SKHBnX2NhdGFsb2cufikgJ14oUEFUVEVSTikkJyBDT0xMQVRFIHBnX2NhdGFsb2cuZGVmYXVs dAppZiBubyBkYiBjb25uZWN0aW9uLCB0aGVuIFBBVFRFUk49TkFNRSBtYXRjaGluZyBvbmx5CgpB dCB0aGUgZW5kIG9mIHJlc3RvcmUsIHdlIGFyZSBnaXZpbmcgd2FybmluZyB3aXRoIHRvdGFsIG51 bWJlciBvZiBlcnJvcnMgKGluY2x1ZGluZyBnbG9iYWwuZGF0LAphbmQgZWFjaCBkYXRhYmFzZSBl cnJvcnMpIGFuZCBmb3IgZWFjaCBkYXRhYmFzZSwgd2UgYXJlIHByaW50aW5nIHdhcm5pbmcgd2l0 aCBkYm5hbWUgYW5kIHRvdGFsCmVycm9ycy4KCnRocmVhZDoKaHR0cHM6Ly93d3cucG9zdGdyZXNx bC5vcmcvbWVzc2FnZS1pZC9mbGF0L0NBS1l0TkFwOXZPdHlkWEwzX3BuR0olMkJUZXRadE4lM0RG WVNuWlNNQ3FYY2VVM21rSFB4UGclNDBtYWlsLmdtYWlsLmNvbSMwNjY0MzNjYjVhZTAwN2NiZTM1 ZmVmZGRmNzk2ZDUyZgoKQXV0aG9yOiAgICBNYWhlbmRyYSBTaW5naCBUaGFsb3IgPG1haGk2cnVu QGdtYWlsLmNvbT4KLS0tCiBkb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXBhbGwuc2dtbCAgICAgfCAg ODYgKystCiBkb2Mvc3JjL3NnbWwvcmVmL3BnX3Jlc3RvcmUuc2dtbCAgICAgfCAgNjYgKystCiBz cmMvYmluL3BnX2R1bXAvcGdfYmFja3VwLmggICAgICAgICAgfCAgIDIgKy0KIHNyYy9iaW4vcGdf ZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYyB8ICAyMCArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2Jh Y2t1cF90YXIuYyAgICAgIHwgICAyICstCiBzcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jICAgICAg ICAgICAgfCAgIDIgKy0KIHNyYy9iaW4vcGdfZHVtcC9wZ19kdW1wYWxsLmMgICAgICAgICB8IDI5 NSArKysrKysrKy0tCiBzcmMvYmluL3BnX2R1bXAvcGdfcmVzdG9yZS5jICAgICAgICAgfCA3OTkg KysrKysrKysrKysrKysrKysrKysrKysrKystCiBzcmMvYmluL3BnX2R1bXAvdC8wMDFfYmFzaWMu cGwgICAgICAgfCAgIDkgKwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgIHwg ICAyICsKIDEwIGZpbGVzIGNoYW5nZWQsIDExOTggaW5zZXJ0aW9ucygrKSwgODUgZGVsZXRpb25z KC0pCiBtb2RlIGNoYW5nZSAxMDA2NDQgPT4gMTAwNzU1IHNyYy9iaW4vcGdfZHVtcC90LzAwMV9i YXNpYy5wbAoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcGFsbC5zZ21sIGIv ZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wYWxsLnNnbWwKaW5kZXggNzY1YjMwYTNhNjYuLjQzZmRh YjJkNzdlIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXBhbGwuc2dtbAorKysg Yi9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXBhbGwuc2dtbApAQCAtMTYsNyArMTYsNyBAQCBQb3N0 Z3JlU1FMIGRvY3VtZW50YXRpb24KIAogIDxyZWZuYW1lZGl2PgogICA8cmVmbmFtZT5wZ19kdW1w YWxsPC9yZWZuYW1lPgotICA8cmVmcHVycG9zZT5leHRyYWN0IGEgPHByb2R1Y3RuYW1lPlBvc3Rn cmVTUUw8L3Byb2R1Y3RuYW1lPiBkYXRhYmFzZSBjbHVzdGVyIGludG8gYSBzY3JpcHQgZmlsZTwv cmVmcHVycG9zZT4KKyAgPHJlZnB1cnBvc2U+ZXh0cmFjdCBhIDxwcm9kdWN0bmFtZT5Qb3N0Z3Jl U1FMPC9wcm9kdWN0bmFtZT4gZGF0YWJhc2UgY2x1c3RlciB1c2luZyBhIHNwZWNpZmllZCBkdW1w IGZvcm1hdDwvcmVmcHVycG9zZT4KICA8L3JlZm5hbWVkaXY+CiAKICA8cmVmc3lub3BzaXNkaXY+ CkBAIC0zMyw3ICszMyw3IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogICA8cGFyYT4KICAg IDxhcHBsaWNhdGlvbj5wZ19kdW1wYWxsPC9hcHBsaWNhdGlvbj4gaXMgYSB1dGlsaXR5IGZvciB3 cml0aW5nIG91dAogICAgKDxxdW90ZT5kdW1waW5nPC9xdW90ZT4pIGFsbCA8cHJvZHVjdG5hbWU+ UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IGRhdGFiYXNlcwotICAgb2YgYSBjbHVzdGVyIGludG8g b25lIHNjcmlwdCBmaWxlLiAgVGhlIHNjcmlwdCBmaWxlIGNvbnRhaW5zCisgICBvZiBhIGNsdXN0 ZXIgaW50byBhbiBhcmNoaXZlLiAgVGhlIGFyY2hpdmUgY29udGFpbnMKICAgIDxhY3JvbnltPlNR TDwvYWNyb255bT4gY29tbWFuZHMgdGhhdCBjYW4gYmUgdXNlZCBhcyBpbnB1dCB0byA8eHJlZgog ICAgbGlua2VuZD0iYXBwLXBzcWwiLz4gdG8gcmVzdG9yZSB0aGUgZGF0YWJhc2VzLiAgSXQgZG9l cyB0aGlzIGJ5CiAgICBjYWxsaW5nIDx4cmVmIGxpbmtlbmQ9ImFwcC1wZ2R1bXAiLz4gZm9yIGVh Y2ggZGF0YWJhc2UgaW4gdGhlIGNsdXN0ZXIuCkBAIC01MiwxMSArNTIsMTYgQEAgUG9zdGdyZVNR TCBkb2N1bWVudGF0aW9uCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KLSAgIFRoZSBTUUwgc2NyaXB0 IHdpbGwgYmUgd3JpdHRlbiB0byB0aGUgc3RhbmRhcmQgb3V0cHV0LiAgVXNlIHRoZQorICAgUGxh aW4gdGV4dCBTUUwgc2NyaXB0cyB3aWxsIGJlIHdyaXR0ZW4gdG8gdGhlIHN0YW5kYXJkIG91dHB1 dC4gIFVzZSB0aGUKICAgIDxvcHRpb24+LWY8L29wdGlvbj4vPG9wdGlvbj4tLWZpbGU8L29wdGlv bj4gb3B0aW9uIG9yIHNoZWxsIG9wZXJhdG9ycyB0bwogICAgcmVkaXJlY3QgaXQgaW50byBhIGZp bGUuCiAgIDwvcGFyYT4KIAorICA8cGFyYT4KKyAgIEFyY2hpdmVzIGluIG90aGVyIGZvcm1hdHMg d2lsbCBiZSBwbGFjZWQgaW4gYSBkaXJlY3RvcnkgbmFtZWQgdXNpbmcgdGhlCisgICA8b3B0aW9u Pi1mPC9vcHRpb24+LzxvcHRpb24+LS1maWxlPC9vcHRpb24+LCB3aGljaCBpcyByZXF1aXJlZCBp biB0aGlzIGNhc2UuCisgIDwvcGFyYT4KKwogICA8cGFyYT4KICAgPGFwcGxpY2F0aW9uPnBnX2R1 bXBhbGw8L2FwcGxpY2F0aW9uPiBuZWVkcyB0byBjb25uZWN0IHNldmVyYWwKICAgdGltZXMgdG8g dGhlIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gc2VydmVyIChvbmNlIHBl cgpAQCAtMTIxLDEwICsxMjYsODUgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAgICAgICAg PHBhcmE+CiAgICAgICAgIFNlbmQgb3V0cHV0IHRvIHRoZSBzcGVjaWZpZWQgZmlsZS4gIElmIHRo aXMgaXMgb21pdHRlZCwgdGhlCiAgICAgICAgIHN0YW5kYXJkIG91dHB1dCBpcyB1c2VkLgorICAg ICAgICBOb3RlOiBUaGlzIG9wdGlvbiBjYW4gb25seSBiZSBvbWl0dGVkIHdoZW4gPG9wdGlvbj4t LWZvcm1hdDwvb3B0aW9uPiBpcyBwbGFpbgogICAgICAgIDwvcGFyYT4KICAgICAgIDwvbGlzdGl0 ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5PgogCisgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICA8 dGVybT48b3B0aW9uPi1GIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5mb3JtYXQ8L3Jl cGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LS1mb3JtYXQ9 PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmZvcm1hdDwvcmVwbGFjZWFibGU+PC9vcHRp b24+PC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBTcGVj aWZ5IHRoZSBmb3JtYXQgb2YgZHVtcCBmaWxlcy4gIEluIHBsYWluIGZvcm1hdCwgYWxsIHRoZSBk dW1wIGRhdGEgaXMKKyAgICAgICAgc2VudCBpbiBhIHNpbmdsZSB0ZXh0IHN0cmVhbS4gVGhpcyBp cyB0aGUgZGVmYXVsdC4KKworICAgICAgICBJbiBhbGwgb3RoZXIgbW9kZXMsIDxhcHBsaWNhdGlv bj5wZ19kdW1wYWxsPC9hcHBsaWNhdGlvbj4gZmlyc3QgY3JlYXRlcyB0d28gZmlsZXM6CisgICAg ICAgIDxmaWxlbmFtZT5nbG9iYWwuZGF0PC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5tYXAuZGF0 PC9maWxlbmFtZT4sIGluIHRoZSBkaXJlY3RvcnkKKyAgICAgICAgc3BlY2lmaWVkIGJ5IDxvcHRp b24+LS1maWxlPC9vcHRpb24+LgorICAgICAgICBUaGUgZmlyc3QgZmlsZSBjb250YWlucyBnbG9i YWwgZGF0YSwgc3VjaCBhcyByb2xlcyBhbmQgdGFibGVzcGFjZXMuIFRoZSBzZWNvbmQKKyAgICAg ICAgY29udGFpbnMgYSBtYXBwaW5nIGJldHdlZW4gZGF0YWJhc2Ugb2lkcyBhbmQgbmFtZXMuIFRo ZXNlIGZpbGVzIGFyZSB1c2VkIGJ5CisgICAgICAgIDxhcHBsaWNhdGlvbj5wZ19yZXN0b3JlPC9h cHBsaWNhdGlvbj4uIERhdGEgZm9yIGluZGl2aWR1YWwgZGF0YWJhc2VzIGlzIHBsYWNlZCBpbgor ICAgICAgICA8ZmlsZW5hbWU+ZGF0YWJhc2VzPC9maWxlbmFtZT4gc3ViZGlyZWN0b3J5LCBuYW1l ZCB1c2luZyB0aGUgZGF0YWJhc2UncyA8dHlwZT5vaWQ8L3R5cGU+LgorCisgICAgICAgPHZhcmlh YmxlbGlzdD4KKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFs PmQ8L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAgPHRlcm0+PGxpdGVyYWw+ZGlyZWN0b3J5PC9s aXRlcmFsPjwvdGVybT4KKyAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAg ICAgICAgICAgT3V0cHV0IGRpcmVjdG9yeS1mb3JtYXQgYXJjaGl2ZXMgZm9yIGVhY2ggZGF0YWJh c2UsCisgICAgICAgICAgIHN1aXRhYmxlIGZvciBpbnB1dCBpbnRvIHBnX3Jlc3RvcmUuIFRoZSBk aXJlY3RvcnkKKyAgICAgICAgICAgd2lsbCBoYXZlIGRhdGFiYXNlIDx0eXBlPm9pZDwvdHlwZT4g YXMgaXRzIG5hbWUuCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgPC9saXN0aXRlbT4KKyAg ICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAg IDx0ZXJtPjxsaXRlcmFsPnA8L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAgPHRlcm0+PGxpdGVy YWw+cGxhaW48L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAg IDxwYXJhPgorICAgICAgICAgICBPdXRwdXQgYSBwbGFpbi10ZXh0IFNRTCBzY3JpcHQgZmlsZSAo dGhlIGRlZmF1bHQpLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgIDwvbGlzdGl0ZW0+Cisg ICAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAg ICA8dGVybT48bGl0ZXJhbD5jPC9saXRlcmFsPjwvdGVybT4KKyAgICAgICAgIDx0ZXJtPjxsaXRl cmFsPmN1c3RvbTwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAg ICAgPHBhcmE+CisgICAgICAgICAgIE91dHB1dCBhIGN1c3RvbS1mb3JtYXQgYXJjaGl2ZSBmb3Ig ZWFjaCBkYXRhYmFzZSwKKyAgICAgICAgICAgc3VpdGFibGUgZm9yIGlucHV0IGludG8gcGdfcmVz dG9yZS4gVGhlIGFyY2hpdmUKKyAgICAgICAgICAgd2lsbCBiZSBuYW1lZCA8ZmlsZW5hbWU+ZGJv aWQuZG1wPC9maWxlbmFtZT4gd2hlcmUgPHR5cGU+ZGJvaWQ8L3R5cGU+IGlzIHRoZQorICAgICAg ICAgICA8dHlwZT5vaWQ8L3R5cGU+IG9mIHRoZSBkYXRhYmFzZS4KKyAgICAgICAgICA8L3BhcmE+ CisgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAg ICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPnQ8L2xpdGVyYWw+PC90 ZXJtPgorICAgICAgICAgPHRlcm0+PGxpdGVyYWw+dGFyPC9saXRlcmFsPjwvdGVybT4KKyAgICAg ICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgT3V0cHV0IGEgdGFy LWZvcm1hdCBhcmNoaXZlIGZvciBlYWNoIGRhdGFiYXNlLAorICAgICAgICAgICBzdWl0YWJsZSBm b3IgaW5wdXQgaW50byBwZ19yZXN0b3JlLiBUaGUgYXJjaGl2ZQorICAgICAgICAgICB3aWxsIGJl IG5hbWVkIDxmaWxlbmFtZT5kYm9pZC50YXI8L2ZpbGVuYW1lPiB3aGVyZSA8dHlwZT5kYm9pZDwv dHlwZT4gaXMgdGhlCisgICAgICAgICAgIDx0eXBlPm9pZDwvdHlwZT4gb2YgdGhlIGRhdGFiYXNl LgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFy bGlzdGVudHJ5PgorCisgICAgICAgIDwvdmFyaWFibGVsaXN0PgorCisgICAgICAgTm90ZTogc2Vl IDx4cmVmIGxpbmtlbmQ9ImFwcC1wZ2R1bXAiLz4gZm9yIGRldGFpbHMKKyAgICAgICBvZiBob3cg dGhlIHZhcmlvdXMgbm9uIHBsYWluIHRleHQgYXJjaGl2ZXMgd29yay4KKworICAgICAgICA8L3Bh cmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKwogICAgICA8dmFy bGlzdGVudHJ5PgogICAgICAgPHRlcm0+PG9wdGlvbj4tLWZpbHRlcj08cmVwbGFjZWFibGUgY2xh c3M9InBhcmFtZXRlciI+ZmlsZW5hbWU8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KICAg ICAgIDxsaXN0aXRlbT4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcGdfcmVzdG9yZS5z Z21sIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ19yZXN0b3JlLnNnbWwKaW5kZXggYzg0MGE4MDdhZTku LmYxNGU1ODY2ZjZjIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3BnX3Jlc3RvcmUuc2dt bAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL3BnX3Jlc3RvcmUuc2dtbApAQCAtMTgsOCArMTgsOSBA QCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgPHJlZm5hbWU+cGdfcmVzdG9yZTwvcmVmbmFt ZT4KIAogICA8cmVmcHVycG9zZT4KLSAgIHJlc3RvcmUgYSA8cHJvZHVjdG5hbWU+UG9zdGdyZVNR TDwvcHJvZHVjdG5hbWU+IGRhdGFiYXNlIGZyb20gYW4KLSAgIGFyY2hpdmUgZmlsZSBjcmVhdGVk IGJ5IDxhcHBsaWNhdGlvbj5wZ19kdW1wPC9hcHBsaWNhdGlvbj4KKyAgIHJlc3RvcmUgYSA8cHJv ZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IGRhdGFiYXNlIG9yIGNsdXN0ZXIKKyAg IGZyb20gYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IDxhcHBsaWNhdGlvbj5wZ19kdW1wPC9hcHBsaWNh dGlvbj4gb3IKKyAgIDxhcHBsaWNhdGlvbj5wZ19kdW1wYWxsPC9hcHBsaWNhdGlvbj4KICAgPC9y ZWZwdXJwb3NlPgogIDwvcmVmbmFtZWRpdj4KIApAQCAtMzgsMTMgKzM5LDE0IEBAIFBvc3RncmVT UUwgZG9jdW1lbnRhdGlvbgogCiAgIDxwYXJhPgogICAgPGFwcGxpY2F0aW9uPnBnX3Jlc3RvcmU8 L2FwcGxpY2F0aW9uPiBpcyBhIHV0aWxpdHkgZm9yIHJlc3RvcmluZyBhCi0gICA8cHJvZHVjdG5h bWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IGRhdGFiYXNlIGZyb20gYW4gYXJjaGl2ZQotICAg Y3JlYXRlZCBieSA8eHJlZiBsaW5rZW5kPSJhcHAtcGdkdW1wIi8+IGluIG9uZSBvZiB0aGUgbm9u LXBsYWluLXRleHQKKyAgIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gZGF0 YWJhc2Ugb3IgY2x1c3RlciBmcm9tIGFuIGFyY2hpdmUKKyAgIGNyZWF0ZWQgYnkgPHhyZWYgbGlu a2VuZD0iYXBwLXBnZHVtcCIvPiBvcgorICAgPHhyZWYgbGlua2VuZD0iYXBwLXBnLWR1bXBhbGwi Lz4gaW4gb25lIG9mIHRoZSBub24tcGxhaW4tdGV4dAogICAgZm9ybWF0cy4gIEl0IHdpbGwgaXNz dWUgdGhlIGNvbW1hbmRzIG5lY2Vzc2FyeSB0byByZWNvbnN0cnVjdCB0aGUKLSAgIGRhdGFiYXNl IHRvIHRoZSBzdGF0ZSBpdCB3YXMgaW4gYXQgdGhlIHRpbWUgaXQgd2FzIHNhdmVkLiAgVGhlCi0g ICBhcmNoaXZlIGZpbGVzIGFsc28gYWxsb3cgPGFwcGxpY2F0aW9uPnBnX3Jlc3RvcmU8L2FwcGxp Y2F0aW9uPiB0bworICAgZGF0YWJhc2Ugb3IgY2x1c3RlciB0byB0aGUgc3RhdGUgaXQgd2FzIGlu IGF0IHRoZSB0aW1lIGl0IHdhcyBzYXZlZC4gVGhlCisgICBhcmNoaXZlcyBhbHNvIGFsbG93IDxh cHBsaWNhdGlvbj5wZ19yZXN0b3JlPC9hcHBsaWNhdGlvbj4gdG8KICAgIGJlIHNlbGVjdGl2ZSBh Ym91dCB3aGF0IGlzIHJlc3RvcmVkLCBvciBldmVuIHRvIHJlb3JkZXIgdGhlIGl0ZW1zCi0gICBw cmlvciB0byBiZWluZyByZXN0b3JlZC4gVGhlIGFyY2hpdmUgZmlsZXMgYXJlIGRlc2lnbmVkIHRv IGJlCisgICBwcmlvciB0byBiZWluZyByZXN0b3JlZC4gVGhlIGFyY2hpdmUgZm9ybWF0cyBhcmUg ZGVzaWduZWQgdG8gYmUKICAgIHBvcnRhYmxlIGFjcm9zcyBhcmNoaXRlY3R1cmVzLgogICA8L3Bh cmE+CiAKQEAgLTUyLDEwICs1NCwxNyBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgIDxh cHBsaWNhdGlvbj5wZ19yZXN0b3JlPC9hcHBsaWNhdGlvbj4gY2FuIG9wZXJhdGUgaW4gdHdvIG1v ZGVzLgogICAgSWYgYSBkYXRhYmFzZSBuYW1lIGlzIHNwZWNpZmllZCwgPGFwcGxpY2F0aW9uPnBn X3Jlc3RvcmU8L2FwcGxpY2F0aW9uPgogICAgY29ubmVjdHMgdG8gdGhhdCBkYXRhYmFzZSBhbmQg cmVzdG9yZXMgYXJjaGl2ZSBjb250ZW50cyBkaXJlY3RseSBpbnRvCi0gICB0aGUgZGF0YWJhc2Uu ICBPdGhlcndpc2UsIGEgc2NyaXB0IGNvbnRhaW5pbmcgdGhlIFNRTAotICAgY29tbWFuZHMgbmVj ZXNzYXJ5IHRvIHJlYnVpbGQgdGhlIGRhdGFiYXNlIGlzIGNyZWF0ZWQgYW5kIHdyaXR0ZW4KKyAg IHRoZSBkYXRhYmFzZS4KKyAgIFdoZW4gcmVzdG9yaW5nIGZyb20gYSBkdW1wIG1hZGUgYnk8YXBw bGljYXRpb24+cGdfZHVtcGFsbDwvYXBwbGljYXRpb24+LAorICAgZWFjaCBkYXRhYmFzZSB3aWxs IGJlIGNyZWF0ZWQgYW5kIHRoZW4gdGhlIHJlc3RvcmF0aW9uIHdpbGwgYmUgcnVuIGluIHRoYXQK KyAgIGRhdGFiYXNlLgorCisgICBPdGhlcndpc2UsIHdoZW4gYSBkYXRhYmFzZSBuYW1lIGlzIG5v dCBzcGVjaWZpZWQsIGEgc2NyaXB0IGNvbnRhaW5pbmcgdGhlIFNRTAorICAgY29tbWFuZHMgbmVj ZXNzYXJ5IHRvIHJlYnVpbGQgdGhlIGRhdGFiYXNlIG9yIGNsdXN0ZXIgaXMgY3JlYXRlZCBhbmQg d3JpdHRlbgogICAgdG8gYSBmaWxlIG9yIHN0YW5kYXJkIG91dHB1dC4gIFRoaXMgc2NyaXB0IG91 dHB1dCBpcyBlcXVpdmFsZW50IHRvCi0gICB0aGUgcGxhaW4gdGV4dCBvdXRwdXQgZm9ybWF0IG9m IDxhcHBsaWNhdGlvbj5wZ19kdW1wPC9hcHBsaWNhdGlvbj4uCisgICB0aGUgcGxhaW4gdGV4dCBv dXRwdXQgZm9ybWF0IG9mIDxhcHBsaWNhdGlvbj5wZ19kdW1wPC9hcHBsaWNhdGlvbj4gb3IKKyAg IDxhcHBsaWNhdGlvbj5wZ19kdW1wYWxsPC9hcHBsaWNhdGlvbj4uCisKICAgIFNvbWUgb2YgdGhl IG9wdGlvbnMgY29udHJvbGxpbmcgdGhlIG91dHB1dCBhcmUgdGhlcmVmb3JlIGFuYWxvZ291cyB0 bwogICAgPGFwcGxpY2F0aW9uPnBnX2R1bXA8L2FwcGxpY2F0aW9uPiBvcHRpb25zLgogICA8L3Bh cmE+CkBAIC0xNDAsNiArMTQ5LDggQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAgICAgICAg IGNvbW1hbmRzIHRoYXQgbWVudGlvbiB0aGlzIGRhdGFiYXNlLgogICAgICAgICBBY2Nlc3MgcHJp dmlsZWdlcyBmb3IgdGhlIGRhdGFiYXNlIGl0c2VsZiBhcmUgYWxzbyByZXN0b3JlZCwKICAgICAg ICAgdW5sZXNzIDxvcHRpb24+LS1uby1hY2w8L29wdGlvbj4gaXMgc3BlY2lmaWVkLgorICAgICAg ICA8b3B0aW9uPi0tY3JlYXRlPC9vcHRpb24+IGlzIHJlcXVpcmVkIHdoZW4gcmVzdG9yaW5nIG11 bHRpcGxlIGRhdGFiYXNlcworICAgICAgICBmcm9tIGFuIGFyY2hpdmUgY3JlYXRlZCBieSA8YXBw bGljYXRpb24+cGdfZHVtcGFsbDwvYXBwbGljYXRpb24+LgogICAgICAgIDwvcGFyYT4KIAogICAg ICAgIDxwYXJhPgpAQCAtMTY2LDYgKzE3NywyOCBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24K ICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5PgogCisgICAgIDx2YXJsaXN0 ZW50cnk+CisgICAgICA8dGVybT48b3B0aW9uPi0tZXhjbHVkZS1kYXRhYmFzZT08cmVwbGFjZWFi bGUgY2xhc3M9InBhcmFtZXRlciI+cGF0dGVybjwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJt PgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBEbyBub3QgcmVzdG9y ZSBkYXRhYmFzZXMgd2hvc2UgbmFtZSBtYXRjaGVzCisgICAgICAgIDxyZXBsYWNlYWJsZSBjbGFz cz0icGFyYW1ldGVyIj5wYXR0ZXJuPC9yZXBsYWNlYWJsZT4uCisgICAgICAgIE11bHRpcGxlIHBh dHRlcm5zIGNhbiBiZSBleGNsdWRlZCBieSB3cml0aW5nIG11bHRpcGxlCisgICAgICAgIDxvcHRp b24+LS1leGNsdWRlLWRhdGFiYXNlPC9vcHRpb24+IHN3aXRjaGVzLiAgVGhlCisgICAgICAgIDxy ZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5wYXR0ZXJuPC9yZXBsYWNlYWJsZT4gcGFyYW1l dGVyIGlzCisgICAgICAgIGludGVycHJldGVkIGFzIGEgcGF0dGVybiBhY2NvcmRpbmcgdG8gdGhl IHNhbWUgcnVsZXMgdXNlZCBieQorICAgICAgICA8YXBwbGljYXRpb24+cHNxbDwvYXBwbGljYXRp b24+J3MgPGxpdGVyYWw+XGQ8L2xpdGVyYWw+CisgICAgICAgIGNvbW1hbmRzIChzZWUgPHhyZWYg bGlua2VuZD0iYXBwLXBzcWwtcGF0dGVybnMiLz4pLAorICAgICAgICBzbyBtdWx0aXBsZSBkYXRh YmFzZXMgY2FuIGFsc28gYmUgZXhjbHVkZWQgYnkgd3JpdGluZyB3aWxkY2FyZAorICAgICAgICBj aGFyYWN0ZXJzIGluIHRoZSBwYXR0ZXJuLiAgV2hlbiB1c2luZyB3aWxkY2FyZHMsIGJlIGNhcmVm dWwgdG8KKyAgICAgICAgcXVvdGUgdGhlIHBhdHRlcm4gaWYgbmVlZGVkIHRvIHByZXZlbnQgc2hl bGwgd2lsZGNhcmQgZXhwYW5zaW9uLgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAg ICAgICAgVGhpcyBvcHRpb24gaXMgb25seSByZWxldmFudCB3aGVuIHJlc3RvcmluZyBmcm9tIGFu IGFyY2hpdmUgbWFkZSB1c2luZyA8YXBwbGljYXRpb24+cGdfZHVtcGFsbDwvYXBwbGljYXRpb24+ LgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5 PgorCiAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICA8dGVybT48b3B0aW9uPi1lPC9vcHRpb24+ PC90ZXJtPgogICAgICAgPHRlcm0+PG9wdGlvbj4tLWV4aXQtb24tZXJyb3I8L29wdGlvbj48L3Rl cm0+CkBAIC0zMTUsNiArMzQ4LDE5IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogICAgICAg PC9saXN0aXRlbT4KICAgICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgICAgPHZhcmxpc3RlbnRyeT4K KyAgICAgIDx0ZXJtPjxvcHRpb24+LWc8L29wdGlvbj48L3Rlcm0+CisgICAgICA8dGVybT48b3B0 aW9uPi0tZ2xvYmFscy1vbmx5PC9vcHRpb24+PC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAg ICAgIDxwYXJhPgorICAgICAgICBSZXN0b3JlIG9ubHkgZ2xvYmFsIG9iamVjdHMgKHJvbGVzIGFu ZCB0YWJsZXNwYWNlcyksIG5vIGRhdGFiYXNlcy4KKyAgICAgICA8L3BhcmE+CisgICAgICAgPHBh cmE+CisgICAgICAgIFRoaXMgb3B0aW9uIGlzIG9ubHkgcmVsZXZhbnQgd2hlbiByZXN0b3Jpbmcg ZnJvbSBhbiBhcmNoaXZlIG1hZGUgdXNpbmcgPGFwcGxpY2F0aW9uPnBnX2R1bXBhbGw8L2FwcGxp Y2F0aW9uPi4KKyAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxp c3RlbnRyeT4KKwogICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgPHRlcm0+PG9wdGlvbj4tSSA8 cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+aW5kZXg8L3JlcGxhY2VhYmxlPjwvb3B0aW9u PjwvdGVybT4KICAgICAgIDx0ZXJtPjxvcHRpb24+LS1pbmRleD08cmVwbGFjZWFibGUgY2xhc3M9 InBhcmFtZXRlciI+aW5kZXg8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KZGlmZiAtLWdp dCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXAuaCBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNr dXAuaAppbmRleCA0OWJjMWVlNzFlZi4uMTdkNmUwNmVjMjUgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4v cGdfZHVtcC9wZ19iYWNrdXAuaAorKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwLmgKQEAg LTMxMSw3ICszMTEsNyBAQCBleHRlcm4gdm9pZCBTZXRBcmNoaXZlT3B0aW9ucyhBcmNoaXZlICpB SCwgRHVtcE9wdGlvbnMgKmRvcHQsIFJlc3RvcmVPcHRpb25zICpybwogCiBleHRlcm4gdm9pZCBQ cm9jZXNzQXJjaGl2ZVJlc3RvcmVPcHRpb25zKEFyY2hpdmUgKkFIWCk7CiAKLWV4dGVybiB2b2lk IFJlc3RvcmVBcmNoaXZlKEFyY2hpdmUgKkFIWCk7CitleHRlcm4gdm9pZCBSZXN0b3JlQXJjaGl2 ZShBcmNoaXZlICpBSFgsIGJvb2wgYXBwZW5kX2RhdGEpOwogCiAvKiBPcGVuIGFuIGV4aXN0aW5n IGFyY2hpdmUgKi8KIGV4dGVybiBBcmNoaXZlICpPcGVuQXJjaGl2ZShjb25zdCBjaGFyICpGaWxl U3BlYywgY29uc3QgQXJjaGl2ZUZvcm1hdCBmbXQpOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19k dW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNo aXZlci5jCmluZGV4IDNmNTlmOGY5ZDlkLi41NGViNDcyODkyOCAxMDA2NDQKLS0tIGEvc3JjL2Jp bi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19i YWNrdXBfYXJjaGl2ZXIuYwpAQCAtODUsNyArODUsNyBAQCBzdGF0aWMgaW50CVJlc3RvcmluZ1Rv REIoQXJjaGl2ZUhhbmRsZSAqQUgpOwogc3RhdGljIHZvaWQgZHVtcF9sb19idWYoQXJjaGl2ZUhh bmRsZSAqQUgpOwogc3RhdGljIHZvaWQgZHVtcFRpbWVzdGFtcChBcmNoaXZlSGFuZGxlICpBSCwg Y29uc3QgY2hhciAqbXNnLCB0aW1lX3QgdGltKTsKIHN0YXRpYyB2b2lkIFNldE91dHB1dChBcmNo aXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqZmlsZW5hbWUsCi0JCQkJCSAgY29uc3QgcGdfY29t cHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKTsKKwkJCQkJICBjb25zdCBwZ19j b21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMsIGJvb2wgYXBwZW5kX2RhdGEp Owogc3RhdGljIENvbXByZXNzRmlsZUhhbmRsZSAqU2F2ZU91dHB1dChBcmNoaXZlSGFuZGxlICpB SCk7CiBzdGF0aWMgdm9pZCBSZXN0b3JlT3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVz c0ZpbGVIYW5kbGUgKnNhdmVkT3V0cHV0KTsKIApAQCAtMzM4LDkgKzMzOCwxNCBAQCBQcm9jZXNz QXJjaGl2ZVJlc3RvcmVPcHRpb25zKEFyY2hpdmUgKkFIWCkKIAkJU3RyaWN0TmFtZXNDaGVjayhy b3B0KTsKIH0KIAotLyogUHVibGljICovCisvKgorICogUmVzdG9yZUFyY2hpdmUKKyAqCisgKiBJ ZiBhcHBlbmRfZGF0YSBpcyBzZXQsIHRoZW4gYXBwZW5kIGRhdGEgaW50byBmaWxlIGFzIHdlIGFy ZSByZXN0b3JpbmcgZHVtcAorICogb2YgbXVsdGlwbGUgZGF0YWJhc2VzIHdoaWNoIHdhcyB0YWtl biBieSBwZ19kdW1wYWxsLgorICovCiB2b2lkCi1SZXN0b3JlQXJjaGl2ZShBcmNoaXZlICpBSFgp CitSZXN0b3JlQXJjaGl2ZShBcmNoaXZlICpBSFgsIGJvb2wgYXBwZW5kX2RhdGEpCiB7CiAJQXJj aGl2ZUhhbmRsZSAqQUggPSAoQXJjaGl2ZUhhbmRsZSAqKSBBSFg7CiAJUmVzdG9yZU9wdGlvbnMg KnJvcHQgPSBBSC0+cHVibGljLnJvcHQ7CkBAIC00NTcsNyArNDYyLDcgQEAgUmVzdG9yZUFyY2hp dmUoQXJjaGl2ZSAqQUhYKQogCSAqLwogCXNhdiA9IFNhdmVPdXRwdXQoQUgpOwogCWlmIChyb3B0 LT5maWxlbmFtZSB8fCByb3B0LT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSAhPSBQR19DT01Q UkVTU0lPTl9OT05FKQotCQlTZXRPdXRwdXQoQUgsIHJvcHQtPmZpbGVuYW1lLCByb3B0LT5jb21w cmVzc2lvbl9zcGVjKTsKKwkJU2V0T3V0cHV0KEFILCByb3B0LT5maWxlbmFtZSwgcm9wdC0+Y29t cHJlc3Npb25fc3BlYywgYXBwZW5kX2RhdGEpOwogCiAJYWhwcmludGYoQUgsICItLVxuLS0gUG9z dGdyZVNRTCBkYXRhYmFzZSBkdW1wXG4tLVxuXG4iKTsKIApAQCAtMTI5Myw3ICsxMjk4LDcgQEAg UHJpbnRUT0NTdW1tYXJ5KEFyY2hpdmUgKkFIWCkKIAogCXNhdiA9IFNhdmVPdXRwdXQoQUgpOwog CWlmIChyb3B0LT5maWxlbmFtZSkKLQkJU2V0T3V0cHV0KEFILCByb3B0LT5maWxlbmFtZSwgb3V0 X2NvbXByZXNzaW9uX3NwZWMpOworCQlTZXRPdXRwdXQoQUgsIHJvcHQtPmZpbGVuYW1lLCBvdXRf Y29tcHJlc3Npb25fc3BlYywgZmFsc2UpOwogCiAJaWYgKHN0cmZ0aW1lKHN0YW1wX3N0ciwgc2l6 ZW9mKHN0YW1wX3N0ciksIFBHRFVNUF9TVFJGVElNRV9GTVQsCiAJCQkJIGxvY2FsdGltZSgmQUgt PmNyZWF0ZURhdGUpKSA9PSAwKQpAQCAtMTY3Miw3ICsxNjc3LDggQEAgYXJjaHByaW50ZihBcmNo aXZlICpBSCwgY29uc3QgY2hhciAqZm10LC4uLikKIAogc3RhdGljIHZvaWQKIFNldE91dHB1dChB cmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqZmlsZW5hbWUsCi0JCSAgY29uc3QgcGdfY29t cHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKQorCQkgIGNvbnN0IHBnX2NvbXBy ZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYywKKwkJICBib29sIGFwcGVuZF9kYXRh KQogewogCUNvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIOwogCWNvbnN0IGNoYXIgKm1vZGU7CkBAIC0x NjkyLDcgKzE2OTgsNyBAQCBTZXRPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIg KmZpbGVuYW1lLAogCWVsc2UKIAkJZm4gPSBmaWxlbm8oc3Rkb3V0KTsKIAotCWlmIChBSC0+bW9k ZSA9PSBhcmNoTW9kZUFwcGVuZCkKKwlpZiAoYXBwZW5kX2RhdGEgfHwgQUgtPm1vZGUgPT0gYXJj aE1vZGVBcHBlbmQpCiAJCW1vZGUgPSBQR19CSU5BUllfQTsKIAllbHNlCiAJCW1vZGUgPSBQR19C SU5BUllfVzsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdGFyLmMgYi9z cmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3Rhci5jCmluZGV4IGI1YmEzYjQ2ZGQ5Li5kOTRkMGRl MmE1ZCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF90YXIuYworKysgYi9z cmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3Rhci5jCkBAIC04MjYsNyArODI2LDcgQEAgX0Nsb3Nl QXJjaGl2ZShBcmNoaXZlSGFuZGxlICpBSCkKIAkJc2F2VmVyYm9zZSA9IEFILT5wdWJsaWMudmVy Ym9zZTsKIAkJQUgtPnB1YmxpYy52ZXJib3NlID0gMDsKIAotCQlSZXN0b3JlQXJjaGl2ZSgoQXJj aGl2ZSAqKSBBSCk7CisJCVJlc3RvcmVBcmNoaXZlKChBcmNoaXZlICopIEFILCBmYWxzZSk7CiAK IAkJU2V0QXJjaGl2ZU9wdGlvbnMoKEFyY2hpdmUgKikgQUgsIHNhdkRvcHQsIHNhdlJvcHQpOwog CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jIGIvc3JjL2Jpbi9wZ19kdW1w L3BnX2R1bXAuYwppbmRleCBmODRlYTZlY2M0OC4uODMyYTZhZjcwOTEgMTAwNjQ0Ci0tLSBhL3Ny Yy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwpA QCAtMTIxOSw3ICsxMjE5LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJICogcmln aHQgbm93LgogCSAqLwogCWlmIChwbGFpblRleHQpCi0JCVJlc3RvcmVBcmNoaXZlKGZvdXQpOwor CQlSZXN0b3JlQXJjaGl2ZShmb3V0LCBmYWxzZSk7CiAKIAlDbG9zZUFyY2hpdmUoZm91dCk7CiAK ZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wYWxsLmMgYi9zcmMvYmluL3BnX2R1 bXAvcGdfZHVtcGFsbC5jCmluZGV4IDU3M2E4YjYxYTQ1Li45ZDA4YzZjYTBlNiAxMDA2NDQKLS0t IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBhbGwuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdf ZHVtcGFsbC5jCkBAIC0xNSw2ICsxNSw3IEBACiAKICNpbmNsdWRlICJwb3N0Z3Jlc19mZS5oIgog CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNpbmNsdWRlIDx0aW1lLmg+CiAjaW5jbHVkZSA8dW5p c3RkLmg+CiAKQEAgLTY0LDkgKzY1LDEwIEBAIHN0YXRpYyB2b2lkIGRyb3BUYWJsZXNwYWNlcyhQ R2Nvbm4gKmNvbm4pOwogc3RhdGljIHZvaWQgZHVtcFRhYmxlc3BhY2VzKFBHY29ubiAqY29ubik7 CiBzdGF0aWMgdm9pZCBkcm9wREJzKFBHY29ubiAqY29ubik7CiBzdGF0aWMgdm9pZCBkdW1wVXNl ckNvbmZpZyhQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnVzZXJuYW1lKTsKLXN0YXRpYyB2b2lk IGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uKTsKK3N0YXRpYyB2b2lkIGR1bXBEYXRhYmFzZXMo UEdjb25uICpjb25uLCBBcmNoaXZlRm9ybWF0IGFyY2hEdW1wRm9ybWF0KTsKIHN0YXRpYyB2b2lk IGR1bXBUaW1lc3RhbXAoY29uc3QgY2hhciAqbXNnKTsKLXN0YXRpYyBpbnQJcnVuUGdEdW1wKGNv bnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqY3JlYXRlX29wdHMpOworc3RhdGljIGludAly dW5QZ0R1bXAoY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpjcmVhdGVfb3B0cywKKwkJ CQkJICBjaGFyICpkYmZpbGUsIEFyY2hpdmVGb3JtYXQgYXJjaER1bXBGb3JtYXQpOwogc3RhdGlj IHZvaWQgYnVpbGRTaFNlY0xhYmVscyhQR2Nvbm4gKmNvbm4sCiAJCQkJCQkJIGNvbnN0IGNoYXIg KmNhdGFsb2dfbmFtZSwgT2lkIG9iamVjdElkLAogCQkJCQkJCSBjb25zdCBjaGFyICpvYmp0eXBl LCBjb25zdCBjaGFyICpvYmpuYW1lLApAQCAtNzUsNiArNzcsOCBAQCBzdGF0aWMgdm9pZCBleGVj dXRlQ29tbWFuZChQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnF1ZXJ5KTsKIHN0YXRpYyB2b2lk IGV4cGFuZF9kYm5hbWVfcGF0dGVybnMoUEdjb25uICpjb25uLCBTaW1wbGVTdHJpbmdMaXN0ICpw YXR0ZXJucywKIAkJCQkJCQkJICAgU2ltcGxlU3RyaW5nTGlzdCAqbmFtZXMpOwogc3RhdGljIHZv aWQgcmVhZF9kdW1wYWxsX2ZpbHRlcnMoY29uc3QgY2hhciAqZmlsZW5hbWUsIFNpbXBsZVN0cmlu Z0xpc3QgKnBhdHRlcm4pOworc3RhdGljIHZvaWQgY3JlYXRlX29yX29wZW5fZGlyKGNvbnN0IGNo YXIgKmRpcm5hbWUpOworc3RhdGljIEFyY2hpdmVGb3JtYXQgcGFyc2VEdW1wRm9ybWF0KGNvbnN0 IGNoYXIgKmZvcm1hdCk7CiAKIHN0YXRpYyBjaGFyIHBnX2R1bXBfYmluW01BWFBHUEFUSF07CiBz dGF0aWMgUFFFeHBCdWZmZXIgcGdkdW1wb3B0czsKQEAgLTE0Niw2ICsxNTAsNyBAQCBtYWluKGlu dCBhcmdjLCBjaGFyICphcmd2W10pCiAJCXsicGFzc3dvcmQiLCBub19hcmd1bWVudCwgTlVMTCwg J1cnfSwKIAkJeyJuby1wcml2aWxlZ2VzIiwgbm9fYXJndW1lbnQsIE5VTEwsICd4J30sCiAJCXsi bm8tYWNsIiwgbm9fYXJndW1lbnQsIE5VTEwsICd4J30sCisJCXsiZm9ybWF0IiwgcmVxdWlyZWRf YXJndW1lbnQsIE5VTEwsICdGJ30sCiAKIAkJLyoKIAkJICogdGhlIGZvbGxvd2luZyBvcHRpb25z IGRvbid0IGhhdmUgYW4gZXF1aXZhbGVudCBzaG9ydCBvcHRpb24gbGV0dGVyCkBAIC0xOTUsNiAr MjAwLDggQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCWNoYXIJICAgKnBnZGIgPSBO VUxMOwogCWNoYXIJICAgKnVzZV9yb2xlID0gTlVMTDsKIAljb25zdCBjaGFyICpkdW1wZW5jb2Rp bmcgPSBOVUxMOworCUFyY2hpdmVGb3JtYXQgYXJjaER1bXBGb3JtYXQgPSBhcmNoTnVsbDsKKwlj b25zdCBjaGFyICpmb3JtYXROYW1lID0gInAiOwogCXRyaXZhbHVlCXByb21wdF9wYXNzd29yZCA9 IFRSSV9ERUZBVUxUOwogCWJvb2wJCWRhdGFfb25seSA9IGZhbHNlOwogCWJvb2wJCWdsb2JhbHNf b25seSA9IGZhbHNlOwpAQCAtMjQ0LDcgKzI1MSw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFy Z3ZbXSkKIAogCXBnZHVtcG9wdHMgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOwogCi0Jd2hpbGUgKChj ID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImFjZDpFOmY6Z2g6bDpPcDpyc1M6dFU6dndXeCIs IGxvbmdfb3B0aW9ucywgJm9wdGluZGV4KSkgIT0gLTEpCisJd2hpbGUgKChjID0gZ2V0b3B0X2xv bmcoYXJnYywgYXJndiwgImFjZDpFOmY6RjpnaDpsOk9wOnJzUzp0VTp2d1d4IiwgbG9uZ19vcHRp b25zLCAmb3B0aW5kZXgpKSAhPSAtMSkKIAl7CiAJCXN3aXRjaCAoYykKIAkJewpAQCAtMjcyLDcg KzI3OSw5IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJCQlhcHBlbmRQUUV4cEJ1 ZmZlclN0cihwZ2R1bXBvcHRzLCAiIC1mICIpOwogCQkJCWFwcGVuZFNoZWxsU3RyaW5nKHBnZHVt cG9wdHMsIGZpbGVuYW1lKTsKIAkJCQlicmVhazsKLQorCQkJY2FzZSAnRic6CisJCQkJZm9ybWF0 TmFtZSA9IHBnX3N0cmR1cChvcHRhcmcpOworCQkJCWJyZWFrOwogCQkJY2FzZSAnZyc6CiAJCQkJ Z2xvYmFsc19vbmx5ID0gdHJ1ZTsKIAkJCQlicmVhazsKQEAgLTQyMSw2ICs0MzAsMjEgQEAgbWFp bihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQlleGl0X25pY2VseSgxKTsKIAl9CiAKKwkvKiBH ZXQgZm9ybWF0IGZvciBkdW1wLiAqLworCWFyY2hEdW1wRm9ybWF0ID0gcGFyc2VEdW1wRm9ybWF0 KGZvcm1hdE5hbWUpOworCisJLyoKKwkgKiBJZiBhIG5vbi1wbGFpbiBmb3JtYXQgaXMgc3BlY2lm aWVkLCBhIGZpbGUgbmFtZSBpcyBhbHNvIHJlcXVpcmVkIGFzIHRoZQorCSAqIHBhdGggdG8gdGhl IG1haW4gZGlyZWN0b3J5LgorCSAqLworCWlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCAm JgorCQkoIWZpbGVuYW1lIHx8IHN0cmNtcChmaWxlbmFtZSwgIiIpID09IDApKQorCXsKKwkJcGdf bG9nX2Vycm9yKCJvcHRpb24gLUYvLS1mb3JtYXQ9ZHxjfHQgcmVxdWlyZXMgb3B0aW9uIC1mLy0t ZmlsZSIpOworCQlwZ19sb2dfZXJyb3JfaGludCgiVHJ5IFwiJXMgLS1oZWxwXCIgZm9yIG1vcmUg aW5mb3JtYXRpb24uIiwgcHJvZ25hbWUpOworCQlleGl0X25pY2VseSgxKTsKKwl9CisKIAkvKgog CSAqIElmIHBhc3N3b3JkIHZhbHVlcyBhcmUgbm90IHJlcXVpcmVkIGluIHRoZSBkdW1wLCBzd2l0 Y2ggdG8gdXNpbmcKIAkgKiBwZ19yb2xlcyB3aGljaCBpcyBlcXVhbGx5IHVzZWZ1bCwganVzdCBt b3JlIGxpa2VseSB0byBoYXZlIHVucmVzdHJpY3RlZApAQCAtNDgzLDYgKzUwNywzMyBAQCBtYWlu KGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJaWYgKHN0YXRpc3RpY3Nfb25seSkKIAkJYXBwZW5k UFFFeHBCdWZmZXJTdHIocGdkdW1wb3B0cywgIiAtLXN0YXRpc3RpY3Mtb25seSIpOwogCisJLyoK KwkgKiBPcGVuIHRoZSBvdXRwdXQgZmlsZSBpZiByZXF1aXJlZCwgb3RoZXJ3aXNlIHVzZSBzdGRv dXQuICBJZiByZXF1aXJlZCwKKwkgKiB0aGVuIGNyZWF0ZSBuZXcgZGlyZWN0b3J5IGFuZCBnbG9i YWwuZGF0IGZpbGUuCisJICovCisJaWYgKGFyY2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsKQorCXsK KwkJY2hhcgkJZ2xvYmFsX3BhdGhbTUFYUEdQQVRIXTsKKworCQkvKiBDcmVhdGUgbmV3IGRpcmVj dG9yeSBvciBhY2NlcHQgdGhlIGVtcHR5IGV4aXN0aW5nIGRpcmVjdG9yeS4gKi8KKwkJY3JlYXRl X29yX29wZW5fZGlyKGZpbGVuYW1lKTsKKworCQlzbnByaW50ZihnbG9iYWxfcGF0aCwgTUFYUEdQ QVRILCAiJXMvZ2xvYmFsLmRhdCIsIGZpbGVuYW1lKTsKKworCQlPUEYgPSBmb3BlbihnbG9iYWxf cGF0aCwgUEdfQklOQVJZX1cpOworCQlpZiAoIU9QRikKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qg b3BlbiBnbG9iYWwuZGF0IGZpbGU6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwl9CisJZWxzZSBp ZiAoZmlsZW5hbWUpCisJeworCQlPUEYgPSBmb3BlbihmaWxlbmFtZSwgUEdfQklOQVJZX1cpOwor CQlpZiAoIU9QRikKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBvdXRwdXQgZmlsZSBcIiVz XCI6ICVtIiwKKwkJCQkJIGZpbGVuYW1lKTsKKwl9CisJZWxzZQorCQlPUEYgPSBzdGRvdXQ7CisK IAkvKgogCSAqIElmIHRoZXJlIHdhcyBhIGRhdGFiYXNlIHNwZWNpZmllZCBvbiB0aGUgY29tbWFu ZCBsaW5lLCB1c2UgdGhhdCwKIAkgKiBvdGhlcndpc2UgdHJ5IHRvIGNvbm5lY3QgdG8gZGF0YWJh c2UgInBvc3RncmVzIiwgYW5kIGZhaWxpbmcgdGhhdApAQCAtNTIyLDE5ICs1NzMsNiBAQCBtYWlu KGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJZXhwYW5kX2RibmFtZV9wYXR0ZXJucyhjb25uLCAm ZGF0YWJhc2VfZXhjbHVkZV9wYXR0ZXJucywKIAkJCQkJCSAgICZkYXRhYmFzZV9leGNsdWRlX25h bWVzKTsKIAotCS8qCi0JICogT3BlbiB0aGUgb3V0cHV0IGZpbGUgaWYgcmVxdWlyZWQsIG90aGVy d2lzZSB1c2Ugc3Rkb3V0Ci0JICovCi0JaWYgKGZpbGVuYW1lKQotCXsKLQkJT1BGID0gZm9wZW4o ZmlsZW5hbWUsIFBHX0JJTkFSWV9XKTsKLQkJaWYgKCFPUEYpCi0JCQlwZ19mYXRhbCgiY291bGQg bm90IG9wZW4gb3V0cHV0IGZpbGUgXCIlc1wiOiAlbSIsCi0JCQkJCSBmaWxlbmFtZSk7Ci0JfQot CWVsc2UKLQkJT1BGID0gc3Rkb3V0OwotCiAJLyoKIAkgKiBTZXQgdGhlIGNsaWVudCBlbmNvZGlu ZyBpZiByZXF1ZXN0ZWQuCiAJICovCkBAIC02MzQsNyArNjcyLDcgQEAgbWFpbihpbnQgYXJnYywg Y2hhciAqYXJndltdKQogCX0KIAogCWlmICghZ2xvYmFsc19vbmx5ICYmICFyb2xlc19vbmx5ICYm ICF0YWJsZXNwYWNlc19vbmx5KQotCQlkdW1wRGF0YWJhc2VzKGNvbm4pOworCQlkdW1wRGF0YWJh c2VzKGNvbm4sIGFyY2hEdW1wRm9ybWF0KTsKIAogCVBRZmluaXNoKGNvbm4pOwogCkBAIC02NDcs NyArNjg1LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQlmY2xvc2UoT1BGKTsK IAogCQkvKiBzeW5jIHRoZSByZXN1bHRpbmcgZmlsZSwgZXJyb3JzIGFyZSBub3QgZmF0YWwgKi8K LQkJaWYgKGRvc3luYykKKwkJaWYgKGRvc3luYyAmJiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51 bGwpKQogCQkJKHZvaWQpIGZzeW5jX2ZuYW1lKGZpbGVuYW1lLCBmYWxzZSk7CiAJfQogCkBAIC02 NTgsMTIgKzY5NiwxNCBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiBzdGF0aWMgdm9p ZAogaGVscCh2b2lkKQogewotCXByaW50ZihfKCIlcyBleHRyYWN0cyBhIFBvc3RncmVTUUwgZGF0 YWJhc2UgY2x1c3RlciBpbnRvIGFuIFNRTCBzY3JpcHQgZmlsZS5cblxuIiksIHByb2duYW1lKTsK KwlwcmludGYoXygiJXMgZXh0cmFjdHMgYSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNsdXN0ZXIgYmFz ZWQgb24gc3BlY2lmaWVkIGR1bXAgZm9ybWF0LlxuXG4iKSwgcHJvZ25hbWUpOwogCXByaW50Zihf KCJVc2FnZTpcbiIpKTsKIAlwcmludGYoXygiICAlcyBbT1BUSU9OXS4uLlxuIiksIHByb2duYW1l KTsKIAogCXByaW50ZihfKCJcbkdlbmVyYWwgb3B0aW9uczpcbiIpKTsKIAlwcmludGYoXygiICAt ZiwgLS1maWxlPUZJTEVOQU1FICAgICAgICAgIG91dHB1dCBmaWxlIG5hbWVcbiIpKTsKKwlwcmlu dGYoXygiICAtRiwgLS1mb3JtYXQ9Y3xkfHR8cCAgICAgICAgIG91dHB1dCBmaWxlIGZvcm1hdCAo Y3VzdG9tLCBkaXJlY3RvcnksIHRhcixcbiIKKwkJCSAiICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHBsYWluIHRleHQgKGRlZmF1bHQpKVxuIikpOwogCXByaW50ZihfKCIgIC12LCAtLXZl cmJvc2UgICAgICAgICAgICAgICAgdmVyYm9zZSBtb2RlXG4iKSk7CiAJcHJpbnRmKF8oIiAgLVYs IC0tdmVyc2lvbiAgICAgICAgICAgICAgICBvdXRwdXQgdmVyc2lvbiBpbmZvcm1hdGlvbiwgdGhl biBleGl0XG4iKSk7CiAJcHJpbnRmKF8oIiAgLS1sb2NrLXdhaXQtdGltZW91dD1USU1FT1VUICBm YWlsIGFmdGVyIHdhaXRpbmcgVElNRU9VVCBmb3IgYSB0YWJsZSBsb2NrXG4iKSk7CkBAIC05Njks OSArMTAwOSw2IEBAIGR1bXBSb2xlcyhQR2Nvbm4gKmNvbm4pCiAJICogV2UgZG8gaXQgdGhpcyB3 YXkgYmVjYXVzZSBjb25maWcgc2V0dGluZ3MgZm9yIHJvbGVzIGNvdWxkIG1lbnRpb24gdGhlCiAJ ICogbmFtZXMgb2Ygb3RoZXIgcm9sZXMuCiAJICovCi0JaWYgKFBRbnR1cGxlcyhyZXMpID4gMCkK LQkJZnByaW50ZihPUEYsICJcbi0tXG4tLSBVc2VyIENvbmZpZ3VyYXRpb25zXG4tLVxuIik7Ci0K IAlmb3IgKGkgPSAwOyBpIDwgUFFudHVwbGVzKHJlcyk7IGkrKykKIAkJZHVtcFVzZXJDb25maWco Y29ubiwgUFFnZXR2YWx1ZShyZXMsIGksIGlfcm9sbmFtZSkpOwogCkBAIC0xNDg1LDYgKzE1MjIs NyBAQCBkdW1wVXNlckNvbmZpZyhQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnVzZXJuYW1lKQog ewogCVBRRXhwQnVmZmVyIGJ1ZiA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CiAJUEdyZXN1bHQgICAq cmVzOworCXN0YXRpYyBib29sIGhlYWRlcl9kb25lID0gZmFsc2U7CiAKIAlwcmludGZQUUV4cEJ1 ZmZlcihidWYsICJTRUxFQ1QgdW5uZXN0KHNldGNvbmZpZykgRlJPTSBwZ19kYl9yb2xlX3NldHRp bmcgIgogCQkJCQkgICJXSEVSRSBzZXRkYXRhYmFzZSA9IDAgQU5EIHNldHJvbGUgPSAiCkBAIC0x NDk2LDcgKzE1MzQsMTMgQEAgZHVtcFVzZXJDb25maWcoUEdjb25uICpjb25uLCBjb25zdCBjaGFy ICp1c2VybmFtZSkKIAlyZXMgPSBleGVjdXRlUXVlcnkoY29ubiwgYnVmLT5kYXRhKTsKIAogCWlm IChQUW50dXBsZXMocmVzKSA+IDApCisJeworCQlpZiAoIWhlYWRlcl9kb25lKQorCQkJZnByaW50 ZihPUEYsICJcbi0tXG4tLSBVc2VyIENvbmZpZ3VyYXRpb25zXG4tLVxuIik7CisJCWhlYWRlcl9k b25lID0gdHJ1ZTsKKwogCQlmcHJpbnRmKE9QRiwgIlxuLS1cbi0tIFVzZXIgQ29uZmlnIFwiJXNc IlxuLS1cblxuIiwgdXNlcm5hbWUpOworCX0KIAogCWZvciAoaW50IGkgPSAwOyBpIDwgUFFudHVw bGVzKHJlcyk7IGkrKykKIAl7CkBAIC0xNTcwLDEwICsxNjE0LDEzIEBAIGV4cGFuZF9kYm5hbWVf cGF0dGVybnMoUEdjb25uICpjb25uLAogICogRHVtcCBjb250ZW50cyBvZiBkYXRhYmFzZXMuCiAg Ki8KIHN0YXRpYyB2b2lkCi1kdW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubikKK2R1bXBEYXRhYmFz ZXMoUEdjb25uICpjb25uLCBBcmNoaXZlRm9ybWF0IGFyY2hEdW1wRm9ybWF0KQogewogCVBHcmVz dWx0ICAgKnJlczsKIAlpbnQJCQlpOworCWNoYXIJCWRiX3N1YmRpcltNQVhQR1BBVEhdOworCWNo YXIJCWRiZmlsZXBhdGhbTUFYUEdQQVRIXTsKKwlGSUxFCSAgICptYXBfZmlsZSA9IE5VTEw7CiAK IAkvKgogCSAqIFNraXAgZGF0YWJhc2VzIG1hcmtlZCBub3QgZGF0YWxsb3djb25uLCBzaW5jZSB3 ZSdkIGJlIHVuYWJsZSB0byBjb25uZWN0CkBAIC0xNTg3LDE4ICsxNjM0LDQyIEBAIGR1bXBEYXRh YmFzZXMoUEdjb25uICpjb25uKQogCSAqIGRvZXNuJ3QgaGF2ZSBzb21lIGZhaWx1cmUgbW9kZSB3 aXRoIC0tY2xlYW4uCiAJICovCiAJcmVzID0gZXhlY3V0ZVF1ZXJ5KGNvbm4sCi0JCQkJCSAgICJT RUxFQ1QgZGF0bmFtZSAiCisJCQkJCSAgICJTRUxFQ1QgZGF0bmFtZSwgb2lkICIKIAkJCQkJICAg IkZST00gcGdfZGF0YWJhc2UgZCAiCiAJCQkJCSAgICJXSEVSRSBkYXRhbGxvd2Nvbm4gQU5EIGRh dGNvbm5saW1pdCAhPSAtMiAiCiAJCQkJCSAgICJPUkRFUiBCWSAoZGF0bmFtZSA8PiAndGVtcGxh dGUxJyksIGRhdG5hbWUiKTsKIAotCWlmIChQUW50dXBsZXMocmVzKSA+IDApCisJaWYgKGFyY2hE dW1wRm9ybWF0ID09IGFyY2hOdWxsICYmIFBRbnR1cGxlcyhyZXMpID4gMCkKIAkJZnByaW50ZihP UEYsICItLVxuLS0gRGF0YWJhc2VzXG4tLVxuXG4iKTsKIAorCS8qCisJICogSWYgZGlyZWN0b3J5 L3Rhci9jdXN0b20gZm9ybWF0IGlzIHNwZWNpZmllZCwgY3JlYXRlIGEgc3ViZGlyZWN0b3J5CisJ ICogdW5kZXIgdGhlIG1haW4gZGlyZWN0b3J5IGFuZCBlYWNoIGRhdGFiYXNlIGR1bXAgZmlsZSBv ciBzdWJkaXJlY3RvcnkKKwkgKiB3aWxsIGJlIGNyZWF0ZWQgaW4gdGhhdCBzdWJkaXJlY3Rvcnkg YnkgcGdfZHVtcC4KKwkgKi8KKwlpZiAoYXJjaER1bXBGb3JtYXQgIT0gYXJjaE51bGwpCisJewor CQljaGFyCQltYXBfZmlsZV9wYXRoW01BWFBHUEFUSF07CisKKwkJc25wcmludGYoZGJfc3ViZGly LCBNQVhQR1BBVEgsICIlcy9kYXRhYmFzZXMiLCBmaWxlbmFtZSk7CisKKwkJLyogQ3JlYXRlIGEg c3ViZGlyZWN0b3J5IHdpdGggJ2RhdGFiYXNlcycgbmFtZSB1bmRlciBtYWluIGRpcmVjdG9yeS4g Ki8KKwkJaWYgKG1rZGlyKGRiX3N1YmRpciwgMDc1NSkgIT0gMCkKKwkJCXBnX2ZhdGFsKCJjb3Vs ZCBub3QgY3JlYXRlIHN1YmRpcmVjdG9yeSBcIiVzXCI6ICVtIiwgZGJfc3ViZGlyKTsKKworCQlz bnByaW50ZihtYXBfZmlsZV9wYXRoLCBNQVhQR1BBVEgsICIlcy9tYXAuZGF0IiwgZmlsZW5hbWUp OworCisJCS8qIENyZWF0ZSBhIG1hcCBmaWxlICh0byBzdG9yZSBkYm9pZCBhbmQgZGJuYW1lKSAq LworCQltYXBfZmlsZSA9IGZvcGVuKG1hcF9maWxlX3BhdGgsIFBHX0JJTkFSWV9XKTsKKwkJaWYg KCFtYXBfZmlsZSkKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBtYXAgZmlsZTogJXMiLCBz dHJlcnJvcihlcnJubykpOworCX0KKwogCWZvciAoaSA9IDA7IGkgPCBQUW50dXBsZXMocmVzKTsg aSsrKQogCXsKIAkJY2hhcgkgICAqZGJuYW1lID0gUFFnZXR2YWx1ZShyZXMsIGksIDApOwotCQlj b25zdCBjaGFyICpjcmVhdGVfb3B0czsKKwkJY2hhcgkgICAqb2lkID0gUFFnZXR2YWx1ZShyZXMs IGksIDEpOworCQljb25zdCBjaGFyICpjcmVhdGVfb3B0cyA9ICIiOwogCQlpbnQJCQlyZXQ7CiAK IAkJLyogU2tpcCB0ZW1wbGF0ZTAsIGV2ZW4gaWYgaXQncyBub3QgbWFya2VkICFkYXRhbGxvd2Nv bm4uICovCkBAIC0xNjEyLDkgKzE2ODMsMjcgQEAgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4p CiAJCQljb250aW51ZTsKIAkJfQogCisJCS8qCisJCSAqIElmIHRoaXMgaXMgbm90IGEgcGxhaW4g Zm9ybWF0IGR1bXAsIHRoZW4gYXBwZW5kIGRib2lkIGFuZCBkYm5hbWUgdG8KKwkJICogdGhlIG1h cC5kYXQgZmlsZS4KKwkJICovCisJCWlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKKwkJ eworCQkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hDdXN0b20pCisJCQkJc25wcmludGYoZGJm aWxlcGF0aCwgTUFYUEdQQVRILCAiXCIlc1wiL1wiJXNcIi5kbXAiLCBkYl9zdWJkaXIsIG9pZCk7 CisJCQllbHNlIGlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoVGFyKQorCQkJCXNucHJpbnRmKGRi ZmlsZXBhdGgsIE1BWFBHUEFUSCwgIlwiJXNcIi9cIiVzXCIudGFyIiwgZGJfc3ViZGlyLCBvaWQp OworCQkJZWxzZQorCQkJCXNucHJpbnRmKGRiZmlsZXBhdGgsIE1BWFBHUEFUSCwgIlwiJXNcIi9c IiVzXCIiLCBkYl9zdWJkaXIsIG9pZCk7CisKKwkJCS8qIFB1dCBvbmUgbGluZSBlbnRyeSBmb3Ig ZGJvaWQgYW5kIGRibmFtZSBpbiBtYXAgZmlsZS4gKi8KKwkJCWZwcmludGYobWFwX2ZpbGUsICIl cyAlc1xuIiwgb2lkLCBkYm5hbWUpOworCQl9CisKIAkJcGdfbG9nX2luZm8oImR1bXBpbmcgZGF0 YWJhc2UgXCIlc1wiIiwgZGJuYW1lKTsKIAotCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBEYXRhYmFz ZSBcIiVzXCIgZHVtcFxuLS1cblxuIiwgZGJuYW1lKTsKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09 IGFyY2hOdWxsKQorCQkJIGZwcmludGYoT1BGLCAiLS1cbi0tIERhdGFiYXNlIFwiJXNcIiBkdW1w XG4tLVxuXG4iLCBkYm5hbWUpOwogCiAJCS8qCiAJCSAqIFdlIGFzc3VtZSB0aGF0ICJ0ZW1wbGF0 ZTEiIGFuZCAicG9zdGdyZXMiIGFscmVhZHkgZXhpc3QgaW4gdGhlCkBAIC0xNjI4LDEyICsxNzE3 LDkgQEAgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4pCiAJCXsKIAkJCWlmIChvdXRwdXRfY2xl YW4pCiAJCQkJY3JlYXRlX29wdHMgPSAiLS1jbGVhbiAtLWNyZWF0ZSI7Ci0JCQllbHNlCi0JCQl7 Ci0JCQkJY3JlYXRlX29wdHMgPSAiIjsKLQkJCQkvKiBTaW5jZSBwZ19kdW1wIHdvbid0IGVtaXQg YSBcY29ubmVjdCBjb21tYW5kLCB3ZSBtdXN0ICovCisJCQkvKiBTaW5jZSBwZ19kdW1wIHdvbid0 IGVtaXQgYSBcY29ubmVjdCBjb21tYW5kLCB3ZSBtdXN0ICovCisJCQllbHNlIGlmIChhcmNoRHVt cEZvcm1hdCA9PSBhcmNoTnVsbCkKIAkJCQlmcHJpbnRmKE9QRiwgIlxcY29ubmVjdCAlc1xuXG4i LCBkYm5hbWUpOwotCQkJfQogCQl9CiAJCWVsc2UKIAkJCWNyZWF0ZV9vcHRzID0gIi0tY3JlYXRl IjsKQEAgLTE2NDEsMTkgKzE3MjcsMzAgQEAgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4pCiAJ CWlmIChmaWxlbmFtZSkKIAkJCWZjbG9zZShPUEYpOwogCi0JCXJldCA9IHJ1blBnRHVtcChkYm5h bWUsIGNyZWF0ZV9vcHRzKTsKKwkJcmV0ID0gcnVuUGdEdW1wKGRibmFtZSwgY3JlYXRlX29wdHMs IGRiZmlsZXBhdGgsIGFyY2hEdW1wRm9ybWF0KTsKIAkJaWYgKHJldCAhPSAwKQogCQkJcGdfZmF0 YWwoInBnX2R1bXAgZmFpbGVkIG9uIGRhdGFiYXNlIFwiJXNcIiwgZXhpdGluZyIsIGRibmFtZSk7 CiAKIAkJaWYgKGZpbGVuYW1lKQogCQl7Ci0JCQlPUEYgPSBmb3BlbihmaWxlbmFtZSwgUEdfQklO QVJZX0EpOworCQkJY2hhcgkJZ2xvYmFsX3BhdGhbTUFYUEdQQVRIXTsKKworCQkJaWYgKGFyY2hE dW1wRm9ybWF0ICE9IGFyY2hOdWxsKQorCQkJCXNucHJpbnRmKGdsb2JhbF9wYXRoLCBNQVhQR1BB VEgsICIlcy9nbG9iYWwuZGF0IiwgZmlsZW5hbWUpOworCQkJZWxzZQorCQkJCXNucHJpbnRmKGds b2JhbF9wYXRoLCBNQVhQR1BBVEgsICIlcyIsIGZpbGVuYW1lKTsKKworCQkJT1BGID0gZm9wZW4o Z2xvYmFsX3BhdGgsIFBHX0JJTkFSWV9BKTsKIAkJCWlmICghT1BGKQogCQkJCXBnX2ZhdGFsKCJj b3VsZCBub3QgcmUtb3BlbiB0aGUgb3V0cHV0IGZpbGUgXCIlc1wiOiAlbSIsCi0JCQkJCQkgZmls ZW5hbWUpOworCQkJCQkJIGdsb2JhbF9wYXRoKTsKIAkJfQogCX0KIAorCS8qIENsb3NlIG1hcCBm aWxlICovCisJaWYgKGFyY2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsKQorCQlmY2xvc2UobWFwX2Zp bGUpOworCiAJUFFjbGVhcihyZXMpOwogfQogCkBAIC0xNjYzLDcgKzE3NjAsOCBAQCBkdW1wRGF0 YWJhc2VzKFBHY29ubiAqY29ubikKICAqIFJ1biBwZ19kdW1wIG9uIGRibmFtZSwgd2l0aCBzcGVj aWZpZWQgb3B0aW9ucy4KICAqLwogc3RhdGljIGludAotcnVuUGdEdW1wKGNvbnN0IGNoYXIgKmRi bmFtZSwgY29uc3QgY2hhciAqY3JlYXRlX29wdHMpCitydW5QZ0R1bXAoY29uc3QgY2hhciAqZGJu YW1lLCBjb25zdCBjaGFyICpjcmVhdGVfb3B0cywgY2hhciAqZGJmaWxlLAorCQkgIEFyY2hpdmVG b3JtYXQgYXJjaER1bXBGb3JtYXQpCiB7CiAJUFFFeHBCdWZmZXJEYXRhIGNvbm5zdHJidWY7CiAJ UFFFeHBCdWZmZXJEYXRhIGNtZDsKQEAgLTE2NzIsMTcgKzE3NzAsMzYgQEAgcnVuUGdEdW1wKGNv bnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqY3JlYXRlX29wdHMpCiAJaW5pdFBRRXhwQnVm ZmVyKCZjb25uc3RyYnVmKTsKIAlpbml0UFFFeHBCdWZmZXIoJmNtZCk7CiAKLQlwcmludGZQUUV4 cEJ1ZmZlcigmY21kLCAiXCIlc1wiICVzICVzIiwgcGdfZHVtcF9iaW4sCi0JCQkJCSAgcGdkdW1w b3B0cy0+ZGF0YSwgY3JlYXRlX29wdHMpOwotCiAJLyoKLQkgKiBJZiB3ZSBoYXZlIGEgZmlsZW5h bWUsIHVzZSB0aGUgdW5kb2N1bWVudGVkIHBsYWluLWFwcGVuZCBwZ19kdW1wCi0JICogZm9ybWF0 LgorCSAqIElmIHRoaXMgaXMgbm90IGEgcGxhaW4gZm9ybWF0IGR1bXAsIHRoZW4gYXBwZW5kIGZp bGUgbmFtZSBhbmQgZHVtcAorCSAqIGZvcm1hdCB0byB0aGUgcGdfZHVtcCBjb21tYW5kIHRvIGdl dCBhcmNoaXZlIGR1bXAuCiAJICovCi0JaWYgKGZpbGVuYW1lKQotCQlhcHBlbmRQUUV4cEJ1ZmZl clN0cigmY21kLCAiIC1GYSAiKTsKKwlpZiAoYXJjaER1bXBGb3JtYXQgIT0gYXJjaE51bGwpCisJ eworCQlwcmludGZQUUV4cEJ1ZmZlcigmY21kLCAiXCIlc1wiIC1mICVzICVzIiwgcGdfZHVtcF9i aW4sCisJCQkJCQkgIGRiZmlsZSwgY3JlYXRlX29wdHMpOworCisJCWlmIChhcmNoRHVtcEZvcm1h dCA9PSBhcmNoRGlyZWN0b3J5KQorCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNtZCwgIiAgLS1m b3JtYXQ9ZGlyZWN0b3J5ICIpOworCQllbHNlIGlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoQ3Vz dG9tKQorCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNtZCwgIiAgLS1mb3JtYXQ9Y3VzdG9tICIp OworCQllbHNlIGlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoVGFyKQorCQkJYXBwZW5kUFFFeHBC dWZmZXJTdHIoJmNtZCwgIiAgLS1mb3JtYXQ9dGFyICIpOworCX0KIAllbHNlCi0JCWFwcGVuZFBR RXhwQnVmZmVyU3RyKCZjbWQsICIgLUZwICIpOworCXsKKwkJcHJpbnRmUFFFeHBCdWZmZXIoJmNt ZCwgIlwiJXNcIiAlcyAlcyIsIHBnX2R1bXBfYmluLAorCQkJCQkJICBwZ2R1bXBvcHRzLT5kYXRh LCBjcmVhdGVfb3B0cyk7CisKKwkJLyoKKwkJICogSWYgd2UgaGF2ZSBhIGZpbGVuYW1lLCB1c2Ug dGhlIHVuZG9jdW1lbnRlZCBwbGFpbi1hcHBlbmQgcGdfZHVtcAorCQkgKiBmb3JtYXQuCisJCSAq LworCQlpZiAoZmlsZW5hbWUpCisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiIC1GYSAi KTsKKwkJZWxzZQorCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNtZCwgIiAtRnAgIik7CisJfQog CiAJLyoKIAkgKiBBcHBlbmQgdGhlIGRhdGFiYXNlIG5hbWUgdG8gdGhlIGFscmVhZHktY29uc3Ry dWN0ZWQgc3RlbSBvZiBjb25uZWN0aW9uCkBAIC0xODI3LDMgKzE5NDQsOTEgQEAgcmVhZF9kdW1w YWxsX2ZpbHRlcnMoY29uc3QgY2hhciAqZmlsZW5hbWUsIFNpbXBsZVN0cmluZ0xpc3QgKnBhdHRl cm4pCiAKIAlmaWx0ZXJfZnJlZSgmZnN0YXRlKTsKIH0KKworLyoKKyAqIGNyZWF0ZV9vcl9vcGVu X2RpcgorICoKKyAqIFRoaXMgd2lsbCBjcmVhdGUgYSBuZXcgZGlyZWN0b3J5IHdpdGggZ2l2ZW4g bmFtZS4gIElmIHRoZXJlIGlzIGFscmVhZHkgc2FtZQorICogZW1wdHkgZGlyZWN0b3J5IGV4aXN0 LCB0aGVuIHVzZSBpdC4KKyAqLworc3RhdGljIHZvaWQKK2NyZWF0ZV9vcl9vcGVuX2Rpcihjb25z dCBjaGFyICpkaXJuYW1lKQoreworCXN0cnVjdCBzdGF0IHN0OworCWJvb2wJCWlzX2VtcHR5ID0g ZmFsc2U7CisKKwkvKiB3ZSBhY2NlcHQgYW4gZW1wdHkgZXhpc3RpbmcgZGlyZWN0b3J5ICovCisJ aWYgKHN0YXQoZGlybmFtZSwgJnN0KSA9PSAwICYmIFNfSVNESVIoc3Quc3RfbW9kZSkpCisJewor CQlESVIJCSAgICpkaXIgPSBvcGVuZGlyKGRpcm5hbWUpOworCisJCWlmIChkaXIpCisJCXsKKwkJ CXN0cnVjdCBkaXJlbnQgKmQ7CisKKwkJCWlzX2VtcHR5ID0gdHJ1ZTsKKworCQkJd2hpbGUgKGVy cm5vID0gMCwgKGQgPSByZWFkZGlyKGRpcikpKQorCQkJeworCQkJCWlmIChzdHJjbXAoZC0+ZF9u YW1lLCAiLiIpICE9IDAgJiYgc3RyY21wKGQtPmRfbmFtZSwgIi4uIikgIT0gMCkKKwkJCQl7CisJ CQkJCWlzX2VtcHR5ID0gZmFsc2U7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKworCQkJaWYg KGVycm5vKQorCQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBkaXJlY3RvcnkgXCIlc1wiOiAl bSIsCisJCQkJCQkgZGlybmFtZSk7CisKKwkJCWlmIChjbG9zZWRpcihkaXIpKQorCQkJCXBnX2Zh dGFsKCJjb3VsZCBub3QgY2xvc2UgZGlyZWN0b3J5IFwiJXNcIjogJW0iLAorCQkJCQkJIGRpcm5h bWUpOworCQl9CisKKwkJaWYgKCFpc19lbXB0eSkKKwkJeworCQkJcGdfbG9nX2Vycm9yKCJkaXJl Y3RvcnkgXCIlc1wiIGV4aXN0cyBidXQgaXMgbm90IGVtcHR5IiwgZGlybmFtZSk7CisJCQlwZ19s b2dfZXJyb3JfaGludCgiSWYgeW91IHdhbnQgdG8gZHVtcCBkYXRhIG9uIHRoaXMgZGlyZWN0b3J5 LCBlaXRoZXIgcmVtb3ZlIG9yIGVtcHR5ICIKKwkJCQkJCQkgICJ0aGlzIGRpcmVjdG9yeSBcIiVz XCIgb3IgcnVuICVzICIKKwkJCQkJCQkgICJ3aXRoIGFuIGFyZ3VtZW50IG90aGVyIHRoYW4gXCIl c1wiLiIsCisJCQkJCQkJICBkaXJuYW1lLCBwcm9nbmFtZSwgZGlybmFtZSk7CisJCQlleGl0X25p Y2VseSgxKTsKKwkJfQorCX0KKwllbHNlIGlmIChta2RpcihkaXJuYW1lLCAwNzAwKSA8IDApCisJ CXBnX2ZhdGFsKCJjb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSBcIiVzXCI6ICVtIiwgZGlybmFt ZSk7Cit9CisKKy8qCisgKiBwYXJzZUR1bXBGb3JtYXQKKyAqCisgKiBUaGlzIHdpbGwgdmFsaWRh dGUgZHVtcCBmb3JtYXRzLgorICovCitzdGF0aWMgQXJjaGl2ZUZvcm1hdAorcGFyc2VEdW1wRm9y bWF0KGNvbnN0IGNoYXIgKmZvcm1hdCkKK3sKKwlBcmNoaXZlRm9ybWF0IGFyY2hEdW1wRm9ybWF0 OworCisJaWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAiYyIpID09IDApCisJCWFyY2hEdW1wRm9y bWF0ID0gYXJjaEN1c3RvbTsKKwllbHNlIGlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgImN1c3Rv bSIpID09IDApCisJCWFyY2hEdW1wRm9ybWF0ID0gYXJjaEN1c3RvbTsKKwllbHNlIGlmIChwZ19z dHJjYXNlY21wKGZvcm1hdCwgImQiKSA9PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hEaXJl Y3Rvcnk7CisJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChmb3JtYXQsICJkaXJlY3RvcnkiKSA9PSAw KQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hEaXJlY3Rvcnk7CisJZWxzZSBpZiAocGdfc3RyY2Fz ZWNtcChmb3JtYXQsICJwIikgPT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBhcmNoTnVsbDsKKwll bHNlIGlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgInBsYWluIikgPT0gMCkKKwkJYXJjaER1bXBG b3JtYXQgPSBhcmNoTnVsbDsKKwllbHNlIGlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgInQiKSA9 PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hUYXI7CisJZWxzZSBpZiAocGdfc3RyY2FzZWNt cChmb3JtYXQsICJ0YXIiKSA9PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hUYXI7CisJZWxz ZQorCQlwZ19mYXRhbCgidW5yZWNvZ25pemVkIGFyY2hpdmUgZm9ybWF0IFwiJXNcIjsgcGxlYXNl IHNwZWNpZnkgXCJjXCIsIFwiZFwiLCBcInBcIiwgb3IgXCJ0XCIiLAorCQkJCSBmb3JtYXQpOwor CisJcmV0dXJuIGFyY2hEdW1wRm9ybWF0OworfQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1w L3BnX3Jlc3RvcmUuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19yZXN0b3JlLmMKaW5kZXggNDdmN2Iw ZGQzYTEuLmFhODg4N2E0ZWIwIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfcmVzdG9y ZS5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19yZXN0b3JlLmMKQEAgLTIsNyArMiw3IEBACiAg KgogICogcGdfcmVzdG9yZS5jCiAgKglwZ19yZXN0b3JlIGlzIGFuIHV0aWxpdHkgZXh0cmFjdGlu ZyBwb3N0Z3JlcyBkYXRhYmFzZSBkZWZpbml0aW9ucwotICoJZnJvbSBhIGJhY2t1cCBhcmNoaXZl IGNyZWF0ZWQgYnkgcGdfZHVtcCB1c2luZyB0aGUgYXJjaGl2ZXIKKyAqCWZyb20gYSBiYWNrdXAg YXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXAvcGdfZHVtcGFsbCB1c2luZyB0aGUgYXJjaGl2ZXIK ICAqCWludGVyZmFjZS4KICAqCiAgKglwZ19yZXN0b3JlIHdpbGwgcmVhZCB0aGUgYmFja3VwIGFy Y2hpdmUgYW5kCkBAIC00MSwxMSArNDEsMTUgQEAKICNpbmNsdWRlICJwb3N0Z3Jlc19mZS5oIgog CiAjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgogI2lmZGVmIEhBVkVf VEVSTUlPU19ICiAjaW5jbHVkZSA8dGVybWlvcy5oPgogI2VuZGlmCiAKKyNpbmNsdWRlICJjb21t b24vc3RyaW5nLmgiCisjaW5jbHVkZSAiY29ubmVjdGRiLmgiCiAjaW5jbHVkZSAiZmVfdXRpbHMv b3B0aW9uX3V0aWxzLmgiCisjaW5jbHVkZSAiZmVfdXRpbHMvc3RyaW5nX3V0aWxzLmgiCiAjaW5j bHVkZSAiZmlsdGVyLmgiCiAjaW5jbHVkZSAiZ2V0b3B0X2xvbmcuaCIKICNpbmNsdWRlICJwYXJh bGxlbC5oIgpAQCAtNTMsMTggKzU3LDM1IEBACiAKIHN0YXRpYyB2b2lkIHVzYWdlKGNvbnN0IGNo YXIgKnByb2duYW1lKTsKIHN0YXRpYyB2b2lkIHJlYWRfcmVzdG9yZV9maWx0ZXJzKGNvbnN0IGNo YXIgKmZpbGVuYW1lLCBSZXN0b3JlT3B0aW9ucyAqb3B0cyk7CitzdGF0aWMgYm9vbCBmaWxlX2V4 aXN0c19pbl9kaXJlY3RvcnkoY29uc3QgY2hhciAqZGlyLCBjb25zdCBjaGFyICpmaWxlbmFtZSk7 CitzdGF0aWMgaW50CXJlc3RvcmVfb25lX2RhdGFiYXNlKGNvbnN0IGNoYXIgKmlucHV0RmlsZVNw ZWMsIFJlc3RvcmVPcHRpb25zICpvcHRzLAorCQkJCQkJCSAgIGludCBudW1Xb3JrZXJzLCBib29s IGFwcGVuZF9kYXRhLCBpbnQgbnVtKTsKK3N0YXRpYyBpbnQJcmVhZF9vbmVfc3RhdGVtZW50KFN0 cmluZ0luZm8gaW5CdWYsIEZJTEUgKnBmaWxlKTsKK3N0YXRpYyBpbnQJcmVzdG9yZV9hbGxfZGF0 YWJhc2VzKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqZHVtcGRpcnBhdGgsCisJCQkJCQkJCVNp bXBsZVN0cmluZ0xpc3QgZGJfZXhjbHVkZV9wYXR0ZXJucywgUmVzdG9yZU9wdGlvbnMgKm9wdHMs IGludCBudW1Xb3JrZXJzKTsKK3N0YXRpYyBpbnQJcHJvY2Vzc19nbG9iYWxfc3FsX2NvbW1hbmRz KFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqZHVtcGRpcnBhdGgsCisJCQkJCQkJCQkJY29uc3Qg Y2hhciAqb3V0ZmlsZSk7CitzdGF0aWMgdm9pZCBjb3B5X29yX3ByaW50X2dsb2JhbF9maWxlKGNv bnN0IGNoYXIgKm91dGZpbGUsIEZJTEUgKnBmaWxlKTsKK3N0YXRpYyBpbnQJZ2V0X2RibmFtZXNf bGlzdF90b19yZXN0b3JlKFBHY29ubiAqY29ubiwKKwkJCQkJCQkJCQlTaW1wbGVPaWRTdHJpbmdM aXN0ICogZGJuYW1lX29pZF9saXN0LAorCQkJCQkJCQkJCVNpbXBsZVN0cmluZ0xpc3QgZGJfZXhj bHVkZV9wYXR0ZXJucyk7CitzdGF0aWMgaW50CWdldF9kYm5hbWVfb2lkX2xpc3RfZnJvbV9tZmls ZShjb25zdCBjaGFyICpkdW1wZGlycGF0aCwKKwkJCQkJCQkJCQkgICBTaW1wbGVPaWRTdHJpbmdM aXN0ICogZGJuYW1lX29pZF9saXN0KTsKK3N0YXRpYyBzaXplX3QgcXVvdGVfbGl0ZXJhbF9pbnRl cm5hbChjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IGxlbik7CitzdGF0aWMgY2hh ciAqcXVvdGVfbGl0ZXJhbF9jc3RyKGNvbnN0IGNoYXIgKnJhd3N0cik7CiAKIGludAogbWFpbihp bnQgYXJnYywgY2hhciAqKmFyZ3YpCiB7CiAJUmVzdG9yZU9wdGlvbnMgKm9wdHM7CiAJaW50CQkJ YzsKLQlpbnQJCQlleGl0X2NvZGU7CiAJaW50CQkJbnVtV29ya2VycyA9IDE7Ci0JQXJjaGl2ZSAg ICAqQUg7CiAJY2hhcgkgICAqaW5wdXRGaWxlU3BlYzsKIAlib29sCQlkYXRhX29ubHkgPSBmYWxz ZTsKIAlib29sCQlzY2hlbWFfb25seSA9IGZhbHNlOworCWludAkJCW5fZXJyb3JzID0gMDsKKwli b29sCQlnbG9iYWxzX29ubHkgPSBmYWxzZTsKKwlTaW1wbGVTdHJpbmdMaXN0IGRiX2V4Y2x1ZGVf cGF0dGVybnMgPSB7TlVMTCwgTlVMTH07CiAJc3RhdGljIGludAlkaXNhYmxlX3RyaWdnZXJzID0g MDsKIAlzdGF0aWMgaW50CWVuYWJsZV9yb3dfc2VjdXJpdHkgPSAwOwogCXN0YXRpYyBpbnQJaWZf ZXhpc3RzID0gMDsKQEAgLTkwLDYgKzExMSw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2 KQogCQl7ImNsZWFuIiwgMCwgTlVMTCwgJ2MnfSwKIAkJeyJjcmVhdGUiLCAwLCBOVUxMLCAnQyd9 LAogCQl7ImRhdGEtb25seSIsIDAsIE5VTEwsICdhJ30sCisJCXsiZ2xvYmFscy1vbmx5IiwgMCwg TlVMTCwgJ2cnfSwKIAkJeyJkYm5hbWUiLCAxLCBOVUxMLCAnZCd9LAogCQl7ImV4aXQtb24tZXJy b3IiLCAwLCBOVUxMLCAnZSd9LAogCQl7ImV4Y2x1ZGUtc2NoZW1hIiwgMSwgTlVMTCwgJ04nfSwK QEAgLTE0NCw2ICsxNjYsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJeyJ3aXRo LXN0YXRpc3RpY3MiLCBub19hcmd1bWVudCwgJndpdGhfc3RhdGlzdGljcywgMX0sCiAJCXsic3Rh dGlzdGljcy1vbmx5Iiwgbm9fYXJndW1lbnQsICZzdGF0aXN0aWNzX29ubHksIDF9LAogCQl7ImZp bHRlciIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCA0fSwKKwkJeyJleGNsdWRlLWRhdGFiYXNl IiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDZ9LAogCiAJCXtOVUxMLCAwLCBOVUxMLCAwfQog CX07CkBAIC0xNzIsNyArMTk1LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCX0K IAl9CiAKLQl3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAiYWNDZDplZjpGOmg6 STpqOmxMOm46TjpPcDpQOlJzUzp0OlQ6VTp2d1d4MSIsCisJd2hpbGUgKChjID0gZ2V0b3B0X2xv bmcoYXJnYywgYXJndiwgImFjQ2Q6ZWY6RjpnaDpJOmo6bEw6bjpOOk9wOlA6UnNTOnQ6VDpVOnZ3 V3gxIiwKIAkJCQkJCQljbWRvcHRzLCBOVUxMKSkgIT0gLTEpCiAJewogCQlzd2l0Y2ggKGMpCkBA IC0xOTksMTEgKzIyMiwxNCBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCQlpZiAo c3RybGVuKG9wdGFyZykgIT0gMCkKIAkJCQkJb3B0cy0+Zm9ybWF0TmFtZSA9IHBnX3N0cmR1cChv cHRhcmcpOwogCQkJCWJyZWFrOworCQkJY2FzZSAnZyc6CisJCQkJLyogcmVzdG9yZSBvbmx5IGds b2JhbC5kYXQgZmlsZSBmcm9tIGRpcmVjdG9yeSAqLworCQkJCWdsb2JhbHNfb25seSA9IHRydWU7 CisJCQkJYnJlYWs7CiAJCQljYXNlICdoJzoKIAkJCQlpZiAoc3RybGVuKG9wdGFyZykgIT0gMCkK IAkJCQkJb3B0cy0+Y3BhcmFtcy5wZ2hvc3QgPSBwZ19zdHJkdXAob3B0YXJnKTsKIAkJCQlicmVh azsKLQogCQkJY2FzZSAnaic6CQkJLyogbnVtYmVyIG9mIHJlc3RvcmUgam9icyAqLwogCQkJCWlm ICghb3B0aW9uX3BhcnNlX2ludChvcHRhcmcsICItai8tLWpvYnMiLCAxLAogCQkJCQkJCQkJICBQ R19NQVhfSk9CUywKQEAgLTMxOCw2ICszNDQsOSBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJn dikKIAkJCQkJZXhpdCgxKTsKIAkJCQlvcHRzLT5leGl0X29uX2Vycm9yID0gdHJ1ZTsKIAkJCQli cmVhazsKKwkJCWNhc2UgNjoJCQkJLyogZGF0YWJhc2UgcGF0dGVybnMgdG8gc2tpcCAqLworCQkJ CXNpbXBsZV9zdHJpbmdfbGlzdF9hcHBlbmQoJmRiX2V4Y2x1ZGVfcGF0dGVybnMsIG9wdGFyZyk7 CisJCQkJYnJlYWs7CiAKIAkJCWRlZmF1bHQ6CiAJCQkJLyogZ2V0b3B0X2xvbmcgYWxyZWFkeSBl bWl0dGVkIGEgY29tcGxhaW50ICovCkBAIC0zNDUsNiArMzc0LDEzIEBAIG1haW4oaW50IGFyZ2Ms IGNoYXIgKiphcmd2KQogCWlmICghb3B0cy0+Y3BhcmFtcy5kYm5hbWUgJiYgIW9wdHMtPmZpbGVu YW1lICYmICFvcHRzLT50b2NTdW1tYXJ5KQogCQlwZ19mYXRhbCgib25lIG9mIC1kLy0tZGJuYW1l IGFuZCAtZi8tLWZpbGUgbXVzdCBiZSBzcGVjaWZpZWQiKTsKIAorCWlmIChkYl9leGNsdWRlX3Bh dHRlcm5zLmhlYWQgIT0gTlVMTCAmJiBnbG9iYWxzX29ubHkpCisJeworCQlwZ19sb2dfZXJyb3Io Im9wdGlvbiAtLWV4Y2x1ZGUtZGF0YWJhc2UgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAt Zy8tLWdsb2JhbHMtb25seSIpOworCQlwZ19sb2dfZXJyb3JfaGludCgiVHJ5IFwiJXMgLS1oZWxw XCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiwgcHJvZ25hbWUpOworCQlleGl0X25pY2VseSgxKTsK Kwl9CisKIAkvKiBTaG91bGQgZ2V0IGF0IG1vc3Qgb25lIG9mIC1kIGFuZCAtZiwgZWxzZSB1c2Vy IGlzIGNvbmZ1c2VkICovCiAJaWYgKG9wdHMtPmNwYXJhbXMuZGJuYW1lKQogCXsKQEAgLTQ1Miw2 ICs0ODgsMTEzIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJCQkgb3B0cy0+Zm9y bWF0TmFtZSk7CiAJfQogCisJLyoKKwkgKiBJZiB0b2MuZGF0IGZpbGUgZG9lcyBub3QgcHJlc2Vu dCBpbiBjdXJyZW50IHBhdGgsIHRoZW4gY2hlY2sgZm9yCisJICogZ2xvYmFsLmRhdC4gIElmIGds b2JhbC5kYXQgZmlsZSBpcyBwcmVzZW50LCB0aGVuIHJlc3RvcmUgYWxsIHRoZQorCSAqIGRhdGFi YXNlcyBmcm9tIG1hcC5kYXQoaWYgZXhpc3QpIGZpbGUgbGlzdCBhbmQgc2tpcCByZXN0b3Jpbmcg Zm9yCisJICogLS1leGNsdWRlLWRhdGFiYXNlIHBhdHRlcm5zLgorCSAqLworCWlmIChpbnB1dEZp bGVTcGVjICE9IE5VTEwgJiYgIWZpbGVfZXhpc3RzX2luX2RpcmVjdG9yeShpbnB1dEZpbGVTcGVj LCAidG9jLmRhdCIpICYmCisJCWZpbGVfZXhpc3RzX2luX2RpcmVjdG9yeShpbnB1dEZpbGVTcGVj LCAiZ2xvYmFsLmRhdCIpKQorCXsKKwkJUEdjb25uCSAgICpjb25uID0gTlVMTDsJLyogQ29ubmVj dGlvbiB0byByZXN0b3JlIGdsb2JhbCBzcWwKKwkJCQkJCQkJCSAqIGNvbW1hbmRzLiAqLworCisJ CS8qCisJCSAqIFVzZXIgaXMgc3VnZ2VzdGVkIHRvIHVzZSBzaW5nbGUgZGF0YWJhc2UgZHVtcCBm b3IgLS1saXN0IG9wdGlvbi4KKwkJICovCisJCWlmIChvcHRzLT50b2NTdW1tYXJ5KQorCQkJcGdf ZmF0YWwoIm9wdGlvbiAtbC8tLWxpc3QgY2Fubm90IGJlIHVzZWQgd2hlbiByZXN0b3JpbmcgbXVs dGlwbGUgZGF0YWJhc2VzIGJ5IGFyY2hpdmUgb2YgcGdfZHVtcGFsbCIpOworCisJCS8qCisJCSAq IFRvIHJlc3RvcmUgbXVsdGlwbGUgZGF0YWJhc2VzLCAtQyAoY3JlYXRlIGRhdGFiYXNlKSBvcHRp b24gc2hvdWxkCisJCSAqIGJlIHNwZWNpZmllZC4gRXZlbiB0aGVyZSBpcyBzaW5nbGUgZGF0YWJh c2UgaW4gZHVtcCwgcmVwb3J0IGVycm9yCisJCSAqIGJlY2F1c2UgaXQgbWlnaHQgYmUgcG9zc2li bGUgdGhhdCBkYXRhYmFzZSBoYXNuJ3QgY3JlYXRlZCBzbyBiZXR0ZXIKKwkJICogd2UgcmVwb3J0 IGVycm9yLgorCQkgKi8KKwkJaWYgKCFnbG9iYWxzX29ubHkgJiYgb3B0cy0+Y3JlYXRlREIgIT0g MSkKKwkJeworCQkJcGdfbG9nX2Vycm9yKCItQy8tLWNyZWF0ZSBvcHRpb24gc2hvdWxkIGJlIHNw ZWNpZmllZCB3aGVuIHJlc3RvcmluZyBtdWx0aXBsZSBkYXRhYmFzZXMgYnkgYXJjaGl2ZSBvZiBw Z19kdW1wYWxsIik7CisJCQlwZ19sb2dfZXJyb3JfaGludCgiVHJ5IFwiJXMgLS1oZWxwXCIgZm9y IG1vcmUgaW5mb3JtYXRpb24uIiwgcHJvZ25hbWUpOworCQkJcGdfbG9nX2Vycm9yX2hpbnQoIklm IGRiIGlzIGFscmVhZHkgY3JlYXRlZCBhbmQgZHVtcCBoYXMgc2luZ2xlIGRiIGR1bXAsIHRoZW4g dXNlIHBhcnRpY3VsYXIgZHVtcCBmaWxlLiIpOworCQkJZXhpdF9uaWNlbHkoMSk7CisJCX0KKwor CQkvKgorCQkgKiBDb25uZWN0IHRvIGRhdGFiYXNlIHRvIGV4ZWN1dGUgZ2xvYmFsIHNxbCBjb21t YW5kcyBmcm9tIGdsb2JhbC5kYXQKKwkJICogZmlsZS4KKwkJICovCisJCWlmIChvcHRzLT5jcGFy YW1zLmRibmFtZSkKKwkJeworCQkJY29ubiA9IENvbm5lY3REYXRhYmFzZShvcHRzLT5jcGFyYW1z LmRibmFtZSwgTlVMTCwgb3B0cy0+Y3BhcmFtcy5wZ2hvc3QsCisJCQkJCQkJCSAgIG9wdHMtPmNw YXJhbXMucGdwb3J0LCBvcHRzLT5jcGFyYW1zLnVzZXJuYW1lLCBUUklfREVGQVVMVCwKKwkJCQkJ CQkJICAgZmFsc2UsIHByb2duYW1lLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKKworCisJCQlp ZiAoIWNvbm4pCisJCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjb25uZWN0IHRvIGRhdGFiYXNlIFwi JXNcIiIsIG9wdHMtPmNwYXJhbXMuZGJuYW1lKTsKKwkJfQorCisJCS8qIElmIGdsb2JhbHMtb25s eSwgdGhlbiByZXR1cm4gZnJvbSBoZXJlLiAqLworCQlpZiAoZ2xvYmFsc19vbmx5KQorCQl7CisJ CQkvKgorCQkJICogT3BlbiBnbG9iYWwuZGF0IGZpbGUgYW5kIGV4ZWN1dGUvYXBwZW5kIGFsbCB0 aGUgZ2xvYmFsIHNxbAorCQkJICogY29tbWFuZHMuCisJCQkgKi8KKwkJCW5fZXJyb3JzID0gcHJv Y2Vzc19nbG9iYWxfc3FsX2NvbW1hbmRzKGNvbm4sIGlucHV0RmlsZVNwZWMsCisJCQkJCQkJCQkJ CQkgICBvcHRzLT5maWxlbmFtZSk7CisKKwkJCWlmIChjb25uKQorCQkJCVBRZmluaXNoKGNvbm4p OworCisJCQlwZ19sb2dfaW5mbygiZGF0YWJhc2VzIHJlc3RvcmluZyBpcyBza2lwcGVkIGFzIC1n Ly0tZ2xvYmFscy1vbmx5IG9wdGlvbiBpcyBzcGVjaWZpZWQiKTsKKwkJfQorCQllbHNlCisJCXsK KwkJCS8qIE5vdyByZXN0b3JlIGFsbCB0aGUgZGF0YWJhc2VzIGZyb20gbWFwLmRhdCBmaWxlLiAq LworCQkJbl9lcnJvcnMgPSByZXN0b3JlX2FsbF9kYXRhYmFzZXMoY29ubiwgaW5wdXRGaWxlU3Bl YywgZGJfZXhjbHVkZV9wYXR0ZXJucywKKwkJCQkJCQkJCQkgICBvcHRzLCBudW1Xb3JrZXJzKTsK KwkJfQorCisJCS8qIEZyZWUgZGIgcGF0dGVybiBsaXN0LiAqLworCQlzaW1wbGVfc3RyaW5nX2xp c3RfZGVzdHJveSgmZGJfZXhjbHVkZV9wYXR0ZXJucyk7CisJfQorCWVsc2UJCQkJCQkvKiBwcm9j ZXNzIGlmIGdsb2JhbC5kYXQgZmlsZSBkb2VzIG5vdCBleGlzdC4gKi8KKwl7CisJCWlmIChkYl9l eGNsdWRlX3BhdHRlcm5zLmhlYWQgIT0gTlVMTCkKKwkJCXBnX2ZhdGFsKCJvcHRpb24gLS1leGNs dWRlLWRhdGFiYXNlIGNhbiBiZSB1c2VkIG9ubHkgd2hlbiByZXN0b3JpbmcgbXVsdGlwbGUgZGF0 YWJhc2VzIGJ5IGFyY2hpdmUgb2YgcGdfZHVtcGFsbCIpOworCisJCWlmIChnbG9iYWxzX29ubHkp CisJCQlwZ19mYXRhbCgib3B0aW9uIC1nLy0tZ2xvYmFscy1vbmx5IGNhbiBiZSB1c2VkIG9ubHkg d2hlbiByZXN0b3JpbmcgbXVsdGlwbGUgZGF0YWJhc2VzIGJ5IGFyY2hpdmUgb2YgcGdfZHVtcGFs bCIpOworCisJCW5fZXJyb3JzID0gcmVzdG9yZV9vbmVfZGF0YWJhc2UoaW5wdXRGaWxlU3BlYywg b3B0cywgbnVtV29ya2VycywgZmFsc2UsIDApOworCX0KKworCS8qIERvbmUsIHByaW50IGEgc3Vt bWFyeSBvZiBpZ25vcmVkIGVycm9ycyBkdXJpbmcgcmVzdG9yZS4gKi8KKwlpZiAobl9lcnJvcnMp CisJeworCQlwZ19sb2dfd2FybmluZygiZXJyb3JzIGlnbm9yZWQgb24gcmVzdG9yZTogJWQiLCBu X2Vycm9ycyk7CisJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogcmVz dG9yZV9vbmVfZGF0YWJhc2UKKyAqCisgKiBUaGlzIHdpbGwgcmVzdG9yZSBvbmUgZGF0YWJhc2Ug dXNpbmcgdG9jLmRhdCBmaWxlLgorICoKKyAqIHJldHVybnMgdGhlIG51bWJlciBvZiBlcnJvcnMg d2hpbGUgZG9pbmcgcmVzdG9yZS4KKyAqLworc3RhdGljIGludAorcmVzdG9yZV9vbmVfZGF0YWJh c2UoY29uc3QgY2hhciAqaW5wdXRGaWxlU3BlYywgUmVzdG9yZU9wdGlvbnMgKm9wdHMsCisJCQkJ ICAgaW50IG51bVdvcmtlcnMsIGJvb2wgYXBwZW5kX2RhdGEsIGludCBudW0pCit7CisJQXJjaGl2 ZSAgICAqQUg7CisJaW50CQkJbl9lcnJvcnM7CisKIAlBSCA9IE9wZW5BcmNoaXZlKGlucHV0Rmls ZVNwZWMsIG9wdHMtPmZvcm1hdCk7CiAKIAlTZXRBcmNoaXZlT3B0aW9ucyhBSCwgTlVMTCwgb3B0 cyk7CkBAIC00NTksOSArNjAyLDE1IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCS8q CiAJICogV2UgZG9uJ3QgaGF2ZSBhIGNvbm5lY3Rpb24geWV0IGJ1dCB0aGF0IGRvZXNuJ3QgbWF0 dGVyLiBUaGUgY29ubmVjdGlvbgogCSAqIGlzIGluaXRpYWxpemVkIHRvIE5VTEwgYW5kIGlmIHdl IHRlcm1pbmF0ZSB0aHJvdWdoIGV4aXRfbmljZWx5KCkgd2hpbGUKLQkgKiBpdCdzIHN0aWxsIE5V TEwsIHRoZSBjbGVhbnVwIGZ1bmN0aW9uIHdpbGwganVzdCBiZSBhIG5vLW9wLgorCSAqIGl0J3Mg c3RpbGwgTlVMTCwgdGhlIGNsZWFudXAgZnVuY3Rpb24gd2lsbCBqdXN0IGJlIGEgbm8tb3AuIElm IHdlIGFyZQorCSAqIHJlc3RvcmluZyBtdWx0aXBsZSBkYXRhYmFzZXMsIHRoZW4gc2F2ZSBpbmRl eCBvZiBleGl0X25pY2VseSBzbyB0aGF0IHdlCisJICogY2FuIHVzZSBzYW1lIHNsb3QgZm9yIGFs bCB0aGUgZGF0YWJhc2VzIGFzIHdlIGFscmVhZHkgY2xvc2VkIHRoZQorCSAqIHByZXZpb3VzIGFy Y2hpdmUgYnkgQ2xvc2VBcmNoaXZlLgogCSAqLwotCW9uX2V4aXRfY2xvc2VfYXJjaGl2ZShBSCk7 CisJaWYgKCFhcHBlbmRfZGF0YSB8fCBudW0gPT0gMCkKKwkJb25fZXhpdF9jbG9zZV9hcmNoaXZl KEFIKTsKKwkvL2Vsc2UKKwkJLy9yZXBsYWNlX29uX2V4aXRfY2xvc2VfYXJjaGl2ZShBSCk7CiAK IAkvKiBMZXQgdGhlIGFyY2hpdmVyIGtub3cgaG93IG5vaXN5IHRvIGJlICovCiAJQUgtPnZlcmJv c2UgPSBvcHRzLT52ZXJib3NlOwpAQCAtNDgxLDI1ICs2MzAsMjIgQEAgbWFpbihpbnQgYXJnYywg Y2hhciAqKmFyZ3YpCiAJZWxzZQogCXsKIAkJUHJvY2Vzc0FyY2hpdmVSZXN0b3JlT3B0aW9ucyhB SCk7Ci0JCVJlc3RvcmVBcmNoaXZlKEFIKTsKKwkJUmVzdG9yZUFyY2hpdmUoQUgsIGFwcGVuZF9k YXRhKTsKIAl9CiAKLQkvKiBkb25lLCBwcmludCBhIHN1bW1hcnkgb2YgaWdub3JlZCBlcnJvcnMg Ki8KLQlpZiAoQUgtPm5fZXJyb3JzKQotCQlwZ19sb2dfd2FybmluZygiZXJyb3JzIGlnbm9yZWQg b24gcmVzdG9yZTogJWQiLCBBSC0+bl9lcnJvcnMpOworCW5fZXJyb3JzID0gQUgtPm5fZXJyb3Jz OwogCiAJLyogQUggbWF5IGJlIGZyZWVkIGluIENsb3NlQXJjaGl2ZT8gKi8KLQlleGl0X2NvZGUg PSBBSC0+bl9lcnJvcnMgPyAxIDogMDsKLQogCUNsb3NlQXJjaGl2ZShBSCk7CiAKLQlyZXR1cm4g ZXhpdF9jb2RlOworCXJldHVybiBuX2Vycm9yczsKIH0KIAogc3RhdGljIHZvaWQKIHVzYWdlKGNv bnN0IGNoYXIgKnByb2duYW1lKQogewotCXByaW50ZihfKCIlcyByZXN0b3JlcyBhIFBvc3RncmVT UUwgZGF0YWJhc2UgZnJvbSBhbiBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcC5cblxuIiksIHBy b2duYW1lKTsKKwlwcmludGYoXygiJXMgcmVzdG9yZXMgYSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGZy b20gYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXAuXG4iCisJCQkgIklmIGFyY2hpdmUgaXMg Y3JlYXRlZCBieSBwZ19kdW1wYWxsLCB0aGVuIHJlc3RvcmVzIG11bHRpcGxlIGRhdGFiYXNlcyBh bHNvLiBcblxuIiksIHByb2duYW1lKTsKIAlwcmludGYoXygiVXNhZ2U6XG4iKSk7CiAJcHJpbnRm KF8oIiAgJXMgW09QVElPTl0uLi4gW0ZJTEVdXG4iKSwgcHJvZ25hbWUpOwogCkBAIC01MTcsNiAr NjYzLDcgQEAgdXNhZ2UoY29uc3QgY2hhciAqcHJvZ25hbWUpCiAJcHJpbnRmKF8oIiAgLWMsIC0t Y2xlYW4gICAgICAgICAgICAgICAgICBjbGVhbiAoZHJvcCkgZGF0YWJhc2Ugb2JqZWN0cyBiZWZv cmUgcmVjcmVhdGluZ1xuIikpOwogCXByaW50ZihfKCIgIC1DLCAtLWNyZWF0ZSAgICAgICAgICAg ICAgICAgY3JlYXRlIHRoZSB0YXJnZXQgZGF0YWJhc2VcbiIpKTsKIAlwcmludGYoXygiICAtZSwg LS1leGl0LW9uLWVycm9yICAgICAgICAgIGV4aXQgb24gZXJyb3IsIGRlZmF1bHQgaXMgdG8gY29u dGludWVcbiIpKTsKKwlwcmludGYoXygiICAtZywgLS1nbG9iYWxzLW9ubHkgICAgICAgICAgIHJl c3RvcmUgb25seSBnbG9iYWwgb2JqZWN0cywgbm8gZGF0YWJhc2VzXG4iKSk7CiAJcHJpbnRmKF8o IiAgLUksIC0taW5kZXg9TkFNRSAgICAgICAgICAgICByZXN0b3JlIG5hbWVkIGluZGV4XG4iKSk7 CiAJcHJpbnRmKF8oIiAgLWosIC0tam9icz1OVU0gICAgICAgICAgICAgICB1c2UgdGhpcyBtYW55 IHBhcmFsbGVsIGpvYnMgdG8gcmVzdG9yZVxuIikpOwogCXByaW50ZihfKCIgIC1MLCAtLXVzZS1s aXN0PUZJTEVOQU1FICAgICAgdXNlIHRhYmxlIG9mIGNvbnRlbnRzIGZyb20gdGhpcyBmaWxlIGZv clxuIgpAQCAtNTI5LDYgKzY3Niw3IEBAIHVzYWdlKGNvbnN0IGNoYXIgKnByb2duYW1lKQogCXBy aW50ZihfKCIgIC1TLCAtLXN1cGVydXNlcj1OQU1FICAgICAgICAgc3VwZXJ1c2VyIHVzZXIgbmFt ZSB0byB1c2UgZm9yIGRpc2FibGluZyB0cmlnZ2Vyc1xuIikpOwogCXByaW50ZihfKCIgIC10LCAt LXRhYmxlPU5BTUUgICAgICAgICAgICAgcmVzdG9yZSBuYW1lZCByZWxhdGlvbiAodGFibGUsIHZp ZXcsIGV0Yy4pXG4iKSk7CiAJcHJpbnRmKF8oIiAgLVQsIC0tdHJpZ2dlcj1OQU1FICAgICAgICAg ICByZXN0b3JlIG5hbWVkIHRyaWdnZXJcbiIpKTsKKwlwcmludGYoXygiICAtLWV4Y2x1ZGUtZGF0 YWJhc2U9UEFUVEVSTiAgIGV4Y2x1ZGUgZGF0YWJhc2VzIHdob3NlIG5hbWUgbWF0Y2hlcyB3aXRo IHBhdHRlcm5cbiIpKTsKIAlwcmludGYoXygiICAteCwgLS1uby1wcml2aWxlZ2VzICAgICAgICAg IHNraXAgcmVzdG9yYXRpb24gb2YgYWNjZXNzIHByaXZpbGVnZXMgKGdyYW50L3Jldm9rZSlcbiIp KTsKIAlwcmludGYoXygiICAtMSwgLS1zaW5nbGUtdHJhbnNhY3Rpb24gICAgIHJlc3RvcmUgYXMg YSBzaW5nbGUgdHJhbnNhY3Rpb25cbiIpKTsKIAlwcmludGYoXygiICAtLWRpc2FibGUtdHJpZ2dl cnMgICAgICAgICAgIGRpc2FibGUgdHJpZ2dlcnMgZHVyaW5nIGRhdGEtb25seSByZXN0b3JlXG4i KSk7CkBAIC01NjksOCArNzE3LDggQEAgdXNhZ2UoY29uc3QgY2hhciAqcHJvZ25hbWUpCiAJcHJp bnRmKF8oIiAgLS1yb2xlPVJPTEVOQU1FICAgICAgICAgIGRvIFNFVCBST0xFIGJlZm9yZSByZXN0 b3JlXG4iKSk7CiAKIAlwcmludGYoXygiXG4iCi0JCQkgIlRoZSBvcHRpb25zIC1JLCAtbiwgLU4s IC1QLCAtdCwgLVQsIGFuZCAtLXNlY3Rpb24gY2FuIGJlIGNvbWJpbmVkIGFuZCBzcGVjaWZpZWRc biIKLQkJCSAibXVsdGlwbGUgdGltZXMgdG8gc2VsZWN0IG11bHRpcGxlIG9iamVjdHMuXG4iKSk7 CisJCQkgIlRoZSBvcHRpb25zIC1JLCAtbiwgLU4sIC1QLCAtdCwgLVQsIC0tc2VjdGlvbiwgYW5k IC0tZXhjbHVkZS1kYXRhYmFzZSBjYW4gYmUgY29tYmluZWRcbiIKKwkJCSAiYW5kIHNwZWNpZmll ZCBtdWx0aXBsZSB0aW1lcyB0byBzZWxlY3QgbXVsdGlwbGUgb2JqZWN0cy5cbiIpKTsKIAlwcmlu dGYoXygiXG5JZiBubyBpbnB1dCBmaWxlIG5hbWUgaXMgc3VwcGxpZWQsIHRoZW4gc3RhbmRhcmQg aW5wdXQgaXMgdXNlZC5cblxuIikpOwogCXByaW50ZihfKCJSZXBvcnQgYnVncyB0byA8JXM+Llxu IiksIFBBQ0tBR0VfQlVHUkVQT1JUKTsKIAlwcmludGYoXygiJXMgaG9tZSBwYWdlOiA8JXM+XG4i KSwgUEFDS0FHRV9OQU1FLCBQQUNLQUdFX1VSTCk7CkBAIC02NzUsMyArODIzLDYyMCBAQCByZWFk X3Jlc3RvcmVfZmlsdGVycyhjb25zdCBjaGFyICpmaWxlbmFtZSwgUmVzdG9yZU9wdGlvbnMgKm9w dHMpCiAKIAlmaWx0ZXJfZnJlZSgmZnN0YXRlKTsKIH0KKworLyoKKyAqIGZpbGVfZXhpc3RzX2lu X2RpcmVjdG9yeQorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiBmaWxlIGV4aXN0IGluIGN1cnJlbnQg ZGlyZWN0b3J5LgorICovCitzdGF0aWMgYm9vbAorZmlsZV9leGlzdHNfaW5fZGlyZWN0b3J5KGNv bnN0IGNoYXIgKmRpciwgY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisJc3RydWN0IHN0YXQgc3Q7 CisJY2hhcgkJYnVmW01BWFBHUEFUSF07CisKKwlpZiAoc25wcmludGYoYnVmLCBNQVhQR1BBVEgs ICIlcy8lcyIsIGRpciwgZmlsZW5hbWUpID49IE1BWFBHUEFUSCkKKwkJcGdfZmF0YWwoImRpcmVj dG9yeSBuYW1lIHRvbyBsb25nOiBcIiVzXCIiLCBkaXIpOworCisJcmV0dXJuIChzdGF0KGJ1Ziwg JnN0KSA9PSAwICYmIFNfSVNSRUcoc3Quc3RfbW9kZSkpOworfQorCisvKgorICogcmVhZF9vbmVf c3RhdGVtZW50CisgKgorICogVGhpcyB3aWxsIHN0YXJ0IHJlYWRpbmcgZnJvbSBwYXNzZWQgZmls ZSBwb2ludGVyIHVzaW5nIGZnZXRjIGFuZCByZWFkIHRpbGwKKyAqIHNlbWljb2xvbihzcWwgc3Rh dGVtZW50IHRlcm1pbmF0b3IgZm9yIGdsb2JhbC5kYXQgZmlsZSkKKyAqCisgKiBFT0YgaXMgcmV0 dXJuZWQgaWYgZW5kLW9mLWZpbGUgaW5wdXQgaXMgc2VlbjsgdGltZSB0byBzaHV0IGRvd24uCisg Ki8KKworc3RhdGljIGludAorcmVhZF9vbmVfc3RhdGVtZW50KFN0cmluZ0luZm8gaW5CdWYsIEZJ TEUgKnBmaWxlKQoreworCWludAkJCWM7CQkJCS8qIGNoYXJhY3RlciByZWFkIGZyb20gZ2V0Yygp ICovCisJaW50CQkJbTsKKworCVN0cmluZ0luZm9EYXRhIHE7CisKKwlpbml0U3RyaW5nSW5mbygm cSk7CisKKwlyZXNldFN0cmluZ0luZm8oaW5CdWYpOworCisJLyoKKwkgKiBSZWFkIGNoYXJhY3Rl cnMgdW50aWwgRU9GIG9yIHRoZSBhcHByb3ByaWF0ZSBkZWxpbWl0ZXIgaXMgc2Vlbi4KKwkgKi8K Kwl3aGlsZSAoKGMgPSBmZ2V0YyhwZmlsZSkpICE9IEVPRikKKwl7CisJCWlmIChjICE9ICdcJycg JiYgYyAhPSAnIicgJiYgYyAhPSAnXG4nICYmIGMgIT0gJzsnKQorCQl7CisJCQlhcHBlbmRTdHJp bmdJbmZvQ2hhcihpbkJ1ZiwgKGNoYXIpIGMpOworCQkJd2hpbGUgKChjID0gZmdldGMocGZpbGUp KSAhPSBFT0YpCisJCQl7CisJCQkJaWYgKGMgIT0gJ1wnJyAmJiBjICE9ICciJyAmJiBjICE9ICc7 JyAmJiBjICE9ICdcbicpCisJCQkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGluQnVmLCAoY2hhcikg Yyk7CisJCQkJZWxzZQorCQkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmIChjID09ICdcJycg fHwgYyA9PSAnIicpCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZxLCAoY2hhcikgYyk7 CisJCQltID0gYzsKKworCQkJd2hpbGUgKChjID0gZmdldGMocGZpbGUpKSAhPSBFT0YpCisJCQl7 CisJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJnEsIChjaGFyKSBjKTsKKworCQkJCWlmIChjID09 IG0pCisJCQkJeworCQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGluQnVmLCBxLmRhdGEpOwor CQkJCQlyZXNldFN0cmluZ0luZm8oJnEpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0K KworCQlpZiAoYyA9PSAnOycpCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGluQnVmLCAo Y2hhcikgJzsnKTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGMgPT0gJ1xuJykKKwkJCWFwcGVu ZFN0cmluZ0luZm9DaGFyKGluQnVmLCAoY2hhcikgJ1xuJyk7CisJfQorCisJLyogTm8gaW5wdXQg YmVmb3JlIEVPRiBzaWduYWwgbWVhbnMgdGltZSB0byBxdWl0LiAqLworCWlmIChjID09IEVPRiAm JiBpbkJ1Zi0+bGVuID09IDApCisJCXJldHVybiBFT0Y7CisKKwkvKiBBZGQgJ1wwJyB0byBtYWtl IGl0IGxvb2sgdGhlIHNhbWUgYXMgbWVzc2FnZSBjYXNlLiAqLworCWFwcGVuZFN0cmluZ0luZm9D aGFyKGluQnVmLCAoY2hhcikgJ1wwJyk7CisKKwlyZXR1cm4gJ1EnOworfQorCisvKgorICogZ2V0 X2RibmFtZXNfbGlzdF90b19yZXN0b3JlCisgKgorICogVGhpcyB3aWxsIG1hcmsgZm9yIHNraXBw aW5nIGFueSBlbnRyaWVzIGZyb20gZGJuYW1lX29pZF9saXN0IHRoYXQgcGF0dGVybiBtYXRjaCBh bgorICogZW50cnkgaW4gdGhlIGRiX2V4Y2x1ZGVfcGF0dGVybnMgbGlzdC4KKyAqCisgKiBSZXR1 cm5zIHRoZSBudW1iZXIgb2YgZGF0YWJhc2UgdG8gYmUgcmVzdG9yZWQuCisgKgorICovCitzdGF0 aWMgaW50CitnZXRfZGJuYW1lc19saXN0X3RvX3Jlc3RvcmUoUEdjb25uICpjb25uLAorCQkJCQkJ CVNpbXBsZU9pZFN0cmluZ0xpc3QgKiBkYm5hbWVfb2lkX2xpc3QsCisJCQkJCQkJU2ltcGxlU3Ry aW5nTGlzdCBkYl9leGNsdWRlX3BhdHRlcm5zKQoreworCWludAkJCWNvdW50X2RiID0gMDsKKwlQ UUV4cEJ1ZmZlciBxdWVyeTsKKwlQR3Jlc3VsdCAgICpyZXM7CisKKwlxdWVyeSA9IGNyZWF0ZVBR RXhwQnVmZmVyKCk7CisKKwlpZiAoIWNvbm4pCisJCXBnX2xvZ19pbmZvKCJjb25zaWRlcmluZyBQ QVRURVJOIGFzIE5BTUUgZm9yIC0tZXhjbHVkZS1kYXRhYmFzZSBvcHRpb24gYXMgbm8gZGIgY29u bmVjdGlvbiB3aGlsZSBkb2luZyBwZ19yZXN0b3JlLiIpOworCisJLyoKKwkgKiBQcm9jZXNzIG9u ZSBieSBvbmUgYWxsIGRibmFtZXMgYW5kIGlmIHNwZWNpZmllZCB0byBza2lwIHJlc3RvcmluZywg dGhlbgorCSAqIHJlbW92ZSBkYm5hbWUgZnJvbSBsaXN0LgorCSAqLworCWZvciAoU2ltcGxlT2lk U3RyaW5nTGlzdENlbGwgKiBkYl9jZWxsID0gZGJuYW1lX29pZF9saXN0LT5oZWFkOworCQkgZGJf Y2VsbDsgZGJfY2VsbCA9IGRiX2NlbGwtPm5leHQpCisJeworCQlib29sCQlza2lwX2RiX3Jlc3Rv cmUgPSBmYWxzZTsKKworCQlmb3IgKFNpbXBsZVN0cmluZ0xpc3RDZWxsICpwYXRfY2VsbCA9IGRi X2V4Y2x1ZGVfcGF0dGVybnMuaGVhZDsgcGF0X2NlbGw7IHBhdF9jZWxsID0gcGF0X2NlbGwtPm5l eHQpCisJCXsKKwkJCS8qCisJCQkgKiB0aGUgY29uc3RydWN0IHBhdHRlcm4gbWF0Y2hpbmcgcXVl cnk6IFNFTEVDVCAxIFdIRVJFIFhYWAorCQkJICogT1BFUkFUT1IocGdfY2F0YWxvZy5+KSAnXihQ QVRURVJOKSQnIENPTExBVEUgcGdfY2F0YWxvZy5kZWZhdWx0CisJCQkgKgorCQkJICogWFhYIHJl cHJlc2VudHMgdGhlIHN0cmluZyBsaXRlcmFsIGRhdGFiYXNlIG5hbWUgZGVyaXZlZCBmcm9tCisJ CQkgKiB0aGUgZGJuYW1lX29pZF9saXN0LCB3aGljaCBpcyBpbml0aWFsbHkgZXh0cmFjdGVkIGZy b20gdGhlCisJCQkgKiBtYXAuZGF0IGZpbGUgbG9jYXRlZCBpbiB0aGUgYmFja3VwIGRpcmVjdG9y eS4gIHRoYXQncyB3aHkgd2UKKwkJCSAqIG5lZWQgcXVvdGVfbGl0ZXJhbF9jc3RyLgorCQkJICoK KwkJCSAqIElmIG5vIGRiIGNvbm5lY3Rpb24sIHRoZW4gY29uc2lkZXIgUEFUVEVSTiBhcyBOQU1F LgorCQkJICovCisJCQlpZiAocGdfc3RyY2FzZWNtcChkYl9jZWxsLT5zdHIsIHBhdF9jZWxsLT52 YWwpID09IDApCisJCQkJc2tpcF9kYl9yZXN0b3JlID0gdHJ1ZTsKKwkJCWVsc2UgaWYgKGNvbm4p CisJCQl7CisJCQkJaW50CQkJZG90Y250OworCisJCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVl cnksICJTRUxFQ1QgMSAiKTsKKwkJCQlwcm9jZXNzU1FMTmFtZVBhdHRlcm4oY29ubiwgcXVlcnks IHBhdF9jZWxsLT52YWwsIGZhbHNlLAorCQkJCQkJCQkJICBmYWxzZSwgTlVMTCwgcXVvdGVfbGl0 ZXJhbF9jc3RyKGRiX2NlbGwtPnN0ciksCisJCQkJCQkJCQkgIE5VTEwsIE5VTEwsIE5VTEwsICZk b3RjbnQpOworCisJCQkJaWYgKGRvdGNudCA+IDApCisJCQkJeworCQkJCQlwZ19sb2dfZXJyb3Io ImltcHJvcGVyIHF1YWxpZmllZCBuYW1lICh0b28gbWFueSBkb3R0ZWQgbmFtZXMpOiAlcyIsCisJ CQkJCQkJCSBkYl9jZWxsLT5zdHIpOworCQkJCQlQUWZpbmlzaChjb25uKTsKKwkJCQkJZXhpdF9u aWNlbHkoMSk7CisJCQkJfQorCisJCQkJcmVzID0gZXhlY3V0ZVF1ZXJ5KGNvbm4sIHF1ZXJ5LT5k YXRhKTsKKworCQkJCWlmICgoUFFyZXN1bHRTdGF0dXMocmVzKSA9PSBQR1JFU19UVVBMRVNfT0sp ICYmIFBRbnR1cGxlcyhyZXMpKQorCQkJCXsKKwkJCQkJc2tpcF9kYl9yZXN0b3JlID0gdHJ1ZTsK KwkJCQkJcGdfbG9nX2luZm8oImRhdGFiYXNlIFwiJXNcIiBtYXRjaGVzIGV4Y2x1ZGUgcGF0dGVy bjogXCIlc1wiIiwgZGJfY2VsbC0+c3RyLCBwYXRfY2VsbC0+dmFsKTsKKwkJCQl9CisKKwkJCQlQ UWNsZWFyKHJlcyk7CisJCQkJcmVzZXRQUUV4cEJ1ZmZlcihxdWVyeSk7CisJCQl9CisKKwkJCWlm IChza2lwX2RiX3Jlc3RvcmUpCisJCQkJYnJlYWs7CisJCX0KKworCQkvKiBJbmNyZW1lbnQgY291 bnQgaWYgZGF0YWJhc2UgbmVlZHMgdG8gYmUgcmVzdG9yZWQuICovCisJCWlmIChza2lwX2RiX3Jl c3RvcmUpCisJCXsKKwkJCXBnX2xvZ19pbmZvKCJleGNsdWRpbmcgZGF0YWJhc2UgXCIlc1wiIiwg ZGJfY2VsbC0+c3RyKTsKKwkJCWRiX2NlbGwtPm9pZCA9IEludmFsaWRPaWQ7CisJCX0KKwkJZWxz ZQorCQl7CisJCQljb3VudF9kYisrOworCQl9CisJfQorCisJcmV0dXJuIGNvdW50X2RiOworfQor CisvKgorICogZ2V0X2RibmFtZV9vaWRfbGlzdF9mcm9tX21maWxlCisgKgorICogT3BlbiBtYXAu ZGF0IGZpbGUgYW5kIHJlYWQgbGluZSBieSBsaW5lIGFuZCB0aGVuIHByZXBhcmUgYSBsaXN0IG9m IGRhdGFiYXNlCisgKiBuYW1lcyBhbmQgY29ycmVzcG9uZGluZyBkYl9vaWQuCisgKgorICogUmV0 dXJucywgdG90YWwgbnVtYmVyIG9mIGRhdGFiYXNlIG5hbWVzIGluIG1hcC5kYXQgZmlsZS4KKyAq Lworc3RhdGljIGludAorZ2V0X2RibmFtZV9vaWRfbGlzdF9mcm9tX21maWxlKGNvbnN0IGNoYXIg KmR1bXBkaXJwYXRoLCBTaW1wbGVPaWRTdHJpbmdMaXN0ICogZGJuYW1lX29pZF9saXN0KQorewor CUZJTEUJICAgKnBmaWxlOworCWNoYXIJCW1hcF9maWxlX3BhdGhbTUFYUEdQQVRIXTsKKwljaGFy CQlsaW5lW01BWFBHUEFUSF07CisJaW50CQkJY291bnQgPSAwOworCisJLyoKKwkgKiBJZiB0aGVy ZSBpcyBvbmx5IGdsb2JhbC5kYXQgZmlsZSBpbiBkdW1wLCB0aGVuIHJldHVybiBmcm9tIGhlcmUg YXMKKwkgKiB0aGVyZSBpcyBubyBkYXRhYmFzZSB0byByZXN0b3JlLgorCSAqLworCWlmICghZmls ZV9leGlzdHNfaW5fZGlyZWN0b3J5KGR1bXBkaXJwYXRoLCAibWFwLmRhdCIpKQorCXsKKwkJcGdf bG9nX2luZm8oImRhdGFiYXNlcyByZXN0b3JpbmcgaXMgc2tpcHBlZCBhcyBtYXAuZGF0IGZpbGUg aXMgbm90IHByZXNlbnQgaW4gXCIlc1wiIiwgZHVtcGRpcnBhdGgpOworCQlyZXR1cm4gMDsKKwl9 CisKKwlzbnByaW50ZihtYXBfZmlsZV9wYXRoLCBNQVhQR1BBVEgsICIlcy9tYXAuZGF0IiwgZHVt cGRpcnBhdGgpOworCisJLyogT3BlbiBtYXAuZGF0IGZpbGUuICovCisJcGZpbGUgPSBmb3Blbiht YXBfZmlsZV9wYXRoLCBQR19CSU5BUllfUik7CisKKwlpZiAocGZpbGUgPT0gTlVMTCkKKwkJcGdf ZmF0YWwoImNvdWxkIG5vdCBvcGVuIG1hcC5kYXQgZmlsZTogXCIlc1wiIiwgbWFwX2ZpbGVfcGF0 aCk7CisKKwkvKiBBcHBlbmQgYWxsIHRoZSBkYm5hbWUgYW5kIGRiX29pZCB0byB0aGUgbGlzdC4g Ki8KKwl3aGlsZSAoKGZnZXRzKGxpbmUsIE1BWFBHUEFUSCwgcGZpbGUpKSAhPSBOVUxMKQorCXsK KwkJT2lkCQkJZGJfb2lkID0gSW52YWxpZE9pZDsKKwkJY2hhcgkJZGJfb2lkX3N0cltNQVhQR1BB VEggKyAxXSA9IHsnXDAnfTsKKwkJY2hhcgkJZGJuYW1lW01BWFBHUEFUSCArIDFdID0geydcMCd9 OworCisJCS8qIEV4dHJhY3QgZGJvaWQuICovCisJCXNzY2FuZihsaW5lLCAiJXUiLCAmZGJfb2lk KTsKKwkJc3NjYW5mKGxpbmUsICIlMjBzIiwgZGJfb2lkX3N0cik7CisKKwkJLyogTm93IGNvcHkg ZGJuYW1lLiAqLworCQlzdHJjcHkoZGJuYW1lLCBsaW5lICsgc3RybGVuKGRiX29pZF9zdHIpICsg MSk7CisKKwkJLyogUmVtb3ZlIFxuIGZyb20gZGJhbm1lLiAqLworCQlkYm5hbWVbc3RybGVuKGRi bmFtZSkgLSAxXSA9ICdcMCc7CisKKwkJcGdfbG9nX2luZm8oImZvdW5kIGRhdGFiYXNlIFwiJXNc IiAoT0lEOiAldSkgaW4gbWFwLmRhdCBmaWxlIHdoaWxlIHJlc3RvcmluZy4iLCBkYm5hbWUsIGRi X29pZCk7CisKKwkJLyogUmVwb3J0IGVycm9yIGFuZCBleGl0IGlmIHRoZSBmaWxlIGhhcyBhbnkg Y29ycnVwdGVkIGRhdGEuICovCisJCWlmICghT2lkSXNWYWxpZChkYl9vaWQpIHx8IHN0cmxlbihk Ym5hbWUpID09IDApCisJCQlwZ19mYXRhbCgiaW52YWxpZCBlbnRyeSBpbiBtYXAuZGF0IGZpbGUg YXQgbGluZSA6ICVkIiwgY291bnQgKyAxKTsKKworCQkvKgorCQkgKiBYWFggOiBiZWZvcmUgYWRk aW5nIGRibmFtZSBpbnRvIGxpc3QsIHdlIGNhbiB2ZXJpZnkgdGhhdCB0aGlzIGRiCisJCSAqIG5l ZWRzIHRvIHNraXBwZWQgZm9yIHJlc3RvcmUgb3Igbm90IGJ1dCBhcyBvZiBub3csIHdlIGFyZSBt YWtpbmcgYQorCQkgKiBsaXN0IG9mIGFsbCB0aGUgZGF0YWJhc2VzLgorCQkgKi8KKwkJc2ltcGxl X29pZF9zdHJpbmdfbGlzdF9hcHBlbmQoZGJuYW1lX29pZF9saXN0LCBkYl9vaWQsIGRibmFtZSk7 CisJCWNvdW50Kys7CisJfQorCisJLyogQ2xvc2UgbWFwLmRhdCBmaWxlLiAqLworCWZjbG9zZShw ZmlsZSk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qCisgKiByZXN0b3JlX2FsbF9kYXRhYmFz ZXMKKyAqCisgKiBUaGlzIHdpbGwgcmVzdG9yZSBkYXRhYmFzZXMgdGhvc2UgZHVtcHMgYXJlIHBy ZXNlbnQgaW4KKyAqIGRpcmVjdG9yeSBiYXNlZCBvbiBtYXAuZGF0IGZpbGUgbWFwcGluZy4KKyAq CisgKiBUaGlzIHdpbGwgc2tpcCByZXN0b3JpbmcgZm9yIGRhdGFiYXNlcyB0aGF0IGFyZSBzcGVj aWZpZWQgd2l0aAorICogZXhjbHVkZS1kYXRhYmFzZSBvcHRpb24uCisgKgorICogcmV0dXJucywg bnVtYmVyIG9mIGVycm9ycyB3aGlsZSBkb2luZyByZXN0b3JlLgorICovCitzdGF0aWMgaW50City ZXN0b3JlX2FsbF9kYXRhYmFzZXMoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICpkdW1wZGlycGF0 aCwKKwkJCQkJU2ltcGxlU3RyaW5nTGlzdCBkYl9leGNsdWRlX3BhdHRlcm5zLCBSZXN0b3JlT3B0 aW9ucyAqb3B0cywKKwkJCQkJaW50IG51bVdvcmtlcnMpCit7CisJU2ltcGxlT2lkU3RyaW5nTGlz dCBkYm5hbWVfb2lkX2xpc3QgPSB7TlVMTCwgTlVMTH07CisJaW50CQkJbnVtX2RiX3Jlc3RvcmUg PSAwOworCWludAkJCW51bV90b3RhbF9kYjsKKwlpbnQJCQluX2Vycm9yc190b3RhbDsKKwlpbnQJ CQljb3VudCA9IDA7CisJY2hhcgkJKmNvbm5lY3RlZF9kYiA9IE5VTEw7CisJYm9vbAkJZHVtcERh dGEgPSBvcHRzLT5kdW1wRGF0YTsKKwlib29sCQlkdW1wU2NoZW1hID0gb3B0cy0+ZHVtcFNjaGVt YTsKKwlib29sCQlkdW1wU3RhdGlzdGljcyA9IG9wdHMtPmR1bXBTY2hlbWE7CisKKwkvKiBTYXZl IGRiIG5hbWUgdG8gcmV1c2UgaXQgZm9yIGFsbCB0aGUgZGF0YWJhc2UuICovCisJaWYgKG9wdHMt PmNwYXJhbXMuZGJuYW1lKQorCQljb25uZWN0ZWRfZGIgPSBvcHRzLT5jcGFyYW1zLmRibmFtZTsK KworCW51bV90b3RhbF9kYiA9IGdldF9kYm5hbWVfb2lkX2xpc3RfZnJvbV9tZmlsZShkdW1wZGly cGF0aCwgJmRibmFtZV9vaWRfbGlzdCk7CisKKwkvKgorCSAqIElmIG1hcC5kYXQgaGFzIG5vIGVu dHJ5LCByZXR1cm4gZnJvbSBoZXJlIGFmdGVyIHByb2Nlc3NpbmcgZ2xvYmFsLmRhdAorCSAqIGZp bGUuCisJICovCisJaWYgKGRibmFtZV9vaWRfbGlzdC5oZWFkID09IE5VTEwpCisJCXJldHVybiBw cm9jZXNzX2dsb2JhbF9zcWxfY29tbWFuZHMoY29ubiwgZHVtcGRpcnBhdGgsIG9wdHMtPmZpbGVu YW1lKTsKKworCXBnX2xvZ19pbmZvKCJmb3VuZCB0b3RhbCAlZCBkYXRhYmFzZSBuYW1lcyBpbiBt YXAuZGF0IGZpbGUiLCBudW1fdG90YWxfZGIpOworCisJaWYgKCFjb25uKQorCXsKKwkJcGdfbG9n X2luZm8oInRyeWluZyB0byBjb25uZWN0IGRhdGFiYXNlIFwicG9zdGdyZXNcIiAgdG8gZHVtcCBp bnRvIG91dCBmaWxlIik7CisKKwkJY29ubiA9IENvbm5lY3REYXRhYmFzZSgicG9zdGdyZXMiLCBO VUxMLCBvcHRzLT5jcGFyYW1zLnBnaG9zdCwKKwkJCQkJCQkgICBvcHRzLT5jcGFyYW1zLnBncG9y dCwgb3B0cy0+Y3BhcmFtcy51c2VybmFtZSwgVFJJX0RFRkFVTFQsCisJCQkJCQkJICAgZmFsc2Us IHByb2duYW1lLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKKworCQkvKiBUcnkgd2l0aCB0ZW1w bGF0ZTEuICovCisJCWlmICghY29ubikKKwkJeworCQkJcGdfbG9nX2luZm8oInRyeWluZyB0byBj b25uZWN0IGRhdGFiYXNlIFwidGVtcGxhdGUxXCIgYXMgZmFpbGVkIHRvIGNvbm5lY3QgdG8gZGF0 YWJhc2UgXCJwb3N0Z3Jlc1wiIHRvIGR1bXAgaW50byBvdXQgZmlsZSIpOworCisJCQljb25uID0g Q29ubmVjdERhdGFiYXNlKCJ0ZW1wbGF0ZTEiLCBOVUxMLCBvcHRzLT5jcGFyYW1zLnBnaG9zdCwK KwkJCQkJCQkJICAgb3B0cy0+Y3BhcmFtcy5wZ3BvcnQsIG9wdHMtPmNwYXJhbXMudXNlcm5hbWUs IFRSSV9ERUZBVUxULAorCQkJCQkJCQkgICBmYWxzZSwgcHJvZ25hbWUsIE5VTEwsIE5VTEwsIE5V TEwsIE5VTEwpOworCQl9CisJfQorCisJLyoKKwkgKiBwcm9jZXNzaW5nIHBnX3Jlc3RvcmUgLS1l eGNsdWRlLWRhdGFiYXNlPVBBVFRFUk4vTkFNRSBpZiBubyBjb25uZWN0aW9uLgorCSAqLworCW51 bV9kYl9yZXN0b3JlID0gZ2V0X2RibmFtZXNfbGlzdF90b19yZXN0b3JlKGNvbm4sICZkYm5hbWVf b2lkX2xpc3QsCisJCQkJCQkJCQkJCQkgZGJfZXhjbHVkZV9wYXR0ZXJucyk7CisKKwkvKiBPcGVu IGdsb2JhbC5kYXQgZmlsZSBhbmQgZXhlY3V0ZS9hcHBlbmQgYWxsIHRoZSBnbG9iYWwgc3FsIGNv bW1hbmRzLiAqLworCW5fZXJyb3JzX3RvdGFsID0gcHJvY2Vzc19nbG9iYWxfc3FsX2NvbW1hbmRz KGNvbm4sIGR1bXBkaXJwYXRoLCBvcHRzLT5maWxlbmFtZSk7CisKKwkvKiBDbG9zZSB0aGUgZGIg Y29ubmVjdGlvbiBhcyB3ZSBhcmUgZG9uZSB3aXRoIGdsb2JhbHMgYW5kIHBhdHRlcm5zLiAqLwor CWlmIChjb25uKQorCQlQUWZpbmlzaChjb25uKTsKKworCS8qIEV4aXQgaWYgbm8gZGIgbmVlZHMg dG8gYmUgcmVzdG9yZWQuICovCisJaWYgKGRibmFtZV9vaWRfbGlzdC5oZWFkID09IE5VTEwgfHwg bnVtX2RiX3Jlc3RvcmUgPT0gMCkKKwl7CisJCXBnX2xvZ19pbmZvKCJubyBkYXRhYmFzZSBuZWVk cyB0byByZXN0b3JlIG91dCBvZiAlZCBkYXRhYmFzZXMiLCBudW1fdG90YWxfZGIpOworCQlyZXR1 cm4gbl9lcnJvcnNfdG90YWw7CisJfQorCisJcGdfbG9nX2luZm8oIm5lZWRzIHRvIHJlc3RvcmUg JWQgZGF0YWJhc2VzIG91dCBvZiAlZCBkYXRhYmFzZXMiLCBudW1fZGJfcmVzdG9yZSwgbnVtX3Rv dGFsX2RiKTsKKworCS8qCisJICogVGlsbCBub3csIHdlIG1hZGUgYSBsaXN0IG9mIGRhdGFiYXNl cywgdGhvc2UgbmVlZHMgdG8gYmUgcmVzdG9yZWQgYWZ0ZXIKKwkgKiBza2lwcGluZyBuYW1lcyBv ZiBleGNsdWRlLWRhdGFiYXNlLiAgTm93IHdlIGNhbiBsYXVuY2ggcGFyYWxsZWwgd29ya2Vycwor CSAqIHRvIHJlc3RvcmUgdGhlc2UgZGF0YWJhc2VzLgorCSAqLworCWZvciAoU2ltcGxlT2lkU3Ry aW5nTGlzdENlbGwgKiBkYl9jZWxsID0gZGJuYW1lX29pZF9saXN0LmhlYWQ7CisJCSBkYl9jZWxs OyBkYl9jZWxsID0gZGJfY2VsbC0+bmV4dCkKKwl7CisJCWNoYXIJCXN1YmRpcnBhdGhbTUFYUEdQ QVRIXTsKKwkJY2hhcgkJc3ViZGlyZGJwYXRoW01BWFBHUEFUSF07CisJCWNoYXIJCWRiZmlsZW5h bWVbTUFYUEdQQVRIXTsKKwkJaW50CQkJbl9lcnJvcnM7CisKKwkJLyogaWdub3JlIGRicyBtYXJr ZWQgZm9yIHNraXBwaW5nICovCisJCWlmIChkYl9jZWxsLT5vaWQgPT0gSW52YWxpZE9pZCkKKwkJ CWNvbnRpbnVlOworCisJCS8qCisJCSAqIFdlIG5lZWQgdG8gcmVzZXQgb3ZlcnJpZGVfZGJuYW1l IHNvIHRoYXQgb2JqZWN0cyBjYW4gYmUgcmVzdG9yZWQKKwkJICogaW50byBhbHJlYWR5IGNyZWF0 ZWQgZGF0YWJhc2UuICh1c2VkIHdpdGggLWQvLS1kYm5hbWUgb3B0aW9uKQorCQkgKi8KKwkJaWYg KG9wdHMtPmNwYXJhbXMub3ZlcnJpZGVfZGJuYW1lKQorCQl7CisJCQlwZnJlZShvcHRzLT5jcGFy YW1zLm92ZXJyaWRlX2RibmFtZSk7CisJCQlvcHRzLT5jcGFyYW1zLm92ZXJyaWRlX2RibmFtZSA9 IE5VTEw7CisJCX0KKworCQlzbnByaW50ZihzdWJkaXJkYnBhdGgsIE1BWFBHUEFUSCwgIiVzL2Rh dGFiYXNlcyIsIGR1bXBkaXJwYXRoKTsKKworCQkvKgorCQkgKiBWYWxpZGF0ZSBkYXRhYmFzZSBk dW1wIGZpbGUuICBJZiB0aGVyZSBpcyAudGFyIG9yIC5kbXAgZmlsZSBleGlzdAorCQkgKiB0aGVu IGNvbnNpZGVyIHBhcnRpY3VsYXIgZmlsZSwgb3RoZXJ3aXNlIGp1c3QgYXBwZW5kIGRib2lkIHRv IHRoZQorCQkgKiBkYXRhYmFzZXMgZm9sZGVyLgorCQkgKi8KKwkJc25wcmludGYoZGJmaWxlbmFt ZSwgTUFYUEdQQVRILCAiJXUudGFyIiwgZGJfY2VsbC0+b2lkKTsKKwkJaWYgKGZpbGVfZXhpc3Rz X2luX2RpcmVjdG9yeShzdWJkaXJkYnBhdGgsIGRiZmlsZW5hbWUpKQorCQkJc25wcmludGYoc3Vi ZGlycGF0aCwgTUFYUEdQQVRILCAiJXMvZGF0YWJhc2VzLyV1LnRhciIsIGR1bXBkaXJwYXRoLCBk Yl9jZWxsLT5vaWQpOworCQllbHNlCisJCXsKKwkJCXNucHJpbnRmKGRiZmlsZW5hbWUsIE1BWFBH UEFUSCwgIiV1LmRtcCIsIGRiX2NlbGwtPm9pZCk7CisKKwkJCWlmIChmaWxlX2V4aXN0c19pbl9k aXJlY3Rvcnkoc3ViZGlyZGJwYXRoLCBkYmZpbGVuYW1lKSkKKwkJCQlzbnByaW50ZihzdWJkaXJw YXRoLCBNQVhQR1BBVEgsICIlcy9kYXRhYmFzZXMvJXUuZG1wIiwgZHVtcGRpcnBhdGgsIGRiX2Nl bGwtPm9pZCk7CisJCQllbHNlCisJCQkJc25wcmludGYoc3ViZGlycGF0aCwgTUFYUEdQQVRILCAi JXMvZGF0YWJhc2VzLyV1IiwgZHVtcGRpcnBhdGgsIGRiX2NlbGwtPm9pZCk7CisJCX0KKworCQlw Z19sb2dfaW5mbygicmVzdG9yaW5nIGRhdGFiYXNlIFwiJXNcIiIsIGRiX2NlbGwtPnN0cik7CisK KwkJLyogSWYgZGF0YWJhc2UgaXMgYWxyZWFkeSBjcmVhdGVkLCB0aGVuIGRvbid0IHNldCBjcmVh dGVEQiBmbGFnLiAqLworCQlpZiAob3B0cy0+Y3BhcmFtcy5kYm5hbWUpCisJCXsKKwkJCVBHY29u biAqdGVzdF9jb25uOworCisJCQl0ZXN0X2Nvbm4gPSBDb25uZWN0RGF0YWJhc2UoZGJfY2VsbC0+ c3RyLCBOVUxMLCBvcHRzLT5jcGFyYW1zLnBnaG9zdCwKKwkJCQkJCQkJCQlvcHRzLT5jcGFyYW1z LnBncG9ydCwgb3B0cy0+Y3BhcmFtcy51c2VybmFtZSwgVFJJX0RFRkFVTFQsCisJCQkJCQkJCQkJ ZmFsc2UsIHByb2duYW1lLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKKwkJCWlmICh0ZXN0X2Nv bm4pCisJCQl7CisJCQkJUFFmaW5pc2godGVzdF9jb25uKTsKKworCQkJCS8qIFVzZSBhbHJlYWR5 IGNyZWF0ZWQgZGF0YWJhc2UgZm9yIGNvbm5lY3Rpb24uICovCisJCQkJb3B0cy0+Y3JlYXRlREIg PSAwOworCQkJCW9wdHMtPmNwYXJhbXMuZGJuYW1lID0gZGJfY2VsbC0+c3RyOworCQkJfQorCQkJ ZWxzZQorCQkJeworCQkJCS8qIHdlJ2xsIGhhdmUgdG8gY3JlYXRlIGl0ICovCisJCQkJb3B0cy0+ Y3JlYXRlREIgPSAxOworCQkJCW9wdHMtPmNwYXJhbXMuZGJuYW1lID0gY29ubmVjdGVkX2RiOwor CQkJfQorCQl9CisKKwkJLyoKKwkJICogUmVzZXQgZmxhZ3MgLSBtaWdodCBoYXZlIGJlZW4gcmVz ZXQgaW4gcGdfYmFja3VwX2FyY2hpdmVyLmMgYnkgdGhlCisJCSAqIHByZXZpb3VzIHJlc3RvcmUu CisJCSAqLworCQlvcHRzLT5kdW1wRGF0YSA9IGR1bXBEYXRhOworCQlvcHRzLT5kdW1wU2NoZW1h ID0gZHVtcFNjaGVtYTsKKwkJb3B0cy0+ZHVtcFN0YXRpc3RpY3MgPSBkdW1wU3RhdGlzdGljczsK KworCQkvKiBSZXN0b3JlIHNpbmdsZSBkYXRhYmFzZS4gKi8KKwkJbl9lcnJvcnMgPSByZXN0b3Jl X29uZV9kYXRhYmFzZShzdWJkaXJwYXRoLCBvcHRzLCBudW1Xb3JrZXJzLCB0cnVlLCBjb3VudCk7 CisKKwkJLyogUHJpbnQgYSBzdW1tYXJ5IG9mIGlnbm9yZWQgZXJyb3JzIGR1cmluZyBzaW5nbGUg ZGF0YWJhc2UgcmVzdG9yZS4gKi8KKwkJaWYgKG5fZXJyb3JzKQorCQl7CisJCQluX2Vycm9yc190 b3RhbCArPSBuX2Vycm9yczsKKwkJCXBnX2xvZ193YXJuaW5nKCJlcnJvcnMgaWdub3JlZCBvbiBk YXRhYmFzZSBcIiVzXCIgcmVzdG9yZTogJWQiLCBkYl9jZWxsLT5zdHIsIG5fZXJyb3JzKTsKKwkJ fQorCisJCWNvdW50Kys7CisJfQorCisJLyogTG9nIG51bWJlciBvZiBwcm9jZXNzZWQgZGF0YWJh c2VzLiAqLworCXBnX2xvZ19pbmZvKCJudW1iZXIgb2YgcmVzdG9yZWQgZGF0YWJhc2VzIGFyZSAl ZCIsIG51bV9kYl9yZXN0b3JlKTsKKworCS8qIEZyZWUgZGJuYW1lIGFuZCBkYm9pZCBsaXN0LiAq LworCXNpbXBsZV9vaWRfc3RyaW5nX2xpc3RfZGVzdHJveSgmZGJuYW1lX29pZF9saXN0KTsKKwor CXJldHVybiBuX2Vycm9yc190b3RhbDsKK30KKworLyoKKyAqIHByb2Nlc3NfZ2xvYmFsX3NxbF9j b21tYW5kcworICoKKyAqIFRoaXMgd2lsbCBvcGVuIGdsb2JhbC5kYXQgZmlsZSBhbmQgd2lsbCBl eGVjdXRlIGFsbCBnbG9iYWwgc3FsIGNvbW1hbmRzIG9uZQorICogYnkgb25lIHN0YXRlbWVudC4K KyAqIFNlbWljb2xvbiBpcyBjb25zaWRlcmVkIGFzIHN0YXRlbWVudCB0ZXJtaW5hdG9yLiAgSWYg b3V0ZmlsZSBpcyBwYXNzZWQsIHRoZW4KKyAqIHRoaXMgd2lsbCBjb3B5IGFsbCBzcWwgY29tbWFu ZHMgaW50byBvdXRmaWxlIHJhdGhlciB0aGVuIGV4ZWN1dGluZyB0aGVtLgorICoKKyAqIHJldHVy bnMgdGhlIG51bWJlciBvZiBlcnJvcnMgd2hpbGUgcHJvY2Vzc2luZyBnbG9iYWwuZGF0CisgKi8K K3N0YXRpYyBpbnQKK3Byb2Nlc3NfZ2xvYmFsX3NxbF9jb21tYW5kcyhQR2Nvbm4gKmNvbm4sIGNv bnN0IGNoYXIgKmR1bXBkaXJwYXRoLCBjb25zdCBjaGFyICpvdXRmaWxlKQoreworCWNoYXIJCWds b2JhbF9maWxlX3BhdGhbTUFYUEdQQVRIXTsKKwlQR3Jlc3VsdCAgICpyZXN1bHQ7CisJU3RyaW5n SW5mb0RhdGEgc3Fsc3RhdGVtZW50LCB1c2VyX2NyZWF0ZTsKKwlGSUxFCSAgICpwZmlsZTsKKwlp bnQJCQluX2Vycm9ycyA9IDA7CisKKwlzbnByaW50ZihnbG9iYWxfZmlsZV9wYXRoLCBNQVhQR1BB VEgsICIlcy9nbG9iYWwuZGF0IiwgZHVtcGRpcnBhdGgpOworCisJLyogT3BlbiBnbG9iYWwuZGF0 IGZpbGUuICovCisJcGZpbGUgPSBmb3BlbihnbG9iYWxfZmlsZV9wYXRoLCBQR19CSU5BUllfUik7 CisKKwlpZiAocGZpbGUgPT0gTlVMTCkKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIGdsb2Jh bC5kYXQgZmlsZTogXCIlc1wiIiwgZ2xvYmFsX2ZpbGVfcGF0aCk7CisKKwkvKgorCSAqIElmIG91 dGZpbGUgaXMgZ2l2ZW4sIHRoZW4ganVzdCBjb3B5IGFsbCBnbG9iYWwuZGF0IGZpbGUgZGF0YSBp bnRvCisJICogb3V0ZmlsZS4KKwkgKi8KKwlpZiAob3V0ZmlsZSkKKwl7CisJCWNvcHlfb3JfcHJp bnRfZ2xvYmFsX2ZpbGUob3V0ZmlsZSwgcGZpbGUpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBJ bml0IHNxbHN0YXRlbWVudCB0byBhcHBlbmQgY29tbWFuZHMuICovCisJaW5pdFN0cmluZ0luZm8o JnNxbHN0YXRlbWVudCk7CisKKwkvKiBjcmVhdGlvbiBzdGF0ZW1lbnQgZm9yIG91ciBjdXJyZW50 IHJvbGUgKi8KKwlpbml0U3RyaW5nSW5mbygmdXNlcl9jcmVhdGUpOworCWFwcGVuZFN0cmluZ0lu Zm9TdHJpbmcoJnVzZXJfY3JlYXRlLCAiQ1JFQVRFIFJPTEUgIik7CisJLyogc2hvdWxkIHVzZSBm bXRJZCBoZXJlLCBidXQgd2UgZG9uJ3Qga25vdyB0aGUgZW5jb2RpbmcgKi8KKwlhcHBlbmRTdHJp bmdJbmZvU3RyaW5nKCZ1c2VyX2NyZWF0ZSwgUFF1c2VyKGNvbm4pKTsKKwlhcHBlbmRTdHJpbmdJ bmZvU3RyaW5nKCZ1c2VyX2NyZWF0ZSwgIjsiKTsKKworCS8qIFByb2Nlc3MgZmlsZSB0aWxsIEVP RiBhbmQgZXhlY3V0ZSBzcWwgc3RhdGVtZW50cy4gKi8KKwl3aGlsZSAocmVhZF9vbmVfc3RhdGVt ZW50KCZzcWxzdGF0ZW1lbnQsIHBmaWxlKSAhPSBFT0YpCisJeworCQkvKiBkb24ndCB0cnkgdG8g Y3JlYXRlIHRoZSByb2xlIHdlIGFyZSBjb25uZWN0ZWQgYXMgKi8KKwkJaWYgKHN0cnN0cihzcWxz dGF0ZW1lbnQuZGF0YSwgdXNlcl9jcmVhdGUuZGF0YSkpCisJCQljb250aW51ZTsKKworCQlwZ19s b2dfaW5mbygiZXhlY3V0aW5nIHF1ZXJ5OiAlcyIsIHNxbHN0YXRlbWVudC5kYXRhKTsKKwkJcmVz dWx0ID0gUFFleGVjKGNvbm4sIHNxbHN0YXRlbWVudC5kYXRhKTsKKworCQlzd2l0Y2ggKFBRcmVz dWx0U3RhdHVzKHJlc3VsdCkpCisJCXsKKwkJCWNhc2UgUEdSRVNfQ09NTUFORF9PSzoKKwkJCWNh c2UgUEdSRVNfVFVQTEVTX09LOgorCQkJY2FzZSBQR1JFU19FTVBUWV9RVUVSWToKKwkJCQlicmVh azsKKwkJCWRlZmF1bHQ6CisJCQkJbl9lcnJvcnMrKzsKKwkJCQlwZ19sb2dfZXJyb3IoImNvdWxk IG5vdCBleGVjdXRlIHF1ZXJ5OiBcIiVzXCIgXG5Db21tYW5kIHdhczogXCIlc1wiIiwgUFFlcnJv ck1lc3NhZ2UoY29ubiksIHNxbHN0YXRlbWVudC5kYXRhKTsKKwkJfQorCQlQUWNsZWFyKHJlc3Vs dCk7CisJfQorCisJLyogUHJpbnQgYSBzdW1tYXJ5IG9mIGlnbm9yZWQgZXJyb3JzIGR1cmluZyBn bG9iYWwuZGF0LiAqLworCWlmIChuX2Vycm9ycykKKwkJcGdfbG9nX3dhcm5pbmcoImVycm9ycyBp Z25vcmVkIG9uIGdsb2JhbC5kYXQgZmlsZSByZXN0b3JlOiAlZCIsIG5fZXJyb3JzKTsKKworCWZj bG9zZShwZmlsZSk7CisKKwlyZXR1cm4gbl9lcnJvcnM7Cit9CisKKy8qCisgKiBjb3B5X29yX3By aW50X2dsb2JhbF9maWxlCisgKgorICogVGhpcyB3aWxsIGNvcHkgZ2xvYmFsLmRhdCBmaWxlIGlu dG8gb3V0IGZpbGUuICBJZiAiLSIgaXMgdXNlZCBhcyBvdXRmaWxlLAorICogdGhlbiBwcmludCBj b21tYW5kcyB0byB0aGUgc3Rkb3V0LgorICovCitzdGF0aWMgdm9pZAorY29weV9vcl9wcmludF9n bG9iYWxfZmlsZShjb25zdCBjaGFyICpvdXRmaWxlLCBGSUxFICpwZmlsZSkKK3sKKwljaGFyCQlv dXRfZmlsZV9wYXRoW01BWFBHUEFUSF07CisJRklMRQkgICAqT1BGOworCWludAkJCWM7CisKKwkv KiAiLSIgaXMgdXNlZCBmb3Igc3Rkb3V0LiAqLworCWlmIChzdHJjbXAob3V0ZmlsZSwgIi0iKSA9 PSAwKQorCQlPUEYgPSBzdGRvdXQ7CisJZWxzZQorCXsKKwkJc25wcmludGYob3V0X2ZpbGVfcGF0 aCwgTUFYUEdQQVRILCAiJXMiLCBvdXRmaWxlKTsKKwkJT1BGID0gZm9wZW4ob3V0X2ZpbGVfcGF0 aCwgUEdfQklOQVJZX1cpOworCisJCWlmIChPUEYgPT0gTlVMTCkKKwkJeworCQkJZmNsb3NlKHBm aWxlKTsKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBmaWxlOiBcIiVzXCIiLCBvdXRmaWxl KTsKKwkJfQorCX0KKworCS8qIEFwcGVuZCBnbG9iYWwuZGF0IGludG8gb3V0IGZpbGUgb3IgcHJp bnQgdG8gdGhlIHN0ZG91dC4gKi8KKwl3aGlsZSAoKGMgPSBmZ2V0YyhwZmlsZSkpICE9IEVPRikK KwkJZnB1dGMoYywgT1BGKTsKKworCWZjbG9zZShwZmlsZSk7CisKKwkvKiBDbG9zZSBvdXQgZmls ZS4gKi8KKwlpZiAoc3RyY21wKG91dGZpbGUsICItIikgIT0gMCkKKwkJZmNsb3NlKE9QRik7Cit9 CisKKy8qCisgKiBxdW90ZV9saXRlcmFsX2ludGVybmFsCisgKi8KK3N0YXRpYyBzaXplX3QKK3F1 b3RlX2xpdGVyYWxfaW50ZXJuYWwoY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBs ZW4pCit7CisJY29uc3QgY2hhciAqczsKKwljaGFyCSAgICpzYXZlZHN0ID0gZHN0OworCisJZm9y IChzID0gc3JjOyBzIDwgc3JjICsgbGVuOyBzKyspCisJeworCQlpZiAoKnMgPT0gJ1xcJykKKwkJ eworCQkJKmRzdCsrID0gRVNDQVBFX1NUUklOR19TWU5UQVg7CisJCQlicmVhazsKKwkJfQorCX0K KworCSpkc3QrKyA9ICdcJyc7CisJd2hpbGUgKGxlbi0tID4gMCkKKwl7CisJCWlmIChTUUxfU1RS X0RPVUJMRSgqc3JjLCB0cnVlKSkKKwkJCSpkc3QrKyA9ICpzcmM7CisJCSpkc3QrKyA9ICpzcmMr KzsKKwl9CisJKmRzdCsrID0gJ1wnJzsKKworCXJldHVybiBkc3QgLSBzYXZlZHN0OworfQorCisv KgorICogcXVvdGVfbGl0ZXJhbF9jc3RyCisgKgorICoJICByZXR1cm5zIGEgcHJvcGVybHkgcXVv dGVkIGxpdGVyYWwKKyAqIGNvcGllZCBmcm9tIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9xdW90ZS5j CisgKi8KK3N0YXRpYyBjaGFyICoKK3F1b3RlX2xpdGVyYWxfY3N0cihjb25zdCBjaGFyICpyYXdz dHIpCit7CisJY2hhcgkgICAqcmVzdWx0OworCWludAkJCWxlbjsKKwlpbnQJCQluZXdsZW47CisK KwlsZW4gPSBzdHJsZW4ocmF3c3RyKTsKKworCS8qIFdlIG1ha2UgYSB3b3JzdC1jYXNlIHJlc3Vs dCBhcmVhOyB3YXN0aW5nIGEgbGl0dGxlIHNwYWNlIGlzIE9LICovCisJcmVzdWx0ID0gcGdfbWFs bG9jKGxlbiAqIDIgKyAzICsgMSk7CisKKwluZXdsZW4gPSBxdW90ZV9saXRlcmFsX2ludGVybmFs KHJlc3VsdCwgcmF3c3RyLCBsZW4pOworCXJlc3VsdFtuZXdsZW5dID0gJ1wwJzsKKworCXJldHVy biByZXN1bHQ7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvdC8wMDFfYmFzaWMucGwg Yi9zcmMvYmluL3BnX2R1bXAvdC8wMDFfYmFzaWMucGwKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2Rl IDEwMDc1NQppbmRleCAzN2Q4OTNkNWU2YS4uMGJiY2RiZTg0YTcKLS0tIGEvc3JjL2Jpbi9wZ19k dW1wL3QvMDAxX2Jhc2ljLnBsCisrKyBiL3NyYy9iaW4vcGdfZHVtcC90LzAwMV9iYXNpYy5wbApA QCAtMjM3LDYgKzIzNywxMSBAQCBjb21tYW5kX2ZhaWxzX2xpa2UoCiAJJ3BnX3Jlc3RvcmU6IG9w dGlvbnMgLUNcLy0tY3JlYXRlIGFuZCAtMVwvLS1zaW5nbGUtdHJhbnNhY3Rpb24gY2Fubm90IGJl IHVzZWQgdG9nZXRoZXInCiApOwogCitjb21tYW5kX2ZhaWxzX2xpa2UoCisJWyAncGdfcmVzdG9y ZScsICctLWV4Y2x1ZGUtZGF0YWJhc2U9Zm9vJywgJy0tZ2xvYmFscy1vbmx5JywgJy1kJywgJ3h4 eCcgXSwKKwlxci9cUXBnX3Jlc3RvcmU6IGVycm9yOiBvcHRpb24gLS1leGNsdWRlLWRhdGFiYXNl IGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggLWdcLy0tZ2xvYmFscy1vbmx5XEUvLAorCSdw Z19yZXN0b3JlOiBvcHRpb24gLS1leGNsdWRlLWRhdGFiYXNlIGNhbm5vdCBiZSB1c2VkIHRvZ2V0 aGVyIHdpdGggLWcvLS1nbG9iYWxzLW9ubHknKTsKKwogIyBhbHNvIGZhaWxzIGZvciAtciBhbmQg LXQsIGJ1dCBpdCBzZWVtcyBwb2ludGxlc3MgdG8gYWRkIG1vcmUgdGVzdHMgZm9yIHRob3NlLgog Y29tbWFuZF9mYWlsc19saWtlKAogCVsgJ3BnX2R1bXBhbGwnLCAnLS1leGNsdWRlLWRhdGFiYXNl PWZvbycsICctLWdsb2JhbHMtb25seScgXSwKQEAgLTI0NCw0ICsyNDksOCBAQCBjb21tYW5kX2Zh aWxzX2xpa2UoCiAJJ3BnX2R1bXBhbGw6IG9wdGlvbiAtLWV4Y2x1ZGUtZGF0YWJhc2UgY2Fubm90 IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAtZy8tLWdsb2JhbHMtb25seScKICk7CiAKK2NvbW1hbmRf ZmFpbHNfbGlrZSgKKwlbICdwZ19kdW1wYWxsJywgJy0tZm9ybWF0JywgJ3gnIF0sCisJcXIvXFFw Z19kdW1wYWxsOiBlcnJvcjogdW5yZWNvZ25pemVkIGFyY2hpdmUgZm9ybWF0ICJ4IjtcRS8sCisJ J3BnX2R1bXBhbGw6IHVucmVjb2duaXplZCBhcmNoaXZlIGZvcm1hdCcpOwogZG9uZV90ZXN0aW5n KCk7CmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IGI2NmNlY2Q4Nzk5Li45NWVjOGZiYjE0 MSAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3Jj L3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTI3MzIsNiArMjczMiw4IEBAIFNodXRk b3duTW9kZQogU2lnblRTVmVjdG9yCiBTaW1wbGVBY3Rpb25MaXN0CiBTaW1wbGVBY3Rpb25MaXN0 Q2VsbAorU2ltcGxlRGF0YWJhc2VPaWRMaXN0CitTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsCiBT aW1wbGVFY29udGV4dFN0YWNrRW50cnkKIFNpbXBsZU9pZExpc3QKIFNpbXBsZU9pZExpc3RDZWxs Ci0tIAoyLjM5LjMKCg== --000000000000e5fb030631b13e80--