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.96) (envelope-from ) id 1w9ISP-001KSA-05 for pgsql-hackers@arkaria.postgresql.org; Sun, 05 Apr 2026 08:03:45 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w9ISN-0021WZ-1g for pgsql-hackers@arkaria.postgresql.org; Sun, 05 Apr 2026 08:03:43 +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.96) (envelope-from ) id 1w9ISM-0021WQ-2h for pgsql-hackers@lists.postgresql.org; Sun, 05 Apr 2026 08:03:43 +0000 Received: from mail-pj1-x102a.google.com ([2607:f8b0:4864:20::102a]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w9ISJ-00000000eJG-1ump for pgsql-hackers@postgresql.org; Sun, 05 Apr 2026 08:03:42 +0000 Received: by mail-pj1-x102a.google.com with SMTP id 98e67ed59e1d1-35d971fbcddso1801017a91.1 for ; Sun, 05 Apr 2026 01:03:39 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1775376218; cv=none; d=google.com; s=arc-20240605; b=X9FqgllhhXI6I6cCdSmr9cFYqrfmjmW+JDpeb7CYRZrrGLDRJ+zZvCVh5Y+tCZo9Nu /ol4VKxs3OaA/gQEfqgVfLMRU5whqa/Uqr+GJGnNJt3dmjCSIdSmomgX4YEGz6UIlsHv xIUIF7+eK1IdqEAxPGyuUpi7eM4egKiv+tx2kh62rBvZzGd8qnF5UaSKFpEj04M7VCUu H8AUNWgOsu/pKOCVAFhkqz7m6zz6hat4/qeCG6r5zhSfdHL9w6dgjinQbvSN/6YRWfvr HncGnrqhlHFwS8uPZhqQRf0Rhg7UIa0sKAwMyDNmDekHws3eB5yGXq93jEd9fiBSUED5 AxiQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=e5y0SNPsaWh9www7f38ylPENz8ct3vWWIVUHTw7hEu8=; fh=XzoMuuMQfkaalOU0NW4lazVqPmDZfa2N6o6WdeYP8xM=; b=H00xDcZgsOVDOmJ8yzF13cryuzsnNDZiEjwebv6LxCSUtI5yVj4gECS1m1pA2dy+1N EEqMmYytXkj24URsXnqELJZC2nyaN5feEKM7JSLuKzjSBzo4qpEC1t67AaB8MLdJy+U6 Vo5yn8YKrHI7kshXcB9L2SwIDLrogQ/7scKa8bYjOO/Fd/cFJ6uhWFLzjXA4PN+hiFk+ kSvZxjew4h9rskj4mXQcD9cez50cZWhmznh6qmpRfE54HXA1+/TDSIF2PHQoJGGac1u3 tGZKhqIRMeNrL0eMx4flPnV+yXSZMwbe0kQ6BofOZNxSui0k94YtqvfdaPtuayobYLG5 d4yg==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775376218; x=1775981018; 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=e5y0SNPsaWh9www7f38ylPENz8ct3vWWIVUHTw7hEu8=; b=QYI3fhzVtSB2/TsFOv7r6gqSsaT5CqAE5R8NqNNGWVg8hFX2EPXlifRlJUOlNrBkNR o1SExmKnAKz4vPrP/bNJgZsVd2h5WD/5nWwlqf6O3ZMTDehMzz3ipOOBZOUVnOywzJdw PbJ/tKsqXRkB2lQ33+tEEAe/RloEEA52gysx7lHaJz4NUDByxGgPWP7JRICCeNFvBDka eXrKLuAaLMFMWLNLFdTXSl5lGHi8PTE98syIrNxqe7FmCBysjvo75t6bqRUwuk31avGq DcI/e1bN9YuTn56Qj+wZ+257c6FuYuQfY7FC3qL6Q1A/+qd4jBdEYRrNPAeFmvMLsb+x 2AaQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775376218; x=1775981018; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=e5y0SNPsaWh9www7f38ylPENz8ct3vWWIVUHTw7hEu8=; b=Z50Zn2HNR93XXMVy3sWcbVbGO4pXJT0mjInHC+5/q+yIt3G5YoJkfYOebrDbpWtTpH JIEcMcKcIgL1ZpXhhbABuPqeDomX9cZ35Mbe3EYRb/xww60435EdcW7FsNwKQh3l2ABU 9CHcZ5o1LtFRF90K7D65fHz6pVKvuy0smUkmNkF+nakEe9Em2lvS4APJ+bXeTdBj5lhC uuYttaxVkvN/LzoZoi+Iz0fjRLvcy/QFyM2HnB2dZXz46tMnO4dHfWofcefTpWkdNgWA xRNhioz3OqotZQxxNCT3EuNCcrRsYHs4/8B6LAH1/DPhvF1BFsUPxmO6RA7E56F8u4qn rYkw== X-Forwarded-Encrypted: i=1; AJvYcCVPr0ZAzeC0b5UFmU4yS6mZr8YbDKcguTF5jwC3pSio2zvqEI6RO9/UYPDOqAXLYI6P2r4vmQ0XDLQvkml5@postgresql.org X-Gm-Message-State: AOJu0Yyu0t27nhYxEMUmqDVscPS+a1NLvczwI52dOqDdgOa9pRT2jjqK FtAkhTSWWpKBBQ7MOAPEnaqEjY6VCO6DSdq7wcxuuGw1AaH5Tawmf3l1+TCKPJBKY94Iixu3gvp Ejrm2DjT52x+AwXYmQ3KLqZc2mtkmVeE= X-Gm-Gg: AeBDievFbMwxeXZa1S+6cY4zdl62aMxVrOsB9PNuaP23xHH8OXNAsLzb/skK2AqN51P nDe54PKsYekzs7VuZda9Sb07owBdNS1GZlKWSOUqYx3twFnokPPazfiC8FpmfnpNpLiyydJ9gWq m82F4o3x34NGLA1rWJhdhWnkwhvkPaaPbiqn+s5gkSeOx7nmn1lY4FRZC0X38YcvD7Lk11JXtgh acIfI8utRg6dw7pkG/a6TCmTpJKwO3EzdxpaR2nqnxzILXohHBv9q4LhfafzsjmFDMl9xIyYojo f9jR7/j+ X-Received: by 2002:a17:90b:2e46:b0:359:8957:7285 with SMTP id 98e67ed59e1d1-35de591e9bcmr7078501a91.3.1775376217861; Sun, 05 Apr 2026 01:03:37 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Masahiko Sawada Date: Sun, 5 Apr 2026 01:03:00 -0700 X-Gm-Features: AQROBzCfFw9DpoZH8eMS2Nv1hCPbck96r_v9Rv9Qxn1jaEX6ejB3Ac4Ea8ecWOI Message-ID: Subject: Re: Introduce XID age based replication slot invalidation To: Bharath Rupireddy Cc: Srinath Reddy Sadipiralla , SATYANARAYANA NARLAPURAM , "Hayato Kuroda (Fujitsu)" , John H , PostgreSQL-development Content-Type: multipart/mixed; boundary="000000000000cf07b5064eb1fc0d" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000cf07b5064eb1fc0d Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, Apr 3, 2026 at 12:05=E2=80=AFPM Bharath Rupireddy wrote: > > Hi, > > On Wed, Apr 1, 2026 at 2:21=E2=80=AFPM Bharath Rupireddy > wrote: > > > > On Wed, Apr 1, 2026 at 12:39=E2=80=AFPM Masahiko Sawada wrote: > > > > > > I've reviewed the v7 patch and have some review comments: > > > > Thank you for reviewing the patch. > > > > I took the above changes into v8 and fixed a typo in using xidLimit > > instead of slotXidLimit. > > > > Please find the attached v8 patches for further review. Thank you! > > Thank you, Sawada-san, for reviewing and providing some offlist comments. > > 1/ Included a note in the docs to say that logical replication slots > are also affected by XID age GUC (similar to > idle_replication_slot_timeout). > > 2/ Added the code to disable the XID age invalidation in > pg_createsubscriber similar to timeout invalidation. Commit 72e6c08fea > ensured that none of the logical replication slots get invalidated > during the upgrade. (I believe the work that pg_upgrade and > pg_createsubscriber do is more important, and the slots created and > used by them or slots in use during those processes must not interfere > with the upgrade or creating a logical replica from a standby.) > > 3/ Changed the max value of XID age GUC to be equal to that of vacuum > failsafe age. In my opinion, the best use of max_slot_xid_age would be > to set it equal to or a little less than vacuum_failsafe_age. Also > added a note in the docs about this. > > 4/ Changed variable names for consistency. > > 5/ Added code to MaybeInvalidateXIDAgedSlots() to skip the slot > invalidation attempt (unnecessary work) when slots are not the reason > for holding back the OldestXmin. Added an equality check to see if > OldestXmin is either OldestSlotXmin or OldestSlotCatalogXmin (all > these OldestXXXXmins are computed from the same ComputeXidHorizons() > call). This should allow us to skip the slot invalidation attempt when > a backend is holding the xmin back (a long-running transaction, for > example). > > Please find the attached v9 patches for further review. Thank you! Thank you for updating the patch! I've made some changes including moving MaybeInvalidateXidAgedSlot() to vacuum.c since the function seems more inherently tied to vacuum context. Also, updated the commit message and fixed typos. Please review the attached patch. Regards, --=20 Masahiko Sawada Amazon Web Services: https://aws.amazon.com --000000000000cf07b5064eb1fc0d Content-Type: text/x-patch; charset="US-ASCII"; name="v10-0001-Introduce-max_slot_xid_age-to-invalidate-old-rep.patch" Content-Disposition: attachment; filename="v10-0001-Introduce-max_slot_xid_age-to-invalidate-old-rep.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnldzcjq0 RnJvbSAwNWI2MTk0YTMyMWY0MTY4ZGNjMTdiMWZkNTU4OWRmY2ZiNmU0OWQ0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8cnVwaXJlZGRAYW1hem9uLmNv bT4KRGF0ZTogRnJpLCAzIEFwciAyMDI2IDE4OjI3OjE1ICswMDAwClN1YmplY3Q6IFtQQVRDSCB2 MTBdIEludHJvZHVjZSBtYXhfc2xvdF94aWRfYWdlIHRvIGludmFsaWRhdGUgb2xkIHJlcGxpY2F0 aW9uCiBzbG90cy4KClRoaXMgY29tbWl0IGludHJvZHVjZXMgYSBuZXcgR1VDIHBhcmFtZXRlciwg bWF4X3Nsb3RfeGlkX2FnZS4gSXQKaW52YWxpZGF0ZXMgcmVwbGljYXRpb24gc2xvdHMgd2hvc2Ug eG1pbiBvciBjYXRhbG9nX3htaW4gYWdlIGV4Y2VlZHMKdGhlIGNvbmZpZ3VyZWQgbGltaXQuIFdo aWxlIHRpbWUtYmFzZWQgc2xvdCBpbnZhbGlkYXRpb24gaXMgdXNlZnVsIGZvcgpjbGVhbmluZyB1 cCBpbmFjdGl2ZSBzbG90cywgYW4gWElELWFnZS1iYXNlZCBsaW1pdCBhY3RzIGFzIGEgY3JpdGlj YWwKYmFja3N0b3AgdG8gZGlyZWN0bHkgcHJldmVudCB0cmFuc2FjdGlvbiBJRCB3cmFwYXJvdW5k IGFuZCBzZXZlcmUKYmxvYXQgY2F1c2VkIGJ5IG9ycGhhbmVkIHNsb3RzLgoKVGhlIGludmFsaWRh dGlvbiBjaGVjayBvY2N1cnMgZHVyaW5nIGJvdGggVkFDVVVNIChtYW51YWwgYW5kIGF1dG92YWN1 dW0pCmFuZCBjaGVja3BvaW50cy4gRHVyaW5nIHZhY3V1bSwgdGhlIGNoZWNrIGlzIHBlcmZvcm1l ZCBvbiBhIHBlci1yZWxhdGlvbgpiYXNpcy4gQ3J1Y2lhbGx5LCB0aGUgWElELWFnZSBiYXNlZCBz bG90IGludmFsaWRhdGlvbiBpcyBjb25zaWRlcmVkCm9ubHkgd2hlbiBzbG90cycgWElEcyBhcmUg YWN0aXZlbHkgaG9sZGluZyBiYWNrIHRoZSBPbGRlc3RYbWluIGZvciB0aGUKY3VycmVudCByZWxh dGlvbi4gSW4gb3RoZXIgd29yZHMsIHdlIG9ubHkgaW52YWxpZGF0ZSBzbG90cyB3aGVuIGRvaW5n CnNvIGhhcyB0aGUgcG90ZW50aWFsIHRvIGFkdmFuY2UgdGhlIHZhY3V1bSBjdXRvZmYgYW5kIGFs bG93IGRlYWQgdHVwbGUKcmVjbGFtYXRpb24uCgpDaGVja2luZyBzbG90IFhJRHMgcGVyIHJlbGF0 aW9uIGNvdWxkIGludHJvZHVjZSBzaWduaWZpY2FudCBwZXJmb3JtYW5jZQpvdmVyaGVhZCBpZiBp dCByZXF1aXJlZCBhY3F1aXJpbmcgUHJvY0FycmF5TG9jayByZXBlYXRlZGx5IHRvIGdldApyZXBs aWNhdGlvbiBzbG90IHhtaW4gdmFsdWVzICh4bWluIGFuZCBjYXRhbG9nX3htaW4gaW4gcHJvY0Fy cmF5KS4gVG8KYXZvaWQgdGhpcywgdGhlIHZhY3V1bSBjdXRvZmYgY2FsY3VsYXRpb24gaGFzIGJl ZW4gb3B0aW1pemVkLiBBIG5ldwpmdW5jdGlvbiBHZXRPbGRlc3ROb25SZW1vdmFibGVUcmFuc2Fj dGlvbklkV2l0aFNsb3RYaWRzKCkgaXMKaW50cm9kdWNlZCB0byByZXR1cm4gdGhlIGdsb2JhbCBP bGRlc3RYbWluIGFsb25nIHdpdGggdGhlIG9sZGVzdCBzbG90CnhtaW4gYW5kIGNhdGFsb2dfeG1p biB2YWx1ZXMuIFRoaXMgYWxsb3dzIHRoZSBwZXItcmVsYXRpb24gaW52YWxpZGF0aW9uCmNoZWNr IHRvIGJlIHBlcmZvcm1lZCB3aXRoIHplcm8gYWRkaXRpb25hbCBsb2NrIGFjcXVpc2l0aW9ucy4K CkluIGFkZGl0aW9uIHRvIHZhY3V1bSwgc2xvdHMgYXJlIGFsc28gY2hlY2tlZCBhbmQgaW52YWxp ZGF0ZWQgZHVyaW5nCmNoZWNrcG9pbnRzLiBUaGlzIGlzIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQg Zm9yIHN0YW5kYnkgc2VydmVycyB3aGVyZQp2YWN1dW0gZG9lcyBub3QgcnVuLiBOb3RlIHRoYXQg b24gc3RhbmRieXMsIHNsb3RzIHRoYXQgYXJlIGN1cnJlbnRseQpiZWluZyBzeW5jZWQgZnJvbSB0 aGUgcHJpbWFyeSAoaS5lLiwgc3luY2VkID0gdHJ1ZSkgYXJlIGV4ZW1wdCBmcm9tCnRoaXMgaW52 YWxpZGF0aW9uIG1lY2hhbmlzbS4KCkF1dGhvcjogQmhhcmF0aCBSdXBpcmVkZHkgPGJoYXJhdGgu cnVwaXJlZGR5Zm9ycG9zdGdyZXNAZ21haWwuY29tPgpDby1hdXRob3JlZC1ieTogSm9obiBIc3Ug PGpvaG5oeXZyQGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IE1hc2FoaWtvIFNhd2FkYSA8c2F3YWRh Lm1zaGtAZ21haWwuY29tPgpSZXZpZXdlZC1ieTogQmVydHJhbmQgRHJvdXZvdCA8YmVydHJhbmRk cm91dm90LnBnQGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IHNodmV0YSBtYWxpayA8c2h2ZXRhLm1h bGlrQGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IEFtaXQgS2FwaWxhIDxhbWl0LmthcGlsYTE2QGdt YWlsLmNvbT4KUmV2aWV3ZWQtYnk6IFNBVFlBTkFSQVlBTkEgTkFSTEFQVVJBTSA8c2F0eWFuYXJs YXB1cmFtQGdtYWlsLmNvbT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQUxqMkFD VzRhVWUtX3VGUU9qZFdDRU4teFhvTEdobXZSRm5MOFNOd19UWjVuSmUrYXdAbWFpbC5nbWFpbC5j b20KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQSstSnZGc01IY2tCTXpzdTVPdjlI Q0czQUZiTWgwNTZoSHkxRmlYYXpCUnRaOXBGQmdAbWFpbC5nbWFpbC5jb20KLS0tCiBkb2Mvc3Jj L3NnbWwvY29uZmlnLnNnbWwgICAgICAgICAgICAgICAgICAgICAgfCAgNTQgKysrKysrCiBkb2Mv c3JjL3NnbWwvbG9naWNhbC1yZXBsaWNhdGlvbi5zZ21sICAgICAgICAgfCAgIDQgKy0KIGRvYy9z cmMvc2dtbC9zeXN0ZW0tdmlld3Muc2dtbCAgICAgICAgICAgICAgICB8ICAgOCArCiBzcmMvYmFj a2VuZC9hY2Nlc3MvaGVhcC92YWN1dW1sYXp5LmMgICAgICAgICAgfCAgMTggKysKIHNyYy9iYWNr ZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYyAgICAgICAgICAgICB8ICAzNCArKystCiBzcmMvYmFj a2VuZC9jb21tYW5kcy92YWN1dW0uYyAgICAgICAgICAgICAgICAgfCAgODAgKysrKysrKy0KIHNy Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Nsb3QuYyAgICAgICAgICAgICAgICB8ICA4MiArKysrKysr LQogc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY2FycmF5LmMgICAgICAgICAgIHwgIDYxICsr KystLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc3RhbmRieS5jICAgICAgICAgICAgIHwgICAz ICstCiBzcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdCAgICAgfCAgIDgg Kwogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlIHwgICAyICsK IHNyYy9iaW4vcGdfYmFzZWJhY2t1cC9wZ19jcmVhdGVzdWJzY3JpYmVyLmMgICB8ICAgMiArLQog c3JjL2luY2x1ZGUvY29tbWFuZHMvdmFjdXVtLmggICAgICAgICAgICAgICAgIHwgIDEwICsKIHNy Yy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Nsb3QuaCAgICAgICAgICAgICAgICB8ICAgOCArLQogc3Jj L2luY2x1ZGUvc3RvcmFnZS9wcm9jYXJyYXkuaCAgICAgICAgICAgICAgIHwgICAzICsKIHNyYy90 ZXN0L3JlY292ZXJ5L3QvMDE5X3JlcGxzbG90X2xpbWl0LnBsICAgICB8IDE3NSArKysrKysrKysr KysrKysrKysKIDE2IGZpbGVzIGNoYW5nZWQsIDUyNCBpbnNlcnRpb25zKCspLCAyOCBkZWxldGlv bnMoLSkKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwgYi9kb2Mvc3JjL3Nn bWwvY29uZmlnLnNnbWwKaW5kZXggZDNmZWE3MzhjYTMuLjE2ZTQ1NzQ4MTE4IDEwMDY0NAotLS0g YS9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21s CkBAIC00NzY0LDYgKzQ3NjQsNjAgQEAgcmVzdG9yZV9jb21tYW5kID0gJ2NvcHkgIkM6XFxzZXJ2 ZXJcXGFyY2hpdmVkaXJcXCVmIiAiJXAiJyAgIyBXaW5kb3dzCiAgICAgICA8L2xpc3RpdGVtPgog ICAgICA8L3Zhcmxpc3RlbnRyeT4KIAorICAgICA8dmFybGlzdGVudHJ5IGlkPSJndWMtbWF4LXNs b3QteGlkLWFnZSIgeHJlZmxhYmVsPSJtYXhfc2xvdF94aWRfYWdlIj4KKyAgICAgIDx0ZXJtPjx2 YXJuYW1lPm1heF9zbG90X3hpZF9hZ2U8L3Zhcm5hbWU+ICg8dHlwZT5pbnRlZ2VyPC90eXBlPikK KyAgICAgIDxpbmRleHRlcm0+CisgICAgICAgPHByaW1hcnk+PHZhcm5hbWU+bWF4X3Nsb3RfeGlk X2FnZTwvdmFybmFtZT4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgICA8 L2luZGV4dGVybT4KKyAgICAgIDwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFy YT4KKyAgICAgICAgSW52YWxpZGF0ZSByZXBsaWNhdGlvbiBzbG90cyB3aG9zZSA8c3RydWN0Zmll bGQ+eG1pbjwvc3RydWN0ZmllbGQ+IGFnZQorICAgICAgICBvciA8c3RydWN0ZmllbGQ+Y2F0YWxv Z194bWluPC9zdHJ1Y3RmaWVsZD4gYWdlIGluIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSJ2 aWV3LXBnLXJlcGxpY2F0aW9uLXNsb3RzIj5wZ19yZXBsaWNhdGlvbl9zbG90czwvbGluaz4KKyAg ICAgICAgdmlldyBoYXMgZXhjZWVkZWQgdGhlIGFnZSBzcGVjaWZpZWQgYnkgdGhpcyBzZXR0aW5n LiBTbG90IGludmFsaWRhdGlvbgorICAgICAgICBkdWUgdG8gdGhpcyBsaW1pdCBvY2N1cnMgZHVy aW5nIHZhY3V1bSAoYm90aCA8Y29tbWFuZD5WQUNVVU08L2NvbW1hbmQ+CisgICAgICAgIGNvbW1h bmQgYW5kIGF1dG92YWN1dW0pIGFuZCBkdXJpbmcgY2hlY2twb2ludC4KKyAgICAgICAgQSB2YWx1 ZSBvZiB6ZXJvICh0aGUgZGVmYXVsdCkgZGlzYWJsZXMgdGhpcyBmZWF0dXJlLiBVc2VycyBjYW4g c2V0CisgICAgICAgIHRoaXMgdmFsdWUgYW55d2hlcmUgZnJvbSB6ZXJvIHRvIHR3byBiaWxsaW9u IHRyYW5zYWN0aW9ucy4gVGhpcyBwYXJhbWV0ZXIKKyAgICAgICAgY2FuIG9ubHkgYmUgc2V0IGlu IHRoZSA8ZmlsZW5hbWU+cG9zdGdyZXNxbC5jb25mPC9maWxlbmFtZT4gZmlsZSBvciBvbgorICAg ICAgICB0aGUgc2VydmVyIGNvbW1hbmQgbGluZS4KKyAgICAgICA8L3BhcmE+CisKKyAgICAgICA8 cGFyYT4KKyAgICAgICAgVGhlIGN1cnJlbnQgYWdlIG9mIGEgc2xvdCdzIDxsaXRlcmFsPnhtaW48 L2xpdGVyYWw+IGFuZAorICAgICAgICA8bGl0ZXJhbD5jYXRhbG9nX3htaW48L2xpdGVyYWw+IGNh biBiZSBtb25pdG9yZWQgYnkgYXBwbHlpbmcgdGhlCisgICAgICAgIDxmdW5jdGlvbj5hZ2U8L2Z1 bmN0aW9uPiBmdW5jdGlvbiB0byB0aGUgY29ycmVzcG9uZGluZyBjb2x1bW5zIGluIHRoZQorICAg ICAgICA8bGluayBsaW5rZW5kPSJ2aWV3LXBnLXJlcGxpY2F0aW9uLXNsb3RzIj5wZ19yZXBsaWNh dGlvbl9zbG90czwvbGluaz4KKyAgICAgICAgdmlldy4KKyAgICAgICA8L3BhcmE+CisKKyAgICAg ICA8cGFyYT4KKyAgICAgICAgSWRsZSBvciBmb3Jnb3R0ZW4gcmVwbGljYXRpb24gc2xvdHMgY2Fu IGhvbGQgYmFjayB2YWN1dW0sIGxlYWRpbmcgdG8KKyAgICAgICAgYmxvYXQgYW5kIGV2ZW50dWFs bHkgdHJhbnNhY3Rpb24gSUQgd3JhcGFyb3VuZC4gVGhpcyBzZXR0aW5nIGF2b2lkcworICAgICAg ICB0aGF0IGJ5IGludmFsaWRhdGluZyBzbG90cyB0aGF0IGhhdmUgZmFsbGVuIHRvbyBmYXIgYmVo aW5kLgorICAgICAgICBTZWUgPHhyZWYgbGlua2VuZD0icm91dGluZS12YWN1dW1pbmciLz4gZm9y IG1vcmUgZGV0YWlscy4KKyAgICAgICA8L3BhcmE+CisKKyAgICAgICA8cGFyYT4KKyAgICAgICAg SXQgaXMgcmVjb21tZW5kZWQgdG8gc2V0IDx2YXJuYW1lPm1heF9zbG90X3hpZF9hZ2U8L3Zhcm5h bWU+CisgICAgICAgIHRvIGEgdmFsdWUgZXF1YWwgdG8gb3Igc2xpZ2h0bHkgbGVzcyB0aGFuCisg ICAgICAgIDx4cmVmIGxpbmtlbmQ9Imd1Yy12YWN1dW0tZmFpbHNhZmUtYWdlIi8+LCBzbyB0aGF0 IHRoZSBzbG90IGhvbGRpbmcgdGhlCisgICAgICAgIHZhY3V1bSBiYWNrIGlzIGludmFsaWRhdGVk IGJlZm9yZSB2YWN1dW0gZW50ZXJzIGZhaWxzYWZlIG1vZGUuCisgICAgICAgPC9wYXJhPgorCisg ICAgICAgPHBhcmE+CisgICAgICAgIE5vdGUgdGhhdCB0aGlzIGludmFsaWRhdGlvbiBtZWNoYW5p c20gaXMgbm90IGFwcGxpY2FibGUgZm9yIHNsb3RzCisgICAgICAgIG9uIHRoZSBzdGFuZGJ5IHNl cnZlciB0aGF0IGFyZSBiZWluZyBzeW5jZWQgZnJvbSB0aGUgcHJpbWFyeSBzZXJ2ZXIKKyAgICAg ICAgKGkuZS4sIHN0YW5kYnkgc2xvdHMgaGF2aW5nCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9InZp ZXctcGctcmVwbGljYXRpb24tc2xvdHMiPnBnX3JlcGxpY2F0aW9uX3Nsb3RzPC9saW5rPi48c3Ry dWN0ZmllbGQ+c3luY2VkPC9zdHJ1Y3RmaWVsZD4KKyAgICAgICAgdmFsdWUgPGxpdGVyYWw+dHJ1 ZTwvbGl0ZXJhbD4pLiBTeW5jZWQgc2xvdHMgYXJlIGFsd2F5cyBjb25zaWRlcmVkIHRvCisgICAg ICAgIGJlIGluYWN0aXZlIGJlY2F1c2UgdGhleSBkb24ndCBwZXJmb3JtIGxvZ2ljYWwgZGVjb2Rp bmcgdG8gcHJvZHVjZQorICAgICAgICBjaGFuZ2VzLgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwv bGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5PgorCiAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9 Imd1Yy13YWwtc2VuZGVyLXRpbWVvdXQiIHhyZWZsYWJlbD0id2FsX3NlbmRlcl90aW1lb3V0Ij4K ICAgICAgIDx0ZXJtPjx2YXJuYW1lPndhbF9zZW5kZXJfdGltZW91dDwvdmFybmFtZT4gKDx0eXBl PmludGVnZXI8L3R5cGU+KQogICAgICAgPGluZGV4dGVybT4KZGlmZiAtLWdpdCBhL2RvYy9zcmMv c2dtbC9sb2dpY2FsLXJlcGxpY2F0aW9uLnNnbWwgYi9kb2Mvc3JjL3NnbWwvbG9naWNhbC1yZXBs aWNhdGlvbi5zZ21sCmluZGV4IDIzYjI2ODI3M2I5Li5hODY1YTVlNmMyOCAxMDA2NDQKLS0tIGEv ZG9jL3NyYy9zZ21sL2xvZ2ljYWwtcmVwbGljYXRpb24uc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwv bG9naWNhbC1yZXBsaWNhdGlvbi5zZ21sCkBAIC0yNjQ5LDcgKzI2NDksOSBAQCBDT05URVhUOiAg cHJvY2Vzc2luZyByZW1vdGUgZGF0YSBmb3IgcmVwbGljYXRpb24gb3JpZ2luICJwZ18xNjM5NSIg ZHVyaW5nICJJTlNFUgogCiAgICA8cGFyYT4KICAgICBMb2dpY2FsIHJlcGxpY2F0aW9uIHNsb3Rz IGFyZSBhbHNvIGFmZmVjdGVkIGJ5Ci0gICAgPGxpbmsgbGlua2VuZD0iZ3VjLWlkbGUtcmVwbGlj YXRpb24tc2xvdC10aW1lb3V0Ij48dmFybmFtZT5pZGxlX3JlcGxpY2F0aW9uX3Nsb3RfdGltZW91 dDwvdmFybmFtZT48L2xpbms+LgorICAgIDxsaW5rIGxpbmtlbmQ9Imd1Yy1pZGxlLXJlcGxpY2F0 aW9uLXNsb3QtdGltZW91dCI+PHZhcm5hbWU+aWRsZV9yZXBsaWNhdGlvbl9zbG90X3RpbWVvdXQ8 L3Zhcm5hbWU+PC9saW5rPgorICAgIGFuZAorICAgIDxsaW5rIGxpbmtlbmQ9Imd1Yy1tYXgtc2xv dC14aWQtYWdlIj48dmFybmFtZT5tYXhfc2xvdF94aWRfYWdlPC92YXJuYW1lPjwvbGluaz4uCiAg ICA8L3BhcmE+CiAKICAgIDxwYXJhPgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3N5c3RlbS12 aWV3cy5zZ21sIGIvZG9jL3NyYy9zZ21sL3N5c3RlbS12aWV3cy5zZ21sCmluZGV4IDllZTFhMmJm YzZhLi4xYTUwN2I0MzBmOSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3N5c3RlbS12aWV3cy5z Z21sCisrKyBiL2RvYy9zcmMvc2dtbC9zeXN0ZW0tdmlld3Muc2dtbApAQCAtMzEwMiw2ICszMTAy LDE0IEBAIFNFTEVDVCAqIEZST00gcGdfbG9ja3MgcGwgTEVGVCBKT0lOIHBnX3ByZXBhcmVkX3hh Y3RzIHBweAogICAgICAgICAgIDx4cmVmIGxpbmtlbmQ9Imd1Yy1pZGxlLXJlcGxpY2F0aW9uLXNs b3QtdGltZW91dCIvPiBkdXJhdGlvbi4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgPC9saXN0 aXRlbT4KKyAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgPHBhcmE+CisgICAgICAgICAgPGxp dGVyYWw+eGlkX2FnZWQ8L2xpdGVyYWw+IG1lYW5zIHRoYXQgdGhlIHNsb3QncworICAgICAgICAg IDxsaXRlcmFsPnhtaW48L2xpdGVyYWw+IG9yIDxsaXRlcmFsPmNhdGFsb2dfeG1pbjwvbGl0ZXJh bD4KKyAgICAgICAgICBoYXMgcmVhY2hlZCB0aGUgYWdlIHNwZWNpZmllZCBieQorICAgICAgICAg IDx4cmVmIGxpbmtlbmQ9Imd1Yy1tYXgtc2xvdC14aWQtYWdlIi8+IHBhcmFtZXRlci4KKyAgICAg ICAgIDwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICA8L2l0ZW1pemVkbGlzdD4K ICAgICAgIDwvcGFyYT48L2VudHJ5PgogICAgICA8L3Jvdz4KZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9oZWFwL3ZhY3V1bWxhenkuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3Zh Y3V1bWxhenkuYwppbmRleCA4OGM3MWNkODViNi4uNTZiMjMxZjIzNTAgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3ZhY3V1bWxhenkuYworKysgYi9zcmMvYmFja2VuZC9hY2Nl c3MvaGVhcC92YWN1dW1sYXp5LmMKQEAgLTc5OSw2ICs3OTksMjQgQEAgaGVhcF92YWN1dW1fcmVs KFJlbGF0aW9uIHJlbCwgY29uc3QgVmFjdXVtUGFyYW1zICpwYXJhbXMsCiAJICogdG8gaW5jcmVh c2UgdGhlIG51bWJlciBvZiBkZWFkIHR1cGxlcyBpdCBjYW4gcHJ1bmUgYXdheS4pCiAJICovCiAJ dmFjcmVsLT5hZ2dyZXNzaXZlID0gdmFjdXVtX2dldF9jdXRvZmZzKHJlbCwgcGFyYW1zLCAmdmFj cmVsLT5jdXRvZmZzKTsKKworCS8qCisJICogSWYgdGhlIGN1cnJlbnQgdmFjdXVtIGN1dG9mZiAo T2xkZXN0WG1pbikgaXMgYmVpbmcgaGVsZCBiYWNrIGJ5IGEKKwkgKiByZXBsaWNhdGlvbiBzbG90 IHRoYXQgaGFzIGV4Y2VlZGVkIG1heF9zbG90X3hpZF9hZ2UsIGF0dGVtcHQgdG8KKwkgKiBpbnZh bGlkYXRlIHN1Y2ggc2xvdHMuCisJICovCisJaWYgKG1heWJlX2ludmFsaWRhdGVfeGlkX2FnZWRf c2xvdHModmFjcmVsLT5jdXRvZmZzLk9sZGVzdFhtaW4sCisJCQkJCQkJCQkJdmFjcmVsLT5jdXRv ZmZzLk9sZGVzdFNsb3RYbWluLAorCQkJCQkJCQkJCXZhY3JlbC0+Y3V0b2Zmcy5PbGRlc3RTbG90 Q2F0YWxvZ1htaW4pKQorCXsKKwkJLyoKKwkJICogU29tZSBzbG90cyBoYXZlIGJlZW4gaW52YWxp ZGF0ZWQ7IHJlLWNvbXB1dGUgdGhlIHZhY3V1bSBjdXRvZmZzIGFuZAorCQkgKiBhZ2dyZXNzaXZl bmVzcy4KKwkJICovCisJCXZhY3JlbC0+YWdncmVzc2l2ZSA9IHZhY3V1bV9nZXRfY3V0b2Zmcyhy ZWwsIHBhcmFtcywKKwkJCQkJCQkJCQkJCSZ2YWNyZWwtPmN1dG9mZnMpOworCX0KKwogCXZhY3Jl bC0+cmVsX3BhZ2VzID0gb3JpZ19yZWxfcGFnZXMgPSBSZWxhdGlvbkdldE51bWJlck9mQmxvY2tz KHJlbCk7CiAJdmFjcmVsLT52aXN0ZXN0ID0gR2xvYmFsVmlzVGVzdEZvcihyZWwpOwogCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvdHJhbnNhbS94bG9nLmMKaW5kZXggOWU4OTk5YmJiNjEuLjQyMjg1YzIxY2IzIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMKKysrIGIvc3JjL2JhY2tl bmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCkBAIC03NDAxLDYgKzc0MDEsOCBAQCBDcmVhdGVDaGVj a1BvaW50KGludCBmbGFncykKIAlWaXJ0dWFsVHJhbnNhY3Rpb25JZCAqdnhpZHM7CiAJaW50CQkJ bnZ4aWRzOwogCWludAkJCW9sZFhMb2dBbGxvd2VkID0gMDsKKwl1aW50MzIJCXNsb3RJbnZhbGlk YXRpb25DYXVzZXM7CisJVHJhbnNhY3Rpb25JZCBzbG90WGlkTGltaXQ7CiAKIAkvKgogCSAqIEFu IGVuZC1vZi1yZWNvdmVyeSBjaGVja3BvaW50IGlzIHJlYWxseSBhIHNodXRkb3duIGNoZWNrcG9p bnQsIGp1c3QKQEAgLTc4NDUsOSArNzg0NywyMCBAQCBDcmVhdGVDaGVja1BvaW50KGludCBmbGFn cykKIAkgKi8KIAlYTEJ5dGVUb1NlZyhSZWRvUmVjUHRyLCBfbG9nU2VnTm8sIHdhbF9zZWdtZW50 X3NpemUpOwogCUtlZXBMb2dTZWcocmVjcHRyLCAmX2xvZ1NlZ05vKTsKLQlpZiAoSW52YWxpZGF0 ZU9ic29sZXRlUmVwbGljYXRpb25TbG90cyhSU19JTlZBTF9XQUxfUkVNT1ZFRCB8IFJTX0lOVkFM X0lETEVfVElNRU9VVCwKKworCXNsb3RJbnZhbGlkYXRpb25DYXVzZXMgPSBSU19JTlZBTF9XQUxf UkVNT1ZFRCB8IFJTX0lOVkFMX0lETEVfVElNRU9VVDsKKwlzbG90WGlkTGltaXQgPSBJbnZhbGlk VHJhbnNhY3Rpb25JZDsKKwlpZiAobWF4X3Nsb3RfeGlkX2FnZSA+IDApCisJeworCQlzbG90SW52 YWxpZGF0aW9uQ2F1c2VzIHw9IFJTX0lOVkFMX1hJRF9BR0U7CisJCXNsb3RYaWRMaW1pdCA9IFRy YW5zYWN0aW9uSWRSZXRyZWF0ZWRCeShSZWFkTmV4dFRyYW5zYWN0aW9uSWQoKSwKKwkJCQkJCQkJ CQkJCW1heF9zbG90X3hpZF9hZ2UpOworCX0KKworCWlmIChJbnZhbGlkYXRlT2Jzb2xldGVSZXBs aWNhdGlvblNsb3RzKHNsb3RJbnZhbGlkYXRpb25DYXVzZXMsCiAJCQkJCQkJCQkJICAgX2xvZ1Nl Z05vLCBJbnZhbGlkT2lkLAotCQkJCQkJCQkJCSAgIEludmFsaWRUcmFuc2FjdGlvbklkKSkKKwkJ CQkJCQkJCQkgICBJbnZhbGlkVHJhbnNhY3Rpb25JZCwKKwkJCQkJCQkJCQkgICBzbG90WGlkTGlt aXQpKQogCXsKIAkJLyoKIAkJICogU29tZSBzbG90cyBoYXZlIGJlZW4gaW52YWxpZGF0ZWQ7IHJl Y2FsY3VsYXRlIHRoZSBvbGQtc2VnbWVudApAQCAtODEzNCw2ICs4MTQ3LDggQEAgQ3JlYXRlUmVz dGFydFBvaW50KGludCBmbGFncykKIAlYTG9nUmVjUHRyCWVuZHB0cjsKIAlYTG9nU2VnTm8JX2xv Z1NlZ05vOwogCVRpbWVzdGFtcFR6IHh0aW1lOworCXVpbnQzMgkJc2xvdEludmFsaWRhdGlvbkNh dXNlczsKKwlUcmFuc2FjdGlvbklkIHNsb3RYaWRMaW1pdDsKIAogCS8qIENvbmN1cnJlbnQgY2hl Y2twb2ludC9yZXN0YXJ0cG9pbnQgY2Fubm90IGhhcHBlbiAqLwogCUFzc2VydCghSXNVbmRlclBv c3RtYXN0ZXIgfHwgTXlCYWNrZW5kVHlwZSA9PSBCX0NIRUNLUE9JTlRFUik7CkBAIC04MzEyLDkg KzgzMjcsMTkgQEAgQ3JlYXRlUmVzdGFydFBvaW50KGludCBmbGFncykKIAogCUlOSkVDVElPTl9Q T0lOVCgicmVzdGFydHBvaW50LWJlZm9yZS1zbG90LWludmFsaWRhdGlvbiIsIE5VTEwpOwogCi0J aWYgKEludmFsaWRhdGVPYnNvbGV0ZVJlcGxpY2F0aW9uU2xvdHMoUlNfSU5WQUxfV0FMX1JFTU9W RUQgfCBSU19JTlZBTF9JRExFX1RJTUVPVVQsCisJc2xvdEludmFsaWRhdGlvbkNhdXNlcyA9IFJT X0lOVkFMX1dBTF9SRU1PVkVEIHwgUlNfSU5WQUxfSURMRV9USU1FT1VUOworCXNsb3RYaWRMaW1p dCA9IEludmFsaWRUcmFuc2FjdGlvbklkOworCWlmIChtYXhfc2xvdF94aWRfYWdlID4gMCkKKwl7 CisJCXNsb3RJbnZhbGlkYXRpb25DYXVzZXMgfD0gUlNfSU5WQUxfWElEX0FHRTsKKwkJc2xvdFhp ZExpbWl0ID0gVHJhbnNhY3Rpb25JZFJldHJlYXRlZEJ5KFJlYWROZXh0VHJhbnNhY3Rpb25JZCgp LAorCQkJCQkJCQkJCQkJbWF4X3Nsb3RfeGlkX2FnZSk7CisJfQorCisJaWYgKEludmFsaWRhdGVP YnNvbGV0ZVJlcGxpY2F0aW9uU2xvdHMoc2xvdEludmFsaWRhdGlvbkNhdXNlcywKIAkJCQkJCQkJ CQkgICBfbG9nU2VnTm8sIEludmFsaWRPaWQsCi0JCQkJCQkJCQkJICAgSW52YWxpZFRyYW5zYWN0 aW9uSWQpKQorCQkJCQkJCQkJCSAgIEludmFsaWRUcmFuc2FjdGlvbklkLAorCQkJCQkJCQkJCSAg IHNsb3RYaWRMaW1pdCkpCiAJewogCQkvKgogCQkgKiBTb21lIHNsb3RzIGhhdmUgYmVlbiBpbnZh bGlkYXRlZDsgcmVjYWxjdWxhdGUgdGhlIG9sZC1zZWdtZW50CkBAIC05MjMwLDYgKzkyNTUsNyBA QCB4bG9nX3JlZG8oWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAJCQkJICovCiAJCQkJSW52YWxp ZGF0ZU9ic29sZXRlUmVwbGljYXRpb25TbG90cyhSU19JTlZBTF9XQUxfTEVWRUwsCiAJCQkJCQkJ CQkJCQkgICAwLCBJbnZhbGlkT2lkLAorCQkJCQkJCQkJCQkJICAgSW52YWxpZFRyYW5zYWN0aW9u SWQsCiAJCQkJCQkJCQkJCQkgICBJbnZhbGlkVHJhbnNhY3Rpb25JZCk7CiAJCQl9CiAJCQllbHNl IGlmIChzeW5jX3JlcGxpY2F0aW9uX3Nsb3RzKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29t bWFuZHMvdmFjdXVtLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW0uYwppbmRleCAwZWQz NjNkMWM4NS4uZWQ2NDdlNzc2MTUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3Zh Y3V1bS5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bS5jCkBAIC00OCw2ICs0OCw3 IEBACiAjaW5jbHVkZSAicG9zdG1hc3Rlci9hdXRvdmFjdXVtLmgiCiAjaW5jbHVkZSAicG9zdG1h c3Rlci9iZ3dvcmtlcl9pbnRlcm5hbHMuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL2ludGVycnVw dC5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL3Nsb3QuaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1 Zm1nci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcG1z aWduYWwuaCIKQEAgLTExMzMsNyArMTEzNCwxMCBAQCB2YWN1dW1fZ2V0X2N1dG9mZnMoUmVsYXRp b24gcmVsLCBjb25zdCBWYWN1dW1QYXJhbXMgKnBhcmFtcywKIAkgKiB0aGF0IG9ubHkgb25lIHZh Y3V1bSBwcm9jZXNzIGNhbiBiZSB3b3JraW5nIG9uIGEgcGFydGljdWxhciB0YWJsZSBhdAogCSAq IGFueSB0aW1lLCBhbmQgdGhhdCBlYWNoIHZhY3V1bSBpcyBhbHdheXMgYW4gaW5kZXBlbmRlbnQg dHJhbnNhY3Rpb24uCiAJICovCi0JY3V0b2Zmcy0+T2xkZXN0WG1pbiA9IEdldE9sZGVzdE5vblJl bW92YWJsZVRyYW5zYWN0aW9uSWQocmVsKTsKKwljdXRvZmZzLT5PbGRlc3RYbWluID0KKwkJR2V0 T2xkZXN0Tm9uUmVtb3ZhYmxlVHJhbnNhY3Rpb25JZFdpdGhTbG90WGlkcyhyZWwsCisJCQkJCQkJ CQkJCQkJICAgJmN1dG9mZnMtPk9sZGVzdFNsb3RYbWluLAorCQkJCQkJCQkJCQkJCSAgICZjdXRv ZmZzLT5PbGRlc3RTbG90Q2F0YWxvZ1htaW4pOwogCiAJQXNzZXJ0KFRyYW5zYWN0aW9uSWRJc05v cm1hbChjdXRvZmZzLT5PbGRlc3RYbWluKSk7CiAKQEAgLTI2ODgsMyArMjY5Miw3NyBAQCB2YWNf dGlkX3JlYXBlZChJdGVtUG9pbnRlciBpdGVtcHRyLCB2b2lkICpzdGF0ZSkKIAogCXJldHVybiBU aWRTdG9yZUlzTWVtYmVyKGRlYWRfaXRlbXMsIGl0ZW1wdHIpOwogfQorCisvKgorICogSW52YWxp ZGF0ZSByZXBsaWNhdGlvbiBzbG90cyB3aG9zZSBYSUQgYWdlIGV4Y2VlZHMgbWF4X3Nsb3RfeGlk X2FnZS4KKyAqCisgKiBUaGUgY2FsbGVyIHByb3ZpZGVzIHRoZSBvdmVyYWxsIG9sZGVzdCB4bWlu IGFsb25nIHdpdGggdGhlIG9sZGVzdAorICogc2xvdCBhbmQgY2F0YWxvZ194bWluLCB0eXBpY2Fs bHkgYWxsIG9idGFpbmVkIGZyb20gYSBzaW5nbGUgY29uc2lzdGVudAorICogc25hcHNob3Qgdmlh IENvbXB1dGVYaWRIb3Jpem9ucygpLiBUaGVzZSB2YWx1ZXMgYXJlIHVzZWQgdG8gYXZvaWQKKyAq IHVubmVjZXNzYXJ5IHdvcms6IGlmIHRoZSBnbG9iYWwgb2xkZXN0X3htaW4gaXMgaGVsZCBiYWNr IGJ5IHNvbWV0aGluZworICogb3RoZXIgdGhhbiBhIHJlcGxpY2F0aW9uIHNsb3QgKGUuZy4sIGEg bG9uZy1ydW5uaW5nIHRyYW5zYWN0aW9uKSwKKyAqIGludmFsaWRhdGluZyBzbG90cyB3b3VsZCBu b3QgYWR2YW5jZSB0aGUgaG9yaXpvbiBhbmQgaXMgdGhlcmVmb3JlCisgKiBza2lwcGVkLiBTaW1p bGFybHksIG5vIGFjdGlvbiBpcyB0YWtlbiBpZiB0aGUgY3VycmVudCBob3Jpem9ucyBoYXZlCisg KiBub3QgeWV0IGV4Y2VlZGVkIHRoZSB0aHJlc2hvbGQuCisgKgorICogUmV0dXJucyB0cnVlIGlm IGF0IGxlYXN0IG9uZSBzbG90IHdhcyBpbnZhbGlkYXRlZC4KKyAqLworYm9vbAorbWF5YmVfaW52 YWxpZGF0ZV94aWRfYWdlZF9zbG90cyhUcmFuc2FjdGlvbklkIG9sZGVzdF94bWluLAorCQkJCQkJ CQlUcmFuc2FjdGlvbklkIG9sZGVzdF9zbG90X3htaW4sCisJCQkJCQkJCVRyYW5zYWN0aW9uSWQg b2xkZXN0X3Nsb3RfY2F0YWxvZ194bWluKQoreworCVRyYW5zYWN0aW9uSWQgeGlkX2xpbWl0Owor CWJvb2wJCXNsb3RfaG9sZHNfb2xkZXN0X3htaW47CisKKwlpZiAobWF4X3Nsb3RfeGlkX2FnZSA9 PSAwKQorCQlyZXR1cm4gZmFsc2U7CisKKwlBc3NlcnQoVHJhbnNhY3Rpb25JZElzTm9ybWFsKG9s ZGVzdF94bWluKSk7CisKKwkvKgorCSAqIENoZWNrIGlmIGEgcmVwbGljYXRpb24gc2xvdCdzIHht aW4gb3IgY2F0YWxvZ194bWluIGlzIHdoYXQncyBob2xkaW5nCisJICogYmFjayBvbGRlc3RfeG1p bi4gSWYgbm90LCBza2lwIHRoZSB1bm5lY2Vzc2FyeSB3b3JrLgorCSAqLworCXNsb3RfaG9sZHNf b2xkZXN0X3htaW4gPQorCQkoVHJhbnNhY3Rpb25JZElzVmFsaWQob2xkZXN0X3Nsb3RfeG1pbikg JiYKKwkJIFRyYW5zYWN0aW9uSWRFcXVhbHMob2xkZXN0X3htaW4sIG9sZGVzdF9zbG90X3htaW4p KSB8fAorCQkoVHJhbnNhY3Rpb25JZElzVmFsaWQob2xkZXN0X3Nsb3RfY2F0YWxvZ194bWluKSAm JgorCQkgVHJhbnNhY3Rpb25JZEVxdWFscyhvbGRlc3RfeG1pbiwgb2xkZXN0X3Nsb3RfY2F0YWxv Z194bWluKSk7CisKKwlpZiAoIXNsb3RfaG9sZHNfb2xkZXN0X3htaW4pCisJCXJldHVybiBmYWxz ZTsKKworCXhpZF9saW1pdCA9IFRyYW5zYWN0aW9uSWRSZXRyZWF0ZWRCeShSZWFkTmV4dFRyYW5z YWN0aW9uSWQoKSwKKwkJCQkJCQkJCQkgbWF4X3Nsb3RfeGlkX2FnZSk7CisKKwkvKgorCSAqIEEg cmVwbGljYXRpb24gc2xvdCBpcyBob2xkaW5nIGJhY2sgb2xkZXN0X3htaW4uIFdlIGludmFsaWRh dGUgc2xvdHMKKwkgKiB0aGF0IGhhdmUgZXhjZWVkZWQgdGhlIFhJRCBhZ2UgbGltaXQuCisJICoK KwkgKiBOb3RlIHRoYXQgd2hpbGUgYSBub24tY2F0YWxvZyB2YWN1dW0gaXMgdGVjaG5pY2FsbHkg b25seSBibG9ja2VkIGJ5CisJICogcGh5c2ljYWwgc2xvdHMnIHhtaW4gdmFsdWVzLCB3ZSBpbnZh bGlkYXRlIGxvZ2ljYWwgc2xvdHMgdG9vIHRoYXQKKwkgKiBleGNlZWQgdGhlIFhJRCBhZ2UgbGlt aXQgaWYgd2UgdHJpZ2dlciB0aGUgWElELWFnZSBiYXNlZCBzbG90CisJICogaW52YWxpZGF0aW9u LiBPbmUgbWlnaHQgdGhpbmsgdGhhdCB0aGlzIGlzIHVubmVjZXNzYXJ5IGZvciBub24tY2F0YWxv ZworCSAqIHRhYmxlcyBhcyBpbnZhbGlkYXRpbmcgbG9naWNhbCBzbG90cyB3aGlsZSB2YWN1dW1p bmcgYSBub24tY2F0YWxvZworCSAqIHRhYmxlIGRvZXNuJ3QgaGVscCBhZHZhbmNlIHZhY3V1bSBj dXRvZmZzLiBCdXQgcGVyZm9ybWluZyBpbnZhbGlkYXRpb24KKwkgKiB0cmlhbHMgZm9yIHBoeXNp Y2FsIGFuZCBsb2dpY2FsIHNsb3RzIHdvdWxkIGFkZCBjb21wbGV4aXR5LgorCSAqCisJICogSW4g cHJhY3RpY2UsIFhJRC1hZ2UtYmFzZWQgaW52YWxpZGF0aW9uIGlzIGxpZ2h0d2VpZ2h0IChlLmcu LCBpdCBkb2VzCisJICogbm90IHJlcXVpcmUgcHJvY2VzcyB0ZXJtaW5hdGlvbikuIFRoaXMgdW5p ZmllZCBhcHByb2FjaCBrZWVwcyB0aGUgQVBJCisJICogc2ltcGxlIGJ5IGF2b2lkaW5nIHRoZSBu ZWVkIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gY2F0YWxvZyBhbmQKKwkgKiBub24tY2F0YWxvZyB0 YWJsZXMgaGVyZS4KKwkgKgorCSAqIE5vdGU6IEludmFsaWRhdGluZyBhIHNsb3QgZG9lcyBub3Qg Z3VhcmFudGVlIHRoYXQgdGhlIG9sZGVzdCB4bWluIHdpbGwKKwkgKiBhZHZhbmNlLiBEdWUgdG8g YSByYWNlIGNvbmRpdGlvbiwgYSBsb25nLXJ1bm5pbmcgdHJhbnNhY3Rpb24gbWlnaHQgYmUKKwkg KiBob2xkaW5nIHRoZSBzYW1lIHhtaW4gYXMgdGhlIHNsb3QuIEluIHN1Y2ggY2FzZXMsIHRoZSBz bG90IGlzCisJICogaW52YWxpZGF0ZWQsIGJ1dCB0aGUgZ2xvYmFsIGhvcml6b24gcmVtYWlucyB1 bmNoYW5nZWQuCisJICovCisJaWYgKFRyYW5zYWN0aW9uSWRQcmVjZWRlcyhvbGRlc3RfeG1pbiwg eGlkX2xpbWl0KSkKKwkJcmV0dXJuIEludmFsaWRhdGVPYnNvbGV0ZVJlcGxpY2F0aW9uU2xvdHMo UlNfSU5WQUxfWElEX0FHRSwKKwkJCQkJCQkJCQkJCSAgMCwgSW52YWxpZE9pZCwKKwkJCQkJCQkJ CQkJCSAgSW52YWxpZFRyYW5zYWN0aW9uSWQsCisJCQkJCQkJCQkJCQkgIHhpZF9saW1pdCk7CisK KwlyZXR1cm4gZmFsc2U7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9z bG90LmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9zbG90LmMKaW5kZXggYTkwOTJmYzIzODIu LjgzM2VkMTk2MTI4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9zbG90LmMK KysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vc2xvdC5jCkBAIC0xMTcsNiArMTE3LDcgQEAg c3RhdGljIGNvbnN0IFNsb3RJbnZhbGlkYXRpb25DYXVzZU1hcCBTbG90SW52YWxpZGF0aW9uQ2F1 c2VzW10gPSB7CiAJe1JTX0lOVkFMX0hPUklaT04sICJyb3dzX3JlbW92ZWQifSwKIAl7UlNfSU5W QUxfV0FMX0xFVkVMLCAid2FsX2xldmVsX2luc3VmZmljaWVudCJ9LAogCXtSU19JTlZBTF9JRExF X1RJTUVPVVQsICJpZGxlX3RpbWVvdXQifSwKKwl7UlNfSU5WQUxfWElEX0FHRSwgInhpZF9hZ2Vk In0sCiB9OwogCiAvKgpAQCAtMTU4LDYgKzE1OSwxMiBAQCBpbnQJCQltYXhfcmVwbGljYXRpb25f c2xvdHMgPSAxMDsgLyogdGhlIG1heGltdW0gbnVtYmVyIG9mIHJlcGxpY2F0aW9uCiAgKi8KIGlu dAkJCWlkbGVfcmVwbGljYXRpb25fc2xvdF90aW1lb3V0X3NlY3MgPSAwOwogCisvKgorICogSW52 YWxpZGF0ZSByZXBsaWNhdGlvbiBzbG90cyB0aGF0IGhhdmUgeG1pbiBvciBjYXRhbG9nX3htaW4g b2xkZXIKKyAqIHRoYW4gdGhlIHNwZWNpZmllZCBhZ2U7ICcwJyBkaXNhYmxlcyBpdC4KKyAqLwor aW50CQkJbWF4X3Nsb3RfeGlkX2FnZSA9IDA7CisKIC8qCiAgKiBUaGlzIEdVQyBsaXN0cyBzdHJl YW1pbmcgcmVwbGljYXRpb24gc3RhbmRieSBzZXJ2ZXIgc2xvdCBuYW1lcyB0aGF0CiAgKiBsb2dp Y2FsIFdBTCBzZW5kZXIgcHJvY2Vzc2VzIHdpbGwgd2FpdCBmb3IuCkBAIC0xNzgwLDcgKzE3ODcs MTAgQEAgUmVwb3J0U2xvdEludmFsaWRhdGlvbihSZXBsaWNhdGlvblNsb3RJbnZhbGlkYXRpb25D YXVzZSBjYXVzZSwKIAkJCQkJICAgWExvZ1JlY1B0ciByZXN0YXJ0X2xzbiwKIAkJCQkJICAgWExv Z1JlY1B0ciBvbGRlc3RMU04sCiAJCQkJCSAgIFRyYW5zYWN0aW9uSWQgc25hcHNob3RDb25mbGlj dEhvcml6b24sCi0JCQkJCSAgIGxvbmcgc2xvdF9pZGxlX3NlY29uZHMpCisJCQkJCSAgIGxvbmcg c2xvdF9pZGxlX3NlY29uZHMsCisJCQkJCSAgIFRyYW5zYWN0aW9uSWQgeG1pbiwKKwkJCQkJICAg VHJhbnNhY3Rpb25JZCBjYXRhbG9nX3htaW4sCisJCQkJCSAgIFRyYW5zYWN0aW9uSWQgeGlkTGlt aXQpCiB7CiAJU3RyaW5nSW5mb0RhdGEgZXJyX2RldGFpbDsKIAlTdHJpbmdJbmZvRGF0YSBlcnJf aGludDsKQEAgLTE4MjUsNiArMTgzNSwyOSBAQCBSZXBvcnRTbG90SW52YWxpZGF0aW9uKFJlcGxp Y2F0aW9uU2xvdEludmFsaWRhdGlvbkNhdXNlIGNhdXNlLAogCQkJCQkJCQkgImlkbGVfcmVwbGlj YXRpb25fc2xvdF90aW1lb3V0Iik7CiAJCQkJYnJlYWs7CiAJCQl9CisKKwkJY2FzZSBSU19JTlZB TF9YSURfQUdFOgorCQkJeworCQkJCVRyYW5zYWN0aW9uSWQgc2xvdF94aWQgPSBUcmFuc2FjdGlv bklkSXNWYWxpZCh4bWluKSA/IHhtaW4gOiBjYXRhbG9nX3htaW47CisJCQkJaW50MzIJCWV4Y2Vl ZGVkX2J5ID0gKGludDMyKSAoeGlkTGltaXQgLSBzbG90X3hpZCk7CisJCQkJaW50MzIJCXNsb3Rf YWdlID0gKGludDMyKSBtYXhfc2xvdF94aWRfYWdlICsgZXhjZWVkZWRfYnk7CisKKwkJCQkvKiBF aXRoZXIgdGhlIHNsb3QncyB4bWluIG9yIGNhdGFsb2dfeG1pbiBtdXN0IGJlIHZhbGlkICovCisJ CQkJQXNzZXJ0KFRyYW5zYWN0aW9uSWRJc1ZhbGlkKHNsb3RfeGlkKSk7CisKKwkJCQkvKiB0cmFu c2xhdG9yOiAlcyBpcyBhIEdVQyB2YXJpYWJsZSBuYW1lICovCisJCQkJYXBwZW5kU3RyaW5nSW5m bygmZXJyX2RldGFpbCwKKwkJCQkJCQkJIFRyYW5zYWN0aW9uSWRJc1ZhbGlkKHhtaW4pCisJCQkJ CQkJCSA/IF8oIlRoZSBzbG90J3MgeG1pbiBhZ2Ugb2YgJWQgZXhjZWVkcyB0aGUgY29uZmlndXJl ZCBcIiVzXCIgb2YgJWQgYnkgJWQgdHJhbnNhY3Rpb25zIikKKwkJCQkJCQkJIDogXygiVGhlIHNs b3QncyBjYXRhbG9nIHhtaW4gYWdlIG9mICVkIGV4Y2VlZHMgdGhlIGNvbmZpZ3VyZWQgXCIlc1wi IG9mICVkIGJ5ICVkIHRyYW5zYWN0aW9ucyIpLAorCQkJCQkJCQkgc2xvdF9hZ2UsICJtYXhfc2xv dF94aWRfYWdlIiwgbWF4X3Nsb3RfeGlkX2FnZSwgZXhjZWVkZWRfYnkpOworCisJCQkJLyogdHJh bnNsYXRvcjogJXMgaXMgYSBHVUMgdmFyaWFibGUgbmFtZSAqLworCQkJCWFwcGVuZFN0cmluZ0lu Zm8oJmVycl9oaW50LCBfKCJZb3UgbWlnaHQgbmVlZCB0byBpbmNyZWFzZSBcIiVzXCIuIiksCisJ CQkJCQkJCSAibWF4X3Nsb3RfeGlkX2FnZSIpOworCQkJCWJyZWFrOworCQkJfQorCiAJCWNhc2Ug UlNfSU5WQUxfTk9ORToKIAkJCXBnX3VucmVhY2hhYmxlKCk7CiAJfQpAQCAtMTg2Myw2ICsxODk2 LDI1IEBAIENhbkludmFsaWRhdGVJZGxlU2xvdChSZXBsaWNhdGlvblNsb3QgKnMpCiAJCQkhKFJl Y292ZXJ5SW5Qcm9ncmVzcygpICYmIHMtPmRhdGEuc3luY2VkKSk7CiB9CiAKKy8qCisgKiBDYW4g d2UgaW52YWxpZGF0ZSBhbiBYSUQtYWdlZCByZXBsaWNhdGlvbiBzbG90PworICoKKyAqIFhJRC1h Z2VkIGJhc2VkIGludmFsaWRhdGlvbiBpcyBhbGxvd2VkIHRvIHRoZSBnaXZlbiBzbG90IHdoZW46 CisgKgorICogMS4gTWF4IFhJRC1hZ2UgaXMgc2V0CisgKiAyLiBTbG90IGhhcyB2YWxpZCB4bWlu IG9yIGNhdGFsb2dfeG1pbgorICogMy4gVGhlIHNsb3QgaXMgbm90IGJlaW5nIHN5bmNlZCBmcm9t IHRoZSBwcmltYXJ5IHdoaWxlIHRoZSBzZXJ2ZXIgaXMgaW4KKyAqCSAgcmVjb3ZlcnkuCisgKi8K K3N0YXRpYyBpbmxpbmUgYm9vbAorQ2FuSW52YWxpZGF0ZVhpZEFnZWRTbG90KFJlcGxpY2F0aW9u U2xvdCAqcykKK3sKKwlyZXR1cm4gKG1heF9zbG90X3hpZF9hZ2UgIT0gMCAmJgorCQkJKFRyYW5z YWN0aW9uSWRJc1ZhbGlkKHMtPmRhdGEueG1pbikgfHwKKwkJCSBUcmFuc2FjdGlvbklkSXNWYWxp ZChzLT5kYXRhLmNhdGFsb2dfeG1pbikpICYmCisJCQkhKFJlY292ZXJ5SW5Qcm9ncmVzcygpICYm IHMtPmRhdGEuc3luY2VkKSk7Cit9CisKIC8qCiAgKiBEZXRlcm1pbmVTbG90SW52YWxpZGF0aW9u Q2F1c2UgLSBEZXRlcm1pbmUgdGhlIGNhdXNlIGZvciB3aGljaCBhIHNsb3QKICAqIGJlY29tZXMg aW52YWxpZCBhbW9uZyB0aGUgZ2l2ZW4gcG9zc2libGUgY2F1c2VzLgpAQCAtMTg3NCw2ICsxOTI2 LDcgQEAgc3RhdGljIFJlcGxpY2F0aW9uU2xvdEludmFsaWRhdGlvbkNhdXNlCiBEZXRlcm1pbmVT bG90SW52YWxpZGF0aW9uQ2F1c2UodWludDMyIHBvc3NpYmxlX2NhdXNlcywgUmVwbGljYXRpb25T bG90ICpzLAogCQkJCQkJCSAgIFhMb2dSZWNQdHIgb2xkZXN0TFNOLCBPaWQgZGJvaWQsCiAJCQkJ CQkJICAgVHJhbnNhY3Rpb25JZCBzbmFwc2hvdENvbmZsaWN0SG9yaXpvbiwKKwkJCQkJCQkgICBU cmFuc2FjdGlvbklkIHhpZExpbWl0LAogCQkJCQkJCSAgIFRpbWVzdGFtcFR6ICppbmFjdGl2ZV9z aW5jZSwgVGltZXN0YW1wVHogbm93KQogewogCUFzc2VydChwb3NzaWJsZV9jYXVzZXMgIT0gUlNf SU5WQUxfTk9ORSk7CkBAIC0xOTQ1LDYgKzE5OTgsMTggQEAgRGV0ZXJtaW5lU2xvdEludmFsaWRh dGlvbkNhdXNlKHVpbnQzMiBwb3NzaWJsZV9jYXVzZXMsIFJlcGxpY2F0aW9uU2xvdCAqcywKIAkJ fQogCX0KIAorCS8qIENoZWNrIGlmIHRoZSBzbG90IG5lZWRzIHRvIGJlIGludmFsaWRhdGVkIGR1 ZSB0byBtYXhfc2xvdF94aWRfYWdlIEdVQyAqLworCWlmICgocG9zc2libGVfY2F1c2VzICYgUlNf SU5WQUxfWElEX0FHRSkgJiYgQ2FuSW52YWxpZGF0ZVhpZEFnZWRTbG90KHMpKQorCXsKKwkJQXNz ZXJ0KFRyYW5zYWN0aW9uSWRJc1ZhbGlkKHhpZExpbWl0KSk7CisKKwkJaWYgKChUcmFuc2FjdGlv bklkSXNWYWxpZChzLT5kYXRhLnhtaW4pICYmCisJCQkgVHJhbnNhY3Rpb25JZFByZWNlZGVzKHMt PmRhdGEueG1pbiwgeGlkTGltaXQpKSB8fAorCQkJKFRyYW5zYWN0aW9uSWRJc1ZhbGlkKHMtPmRh dGEuY2F0YWxvZ194bWluKSAmJgorCQkJIFRyYW5zYWN0aW9uSWRQcmVjZWRlcyhzLT5kYXRhLmNh dGFsb2dfeG1pbiwgeGlkTGltaXQpKSkKKwkJCXJldHVybiBSU19JTlZBTF9YSURfQUdFOworCX0K KwogCXJldHVybiBSU19JTlZBTF9OT05FOwogfQogCkBAIC0xOTY3LDYgKzIwMzIsNyBAQCBJbnZh bGlkYXRlUG9zc2libHlPYnNvbGV0ZVNsb3QodWludDMyIHBvc3NpYmxlX2NhdXNlcywKIAkJCQkJ CQkgICBSZXBsaWNhdGlvblNsb3QgKnMsCiAJCQkJCQkJICAgWExvZ1JlY1B0ciBvbGRlc3RMU04s CiAJCQkJCQkJICAgT2lkIGRib2lkLCBUcmFuc2FjdGlvbklkIHNuYXBzaG90Q29uZmxpY3RIb3Jp em9uLAorCQkJCQkJCSAgIFRyYW5zYWN0aW9uSWQgeGlkTGltaXQsCiAJCQkJCQkJICAgYm9vbCAq cmVsZWFzZWRfbG9ja19vdXQpCiB7CiAJaW50CQkJbGFzdF9zaWduYWxlZF9waWQgPSAwOwpAQCAt MjAxOSw2ICsyMDg1LDcgQEAgSW52YWxpZGF0ZVBvc3NpYmx5T2Jzb2xldGVTbG90KHVpbnQzMiBw b3NzaWJsZV9jYXVzZXMsCiAJCQkJCQkJCQkJCQkJCQkJcywgb2xkZXN0TFNOLAogCQkJCQkJCQkJ CQkJCQkJCWRib2lkLAogCQkJCQkJCQkJCQkJCQkJCXNuYXBzaG90Q29uZmxpY3RIb3Jpem9uLAor CQkJCQkJCQkJCQkJCQkJCXhpZExpbWl0LAogCQkJCQkJCQkJCQkJCQkJCSZpbmFjdGl2ZV9zaW5j ZSwKIAkJCQkJCQkJCQkJCQkJCQlub3cpOwogCkBAIC0yMTEyLDcgKzIxNzksOCBAQCBJbnZhbGlk YXRlUG9zc2libHlPYnNvbGV0ZVNsb3QodWludDMyIHBvc3NpYmxlX2NhdXNlcywKIAkJCQlSZXBv cnRTbG90SW52YWxpZGF0aW9uKGludmFsaWRhdGlvbl9jYXVzZSwgdHJ1ZSwgYWN0aXZlX3BpZCwK IAkJCQkJCQkJCSAgIHNsb3RuYW1lLCByZXN0YXJ0X2xzbiwKIAkJCQkJCQkJCSAgIG9sZGVzdExT Tiwgc25hcHNob3RDb25mbGljdEhvcml6b24sCi0JCQkJCQkJCQkgICBzbG90X2lkbGVfc2Vjcyk7 CisJCQkJCQkJCQkgICBzbG90X2lkbGVfc2Vjcywgcy0+ZGF0YS54bWluLAorCQkJCQkJCQkJICAg cy0+ZGF0YS5jYXRhbG9nX3htaW4sIHhpZExpbWl0KTsKIAogCQkJCWlmIChNeUJhY2tlbmRUeXBl ID09IEJfU1RBUlRVUCkKIAkJCQkJKHZvaWQpIFNpZ25hbFJlY292ZXJ5Q29uZmxpY3QoR2V0UEdQ cm9jQnlOdW1iZXIoYWN0aXZlX3Byb2MpLApAQCAtMjE2NSw3ICsyMjMzLDggQEAgSW52YWxpZGF0 ZVBvc3NpYmx5T2Jzb2xldGVTbG90KHVpbnQzMiBwb3NzaWJsZV9jYXVzZXMsCiAJCQlSZXBvcnRT bG90SW52YWxpZGF0aW9uKGludmFsaWRhdGlvbl9jYXVzZSwgZmFsc2UsIGFjdGl2ZV9waWQsCiAJ CQkJCQkJCSAgIHNsb3RuYW1lLCByZXN0YXJ0X2xzbiwKIAkJCQkJCQkJICAgb2xkZXN0TFNOLCBz bmFwc2hvdENvbmZsaWN0SG9yaXpvbiwKLQkJCQkJCQkJICAgc2xvdF9pZGxlX3NlY3MpOworCQkJ CQkJCQkgICBzbG90X2lkbGVfc2Vjcywgcy0+ZGF0YS54bWluLAorCQkJCQkJCQkgICBzLT5kYXRh LmNhdGFsb2dfeG1pbiwgeGlkTGltaXQpOwogCiAJCQkvKiBkb25lIHdpdGggdGhpcyBzbG90IGZv ciBub3cgKi8KIAkJCWJyZWFrOwpAQCAtMjE5Miw2ICsyMjYxLDggQEAgSW52YWxpZGF0ZVBvc3Np Ymx5T2Jzb2xldGVTbG90KHVpbnQzMiBwb3NzaWJsZV9jYXVzZXMsCiAgKiAgIGxvZ2ljYWwuCiAg KiAtIFJTX0lOVkFMX0lETEVfVElNRU9VVDogaGFzIGJlZW4gaWRsZSBsb25nZXIgdGhhbiB0aGUg Y29uZmlndXJlZAogICogICAiaWRsZV9yZXBsaWNhdGlvbl9zbG90X3RpbWVvdXQiIGR1cmF0aW9u LgorICogLSBSU19JTlZBTF9YSURfQUdFOiBzbG90IHhpZCBhZ2UgaXMgb2xkZXIgdGhhbiB0aGUg Y29uZmlndXJlZAorICogICAibWF4X3Nsb3RfeGlkX2FnZSIgYWdlLgogICoKICAqIE5vdGU6IFRo aXMgZnVuY3Rpb24gYXR0ZW1wdHMgdG8gaW52YWxpZGF0ZSB0aGUgc2xvdCBmb3IgbXVsdGlwbGUg cG9zc2libGUKICAqIGNhdXNlcyBpbiBhIHNpbmdsZSBwYXNzLCBtaW5pbWl6aW5nIHJlZHVuZGFu dCBpdGVyYXRpb25zLiBUaGUgImNhdXNlIgpAQCAtMjIwNSw3ICsyMjc2LDggQEAgSW52YWxpZGF0 ZVBvc3NpYmx5T2Jzb2xldGVTbG90KHVpbnQzMiBwb3NzaWJsZV9jYXVzZXMsCiBib29sCiBJbnZh bGlkYXRlT2Jzb2xldGVSZXBsaWNhdGlvblNsb3RzKHVpbnQzMiBwb3NzaWJsZV9jYXVzZXMsCiAJ CQkJCQkJCSAgIFhMb2dTZWdObyBvbGRlc3RTZWdubywgT2lkIGRib2lkLAotCQkJCQkJCQkgICBU cmFuc2FjdGlvbklkIHNuYXBzaG90Q29uZmxpY3RIb3Jpem9uKQorCQkJCQkJCQkgICBUcmFuc2Fj dGlvbklkIHNuYXBzaG90Q29uZmxpY3RIb3Jpem9uLAorCQkJCQkJCQkgICBUcmFuc2FjdGlvbklk IHhpZExpbWl0KQogewogCVhMb2dSZWNQdHIJb2xkZXN0TFNOOwogCWJvb2wJCWludmFsaWRhdGVk ID0gZmFsc2U7CkBAIC0yMjQ0LDcgKzIzMTYsNyBAQCByZXN0YXJ0OgogCiAJCWlmIChJbnZhbGlk YXRlUG9zc2libHlPYnNvbGV0ZVNsb3QocG9zc2libGVfY2F1c2VzLCBzLCBvbGRlc3RMU04sCiAJ CQkJCQkJCQkJICAgZGJvaWQsIHNuYXBzaG90Q29uZmxpY3RIb3Jpem9uLAotCQkJCQkJCQkJCSAg ICZyZWxlYXNlZF9sb2NrKSkKKwkJCQkJCQkJCQkgICB4aWRMaW1pdCwgJnJlbGVhc2VkX2xvY2sp KQogCQl7CiAJCQlBc3NlcnQocmVsZWFzZWRfbG9jayk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3N0b3JhZ2UvaXBjL3Byb2NhcnJheS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJv Y2FycmF5LmMKaW5kZXggY2MyMDdjYjU2ZTMuLjg5OGVmNGEwODMzIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jYXJyYXkuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdl L2lwYy9wcm9jYXJyYXkuYwpAQCAtMTkzNyw2ICsxOTM3LDMxIEBAIEdsb2JhbFZpc0hvcml6b25L aW5kRm9yUmVsKFJlbGF0aW9uIHJlbCkKIAkJcmV0dXJuIFZJU0hPUklaT05fVEVNUDsKIH0KIAor LyoKKyAqIEEgaGVscGVyIGZ1bmN0aW9uIHRvIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgb2xkZXN0 IG5vbi1yZW1vdmFibGUKKyAqIFRyYW5zYWN0aW9uSWQgZnJvbSB0aGUgcHJlLWNvbXB1dGVkIGhv cml6b25zLCBiYXNlZCBvbiB0aGUgcmVsYXRpb24KKyAqIHR5cGUuCisgKi8KK3N0YXRpYyBwZ19h dHRyaWJ1dGVfYWx3YXlzX2lubGluZSBUcmFuc2FjdGlvbklkCitHZXRPbGRlc3ROb25SZW1vdmFi bGVUcmFuc2FjdGlvbklkRnJvbUhvcml6b25zKENvbXB1dGVYaWRIb3Jpem9uc1Jlc3VsdCAqaG9y aXpvbnMsCisJCQkJCQkJCQkJCSAgIFJlbGF0aW9uIHJlbCkKK3sKKwlzd2l0Y2ggKEdsb2JhbFZp c0hvcml6b25LaW5kRm9yUmVsKHJlbCkpCisJeworCQljYXNlIFZJU0hPUklaT05fU0hBUkVEOgor CQkJcmV0dXJuIGhvcml6b25zLT5zaGFyZWRfb2xkZXN0X25vbnJlbW92YWJsZTsKKwkJY2FzZSBW SVNIT1JJWk9OX0NBVEFMT0c6CisJCQlyZXR1cm4gaG9yaXpvbnMtPmNhdGFsb2dfb2xkZXN0X25v bnJlbW92YWJsZTsKKwkJY2FzZSBWSVNIT1JJWk9OX0RBVEE6CisJCQlyZXR1cm4gaG9yaXpvbnMt PmRhdGFfb2xkZXN0X25vbnJlbW92YWJsZTsKKwkJY2FzZSBWSVNIT1JJWk9OX1RFTVA6CisJCQly ZXR1cm4gaG9yaXpvbnMtPnRlbXBfb2xkZXN0X25vbnJlbW92YWJsZTsKKwl9CisKKwkvKiBqdXN0 IHRvIHByZXZlbnQgY29tcGlsZXIgd2FybmluZ3MgKi8KKwlyZXR1cm4gSW52YWxpZFRyYW5zYWN0 aW9uSWQ7Cit9CisKIC8qCiAgKiBSZXR1cm4gdGhlIG9sZGVzdCBYSUQgZm9yIHdoaWNoIGRlbGV0 ZWQgdHVwbGVzIG11c3QgYmUgcHJlc2VydmVkIGluIHRoZQogICogcGFzc2VkIHRhYmxlLgpAQCAt MTk1NSwyMCArMTk4MCwzMCBAQCBHZXRPbGRlc3ROb25SZW1vdmFibGVUcmFuc2FjdGlvbklkKFJl bGF0aW9uIHJlbCkKIAogCUNvbXB1dGVYaWRIb3Jpem9ucygmaG9yaXpvbnMpOwogCi0Jc3dpdGNo IChHbG9iYWxWaXNIb3Jpem9uS2luZEZvclJlbChyZWwpKQotCXsKLQkJY2FzZSBWSVNIT1JJWk9O X1NIQVJFRDoKLQkJCXJldHVybiBob3Jpem9ucy5zaGFyZWRfb2xkZXN0X25vbnJlbW92YWJsZTsK LQkJY2FzZSBWSVNIT1JJWk9OX0NBVEFMT0c6Ci0JCQlyZXR1cm4gaG9yaXpvbnMuY2F0YWxvZ19v bGRlc3Rfbm9ucmVtb3ZhYmxlOwotCQljYXNlIFZJU0hPUklaT05fREFUQToKLQkJCXJldHVybiBo b3Jpem9ucy5kYXRhX29sZGVzdF9ub25yZW1vdmFibGU7Ci0JCWNhc2UgVklTSE9SSVpPTl9URU1Q OgotCQkJcmV0dXJuIGhvcml6b25zLnRlbXBfb2xkZXN0X25vbnJlbW92YWJsZTsKLQl9CisJcmV0 dXJuIEdldE9sZGVzdE5vblJlbW92YWJsZVRyYW5zYWN0aW9uSWRGcm9tSG9yaXpvbnMoJmhvcml6 b25zLCByZWwpOworfQogCi0JLyoganVzdCB0byBwcmV2ZW50IGNvbXBpbGVyIHdhcm5pbmdzICov Ci0JcmV0dXJuIEludmFsaWRUcmFuc2FjdGlvbklkOworLyoKKyAqIFNhbWUgYXMgR2V0T2xkZXN0 Tm9uUmVtb3ZhYmxlVHJhbnNhY3Rpb25JZCgpLCBidXQgYWxzbyByZXR1cm5zIHRoZQorICogcmVw bGljYXRpb24gc2xvdCB4bWluIGFuZCBjYXRhbG9nX3htaW4gZnJvbSB0aGUgc2FtZSBDb21wdXRl WGlkSG9yaXpvbnMoKQorICogY2FsbC4gIFRoaXMgYXZvaWRzIGEgc2VwYXJhdGUgUHJvY0FycmF5 TG9jayBhY3F1aXNpdGlvbiB3aGVuIHRoZSBjYWxsZXIKKyAqIG5lZWRzIGJvdGggdmFsdWVzLgor ICovCitUcmFuc2FjdGlvbklkCitHZXRPbGRlc3ROb25SZW1vdmFibGVUcmFuc2FjdGlvbklkV2l0 aFNsb3RYaWRzKFJlbGF0aW9uIHJlbCwKKwkJCQkJCQkJCQkJICAgVHJhbnNhY3Rpb25JZCAqc2xv dF94bWluLAorCQkJCQkJCQkJCQkgICBUcmFuc2FjdGlvbklkICpzbG90X2NhdGFsb2dfeG1pbikK K3sKKwlDb21wdXRlWGlkSG9yaXpvbnNSZXN1bHQgaG9yaXpvbnM7CisKKwlDb21wdXRlWGlkSG9y aXpvbnMoJmhvcml6b25zKTsKKworCWlmIChzbG90X3htaW4pCisJCSpzbG90X3htaW4gPSBob3Jp em9ucy5zbG90X3htaW47CisJaWYgKHNsb3RfY2F0YWxvZ194bWluKQorCQkqc2xvdF9jYXRhbG9n X3htaW4gPSBob3Jpem9ucy5zbG90X2NhdGFsb2dfeG1pbjsKKworCXJldHVybiBHZXRPbGRlc3RO b25SZW1vdmFibGVUcmFuc2FjdGlvbklkRnJvbUhvcml6b25zKCZob3Jpem9ucywgcmVsKTsKIH0K IAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3N0YW5kYnkuYyBiL3Ny Yy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3N0YW5kYnkuYwppbmRleCBkZTkwOTJmZGY1Yi4uZDYwZjM5 ZWMwOGUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3N0YW5kYnkuYworKysg Yi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zdGFuZGJ5LmMKQEAgLTUwNCw3ICs1MDQsOCBAQCBS ZXNvbHZlUmVjb3ZlcnlDb25mbGljdFdpdGhTbmFwc2hvdChUcmFuc2FjdGlvbklkIHNuYXBzaG90 Q29uZmxpY3RIb3Jpem9uLAogCSAqLwogCWlmIChJc0xvZ2ljYWxEZWNvZGluZ0VuYWJsZWQoKSAm JiBpc0NhdGFsb2dSZWwpCiAJCUludmFsaWRhdGVPYnNvbGV0ZVJlcGxpY2F0aW9uU2xvdHMoUlNf SU5WQUxfSE9SSVpPTiwgMCwgbG9jYXRvci5kYk9pZCwKLQkJCQkJCQkJCQkgICBzbmFwc2hvdENv bmZsaWN0SG9yaXpvbik7CisJCQkJCQkJCQkJICAgc25hcHNob3RDb25mbGljdEhvcml6b24sCisJ CQkJCQkJCQkJICAgSW52YWxpZFRyYW5zYWN0aW9uSWQpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQgYi9zcmMvYmFja2VuZC91 dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdAppbmRleCBhMzE1YzRhYjhhYi4uNWE0MzhkZjkz ZDAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0 CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0CkBAIC0yMDkw LDYgKzIwOTAsMTQgQEAKICAgbWF4ID0+ICdNQVhfS0lMT0JZVEVTJywKIH0sCiAKK3sgbmFtZSA9 PiAnbWF4X3Nsb3RfeGlkX2FnZScsIHR5cGUgPT4gJ2ludCcsIGNvbnRleHQgPT4gJ1BHQ19TSUdI VVAnLCBncm91cCA9PiAnUkVQTElDQVRJT05fU0VORElORycsCisgIHNob3J0X2Rlc2MgPT4gJ0Fn ZSBvZiB0aGUgdHJhbnNhY3Rpb24gSUQgYXQgd2hpY2ggYSByZXBsaWNhdGlvbiBzbG90IGdldHMg aW52YWxpZGF0ZWQuJywKKyAgdmFyaWFibGUgPT4gJ21heF9zbG90X3hpZF9hZ2UnLAorICBib290 X3ZhbCA9PiAnMCcsCisgIG1pbiA9PiAnMCcsCisgIG1heCA9PiAnMjEwMDAwMDAwMCcsCit9LAor CiAjIFdlIHVzZSB0aGUgaG9wZWZ1bGx5LXNhZmVseS1zbWFsbCB2YWx1ZSBvZiAxMDBrQiBhcyB0 aGUgY29tcGlsZWQtaW4KICMgZGVmYXVsdCBmb3IgbWF4X3N0YWNrX2RlcHRoLiAgSW5pdGlhbGl6 ZUdVQ09wdGlvbnMgd2lsbCBpbmNyZWFzZSBpdAogIyBpZiBwb3NzaWJsZSwgZGVwZW5kaW5nIG9u IHRoZSBhY3R1YWwgcGxhdGZvcm0tc3BlY2lmaWMgc3RhY2sgbGltaXQuCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUgYi9zcmMvYmFja2Vu ZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKaW5kZXggNmQwMzM3ODUzZTAuLjE4 MTczMzA0ODRkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwu Y29uZi5zYW1wbGUKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYu c2FtcGxlCkBAIC0zNTEsNiArMzUxLDggQEAKICN3YWxfa2VlcF9zaXplID0gMCAgICAgICAgICAg ICAgIyBpbiBtZWdhYnl0ZXM7IDAgZGlzYWJsZXMKICNtYXhfc2xvdF93YWxfa2VlcF9zaXplID0g LTEgICAgIyBpbiBtZWdhYnl0ZXM7IC0xIGRpc2FibGVzCiAjaWRsZV9yZXBsaWNhdGlvbl9zbG90 X3RpbWVvdXQgPSAwICAgICAgIyBpbiBzZWNvbmRzOyAwIGRpc2FibGVzCisjbWF4X3Nsb3RfeGlk X2FnZSA9IDAgICAgICAgICAgICMgbWF4aW11bSBYSUQgYWdlIGJlZm9yZSBhIHJlcGxpY2F0aW9u IHNsb3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBnZXRzIGludmFsaWRhdGVk OyAwIGRpc2FibGVzCiAjd2FsX3NlbmRlcl90aW1lb3V0ID0gNjBzICAgICAgICMgaW4gbWlsbGlz ZWNvbmRzOyAwIGRpc2FibGVzCiAjdHJhY2tfY29tbWl0X3RpbWVzdGFtcCA9IG9mZiAgICMgY29s bGVjdCB0aW1lc3RhbXAgb2YgdHJhbnNhY3Rpb24gY29tbWl0CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICMgKGNoYW5nZSByZXF1aXJlcyByZXN0YXJ0KQpkaWZmIC0tZ2l0IGEvc3Jj L2Jpbi9wZ19iYXNlYmFja3VwL3BnX2NyZWF0ZXN1YnNjcmliZXIuYyBiL3NyYy9iaW4vcGdfYmFz ZWJhY2t1cC9wZ19jcmVhdGVzdWJzY3JpYmVyLmMKaW5kZXggMzc2MzFmNzAwYWYuLjllYmM3MWZj YWMyIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2Jhc2ViYWNrdXAvcGdfY3JlYXRlc3Vic2NyaWJl ci5jCisrKyBiL3NyYy9iaW4vcGdfYmFzZWJhY2t1cC9wZ19jcmVhdGVzdWJzY3JpYmVyLmMKQEAg LTE5MDEsNyArMTkwMSw3IEBAIHN0YXJ0X3N0YW5kYnlfc2VydmVyKGNvbnN0IHN0cnVjdCBDcmVh dGVTdWJzY3JpYmVyT3B0aW9ucyAqb3B0LCBib29sIHJlc3RyaWN0ZWRfCiAJYXBwZW5kUFFFeHBC dWZmZXJTdHIocGdfY3RsX2NtZCwgIiAtcyAtbyBcIi1jIHN5bmNfcmVwbGljYXRpb25fc2xvdHM9 b2ZmXCIiKTsKIAogCS8qIFByZXZlbnQgdW5pbnRlbmRlZCBzbG90IGludmFsaWRhdGlvbiAqLwot CWFwcGVuZFBRRXhwQnVmZmVyU3RyKHBnX2N0bF9jbWQsICIgLW8gXCItYyBpZGxlX3JlcGxpY2F0 aW9uX3Nsb3RfdGltZW91dD0wXCIiKTsKKwlhcHBlbmRQUUV4cEJ1ZmZlclN0cihwZ19jdGxfY21k LCAiIC1vIFwiLWMgaWRsZV9yZXBsaWNhdGlvbl9zbG90X3RpbWVvdXQ9MCAtYyBtYXhfc2xvdF94 aWRfYWdlPTBcIiIpOwogCiAJaWYgKHJlc3RyaWN0ZWRfYWNjZXNzKQogCXsKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL2NvbW1hbmRzL3ZhY3V1bS5oIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvdmFj dXVtLmgKaW5kZXggNWI4MDIzNjE2YzAuLmM0NzU1OGZjNmIzIDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9jb21tYW5kcy92YWN1dW0uaAorKysgYi9zcmMvaW5jbHVkZS9jb21tYW5kcy92YWN1dW0u aApAQCAtMjg3LDYgKzI4NywxMyBAQCBzdHJ1Y3QgVmFjdXVtQ3V0b2ZmcwogCSAqLwogCVRyYW5z YWN0aW9uSWQgRnJlZXplTGltaXQ7CiAJTXVsdGlYYWN0SWQgTXVsdGlYYWN0Q3V0b2ZmOworCisJ LyoKKwkgKiBPbGRlc3QgeG1pbiBhbmQgY2F0YWxvZyB4bWluIG9mIGFueSByZXBsaWNhdGlvbiBz bG90IG9idGFpbmVkIGZyb20gdGhlCisJICogc2FtZSBDb21wdXRlWGlkSG9yaXpvbnMoKSBjYWxs IHRoYXQgY29tcHV0ZWQgT2xkZXN0WG1pbi4KKwkgKi8KKwlUcmFuc2FjdGlvbklkIE9sZGVzdFNs b3RYbWluOworCVRyYW5zYWN0aW9uSWQgT2xkZXN0U2xvdENhdGFsb2dYbWluOwogfTsKIAogLyoK QEAgLTM5OSw2ICs0MDYsOSBAQCBleHRlcm4gSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICp2YWNfYnVs a2RlbF9vbmVfaW5kZXgoSW5kZXhWYWN1dW1JbmZvICppdmluZm8sCiAJCQkJCQkJCQkJCQkJVmFj RGVhZEl0ZW1zSW5mbyAqZGVhZF9pdGVtc19pbmZvKTsKIGV4dGVybiBJbmRleEJ1bGtEZWxldGVS ZXN1bHQgKnZhY19jbGVhbnVwX29uZV9pbmRleChJbmRleFZhY3V1bUluZm8gKml2aW5mbywKIAkJ CQkJCQkJCQkJCQlJbmRleEJ1bGtEZWxldGVSZXN1bHQgKmlzdGF0KTsKK2V4dGVybiBib29sIG1h eWJlX2ludmFsaWRhdGVfeGlkX2FnZWRfc2xvdHMoVHJhbnNhY3Rpb25JZCBvbGRlc3RfeG1pbiwK KwkJCQkJCQkJCQkJVHJhbnNhY3Rpb25JZCBvbGRlc3Rfc2xvdF94bWluLAorCQkJCQkJCQkJCQlU cmFuc2FjdGlvbklkIG9sZGVzdF9zbG90X2NhdGFsb2dfeG1pbik7CiAKIC8qIEluIHBvc3RtYXN0 ZXIvYXV0b3ZhY3V1bS5jICovCiBleHRlcm4gdm9pZCBBdXRvVmFjdXVtVXBkYXRlQ29zdExpbWl0 KHZvaWQpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vc2xvdC5oIGIvc3Jj L2luY2x1ZGUvcmVwbGljYXRpb24vc2xvdC5oCmluZGV4IDRiNDcwOWY2ZTJjLi41MDQwZDUzMDcy YiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vc2xvdC5oCisrKyBiL3NyYy9p bmNsdWRlL3JlcGxpY2F0aW9uL3Nsb3QuaApAQCAtNjYsMTAgKzY2LDEyIEBAIHR5cGVkZWYgZW51 bSBSZXBsaWNhdGlvblNsb3RJbnZhbGlkYXRpb25DYXVzZQogCVJTX0lOVkFMX1dBTF9MRVZFTCA9 ICgxIDw8IDIpLAogCS8qIGlkbGUgc2xvdCB0aW1lb3V0IGhhcyBvY2N1cnJlZCAqLwogCVJTX0lO VkFMX0lETEVfVElNRU9VVCA9ICgxIDw8IDMpLAorCS8qIHNsb3QncyB4bWluIG9yIGNhdGFsb2df eG1pbiBoYXMgcmVhY2hlZCBtYXggeGlkIGFnZSAqLworCVJTX0lOVkFMX1hJRF9BR0UgPSAoMSA8 PCA0KSwKIH0gUmVwbGljYXRpb25TbG90SW52YWxpZGF0aW9uQ2F1c2U7CiAKIC8qIE1heGltdW0g bnVtYmVyIG9mIGludmFsaWRhdGlvbiBjYXVzZXMgKi8KLSNkZWZpbmUJUlNfSU5WQUxfTUFYX0NB VVNFUyA0CisjZGVmaW5lCVJTX0lOVkFMX01BWF9DQVVTRVMgNQogCiAvKgogICogV2hlbiB0aGUg c2xvdCBzeW5jaHJvbml6YXRpb24gd29ya2VyIGlzIHJ1bm5pbmcsIG9yIHdoZW4KQEAgLTMyNiw2 ICszMjgsNyBAQCBleHRlcm4gUEdETExJTVBPUlQgUmVwbGljYXRpb25TbG90ICpNeVJlcGxpY2F0 aW9uU2xvdDsKIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgbWF4X3JlcGxpY2F0aW9uX3Nsb3RzOwog ZXh0ZXJuIFBHRExMSU1QT1JUIGNoYXIgKnN5bmNocm9uaXplZF9zdGFuZGJ5X3Nsb3RzOwogZXh0 ZXJuIFBHRExMSU1QT1JUIGludCBpZGxlX3JlcGxpY2F0aW9uX3Nsb3RfdGltZW91dF9zZWNzOwor ZXh0ZXJuIFBHRExMSU1QT1JUIGludCBtYXhfc2xvdF94aWRfYWdlOwogCiAvKiBzaG1lbSBpbml0 aWFsaXphdGlvbiBmdW5jdGlvbnMgKi8KIGV4dGVybiBTaXplIFJlcGxpY2F0aW9uU2xvdHNTaG1l bVNpemUodm9pZCk7CkBAIC0zNjcsNyArMzcwLDggQEAgZXh0ZXJuIHZvaWQgUmVwbGljYXRpb25T bG90c0Ryb3BEQlNsb3RzKE9pZCBkYm9pZCk7CiBleHRlcm4gYm9vbCBJbnZhbGlkYXRlT2Jzb2xl dGVSZXBsaWNhdGlvblNsb3RzKHVpbnQzMiBwb3NzaWJsZV9jYXVzZXMsCiAJCQkJCQkJCQkJCSAg IFhMb2dTZWdObyBvbGRlc3RTZWdubywKIAkJCQkJCQkJCQkJICAgT2lkIGRib2lkLAotCQkJCQkJ CQkJCQkgICBUcmFuc2FjdGlvbklkIHNuYXBzaG90Q29uZmxpY3RIb3Jpem9uKTsKKwkJCQkJCQkJ CQkJICAgVHJhbnNhY3Rpb25JZCBzbmFwc2hvdENvbmZsaWN0SG9yaXpvbiwKKwkJCQkJCQkJCQkJ ICAgVHJhbnNhY3Rpb25JZCB4aWRMaW1pdCk7CiBleHRlcm4gUmVwbGljYXRpb25TbG90ICpTZWFy Y2hOYW1lZFJlcGxpY2F0aW9uU2xvdChjb25zdCBjaGFyICpuYW1lLCBib29sIG5lZWRfbG9jayk7 CiBleHRlcm4gaW50CVJlcGxpY2F0aW9uU2xvdEluZGV4KFJlcGxpY2F0aW9uU2xvdCAqc2xvdCk7 CiBleHRlcm4gYm9vbCBSZXBsaWNhdGlvblNsb3ROYW1lKGludCBpbmRleCwgTmFtZSBuYW1lKTsK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY2FycmF5LmggYi9zcmMvaW5jbHVk ZS9zdG9yYWdlL3Byb2NhcnJheS5oCmluZGV4IGFiZGYwMjFlNjZlLi5hOTQwOTFjZTdmZCAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jYXJyYXkuaAorKysgYi9zcmMvaW5jbHVk ZS9zdG9yYWdlL3Byb2NhcnJheS5oCkBAIC01Myw2ICs1Myw5IEBAIGV4dGVybiBSdW5uaW5nVHJh bnNhY3Rpb25zIEdldFJ1bm5pbmdUcmFuc2FjdGlvbkRhdGEodm9pZCk7CiAKIGV4dGVybiBib29s IFRyYW5zYWN0aW9uSWRJc0luUHJvZ3Jlc3MoVHJhbnNhY3Rpb25JZCB4aWQpOwogZXh0ZXJuIFRy YW5zYWN0aW9uSWQgR2V0T2xkZXN0Tm9uUmVtb3ZhYmxlVHJhbnNhY3Rpb25JZChSZWxhdGlvbiBy ZWwpOworZXh0ZXJuIFRyYW5zYWN0aW9uSWQgR2V0T2xkZXN0Tm9uUmVtb3ZhYmxlVHJhbnNhY3Rp b25JZFdpdGhTbG90WGlkcyhSZWxhdGlvbiByZWwsCisJCQkJCQkJCQkJCQkJCQkJCVRyYW5zYWN0 aW9uSWQgKnNsb3RfeG1pbiwKKwkJCQkJCQkJCQkJCQkJCQkJVHJhbnNhY3Rpb25JZCAqc2xvdF9j YXRhbG9nX3htaW4pOwogZXh0ZXJuIFRyYW5zYWN0aW9uSWQgR2V0T2xkZXN0VHJhbnNhY3Rpb25J ZENvbnNpZGVyZWRSdW5uaW5nKHZvaWQpOwogZXh0ZXJuIFRyYW5zYWN0aW9uSWQgR2V0T2xkZXN0 QWN0aXZlVHJhbnNhY3Rpb25JZChib29sIGluQ29tbWl0T25seSwKIAkJCQkJCQkJCQkJCSAgYm9v bCBhbGxEYnMpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMTlfcmVwbHNsb3Rf bGltaXQucGwgYi9zcmMvdGVzdC9yZWNvdmVyeS90LzAxOV9yZXBsc2xvdF9saW1pdC5wbAppbmRl eCA3YjI1M2U2NGQ5Yy4uNmI3ZTQ4MThiZjQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlY292ZXJ5 L3QvMDE5X3JlcGxzbG90X2xpbWl0LnBsCisrKyBiL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDE5X3Jl cGxzbG90X2xpbWl0LnBsCkBAIC01NDAsNCArNTQwLDE3OSBAQCBpcyggJHB1Ymxpc2hlcjQtPnNh ZmVfcHNxbCgKICRwdWJsaXNoZXI0LT5zdG9wOwogJHN1YnNjcmliZXI0LT5zdG9wOwogCisjIFdh aXQgZm9yIHRoZSBnaXZlbiBzbG90IHRvIGJlIGludmFsaWRhdGVkIHdpdGggcmVhc29uICd4aWRf YWdlZCcKK3N1YiB3YWl0X2Zvcl94aWRfYWdlZF9pbnZhbGlkYXRpb24KK3sKKwlteSAoJG5vZGUs ICRzbG90X25hbWUpID0gQF87CisJJG5vZGUtPnBvbGxfcXVlcnlfdW50aWwoCisJCSdwb3N0Z3Jl cycsIHFxWworCQlTRUxFQ1QgQ09VTlQoc2xvdF9uYW1lKSA9IDEgRlJPTSBwZ19yZXBsaWNhdGlv bl9zbG90cworCQkJV0hFUkUgc2xvdF9uYW1lID0gJyRzbG90X25hbWUnIEFORAorCQkJYWN0aXZl ID0gZmFsc2UgQU5ECisJCQlpbnZhbGlkYXRpb25fcmVhc29uID0gJ3hpZF9hZ2VkJzsKKwldKSBv ciBkaWUgIlRpbWVkIG91dCB3YWl0aW5nIGZvciBzbG90ICRzbG90X25hbWUgdG8gYmUgaW52YWxp ZGF0ZWQiOworfQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBUZXN0Y2FzZSBzdGFydDogSW52YWxpZGF0 ZSBwaHlzaWNhbCBzbG90IGR1ZSB0byBtYXhfc2xvdF94aWRfYWdlIEdVQworCisjIEluaXRpYWxp emUgcHJpbWFyeSBub2RlIGZvciBYSUQgYWdlIHRlc3RzCitteSAkcHJpbWFyeTUgPSBQb3N0Z3Jl U1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3ByaW1hcnk1Jyk7CiskcHJpbWFyeTUtPmluaXQoYWxs b3dzX3N0cmVhbWluZyA9PiAnbG9naWNhbCcpOworCisjIERpc2FibGUgYXV0b3ZhY3V1bSBzbyBj aGVja3BvaW50ZXIgdHJpZ2dlcnMgdGhlIGludmFsaWRhdGlvbgorbXkgJG1heF9zbG90X3hpZF9h Z2UgPSAxMDA7CiskcHJpbWFyeTUtPmFwcGVuZF9jb25mKAorCSdwb3N0Z3Jlc3FsLmNvbmYnLCBx cXsKK21heF9zbG90X3hpZF9hZ2UgPSAkbWF4X3Nsb3RfeGlkX2FnZQorYXV0b3ZhY3V1bSA9IG9m ZgorfSk7CisKKyRwcmltYXJ5NS0+c3RhcnQ7CisKKyMgQ3JlYXRlIGEgcHJvY2VkdXJlIHRvIGNv bnN1bWUgWElEcworJHByaW1hcnk1LT5zYWZlX3BzcWwoCisJJ3Bvc3RncmVzJywgcXF7CisJQ1JF QVRFIFBST0NFRFVSRSBjb25zdW1lX3hpZChjbnQgaW50KQorCUFTIFwkXCQKKwlERUNMQVJFCisJ ICAgIGkgaW50OworCUJFR0lOCisJICAgIEZPUiBpIElOIDEuLmNudCBMT09QCisJICAgICAgICBF WEVDVVRFICdTRUxFQ1QgcGdfY3VycmVudF94YWN0X2lkKCknOworCSAgICAgICAgQ09NTUlUOwor CSAgICBFTkQgTE9PUDsKKwlFTkQ7CisJXCRcJCBMQU5HVUFHRSBwbHBnc3FsOworfSk7CisKKyMg VGFrZSBhIGJhY2t1cCBmb3IgY3JlYXRpbmcgc3RhbmRieQorJGJhY2t1cF9uYW1lID0gJ2JhY2t1 cDUnOworJHByaW1hcnk1LT5iYWNrdXAoJGJhY2t1cF9uYW1lKTsKKworIyBDcmVhdGUgc3RhbmRi eSB3aXRoIEhTIGZlZWRiYWNrIHNvIHRoZSBzbG90IGdhaW5zIGFuIHhtaW4KK215ICRzdGFuZGJ5 NSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnc3RhbmRieTUnKTsKKyRzdGFuZGJ5 NS0+aW5pdF9mcm9tX2JhY2t1cCgkcHJpbWFyeTUsICRiYWNrdXBfbmFtZSwgaGFzX3N0cmVhbWlu ZyA9PiAxKTsKKyRzdGFuZGJ5NS0+YXBwZW5kX2NvbmYoCisJJ3Bvc3RncmVzcWwuY29uZicsIHF7 CitwcmltYXJ5X3Nsb3RfbmFtZSA9ICdzYjVfc2xvdCcKK2hvdF9zdGFuZGJ5X2ZlZWRiYWNrID0g b24KK3dhbF9yZWNlaXZlcl9zdGF0dXNfaW50ZXJ2YWwgPSAxCit9KTsKKyRwcmltYXJ5NS0+c2Fm ZV9wc3FsKAorCSdwb3N0Z3JlcycsIHFxWworICAgIFNFTEVDVCBwZ19jcmVhdGVfcGh5c2ljYWxf cmVwbGljYXRpb25fc2xvdChzbG90X25hbWUgOj0gJ3NiNV9zbG90JywgaW1tZWRpYXRlbHlfcmVz ZXJ2ZSA6PSB0cnVlKTsKK10pOworJHN0YW5kYnk1LT5zdGFydDsKKworIyBDcmVhdGUgc29tZSBj b250ZW50IG9uIHByaW1hcnkgdG8gbW92ZSB4bWluCiskcHJpbWFyeTUtPnNhZmVfcHNxbCgncG9z dGdyZXMnLAorCSJDUkVBVEUgVEFCTEUgdGFiX2ludDUgQVMgU0VMRUNUIGdlbmVyYXRlX3Nlcmll cygxLDEwKSBBUyBhIik7CiskcHJpbWFyeTUtPndhaXRfZm9yX2NhdGNodXAoJHN0YW5kYnk1KTsK KworIyBXYWl0IGZvciB0aGUgcGh5c2ljYWwgc2xvdCB0byBnZXQgeG1pbiB2aWEgaG90X3N0YW5k YnlfZmVlZGJhY2sKKyRwcmltYXJ5NS0+cG9sbF9xdWVyeV91bnRpbCgKKwkncG9zdGdyZXMnLCBx cVsKKwlTRUxFQ1QgeG1pbiBJUyBOT1QgTlVMTAorCQlGUk9NIHBnX2NhdGFsb2cucGdfcmVwbGlj YXRpb25fc2xvdHMKKwkJV0hFUkUgc2xvdF9uYW1lID0gJ3NiNV9zbG90JzsKK10pIG9yIGRpZSAi VGltZWQgb3V0IHdhaXRpbmcgZm9yIHNsb3Qgc2I1X3Nsb3QgeG1pbiBmcm9tIEhTIGZlZWRiYWNr IjsKKworIyBTdG9wIHN0YW5kYnkgc28gdGhlIHNsb3QgYmVjb21lcyBpbmFjdGl2ZSB3aXRoIGl0 cyB4bWluIGZyb3plbgorJHN0YW5kYnk1LT5zdG9wOworCisjIEFkdmFuY2UgWElEcyBwYXN0IDJ4 IG1heF9zbG90X3hpZF9hZ2Ugc28gdGhlIHNsb3QncyB4bWluIGlzIHN0YWxlIGVub3VnaAorJHBy aW1hcnk1LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXF7Q0FMTCBjb25zdW1lX3hpZCgyICogJG1h eF9zbG90X3hpZF9hZ2UpfSk7CiskcHJpbWFyeTUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ0hF Q0tQT0lOVCIpOword2FpdF9mb3JfeGlkX2FnZWRfaW52YWxpZGF0aW9uKCRwcmltYXJ5NSwgJ3Ni NV9zbG90Jyk7CitvaygxLCAicGh5c2ljYWwgc2xvdCBpbnZhbGlkYXRlZCBkdWUgdG8gWElEIGFn ZSAodmlhIGNoZWNrcG9pbnQpIik7CisKKyMgVGVzdGNhc2UgZW5kOiBJbnZhbGlkYXRlIHBoeXNp Y2FsIHNsb3QgZHVlIHRvIG1heF9zbG90X3hpZF9hZ2UgR1VDCisjID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIyA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQorIyBUZXN0Y2FzZSBzdGFydDogSW52YWxpZGF0ZSBsb2dpY2FsIHNsb3QgZHVl IHRvIG1heF9zbG90X3hpZF9hZ2UgR1VDCisKKyMgQ3JlYXRlIGEgbG9naWNhbCBzbG90IGRpcmVj dGx5IG9uIHRoZSBwcmltYXJ5IChubyBzdWJzY3JpYmVyIG5lZWRlZCkuCisjIFRoZSBzbG90IGdl dHMgYSBjYXRhbG9nX3htaW4gaW1tZWRpYXRlbHkgdXBvbiBjcmVhdGlvbi4KKyRwcmltYXJ5NS0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBwZ19jcmVhdGVfbG9naWNhbF9yZXBsaWNh dGlvbl9zbG90KCdsc3ViNV9zbG90JywgJ3Bnb3V0cHV0JykiKTsKKworJHByaW1hcnk1LT5wb2xs X3F1ZXJ5X3VudGlsKAorCSdwb3N0Z3JlcycsIHFxWworCVNFTEVDVCBjYXRhbG9nX3htaW4gSVMg Tk9UIE5VTEwKKwlGUk9NIHBnX2NhdGFsb2cucGdfcmVwbGljYXRpb25fc2xvdHMKKwlXSEVSRSBz bG90X25hbWUgPSAnbHN1YjVfc2xvdCc7CitdKSBvciBkaWUgIlRpbWVkIG91dCB3YWl0aW5nIGZv ciBzbG90IGxzdWI1X3Nsb3QgY2F0YWxvZ194bWluIjsKKworIyBBZHZhbmNlIFhJRHMgcGFzdCAy eCBtYXhfc2xvdF94aWRfYWdlIHNvIHRoZSBzbG90J3MgY2F0YWxvZ194bWluIGlzIHN0YWxlIGVu b3VnaAorJHByaW1hcnk1LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXF7Q0FMTCBjb25zdW1lX3hp ZCgyICogJG1heF9zbG90X3hpZF9hZ2UpfSk7CisKKyMgVmFjdXVtIGEgdXNlciB0YWJsZSBzbyBP bGRlc3RYbWluIGRvZXMgbm90IGluY2x1ZGUgdGhlIHNsb3QncyBjYXRhbG9nX3htaW4sCisjIHNr aXBwaW5nIHRoZSBpbnZhbGlkYXRpb24gb2YgdGhlIHNsb3QuCiskcHJpbWFyeTUtPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiVkFDVVVNIHRhYl9pbnQ1Iik7CitpcyggJHByaW1hcnk1LT5zYWZlX3Bz cWwoCisJCSdwb3N0Z3JlcycsCisJCXFxW1NFTEVDVCBpbnZhbGlkYXRpb25fcmVhc29uIElTIE5V TEwgRlJPTSBwZ19yZXBsaWNhdGlvbl9zbG90cyBXSEVSRSBzbG90X25hbWUgPSAnbHN1YjVfc2xv dCc7XQorCSksCisJJ3QnLAorCSdsb2dpY2FsIHNsb3Qgbm90IGludmFsaWRhdGVkIGFmdGVyIHZh Y3V1bWluZyBhIGRhdGEgdGFibGUnKTsKKworIyBWYWN1dW0gYSBjYXRhbG9nIHRhYmxlIHNvIE9s ZGVzdFhtaW4gaW5jbHVkZXMgdGhlIHNsb3QncyBjYXRhbG9nX3htaW4sCisjIHRyaWdnZXJpbmcg aW52YWxpZGF0aW9uIG9mIHRoZSBzbG90LgorJHByaW1hcnk1LT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIlZBQ1VVTSBwZ19jbGFzcyIpOword2FpdF9mb3JfeGlkX2FnZWRfaW52YWxpZGF0aW9uKCRw cmltYXJ5NSwgJ2xzdWI1X3Nsb3QnKTsKK29rKDEsICJsb2dpY2FsIHNsb3QgaW52YWxpZGF0ZWQg ZHVlIHRvIFhJRCBhZ2UgKHZpYSB2YWN1dW0pIik7CisKKyMgVGVzdGNhc2UgZW5kOiBJbnZhbGlk YXRlIGxvZ2ljYWwgc2xvdCBkdWUgdG8gbWF4X3Nsb3RfeGlkX2FnZSBHVUMKKyMgPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBUZXN0Y2FzZSBzdGFydDogSW52YWxpZGF0 ZSBsb2dpY2FsIHNsb3Qgb24gc3RhbmRieSBkdWUgdG8gbWF4X3Nsb3RfeGlkX2FnZSBHVUMKKwor IyBEaXNhYmxlIG1heF9zbG90X3hpZF9hZ2Ugb24gcHJpbWFyeSBhbmQgcmVjcmVhdGUgdGhlIHN0 cmVhbWluZyBzbG90CiskcHJpbWFyeTUtPnNhZmVfcHNxbCgKKwkncG9zdGdyZXMnLAorCXF7CitB TFRFUiBTWVNURU0gU0VUIG1heF9zbG90X3hpZF9hZ2UgPSAwOworU0VMRUNUIHBnX3JlbG9hZF9j b25mKCk7Cit9KTsKKyRwcmltYXJ5NS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBw Z19kcm9wX3JlcGxpY2F0aW9uX3Nsb3QoJ3NiNV9zbG90JykiKTsKKyRwcmltYXJ5NS0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBwZ19jcmVhdGVfcGh5c2ljYWxfcmVwbGljYXRpb25f c2xvdCgnc2I1X3Nsb3QnLCB0cnVlKSIpOworJHN0YW5kYnk1LT5hcHBlbmRfY29uZigKKwkncG9z dGdyZXNxbC5jb25mJywgcXF7CittYXhfc2xvdF94aWRfYWdlID0gJG1heF9zbG90X3hpZF9hZ2UK K2F1dG92YWN1dW0gPSBvZmYKK30pOworJHN0YW5kYnk1LT5zdGFydDsKKworJHByaW1hcnk1LT53 YWl0X2Zvcl9jYXRjaHVwKCRzdGFuZGJ5NSk7CisKKyRzdGFuZGJ5NS0+Y3JlYXRlX2xvZ2ljYWxf c2xvdF9vbl9zdGFuZGJ5KCRwcmltYXJ5NSwgJ3NiNV9sb2dpY2FsX3Nsb3QnLAorCSdwb3N0Z3Jl cycpOworCiskc3RhbmRieTUtPnBvbGxfcXVlcnlfdW50aWwoCisJJ3Bvc3RncmVzJywgcXFbCisJ U0VMRUNUIGNhdGFsb2dfeG1pbiBJUyBOT1QgTlVMTAorCUZST00gcGdfY2F0YWxvZy5wZ19yZXBs aWNhdGlvbl9zbG90cworCVdIRVJFIHNsb3RfbmFtZSA9ICdzYjVfbG9naWNhbF9zbG90JzsKK10p IG9yIGRpZSAiVGltZWQgb3V0IHdhaXRpbmcgZm9yIHNiNV9sb2dpY2FsX3Nsb3QgY2F0YWxvZ194 bWluIjsKKworIyBBZHZhbmNlIFhJRHMgb24gcHJpbWFyeSwgcmVwbGF5IG9uIHN0YW5kYnksIHRo ZW4gcmVzdGFydHBvaW50IHRvIGludmFsaWRhdGUKKyRwcmltYXJ5NS0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsIHFxe0NBTEwgY29uc3VtZV94aWQoMiAqICRtYXhfc2xvdF94aWRfYWdlKX0pOworJHBy aW1hcnk1LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNIRUNLUE9JTlQiKTsKKyRwcmltYXJ5NS0+ d2FpdF9mb3JfcmVwbGF5X2NhdGNodXAoJHN0YW5kYnk1KTsKKyRzdGFuZGJ5NS0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJDSEVDS1BPSU5UIik7CisKK3dhaXRfZm9yX3hpZF9hZ2VkX2ludmFsaWRh dGlvbigkc3RhbmRieTUsICdzYjVfbG9naWNhbF9zbG90Jyk7CitvaygxLCAibG9naWNhbCAoc3Rh bmRieSkgc2xvdCBpbnZhbGlkYXRlZCBkdWUgdG8gWElEIGFnZSAodmlhIHJlc3RhcnRwb2ludCki KTsKKworJHN0YW5kYnk1LT5zdG9wOworJHByaW1hcnk1LT5zdG9wOworCisjIFRlc3RjYXNlIGVu ZDogSW52YWxpZGF0ZSBsb2dpY2FsIHNsb3Qgb24gc3RhbmRieSBkdWUgdG8gbWF4X3Nsb3RfeGlk X2FnZSBHVUMKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwogZG9uZV90ZXN0aW5nKCk7Ci0tIAoy LjUzLjAKCg== --000000000000cf07b5064eb1fc0d--