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 1pX8kh-00073w-2H for pgsql-hackers@arkaria.postgresql.org; Tue, 28 Feb 2023 22:47:19 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pX8kf-0004iK-TS for pgsql-hackers@arkaria.postgresql.org; Tue, 28 Feb 2023 22:47:17 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pX8kf-0004iB-Dd for pgsql-hackers@lists.postgresql.org; Tue, 28 Feb 2023 22:47:17 +0000 Received: from mail-pj1-x1029.google.com ([2607:f8b0:4864:20::1029]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1pX8kb-0007BN-Qd for pgsql-hackers@lists.postgresql.org; Tue, 28 Feb 2023 22:47:17 +0000 Received: by mail-pj1-x1029.google.com with SMTP id m3-20020a17090ade0300b00229eec90a7fso2596561pjv.0 for ; Tue, 28 Feb 2023 14:47:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=timescale.com; s=google; t=1677624431; h=in-reply-to:content-language:references:cc:to:from:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=VNjbrCNy9XnOhOOt/aA34vRp0ugv3+sz8QyOS2VvQRU=; b=Rx0E/0vdOiE8qZxVWkyZzZst8da+jmHynwLGJM6WU3UgB7P4AGomMYu1pmAD3TFWz4 ExZGM1HuWulXMWz2K+G3QqsmqyJ+1orj0lliy5SNuu4emB+zmZXvcF6lUIIKveXUgP0R 1DAuEuQ4GRRD/rBCtu8zv98qRNFb97Ik04C8SQSOlVzeTUey0vIRUM3OOeVoyI6e778c tVaJAwgxT/jCy8IRJZsykd3W99RU3fOxZUex/3D3PaswPPxQKnfaPy9KtRCgQEoYPvqg thz7rwBLleH6oI0YHylWe4ayBY1fKbCG1RejLQ+C2/q2tkYFX40+2XSELzNxpO8Nb2YG hnuA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1677624431; h=in-reply-to:content-language:references:cc:to:from:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=VNjbrCNy9XnOhOOt/aA34vRp0ugv3+sz8QyOS2VvQRU=; b=Pp1qijlLJJndswbhf6rnL1cUC/JbDqGcCwgYuOZd1gKpAxrsUljJPOyqXvTu29fCRz Gz0c+RBT3NCdDQqnr4pk1Q0VaNpAI/WnGxS1nF1wX1JJN0KsrHSGZbnrrv1CZ/6uF8iQ Mjy9wAe6EwCvNrHhuxsnq6PS89P7WEQHj/MjMM9w9Kh6t16nTsO5wRumb6d8cxsGsFu5 EDGDKnskOPmirno81eI8Jy6lga7hh2dHfmFEoabvsBnudD3PqNsaCplAgLgGPkO/M0GE DoFdag1BnJffvDbw0Bv/G1mc5P8Y6AZA7V8Nq3TfhJNg0GidYL2iXepkGRcOiomo0kWS Q4uw== X-Gm-Message-State: AO0yUKU1OzLLN+rRoyS7VemjIhthCKv+kIG9eM46jTlSFBPviFX56KPS +9wdX8ysSiStbKbp/MnXH2PhgtxPK2t/5KF59cM= X-Google-Smtp-Source: AK7set94TClyQsPnLZ69vG6ulaGJ7SvEACY6uWLH2ar+kxIgQ7XBmPVhHst9xB+cGGzQmE10le5BYw== X-Received: by 2002:a17:90b:4d8e:b0:233:a6b7:3770 with SMTP id oj14-20020a17090b4d8e00b00233a6b73770mr5163601pjb.14.1677624430660; Tue, 28 Feb 2023 14:47:10 -0800 (PST) Received: from [192.168.1.21] ([50.53.8.205]) by smtp.gmail.com with ESMTPSA id j13-20020a17090a318d00b00230c8484fbfsm6563103pjb.55.2023.02.28.14.47.09 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 28 Feb 2023 14:47:10 -0800 (PST) Content-Type: multipart/mixed; boundary="------------95WPtNZKALGvHRS2U3D5sWZv" Message-ID: Date: Tue, 28 Feb 2023 14:47:09 -0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.7.1 Subject: Re: RFC: logical publication via inheritance root? From: Jacob Champion To: PostgreSQL Hackers Cc: Aleksander Alekseev References: Content-Language: en-US In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------95WPtNZKALGvHRS2U3D5sWZv Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Hi, I'm going to register this in CF for feedback. Summary for potential reviewers: we don't use declarative partitions in the Timescale partitioning scheme, but it'd be really nice to be able to replicate between our tables and standard tables, or between two Timescale-partitioned tables with different layouts. This patch lets extensions (or savvy users) upgrade an existing inheritance relationship between two tables into a "logical partition" relationship, so that they can be handled with the publish_via_partition_root machinery. I hope this might also help pg_partman users migrate between old- and new-style partition schemes, but that's speculation. On 1/20/23 09:53, Jacob Champion wrote: >> 2) While this strategy works well for ongoing replication, it's not >> enough to get the initial synchronization correct. The subscriber >> still does a COPY of the root table directly, missing out on all the >> logical descendant data. The publisher will have to tell the >> subscriber about the relationship somehow, and older subscriber >> versions won't understand how to use that (similar to how old >> subscribers can't correctly handle row filters). > > I partially solved this by having the subscriber pull the logical > hierarchy from the publisher to figure out which tables to COPY. This > works when publish_via_partition_root=true, but it doesn't correctly > return to the previous behavior when the setting is false. I need to > check the publication setting from the subscriber, too, but that opens > up the question of what to do if two different publications conflict. Second draft attached, which fixes that bug. I kept thinking to myself that this would be much easier if the publisher told the subscriber what data to copy rather than having the subscriber hardcode the initial sync process... and then I realized that I could, sort of, move in that direction. This version adds a SQL function to determine the list of source tables to COPY into a subscriber's target table. Now the publisher can make use of whatever catalogs it needs to make that list and the subscriber doesn't need to couple to them. (This could also provide a way for publishers to provide more generic "table indirection" in the future, but I'm wary of selling genericism as a feature here.) I haven't solved the problem where two publications of the same table have different settings for publish_via_partition_root. I was curious to see how the existing partition code prevented problems, but I'm not really sure that it does... Here are some situations where the existing implementation duplicates data on the initial sync: 1) A single subscription to two publications, one with publish_via_partition_root on and the other off, which publish the same partitioned table 2) A single subscription to two publications with publish_via_partition_root on, one of which publishes a root partition and the other of which publishes a descendant/leaf 3) A single subscription to two publications with publish_via_partition_root on, one of which publishes FOR ALL TABLES and the other of which publishes a descendant/leaf Is it expected that DBAs should avoid these cases, or are they worth pursuing with a bug fix? Thanks, --Jacob --------------95WPtNZKALGvHRS2U3D5sWZv Content-Type: text/x-patch; charset=UTF-8; name="WIP-introduce-pg_set_logical_root-for-use-with-pubvi.patch" Content-Disposition: attachment; filename*0="WIP-introduce-pg_set_logical_root-for-use-with-pubvi.patch" Content-Transfer-Encoding: base64 RnJvbSA2ZDMxZDEzZjlkN2M0MDBjZjcxNzQyNmM0ZjMzNmY3YWQxOWE0MzkxIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8amNoYW1waW9uQHRpbWVz Y2FsZS5jb20+CkRhdGU6IE1vbiwgMjYgU2VwIDIwMjIgMTM6MjM6NTEgLTA3MDAKU3ViamVj dDogW1BBVENIXSBXSVA6IGludHJvZHVjZSBwZ19zZXRfbG9naWNhbF9yb290IGZvciB1c2Ug d2l0aCBwdWJ2aWFyb290CgpBbGxvd3MgcmVndWxhciBpbmhlcml0ZWQgdGFibGVzIHRvIGJl IHB1Ymxpc2hlZCB2aWEgdGhlaXIgcm9vdCB0YWJsZSwKanVzdCBsaWtlIHBhcnRpdGlvbnMu IFRoaXMgd29ya3MgYnkgaGlqYWNraW5nIHBnX2luaGVyaXQncyBpbmhzZXFubwpjb2x1bW4s IGFuZCByZXBsYWNpbmcgYSAoc2luZ2xlKSBleGlzdGluZyBlbnRyeSBmb3IgdGhlIGNoaWxk IHdpdGggdGhlCnZhbHVlIHplcm8sIGluZGljYXRpbmcgdGhhdCBpdCBzaG91bGQgYmUgdHJl YXRlZCBhcyBhIGxvZ2ljYWwgcGFydGl0aW9uCmJ5IHRoZSBwdWJsaWNhdGlvbiBtYWNoaW5l cnkuCgpJbml0aWFsIHN5bmMgd29ya3MgYnkgYXNraW5nIHRoZSBwdWJsaXNoZXIgZm9yIGEg bGlzdCBvZiBsb2dpY2FsCmRlc2NlbmRhbnRzIG9mIHRoZSBwdWJsaXNoZWQgdGFibGUsIHRo ZW4gQ09QWWluZyB0aGVtIG9uZS1ieS1vbmUgaW50bwp0aGUgcm9vdC4gVGhlIHB1Ymxpc2hl ciByZXVzZXMgdGhlIGV4aXN0aW5nIHB1YnZpYXJvb3QgbG9naWMsIGFkZGluZyB0aGUKbmV3 IGxvZ2ljYWwgcm9vdHMgdG8gY29kZSB0aGF0IHByZXZpb3VzbHkgbG9va2VkIG9ubHkgZm9y IHBhcnRpdGlvbgpyb290cy4KCktub3duIGJ1Z3MvVE9ET3M6Ci0gVGhlIHBnX2luaGVyaXRz IG1hY2hpbmVyeSBkb2Vzbid0IHByb2hpYml0IGNoYW5nZXMgdG8gaW5oZXJpdGFuY2UKICBh ZnRlciBhbiBlbnRyeSBoYXMgYmVlbiBtYXJrZWQgYXMgYSBsb2dpY2FsIHJvb3QuCi0gSSBo YXZlbid0IGdpdmVuIGFueSB0aG91Z2h0IHRvIGludGVyYWN0aW9ucyB3aXRoIHJvdyBmaWx0 ZXJzLCBvciB0bwogIGNvbHVtbiBsaXN0cywgb3IgdG8gbXVsdGlwbGUgcHVibGljYXRpb25z IHdpdGggY29uZmxpY3RpbmcgcHVidmlhcm9vdAogIHNldHRpbmdzLgotIHBnX3NldF9sb2dp Y2FsX3Jvb3QoKSBkb2Vzbid0IGNoZWNrIGZvciB0YWJsZSBvd25lcnNoaXAgeWV0LiBBbnlv bmUKICBjYW4gbXVjayB3aXRoIHBnX2luaGVyaXRzIHRocm91Z2ggaXQuCi0gSSdtIG5vdCBz dXJlIHRoYXQgSSdtIHRha2luZyBhbGwgdGhlIG5lY2Vzc2FyeSBsb2NrcyB5ZXQsIGFuZCB0 aG9zZSBJCiAgZG8gdGFrZSBtYXkgYmUgdGFrZW4gaW4gdGhlIHdyb25nIG9yZGVyLgotLS0K IHNyYy9iYWNrZW5kL2NhdGFsb2cvcGdfaW5oZXJpdHMuYyAgICAgICAgICAgfCAyMDIgKysr KysrKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGljYXRpb24uYyAg ICAgICAgfCAxMjAgKysrKysrKysrLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRp b25jbWRzLmMgICAgICB8ICAxMCArCiBzcmMvYmFja2VuZC9wYXJ0aXRpb25pbmcvcGFydGRl c2MuYyAgICAgICAgIHwgICAzICstCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L3RhYmxlc3luYy5jIHwgMjM1ICsrKysrKysrKysrKystLS0tLS0KIHNyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMgfCAgNTQgKystLS0KIHNyYy9pbmNsdWRl L2NhdGFsb2cvcGdfaW5oZXJpdHMuaCAgICAgICAgICAgfCAgIDcgKy0KIHNyYy9pbmNsdWRl L2NhdGFsb2cvcGdfcHJvYy5kYXQgICAgICAgICAgICAgfCAgMTAgKwogc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9wdWJsaWNhdGlvbi5vdXQgICB8ICAzMiArKysKIHNyYy90ZXN0L3Jl Z3Jlc3Mvc3FsL3B1YmxpY2F0aW9uLnNxbCAgICAgICAgfCAgMjUgKysKIHNyYy90ZXN0L3N1 YnNjcmlwdGlvbi90LzAxM19wYXJ0aXRpb24ucGwgICAgfCAyMzkgKysrKysrKysrKysrKysr KysrKysKIDExIGZpbGVzIGNoYW5nZWQsIDgxNyBpbnNlcnRpb25zKCspLCAxMjAgZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19pbmhlcml0cy5j IGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19pbmhlcml0cy5jCmluZGV4IGRhOTY5YmQyZjku LjY1OWY1MTI1ZjEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfaW5oZXJp dHMuYworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX2luaGVyaXRzLmMKQEAgLTI0LDE0 ICsyNCwyMCBAQAogI2luY2x1ZGUgImFjY2Vzcy90YWJsZS5oIgogI2luY2x1ZGUgImNhdGFs b2cvaW5kZXhpbmcuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2luaGVyaXRzLmgiCisjaW5j bHVkZSAiY2F0YWxvZy9wYXJ0aXRpb24uaCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2VfdHlw ZS5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0 aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvZm1ncm9pZHMuaCIKKyNpbmNsdWRlICJ1dGlscy9m bWdycHJvdG9zLmgiCisjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5jbHVkZSAi dXRpbHMvbWVtdXRpbHMuaCIKICNpbmNsdWRlICJ1dGlscy9zbmFwbWdyLmgiCiAjaW5jbHVk ZSAidXRpbHMvc3lzY2FjaGUuaCIKIAorc3RhdGljIExpc3QgKiBmaW5kX2FsbF9pbmhlcml0 b3JzX2ludGVybmFsKE9pZCBwYXJlbnRyZWxJZCwgTE9DS01PREUgbG9ja21vZGUsCisJCQkJ CQkJCQkJICAgTGlzdCAqKm51bXBhcmVudHMsIGJvb2wgbG9naWNhbF9vbmx5KTsKKwogLyoK ICAqIEVudHJ5IG9mIGEgaGFzaCB0YWJsZSB1c2VkIGluIGZpbmRfYWxsX2luaGVyaXRvcnMu IFNlZSBiZWxvdy4KICAqLwpAQCAtNTksMTQgKzY1LDE0IEBAIExpc3QgKgogZmluZF9pbmhl cml0YW5jZV9jaGlsZHJlbihPaWQgcGFyZW50cmVsSWQsIExPQ0tNT0RFIGxvY2ttb2RlKQog ewogCXJldHVybiBmaW5kX2luaGVyaXRhbmNlX2NoaWxkcmVuX2V4dGVuZGVkKHBhcmVudHJl bElkLCB0cnVlLCBsb2NrbW9kZSwKLQkJCQkJCQkJCQkJICBOVUxMLCBOVUxMKTsKKwkJCQkJ CQkJCQkJICBOVUxMLCBOVUxMLCBmYWxzZSk7CiB9CiAKIC8qCiAgKiBmaW5kX2luaGVyaXRh bmNlX2NoaWxkcmVuX2V4dGVuZGVkCiAgKgogICogQXMgZmluZF9pbmhlcml0YW5jZV9jaGls ZHJlbiwgd2l0aCBtb3JlIG9wdGlvbnMgcmVnYXJkaW5nIGRldGFjaGVkCi0gKiBwYXJ0aXRp b25zLgorICogcGFydGl0aW9ucyBhbmQgbG9naWNhbCByb290cy4KICAqCiAgKiBJZiBhIHBh cnRpdGlvbidzIHBnX2luaGVyaXRzIHJvdyBpcyBtYXJrZWQgImRldGFjaCBwZW5kaW5nIiwK ICAqICpkZXRhY2hlZF9leGlzdCAoaWYgbm90IG51bGwpIGlzIHNldCB0cnVlLgpAQCAtNzgs MTYgKzg0LDIxIEBAIGZpbmRfaW5oZXJpdGFuY2VfY2hpbGRyZW4oT2lkIHBhcmVudHJlbElk LCBMT0NLTU9ERSBsb2NrbW9kZSkKICAqIHdoZXRoZXIgdGhlIHRyYW5zYWN0aW9uIHRoYXQg bWFya2VkIHRob3NlIHBhcnRpdGlvbnMgYXMgZGV0YWNoZWQgYXBwZWFycwogICogY29tbWl0 dGVkIHRvIHRoZSBhY3RpdmUgc25hcHNob3QuICBJbiBhZGRpdGlvbiwgKmRldGFjaGVkX3ht aW4gKGlmIG5vdCBudWxsKQogICogaXMgc2V0IHRvIHRoZSB4bWluIG9mIHRoZSByb3cgb2Yg dGhlIGRldGFjaGVkIHBhcnRpdGlvbi4KKyAqCisgKiBJZiBsb2dpY2FsX29ubHkgaXMgdHJ1 ZSwgb25seSB0YWJsZXMgbWFya2VkIGV4cGxpY2l0bHkgdmlhCisgKiBwZ19zZXRfbG9naWNh bF9yb290KCkgYXJlIGluY2x1ZGVkIGluIHRoZSBvdXRwdXQgbGlzdC4KICAqLwogTGlzdCAq CiBmaW5kX2luaGVyaXRhbmNlX2NoaWxkcmVuX2V4dGVuZGVkKE9pZCBwYXJlbnRyZWxJZCwg Ym9vbCBvbWl0X2RldGFjaGVkLAogCQkJCQkJCQkgICBMT0NLTU9ERSBsb2NrbW9kZSwgYm9v bCAqZGV0YWNoZWRfZXhpc3QsCi0JCQkJCQkJCSAgIFRyYW5zYWN0aW9uSWQgKmRldGFjaGVk X3htaW4pCisJCQkJCQkJCSAgIFRyYW5zYWN0aW9uSWQgKmRldGFjaGVkX3htaW4sCisJCQkJ CQkJCSAgIGJvb2wgbG9naWNhbF9vbmx5KQogewogCUxpc3QJICAgKmxpc3QgPSBOSUw7CiAJ UmVsYXRpb24JcmVsYXRpb247CisJT2lkCQkJaW5kZXg7CiAJU3lzU2NhbkRlc2Mgc2NhbjsK LQlTY2FuS2V5RGF0YSBrZXlbMV07CisJU2NhbktleURhdGEga2V5WzJdOwogCUhlYXBUdXBs ZQlpbmhlcml0c1R1cGxlOwogCU9pZAkJCWluaHJlbGlkOwogCU9pZAkJICAgKm9pZGFycjsK QEAgLTExMCwxNCArMTIxLDI0IEBAIGZpbmRfaW5oZXJpdGFuY2VfY2hpbGRyZW5fZXh0ZW5k ZWQoT2lkIHBhcmVudHJlbElkLCBib29sIG9taXRfZGV0YWNoZWQsCiAJbnVtb2lkcyA9IDA7 CiAKIAlyZWxhdGlvbiA9IHRhYmxlX29wZW4oSW5oZXJpdHNSZWxhdGlvbklkLCBBY2Nlc3NT aGFyZUxvY2spOworCWluZGV4ID0gSW5oZXJpdHNQYXJlbnRJbmRleElkOwogCiAJU2Nhbktl eUluaXQoJmtleVswXSwKIAkJCQlBbnVtX3BnX2luaGVyaXRzX2luaHBhcmVudCwKIAkJCQlC VEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCiAJCQkJT2JqZWN0SWRHZXREYXR1bShw YXJlbnRyZWxJZCkpOwogCi0Jc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2NhbihyZWxhdGlvbiwg SW5oZXJpdHNQYXJlbnRJbmRleElkLCB0cnVlLAotCQkJCQkJCSAgTlVMTCwgMSwga2V5KTsK KwlpZiAobG9naWNhbF9vbmx5KQorCXsKKwkJaW5kZXggPSBJbmhlcml0c1BhcmVudFNlcW5v SW5kZXhJZDsKKwkJU2NhbktleUluaXQoJmtleVsxXSwKKwkJCQkJQW51bV9wZ19pbmhlcml0 c19pbmhzZXFubywKKwkJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX0lOVDRFUSwKKwkJ CQkJSW50MzJHZXREYXR1bSgwKSk7CisJfQorCisJc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2Nh bihyZWxhdGlvbiwgaW5kZXgsIHRydWUsCisJCQkJCQkJICBOVUxMLCBsb2dpY2FsX29ubHkg PyAyIDogMSwga2V5KTsKIAogCXdoaWxlICgoaW5oZXJpdHNUdXBsZSA9IHN5c3RhYmxlX2dl dG5leHQoc2NhbikpICE9IE5VTEwpCiAJewpAQCAtMjU0LDYgKzI3NSwyMCBAQCBmaW5kX2lu aGVyaXRhbmNlX2NoaWxkcmVuX2V4dGVuZGVkKE9pZCBwYXJlbnRyZWxJZCwgYm9vbCBvbWl0 X2RldGFjaGVkLAogICovCiBMaXN0ICoKIGZpbmRfYWxsX2luaGVyaXRvcnMoT2lkIHBhcmVu dHJlbElkLCBMT0NLTU9ERSBsb2NrbW9kZSwgTGlzdCAqKm51bXBhcmVudHMpCit7CisJcmV0 dXJuIGZpbmRfYWxsX2luaGVyaXRvcnNfaW50ZXJuYWwocGFyZW50cmVsSWQsIGxvY2ttb2Rl LCBudW1wYXJlbnRzLAorCQkJCQkJCQkJCWZhbHNlKTsKK30KKworTGlzdCAqCitmaW5kX2Fs bF9sb2dpY2FsX2luaGVyaXRvcnMoT2lkIHBhcmVudHJlbElkKQoreworCXJldHVybiBmaW5k X2FsbF9pbmhlcml0b3JzX2ludGVybmFsKHBhcmVudHJlbElkLCBOb0xvY2ssIE5VTEwsIHRy dWUpOworfQorCitzdGF0aWMgTGlzdCAqCitmaW5kX2FsbF9pbmhlcml0b3JzX2ludGVybmFs KE9pZCBwYXJlbnRyZWxJZCwgTE9DS01PREUgbG9ja21vZGUsCisJCQkJCQkJIExpc3QgKipu dW1wYXJlbnRzLCBib29sIGxvZ2ljYWxfb25seSkKIHsKIAkvKiBoYXNoIHRhYmxlIGZvciBP KDEpIHJlbF9vaWQgLT4gcmVsX251bXBhcmVudHMgY2VsbCBsb29rdXAgKi8KIAlIVEFCCSAg ICpzZWVuX3JlbHM7CkBAIC0yOTAsNyArMzI1LDkgQEAgZmluZF9hbGxfaW5oZXJpdG9ycyhP aWQgcGFyZW50cmVsSWQsIExPQ0tNT0RFIGxvY2ttb2RlLCBMaXN0ICoqbnVtcGFyZW50cykK IAkJTGlzdENlbGwgICAqbGM7CiAKIAkJLyogR2V0IHRoZSBkaXJlY3QgY2hpbGRyZW4gb2Yg dGhpcyByZWwgKi8KLQkJY3VycmVudGNoaWxkcmVuID0gZmluZF9pbmhlcml0YW5jZV9jaGls ZHJlbihjdXJyZW50cmVsLCBsb2NrbW9kZSk7CisJCWN1cnJlbnRjaGlsZHJlbiA9CisJCQlm aW5kX2luaGVyaXRhbmNlX2NoaWxkcmVuX2V4dGVuZGVkKGN1cnJlbnRyZWwsIHRydWUsIGxv Y2ttb2RlLAorCQkJCQkJCQkJCQkgICBOVUxMLCBOVUxMLCBsb2dpY2FsX29ubHkpOwogCiAJ CS8qCiAJCSAqIEFkZCB0byB0aGUgcXVldWUgb25seSB0aG9zZSBjaGlsZHJlbiBub3QgYWxy ZWFkeSBzZWVuLiBUaGlzIGF2b2lkcwpAQCAtNjU1LDMgKzY5MiwxNTQgQEAgUGFydGl0aW9u SGFzUGVuZGluZ0RldGFjaChPaWQgcGFydG9pZCkKIAllbG9nKEVSUk9SLCAicmVsYXRpb24g JXUgaXMgbm90IGEgcGFydGl0aW9uIiwgcGFydG9pZCk7CiAJcmV0dXJuIGZhbHNlOwkJCQkv KiBrZWVwIGNvbXBpbGVyIHF1aWV0ICovCiB9CisKK3N0YXRpYyBPaWQKK2dldF9sb2dpY2Fs X3BhcmVudF93b3JrZXIoUmVsYXRpb24gaW5oUmVsLCBPaWQgcmVsaWQpCit7CisJU3lzU2Nh bkRlc2Mgc2NhbjsKKwlTY2FuS2V5RGF0YSBrZXlbMl07CisJT2lkCQkJcmVzdWx0ID0gSW52 YWxpZE9pZDsKKwlIZWFwVHVwbGUJdHVwbGU7CisKKwlTY2FuS2V5SW5pdCgma2V5WzBdLAor CQkJCUFudW1fcGdfaW5oZXJpdHNfaW5ocmVsaWQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVt YmVyLCBGX09JREVRLAorCQkJCU9iamVjdElkR2V0RGF0dW0ocmVsaWQpKTsKKwlTY2FuS2V5 SW5pdCgma2V5WzFdLAorCQkJCUFudW1fcGdfaW5oZXJpdHNfaW5oc2Vxbm8sCisJCQkJQlRF cXVhbFN0cmF0ZWd5TnVtYmVyLCBGX0lOVDRFUSwKKwkJCQlJbnQzMkdldERhdHVtKDApKTsK KworCXNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4oaW5oUmVsLCBJbmhlcml0c1JlbGlkU2Vx bm9JbmRleElkLCB0cnVlLAorCQkJCQkJCSAgTlVMTCwgMiwga2V5KTsKKwl0dXBsZSA9IHN5 c3RhYmxlX2dldG5leHQoc2Nhbik7CisJaWYgKEhlYXBUdXBsZUlzVmFsaWQodHVwbGUpKQor CXsKKwkJRm9ybV9wZ19pbmhlcml0cyBmb3JtID0gKEZvcm1fcGdfaW5oZXJpdHMpIEdFVFNU UlVDVCh0dXBsZSk7CisJCXJlc3VsdCA9IGZvcm0tPmluaHBhcmVudDsKKwl9CisKKwlzeXN0 YWJsZV9lbmRzY2FuKHNjYW4pOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZv aWQKK2dldF9sb2dpY2FsX2FuY2VzdG9yc193b3JrZXIoUmVsYXRpb24gaW5oUmVsLCBPaWQg cmVsaWQsIExpc3QgKiphbmNlc3RvcnMpCit7CisJT2lkCQkJcGFyZW50T2lkOworCisJLyoK KwkgKiBSZWN1cnNpb24gZW5kcyBhdCB0aGUgdG9wbW9zdCBsZXZlbCwgaWUuLCB3aGVuIHRo ZXJlJ3Mgbm8gcGFyZW50LgorCSAqLworCXBhcmVudE9pZCA9IGdldF9sb2dpY2FsX3BhcmVu dF93b3JrZXIoaW5oUmVsLCByZWxpZCk7CisJaWYgKHBhcmVudE9pZCA9PSBJbnZhbGlkT2lk KQorCQlyZXR1cm47CisKKwkqYW5jZXN0b3JzID0gbGFwcGVuZF9vaWQoKmFuY2VzdG9ycywg cGFyZW50T2lkKTsKKwlnZXRfbG9naWNhbF9hbmNlc3RvcnNfd29ya2VyKGluaFJlbCwgcGFy ZW50T2lkLCBhbmNlc3RvcnMpOworfQorCitMaXN0ICoKK2dldF9sb2dpY2FsX2FuY2VzdG9y cyhPaWQgcmVsaWQsIGJvb2wgaXNfcGFydGl0aW9uKQoreworCUxpc3QJICAgKnJlc3VsdCA9 IE5JTDsKKwlSZWxhdGlvbglpbmhSZWw7CisKKwkvKiBGb3IgcGFydGl0aW9ucywgdGhpcyBp cyBpZGVudGljYWwgdG8gZ2V0X3BhcnRpdGlvbl9hbmNlc3RvcnMoKS4gKi8KKwlpZiAoaXNf cGFydGl0aW9uKQorCQlyZXR1cm4gZ2V0X3BhcnRpdGlvbl9hbmNlc3RvcnMocmVsaWQpOwor CisJaW5oUmVsID0gdGFibGVfb3BlbihJbmhlcml0c1JlbGF0aW9uSWQsIEFjY2Vzc1NoYXJl TG9jayk7CisJZ2V0X2xvZ2ljYWxfYW5jZXN0b3JzX3dvcmtlcihpbmhSZWwsIHJlbGlkLCAm cmVzdWx0KTsKKwl0YWJsZV9jbG9zZShpbmhSZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwly ZXR1cm4gcmVzdWx0OworfQorCitib29sCitoYXNfbG9naWNhbF9wYXJlbnQoUmVsYXRpb24g aW5oUmVsLCBPaWQgcmVsaWQpCit7CisJcmV0dXJuIChnZXRfbG9naWNhbF9wYXJlbnRfd29y a2VyKGluaFJlbCwgcmVsaWQpICE9IEludmFsaWRPaWQpOworfQorCitEYXR1bQorcGdfc2V0 X2xvZ2ljYWxfcm9vdChQR19GVU5DVElPTl9BUkdTKQoreworCU9pZAkJCXRhYmxlb2lkID0g UEdfR0VUQVJHX09JRCgwKTsKKwlPaWQJCQlyb290b2lkID0gUEdfR0VUQVJHX09JRCgxKTsK KwljaGFyCSAgICp0YWJsZW5hbWU7CisJY2hhcgkgICAqcm9vdG5hbWU7CisJUmVsYXRpb24J aW5oUmVsOworCVNjYW5LZXlEYXRhIGtleTsKKwlTeXNTY2FuRGVzYyBzY2FuOworCU9pZAkJ CXBhcmVudCA9IEludmFsaWRPaWQ7CisJSGVhcFR1cGxlCXR1cGxlLCBjb3B5VHVwbGU7CisJ Rm9ybV9wZ19pbmhlcml0cyBmb3JtOworCisJLyoKKwkgKiBDaGVjayB0aGF0IHRoZSB0YWJs ZXMgZXhpc3QuCisJICogVE9ETzogY2hlY2sgaW5oZXJpdGFuY2UKKwkgKiBUT0RPOiBhbmQg aWRlbnRpY2FsIHNjaGVtYXMgdG9vPyBvciBkb2VzIHJlcGxpY2F0aW9uIGhhbmRsZSB0aGF0 PworCSAqIFRPRE86IGNoZWNrIG93bmVyc2hpcAorCSAqLworCXRhYmxlbmFtZSA9IGdldF9y ZWxfbmFtZSh0YWJsZW9pZCk7CisJaWYgKHRhYmxlbmFtZSA9PSBOVUxMKQorCQllcmVwb3J0 KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfVU5ERUZJTkVEX1RBQkxFKSwKKwkJCQkg ZXJybXNnKCJPSUQgJXUgZG9lcyBub3QgcmVmZXIgdG8gYSB0YWJsZSIsIHRhYmxlb2lkKSkp OworCXJvb3RuYW1lID0gZ2V0X3JlbF9uYW1lKHJvb3RvaWQpOworCWlmIChyb290bmFtZSA9 PSBOVUxMKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfVU5ERUZJ TkVEX1RBQkxFKSwKKwkJCQkgZXJybXNnKCJPSUQgJXUgZG9lcyBub3QgcmVmZXIgdG8gYSB0 YWJsZSIsIHJvb3RvaWQpKSk7CisKKwkvKiBPcGVuIHBnX2luaGVyaXRzIHdpdGggUm93RXhj bHVzaXZlTG9jayBzbyB0aGF0IHdlIGNhbiB1cGRhdGUgaXQuICovCisJaW5oUmVsID0gdGFi bGVfb3BlbihJbmhlcml0c1JlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJLyoK KwkgKiBXZSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBpbmhlcml0YW5jZSByZWxhdGlv bnNoaXAgYWxyZWFkeSBleGlzdHMsCisJICogYW5kIHRoYXQgdGhlcmUgaXMgb25seSBvbmUg ZXhpc3RpbmcgcGFyZW50IGZvciB0aGlzIHRhYmxlLgorCSAqCisJICogVE9ETzogZG8gd2Ug aGF2ZSB0byBsb2NrIHRoZSB0YWJsZXMgdGhlbXNlbHZlcyB0byBhdm9pZCByYWNlcz8KKwkg Ki8KKwlTY2FuS2V5SW5pdCgma2V5LAorCQkJCUFudW1fcGdfaW5oZXJpdHNfaW5ocmVsaWQs CisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCU9iamVjdElkR2V0 RGF0dW0odGFibGVvaWQpKTsKKworCXNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4oaW5oUmVs LCBJbmhlcml0c1JlbGlkU2Vxbm9JbmRleElkLCB0cnVlLAorCQkJCQkJCSAgTlVMTCwgMSwg JmtleSk7CisJdHVwbGUgPSBzeXN0YWJsZV9nZXRuZXh0KHNjYW4pOworCWlmIChIZWFwVHVw bGVJc1ZhbGlkKHR1cGxlKSkKKwl7CisJCWZvcm0gPSAoRm9ybV9wZ19pbmhlcml0cykgR0VU U1RSVUNUKHR1cGxlKTsKKwkJcGFyZW50ID0gZm9ybS0+aW5ocGFyZW50OworCQljb3B5VHVw bGUgPSBoZWFwX2NvcHl0dXBsZSh0dXBsZSk7CisKKwkJaWYgKEhlYXBUdXBsZUlzVmFsaWQo c3lzdGFibGVfZ2V0bmV4dChzY2FuKSkpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJy Y29kZShFUlJDT0RFX09CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NUQVRFKSwKKwkJCQkJ IGVycm1zZygidGFibGUgXCIlc1wiIGluaGVyaXRzIGZyb20gbXVsdGlwbGUgdGFibGVzIiwK KwkJCQkJCQl0YWJsZW5hbWUpKSk7CisJfQorCisJaWYgKHBhcmVudCAhPSByb290b2lkKQor CQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9Q UkVSRVFVSVNJVEVfU1RBVEUpLAorCQkJCSBlcnJtc2coInRhYmxlIFwiJXNcIiBkb2VzIG5v dCBpbmhlcml0IGZyb20gaW50ZW5kZWQgcm9vdCB0YWJsZSBcIiVzXCIiLAorCQkJCQkJdGFi bGVuYW1lLCByb290bmFtZSkpKTsKKworCXN5c3RhYmxlX2VuZHNjYW4oc2Nhbik7CisKKwkv KiBNYXJrIHRoZSBpbmhlcml0YW5jZSBhcyBhIGxvZ2ljYWwgcm9vdCBieSBzZXR0aW5nIGl0 IHRvIHplcm8uICovCisJZm9ybSA9IChGb3JtX3BnX2luaGVyaXRzKSBHRVRTVFJVQ1QoY29w eVR1cGxlKTsKKwlmb3JtLT5pbmhzZXFubyA9IDA7CisKKwlDYXRhbG9nVHVwbGVVcGRhdGUo aW5oUmVsLCAmY29weVR1cGxlLT50X3NlbGYsIGNvcHlUdXBsZSk7CisKKwloZWFwX2ZyZWV0 dXBsZShjb3B5VHVwbGUpOworCXRhYmxlX2Nsb3NlKGluaFJlbCwgUm93RXhjbHVzaXZlTG9j ayk7CisKKwlQR19SRVRVUk5fVk9JRCgpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv Y2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJs aWNhdGlvbi5jCmluZGV4IGE5OGZjYWQ0MjEuLjA0ZjdkYzgwOTkgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGljYXRpb24uYworKysgYi9zcmMvYmFja2VuZC9j YXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMKQEAgLTE3MiwxMSArMTcyLDExIEBAIHBnX3JlbGF0 aW9uX2lzX3B1Ymxpc2hhYmxlKFBHX0ZVTkNUSU9OX0FSR1MpCiB9CiAKIC8qCi0gKiBGaWx0 ZXIgb3V0IHRoZSBwYXJ0aXRpb25zIHdob3NlIHBhcmVudCB0YWJsZXMgd2VyZSBhbHNvIHNw ZWNpZmllZCBpbgorICogRmlsdGVyIG91dCB0aGUgdGFibGVzIHdob3NlIGxvZ2ljYWwgcGFy ZW50IHRhYmxlcyB3ZXJlIGFsc28gc3BlY2lmaWVkIGluCiAgKiB0aGUgcHVibGljYXRpb24u CiAgKi8KIHN0YXRpYyBMaXN0ICoKLWZpbHRlcl9wYXJ0aXRpb25zKExpc3QgKnJlbGlkcykK K2ZpbHRlcl9sb2dpY2FsX2Rlc2NlbmRhbnRzKExpc3QgKnJlbGlkcykKIHsKIAlMaXN0CSAg ICpyZXN1bHQgPSBOSUw7CiAJTGlzdENlbGwgICAqbGM7CkBAIC0xODgsOCArMTg4LDcgQEAg ZmlsdGVyX3BhcnRpdGlvbnMoTGlzdCAqcmVsaWRzKQogCQlMaXN0CSAgICphbmNlc3RvcnMg PSBOSUw7CiAJCU9pZAkJCXJlbGlkID0gbGZpcnN0X29pZChsYyk7CiAKLQkJaWYgKGdldF9y ZWxfcmVsaXNwYXJ0aXRpb24ocmVsaWQpKQotCQkJYW5jZXN0b3JzID0gZ2V0X3BhcnRpdGlv bl9hbmNlc3RvcnMocmVsaWQpOworCQlhbmNlc3RvcnMgPSBnZXRfbG9naWNhbF9hbmNlc3Rv cnMocmVsaWQsIGdldF9yZWxfcmVsaXNwYXJ0aXRpb24ocmVsaWQpKTsKIAogCQlmb3JlYWNo KGxjMiwgYW5jZXN0b3JzKQogCQl7CkBAIC03ODIsMTEgKzc4MSwxNSBAQCBMaXN0ICoKIEdl dEFsbFRhYmxlc1B1YmxpY2F0aW9uUmVsYXRpb25zKGJvb2wgcHVidmlhcm9vdCkKIHsKIAlS ZWxhdGlvbgljbGFzc1JlbDsKKwlSZWxhdGlvbglpbmhSZWw7CiAJU2NhbktleURhdGEga2V5 WzFdOwogCVRhYmxlU2NhbkRlc2Mgc2NhbjsKIAlIZWFwVHVwbGUJdHVwbGU7CiAJTGlzdAkg ICAqcmVzdWx0ID0gTklMOwogCisJLyogVE9ETzogaXMgdGhlcmUgYSByZXF1aXJlZCBvcmRl ciB0byBhY3F1aXJlIHRoZXNlIGxvY2tzPyAqLworCWlmIChwdWJ2aWFyb290KQorCQlpbmhS ZWwgPSB0YWJsZV9vcGVuKEluaGVyaXRzUmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsK IAljbGFzc1JlbCA9IHRhYmxlX29wZW4oUmVsYXRpb25SZWxhdGlvbklkLCBBY2Nlc3NTaGFy ZUxvY2spOwogCiAJU2NhbktleUluaXQoJmtleVswXSwKQEAgLTgwMiw3ICs4MDUsOCBAQCBH ZXRBbGxUYWJsZXNQdWJsaWNhdGlvblJlbGF0aW9ucyhib29sIHB1YnZpYXJvb3QpCiAJCU9p ZAkJCXJlbGlkID0gcmVsRm9ybS0+b2lkOwogCiAJCWlmIChpc19wdWJsaXNoYWJsZV9jbGFz cyhyZWxpZCwgcmVsRm9ybSkgJiYKLQkJCSEocmVsRm9ybS0+cmVsaXNwYXJ0aXRpb24gJiYg cHVidmlhcm9vdCkpCisJCQkhKHJlbEZvcm0tPnJlbGlzcGFydGl0aW9uICYmIHB1YnZpYXJv b3QpICYmCisJCQkhKHB1YnZpYXJvb3QgJiYgaGFzX2xvZ2ljYWxfcGFyZW50KGluaFJlbCwg cmVsaWQpKSkKIAkJCXJlc3VsdCA9IGxhcHBlbmRfb2lkKHJlc3VsdCwgcmVsaWQpOwogCX0K IApAQCAtODMxLDYgKzgzNSw5IEBAIEdldEFsbFRhYmxlc1B1YmxpY2F0aW9uUmVsYXRpb25z KGJvb2wgcHVidmlhcm9vdCkKIAl9CiAKIAl0YWJsZV9jbG9zZShjbGFzc1JlbCwgQWNjZXNz U2hhcmVMb2NrKTsKKwlpZiAocHVidmlhcm9vdCkKKwkJdGFibGVfY2xvc2UoaW5oUmVsLCBB Y2Nlc3NTaGFyZUxvY2spOworCiAJcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTA3NiwxNSAr MTA4MywxNCBAQCBwZ19nZXRfcHVibGljYXRpb25fdGFibGVzKFBHX0ZVTkNUSU9OX0FSR1Mp CiAJCQl0YWJsZXMgPSBsaXN0X2NvbmNhdF91bmlxdWVfb2lkKHJlbGlkcywgc2NoZW1hcmVs aWRzKTsKIAogCQkJLyoKLQkJCSAqIElmIHRoZSBwdWJsaWNhdGlvbiBwdWJsaXNoZXMgcGFy dGl0aW9uIGNoYW5nZXMgdmlhIHRoZWlyCi0JCQkgKiByZXNwZWN0aXZlIHJvb3QgcGFydGl0 aW9uZWQgdGFibGVzLCB3ZSBtdXN0IGV4Y2x1ZGUgcGFydGl0aW9ucwotCQkJICogaW4gZmF2 b3Igb2YgaW5jbHVkaW5nIHRoZSByb290IHBhcnRpdGlvbmVkIHRhYmxlcy4gT3RoZXJ3aXNl LAotCQkJICogdGhlIGZ1bmN0aW9uIGNvdWxkIHJldHVybiBib3RoIHRoZSBjaGlsZCBhbmQg cGFyZW50IHRhYmxlcwotCQkJICogd2hpY2ggY291bGQgY2F1c2UgZGF0YSBvZiB0aGUgY2hp bGQgdGFibGUgdG8gYmUKLQkJCSAqIGRvdWJsZS1wdWJsaXNoZWQgb24gdGhlIHN1YnNjcmli ZXIgc2lkZS4KKwkJCSAqIElmIHRoZSBwdWJsaWNhdGlvbiBwdWJsaXNoZXMgdGFibGUgY2hh bmdlcyB2aWEgdGhlaXIgcmVzcGVjdGl2ZQorCQkJICogbG9naWNhbCByb290IHRhYmxlcywg d2UgbXVzdCBleGNsdWRlIGxvZ2ljYWwgZGVzY2VuZGFudHMgaW4gZmF2b3IKKwkJCSAqIG9m IGluY2x1ZGluZyB0aGUgcm9vdCB0YWJsZXMuIE90aGVyd2lzZSwgdGhlIGZ1bmN0aW9uIGNv dWxkCisJCQkgKiByZXR1cm4gYm90aCB0aGUgY2hpbGQgYW5kIHBhcmVudCB0YWJsZXMgd2hp Y2ggY291bGQgY2F1c2UgZGF0YSBvZgorCQkJICogdGhlIGNoaWxkIHRhYmxlIHRvIGJlIGRv dWJsZS1wdWJsaXNoZWQgb24gdGhlIHN1YnNjcmliZXIgc2lkZS4KIAkJCSAqLwogCQkJaWYg KHB1YmxpY2F0aW9uLT5wdWJ2aWFyb290KQotCQkJCXRhYmxlcyA9IGZpbHRlcl9wYXJ0aXRp b25zKHRhYmxlcyk7CisJCQkJdGFibGVzID0gZmlsdGVyX2xvZ2ljYWxfZGVzY2VuZGFudHMo dGFibGVzKTsKIAkJfQogCiAJCS8qIENvbnN0cnVjdCBhIHR1cGxlIGRlc2NyaXB0b3IgZm9y IHRoZSByZXN1bHQgcm93cy4gKi8KQEAgLTExOTAsMyArMTE5Niw5MyBAQCBwZ19nZXRfcHVi bGljYXRpb25fdGFibGVzKFBHX0ZVTkNUSU9OX0FSR1MpCiAKIAlTUkZfUkVUVVJOX0RPTkUo ZnVuY2N0eCk7CiB9CisKKy8qCisgKiBSZXR1cm5zIGEgbGlzdCBvZiB0YWJsZXMgdGhhdCBz aG91bGQgYmUgY29waWVkIGR1cmluZyBpbml0aWFsIHN5bmMgZm9yIHRoZQorICogZ2l2ZW4g cm9vdCB0YWJsZSBhbmQgcHVibGljYXRpb24uCisgKgorICogVGhlIG9ubHkgdGltZSB0aGlz IGxpc3QgY29uc2lzdHMgb2YgYW55dGhpbmcgbW9yZSB0aGFuIHRoZSB0YWJsZSBpdHNlbGYg aXMKKyAqIHdoZW4gYSBwdWJsaWNhdGlvbidzIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290 IGlzIHNldCB0byB0cnVlIGFuZCB0aGUgdGFibGUKKyAqIGhhcyBpbmhlcml0ZWQgY2hpbGQg dGFibGVzIGluIHRoZSBwdWJsaWNhdGlvbiB0aGF0IGhhdmUgYmVlbiBtYXJrZWQgd2l0aAor ICogcGdfc2V0X2xvZ2ljYWxfcm9vdCgpLgorICovCitEYXR1bQorcGdfZ2V0X3B1YmxpY2F0 aW9uX3JlbHNfdG9fc3luYyhQR19GVU5DVElPTl9BUkdTKQoreworI2RlZmluZSBOVU1fU1lO Q19UQUJMRVNfRUxFTQkxCisJRnVuY0NhbGxDb250ZXh0ICpmdW5jY3R4OworCU9pZAkJCXJv b3RpZCA9IFBHX0dFVEFSR19PSUQoMCk7CisJY2hhcgkgICAqcHVibmFtZSA9IHRleHRfdG9f Y3N0cmluZyhQR19HRVRBUkdfVEVYVF9QUCgxKSk7CisJTGlzdAkgICAqdGFibGVzOworCisJ Lyogc3R1ZmYgZG9uZSBvbmx5IG9uIHRoZSBmaXJzdCBjYWxsIG9mIHRoZSBmdW5jdGlvbiAq LworCWlmIChTUkZfSVNfRklSU1RDQUxMKCkpCisJeworCQlNZW1vcnlDb250ZXh0IG9sZGNv bnRleHQ7CisJCVB1YmxpY2F0aW9uICpwdWJsaWNhdGlvbjsKKworCQkvKiBjcmVhdGUgYSBm dW5jdGlvbiBjb250ZXh0IGZvciBjcm9zcy1jYWxsIHBlcnNpc3RlbmNlICovCisJCWZ1bmNj dHggPSBTUkZfRklSU1RDQUxMX0lOSVQoKTsKKworCQkvKiBzd2l0Y2ggdG8gbWVtb3J5IGNv bnRleHQgYXBwcm9wcmlhdGUgZm9yIG11bHRpcGxlIGZ1bmN0aW9uIGNhbGxzICovCisJCW9s ZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oZnVuY2N0eC0+bXVsdGlfY2FsbF9t ZW1vcnlfY3R4KTsKKworCQlwdWJsaWNhdGlvbiA9IEdldFB1YmxpY2F0aW9uQnlOYW1lKHB1 Ym5hbWUsIGZhbHNlKTsKKworCQkvKiBUT0RPOiBkbyB0aGUgdGFibGVzIGluIHRoaXMgbGlz dCBuZWVkIHRvIGJlIGxvY2tlZD8gKi8KKwkJaWYgKHB1YmxpY2F0aW9uLT5wdWJ2aWFyb290 KQorCQkJdGFibGVzID0gZmluZF9hbGxfbG9naWNhbF9pbmhlcml0b3JzKHJvb3RpZCk7CisJ CWVsc2UKKwkJCXRhYmxlcyA9IGxpc3RfbWFrZTFfb2lkKHJvb3RpZCk7CisKKwkJaWYgKCFw dWJsaWNhdGlvbi0+YWxsdGFibGVzKQorCQl7CisJCQlMaXN0CSAgICpyZWxpZHM7CisJCQlM aXN0CSAgICpzY2hlbWFyZWxpZHM7CisJCQlMaXN0CSAgICpwdWJsaXNoZWQ7CisJCQlMaXN0 CSAgICpyZXN1bHQgPSBOSUw7CisJCQlMaXN0Q2VsbCAgICpjZWxsOworCisJCQkvKgorCQkJ ICogRmlsdGVyIG91ciBsaXN0IG9mIHRhYmxlcyB0byB0aG9zZSB0aGF0IGFyZSBhY3R1YWxs eSBpbmNsdWRlZCBpbgorCQkJICogdGhlIHB1YmxpY2F0aW9uLgorCQkJICovCisJCQlyZWxp ZHMgPSBHZXRQdWJsaWNhdGlvblJlbGF0aW9ucyhwdWJsaWNhdGlvbi0+b2lkLAorCQkJCQkJ CQkJCQkgcHVibGljYXRpb24tPnB1YnZpYXJvb3QgPworCQkJCQkJCQkJCQkgUFVCTElDQVRJ T05fUEFSVF9ST09UIDoKKwkJCQkJCQkJCQkJIFBVQkxJQ0FUSU9OX1BBUlRfQUxMKTsKKwkJ CXNjaGVtYXJlbGlkcyA9IEdldEFsbFNjaGVtYVB1YmxpY2F0aW9uUmVsYXRpb25zKHB1Ymxp Y2F0aW9uLT5vaWQsCisJCQkJCQkJCQkJCQkJCQlwdWJsaWNhdGlvbi0+cHVidmlhcm9vdCA/ CisJCQkJCQkJCQkJCQkJCQlQVUJMSUNBVElPTl9QQVJUX1JPT1QgOgorCQkJCQkJCQkJCQkJ CQkJUFVCTElDQVRJT05fUEFSVF9MRUFGKTsKKwkJCXB1Ymxpc2hlZCA9IGxpc3RfY29uY2F0 X3VuaXF1ZV9vaWQocmVsaWRzLCBzY2hlbWFyZWxpZHMpOworCisJCQlmb3JlYWNoKGNlbGws IHRhYmxlcykKKwkJCXsKKwkJCQlPaWQJCWN1cnJlbnQgPSBsZmlyc3Rfb2lkKGNlbGwpOwor CisJCQkJaWYgKGxpc3RfbWVtYmVyX29pZChwdWJsaXNoZWQsIGN1cnJlbnQpKQorCQkJCQly ZXN1bHQgPSBsYXBwZW5kX29pZChyZXN1bHQsIGN1cnJlbnQpOworCQkJfQorCisJCQl0YWJs ZXMgPSByZXN1bHQ7CisJCX0KKworCQlmdW5jY3R4LT51c2VyX2ZjdHggPSAodm9pZCAqKSB0 YWJsZXM7CisKKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCX0KKwor CS8qIHN0dWZmIGRvbmUgb24gZXZlcnkgY2FsbCBvZiB0aGUgZnVuY3Rpb24gKi8KKwlmdW5j Y3R4ID0gU1JGX1BFUkNBTExfU0VUVVAoKTsKKwl0YWJsZXMgPSAoTGlzdCAqKSBmdW5jY3R4 LT51c2VyX2ZjdHg7CisKKwlpZiAoZnVuY2N0eC0+Y2FsbF9jbnRyIDwgbGlzdF9sZW5ndGgo dGFibGVzKSkKKwl7CisJCU9pZAkJCXJlbGlkID0gbGlzdF9udGhfb2lkKHRhYmxlcywgZnVu Y2N0eC0+Y2FsbF9jbnRyKTsKKworCQlTUkZfUkVUVVJOX05FWFQoZnVuY2N0eCwgT2JqZWN0 SWRHZXREYXR1bShyZWxpZCkpOworCX0KKworCVNSRl9SRVRVUk5fRE9ORShmdW5jY3R4KTsK K30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5j IGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMKaW5kZXggZjRiYTU3 MjY5Ny4uN2UyM2JlZDZjMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVi bGljYXRpb25jbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25j bWRzLmMKQEAgLTIzOCw2ICsyMzgsOCBAQCBjb250YWluX2ludmFsaWRfcmZjb2x1bW5fd2Fs a2VyKE5vZGUgKm5vZGUsIHJmX2NvbnRleHQgKmNvbnRleHQpCiAJCSAqIHBhcmVudCB0YWJs ZSwgYnV0IHRoZSBiaXRtYXAgY29udGFpbnMgdGhlIHJlcGxpY2EgaWRlbnRpdHkKIAkJICog aW5mb3JtYXRpb24gb2YgdGhlIGNoaWxkIHRhYmxlLiBTbywgZ2V0IHRoZSBjb2x1bW4gbnVt YmVyIG9mIHRoZQogCQkgKiBjaGlsZCB0YWJsZSBhcyBwYXJlbnQgYW5kIGNoaWxkIGNvbHVt biBvcmRlciBjb3VsZCBiZSBkaWZmZXJlbnQuCisJCSAqCisJCSAqIFRPRE86IGlzIHRoaXMg YXBwbGljYWJsZSB0byBwZ19zZXRfbG9naWNhbF9yb290KCk/CiAJCSAqLwogCQlpZiAoY29u dGV4dC0+cHVidmlhcm9vdCkKIAkJewpAQCAtMjg2LDYgKzI4OCw4IEBAIHB1Yl9yZl9jb250 YWluc19pbnZhbGlkX2NvbHVtbihPaWQgcHViaWQsIFJlbGF0aW9uIHJlbGF0aW9uLCBMaXN0 ICphbmNlc3RvcnMsCiAJICoKIAkgKiBOb3RlIHRoYXQgZXZlbiB0aG91Z2ggdGhlIHJvdyBm aWx0ZXIgdXNlZCBpcyBmb3IgYW4gYW5jZXN0b3IsIHRoZQogCSAqIFJFUExJQ0EgSURFTlRJ VFkgdXNlZCB3aWxsIGJlIGZvciB0aGUgYWN0dWFsIGNoaWxkIHRhYmxlLgorCSAqCisJICog VE9ETzogaXMgdGhpcyBhcHBsaWNhYmxlIHRvIHBnX3NldF9sb2dpY2FsX3Jvb3QoKT8KIAkg Ki8KIAlpZiAocHVidmlhcm9vdCAmJiByZWxhdGlvbi0+cmRfcmVsLT5yZWxpc3BhcnRpdGlv bikKIAl7CkBAIC0zMzYsNiArMzQwLDggQEAgcHViX3JmX2NvbnRhaW5zX2ludmFsaWRfY29s dW1uKE9pZCBwdWJpZCwgUmVsYXRpb24gcmVsYXRpb24sIExpc3QgKmFuY2VzdG9ycywKICAq IHRoZSBjb2x1bW4gbGlzdC4KICAqCiAgKiBSZXR1cm5zIHRydWUgaWYgYW55IHJlcGxpY2Eg aWRlbnRpdHkgY29sdW1uIGlzIG5vdCBjb3ZlcmVkIGJ5IGNvbHVtbiBsaXN0LgorICoKKyAq IFRPRE86IHBnX3NldF9sb2dpY2FsX3Jvb3QoKT8KICAqLwogYm9vbAogcHViX2NvbGxpc3Rf Y29udGFpbnNfaW52YWxpZF9jb2x1bW4oT2lkIHB1YmlkLCBSZWxhdGlvbiByZWxhdGlvbiwg TGlzdCAqYW5jZXN0b3JzLApAQCAtNjI4LDYgKzYzNCw4IEBAIFRyYW5zZm9ybVB1YldoZXJl Q2xhdXNlcyhMaXN0ICp0YWJsZXMsIGNvbnN0IGNoYXIgKnF1ZXJ5U3RyaW5nLAogCQkgKiBJ ZiB0aGUgcHVibGljYXRpb24gZG9lc24ndCBwdWJsaXNoIGNoYW5nZXMgdmlhIHRoZSByb290 IHBhcnRpdGlvbmVkCiAJCSAqIHRhYmxlLCB0aGUgcGFydGl0aW9uJ3Mgcm93IGZpbHRlciB3 aWxsIGJlIHVzZWQuIFNvIGRpc2FsbG93IHVzaW5nCiAJCSAqIFdIRVJFIGNsYXVzZSBvbiBw YXJ0aXRpb25lZCB0YWJsZSBpbiB0aGlzIGNhc2UuCisJCSAqCisJCSAqIFRPRE86IGRlY2lk ZSBob3cgdGhpcyBpbnRlcmFjdHMgd2l0aCBwZ19zZXRfbG9naWNhbF9yb290CiAJCSAqLwog CQlpZiAoIXB1YnZpYXJvb3QgJiYKIAkJCXByaS0+cmVsYXRpb24tPnJkX3JlbC0+cmVsa2lu ZCA9PSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFKQpAQCAtNzE1LDYgKzcyMyw4IEBAIENo ZWNrUHViUmVsYXRpb25Db2x1bW5MaXN0KGNoYXIgKnB1Ym5hbWUsIExpc3QgKnRhYmxlcywK IAkJICogSWYgdGhlIHB1YmxpY2F0aW9uIGRvZXNuJ3QgcHVibGlzaCBjaGFuZ2VzIHZpYSB0 aGUgcm9vdCBwYXJ0aXRpb25lZAogCQkgKiB0YWJsZSwgdGhlIHBhcnRpdGlvbidzIGNvbHVt biBsaXN0IHdpbGwgYmUgdXNlZC4gU28gZGlzYWxsb3cgdXNpbmcKIAkJICogYSBjb2x1bW4g bGlzdCBvbiB0aGUgcGFydGl0aW9uZWQgdGFibGUgaW4gdGhpcyBjYXNlLgorCQkgKgorCQkg KiBUT0RPOiBkZWNpZGUgaWYgdGhpcyBpbnRlcmFjdHMgd2l0aCBwZ19zZXRfbG9naWNhbF9y b290KCkKIAkJICovCiAJCWlmICghcHVidmlhcm9vdCAmJgogCQkJcHJpLT5yZWxhdGlvbi0+ cmRfcmVsLT5yZWxraW5kID09IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9wYXJ0aXRpb25pbmcvcGFydGRlc2MuYyBiL3NyYy9iYWNrZW5k L3BhcnRpdGlvbmluZy9wYXJ0ZGVzYy5jCmluZGV4IGRlMDZjYWNjZDIuLjJlMzQ5ODMxMTcg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnRpdGlvbmluZy9wYXJ0ZGVzYy5jCisrKyBi L3NyYy9iYWNrZW5kL3BhcnRpdGlvbmluZy9wYXJ0ZGVzYy5jCkBAIC0xNjIsNyArMTYyLDgg QEAgUmVsYXRpb25CdWlsZFBhcnRpdGlvbkRlc2MoUmVsYXRpb24gcmVsLCBib29sIG9taXRf ZGV0YWNoZWQpCiAJaW5ob2lkcyA9IGZpbmRfaW5oZXJpdGFuY2VfY2hpbGRyZW5fZXh0ZW5k ZWQoUmVsYXRpb25HZXRSZWxpZChyZWwpLAogCQkJCQkJCQkJCQkJIG9taXRfZGV0YWNoZWQs IE5vTG9jaywKIAkJCQkJCQkJCQkJCSAmZGV0YWNoZWRfZXhpc3QsCi0JCQkJCQkJCQkJCQkg JmRldGFjaGVkX3htaW4pOworCQkJCQkJCQkJCQkJICZkZXRhY2hlZF94bWluLAorCQkJCQkJ CQkJCQkJIGZhbHNlKTsKIAogCW5wYXJ0cyA9IGxpc3RfbGVuZ3RoKGluaG9pZHMpOwogCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3RhYmxlc3luYy5j IGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC90YWJsZXN5bmMuYwppbmRleCAw N2VlYTUwNGJhLi4xNGRjZjJhODI1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL3RhYmxlc3luYy5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvdGFibGVzeW5jLmMKQEAgLTc1NiwxMSArNzU2LDEyIEBAIGNvcHlfcmVhZF9k YXRhKHZvaWQgKm91dGJ1ZiwgaW50IG1pbnJlYWQsIGludCBtYXhyZWFkKQogLyoKICAqIEdl dCBpbmZvcm1hdGlvbiBhYm91dCByZW1vdGUgcmVsYXRpb24gaW4gc2ltaWxhciBmYXNoaW9u IHRoZSBSRUxBVElPTgogICogbWVzc2FnZSBwcm92aWRlcyBkdXJpbmcgcmVwbGljYXRpb24u IFRoaXMgZnVuY3Rpb24gYWxzbyByZXR1cm5zIHRoZSByZWxhdGlvbgotICogcXVhbGlmaWNh dGlvbnMgdG8gYmUgdXNlZCBpbiB0aGUgQ09QWSBjb21tYW5kLgorICogcXVhbGlmaWNhdGlv bnMgdG8gYmUgdXNlZCBpbiB0aGUgQ09QWSBjb21tYW5kLCBhbmQgdGhlIGxpc3Qgb2YgdGFi bGVzIHRvIENPUFkKKyAqICh3aGljaCBmb3IgbW9zdCB0YWJsZXMgd2lsbCBjb250YWluIG9u bHkgb25lIGVudHJ5KS4KICAqLwogc3RhdGljIHZvaWQKIGZldGNoX3JlbW90ZV90YWJsZV9p bmZvKGNoYXIgKm5zcG5hbWUsIGNoYXIgKnJlbG5hbWUsCi0JCQkJCQlMb2dpY2FsUmVwUmVs YXRpb24gKmxyZWwsIExpc3QgKipxdWFsKQorCQkJCQkJTG9naWNhbFJlcFJlbGF0aW9uICps cmVsLCBMaXN0ICoqcXVhbCwgTGlzdCAqKnRvX2NvcHkpCiB7CiAJV2FsUmN2RXhlY1Jlc3Vs dCAqcmVzOwogCVN0cmluZ0luZm9EYXRhIGNtZDsKQEAgLTEwNzEsNiArMTA3Miw4NyBAQCBm ZXRjaF9yZW1vdGVfdGFibGVfaW5mbyhjaGFyICpuc3BuYW1lLCBjaGFyICpyZWxuYW1lLAog CQl3YWxyY3ZfY2xlYXJfcmVzdWx0KHJlcyk7CiAJfQogCisJLyoKKwkgKiBTZWUgaWYgdGhl cmUgYXJlIGFueSBvdGhlciB0YWJsZXMgdG8gYmUgY29waWVkIGJlc2lkZXMgdGhlIG9yaWdp bmFsLiBUaGlzCisJICogaGFwcGVucyB3aGVuIGEgZGVzY2VuZGFudCBpbiB0aGUgaW5oZXJp dGFuY2UgcmVsYXRpb25zaGlwIGlzIG1hcmtlZCB3aXRoCisJICogcGdfc2V0X2xvZ2ljYWxf cm9vdCgpIGFuZCBpcyBwYXJ0IG9mIGEgcHVibGljYXRpb24gd2l0aAorCSAqIHB1Ymxpc2hf dmlhX3BhcnRpdGlvbl9yb290ID0gdHJ1ZS4KKwkgKgorCSAqIEZJWE1FOiBpZiB0d28gcHVi bGljYXRpb25zIGhhdmUgY29uZmxpY3Rpbmcgc2V0dGluZ3MgZm9yCisJICogcHVibGlzaF92 aWFfcGFydGl0aW9uX3Jvb3QsIHRoaXMgYmVoYXZlcyBzdHJhbmdlbHkuIEl0IGxvb2tzIGxp a2UgdGhhdCdzCisJICogdHJ1ZSBmb3IgcmVndWxhciBwYXJ0aXRpb25zIHRvby4uLgorCSAq LworCWlmICh3YWxyY3Zfc2VydmVyX3ZlcnNpb24oTG9nUmVwV29ya2VyV2FsUmN2Q29ubikg Pj0gMTYwMDAwKQorCXsKKwkJT2lkCQkJZGVzY1Jvd1tdID0ge1RFWFRPSUQsIFRFWFRPSUR9 OworCQlTdHJpbmdJbmZvRGF0YSBwdWJfbmFtZXM7CisKKwkJLyogQnVpbGQgdGhlIHB1Ym5h bWUgbGlzdC4gKi8KKwkJaW5pdFN0cmluZ0luZm8oJnB1Yl9uYW1lcyk7CisJCWZvcmVhY2go bGMsIE15U3Vic2NyaXB0aW9uLT5wdWJsaWNhdGlvbnMpCisJCXsKKwkJCWNoYXIJICAgKnB1 Ym5hbWUgPSBzdHJWYWwobGZpcnN0KGxjKSk7CisKKwkJCWlmIChmb3JlYWNoX2N1cnJlbnRf aW5kZXgobGMpID4gMCkKKwkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZwdWJfbmFtZXMs ICIsICIpOworCisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZwdWJfbmFtZXMsIHF1b3Rl X2xpdGVyYWxfY3N0cihwdWJuYW1lKSk7CisJCX0KKworCQkvKgorCQkgKiBBc2sgdGhlIHNl cnZlciB3aGF0IGl0IHdhbnRzIHVzIHRvIHN5bmMuCisJCSAqLworCQlyZXNldFN0cmluZ0lu Zm8oJmNtZCk7CisJCWFwcGVuZFN0cmluZ0luZm8oJmNtZCwKKwkJCQkJCSAiU0VMRUNUIERJ U1RJTkNUIG4ubnNwbmFtZSwgYy5yZWxuYW1lIgorCQkJCQkJICIgIEZST00gcGdfY2F0YWxv Zy5wZ19wdWJsaWNhdGlvbiBwLCIKKwkJCQkJCSAiICAgICAgIHBnX2NhdGFsb2cucGdfY2xh c3MgYyIKKwkJCQkJCSAiICBKT0lOIHBnX2NhdGFsb2cucGdfbmFtZXNwYWNlIG4iCisJCQkJ CQkgIiAgICBPTiAoYy5yZWxuYW1lc3BhY2UgPSBuLm9pZCkiCisJCQkJCQkgIiAgSk9JTiBM QVRFUkFMIHBnX2NhdGFsb2cucGdfZ2V0X3B1YmxpY2F0aW9uX3JlbHNfdG9fc3luYygldTo6 cmVnY2xhc3MsIHAucHVibmFtZSkgcmVsaWQiCisJCQkJCQkgIiAgICBPTiAoYy5vaWQgPSBy ZWxpZCkiCisJCQkJCQkgIiBXSEVSRSBwLnB1Ym5hbWUgSU4gKCAlcyApIiwKKwkJCQkJCSBs cmVsLT5yZW1vdGVpZCwgcHViX25hbWVzLmRhdGEpOworCisJCXJlcyA9IHdhbHJjdl9leGVj KExvZ1JlcFdvcmtlcldhbFJjdkNvbm4sIGNtZC5kYXRhLAorCQkJCQkJICBsZW5ndGhvZihk ZXNjUm93KSwgZGVzY1Jvdyk7CisKKwkJaWYgKHJlcy0+c3RhdHVzICE9IFdBTFJDVl9PS19U VVBMRVMpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJybXNnKCJjb3VsZCBub3QgZmV0 Y2ggbG9naWNhbCBkZXNjZW5kYW50cyBmb3IgdGFibGUgXCIlcy4lc1wiIGZyb20gcHVibGlz aGVyOiAlcyIsCisJCQkJCQkJbnNwbmFtZSwgcmVsbmFtZSwgcmVzLT5lcnIpKSk7CisKKwkJ c2xvdCA9IE1ha2VTaW5nbGVUdXBsZVRhYmxlU2xvdChyZXMtPnR1cGxlZGVzYywgJlRUU09w c01pbmltYWxUdXBsZSk7CisJCXdoaWxlICh0dXBsZXN0b3JlX2dldHR1cGxlc2xvdChyZXMt PnR1cGxlc3RvcmUsIHRydWUsIGZhbHNlLCBzbG90KSkKKwkJeworCQkJY2hhcgkgICAqZGVz Y19uc3BuYW1lOworCQkJY2hhcgkgICAqZGVzY19yZWxuYW1lOworCQkJY2hhcgkgICAqcXVv dGVkOworCisJCQlkZXNjX25zcG5hbWUgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKHNsb3RfZ2V0 YXR0cihzbG90LCAxLCAmaXNudWxsKSk7CisJCQlBc3NlcnQoIWlzbnVsbCk7CisJCQlkZXNj X3JlbG5hbWUgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKHNsb3RfZ2V0YXR0cihzbG90LCAyLCAm aXNudWxsKSk7CisJCQlBc3NlcnQoIWlzbnVsbCk7CisKKwkJCXF1b3RlZCA9IHF1b3RlX3F1 YWxpZmllZF9pZGVudGlmaWVyKGRlc2NfbnNwbmFtZSwgZGVzY19yZWxuYW1lKTsKKwkJCSp0 b19jb3B5ID0gbGFwcGVuZCgqdG9fY29weSwgcXVvdGVkKTsKKworCQkJRXhlY0NsZWFyVHVw bGUoc2xvdCk7CisJCX0KKworCQlFeGVjRHJvcFNpbmdsZVR1cGxlVGFibGVTbG90KHNsb3Qp OworCQl3YWxyY3ZfY2xlYXJfcmVzdWx0KHJlcyk7CisKKwkJcGZyZWUocHViX25hbWVzLmRh dGEpOworCX0KKwllbHNlCisJeworCQkvKiBGb3Igb2xkZXIgc2VydmVycywgd2Ugb25seSBD T1BZIHRoZSB0YWJsZSBpdHNlbGYuICovCisJCWNoYXIgICAqcXVvdGVkID0gcXVvdGVfcXVh bGlmaWVkX2lkZW50aWZpZXIobHJlbC0+bnNwbmFtZSwKKwkJCQkJCQkJCQkJCQlscmVsLT5y ZWxuYW1lKTsKKwkJKnRvX2NvcHkgPSBsYXBwZW5kKCp0b19jb3B5LCBxdW90ZWQpOworCX0K KwogCXBmcmVlKGNtZC5kYXRhKTsKIH0KIApAQCAtMTA4NSw2ICsxMTY3LDggQEAgY29weV90 YWJsZShSZWxhdGlvbiByZWwpCiAJTG9naWNhbFJlcFJlbE1hcEVudHJ5ICpyZWxtYXBlbnRy eTsKIAlMb2dpY2FsUmVwUmVsYXRpb24gbHJlbDsKIAlMaXN0CSAgICpxdWFsID0gTklMOwor CUxpc3QJICAgKnRvX2NvcHkgPSBOSUw7CisJTGlzdENlbGwgICAqY3VyOwogCVdhbFJjdkV4 ZWNSZXN1bHQgKnJlczsKIAlTdHJpbmdJbmZvRGF0YSBjbWQ7CiAJQ29weUZyb21TdGF0ZSBj c3RhdGU7CkBAIC0xMDkzLDcgKzExNzcsOCBAQCBjb3B5X3RhYmxlKFJlbGF0aW9uIHJlbCkK IAogCS8qIEdldCB0aGUgcHVibGlzaGVyIHJlbGF0aW9uIGluZm8uICovCiAJZmV0Y2hfcmVt b3RlX3RhYmxlX2luZm8oZ2V0X25hbWVzcGFjZV9uYW1lKFJlbGF0aW9uR2V0TmFtZXNwYWNl KHJlbCkpLAotCQkJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCksICZscmVsLCAm cXVhbCk7CisJCQkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSwgJmxyZWwsICZx dWFsLAorCQkJCQkJCSZ0b19jb3B5KTsKIAogCS8qIFB1dCB0aGUgcmVsYXRpb24gaW50byBy ZWxtYXAuICovCiAJbG9naWNhbHJlcF9yZWxtYXBfdXBkYXRlKCZscmVsKTsKQEAgLTExMDIs OTIgKzExODcsOTYgQEAgY29weV90YWJsZShSZWxhdGlvbiByZWwpCiAJcmVsbWFwZW50cnkg PSBsb2dpY2FscmVwX3JlbF9vcGVuKGxyZWwucmVtb3RlaWQsIE5vTG9jayk7CiAJQXNzZXJ0 KHJlbCA9PSByZWxtYXBlbnRyeS0+bG9jYWxyZWwpOwogCi0JLyogU3RhcnQgY29weSBvbiB0 aGUgcHVibGlzaGVyLiAqLwotCWluaXRTdHJpbmdJbmZvKCZjbWQpOwotCi0JLyogUmVndWxh ciB0YWJsZSB3aXRoIG5vIHJvdyBmaWx0ZXIgKi8KLQlpZiAobHJlbC5yZWxraW5kID09IFJF TEtJTkRfUkVMQVRJT04gJiYgcXVhbCA9PSBOSUwpCisJZm9yZWFjaChjdXIsIHRvX2NvcHkp CiAJewotCQlhcHBlbmRTdHJpbmdJbmZvKCZjbWQsICJDT1BZICVzICgiLAotCQkJCQkJIHF1 b3RlX3F1YWxpZmllZF9pZGVudGlmaWVyKGxyZWwubnNwbmFtZSwgbHJlbC5yZWxuYW1lKSk7 CisJCWNoYXIJICAgKnF1b3RlZF9uYW1lID0gbGZpcnN0KGN1cik7CiAKLQkJLyoKLQkJICog WFhYIERvIHdlIG5lZWQgdG8gbGlzdCB0aGUgY29sdW1ucyBpbiBhbGwgY2FzZXM/IE1heWJl IHdlJ3JlCi0JCSAqIHJlcGxpY2F0aW5nIGFsbCBjb2x1bW5zPwotCQkgKi8KLQkJZm9yIChp bnQgaSA9IDA7IGkgPCBscmVsLm5hdHRzOyBpKyspCi0JCXsKLQkJCWlmIChpID4gMCkKLQkJ CQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjbWQsICIsICIpOworCQkvKiBTdGFydCBjb3B5 IG9uIHRoZSBwdWJsaXNoZXIuICovCisJCWluaXRTdHJpbmdJbmZvKCZjbWQpOwogCi0JCQlh cHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjbWQsIHF1b3RlX2lkZW50aWZpZXIobHJlbC5hdHRu YW1lc1tpXSkpOwotCQl9Ci0KLQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmY21kLCAiKSBU TyBTVERPVVQiKTsKLQl9Ci0JZWxzZQotCXsKLQkJLyoKLQkJICogRm9yIG5vbi10YWJsZXMg YW5kIHRhYmxlcyB3aXRoIHJvdyBmaWx0ZXJzLCB3ZSBuZWVkIHRvIGRvIENPUFkKLQkJICog KFNFTEVDVCAuLi4pLCBidXQgd2UgY2FuJ3QganVzdCBkbyBTRUxFQ1QgKiBiZWNhdXNlIHdl IG5lZWQgdG8gbm90Ci0JCSAqIGNvcHkgZ2VuZXJhdGVkIGNvbHVtbnMuIEZvciB0YWJsZXMg d2l0aCBhbnkgcm93IGZpbHRlcnMsIGJ1aWxkIGEKLQkJICogU0VMRUNUIHF1ZXJ5IHdpdGgg T1InZWQgcm93IGZpbHRlcnMgZm9yIENPUFkuCi0JCSAqLwotCQlhcHBlbmRTdHJpbmdJbmZv U3RyaW5nKCZjbWQsICJDT1BZIChTRUxFQ1QgIik7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwg bHJlbC5uYXR0czsgaSsrKQorCQkvKiBSZWd1bGFyIHRhYmxlIHdpdGggbm8gcm93IGZpbHRl ciAqLworCQlpZiAobHJlbC5yZWxraW5kID09IFJFTEtJTkRfUkVMQVRJT04gJiYgcXVhbCA9 PSBOSUwpCiAJCXsKLQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmNtZCwgcXVvdGVfaWRl bnRpZmllcihscmVsLmF0dG5hbWVzW2ldKSk7Ci0JCQlpZiAoaSA8IGxyZWwubmF0dHMgLSAx KQotCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmNtZCwgIiwgIik7Ci0JCX0KKwkJCWFw cGVuZFN0cmluZ0luZm8oJmNtZCwgIkNPUFkgJXMgKCIsIHF1b3RlZF9uYW1lKTsKIAotCQlh cHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjbWQsICIgRlJPTSAiKTsKKwkJCS8qCisJCQkgKiBY WFggRG8gd2UgbmVlZCB0byBsaXN0IHRoZSBjb2x1bW5zIGluIGFsbCBjYXNlcz8gTWF5YmUg d2UncmUKKwkJCSAqIHJlcGxpY2F0aW5nIGFsbCBjb2x1bW5zPworCQkJICovCisJCQlmb3Ig KGludCBpID0gMDsgaSA8IGxyZWwubmF0dHM7IGkrKykKKwkJCXsKKwkJCQlpZiAoaSA+IDAp CisJCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmNtZCwgIiwgIik7CiAKLQkJLyoKLQkJ ICogRm9yIHJlZ3VsYXIgdGFibGVzLCBtYWtlIHN1cmUgd2UgZG9uJ3QgY29weSBkYXRhIGZy b20gYSBjaGlsZCB0aGF0Ci0JCSAqIGluaGVyaXRzIHRoZSBuYW1lZCB0YWJsZSBhcyB0aG9z ZSB3aWxsIGJlIGNvcGllZCBzZXBhcmF0ZWx5LgotCQkgKi8KLQkJaWYgKGxyZWwucmVsa2lu ZCA9PSBSRUxLSU5EX1JFTEFUSU9OKQotCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmY21k LCAiT05MWSAiKTsKKwkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjbWQsIHF1b3RlX2lk ZW50aWZpZXIobHJlbC5hdHRuYW1lc1tpXSkpOworCQkJfQogCi0JCWFwcGVuZFN0cmluZ0lu Zm9TdHJpbmcoJmNtZCwgcXVvdGVfcXVhbGlmaWVkX2lkZW50aWZpZXIobHJlbC5uc3BuYW1l LCBscmVsLnJlbG5hbWUpKTsKLQkJLyogbGlzdCBvZiBPUidlZCBmaWx0ZXJzICovCi0JCWlm IChxdWFsICE9IE5JTCkKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmNtZCwgIikgVE8g U1RET1VUIik7CisJCX0KKwkJZWxzZQogCQl7Ci0JCQlMaXN0Q2VsbCAgICpsYzsKLQkJCWNo YXIJICAgKnEgPSBzdHJWYWwobGluaXRpYWwocXVhbCkpOworCQkJLyoKKwkJCSAqIEZvciBu b24tdGFibGVzIGFuZCB0YWJsZXMgd2l0aCByb3cgZmlsdGVycywgd2UgbmVlZCB0byBkbyBD T1BZCisJCQkgKiAoU0VMRUNUIC4uLiksIGJ1dCB3ZSBjYW4ndCBqdXN0IGRvIFNFTEVDVCAq IGJlY2F1c2Ugd2UgbmVlZCB0byBub3QKKwkJCSAqIGNvcHkgZ2VuZXJhdGVkIGNvbHVtbnMu IEZvciB0YWJsZXMgd2l0aCBhbnkgcm93IGZpbHRlcnMsIGJ1aWxkIGEKKwkJCSAqIFNFTEVD VCBxdWVyeSB3aXRoIE9SJ2VkIHJvdyBmaWx0ZXJzIGZvciBDT1BZLgorCQkJICovCisJCQlh cHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjbWQsICJDT1BZIChTRUxFQ1QgIik7CisJCQlmb3Ig KGludCBpID0gMDsgaSA8IGxyZWwubmF0dHM7IGkrKykKKwkJCXsKKwkJCQlhcHBlbmRTdHJp bmdJbmZvU3RyaW5nKCZjbWQsIHF1b3RlX2lkZW50aWZpZXIobHJlbC5hdHRuYW1lc1tpXSkp OworCQkJCWlmIChpIDwgbHJlbC5uYXR0cyAtIDEpCisJCQkJCWFwcGVuZFN0cmluZ0luZm9T dHJpbmcoJmNtZCwgIiwgIik7CisJCQl9CisKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmco JmNtZCwgIiBGUk9NICIpOwogCi0JCQlhcHBlbmRTdHJpbmdJbmZvKCZjbWQsICIgV0hFUkUg JXMiLCBxKTsKLQkJCWZvcl9lYWNoX2Zyb20obGMsIHF1YWwsIDEpCisJCQkvKgorCQkJICog Rm9yIHJlZ3VsYXIgdGFibGVzLCBtYWtlIHN1cmUgd2UgZG9uJ3QgY29weSBkYXRhIGZyb20g YSBjaGlsZCB0aGF0CisJCQkgKiBpbmhlcml0cyB0aGUgbmFtZWQgdGFibGUgYXMgdGhvc2Ug d2lsbCBiZSBjb3BpZWQgc2VwYXJhdGVseS4KKwkJCSAqLworCQkJaWYgKGxyZWwucmVsa2lu ZCA9PSBSRUxLSU5EX1JFTEFUSU9OKQorCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmNt ZCwgIk9OTFkgIik7CisKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmNtZCwgcXVvdGVk X25hbWUpOworCQkJLyogbGlzdCBvZiBPUidlZCBmaWx0ZXJzICovCisJCQlpZiAocXVhbCAh PSBOSUwpCiAJCQl7Ci0JCQkJcSA9IHN0clZhbChsZmlyc3QobGMpKTsKLQkJCQlhcHBlbmRT dHJpbmdJbmZvKCZjbWQsICIgT1IgJXMiLCBxKTsKKwkJCQlMaXN0Q2VsbCAgICpsYzsKKwkJ CQljaGFyCSAgICpxID0gc3RyVmFsKGxpbml0aWFsKHF1YWwpKTsKKworCQkJCWFwcGVuZFN0 cmluZ0luZm8oJmNtZCwgIiBXSEVSRSAlcyIsIHEpOworCQkJCWZvcl9lYWNoX2Zyb20obGMs IHF1YWwsIDEpCisJCQkJeworCQkJCQlxID0gc3RyVmFsKGxmaXJzdChsYykpOworCQkJCQlh cHBlbmRTdHJpbmdJbmZvKCZjbWQsICIgT1IgJXMiLCBxKTsKKwkJCQl9CisJCQkJbGlzdF9m cmVlX2RlZXAocXVhbCk7CiAJCQl9Ci0JCQlsaXN0X2ZyZWVfZGVlcChxdWFsKTsKLQkJfQog Ci0JCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmNtZCwgIikgVE8gU1RET1VUIik7Ci0JfQot CXJlcyA9IHdhbHJjdl9leGVjKExvZ1JlcFdvcmtlcldhbFJjdkNvbm4sIGNtZC5kYXRhLCAw LCBOVUxMKTsKLQlwZnJlZShjbWQuZGF0YSk7Ci0JaWYgKHJlcy0+c3RhdHVzICE9IFdBTFJD Vl9PS19DT1BZX09VVCkKLQkJZXJlcG9ydChFUlJPUiwKLQkJCQkoZXJyY29kZShFUlJDT0RF X0NPTk5FQ1RJT05fRkFJTFVSRSksCi0JCQkJIGVycm1zZygiY291bGQgbm90IHN0YXJ0IGlu aXRpYWwgY29udGVudHMgY29weSBmb3IgdGFibGUgXCIlcy4lc1wiOiAlcyIsCi0JCQkJCQls cmVsLm5zcG5hbWUsIGxyZWwucmVsbmFtZSwgcmVzLT5lcnIpKSk7Ci0Jd2FscmN2X2NsZWFy X3Jlc3VsdChyZXMpOworCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmY21kLCAiKSBUTyBT VERPVVQiKTsKKwkJfQorCQlyZXMgPSB3YWxyY3ZfZXhlYyhMb2dSZXBXb3JrZXJXYWxSY3ZD b25uLCBjbWQuZGF0YSwgMCwgTlVMTCk7CisJCXBmcmVlKGNtZC5kYXRhKTsKKwkJaWYgKHJl cy0+c3RhdHVzICE9IFdBTFJDVl9PS19DT1BZX09VVCkKKwkJCWVyZXBvcnQoRVJST1IsCisJ CQkJCShlcnJjb2RlKEVSUkNPREVfQ09OTkVDVElPTl9GQUlMVVJFKSwKKwkJCQkJIGVycm1z ZygiY291bGQgbm90IHN0YXJ0IGluaXRpYWwgY29udGVudHMgY29weSBmb3IgdGFibGUgXCIl cy4lc1wiIGZyb20gcmVtb3RlICVzOiAlcyIsCisJCQkJCQkJbHJlbC5uc3BuYW1lLCBscmVs LnJlbG5hbWUsIHF1b3RlZF9uYW1lLCByZXMtPmVycikpKTsKKwkJd2FscmN2X2NsZWFyX3Jl c3VsdChyZXMpOwogCi0JY29weWJ1ZiA9IG1ha2VTdHJpbmdJbmZvKCk7CisJCWNvcHlidWYg PSBtYWtlU3RyaW5nSW5mbygpOwogCi0JcHN0YXRlID0gbWFrZV9wYXJzZXN0YXRlKE5VTEwp OwotCSh2b2lkKSBhZGRSYW5nZVRhYmxlRW50cnlGb3JSZWxhdGlvbihwc3RhdGUsIHJlbCwg QWNjZXNzU2hhcmVMb2NrLAotCQkJCQkJCQkJCSBOVUxMLCBmYWxzZSwgZmFsc2UpOworCQlw c3RhdGUgPSBtYWtlX3BhcnNlc3RhdGUoTlVMTCk7CisJCSh2b2lkKSBhZGRSYW5nZVRhYmxl RW50cnlGb3JSZWxhdGlvbihwc3RhdGUsIHJlbCwgQWNjZXNzU2hhcmVMb2NrLAorCQkJCQkJ CQkJCQkgTlVMTCwgZmFsc2UsIGZhbHNlKTsKIAotCWF0dG5hbWVsaXN0ID0gbWFrZV9jb3B5 X2F0dG5hbWVsaXN0KHJlbG1hcGVudHJ5KTsKLQljc3RhdGUgPSBCZWdpbkNvcHlGcm9tKHBz dGF0ZSwgcmVsLCBOVUxMLCBOVUxMLCBmYWxzZSwgY29weV9yZWFkX2RhdGEsIGF0dG5hbWVs aXN0LCBOSUwpOworCQlhdHRuYW1lbGlzdCA9IG1ha2VfY29weV9hdHRuYW1lbGlzdChyZWxt YXBlbnRyeSk7CisJCWNzdGF0ZSA9IEJlZ2luQ29weUZyb20ocHN0YXRlLCByZWwsIE5VTEws IE5VTEwsIGZhbHNlLCBjb3B5X3JlYWRfZGF0YSwgYXR0bmFtZWxpc3QsIE5JTCk7CiAKLQkv KiBEbyB0aGUgY29weSAqLwotCSh2b2lkKSBDb3B5RnJvbShjc3RhdGUpOworCQkvKiBEbyB0 aGUgY29weSAqLworCQkodm9pZCkgQ29weUZyb20oY3N0YXRlKTsKKwl9CiAKIAlsb2dpY2Fs cmVwX3JlbF9jbG9zZShyZWxtYXBlbnRyeSwgTm9Mb2NrKTsKIH0KZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMgYi9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jCmluZGV4IDBkZjFhY2JiN2EuLjdj ZmI2MTMwYTggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0 L3Bnb3V0cHV0LmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdv dXRwdXQuYwpAQCAtMTQsNiArMTQsNyBAQAogCiAjaW5jbHVkZSAiYWNjZXNzL3R1cGNvbnZl cnQuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BhcnRpdGlvbi5oIgorI2luY2x1ZGUgImNhdGFs b2cvcGdfaW5oZXJpdHMuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmgi CiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19wdWJsaWNhdGlvbl9yZWwuaCIKICNpbmNsdWRlICJj YXRhbG9nL3BnX3N1YnNjcmlwdGlvbi5oIgpAQCAtMTQ1NCw3ICsxNDU1LDYgQEAgcGdvdXRw dXRfY2hhbmdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRY TiAqdHhuLAogCQkJLyogU3dpdGNoIHJlbGF0aW9uIGlmIHB1Ymxpc2hpbmcgdmlhIHJvb3Qu ICovCiAJCQlpZiAocmVsZW50cnktPnB1Ymxpc2hfYXNfcmVsaWQgIT0gUmVsYXRpb25HZXRS ZWxpZChyZWxhdGlvbikpCiAJCQl7Ci0JCQkJQXNzZXJ0KHJlbGF0aW9uLT5yZF9yZWwtPnJl bGlzcGFydGl0aW9uKTsKIAkJCQlhbmNlc3RvciA9IFJlbGF0aW9uSWRHZXRSZWxhdGlvbihy ZWxlbnRyeS0+cHVibGlzaF9hc19yZWxpZCk7CiAJCQkJdGFyZ2V0cmVsID0gYW5jZXN0b3I7 CiAJCQkJLyogQ29udmVydCB0dXBsZSBpZiBuZWVkZWQuICovCkBAIC0yMTQ5LDU1ICsyMTQ5 LDU3IEBAIGdldF9yZWxfc3luY19lbnRyeShQR091dHB1dERhdGEgKmRhdGEsIFJlbGF0aW9u IHJlbGF0aW9uKQogCQkJaW50CQkJYW5jZXN0b3JfbGV2ZWwgPSAwOwogCiAJCQkvKgotCQkJ ICogSWYgdGhpcyBpcyBhIEZPUiBBTEwgVEFCTEVTIHB1YmxpY2F0aW9uLCBwaWNrIHRoZSBw YXJ0aXRpb24KKwkJCSAqIElmIHRoaXMgaXMgYSBGT1IgQUxMIFRBQkxFUyBwdWJsaWNhdGlv biwgcGljayB0aGUgbG9naWNhbAogCQkJICogcm9vdCBhbmQgc2V0IHRoZSBhbmNlc3RvciBs ZXZlbCBhY2NvcmRpbmdseS4KIAkJCSAqLwogCQkJaWYgKHB1Yi0+YWxsdGFibGVzKQogCQkJ ewogCQkJCXB1Ymxpc2ggPSB0cnVlOwotCQkJCWlmIChwdWItPnB1YnZpYXJvb3QgJiYgYW1f cGFydGl0aW9uKQorCQkJCWlmIChwdWItPnB1YnZpYXJvb3QpCiAJCQkJewotCQkJCQlMaXN0 CSAgICphbmNlc3RvcnMgPSBnZXRfcGFydGl0aW9uX2FuY2VzdG9ycyhyZWxpZCk7CisJCQkJ CUxpc3QJICAgKmFuY2VzdG9yczsKIAotCQkJCQlwdWJfcmVsaWQgPSBsbGFzdF9vaWQoYW5j ZXN0b3JzKTsKLQkJCQkJYW5jZXN0b3JfbGV2ZWwgPSBsaXN0X2xlbmd0aChhbmNlc3RvcnMp OworCQkJCQlhbmNlc3RvcnMgPSBnZXRfbG9naWNhbF9hbmNlc3RvcnMocmVsaWQsIGFtX3Bh cnRpdGlvbik7CisJCQkJCWlmIChhbmNlc3RvcnMgIT0gTklMKQorCQkJCQl7CisJCQkJCQlw dWJfcmVsaWQgPSBsbGFzdF9vaWQoYW5jZXN0b3JzKTsKKwkJCQkJCWFuY2VzdG9yX2xldmVs ID0gbGlzdF9sZW5ndGgoYW5jZXN0b3JzKTsKKwkJCQkJfQogCQkJCX0KIAkJCX0KIAogCQkJ aWYgKCFwdWJsaXNoKQogCQkJewogCQkJCWJvb2wJCWFuY2VzdG9yX3B1Ymxpc2hlZCA9IGZh bHNlOworCQkJCU9pZAkJCWFuY2VzdG9yOworCQkJCWludAkJCWxldmVsOworCQkJCUxpc3QJ ICAgKmFuY2VzdG9yczsKIAogCQkJCS8qCi0JCQkJICogRm9yIGEgcGFydGl0aW9uLCBjaGVj ayBpZiBhbnkgb2YgdGhlIGFuY2VzdG9ycyBhcmUKLQkJCQkgKiBwdWJsaXNoZWQuICBJZiBz bywgbm90ZSBkb3duIHRoZSB0b3Btb3N0IGFuY2VzdG9yIHRoYXQgaXMKKwkJCQkgKiBDaGVj ayBpZiBhbnkgb2YgdGhlIGxvZ2ljYWwgYW5jZXN0b3JzICh0aGF0IGlzLCBwYXJ0aXRpb24K KwkJCQkgKiBwYXJlbnRzIG9yIHRhYmxlcyBtYXJrZWQgd2l0aCBwZ19zZXRfbG9naWNhbF9y b290KCkpIGFyZQorCQkJCSAqIHB1Ymxpc2hlZC4gSWYgc28sIG5vdGUgZG93biB0aGUgdG9w bW9zdCBhbmNlc3RvciB0aGF0IGlzCiAJCQkJICogcHVibGlzaGVkIHZpYSB0aGlzIHB1Ymxp Y2F0aW9uLCB3aGljaCB3aWxsIGJlIHVzZWQgYXMgdGhlCi0JCQkJICogcmVsYXRpb24gdmlh IHdoaWNoIHRvIHB1Ymxpc2ggdGhlIHBhcnRpdGlvbidzIGNoYW5nZXMuCisJCQkJICogcmVs YXRpb24gdmlhIHdoaWNoIHRvIHB1Ymxpc2ggdGhpcyB0YWJsZSdzIGNoYW5nZXMuCiAJCQkJ ICovCi0JCQkJaWYgKGFtX3BhcnRpdGlvbikKLQkJCQl7Ci0JCQkJCU9pZAkJCWFuY2VzdG9y OwotCQkJCQlpbnQJCQlsZXZlbDsKLQkJCQkJTGlzdAkgICAqYW5jZXN0b3JzID0gZ2V0X3Bh cnRpdGlvbl9hbmNlc3RvcnMocmVsaWQpOwotCi0JCQkJCWFuY2VzdG9yID0gR2V0VG9wTW9z dEFuY2VzdG9ySW5QdWJsaWNhdGlvbihwdWItPm9pZCwKLQkJCQkJCQkJCQkJCQkJCSAgIGFu Y2VzdG9ycywKLQkJCQkJCQkJCQkJCQkJCSAgICZsZXZlbCk7CisJCQkJYW5jZXN0b3JzID0g Z2V0X2xvZ2ljYWxfYW5jZXN0b3JzKHJlbGlkLCBhbV9wYXJ0aXRpb24pOworCQkJCWFuY2Vz dG9yID0gR2V0VG9wTW9zdEFuY2VzdG9ySW5QdWJsaWNhdGlvbihwdWItPm9pZCwKKwkJCQkJ CQkJCQkJCQkJICAgYW5jZXN0b3JzLAorCQkJCQkJCQkJCQkJCQkgICAmbGV2ZWwpOwogCi0J CQkJCWlmIChhbmNlc3RvciAhPSBJbnZhbGlkT2lkKQorCQkJCWlmIChhbmNlc3RvciAhPSBJ bnZhbGlkT2lkKQorCQkJCXsKKwkJCQkJYW5jZXN0b3JfcHVibGlzaGVkID0gdHJ1ZTsKKwkJ CQkJaWYgKHB1Yi0+cHVidmlhcm9vdCkKIAkJCQkJewotCQkJCQkJYW5jZXN0b3JfcHVibGlz aGVkID0gdHJ1ZTsKLQkJCQkJCWlmIChwdWItPnB1YnZpYXJvb3QpCi0JCQkJCQl7Ci0JCQkJ CQkJcHViX3JlbGlkID0gYW5jZXN0b3I7Ci0JCQkJCQkJYW5jZXN0b3JfbGV2ZWwgPSBsZXZl bDsKLQkJCQkJCX0KKwkJCQkJCXB1Yl9yZWxpZCA9IGFuY2VzdG9yOworCQkJCQkJYW5jZXN0 b3JfbGV2ZWwgPSBsZXZlbDsKIAkJCQkJfQogCQkJCX0KIAogCQkJCWlmIChsaXN0X21lbWJl cl9vaWQocHViaWRzLCBwdWItPm9pZCkgfHwKIAkJCQkJbGlzdF9tZW1iZXJfb2lkKHNjaGVt YVB1YmlkcywgcHViLT5vaWQpIHx8Ci0JCQkJCWFuY2VzdG9yX3B1Ymxpc2hlZCkKKwkJCQkJ KGFtX3BhcnRpdGlvbiAmJiBhbmNlc3Rvcl9wdWJsaXNoZWQpKQogCQkJCQlwdWJsaXNoID0g dHJ1ZTsKIAkJCX0KIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19pbmhl cml0cy5oIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19pbmhlcml0cy5oCmluZGV4IGNlMTU0 YWI5NDMuLmNmY2FjYWNmNzYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdf aW5oZXJpdHMuaAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX2luaGVyaXRzLmgKQEAg LTQ2LDE0ICs0NiwxNyBAQCB0eXBlZGVmIEZvcm1EYXRhX3BnX2luaGVyaXRzICpGb3JtX3Bn X2luaGVyaXRzOwogCiBERUNMQVJFX1VOSVFVRV9JTkRFWF9QS0VZKHBnX2luaGVyaXRzX3Jl bGlkX3NlcW5vX2luZGV4LCAyNjgwLCBJbmhlcml0c1JlbGlkU2Vxbm9JbmRleElkLCBvbiBw Z19pbmhlcml0cyB1c2luZyBidHJlZShpbmhyZWxpZCBvaWRfb3BzLCBpbmhzZXFubyBpbnQ0 X29wcykpOwogREVDTEFSRV9JTkRFWChwZ19pbmhlcml0c19wYXJlbnRfaW5kZXgsIDIxODcs IEluaGVyaXRzUGFyZW50SW5kZXhJZCwgb24gcGdfaW5oZXJpdHMgdXNpbmcgYnRyZWUoaW5o cGFyZW50IG9pZF9vcHMpKTsKK0RFQ0xBUkVfSU5ERVgocGdfaW5oZXJpdHNfcGFyZW50X3Nl cW5vX2luZGV4LCA4MTM4LCBJbmhlcml0c1BhcmVudFNlcW5vSW5kZXhJZCwgb24gcGdfaW5o ZXJpdHMgdXNpbmcgYnRyZWUoaW5ocGFyZW50IG9pZF9vcHMsIGluaHNlcW5vIGludDRfb3Bz KSk7CiAKIAogZXh0ZXJuIExpc3QgKmZpbmRfaW5oZXJpdGFuY2VfY2hpbGRyZW4oT2lkIHBh cmVudHJlbElkLCBMT0NLTU9ERSBsb2NrbW9kZSk7CiBleHRlcm4gTGlzdCAqZmluZF9pbmhl cml0YW5jZV9jaGlsZHJlbl9leHRlbmRlZChPaWQgcGFyZW50cmVsSWQsIGJvb2wgb21pdF9k ZXRhY2hlZCwKLQkJCQkJCQkJCQkJCUxPQ0tNT0RFIGxvY2ttb2RlLCBib29sICpkZXRhY2hl ZF9leGlzdCwgVHJhbnNhY3Rpb25JZCAqZGV0YWNoZWRfeG1pbik7CisJCQkJCQkJCQkJCQlM T0NLTU9ERSBsb2NrbW9kZSwgYm9vbCAqZGV0YWNoZWRfZXhpc3QsIFRyYW5zYWN0aW9uSWQg KmRldGFjaGVkX3htaW4sCisJCQkJCQkJCQkJCQlib29sIGxvZ2ljYWxfb25seSk7CiAKIGV4 dGVybiBMaXN0ICpmaW5kX2FsbF9pbmhlcml0b3JzKE9pZCBwYXJlbnRyZWxJZCwgTE9DS01P REUgbG9ja21vZGUsCiAJCQkJCQkJCSBMaXN0ICoqbnVtcGFyZW50cyk7CitleHRlcm4gTGlz dCAqZmluZF9hbGxfbG9naWNhbF9pbmhlcml0b3JzKE9pZCBwYXJlbnRyZWxJZCk7CiBleHRl cm4gYm9vbCBoYXNfc3ViY2xhc3MoT2lkIHJlbGF0aW9uSWQpOwogZXh0ZXJuIGJvb2wgaGFz X3N1cGVyY2xhc3MoT2lkIHJlbGF0aW9uSWQpOwogZXh0ZXJuIGJvb2wgdHlwZUluaGVyaXRz RnJvbShPaWQgc3ViY2xhc3NUeXBlSWQsIE9pZCBzdXBlcmNsYXNzVHlwZUlkKTsKQEAgLTYz LDUgKzY2LDcgQEAgZXh0ZXJuIGJvb2wgRGVsZXRlSW5oZXJpdHNUdXBsZShPaWQgaW5ocmVs aWQsIE9pZCBpbmhwYXJlbnQsCiAJCQkJCQkJCWJvb2wgZXhwZWN0X2RldGFjaF9wZW5kaW5n LAogCQkJCQkJCQljb25zdCBjaGFyICpjaGlsZG5hbWUpOwogZXh0ZXJuIGJvb2wgUGFydGl0 aW9uSGFzUGVuZGluZ0RldGFjaChPaWQgcGFydG9pZCk7CitleHRlcm4gTGlzdCAqZ2V0X2xv Z2ljYWxfYW5jZXN0b3JzKE9pZCByZWxpZCwgYm9vbCBpc19wYXJ0aXRpb24pOworZXh0ZXJu IGJvb2wgaGFzX2xvZ2ljYWxfcGFyZW50KFJlbGF0aW9uIGluaFJlbCwgT2lkIHJlbGlkKTsK IAogI2VuZGlmCQkJCQkJCS8qIFBHX0lOSEVSSVRTX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3By b2MuZGF0CmluZGV4IDUwNTU5NTYyMGUuLjlkN2IzYzExYmYgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9w Z19wcm9jLmRhdApAQCAtMTE3MjksNiArMTE3MjksMTEgQEAKICAgcHJvbmFtZSA9PiAncGdf cmVsYXRpb25faXNfcHVibGlzaGFibGUnLCBwcm92b2xhdGlsZSA9PiAncycsCiAgIHByb3Jl dHR5cGUgPT4gJ2Jvb2wnLCBwcm9hcmd0eXBlcyA9PiAncmVnY2xhc3MnLAogICBwcm9zcmMg PT4gJ3BnX3JlbGF0aW9uX2lzX3B1Ymxpc2hhYmxlJyB9LAoreyBvaWQgPT4gJzgxMzcnLCBk ZXNjciA9PiAnZ2V0IGxpc3Qgb2YgdGFibGVzIHRvIGNvcHkgZHVyaW5nIGluaXRpYWwgc3lu YycsCisgIHByb25hbWUgPT4gJ3BnX2dldF9wdWJsaWNhdGlvbl9yZWxzX3RvX3N5bmMnLCBw cm9yb3dzID0+ICcxMCcsIHByb3JldHNldCA9PiAndCcsCisgIHByb3ZvbGF0aWxlID0+ICdz JywgcHJvcmV0dHlwZSA9PiAncmVnY2xhc3MnLCBwcm9hcmd0eXBlcyA9PiAncmVnY2xhc3Mg dGV4dCcsCisgIHByb2FyZ25hbWVzID0+ICd7cm9vdGlkLHB1Ym5hbWV9JywKKyAgcHJvc3Jj ID0+ICdwZ19nZXRfcHVibGljYXRpb25fcmVsc190b19zeW5jJyB9LAogCiAjIHJscwogeyBv aWQgPT4gJzMyOTgnLApAQCAtMTE4ODcsNiArMTE4OTIsMTEgQEAKICAgcHJvbmFtZSA9PiAn cGdfcGFydGl0aW9uX3Jvb3QnLCBwcm9yZXR0eXBlID0+ICdyZWdjbGFzcycsCiAgIHByb2Fy Z3R5cGVzID0+ICdyZWdjbGFzcycsIHByb3NyYyA9PiAncGdfcGFydGl0aW9uX3Jvb3QnIH0s CiAKK3sgb2lkID0+ICc4MTM2JywgZGVzY3IgPT4gJ21hcmsgYSB0YWJsZSByb290IGZvciBs b2dpY2FsIHJlcGxpY2F0aW9uJywKKyAgcHJvbmFtZSA9PiAncGdfc2V0X2xvZ2ljYWxfcm9v dCcsIHByb3ZvbGF0aWxlID0+ICd2JywgcHJvcGFyYWxsZWwgPT4gJ3UnLAorICBwcm9yZXR0 eXBlID0+ICd2b2lkJywgcHJvYXJndHlwZXMgPT4gJ3JlZ2NsYXNzIHJlZ2NsYXNzJywKKyAg cHJvc3JjID0+ICdwZ19zZXRfbG9naWNhbF9yb290JyB9LAorCiB7IG9pZCA9PiAnNDM1MCcs IGRlc2NyID0+ICdVbmljb2RlIG5vcm1hbGl6YXRpb24nLAogICBwcm9uYW1lID0+ICdub3Jt YWxpemUnLCBwcm9yZXR0eXBlID0+ICd0ZXh0JywgcHJvYXJndHlwZXMgPT4gJ3RleHQgdGV4 dCcsCiAgIHByb3NyYyA9PiAndW5pY29kZV9ub3JtYWxpemVfZnVuYycgfSwKZGlmZiAtLWdp dCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0IGIvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9wdWJsaWNhdGlvbi5vdXQKaW5kZXggNDI3Zjg3ZWEwNy4u MGUwNjEwM2Y0YyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wdWJs aWNhdGlvbi5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wdWJsaWNhdGlv bi5vdXQKQEAgLTE3MTgsOSArMTcxOCw0MSBAQCBTRUxFQ1QgKiBGUk9NIHBnX3B1YmxpY2F0 aW9uX3RhYmxlczsKICBwdWIgICAgIHwgc2NoMSAgICAgICB8IHRibDEgICAgICB8IHthfSAg ICAgIHwgCiAoMSByb3cpCiAKKy0tIFNhbml0eSBjaGVjayBjYXNlcyBmb3IgcGdfc2V0X2xv Z2ljYWxfcm9vdCgpLgorQ1JFQVRFIFRBQkxFIHNjaDEuaXJvb3QgKGEgaW50KTsKK0NSRUFU RSBUQUJMRSBzY2gxLmlwYXJ0MSAoYSBpbnQpOworQ1JFQVRFIFRBQkxFIHNjaDEuaXBhcnQy ICgpIElOSEVSSVRTIChzY2gxLmlyb290KTsKKy0tIG1hcmtpbmcgcm9vdHMgYmV0d2VlbiB1 bnJlbGF0ZWQgdGFibGVzIGlzIG5vdCBhbGxvd2VkCitTRUxFQ1QgcGdfc2V0X2xvZ2ljYWxf cm9vdCgnc2NoMS5pcGFydDEnLCAnc2NoMS5pcm9vdCcpOworRVJST1I6ICB0YWJsZSAiaXBh cnQxIiBkb2VzIG5vdCBpbmhlcml0IGZyb20gaW50ZW5kZWQgcm9vdCB0YWJsZSAiaXJvb3Qi CitTRUxFQ1QgcGdfc2V0X2xvZ2ljYWxfcm9vdCgnc2NoMS5pcGFydDInLCAnc2NoMS50Ymwx Jyk7CitFUlJPUjogIHRhYmxlICJpcGFydDIiIGRvZXMgbm90IGluaGVyaXQgZnJvbSBpbnRl bmRlZCByb290IHRhYmxlICJ0YmwxIgorLS0gZXN0YWJsaXNoaW5nIGFuIGluaGVyaXRhbmNl IHJlbGF0aW9uc2hpcCBmaXhlcyB0aGUgcHJvYmxlbQorQUxURVIgVEFCTEUgc2NoMS5pcGFy dDEgSU5IRVJJVCBzY2gxLmlyb290OworU0VMRUNUIHBnX3NldF9sb2dpY2FsX3Jvb3QoJ3Nj aDEuaXBhcnQxJywgJ3NjaDEuaXJvb3QnKTsKKyBwZ19zZXRfbG9naWNhbF9yb290IAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKKy0tIGJ1dCBtdWx0aXBsZSBpbmhl cml0YW5jZSBpcyBub3QgYWxsb3dlZAorQUxURVIgVEFCTEUgc2NoMS5pcGFydDIgSU5IRVJJ VCBzY2gxLmlwYXJ0MTsKK1NFTEVDVCBwZ19zZXRfbG9naWNhbF9yb290KCdzY2gxLmlwYXJ0 MicsICdzY2gxLmlyb290Jyk7CitFUlJPUjogIHRhYmxlICJpcGFydDIiIGluaGVyaXRzIGZy b20gbXVsdGlwbGUgdGFibGVzCitBTFRFUiBUQUJMRSBzY2gxLmlwYXJ0MiBOTyBJTkhFUklU IHNjaDEuaXBhcnQxOworU0VMRUNUIHBnX3NldF9sb2dpY2FsX3Jvb3QoJ3NjaDEuaXBhcnQy JywgJ3NjaDEuaXJvb3QnKTsKKyBwZ19zZXRfbG9naWNhbF9yb290IAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgCisoMSByb3cpCisKKy0tIFRPRE86IG1ha2Ugc3VyZSBleGlzdGluZyBs b2dpY2FsIGRlc2NlbmRhbnQgY2FuJ3QgYmUgQUxURVJlZCBbTk9dIElOSEVSSVQKIFJFU0VU IGNsaWVudF9taW5fbWVzc2FnZXM7CiBEUk9QIFBVQkxJQ0FUSU9OIHB1YjsKIERST1AgVEFC TEUgc2NoMS50YmwxOworRFJPUCBUQUJMRSBzY2gxLmlwYXJ0MTsKK0RST1AgVEFCTEUgc2No MS5pcGFydDI7CitEUk9QIFRBQkxFIHNjaDEuaXJvb3Q7CiBEUk9QIFNDSEVNQSBzY2gxIGNh c2NhZGU7CiBEUk9QIFNDSEVNQSBzY2gyIGNhc2NhZGU7CiBSRVNFVCBTRVNTSU9OIEFVVEhP UklaQVRJT047CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wdWJsaWNhdGlv bi5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wdWJsaWNhdGlvbi5zcWwKaW5kZXggYTQ3 YzU5MzlkNS4uNTJhMGQ2YmE0OCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwv cHVibGljYXRpb24uc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3B1YmxpY2F0aW9u LnNxbApAQCAtMTA4Nyw5ICsxMDg3LDM0IEBAIEFMVEVSIFRBQkxFIHNjaDEudGJsMSBBVFRB Q0ggUEFSVElUSU9OIHNjaDEudGJsMV9wYXJ0MyBGT1IgVkFMVUVTIEZST00gKDIwKSB0byAo CiBDUkVBVEUgUFVCTElDQVRJT04gcHViIEZPUiBUQUJMRVMgSU4gU0NIRU1BIHNjaDEgV0lU SCAoUFVCTElTSF9WSUFfUEFSVElUSU9OX1JPT1Q9MSk7CiBTRUxFQ1QgKiBGUk9NIHBnX3B1 YmxpY2F0aW9uX3RhYmxlczsKIAorLS0gU2FuaXR5IGNoZWNrIGNhc2VzIGZvciBwZ19zZXRf bG9naWNhbF9yb290KCkuCitDUkVBVEUgVEFCTEUgc2NoMS5pcm9vdCAoYSBpbnQpOworQ1JF QVRFIFRBQkxFIHNjaDEuaXBhcnQxIChhIGludCk7CitDUkVBVEUgVEFCTEUgc2NoMS5pcGFy dDIgKCkgSU5IRVJJVFMgKHNjaDEuaXJvb3QpOworCistLSBtYXJraW5nIHJvb3RzIGJldHdl ZW4gdW5yZWxhdGVkIHRhYmxlcyBpcyBub3QgYWxsb3dlZAorU0VMRUNUIHBnX3NldF9sb2dp Y2FsX3Jvb3QoJ3NjaDEuaXBhcnQxJywgJ3NjaDEuaXJvb3QnKTsKK1NFTEVDVCBwZ19zZXRf bG9naWNhbF9yb290KCdzY2gxLmlwYXJ0MicsICdzY2gxLnRibDEnKTsKKworLS0gZXN0YWJs aXNoaW5nIGFuIGluaGVyaXRhbmNlIHJlbGF0aW9uc2hpcCBmaXhlcyB0aGUgcHJvYmxlbQor QUxURVIgVEFCTEUgc2NoMS5pcGFydDEgSU5IRVJJVCBzY2gxLmlyb290OworU0VMRUNUIHBn X3NldF9sb2dpY2FsX3Jvb3QoJ3NjaDEuaXBhcnQxJywgJ3NjaDEuaXJvb3QnKTsKKworLS0g YnV0IG11bHRpcGxlIGluaGVyaXRhbmNlIGlzIG5vdCBhbGxvd2VkCitBTFRFUiBUQUJMRSBz Y2gxLmlwYXJ0MiBJTkhFUklUIHNjaDEuaXBhcnQxOworU0VMRUNUIHBnX3NldF9sb2dpY2Fs X3Jvb3QoJ3NjaDEuaXBhcnQyJywgJ3NjaDEuaXJvb3QnKTsKKworQUxURVIgVEFCTEUgc2No MS5pcGFydDIgTk8gSU5IRVJJVCBzY2gxLmlwYXJ0MTsKK1NFTEVDVCBwZ19zZXRfbG9naWNh bF9yb290KCdzY2gxLmlwYXJ0MicsICdzY2gxLmlyb290Jyk7CisKKy0tIFRPRE86IG1ha2Ug c3VyZSBleGlzdGluZyBsb2dpY2FsIGRlc2NlbmRhbnQgY2FuJ3QgYmUgQUxURVJlZCBbTk9d IElOSEVSSVQKKwogUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKIERST1AgUFVCTElDQVRJ T04gcHViOwogRFJPUCBUQUJMRSBzY2gxLnRibDE7CitEUk9QIFRBQkxFIHNjaDEuaXBhcnQx OworRFJPUCBUQUJMRSBzY2gxLmlwYXJ0MjsKK0RST1AgVEFCTEUgc2NoMS5pcm9vdDsKIERS T1AgU0NIRU1BIHNjaDEgY2FzY2FkZTsKIERST1AgU0NIRU1BIHNjaDIgY2FzY2FkZTsKIApk aWZmIC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDEzX3BhcnRpdGlvbi5wbCBi L3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxM19wYXJ0aXRpb24ucGwKaW5kZXggMTFhNWMz YzAzZS4uYTRkNzcxZjMxZiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3Qv MDEzX3BhcnRpdGlvbi5wbAorKysgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMTNfcGFy dGl0aW9uLnBsCkBAIC0zODgsNiArMzg4LDU5IEBAICRub2RlX3N1YnNjcmliZXIxLT5hcHBl bmRfY29uZigncG9zdGdyZXNxbC5jb25mJywKIAkibG9nX21pbl9tZXNzYWdlcyA9IHdhcm5p bmciKTsKICRub2RlX3N1YnNjcmliZXIxLT5yZWxvYWQ7CiAKKyMgTWFrZSBzdXJlIHN0YW5k YXJkIGluaGVyaXRhbmNlIHNldHVwcyBhcmVuJ3QgYnJva2VuIGJ5IHRoZSBuZXcKKyMgcGdf c2V0X2xvZ2ljYWxfcm9vdCgpIGhhbmRsaW5nLgorJG5vZGVfc3Vic2NyaWJlcjItPnNhZmVf cHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgVEFCTEUgaXRhYjEgKGEgaW50LCBiIHRleHQp Iik7Ciskbm9kZV9zdWJzY3JpYmVyMi0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFU RSBUQUJMRSBpdGFiMV8xIChMSUtFIGl0YWIxKSIpOworJG5vZGVfc3Vic2NyaWJlcjItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgVEFCTEUgaXRhYjFfMiAoTElLRSBpdGFi MSkiKTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JF QVRFIFRBQkxFIGl0YWIxIChhIGludCwgYiB0ZXh0KSIpOworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFRBQkxFIGl0YWIxXzEgKENIRUNLIChh ID0gMSkpIElOSEVSSVRTIChpdGFiMSkiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsCisJIkNSRUFURSBUQUJMRSBpdGFiMV8yIChDSEVDSyAoYSA9IDIpKSBJ TkhFUklUUyAoaXRhYjEpIik7CisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsCisJIlNFTEVDVCBwZ19zZXRfbG9naWNhbF9yb290KCdpdGFiMV8xJywgJ2l0YWIx JykiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVD VCBwZ19zZXRfbG9naWNhbF9yb290KCdpdGFiMV8yJywgJ2l0YWIxJykiKTsKKworJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIGl0YWIxIFZB TFVFUyAoMCwgJ2l0YWIxJykiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJJTlNFUlQgSU5UTyBpdGFiMV8xIFZBTFVFUyAoMSwgJ2l0YWIxJykiKTsKKyRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyBpdGFi MV8yIFZBTFVFUyAoMiwgJ2l0YWIxJykiKTsKKworIyBSZWdyZXNzaW9uOiBDcmVhdGUgYSBw dWJsaWNhdGlvbiBmb3IgYW4gdW5yZWxhdGVkIHRhYmxlIGFuZCBzZXQKKyMgcHVibGlzaF92 aWFfcGFydGl0aW9uX3Jvb3QuIFRoaXMgc2hvdWxkIGhhdmUgbm8gZWZmZWN0IGF0IGFsbCwg c2luY2UgaXRhYjEKKyMgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNpbmcgdGhpcyBwdWJsaWNh dGlvbi4uLgorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JF QVRFIFBVQkxJQ0FUSU9OIGR1bW15X3B1YiBGT1IgVEFCTEUgdGFiMSBXSVRIIChwdWJsaXNo X3ZpYV9wYXJ0aXRpb25fcm9vdCA9IHRydWUpIik7Ciskbm9kZV9zdWJzY3JpYmVyMi0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsCisJIkFMVEVSIFNVQlNDUklQVElPTiBzdWIyIEFERCBQVUJM SUNBVElPTiBkdW1teV9wdWIiKTsKKyRub2RlX3N1YnNjcmliZXIyLT53YWl0X2Zvcl9zdWJz Y3JpcHRpb25fc3luYzsKKworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXIyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIGEsIGIgRlJPTSBpdGFiMSIpOworaXMoJHJlc3Vs dCwgcXEoMHxpdGFiMSksICdpbml0aWFsIGRhdGEgc3luY2VkIGZvciBpdGFiMSBvbiBzdWJz Y3JpYmVyIDEnKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyMi0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsCisJIlNFTEVDVCBhLCBiIEZST00gaXRhYjFfMSIpOworaXMoJHJlc3VsdCwg cXEoMXxpdGFiMSksICdpbml0aWFsIGRhdGEgc3luY2VkIGZvciBpdGFiMV8xIG9uIHN1YnNj cmliZXIgMScpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXIyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywKKwkiU0VMRUNUIGEsIGIgRlJPTSBpdGFiMV8yIik7CitpcygkcmVzdWx0LCBx cSgyfGl0YWIxKSwgJ2luaXRpYWwgZGF0YSBzeW5jZWQgZm9yIGl0YWIxXzIgb24gc3Vic2Ny aWJlciAxJyk7CisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJ IkRST1AgVEFCTEUgaXRhYjEgQ0FTQ0FERTsiKTsKKyRub2RlX3N1YnNjcmliZXIyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywKKwkiRFJPUCBUQUJMRSBpdGFiMSBDQVNDQURFOyIpOworCisk bm9kZV9zdWJzY3JpYmVyMi0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkFMVEVSIFNVQlND UklQVElPTiBzdWIyIERST1AgUFVCTElDQVRJT04gZHVtbXlfcHViIik7Ciskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBQVUJMSUNBVElPTiBkdW1teV9w dWIiKTsKKwogIyBUZXN0cyBmb3IgcmVwbGljYXRpb24gdXNpbmcgcm9vdCB0YWJsZSBpZGVu dGl0eSBhbmQgc2NoZW1hCiAKICMgcHVibGlzaGVyCkBAIC04NzcsNCArOTMwLDE5MCBAQCAk cmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlcjItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAogCSJT RUxFQ1QgYSwgYiwgYyBGUk9NIHRhYjVfMSBPUkRFUiBCWSAxIik7CiBpcygkcmVzdWx0LCBx cSg0fHwxKSwgJ3VwZGF0ZXMgb2YgdGFiNSByZXBsaWNhdGVkIGNvcnJlY3RseScpOwogCisj IFRlc3QgdGhhdCByZXBsaWNhdGlvbiB3b3JrcyBmb3Igb2xkZXIgaW5oZXJpdGFuY2UvdHJp Z2dlciBzZXR1cHMgYXMgd2VsbC4KKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsCisJIkNSRUFURSBUQUJMRSBpdGFiMSAoYSBpbnQsIGIgdGV4dCkiKTsKKyRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBUQUJMRSBpdGFi MV8xIChDSEVDSyAoYSA9IDEpKSBJTkhFUklUUyAoaXRhYjEpIik7Ciskbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgVEFCTEUgaXRhYjFfMiAoQ0hF Q0sgKGEgPSAyKSkgSU5IRVJJVFMgKGl0YWIxKSIpOworCiskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiCisJQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gaXRh YjFfdHJpZ2dlcigpCisJUkVUVVJOUyBUUklHR0VSIEFTIFwkXCQKKwlCRUdJTgorCQlJRiAo IE5FVy5hID0gMSApIFRIRU4gSU5TRVJUIElOVE8gaXRhYjFfMSBWQUxVRVMgKE5FVy4qKTsK KwkJRUxTSUYgKCBORVcuYSA9IDIgKSBUSEVOIElOU0VSVCBJTlRPIGl0YWIxXzIgVkFMVUVT IChORVcuKik7CisJCUVMU0UgUkVUVVJOIE5FVzsKKwkJRU5EIElGOworCQlSRVRVUk4gTlVM TDsKKwlFTkQ7CisJXCRcJAorCUxBTkdVQUdFIHBscGdzcWw7Iik7Ciskbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiCisJQ1JFQVRFIFRSSUdHRVIgaXRhYjFfdHJp Z2dlcgorCUJFRk9SRSBJTlNFUlQgT04gaXRhYjEKKwlGT1IgRUFDSCBST1cgRVhFQ1VURSBG VU5DVElPTiBpdGFiMV90cmlnZ2VyKCk7Iik7CisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBwZ19zZXRfbG9naWNhbF9yb290KCdpdGFiMV8x JywgJ2l0YWIxJykiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs CisJIlNFTEVDVCBwZ19zZXRfbG9naWNhbF9yb290KCdpdGFiMV8yJywgJ2l0YWIxJykiKTsK KworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFRB QkxFIGl0YWIyIChhIGludCwgYiB0ZXh0KSIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFRBQkxFIGl0YWIyXzEgKENIRUNLIChhID0gMSkp IElOSEVSSVRTIChpdGFiMikiKTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIgorCUNSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIGl0YWIyX3RyaWdnZXIo KQorCVJFVFVSTlMgVFJJR0dFUiBBUyBcJFwkCisJQkVHSU4KKwkJSUYgKCBORVcuYSA9IDEg KSBUSEVOIElOU0VSVCBJTlRPIGl0YWIyXzEgVkFMVUVTIChORVcuKik7CisJCUVMU0UgUkVU VVJOIE5FVzsKKwkJRU5EIElGOworCQlSRVRVUk4gTlVMTDsKKwlFTkQ7CisJXCRcJAorCUxB TkdVQUdFIHBscGdzcWw7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiCisJQ1JFQVRFIFRSSUdHRVIgaXRhYjJfdHJpZ2dlcgorCUJFRk9SRSBJTlNFUlQg T04gaXRhYjIKKwlGT1IgRUFDSCBST1cgRVhFQ1VURSBGVU5DVElPTiBpdGFiMl90cmlnZ2Vy KCk7Iik7CisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNF TEVDVCBwZ19zZXRfbG9naWNhbF9yb290KCdpdGFiMl8xJywgJ2l0YWIyJykiKTsKKworIyBp dGFiMl8xIHNob3VsZCBiZSBwdWJsaXNoZWQgdXNpbmcgaXRzIG93biBpZGVudGl0eSBoZXJl LCBzaW5jZSBpdHMgcGFyZW50IGlzCisjIG5vdCBpbmNsdWRlZC4gaXRhYjFfMSBzaG91bGQg YmUgcHVibGlzaGVkIHZpYSBpdHMgcGFyZW50LCBpdGFiMSwgd2l0aG91dAorIyBkdXBsaWNh dGluZyB0aGUgcm93cy4KKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs CisJIkFMVEVSIFBVQkxJQ0FUSU9OIHB1Yl92aWFyb290IEFERCBUQUJMRSBpdGFiMSwgaXRh YjFfMSwgaXRhYjJfMSIpOworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiSU5TRVJUIElOVE8gaXRhYjEgVkFMVUVTICgwLCAnaXRhYjEnKSIpOworJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIGl0YWIxIFZB TFVFUyAoMSwgJ2l0YWIxJykiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJJTlNFUlQgSU5UTyBpdGFiMSBWQUxVRVMgKDIsICdpdGFiMScpIik7Ciskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gaXRhYjIg VkFMVUVTICgwLCAnaXRhYjInKSIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIklOU0VSVCBJTlRPIGl0YWIyIFZBTFVFUyAoMSwgJ2l0YWIyJykiKTsKKwor IyBTdWJzY3JpYmVyIDEgb25seSBzdWJzY3JpYmVzIHRvIHNvbWUgb2YgdGhlIHBhcnRpdGlv bnMsIGFuZCBkb2VzIG5vdCBzZXQgdXAKKyMgcGFydGl0aW9uIHRyaWdnZXJzLCB0byBjaGVj ayBmb3IgdGhlIGNvcnJlY3Qgcm91dGluZy4KKyRub2RlX3N1YnNjcmliZXIxLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFRBQkxFIGl0YWIxIChhIGludCwgYiB0ZXh0KSIp OworJG5vZGVfc3Vic2NyaWJlcjEtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUg VEFCTEUgaXRhYjFfMSAoQ0hFQ0sgKGEgPSAxKSkgSU5IRVJJVFMgKGl0YWIxKSIpOworJG5v ZGVfc3Vic2NyaWJlcjEtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgVEFCTEUg aXRhYjJfMSAoYSBpbnQsIGIgdGV4dCkiKTsKKworIyBTdWJzY3JpYmVyIDIgaGFzIGRpZmZl cmVudCBwYXJ0aXRpb24gbmFtZXMgZm9yIGl0YWIxLCBhbmQgaXQgZG9lc24ndCBwYXJ0aXRp b24KKyMgaXRhYjIgYXQgYWxsLgorJG5vZGVfc3Vic2NyaWJlcjItPnNhZmVfcHNxbCgncG9z dGdyZXMnLAorCSJDUkVBVEUgVEFCTEUgaXRhYjEgKGEgaW50LCBiIHRleHQpIik7Ciskbm9k ZV9zdWJzY3JpYmVyMi0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBUQUJMRSBp dGFiMV9wYXJ0MSAoQ0hFQ0sgKGEgPSAxKSkgSU5IRVJJVFMgKGl0YWIxKSIpOworJG5vZGVf c3Vic2NyaWJlcjItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgVEFCTEUgaXRh YjFfcGFydDIgKENIRUNLIChhID0gMikpIElOSEVSSVRTIChpdGFiMSkiKTsKKworJG5vZGVf c3Vic2NyaWJlcjItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiCisJQ1JFQVRFIE9SIFJFUExB Q0UgRlVOQ1RJT04gaXRhYl90cmlnZ2VyKCkKKwlSRVRVUk5TIFRSSUdHRVIgQVMgXCRcJAor CUJFR0lOCisJCUlGICggTkVXLmEgPSAxICkgVEhFTiBJTlNFUlQgSU5UTyBwdWJsaWMuaXRh YjFfcGFydDEgVkFMVUVTIChORVcuKik7CisJCUVMU0lGICggTkVXLmEgPSAyICkgVEhFTiBJ TlNFUlQgSU5UTyBwdWJsaWMuaXRhYjFfcGFydDIgVkFMVUVTIChORVcuKik7CisJCUVMU0Ug UkVUVVJOIE5FVzsKKwkJRU5EIElGOworCQlSRVRVUk4gTlVMTDsKKwlFTkQ7CisJXCRcJAor CUxBTkdVQUdFIHBscGdzcWw7Iik7Ciskbm9kZV9zdWJzY3JpYmVyMi0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICIKKwlDUkVBVEUgVFJJR0dFUiBpdGFiX3RyaWdnZXIKKwlCRUZPUkUgSU5T RVJUIE9OIGl0YWIxCisJRk9SIEVBQ0ggUk9XIEVYRUNVVEUgRlVOQ1RJT04gaXRhYl90cmln Z2VyKCk7Iik7Ciskbm9kZV9zdWJzY3JpYmVyMi0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICIK KwlBTFRFUiBUQUJMRSBpdGFiMSBFTkFCTEUgQUxXQVlTIFRSSUdHRVIgaXRhYl90cmlnZ2Vy OyIpOworCiskbm9kZV9zdWJzY3JpYmVyMi0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNS RUFURSBUQUJMRSBpdGFiMiAoYSBpbnQsIGIgdGV4dCkiKTsKKworJG5vZGVfc3Vic2NyaWJl cjEtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJBTFRFUiBTVUJTQ1JJUFRJT04gc3ViX3Zp YXJvb3QgUkVGUkVTSCBQVUJMSUNBVElPTiIpOworJG5vZGVfc3Vic2NyaWJlcjItPnNhZmVf cHNxbCgncG9zdGdyZXMnLAorCSJBTFRFUiBTVUJTQ1JJUFRJT04gc3ViMiBSRUZSRVNIIFBV QkxJQ0FUSU9OIik7CisKKyRub2RlX3N1YnNjcmliZXIxLT53YWl0X2Zvcl9zdWJzY3JpcHRp b25fc3luYzsKKyRub2RlX3N1YnNjcmliZXIyLT53YWl0X2Zvcl9zdWJzY3JpcHRpb25fc3lu YzsKKworIyBjaGVjayB0aGF0IGRhdGEgaXMgc3luY2VkIGNvcnJlY3RseQorCiskcmVzdWx0 ID0gJG5vZGVfc3Vic2NyaWJlcjEtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1Qg YSwgYiBGUk9NIGl0YWIxIE9SREVSIEJZIDEsIDIiKTsKK2lzKCRyZXN1bHQsIHFxKDB8aXRh YjEKKzF8aXRhYjEKKzJ8aXRhYjEpLCAnaW5pdGlhbCBkYXRhIHN5bmNlZCBmb3IgaXRhYjEg b24gc3Vic2NyaWJlciAxJyk7CisKKyMgYWxsIG9mIHRoZSBkYXRhIHNob3VsZCBoYXZlIGJl ZW4gcm91dGVkIHRvIGl0YWIxIGRpcmVjdGx5ICh0aGVyZSBhcmUgbm8KKyMgdHJpZ2dlcnMg b24gc3Vic2NyaWJlciAxIHRvIG1vdmUgaXQgZWxzZXdoZXJlKQorJHJlc3VsdCA9ICRub2Rl X3N1YnNjcmliZXIxLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIGEsIGIgRlJP TSBPTkxZIGl0YWIxIE9SREVSIEJZIDEsIDIiKTsKK2lzKCRyZXN1bHQsIHFxKDB8aXRhYjEK KzF8aXRhYjEKKzJ8aXRhYjEpLCAnaW5pdGlhbCBkYXRhIGNvcnJlY3RseSByb3V0ZWQgZm9y IGl0YWIxIG9uIHN1YnNjcmliZXIgMScpOworCiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJl cjEtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgYSwgYiBGUk9NIGl0YWIyXzEg T1JERVIgQlkgMSwgMiIpOworaXMoJHJlc3VsdCwgcXEoMXxpdGFiMiksICdpbml0aWFsIGRh dGEgc3luY2VkIGZvciBpdGFiMl8xIG9uIHN1YnNjcmliZXIgMScpOworCiskcmVzdWx0ID0g JG5vZGVfc3Vic2NyaWJlcjItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgYSwg YiBGUk9NIGl0YWIxIE9SREVSIEJZIDEsIDIiKTsKK2lzKCRyZXN1bHQsIHFxKDB8aXRhYjEK KzF8aXRhYjEKKzJ8aXRhYjEpLCAnaW5pdGlhbCBkYXRhIHN5bmNlZCBmb3IgaXRhYjEgb24g c3Vic2NyaWJlciAyJyk7CisKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyMi0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBhLCBiIEZST00gT05MWSBpdGFiMSBPUkRFUiBC WSAxLCAyIik7CitpcygkcmVzdWx0LCBxcSgwfGl0YWIxKSwgJ2luaXRpYWwgZGF0YSBjb3Jy ZWN0bHkgcm91dGVkIGZvciBpdGFiMSBvbiBzdWJzY3JpYmVyIDInKTsKKworJHJlc3VsdCA9 ICRub2RlX3N1YnNjcmliZXIyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIGEs IGIgRlJPTSBpdGFiMiBPUkRFUiBCWSAxLCAyIik7CitpcygkcmVzdWx0LCBxcSgwfGl0YWIy CisxfGl0YWIyKSwgJ2luaXRpYWwgZGF0YSBzeW5jZWQgZm9yIGl0YWIyIG9uIHN1YnNjcmli ZXIgMicpOworCisjIG1ha2Ugc3VyZSBuZXcgZGF0YSBpcyBhbHNvIGNvcnJlY3RseSByb3V0 ZWQgdG8gdGhlIHJvb3RzCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiSU5TRVJUIElOVE8gaXRhYjEgVkFMVUVTICgxLCAnaXRhYjEtbmV3JykiKTsKKyRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyBpdGFiMiBW QUxVRVMgKDEsICdpdGFiMi1uZXcnKSIpOworCiskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9y X2NhdGNodXAoJ3N1Yl92aWFyb290Jyk7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2Nh dGNodXAoJ3N1YjInKTsKKworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXIxLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIGEsIGIgRlJPTSBPTkxZIGl0YWIxIE9SREVSIEJZ IDEsIDIiKTsKK2lzKCRyZXN1bHQsIHFxKDB8aXRhYjEKKzF8aXRhYjEKKzF8aXRhYjEtbmV3 CisyfGl0YWIxKSwgJ25ldyBkYXRhIHJvdXRlZCBmb3IgaXRhYjEgb24gc3Vic2NyaWJlciAx Jyk7CisKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyMS0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsCisJIlNFTEVDVCBhLCBiIEZST00gaXRhYjJfMSBPUkRFUiBCWSAxLCAyIik7Citpcygk cmVzdWx0LCBxcSgxfGl0YWIyCisxfGl0YWIyLW5ldyksICduZXcgZGF0YSByb3V0ZWQgZm9y IGl0YWIyXzEgb24gc3Vic2NyaWJlciAxJyk7CisKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3Jp YmVyMi0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBhLCBiIEZST00gaXRhYjEg T1JERVIgQlkgMSwgMiIpOworaXMoJHJlc3VsdCwgcXEoMHxpdGFiMQorMXxpdGFiMQorMXxp dGFiMS1uZXcKKzJ8aXRhYjEpLCAnbmV3IGRhdGEgcm91dGVkIGZvciBpdGFiMSBvbiBzdWJz Y3JpYmVyIDInKTsKKworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXIyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywKKwkiU0VMRUNUIGEsIGIgRlJPTSBpdGFiMV9wYXJ0MSBPUkRFUiBCWSAx LCAyIik7CitpcygkcmVzdWx0LCBxcSgxfGl0YWIxCisxfGl0YWIxLW5ldyksICduZXcgZGF0 YSBtb3ZlZCB0byBpdGFiMV9wYXJ0MSBvbiBzdWJzY3JpYmVyIDInKTsKKworJHJlc3VsdCA9 ICRub2RlX3N1YnNjcmliZXIyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIGEs IGIgRlJPTSBpdGFiMiBPUkRFUiBCWSAxLCAyIik7CitpcygkcmVzdWx0LCBxcSgwfGl0YWIy CisxfGl0YWIyCisxfGl0YWIyLW5ldyksICduZXcgZGF0YSByb3V0ZWQgZm9yIGl0YWIyIG9u IHN1YnNjcmliZXIgMicpOworCiBkb25lX3Rlc3RpbmcoKTsKLS0gCjIuMjUuMQoK --------------95WPtNZKALGvHRS2U3D5sWZv--