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 1q6YxL-0004EZ-6D for pgsql-hackers@arkaria.postgresql.org; Tue, 06 Jun 2023 15:50:47 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1q6YxJ-0003Yd-Pq for pgsql-hackers@arkaria.postgresql.org; Tue, 06 Jun 2023 15:50:45 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1q6YxI-0003YT-Tr for pgsql-hackers@lists.postgresql.org; Tue, 06 Jun 2023 15:50:45 +0000 Received: from mail-ot1-x32d.google.com ([2607:f8b0:4864:20::32d]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1q6YxD-000YTx-3w for pgsql-hackers@lists.postgresql.org; Tue, 06 Jun 2023 15:50:43 +0000 Received: by mail-ot1-x32d.google.com with SMTP id 46e09a7af769-6b0d38ce700so4698807a34.2 for ; Tue, 06 Jun 2023 08:50:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=timescale.com; s=google; t=1686066638; x=1688658638; 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=xoAGxejkl9451HzosnWV8w8fDjOaxo5B++3UMAA/+l8=; b=Modit4/mLCXfK5Ho+54DMaLw9goQe5wB/c1lR4XPbF8liyrD6j7GJ9cRYJAO9AkLLk xqvpcs6ogyyzOGh81KzJh/PwwCenzBE8yajOEfrr4P0kntznj51X321cqmpbXIx3Bxzo 3CS3OSF0i3jQSl/MoF4UG3ytVk0J7Ybn6HGMcBQ2OnwdE1YlL7opl1H24GuBWzlnKFOX uc6NnryfX0V9/aiyJkd4wqErbEMc8q/PYdGn+cwwNCt1+NohDoDSfCFTonLTXH+I8MZf NNfmp3RbjsRdgdJFOrBvfCD5CI6PHu43NNGSazXL2VC5i8kB8PCqZzhr6TXeHXNXwhLb KGZw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686066638; x=1688658638; 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=xoAGxejkl9451HzosnWV8w8fDjOaxo5B++3UMAA/+l8=; b=lB6Dk6DtkPsxZt5kIcsrVWgcTkQDUcczt9+0ayMze0H/rLh5yhi9V8fvoMCLpGbPAe N5Zpm7iJHP9ycxUHPaAYmrwJ6oGONI/rY8w2x6iplUhrYcDIBcfGFth0w+cagtjgggnw PE6QpcJ35QZHRko8VqEuAayAOVWRaeLBphwRcUnvG+knlBXGsy8b74uBEffSssEy0+xH P2cg4zgtworTv+uYHevSBYAB6R6xUaidahOHVBcvNx7JP3bjctKXZ43fCUfIap7Llj7c VMTWTOAWCra/5kulswvPDUwqPMTUtqSlquxZziTpO31YJsxFwGUv+DlLnTJuN8bhUNfp 6isA== X-Gm-Message-State: AC+VfDzsKsJDwxS/NN8dy/rQIPuWnTDmCLDisyd/Ik6tD0tHTCdlKVpf v5CeGXW1nHu/2/3yTHV4JIQ1V3YPA1CMImYMI/yLnw== X-Google-Smtp-Source: ACHHUZ5pnEVIobz2chs64XahjYQwxNez9uM2tFXCBs4EOR7hKEIKxK/upkfKIx9wclBJ/GmEggvzVA== X-Received: by 2002:a05:6359:608:b0:129:8c7e:d160 with SMTP id eh8-20020a056359060800b001298c7ed160mr81436rwb.22.1686066638071; Tue, 06 Jun 2023 08:50:38 -0700 (PDT) Received: from [192.168.1.21] ([50.53.8.205]) by smtp.gmail.com with ESMTPSA id fu1-20020a17090ad18100b0024e33c69ee5sm7800321pjb.5.2023.06.06.08.50.37 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 06 Jun 2023 08:50:37 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------8uPfEkfXokw7PchxOtJ3iUKw" Message-ID: <13971415-416b-1e98-2fe5-ad394c6ddc2c@timescale.com> Date: Tue, 6 Jun 2023 08:50:36 -0700 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.11.0 Subject: Re: RFC: logical publication via inheritance root? From: Jacob Champion To: PostgreSQL Hackers Cc: Aleksander Alekseev , Peter Smith 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. --------------8uPfEkfXokw7PchxOtJ3iUKw Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 4/4/23 08:14, Jacob Champion wrote: > Yes, sorry -- after 062a84442, the architecture needs to change in a > way that I'm still working through. I've moved the patch to Waiting on > Author while I figure out the rebase. Okay -- that took longer than I wanted, but here's a rebased patchset that I'll call v2. Commit 062a84442 necessitated some rework of the new pg_get_publication_rels_to_sync() helper. It now takes a list of publications so that we can handle conflicts in the pubviaroot settings. This is more complicated than before -- unlike partitions, standard inheritance trees can selectively publish tables that aren't leaves. But I think I've finally settled on some semantics for it which are unsurprising. As part of that, I've pulled out a patch in 0001 which I hope is independently useful. Today, there appears to be no way to check which relid a table will be published through, short of creating a subscription just to see what happens. 0001 introduces pg_get_relation_publishing_info() to surface this information, which makes testing it easier and also makes it possible to inspect what's happening with more complicated publication setups. 0001 also moves the determination of publish_as_relid out of the pgoutput plugin and into a pg_publication helper function, because unless I've missed something crucial, it doesn't seem like an output plugin is really free to make that decision independently of the publication settings. The subscriber is not going to ask a plugin for the right tables to COPY during initial sync, so the plugin had better be using the same logic as the core. Many TODOs and upthread points of feedback are still pending, and I think that several of them are actually symptoms of one architectural problem with my patch: - The volatility classifications of pg_set_logical_root() and pg_get_publication_rels_to_sync() appear to conflict - A dump/restore cycle loses the new marker - Inheritance can be tampered with after the logical root has been set - There's currently no way to clear a logical root after setting it I wonder if pg_set_logical_root() might be better implemented as part of ALTER TABLE. Maybe with a relation option? If it all went through ALTER TABLE ONLY ... SET, then we wouldn't have to worry about a user modifying roots while reading pg_get_publication_rels_to_sync() in the same query. The permissions checks should be more consistent with less effort, and there's an existing way to set/clear the option that already plays well with pg_dump and pg_upgrade. The downsides I can see are the need to handle simultaneous changes to INHERIT and SET (since we'd be manipulating pg_inherits in both), as well as the fact that ALTER TABLE ... SET defaults to altering the entire table hierarchy, which may be bad UX for this case. --Jacob --------------8uPfEkfXokw7PchxOtJ3iUKw Content-Type: text/x-patch; charset=UTF-8; name="v2-0001-pgoutput-refactor-publication-cache-construction.patch" Content-Disposition: attachment; filename*0="v2-0001-pgoutput-refactor-publication-cache-construction.pat"; filename*1="ch" Content-Transfer-Encoding: base64 RnJvbSA3NjFiOTFiM2YxNzNhZGZmYWM5ZjczMTMyYzJmMWM5ZmM4YmNiZWMzIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8amNoYW1waW9uQHRpbWVz Y2FsZS5jb20+CkRhdGU6IEZyaSwgNyBBcHIgMjAyMyAwOTo1NToyNyAtMDcwMApTdWJqZWN0 OiBbUEFUQ0ggdjIgMS8yXSBwZ291dHB1dDogcmVmYWN0b3IgcHVibGljYXRpb24gY2FjaGUg Y29uc3RydWN0aW9uCgpCcmVha2luZyB0aGlzIGxvZ2ljIGludG8gYSBzdGFuZGFsb25lIGhl bHBlciBzaG91bGQgaGVscCBleHBvc2UgdGhlCmJlaGF2aW9yIGZvciB0ZXN0aW5nLiAgQWRk aXRpb25hbGx5LCBtb3ZlIHRoZSBpbXBsZW1lbnRhdGlvbiB1bmRlciB0aGUKcGdfcHVibGlj YXRpb24gY2F0YWxvZyBoZWxwZXJzLCBzaW5jZSBpdCBzZWVtcyBsaWtlIGl0J3MgaW5oZXJl bnQgdG8gdGhlCnB1YmxpY2F0aW9uIHNldHRpbmdzIChhbmQgaXQgbXVzdCBtYXRjaCB0aGUg YmVoYXZpb3Igb2YgdGhlIGluaXRpYWwKc3luYywgd2hpY2ggZG9lc24ndCBzZWVtIHRvIGJl IGNvbnRyb2xsZWQgYnkgdGhlIG91dHB1dCBwbHVnaW4gYXQgYWxsKS4KLS0tCiBzcmMvYmFj a2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMgICAgICAgIHwgMjE1ICsrKysrKysrKysr KysrKysrKysrCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5j IHwgMTM3ICstLS0tLS0tLS0tLS0KIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQg ICAgICAgICAgICAgfCAgIDggKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlv bi5oICAgICAgICB8ICAgNCArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0 aW9uLm91dCAgIHwgIDI2ICsrKwogc3JjL3Rlc3QvcmVncmVzcy9zcWwvcHVibGljYXRpb24u c3FsICAgICAgICB8ICAxNSArKwogNiBmaWxlcyBjaGFuZ2VkLCAyNzIgaW5zZXJ0aW9ucygr KSwgMTMzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cv cGdfcHVibGljYXRpb24uYyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGljYXRpb24u YwppbmRleCBjNDg4YjYzNzBiLi5kZjlhYmYwOWMzIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9w Z19wdWJsaWNhdGlvbi5jCkBAIC0xMjU5LDMgKzEyNTksMjE4IEBAIHBnX2dldF9wdWJsaWNh dGlvbl90YWJsZXMoUEdfRlVOQ1RJT05fQVJHUykKIAogCVNSRl9SRVRVUk5fRE9ORShmdW5j Y3R4KTsKIH0KKworTGlzdCAqCitwcm9jZXNzX3JlbGF0aW9uX3B1YmxpY2F0aW9ucyhPaWQg cmVsaWQsIGNvbnN0IExpc3QgKnB1YmxpY2F0aW9ucywKKwkJCQkJCQkgIFB1YmxpY2F0aW9u QWN0aW9ucyAqcHViYWN0aW9ucywKKwkJCQkJCQkgIE9pZCAqcHVibGlzaF9hc19yZWxpZCkK K3sKKwlPaWQJCQlzY2hlbWFJZCA9IGdldF9yZWxfbmFtZXNwYWNlKHJlbGlkKTsKKwlMaXN0 CSAgICpwdWJpZHMgPSBHZXRSZWxhdGlvblB1YmxpY2F0aW9ucyhyZWxpZCk7CisKKwkvKgor CSAqIFdlIGRvbid0IGFjcXVpcmUgYSBsb2NrIG9uIHRoZSBuYW1lc3BhY2Ugc3lzdGVtIHRh YmxlIGFzIHdlIGJ1aWxkCisJICogdGhlIGNhY2hlIGVudHJ5IHVzaW5nIGEgaGlzdG9yaWMg c25hcHNob3QgYW5kIGFsbCB0aGUgbGF0ZXIgY2hhbmdlcworCSAqIGFyZSBhYnNvcmJlZCB3 aGlsZSBkZWNvZGluZyBXQUwuCisJICovCisJTGlzdAkgICAqc2NoZW1hUHViaWRzID0gR2V0 U2NoZW1hUHVibGljYXRpb25zKHNjaGVtYUlkKTsKKwlMaXN0Q2VsbCAgICpsYzsKKwlpbnQJ CQlwdWJsaXNoX2FuY2VzdG9yX2xldmVsID0gMDsKKwlib29sCQlhbV9wYXJ0aXRpb24gPSBn ZXRfcmVsX3JlbGlzcGFydGl0aW9uKHJlbGlkKTsKKwljaGFyCQlyZWxraW5kID0gZ2V0X3Jl bF9yZWxraW5kKHJlbGlkKTsKKwlMaXN0CSAgICpyZWxfcHVibGljYXRpb25zID0gTklMOwor CisJKnB1Ymxpc2hfYXNfcmVsaWQgPSByZWxpZDsKKworCWZvcmVhY2gobGMsIHB1YmxpY2F0 aW9ucykKKwl7CisJCVB1YmxpY2F0aW9uICpwdWIgPSBsZmlyc3QobGMpOworCQlib29sCQlw dWJsaXNoID0gZmFsc2U7CisKKwkJLyoKKwkJICogVW5kZXIgd2hhdCByZWxpZCBzaG91bGQg d2UgcHVibGlzaCBjaGFuZ2VzIGluIHRoaXMgcHVibGljYXRpb24/CisJCSAqIFdlJ2xsIHVz ZSB0aGUgdG9wLW1vc3QgcmVsaWQgYWNyb3NzIGFsbCBwdWJsaWNhdGlvbnMuIEFsc28KKwkJ ICogdHJhY2sgdGhlIGFuY2VzdG9yIGxldmVsIGZvciB0aGlzIHB1YmxpY2F0aW9uLgorCQkg Ki8KKwkJT2lkCQkJcHViX3JlbGlkID0gcmVsaWQ7CisJCWludAkJCWFuY2VzdG9yX2xldmVs ID0gMDsKKworCQkvKgorCQkgKiBJZiB0aGlzIGlzIGEgRk9SIEFMTCBUQUJMRVMgcHVibGlj YXRpb24sIHBpY2sgdGhlIHBhcnRpdGlvbgorCQkgKiByb290IGFuZCBzZXQgdGhlIGFuY2Vz dG9yIGxldmVsIGFjY29yZGluZ2x5LgorCQkgKi8KKwkJaWYgKHB1Yi0+YWxsdGFibGVzKQor CQl7CisJCQlwdWJsaXNoID0gdHJ1ZTsKKwkJCWlmIChwdWItPnB1YnZpYXJvb3QgJiYgYW1f cGFydGl0aW9uKQorCQkJeworCQkJCUxpc3QJICAgKmFuY2VzdG9ycyA9IGdldF9wYXJ0aXRp b25fYW5jZXN0b3JzKHJlbGlkKTsKKworCQkJCXB1Yl9yZWxpZCA9IGxsYXN0X29pZChhbmNl c3RvcnMpOworCQkJCWFuY2VzdG9yX2xldmVsID0gbGlzdF9sZW5ndGgoYW5jZXN0b3JzKTsK KwkJCX0KKwkJfQorCisJCWlmICghcHVibGlzaCkKKwkJeworCQkJYm9vbAkJYW5jZXN0b3Jf cHVibGlzaGVkID0gZmFsc2U7CisKKwkJCS8qCisJCQkgKiBGb3IgYSBwYXJ0aXRpb24sIGNo ZWNrIGlmIGFueSBvZiB0aGUgYW5jZXN0b3JzIGFyZQorCQkJICogcHVibGlzaGVkLiAgSWYg c28sIG5vdGUgZG93biB0aGUgdG9wbW9zdCBhbmNlc3RvciB0aGF0IGlzCisJCQkgKiBwdWJs aXNoZWQgdmlhIHRoaXMgcHVibGljYXRpb24sIHdoaWNoIHdpbGwgYmUgdXNlZCBhcyB0aGUK KwkJCSAqIHJlbGF0aW9uIHZpYSB3aGljaCB0byBwdWJsaXNoIHRoZSBwYXJ0aXRpb24ncyBj aGFuZ2VzLgorCQkJICovCisJCQlpZiAoYW1fcGFydGl0aW9uKQorCQkJeworCQkJCU9pZAkJ CWFuY2VzdG9yOworCQkJCWludAkJCWxldmVsOworCQkJCUxpc3QJICAgKmFuY2VzdG9ycyA9 IGdldF9wYXJ0aXRpb25fYW5jZXN0b3JzKHJlbGlkKTsKKworCQkJCWFuY2VzdG9yID0gR2V0 VG9wTW9zdEFuY2VzdG9ySW5QdWJsaWNhdGlvbihwdWItPm9pZCwKKwkJCQkJCQkJCQkJCQkJ ICAgYW5jZXN0b3JzLAorCQkJCQkJCQkJCQkJCQkgICAmbGV2ZWwpOworCisJCQkJaWYgKGFu Y2VzdG9yICE9IEludmFsaWRPaWQpCisJCQkJeworCQkJCQlhbmNlc3Rvcl9wdWJsaXNoZWQg PSB0cnVlOworCQkJCQlpZiAocHViLT5wdWJ2aWFyb290KQorCQkJCQl7CisJCQkJCQlwdWJf cmVsaWQgPSBhbmNlc3RvcjsKKwkJCQkJCWFuY2VzdG9yX2xldmVsID0gbGV2ZWw7CisJCQkJ CX0KKwkJCQl9CisJCQl9CisKKwkJCWlmIChsaXN0X21lbWJlcl9vaWQocHViaWRzLCBwdWIt Pm9pZCkgfHwKKwkJCQlsaXN0X21lbWJlcl9vaWQoc2NoZW1hUHViaWRzLCBwdWItPm9pZCkg fHwKKwkJCQlhbmNlc3Rvcl9wdWJsaXNoZWQpCisJCQkJcHVibGlzaCA9IHRydWU7CisJCX0K KworCQkvKgorCQkgKiBJZiB0aGUgcmVsYXRpb24gaXMgdG8gYmUgcHVibGlzaGVkLCBkZXRl cm1pbmUgYWN0aW9ucyB0bworCQkgKiBwdWJsaXNoLCBhbmQgbGlzdCBvZiBjb2x1bW5zLCBp ZiBhcHByb3ByaWF0ZS4KKwkJICoKKwkJICogRG9uJ3QgcHVibGlzaCBjaGFuZ2VzIGZvciBw YXJ0aXRpb25lZCB0YWJsZXMsIGJlY2F1c2UKKwkJICogcHVibGlzaGluZyB0aG9zZSBvZiBp dHMgcGFydGl0aW9ucyBzdWZmaWNlcywgdW5sZXNzIHBhcnRpdGlvbgorCQkgKiBjaGFuZ2Vz IHdvbid0IGJlIHB1Ymxpc2hlZCBkdWUgdG8gcHVidmlhcm9vdCBiZWluZyBzZXQuCisJCSAq LworCQlpZiAocHVibGlzaCAmJgorCQkJKHJlbGtpbmQgIT0gUkVMS0lORF9QQVJUSVRJT05F RF9UQUJMRSB8fCBwdWItPnB1YnZpYXJvb3QpKQorCQl7CisJCQlwdWJhY3Rpb25zLT5wdWJp bnNlcnQgfD0gcHViLT5wdWJhY3Rpb25zLnB1Ymluc2VydDsKKwkJCXB1YmFjdGlvbnMtPnB1 YnVwZGF0ZSB8PSBwdWItPnB1YmFjdGlvbnMucHVidXBkYXRlOworCQkJcHViYWN0aW9ucy0+ cHViZGVsZXRlIHw9IHB1Yi0+cHViYWN0aW9ucy5wdWJkZWxldGU7CisJCQlwdWJhY3Rpb25z LT5wdWJ0cnVuY2F0ZSB8PSBwdWItPnB1YmFjdGlvbnMucHVidHJ1bmNhdGU7CisKKwkJCS8q CisJCQkgKiBXZSB3YW50IHRvIHB1Ymxpc2ggdGhlIGNoYW5nZXMgYXMgdGhlIHRvcC1tb3N0 IGFuY2VzdG9yCisJCQkgKiBhY3Jvc3MgYWxsIHB1YmxpY2F0aW9ucy4gU28gd2UgbmVlZCB0 byBjaGVjayBpZiB0aGUgYWxyZWFkeQorCQkJICogY2FsY3VsYXRlZCBsZXZlbCBpcyBoaWdo ZXIgdGhhbiB0aGUgbmV3IG9uZS4gSWYgeWVzLCB3ZSBjYW4KKwkJCSAqIGlnbm9yZSB0aGUg bmV3IHZhbHVlIChhcyBpdCdzIGEgY2hpbGQpLiBPdGhlcndpc2UgdGhlIG5ldworCQkJICog dmFsdWUgaXMgYW4gYW5jZXN0b3IsIHNvIHdlIGtlZXAgaXQuCisJCQkgKi8KKwkJCWlmIChw dWJsaXNoX2FuY2VzdG9yX2xldmVsID4gYW5jZXN0b3JfbGV2ZWwpCisJCQkJY29udGludWU7 CisKKwkJCS8qCisJCQkgKiBJZiB3ZSBmb3VuZCBhbiBhbmNlc3RvciBoaWdoZXIgdXAgaW4g dGhlIHRyZWUsIGRpc2NhcmQgdGhlCisJCQkgKiBsaXN0IG9mIHB1YmxpY2F0aW9ucyB0aHJv dWdoIHdoaWNoIHdlIHJlcGxpY2F0ZSBpdCwgYW5kIHVzZQorCQkJICogdGhlIG5ldyBhbmNl c3Rvci4KKwkJCSAqLworCQkJaWYgKHB1Ymxpc2hfYW5jZXN0b3JfbGV2ZWwgPCBhbmNlc3Rv cl9sZXZlbCkKKwkJCXsKKwkJCQkqcHVibGlzaF9hc19yZWxpZCA9IHB1Yl9yZWxpZDsKKwkJ CQlwdWJsaXNoX2FuY2VzdG9yX2xldmVsID0gYW5jZXN0b3JfbGV2ZWw7CisKKwkJCQkvKiBy ZXNldCB0aGUgcHVibGljYXRpb24gbGlzdCBmb3IgdGhpcyByZWxhdGlvbiAqLworCQkJCXJl bF9wdWJsaWNhdGlvbnMgPSBOSUw7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJLyogU2Ft ZSBhbmNlc3RvciBsZXZlbCwgaGFzIHRvIGJlIHRoZSBzYW1lIE9JRC4gKi8KKwkJCQlBc3Nl cnQoKnB1Ymxpc2hfYXNfcmVsaWQgPT0gcHViX3JlbGlkKTsKKwkJCX0KKworCQkJLyogVHJh Y2sgcHVibGljYXRpb25zIGZvciB0aGlzIGFuY2VzdG9yLiAqLworCQkJcmVsX3B1YmxpY2F0 aW9ucyA9IGxhcHBlbmQocmVsX3B1YmxpY2F0aW9ucywgcHViKTsKKwkJfQorCX0KKworCWxp c3RfZnJlZShwdWJpZHMpOworCWxpc3RfZnJlZShzY2hlbWFQdWJpZHMpOworCisJcmV0dXJu IHJlbF9wdWJsaWNhdGlvbnM7Cit9CisKK0RhdHVtCitwZ19nZXRfcmVsYXRpb25fcHVibGlz aGluZ19pbmZvKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJT2lkCQkJcmVsaWQgPSBQR19HRVRB UkdfT0lEKDApOworCUxpc3QJICAgKnB1YmxpY2F0aW9ucyA9IE5JTDsKKwlBcnJheVR5cGUg ICphcnI7CisJRGF0dW0JICAgKmVsZW1zOworCWludAkJCW5lbGVtcywKKwkJCQlpOworCVR1 cGxlRGVzYwl0dXBkZXNjOworCUhlYXBUdXBsZQlodHVwOworCisJaWYgKGdldF9jYWxsX3Jl c3VsdF90eXBlKGZjaW5mbywgTlVMTCwgJnR1cGRlc2MpICE9IFRZUEVGVU5DX0NPTVBPU0lU RSkKKwkJZWxvZyhFUlJPUiwgInJldHVybiB0eXBlIG11c3QgYmUgYSByb3cgdHlwZSIpOwor CisJYXJyID0gUEdfR0VUQVJHX0FSUkFZVFlQRV9QKDEpOworCWRlY29uc3RydWN0X2FycmF5 KGFyciwgVEVYVE9JRCwgLTEsIGZhbHNlLCBUWVBBTElHTl9JTlQsICZlbGVtcywgTlVMTCwK KwkJCQkJICAmbmVsZW1zKTsKKworCS8qIEdldCBPaWRzIG9mIHRhYmxlcyBmcm9tIGVhY2gg cHVibGljYXRpb24uICovCisJZm9yIChpID0gMDsgaSA8IG5lbGVtczsgaSsrKQorCXsKKwkJ Y2hhcgkgICAqcHVibmFtZSA9IFRleHREYXR1bUdldENTdHJpbmcoZWxlbXNbaV0pOworCQlQ dWJsaWNhdGlvbiAqcHViID0gR2V0UHVibGljYXRpb25CeU5hbWUocHVibmFtZSwgZmFsc2Up OworCisJCXB1YmxpY2F0aW9ucyA9IGxhcHBlbmQocHVibGljYXRpb25zLCBwdWIpOworCX0K KworCXsKKwkJTGlzdAkgICAqcmVsX3B1YmxpY2F0aW9uczsKKwkJUHVibGljYXRpb25BY3Rp b25zIHB1YmFjdGlvbnM7CisJCU9pZAkJCXB1Ymxpc2hfYXNfcmVsaWQ7CisJCUxpc3RDZWxs ICAgKmxjOworCQlEYXR1bQkgICAqcHVib2lkczsKKwkJQXJyYXlUeXBlICAqcHVib2lkYXJy YXk7CisJCURhdHVtCQl2YWx1ZXNbNl07CisJCWJvb2wJCW51bGxzWzZdOworCisJCXJlbF9w dWJsaWNhdGlvbnMgPQorCQkJcHJvY2Vzc19yZWxhdGlvbl9wdWJsaWNhdGlvbnMocmVsaWQs IHB1YmxpY2F0aW9ucywgJnB1YmFjdGlvbnMsCisJCQkJCQkJCQkJICAmcHVibGlzaF9hc19y ZWxpZCk7CisKKwkJLyogVHJhbnNsYXRlIHRoZSByZWxfcHVibGljYXRpb25zIExpc3QgaW50 byBhbiBPSUQgYXJyYXkuICovCisJCXB1Ym9pZHMgPSBwYWxsb2Moc2l6ZW9mKERhdHVtKSAq IGxpc3RfbGVuZ3RoKHJlbF9wdWJsaWNhdGlvbnMpKTsKKworCQlmb3JlYWNoKGxjLCByZWxf cHVibGljYXRpb25zKQorCQl7CisJCQlQdWJsaWNhdGlvbiAqcHViID0gbGZpcnN0KGxjKTsK KworCQkJaSA9IGZvcmVhY2hfY3VycmVudF9pbmRleChsYyk7CisJCQlwdWJvaWRzW2ldID0g T2JqZWN0SWRHZXREYXR1bShwdWItPm9pZCk7CisJCX0KKworCQlwdWJvaWRhcnJheSA9IGNv bnN0cnVjdF9hcnJheShwdWJvaWRzLCBsaXN0X2xlbmd0aChyZWxfcHVibGljYXRpb25zKSwK KwkJCQkJCQkJCSAgT0lET0lELCBzaXplb2YoT2lkKSwgdHJ1ZSwgVFlQQUxJR05fSU5UKTsK KworCQl2YWx1ZXNbMF0gPSBQb2ludGVyR2V0RGF0dW0ocHVib2lkYXJyYXkpOworCQl2YWx1 ZXNbMV0gPSBPYmplY3RJZEdldERhdHVtKHB1Ymxpc2hfYXNfcmVsaWQpOworCQl2YWx1ZXNb Ml0gPSBCb29sR2V0RGF0dW0ocHViYWN0aW9ucy5wdWJpbnNlcnQpOworCQl2YWx1ZXNbM10g PSBCb29sR2V0RGF0dW0ocHViYWN0aW9ucy5wdWJ1cGRhdGUpOworCQl2YWx1ZXNbNF0gPSBC b29sR2V0RGF0dW0ocHViYWN0aW9ucy5wdWJkZWxldGUpOworCQl2YWx1ZXNbNV0gPSBCb29s R2V0RGF0dW0ocHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSk7CisKKwkJbWVtc2V0KG51bGxzLCBm YWxzZSwgc2l6ZW9mKG51bGxzKSk7CisKKwkJaHR1cCA9IGhlYXBfZm9ybV90dXBsZSh0dXBk ZXNjLCB2YWx1ZXMsIG51bGxzKTsKKwl9CisKKwlQR19SRVRVUk5fREFUVU0oSGVhcFR1cGxl R2V0RGF0dW0oaHR1cCkpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vcGdvdXRwdXQvcGdvdXRwdXQuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0 cHV0L3Bnb3V0cHV0LmMKaW5kZXggYjA4Y2E1NTA0MS4uNjQwNjc2ZTdkYyAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYworKysgYi9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jCkBAIC0xOTg2LDIw ICsxOTg2LDYgQEAgZ2V0X3JlbF9zeW5jX2VudHJ5KFBHT3V0cHV0RGF0YSAqZGF0YSwgUmVs YXRpb24gcmVsYXRpb24pCiAJLyogVmFsaWRhdGUgdGhlIGVudHJ5ICovCiAJaWYgKCFlbnRy eS0+cmVwbGljYXRlX3ZhbGlkKQogCXsKLQkJT2lkCQkJc2NoZW1hSWQgPSBnZXRfcmVsX25h bWVzcGFjZShyZWxpZCk7Ci0JCUxpc3QJICAgKnB1YmlkcyA9IEdldFJlbGF0aW9uUHVibGlj YXRpb25zKHJlbGlkKTsKLQotCQkvKgotCQkgKiBXZSBkb24ndCBhY3F1aXJlIGEgbG9jayBv biB0aGUgbmFtZXNwYWNlIHN5c3RlbSB0YWJsZSBhcyB3ZSBidWlsZAotCQkgKiB0aGUgY2Fj aGUgZW50cnkgdXNpbmcgYSBoaXN0b3JpYyBzbmFwc2hvdCBhbmQgYWxsIHRoZSBsYXRlciBj aGFuZ2VzCi0JCSAqIGFyZSBhYnNvcmJlZCB3aGlsZSBkZWNvZGluZyBXQUwuCi0JCSAqLwot CQlMaXN0CSAgICpzY2hlbWFQdWJpZHMgPSBHZXRTY2hlbWFQdWJsaWNhdGlvbnMoc2NoZW1h SWQpOwotCQlMaXN0Q2VsbCAgICpsYzsKLQkJT2lkCQkJcHVibGlzaF9hc19yZWxpZCA9IHJl bGlkOwotCQlpbnQJCQlwdWJsaXNoX2FuY2VzdG9yX2xldmVsID0gMDsKLQkJYm9vbAkJYW1f cGFydGl0aW9uID0gZ2V0X3JlbF9yZWxpc3BhcnRpdGlvbihyZWxpZCk7Ci0JCWNoYXIJCXJl bGtpbmQgPSBnZXRfcmVsX3JlbGtpbmQocmVsaWQpOwogCQlMaXN0CSAgICpyZWxfcHVibGlj YXRpb25zID0gTklMOwogCiAJCS8qIFJlbG9hZCBwdWJsaWNhdGlvbnMgaWYgbmVlZGVkIGJl Zm9yZSB1c2UuICovCkBAIC0yMDYzLDEyMyArMjA0OSwxMCBAQCBnZXRfcmVsX3N5bmNfZW50 cnkoUEdPdXRwdXREYXRhICpkYXRhLCBSZWxhdGlvbiByZWxhdGlvbikKIAkJICogYnV0IGhl cmUgd2Ugb25seSBuZWVkIHRvIGNvbnNpZGVyIG9uZXMgdGhhdCB0aGUgc3Vic2NyaWJlcgog CQkgKiByZXF1ZXN0ZWQuCiAJCSAqLwotCQlmb3JlYWNoKGxjLCBkYXRhLT5wdWJsaWNhdGlv bnMpCi0JCXsKLQkJCVB1YmxpY2F0aW9uICpwdWIgPSBsZmlyc3QobGMpOwotCQkJYm9vbAkJ cHVibGlzaCA9IGZhbHNlOwotCi0JCQkvKgotCQkJICogVW5kZXIgd2hhdCByZWxpZCBzaG91 bGQgd2UgcHVibGlzaCBjaGFuZ2VzIGluIHRoaXMgcHVibGljYXRpb24/Ci0JCQkgKiBXZSds bCB1c2UgdGhlIHRvcC1tb3N0IHJlbGlkIGFjcm9zcyBhbGwgcHVibGljYXRpb25zLiBBbHNv Ci0JCQkgKiB0cmFjayB0aGUgYW5jZXN0b3IgbGV2ZWwgZm9yIHRoaXMgcHVibGljYXRpb24u Ci0JCQkgKi8KLQkJCU9pZAkJCXB1Yl9yZWxpZCA9IHJlbGlkOwotCQkJaW50CQkJYW5jZXN0 b3JfbGV2ZWwgPSAwOwotCi0JCQkvKgotCQkJICogSWYgdGhpcyBpcyBhIEZPUiBBTEwgVEFC TEVTIHB1YmxpY2F0aW9uLCBwaWNrIHRoZSBwYXJ0aXRpb24KLQkJCSAqIHJvb3QgYW5kIHNl dCB0aGUgYW5jZXN0b3IgbGV2ZWwgYWNjb3JkaW5nbHkuCi0JCQkgKi8KLQkJCWlmIChwdWIt PmFsbHRhYmxlcykKLQkJCXsKLQkJCQlwdWJsaXNoID0gdHJ1ZTsKLQkJCQlpZiAocHViLT5w dWJ2aWFyb290ICYmIGFtX3BhcnRpdGlvbikKLQkJCQl7Ci0JCQkJCUxpc3QJICAgKmFuY2Vz dG9ycyA9IGdldF9wYXJ0aXRpb25fYW5jZXN0b3JzKHJlbGlkKTsKLQotCQkJCQlwdWJfcmVs aWQgPSBsbGFzdF9vaWQoYW5jZXN0b3JzKTsKLQkJCQkJYW5jZXN0b3JfbGV2ZWwgPSBsaXN0 X2xlbmd0aChhbmNlc3RvcnMpOwotCQkJCX0KLQkJCX0KLQotCQkJaWYgKCFwdWJsaXNoKQot CQkJewotCQkJCWJvb2wJCWFuY2VzdG9yX3B1Ymxpc2hlZCA9IGZhbHNlOwotCi0JCQkJLyoK LQkJCQkgKiBGb3IgYSBwYXJ0aXRpb24sIGNoZWNrIGlmIGFueSBvZiB0aGUgYW5jZXN0b3Jz IGFyZQotCQkJCSAqIHB1Ymxpc2hlZC4gIElmIHNvLCBub3RlIGRvd24gdGhlIHRvcG1vc3Qg YW5jZXN0b3IgdGhhdCBpcwotCQkJCSAqIHB1Ymxpc2hlZCB2aWEgdGhpcyBwdWJsaWNhdGlv biwgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIHRoZQotCQkJCSAqIHJlbGF0aW9uIHZpYSB3aGlj aCB0byBwdWJsaXNoIHRoZSBwYXJ0aXRpb24ncyBjaGFuZ2VzLgotCQkJCSAqLwotCQkJCWlm IChhbV9wYXJ0aXRpb24pCi0JCQkJewotCQkJCQlPaWQJCQlhbmNlc3RvcjsKLQkJCQkJaW50 CQkJbGV2ZWw7Ci0JCQkJCUxpc3QJICAgKmFuY2VzdG9ycyA9IGdldF9wYXJ0aXRpb25fYW5j ZXN0b3JzKHJlbGlkKTsKLQotCQkJCQlhbmNlc3RvciA9IEdldFRvcE1vc3RBbmNlc3Rvcklu UHVibGljYXRpb24ocHViLT5vaWQsCi0JCQkJCQkJCQkJCQkJCQkgICBhbmNlc3RvcnMsCi0J CQkJCQkJCQkJCQkJCQkgICAmbGV2ZWwpOwotCi0JCQkJCWlmIChhbmNlc3RvciAhPSBJbnZh bGlkT2lkKQotCQkJCQl7Ci0JCQkJCQlhbmNlc3Rvcl9wdWJsaXNoZWQgPSB0cnVlOwotCQkJ CQkJaWYgKHB1Yi0+cHVidmlhcm9vdCkKLQkJCQkJCXsKLQkJCQkJCQlwdWJfcmVsaWQgPSBh bmNlc3RvcjsKLQkJCQkJCQlhbmNlc3Rvcl9sZXZlbCA9IGxldmVsOwotCQkJCQkJfQotCQkJ CQl9Ci0JCQkJfQotCi0JCQkJaWYgKGxpc3RfbWVtYmVyX29pZChwdWJpZHMsIHB1Yi0+b2lk KSB8fAotCQkJCQlsaXN0X21lbWJlcl9vaWQoc2NoZW1hUHViaWRzLCBwdWItPm9pZCkgfHwK LQkJCQkJYW5jZXN0b3JfcHVibGlzaGVkKQotCQkJCQlwdWJsaXNoID0gdHJ1ZTsKLQkJCX0K LQotCQkJLyoKLQkJCSAqIElmIHRoZSByZWxhdGlvbiBpcyB0byBiZSBwdWJsaXNoZWQsIGRl dGVybWluZSBhY3Rpb25zIHRvCi0JCQkgKiBwdWJsaXNoLCBhbmQgbGlzdCBvZiBjb2x1bW5z LCBpZiBhcHByb3ByaWF0ZS4KLQkJCSAqCi0JCQkgKiBEb24ndCBwdWJsaXNoIGNoYW5nZXMg Zm9yIHBhcnRpdGlvbmVkIHRhYmxlcywgYmVjYXVzZQotCQkJICogcHVibGlzaGluZyB0aG9z ZSBvZiBpdHMgcGFydGl0aW9ucyBzdWZmaWNlcywgdW5sZXNzIHBhcnRpdGlvbgotCQkJICog Y2hhbmdlcyB3b24ndCBiZSBwdWJsaXNoZWQgZHVlIHRvIHB1YnZpYXJvb3QgYmVpbmcgc2V0 LgotCQkJICovCi0JCQlpZiAocHVibGlzaCAmJgotCQkJCShyZWxraW5kICE9IFJFTEtJTkRf UEFSVElUSU9ORURfVEFCTEUgfHwgcHViLT5wdWJ2aWFyb290KSkKLQkJCXsKLQkJCQllbnRy eS0+cHViYWN0aW9ucy5wdWJpbnNlcnQgfD0gcHViLT5wdWJhY3Rpb25zLnB1Ymluc2VydDsK LQkJCQllbnRyeS0+cHViYWN0aW9ucy5wdWJ1cGRhdGUgfD0gcHViLT5wdWJhY3Rpb25zLnB1 YnVwZGF0ZTsKLQkJCQllbnRyeS0+cHViYWN0aW9ucy5wdWJkZWxldGUgfD0gcHViLT5wdWJh Y3Rpb25zLnB1YmRlbGV0ZTsKLQkJCQllbnRyeS0+cHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSB8 PSBwdWItPnB1YmFjdGlvbnMucHVidHJ1bmNhdGU7Ci0KLQkJCQkvKgotCQkJCSAqIFdlIHdh bnQgdG8gcHVibGlzaCB0aGUgY2hhbmdlcyBhcyB0aGUgdG9wLW1vc3QgYW5jZXN0b3IKLQkJ CQkgKiBhY3Jvc3MgYWxsIHB1YmxpY2F0aW9ucy4gU28gd2UgbmVlZCB0byBjaGVjayBpZiB0 aGUgYWxyZWFkeQotCQkJCSAqIGNhbGN1bGF0ZWQgbGV2ZWwgaXMgaGlnaGVyIHRoYW4gdGhl IG5ldyBvbmUuIElmIHllcywgd2UgY2FuCi0JCQkJICogaWdub3JlIHRoZSBuZXcgdmFsdWUg KGFzIGl0J3MgYSBjaGlsZCkuIE90aGVyd2lzZSB0aGUgbmV3Ci0JCQkJICogdmFsdWUgaXMg YW4gYW5jZXN0b3IsIHNvIHdlIGtlZXAgaXQuCi0JCQkJICovCi0JCQkJaWYgKHB1Ymxpc2hf YW5jZXN0b3JfbGV2ZWwgPiBhbmNlc3Rvcl9sZXZlbCkKLQkJCQkJY29udGludWU7Ci0KLQkJ CQkvKgotCQkJCSAqIElmIHdlIGZvdW5kIGFuIGFuY2VzdG9yIGhpZ2hlciB1cCBpbiB0aGUg dHJlZSwgZGlzY2FyZCB0aGUKLQkJCQkgKiBsaXN0IG9mIHB1YmxpY2F0aW9ucyB0aHJvdWdo IHdoaWNoIHdlIHJlcGxpY2F0ZSBpdCwgYW5kIHVzZQotCQkJCSAqIHRoZSBuZXcgYW5jZXN0 b3IuCi0JCQkJICovCi0JCQkJaWYgKHB1Ymxpc2hfYW5jZXN0b3JfbGV2ZWwgPCBhbmNlc3Rv cl9sZXZlbCkKLQkJCQl7Ci0JCQkJCXB1Ymxpc2hfYXNfcmVsaWQgPSBwdWJfcmVsaWQ7Ci0J CQkJCXB1Ymxpc2hfYW5jZXN0b3JfbGV2ZWwgPSBhbmNlc3Rvcl9sZXZlbDsKLQotCQkJCQkv KiByZXNldCB0aGUgcHVibGljYXRpb24gbGlzdCBmb3IgdGhpcyByZWxhdGlvbiAqLwotCQkJ CQlyZWxfcHVibGljYXRpb25zID0gTklMOwotCQkJCX0KLQkJCQllbHNlCi0JCQkJewotCQkJ CQkvKiBTYW1lIGFuY2VzdG9yIGxldmVsLCBoYXMgdG8gYmUgdGhlIHNhbWUgT0lELiAqLwot CQkJCQlBc3NlcnQocHVibGlzaF9hc19yZWxpZCA9PSBwdWJfcmVsaWQpOwotCQkJCX0KLQot CQkJCS8qIFRyYWNrIHB1YmxpY2F0aW9ucyBmb3IgdGhpcyBhbmNlc3Rvci4gKi8KLQkJCQly ZWxfcHVibGljYXRpb25zID0gbGFwcGVuZChyZWxfcHVibGljYXRpb25zLCBwdWIpOwotCQkJ fQotCQl9Ci0KLQkJZW50cnktPnB1Ymxpc2hfYXNfcmVsaWQgPSBwdWJsaXNoX2FzX3JlbGlk OworCQlyZWxfcHVibGljYXRpb25zID0KKwkJCXByb2Nlc3NfcmVsYXRpb25fcHVibGljYXRp b25zKHJlbGlkLCBkYXRhLT5wdWJsaWNhdGlvbnMsCisJCQkJCQkJCQkJICAmZW50cnktPnB1 YmFjdGlvbnMsCisJCQkJCQkJCQkJICAmZW50cnktPnB1Ymxpc2hfYXNfcmVsaWQpOwogCiAJ CS8qCiAJCSAqIEluaXRpYWxpemUgdGhlIHR1cGxlIHNsb3QsIG1hcCwgYW5kIHJvdyBmaWx0 ZXIuIFRoZXNlIGFyZSBvbmx5IHVzZWQKQEAgLTIxOTgsOCArMjA3MSw2IEBAIGdldF9yZWxf c3luY19lbnRyeShQR091dHB1dERhdGEgKmRhdGEsIFJlbGF0aW9uIHJlbGF0aW9uKQogCQkJ cGdvdXRwdXRfY29sdW1uX2xpc3RfaW5pdChkYXRhLCByZWxfcHVibGljYXRpb25zLCBlbnRy eSk7CiAJCX0KIAotCQlsaXN0X2ZyZWUocHViaWRzKTsKLQkJbGlzdF9mcmVlKHNjaGVtYVB1 Ymlkcyk7CiAJCWxpc3RfZnJlZShyZWxfcHVibGljYXRpb25zKTsKIAogCQllbnRyeS0+cmVw bGljYXRlX3ZhbGlkID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cv cGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CmluZGV4IDY5 OTYwNzM5ODkuLmVkNjcxNjgzNzQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cv cGdfcHJvYy5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdApAQCAt MTE4MzMsNiArMTE4MzMsMTQgQEAKICAgcHJvbmFtZSA9PiAncGdfcmVsYXRpb25faXNfcHVi bGlzaGFibGUnLCBwcm92b2xhdGlsZSA9PiAncycsCiAgIHByb3JldHR5cGUgPT4gJ2Jvb2wn LCBwcm9hcmd0eXBlcyA9PiAncmVnY2xhc3MnLAogICBwcm9zcmMgPT4gJ3BnX3JlbGF0aW9u X2lzX3B1Ymxpc2hhYmxlJyB9LAoreyBvaWQgPT4gJzgxMzknLAorICBkZXNjciA9PiAnZ2V0 IGluZm9ybWF0aW9uIG9uIGhvdyBhIHJlbGF0aW9uIHdpbGwgYmUgcHVibGlzaGVkIHZpYSBh IGxpc3Qgb2YgcHVibGljYXRpb25zJywKKyAgcHJvbmFtZSA9PiAncGdfZ2V0X3JlbGF0aW9u X3B1Ymxpc2hpbmdfaW5mbycsIHByb3ZhcmlhZGljID0+ICd0ZXh0JywKKyAgcHJvdm9sYXRp bGUgPT4gJ3MnLCBwcm9yZXR0eXBlID0+ICdyZWNvcmQnLCBwcm9hcmd0eXBlcyA9PiAncmVn Y2xhc3MgX3RleHQnLAorICBwcm9hbGxhcmd0eXBlcyA9PiAne3JlZ2NsYXNzLF90ZXh0LF9v aWQsb2lkLGJvb2wsYm9vbCxib29sLGJvb2x9JywKKyAgcHJvYXJnbW9kZXMgPT4gJ3tpLHYs byxvLG8sbyxvLG99JywKKyAgcHJvYXJnbmFtZXMgPT4gJ3tyZWxpZCxwdWJuYW1lcyxwdWJp ZHMscHViYXNyZWxpZCxwdWJpbnNlcnQscHVidXBkYXRlLHB1YmRlbGV0ZSxwdWJ0cnVuY2F0 ZX0nLAorICBwcm9zcmMgPT4gJ3BnX2dldF9yZWxhdGlvbl9wdWJsaXNoaW5nX2luZm8nIH0s CiAKICMgcmxzCiB7IG9pZCA9PiAnMzI5OCcsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9j YXRhbG9nL3BnX3B1YmxpY2F0aW9uLmggYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1Ymxp Y2F0aW9uLmgKaW5kZXggNmVjYWEyYTAxZS4uZDRlMzQ4ODkxNyAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oCisrKyBiL3NyYy9pbmNsdWRlL2Nh dGFsb2cvcGdfcHVibGljYXRpb24uaApAQCAtMTU1LDQgKzE1NSw4IEBAIGV4dGVybiBPYmpl Y3RBZGRyZXNzIHB1YmxpY2F0aW9uX2FkZF9zY2hlbWEoT2lkIHB1YmlkLCBPaWQgc2NoZW1h aWQsCiBleHRlcm4gQml0bWFwc2V0ICpwdWJfY29sbGlzdF90b19iaXRtYXBzZXQoQml0bWFw c2V0ICpjb2x1bW5zLCBEYXR1bSBwdWJjb2xzLAogCQkJCQkJCQkJCSAgIE1lbW9yeUNvbnRl eHQgbWN4dCk7CiAKK2V4dGVybiBMaXN0ICpwcm9jZXNzX3JlbGF0aW9uX3B1YmxpY2F0aW9u cyhPaWQgcmVsaWQsIGNvbnN0IExpc3QgKnB1YmxpY2F0aW9ucywKKwkJCQkJCQkJCQkgICBQ dWJsaWNhdGlvbkFjdGlvbnMgKnB1YmFjdGlvbnMsCisJCQkJCQkJCQkJICAgT2lkICpwdWJs aXNoX2FzX3JlbGlkKTsKKwogI2VuZGlmCQkJCQkJCS8qIFBHX1BVQkxJQ0FUSU9OX0ggKi8K ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0 IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wdWJsaWNhdGlvbi5vdXQKaW5kZXggNjlk YzZjZmQ4NS4uZGQ4ZmM5OTExMSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9wdWJsaWNhdGlvbi5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9w dWJsaWNhdGlvbi5vdXQKQEAgLTUsNiArNSwxNyBAQCBDUkVBVEUgUk9MRSByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgTE9HSU4gU1VQRVJVU0VSOwogQ1JFQVRFIFJPTEUgcmVncmVzc19w dWJsaWNhdGlvbl91c2VyMjsKIENSRUFURSBST0xFIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNl cl9kdW1teSBMT0dJTiBOT1NVUEVSVVNFUjsKIFNFVCBTRVNTSU9OIEFVVEhPUklaQVRJT04g J3JlZ3Jlc3NfcHVibGljYXRpb25fdXNlcic7CitDUkVBVEUgRlVOQ1RJT04gcHVibGlzaGVk X3N0cmVhbSAoVkFSSUFESUMgcHVibmFtZXMgdGV4dFtdKQorICAgICAgICAgICAgICAgIFJF VFVSTlMgVEFCTEUgKHB1Ym5hbWUgdGV4dCwgcHVibGlzaGVkIHJlZ2NsYXNzLCBzeW5jZWQg cmVnY2xhc3MpIEFTICQkCisgIC0tIEZvciBlYWNoIHB1YmxpY2F0aW9uLCBzaG93IGVhY2gg cHVibGlzaGVkIHJvb3QgYWxvbmdzaWRlIHRoZSB0YWJsZXMgd2hpY2gKKyAgLS0gYXJlIHB1 Ymxpc2hlZCB2aWEgaXRzIE9JRC4KKyAgU0VMRUNUIHAucHVibmFtZSwgcnBpLnB1YmFzcmVs aWQ6OnJlZ2NsYXNzLCBwci5wcnJlbGlkOjpyZWdjbGFzcworICAgIEZST00gcGdfcHVibGlj YXRpb25fcmVsIHByCisgICAgSk9JTiBwZ19wdWJsaWNhdGlvbiBwIE9OIChwLm9pZCA9IHBy LnBycHViaWQpLAorICAgICAgICAgcGdfZ2V0X3JlbGF0aW9uX3B1Ymxpc2hpbmdfaW5mbyhw ci5wcnJlbGlkLCBWQVJJQURJQyBwdWJuYW1lcykgcnBpCisgICBXSEVSRSBwLnB1Ym5hbWUg PSBBTlkgKHB1Ym5hbWVzKQorICAgT1JERVIgQlkgcC5vaWQsIDIsIDM7CiskJCBMQU5HVUFH RSBzcWw7CiAtLSBzdXBwcmVzcyB3YXJuaW5nIHRoYXQgZGVwZW5kcyBvbiB3YWxfbGV2ZWwK IFNFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKIENSRUFURSBQVUJMSUNBVElP TiB0ZXN0cHViX2RlZmF1bHQ7CkBAIC0xNjg2LDYgKzE2OTcsMTMgQEAgU0VMRUNUICogRlJP TSBwZ19wdWJsaWNhdGlvbl90YWJsZXM7CiAgcHViICAgICB8IHNjaDEgICAgICAgfCB0Ymwx ICAgICAgfCB7YX0gICAgICB8IAogKDEgcm93KQogCitTRUxFQ1QgKiBGUk9NIHB1Ymxpc2hl ZF9zdHJlYW0oJ3B1YicpOworIHB1Ym5hbWUgfCBwdWJsaXNoZWQgfCAgICAgc3luY2VkICAg ICAgCistLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0KKyBwdWIgICAg IHwgc2NoMS50YmwxIHwgc2NoMS50YmwxCisgcHViICAgICB8IHNjaDEudGJsMSB8IHNjaDIu dGJsMV9wYXJ0MQorKDIgcm93cykKKwogRFJPUCBQVUJMSUNBVElPTiBwdWI7CiAtLSBTY2hl bWEgcHVibGljYXRpb24gdGhhdCBkb2VzIG5vdCBpbmNsdWRlIHRoZSBzY2hlbWEgdGhhdCBo YXMgdGhlIHBhcmVudCB0YWJsZQogQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1YiBGT1IgVEFCTEVT IElOIFNDSEVNQSBzY2gyIFdJVEggKFBVQkxJU0hfVklBX1BBUlRJVElPTl9ST09UPTApOwpA QCAtMTcxMiw2ICsxNzMwLDEzIEBAIFNFTEVDVCAqIEZST00gcGdfcHVibGljYXRpb25fdGFi bGVzOwogIHB1YiAgICAgfCBzY2gyICAgICAgIHwgdGJsMV9wYXJ0MSB8IHthfSAgICAgIHwg CiAoMSByb3cpCiAKK1NFTEVDVCAqIEZST00gcHVibGlzaGVkX3N0cmVhbSgncHViJyk7Cisg cHVibmFtZSB8ICAgIHB1Ymxpc2hlZCAgICB8ICAgICBzeW5jZWQgICAgICAKKy0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLQorIHB1YiAgICAgfCBzY2gx LnRibDEgICAgICAgfCBzY2gxLnRibDEKKyBwdWIgICAgIHwgc2NoMi50YmwxX3BhcnQxIHwg c2NoMi50YmwxX3BhcnQxCisoMiByb3dzKQorCiBEUk9QIFBVQkxJQ0FUSU9OIHB1YjsKIERS T1AgVEFCTEUgc2NoMi50YmwxX3BhcnQxOwogRFJPUCBUQUJMRSBzY2gxLnRibDE7CkBAIC0x NzMyLDYgKzE3NTcsNyBAQCBEUk9QIFBVQkxJQ0FUSU9OIHB1YjsKIERST1AgVEFCTEUgc2No MS50YmwxOwogRFJPUCBTQ0hFTUEgc2NoMSBjYXNjYWRlOwogRFJPUCBTQ0hFTUEgc2NoMiBj YXNjYWRlOworRFJPUCBGVU5DVElPTiBwdWJsaXNoZWRfc3RyZWFtOwogUkVTRVQgU0VTU0lP TiBBVVRIT1JJWkFUSU9OOwogRFJPUCBST0xFIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciwg cmVncmVzc19wdWJsaWNhdGlvbl91c2VyMjsKIERST1AgUk9MRSByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXJfZHVtbXk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wdWJs aWNhdGlvbi5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wdWJsaWNhdGlvbi5zcWwKaW5k ZXggZDUwNTFhNWU3NC4uNmJmOTU1NGQ0OCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVz cy9zcWwvcHVibGljYXRpb24uc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3B1Ymxp Y2F0aW9uLnNxbApAQCAtNiw2ICs2LDE4IEBAIENSRUFURSBST0xFIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlcjI7CiBDUkVBVEUgUk9MRSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXJfZHVt bXkgTE9HSU4gTk9TVVBFUlVTRVI7CiBTRVQgU0VTU0lPTiBBVVRIT1JJWkFUSU9OICdyZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXInOwogCitDUkVBVEUgRlVOQ1RJT04gcHVibGlzaGVkX3N0 cmVhbSAoVkFSSUFESUMgcHVibmFtZXMgdGV4dFtdKQorICAgICAgICAgICAgICAgIFJFVFVS TlMgVEFCTEUgKHB1Ym5hbWUgdGV4dCwgcHVibGlzaGVkIHJlZ2NsYXNzLCBzeW5jZWQgcmVn Y2xhc3MpIEFTICQkCisgIC0tIEZvciBlYWNoIHB1YmxpY2F0aW9uLCBzaG93IGVhY2ggcHVi bGlzaGVkIHJvb3QgYWxvbmdzaWRlIHRoZSB0YWJsZXMgd2hpY2gKKyAgLS0gYXJlIHB1Ymxp c2hlZCB2aWEgaXRzIE9JRC4KKyAgU0VMRUNUIHAucHVibmFtZSwgcnBpLnB1YmFzcmVsaWQ6 OnJlZ2NsYXNzLCBwci5wcnJlbGlkOjpyZWdjbGFzcworICAgIEZST00gcGdfcHVibGljYXRp b25fcmVsIHByCisgICAgSk9JTiBwZ19wdWJsaWNhdGlvbiBwIE9OIChwLm9pZCA9IHByLnBy cHViaWQpLAorICAgICAgICAgcGdfZ2V0X3JlbGF0aW9uX3B1Ymxpc2hpbmdfaW5mbyhwci5w cnJlbGlkLCBWQVJJQURJQyBwdWJuYW1lcykgcnBpCisgICBXSEVSRSBwLnB1Ym5hbWUgPSBB TlkgKHB1Ym5hbWVzKQorICAgT1JERVIgQlkgcC5vaWQsIDIsIDM7CiskJCBMQU5HVUFHRSBz cWw7CisKIC0tIHN1cHByZXNzIHdhcm5pbmcgdGhhdCBkZXBlbmRzIG9uIHdhbF9sZXZlbAog U0VUIGNsaWVudF9taW5fbWVzc2FnZXMgPSAnRVJST1InOwogQ1JFQVRFIFBVQkxJQ0FUSU9O IHRlc3RwdWJfZGVmYXVsdDsKQEAgLTEwNjQsNiArMTA3Niw3IEBAIFNFTEVDVCAqIEZST00g cGdfcHVibGljYXRpb25fdGFibGVzOwogLS0gVGFibGUgcHVibGljYXRpb24gdGhhdCBpbmNs dWRlcyBib3RoIHRoZSBwYXJlbnQgdGFibGUgYW5kIHRoZSBjaGlsZCB0YWJsZQogQUxURVIg UFVCTElDQVRJT04gcHViIEFERCBUQUJMRSBzY2gxLnRibDE7CiBTRUxFQ1QgKiBGUk9NIHBn X3B1YmxpY2F0aW9uX3RhYmxlczsKK1NFTEVDVCAqIEZST00gcHVibGlzaGVkX3N0cmVhbSgn cHViJyk7CiAKIERST1AgUFVCTElDQVRJT04gcHViOwogLS0gU2NoZW1hIHB1YmxpY2F0aW9u IHRoYXQgZG9lcyBub3QgaW5jbHVkZSB0aGUgc2NoZW1hIHRoYXQgaGFzIHRoZSBwYXJlbnQg dGFibGUKQEAgLTEwNzgsNiArMTA5MSw3IEBAIFNFTEVDVCAqIEZST00gcGdfcHVibGljYXRp b25fdGFibGVzOwogLS0gVGFibGUgcHVibGljYXRpb24gdGhhdCBpbmNsdWRlcyBib3RoIHRo ZSBwYXJlbnQgdGFibGUgYW5kIHRoZSBjaGlsZCB0YWJsZQogQUxURVIgUFVCTElDQVRJT04g cHViIEFERCBUQUJMRSBzY2gxLnRibDE7CiBTRUxFQ1QgKiBGUk9NIHBnX3B1YmxpY2F0aW9u X3RhYmxlczsKK1NFTEVDVCAqIEZST00gcHVibGlzaGVkX3N0cmVhbSgncHViJyk7CiAKIERS T1AgUFVCTElDQVRJT04gcHViOwogRFJPUCBUQUJMRSBzY2gyLnRibDFfcGFydDE7CkBAIC0x MDk2LDYgKzExMTAsNyBAQCBEUk9QIFBVQkxJQ0FUSU9OIHB1YjsKIERST1AgVEFCTEUgc2No MS50YmwxOwogRFJPUCBTQ0hFTUEgc2NoMSBjYXNjYWRlOwogRFJPUCBTQ0hFTUEgc2NoMiBj YXNjYWRlOworRFJPUCBGVU5DVElPTiBwdWJsaXNoZWRfc3RyZWFtOwogCiBSRVNFVCBTRVNT SU9OIEFVVEhPUklaQVRJT047CiBEUk9QIFJPTEUgcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy LCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIyOwotLSAKMi4yNS4xCgo= --------------8uPfEkfXokw7PchxOtJ3iUKw Content-Type: text/x-patch; charset=UTF-8; name="v2-0002-WIP-introduce-pg_set_logical_root-for-use-with-pu.patch" Content-Disposition: attachment; filename*0="v2-0002-WIP-introduce-pg_set_logical_root-for-use-with-pu.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSAwMzk3YTUyNTgzOWUxZGZmMzA2M2M2OTg3MmZhYzExNjFmZjQ3YzcyIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8amNoYW1waW9uQHRpbWVz Y2FsZS5jb20+CkRhdGU6IE1vbiwgMjYgU2VwIDIwMjIgMTM6MjM6NTEgLTA3MDAKU3ViamVj dDogW1BBVENIIHYyIDIvMl0gV0lQOiBpbnRyb2R1Y2UgcGdfc2V0X2xvZ2ljYWxfcm9vdCBm b3IgdXNlIHdpdGgKIHB1YnZpYXJvb3QKCkFsbG93cyByZWd1bGFyIGluaGVyaXRlZCB0YWJs ZXMgdG8gYmUgcHVibGlzaGVkIHZpYSB0aGVpciByb290IHRhYmxlLApqdXN0IGxpa2UgcGFy dGl0aW9ucy4gVGhpcyB3b3JrcyBieSBoaWphY2tpbmcgcGdfaW5oZXJpdCdzIGluaHNlcW5v CmNvbHVtbiwgYW5kIHJlcGxhY2luZyBhIChzaW5nbGUpIGV4aXN0aW5nIGVudHJ5IGZvciB0 aGUgY2hpbGQgd2l0aCB0aGUKdmFsdWUgemVybywgaW5kaWNhdGluZyB0aGF0IGl0IHNob3Vs ZCBiZSB0cmVhdGVkIGFzIGEgbG9naWNhbCBwYXJ0aXRpb24KYnkgdGhlIHB1YmxpY2F0aW9u IG1hY2hpbmVyeS4KCkluaXRpYWwgc3luYyB3b3JrcyBieSBhc2tpbmcgdGhlIHB1Ymxpc2hl ciBmb3IgYSBsaXN0IG9mIGxvZ2ljYWwKZGVzY2VuZGFudHMgb2YgdGhlIHB1Ymxpc2hlZCB0 YWJsZSwgdGhlbiBDT1BZaW5nIHRoZW0gb25lLWJ5LW9uZSBpbnRvCnRoZSByb290LiBUaGUg cHVibGlzaGVyIHJldXNlcyB0aGUgZXhpc3RpbmcgcHVidmlhcm9vdCBsb2dpYywgYWRkaW5n IHRoZQpuZXcgbG9naWNhbCByb290cyB0byBjb2RlIHRoYXQgcHJldmlvdXNseSBsb29rZWQg b25seSBmb3IgcGFydGl0aW9uCnJvb3RzLgoKS25vd24gYnVncy9UT0RPczoKLSBUaGUgcGdf aW5oZXJpdHMgbWFjaGluZXJ5IGRvZXNuJ3QgcHJvaGliaXQgY2hhbmdlcyB0byBpbmhlcml0 YW5jZQogIGFmdGVyIGFuIGVudHJ5IGhhcyBiZWVuIG1hcmtlZCBhcyBhIGxvZ2ljYWwgcm9v dC4KLSBJIGhhdmVuJ3QgZ2l2ZW4gYW55IHRob3VnaHQgdG8gaW50ZXJhY3Rpb25zIHdpdGgg cm93IGZpbHRlcnMsIG9yIHRvCiAgY29sdW1uIGxpc3RzLgotIEknbSBub3Qgc3VyZSB0aGF0 IEknbSB0YWtpbmcgYWxsIHRoZSBuZWNlc3NhcnkgbG9ja3MgeWV0LCBhbmQgdGhvc2UgSQog IGRvIHRha2UgbWF5IGJlIHRha2VuIGluIHRoZSB3cm9uZyBvcmRlci4KLSBEdW1wIGFuZCB1 cGdyYWRlIGFyZW4ndCBzdXBwb3J0ZWQgeWV0LgotLS0KIHNyYy9iYWNrZW5kL2NhdGFsb2cv cGdfaW5oZXJpdHMuYyAgICAgICAgICAgfCAyMTIgKysrKysrKysrKysrLQogc3JjL2JhY2tl bmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jICAgICAgICB8IDI4MiArKysrKysrKysrKysr LS0tLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jICAgICAgfCAg MTAgKwogc3JjL2JhY2tlbmQvcGFydGl0aW9uaW5nL3BhcnRkZXNjLmMgICAgICAgICB8ICAg MyArLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC90YWJsZXN5bmMuYyB8IDI1 NyArKysrKysrKysrLS0tLS0tCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9w Z291dHB1dC5jIHwgICAxIC0KIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfaW5oZXJpdHMuaCAg ICAgICAgICAgfCAgIDcgKy0KIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgICAg ICAgICAgICAgfCAgMTIgKwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wdWJsaWNhdGlv bi5vdXQgICB8IDI2NiArKysrKysrKysrKysrKysrKwogc3JjL3Rlc3QvcmVncmVzcy9zcWwv cHVibGljYXRpb24uc3FsICAgICAgICB8IDEyMSArKysrKysrKwogc3JjL3Rlc3Qvc3Vic2Ny aXB0aW9uL3QvMDEzX3BhcnRpdGlvbi5wbCAgICB8IDMxMiArKysrKysrKysrKysrKysrKysr KwogMTEgZmlsZXMgY2hhbmdlZCwgMTMwOSBpbnNlcnRpb25zKCspLCAxNzQgZGVsZXRpb25z KC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19pbmhlcml0cy5jIGIv c3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19pbmhlcml0cy5jCmluZGV4IGRhOTY5YmQyZjkuLmI1 OWY5M2M4MzMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfaW5oZXJpdHMu YworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX2luaGVyaXRzLmMKQEAgLTI0LDE0ICsy NCwyMiBAQAogI2luY2x1ZGUgImFjY2Vzcy90YWJsZS5oIgogI2luY2x1ZGUgImNhdGFsb2cv aW5kZXhpbmcuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2luaGVyaXRzLmgiCisjaW5jbHVk ZSAiY2F0YWxvZy9wYXJ0aXRpb24uaCIKKyNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNs dWRlICJwYXJzZXIvcGFyc2VfdHlwZS5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5oIgor I2luY2x1ZGUgInV0aWxzL2FjbC5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAj aW5jbHVkZSAidXRpbHMvZm1ncm9pZHMuaCIKKyNpbmNsdWRlICJ1dGlscy9mbWdycHJvdG9z LmgiCisjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvbWVt dXRpbHMuaCIKICNpbmNsdWRlICJ1dGlscy9zbmFwbWdyLmgiCiAjaW5jbHVkZSAidXRpbHMv c3lzY2FjaGUuaCIKIAorc3RhdGljIExpc3QgKiBmaW5kX2FsbF9pbmhlcml0b3JzX2ludGVy bmFsKE9pZCBwYXJlbnRyZWxJZCwgTE9DS01PREUgbG9ja21vZGUsCisJCQkJCQkJCQkJICAg TGlzdCAqKm51bXBhcmVudHMsIGJvb2wgbG9naWNhbF9vbmx5KTsKKwogLyoKICAqIEVudHJ5 IG9mIGEgaGFzaCB0YWJsZSB1c2VkIGluIGZpbmRfYWxsX2luaGVyaXRvcnMuIFNlZSBiZWxv dy4KICAqLwpAQCAtNTksMTQgKzY3LDE0IEBAIExpc3QgKgogZmluZF9pbmhlcml0YW5jZV9j aGlsZHJlbihPaWQgcGFyZW50cmVsSWQsIExPQ0tNT0RFIGxvY2ttb2RlKQogewogCXJldHVy biBmaW5kX2luaGVyaXRhbmNlX2NoaWxkcmVuX2V4dGVuZGVkKHBhcmVudHJlbElkLCB0cnVl LCBsb2NrbW9kZSwKLQkJCQkJCQkJCQkJICBOVUxMLCBOVUxMKTsKKwkJCQkJCQkJCQkJICBO VUxMLCBOVUxMLCBmYWxzZSk7CiB9CiAKIC8qCiAgKiBmaW5kX2luaGVyaXRhbmNlX2NoaWxk cmVuX2V4dGVuZGVkCiAgKgogICogQXMgZmluZF9pbmhlcml0YW5jZV9jaGlsZHJlbiwgd2l0 aCBtb3JlIG9wdGlvbnMgcmVnYXJkaW5nIGRldGFjaGVkCi0gKiBwYXJ0aXRpb25zLgorICog cGFydGl0aW9ucyBhbmQgbG9naWNhbCByb290cy4KICAqCiAgKiBJZiBhIHBhcnRpdGlvbidz IHBnX2luaGVyaXRzIHJvdyBpcyBtYXJrZWQgImRldGFjaCBwZW5kaW5nIiwKICAqICpkZXRh Y2hlZF9leGlzdCAoaWYgbm90IG51bGwpIGlzIHNldCB0cnVlLgpAQCAtNzgsMTYgKzg2LDIx IEBAIGZpbmRfaW5oZXJpdGFuY2VfY2hpbGRyZW4oT2lkIHBhcmVudHJlbElkLCBMT0NLTU9E RSBsb2NrbW9kZSkKICAqIHdoZXRoZXIgdGhlIHRyYW5zYWN0aW9uIHRoYXQgbWFya2VkIHRo b3NlIHBhcnRpdGlvbnMgYXMgZGV0YWNoZWQgYXBwZWFycwogICogY29tbWl0dGVkIHRvIHRo ZSBhY3RpdmUgc25hcHNob3QuICBJbiBhZGRpdGlvbiwgKmRldGFjaGVkX3htaW4gKGlmIG5v dCBudWxsKQogICogaXMgc2V0IHRvIHRoZSB4bWluIG9mIHRoZSByb3cgb2YgdGhlIGRldGFj aGVkIHBhcnRpdGlvbi4KKyAqCisgKiBJZiBsb2dpY2FsX29ubHkgaXMgdHJ1ZSwgb25seSB0 YWJsZXMgbWFya2VkIGV4cGxpY2l0bHkgdmlhCisgKiBwZ19zZXRfbG9naWNhbF9yb290KCkg YXJlIGluY2x1ZGVkIGluIHRoZSBvdXRwdXQgbGlzdC4KICAqLwogTGlzdCAqCiBmaW5kX2lu aGVyaXRhbmNlX2NoaWxkcmVuX2V4dGVuZGVkKE9pZCBwYXJlbnRyZWxJZCwgYm9vbCBvbWl0 X2RldGFjaGVkLAogCQkJCQkJCQkgICBMT0NLTU9ERSBsb2NrbW9kZSwgYm9vbCAqZGV0YWNo ZWRfZXhpc3QsCi0JCQkJCQkJCSAgIFRyYW5zYWN0aW9uSWQgKmRldGFjaGVkX3htaW4pCisJ CQkJCQkJCSAgIFRyYW5zYWN0aW9uSWQgKmRldGFjaGVkX3htaW4sCisJCQkJCQkJCSAgIGJv b2wgbG9naWNhbF9vbmx5KQogewogCUxpc3QJICAgKmxpc3QgPSBOSUw7CiAJUmVsYXRpb24J cmVsYXRpb247CisJT2lkCQkJaW5kZXg7CiAJU3lzU2NhbkRlc2Mgc2NhbjsKLQlTY2FuS2V5 RGF0YSBrZXlbMV07CisJU2NhbktleURhdGEga2V5WzJdOwogCUhlYXBUdXBsZQlpbmhlcml0 c1R1cGxlOwogCU9pZAkJCWluaHJlbGlkOwogCU9pZAkJICAgKm9pZGFycjsKQEAgLTExMCwx NCArMTIzLDI0IEBAIGZpbmRfaW5oZXJpdGFuY2VfY2hpbGRyZW5fZXh0ZW5kZWQoT2lkIHBh cmVudHJlbElkLCBib29sIG9taXRfZGV0YWNoZWQsCiAJbnVtb2lkcyA9IDA7CiAKIAlyZWxh dGlvbiA9IHRhYmxlX29wZW4oSW5oZXJpdHNSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2sp OworCWluZGV4ID0gSW5oZXJpdHNQYXJlbnRJbmRleElkOwogCiAJU2NhbktleUluaXQoJmtl eVswXSwKIAkJCQlBbnVtX3BnX2luaGVyaXRzX2luaHBhcmVudCwKIAkJCQlCVEVxdWFsU3Ry YXRlZ3lOdW1iZXIsIEZfT0lERVEsCiAJCQkJT2JqZWN0SWRHZXREYXR1bShwYXJlbnRyZWxJ ZCkpOwogCi0Jc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2NhbihyZWxhdGlvbiwgSW5oZXJpdHNQ YXJlbnRJbmRleElkLCB0cnVlLAotCQkJCQkJCSAgTlVMTCwgMSwga2V5KTsKKwlpZiAobG9n aWNhbF9vbmx5KQorCXsKKwkJaW5kZXggPSBJbmhlcml0c1BhcmVudFNlcW5vSW5kZXhJZDsK KwkJU2NhbktleUluaXQoJmtleVsxXSwKKwkJCQkJQW51bV9wZ19pbmhlcml0c19pbmhzZXFu bywKKwkJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX0lOVDRFUSwKKwkJCQkJSW50MzJH ZXREYXR1bSgwKSk7CisJfQorCisJc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2NhbihyZWxhdGlv biwgaW5kZXgsIHRydWUsCisJCQkJCQkJICBOVUxMLCBsb2dpY2FsX29ubHkgPyAyIDogMSwg a2V5KTsKIAogCXdoaWxlICgoaW5oZXJpdHNUdXBsZSA9IHN5c3RhYmxlX2dldG5leHQoc2Nh bikpICE9IE5VTEwpCiAJewpAQCAtMjU0LDYgKzI3NywyMCBAQCBmaW5kX2luaGVyaXRhbmNl X2NoaWxkcmVuX2V4dGVuZGVkKE9pZCBwYXJlbnRyZWxJZCwgYm9vbCBvbWl0X2RldGFjaGVk LAogICovCiBMaXN0ICoKIGZpbmRfYWxsX2luaGVyaXRvcnMoT2lkIHBhcmVudHJlbElkLCBM T0NLTU9ERSBsb2NrbW9kZSwgTGlzdCAqKm51bXBhcmVudHMpCit7CisJcmV0dXJuIGZpbmRf YWxsX2luaGVyaXRvcnNfaW50ZXJuYWwocGFyZW50cmVsSWQsIGxvY2ttb2RlLCBudW1wYXJl bnRzLAorCQkJCQkJCQkJCWZhbHNlKTsKK30KKworTGlzdCAqCitmaW5kX2FsbF9sb2dpY2Fs X2luaGVyaXRvcnMoT2lkIHBhcmVudHJlbElkKQoreworCXJldHVybiBmaW5kX2FsbF9pbmhl cml0b3JzX2ludGVybmFsKHBhcmVudHJlbElkLCBOb0xvY2ssIE5VTEwsIHRydWUpOworfQor CitzdGF0aWMgTGlzdCAqCitmaW5kX2FsbF9pbmhlcml0b3JzX2ludGVybmFsKE9pZCBwYXJl bnRyZWxJZCwgTE9DS01PREUgbG9ja21vZGUsCisJCQkJCQkJIExpc3QgKipudW1wYXJlbnRz LCBib29sIGxvZ2ljYWxfb25seSkKIHsKIAkvKiBoYXNoIHRhYmxlIGZvciBPKDEpIHJlbF9v aWQgLT4gcmVsX251bXBhcmVudHMgY2VsbCBsb29rdXAgKi8KIAlIVEFCCSAgICpzZWVuX3Jl bHM7CkBAIC0yOTAsNyArMzI3LDkgQEAgZmluZF9hbGxfaW5oZXJpdG9ycyhPaWQgcGFyZW50 cmVsSWQsIExPQ0tNT0RFIGxvY2ttb2RlLCBMaXN0ICoqbnVtcGFyZW50cykKIAkJTGlzdENl bGwgICAqbGM7CiAKIAkJLyogR2V0IHRoZSBkaXJlY3QgY2hpbGRyZW4gb2YgdGhpcyByZWwg Ki8KLQkJY3VycmVudGNoaWxkcmVuID0gZmluZF9pbmhlcml0YW5jZV9jaGlsZHJlbihjdXJy ZW50cmVsLCBsb2NrbW9kZSk7CisJCWN1cnJlbnRjaGlsZHJlbiA9CisJCQlmaW5kX2luaGVy aXRhbmNlX2NoaWxkcmVuX2V4dGVuZGVkKGN1cnJlbnRyZWwsIHRydWUsIGxvY2ttb2RlLAor CQkJCQkJCQkJCQkgICBOVUxMLCBOVUxMLCBsb2dpY2FsX29ubHkpOwogCiAJCS8qCiAJCSAq IEFkZCB0byB0aGUgcXVldWUgb25seSB0aG9zZSBjaGlsZHJlbiBub3QgYWxyZWFkeSBzZWVu LiBUaGlzIGF2b2lkcwpAQCAtNjU1LDMgKzY5NCwxNjIgQEAgUGFydGl0aW9uSGFzUGVuZGlu Z0RldGFjaChPaWQgcGFydG9pZCkKIAllbG9nKEVSUk9SLCAicmVsYXRpb24gJXUgaXMgbm90 IGEgcGFydGl0aW9uIiwgcGFydG9pZCk7CiAJcmV0dXJuIGZhbHNlOwkJCQkvKiBrZWVwIGNv bXBpbGVyIHF1aWV0ICovCiB9CisKK3N0YXRpYyBPaWQKK2dldF9sb2dpY2FsX3BhcmVudF93 b3JrZXIoUmVsYXRpb24gaW5oUmVsLCBPaWQgcmVsaWQpCit7CisJU3lzU2NhbkRlc2Mgc2Nh bjsKKwlTY2FuS2V5RGF0YSBrZXlbMl07CisJT2lkCQkJcmVzdWx0ID0gSW52YWxpZE9pZDsK KwlIZWFwVHVwbGUJdHVwbGU7CisKKwlTY2FuS2V5SW5pdCgma2V5WzBdLAorCQkJCUFudW1f cGdfaW5oZXJpdHNfaW5ocmVsaWQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09J REVRLAorCQkJCU9iamVjdElkR2V0RGF0dW0ocmVsaWQpKTsKKwlTY2FuS2V5SW5pdCgma2V5 WzFdLAorCQkJCUFudW1fcGdfaW5oZXJpdHNfaW5oc2Vxbm8sCisJCQkJQlRFcXVhbFN0cmF0 ZWd5TnVtYmVyLCBGX0lOVDRFUSwKKwkJCQlJbnQzMkdldERhdHVtKDApKTsKKworCXNjYW4g PSBzeXN0YWJsZV9iZWdpbnNjYW4oaW5oUmVsLCBJbmhlcml0c1JlbGlkU2Vxbm9JbmRleElk LCB0cnVlLAorCQkJCQkJCSAgTlVMTCwgMiwga2V5KTsKKwl0dXBsZSA9IHN5c3RhYmxlX2dl dG5leHQoc2Nhbik7CisJaWYgKEhlYXBUdXBsZUlzVmFsaWQodHVwbGUpKQorCXsKKwkJRm9y bV9wZ19pbmhlcml0cyBmb3JtID0gKEZvcm1fcGdfaW5oZXJpdHMpIEdFVFNUUlVDVCh0dXBs ZSk7CisJCXJlc3VsdCA9IGZvcm0tPmluaHBhcmVudDsKKwl9CisKKwlzeXN0YWJsZV9lbmRz Y2FuKHNjYW4pOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQKK2dldF9s b2dpY2FsX2FuY2VzdG9yc193b3JrZXIoUmVsYXRpb24gaW5oUmVsLCBPaWQgcmVsaWQsIExp c3QgKiphbmNlc3RvcnMpCit7CisJT2lkCQkJcGFyZW50T2lkOworCisJLyoKKwkgKiBSZWN1 cnNpb24gZW5kcyBhdCB0aGUgdG9wbW9zdCBsZXZlbCwgaWUuLCB3aGVuIHRoZXJlJ3Mgbm8g cGFyZW50LgorCSAqLworCXBhcmVudE9pZCA9IGdldF9sb2dpY2FsX3BhcmVudF93b3JrZXIo aW5oUmVsLCByZWxpZCk7CisJaWYgKHBhcmVudE9pZCA9PSBJbnZhbGlkT2lkKQorCQlyZXR1 cm47CisKKwkqYW5jZXN0b3JzID0gbGFwcGVuZF9vaWQoKmFuY2VzdG9ycywgcGFyZW50T2lk KTsKKwlnZXRfbG9naWNhbF9hbmNlc3RvcnNfd29ya2VyKGluaFJlbCwgcGFyZW50T2lkLCBh bmNlc3RvcnMpOworfQorCitMaXN0ICoKK2dldF9sb2dpY2FsX2FuY2VzdG9ycyhPaWQgcmVs aWQsIGJvb2wgaXNfcGFydGl0aW9uKQoreworCUxpc3QJICAgKnJlc3VsdCA9IE5JTDsKKwlS ZWxhdGlvbglpbmhSZWw7CisKKwkvKiBGb3IgcGFydGl0aW9ucywgdGhpcyBpcyBpZGVudGlj YWwgdG8gZ2V0X3BhcnRpdGlvbl9hbmNlc3RvcnMoKS4gKi8KKwlpZiAoaXNfcGFydGl0aW9u KQorCQlyZXR1cm4gZ2V0X3BhcnRpdGlvbl9hbmNlc3RvcnMocmVsaWQpOworCisJaW5oUmVs ID0gdGFibGVfb3BlbihJbmhlcml0c1JlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJ Z2V0X2xvZ2ljYWxfYW5jZXN0b3JzX3dvcmtlcihpbmhSZWwsIHJlbGlkLCAmcmVzdWx0KTsK Kwl0YWJsZV9jbG9zZShpbmhSZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gcmVz dWx0OworfQorCitib29sCitoYXNfbG9naWNhbF9wYXJlbnQoUmVsYXRpb24gaW5oUmVsLCBP aWQgcmVsaWQpCit7CisJcmV0dXJuIChnZXRfbG9naWNhbF9wYXJlbnRfd29ya2VyKGluaFJl bCwgcmVsaWQpICE9IEludmFsaWRPaWQpOworfQorCitEYXR1bQorcGdfc2V0X2xvZ2ljYWxf cm9vdChQR19GVU5DVElPTl9BUkdTKQoreworCU9pZAkJCXRhYmxlb2lkID0gUEdfR0VUQVJH X09JRCgwKTsKKwlPaWQJCQlyb290b2lkID0gUEdfR0VUQVJHX09JRCgxKTsKKwljaGFyCSAg ICp0YWJsZW5hbWU7CisJY2hhcgkgICAqcm9vdG5hbWU7CisJUmVsYXRpb24JaW5oUmVsOwor CVNjYW5LZXlEYXRhIGtleTsKKwlTeXNTY2FuRGVzYyBzY2FuOworCU9pZAkJCXBhcmVudCA9 IEludmFsaWRPaWQ7CisJSGVhcFR1cGxlCXR1cGxlLCBjb3B5VHVwbGU7CisJRm9ybV9wZ19p bmhlcml0cyBmb3JtOworCisJLyoKKwkgKiBDaGVjayB0aGF0IHRoZSB0YWJsZXMgZXhpc3Qu CisJICogVE9ETzogY2hlY2sgaWRlbnRpY2FsIHNjaGVtYXMgdG9vPyBvciBkb2VzIHJlcGxp Y2F0aW9uIGhhbmRsZSB0aGF0PworCSAqLworCXRhYmxlbmFtZSA9IGdldF9yZWxfbmFtZSh0 YWJsZW9pZCk7CisJaWYgKHRhYmxlbmFtZSA9PSBOVUxMKQorCQllcmVwb3J0KEVSUk9SLAor CQkJCShlcnJjb2RlKEVSUkNPREVfVU5ERUZJTkVEX1RBQkxFKSwKKwkJCQkgZXJybXNnKCJP SUQgJXUgZG9lcyBub3QgcmVmZXIgdG8gYSB0YWJsZSIsIHRhYmxlb2lkKSkpOworCXJvb3Ru YW1lID0gZ2V0X3JlbF9uYW1lKHJvb3RvaWQpOworCWlmIChyb290bmFtZSA9PSBOVUxMKQor CQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfVU5ERUZJTkVEX1RBQkxF KSwKKwkJCQkgZXJybXNnKCJPSUQgJXUgZG9lcyBub3QgcmVmZXIgdG8gYSB0YWJsZSIsIHJv b3RvaWQpKSk7CisKKwkvKiBDaGVjayBvd25lcnNoaXAuICovCisJaWYgKCFvYmplY3Rfb3du ZXJjaGVjayhSZWxhdGlvblJlbGF0aW9uSWQsIHRhYmxlb2lkLCBHZXRVc2VySWQoKSkpCisJ CWFjbGNoZWNrX2Vycm9yKEFDTENIRUNLX05PVF9PV05FUiwKKwkJCQkJICAgZ2V0X3JlbGtp bmRfb2JqdHlwZShnZXRfcmVsX3JlbGtpbmQodGFibGVvaWQpKSwKKwkJCQkJICAgdGFibGVu YW1lKTsKKwlpZiAoIW9iamVjdF9vd25lcmNoZWNrKFJlbGF0aW9uUmVsYXRpb25JZCwgcm9v dG9pZCwgR2V0VXNlcklkKCkpKQorCQlhY2xjaGVja19lcnJvcihBQ0xDSEVDS19OT1RfT1dO RVIsCisJCQkJCSAgIGdldF9yZWxraW5kX29ianR5cGUoZ2V0X3JlbF9yZWxraW5kKHJvb3Rv aWQpKSwKKwkJCQkJICAgcm9vdG5hbWUpOworCisJLyogT3BlbiBwZ19pbmhlcml0cyB3aXRo IFJvd0V4Y2x1c2l2ZUxvY2sgc28gdGhhdCB3ZSBjYW4gdXBkYXRlIGl0LiAqLworCWluaFJl bCA9IHRhYmxlX29wZW4oSW5oZXJpdHNSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsK KworCS8qCisJICogV2UgaGF2ZSB0byBtYWtlIHN1cmUgdGhhdCB0aGUgaW5oZXJpdGFuY2Ug cmVsYXRpb25zaGlwIGFscmVhZHkgZXhpc3RzLAorCSAqIGFuZCB0aGF0IHRoZXJlIGlzIG9u bHkgb25lIGV4aXN0aW5nIHBhcmVudCBmb3IgdGhpcyB0YWJsZS4KKwkgKgorCSAqIFRPRE86 IGRvIHdlIGhhdmUgdG8gbG9jayB0aGUgdGFibGVzIHRoZW1zZWx2ZXMgdG8gYXZvaWQgcmFj ZXM/CisJICovCisJU2NhbktleUluaXQoJmtleSwKKwkJCQlBbnVtX3BnX2luaGVyaXRzX2lu aHJlbGlkLAorCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQlPYmpl Y3RJZEdldERhdHVtKHRhYmxlb2lkKSk7CisKKwlzY2FuID0gc3lzdGFibGVfYmVnaW5zY2Fu KGluaFJlbCwgSW5oZXJpdHNSZWxpZFNlcW5vSW5kZXhJZCwgdHJ1ZSwKKwkJCQkJCQkgIE5V TEwsIDEsICZrZXkpOworCXR1cGxlID0gc3lzdGFibGVfZ2V0bmV4dChzY2FuKTsKKwlpZiAo SGVhcFR1cGxlSXNWYWxpZCh0dXBsZSkpCisJeworCQlmb3JtID0gKEZvcm1fcGdfaW5oZXJp dHMpIEdFVFNUUlVDVCh0dXBsZSk7CisJCXBhcmVudCA9IGZvcm0tPmluaHBhcmVudDsKKwkJ Y29weVR1cGxlID0gaGVhcF9jb3B5dHVwbGUodHVwbGUpOworCisJCWlmIChIZWFwVHVwbGVJ c1ZhbGlkKHN5c3RhYmxlX2dldG5leHQoc2NhbikpKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJ CQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFURSks CisJCQkJCSBlcnJtc2coInRhYmxlIFwiJXNcIiBpbmhlcml0cyBmcm9tIG11bHRpcGxlIHRh YmxlcyIsCisJCQkJCQkJdGFibGVuYW1lKSkpOworCX0KKworCWlmIChwYXJlbnQgIT0gcm9v dG9pZCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX09CSkVDVF9O T1RfSU5fUFJFUkVRVUlTSVRFX1NUQVRFKSwKKwkJCQkgZXJybXNnKCJ0YWJsZSBcIiVzXCIg ZG9lcyBub3QgaW5oZXJpdCBmcm9tIGludGVuZGVkIHJvb3QgdGFibGUgXCIlc1wiIiwKKwkJ CQkJCXRhYmxlbmFtZSwgcm9vdG5hbWUpKSk7CisKKwlzeXN0YWJsZV9lbmRzY2FuKHNjYW4p OworCisJLyogTWFyayB0aGUgaW5oZXJpdGFuY2UgYXMgYSBsb2dpY2FsIHJvb3QgYnkgc2V0 dGluZyBpdCB0byB6ZXJvLiAqLworCWZvcm0gPSAoRm9ybV9wZ19pbmhlcml0cykgR0VUU1RS VUNUKGNvcHlUdXBsZSk7CisJZm9ybS0+aW5oc2Vxbm8gPSAwOworCisJQ2F0YWxvZ1R1cGxl VXBkYXRlKGluaFJlbCwgJmNvcHlUdXBsZS0+dF9zZWxmLCBjb3B5VHVwbGUpOworCisJaGVh cF9mcmVldHVwbGUoY29weVR1cGxlKTsKKwl0YWJsZV9jbG9zZShpbmhSZWwsIFJvd0V4Y2x1 c2l2ZUxvY2spOworCisJUEdfUkVUVVJOX1ZPSUQoKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2NhdGFsb2cvcGdfcHVibGljYXRpb24uYyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cv cGdfcHVibGljYXRpb24uYwppbmRleCBkZjlhYmYwOWMzLi5mMjNjNzVkMDU4IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMKKysrIGIvc3JjL2Jh Y2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jCkBAIC01MSw2ICs1MSw3IEBAIHR5cGVk ZWYgc3RydWN0CiAJT2lkCQkJcmVsaWQ7CQkJLyogT0lEIG9mIHB1Ymxpc2hlZCB0YWJsZSAq LwogCU9pZAkJCXB1YmlkOwkJCS8qIE9JRCBvZiBwdWJsaWNhdGlvbiB0aGF0IHB1Ymxpc2hl cyB0aGlzCiAJCQkJCQkJCSAqIHRhYmxlLiAqLworCWJvb2wJCXZpYXJvb3Q7CQkvKiBkb2Vz IHB1YmlkIHVzZSBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdD8gKi8KIH0gcHVibGlzaGVk X3JlbDsKIAogc3RhdGljIHZvaWQgcHVibGljYXRpb25fdHJhbnNsYXRlX2NvbHVtbnMoUmVs YXRpb24gdGFyZ2V0cmVsLCBMaXN0ICpjb2x1bW5zLApAQCAtMTgwLDU2ICsxODEsNDYgQEAg cGdfcmVsYXRpb25faXNfcHVibGlzaGFibGUoUEdfRlVOQ1RJT05fQVJHUykKIH0KIAogLyoK LSAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgYW5jZXN0b3IgaXMgaW4gdGhlIGxpc3Qgb2YgcHVi bGlzaGVkIHJlbGF0aW9ucy4KLSAqIE90aGVyd2lzZSwgcmV0dXJucyBmYWxzZS4KLSAqLwot c3RhdGljIGJvb2wKLWlzX2FuY2VzdG9yX21lbWJlcl90YWJsZWluZm9zKE9pZCBhbmNlc3Rv ciwgTGlzdCAqdGFibGVfaW5mb3MpCi17Ci0JTGlzdENlbGwgICAqbGM7Ci0KLQlmb3JlYWNo KGxjLCB0YWJsZV9pbmZvcykKLQl7Ci0JCU9pZAkJCXJlbGlkID0gKChwdWJsaXNoZWRfcmVs ICopIGxmaXJzdChsYykpLT5yZWxpZDsKLQotCQlpZiAocmVsaWQgPT0gYW5jZXN0b3IpCi0J CQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KLS8qCi0gKiBGaWx0 ZXIgb3V0IHRoZSBwYXJ0aXRpb25zIHdob3NlIHBhcmVudCB0YWJsZXMgYXJlIGFsc28gcHJl c2VudCBpbiB0aGUgbGlzdC4KKyAqIEZpbHRlciBvdXQgdGhlIHRhYmxlcyB3aG8gYXJlIGFs cmVhZHkgYmVpbmcgcHVibGlzaGVkIHZpYSBhIGxvZ2ljYWwgcm9vdC4KKyAqCisgKiBJZiB3 ZSBvbmx5IGhhZCBwYXJ0aXRpb25lZCB0YWJsZXMgdG8gY2hlY2ssIHRoaXMgd291bGQgYmUg bXVjaCBlYXNpZXI6IGl0J3MKKyAqIGltcG9zc2libGUgZm9yIGEgcGFydGl0aW9uIHJvb3Qg dG8gYmUgaW4gdGhpcyBsaXN0IHVubGVzcyBwdWJ2aWFyb290PXRydWUgZm9yCisgKiB0aGF0 IHRhYmxlLCBzbyB3ZSB3b3VsZCBqdXN0IGhhdmUgdG8gY2hlY2sgZm9yIHRoZSBleGlzdGVu Y2Ugb2YgYW4gYW5jZXN0b3IsCisgKiBhbmQgaWYgYW55IHdlcmUgZm91bmQgdGhlbiB3ZSdk IGZpbHRlciB0aGUgdGFibGUuCisgKgorICogTG9naWNhbCByb290cyBhZGQgYW5vdGhlciB3 cmlua2xlLCBiZWNhdXNlIGl0J3MgYWNjZXB0YWJsZSBmb3IgYQorICogcHVidmlhcm9vdD1m YWxzZSBwdWJsaWNhdGlvbiB0byBjb250YWluIGEgbG9naWNhbCByb290LiAoTG9naWNhbCBy b290cyBjYW4KKyAqIGNvbnRhaW4gZGF0YSBvZiB0aGVpciBvd24sIHVubGlrZSBwYXJ0aXRp b24gcm9vdHMuKSBJdCdzIGFsc28gcG9zc2libGUgZm9yIGEKKyAqIGxvZ2ljYWwgcm9vdCB0 byBiZSBpbmNsdWRlZCBpbiBhIHB1YnZpYXJvb3QgcHVibGljYXRpb24gd2l0aG91dCBhbnkg b3IgYWxsIG9mCisgKiBpdHMgY2hpbGRyZW4uIFRoaXMgaXMgbm90IHBvc3NpYmxlIGZvciBh IHBhcnRpdGlvbiByb290LCB3aGVyZSBhbGwgb2YgdGhlCisgKiBsZWF2ZXMgYXJlIGltcGxp Y2l0bHkgaW5jbHVkZWQuCisgKgorICogU28sIHRvIGtlZXAgdGhpbmdzIHJlbGF0aXZlbHkg Y29uc2lzdGVudCwgdGhpcyBub3cgdXNlcyB0aGUgc2FtZSBjb2RlIHRoYXQKKyAqIHRoZSBv dXRwdXQgcGx1Z2luIHVzZXMgdG8gZGVjaWRlIHdoaWNoIHJlbGF0aW9uIE9JRCB0byBwdWJs aXNoIGRhdGEgdW5kZXIuIElmCisgKiB0aGUgcHVibGlzaGluZyBPSUQgaXMgbm90IHRoZSBz YW1lIGFzIHRoZSByZWxhdGlvbiBPSUQsIHdlIHJlbW92ZSBpdCBmcm9tCisgKiB0aGlzIGxp c3QuCisgKgorICogWFhYIEFuZCB0aGF0J3MgZXhwZW5zaXZlLgogICovCiBzdGF0aWMgdm9p ZAotZmlsdGVyX3BhcnRpdGlvbnMoTGlzdCAqdGFibGVfaW5mb3MpCitmaWx0ZXJfcHVibGlz aGVkX2Rlc2NlbmRhbnRzKExpc3QgKnRhYmxlX2luZm9zLCBMaXN0ICpwdWJsaWNhdGlvbnMp CiB7CiAJTGlzdENlbGwgICAqbGM7CiAKIAlmb3JlYWNoKGxjLCB0YWJsZV9pbmZvcykKIAl7 Ci0JCWJvb2wJCXNraXAgPSBmYWxzZTsKLQkJTGlzdAkgICAqYW5jZXN0b3JzID0gTklMOwot CQlMaXN0Q2VsbCAgICpsYzI7CiAJCXB1Ymxpc2hlZF9yZWwgKnRhYmxlX2luZm8gPSAocHVi bGlzaGVkX3JlbCAqKSBsZmlyc3QobGMpOworCQlPaWQJCQlwdWJsaXNoX2FzX3JlbGlkOwor CQlMaXN0CSAgICpyZWxfcHVibGljYXRpb25zOwogCi0JCWlmIChnZXRfcmVsX3JlbGlzcGFy dGl0aW9uKHRhYmxlX2luZm8tPnJlbGlkKSkKLQkJCWFuY2VzdG9ycyA9IGdldF9wYXJ0aXRp b25fYW5jZXN0b3JzKHRhYmxlX2luZm8tPnJlbGlkKTsKLQotCQlmb3JlYWNoKGxjMiwgYW5j ZXN0b3JzKQotCQl7Ci0JCQlPaWQJCQlhbmNlc3RvciA9IGxmaXJzdF9vaWQobGMyKTsKLQot CQkJaWYgKGlzX2FuY2VzdG9yX21lbWJlcl90YWJsZWluZm9zKGFuY2VzdG9yLCB0YWJsZV9p bmZvcykpCi0JCQl7Ci0JCQkJc2tpcCA9IHRydWU7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0K KwkJcmVsX3B1YmxpY2F0aW9ucyA9CisJCQlwcm9jZXNzX3JlbGF0aW9uX3B1YmxpY2F0aW9u cyh0YWJsZV9pbmZvLT5yZWxpZCwgcHVibGljYXRpb25zLCBOVUxMLAorCQkJCQkJCQkJCSAg JnB1Ymxpc2hfYXNfcmVsaWQpOwogCi0JCWlmIChza2lwKQorCQlpZiAocHVibGlzaF9hc19y ZWxpZCAhPSB0YWJsZV9pbmZvLT5yZWxpZCkKIAkJCXRhYmxlX2luZm9zID0gZm9yZWFjaF9k ZWxldGVfY3VycmVudCh0YWJsZV9pbmZvcywgbGMpOworCisJCWxpc3RfZnJlZShyZWxfcHVi bGljYXRpb25zKTsKIAl9CiB9CiAKQEAgLTgwNSwxMSArNzk2LDE1IEBAIExpc3QgKgogR2V0 QWxsVGFibGVzUHVibGljYXRpb25SZWxhdGlvbnMoYm9vbCBwdWJ2aWFyb290KQogewogCVJl bGF0aW9uCWNsYXNzUmVsOworCVJlbGF0aW9uCWluaFJlbDsKIAlTY2FuS2V5RGF0YSBrZXlb MV07CiAJVGFibGVTY2FuRGVzYyBzY2FuOwogCUhlYXBUdXBsZQl0dXBsZTsKIAlMaXN0CSAg ICpyZXN1bHQgPSBOSUw7CiAKKwkvKiBUT0RPOiBpcyB0aGVyZSBhIHJlcXVpcmVkIG9yZGVy IHRvIGFjcXVpcmUgdGhlc2UgbG9ja3M/ICovCisJaWYgKHB1YnZpYXJvb3QpCisJCWluaFJl bCA9IHRhYmxlX29wZW4oSW5oZXJpdHNSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOwog CWNsYXNzUmVsID0gdGFibGVfb3BlbihSZWxhdGlvblJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJl TG9jayk7CiAKIAlTY2FuS2V5SW5pdCgma2V5WzBdLApAQCAtODI1LDcgKzgyMCw4IEBAIEdl dEFsbFRhYmxlc1B1YmxpY2F0aW9uUmVsYXRpb25zKGJvb2wgcHVidmlhcm9vdCkKIAkJT2lk CQkJcmVsaWQgPSByZWxGb3JtLT5vaWQ7CiAKIAkJaWYgKGlzX3B1Ymxpc2hhYmxlX2NsYXNz KHJlbGlkLCByZWxGb3JtKSAmJgotCQkJIShyZWxGb3JtLT5yZWxpc3BhcnRpdGlvbiAmJiBw dWJ2aWFyb290KSkKKwkJCSEocmVsRm9ybS0+cmVsaXNwYXJ0aXRpb24gJiYgcHVidmlhcm9v dCkgJiYKKwkJCSEocHVidmlhcm9vdCAmJiBoYXNfbG9naWNhbF9wYXJlbnQoaW5oUmVsLCBy ZWxpZCkpKQogCQkJcmVzdWx0ID0gbGFwcGVuZF9vaWQocmVzdWx0LCByZWxpZCk7CiAJfQog CkBAIC04NTQsNiArODUwLDkgQEAgR2V0QWxsVGFibGVzUHVibGljYXRpb25SZWxhdGlvbnMo Ym9vbCBwdWJ2aWFyb290KQogCX0KIAogCXRhYmxlX2Nsb3NlKGNsYXNzUmVsLCBBY2Nlc3NT aGFyZUxvY2spOworCWlmIChwdWJ2aWFyb290KQorCQl0YWJsZV9jbG9zZShpbmhSZWwsIEFj Y2Vzc1NoYXJlTG9jayk7CisKIAlyZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xMDcwLDYgKzEw NjksNyBAQCBwZ19nZXRfcHVibGljYXRpb25fdGFibGVzKFBHX0ZVTkNUSU9OX0FSR1MpCiAJ CWludAkJCW5lbGVtcywKIAkJCQkJaTsKIAkJYm9vbAkJdmlhcm9vdCA9IGZhbHNlOworCQlM aXN0CSAgICpwdWJsaWNhdGlvbnMgPSBOSUw7CiAKIAkJLyogY3JlYXRlIGEgZnVuY3Rpb24g Y29udGV4dCBmb3IgY3Jvc3MtY2FsbCBwZXJzaXN0ZW5jZSAqLwogCQlmdW5jY3R4ID0gU1JG X0ZJUlNUQ0FMTF9JTklUKCk7CkBAIC0xMDkzLDYgKzEwOTMsNyBAQCBwZ19nZXRfcHVibGlj YXRpb25fdGFibGVzKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCQlMaXN0Q2VsbCAgICpsYzsKIAog CQkJcHViX2VsZW0gPSBHZXRQdWJsaWNhdGlvbkJ5TmFtZShUZXh0RGF0dW1HZXRDU3RyaW5n KGVsZW1zW2ldKSwgZmFsc2UpOworCQkJcHVibGljYXRpb25zID0gbGFwcGVuZChwdWJsaWNh dGlvbnMsIHB1Yl9lbGVtKTsKIAogCQkJLyoKIAkJCSAqIFB1YmxpY2F0aW9ucyBzdXBwb3J0 IHBhcnRpdGlvbmVkIHRhYmxlcy4gSWYKQEAgLTExMzIsNiArMTEzMyw3IEBAIHBnX2dldF9w dWJsaWNhdGlvbl90YWJsZXMoUEdfRlVOQ1RJT05fQVJHUykKIAogCQkJCXRhYmxlX2luZm8t PnJlbGlkID0gbGZpcnN0X29pZChsYyk7CiAJCQkJdGFibGVfaW5mby0+cHViaWQgPSBwdWJf ZWxlbS0+b2lkOworCQkJCXRhYmxlX2luZm8tPnZpYXJvb3QgPSBwdWJfZWxlbS0+cHVidmlh cm9vdDsKIAkJCQl0YWJsZV9pbmZvcyA9IGxhcHBlbmQodGFibGVfaW5mb3MsIHRhYmxlX2lu Zm8pOwogCQkJfQogCkBAIC0xMTQxLDE1ICsxMTQzLDE0IEBAIHBnX2dldF9wdWJsaWNhdGlv bl90YWJsZXMoUEdfRlVOQ1RJT05fQVJHUykKIAkJfQogCiAJCS8qCi0JCSAqIElmIHRoZSBw dWJsaWNhdGlvbiBwdWJsaXNoZXMgcGFydGl0aW9uIGNoYW5nZXMgdmlhIHRoZWlyIHJlc3Bl Y3RpdmUKLQkJICogcm9vdCBwYXJ0aXRpb25lZCB0YWJsZXMsIHdlIG11c3QgZXhjbHVkZSBw YXJ0aXRpb25zIGluIGZhdm9yIG9mCi0JCSAqIGluY2x1ZGluZyB0aGUgcm9vdCBwYXJ0aXRp b25lZCB0YWJsZXMuIE90aGVyd2lzZSwgdGhlIGZ1bmN0aW9uCi0JCSAqIGNvdWxkIHJldHVy biBib3RoIHRoZSBjaGlsZCBhbmQgcGFyZW50IHRhYmxlcyB3aGljaCBjb3VsZCBjYXVzZQot CQkgKiBkYXRhIG9mIHRoZSBjaGlsZCB0YWJsZSB0byBiZSBkb3VibGUtcHVibGlzaGVkIG9u IHRoZSBzdWJzY3JpYmVyCi0JCSAqIHNpZGUuCisJCSAqIElmIHRoZSBwdWJsaWNhdGlvbiBw dWJsaXNoZXMgdGFibGUgY2hhbmdlcyB2aWEgdGhlaXIgcmVzcGVjdGl2ZQorCQkgKiBsb2dp Y2FsIHJvb3QgdGFibGVzLCB3ZSBtdXN0IGV4Y2x1ZGUgcGFydGl0aW9ucyBpbiBmYXZvciBv ZgorCQkgKiBpbmNsdWRpbmcgdGhlIHJvb3QgdGFibGVzLiBPdGhlcndpc2UsIHRoZSBmdW5j dGlvbiBjb3VsZCByZXR1cm4KKwkJICogYm90aCB0aGUgY2hpbGQgYW5kIHBhcmVudCB0YWJs ZXMgd2hpY2ggY291bGQgY2F1c2UgZGF0YSBvZiB0aGUKKwkJICogY2hpbGQgdGFibGUgdG8g YmUgZG91YmxlLXB1Ymxpc2hlZCBvbiB0aGUgc3Vic2NyaWJlciBzaWRlLgogCQkgKi8KIAkJ aWYgKHZpYXJvb3QpCi0JCQlmaWx0ZXJfcGFydGl0aW9ucyh0YWJsZV9pbmZvcyk7CisJCQlm aWx0ZXJfcHVibGlzaGVkX2Rlc2NlbmRhbnRzKHRhYmxlX2luZm9zLCBwdWJsaWNhdGlvbnMp OwogCiAJCS8qIENvbnN0cnVjdCBhIHR1cGxlIGRlc2NyaXB0b3IgZm9yIHRoZSByZXN1bHQg cm93cy4gKi8KIAkJdHVwZGVzYyA9IENyZWF0ZVRlbXBsYXRlVHVwbGVEZXNjKE5VTV9QVUJM SUNBVElPTl9UQUJMRVNfRUxFTSk7CkBAIC0xMTY1LDYgKzExNjYsOCBAQCBwZ19nZXRfcHVi bGljYXRpb25fdGFibGVzKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCWZ1bmNjdHgtPnR1cGxlX2Rl c2MgPSBCbGVzc1R1cGxlRGVzYyh0dXBkZXNjKTsKIAkJZnVuY2N0eC0+dXNlcl9mY3R4ID0g KHZvaWQgKikgdGFibGVfaW5mb3M7CiAKKwkJbGlzdF9mcmVlKHB1YmxpY2F0aW9ucyk7CisK IAkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOwogCX0KIApAQCAtMTI2MCw2 ICsxMjYzLDExOCBAQCBwZ19nZXRfcHVibGljYXRpb25fdGFibGVzKFBHX0ZVTkNUSU9OX0FS R1MpCiAJU1JGX1JFVFVSTl9ET05FKGZ1bmNjdHgpOwogfQogCisvKgorICogUmV0dXJucyBh IGxpc3Qgb2YgdGFibGVzIHRoYXQgc2hvdWxkIGJlIGNvcGllZCBkdXJpbmcgaW5pdGlhbCBz eW5jIGZvciB0aGUKKyAqIGdpdmVuIHJvb3QgdGFibGUgYW5kIHB1YmxpY2F0aW9ucy4KKyAq CisgKiBUaGUgb25seSB0aW1lIHRoaXMgbGlzdCBjb25zaXN0cyBvZiBhbnl0aGluZyBtb3Jl IHRoYW4gdGhlIHRhYmxlIGl0c2VsZiBpcworICogd2hlbiBhIHB1YmxpY2F0aW9uJ3MgcHVi bGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgaXMgc2V0IHRvIHRydWUgYW5kIHRoZSB0YWJsZQor ICogaGFzIGluaGVyaXRlZCBjaGlsZCB0YWJsZXMgaW4gdGhlIHB1YmxpY2F0aW9ucyB0aGF0 IGhhdmUgYmVlbiBtYXJrZWQgd2l0aAorICogcGdfc2V0X2xvZ2ljYWxfcm9vdCgpLgorICov CitEYXR1bQorcGdfZ2V0X3B1YmxpY2F0aW9uX3JlbHNfdG9fc3luYyhQR19GVU5DVElPTl9B UkdTKQoreworCUZ1bmNDYWxsQ29udGV4dCAqZnVuY2N0eDsKKwlMaXN0CSAgICp0YWJsZXMg PSBOSUw7CisKKwkvKiBzdHVmZiBkb25lIG9ubHkgb24gdGhlIGZpcnN0IGNhbGwgb2YgdGhl IGZ1bmN0aW9uICovCisJaWYgKFNSRl9JU19GSVJTVENBTEwoKSkKKwl7CisJCU9pZAkJCXJv b3RpZCA9IFBHX0dFVEFSR19PSUQoMCk7CisJCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsK KwkJQXJyYXlUeXBlICAqYXJyOworCQlEYXR1bQkgICAqZWxlbXM7CisJCWludAkJCW5lbGVt cywKKwkJCQkJaTsKKworCQkvKiBjcmVhdGUgYSBmdW5jdGlvbiBjb250ZXh0IGZvciBjcm9z cy1jYWxsIHBlcnNpc3RlbmNlICovCisJCWZ1bmNjdHggPSBTUkZfRklSU1RDQUxMX0lOSVQo KTsKKworCQkvKiBzd2l0Y2ggdG8gbWVtb3J5IGNvbnRleHQgYXBwcm9wcmlhdGUgZm9yIG11 bHRpcGxlIGZ1bmN0aW9uIGNhbGxzICovCisJCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0 U3dpdGNoVG8oZnVuY2N0eC0+bXVsdGlfY2FsbF9tZW1vcnlfY3R4KTsKKworCQkvKgorCQkg KiBEZWNvbnN0cnVjdCB0aGUgcGFyYW1ldGVyIGludG8gZWxlbWVudHMgd2hlcmUgZWFjaCBl bGVtZW50IGlzIGEKKwkJICogcHVibGljYXRpb24gbmFtZS4KKwkJICovCisJCWFyciA9IFBH X0dFVEFSR19BUlJBWVRZUEVfUCgxKTsKKwkJZGVjb25zdHJ1Y3RfYXJyYXkoYXJyLCBURVhU T0lELCAtMSwgZmFsc2UsIFRZUEFMSUdOX0lOVCwKKwkJCQkJCSAgJmVsZW1zLCBOVUxMLCAm bmVsZW1zKTsKKworCQkvKiBHZXQgT2lkcyBvZiB0YWJsZXMgZnJvbSBlYWNoIHB1YmxpY2F0 aW9uLiAqLworCQlmb3IgKGkgPSAwOyBpIDwgbmVsZW1zOyBpKyspCisJCXsKKwkJCWNoYXIJ ICAgKnB1Ym5hbWUgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKGVsZW1zW2ldKTsKKwkJCVB1Ymxp Y2F0aW9uICpwdWJsaWNhdGlvbiA9IEdldFB1YmxpY2F0aW9uQnlOYW1lKHB1Ym5hbWUsIGZh bHNlKTsKKwkJCUxpc3QJICAgKnB1Yl90YWJsZXMgPSBOSUw7CisKKwkJCS8qIFRPRE86IGRv IHRoZSB0YWJsZXMgaW4gdGhpcyBsaXN0IG5lZWQgdG8gYmUgbG9ja2VkPyAqLworCQkJaWYg KHB1YmxpY2F0aW9uLT5wdWJ2aWFyb290KQorCQkJCXB1Yl90YWJsZXMgPSBmaW5kX2FsbF9s b2dpY2FsX2luaGVyaXRvcnMocm9vdGlkKTsKKwkJCWVsc2UKKwkJCQlwdWJfdGFibGVzID0g bGlzdF9tYWtlMV9vaWQocm9vdGlkKTsKKworCQkJaWYgKCFwdWJsaWNhdGlvbi0+YWxsdGFi bGVzKQorCQkJeworCQkJCUxpc3QJICAgKnJlbGlkczsKKwkJCQlMaXN0CSAgICpzY2hlbWFy ZWxpZHM7CisJCQkJTGlzdAkgICAqcHVibGlzaGVkOworCQkJCUxpc3RDZWxsICAgKmNlbGw7 CisKKwkJCQlyZWxpZHMgPSBHZXRQdWJsaWNhdGlvblJlbGF0aW9ucyhwdWJsaWNhdGlvbi0+ b2lkLAorCQkJCQkJCQkJCQkJIHB1YmxpY2F0aW9uLT5wdWJ2aWFyb290ID8KKwkJCQkJCQkJ CQkJCSBQVUJMSUNBVElPTl9QQVJUX1JPT1QgOgorCQkJCQkJCQkJCQkJIFBVQkxJQ0FUSU9O X1BBUlRfQUxMKTsKKwkJCQlzY2hlbWFyZWxpZHMgPSBHZXRBbGxTY2hlbWFQdWJsaWNhdGlv blJlbGF0aW9ucyhwdWJsaWNhdGlvbi0+b2lkLAorCQkJCQkJCQkJCQkJCQkJCXB1YmxpY2F0 aW9uLT5wdWJ2aWFyb290ID8KKwkJCQkJCQkJCQkJCQkJCQlQVUJMSUNBVElPTl9QQVJUX1JP T1QgOgorCQkJCQkJCQkJCQkJCQkJCVBVQkxJQ0FUSU9OX1BBUlRfTEVBRik7CisJCQkJcHVi bGlzaGVkID0gbGlzdF9jb25jYXRfdW5pcXVlX29pZChyZWxpZHMsIHNjaGVtYXJlbGlkcyk7 CisKKwkJCQkvKgorCQkJCSAqIEZpcnN0IHdlIGhhdmUgdG8gY2hlY2sgdG8gbWFrZSBzdXJl IHRoZSByb290IHRhYmxlIGlzCisJCQkJICogYWN0dWFsbHkgcGFydCBvZiB0aGUgcHVibGlj YXRpb247IGlmIG5vdCwgbm9uZSBvZiBpdHMKKwkJCQkgKiBkZXNjZW5kYW50cycgY29udGVu dHMgYmVsb25nIHRvIGl0LgorCQkJCSAqLworCQkJCWlmICghbGlzdF9tZW1iZXJfb2lkKHB1 Ymxpc2hlZCwgcm9vdGlkKSkKKwkJCQkJY29udGludWU7CisKKwkJCQkvKgorCQkJCSAqIE5v dyBmaWx0ZXIgb3V0IGFueSBkZXNjZW5kYW50cyB0aGF0IGFyZW4ndCBwYXJ0IG9mIHRoaXMK KwkJCQkgKiBwYXJ0aWN1bGFyIHB1YmxpY2F0aW9uLgorCQkJCSAqLworCQkJCWZvcmVhY2go Y2VsbCwgcHViX3RhYmxlcykKKwkJCQl7CisJCQkJCU9pZAkJY3VycmVudCA9IGxmaXJzdF9v aWQoY2VsbCk7CisKKwkJCQkJaWYgKCFsaXN0X21lbWJlcl9vaWQocHVibGlzaGVkLCBjdXJy ZW50KSkKKwkJCQkJCXB1Yl90YWJsZXMgPSBmb3JlYWNoX2RlbGV0ZV9jdXJyZW50KHB1Yl90 YWJsZXMsIGNlbGwpOworCQkJCX0KKwkJCX0KKworCQkJdGFibGVzID0gbGlzdF9jb25jYXRf dW5pcXVlX29pZCh0YWJsZXMsIHB1Yl90YWJsZXMpOworCQl9CisKKwkJZnVuY2N0eC0+dXNl cl9mY3R4ID0gKHZvaWQgKikgdGFibGVzOworCisJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhv bGRjb250ZXh0KTsKKwl9CisKKwkvKiBzdHVmZiBkb25lIG9uIGV2ZXJ5IGNhbGwgb2YgdGhl IGZ1bmN0aW9uICovCisJZnVuY2N0eCA9IFNSRl9QRVJDQUxMX1NFVFVQKCk7CisJdGFibGVz ID0gKExpc3QgKikgZnVuY2N0eC0+dXNlcl9mY3R4OworCisJaWYgKGZ1bmNjdHgtPmNhbGxf Y250ciA8IGxpc3RfbGVuZ3RoKHRhYmxlcykpCisJeworCQlPaWQJCQlyZWxpZCA9IGxpc3Rf bnRoX29pZCh0YWJsZXMsIGZ1bmNjdHgtPmNhbGxfY250cik7CisKKwkJU1JGX1JFVFVSTl9O RVhUKGZ1bmNjdHgsIE9iamVjdElkR2V0RGF0dW0ocmVsaWQpKTsKKwl9CisKKwlTUkZfUkVU VVJOX0RPTkUoZnVuY2N0eCk7Cit9CisKIExpc3QgKgogcHJvY2Vzc19yZWxhdGlvbl9wdWJs aWNhdGlvbnMoT2lkIHJlbGlkLCBjb25zdCBMaXN0ICpwdWJsaWNhdGlvbnMsCiAJCQkJCQkJ ICBQdWJsaWNhdGlvbkFjdGlvbnMgKnB1YmFjdGlvbnMsCkBAIC0xMjc5LDggKzEzOTQsNyBA QCBwcm9jZXNzX3JlbGF0aW9uX3B1YmxpY2F0aW9ucyhPaWQgcmVsaWQsIGNvbnN0IExpc3Qg KnB1YmxpY2F0aW9ucywKIAlib29sCQlhbV9wYXJ0aXRpb24gPSBnZXRfcmVsX3JlbGlzcGFy dGl0aW9uKHJlbGlkKTsKIAljaGFyCQlyZWxraW5kID0gZ2V0X3JlbF9yZWxraW5kKHJlbGlk KTsKIAlMaXN0CSAgICpyZWxfcHVibGljYXRpb25zID0gTklMOwotCi0JKnB1Ymxpc2hfYXNf cmVsaWQgPSByZWxpZDsKKwlPaWQJCQlwdWJsaXNoX2NhbmRpZGF0ZSA9IHJlbGlkOwogCiAJ Zm9yZWFjaChsYywgcHVibGljYXRpb25zKQogCXsKQEAgLTEyOTYsNTUgKzE0MTAsNTcgQEAg cHJvY2Vzc19yZWxhdGlvbl9wdWJsaWNhdGlvbnMoT2lkIHJlbGlkLCBjb25zdCBMaXN0ICpw dWJsaWNhdGlvbnMsCiAJCWludAkJCWFuY2VzdG9yX2xldmVsID0gMDsKIAogCQkvKgotCQkg KiBJZiB0aGlzIGlzIGEgRk9SIEFMTCBUQUJMRVMgcHVibGljYXRpb24sIHBpY2sgdGhlIHBh cnRpdGlvbgorCQkgKiBJZiB0aGlzIGlzIGEgRk9SIEFMTCBUQUJMRVMgcHVibGljYXRpb24s IHBpY2sgdGhlIGxvZ2ljYWwKIAkJICogcm9vdCBhbmQgc2V0IHRoZSBhbmNlc3RvciBsZXZl bCBhY2NvcmRpbmdseS4KIAkJICovCiAJCWlmIChwdWItPmFsbHRhYmxlcykKIAkJewogCQkJ cHVibGlzaCA9IHRydWU7Ci0JCQlpZiAocHViLT5wdWJ2aWFyb290ICYmIGFtX3BhcnRpdGlv bikKKwkJCWlmIChwdWItPnB1YnZpYXJvb3QpCiAJCQl7Ci0JCQkJTGlzdAkgICAqYW5jZXN0 b3JzID0gZ2V0X3BhcnRpdGlvbl9hbmNlc3RvcnMocmVsaWQpOworCQkJCUxpc3QJICAgKmFu Y2VzdG9yczsKIAotCQkJCXB1Yl9yZWxpZCA9IGxsYXN0X29pZChhbmNlc3RvcnMpOwotCQkJ CWFuY2VzdG9yX2xldmVsID0gbGlzdF9sZW5ndGgoYW5jZXN0b3JzKTsKKwkJCQlhbmNlc3Rv cnMgPSBnZXRfbG9naWNhbF9hbmNlc3RvcnMocmVsaWQsIGFtX3BhcnRpdGlvbik7CisJCQkJ aWYgKGFuY2VzdG9ycyAhPSBOSUwpCisJCQkJeworCQkJCQlwdWJfcmVsaWQgPSBsbGFzdF9v aWQoYW5jZXN0b3JzKTsKKwkJCQkJYW5jZXN0b3JfbGV2ZWwgPSBsaXN0X2xlbmd0aChhbmNl c3RvcnMpOworCQkJCX0KIAkJCX0KIAkJfQogCiAJCWlmICghcHVibGlzaCkKIAkJewogCQkJ Ym9vbAkJYW5jZXN0b3JfcHVibGlzaGVkID0gZmFsc2U7CisJCQlPaWQJCQlhbmNlc3RvcjsK KwkJCWludAkJCWxldmVsOworCQkJTGlzdAkgICAqYW5jZXN0b3JzOwogCiAJCQkvKgotCQkJ ICogRm9yIGEgcGFydGl0aW9uLCBjaGVjayBpZiBhbnkgb2YgdGhlIGFuY2VzdG9ycyBhcmUK LQkJCSAqIHB1Ymxpc2hlZC4gIElmIHNvLCBub3RlIGRvd24gdGhlIHRvcG1vc3QgYW5jZXN0 b3IgdGhhdCBpcworCQkJICogQ2hlY2sgaWYgYW55IG9mIHRoZSBsb2dpY2FsIGFuY2VzdG9y cyAodGhhdCBpcywgcGFydGl0aW9uCisJCQkgKiBwYXJlbnRzIG9yIHRhYmxlcyBtYXJrZWQg d2l0aCBwZ19zZXRfbG9naWNhbF9yb290KCkpIGFyZQorCQkJICogcHVibGlzaGVkLiBJZiBz bywgbm90ZSBkb3duIHRoZSB0b3Btb3N0IGFuY2VzdG9yIHRoYXQgaXMKIAkJCSAqIHB1Ymxp c2hlZCB2aWEgdGhpcyBwdWJsaWNhdGlvbiwgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIHRoZQot CQkJICogcmVsYXRpb24gdmlhIHdoaWNoIHRvIHB1Ymxpc2ggdGhlIHBhcnRpdGlvbidzIGNo YW5nZXMuCisJCQkgKiByZWxhdGlvbiB2aWEgd2hpY2ggdG8gcHVibGlzaCB0aGlzIHRhYmxl J3MgY2hhbmdlcy4KIAkJCSAqLwotCQkJaWYgKGFtX3BhcnRpdGlvbikKLQkJCXsKLQkJCQlP aWQJCQlhbmNlc3RvcjsKLQkJCQlpbnQJCQlsZXZlbDsKLQkJCQlMaXN0CSAgICphbmNlc3Rv cnMgPSBnZXRfcGFydGl0aW9uX2FuY2VzdG9ycyhyZWxpZCk7Ci0KLQkJCQlhbmNlc3RvciA9 IEdldFRvcE1vc3RBbmNlc3RvckluUHVibGljYXRpb24ocHViLT5vaWQsCi0JCQkJCQkJCQkJ CQkJCSAgIGFuY2VzdG9ycywKLQkJCQkJCQkJCQkJCQkJICAgJmxldmVsKTsKKwkJCWFuY2Vz dG9ycyA9IGdldF9sb2dpY2FsX2FuY2VzdG9ycyhyZWxpZCwgYW1fcGFydGl0aW9uKTsKKwkJ CWFuY2VzdG9yID0gR2V0VG9wTW9zdEFuY2VzdG9ySW5QdWJsaWNhdGlvbihwdWItPm9pZCwK KwkJCQkJCQkJCQkJCQkgICBhbmNlc3RvcnMsCisJCQkJCQkJCQkJCQkJICAgJmxldmVsKTsK IAotCQkJCWlmIChhbmNlc3RvciAhPSBJbnZhbGlkT2lkKQorCQkJaWYgKGFuY2VzdG9yICE9 IEludmFsaWRPaWQpCisJCQl7CisJCQkJYW5jZXN0b3JfcHVibGlzaGVkID0gdHJ1ZTsKKwkJ CQlpZiAocHViLT5wdWJ2aWFyb290KQogCQkJCXsKLQkJCQkJYW5jZXN0b3JfcHVibGlzaGVk ID0gdHJ1ZTsKLQkJCQkJaWYgKHB1Yi0+cHVidmlhcm9vdCkKLQkJCQkJewotCQkJCQkJcHVi X3JlbGlkID0gYW5jZXN0b3I7Ci0JCQkJCQlhbmNlc3Rvcl9sZXZlbCA9IGxldmVsOwotCQkJ CQl9CisJCQkJCXB1Yl9yZWxpZCA9IGFuY2VzdG9yOworCQkJCQlhbmNlc3Rvcl9sZXZlbCA9 IGxldmVsOwogCQkJCX0KIAkJCX0KIAogCQkJaWYgKGxpc3RfbWVtYmVyX29pZChwdWJpZHMs IHB1Yi0+b2lkKSB8fAogCQkJCWxpc3RfbWVtYmVyX29pZChzY2hlbWFQdWJpZHMsIHB1Yi0+ b2lkKSB8fAotCQkJCWFuY2VzdG9yX3B1Ymxpc2hlZCkKKwkJCQkoYW1fcGFydGl0aW9uICYm IGFuY2VzdG9yX3B1Ymxpc2hlZCkpCiAJCQkJcHVibGlzaCA9IHRydWU7CiAJCX0KIApAQCAt MTM1OSwxMCArMTQ3NSwxMyBAQCBwcm9jZXNzX3JlbGF0aW9uX3B1YmxpY2F0aW9ucyhPaWQg cmVsaWQsIGNvbnN0IExpc3QgKnB1YmxpY2F0aW9ucywKIAkJaWYgKHB1Ymxpc2ggJiYKIAkJ CShyZWxraW5kICE9IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUgfHwgcHViLT5wdWJ2aWFy b290KSkKIAkJewotCQkJcHViYWN0aW9ucy0+cHViaW5zZXJ0IHw9IHB1Yi0+cHViYWN0aW9u cy5wdWJpbnNlcnQ7Ci0JCQlwdWJhY3Rpb25zLT5wdWJ1cGRhdGUgfD0gcHViLT5wdWJhY3Rp b25zLnB1YnVwZGF0ZTsKLQkJCXB1YmFjdGlvbnMtPnB1YmRlbGV0ZSB8PSBwdWItPnB1YmFj dGlvbnMucHViZGVsZXRlOwotCQkJcHViYWN0aW9ucy0+cHVidHJ1bmNhdGUgfD0gcHViLT5w dWJhY3Rpb25zLnB1YnRydW5jYXRlOworCQkJaWYgKHB1YmFjdGlvbnMpCisJCQl7CisJCQkJ cHViYWN0aW9ucy0+cHViaW5zZXJ0IHw9IHB1Yi0+cHViYWN0aW9ucy5wdWJpbnNlcnQ7CisJ CQkJcHViYWN0aW9ucy0+cHVidXBkYXRlIHw9IHB1Yi0+cHViYWN0aW9ucy5wdWJ1cGRhdGU7 CisJCQkJcHViYWN0aW9ucy0+cHViZGVsZXRlIHw9IHB1Yi0+cHViYWN0aW9ucy5wdWJkZWxl dGU7CisJCQkJcHViYWN0aW9ucy0+cHVidHJ1bmNhdGUgfD0gcHViLT5wdWJhY3Rpb25zLnB1 YnRydW5jYXRlOworCQkJfQogCiAJCQkvKgogCQkJICogV2Ugd2FudCB0byBwdWJsaXNoIHRo ZSBjaGFuZ2VzIGFzIHRoZSB0b3AtbW9zdCBhbmNlc3RvcgpAQCAtMTM4MSw3ICsxNTAwLDcg QEAgcHJvY2Vzc19yZWxhdGlvbl9wdWJsaWNhdGlvbnMoT2lkIHJlbGlkLCBjb25zdCBMaXN0 ICpwdWJsaWNhdGlvbnMsCiAJCQkgKi8KIAkJCWlmIChwdWJsaXNoX2FuY2VzdG9yX2xldmVs IDwgYW5jZXN0b3JfbGV2ZWwpCiAJCQl7Ci0JCQkJKnB1Ymxpc2hfYXNfcmVsaWQgPSBwdWJf cmVsaWQ7CisJCQkJcHVibGlzaF9jYW5kaWRhdGUgPSBwdWJfcmVsaWQ7CiAJCQkJcHVibGlz aF9hbmNlc3Rvcl9sZXZlbCA9IGFuY2VzdG9yX2xldmVsOwogCiAJCQkJLyogcmVzZXQgdGhl IHB1YmxpY2F0aW9uIGxpc3QgZm9yIHRoaXMgcmVsYXRpb24gKi8KQEAgLTEzOTAsNyArMTUw OSw3IEBAIHByb2Nlc3NfcmVsYXRpb25fcHVibGljYXRpb25zKE9pZCByZWxpZCwgY29uc3Qg TGlzdCAqcHVibGljYXRpb25zLAogCQkJZWxzZQogCQkJewogCQkJCS8qIFNhbWUgYW5jZXN0 b3IgbGV2ZWwsIGhhcyB0byBiZSB0aGUgc2FtZSBPSUQuICovCi0JCQkJQXNzZXJ0KCpwdWJs aXNoX2FzX3JlbGlkID09IHB1Yl9yZWxpZCk7CisJCQkJQXNzZXJ0KHB1Ymxpc2hfY2FuZGlk YXRlID09IHB1Yl9yZWxpZCk7CiAJCQl9CiAKIAkJCS8qIFRyYWNrIHB1YmxpY2F0aW9ucyBm b3IgdGhpcyBhbmNlc3Rvci4gKi8KQEAgLTE0MDEsNiArMTUyMCw5IEBAIHByb2Nlc3NfcmVs YXRpb25fcHVibGljYXRpb25zKE9pZCByZWxpZCwgY29uc3QgTGlzdCAqcHVibGljYXRpb25z LAogCWxpc3RfZnJlZShwdWJpZHMpOwogCWxpc3RfZnJlZShzY2hlbWFQdWJpZHMpOwogCisJ aWYgKHB1Ymxpc2hfYXNfcmVsaWQpCisJCSpwdWJsaXNoX2FzX3JlbGlkID0gcHVibGlzaF9j YW5kaWRhdGU7CisKIAlyZXR1cm4gcmVsX3B1YmxpY2F0aW9uczsKIH0KIApkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYwppbmRleCBmNGJhNTcyNjk3Li43ZTIzYmVk NmMwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMu YworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYwpAQCAtMjM4 LDYgKzIzOCw4IEBAIGNvbnRhaW5faW52YWxpZF9yZmNvbHVtbl93YWxrZXIoTm9kZSAqbm9k ZSwgcmZfY29udGV4dCAqY29udGV4dCkKIAkJICogcGFyZW50IHRhYmxlLCBidXQgdGhlIGJp dG1hcCBjb250YWlucyB0aGUgcmVwbGljYSBpZGVudGl0eQogCQkgKiBpbmZvcm1hdGlvbiBv ZiB0aGUgY2hpbGQgdGFibGUuIFNvLCBnZXQgdGhlIGNvbHVtbiBudW1iZXIgb2YgdGhlCiAJ CSAqIGNoaWxkIHRhYmxlIGFzIHBhcmVudCBhbmQgY2hpbGQgY29sdW1uIG9yZGVyIGNvdWxk IGJlIGRpZmZlcmVudC4KKwkJICoKKwkJICogVE9ETzogaXMgdGhpcyBhcHBsaWNhYmxlIHRv IHBnX3NldF9sb2dpY2FsX3Jvb3QoKT8KIAkJICovCiAJCWlmIChjb250ZXh0LT5wdWJ2aWFy b290KQogCQl7CkBAIC0yODYsNiArMjg4LDggQEAgcHViX3JmX2NvbnRhaW5zX2ludmFsaWRf Y29sdW1uKE9pZCBwdWJpZCwgUmVsYXRpb24gcmVsYXRpb24sIExpc3QgKmFuY2VzdG9ycywK IAkgKgogCSAqIE5vdGUgdGhhdCBldmVuIHRob3VnaCB0aGUgcm93IGZpbHRlciB1c2VkIGlz IGZvciBhbiBhbmNlc3RvciwgdGhlCiAJICogUkVQTElDQSBJREVOVElUWSB1c2VkIHdpbGwg YmUgZm9yIHRoZSBhY3R1YWwgY2hpbGQgdGFibGUuCisJICoKKwkgKiBUT0RPOiBpcyB0aGlz IGFwcGxpY2FibGUgdG8gcGdfc2V0X2xvZ2ljYWxfcm9vdCgpPwogCSAqLwogCWlmIChwdWJ2 aWFyb290ICYmIHJlbGF0aW9uLT5yZF9yZWwtPnJlbGlzcGFydGl0aW9uKQogCXsKQEAgLTMz Niw2ICszNDAsOCBAQCBwdWJfcmZfY29udGFpbnNfaW52YWxpZF9jb2x1bW4oT2lkIHB1Ymlk LCBSZWxhdGlvbiByZWxhdGlvbiwgTGlzdCAqYW5jZXN0b3JzLAogICogdGhlIGNvbHVtbiBs aXN0LgogICoKICAqIFJldHVybnMgdHJ1ZSBpZiBhbnkgcmVwbGljYSBpZGVudGl0eSBjb2x1 bW4gaXMgbm90IGNvdmVyZWQgYnkgY29sdW1uIGxpc3QuCisgKgorICogVE9ETzogcGdfc2V0 X2xvZ2ljYWxfcm9vdCgpPwogICovCiBib29sCiBwdWJfY29sbGlzdF9jb250YWluc19pbnZh bGlkX2NvbHVtbihPaWQgcHViaWQsIFJlbGF0aW9uIHJlbGF0aW9uLCBMaXN0ICphbmNlc3Rv cnMsCkBAIC02MjgsNiArNjM0LDggQEAgVHJhbnNmb3JtUHViV2hlcmVDbGF1c2VzKExpc3Qg KnRhYmxlcywgY29uc3QgY2hhciAqcXVlcnlTdHJpbmcsCiAJCSAqIElmIHRoZSBwdWJsaWNh dGlvbiBkb2Vzbid0IHB1Ymxpc2ggY2hhbmdlcyB2aWEgdGhlIHJvb3QgcGFydGl0aW9uZWQK IAkJICogdGFibGUsIHRoZSBwYXJ0aXRpb24ncyByb3cgZmlsdGVyIHdpbGwgYmUgdXNlZC4g U28gZGlzYWxsb3cgdXNpbmcKIAkJICogV0hFUkUgY2xhdXNlIG9uIHBhcnRpdGlvbmVkIHRh YmxlIGluIHRoaXMgY2FzZS4KKwkJICoKKwkJICogVE9ETzogZGVjaWRlIGhvdyB0aGlzIGlu dGVyYWN0cyB3aXRoIHBnX3NldF9sb2dpY2FsX3Jvb3QKIAkJICovCiAJCWlmICghcHVidmlh cm9vdCAmJgogCQkJcHJpLT5yZWxhdGlvbi0+cmRfcmVsLT5yZWxraW5kID09IFJFTEtJTkRf UEFSVElUSU9ORURfVEFCTEUpCkBAIC03MTUsNiArNzIzLDggQEAgQ2hlY2tQdWJSZWxhdGlv bkNvbHVtbkxpc3QoY2hhciAqcHVibmFtZSwgTGlzdCAqdGFibGVzLAogCQkgKiBJZiB0aGUg cHVibGljYXRpb24gZG9lc24ndCBwdWJsaXNoIGNoYW5nZXMgdmlhIHRoZSByb290IHBhcnRp dGlvbmVkCiAJCSAqIHRhYmxlLCB0aGUgcGFydGl0aW9uJ3MgY29sdW1uIGxpc3Qgd2lsbCBi ZSB1c2VkLiBTbyBkaXNhbGxvdyB1c2luZwogCQkgKiBhIGNvbHVtbiBsaXN0IG9uIHRoZSBw YXJ0aXRpb25lZCB0YWJsZSBpbiB0aGlzIGNhc2UuCisJCSAqCisJCSAqIFRPRE86IGRlY2lk ZSBpZiB0aGlzIGludGVyYWN0cyB3aXRoIHBnX3NldF9sb2dpY2FsX3Jvb3QoKQogCQkgKi8K IAkJaWYgKCFwdWJ2aWFyb290ICYmCiAJCQlwcmktPnJlbGF0aW9uLT5yZF9yZWwtPnJlbGtp bmQgPT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSkKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3BhcnRpdGlvbmluZy9wYXJ0ZGVzYy5jIGIvc3JjL2JhY2tlbmQvcGFydGl0aW9uaW5n L3BhcnRkZXNjLmMKaW5kZXggN2EyYjVlNTdmZi4uZGZiMjc5OTBmOSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvcGFydGl0aW9uaW5nL3BhcnRkZXNjLmMKKysrIGIvc3JjL2JhY2tlbmQv cGFydGl0aW9uaW5nL3BhcnRkZXNjLmMKQEAgLTE2Miw3ICsxNjIsOCBAQCBSZWxhdGlvbkJ1 aWxkUGFydGl0aW9uRGVzYyhSZWxhdGlvbiByZWwsIGJvb2wgb21pdF9kZXRhY2hlZCkKIAlp bmhvaWRzID0gZmluZF9pbmhlcml0YW5jZV9jaGlsZHJlbl9leHRlbmRlZChSZWxhdGlvbkdl dFJlbGlkKHJlbCksCiAJCQkJCQkJCQkJCQkgb21pdF9kZXRhY2hlZCwgTm9Mb2NrLAogCQkJ CQkJCQkJCQkJICZkZXRhY2hlZF9leGlzdCwKLQkJCQkJCQkJCQkJCSAmZGV0YWNoZWRfeG1p bik7CisJCQkJCQkJCQkJCQkgJmRldGFjaGVkX3htaW4sCisJCQkJCQkJCQkJCQkgZmFsc2Up OwogCiAJbnBhcnRzID0gbGlzdF9sZW5ndGgoaW5ob2lkcyk7CiAKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvdGFibGVzeW5jLmMgYi9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3RhYmxlc3luYy5jCmluZGV4IGM1NmQ0MmRjZDIuLmRi MGY1NmIwNWUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwv dGFibGVzeW5jLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC90YWJs ZXN5bmMuYwpAQCAtNzU3LDExICs3NTcsMTIgQEAgY29weV9yZWFkX2RhdGEodm9pZCAqb3V0 YnVmLCBpbnQgbWlucmVhZCwgaW50IG1heHJlYWQpCiAvKgogICogR2V0IGluZm9ybWF0aW9u IGFib3V0IHJlbW90ZSByZWxhdGlvbiBpbiBzaW1pbGFyIGZhc2hpb24gdGhlIFJFTEFUSU9O CiAgKiBtZXNzYWdlIHByb3ZpZGVzIGR1cmluZyByZXBsaWNhdGlvbi4gVGhpcyBmdW5jdGlv biBhbHNvIHJldHVybnMgdGhlIHJlbGF0aW9uCi0gKiBxdWFsaWZpY2F0aW9ucyB0byBiZSB1 c2VkIGluIHRoZSBDT1BZIGNvbW1hbmQuCisgKiBxdWFsaWZpY2F0aW9ucyB0byBiZSB1c2Vk IGluIHRoZSBDT1BZIGNvbW1hbmQsIGFuZCB0aGUgbGlzdCBvZiB0YWJsZXMgdG8gQ09QWQor ICogKHdoaWNoIGZvciBtb3N0IHRhYmxlcyB3aWxsIGNvbnRhaW4gb25seSBvbmUgZW50cnkp LgogICovCiBzdGF0aWMgdm9pZAogZmV0Y2hfcmVtb3RlX3RhYmxlX2luZm8oY2hhciAqbnNw bmFtZSwgY2hhciAqcmVsbmFtZSwKLQkJCQkJCUxvZ2ljYWxSZXBSZWxhdGlvbiAqbHJlbCwg TGlzdCAqKnF1YWwpCisJCQkJCQlMb2dpY2FsUmVwUmVsYXRpb24gKmxyZWwsIExpc3QgKipx dWFsLCBMaXN0ICoqdG9fY29weSkKIHsKIAlXYWxSY3ZFeGVjUmVzdWx0ICpyZXM7CiAJU3Ry aW5nSW5mb0RhdGEgY21kOwpAQCAtMTA3Miw2ICsxMDczLDg3IEBAIGZldGNoX3JlbW90ZV90 YWJsZV9pbmZvKGNoYXIgKm5zcG5hbWUsIGNoYXIgKnJlbG5hbWUsCiAJCXdhbHJjdl9jbGVh cl9yZXN1bHQocmVzKTsKIAl9CiAKKwkvKgorCSAqIFNlZSBpZiB0aGVyZSBhcmUgYW55IG90 aGVyIHRhYmxlcyB0byBiZSBjb3BpZWQgYmVzaWRlcyB0aGUgb3JpZ2luYWwuIFRoaXMKKwkg KiBoYXBwZW5zIHdoZW4gYSBkZXNjZW5kYW50IGluIHRoZSBpbmhlcml0YW5jZSByZWxhdGlv bnNoaXAgaXMgbWFya2VkIHdpdGgKKwkgKiBwZ19zZXRfbG9naWNhbF9yb290KCkgYW5kIGlz IHBhcnQgb2YgYSBwdWJsaWNhdGlvbiB3aXRoCisJICogcHVibGlzaF92aWFfcGFydGl0aW9u X3Jvb3QgPSB0cnVlLgorCSAqCisJICogRklYTUU6IGlmIHR3byBwdWJsaWNhdGlvbnMgaGF2 ZSBjb25mbGljdGluZyBzZXR0aW5ncyBmb3IKKwkgKiBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25f cm9vdCwgdGhpcyBiZWhhdmVzIHN0cmFuZ2VseS4gSXQgbG9va3MgbGlrZSB0aGF0J3MKKwkg KiB0cnVlIGZvciByZWd1bGFyIHBhcnRpdGlvbnMgdG9vLi4uCisJICovCisJaWYgKHdhbHJj dl9zZXJ2ZXJfdmVyc2lvbihMb2dSZXBXb3JrZXJXYWxSY3ZDb25uKSA+PSAxNjAwMDApCisJ eworCQlPaWQJCQlkZXNjUm93W10gPSB7VEVYVE9JRCwgVEVYVE9JRH07CisJCVN0cmluZ0lu Zm9EYXRhIHB1Yl9uYW1lczsKKworCQkvKiBCdWlsZCB0aGUgcHVibmFtZSBsaXN0LiAqLwor CQlpbml0U3RyaW5nSW5mbygmcHViX25hbWVzKTsKKwkJZm9yZWFjaChsYywgTXlTdWJzY3Jp cHRpb24tPnB1YmxpY2F0aW9ucykKKwkJeworCQkJY2hhcgkgICAqcHVibmFtZSA9IHN0clZh bChsZmlyc3QobGMpKTsKKworCQkJaWYgKGZvcmVhY2hfY3VycmVudF9pbmRleChsYykgPiAw KQorCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJnB1Yl9uYW1lcywgIiwgIik7CisKKwkJ CWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJnB1Yl9uYW1lcywgcXVvdGVfbGl0ZXJhbF9jc3Ry KHB1Ym5hbWUpKTsKKwkJfQorCisJCS8qCisJCSAqIEFzayB0aGUgc2VydmVyIHdoYXQgaXQg d2FudHMgdXMgdG8gc3luYy4KKwkJICovCisJCXJlc2V0U3RyaW5nSW5mbygmY21kKTsKKwkJ YXBwZW5kU3RyaW5nSW5mbygmY21kLAorCQkJCQkJICJTRUxFQ1QgRElTVElOQ1Qgbi5uc3Bu YW1lLCBjLnJlbG5hbWUiCisJCQkJCQkgIiAgRlJPTSBwZ19jYXRhbG9nLnBnX3B1YmxpY2F0 aW9uIHAsIgorCQkJCQkJICIgICAgICAgcGdfY2F0YWxvZy5wZ19jbGFzcyBjIgorCQkJCQkJ ICIgIEpPSU4gcGdfY2F0YWxvZy5wZ19uYW1lc3BhY2UgbiIKKwkJCQkJCSAiICAgIE9OIChj LnJlbG5hbWVzcGFjZSA9IG4ub2lkKSIKKwkJCQkJCSAiICBKT0lOIExBVEVSQUwgcGdfY2F0 YWxvZy5wZ19nZXRfcHVibGljYXRpb25fcmVsc190b19zeW5jKCV1OjpyZWdjbGFzcywgcC5w dWJuYW1lKSByZWxpZCIKKwkJCQkJCSAiICAgIE9OIChjLm9pZCA9IHJlbGlkKSIKKwkJCQkJ CSAiIFdIRVJFIHAucHVibmFtZSBJTiAoICVzICkiLAorCQkJCQkJIGxyZWwtPnJlbW90ZWlk LCBwdWJfbmFtZXMuZGF0YSk7CisKKwkJcmVzID0gd2FscmN2X2V4ZWMoTG9nUmVwV29ya2Vy V2FsUmN2Q29ubiwgY21kLmRhdGEsCisJCQkJCQkgIGxlbmd0aG9mKGRlc2NSb3cpLCBkZXNj Um93KTsKKworCQlpZiAocmVzLT5zdGF0dXMgIT0gV0FMUkNWX09LX1RVUExFUykKKwkJCWVy ZXBvcnQoRVJST1IsCisJCQkJCShlcnJtc2coImNvdWxkIG5vdCBmZXRjaCBsb2dpY2FsIGRl c2NlbmRhbnRzIGZvciB0YWJsZSBcIiVzLiVzXCIgZnJvbSBwdWJsaXNoZXI6ICVzIiwKKwkJ CQkJCQluc3BuYW1lLCByZWxuYW1lLCByZXMtPmVycikpKTsKKworCQlzbG90ID0gTWFrZVNp bmdsZVR1cGxlVGFibGVTbG90KHJlcy0+dHVwbGVkZXNjLCAmVFRTT3BzTWluaW1hbFR1cGxl KTsKKwkJd2hpbGUgKHR1cGxlc3RvcmVfZ2V0dHVwbGVzbG90KHJlcy0+dHVwbGVzdG9yZSwg dHJ1ZSwgZmFsc2UsIHNsb3QpKQorCQl7CisJCQljaGFyCSAgICpkZXNjX25zcG5hbWU7CisJ CQljaGFyCSAgICpkZXNjX3JlbG5hbWU7CisJCQljaGFyCSAgICpxdW90ZWQ7CisKKwkJCWRl c2NfbnNwbmFtZSA9IFRleHREYXR1bUdldENTdHJpbmcoc2xvdF9nZXRhdHRyKHNsb3QsIDEs ICZpc251bGwpKTsKKwkJCUFzc2VydCghaXNudWxsKTsKKwkJCWRlc2NfcmVsbmFtZSA9IFRl eHREYXR1bUdldENTdHJpbmcoc2xvdF9nZXRhdHRyKHNsb3QsIDIsICZpc251bGwpKTsKKwkJ CUFzc2VydCghaXNudWxsKTsKKworCQkJcXVvdGVkID0gcXVvdGVfcXVhbGlmaWVkX2lkZW50 aWZpZXIoZGVzY19uc3BuYW1lLCBkZXNjX3JlbG5hbWUpOworCQkJKnRvX2NvcHkgPSBsYXBw ZW5kKCp0b19jb3B5LCBxdW90ZWQpOworCisJCQlFeGVjQ2xlYXJUdXBsZShzbG90KTsKKwkJ fQorCisJCUV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNsb3Qoc2xvdCk7CisJCXdhbHJjdl9j bGVhcl9yZXN1bHQocmVzKTsKKworCQlwZnJlZShwdWJfbmFtZXMuZGF0YSk7CisJfQorCWVs c2UKKwl7CisJCS8qIEZvciBvbGRlciBzZXJ2ZXJzLCB3ZSBvbmx5IENPUFkgdGhlIHRhYmxl IGl0c2VsZi4gKi8KKwkJY2hhciAgICpxdW90ZWQgPSBxdW90ZV9xdWFsaWZpZWRfaWRlbnRp ZmllcihscmVsLT5uc3BuYW1lLAorCQkJCQkJCQkJCQkJCWxyZWwtPnJlbG5hbWUpOworCQkq dG9fY29weSA9IGxhcHBlbmQoKnRvX2NvcHksIHF1b3RlZCk7CisJfQorCiAJcGZyZWUoY21k LmRhdGEpOwogfQogCkBAIC0xMDg2LDYgKzExNjgsOCBAQCBjb3B5X3RhYmxlKFJlbGF0aW9u IHJlbCkKIAlMb2dpY2FsUmVwUmVsTWFwRW50cnkgKnJlbG1hcGVudHJ5OwogCUxvZ2ljYWxS ZXBSZWxhdGlvbiBscmVsOwogCUxpc3QJICAgKnF1YWwgPSBOSUw7CisJTGlzdAkgICAqdG9f Y29weSA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjdXI7CiAJV2FsUmN2RXhlY1Jlc3VsdCAqcmVz OwogCVN0cmluZ0luZm9EYXRhIGNtZDsKIAlDb3B5RnJvbVN0YXRlIGNzdGF0ZTsKQEAgLTEw OTUsNyArMTE3OSw4IEBAIGNvcHlfdGFibGUoUmVsYXRpb24gcmVsKQogCiAJLyogR2V0IHRo ZSBwdWJsaXNoZXIgcmVsYXRpb24gaW5mby4gKi8KIAlmZXRjaF9yZW1vdGVfdGFibGVfaW5m byhnZXRfbmFtZXNwYWNlX25hbWUoUmVsYXRpb25HZXROYW1lc3BhY2UocmVsKSksCi0JCQkJ CQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSwgJmxyZWwsICZxdWFsKTsKKwkJCQkJ CQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpLCAmbHJlbCwgJnF1YWwsCisJCQkJCQkJ JnRvX2NvcHkpOwogCiAJLyogUHV0IHRoZSByZWxhdGlvbiBpbnRvIHJlbG1hcC4gKi8KIAls b2dpY2FscmVwX3JlbG1hcF91cGRhdGUoJmxyZWwpOwpAQCAtMTEwNCwxMDUgKzExODksMTA5 IEBAIGNvcHlfdGFibGUoUmVsYXRpb24gcmVsKQogCXJlbG1hcGVudHJ5ID0gbG9naWNhbHJl cF9yZWxfb3BlbihscmVsLnJlbW90ZWlkLCBOb0xvY2spOwogCUFzc2VydChyZWwgPT0gcmVs bWFwZW50cnktPmxvY2FscmVsKTsKIAotCS8qIFN0YXJ0IGNvcHkgb24gdGhlIHB1Ymxpc2hl ci4gKi8KLQlpbml0U3RyaW5nSW5mbygmY21kKTsKLQotCS8qIFJlZ3VsYXIgdGFibGUgd2l0 aCBubyByb3cgZmlsdGVyICovCi0JaWYgKGxyZWwucmVsa2luZCA9PSBSRUxLSU5EX1JFTEFU SU9OICYmIHF1YWwgPT0gTklMKQorCWZvcmVhY2goY3VyLCB0b19jb3B5KQogCXsKLQkJYXBw ZW5kU3RyaW5nSW5mbygmY21kLCAiQ09QWSAlcyAoIiwKLQkJCQkJCSBxdW90ZV9xdWFsaWZp ZWRfaWRlbnRpZmllcihscmVsLm5zcG5hbWUsIGxyZWwucmVsbmFtZSkpOwotCi0JCS8qCi0J CSAqIFhYWCBEbyB3ZSBuZWVkIHRvIGxpc3QgdGhlIGNvbHVtbnMgaW4gYWxsIGNhc2VzPyBN YXliZSB3ZSdyZQotCQkgKiByZXBsaWNhdGluZyBhbGwgY29sdW1ucz8KLQkJICovCi0JCWZv ciAoaW50IGkgPSAwOyBpIDwgbHJlbC5uYXR0czsgaSsrKQotCQl7Ci0JCQlpZiAoaSA+IDAp Ci0JCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmY21kLCAiLCAiKTsKKwkJY2hhcgkgICAq cXVvdGVkX25hbWUgPSBsZmlyc3QoY3VyKTsKIAotCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmlu ZygmY21kLCBxdW90ZV9pZGVudGlmaWVyKGxyZWwuYXR0bmFtZXNbaV0pKTsKLQkJfQorCQkv KiBTdGFydCBjb3B5IG9uIHRoZSBwdWJsaXNoZXIuICovCisJCWluaXRTdHJpbmdJbmZvKCZj bWQpOwogCi0JCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmNtZCwgIikgVE8gU1RET1VUIik7 Ci0JfQotCWVsc2UKLQl7Ci0JCS8qCi0JCSAqIEZvciBub24tdGFibGVzIGFuZCB0YWJsZXMg d2l0aCByb3cgZmlsdGVycywgd2UgbmVlZCB0byBkbyBDT1BZCi0JCSAqIChTRUxFQ1QgLi4u KSwgYnV0IHdlIGNhbid0IGp1c3QgZG8gU0VMRUNUICogYmVjYXVzZSB3ZSBuZWVkIHRvIG5v dAotCQkgKiBjb3B5IGdlbmVyYXRlZCBjb2x1bW5zLiBGb3IgdGFibGVzIHdpdGggYW55IHJv dyBmaWx0ZXJzLCBidWlsZCBhCi0JCSAqIFNFTEVDVCBxdWVyeSB3aXRoIE9SJ2VkIHJvdyBm aWx0ZXJzIGZvciBDT1BZLgotCQkgKi8KLQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmY21k LCAiQ09QWSAoU0VMRUNUICIpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGxyZWwubmF0dHM7 IGkrKykKKwkJLyogUmVndWxhciB0YWJsZSB3aXRoIG5vIHJvdyBmaWx0ZXIgKi8KKwkJaWYg KGxyZWwucmVsa2luZCA9PSBSRUxLSU5EX1JFTEFUSU9OICYmIHF1YWwgPT0gTklMKQogCQl7 Ci0JCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjbWQsIHF1b3RlX2lkZW50aWZpZXIobHJl bC5hdHRuYW1lc1tpXSkpOwotCQkJaWYgKGkgPCBscmVsLm5hdHRzIC0gMSkKLQkJCQlhcHBl bmRTdHJpbmdJbmZvU3RyaW5nKCZjbWQsICIsICIpOwotCQl9CisJCQlhcHBlbmRTdHJpbmdJ bmZvKCZjbWQsICJDT1BZICVzICgiLCBxdW90ZWRfbmFtZSk7CiAKLQkJYXBwZW5kU3RyaW5n SW5mb1N0cmluZygmY21kLCAiIEZST00gIik7CisJCQkvKgorCQkJICogWFhYIERvIHdlIG5l ZWQgdG8gbGlzdCB0aGUgY29sdW1ucyBpbiBhbGwgY2FzZXM/IE1heWJlIHdlJ3JlCisJCQkg KiByZXBsaWNhdGluZyBhbGwgY29sdW1ucz8KKwkJCSAqLworCQkJZm9yIChpbnQgaSA9IDA7 IGkgPCBscmVsLm5hdHRzOyBpKyspCisJCQl7CisJCQkJaWYgKGkgPiAwKQorCQkJCQlhcHBl bmRTdHJpbmdJbmZvU3RyaW5nKCZjbWQsICIsICIpOwogCi0JCS8qCi0JCSAqIEZvciByZWd1 bGFyIHRhYmxlcywgbWFrZSBzdXJlIHdlIGRvbid0IGNvcHkgZGF0YSBmcm9tIGEgY2hpbGQg dGhhdAotCQkgKiBpbmhlcml0cyB0aGUgbmFtZWQgdGFibGUgYXMgdGhvc2Ugd2lsbCBiZSBj b3BpZWQgc2VwYXJhdGVseS4KLQkJICovCi0JCWlmIChscmVsLnJlbGtpbmQgPT0gUkVMS0lO RF9SRUxBVElPTikKLQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmNtZCwgIk9OTFkgIik7 CisJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmY21kLCBxdW90ZV9pZGVudGlmaWVyKGxy ZWwuYXR0bmFtZXNbaV0pKTsKKwkJCX0KIAotCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZj bWQsIHF1b3RlX3F1YWxpZmllZF9pZGVudGlmaWVyKGxyZWwubnNwbmFtZSwgbHJlbC5yZWxu YW1lKSk7Ci0JCS8qIGxpc3Qgb2YgT1InZWQgZmlsdGVycyAqLwotCQlpZiAocXVhbCAhPSBO SUwpCisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjbWQsICIpIFRPIFNURE9VVCIpOwor CQl9CisJCWVsc2UKIAkJewotCQkJTGlzdENlbGwgICAqbGM7Ci0JCQljaGFyCSAgICpxID0g c3RyVmFsKGxpbml0aWFsKHF1YWwpKTsKKwkJCS8qCisJCQkgKiBGb3Igbm9uLXRhYmxlcyBh bmQgdGFibGVzIHdpdGggcm93IGZpbHRlcnMsIHdlIG5lZWQgdG8gZG8gQ09QWQorCQkJICog KFNFTEVDVCAuLi4pLCBidXQgd2UgY2FuJ3QganVzdCBkbyBTRUxFQ1QgKiBiZWNhdXNlIHdl IG5lZWQgdG8gbm90CisJCQkgKiBjb3B5IGdlbmVyYXRlZCBjb2x1bW5zLiBGb3IgdGFibGVz IHdpdGggYW55IHJvdyBmaWx0ZXJzLCBidWlsZCBhCisJCQkgKiBTRUxFQ1QgcXVlcnkgd2l0 aCBPUidlZCByb3cgZmlsdGVycyBmb3IgQ09QWS4KKwkJCSAqLworCQkJYXBwZW5kU3RyaW5n SW5mb1N0cmluZygmY21kLCAiQ09QWSAoU0VMRUNUICIpOworCQkJZm9yIChpbnQgaSA9IDA7 IGkgPCBscmVsLm5hdHRzOyBpKyspCisJCQl7CisJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmlu ZygmY21kLCBxdW90ZV9pZGVudGlmaWVyKGxyZWwuYXR0bmFtZXNbaV0pKTsKKwkJCQlpZiAo aSA8IGxyZWwubmF0dHMgLSAxKQorCQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjbWQs ICIsICIpOworCQkJfQorCisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjbWQsICIgRlJP TSAiKTsKKworCQkJLyoKKwkJCSAqIEZvciByZWd1bGFyIHRhYmxlcywgbWFrZSBzdXJlIHdl IGRvbid0IGNvcHkgZGF0YSBmcm9tIGEgY2hpbGQgdGhhdAorCQkJICogaW5oZXJpdHMgdGhl IG5hbWVkIHRhYmxlIGFzIHRob3NlIHdpbGwgYmUgY29waWVkIHNlcGFyYXRlbHkuCisJCQkg Ki8KKwkJCWlmIChscmVsLnJlbGtpbmQgPT0gUkVMS0lORF9SRUxBVElPTikKKwkJCQlhcHBl bmRTdHJpbmdJbmZvU3RyaW5nKCZjbWQsICJPTkxZICIpOwogCi0JCQlhcHBlbmRTdHJpbmdJ bmZvKCZjbWQsICIgV0hFUkUgJXMiLCBxKTsKLQkJCWZvcl9lYWNoX2Zyb20obGMsIHF1YWws IDEpCisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjbWQsIHF1b3RlZF9uYW1lKTsKKwkJ CS8qIGxpc3Qgb2YgT1InZWQgZmlsdGVycyAqLworCQkJaWYgKHF1YWwgIT0gTklMKQogCQkJ ewotCQkJCXEgPSBzdHJWYWwobGZpcnN0KGxjKSk7Ci0JCQkJYXBwZW5kU3RyaW5nSW5mbygm Y21kLCAiIE9SICVzIiwgcSk7CisJCQkJTGlzdENlbGwgICAqbGM7CisJCQkJY2hhcgkgICAq cSA9IHN0clZhbChsaW5pdGlhbChxdWFsKSk7CisKKwkJCQlhcHBlbmRTdHJpbmdJbmZvKCZj bWQsICIgV0hFUkUgJXMiLCBxKTsKKwkJCQlmb3JfZWFjaF9mcm9tKGxjLCBxdWFsLCAxKQor CQkJCXsKKwkJCQkJcSA9IHN0clZhbChsZmlyc3QobGMpKTsKKwkJCQkJYXBwZW5kU3RyaW5n SW5mbygmY21kLCAiIE9SICVzIiwgcSk7CisJCQkJfQorCQkJCWxpc3RfZnJlZV9kZWVwKHF1 YWwpOwogCQkJfQotCQkJbGlzdF9mcmVlX2RlZXAocXVhbCk7Ci0JCX0KIAotCQlhcHBlbmRT dHJpbmdJbmZvU3RyaW5nKCZjbWQsICIpIFRPIFNURE9VVCIpOwotCX0KKwkJCWFwcGVuZFN0 cmluZ0luZm9TdHJpbmcoJmNtZCwgIikgVE8gU1RET1VUIik7CisJCX0KIAotCS8qCi0JICog UHJpb3IgdG8gdjE2LCBpbml0aWFsIHRhYmxlIHN5bmNocm9uaXphdGlvbiB3aWxsIHVzZSB0 ZXh0IGZvcm1hdCBldmVuCi0JICogaWYgdGhlIGJpbmFyeSBvcHRpb24gaXMgZW5hYmxlZCBm b3IgYSBzdWJzY3JpcHRpb24uCi0JICovCi0JaWYgKHdhbHJjdl9zZXJ2ZXJfdmVyc2lvbihM b2dSZXBXb3JrZXJXYWxSY3ZDb25uKSA+PSAxNjAwMDAgJiYKLQkJTXlTdWJzY3JpcHRpb24t PmJpbmFyeSkKLQl7Ci0JCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmNtZCwgIiBXSVRIIChG T1JNQVQgYmluYXJ5KSIpOwotCQlvcHRpb25zID0gbGlzdF9tYWtlMShtYWtlRGVmRWxlbSgi Zm9ybWF0IiwKLQkJCQkJCQkJCQkgKE5vZGUgKikgbWFrZVN0cmluZygiYmluYXJ5IiksIC0x KSk7Ci0JfQorCQkvKgorCQkgKiBQcmlvciB0byB2MTYsIGluaXRpYWwgdGFibGUgc3luY2hy b25pemF0aW9uIHdpbGwgdXNlIHRleHQgZm9ybWF0IGV2ZW4KKwkJICogaWYgdGhlIGJpbmFy eSBvcHRpb24gaXMgZW5hYmxlZCBmb3IgYSBzdWJzY3JpcHRpb24uCisJCSAqLworCQlpZiAo d2FscmN2X3NlcnZlcl92ZXJzaW9uKExvZ1JlcFdvcmtlcldhbFJjdkNvbm4pID49IDE2MDAw MCAmJgorCQkJTXlTdWJzY3JpcHRpb24tPmJpbmFyeSkKKwkJeworCQkJYXBwZW5kU3RyaW5n SW5mb1N0cmluZygmY21kLCAiIFdJVEggKEZPUk1BVCBiaW5hcnkpIik7CisJCQlvcHRpb25z ID0gbGlzdF9tYWtlMShtYWtlRGVmRWxlbSgiZm9ybWF0IiwKKwkJCQkJCQkJCQkJIChOb2Rl ICopIG1ha2VTdHJpbmcoImJpbmFyeSIpLCAtMSkpOworCQl9CiAKLQlyZXMgPSB3YWxyY3Zf ZXhlYyhMb2dSZXBXb3JrZXJXYWxSY3ZDb25uLCBjbWQuZGF0YSwgMCwgTlVMTCk7Ci0JcGZy ZWUoY21kLmRhdGEpOwotCWlmIChyZXMtPnN0YXR1cyAhPSBXQUxSQ1ZfT0tfQ09QWV9PVVQp Ci0JCWVyZXBvcnQoRVJST1IsCi0JCQkJKGVycmNvZGUoRVJSQ09ERV9DT05ORUNUSU9OX0ZB SUxVUkUpLAotCQkJCSBlcnJtc2coImNvdWxkIG5vdCBzdGFydCBpbml0aWFsIGNvbnRlbnRz IGNvcHkgZm9yIHRhYmxlIFwiJXMuJXNcIjogJXMiLAotCQkJCQkJbHJlbC5uc3BuYW1lLCBs cmVsLnJlbG5hbWUsIHJlcy0+ZXJyKSkpOwotCXdhbHJjdl9jbGVhcl9yZXN1bHQocmVzKTsK KwkJcmVzID0gd2FscmN2X2V4ZWMoTG9nUmVwV29ya2VyV2FsUmN2Q29ubiwgY21kLmRhdGEs IDAsIE5VTEwpOworCQlwZnJlZShjbWQuZGF0YSk7CisJCWlmIChyZXMtPnN0YXR1cyAhPSBX QUxSQ1ZfT0tfQ09QWV9PVVQpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShF UlJDT0RFX0NPTk5FQ1RJT05fRkFJTFVSRSksCisJCQkJCSBlcnJtc2coImNvdWxkIG5vdCBz dGFydCBpbml0aWFsIGNvbnRlbnRzIGNvcHkgZm9yIHRhYmxlIFwiJXMuJXNcIiBmcm9tIHJl bW90ZSAlczogJXMiLAorCQkJCQkJCWxyZWwubnNwbmFtZSwgbHJlbC5yZWxuYW1lLCBxdW90 ZWRfbmFtZSwgcmVzLT5lcnIpKSk7CisJCXdhbHJjdl9jbGVhcl9yZXN1bHQocmVzKTsKIAot CWNvcHlidWYgPSBtYWtlU3RyaW5nSW5mbygpOworCQljb3B5YnVmID0gbWFrZVN0cmluZ0lu Zm8oKTsKIAotCXBzdGF0ZSA9IG1ha2VfcGFyc2VzdGF0ZShOVUxMKTsKLQkodm9pZCkgYWRk UmFuZ2VUYWJsZUVudHJ5Rm9yUmVsYXRpb24ocHN0YXRlLCByZWwsIEFjY2Vzc1NoYXJlTG9j aywKLQkJCQkJCQkJCQkgTlVMTCwgZmFsc2UsIGZhbHNlKTsKKwkJcHN0YXRlID0gbWFrZV9w YXJzZXN0YXRlKE5VTEwpOworCQkodm9pZCkgYWRkUmFuZ2VUYWJsZUVudHJ5Rm9yUmVsYXRp b24ocHN0YXRlLCByZWwsIEFjY2Vzc1NoYXJlTG9jaywKKwkJCQkJCQkJCQkJIE5VTEwsIGZh bHNlLCBmYWxzZSk7CiAKLQlhdHRuYW1lbGlzdCA9IG1ha2VfY29weV9hdHRuYW1lbGlzdChy ZWxtYXBlbnRyeSk7Ci0JY3N0YXRlID0gQmVnaW5Db3B5RnJvbShwc3RhdGUsIHJlbCwgTlVM TCwgTlVMTCwgZmFsc2UsIGNvcHlfcmVhZF9kYXRhLCBhdHRuYW1lbGlzdCwgb3B0aW9ucyk7 CisJCWF0dG5hbWVsaXN0ID0gbWFrZV9jb3B5X2F0dG5hbWVsaXN0KHJlbG1hcGVudHJ5KTsK KwkJY3N0YXRlID0gQmVnaW5Db3B5RnJvbShwc3RhdGUsIHJlbCwgTlVMTCwgTlVMTCwgZmFs c2UsIGNvcHlfcmVhZF9kYXRhLCBhdHRuYW1lbGlzdCwgb3B0aW9ucyk7CiAKLQkvKiBEbyB0 aGUgY29weSAqLwotCSh2b2lkKSBDb3B5RnJvbShjc3RhdGUpOworCQkvKiBEbyB0aGUgY29w eSAqLworCQkodm9pZCkgQ29weUZyb20oY3N0YXRlKTsKKwl9CiAKIAlsb2dpY2FscmVwX3Jl bF9jbG9zZShyZWxtYXBlbnRyeSwgTm9Mb2NrKTsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMgYi9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jCmluZGV4IDY0MDY3NmU3ZGMuLjdjNTRiNDZh YzcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0 cHV0LmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQu YwpAQCAtMTQ2Miw3ICsxNDYyLDYgQEAgcGdvdXRwdXRfY2hhbmdlKExvZ2ljYWxEZWNvZGlu Z0NvbnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCS8qIFN3aXRjaCByZWxh dGlvbiBpZiBwdWJsaXNoaW5nIHZpYSByb290LiAqLwogCWlmIChyZWxlbnRyeS0+cHVibGlz aF9hc19yZWxpZCAhPSBSZWxhdGlvbkdldFJlbGlkKHJlbGF0aW9uKSkKIAl7Ci0JCUFzc2Vy dChyZWxhdGlvbi0+cmRfcmVsLT5yZWxpc3BhcnRpdGlvbik7CiAJCWFuY2VzdG9yID0gUmVs YXRpb25JZEdldFJlbGF0aW9uKHJlbGVudHJ5LT5wdWJsaXNoX2FzX3JlbGlkKTsKIAkJdGFy Z2V0cmVsID0gYW5jZXN0b3I7CiAJfQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxv Zy9wZ19pbmhlcml0cy5oIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19pbmhlcml0cy5oCmlu ZGV4IGNlMTU0YWI5NDMuLmNmY2FjYWNmNzYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2Nh dGFsb2cvcGdfaW5oZXJpdHMuaAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX2luaGVy aXRzLmgKQEAgLTQ2LDE0ICs0NiwxNyBAQCB0eXBlZGVmIEZvcm1EYXRhX3BnX2luaGVyaXRz ICpGb3JtX3BnX2luaGVyaXRzOwogCiBERUNMQVJFX1VOSVFVRV9JTkRFWF9QS0VZKHBnX2lu aGVyaXRzX3JlbGlkX3NlcW5vX2luZGV4LCAyNjgwLCBJbmhlcml0c1JlbGlkU2Vxbm9JbmRl eElkLCBvbiBwZ19pbmhlcml0cyB1c2luZyBidHJlZShpbmhyZWxpZCBvaWRfb3BzLCBpbmhz ZXFubyBpbnQ0X29wcykpOwogREVDTEFSRV9JTkRFWChwZ19pbmhlcml0c19wYXJlbnRfaW5k ZXgsIDIxODcsIEluaGVyaXRzUGFyZW50SW5kZXhJZCwgb24gcGdfaW5oZXJpdHMgdXNpbmcg YnRyZWUoaW5ocGFyZW50IG9pZF9vcHMpKTsKK0RFQ0xBUkVfSU5ERVgocGdfaW5oZXJpdHNf cGFyZW50X3NlcW5vX2luZGV4LCA4MTM4LCBJbmhlcml0c1BhcmVudFNlcW5vSW5kZXhJZCwg b24gcGdfaW5oZXJpdHMgdXNpbmcgYnRyZWUoaW5ocGFyZW50IG9pZF9vcHMsIGluaHNlcW5v IGludDRfb3BzKSk7CiAKIAogZXh0ZXJuIExpc3QgKmZpbmRfaW5oZXJpdGFuY2VfY2hpbGRy ZW4oT2lkIHBhcmVudHJlbElkLCBMT0NLTU9ERSBsb2NrbW9kZSk7CiBleHRlcm4gTGlzdCAq ZmluZF9pbmhlcml0YW5jZV9jaGlsZHJlbl9leHRlbmRlZChPaWQgcGFyZW50cmVsSWQsIGJv b2wgb21pdF9kZXRhY2hlZCwKLQkJCQkJCQkJCQkJCUxPQ0tNT0RFIGxvY2ttb2RlLCBib29s ICpkZXRhY2hlZF9leGlzdCwgVHJhbnNhY3Rpb25JZCAqZGV0YWNoZWRfeG1pbik7CisJCQkJ CQkJCQkJCQlMT0NLTU9ERSBsb2NrbW9kZSwgYm9vbCAqZGV0YWNoZWRfZXhpc3QsIFRyYW5z YWN0aW9uSWQgKmRldGFjaGVkX3htaW4sCisJCQkJCQkJCQkJCQlib29sIGxvZ2ljYWxfb25s eSk7CiAKIGV4dGVybiBMaXN0ICpmaW5kX2FsbF9pbmhlcml0b3JzKE9pZCBwYXJlbnRyZWxJ ZCwgTE9DS01PREUgbG9ja21vZGUsCiAJCQkJCQkJCSBMaXN0ICoqbnVtcGFyZW50cyk7Citl eHRlcm4gTGlzdCAqZmluZF9hbGxfbG9naWNhbF9pbmhlcml0b3JzKE9pZCBwYXJlbnRyZWxJ ZCk7CiBleHRlcm4gYm9vbCBoYXNfc3ViY2xhc3MoT2lkIHJlbGF0aW9uSWQpOwogZXh0ZXJu IGJvb2wgaGFzX3N1cGVyY2xhc3MoT2lkIHJlbGF0aW9uSWQpOwogZXh0ZXJuIGJvb2wgdHlw ZUluaGVyaXRzRnJvbShPaWQgc3ViY2xhc3NUeXBlSWQsIE9pZCBzdXBlcmNsYXNzVHlwZUlk KTsKQEAgLTYzLDUgKzY2LDcgQEAgZXh0ZXJuIGJvb2wgRGVsZXRlSW5oZXJpdHNUdXBsZShP aWQgaW5ocmVsaWQsIE9pZCBpbmhwYXJlbnQsCiAJCQkJCQkJCWJvb2wgZXhwZWN0X2RldGFj aF9wZW5kaW5nLAogCQkJCQkJCQljb25zdCBjaGFyICpjaGlsZG5hbWUpOwogZXh0ZXJuIGJv b2wgUGFydGl0aW9uSGFzUGVuZGluZ0RldGFjaChPaWQgcGFydG9pZCk7CitleHRlcm4gTGlz dCAqZ2V0X2xvZ2ljYWxfYW5jZXN0b3JzKE9pZCByZWxpZCwgYm9vbCBpc19wYXJ0aXRpb24p OworZXh0ZXJuIGJvb2wgaGFzX2xvZ2ljYWxfcGFyZW50KFJlbGF0aW9uIGluaFJlbCwgT2lk IHJlbGlkKTsKIAogI2VuZGlmCQkJCQkJCS8qIFBHX0lOSEVSSVRTX0ggKi8KZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRh bG9nL3BnX3Byb2MuZGF0CmluZGV4IGVkNjcxNjgzNzQuLjFkZmM4ZmRkMWUgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKKysrIGIvc3JjL2luY2x1ZGUv Y2F0YWxvZy9wZ19wcm9jLmRhdApAQCAtMTE4MzMsNiArMTE4MzMsMTMgQEAKICAgcHJvbmFt ZSA9PiAncGdfcmVsYXRpb25faXNfcHVibGlzaGFibGUnLCBwcm92b2xhdGlsZSA9PiAncycs CiAgIHByb3JldHR5cGUgPT4gJ2Jvb2wnLCBwcm9hcmd0eXBlcyA9PiAncmVnY2xhc3MnLAog ICBwcm9zcmMgPT4gJ3BnX3JlbGF0aW9uX2lzX3B1Ymxpc2hhYmxlJyB9LAoreyBvaWQgPT4g JzgxMzcnLAorICBkZXNjciA9PiAnZ2V0IHRoZSByZWxhdGlvbnMgdG8gY29weSBmcm9tIGFs bCBzcGVjaWZpZWQgcHVibGljYXRpb25zIGR1cmluZyBhIHRhYmxlXCdzIGluaXRpYWwgc3lu YycsCisgIHByb25hbWUgPT4gJ3BnX2dldF9wdWJsaWNhdGlvbl9yZWxzX3RvX3N5bmMnLCBw cm9yb3dzID0+ICcxMCcsCisgIHByb3ZhcmlhZGljID0+ICd0ZXh0JywgcHJvcmV0c2V0ID0+ ICd0JywgcHJvdm9sYXRpbGUgPT4gJ3MnLAorICBwcm9yZXR0eXBlID0+ICdyZWdjbGFzcycs IHByb2FyZ3R5cGVzID0+ICdyZWdjbGFzcyBfdGV4dCcsCisgIHByb2FyZ21vZGVzID0+ICd7 aSx2fScsIHByb2FyZ25hbWVzID0+ICd7cm9vdGlkLHB1Ym5hbWVzfScsCisgIHByb3NyYyA9 PiAncGdfZ2V0X3B1YmxpY2F0aW9uX3JlbHNfdG9fc3luYycgfSwKIHsgb2lkID0+ICc4MTM5 JywKICAgZGVzY3IgPT4gJ2dldCBpbmZvcm1hdGlvbiBvbiBob3cgYSByZWxhdGlvbiB3aWxs IGJlIHB1Ymxpc2hlZCB2aWEgYSBsaXN0IG9mIHB1YmxpY2F0aW9ucycsCiAgIHByb25hbWUg PT4gJ3BnX2dldF9yZWxhdGlvbl9wdWJsaXNoaW5nX2luZm8nLCBwcm92YXJpYWRpYyA9PiAn dGV4dCcsCkBAIC0xMTk5OSw2ICsxMjAwNiwxMSBAQAogICBwcm9uYW1lID0+ICdwZ19wYXJ0 aXRpb25fcm9vdCcsIHByb3JldHR5cGUgPT4gJ3JlZ2NsYXNzJywKICAgcHJvYXJndHlwZXMg PT4gJ3JlZ2NsYXNzJywgcHJvc3JjID0+ICdwZ19wYXJ0aXRpb25fcm9vdCcgfSwKIAoreyBv aWQgPT4gJzgxMzYnLCBkZXNjciA9PiAnbWFyayBhIHRhYmxlIHJvb3QgZm9yIGxvZ2ljYWwg cmVwbGljYXRpb24nLAorICBwcm9uYW1lID0+ICdwZ19zZXRfbG9naWNhbF9yb290JywgcHJv dm9sYXRpbGUgPT4gJ3YnLCBwcm9wYXJhbGxlbCA9PiAndScsCisgIHByb3JldHR5cGUgPT4g J3ZvaWQnLCBwcm9hcmd0eXBlcyA9PiAncmVnY2xhc3MgcmVnY2xhc3MnLAorICBwcm9zcmMg PT4gJ3BnX3NldF9sb2dpY2FsX3Jvb3QnIH0sCisKIHsgb2lkID0+ICc0MzUwJywgZGVzY3Ig PT4gJ1VuaWNvZGUgbm9ybWFsaXphdGlvbicsCiAgIHByb25hbWUgPT4gJ25vcm1hbGl6ZScs IHByb3JldHR5cGUgPT4gJ3RleHQnLCBwcm9hcmd0eXBlcyA9PiAndGV4dCB0ZXh0JywKICAg cHJvc3JjID0+ICd1bmljb2RlX25vcm1hbGl6ZV9mdW5jJyB9LApkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wdWJsaWNhdGlvbi5vdXQgYi9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dAppbmRleCBkZDhmYzk5MTExLi45NTg3Njc0 ZWRjIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9u Lm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dApA QCAtNSw2ICs1LDE3IEBAIENSRUFURSBST0xFIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciBM T0dJTiBTVVBFUlVTRVI7CiBDUkVBVEUgUk9MRSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIy OwogQ1JFQVRFIFJPTEUgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyX2R1bW15IExPR0lOIE5P U1VQRVJVU0VSOwogU0VUIFNFU1NJT04gQVVUSE9SSVpBVElPTiAncmVncmVzc19wdWJsaWNh dGlvbl91c2VyJzsKK0NSRUFURSBGVU5DVElPTiBwdWJsaXNoZWRfc3luYyAoVkFSSUFESUMg cHVibmFtZXMgdGV4dFtdKQorICAgICAgICAgICAgICAgIFJFVFVSTlMgVEFCTEUgKHB1Ymxp c2hlZCByZWdjbGFzcywgc3luY2VkIHJlZ2NsYXNzKSBBUyAkJAorICAtLSBTaG93IGVhY2gg cHVibGlzaGVkIHRhYmxlIGFsb25nc2lkZSB0aGUgdGFibGVzIHRvIGJlIGNvcGllZCBpbnRv IGl0IGR1cmluZworICAtLSBpbml0aWFsIHN5bmMuCisgIFNFTEVDVCB0LnB1Ymxpc2hlZCwg c3luY2VkCisgICAgRlJPTSAoU0VMRUNUIERJU1RJTkNUIHJlbGlkOjpyZWdjbGFzcyBBUyBw dWJsaXNoZWQKKyAgICAgICAgICAgIEZST00gcGdfZ2V0X3B1YmxpY2F0aW9uX3RhYmxlcyhW QVJJQURJQyBwdWJuYW1lcykpIHQKKyAgICBKT0lOIExBVEVSQUwgcGdfZ2V0X3B1YmxpY2F0 aW9uX3JlbHNfdG9fc3luYyh0LnB1Ymxpc2hlZCwgVkFSSUFESUMgcHVibmFtZXMpIHN5bmNl ZAorICAgICAgT04gdHJ1ZQorICAgIE9SREVSIEJZIDEsIDI7CiskJCBMQU5HVUFHRSBzcWw7 CiBDUkVBVEUgRlVOQ1RJT04gcHVibGlzaGVkX3N0cmVhbSAoVkFSSUFESUMgcHVibmFtZXMg dGV4dFtdKQogICAgICAgICAgICAgICAgIFJFVFVSTlMgVEFCTEUgKHB1Ym5hbWUgdGV4dCwg cHVibGlzaGVkIHJlZ2NsYXNzLCBzeW5jZWQgcmVnY2xhc3MpIEFTICQkCiAgIC0tIEZvciBl YWNoIHB1YmxpY2F0aW9uLCBzaG93IGVhY2ggcHVibGlzaGVkIHJvb3QgYWxvbmdzaWRlIHRo ZSB0YWJsZXMgd2hpY2gKQEAgLTE2OTcsNiArMTcwOCwxMiBAQCBTRUxFQ1QgKiBGUk9NIHBn X3B1YmxpY2F0aW9uX3RhYmxlczsKICBwdWIgICAgIHwgc2NoMSAgICAgICB8IHRibDEgICAg ICB8IHthfSAgICAgIHwgCiAoMSByb3cpCiAKK1NFTEVDVCAqIEZST00gcHVibGlzaGVkX3N5 bmMoJ3B1YicpOworIHB1Ymxpc2hlZCB8ICBzeW5jZWQgICAKKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tCisgc2NoMS50YmwxIHwgc2NoMS50YmwxCisoMSByb3cpCisKIFNFTEVDVCAqIEZS T00gcHVibGlzaGVkX3N0cmVhbSgncHViJyk7CiAgcHVibmFtZSB8IHB1Ymxpc2hlZCB8ICAg ICBzeW5jZWQgICAgICAKIC0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t LQpAQCAtMTczMCw2ICsxNzQ3LDEyIEBAIFNFTEVDVCAqIEZST00gcGdfcHVibGljYXRpb25f dGFibGVzOwogIHB1YiAgICAgfCBzY2gyICAgICAgIHwgdGJsMV9wYXJ0MSB8IHthfSAgICAg IHwgCiAoMSByb3cpCiAKK1NFTEVDVCAqIEZST00gcHVibGlzaGVkX3N5bmMoJ3B1YicpOwor ICAgIHB1Ymxpc2hlZCAgICB8ICAgICBzeW5jZWQgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0tCisgc2NoMi50YmwxX3BhcnQxIHwgc2NoMi50YmwxX3BhcnQx CisoMSByb3cpCisKIFNFTEVDVCAqIEZST00gcHVibGlzaGVkX3N0cmVhbSgncHViJyk7CiAg cHVibmFtZSB8ICAgIHB1Ymxpc2hlZCAgICB8ICAgICBzeW5jZWQgICAgICAKIC0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTc1MiwxMiArMTc3 NSwyNTUgQEAgU0VMRUNUICogRlJPTSBwZ19wdWJsaWNhdGlvbl90YWJsZXM7CiAgcHViICAg ICB8IHNjaDEgICAgICAgfCB0YmwxICAgICAgfCB7YX0gICAgICB8IAogKDEgcm93KQogCist LSBTYW5pdHkgY2hlY2sgY2FzZXMgZm9yIHBnX3NldF9sb2dpY2FsX3Jvb3QoKS4KK0NSRUFU RSBUQUJMRSBzY2gxLmlyb290IChhIGludCk7CitDUkVBVEUgVEFCTEUgc2NoMS5pcGFydDEg KGEgaW50KTsKK0NSRUFURSBUQUJMRSBzY2gxLmlwYXJ0MiAoKSBJTkhFUklUUyAoc2NoMS5p cm9vdCk7CistLSBtYXJraW5nIHJvb3RzIGJldHdlZW4gdW5yZWxhdGVkIHRhYmxlcyBpcyBu b3QgYWxsb3dlZAorU0VMRUNUIHBnX3NldF9sb2dpY2FsX3Jvb3QoJ3NjaDEuaXBhcnQxJywg J3NjaDEuaXJvb3QnKTsKK0VSUk9SOiAgdGFibGUgImlwYXJ0MSIgZG9lcyBub3QgaW5oZXJp dCBmcm9tIGludGVuZGVkIHJvb3QgdGFibGUgImlyb290IgorU0VMRUNUIHBnX3NldF9sb2dp Y2FsX3Jvb3QoJ3NjaDEuaXBhcnQyJywgJ3NjaDEudGJsMScpOworRVJST1I6ICB0YWJsZSAi aXBhcnQyIiBkb2VzIG5vdCBpbmhlcml0IGZyb20gaW50ZW5kZWQgcm9vdCB0YWJsZSAidGJs MSIKKy0tIGVzdGFibGlzaGluZyBhbiBpbmhlcml0YW5jZSByZWxhdGlvbnNoaXAgZml4ZXMg dGhlIHByb2JsZW0KK0FMVEVSIFRBQkxFIHNjaDEuaXBhcnQxIElOSEVSSVQgc2NoMS5pcm9v dDsKK1NFTEVDVCBwZ19zZXRfbG9naWNhbF9yb290KCdzY2gxLmlwYXJ0MScsICdzY2gxLmly b290Jyk7CisgcGdfc2V0X2xvZ2ljYWxfcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IAorKDEgcm93KQorCistLSBidXQgbXVsdGlwbGUgaW5oZXJpdGFuY2UgaXMgbm90IGFsbG93 ZWQKK0FMVEVSIFRBQkxFIHNjaDEuaXBhcnQyIElOSEVSSVQgc2NoMS5pcGFydDE7CitTRUxF Q1QgcGdfc2V0X2xvZ2ljYWxfcm9vdCgnc2NoMS5pcGFydDInLCAnc2NoMS5pcm9vdCcpOwor RVJST1I6ICB0YWJsZSAiaXBhcnQyIiBpbmhlcml0cyBmcm9tIG11bHRpcGxlIHRhYmxlcwor QUxURVIgVEFCTEUgc2NoMS5pcGFydDIgTk8gSU5IRVJJVCBzY2gxLmlwYXJ0MTsKK1NFTEVD VCBwZ19zZXRfbG9naWNhbF9yb290KCdzY2gxLmlwYXJ0MicsICdzY2gxLmlyb290Jyk7Cisg cGdfc2V0X2xvZ2ljYWxfcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93 KQorCistLSB0YWJsZSBvd25lcnNoaXAgbXVzdCBtYXRjaCwgbGlrZSBBVFRBQ0ggUEFSVElU SU9OCitDUkVBVEUgUk9MRSByZWdyZXNzX3Rlc3RfbWU7CitDUkVBVEUgUk9MRSByZWdyZXNz X3Rlc3Rfbm90X21lOworQ1JFQVRFIFRBQkxFIHJvb3QgKGEgaW50KTsKK0NSRUFURSBUQUJM RSBwYXJ0ICgpIElOSEVSSVRTIChyb290KTsKK0FMVEVSIFRBQkxFIHJvb3QgT1dORVIgVE8g cmVncmVzc190ZXN0X21lOworQUxURVIgVEFCTEUgcGFydCBPV05FUiBUTyByZWdyZXNzX3Rl c3Rfbm90X21lOworU0VUIFNFU1NJT04gQVVUSE9SSVpBVElPTiByZWdyZXNzX3Rlc3RfbWU7 CitTRUxFQ1QgcGdfc2V0X2xvZ2ljYWxfcm9vdCgncGFydCcsICdyb290Jyk7IC0tIHNob3Vs ZCBmYWlsCitFUlJPUjogIG11c3QgYmUgb3duZXIgb2YgdGFibGUgcGFydAorUkVTRVQgU0VT U0lPTiBBVVRIT1JJWkFUSU9OOworQUxURVIgVEFCTEUgcm9vdCBPV05FUiBUTyByZWdyZXNz X3Rlc3Rfbm90X21lOworQUxURVIgVEFCTEUgcGFydCBPV05FUiBUTyByZWdyZXNzX3Rlc3Rf bWU7CitTRVQgU0VTU0lPTiBBVVRIT1JJWkFUSU9OIHJlZ3Jlc3NfdGVzdF9tZTsKK1NFTEVD VCBwZ19zZXRfbG9naWNhbF9yb290KCdwYXJ0JywgJ3Jvb3QnKTsgLS0gc2hvdWxkIGFsc28g ZmFpbAorRVJST1I6ICBtdXN0IGJlIG93bmVyIG9mIHRhYmxlIHJvb3QKK1JFU0VUIFNFU1NJ T04gQVVUSE9SSVpBVElPTjsKK0RST1AgVEFCTEUgcm9vdCwgcGFydDsKK0RST1AgUk9MRSBy ZWdyZXNzX3Rlc3Rfbm90X21lOworRFJPUCBST0xFIHJlZ3Jlc3NfdGVzdF9tZTsKKy0tIFRP RE86IG1ha2Ugc3VyZSBleGlzdGluZyBsb2dpY2FsIGRlc2NlbmRhbnQgY2FuJ3QgYmUgQUxU RVJlZCBbTk9dIElOSEVSSVQKKy0tIE1peGVkIHB1YmxpY2F0aW9uIHNldHRpbmdzIGZvciBw dWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCwgYXQgZGlmZmVyZW50CistLSBsZXZlbHMgb2Yg dGhlIGluaGVyaXRhbmNlIHRyZWUsIHRvIHBpbiBjb3JyZWN0IGJlaGF2aW9yIGluIHRoZSB3 b3JzdCBjYXNlcy4KK0NSRUFURSBUQUJMRSBzY2gxLmlwYXJ0MV9hICgpIElOSEVSSVRTIChz Y2gxLmlwYXJ0MSk7CitDUkVBVEUgVEFCTEUgc2NoMS5pcGFydDFfYTEgKCkgSU5IRVJJVFMg KHNjaDEuaXBhcnQxX2EpOworU0VMRUNUIHBnX3NldF9sb2dpY2FsX3Jvb3QoJ3NjaDEuaXBh cnQxX2EnLCAnc2NoMS5pcGFydDEnKTsKKyBwZ19zZXRfbG9naWNhbF9yb290IAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKK1NFTEVDVCBwZ19zZXRfbG9naWNhbF9y b290KCdzY2gxLmlwYXJ0MV9hMScsICdzY2gxLmlwYXJ0MV9hJyk7CisgcGdfc2V0X2xvZ2lj YWxfcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCitDUkVBVEUg UFVCTElDQVRJT04gaXB1Yl9yb290IEZPUiBUQUJMRSBzY2gxLmlyb290OworQ1JFQVRFIFBV QkxJQ0FUSU9OIGlwdWJfcGFydDEgRk9SIFRBQkxFIE9OTFkgc2NoMS5pcGFydDEsIE9OTFkg c2NoMS5pcGFydDFfYTEKKyAgICAgICBXSVRIIChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9v dCk7CitDUkVBVEUgUFVCTElDQVRJT04gaXB1Yl9vdGhlciBGT1IgVEFCTEUgT05MWSBzY2gx Lmlyb290LCBPTkxZIHNjaDEuaXBhcnQxX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgT05MWSBzY2gxLmlwYXJ0MgorICAgICAgIFdJVEggKHB1Ymxpc2hf dmlhX3BhcnRpdGlvbl9yb290KTsKKy0tIEF0IHRoaXMgcG9pbnQsIHRoZSBwdWJsaXNoZWQg dHJlZXMgbG9vayBsaWtlIHRoaXM6CistLQorLS0gaXB1Yl9yb290ICAgICAgICAgICAgIGlw dWJfcGFydDEgKHB1YnZpYXJvb3QpICAgIGlwdWJfb3RoZXIgKHB1YnZpYXJvb3QpCistLSAt LS0tLS0tLS0tLS0tLS0tLS0gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKy0tICBpcm9vdCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaXJvb3QKKy0tICArLSBpcGFydDEgICAgICAgICAgICAgICAg aXBhcnQxICAgICAgICAgICAgICAgICAgfAorLS0gIHwgKy0gaXBhcnQxX2EgICAgICAgICAg ICB8ICAgICAgICAgICAgICAgICAgICAgICArLS0tIGlwYXJ0MV9hCistLSAgfCAgICstIGlw YXJ0MV9hMSAgICAgICAgICstLS0gaXBhcnQxX2ExICAgICAgICAgIHwKKy0tICArLSBpcGFy dDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0gaXBhcnQyCist LSBXaGF0IGEgc3Vic2NyaXB0aW9uIHRvIG9ubHkgaXB1Yl9yb290IHNob3VsZCBzZWUKK1NF TEVDVCByZWxpZDo6cmVnY2xhc3MgRlJPTSBwZ19nZXRfcHVibGljYXRpb25fdGFibGVzKCdp cHViX3Jvb3QnKTsKKyAgICAgcmVsaWQgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0KKyBzY2gx Lmlyb290Cisgc2NoMS5pcGFydDEKKyBzY2gxLmlwYXJ0MgorIHNjaDEuaXBhcnQxX2EKKyBz Y2gxLmlwYXJ0MV9hMQorKDUgcm93cykKKworU0VMRUNUICogRlJPTSBwdWJsaXNoZWRfc3lu YygnaXB1Yl9yb290Jyk7CisgICBwdWJsaXNoZWQgICAgfCAgICAgc3luY2VkICAgICAKKy0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLQorIHNjaDEuaXJvb3QgICAgIHwgc2No MS5pcm9vdAorIHNjaDEuaXBhcnQxICAgIHwgc2NoMS5pcGFydDEKKyBzY2gxLmlwYXJ0MiAg ICB8IHNjaDEuaXBhcnQyCisgc2NoMS5pcGFydDFfYSAgfCBzY2gxLmlwYXJ0MV9hCisgc2No MS5pcGFydDFfYTEgfCBzY2gxLmlwYXJ0MV9hMQorKDUgcm93cykKKworU0VMRUNUICogRlJP TSBwdWJsaXNoZWRfc3RyZWFtKCdpcHViX3Jvb3QnKTsKKyAgcHVibmFtZSAgfCAgIHB1Ymxp c2hlZCAgICB8ICAgICBzeW5jZWQgICAgIAorLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tCisgaXB1Yl9yb290IHwgc2NoMS5pcm9vdCAgICAgfCBzY2gx Lmlyb290CisgaXB1Yl9yb290IHwgc2NoMS5pcGFydDEgICAgfCBzY2gxLmlwYXJ0MQorIGlw dWJfcm9vdCB8IHNjaDEuaXBhcnQyICAgIHwgc2NoMS5pcGFydDIKKyBpcHViX3Jvb3QgfCBz Y2gxLmlwYXJ0MV9hICB8IHNjaDEuaXBhcnQxX2EKKyBpcHViX3Jvb3QgfCBzY2gxLmlwYXJ0 MV9hMSB8IHNjaDEuaXBhcnQxX2ExCisoNSByb3dzKQorCistLSBXaGF0IGEgc3Vic2NyaXB0 aW9uIHRvIG9ubHkgaXB1Yl9wYXJ0MSBzaG91bGQgc2VlCitTRUxFQ1QgcmVsaWQ6OnJlZ2Ns YXNzIEZST00gcGdfZ2V0X3B1YmxpY2F0aW9uX3RhYmxlcygnaXB1Yl9wYXJ0MScpOworICAg IHJlbGlkICAgIAorLS0tLS0tLS0tLS0tLQorIHNjaDEuaXBhcnQxCisoMSByb3cpCisKK1NF TEVDVCAqIEZST00gcHVibGlzaGVkX3N5bmMoJ2lwdWJfcGFydDEnKTsKKyAgcHVibGlzaGVk ICB8ICAgICBzeW5jZWQgICAgIAorLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tCisg c2NoMS5pcGFydDEgfCBzY2gxLmlwYXJ0MQorIHNjaDEuaXBhcnQxIHwgc2NoMS5pcGFydDFf YTEKKygyIHJvd3MpCisKK1NFTEVDVCAqIEZST00gcHVibGlzaGVkX3N0cmVhbSgnaXB1Yl9w YXJ0MScpOworICBwdWJuYW1lICAgfCAgcHVibGlzaGVkICB8ICAgICBzeW5jZWQgICAgIAor LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLQorIGlwdWJfcGFy dDEgfCBzY2gxLmlwYXJ0MSB8IHNjaDEuaXBhcnQxCisgaXB1Yl9wYXJ0MSB8IHNjaDEuaXBh cnQxIHwgc2NoMS5pcGFydDFfYTEKKygyIHJvd3MpCisKKy0tIFdoYXQgYSBzdWJzY3JpcHRp b24gdG8gYm90aCBpcHViX3Jvb3QgYW5kIGlwdWJfcGFydDEgc2hvdWxkIHNlZQorU0VMRUNU IHB1Ym5hbWUsIHJlbGlkOjpyZWdjbGFzcworICBGUk9NIHBnX2dldF9wdWJsaWNhdGlvbl90 YWJsZXMoJ2lwdWJfcm9vdCcsICdpcHViX3BhcnQxJykgdAorICBKT0lOIHBnX3B1YmxpY2F0 aW9uIHAgT04gKHAub2lkID0gdC5wdWJpZCk7CisgIHB1Ym5hbWUgICB8ICAgICByZWxpZCAg ICAgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tCisgaXB1Yl9yb290ICB8IHNjaDEu aXJvb3QKKyBpcHViX3Jvb3QgIHwgc2NoMS5pcGFydDEKKyBpcHViX3Jvb3QgIHwgc2NoMS5p cGFydDIKKyBpcHViX3Jvb3QgIHwgc2NoMS5pcGFydDFfYQorIGlwdWJfcGFydDEgfCBzY2gx LmlwYXJ0MQorKDUgcm93cykKKworU0VMRUNUICogRlJPTSBwdWJsaXNoZWRfc3luYygnaXB1 Yl9yb290JywgJ2lwdWJfcGFydDEnKTsKKyAgIHB1Ymxpc2hlZCAgIHwgICAgIHN5bmNlZCAg ICAgCistLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLQorIHNjaDEuaXJvb3QgICAg fCBzY2gxLmlyb290Cisgc2NoMS5pcGFydDEgICB8IHNjaDEuaXBhcnQxCisgc2NoMS5pcGFy dDEgICB8IHNjaDEuaXBhcnQxX2ExCisgc2NoMS5pcGFydDIgICB8IHNjaDEuaXBhcnQyCisg c2NoMS5pcGFydDFfYSB8IHNjaDEuaXBhcnQxX2EKKyg1IHJvd3MpCisKK1NFTEVDVCAqIEZS T00gcHVibGlzaGVkX3N0cmVhbSgnaXB1Yl9yb290JywgJ2lwdWJfcGFydDEnKTsKKyAgcHVi bmFtZSAgIHwgICBwdWJsaXNoZWQgICB8ICAgICBzeW5jZWQgICAgIAorLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tCisgaXB1Yl9yb290ICB8IHNjaDEu aXJvb3QgICAgfCBzY2gxLmlyb290CisgaXB1Yl9yb290ICB8IHNjaDEuaXBhcnQxICAgfCBz Y2gxLmlwYXJ0MQorIGlwdWJfcm9vdCAgfCBzY2gxLmlwYXJ0MSAgIHwgc2NoMS5pcGFydDFf YTEKKyBpcHViX3Jvb3QgIHwgc2NoMS5pcGFydDIgICB8IHNjaDEuaXBhcnQyCisgaXB1Yl9y b290ICB8IHNjaDEuaXBhcnQxX2EgfCBzY2gxLmlwYXJ0MV9hCisgaXB1Yl9wYXJ0MSB8IHNj aDEuaXBhcnQxICAgfCBzY2gxLmlwYXJ0MQorIGlwdWJfcGFydDEgfCBzY2gxLmlwYXJ0MSAg IHwgc2NoMS5pcGFydDFfYTEKKyg3IHJvd3MpCisKKy0tIFdoYXQgYSBzdWJzY3JpcHRpb24g dG8gYm90aCBpcHViX3BhcnQxIGFuZCBpcHViX290aGVyIHNob3VsZCBzZWUKK1NFTEVDVCBw dWJuYW1lLCByZWxpZDo6cmVnY2xhc3MKKyAgRlJPTSBwZ19nZXRfcHVibGljYXRpb25fdGFi bGVzKCdpcHViX3BhcnQxJywgJ2lwdWJfb3RoZXInKSB0CisgIEpPSU4gcGdfcHVibGljYXRp b24gcCBPTiAocC5vaWQgPSB0LnB1YmlkKTsKKyAgcHVibmFtZSAgIHwgICAgcmVsaWQgICAg CistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLQorIGlwdWJfcGFydDEgfCBzY2gxLmlwYXJ0 MQorIGlwdWJfb3RoZXIgfCBzY2gxLmlyb290CisoMiByb3dzKQorCitTRUxFQ1QgKiBGUk9N IHB1Ymxpc2hlZF9zeW5jKCdpcHViX3BhcnQxJywgJ2lwdWJfb3RoZXInKTsKKyAgcHVibGlz aGVkICB8ICAgICBzeW5jZWQgICAgIAorLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t Cisgc2NoMS5pcm9vdCAgfCBzY2gxLmlyb290Cisgc2NoMS5pcm9vdCAgfCBzY2gxLmlwYXJ0 MgorIHNjaDEuaXJvb3QgIHwgc2NoMS5pcGFydDFfYQorIHNjaDEuaXBhcnQxIHwgc2NoMS5p cGFydDEKKyBzY2gxLmlwYXJ0MSB8IHNjaDEuaXBhcnQxX2ExCisoNSByb3dzKQorCitTRUxF Q1QgKiBGUk9NIHB1Ymxpc2hlZF9zdHJlYW0oJ2lwdWJfcGFydDEnLCAnaXB1Yl9vdGhlcicp OworICBwdWJuYW1lICAgfCAgcHVibGlzaGVkICB8ICAgICBzeW5jZWQgICAgIAorLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLQorIGlwdWJfcGFydDEgfCBz Y2gxLmlwYXJ0MSB8IHNjaDEuaXBhcnQxCisgaXB1Yl9wYXJ0MSB8IHNjaDEuaXBhcnQxIHwg c2NoMS5pcGFydDFfYTEKKyBpcHViX290aGVyIHwgc2NoMS5pcm9vdCAgfCBzY2gxLmlyb290 CisgaXB1Yl9vdGhlciB8IHNjaDEuaXJvb3QgIHwgc2NoMS5pcGFydDIKKyBpcHViX290aGVy IHwgc2NoMS5pcm9vdCAgfCBzY2gxLmlwYXJ0MV9hCisoNSByb3dzKQorCistLSBXaGF0IGEg c3Vic2NyaXB0aW9uIHRvIGFsbCB0aHJlZSBzaG91bGQgc2VlCitTRUxFQ1QgcHVibmFtZSwg cmVsaWQ6OnJlZ2NsYXNzCisgIEZST00gcGdfZ2V0X3B1YmxpY2F0aW9uX3RhYmxlcygnaXB1 Yl9yb290JywgJ2lwdWJfcGFydDEnLCAnaXB1Yl9vdGhlcicpIHQKKyAgSk9JTiBwZ19wdWJs aWNhdGlvbiBwIE9OIChwLm9pZCA9IHQucHViaWQpOworICBwdWJuYW1lICAgfCAgICByZWxp ZCAgICAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tCisgaXB1Yl9yb290ICB8IHNjaDEu aXJvb3QKKyBpcHViX3Jvb3QgIHwgc2NoMS5pcGFydDEKKyBpcHViX3BhcnQxIHwgc2NoMS5p cGFydDEKKyBpcHViX290aGVyIHwgc2NoMS5pcm9vdAorKDQgcm93cykKKworU0VMRUNUICog RlJPTSBwdWJsaXNoZWRfc3luYygnaXB1Yl9yb290JywgJ2lwdWJfcGFydDEnLCAnaXB1Yl9v dGhlcicpOworICBwdWJsaXNoZWQgIHwgICAgIHN5bmNlZCAgICAgCistLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0KKyBzY2gxLmlyb290ICB8IHNjaDEuaXJvb3QKKyBzY2gxLmly b290ICB8IHNjaDEuaXBhcnQyCisgc2NoMS5pcm9vdCAgfCBzY2gxLmlwYXJ0MV9hCisgc2No MS5pcGFydDEgfCBzY2gxLmlwYXJ0MQorIHNjaDEuaXBhcnQxIHwgc2NoMS5pcGFydDFfYTEK Kyg1IHJvd3MpCisKK1NFTEVDVCAqIEZST00gcHVibGlzaGVkX3N0cmVhbSgnaXB1Yl9yb290 JywgJ2lwdWJfcGFydDEnLCAnaXB1Yl9vdGhlcicpOworICBwdWJuYW1lICAgfCAgcHVibGlz aGVkICB8ICAgICBzeW5jZWQgICAgIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLQorIGlwdWJfcm9vdCAgfCBzY2gxLmlyb290ICB8IHNjaDEuaXJvb3QK KyBpcHViX3Jvb3QgIHwgc2NoMS5pcm9vdCAgfCBzY2gxLmlwYXJ0MgorIGlwdWJfcm9vdCAg fCBzY2gxLmlyb290ICB8IHNjaDEuaXBhcnQxX2EKKyBpcHViX3Jvb3QgIHwgc2NoMS5pcGFy dDEgfCBzY2gxLmlwYXJ0MQorIGlwdWJfcm9vdCAgfCBzY2gxLmlwYXJ0MSB8IHNjaDEuaXBh cnQxX2ExCisgaXB1Yl9wYXJ0MSB8IHNjaDEuaXBhcnQxIHwgc2NoMS5pcGFydDEKKyBpcHVi X3BhcnQxIHwgc2NoMS5pcGFydDEgfCBzY2gxLmlwYXJ0MV9hMQorIGlwdWJfb3RoZXIgfCBz Y2gxLmlyb290ICB8IHNjaDEuaXJvb3QKKyBpcHViX290aGVyIHwgc2NoMS5pcm9vdCAgfCBz Y2gxLmlwYXJ0MgorIGlwdWJfb3RoZXIgfCBzY2gxLmlyb290ICB8IHNjaDEuaXBhcnQxX2EK KygxMCByb3dzKQorCitEUk9QIFBVQkxJQ0FUSU9OIGlwdWJfb3RoZXI7CitEUk9QIFBVQkxJ Q0FUSU9OIGlwdWJfcGFydDE7CitEUk9QIFBVQkxJQ0FUSU9OIGlwdWJfcm9vdDsKIFJFU0VU IGNsaWVudF9taW5fbWVzc2FnZXM7CiBEUk9QIFBVQkxJQ0FUSU9OIHB1YjsKIERST1AgVEFC TEUgc2NoMS50YmwxOworRFJPUCBUQUJMRSBzY2gxLmlwYXJ0MV9hMTsKK0RST1AgVEFCTEUg c2NoMS5pcGFydDFfYTsKK0RST1AgVEFCTEUgc2NoMS5pcGFydDE7CitEUk9QIFRBQkxFIHNj aDEuaXBhcnQyOworRFJPUCBUQUJMRSBzY2gxLmlyb290OwogRFJPUCBTQ0hFTUEgc2NoMSBj YXNjYWRlOwogRFJPUCBTQ0hFTUEgc2NoMiBjYXNjYWRlOwogRFJPUCBGVU5DVElPTiBwdWJs aXNoZWRfc3RyZWFtOworRFJPUCBGVU5DVElPTiBwdWJsaXNoZWRfc3luYzsKIFJFU0VUIFNF U1NJT04gQVVUSE9SSVpBVElPTjsKIERST1AgUk9MRSByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIsIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlcjI7CiBEUk9QIFJPTEUgcmVncmVzc19wdWJs aWNhdGlvbl91c2VyX2R1bW15OwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwv cHVibGljYXRpb24uc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcHVibGljYXRpb24uc3Fs CmluZGV4IDZiZjk1NTRkNDguLmE0OThjNTM4NjIgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3Jl Z3Jlc3Mvc3FsL3B1YmxpY2F0aW9uLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9w dWJsaWNhdGlvbi5zcWwKQEAgLTYsNiArNiwxOCBAQCBDUkVBVEUgUk9MRSByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIyOwogQ1JFQVRFIFJPTEUgcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy X2R1bW15IExPR0lOIE5PU1VQRVJVU0VSOwogU0VUIFNFU1NJT04gQVVUSE9SSVpBVElPTiAn cmVncmVzc19wdWJsaWNhdGlvbl91c2VyJzsKIAorQ1JFQVRFIEZVTkNUSU9OIHB1Ymxpc2hl ZF9zeW5jIChWQVJJQURJQyBwdWJuYW1lcyB0ZXh0W10pCisgICAgICAgICAgICAgICAgUkVU VVJOUyBUQUJMRSAocHVibGlzaGVkIHJlZ2NsYXNzLCBzeW5jZWQgcmVnY2xhc3MpIEFTICQk CisgIC0tIFNob3cgZWFjaCBwdWJsaXNoZWQgdGFibGUgYWxvbmdzaWRlIHRoZSB0YWJsZXMg dG8gYmUgY29waWVkIGludG8gaXQgZHVyaW5nCisgIC0tIGluaXRpYWwgc3luYy4KKyAgU0VM RUNUIHQucHVibGlzaGVkLCBzeW5jZWQKKyAgICBGUk9NIChTRUxFQ1QgRElTVElOQ1QgcmVs aWQ6OnJlZ2NsYXNzIEFTIHB1Ymxpc2hlZAorICAgICAgICAgICAgRlJPTSBwZ19nZXRfcHVi bGljYXRpb25fdGFibGVzKFZBUklBRElDIHB1Ym5hbWVzKSkgdAorICAgIEpPSU4gTEFURVJB TCBwZ19nZXRfcHVibGljYXRpb25fcmVsc190b19zeW5jKHQucHVibGlzaGVkLCBWQVJJQURJ QyBwdWJuYW1lcykgc3luY2VkCisgICAgICBPTiB0cnVlCisgICAgT1JERVIgQlkgMSwgMjsK KyQkIExBTkdVQUdFIHNxbDsKKwogQ1JFQVRFIEZVTkNUSU9OIHB1Ymxpc2hlZF9zdHJlYW0g KFZBUklBRElDIHB1Ym5hbWVzIHRleHRbXSkKICAgICAgICAgICAgICAgICBSRVRVUk5TIFRB QkxFIChwdWJuYW1lIHRleHQsIHB1Ymxpc2hlZCByZWdjbGFzcywgc3luY2VkIHJlZ2NsYXNz KSBBUyAkJAogICAtLSBGb3IgZWFjaCBwdWJsaWNhdGlvbiwgc2hvdyBlYWNoIHB1Ymxpc2hl ZCByb290IGFsb25nc2lkZSB0aGUgdGFibGVzIHdoaWNoCkBAIC0xMDc2LDYgKzEwODgsNyBA QCBTRUxFQ1QgKiBGUk9NIHBnX3B1YmxpY2F0aW9uX3RhYmxlczsKIC0tIFRhYmxlIHB1Ymxp Y2F0aW9uIHRoYXQgaW5jbHVkZXMgYm90aCB0aGUgcGFyZW50IHRhYmxlIGFuZCB0aGUgY2hp bGQgdGFibGUKIEFMVEVSIFBVQkxJQ0FUSU9OIHB1YiBBREQgVEFCTEUgc2NoMS50YmwxOwog U0VMRUNUICogRlJPTSBwZ19wdWJsaWNhdGlvbl90YWJsZXM7CitTRUxFQ1QgKiBGUk9NIHB1 Ymxpc2hlZF9zeW5jKCdwdWInKTsKIFNFTEVDVCAqIEZST00gcHVibGlzaGVkX3N0cmVhbSgn cHViJyk7CiAKIERST1AgUFVCTElDQVRJT04gcHViOwpAQCAtMTA5MSw2ICsxMTA0LDcgQEAg U0VMRUNUICogRlJPTSBwZ19wdWJsaWNhdGlvbl90YWJsZXM7CiAtLSBUYWJsZSBwdWJsaWNh dGlvbiB0aGF0IGluY2x1ZGVzIGJvdGggdGhlIHBhcmVudCB0YWJsZSBhbmQgdGhlIGNoaWxk IHRhYmxlCiBBTFRFUiBQVUJMSUNBVElPTiBwdWIgQUREIFRBQkxFIHNjaDEudGJsMTsKIFNF TEVDVCAqIEZST00gcGdfcHVibGljYXRpb25fdGFibGVzOworU0VMRUNUICogRlJPTSBwdWJs aXNoZWRfc3luYygncHViJyk7CiBTRUxFQ1QgKiBGUk9NIHB1Ymxpc2hlZF9zdHJlYW0oJ3B1 YicpOwogCiBEUk9QIFBVQkxJQ0FUSU9OIHB1YjsKQEAgLTExMDUsMTIgKzExMTksMTE5IEBA IEFMVEVSIFRBQkxFIHNjaDEudGJsMSBBVFRBQ0ggUEFSVElUSU9OIHNjaDEudGJsMV9wYXJ0 MyBGT1IgVkFMVUVTIEZST00gKDIwKSB0byAoCiBDUkVBVEUgUFVCTElDQVRJT04gcHViIEZP UiBUQUJMRVMgSU4gU0NIRU1BIHNjaDEgV0lUSCAoUFVCTElTSF9WSUFfUEFSVElUSU9OX1JP T1Q9MSk7CiBTRUxFQ1QgKiBGUk9NIHBnX3B1YmxpY2F0aW9uX3RhYmxlczsKIAorLS0gU2Fu aXR5IGNoZWNrIGNhc2VzIGZvciBwZ19zZXRfbG9naWNhbF9yb290KCkuCitDUkVBVEUgVEFC TEUgc2NoMS5pcm9vdCAoYSBpbnQpOworQ1JFQVRFIFRBQkxFIHNjaDEuaXBhcnQxIChhIGlu dCk7CitDUkVBVEUgVEFCTEUgc2NoMS5pcGFydDIgKCkgSU5IRVJJVFMgKHNjaDEuaXJvb3Qp OworCistLSBtYXJraW5nIHJvb3RzIGJldHdlZW4gdW5yZWxhdGVkIHRhYmxlcyBpcyBub3Qg YWxsb3dlZAorU0VMRUNUIHBnX3NldF9sb2dpY2FsX3Jvb3QoJ3NjaDEuaXBhcnQxJywgJ3Nj aDEuaXJvb3QnKTsKK1NFTEVDVCBwZ19zZXRfbG9naWNhbF9yb290KCdzY2gxLmlwYXJ0Mics ICdzY2gxLnRibDEnKTsKKworLS0gZXN0YWJsaXNoaW5nIGFuIGluaGVyaXRhbmNlIHJlbGF0 aW9uc2hpcCBmaXhlcyB0aGUgcHJvYmxlbQorQUxURVIgVEFCTEUgc2NoMS5pcGFydDEgSU5I RVJJVCBzY2gxLmlyb290OworU0VMRUNUIHBnX3NldF9sb2dpY2FsX3Jvb3QoJ3NjaDEuaXBh cnQxJywgJ3NjaDEuaXJvb3QnKTsKKworLS0gYnV0IG11bHRpcGxlIGluaGVyaXRhbmNlIGlz IG5vdCBhbGxvd2VkCitBTFRFUiBUQUJMRSBzY2gxLmlwYXJ0MiBJTkhFUklUIHNjaDEuaXBh cnQxOworU0VMRUNUIHBnX3NldF9sb2dpY2FsX3Jvb3QoJ3NjaDEuaXBhcnQyJywgJ3NjaDEu aXJvb3QnKTsKKworQUxURVIgVEFCTEUgc2NoMS5pcGFydDIgTk8gSU5IRVJJVCBzY2gxLmlw YXJ0MTsKK1NFTEVDVCBwZ19zZXRfbG9naWNhbF9yb290KCdzY2gxLmlwYXJ0MicsICdzY2gx Lmlyb290Jyk7CisKKy0tIHRhYmxlIG93bmVyc2hpcCBtdXN0IG1hdGNoLCBsaWtlIEFUVEFD SCBQQVJUSVRJT04KK0NSRUFURSBST0xFIHJlZ3Jlc3NfdGVzdF9tZTsKK0NSRUFURSBST0xF IHJlZ3Jlc3NfdGVzdF9ub3RfbWU7CitDUkVBVEUgVEFCTEUgcm9vdCAoYSBpbnQpOworQ1JF QVRFIFRBQkxFIHBhcnQgKCkgSU5IRVJJVFMgKHJvb3QpOworQUxURVIgVEFCTEUgcm9vdCBP V05FUiBUTyByZWdyZXNzX3Rlc3RfbWU7CitBTFRFUiBUQUJMRSBwYXJ0IE9XTkVSIFRPIHJl Z3Jlc3NfdGVzdF9ub3RfbWU7CitTRVQgU0VTU0lPTiBBVVRIT1JJWkFUSU9OIHJlZ3Jlc3Nf dGVzdF9tZTsKK1NFTEVDVCBwZ19zZXRfbG9naWNhbF9yb290KCdwYXJ0JywgJ3Jvb3QnKTsg LS0gc2hvdWxkIGZhaWwKK1JFU0VUIFNFU1NJT04gQVVUSE9SSVpBVElPTjsKK0FMVEVSIFRB QkxFIHJvb3QgT1dORVIgVE8gcmVncmVzc190ZXN0X25vdF9tZTsKK0FMVEVSIFRBQkxFIHBh cnQgT1dORVIgVE8gcmVncmVzc190ZXN0X21lOworU0VUIFNFU1NJT04gQVVUSE9SSVpBVElP TiByZWdyZXNzX3Rlc3RfbWU7CitTRUxFQ1QgcGdfc2V0X2xvZ2ljYWxfcm9vdCgncGFydCcs ICdyb290Jyk7IC0tIHNob3VsZCBhbHNvIGZhaWwKK1JFU0VUIFNFU1NJT04gQVVUSE9SSVpB VElPTjsKK0RST1AgVEFCTEUgcm9vdCwgcGFydDsKK0RST1AgUk9MRSByZWdyZXNzX3Rlc3Rf bm90X21lOworRFJPUCBST0xFIHJlZ3Jlc3NfdGVzdF9tZTsKKworLS0gVE9ETzogbWFrZSBz dXJlIGV4aXN0aW5nIGxvZ2ljYWwgZGVzY2VuZGFudCBjYW4ndCBiZSBBTFRFUmVkIFtOT10g SU5IRVJJVAorCistLSBNaXhlZCBwdWJsaWNhdGlvbiBzZXR0aW5ncyBmb3IgcHVibGlzaF92 aWFfcGFydGl0aW9uX3Jvb3QsIGF0IGRpZmZlcmVudAorLS0gbGV2ZWxzIG9mIHRoZSBpbmhl cml0YW5jZSB0cmVlLCB0byBwaW4gY29ycmVjdCBiZWhhdmlvciBpbiB0aGUgd29yc3QgY2Fz ZXMuCitDUkVBVEUgVEFCTEUgc2NoMS5pcGFydDFfYSAoKSBJTkhFUklUUyAoc2NoMS5pcGFy dDEpOworQ1JFQVRFIFRBQkxFIHNjaDEuaXBhcnQxX2ExICgpIElOSEVSSVRTIChzY2gxLmlw YXJ0MV9hKTsKKworU0VMRUNUIHBnX3NldF9sb2dpY2FsX3Jvb3QoJ3NjaDEuaXBhcnQxX2En LCAnc2NoMS5pcGFydDEnKTsKK1NFTEVDVCBwZ19zZXRfbG9naWNhbF9yb290KCdzY2gxLmlw YXJ0MV9hMScsICdzY2gxLmlwYXJ0MV9hJyk7CisKK0NSRUFURSBQVUJMSUNBVElPTiBpcHVi X3Jvb3QgRk9SIFRBQkxFIHNjaDEuaXJvb3Q7CitDUkVBVEUgUFVCTElDQVRJT04gaXB1Yl9w YXJ0MSBGT1IgVEFCTEUgT05MWSBzY2gxLmlwYXJ0MSwgT05MWSBzY2gxLmlwYXJ0MV9hMQor ICAgICAgIFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290KTsKK0NSRUFURSBQVUJM SUNBVElPTiBpcHViX290aGVyIEZPUiBUQUJMRSBPTkxZIHNjaDEuaXJvb3QsIE9OTFkgc2No MS5pcGFydDFfYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBP TkxZIHNjaDEuaXBhcnQyCisgICAgICAgV0lUSCAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jv b3QpOworCistLSBBdCB0aGlzIHBvaW50LCB0aGUgcHVibGlzaGVkIHRyZWVzIGxvb2sgbGlr ZSB0aGlzOgorLS0KKy0tIGlwdWJfcm9vdCAgICAgICAgICAgICBpcHViX3BhcnQxIChwdWJ2 aWFyb290KSAgICBpcHViX290aGVyIChwdWJ2aWFyb290KQorLS0gLS0tLS0tLS0tLS0tLS0t LS0tICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCistLSAgaXJvb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGlyb290CistLSAgKy0gaXBhcnQxICAgICAgICAgICAgICAgIGlwYXJ0MSAgICAgICAg ICAgICAgICAgIHwKKy0tICB8ICstIGlwYXJ0MV9hICAgICAgICAgICAgfCAgICAgICAgICAg ICAgICAgICAgICAgKy0tLSBpcGFydDFfYQorLS0gIHwgICArLSBpcGFydDFfYTEgICAgICAg ICArLS0tIGlwYXJ0MV9hMSAgICAgICAgICB8CistLSAgKy0gaXBhcnQyICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICstIGlwYXJ0MgorCistLSBXaGF0IGEgc3Vi c2NyaXB0aW9uIHRvIG9ubHkgaXB1Yl9yb290IHNob3VsZCBzZWUKK1NFTEVDVCByZWxpZDo6 cmVnY2xhc3MgRlJPTSBwZ19nZXRfcHVibGljYXRpb25fdGFibGVzKCdpcHViX3Jvb3QnKTsK K1NFTEVDVCAqIEZST00gcHVibGlzaGVkX3N5bmMoJ2lwdWJfcm9vdCcpOworU0VMRUNUICog RlJPTSBwdWJsaXNoZWRfc3RyZWFtKCdpcHViX3Jvb3QnKTsKKworLS0gV2hhdCBhIHN1YnNj cmlwdGlvbiB0byBvbmx5IGlwdWJfcGFydDEgc2hvdWxkIHNlZQorU0VMRUNUIHJlbGlkOjpy ZWdjbGFzcyBGUk9NIHBnX2dldF9wdWJsaWNhdGlvbl90YWJsZXMoJ2lwdWJfcGFydDEnKTsK K1NFTEVDVCAqIEZST00gcHVibGlzaGVkX3N5bmMoJ2lwdWJfcGFydDEnKTsKK1NFTEVDVCAq IEZST00gcHVibGlzaGVkX3N0cmVhbSgnaXB1Yl9wYXJ0MScpOworCistLSBXaGF0IGEgc3Vi c2NyaXB0aW9uIHRvIGJvdGggaXB1Yl9yb290IGFuZCBpcHViX3BhcnQxIHNob3VsZCBzZWUK K1NFTEVDVCBwdWJuYW1lLCByZWxpZDo6cmVnY2xhc3MKKyAgRlJPTSBwZ19nZXRfcHVibGlj YXRpb25fdGFibGVzKCdpcHViX3Jvb3QnLCAnaXB1Yl9wYXJ0MScpIHQKKyAgSk9JTiBwZ19w dWJsaWNhdGlvbiBwIE9OIChwLm9pZCA9IHQucHViaWQpOworU0VMRUNUICogRlJPTSBwdWJs aXNoZWRfc3luYygnaXB1Yl9yb290JywgJ2lwdWJfcGFydDEnKTsKK1NFTEVDVCAqIEZST00g cHVibGlzaGVkX3N0cmVhbSgnaXB1Yl9yb290JywgJ2lwdWJfcGFydDEnKTsKKworLS0gV2hh dCBhIHN1YnNjcmlwdGlvbiB0byBib3RoIGlwdWJfcGFydDEgYW5kIGlwdWJfb3RoZXIgc2hv dWxkIHNlZQorU0VMRUNUIHB1Ym5hbWUsIHJlbGlkOjpyZWdjbGFzcworICBGUk9NIHBnX2dl dF9wdWJsaWNhdGlvbl90YWJsZXMoJ2lwdWJfcGFydDEnLCAnaXB1Yl9vdGhlcicpIHQKKyAg Sk9JTiBwZ19wdWJsaWNhdGlvbiBwIE9OIChwLm9pZCA9IHQucHViaWQpOworU0VMRUNUICog RlJPTSBwdWJsaXNoZWRfc3luYygnaXB1Yl9wYXJ0MScsICdpcHViX290aGVyJyk7CitTRUxF Q1QgKiBGUk9NIHB1Ymxpc2hlZF9zdHJlYW0oJ2lwdWJfcGFydDEnLCAnaXB1Yl9vdGhlcicp OworCistLSBXaGF0IGEgc3Vic2NyaXB0aW9uIHRvIGFsbCB0aHJlZSBzaG91bGQgc2VlCitT RUxFQ1QgcHVibmFtZSwgcmVsaWQ6OnJlZ2NsYXNzCisgIEZST00gcGdfZ2V0X3B1YmxpY2F0 aW9uX3RhYmxlcygnaXB1Yl9yb290JywgJ2lwdWJfcGFydDEnLCAnaXB1Yl9vdGhlcicpIHQK KyAgSk9JTiBwZ19wdWJsaWNhdGlvbiBwIE9OIChwLm9pZCA9IHQucHViaWQpOworU0VMRUNU ICogRlJPTSBwdWJsaXNoZWRfc3luYygnaXB1Yl9yb290JywgJ2lwdWJfcGFydDEnLCAnaXB1 Yl9vdGhlcicpOworU0VMRUNUICogRlJPTSBwdWJsaXNoZWRfc3RyZWFtKCdpcHViX3Jvb3Qn LCAnaXB1Yl9wYXJ0MScsICdpcHViX290aGVyJyk7CisKK0RST1AgUFVCTElDQVRJT04gaXB1 Yl9vdGhlcjsKK0RST1AgUFVCTElDQVRJT04gaXB1Yl9wYXJ0MTsKK0RST1AgUFVCTElDQVRJ T04gaXB1Yl9yb290OworCiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogRFJPUCBQVUJM SUNBVElPTiBwdWI7CiBEUk9QIFRBQkxFIHNjaDEudGJsMTsKK0RST1AgVEFCTEUgc2NoMS5p cGFydDFfYTE7CitEUk9QIFRBQkxFIHNjaDEuaXBhcnQxX2E7CitEUk9QIFRBQkxFIHNjaDEu aXBhcnQxOworRFJPUCBUQUJMRSBzY2gxLmlwYXJ0MjsKK0RST1AgVEFCTEUgc2NoMS5pcm9v dDsKIERST1AgU0NIRU1BIHNjaDEgY2FzY2FkZTsKIERST1AgU0NIRU1BIHNjaDIgY2FzY2Fk ZTsKIERST1AgRlVOQ1RJT04gcHVibGlzaGVkX3N0cmVhbTsKK0RST1AgRlVOQ1RJT04gcHVi bGlzaGVkX3N5bmM7CiAKIFJFU0VUIFNFU1NJT04gQVVUSE9SSVpBVElPTjsKIERST1AgUk9M RSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIsIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlcjI7 CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMTNfcGFydGl0aW9uLnBs IGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDEzX3BhcnRpdGlvbi5wbAppbmRleCAyNzVm YjNiNTI1Li5iYzQwYzY4MDMwIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24v dC8wMTNfcGFydGl0aW9uLnBsCisrKyBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxM19w YXJ0aXRpb24ucGwKQEAgLTM4OCw2ICszODgsNTkgQEAgJG5vZGVfc3Vic2NyaWJlcjEtPmFw cGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLAogCSJsb2dfbWluX21lc3NhZ2VzID0gd2Fy bmluZyIpOwogJG5vZGVfc3Vic2NyaWJlcjEtPnJlbG9hZDsKIAorIyBNYWtlIHN1cmUgc3Rh bmRhcmQgaW5oZXJpdGFuY2Ugc2V0dXBzIGFyZW4ndCBicm9rZW4gYnkgdGhlIG5ldworIyBw Z19zZXRfbG9naWNhbF9yb290KCkgaGFuZGxpbmcuCiskbm9kZV9zdWJzY3JpYmVyMi0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBUQUJMRSBpdGFiMSAoYSBpbnQsIGIgdGV4 dCkiKTsKKyRub2RlX3N1YnNjcmliZXIyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JF QVRFIFRBQkxFIGl0YWIxXzEgKExJS0UgaXRhYjEpIik7Ciskbm9kZV9zdWJzY3JpYmVyMi0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBUQUJMRSBpdGFiMV8yIChMSUtFIGl0 YWIxKSIpOworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJD UkVBVEUgVEFCTEUgaXRhYjEgKGEgaW50LCBiIHRleHQpIik7Ciskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgVEFCTEUgaXRhYjFfMSAoQ0hFQ0sg KGEgPSAxKSkgSU5IRVJJVFMgKGl0YWIxKSIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFRBQkxFIGl0YWIxXzIgKENIRUNLIChhID0gMikp IElOSEVSSVRTIChpdGFiMSkiKTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywKKwkiU0VMRUNUIHBnX3NldF9sb2dpY2FsX3Jvb3QoJ2l0YWIxXzEnLCAnaXRh YjEnKSIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VM RUNUIHBnX3NldF9sb2dpY2FsX3Jvb3QoJ2l0YWIxXzInLCAnaXRhYjEnKSIpOworCiskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gaXRhYjEg VkFMVUVTICgwLCAnaXRhYjEnKSIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIklOU0VSVCBJTlRPIGl0YWIxXzEgVkFMVUVTICgxLCAnaXRhYjEnKSIpOwor JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIGl0 YWIxXzIgVkFMVUVTICgyLCAnaXRhYjEnKSIpOworCisjIFJlZ3Jlc3Npb246IENyZWF0ZSBh IHB1YmxpY2F0aW9uIGZvciBhbiB1bnJlbGF0ZWQgdGFibGUgYW5kIHNldAorIyBwdWJsaXNo X3ZpYV9wYXJ0aXRpb25fcm9vdC4gVGhpcyBzaG91bGQgaGF2ZSBubyBlZmZlY3QgYXQgYWxs LCBzaW5jZSBpdGFiMQorIyBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2luZyB0aGlzIHB1Ymxp Y2F0aW9uLi4uCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJD UkVBVEUgUFVCTElDQVRJT04gZHVtbXlfcHViIEZPUiBUQUJMRSB0YWIxIFdJVEggKHB1Ymxp c2hfdmlhX3BhcnRpdGlvbl9yb290ID0gdHJ1ZSkiKTsKKyRub2RlX3N1YnNjcmliZXIyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQUxURVIgU1VCU0NSSVBUSU9OIHN1YjIgQUREIFBV QkxJQ0FUSU9OIGR1bW15X3B1YiIpOworJG5vZGVfc3Vic2NyaWJlcjItPndhaXRfZm9yX3N1 YnNjcmlwdGlvbl9zeW5jOworCiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlcjItPnNhZmVf cHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgYSwgYiBGUk9NIGl0YWIxIik7CitpcygkcmVz dWx0LCBxcSgwfGl0YWIxKSwgJ2luaXRpYWwgZGF0YSBzeW5jZWQgZm9yIGl0YWIxIG9uIHN1 YnNjcmliZXIgMicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXIyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywKKwkiU0VMRUNUIGEsIGIgRlJPTSBpdGFiMV8xIik7CitpcygkcmVzdWx0 LCBxcSgxfGl0YWIxKSwgJ2luaXRpYWwgZGF0YSBzeW5jZWQgZm9yIGl0YWIxXzEgb24gc3Vi c2NyaWJlciAyJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlcjItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLAorCSJTRUxFQ1QgYSwgYiBGUk9NIGl0YWIxXzIiKTsKK2lzKCRyZXN1bHQs IHFxKDJ8aXRhYjEpLCAnaW5pdGlhbCBkYXRhIHN5bmNlZCBmb3IgaXRhYjFfMiBvbiBzdWJz Y3JpYmVyIDInKTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywK KwkiRFJPUCBUQUJMRSBpdGFiMSBDQVNDQURFOyIpOworJG5vZGVfc3Vic2NyaWJlcjItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLAorCSJEUk9QIFRBQkxFIGl0YWIxIENBU0NBREU7Iik7CisK KyRub2RlX3N1YnNjcmliZXIyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQUxURVIgU1VC U0NSSVBUSU9OIHN1YjIgRFJPUCBQVUJMSUNBVElPTiBkdW1teV9wdWIiKTsKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFBVQkxJQ0FUSU9OIGR1bW15 X3B1YiIpOworCiAjIFRlc3RzIGZvciByZXBsaWNhdGlvbiB1c2luZyByb290IHRhYmxlIGlk ZW50aXR5IGFuZCBzY2hlbWEKIAogIyBwdWJsaXNoZXIKQEAgLTg4Niw0ICs5MzksMjYzIEBA ICRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyMi0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCiAJ IlNFTEVDVCBhLCBiLCBjIEZST00gdGFiNV8xIE9SREVSIEJZIDEiKTsKIGlzKCRyZXN1bHQs IHFxKDR8fDEpLCAndXBkYXRlcyBvZiB0YWI1IHJlcGxpY2F0ZWQgY29ycmVjdGx5Jyk7CiAK KyMgVGVzdCB0aGF0IHJlcGxpY2F0aW9uIHdvcmtzIGZvciBvbGRlciBpbmhlcml0YW5jZS90 cmlnZ2VyIHNldHVwcyBhcyB3ZWxsLgorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywKKwkiQ1JFQVRFIFRBQkxFIGl0YWIxIChhIGludCwgYiB0ZXh0KSIpOworJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFRBQkxFIGl0 YWIxXzEgKENIRUNLIChhID0gMSkpIElOSEVSSVRTIChpdGFiMSkiKTsKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBUQUJMRSBpdGFiMV8yIChD SEVDSyAoYSA9IDIpKSBJTkhFUklUUyAoaXRhYjEpIik7CisKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICIKKwlDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiBp dGFiMV90cmlnZ2VyKCkKKwlSRVRVUk5TIFRSSUdHRVIgQVMgXCRcJAorCUJFR0lOCisJCUlG ICggTkVXLmEgPSAxICkgVEhFTiBJTlNFUlQgSU5UTyBpdGFiMV8xIFZBTFVFUyAoTkVXLiop OworCQlFTFNJRiAoIE5FVy5hID0gMiApIFRIRU4gSU5TRVJUIElOVE8gaXRhYjFfMiBWQUxV RVMgKE5FVy4qKTsKKwkJRUxTRSBSRVRVUk4gTkVXOworCQlFTkQgSUY7CisJCVJFVFVSTiBO VUxMOworCUVORDsKKwlcJFwkCisJTEFOR1VBR0UgcGxwZ3NxbDsiKTsKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICIKKwlDUkVBVEUgVFJJR0dFUiBpdGFiMV90 cmlnZ2VyCisJQkVGT1JFIElOU0VSVCBPTiBpdGFiMQorCUZPUiBFQUNIIFJPVyBFWEVDVVRF IEZVTkNUSU9OIGl0YWIxX3RyaWdnZXIoKTsiKTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIHBnX3NldF9sb2dpY2FsX3Jvb3QoJ2l0YWIx XzEnLCAnaXRhYjEnKSIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywKKwkiU0VMRUNUIHBnX3NldF9sb2dpY2FsX3Jvb3QoJ2l0YWIxXzInLCAnaXRhYjEnKSIp OworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUg VEFCTEUgaXRhYjIgKGEgaW50LCBiIHRleHQpIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgVEFCTEUgaXRhYjJfMSAoQ0hFQ0sgKGEgPSAx KSkgSU5IRVJJVFMgKGl0YWIyKSIpOworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiCisJQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gaXRhYjJfdHJpZ2dl cigpCisJUkVUVVJOUyBUUklHR0VSIEFTIFwkXCQKKwlCRUdJTgorCQlJRiAoIE5FVy5hID0g MSApIFRIRU4gSU5TRVJUIElOVE8gaXRhYjJfMSBWQUxVRVMgKE5FVy4qKTsKKwkJRUxTRSBS RVRVUk4gTkVXOworCQlFTkQgSUY7CisJCVJFVFVSTiBOVUxMOworCUVORDsKKwlcJFwkCisJ TEFOR1VBR0UgcGxwZ3NxbDsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICIKKwlDUkVBVEUgVFJJR0dFUiBpdGFiMl90cmlnZ2VyCisJQkVGT1JFIElOU0VS VCBPTiBpdGFiMgorCUZPUiBFQUNIIFJPVyBFWEVDVVRFIEZVTkNUSU9OIGl0YWIyX3RyaWdn ZXIoKTsiKTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwki U0VMRUNUIHBnX3NldF9sb2dpY2FsX3Jvb3QoJ2l0YWIyXzEnLCAnaXRhYjInKSIpOworCisj IGl0YWIyXzEgc2hvdWxkIGJlIHB1Ymxpc2hlZCB1c2luZyBpdHMgb3duIGlkZW50aXR5IGhl cmUsIHNpbmNlIGl0cyBwYXJlbnQgaXMKKyMgbm90IGluY2x1ZGVkLiBpdGFiMV8xIHNob3Vs ZCBiZSBwdWJsaXNoZWQgdmlhIGl0cyBwYXJlbnQsIGl0YWIxLCB3aXRob3V0CisjIGR1cGxp Y2F0aW5nIHRoZSByb3dzLgorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywKKwkiQUxURVIgUFVCTElDQVRJT04gcHViX3ZpYXJvb3QgQUREIFRBQkxFIGl0YWIxLCBp dGFiMV8xLCBpdGFiMl8xIik7CisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJJTlNFUlQgSU5UTyBpdGFiMSBWQUxVRVMgKDAsICdpdGFiMScpIik7Ciskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gaXRhYjEg VkFMVUVTICgxLCAnaXRhYjEnKSIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIklOU0VSVCBJTlRPIGl0YWIxIFZBTFVFUyAoMiwgJ2l0YWIxJykiKTsKKyRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyBpdGFi MiBWQUxVRVMgKDAsICdpdGFiMicpIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gaXRhYjIgVkFMVUVTICgxLCAnaXRhYjInKSIpOwor CisjIFN1YnNjcmliZXIgMSBvbmx5IHN1YnNjcmliZXMgdG8gc29tZSBvZiB0aGUgcGFydGl0 aW9ucywgYW5kIGRvZXMgbm90IHNldCB1cAorIyBwYXJ0aXRpb24gdHJpZ2dlcnMsIHRvIGNo ZWNrIGZvciB0aGUgY29ycmVjdCByb3V0aW5nLgorJG5vZGVfc3Vic2NyaWJlcjEtPnNhZmVf cHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgVEFCTEUgaXRhYjEgKGEgaW50LCBiIHRleHQp Iik7Ciskbm9kZV9zdWJzY3JpYmVyMS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFU RSBUQUJMRSBpdGFiMV8xIChDSEVDSyAoYSA9IDEpKSBJTkhFUklUUyAoaXRhYjEpIik7Cisk bm9kZV9zdWJzY3JpYmVyMS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBUQUJM RSBpdGFiMl8xIChhIGludCwgYiB0ZXh0KSIpOworCisjIFN1YnNjcmliZXIgMiBoYXMgZGlm ZmVyZW50IHBhcnRpdGlvbiBuYW1lcyBmb3IgaXRhYjEsIGFuZCBpdCBkb2Vzbid0IHBhcnRp dGlvbgorIyBpdGFiMiBhdCBhbGwuCiskbm9kZV9zdWJzY3JpYmVyMi0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsCisJIkNSRUFURSBUQUJMRSBpdGFiMSAoYSBpbnQsIGIgdGV4dCkiKTsKKyRu b2RlX3N1YnNjcmliZXIyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFRBQkxF IGl0YWIxX3BhcnQxIChDSEVDSyAoYSA9IDEpKSBJTkhFUklUUyAoaXRhYjEpIik7Ciskbm9k ZV9zdWJzY3JpYmVyMi0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBUQUJMRSBp dGFiMV9wYXJ0MiAoQ0hFQ0sgKGEgPSAyKSkgSU5IRVJJVFMgKGl0YWIxKSIpOworCiskbm9k ZV9zdWJzY3JpYmVyMi0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICIKKwlDUkVBVEUgT1IgUkVQ TEFDRSBGVU5DVElPTiBpdGFiX3RyaWdnZXIoKQorCVJFVFVSTlMgVFJJR0dFUiBBUyBcJFwk CisJQkVHSU4KKwkJSUYgKCBORVcuYSA9IDEgKSBUSEVOIElOU0VSVCBJTlRPIHB1YmxpYy5p dGFiMV9wYXJ0MSBWQUxVRVMgKE5FVy4qKTsKKwkJRUxTSUYgKCBORVcuYSA9IDIgKSBUSEVO IElOU0VSVCBJTlRPIHB1YmxpYy5pdGFiMV9wYXJ0MiBWQUxVRVMgKE5FVy4qKTsKKwkJRUxT RSBSRVRVUk4gTkVXOworCQlFTkQgSUY7CisJCVJFVFVSTiBOVUxMOworCUVORDsKKwlcJFwk CisJTEFOR1VBR0UgcGxwZ3NxbDsiKTsKKyRub2RlX3N1YnNjcmliZXIyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIgorCUNSRUFURSBUUklHR0VSIGl0YWJfdHJpZ2dlcgorCUJFRk9SRSBJ TlNFUlQgT04gaXRhYjEKKwlGT1IgRUFDSCBST1cgRVhFQ1VURSBGVU5DVElPTiBpdGFiX3Ry aWdnZXIoKTsiKTsKKyRub2RlX3N1YnNjcmliZXIyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IgorCUFMVEVSIFRBQkxFIGl0YWIxIEVOQUJMRSBBTFdBWVMgVFJJR0dFUiBpdGFiX3RyaWdn ZXI7Iik7CisKKyRub2RlX3N1YnNjcmliZXIyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwki Q1JFQVRFIFRBQkxFIGl0YWIyIChhIGludCwgYiB0ZXh0KSIpOworCiskbm9kZV9zdWJzY3Jp YmVyMS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkFMVEVSIFNVQlNDUklQVElPTiBzdWJf dmlhcm9vdCBSRUZSRVNIIFBVQkxJQ0FUSU9OIik7Ciskbm9kZV9zdWJzY3JpYmVyMi0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsCisJIkFMVEVSIFNVQlNDUklQVElPTiBzdWIyIFJFRlJFU0gg UFVCTElDQVRJT04iKTsKKworJG5vZGVfc3Vic2NyaWJlcjEtPndhaXRfZm9yX3N1YnNjcmlw dGlvbl9zeW5jOworJG5vZGVfc3Vic2NyaWJlcjItPndhaXRfZm9yX3N1YnNjcmlwdGlvbl9z eW5jOworCisjIGNoZWNrIHRoYXQgZGF0YSBpcyBzeW5jZWQgY29ycmVjdGx5CisKKyRyZXN1 bHQgPSAkbm9kZV9zdWJzY3JpYmVyMS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVD VCBhLCBiIEZST00gaXRhYjEgT1JERVIgQlkgMSwgMiIpOworaXMoJHJlc3VsdCwgcXEoMHxp dGFiMQorMXxpdGFiMQorMnxpdGFiMSksICdpbml0aWFsIGRhdGEgc3luY2VkIGZvciBpdGFi MSBvbiBzdWJzY3JpYmVyIDEnKTsKKworIyBhbGwgb2YgdGhlIGRhdGEgc2hvdWxkIGhhdmUg YmVlbiByb3V0ZWQgdG8gaXRhYjEgZGlyZWN0bHkgKHRoZXJlIGFyZSBubworIyB0cmlnZ2Vy cyBvbiBzdWJzY3JpYmVyIDEgdG8gbW92ZSBpdCBlbHNld2hlcmUpCiskcmVzdWx0ID0gJG5v ZGVfc3Vic2NyaWJlcjEtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgYSwgYiBG Uk9NIE9OTFkgaXRhYjEgT1JERVIgQlkgMSwgMiIpOworaXMoJHJlc3VsdCwgcXEoMHxpdGFi MQorMXxpdGFiMQorMnxpdGFiMSksICdpbml0aWFsIGRhdGEgY29ycmVjdGx5IHJvdXRlZCBm b3IgaXRhYjEgb24gc3Vic2NyaWJlciAxJyk7CisKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3Jp YmVyMS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBhLCBiIEZST00gaXRhYjJf MSBPUkRFUiBCWSAxLCAyIik7CitpcygkcmVzdWx0LCBxcSgxfGl0YWIyKSwgJ2luaXRpYWwg ZGF0YSBzeW5jZWQgZm9yIGl0YWIyXzEgb24gc3Vic2NyaWJlciAxJyk7CisKKyRyZXN1bHQg PSAkbm9kZV9zdWJzY3JpYmVyMi0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBh LCBiIEZST00gaXRhYjEgT1JERVIgQlkgMSwgMiIpOworaXMoJHJlc3VsdCwgcXEoMHxpdGFi MQorMXxpdGFiMQorMnxpdGFiMSksICdpbml0aWFsIGRhdGEgc3luY2VkIGZvciBpdGFiMSBv biBzdWJzY3JpYmVyIDInKTsKKworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXIyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIGEsIGIgRlJPTSBPTkxZIGl0YWIxIE9SREVS IEJZIDEsIDIiKTsKK2lzKCRyZXN1bHQsIHFxKDB8aXRhYjEpLCAnaW5pdGlhbCBkYXRhIGNv cnJlY3RseSByb3V0ZWQgZm9yIGl0YWIxIG9uIHN1YnNjcmliZXIgMicpOworCiskcmVzdWx0 ID0gJG5vZGVfc3Vic2NyaWJlcjItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1Qg YSwgYiBGUk9NIGl0YWIyIE9SREVSIEJZIDEsIDIiKTsKK2lzKCRyZXN1bHQsIHFxKDB8aXRh YjIKKzF8aXRhYjIpLCAnaW5pdGlhbCBkYXRhIHN5bmNlZCBmb3IgaXRhYjIgb24gc3Vic2Ny aWJlciAyJyk7CisKKyMgbWFrZSBzdXJlIG5ldyBkYXRhIGlzIGFsc28gY29ycmVjdGx5IHJv dXRlZCB0byB0aGUgcm9vdHMKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJJTlNFUlQgSU5UTyBpdGFiMSBWQUxVRVMgKDEsICdpdGFiMS1uZXcnKSIpOworJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIGl0YWIy IFZBTFVFUyAoMSwgJ2l0YWIyLW5ldycpIik7CisKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9m b3JfY2F0Y2h1cCgnc3ViX3ZpYXJvb3QnKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3Jf Y2F0Y2h1cCgnc3ViMicpOworCiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlcjEtPnNhZmVf cHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgYSwgYiBGUk9NIE9OTFkgaXRhYjEgT1JERVIg QlkgMSwgMiIpOworaXMoJHJlc3VsdCwgcXEoMHxpdGFiMQorMXxpdGFiMQorMXxpdGFiMS1u ZXcKKzJ8aXRhYjEpLCAnbmV3IGRhdGEgcm91dGVkIGZvciBpdGFiMSBvbiBzdWJzY3JpYmVy IDEnKTsKKworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXIxLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywKKwkiU0VMRUNUIGEsIGIgRlJPTSBpdGFiMl8xIE9SREVSIEJZIDEsIDIiKTsKK2lz KCRyZXN1bHQsIHFxKDF8aXRhYjIKKzF8aXRhYjItbmV3KSwgJ25ldyBkYXRhIHJvdXRlZCBm b3IgaXRhYjJfMSBvbiBzdWJzY3JpYmVyIDEnKTsKKworJHJlc3VsdCA9ICRub2RlX3N1YnNj cmliZXIyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIGEsIGIgRlJPTSBpdGFi MSBPUkRFUiBCWSAxLCAyIik7CitpcygkcmVzdWx0LCBxcSgwfGl0YWIxCisxfGl0YWIxCisx fGl0YWIxLW5ldworMnxpdGFiMSksICduZXcgZGF0YSByb3V0ZWQgZm9yIGl0YWIxIG9uIHN1 YnNjcmliZXIgMicpOworCiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlcjItPnNhZmVfcHNx bCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgYSwgYiBGUk9NIGl0YWIxX3BhcnQxIE9SREVSIEJZ IDEsIDIiKTsKK2lzKCRyZXN1bHQsIHFxKDF8aXRhYjEKKzF8aXRhYjEtbmV3KSwgJ25ldyBk YXRhIG1vdmVkIHRvIGl0YWIxX3BhcnQxIG9uIHN1YnNjcmliZXIgMicpOworCiskcmVzdWx0 ID0gJG5vZGVfc3Vic2NyaWJlcjItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1Qg YSwgYiBGUk9NIGl0YWIyIE9SREVSIEJZIDEsIDIiKTsKK2lzKCRyZXN1bHQsIHFxKDB8aXRh YjIKKzF8aXRhYjIKKzF8aXRhYjItbmV3KSwgJ25ldyBkYXRhIHJvdXRlZCBmb3IgaXRhYjIg b24gc3Vic2NyaWJlciAyJyk7CisKKyMgRmluYWxseSwgY2hlY2sgdGhlIGVmZmVjdCBvZiBt aXhlZCBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCBzZXR0aW5ncyBvbgorIyBsb2dpY2Fs IHJvb3RzLgorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JF QVRFIFRBQkxFIGl0YWIzIChhIGludCwgYiB0ZXh0KSIpOworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFRBQkxFIGl0YWIzXzEgKCkgSU5IRVJJ VFMgKGl0YWIzKSIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywK KwkiQ1JFQVRFIFRBQkxFIGl0YWIzXzFfMSAoKSBJTkhFUklUUyAoaXRhYjNfMSkiKTsKKwor JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIHBnX3Nl dF9sb2dpY2FsX3Jvb3QoJ2l0YWIzXzEnLCAnaXRhYjMnKSIpOworJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIHBnX3NldF9sb2dpY2FsX3Jvb3Qo J2l0YWIzXzFfMScsICdpdGFiM18xJykiKTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywKKwkiSU5TRVJUIElOVE8gaXRhYjMgVkFMVUVTICgxLCAnaXRhYjMn KSIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiSU5TRVJU IElOVE8gaXRhYjNfMSBWQUxVRVMgKDIsICdpdGFiM18xJykiKTsKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIklOU0VSVCBJTlRPIGl0YWIzXzFfMSBWQUxV RVMgKDMsICdpdGFiM18xXzEnKSIpOworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLAorCSJDUkVBVEUgUFVCTElDQVRJT04gaXB1YjMgRk9SIFRBQkxFIGl0YWIz ICoiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFU RSBQVUJMSUNBVElPTiBpcHViM18xIEZPUiBUQUJMRSBpdGFiM18xICogV0lUSCAocHVibGlz aF92aWFfcGFydGl0aW9uX3Jvb3QgPSB0cnVlKSIpOworCiskbm9kZV9zdWJzY3JpYmVyMi0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBUQUJMRSBpdGFiMyAoYSBpbnQsIGIg dGV4dCkiKTsKKyRub2RlX3N1YnNjcmliZXIyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwki Q1JFQVRFIFRBQkxFIGl0YWIzXzEgKCkgSU5IRVJJVFMgKGl0YWIzKSIpOworJG5vZGVfc3Vi c2NyaWJlcjItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgVEFCTEUgaXRhYjNf MV8xICgpIElOSEVSSVRTIChpdGFiM18xKSIpOworCiskbm9kZV9zdWJzY3JpYmVyMi0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBTVUJTQ1JJUFRJT04gbWl4ZWQgQ09OTkVD VElPTiAnJHB1Ymxpc2hlcl9jb25uc3RyJyBQVUJMSUNBVElPTiBpcHViMywgaXB1YjNfMSIp OworJG5vZGVfc3Vic2NyaWJlcjItPndhaXRfZm9yX3N1YnNjcmlwdGlvbl9zeW5jOworCisk cmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlcjItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJT RUxFQ1QgYSwgYiBGUk9NIE9OTFkgaXRhYjMiKTsKK2lzKCRyZXN1bHQsIHFxKDF8aXRhYjMp LCAnaW5pdGlhbCBkYXRhIHJvdXRlZCBmb3IgaXRhYjMgb24gc3Vic2NyaWJlciAyJyk7CisK KyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyMi0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJ IlNFTEVDVCBhLCBiIEZST00gT05MWSBpdGFiM18xIE9SREVSIEJZIDEsIDIiKTsKK2lzKCRy ZXN1bHQsIHFxKDJ8aXRhYjNfMQorM3xpdGFiM18xXzEpLCAnaW5pdGlhbCBkYXRhIHJvdXRl ZCBmb3IgaXRhYjNfMSBvbiBzdWJzY3JpYmVyIDInKTsKKworJHJlc3VsdCA9ICRub2RlX3N1 YnNjcmliZXIyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIGEsIGIgRlJPTSBP TkxZIGl0YWIzXzFfMSIpOworaXMoJHJlc3VsdCwgcXEoKSwgJ2luaXRpYWwgZGF0YSByb3V0 ZWQgZm9yIGl0YWIzXzFfMSBvbiBzdWJzY3JpYmVyIDInKTsKKworIyBtYWtlIHN1cmUgbmV3 IGRhdGEgaXMgYWxzbyBjb3JyZWN0bHkgcm91dGVkIHRvIHRoZSByb290cworJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIGl0YWIzIFZBTFVF UyAoNCwgJ2l0YWIzLW5ldycpIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiSU5TRVJUIElOVE8gaXRhYjNfMSBWQUxVRVMgKDQsICdpdGFiM18xLW5ldycp Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElO VE8gaXRhYjNfMV8xIFZBTFVFUyAoNCwgJ2l0YWIzXzFfMS1uZXcnKSIpOworCiskbm9kZV9w dWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ21peGVkJyk7CisKKyRyZXN1bHQgPSAkbm9k ZV9zdWJzY3JpYmVyMi0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBhLCBiIEZS T00gT05MWSBpdGFiMyBPUkRFUiBCWSAxLCAyIik7CitpcygkcmVzdWx0LCBxcSgxfGl0YWIz Cis0fGl0YWIzLW5ldyksICduZXcgZGF0YSByb3V0ZWQgZm9yIGl0YWIzIG9uIHN1YnNjcmli ZXIgMicpOworCiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlcjItPnNhZmVfcHNxbCgncG9z dGdyZXMnLAorCSJTRUxFQ1QgYSwgYiBGUk9NIE9OTFkgaXRhYjNfMSBPUkRFUiBCWSAxLCAy Iik7CitpcygkcmVzdWx0LCBxcSgyfGl0YWIzXzEKKzN8aXRhYjNfMV8xCis0fGl0YWIzXzEt bmV3Cis0fGl0YWIzXzFfMS1uZXcpLCAnbmV3IGRhdGEgcm91dGVkIGZvciBpdGFiM18xIG9u IHN1YnNjcmliZXIgMicpOworCiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlcjItPnNhZmVf cHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgYSwgYiBGUk9NIE9OTFkgaXRhYjNfMV8xIik7 CitpcygkcmVzdWx0LCBxcSgpLCAnbmV3IGRhdGEgcm91dGVkIGZvciBpdGFiM18xXzEgb24g c3Vic2NyaWJlciAyJyk7CisKIGRvbmVfdGVzdGluZygpOwotLSAKMi4yNS4xCgo= --------------8uPfEkfXokw7PchxOtJ3iUKw--