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 1pIva5-00077H-4y for pgsql-hackers@arkaria.postgresql.org; Fri, 20 Jan 2023 17:53:37 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pIva3-0005os-DR for pgsql-hackers@arkaria.postgresql.org; Fri, 20 Jan 2023 17:53:35 +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 1pIva2-0005oY-U5 for pgsql-hackers@lists.postgresql.org; Fri, 20 Jan 2023 17:53:35 +0000 Received: from mail-pl1-x631.google.com ([2607:f8b0:4864:20::631]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1pIvZz-0004yR-MI for pgsql-hackers@lists.postgresql.org; Fri, 20 Jan 2023 17:53:34 +0000 Received: by mail-pl1-x631.google.com with SMTP id 5so680457plo.3 for ; Fri, 20 Jan 2023 09:53:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=timescale.com; s=google; h=in-reply-to:references:cc:to:from:content-language:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=Xse6z26tuATqX/WbPgilGH9lY2nSRAp7x+lUFkKA7wU=; b=LWbQ4nVvgFhCn+BQJkNK9QyggiBVdAiSjTXXPj4lyYT2jCdu/9UOLMTtnslcT9cpGa E6wWLTpq/t4zFdEDN3a85TajVPOELKTpzCnCKVzPyQYFCCmckSoKyYo3zWUzvTdhvXBN Oy6J4xR4H/GCzLqbqYuzlCfGAjMdUlhq6q+K0qwEggYrL61FuXrOxUn9dBHJts+bWlRq R0DOsmAgJkmilHf1ngQ9Q75JGTozC/W8PZxUG3kB+XTYbISO5YIfEZPcxG39y7drn6WD lOKQ6J2K/g8Azh8ER5UhaiFKTgjc5/aYgI4DxfsMjlJHnMZBaf6pec8bKztUSXBbzopO uN8g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=in-reply-to:references:cc:to:from:content-language:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=Xse6z26tuATqX/WbPgilGH9lY2nSRAp7x+lUFkKA7wU=; b=7Ckvnu3Cr6xG9PPmV/JEEYqya+b3pJZ0xEZrbzo0nkwKQ9dj76tM3BJG0kAvXJRJMv EQHj9IkELPlY+4Jdm+2EHg8qv+cbI0lMmEc7ON+2v5akBJuRHNruFGYnOOlUtN/3hJx6 A3JG9mpYNdYPhz/0YQ6Uy6c3irak4eKDe8nQuqGVKeLVPCy7P2A3EYx03x1yQTzTxt5U FvXxUq8kKliNwC8el244h9j5BtcrlSy5fsBhr4a7afK5MAxJ6S6tauTMhq4Nf43C5Vv7 KIZtuPXlgPKWToTBcMP4UTp4w/YI5qrRqNzkHllKwJYMRy7WRUnbz/ABqWILOKQQCSE8 qNHQ== X-Gm-Message-State: AFqh2kpNKZwAjyhNvt7tOrdx7+oCYsM2mynL1/z0A7IEiW2IFOWj2/g/ vDJLeEpvu0grwxe/9Yc7d826/+rApub5LV83dis= X-Google-Smtp-Source: AMrXdXvRyAds6/U/JZbEbuj7REzJvD22Eiv6FKmDxICUsUfYQDBn6WYte00FOoQmEnnioer1Nsu/Hg== X-Received: by 2002:a17:902:6b4b:b0:194:a1f6:65b6 with SMTP id g11-20020a1709026b4b00b00194a1f665b6mr17967702plt.41.1674237209284; Fri, 20 Jan 2023 09:53:29 -0800 (PST) Received: from [192.168.1.21] ([50.53.8.205]) by smtp.gmail.com with ESMTPSA id j6-20020a17090276c600b00194b37940edsm2220389plt.268.2023.01.20.09.53.28 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 20 Jan 2023 09:53:28 -0800 (PST) Content-Type: multipart/mixed; boundary="------------VjLgi1O7QALEdAM762BhYUYM" Message-ID: Date: Fri, 20 Jan 2023 09:53:28 -0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.4.2 Subject: Re: RFC: logical publication via inheritance root? Content-Language: en-US From: Jacob Champion To: Aleksander Alekseev Cc: PostgreSQL Hackers References: 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. --------------VjLgi1O7QALEdAM762BhYUYM Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 1/10/23 11:36, Jacob Champion wrote: > 1) I'm playing around with a marker in pg_inherits, where the inhseqno > is set to a sentinel value (0) for an inheritance relationship that > has been marked for logical publication. The intent is that the > pg_inherits helpers will prevent further inheritance relationships > when they see that marker, and reusing inhseqno means we can make use > of the existing index to do the lookups. An example: > > =# CREATE TABLE root (a int); > =# CREATE TABLE root_p1 () INHERITS (root); > =# SELECT pg_set_logical_root('root_p1', 'root'); > > and then any data written to root_p1 gets replicated via root instead, > if publish_via_partition_root = true. If root_p1 is set up with extra > columns, they'll be omitted from replication. First draft attached. (Due to some indentation changes, it's easiest to read with --ignore-all-space.) The overall strategy is - introduce pg_set_logical_root, which sets the sentinel in pg_inherits, - swap out any checks for partition parents with checks for logical parents in the publishing code, and - introduce the ability for a subscriber to perform an initial table sync from multiple tables on the publisher. > 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. And while I go down that rabbit hole, I wanted to see if anyone thinks this whole thing is unacceptable. :D Thanks, --Jacob --------------VjLgi1O7QALEdAM762BhYUYM 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 RnJvbSAzNzliZjk5ZWEwMjIyMDNkNDI4YTQwMjdkYTc1M2EwMGEzOTg5YzA0IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8amNoYW1waW9uQHRpbWVz Y2FsZS5jb20+CkRhdGU6IE1vbiwgMjYgU2VwIDIwMjIgMTM6MjM6NTEgLTA3MDAKU3ViamVj dDogW1BBVENIXSBXSVA6IGludHJvZHVjZSBwZ19zZXRfbG9naWNhbF9yb290IGZvciB1c2Ug d2l0aCBwdWJ2aWFyb290CgpBbGxvd3MgcmVndWxhciBpbmhlcml0ZWQgdGFibGVzIHRvIGJl IHB1Ymxpc2hlZCB2aWEgdGhlaXIgcm9vdCB0YWJsZSwKanVzdCBsaWtlIHBhcnRpdGlvbnMu IFRoaXMgd29ya3MgYnkgaGlqYWNraW5nIHBnX2luaGVyaXQncyBpbmhzZXFubwpjb2x1bW4s IGFuZCByZXBsYWNpbmcgYSAoc2luZ2xlKSBleGlzdGluZyBlbnRyeSBmb3IgdGhlIGNoaWxk IHdpdGggdGhlCnZhbHVlIHplcm8sIGluZGljYXRpbmcgdGhhdCBpdCBzaG91bGQgYmUgdHJl YXRlZCBhcyBhIGxvZ2ljYWwgcGFydGl0aW9uCmJ5IHRoZSBwdWJsaWNhdGlvbiBtYWNoaW5l cnkuCgooRm9yIHRoaXMgdG8gd29yayBjb3JyZWN0bHkgYXQgdGhlIG1vbWVudCwgdGhlIHB1 YmxpY2F0aW9uIG11c3Qgc2V0CnB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290PXRydWUuIFNl ZSBidWdzIGJlbG93LikKCkluaXRpYWwgc3luYyB3b3JrcyBieSBwdWxsaW5nIGluIGFsbCBs b2dpY2FsIGRlc2NlbmRhbnRzIG9uIHRoZQpzdWJzY3JpYmVyLCB0aGVuIENPUFlpbmcgdGhl bSBvbmUtYnktb25lIGludG8gdGhlIHJvb3QuIFRoZSBwdWJsaXNoZXIKcmV1c2VzIHRoZSBl eGlzdGluZyBwdWJ2aWFyb290IGxvZ2ljLCBhZGRpbmcgdGhlIG5ldyBsb2dpY2FsIHJvb3Rz IHRvCmNvZGUgdGhhdCBwcmV2aW91c2x5IGxvb2tlZCBvbmx5IGZvciBwYXJ0aXRpb24gcm9v dHMuCgpLbm93biBidWdzL1RPRE9zOgotIFdoZW4gcHVidmlhcm9vdCBpcyBmYWxzZSwgaW5p dGlhbCBzeW5jIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgKGl0CiAgYXNzdW1lcyBwdWJ2aWFy b290IGlzIG9uIGFuZCBDT1BZcyBhbGwgZGVzY2VuZGFudHMgaW50byB0aGUgcm9vdCkuCi0g VGhlIHBnX2luaGVyaXRzIG1hY2hpbmVyeSBkb2Vzbid0IHByb2hpYml0IGNoYW5nZXMgdG8g aW5oZXJpdGFuY2UKICBhZnRlciBhbiBlbnRyeSBoYXMgYmVlbiBtYXJrZWQgYXMgYSBsb2dp Y2FsIHJvb3QuCi0gSSBoYXZlbid0IGdpdmVuIGFueSB0aG91Z2h0IHRvIGludGVyYWN0aW9u cyB3aXRoIHJvdyBmaWx0ZXJzLCBvciB0bwogIGNvbHVtbiBsaXN0cywgb3IgdG8gbXVsdGlw bGUgcHVibGljYXRpb25zIHdpdGggY29uZmxpY3RpbmcgcHVidmlhcm9vdAogIHNldHRpbmdz LgotIHBnX3NldF9sb2dpY2FsX3Jvb3QoKSBkb2Vzbid0IGNoZWNrIGZvciB0YWJsZSBvd25l cnNoaXAgeWV0LiBBbnlvbmUKICBjYW4gbXVjayB3aXRoIHBnX2luaGVyaXRzIHRocm91Z2gg aXQuCi0gSSdtIG5vdCBzdXJlIHRoYXQgSSdtIHRha2luZyBhbGwgdGhlIG5lY2Vzc2FyeSBs b2NrcyB5ZXQsIGFuZCB0aG9zZSBJCiAgZG8gdGFrZSBtYXkgYmUgdGFrZW4gaW4gdGhlIHdy b25nIG9yZGVyLgotLS0KIHNyYy9iYWNrZW5kL2NhdGFsb2cvcGdfaW5oZXJpdHMuYyAgICAg ICAgICAgfCAxNTQgKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVi bGljYXRpb24uYyAgICAgICAgfCAgMzAgKy0tCiBzcmMvYmFja2VuZC9jb21tYW5kcy9wdWJs aWNhdGlvbmNtZHMuYyAgICAgIHwgIDEwICsKIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xv Z2ljYWwvdGFibGVzeW5jLmMgfCAyMjEgKysrKysrKysrKysrKy0tLS0tLS0KIHNyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMgfCAgNTQgKystLS0KIHNyYy9p bmNsdWRlL2NhdGFsb2cvcGdfaW5oZXJpdHMuaCAgICAgICAgICAgfCAgIDIgKwogc3JjL2lu Y2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCAgICAgICAgICAgICB8ICAgNSArCiBzcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dCAgIHwgIDMyICsrKwogc3JjL3Rl c3QvcmVncmVzcy9zcWwvcHVibGljYXRpb24uc3FsICAgICAgICB8ICAyNSArKysKIHNyYy90 ZXN0L3N1YnNjcmlwdGlvbi90LzAxM19wYXJ0aXRpb24ucGwgICAgfCAxODYgKysrKysrKysr KysrKysrKwogMTAgZmlsZXMgY2hhbmdlZCwgNjA4IGluc2VydGlvbnMoKyksIDExMSBkZWxl dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX2luaGVyaXRz LmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX2luaGVyaXRzLmMKaW5kZXggZGE5NjliZDJm OS4uYzI5MGE5OTM2YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19pbmhl cml0cy5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfaW5oZXJpdHMuYwpAQCAtMjQs MTAgKzI0LDEzIEBACiAjaW5jbHVkZSAiYWNjZXNzL3RhYmxlLmgiCiAjaW5jbHVkZSAiY2F0 YWxvZy9pbmRleGluZy5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfaW5oZXJpdHMuaCIKKyNp bmNsdWRlICJjYXRhbG9nL3BhcnRpdGlvbi5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJzZV90 eXBlLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVp bHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9mbWdyb2lkcy5oIgorI2luY2x1ZGUgInV0aWxz L2ZtZ3Jwcm90b3MuaCIKKyNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKICNpbmNsdWRl ICJ1dGlscy9tZW11dGlscy5oIgogI2luY2x1ZGUgInV0aWxzL3NuYXBtZ3IuaCIKICNpbmNs dWRlICJ1dGlscy9zeXNjYWNoZS5oIgpAQCAtNjU1LDMgKzY1OCwxNTQgQEAgUGFydGl0aW9u 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 aWNhdGlvbi5jCmluZGV4IGE5OGZjYWQ0MjEuLmUxYTAyZTE4ZDkgMTAwNjQ0Ci0tLSBhL3Ny 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 IHRoZSByZXN1bHQgcm93cy4gKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRz L3B1YmxpY2F0aW9uY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25j bWRzLmMKaW5kZXggZjRiYTU3MjY5Ny4uN2UyM2JlZDZjMCAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29t bWFuZHMvcHVibGljYXRpb25jbWRzLmMKQEAgLTIzOCw2ICsyMzgsOCBAQCBjb250YWluX2lu dmFsaWRfcmZjb2x1bW5fd2Fsa2VyKE5vZGUgKm5vZGUsIHJmX2NvbnRleHQgKmNvbnRleHQp CiAJCSAqIHBhcmVudCB0YWJsZSwgYnV0IHRoZSBiaXRtYXAgY29udGFpbnMgdGhlIHJlcGxp Y2EgaWRlbnRpdHkKIAkJICogaW5mb3JtYXRpb24gb2YgdGhlIGNoaWxkIHRhYmxlLiBTbywg Z2V0IHRoZSBjb2x1bW4gbnVtYmVyIG9mIHRoZQogCQkgKiBjaGlsZCB0YWJsZSBhcyBwYXJl bnQgYW5kIGNoaWxkIGNvbHVtbiBvcmRlciBjb3VsZCBiZSBkaWZmZXJlbnQuCisJCSAqCisJ CSAqIFRPRE86IGlzIHRoaXMgYXBwbGljYWJsZSB0byBwZ19zZXRfbG9naWNhbF9yb290KCk/ CiAJCSAqLwogCQlpZiAoY29udGV4dC0+cHVidmlhcm9vdCkKIAkJewpAQCAtMjg2LDYgKzI4 OCw4IEBAIHB1Yl9yZl9jb250YWluc19pbnZhbGlkX2NvbHVtbihPaWQgcHViaWQsIFJlbGF0 aW9uIHJlbGF0aW9uLCBMaXN0ICphbmNlc3RvcnMsCiAJICoKIAkgKiBOb3RlIHRoYXQgZXZl biB0aG91Z2ggdGhlIHJvdyBmaWx0ZXIgdXNlZCBpcyBmb3IgYW4gYW5jZXN0b3IsIHRoZQog CSAqIFJFUExJQ0EgSURFTlRJVFkgdXNlZCB3aWxsIGJlIGZvciB0aGUgYWN0dWFsIGNoaWxk IHRhYmxlLgorCSAqCisJICogVE9ETzogaXMgdGhpcyBhcHBsaWNhYmxlIHRvIHBnX3NldF9s b2dpY2FsX3Jvb3QoKT8KIAkgKi8KIAlpZiAocHVidmlhcm9vdCAmJiByZWxhdGlvbi0+cmRf cmVsLT5yZWxpc3BhcnRpdGlvbikKIAl7CkBAIC0zMzYsNiArMzQwLDggQEAgcHViX3JmX2Nv bnRhaW5zX2ludmFsaWRfY29sdW1uKE9pZCBwdWJpZCwgUmVsYXRpb24gcmVsYXRpb24sIExp c3QgKmFuY2VzdG9ycywKICAqIHRoZSBjb2x1bW4gbGlzdC4KICAqCiAgKiBSZXR1cm5zIHRy dWUgaWYgYW55IHJlcGxpY2EgaWRlbnRpdHkgY29sdW1uIGlzIG5vdCBjb3ZlcmVkIGJ5IGNv bHVtbiBsaXN0LgorICoKKyAqIFRPRE86IHBnX3NldF9sb2dpY2FsX3Jvb3QoKT8KICAqLwog Ym9vbAogcHViX2NvbGxpc3RfY29udGFpbnNfaW52YWxpZF9jb2x1bW4oT2lkIHB1YmlkLCBS ZWxhdGlvbiByZWxhdGlvbiwgTGlzdCAqYW5jZXN0b3JzLApAQCAtNjI4LDYgKzYzNCw4IEBA IFRyYW5zZm9ybVB1YldoZXJlQ2xhdXNlcyhMaXN0ICp0YWJsZXMsIGNvbnN0IGNoYXIgKnF1 ZXJ5U3RyaW5nLAogCQkgKiBJZiB0aGUgcHVibGljYXRpb24gZG9lc24ndCBwdWJsaXNoIGNo YW5nZXMgdmlhIHRoZSByb290IHBhcnRpdGlvbmVkCiAJCSAqIHRhYmxlLCB0aGUgcGFydGl0 aW9uJ3Mgcm93IGZpbHRlciB3aWxsIGJlIHVzZWQuIFNvIGRpc2FsbG93IHVzaW5nCiAJCSAq IFdIRVJFIGNsYXVzZSBvbiBwYXJ0aXRpb25lZCB0YWJsZSBpbiB0aGlzIGNhc2UuCisJCSAq CisJCSAqIFRPRE86IGRlY2lkZSBob3cgdGhpcyBpbnRlcmFjdHMgd2l0aCBwZ19zZXRfbG9n aWNhbF9yb290CiAJCSAqLwogCQlpZiAoIXB1YnZpYXJvb3QgJiYKIAkJCXByaS0+cmVsYXRp b24tPnJkX3JlbC0+cmVsa2luZCA9PSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFKQpAQCAt NzE1LDYgKzcyMyw4IEBAIENoZWNrUHViUmVsYXRpb25Db2x1bW5MaXN0KGNoYXIgKnB1Ym5h bWUsIExpc3QgKnRhYmxlcywKIAkJICogSWYgdGhlIHB1YmxpY2F0aW9uIGRvZXNuJ3QgcHVi bGlzaCBjaGFuZ2VzIHZpYSB0aGUgcm9vdCBwYXJ0aXRpb25lZAogCQkgKiB0YWJsZSwgdGhl IHBhcnRpdGlvbidzIGNvbHVtbiBsaXN0IHdpbGwgYmUgdXNlZC4gU28gZGlzYWxsb3cgdXNp bmcKIAkJICogYSBjb2x1bW4gbGlzdCBvbiB0aGUgcGFydGl0aW9uZWQgdGFibGUgaW4gdGhp cyBjYXNlLgorCQkgKgorCQkgKiBUT0RPOiBkZWNpZGUgaWYgdGhpcyBpbnRlcmFjdHMgd2l0 aCBwZ19zZXRfbG9naWNhbF9yb290KCkKIAkJICovCiAJCWlmICghcHVidmlhcm9vdCAmJgog CQkJcHJpLT5yZWxhdGlvbi0+cmRfcmVsLT5yZWxraW5kID09IFJFTEtJTkRfUEFSVElUSU9O RURfVEFCTEUpCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L3RhYmxlc3luYy5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC90YWJsZXN5 bmMuYwppbmRleCAzOGRmY2U3MTI5Li5iODNiOWU5MWVmIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3RhYmxlc3luYy5jCisrKyBiL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xvZ2ljYWwvdGFibGVzeW5jLmMKQEAgLTc0OCwxMSArNzQ4LDEyIEBA IGNvcHlfcmVhZF9kYXRhKHZvaWQgKm91dGJ1ZiwgaW50IG1pbnJlYWQsIGludCBtYXhyZWFk KQogLyoKICAqIEdldCBpbmZvcm1hdGlvbiBhYm91dCByZW1vdGUgcmVsYXRpb24gaW4gc2lt aWxhciBmYXNoaW9uIHRoZSBSRUxBVElPTgogICogbWVzc2FnZSBwcm92aWRlcyBkdXJpbmcg cmVwbGljYXRpb24uIFRoaXMgZnVuY3Rpb24gYWxzbyByZXR1cm5zIHRoZSByZWxhdGlvbgot ICogcXVhbGlmaWNhdGlvbnMgdG8gYmUgdXNlZCBpbiB0aGUgQ09QWSBjb21tYW5kLgorICog cXVhbGlmaWNhdGlvbnMgdG8gYmUgdXNlZCBpbiB0aGUgQ09QWSBjb21tYW5kLCBhbmQgdGhl IGxpc3Qgb2YgdGFibGVzIHRvIENPUFkKKyAqICh3aGljaCBmb3IgbW9zdCB0YWJsZXMgd2ls bCBjb250YWluIG9ubHkgb25lIGVudHJ5KS4KICAqLwogc3RhdGljIHZvaWQKIGZldGNoX3Jl bW90ZV90YWJsZV9pbmZvKGNoYXIgKm5zcG5hbWUsIGNoYXIgKnJlbG5hbWUsCi0JCQkJCQlM b2dpY2FsUmVwUmVsYXRpb24gKmxyZWwsIExpc3QgKipxdWFsKQorCQkJCQkJTG9naWNhbFJl cFJlbGF0aW9uICpscmVsLCBMaXN0ICoqcXVhbCwgTGlzdCAqKnRvX2NvcHkpCiB7CiAJV2Fs UmN2RXhlY1Jlc3VsdCAqcmVzOwogCVN0cmluZ0luZm9EYXRhIGNtZDsKQEAgLTEwNjMsNiAr MTA2NCw3MyBAQCBmZXRjaF9yZW1vdGVfdGFibGVfaW5mbyhjaGFyICpuc3BuYW1lLCBjaGFy ICpyZWxuYW1lLAogCQl3YWxyY3ZfY2xlYXJfcmVzdWx0KHJlcyk7CiAJfQogCisJLyoKKwkg KiBTZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciB0YWJsZXMgdG8gYmUgY29waWVkIGJlc2lk ZXMgdGhlIG9yaWdpbmFsLiBUaGlzCisJICogaGFwcGVucyB3aGVuIGEgZGVzY2VuZGFudCBp biB0aGUgaW5oZXJpdGFuY2UgcmVsYXRpb25zaGlwIGlzIG1hcmtlZCB3aXRoCisJICogcGdf c2V0X2xvZ2ljYWxfcm9vdCgpLgorCSAqLworCWlmICh3YWxyY3Zfc2VydmVyX3ZlcnNpb24o TG9nUmVwV29ya2VyV2FsUmN2Q29ubikgPj0gMTYwMDAwKQorCXsKKwkJT2lkCQkJZGVzY1Jv d1tdID0ge1RFWFRPSUQsIFRFWFRPSUR9OworCisJCS8qCisJCSAqIEZpbmQgYWxsIGxvZ2lj YWwgZGVzY2VuZGFudHMgcm9vdGVkIGF0IHRoaXMgdGFibGUgKGluY2x1ZGluZyB0aGUKKwkJ ICogdGFibGUgaXRzZWxmKS4KKwkJICovCisJCXJlc2V0U3RyaW5nSW5mbygmY21kKTsKKwkJ YXBwZW5kU3RyaW5nSW5mbygmY21kLAorCQkJCQkJICJXSVRIIFJFQ1VSU0lWRSBkZXNjZW5k YW50cyhyZWxpZCkgQVMgKCIKKwkJCQkJCSAiICBWQUxVRVMgKCV1OjpvaWQpIFVOSU9OIEFM TCIKKwkJCQkJCSAiICBTRUxFQ1QgaW5ocmVsaWQiCisJCQkJCQkgIiAgICBGUk9NIHBnX2Nh dGFsb2cucGdfaW5oZXJpdHMgaSwgZGVzY2VuZGFudHMgZCIKKwkJCQkJCSAiICAgV0hFUkUg aS5pbmhzZXFubyA9IDAiCisJCQkJCQkgIiAgICAgQU5EIGQucmVsaWQgPSBpLmluaHBhcmVu dCIKKwkJCQkJCSAiKSIKKwkJCQkJCSAiU0VMRUNUIG4ubnNwbmFtZSwgYy5yZWxuYW1lIgor CQkJCQkJICIgIEZST00gZGVzY2VuZGFudHMsIgorCQkJCQkJICIgICAgICAgcGdfY2F0YWxv Zy5wZ19jbGFzcyBjIgorCQkJCQkJICIgIEpPSU4gcGdfY2F0YWxvZy5wZ19uYW1lc3BhY2Ug biIKKwkJCQkJCSAiICAgIE9OIChjLnJlbG5hbWVzcGFjZSA9IG4ub2lkKSIKKwkJCQkJCSAi IFdIRVJFIGMub2lkID0gZGVzY2VuZGFudHMucmVsaWQiLAorCQkJCQkJIGxyZWwtPnJlbW90 ZWlkKTsKKworCQlyZXMgPSB3YWxyY3ZfZXhlYyhMb2dSZXBXb3JrZXJXYWxSY3ZDb25uLCBj bWQuZGF0YSwKKwkJCQkJCSAgbGVuZ3Rob2YoZGVzY1JvdyksIGRlc2NSb3cpOworCisJCWlm IChyZXMtPnN0YXR1cyAhPSBXQUxSQ1ZfT0tfVFVQTEVTKQorCQkJZXJlcG9ydChFUlJPUiwK KwkJCQkJKGVycm1zZygiY291bGQgbm90IGZldGNoIGxvZ2ljYWwgZGVzY2VuZGFudHMgZm9y IHRhYmxlIFwiJXMuJXNcIiBmcm9tIHB1Ymxpc2hlcjogJXMiLAorCQkJCQkJCW5zcG5hbWUs IHJlbG5hbWUsIHJlcy0+ZXJyKSkpOworCisJCXNsb3QgPSBNYWtlU2luZ2xlVHVwbGVUYWJs ZVNsb3QocmVzLT50dXBsZWRlc2MsICZUVFNPcHNNaW5pbWFsVHVwbGUpOworCQl3aGlsZSAo dHVwbGVzdG9yZV9nZXR0dXBsZXNsb3QocmVzLT50dXBsZXN0b3JlLCB0cnVlLCBmYWxzZSwg c2xvdCkpCisJCXsKKwkJCWNoYXIJICAgKmRlc2NfbnNwbmFtZTsKKwkJCWNoYXIJICAgKmRl c2NfcmVsbmFtZTsKKwkJCWNoYXIJICAgKnF1b3RlZDsKKworCQkJZGVzY19uc3BuYW1lID0g VGV4dERhdHVtR2V0Q1N0cmluZyhzbG90X2dldGF0dHIoc2xvdCwgMSwgJmlzbnVsbCkpOwor CQkJQXNzZXJ0KCFpc251bGwpOworCQkJZGVzY19yZWxuYW1lID0gVGV4dERhdHVtR2V0Q1N0 cmluZyhzbG90X2dldGF0dHIoc2xvdCwgMiwgJmlzbnVsbCkpOworCQkJQXNzZXJ0KCFpc251 bGwpOworCisJCQlxdW90ZWQgPSBxdW90ZV9xdWFsaWZpZWRfaWRlbnRpZmllcihkZXNjX25z cG5hbWUsIGRlc2NfcmVsbmFtZSk7CisJCQkqdG9fY29weSA9IGxhcHBlbmQoKnRvX2NvcHks IHF1b3RlZCk7CisKKwkJCUV4ZWNDbGVhclR1cGxlKHNsb3QpOworCQl9CisKKwkJRXhlY0Ry b3BTaW5nbGVUdXBsZVRhYmxlU2xvdChzbG90KTsKKwkJd2FscmN2X2NsZWFyX3Jlc3VsdChy ZXMpOworCX0KKwllbHNlCisJeworCQkvKiBGb3Igb2xkZXIgc2VydmVycywgd2Ugb25seSBD T1BZIHRoZSB0YWJsZSBpdHNlbGYuICovCisJCWNoYXIgICAqcXVvdGVkID0gcXVvdGVfcXVh bGlmaWVkX2lkZW50aWZpZXIobHJlbC0+bnNwbmFtZSwKKwkJCQkJCQkJCQkJCQlscmVsLT5y ZWxuYW1lKTsKKwkJKnRvX2NvcHkgPSBsYXBwZW5kKCp0b19jb3B5LCBxdW90ZWQpOworCX0K KwogCXBmcmVlKGNtZC5kYXRhKTsKIH0KIApAQCAtMTA3Nyw2ICsxMTQ1LDggQEAgY29weV90 YWJsZShSZWxhdGlvbiByZWwpCiAJTG9naWNhbFJlcFJlbE1hcEVudHJ5ICpyZWxtYXBlbnRy eTsKIAlMb2dpY2FsUmVwUmVsYXRpb24gbHJlbDsKIAlMaXN0CSAgICpxdWFsID0gTklMOwor CUxpc3QJICAgKnRvX2NvcHkgPSBOSUw7CisJTGlzdENlbGwgICAqY3VyOwogCVdhbFJjdkV4 ZWNSZXN1bHQgKnJlczsKIAlTdHJpbmdJbmZvRGF0YSBjbWQ7CiAJQ29weUZyb21TdGF0ZSBj c3RhdGU7CkBAIC0xMDg1LDcgKzExNTUsOCBAQCBjb3B5X3RhYmxlKFJlbGF0aW9uIHJlbCkK IAogCS8qIEdldCB0aGUgcHVibGlzaGVyIHJlbGF0aW9uIGluZm8uICovCiAJZmV0Y2hfcmVt b3RlX3RhYmxlX2luZm8oZ2V0X25hbWVzcGFjZV9uYW1lKFJlbGF0aW9uR2V0TmFtZXNwYWNl KHJlbCkpLAotCQkJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCksICZscmVsLCAm cXVhbCk7CisJCQkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSwgJmxyZWwsICZx dWFsLAorCQkJCQkJCSZ0b19jb3B5KTsKIAogCS8qIFB1dCB0aGUgcmVsYXRpb24gaW50byBy ZWxtYXAuICovCiAJbG9naWNhbHJlcF9yZWxtYXBfdXBkYXRlKCZscmVsKTsKQEAgLTEwOTQs OTIgKzExNjUsOTYgQEAgY29weV90YWJsZShSZWxhdGlvbiByZWwpCiAJcmVsbWFwZW50cnkg PSBsb2dpY2FscmVwX3JlbF9vcGVuKGxyZWwucmVtb3RlaWQsIE5vTG9jayk7CiAJQXNzZXJ0 KHJlbCA9PSByZWxtYXBlbnRyeS0+bG9jYWxyZWwpOwogCi0JLyogU3RhcnQgY29weSBvbiB0 aGUgcHVibGlzaGVyLiAqLwotCWluaXRTdHJpbmdJbmZvKCZjbWQpOwotCi0JLyogUmVndWxh ciB0YWJsZSB3aXRoIG5vIHJvdyBmaWx0ZXIgKi8KLQlpZiAobHJlbC5yZWxraW5kID09IFJF TEtJTkRfUkVMQVRJT04gJiYgcXVhbCA9PSBOSUwpCisJZm9yZWFjaChjdXIsIHRvX2NvcHkp CiAJewotCQlhcHBlbmRTdHJpbmdJbmZvKCZjbWQsICJDT1BZICVzICgiLAotCQkJCQkJIHF1 b3RlX3F1YWxpZmllZF9pZGVudGlmaWVyKGxyZWwubnNwbmFtZSwgbHJlbC5yZWxuYW1lKSk7 CisJCWNoYXIJICAgKnF1b3RlZF9uYW1lID0gbGZpcnN0KGN1cik7CiAKLQkJLyoKLQkJICog WFhYIERvIHdlIG5lZWQgdG8gbGlzdCB0aGUgY29sdW1ucyBpbiBhbGwgY2FzZXM/IE1heWJl IHdlJ3JlCi0JCSAqIHJlcGxpY2F0aW5nIGFsbCBjb2x1bW5zPwotCQkgKi8KLQkJZm9yIChp bnQgaSA9IDA7IGkgPCBscmVsLm5hdHRzOyBpKyspCi0JCXsKLQkJCWlmIChpID4gMCkKLQkJ CQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjbWQsICIsICIpOwotCi0JCQlhcHBlbmRTdHJp bmdJbmZvU3RyaW5nKCZjbWQsIHF1b3RlX2lkZW50aWZpZXIobHJlbC5hdHRuYW1lc1tpXSkp OwotCQl9CisJCS8qIFN0YXJ0IGNvcHkgb24gdGhlIHB1Ymxpc2hlci4gKi8KKwkJaW5pdFN0 cmluZ0luZm8oJmNtZCk7CiAKLQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmY21kLCAiKSBU 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 dHJpbmcoJmNtZCwgIiwgIik7CisJCQl9CiAKLQkJCWFwcGVuZFN0cmluZ0luZm8oJmNtZCwg IiBXSEVSRSAlcyIsIHEpOwotCQkJZm9yX2VhY2hfZnJvbShsYywgcXVhbCwgMSkKKwkJCWFw cGVuZFN0cmluZ0luZm9TdHJpbmcoJmNtZCwgIiBGUk9NICIpOworCisJCQkvKgorCQkJICog 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 ZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jCmluZGV4IDFhODBkNjdiYjkuLjg5 N2M1ZTBkOTIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0 L3Bnb3V0cHV0LmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdv dXRwdXQuYwpAQCAtMTQsNiArMTQsNyBAQAogCiAjaW5jbHVkZSAiYWNjZXNzL3R1cGNvbnZl cnQuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BhcnRpdGlvbi5oIgorI2luY2x1ZGUgImNhdGFs b2cvcGdfaW5oZXJpdHMuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmgi CiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19wdWJsaWNhdGlvbl9yZWwuaCIKICNpbmNsdWRlICJj YXRhbG9nL3BnX3N1YnNjcmlwdGlvbi5oIgpAQCAtMTQ1MCw3ICsxNDUxLDYgQEAgcGdvdXRw dXRfY2hhbmdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRY TiAqdHhuLAogCQkJLyogU3dpdGNoIHJlbGF0aW9uIGlmIHB1Ymxpc2hpbmcgdmlhIHJvb3Qu ICovCiAJCQlpZiAocmVsZW50cnktPnB1Ymxpc2hfYXNfcmVsaWQgIT0gUmVsYXRpb25HZXRS ZWxpZChyZWxhdGlvbikpCiAJCQl7Ci0JCQkJQXNzZXJ0KHJlbGF0aW9uLT5yZF9yZWwtPnJl bGlzcGFydGl0aW9uKTsKIAkJCQlhbmNlc3RvciA9IFJlbGF0aW9uSWRHZXRSZWxhdGlvbihy ZWxlbnRyeS0+cHVibGlzaF9hc19yZWxpZCk7CiAJCQkJdGFyZ2V0cmVsID0gYW5jZXN0b3I7 CiAJCQkJLyogQ29udmVydCB0dXBsZSBpZiBuZWVkZWQuICovCkBAIC0yMTQxLDU1ICsyMTQx 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 YWI5NDMuLjU5ZDcyYTk3YjggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdf aW5oZXJpdHMuaAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX2luaGVyaXRzLmgKQEAg LTYzLDUgKzYzLDcgQEAgZXh0ZXJuIGJvb2wgRGVsZXRlSW5oZXJpdHNUdXBsZShPaWQgaW5o cmVsaWQsIE9pZCBpbmhwYXJlbnQsCiAJCQkJCQkJCWJvb2wgZXhwZWN0X2RldGFjaF9wZW5k aW5nLAogCQkJCQkJCQljb25zdCBjaGFyICpjaGlsZG5hbWUpOwogZXh0ZXJuIGJvb2wgUGFy dGl0aW9uSGFzUGVuZGluZ0RldGFjaChPaWQgcGFydG9pZCk7CitleHRlcm4gTGlzdCAqZ2V0 X2xvZ2ljYWxfYW5jZXN0b3JzKE9pZCByZWxpZCwgYm9vbCBpc19wYXJ0aXRpb24pOworZXh0 ZXJuIGJvb2wgaGFzX2xvZ2ljYWxfcGFyZW50KFJlbGF0aW9uIGluaFJlbCwgT2lkIHJlbGlk KTsKIAogI2VuZGlmCQkJCQkJCS8qIFBHX0lOSEVSSVRTX0ggKi8KZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3Bn X3Byb2MuZGF0CmluZGV4IDg2ZWI4ZThjNTguLjZmNWY4NWM1Y2MgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxv Zy9wZ19wcm9jLmRhdApAQCAtMTE4OTEsNCArMTE4OTEsOSBAQAogICBwcm9yZXR0eXBlID0+ ICdieXRlYScsIHByb2FyZ3R5cGVzID0+ICdwZ19icmluX21pbm1heF9tdWx0aV9zdW1tYXJ5 JywKICAgcHJvc3JjID0+ICdicmluX21pbm1heF9tdWx0aV9zdW1tYXJ5X3NlbmQnIH0sCiAK K3sgb2lkID0+ICc4MTM2JywgZGVzY3IgPT4gJ21hcmsgYSB0YWJsZSByb290IGZvciBsb2dp Y2FsIHJlcGxpY2F0aW9uJywKKyAgcHJvbmFtZSA9PiAncGdfc2V0X2xvZ2ljYWxfcm9vdCcs IHByb3ZvbGF0aWxlID0+ICd2JywgcHJvcGFyYWxsZWwgPT4gJ3UnLAorICBwcm9yZXR0eXBl ID0+ICd2b2lkJywgcHJvYXJndHlwZXMgPT4gJ3JlZ2NsYXNzIHJlZ2NsYXNzJywKKyAgcHJv c3JjID0+ICdwZ19zZXRfbG9naWNhbF9yb290JyB9LAorCiBdCmRpZmYgLS1naXQgYS9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dCBiL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0CmluZGV4IDQyN2Y4N2VhMDcuLjBlMDYxMDNm NGMgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24u b3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0CkBA IC0xNzE4LDkgKzE3MTgsNDEgQEAgU0VMRUNUICogRlJPTSBwZ19wdWJsaWNhdGlvbl90YWJs ZXM7CiAgcHViICAgICB8IHNjaDEgICAgICAgfCB0YmwxICAgICAgfCB7YX0gICAgICB8IAog KDEgcm93KQogCistLSBTYW5pdHkgY2hlY2sgY2FzZXMgZm9yIHBnX3NldF9sb2dpY2FsX3Jv b3QoKS4KK0NSRUFURSBUQUJMRSBzY2gxLmlyb290IChhIGludCk7CitDUkVBVEUgVEFCTEUg c2NoMS5pcGFydDEgKGEgaW50KTsKK0NSRUFURSBUQUJMRSBzY2gxLmlwYXJ0MiAoKSBJTkhF UklUUyAoc2NoMS5pcm9vdCk7CistLSBtYXJraW5nIHJvb3RzIGJldHdlZW4gdW5yZWxhdGVk IHRhYmxlcyBpcyBub3QgYWxsb3dlZAorU0VMRUNUIHBnX3NldF9sb2dpY2FsX3Jvb3QoJ3Nj aDEuaXBhcnQxJywgJ3NjaDEuaXJvb3QnKTsKK0VSUk9SOiAgdGFibGUgImlwYXJ0MSIgZG9l cyBub3QgaW5oZXJpdCBmcm9tIGludGVuZGVkIHJvb3QgdGFibGUgImlyb290IgorU0VMRUNU IHBnX3NldF9sb2dpY2FsX3Jvb3QoJ3NjaDEuaXBhcnQyJywgJ3NjaDEudGJsMScpOworRVJS T1I6ICB0YWJsZSAiaXBhcnQyIiBkb2VzIG5vdCBpbmhlcml0IGZyb20gaW50ZW5kZWQgcm9v dCB0YWJsZSAidGJsMSIKKy0tIGVzdGFibGlzaGluZyBhbiBpbmhlcml0YW5jZSByZWxhdGlv bnNoaXAgZml4ZXMgdGhlIHByb2JsZW0KK0FMVEVSIFRBQkxFIHNjaDEuaXBhcnQxIElOSEVS SVQgc2NoMS5pcm9vdDsKK1NFTEVDVCBwZ19zZXRfbG9naWNhbF9yb290KCdzY2gxLmlwYXJ0 MScsICdzY2gxLmlyb290Jyk7CisgcGdfc2V0X2xvZ2ljYWxfcm9vdCAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIAorKDEgcm93KQorCistLSBidXQgbXVsdGlwbGUgaW5oZXJpdGFuY2Ug aXMgbm90IGFsbG93ZWQKK0FMVEVSIFRBQkxFIHNjaDEuaXBhcnQyIElOSEVSSVQgc2NoMS5p cGFydDE7CitTRUxFQ1QgcGdfc2V0X2xvZ2ljYWxfcm9vdCgnc2NoMS5pcGFydDInLCAnc2No MS5pcm9vdCcpOworRVJST1I6ICB0YWJsZSAiaXBhcnQyIiBpbmhlcml0cyBmcm9tIG11bHRp cGxlIHRhYmxlcworQUxURVIgVEFCTEUgc2NoMS5pcGFydDIgTk8gSU5IRVJJVCBzY2gxLmlw YXJ0MTsKK1NFTEVDVCBwZ19zZXRfbG9naWNhbF9yb290KCdzY2gxLmlwYXJ0MicsICdzY2gx Lmlyb290Jyk7CisgcGdfc2V0X2xvZ2ljYWxfcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIAorKDEgcm93KQorCistLSBUT0RPOiBtYWtlIHN1cmUgZXhpc3RpbmcgbG9naWNhbCBk ZXNjZW5kYW50IGNhbid0IGJlIEFMVEVSZWQgW05PXSBJTkhFUklUCiBSRVNFVCBjbGllbnRf bWluX21lc3NhZ2VzOwogRFJPUCBQVUJMSUNBVElPTiBwdWI7CiBEUk9QIFRBQkxFIHNjaDEu dGJsMTsKK0RST1AgVEFCTEUgc2NoMS5pcGFydDE7CitEUk9QIFRBQkxFIHNjaDEuaXBhcnQy OworRFJPUCBUQUJMRSBzY2gxLmlyb290OwogRFJPUCBTQ0hFTUEgc2NoMSBjYXNjYWRlOwog RFJPUCBTQ0hFTUEgc2NoMiBjYXNjYWRlOwogUkVTRVQgU0VTU0lPTiBBVVRIT1JJWkFUSU9O OwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcHVibGljYXRpb24uc3FsIGIv c3JjL3Rlc3QvcmVncmVzcy9zcWwvcHVibGljYXRpb24uc3FsCmluZGV4IGE0N2M1OTM5ZDUu LjUyYTBkNmJhNDggMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3B1YmxpY2F0 aW9uLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wdWJsaWNhdGlvbi5zcWwKQEAg LTEwODcsOSArMTA4NywzNCBAQCBBTFRFUiBUQUJMRSBzY2gxLnRibDEgQVRUQUNIIFBBUlRJ VElPTiBzY2gxLnRibDFfcGFydDMgRk9SIFZBTFVFUyBGUk9NICgyMCkgdG8gKAogQ1JFQVRF IFBVQkxJQ0FUSU9OIHB1YiBGT1IgVEFCTEVTIElOIFNDSEVNQSBzY2gxIFdJVEggKFBVQkxJ U0hfVklBX1BBUlRJVElPTl9ST09UPTEpOwogU0VMRUNUICogRlJPTSBwZ19wdWJsaWNhdGlv bl90YWJsZXM7CiAKKy0tIFNhbml0eSBjaGVjayBjYXNlcyBmb3IgcGdfc2V0X2xvZ2ljYWxf cm9vdCgpLgorQ1JFQVRFIFRBQkxFIHNjaDEuaXJvb3QgKGEgaW50KTsKK0NSRUFURSBUQUJM RSBzY2gxLmlwYXJ0MSAoYSBpbnQpOworQ1JFQVRFIFRBQkxFIHNjaDEuaXBhcnQyICgpIElO SEVSSVRTIChzY2gxLmlyb290KTsKKworLS0gbWFya2luZyByb290cyBiZXR3ZWVuIHVucmVs YXRlZCB0YWJsZXMgaXMgbm90IGFsbG93ZWQKK1NFTEVDVCBwZ19zZXRfbG9naWNhbF9yb290 KCdzY2gxLmlwYXJ0MScsICdzY2gxLmlyb290Jyk7CitTRUxFQ1QgcGdfc2V0X2xvZ2ljYWxf cm9vdCgnc2NoMS5pcGFydDInLCAnc2NoMS50YmwxJyk7CisKKy0tIGVzdGFibGlzaGluZyBh biBpbmhlcml0YW5jZSByZWxhdGlvbnNoaXAgZml4ZXMgdGhlIHByb2JsZW0KK0FMVEVSIFRB QkxFIHNjaDEuaXBhcnQxIElOSEVSSVQgc2NoMS5pcm9vdDsKK1NFTEVDVCBwZ19zZXRfbG9n aWNhbF9yb290KCdzY2gxLmlwYXJ0MScsICdzY2gxLmlyb290Jyk7CisKKy0tIGJ1dCBtdWx0 aXBsZSBpbmhlcml0YW5jZSBpcyBub3QgYWxsb3dlZAorQUxURVIgVEFCTEUgc2NoMS5pcGFy dDIgSU5IRVJJVCBzY2gxLmlwYXJ0MTsKK1NFTEVDVCBwZ19zZXRfbG9naWNhbF9yb290KCdz Y2gxLmlwYXJ0MicsICdzY2gxLmlyb290Jyk7CisKK0FMVEVSIFRBQkxFIHNjaDEuaXBhcnQy IE5PIElOSEVSSVQgc2NoMS5pcGFydDE7CitTRUxFQ1QgcGdfc2V0X2xvZ2ljYWxfcm9vdCgn c2NoMS5pcGFydDInLCAnc2NoMS5pcm9vdCcpOworCistLSBUT0RPOiBtYWtlIHN1cmUgZXhp c3RpbmcgbG9naWNhbCBkZXNjZW5kYW50IGNhbid0IGJlIEFMVEVSZWQgW05PXSBJTkhFUklU CisKIFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CiBEUk9QIFBVQkxJQ0FUSU9OIHB1YjsK IERST1AgVEFCTEUgc2NoMS50YmwxOworRFJPUCBUQUJMRSBzY2gxLmlwYXJ0MTsKK0RST1Ag VEFCTEUgc2NoMS5pcGFydDI7CitEUk9QIFRBQkxFIHNjaDEuaXJvb3Q7CiBEUk9QIFNDSEVN QSBzY2gxIGNhc2NhZGU7CiBEUk9QIFNDSEVNQSBzY2gyIGNhc2NhZGU7CiAKZGlmZiAtLWdp dCBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxM19wYXJ0aXRpb24ucGwgYi9zcmMvdGVz dC9zdWJzY3JpcHRpb24vdC8wMTNfcGFydGl0aW9uLnBsCmluZGV4IDExYTVjM2MwM2UuLmI2 ZTMxNDM1MzYgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxM19wYXJ0 aXRpb24ucGwKKysrIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDEzX3BhcnRpdGlvbi5w bApAQCAtODc3LDQgKzg3NywxOTAgQEAgJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXIyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywKIAkiU0VMRUNUIGEsIGIsIGMgRlJPTSB0YWI1XzEgT1JE RVIgQlkgMSIpOwogaXMoJHJlc3VsdCwgcXEoNHx8MSksICd1cGRhdGVzIG9mIHRhYjUgcmVw bGljYXRlZCBjb3JyZWN0bHknKTsKIAorIyBUZXN0IHRoYXQgcmVwbGljYXRpb24gd29ya3Mg Zm9yIG9sZGVyIGluaGVyaXRhbmNlL3RyaWdnZXIgc2V0dXBzIGFzIHdlbGwuCiskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgVEFCTEUgaXRhYjEg KGEgaW50LCBiIHRleHQpIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLAorCSJDUkVBVEUgVEFCTEUgaXRhYjFfMSAoQ0hFQ0sgKGEgPSAxKSkgSU5IRVJJVFMg KGl0YWIxKSIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwki Q1JFQVRFIFRBQkxFIGl0YWIxXzIgKENIRUNLIChhID0gMikpIElOSEVSSVRTIChpdGFiMSki KTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIgorCUNSRUFU RSBPUiBSRVBMQUNFIEZVTkNUSU9OIGl0YWIxX3RyaWdnZXIoKQorCVJFVFVSTlMgVFJJR0dF UiBBUyBcJFwkCisJQkVHSU4KKwkJSUYgKCBORVcuYSA9IDEgKSBUSEVOIElOU0VSVCBJTlRP IGl0YWIxXzEgVkFMVUVTIChORVcuKik7CisJCUVMU0lGICggTkVXLmEgPSAyICkgVEhFTiBJ TlNFUlQgSU5UTyBpdGFiMV8yIFZBTFVFUyAoTkVXLiopOworCQlFTFNFIFJFVFVSTiBORVc7 CisJCUVORCBJRjsKKwkJUkVUVVJOIE5VTEw7CisJRU5EOworCVwkXCQKKwlMQU5HVUFHRSBw bHBnc3FsOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIgor CUNSRUFURSBUUklHR0VSIGl0YWIxX3RyaWdnZXIKKwlCRUZPUkUgSU5TRVJUIE9OIGl0YWIx CisJRk9SIEVBQ0ggUk9XIEVYRUNVVEUgRlVOQ1RJT04gaXRhYjFfdHJpZ2dlcigpOyIpOwor Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgcGdf c2V0X2xvZ2ljYWxfcm9vdCgnaXRhYjFfMScsICdpdGFiMScpIik7Ciskbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgcGdfc2V0X2xvZ2ljYWxfcm9v dCgnaXRhYjFfMicsICdpdGFiMScpIik7CisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsCisJIkNSRUFURSBUQUJMRSBpdGFiMiAoYSBpbnQsIGIgdGV4dCkiKTsK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBUQUJM RSBpdGFiMl8xIChDSEVDSyAoYSA9IDEpKSBJTkhFUklUUyAoaXRhYjIpIik7CisKKyRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICIKKwlDUkVBVEUgT1IgUkVQTEFD RSBGVU5DVElPTiBpdGFiMl90cmlnZ2VyKCkKKwlSRVRVUk5TIFRSSUdHRVIgQVMgXCRcJAor CUJFR0lOCisJCUlGICggTkVXLmEgPSAxICkgVEhFTiBJTlNFUlQgSU5UTyBpdGFiMl8xIFZB TFVFUyAoTkVXLiopOworCQlFTFNFIFJFVFVSTiBORVc7CisJCUVORCBJRjsKKwkJUkVUVVJO IE5VTEw7CisJRU5EOworCVwkXCQKKwlMQU5HVUFHRSBwbHBnc3FsOyIpOworJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIgorCUNSRUFURSBUUklHR0VSIGl0YWIy X3RyaWdnZXIKKwlCRUZPUkUgSU5TRVJUIE9OIGl0YWIyCisJRk9SIEVBQ0ggUk9XIEVYRUNV VEUgRlVOQ1RJT04gaXRhYjJfdHJpZ2dlcigpOyIpOworCiskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgcGdfc2V0X2xvZ2ljYWxfcm9vdCgnaXRh YjJfMScsICdpdGFiMicpIik7CisKKyMgaXRhYjJfMSBzaG91bGQgYmUgcHVibGlzaGVkIHVz aW5nIGl0cyBvd24gaWRlbnRpdHkgaGVyZSwgc2luY2UgaXRzIHBhcmVudCBpcworIyBub3Qg aW5jbHVkZWQuIGl0YWIxXzEgc2hvdWxkIGJlIHB1Ymxpc2hlZCB2aWEgaXRzIHBhcmVudCwg aXRhYjEsIHdpdGhvdXQKKyMgZHVwbGljYXRpbmcgdGhlIHJvd3MuCiskbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJBTFRFUiBQVUJMSUNBVElPTiBwdWJfdmlh cm9vdCBBREQgVEFCTEUgaXRhYjEsIGl0YWIxXzEsIGl0YWIyXzEiKTsKKworJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIGl0YWIxIFZBTFVF UyAoMCwgJ2l0YWIxJykiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJJTlNFUlQgSU5UTyBpdGFiMSBWQUxVRVMgKDEsICdpdGFiMScpIik7Ciskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gaXRhYjEgVkFM VUVTICgyLCAnaXRhYjEnKSIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIklOU0VSVCBJTlRPIGl0YWIyIFZBTFVFUyAoMCwgJ2l0YWIyJykiKTsKKyRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyBpdGFiMiBW QUxVRVMgKDEsICdpdGFiMicpIik7CisKKyMgU3Vic2NyaWJlciAxIG9ubHkgc3Vic2NyaWJl cyB0byBzb21lIG9mIHRoZSBwYXJ0aXRpb25zLCBhbmQgZG9lcyBub3Qgc2V0IHVwCisjIHBh cnRpdGlvbiB0cmlnZ2VycywgdG8gY2hlY2sgZm9yIHRoZSBjb3JyZWN0IHJvdXRpbmcuCisk bm9kZV9zdWJzY3JpYmVyMS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBUQUJM RSBpdGFiMSAoYSBpbnQsIGIgdGV4dCkiKTsKKyRub2RlX3N1YnNjcmliZXIxLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFRBQkxFIGl0YWIxXzEgKENIRUNLIChhID0gMSkp IElOSEVSSVRTIChpdGFiMSkiKTsKKyRub2RlX3N1YnNjcmliZXIxLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywKKwkiQ1JFQVRFIFRBQkxFIGl0YWIyXzEgKGEgaW50LCBiIHRleHQpIik7CisK KyMgU3Vic2NyaWJlciAyIGhhcyBkaWZmZXJlbnQgcGFydGl0aW9uIG5hbWVzIGZvciBpdGFi MSwgYW5kIGl0IGRvZXNuJ3QgcGFydGl0aW9uCisjIGl0YWIyIGF0IGFsbC4KKyRub2RlX3N1 YnNjcmliZXIyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFRBQkxFIGl0YWIx IChhIGludCwgYiB0ZXh0KSIpOworJG5vZGVfc3Vic2NyaWJlcjItPnNhZmVfcHNxbCgncG9z dGdyZXMnLAorCSJDUkVBVEUgVEFCTEUgaXRhYjFfcGFydDEgKENIRUNLIChhID0gMSkpIElO SEVSSVRTIChpdGFiMSkiKTsKKyRub2RlX3N1YnNjcmliZXIyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywKKwkiQ1JFQVRFIFRBQkxFIGl0YWIxX3BhcnQyIChDSEVDSyAoYSA9IDIpKSBJTkhF UklUUyAoaXRhYjEpIik7CisKKyRub2RlX3N1YnNjcmliZXIyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIgorCUNSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIGl0YWJfdHJpZ2dlcigpCisJ UkVUVVJOUyBUUklHR0VSIEFTIFwkXCQKKwlCRUdJTgorCQlJRiAoIE5FVy5hID0gMSApIFRI RU4gSU5TRVJUIElOVE8gcHVibGljLml0YWIxX3BhcnQxIFZBTFVFUyAoTkVXLiopOworCQlF TFNJRiAoIE5FVy5hID0gMiApIFRIRU4gSU5TRVJUIElOVE8gcHVibGljLml0YWIxX3BhcnQy IFZBTFVFUyAoTkVXLiopOworCQlFTFNFIFJFVFVSTiBORVc7CisJCUVORCBJRjsKKwkJUkVU VVJOIE5VTEw7CisJRU5EOworCVwkXCQKKwlMQU5HVUFHRSBwbHBnc3FsOyIpOworJG5vZGVf c3Vic2NyaWJlcjItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiCisJQ1JFQVRFIFRSSUdHRVIg aXRhYl90cmlnZ2VyCisJQkVGT1JFIElOU0VSVCBPTiBpdGFiMQorCUZPUiBFQUNIIFJPVyBF WEVDVVRFIEZVTkNUSU9OIGl0YWJfdHJpZ2dlcigpOyIpOworJG5vZGVfc3Vic2NyaWJlcjIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiCisJQUxURVIgVEFCTEUgaXRhYjEgRU5BQkxFIEFM V0FZUyBUUklHR0VSIGl0YWJfdHJpZ2dlcjsiKTsKKworJG5vZGVfc3Vic2NyaWJlcjItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgVEFCTEUgaXRhYjIgKGEgaW50LCBiIHRl eHQpIik7CisKKyRub2RlX3N1YnNjcmliZXIxLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwki QUxURVIgU1VCU0NSSVBUSU9OIHN1Yl92aWFyb290IFJFRlJFU0ggUFVCTElDQVRJT04iKTsK KyRub2RlX3N1YnNjcmliZXIyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQUxURVIgU1VC U0NSSVBUSU9OIHN1YjIgUkVGUkVTSCBQVUJMSUNBVElPTiIpOworCiskbm9kZV9zdWJzY3Jp YmVyMS0+d2FpdF9mb3Jfc3Vic2NyaXB0aW9uX3N5bmM7Ciskbm9kZV9zdWJzY3JpYmVyMi0+ d2FpdF9mb3Jfc3Vic2NyaXB0aW9uX3N5bmM7CisKKyMgY2hlY2sgdGhhdCBkYXRhIGlzIHN5 bmNlZCBjb3JyZWN0bHkKKworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXIxLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIGEsIGIgRlJPTSBpdGFiMSBPUkRFUiBCWSAxLCAy Iik7CitpcygkcmVzdWx0LCBxcSgwfGl0YWIxCisxfGl0YWIxCisyfGl0YWIxKSwgJ2luaXRp YWwgZGF0YSBzeW5jZWQgZm9yIGl0YWIxIG9uIHN1YnNjcmliZXIgMScpOworCisjIGFsbCBv ZiB0aGUgZGF0YSBzaG91bGQgaGF2ZSBiZWVuIHJvdXRlZCB0byBpdGFiMSBkaXJlY3RseSAo dGhlcmUgYXJlIG5vCisjIHRyaWdnZXJzIG9uIHN1YnNjcmliZXIgMSB0byBtb3ZlIGl0IGVs c2V3aGVyZSkKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyMS0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsCisJIlNFTEVDVCBhLCBiIEZST00gT05MWSBpdGFiMSBPUkRFUiBCWSAxLCAyIik7 CitpcygkcmVzdWx0LCBxcSgwfGl0YWIxCisxfGl0YWIxCisyfGl0YWIxKSwgJ2luaXRpYWwg ZGF0YSBjb3JyZWN0bHkgcm91dGVkIGZvciBpdGFiMSBvbiBzdWJzY3JpYmVyIDEnKTsKKwor JHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXIxLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwki U0VMRUNUIGEsIGIgRlJPTSBpdGFiMl8xIE9SREVSIEJZIDEsIDIiKTsKK2lzKCRyZXN1bHQs IHFxKDF8aXRhYjIpLCAnaW5pdGlhbCBkYXRhIHN5bmNlZCBmb3IgaXRhYjJfMSBvbiBzdWJz Y3JpYmVyIDEnKTsKKworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXIyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywKKwkiU0VMRUNUIGEsIGIgRlJPTSBpdGFiMSBPUkRFUiBCWSAxLCAyIik7 CitpcygkcmVzdWx0LCBxcSgwfGl0YWIxCisxfGl0YWIxCisyfGl0YWIxKSwgJ2luaXRpYWwg ZGF0YSBzeW5jZWQgZm9yIGl0YWIxIG9uIHN1YnNjcmliZXIgMicpOworCiskcmVzdWx0ID0g JG5vZGVfc3Vic2NyaWJlcjItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgYSwg YiBGUk9NIE9OTFkgaXRhYjEgT1JERVIgQlkgMSwgMiIpOworaXMoJHJlc3VsdCwgcXEoMHxp dGFiMSksICdpbml0aWFsIGRhdGEgY29ycmVjdGx5IHJvdXRlZCBmb3IgaXRhYjEgb24gc3Vi c2NyaWJlciAyJyk7CisKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyMi0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsCisJIlNFTEVDVCBhLCBiIEZST00gaXRhYjIgT1JERVIgQlkgMSwgMiIp OworaXMoJHJlc3VsdCwgcXEoMHxpdGFiMgorMXxpdGFiMiksICdpbml0aWFsIGRhdGEgc3lu Y2VkIGZvciBpdGFiMiBvbiBzdWJzY3JpYmVyIDInKTsKKworIyBtYWtlIHN1cmUgbmV3IGRh dGEgaXMgYWxzbyBjb3JyZWN0bHkgcm91dGVkIHRvIHRoZSByb290cworJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIGl0YWIxIFZBTFVFUyAo MSwgJ2l0YWIxLW5ldycpIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiSU5TRVJUIElOVE8gaXRhYjIgVkFMVUVTICgxLCAnaXRhYjItbmV3JykiKTsKKwor JG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdzdWJfdmlhcm9vdCcpOworJG5v ZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdzdWIyJyk7CisKKyRyZXN1bHQgPSAk bm9kZV9zdWJzY3JpYmVyMS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBhLCBi IEZST00gT05MWSBpdGFiMSBPUkRFUiBCWSAxLCAyIik7CitpcygkcmVzdWx0LCBxcSgwfGl0 YWIxCisxfGl0YWIxCisxfGl0YWIxLW5ldworMnxpdGFiMSksICduZXcgZGF0YSByb3V0ZWQg Zm9yIGl0YWIxIG9uIHN1YnNjcmliZXIgMScpOworCiskcmVzdWx0ID0gJG5vZGVfc3Vic2Ny aWJlcjEtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgYSwgYiBGUk9NIGl0YWIy XzEgT1JERVIgQlkgMSwgMiIpOworaXMoJHJlc3VsdCwgcXEoMXxpdGFiMgorMXxpdGFiMi1u ZXcpLCAnbmV3IGRhdGEgcm91dGVkIGZvciBpdGFiMl8xIG9uIHN1YnNjcmliZXIgMScpOwor CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlcjItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAor CSJTRUxFQ1QgYSwgYiBGUk9NIGl0YWIxIE9SREVSIEJZIDEsIDIiKTsKK2lzKCRyZXN1bHQs IHFxKDB8aXRhYjEKKzF8aXRhYjEKKzF8aXRhYjEtbmV3CisyfGl0YWIxKSwgJ25ldyBkYXRh IHJvdXRlZCBmb3IgaXRhYjEgb24gc3Vic2NyaWJlciAyJyk7CisKKyRyZXN1bHQgPSAkbm9k ZV9zdWJzY3JpYmVyMi0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBhLCBiIEZS T00gaXRhYjFfcGFydDEgT1JERVIgQlkgMSwgMiIpOworaXMoJHJlc3VsdCwgcXEoMXxpdGFi MQorMXxpdGFiMS1uZXcpLCAnbmV3IGRhdGEgbW92ZWQgdG8gaXRhYjFfcGFydDEgb24gc3Vi c2NyaWJlciAyJyk7CisKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyMi0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsCisJIlNFTEVDVCBhLCBiIEZST00gaXRhYjIgT1JERVIgQlkgMSwgMiIp OworaXMoJHJlc3VsdCwgcXEoMHxpdGFiMgorMXxpdGFiMgorMXxpdGFiMi1uZXcpLCAnbmV3 IGRhdGEgcm91dGVkIGZvciBpdGFiMiBvbiBzdWJzY3JpYmVyIDInKTsKKwogZG9uZV90ZXN0 aW5nKCk7Ci0tIAoyLjI1LjEKCg== --------------VjLgi1O7QALEdAM762BhYUYM--