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 1uRnla-00GXcX-K1 for pgsql-hackers@arkaria.postgresql.org; Wed, 18 Jun 2025 08:03:31 +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 1uRnlY-00H4kz-HT for pgsql-hackers@arkaria.postgresql.org; Wed, 18 Jun 2025 08:03:29 +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 <3danissimo@gmail.com>) id 1uRnlX-00H4kp-Pl for pgsql-hackers@lists.postgresql.org; Wed, 18 Jun 2025 08:03:28 +0000 Received: from mail-yb1-xb35.google.com ([2607:f8b0:4864:20::b35]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from <3danissimo@gmail.com>) id 1uRnlV-002fF6-0V for pgsql-hackers@lists.postgresql.org; Wed, 18 Jun 2025 08:03:27 +0000 Received: by mail-yb1-xb35.google.com with SMTP id 3f1490d57ef6-e819aa98e7aso5932291276.2 for ; Wed, 18 Jun 2025 01:03:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1750233803; x=1750838603; 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=SYKuvPWhlMfjUMj2gob6NBcpYdipdbPEfrnV736dnDE=; b=dGg3lecPoLo3+fIWnFPd7g+xbROAKWxOcKNs64OVoD2aUYiqL403VFKHRW2SEj4xp4 SeBwiZzIAfaEMhRu3I1ZmQg9V0Yf+vHaCP58niXFxlGuDau5SK42Hke1Qmcpzt67YKEo MM0cfJTaP9evVZNV7twRNEy0fIjdgzLN/xNRK0U+eWy4Rb6Tku5Ob5pt4KvKRv67HMgY r1DyPxN6nzWMvYUsWCycV8SwuqbOBbYYJ3+Fzggx/BAPUQqIQKInX/GR+mvAI+pNiFQX rmmKxK25RIkhDC2T0++CcKbvsLB2D9zaCtZO4fcp00NzRuPvvqZuItfIFa4WyNdkJLIi PV5Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750233803; x=1750838603; 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=SYKuvPWhlMfjUMj2gob6NBcpYdipdbPEfrnV736dnDE=; b=Rcej5Z9COHmu7PgvSnrWfCCQcmqR5BRJI7Roqg7ABsLhCpDOq0nqDi12pCtXO5f29B bf91BulAxH0Am787CT4vMj+3MQ19zc6v0RSbhMgnSms81MxquyP56TPOUiKh22pxUcCa SeQL2mcc3WRrPMQtkSPwg7o8XAyGAwcd2ZyLYgQAawA389rB3GK5ZmWjYavXnyb6lQmw vMPI3fqt/Sxzh1RmPXZjjuWI6ZYLefFQhV8jguBopWNkIXaL+10kbXepVCXzc2ZFuSUG s2XmP6sUJFX+jZpZjjoeH1QCCxxDlONnnGtDl2jBVAk3aILnoWHE7DroaK77dmASMqc1 EPtg== X-Forwarded-Encrypted: i=1; AJvYcCVs9h7vhWkjL4wuWMpVmnEPp4swYdgrlvZS9b2BH1DErUEFXoBEcrrwVQ/X/mk2PpcnNuq5hvpEc8eBzZfq@lists.postgresql.org X-Gm-Message-State: AOJu0YxzLdZRk6Mk4m6VNvQESEdTxtOgnIw0x1frLblaVW0m+RsDHeLf pTIO0NOV79Sv4B0tH4ohraDrEKeyYMYoTOrvPpMtjIwyY1DLqZM6TyS+DzlHF+XZ8/VTk9zFY0b NllPqDJWx2w1EXCifliat/bs3VltUsPA= X-Gm-Gg: ASbGnctXsX4KE1ikbNVGSfM1uCFE4nN5m5cZKTU4w6/w++lFOBgB7+v1VZ3NqgTlnog YtZs06GUPHhYM4Hpye8RGXwB2PEpk4sGVTubyH8r5ioNsXl2z++3XVBhSjKY5YO5oik/Xj1r1TE VLDE+IM8oH6dx6EcLuAA4ToqEw1XgLty3EFJA7fiYOrF1iohANgTos X-Google-Smtp-Source: AGHT+IGllDR8MgBsaGPicp9ifme4RhZZCy9XfQ0fmpQwVxgPLXQHqCTqo8Hn3B031cRFDd3or1UBFeVP6s5e6rs4+VA= X-Received: by 2002:a05:6902:983:b0:e7d:6834:358 with SMTP id 3f1490d57ef6-e822ab93ce5mr21360488276.0.1750233803545; Wed, 18 Jun 2025 01:03:23 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Daniil Davydov <3danissimo@gmail.com> Date: Wed, 18 Jun 2025 15:03:10 +0700 X-Gm-Features: AX0GCFtWMjG2TeekBwEqWf5tWWKk4vHytr1_rKhh1jfWfKWAA1JpsYN4ofoUFkk Message-ID: Subject: Re: POC: Parallel processing of indexes in autovacuum To: Masahiko Sawada Cc: Matheus Alcantara , Sami Imseih , Maxim Orlov , Postgres hackers Content-Type: multipart/mixed; boundary="0000000000002291160637d410a0" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000002291160637d410a0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi, On Wed, Jun 18, 2025 at 5:37=E2=80=AFAM Masahiko Sawada wrote: > > On Sun, May 25, 2025 at 10:22=E2=80=AFAM Daniil Davydov <3danissimo@gmail= .com> wrote: > > > > Thanks everybody for feedback! I attach a v4 patch to this letter. > > Main features : > > 1) 'parallel_autovacuum_workers' reloption - integer value, that sets > > the maximum number of parallel a/v workers that can be taken from > > bgworkers pool in order to process this table. > > 2) 'max_parallel_autovacuum_workers' - GUC variable, that sets the > > maximum total number of parallel a/v workers, that can be taken from > > bgworkers pool. > > 3) Parallel autovacuum does not try to use thresholds like > > NUM_INDEXES_PER_PARALLEL_WORKER and AV_PARALLEL_DEADTUP_THRESHOLD. > > 4) Parallel autovacuum now can report statistics like "planned vs. laun= ched". > > 5) For now I got rid of the 'reserving' idea, so now autovacuum > > leaders are competing with everyone for parallel workers from the > > bgworkers pool. > > > > What do you think about this implementation? > > > > I think it basically makes sense to me. A few comments: > > --- > The patch implements max_parallel_autovacuum_workers as a > PGC_POSTMASTER parameter but can we make it PGC_SIGHUP? I think we > don't necessarily need to make it a PGC_POSTMATER since it actually > doesn't affect how much shared memory we need to allocate. > Yep, there's nothing stopping us from doing that. This is a usable feature, I'll implement it in the v5 patch. > --- > I think it's better to have the prefix "autovacuum" for the new GUC > parameter for better consistency with other autovacuum-related GUC > parameters. > > --- > #include "storage/spin.h" > @@ -514,6 +515,11 @@ ReinitializeParallelDSM(ParallelContext *pcxt) > { > WaitForParallelWorkersToFinish(pcxt); > WaitForParallelWorkersToExit(pcxt); > + > + /* Release all launched (i.e. reserved) parallel autovacuum worke= rs. */ > + if (AmAutoVacuumWorkerProcess()) > + ParallelAutoVacuumReleaseWorkers(pcxt->nworkers_launched); > + > pcxt->nworkers_launched =3D 0; > if (pcxt->known_attached_workers) > { > @@ -1002,6 +1008,11 @@ DestroyParallelContext(ParallelContext *pcxt) > */ > HOLD_INTERRUPTS(); > WaitForParallelWorkersToExit(pcxt); > + > + /* Release all launched (i.e. reserved) parallel autovacuum workers. = */ > + if (AmAutoVacuumWorkerProcess()) > + ParallelAutoVacuumReleaseWorkers(pcxt->nworkers_launched); > + > RESUME_INTERRUPTS(); > > I think that it's better to release workers in vacuumparallel.c rather > than parallel.c. > Agree with both comments. Thanks for the review! Please, see v5 patch : 1) GUC variable and field in autovacuum shmem are renamed 2) ParallelAutoVacuumReleaseWorkers call moved from parallel.c to vacuumparallel.c 3) max_parallel_autovacuum_workers is now PGC_SIGHUP parameter 4) Fix little bug (ParallelAutoVacuumReleaseWorkers in autovacuum.c:735) -- Best regards, Daniil Davydov --0000000000002291160637d410a0 Content-Type: text/x-patch; charset="US-ASCII"; name="v5-0002-Sandbox-for-parallel-index-autovacuum.patch" Content-Disposition: attachment; filename="v5-0002-Sandbox-for-parallel-index-autovacuum.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mc1nz4q21 RnJvbSAxNDRjMmRmZGE1ODEwMzYzODQzNWJjY2M1NWU4ZmU4ZDI3ZGQxZmFkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYW5paWwgRGF2aWRvdiA8ZC5kYXZ5ZG92QHBvc3RncmVzcHJv LnJ1PgpEYXRlOiBGcmksIDE2IE1heSAyMDI1IDExOjU5OjAzICswNzAwClN1YmplY3Q6IFtQQVRD SCB2NSAyLzJdIFNhbmRib3ggZm9yIHBhcmFsbGVsIGluZGV4IGF1dG92YWN1dW0KCi0tLQogc3Jj L3Rlc3QvbW9kdWxlcy9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy90 ZXN0L21vZHVsZXMvYXV0b3ZhY3V1bS8uZ2l0aWdub3JlICAgICAgICB8ICAgMSArCiBzcmMvdGVz dC9tb2R1bGVzL2F1dG92YWN1dW0vTWFrZWZpbGUgICAgICAgICAgfCAgMTQgKysKIHNyYy90ZXN0 L21vZHVsZXMvYXV0b3ZhY3V1bS9tZXNvbi5idWlsZCAgICAgICB8ICAxMiArKwogLi4uL2F1dG92 YWN1dW0vdC8wMDFfYXV0b3ZhY19wYXJhbGxlbC5wbCAgICAgIHwgMTMxICsrKysrKysrKysrKysr KysrKwogc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgIHwgICAx ICsKIDYgZmlsZXMgY2hhbmdlZCwgMTYwIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBzcmMvdGVzdC9tb2R1bGVzL2F1dG92YWN1dW0vLmdpdGlnbm9yZQogY3JlYXRlIG1vZGUgMTAw NjQ0IHNyYy90ZXN0L21vZHVsZXMvYXV0b3ZhY3V1bS9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAw NjQ0IHNyYy90ZXN0L21vZHVsZXMvYXV0b3ZhY3V1bS9tZXNvbi5idWlsZAogY3JlYXRlIG1vZGUg MTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvYXV0b3ZhY3V1bS90LzAwMV9hdXRvdmFjX3BhcmFsbGVs LnBsCgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZSBiL3NyYy90ZXN0L21v ZHVsZXMvTWFrZWZpbGUKaW5kZXggYWExZDI3YmJlZDMuLmI3ZjNlMzQyZTgyIDEwMDY0NAotLS0g YS9zcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvTWFrZWZp bGUKQEAgLTUsNiArNSw3IEBAIHRvcF9idWlsZGRpciA9IC4uLy4uLy4uCiBpbmNsdWRlICQodG9w X2J1aWxkZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCiAKIFNVQkRJUlMgPSBcCisJCSAgYXV0b3Zh Y3V1bSBcCiAJCSAgYnJpbiBcCiAJCSAgY29tbWl0X3RzIFwKIAkJICBkZWxheV9leGVjdXRpb24g XApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9hdXRvdmFjdXVtLy5naXRpZ25vcmUgYi9z cmMvdGVzdC9tb2R1bGVzL2F1dG92YWN1dW0vLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uMGI1NDY0MWJjZWIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMv dGVzdC9tb2R1bGVzL2F1dG92YWN1dW0vLmdpdGlnbm9yZQpAQCAtMCwwICsxIEBACisvdG1wX2No ZWNrLwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21v ZHVsZXMvYXV0b3ZhY3V1bS9NYWtlZmlsZSBiL3NyYy90ZXN0L21vZHVsZXMvYXV0b3ZhY3V1bS9N YWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOTBjMDBmZjM1 MGIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL2F1dG92YWN1dW0vTWFrZWZp bGUKQEAgLTAsMCArMSwxNCBAQAorIyBzcmMvdGVzdC9tb2R1bGVzL2F1dG92YWN1dW0vTWFrZWZp bGUKKworVEFQX1RFU1RTID0gMQorCitpZmRlZiBVU0VfUEdYUworUEdfQ09ORklHID0gcGdfY29u ZmlnCitQR1hTIDo9ICQoc2hlbGwgJChQR19DT05GSUcpIC0tcGd4cykKK2luY2x1ZGUgJChQR1hT KQorZWxzZQorc3ViZGlyID0gc3JjL3Rlc3QvbW9kdWxlcy9hdXRvdmFjdXVtCit0b3BfYnVpbGRk aXIgPSAuLi8uLi8uLi8uLgoraW5jbHVkZSAkKHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmds b2JhbAoraW5jbHVkZSAkKHRvcF9zcmNkaXIpL2NvbnRyaWIvY29udHJpYi1nbG9iYWwubWsKK2Vu ZGlmClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9k dWxlcy9hdXRvdmFjdXVtL21lc29uLmJ1aWxkIGIvc3JjL3Rlc3QvbW9kdWxlcy9hdXRvdmFjdXVt L21lc29uLmJ1aWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mOTFj MWExNGQyYgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvYXV0b3ZhY3V1bS9t ZXNvbi5idWlsZApAQCAtMCwwICsxLDEyIEBACisjIENvcHlyaWdodCAoYykgMjAyMi0yMDI1LCBQ b3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCit0ZXN0cyArPSB7CisgICduYW1l JzogJ2F1dG92YWN1dW0nLAorICAnc2QnOiBtZXNvbi5jdXJyZW50X3NvdXJjZV9kaXIoKSwKKyAg J2JkJzogbWVzb24uY3VycmVudF9idWlsZF9kaXIoKSwKKyAgJ3RhcCc6IHsKKyAgICAndGVzdHMn OiBbCisgICAgICAndC8wMDFfYXV0b3ZhY19wYXJhbGxlbC5wbCcsCisgICAgXSwKKyAgfSwKK30K ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvYXV0b3ZhY3V1bS90LzAwMV9hdXRvdmFjX3Bh cmFsbGVsLnBsIGIvc3JjL3Rlc3QvbW9kdWxlcy9hdXRvdmFjdXVtL3QvMDAxX2F1dG92YWNfcGFy YWxsZWwucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmFlODkyZTVi NGRlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9hdXRvdmFjdXVtL3QvMDAx X2F1dG92YWNfcGFyYWxsZWwucGwKQEAgLTAsMCArMSwxMzEgQEAKK3VzZSB3YXJuaW5ncyBGQVRB TCA9PiAnYWxsJzsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwordXNlIFBvc3RncmVT UUw6OlRlc3Q6OlV0aWxzOwordXNlIFRlc3Q6Ok1vcmU7CisKK215ICRwc3FsX291dDsKKworbXkg JG5vZGUgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ25vZGUxJyk7Ciskbm9kZS0+ aW5pdDsKKyRub2RlLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgcXF7CisJYXV0b3Zh Y3V1bSA9IG9mZgorCW1heF93YWxfc2l6ZSA9IDQwOTYKKwltYXhfd29ya2VyX3Byb2Nlc3NlcyA9 IDIwCisJbWF4X3BhcmFsbGVsX3dvcmtlcnMgPSAyMAorCW1heF9wYXJhbGxlbF9tYWludGVuYW5j ZV93b3JrZXJzID0gMjAKKwlhdXRvdmFjdXVtX21heF9wYXJhbGxlbF93b3JrZXJzID0gMTAKKwls b2dfbWluX21lc3NhZ2VzID0gaW5mbworfSk7Ciskbm9kZS0+c3RhcnQ7CisKK215ICRpbmRleGVz X251bSA9IDgwOworbXkgJGluaXRpYWxfcm93c19udW0gPSAxMDBfMDAwOworbXkgJHBhcmFsbGVs X2F1dG92YWN1dW1fd29ya2VycyA9IDU7CisKKyMgQ3JlYXRlIGJpZyB0YWJsZSBhbmQgY3JlYXRl IHNwZWNpZmllZCBudW1iZXIgb2YgYi10cmVlIGluZGV4ZXMgb24gaXQKKyRub2RlLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgcXF7CisJQ1JFQVRFIFRBQkxFIHRlc3RfYXV0b3ZhYyAoCisJCWlkIFNF UklBTCBQUklNQVJZIEtFWSwKKwkJY29sXzEgSU5URUdFUiwgIGNvbF8yIElOVEVHRVIsICBjb2xf MyBJTlRFR0VSLCAgY29sXzQgSU5URUdFUiwgIGNvbF81IElOVEVHRVIsCisJCWNvbF82IElOVEVH RVIsICBjb2xfNyBJTlRFR0VSLCAgY29sXzggSU5URUdFUiwgIGNvbF85IElOVEVHRVIsICBjb2xf MTAgSU5URUdFUiwKKwkJY29sXzExIElOVEVHRVIsIGNvbF8xMiBJTlRFR0VSLCBjb2xfMTMgSU5U RUdFUiwgY29sXzE0IElOVEVHRVIsIGNvbF8xNSBJTlRFR0VSLAorCQljb2xfMTYgSU5URUdFUiwg Y29sXzE3IElOVEVHRVIsIGNvbF8xOCBJTlRFR0VSLCBjb2xfMTkgSU5URUdFUiwgY29sXzIwIElO VEVHRVIsCisJCWNvbF8yMSBJTlRFR0VSLCBjb2xfMjIgSU5URUdFUiwgY29sXzIzIElOVEVHRVIs IGNvbF8yNCBJTlRFR0VSLCBjb2xfMjUgSU5URUdFUiwKKwkJY29sXzI2IElOVEVHRVIsIGNvbF8y NyBJTlRFR0VSLCBjb2xfMjggSU5URUdFUiwgY29sXzI5IElOVEVHRVIsIGNvbF8zMCBJTlRFR0VS LAorCQljb2xfMzEgSU5URUdFUiwgY29sXzMyIElOVEVHRVIsIGNvbF8zMyBJTlRFR0VSLCBjb2xf MzQgSU5URUdFUiwgY29sXzM1IElOVEVHRVIsCisJCWNvbF8zNiBJTlRFR0VSLCBjb2xfMzcgSU5U RUdFUiwgY29sXzM4IElOVEVHRVIsIGNvbF8zOSBJTlRFR0VSLCBjb2xfNDAgSU5URUdFUiwKKwkJ Y29sXzQxIElOVEVHRVIsIGNvbF80MiBJTlRFR0VSLCBjb2xfNDMgSU5URUdFUiwgY29sXzQ0IElO VEVHRVIsIGNvbF80NSBJTlRFR0VSLAorCQljb2xfNDYgSU5URUdFUiwgY29sXzQ3IElOVEVHRVIs IGNvbF80OCBJTlRFR0VSLCBjb2xfNDkgSU5URUdFUiwgY29sXzUwIElOVEVHRVIsCisJCWNvbF81 MSBJTlRFR0VSLCBjb2xfNTIgSU5URUdFUiwgY29sXzUzIElOVEVHRVIsIGNvbF81NCBJTlRFR0VS LCBjb2xfNTUgSU5URUdFUiwKKwkJY29sXzU2IElOVEVHRVIsIGNvbF81NyBJTlRFR0VSLCBjb2xf NTggSU5URUdFUiwgY29sXzU5IElOVEVHRVIsIGNvbF82MCBJTlRFR0VSLAorCQljb2xfNjEgSU5U RUdFUiwgY29sXzYyIElOVEVHRVIsIGNvbF82MyBJTlRFR0VSLCBjb2xfNjQgSU5URUdFUiwgY29s XzY1IElOVEVHRVIsCisJCWNvbF82NiBJTlRFR0VSLCBjb2xfNjcgSU5URUdFUiwgY29sXzY4IElO VEVHRVIsIGNvbF82OSBJTlRFR0VSLCBjb2xfNzAgSU5URUdFUiwKKwkJY29sXzcxIElOVEVHRVIs IGNvbF83MiBJTlRFR0VSLCBjb2xfNzMgSU5URUdFUiwgY29sXzc0IElOVEVHRVIsIGNvbF83NSBJ TlRFR0VSLAorCQljb2xfNzYgSU5URUdFUiwgY29sXzc3IElOVEVHRVIsIGNvbF83OCBJTlRFR0VS LCBjb2xfNzkgSU5URUdFUiwgY29sXzgwIElOVEVHRVIsCisJCWNvbF84MSBJTlRFR0VSLCBjb2xf ODIgSU5URUdFUiwgY29sXzgzIElOVEVHRVIsIGNvbF84NCBJTlRFR0VSLCBjb2xfODUgSU5URUdF UiwKKwkJY29sXzg2IElOVEVHRVIsIGNvbF84NyBJTlRFR0VSLCBjb2xfODggSU5URUdFUiwgY29s Xzg5IElOVEVHRVIsIGNvbF85MCBJTlRFR0VSLAorCQljb2xfOTEgSU5URUdFUiwgY29sXzkyIElO VEVHRVIsIGNvbF85MyBJTlRFR0VSLCBjb2xfOTQgSU5URUdFUiwgY29sXzk1IElOVEVHRVIsCisJ CWNvbF85NiBJTlRFR0VSLCBjb2xfOTcgSU5URUdFUiwgY29sXzk4IElOVEVHRVIsIGNvbF85OSBJ TlRFR0VSLCBjb2xfMTAwIElOVEVHRVIKKwkpIFdJVEggKHBhcmFsbGVsX2F1dG92YWN1dW1fd29y a2VycyA9ICRwYXJhbGxlbF9hdXRvdmFjdXVtX3dvcmtlcnMpOworCisJRE8gXCRcJAorCURFQ0xB UkUKKwkJaSBJTlRFR0VSOworCUJFR0lOCisJCUZPUiBpIElOIDEuLiRpbmRleGVzX251bSBMT09Q CisJCQlFWEVDVVRFIGZvcm1hdCgnQ1JFQVRFIElOREVYIGlkeF9jb2xfXCVzIE9OIHRlc3RfYXV0 b3ZhYyAoY29sX1wlcyk7JywgaSwgaSk7CisJCUVORCBMT09QOworCUVORCBcJFwkOworfSk7CisK KyRub2RlLT5wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBDT1VOVCgqKSBGUk9NIHBnX2luZGV4 IGkKKwkgICBKT0lOIHBnX2NsYXNzIGMgT04gYy5vaWQgPSBpLmluZHJlbGlkCisJICBXSEVSRSBj LnJlbG5hbWUgPSAndGVzdF9hdXRvdmFjJzsiLAorCXN0ZG91dCA9PiBcJHBzcWxfb3V0CispOwor aXMoJHBzcWxfb3V0LCAkaW5kZXhlc19udW0gKyAxLCAiQWxsIGluZGV4ZXMgY3JlYXRlZCBzdWNj ZXNzZnVsbHkiKTsKKworJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcXsKKwlETyBcJFwk CisJREVDTEFSRQorCSAgICBpIElOVEVHRVI7CisJQkVHSU4KKwkgICAgRk9SIGkgSU4gMS4uJGlu aXRpYWxfcm93c19udW0gTE9PUAorCSAgICAgICAgSU5TRVJUIElOVE8gdGVzdF9hdXRvdmFjICgK KwkgICAgICAgICAgICBjb2xfMSwgY29sXzIsIGNvbF8zLCBjb2xfNCwgY29sXzUsIGNvbF82LCBj b2xfNywgY29sXzgsIGNvbF85LCBjb2xfMTAsCisJICAgICAgICAgICAgY29sXzExLCBjb2xfMTIs IGNvbF8xMywgY29sXzE0LCBjb2xfMTUsIGNvbF8xNiwgY29sXzE3LCBjb2xfMTgsIGNvbF8xOSwg Y29sXzIwLAorCSAgICAgICAgICAgIGNvbF8yMSwgY29sXzIyLCBjb2xfMjMsIGNvbF8yNCwgY29s XzI1LCBjb2xfMjYsIGNvbF8yNywgY29sXzI4LCBjb2xfMjksIGNvbF8zMCwKKwkgICAgICAgICAg ICBjb2xfMzEsIGNvbF8zMiwgY29sXzMzLCBjb2xfMzQsIGNvbF8zNSwgY29sXzM2LCBjb2xfMzcs IGNvbF8zOCwgY29sXzM5LCBjb2xfNDAsCisJICAgICAgICAgICAgY29sXzQxLCBjb2xfNDIsIGNv bF80MywgY29sXzQ0LCBjb2xfNDUsIGNvbF80NiwgY29sXzQ3LCBjb2xfNDgsIGNvbF80OSwgY29s XzUwLAorCSAgICAgICAgICAgIGNvbF81MSwgY29sXzUyLCBjb2xfNTMsIGNvbF81NCwgY29sXzU1 LCBjb2xfNTYsIGNvbF81NywgY29sXzU4LCBjb2xfNTksIGNvbF82MCwKKwkgICAgICAgICAgICBj b2xfNjEsIGNvbF82MiwgY29sXzYzLCBjb2xfNjQsIGNvbF82NSwgY29sXzY2LCBjb2xfNjcsIGNv bF82OCwgY29sXzY5LCBjb2xfNzAsCisJICAgICAgICAgICAgY29sXzcxLCBjb2xfNzIsIGNvbF83 MywgY29sXzc0LCBjb2xfNzUsIGNvbF83NiwgY29sXzc3LCBjb2xfNzgsIGNvbF83OSwgY29sXzgw LAorCSAgICAgICAgICAgIGNvbF84MSwgY29sXzgyLCBjb2xfODMsIGNvbF84NCwgY29sXzg1LCBj b2xfODYsIGNvbF84NywgY29sXzg4LCBjb2xfODksIGNvbF85MCwKKwkgICAgICAgICAgICBjb2xf OTEsIGNvbF85MiwgY29sXzkzLCBjb2xfOTQsIGNvbF85NSwgY29sXzk2LCBjb2xfOTcsIGNvbF85 OCwgY29sXzk5LCBjb2xfMTAwCisJICAgICAgICApIFZBTFVFUyAoCisJICAgICAgICAgICAgaSwg aSArIDEsIGkgKyAyLCBpICsgMywgaSArIDQsIGkgKyA1LCBpICsgNiwgaSArIDcsIGkgKyA4LCBp ICsgOSwKKwkgICAgICAgICAgICBpICsgMTAsIGkgKyAxMSwgaSArIDEyLCBpICsgMTMsIGkgKyAx NCwgaSArIDE1LCBpICsgMTYsIGkgKyAxNywgaSArIDE4LCBpICsgMTksCisJICAgICAgICAgICAg aSArIDIwLCBpICsgMjEsIGkgKyAyMiwgaSArIDIzLCBpICsgMjQsIGkgKyAyNSwgaSArIDI2LCBp ICsgMjcsIGkgKyAyOCwgaSArIDI5LAorCSAgICAgICAgICAgIGkgKyAzMCwgaSArIDMxLCBpICsg MzIsIGkgKyAzMywgaSArIDM0LCBpICsgMzUsIGkgKyAzNiwgaSArIDM3LCBpICsgMzgsIGkgKyAz OSwKKwkgICAgICAgICAgICBpICsgNDAsIGkgKyA0MSwgaSArIDQyLCBpICsgNDMsIGkgKyA0NCwg aSArIDQ1LCBpICsgNDYsIGkgKyA0NywgaSArIDQ4LCBpICsgNDksCisJICAgICAgICAgICAgaSAr IDUwLCBpICsgNTEsIGkgKyA1MiwgaSArIDUzLCBpICsgNTQsIGkgKyA1NSwgaSArIDU2LCBpICsg NTcsIGkgKyA1OCwgaSArIDU5LAorCSAgICAgICAgICAgIGkgKyA2MCwgaSArIDYxLCBpICsgNjIs IGkgKyA2MywgaSArIDY0LCBpICsgNjUsIGkgKyA2NiwgaSArIDY3LCBpICsgNjgsIGkgKyA2OSwK KwkgICAgICAgICAgICBpICsgNzAsIGkgKyA3MSwgaSArIDcyLCBpICsgNzMsIGkgKyA3NCwgaSAr IDc1LCBpICsgNzYsIGkgKyA3NywgaSArIDc4LCBpICsgNzksCisJICAgICAgICAgICAgaSArIDgw LCBpICsgODEsIGkgKyA4MiwgaSArIDgzLCBpICsgODQsIGkgKyA4NSwgaSArIDg2LCBpICsgODcs IGkgKyA4OCwgaSArIDg5LAorCSAgICAgICAgICAgIGkgKyA5MCwgaSArIDkxLCBpICsgOTIsIGkg KyA5MywgaSArIDk0LCBpICsgOTUsIGkgKyA5NiwgaSArIDk3LCBpICsgOTgsIGkgKyA5OQorCSAg ICAgICAgKTsKKwkgICAgRU5EIExPT1A7CisJRU5EIFwkXCQ7Cit9KTsKKworJG5vZGUtPnBzcWwo J3Bvc3RncmVzJywKKwkiU0VMRUNUIENPVU5UKCopIEZST00gdGVzdF9hdXRvdmFjOyIsCisJc3Rk b3V0ID0+IFwkcHNxbF9vdXQKKyk7CitpcygkcHNxbF9vdXQsICRpbml0aWFsX3Jvd3NfbnVtLCAi QWxsIGRhdGEgaW5zZXJ0ZWQgaW50byB0YWJsZSBzdWNjZXNzZnVsbHkiKTsKKworJG5vZGUtPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCBxcXsKKwlVUERBVEUgdGVzdF9hdXRvdmFjIFNFVCBjb2xfMSA9 IDAgV0hFUkUgKGNvbF8xICUgMykgPSAwOworCUFOQUxZWkUgdGVzdF9hdXRvdmFjOworfSk7CisK KyMgUmVkdWNlIGF1dG92YWN1dW1fd29ya19tZW0sIHNvIGxlYWRlciBwcm9jZXNzIHdpbGwgcGVy Zm9ybSBwYXJhbGxlbCBpbmRleGkKKyMgdmFjdXVtIHBoYXNlIHNldmVyYWwgdGltZXMKKyRub2Rl LT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgcXF7CisJYXV0b3ZhY3V1bV9uYXB0aW1l ID0gJzFzJworCWF1dG92YWN1dW1fdmFjdXVtX3RocmVzaG9sZCA9IDEKKwlhdXRvdmFjdXVtX2Fu YWx5emVfdGhyZXNob2xkID0gMQorCWF1dG92YWN1dW1fdmFjdXVtX3NjYWxlX2ZhY3RvciA9IDAu MQorCWF1dG92YWN1dW1fYW5hbHl6ZV9zY2FsZV9mYWN0b3IgPSAwLjEKKwlhdXRvdmFjdXVtID0g b24KK30pOworCiskbm9kZS0+cmVzdGFydDsKKworIyBzbGVlcCgzNjAwKTsKKworb2soMSwgIlRo ZXJlIGFyZSBubyBzZWdmYXVsdHMiKTsKKworJG5vZGUtPnN0b3A7Citkb25lX3Rlc3RpbmcoKTsK ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvbWVzb24uYnVpbGQgYi9zcmMvdGVzdC9tb2R1 bGVzL21lc29uLmJ1aWxkCmluZGV4IDlkZTAwNTdiZDFkLi43ZjJhZDgxMGNhMCAxMDA2NDQKLS0t IGEvc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL21l c29uLmJ1aWxkCkBAIC0xLDUgKzEsNiBAQAogIyBDb3B5cmlnaHQgKGMpIDIwMjItMjAyNSwgUG9z dGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKIAorc3ViZGlyKCdhdXRvdmFjdXVtJykK IHN1YmRpcignYnJpbicpCiBzdWJkaXIoJ2NvbW1pdF90cycpCiBzdWJkaXIoJ2RlbGF5X2V4ZWN1 dGlvbicpCi0tIAoyLjQzLjAKCg== --0000000000002291160637d410a0 Content-Type: text/x-patch; charset="US-ASCII"; name="v5-0001-Parallel-index-autovacuum-with-bgworkers.patch" Content-Disposition: attachment; filename="v5-0001-Parallel-index-autovacuum-with-bgworkers.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mc1nz4pv0 RnJvbSA4OGU1NWQ0OTg5NWViYzI4NzIxM2E0MTVjMjQyYjQ3MzNjZGVjYmE4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYW5paWwgRGF2aWRvdiA8ZC5kYXZ5ZG92QHBvc3RncmVzcHJv LnJ1PgpEYXRlOiBGcmksIDE2IE1heSAyMDI1IDExOjU4OjQwICswNzAwClN1YmplY3Q6IFtQQVRD SCB2NSAxLzJdIFBhcmFsbGVsIGluZGV4IGF1dG92YWN1dW0gd2l0aCBiZ3dvcmtlcnMKCi0tLQog c3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi9yZWxvcHRpb25zLmMgICAgICAgIHwgIDEyICsrCiBz cmMvYmFja2VuZC9hY2Nlc3MvaGVhcC92YWN1dW1sYXp5LmMgICAgICAgICAgfCAgIDYgKy0KIHNy Yy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bXBhcmFsbGVsLmMgICAgICAgICB8ICA5MyArKysrKysr Ky0tLQogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9hdXRvdmFjdXVtLmMgICAgICAgICAgIHwgMTQ0 ICsrKysrKysrKysrKysrKysrLQogc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9nbG9iYWxzLmMgICAg ICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jICAg ICAgICAgICB8ICAxMCArKwogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYu c2FtcGxlIHwgICAxICsKIHNyYy9pbmNsdWRlL21pc2NhZG1pbi5oICAgICAgICAgICAgICAgICAg ICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9wb3N0bWFzdGVyL2F1dG92YWN1dW0uaCAgICAgICAg ICAgfCAgIDQgKwogc3JjL2luY2x1ZGUvdXRpbHMvZ3VjX2hvb2tzLmggICAgICAgICAgICAgICAg IHwgICAyICsKIHNyYy9pbmNsdWRlL3V0aWxzL3JlbC5oICAgICAgICAgICAgICAgICAgICAgICB8 ICAxMiArKwogMTEgZmlsZXMgY2hhbmdlZCwgMjU5IGluc2VydGlvbnMoKyksIDI3IGRlbGV0aW9u cygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vcmVsb3B0aW9ucy5j IGIvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi9yZWxvcHRpb25zLmMKaW5kZXggNTA3NDdjMTYz OTYuLmUzNmQ1OWY2MzJiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL3Jl bG9wdGlvbnMuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL3JlbG9wdGlvbnMuYwpA QCAtMjIyLDYgKzIyMiwxNiBAQCBzdGF0aWMgcmVsb3B0X2ludCBpbnRSZWxPcHRzW10gPQogCQl9 LAogCQlTUEdJU1RfREVGQVVMVF9GSUxMRkFDVE9SLCBTUEdJU1RfTUlOX0ZJTExGQUNUT1IsIDEw MAogCX0sCisJeworCQl7CisJCQkicGFyYWxsZWxfYXV0b3ZhY3V1bV93b3JrZXJzIiwKKwkJCSJN YXhpbXVtIG51bWJlciBvZiBwYXJhbGxlbCBhdXRvdmFjdXVtIHdvcmtlcnMgdGhhdCBjYW4gYmUg dGFrZW4gZnJvbSBiZ3dvcmtlcnMgcG9vbCBmb3IgcHJvY2Vzc2luZyB0aGlzIHRhYmxlLiAiCisJ CQkiSWYgdmFsdWUgaXMgMCB0aGVuIHBhcmFsbGVsIGRlZ3JlZSB3aWxsIGNvbXB1dGVkIGJhc2Vk IG9uIG51bWJlciBvZiBpbmRleGVzLiIsCisJCQlSRUxPUFRfS0lORF9IRUFQLAorCQkJU2hhcmVV cGRhdGVFeGNsdXNpdmVMb2NrCisJCX0sCisJCS0xLCAtMSwgMTAyNAorCX0sCiAJewogCQl7CiAJ CQkiYXV0b3ZhY3V1bV92YWN1dW1fdGhyZXNob2xkIiwKQEAgLTE4NzIsNiArMTg4Miw4IEBAIGRl ZmF1bHRfcmVsb3B0aW9ucyhEYXR1bSByZWxvcHRpb25zLCBib29sIHZhbGlkYXRlLCByZWxvcHRf a2luZCBraW5kKQogCQl7ImZpbGxmYWN0b3IiLCBSRUxPUFRfVFlQRV9JTlQsIG9mZnNldG9mKFN0 ZFJkT3B0aW9ucywgZmlsbGZhY3Rvcil9LAogCQl7ImF1dG92YWN1dW1fZW5hYmxlZCIsIFJFTE9Q VF9UWVBFX0JPT0wsCiAJCW9mZnNldG9mKFN0ZFJkT3B0aW9ucywgYXV0b3ZhY3V1bSkgKyBvZmZz ZXRvZihBdXRvVmFjT3B0cywgZW5hYmxlZCl9LAorCQl7InBhcmFsbGVsX2F1dG92YWN1dW1fd29y a2VycyIsIFJFTE9QVF9UWVBFX0lOVCwKKwkJb2Zmc2V0b2YoU3RkUmRPcHRpb25zLCBhdXRvdmFj dXVtKSArIG9mZnNldG9mKEF1dG9WYWNPcHRzLCBwYXJhbGxlbF9hdXRvdmFjdXVtX3dvcmtlcnMp fSwKIAkJeyJhdXRvdmFjdXVtX3ZhY3V1bV90aHJlc2hvbGQiLCBSRUxPUFRfVFlQRV9JTlQsCiAJ CW9mZnNldG9mKFN0ZFJkT3B0aW9ucywgYXV0b3ZhY3V1bSkgKyBvZmZzZXRvZihBdXRvVmFjT3B0 cywgdmFjdXVtX3RocmVzaG9sZCl9LAogCQl7ImF1dG92YWN1dW1fdmFjdXVtX21heF90aHJlc2hv bGQiLCBSRUxPUFRfVFlQRV9JTlQsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVh cC92YWN1dW1sYXp5LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC92YWN1dW1sYXp5LmMKaW5k ZXggMDk0MTY0NTBhZjkuLmI4OWIxNTYzNDQ0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nl c3MvaGVhcC92YWN1dW1sYXp5LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvdmFjdXVt bGF6eS5jCkBAIC0zNDkzLDYgKzM0OTMsMTAgQEAgZGVhZF9pdGVtc19hbGxvYyhMVlJlbFN0YXRl ICp2YWNyZWwsIGludCBud29ya2VycykKIAkJYXV0b3ZhY3V1bV93b3JrX21lbSAhPSAtMSA/CiAJ CWF1dG92YWN1dW1fd29ya19tZW0gOiBtYWludGVuYW5jZV93b3JrX21lbTsKIAorCWludAkJCWVs ZXZlbCA9IEFtQXV0b1ZhY3V1bVdvcmtlclByb2Nlc3MoKSB8fAorCQl2YWNyZWwtPnZlcmJvc2Ug PworCQlJTkZPIDogREVCVUcyOworCiAJLyoKIAkgKiBJbml0aWFsaXplIHN0YXRlIGZvciBhIHBh cmFsbGVsIHZhY3V1bS4gIEFzIG9mIG5vdywgb25seSBvbmUgd29ya2VyIGNhbgogCSAqIGJlIHVz ZWQgZm9yIGFuIGluZGV4LCBzbyB3ZSBpbnZva2UgcGFyYWxsZWxpc20gb25seSBpZiB0aGVyZSBh cmUgYXQKQEAgLTM1MTksNyArMzUyMyw3IEBAIGRlYWRfaXRlbXNfYWxsb2MoTFZSZWxTdGF0ZSAq dmFjcmVsLCBpbnQgbndvcmtlcnMpCiAJCQl2YWNyZWwtPnB2cyA9IHBhcmFsbGVsX3ZhY3V1bV9p bml0KHZhY3JlbC0+cmVsLCB2YWNyZWwtPmluZHJlbHMsCiAJCQkJCQkJCQkJCSAgIHZhY3JlbC0+ bmluZGV4ZXMsIG53b3JrZXJzLAogCQkJCQkJCQkJCQkgICB2YWNfd29ya19tZW0sCi0JCQkJCQkJ CQkJCSAgIHZhY3JlbC0+dmVyYm9zZSA/IElORk8gOiBERUJVRzIsCisJCQkJCQkJCQkJCSAgIGVs ZXZlbCwKIAkJCQkJCQkJCQkJICAgdmFjcmVsLT5ic3RyYXRlZ3kpOwogCiAJCS8qCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW1wYXJhbGxlbC5jIGIvc3JjL2JhY2tlbmQv Y29tbWFuZHMvdmFjdXVtcGFyYWxsZWwuYwppbmRleCAwZmVlYTFkMzBlYy4uYmQzMTRkMjMyOTgg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bXBhcmFsbGVsLmMKKysrIGIv c3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtcGFyYWxsZWwuYwpAQCAtMSwxNiArMSwxNiBAQAog LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCiAgKgogICogdmFjdXVtcGFyYWxsZWwuYwotICoJICBTdXBwb3J0 IHJvdXRpbmVzIGZvciBwYXJhbGxlbCB2YWN1dW0gZXhlY3V0aW9uLgorICoJICBTdXBwb3J0IHJv dXRpbmVzIGZvciBwYXJhbGxlbCBbYXV0b112YWN1dW0gZXhlY3V0aW9uLgogICoKICAqIFRoaXMg ZmlsZSBjb250YWlucyByb3V0aW5lcyB0aGF0IGFyZSBpbnRlbmRlZCB0byBzdXBwb3J0IHNldHRp bmcgdXAsIHVzaW5nLAogICogYW5kIHRlYXJpbmcgZG93biBhIFBhcmFsbGVsVmFjdXVtU3RhdGUu CiAgKgotICogSW4gYSBwYXJhbGxlbCB2YWN1dW0sIHdlIHBlcmZvcm0gYm90aCBpbmRleCBidWxr IGRlbGV0aW9uIGFuZCBpbmRleCBjbGVhbnVwCi0gKiB3aXRoIHBhcmFsbGVsIHdvcmtlciBwcm9j ZXNzZXMuICBJbmRpdmlkdWFsIGluZGV4ZXMgYXJlIHByb2Nlc3NlZCBieSBvbmUKLSAqIHZhY3V1 bSBwcm9jZXNzLiAgUGFyYWxsZWxWYWN1dW1TdGF0ZSBjb250YWlucyBzaGFyZWQgaW5mb3JtYXRp b24gYXMgd2VsbCBhcwotICogdGhlIG1lbW9yeSBzcGFjZSBmb3Igc3RvcmluZyBkZWFkIGl0ZW1z IGFsbG9jYXRlZCBpbiB0aGUgRFNBIGFyZWEuICBXZQotICogbGF1bmNoIHBhcmFsbGVsIHdvcmtl ciBwcm9jZXNzZXMgYXQgdGhlIHN0YXJ0IG9mIHBhcmFsbGVsIGluZGV4CisgKiBJbiBhIHBhcmFs bGVsIFthdXRvXXZhY3V1bSwgd2UgcGVyZm9ybSBib3RoIGluZGV4IGJ1bGsgZGVsZXRpb24gYW5k IGluZGV4CisgKiBjbGVhbnVwIHdpdGggcGFyYWxsZWwgd29ya2VyIHByb2Nlc3Nlcy4gIEluZGl2 aWR1YWwgaW5kZXhlcyBhcmUgcHJvY2Vzc2VkIGJ5CisgKiBvbmUgW2F1dG9ddmFjdXVtIHByb2Nl c3MuICBQYXJhbGxlbFZhY3V1bVN0YXRlIGNvbnRhaW5zIHNoYXJlZCBpbmZvcm1hdGlvbgorICog YXMgd2VsbCBhcyB0aGUgbWVtb3J5IHNwYWNlIGZvciBzdG9yaW5nIGRlYWQgaXRlbXMgYWxsb2Nh dGVkIGluIHRoZSBEU0EgYXJlYS4KKyAqIFdlIGxhdW5jaCBwYXJhbGxlbCB3b3JrZXIgcHJvY2Vz c2VzIGF0IHRoZSBzdGFydCBvZiBwYXJhbGxlbCBpbmRleAogICogYnVsay1kZWxldGlvbiBhbmQg aW5kZXggY2xlYW51cCBhbmQgb25jZSBhbGwgaW5kZXhlcyBhcmUgcHJvY2Vzc2VkLCB0aGUKICAq IHBhcmFsbGVsIHdvcmtlciBwcm9jZXNzZXMgZXhpdC4gIEVhY2ggdGltZSB3ZSBwcm9jZXNzIGlu ZGV4ZXMgaW4gcGFyYWxsZWwsCiAgKiB0aGUgcGFyYWxsZWwgY29udGV4dCBpcyByZS1pbml0aWFs aXplZCBzbyB0aGF0IHRoZSBzYW1lIERTTSBjYW4gYmUgdXNlZCBmb3IKQEAgLTM0LDYgKzM0LDcg QEAKICNpbmNsdWRlICJleGVjdXRvci9pbnN0cnVtZW50LmgiCiAjaW5jbHVkZSAib3B0aW1pemVy L3BhdGhzLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCisjaW5jbHVkZSAicG9zdG1hc3Rlci9hdXRv dmFjdXVtLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9idWZtZ3IuaCIKICNpbmNsdWRlICJ0Y29wL3Rj b3Bwcm90LmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCkBAIC0xNTcsNyArMTU4LDgg QEAgdHlwZWRlZiBzdHJ1Y3QgUFZJbmRTdGF0cwogfSBQVkluZFN0YXRzOwogCiAvKgotICogU3Ry dWN0IGZvciBtYWludGFpbmluZyBhIHBhcmFsbGVsIHZhY3V1bSBzdGF0ZS4gdHlwZWRlZiBhcHBl YXJzIGluIHZhY3V1bS5oLgorICogU3RydWN0IGZvciBtYWludGFpbmluZyBhIHBhcmFsbGVsIFth dXRvXXZhY3V1bSBzdGF0ZS4gdHlwZWRlZiBhcHBlYXJzIGluCisgKiB2YWN1dW0uaC4KICAqLwog c3RydWN0IFBhcmFsbGVsVmFjdXVtU3RhdGUKIHsKQEAgLTM3MSwxMCArMzczLDE4IEBAIHBhcmFs bGVsX3ZhY3V1bV9pbml0KFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gKmluZHJlbHMsIGludCBuaW5k ZXhlcywKIAlzaGFyZWQtPnJlbGlkID0gUmVsYXRpb25HZXRSZWxpZChyZWwpOwogCXNoYXJlZC0+ ZWxldmVsID0gZWxldmVsOwogCXNoYXJlZC0+cXVlcnlpZCA9IHBnc3RhdF9nZXRfbXlfcXVlcnlf aWQoKTsKLQlzaGFyZWQtPm1haW50ZW5hbmNlX3dvcmtfbWVtX3dvcmtlciA9Ci0JCShuaW5kZXhl c19td20gPiAwKSA/Ci0JCW1haW50ZW5hbmNlX3dvcmtfbWVtIC8gTWluKHBhcmFsbGVsX3dvcmtl cnMsIG5pbmRleGVzX213bSkgOgotCQltYWludGVuYW5jZV93b3JrX21lbTsKKworCWlmIChBbUF1 dG9WYWN1dW1Xb3JrZXJQcm9jZXNzKCkpCisJCXNoYXJlZC0+bWFpbnRlbmFuY2Vfd29ya19tZW1f d29ya2VyID0KKwkJCShuaW5kZXhlc19td20gPiAwKSA/CisJCQlhdXRvdmFjdXVtX3dvcmtfbWVt IC8gTWluKHBhcmFsbGVsX3dvcmtlcnMsIG5pbmRleGVzX213bSkgOgorCQkJYXV0b3ZhY3V1bV93 b3JrX21lbTsKKwllbHNlCisJCXNoYXJlZC0+bWFpbnRlbmFuY2Vfd29ya19tZW1fd29ya2VyID0K KwkJCShuaW5kZXhlc19td20gPiAwKSA/CisJCQltYWludGVuYW5jZV93b3JrX21lbSAvIE1pbihw YXJhbGxlbF93b3JrZXJzLCBuaW5kZXhlc19td20pIDoKKwkJCW1haW50ZW5hbmNlX3dvcmtfbWVt OworCiAJc2hhcmVkLT5kZWFkX2l0ZW1zX2luZm8ubWF4X2J5dGVzID0gdmFjX3dvcmtfbWVtICog KHNpemVfdCkgMTAyNDsKIAogCS8qIFByZXBhcmUgRFNBIHNwYWNlIGZvciBkZWFkIGl0ZW1zICov CkBAIC00MzUsNiArNDQ1LDggQEAgcGFyYWxsZWxfdmFjdXVtX2luaXQoUmVsYXRpb24gcmVsLCBS ZWxhdGlvbiAqaW5kcmVscywgaW50IG5pbmRleGVzLAogdm9pZAogcGFyYWxsZWxfdmFjdXVtX2Vu ZChQYXJhbGxlbFZhY3V1bVN0YXRlICpwdnMsIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqKmlzdGF0 cykKIHsKKwlpbnQgbmxhdW5jaGVkX3dvcmtlcnM7CisKIAlBc3NlcnQoIUlzUGFyYWxsZWxXb3Jr ZXIoKSk7CiAKIAkvKiBDb3B5IHRoZSB1cGRhdGVkIHN0YXRpc3RpY3MgKi8KQEAgLTQ1Myw3ICs0 NjUsMTMgQEAgcGFyYWxsZWxfdmFjdXVtX2VuZChQYXJhbGxlbFZhY3V1bVN0YXRlICpwdnMsIElu ZGV4QnVsa0RlbGV0ZVJlc3VsdCAqKmlzdGF0cykKIAogCVRpZFN0b3JlRGVzdHJveShwdnMtPmRl YWRfaXRlbXMpOwogCisJbmxhdW5jaGVkX3dvcmtlcnMgPSBwdnMtPnBjeHQtPm53b3JrZXJzX2xh dW5jaGVkOyAvKiByZW1lbWJlciB0aGlzIHZhbHVlICovCiAJRGVzdHJveVBhcmFsbGVsQ29udGV4 dChwdnMtPnBjeHQpOworCisJLyogUmVsZWFzZSBhbGwgbGF1bmNoZWQgKGkuZS4gcmVzZXJ2ZWQp IHBhcmFsbGVsIGF1dG92YWN1dW0gd29ya2Vycy4gKi8KKwlpZiAoQW1BdXRvVmFjdXVtV29ya2Vy UHJvY2VzcygpKQorCQlQYXJhbGxlbEF1dG9WYWN1dW1SZWxlYXNlV29ya2VycyhubGF1bmNoZWRf d29ya2Vycyk7CisKIAlFeGl0UGFyYWxsZWxNb2RlKCk7CiAKIAlwZnJlZShwdnMtPndpbGxfcGFy YWxsZWxfdmFjdXVtKTsKQEAgLTU0MSw3ICs1NTksNyBAQCBwYXJhbGxlbF92YWN1dW1fY2xlYW51 cF9hbGxfaW5kZXhlcyhQYXJhbGxlbFZhY3V1bVN0YXRlICpwdnMsIGxvbmcgbnVtX3RhYmxlX3R1 cAogICoKICAqIG5yZXF1ZXN0ZWQgaXMgdGhlIG51bWJlciBvZiBwYXJhbGxlbCB3b3JrZXJzIHRo YXQgdXNlciByZXF1ZXN0ZWQuICBJZgogICogbnJlcXVlc3RlZCBpcyAwLCB3ZSBjb21wdXRlIHRo ZSBwYXJhbGxlbCBkZWdyZWUgYmFzZWQgb24gbmluZGV4ZXMsIHRoYXQgaXMKLSAqIHRoZSBudW1i ZXIgb2YgaW5kZXhlcyB0aGF0IHN1cHBvcnQgcGFyYWxsZWwgdmFjdXVtLiAgVGhpcyBmdW5jdGlv biBhbHNvCisgKiB0aGUgbnVtYmVyIG9mIGluZGV4ZXMgdGhhdCBzdXBwb3J0IHBhcmFsbGVsIFth dXRvXXZhY3V1bS4gIFRoaXMgZnVuY3Rpb24gYWxzbwogICogc2V0cyB3aWxsX3BhcmFsbGVsX3Zh Y3V1bSB0byByZW1lbWJlciBpbmRleGVzIHRoYXQgcGFydGljaXBhdGUgaW4gcGFyYWxsZWwKICAq IHZhY3V1bS4KICAqLwpAQCAtNTU4LDcgKzU3Niw5IEBAIHBhcmFsbGVsX3ZhY3V1bV9jb21wdXRl X3dvcmtlcnMoUmVsYXRpb24gKmluZHJlbHMsIGludCBuaW5kZXhlcywgaW50IG5yZXF1ZXN0ZWQs CiAJICogV2UgZG9uJ3QgYWxsb3cgcGVyZm9ybWluZyBwYXJhbGxlbCBvcGVyYXRpb24gaW4gc3Rh bmRhbG9uZSBiYWNrZW5kIG9yCiAJICogd2hlbiBwYXJhbGxlbGlzbSBpcyBkaXNhYmxlZC4KIAkg Ki8KLQlpZiAoIUlzVW5kZXJQb3N0bWFzdGVyIHx8IG1heF9wYXJhbGxlbF9tYWludGVuYW5jZV93 b3JrZXJzID09IDApCisJaWYgKCFJc1VuZGVyUG9zdG1hc3RlciB8fAorCQkoYXV0b3ZhY3V1bV9t YXhfcGFyYWxsZWxfd29ya2VycyA9PSAwICYmIEFtQXV0b1ZhY3V1bVdvcmtlclByb2Nlc3MoKSkg fHwKKwkJKG1heF9wYXJhbGxlbF9tYWludGVuYW5jZV93b3JrZXJzID09IDAgJiYgIUFtQXV0b1Zh Y3V1bVdvcmtlclByb2Nlc3MoKSkpCiAJCXJldHVybiAwOwogCiAJLyoKQEAgLTU5NywxNSArNjE3 LDE3IEBAIHBhcmFsbGVsX3ZhY3V1bV9jb21wdXRlX3dvcmtlcnMoUmVsYXRpb24gKmluZHJlbHMs IGludCBuaW5kZXhlcywgaW50IG5yZXF1ZXN0ZWQsCiAJcGFyYWxsZWxfd29ya2VycyA9IChucmVx dWVzdGVkID4gMCkgPwogCQlNaW4obnJlcXVlc3RlZCwgbmluZGV4ZXNfcGFyYWxsZWwpIDogbmlu ZGV4ZXNfcGFyYWxsZWw7CiAKLQkvKiBDYXAgYnkgbWF4X3BhcmFsbGVsX21haW50ZW5hbmNlX3dv cmtlcnMgKi8KLQlwYXJhbGxlbF93b3JrZXJzID0gTWluKHBhcmFsbGVsX3dvcmtlcnMsIG1heF9w YXJhbGxlbF9tYWludGVuYW5jZV93b3JrZXJzKTsKKwkvKiBDYXAgYnkgR1VDIHZhcmlhYmxlICov CisJcGFyYWxsZWxfd29ya2VycyA9IEFtQXV0b1ZhY3V1bVdvcmtlclByb2Nlc3MoKSA/CisJCU1p bihwYXJhbGxlbF93b3JrZXJzLCBhdXRvdmFjdXVtX21heF9wYXJhbGxlbF93b3JrZXJzKSA6CisJ CU1pbihwYXJhbGxlbF93b3JrZXJzLCBtYXhfcGFyYWxsZWxfbWFpbnRlbmFuY2Vfd29ya2Vycyk7 CiAKIAlyZXR1cm4gcGFyYWxsZWxfd29ya2VyczsKIH0KIAogLyoKICAqIFBlcmZvcm0gaW5kZXgg dmFjdXVtIG9yIGluZGV4IGNsZWFudXAgd2l0aCBwYXJhbGxlbCB3b3JrZXJzLiAgVGhpcyBmdW5j dGlvbgotICogbXVzdCBiZSB1c2VkIGJ5IHRoZSBwYXJhbGxlbCB2YWN1dW0gbGVhZGVyIHByb2Nl c3MuCisgKiBtdXN0IGJlIHVzZWQgYnkgdGhlIHBhcmFsbGVsIFthdXRvXXZhY3V1bSBsZWFkZXIg cHJvY2Vzcy4KICAqLwogc3RhdGljIHZvaWQKIHBhcmFsbGVsX3ZhY3V1bV9wcm9jZXNzX2FsbF9p bmRleGVzKFBhcmFsbGVsVmFjdXVtU3RhdGUgKnB2cywgaW50IG51bV9pbmRleF9zY2FucywKQEAg LTY2NiwxMyArNjg4LDI2IEBAIHBhcmFsbGVsX3ZhY3V1bV9wcm9jZXNzX2FsbF9pbmRleGVzKFBh cmFsbGVsVmFjdXVtU3RhdGUgKnB2cywgaW50IG51bV9pbmRleF9zY2FuCiAJLyogUmVzZXQgdGhl IHBhcmFsbGVsIGluZGV4IHByb2Nlc3NpbmcgYW5kIHByb2dyZXNzIGNvdW50ZXJzICovCiAJcGdf YXRvbWljX3dyaXRlX3UzMigmKHB2cy0+c2hhcmVkLT5pZHgpLCAwKTsKIAorCS8qIENoZWNrIGhv dyBtYW55IHdvcmtlcnMgY2FuIHByb3ZpZGUgYXV0b3ZhY3V1bS4gKi8KKwlpZiAoQW1BdXRvVmFj dXVtV29ya2VyUHJvY2VzcygpICYmIG53b3JrZXJzID4gMCkKKwkJbndvcmtlcnMgPSBQYXJhbGxl bEF1dG9WYWN1dW1SZXNlcnZlV29ya2Vycyhud29ya2Vycyk7CisKIAkvKiBTZXR1cCB0aGUgc2hh cmVkIGNvc3QtYmFzZWQgdmFjdXVtIGRlbGF5IGFuZCBsYXVuY2ggd29ya2VycyAqLwogCWlmIChu d29ya2VycyA+IDApCiAJewogCQkvKiBSZWluaXRpYWxpemUgcGFyYWxsZWwgY29udGV4dCB0byBy ZWxhdW5jaCBwYXJhbGxlbCB3b3JrZXJzICovCiAJCWlmIChudW1faW5kZXhfc2NhbnMgPiAwKQor CQl7CiAJCQlSZWluaXRpYWxpemVQYXJhbGxlbERTTShwdnMtPnBjeHQpOwogCisJCQkvKgorCQkJ ICogUmVsZWFzZSBhbGwgbGF1bmNoZWQgKGkuZS4gcmVzZXJ2ZWQpIHBhcmFsbGVsIGF1dG92YWN1 dW0KKwkJCSAqIHdvcmtlcnMuCisJCQkgKi8KKwkJCWlmIChBbUF1dG9WYWN1dW1Xb3JrZXJQcm9j ZXNzKCkpCisJCQkJUGFyYWxsZWxBdXRvVmFjdXVtUmVsZWFzZVdvcmtlcnMocHZzLT5wY3h0LT5u d29ya2Vyc19sYXVuY2hlZCk7CisJCX0KKwogCQkvKgogCQkgKiBTZXQgdXAgc2hhcmVkIGNvc3Qg YmFsYW5jZSBhbmQgdGhlIG51bWJlciBvZiBhY3RpdmUgd29ya2VycyBmb3IKIAkJICogdmFjdXVt IGRlbGF5LiAgV2UgbmVlZCB0byBkbyB0aGlzIGJlZm9yZSBsYXVuY2hpbmcgd29ya2VycyBhcwpA QCAtNjkwLDYgKzcyNSwxNiBAQCBwYXJhbGxlbF92YWN1dW1fcHJvY2Vzc19hbGxfaW5kZXhlcyhQ YXJhbGxlbFZhY3V1bVN0YXRlICpwdnMsIGludCBudW1faW5kZXhfc2NhbgogCiAJCUxhdW5jaFBh cmFsbGVsV29ya2VycyhwdnMtPnBjeHQpOwogCisJCWlmIChBbUF1dG9WYWN1dW1Xb3JrZXJQcm9j ZXNzKCkgJiYKKwkJCXB2cy0+cGN4dC0+bndvcmtlcnNfbGF1bmNoZWQgPCBud29ya2VycykKKwkJ eworCQkJLyoKKwkJCSAqIFRlbGwgYXV0b3ZhY3V1bSB0aGF0IHdlIGNvdWxkIG5vdCBsYXVuY2gg YWxsIHRoZSBwcmV2aW91c2x5CisJCQkgKiByZXNlcnZlZCB3b3JrZXJzLgorCQkJICovCisJCQlQ YXJhbGxlbEF1dG9WYWN1dW1SZWxlYXNlV29ya2Vycyhud29ya2VycyAtIHB2cy0+cGN4dC0+bndv cmtlcnNfbGF1bmNoZWQpOworCQl9CisKIAkJaWYgKHB2cy0+cGN4dC0+bndvcmtlcnNfbGF1bmNo ZWQgPiAwKQogCQl7CiAJCQkvKgpAQCAtNzA2LDE2ICs3NTEsMTYgQEAgcGFyYWxsZWxfdmFjdXVt X3Byb2Nlc3NfYWxsX2luZGV4ZXMoUGFyYWxsZWxWYWN1dW1TdGF0ZSAqcHZzLCBpbnQgbnVtX2lu ZGV4X3NjYW4KIAogCQlpZiAodmFjdXVtKQogCQkJZXJlcG9ydChwdnMtPnNoYXJlZC0+ZWxldmVs LAotCQkJCQkoZXJybXNnKG5nZXR0ZXh0KCJsYXVuY2hlZCAlZCBwYXJhbGxlbCB2YWN1dW0gd29y a2VyIGZvciBpbmRleCB2YWN1dW1pbmcgKHBsYW5uZWQ6ICVkKSIsCi0JCQkJCQkJCQkgImxhdW5j aGVkICVkIHBhcmFsbGVsIHZhY3V1bSB3b3JrZXJzIGZvciBpbmRleCB2YWN1dW1pbmcgKHBsYW5u ZWQ6ICVkKSIsCisJCQkJCShlcnJtc2cobmdldHRleHQoImxhdW5jaGVkICVkIHBhcmFsbGVsICVz dmFjdXVtIHdvcmtlciBmb3IgaW5kZXggdmFjdXVtaW5nIChwbGFubmVkOiAlZCkiLAorCQkJCQkJ CQkJICJsYXVuY2hlZCAlZCBwYXJhbGxlbCAlc3ZhY3V1bSB3b3JrZXJzIGZvciBpbmRleCB2YWN1 dW1pbmcgKHBsYW5uZWQ6ICVkKSIsCiAJCQkJCQkJCQkgcHZzLT5wY3h0LT5ud29ya2Vyc19sYXVu Y2hlZCksCi0JCQkJCQkJcHZzLT5wY3h0LT5ud29ya2Vyc19sYXVuY2hlZCwgbndvcmtlcnMpKSk7 CisJCQkJCQkJcHZzLT5wY3h0LT5ud29ya2Vyc19sYXVuY2hlZCwgQW1BdXRvVmFjdXVtV29ya2Vy UHJvY2VzcygpID8gImF1dG8iIDogIiIsIG53b3JrZXJzKSkpOwogCQllbHNlCiAJCQllcmVwb3J0 KHB2cy0+c2hhcmVkLT5lbGV2ZWwsCi0JCQkJCShlcnJtc2cobmdldHRleHQoImxhdW5jaGVkICVk IHBhcmFsbGVsIHZhY3V1bSB3b3JrZXIgZm9yIGluZGV4IGNsZWFudXAgKHBsYW5uZWQ6ICVkKSIs Ci0JCQkJCQkJCQkgImxhdW5jaGVkICVkIHBhcmFsbGVsIHZhY3V1bSB3b3JrZXJzIGZvciBpbmRl eCBjbGVhbnVwIChwbGFubmVkOiAlZCkiLAorCQkJCQkoZXJybXNnKG5nZXR0ZXh0KCJsYXVuY2hl ZCAlZCBwYXJhbGxlbCAlc3ZhY3V1bSB3b3JrZXIgZm9yIGluZGV4IGNsZWFudXAgKHBsYW5uZWQ6 ICVkKSIsCisJCQkJCQkJCQkgImxhdW5jaGVkICVkIHBhcmFsbGVsICVzdmFjdXVtIHdvcmtlcnMg Zm9yIGluZGV4IGNsZWFudXAgKHBsYW5uZWQ6ICVkKSIsCiAJCQkJCQkJCQkgcHZzLT5wY3h0LT5u d29ya2Vyc19sYXVuY2hlZCksCi0JCQkJCQkJcHZzLT5wY3h0LT5ud29ya2Vyc19sYXVuY2hlZCwg bndvcmtlcnMpKSk7CisJCQkJCQkJcHZzLT5wY3h0LT5ud29ya2Vyc19sYXVuY2hlZCwgQW1BdXRv VmFjdXVtV29ya2VyUHJvY2VzcygpID8gImF1dG8iIDogIiIsIG53b3JrZXJzKSkpOwogCX0KIAog CS8qIFZhY3V1bSB0aGUgaW5kZXhlcyB0aGF0IGNhbiBiZSBwcm9jZXNzZWQgYnkgb25seSBsZWFk ZXIgcHJvY2VzcyAqLwpAQCAtOTgyLDggKzEwMjcsOCBAQCBwYXJhbGxlbF92YWN1dW1faW5kZXhf aXNfcGFyYWxsZWxfc2FmZShSZWxhdGlvbiBpbmRyZWwsIGludCBudW1faW5kZXhfc2NhbnMsCiAv KgogICogUGVyZm9ybSB3b3JrIHdpdGhpbiBhIGxhdW5jaGVkIHBhcmFsbGVsIHByb2Nlc3MuCiAg KgotICogU2luY2UgcGFyYWxsZWwgdmFjdXVtIHdvcmtlcnMgcGVyZm9ybSBvbmx5IGluZGV4IHZh Y3V1bSBvciBpbmRleCBjbGVhbnVwLAotICogd2UgZG9uJ3QgbmVlZCB0byByZXBvcnQgcHJvZ3Jl c3MgaW5mb3JtYXRpb24uCisgKiBTaW5jZSBwYXJhbGxlbCBbYXV0b112YWN1dW0gd29ya2VycyBw ZXJmb3JtIG9ubHkgaW5kZXggdmFjdXVtIG9yIGluZGV4CisgKiBjbGVhbnVwLCB3ZSBkb24ndCBu ZWVkIHRvIHJlcG9ydCBwcm9ncmVzcyBpbmZvcm1hdGlvbi4KICAqLwogdm9pZAogcGFyYWxsZWxf dmFjdXVtX21haW4oZHNtX3NlZ21lbnQgKnNlZywgc2htX3RvYyAqdG9jKQpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9hdXRvdmFjdXVtLmMgYi9zcmMvYmFja2VuZC9wb3N0bWFz dGVyL2F1dG92YWN1dW0uYwppbmRleCA0NTFmYjkwYTYxMC4uNjA2MDBiOWZmNTIgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5jCisrKyBiL3NyYy9iYWNrZW5k L3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5jCkBAIC0yODUsNiArMjg1LDggQEAgdHlwZWRlZiBzdHJ1 Y3QgQXV0b1ZhY3V1bVdvcmtJdGVtCiAgKiBhdl93b3JrSXRlbXMJCXdvcmsgaXRlbSBhcnJheQog ICogYXZfbndvcmtlcnNGb3JCYWxhbmNlIHRoZSBudW1iZXIgb2YgYXV0b3ZhY3V1bSB3b3JrZXJz IHRvIHVzZSB3aGVuCiAgKiAJCQkJCWNhbGN1bGF0aW5nIHRoZSBwZXIgd29ya2VyIGNvc3QgbGlt aXQKKyAqIGF2X2F2YWlsYWJsZV9wYXJhbGxlbF93b3JrZXJzIHRoZSBudW1iZXIgb2YgYXZhaWxh YmxlIHBhcmFsbGVsIGF1dG92YWN1dW0KKyAqIAkJCQkJCQkJIHdvcmtlcnMKICAqCiAgKiBUaGlz IHN0cnVjdCBpcyBwcm90ZWN0ZWQgYnkgQXV0b3ZhY3V1bUxvY2ssIGV4Y2VwdCBmb3IgYXZfc2ln bmFsIGFuZCBwYXJ0cwogICogb2YgdGhlIHdvcmtlciBsaXN0IChzZWUgYWJvdmUpLgpAQCAtMjk5 LDYgKzMwMSw3IEBAIHR5cGVkZWYgc3RydWN0CiAJV29ya2VySW5mbwlhdl9zdGFydGluZ1dvcmtl cjsKIAlBdXRvVmFjdXVtV29ya0l0ZW0gYXZfd29ya0l0ZW1zW05VTV9XT1JLSVRFTVNdOwogCXBn X2F0b21pY191aW50MzIgYXZfbndvcmtlcnNGb3JCYWxhbmNlOworCXVpbnQzMiBhdl9hdmFpbGFi bGVfcGFyYWxsZWxfd29ya2VyczsKIH0gQXV0b1ZhY3V1bVNobWVtU3RydWN0OwogCiBzdGF0aWMg QXV0b1ZhY3V1bVNobWVtU3RydWN0ICpBdXRvVmFjdXVtU2htZW07CkBAIC0zNTQsNiArMzU3LDcg QEAgc3RhdGljIHZvaWQgYXV0b3ZhY19yZXBvcnRfd29ya2l0ZW0oQXV0b1ZhY3V1bVdvcmtJdGVt ICp3b3JraXRlbSwKIHN0YXRpYyB2b2lkIGF2bF9zaWd1c3IyX2hhbmRsZXIoU0lHTkFMX0FSR1Mp Owogc3RhdGljIGJvb2wgYXZfd29ya2VyX2F2YWlsYWJsZSh2b2lkKTsKIHN0YXRpYyB2b2lkIGNo ZWNrX2F2X3dvcmtlcl9ndWNzKHZvaWQpOworc3RhdGljIHZvaWQgY2hlY2tfcGFyYWxsZWxfYXZf Z3VjcyhpbnQgcHJldl9tYXhfcGFyYWxsZWxfd29ya2Vycyk7CiAKIAogCkBAIC03NTMsNyArNzU3 LDkgQEAgUHJvY2Vzc0F1dG9WYWNMYXVuY2hlckludGVycnVwdHModm9pZCkKIAlpZiAoQ29uZmln UmVsb2FkUGVuZGluZykKIAl7CiAJCWludAkJCWF1dG92YWN1dW1fbWF4X3dvcmtlcnNfcHJldiA9 IGF1dG92YWN1dW1fbWF4X3dvcmtlcnM7CisJCWludAkJCWF1dG92YWN1dW1fbWF4X3BhcmFsbGVs X3dvcmtlcnNfcHJldjsKIAorCQlhdXRvdmFjdXVtX21heF9wYXJhbGxlbF93b3JrZXJzX3ByZXYg PSBhdXRvdmFjdXVtX21heF9wYXJhbGxlbF93b3JrZXJzOwogCQlDb25maWdSZWxvYWRQZW5kaW5n ID0gZmFsc2U7CiAJCVByb2Nlc3NDb25maWdGaWxlKFBHQ19TSUdIVVApOwogCkBAIC03NjksNiAr Nzc1LDE0IEBAIFByb2Nlc3NBdXRvVmFjTGF1bmNoZXJJbnRlcnJ1cHRzKHZvaWQpCiAJCWlmIChh dXRvdmFjdXVtX21heF93b3JrZXJzX3ByZXYgIT0gYXV0b3ZhY3V1bV9tYXhfd29ya2VycykKIAkJ CWNoZWNrX2F2X3dvcmtlcl9ndWNzKCk7CiAKKwkJLyoKKwkJICogSWYgYXV0b3ZhY3V1bV9tYXhf cGFyYWxsZWxfd29ya2VycyBjaGFuZ2VkLCB3ZSBtdXN0IHRha2UgY2FyZSBvZgorCQkgKiB0aGUg Y29ycmVjdCB2YWx1ZSBvZiBhdmFpbGFibGUgcGFyYWxsZWwgYXV0b3ZhY3V1bSB3b3JrZXJzIGlu IHNobWVtLgorCQkgKi8KKwkJaWYgKGF1dG92YWN1dW1fbWF4X3BhcmFsbGVsX3dvcmtlcnNfcHJl diAhPQorCQkJYXV0b3ZhY3V1bV9tYXhfcGFyYWxsZWxfd29ya2VycykKKwkJCWNoZWNrX3BhcmFs bGVsX2F2X2d1Y3MoYXV0b3ZhY3V1bV9tYXhfcGFyYWxsZWxfd29ya2Vyc19wcmV2KTsKKwogCQkv KiByZWJ1aWxkIHRoZSBsaXN0IGluIGNhc2UgdGhlIG5hcHRpbWUgY2hhbmdlZCAqLwogCQlyZWJ1 aWxkX2RhdGFiYXNlX2xpc3QoSW52YWxpZE9pZCk7CiAJfQpAQCAtMjg0Nyw4ICsyODYxLDEyIEBA IHRhYmxlX3JlY2hlY2tfYXV0b3ZhYyhPaWQgcmVsaWQsIEhUQUIgKnRhYmxlX3RvYXN0X21hcCwK IAkJICovCiAJCXRhYi0+YXRfcGFyYW1zLmluZGV4X2NsZWFudXAgPSBWQUNPUFRWQUxVRV9VTlNQ RUNJRklFRDsKIAkJdGFiLT5hdF9wYXJhbXMudHJ1bmNhdGUgPSBWQUNPUFRWQUxVRV9VTlNQRUNJ RklFRDsKLQkJLyogQXMgb2Ygbm93LCB3ZSBkb24ndCBzdXBwb3J0IHBhcmFsbGVsIHZhY3V1bSBm b3IgYXV0b3ZhY3V1bSAqLwotCQl0YWItPmF0X3BhcmFtcy5ud29ya2VycyA9IC0xOworCisJCS8q IERlY2lkZSB3aGV0aGVyIHdlIG5lZWQgdG8gcHJvY2VzcyBpbmRleGVzIG9mIHRhYmxlIGluIHBh cmFsbGVsLiAqLworCQl0YWItPmF0X3BhcmFtcy5ud29ya2VycyA9IGF2b3B0cworCQkJPyBhdm9w dHMtPnBhcmFsbGVsX2F1dG92YWN1dW1fd29ya2VycworCQkJOiAtMTsKKwogCQl0YWItPmF0X3Bh cmFtcy5mcmVlemVfbWluX2FnZSA9IGZyZWV6ZV9taW5fYWdlOwogCQl0YWItPmF0X3BhcmFtcy5m cmVlemVfdGFibGVfYWdlID0gZnJlZXplX3RhYmxlX2FnZTsKIAkJdGFiLT5hdF9wYXJhbXMubXVs dGl4YWN0X2ZyZWV6ZV9taW5fYWdlID0gbXVsdGl4YWN0X2ZyZWV6ZV9taW5fYWdlOwpAQCAtMzMy OSw2ICszMzQ3LDcyIEBAIEF1dG9WYWN1dW1SZXF1ZXN0V29yayhBdXRvVmFjdXVtV29ya0l0ZW1U eXBlIHR5cGUsIE9pZCByZWxhdGlvbklkLAogCXJldHVybiByZXN1bHQ7CiB9CiAKKy8qCisgKiBJ biBvcmRlciB0byBtZWV0IHRoZSAnbWF4X3BhcmFsbGVsX2F1dG92YWN1dW1fd29ya2VycycgbGlt aXQsIGxlYWRlciB3b3JrZXIKKyAqIG11c3QgY2FsbCB0aGlzIGZ1bmN0aW9uLiBJdCByZXR1cm5z IHRoZSBudW1iZXIgb2YgcGFyYWxsZWwgd29ya2VycyB0aGF0CisgKiBhY3R1YWxseSBjYW4gYmUg bGF1bmNoZWQgYW5kIHJlc2VydmVzIChpZiBhbnkpIHRoZXNlIHdvcmtlcnMgaW4gZ2xvYmFsCisg KiBhdXRvdmFjdXVtIHN0YXRlLgorICoKKyAqIE5PVEU6IFdlIHdpbGwgdHJ5IHRvIHByb3ZpZGUg YXMgbWFueSB3b3JrZXJzIGFzIHJlcXVlc3RlZCwgZXZlbiBpZiBjYWxsZXIKKyAqIHdpbGwgb2Nj dXB5IGFsbCBhdmFpbGFibGUgd29ya2Vycy4KKyAqLworaW50CitQYXJhbGxlbEF1dG9WYWN1dW1S ZXNlcnZlV29ya2VycyhpbnQgbndvcmtlcnMpCit7CisJaW50IGNhbl9sYXVuY2g7CisKKwkvKiBP bmx5IGxlYWRlciB3b3JrZXIgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbi4gKi8KKwlBc3NlcnQoQW1B dXRvVmFjdXVtV29ya2VyUHJvY2VzcygpICYmICFJc1BhcmFsbGVsV29ya2VyKCkpOworCisJTFdM b2NrQWNxdWlyZShBdXRvdmFjdXVtTG9jaywgTFdfRVhDTFVTSVZFKTsKKwlpZiAoQXV0b1ZhY3V1 bVNobWVtLT5hdl9hdmFpbGFibGVfcGFyYWxsZWxfd29ya2VycyA8IG53b3JrZXJzKQorCXsKKwkJ LyogUHJvdmlkZSBhcyBtYW55IHdvcmtlcnMgYXMgd2UgY2FuLiAqLworCQljYW5fbGF1bmNoID0g QXV0b1ZhY3V1bVNobWVtLT5hdl9hdmFpbGFibGVfcGFyYWxsZWxfd29ya2VyczsKKwkJQXV0b1Zh Y3V1bVNobWVtLT5hdl9hdmFpbGFibGVfcGFyYWxsZWxfd29ya2VycyA9IDA7CisJfQorCWVsc2UK Kwl7CisJCS8qIE9LLCB3ZSBjYW4gcHJvdmlkZSBhbGwgcmVxdWVzdGVkIHdvcmtlcnMuICovCisJ CWNhbl9sYXVuY2ggPSBud29ya2VyczsKKwkJQXV0b1ZhY3V1bVNobWVtLT5hdl9hdmFpbGFibGVf cGFyYWxsZWxfd29ya2VycyAtPSBud29ya2VyczsKKwl9CisJTFdMb2NrUmVsZWFzZShBdXRvdmFj dXVtTG9jayk7CisKKwlyZXR1cm4gY2FuX2xhdW5jaDsKK30KKworLyoKKyAqIFdoZW4gcGFyYWxs ZWwgYXV0b3ZhY3V1bSB3b3JrZXIgZGllLCBsZWFkZXIgd29ya2VyIG11c3QgY2FsbCB0aGlzIGZ1 bmN0aW9uCisgKiBpbiBvcmRlciB0byByZWZyZXNoIGdsb2JhbCBhdXRvdmFjdXVtIHN0YXRlLiBU aHVzLCBvdGhlciBsZWFkZXJzIHdpbGwgYmUgYWJsZQorICogdG8gdXNlIHRoZXNlIHdvcmtlcnMu CisgKgorICogJ253b3JrZXJzJyAtIGhvdyBtYW55IHdvcmtlcnMgY2FsbGVyIHdhbnRzIHRvIHJl bGVhc2UuCisgKi8KK3ZvaWQKK1BhcmFsbGVsQXV0b1ZhY3V1bVJlbGVhc2VXb3JrZXJzKGludCBu d29ya2VycykKK3sKKwkvKiBPbmx5IGxlYWRlciB3b3JrZXIgY2FuIGNhbGwgdGhpcyBmdW5jdGlv bi4gKi8KKwlBc3NlcnQoQW1BdXRvVmFjdXVtV29ya2VyUHJvY2VzcygpICYmICFJc1BhcmFsbGVs V29ya2VyKCkpOworCisJTFdMb2NrQWNxdWlyZShBdXRvdmFjdXVtTG9jaywgTFdfRVhDTFVTSVZF KTsKKwlBdXRvVmFjdXVtU2htZW0tPmF2X2F2YWlsYWJsZV9wYXJhbGxlbF93b3JrZXJzICs9IG53 b3JrZXJzOworCisJLyoKKwkgKiBJZiBhdXRvdmFjdXVtX21heF9wYXJhbGxlbF93b3JrZXJzIHZh cmlhYmxlIHdhcyByZWR1Y2VkIGR1cmluZyBwYXJhbGxlbAorCSAqIGF1dG92YWN1dW0gZXhlY3V0 aW9uLCB3ZSBtdXN0IGNhcCBhdmFpbGFibGUgd29ya2VycyBudW1iZXIgYnkgaXRzIG5ldworCSAq IHZhbHVlLgorCSAqLworCWlmIChBdXRvVmFjdXVtU2htZW0tPmF2X2F2YWlsYWJsZV9wYXJhbGxl bF93b3JrZXJzID4KKwkJYXV0b3ZhY3V1bV9tYXhfcGFyYWxsZWxfd29ya2VycykKKwl7CisJCUF1 dG9WYWN1dW1TaG1lbS0+YXZfYXZhaWxhYmxlX3BhcmFsbGVsX3dvcmtlcnMgPQorCQkJYXV0b3Zh Y3V1bV9tYXhfcGFyYWxsZWxfd29ya2VyczsKKwl9CisKKwlMV0xvY2tSZWxlYXNlKEF1dG92YWN1 dW1Mb2NrKTsKK30KKwogLyoKICAqIGF1dG92YWNfaW5pdAogICoJCVRoaXMgaXMgY2FsbGVkIGF0 IHBvc3RtYXN0ZXIgaW5pdGlhbGl6YXRpb24uCkBAIC0zMzg5LDYgKzM0NzMsOCBAQCBBdXRvVmFj dXVtU2htZW1Jbml0KHZvaWQpCiAJCUFzc2VydCghZm91bmQpOwogCiAJCUF1dG9WYWN1dW1TaG1l bS0+YXZfbGF1bmNoZXJwaWQgPSAwOworCQlBdXRvVmFjdXVtU2htZW0tPmF2X2F2YWlsYWJsZV9w YXJhbGxlbF93b3JrZXJzID0KKwkJCWF1dG92YWN1dW1fbWF4X3BhcmFsbGVsX3dvcmtlcnM7CiAJ CWRjbGlzdF9pbml0KCZBdXRvVmFjdXVtU2htZW0tPmF2X2ZyZWVXb3JrZXJzKTsKIAkJZGxpc3Rf aW5pdCgmQXV0b1ZhY3V1bVNobWVtLT5hdl9ydW5uaW5nV29ya2Vycyk7CiAJCUF1dG9WYWN1dW1T aG1lbS0+YXZfc3RhcnRpbmdXb3JrZXIgPSBOVUxMOwpAQCAtMzQzOSw2ICszNTI1LDE1IEBAIGNo ZWNrX2F1dG92YWN1dW1fd29ya19tZW0oaW50ICpuZXd2YWwsIHZvaWQgKipleHRyYSwgR3VjU291 cmNlIHNvdXJjZSkKIAlyZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbAorY2hlY2tfYXV0b3ZhY3V1bV9t YXhfcGFyYWxsZWxfd29ya2VycyhpbnQgKm5ld3ZhbCwgdm9pZCAqKmV4dHJhLAorCQkJCQkJCQkJ ICBHdWNTb3VyY2Ugc291cmNlKQoreworCWlmICgqbmV3dmFsID49IG1heF93b3JrZXJfcHJvY2Vz c2VzKQorCQlyZXR1cm4gZmFsc2U7CisJcmV0dXJuIHRydWU7Cit9CisKIC8qCiAgKiBSZXR1cm5z IHdoZXRoZXIgdGhlcmUgaXMgYSBmcmVlIGF1dG92YWN1dW0gd29ya2VyIHNsb3QgYXZhaWxhYmxl LgogICovCkBAIC0zNDcwLDMgKzM1NjUsNDggQEAgY2hlY2tfYXZfd29ya2VyX2d1Y3Modm9pZCkK IAkJCQkgZXJyZGV0YWlsKCJUaGUgc2VydmVyIHdpbGwgb25seSBzdGFydCB1cCB0byBcImF1dG92 YWN1dW1fd29ya2VyX3Nsb3RzXCIgKCVkKSBhdXRvdmFjdXVtIHdvcmtlcnMgYXQgYSBnaXZlbiB0 aW1lLiIsCiAJCQkJCQkgICBhdXRvdmFjdXVtX3dvcmtlcl9zbG90cykpKTsKIH0KKworLyoKKyAq IE1ha2Ugc3VyZSB0aGF0IG51bWJlciBvZiBhdmFpbGFibGUgcGFyYWxsZWwgd29ya2VycyBjb3Jy ZXNwb25kcyB0byB0aGUKKyAqIGF1dG92YWN1dW1fbWF4X3BhcmFsbGVsX3dvcmtlcnMgcGFyYW1l dGVyIChhZnRlciBpdCB3YXMgY2hhbmdlZCkuCisgKi8KK3N0YXRpYyB2b2lkCitjaGVja19wYXJh bGxlbF9hdl9ndWNzKGludCBwcmV2X21heF9wYXJhbGxlbF93b3JrZXJzKQoreworCUxXTG9ja0Fj cXVpcmUoQXV0b3ZhY3V1bUxvY2ssIExXX0VYQ0xVU0lWRSk7CisKKwlpZiAoQXV0b1ZhY3V1bVNo bWVtLT5hdl9hdmFpbGFibGVfcGFyYWxsZWxfd29ya2VycyA+CisJCWF1dG92YWN1dW1fbWF4X3Bh cmFsbGVsX3dvcmtlcnMpCisJeworCQlBc3NlcnQocHJldl9tYXhfcGFyYWxsZWxfd29ya2VycyA+ IGF1dG92YWN1dW1fbWF4X3BhcmFsbGVsX3dvcmtlcnMpOworCisJCS8qCisJCSAqIE51bWJlciBv ZiBhdmFpbGFibGUgd29ya2VycyBtdXN0IG5vdCBleGVlZCBsaW1pdC4KKwkJICoKKwkJICogTm90 ZSwgdGhhdCBpZiBzb21lIHBhcmFsbGVsIGF1dG92YWN1dW0gd29ya2VycyBhcmUgcnVubmluZyBh dCB0aGlzCisJCSAqIG1vbWVudCwgYXZhaWxhYmxlIHdvcmtlcnMgbnVtYmVyIHdpbGwgbm90IGV4 ZWVkIGxpbWl0IGFmdGVyIHJlbGVhc2luZworCQkgKiB0aGVtIChzZWUgUGFyYWxsZWxBdXRvVmFj dXVtUmVsZWFzZVdvcmtlcnMpLgorCQkqLworCQlBdXRvVmFjdXVtU2htZW0tPmF2X2F2YWlsYWJs ZV9wYXJhbGxlbF93b3JrZXJzID0KKwkJCWF1dG92YWN1dW1fbWF4X3BhcmFsbGVsX3dvcmtlcnM7 CisJfQorCWVsc2UgaWYgKChBdXRvVmFjdXVtU2htZW0tPmF2X2F2YWlsYWJsZV9wYXJhbGxlbF93 b3JrZXJzIDwKKwkJCSAgYXV0b3ZhY3V1bV9tYXhfcGFyYWxsZWxfd29ya2VycykgJiYKKwkJCSAo YXV0b3ZhY3V1bV9tYXhfcGFyYWxsZWxfd29ya2VycyA+IHByZXZfbWF4X3BhcmFsbGVsX3dvcmtl cnMpKQorCXsKKwkJLyoKKwkJICogSWYgdXNlciB3YW50cyB0byBpbmNyZWFzZSBudW1iZXIgb2Yg cGFyYWxsZWwgYXV0b3ZhY3V1bSB3b3JrZXJzLCB3ZQorCQkgKiBtdXN0IGluY3JlYXNlIG51bWJl ciBvZiBhdmFpbGFibGUgd29ya2VycyBpbiBzaG1lbS4KKwkJICovCisJCUF1dG9WYWN1dW1TaG1l bS0+YXZfYXZhaWxhYmxlX3BhcmFsbGVsX3dvcmtlcnMgKz0KKwkJCShhdXRvdmFjdXVtX21heF9w YXJhbGxlbF93b3JrZXJzIC0gcHJldl9tYXhfcGFyYWxsZWxfd29ya2Vycyk7CisKKwkJLyoKKwkJ ICogTm90aGluZyB0byBkbyB3aGVuIGF1dG92YWN1dW1fbWF4X3BhcmFsbGVsX3dvcmtlcnMgPAor CQkgKiBwcmV2X21heF9wYXJhbGxlbF93b3JrZXJzLiBBdmFpbGFibGUgd29ya2VycyBudW1iZXIg d2lsbCBiZSBjYXBwZWQKKwkJICogaW5zaWRlIFBhcmFsbGVsQXV0b1ZhY3V1bVJlbGVhc2VXb3Jr ZXJzLgorCQkgKi8KKwl9CisKKwlMV0xvY2tSZWxlYXNlKEF1dG92YWN1dW1Mb2NrKTsKK30KZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jIGIvc3JjL2JhY2tlbmQv dXRpbHMvaW5pdC9nbG9iYWxzLmMKaW5kZXggZDMxY2I0NWEwNTguLjk3NzY0NDk3OGMxIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9pbml0L2dsb2JhbHMuYworKysgYi9zcmMvYmFja2Vu ZC91dGlscy9pbml0L2dsb2JhbHMuYwpAQCAtMTQzLDYgKzE0Myw3IEBAIGludAkJCU5CdWZmZXJz ID0gMTYzODQ7CiBpbnQJCQlNYXhDb25uZWN0aW9ucyA9IDEwMDsKIGludAkJCW1heF93b3JrZXJf cHJvY2Vzc2VzID0gODsKIGludAkJCW1heF9wYXJhbGxlbF93b3JrZXJzID0gODsKK2ludCAgICAg ICAgIGF1dG92YWN1dW1fbWF4X3BhcmFsbGVsX3dvcmtlcnMgPSAwOwogaW50CQkJTWF4QmFja2Vu ZHMgPSAwOwogCiAvKiBHVUMgcGFyYW1ldGVycyBmb3IgdmFjdXVtICovCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL21p c2MvZ3VjX3RhYmxlcy5jCmluZGV4IGYwNGJmZWRiMmZkLi5iZTc2MjYzYzQzMSAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMKKysrIGIvc3JjL2JhY2tlbmQv dXRpbHMvbWlzYy9ndWNfdGFibGVzLmMKQEAgLTM2MDQsNiArMzYwNCwxNiBAQCBzdHJ1Y3QgY29u ZmlnX2ludCBDb25maWd1cmVOYW1lc0ludFtdID0KIAkJTlVMTCwgTlVMTCwgTlVMTAogCX0sCiAK Kwl7CisJCXsiYXV0b3ZhY3V1bV9tYXhfcGFyYWxsZWxfd29ya2VycyIsIFBHQ19TSUdIVVAsIFZB Q1VVTV9BVVRPVkFDVVVNLAorCQkJZ2V0dGV4dF9ub29wKCJNYXhpbXVtIG51bWJlciBvZiBwYXJh bGxlbCBhdXRvdmFjdXVtIHdvcmtlcnMsIHRoYXQgY2FuIGJlIHRha2VuIGZyb20gYmd3b3JrZXJz IHBvb2wuIiksCisJCQlnZXR0ZXh0X25vb3AoIlRoaXMgcGFyYW1ldGVyIGlzIGNhcHBlZCBieSBc Im1heF93b3JrZXJfcHJvY2Vzc2VzXCIgKG5vdCBieSBcImF1dG92YWN1dW1fbWF4X3dvcmtlcnNc IiEpLiIpLAorCQl9LAorCQkmYXV0b3ZhY3V1bV9tYXhfcGFyYWxsZWxfd29ya2VycywKKwkJMCwg MCwgTUFYX0JBQ0tFTkRTLAorCQljaGVja19hdXRvdmFjdXVtX21heF9wYXJhbGxlbF93b3JrZXJz LCBOVUxMLCBOVUxMCisJfSwKKwogCXsKIAkJeyJtYXhfcGFyYWxsZWxfbWFpbnRlbmFuY2Vfd29y a2VycyIsIFBHQ19VU0VSU0VULCBSRVNPVVJDRVNfV09SS0VSX1BST0NFU1NFUywKIAkJCWdldHRl eHRfbm9vcCgiU2V0cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcGFyYWxsZWwgcHJvY2Vzc2VzIHBl ciBtYWludGVuYW5jZSBvcGVyYXRpb24uIiksCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGls cy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bv c3RncmVzcWwuY29uZi5zYW1wbGUKaW5kZXggMzQxZjg4YWRjODcuLmYyYjZiYTc3NTVlIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKKysr IGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCkBAIC02ODMs NiArNjgzLDcgQEAKIGF1dG92YWN1dW1fd29ya2VyX3Nsb3RzID0gMTYJIyBhdXRvdmFjdXVtIHdv cmtlciBzbG90cyB0byBhbGxvY2F0ZQogCQkJCQkjIChjaGFuZ2UgcmVxdWlyZXMgcmVzdGFydCkK ICNhdXRvdmFjdXVtX21heF93b3JrZXJzID0gMwkJIyBtYXggbnVtYmVyIG9mIGF1dG92YWN1dW0g c3VicHJvY2Vzc2VzCisjYXV0b3ZhY3V1bV9tYXhfcGFyYWxsZWxfd29ya2VycyA9IDAJIyBkaXNh YmxlZCBieSBkZWZhdWx0IGFuZCBsaW1pdGVkIGJ5IG1heF9wYXJhbGxlbF93b3JrZXJzCiAjYXV0 b3ZhY3V1bV9uYXB0aW1lID0gMW1pbgkJIyB0aW1lIGJldHdlZW4gYXV0b3ZhY3V1bSBydW5zCiAj YXV0b3ZhY3V1bV92YWN1dW1fdGhyZXNob2xkID0gNTAJIyBtaW4gbnVtYmVyIG9mIHJvdyB1cGRh dGVzIGJlZm9yZQogCQkJCQkjIHZhY3V1bQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbWlzY2Fk bWluLmggYi9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaAppbmRleCAxYmVmOTg0NzFjMy4uODU5MjY0 MTU2NTcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL21pc2NhZG1pbi5oCisrKyBiL3NyYy9pbmNs dWRlL21pc2NhZG1pbi5oCkBAIC0xNzcsNiArMTc3LDcgQEAgZXh0ZXJuIFBHRExMSU1QT1JUIGlu dCBNYXhCYWNrZW5kczsKIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgTWF4Q29ubmVjdGlvbnM7CiBl eHRlcm4gUEdETExJTVBPUlQgaW50IG1heF93b3JrZXJfcHJvY2Vzc2VzOwogZXh0ZXJuIFBHRExM SU1QT1JUIGludCBtYXhfcGFyYWxsZWxfd29ya2VyczsKK2V4dGVybiBQR0RMTElNUE9SVCBpbnQg YXV0b3ZhY3V1bV9tYXhfcGFyYWxsZWxfd29ya2VyczsKIAogZXh0ZXJuIFBHRExMSU1QT1JUIGlu dCBjb21taXRfdGltZXN0YW1wX2J1ZmZlcnM7CiBleHRlcm4gUEdETExJTVBPUlQgaW50IG11bHRp eGFjdF9tZW1iZXJfYnVmZmVyczsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIv YXV0b3ZhY3V1bS5oIGIvc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9hdXRvdmFjdXVtLmgKaW5kZXgg ZTgxMzVmNDFhMWMuLmI1NzYzZTZhYzM2IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9wb3N0bWFz dGVyL2F1dG92YWN1dW0uaAorKysgYi9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL2F1dG92YWN1dW0u aApAQCAtNjQsNiArNjQsMTAgQEAgcGdfbm9yZXR1cm4gZXh0ZXJuIHZvaWQgQXV0b1ZhY1dvcmtl ck1haW4oY29uc3Qgdm9pZCAqc3RhcnR1cF9kYXRhLCBzaXplX3Qgc3RhcnQKIGV4dGVybiBib29s IEF1dG9WYWN1dW1SZXF1ZXN0V29yayhBdXRvVmFjdXVtV29ya0l0ZW1UeXBlIHR5cGUsCiAJCQkJ CQkJCSAgT2lkIHJlbGF0aW9uSWQsIEJsb2NrTnVtYmVyIGJsa25vKTsKIAorLyogcGFyYWxsZWwg YXV0b3ZhY3V1bSBzdHVmZiAqLworZXh0ZXJuIGludCBQYXJhbGxlbEF1dG9WYWN1dW1SZXNlcnZl V29ya2VycyhpbnQgbndvcmtlcnMpOworZXh0ZXJuIHZvaWQgUGFyYWxsZWxBdXRvVmFjdXVtUmVs ZWFzZVdvcmtlcnMoaW50IG53b3JrZXJzKTsKKwogLyogc2hhcmVkIG1lbW9yeSBzdHVmZiAqLwog ZXh0ZXJuIFNpemUgQXV0b1ZhY3V1bVNobWVtU2l6ZSh2b2lkKTsKIGV4dGVybiB2b2lkIEF1dG9W YWN1dW1TaG1lbUluaXQodm9pZCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9ndWNf aG9va3MuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL2d1Y19ob29rcy5oCmluZGV4IDc5OWZhN2FjZTY4 Li41YzY2ZjM3Y2Q1MyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvZ3VjX2hvb2tzLmgK KysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvZ3VjX2hvb2tzLmgKQEAgLTMxLDYgKzMxLDggQEAgZXh0 ZXJuIHZvaWQgYXNzaWduX2FwcGxpY2F0aW9uX25hbWUoY29uc3QgY2hhciAqbmV3dmFsLCB2b2lk ICpleHRyYSk7CiBleHRlcm4gY29uc3QgY2hhciAqc2hvd19hcmNoaXZlX2NvbW1hbmQodm9pZCk7 CiBleHRlcm4gYm9vbCBjaGVja19hdXRvdmFjdXVtX3dvcmtfbWVtKGludCAqbmV3dmFsLCB2b2lk ICoqZXh0cmEsCiAJCQkJCQkJCQkgIEd1Y1NvdXJjZSBzb3VyY2UpOworZXh0ZXJuIGJvb2wgY2hl Y2tfYXV0b3ZhY3V1bV9tYXhfcGFyYWxsZWxfd29ya2VycyhpbnQgKm5ld3ZhbCwgdm9pZCAqKmV4 dHJhLAorCQkJCQkJCQkJCQkJICBHdWNTb3VyY2Ugc291cmNlKTsKIGV4dGVybiBib29sIGNoZWNr X3ZhY3V1bV9idWZmZXJfdXNhZ2VfbGltaXQoaW50ICpuZXd2YWwsIHZvaWQgKipleHRyYSwKIAkJ CQkJCQkJCQkJR3VjU291cmNlIHNvdXJjZSk7CiBleHRlcm4gYm9vbCBjaGVja19iYWNrdHJhY2Vf ZnVuY3Rpb25zKGNoYXIgKipuZXd2YWwsIHZvaWQgKipleHRyYSwKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL3V0aWxzL3JlbC5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvcmVsLmgKaW5kZXggYjU1MjM1 OTkxNWYuLjE2MDkxZTZhNzczIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9yZWwuaAor KysgYi9zcmMvaW5jbHVkZS91dGlscy9yZWwuaApAQCAtMzExLDYgKzMxMSw4IEBAIHR5cGVkZWYg c3RydWN0IEZvcmVpZ25LZXlDYWNoZUluZm8KIHR5cGVkZWYgc3RydWN0IEF1dG9WYWNPcHRzCiB7 CiAJYm9vbAkJZW5hYmxlZDsKKwlpbnQJCQlwYXJhbGxlbF9hdXRvdmFjdXVtX3dvcmtlcnM7IC8q IG1heCBudW1iZXIgb2YgcGFyYWxsZWwKKwkJCQkJCQkJCQkJCWF1dG92YWN1dW0gd29ya2VycyAq LwogCWludAkJCXZhY3V1bV90aHJlc2hvbGQ7CiAJaW50CQkJdmFjdXVtX21heF90aHJlc2hvbGQ7 CiAJaW50CQkJdmFjdXVtX2luc190aHJlc2hvbGQ7CkBAIC00MDksNiArNDExLDE2IEBAIHR5cGVk ZWYgc3RydWN0IFN0ZFJkT3B0aW9ucwogCSgocmVsYXRpb24pLT5yZF9vcHRpb25zID8gXAogCSAo KFN0ZFJkT3B0aW9ucyAqKSAocmVsYXRpb24pLT5yZF9vcHRpb25zKS0+cGFyYWxsZWxfd29ya2Vy cyA6IChkZWZhdWx0cHcpKQogCisvKgorICogUmVsYXRpb25HZXRQYXJhbGxlbEF1dG92YWN1dW1X b3JrZXJzCisgKgkJUmV0dXJucyB0aGUgcmVsYXRpb24ncyBwYXJhbGxlbF9hdXRvdmFjdXVtX3dv cmtlcnMgcmVsb3B0aW9uIHNldHRpbmcuCisgKgkJTm90ZSBtdWx0aXBsZSBldmFsIG9mIGFyZ3Vt ZW50IQorICovCisjZGVmaW5lIFJlbGF0aW9uR2V0UGFyYWxsZWxBdXRvdmFjdXVtV29ya2Vycyhy ZWxhdGlvbiwgZGVmYXVsdHB3KSBcCisJKChyZWxhdGlvbiktPnJkX29wdGlvbnMgPyBcCisJICgo U3RkUmRPcHRpb25zICopIChyZWxhdGlvbiktPnJkX29wdGlvbnMpLT5hdXRvdmFjdXVtLnBhcmFs bGVsX2F1dG92YWN1dW1fd29ya2VycyA6IFwKKwkgKGRlZmF1bHRwdykpCisKIC8qIFZpZXdPcHRp b25zLT5jaGVja19vcHRpb24gdmFsdWVzICovCiB0eXBlZGVmIGVudW0gVmlld09wdENoZWNrT3B0 aW9uCiB7Ci0tIAoyLjQzLjAKCg== --0000000000002291160637d410a0--