Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nXFBO-0004Co-55 for pgsql-hackers@arkaria.postgresql.org; Thu, 24 Mar 2022 04:34:46 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nXFBL-0006HP-Kt for pgsql-hackers@arkaria.postgresql.org; Thu, 24 Mar 2022 04:34:43 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nXFBK-0006AI-Rv for pgsql-hackers@lists.postgresql.org; Thu, 24 Mar 2022 04:34:43 +0000 Received: from mail-ej1-x629.google.com ([2a00:1450:4864:20::629]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1nXFBD-0000x4-W9 for pgsql-hackers@lists.postgresql.org; Thu, 24 Mar 2022 04:34:41 +0000 Received: by mail-ej1-x629.google.com with SMTP id j15so6749878eje.9 for ; Wed, 23 Mar 2022 21:34:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=r+U6daWVBICKAcxlS5OXwoKwa221C2Dc1D0HB8q6fi4=; b=Bo1uOGFfmNkYqdDzqFmKNMK6b85c5jg6/VX91N5SJEkGhi1OM/N+WgRxVJx1WFm9Ro wri/B8cJxr/ni4oZxpZK2k1aG6BZA9kDnVt09YOzgGzJX5yG7Fc6X0jUHQcA3Luuxbcx G4fJfNVQq1K164ixSJIDnFau7LzulVTrbCnSGfrSRmqrRWaSfP+XFN0YmVj7ETLIZnon jEhNiNkGOR6kmzi7iE/W/njIRSCJrJaUIyck7k5+lcUxp8BRuK1s684j7kyFR+J25P8i D7WJiZiysbZx5IRN29sIutDBCwcGFHkyw2cx+uGU1GtlIK4siN8yz8+AMc2tciBttQKJ BtoA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=r+U6daWVBICKAcxlS5OXwoKwa221C2Dc1D0HB8q6fi4=; b=0K6xR09D19TYtcFvUz0NRacLgZqmiO1Lyv+AT01DWe1W+wm7Z6B4/wNN9oDUkirHL3 K7S/FYDfHUpRBrtVTFN70NFfFLnJpLwrgT+8Aik0T62f8nwJBFk1OWzHKPSJUMGifFB+ NraeRLYdInN+zXpCtCC7z4TzNHcMjkSNM4VQPxu+R0NY0kOD7V9IpptZYLhavT+esbet /GaY4Amu1xfxjjQEnc+ULaC92gB82glG6C02V05/ZbbpjUyJEFOzfLsPUNjlp6zGzxZl Z9o7PYUVAQQxKoDF8CojZ6E6qJQbdaXfuJtxF3hMgNemAJRd/xHiDcq7s099cwsLZkXi uuvA== X-Gm-Message-State: AOAM532Ie98Vx5fapJ7C7PdFjAyDeZJbrIWIs9KgnfYsaiPOxRwlvUYi oUr0vZ0j45wYoyTKUFw1BMyvbL3DyrNIWXWACsLqMfEPxqU= X-Google-Smtp-Source: ABdhPJyWdJStGxnVAxFSisvdbgkv8ZwZ90U2RclNfu3eebZvW9JnFDSWwyJEUrJgt5ZQqcPhWTz+bGgrkVAbZ95NW94= X-Received: by 2002:a17:907:3e03:b0:6da:8c5a:6d4a with SMTP id hp3-20020a1709073e0300b006da8c5a6d4amr3688110ejc.585.1648096473558; Wed, 23 Mar 2022 21:34:33 -0700 (PDT) MIME-Version: 1.0 References: <65af8fb4-4c45-9cc3-c6ec-80f3ac488e07@oss.nttdata.com> <95066202-c7e6-e4be-05cc-bdceb45b68c7@oss.nttdata.com> <2d7c480a-63c8-a244-0f2a-361e5097764f@oss.nttdata.com> <3e57ebd7-b536-333e-c877-49a3ebb57079@oss.nttdata.com> <2a2519b5-0c1f-87c8-5461-a4d8be0728e0@oss.nttdata.com> <883589bb-077f-7d66-2406-5f67be0372a6@oss.nttdata.com> In-Reply-To: From: Etsuro Fujita Date: Thu, 24 Mar 2022 13:34:58 +0900 Message-ID: Subject: Re: postgres_fdw: commit remote (sub)transactions in parallel during pre-commit To: Fujii Masao Cc: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000dd1d2005daef5c5d" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000dd1d2005daef5c5d Content-Type: text/plain; charset="UTF-8" On Sat, Mar 5, 2022 at 7:32 PM Etsuro Fujita wrote: > Attached is an updated version. In the 0002 patch I introduced a macro for building an abort command in preparation for the parallel abort patch (0003), but I moved it to 0003. Attached is a new patch set. The new version of 0002 is just a cleanup patch (see the commit message in 0002), and I think it's committable, so I'm planning to commit it, if no objections. Best regards, Etsuro Fujita --000000000000dd1d2005daef5c5d Content-Type: application/octet-stream; name="v7-0002-postgres_fdw-Minor-cleanup-for-pgfdw_abort_cleanup.patch" Content-Disposition: attachment; filename="v7-0002-postgres_fdw-Minor-cleanup-for-pgfdw_abort_cleanup.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l14i1m8x0 RnJvbSA1NGEyNmQxZTY1MmY4NWEzZmVlMjNhYTRkN2IyODQ5Y2ViMDQ4N2YxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBFdHN1cm8gRnVqaXRhIDxldHN1cm8uZnVqaXRhQGdtYWlsLmNv bT4KRGF0ZTogVGh1LCAyNCBNYXIgMjAyMiAxMzoxNjowOSArMDkwMApTdWJqZWN0OiBbUEFUQ0hd IHBvc3RncmVzX2ZkdzogTWlub3IgY2xlYW51cCBmb3IgcGdmZHdfYWJvcnRfY2xlYW51cCgpLgoK Q29tbWl0IDg1YzY5NjExMiBpbnRyb2R1Y2VkIHRoaXMgZnVuY3Rpb24gdG8gZGVkdXBsaWNhdGUg Y29kZSBpbiB0aGUKdHJhbnNhY3Rpb24gY2FsbGJhY2sgZnVuY3Rpb25zLCBidXQgdGhlIFNRTCBj b21tYW5kIHBhc3NlZCBhcyBhbgphcmd1bWVudCB0byBpdCB3YXMgdXNlbGVzcyB3aGVuIGl0IHJl dHVybmVkIGJlZm9yZSBhYm9ydGluZyBhIHJlbW90ZQp0cmFuc2FjdGlvbiB1c2luZyB0aGUgY29t bWFuZC4gIE1vZGlmeSBwZ2Zkd19hYm9ydF9jbGVhbnVwKCkgc28gdGhhdCBpdApjb25zdHJ1Y3Rz IHRoZSBjb21tYW5kIHdoZW4vaWYgbmVjZXNzYXJ5LCBhcyBiZWZvcmUsIHJlbW92aW5nIHRoZQph cmd1bWVudCBmcm9tIGl0LiAgQWxzbyB1cGRhdGUgY29tbWVudHMgaW4gYm90aCBwZ2Zkd19hYm9y dF9jbGVhbnVwKCkKYW5kIHRoZSBjYWxsaW5nIGZ1bmN0aW9uLgoKRXRzdXJvIEZ1aml0YSwgcmV2 aWV3ZWQgYnkgRGF2aWQgWmhhbmcuCgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL0NB UG1HSzE1OGhyZCUzRFpmWG1na21ORkhpdmdoMThlNG9FMkd6MTUxQzJRNE9CRGpaMDhBJTQwbWFp bC5nbWFpbC5jb20KLS0tCiBjb250cmliL3Bvc3RncmVzX2Zkdy9jb25uZWN0aW9uLmMgfCAyOSAr KysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDE1IGluc2VydGlv bnMoKyksIDE0IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3 L2Nvbm5lY3Rpb24uYyBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2Nvbm5lY3Rpb24uYwppbmRleCA3 NGQzZTczMjA1Li4xMjljYTc5MjIxIDEwMDY0NAotLS0gYS9jb250cmliL3Bvc3RncmVzX2Zkdy9j b25uZWN0aW9uLmMKKysrIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvY29ubmVjdGlvbi5jCkBAIC0x MTAsOCArMTEwLDcgQEAgc3RhdGljIGJvb2wgcGdmZHdfZXhlY19jbGVhbnVwX3F1ZXJ5KFBHY29u biAqY29ubiwgY29uc3QgY2hhciAqcXVlcnksCiAJCQkJCQkJCQkgYm9vbCBpZ25vcmVfZXJyb3Jz KTsKIHN0YXRpYyBib29sIHBnZmR3X2dldF9jbGVhbnVwX3Jlc3VsdChQR2Nvbm4gKmNvbm4sIFRp bWVzdGFtcFR6IGVuZHRpbWUsCiAJCQkJCQkJCQkgUEdyZXN1bHQgKipyZXN1bHQsIGJvb2wgKnRp bWVkX291dCk7Ci1zdGF0aWMgdm9pZCBwZ2Zkd19hYm9ydF9jbGVhbnVwKENvbm5DYWNoZUVudHJ5 ICplbnRyeSwgY29uc3QgY2hhciAqc3FsLAotCQkJCQkJCQlib29sIHRvcGxldmVsKTsKK3N0YXRp YyB2b2lkIHBnZmR3X2Fib3J0X2NsZWFudXAoQ29ubkNhY2hlRW50cnkgKmVudHJ5LCBib29sIHRv cGxldmVsKTsKIHN0YXRpYyB2b2lkIHBnZmR3X2ZpbmlzaF9wcmVfY29tbWl0X2NsZWFudXAoTGlz dCAqcGVuZGluZ19lbnRyaWVzKTsKIHN0YXRpYyB2b2lkIHBnZmR3X2ZpbmlzaF9wcmVfc3ViY29t bWl0X2NsZWFudXAoTGlzdCAqcGVuZGluZ19lbnRyaWVzLAogCQkJCQkJCQkJCQkgICBpbnQgY3Vy bGV2ZWwpOwpAQCAtMTAxNSw4ICsxMDE0LDggQEAgcGdmZHdfeGFjdF9jYWxsYmFjayhYYWN0RXZl bnQgZXZlbnQsIHZvaWQgKmFyZykKIAkJCQkJYnJlYWs7CiAJCQkJY2FzZSBYQUNUX0VWRU5UX1BB UkFMTEVMX0FCT1JUOgogCQkJCWNhc2UgWEFDVF9FVkVOVF9BQk9SVDoKLQotCQkJCQlwZ2Zkd19h Ym9ydF9jbGVhbnVwKGVudHJ5LCAiQUJPUlQgVFJBTlNBQ1RJT04iLCB0cnVlKTsKKwkJCQkJLyog Um9sbGJhY2sgYWxsIHJlbW90ZSB0cmFuc2FjdGlvbnMgZHVyaW5nIGFib3J0ICovCisJCQkJCXBn ZmR3X2Fib3J0X2NsZWFudXAoZW50cnksIHRydWUpOwogCQkJCQlicmVhazsKIAkJCX0KIAkJfQpA QCAtMTEwOSwxMCArMTEwOCw3IEBAIHBnZmR3X3N1YnhhY3RfY2FsbGJhY2soU3ViWGFjdEV2ZW50 IGV2ZW50LCBTdWJUcmFuc2FjdGlvbklkIG15U3ViaWQsCiAJCWVsc2UKIAkJewogCQkJLyogUm9s bGJhY2sgYWxsIHJlbW90ZSBzdWJ0cmFuc2FjdGlvbnMgZHVyaW5nIGFib3J0ICovCi0JCQlzbnBy aW50ZihzcWwsIHNpemVvZihzcWwpLAotCQkJCQkgIlJPTExCQUNLIFRPIFNBVkVQT0lOVCBzJWQ7 IFJFTEVBU0UgU0FWRVBPSU5UIHMlZCIsCi0JCQkJCSBjdXJsZXZlbCwgY3VybGV2ZWwpOwotCQkJ cGdmZHdfYWJvcnRfY2xlYW51cChlbnRyeSwgc3FsLCBmYWxzZSk7CisJCQlwZ2Zkd19hYm9ydF9j bGVhbnVwKGVudHJ5LCBmYWxzZSk7CiAJCX0KIAogCQkvKiBPSywgd2UncmUgb3V0dGEgdGhhdCBs ZXZlbCBvZiBzdWJ0cmFuc2FjdGlvbiAqLwpAQCAtMTQ2NSwxMCArMTQ2MSw3IEBAIGV4aXQ6CTsK IH0KIAogLyoKLSAqIEFib3J0IHJlbW90ZSB0cmFuc2FjdGlvbi4KLSAqCi0gKiBUaGUgc3RhdGVt ZW50IHNwZWNpZmllZCBpbiAic3FsIiBpcyBzZW50IHRvIHRoZSByZW1vdGUgc2VydmVyLAotICog aW4gb3JkZXIgdG8gcm9sbGJhY2sgdGhlIHJlbW90ZSB0cmFuc2FjdGlvbi4KKyAqIEFib3J0IHJl bW90ZSB0cmFuc2FjdGlvbiBvciBzdWJ0cmFuc2FjdGlvbi4KICAqCiAgKiAidG9wbGV2ZWwiIHNo b3VsZCBiZSBzZXQgdG8gdHJ1ZSBpZiB0b3BsZXZlbCAobWFpbikgdHJhbnNhY3Rpb24gaXMKICAq IHJvbGxiYWNrZWQsIGZhbHNlIG90aGVyd2lzZS4KQEAgLTE0NzYsOCArMTQ2OSwxMCBAQCBleGl0 Ogk7CiAgKiBTZXQgZW50cnktPmNoYW5naW5nX3hhY3Rfc3RhdGUgdG8gZmFsc2Ugb24gc3VjY2Vz cywgdHJ1ZSBvbiBmYWlsdXJlLgogICovCiBzdGF0aWMgdm9pZAotcGdmZHdfYWJvcnRfY2xlYW51 cChDb25uQ2FjaGVFbnRyeSAqZW50cnksIGNvbnN0IGNoYXIgKnNxbCwgYm9vbCB0b3BsZXZlbCkK K3BnZmR3X2Fib3J0X2NsZWFudXAoQ29ubkNhY2hlRW50cnkgKmVudHJ5LCBib29sIHRvcGxldmVs KQogeworCWNoYXIJCXNxbFsxMDBdOworCiAJLyoKIAkgKiBEb24ndCB0cnkgdG8gY2xlYW4gdXAg dGhlIGNvbm5lY3Rpb24gaWYgd2UncmUgYWxyZWFkeSBpbiBlcnJvcgogCSAqIHJlY3Vyc2lvbiB0 cm91YmxlLgpAQCAtMTUwOSw4ICsxNTA0LDE0IEBAIHBnZmR3X2Fib3J0X2NsZWFudXAoQ29ubkNh Y2hlRW50cnkgKmVudHJ5LCBjb25zdCBjaGFyICpzcWwsIGJvb2wgdG9wbGV2ZWwpCiAJCSFwZ2Zk d19jYW5jZWxfcXVlcnkoZW50cnktPmNvbm4pKQogCQlyZXR1cm47CQkJCQkvKiBVbmFibGUgdG8g Y2FuY2VsIHJ1bm5pbmcgcXVlcnkgKi8KIAorCWlmICh0b3BsZXZlbCkKKwkJc25wcmludGYoc3Fs LCBzaXplb2Yoc3FsKSwgIkFCT1JUIFRSQU5TQUNUSU9OIik7CisJZWxzZQorCQlzbnByaW50Zihz cWwsIHNpemVvZihzcWwpLAorCQkJCSAiUk9MTEJBQ0sgVE8gU0FWRVBPSU5UIHMlZDsgUkVMRUFT RSBTQVZFUE9JTlQgcyVkIiwKKwkJCQkgZW50cnktPnhhY3RfZGVwdGgsIGVudHJ5LT54YWN0X2Rl cHRoKTsKIAlpZiAoIXBnZmR3X2V4ZWNfY2xlYW51cF9xdWVyeShlbnRyeS0+Y29ubiwgc3FsLCBm YWxzZSkpCi0JCXJldHVybjsJCQkJCS8qIFVuYWJsZSB0byBhYm9ydCByZW1vdGUgdHJhbnNhY3Rp b24gKi8KKwkJcmV0dXJuOwkJCQkJLyogVW5hYmxlIHRvIGFib3J0IHJlbW90ZSAoc3ViKXRyYW5z YWN0aW9uICovCiAKIAlpZiAodG9wbGV2ZWwpCiAJewotLSAKMi4xNC4zIChBcHBsZSBHaXQtOTgp Cgo= --000000000000dd1d2005daef5c5d Content-Type: application/octet-stream; name="v7-0003-postgres-fdw-Add-support-for-parallel-abort.patch" Content-Disposition: attachment; filename="v7-0003-postgres-fdw-Add-support-for-parallel-abort.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l14i2vpa1 ZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2Nvbm5lY3Rpb24uYyBiL2NvbnRyaWIv cG9zdGdyZXNfZmR3L2Nvbm5lY3Rpb24uYwppbmRleCAxMjljYTc5MjIxLi5hNzY3MjAxMmYxIDEw MDY0NAotLS0gYS9jb250cmliL3Bvc3RncmVzX2Zkdy9jb25uZWN0aW9uLmMKKysrIGIvY29udHJp Yi9wb3N0Z3Jlc19mZHcvY29ubmVjdGlvbi5jCkBAIC01OSw2ICs1OSw3IEBAIHR5cGVkZWYgc3Ry dWN0IENvbm5DYWNoZUVudHJ5CiAJYm9vbAkJaGF2ZV9lcnJvcjsJCS8qIGhhdmUgYW55IHN1Ynhh Y3RzIGFib3J0ZWQgaW4gdGhpcyB4YWN0PyAqLwogCWJvb2wJCWNoYW5naW5nX3hhY3Rfc3RhdGU7 CS8qIHhhY3Qgc3RhdGUgY2hhbmdlIGluIHByb2Nlc3MgKi8KIAlib29sCQlwYXJhbGxlbF9jb21t aXQ7CS8qIGRvIHdlIGNvbW1pdCAoc3ViKXhhY3RzIGluIHBhcmFsbGVsPyAqLworCWJvb2wJCXBh cmFsbGVsX2Fib3J0OwkvKiBkbyB3ZSBhYm9ydCAoc3ViKXhhY3RzIGluIHBhcmFsbGVsPyAqLwog CWJvb2wJCWludmFsaWRhdGVkOwkvKiB0cnVlIGlmIHJlY29ubmVjdCBpcyBwZW5kaW5nICovCiAJ Ym9vbAkJa2VlcF9jb25uZWN0aW9uczsJLyogc2V0dGluZyB2YWx1ZSBvZiBrZWVwX2Nvbm5lY3Rp b25zCiAJCQkJCQkJCQkgKiBzZXJ2ZXIgb3B0aW9uICovCkBAIC04MCw2ICs4MSwyMSBAQCBzdGF0 aWMgdW5zaWduZWQgaW50IHByZXBfc3RtdF9udW1iZXIgPSAwOwogLyogdHJhY2tzIHdoZXRoZXIg YW55IHdvcmsgaXMgbmVlZGVkIGluIGNhbGxiYWNrIGZ1bmN0aW9ucyAqLwogc3RhdGljIGJvb2wg eGFjdF9nb3RfY29ubmVjdGlvbiA9IGZhbHNlOwogCisvKiBNaWxsaXNlY29uZHMgdG8gd2FpdCB0 byBjYW5jZWwgYSBxdWVyeSBvciBleGVjdXRlIGEgY2xlYW51cCBxdWVyeSAqLworI2RlZmluZSBD T05ORUNUSU9OX0NMRUFOVVBfVElNRU9VVAkzMDAwMAorCisvKiBNYWNybyBmb3IgY29uc3RydWN0 aW5nIGFib3J0IGNvbW1hbmQgdG8gYmUgc2VudCAqLworI2RlZmluZSBDT05TVFJVQ1RfQUJPUlRf Q09NTUFORChzcWwsIGVudHJ5LCB0b3BsZXZlbCkgXAorCWRvIHsgXAorCQlpZiAodG9wbGV2ZWwp IFwKKwkJCXNucHJpbnRmKChzcWwpLCBzaXplb2Yoc3FsKSwgXAorCQkJCQkgIkFCT1JUIFRSQU5T QUNUSU9OIik7IFwKKwkJZWxzZSBcCisJCQlzbnByaW50Zigoc3FsKSwgc2l6ZW9mKHNxbCksIFwK KwkJCQkJICJST0xMQkFDSyBUTyBTQVZFUE9JTlQgcyVkOyBSRUxFQVNFIFNBVkVQT0lOVCBzJWQi LCBcCisJCQkJCSAoZW50cnkpLT54YWN0X2RlcHRoLCAoZW50cnkpLT54YWN0X2RlcHRoKTsgXAor CX0gd2hpbGUoMCkKKwogLyoKICAqIFNRTCBmdW5jdGlvbnMKICAqLwpAQCAtMTA2LDE0ICsxMjIs MjggQEAgc3RhdGljIHZvaWQgcGdmZHdfaW52YWxfY2FsbGJhY2soRGF0dW0gYXJnLCBpbnQgY2Fj aGVpZCwgdWludDMyIGhhc2h2YWx1ZSk7CiBzdGF0aWMgdm9pZCBwZ2Zkd19yZWplY3RfaW5jb21w bGV0ZV94YWN0X3N0YXRlX2NoYW5nZShDb25uQ2FjaGVFbnRyeSAqZW50cnkpOwogc3RhdGljIHZv aWQgcGdmZHdfcmVzZXRfeGFjdF9zdGF0ZShDb25uQ2FjaGVFbnRyeSAqZW50cnksIGJvb2wgdG9w bGV2ZWwpOwogc3RhdGljIGJvb2wgcGdmZHdfY2FuY2VsX3F1ZXJ5KFBHY29ubiAqY29ubik7Citz dGF0aWMgYm9vbCBwZ2Zkd19jYW5jZWxfcXVlcnlfYmVnaW4oUEdjb25uICpjb25uKTsKK3N0YXRp YyBib29sIHBnZmR3X2NhbmNlbF9xdWVyeV9lbmQoUEdjb25uICpjb25uLCBUaW1lc3RhbXBUeiBl bmR0aW1lLAorCQkJCQkJCQkgICBib29sIGNvbnN1bWVfaW5wdXQpOwogc3RhdGljIGJvb2wgcGdm ZHdfZXhlY19jbGVhbnVwX3F1ZXJ5KFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqcXVlcnksCiAJ CQkJCQkJCQkgYm9vbCBpZ25vcmVfZXJyb3JzKTsKK3N0YXRpYyBib29sIHBnZmR3X2V4ZWNfY2xl YW51cF9xdWVyeV9iZWdpbihQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnF1ZXJ5KTsKK3N0YXRp YyBib29sIHBnZmR3X2V4ZWNfY2xlYW51cF9xdWVyeV9lbmQoUEdjb25uICpjb25uLCBjb25zdCBj aGFyICpxdWVyeSwKKwkJCQkJCQkJCQkgVGltZXN0YW1wVHogZW5kdGltZSwKKwkJCQkJCQkJCQkg Ym9vbCBjb25zdW1lX2lucHV0LAorCQkJCQkJCQkJCSBib29sIGlnbm9yZV9lcnJvcnMpOwogc3Rh dGljIGJvb2wgcGdmZHdfZ2V0X2NsZWFudXBfcmVzdWx0KFBHY29ubiAqY29ubiwgVGltZXN0YW1w VHogZW5kdGltZSwKIAkJCQkJCQkJCSBQR3Jlc3VsdCAqKnJlc3VsdCwgYm9vbCAqdGltZWRfb3V0 KTsKIHN0YXRpYyB2b2lkIHBnZmR3X2Fib3J0X2NsZWFudXAoQ29ubkNhY2hlRW50cnkgKmVudHJ5 LCBib29sIHRvcGxldmVsKTsKK3N0YXRpYyBib29sIHBnZmR3X2Fib3J0X2NsZWFudXBfYmVnaW4o Q29ubkNhY2hlRW50cnkgKmVudHJ5LCBib29sIHRvcGxldmVsLAorCQkJCQkJCQkJICBMaXN0ICoq cGVuZGluZ19lbnRyaWVzLAorCQkJCQkJCQkJICBMaXN0ICoqY2FuY2VsX3JlcXVlc3RlZCk7CiBz dGF0aWMgdm9pZCBwZ2Zkd19maW5pc2hfcHJlX2NvbW1pdF9jbGVhbnVwKExpc3QgKnBlbmRpbmdf ZW50cmllcyk7CiBzdGF0aWMgdm9pZCBwZ2Zkd19maW5pc2hfcHJlX3N1YmNvbW1pdF9jbGVhbnVw KExpc3QgKnBlbmRpbmdfZW50cmllcywKIAkJCQkJCQkJCQkJICAgaW50IGN1cmxldmVsKTsKK3N0 YXRpYyB2b2lkIHBnZmR3X2ZpbmlzaF9hYm9ydF9jbGVhbnVwKExpc3QgKnBlbmRpbmdfZW50cmll cywKKwkJCQkJCQkJCSAgIExpc3QgKmNhbmNlbF9yZXF1ZXN0ZWQsCisJCQkJCQkJCQkgICBib29s IHRvcGxldmVsKTsKIHN0YXRpYyBib29sIFVzZXJNYXBwaW5nUGFzc3dvcmRSZXF1aXJlZChVc2Vy TWFwcGluZyAqdXNlcik7CiBzdGF0aWMgYm9vbCBkaXNjb25uZWN0X2NhY2hlZF9jb25uZWN0aW9u cyhPaWQgc2VydmVyaWQpOwogCkBAIC0zMjQsMTEgKzM1NCwxMiBAQCBtYWtlX25ld19jb25uZWN0 aW9uKENvbm5DYWNoZUVudHJ5ICplbnRyeSwgVXNlck1hcHBpbmcgKnVzZXIpCiAJICoKIAkgKiBC eSBkZWZhdWx0LCBhbGwgdGhlIGNvbm5lY3Rpb25zIHRvIGFueSBmb3JlaWduIHNlcnZlcnMgYXJl IGtlcHQgb3Blbi4KIAkgKgotCSAqIEFsc28gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gY29tbWl0IChz dWIpdHJhbnNhY3Rpb25zIG9wZW5lZCBvbiB0aGUgcmVtb3RlCi0JICogc2VydmVyIGluIHBhcmFs bGVsIGF0IChzdWIpdHJhbnNhY3Rpb24gZW5kLgorCSAqIEFsc28gZGV0ZXJtaW5lIHdoZXRoZXIg dG8gY29tbWl0L2Fib3J0IChzdWIpdHJhbnNhY3Rpb25zIG9wZW5lZCBvbiB0aGUKKwkgKiByZW1v dGUgc2VydmVyIGluIHBhcmFsbGVsIGF0IChzdWIpdHJhbnNhY3Rpb24gZW5kLgogCSAqLwogCWVu dHJ5LT5rZWVwX2Nvbm5lY3Rpb25zID0gdHJ1ZTsKIAllbnRyeS0+cGFyYWxsZWxfY29tbWl0ID0g ZmFsc2U7CisJZW50cnktPnBhcmFsbGVsX2Fib3J0ID0gZmFsc2U7CiAJZm9yZWFjaChsYywgc2Vy dmVyLT5vcHRpb25zKQogCXsKIAkJRGVmRWxlbSAgICAqZGVmID0gKERlZkVsZW0gKikgbGZpcnN0 KGxjKTsKQEAgLTMzNyw2ICszNjgsOCBAQCBtYWtlX25ld19jb25uZWN0aW9uKENvbm5DYWNoZUVu dHJ5ICplbnRyeSwgVXNlck1hcHBpbmcgKnVzZXIpCiAJCQllbnRyeS0+a2VlcF9jb25uZWN0aW9u cyA9IGRlZkdldEJvb2xlYW4oZGVmKTsKIAkJZWxzZSBpZiAoc3RyY21wKGRlZi0+ZGVmbmFtZSwg InBhcmFsbGVsX2NvbW1pdCIpID09IDApCiAJCQllbnRyeS0+cGFyYWxsZWxfY29tbWl0ID0gZGVm R2V0Qm9vbGVhbihkZWYpOworCQllbHNlIGlmIChzdHJjbXAoZGVmLT5kZWZuYW1lLCAicGFyYWxs ZWxfYWJvcnQiKSA9PSAwKQorCQkJZW50cnktPnBhcmFsbGVsX2Fib3J0ID0gZGVmR2V0Qm9vbGVh bihkZWYpOwogCX0KIAogCS8qIE5vdyB0cnkgdG8gbWFrZSB0aGUgY29ubmVjdGlvbiAqLwpAQCAt OTIyLDYgKzk1NSw3IEBAIHBnZmR3X3hhY3RfY2FsbGJhY2soWGFjdEV2ZW50IGV2ZW50LCB2b2lk ICphcmcpCiAJSEFTSF9TRVFfU1RBVFVTIHNjYW47CiAJQ29ubkNhY2hlRW50cnkgKmVudHJ5Owog CUxpc3QJICAgKnBlbmRpbmdfZW50cmllcyA9IE5JTDsKKwlMaXN0CSAgICpjYW5jZWxfcmVxdWVz dGVkID0gTklMOwogCiAJLyogUXVpY2sgZXhpdCBpZiBubyBjb25uZWN0aW9ucyB3ZXJlIHRvdWNo ZWQgaW4gdGhpcyB0cmFuc2FjdGlvbi4gKi8KIAlpZiAoIXhhY3RfZ290X2Nvbm5lY3Rpb24pCkBA IC0xMDE1LDcgKzEwNDksMTUgQEAgcGdmZHdfeGFjdF9jYWxsYmFjayhYYWN0RXZlbnQgZXZlbnQs IHZvaWQgKmFyZykKIAkJCQljYXNlIFhBQ1RfRVZFTlRfUEFSQUxMRUxfQUJPUlQ6CiAJCQkJY2Fz ZSBYQUNUX0VWRU5UX0FCT1JUOgogCQkJCQkvKiBSb2xsYmFjayBhbGwgcmVtb3RlIHRyYW5zYWN0 aW9ucyBkdXJpbmcgYWJvcnQgKi8KLQkJCQkJcGdmZHdfYWJvcnRfY2xlYW51cChlbnRyeSwgdHJ1 ZSk7CisJCQkJCWlmIChlbnRyeS0+cGFyYWxsZWxfYWJvcnQpCisJCQkJCXsKKwkJCQkJCWlmIChw Z2Zkd19hYm9ydF9jbGVhbnVwX2JlZ2luKGVudHJ5LCB0cnVlLAorCQkJCQkJCQkJCQkJCSAgJnBl bmRpbmdfZW50cmllcywKKwkJCQkJCQkJCQkJCQkgICZjYW5jZWxfcmVxdWVzdGVkKSkKKwkJCQkJ CQljb250aW51ZTsKKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCQlwZ2Zkd19hYm9ydF9jbGVhbnVw KGVudHJ5LCB0cnVlKTsKIAkJCQkJYnJlYWs7CiAJCQl9CiAJCX0KQEAgLTEwMjUsMTEgKzEwNjcs MjEgQEAgcGdmZHdfeGFjdF9jYWxsYmFjayhYYWN0RXZlbnQgZXZlbnQsIHZvaWQgKmFyZykKIAl9 CiAKIAkvKiBJZiB0aGVyZSBhcmUgYW55IHBlbmRpbmcgY29ubmVjdGlvbnMsIGZpbmlzaCBjbGVh bmluZyB0aGVtIHVwICovCi0JaWYgKHBlbmRpbmdfZW50cmllcykKKwlpZiAocGVuZGluZ19lbnRy aWVzIHx8IGNhbmNlbF9yZXF1ZXN0ZWQpCiAJewotCQlBc3NlcnQoZXZlbnQgPT0gWEFDVF9FVkVO VF9QQVJBTExFTF9QUkVfQ09NTUlUIHx8Ci0JCQkgICBldmVudCA9PSBYQUNUX0VWRU5UX1BSRV9D T01NSVQpOwotCQlwZ2Zkd19maW5pc2hfcHJlX2NvbW1pdF9jbGVhbnVwKHBlbmRpbmdfZW50cmll cyk7CisJCWlmIChldmVudCA9PSBYQUNUX0VWRU5UX1BBUkFMTEVMX1BSRV9DT01NSVQgfHwKKwkJ CWV2ZW50ID09IFhBQ1RfRVZFTlRfUFJFX0NPTU1JVCkKKwkJeworCQkJQXNzZXJ0KGNhbmNlbF9y ZXF1ZXN0ZWQgPT0gTklMKTsKKwkJCXBnZmR3X2ZpbmlzaF9wcmVfY29tbWl0X2NsZWFudXAocGVu ZGluZ19lbnRyaWVzKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCUFzc2VydChldmVudCA9PSBYQUNU X0VWRU5UX1BBUkFMTEVMX0FCT1JUIHx8CisJCQkJICAgZXZlbnQgPT0gWEFDVF9FVkVOVF9BQk9S VCk7CisJCQlwZ2Zkd19maW5pc2hfYWJvcnRfY2xlYW51cChwZW5kaW5nX2VudHJpZXMsIGNhbmNl bF9yZXF1ZXN0ZWQsCisJCQkJCQkJCQkgICB0cnVlKTsKKwkJfQogCX0KIAogCS8qCkBAIC0xMDU0 LDYgKzExMDYsNyBAQCBwZ2Zkd19zdWJ4YWN0X2NhbGxiYWNrKFN1YlhhY3RFdmVudCBldmVudCwg U3ViVHJhbnNhY3Rpb25JZCBteVN1YmlkLAogCUNvbm5DYWNoZUVudHJ5ICplbnRyeTsKIAlpbnQJ CQljdXJsZXZlbDsKIAlMaXN0CSAgICpwZW5kaW5nX2VudHJpZXMgPSBOSUw7CisJTGlzdAkgICAq Y2FuY2VsX3JlcXVlc3RlZCA9IE5JTDsKIAogCS8qIE5vdGhpbmcgdG8gZG8gYXQgc3VieGFjdCBz dGFydCwgbm9yIGFmdGVyIGNvbW1pdC4gKi8KIAlpZiAoIShldmVudCA9PSBTVUJYQUNUX0VWRU5U X1BSRV9DT01NSVRfU1VCIHx8CkBAIC0xMTA4LDcgKzExNjEsMTUgQEAgcGdmZHdfc3VieGFjdF9j YWxsYmFjayhTdWJYYWN0RXZlbnQgZXZlbnQsIFN1YlRyYW5zYWN0aW9uSWQgbXlTdWJpZCwKIAkJ ZWxzZQogCQl7CiAJCQkvKiBSb2xsYmFjayBhbGwgcmVtb3RlIHN1YnRyYW5zYWN0aW9ucyBkdXJp bmcgYWJvcnQgKi8KLQkJCXBnZmR3X2Fib3J0X2NsZWFudXAoZW50cnksIGZhbHNlKTsKKwkJCWlm IChlbnRyeS0+cGFyYWxsZWxfYWJvcnQpCisJCQl7CisJCQkJaWYgKHBnZmR3X2Fib3J0X2NsZWFu dXBfYmVnaW4oZW50cnksIGZhbHNlLAorCQkJCQkJCQkJCQkgICZwZW5kaW5nX2VudHJpZXMsCisJ CQkJCQkJCQkJCSAgJmNhbmNlbF9yZXF1ZXN0ZWQpKQorCQkJCQljb250aW51ZTsKKwkJCX0KKwkJ CWVsc2UKKwkJCQlwZ2Zkd19hYm9ydF9jbGVhbnVwKGVudHJ5LCBmYWxzZSk7CiAJCX0KIAogCQkv KiBPSywgd2UncmUgb3V0dGEgdGhhdCBsZXZlbCBvZiBzdWJ0cmFuc2FjdGlvbiAqLwpAQCAtMTEx NiwxMCArMTE3NywxOSBAQCBwZ2Zkd19zdWJ4YWN0X2NhbGxiYWNrKFN1YlhhY3RFdmVudCBldmVu dCwgU3ViVHJhbnNhY3Rpb25JZCBteVN1YmlkLAogCX0KIAogCS8qIElmIHRoZXJlIGFyZSBhbnkg cGVuZGluZyBjb25uZWN0aW9ucywgZmluaXNoIGNsZWFuaW5nIHRoZW0gdXAgKi8KLQlpZiAocGVu ZGluZ19lbnRyaWVzKQorCWlmIChwZW5kaW5nX2VudHJpZXMgfHwgY2FuY2VsX3JlcXVlc3RlZCkK IAl7Ci0JCUFzc2VydChldmVudCA9PSBTVUJYQUNUX0VWRU5UX1BSRV9DT01NSVRfU1VCKTsKLQkJ cGdmZHdfZmluaXNoX3ByZV9zdWJjb21taXRfY2xlYW51cChwZW5kaW5nX2VudHJpZXMsIGN1cmxl dmVsKTsKKwkJaWYgKGV2ZW50ID09IFNVQlhBQ1RfRVZFTlRfUFJFX0NPTU1JVF9TVUIpCisJCXsK KwkJCUFzc2VydChjYW5jZWxfcmVxdWVzdGVkID09IE5JTCk7CisJCQlwZ2Zkd19maW5pc2hfcHJl X3N1YmNvbW1pdF9jbGVhbnVwKHBlbmRpbmdfZW50cmllcywgY3VybGV2ZWwpOworCQl9CisJCWVs c2UKKwkJeworCQkJQXNzZXJ0KGV2ZW50ID09IFNVQlhBQ1RfRVZFTlRfQUJPUlRfU1VCKTsKKwkJ CXBnZmR3X2ZpbmlzaF9hYm9ydF9jbGVhbnVwKHBlbmRpbmdfZW50cmllcywgY2FuY2VsX3JlcXVl c3RlZCwKKwkJCQkJCQkJCSAgIGZhbHNlKTsKKwkJfQogCX0KIH0KIApAQCAtMTI2MywxNyArMTMz MywyNSBAQCBwZ2Zkd19yZXNldF94YWN0X3N0YXRlKENvbm5DYWNoZUVudHJ5ICplbnRyeSwgYm9v bCB0b3BsZXZlbCkKIHN0YXRpYyBib29sCiBwZ2Zkd19jYW5jZWxfcXVlcnkoUEdjb25uICpjb25u KQogewotCVBHY2FuY2VsICAgKmNhbmNlbDsKLQljaGFyCQllcnJidWZbMjU2XTsKLQlQR3Jlc3Vs dCAgICpyZXN1bHQgPSBOVUxMOwogCVRpbWVzdGFtcFR6IGVuZHRpbWU7Ci0JYm9vbAkJdGltZWRf b3V0OwogCiAJLyoKIAkgKiBJZiBpdCB0YWtlcyB0b28gbG9uZyB0byBjYW5jZWwgdGhlIHF1ZXJ5 IGFuZCBkaXNjYXJkIHRoZSByZXN1bHQsIGFzc3VtZQogCSAqIHRoZSBjb25uZWN0aW9uIGlzIGRl YWQuCiAJICovCi0JZW5kdGltZSA9IFRpbWVzdGFtcFR6UGx1c01pbGxpc2Vjb25kcyhHZXRDdXJy ZW50VGltZXN0YW1wKCksIDMwMDAwKTsKKwllbmR0aW1lID0gVGltZXN0YW1wVHpQbHVzTWlsbGlz ZWNvbmRzKEdldEN1cnJlbnRUaW1lc3RhbXAoKSwKKwkJCQkJCQkJCQkgIENPTk5FQ1RJT05fQ0xF QU5VUF9USU1FT1VUKTsKKworCWlmICghcGdmZHdfY2FuY2VsX3F1ZXJ5X2JlZ2luKGNvbm4pKQor CQlyZXR1cm4gZmFsc2U7CisJcmV0dXJuIHBnZmR3X2NhbmNlbF9xdWVyeV9lbmQoY29ubiwgZW5k dGltZSwgZmFsc2UpOworfQorCitzdGF0aWMgYm9vbAorcGdmZHdfY2FuY2VsX3F1ZXJ5X2JlZ2lu KFBHY29ubiAqY29ubikKK3sKKwlQR2NhbmNlbCAgICpjYW5jZWw7CisJY2hhcgkJZXJyYnVmWzI1 Nl07CiAKIAkvKgogCSAqIElzc3VlIGNhbmNlbCByZXF1ZXN0LiAgVW5mb3J0dW5hdGVseSwgdGhl cmUncyBubyBnb29kIHdheSB0byBsaW1pdCB0aGUKQEAgLTEyOTMsNiArMTM3MSwzMSBAQCBwZ2Zk d19jYW5jZWxfcXVlcnkoUEdjb25uICpjb25uKQogCQlQUWZyZWVDYW5jZWwoY2FuY2VsKTsKIAl9 CiAKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wKK3BnZmR3X2NhbmNlbF9xdWVyeV9l bmQoUEdjb25uICpjb25uLCBUaW1lc3RhbXBUeiBlbmR0aW1lLCBib29sIGNvbnN1bWVfaW5wdXQp Cit7CisJUEdyZXN1bHQgICAqcmVzdWx0ID0gTlVMTDsKKwlib29sCQl0aW1lZF9vdXQ7CisKKwkv KgorCSAqIElmIHJlcXVlc3RlZCwgY29uc3VtZSB3aGF0ZXZlciBkYXRhIGlzIGF2YWlsYWJsZSBm cm9tIHRoZSBzb2NrZXQuCisJICogKE5vdGUgdGhhdCBpZiBhbGwgZGF0YSBpcyBhdmFpbGFibGUs IHRoaXMgYWxsb3dzCisJICogcGdmZHdfZ2V0X2NsZWFudXBfcmVzdWx0IHRvIGNhbGwgUFFnZXRS ZXN1bHQgd2l0aG91dCBmb3JjaW5nIHRoZQorCSAqIG92ZXJoZWFkIG9mIFdhaXRMYXRjaE9yU29j a2V0LCB3aGljaCB3b3VsZCBiZSBsYXJnZSBjb21wYXJlZCB0byB0aGUKKwkgKiBvdmVyaGVhZCBv ZiBQUWNvbnN1bWVJbnB1dC4pCisJICovCisJaWYgKGNvbnN1bWVfaW5wdXQgJiYgIVBRY29uc3Vt ZUlucHV0KGNvbm4pKQorCXsKKwkJZXJlcG9ydChXQVJOSU5HLAorCQkJCShlcnJjb2RlKEVSUkNP REVfQ09OTkVDVElPTl9GQUlMVVJFKSwKKwkJCQkgZXJybXNnKCJjb3VsZCBub3QgZ2V0IHJlc3Vs dCBvZiBjYW5jZWwgcmVxdWVzdDogJXMiLAorCQkJCQkJcGNob21wKFBRZXJyb3JNZXNzYWdlKGNv bm4pKSkpKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwogCS8qIEdldCBhbmQgZGlzY2FyZCB0aGUg cmVzdWx0IG9mIHRoZSBxdWVyeS4gKi8KIAlpZiAocGdmZHdfZ2V0X2NsZWFudXBfcmVzdWx0KGNv bm4sIGVuZHRpbWUsICZyZXN1bHQsICZ0aW1lZF9vdXQpKQogCXsKQEAgLTEzMjcsOSArMTQzMCw3 IEBAIHBnZmR3X2NhbmNlbF9xdWVyeShQR2Nvbm4gKmNvbm4pCiBzdGF0aWMgYm9vbAogcGdmZHdf ZXhlY19jbGVhbnVwX3F1ZXJ5KFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqcXVlcnksIGJvb2wg aWdub3JlX2Vycm9ycykKIHsKLQlQR3Jlc3VsdCAgICpyZXN1bHQgPSBOVUxMOwogCVRpbWVzdGFt cFR6IGVuZHRpbWU7Ci0JYm9vbAkJdGltZWRfb3V0OwogCiAJLyoKIAkgKiBJZiBpdCB0YWtlcyB0 b28gbG9uZyB0byBleGVjdXRlIGEgY2xlYW51cCBxdWVyeSwgYXNzdW1lIHRoZSBjb25uZWN0aW9u CkBAIC0xMzM3LDggKzE0MzgsMTggQEAgcGdmZHdfZXhlY19jbGVhbnVwX3F1ZXJ5KFBHY29ubiAq Y29ubiwgY29uc3QgY2hhciAqcXVlcnksIGJvb2wgaWdub3JlX2Vycm9ycykKIAkgKiBwbGFjZSAo ZS5nLiBzdGF0ZW1lbnQgdGltZW91dCwgdXNlciBjYW5jZWwpLCBzbyB0aGUgdGltZW91dCBzaG91 bGRuJ3QKIAkgKiBiZSB0b28gbG9uZy4KIAkgKi8KLQllbmR0aW1lID0gVGltZXN0YW1wVHpQbHVz TWlsbGlzZWNvbmRzKEdldEN1cnJlbnRUaW1lc3RhbXAoKSwgMzAwMDApOworCWVuZHRpbWUgPSBU aW1lc3RhbXBUelBsdXNNaWxsaXNlY29uZHMoR2V0Q3VycmVudFRpbWVzdGFtcCgpLAorCQkJCQkJ CQkJCSAgQ09OTkVDVElPTl9DTEVBTlVQX1RJTUVPVVQpOworCisJaWYgKCFwZ2Zkd19leGVjX2Ns ZWFudXBfcXVlcnlfYmVnaW4oY29ubiwgcXVlcnkpKQorCQlyZXR1cm4gZmFsc2U7CisJcmV0dXJu IHBnZmR3X2V4ZWNfY2xlYW51cF9xdWVyeV9lbmQoY29ubiwgcXVlcnksIGVuZHRpbWUsCisJCQkJ CQkJCQkJZmFsc2UsIGlnbm9yZV9lcnJvcnMpOworfQogCitzdGF0aWMgYm9vbAorcGdmZHdfZXhl Y19jbGVhbnVwX3F1ZXJ5X2JlZ2luKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqcXVlcnkpCit7 CiAJLyoKIAkgKiBTdWJtaXQgYSBxdWVyeS4gIFNpbmNlIHdlIGRvbid0IHVzZSBub24tYmxvY2tp bmcgbW9kZSwgdGhpcyBhbHNvIGNhbgogCSAqIGJsb2NrLiAgQnV0IGl0cyByaXNrIGlzIHJlbGF0 aXZlbHkgc21hbGwsIHNvIHdlIGlnbm9yZSB0aGF0IGZvciBub3cuCkBAIC0xMzQ5LDYgKzE0NjAs MzAgQEAgcGdmZHdfZXhlY19jbGVhbnVwX3F1ZXJ5KFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAq cXVlcnksIGJvb2wgaWdub3JlX2Vycm9ycykKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAorCXJldHVy biB0cnVlOworfQorCitzdGF0aWMgYm9vbAorcGdmZHdfZXhlY19jbGVhbnVwX3F1ZXJ5X2VuZChQ R2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnF1ZXJ5LAorCQkJCQkJCSBUaW1lc3RhbXBUeiBlbmR0 aW1lLCBib29sIGNvbnN1bWVfaW5wdXQsCisJCQkJCQkJIGJvb2wgaWdub3JlX2Vycm9ycykKK3sK KwlQR3Jlc3VsdCAgICpyZXN1bHQgPSBOVUxMOworCWJvb2wJCXRpbWVkX291dDsKKworCS8qCisJ ICogSWYgcmVxdWVzdGVkLCBjb25zdW1lIHdoYXRldmVyIGRhdGEgaXMgYXZhaWxhYmxlIGZyb20g dGhlIHNvY2tldC4KKwkgKiAoTm90ZSB0aGF0IGlmIGFsbCBkYXRhIGlzIGF2YWlsYWJsZSwgdGhp cyBhbGxvd3MKKwkgKiBwZ2Zkd19nZXRfY2xlYW51cF9yZXN1bHQgdG8gY2FsbCBQUWdldFJlc3Vs dCB3aXRob3V0IGZvcmNpbmcgdGhlCisJICogb3ZlcmhlYWQgb2YgV2FpdExhdGNoT3JTb2NrZXQs IHdoaWNoIHdvdWxkIGJlIGxhcmdlIGNvbXBhcmVkIHRvIHRoZQorCSAqIG92ZXJoZWFkIG9mIFBR Y29uc3VtZUlucHV0LikKKwkgKi8KKwlpZiAoY29uc3VtZV9pbnB1dCAmJiAhUFFjb25zdW1lSW5w dXQoY29ubikpCisJeworCQlwZ2Zkd19yZXBvcnRfZXJyb3IoV0FSTklORywgTlVMTCwgY29ubiwg ZmFsc2UsIHF1ZXJ5KTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwogCS8qIEdldCB0aGUgcmVzdWx0 IG9mIHRoZSBxdWVyeS4gKi8KIAlpZiAocGdmZHdfZ2V0X2NsZWFudXBfcmVzdWx0KGNvbm4sIGVu ZHRpbWUsICZyZXN1bHQsICZ0aW1lZF9vdXQpKQogCXsKQEAgLTE1MDQsMTIgKzE2MzksNyBAQCBw Z2Zkd19hYm9ydF9jbGVhbnVwKENvbm5DYWNoZUVudHJ5ICplbnRyeSwgYm9vbCB0b3BsZXZlbCkK IAkJIXBnZmR3X2NhbmNlbF9xdWVyeShlbnRyeS0+Y29ubikpCiAJCXJldHVybjsJCQkJCS8qIFVu YWJsZSB0byBjYW5jZWwgcnVubmluZyBxdWVyeSAqLwogCi0JaWYgKHRvcGxldmVsKQotCQlzbnBy aW50ZihzcWwsIHNpemVvZihzcWwpLCAiQUJPUlQgVFJBTlNBQ1RJT04iKTsKLQllbHNlCi0JCXNu cHJpbnRmKHNxbCwgc2l6ZW9mKHNxbCksCi0JCQkJICJST0xMQkFDSyBUTyBTQVZFUE9JTlQgcyVk OyBSRUxFQVNFIFNBVkVQT0lOVCBzJWQiLAotCQkJCSBlbnRyeS0+eGFjdF9kZXB0aCwgZW50cnkt PnhhY3RfZGVwdGgpOworCUNPTlNUUlVDVF9BQk9SVF9DT01NQU5EKHNxbCwgZW50cnksIHRvcGxl dmVsKTsKIAlpZiAoIXBnZmR3X2V4ZWNfY2xlYW51cF9xdWVyeShlbnRyeS0+Y29ubiwgc3FsLCBm YWxzZSkpCiAJCXJldHVybjsJCQkJCS8qIFVuYWJsZSB0byBhYm9ydCByZW1vdGUgKHN1Yil0cmFu c2FjdGlvbiAqLwogCkBAIC0xNTM4LDYgKzE2NjgsNjUgQEAgcGdmZHdfYWJvcnRfY2xlYW51cChD b25uQ2FjaGVFbnRyeSAqZW50cnksIGJvb2wgdG9wbGV2ZWwpCiAJZW50cnktPmNoYW5naW5nX3hh Y3Rfc3RhdGUgPSBmYWxzZTsKIH0KIAorLyoKKyAqIExpa2UgcGdmZHdfYWJvcnRfY2xlYW51cCwg c3VibWl0IGFuIGFib3J0IGNvbW1hbmQgb3IgY2FuY2VsIHJlcXVlc3QsIGJ1dAorICogZG9uJ3Qg d2FpdCBmb3IgdGhlIHJlc3VsdC4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGFib3J0IGNv bW1hbmQgb3IgY2FuY2VsIHJlcXVlc3QgaXMgc3VjY2Vzc2Z1bGx5IGlzc3VlZCwKKyAqIGZhbHNl IG90aGVyd2lzZS4gIElmIHRoZSBhYm9ydCBjb21tYW5kIGlzIHN1Y2Nlc3NmdWxseSBpc3N1ZWQs IHRoZSBnaXZlbgorICogY29ubmVjdGlvbiBjYWNoZSBlbnRyeSBpcyBhcHBlbmRlZCB0byAqcGVu ZGluZ19lbnRyaWVzLiAgT3RoZXdpc2UsIGlmIHRoZQorICogY2FuY2VsIHJlcXVlc3QgaXMgc3Vj Y2Vzc2Z1bGx5IGlzc3VlZCwgaXQncyBhcHBlbmRlZCB0byAqY2FuY2VsX3JlcXVlc3RlZC4KKyAq Lworc3RhdGljIGJvb2wKK3BnZmR3X2Fib3J0X2NsZWFudXBfYmVnaW4oQ29ubkNhY2hlRW50cnkg KmVudHJ5LCBib29sIHRvcGxldmVsLAorCQkJCQkJICBMaXN0ICoqcGVuZGluZ19lbnRyaWVzLCBM aXN0ICoqY2FuY2VsX3JlcXVlc3RlZCkKK3sKKwkvKgorCSAqIERvbid0IHRyeSB0byBjbGVhbiB1 cCB0aGUgY29ubmVjdGlvbiBpZiB3ZSdyZSBhbHJlYWR5IGluIGVycm9yCisJICogcmVjdXJzaW9u IHRyb3VibGUuCisJICovCisJaWYgKGluX2Vycm9yX3JlY3Vyc2lvbl90cm91YmxlKCkpCisJCWVu dHJ5LT5jaGFuZ2luZ194YWN0X3N0YXRlID0gdHJ1ZTsKKworCS8qCisJICogSWYgY29ubmVjdGlv biBpcyBhbHJlYWR5IHVuc2FsdmFnZWFibGUsIGRvbid0IHRvdWNoIGl0IGZ1cnRoZXIuCisJICov CisJaWYgKGVudHJ5LT5jaGFuZ2luZ194YWN0X3N0YXRlKQorCQlyZXR1cm4gZmFsc2U7CisKKwkv KgorCSAqIE1hcmsgdGhpcyBjb25uZWN0aW9uIGFzIGluIHRoZSBwcm9jZXNzIG9mIGNoYW5naW5n IHRyYW5zYWN0aW9uIHN0YXRlLgorCSAqLworCWVudHJ5LT5jaGFuZ2luZ194YWN0X3N0YXRlID0g dHJ1ZTsKKworCS8qIEFzc3VtZSB3ZSBtaWdodCBoYXZlIGxvc3QgdHJhY2sgb2YgcHJlcGFyZWQg c3RhdGVtZW50cyAqLworCWVudHJ5LT5oYXZlX2Vycm9yID0gdHJ1ZTsKKworCS8qCisJICogSWYg YSBjb21tYW5kIGhhcyBiZWVuIHN1Ym1pdHRlZCB0byB0aGUgcmVtb3RlIHNlcnZlciBieSB1c2lu ZyBhbgorCSAqIGFzeW5jaHJvbm91cyBleGVjdXRpb24gZnVuY3Rpb24sIHRoZSBjb21tYW5kIG1p Z2h0IG5vdCBoYXZlIHlldAorCSAqIGNvbXBsZXRlZC4gIENoZWNrIHRvIHNlZSBpZiBhIGNvbW1h bmQgaXMgc3RpbGwgYmVpbmcgcHJvY2Vzc2VkIGJ5IHRoZQorCSAqIHJlbW90ZSBzZXJ2ZXIsIGFu ZCBpZiBzbywgcmVxdWVzdCBjYW5jZWxsYXRpb24gb2YgdGhlIGNvbW1hbmQuCisJICovCisJaWYg KFBRdHJhbnNhY3Rpb25TdGF0dXMoZW50cnktPmNvbm4pID09IFBRVFJBTlNfQUNUSVZFKQorCXsK KwkJaWYgKCFwZ2Zkd19jYW5jZWxfcXVlcnlfYmVnaW4oZW50cnktPmNvbm4pKQorCQkJcmV0dXJu IGZhbHNlOwkJLyogVW5hYmxlIHRvIGNhbmNlbCBydW5uaW5nIHF1ZXJ5ICovCisJCSpjYW5jZWxf cmVxdWVzdGVkID0gbGFwcGVuZCgqY2FuY2VsX3JlcXVlc3RlZCwgZW50cnkpOworCX0KKwllbHNl CisJeworCQljaGFyCQlzcWxbMTAwXTsKKworCQlDT05TVFJVQ1RfQUJPUlRfQ09NTUFORChzcWws IGVudHJ5LCB0b3BsZXZlbCk7CisJCWlmICghcGdmZHdfZXhlY19jbGVhbnVwX3F1ZXJ5X2JlZ2lu KGVudHJ5LT5jb25uLCBzcWwpKQorCQkJcmV0dXJuIGZhbHNlOwkJLyogVW5hYmxlIHRvIGFib3J0 IHJlbW90ZSB0cmFuc2FjdGlvbiAqLworCQkqcGVuZGluZ19lbnRyaWVzID0gbGFwcGVuZCgqcGVu ZGluZ19lbnRyaWVzLCBlbnRyeSk7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKIC8qCiAgKiBG aW5pc2ggcHJlLWNvbW1pdCBjbGVhbnVwIG9mIGNvbm5lY3Rpb25zIG9uIGVhY2ggb2Ygd2hpY2gg d2UndmUgc2VudCBhCiAgKiBDT01NSVQgY29tbWFuZCB0byB0aGUgcmVtb3RlIHNlcnZlci4KQEAg LTE2NDQsNiArMTgzMywxNjggQEAgcGdmZHdfZmluaXNoX3ByZV9zdWJjb21taXRfY2xlYW51cChM aXN0ICpwZW5kaW5nX2VudHJpZXMsIGludCBjdXJsZXZlbCkKIAl9CiB9CiAKKy8qCisgKiBGaW5p c2ggYWJvcnQgY2xlYW51cCBvZiBjb25uZWN0aW9ucyBvbiBlYWNoIG9mIHdoaWNoIHdlJ3ZlIHNl bnQgYW4gYWJvcnQKKyAqIGNvbW1hbmQgb3IgY2FuY2VsIHJlcXVlc3QgdG8gdGhlIHJlbW90ZSBz ZXJ2ZXIuCisgKi8KK3N0YXRpYyB2b2lkCitwZ2Zkd19maW5pc2hfYWJvcnRfY2xlYW51cChMaXN0 ICpwZW5kaW5nX2VudHJpZXMsIExpc3QgKmNhbmNlbF9yZXF1ZXN0ZWQsCisJCQkJCQkgICBib29s IHRvcGxldmVsKQoreworCUxpc3QJICAgKnBlbmRpbmdfZGVhbGxvY3MgPSBOSUw7CisJTGlzdENl bGwgICAqbGM7CisKKwkvKgorCSAqIEZvciBlYWNoIG9mIHRoZSBwZW5kaW5nIGNhbmNlbCByZXF1 ZXN0cyAoaWYgYW55KSwgZ2V0IGFuZCBkaXNjYXJkIHRoZQorCSAqIHJlc3VsdCBvZiB0aGUgcXVl cnksIGFuZCBzdWJtaXQgYW4gYWJvcnQgY29tbWFuZCB0byB0aGUgcmVtb3RlIHNlcnZlci4KKwkg Ki8KKwlpZiAoY2FuY2VsX3JlcXVlc3RlZCkKKwl7CisJCWZvcmVhY2gobGMsIGNhbmNlbF9yZXF1 ZXN0ZWQpCisJCXsKKwkJCUNvbm5DYWNoZUVudHJ5ICplbnRyeSA9IChDb25uQ2FjaGVFbnRyeSAq KSBsZmlyc3QobGMpOworCQkJVGltZXN0YW1wVHogZW5kdGltZTsKKwkJCWNoYXIJCXNxbFsxMDBd OworCisJCQlBc3NlcnQoZW50cnktPmNoYW5naW5nX3hhY3Rfc3RhdGUpOworCisJCQkvKgorCQkJ ICogU2V0IGVuZCB0aW1lLiAgWW91IG1pZ2h0IHRoaW5rIHdlIHNob3VsZCBkbyB0aGlzIGJlZm9y ZSBpc3N1aW5nCisJCQkgKiBjYW5jZWwgcmVxdWVzdCBsaWtlIGluIG5vcm1hbCBtb2RlLCBidXQg dGhhdCBpcyBwcm9ibGVtYXRpYywKKwkJCSAqIGJlY2F1c2UgaWYsIGZvciBleGFtcGxlLCBpdCB0 b29rIGxvbmdlciB0aGFuIDMwIHNlY29uZHMgdG8KKwkJCSAqIHByb2Nlc3MgdGhlIGZpcnN0IGZl dyBlbnRyaWVzIGluIHRoZSBjYW5jZWxfcmVxdWVzdGVkIGxpc3QsIGl0CisJCQkgKiB3b3VsZCBj YXVzZSBhIHRpbWVvdXQgZXJyb3Igd2hlbiBwcm9jZXNzaW5nIGVhY2ggb2YgdGhlCisJCQkgKiBy ZW1haW5pbmcgZW50cmllcyBpbiB0aGUgbGlzdCwgbGVhZGluZyB0byBzbGFtbWluZyB0aGF0IGVu dHJ5J3MKKwkJCSAqIGNvbm5lY3Rpb24gc2h1dC4KKwkJCSAqLworCQkJZW5kdGltZSA9IFRpbWVz dGFtcFR6UGx1c01pbGxpc2Vjb25kcyhHZXRDdXJyZW50VGltZXN0YW1wKCksCisJCQkJCQkJCQkJ CQkgIENPTk5FQ1RJT05fQ0xFQU5VUF9USU1FT1VUKTsKKworCQkJaWYgKCFwZ2Zkd19jYW5jZWxf cXVlcnlfZW5kKGVudHJ5LT5jb25uLCBlbmR0aW1lLCB0cnVlKSkKKwkJCXsKKwkJCQkvKiBVbmFi bGUgdG8gY2FuY2VsIHJ1bm5pbmcgcXVlcnkgKi8KKwkJCQlwZ2Zkd19yZXNldF94YWN0X3N0YXRl KGVudHJ5LCB0b3BsZXZlbCk7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCS8qIFNlbmQgYW4g YWJvcnQgY29tbWFuZCBpbiBwYXJhbGxlbCBpZiBuZWVkZWQgKi8KKwkJCUNPTlNUUlVDVF9BQk9S VF9DT01NQU5EKHNxbCwgZW50cnksIHRvcGxldmVsKTsKKwkJCWlmICghcGdmZHdfZXhlY19jbGVh bnVwX3F1ZXJ5X2JlZ2luKGVudHJ5LT5jb25uLCBzcWwpKQorCQkJeworCQkJCS8qIFVuYWJsZSB0 byBhYm9ydCByZW1vdGUgKHN1Yil0cmFuc2FjdGlvbiAqLworCQkJCXBnZmR3X3Jlc2V0X3hhY3Rf c3RhdGUoZW50cnksIHRvcGxldmVsKTsKKwkJCX0KKwkJCWVsc2UKKwkJCQlwZW5kaW5nX2VudHJp ZXMgPSBsYXBwZW5kKHBlbmRpbmdfZW50cmllcywgZW50cnkpOworCQl9CisJfQorCisJLyogTm8g ZnVydGhlciB3b3JrIGlmIG5vIHBlbmRpbmcgZW50cmllcyAqLworCWlmICghcGVuZGluZ19lbnRy aWVzKQorCQlyZXR1cm47CisKKwkvKgorCSAqIEdldCB0aGUgcmVzdWx0IG9mIHRoZSBhYm9ydCBj b21tYW5kIGZvciBlYWNoIG9mIHRoZSBwZW5kaW5nIGVudHJpZXMKKwkgKi8KKwlmb3JlYWNoKGxj LCBwZW5kaW5nX2VudHJpZXMpCisJeworCQlDb25uQ2FjaGVFbnRyeSAqZW50cnkgPSAoQ29ubkNh Y2hlRW50cnkgKikgbGZpcnN0KGxjKTsKKwkJVGltZXN0YW1wVHogZW5kdGltZTsKKwkJY2hhcgkJ c3FsWzEwMF07CisKKwkJQXNzZXJ0KGVudHJ5LT5jaGFuZ2luZ194YWN0X3N0YXRlKTsKKworCQkv KgorCQkgKiBTZXQgZW5kIHRpbWUuICBXZSBkbyB0aGlzIG5vdywgbm90IGJlZm9yZSBpc3N1aW5n IHRoZSBjb21tYW5kIGxpa2UKKwkJICogaW4gbm9ybWFsIG1vZGUsIGZvciB0aGUgc2FtZSByZWFz b24gYXMgZm9yIHRoZSBjYW5jZWxfcmVxdWVzdGVkCisJCSAqIGVudHJpZXMuCisJCSAqLworCQll bmR0aW1lID0gVGltZXN0YW1wVHpQbHVzTWlsbGlzZWNvbmRzKEdldEN1cnJlbnRUaW1lc3RhbXAo KSwKKwkJCQkJCQkJCQkJICBDT05ORUNUSU9OX0NMRUFOVVBfVElNRU9VVCk7CisKKwkJQ09OU1RS VUNUX0FCT1JUX0NPTU1BTkQoc3FsLCBlbnRyeSwgdG9wbGV2ZWwpOworCQlpZiAoIXBnZmR3X2V4 ZWNfY2xlYW51cF9xdWVyeV9lbmQoZW50cnktPmNvbm4sIHNxbCwgZW5kdGltZSwKKwkJCQkJCQkJ CQkgIHRydWUsIGZhbHNlKSkKKwkJeworCQkJLyogVW5hYmxlIHRvIGFib3J0IHJlbW90ZSAoc3Vi KXRyYW5zYWN0aW9uICovCisJCQlwZ2Zkd19yZXNldF94YWN0X3N0YXRlKGVudHJ5LCB0b3BsZXZl bCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICh0b3BsZXZlbCkKKwkJeworCQkJLyogRG8g YSBERUFMTE9DQVRFIEFMTCBpbiBwYXJhbGxlbCBpZiBuZWVkZWQgKi8KKwkJCWlmIChlbnRyeS0+ aGF2ZV9wcmVwX3N0bXQgJiYgZW50cnktPmhhdmVfZXJyb3IpCisJCQl7CisJCQkJaWYgKCFwZ2Zk d19leGVjX2NsZWFudXBfcXVlcnlfYmVnaW4oZW50cnktPmNvbm4sCisJCQkJCQkJCQkJCQkJIkRF QUxMT0NBVEUgQUxMIikpCisJCQkJeworCQkJCQkvKiBUcm91YmxlIGNsZWFyaW5nIHByZXBhcmVk IHN0YXRlbWVudHMgKi8KKwkJCQkJcGdmZHdfcmVzZXRfeGFjdF9zdGF0ZShlbnRyeSwgdG9wbGV2 ZWwpOworCQkJCX0KKwkJCQllbHNlCisJCQkJCXBlbmRpbmdfZGVhbGxvY3MgPSBsYXBwZW5kKHBl bmRpbmdfZGVhbGxvY3MsIGVudHJ5KTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWVudHJ5LT5o YXZlX3ByZXBfc3RtdCA9IGZhbHNlOworCQkJZW50cnktPmhhdmVfZXJyb3IgPSBmYWxzZTsKKwkJ fQorCisJCS8qIFJlc2V0IHRoZSBwZXItY29ubmVjdGlvbiBzdGF0ZSBpZiBuZWVkZWQgKi8KKwkJ aWYgKGVudHJ5LT5zdGF0ZS5wZW5kaW5nQXJlcSkKKwkJCW1lbXNldCgmZW50cnktPnN0YXRlLCAw LCBzaXplb2YoZW50cnktPnN0YXRlKSk7CisKKwkJLyogV2UncmUgZG9uZSB3aXRoIHRoaXMgZW50 cnk7IHVuc2V0IHRoZSBjaGFuZ2luZ194YWN0X3N0YXRlIGZsYWcgKi8KKwkJZW50cnktPmNoYW5n aW5nX3hhY3Rfc3RhdGUgPSBmYWxzZTsKKwkJcGdmZHdfcmVzZXRfeGFjdF9zdGF0ZShlbnRyeSwg dG9wbGV2ZWwpOworCX0KKworCS8qIE5vIGZ1cnRoZXIgd29yayBpZiBubyBwZW5kaW5nIGVudHJp ZXMgKi8KKwlpZiAoIXBlbmRpbmdfZGVhbGxvY3MpCisJCXJldHVybjsKKwlBc3NlcnQodG9wbGV2 ZWwpOworCisJLyoKKwkgKiBHZXQgdGhlIHJlc3VsdCBvZiB0aGUgREVBTExPQ0FURSBjb21tYW5k IGZvciBlYWNoIG9mIHRoZSBwZW5kaW5nCisJICogZW50cmllcworCSAqLworCWZvcmVhY2gobGMs IHBlbmRpbmdfZGVhbGxvY3MpCisJeworCQlDb25uQ2FjaGVFbnRyeSAqZW50cnkgPSAoQ29ubkNh Y2hlRW50cnkgKikgbGZpcnN0KGxjKTsKKwkJVGltZXN0YW1wVHogZW5kdGltZTsKKworCQlBc3Nl cnQoZW50cnktPmNoYW5naW5nX3hhY3Rfc3RhdGUpOworCQlBc3NlcnQoZW50cnktPmhhdmVfcHJl cF9zdG10KTsKKwkJQXNzZXJ0KGVudHJ5LT5oYXZlX2Vycm9yKTsKKworCQkvKgorCQkgKiBTZXQg ZW5kIHRpbWUuICBXZSBkbyB0aGlzIG5vdywgbm90IGJlZm9yZSBpc3N1aW5nIHRoZSBjb21tYW5k IGxpa2UKKwkJICogaW4gbm9ybWFsIG1vZGUsIGZvciB0aGUgc2FtZSByZWFzb24gYXMgZm9yIHRo ZSBjYW5jZWxfcmVxdWVzdGVkCisJCSAqIGVudHJpZXMuCisJCSAqLworCQllbmR0aW1lID0gVGlt ZXN0YW1wVHpQbHVzTWlsbGlzZWNvbmRzKEdldEN1cnJlbnRUaW1lc3RhbXAoKSwKKwkJCQkJCQkJ CQkJICBDT05ORUNUSU9OX0NMRUFOVVBfVElNRU9VVCk7CisKKwkJaWYgKCFwZ2Zkd19leGVjX2Ns ZWFudXBfcXVlcnlfZW5kKGVudHJ5LT5jb25uLCAiREVBTExPQ0FURSBBTEwiLAorCQkJCQkJCQkJ CSAgZW5kdGltZSwgdHJ1ZSwgdHJ1ZSkpCisJCXsKKwkJCS8qIFRyb3VibGUgY2xlYXJpbmcgcHJl cGFyZWQgc3RhdGVtZW50cyAqLworCQkJcGdmZHdfcmVzZXRfeGFjdF9zdGF0ZShlbnRyeSwgdG9w bGV2ZWwpOworCQkJY29udGludWU7CisJCX0KKwkJZW50cnktPmhhdmVfcHJlcF9zdG10ID0gZmFs c2U7CisJCWVudHJ5LT5oYXZlX2Vycm9yID0gZmFsc2U7CisKKwkJLyogUmVzZXQgdGhlIHBlci1j b25uZWN0aW9uIHN0YXRlIGlmIG5lZWRlZCAqLworCQlpZiAoZW50cnktPnN0YXRlLnBlbmRpbmdB cmVxKQorCQkJbWVtc2V0KCZlbnRyeS0+c3RhdGUsIDAsIHNpemVvZihlbnRyeS0+c3RhdGUpKTsK KworCQkvKiBXZSdyZSBkb25lIHdpdGggdGhpcyBlbnRyeTsgdW5zZXQgdGhlIGNoYW5naW5nX3hh Y3Rfc3RhdGUgZmxhZyAqLworCQllbnRyeS0+Y2hhbmdpbmdfeGFjdF9zdGF0ZSA9IGZhbHNlOwor CQlwZ2Zkd19yZXNldF94YWN0X3N0YXRlKGVudHJ5LCB0b3BsZXZlbCk7CisJfQorfQorCiAvKgog ICogTGlzdCBhY3RpdmUgZm9yZWlnbiBzZXJ2ZXIgY29ubmVjdGlvbnMuCiAgKgpkaWZmIC0tZ2l0 IGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvZXhwZWN0ZWQvcG9zdGdyZXNfZmR3Lm91dCBiL2NvbnRy aWIvcG9zdGdyZXNfZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zkdy5vdXQKaW5kZXggZjIxMGY5MTE4 OC4uZWQ1YmY5MjA4ZiAxMDA2NDQKLS0tIGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvZXhwZWN0ZWQv cG9zdGdyZXNfZmR3Lm91dAorKysgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9wb3N0 Z3Jlc19mZHcub3V0CkBAIC05NTA5LDcgKzk1MDksNyBAQCBETyAkZCQKICAgICBFTkQ7CiAkZCQ7 CiBFUlJPUjogIGludmFsaWQgb3B0aW9uICJwYXNzd29yZCIKLUhJTlQ6ICBWYWxpZCBvcHRpb25z IGluIHRoaXMgY29udGV4dCBhcmU6IHNlcnZpY2UsIHBhc3NmaWxlLCBjaGFubmVsX2JpbmRpbmcs IGNvbm5lY3RfdGltZW91dCwgZGJuYW1lLCBob3N0LCBob3N0YWRkciwgcG9ydCwgb3B0aW9ucywg YXBwbGljYXRpb25fbmFtZSwga2VlcGFsaXZlcywga2VlcGFsaXZlc19pZGxlLCBrZWVwYWxpdmVz X2ludGVydmFsLCBrZWVwYWxpdmVzX2NvdW50LCB0Y3BfdXNlcl90aW1lb3V0LCBzc2xtb2RlLCBz c2xjb21wcmVzc2lvbiwgc3NsY2VydCwgc3Nsa2V5LCBzc2xyb290Y2VydCwgc3NsY3JsLCBzc2xj cmxkaXIsIHNzbHNuaSwgcmVxdWlyZXBlZXIsIHNzbF9taW5fcHJvdG9jb2xfdmVyc2lvbiwgc3Ns X21heF9wcm90b2NvbF92ZXJzaW9uLCBnc3NlbmNtb2RlLCBrcmJzcnZuYW1lLCBnc3NsaWIsIHRh cmdldF9zZXNzaW9uX2F0dHJzLCB1c2VfcmVtb3RlX2VzdGltYXRlLCBmZHdfc3RhcnR1cF9jb3N0 LCBmZHdfdHVwbGVfY29zdCwgZXh0ZW5zaW9ucywgdXBkYXRhYmxlLCB0cnVuY2F0YWJsZSwgZmV0 Y2hfc2l6ZSwgYmF0Y2hfc2l6ZSwgYXN5bmNfY2FwYWJsZSwgcGFyYWxsZWxfY29tbWl0LCBrZWVw X2Nvbm5lY3Rpb25zCitISU5UOiAgVmFsaWQgb3B0aW9ucyBpbiB0aGlzIGNvbnRleHQgYXJlOiBz ZXJ2aWNlLCBwYXNzZmlsZSwgY2hhbm5lbF9iaW5kaW5nLCBjb25uZWN0X3RpbWVvdXQsIGRibmFt ZSwgaG9zdCwgaG9zdGFkZHIsIHBvcnQsIG9wdGlvbnMsIGFwcGxpY2F0aW9uX25hbWUsIGtlZXBh bGl2ZXMsIGtlZXBhbGl2ZXNfaWRsZSwga2VlcGFsaXZlc19pbnRlcnZhbCwga2VlcGFsaXZlc19j b3VudCwgdGNwX3VzZXJfdGltZW91dCwgc3NsbW9kZSwgc3NsY29tcHJlc3Npb24sIHNzbGNlcnQs IHNzbGtleSwgc3Nscm9vdGNlcnQsIHNzbGNybCwgc3NsY3JsZGlyLCBzc2xzbmksIHJlcXVpcmVw ZWVyLCBzc2xfbWluX3Byb3RvY29sX3ZlcnNpb24sIHNzbF9tYXhfcHJvdG9jb2xfdmVyc2lvbiwg Z3NzZW5jbW9kZSwga3Jic3J2bmFtZSwgZ3NzbGliLCB0YXJnZXRfc2Vzc2lvbl9hdHRycywgdXNl X3JlbW90ZV9lc3RpbWF0ZSwgZmR3X3N0YXJ0dXBfY29zdCwgZmR3X3R1cGxlX2Nvc3QsIGV4dGVu c2lvbnMsIHVwZGF0YWJsZSwgdHJ1bmNhdGFibGUsIGZldGNoX3NpemUsIGJhdGNoX3NpemUsIGFz eW5jX2NhcGFibGUsIHBhcmFsbGVsX2NvbW1pdCwgcGFyYWxsZWxfYWJvcnQsIGtlZXBfY29ubmVj dGlvbnMKIENPTlRFWFQ6ICBTUUwgc3RhdGVtZW50ICJBTFRFUiBTRVJWRVIgbG9vcGJhY2tfbm9w dyBPUFRJT05TIChBREQgcGFzc3dvcmQgJ2R1bW15cHcnKSIKIFBML3BnU1FMIGZ1bmN0aW9uIGlu bGluZV9jb2RlX2Jsb2NrIGxpbmUgMyBhdCBFWEVDVVRFCiAtLSBJZiB3ZSBhZGQgYSBwYXNzd29y ZCBmb3Igb3VyIHVzZXIgbWFwcGluZyBpbnN0ZWFkLCB3ZSBzaG91bGQgZ2V0IGEgZGlmZmVyZW50 CkBAIC0xMDkzNCwxMCArMTA5MzQsMTIgQEAgU0VMRUNUIHBnX3Rlcm1pbmF0ZV9iYWNrZW5kKHBp ZCwgMTgwMDAwKSBGUk9NIHBnX3N0YXRfYWN0aXZpdHkKIFJFU0VUIHBvc3RncmVzX2Zkdy5hcHBs aWNhdGlvbl9uYW1lOwogUkVTRVQgZGVidWdfZGlzY2FyZF9jYWNoZXM7CiAtLSA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 Ci0tLSB0ZXN0IHBhcmFsbGVsIGNvbW1pdAorLS0gdGVzdCBwYXJhbGxlbCBjb21taXQgYW5kIHBh cmFsbGVsIGFib3J0CiAtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CiBBTFRFUiBTRVJWRVIgbG9vcGJhY2sgT1BUSU9O UyAoQUREIHBhcmFsbGVsX2NvbW1pdCAndHJ1ZScpOworQUxURVIgU0VSVkVSIGxvb3BiYWNrIE9Q VElPTlMgKEFERCBwYXJhbGxlbF9hYm9ydCAndHJ1ZScpOwogQUxURVIgU0VSVkVSIGxvb3BiYWNr MiBPUFRJT05TIChBREQgcGFyYWxsZWxfY29tbWl0ICd0cnVlJyk7CitBTFRFUiBTRVJWRVIgbG9v cGJhY2syIE9QVElPTlMgKEFERCBwYXJhbGxlbF9hYm9ydCAndHJ1ZScpOwogQ1JFQVRFIFRBQkxF IHBsb2MxIChmMSBpbnQsIGYyIHRleHQpOwogQ1JFQVRFIEZPUkVJR04gVEFCTEUgcHJlbTEgKGYx IGludCwgZjIgdGV4dCkKICAgU0VSVkVSIGxvb3BiYWNrIE9QVElPTlMgKHRhYmxlX25hbWUgJ3Bs b2MxJyk7CkBAIC0xMTAwNyw1ICsxMTAwOSw1MiBAQCBTRUxFQ1QgKiBGUk9NIHByZW0yOwogIDIw NCB8IHF1eHF1eAogKDMgcm93cykKIAorQkVHSU47CitJTlNFUlQgSU5UTyBwcmVtMSBWQUxVRVMg KDEwNSwgJ3Rlc3QxJyk7CitJTlNFUlQgSU5UTyBwcmVtMiBWQUxVRVMgKDIwNSwgJ3Rlc3QyJyk7 CitBQk9SVDsKK1NFTEVDVCAqIEZST00gcHJlbTE7CisgZjEgIHwgICBmMiAgIAorLS0tLS0rLS0t LS0tLS0KKyAxMDEgfCBmb28KKyAxMDIgfCBmb29mb28KKyAxMDQgfCBiYXpiYXoKKygzIHJvd3Mp CisKK1NFTEVDVCAqIEZST00gcHJlbTI7CisgZjEgIHwgICBmMiAgIAorLS0tLS0rLS0tLS0tLS0K KyAyMDEgfCBiYXIKKyAyMDIgfCBiYXJiYXIKKyAyMDQgfCBxdXhxdXgKKygzIHJvd3MpCisKK0JF R0lOOworU0FWRVBPSU5UIHM7CitJTlNFUlQgSU5UTyBwcmVtMSBWQUxVRVMgKDEwNSwgJ3Rlc3Qx Jyk7CitJTlNFUlQgSU5UTyBwcmVtMiBWQUxVRVMgKDIwNSwgJ3Rlc3QyJyk7CitST0xMQkFDSyBU TyBTQVZFUE9JTlQgczsKK1JFTEVBU0UgU0FWRVBPSU5UIHM7CitJTlNFUlQgSU5UTyBwcmVtMSBW QUxVRVMgKDEwNSwgJ3Rlc3QxJyk7CitJTlNFUlQgSU5UTyBwcmVtMiBWQUxVRVMgKDIwNSwgJ3Rl c3QyJyk7CitBQk9SVDsKK1NFTEVDVCAqIEZST00gcHJlbTE7CisgZjEgIHwgICBmMiAgIAorLS0t LS0rLS0tLS0tLS0KKyAxMDEgfCBmb28KKyAxMDIgfCBmb29mb28KKyAxMDQgfCBiYXpiYXoKKygz IHJvd3MpCisKK1NFTEVDVCAqIEZST00gcHJlbTI7CisgZjEgIHwgICBmMiAgIAorLS0tLS0rLS0t LS0tLS0KKyAyMDEgfCBiYXIKKyAyMDIgfCBiYXJiYXIKKyAyMDQgfCBxdXhxdXgKKygzIHJvd3Mp CisKIEFMVEVSIFNFUlZFUiBsb29wYmFjayBPUFRJT05TIChEUk9QIHBhcmFsbGVsX2NvbW1pdCk7 CitBTFRFUiBTRVJWRVIgbG9vcGJhY2sgT1BUSU9OUyAoRFJPUCBwYXJhbGxlbF9hYm9ydCk7CiBB TFRFUiBTRVJWRVIgbG9vcGJhY2syIE9QVElPTlMgKERST1AgcGFyYWxsZWxfY29tbWl0KTsKK0FM VEVSIFNFUlZFUiBsb29wYmFjazIgT1BUSU9OUyAoRFJPUCBwYXJhbGxlbF9hYm9ydCk7CmRpZmYg LS1naXQgYS9jb250cmliL3Bvc3RncmVzX2Zkdy9vcHRpb24uYyBiL2NvbnRyaWIvcG9zdGdyZXNf ZmR3L29wdGlvbi5jCmluZGV4IDU3MjU5MWE1NTguLjU5Zjg2NWZhYzMgMTAwNjQ0Ci0tLSBhL2Nv bnRyaWIvcG9zdGdyZXNfZmR3L29wdGlvbi5jCisrKyBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3L29w dGlvbi5jCkBAIC0xMjIsNiArMTIyLDcgQEAgcG9zdGdyZXNfZmR3X3ZhbGlkYXRvcihQR19GVU5D VElPTl9BUkdTKQogCQkJc3RyY21wKGRlZi0+ZGVmbmFtZSwgInRydW5jYXRhYmxlIikgPT0gMCB8 fAogCQkJc3RyY21wKGRlZi0+ZGVmbmFtZSwgImFzeW5jX2NhcGFibGUiKSA9PSAwIHx8CiAJCQlz dHJjbXAoZGVmLT5kZWZuYW1lLCAicGFyYWxsZWxfY29tbWl0IikgPT0gMCB8fAorCQkJc3RyY21w KGRlZi0+ZGVmbmFtZSwgInBhcmFsbGVsX2Fib3J0IikgPT0gMCB8fAogCQkJc3RyY21wKGRlZi0+ ZGVmbmFtZSwgImtlZXBfY29ubmVjdGlvbnMiKSA9PSAwKQogCQl7CiAJCQkvKiB0aGVzZSBhY2Nl cHQgb25seSBib29sZWFuIHZhbHVlcyAqLwpAQCAtMjUxLDYgKzI1Miw3IEBAIEluaXRQZ0Zkd09w dGlvbnModm9pZCkKIAkJeyJhc3luY19jYXBhYmxlIiwgRm9yZWlnblNlcnZlclJlbGF0aW9uSWQs IGZhbHNlfSwKIAkJeyJhc3luY19jYXBhYmxlIiwgRm9yZWlnblRhYmxlUmVsYXRpb25JZCwgZmFs c2V9LAogCQl7InBhcmFsbGVsX2NvbW1pdCIsIEZvcmVpZ25TZXJ2ZXJSZWxhdGlvbklkLCBmYWxz ZX0sCisJCXsicGFyYWxsZWxfYWJvcnQiLCBGb3JlaWduU2VydmVyUmVsYXRpb25JZCwgZmFsc2V9 LAogCQl7ImtlZXBfY29ubmVjdGlvbnMiLCBGb3JlaWduU2VydmVyUmVsYXRpb25JZCwgZmFsc2V9 LAogCQl7InBhc3N3b3JkX3JlcXVpcmVkIiwgVXNlck1hcHBpbmdSZWxhdGlvbklkLCBmYWxzZX0s CiAKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3NxbC9wb3N0Z3Jlc19mZHcuc3Fs IGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvc3FsL3Bvc3RncmVzX2Zkdy5zcWwKaW5kZXggOTViNmI3 MTkyZS4uYmQyNjczOWQ5YSAxMDA2NDQKLS0tIGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvc3FsL3Bv c3RncmVzX2Zkdy5zcWwKKysrIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvc3FsL3Bvc3RncmVzX2Zk dy5zcWwKQEAgLTM1MTcsMTAgKzM1MTcsMTIgQEAgUkVTRVQgcG9zdGdyZXNfZmR3LmFwcGxpY2F0 aW9uX25hbWU7CiBSRVNFVCBkZWJ1Z19kaXNjYXJkX2NhY2hlczsKIAogLS0gPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot LS0gdGVzdCBwYXJhbGxlbCBjb21taXQKKy0tIHRlc3QgcGFyYWxsZWwgY29tbWl0IGFuZCBwYXJh bGxlbCBhYm9ydAogLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQogQUxURVIgU0VSVkVSIGxvb3BiYWNrIE9QVElPTlMg KEFERCBwYXJhbGxlbF9jb21taXQgJ3RydWUnKTsKK0FMVEVSIFNFUlZFUiBsb29wYmFjayBPUFRJ T05TIChBREQgcGFyYWxsZWxfYWJvcnQgJ3RydWUnKTsKIEFMVEVSIFNFUlZFUiBsb29wYmFjazIg T1BUSU9OUyAoQUREIHBhcmFsbGVsX2NvbW1pdCAndHJ1ZScpOworQUxURVIgU0VSVkVSIGxvb3Bi YWNrMiBPUFRJT05TIChBREQgcGFyYWxsZWxfYWJvcnQgJ3RydWUnKTsKIAogQ1JFQVRFIFRBQkxF IHBsb2MxIChmMSBpbnQsIGYyIHRleHQpOwogQ1JFQVRFIEZPUkVJR04gVEFCTEUgcHJlbTEgKGYx IGludCwgZjIgdGV4dCkKQEAgLTM1NTksNSArMzU2MSwyNiBAQCBDT01NSVQ7CiBTRUxFQ1QgKiBG Uk9NIHByZW0xOwogU0VMRUNUICogRlJPTSBwcmVtMjsKIAorQkVHSU47CitJTlNFUlQgSU5UTyBw cmVtMSBWQUxVRVMgKDEwNSwgJ3Rlc3QxJyk7CitJTlNFUlQgSU5UTyBwcmVtMiBWQUxVRVMgKDIw NSwgJ3Rlc3QyJyk7CitBQk9SVDsKK1NFTEVDVCAqIEZST00gcHJlbTE7CitTRUxFQ1QgKiBGUk9N IHByZW0yOworCitCRUdJTjsKK1NBVkVQT0lOVCBzOworSU5TRVJUIElOVE8gcHJlbTEgVkFMVUVT ICgxMDUsICd0ZXN0MScpOworSU5TRVJUIElOVE8gcHJlbTIgVkFMVUVTICgyMDUsICd0ZXN0Micp OworUk9MTEJBQ0sgVE8gU0FWRVBPSU5UIHM7CitSRUxFQVNFIFNBVkVQT0lOVCBzOworSU5TRVJU IElOVE8gcHJlbTEgVkFMVUVTICgxMDUsICd0ZXN0MScpOworSU5TRVJUIElOVE8gcHJlbTIgVkFM VUVTICgyMDUsICd0ZXN0MicpOworQUJPUlQ7CitTRUxFQ1QgKiBGUk9NIHByZW0xOworU0VMRUNU ICogRlJPTSBwcmVtMjsKKwogQUxURVIgU0VSVkVSIGxvb3BiYWNrIE9QVElPTlMgKERST1AgcGFy YWxsZWxfY29tbWl0KTsKK0FMVEVSIFNFUlZFUiBsb29wYmFjayBPUFRJT05TIChEUk9QIHBhcmFs bGVsX2Fib3J0KTsKIEFMVEVSIFNFUlZFUiBsb29wYmFjazIgT1BUSU9OUyAoRFJPUCBwYXJhbGxl bF9jb21taXQpOworQUxURVIgU0VSVkVSIGxvb3BiYWNrMiBPUFRJT05TIChEUk9QIHBhcmFsbGVs X2Fib3J0KTsKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9wb3N0Z3Jlcy1mZHcuc2dtbCBiL2Rv Yy9zcmMvc2dtbC9wb3N0Z3Jlcy1mZHcuc2dtbAppbmRleCBkOGRjNzE1NTg3Li5iODZiM2U5Y2Mz IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcG9zdGdyZXMtZmR3LnNnbWwKKysrIGIvZG9jL3Ny Yy9zZ21sL3Bvc3RncmVzLWZkdy5zZ21sCkBAIC00NjEsMTAgKzQ2MSwxMCBAQCBPUFRJT05TIChB REQgcGFzc3dvcmRfcmVxdWlyZWQgJ2ZhbHNlJyk7CiAKICAgIDxwYXJhPgogICAgIFdoZW4gbXVs dGlwbGUgcmVtb3RlIChzdWIpdHJhbnNhY3Rpb25zIGFyZSBpbnZvbHZlZCBpbiBhIGxvY2FsCi0g ICAgKHN1Yil0cmFuc2FjdGlvbiwgYnkgZGVmYXVsdCA8ZmlsZW5hbWU+cG9zdGdyZXNfZmR3PC9m aWxlbmFtZT4gY29tbWl0cwotICAgIHRob3NlIHJlbW90ZSAoc3ViKXRyYW5zYWN0aW9ucyBvbmUg Ynkgb25lIHdoZW4gdGhlIGxvY2FsIChzdWIpdHJhbnNhY3Rpb24KLSAgICBjb21taXRzLgotICAg IFBlcmZvcm1hbmNlIGNhbiBiZSBpbXByb3ZlZCB3aXRoIHRoZSBmb2xsb3dpbmcgb3B0aW9uOgor ICAgIChzdWIpdHJhbnNhY3Rpb24sIGJ5IGRlZmF1bHQgPGZpbGVuYW1lPnBvc3RncmVzX2Zkdzwv ZmlsZW5hbWU+IGNvbW1pdHMgb3IKKyAgICBhYm9ydHMgdGhvc2UgcmVtb3RlIChzdWIpdHJhbnNh Y3Rpb25zIG9uZSBieSBvbmUgd2hlbiB0aGUgbG9jYWwKKyAgICAoc3ViKXRyYW5zYWN0aW9uIGNv bW1pdHMgb3IgYWJvcnRzLgorICAgIFBlcmZvcm1hbmNlIGNhbiBiZSBpbXByb3ZlZCB3aXRoIHRo ZSBmb2xsb3dpbmcgb3B0aW9uczoKICAgIDwvcGFyYT4KIAogICAgPHZhcmlhYmxlbGlzdD4KQEAg LTQ3OSwyNyArNDc5LDQwIEBAIE9QVElPTlMgKEFERCBwYXNzd29yZF9yZXF1aXJlZCAnZmFsc2Un KTsKICAgICAgICBUaGlzIG9wdGlvbiBjYW4gb25seSBiZSBzcGVjaWZpZWQgZm9yIGZvcmVpZ24g c2VydmVycywgbm90IHBlci10YWJsZS4KICAgICAgICBUaGUgZGVmYXVsdCBpcyA8bGl0ZXJhbD5m YWxzZTwvbGl0ZXJhbD4uCiAgICAgICA8L3BhcmE+CisgICAgIDwvbGlzdGl0ZW0+CisgICAgPC92 YXJsaXN0ZW50cnk+CiAKKyAgICA8dmFybGlzdGVudHJ5PgorICAgICA8dGVybT48bGl0ZXJhbD5w YXJhbGxlbF9hYm9ydDwvbGl0ZXJhbD4gKDx0eXBlPmJvb2xlYW48L3R5cGU+KTwvdGVybT4KKyAg ICAgPGxpc3RpdGVtPgogICAgICAgPHBhcmE+Ci0gICAgICAgSWYgbXVsdGlwbGUgZm9yZWlnbiBz ZXJ2ZXJzIHdpdGggdGhpcyBvcHRpb24gZW5hYmxlZCBhcmUgaW52b2x2ZWQgaW4KLSAgICAgICBh IGxvY2FsIChzdWIpdHJhbnNhY3Rpb24sIG11bHRpcGxlIHJlbW90ZSAoc3ViKXRyYW5zYWN0aW9u cyBvcGVuZWQgb24KLSAgICAgICB0aG9zZSBmb3JlaWduIHNlcnZlcnMgaW4gdGhlIGxvY2FsIChz dWIpdHJhbnNhY3Rpb24gYXJlIGNvbW1pdHRlZCBpbgotICAgICAgIHBhcmFsbGVsIGFjcm9zcyB0 aG9zZSBmb3JlaWduIHNlcnZlcnMgd2hlbiB0aGUgbG9jYWwgKHN1Yil0cmFuc2FjdGlvbgotICAg ICAgIGNvbW1pdHMuCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgIEZvciBh IGZvcmVpZ24gc2VydmVyIHdpdGggdGhpcyBvcHRpb24gZW5hYmxlZCwgaWYgbWFueSByZW1vdGUK LSAgICAgICAoc3ViKXRyYW5zYWN0aW9ucyBhcmUgb3BlbmVkIG9uIHRoZSBmb3JlaWduIHNlcnZl ciBpbiBhIGxvY2FsCi0gICAgICAgKHN1Yil0cmFuc2FjdGlvbiwgdGhpcyBvcHRpb24gbWlnaHQg aW5jcmVhc2UgdGhlIHJlbW90ZSBzZXJ2ZXLigJlzIGxvYWQKLSAgICAgICB3aGVuIHRoZSBsb2Nh bCAoc3ViKXRyYW5zYWN0aW9uIGNvbW1pdHMsIHNvIGJlIGNhcmVmdWwgd2hlbiB1c2luZyB0aGlz Ci0gICAgICAgb3B0aW9uLgorICAgICAgIFRoaXMgb3B0aW9uIGNvbnRyb2xzIHdoZXRoZXIgPGZp bGVuYW1lPnBvc3RncmVzX2ZkdzwvZmlsZW5hbWU+IGFib3J0cworICAgICAgIHJlbW90ZSAoc3Vi KXRyYW5zYWN0aW9ucyBvcGVuZWQgb24gYSBmb3JlaWduIHNlcnZlciBpbiBhIGxvY2FsCisgICAg ICAgKHN1Yil0cmFuc2FjdGlvbiBpbiBwYXJhbGxlbCB3aGVuIHRoZSBsb2NhbCAoc3ViKXRyYW5z YWN0aW9uIGFib3J0cy4KKyAgICAgICBUaGlzIG9wdGlvbiBjYW4gb25seSBiZSBzcGVjaWZpZWQg Zm9yIGZvcmVpZ24gc2VydmVycywgbm90IHBlci10YWJsZS4KKyAgICAgICBUaGUgZGVmYXVsdCBp cyA8bGl0ZXJhbD5mYWxzZTwvbGl0ZXJhbD4uCiAgICAgICA8L3BhcmE+CiAgICAgIDwvbGlzdGl0 ZW0+CiAgICAgPC92YXJsaXN0ZW50cnk+CiAKICAgIDwvdmFyaWFibGVsaXN0PgogCisgICA8cGFy YT4KKyAgICBJZiBtdWx0aXBsZSBmb3JlaWduIHNlcnZlcnMgd2l0aCB0aGVzZSBvcHRpb25zIGVu YWJsZWQgYXJlIGludm9sdmVkIGluIGEKKyAgICBsb2NhbCAoc3ViKXRyYW5zYWN0aW9uLCBtdWx0 aXBsZSByZW1vdGUgKHN1Yil0cmFuc2FjdGlvbnMgb3BlbmVkIG9uIHRob3NlCisgICAgZm9yZWln biBzZXJ2ZXJzIGluIHRoZSBsb2NhbCAoc3ViKXRyYW5zYWN0aW9uIGFyZSBjb21taXR0ZWQgb3Ig YWJvcnRlZCBpbgorICAgIHBhcmFsbGVsIGFjcm9zcyB0aG9zZSBmb3JlaWduIHNlcnZlcnMgd2hl biB0aGUgbG9jYWwgKHN1Yil0cmFuc2FjdGlvbgorICAgIGNvbW1pdHMgb3IgYWJvcnRzLgorICAg PC9wYXJhPgorCisgICA8cGFyYT4KKyAgICBGb3IgYSBmb3JlaWduIHNlcnZlciB3aXRoIHRoZXNl IG9wdGlvbnMgZW5hYmxlZCwgaWYgbWFueSByZW1vdGUKKyAgICAoc3ViKXRyYW5zYWN0aW9ucyBh cmUgb3BlbmVkIG9uIHRoZSBmb3JlaWduIHNlcnZlciBpbiBhIGxvY2FsCisgICAgKHN1Yil0cmFu c2FjdGlvbiwgdGhlc2Ugb3B0aW9ucyBtaWdodCBpbmNyZWFzZSB0aGUgcmVtb3RlIHNlcnZlcuKA mXMgbG9hZAorICAgIHdoZW4gdGhlIGxvY2FsIChzdWIpdHJhbnNhY3Rpb24gY29tbWl0cyBvciBh Ym9ydHMsIHNvIGJlIGNhcmVmdWwgd2hlbgorICAgIHVzaW5nIHRoZXNlIG9wdGlvbnMuCisgICA8 L3BhcmE+CisKICAgPC9zZWN0Mz4KIAogICA8c2VjdDM+Cg== --000000000000dd1d2005daef5c5d--