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 1rnHpT-00CWIq-CZ for pgsql-hackers@arkaria.postgresql.org; Thu, 21 Mar 2024 12:47:32 +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 1rnHpR-00DF0j-ME for pgsql-hackers@arkaria.postgresql.org; Thu, 21 Mar 2024 12:47:30 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rnHpR-00DF0b-8r for pgsql-hackers@lists.postgresql.org; Thu, 21 Mar 2024 12:47:29 +0000 Received: from mail-oi1-x232.google.com ([2607:f8b0:4864:20::232]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1rnHpM-005jAP-Gr for pgsql-hackers@postgresql.org; Thu, 21 Mar 2024 12:47:28 +0000 Received: by mail-oi1-x232.google.com with SMTP id 5614622812f47-3c390030af2so643033b6e.3 for ; Thu, 21 Mar 2024 05:47:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1711025242; x=1711630042; darn=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=t9AsMG3wsUrHW+8PYo1O+Ci3yEz1VYaTe4bU8bhlFGE=; b=f+LK45yKZoBPXGI72qG+2dT6iG0At8jTIYo11deLuJsOdCy1HG26GWfaUIHDK2DOia 61zxGYaqAMgQ3493oca6eOgmNK/2nxz6h2jAYu1SVT5d+VjWVdbo4RUUyns98nc/3MSa CZclgEaR9RhJiq7vQ5UDoag2/1nOxxWDUY2qRZPuZixDD1K9a3YxZZZTpFUzJ1ZhoKzS Lwjc3NUGlKwZL8JBSjY3YUSc9o0h70t7SQtLz8E2TYnnBEEtHMM45z5vU0F9tSk7bOCc pxSf9pp9b1gaE5mglf0YIarXAgNcvL+jeqi6JZaVQIpkcUNDailACbUIttJTZB8H4j6i dGTQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1711025242; x=1711630042; 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=t9AsMG3wsUrHW+8PYo1O+Ci3yEz1VYaTe4bU8bhlFGE=; b=aEjqDhS5ut2SSrnrYpz0yf6cPiJks1Sf63H7+kAh4yDg2ZAZKHaP4DBjTyPphKIu7t 1RzpNt41M3OYJpZFSKt6pS6+Ij1OLr5dCej2uYYtwBmpFPJeMsUylp2K1oAAZg1y4Y47 LUI2D2JKzoEiGenOOd3ZrN9kwsu461UMh37cdGQB1ZWSzk2tRp8Fpc7bRvrK8rYcvi1l hAfn29OodEf7TvW4z5x9zqQZ6MHSkvksDQBFcYlxnlLJdL5SHVvWvhltbBJWVzAhEf0o +JBHbfvmOSFfflU8P1iJ39IGy4d1fJ6eiE+K0+3FbnxJ4gOhSB6ONr+33KjVCGyBcGqG ZvqA== X-Forwarded-Encrypted: i=1; AJvYcCVfxzsaE+fsFB6hFXu/Zg2Z0b/Fwz80Tjv8Trb6vkGdTLwwk0sWgMpuRSoe7kCMespHGtXbQuYfVIjMbzzrKFNuC7/pe0jaDgoqiqx3 X-Gm-Message-State: AOJu0YyyeAR7aOHmV2hSFHsI0/aDdhqZQhFkz7kBxuRkcU5ZajxPsFon ceEJ2COtlcDfdcNOT/gxjiIvOc7eHl0DPMUQAm12ps1z5UzwsrNKLRzpGeCh0bvzv2QWk3OI+mc PI87/EMu0xO0ubRFrc6MXL9hUkFw= X-Google-Smtp-Source: AGHT+IE5IBp2DLY4fXYf4wV0/HuiWNEvdKbFlHFge93jN3n7xmVW+t0QM0sk/Pn98BKkPh1+erUXgTe/Tm1hTPszc6s= X-Received: by 2002:a05:6808:e82:b0:3c3:7d55:ff53 with SMTP id k2-20020a0568080e8200b003c37d55ff53mr5462879oil.32.1711025241765; Thu, 21 Mar 2024 05:47:21 -0700 (PDT) MIME-Version: 1.0 References: <20220512034010.4oqa76pasrulkw32@alap3.anarazel.de> <20220512234207.pwwp6q33f72byet2@alap3.anarazel.de> <0892cd00635c8bcd458de6d43d31cf61953da1b2.camel@j-davis.com> <727b0f3b48aec2a4f968bf11c6fa8ca6382b6cca.camel@j-davis.com> In-Reply-To: <727b0f3b48aec2a4f968bf11c6fa8ca6382b6cca.camel@j-davis.com> From: Danil Anisimow Date: Thu, 21 Mar 2024 19:47:10 +0700 Message-ID: Subject: Re: Comments on Custom RMGRs To: Jeff Davis Cc: Andres Freund , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000bd3e4d06142b1b1b" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000bd3e4d06142b1b1b Content-Type: multipart/alternative; boundary="000000000000bd3e4c06142b1b19" --000000000000bd3e4c06142b1b19 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, Mar 1, 2024 at 2:06=E2=80=AFAM Jeff Davis wrote= : > Added to March CF. > > I don't have an immediate use case in mind for this, so please drive > that part of the discussion. I can't promise this for 17, but if the > patch is simple enough and a quick consensus develops, then it's > possible. [pgss_001.v1.patch] adds a custom resource manager to the pg_stat_statements extension. The proposed patch is not a complete solution for pgss and may not work correctly with replication. The 020_crash.pl test demonstrates server interruption by killing a backend. Without rm_checkpoint hook, the server restores pgss stats only after last CHECKPOINT. Data added to WAL before the checkpoint is not restored. The rm_checkpoint hook allows saving shared memory data to disk at each checkpoint. However, for pg_stat_statements, it matters when the checkpoint occurred. When the server shuts down, pgss deletes the temporary file of query texts. In other cases, this is unacceptable. To provide this capability, a flags parameter was added to the rm_checkpoint hook. The changes are presented in [rmgr_003.v2.patch]. -- Regards, Daniil Anisimov Postgres Professional: http://postgrespro.com --000000000000bd3e4c06142b1b19 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
On Fri, Mar 1, 2024 at 2:06=E2=80=AFAM Jeff Davis <pgsql@j-davis.com> wrote:
> A= dded to March CF.
>
> I don't have an immediate use case i= n mind for this, so please drive
> that part of the discussion. I can= 't promise this for 17, but if the
> patch is simple enough and a= quick consensus develops, then it's
> possible.

[pgss_001= .v1.patch] adds a custom resource manager to the pg_stat_statements extensi= on. The proposed patch is not a complete solution for pgss and may not work= correctly with replication.

The 020= _crash.pl test demonstrates server interruption by killing a backend. W= ithout rm_checkpoint hook, the server restores pgss stats only after last C= HECKPOINT. Data added to WAL before the checkpoint is not restored.

= The rm_checkpoint hook allows saving shared memory data to disk at each che= ckpoint. However, for pg_stat_statements, it matters when the checkpoint oc= curred. When the server shuts down, pgss deletes the temporary file of quer= y texts. In other cases, this is unacceptable.
To provide this capabilit= y, a flags parameter was added to the rm_checkpoint hook. The changes are p= resented in [rmgr_003.v2.patch].

--
Regards,
Daniil AnisimovPostgres Professional: http://postgres= pro.com
--000000000000bd3e4c06142b1b19-- --000000000000bd3e4d06142b1b1b Content-Type: text/x-patch; charset="US-ASCII"; name="rmgr_003.v2.patch" Content-Disposition: attachment; filename="rmgr_003.v2.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lu1860h71 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3JtZ3IuYyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy90cmFuc2FtL3JtZ3IuYwppbmRleCAzZTJmMWQ0YTIzLi5hZDBhMWQ1MTM0IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9ybWdyLmMKKysrIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL3RyYW5zYW0vcm1nci5jCkBAIC00NCw4ICs0NCw4IEBACiAKIAogLyogbXVz dCBiZSBrZXB0IGluIHN5bmMgd2l0aCBSbWdyRGF0YSBkZWZpbml0aW9uIGluIHhsb2dfaW50ZXJu YWwuaCAqLwotI2RlZmluZSBQR19STUdSKHN5bW5hbWUsbmFtZSxyZWRvLGRlc2MsaWRlbnRpZnks c3RhcnR1cCxjbGVhbnVwLG1hc2ssZGVjb2RlKSBcCi0JeyBuYW1lLCByZWRvLCBkZXNjLCBpZGVu dGlmeSwgc3RhcnR1cCwgY2xlYW51cCwgbWFzaywgZGVjb2RlIH0sCisjZGVmaW5lIFBHX1JNR1Io c3ltbmFtZSxuYW1lLHJlZG8sZGVzYyxpZGVudGlmeSxzdGFydHVwLGNsZWFudXAsbWFzayxkZWNv ZGUsY2hlY2twb2ludCkgXAorCXsgbmFtZSwgcmVkbywgZGVzYywgaWRlbnRpZnksIHN0YXJ0dXAs IGNsZWFudXAsIG1hc2ssIGRlY29kZSwgY2hlY2twb2ludCB9LAogCiBSbWdyRGF0YQlSbWdyVGFi bGVbUk1fTUFYX0lEICsgMV0gPSB7CiAjaW5jbHVkZSAiYWNjZXNzL3JtZ3JsaXN0LmgiCkBAIC04 Myw2ICs4MywyMiBAQCBSbWdyQ2xlYW51cCh2b2lkKQogCX0KIH0KIAorLyoKKyAqIENoZWNrcG9p bnQgYWxsIHJlc291cmNlIG1hbmFnZXJzLgorICovCit2b2lkCitSbWdyQ2hlY2twb2ludChpbnQg ZmxhZ3MpCit7CisJZm9yIChpbnQgcm1pZCA9IDA7IHJtaWQgPD0gUk1fTUFYX0lEOyBybWlkKysp CisJeworCQlpZiAoIVJtZ3JJZEV4aXN0cyhybWlkKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChS bWdyVGFibGVbcm1pZF0ucm1fY2hlY2twb2ludCAhPSBOVUxMKQorCQkJUm1nclRhYmxlW3JtaWRd LnJtX2NoZWNrcG9pbnQoZmxhZ3MpOworCX0KK30KKwogLyoKICAqIEVtaXQgRVJST1Igd2hlbiB3 ZSBlbmNvdW50ZXIgYSByZWNvcmQgd2l0aCBhbiBSbWdySWQgd2UgZG9uJ3QKICAqIHJlY29nbml6 ZS4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYwppbmRleCAyMGE1Zjg2MjA5Li5kMjFiZjhhZTI0 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMKKysrIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCkBAIC03MzU3LDYgKzczNTcsOSBAQCBDaGVj a1BvaW50R3V0cyhYTG9nUmVjUHRyIGNoZWNrUG9pbnRSZWRvLCBpbnQgZmxhZ3MpCiAJQ2hlY2tQ b2ludFNVQlRSQU5TKCk7CiAJQ2hlY2tQb2ludE11bHRpWGFjdCgpOwogCUNoZWNrUG9pbnRQcmVk aWNhdGUoKTsKKworCVJtZ3JDaGVja3BvaW50KGZsYWdzKTsKKwogCUNoZWNrUG9pbnRCdWZmZXJz KGZsYWdzKTsKIAogCS8qIFBlcmZvcm0gYWxsIHF1ZXVlZCB1cCBmc3luY3MgKi8KZGlmZiAtLWdp dCBhL3NyYy9iaW4vcGdfcmV3aW5kL3BhcnNleGxvZy5jIGIvc3JjL2Jpbi9wZ19yZXdpbmQvcGFy c2V4bG9nLmMKaW5kZXggMjJmNzM1MWZkYy4uMTFhZTFlN2FmNCAxMDA2NDQKLS0tIGEvc3JjL2Jp bi9wZ19yZXdpbmQvcGFyc2V4bG9nLmMKKysrIGIvc3JjL2Jpbi9wZ19yZXdpbmQvcGFyc2V4bG9n LmMKQEAgLTI4LDcgKzI4LDcgQEAKICAqIFJtZ3JOYW1lcyBpcyBhbiBhcnJheSBvZiB0aGUgYnVp bHQtaW4gcmVzb3VyY2UgbWFuYWdlciBuYW1lcywgdG8gbWFrZSBlcnJvcgogICogbWVzc2FnZXMg YSBiaXQgbmljZXIuCiAgKi8KLSNkZWZpbmUgUEdfUk1HUihzeW1uYW1lLG5hbWUscmVkbyxkZXNj LGlkZW50aWZ5LHN0YXJ0dXAsY2xlYW51cCxtYXNrLGRlY29kZSkgXAorI2RlZmluZSBQR19STUdS KHN5bW5hbWUsbmFtZSxyZWRvLGRlc2MsaWRlbnRpZnksc3RhcnR1cCxjbGVhbnVwLG1hc2ssZGVj b2RlLGNoZWNrcG9pbnQpIFwKICAgbmFtZSwKIAogc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IFJt Z3JOYW1lc1tSTV9NQVhfSUQgKyAxXSA9IHsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfd2FsZHVt cC9ybWdyZGVzYy5jIGIvc3JjL2Jpbi9wZ193YWxkdW1wL3JtZ3JkZXNjLmMKaW5kZXggNmI4YzE3 YmI0Yy4uMmJiNWJhOGM5ZiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ193YWxkdW1wL3JtZ3JkZXNj LmMKKysrIGIvc3JjL2Jpbi9wZ193YWxkdW1wL3JtZ3JkZXNjLmMKQEAgLTMyLDcgKzMyLDcgQEAK ICNpbmNsdWRlICJzdG9yYWdlL3N0YW5kYnlkZWZzLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsbWFw cGVyLmgiCiAKLSNkZWZpbmUgUEdfUk1HUihzeW1uYW1lLG5hbWUscmVkbyxkZXNjLGlkZW50aWZ5 LHN0YXJ0dXAsY2xlYW51cCxtYXNrLGRlY29kZSkgXAorI2RlZmluZSBQR19STUdSKHN5bW5hbWUs bmFtZSxyZWRvLGRlc2MsaWRlbnRpZnksc3RhcnR1cCxjbGVhbnVwLG1hc2ssZGVjb2RlLGNoZWNr cG9pbnQpIFwKIAl7IG5hbWUsIGRlc2MsIGlkZW50aWZ5fSwKIAogc3RhdGljIGNvbnN0IFJtZ3JE ZXNjRGF0YSBSbWdyRGVzY1RhYmxlW1JNX05fQlVJTFRJTl9JRFNdID0gewpkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvYWNjZXNzL3JtZ3IuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9ybWdyLmgKaW5k ZXggM2I2YTQ5N2UxYi4uMzRkZGMwMjEwYyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNz L3JtZ3IuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3Mvcm1nci5oCkBAIC0xOSw3ICsxOSw3IEBA IHR5cGVkZWYgdWludDggUm1ncklkOwogICogTm90ZTogUk1fTUFYX0lEIG11c3QgZml0IGluIFJt Z3JJZDsgd2lkZW5pbmcgdGhhdCB0eXBlIHdpbGwgYWZmZWN0IHRoZSBYTE9HCiAgKiBmaWxlIGZv cm1hdC4KICAqLwotI2RlZmluZSBQR19STUdSKHN5bW5hbWUsbmFtZSxyZWRvLGRlc2MsaWRlbnRp Znksc3RhcnR1cCxjbGVhbnVwLG1hc2ssZGVjb2RlKSBcCisjZGVmaW5lIFBHX1JNR1Ioc3ltbmFt ZSxuYW1lLHJlZG8sZGVzYyxpZGVudGlmeSxzdGFydHVwLGNsZWFudXAsbWFzayxkZWNvZGUsY2hl Y2twb2ludCkgXAogCXN5bW5hbWUsCiAKIHR5cGVkZWYgZW51bSBSbWdySWRzCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9hY2Nlc3Mvcm1ncmxpc3QuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9ybWdy bGlzdC5oCmluZGV4IDc4ZTZiOTA4YzYuLjBiMDNjYzY5YmUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL2FjY2Vzcy9ybWdybGlzdC5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9ybWdybGlzdC5o CkBAIC0yNCwyNiArMjQsMjYgQEAKICAqIENoYW5nZXMgdG8gdGhpcyBsaXN0IHBvc3NpYmx5IG5l ZWQgYW4gWExPR19QQUdFX01BR0lDIGJ1bXAuCiAgKi8KIAotLyogc3ltYm9sIG5hbWUsIHRleHR1 YWwgbmFtZSwgcmVkbywgZGVzYywgaWRlbnRpZnksIHN0YXJ0dXAsIGNsZWFudXAsIG1hc2ssIGRl Y29kZSAqLwotUEdfUk1HUihSTV9YTE9HX0lELCAiWExPRyIsIHhsb2dfcmVkbywgeGxvZ19kZXNj LCB4bG9nX2lkZW50aWZ5LCBOVUxMLCBOVUxMLCBOVUxMLCB4bG9nX2RlY29kZSkKLVBHX1JNR1Io Uk1fWEFDVF9JRCwgIlRyYW5zYWN0aW9uIiwgeGFjdF9yZWRvLCB4YWN0X2Rlc2MsIHhhY3RfaWRl bnRpZnksIE5VTEwsIE5VTEwsIE5VTEwsIHhhY3RfZGVjb2RlKQotUEdfUk1HUihSTV9TTUdSX0lE LCAiU3RvcmFnZSIsIHNtZ3JfcmVkbywgc21ncl9kZXNjLCBzbWdyX2lkZW50aWZ5LCBOVUxMLCBO VUxMLCBOVUxMLCBOVUxMKQotUEdfUk1HUihSTV9DTE9HX0lELCAiQ0xPRyIsIGNsb2dfcmVkbywg Y2xvZ19kZXNjLCBjbG9nX2lkZW50aWZ5LCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKQotUEdfUk1H UihSTV9EQkFTRV9JRCwgIkRhdGFiYXNlIiwgZGJhc2VfcmVkbywgZGJhc2VfZGVzYywgZGJhc2Vf aWRlbnRpZnksIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpCi1QR19STUdSKFJNX1RCTFNQQ19JRCwg IlRhYmxlc3BhY2UiLCB0YmxzcGNfcmVkbywgdGJsc3BjX2Rlc2MsIHRibHNwY19pZGVudGlmeSwg TlVMTCwgTlVMTCwgTlVMTCwgTlVMTCkKLVBHX1JNR1IoUk1fTVVMVElYQUNUX0lELCAiTXVsdGlY YWN0IiwgbXVsdGl4YWN0X3JlZG8sIG11bHRpeGFjdF9kZXNjLCBtdWx0aXhhY3RfaWRlbnRpZnks IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpCi1QR19STUdSKFJNX1JFTE1BUF9JRCwgIlJlbE1hcCIs IHJlbG1hcF9yZWRvLCByZWxtYXBfZGVzYywgcmVsbWFwX2lkZW50aWZ5LCBOVUxMLCBOVUxMLCBO VUxMLCBOVUxMKQotUEdfUk1HUihSTV9TVEFOREJZX0lELCAiU3RhbmRieSIsIHN0YW5kYnlfcmVk bywgc3RhbmRieV9kZXNjLCBzdGFuZGJ5X2lkZW50aWZ5LCBOVUxMLCBOVUxMLCBOVUxMLCBzdGFu ZGJ5X2RlY29kZSkKLVBHX1JNR1IoUk1fSEVBUDJfSUQsICJIZWFwMiIsIGhlYXAyX3JlZG8sIGhl YXAyX2Rlc2MsIGhlYXAyX2lkZW50aWZ5LCBOVUxMLCBOVUxMLCBoZWFwX21hc2ssIGhlYXAyX2Rl Y29kZSkKLVBHX1JNR1IoUk1fSEVBUF9JRCwgIkhlYXAiLCBoZWFwX3JlZG8sIGhlYXBfZGVzYywg aGVhcF9pZGVudGlmeSwgTlVMTCwgTlVMTCwgaGVhcF9tYXNrLCBoZWFwX2RlY29kZSkKLVBHX1JN R1IoUk1fQlRSRUVfSUQsICJCdHJlZSIsIGJ0cmVlX3JlZG8sIGJ0cmVlX2Rlc2MsIGJ0cmVlX2lk ZW50aWZ5LCBidHJlZV94bG9nX3N0YXJ0dXAsIGJ0cmVlX3hsb2dfY2xlYW51cCwgYnRyZWVfbWFz aywgTlVMTCkKLVBHX1JNR1IoUk1fSEFTSF9JRCwgIkhhc2giLCBoYXNoX3JlZG8sIGhhc2hfZGVz YywgaGFzaF9pZGVudGlmeSwgTlVMTCwgTlVMTCwgaGFzaF9tYXNrLCBOVUxMKQotUEdfUk1HUihS TV9HSU5fSUQsICJHaW4iLCBnaW5fcmVkbywgZ2luX2Rlc2MsIGdpbl9pZGVudGlmeSwgZ2luX3hs b2dfc3RhcnR1cCwgZ2luX3hsb2dfY2xlYW51cCwgZ2luX21hc2ssIE5VTEwpCi1QR19STUdSKFJN X0dJU1RfSUQsICJHaXN0IiwgZ2lzdF9yZWRvLCBnaXN0X2Rlc2MsIGdpc3RfaWRlbnRpZnksIGdp c3RfeGxvZ19zdGFydHVwLCBnaXN0X3hsb2dfY2xlYW51cCwgZ2lzdF9tYXNrLCBOVUxMKQotUEdf Uk1HUihSTV9TRVFfSUQsICJTZXF1ZW5jZSIsIHNlcV9yZWRvLCBzZXFfZGVzYywgc2VxX2lkZW50 aWZ5LCBOVUxMLCBOVUxMLCBzZXFfbWFzaywgTlVMTCkKLVBHX1JNR1IoUk1fU1BHSVNUX0lELCAi U1BHaXN0Iiwgc3BnX3JlZG8sIHNwZ19kZXNjLCBzcGdfaWRlbnRpZnksIHNwZ194bG9nX3N0YXJ0 dXAsIHNwZ194bG9nX2NsZWFudXAsIHNwZ19tYXNrLCBOVUxMKQotUEdfUk1HUihSTV9CUklOX0lE LCAiQlJJTiIsIGJyaW5fcmVkbywgYnJpbl9kZXNjLCBicmluX2lkZW50aWZ5LCBOVUxMLCBOVUxM LCBicmluX21hc2ssIE5VTEwpCi1QR19STUdSKFJNX0NPTU1JVF9UU19JRCwgIkNvbW1pdFRzIiwg Y29tbWl0X3RzX3JlZG8sIGNvbW1pdF90c19kZXNjLCBjb21taXRfdHNfaWRlbnRpZnksIE5VTEws IE5VTEwsIE5VTEwsIE5VTEwpCi1QR19STUdSKFJNX1JFUExPUklHSU5fSUQsICJSZXBsaWNhdGlv bk9yaWdpbiIsIHJlcGxvcmlnaW5fcmVkbywgcmVwbG9yaWdpbl9kZXNjLCByZXBsb3JpZ2luX2lk ZW50aWZ5LCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKQotUEdfUk1HUihSTV9HRU5FUklDX0lELCAi R2VuZXJpYyIsIGdlbmVyaWNfcmVkbywgZ2VuZXJpY19kZXNjLCBnZW5lcmljX2lkZW50aWZ5LCBO VUxMLCBOVUxMLCBnZW5lcmljX21hc2ssIE5VTEwpCi1QR19STUdSKFJNX0xPR0lDQUxNU0dfSUQs ICJMb2dpY2FsTWVzc2FnZSIsIGxvZ2ljYWxtc2dfcmVkbywgbG9naWNhbG1zZ19kZXNjLCBsb2dp Y2FsbXNnX2lkZW50aWZ5LCBOVUxMLCBOVUxMLCBOVUxMLCBsb2dpY2FsbXNnX2RlY29kZSkKKy8q IHN5bWJvbCBuYW1lLCB0ZXh0dWFsIG5hbWUsIHJlZG8sIGRlc2MsIGlkZW50aWZ5LCBzdGFydHVw LCBjbGVhbnVwLCBtYXNrLCBkZWNvZGUsIGNoZWNrcG9pbnQgKi8KK1BHX1JNR1IoUk1fWExPR19J RCwgIlhMT0ciLCB4bG9nX3JlZG8sIHhsb2dfZGVzYywgeGxvZ19pZGVudGlmeSwgTlVMTCwgTlVM TCwgTlVMTCwgeGxvZ19kZWNvZGUsIE5VTEwpCitQR19STUdSKFJNX1hBQ1RfSUQsICJUcmFuc2Fj dGlvbiIsIHhhY3RfcmVkbywgeGFjdF9kZXNjLCB4YWN0X2lkZW50aWZ5LCBOVUxMLCBOVUxMLCBO VUxMLCB4YWN0X2RlY29kZSwgTlVMTCkKK1BHX1JNR1IoUk1fU01HUl9JRCwgIlN0b3JhZ2UiLCBz bWdyX3JlZG8sIHNtZ3JfZGVzYywgc21ncl9pZGVudGlmeSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVM TCwgTlVMTCkKK1BHX1JNR1IoUk1fQ0xPR19JRCwgIkNMT0ciLCBjbG9nX3JlZG8sIGNsb2dfZGVz YywgY2xvZ19pZGVudGlmeSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCkKK1BHX1JNR1Io Uk1fREJBU0VfSUQsICJEYXRhYmFzZSIsIGRiYXNlX3JlZG8sIGRiYXNlX2Rlc2MsIGRiYXNlX2lk ZW50aWZ5LCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKQorUEdfUk1HUihSTV9UQkxTUENf SUQsICJUYWJsZXNwYWNlIiwgdGJsc3BjX3JlZG8sIHRibHNwY19kZXNjLCB0YmxzcGNfaWRlbnRp ZnksIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpCitQR19STUdSKFJNX01VTFRJWEFDVF9J RCwgIk11bHRpWGFjdCIsIG11bHRpeGFjdF9yZWRvLCBtdWx0aXhhY3RfZGVzYywgbXVsdGl4YWN0 X2lkZW50aWZ5LCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKQorUEdfUk1HUihSTV9SRUxN QVBfSUQsICJSZWxNYXAiLCByZWxtYXBfcmVkbywgcmVsbWFwX2Rlc2MsIHJlbG1hcF9pZGVudGlm eSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCkKK1BHX1JNR1IoUk1fU1RBTkRCWV9JRCwg IlN0YW5kYnkiLCBzdGFuZGJ5X3JlZG8sIHN0YW5kYnlfZGVzYywgc3RhbmRieV9pZGVudGlmeSwg TlVMTCwgTlVMTCwgTlVMTCwgc3RhbmRieV9kZWNvZGUsIE5VTEwpCitQR19STUdSKFJNX0hFQVAy X0lELCAiSGVhcDIiLCBoZWFwMl9yZWRvLCBoZWFwMl9kZXNjLCBoZWFwMl9pZGVudGlmeSwgTlVM TCwgTlVMTCwgaGVhcF9tYXNrLCBoZWFwMl9kZWNvZGUsIE5VTEwpCitQR19STUdSKFJNX0hFQVBf SUQsICJIZWFwIiwgaGVhcF9yZWRvLCBoZWFwX2Rlc2MsIGhlYXBfaWRlbnRpZnksIE5VTEwsIE5V TEwsIGhlYXBfbWFzaywgaGVhcF9kZWNvZGUsIE5VTEwpCitQR19STUdSKFJNX0JUUkVFX0lELCAi QnRyZWUiLCBidHJlZV9yZWRvLCBidHJlZV9kZXNjLCBidHJlZV9pZGVudGlmeSwgYnRyZWVfeGxv Z19zdGFydHVwLCBidHJlZV94bG9nX2NsZWFudXAsIGJ0cmVlX21hc2ssIE5VTEwsIE5VTEwpCitQ R19STUdSKFJNX0hBU0hfSUQsICJIYXNoIiwgaGFzaF9yZWRvLCBoYXNoX2Rlc2MsIGhhc2hfaWRl bnRpZnksIE5VTEwsIE5VTEwsIGhhc2hfbWFzaywgTlVMTCwgTlVMTCkKK1BHX1JNR1IoUk1fR0lO X0lELCAiR2luIiwgZ2luX3JlZG8sIGdpbl9kZXNjLCBnaW5faWRlbnRpZnksIGdpbl94bG9nX3N0 YXJ0dXAsIGdpbl94bG9nX2NsZWFudXAsIGdpbl9tYXNrLCBOVUxMLCBOVUxMKQorUEdfUk1HUihS TV9HSVNUX0lELCAiR2lzdCIsIGdpc3RfcmVkbywgZ2lzdF9kZXNjLCBnaXN0X2lkZW50aWZ5LCBn aXN0X3hsb2dfc3RhcnR1cCwgZ2lzdF94bG9nX2NsZWFudXAsIGdpc3RfbWFzaywgTlVMTCwgTlVM TCkKK1BHX1JNR1IoUk1fU0VRX0lELCAiU2VxdWVuY2UiLCBzZXFfcmVkbywgc2VxX2Rlc2MsIHNl cV9pZGVudGlmeSwgTlVMTCwgTlVMTCwgc2VxX21hc2ssIE5VTEwsIE5VTEwpCitQR19STUdSKFJN X1NQR0lTVF9JRCwgIlNQR2lzdCIsIHNwZ19yZWRvLCBzcGdfZGVzYywgc3BnX2lkZW50aWZ5LCBz cGdfeGxvZ19zdGFydHVwLCBzcGdfeGxvZ19jbGVhbnVwLCBzcGdfbWFzaywgTlVMTCwgTlVMTCkK K1BHX1JNR1IoUk1fQlJJTl9JRCwgIkJSSU4iLCBicmluX3JlZG8sIGJyaW5fZGVzYywgYnJpbl9p ZGVudGlmeSwgTlVMTCwgTlVMTCwgYnJpbl9tYXNrLCBOVUxMLCBOVUxMKQorUEdfUk1HUihSTV9D T01NSVRfVFNfSUQsICJDb21taXRUcyIsIGNvbW1pdF90c19yZWRvLCBjb21taXRfdHNfZGVzYywg Y29tbWl0X3RzX2lkZW50aWZ5LCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKQorUEdfUk1H UihSTV9SRVBMT1JJR0lOX0lELCAiUmVwbGljYXRpb25PcmlnaW4iLCByZXBsb3JpZ2luX3JlZG8s IHJlcGxvcmlnaW5fZGVzYywgcmVwbG9yaWdpbl9pZGVudGlmeSwgTlVMTCwgTlVMTCwgTlVMTCwg TlVMTCwgTlVMTCkKK1BHX1JNR1IoUk1fR0VORVJJQ19JRCwgIkdlbmVyaWMiLCBnZW5lcmljX3Jl ZG8sIGdlbmVyaWNfZGVzYywgZ2VuZXJpY19pZGVudGlmeSwgTlVMTCwgTlVMTCwgZ2VuZXJpY19t YXNrLCBOVUxMLCBOVUxMKQorUEdfUk1HUihSTV9MT0dJQ0FMTVNHX0lELCAiTG9naWNhbE1lc3Nh Z2UiLCBsb2dpY2FsbXNnX3JlZG8sIGxvZ2ljYWxtc2dfZGVzYywgbG9naWNhbG1zZ19pZGVudGlm eSwgTlVMTCwgTlVMTCwgTlVMTCwgbG9naWNhbG1zZ19kZWNvZGUsIE5VTEwpCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZ19pbnRlcm5hbC5oIGIvc3JjL2luY2x1ZGUvYWNjZXNz L3hsb2dfaW50ZXJuYWwuaAppbmRleCBiODhiMjRmMGMxLi4yMjBmNDViMGFlIDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZ19pbnRlcm5hbC5oCisrKyBiL3NyYy9pbmNsdWRlL2Fj Y2Vzcy94bG9nX2ludGVybmFsLmgKQEAgLTM1NiwxMSArMzU2LDEzIEBAIHR5cGVkZWYgc3RydWN0 IFJtZ3JEYXRhCiAJdm9pZAkJKCpybV9tYXNrKSAoY2hhciAqcGFnZWRhdGEsIEJsb2NrTnVtYmVy IGJsa25vKTsKIAl2b2lkCQkoKnJtX2RlY29kZSkgKHN0cnVjdCBMb2dpY2FsRGVjb2RpbmdDb250 ZXh0ICpjdHgsCiAJCQkJCQkJICBzdHJ1Y3QgWExvZ1JlY29yZEJ1ZmZlciAqYnVmKTsKKwl2b2lk CQkoKnJtX2NoZWNrcG9pbnQpIChpbnQgZmxhZ3MpOwogfSBSbWdyRGF0YTsKIAogZXh0ZXJuIFBH RExMSU1QT1JUIFJtZ3JEYXRhIFJtZ3JUYWJsZVtdOwogZXh0ZXJuIHZvaWQgUm1nclN0YXJ0dXAo dm9pZCk7CiBleHRlcm4gdm9pZCBSbWdyQ2xlYW51cCh2b2lkKTsKK2V4dGVybiB2b2lkIFJtZ3JD aGVja3BvaW50KGludCBmbGFncyk7CiBleHRlcm4gdm9pZCBSbWdyTm90Rm91bmQoUm1ncklkIHJt aWQpOwogZXh0ZXJuIHZvaWQgUmVnaXN0ZXJDdXN0b21SbWdyKFJtZ3JJZCBybWlkLCBjb25zdCBS bWdyRGF0YSAqcm1ncik7CiAK --000000000000bd3e4d06142b1b1b Content-Type: text/x-patch; charset="US-ASCII"; name="pgss_001.v1.patch" Content-Disposition: attachment; filename="pgss_001.v1.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lu1860gz0 ZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL2V4cGVjdGVkL3dhbC5vdXQg Yi9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9leHBlY3RlZC93YWwub3V0CmluZGV4IDM0YTJi ZjViMDMuLjRiMjIyMGE5NmIgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRz L2V4cGVjdGVkL3dhbC5vdXQKKysrIGIvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvZXhwZWN0 ZWQvd2FsLm91dApAQCAtMTcsNyArMTcsNyBAQCBGUk9NIHBnX3N0YXRfc3RhdGVtZW50cyBPUkRF UiBCWSBxdWVyeSBDT0xMQVRFICJDIjsKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0K ICBERUxFVEUgRlJPTSBwZ3NzX3dhbF90YWIgV0hFUkUgYSA+ICQxICAgICAgICAgICAgICAgICAg ICAgICAgfCAgICAgMSB8ICAgIDEgfCB0ICAgICAgICAgICAgICAgICAgIHwgdCAgICAgICAgICAg ICAgICAgICAgIHwgdAogIElOU0VSVCBJTlRPIHBnc3Nfd2FsX3RhYiBWQUxVRVMoZ2VuZXJhdGVf c2VyaWVzKCQxLCAkMiksICQzKSB8ICAgICAxIHwgICAxMCB8IHQgICAgICAgICAgICAgICAgICAg fCB0ICAgICAgICAgICAgICAgICAgICAgfCB0Ci0gU0VMRUNUIHBnX3N0YXRfc3RhdGVtZW50c19y ZXNldCgpIElTIE5PVCBOVUxMIEFTIHQgICAgICAgICAgIHwgICAgIDEgfCAgICAxIHwgZiAgICAg ICAgICAgICAgICAgICB8IGYgICAgICAgICAgICAgICAgICAgICB8IGYKKyBTRUxFQ1QgcGdfc3Rh dF9zdGF0ZW1lbnRzX3Jlc2V0KCkgSVMgTk9UIE5VTEwgQVMgdCAgICAgICAgICAgfCAgICAgMSB8 ICAgIDEgfCB0ICAgICAgICAgICAgICAgICAgIHwgdCAgICAgICAgICAgICAgICAgICAgIHwgdAog IFNFVCBwZ19zdGF0X3N0YXRlbWVudHMudHJhY2tfdXRpbGl0eSA9IEZBTFNFICAgICAgICAgICAg ICAgICB8ICAgICAxIHwgICAgMCB8IGYgICAgICAgICAgICAgICAgICAgfCBmICAgICAgICAgICAg ICAgICAgICAgfCB0CiAgVVBEQVRFIHBnc3Nfd2FsX3RhYiBTRVQgYiA9ICQxIFdIRVJFIGEgPiAk MiAgICAgICAgICAgICAgICAgIHwgICAgIDEgfCAgICAzIHwgdCAgICAgICAgICAgICAgICAgICB8 IHQgICAgICAgICAgICAgICAgICAgICB8IHQKICg1IHJvd3MpCmRpZmYgLS1naXQgYS9jb250cmli L3BnX3N0YXRfc3RhdGVtZW50cy9wZ19zdGF0X3N0YXRlbWVudHMuYyBiL2NvbnRyaWIvcGdfc3Rh dF9zdGF0ZW1lbnRzL3BnX3N0YXRfc3RhdGVtZW50cy5jCmluZGV4IDY3Y2VjODY1YmEuLmQwMjIw ZmQ5ZWIgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRfc3Rh dGVtZW50cy5jCisrKyBiL2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRfc3RhdGVt ZW50cy5jCkBAIC03NCw2ICs3NCwxMCBAQAogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAj aW5jbHVkZSAidXRpbHMvdGltZXN0YW1wLmgiCiAKKyNpbmNsdWRlICJhY2Nlc3MveGxvZy5oIgor I2luY2x1ZGUgImFjY2Vzcy94bG9nX2ludGVybmFsLmgiCisjaW5jbHVkZSAiYWNjZXNzL3hsb2dp bnNlcnQuaCIKKwogUEdfTU9EVUxFX01BR0lDOwogCiAvKiBMb2NhdGlvbiBvZiBwZXJtYW5lbnQg c3RhdHMgZmlsZSAodmFsaWQgd2hlbiBkYXRhYmFzZSBpcyBzaHV0IGRvd24pICovCkBAIC0zMjMs NyArMzI3LDYgQEAgUEdfRlVOQ1RJT05fSU5GT19WMShwZ19zdGF0X3N0YXRlbWVudHNfaW5mbyk7 CiAKIHN0YXRpYyB2b2lkIHBnc3Nfc2htZW1fcmVxdWVzdCh2b2lkKTsKIHN0YXRpYyB2b2lkIHBn c3Nfc2htZW1fc3RhcnR1cCh2b2lkKTsKLXN0YXRpYyB2b2lkIHBnc3Nfc2htZW1fc2h1dGRvd24o aW50IGNvZGUsIERhdHVtIGFyZyk7CiBzdGF0aWMgdm9pZCBwZ3NzX3Bvc3RfcGFyc2VfYW5hbHl6 ZShQYXJzZVN0YXRlICpwc3RhdGUsIFF1ZXJ5ICpxdWVyeSwKIAkJCQkJCQkJCUp1bWJsZVN0YXRl ICpqc3RhdGUpOwogc3RhdGljIFBsYW5uZWRTdG10ICpwZ3NzX3BsYW5uZXIoUXVlcnkgKnBhcnNl LApAQCAtMzcwLDYgKzM3Myw1MCBAQCBzdGF0aWMgdm9pZCBmaWxsX2luX2NvbnN0YW50X2xlbmd0 aHMoSnVtYmxlU3RhdGUgKmpzdGF0ZSwgY29uc3QgY2hhciAqcXVlcnksCiAJCQkJCQkJCQkgaW50 IHF1ZXJ5X2xvYyk7CiBzdGF0aWMgaW50CWNvbXBfbG9jYXRpb24oY29uc3Qgdm9pZCAqYSwgY29u c3Qgdm9pZCAqYik7CiAKKy8qIFJNR1IgQVBJICovCisjZGVmaW5lIENVU1RPTVJNR1JfSUQJCVJN X0VYUEVSSU1FTlRBTF9JRAorI2RlZmluZSBDVVNUT01STUdSX05BTUUJCSJwZ3NzX3JtZ3IiCisK K3N0YXRpYyB2b2lkIHJtZ3JfcmVkbyhYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCk7CitzdGF0aWMg dm9pZCBybWdyX2Rlc2MoU3RyaW5nSW5mbyBidWYsIFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKTsK K3N0YXRpYyBjb25zdCBjaGFyICpybWdyX2lkZW50aWZ5KHVpbnQ4IGluZm8pOworc3RhdGljIHZv aWQgcm1ncl9jaGVja3BvaW50KGludCBmbGFncyk7CisKKy8qIFdBTCByZWNvcmQgZGVmaW5pdGlv bnMgKi8KKyNkZWZpbmUgUEdTU19YTE9HX0lOU0VSVAkweDAwCisjZGVmaW5lIFBHU1NfWExPR19S RVNFVAkJMHgxMAorCisvKiBUaGUgbmVjZXNzYXJ5IGZpZWxkcyBmcm9tIHBnc3NFbnRyeSAqLwor dHlwZWRlZiBzdHJ1Y3QgcGdzc1hMb2dJbnNlcnQKK3sKKwl1aW50MzIJCWhlYWRlcjsKKwlwZ3Nz SGFzaEtleSBrZXk7CisJQ291bnRlcnMJY291bnRlcnM7CisJaW50CQkJZW5jb2Rpbmc7CisJVGlt ZXN0YW1wVHogc3RhdHNfc2luY2U7CisJVGltZXN0YW1wVHogbWlubWF4X3N0YXRzX3NpbmNlOwor CWludAkJCXF1ZXJ5X2xlbjsKKwljaGFyCQlxdGV4dFtGTEVYSUJMRV9BUlJBWV9NRU1CRVJdOwor fSBwZ3NzWExvZ0luc2VydDsKKworLyogVGhlIHBhcmFtcyBvZiBlbnRyeV9yZXNldCgpIGZ1bmN0 aW9uICovCit0eXBlZGVmIHN0cnVjdCBwZ3NzWExvZ1Jlc2V0Cit7CisJdWludDMyCQloZWFkZXI7 CisJT2lkCQkJdXNlcmlkOworCXVpbnQ2NAkJcXVlcnlpZDsKKwlPaWQJCQlkYmlkOworCWJvb2wJ CW1pbm1heF9vbmx5OworfSBwZ3NzWExvZ1Jlc2V0OworCisvKiBSTUdSIGRhdGEgKi8KK2NvbnN0 IFJtZ3JEYXRhIHBnc3Nfcm1nciA9IHsKKwkucm1fbmFtZSA9IENVU1RPTVJNR1JfTkFNRSwKKwku cm1fcmVkbyA9IHJtZ3JfcmVkbywKKwkucm1fY2hlY2twb2ludCA9IHJtZ3JfY2hlY2twb2ludCwK Kwkucm1faWRlbnRpZnkgPSBybWdyX2lkZW50aWZ5LAorCS5ybV9kZXNjID0gcm1ncl9kZXNjCit9 OwogCiAvKgogICogTW9kdWxlIGxvYWQgY2FsbGJhY2sKQEAgLTQ1Nyw2ICs1MDQsOCBAQCBfUEdf aW5pdCh2b2lkKQogCiAJTWFya0dVQ1ByZWZpeFJlc2VydmVkKCJwZ19zdGF0X3N0YXRlbWVudHMi KTsKIAorCVJlZ2lzdGVyQ3VzdG9tUm1ncihDVVNUT01STUdSX0lELCAmcGdzc19ybWdyKTsKKwog CS8qCiAJICogSW5zdGFsbCBob29rcy4KIAkgKi8KQEAgLTU1Niw5ICs2MDUsMTIgQEAgcGdzc19z aG1lbV9zdGFydHVwKHZvaWQpCiAJLyoKIAkgKiBJZiB3ZSdyZSBpbiB0aGUgcG9zdG1hc3RlciAo b3IgYSBzdGFuZGFsb25lIGJhY2tlbmQuLi4pLCBzZXQgdXAgYSBzaG1lbQogCSAqIGV4aXQgaG9v ayB0byBkdW1wIHRoZSBzdGF0aXN0aWNzIHRvIGRpc2suCisJICoKKwkgKiBOb3cgd2UgZG8gaXQg YXQgQ0hFQ0tQT0lOVC4KKwkgKgorCSAqaWYgKCFJc1VuZGVyUG9zdG1hc3RlcikKKwkgKglvbl9z aG1lbV9leGl0KHBnc3Nfc2htZW1fc2h1dGRvd24sIChEYXR1bSkgMCk7CiAJICovCi0JaWYgKCFJ c1VuZGVyUG9zdG1hc3RlcikKLQkJb25fc2htZW1fZXhpdChwZ3NzX3NobWVtX3NodXRkb3duLCAo RGF0dW0pIDApOwogCiAJLyoKIAkgKiBEb25lIGlmIHNvbWUgb3RoZXIgcHJvY2VzcyBhbHJlYWR5 IGNvbXBsZXRlZCBvdXIgaW5pdGlhbGl6YXRpb24uCkBAIC03MjAsMTA4ICs3NzIsNiBAQCBmYWls OgogCSAqLwogfQogCi0vKgotICogc2htZW1fc2h1dGRvd24gaG9vazogRHVtcCBzdGF0aXN0aWNz IGludG8gZmlsZS4KLSAqCi0gKiBOb3RlOiB3ZSBkb24ndCBib3RoZXIgd2l0aCBhY3F1aXJpbmcg bG9jaywgYmVjYXVzZSB0aGVyZSBzaG91bGQgYmUgbm8KLSAqIG90aGVyIHByb2Nlc3NlcyBydW5u aW5nIHdoZW4gdGhpcyBpcyBjYWxsZWQuCi0gKi8KLXN0YXRpYyB2b2lkCi1wZ3NzX3NobWVtX3No dXRkb3duKGludCBjb2RlLCBEYXR1bSBhcmcpCi17Ci0JRklMRQkgICAqZmlsZTsKLQljaGFyCSAg ICpxYnVmZmVyID0gTlVMTDsKLQlTaXplCQlxYnVmZmVyX3NpemUgPSAwOwotCUhBU0hfU0VRX1NU QVRVUyBoYXNoX3NlcTsKLQlpbnQzMgkJbnVtX2VudHJpZXM7Ci0JcGdzc0VudHJ5ICAqZW50cnk7 Ci0KLQkvKiBEb24ndCB0cnkgdG8gZHVtcCBkdXJpbmcgYSBjcmFzaC4gKi8KLQlpZiAoY29kZSkK LQkJcmV0dXJuOwotCi0JLyogU2FmZXR5IGNoZWNrIC4uLiBzaG91bGRuJ3QgZ2V0IGhlcmUgdW5s ZXNzIHNobWVtIGlzIHNldCB1cC4gKi8KLQlpZiAoIXBnc3MgfHwgIXBnc3NfaGFzaCkKLQkJcmV0 dXJuOwotCi0JLyogRG9uJ3QgZHVtcCBpZiB0b2xkIG5vdCB0by4gKi8KLQlpZiAoIXBnc3Nfc2F2 ZSkKLQkJcmV0dXJuOwotCi0JZmlsZSA9IEFsbG9jYXRlRmlsZShQR1NTX0RVTVBfRklMRSAiLnRt cCIsIFBHX0JJTkFSWV9XKTsKLQlpZiAoZmlsZSA9PSBOVUxMKQotCQlnb3RvIGVycm9yOwotCi0J aWYgKGZ3cml0ZSgmUEdTU19GSUxFX0hFQURFUiwgc2l6ZW9mKHVpbnQzMiksIDEsIGZpbGUpICE9 IDEpCi0JCWdvdG8gZXJyb3I7Ci0JaWYgKGZ3cml0ZSgmUEdTU19QR19NQUpPUl9WRVJTSU9OLCBz aXplb2YodWludDMyKSwgMSwgZmlsZSkgIT0gMSkKLQkJZ290byBlcnJvcjsKLQludW1fZW50cmll cyA9IGhhc2hfZ2V0X251bV9lbnRyaWVzKHBnc3NfaGFzaCk7Ci0JaWYgKGZ3cml0ZSgmbnVtX2Vu dHJpZXMsIHNpemVvZihpbnQzMiksIDEsIGZpbGUpICE9IDEpCi0JCWdvdG8gZXJyb3I7Ci0KLQlx YnVmZmVyID0gcXRleHRfbG9hZF9maWxlKCZxYnVmZmVyX3NpemUpOwotCWlmIChxYnVmZmVyID09 IE5VTEwpCi0JCWdvdG8gZXJyb3I7Ci0KLQkvKgotCSAqIFdoZW4gc2VyaWFsaXppbmcgdG8gZGlz aywgd2Ugc3RvcmUgcXVlcnkgdGV4dHMgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlaXIKLQkgKiBlbnRy eSBkYXRhLiAgQW55IG9ycGhhbmVkIHF1ZXJ5IHRleHRzIGFyZSB0aGVyZWJ5IGV4Y2x1ZGVkLgot CSAqLwotCWhhc2hfc2VxX2luaXQoJmhhc2hfc2VxLCBwZ3NzX2hhc2gpOwotCXdoaWxlICgoZW50 cnkgPSBoYXNoX3NlcV9zZWFyY2goJmhhc2hfc2VxKSkgIT0gTlVMTCkKLQl7Ci0JCWludAkJCWxl biA9IGVudHJ5LT5xdWVyeV9sZW47Ci0JCWNoYXIJICAgKnFzdHIgPSBxdGV4dF9mZXRjaChlbnRy eS0+cXVlcnlfb2Zmc2V0LCBsZW4sCi0JCQkJCQkJCQkgICBxYnVmZmVyLCBxYnVmZmVyX3NpemUp OwotCi0JCWlmIChxc3RyID09IE5VTEwpCi0JCQljb250aW51ZTsJCQkvKiBJZ25vcmUgYW55IGVu dHJpZXMgd2l0aCBib2d1cyB0ZXh0cyAqLwotCi0JCWlmIChmd3JpdGUoZW50cnksIHNpemVvZihw Z3NzRW50cnkpLCAxLCBmaWxlKSAhPSAxIHx8Ci0JCQlmd3JpdGUocXN0ciwgMSwgbGVuICsgMSwg ZmlsZSkgIT0gbGVuICsgMSkKLQkJewotCQkJLyogbm90ZTogd2UgYXNzdW1lIGhhc2hfc2VxX3Rl cm0gd29uJ3QgY2hhbmdlIGVycm5vICovCi0JCQloYXNoX3NlcV90ZXJtKCZoYXNoX3NlcSk7Ci0J CQlnb3RvIGVycm9yOwotCQl9Ci0JfQotCi0JLyogRHVtcCBnbG9iYWwgc3RhdGlzdGljcyBmb3Ig cGdfc3RhdF9zdGF0ZW1lbnRzICovCi0JaWYgKGZ3cml0ZSgmcGdzcy0+c3RhdHMsIHNpemVvZihw Z3NzR2xvYmFsU3RhdHMpLCAxLCBmaWxlKSAhPSAxKQotCQlnb3RvIGVycm9yOwotCi0JZnJlZShx YnVmZmVyKTsKLQlxYnVmZmVyID0gTlVMTDsKLQotCWlmIChGcmVlRmlsZShmaWxlKSkKLQl7Ci0J CWZpbGUgPSBOVUxMOwotCQlnb3RvIGVycm9yOwotCX0KLQotCS8qCi0JICogUmVuYW1lIGZpbGUg aW50byBwbGFjZSwgc28gd2UgYXRvbWljYWxseSByZXBsYWNlIGFueSBvbGQgb25lLgotCSAqLwot CSh2b2lkKSBkdXJhYmxlX3JlbmFtZShQR1NTX0RVTVBfRklMRSAiLnRtcCIsIFBHU1NfRFVNUF9G SUxFLCBMT0cpOwotCi0JLyogVW5saW5rIHF1ZXJ5LXRleHRzIGZpbGU7IGl0J3Mgbm90IG5lZWRl ZCB3aGlsZSBzaHV0ZG93biAqLwotCXVubGluayhQR1NTX1RFWFRfRklMRSk7Ci0KLQlyZXR1cm47 Ci0KLWVycm9yOgotCWVyZXBvcnQoTE9HLAotCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCks Ci0JCQkgZXJybXNnKCJjb3VsZCBub3Qgd3JpdGUgZmlsZSBcIiVzXCI6ICVtIiwKLQkJCQkJUEdT U19EVU1QX0ZJTEUgIi50bXAiKSkpOwotCWZyZWUocWJ1ZmZlcik7Ci0JaWYgKGZpbGUpCi0JCUZy ZWVGaWxlKGZpbGUpOwotCXVubGluayhQR1NTX0RVTVBfRklMRSAiLnRtcCIpOwotCXVubGluayhQ R1NTX1RFWFRfRklMRSk7Ci19Ci0KIC8qCiAgKiBQb3N0LXBhcnNlLWFuYWx5c2lzIGhvb2s6IG1h cmsgcXVlcnkgd2l0aCBhIHF1ZXJ5SWQKICAqLwpAQCAtMTI4NCw2ICsxMjM0LDcgQEAgcGdzc19z dG9yZShjb25zdCBjaGFyICpxdWVyeSwgdWludDY0IHF1ZXJ5SWQsCiAJcGdzc0VudHJ5ICAqZW50 cnk7CiAJY2hhcgkgICAqbm9ybV9xdWVyeSA9IE5VTEw7CiAJaW50CQkJZW5jb2RpbmcgPSBHZXRE YXRhYmFzZUVuY29kaW5nKCk7CisJYm9vbAkJcXRleHRfc3RvcmVkID0gZmFsc2U7CiAKIAlBc3Nl cnQocXVlcnkgIT0gTlVMTCk7CiAKQEAgLTEzMjUsNyArMTI3Niw2IEBAIHBnc3Nfc3RvcmUoY29u c3QgY2hhciAqcXVlcnksIHVpbnQ2NCBxdWVyeUlkLAogCXsKIAkJU2l6ZQkJcXVlcnlfb2Zmc2V0 OwogCQlpbnQJCQlnY19jb3VudDsKLQkJYm9vbAkJc3RvcmVkOwogCQlib29sCQlkb19nYzsKIAog CQkvKgpAQCAtMTM0NSw3ICsxMjk1LDcgQEAgcGdzc19zdG9yZShjb25zdCBjaGFyICpxdWVyeSwg dWludDY0IHF1ZXJ5SWQsCiAJCX0KIAogCQkvKiBBcHBlbmQgbmV3IHF1ZXJ5IHRleHQgdG8gZmls ZSB3aXRoIG9ubHkgc2hhcmVkIGxvY2sgaGVsZCAqLwotCQlzdG9yZWQgPSBxdGV4dF9zdG9yZShu b3JtX3F1ZXJ5ID8gbm9ybV9xdWVyeSA6IHF1ZXJ5LCBxdWVyeV9sZW4sCisJCXF0ZXh0X3N0b3Jl ZCA9IHF0ZXh0X3N0b3JlKG5vcm1fcXVlcnkgPyBub3JtX3F1ZXJ5IDogcXVlcnksIHF1ZXJ5X2xl biwKIAkJCQkJCQkgJnF1ZXJ5X29mZnNldCwgJmdjX2NvdW50KTsKIAogCQkvKgpAQCAtMTM2Niwx MiArMTMxNiwxMiBAQCBwZ3NzX3N0b3JlKGNvbnN0IGNoYXIgKnF1ZXJ5LCB1aW50NjQgcXVlcnlJ ZCwKIAkJICogVGhpcyBzaG91bGQgYmUgaW5mcmVxdWVudCBlbm91Z2ggdGhhdCBkb2luZyBpdCB3 aGlsZSBob2xkaW5nCiAJCSAqIGV4Y2x1c2l2ZSBsb2NrIGlzbid0IGEgcGVyZm9ybWFuY2UgcHJv YmxlbS4KIAkJICovCi0JCWlmICghc3RvcmVkIHx8IHBnc3MtPmdjX2NvdW50ICE9IGdjX2NvdW50 KQotCQkJc3RvcmVkID0gcXRleHRfc3RvcmUobm9ybV9xdWVyeSA/IG5vcm1fcXVlcnkgOiBxdWVy eSwgcXVlcnlfbGVuLAorCQlpZiAoIXF0ZXh0X3N0b3JlZCB8fCBwZ3NzLT5nY19jb3VudCAhPSBn Y19jb3VudCkKKwkJCXF0ZXh0X3N0b3JlZCA9IHF0ZXh0X3N0b3JlKG5vcm1fcXVlcnkgPyBub3Jt X3F1ZXJ5IDogcXVlcnksIHF1ZXJ5X2xlbiwKIAkJCQkJCQkJICZxdWVyeV9vZmZzZXQsIE5VTEwp OwogCiAJCS8qIElmIHdlIGZhaWxlZCB0byB3cml0ZSB0byB0aGUgdGV4dCBmaWxlLCBnaXZlIHVw ICovCi0JCWlmICghc3RvcmVkKQorCQlpZiAoIXF0ZXh0X3N0b3JlZCkKIAkJCWdvdG8gZG9uZTsK IAogCQkvKiBPSyB0byBjcmVhdGUgYSBuZXcgaGFzaHRhYmxlIGVudHJ5ICovCkBAIC0xNDg2LDYg KzE0MzYsMzggQEAgcGdzc19zdG9yZShjb25zdCBjaGFyICpxdWVyeSwgdWludDY0IHF1ZXJ5SWQs CiAJCVNwaW5Mb2NrUmVsZWFzZSgmZS0+bXV0ZXgpOwogCX0KIAorCS8qIFdyaXRlIGVudHJ5IHRv IFhMT0cgKi8KKwlpZiAocGdzc19zYXZlICYmICFSZWNvdmVyeUluUHJvZ3Jlc3MoKSkKKwl7CisJ CXBnc3NYTG9nSW5zZXJ0ICp4bG9nX2VudHJ5OworCQlYTG9nUmVjUHRyCXB0cjsKKworCQl4bG9n X2VudHJ5ID0gcGFsbG9jKHNpemVvZihwZ3NzWExvZ0luc2VydCkpOworCQl4bG9nX2VudHJ5LT5o ZWFkZXIgPSBQR1NTX0ZJTEVfSEVBREVSOworCQl4bG9nX2VudHJ5LT5rZXkgPSBlbnRyeS0+a2V5 OworCQl4bG9nX2VudHJ5LT5jb3VudGVycyA9IGVudHJ5LT5jb3VudGVyczsKKwkJeGxvZ19lbnRy eS0+ZW5jb2RpbmcgPSBlbnRyeS0+ZW5jb2Rpbmc7CisJCXhsb2dfZW50cnktPnN0YXRzX3NpbmNl ID0gZW50cnktPnN0YXRzX3NpbmNlOworCQl4bG9nX2VudHJ5LT5taW5tYXhfc3RhdHNfc2luY2Ug PSBlbnRyeS0+bWlubWF4X3N0YXRzX3NpbmNlOworCisJCVhMb2dCZWdpbkluc2VydCgpOworCQlY TG9nUmVnaXN0ZXJEYXRhKChjaGFyICopIHhsb2dfZW50cnksIG9mZnNldG9mKHBnc3NYTG9nSW5z ZXJ0LCBxdGV4dCkpOworCisJCS8qIFdyaXRlIHRoZSBxdWVyeSB0ZXh0IGlmIG5lZWQgKi8KKwkJ aWYgKHF0ZXh0X3N0b3JlZCkKKwkJeworCQkJeGxvZ19lbnRyeS0+cXVlcnlfbGVuID0gZW50cnkt PnF1ZXJ5X2xlbjsKKwkJCVhMb2dSZWdpc3RlckRhdGEobm9ybV9xdWVyeSA/IG5vcm1fcXVlcnkg OiAoY2hhciAqKSBxdWVyeSwgcXVlcnlfbGVuKTsKKwkJfQorCQllbHNlCisJCQl4bG9nX2VudHJ5 LT5xdWVyeV9sZW4gPSAwOworCisJCVhMb2dTZXRSZWNvcmRGbGFncyhYTE9HX01BUktfVU5JTVBP UlRBTlQpOworCQlwdHIgPSBYTG9nSW5zZXJ0KENVU1RPTVJNR1JfSUQsIFBHU1NfWExPR19JTlNF UlQpOworCQlYTG9nRmx1c2gocHRyKTsKKwkJcGZyZWUoeGxvZ19lbnRyeSk7CisJfQorCiBkb25l OgogCUxXTG9ja1JlbGVhc2UocGdzcy0+bG9jayk7CiAKQEAgLTI2NzYsNiArMjY1OCwyNyBAQCBl bnRyeV9yZXNldChPaWQgdXNlcmlkLCBPaWQgZGJpZCwgdWludDY0IHF1ZXJ5aWQsIGJvb2wgbWlu bWF4X29ubHkpCiAJTFdMb2NrQWNxdWlyZShwZ3NzLT5sb2NrLCBMV19FWENMVVNJVkUpOwogCW51 bV9lbnRyaWVzID0gaGFzaF9nZXRfbnVtX2VudHJpZXMocGdzc19oYXNoKTsKIAorCS8qIFdyaXRl IGVudHJ5IHRvIFhMT0cgKi8KKwlpZiAocGdzc19zYXZlICYmICFSZWNvdmVyeUluUHJvZ3Jlc3Mo KSkKKwl7CisJCXBnc3NYTG9nUmVzZXQgKnhscmVjOworCQlYTG9nUmVjUHRyCXB0cjsKKworCQl4 bHJlYyA9IHBhbGxvYzAoc2l6ZW9mKHBnc3NYTG9nUmVzZXQpKTsKKwkJeGxyZWMtPmhlYWRlciA9 IFBHU1NfRklMRV9IRUFERVI7CisJCXhscmVjLT51c2VyaWQgPSB1c2VyaWQ7CisJCXhscmVjLT5k YmlkID0gZGJpZDsKKwkJeGxyZWMtPnF1ZXJ5aWQgPSBxdWVyeWlkOworCQl4bHJlYy0+bWlubWF4 X29ubHkgPSBtaW5tYXhfb25seTsKKworCQlYTG9nQmVnaW5JbnNlcnQoKTsKKwkJWExvZ1JlZ2lz dGVyRGF0YSgoY2hhciAqKSB4bHJlYywgc2l6ZW9mKHBnc3NYTG9nUmVzZXQpKTsKKwkJWExvZ1Nl dFJlY29yZEZsYWdzKFhMT0dfTUFSS19VTklNUE9SVEFOVCk7CisJCXB0ciA9IFhMb2dJbnNlcnQo Q1VTVE9NUk1HUl9JRCwgUEdTU19YTE9HX1JFU0VUKTsKKwkJWExvZ0ZsdXNoKHB0cik7CisJCXBm cmVlKHhscmVjKTsKKwl9CisKIAlzdGF0c19yZXNldCA9IEdldEN1cnJlbnRUaW1lc3RhbXAoKTsK IAogCWlmICh1c2VyaWQgIT0gMCAmJiBkYmlkICE9IDAgJiYgcXVlcnlpZCAhPSBVSU5UNjRDT05T VCgwKSkKQEAgLTMwMTAsMyArMzAxMywyMzYgQEAgY29tcF9sb2NhdGlvbihjb25zdCB2b2lkICph LCBjb25zdCB2b2lkICpiKQogCiAJcmV0dXJuIHBnX2NtcF9zMzIobCwgcik7CiB9CisKK3N0YXRp YyB2b2lkCitybWdyX3JlZG8oWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCit7CisJdWludDgJCWlu Zm8gPSBYTG9nUmVjR2V0SW5mbyhyZWNvcmQpICYgflhMUl9JTkZPX01BU0s7CisKKwkvKgorCSAq IEJlY2F1c2Ugd2UgZGlkIG5vdCByZXN0b3JlIHJlY29yZHMgZnJvbSBzdG9yYWdlLAorCSAqIHdl IGFsc28gZG8gbm90IHJlc3RvcmUgcmVjb3JkcyBmcm9tIFdBTC4KKwkgKi8KKwlpZiAoIXBnc3Nf c2F2ZSkKKwkJcmV0dXJuOworCisJaWYgKGluZm8gPT0gUEdTU19YTE9HX0lOU0VSVCkKKwl7CisJ CXBnc3NYTG9nSW5zZXJ0ICp4bHJlYyA9IChwZ3NzWExvZ0luc2VydCAqKSBYTG9nUmVjR2V0RGF0 YShyZWNvcmQpOworCQlwZ3NzRW50cnkgICplbnRyeTsKKworCQlpZiAoeGxyZWMtPmhlYWRlciAh PSBQR1NTX0ZJTEVfSEVBREVSKQorCQl7CisJCQllbG9nKFdBUk5JTkcsICJTa2lwIHRoZSBpbmNv bnNpc3RlbnQgV0FMIHJlY29yZCIpOworCQkJcmV0dXJuOworCQl9CisKKwkJLyogU2FmZXR5IGNo ZWNrLi4uICovCisJCWlmICghcGdzcyB8fCAhcGdzc19oYXNoKQorCQkJcmV0dXJuOworCisJCUxX TG9ja0FjcXVpcmUocGdzcy0+bG9jaywgTFdfRVhDTFVTSVZFKTsKKworCQllbnRyeSA9IChwZ3Nz RW50cnkgKikgaGFzaF9zZWFyY2gocGdzc19oYXNoLCAmeGxyZWMtPmtleSwgSEFTSF9GSU5ELCBO VUxMKTsKKworCQkvKiBDcmVhdGUgbmV3IGVudHJ5LCBpZiBub3QgcHJlc2VudCAqLworCQlpZiAo IWVudHJ5KQorCQl7CisJCQlTaXplCQlxdWVyeV9vZmZzZXQ7CisJCQlib29sCQlzdG9yZWQ7CisJ CQljaGFyCSAgICpxdWVyeTsKKworCQkJQXNzZXJ0KHhscmVjLT5xdWVyeV9sZW4gPiAwKTsKKwor CQkJcXVlcnkgPSAoY2hhciAqKSB4bHJlYy0+cXRleHQ7CisKKwkJCS8qIEFwcGVuZCBuZXcgcXVl cnkgdGV4dCB0byBmaWxlICovCisJCQlzdG9yZWQgPSBxdGV4dF9zdG9yZShxdWVyeSwgeGxyZWMt PnF1ZXJ5X2xlbiwgJnF1ZXJ5X29mZnNldCwgTlVMTCk7CisKKwkJCS8qIElmIHdlIGZhaWxlZCB0 byB3cml0ZSB0byB0aGUgdGV4dCBmaWxlLCBnaXZlIHVwICovCisJCQlpZiAoIXN0b3JlZCkKKwkJ CXsKKwkJCQlMV0xvY2tSZWxlYXNlKHBnc3MtPmxvY2spOworCQkJCXJldHVybjsKKwkJCX0KKwor CQkJLyogT0sgdG8gY3JlYXRlIGEgbmV3IGhhc2h0YWJsZSBlbnRyeSAqLworCQkJZW50cnkgPSBl bnRyeV9hbGxvYygmeGxyZWMtPmtleSwgcXVlcnlfb2Zmc2V0LCB4bHJlYy0+cXVlcnlfbGVuLAor CQkJCQkJCQl4bHJlYy0+ZW5jb2RpbmcsIGZhbHNlKTsKKworCQkJLyogSWYgbmVlZGVkLCBwZXJm b3JtIGdhcmJhZ2UgY29sbGVjdGlvbiAqLworCQkJZ2NfcXRleHRzKCk7CisJCX0KKworCQkvKiBD b3B5IHRoZSBuZWNlc3NhcnkgZGF0YSBmcm9tIFhMb2cgcmVjb3JkICovCisJCWVudHJ5LT5jb3Vu dGVycyA9IHhscmVjLT5jb3VudGVyczsKKworCQllbnRyeS0+ZW5jb2RpbmcgPSB4bHJlYy0+ZW5j b2Rpbmc7CisJCWVudHJ5LT5zdGF0c19zaW5jZSA9IHhscmVjLT5zdGF0c19zaW5jZTsKKwkJZW50 cnktPm1pbm1heF9zdGF0c19zaW5jZSA9IHhscmVjLT5taW5tYXhfc3RhdHNfc2luY2U7CisKKwkJ TFdMb2NrUmVsZWFzZShwZ3NzLT5sb2NrKTsKKwl9CisJZWxzZSBpZiAoaW5mbyA9PSBQR1NTX1hM T0dfUkVTRVQpCisJeworCQlwZ3NzWExvZ1Jlc2V0ICp4bHJlYyA9IChwZ3NzWExvZ1Jlc2V0ICop IFhMb2dSZWNHZXREYXRhKHJlY29yZCk7CisKKwkJaWYgKHhscmVjLT5oZWFkZXIgIT0gUEdTU19G SUxFX0hFQURFUikKKwkJeworCQkJZWxvZyhXQVJOSU5HLCAiU2tpcCB0aGUgaW5jb25zaXN0ZW50 IFdBTCByZWNvcmQiKTsKKwkJCXJldHVybjsKKwkJfQorCisJCWVudHJ5X3Jlc2V0KHhscmVjLT51 c2VyaWQsIHhscmVjLT5kYmlkLCB4bHJlYy0+cXVlcnlpZCwgeGxyZWMtPm1pbm1heF9vbmx5KTsK Kwl9Cit9CisKK3N0YXRpYyB2b2lkCitybWdyX2Rlc2MoU3RyaW5nSW5mbyBidWYsIFhMb2dSZWFk ZXJTdGF0ZSAqcmVjb3JkKQoreworCWNoYXIJICAgKnJlYyA9IFhMb2dSZWNHZXREYXRhKHJlY29y ZCk7CisJdWludDgJCWluZm8gPSBYTG9nUmVjR2V0SW5mbyhyZWNvcmQpICYgflhMUl9JTkZPX01B U0s7CisKKwlpZiAoaW5mbyA9PSBQR1NTX1hMT0dfSU5TRVJUKQorCXsKKwkJcGdzc1hMb2dJbnNl cnQgKnhscmVjID0gKHBnc3NYTG9nSW5zZXJ0ICopIHJlYzsKKworCQlpZiAoeGxyZWMtPmhlYWRl ciAhPSBQR1NTX0ZJTEVfSEVBREVSKQorCQl7CisJCQllbG9nKFdBUk5JTkcsICJTa2lwIHRoZSBp bmNvbnNpc3RlbnQgV0FMIHJlY29yZCIpOworCQkJcmV0dXJuOworCQl9CisKKwkJYXBwZW5kU3Ry aW5nSW5mbyhidWYsICJ1c2VyaWQ6ICV1LCBkYmlkOiAldSwgcXVlcnlpZDogIiBVSU5UNjRfRk9S TUFUCisJCQkJCQkgIiwgdG9wbGV2ZWw6ICVkIiwKKwkJCQkJCSB4bHJlYy0+a2V5LnVzZXJpZCwg eGxyZWMtPmtleS5kYmlkLCB4bHJlYy0+a2V5LnF1ZXJ5aWQsCisJCQkJCQkgKGludCkgeGxyZWMt PmtleS50b3BsZXZlbCk7CisJfQorCWVsc2UgaWYgKGluZm8gPT0gUEdTU19YTE9HX1JFU0VUKQor CXsKKwkJcGdzc1hMb2dSZXNldCAqeGxyZWMgPSAocGdzc1hMb2dSZXNldCAqKSByZWM7CisKKwkJ aWYgKHhscmVjLT5oZWFkZXIgIT0gUEdTU19GSUxFX0hFQURFUikKKwkJeworCQkJZWxvZyhXQVJO SU5HLCAiU2tpcCB0aGUgaW5jb25zaXN0ZW50IFdBTCByZWNvcmQiKTsKKwkJCXJldHVybjsKKwkJ fQorCisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAidXNlcmlkOiAldSwgZGJpZDogJXUsIHF1ZXJ5 aWQ6ICIgVUlOVDY0X0ZPUk1BVAorCQkJCQkJICIsIG1pbm1heF9vbmx5OiAlZCIsCisJCQkJCQkg eGxyZWMtPnVzZXJpZCwgeGxyZWMtPmRiaWQsIHhscmVjLT5xdWVyeWlkLAorCQkJCQkJIChpbnQp IHhscmVjLT5taW5tYXhfb25seSk7CisJfQorfQorCitzdGF0aWMgY29uc3QgY2hhciAqCitybWdy X2lkZW50aWZ5KHVpbnQ4IGluZm8pCit7CisJaWYgKChpbmZvICYgflhMUl9JTkZPX01BU0spID09 IFBHU1NfWExPR19JTlNFUlQpCisJCXJldHVybiAiSU5TRVJUIjsKKwlpZiAoKGluZm8gJiB+WExS X0lORk9fTUFTSykgPT0gUEdTU19YTE9HX1JFU0VUKQorCQlyZXR1cm4gIlJFU0VUIjsKKworCXJl dHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZAorcm1ncl9jaGVja3BvaW50KGludCBmbGFncykK K3sKKwlGSUxFCSAgICpmaWxlOworCWNoYXIJICAgKnFidWZmZXIgPSBOVUxMOworCVNpemUJCXFi dWZmZXJfc2l6ZSA9IDA7CisJSEFTSF9TRVFfU1RBVFVTIGhhc2hfc2VxOworCWludDMyCQludW1f ZW50cmllczsKKwlwZ3NzRW50cnkgICplbnRyeTsKKworCS8qIFNhZmV0eSBjaGVjayAuLi4gc2hv dWxkbid0IGdldCBoZXJlIHVubGVzcyBzaG1lbSBpcyBzZXQgdXAuICovCisJaWYgKCFwZ3NzIHx8 ICFwZ3NzX2hhc2gpCisJCXJldHVybjsKKworCS8qIERvbid0IGR1bXAgaWYgdG9sZCBub3QgdG8u ICovCisJaWYgKCFwZ3NzX3NhdmUpCisJCXJldHVybjsKKworCS8qIFhYWDogQ2FuIHRoZXJlIGJl IGNvbmN1cnJlbnQgQ0hFQ0tQT0lOVHM/ICovCisJTFdMb2NrQWNxdWlyZShwZ3NzLT5sb2NrLCBM V19FWENMVVNJVkUpOworCisJZmlsZSA9IEFsbG9jYXRlRmlsZShQR1NTX0RVTVBfRklMRSAiLnRt cCIsIFBHX0JJTkFSWV9XKTsKKwlpZiAoZmlsZSA9PSBOVUxMKQorCQlnb3RvIGVycm9yOworCisJ aWYgKGZ3cml0ZSgmUEdTU19GSUxFX0hFQURFUiwgc2l6ZW9mKHVpbnQzMiksIDEsIGZpbGUpICE9 IDEpCisJCWdvdG8gZXJyb3I7CisJaWYgKGZ3cml0ZSgmUEdTU19QR19NQUpPUl9WRVJTSU9OLCBz aXplb2YodWludDMyKSwgMSwgZmlsZSkgIT0gMSkKKwkJZ290byBlcnJvcjsKKwludW1fZW50cmll cyA9IGhhc2hfZ2V0X251bV9lbnRyaWVzKHBnc3NfaGFzaCk7CisJaWYgKGZ3cml0ZSgmbnVtX2Vu dHJpZXMsIHNpemVvZihpbnQzMiksIDEsIGZpbGUpICE9IDEpCisJCWdvdG8gZXJyb3I7CisKKwlx YnVmZmVyID0gcXRleHRfbG9hZF9maWxlKCZxYnVmZmVyX3NpemUpOworCWlmIChxYnVmZmVyID09 IE5VTEwpCisJCWdvdG8gZXJyb3I7CisKKwkvKgorCSAqIFdoZW4gc2VyaWFsaXppbmcgdG8gZGlz aywgd2Ugc3RvcmUgcXVlcnkgdGV4dHMgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlaXIKKwkgKiBlbnRy eSBkYXRhLiAgQW55IG9ycGhhbmVkIHF1ZXJ5IHRleHRzIGFyZSB0aGVyZWJ5IGV4Y2x1ZGVkLgor CSAqLworCWhhc2hfc2VxX2luaXQoJmhhc2hfc2VxLCBwZ3NzX2hhc2gpOworCXdoaWxlICgoZW50 cnkgPSBoYXNoX3NlcV9zZWFyY2goJmhhc2hfc2VxKSkgIT0gTlVMTCkKKwl7CisJCWludAkJCWxl biA9IGVudHJ5LT5xdWVyeV9sZW47CisJCWNoYXIJICAgKnFzdHIgPSBxdGV4dF9mZXRjaChlbnRy eS0+cXVlcnlfb2Zmc2V0LCBsZW4sCisJCQkJCQkJCQkgICBxYnVmZmVyLCBxYnVmZmVyX3NpemUp OworCisJCWlmIChxc3RyID09IE5VTEwpCisJCQljb250aW51ZTsJCQkvKiBJZ25vcmUgYW55IGVu dHJpZXMgd2l0aCBib2d1cyB0ZXh0cyAqLworCisJCWlmIChmd3JpdGUoZW50cnksIHNpemVvZihw Z3NzRW50cnkpLCAxLCBmaWxlKSAhPSAxIHx8CisJCQlmd3JpdGUocXN0ciwgMSwgbGVuICsgMSwg ZmlsZSkgIT0gbGVuICsgMSkKKwkJeworCQkJLyogbm90ZTogd2UgYXNzdW1lIGhhc2hfc2VxX3Rl cm0gd29uJ3QgY2hhbmdlIGVycm5vICovCisJCQloYXNoX3NlcV90ZXJtKCZoYXNoX3NlcSk7CisJ CQlnb3RvIGVycm9yOworCQl9CisJfQorCisJLyogRHVtcCBnbG9iYWwgc3RhdGlzdGljcyBmb3Ig cGdfc3RhdF9zdGF0ZW1lbnRzICovCisJaWYgKGZ3cml0ZSgmcGdzcy0+c3RhdHMsIHNpemVvZihw Z3NzR2xvYmFsU3RhdHMpLCAxLCBmaWxlKSAhPSAxKQorCQlnb3RvIGVycm9yOworCisJZnJlZShx YnVmZmVyKTsKKwlxYnVmZmVyID0gTlVMTDsKKworCWlmIChGcmVlRmlsZShmaWxlKSkKKwl7CisJ CWZpbGUgPSBOVUxMOworCQlnb3RvIGVycm9yOworCX0KKworCS8qCisJICogUmVuYW1lIGZpbGUg aW50byBwbGFjZSwgc28gd2UgYXRvbWljYWxseSByZXBsYWNlIGFueSBvbGQgb25lLgorCSAqLwor CSh2b2lkKSBkdXJhYmxlX3JlbmFtZShQR1NTX0RVTVBfRklMRSAiLnRtcCIsIFBHU1NfRFVNUF9G SUxFLCBMT0cpOworCisJLyogVW5saW5rIHF1ZXJ5LXRleHRzIGZpbGU7IGl0J3Mgbm90IG5lZWRl ZCB3aGlsZSBzaHV0ZG93biAqLworCWlmIChmbGFncyAmIENIRUNLUE9JTlRfSVNfU0hVVERPV04p CisJCXVubGluayhQR1NTX1RFWFRfRklMRSk7CisKKwlMV0xvY2tSZWxlYXNlKHBnc3MtPmxvY2sp OworCXJldHVybjsKKworZXJyb3I6CisJZXJlcG9ydChMT0csCisJCQkoZXJyY29kZV9mb3JfZmls ZV9hY2Nlc3MoKSwKKwkJCSBlcnJtc2coImNvdWxkIG5vdCB3cml0ZSBmaWxlIFwiJXNcIjogJW0i LAorCQkJCQlQR1NTX0RVTVBfRklMRSAiLnRtcCIpKSk7CisJZnJlZShxYnVmZmVyKTsKKwlpZiAo ZmlsZSkKKwkJRnJlZUZpbGUoZmlsZSk7CisJdW5saW5rKFBHU1NfRFVNUF9GSUxFICIudG1wIik7 CisKKwlpZiAoZmxhZ3MgJiBDSEVDS1BPSU5UX0lTX1NIVVRET1dOKQorCQl1bmxpbmsoUEdTU19U RVhUX0ZJTEUpOworCisJTFdMb2NrUmVsZWFzZShwZ3NzLT5sb2NrKTsKK30KZGlmZiAtLWdpdCBh L2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL3QvMDIwX2NyYXNoLnBsIGIvY29udHJpYi9wZ19z dGF0X3N0YXRlbWVudHMvdC8wMjBfY3Jhc2gucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMC4uZjMzYmI0M2Q3ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfc3Rh dF9zdGF0ZW1lbnRzL3QvMDIwX2NyYXNoLnBsCkBAIC0wLDAgKzEsODAgQEAKKyMgQ29weXJpZ2h0 IChjKSAyMDIzLTIwMjQsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKKyMg VGVzdHMgZm9yIGNoZWNraW5nIHRoYXQgcGdfc3RhdF9zdGF0ZW1lbnRzIGNvbnRlbnRzIGFyZSBw cmVzZXJ2ZWQKKyMgYWNyb3NzIHJlc3RhcnRzLgorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdz IEZBVEFMID0+ICdhbGwnOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7Cit1c2UgUG9z dGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVzdDo6TW9yZTsKKworbXkgJG5vZGUgPSBQb3N0 Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ21haW4nKTsKKyRub2RlLT5pbml0OworJG5vZGUt PmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLAorCXFbCisJCXNoYXJlZF9wcmVsb2FkX2xp YnJhcmllcyA9ICdwZ19zdGF0X3N0YXRlbWVudHMnCisJCXJlc3RhcnRfYWZ0ZXJfY3Jhc2ggPSAx CisJXSk7Ciskbm9kZS0+c3RhcnQ7CisKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJ0NS RUFURSBFWFRFTlNJT04gcGdfc3RhdF9zdGF0ZW1lbnRzJyk7CisKKyMgV2l0aG91dCB0aGUgQ0hF Q0tQT0lOVCBob29rLCB3ZSB3b24ndCBzZWUgdGhpcyBxdWVyeSBpbiBwZ19zdGF0X3N0YXRlbWVu dHMKKyMgYWZ0ZXIgYSBzZXJ2ZXIgY3Jhc2guCiskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICdDUkVBVEUgVEFCTEUgdDEgKGEgaW50KScpOworCiskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICdDSEVDS1BPSU5UJyk7Ciskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICdTRUxFQ1Qg YSBGUk9NIHQxJyk7CisKK2lzKCAkbm9kZS0+c2FmZV9wc3FsKAorCQkncG9zdGdyZXMnLAorCQki U0VMRUNUIHF1ZXJ5IEZST00gcGdfc3RhdF9zdGF0ZW1lbnRzIFdIRVJFIHF1ZXJ5IE5PVCBMSUtF ICclcGdfc3RhdF9zdGF0ZW1lbnRzJScgT1JERVIgQlkgcXVlcnkiCisJKSwKKwkiQ0hFQ0tQT0lO VFxuQ1JFQVRFIFRBQkxFIHQxIChhIGludClcblNFTEVDVCBhIEZST00gdDEiLAorCSdwZ19zdGF0 X3N0YXRlbWVudHMgcG9wdWxhdGVkJyk7CisKKworIyBQZXJmb3JtIGEgc2VydmVyIHNodXRkb3du IGJ5IGtpbGxpbmcgdGhlIGJhY2tlbmQuCitteSAkcHNxbF90aW1lb3V0ID0gSVBDOjpSdW46OnRp bWVyKCRQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczo6dGltZW91dF9kZWZhdWx0KTsKKworbXkgKCRr aWxsbWVfc3RkaW4sICRraWxsbWVfc3Rkb3V0LCAka2lsbG1lX3N0ZGVycikgPSAoJycsICcnLCAn Jyk7CitteSAka2lsbG1lID0gSVBDOjpSdW46OnN0YXJ0KAorCVsKKwkJJ3BzcWwnLCAnLVgnLCAn LXFBdCcsICctdicsICdPTl9FUlJPUl9TVE9QPTEnLCAnLWYnLCAnLScsICctZCcsCisJCSRub2Rl LT5jb25uc3RyKCdwb3N0Z3JlcycpCisJXSwKKwknPCcsCisJXCRraWxsbWVfc3RkaW4sCisJJz4n LAorCVwka2lsbG1lX3N0ZG91dCwKKwknMj4nLAorCVwka2lsbG1lX3N0ZGVyciwKKwkkcHNxbF90 aW1lb3V0KTsKKworJGtpbGxtZV9zdGRpbiAuPSAiU0VMRUNUIHBnX2JhY2tlbmRfcGlkKCk7XG4i Oworb2soIHB1bXBfdW50aWwoCisJCSRraWxsbWUsICRwc3FsX3RpbWVvdXQsIFwka2lsbG1lX3N0 ZG91dCwgcXIvW1s6ZGlnaXQ6XV0rW1xyXG5dJC9tKSwKKwknYWNxdWlyZWQgcGlkIGZvciBTSUdR VUlUJyk7CitteSAkcGlkID0gJGtpbGxtZV9zdGRvdXQ7CitjaG9tcCgkcGlkKTsKKworbXkgJHJl dCA9IFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOjpzeXN0ZW1fbG9nKCdwZ19jdGwnLCAna2lsbCcs ICdRVUlUJywgJHBpZCk7CitpcygkcmV0LCAwLCAia2lsbGVkIHByb2Nlc3Mgd2l0aCBTSUdRVUlU Iik7CisKKyRraWxsbWUtPmZpbmlzaDsKKworIyBXYWl0IHRpbGwgc2VydmVyIHJlc3RhcnRzCitp cygkbm9kZS0+cG9sbF9xdWVyeV91bnRpbCgncG9zdGdyZXMnLCB1bmRlZiwgJycpLAorCSIxIiwg InJlY29ubmVjdGVkIGFmdGVyIFNJR1FVSVQiKTsKKworaXMoICRub2RlLT5zYWZlX3BzcWwoCisJ CSdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgcXVlcnkgRlJPTSBwZ19zdGF0X3N0YXRlbWVudHMgV0hF UkUgcXVlcnkgTk9UIExJS0UgJyVwZ19zdGF0X3N0YXRlbWVudHMlJyBPUkRFUiBCWSBxdWVyeSIK KwkpLAorCSJDSEVDS1BPSU5UXG5DUkVBVEUgVEFCTEUgdDEgKGEgaW50KVxuU0VMRUNUIGEgRlJP TSB0MVxuU0VMRUNUIHBnX2JhY2tlbmRfcGlkKCkiLAorCSdwZ19zdGF0X3N0YXRlbWVudHMgZGF0 YSBrZXB0IGFjcm9zcyB0aGUgc2VydmVyIGNyYXNoJyk7CisKKyRub2RlLT5zdG9wOworCitkb25l X3Rlc3RpbmcoKTsK --000000000000bd3e4d06142b1b1b--