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 1oclJt-0007nN-GO for pgsql-hackers@arkaria.postgresql.org; Mon, 26 Sep 2022 10:26:38 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1oclJq-0006cw-Pe for pgsql-hackers@arkaria.postgresql.org; Mon, 26 Sep 2022 10:26:34 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oclJp-0006ch-Uf for pgsql-hackers@lists.postgresql.org; Mon, 26 Sep 2022 10:26:34 +0000 Received: from mail-ot1-x32f.google.com ([2607:f8b0:4864:20::32f]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1oclJd-0005tb-22 for pgsql-hackers@lists.postgresql.org; Mon, 26 Sep 2022 10:26:33 +0000 Received: by mail-ot1-x32f.google.com with SMTP id 102-20020a9d0bef000000b0065a08449ab3so4143255oth.2 for ; Mon, 26 Sep 2022 03:26:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date; bh=VqB9iGXCtPOXrECn7bpoW2yKx7xsq/Pi0vAx9wlYQ24=; b=fndl4MA8V5D61zkw9FjEPq7SN3Up3Hh/S/f+zfkwrtg76AoMYnZSttpIM+WL1mtexI /3gZpa9WxpLNtWgCL8H1TvAxyHt6CIpt8vpFTOD9BE1/xwxy40JrsacN12PFZaZCBboE 7uI7HTFQ5E19WLsssikSnU+PNHsMXSAVPhBs6PBO7GUmDT8nfQk8XOu02z3IsWadWVy9 HRF8d+hS2gHVoO+p/GmQ+y6bpdNEUKQ9KOPR/tcSyoSDgPsHn2Lfd+iMC56Ko4jZXbxa 6oqB2A3KZVDydSiTXqRT/g7+mxF5caGDKIT6lFXAxuACBcWZ6MgZ7kfbBn65N47it9C9 zCEg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date; bh=VqB9iGXCtPOXrECn7bpoW2yKx7xsq/Pi0vAx9wlYQ24=; b=fjsiG3+WVBiw8k0k37jZcF7o5HBnE0bdBnso/sggLXQ/hCnwjOVVHQ/BVb+oGafeUn 9mcXQq88UXyvTRCuNeRcevBlbQLbZqYfiKZ82ZSZ+RcqOF/HGOe2gpE1fZkTbEITPEmK d3zdPfMTt1q0FkqKO8WpAWMcRuEQpH6X07+PQeASD5y4Owfjict+FdHmj5kqXhoRiloe 6PPEuMeyC9Wd3ipzmWNGZIB+HHqIl4Clp3JzVQd68yr5BXWCdHO8+T+/HQaAWQ/wNLGH sWLj1mLlrCS5UOAwHWqX4p8L30fD4LmXN10UxUUfrr0NK8Fggh1C66kfgThQICjJRlXV W+Fg== X-Gm-Message-State: ACrzQf3+/ZpaRivOv3ads8L/M2BkrLln4qRW++3p6tIkeK58iKHPCcl5 yS8Fq1GnqkJp675EbQlE5bFmnRdURi9ojJHxTEc= X-Google-Smtp-Source: AMsMyM4HVJ0RbnRnifUDzQ8VDtp54kh8OZh4YvhMwV93E9gqXtd2LGM5yZjXdPsPCU0fd6p0qSupfkdjF0zifFDX/rk= X-Received: by 2002:a9d:2b0:0:b0:65b:ffc2:bddb with SMTP id 45-20020a9d02b0000000b0065bffc2bddbmr6109244otl.162.1664187979172; Mon, 26 Sep 2022 03:26:19 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: vignesh C Date: Mon, 26 Sep 2022 15:56:07 +0530 Message-ID: Subject: Re: Support logical replication of DDLs To: Zheng Li Cc: Ajin Cherian , "houzj.fnst@fujitsu.com" , Peter Smith , Amit Kapila , Masahiko Sawada , Japin Li , Alvaro Herrera , Dilip Kumar , rajesh singarapu , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="00000000000056eb5505e991f569" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000056eb5505e991f569 Content-Type: text/plain; charset="UTF-8" Hi, The patch does not apply because of a recent commit. The updated patch is rebased on top of HEAD. Regards, Vignesh On Wed, 21 Sept 2022 at 22:26, Zheng Li wrote: > > Hello, > > Attaching support for TEXT SEARCH commands, which includes: > -CREATE TEXT SEARCH CONFIGURATION/PARSER/DICTIONARY/TEMPLATE > -DROP TEXT SEARCH CONFIGURATION/PARSER/DICTIONARY/TEMPLATE > -ALTER TEXT SEARCH CONFIGURATION and ALTER TEXT SEARCH DICTIONARY > -ALTER TEXT SEARCH RENAME CONFIGURATION/PARSER/DICTIONARY/TEMPLATE > > Regards, > Zheng > > On Tue, Sep 20, 2022 at 10:57 AM Ajin Cherian wrote: > > > > On Thu, Sep 15, 2022 at 10:38 PM Ajin Cherian wrote: > > > > > > On Tue, Sep 6, 2022 at 12:18 AM Ajin Cherian wrote: > > > > > > > > On Mon, Aug 29, 2022 at 4:14 PM Ajin Cherian wrote: > > > > > > > > > > > > > > Attaching support for CREATE/ALTER/DROP EXTENSION ddl deparsing and replication. > > One of the issues faced during replication of "CREATE EXTENSION.." was > > that it internally > > results in internally generated commands to create functions, > > operators etc. If these > > sql commands are replicated, then the actual "create extension" > > command when replicated > > will error out because of duplication. To avoid this, I used the > > "in_extension" variable in the > > "collected command" which is set when an extension is being created. > > If this variable is set, then > > avoid sql commands other than "CREATE EXTENSION" from being replicated. > > > > > > This patch-set also adds a 5th patch from Vignesh C for supporting the > > "GRANT" command. > > > > However the following global objects are not supported: > > 1) Foreign data wrapper > > 2) parameter - ex: grant all on parameter wal_buffers TO test; > > 3) tablespace - ex: grant create on tablespace tbs1 to test; > > 4) database - ex: grant all on database postgres to test; > > 5) role - ex: grant test to test1; -- no event trigger for global objects > > > > Thanks Vignesh! > > > > regards, > > Ajin Cherian > > Fujitsu Australia --00000000000056eb5505e991f569 Content-Type: text/x-patch; charset="US-ASCII"; name="v23-0001-Functions-to-deparse-DDL-commands.patch" Content-Disposition: attachment; filename="v23-0001-Functions-to-deparse-DDL-commands.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l8imif7w0 RnJvbSAxNWEzZTIwYzY1OWFjODE4MGNlMjY5MmYwNmUzZTc0MTYxOTM0NThhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBWaWduZXNod2FyYW4gQyA8dmlnbmVzaDIxQGdtYWlsLmNvbT4K RGF0ZTogTW9uLCAyNiBTZXAgMjAyMiAxNTo0MDowMiArMDUzMApTdWJqZWN0OiBbUEFUQ0ggdjIz IDEvNl0gRnVuY3Rpb25zIHRvIGRlcGFyc2UgRERMIGNvbW1hbmRzLgoKVGhpcyBwYXRjaCBwcm92 aWRlcyBKU09OIGJsb2JzIHJlcHJlc2VudGluZyBEREwgY29tbWFuZHMsIHdoaWNoIGNhbgpsYXRl ciBiZSByZS1wcm9jZXNzZWQgaW50byBwbGFpbiBzdHJpbmdzIGJ5IHdlbGwtZGVmaW5lZCBzcHJp bnRmLWxpa2UKZXhwYW5zaW9uLiBUaGVzZSBKU09OIG9iamVjdHMgYXJlIGludGVuZGVkIHRvIGFs bG93IGZvciBtYWNoaW5lLWVkaXRpbmcgb2YKdGhlIGNvbW1hbmRzLCBieSByZXBsYWNpbmcgY2Vy dGFpbiBub2RlcyB3aXRoaW4gdGhlIG9iamVjdHMuCgpNdWNoIG9mIHRoZSBpbmZvcm1hdGlvbiBp biB0aGUgb3V0cHV0IGJsb2IgYWN0dWFsbHkgY29tZXMgZnJvbSBzeXN0ZW0KY2F0YWxvZ3MsIG5v dCBmcm9tIHRoZSBjb21tYW5kIHBhcnNlIG5vZGUsIGFzIGl0IGlzIGltcG9zc2libGUgdG8gcmVs aWFibHkKY29uc3RydWN0IGEgZnVsbHktc3BlY2lmaWVkIGNvbW1hbmQgKGkuZS4gb25lIG5vdCBk ZXBlbmRlbnQgb24gc2VhcmNoX3BhdGgKZXRjKSBsb29raW5nIG9ubHkgYXQgdGhlIHBhcnNlIG5v ZGUuCgpUaGlzIHByb3ZpZGVzIGEgYmFzZSBmb3IgbG9naWNhbCByZXBsaWNhdGlvbiBvZiBEREwg c3RhdGVtZW50cy4gQ3VycmVudGx5LAp0aGUgcGF0Y2ggaGFzIHN1cHBvcnQgZm9yOgoKQ1JFQVRF L0FMVEVSL0RST1AgVEFCTEUgLS0gTm90ZSAjMSwgTm90ZSAjMgpDUkVBVEUvQUxURVIvRFJPUCBT RVFVRU5DRQpDUkVBVEUvQUxURVIvRFJPUCBTQ0hFTUEKQ1JFQVRFL0FMVEVSIEZVTkNUSU9OL1BS T0NFRFVSRQpDUkVBVEUvQUxURVIgVFJJR0dFUgpDUkVBVEUvRFJPUCBJTkRFWApDUkVBVEUvRFJP UCBPUEVSQVRPUiBbQ0xBU1MvRkFNSUxZXQpDUkVBVEUvQUxURVIvRFJPUCBDQVNUCkNSRUFURS9B TFRFUi9EUk9QIERPTUFJTgpDUkVBVEUvQUxURVIvRFJPUCBUWVBFCkNSRUFURS9BTFRFUi9EUk9Q IENPTlZFUlNJT04KQ1JFQVRFL0FMVEVSL0RST1AgUE9MSUNZCkNSRUFURS9BTFRFUi9EUk9QIEVY VEVOU0lPTgpHUkFOVAoKKE5vdGUgIzEpIE5vdGUgdGhhdCBzb21lIHJlY2VudGx5IGludHJvZHVj ZWQgRERMcyhlLmcuIERETHMgcmVsYXRlZCB0bwpQQVJUSVRJT05FRCBUQUJMRSkgYXJlIHVuc3Vw cG9ydGVkLiBXZSBjYW4gZXh0ZW5kIGl0IGFzIHdlIG5lZWQgbW9yZQpmdW5jdGlvbmFsaXR5IGZv ciBEREwgcmVwbGljYXRpb24uCgooTm90ZSAjMikgTm90ZSB0aGF0LCBmb3IgQVRUQUNIL0RFVEFD SCBQQVJUSVRJT04sIHdlIGhhdmVuJ3QgYWRkZWQgZXh0cmEgbG9naWMgb24Kc3Vic2NyaWJlciB0 byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlIHRhYmxlIG9uIHB1Ymxpc2hlciBpcyBhIFBBUlRJ VElPTkVEClRBQkxFIHdoaWxlIHRoZSB0YXJnZXQgdGFibGUgb24gc3ViY3JpYmVyIHNpZGUgaXMg Tk9STUFMIHRhYmxlLiBXZSB3aWxsCnJlc2VhcmNoIHRoaXMgbW9yZSBhbmQgaW1wcm92ZSB0aGlz IGxhdGVyLgotLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL01ha2VmaWxlICAgICAgIHwgICAgMiAr CiBzcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jICB8IDY4NTggKysrKysrKysrKysr KysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfanNvbi5jICAgICB8ICA3 NjMgKysrCiBzcmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jICAgICB8ICAgMzMgKwogc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L2Zvcm1hdF90eXBlLmMgfCAgICAzICstCiBzcmMvYmFja2VuZC91 dGlscy9hZHQvcmVncHJvYy5jICAgICB8ICAgNTIgKwogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1 bGV1dGlscy5jICAgfCAgMTQ5ICstCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0ICAg ICB8ICAgIDYgKwogc3JjL2luY2x1ZGUvY29tbWFuZHMvc2VxdWVuY2UuaCAgICAgfCAgICAxICsK IHNyYy9pbmNsdWRlL3Rjb3AvZGRsX2RlcGFyc2UuaCAgICAgIHwgICAyMyArCiBzcmMvaW5jbHVk ZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oICB8ICAgIDEgKwogc3JjL2luY2x1ZGUvdXRpbHMvYnVp bHRpbnMuaCAgICAgICAgfCAgICAyICsKIHNyYy9pbmNsdWRlL3V0aWxzL3J1bGV1dGlscy5oICAg ICAgIHwgICAxMyArCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICB8ICAgIDQg KwogMTQgZmlsZXMgY2hhbmdlZCwgNzg0MCBpbnNlcnRpb25zKCspLCA3MCBkZWxldGlvbnMoLSkK IGNyZWF0ZSBtb2RlIDEwMDc1NSBzcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jCiBj cmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2pzb24uYwogY3JlYXRl IG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL3Rjb3AvZGRsX2RlcGFyc2UuaAoKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2NvbW1hbmRzL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvTWFr ZWZpbGUKaW5kZXggNDhmNzM0OGY5MS4uMTcxZGZiMjgwMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvTWFrZWZpbGUKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvTWFrZWZpbGUK QEAgLTI5LDYgKzI5LDggQEAgT0JKUyA9IFwKIAljb3B5dG8ubyBcCiAJY3JlYXRlYXMubyBcCiAJ ZGJjb21tYW5kcy5vIFwKKwlkZGxfZGVwYXJzZS5vIFwKKwlkZGxfanNvbi5vIFwKIAlkZWZpbmUu byBcCiAJZGlzY2FyZC5vIFwKIAlkcm9wY21kcy5vIFwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJz ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAuLjI5YTU4MWVmNTEKLS0t IC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jCkBAIC0w LDAgKzEsNjg1OCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZGRsX2RlcGFyc2UuYwor ICoJICBGdW5jdGlvbnMgdG8gY29udmVydCB1dGlsaXR5IGNvbW1hbmRzIHRvIG1hY2hpbmUtcGFy c2VhYmxlCisgKgkgIHJlcHJlc2VudGF0aW9uCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChj KSAxOTk2LTIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0 aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2Fs aWZvcm5pYQorICoKKyAqIE5PVEVTCisgKgorICogVGhpcyBpcyBpbnRlbmRlZCB0byBwcm92aWRl IEpTT04gYmxvYnMgcmVwcmVzZW50aW5nIERETCBjb21tYW5kcywgd2hpY2ggY2FuCisgKiBsYXRl ciBiZSByZS1wcm9jZXNzZWQgaW50byBwbGFpbiBzdHJpbmdzIGJ5IHdlbGwtZGVmaW5lZCBzcHJp bnRmLWxpa2UKKyAqIGV4cGFuc2lvbi4gIFRoZXNlIEpTT04gb2JqZWN0cyBhcmUgaW50ZW5kZWQg dG8gYWxsb3cgZm9yIG1hY2hpbmUtZWRpdGluZyBvZgorICogdGhlIGNvbW1hbmRzLCBieSByZXBs YWNpbmcgY2VydGFpbiBub2RlcyB3aXRoaW4gdGhlIG9iamVjdHMuCisgKgorICogTXVjaCBvZiB0 aGUgaW5mb3JtYXRpb24gaW4gdGhlIG91dHB1dCBibG9iIGFjdHVhbGx5IGNvbWVzIGZyb20gc3lz dGVtCisgKiBjYXRhbG9ncywgbm90IGZyb20gdGhlIGNvbW1hbmQgcGFyc2Ugbm9kZSwgYXMgaXQg aXMgaW1wb3NzaWJsZSB0byByZWxpYWJseQorICogY29uc3RydWN0IGEgZnVsbHktc3BlY2lmaWVk IGNvbW1hbmQgKGkuZS4gb25lIG5vdCBkZXBlbmRlbnQgb24gc2VhcmNoX3BhdGgKKyAqIGV0Yykg bG9va2luZyBvbmx5IGF0IHRoZSBwYXJzZSBub2RlLgorICoKKyAqIElERU5USUZJQ0FUSU9OCisg KgkgIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMKKyAqCisgKi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAqLworI2luY2x1ZGUgInBvc3RncmVzLmgiCisjaW5jbHVkZSAidGNvcC9kZGxfZGVw YXJzZS5oIgorI2luY2x1ZGUgImFjY2Vzcy9hbWFwaS5oIgorI2luY2x1ZGUgImFjY2Vzcy90YWJs ZS5oIgorI2luY2x1ZGUgImFjY2Vzcy9yZWxhdGlvbi5oIgorI2luY2x1ZGUgImNhdGFsb2cvbmFt ZXNwYWNlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19hbS5oIgorI2luY2x1ZGUgImNhdGFsb2cv cGdfYXR0cmlidXRlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19jYXN0LmgiCisjaW5jbHVkZSAi Y2F0YWxvZy9wZ19jbGFzcy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfY29sbGF0aW9uLmgiCisj aW5jbHVkZSAiY2F0YWxvZy9wZ19jb25zdHJhaW50LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19j b252ZXJzaW9uLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19kZXBlbmQuaCIKKyNpbmNsdWRlICJj YXRhbG9nL3BnX2V4dGVuc2lvbi5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfaW5oZXJpdHMuaCIK KyNpbmNsdWRlICJjYXRhbG9nL3BnX2xhbmd1YWdlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19u YW1lc3BhY2UuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX29wY2xhc3MuaCIKKyNpbmNsdWRlICJj YXRhbG9nL3BnX29wZXJhdG9yLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19vcGZhbWlseS5oIgor I2luY2x1ZGUgImNhdGFsb2cvcGdfcG9saWN5LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19wcm9j LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19yYW5nZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdf c2VxdWVuY2UuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3R5cGUuaCIKKyNpbmNsdWRlICJjb21t YW5kcy9kZWZyZW0uaCIKKyNpbmNsdWRlICJjb21tYW5kcy9zZXF1ZW5jZS5oIgorI2luY2x1ZGUg ImNvbW1hbmRzL3RhYmxlc3BhY2UuaCIKKyNpbmNsdWRlICJmdW5jYXBpLmgiCisjaW5jbHVkZSAi bGliL2lsaXN0LmgiCisjaW5jbHVkZSAibWIvcGdfd2NoYXIuaCIKKyNpbmNsdWRlICJub2Rlcy9t YWtlZnVuY3MuaCIKKyNpbmNsdWRlICJub2Rlcy9ub2RlRnVuY3MuaCIKKyNpbmNsdWRlICJub2Rl cy9wYXJzZW5vZGVzLmgiCisjaW5jbHVkZSAib3B0aW1pemVyL29wdGltaXplci5oIgorI2luY2x1 ZGUgInJld3JpdGUvcmV3cml0ZUhhbmRsZXIuaCIKKyNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5o IgorI2luY2x1ZGUgInV0aWxzL2ZtZ3JvaWRzLmgiCisjaW5jbHVkZSAidXRpbHMvZ3VjLmgiCisj aW5jbHVkZSAidXRpbHMvanNvbmIuaCIKKyNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKKyNp bmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgorI2luY2x1ZGUgInV0aWxzL3JlbC5oIgorI2luY2x1 ZGUgInV0aWxzL3J1bGV1dGlscy5oIgorI2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgiCisKKy8q IEVzdGltYXRlZCBsZW5ndGggb2YgdGhlIGdlbmVyYXRlZCBqc29uYiBzdHJpbmcgKi8KKyNkZWZp bmUgSlNPTkJfRVNUSU1BVEVEX0xFTiAxMjgKKworLyoKKyAqIEJlZm9yZSB0aGV5IGFyZSB0dXJu ZWQgaW50byBKU09OQiByZXByZXNlbnRhdGlvbiwgZWFjaCBjb21tYW5kIGlzCisgKiByZXByZXNl bnRlZCBhcyBhbiBvYmplY3QgdHJlZSwgdXNpbmcgdGhlIHN0cnVjdHMgYmVsb3cuCisgKi8KK3R5 cGVkZWYgZW51bQoreworCU9ialR5cGVOdWxsLAorCU9ialR5cGVCb29sLAorCU9ialR5cGVTdHJp bmcsCisJT2JqVHlwZUFycmF5LAorCU9ialR5cGVJbnRlZ2VyLAorCU9ialR5cGVGbG9hdCwKKwlP YmpUeXBlT2JqZWN0Cit9IE9ialR5cGU7CisKK3R5cGVkZWYgc3RydWN0IE9ialRyZWUKK3sKKwlz bGlzdF9oZWFkCXBhcmFtczsKKwlpbnQJCQludW1QYXJhbXM7CisJU3RyaW5nSW5mbwlmbXRpbmZv OworCWJvb2wJCXByZXNlbnQ7Cit9IE9ialRyZWU7CisKK3R5cGVkZWYgc3RydWN0IE9iakVsZW0K K3sKKwljaGFyCSAgICpuYW1lOworCU9ialR5cGUJCW9ianR5cGU7CisKKwl1bmlvbgorCXsKKwkJ Ym9vbAkJYm9vbGVhbjsKKwkJY2hhcgkgICAqc3RyaW5nOworCQlpbnQ2NAkJaW50ZWdlcjsKKwkJ ZmxvYXQ4CQlmbHQ7CisJCU9ialRyZWUJICAgKm9iamVjdDsKKwkJTGlzdAkgICAqYXJyYXk7CisJ fSB2YWx1ZTsKKwlzbGlzdF9ub2RlCW5vZGU7Cit9IE9iakVsZW07CisKK2Jvb2wgdmVyYm9zZSA9 IHRydWU7CisKK3N0YXRpYyB2b2lkIGFwcGVuZF9hcnJheV9vYmplY3QoT2JqVHJlZSAqdHJlZSwg Y2hhciAqbmFtZSwgTGlzdCAqYXJyYXkpOworc3RhdGljIHZvaWQgYXBwZW5kX2Jvb2xfb2JqZWN0 KE9ialRyZWUgKnRyZWUsIGNoYXIgKm5hbWUsIGJvb2wgdmFsdWUpOworc3RhdGljIHZvaWQgYXBw ZW5kX2Zsb2F0X29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpuYW1lLCBmbG9hdDggdmFsdWUp Oworc3RhdGljIHZvaWQgYXBwZW5kX251bGxfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKm5h bWUpOworc3RhdGljIHZvaWQgYXBwZW5kX29iamVjdF9vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hh ciAqbmFtZSwgT2JqVHJlZSAqdmFsdWUpOworc3RhdGljIGNoYXIgKmFwcGVuZF9vYmplY3RfdG9f Zm9ybWF0X3N0cmluZyhPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10KTsKK3N0YXRpYyB2b2lk IGFwcGVuZF9wcmVtYWRlX29iamVjdChPYmpUcmVlICp0cmVlLCBPYmpFbGVtICplbGVtKTsKK3N0 YXRpYyB2b2lkIGFwcGVuZF9zdHJpbmdfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKm5hbWUs IGNoYXIgKnZhbHVlKTsKK3N0YXRpYyB2b2lkIGZvcm1hdF90eXBlX2RldGFpbGVkKE9pZCB0eXBl X29pZCwgaW50MzIgdHlwZW1vZCwKKwkJCQkJCQkJIE9pZCAqbnNwaWQsIGNoYXIgKip0eXBuYW1l LCBjaGFyICoqdHlwZW1vZHN0ciwKKwkJCQkJCQkJIGJvb2wgKnR5cGFycmF5KTsKK3N0YXRpYyBM aXN0ICpGdW5jdGlvbkdldERlZmF1bHRzKHRleHQgKnByb2FyZ2RlZmF1bHRzKTsKK3N0YXRpYyBP YmpFbGVtICpuZXdfb2JqZWN0KE9ialR5cGUgdHlwZSwgY2hhciAqbmFtZSk7CitzdGF0aWMgT2Jq VHJlZSAqbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKE9pZCBjbGFzc0lkLCBPaWQgb2JqZWN0 SWQpOworc3RhdGljIE9ialRyZWUgKm5ld19vYmp0cmVlX2Zvcl9yb2xlc3BlYyhSb2xlU3BlYyAq c3BlYyk7CitzdGF0aWMgT2JqRWxlbSAqbmV3X29iamVjdF9vYmplY3QoT2JqVHJlZSAqdmFsdWUp Oworc3RhdGljIE9ialRyZWUgKm5ld19vYmp0cmVlX1ZBKGNoYXIgKmZtdCwgaW50IG51bW9ianMs Li4uKTsKK3N0YXRpYyBPYmpFbGVtICpuZXdfc3RyaW5nX29iamVjdChjaGFyICp2YWx1ZSk7Citz dGF0aWMgSnNvbmJWYWx1ZSAqb2JqdHJlZV90b19qc29uYl9yZWMoT2JqVHJlZSAqdHJlZSwgSnNv bmJQYXJzZVN0YXRlICpzdGF0ZSk7CitzdGF0aWMgdm9pZCBwZ19nZXRfaW5kZXhkZWZfZGV0YWls ZWQoT2lkIGluZGV4cmVsaWQsCisJCQkJCQkJCQkgY2hhciAqKmluZGV4X2FtLAorCQkJCQkJCQkJ IGNoYXIgKipkZWZpbml0aW9uLAorCQkJCQkJCQkJIGNoYXIgKipyZWxvcHRpb25zLAorCQkJCQkJ CQkJIGNoYXIgKip0YWJsZXNwYWNlLAorCQkJCQkJCQkJIGNoYXIgKip3aGVyZUNsYXVzZSk7Citz dGF0aWMgY2hhciAqUmVsYXRpb25HZXRDb2x1bW5EZWZhdWx0KFJlbGF0aW9uIHJlbCwgQXR0ck51 bWJlciBhdHRubywKKwkJCQkJCQkJCSAgTGlzdCAqZHBjb250ZXh0LCBMaXN0ICoqZXhwcnMpOwor c3RhdGljIGNvbnN0IGNoYXIgKnN0cmluZ2lmeV9vYmp0eXBlKE9iamVjdFR5cGUgb2JqdHlwZSk7 CisKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0NvbHVtbkRlZihSZWxhdGlvbiByZWxhdGlvbiwg TGlzdCAqZHBjb250ZXh0LCBib29sIGNvbXBvc2l0ZSwKKwkJCQkJCQkJICBDb2x1bW5EZWYgKmNv bGRlZiwgYm9vbCBpc19hbHRlciwgTGlzdCAqKmV4cHJzKTsKK3N0YXRpYyBPYmpUcmVlICpkZXBh cnNlX0NvbHVtbklkZW50aXR5KE9pZCBzZXFyZWxpZCwgY2hhciBpZGVudGl0eSwgYm9vbCBhbHRl cl90YWJsZSk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9Db2x1bW5TZXRPcHRpb25zKEFsdGVy VGFibGVDbWQgKnN1YmNtZCk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9EZWZpbmVTdG10X09w ZXJhdG9yKE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lKTsKK3N0YXRpYyBPYmpUcmVl ICpkZXBhcnNlX0RlZmluZVN0bXRfVHlwZShPaWQgb2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmlu ZSk7CisKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0RlZkVsZW0oRGVmRWxlbSAqZWxlbSwgYm9v bCBpc19yZXNldCk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9GdW5jdGlvblNldChWYXJpYWJs ZVNldEtpbmQga2luZCwgY2hhciAqbmFtZSwgY2hhciAqdmFsdWUpOworc3RhdGljIE9ialRyZWUg KmRlcGFyc2VfT25Db21taXRDbGF1c2UoT25Db21taXRBY3Rpb24gb3B0aW9uKTsKK3N0YXRpYyBP YmpUcmVlICpkZXBhcnNlX1JlbFNldE9wdGlvbnMoQWx0ZXJUYWJsZUNtZCAqc3ViY21kKTsKKwor c3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9DYWNoZShPYmpUcmVlICpwYXJlbnQs IEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSk7CitzdGF0aWMgaW5s aW5lIE9iakVsZW0gKmRlcGFyc2VfU2VxX0N5Y2xlKE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ19z ZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxl bSAqZGVwYXJzZV9TZXFfSW5jcmVtZW50QnkoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3NlcXVl bmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpOworc3RhdGljIGlubGluZSBPYmpFbGVtICpk ZXBhcnNlX1NlcV9NaW52YWx1ZShPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfc2VxdWVuY2Ugc2Vx ZGF0YSwgYm9vbCBhbHRlcl90YWJsZSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2Vf U2VxX01heHZhbHVlKE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBi b29sIGFsdGVyX3RhYmxlKTsKK3N0YXRpYyBPYmpFbGVtICpkZXBhcnNlX1NlcV9Pd25lZEJ5KE9i alRyZWUgKnBhcmVudCwgT2lkIHNlcXVlbmNlSWQsIGJvb2wgYWx0ZXJfdGFibGUpOworc3RhdGlj IGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9SZXN0YXJ0KE9ialRyZWUgKnBhcmVudCwgRm9y bV9wZ19zZXF1ZW5jZV9kYXRhIHNlcWRhdGEpOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBh cnNlX1NlcV9TdGFydHdpdGgoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRh dGEsIGJvb2wgYWx0ZXJfdGFibGUpOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1R5 cGVfU3RvcmFnZShPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfdHlwZSB0eXBGb3JtKTsKK3N0YXRp YyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9UeXBlX1JlY2VpdmUoT2JqVHJlZSAqcGFyZW50LCBG b3JtX3BnX3R5cGUgdHlwRm9ybSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfVHlw ZV9TZW5kKE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ190eXBlIHR5cEZvcm0pOworc3RhdGljIGlu bGluZSBPYmpFbGVtICpkZXBhcnNlX1R5cGVfVHlwbW9kX0luKE9ialRyZWUgKnBhcmVudCwgRm9y bV9wZ190eXBlIHR5cEZvcm0pOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1R5cGVf VHlwbW9kX091dChPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfdHlwZSB0eXBGb3JtKTsKK3N0YXRp YyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9UeXBlX0FuYWx5emUoT2JqVHJlZSAqcGFyZW50LCBG b3JtX3BnX3R5cGUgdHlwRm9ybSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfVHlw ZV9TdWJzY3JpcHQoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3R5cGUgdHlwRm9ybSk7CisKK3N0 YXRpYyBMaXN0ICpkZXBhcnNlX0luaFJlbGF0aW9ucyhPaWQgb2JqZWN0SWQpOworc3RhdGljIExp c3QgKmRlcGFyc2VfVGFibGVFbGVtZW50cyhSZWxhdGlvbiByZWxhdGlvbiwgTGlzdCAqdGFibGVF bGVtZW50cywgTGlzdCAqZHBjb250ZXh0LAorCQkJCQkJCQkgICBib29sIHR5cGVkLCBib29sIGNv bXBvc2l0ZSk7CisKKy8qCisgKiBBZGQgY29tbW9uIGNsYXVzZXMgdG8gQ3JlYXRlUG9saWN5IG9y IEFsdGVyUG9saWN5IGRlcGFyc2Ugb2JqZWN0cworICovCitzdGF0aWMgdm9pZAorYWRkX3BvbGlj eV9jbGF1c2VzKE9ialRyZWUgKnBvbGljeVN0bXQsIE9pZCBwb2xpY3lPaWQsIExpc3QgKnJvbGVz LAorCQkJCSAgIGJvb2wgZG9fcXVhbCwgYm9vbCBkb193aXRoX2NoZWNrKQoreworCVJlbGF0aW9u CXBvbFJlbCA9IHRhYmxlX29wZW4oUG9saWN5UmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsK KwlIZWFwVHVwbGUJcG9sVHVwID0gZ2V0X2NhdGFsb2dfb2JqZWN0X2J5X29pZChwb2xSZWwsIEFu dW1fcGdfcG9saWN5X29pZCwgcG9saWN5T2lkKTsKKwlGb3JtX3BnX3BvbGljeSBwb2xGb3JtOwor CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHBvbFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBs b29rdXAgZmFpbGVkIGZvciBwb2xpY3kgJXUiLCBwb2xpY3lPaWQpOworCisJcG9sRm9ybSA9IChG b3JtX3BnX3BvbGljeSkgR0VUU1RSVUNUKHBvbFR1cCk7CisKKwkvKiBhZGQgdGhlICJPTiB0YWJs ZSIgY2xhdXNlICovCisJYXBwZW5kX29iamVjdF9vYmplY3QocG9saWN5U3RtdCwgIk9OICV7dGFi bGV9RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRp b25JZCwKKwkJCQkJCQkJCQkJCQkgcG9sRm9ybS0+cG9scmVsaWQpKTsKKworCS8qCisJICogQWRk IHRoZSAiVE8gcm9sZSIgY2xhdXNlLCBpZiBhbnkuICBJbiB0aGUgQ1JFQVRFIGNhc2UsIGl0IGFs d2F5cworCSAqIGNvbnRhaW5zIGF0IGxlYXN0IFBVQkxJQywgYnV0IGluIHRoZSBBTFRFUiBjYXNl IGl0IG1pZ2h0IGJlIGVtcHR5LgorCSAqLworCWlmIChyb2xlcykKKwl7CisJCUxpc3QgICAqbGlz dCA9IE5JTDsKKwkJTGlzdENlbGwgKmNlbGw7CisKKwkJZm9yZWFjaCAoY2VsbCwgcm9sZXMpCisJ CXsKKwkJCVJvbGVTcGVjICAgKnNwZWMgPSAoUm9sZVNwZWMgKikgbGZpcnN0KGNlbGwpOworCisJ CQlsaXN0ID0gbGFwcGVuZChsaXN0LAorCQkJCQkJICAgbmV3X29iamVjdF9vYmplY3QobmV3X29i anRyZWVfZm9yX3JvbGVzcGVjKHNwZWMpKSk7CisJCX0KKwkJYXBwZW5kX2FycmF5X29iamVjdChw b2xpY3lTdG10LCJUTyAle3JvbGU6LCB9UiIsIGxpc3QpOworCX0KKwllbHNlCisJeworCQlhcHBl bmRfYm9vbF9vYmplY3QocG9saWN5U3RtdCwgInByZXNlbnQiLCBmYWxzZSk7CisJfQorCisJLyog YWRkIHRoZSBVU0lORyBjbGF1c2UsIGlmIGFueSAqLworCWlmIChkb19xdWFsKQorCXsKKwkJRGF0 dW0JZGVwYXJzZWQ7CisJCURhdHVtCXN0b3JlZGV4cHI7CisJCWJvb2wJaXNudWxsOworCisJCXN0 b3JlZGV4cHIgPSBoZWFwX2dldGF0dHIocG9sVHVwLCBBbnVtX3BnX3BvbGljeV9wb2xxdWFsLAor CQkJCQkJCQkgIFJlbGF0aW9uR2V0RGVzY3IocG9sUmVsKSwgJmlzbnVsbCk7CisJCWlmIChpc251 bGwpCisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBOVUxMIHBvbHF1YWwgZXhwcmVzc2lvbiBpbiBw b2xpY3kgJXUiLCBwb2xpY3lPaWQpOworCQlkZXBhcnNlZCA9IERpcmVjdEZ1bmN0aW9uQ2FsbDIo cGdfZ2V0X2V4cHIsIHN0b3JlZGV4cHIsIHBvbEZvcm0tPnBvbHJlbGlkKTsKKwkJYXBwZW5kX3N0 cmluZ19vYmplY3QocG9saWN5U3RtdCwgIlVTSU5HICgle2V4cHJlc3Npb259cykiLAorCQkJCQkJ CSBUZXh0RGF0dW1HZXRDU3RyaW5nKGRlcGFyc2VkKSk7CisJfQorCWVsc2UKKwkJYXBwZW5kX2Jv b2xfb2JqZWN0KHBvbGljeVN0bXQsICJwcmVzZW50IiwgZmFsc2UpOworCisJLyogYWRkIHRoZSBX SVRIIENIRUNLIGNsYXVzZSwgaWYgYW55ICovCisJaWYgKGRvX3dpdGhfY2hlY2spCisJeworCQlE YXR1bQlkZXBhcnNlZDsKKwkJRGF0dW0Jc3RvcmVkZXhwcjsKKwkJYm9vbAlpc251bGw7CisKKwkJ c3RvcmVkZXhwciA9IGhlYXBfZ2V0YXR0cihwb2xUdXAsIEFudW1fcGdfcG9saWN5X3BvbHdpdGhj aGVjaywKKwkJCQkJCQkJICBSZWxhdGlvbkdldERlc2NyKHBvbFJlbCksICZpc251bGwpOworCQlp ZiAoaXNudWxsKQorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgTlVMTCBwb2x3aXRoY2hlY2sgZXhw cmVzc2lvbiBpbiBwb2xpY3kgJXUiLCBwb2xpY3lPaWQpOworCQlkZXBhcnNlZCA9IERpcmVjdEZ1 bmN0aW9uQ2FsbDIocGdfZ2V0X2V4cHIsIHN0b3JlZGV4cHIsIHBvbEZvcm0tPnBvbHJlbGlkKTsK KwkJYXBwZW5kX3N0cmluZ19vYmplY3QocG9saWN5U3RtdCwgIldJVEggQ0hFQ0sgKCV7ZXhwcmVz c2lvbn1zKSIsCisJCQkJCQkJIFRleHREYXR1bUdldENTdHJpbmcoZGVwYXJzZWQpKTsKKwl9CisJ ZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QocG9saWN5U3RtdCwgInByZXNlbnQiLCBmYWxzZSk7 CisKKwlyZWxhdGlvbl9jbG9zZShwb2xSZWwsIEFjY2Vzc1NoYXJlTG9jayk7Cit9CisKKy8qIEFw cGVuZCBhbiBhcnJheSBwYXJhbWV0ZXIgdG8gYSB0cmVlICovCitzdGF0aWMgdm9pZAorYXBwZW5k X2FycmF5X29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10LCBMaXN0ICphcnJheSkK K3sKKwlPYmpFbGVtCSpwYXJhbTsKKwljaGFyICpvYmplY3RfbmFtZTsKKworCUFzc2VydChzdWJf Zm10KTsKKworCWlmIChsaXN0X2xlbmd0aChhcnJheSkgPT0gMCkKKwkJcmV0dXJuOworCisJaWYg KCF2ZXJib3NlKQorCXsKKwkJTGlzdENlbGwgKmxjOworCisJCS8qIEV4dHJhY3QgdGhlIE9iakVs ZW1zIHdob3NlIHByZXNlbnQgZmxhZyBpcyB0cnVlICovCisJCWZvcmVhY2gobGMsIGFycmF5KQor CQl7CisJCQlPYmpFbGVtICplbGVtID0gKE9iakVsZW0gKikgbGZpcnN0KGxjKTsKKworCQkJQXNz ZXJ0KGVsZW0tPm9ianR5cGUgPT0gT2JqVHlwZU9iamVjdCB8fAorCQkJCSAgIGVsZW0tPm9ianR5 cGUgPT0gT2JqVHlwZVN0cmluZyk7CisKKwkJCWlmICghZWxlbS0+dmFsdWUub2JqZWN0LT5wcmVz ZW50ICYmCisJCQkJZWxlbS0+b2JqdHlwZSA9PSBPYmpUeXBlT2JqZWN0KQorCQkJCWFycmF5ID0g Zm9yZWFjaF9kZWxldGVfY3VycmVudChhcnJheSwgbGMpOworCQl9CisKKwl9CisKKwlvYmplY3Rf bmFtZSA9IGFwcGVuZF9vYmplY3RfdG9fZm9ybWF0X3N0cmluZyh0cmVlLCBzdWJfZm10KTsKKwor CXBhcmFtID0gbmV3X29iamVjdChPYmpUeXBlQXJyYXksIG9iamVjdF9uYW1lKTsKKwlwYXJhbS0+ dmFsdWUuYXJyYXkgPSBhcnJheTsKKwlhcHBlbmRfcHJlbWFkZV9vYmplY3QodHJlZSwgcGFyYW0p OworfQorCisvKiBBcHBlbmQgYSBib29sZWFuIHBhcmFtZXRlciB0byBhIHRyZWUgKi8KK3N0YXRp YyB2b2lkCithcHBlbmRfYm9vbF9vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCwg Ym9vbCB2YWx1ZSkKK3sKKwlPYmpFbGVtICAqcGFyYW07CisJY2hhcgkgKm9iamVjdF9uYW1lID0g c3ViX2ZtdDsKKwlib29sCSAgaXNfcHJlc2VudF9mbGFnID0gZmFsc2U7CisKKwlBc3NlcnQoc3Vi X2ZtdCk7CisKKwkvKiBDaGVjayBpZiB0aGUgcHJlc2VudCBpcyBwYXJ0IG9mIHRoZSBmb3JtYXQg c3RyaW5nIGFuZCBzdG9yZSB0aGUgYm9vbGVhbiB2YWx1ZSovCisJaWYgKHN0cmNtcChzdWJfZm10 LCAicHJlc2VudCIpID09IDApCisJeworCQlpc19wcmVzZW50X2ZsYWcgPSB0cnVlOworCQl0cmVl LT5wcmVzZW50ID0gdmFsdWU7CisJfQorCisJaWYgKCF2ZXJib3NlICYmICF0cmVlLT5wcmVzZW50 KQorCQlyZXR1cm47CisKKwlpZiAoIWlzX3ByZXNlbnRfZmxhZykKKwkJb2JqZWN0X25hbWUgPSBh cHBlbmRfb2JqZWN0X3RvX2Zvcm1hdF9zdHJpbmcodHJlZSwgc3ViX2ZtdCk7CisKKwlwYXJhbSA9 IG5ld19vYmplY3QoT2JqVHlwZUJvb2wsIG9iamVjdF9uYW1lKTsKKwlwYXJhbS0+dmFsdWUuYm9v bGVhbiA9IHZhbHVlOworCWFwcGVuZF9wcmVtYWRlX29iamVjdCh0cmVlLCBwYXJhbSk7Cit9CisK Ky8qCisgKiBBcHBlbmQgYSBmbG9hdDggcGFyYW1ldGVyIHRvIGEgdHJlZS4KKyAqLworc3RhdGlj IHZvaWQKK2FwcGVuZF9mbG9hdF9vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCwg ZmxvYXQ4IHZhbHVlKQoreworCU9iakVsZW0JICAgKnBhcmFtOworCWNoYXIJICAgKm9iamVjdF9u YW1lOworCisJQXNzZXJ0KHN1Yl9mbXQpOworCisJb2JqZWN0X25hbWUgPSBhcHBlbmRfb2JqZWN0 X3RvX2Zvcm1hdF9zdHJpbmcodHJlZSwgc3ViX2ZtdCk7CisKKwlwYXJhbSA9IG5ld19vYmplY3Qo T2JqVHlwZUZsb2F0LCBvYmplY3RfbmFtZSk7CisJcGFyYW0tPnZhbHVlLmZsdCA9IHZhbHVlOwor CWFwcGVuZF9wcmVtYWRlX29iamVjdCh0cmVlLCBwYXJhbSk7Cit9CisKKy8qCisgKiBBcHBlbmQg dGhlIGlucHV0IGZvcm1hdCBzdHJpbmcgdG8gdGhlIE9ialRyZWUuCisgKi8KK3N0YXRpYyB2b2lk CithcHBlbmRfZm9ybWF0X3N0cmluZyhPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10KQorewor CWludAkJCQlsZW47CisJY2hhcgkJICAgKmZtdDsKKworCWlmICh0cmVlLT5mbXRpbmZvID09IE5V TEwpCisJCXJldHVybjsKKworCWZtdCA9IHRyZWUtPmZtdGluZm8tPmRhdGE7CisJbGVuID0gdHJl ZS0+Zm10aW5mby0+bGVuOworCisJLyogQWRkIGEgc2VwYXJhdG9yIGlmIG5lY2Vzc2FyeSAqLwor CWlmIChsZW4gPiAwICYmIGZtdFtsZW4gLSAxXSAhPSAnICcpCisJCWFwcGVuZFN0cmluZ0luZm9T cGFjZXModHJlZS0+Zm10aW5mbywgMSk7CisKKwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKHRyZWUt PmZtdGluZm8sIHN1Yl9mbXQpOworfQorCisvKiBBcHBlbmQgYSBOVUxMIG9iamVjdCB0byBhIHRy ZWUgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRfbnVsbF9vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hh ciAqc3ViX2ZtdCkKK3sKKwljaGFyICpvYmplY3RfbmFtZTsKKworCUFzc2VydChzdWJfZm10KTsK KworCWlmICghdmVyYm9zZSkKKwkJcmV0dXJuOworCisJb2JqZWN0X25hbWUgPSBhcHBlbmRfb2Jq ZWN0X3RvX2Zvcm1hdF9zdHJpbmcodHJlZSwgc3ViX2ZtdCk7CisKKwlhcHBlbmRfcHJlbWFkZV9v YmplY3QodHJlZSwgbmV3X29iamVjdChPYmpUeXBlTnVsbCwgb2JqZWN0X25hbWUpKTsKK30KKwor LyogQXBwZW5kIGFuIG9iamVjdCBwYXJhbWV0ZXIgdG8gYSB0cmVlICovCitzdGF0aWMgdm9pZAor YXBwZW5kX29iamVjdF9vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCwgT2JqVHJl ZSAqdmFsdWUpCit7CisJT2JqRWxlbQkqcGFyYW07CisJY2hhciAgICpvYmplY3RfbmFtZTsKKwor CUFzc2VydChzdWJfZm10KTsKKworCWlmICghdmVyYm9zZSAmJiAhdmFsdWUtPnByZXNlbnQpCisJ CXJldHVybjsKKworCW9iamVjdF9uYW1lID0gYXBwZW5kX29iamVjdF90b19mb3JtYXRfc3RyaW5n KHRyZWUsIHN1Yl9mbXQpOworCisJcGFyYW0gPSBuZXdfb2JqZWN0KE9ialR5cGVPYmplY3QsIG9i amVjdF9uYW1lKTsKKwlwYXJhbS0+dmFsdWUub2JqZWN0ID0gdmFsdWU7CisJYXBwZW5kX3ByZW1h ZGVfb2JqZWN0KHRyZWUsIHBhcmFtKTsKK30KKworLyoKKyAqIFJldHVybiB0aGUgb2JqZWN0IG5h bWUgd2hpY2ggaXMgZXh0cmFjdGVkIGZyb20gdGhlIGlucHV0ICIqJXtuYW1lWzouXX0qIgorICog c3R5bGUgc3RyaW5nLiBBbmQgYXBwZW5kIHRoZSBpbnB1dCBmb3JtYXQgc3RyaW5nIHRvIHRoZSBP YmpUcmVlLgorICovCitzdGF0aWMgY2hhciAqCithcHBlbmRfb2JqZWN0X3RvX2Zvcm1hdF9zdHJp bmcoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCkKK3sKKwlTdHJpbmdJbmZvRGF0YQlvYmpl Y3RfbmFtZTsKKwljb25zdCBjaGFyCSAgICplbmRfcHRyOworCWNvbnN0IGNoYXIJICAgKmNwOwor CWJvb2wJCQlzdGFydF9jb3B5ID0gZmFsc2U7CisKKwlpZiAoc3ViX2ZtdCA9PSBOVUxMIHx8IHRy ZWUtPmZtdGluZm8gPT0gTlVMTCkKKwkJcmV0dXJuIHN1Yl9mbXQ7CisKKwlpbml0U3RyaW5nSW5m bygmb2JqZWN0X25hbWUpOworCWVuZF9wdHIgPSBzdWJfZm10ICsgc3RybGVuKHN1Yl9mbXQpOwor CisJZm9yIChjcCA9IHN1Yl9mbXQ7IGNwIDwgZW5kX3B0cjsgY3ArKykKKwl7CisJCWlmICgqY3Ag PT0gJ3snKQorCQl7CisJCQlzdGFydF9jb3B5ID0gdHJ1ZTsKKwkJCWNvbnRpbnVlOworCQl9CisK KwkJaWYgKCFzdGFydF9jb3B5KQorCQkJY29udGludWU7CisKKwkJaWYgKCpjcCA9PSAnOicgfHwg KmNwID09ICd9JykKKwkJCWJyZWFrOworCisJCWFwcGVuZFN0cmluZ0luZm9DaGFyTWFjcm8oJm9i amVjdF9uYW1lLCAqY3ApOworCX0KKworCWlmIChvYmplY3RfbmFtZS5sZW4gPT0gMCkKKwkJZWxv ZyhFUlJPUiwgIm9iamVjdCBuYW1lIG5vdCBmb3VuZCIpOworCisJYXBwZW5kX2Zvcm1hdF9zdHJp bmcodHJlZSwgc3ViX2ZtdCk7CisKKwlyZXR1cm4gb2JqZWN0X25hbWUuZGF0YTsKK30KKworLyog QXBwZW5kIGEgcHJlYWxsb2NhdGVkIHBhcmFtZXRlciB0byBhIHRyZWUgKi8KK3N0YXRpYyBpbmxp bmUgdm9pZAorYXBwZW5kX3ByZW1hZGVfb2JqZWN0KE9ialRyZWUgKnRyZWUsIE9iakVsZW0gKmVs ZW0pCit7CisJc2xpc3RfcHVzaF9oZWFkKCZ0cmVlLT5wYXJhbXMsICZlbGVtLT5ub2RlKTsKKwl0 cmVlLT5udW1QYXJhbXMrKzsKK30KKworLyogQXBwZW5kIGEgc3RyaW5nIHBhcmFtZXRlciB0byBh IHRyZWUgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRfc3RyaW5nX29iamVjdChPYmpUcmVlICp0cmVl LCBjaGFyICpzdWJfZm10LCBjaGFyICp2YWx1ZSkKK3sKKwlPYmpFbGVtCSAgICpwYXJhbTsKKwlj aGFyCSAgICpvYmplY3RfbmFtZTsKKworCUFzc2VydChzdWJfZm10KTsKKworCWlmICghdmVyYm9z ZSAmJiAodmFsdWUgPT0gTlVMTCB8fCB2YWx1ZVswXSA9PSAnXDAnKSkKKwkJcmV0dXJuOworCisJ b2JqZWN0X25hbWUgPSBhcHBlbmRfb2JqZWN0X3RvX2Zvcm1hdF9zdHJpbmcodHJlZSwgc3ViX2Zt dCk7CisKKwlwYXJhbSA9IG5ld19vYmplY3QoT2JqVHlwZVN0cmluZywgb2JqZWN0X25hbWUpOwor CXBhcmFtLT52YWx1ZS5zdHJpbmcgPSB2YWx1ZTsKKwlhcHBlbmRfcHJlbWFkZV9vYmplY3QodHJl ZSwgcGFyYW0pOworfQorCisvKgorICogU2ltaWxhciB0byBmb3JtYXRfdHlwZV9leHRlbmRlZCwg ZXhjZXB0IHdlIHJldHVybiBlYWNoIGJpdCBvZiBpbmZvcm1hdGlvbgorICogc2VwYXJhdGVseToK KyAqCisgKiAtIG5zcGlkIGlzIHRoZSBzY2hlbWEgT0lELiAgRm9yIGNlcnRhaW4gU1FMLXN0YW5k YXJkIHR5cGVzIHdoaWNoIGhhdmUgd2VpcmQKKyAqICAgdHlwbW9kIHJ1bGVzLCB3ZSByZXR1cm4g SW52YWxpZE9pZDsgY2FsbGVyIGlzIGV4cGVjdGVkIHRvIG5vdCBzY2hlbWEtCisgKiAgIHF1YWxp ZnkgdGhlIG5hbWUgbm9yIGFkZCBxdW90ZXMgdG8gdGhlIHR5cGUgbmFtZSBpbiB0aGlzIGNhc2Uu CisgKgorICogLSB0eXBuYW1lIGlzIHNldCB0byB0aGUgdHlwZSBuYW1lLCB3aXRob3V0IHF1b3Rl cworICoKKyAqIC0gdHlwZW1vZHN0ciBpcyBzZXQgdG8gdGhlIHR5cGVtb2QsIGlmIGFueSwgYXMg YSBzdHJpbmcgd2l0aCBwYXJlbnMKKyAqCisgKiAtIHR5cGFycmF5IGluZGljYXRlcyB3aGV0aGVy IFtdcyBtdXN0IGJlIGFkZGVkCisgKgorICogV2UgZG9uJ3QgdHJ5IHRvIGRlY29kZSB0eXBlIG5h bWVzIHRvIHRoZWlyIHN0YW5kYXJkLW1hbmRhdGVkIG5hbWVzLCBleGNlcHQKKyAqIGluIHRoZSBj YXNlcyBvZiB0eXBlcyB3aXRoIHVudXN1YWwgdHlwbW9kIHJ1bGVzLgorICovCitzdGF0aWMgdm9p ZAorZm9ybWF0X3R5cGVfZGV0YWlsZWQoT2lkIHR5cGVfb2lkLCBpbnQzMiB0eXBlbW9kLAorCQkJ CQkgT2lkICpuc3BpZCwgY2hhciAqKnR5cG5hbWUsIGNoYXIgKip0eXBlbW9kc3RyLAorCQkJCQkg Ym9vbCAqdHlwYXJyYXkpCit7CisJSGVhcFR1cGxlCQl0dXBsZTsKKwlGb3JtX3BnX3R5cGUJdHlw ZWZvcm07CisJT2lkCQkJCWFycmF5X2Jhc2VfdHlwZTsKKworCXR1cGxlID0gU2VhcmNoU3lzQ2Fj aGUxKFRZUEVPSUQsIE9iamVjdElkR2V0RGF0dW0odHlwZV9vaWQpKTsKKwlpZiAoIUhlYXBUdXBs ZUlzVmFsaWQodHVwbGUpKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Ig dHlwZSAldSIsIHR5cGVfb2lkKTsKKworCXR5cGVmb3JtID0gKEZvcm1fcGdfdHlwZSkgR0VUU1RS VUNUKHR1cGxlKTsKKworCS8qCisJICogQ2hlY2sgaWYgaXQncyBhIHJlZ3VsYXIgKHZhcmlhYmxl IGxlbmd0aCkgYXJyYXkgdHlwZS4gIEFzIGFib3ZlLAorCSAqIGZpeGVkLWxlbmd0aCBhcnJheSB0 eXBlcyBzdWNoIGFzICJuYW1lIiBzaG91bGRuJ3QgZ2V0IGRlY29uc3RydWN0ZWQuCisJICovCisJ YXJyYXlfYmFzZV90eXBlID0gdHlwZWZvcm0tPnR5cGVsZW07CisKKwkqdHlwYXJyYXkgPSAoSXNU cnVlQXJyYXlUeXBlKHR5cGVmb3JtKSAmJiB0eXBlZm9ybS0+dHlwc3RvcmFnZSAhPSBUWVBTVE9S QUdFX1BMQUlOKTsKKworCWlmICgqdHlwYXJyYXkpCisJeworCQkvKiBTd2l0Y2ggb3VyIGF0dGVu dGlvbiB0byB0aGUgYXJyYXkgZWxlbWVudCB0eXBlICovCisJCVJlbGVhc2VTeXNDYWNoZSh0dXBs ZSk7CisJCXR1cGxlID0gU2VhcmNoU3lzQ2FjaGUxKFRZUEVPSUQsIE9iamVjdElkR2V0RGF0dW0o YXJyYXlfYmFzZV90eXBlKSk7CisJCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSkpCisJCQll bG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgdHlwZSAldSIsIHR5cGVfb2lkKTsK KworCQl0eXBlZm9ybSA9IChGb3JtX3BnX3R5cGUpIEdFVFNUUlVDVCh0dXBsZSk7CisJCXR5cGVf b2lkID0gYXJyYXlfYmFzZV90eXBlOworCX0KKworCS8qCisJICogU3BlY2lhbC1jYXNlIGNyb2Nr IGZvciB0eXBlcyB3aXRoIHN0cmFuZ2UgdHlwbW9kIHJ1bGVzIHdoZXJlIHdlIHB1dAorCSAqIHR5 cG1vZCBhdCB0aGUgbWlkZGxlIG9mIG5hbWUoZS5nLiBUSU1FKDYpIHdpdGggdGltZSB6b25lICku IFdlIGNhbm5vdAorCSAqIHNjaGVtYS1xdWFsaWZ5IG5vciBhZGQgcXVvdGVzIHRvIHRoZSB0eXBl IG5hbWUgaW4gdGhlc2UgY2FzZXMuCisJICovCisJaWYgKHR5cGVfb2lkID09IElOVEVSVkFMT0lE IHx8CisJCXR5cGVfb2lkID09IFRJTUVTVEFNUE9JRCB8fAorCQl0eXBlX29pZCA9PSBUSU1FU1RB TVBUWk9JRCB8fAorCQl0eXBlX29pZCA9PSBUSU1FT0lEIHx8CisJCXR5cGVfb2lkID09IFRJTUVU Wk9JRCkKKwl7CisJCXN3aXRjaCAodHlwZV9vaWQpCisJCXsKKwkJCWNhc2UgSU5URVJWQUxPSUQ6 CisJCQkJKnR5cG5hbWUgPSBwc3RyZHVwKCJJTlRFUlZBTCIpOworCQkJCWJyZWFrOworCQkJY2Fz ZSBUSU1FU1RBTVBUWk9JRDoKKwkJCQlpZiAodHlwZW1vZCA8IDApCisJCQkJCSp0eXBuYW1lID0g cHN0cmR1cCgiVElNRVNUQU1QIFdJVEggVElNRSBaT05FIik7CisJCQkJZWxzZQorCQkJCQkvKiBv dGhlcndpc2UsIFdJVEggVFogaXMgYWRkZWQgYnkgdHlwbW9kLiAqLworCQkJCQkqdHlwbmFtZSA9 IHBzdHJkdXAoIlRJTUVTVEFNUCIpOworCQkJCWJyZWFrOworCQkJY2FzZSBUSU1FU1RBTVBPSUQ6 CisJCQkJKnR5cG5hbWUgPSBwc3RyZHVwKCJUSU1FU1RBTVAiKTsKKwkJCQlicmVhazsKKwkJCWNh c2UgVElNRVRaT0lEOgorCQkJCWlmICh0eXBlbW9kIDwgMCkKKwkJCQkJKnR5cG5hbWUgPSBwc3Ry ZHVwKCJUSU1FIFdJVEggVElNRSBaT05FIik7CisJCQkJZWxzZQorCQkJCQkvKiBvdGhlcndpc2Us IFdJVEggVFogaXMgYWRkZWQgYnkgdHlwbW9kZS4gKi8KKwkJCQkJKnR5cG5hbWUgPSBwc3RyZHVw KCJUSU1FIik7CisJCQkJYnJlYWs7CisJCQljYXNlIFRJTUVPSUQ6CisJCQkJKnR5cG5hbWUgPSBw c3RyZHVwKCJUSU1FIik7CisJCQkJYnJlYWs7CisJCX0KKwkJKm5zcGlkID0gSW52YWxpZE9pZDsK Kwl9CisJZWxzZQorCXsKKwkJLyoKKwkJICogTm8gYWRkaXRpb25hbCBwcm9jZXNzaW5nIGlzIHJl cXVpcmVkIGZvciBvdGhlciB0eXBlcywgc28gZ2V0IHRoZSB0eXBlCisJCSAqIG5hbWUgYW5kIHNj aGVtYSBkaXJlY3RseSBmcm9tIHRoZSBjYXRhbG9nLgorCQkgKi8KKwkJKm5zcGlkID0gdHlwZWZv cm0tPnR5cG5hbWVzcGFjZTsKKwkJKnR5cG5hbWUgPSBwc3RyZHVwKE5hbWVTdHIodHlwZWZvcm0t PnR5cG5hbWUpKTsKKwl9CisKKwlpZiAodHlwZW1vZCA+PSAwKQorCQkqdHlwZW1vZHN0ciA9IHBy aW50VHlwbW9kKCIiLCB0eXBlbW9kLCB0eXBlZm9ybS0+dHlwbW9kb3V0KTsKKwllbHNlCisJCSp0 eXBlbW9kc3RyID0gcHN0cmR1cCgiIik7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHVwbGUpOworfQor CisvKgorICogUmV0dXJuIHRoZSBkZWZhdWx0cyB2YWx1ZXMgb2YgYXJndW1lbnRzIHRvIGEgZnVu Y3Rpb24sIGFzIGEgbGlzdCBvZgorICogZGVwYXJzZWQgZXhwcmVzc2lvbnMuCisgKi8KK3N0YXRp YyBMaXN0ICoKK0Z1bmN0aW9uR2V0RGVmYXVsdHModGV4dCAqcHJvYXJnZGVmYXVsdHMpCit7CisJ TGlzdCAgICpub2RlZGVmczsKKwlMaXN0ICAgKnN0cmRlZnMgPSBOSUw7CisJTGlzdENlbGwgKmNl bGw7CisKKwlub2RlZGVmcyA9IChMaXN0ICopIHN0cmluZ1RvTm9kZShUZXh0RGF0dW1HZXRDU3Ry aW5nKHByb2FyZ2RlZmF1bHRzKSk7CisJaWYgKCFJc0Eobm9kZWRlZnMsIExpc3QpKQorCQllbG9n KEVSUk9SLCAicHJvYXJnZGVmYXVsdHMgaXMgbm90IGEgbGlzdCIpOworCisJZm9yZWFjaChjZWxs LCBub2RlZGVmcykKKwl7CisJCU5vZGUgICAqb25lZGVmID0gbGZpcnN0KGNlbGwpOworCisJCXN0 cmRlZnMgPSBsYXBwZW5kKHN0cmRlZnMsIGRlcGFyc2VfZXhwcmVzc2lvbihvbmVkZWYsIE5JTCwg ZmFsc2UsIGZhbHNlKSk7CisJfQorCisJcmV0dXJuIHN0cmRlZnM7Cit9CisKKy8qCisgKiBSZXR1 cm4gdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4gUkVMUEVSU0lTVEVOQ0Ug dmFsdWUuCisgKi8KK3N0YXRpYyBjaGFyICoKK2dldF9wZXJzaXN0ZW5jZV9zdHIoY2hhciBwZXJz aXN0ZW5jZSkKK3sKKwlzd2l0Y2ggKHBlcnNpc3RlbmNlKQorCXsKKwkJY2FzZSBSRUxQRVJTSVNU RU5DRV9URU1QOgorCQkJcmV0dXJuICJURU1QT1JBUlkiOworCQljYXNlIFJFTFBFUlNJU1RFTkNF X1VOTE9HR0VEOgorCQkJcmV0dXJuICJVTkxPR0dFRCI7CisJCWNhc2UgUkVMUEVSU0lTVEVOQ0Vf UEVSTUFORU5UOgorCQkJcmV0dXJuICIiOworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVu ZXhwZWN0ZWQgcGVyc2lzdGVuY2UgbWFya2luZyAlYyIsIHBlcnNpc3RlbmNlKTsKKwkJCXJldHVy biAiIjsJCS8qIG1ha2UgY29tcGlsZXIgaGFwcHkgKi8KKwl9Cit9CisKKy8qIEFsbG9jYXRlIGEg bmV3IHBhcmFtZXRlciAqLworc3RhdGljIE9iakVsZW0gKgorbmV3X29iamVjdChPYmpUeXBlIHR5 cGUsIGNoYXIgKm5hbWUpCit7CisJT2JqRWxlbQkqcGFyYW07CisKKwlwYXJhbSA9IHBhbGxvYzAo c2l6ZW9mKE9iakVsZW0pKTsKKwlwYXJhbS0+bmFtZSA9IG5hbWU7CisJcGFyYW0tPm9ianR5cGUg PSB0eXBlOworCisJcmV0dXJuIHBhcmFtOworfQorCisvKiBBbGxvY2F0ZSBhIG5ldyBvYmplY3Qg cGFyYW1ldGVyICovCitzdGF0aWMgT2JqRWxlbSAqCituZXdfb2JqZWN0X29iamVjdChPYmpUcmVl ICp2YWx1ZSkKK3sKKwlPYmpFbGVtCSpwYXJhbTsKKworCXBhcmFtID0gbmV3X29iamVjdChPYmpU eXBlT2JqZWN0LCBOVUxMKTsKKwlwYXJhbS0+dmFsdWUub2JqZWN0ID0gdmFsdWU7CisKKwlyZXR1 cm4gcGFyYW07Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBhIG5ldyBvYmplY3QgdHJlZSB0byBzdG9y ZSBwYXJhbWV0ZXIgdmFsdWVzLgorICovCitzdGF0aWMgT2JqVHJlZSAqCituZXdfb2JqdHJlZShj aGFyICpmbXQpCit7CisJT2JqVHJlZQkqcGFyYW1zOworCisJcGFyYW1zID0gcGFsbG9jMChzaXpl b2YoT2JqVHJlZSkpOworCXBhcmFtcy0+cHJlc2VudCA9IHRydWU7CisJc2xpc3RfaW5pdCgmcGFy YW1zLT5wYXJhbXMpOworCisJaWYgKGZtdCkKKwl7CisJCXBhcmFtcy0+Zm10aW5mbyA9IG1ha2VT dHJpbmdJbmZvKCk7CisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcocGFyYW1zLT5mbXRpbmZvLCBm bXQpOworCX0KKworCXJldHVybiBwYXJhbXM7Cit9CisKKy8qCisgKiBBIGhlbHBlciByb3V0aW5l IHRvIHNldHVwICV7fUQgYW5kICV7fU8gZWxlbWVudHMuCisgKgorICogRWxlbWVudHMgInNjaGVt YW5hbWUiIGFuZCAib2JqbmFtZSIgYXJlIHNldC4gIElmIHRoZSBuYW1lc3BhY2UgT0lECisgKiBj b3JyZXNwb25kcyB0byBhIHRlbXAgc2NoZW1hLCB0aGF0J3Mgc2V0IHRvICJwZ190ZW1wIi4KKyAq CisgKiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRob3NlIHR3byBlbGVtZW50IHR5cGVzIGlzIHdo ZXRoZXIgdGhlIG9iam5hbWUgd2lsbAorICogYmUgcXVvdGVkIGFzIGFuIGlkZW50aWZpZXIgb3Ig bm90LCB3aGljaCBpcyBub3Qgc29tZXRoaW5nIHRoYXQgdGhpcyByb3V0aW5lCisgKiBjb25jZXJu cyBpdHNlbGYgd2l0aDsgdGhhdCB3aWxsIGJlIHVwIHRvIHRoZSBleHBhbmQgZnVuY3Rpb24uCisg Ki8KK3N0YXRpYyBPYmpUcmVlICoKK25ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShPaWQgbnNwaWQs IGNoYXIgKm5hbWUpCit7CisJT2JqVHJlZQkqcXVhbGlmaWVkOworCWNoYXIJICAgKm5hbWVzcGFj ZTsKKworCWlmIChpc0FueVRlbXBOYW1lc3BhY2UobnNwaWQpKQorCQluYW1lc3BhY2UgPSBwc3Ry ZHVwKCJwZ190ZW1wIik7CisJZWxzZQorCQluYW1lc3BhY2UgPSBnZXRfbmFtZXNwYWNlX25hbWUo bnNwaWQpOworCisJcXVhbGlmaWVkID0gbmV3X29ianRyZWVfVkEoTlVMTCwgMiwKKwkJCQkJCQkg ICJzY2hlbWFuYW1lIiwgT2JqVHlwZVN0cmluZywgbmFtZXNwYWNlLAorCQkJCQkJCSAgIm9iam5h bWUiLCBPYmpUeXBlU3RyaW5nLCBwc3RyZHVwKG5hbWUpKTsKKworCXJldHVybiBxdWFsaWZpZWQ7 Cit9CisKKy8qCisgKiBBIGhlbHBlciByb3V0aW5lIHRvIHNldHVwICV7fUQgYW5kICV7fU8gZWxl bWVudHMsIHdpdGggdGhlIG9iamVjdCBzcGVjaWZpZWQKKyAqIGJ5IGNsYXNzSWQvb2JqSWQuCisg KgorICovCitzdGF0aWMgT2JqVHJlZSAqCituZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoT2lk IGNsYXNzSWQsIE9pZCBvYmplY3RJZCkKK3sKKwlPYmpUcmVlCSpxdWFsaWZpZWQ7CisJUmVsYXRp b24JY2F0YWxvZzsKKwlIZWFwVHVwbGUJY2F0b2JqOworCURhdHVtCQlvYmpuc3A7CisJRGF0dW0J CW9iam5hbWU7CisJQXR0ck51bWJlcglBbnVtX25hbWU7CisJQXR0ck51bWJlcglBbnVtX25hbWVz cGFjZTsKKwlBdHRyTnVtYmVyCUFudW1fb2lkID0gZ2V0X29iamVjdF9hdHRudW1fb2lkKGNsYXNz SWQpOworCWJvb2wJCWlzbnVsbDsKKworCWNhdGFsb2cgPSB0YWJsZV9vcGVuKGNsYXNzSWQsIEFj Y2Vzc1NoYXJlTG9jayk7CisKKwljYXRvYmogPSBnZXRfY2F0YWxvZ19vYmplY3RfYnlfb2lkKGNh dGFsb2csIEFudW1fb2lkLCBvYmplY3RJZCk7CisJaWYgKCFjYXRvYmopCisJCWVsb2coRVJST1Is ICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBvYmplY3QgJXUgb2YgY2F0YWxvZyBcIiVzXCIiLAor CQkJIG9iamVjdElkLCBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShjYXRhbG9nKSk7CisJQW51bV9u YW1lID0gZ2V0X29iamVjdF9hdHRudW1fbmFtZShjbGFzc0lkKTsKKwlBbnVtX25hbWVzcGFjZSA9 IGdldF9vYmplY3RfYXR0bnVtX25hbWVzcGFjZShjbGFzc0lkKTsKKworCW9iam5zcCA9IGhlYXBf Z2V0YXR0cihjYXRvYmosIEFudW1fbmFtZXNwYWNlLCBSZWxhdGlvbkdldERlc2NyKGNhdGFsb2cp LAorCQkJCQkJICAmaXNudWxsKTsKKwlpZiAoaXNudWxsKQorCQllbG9nKEVSUk9SLCAidW5leHBl Y3RlZCBOVUxMIG5hbWVzcGFjZSIpOworCisJb2JqbmFtZSA9IGhlYXBfZ2V0YXR0cihjYXRvYmos IEFudW1fbmFtZSwgUmVsYXRpb25HZXREZXNjcihjYXRhbG9nKSwKKwkJCQkJCSAgICZpc251bGwp OworCWlmIChpc251bGwpCisJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIE5VTEwgbmFtZSIpOwor CisJcXVhbGlmaWVkID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKERhdHVtR2V0T2JqZWN0SWQo b2JqbnNwKSwKKwkJCQkJCQkJCQkgTmFtZVN0cigqRGF0dW1HZXROYW1lKG9iam5hbWUpKSk7CisJ dGFibGVfY2xvc2UoY2F0YWxvZywgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiBxdWFsaWZp ZWQ7Cit9CisKKy8qCisgKiBIZWxwZXIgcm91dGluZSBmb3IgJXt9UiBvYmplY3RzLCB3aXRoIHJv bGUgc3BlY2lmaWVkIGJ5IFJvbGVTcGVjIG5vZGUuCisgKiBTcGVjaWFsIHZhbHVlcyBzdWNoIGFz IFJPTEVTUEVDX0NVUlJFTlRfVVNFUiBhcmUgZXhwYW5kZWQgdG8gdGhlaXIgZmluYWwKKyAqIG5h bWVzLgorICovCitzdGF0aWMgT2JqVHJlZSAqCituZXdfb2JqdHJlZV9mb3Jfcm9sZXNwZWMoUm9s ZVNwZWMgKnNwZWMpCit7CisJT2JqVHJlZQkgICAqcm9sZTsKKwljaGFyCSAgICpyb2xldHlwZTsK KworCWlmIChzcGVjLT5yb2xldHlwZSAhPSBST0xFU1BFQ19QVUJMSUMpCisJCXJvbGV0eXBlID0g Z2V0X3JvbGVzcGVjX25hbWUoc3BlYyk7CisJZWxzZQorCQlyb2xldHlwZSA9IHBzdHJkdXAoIiIp OworCisJcm9sZSA9IG5ld19vYmp0cmVlX1ZBKE5VTEwsMiwKKwkJCQkJCSAgImlzX3B1YmxpYyIs IE9ialR5cGVCb29sLCBzcGVjLT5yb2xldHlwZSA9PSBST0xFU1BFQ19QVUJMSUMsCisJCQkJCQkg ICJyb2xlbmFtZSIsIE9ialR5cGVTdHJpbmcsIHJvbGV0eXBlKTsKKwlyZXR1cm4gcm9sZTsKK30K KworLyoKKyAqIEEgaGVscGVyIHJvdXRpbmUgdG8gc2V0dXAgJXt9VCBlbGVtZW50cy4KKyAqLwor c3RhdGljIE9ialRyZWUgKgorbmV3X29ianRyZWVfZm9yX3R5cGUoT2lkIHR5cGVJZCwgaW50MzIg dHlwbW9kKQoreworCU9ialRyZWUJKnR5cGVQYXJhbTsKKwlPaWQJCQl0eXBuc3BpZDsKKwljaGFy CSAgICp0eXBuc3A7CisJY2hhcgkgICAqdHlwZW5hbWUgPSBOVUxMOworCWNoYXIJICAgKnR5cG1v ZHN0cjsKKwlib29sCQl0eXBhcnJheTsKKworCWZvcm1hdF90eXBlX2RldGFpbGVkKHR5cGVJZCwg dHlwbW9kLAorCQkJCQkJICZ0eXBuc3BpZCwgJnR5cGVuYW1lLCAmdHlwbW9kc3RyLCAmdHlwYXJy YXkpOworCisJaWYgKE9pZElzVmFsaWQodHlwbnNwaWQpKQorCQl0eXBuc3AgPSBnZXRfbmFtZXNw YWNlX25hbWVfb3JfdGVtcCh0eXBuc3BpZCk7CisJZWxzZQorCQl0eXBuc3AgPSBwc3RyZHVwKCIi KTsKKworCXR5cGVQYXJhbSA9IG5ld19vYmp0cmVlX1ZBKE5VTEwsIDQsCisJCQkJCQkJICAgInNj aGVtYW5hbWUiLCBPYmpUeXBlU3RyaW5nLCB0eXBuc3AsCisJCQkJCQkJICAgInR5cGVuYW1lIiwg T2JqVHlwZVN0cmluZywgdHlwZW5hbWUsCisJCQkJCQkJICAgInR5cG1vZCIsIE9ialR5cGVTdHJp bmcsIHR5cG1vZHN0ciwKKwkJCQkJCQkgICAidHlwYXJyYXkiLCBPYmpUeXBlQm9vbCwgdHlwYXJy YXkpOworCisJcmV0dXJuIHR5cGVQYXJhbTsKK30KKworLyoKKyAqIEFsbG9jYXRlIGEgbmV3IG9i amVjdCB0cmVlIHRvIHN0b3JlIHBhcmFtZXRlciB2YWx1ZXMgLS0gdmFyYXJncyB2ZXJzaW9uLgor ICoKKyAqIFRoZSAiZm10IiBhcmd1bWVudCBpcyB1c2VkIHRvIGFwcGVuZCBhcyBhICJmbXQiIGVs ZW1lbnQgaW4gdGhlIG91dHB1dCBibG9iLgorICogbnVtb2JqcyBpbmRpY2F0ZXMgdGhlIG51bWJl ciBvZiBleHRyYSBlbGVtZW50cyB0byBhcHBlbmQ7IGZvciBlYWNoIG9uZSwgYQorICogbmFtZSAo c3RyaW5nKSwgdHlwZSAoZnJvbSB0aGUgT2JqVHlwZSBlbnVtKSBhbmQgdmFsdWUgbXVzdCBiZSBz dXBwbGllZC4gIFRoZQorICogdmFsdWUgbXVzdCBtYXRjaCB0aGUgdHlwZSBnaXZlbjsgZm9yIGlu c3RhbmNlLCBPYmpUeXBlSW50ZWdlciByZXF1aXJlcyBhbgorICogaW50NjQsIE9ialR5cGVTdHJp bmcgcmVxdWlyZXMgYSBjaGFyICosIE9ialR5cGVBcnJheSByZXF1aXJlcyBhIGxpc3QgKG9mCisg KiBPYmpFbGVtKSwgT2JqVHlwZU9iamVjdCByZXF1aXJlcyBhbiBPYmpUcmVlLCBhbmQgc28gb24u ICBFYWNoIGVsZW1lbnQgdHlwZSAqCisgKiBtdXN0IG1hdGNoIHRoZSBjb252ZXJzaW9uIHNwZWNp ZmllciBnaXZlbiBpbiB0aGUgZm9ybWF0IHN0cmluZywgYXMgZGVzY3JpYmVkCisgKiBpbiBkZGxf ZGVwYXJzZV9leHBhbmRfY29tbWFuZCwgcS52LgorICoKKyAqIE5vdGUgd2UgZG9uJ3QgaGF2ZSB0 aGUgbHV4dXJ5IG9mIHNwcmludGYtbGlrZSBjb21waWxlciB3YXJuaW5ncyBmb3IKKyAqIG1hbGZv cm1lZCBhcmd1bWVudCBsaXN0cy4KKyAqLworc3RhdGljIE9ialRyZWUgKgorbmV3X29ianRyZWVf VkEoY2hhciAqZm10LCBpbnQgbnVtb2JqcywuLi4pCit7CisJT2JqVHJlZQkgICAqdHJlZTsKKwl2 YV9saXN0CQlhcmdzOworCWludAkJCWk7CisKKwkvKiBTZXQgdXAgdGhlIHRvcGxldmVsIG9iamVj dCBhbmQgaXRzICJmbXQiICovCisJdHJlZSA9IG5ld19vYmp0cmVlKGZtdCk7CisKKwkvKiBBbmQg cHJvY2VzcyB0aGUgZ2l2ZW4gdmFyYXJncyAqLworCXZhX3N0YXJ0KGFyZ3MsIG51bW9ianMpOwor CWZvciAoaSA9IDA7IGkgPCBudW1vYmpzOyBpKyspCisJeworCQljaGFyCSAgICpuYW1lOworCQlP YmpUeXBlCQl0eXBlOworCQlPYmpFbGVtCSAgICplbGVtOworCisJCW5hbWUgPSB2YV9hcmcoYXJn cywgY2hhciAqKTsKKwkJdHlwZSA9IHZhX2FyZyhhcmdzLCBPYmpUeXBlKTsKKwkJZWxlbSA9IG5l d19vYmplY3QodHlwZSwgTlVMTCk7CisKKwkJLyoKKwkJICogRm9yIGFsbCBvdGhlciBwYXJhbSB0 eXBlcyB0aGVyZSBtdXN0IGJlIGEgdmFsdWUgaW4gdGhlIHZhcmFyZ3MuCisJCSAqIEZldGNoIGl0 IGFuZCBhZGQgdGhlIGZ1bGx5IGZvcm1lZCBzdWJvYmplY3QgaW50byB0aGUgbWFpbiBvYmplY3Qu CisJCSAqLworCQlzd2l0Y2ggKHR5cGUpCisJCXsKKwkJCWNhc2UgT2JqVHlwZU51bGw6CisJCQkJ LyogTnVsbCBwYXJhbXMgZG9uJ3QgaGF2ZSBhIHZhbHVlIChvYnZpb3VzbHkpICovCisJCQkJYnJl YWs7CisJCQljYXNlIE9ialR5cGVCb29sOgorCQkJCWVsZW0tPnZhbHVlLmJvb2xlYW4gPSB2YV9h cmcoYXJncywgaW50KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgT2JqVHlwZVN0cmluZzoKKwkJCQll bGVtLT52YWx1ZS5zdHJpbmcgPSB2YV9hcmcoYXJncywgY2hhciAqKTsKKwkJCQlicmVhazsKKwkJ CWNhc2UgT2JqVHlwZUFycmF5OgorCQkJCWVsZW0tPnZhbHVlLmFycmF5ID0gdmFfYXJnKGFyZ3Ms IExpc3QgKik7CisJCQkJYnJlYWs7CisJCQljYXNlIE9ialR5cGVJbnRlZ2VyOgorCQkJCWVsZW0t PnZhbHVlLmludGVnZXIgPSB2YV9hcmcoYXJncywgaW50NjQpOworCQkJCWJyZWFrOworCQkJY2Fz ZSBPYmpUeXBlRmxvYXQ6CisJCQkJZWxlbS0+dmFsdWUuZmx0ID0gdmFfYXJnKGFyZ3MsIGRvdWJs ZSk7CisJCQkJYnJlYWs7CisJCQljYXNlIE9ialR5cGVPYmplY3Q6CisJCQkJZWxlbS0+dmFsdWUu b2JqZWN0ID0gdmFfYXJnKGFyZ3MsIE9ialRyZWUgKik7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0 OgorCQkJCWVsb2coRVJST1IsICJpbnZhbGlkIE9ialRyZWUgZWxlbWVudCB0eXBlICVkIiwgdHlw ZSk7CisJCX0KKworCQllbGVtLT5uYW1lID0gbmFtZTsKKwkJYXBwZW5kX3ByZW1hZGVfb2JqZWN0 KHRyZWUsIGVsZW0pOworCX0KKworCXZhX2VuZChhcmdzKTsKKwlyZXR1cm4gdHJlZTsKK30KKwor LyogQWxsb2NhdGUgYSBuZXcgc3RyaW5nIG9iamVjdCAqLworc3RhdGljIE9iakVsZW0gKgorbmV3 X3N0cmluZ19vYmplY3QoY2hhciAqdmFsdWUpCit7CisJT2JqRWxlbSAgICAqcGFyYW07CisKKwlB c3NlcnQodmFsdWUpOworCisJcGFyYW0gPSBuZXdfb2JqZWN0KE9ialR5cGVTdHJpbmcsIE5VTEwp OworCXBhcmFtLT52YWx1ZS5zdHJpbmcgPSB2YWx1ZTsKKworCXJldHVybiBwYXJhbTsKK30KKwor LyoKKyAqIFByb2Nlc3MgdGhlIHByZS1idWlsdCBmb3JtYXQgc3RyaW5nIGZyb20gdGhlIE9ialRy ZWUgaW50byB0aGUgb3V0cHV0IHBhcnNlCisgKiBzdGF0ZS4KKyAqLworc3RhdGljIHZvaWQKK29i anRyZWVfZm10X3RvX2pzb25iX2VsZW1lbnQoSnNvbmJQYXJzZVN0YXRlICpzdGF0ZSwgT2JqVHJl ZSAqdHJlZSkKK3sKKwlKc29uYlZhbHVlCWtleTsKKwlKc29uYlZhbHVlCXZhbDsKKworCWlmICh0 cmVlLT5mbXRpbmZvID09IE5VTEwpCisJCXJldHVybjsKKworCS8qIFB1c2ggdGhlIGtleSBmaXJz dCAqLworCWtleS50eXBlID0gamJ2U3RyaW5nOworCWtleS52YWwuc3RyaW5nLnZhbCA9ICJmbXQi OworCWtleS52YWwuc3RyaW5nLmxlbiA9IHN0cmxlbihrZXkudmFsLnN0cmluZy52YWwpOworCXB1 c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0tFWSwgJmtleSk7CisKKwkvKiBUaGVuIHByb2Nlc3Mg dGhlIHByZS1idWlsdCBmb3JtYXQgc3RyaW5nICovCisJdmFsLnR5cGUgPSBqYnZTdHJpbmc7CisJ dmFsLnZhbC5zdHJpbmcubGVuID0gdHJlZS0+Zm10aW5mby0+bGVuOworCXZhbC52YWwuc3RyaW5n LnZhbCA9IHRyZWUtPmZtdGluZm8tPmRhdGE7CisJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJf VkFMVUUsICZ2YWwpOworfQorCisvKgorICogQ3JlYXRlIGEgSlNPTkIgcmVwcmVzZW50YXRpb24g ZnJvbSBhbiBPYmpUcmVlLgorICovCitzdGF0aWMgSnNvbmIgKgorb2JqdHJlZV90b19qc29uYihP YmpUcmVlICp0cmVlKQoreworCUpzb25iVmFsdWUgKnZhbHVlOworCisJdmFsdWUgPSBvYmp0cmVl X3RvX2pzb25iX3JlYyh0cmVlLCBOVUxMKTsKKwlyZXR1cm4gSnNvbmJWYWx1ZVRvSnNvbmIodmFs dWUpOworfQorCisvKgorICogSGVscGVyIGZvciBvYmp0cmVlX3RvX2pzb25iOiBwcm9jZXNzIGFu IGluZGl2aWR1YWwgZWxlbWVudCBmcm9tIGFuIG9iamVjdCBvcgorICogYW4gYXJyYXkgaW50byB0 aGUgb3V0cHV0IHBhcnNlIHN0YXRlLgorICovCitzdGF0aWMgdm9pZAorb2JqdHJlZV90b19qc29u Yl9lbGVtZW50KEpzb25iUGFyc2VTdGF0ZSAqc3RhdGUsIE9iakVsZW0gKm9iamVjdCwKKwkJCQkJ CSBKc29uYkl0ZXJhdG9yVG9rZW4gZWxlbV90b2tlbikKK3sKKwlMaXN0Q2VsbCAgICpjZWxsOwor CUpzb25iVmFsdWUJdmFsOworCisJc3dpdGNoIChvYmplY3QtPm9ianR5cGUpCisJeworCQljYXNl IE9ialR5cGVOdWxsOgorCQkJdmFsLnR5cGUgPSBqYnZOdWxsOworCQkJcHVzaEpzb25iVmFsdWUo JnN0YXRlLCBlbGVtX3Rva2VuLCAmdmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT2JqVHlwZVN0 cmluZzoKKwkJCXZhbC50eXBlID0gamJ2U3RyaW5nOworCQkJdmFsLnZhbC5zdHJpbmcubGVuID0g c3RybGVuKG9iamVjdC0+dmFsdWUuc3RyaW5nKTsKKwkJCXZhbC52YWwuc3RyaW5nLnZhbCA9IG9i amVjdC0+dmFsdWUuc3RyaW5nOworCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBlbGVtX3Rva2Vu LCAmdmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT2JqVHlwZUludGVnZXI6CisJCQl2YWwudHlw ZSA9IGpidk51bWVyaWM7CisJCQl2YWwudmFsLm51bWVyaWMgPSAoTnVtZXJpYykKKwkJCQlEYXR1 bUdldE51bWVyaWMoRGlyZWN0RnVuY3Rpb25DYWxsMShpbnQ4X251bWVyaWMsCisJCQkJCQkJCQkJ CQkJb2JqZWN0LT52YWx1ZS5pbnRlZ2VyKSk7CisJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIGVs ZW1fdG9rZW4sICZ2YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPYmpUeXBlRmxvYXQ6CisJCQl2 YWwudHlwZSA9IGpidk51bWVyaWM7CisJCQl2YWwudmFsLm51bWVyaWMgPSAoTnVtZXJpYykKKwkJ CQlEYXR1bUdldE51bWVyaWMoRGlyZWN0RnVuY3Rpb25DYWxsMShmbG9hdDhfbnVtZXJpYywKKwkJ CQkJCQkJCQkJCQlvYmplY3QtPnZhbHVlLmludGVnZXIpKTsKKwkJCXB1c2hKc29uYlZhbHVlKCZz dGF0ZSwgZWxlbV90b2tlbiwgJnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIE9ialR5cGVCb29s OgorCQkJdmFsLnR5cGUgPSBqYnZCb29sOworCQkJdmFsLnZhbC5ib29sZWFuID0gb2JqZWN0LT52 YWx1ZS5ib29sZWFuOworCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBlbGVtX3Rva2VuLCAmdmFs KTsKKwkJCWJyZWFrOworCisJCWNhc2UgT2JqVHlwZU9iamVjdDoKKwkJCS8qIFJlY3Vyc2l2ZWx5 IGFkZCB0aGUgb2JqZWN0IGludG8gdGhlIGV4aXN0aW5nIHBhcnNlIHN0YXRlICovCisJCQlvYmp0 cmVlX3RvX2pzb25iX3JlYyhvYmplY3QtPnZhbHVlLm9iamVjdCwgc3RhdGUpOworCQkJYnJlYWs7 CisKKwkJY2FzZSBPYmpUeXBlQXJyYXk6CisJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9C RUdJTl9BUlJBWSwgTlVMTCk7CisJCQlmb3JlYWNoKGNlbGwsIG9iamVjdC0+dmFsdWUuYXJyYXkp CisJCQl7CisJCQkJT2JqRWxlbSAgICplbGVtID0gbGZpcnN0KGNlbGwpOworCisJCQkJb2JqdHJl ZV90b19qc29uYl9lbGVtZW50KHN0YXRlLCBlbGVtLCBXSkJfRUxFTSk7CisJCQl9CisJCQlwdXNo SnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9FTkRfQVJSQVksIE5VTEwpOworCQkJYnJlYWs7CisKKwkJ ZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgb2JqZWN0IHR5cGUgJWQiLCBv YmplY3QtPm9ianR5cGUpOworCQkJYnJlYWs7CisJfQorfQorCisvKgorICogUmVjdXJzaXZlIGhl bHBlciBmb3Igb2JqdHJlZV90b19qc29uYi4KKyAqLworc3RhdGljIEpzb25iVmFsdWUgKgorb2Jq dHJlZV90b19qc29uYl9yZWMoT2JqVHJlZSAqdHJlZSwgSnNvbmJQYXJzZVN0YXRlICpzdGF0ZSkK K3sKKwlzbGlzdF9pdGVyCWl0ZXI7CisKKwlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9CRUdJ Tl9PQkpFQ1QsIE5VTEwpOworCisJb2JqdHJlZV9mbXRfdG9fanNvbmJfZWxlbWVudChzdGF0ZSwg dHJlZSk7CisKKwlzbGlzdF9mb3JlYWNoKGl0ZXIsICZ0cmVlLT5wYXJhbXMpCisJeworCQlPYmpF bGVtCSpvYmplY3QgPSBzbGlzdF9jb250YWluZXIoT2JqRWxlbSwgbm9kZSwgaXRlci5jdXIpOwor CQlKc29uYlZhbHVlCWtleTsKKworCQkvKiBQdXNoIHRoZSBrZXkgZmlyc3QgKi8KKwkJa2V5LnR5 cGUgPSBqYnZTdHJpbmc7CisJCWtleS52YWwuc3RyaW5nLmxlbiA9IHN0cmxlbihvYmplY3QtPm5h bWUpOworCQlrZXkudmFsLnN0cmluZy52YWwgPSBvYmplY3QtPm5hbWU7CisJCXB1c2hKc29uYlZh bHVlKCZzdGF0ZSwgV0pCX0tFWSwgJmtleSk7CisKKwkJLyogVGhlbiBwcm9jZXNzIHRoZSB2YWx1 ZSBhY2NvcmRpbmcgdG8gaXRzIHR5cGUgKi8KKwkJb2JqdHJlZV90b19qc29uYl9lbGVtZW50KHN0 YXRlLCBvYmplY3QsIFdKQl9WQUxVRSk7CisJfQorCisJcmV0dXJuIHB1c2hKc29uYlZhbHVlKCZz dGF0ZSwgV0pCX0VORF9PQkpFQ1QsIE5VTEwpOworfQorCisvKgorICogU3Vicm91dGluZSBmb3Ig Q1JFQVRFIFRBQkxFL0NSRUFURSBET01BSU4gZGVwYXJzaW5nLgorICoKKyAqIEdpdmVuIGEgdGFi bGUgT0lEIG9yIGRvbWFpbiBPSUQsIG9idGFpbiBpdHMgY29uc3RyYWludHMgYW5kIGFwcGVuZCB0 aGVtIHRvCisgKiB0aGUgZ2l2ZW4gZWxlbWVudHMgbGlzdC4gIFRoZSB1cGRhdGVkIGxpc3QgaXMg cmV0dXJuZWQuCisgKgorICogVGhpcyB3b3JrcyBmb3IgdHlwZWQgdGFibGVzLCByZWd1bGFyIHRh YmxlcywgYW5kIGRvbWFpbnMuCisgKgorICogTm90ZSB0aGF0IENPTlNUUkFJTlRfRk9SRUlHTiBj b25zdHJhaW50cyBhcmUgYWx3YXlzIGlnbm9yZWQuCisgKi8KK3N0YXRpYyBMaXN0ICoKK29idGFp bkNvbnN0cmFpbnRzKExpc3QgKmVsZW1lbnRzLCBPaWQgcmVsYXRpb25JZCwgT2lkIGRvbWFpbklk KQoreworCVJlbGF0aW9uCWNvblJlbDsKKwlTY2FuS2V5RGF0YSBrZXk7CisJU3lzU2NhbkRlc2Mg c2NhbjsKKwlIZWFwVHVwbGUJdHVwbGU7CisJT2JqVHJlZQkqY29uc3RyOworCisJLyogT25seSBv bmUgbWF5IGJlIHZhbGlkICovCisJQXNzZXJ0KE9pZElzVmFsaWQocmVsYXRpb25JZCkgXiBPaWRJ c1ZhbGlkKGRvbWFpbklkKSk7CisKKwkvKgorCSAqIFNjYW4gcGdfY29uc3RyYWludCB0byBmZXRj aCBhbGwgY29uc3RyYWludHMgbGlua2VkIHRvIHRoZSBnaXZlbgorCSAqIHJlbGF0aW9uLgorCSAq LworCWNvblJlbCA9IHRhYmxlX29wZW4oQ29uc3RyYWludFJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJl TG9jayk7CisJaWYgKE9pZElzVmFsaWQocmVsYXRpb25JZCkpCisJeworCQlTY2FuS2V5SW5pdCgm a2V5LAorCQkJCQlBbnVtX3BnX2NvbnN0cmFpbnRfY29ucmVsaWQsCisJCQkJCUJURXF1YWxTdHJh dGVneU51bWJlciwgRl9PSURFUSwKKwkJCQkJT2JqZWN0SWRHZXREYXR1bShyZWxhdGlvbklkKSk7 CisJCXNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4oY29uUmVsLCBDb25zdHJhaW50UmVsaWRUeXBp ZE5hbWVJbmRleElkLAorCQkJCQkJCQkgIHRydWUsIE5VTEwsIDEsICZrZXkpOworCX0KKwllbHNl CisJeworCQlBc3NlcnQoT2lkSXNWYWxpZChkb21haW5JZCkpOworCQlTY2FuS2V5SW5pdCgma2V5 LAorCQkJCQlBbnVtX3BnX2NvbnN0cmFpbnRfY29udHlwaWQsCisJCQkJCUJURXF1YWxTdHJhdGVn eU51bWJlciwgRl9PSURFUSwKKwkJCQkJT2JqZWN0SWRHZXREYXR1bShkb21haW5JZCkpOworCQlz Y2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKGNvblJlbCwgQ29uc3RyYWludFR5cGlkSW5kZXhJZCwK KwkJCQkJCQkJICB0cnVlLCBOVUxMLCAxLCAma2V5KTsKKwl9CisKKwkvKgorCSAqIEZvciBlYWNo IGNvbnN0cmFpbnQsIGFkZCBhIG5vZGUgdG8gdGhlIGxpc3Qgb2YgdGFibGUgZWxlbWVudHMuICBJ bgorCSAqIHRoZXNlIG5vZGVzIHdlIGluY2x1ZGUgbm90IG9ubHkgdGhlIHByaW50YWJsZSBpbmZv cm1hdGlvbiAoImZtdCIpLCBidXQKKwkgKiBhbHNvIHNlcGFyYXRlIGF0dHJpYnV0ZXMgdG8gaW5k aWNhdGUgdGhlIHR5cGUgb2YgY29uc3RyYWludCwgZm9yCisJICogYXV0b21hdGljIHByb2Nlc3Np bmcuCisJICovCisJd2hpbGUgKEhlYXBUdXBsZUlzVmFsaWQodHVwbGUgPSBzeXN0YWJsZV9nZXRu ZXh0KHNjYW4pKSkKKwl7CisJCUZvcm1fcGdfY29uc3RyYWludCBjb25zdHJGb3JtOworCQljaGFy CSAgICpjb250eXBlOworCisJCWNvbnN0ckZvcm0gPSAoRm9ybV9wZ19jb25zdHJhaW50KSBHRVRT VFJVQ1QodHVwbGUpOworCisJCXN3aXRjaCAoY29uc3RyRm9ybS0+Y29udHlwZSkKKwkJeworCQkJ Y2FzZSBDT05TVFJBSU5UX0NIRUNLOgorCQkJCWNvbnR5cGUgPSAiY2hlY2siOworCQkJCWJyZWFr OworCQkJY2FzZSBDT05TVFJBSU5UX0ZPUkVJR046CisJCQkJY29udGludWU7CS8qIG5vdCBoZXJl ICovCisJCQljYXNlIENPTlNUUkFJTlRfUFJJTUFSWToKKwkJCQljb250eXBlID0gInByaW1hcnkg a2V5IjsKKwkJCQlicmVhazsKKwkJCWNhc2UgQ09OU1RSQUlOVF9VTklRVUU6CisJCQkJY29udHlw ZSA9ICJ1bmlxdWUiOworCQkJCWJyZWFrOworCQkJY2FzZSBDT05TVFJBSU5UX1RSSUdHRVI6CisJ CQkJY29udHlwZSA9ICJ0cmlnZ2VyIjsKKwkJCQlicmVhazsKKwkJCWNhc2UgQ09OU1RSQUlOVF9F WENMVVNJT046CisJCQkJY29udHlwZSA9ICJleGNsdXNpb24iOworCQkJCWJyZWFrOworCQkJZGVm YXVsdDoKKwkJCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIGNvbnN0cmFpbnQgdHlwZSIpOwor CQl9CisKKwkJLyoKKwkJICogInR5cGUiIGFuZCAiY29udHlwZSIgYXJlIG5vdCBwYXJ0IG9mIHRo ZSBwcmludGFibGUgb3V0cHV0LCBidXQgYXJlCisJCSAqIHVzZWZ1bCB0byBwcm9ncmFtbWF0aWNh bGx5IGRpc3Rpbmd1aXNoIHRoZXNlIGZyb20gY29sdW1ucyBhbmQgYW1vbmcKKwkJICogZGlmZmVy ZW50IGNvbnN0cmFpbnQgdHlwZXMuCisJCSAqCisJCSAqIFhYWCBpdCBtaWdodCBiZSB1c2VmdWwg dG8gYWxzbyBsaXN0IHRoZSBjb2x1bW4gbmFtZXMgaW4gYSBQSywgZXRjLgorCQkgKi8KKwkJY29u c3RyID0gbmV3X29ianRyZWVfVkEoIkNPTlNUUkFJTlQgJXtuYW1lfUkgJXtkZWZpbml0aW9ufXMi LAorCQkJCQkJCQk0LAorCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJjb25zdHJhaW50 IiwKKwkJCQkJCQkJImNvbnR5cGUiLCBPYmpUeXBlU3RyaW5nLCBjb250eXBlLAorCQkJCQkJCQki bmFtZSIsIE9ialR5cGVTdHJpbmcsIE5hbWVTdHIoY29uc3RyRm9ybS0+Y29ubmFtZSksCisJCQkJ CQkJCSJkZWZpbml0aW9uIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJIHBnX2dldF9jb25zdHJh aW50ZGVmX2NvbW1hbmRfc2ltcGxlKGNvbnN0ckZvcm0tPm9pZCkpOworCQllbGVtZW50cyA9IGxh cHBlbmQoZWxlbWVudHMsIG5ld19vYmplY3Rfb2JqZWN0KGNvbnN0cikpOworCX0KKworCXN5c3Rh YmxlX2VuZHNjYW4oc2Nhbik7CisJdGFibGVfY2xvc2UoY29uUmVsLCBBY2Nlc3NTaGFyZUxvY2sp OworCisJcmV0dXJuIGVsZW1lbnRzOworfQorCisvKgorICogUmV0dXJuIGFuIGluZGV4IGRlZmlu aXRpb24sIHNwbGl0IGluIHNldmVyYWwgcGllY2VzLgorICoKKyAqIEEgbGFyZ2UgYW1vdW50IG9m IGNvZGUgaXMgZHVwbGljYXRlZCBmcm9tICBwZ19nZXRfaW5kZXhkZWZfd29ya2VyLCBidXQKKyAq IGNvbnRyb2wgZmxvdyBpcyBkaWZmZXJlbnQgZW5vdWdoIHRoYXQgaXQgZG9lc24ndCBzZWVtIHdv cnRoIGtlZXBpbmcgdGhlbQorICogdG9nZXRoZXIuCisgKi8KK3N0YXRpYyB2b2lkCitwZ19nZXRf aW5kZXhkZWZfZGV0YWlsZWQoT2lkIGluZGV4cmVsaWQsCisJCQkJCQkgY2hhciAqKmluZGV4X2Ft LAorCQkJCQkJIGNoYXIgKipkZWZpbml0aW9uLAorCQkJCQkJIGNoYXIgKipyZWxvcHRpb25zLAor CQkJCQkJIGNoYXIgKip0YWJsZXNwYWNlLAorCQkJCQkJIGNoYXIgKip3aGVyZUNsYXVzZSkKK3sK KwlIZWFwVHVwbGUJaHRfaWR4OworCUhlYXBUdXBsZQlodF9pZHhyZWw7CisJSGVhcFR1cGxlCWh0 X2FtOworCUZvcm1fcGdfaW5kZXggaWR4cmVjOworCUZvcm1fcGdfY2xhc3MgaWR4cmVscmVjOwor CUZvcm1fcGdfYW0JYW1yZWM7CisJSW5kZXhBbVJvdXRpbmUgKmFtcm91dGluZTsKKwlMaXN0CSAg ICppbmRleHByczsKKwlMaXN0Q2VsbCAgICppbmRleHByX2l0ZW07CisJTGlzdAkgICAqY29udGV4 dDsKKwlPaWQJCQlpbmRyZWxpZDsKKwlpbnQJCQlrZXlubzsKKwlEYXR1bQkJaW5kY29sbERhdHVt OworCURhdHVtCQlpbmRjbGFzc0RhdHVtOworCURhdHVtCQlpbmRvcHRpb25EYXR1bTsKKwlib29s CQlpc251bGw7CisJb2lkdmVjdG9yICAqaW5kY29sbGF0aW9uOworCW9pZHZlY3RvciAgKmluZGNs YXNzOworCWludDJ2ZWN0b3IgKmluZG9wdGlvbjsKKwlTdHJpbmdJbmZvRGF0YSBkZWZpbml0aW9u QnVmOworCisJLyoKKwkgKiBGZXRjaCB0aGUgcGdfaW5kZXggdHVwbGUgYnkgdGhlIE9pZCBvZiB0 aGUgaW5kZXgKKwkgKi8KKwlodF9pZHggPSBTZWFyY2hTeXNDYWNoZTEoSU5ERVhSRUxJRCwgT2Jq ZWN0SWRHZXREYXR1bShpbmRleHJlbGlkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGh0X2lk eCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBpbmRleCAldSIsIGlu ZGV4cmVsaWQpOworCWlkeHJlYyA9IChGb3JtX3BnX2luZGV4KSBHRVRTVFJVQ1QoaHRfaWR4KTsK KworCWluZHJlbGlkID0gaWR4cmVjLT5pbmRyZWxpZDsKKwlBc3NlcnQoaW5kZXhyZWxpZCA9PSBp ZHhyZWMtPmluZGV4cmVsaWQpOworCisJLyogTXVzdCBnZXQgaW5kY29sbGF0aW9uLCBpbmRjbGFz cywgYW5kIGluZG9wdGlvbiB0aGUgaGFyZCB3YXkgKi8KKwlpbmRjb2xsRGF0dW0gPSBTeXNDYWNo ZUdldEF0dHIoSU5ERVhSRUxJRCwgaHRfaWR4LAorCQkJCQkJCQkgICBBbnVtX3BnX2luZGV4X2lu ZGNvbGxhdGlvbiwgJmlzbnVsbCk7CisJQXNzZXJ0KCFpc251bGwpOworCWluZGNvbGxhdGlvbiA9 IChvaWR2ZWN0b3IgKikgRGF0dW1HZXRQb2ludGVyKGluZGNvbGxEYXR1bSk7CisKKwlpbmRjbGFz c0RhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKElOREVYUkVMSUQsIGh0X2lkeCwKKwkJCQkJCQkJCUFu dW1fcGdfaW5kZXhfaW5kY2xhc3MsICZpc251bGwpOworCUFzc2VydCghaXNudWxsKTsKKwlpbmRj bGFzcyA9IChvaWR2ZWN0b3IgKikgRGF0dW1HZXRQb2ludGVyKGluZGNsYXNzRGF0dW0pOworCisJ aW5kb3B0aW9uRGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoSU5ERVhSRUxJRCwgaHRfaWR4LAorCQkJ CQkJCQkJIEFudW1fcGdfaW5kZXhfaW5kb3B0aW9uLCAmaXNudWxsKTsKKwlBc3NlcnQoIWlzbnVs bCk7CisJaW5kb3B0aW9uID0gKGludDJ2ZWN0b3IgKikgRGF0dW1HZXRQb2ludGVyKGluZG9wdGlv bkRhdHVtKTsKKworCS8qCisJICogRmV0Y2ggdGhlIHBnX2NsYXNzIHR1cGxlIG9mIHRoZSBpbmRl eCByZWxhdGlvbgorCSAqLworCWh0X2lkeHJlbCA9IFNlYXJjaFN5c0NhY2hlMShSRUxPSUQsIE9i amVjdElkR2V0RGF0dW0oaW5kZXhyZWxpZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChodF9p ZHhyZWwpKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcmVsYXRpb24g JXUiLCBpbmRleHJlbGlkKTsKKwlpZHhyZWxyZWMgPSAoRm9ybV9wZ19jbGFzcykgR0VUU1RSVUNU KGh0X2lkeHJlbCk7CisKKwkvKgorCSAqIEZldGNoIHRoZSBwZ19hbSB0dXBsZSBvZiB0aGUgaW5k ZXgnIGFjY2VzcyBtZXRob2QKKwkgKi8KKwlodF9hbSA9IFNlYXJjaFN5c0NhY2hlMShBTU9JRCwg T2JqZWN0SWRHZXREYXR1bShpZHhyZWxyZWMtPnJlbGFtKSk7CisJaWYgKCFIZWFwVHVwbGVJc1Zh bGlkKGh0X2FtKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGFjY2Vz cyBtZXRob2QgJXUiLAorCQkJIGlkeHJlbHJlYy0+cmVsYW0pOworCWFtcmVjID0gKEZvcm1fcGdf YW0pIEdFVFNUUlVDVChodF9hbSk7CisKKwkvKgorCSAqIEdldCB0aGUgaW5kZXggZXhwcmVzc2lv bnMsIGlmIGFueS4gIChOT1RFOiB3ZSBkbyBub3QgdXNlIHRoZSByZWxjYWNoZQorCSAqIHZlcnNp b25zIG9mIHRoZSBleHByZXNzaW9ucyBhbmQgcHJlZGljYXRlLCBiZWNhdXNlIHdlIHdhbnQgdG8g ZGlzcGxheQorCSAqIG5vbi1jb25zdC1mb2xkZWQgZXhwcmVzc2lvbnMuKQorCSAqLworCWlmICgh aGVhcF9hdHRpc251bGwoaHRfaWR4LCBBbnVtX3BnX2luZGV4X2luZGV4cHJzLCBOVUxMKSkKKwl7 CisJCURhdHVtCQlleHByc0RhdHVtOworCQlib29sCQlpc251bGw7CisJCWNoYXIJICAgKmV4cHJz U3RyaW5nOworCisJCWV4cHJzRGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoSU5ERVhSRUxJRCwgaHRf aWR4LAorCQkJCQkJCQkJIEFudW1fcGdfaW5kZXhfaW5kZXhwcnMsICZpc251bGwpOworCQlBc3Nl cnQoIWlzbnVsbCk7CisJCWV4cHJzU3RyaW5nID0gVGV4dERhdHVtR2V0Q1N0cmluZyhleHByc0Rh dHVtKTsKKwkJaW5kZXhwcnMgPSAoTGlzdCAqKSBzdHJpbmdUb05vZGUoZXhwcnNTdHJpbmcpOwor CQlwZnJlZShleHByc1N0cmluZyk7CisJfQorCWVsc2UKKwkJaW5kZXhwcnMgPSBOSUw7CisKKwlp bmRleHByX2l0ZW0gPSBsaXN0X2hlYWQoaW5kZXhwcnMpOworCisJY29udGV4dCA9IGRlcGFyc2Vf Y29udGV4dF9mb3IoZ2V0X3JlbF9uYW1lKGluZHJlbGlkKSwgaW5kcmVsaWQpOworCisJaW5pdFN0 cmluZ0luZm8oJmRlZmluaXRpb25CdWYpOworCisJLyogT3V0cHV0IGluZGV4IEFNICovCisJKmlu ZGV4X2FtID0gcHN0cmR1cChxdW90ZV9pZGVudGlmaWVyKE5hbWVTdHIoYW1yZWMtPmFtbmFtZSkp KTsKKworCS8qIEZldGNoIHRoZSBpbmRleCBBTSdzIEFQSSBzdHJ1Y3QgKi8KKwlhbXJvdXRpbmUg PSBHZXRJbmRleEFtUm91dGluZShhbXJlYy0+YW1oYW5kbGVyKTsKKworCS8qCisJICogT3V0cHV0 IGluZGV4IGRlZmluaXRpb24uICBOb3RlIHRoZSBvdXRlciBwYXJlbnMgbXVzdCBiZSBzdXBwbGll ZCBieQorCSAqIGNhbGxlci4KKwkgKi8KKwlmb3IgKGtleW5vID0gMDsga2V5bm8gPCBpZHhyZWMt PmluZG5hdHRzOyBrZXlubysrKQorCXsKKwkJQXR0ck51bWJlcglhdHRudW0gPSBpZHhyZWMtPmlu ZGtleS52YWx1ZXNba2V5bm9dOworCQlpbnQxNgkJb3B0ID0gaW5kb3B0aW9uLT52YWx1ZXNba2V5 bm9dOworCQlPaWQJCQlrZXljb2x0eXBlOworCQlPaWQJCQlrZXljb2xjb2xsYXRpb247CisJCU9p ZAkJCWluZGNvbGw7CisKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZGVmaW5pdGlvbkJ1Ziwg a2V5bm8gPT0gMCA/ICIiIDogIiwgIik7CisKKwkJaWYgKGF0dG51bSAhPSAwKQorCQl7CisJCQkv KiBTaW1wbGUgaW5kZXggY29sdW1uICovCisJCQljaGFyCSAgICphdHRuYW1lOworCQkJaW50MzIJ CWtleWNvbHR5cG1vZDsKKworCQkJYXR0bmFtZSA9IGdldF9hdHRuYW1lKGluZHJlbGlkLCBhdHRu dW0sIGZhbHNlKTsKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmRlZmluaXRpb25CdWYsIHF1 b3RlX2lkZW50aWZpZXIoYXR0bmFtZSkpOworCQkJZ2V0X2F0dHR5cGV0eXBtb2Rjb2xsKGluZHJl bGlkLCBhdHRudW0sCisJCQkJCQkJCSAgJmtleWNvbHR5cGUsICZrZXljb2x0eXBtb2QsCisJCQkJ CQkJCSAgJmtleWNvbGNvbGxhdGlvbik7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKiBFeHByZXNz aW9uYWwgaW5kZXggKi8KKwkJCU5vZGUJICAgKmluZGV4a2V5OworCQkJY2hhcgkgICAqc3RyOwor CisJCQlpZiAoaW5kZXhwcl9pdGVtID09IE5VTEwpCisJCQkJZWxvZyhFUlJPUiwgInRvbyBmZXcg ZW50cmllcyBpbiBpbmRleHBycyBsaXN0Iik7CisJCQlpbmRleGtleSA9IChOb2RlICopIGxmaXJz dChpbmRleHByX2l0ZW0pOworCQkJaW5kZXhwcl9pdGVtID0gbG5leHQoaW5kZXhwcnMsIGluZGV4 cHJfaXRlbSk7CisJCQkvKiBEZXBhcnNlICovCisJCQlzdHIgPSBkZXBhcnNlX2V4cHJlc3Npb24o aW5kZXhrZXksIGNvbnRleHQsIGZhbHNlLCBmYWxzZSk7CisKKwkJCS8qIE5lZWQgcGFyZW5zIGlm IGl0J3Mgbm90IGEgYmFyZSBmdW5jdGlvbiBjYWxsICovCisJCQlpZiAoaW5kZXhrZXkgJiYgSXNB KGluZGV4a2V5LCBGdW5jRXhwcikgJiYKKwkJCQkoKEZ1bmNFeHByICopIGluZGV4a2V5KS0+ZnVu Y2Zvcm1hdCA9PSBDT0VSQ0VfRVhQTElDSVRfQ0FMTCkKKwkJCQlhcHBlbmRTdHJpbmdJbmZvU3Ry aW5nKCZkZWZpbml0aW9uQnVmLCBzdHIpOworCQkJZWxzZQorCQkJCWFwcGVuZFN0cmluZ0luZm8o JmRlZmluaXRpb25CdWYsICIoJXMpIiwgc3RyKTsKKworCQkJa2V5Y29sdHlwZSA9IGV4cHJUeXBl KGluZGV4a2V5KTsKKwkJCWtleWNvbGNvbGxhdGlvbiA9IGV4cHJDb2xsYXRpb24oaW5kZXhrZXkp OworCQl9CisKKwkJLyogQWRkIGNvbGxhdGlvbiwgZXZlbiBpZiBkZWZhdWx0ICovCisJCWluZGNv bGwgPSBpbmRjb2xsYXRpb24tPnZhbHVlc1trZXlub107CisJCWlmIChPaWRJc1ZhbGlkKGluZGNv bGwpKQorCQkJYXBwZW5kU3RyaW5nSW5mbygmZGVmaW5pdGlvbkJ1ZiwgIiBDT0xMQVRFICVzIiwK KwkJCQkJCQkgZ2VuZXJhdGVfY29sbGF0aW9uX25hbWUoKGluZGNvbGwpKSk7CisKKwkJLyogQWRk IHRoZSBvcGVyYXRvciBjbGFzcyBuYW1lLCBldmVuIGlmIGRlZmF1bHQgKi8KKwkJZ2V0X29wY2xh c3NfbmFtZShpbmRjbGFzcy0+dmFsdWVzW2tleW5vXSwgSW52YWxpZE9pZCwgJmRlZmluaXRpb25C dWYpOworCisJCS8qIEFkZCBvcHRpb25zIGlmIHJlbGV2YW50ICovCisJCWlmIChhbXJvdXRpbmUt PmFtY2Fub3JkZXIpCisJCXsKKwkJCS8qIElmIGl0IHN1cHBvcnRzIHNvcnQgb3JkZXJpbmcsIHJl cG9ydCBERVNDIGFuZCBOVUxMUyBvcHRzICovCisJCQlpZiAob3B0ICYgSU5ET1BUSU9OX0RFU0Mp CisJCQl7CisJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZGVmaW5pdGlvbkJ1ZiwgIiBERVND Iik7CisJCQkJLyogTlVMTFMgRklSU1QgaXMgdGhlIGRlZmF1bHQgaW4gdGhpcyBjYXNlICovCisJ CQkJaWYgKCEob3B0ICYgSU5ET1BUSU9OX05VTExTX0ZJUlNUKSkKKwkJCQkJYXBwZW5kU3RyaW5n SW5mb1N0cmluZygmZGVmaW5pdGlvbkJ1ZiwgIiBOVUxMUyBMQVNUIik7CisJCQl9CisJCQllbHNl CisJCQl7CisJCQkJaWYgKG9wdCAmIElORE9QVElPTl9OVUxMU19GSVJTVCkKKwkJCQkJYXBwZW5k U3RyaW5nSW5mb1N0cmluZygmZGVmaW5pdGlvbkJ1ZiwgIiBOVUxMUyBGSVJTVCIpOworCQkJfQor CQl9CisKKwkJLyogWFhYIGV4Y2x1ZGVPcHMgdGhpbmd5IHdhcyBoZXJlOyBkbyB3ZSBuZWVkIGFu eXRoaW5nPyAqLworCX0KKwkqZGVmaW5pdGlvbiA9IGRlZmluaXRpb25CdWYuZGF0YTsKKworCS8q IE91dHB1dCByZWxvcHRpb25zICovCisJKnJlbG9wdGlvbnMgPSBmbGF0dGVuX3JlbG9wdGlvbnMo aW5kZXhyZWxpZCk7CisKKwkvKiBPdXRwdXQgdGFibGVzcGFjZSAqLworCXsKKwkJT2lkCQkJdGJs c3BjOworCisJCXRibHNwYyA9IGdldF9yZWxfdGFibGVzcGFjZShpbmRleHJlbGlkKTsKKwkJaWYg KE9pZElzVmFsaWQodGJsc3BjKSkKKwkJCSp0YWJsZXNwYWNlID0gcHN0cmR1cChxdW90ZV9pZGVu dGlmaWVyKGdldF90YWJsZXNwYWNlX25hbWUodGJsc3BjKSkpOworCQllbHNlCisJCQkqdGFibGVz cGFjZSA9IE5VTEw7CisJfQorCisJLyogUmVwb3J0IGluZGV4IHByZWRpY2F0ZSwgaWYgYW55ICov CisJaWYgKCFoZWFwX2F0dGlzbnVsbChodF9pZHgsIEFudW1fcGdfaW5kZXhfaW5kcHJlZCwgTlVM TCkpCisJeworCQlOb2RlCSAgICpub2RlOworCQlEYXR1bQkJcHJlZERhdHVtOworCQlib29sCQlp c251bGw7CisJCWNoYXIJICAgKnByZWRTdHJpbmc7CisKKwkJLyogQ29udmVydCB0ZXh0IHN0cmlu ZyB0byBub2RlIHRyZWUgKi8KKwkJcHJlZERhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKElOREVYUkVM SUQsIGh0X2lkeCwKKwkJCQkJCQkJCUFudW1fcGdfaW5kZXhfaW5kcHJlZCwgJmlzbnVsbCk7CisJ CUFzc2VydCghaXNudWxsKTsKKwkJcHJlZFN0cmluZyA9IFRleHREYXR1bUdldENTdHJpbmcocHJl ZERhdHVtKTsKKwkJbm9kZSA9IChOb2RlICopIHN0cmluZ1RvTm9kZShwcmVkU3RyaW5nKTsKKwkJ cGZyZWUocHJlZFN0cmluZyk7CisKKwkJLyogRGVwYXJzZSAqLworCQkqd2hlcmVDbGF1c2UgPQor CQkJZGVwYXJzZV9leHByZXNzaW9uKG5vZGUsIGNvbnRleHQsIGZhbHNlLCBmYWxzZSk7CisJfQor CWVsc2UKKwkJKndoZXJlQ2xhdXNlID0gTlVMTDsKKworCS8qIENsZWFuIHVwICovCisJUmVsZWFz ZVN5c0NhY2hlKGh0X2lkeCk7CisJUmVsZWFzZVN5c0NhY2hlKGh0X2lkeHJlbCk7CisJUmVsZWFz ZVN5c0NhY2hlKGh0X2FtKTsKK30KKworLyoKKyAqIE9idGFpbiB0aGUgZGVwYXJzZWQgZGVmYXVs dCB2YWx1ZSBmb3IgdGhlIGdpdmVuIGNvbHVtbiBvZiB0aGUgZ2l2ZW4gdGFibGUuCisgKgorICog Q2FsbGVyIG11c3QgaGF2ZSBzZXQgYSBjb3JyZWN0IGRlcGFyc2UgY29udGV4dC4KKyAqLworc3Rh dGljIGNoYXIgKgorUmVsYXRpb25HZXRDb2x1bW5EZWZhdWx0KFJlbGF0aW9uIHJlbCwgQXR0ck51 bWJlciBhdHRubywgTGlzdCAqZHBjb250ZXh0LAorCQkJCQkJIExpc3QgKipleHBycykKK3sKKwlO b2RlICpkZWZ2YWw7CisJY2hhciAqZGVmc3RyOworCisJZGVmdmFsID0gYnVpbGRfY29sdW1uX2Rl ZmF1bHQocmVsLCBhdHRubyk7CisJZGVmc3RyID0gZGVwYXJzZV9leHByZXNzaW9uKGRlZnZhbCwg ZHBjb250ZXh0LCBmYWxzZSwgZmFsc2UpOworCisJLyogQ29sbGVjdCB0aGUgZXhwcmVzc2lvbiBm b3IgbGF0ZXIgcmVwbGljYXRpb24gc2FmZXR5IGNoZWNrcyAqLworCWlmIChleHBycykKKwkJKmV4 cHJzID0gbGFwcGVuZCgqZXhwcnMsIGRlZnZhbCk7CisKKwlyZXR1cm4gZGVmc3RyOworfQorCisv KgorICogT2J0YWluIHRoZSBkZXBhcnNlZCBwYXJ0aXRpb24gYm91bmQgZXhwcmVzc2lvbiBmb3Ig dGhlIGdpdmVuIHRhYmxlLgorICovCitzdGF0aWMgY2hhciAqCitSZWxhdGlvbkdldFBhcnRpdGlv bkJvdW5kKE9pZCByZWxpZCkKK3sKKwlEYXR1bQkJZGVwYXJzZWQ7CisJRGF0dW0JCWJvdW5kRGF0 dW07CisJYm9vbAkJaXNudWxsOworCUhlYXBUdXBsZQl0dXBsZTsKKworCXR1cGxlID0gU2VhcmNo U3lzQ2FjaGUxKFJFTE9JRCwgcmVsaWQpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSkp CisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciByZWxhdGlvbiAldSIsCisJ CQkgcmVsaWQpOworCisJYm91bmREYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihSRUxPSUQsIHR1cGxl LAorCQkJCQkJCQkgQW51bV9wZ19jbGFzc19yZWxwYXJ0Ym91bmQsCisJCQkJCQkJCSAmaXNudWxs KTsKKworCWRlcGFyc2VkID0gRGlyZWN0RnVuY3Rpb25DYWxsMihwZ19nZXRfZXhwciwKKwkJCQkJ CQkJICAgQ1N0cmluZ0dldFRleHREYXR1bShUZXh0RGF0dW1HZXRDU3RyaW5nKGJvdW5kRGF0dW0p KSwKKwkJCQkJCQkJICAgcmVsaWQpOworCisJUmVsZWFzZVN5c0NhY2hlKHR1cGxlKTsKKworCXJl dHVybiBUZXh0RGF0dW1HZXRDU3RyaW5nKGRlcGFyc2VkKTsKK30KKworLyoKKyAqIFJldHVybiB0 aGUgZ2l2ZW4gb2JqZWN0IHR5cGUgYXMgYSBzdHJpbmcuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFy ICoKK3N0cmluZ2lmeV9vYmp0eXBlKE9iamVjdFR5cGUgb2JqdHlwZSkKK3sKKwlzd2l0Y2ggKG9i anR5cGUpCisJeworCQljYXNlIE9CSkVDVF9BR0dSRUdBVEU6CisJCQlyZXR1cm4gIkFHR1JFR0FU RSI7CisJCWNhc2UgT0JKRUNUX0NBU1Q6CisJCQlyZXR1cm4gIkNBU1QiOworCQljYXNlIE9CSkVD VF9DT0xVTU46CisJCQlyZXR1cm4gIkNPTFVNTiI7CisJCWNhc2UgT0JKRUNUX0NPTExBVElPTjoK KwkJCXJldHVybiAiQ09MTEFUSU9OIjsKKwkJY2FzZSBPQkpFQ1RfQ09OVkVSU0lPTjoKKwkJCXJl dHVybiAiQ09OVkVSU0lPTiI7CisJCWNhc2UgT0JKRUNUX0RBVEFCQVNFOgorCQkJcmV0dXJuICJE QVRBQkFTRSI7CisJCWNhc2UgT0JKRUNUX0RPTUFJTjoKKwkJCXJldHVybiAiRE9NQUlOIjsKKwkJ Y2FzZSBPQkpFQ1RfRVZFTlRfVFJJR0dFUjoKKwkJCXJldHVybiAiRVZFTlQgVFJJR0dFUiI7CisJ CWNhc2UgT0JKRUNUX0VYVEVOU0lPTjoKKwkJCXJldHVybiAiRVhURU5TSU9OIjsKKwkJY2FzZSBP QkpFQ1RfRkRXOgorCQkJcmV0dXJuICJGT1JFSUdOIERBVEEgV1JBUFBFUiI7CisJCWNhc2UgT0JK RUNUX0ZPUkVJR05fU0VSVkVSOgorCQkJcmV0dXJuICJTRVJWRVIiOworCQljYXNlIE9CSkVDVF9G T1JFSUdOX1RBQkxFOgorCQkJcmV0dXJuICJGT1JFSUdOIFRBQkxFIjsKKwkJY2FzZSBPQkpFQ1Rf RlVOQ1RJT046CisJCQlyZXR1cm4gIkZVTkNUSU9OIjsKKwkJY2FzZSBPQkpFQ1RfSU5ERVg6CisJ CQlyZXR1cm4gIklOREVYIjsKKwkJY2FzZSBPQkpFQ1RfTEFOR1VBR0U6CisJCQlyZXR1cm4gIkxB TkdVQUdFIjsKKwkJY2FzZSBPQkpFQ1RfTEFSR0VPQkpFQ1Q6CisJCQlyZXR1cm4gIkxBUkdFIE9C SkVDVCI7CisJCWNhc2UgT0JKRUNUX01BVFZJRVc6CisJCQlyZXR1cm4gIk1BVEVSSUFMSVpFRCBW SUVXIjsKKwkJY2FzZSBPQkpFQ1RfT1BDTEFTUzoKKwkJCXJldHVybiAiT1BFUkFUT1IgQ0xBU1Mi OworCQljYXNlIE9CSkVDVF9PUEVSQVRPUjoKKwkJCXJldHVybiAiT1BFUkFUT1IiOworCQljYXNl IE9CSkVDVF9PUEZBTUlMWToKKwkJCXJldHVybiAiT1BFUkFUT1IgRkFNSUxZIjsKKwkJY2FzZSBP QkpFQ1RfUE9MSUNZOgorCQkJcmV0dXJuICJQT0xJQ1kiOworCQljYXNlIE9CSkVDVF9ST0xFOgor CQkJcmV0dXJuICJST0xFIjsKKwkJY2FzZSBPQkpFQ1RfUlVMRToKKwkJCXJldHVybiAiUlVMRSI7 CisJCWNhc2UgT0JKRUNUX1NDSEVNQToKKwkJCXJldHVybiAiU0NIRU1BIjsKKwkJY2FzZSBPQkpF Q1RfU0VRVUVOQ0U6CisJCQlyZXR1cm4gIlNFUVVFTkNFIjsKKwkJY2FzZSBPQkpFQ1RfVEFCTEU6 CisJCQlyZXR1cm4gIlRBQkxFIjsKKwkJY2FzZSBPQkpFQ1RfVEFCTEVTUEFDRToKKwkJCXJldHVy biAiVEFCTEVTUEFDRSI7CisJCWNhc2UgT0JKRUNUX1RSSUdHRVI6CisJCQlyZXR1cm4gIlRSSUdH RVIiOworCQljYXNlIE9CSkVDVF9UU0NPTkZJR1VSQVRJT046CisJCQlyZXR1cm4gIlRFWFQgU0VB UkNIIENPTkZJR1VSQVRJT04iOworCQkvKgorCQljYXNlIE9CSkVDVF9UU0NPTkZJR19NQVBQSU5H OgorCQkJcmV0dXJuICJURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OIE1BUFBJTkciOworCQkqLwor CQljYXNlIE9CSkVDVF9UU0RJQ1RJT05BUlk6CisJCQlyZXR1cm4gIlRFWFQgU0VBUkNIIERJQ1RJ T05BUlkiOworCQljYXNlIE9CSkVDVF9UU1BBUlNFUjoKKwkJCXJldHVybiAiVEVYVCBTRUFSQ0gg UEFSU0VSIjsKKwkJY2FzZSBPQkpFQ1RfVFNURU1QTEFURToKKwkJCXJldHVybiAiVEVYVCBTRUFS Q0ggVEVNUExBVEUiOworCQljYXNlIE9CSkVDVF9UWVBFOgorCQkJcmV0dXJuICJUWVBFIjsKKwkJ Y2FzZSBPQkpFQ1RfVVNFUl9NQVBQSU5HOgorCQkJcmV0dXJuICJVU0VSIE1BUFBJTkciOworCQlj YXNlIE9CSkVDVF9WSUVXOgorCQkJcmV0dXJuICJWSUVXIjsKKworCQlkZWZhdWx0OgorCQkJZWxv ZyhFUlJPUiwgInVuc3VwcG9ydGVkIG9iamVjdCB0eXBlICVkIiwgb2JqdHlwZSk7CisJfQorfQor CisvKgorICogR2l2ZW4gYSBDb2xsZWN0ZWRDb21tYW5kLCByZXR1cm4gYSBKU09OIHJlcHJlc2Vu dGF0aW9uIG9mIGl0LgorICoKKyAqIFRoZSBjb21tYW5kIGlzIGV4cGFuZGVkIGZ1bGx5LCBzbyB0 aGF0IHRoZXJlIGFyZSBubyBhbWJpZ3VpdGllcyBldmVuIGluIHRoZQorICogZmFjZSBvZiBzZWFy Y2hfcGF0aCBjaGFuZ2VzLgorICovCitEYXR1bQorZGRsX2RlcGFyc2VfdG9fanNvbihQR19GVU5D VElPTl9BUkdTKQoreworCUNvbGxlY3RlZENvbW1hbmQgKmNtZCA9IChDb2xsZWN0ZWRDb21tYW5k ICopIFBHX0dFVEFSR19QT0lOVEVSKDApOworCWNoYXIJCSAgICpjb21tYW5kOworCisJY29tbWFu ZCA9IGRlcGFyc2VfdXRpbGl0eV9jb21tYW5kKGNtZCwgdHJ1ZSk7CisKKwlpZiAoY29tbWFuZCkK KwkJUEdfUkVUVVJOX1RFWFRfUChDU3RyaW5nR2V0VGV4dERhdHVtKGNvbW1hbmQpKTsKKworCVBH X1JFVFVSTl9OVUxMKCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFsdGVyRnVuY3Rpb25TdG10 IChBTFRFUiBGVU5DVElPTikKKyAqCisgKiBHaXZlbiBhIGZ1bmN0aW9uIE9JRCBhbmQgdGhlIHBh cnNldHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiB0aGUgSlNPTgorICogYmxvYiByZXByZXNl bnRpbmcgdGhlIGFsdGVyIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2Vf QWx0ZXJGdW5jdGlvbihPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlBbHRlckZ1 bmN0aW9uU3RtdCAqbm9kZSA9IChBbHRlckZ1bmN0aW9uU3RtdCAqKSBwYXJzZXRyZWU7CisJT2Jq VHJlZQkgICAqYWx0ZXJGdW5jOworCU9ialRyZWUJICAgKnNpZ247CisJSGVhcFR1cGxlCXByb2NU dXA7CisJRm9ybV9wZ19wcm9jIHByb2NGb3JtOworCUxpc3QJICAgKnBhcmFtcyA9IE5JTDsKKwlM aXN0CSAgICplbGVtcyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCWludAkJCWk7CisKKwkv KiBHZXQgdGhlIHBnX3Byb2MgdHVwbGUgKi8KKwlwcm9jVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBS T0NPSUQsIG9iamVjdElkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocHJvY1R1cCkpCisJCWVs b2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbHVyZSBmb3IgZnVuY3Rpb24gd2l0aCBPSUQgJXUi LAorCQkJIG9iamVjdElkKTsKKwlwcm9jRm9ybSA9IChGb3JtX3BnX3Byb2MpIEdFVFNUUlVDVChw cm9jVHVwKTsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIEFMVEVSIEZVTkNU SU9OICV7c2lnbmF0dXJlfXMgJXtkZWZpbml0aW9uOiB9cworCSAqLworCWFsdGVyRnVuYyA9IG5l d19vYmp0cmVlX1ZBKCJBTFRFUiBGVU5DVElPTiIsIDApOworCisJLyoKKwkgKiBBTFRFUiBGVU5D VElPTiBkb2VzIG5vdCBjaGFuZ2Ugc2lnbmF0dXJlIHNvIHdlIGNhbiB1c2UgY2F0YWxvZworCSAq IHRvIGdldCBpbnB1dCB0eXBlIE9pZHMuCisJICovCisJZm9yIChpID0gMDsgaSA8IHByb2NGb3Jt LT5wcm9uYXJnczsgaSsrKQorCXsKKwkJT2JqVHJlZQkgICAqdG1wb2JqID0gbmV3X29ianRyZWVf VkEoIiV7dHlwZX1UIiwgMCk7CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAidHlw ZSIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHByb2NGb3JtLT5wcm9hcmd0eXBlcy52 YWx1ZXNbaV0sIC0xKSk7CisJCXBhcmFtcyA9IGxhcHBlbmQocGFyYW1zLCBuZXdfb2JqZWN0X29i amVjdCh0bXBvYmopKTsKKwl9CisKKwlzaWduID0gbmV3X29ianRyZWUoIiIpOworCisJYXBwZW5k X29iamVjdF9vYmplY3Qoc2lnbiwgIiV7aWRlbnRpdHl9RCIsCisJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIG9iamVj dElkKSk7CisJYXBwZW5kX2FycmF5X29iamVjdChzaWduLCAiKCV7YXJndW1lbnRzOiwgfXMpIiwg cGFyYW1zKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyRnVuYywgIiV7c2lnbmF0dXJl fXMiLCBzaWduKTsKKworCWZvcmVhY2goY2VsbCwgbm9kZS0+YWN0aW9ucykKKwl7CisJCURlZkVs ZW0JKmRlZmVsID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCQlPYmpUcmVlCSAgICp0bXBv YmogPSBOVUxMOworCisJCWlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJ2b2xhdGlsaXR5Iikg PT0gMCkKKwkJeworCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoc3RyVmFsKGRlZmVsLT5hcmcp LCAwKTsKKwkJfQorCQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJzdHJpY3QiKSA9 PSAwKQorCQl7CisJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQShpbnRWYWwoZGVmZWwtPmFyZykg PworCQkJCQkJCQkgIlJFVFVSTlMgTlVMTCBPTiBOVUxMIElOUFVUIiA6CisJCQkJCQkJCSAiQ0FM TEVEIE9OIE5VTEwgSU5QVVQiLCAwKTsKKwkJfQorCQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRl Zm5hbWUsICJzZWN1cml0eSIpID09IDApCisJCXsKKwkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZB KGludFZhbChkZWZlbC0+YXJnKSA/CisJCQkJCQkJCSAiU0VDVVJJVFkgREVGSU5FUiIgOiAiU0VD VVJJVFkgSU5WT0tFUiIsIDApOworCQl9CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFt ZSwgImxlYWtwcm9vZiIpID09IDApCisJCXsKKwkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKGlu dFZhbChkZWZlbC0+YXJnKSA/CisJCQkJCQkJCSAiTEVBS1BST09GIiA6ICJOT1QgTEVBS1BST09G IiwgMCk7CisJCX0KKwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAiY29zdCIpID09 IDApCisJCXsKKwkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJDT1NUICV7Y29zdH1uIiwgMSwK KwkJCQkJCQkJICJjb3N0IiwgT2JqVHlwZUZsb2F0LAorCQkJCQkJCQkgZGVmR2V0TnVtZXJpYyhk ZWZlbCkpOworCQl9CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInJvd3MiKSA9 PSAwKQorCQl7CisJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiUk9XUyIsIDApOworCQkJaWYg KGRlZkdldE51bWVyaWMoZGVmZWwpID09IDApCisJCQkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9i aiwgInByZXNlbnQiLCBmYWxzZSk7CisJCQllbHNlCisJCQkJYXBwZW5kX2Zsb2F0X29iamVjdCh0 bXBvYmosICIle3Jvd3N9biIsCisJCQkJCQkJCQlkZWZHZXROdW1lcmljKGRlZmVsKSk7CisJCX0K KwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAic2V0IikgPT0gMCkKKwkJeworCQkJ VmFyaWFibGVTZXRTdG10ICpzc3RtdCA9IChWYXJpYWJsZVNldFN0bXQgKikgZGVmZWwtPmFyZzsK KwkJCWNoYXIgKnZhbHVlID0gRXh0cmFjdFNldFZhcmlhYmxlQXJncyhzc3RtdCk7CisKKwkJCXRt cG9iaiA9IGRlcGFyc2VfRnVuY3Rpb25TZXQoc3N0bXQtPmtpbmQsIHNzdG10LT5uYW1lLCB2YWx1 ZSk7CisJCX0KKwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAic3VwcG9ydCIpID09 IDApCisJCXsKKwkJCU9pZAkJCWFyZ3R5cGVzWzFdOworCisJCQl0bXBvYmogPSBuZXdfb2JqdHJl ZSgiU1VQUE9SVCIpOworCisJCQlBc3NlcnQocHJvY0Zvcm0tPnByb3N1cHBvcnQpOworCisJCQkv KgorCQkJICogV2Ugc2hvdWxkIHF1YWxpZnkgdGhlIHN1cHBvcnQgZnVuY3Rpb24ncyBuYW1lIGlm IGl0IHdvdWxkbid0IGJlCisJCQkgKiByZXNvbHZlZCBieSBsb29rdXAgaW4gdGhlIGN1cnJlbnQg c2VhcmNoIHBhdGguCisJCQkgKi8KKwkJCWFyZ3R5cGVzWzBdID0gSU5URVJOQUxPSUQ7CisJCQlh cHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle25hbWV9cyIsCisJCQkJCQkJCSBnZW5lcmF0 ZV9mdW5jdGlvbl9uYW1lKHByb2NGb3JtLT5wcm9zdXBwb3J0LCAxLAorCQkJCQkJCQkJCQkJCQlO SUwsIGFyZ3R5cGVzLAorCQkJCQkJCQkJCQkJCQlmYWxzZSwgTlVMTCwKKwkJCQkJCQkJCQkJCQkJ RVhQUl9LSU5EX05PTkUpKTsKKwkJfQorCQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUs ICJwYXJhbGxlbCIpID09IDApCisJCXsKKwkJCWNoYXIgKmZtdCA9IHBzcHJpbnRmKCJQQVJBTExF TCAlcyIsIHN0clZhbChkZWZlbC0+YXJnKSk7CisJCQl0bXBvYmogPSBuZXdfb2JqdHJlZShmbXQp OworCQl9CisKKwkJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBuZXdfb2JqZWN0X29iamVjdCh0bXBv YmopKTsKKwl9CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KGFsdGVyRnVuYywgIiV7ZGVmaW5pdGlv bjogfXMiLCBlbGVtcyk7CisKKwlSZWxlYXNlU3lzQ2FjaGUocHJvY1R1cCk7CisKKwlyZXR1cm4g YWx0ZXJGdW5jOworfQorCisvKgorICogZGVwYXJzZSBhbiBBTFRFUiAuLi4gU0VUIFNDSEVNQSBj b21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyT2JqZWN0U2NoZW1h U3RtdChPYmplY3RBZGRyZXNzIGFkZHJlc3MsIE5vZGUgKnBhcnNldHJlZSwKKwkJCQkJCQkgIE9i amVjdEFkZHJlc3Mgb2xkc2NoZW1hKQoreworCUFsdGVyT2JqZWN0U2NoZW1hU3RtdCAqbm9kZSA9 IChBbHRlck9iamVjdFNjaGVtYVN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUJICAgKmFsdGVy U3RtdDsKKwljaGFyCSAgICpmbXQ7CisJY2hhcgkgICAqaWRlbnRpdHk7CisJY2hhcgkgICAqbmV3 c2NoZW1hOworCWNoYXIJICAgKm9sZHNjaG5hbWU7CisJY2hhcgkgICAqaWRlbnQ7CisKKwluZXdz Y2hlbWEgPSBub2RlLT5uZXdzY2hlbWE7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoK KwkgKiBBTFRFUiAlcyAle2lkZW50aXR5fXMgU0VUIFNDSEVNQSAle25ld3NjaGVtYX1JCisJICov CisJZm10ID0gcHNwcmludGYoIkFMVEVSICVzIiwgc3RyaW5naWZ5X29ianR5cGUobm9kZS0+b2Jq ZWN0VHlwZSkpOworCWFsdGVyU3RtdCA9IG5ld19vYmp0cmVlKGZtdCk7CisKKwkvKgorCSAqIFNp bmNlIHRoZSBjb21tYW5kIGhhcyBhbHJlYWR5IHRha2VuIHBsYWNlIGZyb20gdGhlIHBvaW50IG9m IHZpZXcgb2YKKwkgKiBjYXRhbG9ncywgZ2V0T2JqZWN0SWRlbnRpdHkgcmV0dXJucyB0aGUgb2Jq ZWN0IG5hbWUgd2l0aCB0aGUgYWxyZWFkeQorCSAqIGNoYW5nZWQgc2NoZW1hLiAgVGhlIG91dHB1 dCBvZiBvdXIgZGVwYXJzaW5nIG11c3QgcmV0dXJuIHRoZSBvcmlnaW5hbAorCSAqIHNjaGVtYSBu YW1lIGhvd2V2ZXIsIHNvIHdlIGNob3AgdGhlIHNjaGVtYSBuYW1lIG9mZiB0aGUgaWRlbnRpdHkg c3RyaW5nCisJICogYW5kIHRoZW4gcHJlcGVuZCB0aGUgcXVvdGVkIHNjaGVtYSBuYW1lLgorCSAq CisJICogWFhYIFRoaXMgaXMgcHJldHR5IGNsdW5reS4gQ2FuIHdlIGRvIGJldHRlcj8KKwkgKi8K KwlpZGVudGl0eSA9IGdldE9iamVjdElkZW50aXR5KCZhZGRyZXNzLCBmYWxzZSk7CisJb2xkc2No bmFtZSA9IGdldF9uYW1lc3BhY2VfbmFtZShvbGRzY2hlbWEub2JqZWN0SWQpOworCWlmICghb2xk c2NobmFtZSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHNjaGVtYSB3 aXRoIE9JRCAldSIsCisJCQkgb2xkc2NoZW1hLm9iamVjdElkKTsKKworCWlkZW50ID0gcHNwcmlu dGYoIiVzJXMiLCBxdW90ZV9pZGVudGlmaWVyKG9sZHNjaG5hbWUpLAorCQkJCQkgaWRlbnRpdHkg KyBzdHJsZW4ocXVvdGVfaWRlbnRpZmllcihuZXdzY2hlbWEpKSk7CisJYXBwZW5kX3N0cmluZ19v YmplY3QoYWx0ZXJTdG10LCAiJXtpZGVudGl0eX1zIiwgaWRlbnQpOworCisJYXBwZW5kX3N0cmlu Z19vYmplY3QoYWx0ZXJTdG10LCAiU0VUIFNDSEVNQSAle25ld3NjaGVtYX1JIiwgbmV3c2NoZW1h KTsKKworCXJldHVybiBhbHRlclN0bXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFsdGVyT3Bl cmF0b3JTdG10IChBTFRFUiBPUEVSQVRPUiAuLi4gU0VUIC4uLikuCisgKi8KK3N0YXRpYyBPYmpU cmVlICoKK2RlcGFyc2VfQWx0ZXJPcGVyYXRvclN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJz ZXRyZWUpCit7CisJSGVhcFR1cGxlICAgCW9wclR1cDsKKwlBbHRlck9wZXJhdG9yU3RtdCAqbm9k ZSA9IChBbHRlck9wZXJhdG9yU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZQkJICAgKmFsdGVy b3A7CisJRm9ybV9wZ19vcGVyYXRvciBvcHJGb3JtOworCUxpc3RDZWxsCSAgICpjZWxsOworCUxp c3QJCSAgICpsaXN0ID0gTklMOworCisJb3ByVHVwID0gU2VhcmNoU3lzQ2FjaGUxKE9QRVJPSUQs IE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQob3By VHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9wZXJhdG9yIHdp dGggT0lEICV1Iiwgb2JqZWN0SWQpOworCW9wckZvcm0gPSAoRm9ybV9wZ19vcGVyYXRvcikgR0VU U1RSVUNUKG9wclR1cCk7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBBTFRF UiBPUEVSQVRPUiAle2lkZW50aXR5fU8gKCV7bGVmdF90eXBlfVQsICV7cmlnaHRfdHlwZX1UKSBT RVQKKwkgKiAoJXtlbGVtczosIH1zKQorCSAqLworCWFsdGVyb3AgPSBuZXdfb2JqdHJlZV9WQSgi QUxURVIgT1BFUkFUT1IgJXtpZGVudGl0eX1PIiwgMSwKKwkJCQkJCQkgImlkZW50aXR5IiwgT2Jq VHlwZU9iamVjdCwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKG9wckZvcm0tPm9w cm5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkgIE5hbWVTdHIob3ByRm9ybS0+b3BybmFtZSkpKTsK KworCS8qIExFRlRBUkcgKi8KKwlpZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJsZWZ0KSkKKwkJ YXBwZW5kX29iamVjdF9vYmplY3QoYWx0ZXJvcCwgIigle2xlZnRfdHlwZX1UIiwKKwkJCQkJCQkg bmV3X29ianRyZWVfZm9yX3R5cGUob3ByRm9ybS0+b3BybGVmdCwgLTEpKTsKKwllbHNlCisJCWFw cGVuZF9zdHJpbmdfb2JqZWN0KGFsdGVyb3AsICIoJXtsZWZ0X3R5cGV9cyIsICJOT05FIik7CisK KwkvKiBSSUdIVEFSRyAqLworCUFzc2VydChPaWRJc1ZhbGlkKG9wckZvcm0tPm9wcmxlZnQpKTsK KwlhcHBlbmRfb2JqZWN0X29iamVjdChhbHRlcm9wLCAiLCAle3JpZ2h0X3R5cGV9VCkiLAorCQkJ CQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKG9wckZvcm0tPm9wcnJpZ2h0LCAtMSkpOworCisJZm9y ZWFjaChjZWxsLCBub2RlLT5vcHRpb25zKQorCXsKKwkJRGVmRWxlbSAqZWxlbSA9IChEZWZFbGVt ICopIGxmaXJzdChjZWxsKTsKKwkJT2JqVHJlZSAqdG1wb2JqID0gTlVMTDsKKworCQlpZiAoc3Ry Y21wKGVsZW0tPmRlZm5hbWUsICJyZXN0cmljdCIpID09IDApCisJCXsKKwkJCXRtcG9iaiA9IG5l d19vYmp0cmVlX1ZBKCJSRVNUUklDVD0iLCAxLAorCQkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVT dHJpbmcsICJyZXN0cmljdCIpOworCQkJaWYgKE9pZElzVmFsaWQob3ByRm9ybS0+b3BycmVzdCkp CisJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJ CQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJ CQkJCQkJCQkJCQkJCQkJIG9wckZvcm0tPm9wcnJlc3QpKTsKKwkJCWVsc2UKKwkJCQlhcHBlbmRf c3RyaW5nX29iamVjdCh0bXBvYmosICIle3Byb2NlZHVyZX1zIiwgIk5PTkUiKTsKKwkJfQorCQll bHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgImpvaW4iKSA9PSAwKQorCQl7CisJCQl0bXBv YmogPSBuZXdfb2JqdHJlZV9WQSgiSk9JTj0iLCAxLAorCQkJCQkJCQkgImNsYXVzZSIsIE9ialR5 cGVTdHJpbmcsICJqb2luIik7CisJCQlpZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJqb2luKSkK KwkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJ CQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJ CQkJCQkJCQkJCQkJCQkgb3ByRm9ybS0+b3Byam9pbikpOworCQkJZWxzZQorCQkJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7cHJvY2VkdXJlfXMiLCAiTk9ORSIpOworCQl9CisKKwkJ QXNzZXJ0KHRtcG9iaik7CisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcG9iaikpOworCX0KKworCWFwcGVuZF9hcnJheV9vYmplY3QoYWx0ZXJvcCwgIlNFVCAoJXtl bGVtczosIH1zKSIsIGxpc3QpOworCisJUmVsZWFzZVN5c0NhY2hlKG9wclR1cCk7CisKKwlyZXR1 cm4gYWx0ZXJvcDsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQUxURVIgT1BFUkFUT1IgRkFNSUxZ IEFERC9EUk9QIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJP cEZhbWlseShDb2xsZWN0ZWRDb21tYW5kICpjbWQpCit7CisJT2JqVHJlZQkgICAqYWx0ZXJPcEZh bTsKKwlBbHRlck9wRmFtaWx5U3RtdCAqc3RtdCA9IChBbHRlck9wRmFtaWx5U3RtdCAqKSBjbWQt PnBhcnNldHJlZTsKKwlIZWFwVHVwbGUJZnRwOworCUZvcm1fcGdfb3BmYW1pbHkgb3BmRm9ybTsK KwlMaXN0CSAgICpsaXN0OworCUxpc3RDZWxsICAgKmNlbGw7CisKKwlmdHAgPSBTZWFyY2hTeXND YWNoZTEoT1BGQU1JTFlPSUQsCisJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0oY21kLT5kLm9wZmFt LmFkZHJlc3Mub2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoZnRwKSkKKwkJZWxv ZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9wZXJhdG9yIGZhbWlseSAldSIsCisJ CQkgY21kLT5kLm9wZmFtLmFkZHJlc3Mub2JqZWN0SWQpOworCW9wZkZvcm0gPSAoRm9ybV9wZ19v cGZhbWlseSkgR0VUU1RSVUNUKGZ0cCk7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoK KwkgKiBBTFRFUiBPUEVSQVRPUiBGQU1JTFkgJXtpZGVudGl0eX1EIFVTSU5HICV7YW1uYW1lfUkg QUREL0RST1AKKwkgKiAle2l0ZW1zOiwgfXMKKwkgKi8KKwlhbHRlck9wRmFtID0gbmV3X29ianRy ZWVfVkEoIkFMVEVSIE9QRVJBVE9SIEZBTUlMWSAle2lkZW50aXR5fUQgIgorCQkJCQkJCQkiVVNJ TkcgJXthbW5hbWV9SSIsIDIsCisJCQkJCQkJCSJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJ CQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShvcGZGb3JtLT5vcGZuYW1lc3BhY2UsCisJ CQkJCQkJCQkJCQkJCSBOYW1lU3RyKG9wZkZvcm0tPm9wZm5hbWUpKSwKKwkJCQkJCQkJImFtbmFt ZSIsIE9ialR5cGVTdHJpbmcsIHN0bXQtPmFtbmFtZSk7CisKKwlsaXN0ID0gTklMOworCWZvcmVh Y2goY2VsbCwgY21kLT5kLm9wZmFtLm9wZXJhdG9ycykKKwl7CisJCU9wRmFtaWx5TWVtYmVyICpv cGVyID0gbGZpcnN0KGNlbGwpOworCQlPYmpUcmVlCSAgICp0bXBvYmo7CisKKwkJLyoKKwkJICog VmVyYm9zZSBzeW50YXgKKwkJICoKKwkJICogT1BFUkFUT1IgJXtudW19biAle29wZXJhdG9yfU8o JXtsdHlwZX1ULCAle3J0eXBlfVQpICV7cHVycG9zZX1zCisJCSAqLworCQl0bXBvYmogPSBuZXdf b2JqdHJlZV9WQSgiT1BFUkFUT1IgJXtudW19biIsIDEsCisJCQkJCQkJICJudW0iLCBPYmpUeXBl SW50ZWdlciwgb3Blci0+bnVtYmVyKTsKKworCQkvKiBBZGQgdGhlIG9wZXJhdG9yIG5hbWU7IHRo ZSBEUk9QIGNhc2UgZG9lc24ndCBoYXZlIHRoaXMgKi8KKwkJaWYgKCFzdG10LT5pc0Ryb3ApCisJ CXsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7b3BlcmF0b3J9TyIsCisJCQkJ CQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoT3BlcmF0b3JSZWxhdGlvbklkLAorCQkJ CQkJCQkJCQkJCQkJIG9wZXItPm9iamVjdCkpOworCQl9CisKKwkJLyogQWRkIHRoZSB0eXBlcyAq LworCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIoJXtsdHlwZX1ULCIsCisJCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl90eXBlKG9wZXItPmxlZnR0eXBlLCAtMSkpOworCQlhcHBlbmRfb2Jq ZWN0X29iamVjdCh0bXBvYmosICIle3J0eXBlfVQpIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9y X3R5cGUob3Blci0+cmlnaHR0eXBlLCAtMSkpOworCisJCS8qIEFkZCB0aGUgRk9SIFNFQVJDSCAv IEZPUiBPUkRFUiBCWSBjbGF1c2U7IG5vdCBpbiB0aGUgRFJPUCBjYXNlICovCisJCWlmICghc3Rt dC0+aXNEcm9wKQorCQl7CisJCQlpZiAob3Blci0+c29ydGZhbWlseSA9PSBJbnZhbGlkT2lkKQor CQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7cHVycG9zZX1zIiwgIkZPUiBTRUFS Q0giKTsKKwkJCWVsc2UKKwkJCXsKKwkJCQlPYmpUcmVlCSAgICp0bXBvYmoyOworCisJCQkJdG1w b2JqMiA9IG5ld19vYmp0cmVlX1ZBKCJGT1IgT1JERVIgQlkiLCAwKTsKKwkJCQlhcHBlbmRfb2Jq ZWN0X29iamVjdCh0bXBvYmoyLCAiJXtvcGZhbWlseX1EIiwKKwkJCQkJCQkJCSBuZXdfb2JqdHJl ZV9mb3JfcXVhbG5hbWVfaWQoT3BlcmF0b3JGYW1pbHlSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJ CQkJCSBvcGVyLT5zb3J0ZmFtaWx5KSk7CisJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2Jq LCAiJXtwdXJwb3NlfXMiLCB0bXBvYmoyKTsKKwkJCX0KKwkJfQorCisJCWxpc3QgPSBsYXBwZW5k KGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCX0KKworCWZvcmVhY2goY2VsbCwg Y21kLT5kLm9wZmFtLnByb2NlZHVyZXMpCisJeworCQlPcEZhbWlseU1lbWJlciAqcHJvYyA9IGxm aXJzdChjZWxsKTsKKwkJT2JqVHJlZQkgICAqdG1wb2JqOworCisJCXRtcG9iaiA9IG5ld19vYmp0 cmVlX1ZBKCJGVU5DVElPTiAle251bX1uICgle2x0eXBlfVQsICV7cnR5cGV9VCkiLCAzLAorCQkJ CQkJCSAibnVtIiwgT2JqVHlwZUludGVnZXIsIHByb2MtPm51bWJlciwKKwkJCQkJCQkgImx0eXBl IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUocHJvYy0+bGVm dHR5cGUsIC0xKSwKKwkJCQkJCQkgInJ0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkgbmV3 X29ianRyZWVfZm9yX3R5cGUocHJvYy0+cmlnaHR0eXBlLCAtMSkpOworCisJCS8qIEFkZCB0aGUg ZnVuY3Rpb24gbmFtZSBhbmQgYXJnIHR5cGVzOyB0aGUgRFJPUCBjYXNlIGRvZXNuJ3QgaGF2ZSB0 aGlzICovCisJCWlmICghc3RtdC0+aXNEcm9wKQorCQl7CisJCQlIZWFwVHVwbGUJcHJvY1R1cDsK KwkJCUZvcm1fcGdfcHJvYyBwcm9jRm9ybTsKKwkJCU9pZAkJICAgKnByb2FyZ3R5cGVzOworCQkJ TGlzdAkgICAqYXJnbGlzdCA9IE5JTDsKKwkJCWludAkJCWk7CisKKwkJCXByb2NUdXAgPSBTZWFy Y2hTeXNDYWNoZTEoUFJPQ09JRCwgT2JqZWN0SWRHZXREYXR1bShwcm9jLT5vYmplY3QpKTsKKwkJ CWlmICghSGVhcFR1cGxlSXNWYWxpZChwcm9jVHVwKSkKKwkJCQllbG9nKEVSUk9SLCAiY2FjaGUg bG9va3VwIGZhaWxlZCBmb3IgcHJvY2VkdXJlICV1IiwgcHJvYy0+b2JqZWN0KTsKKwkJCXByb2NG b3JtID0gKEZvcm1fcGdfcHJvYykgR0VUU1RSVUNUKHByb2NUdXApOworCisJCQlwcm9hcmd0eXBl cyA9IHByb2NGb3JtLT5wcm9hcmd0eXBlcy52YWx1ZXM7CisJCQlmb3IgKGkgPSAwOyBpIDwgcHJv Y0Zvcm0tPnByb25hcmdzOyBpKyspCisJCQl7CisJCQkJT2JqVHJlZQkgICAqYXJnOworCisJCQkJ YXJnID0gbmV3X29ianRyZWVfZm9yX3R5cGUocHJvYXJndHlwZXNbaV0sIC0xKTsKKwkJCQlhcmds aXN0ID0gbGFwcGVuZChhcmdsaXN0LCBuZXdfb2JqZWN0X29iamVjdChhcmcpKTsKKwkJCX0KKwor CQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtmdW5jdGlvbn1EIiwKKwkJCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShwcm9jRm9ybS0+cHJvbmFtZXNwYWNlLAorCQkJCQkJ CQkJCQkJCQkgIE5hbWVTdHIocHJvY0Zvcm0tPnByb25hbWUpKSk7CisKKwkJCWFwcGVuZF9mb3Jt YXRfc3RyaW5nKHRtcG9iaiwgIigiKTsKKwkJCWFwcGVuZF9hcnJheV9vYmplY3QodG1wb2JqLCAi JXthcmd0eXBlczosIH1UIiwgYXJnbGlzdCk7CisJCQlhcHBlbmRfZm9ybWF0X3N0cmluZyh0bXBv YmosICIpIik7CisKKwkJCVJlbGVhc2VTeXNDYWNoZShwcm9jVHVwKTsKKwkJfQorCisJCWxpc3Qg PSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCX0KKworCWlmIChz dG10LT5pc0Ryb3ApCisJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKGFsdGVyT3BGYW0sICJEUk9QIik7 CisJZWxzZQorCQlhcHBlbmRfZm9ybWF0X3N0cmluZyhhbHRlck9wRmFtLCAiQUREIik7CisKKwlh cHBlbmRfYXJyYXlfb2JqZWN0KGFsdGVyT3BGYW0sICIle2l0ZW1zOiwgfXMiLCBsaXN0KTsKKwor CVJlbGVhc2VTeXNDYWNoZShmdHApOworCisJcmV0dXJuIGFsdGVyT3BGYW07Cit9CisKKy8qCisg KiBEZXBhcnNlIGEgQWx0ZXJPd25lclN0bXQgKEFMVEVSIC4uLiBPV05FUiBUTyAuLi4pLgorICov CitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyT3duZXJTdG10KE9iamVjdEFkZHJlc3Mg YWRkcmVzcywgTm9kZSAqcGFyc2V0cmVlKQoreworCUFsdGVyT3duZXJTdG10ICpub2RlID0gKEFs dGVyT3duZXJTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlCQkgICAqb3duZXJTdG10OworCWNo YXIJCSAgICpmbXQ7CisKKwlmbXQgPSBwc3ByaW50ZigiQUxURVIgJXMgJSV7aWRlbnRpdHl9cyBP V05FUiBUTyAlJXtuZXdvd25lcn1JIiwKKwkJCQkgICBzdHJpbmdpZnlfb2JqdHlwZShub2RlLT5v YmplY3RUeXBlKSk7CisKKwlvd25lclN0bXQgPSBuZXdfb2JqdHJlZV9WQShmbXQsIDIsCisJCQkJ CQkJICAgImlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkgICBnZXRPYmplY3RJZGVu dGl0eSgmYWRkcmVzcywgZmFsc2UpLAorCQkJCQkJCSAgICJuZXdvd25lciIsIE9ialR5cGVTdHJp bmcsCisJCQkJCQkJICAgZ2V0X3JvbGVzcGVjX25hbWUobm9kZS0+bmV3b3duZXIpKTsKKworCXJl dHVybiBvd25lclN0bXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFsdGVyU2VxU3RtdC4KKyAq CisgKiBHaXZlbiBhIHNlcXVlbmNlIE9JRCBhbmQgYSBwYXJzZXRyZWUgdGhhdCBtb2RpZmllZCBp dCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgYWx0ZXIgY29tbWFuZC4K KyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlclNlcVN0bXQoT2lkIG9iamVjdElk LCBOb2RlICpwYXJzZXRyZWUpCit7CisJT2JqVHJlZQkJKmFsdGVyU2VxOworCU9ialRyZWUJCSp0 bXBvYmo7CisJUmVsYXRpb24JIHJlbGF0aW9uOworCUZvcm1fcGdfc2VxdWVuY2VfZGF0YSBzZXFk YXRhOworCUxpc3QJICAgKmVsZW1zID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisJRm9ybV9w Z19zZXF1ZW5jZSBzZXFmb3JtOworCVJlbGF0aW9uCXJlbDsKKwlIZWFwVHVwbGUJc2VxdHVwbGU7 CisJQWx0ZXJTZXFTdG10ICphbHRlclNlcVN0bXQgPSAoQWx0ZXJTZXFTdG10ICopIHBhcnNldHJl ZTsKKworCS8qCisJICogU2VxdWVuY2UgZm9yIElERU5USVRZIENPTFVNTiBvdXRwdXQgc2VwYXJh dGVseSh2aWEgQ1JFQVRFIFRBQkxFIG9yCisJICogQUxURVIgVEFCTEUpOyByZXR1cm4gZW1wdHkg aGVyZS4KKwkgKi8KKwlpZiAoYWx0ZXJTZXFTdG10LT5mb3JfaWRlbnRpdHkpCisJCXJldHVybiBO VUxMOworCisJc2VxZGF0YSA9IGdldF9zZXF1ZW5jZV92YWx1ZXMob2JqZWN0SWQpOworCisJcmVs YXRpb24gPSByZWxhdGlvbl9vcGVuKG9iamVjdElkLCBBY2Nlc3NTaGFyZUxvY2spOworCXJlbCA9 IHRhYmxlX29wZW4oU2VxdWVuY2VSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKwlzZXF0 dXBsZSA9IFNlYXJjaFN5c0NhY2hlQ29weTEoU0VRUkVMSUQsCisJCQkJCQkJCSAgIE9iamVjdElk R2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoc2VxdHVwbGUpKQor CQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igc2VxdWVuY2UgJXUiLAorCQkJ IG9iamVjdElkKTsKKworCXNlcWZvcm0gPSAoRm9ybV9wZ19zZXF1ZW5jZSkgR0VUU1RSVUNUKHNl cXR1cGxlKTsKKworCWFsdGVyU2VxID0gbmV3X29ianRyZWUoIkFMVEVSIFNFUVVFTkNFIik7CisK Kwl0bXBvYmogPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUocmVsYXRpb24tPnJkX3JlbC0+cmVs bmFtZXNwYWNlLAorCQkJCQkJCQkgICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWxhdGlvbikp OworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyU2VxLCAiJXtpZGVudGl0eX1EIiwgdG1wb2Jq KTsKKworCWZvcmVhY2goY2VsbCwgKChBbHRlclNlcVN0bXQgKikgcGFyc2V0cmVlKS0+b3B0aW9u cykKKwl7CisJCURlZkVsZW0gKmVsZW0gPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisJCU9i akVsZW0gKm5ld2VsbTsKKworCQlpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJjYWNoZSIpID09 IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1NlcV9DYWNoZShhbHRlclNlcSwgc2VxZm9ybSwgZmFs c2UpOworCQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgImN5Y2xlIikgPT0gMCkKKwkJ CW5ld2VsbSA9IGRlcGFyc2VfU2VxX0N5Y2xlKGFsdGVyU2VxLCBzZXFmb3JtLCBmYWxzZSk7CisJ CWVsc2UgaWYgKHN0cmNtcChlbGVtLT5kZWZuYW1lLCAiaW5jcmVtZW50IikgPT0gMCkKKwkJCW5l d2VsbSA9IGRlcGFyc2VfU2VxX0luY3JlbWVudEJ5KGFsdGVyU2VxLCBzZXFmb3JtLCBmYWxzZSk7 CisJCWVsc2UgaWYgKHN0cmNtcChlbGVtLT5kZWZuYW1lLCAibWludmFsdWUiKSA9PSAwKQorCQkJ bmV3ZWxtID0gZGVwYXJzZV9TZXFfTWludmFsdWUoYWx0ZXJTZXEsIHNlcWZvcm0sIGZhbHNlKTsK KwkJZWxzZSBpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJtYXh2YWx1ZSIpID09IDApCisJCQlu ZXdlbG0gPSBkZXBhcnNlX1NlcV9NYXh2YWx1ZShhbHRlclNlcSwgc2VxZm9ybSwgZmFsc2UpOwor CQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgInN0YXJ0IikgPT0gMCkKKwkJCW5ld2Vs bSA9IGRlcGFyc2VfU2VxX1N0YXJ0d2l0aChhbHRlclNlcSwgc2VxZm9ybSwgZmFsc2UpOworCQll bHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgInJlc3RhcnQiKSA9PSAwKQorCQkJbmV3ZWxt ID0gZGVwYXJzZV9TZXFfUmVzdGFydChhbHRlclNlcSwgc2VxZGF0YSk7CisJCWVsc2UgaWYgKHN0 cmNtcChlbGVtLT5kZWZuYW1lLCAib3duZWRfYnkiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJz ZV9TZXFfT3duZWRCeShhbHRlclNlcSwgb2JqZWN0SWQsIGZhbHNlKTsKKwkJZWxzZQorCQkJZWxv ZyhFUlJPUiwgImludmFsaWQgc2VxdWVuY2Ugb3B0aW9uICVzIiwgZWxlbS0+ZGVmbmFtZSk7CisK KwkJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBuZXdlbG0pOworCX0KKworCWFwcGVuZF9hcnJheV9v YmplY3QoYWx0ZXJTZXEsICIle2RlZmluaXRpb246IH1zIiwgZWxlbXMpOworCisJdGFibGVfY2xv c2UocmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsKKwlyZWxhdGlvbl9jbG9zZShyZWxhdGlvbiwgQWNj ZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiBhbHRlclNlcTsKK30KKworLyoKKyAqIERlcGFyc2Ug YW4gQWx0ZXJUeXBlU3RtdC4KKyAqCisgKiBHaXZlbiBhIHR5cGUgT0lEIGFuZCBhIHBhcnNldHJl ZSB0aGF0IG1vZGlmaWVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRo ZSBhbHRlciB0eXBlLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyVHlwZVNl dFN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpjbWQpCit7CisJQWx0ZXJUeXBlU3RtdCAqYWx0ZXJU eXBlU2V0U3RtdCA9IChBbHRlclR5cGVTdG10ICopY21kOworCU9ialRyZWUJCSphbHRlclR5cGU7 CisJTGlzdENlbGwgICAqcGw7CisJTGlzdAkgICAqZWxlbXMgPSBOSUw7CisJSGVhcFR1cGxlICAg dHlwVHVwOworCUZvcm1fcGdfdHlwZSB0eXBGb3JtOworCisJdHlwVHVwID0gU2VhcmNoU3lzQ2Fj aGUxKFRZUEVPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBs ZUlzVmFsaWQodHlwVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9y IHR5cGUgd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJdHlwRm9ybSA9IChGb3JtX3BnX3R5cGUp IEdFVFNUUlVDVCh0eXBUdXApOworCisJYWx0ZXJUeXBlID0gbmV3X29ianRyZWUoIkFMVEVSIFRZ UEUiKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChhbHRlclR5cGUsICIle2lkZW50aXR5fUQgU0VU IiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoVHlwZVJlbGF0aW9uSWQsCisJ CQkJCQkJCQkJCQkJIG9iamVjdElkKSk7CisKKwlmb3JlYWNoKHBsLCBhbHRlclR5cGVTZXRTdG10 LT5vcHRpb25zKQorCXsKKwkJRGVmRWxlbSAgICAqZGVmZWwgPSAoRGVmRWxlbSAqKSBsZmlyc3Qo cGwpOworCQlPYmpFbGVtICpuZXdlbG07CisKKwkJaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwg InN0b3JhZ2UiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9UeXBlX1N0b3JhZ2UoYWx0ZXJU eXBlLCB0eXBGb3JtKTsKKwkJaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInJlY2VpdmUiKSA9 PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9UeXBlX1JlY2VpdmUoYWx0ZXJUeXBlLCB0eXBGb3Jt KTsKKwkJaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInNlbmQiKSA9PSAwKQorCQkJbmV3ZWxt ID0gZGVwYXJzZV9UeXBlX1NlbmQoYWx0ZXJUeXBlLCB0eXBGb3JtKTsKKwkJaWYgKHN0cmNtcChk ZWZlbC0+ZGVmbmFtZSwgInR5cG1vZF9pbiIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1R5 cGVfVHlwbW9kX0luKGFsdGVyVHlwZSwgdHlwRm9ybSk7CisJCWlmIChzdHJjbXAoZGVmZWwtPmRl Zm5hbWUsICJ0eXBtb2Rfb3V0IikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfVHlwZV9UeXBt b2RfT3V0KGFsdGVyVHlwZSwgdHlwRm9ybSk7CisJCWlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUs ICJhbmFseXplIikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfVHlwZV9BbmFseXplKGFsdGVy VHlwZSwgdHlwRm9ybSk7CisJCWlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJzdWJzY3JpcHQi KSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9UeXBlX1N1YnNjcmlwdChhbHRlclR5cGUsIHR5 cEZvcm0pOworCQllbHNlCisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCB0eXBlIG9wdGlvbiAlcyIs IGRlZmVsLT5kZWZuYW1lKTsKKworCQllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIG5ld2VsbSk7CisJ fQorCisJYXBwZW5kX2FycmF5X29iamVjdChhbHRlclR5cGUsICIoJXtkZWZpbml0aW9uOiB9cyki LCBlbGVtcyk7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHlwVHVwKTsKKworCXJldHVybiBhbHRlclR5 cGU7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ29tcG9zaXRlVHlwZVN0bXQgKENSRUFURSBUWVBF IEFTKQorICoKKyAqIEdpdmVuIGEgdHlwZSBPSUQgYW5kIHRoZSBwYXJzZXRyZWUgdGhhdCBjcmVh dGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBj b21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NvbXBvc2l0ZVR5cGVTdG10 KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNvbXBvc2l0ZVR5cGVTdG10ICpu b2RlID0gKENvbXBvc2l0ZVR5cGVTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlCSAgICpjb21w b3NpdGU7CisJSGVhcFR1cGxlCXR5cHR1cDsKKwlGb3JtX3BnX3R5cGUgdHlwZm9ybTsKKwlSZWxh dGlvbgl0eXBlcmVsOworCUxpc3QJICAgKmRwY29udGV4dDsKKwlMaXN0CSAgICp0YWJsZWVsdHMg PSBOSUw7CisKKwkvKiBGaW5kIHRoZSBwZ190eXBlIGVudHJ5IGFuZCBvcGVuIHRoZSBjb3JyZXNw b25kaW5nIHJlbGF0aW9uICovCisJdHlwdHVwID0gU2VhcmNoU3lzQ2FjaGUxKFRZUEVPSUQsIE9i amVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHlwdHVw KSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHR5cGUgJXUiLCBvYmpl Y3RJZCk7CisJdHlwZm9ybSA9IChGb3JtX3BnX3R5cGUpIEdFVFNUUlVDVCh0eXB0dXApOworCXR5 cGVyZWwgPSByZWxhdGlvbl9vcGVuKHR5cGZvcm0tPnR5cHJlbGlkLCBBY2Nlc3NTaGFyZUxvY2sp OworCisJZHBjb250ZXh0ID0gZGVwYXJzZV9jb250ZXh0X2ZvcihSZWxhdGlvbkdldFJlbGF0aW9u TmFtZSh0eXBlcmVsKSwKKwkJCQkJCQkJCVJlbGF0aW9uR2V0UmVsaWQodHlwZXJlbCkpOworCisJ Y29tcG9zaXRlID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBUWVBFIiwgMCk7CisJYXBwZW5kX29i amVjdF9vYmplY3QoY29tcG9zaXRlLCAiJXtpZGVudGl0eX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJl ZV9mb3JfcXVhbG5hbWVfaWQoVHlwZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIG9iamVjdElk KSk7CisKKwl0YWJsZWVsdHMgPSBkZXBhcnNlX1RhYmxlRWxlbWVudHModHlwZXJlbCwgbm9kZS0+ Y29sZGVmbGlzdCwgZHBjb250ZXh0LAorCQkJCQkJCQkJICBmYWxzZSwJCS8qIG5vdCB0eXBlZCAq LworCQkJCQkJCQkJICB0cnVlKTsJCS8qIGNvbXBvc2l0ZSB0eXBlICovCisKKwlhcHBlbmRfYXJy YXlfb2JqZWN0KGNvbXBvc2l0ZSwgIkFTICgle2NvbHVtbnM6LCB9cykiLCB0YWJsZWVsdHMpOwor CisJdGFibGVfY2xvc2UodHlwZXJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlSZWxlYXNlU3lzQ2Fj aGUodHlwdHVwKTsKKworCXJldHVybiBjb21wb3NpdGU7Cit9CisKK3N0YXRpYyBPYmpUcmVlICoK K2RlcGFyc2VfQ3JlYXRlQ29udmVyc2lvbihPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkK K3sKKwlIZWFwVHVwbGUgICBjb25UdXA7CisJUmVsYXRpb24JY29udnJlbDsKKwlGb3JtX3BnX2Nv bnZlcnNpb24gY29uRm9ybTsKKwlPYmpUcmVlCSAgICpjY1N0bXQsICp0bXBPYmo7CisKKwljb252 cmVsID0gdGFibGVfb3BlbihDb252ZXJzaW9uUmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsK Kwljb25UdXAgPSBnZXRfY2F0YWxvZ19vYmplY3RfYnlfb2lkKGNvbnZyZWwsIEFudW1fcGdfY29u dmVyc2lvbl9vaWQsIG9iamVjdElkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoY29uVHVwKSkK KwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGNvbnZlcnNpb24gd2l0aCBP SUQgJXUiLCBvYmplY3RJZCk7CisJY29uRm9ybSA9IChGb3JtX3BnX2NvbnZlcnNpb24pIEdFVFNU UlVDVChjb25UdXApOworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICogQ1JFQVRF ICV7ZGVmYXVsdH1zIENPTlZFUlNJT04gJXtpZGVudGl0eX1EIEZPUiAle3NvdXJjZX1MIFRPICV7 ZGVzdH1MCisJICogRlJPTSAle2Z1bmN0aW9ufUQKKwkgKi8KKwljY1N0bXQgPSBuZXdfb2JqdHJl ZSgiQ1JFQVRFIik7CisKKworCS8qIEFkZCB0aGUgREVGQVVMVCBjbGF1c2UgKi8KKwlhcHBlbmRf c3RyaW5nX29iamVjdChjY1N0bXQsICJkZWZhdWx0IiwKKwkJCQkJCSBjb25Gb3JtLT5jb25kZWZh dWx0ID8gIkRFRkFVTFQiIDogIiIpOworCisJdG1wT2JqID0gbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lKGNvbkZvcm0tPmNvbm5hbWVzcGFjZSwgTmFtZVN0cihjb25Gb3JtLT5jb25uYW1lKSk7CisJ YXBwZW5kX29iamVjdF9vYmplY3QoY2NTdG10LCAiQ09OVkVSU0lPTiAle2lkZW50aXR5fUQiLCB0 bXBPYmopOworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNjU3RtdCwgIkZPUiAle3NvdXJjZX1MIiwg KGNoYXIgKikKKwkJCQkJCSBwZ19lbmNvZGluZ190b19jaGFyKGNvbkZvcm0tPmNvbmZvcmVuY29k aW5nKSk7CisJYXBwZW5kX3N0cmluZ19vYmplY3QoY2NTdG10LCAiVE8gJXtkZXN0fUwiLCAoY2hh ciAqKQorCQkJCQkJIHBnX2VuY29kaW5nX3RvX2NoYXIoY29uRm9ybS0+Y29udG9lbmNvZGluZykp OworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNjU3RtdCwgIkZST00gJXtmdW5jdGlvbn1EIiwKKwkJ CQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJ CQkJCQkJCQkJCQkgY29uRm9ybS0+Y29ucHJvYykpOworCisJdGFibGVfY2xvc2UoY29udnJlbCwg QWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiBjY1N0bXQ7Cit9CisKKy8qCisgKiBEZXBhcnNl IGEgQ3JlYXRlRW51bVN0bXQgKENSRUFURSBUWVBFIEFTIEVOVU0pCisgKgorICogR2l2ZW4gYSB0 eXBlIE9JRCBhbmQgdGhlIHBhcnNldHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpU cmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBP YmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlRW51bVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJz ZXRyZWUpCit7CisJQ3JlYXRlRW51bVN0bXQgKm5vZGUgPSAoQ3JlYXRlRW51bVN0bXQgKikgcGFy c2V0cmVlOworCU9ialRyZWUJICAgKmVudW10eXBlOworCUxpc3QJICAgKnZhbHVlczsKKwlMaXN0 Q2VsbCAgICpjZWxsOworCisJZW51bXR5cGUgPSBuZXdfb2JqdHJlZSgiQ1JFQVRFIFRZUEUiKTsK KwlhcHBlbmRfb2JqZWN0X29iamVjdChlbnVtdHlwZSwgIiV7aWRlbnRpdHl9RCIsCisJCQkJCQkg bmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFR5cGVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJ CSBvYmplY3RJZCkpOworCisJdmFsdWVzID0gTklMOworCWZvcmVhY2goY2VsbCwgbm9kZS0+dmFs cykKKwl7CisJCVN0cmluZyAgICp2YWwgPSBsZmlyc3Rfbm9kZShTdHJpbmcsIGNlbGwpOworCisJ CXZhbHVlcyA9IGxhcHBlbmQodmFsdWVzLCBuZXdfc3RyaW5nX29iamVjdChzdHJWYWwodmFsKSkp OworCX0KKworCWFwcGVuZF9hcnJheV9vYmplY3QoZW51bXR5cGUsICJBUyBFTlVNICgle3ZhbHVl czosIH1MKSIsIHZhbHVlcyk7CisJcmV0dXJuIGVudW10eXBlOworfQorCisvKgorICogZGVwYXJz ZV9DcmVhdGVFeHRlbnNpb25TdG10CisgKgkJZGVwYXJzZSBhIENyZWF0ZUV4dGVuc2lvblN0bXQK KyAqCisgKiBHaXZlbiBhbiBleHRlbnNpb24gT0lEIGFuZCB0aGUgcGFyc2V0cmVlIHRoYXQgY3Jl YXRlZCBpdCwgcmV0dXJuIHRoZSBKU09OCisgKiBibG9iIHJlcHJlc2VudGluZyB0aGUgY3JlYXRp b24gY29tbWFuZC4KKyAqCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlRXh0 ZW5zaW9uU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVFeHRl bnNpb25TdG10ICpub2RlID0gKENyZWF0ZUV4dGVuc2lvblN0bXQgKikgcGFyc2V0cmVlOworCVJl bGF0aW9uICAgIHBnX2V4dGVuc2lvbjsKKwlIZWFwVHVwbGUgICBleHRUdXA7CisJRm9ybV9wZ19l eHRlbnNpb24gZXh0Rm9ybTsKKwlPYmpUcmVlCSAgICpleHRTdG10OworCU9ialRyZWUJICAgKnRt cDsKKwlMaXN0CSAgICpsaXN0OworCUxpc3RDZWxsICAgKmNlbGw7CisKKwkvKgorCSAqIFZlcmJv c2Ugc3ludGF4CisJICoKKwkgKiBDUkVBVEUgRVhURU5TSU9OICV7aWZfbm90X2V4aXN0c31zICV7 aWRlbnRpdHl9SSAle29wdGlvbnM6IH1zCisJICovCisKKwlwZ19leHRlbnNpb24gPSB0YWJsZV9v cGVuKEV4dGVuc2lvblJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJZXh0VHVwID0gZ2V0 X2NhdGFsb2dfb2JqZWN0X2J5X29pZChwZ19leHRlbnNpb24sIEFudW1fcGdfZXh0ZW5zaW9uX29p ZCwgb2JqZWN0SWQpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChleHRUdXApKQorCQllbG9nKEVS Uk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgZXh0ZW5zaW9uIHdpdGggT0lEICV1IiwKKwkJ CSBvYmplY3RJZCk7CisJZXh0Rm9ybSA9IChGb3JtX3BnX2V4dGVuc2lvbikgR0VUU1RSVUNUKGV4 dFR1cCk7CisKKwlleHRTdG10ID0gbmV3X29ianRyZWUoIkNSRUFURSBFWFRFTlNJT04iKTsKKwor CWFwcGVuZF9zdHJpbmdfb2JqZWN0KGV4dFN0bXQsICIle2lmX25vdF9leGlzdHN9cyIsCisJCQkJ CQkgbm9kZS0+aWZfbm90X2V4aXN0cyA/ICJJRiBOT1QgRVhJU1RTIiA6ICIiKTsKKworCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KGV4dFN0bXQsICIle25hbWV9SSIsIG5vZGUtPmV4dG5hbWUpOworCisJ LyogTGlzdCBvZiBvcHRpb25zICovCisJbGlzdCA9IE5JTDsKKwlmb3JlYWNoKGNlbGwsIG5vZGUt Pm9wdGlvbnMpCisJeworCQlEZWZFbGVtICpvcHQgPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7 CisKKwkJaWYgKHN0cmNtcChvcHQtPmRlZm5hbWUsICJzY2hlbWEiKSA9PSAwKQorCQl7CisJCQkv KiBza2lwIHRoaXMgb25lOyB3ZSBhZGQgb25lIHVuY29uZGl0aW9uYWxseSBiZWxvdyAqLworCQkJ Y29udGludWU7CisJCX0KKwkJZWxzZSBpZiAoc3RyY21wKG9wdC0+ZGVmbmFtZSwgIm5ld192ZXJz aW9uIikgPT0gMCkKKwkJeworCQkJdG1wID0gbmV3X29ianRyZWVfVkEoIlZFUlNJT04gJXt2ZXJz aW9ufUwiLCAyLAorCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAidmVyc2lvbiIsCisJ CQkJCQkJCSAidmVyc2lvbiIsIE9ialR5cGVTdHJpbmcsIGRlZkdldFN0cmluZyhvcHQpKTsKKwkJ CWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCQl9CisJCWVs c2UgaWYgKHN0cmNtcChvcHQtPmRlZm5hbWUsICJvbGRfdmVyc2lvbiIpID09IDApCisJCXsKKwkJ CXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJGUk9NICV7dmVyc2lvbn1MIiwgMiwKKwkJCQkJCQkJICJ0 eXBlIiwgT2JqVHlwZVN0cmluZywgImZyb20iLAorCQkJCQkJCQkgInZlcnNpb24iLCBPYmpUeXBl U3RyaW5nLCBkZWZHZXRTdHJpbmcob3B0KSk7CisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdf b2JqZWN0X29iamVjdCh0bXApKTsKKwkJfQorCQllbHNlCisJCQllbG9nKEVSUk9SLCAidW5zdXBw b3J0ZWQgb3B0aW9uICVzIiwgb3B0LT5kZWZuYW1lKTsKKwl9CisKKwkvKiBBZGQgdGhlIFNDSEVN QSBvcHRpb24gKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiU0NIRU1BICV7c2NoZW1hfUkiLAor CQkJCQkJIDIsICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNjaGVtYSIsCisJCQkJCQkgInNjaGVt YSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgZ2V0X25hbWVzcGFjZV9uYW1lKGV4dEZvcm0tPmV4 dG5hbWVzcGFjZSkpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRt cCkpOworCisJLyogZG9uZSAqLworCWFwcGVuZF9hcnJheV9vYmplY3QoZXh0U3RtdCwgIiV7b3B0 aW9uczogfXMiLCBsaXN0KTsKKworCXRhYmxlX2Nsb3NlKHBnX2V4dGVuc2lvbiwgQWNjZXNzU2hh cmVMb2NrKTsKKworCXJldHVybiBleHRTdG10OworfQorCisvKgorICogRGVwYXJzZSBhIENSRUFU RSBUWVBFIEFTIFJBTkdFIHN0YXRlbWVudAorICoKKyAqIEdpdmVuIGEgdHlwZSBPSUQgYW5kIHRo ZSBwYXJzZXRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVz ZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBh cnNlX0NyZWF0ZVJhbmdlU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlP YmpUcmVlCSAgICpyYW5nZTsKKwlPYmpUcmVlCSAgICp0bXA7CisJTGlzdAkgICAqZGVmaW5pdGlv biA9IE5JTDsKKwlSZWxhdGlvbglwZ19yYW5nZTsKKwlIZWFwVHVwbGUJcmFuZ2VUdXA7CisJRm9y bV9wZ19yYW5nZSByYW5nZUZvcm07CisJU2NhbktleURhdGEga2V5WzFdOworCVN5c1NjYW5EZXNj IHNjYW47CisKKwlwZ19yYW5nZSA9IHRhYmxlX29wZW4oUmFuZ2VSZWxhdGlvbklkLCBSb3dFeGNs dXNpdmVMb2NrKTsKKworCVNjYW5LZXlJbml0KCZrZXlbMF0sCisJCQkJQW51bV9wZ19yYW5nZV9y bmd0eXBpZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJT2JqZWN0 SWRHZXREYXR1bShvYmplY3RJZCkpOworCisJc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2NhbihwZ19y YW5nZSwgUmFuZ2VUeXBpZEluZGV4SWQsIHRydWUsCisJCQkJCQkJICBOVUxMLCAxLCBrZXkpOwor CisJcmFuZ2VUdXAgPSBzeXN0YWJsZV9nZXRuZXh0KHNjYW4pOworCWlmICghSGVhcFR1cGxlSXNW YWxpZChyYW5nZVR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBy YW5nZSB3aXRoIHR5cGUgb2lkICV1IiwKKwkJCSBvYmplY3RJZCk7CisKKwlyYW5nZUZvcm0gPSAo Rm9ybV9wZ19yYW5nZSkgR0VUU1RSVUNUKHJhbmdlVHVwKTsKKworCXJhbmdlID0gbmV3X29ianRy ZWVfVkEoIkNSRUFURSBUWVBFIiwgMCk7CisJdG1wID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1l X2lkKFR5cGVSZWxhdGlvbklkLCBvYmplY3RJZCk7CisJYXBwZW5kX29iamVjdF9vYmplY3QocmFu Z2UsICIle2lkZW50aXR5fUQgQVMgUkFOR0UiLCB0bXApOworCisJLyogU1VCVFlQRSAqLworCXRt cCA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChUeXBlUmVsYXRpb25JZCwKKwkJCQkJCQkJ CSAgcmFuZ2VGb3JtLT5ybmdzdWJ0eXBlKTsKKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiU1VCVFlQ RSA9ICV7dHlwZX1EIiwKKwkJCQkJCSAyLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5n LCAic3VidHlwZSIsCisJCQkJCQkgInR5cGUiLCBPYmpUeXBlT2JqZWN0LCB0bXApOworCWRlZmlu aXRpb24gPSBsYXBwZW5kKGRlZmluaXRpb24sIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJ LyogU1VCVFlQRV9PUENMQVNTICovCisJaWYgKE9pZElzVmFsaWQocmFuZ2VGb3JtLT5ybmdzdWJv cGMpKQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKE9wZXJhdG9yQ2xh c3NSZWxhdGlvbklkLAorCQkJCQkJCQkJCSAgcmFuZ2VGb3JtLT5ybmdzdWJvcGMpOworCQl0bXAg PSBuZXdfb2JqdHJlZV9WQSgiU1VCVFlQRV9PUENMQVNTID0gJXtvcGNsYXNzfUQiLAorCQkJCQkJ CSAyLAorCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgIm9wY2xhc3MiLAorCQkJCQkJ CSAib3BjbGFzcyIsIE9ialR5cGVPYmplY3QsIHRtcCk7CisJCWRlZmluaXRpb24gPSBsYXBwZW5k KGRlZmluaXRpb24sIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCX0KKworCS8qIENPTExBVElP TiAqLworCWlmIChPaWRJc1ZhbGlkKHJhbmdlRm9ybS0+cm5nY29sbGF0aW9uKSkKKwl7CisJCXRt cCA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChDb2xsYXRpb25SZWxhdGlvbklkLAorCQkJ CQkJCQkJCSAgcmFuZ2VGb3JtLT5ybmdjb2xsYXRpb24pOworCQl0bXAgPSBuZXdfb2JqdHJlZV9W QSgiQ09MTEFUSU9OID0gJXtjb2xsYXRpb259RCIsCisJCQkJCQkJIDIsCisJCQkJCQkJICJjbGF1 c2UiLCBPYmpUeXBlU3RyaW5nLCAiY29sbGF0aW9uIiwKKwkJCQkJCQkgImNvbGxhdGlvbiIsIE9i alR5cGVPYmplY3QsIHRtcCk7CisJCWRlZmluaXRpb24gPSBsYXBwZW5kKGRlZmluaXRpb24sIG5l d19vYmplY3Rfb2JqZWN0KHRtcCkpOworCX0KKworCS8qIENBTk9OSUNBTCAqLworCWlmIChPaWRJ c1ZhbGlkKHJhbmdlRm9ybS0+cm5nY2Fub25pY2FsKSkKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVl X2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCSAgcmFuZ2VG b3JtLT5ybmdjYW5vbmljYWwpOworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiQ0FOT05JQ0FMID0g JXtjYW5vbmljYWx9RCIsCisJCQkJCQkJIDIsCisJCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3Ry aW5nLCAiY2Fub25pY2FsIiwKKwkJCQkJCQkgImNhbm9uaWNhbCIsIE9ialR5cGVPYmplY3QsIHRt cCk7CisJCWRlZmluaXRpb24gPSBsYXBwZW5kKGRlZmluaXRpb24sIG5ld19vYmplY3Rfb2JqZWN0 KHRtcCkpOworCX0KKworCS8qIFNVQlRZUEVfRElGRiAqLworCWlmIChPaWRJc1ZhbGlkKHJhbmdl Rm9ybS0+cm5nc3ViZGlmZikpCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVf aWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkgIHJhbmdlRm9ybS0+cm5nc3ViZGlm Zik7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJTVUJUWVBFX0RJRkYgPSAle3N1YnR5cGVfZGlm Zn1EIiwKKwkJCQkJCQkgMiwKKwkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJzdWJ0 eXBlX2RpZmYiLAorCQkJCQkJCSAic3VidHlwZV9kaWZmIiwgT2JqVHlwZU9iamVjdCwgdG1wKTsK KwkJZGVmaW5pdGlvbiA9IGxhcHBlbmQoZGVmaW5pdGlvbiwgbmV3X29iamVjdF9vYmplY3QodG1w KSk7CisJfQorCisJYXBwZW5kX2FycmF5X29iamVjdChyYW5nZSwgIigle2RlZmluaXRpb246LCB9 cykiLCBkZWZpbml0aW9uKTsKKworCXN5c3RhYmxlX2VuZHNjYW4oc2Nhbik7CisJdGFibGVfY2xv c2UocGdfcmFuZ2UsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJcmV0dXJuIHJhbmdlOworfQorCisv KgorICogRGVwYXJzZSBhbiBBbHRlckVudW1TdG10LgorICoKKyAqIEdpdmVuIGEgdHlwZSBPSUQg YW5kIGEgcGFyc2V0cmVlIHRoYXQgbW9kaWZpZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiBy ZXByZXNlbnRpbmcgdGhlIGFsdGVyIHR5cGUuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFy c2VfQWx0ZXJFbnVtU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlBbHRl ckVudW1TdG10ICpub2RlID0gKEFsdGVyRW51bVN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUJ ICAgKmFsdGVyRW51bTsKKworCWFsdGVyRW51bSA9CW5ld19vYmp0cmVlX1ZBKCJBTFRFUiBUWVBF IiwgMCk7CisJYXBwZW5kX29iamVjdF9vYmplY3QoYWx0ZXJFbnVtLCAiJXtpZGVudGl0eX1EIiwK KwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoVHlwZVJlbGF0aW9uSWQsCisJCQkJ CQkJCQkJCQkJIG9iamVjdElkKSk7CisKKwlpZiAoIW5vZGUtPm9sZFZhbCkKKwl7CisJCWFwcGVu ZF9mb3JtYXRfc3RyaW5nKGFsdGVyRW51bSwgIkFERCBWQUxVRSIpOworCQlhcHBlbmRfc3RyaW5n X29iamVjdChhbHRlckVudW0sICIle2lmX25vdF9leGlzdHN9cyIsCisJCQkJCQkJbm9kZS0+c2tp cElmTmV3VmFsRXhpc3RzID8gIklGIE5PVCBFWElTVFMiIDogIiIpOworCisJCWFwcGVuZF9zdHJp bmdfb2JqZWN0KGFsdGVyRW51bSwgIiV7dmFsdWV9TCIsIG5vZGUtPm5ld1ZhbCk7CisKKwkJaWYg KG5vZGUtPm5ld1ZhbE5laWdoYm9yKQorCQl7CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChhbHRl ckVudW0sICIle2FmdGVyX29yX2JlZm9yZX1zIiwKKwkJCQkJCQkJbm9kZS0+bmV3VmFsSXNBZnRl ciA/ICJBRlRFUiIgOiAiQkVGT1JFIik7CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChhbHRlckVu dW0sICIle25laWdoYm91cn1MIiwgbm9kZS0+bmV3VmFsTmVpZ2hib3IpOworCQl9CisJfQorCWVs c2UKKwl7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGFsdGVyRW51bSwgIlJFTkFNRSBWQUxVRSAl e3ZhbHVlfUwgVE8iLAorCQkJCQkJCSBub2RlLT5vbGRWYWwpOworCQlhcHBlbmRfc3RyaW5nX29i amVjdChhbHRlckVudW0sICIle25ld3ZhbHVlfUwiLAorCQkJCQkJCSBub2RlLT5uZXdWYWwpOwor CX0KKworCXJldHVybiBhbHRlckVudW07Cit9CisKKy8qCisgKiBEZXBhcnNlIEFMVEVSIEVYVEVO U0lPTiAuLiBVUERBVEUgVE8gVkVSU0lPTgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNl X0FsdGVyRXh0ZW5zaW9uU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlB bHRlckV4dGVuc2lvblN0bXQgKm5vZGUgPSAoQWx0ZXJFeHRlbnNpb25TdG10ICopIHBhcnNldHJl ZTsKKwlSZWxhdGlvbiAgICBwZ19leHRlbnNpb247CisJSGVhcFR1cGxlICAgZXh0VHVwOworCUZv cm1fcGdfZXh0ZW5zaW9uIGV4dEZvcm07CisJT2JqVHJlZQkgICAqc3RtdDsKKwlPYmpUcmVlCSAg ICp0bXA7CisJTGlzdAkgICAqbGlzdCA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCisJcGdf ZXh0ZW5zaW9uID0gdGFibGVfb3BlbihFeHRlbnNpb25SZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxv Y2spOworCWV4dFR1cCA9IGdldF9jYXRhbG9nX29iamVjdF9ieV9vaWQocGdfZXh0ZW5zaW9uLCBB bnVtX3BnX2V4dGVuc2lvbl9vaWQsICBvYmplY3RJZCk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlk KGV4dFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBleHRlbnNp b24gd2l0aCBPSUQgJXUiLAorCQkJIG9iamVjdElkKTsKKwlleHRGb3JtID0gKEZvcm1fcGdfZXh0 ZW5zaW9uKSBHRVRTVFJVQ1QoZXh0VHVwKTsKKworCXN0bXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxU RVIgRVhURU5TSU9OICV7aWRlbnRpdHl9RCBVUERBVEUiLCAxLAorCQkJCQkJICAiaWRlbnRpdHki LCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJICBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoZXh0Rm9y bS0+ZXh0bmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICAgTmFtZVN0cihleHRGb3JtLT5leHRuYW1l KSkpOworCisJZm9yZWFjaChjZWxsLCBub2RlLT5vcHRpb25zKQorCXsKKwkJRGVmRWxlbSAqb3B0 ID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCisJCWlmIChzdHJjbXAob3B0LT5kZWZuYW1l LCAibmV3X3ZlcnNpb24iKSA9PSAwKQorCQl7CisJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiVE8g JXt2ZXJzaW9ufUwiLCAyLAorCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAidmVyc2lv biIsCisJCQkJCQkJCSAidmVyc2lvbiIsIE9ialR5cGVTdHJpbmcsIGRlZkdldFN0cmluZyhvcHQp KTsKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCQl9 CisJCWVsc2UKKwkJCWVsb2coRVJST1IsICJ1bnN1cHBvcnRlZCBvcHRpb24gJXMiLCBvcHQtPmRl Zm5hbWUpOworCX0KKworCWFwcGVuZF9hcnJheV9vYmplY3Qoc3RtdCwgIiV7b3B0aW9uczogfXMi LCBsaXN0KTsKKworCXRhYmxlX2Nsb3NlKHBnX2V4dGVuc2lvbiwgQWNjZXNzU2hhcmVMb2NrKTsK KworCXJldHVybiBzdG10OworfQorCisvKgorICogQUxURVIgRVhURU5TSU9OIGV4dCBBREQvRFJP UCBvYmplY3QKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlckV4dGVuc2lvbkNv bnRlbnRzU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSwKKwkJCQkJCQkJICAgT2Jq ZWN0QWRkcmVzcyBvYmplY3RBZGRyZXNzKQoreworCUFsdGVyRXh0ZW5zaW9uQ29udGVudHNTdG10 ICpub2RlID0gKEFsdGVyRXh0ZW5zaW9uQ29udGVudHNTdG10ICopIHBhcnNldHJlZTsKKwlPYmpU cmVlCSAgICpzdG10OworCWNoYXIJICAgKmZtdDsKKworCUFzc2VydChub2RlLT5hY3Rpb24gPT0g KzEgfHwgbm9kZS0+YWN0aW9uID09IC0xKTsKKworCWZtdCA9IHBzcHJpbnRmKCJBTFRFUiBFWFRF TlNJT04gJSV7ZXh0aWRlbnRpdHl9SSAlcyAlcyAlJXtvYmppZGVudGl0eX1zIiwKKwkJCQkgICBu b2RlLT5hY3Rpb24gPT0gKzEgPyAiQUREIiA6ICJEUk9QIiwKKwkJCQkgICBzdHJpbmdpZnlfb2Jq dHlwZShub2RlLT5vYmp0eXBlKSk7CisKKwlzdG10ID0gbmV3X29ianRyZWVfVkEoZm10LCAyLCAi ZXh0aWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJICBub2RlLT5leHRuYW1lLAorCQkJ CQkJICAib2JqaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJICBnZXRPYmplY3RJZGVu dGl0eSgmb2JqZWN0QWRkcmVzcywgZmFsc2UpKTsKKworCXJldHVybiBzdG10OworfQorLyoKKyAq IERlcGFyc2UgYW4gQ3JlYXRlQ2FzdFN0bXQuCisgKgorICogR2l2ZW4gYSBzZXF1ZW5jZSBPSUQg YW5kIGEgcGFyc2V0cmVlIHRoYXQgbW9kaWZpZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiBy ZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoK K2RlcGFyc2VfQ3JlYXRlQ2FzdFN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7 CisJQ3JlYXRlQ2FzdFN0bXQgKm5vZGUgPSAoQ3JlYXRlQ2FzdFN0bXQgKikgcGFyc2V0cmVlOwor CVJlbGF0aW9uCWNhc3RyZWw7CisJSGVhcFR1cGxlCWNhc3RUdXA7CisJRm9ybV9wZ19jYXN0IGNh c3RGb3JtOworCU9ialRyZWUJICAgKmNyZWF0ZUNhc3Q7CisJY2hhcgkgICAqY29udGV4dDsKKwor CWNhc3RyZWwgPSB0YWJsZV9vcGVuKENhc3RSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOwor CWNhc3RUdXAgPSBnZXRfY2F0YWxvZ19vYmplY3RfYnlfb2lkKGNhc3RyZWwsIEFudW1fcGdfY2Fz dF9vaWQsIG9iamVjdElkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoY2FzdFR1cCkpCisJCWVs b2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBjYXN0IHdpdGggT0lEICV1Iiwgb2Jq ZWN0SWQpOworCWNhc3RGb3JtID0gKEZvcm1fcGdfY2FzdCkgR0VUU1RSVUNUKGNhc3RUdXApOwor CisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICogQ1JFQVRFIENBU1QgKCV7c291cmNl dHlwZX1UIEFTICV7dGFyZ2V0dHlwZX1UKSAle21lY2hhbmlzbX1zICV7Y29udGV4dH1zCisJICov CisJY3JlYXRlQ2FzdCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgQ0FTVCAoJXtzb3VyY2V0eXBl fVQgQVMgJXt0YXJnZXR0eXBlfVQpIiwKKwkJCQkJCQkJMiwgInNvdXJjZXR5cGUiLCBPYmpUeXBl T2JqZWN0LAorCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfdHlwZShjYXN0Rm9ybS0+Y2FzdHNvdXJj ZSwgLTEpLAorCQkJCQkJCQkidGFyZ2V0dHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCW5l d19vYmp0cmVlX2Zvcl90eXBlKGNhc3RGb3JtLT5jYXN0dGFyZ2V0LCAtMSkpOworCisJaWYgKG5v ZGUtPmlub3V0KQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVDYXN0LCAiJXttZWNoYW5p c219cyIsICJXSVRIIElOT1VUIik7CisJZWxzZSBpZiAobm9kZS0+ZnVuYyA9PSBOVUxMKQorCQlh cHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVDYXN0LCAiJXttZWNoYW5pc219cyIsICJXSVRIT1VU IEZVTkNUSU9OIik7CisJZWxzZQorCXsKKwkJT2JqVHJlZQkgICAqdG1wb2JqOworCQlTdHJpbmdJ bmZvRGF0YSBmdW5jOworCQlIZWFwVHVwbGUJZnVuY1R1cDsKKwkJRm9ybV9wZ19wcm9jIGZ1bmNG b3JtOworCQlpbnQJCQlpOworCisJCWZ1bmNUdXAgPSBTZWFyY2hTeXNDYWNoZTEoUFJPQ09JRCwg Y2FzdEZvcm0tPmNhc3RmdW5jKTsKKwkJZnVuY0Zvcm0gPSAoRm9ybV9wZ19wcm9jKSBHRVRTVFJV Q1QoZnVuY1R1cCk7CisKKwkJaW5pdFN0cmluZ0luZm8oJmZ1bmMpOworCQlhcHBlbmRTdHJpbmdJ bmZvKCZmdW5jLCAiJXMoIiwKKwkJCQkJCXF1b3RlX3F1YWxpZmllZF9pZGVudGlmaWVyKGdldF9u YW1lc3BhY2VfbmFtZShmdW5jRm9ybS0+cHJvbmFtZXNwYWNlKSwKKwkJCQkJCQkJCQkJCSAgIE5h bWVTdHIoZnVuY0Zvcm0tPnByb25hbWUpKSk7CisJCWZvciAoaSA9IDA7IGkgPCBmdW5jRm9ybS0+ cHJvbmFyZ3M7IGkrKykKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmZ1bmMsCisJCQkJCQkJ CSAgIGZvcm1hdF90eXBlX2JlX3F1YWxpZmllZChmdW5jRm9ybS0+cHJvYXJndHlwZXMudmFsdWVz W2ldKSk7CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZmdW5jLCAnKScpOworCisJCXRtcG9iaiA9 IG5ld19vYmp0cmVlX1ZBKCJXSVRIIEZVTkNUSU9OICV7Y2FzdGZ1bmN0aW9ufXMiLCAxLAorCQkJ CQkJCSAiY2FzdGZ1bmN0aW9uIiwgT2JqVHlwZVN0cmluZywgZnVuYy5kYXRhKTsKKwkJYXBwZW5k X29iamVjdF9vYmplY3QoY3JlYXRlQ2FzdCwgIiV7bWVjaGFuaXNtfXMiLCB0bXBvYmopOworCisJ CVJlbGVhc2VTeXNDYWNoZShmdW5jVHVwKTsKKwl9CisKKwlzd2l0Y2ggKG5vZGUtPmNvbnRleHQp CisJeworCQljYXNlIENPRVJDSU9OX0lNUExJQ0lUOgorCQkJY29udGV4dCA9ICJBUyBJTVBMSUNJ VCI7CisJCQlicmVhazsKKwkJY2FzZSBDT0VSQ0lPTl9BU1NJR05NRU5UOgorCQkJY29udGV4dCA9 ICJBUyBBU1NJR05NRU5UIjsKKwkJCWJyZWFrOworCQljYXNlIENPRVJDSU9OX0VYUExJQ0lUOgor CQkJY29udGV4dCA9ICIiOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAi aW52YWxpZCBjb2VyY2lvbiBjb2RlICVjIiwgbm9kZS0+Y29udGV4dCk7CisJCQlyZXR1cm4gTlVM TDsJLyoga2VlcCBjb21waWxlciBxdWlldCAqLworCX0KKwlhcHBlbmRfc3RyaW5nX29iamVjdChj cmVhdGVDYXN0LCAiJXtjb250ZXh0fXMiLCBjb250ZXh0KTsKKworCXRhYmxlX2Nsb3NlKGNhc3Ry ZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gY3JlYXRlQ2FzdDsKK30KKworLyoKKyAq IERlcGFyc2UgYWxsIHRoZSBjb2xsZWN0ZWQgc3ViY29tbWFuZHMgYW5kIHJldHVybiBhbiBPYmpU cmVlIHJlcHJlc2VudGluZyB0aGUKKyAqIGFsdGVyIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpU cmVlICoKK2RlcGFyc2VfQWx0ZXJUYWJsZVN0bXQoQ29sbGVjdGVkQ29tbWFuZCAqY21kKQorewor CU9ialRyZWUJICAgKmFsdGVyVGFibGVTdG10OworCU9ialRyZWUJICAgKnRtcG9iajsKKwlPYmpU cmVlCSAgICp0bXBvYmoyOworCUxpc3QJICAgKmRwY29udGV4dDsKKwlSZWxhdGlvbglyZWw7CisJ TGlzdAkgICAqc3ViY21kcyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCWNoYXIJICAgKmZt dHN0cjsKKwljb25zdCBjaGFyICpyZWx0eXBlOworCWJvb2wJCWlzdHlwZSA9IGZhbHNlOworCUxp c3QJICAgKmV4cHJzID0gTklMOworCisJQXNzZXJ0KGNtZC0+dHlwZSA9PSBTQ1RfQWx0ZXJUYWJs ZSk7CisKKwlyZWwgPSByZWxhdGlvbl9vcGVuKGNtZC0+ZC5hbHRlclRhYmxlLm9iamVjdElkLCBB Y2Nlc3NTaGFyZUxvY2spOworCWRwY29udGV4dCA9IGRlcGFyc2VfY29udGV4dF9mb3IoUmVsYXRp b25HZXRSZWxhdGlvbk5hbWUocmVsKSwKKwkJCQkJCQkJCWNtZC0+ZC5hbHRlclRhYmxlLm9iamVj dElkKTsKKworCXN3aXRjaCAocmVsLT5yZF9yZWwtPnJlbGtpbmQpCisJeworCQljYXNlIFJFTEtJ TkRfUkVMQVRJT046CisJCWNhc2UgUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRToKKwkJCXJlbHR5 cGUgPSAiVEFCTEUiOworCQkJYnJlYWs7CisJCWNhc2UgUkVMS0lORF9JTkRFWDoKKwkJY2FzZSBS RUxLSU5EX1BBUlRJVElPTkVEX0lOREVYOgorCQkJcmVsdHlwZSA9ICJJTkRFWCI7CisJCQlicmVh azsKKwkJY2FzZSBSRUxLSU5EX1ZJRVc6CisJCQlyZWx0eXBlID0gIlZJRVciOworCQkJYnJlYWs7 CisJCWNhc2UgUkVMS0lORF9DT01QT1NJVEVfVFlQRToKKwkJCXJlbHR5cGUgPSAiVFlQRSI7CisJ CQlpc3R5cGUgPSB0cnVlOworCQkJYnJlYWs7CisJCWNhc2UgUkVMS0lORF9GT1JFSUdOX1RBQkxF OgorCQkJcmVsdHlwZSA9ICJGT1JFSUdOIFRBQkxFIjsKKwkJCWJyZWFrOworCisJCS8qIFRPRE8g c3VwcG9ydCBmb3IgcGFydGl0aW9uZWQgdGFibGUgKi8KKworCQlkZWZhdWx0OgorCQkJZWxvZyhF UlJPUiwgInVuZXhwZWN0ZWQgcmVsa2luZCAlZCIsIHJlbC0+cmRfcmVsLT5yZWxraW5kKTsKKwl9 CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBBTFRFUiByZWx0eXBlICV7aWRl bnRpdHl9RCAle3N1YmNtZHM6LCB9cworCSAqLworCWZtdHN0ciA9IHBzcHJpbnRmKCJBTFRFUiAl cyIsIHJlbHR5cGUpOworCWFsdGVyVGFibGVTdG10ID0gbmV3X29ianRyZWUoZm10c3RyKTsKKwor CXRtcG9iaiA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShyZWwtPnJkX3JlbC0+cmVsbmFtZXNw YWNlLAorCQkJCQkJCQkgICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpKTsKKwlhcHBlbmRf b2JqZWN0X29iamVjdChhbHRlclRhYmxlU3RtdCwgIiV7aWRlbnRpdHl9RCIsIHRtcG9iaik7CisK Kwlmb3JlYWNoKGNlbGwsIGNtZC0+ZC5hbHRlclRhYmxlLnN1YmNtZHMpCisJeworCQlDb2xsZWN0 ZWRBVFN1YmNtZCAqc3ViID0gKENvbGxlY3RlZEFUU3ViY21kICopIGxmaXJzdChjZWxsKTsKKwkJ QWx0ZXJUYWJsZUNtZAkqc3ViY21kID0gKEFsdGVyVGFibGVDbWQgKikgc3ViLT5wYXJzZXRyZWU7 CisJCU9ialRyZWUJICAgKnRyZWU7CisKKwkJQXNzZXJ0KElzQShzdWJjbWQsIEFsdGVyVGFibGVD bWQpKTsKKworCQlzd2l0Y2ggKHN1YmNtZC0+c3VidHlwZSkKKwkJeworCQkJY2FzZSBBVF9BZGRD b2x1bW46CisJCQljYXNlIEFUX0FkZENvbHVtblJlY3Vyc2U6CisJCQkJLyogWFhYIG5lZWQgdG8g c2V0IHRoZSAicmVjdXJzZSIgYml0IHNvbWV3aGVyZT8gKi8KKwkJCQlBc3NlcnQoSXNBKHN1YmNt ZC0+ZGVmLCBDb2x1bW5EZWYpKTsKKwkJCQl0cmVlID0gZGVwYXJzZV9Db2x1bW5EZWYocmVsLCBk cGNvbnRleHQsIGZhbHNlLAorCQkJCQkJCQkJCSAoQ29sdW1uRGVmICopIHN1YmNtZC0+ZGVmLCB0 cnVlLCAmZXhwcnMpOworCQkJCWZtdHN0ciA9IHBzcHJpbnRmKCJBREQgJXMgJSV7ZGVmaW5pdGlv bn1zIiwKKwkJCQkJCQkJICBpc3R5cGUgPyAiQVRUUklCVVRFIiA6ICJDT0xVTU4iKTsKKwkJCQl0 bXBvYmogPSBuZXdfb2JqdHJlZV9WQShmbXRzdHIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpU eXBlU3RyaW5nLCAiYWRkIGNvbHVtbiIsCisJCQkJCQkJCQkgImRlZmluaXRpb24iLCBPYmpUeXBl T2JqZWN0LCB0cmVlKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0 X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9BZGRJbmRleENvbnN0 cmFpbnQ6CisJCQkJeworCQkJCQlJbmRleFN0bXQgICppc3RtdDsKKwkJCQkJUmVsYXRpb24JaWR4 OworCQkJCQlPaWQJCQljb25zdHJPaWQgPSBzdWItPmFkZHJlc3Mub2JqZWN0SWQ7CisKKwkJCQkJ QXNzZXJ0KElzQShzdWJjbWQtPmRlZiwgSW5kZXhTdG10KSk7CisJCQkJCWlzdG10ID0gKEluZGV4 U3RtdCAqKSBzdWJjbWQtPmRlZjsKKworCQkJCQlBc3NlcnQoaXN0bXQtPmlzY29uc3RyYWludCAm JiBpc3RtdC0+dW5pcXVlKTsKKworCQkJCQlpZHggPSByZWxhdGlvbl9vcGVuKGlzdG10LT5pbmRl eE9pZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCQkJCQkvKgorCQkJCQkgKiBWZXJib3NlIHN5bnRh eAorCQkJCQkgKgorCQkJCQkgKiBBREQgQ09OU1RSQUlOVCAle25hbWV9SSAle2NvbnN0cmFpbnRf dHlwZX1zIFVTSU5HIElOREVYCisJCQkJCSAqICVpbmRleF9uYW1lfUkgJXtkZWZlcnJhYmxlfXMg JXtpbml0X2RlZmVycmVkfXMKKwkJCQkJICovCisJCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZB KCJBREQgQ09OU1RSQUlOVCAle25hbWV9SSIsIDIsCisJCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlw ZVN0cmluZywgImFkZCBjb25zdHJhaW50IHVzaW5nIGluZGV4IiwKKwkJCQkJCQkJCQkgIm5hbWUi LCBPYmpUeXBlU3RyaW5nLCBnZXRfY29uc3RyYWludF9uYW1lKGNvbnN0ck9pZCkpOworCisJCQkJ CWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7Y29uc3RyYWludF90eXBlfXMiLCBpc3Rt dC0+ZGVmZXJyYWJsZSA/CisJCQkJCQkJCQkJICJERUZFUlJBQkxFIiA6ICJOT1QgREVGRVJSQUJM RSIpOworCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICJVU0lORyBJTkRFWCAle2lu ZGV4X25hbWV9SSIsCisJCQkJCQkJCQkJIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKGlkeCkpOwor CQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle2RlZmVycmFibGV9cyIsIGlzdG10 LT5kZWZlcnJhYmxlID8KKwkJCQkJCQkJCQkgIkRFRkVSUkFCTEUiIDogIk5PVCBERUZFUlJBQkxF Iik7CisJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7aW5pdF9kZWZlcnJlZH1z IiwgaXN0bXQtPmluaXRkZWZlcnJlZCA/CisJCQkJCQkJCQkJICJJTklUSUFMTFkgREVGRVJSRUQi IDogIklOSVRJQUxMWSBJTU1FRElBVEUiKTsKKworCQkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJj bWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKworCQkJCQlyZWxhdGlvbl9jbG9zZShp ZHgsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1Jl QWRkSW5kZXg6CisJCQljYXNlIEFUX1JlQWRkQ29uc3RyYWludDoKKwkJCWNhc2UgQVRfUmVBZGRD b21tZW50OgorCQkJY2FzZSBBVF9SZXBsYWNlUmVsT3B0aW9uczoKKwkJCQkvKiBTdWJ0eXBlcyB1 c2VkIGZvciBpbnRlcm5hbCBvcGVyYXRpb25zOyBub3RoaW5nIHRvIGRvIGhlcmUgKi8KKwkJCQli cmVhazsKKworCQkJY2FzZSBBVF9BZGRDb2x1bW5Ub1ZpZXc6CisJCQkJLyogQ1JFQVRFIE9SIFJF UExBQ0UgVklFVyAtLSBub3RoaW5nIHRvIGRvIGhlcmUgKi8KKwkJCQlicmVhazsKKworCQkJY2Fz ZSBBVF9Db2x1bW5EZWZhdWx0OgorCQkJCWlmIChzdWJjbWQtPmRlZiA9PSBOVUxMKQorCQkJCXsK KwkJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIERS T1AgREVGQVVMVCIsIDIsCisJCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRyb3Ag ZGVmYXVsdCIsCisJCQkJCQkJCQkJICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5h bWUpOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlMaXN0CSAgICpkcGNvbnRleHQ7CisJ CQkJCUhlYXBUdXBsZQlhdHRydHVwOworCQkJCQlBdHRyTnVtYmVyCWF0dG5vOworCisJCQkJCXRt cG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBTRVQgREVGQVVM VCIsIDIsCisJCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBkZWZhdWx0IiwK KwkJCQkJCQkJCQkgImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisKKwkJ CQkJZHBjb250ZXh0ID0gZGVwYXJzZV9jb250ZXh0X2ZvcihSZWxhdGlvbkdldFJlbGF0aW9uTmFt ZShyZWwpLAorCQkJCQkJCQkJCQkJCVJlbGF0aW9uR2V0UmVsaWQocmVsKSk7CisJCQkJCWF0dHJ0 dXAgPSBTZWFyY2hTeXNDYWNoZUF0dE5hbWUoUmVsYXRpb25HZXRSZWxpZChyZWwpLCBzdWJjbWQt Pm5hbWUpOworCQkJCQlhdHRubyA9ICgoRm9ybV9wZ19hdHRyaWJ1dGUpIEdFVFNUUlVDVChhdHRy dHVwKSktPmF0dG51bTsKKwkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtkZWZp bml0aW9ufXMiLAorCQkJCQkJCQkJCSBSZWxhdGlvbkdldENvbHVtbkRlZmF1bHQocmVsLCBhdHRu bywgZHBjb250ZXh0LCBOVUxMKSk7CisJCQkJCVJlbGVhc2VTeXNDYWNoZShhdHRydHVwKTsKKwkJ CQl9CisKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0 bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9Ecm9wTm90TnVsbDoKKwkJCQl0bXBv YmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgRFJPUCBOT1QgTlVM TCIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZHJvcCBub3QgbnVsbCIs CisJCQkJCQkJCQkgImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJ c3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJ CQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfU2V0Tm90TnVsbDoKKwkJCQl0bXBvYmogPSBuZXdfb2Jq dHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgU0VUIE5PVCBOVUxMIiwgMiwKKwkJCQkJ CQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgbm90IG51bGwiLAorCQkJCQkJCQkJICJj b2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBw ZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJ CQljYXNlIEFUX0Ryb3BFeHByZXNzaW9uOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJB TFRFUiBDT0xVTU4gJXtjb2x1bW59SSBEUk9QIEVYUFJFU1NJT04iLCAyLAorCQkJCQkJCQkJICJ0 eXBlIiwgT2JqVHlwZVN0cmluZywgImRyb3AgZXhwcmVzc2lvbiIsCisJCQkJCQkJCQkgImNvbHVt biIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJYXBwZW5kX3N0cmluZ19vYmpl Y3QodG1wb2JqLCAiJXtpZl9ub3RfZXhpc3RzfXMiLAorCQkJCQkJCQkJIHN1YmNtZC0+bWlzc2lu Z19vayA/ICJJRiBFWElTVFMiOiAiIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywg bmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfU2V0 U3RhdGlzdGljczoKKwkJCQl7CisJCQkJCUFzc2VydChJc0Eoc3ViY21kLT5kZWYsIEludGVnZXIp KTsKKwkJCQkJaWYgKHN1YmNtZC0+bmFtZSkKKwkJCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZB KCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBTRVQgU1RBVElTVElDUyAle3N0YXRpc3RpY3N9biIs CisJCQkJCQkJCQkJCSAzLAorCQkJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0 IHN0YXRpc3RpY3MiLAorCQkJCQkJCQkJCQkgImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNt ZC0+bmFtZSwKKwkJCQkJCQkJCQkJICJzdGF0aXN0aWNzIiwgT2JqVHlwZUludGVnZXIsCisJCQkJ CQkJCQkJCSBpbnRWYWwoKEludGVnZXIgKikgc3ViY21kLT5kZWYpKTsKKwkJCQkJZWxzZQorCQkJ CQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1uIFNFVCBT VEFUSVNUSUNTICV7c3RhdGlzdGljc31uIiwKKwkJCQkJCQkJCQkJIDMsCisJCQkJCQkJCQkJCSAi dHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgc3RhdGlzdGljcyIsCisJCQkJCQkJCQkJCSAiY29s dW1uIiwgT2JqVHlwZUludGVnZXIsIHN1YmNtZC0+bnVtLAorCQkJCQkJCQkJCQkgInN0YXRpc3Rp Y3MiLCBPYmpUeXBlSW50ZWdlciwKKwkJCQkJCQkJCQkJIGludFZhbCgoSW50ZWdlciAqKSBzdWJj bWQtPmRlZikpOworCQkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29i amVjdCh0bXBvYmopKTsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfU2V0T3B0aW9u czoKKwkJCWNhc2UgQVRfUmVzZXRPcHRpb25zOgorCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNt ZHMsIG5ld19vYmplY3Rfb2JqZWN0KAorCQkJCQkJCQkJICBkZXBhcnNlX0NvbHVtblNldE9wdGlv bnMoc3ViY21kKSkpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1NldFN0b3JhZ2U6CisJCQkJ QXNzZXJ0KElzQShzdWJjbWQtPmRlZiwgU3RyaW5nKSk7CisJCQkJdG1wb2JqID0gbmV3X29ianRy ZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIFNFVCBTVE9SQUdFICV7c3RvcmFnZX1zIiwg MywKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgc3RvcmFnZSIsCisJCQkJ CQkJCQkgImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSwKKwkJCQkJCQkJCSAi c3RvcmFnZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkgc3RyVmFsKChTdHJpbmcgKikgc3Vi Y21kLT5kZWYpKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29i amVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9TZXRDb21wcmVzc2lvbjoK KwkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVmLCBTdHJpbmcpKTsKKwkJCQl0bXBvYmogPSBuZXdf b2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgU0VUIENPTVBSRVNTSU9OICV7Y29t cHJlc3Npb25fbWV0aG9kfXMiLAorCQkJCQkJCQkJIDMsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpU eXBlU3RyaW5nLCAic2V0IGNvbXByZXNzaW9uIiwKKwkJCQkJCQkJCSAiY29sdW1uIiwgT2JqVHlw ZVN0cmluZywgc3ViY21kLT5uYW1lLAorCQkJCQkJCQkJICJjb21wcmVzc2lvbl9tZXRob2QiLCBP YmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJIHN0clZhbCgoU3RyaW5nICopIHN1YmNtZC0+ZGVmKSk7 CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2Jq KSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRHJvcENvbHVtblJlY3Vyc2U6CisJCQljYXNl IEFUX0Ryb3BDb2x1bW46CisJCQkJZm10c3RyID0gcHNwcmludGYoIkRST1AgJXMgJSV7Y29sdW1u fUkiLAorCQkJCQkJCQkgIGlzdHlwZSA/ICJBVFRSSUJVVEUiIDogIkNPTFVNTiIpOworCQkJCXRt cG9iaiA9IG5ld19vYmp0cmVlX1ZBKGZtdHN0ciwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5 cGVTdHJpbmcsICJkcm9wIGNvbHVtbiIsCisJCQkJCQkJCQkgImNvbHVtbiIsIE9ialR5cGVTdHJp bmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJdG1wb2JqMiA9IG5ld19vYmp0cmVlX1ZBKCJDQVNDQURF IiwgMSwKKwkJCQkJCQkJCSAgInByZXNlbnQiLCBPYmpUeXBlQm9vbCwgc3ViY21kLT5iZWhhdmlv cik7CisJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtjYXNjYWRlfXMiLCB0bXBv YmoyKTsKKworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0FkZEluZGV4OgorCQkJCXsKKwkJ CQkJT2lkCQkJaWR4T2lkID0gc3ViLT5hZGRyZXNzLm9iamVjdElkOworCQkJCQlJbmRleFN0bXQg ICppc3RtdDsKKwkJCQkJUmVsYXRpb24JaWR4OworCQkJCQljb25zdCBjaGFyICppZHhuYW1lOwor CQkJCQlPaWQJCQljb25zdHJPaWQ7CisKKwkJCQkJQXNzZXJ0KElzQShzdWJjbWQtPmRlZiwgSW5k ZXhTdG10KSk7CisJCQkJCWlzdG10ID0gKEluZGV4U3RtdCAqKSBzdWJjbWQtPmRlZjsKKworCQkJ CQlpZiAoIWlzdG10LT5pc2NvbnN0cmFpbnQpCisJCQkJCQlicmVhazsKKworCQkJCQlpZHggPSBy ZWxhdGlvbl9vcGVuKGlkeE9pZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCQkJaWR4bmFtZSA9IFJl bGF0aW9uR2V0UmVsYXRpb25OYW1lKGlkeCk7CisKKwkJCQkJY29uc3RyT2lkID0gZ2V0X3JlbGF0 aW9uX2NvbnN0cmFpbnRfb2lkKAorCQkJCQkJY21kLT5kLmFsdGVyVGFibGUub2JqZWN0SWQsIGlk eG5hbWUsIGZhbHNlKTsKKworCQkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQUREIENPTlNU UkFJTlQgJXtuYW1lfUkgJXtkZWZpbml0aW9ufXMiLCAzLAorCQkJCQkJCQkJCSAidHlwZSIsIE9i alR5cGVTdHJpbmcsICJhZGQgY29uc3RyYWludCIsCisJCQkJCQkJCQkJICJuYW1lIiwgT2JqVHlw ZVN0cmluZywgaWR4bmFtZSwKKwkJCQkJCQkJCQkgImRlZmluaXRpb24iLCBPYmpUeXBlU3RyaW5n LAorCQkJCQkJCQkJCSBwZ19nZXRfY29uc3RyYWludGRlZl9jb21tYW5kX3NpbXBsZShjb25zdHJP aWQpKTsKKwkJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3Qo dG1wb2JqKSk7CisKKwkJCQkJcmVsYXRpb25fY2xvc2UoaWR4LCBBY2Nlc3NTaGFyZUxvY2spOwor CQkJCX0KKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9BZGRDb25zdHJhaW50OgorCQkJY2FzZSBB VF9BZGRDb25zdHJhaW50UmVjdXJzZToKKwkJCQl7CisJCQkJCS8qIFhYWCBuZWVkIHRvIHNldCB0 aGUgInJlY3Vyc2UiIGJpdCBzb21ld2hlcmU/ICovCisJCQkJCU9pZAkJCWNvbnN0ck9pZCA9IHN1 Yi0+YWRkcmVzcy5vYmplY3RJZDsKKwkJCQkJYm9vbAkJaXNudWxsOworCQkJCQlIZWFwVHVwbGUJ dHVwOworCQkJCQlEYXR1bQkJdmFsOworCQkJCQlDb25zdHJhaW50ICpjb25zdHI7CisKKwkJCQkJ QXNzZXJ0KElzQShzdWJjbWQtPmRlZiwgQ29uc3RyYWludCkpOworCQkJCQljb25zdHIgPSAgY2Fz dE5vZGUoQ29uc3RyYWludCwgc3ViY21kLT5kZWYpOworCisJCQkJCWlmICghY29uc3RyLT5za2lw X3ZhbGlkYXRpb24pCisJCQkJCXsKKwkJCQkJCXR1cCA9IFNlYXJjaFN5c0NhY2hlMShDT05TVFJP SUQsIE9iamVjdElkR2V0RGF0dW0oY29uc3RyT2lkKSk7CisKKwkJCQkJCWlmIChIZWFwVHVwbGVJ c1ZhbGlkKHR1cCkpCisJCQkJCQl7CisJCQkJCQkJY2hhcgkgICAqY29uYmluOworCisJCQkJCQkJ LyogRmV0Y2ggY29uc3RyYWludCBleHByZXNzaW9uIGluIHBhcnNldHJlZSBmb3JtICovCisJCQkJ CQkJdmFsID0gU3lzQ2FjaGVHZXRBdHRyKENPTlNUUk9JRCwgdHVwLAorCQkJCQkJCQkJCQkJICBB bnVtX3BnX2NvbnN0cmFpbnRfY29uYmluLCAmaXNudWxsKTsKKworCQkJCQkJCWlmICghaXNudWxs KQorCQkJCQkJCXsKKwkJCQkJCQkJY29uYmluID0gVGV4dERhdHVtR2V0Q1N0cmluZyh2YWwpOwor CQkJCQkJCQlleHBycyA9IGxhcHBlbmQoZXhwcnMsIHN0cmluZ1RvTm9kZShjb25iaW4pKTsKKwkJ CQkJCQl9CisKKwkJCQkJCQlSZWxlYXNlU3lzQ2FjaGUodHVwKTsKKwkJCQkJCX0KKwkJCQkJfQor CisJCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJBREQgQ09OU1RSQUlOVCAle25hbWV9SSAl e2RlZmluaXRpb259cyIsIDMsCisJCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImFk ZCBjb25zdHJhaW50IiwKKwkJCQkJCQkJCQkgIm5hbWUiLCBPYmpUeXBlU3RyaW5nLCBnZXRfY29u c3RyYWludF9uYW1lKGNvbnN0ck9pZCksCisJCQkJCQkJCQkJICJkZWZpbml0aW9uIiwgT2JqVHlw ZVN0cmluZywKKwkJCQkJCQkJCQkgcGdfZ2V0X2NvbnN0cmFpbnRkZWZfY29tbWFuZF9zaW1wbGUo Y29uc3RyT2lkKSk7CisJCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rf b2JqZWN0KHRtcG9iaikpOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9BbHRlckNv bnN0cmFpbnQ6CisJCQkJeworCQkJCQlPaWQJCWNvbnN0ck9pZCA9IHN1Yi0+YWRkcmVzcy5vYmpl Y3RJZDsKKwkJCQkJQ29uc3RyYWludCAqYyA9IChDb25zdHJhaW50ICopIHN1YmNtZC0+ZGVmOwor CisJCQkJCS8qIElmIG5vIGNvbnN0cmFpbnQgd2FzIGFsdGVyZWQsIHNpbGVudGx5IHNraXAgaXQg Ki8KKwkJCQkJaWYgKCFPaWRJc1ZhbGlkKGNvbnN0ck9pZCkpCisJCQkJCQlicmVhazsKKworCQkJ CQlBc3NlcnQoSXNBKGMsIENvbnN0cmFpbnQpKTsKKwkJCQkJdG1wb2JqID0gbmV3X29ianRyZWVf VkEoIkFMVEVSIENPTlNUUkFJTlQgJXtuYW1lfUkgJXtkZWZlcnJhYmxlfXMgJXtpbml0X2RlZmVy cmVkfXMiLAorCQkJCQkJCQkJCSA0LAorCQkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcs ICJhbHRlciBjb25zdHJhaW50IiwKKwkJCQkJCQkJCQkgIm5hbWUiLCBPYmpUeXBlU3RyaW5nLCBn ZXRfY29uc3RyYWludF9uYW1lKGNvbnN0ck9pZCksCisJCQkJCQkJCQkJICJkZWZlcnJhYmxlIiwg T2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkgYy0+ZGVmZXJyYWJsZSA/ICJERUZFUlJBQkxFIiA6 ICJOT1QgREVGRVJSQUJMRSIsCisJCQkJCQkJCQkJICJpbml0X2RlZmVycmVkIiwgT2JqVHlwZVN0 cmluZywKKwkJCQkJCQkJCQkgYy0+aW5pdGRlZmVycmVkID8gIklOSVRJQUxMWSBERUZFUlJFRCIg OiAiSU5JVElBTExZIElNTUVESUFURSIpOworCisJCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNt ZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJ Y2FzZSBBVF9WYWxpZGF0ZUNvbnN0cmFpbnRSZWN1cnNlOgorCQkJY2FzZSBBVF9WYWxpZGF0ZUNv bnN0cmFpbnQ6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIlZBTElEQVRFIENPTlNUUkFJ TlQgJXtjb25zdHJhaW50fUkiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywg InZhbGlkYXRlIGNvbnN0cmFpbnQiLAorCQkJCQkJCQkJICJjb25zdHJhaW50IiwgT2JqVHlwZVN0 cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdf b2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9Ecm9wQ29u c3RyYWludFJlY3Vyc2U6CisJCQljYXNlIEFUX0Ryb3BDb25zdHJhaW50OgorCQkJCXRtcG9iaiA9 IG5ld19vYmp0cmVlX1ZBKCJEUk9QIENPTlNUUkFJTlQgJXtjb25zdHJhaW50fUkiLCAyLAorCQkJ CQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRyb3AgY29uc3RyYWludCIsCisJCQkJCQkJ CQkgImNvbnN0cmFpbnQiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNt ZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJy ZWFrOworCisJCQljYXNlIEFUX0FsdGVyQ29sdW1uVHlwZToKKwkJCQl7CisJCQkJCVR1cGxlRGVz YyB0dXBkZXNjID0gUmVsYXRpb25HZXREZXNjcihyZWwpOworCQkJCQlGb3JtX3BnX2F0dHJpYnV0 ZSBhdHQ7CisJCQkJCUNvbHVtbkRlZgkgICAqZGVmOworCisJCQkJCWF0dCA9ICYodHVwZGVzYy0+ YXR0cnNbc3ViLT5hZGRyZXNzLm9iamVjdFN1YklkIC0gMV0pOworCQkJCQlkZWYgPSAoQ29sdW1u RGVmICopIHN1YmNtZC0+ZGVmOworCQkJCQlBc3NlcnQoSXNBKGRlZiwgQ29sdW1uRGVmKSk7CisK KwkJCQkJLyoKKwkJCQkJICogVmVyYm9zZSBzeW50YXgKKwkJCQkJICoKKwkJCQkJICogQ29tcG9z aXRlIHR5cGVzOiBBTFRFUiByZWx0eXBlICV7Y29sdW1ufUkgU0VUIERBVEEgVFlQRQorCQkJCQkg KiAle2RhdGF0eXBlfVQgJXtjb2xsYXRpb259cyBBVFRSSUJVVEUgJXtjYXNjYWRlfXMKKwkJCQkJ ICoKKwkJCQkJICogTm9ybWFsIHR5cGVzOiBBTFRFUiByZWx0eXBlICV7Y29sdW1ufUkgU0VUIERB VEEgVFlQRQorCQkJCQkgKiAle2RhdGF0eXBlfVQgJXtjb2xsYXRpb259cyBDT0xVTU4gJXt1c2lu Z31zCisJCQkJCSAqLworCQkJCQlmbXRzdHIgPSBwc3ByaW50ZigiQUxURVIgJXMgJSV7Y29sdW1u fUkgU0VUIERBVEEgVFlQRSIsCisJCQkJCQkJCQkgIGlzdHlwZSA/ICJBVFRSSUJVVEUiIDogIkNP TFVNTiIpOworCisJCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKGZtdHN0ciwgMiwKKwkJCQkJ CQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiYWx0ZXIgY29sdW1uIHR5cGUiLAorCQkJCQkJ CQkJCSAiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQkJLyogQWRk IHRoZSBUWVBFIGNsYXVzZSAqLworCQkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIl e2RhdGF0eXBlfVQiLAorCQkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShhdHQtPmF0dHR5 cGlkLAorCQkJCQkJCQkJCQkJCQkJICBhdHQtPmF0dHR5cG1vZCkpOworCisJCQkJCS8qIEFkZCBh IENPTExBVEUgY2xhdXNlLCBpZiBuZWVkZWQgKi8KKwkJCQkJdG1wb2JqMiA9IG5ld19vYmp0cmVl KCJDT0xMQVRFIik7CisJCQkJCWlmIChPaWRJc1ZhbGlkKGF0dC0+YXR0Y29sbGF0aW9uKSkKKwkJ CQkJeworCQkJCQkJT2JqVHJlZSAqY29sbG5hbWU7CisKKwkJCQkJCWNvbGxuYW1lID0gbmV3X29i anRyZWVfZm9yX3F1YWxuYW1lX2lkKENvbGxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJ CQkgICBhdHQtPmF0dGNvbGxhdGlvbik7CisJCQkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBv YmoyLCAiJXtuYW1lfUQiLCBjb2xsbmFtZSk7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQkJYXBw ZW5kX2Jvb2xfb2JqZWN0KHRtcG9iajIsICJwcmVzZW50IiwgZmFsc2UpOworCQkJCQlhcHBlbmRf b2JqZWN0X29iamVjdCh0bXBvYmosICIle2NvbGxhdGlvbn1zIiwgdG1wb2JqMik7CisKKwkJCQkJ LyogSWYgbm90IGEgY29tcG9zaXRlIHR5cGUsIGFkZCB0aGUgVVNJTkcgY2xhdXNlICovCisJCQkJ CWlmICghaXN0eXBlKQorCQkJCQl7CisJCQkJCQkvKgorCQkJCQkJICogSWYgdGhlcmUncyBhIFVT SU5HIGNsYXVzZSwgdHJhbnNmb3JtQWx0ZXJUYWJsZVN0bXQKKwkJCQkJCSAqIHJhbiBpdCB0aHJv dWdoIHRyYW5zZm9ybUV4cHIgYW5kIHN0b3JlZCB0aGUKKwkJCQkJCSAqIHJlc3VsdGluZyBub2Rl IGluIGNvb2tlZF9kZWZhdWx0LCB3aGljaCB3ZSBjYW4gdXNlCisJCQkJCQkgKiBoZXJlLgorCQkJ CQkJICovCisJCQkJCQl0bXBvYmoyID0gbmV3X29ianRyZWUoIlVTSU5HIik7CisJCQkJCQlpZiAo ZGVmLT5yYXdfZGVmYXVsdCkKKwkJCQkJCXsKKwkJCQkJCQlEYXR1bQlkZXBhcnNlZDsKKwkJCQkJ CQljaGFyICAgKmRlZmV4cHI7CisKKwkJCQkJCQlleHBycyA9IGxhcHBlbmQoZXhwcnMsIGRlZi0+ Y29va2VkX2RlZmF1bHQpOworCQkJCQkJCWRlZmV4cHIgPSBub2RlVG9TdHJpbmcoZGVmLT5jb29r ZWRfZGVmYXVsdCk7CisJCQkJCQkJZGVwYXJzZWQgPSBEaXJlY3RGdW5jdGlvbkNhbGwyKHBnX2dl dF9leHByLAorCQkJCQkJCQkJCQkJCQkgICBDU3RyaW5nR2V0VGV4dERhdHVtKGRlZmV4cHIpLAor CQkJCQkJCQkJCQkJCQkgICBSZWxhdGlvbkdldFJlbGlkKHJlbCkpOworCQkJCQkJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KHRtcG9iajIsICIle2V4cHJlc3Npb259cyIsCisJCQkJCQkJCQkJCQkgVGV4 dERhdHVtR2V0Q1N0cmluZyhkZXBhcnNlZCkpOworCQkJCQkJfQorCQkJCQkJZWxzZQorCQkJCQkJ CWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmoyLCAicHJlc2VudCIsIGZhbHNlKTsKKwkJCQkJCWFw cGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7dXNpbmd9cyIsIHRtcG9iajIpOworCQkJCQl9 CisKKwkJCQkJLyogSWYgaXQncyBhIGNvbXBvc2l0ZSB0eXBlLCBhZGQgdGhlIENBU0NBREUgY2xh dXNlICovCisJCQkJCWlmIChpc3R5cGUpCisJCQkJCXsKKwkJCQkJCXRtcG9iajIgPSBuZXdfb2Jq dHJlZSgiQ0FTQ0FERSIpOworCQkJCQkJaWYgKHN1YmNtZC0+YmVoYXZpb3IgIT0gRFJPUF9DQVND QURFKQorCQkJCQkJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmoyLCAicHJlc2VudCIsIGZhbHNl KTsKKwkJCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7Y2FzY2FkZX1zIiwgdG1w b2JqMik7CisJCQkJCX0KKworCQkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2Jq ZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQl9CisJCQkJYnJlYWs7CisKKyNpZmRlZiBUT0RPTElT VAorCQkJY2FzZSBBVF9BbHRlckNvbHVtbkdlbmVyaWNPcHRpb25zOgorCQkJCXRtcG9iaiA9IGRl cGFyc2VfRmR3T3B0aW9ucygoTGlzdCAqKSBzdWJjbWQtPmRlZiwKKwkJCQkJCQkJCQkgc3ViY21k LT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVj dCh0bXBvYmopKTsKKwkJCQlicmVhazsKKyNlbmRpZgorCQkJY2FzZSBBVF9DaGFuZ2VPd25lcjoK KwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiT1dORVIgVE8gJXtvd25lcn1JIiwgMiwKKwkJ CQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJjaGFuZ2Ugb3duZXIiLAorCQkJCQkJCQkJ ICJvd25lciIsICBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJIGdldF9yb2xlc3BlY19uYW1lKHN1 YmNtZC0+bmV3b3duZXIpKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2Jq ZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9DbHVzdGVyT246 CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkNMVVNURVIgT04gJXtpbmRleH1JIiwgMiwK KwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJjbHVzdGVyIG9uIiwKKwkJCQkJCQkJ CSAiaW5kZXgiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBs YXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOwor CisJCQljYXNlIEFUX0Ryb3BDbHVzdGVyOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJT RVQgV0lUSE9VVCBDTFVTVEVSIiwgMSwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcs ICJzZXQgd2l0aG91dCBjbHVzdGVyIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywg bmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfU2V0 TG9nZ2VkOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJTRVQgTE9HR0VEIiwgMSwKKwkJ CQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgbG9nZ2VkIik7CisJCQkJc3ViY21k cyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJl YWs7CisKKwkJCWNhc2UgQVRfU2V0VW5Mb2dnZWQ6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVf VkEoIlNFVCBVTkxPR0dFRCIsIDEsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAi c2V0IHVubG9nZ2VkIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVj dF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRHJvcE9pZHM6CisJ CQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIlNFVCBXSVRIT1VUIE9JRFMiLCAxLAorCQkJCQkJ CQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCB3aXRob3V0IG9pZHMiKTsKKwkJCQlzdWJj bWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQli cmVhazsKKwkJCWNhc2UgQVRfU2V0QWNjZXNzTWV0aG9kOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0 cmVlX1ZBKCJTRVQgQUNDRVNTIE1FVEhPRCAle2FjY2Vzc19tZXRob2R9SSIsIDIsCisJCQkJCQkJ CQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IGFjY2VzcyBtZXRob2QiLAorCQkJCQkJCQkJ ICJhY2Nlc3NfbWV0aG9kIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJj bWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQli cmVhazsKKwkJCWNhc2UgQVRfU2V0VGFibGVTcGFjZToKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJl ZV9WQSgiU0VUIFRBQkxFU1BBQ0UgJXt0YWJsZXNwYWNlfUkiLCAyLAorCQkJCQkJCQkJICJ0eXBl IiwgT2JqVHlwZVN0cmluZywgInNldCB0YWJsZXNwYWNlIiwKKwkJCQkJCQkJCSAidGFibGVzcGFj ZSIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQo c3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNh c2UgQVRfU2V0UmVsT3B0aW9uczoKKwkJCWNhc2UgQVRfUmVzZXRSZWxPcHRpb25zOgorCQkJCXN1 YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KAorCQkJCQkJCQkJICBk ZXBhcnNlX1JlbFNldE9wdGlvbnMoc3ViY21kKSkpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFU X0VuYWJsZVRyaWc6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkVOQUJMRSBUUklHR0VS ICV7dHJpZ2dlcn1JIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJlbmFi bGUgdHJpZ2dlciIsCisJCQkJCQkJCQkgInRyaWdnZXIiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQt Pm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0VuYWJsZUFsd2F5c1RyaWc6CisJ CQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkVOQUJMRSBBTFdBWVMgVFJJR0dFUiAle3RyaWdn ZXJ9SSIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZW5hYmxlIGFsd2F5 cyB0cmlnZ2VyIiwKKwkJCQkJCQkJCSAidHJpZ2dlciIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+ bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3Qo dG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRW5hYmxlUmVwbGljYVRyaWc6CisJ CQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkVOQUJMRSBSRVBMSUNBIFRSSUdHRVIgJXt0cmln Z2VyfUkiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImVuYWJsZSByZXBs aWNhIHRyaWdnZXIiLAorCQkJCQkJCQkJICJ0cmlnZ2VyIiwgT2JqVHlwZVN0cmluZywgc3ViY21k LT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVj dCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9EaXNhYmxlVHJpZzoKKwkJCQl0 bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiRElTQUJMRSBUUklHR0VSICV7dHJpZ2dlcn1JIiwgMiwK KwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkaXNhYmxlIHRyaWdnZXIiLAorCQkJ CQkJCQkJICJ0cmlnZ2VyIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJj bWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQli cmVhazsKKworCQkJY2FzZSBBVF9FbmFibGVUcmlnQWxsOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0 cmVlX1ZBKCJFTkFCTEUgVFJJR0dFUiBBTEwiLCAxLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlw ZVN0cmluZywgImVuYWJsZSB0cmlnZ2VyIGFsbCIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1 YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNl IEFUX0Rpc2FibGVUcmlnQWxsOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJESVNBQkxF IFRSSUdHRVIgQUxMIiwgMSwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkaXNh YmxlIHRyaWdnZXIgYWxsIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29i amVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRW5hYmxlVHJp Z1VzZXI6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkVOQUJMRSBUUklHR0VSIFVTRVIi LCAxLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImVuYWJsZSB0cmlnZ2VyIHVz ZXIiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0 bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9EaXNhYmxlVHJpZ1VzZXI6CisJCQkJ dG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkRJU0FCTEUgVFJJR0dFUiBVU0VSIiwgMSwKKwkJCQkJ CQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkaXNhYmxlIHRyaWdnZXIgdXNlciIpOworCQkJ CXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOwor CQkJCWJyZWFrOworCisJCQljYXNlIEFUX0VuYWJsZVJ1bGU6CisJCQkJdG1wb2JqID0gbmV3X29i anRyZWVfVkEoIkVOQUJMRSBSVUxFICV7cnVsZX1JIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9i alR5cGVTdHJpbmcsICJlbmFibGUgcnVsZSIsCisJCQkJCQkJCQkgInJ1bGUiLCBPYmpUeXBlU3Ry aW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19v YmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0VuYWJsZUFs d2F5c1J1bGU6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkVOQUJMRSBBTFdBWVMgUlVM RSAle3J1bGV9SSIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZW5hYmxl IGFsd2F5cyBydWxlIiwKKwkJCQkJCQkJCSAicnVsZSIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+ bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3Qo dG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRW5hYmxlUmVwbGljYVJ1bGU6CisJ CQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkVOQUJMRSBSRVBMSUNBIFJVTEUgJXtydWxlfUki LCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImVuYWJsZSByZXBsaWNhIHJ1 bGUiLAorCQkJCQkJCQkJICJydWxlIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJ CQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsK KwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9EaXNhYmxlUnVsZToKKwkJCQl0bXBvYmogPSBuZXdf b2JqdHJlZV9WQSgiRElTQUJMRSBSVUxFICV7cnVsZX1JIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIs IE9ialR5cGVTdHJpbmcsICJkaXNhYmxlIHJ1bGUiLAorCQkJCQkJCQkJICJydWxlIiwgT2JqVHlw ZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBu ZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9BZGRJ bmhlcml0OgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJJTkhFUklUICV7cGFyZW50fUQi LCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImluaGVyaXQiLAorCQkJCQkJ CQkJICJwYXJlbnQiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9x dWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJIHN1Yi0+YWRk cmVzcy5vYmplY3RJZCkpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmpl Y3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Ryb3BJbmhlcml0 OgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJOTyBJTkhFUklUICV7cGFyZW50fUQiLCAy LAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRyb3AgaW5oZXJpdCIsCisJCQkJ CQkJCQkgInBhcmVudCIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9y X3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkgc3ViLT5h ZGRyZXNzLm9iamVjdElkKSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29i amVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQWRkT2Y6CisJ CQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIk9GICV7dHlwZV9vZn1UIiwgMiwKKwkJCQkJCQkJ CSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJhZGQgb2YiLAorCQkJCQkJCQkJICJ0eXBlX29mIiwg T2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShzdWItPmFkZHJl c3Mub2JqZWN0SWQsIC0xKSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29i amVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRHJvcE9mOgor CQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJOT1QgT0YiLCAxLAorCQkJCQkJCQkJICJ0eXBl IiwgT2JqVHlwZVN0cmluZywgIm5vdCBvZiIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNt ZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFU X1JlcGxpY2FJZGVudGl0eToKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiUkVQTElDQSBJ REVOVElUWSIsIDEsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAicmVwbGljYSBp ZGVudGl0eSIpOworCQkJCXN3aXRjaCAoKChSZXBsaWNhSWRlbnRpdHlTdG10ICopIHN1YmNtZC0+ ZGVmKS0+aWRlbnRpdHlfdHlwZSkKKwkJCQl7CisJCQkJCWNhc2UgUkVQTElDQV9JREVOVElUWV9E RUZBVUxUOgorCQkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtpZGVudH1zIiwg IkRFRkFVTFQiKTsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIFJFUExJQ0FfSURFTlRJVFlfRlVM TDoKKwkJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7aWRlbnR9cyIsICJGVUxM Iik7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBSRVBMSUNBX0lERU5USVRZX05PVEhJTkc6CisJ CQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle2lkZW50fXMiLCAiTk9USElORyIp OworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgUkVQTElDQV9JREVOVElUWV9JTkRFWDoKKwkJCQkJ CXRtcG9iajIgPSBuZXdfb2JqdHJlZV9WQSgiVVNJTkcgSU5ERVggJXtpbmRleH1JIiwgMSwKKwkJ CQkJCQkJCQkJICAiaW5kZXgiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCQkgICgoUmVwbGlj YUlkZW50aXR5U3RtdCAqKSBzdWJjbWQtPmRlZiktPm5hbWUpOworCQkJCQkJYXBwZW5kX29iamVj dF9vYmplY3QodG1wb2JqLCAiJXtpZGVudH1zIiwgdG1wb2JqMik7CisJCQkJCQlicmVhazsKKwkJ CQl9CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1w b2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRW5hYmxlUm93U2VjdXJpdHk6CisJCQkJ dG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkVOQUJMRSBST1cgTEVWRUwgU0VDVVJJVFkiLCAxLAor CQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImVuYWJsZSByb3cgc2VjdXJpdHkiKTsK KwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmop KTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9EaXNhYmxlUm93U2VjdXJpdHk6CisJCQkJdG1w b2JqID0gbmV3X29ianRyZWVfVkEoIkRJU0FCTEUgUk9XIExFVkVMIFNFQ1VSSVRZIiwgMSwKKwkJ CQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkaXNhYmxlIHJvdyBzZWN1cml0eSIpOwor CQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikp OworCQkJCWJyZWFrOworI2lmZGVmIFRPRE9MSVNUCisJCQljYXNlIEFUX0dlbmVyaWNPcHRpb25z OgorCQkJCXRtcG9iaiA9IGRlcGFyc2VfRmR3T3B0aW9ucygoTGlzdCAqKSBzdWJjbWQtPmRlZiwg TlVMTCk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3Qo dG1wb2JqKSk7CisJCQkJYnJlYWs7CisjZW5kaWYKKwkJCWNhc2UgQVRfQXR0YWNoUGFydGl0aW9u OgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJBVFRBQ0ggUEFSVElUSU9OICV7cGFydGl0 aW9uX2lkZW50aXR5fUQiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImF0 dGFjaCBwYXJ0aXRpb24iLAorCQkJCQkJCQkJICJwYXJ0aXRpb25faWRlbnRpdHkiLCBPYmpUeXBl T2JqZWN0LAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJl bGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJIHN1Yi0+YWRkcmVzcy5vYmplY3RJZCkpOworCisJ CQkJaWYgKHJlbC0+cmRfcmVsLT5yZWxraW5kID09IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUp CisJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7cGFydGl0aW9uX2JvdW5kfXMi LAorCQkJCQkJCQkJCSBSZWxhdGlvbkdldFBhcnRpdGlvbkJvdW5kKHN1Yi0+YWRkcmVzcy5vYmpl Y3RJZCkpOworCisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmpl Y3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIEFUX0RldGFjaFBhcnRpdGlvbjoKKwkJ CQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiREVUQUNIIFBBUlRJVElPTiAle3BhcnRpdGlvbl9p ZGVudGl0eX1EIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkZXRhY2gg cGFydGl0aW9uIiwKKwkJCQkJCQkJCSAicGFydGl0aW9uX2lkZW50aXR5IiwgT2JqVHlwZU9iamVj dCwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlv bklkLAorCQkJCQkJCQkJCQkJCQkJCSBzdWItPmFkZHJlc3Mub2JqZWN0SWQpKTsKKwkJCQlzdWJj bWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQli cmVhazsKKwkJCWNhc2UgQVRfRGV0YWNoUGFydGl0aW9uRmluYWxpemU6CisJCQkJdG1wb2JqID0g bmV3X29ianRyZWVfVkEoIkRFVEFDSCBQQVJUSVRJT04gJXtwYXJ0aXRpb25faWRlbnRpdHl9RCBG SU5BTElaRSIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZGV0YWNoIHBh cnRpdGlvbiBmaW5hbGl6ZSIsCisJCQkJCQkJCQkgInBhcnRpdGlvbl9pZGVudGl0eSIsIE9ialR5 cGVPYmplY3QsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9u UmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkgc3ViLT5hZGRyZXNzLm9iamVjdElkKSk7CisJ CQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7 CisJCQkJYnJlYWs7CisJCQljYXNlIEFUX0FkZElkZW50aXR5OgorCQkJCXsKKwkJCQkJQXR0ck51 bWJlcglhdHRudW07CisJCQkJCU9pZAkJCXNlcV9yZWxpZDsKKwkJCQkJT2JqVHJlZQkqc2VxZGVm OworCQkJCQlDb2x1bW5EZWYgICpjb2xkZWYgPSAoQ29sdW1uRGVmICopIHN1YmNtZC0+ZGVmOwor CisJCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBB REQgJXtpZGVudGl0eV9jb2x1bW59cyIsIDIsCisJCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0 cmluZywgImFkZCBpZGVudGl0eSIsCisJCQkJCQkJCQkJICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5n LCBzdWJjbWQtPm5hbWUpOworCisJCQkJCWF0dG51bSA9IGdldF9hdHRudW0oUmVsYXRpb25HZXRS ZWxpZChyZWwpLCBzdWJjbWQtPm5hbWUpOworCQkJCQlzZXFfcmVsaWQgPSBnZXRJZGVudGl0eVNl cXVlbmNlKFJlbGF0aW9uR2V0UmVsaWQocmVsKSwgYXR0bnVtLCB0cnVlKTsKKwkJCQkJc2VxZGVm ID0gZGVwYXJzZV9Db2x1bW5JZGVudGl0eShzZXFfcmVsaWQsIGNvbGRlZi0+aWRlbnRpdHksIGZh bHNlKTsKKworCQkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICJpZGVudGl0eV9jb2x1 bW4iLCBzZXFkZWYpOworCisJCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmpl Y3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgQVRfU2V0SWRl bnRpdHk6CisJCQkJeworCQkJCQlEZWZFbGVtCSpkZWZlbDsKKwkJCQkJY2hhcgkJaWRlbnRpdHkg PSAwOworCQkJCQlPYmpUcmVlCSAgICpzZXFkZWY7CisJCQkJCUF0dHJOdW1iZXIJYXR0bnVtOwor CQkJCQlPaWQJCQlzZXFfcmVsaWQ7CisKKworCQkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgi QUxURVIgQ09MVU1OICV7Y29sdW1ufUkiLCAyLAorCQkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVT dHJpbmcsICJzZXQgaWRlbnRpdHkiLAorCQkJCQkJCQkJCSAiY29sdW1uIiwgT2JqVHlwZVN0cmlu Zywgc3ViY21kLT5uYW1lKTsKKworCQkJCQlpZiAoc3ViY21kLT5kZWYpCisJCQkJCXsKKwkJCQkJ CUxpc3QJICAgKmRlZiA9IChMaXN0ICopIHN1YmNtZC0+ZGVmOworCisJCQkJCQlBc3NlcnQoSXNB KHN1YmNtZC0+ZGVmLCBMaXN0KSk7CisKKwkJCQkJCWRlZmVsID0gbGluaXRpYWxfbm9kZShEZWZF bGVtLCBkZWYpOworCQkJCQkJaWRlbnRpdHkgPSBkZWZHZXRJbnQzMihkZWZlbCk7CisJCQkJCX0K KworCQkJCQlhdHRudW0gPSBnZXRfYXR0bnVtKFJlbGF0aW9uR2V0UmVsaWQocmVsKSwgc3ViY21k LT5uYW1lKTsKKwkJCQkJc2VxX3JlbGlkID0gZ2V0SWRlbnRpdHlTZXF1ZW5jZShSZWxhdGlvbkdl dFJlbGlkKHJlbCksIGF0dG51bSwgdHJ1ZSk7CisJCQkJCXNlcWRlZiA9IGRlcGFyc2VfQ29sdW1u SWRlbnRpdHkoc2VxX3JlbGlkLCBpZGVudGl0eSwgdHJ1ZSk7CisKKwkJCQkJYXBwZW5kX29iamVj dF9vYmplY3QodG1wb2JqLCAiJXtkZWZpbml0aW9ufXMiLCBzZXFkZWYpOworCisJCQkJCXN1YmNt ZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCQli cmVhazsKKwkJCQl9CisJCQljYXNlIEFUX0Ryb3BJZGVudGl0eToKKwkJCQl0bXBvYmogPSBuZXdf b2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgRFJPUCBJREVOVElUWSIsIDIsCisJ CQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZHJvcCBpZGVudGl0eSIsCisJCQkJCQkJ CQkgImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisKKwkJCQlhcHBlbmRf c3RyaW5nX29iamVjdCh0bXBvYmosICIle2lmX25vdF9leGlzdHN9cyIsCisJCQkJCQkJCQkgc3Vi Y21kLT5taXNzaW5nX29rID8gIklGIEVYSVNUUyIgOiAiIik7CisKKwkJCQlzdWJjbWRzID0gbGFw cGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKwkJ CWRlZmF1bHQ6CisJCQkJZWxvZyhXQVJOSU5HLCAidW5zdXBwb3J0ZWQgYWx0ZXIgdGFibGUgc3Vi dHlwZSAlZCIsCisJCQkJCSBzdWJjbWQtPnN1YnR5cGUpOworCQkJCWJyZWFrOworCQl9CisKKwkJ LyoKKwkJICogV2UgZG9uJ3Qgc3VwcG9ydCByZXBsaWNhdGluZyBBTFRFUiBUQUJMRSB3aGljaCBj b250YWlucyB2b2xhdGlsZQorCQkgKiBmdW5jdGlvbnMgYmVjYXVzZSBJdCdzIHBvc3NpYmxlIHRo ZSBmdW5jdGlvbnMgY29udGFpbiBEREwvRE1MIGluCisJCSAqIHdoaWNoIGNhc2UgdGhlc2Ugb3Bl cnRpb25zIHdpbGwgYmUgZXhlY3V0ZWQgdHdpY2UgYW5kIGNhdXNlCisJCSAqIGR1cGxpY2F0ZSBk YXRhLiBJbiBhZGRpdGlvbiwgd2UgZG9uJ3Qga25vdyB3aGV0aGVyIHRoZSB0YWJsZXMgYmVpbmcK KwkJICogYWNjZXNzZWQgYnkgdGhlc2UgRERML0RNTCBhcmUgcHVibGlzaGVkIG9yIG5vdC4gU28g YmxpbmRseSBhbGxvd2luZworCQkgKiBzdWNoIGZ1bmN0aW9ucyBjYW4gYWxsb3cgdW5pbnRlbmRl ZCBjbGF1c2VzIGxpa2UgdGhlIHRhYmxlcyBhY2Nlc3NlZAorCQkgKiBpbiB0aG9zZSBmdW5jdGlv bnMgbWF5IG5vdCBldmVuIGV4aXN0IG9uIHRoZSBzdWJzY3JpYmVyLXNpZGUuCisJCSAqLworCQlp ZiAoY29udGFpbl92b2xhdGlsZV9mdW5jdGlvbnMoKE5vZGUgKikgZXhwcnMpKQorCQkJZXJlcG9y dChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAor CQkJCQkgZXJybXNnKCJBTFRFUiBUQUJMRSBjb21tYW5kIHVzaW5nIHZvbGF0aWxlIGZ1bmN0aW9u IGNhbm5vdCBiZSByZXBsaWNhdGVkIikpKTsKKworCQkvKgorCQkgKiBDbGVhbiB0aGUgbGlzdCBh cyB3ZSBhbHJlYWR5IGNvbmZpcm1lZCB0aGVyZSBpcyBubyB2b2xhdGlsZQorCQkgKiBmdW5jdGlv bi4KKwkJICovCisJCWxpc3RfZnJlZShleHBycyk7CisJCWV4cHJzID0gTklMOworCX0KKworCXRh YmxlX2Nsb3NlKHJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCWlmIChsaXN0X2xlbmd0aChzdWJj bWRzKSA9PSAwKQorCQlyZXR1cm4gTlVMTDsKKworCWFwcGVuZF9hcnJheV9vYmplY3QoYWx0ZXJU YWJsZVN0bXQsICIle3N1YmNtZHM6LCB9cyIsIHN1YmNtZHMpOworCisJcmV0dXJuIGFsdGVyVGFi bGVTdG10OworfQorCisvKgorICogU3Vicm91dGluZSBmb3IgQ1JFQVRFIFRBQkxFIGRlcGFyc2lu Zy4KKyAqCisgKiBEZXBhcnNlIGEgQ29sdW1uRGVmIG5vZGUgd2l0aGluIGEgcmVndWxhciAobm9u IHR5cGVkKSB0YWJsZSBjcmVhdGlvbi4KKyAqCisgKiBOT1QgTlVMTCBjb25zdHJhaW50cyBpbiB0 aGUgY29sdW1uIGRlZmluaXRpb24gYXJlIGVtaXR0ZWQgZGlyZWN0bHkgaW4gdGhlCisgKiBjb2x1 bW4gZGVmaW5pdGlvbiBieSB0aGlzIHJvdXRpbmU7IG90aGVyIGNvbnN0cmFpbnRzIG11c3QgYmUg ZW1pdHRlZAorICogZWxzZXdoZXJlICh0aGUgaW5mbyBpbiB0aGUgcGFyc2Ugbm9kZSBpcyBpbmNv bXBsZXRlIGFueXdheS4pLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NvbHVtbkRl ZihSZWxhdGlvbiByZWxhdGlvbiwgTGlzdCAqZHBjb250ZXh0LCBib29sIGNvbXBvc2l0ZSwKKwkJ CQkgIENvbHVtbkRlZiAqY29sZGVmLCBib29sIGlzX2FsdGVyLCBMaXN0ICoqZXhwcnMpCit7CisJ T2JqVHJlZQkgICAqY29sdW1uOworCU9ialRyZWUJICAgKnRtcG9iajsKKwlPaWQJCQlyZWxpZCA9 IFJlbGF0aW9uR2V0UmVsaWQocmVsYXRpb24pOworCUhlYXBUdXBsZQlhdHRyVHVwOworCUZvcm1f cGdfYXR0cmlidXRlIGF0dHJGb3JtOworCU9pZAkJCXR5cGlkOworCWludDMyCQl0eXBtb2Q7CisJ T2lkCQkJdHlwY29sbGF0aW9uOworCWJvb2wJCXNhd19ub3RudWxsOworCUxpc3RDZWxsICAgKmNl bGw7CisKKwkvKgorCSAqIEluaGVyaXRlZCBjb2x1bW5zIHdpdGhvdXQgbG9jYWwgZGVmaW5pdGlv bnMgbXVzdCBub3QgYmUgZW1pdHRlZC4KKwkgKgorCSAqIFhYWCBtYXliZSBpdCBpcyB1c2VmdWwg dG8gaGF2ZSB0aGVtIHdpdGggInByZXNlbnQgPSBmYWxzZSIgb3Igc29tZSBzdWNoPworCSAqLwor CWlmICghY29sZGVmLT5pc19sb2NhbCkKKwkJcmV0dXJuIE5VTEw7CisKKwlhdHRyVHVwID0gU2Vh cmNoU3lzQ2FjaGVBdHROYW1lKHJlbGlkLCBjb2xkZWYtPmNvbG5hbWUpOworCWlmICghSGVhcFR1 cGxlSXNWYWxpZChhdHRyVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNvdWxkIG5vdCBmaW5kIGNhY2hl IGVudHJ5IGZvciBjb2x1bW4gXCIlc1wiIG9mIHJlbGF0aW9uICV1IiwKKwkJCSBjb2xkZWYtPmNv bG5hbWUsIHJlbGlkKTsKKwlhdHRyRm9ybSA9IChGb3JtX3BnX2F0dHJpYnV0ZSkgR0VUU1RSVUNU KGF0dHJUdXApOworCisJZ2V0X2F0dHR5cGV0eXBtb2Rjb2xsKHJlbGlkLCBhdHRyRm9ybS0+YXR0 bnVtLAorCQkJCQkJICAmdHlwaWQsICZ0eXBtb2QsICZ0eXBjb2xsYXRpb24pOworCisJLyoKKwkg KiBWZXJib3NlIHN5bnRheAorCSAqCisJICogJXtuYW1lfUkgJXtjb2x0eXBlfVQgJXtjb21wcmVz c2lvbn1zICV7ZGVmYXVsdH1zICV7bm90X251bGx9cworCSAqICV7Y29sbGF0aW9ufXMKKwkgKi8K Kwljb2x1bW4gPSBuZXdfb2JqdHJlZV9WQSgiJXtuYW1lfUkgJXtjb2x0eXBlfVQiLCAzLAorCQkJ CQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImNvbHVtbiIsCisJCQkJCQkJIm5hbWUiLCBPYmpU eXBlU3RyaW5nLCBjb2xkZWYtPmNvbG5hbWUsCisJCQkJCQkJImNvbHR5cGUiLCBPYmpUeXBlT2Jq ZWN0LAorCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl90eXBlKHR5cGlkLCB0eXBtb2QpKTsKKworCS8q IFVTSU5HIGNsYXVzZSAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJDT01QUkVTU0lPTiIpOwor CWlmIChjb2xkZWYtPmNvbXByZXNzaW9uKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmos ICIle2NvbXByZXNzaW9uX21ldGhvZH1JIiwgY29sZGVmLT5jb21wcmVzc2lvbik7CisJZWxzZQor CXsKKwkJYXBwZW5kX251bGxfb2JqZWN0KHRtcG9iaiwgIiV7Y29tcHJlc3Npb25fbWV0aG9kfUki KTsKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJfQor CWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNvbHVtbiwgIiV7Y29tcHJlc3Npb259cyIsIHRtcG9iaik7 CisKKwl0bXBvYmogPSBuZXdfb2JqdHJlZSgiQ09MTEFURSIpOworCWlmIChPaWRJc1ZhbGlkKHR5 cGNvbGxhdGlvbikpCisJeworCQlPYmpUcmVlICpjb2xsbmFtZTsKKworCQljb2xsbmFtZSA9IG5l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChDb2xsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJ CQkgICB0eXBjb2xsYXRpb24pOworCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle25h bWV9RCIsIGNvbGxuYW1lKTsKKwl9CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2Jq LCAicHJlc2VudCIsIGZhbHNlKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChjb2x1bW4sICIle2Nv bGxhdGlvbn1zIiwgdG1wb2JqKTsKKworCWlmICghY29tcG9zaXRlKQorCXsKKwkJT2lkCXNlcXJl bGlkID0gSW52YWxpZE9pZDsKKworCQkvKgorCQkgKiBFbWl0IGEgTk9UIE5VTEwgZGVjbGFyYXRp b24gaWYgbmVjZXNzYXJ5LiAgTm90ZSB0aGF0IHdlIGNhbm5vdCB0cnVzdAorCQkgKiBwZ19hdHRy aWJ1dGUuYXR0bm90bnVsbCBoZXJlLCBiZWNhdXNlIHRoYXQgYml0IGlzIGFsc28gc2V0IHdoZW4K KwkJICogcHJpbWFyeSBrZXlzIGFyZSBzcGVjaWZpZWQ7IGFuZCB3ZSBtdXN0IG5vdCBlbWl0IGEg Tk9UIE5VTEwKKwkJICogY29uc3RyYWludCBpbiB0aGF0IGNhc2UsIHVubGVzcyBleHBsaWNpdGVs eSBzcGVjaWZpZWQuICBUaGVyZWZvcmUsCisJCSAqIHdlIHNjYW4gdGhlIGxpc3Qgb2YgY29uc3Ry YWludHMgYXR0YWNoZWQgdG8gdGhpcyBjb2x1bW4gdG8gZGV0ZXJtaW5lCisJCSAqIHdoZXRoZXIg d2UgbmVlZCB0byBlbWl0IGFueXRoaW5nLgorCQkgKiAoRm9ydHVuYXRlbHksIE5PVCBOVUxMIGNv bnN0cmFpbnRzIGNhbm5vdCBiZSB0YWJsZSBjb25zdHJhaW50cy4pCisJCSAqCisJCSAqIEluIHRo ZSBBTFRFUiBUQUJMRSBjYXNlcywgd2UgYWxzbyBhZGQgYSBOT1QgTlVMTCBpZiB0aGUgY29sRGVm IGlzCisJCSAqIG1hcmtlZCBpc19ub3RfbnVsbC4KKwkJICovCisJCXNhd19ub3RudWxsID0gZmFs c2U7CisJCWZvcmVhY2goY2VsbCwgY29sZGVmLT5jb25zdHJhaW50cykKKwkJeworCQkJQ29uc3Ry YWludCAqY29uc3RyID0gKENvbnN0cmFpbnQgKikgbGZpcnN0KGNlbGwpOworCisJCQlpZiAoY29u c3RyLT5jb250eXBlID09IENPTlNUUl9OT1ROVUxMKQorCQkJCXNhd19ub3RudWxsID0gdHJ1ZTsK KwkJfQorCQlpZiAoaXNfYWx0ZXIgJiYgY29sZGVmLT5pc19ub3RfbnVsbCkKKwkJCXNhd19ub3Ru dWxsID0gdHJ1ZTsKKworCQlhcHBlbmRfc3RyaW5nX29iamVjdChjb2x1bW4sICIle25vdF9udWxs fXMiLAorCQkJCQkJCSBzYXdfbm90bnVsbCA/ICJOT1QgTlVMTCIgOiAiIik7CisKKwkJdG1wb2Jq ID0gbmV3X29ianRyZWUoIkRFRkFVTFQiKTsKKwkJaWYgKGF0dHJGb3JtLT5hdHRoYXNkZWYpCisJ CXsKKwkJCWNoYXIgKmRlZnN0cjsKKworCQkJZGVmc3RyID0gUmVsYXRpb25HZXRDb2x1bW5EZWZh dWx0KHJlbGF0aW9uLCBhdHRyRm9ybS0+YXR0bnVtLAorCQkJCQkJCQkJCQkgIGRwY29udGV4dCwg ZXhwcnMpOworCisJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle2RlZmF1bHR9cyIs IGRlZnN0cik7CisJCX0KKwkJZWxzZQorCQkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInBy ZXNlbnQiLCBmYWxzZSk7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNvbHVtbiwgIiV7ZGVmYXVs dH1zIiwgdG1wb2JqKTsKKworCQkvKiBJREVOVElUWSBDT0xVTU4gKi8KKwkJaWYgKGNvbGRlZi0+ aWRlbnRpdHkpCisJCXsKKwkJCU9pZAlhdHRubyA9IGdldF9hdHRudW0ocmVsaWQsIGNvbGRlZi0+ Y29sbmFtZSk7CisJCQlzZXFyZWxpZCA9IGdldElkZW50aXR5U2VxdWVuY2UocmVsaWQsIGF0dG5v LCBmYWxzZSk7CisJCX0KKworCQl0bXBvYmogPSBkZXBhcnNlX0NvbHVtbklkZW50aXR5KHNlcXJl bGlkLCBjb2xkZWYtPmlkZW50aXR5LCBpc19hbHRlcik7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KGNvbHVtbiwgIiV7aWRlbnRpdHlfY29sdW1ufXMiLCB0bXBvYmopOworCisJCS8qIEdFTkVSQVRF RCBDT0xVTU4gRVhQUkVTU0lPTiAqLworCQl0bXBvYmogPSBuZXdfb2JqdHJlZSgiR0VORVJBVEVE IEFMV0FZUyBBUyIpOworCQlpZiAoY29sZGVmLT5nZW5lcmF0ZWQgPT0gQVRUUklCVVRFX0dFTkVS QVRFRF9TVE9SRUQpCisJCXsKKwkJCWNoYXIgKmRlZnN0cjsKKworCQkJZGVmc3RyID0gUmVsYXRp b25HZXRDb2x1bW5EZWZhdWx0KHJlbGF0aW9uLCBhdHRyRm9ybS0+YXR0bnVtLAorCQkJCQkJCQkJ CQkgIGRwY29udGV4dCwgZXhwcnMpOworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAi JXtnZW5lcmF0aW9uX2V4cHJ9cyBTVE9SRUQiLCBkZWZzdHIpOworCQl9CisJCWVsc2UKKwkJCWFw cGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCisJCWFwcGVuZF9v YmplY3Rfb2JqZWN0KGNvbHVtbiwgIiV7Z2VuZXJhdGVkX2NvbHVtbn1zIiwgdG1wb2JqKTsKKwl9 CisKKwlSZWxlYXNlU3lzQ2FjaGUoYXR0clR1cCk7CisKKwlyZXR1cm4gY29sdW1uOworfQorCisv KgorICogU3Vicm91dGluZSBmb3IgQ1JFQVRFIFRBQkxFIE9GIGRlcGFyc2luZy4KKyAqCisgKiBE ZXBhcnNlIGEgQ29sdW1uRGVmIG5vZGUgd2l0aGluIGEgdHlwZWQgdGFibGUgY3JlYXRpb24uCVRo aXMgaXMgc2ltcGxlcgorICogdGhhbiB0aGUgcmVndWxhciBjYXNlLCBiZWNhdXNlIHdlIGRvbid0 IGhhdmUgdG8gZW1pdCB0aGUgdHlwZSBkZWNsYXJhdGlvbiwKKyAqIGNvbGxhdGlvbiwgb3IgZGVm YXVsdC4gIEhlcmUgd2Ugb25seSByZXR1cm4gc29tZXRoaW5nIGlmIHRoZSBjb2x1bW4gaXMgYmVp bmcKKyAqIGRlY2xhcmVkIE5PVCBOVUxMLgorICoKKyAqIEFzIGluIGRlcGFyc2VfQ29sdW1uRGVm LCBhbnkgb3RoZXIgY29uc3RyYWludCBpcyBwcm9jZXNzZWQgZWxzZXdoZXJlLgorICovCitzdGF0 aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NvbHVtbkRlZl90eXBlZChSZWxhdGlvbiByZWxhdGlvbiwg TGlzdCAqZHBjb250ZXh0LCBDb2x1bW5EZWYgKmNvbGRlZikKK3sKKwlPYmpUcmVlCSpjb2x1bW4g PSBOVUxMOworCU9ialRyZWUJKnRtcG9iajsKKwlPaWQJCQlyZWxpZCA9IFJlbGF0aW9uR2V0UmVs aWQocmVsYXRpb24pOworCUhlYXBUdXBsZQlhdHRyVHVwOworCUZvcm1fcGdfYXR0cmlidXRlIGF0 dHJGb3JtOworCU9pZAkJCXR5cGlkOworCWludDMyCQl0eXBtb2Q7CisJT2lkCQkJdHlwY29sbGF0 aW9uOworCWJvb2wJCXNhd19ub3RudWxsOworCUxpc3RDZWxsICAgKmNlbGw7CisKKwlhdHRyVHVw ID0gU2VhcmNoU3lzQ2FjaGVBdHROYW1lKHJlbGlkLCBjb2xkZWYtPmNvbG5hbWUpOworCWlmICgh SGVhcFR1cGxlSXNWYWxpZChhdHRyVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNvdWxkIG5vdCBmaW5k IGNhY2hlIGVudHJ5IGZvciBjb2x1bW4gXCIlc1wiIG9mIHJlbGF0aW9uICV1IiwKKwkJCSBjb2xk ZWYtPmNvbG5hbWUsIHJlbGlkKTsKKwlhdHRyRm9ybSA9IChGb3JtX3BnX2F0dHJpYnV0ZSkgR0VU U1RSVUNUKGF0dHJUdXApOworCisJZ2V0X2F0dHR5cGV0eXBtb2Rjb2xsKHJlbGlkLCBhdHRyRm9y bS0+YXR0bnVtLAorCQkJCQkJICAmdHlwaWQsICZ0eXBtb2QsICZ0eXBjb2xsYXRpb24pOworCisJ LyoKKwkgKiBTZWFyY2ggZm9yIGEgTk9UIE5VTEwgZGVjbGFyYXRpb24uICBBcyBpbiBkZXBhcnNl X0NvbHVtbkRlZiwgd2UgcmVseSBvbgorCSAqIGZpbmRpbmcgYSBjb25zdHJhaW50IG9uIHRoZSBj b2x1bW4gcmF0aGVyIHRoYW4gY29sZGVmLT5pc19ub3RfbnVsbC4KKwkgKiAoVGhpcyByb3V0aW5l IGlzIG5ldmVyIHVzZWQgZm9yIEFMVEVSIGNhc2VzLikKKwkgKi8KKwlzYXdfbm90bnVsbCA9IGZh bHNlOworCWZvcmVhY2goY2VsbCwgY29sZGVmLT5jb25zdHJhaW50cykKKwl7CisJCUNvbnN0cmFp bnQgKmNvbnN0ciA9IChDb25zdHJhaW50ICopIGxmaXJzdChjZWxsKTsKKworCQlpZiAoY29uc3Ry LT5jb250eXBlID09IENPTlNUUl9OT1ROVUxMKQorCQl7CisJCQlzYXdfbm90bnVsbCA9IHRydWU7 CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICghc2F3X25vdG51bGwgJiYgIWF0dHJGb3JtLT5h dHRoYXNkZWYpCisJeworCQlSZWxlYXNlU3lzQ2FjaGUoYXR0clR1cCk7CisJCXJldHVybiBOVUxM OworCX0KKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqICV7bmFtZX1JIFdJVEgg T1BUSU9OUyAle2RlZmF1bHR9cyAle25vdF9udWxsfXMuCisJICovCisJY29sdW1uID0gbmV3X29i anRyZWVfVkEoIiV7bmFtZX1JIFdJVEggT1BUSU9OUyIsIDIsCisJCQkJCQkJInR5cGUiLCBPYmpU eXBlU3RyaW5nLCAiY29sdW1uIiwKKwkJCQkJCQkibmFtZSIsIE9ialR5cGVTdHJpbmcsIGNvbGRl Zi0+Y29sbmFtZSk7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChjb2x1bW4sICIle25vdF9udWxs fXMiLAorCQkJCQkJIHNhd19ub3RudWxsID8gIk5PVCBOVUxMIiA6ICIiKTsKKworCXRtcG9iaiA9 IG5ld19vYmp0cmVlKCJERUZBVUxUIik7CisJaWYgKGF0dHJGb3JtLT5hdHRoYXNkZWYpCisJewor CQljaGFyICpkZWZzdHI7CisKKwkJZGVmc3RyID0gUmVsYXRpb25HZXRDb2x1bW5EZWZhdWx0KHJl bGF0aW9uLCBhdHRyRm9ybS0+YXR0bnVtLAorCQkJCQkJCQkJCSAgZHBjb250ZXh0LCBOVUxMKTsK KworCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle2RlZmF1bHR9cyIsIGRlZnN0cik7 CisJfQorCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxz ZSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QoY29sdW1uLCAiJXtkZWZhdWx0fXMiLCB0bXBvYmop OworCisJLyoKKwkgKiBHZW5lcmF0ZWQgY29sdW1ucyBhcmUgbm90IHN1cHBvcnRlZCBvbiB0eXBl ZCB0YWJsZXMsIHNvIHdlIGFyZSBkb25lLgorCSAqLworCisJUmVsZWFzZVN5c0NhY2hlKGF0dHJU dXApOworCisJcmV0dXJuIGNvbHVtbjsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIGRlZmluaXRp b24gb2YgY29sdW1uIGlkZW50aXR5LgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0Nv bHVtbklkZW50aXR5KE9pZCBzZXFyZWxpZCwgY2hhciBpZGVudGl0eSwgYm9vbCBhbHRlcl90YWJs ZSkKK3sKKwlPYmpUcmVlCSAgICpjb2x1bW47CisJT2JqVHJlZQkgICAqaWRlbnRvYmo7CisJTGlz dAkgICAqZWxlbXMgPSBOSUw7CisJUmVsYXRpb24JcmVsOworCUhlYXBUdXBsZQlzZXF0dXBsZTsK KwlGb3JtX3BnX3NlcXVlbmNlIHNlcWZvcm07CisJRm9ybV9wZ19zZXF1ZW5jZV9kYXRhIHNlcWRh dGE7CisJY2hhcgkgICAqaWRlbnRmbXQ7CisJY2hhcgkgICAqb2JqZm10OworCisJY29sdW1uID0g bmV3X29ianRyZWUoIiIpOworCisJaWYgKCFPaWRJc1ZhbGlkKHNlcXJlbGlkKSkKKwl7CisJCWFw cGVuZF9ib29sX29iamVjdChjb2x1bW4sICJwcmVzZW50IiwgZmFsc2UpOworCQlyZXR1cm4gY29s dW1uOworCX0KKworCWlmIChhbHRlcl90YWJsZSkKKwl7CisJCWlkZW50Zm10ID0gIlNFVCBHRU5F UkFURUQgIjsKKwkJb2JqZm10ID0gIiV7b3B0aW9ufXMiOworCX0KKwllbHNlCisJeworCQlpZGVu dGZtdCA9ICJHRU5FUkFURUQgIjsKKwkJb2JqZm10ID0gIiV7b3B0aW9ufXMgQVMgSURFTlRJVFki OworCX0KKworCWlkZW50b2JqID0gbmV3X29ianRyZWUoaWRlbnRmbXQpOworCisJaWYgKGlkZW50 aXR5ID09IEFUVFJJQlVURV9JREVOVElUWV9BTFdBWVMpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KGlkZW50b2JqLCBvYmpmbXQsICJBTFdBWVMiKTsKKwllbHNlIGlmIChpZGVudGl0eSA9PSAgQVRU UklCVVRFX0lERU5USVRZX0JZX0RFRkFVTFQpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGlkZW50 b2JqLCBvYmpmbXQsICJCWSBERUZBVUxUIik7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3Qo aWRlbnRvYmosICJwcmVzZW50IiwgZmFsc2UpOworCisJYXBwZW5kX29iamVjdF9vYmplY3QoY29s dW1uLCAiJXtpZGVudGl0eV90eXBlfXMiLCBpZGVudG9iaik7CisKKwlyZWwgPSB0YWJsZV9vcGVu KFNlcXVlbmNlUmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisJc2VxdHVwbGUgPSBTZWFy Y2hTeXNDYWNoZUNvcHkxKFNFUVJFTElELCBzZXFyZWxpZCk7CisJaWYgKCFIZWFwVHVwbGVJc1Zh bGlkKHNlcXR1cGxlKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHNl cXVlbmNlICV1IiwKKwkJCSBzZXFyZWxpZCk7CisKKwlzZXFmb3JtID0gKEZvcm1fcGdfc2VxdWVu Y2UpIEdFVFNUUlVDVChzZXF0dXBsZSk7CisJc2VxZGF0YSA9IGdldF9zZXF1ZW5jZV92YWx1ZXMo c2VxcmVsaWQpOworCisJLyogRGVmaW5pdGlvbiBlbGVtZW50cyAqLworCWVsZW1zID0gbGFwcGVu ZChlbGVtcywgZGVwYXJzZV9TZXFfQ2FjaGUoTlVMTCwgc2VxZm9ybSwgYWx0ZXJfdGFibGUpKTsK KwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX0N5Y2xlKE5VTEwsIHNlcWZvcm0s IGFsdGVyX3RhYmxlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9JbmNy ZW1lbnRCeShOVUxMLCBzZXFmb3JtLCBhbHRlcl90YWJsZSkpOworCWVsZW1zID0gbGFwcGVuZChl bGVtcywgZGVwYXJzZV9TZXFfTWludmFsdWUoTlVMTCwgc2VxZm9ybSwgYWx0ZXJfdGFibGUpKTsK KwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX01heHZhbHVlKE5VTEwsIHNlcWZv cm0sIGFsdGVyX3RhYmxlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9T dGFydHdpdGgoTlVMTCwgc2VxZm9ybSwgYWx0ZXJfdGFibGUpKTsKKwllbGVtcyA9IGxhcHBlbmQo ZWxlbXMsIGRlcGFyc2VfU2VxX1Jlc3RhcnQoTlVMTCwgc2VxZGF0YSkpOworCS8qIFdlIHB1cnBv c2VmdWxseSBkbyBub3QgZW1pdCBPV05FRCBCWSBoZXJlICovCisKKwlpZiAoYWx0ZXJfdGFibGUp CisJCWFwcGVuZF9hcnJheV9vYmplY3QoY29sdW1uLCAiJXtzZXFfZGVmaW5pdGlvbjogfXMiLCBl bGVtcyk7CisJZWxzZQorCQlhcHBlbmRfYXJyYXlfb2JqZWN0KGNvbHVtbiwgIiggJXtzZXFfZGVm aW5pdGlvbjogfXMgKSIsIGVsZW1zKTsKKworCXRhYmxlX2Nsb3NlKHJlbCwgUm93RXhjbHVzaXZl TG9jayk7CisKKwlyZXR1cm4gY29sdW1uOworfQorCisvKgorICogLi4uIEFMVEVSIENPTFVNTiAu Li4gU0VUL1JFU0VUICguLi4pCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ29sdW1u U2V0T3B0aW9ucyhBbHRlclRhYmxlQ21kICpzdWJjbWQpCit7CisJTGlzdAkgICAqc2V0cyA9IE5J TDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCU9ialRyZWUJICAgKmNvbHNldDsKKwljaGFyCSAgICpm bXQ7CisJYm9vbAkJaXNfcmVzZXQgPSBzdWJjbWQtPnN1YnR5cGUgPT0gQVRfUmVzZXRPcHRpb25z OworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICogQUxURVIgQ09MVU1OICV7Y29s dW1ufUkgUkVTRVR8U0VUICgle29wdGlvbnM6LCB9cykKKwkgKi8KKwlpZiAoaXNfcmVzZXQpCisJ CWZtdCA9ICJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBSRVNFVCAiOworCWVsc2UKKwkJZm10ID0g IkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIFNFVCAiOworCisJY29sc2V0ID0gbmV3X29ianRyZWVf VkEoZm10LCAxLCAiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKworCWZv cmVhY2goY2VsbCwgKExpc3QgKikgc3ViY21kLT5kZWYpCisJeworCQlEZWZFbGVtCSAgICplbGVt OworCQlPYmpUcmVlCSAgICpzZXQ7CisKKwkJZWxlbSA9IChEZWZFbGVtICopIGxmaXJzdChjZWxs KTsKKwkJc2V0ID0gZGVwYXJzZV9EZWZFbGVtKGVsZW0sIGlzX3Jlc2V0KTsKKwkJc2V0cyA9IGxh cHBlbmQoc2V0cywgbmV3X29iamVjdF9vYmplY3Qoc2V0KSk7CisJfQorCisJQXNzZXJ0KHNldHMp OworCWFwcGVuZF9hcnJheV9vYmplY3QoY29sc2V0LCAiKCV7b3B0aW9uczosIH1zKSIsIHNldHMp OworCisJcmV0dXJuIGNvbHNldDsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIENSRUFURSBET01B SU4KKyAqCisgKiBHaXZlbiBhIGZ1bmN0aW9uIE9JRCBhbmQgdGhlIHBhcnNldHJlZSB0aGF0IGNy ZWF0ZWQgaXQsIHJldHVybiB0aGUgSlNPTgorICogYmxvYiByZXByZXNlbnRpbmcgdGhlIGNyZWF0 aW9uIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlRG9tYWlu KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCU9ialRyZWUJICAgKmNyZWF0ZURv bWFpbjsKKwlPYmpUcmVlCSAgICp0bXBvYmo7CisJSGVhcFR1cGxlCXR5cFR1cDsKKwlGb3JtX3Bn X3R5cGUgdHlwRm9ybTsKKwlMaXN0CSAgICpjb25zdHJhaW50czsKKworCXR5cFR1cCA9IFNlYXJj aFN5c0NhY2hlMShUWVBFT0lELCBvYmplY3RJZCk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR5 cFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBkb21haW4gd2l0 aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJdHlwRm9ybSA9IChGb3JtX3BnX3R5cGUpIEdFVFNUUlVD VCh0eXBUdXApOworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICogQ1JFQVRFIERP TUFJTiAle2lkZW50aXR5fUQgQVMgJXt0eXBlfVQgJXtub3RfbnVsbH1zICV7Y29uc3RyYWludHN9 cworCSAqICV7Y29sbGF0aW9ufXMKKwkgKi8KKwljcmVhdGVEb21haW4gPSBuZXdfb2JqdHJlZSgi Q1JFQVRFIik7CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVEb21haW4sCisJCQkJCQkg IkRPTUFJTiAle2lkZW50aXR5fUQgQVMiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZV9pZChUeXBlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgb2JqZWN0SWQpKTsKKwlhcHBlbmRf b2JqZWN0X29iamVjdChjcmVhdGVEb21haW4sCisJCQkJCQkgIiV7dHlwZX1UIiwKKwkJCQkJCSBu ZXdfb2JqdHJlZV9mb3JfdHlwZSh0eXBGb3JtLT50eXBiYXNldHlwZSwgdHlwRm9ybS0+dHlwdHlw bW9kKSk7CisKKwlpZiAodHlwRm9ybS0+dHlwbm90bnVsbCkKKwkJYXBwZW5kX3N0cmluZ19vYmpl Y3QoY3JlYXRlRG9tYWluLCAiJXtub3RfbnVsbH1zIiwgIk5PVCBOVUxMIik7CisJZWxzZQorCQlh cHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVEb21haW4sICIle25vdF9udWxsfXMiLCAiIik7CisK Kwljb25zdHJhaW50cyA9IG9idGFpbkNvbnN0cmFpbnRzKE5JTCwgSW52YWxpZE9pZCwgb2JqZWN0 SWQpOworCWlmIChjb25zdHJhaW50cyA9PSBOSUwpCisJeworCQl0bXBvYmogPSBuZXdfb2JqdHJl ZSgiIik7CisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOwor CX0KKwllbHNlCisJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCIle2VsZW1lbnRzOiwgfXMiLCAx LAorCQkJCQkJCSAiZWxlbWVudHMiLCBPYmpUeXBlQXJyYXksIGNvbnN0cmFpbnRzKTsKKwlhcHBl bmRfb2JqZWN0X29iamVjdChjcmVhdGVEb21haW4sICIle2NvbnN0cmFpbnRzfXMiLCB0bXBvYmop OworCisJdG1wb2JqID0gbmV3X29ianRyZWUoIkNPTExBVEUiKTsKKwlpZiAoT2lkSXNWYWxpZCh0 eXBGb3JtLT50eXBjb2xsYXRpb24pKQorCXsKKwkJT2JqVHJlZSAqY29sbG5hbWU7CisKKwkJY29s bG5hbWUgPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoQ29sbGF0aW9uUmVsYXRpb25JZCwK KwkJCQkJCQkJCQkJICAgdHlwRm9ybS0+dHlwY29sbGF0aW9uKTsKKwkJYXBwZW5kX29iamVjdF9v YmplY3QodG1wb2JqLCAiJXtuYW1lfUQiLCBjb2xsbmFtZSk7CisJfQorCWVsc2UKKwkJYXBwZW5k X2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJYXBwZW5kX29iamVjdF9v YmplY3QoY3JlYXRlRG9tYWluLCAiJXtjb2xsYXRpb259cyIsIHRtcG9iaik7CisKKwlSZWxlYXNl U3lzQ2FjaGUodHlwVHVwKTsKKworCXJldHVybiBjcmVhdGVEb21haW47Cit9CisKKy8qCisgKiBE ZXBhcnNlIGEgQ3JlYXRlRnVuY3Rpb25TdG10IChDUkVBVEUgRlVOQ1RJT04pCisgKgorICogR2l2 ZW4gYSBmdW5jdGlvbiBPSUQgYW5kIHRoZSBwYXJzZXRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1 cm4gdGhlIEpTT04KKyAqIGJsb2IgcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgor ICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZUZ1bmN0aW9uKE9pZCBvYmplY3RJ ZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZUZ1bmN0aW9uU3RtdCAqbm9kZSA9IChDcmVh dGVGdW5jdGlvblN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUJICAgKmNyZWF0ZUZ1bmM7CisJ T2JqVHJlZQkgICAqdG1wb2JqOworCURhdHVtCQl0bXBkYXR1bTsKKwljaGFyCSAgICpzb3VyY2U7 CisJY2hhcgkgICAqcHJvYmluOworCUxpc3QJICAgKnBhcmFtczsKKwlMaXN0CSAgICpkZWZhdWx0 czsKKwlMaXN0CSAgICpzZXRzID0gTklMOworCUxpc3QJICAgKnR5cGVzID0gTklMOworCUxpc3RD ZWxsICAgKmNlbGw7CisJTGlzdENlbGwgICAqY3VyZGVmOworCUxpc3RDZWxsICAgKnRhYmxlX3Bh cmFtcyA9IE5VTEw7CisJSGVhcFR1cGxlCXByb2NUdXA7CisJRm9ybV9wZ19wcm9jIHByb2NGb3Jt OworCUhlYXBUdXBsZQlsYW5nVHVwOworCU9pZAkJICAgKnR5cGFycmF5OworCU9pZAkJICAgKnRy ZnR5cGVzOworCUZvcm1fcGdfbGFuZ3VhZ2UgbGFuZ0Zvcm07CisJaW50CQkJaTsKKwlpbnQJCQl0 eXBudW07CisJaW50CQkJbnR5cGVzOworCWJvb2wJCWlzbnVsbDsKKwlib29sCQlpc2Z1bmN0aW9u OworCisJLyogR2V0IHRoZSBwZ19wcm9jIHR1cGxlICovCisJcHJvY1R1cCA9IFNlYXJjaFN5c0Nh Y2hlMShQUk9DT0lELCBvYmplY3RJZCk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHByb2NUdXAp KQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWx1cmUgZm9yIGZ1bmN0aW9uIHdpdGgg T0lEICV1IiwKKwkJCSBvYmplY3RJZCk7CisJcHJvY0Zvcm0gPSAoRm9ybV9wZ19wcm9jKSBHRVRT VFJVQ1QocHJvY1R1cCk7CisKKwkvKiBHZXQgdGhlIGNvcnJlc3BvbmRpbmcgcGdfbGFuZ3VhZ2Ug dHVwbGUgKi8KKwlsYW5nVHVwID0gU2VhcmNoU3lzQ2FjaGUxKExBTkdPSUQsIHByb2NGb3JtLT5w cm9sYW5nKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQobGFuZ1R1cCkpCisJCWVsb2coRVJST1Is ICJjYWNoZSBsb29rdXAgZmFpbHVyZSBmb3IgbGFuZ3VhZ2Ugd2l0aCBPSUQgJXUiLAorCQkJIHBy b2NGb3JtLT5wcm9sYW5nKTsKKwlsYW5nRm9ybSA9IChGb3JtX3BnX2xhbmd1YWdlKSBHRVRTVFJV Q1QobGFuZ1R1cCk7CisKKwkvKgorCSAqIERldGVybWluZSB1c2VmdWwgdmFsdWVzIGZvciBwcm9z cmMgYW5kIHByb2Jpbi4gIFdlIGNvcGUgd2l0aCBwcm9iaW4KKwkgKiBiZWluZyBlaXRoZXIgTlVM TCBvciAiLSIsIGJ1dCBwcm9zcmMgbXVzdCBoYXZlIGEgdmFsaWQgdmFsdWUuCisJICovCisJdG1w ZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoUFJPQ09JRCwgcHJvY1R1cCwKKwkJCQkJCQkgICBBbnVt X3BnX3Byb2NfcHJvc3JjLCAmaXNudWxsKTsKKwlpZiAoaXNudWxsKQorCQllbG9nKEVSUk9SLCAi bnVsbCBwcm9zcmMgaW4gZnVuY3Rpb24gd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJc291cmNl ID0gVGV4dERhdHVtR2V0Q1N0cmluZyh0bXBkYXR1bSk7CisKKwkvKiBEZXRlcm1pbmUgYSB1c2Vm dWwgdmFsdWUgZm9yIHByb2JpbiAqLworCXRtcGRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKFBST0NP SUQsIHByb2NUdXAsCisJCQkJCQkJICAgQW51bV9wZ19wcm9jX3Byb2JpbiwgJmlzbnVsbCk7CisJ aWYgKGlzbnVsbCkKKwkJcHJvYmluID0gTlVMTDsKKwllbHNlCisJeworCQlwcm9iaW4gPSBUZXh0 RGF0dW1HZXRDU3RyaW5nKHRtcGRhdHVtKTsKKwkJaWYgKHByb2JpblswXSA9PSAnXDAnIHx8IHN0 cmNtcChwcm9iaW4sICItIikgPT0gMCkKKwkJCXByb2JpbiA9IE5VTEw7CisJfQorCisJLyoKKwkg KiBWZXJib3NlIHN5bnRheAorCSAqCisJICogQ1JFQVRFICV7b3JfcmVwbGFjZX1zIEZVTkNUSU9O ICV7c2lnbmF0dXJlfXMgUkVUVVJOUyAle3JldHVybl90eXBlfXMKKwkgKiBMQU5HVUFHRSAle3Ry YW5zZm9ybV90eXBlfXMgJXtsYW5ndWFnZX1JICV7d2luZG93fXMgJXt2b2xhdGlsaXR5fXMKKwkg KiAle3BhcmFsbGVsX3NhZmV0eX1zICV7bGVha3Byb29mfXMgJXtzdHJpY3R9cyAle3NlY3VyaXR5 X2RlZmluZXJ9cworCSAqICV7Y29zdH1zICV7cm93c31zICV7c3VwcG9ydH1zICV7c2V0X29wdGlv bnM6IH1zIEFTICV7b2JqZmlsZX1MLAorCSAqICV7c3ltYm9sfUwKKwkgKi8KKwljcmVhdGVGdW5j ID0gbmV3X29ianRyZWUoIkNSRUFURSIpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRl RnVuYywgIiV7b3JfcmVwbGFjZX1zIiwKKwkJCQkJCSBub2RlLT5yZXBsYWNlID8gIk9SIFJFUExB Q0UiIDogIiIpOworCisJLyoKKwkgKiBUbyBjb25zdHJ1Y3QgdGhlIGFyZ3VtZW50cyBhcnJheSwg ZXh0cmFjdCB0aGUgdHlwZSBPSURzIGZyb20gdGhlCisJICogZnVuY3Rpb24ncyBwZ19wcm9jIGVu dHJ5LiAgSWYgcHJvbmFyZ3MgZXF1YWxzIHRoZSBwYXJhbWV0ZXIgbGlzdCBsZW5ndGgsCisJICog dGhlcmUgYXJlIG5vIE9VVCBwYXJhbWV0ZXJzIGFuZCB0aHVzIHdlIGNhbiBleHRyYWN0IHRoZSB0 eXBlIE9JRCBmcm9tCisJICogcHJvYXJndHlwZXM7IG90aGVyd2lzZSB3ZSBuZWVkIHRvIGRlY29k ZSBwcm9hbGxhcmd0eXBlcywgd2hpY2ggaXMKKwkgKiBhIGJpdCBtb3JlIGludm9sdmVkLgorCSAq LworCXR5cGFycmF5ID0gcGFsbG9jKGxpc3RfbGVuZ3RoKG5vZGUtPnBhcmFtZXRlcnMpICogc2l6 ZW9mKE9pZCkpOworCWlmIChsaXN0X2xlbmd0aChub2RlLT5wYXJhbWV0ZXJzKSA+IHByb2NGb3Jt LT5wcm9uYXJncykKKwl7CisJCWJvb2wJaXNudWxsOworCQlEYXR1bQlhbGx0eXBlczsKKwkJRGF0 dW0gICp2YWx1ZXM7CisJCWJvb2wgICAqbnVsbHM7CisJCWludAkJbmVsZW1zOworCisJCWFsbHR5 cGVzID0gU3lzQ2FjaGVHZXRBdHRyKFBST0NPSUQsIHByb2NUdXAsCisJCQkJCQkJCSAgIEFudW1f cGdfcHJvY19wcm9hbGxhcmd0eXBlcywgJmlzbnVsbCk7CisJCWlmIChpc251bGwpCisJCQllbG9n KEVSUk9SLCAiTlVMTCBwcm9hbGxhcmd0eXBlcywgYnV0IG1vcmUgcGFyYW1ldGVycyB0aGFuIGFy Z3MiKTsKKwkJZGVjb25zdHJ1Y3RfYXJyYXkoRGF0dW1HZXRBcnJheVR5cGVQKGFsbHR5cGVzKSwK KwkJCQkJCSAgT0lET0lELCA0LCAndCcsICdpJywKKwkJCQkJCSAgJnZhbHVlcywgJm51bGxzLCAm bmVsZW1zKTsKKwkJaWYgKG5lbGVtcyAhPSBsaXN0X2xlbmd0aChub2RlLT5wYXJhbWV0ZXJzKSkK KwkJCWVsb2coRVJST1IsICJtaXNtYXRjaGVkIHByb2FsbGFyZ2F0eXBlcyIpOworCQlmb3IgKGkg PSAwOyBpIDwgbGlzdF9sZW5ndGgobm9kZS0+cGFyYW1ldGVycyk7IGkrKykKKwkJCXR5cGFycmF5 W2ldID0gdmFsdWVzW2ldOworCX0KKwllbHNlCisJeworCQlmb3IgKGkgPSAwOyBpIDwgbGlzdF9s ZW5ndGgobm9kZS0+cGFyYW1ldGVycyk7IGkrKykKKwkJCSB0eXBhcnJheVtpXSA9IHByb2NGb3Jt LT5wcm9hcmd0eXBlcy52YWx1ZXNbaV07CisJfQorCisJLyoKKwkgKiBJZiB0aGVyZSBhcmUgYW55 IGRlZmF1bHQgZXhwcmVzc2lvbnMsIHdlIHJlYWQgdGhlIGRlcGFyc2VkIGV4cHJlc3Npb24gYXMK KwkgKiBhIGxpc3Qgc28gdGhhdCB3ZSBjYW4gYXR0YWNoIHRoZW0gdG8gZWFjaCBhcmd1bWVudC4K KwkgKi8KKwl0bXBkYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihQUk9DT0lELCBwcm9jVHVwLAorCQkJ CQkJCSAgIEFudW1fcGdfcHJvY19wcm9hcmdkZWZhdWx0cywgJmlzbnVsbCk7CisJaWYgKCFpc251 bGwpCisJeworCQlkZWZhdWx0cyA9IEZ1bmN0aW9uR2V0RGVmYXVsdHMoRGF0dW1HZXRUZXh0UCh0 bXBkYXR1bSkpOworCQljdXJkZWYgPSBsaXN0X2hlYWQoZGVmYXVsdHMpOworCX0KKwllbHNlCisJ eworCQlkZWZhdWx0cyA9IE5JTDsKKwkJY3VyZGVmID0gTlVMTDsKKwl9CisKKwkvKgorCSAqIE5v dyBpdGVyYXRlIG92ZXIgZWFjaCBwYXJhbWV0ZXIgaW4gdGhlIHBhcnNldHJlZSB0byBjcmVhdGUg dGhlCisJICogcGFyYW1ldGVycyBhcnJheS4KKwkgKi8KKwlwYXJhbXMgPSBOSUw7CisJdHlwbnVt ID0gMDsKKwlmb3JlYWNoKGNlbGwsIG5vZGUtPnBhcmFtZXRlcnMpCisJeworCQlGdW5jdGlvblBh cmFtZXRlciAqcGFyYW0gPSAoRnVuY3Rpb25QYXJhbWV0ZXIgKikgbGZpcnN0KGNlbGwpOworCQlP YmpUcmVlCSAgICpwYXJhbW9iajsKKwkJT2JqVHJlZQkgICAqZGVmYXVsdHZhbDsKKwkJT2JqVHJl ZQkgICAqbmFtZTsKKworCQkvKgorCQkgKiBBIFBBUkFNX1RBQkxFIHBhcmFtZXRlciBpbmRpY2F0 ZXMgZW5kIG9mIGlucHV0IGFyZ3VtZW50czsgdGhlCisJCSAqIGZvbGxvd2luZyBwYXJhbWV0ZXJz IGFyZSBwYXJ0IG9mIHRoZSByZXR1cm4gdHlwZS4gIFdlIGlnbm9yZSB0aGVtCisJCSAqIGhlcmUs IGJ1dCBrZWVwIHRyYWNrIG9mIHRoZSBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBsaXN0IHNvIHRo YXQKKwkJICogd2UgY2FuIGVhc2lseSBwcm9kdWNlIHRoZSByZXR1cm4gdHlwZSBiZWxvdy4KKwkJ ICovCisJCWlmIChwYXJhbS0+bW9kZSA9PSBGVU5DX1BBUkFNX1RBQkxFKQorCQl7CisJCQl0YWJs ZV9wYXJhbXMgPSBjZWxsOworCQkJYnJlYWs7CisJCX0KKworCQkvKgorCQkgKiBWZXJib3NlIHN5 bnRheCBmb3IgcGFyYW1hdGVyOiAle21vZGV9cyAle25hbWV9cyAle3R5cGV9VCAle2RlZmF1bHR9 cworCQkgKgorCQkgKiBOb3RlIHRoYXQgJXtuYW1lfXMgaXMgYSBzdHJpbmcgaGVyZSwgbm90IGFu IGlkZW50aWZpZXI7IHRoZSByZWFzb24KKwkJICogZm9yIHRoaXMgaXMgdGhhdCBhbiBhYnNlbnQg cGFyYW1ldGVyIG5hbWUgbXVzdCBwcm9kdWNlIGFuIGVtcHR5CisJCSAqIHN0cmluZywgbm90ICIi LCB3aGljaCBpcyB3aGF0IHdvdWxkIGhhcHBlbiBpZiB3ZSB3ZXJlIHRvIHVzZQorCQkgKiAle25h bWV9SSBoZXJlLiAgU28gd2UgYWRkIGFub3RoZXIgbGV2ZWwgb2YgaW5kaXJlY3Rpb24gdG8gYWxs b3cgdXMKKwkJICogdG8gaW5qZWN0IGEgInByZXNlbnQiIHBhcmFtZXRlci4KKwkJICovCisJCXBh cmFtb2JqID0gbmV3X29ianRyZWUoIiIpOworCQlhcHBlbmRfc3RyaW5nX29iamVjdChwYXJhbW9i aiwgIiV7bW9kZX1zIiwKKwkJCQkJCQkgcGFyYW0tPm1vZGUgPT0gRlVOQ19QQVJBTV9JTiA/ICJJ TiIgOgorCQkJCQkJCSBwYXJhbS0+bW9kZSA9PSBGVU5DX1BBUkFNX09VVCA/ICJPVVQiIDoKKwkJ CQkJCQkgcGFyYW0tPm1vZGUgPT0gRlVOQ19QQVJBTV9JTk9VVCA/ICJJTk9VVCIgOgorCQkJCQkJ CSBwYXJhbS0+bW9kZSA9PSBGVU5DX1BBUkFNX1ZBUklBRElDID8gIlZBUklBRElDIiA6CisJCQkJ CQkJICJJTiIpOworCisJCS8qIE9wdGlvbmFsIHdob2xlc2FsZSBzdXBwcmVzc2lvbiBvZiAibmFt ZSIgb2NjdXJzIGhlcmUgKi8KKworCQluYW1lID0gbmV3X29ianRyZWUoIiIpOworCQlhcHBlbmRf c3RyaW5nX29iamVjdChuYW1lLCAiJXtuYW1lfUkiLAorCQkJCQkJCSBwYXJhbS0+bmFtZSA/IHBh cmFtLT5uYW1lIDogIk5VTEwiKTsKKworCQlhcHBlbmRfYm9vbF9vYmplY3QobmFtZSwgInByZXNl bnQiLAorCQkJCQkJICAgcGFyYW0tPm5hbWUgPyB0cnVlIDogZmFsc2UpOworCisJCWFwcGVuZF9v YmplY3Rfb2JqZWN0KHBhcmFtb2JqLCAiJXtuYW1lfXMiLCBuYW1lKTsKKworCQlkZWZhdWx0dmFs ID0gbmV3X29ianRyZWUoIkRFRkFVTFQiKTsKKwkJaWYgKFBvaW50ZXJJc1ZhbGlkKHBhcmFtLT5k ZWZleHByKSkKKwkJeworCQkJY2hhciAqZXhwcjsKKworCQkJaWYgKGN1cmRlZiA9PSBOVUxMKQor CQkJCWVsb2coRVJST1IsICJwcm9hcmdkZWZhdWx0cyBsaXN0IHRvbyBzaG9ydCIpOworCQkJZXhw ciA9IGxmaXJzdChjdXJkZWYpOworCisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChkZWZhdWx0dmFs LCAiJXt2YWx1ZX1zIiwgZXhwcik7CisJCQljdXJkZWYgPSBsbmV4dChkZWZhdWx0cywgY3VyZGVm KTsKKwkJfQorCQllbHNlCisJCQlhcHBlbmRfYm9vbF9vYmplY3QoZGVmYXVsdHZhbCwgInByZXNl bnQiLCBmYWxzZSk7CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocGFyYW1vYmosICIle3R5cGV9 VCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHR5cGFycmF5W3R5cG51bSsrXSwgLTEp KTsKKworCQlhcHBlbmRfb2JqZWN0X29iamVjdChwYXJhbW9iaiwgIiV7ZGVmYXVsdH1zIiwgZGVm YXVsdHZhbCk7CisKKwkJcGFyYW1zID0gbGFwcGVuZChwYXJhbXMsIG5ld19vYmplY3Rfb2JqZWN0 KHBhcmFtb2JqKSk7CisJfQorCisJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIiV7aWRlbnRpdHl9 RCIsIDEsCisJCQkJCQkgICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgIG5ld19v Ymp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJ CSAgb2JqZWN0SWQpKTsKKworCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRtcG9iaiwgIigiKTsKKwlh cHBlbmRfYXJyYXlfb2JqZWN0KHRtcG9iaiwgIiV7YXJndW1lbnRzOiwgfXMiLCBwYXJhbXMpOwor CWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRtcG9iaiwgIikiKTsKKworCWlzZnVuY3Rpb24gPSAocHJv Y0Zvcm0tPnByb2tpbmQgIT0gUFJPS0lORF9QUk9DRURVUkUpOworCisJaWYgKGlzZnVuY3Rpb24p CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZUZ1bmMsICJGVU5DVElPTiAle3NpZ25hdHVy ZX1zIiwgdG1wb2JqKTsKKwllbHNlCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZUZ1bmMs ICJQUk9DRURVUkUgJXtzaWduYXR1cmV9cyIsIHRtcG9iaik7CisKKwkvKgorCSAqIEEgcmV0dXJu IHR5cGUgY2FuIGFkb3B0IG9uZSBvZiB0d28gZm9ybXM6IGVpdGhlciBhIFtTRVRPRl0gc29tZV90 eXBlLCBvcgorCSAqIGEgVEFCTEUobGlzdC1vZi10eXBlcykuICBXZSBjYW4gdGVsbCB0aGUgc2Vj b25kIGZvcm0gYmVjYXVzZSB3ZSBzYXcgYQorCSAqIHRhYmxlIHBhcmFtIGFib3ZlIHdoaWxlIHNj YW5uaW5nIHRoZSBhcmd1bWVudCBsaXN0LgorCSAqLworCWlmICh0YWJsZV9wYXJhbXMgPT0gTlVM TCkKKwl7CisJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCIiLCAxLAorCQkJCQkJCSAicmV0dXJu X2Zvcm0iLCBPYmpUeXBlU3RyaW5nLCAicGxhaW4iKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3Qo dG1wb2JqLCAiJXtzZXRvZn1zIiwKKwkJCQkJCQkgcHJvY0Zvcm0tPnByb3JldHNldCA/ICJTRVRP RiIgOiAiIik7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7cmV0dHlwZX1UIiwK KwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUocHJvY0Zvcm0tPnByb3JldHR5cGUsIC0xKSk7 CisJfQorCWVsc2UKKwl7CisJCUxpc3QJICAgKnJldHR5cGVzID0gTklMOworCQlPYmpUcmVlCSAg ICpwYXJhbW9iajsKKworCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiVEFCTEUiLCAxLAorCQkJ CQkJCSAicmV0dXJuX2Zvcm0iLCBPYmpUeXBlU3RyaW5nLCAidGFibGUiKTsKKwkJZm9yICg7IHRh YmxlX3BhcmFtcyAhPSBOVUxMOyB0YWJsZV9wYXJhbXMgPSBsbmV4dChub2RlLT5wYXJhbWV0ZXJz LCB0YWJsZV9wYXJhbXMpKQorCQl7CisJCQlGdW5jdGlvblBhcmFtZXRlciAqcGFyYW0gPSBsZmly c3QodGFibGVfcGFyYW1zKTsKKworCQkJcGFyYW1vYmogPSBuZXdfb2JqdHJlZSgiIik7CisJCQlh cHBlbmRfc3RyaW5nX29iamVjdChwYXJhbW9iaiwgIiV7bmFtZX1JIiwgcGFyYW0tPm5hbWUpOwor CQkJYXBwZW5kX29iamVjdF9vYmplY3QocGFyYW1vYmosICIle3R5cGV9VCIsCisJCQkJCQkJCSBu ZXdfb2JqdHJlZV9mb3JfdHlwZSh0eXBhcnJheVt0eXBudW0rK10sIC0xKSk7CisJCQlyZXR0eXBl cyA9IGxhcHBlbmQocmV0dHlwZXMsIG5ld19vYmplY3Rfb2JqZWN0KHBhcmFtb2JqKSk7CisJCX0K KworCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcG9iaiwgIigle3JldHR5cGVzOiwgfXMpIiwgcmV0 dHlwZXMpOworCX0KKworCWlmIChpc2Z1bmN0aW9uKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdChj cmVhdGVGdW5jLCAiUkVUVVJOUyAle3JldHVybl90eXBlfXMiLCB0bXBvYmopOworCisJLyogVFJB TlNGT1JNIEZPUiBUWVBFICovCisJdG1wb2JqID0gbmV3X29ianRyZWUoIlRSQU5TRk9STSIpOwor CisJbnR5cGVzID0gZ2V0X2Z1bmNfdHJmdHlwZXMocHJvY1R1cCwgJnRyZnR5cGVzKTsKKwlmb3Ig KGkgPSAwOyBpIDwgbnR5cGVzOyBpKyspCisJeworCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgi Rk9SIFRZUEUgJXt0eXBlfVQiLCAxLAorCQkJCQkJCSAidHlwZSIsIE9ialR5cGVPYmplY3QsCisJ CQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHRyZnR5cGVzW2ldLCAtMSkpOworCQl0eXBlcyA9 IGxhcHBlbmQodHlwZXMsIHRtcG9iaik7CisJfQorCisJaWYgKHR5cGVzKQorCQlhcHBlbmRfYXJy YXlfb2JqZWN0KHRtcG9iaiwgIiV7Zm9yX3R5cGU6LCB9cyIsIHR5cGVzKTsKKwllbHNlCisJCWFw cGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCisJYXBwZW5kX29i amVjdF9vYmplY3QoY3JlYXRlRnVuYywgIiV7dHJhbnNmb3JtX3R5cGV9cyIsIHRtcG9iaik7CisK KwlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVGdW5jLCAiTEFOR1VBR0UgJXtsYW5ndWFnZX1J IiwKKwkJCQkJCSBOYW1lU3RyKGxhbmdGb3JtLT5sYW5uYW1lKSk7CisKKwlpZiAoaXNmdW5jdGlv bikKKwl7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUZ1bmMsICIle3dpbmRvd31zIiwK KwkJCQkJCQkgcHJvY0Zvcm0tPnByb2tpbmQgPT0gUFJPS0lORF9XSU5ET1cgPyAiV0lORE9XIiA6 ICIiKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlRnVuYywgIiV7dm9sYXRpbGl0eX1z IiwKKwkJCQkJCQkgcHJvY0Zvcm0tPnByb3ZvbGF0aWxlID09IFBST1ZPTEFUSUxFX1ZPTEFUSUxF ID8KKwkJCQkJCQkgIlZPTEFUSUxFIiA6CisJCQkJCQkJIHByb2NGb3JtLT5wcm92b2xhdGlsZSA9 PSBQUk9WT0xBVElMRV9TVEFCTEUgPworCQkJCQkJCSAiU1RBQkxFIiA6ICJJTU1VVEFCTEUiKTsK KworCQlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVGdW5jLCAiJXtwYXJhbGxlbF9zYWZldHl9 cyIsCisJCQkJCQkJIHByb2NGb3JtLT5wcm9wYXJhbGxlbCA9PSBQUk9QQVJBTExFTF9TQUZFID8K KwkJCQkJCQkgIlBBUkFMTEVMIFNBRkUiIDoKKwkJCQkJCQkgcHJvY0Zvcm0tPnByb3BhcmFsbGVs ID09IFBST1BBUkFMTEVMX1JFU1RSSUNURUQgPworCQkJCQkJCSAiUEFSQUxMRUwgUkVTVFJJQ1RF RCIgOiAiUEFSQUxMRUwgVU5TQUZFIik7CisKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRl RnVuYywgIiV7bGVha3Byb29mfXMiLAorCQkJCQkJCSBwcm9jRm9ybS0+cHJvbGVha3Byb29mID8g IkxFQUtQUk9PRiIgOiAiIik7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUZ1bmMsICIl e3N0cmljdH1zIiwKKwkJCQkJCQkgcHJvY0Zvcm0tPnByb2lzc3RyaWN0ID8KKwkJCQkJCQkgIlJF VFVSTlMgTlVMTCBPTiBOVUxMIElOUFVUIiA6CisJCQkJCQkJICJDQUxMRUQgT04gTlVMTCBJTlBV VCIpOworCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUZ1bmMsICIle3NlY3VyaXR5X2Rl ZmluZXJ9cyIsCisJCQkJCQkJIHByb2NGb3JtLT5wcm9zZWNkZWYgPworCQkJCQkJCSAiU0VDVVJJ VFkgREVGSU5FUiIgOiAiU0VDVVJJVFkgSU5WT0tFUiIpOworCisJCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KGNyZWF0ZUZ1bmMsICIle2Nvc3R9cyIsCisJCQkJCQkJIG5ld19vYmp0cmVlX1ZBKCJDT1NU ICV7Y29zdH1uIiwgMSwKKwkJCQkJCQkJCQkJImNvc3QiLCBPYmpUeXBlRmxvYXQsCisJCQkJCQkJ CQkJCXByb2NGb3JtLT5wcm9jb3N0KSk7CisKKwkJdG1wb2JqID0gbmV3X29ianRyZWUoIlJPV1Mi KTsKKwkJaWYgKHByb2NGb3JtLT5wcm9yb3dzID09IDApCisJCQlhcHBlbmRfYm9vbF9vYmplY3Qo dG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwkJZWxzZQorCQkJYXBwZW5kX2Zsb2F0X29iamVj dCh0bXBvYmosICIle3Jvd3N9biIsIHByb2NGb3JtLT5wcm9yb3dzKTsKKwkJYXBwZW5kX29iamVj dF9vYmplY3QoY3JlYXRlRnVuYywgIiV7cm93c31zIiwgdG1wb2JqKTsKKworCQl0bXBvYmogPSBu ZXdfb2JqdHJlZSgiU1VQUE9SVCAle25hbWV9cyIpOworCQlpZiAocHJvY0Zvcm0tPnByb3N1cHBv cnQpCisJCXsKKwkJCU9pZAkJCWFyZ3R5cGVzWzFdOworCisJCQkvKgorCQkJICogV2Ugc2hvdWxk IHF1YWxpZnkgdGhlIHN1cHBvcnQgZnVuY3Rpb24ncyBuYW1lIGlmIGl0IHdvdWxkbid0IGJlCisJ CQkgKiByZXNvbHZlZCBieSBsb29rdXAgaW4gdGhlIGN1cnJlbnQgc2VhcmNoIHBhdGguCisJCQkg Ki8KKwkJCWFyZ3R5cGVzWzBdID0gSU5URVJOQUxPSUQ7CisJCQlhcHBlbmRfc3RyaW5nX29iamVj dCh0bXBvYmosICIle25hbWV9cyIsCisJCQkJCQkJCSBnZW5lcmF0ZV9mdW5jdGlvbl9uYW1lKHBy b2NGb3JtLT5wcm9zdXBwb3J0LCAxLAorCQkJCQkJCQkJCQkJCQlOSUwsIGFyZ3R5cGVzLAorCQkJ CQkJCQkJCQkJCQlmYWxzZSwgTlVMTCwKKwkJCQkJCQkJCQkJCQkJRVhQUl9LSU5EX05PTkUpKTsK KwkJfQorCQllbHNlCisJCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZh bHNlKTsKKworCQlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVGdW5jLCAiJXtzdXBwb3J0fXMi LCB0bXBvYmopOworCX0KKworCWZvcmVhY2goY2VsbCwgbm9kZS0+b3B0aW9ucykKKwl7CisJCURl ZkVsZW0JKmRlZmVsID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCQlPYmpUcmVlCSAgICp0 bXBvYmo7CisKKwkJaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInNldCIpID09IDApCisJCXsK KwkJCVZhcmlhYmxlU2V0U3RtdCAqc3N0bXQgPSAoVmFyaWFibGVTZXRTdG10ICopIGRlZmVsLT5h cmc7CisJCQljaGFyICp2YWx1ZSA9IEV4dHJhY3RTZXRWYXJpYWJsZUFyZ3Moc3N0bXQpOworCisJ CQl0bXBvYmogPSBkZXBhcnNlX0Z1bmN0aW9uU2V0KHNzdG10LT5raW5kLCBzc3RtdC0+bmFtZSwg dmFsdWUpOworCQkJc2V0cyA9IGxhcHBlbmQoc2V0cywgbmV3X29iamVjdF9vYmplY3QodG1wb2Jq KSk7CisJCX0KKwl9CisJYXBwZW5kX2FycmF5X29iamVjdChjcmVhdGVGdW5jLCAiJXtzZXRfb3B0 aW9uczogfXMiLCBzZXRzKTsKKworCS8qIEFkZCB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbiAqLwor CSh2b2lkKSBTeXNDYWNoZUdldEF0dHIoUFJPQ09JRCwgcHJvY1R1cCwgQW51bV9wZ19wcm9jX3By b3NxbGJvZHksICZpc251bGwpOworCWlmIChwcm9jRm9ybS0+cHJvbGFuZyA9PSBTUUxsYW5ndWFn ZUlkICYmICFpc251bGwpCisJeworCQlTdHJpbmdJbmZvRGF0YSBidWY7CisKKwkJaW5pdFN0cmlu Z0luZm8oJmJ1Zik7CisJCXByaW50X2Z1bmN0aW9uX3NxbGJvZHkoJmJ1ZiwgcHJvY1R1cCk7CisK KwkJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlRnVuYywgIiV7ZGVmaW5pdGlvbn1zIiwgYnVm LmRhdGEpOworCX0KKwllbHNlIGlmIChwcm9iaW4gPT0gTlVMTCkKKwl7CisJCWFwcGVuZF9zdHJp bmdfb2JqZWN0KGNyZWF0ZUZ1bmMsICJBUyAle2RlZmluaXRpb259TCIsCisJCQkJCQkJIHNvdXJj ZSk7CisJfQorCWVsc2UKKwl7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUZ1bmMsICJB UyAle29iamZpbGV9TCIsIHByb2Jpbik7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUZ1 bmMsICIsICV7c3ltYm9sfUwiLCBzb3VyY2UpOworCX0KKworCVJlbGVhc2VTeXNDYWNoZShsYW5n VHVwKTsKKwlSZWxlYXNlU3lzQ2FjaGUocHJvY1R1cCk7CisKKwlyZXR1cm4gY3JlYXRlRnVuYzsK K30KKworLyoKKyAqIERlcGFyc2UgYSBDUkVBVEUgT1BFUkFUT1IgQ0xBU1MgY29tbWFuZC4KKyAq Lworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVPcENsYXNzU3RtdChDb2xsZWN0ZWRD b21tYW5kICpjbWQpCit7CisJT2lkCQkJb3Bjb2lkID0gY21kLT5kLmNyZWF0ZW9wYy5hZGRyZXNz Lm9iamVjdElkOworCUhlYXBUdXBsZSAgIG9wY1R1cDsKKwlIZWFwVHVwbGUgICBvcGZUdXA7CisJ Rm9ybV9wZ19vcGZhbWlseSBvcGZGb3JtOworCUZvcm1fcGdfb3BjbGFzcyBvcGNGb3JtOworCU9i alRyZWUJICAgKnN0bXQ7CisJT2JqVHJlZQkgICAqdG1wb2JqOworCUxpc3QJICAgKmxpc3Q7CisJ TGlzdENlbGwgICAqY2VsbDsKKworCS8qIERvbid0IGRlcGFyc2Ugc3FsIGNvbW1hbmRzIGdlbmVy YXRlZCB3aGlsZSBjcmVhdGluZyBleHRlbnNpb24gKi8KKwlpZiAoY21kLT5pbl9leHRlbnNpb24p CisJCXJldHVybiBOVUxMOworCisJb3BjVHVwID0gU2VhcmNoU3lzQ2FjaGUxKENMQU9JRCwgT2Jq ZWN0SWRHZXREYXR1bShvcGNvaWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQob3BjVHVwKSkK KwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9wY2xhc3Mgd2l0aCBPSUQg JXUiLCBvcGNvaWQpOworCW9wY0Zvcm0gPSAoRm9ybV9wZ19vcGNsYXNzKSBHRVRTVFJVQ1Qob3Bj VHVwKTsKKworCW9wZlR1cCA9IFNlYXJjaFN5c0NhY2hlMShPUEZBTUlMWU9JRCwgb3BjRm9ybS0+ b3BjZmFtaWx5KTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQob3BmVHVwKSkKKwkJZWxvZyhFUlJP UiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9wZXJhdG9yIGZhbWlseSB3aXRoIE9JRCAldSIs IG9wY0Zvcm0tPm9wY2ZhbWlseSk7CisJb3BmRm9ybSA9IChGb3JtX3BnX29wZmFtaWx5KSBHRVRT VFJVQ1Qob3BmVHVwKTsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIENSRUFU RSBPUEVSQVRPUiBDTEFTUyAle2lkZW50aXR5fUQgJXtkZWZhdWx0fXMgRk9SIFRZUEUgJXt0eXBl fVQgVVNJTkcKKwkgKiAle2FtbmFtZX1JICV7b3BmYW1pbHl9cyBBUyAle2l0ZW1zOiwgfXMKKwkg Ki8KKworCXN0bXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIE9QRVJBVE9SIENMQVNTICV7aWRl bnRpdHl9RCIsIDEsCisJCQkJCQkgICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkg IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShvcGNGb3JtLT5vcGNuYW1lc3BhY2UsCisJCQkJCQkJ CQkJCQkgICBOYW1lU3RyKG9wY0Zvcm0tPm9wY25hbWUpKSk7CisKKwkvKiBBZGQgdGhlIERFRkFV TFQgY2xhdXNlICovCisJYXBwZW5kX3N0cmluZ19vYmplY3Qoc3RtdCwgIiV7ZGVmYXVsdH1zIiwK KwkJCQkJCSBvcGNGb3JtLT5vcGNkZWZhdWx0ID8gIkRFRkFVTFQiIDogIiIpOworCisJLyogQWRk IHRoZSBGT1IgVFlQRSBjbGF1c2UgKi8KKwlhcHBlbmRfb2JqZWN0X29iamVjdChzdG10LCAiRk9S IFRZUEUgJXt0eXBlfVQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKG9wY0Zvcm0tPm9w Y2ludHlwZSwgLTEpKTsKKworCS8qIEFkZCB0aGUgVVNJTkcgY2xhdXNlICovCisJYXBwZW5kX3N0 cmluZ19vYmplY3Qoc3RtdCwgIlVTSU5HICV7YW1uYW1lfUkiLCBnZXRfYW1fbmFtZShvcGNGb3Jt LT5vcGNtZXRob2QpKTsKKworCS8qCisJICogQWRkIHRoZSBGQU1JTFkgY2xhdXNlOyBidXQgaWYg aXQgaGFzIHRoZSBzYW1lIG5hbWUgYW5kIG5hbWVzcGFjZSBhcyB0aGUKKwkgKiBvcGNsYXNzLCB0 aGVuIGhhdmUgaXQgZXhwYW5kIHRvIGVtcHR5LCBiZWNhdXNlIGl0IHdvdWxkIGNhdXNlIGEgZmFp bHVyZQorCSAqIGlmIHRoZSBvcGZhbWlseSB3YXMgY3JlYXRlZCBpbnRlcm5hbGx5LgorCSAqLwor CXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJGQU1JTFkgJXtvcGZhbWlseX1EIiwgMSwKKwkJCQkJ CSAib3BmYW1pbHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFs bmFtZShvcGZGb3JtLT5vcGZuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgIE5hbWVTdHIob3BmRm9y bS0+b3BmbmFtZSkpKTsKKworCWlmIChzdHJjbXAoTmFtZVN0cihvcGZGb3JtLT5vcGZuYW1lKSwg TmFtZVN0cihvcGNGb3JtLT5vcGNuYW1lKSkgPT0gMCAmJgorCQlvcGZGb3JtLT5vcGZuYW1lc3Bh Y2UgPT0gb3BjRm9ybS0+b3BjbmFtZXNwYWNlKQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2Jq LCAicHJlc2VudCIsIGZhbHNlKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHN0bXQsICIle29w ZmFtaWx5fXMiLCAgdG1wb2JqKTsKKworCS8qCisJICogQWRkIHRoZSBpbml0aWFsIGl0ZW0gbGlz dC4gIE5vdGUgd2UgYWx3YXlzIGFkZCB0aGUgU1RPUkFHRSBjbGF1c2UsIGV2ZW4KKwkgKiB3aGVu IGl0IGlzIGltcGxpY2l0IGluIHRoZSBvcmlnaW5hbCBjb21tYW5kLgorCSAqLworCXRtcG9iaiA9 IG5ld19vYmp0cmVlKCJTVE9SQUdFIik7CisJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAi JXt0eXBlfVQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKG9wY0Zvcm0tPm9wY2tleXR5 cGUgIT0gSW52YWxpZE9pZCA/CisJCQkJCQkJCQkJCSAgb3BjRm9ybS0+b3Bja2V5dHlwZSA6IG9w Y0Zvcm0tPm9wY2ludHlwZSwKKwkJCQkJCQkJCQkJICAtMSkpOworCWxpc3QgPSBsaXN0X21ha2Ux KG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCisJLyogQWRkIHRoZSBkZWNsYXJlZCBvcGVy YXRvcnMgKi8KKwlmb3JlYWNoKGNlbGwsIGNtZC0+ZC5jcmVhdGVvcGMub3BlcmF0b3JzKQorCXsK KwkJT3BGYW1pbHlNZW1iZXIgKm9wZXIgPSBsZmlyc3QoY2VsbCk7CisJCU9ialRyZWUJICAgKnRt cG9iajsKKworCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiT1BFUkFUT1IgJXtudW19biAle29w ZXJhdG9yfU8oJXtsdHlwZX1ULCAle3J0eXBlfVQpIiwKKwkJCQkJCQkgNCwKKwkJCQkJCQkgIm51 bSIsIE9ialR5cGVJbnRlZ2VyLCBvcGVyLT5udW1iZXIsCisJCQkJCQkJICJvcGVyYXRvciIsIE9i alR5cGVPYmplY3QsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChPcGVyYXRv clJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSBvcGVyLT5vYmplY3QpLAorCQkJCQkJCSJsdHlw ZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJbmV3X29ianRyZWVfZm9yX3R5cGUob3Blci0+bGVm dHR5cGUsIC0xKSwKKwkJCQkJCQkicnR5cGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCW5ld19v Ymp0cmVlX2Zvcl90eXBlKG9wZXItPnJpZ2h0dHlwZSwgLTEpKTsKKworCQkvKiBBZGQgdGhlIEZP UiBTRUFSQ0ggLyBGT1IgT1JERVIgQlkgY2xhdXNlICovCisJCWlmIChvcGVyLT5zb3J0ZmFtaWx5 ID09IEludmFsaWRPaWQpCisJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle3B1cnBv c2V9cyIsICJGT1IgU0VBUkNIIik7CisJCWVsc2UKKwkJeworCQkJT2JqVHJlZQkgICAqdG1wb2Jq MjsKKworCQkJdG1wb2JqMiA9IG5ld19vYmp0cmVlX1ZBKCJGT1IgT1JERVIgQlkgJXtvcGZhbWls eX1EIiwgMCk7CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmoyLCAib3BmYW1pbHkiLAor CQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKE9wZXJhdG9yRmFtaWx5UmVsYXRp b25JZCwKKwkJCQkJCQkJCQkJCQkJCSBvcGVyLT5zb3J0ZmFtaWx5KSk7CisJCQlhcHBlbmRfb2Jq ZWN0X29iamVjdCh0bXBvYmosICIle3B1cnBvc2V9cyIsIHRtcG9iajIpOworCQl9CisKKwkJbGlz dCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJfQorCisJLyog QWRkIHRoZSBkZWNsYXJlZCBzdXBwb3J0IGZ1bmN0aW9ucyAqLworCWZvcmVhY2goY2VsbCwgY21k LT5kLmNyZWF0ZW9wYy5wcm9jZWR1cmVzKQorCXsKKwkJT3BGYW1pbHlNZW1iZXIgKnByb2MgPSBs Zmlyc3QoY2VsbCk7CisJCU9ialRyZWUJICAgKnRtcG9iajsKKwkJSGVhcFR1cGxlCXByb2NUdXA7 CisJCUZvcm1fcGdfcHJvYyBwcm9jRm9ybTsKKwkJT2lkCQkgICAqcHJvYXJndHlwZXM7CisJCUxp c3QJICAgKmFyZ2xpc3QgPSBOSUw7CisJCWludAkJCWk7CisKKwkJcHJvY1R1cCA9IFNlYXJjaFN5 c0NhY2hlMShQUk9DT0lELCBPYmplY3RJZEdldERhdHVtKHByb2MtPm9iamVjdCkpOworCQlpZiAo IUhlYXBUdXBsZUlzVmFsaWQocHJvY1R1cCkpCisJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3Vw IGZhaWxlZCBmb3IgcHJvY2VkdXJlICV1IiwgcHJvYy0+b2JqZWN0KTsKKwkJcHJvY0Zvcm0gPSAo Rm9ybV9wZ19wcm9jKSBHRVRTVFJVQ1QocHJvY1R1cCk7CisKKwkJdG1wb2JqID0gbmV3X29ianRy ZWVfVkEoIkZVTkNUSU9OICV7bnVtfW4gKCV7bHR5cGV9VCwgJXtydHlwZX1UKSAle2Z1bmN0aW9u fUQiLAorCQkJCQkJCSA0LAorCQkJCQkJCSAibnVtIiwgT2JqVHlwZUludGVnZXIsIHByb2MtPm51 bWJlciwKKwkJCQkJCQkgImx0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkgbmV3X29ianRy ZWVfZm9yX3R5cGUocHJvYy0+bGVmdHR5cGUsIC0xKSwKKwkJCQkJCQkgInJ0eXBlIiwgT2JqVHlw ZU9iamVjdCwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUocHJvYy0+cmlnaHR0eXBlLCAt MSksCisJCQkJCQkJICJmdW5jdGlvbiIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJIG5ld19vYmp0 cmVlX2Zvcl9xdWFsbmFtZShwcm9jRm9ybS0+cHJvbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCSAg TmFtZVN0cihwcm9jRm9ybS0+cHJvbmFtZSkpKTsKKworCQlwcm9hcmd0eXBlcyA9IHByb2NGb3Jt LT5wcm9hcmd0eXBlcy52YWx1ZXM7CisJCWZvciAoaSA9IDA7IGkgPCBwcm9jRm9ybS0+cHJvbmFy Z3M7IGkrKykKKwkJeworCQkJT2JqVHJlZQkgICAqYXJnOworCisJCQlhcmcgPSBuZXdfb2JqdHJl ZV9mb3JfdHlwZShwcm9hcmd0eXBlc1tpXSwgLTEpOworCQkJYXJnbGlzdCA9IGxhcHBlbmQoYXJn bGlzdCwgbmV3X29iamVjdF9vYmplY3QoYXJnKSk7CisJCX0KKworCQlhcHBlbmRfZm9ybWF0X3N0 cmluZyh0bXBvYmosICIoIik7CisJCWFwcGVuZF9hcnJheV9vYmplY3QodG1wb2JqLCAiJXthcmd0 eXBlczosIH1UIiwgYXJnbGlzdCk7CisJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRtcG9iaiwgIiki KTsKKworCQlSZWxlYXNlU3lzQ2FjaGUocHJvY1R1cCk7CisKKwkJbGlzdCA9IGxhcHBlbmQobGlz dCwgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJfQorCisJYXBwZW5kX2FycmF5X29iamVj dChzdG10LCAiQVMgJXtpdGVtczosIH1zIiwgbGlzdCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUob3Bm VHVwKTsKKwlSZWxlYXNlU3lzQ2FjaGUob3BjVHVwKTsKKworCXJldHVybiBzdG10OworfQorCisv KgorICogRGVwYXJzZSBhIENyZWF0ZVRyaWdTdG10IChDUkVBVEUgT1BFUkFUT1IgRkFNSUxZKQor ICoKKyAqIEdpdmVuIGEgdHJpZ2dlciBPSUQgYW5kIHRoZSBwYXJzZXRyZWUgdGhhdCBjcmVhdGVk IGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21t YW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZU9wRmFtaWx5KE9pZCBv YmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUhlYXBUdXBsZSAgIG9wZlR1cDsKKwlIZWFw VHVwbGUgICBhbVR1cDsKKwlGb3JtX3BnX29wZmFtaWx5IG9wZkZvcm07CisJRm9ybV9wZ19hbSAg YW1Gb3JtOworCU9ialRyZWUJICAgKmNvcGZTdG10OworCisJb3BmVHVwID0gU2VhcmNoU3lzQ2Fj aGUxKE9QRkFNSUxZT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFw VHVwbGVJc1ZhbGlkKG9wZlR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVk IGZvciBvcGVyYXRvciBmYW1pbHkgd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJb3BmRm9ybSA9 IChGb3JtX3BnX29wZmFtaWx5KSBHRVRTVFJVQ1Qob3BmVHVwKTsKKworCWFtVHVwID0gU2VhcmNo U3lzQ2FjaGUxKEFNT0lELCBPYmplY3RJZEdldERhdHVtKG9wZkZvcm0tPm9wZm1ldGhvZCkpOwor CWlmICghSGVhcFR1cGxlSXNWYWxpZChhbVR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29r dXAgZmFpbGVkIGZvciBhY2Nlc3MgbWV0aG9kICV1IiwKKwkJCSBvcGZGb3JtLT5vcGZtZXRob2Qp OworCWFtRm9ybSA9IChGb3JtX3BnX2FtKSBHRVRTVFJVQ1QoYW1UdXApOworCisJY29wZlN0bXQg PSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIE9QRVJBVE9SIEZBTUlMWSAle2lkZW50aXR5fUQgVVNJ TkcgJXthbW5hbWV9SSIsCisJCQkJCQkJICAyLAorCQkJCQkJCSAgImlkZW50aXR5IiwgT2JqVHlw ZU9iamVjdCwKKwkJCQkJCQkgIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShvcGZGb3JtLT5vcGZu YW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJICAgTmFtZVN0cihvcGZGb3JtLT5vcGZuYW1lKSksCisJ CQkJCQkJICAiYW1uYW1lIiwgT2JqVHlwZVN0cmluZywgTmFtZVN0cihhbUZvcm0tPmFtbmFtZSkp OworCisJUmVsZWFzZVN5c0NhY2hlKGFtVHVwKTsKKwlSZWxlYXNlU3lzQ2FjaGUob3BmVHVwKTsK KworCXJldHVybiBjb3BmU3RtdDsKK30KKworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVh dGVQb2xpY3lTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZVBv bGljeVN0bXQgKm5vZGUgPSAoQ3JlYXRlUG9saWN5U3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJl ZQkgICAqcG9saWN5OworCisJcG9saWN5ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBQT0xJQ1kg JXtpZGVudGl0eX1JIiwgMSwKKwkJCQkJCQkiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBub2Rl LT5wb2xpY3lfbmFtZSk7CisKKwkvKiBhZGQgdGhlIHJlc3Qgb2YgdGhlIHN0dWZmICovCisJYWRk X3BvbGljeV9jbGF1c2VzKHBvbGljeSwgb2JqZWN0SWQsIG5vZGUtPnJvbGVzLCAhIW5vZGUtPnF1 YWwsCisJCQkJCSAgICEhbm9kZS0+d2l0aF9jaGVjayk7CisKKwlyZXR1cm4gcG9saWN5OworfQor CitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyUG9saWN5U3RtdChPaWQgb2JqZWN0SWQs IE5vZGUgKnBhcnNldHJlZSkKK3sKKwlBbHRlclBvbGljeVN0bXQgKm5vZGUgPSAoQWx0ZXJQb2xp Y3lTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlCSAgICpwb2xpY3k7CisKKwlwb2xpY3kgPSBu ZXdfb2JqdHJlZV9WQSgiQUxURVIgUE9MSUNZICV7aWRlbnRpdHl9SSIsIDEsCisJCQkJCQkJImlk ZW50aXR5IiwgT2JqVHlwZVN0cmluZywgbm9kZS0+cG9saWN5X25hbWUpOworCisJLyogYWRkIHRo ZSByZXN0IG9mIHRoZSBzdHVmZiAqLworCWFkZF9wb2xpY3lfY2xhdXNlcyhwb2xpY3ksIG9iamVj dElkLCBub2RlLT5yb2xlcywgISFub2RlLT5xdWFsLAorCQkJCQkgICAhIW5vZGUtPndpdGhfY2hl Y2spOworCisJcmV0dXJuIHBvbGljeTsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDcmVhdGVTY2hl bWFTdG10LgorICoKKyAqIEdpdmVuIGEgc2NoZW1hIE9JRCBhbmQgdGhlIHBhcnNldHJlZSB0aGF0 IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0 aW9uIGNvbW1hbmQuCisgKgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZVNj aGVtYVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlU2NoZW1h U3RtdCAqbm9kZSA9IChDcmVhdGVTY2hlbWFTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlCQkJ ICpjcmVhdGVTY2hlbWE7CisJT2JqVHJlZQkJCSAqYXV0aDsKKworCS8qCisJICogVmVyYm9zZSBz eW50YXgKKwkgKgorCSAqIENSRUFURSBTQ0hFTUEgJXtpZl9ub3RfZXhpc3RzfXMgJXtuYW1lfUkg JXthdXRob3JpemF0aW9ufXMKKwkgKi8KKwljcmVhdGVTY2hlbWEgPSBuZXdfb2JqdHJlZSgiQ1JF QVRFIFNDSEVNQSIpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlU2NoZW1hLCAiJXtp Zl9ub3RfZXhpc3RzfXMiLAorCQkJCQkJIG5vZGUtPmlmX25vdF9leGlzdHMgPyAiSUYgTk9UIEVY SVNUUyIgOiAiIik7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVTY2hlbWEsICIle25h bWV9SSIsIG5vZGUtPnNjaGVtYW5hbWUpOworCisJYXV0aCA9IG5ld19vYmp0cmVlKCJBVVRIT1JJ WkFUSU9OIik7CisJaWYgKG5vZGUtPmF1dGhyb2xlKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChh dXRoLCAiJXthdXRob3JpemF0aW9uX3JvbGV9SSIsCisJCQkJCQkJIGdldF9yb2xlc3BlY19uYW1l KG5vZGUtPmF1dGhyb2xlKSk7CisJZWxzZQorCXsKKwkJYXBwZW5kX251bGxfb2JqZWN0KGF1dGgs ICIle2F1dGhvcml6YXRpb25fcm9sZX1JICIpOworCQlhcHBlbmRfYm9vbF9vYmplY3QoYXV0aCwg InByZXNlbnQiLCBmYWxzZSk7CisJfQorCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVNjaGVt YSwgIiV7YXV0aG9yaXphdGlvbn1zIiwgYXV0aCk7CisKKwlyZXR1cm4gY3JlYXRlU2NoZW1hOwor fQorCisvKgorICogUmV0dXJuIHRoZSBkZWZhdWx0IHZhbHVlIG9mIGEgZG9tYWluLgorICovCitz dGF0aWMgY2hhciAqCitEb21haW5HZXREZWZhdWx0KEhlYXBUdXBsZSBkb21UdXApCit7CisJRGF0 dW0JZGVmOworCU5vZGUgICAqZGVmdmFsOworCWNoYXIgICAqZGVmc3RyOworCWJvb2wJaXNudWxs OworCisJZGVmID0gU3lzQ2FjaGVHZXRBdHRyKFRZUEVPSUQsIGRvbVR1cCwgQW51bV9wZ190eXBl X3R5cGRlZmF1bHRiaW4sCisJCQkJCQkJICZpc251bGwpOworCWlmIChpc251bGwpCisJCWVsb2co RVJST1IsICJkb21haW4gXCIlc1wiIGRvZXMgbm90IGhhdmUgYSBkZWZhdWx0IHZhbHVlIiwKKwkJ CSBOYW1lU3RyKCgoRm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QoZG9tVHVwKSktPnR5cG5hbWUpKTsK KwlkZWZ2YWwgPSBzdHJpbmdUb05vZGUoVGV4dERhdHVtR2V0Q1N0cmluZyhkZWYpKTsKKwlkZWZz dHIgPSBkZXBhcnNlX2V4cHJlc3Npb24oZGVmdmFsLCBOVUxMIC8qIGRwY29udGV4dD8gKi8sCisJ CQkJCQkJCQkgICBmYWxzZSwgZmFsc2UpOworCisJcmV0dXJuIGRlZnN0cjsKK30KKworLyoKKyAq IERlcGFyc2UgYSBBbHRlckRvbWFpblN0bXQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFy c2VfQWx0ZXJEb21haW5TdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlLAorCQkJCQkJ T2JqZWN0QWRkcmVzcyBjb25zdHJhaW50QWRkcikKK3sKKwlBbHRlckRvbWFpblN0bXQgKm5vZGUg PSAoQWx0ZXJEb21haW5TdG10ICopIHBhcnNldHJlZTsKKwlIZWFwVHVwbGUJZG9tVHVwOworCUZv cm1fcGdfdHlwZSBkb21Gb3JtOworCU9ialRyZWUJICAgKmFsdGVyRG9tOworCWNoYXIJICAgKmZt dDsKKwljb25zdCBjaGFyICp0eXBlOworCisJLyogQUxURVIgRE9NQUlOIERST1AgQ09OU1RSQUlO VCBpcyBoYW5kbGVkIGJ5IHRoZSBEUk9QIHN1cHBvcnQgY29kZSAqLworCWlmIChub2RlLT5zdWJ0 eXBlID09ICdYJykKKwkJcmV0dXJuIE5VTEw7CisKKwlkb21UdXAgPSBTZWFyY2hTeXNDYWNoZTEo VFlQRU9JRCwgb2JqZWN0SWQpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChkb21UdXApKQorCQll bG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgZG9tYWluIHdpdGggT0lEICV1IiwK KwkJCSBvYmplY3RJZCk7CisJZG9tRm9ybSA9IChGb3JtX3BnX3R5cGUpIEdFVFNUUlVDVChkb21U dXApOworCisJc3dpdGNoIChub2RlLT5zdWJ0eXBlKQorCXsKKwkJY2FzZSAnVCc6CisJCQkvKiBT RVQgREVGQVVMVCAvIERST1AgREVGQVVMVCAqLworCQkJaWYgKG5vZGUtPmRlZiA9PSBOVUxMKQor CQkJeworCQkJCWZtdCA9ICJBTFRFUiBET01BSU4iOworCQkJCXR5cGUgPSAiZHJvcCBkZWZhdWx0 IjsKKwkJCQlhbHRlckRvbSA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMSwgInR5cGUiLCBPYmpUeXBl U3RyaW5nLCB0eXBlKTsKKwkJCQlhcHBlbmRfb2JqZWN0X29iamVjdChhbHRlckRvbSwgIiV7aWRl bnRpdHl9RCBEUk9QIERFRkFVTFQiLAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZShkb21Gb3JtLT50eXBuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJCQkgIE5hbWVTdHIoZG9tRm9y bS0+dHlwbmFtZSkpKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlmbXQgPSAiQUxURVIgRE9N QUlOIjsKKwkJCQl0eXBlID0gInNldCBkZWZhdWx0IjsKKwkJCQlhbHRlckRvbSA9IG5ld19vYmp0 cmVlX1ZBKGZtdCwgMSwgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCB0eXBlKTsKKwkJCQlhcHBlbmRf b2JqZWN0X29iamVjdChhbHRlckRvbSwgIiV7aWRlbnRpdHl9RCBTRVQgREVGQVVMVCIsCisJCQkJ CQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGRvbUZvcm0tPnR5cG5hbWVzcGFjZSwKKwkJ CQkJCQkJCQkJCQkJCSAgTmFtZVN0cihkb21Gb3JtLT50eXBuYW1lKSkpOworCQkJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KGFsdGVyRG9tLCAiJXtkZWZhdWx0fXMiLCBEb21haW5HZXREZWZhdWx0KGRv bVR1cCkpOworCQkJfQorCisJCQlicmVhazsKKwkJY2FzZSAnTic6CisJCQkvKiBEUk9QIE5PVCBO VUxMICovCisJCQlmbXQgPSAiQUxURVIgRE9NQUlOIjsKKwkJCXR5cGUgPSAiZHJvcCBub3QgbnVs bCI7CisJCQlhbHRlckRvbSA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMSwgInR5cGUiLCBPYmpUeXBl U3RyaW5nLCB0eXBlKTsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyRG9tLCAiJXtpZGVu dGl0eX1EIERST1AgTk9UIE5VTEwiLAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1l KGRvbUZvcm0tPnR5cG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJICBOYW1lU3RyKGRvbUZvcm0t PnR5cG5hbWUpKSk7CisJCQlicmVhazsKKwkJY2FzZSAnTyc6CisJCQkvKiBTRVQgTk9UIE5VTEwg Ki8KKwkJCWZtdCA9ICJBTFRFUiBET01BSU4iOworCQkJdHlwZSA9ICJzZXQgbm90IG51bGwiOwor CQkJYWx0ZXJEb20gPSBuZXdfb2JqdHJlZV9WQShmbXQsIDEsICJ0eXBlIiwgT2JqVHlwZVN0cmlu ZywgdHlwZSk7CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdChhbHRlckRvbSwgIiV7aWRlbnRpdHl9 RCBTRVQgTk9UIE5VTEwiLAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGRvbUZv cm0tPnR5cG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJICBOYW1lU3RyKGRvbUZvcm0tPnR5cG5h bWUpKSk7CisJCQlicmVhazsKKwkJY2FzZSAnQyc6CisJCQkvKiBBREQgQ09OU1RSQUlOVC4gIE9u bHkgQ0hFQ0sgY29uc3RyYWludHMgYXJlIHN1cHBvcnRlZCBieSBkb21haW5zICovCisJCQlmbXQg PSAiQUxURVIgRE9NQUlOIjsKKwkJCXR5cGUgPSAiYWRkIGNvbnN0cmFpbnQiOworCQkJYWx0ZXJE b20gPSBuZXdfb2JqdHJlZV9WQShmbXQsIDEsICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgdHlwZSk7 CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdChhbHRlckRvbSwgIiV7aWRlbnRpdHl9RCIsCisJCQkJ CQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoZG9tRm9ybS0+dHlwbmFtZXNwYWNlLAorCQkJ CQkJCQkJCQkJCQkgIE5hbWVTdHIoZG9tRm9ybS0+dHlwbmFtZSkpKTsKKwkJCS8qIGEgbmV3IGNv bnN0cmFpbnQgaGFzIGEgbmFtZSBhbmQgZGVmaW5pdGlvbiAqLworCQkJYXBwZW5kX3N0cmluZ19v YmplY3QoYWx0ZXJEb20sICJBREQgQ09OU1RSQUlOVCAle2NvbnN0cmFpbnRfbmFtZX1zIiwKKwkJ CQkJCQkJIGdldF9jb25zdHJhaW50X25hbWUoY29uc3RyYWludEFkZHIub2JqZWN0SWQpKTsKKwkJ CWFwcGVuZF9zdHJpbmdfb2JqZWN0KGFsdGVyRG9tLCAiJXtkZWZpbml0aW9ufXMiLAorCQkJCQkJ CQkgcGdfZ2V0X2NvbnN0cmFpbnRkZWZfY29tbWFuZF9zaW1wbGUoY29uc3RyYWludEFkZHIub2Jq ZWN0SWQpKTsKKwkJCWJyZWFrOworCQljYXNlICdWJzoKKwkJCS8qIFZBTElEQVRFIENPTlNUUkFJ TlQgKi8KKwkJCWZtdCA9ICJBTFRFUiBET01BSU4iOworCQkJdHlwZSA9ICJ2YWxpZGF0ZSBjb25z dHJhaW50IjsKKworCQkJLyoKKwkJCSAqIFByb2Nlc3Mgc3VidHlwZT1zcGVjaWZpYyBvcHRpb25z LiBWYWxpZGF0aW9uIGEgY29uc3RyYWludAorCQkJICogcmVxdWlyZXMgaXRzIG5hbWUuCisJCQkg Ki8KKwkJCWFsdGVyRG9tID0gbmV3X29ianRyZWVfVkEoZm10LCAxLCAidHlwZSIsIE9ialR5cGVT dHJpbmcsIHR5cGUpOworCQkJYXBwZW5kX29iamVjdF9vYmplY3QoYWx0ZXJEb20sICIle2lkZW50 aXR5fUQiLAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGRvbUZvcm0tPnR5cG5h bWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJICBOYW1lU3RyKGRvbUZvcm0tPnR5cG5hbWUpKSk7CisJ CQlhcHBlbmRfc3RyaW5nX29iamVjdChhbHRlckRvbSwgIlZBTElEQVRFIENPTlNUUkFJTlQgJXtj b25zdHJhaW50X25hbWV9cyIsIG5vZGUtPm5hbWUpOworCisJCQlicmVhazsKKwkJZGVmYXVsdDoK KwkJCWVsb2coRVJST1IsICJpbnZhbGlkIHN1YnR5cGUgJWMiLCBub2RlLT5zdWJ0eXBlKTsKKwl9 CisKKwkvKiBkb25lICovCisJUmVsZWFzZVN5c0NhY2hlKGRvbVR1cCk7CisKKwlyZXR1cm4gYWx0 ZXJEb207Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlU2VxU3RtdC4KKyAqCisgKiBHaXZl biBhIHNlcXVlbmNlIE9JRCBhbmQgdGhlIHBhcnNldHJlZSB0aGF0IGNyZWF0ZSBpdCwgcmV0dXJu IGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqLwor c3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVTZXFTdG10KE9pZCBvYmplY3RJZCwgTm9k ZSAqcGFyc2V0cmVlKQoreworCU9ialRyZWUJKmNyZWF0ZVNlcTsKKwlPYmpUcmVlCSp0bXBvYmo7 CisJUmVsYXRpb24JcmVsYXRpb247CisJRm9ybV9wZ19zZXF1ZW5jZV9kYXRhIHNlcWRhdGE7CisJ TGlzdAkgICAqZWxlbXMgPSBOSUw7CisJRm9ybV9wZ19zZXF1ZW5jZSBzZXFmb3JtOworCVJlbGF0 aW9uCXJlbDsKKwlIZWFwVHVwbGUJc2VxdHVwbGU7CisJQ3JlYXRlU2VxU3RtdCAqY3JlYXRlU2Vx U3RtdCA9IChDcmVhdGVTZXFTdG10ICopIHBhcnNldHJlZTsKKworCS8qCisJICogU2VxdWVuY2Ug Zm9yIElERU5USVRZIENPTFVNTiBvdXRwdXQgc2VwYXJhdGVseSh2aWEgQ1JFQVRFIFRBQkxFIG9y CisJICogQUxURVIgVEFCTEUpOyByZXR1cm4gZW1wdHkgaGVyZS4KKwkgKi8KKwlpZiAoY3JlYXRl U2VxU3RtdC0+Zm9yX2lkZW50aXR5KQorCQlyZXR1cm4gTlVMTDsKKworCXNlcWRhdGEgPSBnZXRf c2VxdWVuY2VfdmFsdWVzKG9iamVjdElkKTsKKworCXJlbGF0aW9uID0gcmVsYXRpb25fb3Blbihv YmplY3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlyZWwgPSB0YWJsZV9vcGVuKFNlcXVlbmNlUmVs YXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisJc2VxdHVwbGUgPSBTZWFyY2hTeXNDYWNoZUNv cHkxKFNFUVJFTElELAorCQkJCQkJCQkgICBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJ aWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHNlcXR1cGxlKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxv b2t1cCBmYWlsZWQgZm9yIHNlcXVlbmNlICV1IiwKKwkJCSBvYmplY3RJZCk7CisKKwlzZXFmb3Jt ID0gKEZvcm1fcGdfc2VxdWVuY2UpIEdFVFNUUlVDVChzZXF0dXBsZSk7CisKKwkvKgorCSAqIFZl cmJvc2Ugc3ludGF4CisJICoKKwkgKiBDUkVBVEUgJXtwZXJzaXN0ZW5jZX1zIFNFUVVFTkNFICV7 aWRlbnRpdHl9RAorCSAqLworCWNyZWF0ZVNlcSA9IG5ld19vYmp0cmVlKCJDUkVBVEUiKTsKKwor CWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZVNlcSwgIiV7cGVyc2lzdGVuY2V9cyIsCisJCQkJ CQkgZ2V0X3BlcnNpc3RlbmNlX3N0cihyZWxhdGlvbi0+cmRfcmVsLT5yZWxwZXJzaXN0ZW5jZSkp OworCisJdG1wb2JqID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHJlbGF0aW9uLT5yZF9yZWwt PnJlbG5hbWVzcGFjZSwKKwkJCQkJCQkJICAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsYXRp b24pKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTZXEsICJTRVFVRU5DRSAle2lkZW50 aXR5fUQiLCB0bXBvYmopOworCisJLyogRGVmaW5pdGlvbiBlbGVtZW50cyAqLworCWVsZW1zID0g bGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfQ2FjaGUoY3JlYXRlU2VxLCBzZXFmb3JtLCBmYWxz ZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfQ3ljbGUoY3JlYXRlU2Vx LCBzZXFmb3JtLCBmYWxzZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFf SW5jcmVtZW50QnkoY3JlYXRlU2VxLCBzZXFmb3JtLCBmYWxzZSkpOworCWVsZW1zID0gbGFwcGVu ZChlbGVtcywgZGVwYXJzZV9TZXFfTWludmFsdWUoY3JlYXRlU2VxLCBzZXFmb3JtLCBmYWxzZSkp OworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfTWF4dmFsdWUoY3JlYXRlU2Vx LCBzZXFmb3JtLCBmYWxzZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFf U3RhcnR3aXRoKGNyZWF0ZVNlcSwgc2VxZm9ybSwgZmFsc2UpKTsKKwllbGVtcyA9IGxhcHBlbmQo ZWxlbXMsIGRlcGFyc2VfU2VxX1Jlc3RhcnQoY3JlYXRlU2VxLCBzZXFkYXRhKSk7CisKKwkvKiBX ZSBwdXJwb3NlZnVsbHkgZG8gbm90IGVtaXQgT1dORUQgQlkgaGVyZSAqLworCWFwcGVuZF9hcnJh eV9vYmplY3QoY3JlYXRlU2VxLCAiJXtkZWZpbml0aW9uOiB9cyIsIGVsZW1zKTsKKworCXRhYmxl X2Nsb3NlKHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CisJcmVsYXRpb25fY2xvc2UocmVsYXRpb24s IEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gY3JlYXRlU2VxOworfQorCisvKgorICogRGVw YXJzZSBhIENyZWF0ZVN0bXQgKENSRUFURSBUQUJMRSkuCisgKgorICogR2l2ZW4gYSB0YWJsZSBP SUQgYW5kIHRoZSBwYXJzZXRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQor ICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJl ZSAqCitkZXBhcnNlX0NyZWF0ZVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7 CisJQ3JlYXRlU3RtdCAqbm9kZSA9IChDcmVhdGVTdG10ICopIHBhcnNldHJlZTsKKwlSZWxhdGlv bglyZWxhdGlvbiA9IHJlbGF0aW9uX29wZW4ob2JqZWN0SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJ TGlzdAkgICAqZHBjb250ZXh0OworCU9ialRyZWUJKmNyZWF0ZVN0bXQ7CisJT2JqVHJlZQkqdG1w b2JqOworCUxpc3QJICAgKmxpc3QgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKworCS8qCisJ ICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIENSRUFURSAle3BlcnNpc3RlbmNlfXMgVEFCTEUg JXtpZl9ub3RfZXhpc3RzfXMgJXtpZGVudGl0eX1EIFtPRgorCSAqICV7b2ZfdHlwZX1UIHwgUEFS VElUSU9OIE9GICV7cGFyZW50X2lkZW50aXR5fURdICV7dGFibGVfZWxlbWVudHN9cworCSAqICV7 aW5oZXJpdHN9cyAle3BhcnRpdGlvbl9ieX1zICV7YWNjZXNzX21ldGhvZH1zICV7d2l0aF9jbGF1 c2V9cworCSAqICV7b25fY29tbWl0fXMgJXt0YWJsZXNwYWNlfXMKKwkgKi8KKwljcmVhdGVTdG10 ID0gbmV3X29ianRyZWUoIkNSRUFURSIpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRl U3RtdCwgIiV7cGVyc2lzdGVuY2V9cyIsCisJCQkJCQkgZ2V0X3BlcnNpc3RlbmNlX3N0cihyZWxh dGlvbi0+cmRfcmVsLT5yZWxwZXJzaXN0ZW5jZSkpOworCisJYXBwZW5kX2Zvcm1hdF9zdHJpbmco Y3JlYXRlU3RtdCwgIlRBQkxFIik7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVTdG10 LCAiJXtpZl9ub3RfZXhpc3RzfXMiLAorCQkJCQkJIG5vZGUtPmlmX25vdF9leGlzdHMgPyAiSUYg Tk9UIEVYSVNUUyIgOiAiIik7CisKKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUo cmVsYXRpb24tPnJkX3JlbC0+cmVsbmFtZXNwYWNlLAorCQkJCQkJCQkgICBSZWxhdGlvbkdldFJl bGF0aW9uTmFtZShyZWxhdGlvbikpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQs ICIle2lkZW50aXR5fUQiLCB0bXBvYmopOworCisJZHBjb250ZXh0ID0gZGVwYXJzZV9jb250ZXh0 X2ZvcihSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWxhdGlvbiksCisJCQkJCQkJCQlvYmplY3RJ ZCk7CisKKwkvKgorCSAqIFR5cGVkIHRhYmxlcyBhbmQgcGFydGl0aW9ucyB1c2UgYSBzbGlnaHRs eSBkaWZmZXJlbnQgZm9ybWF0IHN0cmluZzogd2UKKwkgKiBtdXN0IG5vdCBwdXQgdGFibGVfZWxl bWVudHMgd2l0aCBwYXJlbnRzIGRpcmVjdGx5IGluIHRoZSBmbXQgc3RyaW5nLAorCSAqIGJlY2F1 c2UgaWYgdGhlcmUgYXJlIG5vIG9wdGlvbnMgdGhlIHBhcmVucyBtdXN0IG5vdCBiZSBlbWl0dGVk OyBhbmQKKwkgKiBhbHNvLCB0eXBlZCB0YWJsZXMgZG8gbm90IGFsbG93IGZvciBpbmhlcml0YW5j ZS4KKwkgKi8KKwlpZiAobm9kZS0+b2ZUeXBlbmFtZSB8fCBub2RlLT5wYXJ0Ym91bmQpCisJewor CQlMaXN0ICAgICAgICp0YWJsZWVsdHMgPSBOSUw7CisKKwkJLyoKKwkJICogV2UgY2FuJ3QgcHV0 IHRhYmxlIGVsZW1lbnRzIGRpcmVjdGx5IGluIHRoZSBmbXQgc3RyaW5nIGFzIGFuIGFycmF5CisJ CSAqIHN1cnJvdW5kZWQgYnkgcGFyZW5zIGhlcmUsIGJlY2F1c2UgYW4gZW1wdHkgY2xhdXNlIHdv dWxkIGNhdXNlIGEKKwkJICogc3ludGF4IGVycm9yLiAgVGhlcmVmb3JlLCB3ZSB1c2UgYW4gaW5k aXJlY3Rpb24gZWxlbWVudCBhbmQgc2V0CisJCSAqIHByZXNlbnQ9ZmFsc2Ugd2hlbiB0aGVyZSBh cmUgbm8gZWxlbWVudHMuCisJCSAqLworCQlpZiAobm9kZS0+b2ZUeXBlbmFtZSkKKwkJeworCQkJ dG1wb2JqID0gbmV3X29ianRyZWVfZm9yX3R5cGUocmVsYXRpb24tPnJkX3JlbC0+cmVsb2Z0eXBl LCAtMSk7CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTdG10LCAiT0YgJXtvZl90eXBl fVQiLCB0bXBvYmopOworCQl9CisJCWVsc2UKKwkJeworCQkJTGlzdCAgICAgKnBhcmVudHM7CisJ CQlPYmpFbGVtICAqZWxlbTsKKworCQkJcGFyZW50cyA9IGRlcGFyc2VfSW5oUmVsYXRpb25zKG9i amVjdElkKTsKKwkJCWVsZW0gPSAoT2JqRWxlbSAqKSBsaW5pdGlhbChwYXJlbnRzKTsKKworCQkJ QXNzZXJ0KGxpc3RfbGVuZ3RoKHBhcmVudHMpID09IDEpOworCisJCQlhcHBlbmRfZm9ybWF0X3N0 cmluZyhjcmVhdGVTdG10LCAiUEFSVElUSU9OIE9GIik7CisKKwkJCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KGNyZWF0ZVN0bXQsICIle3BhcmVudF9pZGVudGl0eX1EIiwKKwkJCQkJCQkJIGVsZW0tPnZh bHVlLm9iamVjdCk7CisJCX0KKworCQl0YWJsZWVsdHMgPSBkZXBhcnNlX1RhYmxlRWxlbWVudHMo cmVsYXRpb24sIG5vZGUtPnRhYmxlRWx0cywgZHBjb250ZXh0LAorCQkJCQkJCQkJCSAgdHJ1ZSwg ICAgICAvKiB0eXBlZCB0YWJsZSAqLworCQkJCQkJCQkJCSAgZmFsc2UpOyAgICAvKiBub3QgY29t cG9zaXRlICovCisJCXRhYmxlZWx0cyA9IG9idGFpbkNvbnN0cmFpbnRzKHRhYmxlZWx0cywgb2Jq ZWN0SWQsIEludmFsaWRPaWQpOworCisJCWlmICh0YWJsZWVsdHMgPT0gTklMKQorCQl7CisJCQl0 bXBvYmogPSBuZXdfb2JqdHJlZSgiIik7CisJCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAi cHJlc2VudCIsIGZhbHNlKTsKKwkJfQorCQllbHNlCisJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9W QSgiKCV7ZWxlbWVudHM6LCB9cykiLCAxLAorCQkJCQkJCQkgImVsZW1lbnRzIiwgT2JqVHlwZUFy cmF5LCB0YWJsZWVsdHMpOworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICIl e3RhYmxlX2VsZW1lbnRzfXMiLCB0bXBvYmopOworCX0KKwllbHNlCisJeworCQlMaXN0ICAgICAg ICp0YWJsZWVsdHMgPSBOSUw7CisKKwkJLyoKKwkJICogVGhlcmUgaXMgbm8gbmVlZCB0byBwcm9j ZXNzIExJS0UgY2xhdXNlcyBzZXBhcmF0ZWx5OyB0aGV5IGhhdmUKKwkJICogYWxyZWFkeSBiZWVu IHRyYW5zZm9ybWVkIGludG8gY29sdW1ucyBhbmQgY29uc3RyYWludHMuCisJCSAqLworCisJCS8q CisJCSAqIFByb2Nlc3MgdGFibGUgZWxlbWVudHM6IGNvbHVtbiBkZWZpbml0aW9ucyBhbmQgY29u c3RyYWludHMuICBPbmx5CisJCSAqIHRoZSBjb2x1bW4gZGVmaW5pdGlvbnMgYXJlIG9idGFpbmVk IGZyb20gdGhlIHBhcnNlIG5vZGUgaXRzZWxmLiAgVG8KKwkJICogZ2V0IGNvbnN0cmFpbnRzIHdl IHJlbHkgb24gcGdfY29uc3RyYWludCwgYmVjYXVzZSB0aGUgcGFyc2Ugbm9kZQorCQkgKiBtaWdo dCBiZSBtaXNzaW5nIHNvbWUgdGhpbmdzIHN1Y2ggYXMgdGhlIG5hbWUgb2YgdGhlIGNvbnN0cmFp bnRzLgorCQkgKi8KKwkJdGFibGVlbHRzID0gZGVwYXJzZV9UYWJsZUVsZW1lbnRzKHJlbGF0aW9u LCBub2RlLT50YWJsZUVsdHMsIGRwY29udGV4dCwKKwkJCQkJCQkJCQkgIGZhbHNlLCAgICAgLyog bm90IHR5cGVkIHRhYmxlICovCisJCQkJCQkJCQkJICBmYWxzZSk7ICAgIC8qIG5vdCBjb21wb3Np dGUgKi8KKwkJdGFibGVlbHRzID0gb2J0YWluQ29uc3RyYWludHModGFibGVlbHRzLCBvYmplY3RJ ZCwgSW52YWxpZE9pZCk7CisKKwkJYXBwZW5kX2FycmF5X29iamVjdChjcmVhdGVTdG10LCAiKCV7 dGFibGVfZWxlbWVudHM6LCB9cykiLCB0YWJsZWVsdHMpOworCisJCS8qCisJCSAqIEFkZCBpbmhl cml0YW5jZSBzcGVjaWZpY2F0aW9uLiAgV2UgY2Fubm90IHNpbXBseSBzY2FuIHRoZSBsaXN0IG9m CisJCSAqIHBhcmVudHMgZnJvbSB0aGUgcGFyc2VyIG5vZGUsIGJlY2F1c2UgdGhhdCBtYXkgbGFj ayB0aGUgYWN0dWFsCisJCSAqIHF1YWxpZmllZCBuYW1lcyBvZiB0aGUgcGFyZW50IHJlbGF0aW9u cy4gIFJhdGhlciB0aGFuIHRyeWluZyB0bworCQkgKiByZS1yZXNvbHZlIHRoZW0gZnJvbSB0aGUg aW5mb3JtYXRpb24gaW4gdGhlIHBhcnNlIG5vZGUsIGl0IHNlZW1zCisJCSAqIG1vcmUgYWNjdXJh dGUgYW5kIGNvbnZlbmllbnQgdG8gZ3JhYiBpdCBmcm9tIHBnX2luaGVyaXRzLgorCQkgKi8KKwkJ dG1wb2JqID0gbmV3X29ianRyZWUoIklOSEVSSVRTIik7CisJCWlmIChsaXN0X2xlbmd0aChub2Rl LT5pbmhSZWxhdGlvbnMpID4gMCkKKwkJCWFwcGVuZF9hcnJheV9vYmplY3QodG1wb2JqLCAiKCV7 cGFyZW50czosIH1EKSIsIGRlcGFyc2VfSW5oUmVsYXRpb25zKG9iamVjdElkKSk7CisJCWVsc2UK KwkJeworCQkJYXBwZW5kX251bGxfb2JqZWN0KHRtcG9iaiwgIigle3BhcmVudHM6LCB9RCkiKTsK KwkJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCQl9CisJ CWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICIle2luaGVyaXRzfXMiLCB0bXBvYmop OworCX0KKworCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJUQUJMRVNQQUNFIik7CisJaWYgKG5vZGUt PnRhYmxlc3BhY2VuYW1lKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle3RhYmxl c3BhY2V9SSIsIG5vZGUtPnRhYmxlc3BhY2VuYW1lKTsKKwllbHNlCisJeworCQlhcHBlbmRfbnVs bF9vYmplY3QodG1wb2JqLCAiJXt0YWJsZXNwYWNlfUkiKTsKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0 KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJfQorCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNy ZWF0ZVN0bXQsICIle3RhYmxlc3BhY2V9cyIsIHRtcG9iaik7CisJYXBwZW5kX29iamVjdF9vYmpl Y3QoY3JlYXRlU3RtdCwgIiV7b25fY29tbWl0fXMiLAorCQkJCQkJICBkZXBhcnNlX09uQ29tbWl0 Q2xhdXNlKG5vZGUtPm9uY29tbWl0KSk7CisKKwkvKiBGT1IgVkFMVUVTIGNsYXVzZSAqLworCWlm IChub2RlLT5wYXJ0Ym91bmQpCisJeworCQkvKgorCQkgKiBHZXQgcGdfY2xhc3MucmVscGFydGJv dW5kLiBXZSBjYW5ub3QgdXNlIHBhcnRib3VuZCBpbiB0aGUKKwkJICogcGFyc2V0cmVlIGRpcmVj dGx5IGFzIGl0J3MgdGhlIG9yaWdpbmFsIHBhcnRib3VuZCBleHByZXNzaW9uCisJCSAqIHdoaWNo IGhhdmVuJ3QgYmVlbiB0cmFuc2Zvcm1lZC4KKwkJICovCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KGNyZWF0ZVN0bXQsICIle3BhcnRpdGlvbl9ib3VuZH1zIiwKKwkJCQkJCQkgUmVsYXRpb25HZXRQ YXJ0aXRpb25Cb3VuZChvYmplY3RJZCkpOworCX0KKworCS8qIFBBUlRJVElPTiBCWSBjbGF1c2Ug Ki8KKwl0bXBvYmogPSBuZXdfb2JqdHJlZSgiUEFSVElUSU9OIEJZIik7CisJaWYgKHJlbGF0aW9u LT5yZF9yZWwtPnJlbGtpbmQgPT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSkKKwkJYXBwZW5k X3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtkZWZpbml0aW9ufXMiLCBwZ19nZXRfcGFydGtleWRl Zl9zaW1wbGUob2JqZWN0SWQpKTsKKwllbHNlCisJeworCQlhcHBlbmRfbnVsbF9vYmplY3QodG1w b2JqLCAiJXtkZWZpbml0aW9ufXMiKTsKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInBy ZXNlbnQiLCBmYWxzZSk7CisJfQorCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICIl e3BhcnRpdGlvbl9ieX1zIiwgdG1wb2JqKTsKKworCS8qIFVTSU5HIGNsYXVzZSAqLworCXRtcG9i aiA9IG5ld19vYmp0cmVlKCJVU0lORyIpOworCWlmIChub2RlLT5hY2Nlc3NNZXRob2QpCisJCWFw cGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7YWNjZXNzX21ldGhvZH1JIiwgbm9kZS0+YWNj ZXNzTWV0aG9kKTsKKwllbHNlCisJeworCQlhcHBlbmRfbnVsbF9vYmplY3QodG1wb2JqLCAiJXth Y2Nlc3NfbWV0aG9kfUkiKTsKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQi LCBmYWxzZSk7CisJfQorCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICIle2FjY2Vz c19tZXRob2R9cyIsIHRtcG9iaik7CisKKwkvKiBXSVRIIGNsYXVzZSAqLworCXRtcG9iaiA9IG5l d19vYmp0cmVlKCJXSVRIIik7CisKKwlmb3JlYWNoKGNlbGwsIG5vZGUtPm9wdGlvbnMpCisJewor CQlPYmpUcmVlICAgICp0bXBvYmoyOworCQlEZWZFbGVtICpvcHQgPSAoRGVmRWxlbSAqKSBsZmly c3QoY2VsbCk7CisKKwkJdG1wb2JqMiA9IGRlcGFyc2VfRGVmRWxlbShvcHQsIGZhbHNlKTsKKwkJ bGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wb2JqMikpOworCX0KKwor CWlmIChsaXN0KQorCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcG9iaiwgIigle3dpdGg6LCB9cyki LCBsaXN0KTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50Iiwg ZmFsc2UpOworCisJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwgIiV7d2l0aF9jbGF1 c2V9cyIsIHRtcG9iaik7CisKKwlyZWxhdGlvbl9jbG9zZShyZWxhdGlvbiwgQWNjZXNzU2hhcmVM b2NrKTsKKworCXJldHVybiBjcmVhdGVTdG10OworfQorCisvKgorICogRGVwYXJzZSBhIERlZmlu ZVN0bXQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRGVmaW5lU3RtdChPaWQgb2Jq ZWN0SWQsIE5vZGUgKnBhcnNldHJlZSwgT2JqZWN0QWRkcmVzcyBzZWNvbmRhcnlPYmopCit7CisJ RGVmaW5lU3RtdCAqZGVmaW5lID0gKERlZmluZVN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUJ ICAgKmRlZlN0bXQgPSBOVUxMOworCisJc3dpdGNoIChkZWZpbmUtPmtpbmQpCisJeworCQljYXNl IE9CSkVDVF9PUEVSQVRPUjoKKwkJCWRlZlN0bXQgPSBkZXBhcnNlX0RlZmluZVN0bXRfT3BlcmF0 b3Iob2JqZWN0SWQsIGRlZmluZSk7CisJCQlicmVhazsKKworCQljYXNlIE9CSkVDVF9UWVBFOgor CQkJZGVmU3RtdCA9IGRlcGFyc2VfRGVmaW5lU3RtdF9UeXBlKG9iamVjdElkLCBkZWZpbmUpOwor CQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1bnN1cHBvcnRlZCBvYmpl Y3Qga2luZCIpOworCX0KKworCXJldHVybiBkZWZTdG10OworfQorCisvKgorICogRGVwYXJzZSBh IERlZmluZVN0bXQgKENSRUFURSBPUEVSQVRPUikKKyAqCisgKiBHaXZlbiBhIHRyaWdnZXIgT0lE IGFuZCB0aGUgcGFyc2V0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAq IHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUg KgorZGVwYXJzZV9EZWZpbmVTdG10X09wZXJhdG9yKE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAq ZGVmaW5lKQoreworCUhlYXBUdXBsZSAgIG9wclR1cDsKKwlPYmpUcmVlCSAgICpzdG10OworCU9i alRyZWUJICAgKnRtcG9iajsKKwlMaXN0CSAgICpsaXN0ID0gTklMOworCUZvcm1fcGdfb3BlcmF0 b3Igb3ByRm9ybTsKKworCW9wclR1cCA9IFNlYXJjaFN5c0NhY2hlMShPUEVST0lELCBPYmplY3RJ ZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKG9wclR1cCkpCisJ CWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBvcGVyYXRvciB3aXRoIE9JRCAl dSIsIG9iamVjdElkKTsKKwlvcHJGb3JtID0gKEZvcm1fcGdfb3BlcmF0b3IpIEdFVFNUUlVDVChv cHJUdXApOworCisJc3RtdCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgT1BFUkFUT1IgJXtpZGVu dGl0eX1PIiwgMSwKKwkJCQkJCSAgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSAg bmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKG9wckZvcm0tPm9wcm5hbWVzcGFjZSwKKwkJCQkJCQkJ CQkJCSAgIE5hbWVTdHIob3ByRm9ybS0+b3BybmFtZSkpKTsKKworCS8qIFBST0NFRFVSRSAqLwor CXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJQUk9DRURVUkU9JXtwcm9jZWR1cmV9RCIsIDIsCisJ CQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJwcm9jZWR1cmUiLAorCQkJCQkJICJwcm9j ZWR1cmUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9p ZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSBvcHJGb3JtLT5vcHJjb2RlKSk7 CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisKKwkv KiBMRUZUQVJHICovCisJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkxFRlRBUkc9IiwgMSwKKwkJ CQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImxlZnRhcmciKTsKKwlpZiAoT2lkSXNWYWxp ZChvcHJGb3JtLT5vcHJsZWZ0KSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXt0 eXBlfVQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShvcHJGb3JtLT5vcHJsZWZ0LCAt MSkpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxz ZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisK KwkvKiBSSUdIVEFSRyAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJSSUdIVEFSRz0iLCAx LAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicmlnaHRhcmciKTsKKwlpZiAoT2lk SXNWYWxpZChvcHJGb3JtLT5vcHJyaWdodCkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9i aiwgIiV7dHlwZX1UIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUob3ByRm9ybS0+b3By cmlnaHQsIC0xKSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2Vu dCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBv YmopKTsKKworCS8qIENPTU1VVEFUT1IgKi8KKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQ09N TVVUQVRPUj0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiY29tbXV0YXRv ciIpOworCWlmIChPaWRJc1ZhbGlkKG9wckZvcm0tPm9wcmNvbSkpCisJCWFwcGVuZF9vYmplY3Rf b2JqZWN0KHRtcG9iaiwgIiV7b3Blcn1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lX2lkKE9wZXJhdG9yUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIG9wckZvcm0tPm9wcmNv bSkpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxz ZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisK KwkvKiBORUdBVE9SICovCisJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIk5FR0FUT1I9IiwgMSwK KwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgIm5lZ2F0b3IiKTsKKwlpZiAoT2lkSXNW YWxpZChvcHJGb3JtLT5vcHJuZWdhdGUpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmos ICIle29wZXJ9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChPcGVyYXRv clJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSBvcHJGb3JtLT5vcHJuZWdhdGUpKTsKKwllbHNl CisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3Qg PSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCisJLyogUkVTVFJJ Q1QgKi8KKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiUkVTVFJJQ1Q9IiwgMSwKKwkJCQkJCSAi Y2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInJlc3RyaWN0Iik7CisJaWYgKE9pZElzVmFsaWQob3By Rm9ybS0+b3BycmVzdCkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7cHJvY2Vk dXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVs YXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIG9wckZvcm0tPm9wcnJlc3QpKTsKKwllbHNlCisJCWFw cGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBw ZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCisJLyogSk9JTiAqLworCXRt cG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJKT0lOPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5 cGVTdHJpbmcsICJqb2luIik7CisJaWYgKE9pZElzVmFsaWQob3ByRm9ybS0+b3Byam9pbikpCisJ CWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJ CQkJCQkJIG9wckZvcm0tPm9wcmpvaW4pKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0 bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmpl Y3Rfb2JqZWN0KHRtcG9iaikpOworCisJLyogTUVSR0VTICovCisJdG1wb2JqID0gbmV3X29ianRy ZWVfVkEoIk1FUkdFUyIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJtZXJn ZXMiKTsKKwlpZiAoIW9wckZvcm0tPm9wcmNhbm1lcmdlKQorCQlhcHBlbmRfYm9vbF9vYmplY3Qo dG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2Jq ZWN0X29iamVjdCh0bXBvYmopKTsKKworCS8qIEhBU0hFUyAqLworCXRtcG9iaiA9IG5ld19vYmp0 cmVlX1ZBKCJIQVNIRVMiLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiaGFz aGVzIik7CisJaWYgKCFvcHJGb3JtLT5vcHJjYW5oYXNoKQorCQlhcHBlbmRfYm9vbF9vYmplY3Qo dG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2Jq ZWN0X29iamVjdCh0bXBvYmopKTsKKworCWFwcGVuZF9hcnJheV9vYmplY3Qoc3RtdCwgIigle2Vs ZW1zOiwgfXMpIiwgbGlzdCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUob3ByVHVwKTsKKworCXJldHVy biBzdG10OworfQorCisvKgorICogRGVwYXJzZSBhIENSRUFURSBUWVBFIHN0YXRlbWVudC4KKyAq Lworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9EZWZpbmVTdG10X1R5cGUoT2lkIG9iamVjdElk LCBEZWZpbmVTdG10ICpkZWZpbmUpCit7CisJSGVhcFR1cGxlICAgdHlwVHVwOworCU9ialRyZWUJ ICAgKnN0bXQ7CisJT2JqVHJlZQkgICAqdG1wOworCUxpc3QJICAgKmxpc3Q7CisJY2hhcgkgICAq c3RyOworCURhdHVtCQlkZmx0OworCWJvb2wJCWlzbnVsbDsKKwlGb3JtX3BnX3R5cGUgdHlwRm9y bTsKKworCXR5cFR1cCA9IFNlYXJjaFN5c0NhY2hlMShUWVBFT0lELCBPYmplY3RJZEdldERhdHVt KG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR5cFR1cCkpCisJCWVsb2coRVJS T1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB0eXBlIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQp OworCXR5cEZvcm0gPSAoRm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QodHlwVHVwKTsKKworCS8qIFNo b3J0Y3V0IHByb2Nlc3NpbmcgZm9yIHNoZWxsIHR5cGVzLiAqLworCWlmICghdHlwRm9ybS0+dHlw aXNkZWZpbmVkKQorCXsKKwkJc3RtdCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgVFlQRSIsIDAp OworCQlhcHBlbmRfb2JqZWN0X29iamVjdChzdG10LCAiJXtpZGVudGl0eX1EIiwKKwkJCQkJCQkg bmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHR5cEZvcm0tPnR5cG5hbWVzcGFjZSwKKwkJCQkJCQkJ CQkJCQkgIE5hbWVTdHIodHlwRm9ybS0+dHlwbmFtZSkpKTsKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0 KHN0bXQsICJwcmVzZW50IiwgdHJ1ZSk7CisJCVJlbGVhc2VTeXNDYWNoZSh0eXBUdXApOworCQly ZXR1cm4gc3RtdDsKKwl9CisKKwlzdG10ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBUWVBFIiwg MCk7CisJYXBwZW5kX29iamVjdF9vYmplY3Qoc3RtdCwgIiV7aWRlbnRpdHl9RCIsCisJCQkJCQkJ bmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHR5cEZvcm0tPnR5cG5hbWVzcGFjZSwKKwkJCQkJCQkJ CQkJCQlOYW1lU3RyKHR5cEZvcm0tPnR5cG5hbWUpKSk7CisJYXBwZW5kX2Jvb2xfb2JqZWN0KHN0 bXQsICJwcmVzZW50IiwgdHJ1ZSk7CisKKwkvKiBBZGQgdGhlIGRlZmluaXRpb24gY2xhdXNlICov CisJbGlzdCA9IE5JTDsKKworCS8qIElOUFVUICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIihJ TlBVVD0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiaW5wdXQiKTsKKwlh cHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCSBuZXdfb2Jq dHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkg dHlwRm9ybS0+dHlwaW5wdXQpKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29i amVjdCh0bXApKTsKKworCS8qIE9VVFBVVCAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJPVVRQ VVQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgIm91dHB1dCIpOworCWFw cGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJIG5ld19vYmp0 cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSB0 eXBGb3JtLT50eXBvdXRwdXQpKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29i amVjdCh0bXApKTsKKworCS8qIFJFQ0VJVkUgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiUkVD RUlWRT0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicmVjZWl2ZSIpOwor CWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cHJlY2VpdmUpKQorCQlhcHBlbmRfb2JqZWN0X29i amVjdCh0bXAsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBy ZWNlaXZlKSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZh bHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwor CS8qIFNFTkQgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiU0VORD0iLCAxLAorCQkJCQkJICJj bGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAic2VuZCIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0t PnR5cHNlbmQpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle3Byb2NlZHVyZX1EIiwK KwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQs CisJCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBzZW5kKSk7CisJZWxzZQorCQlhcHBlbmRfYm9v bF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBu ZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIFRZUE1PRF9JTiAqLworCXRtcCA9IG5ld19v Ymp0cmVlX1ZBKCJUWVBNT0RfSU49IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmlu ZywgInR5cG1vZF9pbiIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cG1vZGluKSkKKwkJ YXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19v Ymp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJ CQkgdHlwRm9ybS0+dHlwbW9kaW4pKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAs ICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcCkpOworCisJLyogVFlQTU9EX09VVCAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJU WVBNT0RfT1VUPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJ0eXBtb2Rf b3V0Iik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwbW9kb3V0KSkKKwkJYXBwZW5kX29i amVjdF9vYmplY3QodG1wLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHlwRm9y bS0+dHlwbW9kb3V0KSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2Vu dCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXAp KTsKKworCS8qIEFOQUxZWkUgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiQU5BTFlaRT0iLCAx LAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiYW5hbHl6ZSIpOworCWlmIChPaWRJ c1ZhbGlkKHR5cEZvcm0tPnR5cGFuYWx5emUpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAs ICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFBy b2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBhbmFseXplKSk7 CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwls aXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIElOVEVS TkFMTEVOR1RIICovCisJaWYgKHR5cEZvcm0tPnR5cGxlbiA9PSAtMSkKKwl7CisJCXRtcCA9IG5l d19vYmp0cmVlX1ZBKCJJTlRFUk5BTExFTkdUSD1WQVJJQUJMRSIsIDApOworCX0KKwllbHNlCisJ eworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiSU5URVJOQUxMRU5HVEg9JXt0eXBsZW59biIsIDEs CisJCQkJCQkJICJ0eXBsZW4iLCBPYmpUeXBlSW50ZWdlciwgdHlwRm9ybS0+dHlwbGVuKTsKKwl9 CisKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8q IFBBU1NFREJZVkFMVUUgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiUEFTU0VEQllWQUxVRSIs IDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJwYXNzZWRieXZhbHVlIik7CisJ aWYgKCF0eXBGb3JtLT50eXBieXZhbCkKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNl bnQiLCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1w KSk7CisKKwkvKiBBTElHTk1FTlQgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiQUxJR05NRU5U PSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJhbGlnbm1lbnQiKTsKKwkv KiBYWFggaXQncyBvZGQgdG8gcmVwcmVzZW50IGFsaWdubWVudCB3aXRoIHNjaGVtYS1xdWFsaWZp ZWQgdHlwZSBuYW1lcyAqLworCXN3aXRjaCAodHlwRm9ybS0+dHlwYWxpZ24pCisJeworCQljYXNl ICdkJzoKKwkJCXN0ciA9ICJwZ19jYXRhbG9nLmZsb2F0OCI7CisJCQlicmVhazsKKwkJY2FzZSAn aSc6CisJCQlzdHIgPSAicGdfY2F0YWxvZy5pbnQ0IjsKKwkJCWJyZWFrOworCQljYXNlICdzJzoK KwkJCXN0ciA9ICJwZ19jYXRhbG9nLmludDIiOworCQkJYnJlYWs7CisJCWNhc2UgJ2MnOgorCQkJ c3RyID0gInBnX2NhdGFsb2cuYnBjaGFyIjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZWxv ZyhFUlJPUiwgImludmFsaWQgYWxpZ25tZW50ICVjIiwgdHlwRm9ybS0+dHlwYWxpZ24pOworCX0K KwlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICIle2FsaWdufXMiLCBzdHIpOworCWxpc3QgPSBs YXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJdG1wID0gbmV3X29ianRy ZWVfVkEoIlNUT1JBR0U9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInN0 b3JhZ2UiKTsKKwlzd2l0Y2ggKHR5cEZvcm0tPnR5cHN0b3JhZ2UpCisJeworCQljYXNlICdwJzoK KwkJCXN0ciA9ICJwbGFpbiI7CisJCQlicmVhazsKKwkJY2FzZSAnZSc6CisJCQlzdHIgPSAiZXh0 ZXJuYWwiOworCQkJYnJlYWs7CisJCWNhc2UgJ3gnOgorCQkJc3RyID0gImV4dGVuZGVkIjsKKwkJ CWJyZWFrOworCQljYXNlICdtJzoKKwkJCXN0ciA9ICJtYWluIjsKKwkJCWJyZWFrOworCQlkZWZh dWx0OgorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgc3RvcmFnZSBzcGVjaWZpZXIgJWMiLCB0eXBG b3JtLT50eXBzdG9yYWdlKTsKKwl9CisJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXtzdG9y YWdlfXMiLCBzdHIpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRt cCkpOworCisJLyogQ0FURUdPUlkgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiQ0FURUdPUlk9 IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImNhdGVnb3J5Iik7CisJYXBw ZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXtjYXRlZ29yeX1zIiwKKwkJCQkJCSBwc3ByaW50Zigi JWMiLCB0eXBGb3JtLT50eXBjYXRlZ29yeSkpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19v YmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogUFJFRkVSUkVEICovCisJdG1wID0gbmV3X29ianRy ZWVfVkEoIlBSRUZFUlJFRD0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAi cHJlZmVycmVkIik7CisJaWYgKCF0eXBGb3JtLT50eXBpc3ByZWZlcnJlZCkKKwkJYXBwZW5kX2Jv b2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwg bmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBERUZBVUxUICovCisJZGZsdCA9IFN5c0Nh Y2hlR2V0QXR0cihUWVBFT0lELCB0eXBUdXAsCisJCQkJCQkgICBBbnVtX3BnX3R5cGVfdHlwZGVm YXVsdCwKKwkJCQkJCSAgICZpc251bGwpOworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJERUZBVUxU PSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJkZWZhdWx0Iik7CisJaWYg KCFpc251bGwpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgIiV7ZGVmYXVsdH1zIiwgVGV4 dERhdHVtR2V0Q1N0cmluZyhkZmx0KSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1w LCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29i amVjdCh0bXApKTsKKworCS8qIEVMRU1FTlQgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiRUxF TUVOVD0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiZWxlbWVudCIpOwor CWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cGVsZW0pKQorCQlhcHBlbmRfb2JqZWN0X29iamVj dCh0bXAsICJlbGVtIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUodHlwRm9ybS0+dHlw ZWxlbSwgLTEpKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50Iiwg ZmFsc2UpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOwor CisJLyogREVMSU1JVEVSICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIkRFTElNSVRFUj0iLCAx LAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiZGVsaW1pdGVyIik7CisJYXBwZW5k X3N0cmluZ19vYmplY3QodG1wLCAiJXtkZWxpbX1MIiwKKwkJCQkJCSBwc3ByaW50ZigiJWMiLCB0 eXBGb3JtLT50eXBkZWxpbSkpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcCkpOworCisJLyogQ09MTEFUQUJMRSAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJD T0xMQVRBQkxFPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJjb2xsYXRh YmxlIik7CisJaWYgKCFPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cGNvbGxhdGlvbikpCisJCWFwcGVu ZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBwZW5kKGxp c3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJYXBwZW5kX2FycmF5X29iamVjdChzdG10 LCAiJXtlbGVtczosIH1zKSIsIGxpc3QpOworCisJUmVsZWFzZVN5c0NhY2hlKHR5cFR1cCk7CisK KwlyZXR1cm4gc3RtdDsKK30KKworLyoKKyAqIC4uLiBBTFRFUiBDT0xVTU4gLi4uIFNFVC9SRVNF VCAoLi4uKQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX1JlbFNldE9wdGlvbnMoQWx0 ZXJUYWJsZUNtZCAqc3ViY21kKQoreworCUxpc3QJICAgKnNldHMgPSBOSUw7CisJTGlzdENlbGwg ICAqY2VsbDsKKwlPYmpUcmVlCSAgICpyZWxzZXQ7CisJY2hhcgkgICAqZm10OworCWJvb2wJCWlz X3Jlc2V0ID0gc3ViY21kLT5zdWJ0eXBlID09IEFUX1Jlc2V0UmVsT3B0aW9uczsKKworCS8qCisJ ICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIFJFU0VUfFNFVCAoJXtvcHRpb25zOiwgfXMpCisJ ICovCisJaWYgKGlzX3Jlc2V0KQorCQlmbXQgPSAiUkVTRVQgIjsKKwllbHNlCisJCWZtdCA9ICJT RVQgIjsKKworCXJlbHNldCA9IG5ld19vYmp0cmVlKGZtdCk7CisKKwlmb3JlYWNoKGNlbGwsIChM aXN0ICopIHN1YmNtZC0+ZGVmKQorCXsKKwkJRGVmRWxlbQkgICAqZWxlbTsKKwkJT2JqVHJlZQkg ICAqc2V0OworCisJCWVsZW0gPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisJCXNldCA9IGRl cGFyc2VfRGVmRWxlbShlbGVtLCBpc19yZXNldCk7CisJCXNldHMgPSBsYXBwZW5kKHNldHMsIG5l d19vYmplY3Rfb2JqZWN0KHNldCkpOworCX0KKworCUFzc2VydChzZXRzKTsKKwlhcHBlbmRfYXJy YXlfb2JqZWN0KHJlbHNldCwgIigle29wdGlvbnM6LCB9cykiLCBzZXRzKTsKKworCXJldHVybiBy ZWxzZXQ7Cit9CisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKwor CisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisvKgorICog RGVwYXJzZSBhIENyZWF0ZVRyaWdTdG10IChDUkVBVEUgVFJJR0dFUikKKyAqCisgKiBHaXZlbiBh IHRyaWdnZXIgT0lEIGFuZCB0aGUgcGFyc2V0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFu IE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqLworc3Rh dGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVUcmlnU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUg KnBhcnNldHJlZSkKK3sKKwlDcmVhdGVUcmlnU3RtdCAqbm9kZSA9IChDcmVhdGVUcmlnU3RtdCAq KSBwYXJzZXRyZWU7CisJUmVsYXRpb24JcGdfdHJpZ2dlcjsKKwlIZWFwVHVwbGUJdHJpZ1R1cDsK KwlGb3JtX3BnX3RyaWdnZXIgdHJpZ0Zvcm07CisJT2JqVHJlZQkgICAqdHJpZ2dlcjsKKwlPYmpU cmVlCSAgICp0bXBvYmo7CisJaW50CQkJdGduYXJnczsKKwlMaXN0CSAgICpsaXN0OworCUxpc3QJ ICAgKmV2ZW50czsKKworCXBnX3RyaWdnZXIgPSB0YWJsZV9vcGVuKFRyaWdnZXJSZWxhdGlvbklk LCBBY2Nlc3NTaGFyZUxvY2spOworCisJdHJpZ1R1cCA9IGdldF9jYXRhbG9nX29iamVjdF9ieV9v aWQocGdfdHJpZ2dlciwgQW51bV9wZ190cmlnZ2VyX29pZCwgb2JqZWN0SWQpOworCXRyaWdGb3Jt ID0gKEZvcm1fcGdfdHJpZ2dlcikgR0VUU1RSVUNUKHRyaWdUdXApOworCisJLyoKKwkgKiBWZXJi b3NlIHN5bnRheAorCSAqCisJICogQ1JFQVRFICV7Y29uc3RyYWludH1zIFRSSUdHRVIgJXtuYW1l fUkgJXt0aW1lfXMgJXtldmVudHM6IE9SIH1zCisJICogT04gJXtyZWxhdGlvbn1EICV7ZnJvbV90 YWJsZX1zICV7Y29uc3RyYWludF9hdHRyczogfXMKKwkgKiBGT1IgRUFDSCAle2Zvcl9lYWNofXMg JXt3aGVufXMgRVhFQ1VURSBQUk9DRURVUkUgJXtmdW5jdGlvbn1zCisJICovCisJdHJpZ2dlciA9 IG5ld19vYmp0cmVlKCJDUkVBVEUiKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRyaWdnZXIs ICIle2NvbnN0cmFpbnR9cyIsCisJCQkJCQkgbm9kZS0+aXNjb25zdHJhaW50ID8gIkNPTlNUUkFJ TlQiIDogIiIpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QodHJpZ2dlciwgIlRSSUdHRVIgJXtu YW1lfUkiLCBub2RlLT50cmlnbmFtZSk7CisKKwlpZiAobm9kZS0+dGltaW5nID09IFRSSUdHRVJf VFlQRV9CRUZPUkUpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRyaWdnZXIsICIle3RpbWV9cyIs ICJCRUZPUkUiKTsKKwllbHNlIGlmIChub2RlLT50aW1pbmcgPT0gVFJJR0dFUl9UWVBFX0FGVEVS KQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0cmlnZ2VyLCAiJXt0aW1lfXMiLCAiQUZURVIiKTsK KwllbHNlIGlmIChub2RlLT50aW1pbmcgPT0gVFJJR0dFUl9UWVBFX0lOU1RFQUQpCisJCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KHRyaWdnZXIsICIle3RpbWV9cyIsICJJTlNURUFEIE9GIik7CisJZWxz ZQorCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIHRyaWdnZXIgdGltaW5nIHR5cGUgJWQiLCBu b2RlLT50aW1pbmcpOworCisJLyoKKwkgKiBEZWNvZGUgdGhlIGV2ZW50cyB0aGF0IHRoZSB0cmln Z2VyIGZpcmVzIGZvci4gIFRoZSBvdXRwdXQgaXMgYSBsaXN0OworCSAqIGluIG1vc3QgY2FzZXMg aXQgd2lsbCBqdXN0IGJlIGEgc3RyaW5nIHdpdGggdGhlIGV2ZW50IG5hbWUsIGJ1dCB3aGVuCisJ ICogdGhlcmUncyBhbiBVUERBVEUgd2l0aCBhIGxpc3Qgb2YgY29sdW1ucywgd2UgcmV0dXJuIGEg SlNPTiBvYmplY3QuCisJICovCisJZXZlbnRzID0gTklMOworCWlmIChub2RlLT5ldmVudHMgJiBU UklHR0VSX1RZUEVfSU5TRVJUKQorCQlldmVudHMgPSBsYXBwZW5kKGV2ZW50cywgbmV3X3N0cmlu Z19vYmplY3QoIklOU0VSVCIpKTsKKwlpZiAobm9kZS0+ZXZlbnRzICYgVFJJR0dFUl9UWVBFX0RF TEVURSkKKwkJZXZlbnRzID0gbGFwcGVuZChldmVudHMsIG5ld19zdHJpbmdfb2JqZWN0KCJERUxF VEUiKSk7CisJaWYgKG5vZGUtPmV2ZW50cyAmIFRSSUdHRVJfVFlQRV9UUlVOQ0FURSkKKwkJZXZl bnRzID0gbGFwcGVuZChldmVudHMsIG5ld19zdHJpbmdfb2JqZWN0KCJUUlVOQ0FURSIpKTsKKwlp ZiAobm9kZS0+ZXZlbnRzICYgVFJJR0dFUl9UWVBFX1VQREFURSkKKwl7CisJCWlmIChub2RlLT5j b2x1bW5zID09IE5JTCkKKwkJeworCQkJZXZlbnRzID0gbGFwcGVuZChldmVudHMsIG5ld19zdHJp bmdfb2JqZWN0KCJVUERBVEUiKSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlPYmpUcmVlCSAgICp1 cGRhdGU7CisJCQlMaXN0Q2VsbCAgICpjZWxsOworCQkJTGlzdAkgICAqY29scyA9IE5JTDsKKwor CQkJLyoKKwkJCSAqIEN1cnJlbnRseSBvbmx5IFVQREFURSBPRiBjYW4gYmUgb2JqZWN0cyBpbiB0 aGUgb3V0cHV0IEpTT04sIGJ1dAorCQkJICogd2UgYWRkIGEgImtpbmQiIGVsZW1lbnQgc28gdGhh dCB1c2VyIGNvZGUgY2FuIGRpc3Rpbmd1aXNoCisJCQkgKiBwb3NzaWJsZSBmdXR1cmUgbmV3IGV2 ZW50IHR5cGVzLgorCQkJICovCisJCQl1cGRhdGUgPSBuZXdfb2JqdHJlZV9WQSgiVVBEQVRFIE9G IiwgMSwKKwkJCQkJCQkJCSJraW5kIiwgT2JqVHlwZVN0cmluZywgInVwZGF0ZV9vZiIpOworCisJ CQlmb3JlYWNoKGNlbGwsIG5vZGUtPmNvbHVtbnMpCisJCQl7CisJCQkJY2hhciAgICpjb2xuYW1l ID0gc3RyVmFsKGxmaXJzdChjZWxsKSk7CisKKwkJCQljb2xzID0gbGFwcGVuZChjb2xzLCBuZXdf c3RyaW5nX29iamVjdChjb2xuYW1lKSk7CisJCQl9CisKKwkJCWFwcGVuZF9hcnJheV9vYmplY3Qo dXBkYXRlLCAiJXtjb2x1bW5zOiwgfUkiLCBjb2xzKTsKKworCQkJZXZlbnRzID0gbGFwcGVuZChl dmVudHMsIG5ld19vYmplY3Rfb2JqZWN0KHVwZGF0ZSkpOworCQl9CisJfQorCWFwcGVuZF9hcnJh eV9vYmplY3QodHJpZ2dlciwgIiV7ZXZlbnRzOiBPUiB9cyIsIGV2ZW50cyk7CisKKwl0bXBvYmog PSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJ CQkJICB0cmlnRm9ybS0+dGdyZWxpZCk7CisJYXBwZW5kX29iamVjdF9vYmplY3QodHJpZ2dlciwg Ik9OICV7cmVsYXRpb259RCIsIHRtcG9iaik7CisKKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgi RlJPTSIsIDApOworCWlmICh0cmlnRm9ybS0+dGdjb25zdHJyZWxpZCkKKwl7CisJCU9ialRyZWUJ ICAgKnJlbDsKKworCQlyZWwgPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25S ZWxhdGlvbklkLAorCQkJCQkJCQkJCSAgdHJpZ0Zvcm0tPnRnY29uc3RycmVsaWQpOworCQlhcHBl bmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle3JlbGF0aW9ufUQiLCByZWwpOworCX0KKwllbHNl CisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KHRyaWdnZXIsICIle2Zyb21fdGFibGV9cyIsIHRtcG9iaik7CisKKwls aXN0ID0gTklMOworCWlmIChub2RlLT5kZWZlcnJhYmxlKQorCQlsaXN0ID0gbGFwcGVuZChsaXN0 LAorCQkJCQkgICBuZXdfc3RyaW5nX29iamVjdCgiREVGRVJSQUJMRSIpKTsKKwlpZiAobm9kZS0+ aW5pdGRlZmVycmVkKQorCQlsaXN0ID0gbGFwcGVuZChsaXN0LAorCQkJCQkgICBuZXdfc3RyaW5n X29iamVjdCgiSU5JVElBTExZIERFRkVSUkVEIikpOworCWFwcGVuZF9hcnJheV9vYmplY3QodHJp Z2dlciwgIiV7Y29uc3RyYWludF9hdHRyczogfXMiLCBsaXN0KTsKKworCWFwcGVuZF9zdHJpbmdf b2JqZWN0KHRyaWdnZXIsICJGT1IgRUFDSCAle2Zvcl9lYWNofXMiLAorCQkJCQkJIG5vZGUtPnJv dyA/ICJST1ciIDogIlNUQVRFTUVOVCIpOworCisJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIldI RU4iLCAwKTsKKwlpZiAobm9kZS0+d2hlbkNsYXVzZSkKKwl7CisJCU5vZGUJICAgKndoZW5DbGF1 c2U7CisJCURhdHVtCQl2YWx1ZTsKKwkJYm9vbAkJaXNudWxsOworCisJCXZhbHVlID0gZmFzdGdl dGF0dHIodHJpZ1R1cCwgQW51bV9wZ190cmlnZ2VyX3RncXVhbCwKKwkJCQkJCQlSZWxhdGlvbkdl dERlc2NyKHBnX3RyaWdnZXIpLCAmaXNudWxsKTsKKwkJaWYgKGlzbnVsbCkKKwkJCWVsb2coRVJS T1IsICJib2d1cyBOVUxMIHRncXVhbCIpOworCisJCXdoZW5DbGF1c2UgPSBzdHJpbmdUb05vZGUo VGV4dERhdHVtR2V0Q1N0cmluZyh2YWx1ZSkpOworCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBv YmosICIoJXtjbGF1c2V9cykiLAorCQkJCQkJCSBwZ19nZXRfdHJpZ2dlcl93aGVuY2xhdXNlKHRy aWdGb3JtLAorCQkJCQkJCQkJCQkJCSAgIHdoZW5DbGF1c2UsCisJCQkJCQkJCQkJCQkJICAgZmFs c2UpKTsKKwl9CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIs IGZhbHNlKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdCh0cmlnZ2VyLCAiJXt3aGVufXMiLCB0bXBv YmopOworCisJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIiV7ZnVuY25hbWV9RCIsIDEsCisJCQkJ CQkgImZ1bmNuYW1lIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVh bG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgdHJpZ0Zvcm0tPnRn Zm9pZCkpOworCWxpc3QgPSBOSUw7CisJdGduYXJncyA9IHRyaWdGb3JtLT50Z25hcmdzOworCWlm ICh0Z25hcmdzID4gMCkKKwl7CisJCWJ5dGVhICAqdGdhcmdzOworCQljaGFyICAgKmFyZ3N0cjsK KwkJYm9vbAlpc251bGw7CisJCWludAkJZmluZHg7CisJCWludAkJbGVudGdhcmdzOworCQljaGFy ICAgKnA7CisKKwkJdGdhcmdzID0gRGF0dW1HZXRCeXRlYVAoZmFzdGdldGF0dHIodHJpZ1R1cCwK KwkJCQkJCQkJCQkJQW51bV9wZ190cmlnZ2VyX3RnYXJncywKKwkJCQkJCQkJCQkJUmVsYXRpb25H ZXREZXNjcihwZ190cmlnZ2VyKSwKKwkJCQkJCQkJCQkJJmlzbnVsbCkpOworCQlpZiAoaXNudWxs KQorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgTlVMTCB0Z2FyZ3MiKTsKKwkJYXJnc3RyID0gKGNo YXIgKikgVkFSREFUQSh0Z2FyZ3MpOworCQlsZW50Z2FyZ3MgPSBWQVJTSVpFX0FOWV9FWEhEUih0 Z2FyZ3MpOworCisJCXAgPSBhcmdzdHI7CisJCWZvciAoZmluZHggPSAwOyBmaW5keCA8IHRnbmFy Z3M7IGZpbmR4KyspCisJCXsKKwkJCXNpemVfdAl0bGVuOworCisJCQkvKiBWZXJpZnkgdGhhdCB0 aGUgYXJndW1lbnQgZW5jb2RpbmcgaXMgY29ycmVjdCAqLworCQkJdGxlbiA9IHN0cmxlbihwKTsK KwkJCWlmIChwICsgdGxlbiA+PSBhcmdzdHIgKyBsZW50Z2FyZ3MpCisJCQkJZXJlcG9ydChFUlJP UiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJ CQkJIGVycm1zZygiaW52YWxpZCBhcmd1bWVudCBzdHJpbmcgKCVzKSBmb3IgdHJpZ2dlciBcIiVz XCIiLAorCQkJCQkJCQlhcmdzdHIsIE5hbWVTdHIodHJpZ0Zvcm0tPnRnbmFtZSkpKSk7CisKKwkJ CWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KHApKTsKKworCQkJcCArPSB0 bGVuICsgMTsKKwkJfQorCX0KKworCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRtcG9iaiwgIigiKTsK KwlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcG9iaiwgIiV7YXJnczosIH1MIiwgbGlzdCk7CQkvKiBt aWdodCBiZSBOSUwgKi8KKwlhcHBlbmRfZm9ybWF0X3N0cmluZyh0bXBvYmosICIpIik7CisKKwlh cHBlbmRfb2JqZWN0X29iamVjdCh0cmlnZ2VyLCAiRVhFQ1VURSBQUk9DRURVUkUgJXtmdW5jdGlv bn1zIiwgdG1wb2JqKTsKKworCXRhYmxlX2Nsb3NlKHBnX3RyaWdnZXIsIEFjY2Vzc1NoYXJlTG9j ayk7CisKKwlyZXR1cm4gdHJpZ2dlcjsKK30KKworLyoKKyAqIERlcGFyc2UgRGVmRWxlbXMsIGFz IHVzZWQgZS5nLiBieSBBTFRFUiBDT0xVTU4gLi4uIFNFVCwgaW50byBhIGxpc3Qgb2YgU0VUCisg KiAoLi4uKSAgb3IgUkVTRVQgKC4uLikgY29udGVudHMuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoK K2RlcGFyc2VfRGVmRWxlbShEZWZFbGVtICplbGVtLCBib29sIGlzX3Jlc2V0KQoreworCU9ialRy ZWUJICAgKnNldDsKKwlPYmpUcmVlCSAgICpvcHRuYW1lOworCisJc2V0ID0gbmV3X29ianRyZWUo IiIpOworCW9wdG5hbWUgPSBuZXdfb2JqdHJlZSgiIik7CisKKwlpZiAoZWxlbS0+ZGVmbmFtZXNw YWNlICE9IE5VTEwpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KG9wdG5hbWUsICIle3NjaGVtYX1J LiIsIGVsZW0tPmRlZm5hbWVzcGFjZSk7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChvcHRuYW1l LCAiJXtsYWJlbH1JIiwgZWxlbS0+ZGVmbmFtZSk7CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChz ZXQsICIle2xhYmVsfXMiLCBvcHRuYW1lKTsKKworCWlmICghaXNfcmVzZXQpCisJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KHNldCwgIiA9ICV7dmFsdWV9TCIsCisJCQkJCQkJIGVsZW0tPmFyZyA/IGRl ZkdldFN0cmluZyhlbGVtKSA6CisJCQkJCQkJIGRlZkdldEJvb2xlYW4oZWxlbSkgPyAiVFJVRSIg OiAiRkFMU0UiKTsKKworCXJldHVybiBzZXQ7Cit9CisKKy8qCisgKiBIYW5kbGUgZGVwYXJzaW5n IG9mIERST1AgY29tbWFuZHMuCisgKi8KK2NoYXIgKgorZGVwYXJzZV9kcm9wX2NvbW1hbmQoY29u c3QgY2hhciAqb2JqaWRlbnRpdHksIGNvbnN0IGNoYXIgKm9iamVjdHR5cGUsCisJCQkJCSBEcm9w QmVoYXZpb3IgYmVoYXZpb3IpCit7CisJU3RyaW5nSW5mb0RhdGEgIHN0cjsKKwljaGFyCQkgICAq Y29tbWFuZDsKKwljaGFyCQkgICAqaWRlbnRpdHkgPSAoY2hhciAqKSBvYmppZGVudGl0eTsKKwlj aGFyCQkgICAqZm10OworCU9ialRyZWUJCSpzdG10LCAqc3RtdDI7CisJSnNvbmIJCSAgKmpzb25i OworCisJaW5pdFN0cmluZ0luZm8oJnN0cik7CisKKwlmbXQgPSBwc3ByaW50ZigiRFJPUCAlcyBJ RiBFWElTVFMgJSV7b2JqaWRlbnRpdHl9cyIsIG9iamVjdHR5cGUpOworCisJc3RtdCA9IG5ld19v Ymp0cmVlX1ZBKGZtdCwgMSwgIm9iamlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywgaWRlbnRpdHkp OworCXN0bXQyID0gbmV3X29ianRyZWVfVkEoIkNBU0NBREUiLCAxLAorCQkJCQkJICAgInByZXNl bnQiLCBPYmpUeXBlQm9vbCwgYmVoYXZpb3IgPT0gRFJPUF9DQVNDQURFKTsKKworCWFwcGVuZF9v YmplY3Rfb2JqZWN0KHN0bXQsICIle2Nhc2NhZGV9cyIsIHN0bXQyKTsKKworCWpzb25iID0gb2Jq dHJlZV90b19qc29uYihzdG10KTsKKwljb21tYW5kID0gSnNvbmJUb0NTdHJpbmcoJnN0ciwgJmpz b25iLT5yb290LCBKU09OQl9FU1RJTUFURURfTEVOKTsKKworCXJldHVybiBjb21tYW5kOworfQor CisvKgorICogSGFuZGxlIGRlcGFyc2luZyBzZXR0aW5nIG9mIEZ1bmN0aW9uCisgKi8KK3N0YXRp YyBPYmpUcmVlICoKK2RlcGFyc2VfRnVuY3Rpb25TZXQoVmFyaWFibGVTZXRLaW5kIGtpbmQsIGNo YXIgKm5hbWUsIGNoYXIgKnZhbHVlKQoreworCU9ialRyZWUJICAgKm9iajsKKworCWlmIChraW5k ID09IFZBUl9SRVNFVF9BTEwpCisJeworCQlvYmogPSBuZXdfb2JqdHJlZSgiUkVTRVQgQUxMIik7 CisJfQorCWVsc2UgaWYgKHZhbHVlICE9IE5VTEwpCisJeworCQlvYmogPSBuZXdfb2JqdHJlZV9W QSgiU0VUICV7c2V0X25hbWV9SSIsIDEsCisJCQkJCQkgICAic2V0X25hbWUiLCBPYmpUeXBlU3Ry aW5nLCBuYW1lKTsKKworCQkvKgorCQkgKiBTb21lIEdVQyB2YXJpYWJsZSBuYW1lcyBhcmUgJ0xJ U1QnIHR5cGUgYW5kIGhlbmNlIG11c3Qgbm90IGJlCisJCSAqIHF1b3RlZC4KKwkJICovCisJCWlm IChHZXRDb25maWdPcHRpb25GbGFncyhuYW1lLCB0cnVlKSAmIEdVQ19MSVNUX1FVT1RFKQorCQkJ YXBwZW5kX3N0cmluZ19vYmplY3Qob2JqLCAiVE8gJXtzZXRfdmFsdWV9cyIsIHZhbHVlKTsKKwkJ ZWxzZQorCQkJYXBwZW5kX3N0cmluZ19vYmplY3Qob2JqLCAiVE8gJXtzZXRfdmFsdWV9TCIsIHZh bHVlKTsKKwl9CisJZWxzZQorCXsKKwkJb2JqID0gbmV3X29ianRyZWUoIlJFU0VUIik7CisJCWFw cGVuZF9zdHJpbmdfb2JqZWN0KG9iaiwgIiV7c2V0X25hbWV9SSIsIG5hbWUpOworCX0KKworCXJl dHVybiBvYmo7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEluZGV4U3RtdC4KKyAqCisgKiBHaXZl biBhbiBpbmRleCBPSUQgYW5kIHRoZSBwYXJzZXRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4g YW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICoKKyAq IElmIHRoZSBpbmRleCBjb3JyZXNwb25kcyB0byBhIGNvbnN0cmFpbnQsIE5VTEwgaXMgcmV0dXJu ZWQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfSW5kZXhTdG10KE9pZCBvYmplY3RJ ZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUluZGV4U3RtdCAgKm5vZGUgPSAoSW5kZXhTdG10ICop IHBhcnNldHJlZTsKKwlPYmpUcmVlCSAgICppbmRleFN0bXQ7CisJT2JqVHJlZQkgICAqdG1wb2Jq OworCVJlbGF0aW9uCWlkeHJlbDsKKwlSZWxhdGlvbgloZWFwcmVsOworCWNoYXIJICAgKmluZGV4 X2FtOworCWNoYXIJICAgKmRlZmluaXRpb247CisJY2hhcgkgICAqcmVsb3B0aW9uczsKKwljaGFy CSAgICp0YWJsZXNwYWNlOworCWNoYXIJICAgKndoZXJlQ2xhdXNlOworCisJaWYgKG5vZGUtPnBy aW1hcnkgfHwgbm9kZS0+aXNjb25zdHJhaW50KQorCXsKKwkJLyoKKwkJICogSW5kZXhlcyBmb3Ig UFJJTUFSWSBLRVkgYW5kIG90aGVyIGNvbnN0cmFpbnRzIGFyZSBvdXRwdXQKKwkJICogc2VwYXJh dGVseTsgcmV0dXJuIGVtcHR5IGhlcmUuCisJCSAqLworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlp ZHhyZWwgPSByZWxhdGlvbl9vcGVuKG9iamVjdElkLCBBY2Nlc3NTaGFyZUxvY2spOworCWhlYXBy ZWwgPSByZWxhdGlvbl9vcGVuKGlkeHJlbC0+cmRfaW5kZXgtPmluZHJlbGlkLCBBY2Nlc3NTaGFy ZUxvY2spOworCisJcGdfZ2V0X2luZGV4ZGVmX2RldGFpbGVkKG9iamVjdElkLAorCQkJCQkJCSAm aW5kZXhfYW0sICZkZWZpbml0aW9uLCAmcmVsb3B0aW9ucywKKwkJCQkJCQkgJnRhYmxlc3BhY2Us ICZ3aGVyZUNsYXVzZSk7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBDUkVB VEUgJXt1bmlxdWV9cyBJTkRFWCAle2NvbmN1cnJlbnRseX1zICV7aWZfbm90X2V4aXN0c31zICV7 bmFtZX1JIE9OCisJICogJXt0YWJsZX1EIFVTSU5HICV7aW5kZXhfYW19cyAoJXtkZWZpbml0aW9u fXMpICV7d2l0aH1zICV7dGFibGVzcGFjZX1zCisJICogJXt3aGVyZV9jbGF1c2V9cworCSAqLwor CWluZGV4U3RtdCA9IG5ld19vYmp0cmVlKCJDUkVBVEUiKTsKKworCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KGluZGV4U3RtdCwgIiV7dW5pcXVlfXMiLAorCQkJCQkJIG5vZGUtPnVuaXF1ZSA/ICJVTklR VUUiIDogIiIpOworCisJYXBwZW5kX2Zvcm1hdF9zdHJpbmcoaW5kZXhTdG10LCAiSU5ERVgiKTsK KworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGluZGV4U3RtdCwgIiV7Y29uY3VycmVudGx5fXMiLAor CQkJCQkJIG5vZGUtPmNvbmN1cnJlbnQgPyAiQ09OQ1VSUkVOVExZIiA6ICIiKTsKKworCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KGluZGV4U3RtdCwgIiV7aWZfbm90X2V4aXN0c31zIiwKKwkJCQkJCSBu b2RlLT5pZl9ub3RfZXhpc3RzID8gIklGIE5PVCBFWElTVFMiIDogIiIpOworCisJYXBwZW5kX3N0 cmluZ19vYmplY3QoaW5kZXhTdG10LCAiJXtuYW1lfUkiLAorCQkJCQkJIFJlbGF0aW9uR2V0UmVs YXRpb25OYW1lKGlkeHJlbCkpOworCisJYXBwZW5kX29iamVjdF9vYmplY3QoaW5kZXhTdG10LCAi T04gJXt0YWJsZX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoaGVhcHJlbC0+ cmRfcmVsLT5yZWxuYW1lc3BhY2UsCisJCQkJCQkgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoaGVh cHJlbCkpKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGluZGV4U3RtdCwgIlVTSU5HICV7aW5k ZXhfYW19cyIsIGluZGV4X2FtKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGluZGV4U3RtdCwg Iigle2RlZmluaXRpb259cykiLCBkZWZpbml0aW9uKTsKKworCS8qIHJlbG9wdGlvbnMgKi8KKwl0 bXBvYmogPSBuZXdfb2JqdHJlZSgiV0lUSCIpOworCWlmIChyZWxvcHRpb25zKQorCQlhcHBlbmRf c3RyaW5nX29iamVjdCh0bXBvYmosICIoJXtvcHRzfXMpIiwgcmVsb3B0aW9ucyk7CisJZWxzZQor CQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwlhcHBlbmRf b2JqZWN0X29iamVjdChpbmRleFN0bXQsICIle3dpdGh9cyIsIHRtcG9iaik7CisKKwkvKiB0YWJs ZXNwYWNlICovCisJdG1wb2JqID0gbmV3X29ianRyZWUoIlRBQkxFU1BBQ0UiKTsKKwlpZiAodGFi bGVzcGFjZSkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXt0YWJsZXNwYWNlfXMi LCB0YWJsZXNwYWNlKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVz ZW50IiwgZmFsc2UpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGluZGV4U3RtdCwgIiV7dGFibGVz cGFjZX1zIiwgdG1wb2JqKTsKKworCS8qIFdIRVJFIGNsYXVzZSAqLworCXRtcG9iaiA9IG5ld19v Ymp0cmVlKCJXSEVSRSIpOworCWlmICh3aGVyZUNsYXVzZSkKKwkJYXBwZW5kX3N0cmluZ19vYmpl Y3QodG1wb2JqLCAiJXt3aGVyZX1zIiwgd2hlcmVDbGF1c2UpOworCWVsc2UKKwkJYXBwZW5kX2Jv b2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJYXBwZW5kX29iamVjdF9vYmpl Y3QoaW5kZXhTdG10LCAiJXt3aGVyZV9jbGF1c2V9cyIsIHRtcG9iaik7CisKKwl0YWJsZV9jbG9z ZShpZHhyZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisJdGFibGVfY2xvc2UoaGVhcHJlbCwgQWNjZXNz U2hhcmVMb2NrKTsKKworCXJldHVybiBpbmRleFN0bXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRo ZSBJTkhFUklUUyByZWxhdGlvbnMuCisgKgorICogR2l2ZW4gYSB0YWJsZSBPSUQsIHJldHVybiBh IHNjaGVtYSBxdWFsaWZpZWQgdGFibGUgbGlzdCByZXByZXNlbnRpbmcKKyAqIHRoZSBwYXJlbnQg dGFibGVzLgorICovCitzdGF0aWMgTGlzdCAqCitkZXBhcnNlX0luaFJlbGF0aW9ucyhPaWQgb2Jq ZWN0SWQpCit7CisJTGlzdAkgICAqcGFyZW50cyA9IE5JTDsKKwlSZWxhdGlvbglpbmhSZWw7CisJ U3lzU2NhbkRlc2Mgc2NhbjsKKwlTY2FuS2V5RGF0YSBrZXk7CisJSGVhcFR1cGxlCXR1cGxlOwor CisJaW5oUmVsID0gdGFibGVfb3BlbihJbmhlcml0c1JlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxv Y2spOworCisJU2NhbktleUluaXQoJmtleSwKKwkJCQlBbnVtX3BnX2luaGVyaXRzX2luaHJlbGlk LAorCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQlPYmplY3RJZEdldERh dHVtKG9iamVjdElkKSk7CisKKwlzY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKGluaFJlbCwgSW5o ZXJpdHNSZWxpZFNlcW5vSW5kZXhJZCwKKwkJCQkJCQkgIHRydWUsIE5VTEwsIDEsICZrZXkpOwor CisJd2hpbGUgKEhlYXBUdXBsZUlzVmFsaWQodHVwbGUgPSBzeXN0YWJsZV9nZXRuZXh0KHNjYW4p KSkKKwl7CisJCU9ialRyZWUJKnBhcmVudDsKKwkJRm9ybV9wZ19pbmhlcml0cyBmb3JtSW5oID0g KEZvcm1fcGdfaW5oZXJpdHMpIEdFVFNUUlVDVCh0dXBsZSk7CisKKwkJcGFyZW50ID0gbmV3X29i anRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJIGZv cm1JbmgtPmluaHBhcmVudCk7CisJCXBhcmVudHMgPSBsYXBwZW5kKHBhcmVudHMsIG5ld19vYmpl Y3Rfb2JqZWN0KHBhcmVudCkpOworCX0KKworCXN5c3RhYmxlX2VuZHNjYW4oc2Nhbik7CisJdGFi bGVfY2xvc2UoaW5oUmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCXJldHVybiBwYXJlbnRzOwor fQorCisvKgorICogRGVwYXJzZSB0aGUgT04gQ09NTU1JVCAuLi4gY2xhdXNlIGZvciBDUkVBVEUg Li4uIFRFTVBPUkFSWSAuLi4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9PbkNvbW1p dENsYXVzZShPbkNvbW1pdEFjdGlvbiBvcHRpb24pCit7CisJT2JqVHJlZQkgICAqb25jb21taXQ7 CisKKwlvbmNvbW1pdCA9IG5ld19vYmp0cmVlKCJPTiBDT01NSVQiKTsKKwlzd2l0Y2ggKG9wdGlv bikKKwl7CisJCWNhc2UgT05DT01NSVRfRFJPUDoKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KG9u Y29tbWl0LCAiJXtvbl9jb21taXRfdmFsdWV9cyIsICJEUk9QIik7CisJCQlicmVhazsKKworCQlj YXNlIE9OQ09NTUlUX0RFTEVURV9ST1dTOgorCQkJYXBwZW5kX3N0cmluZ19vYmplY3Qob25jb21t aXQsICIle29uX2NvbW1pdF92YWx1ZX1zIiwgIkRFTEVURSBST1dTIik7CisJCQlicmVhazsKKwor CQljYXNlIE9OQ09NTUlUX1BSRVNFUlZFX1JPV1M6CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChv bmNvbW1pdCwgIiV7b25fY29tbWl0X3ZhbHVlfXMiLCAiUFJFU0VSVkUgUk9XUyIpOworCQkJYnJl YWs7CisKKwkJY2FzZSBPTkNPTU1JVF9OT09QOgorCQkJYXBwZW5kX251bGxfb2JqZWN0KG9uY29t bWl0LCAiJXtvbl9jb21taXRfdmFsdWV9cyIpOworCQkJYXBwZW5kX2Jvb2xfb2JqZWN0KG9uY29t bWl0LCAicHJlc2VudCIsIGZhbHNlKTsKKwkJCWJyZWFrOworCX0KKworCXJldHVybiBvbmNvbW1p dDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBSZW5hbWVTdG10LgorICovCitzdGF0aWMgT2JqVHJl ZSAqCitkZXBhcnNlX1JlbmFtZVN0bXQoT2JqZWN0QWRkcmVzcyBhZGRyZXNzLCBOb2RlICpwYXJz ZXRyZWUpCit7CisJUmVuYW1lU3RtdCAqbm9kZSA9IChSZW5hbWVTdG10ICopIHBhcnNldHJlZTsK KwlPYmpUcmVlCSAgICpyZW5hbWVTdG10OworCWNoYXIJICAgKmZtdHN0cjsKKwljb25zdCBjaGFy ICpvYmp0eXBlOworCVJlbGF0aW9uCXJlbGF0aW9uOworCU9pZAkJCXNjaGVtYUlkOworCisJLyoK KwkgKiBJbiBhbiBBTFRFUiAuLiBSRU5BTUUgY29tbWFuZCwgd2UgZG9uJ3QgaGF2ZSB0aGUgb3Jp Z2luYWwgbmFtZSBvZiB0aGUKKwkgKiBvYmplY3QgaW4gc3lzdGVtIGNhdGFsb2dzOiBzaW5jZSB3 ZSBpbnNwZWN0IHRoZW0gYWZ0ZXIgdGhlIGNvbW1hbmQgaGFzCisJICogZXhlY3V0ZWQsIHRoZSBv bGQgbmFtZSBpcyBhbHJlYWR5IGdvbmUuICBUaGVyZWZvcmUsIHdlIGV4dHJhY3QgaXQgZnJvbQor CSAqIHRoZSBwYXJzZSBub2RlLiAgTm90ZSB3ZSBzdGlsbCBleHRyYWN0IHRoZSBzY2hlbWEgbmFt ZSBmcm9tIHRoZSBjYXRhbG9nCisJICogKGl0IG1pZ2h0IG5vdCBiZSBwcmVzZW50IGluIHRoZSBw YXJzZSBub2RlKTsgaXQgY2Fubm90IHBvc3NpYmx5IGhhdmUKKwkgKiBjaGFuZ2VkIGFueXdheS4K KwkgKi8KKwlzd2l0Y2ggKG5vZGUtPnJlbmFtZVR5cGUpCisJeworCQljYXNlIE9CSkVDVF9UQUJM RToKKwkJY2FzZSBPQkpFQ1RfSU5ERVg6CisJCWNhc2UgT0JKRUNUX1NFUVVFTkNFOgorCisJCQkv KgorCQkJICogVmVyYm9zZSBzeW50YXgKKwkJCSAqCisJCQkgKiBBTFRFUiAlcyAle2lmX2V4aXN0 c31zICV7aWRlbnRpdHl9RCBSRU5BTUUgVE8gJXtuZXduYW1lfUkKKwkJCSAqLworCQkJb2JqdHlw ZSA9IHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPnJlbmFtZVR5cGUpOworCQkJZm10c3RyID0gcHNw cmludGYoIkFMVEVSICVzIiwgb2JqdHlwZSk7CisJCQlyZWxhdGlvbiA9IHJlbGF0aW9uX29wZW4o YWRkcmVzcy5vYmplY3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCXNjaGVtYUlkID0gUmVsYXRp b25HZXROYW1lc3BhY2UocmVsYXRpb24pOworCQkJcmVuYW1lU3RtdCA9IG5ld19vYmp0cmVlX1ZB KGZtdHN0ciwgMCk7CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZW5hbWVTdG10LCAiJXtpZl9l eGlzdHN9cyIsCisJCQkJCQkJCSBub2RlLT5taXNzaW5nX29rID8gIklGIEVYSVNUUyIgOiAiIik7 CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZW5hbWVTdG10LCAiJXtpZGVudGl0eX1EIiwKKwkJ CQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShzY2hlbWFJZCwKKwkJCQkJCQkJCQkJCQkJ ICBub2RlLT5yZWxhdGlvbi0+cmVsbmFtZSkpOworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmVu YW1lU3RtdCwgIlJFTkFNRSBUTyAle25ld25hbWV9SSIsCisJCQkJCQkJCSBub2RlLT5uZXduYW1l KTsKKwkJCXJlbGF0aW9uX2Nsb3NlKHJlbGF0aW9uLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJYnJl YWs7CisKKwkJY2FzZSBPQkpFQ1RfUE9MSUNZOgorCQkJeworCQkJCUhlYXBUdXBsZQlwb2xUdXA7 CisJCQkJRm9ybV9wZ19wb2xpY3kgcG9sRm9ybTsKKwkJCQlSZWxhdGlvbglwZ19wb2xpY3k7CisJ CQkJU2NhbktleURhdGEJa2V5OworCQkJCVN5c1NjYW5EZXNjCXNjYW47CisKKwkJCQlwZ19wb2xp Y3kgPSByZWxhdGlvbl9vcGVuKFBvbGljeVJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJ CQkJU2NhbktleUluaXQoJmtleSwgQW51bV9wZ19wb2xpY3lfb2lkLAorCQkJCQkJCUJURXF1YWxT dHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQkJCQlPYmplY3RJZEdldERhdHVtKGFkZHJlc3Mu b2JqZWN0SWQpKTsKKwkJCQlzY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKHBnX3BvbGljeSwgUG9s aWN5T2lkSW5kZXhJZCwgdHJ1ZSwKKwkJCQkJCQkJCQkgIE5VTEwsIDEsICZrZXkpOworCQkJCXBv bFR1cCA9IHN5c3RhYmxlX2dldG5leHQoc2Nhbik7CisJCQkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlk KHBvbFR1cCkpCisJCQkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBwb2xp Y3kgJXUiLCBhZGRyZXNzLm9iamVjdElkKTsKKwkJCQlwb2xGb3JtID0gKEZvcm1fcGdfcG9saWN5 KSBHRVRTVFJVQ1QocG9sVHVwKTsKKworCQkJCXJlbmFtZVN0bXQgPSBuZXdfb2JqdHJlZV9WQSgi QUxURVIgUE9MSUNZIiwgMCk7CisJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmVuYW1lU3RtdCwg IiV7aWZfZXhpc3RzfXMiLAorCQkJCQkJCQkJIG5vZGUtPm1pc3Npbmdfb2sgPyAiSUYgRVhJU1RT IiA6ICIiKTsKKwkJCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZW5hbWVTdG10LCAiJXtwb2xpY3lu YW1lfUkiLCBub2RlLT5zdWJuYW1lKTsKKwkJCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZW5hbWVT dG10LCAiT04gJXtpZGVudGl0eX1EIiwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5h bWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJIHBvbEZvcm0tPnBvbHJlbGlkKSk7 CisJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmVuYW1lU3RtdCwgIlJFTkFNRSBUTyAle25ld25h bWV9SSIsCisJCQkJCQkJCQkgbm9kZS0+bmV3bmFtZSk7CisJCQkJc3lzdGFibGVfZW5kc2Nhbihz Y2FuKTsKKwkJCQlyZWxhdGlvbl9jbG9zZShwZ19wb2xpY3ksIEFjY2Vzc1NoYXJlTG9jayk7CisK KwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgT0JKRUNUX0FUVFJJQlVURToKKwkJY2FzZSBPQkpF Q1RfQ09MVU1OOgorCQkJcmVsYXRpb24gPSByZWxhdGlvbl9vcGVuKGFkZHJlc3Mub2JqZWN0SWQs IEFjY2Vzc1NoYXJlTG9jayk7CisJCQlzY2hlbWFJZCA9IFJlbGF0aW9uR2V0TmFtZXNwYWNlKHJl bGF0aW9uKTsKKworCQkJLyoKKwkJCSAqIFZlcmJvc2Ugc3ludGF4CisJCQkgKgorCQkJICogQ29t cG9zaXRlIHR5cGVzOiBBTFRFUiBvYmp0eXBlICV7aWRlbnRpdHl9RCBSRU5BTUUgQVRUUklCVVRF CisJCQkgKiAle2NvbG5hbWV9SSBUTyAle25ld25hbWV9SSAle2Nhc2NhZGV9cworCQkJICoKKwkJ CSAqIE5vcm1hbCB0eXBlczogQUxURVIgb2JqdHlwZSAle2lmX2V4aXN0c31zICUle2lkZW50aXR5 fUQgUkVOQU1FCisJCQkgKiBDT0xVTU4gJXtjb2xuYW1lfUkgVE8gJXtuZXduYW1lfUkKKwkJCSAq LworCisJCQlpZiAobm9kZS0+cmVuYW1lVHlwZSA9PSBPQkpFQ1RfQVRUUklCVVRFKQorCQkJewor CQkJCXJlbmFtZVN0bXQgPSBuZXdfb2JqdHJlZSgiQUxURVIgVFlQRSIpOworCQkJCQkJYXBwZW5k X29iamVjdF9vYmplY3QocmVuYW1lU3RtdCwgIiV7aWRlbnRpdHl9RCIsCisJCQkJCQkJCSBuZXdf b2JqdHJlZV9mb3JfcXVhbG5hbWUoc2NoZW1hSWQsCisJCQkJCQkJCQkJCQkJCSAgbm9kZS0+cmVs YXRpb24tPnJlbG5hbWUpKTsKKwkJCQlmbXRzdHIgPSBwc3ByaW50ZigiUkVOQU1FIEFUVFJJQlVU RSAlJXtjb2xuYW1lfUkiKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlvYmp0eXBlID0gc3Ry aW5naWZ5X29ianR5cGUobm9kZS0+cmVsYXRpb25UeXBlKTsKKwkJCQlmbXRzdHIgPSBwc3ByaW50 ZigiQUxURVIgJXMiLCBvYmp0eXBlKTsKKwkJCQlyZW5hbWVTdG10ID0gbmV3X29ianRyZWUoZm10 c3RyKTsKKworCQkJCS8qIENvbXBvc2l0ZSB0eXBlcyBkbyBub3Qgc3VwcG9ydCBJRiBFWElTVFMg Ki8KKwkJCQlpZiAobm9kZS0+cmVuYW1lVHlwZSA9PSBPQkpFQ1RfQ09MVU1OKQorCQkJCQlhcHBl bmRfc3RyaW5nX29iamVjdChyZW5hbWVTdG10LCAiJXtpZl9leGlzdHN9cyIsCisJCQkJCQkJCQkJ bm9kZS0+bWlzc2luZ19vayA/ICJJRiBFWElTVFMiIDogIiIpOworCisJCQkJYXBwZW5kX29iamVj dF9vYmplY3QocmVuYW1lU3RtdCwgIiV7aWRlbnRpdHl9RCIsCisJCQkJCQkJCQkgbmV3X29ianRy ZWVfZm9yX3F1YWxuYW1lKHNjaGVtYUlkLAorCQkJCQkJCQkJCQkJCQkJICBub2RlLT5yZWxhdGlv bi0+cmVsbmFtZSkpOworCQkJCWZtdHN0ciA9IHBzcHJpbnRmKCJSRU5BTUUgQ09MVU1OICUle2Nv bG5hbWV9SSIpOworCQkJfQorCisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZW5hbWVTdG10LCBm bXRzdHIsIG5vZGUtPnN1Ym5hbWUpOworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmVuYW1lU3Rt dCwgIlRPICV7bmV3bmFtZX1JIiwgbm9kZS0+bmV3bmFtZSk7CisKKwkJCWlmIChub2RlLT5yZW5h bWVUeXBlID09IE9CSkVDVF9BVFRSSUJVVEUpCisJCQkJYXBwZW5kX29iamVjdF9vYmplY3QocmVu YW1lU3RtdCwgIiV7Y2FzY2FkZX1zIiwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9WQSgiQ0FTQ0FE RSIsIDEsCisJCQkJCQkJCQkJCQkJInByZXNlbnQiLCBPYmpUeXBlQm9vbCwKKwkJCQkJCQkJCQkJ CQlub2RlLT5iZWhhdmlvciA9PSBEUk9QX0NBU0NBREUpKTsKKworCQkJcmVsYXRpb25fY2xvc2Uo cmVsYXRpb24sIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9G VU5DVElPTjoKKwkJCXsKKwkJCQljaGFyCSppZGVudDsKKwkJCQlIZWFwVHVwbGUgcHJvY3R1cDsK KwkJCQlGb3JtX3BnX3Byb2MgcHJvY2Zvcm07CisJCQkJTGlzdAkgICAqaWRlbnRpdHk7CisKKwkJ CQlBc3NlcnQoSXNBKG5vZGUtPm9iamVjdCwgT2JqZWN0V2l0aEFyZ3MpKTsKKwkJCQlpZGVudGl0 eSA9ICgoT2JqZWN0V2l0aEFyZ3MgKikgbm9kZS0+b2JqZWN0KS0+b2JqbmFtZTsKKworCQkJCXBy b2N0dXAgPSBTZWFyY2hTeXNDYWNoZTEoUFJPQ09JRCwKKwkJCQkJCQkJCQkgIE9iamVjdElkR2V0 RGF0dW0oYWRkcmVzcy5vYmplY3RJZCkpOworCQkJCWlmICghSGVhcFR1cGxlSXNWYWxpZChwcm9j dHVwKSkKKwkJCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHByb2NlZHVy ZSAldSIsCisJCQkJCQkgYWRkcmVzcy5vYmplY3RJZCk7CisJCQkJcHJvY2Zvcm0gPSAoRm9ybV9w Z19wcm9jKSBHRVRTVFJVQ1QocHJvY3R1cCk7CisKKwkJCQkvKiBYWFggZG9lcyB0aGlzIHdvcmsg Zm9yIG9yZGVyZWQtc2V0IGFnZ3JlZ2F0ZXM/ICovCisJCQkJaWRlbnQgPSBwc3ByaW50ZigiJXMl cyIsCisJCQkJCQkJCSBxdW90ZV9xdWFsaWZpZWRfaWRlbnRpZmllcihnZXRfbmFtZXNwYWNlX25h bWUocHJvY2Zvcm0tPnByb25hbWVzcGFjZSksCisJCQkJCQkJCQkJCQkJCQlzdHJWYWwobGxhc3Qo aWRlbnRpdHkpKSksCisJCQkJCQkJCSBmb3JtYXRfcHJvY2VkdXJlX2FyZ3MoYWRkcmVzcy5vYmpl Y3RJZCwgdHJ1ZSkpOworCisJCQkJZm10c3RyID0gcHNwcmludGYoIkFMVEVSICVzICUle2lkZW50 aXR5fXMgUkVOQU1FIFRPICUle25ld25hbWV9SSIsCisJCQkJCQkJCSAgc3RyaW5naWZ5X29ianR5 cGUobm9kZS0+cmVuYW1lVHlwZSkpOworCQkJCXJlbmFtZVN0bXQgPSBuZXdfb2JqdHJlZV9WQShm bXRzdHIsIDIsCisJCQkJCQkJCQkJCSJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIGlkZW50LAor CQkJCQkJCQkJCQkibmV3bmFtZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPm5ld25hbWUpOworCisJ CQkJUmVsZWFzZVN5c0NhY2hlKHByb2N0dXApOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBP QkpFQ1RfT1BDTEFTUzoKKwkJCXsKKwkJCQlIZWFwVHVwbGUgICBvcGNUdXA7CisJCQkJRm9ybV9w Z19vcGNsYXNzIG9wY0Zvcm07CisJCQkJTGlzdAkgICAqb2xkbmFtZXM7CisJCQkJY2hhcgkgICAq c2NoZW1hbmFtZTsKKwkJCQljaGFyCSAgICpvcGNuYW1lOworCQkJCWNoYXIJICAgKmZtdDsKKwor CQkJCWZtdCA9IHBzcHJpbnRmKCJBTFRFUiAlcyAlJXtpZGVudGl0eX1EIFVTSU5HICUle2luZGV4 X21ldGhvZH1zIFJFTkFNRSBUTyAlJXtuZXduYW1lfUkiLAorCQkJCQkJCSAgIHN0cmluZ2lmeV9v Ymp0eXBlKG5vZGUtPnJlbmFtZVR5cGUpKTsKKworCQkJCW9wY1R1cCA9IFNlYXJjaFN5c0NhY2hl MShDTEFPSUQsIE9iamVjdElkR2V0RGF0dW0oYWRkcmVzcy5vYmplY3RJZCkpOworCQkJCWlmICgh SGVhcFR1cGxlSXNWYWxpZChvcGNUdXApKQorCQkJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3Vw IGZhaWxlZCBmb3Igb3BjbGFzcyB3aXRoIE9JRCAldSIsCisJCQkJCQkgYWRkcmVzcy5vYmplY3RJ ZCk7CisKKwkJCQlvcGNGb3JtID0gKEZvcm1fcGdfb3BjbGFzcykgR0VUU1RSVUNUKG9wY1R1cCk7 CisKKwkJCQlvbGRuYW1lcyA9IGxpc3RfY29weV90YWlsKChMaXN0ICopIG5vZGUtPm9iamVjdCwg MSk7CisKKwkJCQkvKiBkZWNvbnN0cnVjdCB0aGUgbmFtZSBsaXN0ICovCisJCQkJRGVjb25zdHJ1 Y3RRdWFsaWZpZWROYW1lKG9sZG5hbWVzLCAmc2NoZW1hbmFtZSwgJm9wY25hbWUpOworCisJCQkJ cmVuYW1lU3RtdCA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMywKKwkJCQkJCQkJCQkJImlkZW50aXR5 IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKG9w Y0Zvcm0tPm9wY25hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJCQkJIG9wY25hbWUpLAorCQkJCQkJ CQkJCQkiaW5kZXhfbWV0aG9kIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkJZ2V0X2FtX25h bWUob3BjRm9ybS0+b3BjbWV0aG9kKSwKKwkJCQkJCQkJCQkJIm5ld25hbWUiLCBPYmpUeXBlU3Ry aW5nLCBub2RlLT5uZXduYW1lKTsKKworCQkJCVJlbGVhc2VTeXNDYWNoZShvcGNUdXApOworCQkJ fQorCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpFQ1RfT1BGQU1JTFk6CisJCQl7CisJCQkJSGVhcFR1 cGxlICAgb3BmVHVwOworCQkJCUhlYXBUdXBsZSAgIGFtVHVwOworCQkJCUZvcm1fcGdfb3BmYW1p bHkgb3BmRm9ybTsKKwkJCQlGb3JtX3BnX2FtICBhbUZvcm07CisJCQkJTGlzdAkgICAqb2xkbmFt ZXM7CisJCQkJY2hhcgkgICAqc2NoZW1hbmFtZTsKKwkJCQljaGFyCSAgICpvcGZuYW1lOworCQkJ CWNoYXIJICAgKmZtdDsKKworCQkJCWZtdCA9IHBzcHJpbnRmKCJBTFRFUiAlcyAlJXtpZGVudGl0 eX1EIFVTSU5HICUle2luZGV4X21ldGhvZH1zIFJFTkFNRSBUTyAlJXtuZXduYW1lfUkiLAorCQkJ CQkJCSAgIHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPnJlbmFtZVR5cGUpKTsKKworCQkJCW9wZlR1 cCA9IFNlYXJjaFN5c0NhY2hlMShPUEZBTUlMWU9JRCwgYWRkcmVzcy5vYmplY3RJZCk7CisJCQkJ aWYgKCFIZWFwVHVwbGVJc1ZhbGlkKG9wZlR1cCkpCisJCQkJCWVsb2coRVJST1IsICJjYWNoZSBs b29rdXAgZmFpbGVkIGZvciBvcGVyYXRvciBmYW1pbHkgd2l0aCBPSUQgJXUiLAorCQkJCQkJIGFk ZHJlc3Mub2JqZWN0SWQpOworCQkJCW9wZkZvcm0gPSAoRm9ybV9wZ19vcGZhbWlseSkgR0VUU1RS VUNUKG9wZlR1cCk7CisKKwkJCQlhbVR1cCA9IFNlYXJjaFN5c0NhY2hlMShBTU9JRCwgT2JqZWN0 SWRHZXREYXR1bShvcGZGb3JtLT5vcGZtZXRob2QpKTsKKwkJCQlpZiAoIUhlYXBUdXBsZUlzVmFs aWQoYW1UdXApKQorCQkJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgYWNj ZXNzIG1ldGhvZCAldSIsCisJCQkJCQkgb3BmRm9ybS0+b3BmbWV0aG9kKTsKKworCQkJCWFtRm9y bSA9IChGb3JtX3BnX2FtKSBHRVRTVFJVQ1QoYW1UdXApOworCisJCQkJb2xkbmFtZXMgPSBsaXN0 X2NvcHlfdGFpbCgoTGlzdCAqKSBub2RlLT5vYmplY3QsIDEpOworCisJCQkJLyogZGVjb25zdHJ1 Y3QgdGhlIG5hbWUgbGlzdCAqLworCQkJCURlY29uc3RydWN0UXVhbGlmaWVkTmFtZShvbGRuYW1l cywgJnNjaGVtYW5hbWUsICZvcGZuYW1lKTsKKworCQkJCXJlbmFtZVN0bXQgPSBuZXdfb2JqdHJl ZV9WQShmbXQsIDMsCisJCQkJCQkJCQkJCSJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJ CQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShvcGZGb3JtLT5vcGZuYW1lc3BhY2UsCisJ CQkJCQkJCQkJCQkJCQkJCSBvcGZuYW1lKSwKKwkJCQkJCQkJCQkJImluZGV4X21ldGhvZCIsIE9i alR5cGVTdHJpbmcsCisJCQkJCQkJCQkJCU5hbWVTdHIoYW1Gb3JtLT5hbW5hbWUpLAorCQkJCQkJ CQkJCQkibmV3bmFtZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPm5ld25hbWUpOworCisJCQkJUmVs ZWFzZVN5c0NhY2hlKGFtVHVwKTsKKwkJCQlSZWxlYXNlU3lzQ2FjaGUob3BmVHVwKTsKKwkJCX0K KwkJCWJyZWFrOworCisJCWNhc2UgT0JKRUNUX1NDSEVNQToKKwkJCXJlbmFtZVN0bXQgPQorCQkJ CW5ld19vYmp0cmVlX1ZBKCJBTFRFUiBTQ0hFTUEgJXtpZGVudGl0eX1JIFJFTkFNRSBUTyAle25l d25hbWV9SSIsCisJCQkJCQkJICAgMSwKKwkJCQkJCQkgICAiaWRlbnRpdHkiLCBPYmpUeXBlU3Ry aW5nLCBub2RlLT5zdWJuYW1lLAorCQkJCQkJCSAgICJuZXduYW1lIiwgT2JqVHlwZVN0cmluZywg bm9kZS0+bmV3bmFtZSk7CisJCQlicmVhazsKKworCQljYXNlIE9CSkVDVF9UUklHR0VSOgorCQkJ eworCQkJCUhlYXBUdXBsZQl0cmlnVHVwOworCQkJCUZvcm1fcGdfdHJpZ2dlciB0cmlnRm9ybTsK KwkJCQlSZWxhdGlvbglwZ190cmlnZ2VyOworCisJCQkJcGdfdHJpZ2dlciA9IHJlbGF0aW9uX29w ZW4oVHJpZ2dlclJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQkJdHJpZ1R1cCA9IGdl dF9jYXRhbG9nX29iamVjdF9ieV9vaWQocGdfdHJpZ2dlciwgZ2V0X29iamVjdF9hdHRudW1fb2lk KGFkZHJlc3MuY2xhc3NJZCksIGFkZHJlc3Mub2JqZWN0SWQpOworCQkJCXRyaWdGb3JtID0gKEZv cm1fcGdfdHJpZ2dlcikgR0VUU1RSVUNUKHRyaWdUdXApOworCisJCQkJcmVuYW1lU3RtdCA9IG5l d19vYmp0cmVlX1ZBKCJBTFRFUiBUUklHR0VSICV7dHJpZ2dlcm5hbWV9SSBPTiAle2lkZW50aXR5 fUQgUkVOQU1FIFRPICV7bmV3bmFtZX1JIiwKKwkJCQkJCQkJCQkJMywKKwkJCQkJCQkJCQkJInRy aWdnZXJuYW1lIiwgT2JqVHlwZVN0cmluZywgbm9kZS0+c3VibmFtZSwKKwkJCQkJCQkJCQkJImlk ZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkJCXRyaWdGb3JtLT50 Z3JlbGlkKSwKKwkJCQkJCQkJCQkJIm5ld25hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5uZXdu YW1lKTsKKworCQkJCXJlbGF0aW9uX2Nsb3NlKHBnX3RyaWdnZXIsIEFjY2Vzc1NoYXJlTG9jayk7 CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIE9CSkVDVF9UWVBFOgorCQljYXNlIE9CSkVDVF9D T05WRVJTSU9OOgorCQljYXNlIE9CSkVDVF9ET01BSU46CisJCQl7CisJCQkJSGVhcFR1cGxlCW9i alR1cDsKKwkJCQlSZWxhdGlvbgljYXRhbG9nOworCQkJCURhdHVtCQlvYmpuc3A7CisJCQkJYm9v bAkJaXNudWxsOworCQkJCUF0dHJOdW1iZXIJQW51bV9uYW1lc3BhY2U7CisJCQkJTGlzdAkgICAq aWRlbnRpdHkgPSBjYXN0Tm9kZShMaXN0LCBub2RlLT5vYmplY3QpOworCQkJCWNoYXIJICAgKmZt dHN0cmluZzsKKworCQkJCS8qIG9idGFpbiBvYmplY3QgdHVwbGUgKi8KKwkJCQljYXRhbG9nID0g cmVsYXRpb25fb3BlbihhZGRyZXNzLmNsYXNzSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQkJb2Jq VHVwID0gZ2V0X2NhdGFsb2dfb2JqZWN0X2J5X29pZChjYXRhbG9nLCBnZXRfb2JqZWN0X2F0dG51 bV9vaWQoYWRkcmVzcy5jbGFzc0lkKSwgYWRkcmVzcy5vYmplY3RJZCk7CisKKwkJCQkvKiBvYnRh aW4gbmFtZXNwYWNlICovCisJCQkJQW51bV9uYW1lc3BhY2UgPSBnZXRfb2JqZWN0X2F0dG51bV9u YW1lc3BhY2UoYWRkcmVzcy5jbGFzc0lkKTsKKwkJCQlvYmpuc3AgPSBoZWFwX2dldGF0dHIob2Jq VHVwLCBBbnVtX25hbWVzcGFjZSwKKwkJCQkJCQkJCSAgUmVsYXRpb25HZXREZXNjcihjYXRhbG9n KSwgJmlzbnVsbCk7CisJCQkJaWYgKGlzbnVsbCkKKwkJCQkJZWxvZyhFUlJPUiwgImludmFsaWQg TlVMTCBuYW1lc3BhY2UiKTsKKworCQkJCW9ianR5cGUgPSBzdHJpbmdpZnlfb2JqdHlwZShub2Rl LT5yZW5hbWVUeXBlKTsKKwkJCQlmbXRzdHJpbmcgPSBwc3ByaW50ZigiQUxURVIgJXMiLCBvYmp0 eXBlKTsKKworCQkJCXJlbmFtZVN0bXQgPSBuZXdfb2JqdHJlZV9WQShmbXRzdHJpbmcsCisJCQkJ CQkJCQkJMCk7CisJCQkJYXBwZW5kX29iamVjdF9vYmplY3QocmVuYW1lU3RtdCwgIiV7aWRlbnRp dHl9RCIsCisJCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoRGF0dW1HZXRPYmplY3RJ ZChvYmpuc3ApLAorCQkJCQkJCQkJCQkJCQkJICBzdHJWYWwobGxhc3QoaWRlbnRpdHkpKSkpOwor CisJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmVuYW1lU3RtdCwgIlJFTkFNRSBUTyAle25ld25h bWV9SSIsCisJCQkJCQkJCQkgbm9kZS0+bmV3bmFtZSk7CisJCQkJcmVsYXRpb25fY2xvc2UoY2F0 YWxvZywgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJ CQllbG9nKEVSUk9SLCAidW5zdXBwb3J0ZWQgb2JqZWN0IHR5cGUgJWQiLCBub2RlLT5yZW5hbWVU eXBlKTsKKwl9CisKKwlyZXR1cm4gcmVuYW1lU3RtdDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBB bHRlck9iamVjdERlcGVuZHNTdG10IChBTFRFUiAuLi4gREVQRU5EUyBPTiAuLi4pLgorICovCitz dGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyRGVwZW5kU3RtdChPaWQgb2JqZWN0SWQsIE5v ZGUgKnBhcnNldHJlZSkKK3sKKwlBbHRlck9iamVjdERlcGVuZHNTdG10ICpub2RlID0gKEFsdGVy T2JqZWN0RGVwZW5kc1N0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUJCSAgICphbHRlckRlcGVu ZGVTdG10ID0gTlVMTDsKKworCisJaWYgKG5vZGUtPm9iamVjdFR5cGUgPT0gT0JKRUNUX0lOREVY KQorCXsKKwkJUmVsYXRpb24gICAgICAgIHJlbGF0aW9uID0gcmVsYXRpb25fb3BlbihvYmplY3RJ ZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJT2JqVHJlZSAqcXVhbGlmaWVkOworCisJCWFsdGVyRGVw ZW5kZVN0bXQgPSBuZXdfb2JqdHJlZSgiQUxURVIgSU5ERVgiKTsKKworCQlxdWFsaWZpZWQgPSBu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUocmVsYXRpb24tPnJkX3JlbC0+cmVsbmFtZXNwYWNlLAor CQkJCQkJCQkJCQkgbm9kZS0+cmVsYXRpb24tPnJlbG5hbWUpOworCQlhcHBlbmRfb2JqZWN0X29i amVjdChhbHRlckRlcGVuZGVTdG10LCAiJXtpZGVudGl0eX1EIiwgcXVhbGlmaWVkKTsKKwkJcmVs YXRpb25fY2xvc2UocmVsYXRpb24sIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkJYXBwZW5kX3N0cmlu Z19vYmplY3QoYWx0ZXJEZXBlbmRlU3RtdCwgIiV7Tk99cyIsCisJCQkJCQkgbm9kZS0+cmVtb3Zl ID8gIk5PIiA6ICIiKTsKKworCQlhcHBlbmRfZm9ybWF0X3N0cmluZyhhbHRlckRlcGVuZGVTdG10 LCAiREVQRU5EUyBPTiBFWFRFTlNJT04iKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoYWx0ZXJE ZXBlbmRlU3RtdCwgIiV7bmV3bmFtZX1JIiwgc3RyVmFsKG5vZGUtPmV4dG5hbWUpKTsKKwl9CisJ ZWxzZQorCQllbG9nKExPRywgInVucmVjb2duaXplZCBub2RlIHR5cGUgaW4gZGVwYXJzZSBjb21t YW5kOiAlZCIsCisJCQkgKGludCkgbm9kZVRhZyhwYXJzZXRyZWUpKTsKKworCXJldHVybiBhbHRl ckRlcGVuZGVTdG10OworfQorCisvKgorICogRGVwYXJzZSB0aGUgc2VxdWVuY2UgQ0FDSEUgb3B0 aW9uLgorICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9TZXFfQ2FjaGUoT2Jq VHJlZSAqcGFyZW50LCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUp Cit7CisJT2JqVHJlZQkgICAqY2FjaGU7CisJY2hhcgkgICAqdG1wc3RyOworCWNoYXIJICAgKmZt dDsKKworCXRtcHN0ciA9IHBzcHJpbnRmKElOVDY0X0ZPUk1BVCwgc2VxZGF0YS0+c2VxY2FjaGUp OworCisJaWYgKGFsdGVyX3RhYmxlKQorCQlmbXQgPSAiU0VUIENBQ0hFICV7dmFsdWV9cyI7CisJ ZWxzZQorCQlmbXQgPSAiQ0FDSEUgJXt2YWx1ZX1zIjsKKworCWNhY2hlID0gbmV3X29ianRyZWVf VkEoZm10LCAyLAorCQkJCQkJICAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImNhY2hlIiwKKwkJ CQkJCSAgInZhbHVlIiwgT2JqVHlwZVN0cmluZywgdG1wc3RyKTsKKworCXJldHVybiBuZXdfb2Jq ZWN0X29iamVjdChjYWNoZSk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBzZXF1ZW5jZSBDWUNM RSBvcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1NlcV9DeWNs ZShPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90 YWJsZSkKK3sKKwlPYmpUcmVlCSAgICpjeWNsZTsKKwljaGFyCSAgICpmbXQ7CisKKwlpZiAoYWx0 ZXJfdGFibGUpCisJCWZtdCA9ICJTRVQgJXtub31zIENZQ0xFIjsKKwllbHNlCisJCWZtdCA9ICIl e25vfXMgQ1lDTEUiOworCisJY3ljbGUgPSBuZXdfb2JqdHJlZV9WQShmbXQsIDIsCisJCQkJCQkg ICAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImN5Y2xlIiwKKwkJCQkJCSAgICJubyIsIE9ialR5 cGVTdHJpbmcsCisJCQkJCQkgICBzZXFkYXRhLT5zZXFjeWNsZSA/ICIiIDogIk5PIik7CisJcmV0 dXJuIG5ld19vYmplY3Rfb2JqZWN0KGN5Y2xlKTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHNl cXVlbmNlIElOQ1JFTUVOVCBCWSBvcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAq CitkZXBhcnNlX1NlcV9JbmNyZW1lbnRCeShPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfc2VxdWVu Y2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSkKK3sKKwlPYmpUcmVlCSAgICppbmNyZW1lbnRh bGJ5OworCWNoYXIJICAgKnRtcHN0cjsKKwljaGFyCSAgICpmbXQ7CisKKwlpZiAoYWx0ZXJfdGFi bGUpCisJCWZtdCA9ICJTRVQgSU5DUkVNRU5UIEJZICV7dmFsdWV9cyI7CisJZWxzZQorCQlmbXQg PSAiSU5DUkVNRU5UIEJZICV7dmFsdWV9cyI7CisKKwl0bXBzdHIgPSBwc3ByaW50ZihJTlQ2NF9G T1JNQVQsIHNlcWRhdGEtPnNlcWluY3JlbWVudCk7CisJaW5jcmVtZW50YWxieSA9IG5ld19vYmp0 cmVlX1ZBKGZtdCwgMiwKKwkJCQkJCQkJICAgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJzZXFp bmNyZW1lbnQiLAorCQkJCQkJCQkgICAidmFsdWUiLCBPYmpUeXBlU3RyaW5nLCB0bXBzdHIpOwor CXJldHVybiBuZXdfb2JqZWN0X29iamVjdChpbmNyZW1lbnRhbGJ5KTsKK30KKworLyoKKyAqIERl cGFyc2UgdGhlIHNlcXVlbmNlIE1BWFZBTFVFIG9wdGlvbi4KKyAqLworc3RhdGljIGlubGluZSBP YmpFbGVtICoKK2RlcGFyc2VfU2VxX01heHZhbHVlKE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ19z ZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKQoreworCU9ialRyZWUJICAgKm1heHZh bHVlOworCWNoYXIJICAgKnRtcHN0cjsKKwljaGFyCSAgICpmbXQ7CisKKwlpZiAoYWx0ZXJfdGFi bGUpCisJCWZtdCA9ICJTRVQgTUFYVkFMVUUgJXt2YWx1ZX1zIjsKKwllbHNlCisJCWZtdCA9ICJN QVhWQUxVRSAle3ZhbHVlfXMiOworCisJdG1wc3RyID0gcHNwcmludGYoSU5UNjRfRk9STUFULCBz ZXFkYXRhLT5zZXFtYXgpOworCW1heHZhbHVlID0gbmV3X29ianRyZWVfVkEoZm10LCAyLAorCQkJ CQkJCSAgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJtYXh2YWx1ZSIsCisJCQkJCQkJICAidmFs dWUiLCBPYmpUeXBlU3RyaW5nLCB0bXBzdHIpOworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdCht YXh2YWx1ZSk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBzZXF1ZW5jZSBNSU5WQUxVRSBvcHRp b24uCisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1NlcV9NaW52YWx1ZShP YmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJs ZSkKK3sKKwlPYmpUcmVlCSAgICptaW52YWx1ZTsKKwljaGFyCSAgICp0bXBzdHI7CisJY2hhcgkg ICAqZm10OworCisJaWYgKGFsdGVyX3RhYmxlKQorCQlmbXQgPSAiU0VUIE1JTlZBTFVFICV7dmFs dWV9cyI7CisJZWxzZQorCQlmbXQgPSAiTUlOVkFMVUUgJXt2YWx1ZX1zIjsKKworCXRtcHN0ciA9 IHBzcHJpbnRmKElOVDY0X0ZPUk1BVCwgc2VxZGF0YS0+c2VxbWluKTsKKwltaW52YWx1ZSA9IG5l d19vYmp0cmVlX1ZBKGZtdCwgMiwKKwkJCQkJCQkgICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAi bWludmFsdWUiLAorCQkJCQkJCSAgInZhbHVlIiwgT2JqVHlwZVN0cmluZywgdG1wc3RyKTsKKwly ZXR1cm4gbmV3X29iamVjdF9vYmplY3QobWludmFsdWUpOworfQorCisvKgorICogRGVwYXJzZSB0 aGUgc2VxdWVuY2UgT1dORUQgQlkgY29tbWFuZC4KKyAqLworc3RhdGljIE9iakVsZW0gKgorZGVw YXJzZV9TZXFfT3duZWRCeShPYmpUcmVlICpwYXJlbnQsIE9pZCBzZXF1ZW5jZUlkLCBib29sIGFs dGVyX3RhYmxlKQoreworCU9ialRyZWUJICAgKm93bmVkYnkgPSBOVUxMOworCVJlbGF0aW9uCWRl cFJlbDsKKwlTeXNTY2FuRGVzYyBzY2FuOworCVNjYW5LZXlEYXRhIGtleXNbM107CisJSGVhcFR1 cGxlICAgdHVwbGU7CisKKwlkZXBSZWwgPSB0YWJsZV9vcGVuKERlcGVuZFJlbGF0aW9uSWQsIEFj Y2Vzc1NoYXJlTG9jayk7CisJU2NhbktleUluaXQoJmtleXNbMF0sCisJCQkJQW51bV9wZ19kZXBl bmRfY2xhc3NpZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJT2Jq ZWN0SWRHZXREYXR1bShSZWxhdGlvblJlbGF0aW9uSWQpKTsKKwlTY2FuS2V5SW5pdCgma2V5c1sx XSwKKwkJCQlBbnVtX3BnX2RlcGVuZF9vYmppZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIs IEZfT0lERVEsCisJCQkJT2JqZWN0SWRHZXREYXR1bShzZXF1ZW5jZUlkKSk7CisJU2NhbktleUlu aXQoJmtleXNbMl0sCisJCQkJQW51bV9wZ19kZXBlbmRfb2Jqc3ViaWQsCisJCQkJQlRFcXVhbFN0 cmF0ZWd5TnVtYmVyLCBGX0lOVDRFUSwKKwkJCQlJbnQzMkdldERhdHVtKDApKTsKKworCXNjYW4g PSBzeXN0YWJsZV9iZWdpbnNjYW4oZGVwUmVsLCBEZXBlbmREZXBlbmRlckluZGV4SWQsIHRydWUs CisJCQkJCQkJICBOVUxMLCAzLCBrZXlzKTsKKwl3aGlsZSAoSGVhcFR1cGxlSXNWYWxpZCh0dXBs ZSA9IHN5c3RhYmxlX2dldG5leHQoc2NhbikpKQorCXsKKwkJT2lkCQkgb3duZXJJZDsKKwkJRm9y bV9wZ19kZXBlbmQgZGVwZm9ybTsKKwkJT2JqVHJlZQkqdG1wb2JqOworCQljaGFyCSAgICpjb2xu YW1lOworCisJCWRlcGZvcm0gPSAoRm9ybV9wZ19kZXBlbmQpIEdFVFNUUlVDVCh0dXBsZSk7CisK KwkJLyogT25seSBjb25zaWRlciBBVVRPIGRlcGVuZGVuY2llcyBvbiBwZ19jbGFzcyAqLworCQlp ZiAoZGVwZm9ybS0+ZGVwdHlwZSAhPSBERVBFTkRFTkNZX0FVVE8pCisJCQljb250aW51ZTsKKwkJ aWYgKGRlcGZvcm0tPnJlZmNsYXNzaWQgIT0gUmVsYXRpb25SZWxhdGlvbklkKQorCQkJY29udGlu dWU7CisJCWlmIChkZXBmb3JtLT5yZWZvYmpzdWJpZCA8PSAwKQorCQkJY29udGludWU7CisKKwkJ b3duZXJJZCA9IGRlcGZvcm0tPnJlZm9iamlkOworCQljb2xuYW1lID0gZ2V0X2F0dG5hbWUob3du ZXJJZCwgZGVwZm9ybS0+cmVmb2Jqc3ViaWQsIGZhbHNlKTsKKwkJaWYgKGNvbG5hbWUgPT0gTlVM TCkKKwkJCWNvbnRpbnVlOworCisJCXRtcG9iaiA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9p ZChSZWxhdGlvblJlbGF0aW9uSWQsIG93bmVySWQpOworCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0 bXBvYmosICJhdHRybmFtZSIsIGNvbG5hbWUpOworCQlvd25lZGJ5ID0gbmV3X29ianRyZWVfVkEo Ik9XTkVEIEJZICV7b3duZXJ9RCIsCisJCQkJCQkJCSAyLAorCQkJCQkJCQkgImNsYXVzZSIsIE9i alR5cGVTdHJpbmcsICJvd25lZCIsCisJCQkJCQkJCSAib3duZXIiLCBPYmpUeXBlT2JqZWN0LCB0 bXBvYmopOworCX0KKworCXN5c3RhYmxlX2VuZHNjYW4oc2Nhbik7CisJcmVsYXRpb25fY2xvc2Uo ZGVwUmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCisJLyoKKwkgKiBJZiB0aGVyZSdzIG5vIG93bmVy IGNvbHVtbiwgZW1pdCBhbiBlbXB0eSBPV05FRCBCWSBlbGVtZW50LCBzZXQgdXAgc28KKwkgKiB0 aGF0IGl0IHdvbid0IHByaW50IGFueXRoaW5nLgorCSAqLworCWlmICghb3duZWRieSkKKwkJLyog WFhYIHRoaXMgc2hvdWxkbid0IGhhcHBlbiAuLi4gKi8KKwkJb3duZWRieSA9IG5ld19vYmp0cmVl X1ZBKCJPV05FRCBCWSAle293bmVyfUQiLAorCQkJCQkJCQkgMywKKwkJCQkJCQkJICJjbGF1c2Ui LCBPYmpUeXBlU3RyaW5nLCAib3duZWQiLAorCQkJCQkJCQkgIm93bmVyIiwgT2JqVHlwZU51bGws CisJCQkJCQkJCSAicHJlc2VudCIsIE9ialR5cGVCb29sLCBmYWxzZSk7CisKKwlyZXR1cm4gbmV3 X29iamVjdF9vYmplY3Qob3duZWRieSk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBzZXF1ZW5j ZSBSRVNUQVJUIG9wdGlvbi4KKyAqLworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2Vf U2VxX1Jlc3RhcnQoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3NlcXVlbmNlX2RhdGEgc2VxZGF0 YSkKK3sKKwlPYmpUcmVlCSAgICpyZXN0YXJ0OworCWNoYXIJICAgKnRtcHN0cjsKKworCXRtcHN0 ciA9IHBzcHJpbnRmKElOVDY0X0ZPUk1BVCwgc2VxZGF0YS0+bGFzdF92YWx1ZSk7CisJcmVzdGFy dCA9IG5ld19vYmp0cmVlX1ZBKCJSRVNUQVJUICV7dmFsdWV9cyIsIDIsCisJCQkJCQkJICJjbGF1 c2UiLCBPYmpUeXBlU3RyaW5nLCAicmVzdGFydCIsCisJCQkJCQkJICJ2YWx1ZSIsIE9ialR5cGVT dHJpbmcsIHRtcHN0cik7CisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHJlc3RhcnQpOworfQor CisvKgorICogRGVwYXJzZSB0aGUgc2VxdWVuY2UgU1RBUlQgV0lUSCBvcHRpb24uCisgKi8KK3N0 YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1NlcV9TdGFydHdpdGgoT2JqVHJlZSAqcGFy ZW50LCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpCit7CisJT2Jq VHJlZQkgICAqc3RhcnR3aXRoOworCWNoYXIJICAgKnRtcHN0cjsKKwljaGFyCSAgICpmbXQ7CisK KwlpZiAoYWx0ZXJfdGFibGUpCisJCWZtdCA9ICJTRVQgU1RBUlQgV0lUSCAle3ZhbHVlfXMiOwor CWVsc2UKKwkJZm10ID0gIlNUQVJUIFdJVEggJXt2YWx1ZX1zIjsKKworCXRtcHN0ciA9IHBzcHJp bnRmKElOVDY0X0ZPUk1BVCwgc2VxZGF0YS0+c2Vxc3RhcnQpOworCXN0YXJ0d2l0aCA9IG5ld19v Ymp0cmVlX1ZBKGZtdCwgMiwKKwkJCQkJCQkgICAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInN0 YXJ0IiwKKwkJCQkJCQkgICAidmFsdWUiLCBPYmpUeXBlU3RyaW5nLCB0bXBzdHIpOworCXJldHVy biBuZXdfb2JqZWN0X29iamVjdChzdGFydHdpdGgpOworfQorCisvKgorICogRGVwYXJzZSB0aGUg dHlwZSBTVE9SQUdFIG9wdGlvbi4KKyAqLworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFy c2VfVHlwZV9TdG9yYWdlKE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ190eXBlIHR5cEZvcm0pCit7 CisJT2JqVHJlZQkgICAqc3RvcmFnZTsKKwljaGFyCSAgICp0bXBzdHI7CisJY2hhcgkgICAqZm10 OworCWNoYXIJICAgKnN0cjsKKworCXN3aXRjaCAodHlwRm9ybS0+dHlwc3RvcmFnZSkKKwl7CisJ CWNhc2UgJ3AnOgorCQkJc3RyID0gInBsYWluIjsKKwkJCWJyZWFrOworCQljYXNlICdlJzoKKwkJ CXN0ciA9ICJleHRlcm5hbCI7CisJCQlicmVhazsKKwkJY2FzZSAneCc6CisJCQlzdHIgPSAiZXh0 ZW5kZWQiOworCQkJYnJlYWs7CisJCWNhc2UgJ20nOgorCQkJc3RyID0gIm1haW4iOworCQkJYnJl YWs7CisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBzdG9yYWdlIHNwZWNpZmll ciAlYyIsIHR5cEZvcm0tPnR5cHN0b3JhZ2UpOworCX0KKworCXRtcHN0ciA9IHBzcHJpbnRmKCIl cyIsIHN0cik7CisKKwlmbXQgPSAiU1RPUkFHRSA9ICV7dmFsdWV9cyI7CisKKwlzdG9yYWdlID0g bmV3X29ianRyZWVfVkEoZm10LCAyLAorCQkJCQkJICAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywg InN0b3JhZ2UiLAorCQkJCQkJICAidmFsdWUiLCBPYmpUeXBlU3RyaW5nLCB0bXBzdHIpOworCisJ cmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHN0b3JhZ2UpOworfQorCisvKgorICogRGVwYXJzZSB0 aGUgdHlwZSBSRUNFSVZFIG9wdGlvbi4KKyAqLworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2Rl cGFyc2VfVHlwZV9SZWNlaXZlKE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ190eXBlIHR5cEZvcm0p Cit7CisJT2JqVHJlZQkgICAqcmVjZWl2ZTsKKworCXJlY2VpdmUgPSBuZXdfb2JqdHJlZV9WQSgi UkVDRUlWRT0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicmVjZWl2ZSIp OworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cHJlY2VpdmUpKQorCQlhcHBlbmRfb2JqZWN0 X29iamVjdChyZWNlaXZlLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHlwRm9y bS0+dHlwcmVjZWl2ZSkpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHJlY2VpdmUsICJw cmVzZW50IiwgZmFsc2UpOworCisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHJlY2VpdmUpOwor fQorCisvKgorICogRGVwYXJzZSB0aGUgdHlwZSBTRU5EIG9wdGlvbi4KKyAqLworc3RhdGljIGlu bGluZSBPYmpFbGVtICoKK2RlcGFyc2VfVHlwZV9TZW5kKE9ialRyZWUgKnBhcmVudCwgRm9ybV9w Z190eXBlIHR5cEZvcm0pCit7CisJT2JqVHJlZQkgICAqc2VuZDsKKworCXNlbmQgPSBuZXdfb2Jq dHJlZV9WQSgiU0VORD0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAic2Vu ZCIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cHNlbmQpKQorCQlhcHBlbmRfb2JqZWN0 X29iamVjdChzZW5kLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9x dWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+ dHlwc2VuZCkpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHNlbmQsICJwcmVzZW50Iiwg ZmFsc2UpOworCisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHNlbmQpOworfQorCisvKgorICog RGVwYXJzZSB0aGUgdHlwZSB0eXBtb2RfaW4gb3B0aW9uLgorICovCitzdGF0aWMgaW5saW5lIE9i akVsZW0gKgorZGVwYXJzZV9UeXBlX1R5cG1vZF9JbihPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdf dHlwZSB0eXBGb3JtKQoreworCU9ialRyZWUJICAgKnR5cG1vZGluOworCisJdHlwbW9kaW4gPSBu ZXdfb2JqdHJlZV9WQSgiVFlQTU9EX0lOPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVT dHJpbmcsICJ0eXBtb2RfaW4iKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXBtb2Rpbikp CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHR5cG1vZGluLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJ CQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJ CQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlwbW9kaW4pKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29i amVjdCh0eXBtb2RpbiwgInByZXNlbnQiLCBmYWxzZSk7CisKKwlyZXR1cm4gbmV3X29iamVjdF9v YmplY3QodHlwbW9kaW4pOworfQorCisKKy8qCisgKiBEZXBhcnNlIHRoZSB0eXBlIHR5cG1vZF9v dXQgb3B0aW9uLgorICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9UeXBlX1R5 cG1vZF9PdXQoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3R5cGUgdHlwRm9ybSkKK3sKKwlPYmpU cmVlCSAgICp0eXBtb2RvdXQ7CisKKwl0eXBtb2RvdXQgPSBuZXdfb2JqdHJlZV9WQSgiVFlQTU9E X09VVD0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAidHlwbW9kX291dCIp OworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cG1vZG91dCkpCisJCWFwcGVuZF9vYmplY3Rf b2JqZWN0KHR5cG1vZG91dCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9m b3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZv cm0tPnR5cG1vZG91dCkpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHR5cG1vZG91dCwg InByZXNlbnQiLCBmYWxzZSk7CisKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QodHlwbW9kb3V0 KTsKK30KKworCisvKgorICogRGVwYXJzZSB0aGUgdHlwZSBhbmFseXplIG9wdGlvbi4KKyAqLwor c3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfVHlwZV9BbmFseXplKE9ialRyZWUgKnBh cmVudCwgRm9ybV9wZ190eXBlIHR5cEZvcm0pCit7CisJT2JqVHJlZQkgICAqdHlwYW5hbHl6ZTsK KworCXR5cGFuYWx5emUgPSBuZXdfb2JqdHJlZV9WQSgiQU5BTFlaRT0iLCAxLAorCQkJCQkJICJj bGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiYW5hbHl6ZSIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZv cm0tPnR5cGFuYWx5emUpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0eXBhbmFseXplLCAiJXtw cm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1 cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlwYW5hbHl6ZSkpOworCWVs c2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHR5cGFuYWx5emUsICJwcmVzZW50IiwgZmFsc2UpOwor CisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHR5cGFuYWx5emUpOworfQorCisvKgorICogRGVw YXJzZSB0aGUgdHlwZSBzdWJzY3JpcHQgb3B0aW9uLgorICovCitzdGF0aWMgaW5saW5lIE9iakVs ZW0gKgorZGVwYXJzZV9UeXBlX1N1YnNjcmlwdChPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfdHlw ZSB0eXBGb3JtKQoreworCU9ialRyZWUJICAgKnR5cHN1YnNjcmlwdDsKKworCXR5cHN1YnNjcmlw dCA9IG5ld19vYmp0cmVlX1ZBKCJTVUJTQ1JJUFQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2Jq VHlwZVN0cmluZywgInN1YnNjcmlwdCIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cHN1 YnNjcmlwdCkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHR5cHN1YnNjcmlwdCwgIiV7cHJvY2Vk dXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVs YXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cHN1YnNjcmlwdCkpOworCWVsc2UK KwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHR5cHN1YnNjcmlwdCwgInByZXNlbnQiLCBmYWxzZSk7CisK KwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QodHlwc3Vic2NyaXB0KTsKK30KKworLyoKKyAqIEhh bmRsZSBkZXBhcnNpbmcgb2Ygc2ltcGxlIGNvbW1hbmRzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24g c2hvdWxkIGNvdmVyIGFsbCBjYXNlcyBoYW5kbGVkIGluIFByb2Nlc3NVdGlsaXR5U2xvdy4KKyAq Lworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9zaW1wbGVfY29tbWFuZChDb2xsZWN0ZWRDb21t YW5kICpjbWQpCit7CisJT2lkCQkJb2JqZWN0SWQ7CisJTm9kZQkgICAqcGFyc2V0cmVlOworCU9i alRyZWUJICAgKmNvbW1hbmQ7CisKKwlBc3NlcnQoY21kLT50eXBlID09IFNDVF9TaW1wbGUpOwor CisJcGFyc2V0cmVlID0gY21kLT5wYXJzZXRyZWU7CisJb2JqZWN0SWQgPSBjbWQtPmQuc2ltcGxl LmFkZHJlc3Mub2JqZWN0SWQ7CisKKwlpZiAoY21kLT5pbl9leHRlbnNpb24gJiYgKG5vZGVUYWco cGFyc2V0cmVlKSAhPSBUX0NyZWF0ZUV4dGVuc2lvblN0bXQpKQorCQlyZXR1cm4gTlVMTDsKKwor CisJLyogVGhpcyBzd2l0Y2ggbmVlZHMgdG8gaGFuZGxlIGV2ZXJ5dGhpbmcgdGhhdCBQcm9jZXNz VXRpbGl0eVNsb3cgZG9lcyAqLworCXN3aXRjaCAobm9kZVRhZyhwYXJzZXRyZWUpKQorCXsKKwkJ Y2FzZSBUX0NyZWF0ZVNjaGVtYVN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9DcmVhdGVTY2hl bWFTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0FsdGVy RG9tYWluU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0FsdGVyRG9tYWluU3RtdChvYmplY3RJ ZCwgcGFyc2V0cmVlLAorCQkJCQkJCQkJCQkgIGNtZC0+ZC5zaW1wbGUuc2Vjb25kYXJ5T2JqZWN0 KTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9DcmVhdGVTdG10OgorCQkJY29tbWFuZCA9IGRlcGFy c2VfQ3JlYXRlU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2Ug VF9DcmVhdGVUcmlnU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0NyZWF0ZVRyaWdTdG10KG9i amVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0NyZWF0ZVNlcVN0bXQ6 CisJCQljb21tYW5kID0gZGVwYXJzZV9DcmVhdGVTZXFTdG10KG9iamVjdElkLCBwYXJzZXRyZWUp OworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0FsdGVyU2VxU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBh cnNlX0FsdGVyU2VxU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNh c2UgVF9EZWZpbmVTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfRGVmaW5lU3RtdChvYmplY3RJ ZCwgcGFyc2V0cmVlLAorCQkJCQkJCQkJCSBjbWQtPmQuc2ltcGxlLnNlY29uZGFyeU9iamVjdCk7 CisJCQlicmVhazsKKworCQljYXNlIFRfQ3JlYXRlQ29udmVyc2lvblN0bXQ6CisJCQljb21tYW5k ID0gZGVwYXJzZV9DcmVhdGVDb252ZXJzaW9uKG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJl YWs7CisKKwkJY2FzZSBUX0NyZWF0ZURvbWFpblN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9D cmVhdGVEb21haW4ob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRf Q3JlYXRlRXh0ZW5zaW9uU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0NyZWF0ZUV4dGVuc2lv blN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQWx0ZXJF eHRlbnNpb25TdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQWx0ZXJFeHRlbnNpb25TdG10KG9i amVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0FsdGVyRXh0ZW5zaW9u Q29udGVudHNTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQWx0ZXJFeHRlbnNpb25Db250ZW50 c1N0bXQob2JqZWN0SWQsIHBhcnNldHJlZSwKKwkJCQkJCQkJCQkJCQkJIGNtZC0+ZC5zaW1wbGUu c2Vjb25kYXJ5T2JqZWN0KTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9DcmVhdGVPcEZhbWlseVN0 bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9DcmVhdGVPcEZhbWlseShvYmplY3RJZCwgcGFyc2V0 cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9DcmVhdGVQb2xpY3lTdG10OgorCQkJY29tbWFu ZCA9IGRlcGFyc2VfQ3JlYXRlUG9saWN5U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJy ZWFrOworCisJCWNhc2UgVF9JbmRleFN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9JbmRleFN0 bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQ3JlYXRlRnVu Y3Rpb25TdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQ3JlYXRlRnVuY3Rpb24ob2JqZWN0SWQs IHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQWx0ZXJGdW5jdGlvblN0bXQ6CisJ CQljb21tYW5kID0gZGVwYXJzZV9BbHRlckZ1bmN0aW9uKG9iamVjdElkLCBwYXJzZXRyZWUpOwor CQkJYnJlYWs7CisKKwkJY2FzZSBUX1JlbmFtZVN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9S ZW5hbWVTdG10KGNtZC0+ZC5zaW1wbGUuYWRkcmVzcywgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOwor CisJCWNhc2UgVF9BbHRlck9iamVjdERlcGVuZHNTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2Vf QWx0ZXJEZXBlbmRTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2Fz ZSBUX0FsdGVyT2JqZWN0U2NoZW1hU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0FsdGVyT2Jq ZWN0U2NoZW1hU3RtdChjbWQtPmQuc2ltcGxlLmFkZHJlc3MsCisJCQkJCQkJCQkJCQkJcGFyc2V0 cmVlLAorCQkJCQkJCQkJCQkJCWNtZC0+ZC5zaW1wbGUuc2Vjb25kYXJ5T2JqZWN0KTsKKwkJCWJy ZWFrOworCisJCWNhc2UgVF9BbHRlck93bmVyU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0Fs dGVyT3duZXJTdG10KGNtZC0+ZC5zaW1wbGUuYWRkcmVzcywgcGFyc2V0cmVlKTsKKwkJCWJyZWFr OworCisJCWNhc2UgVF9BbHRlck9wZXJhdG9yU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0Fs dGVyT3BlcmF0b3JTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2Fz ZSBUX0FsdGVyUG9saWN5U3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0FsdGVyUG9saWN5U3Rt dChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9BbHRlclR5cGVT dG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQWx0ZXJUeXBlU2V0U3RtdChvYmplY3RJZCwgcGFy c2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9Db21wb3NpdGVUeXBlU3RtdDoKKwkJCWNv bW1hbmQgPSBkZXBhcnNlX0NvbXBvc2l0ZVR5cGVTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOwor CQkJYnJlYWs7CisKKwkJY2FzZSBUX0NyZWF0ZUVudW1TdG10OgkvKiBDUkVBVEUgVFlQRSBBUyBF TlVNICovCisJCQljb21tYW5kID0gZGVwYXJzZV9DcmVhdGVFbnVtU3RtdChvYmplY3RJZCwgcGFy c2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9DcmVhdGVSYW5nZVN0bXQ6CS8qIENSRUFU RSBUWVBFIEFTIFJBTkdFICovCisJCQljb21tYW5kID0gZGVwYXJzZV9DcmVhdGVSYW5nZVN0bXQo b2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQWx0ZXJFbnVtU3Rt dDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0FsdGVyRW51bVN0bXQob2JqZWN0SWQsIHBhcnNldHJl ZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQ3JlYXRlQ2FzdFN0bXQ6CisJCQljb21tYW5kID0g ZGVwYXJzZV9DcmVhdGVDYXN0U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOwor CisJCWRlZmF1bHQ6CisJCQljb21tYW5kID0gTlVMTDsKKwkJCWVsb2coTE9HLCAidW5yZWNvZ25p emVkIG5vZGUgdHlwZSBpbiBkZXBhcnNlIGNvbW1hbmQ6ICVkIiwKKwkJCQkgKGludCkgbm9kZVRh ZyhwYXJzZXRyZWUpKTsKKwl9CisKKwlyZXR1cm4gY29tbWFuZDsKK30KKworLyoKKyAqIFN1YnJv dXRpbmUgZm9yIENSRUFURSBUQUJMRSBkZXBhcnNpbmcuCisgKgorICogRGVhbCB3aXRoIGFsbCB0 aGUgdGFibGUgZWxlbWVudHMgKGNvbHVtbnMgYW5kIGNvbnN0cmFpbnRzKS4KKyAqCisgKiBOb3Rl IHdlIGlnbm9yZSBjb25zdHJhaW50cyBpbiB0aGUgcGFyc2Ugbm9kZSBoZXJlOyB0aGV5IGFyZSBl eHRyYWN0ZWQgZnJvbQorICogc3lzdGVtIGNhdGFsb2dzIGluc3RlYWQuCisgKi8KK3N0YXRpYyBM aXN0ICoKK2RlcGFyc2VfVGFibGVFbGVtZW50cyhSZWxhdGlvbiByZWxhdGlvbiwgTGlzdCAqdGFi bGVFbGVtZW50cywgTGlzdCAqZHBjb250ZXh0LAorCQkJCQkgIGJvb2wgdHlwZWQsIGJvb2wgY29t cG9zaXRlKQoreworCUxpc3QJICAgKmVsZW1lbnRzID0gTklMOworCUxpc3RDZWxsICAgKmxjOwor CisJZm9yZWFjaChsYywgdGFibGVFbGVtZW50cykKKwl7CisJCU5vZGUJICAgKmVsdCA9IChOb2Rl ICopIGxmaXJzdChsYyk7CisKKwkJc3dpdGNoIChub2RlVGFnKGVsdCkpCisJCXsKKwkJCWNhc2Ug VF9Db2x1bW5EZWY6CisJCQkJeworCQkJCQlPYmpUcmVlCSAgICp0cmVlOworCisJCQkJCXRyZWUg PSB0eXBlZCA/CisJCQkJCQlkZXBhcnNlX0NvbHVtbkRlZl90eXBlZChyZWxhdGlvbiwgZHBjb250 ZXh0LAorCQkJCQkJCQkJCQkJKENvbHVtbkRlZiAqKSBlbHQpIDoKKwkJCQkJCWRlcGFyc2VfQ29s dW1uRGVmKHJlbGF0aW9uLCBkcGNvbnRleHQsCisJCQkJCQkJCQkJCSAgY29tcG9zaXRlLCAoQ29s dW1uRGVmICopIGVsdCwKKwkJCQkJCQkJCQkJICBmYWxzZSwgTlVMTCk7CisJCQkJCWlmICh0cmVl ICE9IE5VTEwpCisJCQkJCXsKKwkJCQkJCU9iakVsZW0JKmNvbHVtbjsKKworCQkJCQkJY29sdW1u ID0gbmV3X29iamVjdF9vYmplY3QodHJlZSk7CisJCQkJCQllbGVtZW50cyA9IGxhcHBlbmQoZWxl bWVudHMsIGNvbHVtbik7CisJCQkJCX0KKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIFRfQ29u c3RyYWludDoKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJZWxvZyhFUlJPUiwgImludmFs aWQgbm9kZSB0eXBlICVkIiwgbm9kZVRhZyhlbHQpKTsKKwkJfQorCX0KKworCXJldHVybiBlbGVt ZW50czsKK30KKworLyoKKyAqIFdvcmtob3JzZSB0byBkZXBhcnNlIGEgQ29sbGVjdGVkQ29tbWFu ZC4KKyAqLworY2hhciAqCitkZXBhcnNlX3V0aWxpdHlfY29tbWFuZChDb2xsZWN0ZWRDb21tYW5k ICpjbWQsIGJvb2wgdmVyYm9zZV9tb2RlKQoreworCU92ZXJyaWRlU2VhcmNoUGF0aCAqb3ZlcnJp ZGVQYXRoOworCU1lbW9yeUNvbnRleHQJb2xkY3h0OworCU1lbW9yeUNvbnRleHQJdG1wY3h0Owor CU9ialRyZWUJCSAgICp0cmVlOworCWNoYXIJCSAgICpjb21tYW5kOworCVN0cmluZ0luZm9EYXRh ICBzdHI7CisKKwkvKgorCSAqIEFsbG9jYXRlIGV2ZXJ5dGhpbmcgZG9uZSBieSB0aGUgZGVwYXJz aW5nIHJvdXRpbmVzIGludG8gYSB0ZW1wIGNvbnRleHQsCisJICogdG8gYXZvaWQgaGF2aW5nIHRv IHNwcmlua2xlIHRoZW0gd2l0aCBtZW1vcnkgaGFuZGxpbmcgY29kZTsgYnV0IGFsbG9jYXRlCisJ ICogdGhlIG91dHB1dCBTdHJpbmdJbmZvIGJlZm9yZSBzd2l0Y2hpbmcuCisJICovCisJaW5pdFN0 cmluZ0luZm8oJnN0cik7CisJdG1wY3h0ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKEN1cnJlbnRN ZW1vcnlDb250ZXh0LAorCQkJCQkJCQkgICAiZGVwYXJzZSBjdHgiLAorCQkJCQkJCQkgICBBTExP Q1NFVF9ERUZBVUxUX01JTlNJWkUsCisJCQkJCQkJCSAgIEFMTE9DU0VUX0RFRkFVTFRfSU5JVFNJ WkUsCisJCQkJCQkJCSAgIEFMTE9DU0VUX0RFRkFVTFRfTUFYU0laRSk7CisJb2xkY3h0ID0gTWVt b3J5Q29udGV4dFN3aXRjaFRvKHRtcGN4dCk7CisKKwkvKgorCSAqIE1hbnkgcm91dGluZXMgdW5k ZXJseWluZyB0aGlzIG9uZSB3aWxsIGludm9rZSBydWxldXRpbHMuYyBmdW5jdGlvbmFsaXR5CisJ ICogaW4gb3JkZXIgdG8gb2J0YWluIGRlcGFyc2VkIHZlcnNpb25zIG9mIGV4cHJlc3Npb25zLiAg SW4gc3VjaCByZXN1bHRzLAorCSAqIHdlIHdhbnQgYWxsIG9iamVjdCBuYW1lcyB0byBiZSBxdWFs aWZpZWQsIHNvIHRoYXQgcmVzdWx0cyBhcmUgInBvcnRhYmxlIgorCSAqIHRvIGVudmlyb25tZW50 cyB3aXRoIGRpZmZlcmVudCBzZWFyY2hfcGF0aCBzZXR0aW5ncy4gIFJhdGhlciB0aGFuIGluamVj dAorCSAqIHdoYXQgd291bGQgYmUgcmVwZXRpdGl2ZSBjYWxscyB0byBvdmVycmlkZSBzZWFyY2gg cGF0aCBhbGwgb3ZlciB0aGUKKwkgKiBwbGFjZSwgd2UgZG8gaXQgY2VudHJhbGx5IGhlcmUuCisJ ICovCisJb3ZlcnJpZGVQYXRoID0gR2V0T3ZlcnJpZGVTZWFyY2hQYXRoKEN1cnJlbnRNZW1vcnlD b250ZXh0KTsKKwlvdmVycmlkZVBhdGgtPnNjaGVtYXMgPSBOSUw7CisJb3ZlcnJpZGVQYXRoLT5h ZGRDYXRhbG9nID0gZmFsc2U7CisJb3ZlcnJpZGVQYXRoLT5hZGRUZW1wID0gdHJ1ZTsKKwlQdXNo T3ZlcnJpZGVTZWFyY2hQYXRoKG92ZXJyaWRlUGF0aCk7CisKKwl2ZXJib3NlID0gdmVyYm9zZV9t b2RlOworCisJc3dpdGNoIChjbWQtPnR5cGUpCisJeworCQljYXNlIFNDVF9TaW1wbGU6CisJCQl0 cmVlID0gZGVwYXJzZV9zaW1wbGVfY29tbWFuZChjbWQpOworCQkJYnJlYWs7CisJCWNhc2UgU0NU X0FsdGVyVGFibGU6CisJCQl0cmVlID0gZGVwYXJzZV9BbHRlclRhYmxlU3RtdChjbWQpOworCQkJ YnJlYWs7CisJCWNhc2UgU0NUX0FsdGVyT3BGYW1pbHk6CisJCQl0cmVlID0gZGVwYXJzZV9BbHRl ck9wRmFtaWx5KGNtZCk7CisJCQlicmVhazsKKwkJY2FzZSBTQ1RfQ3JlYXRlT3BDbGFzczoKKwkJ CXRyZWUgPSBkZXBhcnNlX0NyZWF0ZU9wQ2xhc3NTdG10KGNtZCk7CisJCQlicmVhazsKKwkJZGVm YXVsdDoKKwkJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIGRlcGFyc2Ugbm9kZSB0eXBlICVkIiwg Y21kLT50eXBlKTsKKwl9CisKKwlQb3BPdmVycmlkZVNlYXJjaFBhdGgoKTsKKworCWlmICh0cmVl KQorCXsKKwkJSnNvbmIgKmpzb25iOworCisJCWpzb25iID0gb2JqdHJlZV90b19qc29uYih0cmVl KTsKKwkJY29tbWFuZCA9IEpzb25iVG9DU3RyaW5nKCZzdHIsICZqc29uYi0+cm9vdCwgSlNPTkJf RVNUSU1BVEVEX0xFTik7CisJfQorCWVsc2UKKwkJY29tbWFuZCA9IE5VTEw7CisKKwkvKgorCSAq IENsZWFuIHVwLiAgTm90ZSB0aGF0IHNpbmNlIHdlIGNyZWF0ZWQgdGhlIFN0cmluZ0luZm8gaW4g dGhlIGNhbGxlcidzCisJICogY29udGV4dCwgdGhlIG91dHB1dCBzdHJpbmcgaXMgbm90IGRlbGV0 ZWQgaGVyZS4KKwkgKi8KKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3h0KTsKKwlNZW1vcnlD b250ZXh0RGVsZXRlKHRtcGN4dCk7CisKKwlyZXR1cm4gY29tbWFuZDsKK30KZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9qc29uLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9k ZGxfanNvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjc4MmViMDVm NmMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfanNvbi5jCkBA IC0wLDAgKzEsNzYzIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBkZGxfanNvbi5jCisg KgkgIEpTT04gY29kZSByZWxhdGVkIHRvIERETCBjb21tYW5kIGRlcGFyc2luZworICoKKyAqIFBv cnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9w bWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRo ZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBz cmMvYmFja2VuZC9jb21tYW5kcy9kZGxfanNvbi5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg Ki8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAibGliL3N0cmluZ2luZm8uaCIK KyNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxzL2pzb25iLmgiCisK KworLyoKKyAqIENvbnZlcnNpb24gc3BlY2lmaWVyLCBpdCBkZXRlcm1pbmVzIGhvdyB3ZSBleHBh bmQgdGhlIGpzb24gZWxlbWVudCBpbnRvCisgKiBzdHJpbmcuCisgKi8KK3R5cGVkZWYgZW51bQor eworCVNwZWNUeXBlbmFtZSwKKwlTcGVjT3BlcmF0b3JuYW1lLAorCVNwZWNEb3R0ZWROYW1lLAor CVNwZWNTdHJpbmcsCisJU3BlY051bWJlciwKKwlTcGVjU3RyaW5nTGl0ZXJhbCwKKwlTcGVjSWRl bnRpZmllciwKKwlTcGVjUm9sZQorfSBjb252U3BlY2lmaWVyOworCisvKgorICogQSB0ZXJuYXJ5 IHZhbHVlIHdoaWNoIHJlcHJlc2VudHMgYSBib29sZWFuIHR5cGUgSnNvbmJWYWx1ZS4KKyAqLwor dHlwZWRlZiBlbnVtCit7CisJdHZfYWJzZW50LAorCXR2X3RydWUsCisJdHZfZmFsc2UKK30ganNv bl90cml2YWx1ZTsKKworc3RhdGljIGJvb2wgZXhwYW5kX29uZV9qc29uYl9lbGVtZW50KFN0cmlu Z0luZm8gYnVmLCBjaGFyICpwYXJhbSwKKwkJCQkJCSBKc29uYlZhbHVlICpqc29udmFsLCBjb252 U3BlY2lmaWVyIHNwZWNpZmllciwKKwkJCQkJCSBjb25zdCBjaGFyICpmbXQpOworc3RhdGljIHZv aWQgZXhwYW5kX2pzb25iX2FycmF5KFN0cmluZ0luZm8gYnVmLCBjaGFyICpwYXJhbSwKKwkJCQkg ICBKc29uYlZhbHVlICpqc29uYXJyLCBjaGFyICphcnJheXNlcCwKKwkJCQkgICBjb252U3BlY2lm aWVyIHNwZWNpZmllciwgY29uc3QgY2hhciAqZm10KTsKK3N0YXRpYyB2b2lkIGZtdHN0cl9lcnJv cl9jYWxsYmFjayh2b2lkICphcmcpOworY2hhciAqZGRsX2RlcGFyc2VfanNvbl90b19zdHJpbmco Y2hhciAqanNvbmIpOworCisvKgorICogR2l2ZW4gYSBKc29uYkNvbnRhaW5lciwgZmluZCB0aGUg SnNvbmJWYWx1ZSB3aXRoIHRoZSBnaXZlbiBrZXkgbmFtZSBpbiBpdC4KKyAqIElmIGl0J3Mgb2Yg YSB0eXBlIG90aGVyIHRoYW4gamJ2Qm9vbCwgYW4gZXJyb3IgaXMgcmFpc2VkLiBJZiBpdCBkb2Vz bid0CisgKiBleGlzdCwgdHZfYWJzZW50IGlzIHJldHVybmVkOyBvdGhlcndpc2UgcmV0dXJuIHRo ZSBhY3R1YWwganNvbl90cml2YWx1ZS4KKyAqLworc3RhdGljIGpzb25fdHJpdmFsdWUKK2ZpbmRf Ym9vbF9pbl9qc29uYmNvbnRhaW5lcihKc29uYkNvbnRhaW5lciAqY29udGFpbmVyLCBjaGFyICpr ZXluYW1lKQoreworCUpzb25iVmFsdWUJa2V5OworCUpzb25iVmFsdWUgKnZhbHVlOworCWpzb25f dHJpdmFsdWUJcmVzdWx0OworCisJa2V5LnR5cGUgPSBqYnZTdHJpbmc7CisJa2V5LnZhbC5zdHJp bmcudmFsID0ga2V5bmFtZTsKKwlrZXkudmFsLnN0cmluZy5sZW4gPSBzdHJsZW4oa2V5bmFtZSk7 CisJdmFsdWUgPSBmaW5kSnNvbmJWYWx1ZUZyb21Db250YWluZXIoY29udGFpbmVyLAorCQkJCQkJ CQkJCUpCX0ZPQkpFQ1QsICZrZXkpOworCWlmICh2YWx1ZSA9PSBOVUxMKQorCQlyZXR1cm4gdHZf YWJzZW50OworCWlmICh2YWx1ZS0+dHlwZSAhPSBqYnZCb29sKQorCQllcmVwb3J0KEVSUk9SLAor CQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJt c2coImVsZW1lbnQgXCIlc1wiIGlzIG5vdCBvZiB0eXBlIGJvb2xlYW4iLAorCQkJCQkJa2V5bmFt ZSkpKTsKKwlyZXN1bHQgPSB2YWx1ZS0+dmFsLmJvb2xlYW4gPyB0dl90cnVlIDogdHZfZmFsc2U7 CisJcGZyZWUodmFsdWUpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIEdpdmVuIGEg SnNvbmJDb250YWluZXIsIGZpbmQgdGhlIEpzb25iVmFsdWUgd2l0aCB0aGUgZ2l2ZW4ga2V5IG5h bWUgaW4gaXQuCisgKiBJZiBpdCdzIG9mIGEgdHlwZSBvdGhlciB0aGFuIGpidlN0cmluZywgYW4g ZXJyb3IgaXMgcmFpc2VkLiAgSWYgaXQgZG9lc24ndAorICogZXhpc3QsIGFuIGVycm9yIGlzIHJh aXNlZCB1bmxlc3MgbWlzc2luZ19vazsgb3RoZXJ3aXNlIHJldHVybiBOVUxMLgorICoKKyAqIElm IGl0IGV4aXN0cyBhbmQgaXMgYSBzdHJpbmcsIGEgZnJlc2hseSBwYWxsb2MnZWQgY29weSBpcyBy ZXR1cm5lZC4KKyAqCisgKiBJZiAqbGVuZ3RoIGlzIG5vdCBOVUxMLCBpdCBpcyBzZXQgdG8gdGhl IGxlbmd0aCBvZiB0aGUgc3RyaW5nLgorICovCitzdGF0aWMgY2hhciAqCitmaW5kX3N0cmluZ19p bl9qc29uYmNvbnRhaW5lcihKc29uYkNvbnRhaW5lciAqY29udGFpbmVyLCBjaGFyICprZXluYW1l LAorCQkJCQkJCSAgYm9vbCBtaXNzaW5nX29rLCBpbnQgKmxlbmd0aCkKK3sKKwlKc29uYlZhbHVl CWtleTsKKwlKc29uYlZhbHVlICp2YWx1ZTsKKwljaGFyCSAgICpzdHI7CisKKwkvKiBYWFggdmVy aWZ5IHRoYXQgdGhpcyBpcyBhbiBvYmplY3QsIG5vdCBhbiBhcnJheSAqLworCisJa2V5LnR5cGUg PSBqYnZTdHJpbmc7CisJa2V5LnZhbC5zdHJpbmcudmFsID0ga2V5bmFtZTsKKwlrZXkudmFsLnN0 cmluZy5sZW4gPSBzdHJsZW4oa2V5bmFtZSk7CisJdmFsdWUgPSBmaW5kSnNvbmJWYWx1ZUZyb21D b250YWluZXIoY29udGFpbmVyLAorCQkJCQkJCQkJCUpCX0ZPQkpFQ1QsICZrZXkpOworCWlmICh2 YWx1ZSA9PSBOVUxMKQorCXsKKwkJaWYgKG1pc3Npbmdfb2spCisJCQlyZXR1cm4gTlVMTDsKKwkJ ZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZB TFVFKSwKKwkJCQkgZXJybXNnKCJtaXNzaW5nIGVsZW1lbnQgXCIlc1wiIGluIGpzb24gb2JqZWN0 Iiwga2V5bmFtZSkpKTsKKwl9CisKKwlzdHIgPSBwbnN0cmR1cCh2YWx1ZS0+dmFsLnN0cmluZy52 YWwsIHZhbHVlLT52YWwuc3RyaW5nLmxlbik7CisJaWYgKGxlbmd0aCkKKwkJKmxlbmd0aCA9IHZh bHVlLT52YWwuc3RyaW5nLmxlbjsKKwlwZnJlZSh2YWx1ZSk7CisJcmV0dXJuIHN0cjsKK30KKwor I2RlZmluZSBBRFZBTkNFX1BBUlNFX1BPSU5URVIocHRyLGVuZF9wdHIpIFwKKwlkbyB7IFwKKwkJ aWYgKCsrKHB0cikgPj0gKGVuZF9wdHIpKSBcCisJCQllcmVwb3J0KEVSUk9SLCBcCisJCQkJCShl cnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLCBcCisJCQkJCSBlcnJtc2co InVudGVybWluYXRlZCBmb3JtYXQgc3BlY2lmaWVyIikpKTsgXAorCX0gd2hpbGUgKDApCisKKy8q CisgKiBSZWN1cnNpdmUgaGVscGVyIGZvciBwZ19ldmVudF90cmlnZ2VyX2V4cGFuZF9jb21tYW5k CisgKgorICogRmluZCB0aGUgImZtdCIgZWxlbWVudCBpbiB0aGUgZ2l2ZW4gY29udGFpbmVyLCBh bmQgZXhwYW5kIGl0IGludG8gdGhlCisgKiBwcm92aWRlZCBTdHJpbmdJbmZvLgorICovCitzdGF0 aWMgdm9pZAorZXhwYW5kX2ZtdF9yZWN1cnNpdmUoSnNvbmJDb250YWluZXIgKmNvbnRhaW5lciwg U3RyaW5nSW5mbyBidWYpCit7CisJSnNvbmJWYWx1ZQlrZXk7CisJSnNvbmJWYWx1ZSAqdmFsdWU7 CisJY29uc3QgY2hhciAqY3A7CisJY29uc3QgY2hhciAqc3RhcnRfcHRyOworCWNvbnN0IGNoYXIg KmVuZF9wdHI7CisJaW50CQkJbGVuOworCisJc3RhcnRfcHRyID0gZmluZF9zdHJpbmdfaW5fanNv bmJjb250YWluZXIoY29udGFpbmVyLCAiZm10IiwgZmFsc2UsICZsZW4pOworCWVuZF9wdHIgPSBz dGFydF9wdHIgKyBsZW47CisKKwlmb3IgKGNwID0gc3RhcnRfcHRyOyBjcCA8IGVuZF9wdHI7IGNw KyspCisJeworCQljb252U3BlY2lmaWVyIHNwZWNpZmllcjsKKwkJYm9vbAkJaXNfYXJyYXkgPSBm YWxzZTsKKwkJY2hhcgkgICAqcGFyYW0gPSBOVUxMOworCQljaGFyCSAgICphcnJheXNlcCA9IE5V TEw7CisKKwkJaWYgKCpjcCAhPSAnJScpCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyTWFj cm8oYnVmLCAqY3ApOworCQkJY29udGludWU7CisJCX0KKworCisJCUFEVkFOQ0VfUEFSU0VfUE9J TlRFUihjcCwgZW5kX3B0cik7CisKKwkJLyogRWFzeSBjYXNlOiAlJSBvdXRwdXRzIGEgc2luZ2xl ICUgKi8KKwkJaWYgKCpjcCA9PSAnJScpCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyTWFj cm8oYnVmLCAqY3ApOworCQkJY29udGludWU7CisJCX0KKworCQkvKgorCQkgKiBTY2FuIHRoZSBt YW5kYXRvcnkgZWxlbWVudCBuYW1lLiAgQWxsb3cgZm9yIGFuIGFycmF5IHNlcGFyYXRvcgorCQkg KiAod2hpY2ggbWF5IGJlIHRoZSBlbXB0eSBzdHJpbmcpIHRvIGJlIHNwZWNpZmllZCBhZnRlciBj b2xvbi4KKwkJICovCisJCWlmICgqY3AgPT0gJ3snKQorCQl7CisJCQlTdHJpbmdJbmZvRGF0YSBw YXJidWY7CisJCQlTdHJpbmdJbmZvRGF0YSBhcnJheXNlcGJ1ZjsKKwkJCVN0cmluZ0luZm8JYXBw ZW5kVG87CisKKwkJCWluaXRTdHJpbmdJbmZvKCZwYXJidWYpOworCQkJYXBwZW5kVG8gPSAmcGFy YnVmOworCisJCQlBRFZBTkNFX1BBUlNFX1BPSU5URVIoY3AsIGVuZF9wdHIpOworCQkJZm9yICg7 IGNwIDwgZW5kX3B0cjspCisJCQl7CisJCQkJaWYgKCpjcCA9PSAnOicpCisJCQkJeworCQkJCQkv KgorCQkJCQkgKiBGb3VuZCBhcnJheSBzZXBhcmF0b3IgZGVsaW1pdGVyOyBlbGVtZW50IG5hbWUg aXMgbm93CisJCQkJCSAqIGNvbXBsZXRlLCBzdGFydCBmaWxsaW5nIHRoZSBzZXBhcmF0b3IuCisJ CQkJCSAqLworCQkJCQlpbml0U3RyaW5nSW5mbygmYXJyYXlzZXBidWYpOworCQkJCQlhcHBlbmRU byA9ICZhcnJheXNlcGJ1ZjsKKwkJCQkJaXNfYXJyYXkgPSB0cnVlOworCQkJCQlBRFZBTkNFX1BB UlNFX1BPSU5URVIoY3AsIGVuZF9wdHIpOworCQkJCQljb250aW51ZTsKKwkJCQl9CisKKwkJCQlp ZiAoKmNwID09ICd9JykKKwkJCQl7CisJCQkJCUFEVkFOQ0VfUEFSU0VfUE9JTlRFUihjcCwgZW5k X3B0cik7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhck1hY3Jv KGFwcGVuZFRvLCAqY3ApOworCQkJCUFEVkFOQ0VfUEFSU0VfUE9JTlRFUihjcCwgZW5kX3B0cik7 CisJCQl9CisJCQlwYXJhbSA9IHBhcmJ1Zi5kYXRhOworCQkJaWYgKGlzX2FycmF5KQorCQkJCWFy cmF5c2VwID0gYXJyYXlzZXBidWYuZGF0YTsKKwkJfQorCQlpZiAocGFyYW0gPT0gTlVMTCkKKwkJ CWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJf VkFMVUUpLAorCQkJCSBlcnJtc2coIm1pc3NpbmcgY29udmVyc2lvbiBuYW1lIGluIGNvbnZlcnNp b24gc3BlY2lmaWVyIikpKTsKKworCQlzd2l0Y2ggKCpjcCkKKwkJeworCQkJY2FzZSAnSSc6CisJ CQkJc3BlY2lmaWVyID0gU3BlY0lkZW50aWZpZXI7CisJCQkJYnJlYWs7CisJCQljYXNlICdEJzoK KwkJCQlzcGVjaWZpZXIgPSBTcGVjRG90dGVkTmFtZTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ3Mn OgorCQkJCXNwZWNpZmllciA9IFNwZWNTdHJpbmc7CisJCQkJYnJlYWs7CisJCQljYXNlICdMJzoK KwkJCQlzcGVjaWZpZXIgPSBTcGVjU3RyaW5nTGl0ZXJhbDsKKwkJCQlicmVhazsKKwkJCWNhc2Ug J1QnOgorCQkJCXNwZWNpZmllciA9IFNwZWNUeXBlbmFtZTsKKwkJCQlicmVhazsKKwkJCWNhc2Ug J08nOgorCQkJCXNwZWNpZmllciA9IFNwZWNPcGVyYXRvcm5hbWU7CisJCQkJYnJlYWs7CisJCQlj YXNlICduJzoKKwkJCQlzcGVjaWZpZXIgPSBTcGVjTnVtYmVyOworCQkJCWJyZWFrOworCQkJY2Fz ZSAnUic6CisJCQkJc3BlY2lmaWVyID0gU3BlY1JvbGU7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0 OgorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFS QU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2coImludmFsaWQgY29udmVyc2lvbiBzcGVjaWZp ZXIgXCIlY1wiIiwgKmNwKSkpOworCQl9CisKKwkJLyoKKwkJICogT2J0YWluIHRoZSBlbGVtZW50 IHRvIGJlIGV4cGFuZGVkLgorCQkgKi8KKwkJa2V5LnR5cGUgPSBqYnZTdHJpbmc7CisJCWtleS52 YWwuc3RyaW5nLnZhbCA9IHBhcmFtOworCQlrZXkudmFsLnN0cmluZy5sZW4gPSBzdHJsZW4ocGFy YW0pOworCisJCXZhbHVlID0gZmluZEpzb25iVmFsdWVGcm9tQ29udGFpbmVyKGNvbnRhaW5lciwg SkJfRk9CSkVDVCwgJmtleSk7CisKKwkJLyoKKwkJICogRXhwYW5kIHRoZSBkYXRhIChwb3NzaWJs eSBhbiBhcnJheSkgaW50byB0aGUgb3V0cHV0IFN0cmluZ0luZm8uCisJCSAqLworCQlpZiAoaXNf YXJyYXkpCisJCQlleHBhbmRfanNvbmJfYXJyYXkoYnVmLCBwYXJhbSwgdmFsdWUsIGFycmF5c2Vw LCBzcGVjaWZpZXIsIHN0YXJ0X3B0cik7CisJCWVsc2UKKwkJCWV4cGFuZF9vbmVfanNvbmJfZWxl bWVudChidWYsIHBhcmFtLCB2YWx1ZSwgc3BlY2lmaWVyLCBzdGFydF9wdHIpOworCX0KK30KKwor LyoKKyAqIEV4cGFuZCBhIGpzb24gdmFsdWUgYXMgYSBxdW90ZWQgaWRlbnRpZmllci4gIFRoZSB2 YWx1ZSBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLgorICovCitzdGF0aWMgdm9pZAorZXhwYW5kX2pz b252YWxfaWRlbnRpZmllcihTdHJpbmdJbmZvIGJ1ZiwgSnNvbmJWYWx1ZSAqanNvbnZhbCkKK3sK KwljaGFyCSAgICpzdHI7CisKKwlBc3NlcnQoanNvbnZhbC0+dHlwZSA9PSBqYnZTdHJpbmcpOwor CisJc3RyID0gcG5zdHJkdXAoanNvbnZhbC0+dmFsLnN0cmluZy52YWwsIGpzb252YWwtPnZhbC5z dHJpbmcubGVuKTsKKwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgcXVvdGVfaWRlbnRpZmll cihzdHIpKTsKKwlwZnJlZShzdHIpOworfQorCisvKgorICogRXhwYW5kIGEganNvbiB2YWx1ZSBh cyBhIGRvdC1zZXBhcmF0ZWQtbmFtZS4gIFRoZSB2YWx1ZSBtdXN0IGJlIG9mIHR5cGUKKyAqIG9i amVjdCBhbmQgbWF5IGNvbnRhaW4gZWxlbWVudHMgInNjaGVtYW5hbWUiIChvcHRpb25hbCksICJv YmpuYW1lIgorICogKG1hbmRhdG9yeSksICJhdHRybmFtZSIgKG9wdGlvbmFsKS4gIERvdWJsZSBx dW90ZXMgYXJlIGFkZGVkIHRvIGVhY2ggZWxlbWVudAorICogYXMgbmVjZXNzYXJ5LCBhbmQgZG90 IHNlcGFyYXRvcnMgd2hlcmUgbmVlZGVkLgorICoKKyAqIE9uZSBkYXkgd2UgbWlnaHQgbmVlZCBh ICJjYXRhbG9nIiBlbGVtZW50IGFzIHdlbGwsIGJ1dCBubyBjdXJyZW50IHVzZSBjYXNlCisgKiBu ZWVkcyB0aGF0LgorICovCitzdGF0aWMgdm9pZAorZXhwYW5kX2pzb252YWxfZG90dGVkbmFtZShT dHJpbmdJbmZvIGJ1ZiwgSnNvbmJWYWx1ZSAqanNvbnZhbCkKK3sKKwljaGFyCSAgICpzdHI7CisK KwlzdHIgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihqc29udmFsLT52YWwuYmluYXJ5 LmRhdGEsCisJCQkJCQkJCQkJInNjaGVtYW5hbWUiLCB0cnVlLCBOVUxMKTsKKwlpZiAoc3RyKQor CXsKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIlcy4iLCBxdW90ZV9pZGVudGlmaWVyKHN0cikp OworCQlwZnJlZShzdHIpOworCX0KKworCXN0ciA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFp bmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkib2JqbmFtZSIsIGZhbHNl LCBOVUxMKTsKKwlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVzIiwgcXVvdGVfaWRlbnRpZmllcihz dHIpKTsKKwlwZnJlZShzdHIpOworCisJc3RyID0gZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWlu ZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCSJhdHRybmFtZSIsIHRydWUs IE5VTEwpOworCWlmIChzdHIpCisJeworCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIi4lcyIsIHF1 b3RlX2lkZW50aWZpZXIoc3RyKSk7CisJCXBmcmVlKHN0cik7CisJfQorfQorCisvKgorICogRXhw YW5kIGEganNvbiB2YWx1ZSBhcyBhIHR5cGUgbmFtZS4KKyAqLworc3RhdGljIHZvaWQKK2V4cGFu ZF9qc29udmFsX3R5cGVuYW1lKFN0cmluZ0luZm8gYnVmLCBKc29uYlZhbHVlICpqc29udmFsKQor eworCWNoYXIJICAgKnNjaGVtYSA9IE5VTEw7CisJY2hhcgkgICAqdHlwZW5hbWU7CisJY2hhcgkg ICAqdHlwbW9kc3RyOworCWpzb25fdHJpdmFsdWUJaXNfYXJyYXk7CisJY2hhcgkgICAqYXJyYXlf ZGVjb3I7CisKKwkvKgorCSAqIFdlIG9taXQgc2NoZW1hLXF1YWxpZnlpbmcgdGhlIG91dHB1dCBu YW1lIGlmIHRoZSBzY2hlbWEgZWxlbWVudCBpcworCSAqIGVpdGhlciB0aGUgZW1wdHkgc3RyaW5n IG9yIE5VTEw7IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhvc2UgdHdvIGNhc2VzCisJICogaXMg dGhhdCBpbiB0aGUgbGF0dGVyIHdlIHF1b3RlIHRoZSB0eXBlIG5hbWUsIGluIHRoZSBmb3JtZXIg d2UgZG9uJ3QuCisJICogVGhpcyBhbGxvd3MgZm9yIHR5cGVzIHdpdGggc3BlY2lhbCB0eXBtb2Qg bmVlZHMsIHN1Y2ggYXMgaW50ZXJ2YWwgYW5kCisJICogdGltZXN0YW1wIChzZWUgZm9ybWF0X3R5 cGVfZGV0YWlsZWQpLCB3aGlsZSBhdCB0aGUgc2FtZSB0aW1lIGFsbG93aW5nCisJICogZm9yIHRo ZSBzY2hlbWEgbmFtZSB0byBiZSBvbWl0dGVkIGZyb20gdHlwZSBuYW1lcyB0aGF0IHJlcXVpcmUg cXVvdGVzCisJICogYnV0IGFyZSB0byBiZSBvYnRhaW5lZCBmcm9tIGEgdXNlciBzY2hlbWEuCisJ ICovCisKKwlzY2hlbWEgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihqc29udmFsLT52 YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJICAgInNjaGVtYW5hbWUiLCB0cnVlLCBOVUxMKTsK Kwl0eXBlbmFtZSA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5i aW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkJICJ0eXBlbmFtZSIsIGZhbHNlLCBOVUxMKTsKKwl0eXBt b2RzdHIgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihqc29udmFsLT52YWwuYmluYXJ5 LmRhdGEsCisJCQkJCQkJCQkJCSAgInR5cG1vZCIsIHRydWUsIE5VTEwpOworCWlzX2FycmF5ID0g ZmluZF9ib29sX2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJ CQkJCQkJCQkgICAidHlwYXJyYXkiKTsKKwlzd2l0Y2ggKGlzX2FycmF5KQorCXsKKwkJY2FzZSB0 dl90cnVlOgorCQkJYXJyYXlfZGVjb3IgPSAiW10iOworCQkJYnJlYWs7CisKKwkJY2FzZSB0dl9m YWxzZToKKwkJCWFycmF5X2RlY29yID0gIiI7CisJCQlicmVhazsKKworCQljYXNlIHR2X2Fic2Vu dDoKKwkJZGVmYXVsdDoKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVf SU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkgZXJybXNnKCJtaXNzaW5nIHR5cGFycmF5 IGVsZW1lbnQiKSkpOworCX0KKworCWlmIChzY2hlbWEgPT0gTlVMTCkKKwkJYXBwZW5kU3RyaW5n SW5mbyhidWYsICIlcyIsIHF1b3RlX2lkZW50aWZpZXIodHlwZW5hbWUpKTsKKwllbHNlIGlmIChz Y2hlbWFbMF0gPT0gJ1wwJykKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIlcyIsIHR5cGVuYW1l KTsgLyogU3BlY2lhbCB0eXBtb2QgbmVlZHMgKi8KKwllbHNlCisJCWFwcGVuZFN0cmluZ0luZm8o YnVmLCAiJXMuJXMiLCBxdW90ZV9pZGVudGlmaWVyKHNjaGVtYSksCisJCQkJCQkgcXVvdGVfaWRl bnRpZmllcih0eXBlbmFtZSkpOworCisJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIlcyVzIiwgdHlw bW9kc3RyID8gdHlwbW9kc3RyIDogIiIsIGFycmF5X2RlY29yKTsKK30KKworLyoKKyAqIEV4cGFu ZCBhIGpzb24gdmFsdWUgYXMgYW4gb3BlcmF0b3IgbmFtZQorICovCitzdGF0aWMgdm9pZAorZXhw YW5kX2pzb252YWxfb3BlcmF0b3IoU3RyaW5nSW5mbyBidWYsIEpzb25iVmFsdWUgKmpzb252YWwp Cit7CisJY2hhcgkgICAqc3RyOworCisJc3RyID0gZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWlu ZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCSJzY2hlbWFuYW1lIiwgdHJ1 ZSwgTlVMTCk7CisJLyogU2NoZW1hIG1pZ2h0IGJlIE5VTEwgb3IgZW1wdHkgKi8KKwlpZiAoc3Ry ICE9IE5VTEwgJiYgc3RyWzBdICE9ICdcMCcpCisJeworCQlhcHBlbmRTdHJpbmdJbmZvKGJ1Ziwg IiVzLiIsIHF1b3RlX2lkZW50aWZpZXIoc3RyKSk7CisJCXBmcmVlKHN0cik7CisJfQorCisJc3Ry ID0gZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRh LAorCQkJCQkJCQkJCSJvYmpuYW1lIiwgZmFsc2UsIE5VTEwpOworCisJaWYgKHN0cikKKwl7CisJ CWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCBzdHIpOworCQlwZnJlZShzdHIpOworCX0KK30K KworLyoKKyAqIEV4cGFuZCBhIGpzb24gdmFsdWUgYXMgYSBzdHJpbmcuICBUaGUgdmFsdWUgbXVz dCBiZSBvZiB0eXBlIHN0cmluZyBvciBvZgorICogdHlwZSBvYmplY3QuICBJbiB0aGUgbGF0dGVy IGNhc2UgaXQgbXVzdCBjb250YWluIGEgImZtdCIgZWxlbWVudCB3aGljaCB3aWxsCisgKiBiZSBy ZWN1cnNpdmVseSBleHBhbmRlZDsgYWxzbywgaWYgdGhlIG9iamVjdCBjb250YWlucyBhbiBlbGVt ZW50ICJwcmVzZW50IgorICogYW5kIGl0IGlzIHNldCB0byBmYWxzZSwgdGhlIGV4cGFuc2lvbiBp cyB0aGUgZW1wdHkgc3RyaW5nLgorICoKKyAqIFJldHVybnMgZmFsc2UgaWYgbm8gYWN0dWFsIGV4 cGFuc2lvbiB3YXMgbWFkZSBkdWUgdG8gdGhlICJwcmVzZW50IiBmbGFnCisgKiBiZWluZyBzZXQg dG8gImZhbHNlIi4KKyAqLworc3RhdGljIGJvb2wKK2V4cGFuZF9qc29udmFsX3N0cmluZyhTdHJp bmdJbmZvIGJ1ZiwgSnNvbmJWYWx1ZSAqanNvbnZhbCkKK3sKKwlpZiAoanNvbnZhbC0+dHlwZSA9 PSBqYnZTdHJpbmcpCisJeworCQlhcHBlbmRCaW5hcnlTdHJpbmdJbmZvKGJ1ZiwganNvbnZhbC0+ dmFsLnN0cmluZy52YWwsCisJCQkJCQkJICAganNvbnZhbC0+dmFsLnN0cmluZy5sZW4pOworCX0K KwllbHNlIGlmIChqc29udmFsLT50eXBlID09IGpidkJpbmFyeSkKKwl7CisJCWpzb25fdHJpdmFs dWUJcHJlc2VudDsKKworCQlwcmVzZW50ID0gZmluZF9ib29sX2luX2pzb25iY29udGFpbmVyKGpz b252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkJICAicHJlc2VudCIpOworCQkvKgor CQkgKiBJZiAicHJlc2VudCIgaXMgc2V0IHRvIGZhbHNlLCB0aGlzIGVsZW1lbnQgZXhwYW5kcyB0 byBlbXB0eTsKKwkJICogb3RoZXJ3aXNlIChlaXRoZXIgdHJ1ZSBvciBhYnNlbnQpLCBmYWxsIHRo cm91Z2ggdG8gZXhwYW5kICJmbXQiLgorCQkgKi8KKwkJaWYgKHByZXNlbnQgPT0gdHZfZmFsc2Up CisJCQlyZXR1cm4gZmFsc2U7CisKKwkJZXhwYW5kX2ZtdF9yZWN1cnNpdmUoanNvbnZhbC0+dmFs LmJpbmFyeS5kYXRhLCBidWYpOworCX0KKwllbHNlCisJCXJldHVybiBmYWxzZTsKKworCXJldHVy biB0cnVlOworfQorCisvKgorICogRXhwYW5kIGEganNvbiB2YWx1ZSBhcyBhIHN0cmluZyBsaXRl cmFsLgorICovCitzdGF0aWMgdm9pZAorZXhwYW5kX2pzb252YWxfc3RybGl0KFN0cmluZ0luZm8g YnVmLCBKc29uYlZhbHVlICpqc29udmFsKQoreworCWNoYXIgICAqc3RyOworCVN0cmluZ0luZm9E YXRhIGRxZGVsaW07CisJc3RhdGljIGNvbnN0IGNoYXIgZHFzdWZmaXhlc1tdID0gIl9YWVpaWVhf IjsKKwlpbnQgICAgICAgICBkcW5leHRjaGFyID0gMDsKKworCXN0ciA9IHBuc3RyZHVwKGpzb252 YWwtPnZhbC5zdHJpbmcudmFsLCBqc29udmFsLT52YWwuc3RyaW5nLmxlbik7CisKKwkvKiBFYXN5 IGNhc2U6IGlmIHRoZXJlIGFyZSBubyAnIGFuZCBubyBcLCBqdXN0IHVzZSBhIHNpbmdsZSBxdW90 ZSAqLworCWlmIChzdHJjaHIoc3RyLCAnXCcnKSA9PSBOVUxMICYmCisJCXN0cmNocihzdHIsICdc XCcpID09IE5VTEwpCisJeworCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiclcyciLCBzdHIpOwor CQlwZnJlZShzdHIpOworCQlyZXR1cm47CisJfQorCisJLyogT3RoZXJ3aXNlIG5lZWQgdG8gZmlu ZCBhIHVzZWZ1bCBkb2xsYXItcXVvdGUgZGVsaW1pdGVyICovCisJaW5pdFN0cmluZ0luZm8oJmRx ZGVsaW0pOworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmRxZGVsaW0sICIkIik7CisJd2hpbGUg KHN0cnN0cihzdHIsIGRxZGVsaW0uZGF0YSkgIT0gTlVMTCkKKwl7CisJCWFwcGVuZFN0cmluZ0lu Zm9DaGFyKCZkcWRlbGltLCBkcXN1ZmZpeGVzW2RxbmV4dGNoYXIrK10pOworCQlkcW5leHRjaGFy ID0gZHFuZXh0Y2hhciAlIChzaXplb2YoZHFzdWZmaXhlcykgLSAxKTsKKwl9CisJLyogQWRkIHRy YWlsaW5nICQgKi8KKwlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmZHFkZWxpbSwgJyQnKTsKKworCS8q IEFuZCBmaW5hbGx5IHByb2R1Y2UgdGhlIHF1b3RlZCBsaXRlcmFsIGludG8gdGhlIG91dHB1dCBT dHJpbmdJbmZvICovCisJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIlcyVzJXMiLCBkcWRlbGltLmRh dGEsIHN0ciwgZHFkZWxpbS5kYXRhKTsKKwlwZnJlZShkcWRlbGltLmRhdGEpOworCXBmcmVlKHN0 cik7Cit9CisKKy8qCisgKiBFeHBhbmQgYSBqc29uIHZhbHVlIGFzIGFuIGludGVnZXIgcXVhbnRp dHkuCisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRfanNvbnZhbF9udW1iZXIoU3RyaW5nSW5mbyBi dWYsIEpzb25iVmFsdWUgKmpzb252YWwpCit7CisJY2hhciAqc3RyZGF0dW07CisKKwlzdHJkYXR1 bSA9IERhdHVtR2V0Q1N0cmluZyhEaXJlY3RGdW5jdGlvbkNhbGwxKG51bWVyaWNfb3V0LAorCQkJ CQkJCQkJCQkJICAgTnVtZXJpY0dldERhdHVtKGpzb252YWwtPnZhbC5udW1lcmljKSkpOworCWFw cGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCBzdHJkYXR1bSk7Cit9CisKKy8qCisgKiBFeHBhbmQg YSBqc29uIHZhbHVlIGFzIGEgcm9sZSBuYW1lLiAgSWYgdGhlIGlzX3B1YmxpYyBlbGVtZW50IGlz IHNldCB0bworICogdHJ1ZSwgUFVCTElDIGlzIGV4cGFuZGVkIChubyBxdW90ZXMpOyBvdGhlcndp c2UsIGV4cGFuZCB0aGUgZ2l2ZW4gcm9sZSBuYW1lLAorICogcXVvdGluZyBhcyBhbiBpZGVudGlm aWVyLgorICovCitzdGF0aWMgdm9pZAorZXhwYW5kX2pzb252YWxfcm9sZShTdHJpbmdJbmZvIGJ1 ZiwgSnNvbmJWYWx1ZSAqanNvbnZhbCkKK3sKKwlqc29uX3RyaXZhbHVlCWlzX3B1YmxpYzsKKwor CWlzX3B1YmxpYyA9IGZpbmRfYm9vbF9pbl9qc29uYmNvbnRhaW5lcihqc29udmFsLT52YWwuYmlu YXJ5LmRhdGEsCisJCQkJCQkJCQkJCSJpc19wdWJsaWMiKTsKKwlpZiAoaXNfcHVibGljID09IHR2 X3RydWUpCisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiUFVCTElDIik7CisJZWxzZQor CXsKKwkJY2hhciAqcm9sZW5hbWU7CisKKwkJcm9sZW5hbWUgPSBmaW5kX3N0cmluZ19pbl9qc29u YmNvbnRhaW5lcihqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJCQkgInJvbGVu YW1lIiwgZmFsc2UsIE5VTEwpOworCQlpZiAocm9sZW5hbWUpCisJCXsKKwkJCWFwcGVuZFN0cmlu Z0luZm9TdHJpbmcoYnVmLCBxdW90ZV9pZGVudGlmaWVyKHJvbGVuYW1lKSk7CisJCQlwZnJlZShy b2xlbmFtZSk7CisJCX0KKwl9Cit9CisKKy8qCisgKiBFeHBhbmQgb25lIGpzb24gZWxlbWVudCBp bnRvIHRoZSBvdXRwdXQgU3RyaW5nSW5mbyBhY2NvcmRpbmcgdG8gdGhlCisgKiBjb252ZXJzaW9u IHNwZWNpZmllci4gIFRoZSBlbGVtZW50IHR5cGUgaXMgdmFsaWRhdGVkLCBhbmQgYW4gZXJyb3Ig aXMgcmFpc2VkCisgKiBpZiBpdCBkb2Vzbid0IG1hdGNoIHdoYXQgd2UgZXhwZWN0IGZvciB0aGUg Y29udmVyc2lvbiBzcGVjaWZpZXIuCisgKgorICogUmV0dXJucyBmYWxzZSBpZiBubyBhY3R1YWwg ZXhwYW5zaW9uIHdhcyBtYWRlIChkdWUgdG8gdGhlICJwcmVzZW50IiBmbGFnCisgKiBiZWluZyBz ZXQgdG8gImZhbHNlIiBpbiBmb3JtYXR0ZWQgc3RyaW5nIGV4cGFuc2lvbikuCisgKi8KK3N0YXRp YyBib29sCitleHBhbmRfb25lX2pzb25iX2VsZW1lbnQoU3RyaW5nSW5mbyBidWYsIGNoYXIgKnBh cmFtLCBKc29uYlZhbHVlICpqc29udmFsLAorCQkJCQkJIGNvbnZTcGVjaWZpZXIgc3BlY2lmaWVy LCBjb25zdCBjaGFyICpmbXQpCit7CisJYm9vbCByZXN1bHQgPSB0cnVlOworCUVycm9yQ29udGV4 dENhbGxiYWNrIHNxbGVycmNvbnRleHQ7CisKKwkvKiBJZiB3ZSB3ZXJlIGdpdmVuIGEgZm9ybWF0 IHN0cmluZywgc2V0dXAgYW4gZXJlcG9ydCgpIGNvbnRleHQgY2FsbGJhY2sgKi8KKwlpZiAoZm10 KQorCXsKKwkJc3FsZXJyY29udGV4dC5jYWxsYmFjayA9IGZtdHN0cl9lcnJvcl9jYWxsYmFjazsK KwkJc3FsZXJyY29udGV4dC5hcmcgPSAodm9pZCAqKSBmbXQ7CisJCXNxbGVycmNvbnRleHQucHJl dmlvdXMgPSBlcnJvcl9jb250ZXh0X3N0YWNrOworCQllcnJvcl9jb250ZXh0X3N0YWNrID0gJnNx bGVycmNvbnRleHQ7CisJfQorCisJaWYgKCFqc29udmFsKQorCQllcmVwb3J0KEVSUk9SLAorCQkJ CShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2co ImVsZW1lbnQgXCIlc1wiIG5vdCBmb3VuZCIsIHBhcmFtKSkpOworCisJc3dpdGNoIChzcGVjaWZp ZXIpCisJeworCQljYXNlIFNwZWNJZGVudGlmaWVyOgorCQkJaWYgKGpzb252YWwtPnR5cGUgIT0g amJ2U3RyaW5nKQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lO VkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2coImV4cGVjdGVkIEpTT04gc3Ry aW5nIGZvciAlJUkgZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIsCisJCQkJCQkJCXBhcmFtLCBqc29u dmFsLT50eXBlKSkpOworCQkJZXhwYW5kX2pzb252YWxfaWRlbnRpZmllcihidWYsIGpzb252YWwp OworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVjRG90dGVkTmFtZToKKwkJCWlmIChqc29udmFsLT50 eXBlICE9IGpidkJpbmFyeSkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJS Q09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQkgZXJybXNnKCJleHBlY3RlZCBK U09OIG9iamVjdCBmb3IgJSVEIGVsZW1lbnQgXCIlc1wiLCBnb3QgJWQiLAorCQkJCQkJCQlwYXJh bSwganNvbnZhbC0+dHlwZSkpKTsKKwkJCWV4cGFuZF9qc29udmFsX2RvdHRlZG5hbWUoYnVmLCBq c29udmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgU3BlY1N0cmluZzoKKwkJCWlmIChqc29udmFs LT50eXBlICE9IGpidlN0cmluZyAmJgorCQkJCWpzb252YWwtPnR5cGUgIT0gamJ2QmluYXJ5KQor CQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1F VEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2coImV4cGVjdGVkIEpTT04gc3RyaW5nIG9yIG9iamVj dCBmb3IgJSVzIGVsZW1lbnQgXCIlc1wiLCBnb3QgJWQiLAorCQkJCQkJCQlwYXJhbSwganNvbnZh bC0+dHlwZSkpKTsKKwkJCXJlc3VsdCA9IGV4cGFuZF9qc29udmFsX3N0cmluZyhidWYsIGpzb252 YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVjU3RyaW5nTGl0ZXJhbDoKKwkJCWlmIChqc29u dmFsLT50eXBlICE9IGpidlN0cmluZykKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNv ZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQkgZXJybXNnKCJleHBl Y3RlZCBKU09OIHN0cmluZyBmb3IgJSVMIGVsZW1lbnQgXCIlc1wiLCBnb3QgJWQiLAorCQkJCQkJ CQlwYXJhbSwganNvbnZhbC0+dHlwZSkpKTsKKwkJCWV4cGFuZF9qc29udmFsX3N0cmxpdChidWYs IGpzb252YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVjVHlwZW5hbWU6CisJCQlpZiAoanNv bnZhbC0+dHlwZSAhPSBqYnZCaW5hcnkpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJj b2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiZXhw ZWN0ZWQgSlNPTiBvYmplY3QgZm9yICUlVCBlbGVtZW50IFwiJXNcIiwgZ290ICVkIiwKKwkJCQkJ CQkJcGFyYW0sIGpzb252YWwtPnR5cGUpKSk7CisJCQlleHBhbmRfanNvbnZhbF90eXBlbmFtZShi dWYsIGpzb252YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVjT3BlcmF0b3JuYW1lOgorCQkJ aWYgKGpzb252YWwtPnR5cGUgIT0gamJ2QmluYXJ5KQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJ CQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJt c2coImV4cGVjdGVkIEpTT04gb2JqZWN0IGZvciAlJU8gZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIs CisJCQkJCQkJCXBhcmFtLCBqc29udmFsLT50eXBlKSkpOworCQkJZXhwYW5kX2pzb252YWxfb3Bl cmF0b3IoYnVmLCBqc29udmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgU3BlY051bWJlcjoKKwkJ CWlmIChqc29udmFsLT50eXBlICE9IGpidk51bWVyaWMpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJ CQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVy cm1zZygiZXhwZWN0ZWQgSlNPTiBudW1lcmljIGZvciAlJW4gZWxlbWVudCBcIiVzXCIsIGdvdCAl ZCIsCisJCQkJCQkJCXBhcmFtLCBqc29udmFsLT50eXBlKSkpOworCQkJZXhwYW5kX2pzb252YWxf bnVtYmVyKGJ1ZiwganNvbnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIFNwZWNSb2xlOgorCQkJ aWYgKGpzb252YWwtPnR5cGUgIT0gamJ2QmluYXJ5KQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJ CQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJt c2coImV4cGVjdGVkIEpTT04gb2JqZWN0IGZvciAlJVIgZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIs CisJCQkJCQkJCXBhcmFtLCBqc29udmFsLT50eXBlKSkpOworCQkJZXhwYW5kX2pzb252YWxfcm9s ZShidWYsIGpzb252YWwpOworCQkJYnJlYWs7CisJfQorCisJaWYgKGZtdCkKKwkJZXJyb3JfY29u dGV4dF9zdGFjayA9IHNxbGVycmNvbnRleHQucHJldmlvdXM7CisKKwlyZXR1cm4gcmVzdWx0Owor fQorCisvKgorICogSXRlcmF0ZSBvbiB0aGUgZWxlbWVudHMgb2YgYSBKU09OIGFycmF5LCBleHBh bmRpbmcgZWFjaCBvbmUgaW50byB0aGUgb3V0cHV0CisgKiBTdHJpbmdJbmZvIHBlciB0aGUgZ2l2 ZW4gY29udmVyc2lvbiBzcGVjaWZpZXIsIHNlcGFyYXRlZCBieSB0aGUgZ2l2ZW4KKyAqIHNlcGFy YXRvci4KKyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9qc29uYl9hcnJheShTdHJpbmdJbmZvIGJ1 ZiwgY2hhciAqcGFyYW0sCisJCQkJICAgSnNvbmJWYWx1ZSAqanNvbmFyciwgY2hhciAqYXJyYXlz ZXAsIGNvbnZTcGVjaWZpZXIgc3BlY2lmaWVyLAorCQkJCSAgIGNvbnN0IGNoYXIgKmZtdCkKK3sK KwlFcnJvckNvbnRleHRDYWxsYmFjayBzcWxlcnJjb250ZXh0OworCUpzb25iQ29udGFpbmVyICpj b250YWluZXI7CisJSnNvbmJJdGVyYXRvciAgKml0OworCUpzb25iVmFsdWUJdjsKKwlpbnQJCQl0 eXBlOworCWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKwlTdHJpbmdJbmZvRGF0YSBhcnJheWVsZW07CisK KwkvKiBJZiB3ZSB3ZXJlIGdpdmVuIGEgZm9ybWF0IHN0cmluZywgc2V0dXAgYW4gZXJlcG9ydCgp IGNvbnRleHQgY2FsbGJhY2sgKi8KKwlpZiAoZm10KQorCXsKKwkJc3FsZXJyY29udGV4dC5jYWxs YmFjayA9IGZtdHN0cl9lcnJvcl9jYWxsYmFjazsKKwkJc3FsZXJyY29udGV4dC5hcmcgPSAodm9p ZCAqKSBmbXQ7CisJCXNxbGVycmNvbnRleHQucHJldmlvdXMgPSBlcnJvcl9jb250ZXh0X3N0YWNr OworCQllcnJvcl9jb250ZXh0X3N0YWNrID0gJnNxbGVycmNvbnRleHQ7CisJfQorCisJaWYgKGpz b25hcnItPnR5cGUgIT0gamJ2QmluYXJ5KQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2Rl KEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2coImVsZW1lbnQg XCIlc1wiIGlzIG5vdCBhIEpTT04gYXJyYXkiLCBwYXJhbSkpKTsKKworCWNvbnRhaW5lciA9IGpz b25hcnItPnZhbC5iaW5hcnkuZGF0YTsKKwlpZiAoIUpzb25Db250YWluZXJJc0FycmF5KGNvbnRh aW5lcikpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BB UkFNRVRFUl9WQUxVRSksCisJCQkJIGVycm1zZygiZWxlbWVudCBcIiVzXCIgaXMgbm90IGEgSlNP TiBhcnJheSIsIHBhcmFtKSkpOworCisJaW5pdFN0cmluZ0luZm8oJmFycmF5ZWxlbSk7CisKKwlp dCA9IEpzb25iSXRlcmF0b3JJbml0KGNvbnRhaW5lcik7CisJd2hpbGUgKCh0eXBlID0gSnNvbmJJ dGVyYXRvck5leHQoJml0LCAmdiwgdHJ1ZSkpICE9IFdKQl9ET05FKQorCXsKKwkJaWYgKHR5cGUg PT0gV0pCX0VMRU0pCisJCXsKKwkJCXJlc2V0U3RyaW5nSW5mbygmYXJyYXllbGVtKTsKKworCQkJ aWYgKGV4cGFuZF9vbmVfanNvbmJfZWxlbWVudCgmYXJyYXllbGVtLCBwYXJhbSwgJnYsIHNwZWNp ZmllciwgTlVMTCkpCisJCQl7CisJCQkJaWYgKCFmaXJzdCkKKwkJCQkJYXBwZW5kU3RyaW5nSW5m b1N0cmluZyhidWYsIGFycmF5c2VwKTsKKworCQkJCWFwcGVuZEJpbmFyeVN0cmluZ0luZm8oYnVm LCBhcnJheWVsZW0uZGF0YSwgYXJyYXllbGVtLmxlbik7CisJCQkJZmlyc3QgPSBmYWxzZTsKKwkJ CX0KKwkJfQorCX0KKworCWlmIChmbXQpCisJCWVycm9yX2NvbnRleHRfc3RhY2sgPSBzcWxlcnJj b250ZXh0LnByZXZpb3VzOworfQorCisvKgorICogV29ya2hvcnNlIGZvciBkZGxfZGVwYXJzZV9l eHBhbmRfY29tbWFuZC4KKyAqLworY2hhciAqCitkZGxfZGVwYXJzZV9qc29uX3RvX3N0cmluZyhj aGFyICpqc29uX3N0cikKK3sKKwlEYXR1bQkJZDsKKwlKc29uYgkgICAqanNvbmI7CisJU3RyaW5n SW5mbyBidWYgPSAoU3RyaW5nSW5mbykgcGFsbG9jMChzaXplb2YoU3RyaW5nSW5mb0RhdGEpKTsK KworCWluaXRTdHJpbmdJbmZvKGJ1Zik7CisKKwlkID0gRGlyZWN0RnVuY3Rpb25DYWxsMShqc29u Yl9pbiwgUG9pbnRlckdldERhdHVtKGpzb25fc3RyKSk7CisJanNvbmIgPSAoSnNvbmIgKikgRGF0 dW1HZXRQb2ludGVyKGQpOworCisJZXhwYW5kX2ZtdF9yZWN1cnNpdmUoJmpzb25iLT5yb290LCBi dWYpOworCisJcmV0dXJuIGJ1Zi0+ZGF0YTsKK30KKworLyotLS0tLS0KKyAqIFJldHVybnMgYSBm b3JtYXR0ZWQgc3RyaW5nIGZyb20gYSBKU09OIG9iamVjdC4KKyAqCisgKiBUaGUgc3RhcnRpbmcg cG9pbnQgaXMgdGhlIGVsZW1lbnQgbmFtZWQgImZtdCIgKHdoaWNoIG11c3QgYmUgYSBzdHJpbmcp LgorICogVGhpcyBmb3JtYXQgc3RyaW5nIG1heSBjb250YWluIHplcm8gb3IgbW9yZSAlLWVzY2Fw ZXMsIHdoaWNoIGNvbnNpc3Qgb2YgYW4KKyAqIGVsZW1lbnQgbmFtZSBlbmNsb3NlZCBpbiB7IH0s IHBvc3NpYmx5IGZvbGxvd2VkIGJ5IGEgY29udmVyc2lvbiBtb2RpZmllciwKKyAqIGZvbGxvd2Vk IGJ5IGEgY29udmVyc2lvbiBzcGVjaWZpZXIuICBQb3NzaWJsZSBjb252ZXJzaW9uIHNwZWNpZmll cnMgYXJlOgorICoKKyAqICUJCWV4cGFuZCB0byBhIGxpdGVyYWwgJS4KKyAqIEkJCWV4cGFuZCBh cyBhIHNpbmdsZSwgbm9uLXF1YWxpZmllZCBpZGVudGlmaWVyCisgKiBECQlleHBhbmQgYXMgYSBw b3NzaWJseS1xdWFsaWZpZWQgaWRlbnRpZmllcgorICogVAkJZXhwYW5kIGFzIGEgdHlwZSBuYW1l CisgKiBPCQlleHBhbmQgYXMgYW4gb3BlcmF0b3IgbmFtZQorICogTAkJZXhwYW5kIGFzIGEgc3Ry aW5nIGxpdGVyYWwgKHF1b3RlIHVzaW5nIHNpbmdsZSBxdW90ZXMpCisgKiBzCQlleHBhbmQgYXMg YSBzaW1wbGUgc3RyaW5nIChubyBxdW90aW5nKQorICogbgkJZXhwYW5kIGFzIGEgc2ltcGxlIG51 bWJlciAobm8gcXVvdGluZykKKyAqIFIJCWV4cGFuZCBhcyBhIHJvbGUgbmFtZSAocG9zc2libHkg cXVvdGVkIG5hbWUsIG9yIFBVQkxJQykKKyAqCisgKiBUaGUgZWxlbWVudCBuYW1lIG1heSBoYXZl IGFuIG9wdGlvbmFsIHNlcGFyYXRvciBzcGVjaWZpY2F0aW9uIHByZWNlZGVkCisgKiBieSBhIGNv bG9uLiAgSXRzIHByZXNlbmNlIGluZGljYXRlcyB0aGF0IHRoZSBlbGVtZW50IGlzIGV4cGVjdGVk IHRvIGJlCisgKiBhbiBhcnJheTsgdGhlIHNwZWNpZmllZCBzZXBhcmF0b3IgaXMgdXNlZCB0byBq b2luIHRoZSBhcnJheSBlbGVtZW50cy4KKyAqLS0tLS0tCisgKi8KK0RhdHVtCitkZGxfZGVwYXJz ZV9leHBhbmRfY29tbWFuZChQR19GVU5DVElPTl9BUkdTKQoreworCXRleHQJICAgKmpzb24gPSBQ R19HRVRBUkdfVEVYVF9QKDApOworCWNoYXIJICAgKmpzb25fc3RyOworCisJanNvbl9zdHIgPSBU ZXh0RGF0dW1HZXRDU3RyaW5nKGpzb24pOworCisJUEdfUkVUVVJOX1RFWFRfUChDU3RyaW5nR2V0 VGV4dERhdHVtKGRkbF9kZXBhcnNlX2pzb25fdG9fc3RyaW5nKGpzb25fc3RyKSkpOworfQorCisv KgorICogRXJyb3IgY29udGV4dCBjYWxsYmFjayBmb3IgSlNPTiBmb3JtYXQgc3RyaW5nIGV4cGFu c2lvbi4KKyAqCisgKiBYWFg6IGluZGljYXRlIHdoaWNoIGVsZW1lbnQgd2UncmUgZXhwYW5kaW5n LCBpZiBhcHBsaWNhYmxlLgorICovCitzdGF0aWMgdm9pZAorZm10c3RyX2Vycm9yX2NhbGxiYWNr KHZvaWQgKmFyZykKK3sKKwllcnJjb250ZXh0KCJ3aGlsZSBleHBhbmRpbmcgZm9ybWF0IHN0cmlu ZyBcIiVzXCIiLCAoY2hhciAqKSBhcmcpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29t bWFuZHMvc2VxdWVuY2UuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3NlcXVlbmNlLmMKaW5kZXgg OTljOWY5MWNiYS4uNDIwNWRkYTIyMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMv c2VxdWVuY2UuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jCkBAIC0xNzA4 LDYgKzE3MDgsMzkgQEAgcHJvY2Vzc19vd25lZF9ieShSZWxhdGlvbiBzZXFyZWwsIExpc3QgKm93 bmVkX2J5LCBib29sIGZvcl9pZGVudGl0eSkKIAkJcmVsYXRpb25fY2xvc2UodGFibGVyZWwsIE5v TG9jayk7CiB9CiAKKy8qCisgKiBSZXR1cm4gc2VxdWVuY2UgcGFyYW1ldGVycywgZGV0YWlsZWQK KyAqLworRm9ybV9wZ19zZXF1ZW5jZV9kYXRhCitnZXRfc2VxdWVuY2VfdmFsdWVzKE9pZCBzZXF1 ZW5jZUlkKQoreworCUJ1ZmZlciAgICAgIGJ1ZjsKKwlTZXFUYWJsZSAgICBlbG07CisJUmVsYXRp b24gICAgc2VxcmVsOworCUhlYXBUdXBsZURhdGEgc2VxdHVwbGU7CisJRm9ybV9wZ19zZXF1ZW5j ZV9kYXRhIHNlcTsKKwlGb3JtX3BnX3NlcXVlbmNlX2RhdGEgcmV0U2VxOworCisJLyogT3BlbiBh bmQgQWNjZXNzU2hhcmVMb2NrIHNlcXVlbmNlICovCisJaW5pdF9zZXF1ZW5jZShzZXF1ZW5jZUlk LCAmZWxtLCAmc2VxcmVsKTsKKworCWlmIChwZ19jbGFzc19hY2xjaGVjayhzZXF1ZW5jZUlkLCBH ZXRVc2VySWQoKSwKKwkJCUFDTF9TRUxFQ1QgfCBBQ0xfVVBEQVRFIHwgQUNMX1VTQUdFKSAhPSBB Q0xDSEVDS19PSykKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlNV RkZJQ0lFTlRfUFJJVklMRUdFKSwKKwkJCQkJIGVycm1zZygicGVybWlzc2lvbiBkZW5pZWQgZm9y IHNlcXVlbmNlICVzIiwKKwkJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShzZXFyZWwpKSkp OworCisJc2VxID0gcmVhZF9zZXFfdHVwbGUoc2VxcmVsLCAmYnVmLCAmc2VxdHVwbGUpOworCXJl dFNlcSA9IHBhbGxvYyhzaXplb2YoRm9ybURhdGFfcGdfc2VxdWVuY2VfZGF0YSkpOworCisJbWVt Y3B5KHJldFNlcSwgc2VxLCBzaXplb2YoRm9ybURhdGFfcGdfc2VxdWVuY2VfZGF0YSkpOworCisJ VW5sb2NrUmVsZWFzZUJ1ZmZlcihidWYpOworCXJlbGF0aW9uX2Nsb3NlKHNlcXJlbCwgTm9Mb2Nr KTsKKworCXJldHVybiByZXRTZXE7Cit9CiAKIC8qCiAgKiBSZXR1cm4gc2VxdWVuY2UgcGFyYW1l dGVycyBpbiBhIGxpc3Qgb2YgdGhlIGZvcm0gY3JlYXRlZCBieSB0aGUgcGFyc2VyLgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Zvcm1hdF90eXBlLmMgYi9zcmMvYmFja2VuZC91 dGlscy9hZHQvZm9ybWF0X3R5cGUuYwppbmRleCAyOTE4ZmRiZmI2Li5mNjRhNzIxM2I3IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvZm9ybWF0X3R5cGUuYworKysgYi9zcmMvYmFj a2VuZC91dGlscy9hZHQvZm9ybWF0X3R5cGUuYwpAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUg InV0aWxzL251bWVyaWMuaCIKICNpbmNsdWRlICJ1dGlscy9zeXNjYWNoZS5oIgogCi1zdGF0aWMg Y2hhciAqcHJpbnRUeXBtb2QoY29uc3QgY2hhciAqdHlwbmFtZSwgaW50MzIgdHlwbW9kLCBPaWQg dHlwbW9kb3V0KTsKIAogCiAvKgpAQCAtMzYzLDcgKzM2Miw3IEBAIGZvcm1hdF90eXBlX3dpdGhf dHlwZW1vZChPaWQgdHlwZV9vaWQsIGludDMyIHR5cGVtb2QpCiAvKgogICogQWRkIHR5cG1vZCBk ZWNvcmF0aW9uIHRvIHRoZSBiYXNpYyB0eXBlIG5hbWUKICAqLwotc3RhdGljIGNoYXIgKgorY2hh ciAqCiBwcmludFR5cG1vZChjb25zdCBjaGFyICp0eXBuYW1lLCBpbnQzMiB0eXBtb2QsIE9pZCB0 eXBtb2RvdXQpCiB7CiAJY2hhcgkgICAqcmVzOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L3JlZ3Byb2MuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9yZWdwcm9jLmMKaW5kZXgg NmQ0YzFjMjdhNS4uNmIyMzZlNWYxOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L3JlZ3Byb2MuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcmVncHJvYy5jCkBAIC00NCw2 ICs0NCw4IEBACiBzdGF0aWMgdm9pZCBwYXJzZU5hbWVBbmRBcmdUeXBlcyhjb25zdCBjaGFyICpz dHJpbmcsIGJvb2wgYWxsb3dOb25lLAogCQkJCQkJCQkgTGlzdCAqKm5hbWVzLCBpbnQgKm5hcmdz LCBPaWQgKmFyZ3R5cGVzKTsKIAorc3RhdGljIHZvaWQgZm9ybWF0X3Byb2NlZHVyZV9hcmdzX2lu dGVybmFsKEZvcm1fcGdfcHJvYyBwcm9jZm9ybSwKKwkJCQkJCQkJCQkgICBTdHJpbmdJbmZvIGJ1 ZiwgYm9vbCBmb3JjZV9xdWFsaWZ5KTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgkgVVNF UiBJL08gUk9VVElORVMJCQkJCQkJCQkJCQkJCSAqCkBAIC0zMzEsNiArMzMzLDI5IEBAIGZvcm1h dF9wcm9jZWR1cmVfcXVhbGlmaWVkKE9pZCBwcm9jZWR1cmVfb2lkKQogCXJldHVybiBmb3JtYXRf cHJvY2VkdXJlX2V4dGVuZGVkKHByb2NlZHVyZV9vaWQsIEZPUk1BVF9QUk9DX0ZPUkNFX1FVQUxJ RlkpOwogfQogCisvKgorICogZm9ybWF0X3Byb2NlZHVyZV9hcmdzICAgLSBjb252ZXJ0cyBwcm9j IE9JRCB0byAiKGFyZ3MpIgorICovCitjaGFyICoKK2Zvcm1hdF9wcm9jZWR1cmVfYXJncyhPaWQg cHJvY2VkdXJlX29pZCwgYm9vbCBmb3JjZV9xdWFsaWZ5KQoreworCVN0cmluZ0luZm9EYXRhIGJ1 ZjsKKwlIZWFwVHVwbGUgICBwcm9jdHVwOworCUZvcm1fcGdfcHJvYyBwcm9jZm9ybTsKKworCXBy b2N0dXAgPSBTZWFyY2hTeXNDYWNoZTEoUFJPQ09JRCwgT2JqZWN0SWRHZXREYXR1bShwcm9jZWR1 cmVfb2lkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHByb2N0dXApKQorCQllbG9nKEVSUk9S LCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcHJvY2VkdXJlICV1IiwgcHJvY2VkdXJlX29pZCk7 CisJcHJvY2Zvcm0gPSAoRm9ybV9wZ19wcm9jKSBHRVRTVFJVQ1QocHJvY3R1cCk7CisKKwlpbml0 U3RyaW5nSW5mbygmYnVmKTsKKwlmb3JtYXRfcHJvY2VkdXJlX2FyZ3NfaW50ZXJuYWwocHJvY2Zv cm0sICZidWYsIGZvcmNlX3F1YWxpZnkpOworCisJUmVsZWFzZVN5c0NhY2hlKHByb2N0dXApOwor CisJcmV0dXJuIGJ1Zi5kYXRhOworfQorCiAvKgogICogZm9ybWF0X3Byb2NlZHVyZV9leHRlbmRl ZCAtIGNvbnZlcnRzIHByb2NlZHVyZSBPSUQgdG8gInByb19uYW1lKGFyZ3MpIgogICoKQEAgLTIw NjAsMyArMjA4NSwzMCBAQCBwYXJzZU5hbWVBbmRBcmdUeXBlcyhjb25zdCBjaGFyICpzdHJpbmcs IGJvb2wgYWxsb3dOb25lLCBMaXN0ICoqbmFtZXMsCiAKIAlwZnJlZShyYXduYW1lKTsKIH0KKwor LyoKKyAqIEFwcGVuZCB0aGUgcGFyZW50aGlzZWQgYXJndW1lbnRzIG9mIHRoZSBnaXZlbiBwZ19w cm9jIHJvdyBpbnRvIHRoZSBvdXRwdXQKKyAqIGJ1ZmZlci4gIGZvcmNlX3F1YWxpZnkgaW5kaWNh dGVzIHdoZXRoZXIgdG8gc2NoZW1hLXF1YWxpZnkgdHlwZSBuYW1lcworICogcmVnYXJkbGVzcyBv ZiB2aXNpYmlsaXR5LgorICovCitzdGF0aWMgdm9pZAorZm9ybWF0X3Byb2NlZHVyZV9hcmdzX2lu dGVybmFsKEZvcm1fcGdfcHJvYyBwcm9jZm9ybSwgU3RyaW5nSW5mbyBidWYsCisJCQkJCQkJICAg Ym9vbCBmb3JjZV9xdWFsaWZ5KQoreworCWludAkJCWk7CisJaW50CQkJbmFyZ3MgPSBwcm9jZm9y bS0+cHJvbmFyZ3M7CisKKwlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcoJyk7CisJZm9yIChp ID0gMDsgaSA8IG5hcmdzOyBpKyspCisJeworCQlPaWQJCQl0aGlzYXJndHlwZSA9IHByb2Nmb3Jt LT5wcm9hcmd0eXBlcy52YWx1ZXNbaV07CisKKwkJaWYgKGkgPiAwKQorCQkJYXBwZW5kU3RyaW5n SW5mb0NoYXIoYnVmLCAnLCcpOworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwKKwkJCQkJ CQkgICBmb3JjZV9xdWFsaWZ5ID8KKwkJCQkJCQkgICBmb3JtYXRfdHlwZV9iZV9xdWFsaWZpZWQo dGhpc2FyZ3R5cGUpIDoKKwkJCQkJCQkgICBmb3JtYXRfdHlwZV9iZSh0aGlzYXJndHlwZSkpOwor CX0KKwlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcpJyk7Cit9CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVs ZXV0aWxzLmMKaW5kZXggMmI3YjFiMGMwZi4uNTQwNGQ1N2ViYSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9y dWxldXRpbHMuYwpAQCAtMzU4LDcgKzM1OCw2IEBAIHN0YXRpYyBpbnQJcHJpbnRfZnVuY3Rpb25f YXJndW1lbnRzKFN0cmluZ0luZm8gYnVmLCBIZWFwVHVwbGUgcHJvY3R1cCwKIAkJCQkJCQkJCSBi b29sIHByaW50X3RhYmxlX2FyZ3MsIGJvb2wgcHJpbnRfZGVmYXVsdHMpOwogc3RhdGljIHZvaWQg cHJpbnRfZnVuY3Rpb25fcmV0dHlwZShTdHJpbmdJbmZvIGJ1ZiwgSGVhcFR1cGxlIHByb2N0dXAp Owogc3RhdGljIHZvaWQgcHJpbnRfZnVuY3Rpb25fdHJmdHlwZXMoU3RyaW5nSW5mbyBidWYsIEhl YXBUdXBsZSBwcm9jdHVwKTsKLXN0YXRpYyB2b2lkIHByaW50X2Z1bmN0aW9uX3NxbGJvZHkoU3Ry aW5nSW5mbyBidWYsIEhlYXBUdXBsZSBwcm9jdHVwKTsKIHN0YXRpYyB2b2lkIHNldF9ydGFibGVf bmFtZXMoZGVwYXJzZV9uYW1lc3BhY2UgKmRwbnMsIExpc3QgKnBhcmVudF9uYW1lc3BhY2VzLAog CQkJCQkJCSBCaXRtYXBzZXQgKnJlbHNfdXNlZCk7CiBzdGF0aWMgdm9pZCBzZXRfZGVwYXJzZV9m b3JfcXVlcnkoZGVwYXJzZV9uYW1lc3BhY2UgKmRwbnMsIFF1ZXJ5ICpxdWVyeSwKQEAgLTQ4Miwy MiArNDgxLDE1IEBAIHN0YXRpYyB2b2lkIGdldF9mcm9tX2NsYXVzZV9jb2xkZWZsaXN0KFJhbmdl VGJsRnVuY3Rpb24gKnJ0ZnVuYywKIAkJCQkJCQkJCSAgIGRlcGFyc2VfY29udGV4dCAqY29udGV4 dCk7CiBzdGF0aWMgdm9pZCBnZXRfdGFibGVzYW1wbGVfZGVmKFRhYmxlU2FtcGxlQ2xhdXNlICp0 YWJsZXNhbXBsZSwKIAkJCQkJCQkJZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0KTsKLXN0YXRpYyB2 b2lkIGdldF9vcGNsYXNzX25hbWUoT2lkIG9wY2xhc3MsIE9pZCBhY3R1YWxfZGF0YXR5cGUsCi0J CQkJCQkJIFN0cmluZ0luZm8gYnVmKTsKIHN0YXRpYyBOb2RlICpwcm9jZXNzSW5kaXJlY3Rpb24o Tm9kZSAqbm9kZSwgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0KTsKIHN0YXRpYyB2b2lkIHByaW50 U3Vic2NyaXB0cyhTdWJzY3JpcHRpbmdSZWYgKnNic3JlZiwgZGVwYXJzZV9jb250ZXh0ICpjb250 ZXh0KTsKIHN0YXRpYyBjaGFyICpnZXRfcmVsYXRpb25fbmFtZShPaWQgcmVsaWQpOwogc3RhdGlj IGNoYXIgKmdlbmVyYXRlX3JlbGF0aW9uX25hbWUoT2lkIHJlbGlkLCBMaXN0ICpuYW1lc3BhY2Vz KTsKIHN0YXRpYyBjaGFyICpnZW5lcmF0ZV9xdWFsaWZpZWRfcmVsYXRpb25fbmFtZShPaWQgcmVs aWQpOwotc3RhdGljIGNoYXIgKmdlbmVyYXRlX2Z1bmN0aW9uX25hbWUoT2lkIGZ1bmNpZCwgaW50 IG5hcmdzLAotCQkJCQkJCQkJTGlzdCAqYXJnbmFtZXMsIE9pZCAqYXJndHlwZXMsCi0JCQkJCQkJ CQlib29sIGhhc192YXJpYWRpYywgYm9vbCAqdXNlX3ZhcmlhZGljX3AsCi0JCQkJCQkJCQlQYXJz ZUV4cHJLaW5kIHNwZWNpYWxfZXhwcmtpbmQpOwogc3RhdGljIGNoYXIgKmdlbmVyYXRlX29wZXJh dG9yX25hbWUoT2lkIG9wZXJpZCwgT2lkIGFyZzEsIE9pZCBhcmcyKTsKIHN0YXRpYyB2b2lkIGFk ZF9jYXN0X3RvKFN0cmluZ0luZm8gYnVmLCBPaWQgdHlwaWQpOwogc3RhdGljIGNoYXIgKmdlbmVy YXRlX3F1YWxpZmllZF90eXBlX25hbWUoT2lkIHR5cGlkKTsKIHN0YXRpYyB0ZXh0ICpzdHJpbmdf dG9fdGV4dChjaGFyICpzdHIpOwotc3RhdGljIGNoYXIgKmZsYXR0ZW5fcmVsb3B0aW9ucyhPaWQg cmVsaWQpOwogc3RhdGljIHZvaWQgZ2V0X3JlbG9wdGlvbnMoU3RyaW5nSW5mbyBidWYsIERhdHVt IHJlbG9wdGlvbnMpOwogCiAjZGVmaW5lIG9ubHlfbWFya2VyKHJ0ZSkgICgocnRlKS0+aW5oID8g IiIgOiAiT05MWSAiKQpAQCAtMTAxNSw2NSArMTAwNywxMiBAQCBwZ19nZXRfdHJpZ2dlcmRlZl93 b3JrZXIoT2lkIHRyaWdpZCwgYm9vbCBwcmV0dHkpCiAJaWYgKCFpc251bGwpCiAJewogCQlOb2Rl CSAgICpxdWFsOwotCQljaGFyCQlyZWxraW5kOwotCQlkZXBhcnNlX2NvbnRleHQgY29udGV4dDsK LQkJZGVwYXJzZV9uYW1lc3BhY2UgZHBuczsKLQkJUmFuZ2VUYmxFbnRyeSAqb2xkcnRlOwotCQlS YW5nZVRibEVudHJ5ICpuZXdydGU7Ci0KLQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmYnVmLCAi V0hFTiAoIik7CisJCWNoYXIgICAgICAgKnF1YWxzdHI7CiAKIAkJcXVhbCA9IHN0cmluZ1RvTm9k ZShUZXh0RGF0dW1HZXRDU3RyaW5nKHZhbHVlKSk7CisJCXF1YWxzdHIgPSBwZ19nZXRfdHJpZ2dl cl93aGVuY2xhdXNlKHRyaWdyZWMsIHF1YWwsIHByZXR0eSk7CiAKLQkJcmVsa2luZCA9IGdldF9y ZWxfcmVsa2luZCh0cmlncmVjLT50Z3JlbGlkKTsKLQotCQkvKiBCdWlsZCBtaW5pbWFsIE9MRCBh bmQgTkVXIFJURXMgZm9yIHRoZSByZWwgKi8KLQkJb2xkcnRlID0gbWFrZU5vZGUoUmFuZ2VUYmxF bnRyeSk7Ci0JCW9sZHJ0ZS0+cnRla2luZCA9IFJURV9SRUxBVElPTjsKLQkJb2xkcnRlLT5yZWxp ZCA9IHRyaWdyZWMtPnRncmVsaWQ7Ci0JCW9sZHJ0ZS0+cmVsa2luZCA9IHJlbGtpbmQ7Ci0JCW9s ZHJ0ZS0+cmVsbG9ja21vZGUgPSBBY2Nlc3NTaGFyZUxvY2s7Ci0JCW9sZHJ0ZS0+YWxpYXMgPSBt YWtlQWxpYXMoIm9sZCIsIE5JTCk7Ci0JCW9sZHJ0ZS0+ZXJlZiA9IG9sZHJ0ZS0+YWxpYXM7Ci0J CW9sZHJ0ZS0+bGF0ZXJhbCA9IGZhbHNlOwotCQlvbGRydGUtPmluaCA9IGZhbHNlOwotCQlvbGRy dGUtPmluRnJvbUNsID0gdHJ1ZTsKLQotCQluZXdydGUgPSBtYWtlTm9kZShSYW5nZVRibEVudHJ5 KTsKLQkJbmV3cnRlLT5ydGVraW5kID0gUlRFX1JFTEFUSU9OOwotCQluZXdydGUtPnJlbGlkID0g dHJpZ3JlYy0+dGdyZWxpZDsKLQkJbmV3cnRlLT5yZWxraW5kID0gcmVsa2luZDsKLQkJbmV3cnRl LT5yZWxsb2NrbW9kZSA9IEFjY2Vzc1NoYXJlTG9jazsKLQkJbmV3cnRlLT5hbGlhcyA9IG1ha2VB bGlhcygibmV3IiwgTklMKTsKLQkJbmV3cnRlLT5lcmVmID0gbmV3cnRlLT5hbGlhczsKLQkJbmV3 cnRlLT5sYXRlcmFsID0gZmFsc2U7Ci0JCW5ld3J0ZS0+aW5oID0gZmFsc2U7Ci0JCW5ld3J0ZS0+ aW5Gcm9tQ2wgPSB0cnVlOwotCi0JCS8qIEJ1aWxkIHR3by1lbGVtZW50IHJ0YWJsZSAqLwotCQlt ZW1zZXQoJmRwbnMsIDAsIHNpemVvZihkcG5zKSk7Ci0JCWRwbnMucnRhYmxlID0gbGlzdF9tYWtl MihvbGRydGUsIG5ld3J0ZSk7Ci0JCWRwbnMuc3VicGxhbnMgPSBOSUw7Ci0JCWRwbnMuY3RlcyA9 IE5JTDsKLQkJZHBucy5hcHBlbmRyZWxzID0gTlVMTDsKLQkJc2V0X3J0YWJsZV9uYW1lcygmZHBu cywgTklMLCBOVUxMKTsKLQkJc2V0X3NpbXBsZV9jb2x1bW5fbmFtZXMoJmRwbnMpOwotCi0JCS8q IFNldCB1cCBjb250ZXh0IHdpdGggb25lLWRlZXAgbmFtZXNwYWNlIHN0YWNrICovCi0JCWNvbnRl eHQuYnVmID0gJmJ1ZjsKLQkJY29udGV4dC5uYW1lc3BhY2VzID0gbGlzdF9tYWtlMSgmZHBucyk7 Ci0JCWNvbnRleHQud2luZG93Q2xhdXNlID0gTklMOwotCQljb250ZXh0LndpbmRvd1RMaXN0ID0g TklMOwotCQljb250ZXh0LnZhcnByZWZpeCA9IHRydWU7Ci0JCWNvbnRleHQucHJldHR5RmxhZ3Mg PSBHRVRfUFJFVFRZX0ZMQUdTKHByZXR0eSk7Ci0JCWNvbnRleHQud3JhcENvbHVtbiA9IFdSQVBf Q09MVU1OX0RFRkFVTFQ7Ci0JCWNvbnRleHQuaW5kZW50TGV2ZWwgPSBQUkVUVFlJTkRFTlRfU1RE OwotCQljb250ZXh0LnNwZWNpYWxfZXhwcmtpbmQgPSBFWFBSX0tJTkRfTk9ORTsKLQkJY29udGV4 dC5hcHBlbmRwYXJlbnRzID0gTlVMTDsKLQotCQlnZXRfcnVsZV9leHByKHF1YWwsICZjb250ZXh0 LCBmYWxzZSk7Ci0KLQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmYnVmLCAiKSAiKTsKKwkJYXBw ZW5kU3RyaW5nSW5mbygmYnVmLCAiV0hFTiAoJXMpICIsIHF1YWxzdHIpOwogCX0KIAogCWFwcGVu ZFN0cmluZ0luZm8oJmJ1ZiwgIkVYRUNVVEUgRlVOQ1RJT04gJXMoIiwKQEAgLTExMTQsNiArMTA1 Myw2NCBAQCBwZ19nZXRfdHJpZ2dlcmRlZl93b3JrZXIoT2lkIHRyaWdpZCwgYm9vbCBwcmV0dHkp CiAJcmV0dXJuIGJ1Zi5kYXRhOwogfQogCitjaGFyICoKK3BnX2dldF90cmlnZ2VyX3doZW5jbGF1 c2UoRm9ybV9wZ190cmlnZ2VyIHRyaWdyZWMsIE5vZGUgKndoZW5DbGF1c2UsIGJvb2wgcHJldHR5 KQoreworCVN0cmluZ0luZm9EYXRhIGJ1ZjsKKwljaGFyICAgICAgICByZWxraW5kOworCWRlcGFy c2VfY29udGV4dCBjb250ZXh0OworCWRlcGFyc2VfbmFtZXNwYWNlIGRwbnM7CisJUmFuZ2VUYmxF bnRyeSAqb2xkcnRlOworCVJhbmdlVGJsRW50cnkgKm5ld3J0ZTsKKworICAgaW5pdFN0cmluZ0lu Zm8oJmJ1Zik7CisKKyAgIHJlbGtpbmQgPSBnZXRfcmVsX3JlbGtpbmQodHJpZ3JlYy0+dGdyZWxp ZCk7CisKKyAgIC8qIEJ1aWxkIG1pbmltYWwgT0xEIGFuZCBORVcgUlRFcyBmb3IgdGhlIHJlbCAq LworICAgb2xkcnRlID0gbWFrZU5vZGUoUmFuZ2VUYmxFbnRyeSk7CisgICBvbGRydGUtPnJ0ZWtp bmQgPSBSVEVfUkVMQVRJT047CisgICBvbGRydGUtPnJlbGlkID0gdHJpZ3JlYy0+dGdyZWxpZDsK KyAgIG9sZHJ0ZS0+cmVsa2luZCA9IHJlbGtpbmQ7CisgICBvbGRydGUtPmFsaWFzID0gbWFrZUFs aWFzKCJvbGQiLCBOSUwpOworICAgb2xkcnRlLT5lcmVmID0gb2xkcnRlLT5hbGlhczsKKyAgIG9s ZHJ0ZS0+bGF0ZXJhbCA9IGZhbHNlOworICAgb2xkcnRlLT5pbmggPSBmYWxzZTsKKyAgIG9sZHJ0 ZS0+aW5Gcm9tQ2wgPSB0cnVlOworCisgICBuZXdydGUgPSBtYWtlTm9kZShSYW5nZVRibEVudHJ5 KTsKKyAgIG5ld3J0ZS0+cnRla2luZCA9IFJURV9SRUxBVElPTjsKKyAgIG5ld3J0ZS0+cmVsaWQg PSB0cmlncmVjLT50Z3JlbGlkOworICAgbmV3cnRlLT5yZWxraW5kID0gcmVsa2luZDsKKyAgIG5l d3J0ZS0+YWxpYXMgPSBtYWtlQWxpYXMoIm5ldyIsIE5JTCk7CisgICBuZXdydGUtPmVyZWYgPSBu ZXdydGUtPmFsaWFzOworICAgbmV3cnRlLT5sYXRlcmFsID0gZmFsc2U7CisgICBuZXdydGUtPmlu aCA9IGZhbHNlOworICAgbmV3cnRlLT5pbkZyb21DbCA9IHRydWU7CisKKyAgIC8qIEJ1aWxkIHR3 by1lbGVtZW50IHJ0YWJsZSAqLworICAgbWVtc2V0KCZkcG5zLCAwLCBzaXplb2YoZHBucykpOwor ICAgZHBucy5ydGFibGUgPSBsaXN0X21ha2UyKG9sZHJ0ZSwgbmV3cnRlKTsKKyAgIGRwbnMuY3Rl cyA9IE5JTDsKKyAgIHNldF9ydGFibGVfbmFtZXMoJmRwbnMsIE5JTCwgTlVMTCk7CisgICBzZXRf c2ltcGxlX2NvbHVtbl9uYW1lcygmZHBucyk7CisKKyAgIC8qIFNldCB1cCBjb250ZXh0IHdpdGgg b25lLWRlZXAgbmFtZXNwYWNlIHN0YWNrICovCisgICBjb250ZXh0LmJ1ZiA9ICZidWY7CisgICBj b250ZXh0Lm5hbWVzcGFjZXMgPSBsaXN0X21ha2UxKCZkcG5zKTsKKyAgIGNvbnRleHQud2luZG93 Q2xhdXNlID0gTklMOworICAgY29udGV4dC53aW5kb3dUTGlzdCA9IE5JTDsKKyAgIGNvbnRleHQu dmFycHJlZml4ID0gdHJ1ZTsKKyAgIGNvbnRleHQucHJldHR5RmxhZ3MgPSBwcmV0dHkgPyBQUkVU VFlGTEFHX1BBUkVOIHwgUFJFVFRZRkxBR19JTkRFTlQgOiBQUkVUVFlGTEFHX0lOREVOVDsKKyAg IGNvbnRleHQud3JhcENvbHVtbiA9IFdSQVBfQ09MVU1OX0RFRkFVTFQ7CisgICBjb250ZXh0Lmlu ZGVudExldmVsID0gUFJFVFRZSU5ERU5UX1NURDsKKyAgIGNvbnRleHQuc3BlY2lhbF9leHBya2lu ZCA9IEVYUFJfS0lORF9OT05FOworCisgICBnZXRfcnVsZV9leHByKHdoZW5DbGF1c2UsICZjb250 ZXh0LCBmYWxzZSk7CisKKyAgIHJldHVybiBidWYuZGF0YTsKK30KKwogLyogLS0tLS0tLS0tLQog ICogcGdfZ2V0X2luZGV4ZGVmCQkJLSBHZXQgdGhlIGRlZmluaXRpb24gb2YgYW4gaW5kZXgKICAq CkBAIC0xODgwLDYgKzE4NzcsMTMgQEAgcGdfZ2V0X3BhcnRrZXlkZWZfY29sdW1ucyhPaWQgcmVs aWQsIGJvb2wgcHJldHR5KQogCXJldHVybiBwZ19nZXRfcGFydGtleWRlZl93b3JrZXIocmVsaWQs IHByZXR0eUZsYWdzLCB0cnVlLCBmYWxzZSk7CiB9CiAKKy8qIEludGVybmFsIHZlcnNpb24gdGhh dCByZXBvcnRzIHRoZSBmdWxsIHBhcnRpdGlvbiBrZXkgZGVmaW5pdGlvbiAqLworY2hhciAqCitw Z19nZXRfcGFydGtleWRlZl9zaW1wbGUoT2lkIHJlbGlkKQoreworCXJldHVybiBwZ19nZXRfcGFy dGtleWRlZl93b3JrZXIocmVsaWQsIDAsIGZhbHNlLCBmYWxzZSk7Cit9CisKIC8qCiAgKiBJbnRl cm5hbCB3b3JraG9yc2UgdG8gZGVjb21waWxlIGEgcGFydGl0aW9uIGtleSBkZWZpbml0aW9uLgog ICovCkBAIC0yMTMxLDYgKzIxMzUsMTUgQEAgcGdfZ2V0X2NvbnN0cmFpbnRkZWZfZXh0KFBHX0ZV TkNUSU9OX0FSR1MpCiAJUEdfUkVUVVJOX1RFWFRfUChzdHJpbmdfdG9fdGV4dChyZXMpKTsKIH0K IAorLyoKKyAqIEludGVybmFsIHZlcnNpb24gdGhhdCByZXR1cm5zIGRlZmluaXRpb24gb2YgYSBD T05TVFJBSU5UIGNvbW1hbmQKKyAqLworY2hhciAqCitwZ19nZXRfY29uc3RyYWludGRlZl9jb21t YW5kX3NpbXBsZShPaWQgY29uc3RyYWludElkKQoreworCXJldHVybiBwZ19nZXRfY29uc3RyYWlu dGRlZl93b3JrZXIoY29uc3RyYWludElkLCBmYWxzZSwgMCwgZmFsc2UpOworfQorCiAvKgogICog SW50ZXJuYWwgdmVyc2lvbiB0aGF0IHJldHVybnMgYSBmdWxsIEFMVEVSIFRBQkxFIC4uLiBBREQg Q09OU1RSQUlOVCBjb21tYW5kCiAgKi8KQEAgLTM1MDEsNyArMzUxNCw3IEBAIHBnX2dldF9mdW5j dGlvbl9hcmdfZGVmYXVsdChQR19GVU5DVElPTl9BUkdTKQogCVBHX1JFVFVSTl9URVhUX1Aoc3Ry aW5nX3RvX3RleHQoc3RyKSk7CiB9CiAKLXN0YXRpYyB2b2lkCit2b2lkCiBwcmludF9mdW5jdGlv bl9zcWxib2R5KFN0cmluZ0luZm8gYnVmLCBIZWFwVHVwbGUgcHJvY3R1cCkKIHsKIAlpbnQJCQlu dW1hcmdzOwpAQCAtMTEzODAsNyArMTEzOTMsNyBAQCBnZXRfdGFibGVzYW1wbGVfZGVmKFRhYmxl U2FtcGxlQ2xhdXNlICp0YWJsZXNhbXBsZSwgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0KQogICog YWN0dWFsX2RhdGF0eXBlLiAgKElmIHlvdSBkb24ndCB3YW50IHRoaXMgYmVoYXZpb3IsIGp1c3Qg cGFzcwogICogSW52YWxpZE9pZCBmb3IgYWN0dWFsX2RhdGF0eXBlLikKICAqLwotc3RhdGljIHZv aWQKK3ZvaWQKIGdldF9vcGNsYXNzX25hbWUoT2lkIG9wY2xhc3MsIE9pZCBhY3R1YWxfZGF0YXR5 cGUsCiAJCQkJIFN0cmluZ0luZm8gYnVmKQogewpAQCAtMTE3NzQsNyArMTE3ODcsNyBAQCBnZW5l cmF0ZV9xdWFsaWZpZWRfcmVsYXRpb25fbmFtZShPaWQgcmVsaWQpCiAgKgogICogVGhlIHJlc3Vs dCBpbmNsdWRlcyBhbGwgbmVjZXNzYXJ5IHF1b3RpbmcgYW5kIHNjaGVtYS1wcmVmaXhpbmcuCiAg Ki8KLXN0YXRpYyBjaGFyICoKK2NoYXIgKgogZ2VuZXJhdGVfZnVuY3Rpb25fbmFtZShPaWQgZnVu Y2lkLCBpbnQgbmFyZ3MsIExpc3QgKmFyZ25hbWVzLCBPaWQgKmFyZ3R5cGVzLAogCQkJCQkgICBi b29sIGhhc192YXJpYWRpYywgYm9vbCAqdXNlX3ZhcmlhZGljX3AsCiAJCQkJCSAgIFBhcnNlRXhw cktpbmQgc3BlY2lhbF9leHBya2luZCkKQEAgLTEyMTYwLDcgKzEyMTczLDcgQEAgZ2V0X3JlbG9w dGlvbnMoU3RyaW5nSW5mbyBidWYsIERhdHVtIHJlbG9wdGlvbnMpCiAvKgogICogR2VuZXJhdGUg YSBDIHN0cmluZyByZXByZXNlbnRpbmcgYSByZWxhdGlvbidzIHJlbG9wdGlvbnMsIG9yIE5VTEwg aWYgbm9uZS4KICAqLwotc3RhdGljIGNoYXIgKgorY2hhciAqCiBmbGF0dGVuX3JlbG9wdGlvbnMo T2lkIHJlbGlkKQogewogCWNoYXIJICAgKnJlc3VsdCA9IE5VTEw7CmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9j LmRhdAppbmRleCBhMDdlNzM3YTMzLi4wYmZhZWI5NjVkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9jYXRhbG9nL3BnX3Byb2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5k YXQKQEAgLTExODIwLDQgKzExODIwLDEwIEBACiAgIHByb3JldHR5cGUgPT4gJ2J5dGVhJywgcHJv YXJndHlwZXMgPT4gJ3BnX2JyaW5fbWlubWF4X211bHRpX3N1bW1hcnknLAogICBwcm9zcmMgPT4g J2JyaW5fbWlubWF4X211bHRpX3N1bW1hcnlfc2VuZCcgfSwKIAoreyBvaWQgPT4gJzQ2NDInLCBk ZXNjciA9PiAnZGVwYXJzZSB0aGUgRERMIGNvbW1hbmQgaW50byBqc29uIGZvcm1hdCBzdHJpbmcn LAorICBwcm9uYW1lID0+ICdkZGxfZGVwYXJzZV90b19qc29uJywgcHJvcmV0dHlwZSA9PiAndGV4 dCcsCisgIHByb2FyZ3R5cGVzID0+ICdwZ19kZGxfY29tbWFuZCcsIHByb3NyYyA9PiAnZGRsX2Rl cGFyc2VfdG9fanNvbicgfSwKK3sgb2lkID0+ICc0NjQzJywgZGVzY3IgPT4gJ2V4cGFuZCBqc29u IGZvcm1hdCBEREwgdG8gYSBwbGFpbiBEREwgY29tbWFuZCcsCisgIHByb25hbWUgPT4gJ2RkbF9k ZXBhcnNlX2V4cGFuZF9jb21tYW5kJywgcHJvcmV0dHlwZSA9PiAndGV4dCcsCisgIHByb2FyZ3R5 cGVzID0+ICd0ZXh0JywgcHJvc3JjID0+ICdkZGxfZGVwYXJzZV9leHBhbmRfY29tbWFuZCcgfSwK IF0KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3NlcXVlbmNlLmggYi9zcmMvaW5j bHVkZS9jb21tYW5kcy9zZXF1ZW5jZS5oCmluZGV4IGIzYjA0Y2NmYTkuLmMyYjFjYTMyZjYgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3NlcXVlbmNlLmgKKysrIGIvc3JjL2luY2x1 ZGUvY29tbWFuZHMvc2VxdWVuY2UuaApAQCAtNTQsNiArNTQsNyBAQCB0eXBlZGVmIHN0cnVjdCB4 bF9zZXFfcmVjCiBleHRlcm4gaW50NjQgbmV4dHZhbF9pbnRlcm5hbChPaWQgcmVsaWQsIGJvb2wg Y2hlY2tfcGVybWlzc2lvbnMpOwogZXh0ZXJuIERhdHVtIG5leHR2YWwoUEdfRlVOQ1RJT05fQVJH Uyk7CiBleHRlcm4gTGlzdCAqc2VxdWVuY2Vfb3B0aW9ucyhPaWQgcmVsaWQpOworZXh0ZXJuIEZv cm1fcGdfc2VxdWVuY2VfZGF0YSBnZXRfc2VxdWVuY2VfdmFsdWVzKE9pZCBzZXF1ZW5jZUlkKTsK IAogZXh0ZXJuIE9iamVjdEFkZHJlc3MgRGVmaW5lU2VxdWVuY2UoUGFyc2VTdGF0ZSAqcHN0YXRl LCBDcmVhdGVTZXFTdG10ICpzZXEpOwogZXh0ZXJuIE9iamVjdEFkZHJlc3MgQWx0ZXJTZXF1ZW5j ZShQYXJzZVN0YXRlICpwc3RhdGUsIEFsdGVyU2VxU3RtdCAqc3RtdCk7CmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS90Y29wL2RkbF9kZXBhcnNlLmggYi9zcmMvaW5jbHVkZS90Y29wL2RkbF9kZXBh cnNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uYmRmZGY0N2UyZgot LS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL3Rjb3AvZGRsX2RlcGFyc2UuaApAQCAtMCww ICsxLDIzIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBkZGxfZGVwYXJzZS5oCisgKgor ICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERl dmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMg b2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIHNyYy9pbmNsdWRlL3Rjb3Av ZGRsX2RlcGFyc2UuaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIERETF9E RVBBUlNFX0gKKyNkZWZpbmUgRERMX0RFUEFSU0VfSAorCisjaW5jbHVkZSAidGNvcC9kZXBhcnNl X3V0aWxpdHkuaCIKKworZXh0ZXJuIGNoYXIgKmRlcGFyc2VfdXRpbGl0eV9jb21tYW5kKENvbGxl Y3RlZENvbW1hbmQgKmNtZCwgYm9vbCB2ZXJib3NlX21vZGUpOworZXh0ZXJuIGNoYXIgKmRkbF9k ZXBhcnNlX2pzb25fdG9fc3RyaW5nKGNoYXIgKmpzb25iKTsKK2V4dGVybiBjaGFyICpkZXBhcnNl X2Ryb3BfY29tbWFuZChjb25zdCBjaGFyICpvYmppZGVudGl0eSwgY29uc3QgY2hhciAqb2JqZWN0 dHlwZSwKKwkJCQkJCQkJICBEcm9wQmVoYXZpb3IgYmVoYXZpb3IpOworCisKKyNlbmRpZgkJLyog RERMX0RFUEFSU0VfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0 aWxpdHkuaCBiL3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmgKaW5kZXggOTRkZTEz ZDk5MC4uYjUzMjk0YmY1NyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0 aWxpdHkuaAorKysgYi9zcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oCkBAIC02Miw2 ICs2Miw3IEBAIHR5cGVkZWYgc3RydWN0IENvbGxlY3RlZENvbW1hbmQKIAkJewogCQkJT2lkCQkJ b2JqZWN0SWQ7CiAJCQlPaWQJCQljbGFzc0lkOworCQkJYm9vbAkJcmV3cml0ZTsKIAkJCUxpc3QJ ICAgKnN1YmNtZHM7CiAJCX0JCQlhbHRlclRhYmxlOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS91dGlscy9idWlsdGlucy5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvYnVpbHRpbnMuaAppbmRleCA4 MTYzMWYxNjQ1Li43MTUwZmFiZDI0IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9idWls dGlucy5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2J1aWx0aW5zLmgKQEAgLTExNCwxMCArMTE0 LDEyIEBAIGV4dGVybiBEYXR1bSBudW1lcmljX2Zsb2F0OF9ub19vdmVyZmxvdyhQR19GVU5DVElP Tl9BUkdTKTsKICNkZWZpbmUgRk9STUFUX1RZUEVfRk9SQ0VfUVVBTElGWQkweDA0CS8qIGZvcmNl IHF1YWxpZmljYXRpb24gb2YgdHlwZSAqLwogI2RlZmluZSBGT1JNQVRfVFlQRV9JTlZBTElEX0FT X05VTEwJMHgwOAkvKiBOVUxMIGlmIHVuZGVmaW5lZCAqLwogZXh0ZXJuIGNoYXIgKmZvcm1hdF90 eXBlX2V4dGVuZGVkKE9pZCB0eXBlX29pZCwgaW50MzIgdHlwZW1vZCwgYml0czE2IGZsYWdzKTsK K2V4dGVybiBjaGFyICpmb3JtYXRfcHJvY2VkdXJlX2FyZ3MoT2lkIHByb2NlZHVyZV9vaWQsIGJv b2wgZm9yY2VfcXVhbGlmeSk7CiAKIGV4dGVybiBjaGFyICpmb3JtYXRfdHlwZV9iZShPaWQgdHlw ZV9vaWQpOwogZXh0ZXJuIGNoYXIgKmZvcm1hdF90eXBlX2JlX3F1YWxpZmllZChPaWQgdHlwZV9v aWQpOwogZXh0ZXJuIGNoYXIgKmZvcm1hdF90eXBlX3dpdGhfdHlwZW1vZChPaWQgdHlwZV9vaWQs IGludDMyIHR5cGVtb2QpOworZXh0ZXJuIGNoYXIgKnByaW50VHlwbW9kKGNvbnN0IGNoYXIgKnR5 cG5hbWUsIGludDMyIHR5cG1vZCwgT2lkIHR5cG1vZG91dCk7CiAKIGV4dGVybiBpbnQzMiB0eXBl X21heGltdW1fc2l6ZShPaWQgdHlwZV9vaWQsIGludDMyIHR5cGVtb2QpOwogCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS91dGlscy9ydWxldXRpbHMuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3J1bGV1 dGlscy5oCmluZGV4IDdkNDg5NzE4YTMuLjNkNjlhNjBjYzIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL3V0aWxzL3J1bGV1dGlscy5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL3J1bGV1dGlscy5o CkBAIC0xMyw2ICsxMyw3IEBACiAjaWZuZGVmIFJVTEVVVElMU19ICiAjZGVmaW5lIFJVTEVVVElM U19ICiAKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3RyaWdnZXIuaCIKICNpbmNsdWRlICJub2Rlcy9u b2Rlcy5oIgogI2luY2x1ZGUgIm5vZGVzL3BhcnNlbm9kZXMuaCIKICNpbmNsdWRlICJub2Rlcy9w Z19saXN0LmgiCkBAIC0yMywxMiArMjQsMTYgQEAgc3RydWN0IFBsYW5uZWRTdG10OwogCiBleHRl cm4gY2hhciAqcGdfZ2V0X2luZGV4ZGVmX3N0cmluZyhPaWQgaW5kZXhyZWxpZCk7CiBleHRlcm4g Y2hhciAqcGdfZ2V0X2luZGV4ZGVmX2NvbHVtbnMoT2lkIGluZGV4cmVsaWQsIGJvb2wgcHJldHR5 KTsKK2V4dGVybiBjaGFyICpwZ19nZXRfdHJpZ2dlcl93aGVuY2xhdXNlKEZvcm1fcGdfdHJpZ2dl ciB0cmlncmVjLAorCQkJCQkJCQkJICAgTm9kZSAqd2hlbkNsYXVzZSwgYm9vbCBwcmV0dHkpOwog ZXh0ZXJuIGNoYXIgKnBnX2dldF9xdWVyeWRlZihRdWVyeSAqcXVlcnksIGJvb2wgcHJldHR5KTsK IAogZXh0ZXJuIGNoYXIgKnBnX2dldF9wYXJ0a2V5ZGVmX2NvbHVtbnMoT2lkIHJlbGlkLCBib29s IHByZXR0eSk7CitleHRlcm4gY2hhciAqcGdfZ2V0X3BhcnRrZXlkZWZfc2ltcGxlKE9pZCByZWxp ZCk7CiBleHRlcm4gY2hhciAqcGdfZ2V0X3BhcnRjb25zdHJkZWZfc3RyaW5nKE9pZCBwYXJ0aXRp b25JZCwgY2hhciAqYWxpYXNuYW1lKTsKIAogZXh0ZXJuIGNoYXIgKnBnX2dldF9jb25zdHJhaW50 ZGVmX2NvbW1hbmQoT2lkIGNvbnN0cmFpbnRJZCk7CitleHRlcm4gY2hhciAqcGdfZ2V0X2NvbnN0 cmFpbnRkZWZfY29tbWFuZF9zaW1wbGUoT2lkIGNvbnN0cmFpbnRJZCk7CiBleHRlcm4gY2hhciAq ZGVwYXJzZV9leHByZXNzaW9uKE5vZGUgKmV4cHIsIExpc3QgKmRwY29udGV4dCwKIAkJCQkJCQkJ Ym9vbCBmb3JjZXByZWZpeCwgYm9vbCBzaG93aW1wbGljaXQpOwogZXh0ZXJuIExpc3QgKmRlcGFy c2VfY29udGV4dF9mb3IoY29uc3QgY2hhciAqYWxpYXNuYW1lLCBPaWQgcmVsaWQpOwpAQCAtNDAs OCArNDUsMTYgQEAgZXh0ZXJuIExpc3QgKnNlbGVjdF9ydGFibGVfbmFtZXNfZm9yX2V4cGxhaW4o TGlzdCAqcnRhYmxlLAogCQkJCQkJCQkJCQkgQml0bWFwc2V0ICpyZWxzX3VzZWQpOwogZXh0ZXJu IGNoYXIgKmdlbmVyYXRlX2NvbGxhdGlvbl9uYW1lKE9pZCBjb2xsaWQpOwogZXh0ZXJuIGNoYXIg KmdlbmVyYXRlX29wY2xhc3NfbmFtZShPaWQgb3BjbGFzcyk7CitleHRlcm4gY2hhciAqZ2VuZXJh dGVfZnVuY3Rpb25fbmFtZShPaWQgZnVuY2lkLCBpbnQgbmFyZ3MsIExpc3QgKmFyZ25hbWVzLAor CQkJCQkJCQkJT2lkICphcmd0eXBlcywgYm9vbCBoYXNfdmFyaWFkaWMsCisJCQkJCQkJCQlib29s ICp1c2VfdmFyaWFkaWNfcCwKKwkJCQkJCQkJCVBhcnNlRXhwcktpbmQgc3BlY2lhbF9leHBya2lu ZCk7CiBleHRlcm4gY2hhciAqZ2V0X3JhbmdlX3BhcnRib3VuZF9zdHJpbmcoTGlzdCAqYm91bmRf ZGF0dW1zKTsKK2V4dGVybiB2b2lkIGdldF9vcGNsYXNzX25hbWUoT2lkIG9wY2xhc3MsIE9pZCBh Y3R1YWxfZGF0YXR5cGUsCisJCQkJCQkJICBTdHJpbmdJbmZvIGJ1Zik7CitleHRlcm4gY2hhciAq ZmxhdHRlbl9yZWxvcHRpb25zKE9pZCByZWxpZCk7CiAKIGV4dGVybiBjaGFyICpwZ19nZXRfc3Rh dGlzdGljc29iamRlZl9zdHJpbmcoT2lkIHN0YXRleHRpZCk7CitleHRlcm4gdm9pZCBwcmludF9m dW5jdGlvbl9zcWxib2R5KFN0cmluZ0luZm8gYnVmLCBIZWFwVHVwbGUgcHJvY3R1cCk7CiAKICNl bmRpZgkJCQkJCQkvKiBSVUxFVVRJTFNfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5k ZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRl eCA5N2M5YmMxODYxLi5lZjE2ODY5NGExIDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQv dHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAt MTYxMCw2ICsxNjEwLDkgQEAgT1NJbmZvCiBPU1NMQ2lwaGVyCiBPU1NMRGlnZXN0CiBPVkVSTEFQ UEVECitPYmpFbGVtCitPYmpUcmVlCitPYmpUeXBlCiBPYmplY3RBY2Nlc3NEcm9wCiBPYmplY3RB Y2Nlc3NOYW1lc3BhY2VTZWFyY2gKIE9iamVjdEFjY2Vzc1Bvc3RBbHRlcgpAQCAtMzE3Niw2ICsz MTc5LDcgQEAgY29sb3JtYXByYW5nZQogY29tcGFyZV9jb250ZXh0CiBjb25maWdfdmFyX3ZhbHVl CiBjb250YWluX2FnZ3Nfb2ZfbGV2ZWxfY29udGV4dAorY29udlNwZWNpZmllcgogY29udmVydF90 ZXN0ZXhwcl9jb250ZXh0CiBjb3B5X2RhdGFfc291cmNlX2NiCiBjb3JlX1lZU1RZUEUKLS0gCjIu MzIuMAoK --00000000000056eb5505e991f569 Content-Type: text/x-patch; charset="US-ASCII"; name="v23-0002-Support-DDL-replication.patch" Content-Disposition: attachment; filename="v23-0002-Support-DDL-replication.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l8imillf1 RnJvbSAzMWIwMGExNGZjZTdmNGQ5NjY0OGFhMmJmMDQxYWJmNjkxNjgyOTQwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBWaWduZXNod2FyYW4gQyA8dmlnbmVzaDIxQGdtYWlsLmNvbT4K RGF0ZTogTW9uLCAyNiBTZXAgMjAyMiAxNToxMToyOSArMDUzMApTdWJqZWN0OiBbUEFUQ0ggdjIz IDIvNl0gU3VwcG9ydCBEREwgcmVwbGljYXRpb24uCgpUbyBzdXBwb3J0IERETCByZXBsaWNhdGlv biwgd2UgdXNlIGV2ZW50IHRyaWdnZXIgYW5kIERETCBkZXBhcnNpbmcKZmFjaWxpdGllcy4gV2hp bGUgY3JlYXRpbmcgYSBwdWJsaWNhdGlvbiwgd2UgcmVnaXN0ZXIgYSBjb21tYW5kIGVuZAp0cmln Z2VyIHRoYXQgZGVwYXJzZXMgdGhlIERETCBhcyBhIEpTT04gYmxvYiwgYW5kIFdBTCBsb2dzIGl0 LiBUaGUgZXZlbnQKdHJpZ2dlciBpcyBhdXRvbWF0aWNhbGx5IHJlbW92ZWQgYXQgdGhlIHRpbWUg b2YgZHJvcCBwdWJsaWNhdGlvbi4gVGhlCldBTFNlbmRlciBkZWNvZGVzIHRoZSBXQUwgYW5kIHNl bmRzIGl0IGRvd25zdHJlYW0gc2ltaWxhciB0byBvdGhlciBETUwKY29tbWFuZHMuIFRoZSBzdWJz Y3JpYmVyIHRoZW4gY29udmVydHMgSlNPTiBiYWNrIHRvIHRoZSBEREwgY29tbWFuZCBzdHJpbmcK YW5kIGV4ZWN1dGVzIGl0LiBJbiB0aGUgc3Vic2NyaWJlciwgd2UgYWxzbyBhZGQgdGhlIG5ld2x5 IGFkZGVkIHJlbCB0bwpwZ19zdWJzY3JpcHRpb25fcmVsIHNvIHRoYXQgdGhlIERNTCBjaGFuZ2Vz IG9uIHRoZSBuZXcgdGFibGUgY2FuIGJlCnJlcGxpY2F0ZWQgd2l0aG91dCBoYXZpbmcgdG8gbWFu dWFsbHkgcnVuCiJBTFRFUiBTVUJTQ1JJUFRJT04gLi4uIFJFRlJFU0ggUFVCTElDQVRJT04iLgoK VGhpcyBpcyBhIFBPQyBwYXRjaCB0byBzaG93IGhvdyB1c2luZyBldmVudCB0cmlnZ2VycyBhbmQg RERMIGRlcGFyc2luZwpmYWNpbGl0aWVzIHdlIGNhbiBpbXBsZW1lbnQgRERMIHJlcGxpY2F0aW9u LiBTbywgdGhlIGltcGxlbWVudGF0aW9uIGlzCnJlc3RyaWN0ZWQgdG8gQ1JFQVRFIFRBQkxFL0FM VEVSIFRBQkxFL0RST1AgVEFCTEUgY29tbWFuZHMuCgotIEZvciBub24tcmV3cml0ZSBBTFRFUiBv YmplY3QgY29tbWFuZCBhbmQKLSAgICAgQ1JFQVRFIG9iamVjdCBjb21tYW5kOgp3ZSBkZXBhcnNl IHRoZSBjb21tYW5kIGF0IGRkbF9jb21tYW5kX2VuZCBldmVudCB0cmlnZ2VyIGFuZCBXQUwgbG9n IHRoZQpkZXBhcnNlZCBqc29uIHN0cmluZy4gVGhlIFdBTFNlbmRlciBkZWNvZGVzIHRoZSBXQUwg YW5kIHNlbmRzIGl0IHRvCnN1YnNjcmliZXIgaWYgdGhlIGNyZWF0ZWQvYWx0ZXJlZCB0YWJsZSBp cyBwdWJsaXNoZWQuIEl0IHN1cHBvcnRzIG1vc3Qgb2YKQUxURVIgVEFCTEUgY29tbWFuZCBleGNl cHQgc29tZSBjb21tYW5kcyhEREwgcmVsYXRlZCB0byBQQVJUSVRJT05FRCBUQUJMRQouLi4pIHRo YXQgaW50cm9kdWNlZCByZWNlbnRseSB3aGljaCBoYXZlbid0IGJlZW4gc3VwcG9ydGVkIGJ5IHRo ZSBjdXJyZW50CmRkbF9kZXBhcnNlciwgd2Ugd2lsbCBzdXBwb3J0IHRoYXQgbGF0ZXIuCgpOb3Rl IHRoYXQgdGhlIHJlcGxpY2F0aW9uIGZvciBBTFRFUiBJTkRFWCBjb21tYW5kIGlzIHN0aWxsIHVu ZGVyCnByb2dyZXNzLgoKLSBGb3IgRFJPUCBvYmplY3Q6ClRoZSAnY29tbWFuZCBzdGFydCcgZXZl bnQgaGFuZGxlciBsb2dzIGEgZGRsIG1lc3NhZ2Ugd2l0aCB0aGUgcmVsaWRzIG9mCnRoZSB0YWJs ZXMgdGhhdCBhcmUgZHJvcHBlZCB3aGljaCB0aGUgb3V0cHV0IHBsdWdpbiAocGdvdXRwdXQpIHN0 b3JlcyBpbgppdHMgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmUgYWZ0ZXIgdmVyaWZ5aW5nIHRoYXQg aXQgaXMgZm9yIGEgdGFibGUgdGhhdCBpcwpwYXJ0IG9mIHRoZSBwdWJsaWNhdGlvbi4gTGF0ZXIg dGhlICdjb21tYW5kIGVuZCcgZXZlbnQgaGFuZGxlciBzZW5kcyB0aGUKYWN0dWFsIGRyb3AgbWVz c2FnZS4gUGdvdXRwdXQgb24gcmVjZWl2aW5nIHRoZSBjb21tYW5kIGVuZCwgb25seSBzZW5kcyBv dXQKdGhlIGRyb3AgY29tbWFuZCBvbmx5IGlmIGl0IGlzIGZvciBvbmUgb2YgdGhlIHJlbGlkcyBt YXJrZWQgZm9yIGRlbGV0aW5nLgpUaGUgcmVhc29uIHdlIGhhdmUgdG8gZG8gdGhpcyBpcyBiZWNh dXNlLCBvbmNlIHRoZSBsb2dpY2FsIGRlY29kZXIKcmVjZWl2ZXMgdGhlICdjb21tYW5kIGVuZCcg bWVzc2FnZSwgIHRoZSByZWxpZCBvZiB0aGUgdGFibGUgaXMgbm8gbG9uZ2VyCnZhbGlkIGFzIGl0 IGhhcyBiZWVuIGRlbGV0ZWQgYXMgcGFydCBvZiBpbnZhbGlkYXRpb25zIHJlY2VpdmVkIGZvciB0 aGUKZHJvcCB0YWJsZSBjb21tYW5kLiBJdCBpcyBubyBsb25nZXIgcG9zc2libGUgdG8gdmVyaWZ5 IGlmIHRoZSB0YWJsZSBpcwpwYXJ0IG9mIHRoZSBwdWJsaWNhdGlvbiBsaXN0IG9yIG5vdC4gVG8g bWFrZSB0aGlzIHBvc3NpYmxlLCBJIGhhdmUgYWRkZWQKdHdvIG1vcmUgZWxlbWVudHMgdG8gdGhl IGRkbCB4bG9nIGFuZCBkZGwgbWVzc2FnZSwgKHJlbGlkIGFuZCBjbWR0eXBlKS4KCldlIGNvdWxk IGhhdmUgYWxzbyBoYW5kbGVkIGFsbCB0aGlzIG9uIHRoZSBzdWJzY3JpYmVyIHNpZGUgYXMgd2Vs bCwgYnV0CnRoYXQgd291bGQgbWVhbiBzZW5kaW5nIHNwdXJpb3VzIGRkbCBtZXNzYWdlcyBmb3Ig dGFibGVzIHRoYXQgYXJlIG5vdCBwYXJ0Cm9mIHRoZSBwdWJsaWNhdGlvbi4KCi0gRm9yIHRhYmxl X3Jld3JpdGUgQUxURVIgVEFCTEUgY29tbWFuZDoKKEFMVEVSIENPTFVNTiBUWVBFLCBBREQgQ09M VU1OIERFRkFVTFQsIFNFVCBMT0dHRUQsIFNFVCBBQ0NFU1MgTUVUSE9EKQoKd2UgZGVwYXJzZSB0 aGUgY29tbWFuZCBhbmQgV0FMIGxvZyB0aGUgZGVwYXJzZWQganNvbiBzdHJpbmcgYXQKdGFibGVf cmV3cml0ZSBldmVudCB0cmlnZ2VyLiBUaGUgV0FMU2VuZGVyIGRlY29kZXMgdGhlIFdBTCBhbmQg c2VuZHMgaXQgdG8Kc3Vic2NyaWJlciBpZiB0aGUgYWx0ZXJlZCB0YWJsZSBpcyBwdWJsaXNoZWQu IFRoZW4sIHRoZSBXQUxTZW5kZXIgd2lsbApjb252ZXJ0IHRoZSB1cGNvbWluZyByZXdyaXRlIElO U0VSVHMgdG8gVVBEQVRFcyBhbmQgc2VuZCB0aGVtIHRvCnN1YnNjcmliZXIgc28gdGhhdCB0aGUg ZGF0YSBiZXR3ZWVuIHB1Ymxpc2hlciBhbmQgc3Vic2NyaWJlciBjYW4gYWx3YXlzIGJlCmNvbnNp c3RlbnQuIE5vdGUgdGhhdCB0aGUgdGFibGVzIHRoYXQgcHVibGlzaCByZXdyaXRlIGRkbCBtdXN0 IGhhdmUgYQpyZXBsaWNhIGlkZW50aXR5IGNvbmZpZ3VyZWQgaW4gb3JkZXIgdG8gYmUgYWJsZSB0 byByZXBsaWNhdGUgdGhlIHVwY29taW5nCnJld3JpdGUgVVBEQVRFcy4KCldlIGRvIHRoaXMgd2F5 IGJlY2F1c2Ugb2YgdHdvIHJlYXNvbjoKKDEpIFRoZSBkYXRhIGJlZm9yZSB0aGUgcmV3cml0ZSBk ZGwgY291bGQgYWxyZWFkeSBiZSBkaWZmZXJlbnQgYW1vbmcKcHVibGlzaGVyIGFuZCBzdWJzY3Jp YmVyLiBUbyBtYWtlIHN1cmUgdGhlIGV4dHJhIGRhdGEgaW4gc3Vic2NyaWJlciB3aGljaApkb2Vz bid0IGV4aXN0IGluIHB1Ymxpc2hlciBhbHNvIGdldCByZXdyaXR0ZW4sIHdlIG5lZWQgdG8gbGV0 IHRoZQpzdWJzY3JpYmVyIGV4ZWN1dGUgdGhlIG9yaWdpbmFsIHJld3JpdGUgZGRsIHRvIHJld3Jp dGUgYWxsIHRoZSBkYXRhIGF0CmZpcnN0LgoKKDIpIHRoZSBkYXRhIGFmdGVyIGV4ZWN1dGluZyBy ZXdyaXRlIGRkbCBjb3VsZCBiZSBkaWZmZXJlbnQgYW1vbmcKcHVibGlzaGVyIGFuZCBzdWJzY3Jp YmVyKGR1ZSB0byBkaWZmZXJlbnQgZnVuY3Rpb25zL29wZXJhdG9ycyB1c2VkIGR1cmluZwpyZXdy aXRlKSwgc28gd2UgbmVlZCB0byByZXBsaWNhdGUgdGhlIHJld3JpdGUgVVBEQVRFcyB0byBrZWVw IHRoZSBkYXRhCmNvbnNpc3RlbnQuCgpUTyBJTVBST1ZFOgpUaGlzIGFwcHJvYWNoIGNvdWxkIGJl IGltcHJvdmVkIGJ5IGxldHRpbmcgdGhlIHN1YnNjcmliZXIgdHJ5IHRvIHVwZGF0ZQp0aGUgZXh0 cmEgZGF0YSBpdHNlbGYgaW5zdGVhZCBvZiBkb2luZyBmdWxseSByZXdyaXRlIGRkbCBhbmQgdXNl IHRoZQp1cGNvbWluZyByZXdyaXRlIFVQREFURXMgdG8gcmV3cml0ZSB0aGUgcmVzdCBkYXRhLiBU byBhY2hpZXZlIHRoaXMsIHdlCmNvdWxkIG1vZGlmeSB0aGUgZGVwYXJzZWQganNvbiBzdHJpbmcg dG8gdGVtcG9yYXJpbHkgcmVtb3ZlIHRoZSByZXdyaXRlCnBhcnQgYW5kIGFkZCBzb21lIGxvZ2lj IGluIHN1YnNjcmliZXIgdG8gdXBkYXRlIHRoZSBleHRyYSBkYXRhLgpCZXNpZGVzLCB3ZSBtYXkg bm90IG5lZWQgdG8gc2VuZCByZXdyaXRlIGNoYW5nZXMgZm9yIGFsbCB0eXBlIG9mIHJld3JpdGUK ZGRsLCBmb3IgZXhhbXBsZSwgaXQgc2VlbXMgZmluZSB0byBza2lwIHNlbmRpbmcgcmV3cml0ZSBj aGFuZ2VzIGZvciBBTFRFUgpUQUJMRSBTRVQgTE9HR0VEIGFzIHRoZSBkYXRhIGluIHRoZSB0YWJs ZSBkb2Vzbid0IGFjdHVhbGx5IGJlIGNoYW5nZWQuIFdlCmNvdWxkIHVzZSB0aGUgZGVwYXJzZXIg YW5kIGV2ZW50IHRyaWdnZXIgdG8gZmlsdGVyIHRoZXNlIGRkbHMgYW5kIHNraXAKc2VuZGluZyBy ZXdyaXRlIGNoYW5nZXMgZm9yIHRoZW0uCi0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNj L01ha2VmaWxlICAgICAgICAgIHwgICAxICsKIC4uLi9hY2Nlc3Mvcm1ncmRlc2MvbG9naWNhbGRk bG1zZ2Rlc2MuYyAgICAgICB8ICA1MiArKysKIHNyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGlj YXRpb24uYyAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmln Z2VyLmMgICAgICAgICAgfCAyMzIgKysrKysrKysrLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVi bGljYXRpb25jbWRzLmMgICAgICAgIHwgMTM2ICsrKysrKwogc3JjL2JhY2tlbmQvY29tbWFuZHMv dGFibGVjbWRzLmMgICAgICAgICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL01ha2VmaWxlICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bG9naWNhbC9kZGxtZXNzYWdlLmMgIHwgIDg2ICsrKysKIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvZGVjb2RlLmMgICAgICB8ICA0MSArKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bG9naWNhbC9sb2dpY2FsLmMgICAgIHwgIDkzICsrKysKIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvcHJvdG8uYyAgICAgICB8ICA0OCArKwogLi4uL3JlcGxpY2F0aW9uL2xvZ2ljYWwv cmVvcmRlcmJ1ZmZlci5jICAgICAgIHwgMTM2ICsrKysrKwogc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC93b3JrZXIuYyAgICAgIHwgMjMyICsrKysrKysrKysKIHNyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMgICB8IDE5MiArKysrKysrLQogc3JjL2JhY2tl bmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYyAgICAgICAgICAgIHwgICAxICsKIHNyYy9iaW4vcGdf ZHVtcC9wZ19kdW1wLmMgICAgICAgICAgICAgICAgICAgICB8ICAyMSArLQogc3JjL2Jpbi9wZ19k dW1wL3BnX2R1bXAuaCAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9iaW4vcGdfd2Fs ZHVtcC9ybWdyZGVzYy5jICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmluL3BzcWwvZGVz Y3JpYmUuYyAgICAgICAgICAgICAgICAgICAgICAgfCAgMTcgKy0KIHNyYy9pbmNsdWRlL2FjY2Vz cy9ybWdybGlzdC5oICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9jYXRhbG9n L3BnX3Byb2MuZGF0ICAgICAgICAgICAgICAgfCAgIDkgKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9w Z19wdWJsaWNhdGlvbi5oICAgICAgICAgIHwgICA0ICsKIHNyYy9pbmNsdWRlL2NvbW1hbmRzL2V2 ZW50X3RyaWdnZXIuaCAgICAgICAgICB8ICAgMyArLQogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24v ZGRsbWVzc2FnZS5oICAgICAgICAgIHwgIDYwICsrKwogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24v ZGVjb2RlLmggICAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xv Z2ljYWxwcm90by5oICAgICAgICB8ICAgNyArLQogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vb3V0 cHV0X3BsdWdpbi5oICAgICAgIHwgIDI3ICsrCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9wZ291 dHB1dC5oICAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcmVvcmRl cmJ1ZmZlci5oICAgICAgIHwgIDM5ICsrCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BzcWwu b3V0ICAgICAgICAgICAgfCAgIDYgKy0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGlj YXRpb24ub3V0ICAgICB8IDQyMCArKysrKysrKystLS0tLS0tLS0KIDMxIGZpbGVzIGNoYW5nZWQs IDE2NDMgaW5zZXJ0aW9ucygrKSwgMjI5IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0 IHNyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9sb2dpY2FsZGRsbXNnZGVzYy5jCiBjcmVhdGUg bW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZGxtZXNzYWdlLmMK IGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgK CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvTWFrZWZpbGUgYi9zcmMv YmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvTWFrZWZpbGUKaW5kZXggZjg4ZDcyZmQ4Ni4uYjhlMjll OGRmMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL01ha2VmaWxlCisr KyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9NYWtlZmlsZQpAQCAtMTksNiArMTksNyBA QCBPQkpTID0gXAogCWhhc2hkZXNjLm8gXAogCWhlYXBkZXNjLm8gXAogCWxvZ2ljYWxtc2dkZXNj Lm8gXAorCWxvZ2ljYWxkZGxtc2dkZXNjLm8gXAogCW14YWN0ZGVzYy5vIFwKIAluYnRkZXNjLm8g XAogCXJlbG1hcGRlc2MubyBcCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRl c2MvbG9naWNhbGRkbG1zZ2Rlc2MuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9sb2dp Y2FsZGRsbXNnZGVzYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjgx ZGVlNTI5ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2Mv bG9naWNhbGRkbG1zZ2Rlc2MuYwpAQCAtMCwwICsxLDUyIEBACisvKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqCisgKiBsb2dpY2FsZGRsbXNnZGVzYy5jCisgKgkgIHJtZ3IgZGVzY3JpcHRvciByb3V0aW5l cyBmb3IgcmVwbGljYXRpb24vbG9naWNhbC9kZGxtZXNzYWdlLmMKKyAqCisgKiBQb3J0aW9ucyBD b3B5cmlnaHQgKGMpIDIwMTUtMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3Jv dXAKKyAqCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2JhY2tlbmQvYWNjZXNzL3Jt Z3JkZXNjL2xvZ2ljYWxkZGxtc2dkZXNjLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLwor I2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdl LmgiCisKK3ZvaWQKK2xvZ2ljYWxkZGxtc2dfZGVzYyhTdHJpbmdJbmZvIGJ1ZiwgWExvZ1JlYWRl clN0YXRlICpyZWNvcmQpCit7CisJY2hhcgkgICAqcmVjID0gWExvZ1JlY0dldERhdGEocmVjb3Jk KTsKKwl1aW50OAkJaW5mbyA9IFhMb2dSZWNHZXRJbmZvKHJlY29yZCkgJiB+WExSX0lORk9fTUFT SzsKKworCWlmIChpbmZvID09IFhMT0dfTE9HSUNBTF9ERExfTUVTU0FHRSkKKwl7CisJCXhsX2xv Z2ljYWxfZGRsX21lc3NhZ2UgKnhscmVjID0gKHhsX2xvZ2ljYWxfZGRsX21lc3NhZ2UgKikgcmVj OworCQljaGFyCSAgICpwcmVmaXggPSB4bHJlYy0+bWVzc2FnZTsKKwkJY2hhcgkgICAqbWVzc2Fn ZSA9IHhscmVjLT5tZXNzYWdlICsgeGxyZWMtPnByZWZpeF9zaXplOworCQljaGFyCSAgICpzZXAg PSAiIjsKKworCQlBc3NlcnQocHJlZml4W3hscmVjLT5wcmVmaXhfc2l6ZV0gIT0gJ1wwJyk7CisK KwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICJwcmVmaXggXCIlc1wiOyBwYXlsb2FkICglenUgYnl0 ZXMpOiAiLAorCQkJCQkJIHByZWZpeCwgeGxyZWMtPm1lc3NhZ2Vfc2l6ZSk7CisJCWFwcGVuZFN0 cmluZ0luZm8oYnVmLCAicmVsaWQgJXUgY21kdHlwZSAldSIsIHhscmVjLT5yZWxpZCwgeGxyZWMt PmNtZHR5cGUpOworCQkvKiBXcml0ZSBtZXNzYWdlIHBheWxvYWQgYXMgYSBzZXJpZXMgb2YgaGV4 IGJ5dGVzICovCisJCWZvciAoaW50IGNudCA9IDA7IGNudCA8IHhscmVjLT5tZXNzYWdlX3NpemU7 IGNudCsrKQorCQl7CisJCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVzJTAyWCIsIHNlcCwgKHVu c2lnbmVkIGNoYXIpIG1lc3NhZ2VbY250XSk7CisJCQlzZXAgPSAiICI7CisJCX0KKwl9Cit9CisK K2NvbnN0IGNoYXIgKgorbG9naWNhbGRkbG1zZ19pZGVudGlmeSh1aW50OCBpbmZvKQoreworCWlm ICgoaW5mbyAmIH5YTFJfSU5GT19NQVNLKSA9PSBYTE9HX0xPR0lDQUxfRERMX01FU1NBR0UpCisJ CXJldHVybiAiRERMIE1FU1NBR0UiOworCisJcmV0dXJuIE5VTEw7Cit9CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMgYi9zcmMvYmFja2VuZC9jYXRhbG9n L3BnX3B1YmxpY2F0aW9uLmMKaW5kZXggNTk5NjcwOThiMy4uNzIxZDAyM2FhNSAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jCisrKyBiL3NyYy9iYWNrZW5k L2NhdGFsb2cvcGdfcHVibGljYXRpb24uYwpAQCAtMTAwNSw2ICsxMDA1LDcgQEAgR2V0UHVibGlj YXRpb24oT2lkIHB1YmlkKQogCXB1Yi0+cHViYWN0aW9ucy5wdWJ1cGRhdGUgPSBwdWJmb3JtLT5w dWJ1cGRhdGU7CiAJcHViLT5wdWJhY3Rpb25zLnB1YmRlbGV0ZSA9IHB1YmZvcm0tPnB1YmRlbGV0 ZTsKIAlwdWItPnB1YmFjdGlvbnMucHVidHJ1bmNhdGUgPSBwdWJmb3JtLT5wdWJ0cnVuY2F0ZTsK KwlwdWItPnB1YmFjdGlvbnMucHViZGRsID0gcHViZm9ybS0+cHViZGRsOwogCXB1Yi0+cHVidmlh cm9vdCA9IHB1YmZvcm0tPnB1YnZpYXJvb3Q7CiAKIAlSZWxlYXNlU3lzQ2FjaGUodHVwKTsKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYwppbmRleCA0NDFmMjlkNjg0Li42YWZkZTBiOGQw IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMKKysrIGIv c3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jCkBAIC0zNyw4ICszNywxMSBAQAog I2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJzZV9mdW5jLmgiCiAj aW5jbHVkZSAicGdzdGF0LmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgor I2luY2x1ZGUgInJlcGxpY2F0aW9uL21lc3NhZ2UuaCIKICNpbmNsdWRlICJ0Y29wL2RlcGFyc2Vf dXRpbGl0eS5oIgogI2luY2x1ZGUgInRjb3AvdXRpbGl0eS5oIgorI2luY2x1ZGUgInRjb3AvZGRs X2RlcGFyc2UuaCIKICNpbmNsdWRlICJ1dGlscy9hY2wuaCIKICNpbmNsdWRlICJ1dGlscy9idWls dGlucy5oIgogI2luY2x1ZGUgInV0aWxzL2V2dGNhY2hlLmgiCkBAIC0xNTM3LDYgKzE1NDAsNyBA QCBFdmVudFRyaWdnZXJBbHRlclRhYmxlU3RhcnQoTm9kZSAqcGFyc2V0cmVlKQogCiAJY29tbWFu ZC0+ZC5hbHRlclRhYmxlLmNsYXNzSWQgPSBSZWxhdGlvblJlbGF0aW9uSWQ7CiAJY29tbWFuZC0+ ZC5hbHRlclRhYmxlLm9iamVjdElkID0gSW52YWxpZE9pZDsKKwljb21tYW5kLT5kLmFsdGVyVGFi bGUucmV3cml0ZSA9IGZhbHNlOwogCWNvbW1hbmQtPmQuYWx0ZXJUYWJsZS5zdWJjbWRzID0gTklM OwogCWNvbW1hbmQtPnBhcnNldHJlZSA9IGNvcHlPYmplY3QocGFyc2V0cmVlKTsKIApAQCAtMTU3 MCw3ICsxNTc0LDcgQEAgRXZlbnRUcmlnZ2VyQWx0ZXJUYWJsZVJlbGlkKE9pZCBvYmplY3RJZCkK ICAqIGludGVybmFsbHksIHNvIHRoYXQncyBhbGwgdGhhdCB0aGlzIGNvZGUgbmVlZHMgdG8gaGFu ZGxlIGF0IHRoZSBtb21lbnQuCiAgKi8KIHZvaWQKLUV2ZW50VHJpZ2dlckNvbGxlY3RBbHRlclRh YmxlU3ViY21kKE5vZGUgKnN1YmNtZCwgT2JqZWN0QWRkcmVzcyBhZGRyZXNzKQorRXZlbnRUcmln Z2VyQ29sbGVjdEFsdGVyVGFibGVTdWJjbWQoTm9kZSAqc3ViY21kLCBPYmplY3RBZGRyZXNzIGFk ZHJlc3MsIGJvb2wgcmV3cml0ZSkKIHsKIAlNZW1vcnlDb250ZXh0IG9sZGN4dDsKIAlDb2xsZWN0 ZWRBVFN1YmNtZCAqbmV3c3ViOwpAQCAtMTU5MCw2ICsxNTk0LDcgQEAgRXZlbnRUcmlnZ2VyQ29s bGVjdEFsdGVyVGFibGVTdWJjbWQoTm9kZSAqc3ViY21kLCBPYmplY3RBZGRyZXNzIGFkZHJlc3Mp CiAJbmV3c3ViLT5hZGRyZXNzID0gYWRkcmVzczsKIAluZXdzdWItPnBhcnNldHJlZSA9IGNvcHlP YmplY3Qoc3ViY21kKTsKIAorCWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1h bmQtPmQuYWx0ZXJUYWJsZS5yZXdyaXRlIHw9IHJld3JpdGU7CiAJY3VycmVudEV2ZW50VHJpZ2dl clN0YXRlLT5jdXJyZW50Q29tbWFuZC0+ZC5hbHRlclRhYmxlLnN1YmNtZHMgPQogCQlsYXBwZW5k KGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQtPmQuYWx0ZXJUYWJsZS5z dWJjbWRzLCBuZXdzdWIpOwogCkBAIC0yMTc1LDMgKzIxODAsMjI4IEBAIHN0cmluZ2lmeV9hZGVm cHJpdnNfb2JqdHlwZShPYmplY3RUeXBlIG9ianR5cGUpCiAKIAlyZXR1cm4gIj8/PyI7CQkJCS8q IGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KIH0KKworLyoKKyAqIHB1YmxpY2F0aW9uX2RlcGFyc2Vf ZGRsX2NvbW1hbmRfc3RhcnQKKyAqCisgKiBEZXBhcnNlIHRoZSBkZGwgY29tbWFuZCBhbmQgbG9n IGl0LgorICovCitEYXR1bQorcHVibGljYXRpb25fZGVwYXJzZV9kZGxfY29tbWFuZF9zdGFydChQ R19GVU5DVElPTl9BUkdTKQoreworCUV2ZW50VHJpZ2dlckRhdGEgKnRyaWdkYXRhOworCWNoYXIJ CSpjb21tYW5kID0gcHNwcmludGYoIkRyb3AgdGFibGUgY29tbWFuZCBzdGFydCIpOworCURyb3BT dG10CSpzdG10OworCUxpc3RDZWxsCSpjZWxsMTsKKworCWlmICghQ0FMTEVEX0FTX0VWRU5UX1RS SUdHRVIoZmNpbmZvKSkKKwkJZWxvZyhFUlJPUiwgIm5vdCBmaXJlZCBieSBldmVudCB0cmlnZ2Vy IG1hbmFnZXIiKTsKKworCXRyaWdkYXRhID0gKEV2ZW50VHJpZ2dlckRhdGEgKikgZmNpbmZvLT5j b250ZXh0OworCXN0bXQJID0gKERyb3BTdG10ICopIHRyaWdkYXRhLT5wYXJzZXRyZWU7CisKKwkv KiBleHRyYWN0IHRoZSByZWxpZCBmcm9tIHRoZSBwYXJzZSB0cmVlICovCisJZm9yZWFjaChjZWxs MSwgc3RtdC0+b2JqZWN0cykKKwl7CisJCWNoYXIJcmVscGVyc2lzdDsKKwkJTm9kZQkqb2JqZWN0 ID0gbGZpcnN0KGNlbGwxKTsKKwkJT2JqZWN0QWRkcmVzcyBhZGRyZXNzOworCQlSZWxhdGlvbiBy ZWxhdGlvbiA9IE5VTEw7CisKKwkJYWRkcmVzcyA9IGdldF9vYmplY3RfYWRkcmVzcyhzdG10LT5y ZW1vdmVUeXBlLAorCQkJCQkJCQkJIG9iamVjdCwKKwkJCQkJCQkJCSAmcmVsYXRpb24sCisJCQkJ CQkJCQkgQWNjZXNzRXhjbHVzaXZlTG9jaywKKwkJCQkJCQkJCSB0cnVlKTsKKworCQlyZWxwZXJz aXN0ID0gZ2V0X3JlbF9wZXJzaXN0ZW5jZShhZGRyZXNzLm9iamVjdElkKTsKKworCQkvKgorCQkg KiBEbyBub3QgZ2VuZXJhdGUgd2FsIGxvZyBmb3IgY29tbWFuZHMgd2hvc2UgdGFyZ2V0IHRhYmxl IGlzIGEKKwkJICogdGVtcG9yYXJ5IHRhYmxlLgorCQkgKgorCQkgKiBXZSB3aWxsIGdlbmVyYXRl IHdhbCBsb2dzIGZvciB1bmxvZ2dlZCB0YWJsZXMgc28gdGhhdCB1bmxvZ2dlZAorCQkgKiB0YWJs ZXMgY2FuIGFsc28gYmUgY3JlYXRlZCBhbmQgYWx0ZXJlZCBvbiB0aGUgc3Vic2NyaWJlciBzaWRl LiBUaGlzCisJCSAqIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGRpcmVjdGx5IHJlcGxheSB0aGUgU0VU IExPR0dFRCBjb21tYW5kIGFuZCB0aGUKKwkJICogaW5jb21pbmcgcmV3cml0ZSBtZXNzYWdlIHdp dGhvdXQgY3JlYXRpbmcgYSBuZXcgdGFibGUuCisJCSAqLworCQlpZiAocmVscGVyc2lzdCA9PSBS RUxQRVJTSVNURU5DRV9URU1QKQorCQl7CisJCQl0YWJsZV9jbG9zZShyZWxhdGlvbiwgTm9Mb2Nr KTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJTG9nTG9naWNhbERETE1lc3NhZ2UoImRlcGFyc2Ui LCBhZGRyZXNzLm9iamVjdElkLCBEQ1RfVGFibGVEcm9wU3RhcnQsCisJCQkJCQkJIGNvbW1hbmQs IHN0cmxlbihjb21tYW5kKSArIDEpOworCisJCWlmIChyZWxhdGlvbikKKwkJCXRhYmxlX2Nsb3Nl KHJlbGF0aW9uLCBOb0xvY2spOworCX0KKwlyZXR1cm4gUG9pbnRlckdldERhdHVtKE5VTEwpOwor fQorCisvKgorICogcHVibGljYXRpb25fZGVwYXJzZV90YWJsZV9yZXdyaXRlCisgKgorICogRGVw YXJzZSB0aGUgZGRsIHRhYmxlIHJld3JpdGUgY29tbWFuZCBhbmQgbG9nIGl0LgorICovCitEYXR1 bQorcHVibGljYXRpb25fZGVwYXJzZV90YWJsZV9yZXdyaXRlKFBHX0ZVTkNUSU9OX0FSR1MpCit7 CisJY2hhcgkJCQlyZWxwZXJzaXN0OworCUNvbGxlY3RlZENvbW1hbmQgICAqY21kOworCWNoYXIJ CQkgICAqanNvbl9zdHJpbmc7CisKKwlpZiAoIUNBTExFRF9BU19FVkVOVF9UUklHR0VSKGZjaW5m bykpCisJCWVsb2coRVJST1IsICJub3QgZmlyZWQgYnkgZXZlbnQgdHJpZ2dlciBtYW5hZ2VyIik7 CisKKwljbWQgPSBjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kOworCisJ QXNzZXJ0KGNtZCAmJiBjbWQtPmQuYWx0ZXJUYWJsZS5yZXdyaXRlKTsKKworCXJlbHBlcnNpc3Qg PSBnZXRfcmVsX3BlcnNpc3RlbmNlKGNtZC0+ZC5hbHRlclRhYmxlLm9iamVjdElkKTsKKworCS8q CisJICogRG8gbm90IGdlbmVyYXRlIHdhbCBsb2cgZm9yIGNvbW1hbmRzIHdob3NlIHRhcmdldCB0 YWJsZSBpcyBhIHRlbXBvcmFyeQorCSAqIHRhYmxlLgorCSAqCisJICogV2Ugd2lsbCBnZW5lcmF0 ZSB3YWwgbG9ncyBmb3IgdW5sb2dnZWQgdGFibGVzIHNvIHRoYXQgdW5sb2dnZWQgdGFibGVzCisJ ICogY2FuIGFsc28gYmUgY3JlYXRlZCBhbmQgYWx0ZXJlZCBvbiB0aGUgc3Vic2NyaWJlciBzaWRl LiBUaGlzIG1ha2VzIGl0CisJICogcG9zc2libGUgdG8gZGlyZWN0bHkgcmVwbGF5IHRoZSBTRVQg TE9HR0VEIGNvbW1hbmQgYW5kIHRoZSBpbmNvbWluZworCSAqIHJld3JpdGUgbWVzc2FnZSB3aXRo b3V0IGNyZWF0aW5nIGEgbmV3IHRhYmxlLgorCSAqLworCWlmIChyZWxwZXJzaXN0ID09IFJFTFBF UlNJU1RFTkNFX1RFTVApCisJCXJldHVybiBQb2ludGVyR2V0RGF0dW0oTlVMTCk7CisKKwkvKiBE ZXBhcnNlIHRoZSBEREwgY29tbWFuZCBhbmQgV0FMIGxvZyBpdCB0byBhbGxvdyBkZWNvZGluZyBv ZiB0aGUgc2FtZS4gKi8KKwlqc29uX3N0cmluZyA9IGRlcGFyc2VfdXRpbGl0eV9jb21tYW5kKGNt ZCwgZmFsc2UpOworCisJaWYgKGpzb25fc3RyaW5nICE9IE5VTEwpCisJCUxvZ0xvZ2ljYWxERExN ZXNzYWdlKCJkZXBhcnNlIiwgY21kLT5kLmFsdGVyVGFibGUub2JqZWN0SWQsIERDVF9UYWJsZUFs dGVyLAorCQkJCQkJCSBqc29uX3N0cmluZywgc3RybGVuKGpzb25fc3RyaW5nKSArIDEpOworCisJ cmV0dXJuIFBvaW50ZXJHZXREYXR1bShOVUxMKTsKK30KKworLyoKKyAqIHB1YmxpY2F0aW9uX2Rl cGFyc2VfZGRsX2NvbW1hbmRfZW5kCisgKgorICogRGVwYXJzZSB0aGUgZGRsIGNvbW1hbmQgYW5k IGxvZyBpdC4KKyAqLworRGF0dW0KK3B1YmxpY2F0aW9uX2RlcGFyc2VfZGRsX2NvbW1hbmRfZW5k KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJTGlzdENlbGwgICAqbGM7CisJc2xpc3RfaXRlciAgaXRl cjsKKwlEZXBhcnNlZENvbW1hbmRUeXBlIHR5cGU7CisJT2lkIHJlbGlkOworCisJaWYgKCFDQUxM RURfQVNfRVZFTlRfVFJJR0dFUihmY2luZm8pKQorCQllbG9nKEVSUk9SLCAibm90IGZpcmVkIGJ5 IGV2ZW50IHRyaWdnZXIgbWFuYWdlciIpOworCisJZm9yZWFjaChsYywgY3VycmVudEV2ZW50VHJp Z2dlclN0YXRlLT5jb21tYW5kTGlzdCkKKwl7CisJCWNoYXIJCQkJcmVscGVyc2lzdCA9IFJFTFBF UlNJU1RFTkNFX1BFUk1BTkVOVDsKKwkJQ29sbGVjdGVkQ29tbWFuZCAgICpjbWQgPSBsZmlyc3Qo bGMpOworCQljaGFyCQkJICAgKmpzb25fc3RyaW5nOworCisJCS8qIFJld3JpdGUgRERMIGhhcyBi ZWVuIGhhbmRsZWQgaW4gdGFibGVfcmV3cml0ZSB0cmlnZ2VyICovCisJCWlmIChjbWQtPmQuYWx0 ZXJUYWJsZS5yZXdyaXRlKQorCQl7CisJCQlSZW5hbWVTdG10ICpyZW5hbWVTdG10ID0gKFJlbmFt ZVN0bXQgKiljbWQtPnBhcnNldHJlZTsKKworCQkJaWYgKHJlbmFtZVN0bXQtPnJlbGF0aW9uVHlw ZSAhPSBPQkpFQ1RfVFlQRSAmJgorCQkJCXJlbmFtZVN0bXQtPnJlbGF0aW9uVHlwZSAhPSBPQkpF Q1RfVEFCTEUpCisJCQkJY29udGludWU7CisJCX0KKworCQlpZiAoY21kLT50eXBlID09IFNDVF9T aW1wbGUgJiYKKwkJCSFPaWRJc1ZhbGlkKGNtZC0+ZC5zaW1wbGUuYWRkcmVzcy5vYmplY3RJZCkp CisJCQljb250aW51ZTsKKworCQlpZiAoY21kLT50eXBlID09IFNDVF9BbHRlclRhYmxlKQorCQl7 CisJCQlyZWxpZCA9IGNtZC0+ZC5hbHRlclRhYmxlLm9iamVjdElkOworCQkJdHlwZSA9IERDVF9U YWJsZUFsdGVyOworCQl9CisJCWVsc2UKKwkJeworCQkJLyogT25seSBTQ1RfU2ltcGxlIGZvciBu b3cgKi8KKwkJCXJlbGlkID0gY21kLT5kLnNpbXBsZS5hZGRyZXNzLm9iamVjdElkOworCQkJdHlw ZSA9IERDVF9TaW1wbGVDbWQ7CisJCX0KKworCQlpZiAoZ2V0X3JlbF9yZWxraW5kKHJlbGlkKSkK KwkJCXJlbHBlcnNpc3QgPSBnZXRfcmVsX3BlcnNpc3RlbmNlKHJlbGlkKTsKKworCQkvKgorCQkg KiBEbyBub3QgZ2VuZXJhdGUgd2FsIGxvZyBmb3IgY29tbWFuZHMgd2hvc2UgdGFyZ2V0IHRhYmxl IGlzIGEKKwkJICogdGVtcG9yYXJ5IHRhYmxlLgorCQkgKgorCQkgKiBXZSB3aWxsIGdlbmVyYXRl IHdhbCBsb2dzIGZvciB1bmxvZ2dlZCB0YWJsZXMgc28gdGhhdCB1bmxvZ2dlZCB0YWJsZXMKKwkJ ICogY2FuIGFsc28gYmUgY3JlYXRlZCBhbmQgYWx0ZXJlZCBvbiB0aGUgc3Vic2NyaWJlciBzaWRl LiBUaGlzIG1ha2VzIGl0CisJCSAqIHBvc3NpYmxlIHRvIGRpcmVjdGx5IHJlcGxheSB0aGUgU0VU IExPR0dFRCBjb21tYW5kIGFuZCB0aGUgaW5jb21pbmcKKwkJICogcmV3cml0ZSBtZXNzYWdlIHdp dGhvdXQgY3JlYXRpbmcgYSBuZXcgdGFibGUuCisJCSAqLworCQlpZiAocmVscGVyc2lzdCA9PSBS RUxQRVJTSVNURU5DRV9URU1QKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogRGVwYXJzZSB0 aGUgRERMIGNvbW1hbmQgYW5kIFdBTCBsb2cgaXQgdG8gYWxsb3cgZGVjb2Rpbmcgb2YgdGhlCisJ CSAqIHNhbWUuCisJCSAqLworCQlqc29uX3N0cmluZyA9IGRlcGFyc2VfdXRpbGl0eV9jb21tYW5k KGNtZCwgZmFsc2UpOworCisJCWlmIChqc29uX3N0cmluZyA9PSBOVUxMKQorCQkJY29udGludWU7 CisKKwkJTG9nTG9naWNhbERETE1lc3NhZ2UoImRlcGFyc2UiLCByZWxpZCwgdHlwZSwganNvbl9z dHJpbmcsCisJCQkJCQkJIHN0cmxlbihqc29uX3N0cmluZykgKyAxKTsKKwl9CisKKwlzbGlzdF9m b3JlYWNoKGl0ZXIsICYoY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5TUUxEcm9wTGlzdCkpCisJ eworCQl2b2xhdGlsZSBTUUxEcm9wT2JqZWN0ICpvYmo7CisJCURyb3BTdG10CQkJICAgKnN0bXQ7 CisJCUV2ZW50VHJpZ2dlckRhdGEgCSAgICp0cmlnZGF0YTsKKwkJY2hhcgkJCQkgICAqY29tbWFu ZDsKKwkJRGVwYXJzZWRDb21tYW5kVHlwZQkJY21kdHlwZTsKKworCQl0cmlnZGF0YSA9IChFdmVu dFRyaWdnZXJEYXRhICopIGZjaW5mby0+Y29udGV4dDsKKwkJc3RtdAkgPSAoRHJvcFN0bXQgKikg dHJpZ2RhdGEtPnBhcnNldHJlZTsKKworCQlvYmogPSBzbGlzdF9jb250YWluZXIoU1FMRHJvcE9i amVjdCwgbmV4dCwgaXRlci5jdXIpOworCisJCWlmIChzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAi dGFibGUiKSA9PSAwKQorCQkJY21kdHlwZSA9IERDVF9UYWJsZURyb3BFbmQ7CisJCWVsc2UgaWYg KHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJzZXF1ZW5jZSIpID09IDAgfHwKKwkJCQkgc3RyY21w KG9iai0+b2JqZWN0dHlwZSwgInNjaGVtYSIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2Jq ZWN0dHlwZSwgImluZGV4IikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAi ZnVuY3Rpb24iKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJwcm9jZWR1 cmUiKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJvcGVyYXRvciIpID09 IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgIm9wZXJhdG9yIGNsYXNzIikgPT0g MCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAib3BlcmF0b3IgZmFtaWx5IikgPT0g MCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAiY2FzdCIpID09IDAgfHwKKwkJCQkg c3RyY21wKG9iai0+b2JqZWN0dHlwZSwgInR5cGUiKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmot Pm9iamVjdHR5cGUsICJkb21haW4iKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5 cGUsICJ0cmlnZ2VyIikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAiY29u dmVyc2lvbiIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgInBvbGljeSIp ID09IDAJfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgImV4dGVuc2lvbiIpID09IDAp CisJCQljbWR0eXBlID0gRENUX09iamVjdERyb3A7CisJCWVsc2UKKwkJCWNvbnRpbnVlOworCisJ CWNvbW1hbmQgPSBkZXBhcnNlX2Ryb3BfY29tbWFuZChvYmotPm9iamlkZW50aXR5LCBvYmotPm9i amVjdHR5cGUsCisJCQkJCQkJCQkgICBzdG10LT5iZWhhdmlvcik7CisKKwkJaWYgKGNvbW1hbmQg PT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCisJCUxvZ0xvZ2ljYWxERExNZXNzYWdlKCJkZXBhcnNl Iiwgb2JqLT5hZGRyZXNzLm9iamVjdElkLCBjbWR0eXBlLAorCQkJCQkJCSBjb21tYW5kLCBzdHJs ZW4oY29tbWFuZCkgKyAxKTsKKwl9CisKKwlyZXR1cm4gUG9pbnRlckdldERhdHVtKE5VTEwpOwor fQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMgYi9z cmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYwppbmRleCA5OTAxMWVlYzlmLi5l YzhjNjdmMDNlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNt ZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYwpAQCAtMzcs MTAgKzM3LDEyIEBACiAjaW5jbHVkZSAiY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmgiCiAjaW5j bHVkZSAiZnVuY2FwaS5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUgIm5vZGVz L21ha2VmdW5jcy5oIgogI2luY2x1ZGUgIm5vZGVzL25vZGVGdW5jcy5oIgogI2luY2x1ZGUgInBh cnNlci9wYXJzZV9jbGF1c2UuaCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2VfY29sbGF0ZS5oIgog I2luY2x1ZGUgInBhcnNlci9wYXJzZV9yZWxhdGlvbi5oIgorI2luY2x1ZGUgInBhcnNlci9wYXJz ZXIuaCIKICNpbmNsdWRlICJzdG9yYWdlL2xtZ3IuaCIKICNpbmNsdWRlICJ1dGlscy9hY2wuaCIK ICNpbmNsdWRlICJ1dGlscy9hcnJheS5oIgpAQCAtOTQsNiArOTYsNyBAQCBwYXJzZV9wdWJsaWNh dGlvbl9vcHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAlwdWJhY3Rpb25zLT5wdWJ1cGRhdGUg PSB0cnVlOwogCXB1YmFjdGlvbnMtPnB1YmRlbGV0ZSA9IHRydWU7CiAJcHViYWN0aW9ucy0+cHVi dHJ1bmNhdGUgPSB0cnVlOworCXB1YmFjdGlvbnMtPnB1YmRkbCA9IGZhbHNlOwogCSpwdWJsaXNo X3ZpYV9wYXJ0aXRpb25fcm9vdCA9IGZhbHNlOwogCiAJLyogUGFyc2Ugb3B0aW9ucyAqLwpAQCAt MTQwLDYgKzE0Myw4IEBAIHBhcnNlX3B1YmxpY2F0aW9uX29wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0 YXRlLAogCQkJCQlwdWJhY3Rpb25zLT5wdWJkZWxldGUgPSB0cnVlOwogCQkJCWVsc2UgaWYgKHN0 cmNtcChwdWJsaXNoX29wdCwgInRydW5jYXRlIikgPT0gMCkKIAkJCQkJcHViYWN0aW9ucy0+cHVi dHJ1bmNhdGUgPSB0cnVlOworCQkJCWVsc2UgaWYgKHN0cmNtcChwdWJsaXNoX29wdCwgImRkbCIp ID09IDApCisJCQkJCXB1YmFjdGlvbnMtPnB1YmRkbCA9IHRydWU7CiAJCQkJZWxzZQogCQkJCQll cmVwb3J0KEVSUk9SLAogCQkJCQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKQEAg LTcyNyw2ICs3MzIsNTMgQEAgQ2hlY2tQdWJSZWxhdGlvbkNvbHVtbkxpc3QoTGlzdCAqdGFibGVz LCBjb25zdCBjaGFyICpxdWVyeVN0cmluZywKIAl9CiB9CiAKKy8qCisgKiBDcmVhdGUgZXZlbnQg dHJpZ2dlciB3aGljaCBpcyB1c2VkIGZvciBEREwgcmVwbGljYXRpb24uCisgKi8KK3N0YXRpYyB2 b2lkCitDcmVhdGVERExSZXBsaWNhRXZlbnRUcmlnZ2VyKGNoYXIgKmV2ZW50bmFtZSwgQ29tbWFu ZFRhZyAqY29tbWFuZHMsCisJCQkJCQkJIGludCBuY29tbWFuZHMsIE9iamVjdEFkZHJlc3MgcHVi YWRkcmVzcywKKwkJCQkJCQkgT2lkIHB1Ym9pZCkKK3sKKwlpbnQJCQkJCWk7CisJTGlzdAkJCSAg ICp0YWdzID0gTklMOworCU9pZAkJCQkJdHJpZ2dlcl9pZDsKKwlPYmplY3RBZGRyZXNzCQlyZWZl cmVuY2VkOworCUNyZWF0ZUV2ZW50VHJpZ1N0bXQgKmRkbF90cmlnZ2VyOworCWNoYXIJCQkJdHJp Z2dlcl9uYW1lW05BTUVEQVRBTEVOXTsKKwljaGFyCQkJCXRyaWdnZXJfZnVuY19uYW1lW05BTUVE QVRBTEVOXTsKKwlzdGF0aWMgY29uc3QgY2hhciAgICp0cmlnZ2VyX25hbWVfcHJlZml4ID0gInBn X2RlcGFyc2VfdHJpZ18lc18ldSI7CisJc3RhdGljIGNvbnN0IGNoYXIgICAqdHJpZ2dlcl9mdW5j X3ByZWZpeCA9ICJwdWJsaWNhdGlvbl9kZXBhcnNlXyVzIjsKKworCWRkbF90cmlnZ2VyID0gbWFr ZU5vZGUoQ3JlYXRlRXZlbnRUcmlnU3RtdCk7CisKKwlzbnByaW50Zih0cmlnZ2VyX25hbWUsIHNp emVvZih0cmlnZ2VyX25hbWUpLCB0cmlnZ2VyX25hbWVfcHJlZml4LAorCQkJIGV2ZW50bmFtZSwg cHVib2lkKTsKKwlzbnByaW50Zih0cmlnZ2VyX2Z1bmNfbmFtZSwgc2l6ZW9mKHRyaWdnZXJfZnVu Y19uYW1lKSwgdHJpZ2dlcl9mdW5jX3ByZWZpeCwKKwkJCSBldmVudG5hbWUpOworCisJZGRsX3Ry aWdnZXItPnRyaWduYW1lID0gcHN0cmR1cCh0cmlnZ2VyX25hbWUpOworCWRkbF90cmlnZ2VyLT5l dmVudG5hbWUgPSBldmVudG5hbWU7CisJZGRsX3RyaWdnZXItPmZ1bmNuYW1lID0gU3lzdGVtRnVu Y05hbWUodHJpZ2dlcl9mdW5jX25hbWUpOworCisJZm9yIChpID0gMDsgaSA8IG5jb21tYW5kczsg aSsrKQorCXsKKwkJU3RyaW5nICp0YWcgPSBtYWtlU3RyaW5nKHBzdHJkdXAoR2V0Q29tbWFuZFRh Z05hbWUoY29tbWFuZHNbaV0pKSk7CisJCXRhZ3MgPSBsYXBwZW5kKHRhZ3MsIHRhZyk7CisJfQor CisJZGRsX3RyaWdnZXItPndoZW5jbGF1c2UgPSBsaXN0X21ha2UxKG1ha2VEZWZFbGVtKCJ0YWci LCAoTm9kZSAqKSB0YWdzLCAtMSkpOworCisJdHJpZ2dlcl9pZCA9IENyZWF0ZUV2ZW50VHJpZ2dl cihkZGxfdHJpZ2dlcik7CisKKwkvKgorCSAqIFJlZ2lzdGVyIHRoZSBldmVudCB0cmlnZ2VycyBh cyBpbnRlcm5hbGx5IGRlcGVuZGVudCBvbiB0aGUKKwkgKiBwdWJsaWNhdGlvbi4KKwkgKi8KKwlP YmplY3RBZGRyZXNzU2V0KHJlZmVyZW5jZWQsIEV2ZW50VHJpZ2dlclJlbGF0aW9uSWQsIHRyaWdn ZXJfaWQpOworCXJlY29yZERlcGVuZGVuY3lPbigmcmVmZXJlbmNlZCwgJnB1YmFkZHJlc3MsIERF UEVOREVOQ1lfSU5URVJOQUwpOworfQorCiAvKgogICogQ3JlYXRlIG5ldyBwdWJsaWNhdGlvbi4K ICAqLwpAQCAtNzk5LDYgKzg1MSw4IEBAIENyZWF0ZVB1YmxpY2F0aW9uKFBhcnNlU3RhdGUgKnBz dGF0ZSwgQ3JlYXRlUHVibGljYXRpb25TdG10ICpzdG10KQogCQlCb29sR2V0RGF0dW0ocHViYWN0 aW9ucy5wdWJkZWxldGUpOwogCXZhbHVlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1YnRydW5jYXRl IC0gMV0gPQogCQlCb29sR2V0RGF0dW0ocHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSk7CisJdmFsdWVz W0FudW1fcGdfcHVibGljYXRpb25fcHViZGRsIC0gMV0gPQorCQlCb29sR2V0RGF0dW0ocHViYWN0 aW9ucy5wdWJkZGwpOwogCXZhbHVlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1YnZpYXJvb3QgLSAx XSA9CiAJCUJvb2xHZXREYXR1bShwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCk7CiAKQEAgLTg1 OSw2ICs5MTMsODUgQEAgQ3JlYXRlUHVibGljYXRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVh dGVQdWJsaWNhdGlvblN0bXQgKnN0bXQpCiAJCX0KIAl9CiAKKwkvKgorCSAqIENyZWF0ZSBhbiBl dmVudCB0cmlnZ2VyIHRvIGFsbG93IGxvZ2dpbmcgb2YgRERMIHN0YXRlbWVudHMuCisJICoKKwkg KiBUT0RPOiBXZSBuZWVkIHRvIGZpbmQgYSBiZXR0ZXIgc3ludGF4IHRvIGFsbG93IHJlcGxpY2F0 aW9uIG9mIERETAorCSAqIHN0YXRlbWVudHMuCisJICoKKwkgKiBYWFg6IFRoaXMgY29kZSBpcyBq dXN0IHRvIHNob3cgdGhlIHJlcGxpY2F0aW9uIG9mIENSRUFURS9BTFRFUi9EUk9QCisJICogVEFC TEUgd29ya3MuIFdlIG5lZWQgdG8gZW5oYW5jZSB0aGlzIG9uY2UgdGhlIGFwcHJvYWNoIGZvciBE REwKKwkgKiByZXBsaWNhdGlvbiBpcyBmaW5hbGl6ZWQuCisJICovCisJaWYgKHB1YmFjdGlvbnMu cHViZGRsKQorCXsKKwkJQ29tbWFuZFRhZwlzdGFydF9jb21tYW5kc1tdID0ge0NNRFRBR19EUk9Q X1RBQkxFfTsKKwkJQ29tbWFuZFRhZwlyZXdyaXRlX2NvbW1hbmRzW10gPSB7Q01EVEFHX0FMVEVS X1RBQkxFfTsKKworCQlDb21tYW5kVGFnCWVuZF9jb21tYW5kc1tdID0geworCQkJQ01EVEFHX0NS RUFURV9FWFRFTlNJT04sCisJCQlDTURUQUdfQUxURVJfRVhURU5TSU9OLAorCQkJQ01EVEFHX0RS T1BfRVhURU5TSU9OLAorCQkJQ01EVEFHX0NSRUFURV9QT0xJQ1ksCisJCQlDTURUQUdfQUxURVJf UE9MSUNZLAorCQkJQ01EVEFHX0RST1BfUE9MSUNZLAorCQkJQ01EVEFHX0NSRUFURV9DT05WRVJT SU9OLAorCQkJQ01EVEFHX0FMVEVSX0NPTlZFUlNJT04sCisJCQlDTURUQUdfRFJPUF9DT05WRVJT SU9OLAorCQkJQ01EVEFHX0NSRUFURV9ET01BSU4sCisJCQlDTURUQUdfQUxURVJfRE9NQUlOLAor CQkJQ01EVEFHX0RST1BfRE9NQUlOLAorCQkJQ01EVEFHX0FMVEVSX0lOREVYLAorCQkJQ01EVEFH X0NSRUFURV9UWVBFLAorCQkJQ01EVEFHX0RST1BfVFlQRSwKKwkJCUNNRFRBR19BTFRFUl9UWVBF LAorCQkJQ01EVEFHX0NSRUFURV9DQVNULAorCQkJQ01EVEFHX0FMVEVSX0NBU1QsCisJCQlDTURU QUdfRFJPUF9DQVNULAorCQkJQ01EVEFHX0NSRUFURV9PUEVSQVRPUiwKKwkJCUNNRFRBR19DUkVB VEVfT1BFUkFUT1JfQ0xBU1MsCisJCQlDTURUQUdfQ1JFQVRFX09QRVJBVE9SX0ZBTUlMWSwKKwkJ CUNNRFRBR19BTFRFUl9PUEVSQVRPUl9GQU1JTFksCisJCQlDTURUQUdfQUxURVJfT1BFUkFUT1Jf Q0xBU1MsCisJCQlDTURUQUdfQUxURVJfT1BFUkFUT1IsCisJCQlDTURUQUdfRFJPUF9PUEVSQVRP UiwKKwkJCUNNRFRBR19EUk9QX09QRVJBVE9SX0NMQVNTLAorCQkJQ01EVEFHX0RST1BfT1BFUkFU T1JfRkFNSUxZLAorCQkJQ01EVEFHX0NSRUFURV9QUk9DRURVUkUsCisJCQlDTURUQUdfQUxURVJf UFJPQ0VEVVJFLAorCQkJQ01EVEFHX0RST1BfUFJPQ0VEVVJFLAorCQkJQ01EVEFHX0NSRUFURV9G VU5DVElPTiwKKwkJCUNNRFRBR19BTFRFUl9GVU5DVElPTiwKKwkJCUNNRFRBR19EUk9QX0ZVTkNU SU9OLAorCQkJQ01EVEFHX0NSRUFURV9UUklHR0VSLAorCQkJQ01EVEFHX0FMVEVSX1RSSUdHRVIs CisJCQlDTURUQUdfRFJPUF9UQUJMRSwKKwkJCUNNRFRBR19DUkVBVEVfVEFCTEUsCisJCQlDTURU QUdfQUxURVJfVEFCTEUsCisJCQlDTURUQUdfQ1JFQVRFX1NFUVVFTkNFLAorCQkJQ01EVEFHX0FM VEVSX1NFUVVFTkNFLAorCQkJQ01EVEFHX0RST1BfU0VRVUVOQ0UsCisJCQlDTURUQUdfQ1JFQVRF X1NDSEVNQSwKKwkJCUNNRFRBR19BTFRFUl9TQ0hFTUEsCisJCQlDTURUQUdfRFJPUF9TQ0hFTUEs CisJCQlDTURUQUdfQ1JFQVRFX0lOREVYLAorCQkJQ01EVEFHX0RST1BfSU5ERVgsCisJCQlDTURU QUdfQUxURVJfSU5ERVgKKwkJfTsKKworCQkvKiBDcmVhdGUgdGhlIGRkbF9jb21tYW5kX2VuZCBl dmVudCB0cmlnZ2VyICovCisJCUNyZWF0ZURETFJlcGxpY2FFdmVudFRyaWdnZXIoImRkbF9jb21t YW5kX2VuZCIsIGVuZF9jb21tYW5kcywKKwkJCQkJCQkJCSBsZW5ndGhvZihlbmRfY29tbWFuZHMp LCBteXNlbGYsIHB1Ym9pZCk7CisKKwkJLyogQ3JlYXRlIHRoZSBkZGxfY29tbWFuZF9zdGFydCBl dmVudCB0cmlnZ2VyICovCisJCUNyZWF0ZURETFJlcGxpY2FFdmVudFRyaWdnZXIoImRkbF9jb21t YW5kX3N0YXJ0Iiwgc3RhcnRfY29tbWFuZHMsCisJCQkJCQkJCQkgbGVuZ3Rob2Yoc3RhcnRfY29t bWFuZHMpLCBteXNlbGYsIHB1Ym9pZCk7CisKKwkJLyogQ3JlYXRlIHRoZSB0YWJsZV9yZXdyaXRl IGV2ZW50IHRyaWdnZXIgKi8KKwkJQ3JlYXRlRERMUmVwbGljYUV2ZW50VHJpZ2dlcigidGFibGVf cmV3cml0ZSIsIHJld3JpdGVfY29tbWFuZHMsCisJCQkJCQkJCQkgbGVuZ3Rob2YocmV3cml0ZV9j b21tYW5kcyksIG15c2VsZiwgcHVib2lkKTsKKwl9CisKIAl0YWJsZV9jbG9zZShyZWwsIFJvd0V4 Y2x1c2l2ZUxvY2spOwogCiAJSW52b2tlT2JqZWN0UG9zdENyZWF0ZUhvb2soUHVibGljYXRpb25S ZWxhdGlvbklkLCBwdWJvaWQsIDApOwpAQCAtOTk5LDYgKzExMzIsOSBAQCBBbHRlclB1YmxpY2F0 aW9uT3B0aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsIEFsdGVyUHVibGljYXRpb25TdG10ICpzdG10 LAogCiAJCXZhbHVlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1YnRydW5jYXRlIC0gMV0gPSBCb29s R2V0RGF0dW0ocHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSk7CiAJCXJlcGxhY2VzW0FudW1fcGdfcHVi bGljYXRpb25fcHVidHJ1bmNhdGUgLSAxXSA9IHRydWU7CisKKwkJdmFsdWVzW0FudW1fcGdfcHVi bGljYXRpb25fcHViZGRsIC0gMV0gPSBCb29sR2V0RGF0dW0ocHViYWN0aW9ucy5wdWJkZGwpOwor CQlyZXBsYWNlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1YmRkbCAtIDFdID0gdHJ1ZTsKIAl9CiAK IAlpZiAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3RfZ2l2ZW4pCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxl Y21kcy5jCmluZGV4IDdkOGE3NWQyM2MuLjVkZjlmNGMwMWIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxl Y21kcy5jCkBAIC01MjUzLDcgKzUyNTMsNyBAQCBBVEV4ZWNDbWQoTGlzdCAqKndxdWV1ZSwgQWx0 ZXJlZFRhYmxlSW5mbyAqdGFiLAogCSAqIFJlcG9ydCB0aGUgc3ViY29tbWFuZCB0byBpbnRlcmVz dGVkIGV2ZW50IHRyaWdnZXJzLgogCSAqLwogCWlmIChjbWQpCi0JCUV2ZW50VHJpZ2dlckNvbGxl Y3RBbHRlclRhYmxlU3ViY21kKChOb2RlICopIGNtZCwgYWRkcmVzcyk7CisJCUV2ZW50VHJpZ2dl ckNvbGxlY3RBbHRlclRhYmxlU3ViY21kKChOb2RlICopIGNtZCwgYWRkcmVzcywgdGFiLT5yZXdy aXRlKTsKIAogCS8qCiAJICogQnVtcCB0aGUgY29tbWFuZCBjb3VudGVyIHRvIGVuc3VyZSB0aGUg bmV4dCBzdWJjb21tYW5kIGluIHRoZSBzZXF1ZW5jZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZSBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xv Z2ljYWwvTWFrZWZpbGUKaW5kZXggYzRlMmZkZWI3MS4uZjNlZWI2NzMxMiAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZQorKysgYi9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9sb2dpY2FsL01ha2VmaWxlCkBAIC0xNiw2ICsxNiw3IEBAIG92ZXJyaWRl IENQUEZMQUdTIDo9IC1JJChzcmNkaXIpICQoQ1BQRkxBR1MpCiAKIE9CSlMgPSBcCiAJZGVjb2Rl Lm8gXAorCWRkbG1lc3NhZ2Uub1wKIAlsYXVuY2hlci5vIFwKIAlsb2dpY2FsLm8gXAogCWxvZ2lj YWxmdW5jcy5vIFwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwv ZGRsbWVzc2FnZS5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZGxtZXNzYWdl LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNTA5MzUyM2U5YQotLS0g L2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGRsbWVzc2Fn ZS5jCkBAIC0wLDAgKzEsODYgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGRkbG1lc3Nh Z2UuYworICoJICBMb2dpY2FsIERETCBtZXNzYWdlcy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIw MjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICogSURFTlRJRklD QVRJT04KKyAqCSAgc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZGxtZXNzYWdlLmMK KyAqCisgKiBOT1RFUworICoKKyAqIExvZ2ljYWwgRERMIG1lc3NhZ2VzIGFsbG93IFhMT0cgbG9n Z2luZyBvZiBEREwgY29tbWFuZCBzdHJpbmdzIHRoYXQKKyAqIGdldCBwYXNzZWQgdG8gdGhlIGxv Z2ljYWwgZGVjb2RpbmcgcGx1Z2luLiBJbiBub3JtYWwgWExPRyBwcm9jZXNzaW5nIHRoZXkKKyAq IGFyZSBzYW1lIGFzIE5PT1AuCisgKgorICogVW5saWtlIGdlbmVyaWMgbG9naWNhbCBtZXNzYWdl cywgdGhlc2UgRERMIG1lc3NhZ2VzIGhhdmUgb25seSB0cmFuc2FjdGlvbmFsCisgKiBtb2RlLk5v dGUgYnkgZGVmYXVsdCBERExzIGluIFBvc3RncmVTUUwgYXJlIHRyYW5zYWN0aW9uYWwuCisgKgor ICogVGhlc2UgbWVzc2FnZXMgYXJlIHBhcnQgb2YgY3VycmVudCB0cmFuc2FjdGlvbiBhbmQgd2ls bCBiZSBzZW50IHRvCisgKiBkZWNvZGluZyBwbHVnaW4gdXNpbmcgaW4gYSBzYW1lIHdheSBhcyBE TUwgb3BlcmF0aW9ucy4KKyAqCisgKiBFdmVyeSBtZXNzYWdlIGNhcnJpZXMgcHJlZml4IHRvIGF2 b2lkIGNvbmZsaWN0cyBiZXR3ZWVuIGRpZmZlcmVudCBkZWNvZGluZworICogcGx1Z2lucy4gVGhl IHBsdWdpbiBhdXRob3JzIG11c3QgdGFrZSBleHRyYSBjYXJlIHRvIHVzZSB1bmlxdWUgcHJlZml4 LAorICogZ29vZCBvcHRpb25zIHNlZW1zIHRvIGJlIGZvciBleGFtcGxlIHRvIHVzZSB0aGUgbmFt ZSBvZiB0aGUgZXh0ZW5zaW9uLgorICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNp bmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAiYWNjZXNzL3hhY3QuaCIKKyNpbmNsdWRl ICJhY2Nlc3MveGxvZ2luc2VydC5oIgorI2luY2x1ZGUgImNhdGFsb2cvbmFtZXNwYWNlLmgiCisj aW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAibm9kZXMvZXhlY25vZGVzLmgiCisjaW5j bHVkZSAicmVwbGljYXRpb24vbG9naWNhbC5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL2RkbG1l c3NhZ2UuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgorCisvKgorICogV3JpdGUgbG9n aWNhbCBkZWNvZGluZyBEREwgbWVzc2FnZSBpbnRvIFhMb2cuCisgKi8KK1hMb2dSZWNQdHIKK0xv Z0xvZ2ljYWxERExNZXNzYWdlKGNvbnN0IGNoYXIgKnByZWZpeCwgT2lkIHJlbGlkLCBEZXBhcnNl ZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCSBjb25zdCBjaGFyICptZXNzYWdlLCBzaXplX3Qg c2l6ZSkKK3sKKwl4bF9sb2dpY2FsX2RkbF9tZXNzYWdlIHhscmVjOworCisJLyoKKwkgKiBFbnN1 cmUgd2UgaGF2ZSBhIHZhbGlkIHRyYW5zYWN0aW9uIGlkLgorCSAqLworCUFzc2VydChJc1RyYW5z YWN0aW9uU3RhdGUoKSk7CisJR2V0Q3VycmVudFRyYW5zYWN0aW9uSWQoKTsKKworCXhscmVjLmRi SWQgPSBNeURhdGFiYXNlSWQ7CisJLyogdHJhaWxpbmcgemVybyBpcyBjcml0aWNhbDsgc2VlIGxv Z2ljYWxkZGxtc2dfZGVzYyAqLworCXhscmVjLnByZWZpeF9zaXplID0gc3RybGVuKHByZWZpeCkg KyAxOworCXhscmVjLm1lc3NhZ2Vfc2l6ZSA9IHNpemU7CisJeGxyZWMucmVsaWQgPSByZWxpZDsK Kwl4bHJlYy5jbWR0eXBlID0gY21kdHlwZTsKKworCVhMb2dCZWdpbkluc2VydCgpOworCVhMb2dS ZWdpc3RlckRhdGEoKGNoYXIgKikgJnhscmVjLCBTaXplT2ZMb2dpY2FsRERMTWVzc2FnZSk7CisJ WExvZ1JlZ2lzdGVyRGF0YSh1bmNvbnN0aWZ5KGNoYXIgKiwgcHJlZml4KSwgeGxyZWMucHJlZml4 X3NpemUpOworCVhMb2dSZWdpc3RlckRhdGEodW5jb25zdGlmeShjaGFyICosIG1lc3NhZ2UpLCBz aXplKTsKKworCS8qIGFsbG93IG9yaWdpbiBmaWx0ZXJpbmcgKi8KKwlYTG9nU2V0UmVjb3JkRmxh Z3MoWExPR19JTkNMVURFX09SSUdJTik7CisKKwlyZXR1cm4gWExvZ0luc2VydChSTV9MT0dJQ0FM RERMTVNHX0lELCBYTE9HX0xPR0lDQUxfRERMX01FU1NBR0UpOworfQorCisvKgorICogUmVkbyBp cyBiYXNpY2FsbHkganVzdCBub29wIGZvciBsb2dpY2FsIGRlY29kaW5nIGRkbCBtZXNzYWdlcy4K KyAqLwordm9pZAorbG9naWNhbGRkbG1zZ19yZWRvKFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQor eworCXVpbnQ4CQlpbmZvID0gWExvZ1JlY0dldEluZm8ocmVjb3JkKSAmIH5YTFJfSU5GT19NQVNL OworCisJaWYgKGluZm8gIT0gWExPR19MT0dJQ0FMX0RETF9NRVNTQUdFKQorCQllbG9nKFBBTklD LCAibG9naWNhbGRkbG1zZ19yZWRvOiB1bmtub3duIG9wIGNvZGUgJXUiLCBpbmZvKTsKKworCS8q IFRoaXMgaXMgb25seSBpbnRlcmVzdGluZyBmb3IgbG9naWNhbCBkZWNvZGluZywgc2VlIGRlY29k ZS5jLiAqLworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9k ZWNvZGUuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2RlLmMKaW5kZXgg MmNjMGFjOWViMC4uMWYyYzc1MTc1OSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC9kZWNvZGUuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L2RlY29kZS5jCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiYWNjZXNzL3hsb2d1dGlscy5o IgogI2luY2x1ZGUgImNhdGFsb2cvcGdfY29udHJvbC5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9u L2RlY29kZS5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCIKICNpbmNsdWRl ICJyZXBsaWNhdGlvbi9sb2dpY2FsLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbWVzc2FnZS5o IgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL29yaWdpbi5oIgpAQCAtNjAzLDYgKzYwNCw0NiBAQCBs b2dpY2FsbXNnX2RlY29kZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFhMb2dSZWNvcmRC dWZmZXIgKmJ1ZikKIAkJCQkJCQkgIG1lc3NhZ2UtPm1lc3NhZ2UgKyBtZXNzYWdlLT5wcmVmaXhf c2l6ZSk7CiB9CiAKKy8qCisgKiBIYW5kbGUgcm1nciBMT0dJQ0FMRERMTVNHX0lEIHJlY29yZHMg Zm9yIERlY29kZVJlY29yZEludG9SZW9yZGVyQnVmZmVyKCkuCisgKi8KK3ZvaWQKK2xvZ2ljYWxk ZGxtc2dfZGVjb2RlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZl ciAqYnVmKQoreworCVNuYXBCdWlsZCAgKmJ1aWxkZXIgPSBjdHgtPnNuYXBzaG90X2J1aWxkZXI7 CisJWExvZ1JlYWRlclN0YXRlICpyID0gYnVmLT5yZWNvcmQ7CisJVHJhbnNhY3Rpb25JZCB4aWQg PSBYTG9nUmVjR2V0WGlkKHIpOworCXVpbnQ4CQlpbmZvID0gWExvZ1JlY0dldEluZm8ocikgJiB+ WExSX0lORk9fTUFTSzsKKwlSZXBPcmlnaW5JZCBvcmlnaW5faWQgPSBYTG9nUmVjR2V0T3JpZ2lu KHIpOworCXhsX2xvZ2ljYWxfZGRsX21lc3NhZ2UgKm1lc3NhZ2U7CisKKwlpZiAoaW5mbyAhPSBY TE9HX0xPR0lDQUxfRERMX01FU1NBR0UpCisJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIFJNX0xP R0lDQUxERExNU0dfSUQgcmVjb3JkIHR5cGU6ICV1IiwgaW5mbyk7CisKKwlSZW9yZGVyQnVmZmVy UHJvY2Vzc1hpZChjdHgtPnJlb3JkZXIsIFhMb2dSZWNHZXRYaWQociksIGJ1Zi0+b3JpZ3B0cik7 CisKKwkvKgorCSAqIElmIHdlIGRvbid0IGhhdmUgc25hcHNob3Qgb3Igd2UgYXJlIGp1c3QgZmFz dC1mb3J3YXJkaW5nLCB0aGVyZSBpcyBubworCSAqIHBvaW50IGluIGRlY29kaW5nIGRkbCBtZXNz YWdlcy4KKwkgKi8KKwlpZiAoU25hcEJ1aWxkQ3VycmVudFN0YXRlKGJ1aWxkZXIpIDwgU05BUEJV SUxEX0ZVTExfU05BUFNIT1QgfHwKKwkJY3R4LT5mYXN0X2ZvcndhcmQpCisJCXJldHVybjsKKwor CW1lc3NhZ2UgPSAoeGxfbG9naWNhbF9kZGxfbWVzc2FnZSAqKSBYTG9nUmVjR2V0RGF0YShyKTsK KworCWlmIChtZXNzYWdlLT5kYklkICE9IGN0eC0+c2xvdC0+ZGF0YS5kYXRhYmFzZSB8fAorCQlG aWx0ZXJCeU9yaWdpbihjdHgsIG9yaWdpbl9pZCkpCisJCXJldHVybjsKKworCWlmIChTbmFwQnVp bGRQcm9jZXNzQ2hhbmdlKGJ1aWxkZXIsIHhpZCwgYnVmLT5vcmlncHRyKSkKKwkJUmVvcmRlckJ1 ZmZlclF1ZXVlRERMTWVzc2FnZShjdHgtPnJlb3JkZXIsIHhpZCwgYnVmLT5lbmRwdHIsCisJCQkJ CQkJCQkgbWVzc2FnZS0+bWVzc2FnZSwgLyogZmlyc3QgcGFydCBvZiBtZXNzYWdlIGlzIHByZWZp eCAqLworCQkJCQkJCQkJIG1lc3NhZ2UtPm1lc3NhZ2Vfc2l6ZSwKKwkJCQkJCQkJCSBtZXNzYWdl LT5tZXNzYWdlICsgbWVzc2FnZS0+cHJlZml4X3NpemUsCisJCQkJCQkJCQkgbWVzc2FnZS0+cmVs aWQsIG1lc3NhZ2UtPmNtZHR5cGUpOworfQorCiAvKgogICogQ29uc29saWRhdGVkIGNvbW1pdCBy ZWNvcmQgaGFuZGxpbmcgYmV0d2VlbiB0aGUgZGlmZmVyZW50IGZvcm0gb2YgY29tbWl0CiAgKiBy ZWNvcmRzLgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sb2dp Y2FsLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xvZ2ljYWwuYwppbmRleCA2 MjVhN2Y0MjczLi45ODk2OWM3YWVjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL2xvZ2ljYWwuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L2xvZ2ljYWwuYwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgImZtZ3IuaCIKICNpbmNsdWRl ICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlv bi9kZGxtZXNzYWdlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vZGVjb2RlLmgiCiAjaW5jbHVk ZSAicmVwbGljYXRpb24vbG9naWNhbC5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL29yaWdpbi5o IgpAQCAtNzMsNiArNzQsMTAgQEAgc3RhdGljIHZvaWQgdHJ1bmNhdGVfY2Jfd3JhcHBlcihSZW9y ZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogc3RhdGljIHZvaWQgbWVz c2FnZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0 eG4sCiAJCQkJCQkJICAgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwgYm9vbCB0cmFuc2FjdGlvbmFs LAogCQkJCQkJCSAgIGNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBtZXNzYWdlX3NpemUsIGNvbnN0 IGNoYXIgKm1lc3NhZ2UpOworc3RhdGljIHZvaWQgZGRsbWVzc2FnZV9jYl93cmFwcGVyKFJlb3Jk ZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJCSAgWExvZ1Jl Y1B0ciBtZXNzYWdlX2xzbiwgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCQkJCQkgIE9pZCByZWxp ZCwgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQkJCQkgIFNpemUgbWVzc2FnZV9z aXplLCBjb25zdCBjaGFyICptZXNzYWdlKTsKIAogLyogc3RyZWFtaW5nIGNhbGxiYWNrcyAqLwog c3RhdGljIHZvaWQgc3RyZWFtX3N0YXJ0X2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUs IFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKQEAgLTkwLDYgKzk1LDExIEBAIHN0YXRpYyB2b2lkIHN0 cmVhbV9jaGFuZ2VfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZl clRYTiAqdHhuCiBzdGF0aWMgdm9pZCBzdHJlYW1fbWVzc2FnZV9jYl93cmFwcGVyKFJlb3JkZXJC dWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQkJCQkJCQkgIFhMb2dSZWNQ dHIgbWVzc2FnZV9sc24sIGJvb2wgdHJhbnNhY3Rpb25hbCwKIAkJCQkJCQkJCSAgY29uc3QgY2hh ciAqcHJlZml4LCBTaXplIG1lc3NhZ2Vfc2l6ZSwgY29uc3QgY2hhciAqbWVzc2FnZSk7CitzdGF0 aWMgdm9pZCBzdHJlYW1fZGRsbWVzc2FnZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hl LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJCQkJIFhMb2dSZWNQdHIgbWVzc2FnZV9s c24sCisJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJCQkJCQkgT2lkIHJlbGlk LCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJCQkJIFNpemUgbWVzc2FnZV9z aXplLCBjb25zdCBjaGFyICptZXNzYWdlKTsKIHN0YXRpYyB2b2lkIHN0cmVhbV90cnVuY2F0ZV9j Yl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJ CQkJCQkJCQkgICBpbnQgbnJlbGF0aW9ucywgUmVsYXRpb24gcmVsYXRpb25zW10sIFJlb3JkZXJC dWZmZXJDaGFuZ2UgKmNoYW5nZSk7CiAKQEAgLTIxOCw2ICsyMjgsNyBAQCBTdGFydHVwRGVjb2Rp bmdDb250ZXh0KExpc3QgKm91dHB1dF9wbHVnaW5fb3B0aW9ucywKIAljdHgtPnJlb3JkZXItPmFw cGx5X3RydW5jYXRlID0gdHJ1bmNhdGVfY2Jfd3JhcHBlcjsKIAljdHgtPnJlb3JkZXItPmNvbW1p dCA9IGNvbW1pdF9jYl93cmFwcGVyOwogCWN0eC0+cmVvcmRlci0+bWVzc2FnZSA9IG1lc3NhZ2Vf Y2Jfd3JhcHBlcjsKKwljdHgtPnJlb3JkZXItPmRkbG1lc3NhZ2UgPSBkZGxtZXNzYWdlX2NiX3dy YXBwZXI7CiAKIAkvKgogCSAqIFRvIHN1cHBvcnQgc3RyZWFtaW5nLCB3ZSByZXF1aXJlIHN0YXJ0 L3N0b3AvYWJvcnQvY29tbWl0L2NoYW5nZQpAQCAtMjM0LDYgKzI0NSw3IEBAIFN0YXJ0dXBEZWNv ZGluZ0NvbnRleHQoTGlzdCAqb3V0cHV0X3BsdWdpbl9vcHRpb25zLAogCQkoY3R4LT5jYWxsYmFj a3Muc3RyZWFtX2NvbW1pdF9jYiAhPSBOVUxMKSB8fAogCQkoY3R4LT5jYWxsYmFja3Muc3RyZWFt X2NoYW5nZV9jYiAhPSBOVUxMKSB8fAogCQkoY3R4LT5jYWxsYmFja3Muc3RyZWFtX21lc3NhZ2Vf Y2IgIT0gTlVMTCkgfHwKKwkJKGN0eC0+Y2FsbGJhY2tzLnN0cmVhbV9kZGxtZXNzYWdlX2NiICE9 IE5VTEwpIHx8CiAJCShjdHgtPmNhbGxiYWNrcy5zdHJlYW1fdHJ1bmNhdGVfY2IgIT0gTlVMTCk7 CiAKIAkvKgpAQCAtMjUxLDYgKzI2Myw3IEBAIFN0YXJ0dXBEZWNvZGluZ0NvbnRleHQoTGlzdCAq b3V0cHV0X3BsdWdpbl9vcHRpb25zLAogCWN0eC0+cmVvcmRlci0+c3RyZWFtX2NvbW1pdCA9IHN0 cmVhbV9jb21taXRfY2Jfd3JhcHBlcjsKIAljdHgtPnJlb3JkZXItPnN0cmVhbV9jaGFuZ2UgPSBz dHJlYW1fY2hhbmdlX2NiX3dyYXBwZXI7CiAJY3R4LT5yZW9yZGVyLT5zdHJlYW1fbWVzc2FnZSA9 IHN0cmVhbV9tZXNzYWdlX2NiX3dyYXBwZXI7CisJY3R4LT5yZW9yZGVyLT5zdHJlYW1fZGRsbWVz c2FnZSA9IHN0cmVhbV9kZGxtZXNzYWdlX2NiX3dyYXBwZXI7CiAJY3R4LT5yZW9yZGVyLT5zdHJl YW1fdHJ1bmNhdGUgPSBzdHJlYW1fdHJ1bmNhdGVfY2Jfd3JhcHBlcjsKIAogCkBAIC0xMjIwLDYg KzEyMzMsNDQgQEAgbWVzc2FnZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9y ZGVyQnVmZmVyVFhOICp0eG4sCiAJZXJyb3JfY29udGV4dF9zdGFjayA9IGVycmNhbGxiYWNrLnBy ZXZpb3VzOwogfQogCitzdGF0aWMgdm9pZAorZGRsbWVzc2FnZV9jYl93cmFwcGVyKFJlb3JkZXJC dWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCSAgWExvZ1JlY1B0ciBt ZXNzYWdlX2xzbiwKKwkJCQkJICBjb25zdCBjaGFyICpwcmVmaXgsIE9pZCByZWxpZCwgRGVwYXJz ZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQkgIFNpemUgbWVzc2FnZV9zaXplLAorCQkJCQkg IGNvbnN0IGNoYXIgKm1lc3NhZ2UpCit7CisJTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4ID0g Y2FjaGUtPnByaXZhdGVfZGF0YTsKKwlMb2dpY2FsRXJyb3JDYWxsYmFja1N0YXRlIHN0YXRlOwor CUVycm9yQ29udGV4dENhbGxiYWNrIGVycmNhbGxiYWNrOworCisJQXNzZXJ0KCFjdHgtPmZhc3Rf Zm9yd2FyZCk7CisKKwlpZiAoY3R4LT5jYWxsYmFja3MuZGRsbWVzc2FnZV9jYiA9PSBOVUxMKQor CQlyZXR1cm47CisKKwkvKiBQdXNoIGNhbGxiYWNrICsgaW5mbyBvbiB0aGUgZXJyb3IgY29udGV4 dCBzdGFjayAqLworCXN0YXRlLmN0eCA9IGN0eDsKKwlzdGF0ZS5jYWxsYmFja19uYW1lID0gImRk bG1lc3NhZ2UiOworCXN0YXRlLnJlcG9ydF9sb2NhdGlvbiA9IG1lc3NhZ2VfbHNuOworCWVycmNh bGxiYWNrLmNhbGxiYWNrID0gb3V0cHV0X3BsdWdpbl9lcnJvcl9jYWxsYmFjazsKKwllcnJjYWxs YmFjay5hcmcgPSAodm9pZCAqKSAmc3RhdGU7CisJZXJyY2FsbGJhY2sucHJldmlvdXMgPSBlcnJv cl9jb250ZXh0X3N0YWNrOworCWVycm9yX2NvbnRleHRfc3RhY2sgPSAmZXJyY2FsbGJhY2s7CisK KwkvKiBzZXQgb3V0cHV0IHN0YXRlICovCisJY3R4LT5hY2NlcHRfd3JpdGVzID0gdHJ1ZTsKKwlj dHgtPndyaXRlX3hpZCA9IHR4biAhPSBOVUxMID8gdHhuLT54aWQgOiBJbnZhbGlkVHJhbnNhY3Rp b25JZDsKKwljdHgtPndyaXRlX2xvY2F0aW9uID0gbWVzc2FnZV9sc247CisKKwkvKiBkbyB0aGUg YWN0dWFsIHdvcms6IGNhbGwgY2FsbGJhY2sgKi8KKwljdHgtPmNhbGxiYWNrcy5kZGxtZXNzYWdl X2NiKGN0eCwgdHhuLCBtZXNzYWdlX2xzbiwgcHJlZml4LCByZWxpZCwgY21kdHlwZSwKKwkJCQkJ CQkJIG1lc3NhZ2Vfc2l6ZSwgbWVzc2FnZSk7CisKKwkvKiBQb3AgdGhlIGVycm9yIGNvbnRleHQg c3RhY2sgKi8KKwllcnJvcl9jb250ZXh0X3N0YWNrID0gZXJyY2FsbGJhY2sucHJldmlvdXM7Cit9 CisKIHN0YXRpYyB2b2lkCiBzdHJlYW1fc3RhcnRfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpj YWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCQkJWExvZ1JlY1B0ciBmaXJzdF9sc24p CkBAIC0xNTM1LDYgKzE1ODYsNDggQEAgc3RyZWFtX21lc3NhZ2VfY2Jfd3JhcHBlcihSZW9yZGVy QnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCWVycm9yX2NvbnRleHRfc3Rh Y2sgPSBlcnJjYWxsYmFjay5wcmV2aW91czsKIH0KIAorc3RhdGljIHZvaWQKK3N0cmVhbV9kZGxt ZXNzYWdlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4g KnR4biwKKwkJCQkJCQkgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJCQkgY29uc3QgY2hh ciAqcHJlZml4LCBPaWQgcmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJ CQkgU2l6ZSBtZXNzYWdlX3NpemUsCisJCQkJCQkJIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCit7CisJ TG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4ID0gY2FjaGUtPnByaXZhdGVfZGF0YTsKKwlMb2dp Y2FsRXJyb3JDYWxsYmFja1N0YXRlIHN0YXRlOworCUVycm9yQ29udGV4dENhbGxiYWNrIGVycmNh bGxiYWNrOworCisJQXNzZXJ0KCFjdHgtPmZhc3RfZm9yd2FyZCk7CisKKwkvKiBXZSdyZSBvbmx5 IHN1cHBvc2VkIHRvIGNhbGwgdGhpcyB3aGVuIHN0cmVhbWluZyBpcyBzdXBwb3J0ZWQuICovCisJ QXNzZXJ0KGN0eC0+c3RyZWFtaW5nKTsKKworCS8qIHRoaXMgY2FsbGJhY2sgaXMgb3B0aW9uYWwg Ki8KKwlpZiAoY3R4LT5jYWxsYmFja3Muc3RyZWFtX2RkbG1lc3NhZ2VfY2IgPT0gTlVMTCkKKwkJ cmV0dXJuOworCisJLyogUHVzaCBjYWxsYmFjayArIGluZm8gb24gdGhlIGVycm9yIGNvbnRleHQg c3RhY2sgKi8KKwlzdGF0ZS5jdHggPSBjdHg7CisJc3RhdGUuY2FsbGJhY2tfbmFtZSA9ICJzdHJl YW1fZGRsbWVzc2FnZSI7CisJc3RhdGUucmVwb3J0X2xvY2F0aW9uID0gbWVzc2FnZV9sc247CisJ ZXJyY2FsbGJhY2suY2FsbGJhY2sgPSBvdXRwdXRfcGx1Z2luX2Vycm9yX2NhbGxiYWNrOworCWVy cmNhbGxiYWNrLmFyZyA9ICh2b2lkICopICZzdGF0ZTsKKwllcnJjYWxsYmFjay5wcmV2aW91cyA9 IGVycm9yX2NvbnRleHRfc3RhY2s7CisJZXJyb3JfY29udGV4dF9zdGFjayA9ICZlcnJjYWxsYmFj azsKKworCS8qIHNldCBvdXRwdXQgc3RhdGUgKi8KKwljdHgtPmFjY2VwdF93cml0ZXMgPSB0cnVl OworCWN0eC0+d3JpdGVfeGlkID0gdHhuICE9IE5VTEwgPyB0eG4tPnhpZCA6IEludmFsaWRUcmFu c2FjdGlvbklkOworCWN0eC0+d3JpdGVfbG9jYXRpb24gPSBtZXNzYWdlX2xzbjsKKworCS8qIGRv IHRoZSBhY3R1YWwgd29yazogY2FsbCBjYWxsYmFjayAqLworCWN0eC0+Y2FsbGJhY2tzLnN0cmVh bV9kZGxtZXNzYWdlX2NiKGN0eCwgdHhuLCBtZXNzYWdlX2xzbiwgcHJlZml4LCByZWxpZCwKKwkJ CQkJCQkJCQljbWR0eXBlLCBtZXNzYWdlX3NpemUsIG1lc3NhZ2UpOworCisJLyogUG9wIHRoZSBl cnJvciBjb250ZXh0IHN0YWNrICovCisJZXJyb3JfY29udGV4dF9zdGFjayA9IGVycmNhbGxiYWNr LnByZXZpb3VzOworfQorCiBzdGF0aWMgdm9pZAogc3RyZWFtX3RydW5jYXRlX2NiX3dyYXBwZXIo UmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCQkJCSAgIGlu dCBucmVsYXRpb25zLCBSZWxhdGlvbiByZWxhdGlvbnNbXSwKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvcHJvdG8uYwppbmRleCBmZjg1MTNlMmQyLi5mMzU0MDYyNzViIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMKKysrIGIvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jCkBAIC02NjIsNiArNjYyLDUyIEBAIGxvZ2lj YWxyZXBfd3JpdGVfbWVzc2FnZShTdHJpbmdJbmZvIG91dCwgVHJhbnNhY3Rpb25JZCB4aWQsIFhM b2dSZWNQdHIgbHNuLAogCXBxX3NlbmRieXRlcyhvdXQsIG1lc3NhZ2UsIHN6KTsKIH0KIAorLyoK KyAqIFJlYWQgRERMIE1FU1NBR0UgZnJvbSBzdHJlYW0KKyAqLworY2hhciAqCitsb2dpY2FscmVw X3JlYWRfZGRsbWVzc2FnZShTdHJpbmdJbmZvIGluLCBYTG9nUmVjUHRyICpsc24sCisJCQkJCQkg ICBjb25zdCBjaGFyICoqcHJlZml4LAorCQkJCQkJICAgU2l6ZSAqc3opCit7CisJdWludDggZmxh Z3M7CisJY2hhciAqbXNnOworCisJLy9UT0RPIGRvdWJsZSBjaGVjayB3aGVuIGRvIHdlIG5lZWQg dG8gZ2V0IFRyYW5zYWN0aW9uSWQuCisKKwlmbGFncyA9IHBxX2dldG1zZ2ludChpbiwgMSk7CisJ aWYgKGZsYWdzICE9IDApCisJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgZmxhZ3MgJXUgaW4g ZGRsIG1lc3NhZ2UiLCBmbGFncyk7CisJKmxzbiA9IHBxX2dldG1zZ2ludDY0KGluKTsKKwkqcHJl Zml4ID0gcHFfZ2V0bXNnc3RyaW5nKGluKTsKKwkqc3ogPSBwcV9nZXRtc2dpbnQoaW4sIDQpOwor CW1zZyA9IChjaGFyICopIHBxX2dldG1zZ2J5dGVzKGluLCAqc3opOworCisJcmV0dXJuIG1zZzsK K30KKworLyoKKyAqIFdyaXRlIERETCBNRVNTQUdFIHRvIHN0cmVhbQorICovCit2b2lkCitsb2dp Y2FscmVwX3dyaXRlX2RkbG1lc3NhZ2UoU3RyaW5nSW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQgeGlk LCBYTG9nUmVjUHRyIGxzbiwKKwkJCQkJCQljb25zdCBjaGFyICpwcmVmaXgsIFNpemUgc3osIGNv bnN0IGNoYXIgKm1lc3NhZ2UpCit7CisJdWludDgJCWZsYWdzID0gMDsKKworCXBxX3NlbmRieXRl KG91dCwgTE9HSUNBTF9SRVBfTVNHX0RETE1FU1NBR0UpOworCisJLyogdHJhbnNhY3Rpb24gSUQg KGlmIG5vdCB2YWxpZCwgd2UncmUgbm90IHN0cmVhbWluZykgKi8KKwlpZiAoVHJhbnNhY3Rpb25J ZElzVmFsaWQoeGlkKSkKKwkJcHFfc2VuZGludDMyKG91dCwgeGlkKTsKKworCXBxX3NlbmRpbnQ4 KG91dCwgZmxhZ3MpOworCXBxX3NlbmRpbnQ2NChvdXQsIGxzbik7CisJcHFfc2VuZHN0cmluZyhv dXQsIHByZWZpeCk7CisJcHFfc2VuZGludDMyKG91dCwgc3opOworCXBxX3NlbmRieXRlcyhvdXQs IG1lc3NhZ2UsIHN6KTsKK30KKwogLyoKICAqIFdyaXRlIHJlbGF0aW9uIGRlc2NyaXB0aW9uIHRv IHRoZSBvdXRwdXQgc3RyZWFtLgogICovCkBAIC0xMjE4LDYgKzEyNjQsOCBAQCBsb2dpY2FscmVw X21lc3NhZ2VfdHlwZShMb2dpY2FsUmVwTXNnVHlwZSBhY3Rpb24pCiAJCQlyZXR1cm4gIlRZUEUi OwogCQljYXNlIExPR0lDQUxfUkVQX01TR19NRVNTQUdFOgogCQkJcmV0dXJuICJNRVNTQUdFIjsK KwkJY2FzZSBMT0dJQ0FMX1JFUF9NU0dfRERMTUVTU0FHRToKKwkJCXJldHVybiAiRERMIjsKIAkJ Y2FzZSBMT0dJQ0FMX1JFUF9NU0dfQkVHSU5fUFJFUEFSRToKIAkJCXJldHVybiAiQkVHSU4gUFJF UEFSRSI7CiAJCWNhc2UgTE9HSUNBTF9SRVBfTVNHX1BSRVBBUkU6CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIuYyBiL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jCmluZGV4IDAzZDljOWM4NmEuLjA3 M2U0MjQ0ZmIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVv cmRlcmJ1ZmZlci5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRl cmJ1ZmZlci5jCkBAIC05NCw2ICs5NCw3IEBACiAjaW5jbHVkZSAibGliL2JpbmFyeWhlYXAuaCIK ICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKKyNpbmNsdWRlICJy ZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbC5o IgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaCIKICNpbmNsdWRlICJyZXBs aWNhdGlvbi9zbG90LmgiCkBAIC01MTUsNiArNTE2LDE0IEBAIFJlb3JkZXJCdWZmZXJSZXR1cm5D aGFuZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFJlb3JkZXJCdWZmZXJDaGFuZ2UgKmNoYW5nZSwKIAkJ CQlwZnJlZShjaGFuZ2UtPmRhdGEubXNnLm1lc3NhZ2UpOwogCQkJY2hhbmdlLT5kYXRhLm1zZy5t ZXNzYWdlID0gTlVMTDsKIAkJCWJyZWFrOworCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9E RExNRVNTQUdFOgorCQkJaWYgKGNoYW5nZS0+ZGF0YS5kZGxtc2cucHJlZml4ICE9IE5VTEwpCisJ CQkJcGZyZWUoY2hhbmdlLT5kYXRhLmRkbG1zZy5wcmVmaXgpOworCQkJY2hhbmdlLT5kYXRhLmRk bG1zZy5wcmVmaXggPSBOVUxMOworCQkJaWYgKGNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZSAh PSBOVUxMKQorCQkJCXBmcmVlKGNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZSk7CisJCQljaGFu Z2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2UgPSBOVUxMOworCQkJYnJlYWs7CiAJCWNhc2UgUkVPUkRF Ul9CVUZGRVJfQ0hBTkdFX0lOVkFMSURBVElPTjoKIAkJCWlmIChjaGFuZ2UtPmRhdGEuaW52YWwu aW52YWxpZGF0aW9ucykKIAkJCQlwZnJlZShjaGFuZ2UtPmRhdGEuaW52YWwuaW52YWxpZGF0aW9u cyk7CkBAIC04NjksNiArODc4LDM2IEBAIFJlb3JkZXJCdWZmZXJRdWV1ZU1lc3NhZ2UoUmVvcmRl ckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlkLAogCX0KIH0KIAorLyoKKyAqIEEgdHJhbnNh Y3Rpb25hbCBEREwgbWVzc2FnZSBpcyBxdWV1ZWQgdG8gYmUgcHJvY2Vzc2VkIHVwb24gY29tbWl0 LgorICovCit2b2lkCitSZW9yZGVyQnVmZmVyUXVldWVERExNZXNzYWdlKFJlb3JkZXJCdWZmZXIg KnJiLCBUcmFuc2FjdGlvbklkIHhpZCwKKwkJCQkJCQkgWExvZ1JlY1B0ciBsc24sIGNvbnN0IGNo YXIgKnByZWZpeCwKKwkJCQkJCQkgU2l6ZSBtZXNzYWdlX3NpemUsIGNvbnN0IGNoYXIgKm1lc3Nh Z2UsCisJCQkJCQkJIE9pZCByZWxpZCwgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlKQorewor CU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKwlSZW9yZGVyQnVmZmVyQ2hhbmdlICpjaGFuZ2U7 CisKKwlBc3NlcnQoeGlkICE9IEludmFsaWRUcmFuc2FjdGlvbklkKTsKKworCW9sZGNvbnRleHQg PSBNZW1vcnlDb250ZXh0U3dpdGNoVG8ocmItPmNvbnRleHQpOworCisJY2hhbmdlID0gUmVvcmRl ckJ1ZmZlckdldENoYW5nZShyYik7CisJY2hhbmdlLT5hY3Rpb24gPSBSRU9SREVSX0JVRkZFUl9D SEFOR0VfRERMTUVTU0FHRTsKKwljaGFuZ2UtPmRhdGEuZGRsbXNnLnByZWZpeCA9IHBzdHJkdXAo cHJlZml4KTsKKwljaGFuZ2UtPmRhdGEuZGRsbXNnLnJlbGlkID0gcmVsaWQ7CisJY2hhbmdlLT5k YXRhLmRkbG1zZy5jbWR0eXBlID0gY21kdHlwZTsKKwljaGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3Nh Z2Vfc2l6ZSA9IG1lc3NhZ2Vfc2l6ZTsKKwljaGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2UgPSBw YWxsb2MobWVzc2FnZV9zaXplKTsKKwltZW1jcHkoY2hhbmdlLT5kYXRhLmRkbG1zZy5tZXNzYWdl LCBtZXNzYWdlLCBtZXNzYWdlX3NpemUpOworCisJUmVvcmRlckJ1ZmZlclF1ZXVlQ2hhbmdlKHJi LCB4aWQsIGxzbiwgY2hhbmdlLCBmYWxzZSk7CisKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xk Y29udGV4dCk7Cit9CisKIC8qCiAgKiBBc3NlcnRUWE5Mc25PcmRlcgogICoJCVZlcmlmeSBMU04g b3JkZXJpbmcgb2YgdHJhbnNhY3Rpb24gbGlzdHMgaW4gdGhlIHJlb3JkZXJidWZmZXIKQEAgLTE5 NjgsNiArMjAwNywyOSBAQCBSZW9yZGVyQnVmZmVyQXBwbHlNZXNzYWdlKFJlb3JkZXJCdWZmZXIg KnJiLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQkJCWNoYW5nZS0+ZGF0YS5tc2cubWVzc2Fn ZSk7CiB9CiAKKy8qCisgKiBIZWxwZXIgZnVuY3Rpb24gZm9yIFJlb3JkZXJCdWZmZXJQcm9jZXNz VFhOIGZvciBhcHBseWluZyB0aGUgRERMIG1lc3NhZ2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9p ZAorUmVvcmRlckJ1ZmZlckFwcGx5RERMTWVzc2FnZShSZW9yZGVyQnVmZmVyICpyYiwgUmVvcmRl ckJ1ZmZlclRYTiAqdHhuLAorCQkJCQkJCSBSZW9yZGVyQnVmZmVyQ2hhbmdlICpjaGFuZ2UsIGJv b2wgc3RyZWFtaW5nKQoreworCWlmIChzdHJlYW1pbmcpCisJCXJiLT5zdHJlYW1fZGRsbWVzc2Fn ZShyYiwgdHhuLCBjaGFuZ2UtPmxzbiwKKwkJCQkJCQkgIGNoYW5nZS0+ZGF0YS5kZGxtc2cucHJl Zml4LAorCQkJCQkJCSAgY2hhbmdlLT5kYXRhLmRkbG1zZy5yZWxpZCwKKwkJCQkJCQkgIGNoYW5n ZS0+ZGF0YS5kZGxtc2cuY21kdHlwZSwKKwkJCQkJCQkgIGNoYW5nZS0+ZGF0YS5kZGxtc2cubWVz c2FnZV9zaXplLAorCQkJCQkJCSAgY2hhbmdlLT5kYXRhLmRkbG1zZy5tZXNzYWdlKTsKKwllbHNl CisJCXJiLT5kZGxtZXNzYWdlKHJiLCB0eG4sIGNoYW5nZS0+bHNuLAorCQkJCQkgICBjaGFuZ2Ut PmRhdGEuZGRsbXNnLnByZWZpeCwKKwkJCQkJICAgY2hhbmdlLT5kYXRhLmRkbG1zZy5yZWxpZCwK KwkJCQkJICAgY2hhbmdlLT5kYXRhLmRkbG1zZy5jbWR0eXBlLAorCQkJCQkgICBjaGFuZ2UtPmRh dGEuZGRsbXNnLm1lc3NhZ2Vfc2l6ZSwKKwkJCQkJICAgY2hhbmdlLT5kYXRhLmRkbG1zZy5tZXNz YWdlKTsKK30KKwogLyoKICAqIEZ1bmN0aW9uIHRvIHN0b3JlIHRoZSBjb21tYW5kIGlkIGFuZCBz bmFwc2hvdCBhdCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50CiAgKiBzdHJlYW0gc28gdGhhdCB3ZSBj YW4gcmV1c2UgdGhlIHNhbWUgd2hpbGUgc2VuZGluZyB0aGUgbmV4dCBzdHJlYW0uCkBAIC0yMzQ4 LDYgKzI0MTAsMTAgQEAgUmVvcmRlckJ1ZmZlclByb2Nlc3NUWE4oUmVvcmRlckJ1ZmZlciAqcmIs IFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCQkJUmVvcmRlckJ1ZmZlckFwcGx5TWVzc2FnZShy YiwgdHhuLCBjaGFuZ2UsIHN0cmVhbWluZyk7CiAJCQkJCWJyZWFrOwogCisJCQkJY2FzZSBSRU9S REVSX0JVRkZFUl9DSEFOR0VfRERMTUVTU0FHRToKKwkJCQkJUmVvcmRlckJ1ZmZlckFwcGx5RERM TWVzc2FnZShyYiwgdHhuLCBjaGFuZ2UsIHN0cmVhbWluZyk7CisJCQkJCWJyZWFrOworCiAJCQkJ Y2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfSU5WQUxJREFUSU9OOgogCQkJCQkvKiBFeGVjdXRl IHRoZSBpbnZhbGlkYXRpb24gbWVzc2FnZXMgbG9jYWxseSAqLwogCQkJCQlSZW9yZGVyQnVmZmVy RXhlY3V0ZUludmFsaWRhdGlvbnMoY2hhbmdlLT5kYXRhLmludmFsLm5pbnZhbGlkYXRpb25zLApA QCAtMzc3MSw2ICszODM3LDQwIEBAIFJlb3JkZXJCdWZmZXJTZXJpYWxpemVDaGFuZ2UoUmVvcmRl ckJ1ZmZlciAqcmIsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCQkJICAgY2hhbmdlLT5kYXRh Lm1zZy5tZXNzYWdlX3NpemUpOwogCQkJCWRhdGEgKz0gY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdl X3NpemU7CiAKKwkJCQlicmVhazsKKwkJCX0KKwkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0Vf RERMTUVTU0FHRToKKwkJCXsKKwkJCQljaGFyCSAgICpkYXRhOworCQkJCVNpemUJCXByZWZpeF9z aXplID0gc3RybGVuKGNoYW5nZS0+ZGF0YS5kZGxtc2cucHJlZml4KSArIDE7CisKKwkJCQlzeiAr PSBwcmVmaXhfc2l6ZSArIGNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZV9zaXplICsKKwkJCQkJ c2l6ZW9mKFNpemUpICsgc2l6ZW9mKE9pZCkgKyBzaXplb2YoaW50KSArIHNpemVvZihTaXplKTsK KwkJCQlSZW9yZGVyQnVmZmVyU2VyaWFsaXplUmVzZXJ2ZShyYiwgc3opOworCisJCQkJZGF0YSA9 ICgoY2hhciAqKSByYi0+b3V0YnVmKSArIHNpemVvZihSZW9yZGVyQnVmZmVyRGlza0NoYW5nZSk7 CisKKwkJCQkvKiBtaWdodCBoYXZlIGJlZW4gcmVhbGxvY2F0ZWQgYWJvdmUgKi8KKwkJCQlvbmRp c2sgPSAoUmVvcmRlckJ1ZmZlckRpc2tDaGFuZ2UgKikgcmItPm91dGJ1ZjsKKworCQkJCS8qIHdy aXRlIHRoZSBwcmVmaXgsIHJlbGlkIGFuZCBjbWR0eXBlIGluY2x1ZGluZyB0aGUgc2l6ZSAqLwor CQkJCW1lbWNweShkYXRhLCAmcHJlZml4X3NpemUsIHNpemVvZihTaXplKSk7CisJCQkJZGF0YSAr PSBzaXplb2YoU2l6ZSk7CisJCQkJbWVtY3B5KGRhdGEsICZjaGFuZ2UtPmRhdGEuZGRsbXNnLnJl bGlkLCBzaXplb2YoT2lkKSk7CisJCQkJZGF0YSArPSBzaXplb2YoT2lkKTsKKwkJCQltZW1jcHko ZGF0YSwgJmNoYW5nZS0+ZGF0YS5kZGxtc2cuY21kdHlwZSwgc2l6ZW9mKGludCkpOworCQkJCWRh dGEgKz0gc2l6ZW9mKGludCk7CisJCQkJbWVtY3B5KGRhdGEsIGNoYW5nZS0+ZGF0YS5kZGxtc2cu cHJlZml4LAorCQkJCQkgICBwcmVmaXhfc2l6ZSk7CisJCQkJZGF0YSArPSBwcmVmaXhfc2l6ZTsK KworCQkJCS8qIHdyaXRlIHRoZSBtZXNzYWdlIGluY2x1ZGluZyB0aGUgc2l6ZSAqLworCQkJCW1l bWNweShkYXRhLCAmY2hhbmdlLT5kYXRhLmRkbG1zZy5tZXNzYWdlX3NpemUsIHNpemVvZihTaXpl KSk7CisJCQkJZGF0YSArPSBzaXplb2YoU2l6ZSk7CisJCQkJbWVtY3B5KGRhdGEsIGNoYW5nZS0+ ZGF0YS5kZGxtc2cubWVzc2FnZSwKKwkJCQkJICAgY2hhbmdlLT5kYXRhLmRkbG1zZy5tZXNzYWdl X3NpemUpOworCQkJCWRhdGEgKz0gY2hhbmdlLT5kYXRhLmRkbG1zZy5tZXNzYWdlX3NpemU7CisK IAkJCQlicmVhazsKIAkJCX0KIAkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfSU5WQUxJREFU SU9OOgpAQCAtNDA4NSw2ICs0MTg1LDE1IEBAIFJlb3JkZXJCdWZmZXJDaGFuZ2VTaXplKFJlb3Jk ZXJCdWZmZXJDaGFuZ2UgKmNoYW5nZSkKIAkJCQlzeiArPSBwcmVmaXhfc2l6ZSArIGNoYW5nZS0+ ZGF0YS5tc2cubWVzc2FnZV9zaXplICsKIAkJCQkJc2l6ZW9mKFNpemUpICsgc2l6ZW9mKFNpemUp OwogCisJCQkJYnJlYWs7CisJCQl9CisJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0RETE1F U1NBR0U6CisJCQl7CisJCQkJU2l6ZQkJcHJlZml4X3NpemUgPSBzdHJsZW4oY2hhbmdlLT5kYXRh LmRkbG1zZy5wcmVmaXgpICsgMTsKKworCQkJCXN6ICs9IHByZWZpeF9zaXplICsgY2hhbmdlLT5k YXRhLmRkbG1zZy5tZXNzYWdlX3NpemUgKworCQkJCQlzaXplb2YoU2l6ZSkgKyBzaXplb2YoU2l6 ZSkgKyBzaXplb2YoT2lkKSArIHNpemVvZihpbnQpOworCiAJCQkJYnJlYWs7CiAJCQl9CiAJCWNh c2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOVkFMSURBVElPTjoKQEAgLTQzNjAsNiArNDQ2OSwz MyBAQCBSZW9yZGVyQnVmZmVyUmVzdG9yZUNoYW5nZShSZW9yZGVyQnVmZmVyICpyYiwgUmVvcmRl ckJ1ZmZlclRYTiAqdHhuLAogCQkJCQkgICBjaGFuZ2UtPmRhdGEubXNnLm1lc3NhZ2Vfc2l6ZSk7 CiAJCQkJZGF0YSArPSBjaGFuZ2UtPmRhdGEubXNnLm1lc3NhZ2Vfc2l6ZTsKIAorCQkJCWJyZWFr OworCQkJfQorCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9ERExNRVNTQUdFOgorCQkJewor CQkJCVNpemUJCXByZWZpeF9zaXplOworCisJCQkJLyogcmVhZCBwcmVmaXggKi8KKwkJCQltZW1j cHkoJnByZWZpeF9zaXplLCBkYXRhLCBzaXplb2YoU2l6ZSkpOworCQkJCWRhdGEgKz0gc2l6ZW9m KFNpemUpOworCQkJCW1lbWNweSgmY2hhbmdlLT5kYXRhLmRkbG1zZy5yZWxpZCwgZGF0YSwgc2l6 ZW9mKE9pZCkpOworCQkJCWRhdGEgKz0gc2l6ZW9mKE9pZCk7CisJCQkJbWVtY3B5KCZjaGFuZ2Ut PmRhdGEuZGRsbXNnLmNtZHR5cGUsIGRhdGEsIHNpemVvZihpbnQpKTsKKwkJCQlkYXRhICs9IHNp emVvZihpbnQpOworCQkJCWNoYW5nZS0+ZGF0YS5kZGxtc2cucHJlZml4ID0gTWVtb3J5Q29udGV4 dEFsbG9jKHJiLT5jb250ZXh0LCBwcmVmaXhfc2l6ZSk7CisJCQkJbWVtY3B5KGNoYW5nZS0+ZGF0 YS5kZGxtc2cucHJlZml4LCBkYXRhLCBwcmVmaXhfc2l6ZSk7CisJCQkJQXNzZXJ0KGNoYW5nZS0+ ZGF0YS5kZGxtc2cucHJlZml4W3ByZWZpeF9zaXplIC0gMV0gPT0gJ1wwJyk7CisJCQkJZGF0YSAr PSBwcmVmaXhfc2l6ZTsKKworCQkJCS8qIHJlYWQgdGhlIG1lc3NhZ2UgKi8KKwkJCQltZW1jcHko JmNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZV9zaXplLCBkYXRhLCBzaXplb2YoU2l6ZSkpOworCQkJ CWRhdGEgKz0gc2l6ZW9mKFNpemUpOworCQkJCWNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZSA9IE1l bW9yeUNvbnRleHRBbGxvYyhyYi0+Y29udGV4dCwKKwkJCQkJCQkJCQkJCQkJCSAgY2hhbmdlLT5k YXRhLm1zZy5tZXNzYWdlX3NpemUpOworCQkJCW1lbWNweShjaGFuZ2UtPmRhdGEubXNnLm1lc3Nh Z2UsIGRhdGEsCisJCQkJCSAgIGNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZV9zaXplKTsKKwkJCQlk YXRhICs9IGNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZV9zaXplOworCiAJCQkJYnJlYWs7CiAJCQl9 CiAJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOVkFMSURBVElPTjoKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMgYi9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jCmluZGV4IDIwN2E1ODA1YmEuLjIxYjgyZjM0NGYg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMKKysr IGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYwpAQCAtMTU2LDYgKzE1 Niw3IEBACiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAibm9kZXMvbWFrZWZ1bmNz LmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL29wdGltaXplci5oIgorI2luY2x1ZGUgInBhcnNlci9h bmFseXplLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9iZ3dv cmtlci5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvaW50ZXJydXB0LmgiCkBAIC0xNzksNyArMTgw LDEwIEBACiAjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9j LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jYXJyYXkuaCIKKyNpbmNsdWRlICJ0Y29wL2RkbF9k ZXBhcnNlLmgiCisjaW5jbHVkZSAidGNvcC9wcXVlcnkuaCIKICNpbmNsdWRlICJ0Y29wL3Rjb3Bw cm90LmgiCisjaW5jbHVkZSAidGNvcC91dGlsaXR5LmgiCiAjaW5jbHVkZSAidXRpbHMvYWNsLmgi CiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9jYXRjYWNoZS5o IgpAQCAtMjQ2NCw2ICsyNDY4LDIzMCBAQCBhcHBseV9oYW5kbGVfdHJ1bmNhdGUoU3RyaW5nSW5m byBzKQogCWVuZF9yZXBsaWNhdGlvbl9zdGVwKCk7CiB9CiAKKy8qIFJlbW92ZSB0aGUgZGF0YSBw b3B1bGF0aW9uIGZyb20gdGhlIGNvbW1hbmQgKi8KK3N0YXRpYyB2b2lkCitwcmVwcm9jZXNzX2Ny ZWF0ZV90YWJsZShSYXdTdG10ICpjb21tYW5kKQoreworCUNvbW1hbmRUYWcJY29tbWFuZFRhZzsK KworCWNvbW1hbmRUYWcgPSBDcmVhdGVDb21tYW5kVGFnKChOb2RlICopY29tbWFuZCk7CisKKwlz d2l0Y2ggKGNvbW1hbmRUYWcpCisJeworCQljYXNlIENNRFRBR19DUkVBVEVfVEFCTEVfQVM6CisJ CWNhc2UgQ01EVEFHX1NFTEVDVF9JTlRPOgorCQkJeworCQkJCUNyZWF0ZVRhYmxlQXNTdG10ICpj YXN0bXQgPSAoQ3JlYXRlVGFibGVBc1N0bXQgKikgY29tbWFuZC0+c3RtdDsKKwkJCQlpZiAoY2Fz dG10LT5vYmp0eXBlID09IE9CSkVDVF9UQUJMRSkKKwkJCQl7CisJCQkJCS8qCisJCQkJCSAqIEZv cmNlIHNraXBwaW5nIGRhdGEgcG9wdWxhdGlvbiB0byBhdm9pZCBkYXRhCisJCQkJCSAqIGluY29u c2lzdGVuY3kuIERhdGEgc2hvdWxkIGJlIHJlcGxpY2F0ZWQgZnJvbSB0aGUKKwkJCQkJICogcHVi bGlzaGVyIGluc3RlYWQuCisJCQkJCSAqLworCQkJCQljYXN0bXQtPmludG8tPnNraXBEYXRhID0g dHJ1ZTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBDTURUQUdfU0VMRUNUOgorCQkJ eworCQkJCVNlbGVjdFN0bXQgKnNzdG10ID0gKFNlbGVjdFN0bXQgKikgY29tbWFuZC0+c3RtdDsK KworCQkJCWlmIChzc3RtdC0+aW50b0NsYXVzZSAhPSBOVUxMKQorCQkJCXsKKwkJCQkJLyoKKwkJ CQkJICogRm9yY2Ugc2tpcHBpbmcgZGF0YSBwb3B1bGF0aW9uIHRvIGF2b2lkIGRhdGEKKwkJCQkJ ICogaW5jb25zaXN0ZW5jeS4gRGF0YSBzaG91bGQgYmUgcmVwbGljYXRlZCBmcm9tIHRoZQorCQkJ CQkgKiBwdWJsaXNoZXIgaW5zdGVhZC4KKwkJCQkJICovCisJCQkJCXNzdG10LT5pbnRvQ2xhdXNl LT5za2lwRGF0YSA9IHRydWU7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisJZGVmYXVsdDoKKwkJ YnJlYWs7CisJfQorfQorCisvKgorICogSGFuZGxlIENSRUFURSBUQUJMRSBjb21tYW5kCisgKgor ICogQ2FsbCBBZGRTdWJzY3JpcHRpb25SZWxTdGF0ZSBmb3IgQ1JFQVRFIFRBQkVMIGNvbW1hbmQg dG8gc2V0IHRoZSByZWxzdGF0ZSB0bworICogU1VCUkVMX1NUQVRFX1JFQURZIHNvIERNTCBjaGFu Z2VzIG9uIHRoaXMgbmV3IHRhYmxlIGNhbiBiZSByZXBsaWNhdGVkIHdpdGhvdXQKKyAqIGhhdmlu ZyB0byBtYW51YWxseSBydW4gImFsdGVyIHN1YnNjcmlwdGlvbiAuLi4gcmVmcmVzaCBwdWJsaWNh dGlvbiIKKyAqLworc3RhdGljIHZvaWQKK2hhbmRsZV9jcmVhdGVfdGFibGUoUmF3U3RtdCAqY29t bWFuZCkKK3sKKwlDb21tYW5kVGFnCWNvbW1hbmRUYWc7CisJUmFuZ2VWYXIJICpydiA9IE5VTEw7 CisJT2lkCQkJcmVsaWQ7CisJT2lkCQkJcmVsbmFtZXNwYWNlID0gSW52YWxpZE9pZDsKKwljaGFy IAkJICpzY2hlbWFuYW1lID0gTlVMTDsKKwljaGFyCQkgKnJlbG5hbWUgPSBOVUxMOworCisJY29t bWFuZFRhZyA9IENyZWF0ZUNvbW1hbmRUYWcoKE5vZGUgKikgY29tbWFuZCk7CisKKwlzd2l0Y2gg KGNvbW1hbmRUYWcpCisJeworCQljYXNlIENNRFRBR19DUkVBVEVfVEFCTEU6CisJCQl7CisJCQkJ Q3JlYXRlU3RtdCAqY3N0bXQgPSAoQ3JlYXRlU3RtdCAqKSBjb21tYW5kLT5zdG10OworCQkJCXJ2 ID0gY3N0bXQtPnJlbGF0aW9uOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVh azsKKwl9CisKKwlpZiAoIXJ2KQorCQlyZXR1cm47CisKKwlzY2hlbWFuYW1lID0gcnYtPnNjaGVt YW5hbWU7CisJcmVsbmFtZSA9IHJ2LT5yZWxuYW1lOworCisJaWYgKHNjaGVtYW5hbWUgIT0gTlVM TCkKKwkJcmVsbmFtZXNwYWNlID0gZ2V0X25hbWVzcGFjZV9vaWQoc2NoZW1hbmFtZSwgZmFsc2Up OworCisJaWYgKHJlbG5hbWVzcGFjZSAhPSBJbnZhbGlkT2lkKQorCQlyZWxpZCA9IGdldF9yZWxu YW1lX3JlbGlkKHJlbG5hbWUsIHJlbG5hbWVzcGFjZSk7CisJZWxzZQorCQlyZWxpZCA9IFJlbG5h bWVHZXRSZWxpZChyZWxuYW1lKTsKKworCWlmIChyZWxpZCAhPSBJbnZhbGlkT2lkKQorCXsKKwkJ QWRkU3Vic2NyaXB0aW9uUmVsU3RhdGUoTXlTdWJzY3JpcHRpb24tPm9pZCwgcmVsaWQsCisJCQkJ CQkJCVNVQlJFTF9TVEFURV9SRUFEWSwKKwkJCQkJCQkJSW52YWxpZFhMb2dSZWNQdHIpOworCQll cmVwb3J0KERFQlVHMSwKKwkJCQkoZXJybXNnX2ludGVybmFsKCJ0YWJsZSBcIiVzXCIgYWRkZWQg dG8gc3Vic2NyaXB0aW9uIFwiJXNcIiIsCisJCQkJCQkJCSByZWxuYW1lLCBNeVN1YnNjcmlwdGlv bi0+bmFtZSkpKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCithcHBseV9oYW5kbGVfZGRsKFN0cmlu Z0luZm8gcykKK3sKKwlYTG9nUmVjUHRyIGxzbjsKKwljb25zdCBjaGFyICpwcmVmaXggPSBOVUxM OworCWNoYXIgKm1lc3NhZ2UgPSBOVUxMOworCWNoYXIJICAgKmRkbF9jb21tYW5kOworCVNpemUJ CXN6OworCUxpc3QJICAgKnBhcnNldHJlZV9saXN0OworCUxpc3RDZWxsICAgKnBhcnNldHJlZV9p dGVtOworCURlc3RSZWNlaXZlciAqcmVjZWl2ZXI7CisJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0 OworCWNvbnN0IGNoYXIgKnNhdmVfZGVidWdfcXVlcnlfc3RyaW5nID0gZGVidWdfcXVlcnlfc3Ry aW5nOworCisJbWVzc2FnZSA9IGxvZ2ljYWxyZXBfcmVhZF9kZGxtZXNzYWdlKHMsICZsc24sICZw cmVmaXgsICZzeik7CisKKwkvKiBNYWtlIHN1cmUgd2UgYXJlIGluIGEgdHJhbnNhY3Rpb24gY29t bWFuZCAqLworCWJlZ2luX3JlcGxpY2F0aW9uX3N0ZXAoKTsKKworCWRkbF9jb21tYW5kID0gZGRs X2RlcGFyc2VfanNvbl90b19zdHJpbmcobWVzc2FnZSk7CisJZGVidWdfcXVlcnlfc3RyaW5nID0g ZGRsX2NvbW1hbmQ7CisKKwkvKiBEZXN0Tm9uZSBmb3IgbG9naWNhbCByZXBsaWNhdGlvbiAqLwor CXJlY2VpdmVyID0gQ3JlYXRlRGVzdFJlY2VpdmVyKERlc3ROb25lKTsKKwlwYXJzZXRyZWVfbGlz dCA9IHBnX3BhcnNlX3F1ZXJ5KGRkbF9jb21tYW5kKTsKKworCWZvcmVhY2gocGFyc2V0cmVlX2l0 ZW0sIHBhcnNldHJlZV9saXN0KQorCXsKKwkJTGlzdAkgICAqcGxhbnRyZWVfbGlzdDsKKwkJTGlz dAkgICAqcXVlcnl0cmVlX2xpc3Q7CisJCVJhd1N0bXQJICAgKmNvbW1hbmQgPSAoUmF3U3RtdCAq KSBsZmlyc3QocGFyc2V0cmVlX2l0ZW0pOworCQlDb21tYW5kVGFnCWNvbW1hbmRUYWc7CisJCU1l bW9yeUNvbnRleHQgcGVyX3BhcnNldHJlZV9jb250ZXh0ID0gTlVMTDsKKwkJUG9ydGFsCQlwb3J0 YWw7CisJCWJvb2wJCSBzbmFwc2hvdF9zZXQgPSBmYWxzZTsKKworCQljb21tYW5kVGFnID0gQ3Jl YXRlQ29tbWFuZFRhZygoTm9kZSAqKSBjb21tYW5kKTsKKworCQkvKiBJZiB3ZSBnb3QgYSBjYW5j ZWwgc2lnbmFsIGluIHBhcnNpbmcgb3IgcHJpb3IgY29tbWFuZCwgcXVpdCAqLworCQlDSEVDS19G T1JfSU5URVJSVVBUUygpOworCisJCS8qIFJlbW92ZSBkYXRhIHBvcHVsYXRpb24gZnJvbSB0aGUg Y29tbWFuZCAqLworCQlwcmVwcm9jZXNzX2NyZWF0ZV90YWJsZShjb21tYW5kKTsKKworCQkvKgor CQkgKiBTZXQgdXAgYSBzbmFwc2hvdCBpZiBwYXJzZSBhbmFseXNpcy9wbGFubmluZyB3aWxsIG5l ZWQgb25lLgorCQkgKi8KKwkJaWYgKGFuYWx5emVfcmVxdWlyZXNfc25hcHNob3QoY29tbWFuZCkp CisJCXsKKwkJCVB1c2hBY3RpdmVTbmFwc2hvdChHZXRUcmFuc2FjdGlvblNuYXBzaG90KCkpOwor CQkJc25hcHNob3Rfc2V0ID0gdHJ1ZTsKKwkJfQorCisJCS8qCisJCSAqIFdlIGRvIHRoZSB3b3Jr IGZvciBlYWNoIHBhcnNldHJlZSBpbiBhIHNob3J0LWxpdmVkIGNvbnRleHQsIHRvCisJCSAqIGxp bWl0IHRoZSBtZW1vcnkgdXNlZCB3aGVuIHRoZXJlIGFyZSBtYW55IGNvbW1hbmRzIGluIHRoZSBz dHJpbmcuCisJCSAqLworCQlwZXJfcGFyc2V0cmVlX2NvbnRleHQgPQorCQkJQWxsb2NTZXRDb250 ZXh0Q3JlYXRlKEN1cnJlbnRNZW1vcnlDb250ZXh0LAorCQkJCQkJCQkgICJleGVjdXRlX3NxbF9z dHJpbmcgcGVyLXN0YXRlbWVudCBjb250ZXh0IiwKKwkJCQkJCQkJICBBTExPQ1NFVF9ERUZBVUxU X1NJWkVTKTsKKwkJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhwZXJfcGFyc2V0 cmVlX2NvbnRleHQpOworCisJCXF1ZXJ5dHJlZV9saXN0ID0gcGdfYW5hbHl6ZV9hbmRfcmV3cml0 ZV9maXhlZHBhcmFtcyhjb21tYW5kLAorCQkJCQkJCQkJCQkJCQkJZGRsX2NvbW1hbmQsCisJCQkJ CQkJCQkJCQkJCQlOVUxMLCAwLCBOVUxMKTsKKworCQlwbGFudHJlZV9saXN0ID0gcGdfcGxhbl9x dWVyaWVzKHF1ZXJ5dHJlZV9saXN0LCBkZGxfY29tbWFuZCwgMCwgTlVMTCk7CisKKwkJLyogRG9u ZSB3aXRoIHRoZSBzbmFwc2hvdCB1c2VkIGZvciBwYXJzaW5nL3BsYW5uaW5nICovCisJCWlmIChz bmFwc2hvdF9zZXQpCisJCQlQb3BBY3RpdmVTbmFwc2hvdCgpOworCisJCXBvcnRhbCA9IENyZWF0 ZVBvcnRhbCgibG9naWNhbCByZXBsaWNhdGlvbiIsIHRydWUsIHRydWUpOworCisJCS8qCisJCSAq IFdlIGRvbid0IGhhdmUgdG8gY29weSBhbnl0aGluZyBpbnRvIHRoZSBwb3J0YWwsIGJlY2F1c2Ug ZXZlcnl0aGluZworCQkgKiB3ZSBhcmUgcGFzc2luZyBoZXJlIGlzIGluIEFwcGx5TWVzc2FnZUNv bnRleHQgb3IgdGhlCisJCSAqIHBlcl9wYXJzZXRyZWVfY29udGV4dCwgYW5kIHNvIHdpbGwgb3V0 bGl2ZSB0aGUgcG9ydGFsIGFueXdheS4KKwkJICovCisJCVBvcnRhbERlZmluZVF1ZXJ5KHBvcnRh bCwKKwkJCQkJCSAgTlVMTCwKKwkJCQkJCSAgZGRsX2NvbW1hbmQsCisJCQkJCQkgIGNvbW1hbmRU YWcsCisJCQkJCQkgIHBsYW50cmVlX2xpc3QsCisJCQkJCQkgIE5VTEwpOworCisJCS8qCisJCSAq IFN0YXJ0IHRoZSBwb3J0YWwuICBObyBwYXJhbWV0ZXJzIGhlcmUuCisJCSAqLworCQlQb3J0YWxT dGFydChwb3J0YWwsIE5VTEwsIDAsIEludmFsaWRTbmFwc2hvdCk7CisKKwkJLyoKKwkJICogU3dp dGNoIGJhY2sgdG8gdHJhbnNhY3Rpb24gY29udGV4dCBmb3IgZXhlY3V0aW9uLgorCQkgKi8KKwkJ TWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCisJCSh2b2lkKSBQb3J0YWxSdW4o cG9ydGFsLAorCQkJCQkJIEZFVENIX0FMTCwKKwkJCQkJCSB0cnVlLAorCQkJCQkJIHRydWUsCisJ CQkJCQkgcmVjZWl2ZXIsCisJCQkJCQkgcmVjZWl2ZXIsCisJCQkJCQkgTlVMTCk7CisKKwkJUG9y dGFsRHJvcChwb3J0YWwsIGZhbHNlKTsKKworCQlDb21tYW5kQ291bnRlckluY3JlbWVudCgpOwor CisJCS8qCisJCSAqIFRhYmxlIGNyZWF0ZWQgYnkgRERMIHJlcGxpY2F0aW9uIChkYXRhYmFzZSBs ZXZlbCkgaXMgYXV0b21hdGljYWxseQorCQkgKiBhZGRlZCB0byB0aGUgc3Vic2NyaXB0aW9uIGhl cmUuCisJCSAqLworCQloYW5kbGVfY3JlYXRlX3RhYmxlKGNvbW1hbmQpOworCisJCS8qIE5vdyB3 ZSBtYXkgZHJvcCB0aGUgcGVyLXBhcnNldHJlZSBjb250ZXh0LCBpZiBvbmUgd2FzIGNyZWF0ZWQu ICovCisJCU1lbW9yeUNvbnRleHREZWxldGUocGVyX3BhcnNldHJlZV9jb250ZXh0KTsKKwl9CisK KwlkZWJ1Z19xdWVyeV9zdHJpbmcgPSBzYXZlX2RlYnVnX3F1ZXJ5X3N0cmluZzsKKwllbmRfcmVw bGljYXRpb25fc3RlcCgpOworfQorCiAKIC8qCiAgKiBMb2dpY2FsIHJlcGxpY2F0aW9uIHByb3Rv Y29sIG1lc3NhZ2UgZGlzcGF0Y2hlci4KQEAgLTI1MjksNiArMjc1NywxMCBAQCBhcHBseV9kaXNw YXRjaChTdHJpbmdJbmZvIHMpCiAJCQkgKi8KIAkJCWJyZWFrOwogCisJCWNhc2UgTE9HSUNBTF9S RVBfTVNHX0RETE1FU1NBR0U6CisJCQlhcHBseV9oYW5kbGVfZGRsKHMpOworCQkJYnJlYWs7CisK IAkJY2FzZSBMT0dJQ0FMX1JFUF9NU0dfU1RSRUFNX1NUQVJUOgogCQkJYXBwbHlfaGFuZGxlX3N0 cmVhbV9zdGFydChzKTsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0 cHV0L3Bnb3V0cHV0LmMKaW5kZXggMmVjYWE1YjkwNy4uNWU1YjFjYTEyZiAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYworKysgYi9zcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jCkBAIC01Myw2ICs1MywxMSBAQCBz dGF0aWMgdm9pZCBwZ291dHB1dF9tZXNzYWdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwK IAkJCQkJCQkgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLCBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAog CQkJCQkJCSBib29sIHRyYW5zYWN0aW9uYWwsIGNvbnN0IGNoYXIgKnByZWZpeCwKIAkJCQkJCQkg U2l6ZSBzeiwgY29uc3QgY2hhciAqbWVzc2FnZSk7CitzdGF0aWMgdm9pZCBwZ291dHB1dF9kZGxt ZXNzYWdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKKwkJCQkJCQkJUmVvcmRlckJ1ZmZl clRYTiAqdHhuLCBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAorCQkJCQkJCQljb25zdCBjaGFyICpw cmVmaXgsIE9pZCByZWxpZCwKKwkJCQkJCQkJRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAor CQkJCQkJCQlTaXplIHN6LCBjb25zdCBjaGFyICptZXNzYWdlKTsKIHN0YXRpYyBib29sIHBnb3V0 cHV0X29yaWdpbl9maWx0ZXIoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAogCQkJCQkJCQkg ICBSZXBPcmlnaW5JZCBvcmlnaW5faWQpOwogc3RhdGljIHZvaWQgcGdvdXRwdXRfYmVnaW5fcHJl cGFyZV90eG4oTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LApAQCAtMjU2LDYgKzI2MSw3IEBA IF9QR19vdXRwdXRfcGx1Z2luX2luaXQoT3V0cHV0UGx1Z2luQ2FsbGJhY2tzICpjYikKIAljYi0+ Y2hhbmdlX2NiID0gcGdvdXRwdXRfY2hhbmdlOwogCWNiLT50cnVuY2F0ZV9jYiA9IHBnb3V0cHV0 X3RydW5jYXRlOwogCWNiLT5tZXNzYWdlX2NiID0gcGdvdXRwdXRfbWVzc2FnZTsKKwljYi0+ZGRs bWVzc2FnZV9jYiA9IHBnb3V0cHV0X2RkbG1lc3NhZ2U7CiAJY2ItPmNvbW1pdF9jYiA9IHBnb3V0 cHV0X2NvbW1pdF90eG47CiAKIAljYi0+YmVnaW5fcHJlcGFyZV9jYiA9IHBnb3V0cHV0X2JlZ2lu X3ByZXBhcmVfdHhuOwpAQCAtMjcyLDYgKzI3OCw3IEBAIF9QR19vdXRwdXRfcGx1Z2luX2luaXQo T3V0cHV0UGx1Z2luQ2FsbGJhY2tzICpjYikKIAljYi0+c3RyZWFtX2NvbW1pdF9jYiA9IHBnb3V0 cHV0X3N0cmVhbV9jb21taXQ7CiAJY2ItPnN0cmVhbV9jaGFuZ2VfY2IgPSBwZ291dHB1dF9jaGFu Z2U7CiAJY2ItPnN0cmVhbV9tZXNzYWdlX2NiID0gcGdvdXRwdXRfbWVzc2FnZTsKKwljYi0+c3Ry ZWFtX2RkbG1lc3NhZ2VfY2IgPSBwZ291dHB1dF9kZGxtZXNzYWdlOwogCWNiLT5zdHJlYW1fdHJ1 bmNhdGVfY2IgPSBwZ291dHB1dF90cnVuY2F0ZTsKIAkvKiB0cmFuc2FjdGlvbiBzdHJlYW1pbmcg LSB0d28tcGhhc2UgY29tbWl0ICovCiAJY2ItPnN0cmVhbV9wcmVwYXJlX2NiID0gcGdvdXRwdXRf c3RyZWFtX3ByZXBhcmVfdHhuOwpAQCAtNDI2LDYgKzQzMyw3IEBAIHBnb3V0cHV0X3N0YXJ0dXAo TG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBPdXRwdXRQbHVnaW5PcHRpb25zICpvcHQsCiAK IAkvKiBUaGlzIHBsdWdpbiB1c2VzIGJpbmFyeSBwcm90b2NvbC4gKi8KIAlvcHQtPm91dHB1dF90 eXBlID0gT1VUUFVUX1BMVUdJTl9CSU5BUllfT1VUUFVUOworCW9wdC0+cmVjZWl2ZV9yZXdyaXRl cyA9IHRydWU7CiAKIAkvKgogCSAqIFRoaXMgaXMgcmVwbGljYXRpb24gc3RhcnQgYW5kIG5vdCBz bG90IGluaXRpYWxpemF0aW9uLgpAQCAtNDk5LDYgKzUwNyw3IEBAIHBnb3V0cHV0X3N0YXJ0dXAo TG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBPdXRwdXRQbHVnaW5PcHRpb25zICpvcHQsCiAK IAkJLyogSW5pdCBwdWJsaWNhdGlvbiBzdGF0ZS4gKi8KIAkJZGF0YS0+cHVibGljYXRpb25zID0g TklMOworCQlkYXRhLT5kZWxldGVkX3JlbGlkcyA9IE5JTDsKIAkJcHVibGljYXRpb25zX3ZhbGlk ID0gZmFsc2U7CiAJCUNhY2hlUmVnaXN0ZXJTeXNjYWNoZUNhbGxiYWNrKFBVQkxJQ0FUSU9OT0lE LAogCQkJCQkJCQkJICBwdWJsaWNhdGlvbl9pbnZhbGlkYXRpb25fY2IsCkBAIC0xMzc3LDkgKzEz ODYsMjIgQEAgcGdvdXRwdXRfY2hhbmdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgUmVv cmRlckJ1ZmZlclRYTiAqdHhuLAogCVJlb3JkZXJCdWZmZXJDaGFuZ2VUeXBlIGFjdGlvbiA9IGNo YW5nZS0+YWN0aW9uOwogCVR1cGxlVGFibGVTbG90ICpvbGRfc2xvdCA9IE5VTEw7CiAJVHVwbGVU YWJsZVNsb3QgKm5ld19zbG90ID0gTlVMTDsKKwlib29sCQkJdGFibGVfcmV3cml0ZSA9IGZhbHNl OwogCiAJdXBkYXRlX3JlcGxpY2F0aW9uX3Byb2dyZXNzKGN0eCwgZmFsc2UpOwogCisJLyoKKwkg KiBGb3IgaGVhcCByZXdyaXRlcywgd2UgbWlnaHQgbmVlZCB0byByZXBsaWNhdGUgdGhlbSBpZiB0 aGUgcmV3cml0dGVuCisJICogdGFibGUgcHVibGlzaGVzIHJld3JpdGUgZGRsIG1lc3NhZ2UuIFNv IGdldCB0aGUgYWN0dWFsIHJlbGF0aW9uIGhlcmUgYW5kCisJICogY2hlY2sgdGhlIHB1YmFjdGlv biBsYXRlci4KKwkgKi8KKwlpZiAocmVsYXRpb24tPnJkX3JlbC0+cmVscmV3cml0ZSkKKwl7CisJ CXRhYmxlX3Jld3JpdGUgPSB0cnVlOworCQlyZWxhdGlvbiA9IFJlbGF0aW9uSWRHZXRSZWxhdGlv bihyZWxhdGlvbi0+cmRfcmVsLT5yZWxyZXdyaXRlKTsKKwkJdGFyZ2V0cmVsID0gcmVsYXRpb247 CisJfQorCiAJaWYgKCFpc19wdWJsaXNoYWJsZV9yZWxhdGlvbihyZWxhdGlvbikpCiAJCXJldHVy bjsKIApAQCAtMTQxMyw2ICsxNDM1LDEzIEBAIHBnb3V0cHV0X2NoYW5nZShMb2dpY2FsRGVjb2Rp bmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCUFzc2VydChmYWxzZSk7 CiAJfQogCisJLyoKKwkgKiBXZSBkb24ndCBwdWJsaXNoIHRhYmxlIHJld3JpdGUgY2hhbmdlIHVu bGVzcyB3ZSBwdWJsaXNoIHRoZSByZXdyaXRlIGRkbAorCSAqIG1lc3NhZ2UuCisJICovCisJaWYg KHRhYmxlX3Jld3JpdGUgJiYgIXJlbGVudHJ5LT5wdWJhY3Rpb25zLnB1YmRkbCkKKwkJcmV0dXJu OworCiAJLyogQXZvaWQgbGVha2luZyBtZW1vcnkgYnkgdXNpbmcgYW5kIHJlc2V0dGluZyBvdXIg b3duIGNvbnRleHQgKi8KIAlvbGQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oZGF0YS0+Y29udGV4 dCk7CiAKQEAgLTE0NDIsOCArMTQ3MSw4IEBAIHBnb3V0cHV0X2NoYW5nZShMb2dpY2FsRGVjb2Rp bmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCX0KIAogCQkJLyogQ2hl Y2sgcm93IGZpbHRlciAqLwotCQkJaWYgKCFwZ291dHB1dF9yb3dfZmlsdGVyKHRhcmdldHJlbCwg TlVMTCwgJm5ld19zbG90LCByZWxlbnRyeSwKLQkJCQkJCQkJCSAmYWN0aW9uKSkKKwkJCWlmICgh dGFibGVfcmV3cml0ZSAmJgorCQkJCSFwZ291dHB1dF9yb3dfZmlsdGVyKHRhcmdldHJlbCwgTlVM TCwgJm5ld19zbG90LCByZWxlbnRyeSwgJmFjdGlvbikpCiAJCQkJYnJlYWs7CiAKIAkJCS8qCkBA IC0xNDYzLDggKzE0OTIsMTkgQEAgcGdvdXRwdXRfY2hhbmdlKExvZ2ljYWxEZWNvZGluZ0NvbnRl eHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJbWF5YmVfc2VuZF9zY2hlbWEoY3R4 LCBjaGFuZ2UsIHJlbGF0aW9uLCByZWxlbnRyeSk7CiAKIAkJCU91dHB1dFBsdWdpblByZXBhcmVX cml0ZShjdHgsIHRydWUpOwotCQkJbG9naWNhbHJlcF93cml0ZV9pbnNlcnQoY3R4LT5vdXQsIHhp ZCwgdGFyZ2V0cmVsLCBuZXdfc2xvdCwKLQkJCQkJCQkJCWRhdGEtPmJpbmFyeSwgcmVsZW50cnkt PmNvbHVtbnMpOworCisJCQkvKgorCQkJICogQ29udmVydCB0aGUgcmV3cml0ZSBpbnNlcnRzIHRv IHVwZGF0ZXMgc28gdGhhdCB0aGUgc3Vic2NyaWJlcgorCQkJICogY2FuIHJlcGxheSBpdC4gVGhp cyBpcyBuZWVkZWQgdG8gbWFrZSBzdXJlIHRoZSBkYXRhIGJldHdlZW4KKwkJCSAqIHB1Ymxpc2hl ciBhbmQgc3Vic2NyaWJlciBpcyBjb25zaXN0ZW50LgorCQkJICovCisJCQlpZiAodGFibGVfcmV3 cml0ZSkKKwkJCQlsb2dpY2FscmVwX3dyaXRlX3VwZGF0ZShjdHgtPm91dCwgeGlkLCB0YXJnZXRy ZWwsCisJCQkJCQkJCQkJTlVMTCwgbmV3X3Nsb3QsIGRhdGEtPmJpbmFyeSwKKwkJCQkJCQkJCQly ZWxlbnRyeS0+Y29sdW1ucyk7CisJCQllbHNlCisJCQkJbG9naWNhbHJlcF93cml0ZV9pbnNlcnQo Y3R4LT5vdXQsIHhpZCwgdGFyZ2V0cmVsLCBuZXdfc2xvdCwKKwkJCQkJCQkJCQlkYXRhLT5iaW5h cnksIHJlbGVudHJ5LT5jb2x1bW5zKTsKIAkJCU91dHB1dFBsdWdpbldyaXRlKGN0eCwgdHJ1ZSk7 CiAJCQlicmVhazsKIAkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfVVBEQVRFOgpAQCAtMTU5 NCw2ICsxNjM0LDkgQEAgcGdvdXRwdXRfY2hhbmdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0 eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQlhbmNlc3RvciA9IE5VTEw7CiAJfQogCisJaWYg KHRhYmxlX3Jld3JpdGUpCisJCVJlbGF0aW9uQ2xvc2UocmVsYXRpb24pOworCiAJLyogQ2xlYW51 cCAqLwogCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGQpOwogCU1lbW9yeUNvbnRleHRSZXNldChk YXRhLT5jb250ZXh0KTsKQEAgLTE2NzEsOCArMTcxNCw4IEBAIHBnb3V0cHV0X3RydW5jYXRlKExv Z2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCiBzdGF0 aWMgdm9pZAogcGdvdXRwdXRfbWVzc2FnZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFJl b3JkZXJCdWZmZXJUWE4gKnR4biwKLQkJCQkgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwgYm9vbCB0 cmFuc2FjdGlvbmFsLCBjb25zdCBjaGFyICpwcmVmaXgsIFNpemUgc3osCi0JCQkJIGNvbnN0IGNo YXIgKm1lc3NhZ2UpCisJCQkJIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sIGJvb2wgdHJhbnNhY3Rp b25hbCwKKwkJCQkgY29uc3QgY2hhciAqcHJlZml4LCBTaXplIHN6LCBjb25zdCBjaGFyICptZXNz YWdlKQogewogCVBHT3V0cHV0RGF0YSAqZGF0YSA9IChQR091dHB1dERhdGEgKikgY3R4LT5vdXRw dXRfcGx1Z2luX3ByaXZhdGU7CiAJVHJhbnNhY3Rpb25JZCB4aWQgPSBJbnZhbGlkVHJhbnNhY3Rp b25JZDsKQEAgLTE3MTIsNiArMTc1NSwxMzcgQEAgcGdvdXRwdXRfbWVzc2FnZShMb2dpY2FsRGVj b2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAlPdXRwdXRQbHVnaW5X cml0ZShjdHgsIHRydWUpOwogfQogCitzdGF0aWMgdm9pZAorcGdvdXRwdXRfZGRsbWVzc2FnZShM b2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJ WExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJY29uc3QgY2hhciAqcHJlZml4LCBPaWQgcmVs aWQsIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJU2l6ZSBzeiwgY29uc3QgY2hh ciAqbWVzc2FnZSkKK3sKKwlQR091dHB1dERhdGEgKmRhdGEgPSAoUEdPdXRwdXREYXRhICopIGN0 eC0+b3V0cHV0X3BsdWdpbl9wcml2YXRlOworCVBHT3V0cHV0VHhuRGF0YSAqdHhuZGF0YSA9IChQ R091dHB1dFR4bkRhdGEgKikgdHhuLT5vdXRwdXRfcGx1Z2luX3ByaXZhdGU7CisJUmVsYXRpb24J cmVsYXRpb24gPSBOVUxMOworCVRyYW5zYWN0aW9uSWQgeGlkID0gSW52YWxpZFRyYW5zYWN0aW9u SWQ7CisJUmVsYXRpb25TeW5jRW50cnkgKnJlbGVudHJ5OworCisJLyoKKwkgKiBSZW1lbWJlciB0 aGUgeGlkIGZvciB0aGUgbWVzc2FnZSBpbiBzdHJlYW1pbmcgbW9kZS4gU2VlCisJICogcGdvdXRw dXRfY2hhbmdlLgorCSAqLworCWlmIChpbl9zdHJlYW1pbmcpCisJCXhpZCA9IHR4bi0+eGlkOwor CisJc3dpdGNoIChjbWR0eXBlKQorCXsKKwkJY2FzZSBEQ1RfVGFibGVEcm9wU3RhcnQ6CisJCQkv KgorCQkJICogT24gRFJPUCBzdGFydCwgYWRkIHRoZSByZWxpZCB0byBhIGRlbGV0ZWRfcmVsaWQg bGlzdCBpZiB0aGUKKwkJCSAqIHJlbGlkIGlzIHBhcnQgb2YgYSBwdWJsaWNhdGlvbiB0aGF0IHN1 cHBvcnRzIGRkbCBwdWJsaWNhdGlvbi4gV2UKKwkJCSAqIG5lZWQgdGhpcyBiZWNhdXNlIG9uIERS T1AgZW5kLCB0aGUgcmVsaWQgd2lsbCBubyBsb25nZXIgYmUKKwkJCSAqIHZhbGlkLiBMYXRlciBv biBEcm9wIGVuZCwgdmVyaWZ5IHRoYXQgdGhlIGRyb3AgaXMgZm9yIGEgcmVsaWQKKwkJCSAqIHRo YXQgaXMgb24gdGhlIGRlbGV0ZWRfcmlkIGxpc3QsIGFuZCBvbmx5IHRoZW4gc2VuZCB0aGUgZGRs CisJCQkgKiBtZXNzYWdlLgorCQkJICovCisJCQlyZWxhdGlvbiA9IFJlbGF0aW9uSWRHZXRSZWxh dGlvbihyZWxpZCk7CisKKwkJCUFzc2VydChyZWxhdGlvbik7CisJCQlyZWxlbnRyeSA9IGdldF9y ZWxfc3luY19lbnRyeShkYXRhLCByZWxhdGlvbik7CisKKwkJCWlmIChyZWxlbnRyeS0+cHViYWN0 aW9ucy5wdWJkZGwpCisJCQkJZGF0YS0+ZGVsZXRlZF9yZWxpZHMgPSBsYXBwZW5kX29pZChkYXRh LT5kZWxldGVkX3JlbGlkcywgcmVsaWQpOworCisJCQlSZWxhdGlvbkNsb3NlKHJlbGF0aW9uKTsK KwkJCXJldHVybjsKKwkJY2FzZSBEQ1RfVGFibGVEcm9wRW5kOgorCQkJaWYgKCFsaXN0X21lbWJl cl9vaWQoZGF0YS0+ZGVsZXRlZF9yZWxpZHMsIHJlbGlkKSkKKwkJCQlyZXR1cm47CisJCQllbHNl CisJCQkJZGF0YS0+ZGVsZXRlZF9yZWxpZHMgPSBsaXN0X2RlbGV0ZV9vaWQoZGF0YS0+ZGVsZXRl ZF9yZWxpZHMsIHJlbGlkKTsKKwkJCWJyZWFrOworCQljYXNlIERDVF9UYWJsZUFsdGVyOgorCQkJ LyoKKwkJCSAqIEZvciB0YWJsZSByZXdyaXRlIGRkbCwgd2UgZmlyc3Qgc2VuZCB0aGUgb3JpZ2lu YWwgZGRsIG1lc3NhZ2UgdG8KKwkJCSAqIHN1YnNjcmliZXIsIHRoZW4gY29udmVydCB0aGUgdXBj b21pbmcgcmV3cml0ZSBJTlNFUlQgdG8gVVBEQVRFIGFuZAorCQkJICogc2VuZCB0aGVtIHRvIHN1 YnNjcmliZXIgc28gdGhhdCB0aGUgZGF0YSBiZXR3ZWVuIHB1Ymxpc2hlciBhbmQKKwkJCSAqIHN1 YnNjcmliZXIgY2FuIGFsd2F5cyBiZSBjb25zaXN0ZW50LgorCQkJICoKKwkJCSAqIFdlIGRvIHRo aXMgd2F5IGJlY2F1c2Ugb2YgdHdvIHJlYXNvbjoKKwkJCSAqCisJCQkgKiAoMSkgVGhlIGRhdGEg YmVmb3JlIHRoZSByZXdyaXRlIGRkbCBjb3VsZCBhbHJlYWR5IGJlIGRpZmZlcmVudCBhbW9uZwor CQkJICogcHVibGlzaGVyIGFuZCBzdWJzY3JpYmVyLiBUbyBtYWtlIHN1cmUgdGhlIGV4dHJhIGRh dGEgaW4gc3Vic2NyaWJlcgorCQkJICogd2hpY2ggZG9lc24ndCBleGlzdCBpbiBwdWJsaXNoZXIg YWxzbyBnZXQgcmV3cml0dGVuLCB3ZSBuZWVkIHRvIGxldAorCQkJICogdGhlIHN1YnNjcmliZXIg ZXhlY3V0ZSB0aGUgb3JpZ2luYWwgcmV3cml0ZSBkZGwgdG8gcmV3cml0ZSBhbGwgdGhlCisJCQkg KiBkYXRhIGF0IGZpcnN0LgorCQkJICoKKwkJCSAqICgyKSB0aGUgZGF0YSBhZnRlciBleGVjdXRp bmcgcmV3cml0ZSBkZGwgY291bGQgYmUgZGlmZmVyZW50IGFtb25nCisJCQkgKiBwdWJsaXNoZXIg YW5kIHN1YnNjcmliZXIoZHVlIHRvIGRpZmZlcmVudCBmdW5jdGlvbnMvb3BlcmF0b3JzIHVzZWQK KwkJCSAqIGR1cmluZyByZXdyaXRlKSwgc28gd2UgbmVlZCB0byByZXBsaWNhdGUgdGhlIHJld3Jp dGUgVVBEQVRFcyB0byBrZWVwCisJCQkgKiB0aGUgZGF0YSBjb25zaXN0ZW50LgorCQkJICoKKwkJ CSAqIFRPIElNUFJPVkU6IFdlIGNvdWxkIGltcHJvdmUgdGhpcyBieSBsZXR0aW5nIHRoZSBzdWJz Y3JpYmVyIG9ubHkKKwkJCSAqIHJld3JpdGUgdGhlIGV4dHJhIGRhdGEgaW5zdGVhZCBvZiBkb2lu ZyBmdWxseSByZXdyaXRlIGFuZCB1c2UgdGhlCisJCQkgKiB1cGNvbWluZyByZXdyaXRlIFVQREFU RXMgdG8gcmV3cml0ZSB0aGUgcmVzdCBkYXRhLiBCZXNpZGVzLCB3ZSBtYXkKKwkJCSAqIG5vdCBu ZWVkIHRvIHNlbmQgcmV3cml0ZSBjaGFuZ2VzIGZvciBhbGwgdHlwZSBvZiByZXdyaXRlIGRkbCwg Zm9yCisJCQkgKiBleGFtcGxlLCBpdCBzZWVtcyBmaW5lIHRvIHNraXAgc2VuZGluZyByZXdyaXRl IGNoYW5nZXMgZm9yIEFMVEVSCisJCQkgKiBUQUJMRSBTRVQgTE9HR0VEIGFzIHRoZSBkYXRhIGlu IHRoZSB0YWJsZSBkb2Vzbid0IGFjdHVhbGx5IGJlCisJCQkgKiBjaGFuZ2VkLgorCQkJICovCisJ CQlyZWxhdGlvbiA9IFJlbGF0aW9uSWRHZXRSZWxhdGlvbihyZWxpZCk7CisJCQlBc3NlcnQocmVs YXRpb24pOworCisJCQlyZWxlbnRyeSA9IGdldF9yZWxfc3luY19lbnRyeShkYXRhLCByZWxhdGlv bik7CisKKwkJCS8qCisJCQkgKiBTa2lwIHNlbmRpbmcgdGhpcyBkZGwgaWYgd2UgZG9uJ3QgcHVi bGlzaCBkZGwgbWVzc2FnZSBvciB0aGUgZGRsCisJCQkgKiBuZWVkIHRvIGJlIHB1Ymxpc2hlZCB2 aWEgaXRzIHJvb3QgcmVsYXRpb24uCisJCQkgKi8KKwkJCWlmICghcmVsZW50cnktPnB1YmFjdGlv bnMucHViZGRsIHx8CisJCQkJcmVsZW50cnktPnB1Ymxpc2hfYXNfcmVsaWQgIT0gcmVsaWQpCisJ CQl7CisJCQkJUmVsYXRpb25DbG9zZShyZWxhdGlvbik7CisJCQkJcmV0dXJuOworCQkJfQorCisJ CQlicmVhazsKKwkJY2FzZSBEQ1RfU2ltcGxlQ21kOgorCQkJcmVsYXRpb24gPSBSZWxhdGlvbklk R2V0UmVsYXRpb24ocmVsaWQpOworCisJCQlpZiAocmVsYXRpb24gPT0gTlVMTCkKKwkJCQlicmVh azsKKworCQkJcmVsZW50cnkgPSBnZXRfcmVsX3N5bmNfZW50cnkoZGF0YSwgcmVsYXRpb24pOwor CisJCQlpZiAoIXJlbGVudHJ5LT5wdWJhY3Rpb25zLnB1YmRkbCkKKwkJCXsKKwkJCQlSZWxhdGlv bkNsb3NlKHJlbGF0aW9uKTsKKwkJCQlyZXR1cm47CisJCQl9CisKKwkJCWJyZWFrOworCQljYXNl IERDVF9PYmplY3REcm9wOgorCQkJLyogZG8gbm90aGluZyAqLworCQkJYnJlYWs7CisJCWRlZmF1 bHQ6CisJCQllbG9nKEVSUk9SLCAidW5zdXBwb3J0ZWQgdHlwZSAlZCIsIGNtZHR5cGUpOworCQkJ YnJlYWs7CisJfQorCisJLyogU2VuZCBCRUdJTiBpZiB3ZSBoYXZlbid0IHlldCAqLworCWlmICh0 eG5kYXRhICYmICF0eG5kYXRhLT5zZW50X2JlZ2luX3R4bikKKwkJcGdvdXRwdXRfc2VuZF9iZWdp bihjdHgsIHR4bik7CisKKwlPdXRwdXRQbHVnaW5QcmVwYXJlV3JpdGUoY3R4LCB0cnVlKTsKKwls b2dpY2FscmVwX3dyaXRlX2RkbG1lc3NhZ2UoY3R4LT5vdXQsCisJCQkJCQkJCXhpZCwKKwkJCQkJ CQkJbWVzc2FnZV9sc24sCisJCQkJCQkJCXByZWZpeCwKKwkJCQkJCQkJc3osCisJCQkJCQkJCW1l c3NhZ2UpOworCU91dHB1dFBsdWdpbldyaXRlKGN0eCwgdHJ1ZSk7CisKKwlpZiAocmVsYXRpb24p CisJCVJlbGF0aW9uQ2xvc2UocmVsYXRpb24pOworfQorCiAvKgogICogUmV0dXJuIHRydWUgaWYg dGhlIGRhdGEgaXMgYXNzb2NpYXRlZCB3aXRoIGFuIG9yaWdpbiBhbmQgdGhlIHVzZXIgaGFzCiAg KiByZXF1ZXN0ZWQgdGhlIGNoYW5nZXMgdGhhdCBkb24ndCBoYXZlIGFuIG9yaWdpbiwgZmFsc2Ug b3RoZXJ3aXNlLgpAQCAtMTk5Myw3ICsyMTY3LDggQEAgZ2V0X3JlbF9zeW5jX2VudHJ5KFBHT3V0 cHV0RGF0YSAqZGF0YSwgUmVsYXRpb24gcmVsYXRpb24pCiAJCWVudHJ5LT5zY2hlbWFfc2VudCA9 IGZhbHNlOwogCQllbnRyeS0+c3RyZWFtZWRfdHhucyA9IE5JTDsKIAkJZW50cnktPnB1YmFjdGlv bnMucHViaW5zZXJ0ID0gZW50cnktPnB1YmFjdGlvbnMucHVidXBkYXRlID0KLQkJCWVudHJ5LT5w dWJhY3Rpb25zLnB1YmRlbGV0ZSA9IGVudHJ5LT5wdWJhY3Rpb25zLnB1YnRydW5jYXRlID0gZmFs c2U7CisJCQllbnRyeS0+cHViYWN0aW9ucy5wdWJkZWxldGUgPSBlbnRyeS0+cHViYWN0aW9ucy5w dWJ0cnVuY2F0ZSA9CisJCQllbnRyeS0+cHViYWN0aW9ucy5wdWJkZGwgPSBmYWxzZTsKIAkJZW50 cnktPm5ld19zbG90ID0gTlVMTDsKIAkJZW50cnktPm9sZF9zbG90ID0gTlVMTDsKIAkJbWVtc2V0 KGVudHJ5LT5leHByc3RhdGUsIDAsIHNpemVvZihlbnRyeS0+ZXhwcnN0YXRlKSk7CkBAIC0yMDUx LDYgKzIyMjYsNyBAQCBnZXRfcmVsX3N5bmNfZW50cnkoUEdPdXRwdXREYXRhICpkYXRhLCBSZWxh dGlvbiByZWxhdGlvbikKIAkJZW50cnktPnB1YmFjdGlvbnMucHVidXBkYXRlID0gZmFsc2U7CiAJ CWVudHJ5LT5wdWJhY3Rpb25zLnB1YmRlbGV0ZSA9IGZhbHNlOwogCQllbnRyeS0+cHViYWN0aW9u cy5wdWJ0cnVuY2F0ZSA9IGZhbHNlOworCQllbnRyeS0+cHViYWN0aW9ucy5wdWJkZGwgPSBmYWxz ZTsKIAogCQkvKgogCQkgKiBUdXBsZSBzbG90cyBjbGVhbnVwcy4gKFdpbGwgYmUgcmVidWlsdCBs YXRlciBpZiBuZWVkZWQpLgpAQCAtMjE2NCw2ICsyMzQwLDcgQEAgZ2V0X3JlbF9zeW5jX2VudHJ5 KFBHT3V0cHV0RGF0YSAqZGF0YSwgUmVsYXRpb24gcmVsYXRpb24pCiAJCQkJZW50cnktPnB1YmFj dGlvbnMucHVidXBkYXRlIHw9IHB1Yi0+cHViYWN0aW9ucy5wdWJ1cGRhdGU7CiAJCQkJZW50cnkt PnB1YmFjdGlvbnMucHViZGVsZXRlIHw9IHB1Yi0+cHViYWN0aW9ucy5wdWJkZWxldGU7CiAJCQkJ ZW50cnktPnB1YmFjdGlvbnMucHVidHJ1bmNhdGUgfD0gcHViLT5wdWJhY3Rpb25zLnB1YnRydW5j YXRlOworCQkJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YmRkbCB8PSBwdWItPnB1YmFjdGlvbnMucHVi ZGRsOwogCiAJCQkJLyoKIAkJCQkgKiBXZSB3YW50IHRvIHB1Ymxpc2ggdGhlIGNoYW5nZXMgYXMg dGhlIHRvcC1tb3N0IGFuY2VzdG9yCkBAIC0yMzQ5LDYgKzI1MjYsNyBAQCByZWxfc3luY19jYWNo ZV9wdWJsaWNhdGlvbl9jYihEYXR1bSBhcmcsIGludCBjYWNoZWlkLCB1aW50MzIgaGFzaHZhbHVl KQogCXsKIAkJZW50cnktPnJlcGxpY2F0ZV92YWxpZCA9IGZhbHNlOwogCX0KKwogfQogCiAvKiBT ZW5kIFJlcGxpY2F0aW9uIG9yaWdpbiAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMv Y2FjaGUvcmVsY2FjaGUuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMKaW5k ZXggMDBkYzBmMjQwMy4uZjFiNGQwOTNjZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMv Y2FjaGUvcmVsY2FjaGUuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5j CkBAIC01NjgzLDYgKzU2ODMsNyBAQCBSZWxhdGlvbkJ1aWxkUHVibGljYXRpb25EZXNjKFJlbGF0 aW9uIHJlbGF0aW9uLCBQdWJsaWNhdGlvbkRlc2MgKnB1YmRlc2MpCiAJCXB1YmRlc2MtPnB1YmFj dGlvbnMucHVidXBkYXRlIHw9IHB1YmZvcm0tPnB1YnVwZGF0ZTsKIAkJcHViZGVzYy0+cHViYWN0 aW9ucy5wdWJkZWxldGUgfD0gcHViZm9ybS0+cHViZGVsZXRlOwogCQlwdWJkZXNjLT5wdWJhY3Rp b25zLnB1YnRydW5jYXRlIHw9IHB1YmZvcm0tPnB1YnRydW5jYXRlOworCQlwdWJkZXNjLT5wdWJh Y3Rpb25zLnB1YmRkbCB8PSBwdWJmb3JtLT5wdWJkZGw7CiAKIAkJLyoKIAkJICogQ2hlY2sgaWYg YWxsIGNvbHVtbnMgcmVmZXJlbmNlZCBpbiB0aGUgZmlsdGVyIGV4cHJlc3Npb24gYXJlIHBhcnQK ZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMgYi9zcmMvYmluL3BnX2R1bXAv cGdfZHVtcC5jCmluZGV4IGY4YzRjYjhkMTguLmZhYjg3Yzc0MTkgMTAwNjQ0Ci0tLSBhL3NyYy9i aW4vcGdfZHVtcC9wZ19kdW1wLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwpAQCAt Mzg5Niw2ICszODk2LDcgQEAgZ2V0UHVibGljYXRpb25zKEFyY2hpdmUgKmZvdXQsIGludCAqbnVt UHVibGljYXRpb25zKQogCWludAkJCWlfcHVidXBkYXRlOwogCWludAkJCWlfcHViZGVsZXRlOwog CWludAkJCWlfcHVidHJ1bmNhdGU7CisJaW50CQkJaV9wdWJkZGw7CiAJaW50CQkJaV9wdWJ2aWFy b290OwogCWludAkJCWksCiAJCQkJbnR1cHM7CkBAIC0zOTExLDIzICszOTEyLDIzIEBAIGdldFB1 YmxpY2F0aW9ucyhBcmNoaXZlICpmb3V0LCBpbnQgKm51bVB1YmxpY2F0aW9ucykKIAlyZXNldFBR RXhwQnVmZmVyKHF1ZXJ5KTsKIAogCS8qIEdldCB0aGUgcHVibGljYXRpb25zLiAqLwotCWlmIChm b3V0LT5yZW1vdGVWZXJzaW9uID49IDEzMDAwMCkKKwlpZiAoZm91dC0+cmVtb3RlVmVyc2lvbiA+ PSAxNTAwMDApCiAJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LAogCQkJCQkJCSAiU0VMRUNU IHAudGFibGVvaWQsIHAub2lkLCBwLnB1Ym5hbWUsICIKIAkJCQkJCQkgInAucHVib3duZXIsICIK LQkJCQkJCQkgInAucHViYWxsdGFibGVzLCBwLnB1Ymluc2VydCwgcC5wdWJ1cGRhdGUsIHAucHVi ZGVsZXRlLCBwLnB1YnRydW5jYXRlLCBwLnB1YnZpYXJvb3QgIgorCQkJCQkJCSAicC5wdWJhbGx0 YWJsZXMsIHAucHViaW5zZXJ0LCBwLnB1YnVwZGF0ZSwgcC5wdWJkZWxldGUsIHAucHVidHJ1bmNh dGUsIHAucHViZGRsLCBwLnB1YnZpYXJvb3QgIgogCQkJCQkJCSAiRlJPTSBwZ19wdWJsaWNhdGlv biBwIik7CiAJZWxzZSBpZiAoZm91dC0+cmVtb3RlVmVyc2lvbiA+PSAxMTAwMDApCiAJCWFwcGVu ZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LAogCQkJCQkJCSAiU0VMRUNUIHAudGFibGVvaWQsIHAub2lk LCBwLnB1Ym5hbWUsICIKIAkJCQkJCQkgInAucHVib3duZXIsICIKLQkJCQkJCQkgInAucHViYWxs dGFibGVzLCBwLnB1Ymluc2VydCwgcC5wdWJ1cGRhdGUsIHAucHViZGVsZXRlLCBwLnB1YnRydW5j YXRlLCBmYWxzZSBBUyBwdWJ2aWFyb290ICIKKwkJCQkJCQkgInAucHViYWxsdGFibGVzLCBwLnB1 Ymluc2VydCwgcC5wdWJ1cGRhdGUsIHAucHViZGVsZXRlLCBwLnB1YnRydW5jYXRlLCBmYWxzZSBh cyBwLnB1YmRkbCwgZmFsc2UgQVMgcHVidmlhcm9vdCAiCiAJCQkJCQkJICJGUk9NIHBnX3B1Ymxp Y2F0aW9uIHAiKTsKIAllbHNlCiAJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LAogCQkJCQkJ CSAiU0VMRUNUIHAudGFibGVvaWQsIHAub2lkLCBwLnB1Ym5hbWUsICIKIAkJCQkJCQkgInAucHVi b3duZXIsICIKLQkJCQkJCQkgInAucHViYWxsdGFibGVzLCBwLnB1Ymluc2VydCwgcC5wdWJ1cGRh dGUsIHAucHViZGVsZXRlLCBmYWxzZSBBUyBwdWJ0cnVuY2F0ZSwgZmFsc2UgQVMgcHVidmlhcm9v dCAiCisJCQkJCQkJICJwLnB1YmFsbHRhYmxlcywgcC5wdWJpbnNlcnQsIHAucHVidXBkYXRlLCBw LnB1YmRlbGV0ZSwgZmFsc2UgQVMgcHVidHJ1bmNhdGUsIGZhbHNlIGFzIHAucHViZGRsLCBmYWxz ZSBBUyBwdWJ2aWFyb290ICIKIAkJCQkJCQkgIkZST00gcGdfcHVibGljYXRpb24gcCIpOwogCiAJ cmVzID0gRXhlY3V0ZVNxbFF1ZXJ5KGZvdXQsIHF1ZXJ5LT5kYXRhLCBQR1JFU19UVVBMRVNfT0sp OwpAQCAtMzk0Myw2ICszOTQ0LDcgQEAgZ2V0UHVibGljYXRpb25zKEFyY2hpdmUgKmZvdXQsIGlu dCAqbnVtUHVibGljYXRpb25zKQogCWlfcHVidXBkYXRlID0gUFFmbnVtYmVyKHJlcywgInB1YnVw ZGF0ZSIpOwogCWlfcHViZGVsZXRlID0gUFFmbnVtYmVyKHJlcywgInB1YmRlbGV0ZSIpOwogCWlf cHVidHJ1bmNhdGUgPSBQUWZudW1iZXIocmVzLCAicHVidHJ1bmNhdGUiKTsKKwlpX3B1YmRkbCA9 IFBRZm51bWJlcihyZXMsICJwdWJkZGwiKTsKIAlpX3B1YnZpYXJvb3QgPSBQUWZudW1iZXIocmVz LCAicHVidmlhcm9vdCIpOwogCiAJcHViaW5mbyA9IHBnX21hbGxvYyhudHVwcyAqIHNpemVvZihQ dWJsaWNhdGlvbkluZm8pKTsKQEAgLTM5NjYsNiArMzk2OCw4IEBAIGdldFB1YmxpY2F0aW9ucyhB cmNoaXZlICpmb3V0LCBpbnQgKm51bVB1YmxpY2F0aW9ucykKIAkJCShzdHJjbXAoUFFnZXR2YWx1 ZShyZXMsIGksIGlfcHViZGVsZXRlKSwgInQiKSA9PSAwKTsKIAkJcHViaW5mb1tpXS5wdWJ0cnVu Y2F0ZSA9CiAJCQkoc3RyY21wKFBRZ2V0dmFsdWUocmVzLCBpLCBpX3B1YnRydW5jYXRlKSwgInQi KSA9PSAwKTsKKwkJcHViaW5mb1tpXS5wdWJkZGwgPQorCQkJKHN0cmNtcChQUWdldHZhbHVlKHJl cywgaSwgaV9wdWJkZGwpLCAidCIpID09IDApOwogCQlwdWJpbmZvW2ldLnB1YnZpYXJvb3QgPQog CQkJKHN0cmNtcChQUWdldHZhbHVlKHJlcywgaSwgaV9wdWJ2aWFyb290KSwgInQiKSA9PSAwKTsK IApAQCAtNDA0NSw2ICs0MDQ5LDE1IEBAIGR1bXBQdWJsaWNhdGlvbihBcmNoaXZlICpmb3V0LCBj b25zdCBQdWJsaWNhdGlvbkluZm8gKnB1YmluZm8pCiAJCWZpcnN0ID0gZmFsc2U7CiAJfQogCisJ aWYgKHB1YmluZm8tPnB1YmRkbCkKKwl7CisJCWlmICghZmlyc3QpCisJCQlhcHBlbmRQUUV4cEJ1 ZmZlclN0cihxdWVyeSwgIiwgIik7CisKKwkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICJk ZGwiKTsKKwkJZmlyc3QgPSBmYWxzZTsKKwl9CisKIAlhcHBlbmRQUUV4cEJ1ZmZlckNoYXIocXVl cnksICdcJycpOwogCiAJaWYgKHB1YmluZm8tPnB1YnZpYXJvb3QpCmRpZmYgLS1naXQgYS9zcmMv YmluL3BnX2R1bXAvcGdfZHVtcC5oIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuaAppbmRleCA0 MjdmNWQ0NWY2Li42ODU2ODNlZWIwIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVt cC5oCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmgKQEAgLTYyMCw2ICs2MjAsNyBAQCB0 eXBlZGVmIHN0cnVjdCBfUHVibGljYXRpb25JbmZvCiAJYm9vbAkJcHViZGVsZXRlOwogCWJvb2wJ CXB1YnRydW5jYXRlOwogCWJvb2wJCXB1YnZpYXJvb3Q7CisJYm9vbAkJcHViZGRsOwogfSBQdWJs aWNhdGlvbkluZm87CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3dhbGR1bXAvcm1ncmRl c2MuYyBiL3NyYy9iaW4vcGdfd2FsZHVtcC9ybWdyZGVzYy5jCmluZGV4IDZiOGMxN2JiNGMuLjc5 MmY0Mzg5NTkgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfd2FsZHVtcC9ybWdyZGVzYy5jCisrKyBi L3NyYy9iaW4vcGdfd2FsZHVtcC9ybWdyZGVzYy5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVk ZSAiY29tbWFuZHMvc2VxdWVuY2UuaCIKICNpbmNsdWRlICJjb21tYW5kcy90YWJsZXNwYWNlLmgi CiAjaW5jbHVkZSAicmVwbGljYXRpb24vbWVzc2FnZS5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9u L2RkbG1lc3NhZ2UuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9vcmlnaW4uaCIKICNpbmNsdWRl ICJybWdyZGVzYy5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc3RhbmRieWRlZnMuaCIKZGlmZiAtLWdp dCBhL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jIGIvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMKaW5k ZXggYzY0NWQ2NjQxOC4uMmU5NGZjYTc0NCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wc3FsL2Rlc2Ny aWJlLmMKKysrIGIvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMKQEAgLTYxNTksNyArNjE1OSw3IEBA IGxpc3RQdWJsaWNhdGlvbnMoY29uc3QgY2hhciAqcGF0dGVybikKIAlQUUV4cEJ1ZmZlckRhdGEg YnVmOwogCVBHcmVzdWx0ICAgKnJlczsKIAlwcmludFF1ZXJ5T3B0IG15b3B0ID0gcHNldC5wb3B0 OwotCXN0YXRpYyBjb25zdCBib29sIHRyYW5zbGF0ZV9jb2x1bW5zW10gPSB7ZmFsc2UsIGZhbHNl LCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlfTsKKwlzdGF0aWMgY29u c3QgYm9vbCB0cmFuc2xhdGVfY29sdW1uc1tdID0ge2ZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNl LCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2V9OwogCiAJaWYgKHBzZXQuc3ZlcnNp b24gPCAxMDAwMDApCiAJewpAQCAtNjE5NCw2ICs2MTk0LDEwIEBAIGxpc3RQdWJsaWNhdGlvbnMo Y29uc3QgY2hhciAqcGF0dGVybikKIAkJYXBwZW5kUFFFeHBCdWZmZXIoJmJ1ZiwKIAkJCQkJCSAg IixcbiAgcHVidmlhcm9vdCBBUyBcIiVzXCIiLAogCQkJCQkJICBnZXR0ZXh0X25vb3AoIlZpYSBy b290IikpOworCWlmIChwc2V0LnN2ZXJzaW9uID49IDE0MDAwMCkKKwkJYXBwZW5kUFFFeHBCdWZm ZXIoJmJ1ZiwKKwkJCQkJCSAgIixcbiAgcHViZGRsIEFTIFwiJXNcIiIsCisJCQkJCQkgIGdldHRl eHRfbm9vcCgiRERMcyIpKTsKIAogCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZidWYsCiAJCQkJCQkg IlxuRlJPTSBwZ19jYXRhbG9nLnBnX3B1YmxpY2F0aW9uXG4iKTsKQEAgLTYyODQsNiArNjI4OCw3 IEBAIGRlc2NyaWJlUHVibGljYXRpb25zKGNvbnN0IGNoYXIgKnBhdHRlcm4pCiAJUEdyZXN1bHQg ICAqcmVzOwogCWJvb2wJCWhhc19wdWJ0cnVuY2F0ZTsKIAlib29sCQloYXNfcHVidmlhcm9vdDsK Kwlib29sCQloYXNfcHViZGRsOwogCiAJUFFFeHBCdWZmZXJEYXRhIHRpdGxlOwogCXByaW50VGFi bGVDb250ZW50IGNvbnQ7CkBAIC02MzAwLDYgKzYzMDUsNyBAQCBkZXNjcmliZVB1YmxpY2F0aW9u cyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCiAJaGFzX3B1YnRydW5jYXRlID0gKHBzZXQuc3ZlcnNp b24gPj0gMTEwMDAwKTsKIAloYXNfcHVidmlhcm9vdCA9IChwc2V0LnN2ZXJzaW9uID49IDEzMDAw MCk7CisJaGFzX3B1YmRkbCA9ICAocHNldC5zdmVyc2lvbiA+PSAxNTAwMDApOwogCiAJaW5pdFBR RXhwQnVmZmVyKCZidWYpOwogCkBAIC02MzEzLDYgKzYzMTksOSBAQCBkZXNjcmliZVB1YmxpY2F0 aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCWlmIChoYXNfcHVidmlhcm9vdCkKIAkJYXBwZW5k UFFFeHBCdWZmZXJTdHIoJmJ1ZiwKIAkJCQkJCQkgIiwgcHVidmlhcm9vdCIpOworCWlmIChoYXNf cHViZGRsKQorCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmYnVmLAorCQkJCQkJCSAiLCBwdWJkZGwi KTsKIAlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmYnVmLAogCQkJCQkJICJcbkZST00gcGdfY2F0YWxv Zy5wZ19wdWJsaWNhdGlvblxuIik7CiAKQEAgLTYzNjQsNiArNjM3Myw4IEBAIGRlc2NyaWJlUHVi bGljYXRpb25zKGNvbnN0IGNoYXIgKnBhdHRlcm4pCiAJCQluY29scysrOwogCQlpZiAoaGFzX3B1 YnZpYXJvb3QpCiAJCQluY29scysrOworCQlpZiAoaGFzX3B1YmRkbCkKKwkJCW5jb2xzKys7CiAK IAkJaW5pdFBRRXhwQnVmZmVyKCZ0aXRsZSk7CiAJCXByaW50ZlBRRXhwQnVmZmVyKCZ0aXRsZSwg XygiUHVibGljYXRpb24gJXMiKSwgcHVibmFtZSk7CkBAIC02Mzc4LDYgKzYzODksOCBAQCBkZXNj cmliZVB1YmxpY2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCQkJcHJpbnRUYWJsZUFkZEhl YWRlcigmY29udCwgZ2V0dGV4dF9ub29wKCJUcnVuY2F0ZXMiKSwgdHJ1ZSwgYWxpZ24pOwogCQlp ZiAoaGFzX3B1YnZpYXJvb3QpCiAJCQlwcmludFRhYmxlQWRkSGVhZGVyKCZjb250LCBnZXR0ZXh0 X25vb3AoIlZpYSByb290IiksIHRydWUsIGFsaWduKTsKKwkJaWYgKGhhc19wdWJkZGwpCisJCQlw cmludFRhYmxlQWRkSGVhZGVyKCZjb250LCBnZXR0ZXh0X25vb3AoIkRETHMiKSwgdHJ1ZSwgYWxp Z24pOwogCiAJCXByaW50VGFibGVBZGRDZWxsKCZjb250LCBQUWdldHZhbHVlKHJlcywgaSwgMiks IGZhbHNlLCBmYWxzZSk7CiAJCXByaW50VGFibGVBZGRDZWxsKCZjb250LCBQUWdldHZhbHVlKHJl cywgaSwgMyksIGZhbHNlLCBmYWxzZSk7CkBAIC02Mzg4LDYgKzY0MDEsOCBAQCBkZXNjcmliZVB1 YmxpY2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCQkJcHJpbnRUYWJsZUFkZENlbGwoJmNv bnQsIFBRZ2V0dmFsdWUocmVzLCBpLCA3KSwgZmFsc2UsIGZhbHNlKTsKIAkJaWYgKGhhc19wdWJ2 aWFyb290KQogCQkJcHJpbnRUYWJsZUFkZENlbGwoJmNvbnQsIFBRZ2V0dmFsdWUocmVzLCBpLCA4 KSwgZmFsc2UsIGZhbHNlKTsKKwkJaWYgKGhhc19wdWJkZGwpCisJCQlwcmludFRhYmxlQWRkQ2Vs bCgmY29udCwgUFFnZXR2YWx1ZShyZXMsIGksIDkpLCBmYWxzZSwgZmFsc2UpOwogCiAJCWlmICgh cHViYWxsdGFibGVzKQogCQl7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3Mvcm1ncmxp c3QuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9ybWdybGlzdC5oCmluZGV4IDAwMGJjYmZkYWYuLjM3 ZGZkNDUxZjYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9ybWdybGlzdC5oCisrKyBi L3NyYy9pbmNsdWRlL2FjY2Vzcy9ybWdybGlzdC5oCkBAIC00NywzICs0Nyw0IEBAIFBHX1JNR1Io Uk1fQ09NTUlUX1RTX0lELCAiQ29tbWl0VHMiLCBjb21taXRfdHNfcmVkbywgY29tbWl0X3RzX2Rl c2MsIGNvbW1pdF90c19pCiBQR19STUdSKFJNX1JFUExPUklHSU5fSUQsICJSZXBsaWNhdGlvbk9y aWdpbiIsIHJlcGxvcmlnaW5fcmVkbywgcmVwbG9yaWdpbl9kZXNjLCByZXBsb3JpZ2luX2lkZW50 aWZ5LCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKQogUEdfUk1HUihSTV9HRU5FUklDX0lELCAiR2Vu ZXJpYyIsIGdlbmVyaWNfcmVkbywgZ2VuZXJpY19kZXNjLCBnZW5lcmljX2lkZW50aWZ5LCBOVUxM LCBOVUxMLCBnZW5lcmljX21hc2ssIE5VTEwpCiBQR19STUdSKFJNX0xPR0lDQUxNU0dfSUQsICJM b2dpY2FsTWVzc2FnZSIsIGxvZ2ljYWxtc2dfcmVkbywgbG9naWNhbG1zZ19kZXNjLCBsb2dpY2Fs bXNnX2lkZW50aWZ5LCBOVUxMLCBOVUxMLCBOVUxMLCBsb2dpY2FsbXNnX2RlY29kZSkKK1BHX1JN R1IoUk1fTE9HSUNBTERETE1TR19JRCwgIkxvZ2ljYWxERExNZXNzYWdlIiwgbG9naWNhbGRkbG1z Z19yZWRvLCBsb2dpY2FsZGRsbXNnX2Rlc2MsIGxvZ2ljYWxkZGxtc2dfaWRlbnRpZnksIE5VTEws IE5VTEwsIE5VTEwsIGxvZ2ljYWxkZGxtc2dfZGVjb2RlKQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQK aW5kZXggMGJmYWViOTY1ZC4uMmZiMzY1NGE2NCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0 YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CkBA IC0xMTgyNiw0ICsxMTgyNiwxMyBAQAogeyBvaWQgPT4gJzQ2NDMnLCBkZXNjciA9PiAnZXhwYW5k IGpzb24gZm9ybWF0IERETCB0byBhIHBsYWluIERETCBjb21tYW5kJywKICAgcHJvbmFtZSA9PiAn ZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQnLCBwcm9yZXR0eXBlID0+ICd0ZXh0JywKICAgcHJv YXJndHlwZXMgPT4gJ3RleHQnLCBwcm9zcmMgPT4gJ2RkbF9kZXBhcnNlX2V4cGFuZF9jb21tYW5k JyB9LAoreyBvaWQgPT4gJzQ2NDQnLCBkZXNjciA9PiAndHJpZ2dlciBmb3IgZGRsIGNvbW1hbmQg ZGVwYXJzZScsCisgIHByb25hbWUgPT4gJ3B1YmxpY2F0aW9uX2RlcGFyc2VfZGRsX2NvbW1hbmRf ZW5kJywgcHJvcmV0dHlwZSA9PiAnZXZlbnRfdHJpZ2dlcicsCisgIHByb2FyZ3R5cGVzID0+ICcn LCBwcm9zcmMgPT4gJ3B1YmxpY2F0aW9uX2RlcGFyc2VfZGRsX2NvbW1hbmRfZW5kJyB9LAoreyBv aWQgPT4gJzQ2NDUnLCBkZXNjciA9PiAndHJpZ2dlciBmb3IgZGRsIGNvbW1hbmQgZGVwYXJzZSBz dGFydCcsCisgIHByb25hbWUgPT4gJ3B1YmxpY2F0aW9uX2RlcGFyc2VfZGRsX2NvbW1hbmRfc3Rh cnQnLCBwcm9yZXR0eXBlID0+ICdldmVudF90cmlnZ2VyJywKKyAgcHJvYXJndHlwZXMgPT4gJycs IHByb3NyYyA9PiAncHVibGljYXRpb25fZGVwYXJzZV9kZGxfY29tbWFuZF9zdGFydCcgfSwKK3sg b2lkID0+ICc0NjQ2JywgZGVzY3IgPT4gJ3RyaWdnZXIgZm9yIGRkbCBjb21tYW5kIGRlcGFyc2Ug dGFibGUgcmV3cml0ZScsCisgIHByb25hbWUgPT4gJ3B1YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVf cmV3cml0ZScsIHByb3JldHR5cGUgPT4gJ2V2ZW50X3RyaWdnZXInLAorICBwcm9hcmd0eXBlcyA9 PiAnJywgcHJvc3JjID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxlX3Jld3JpdGUnIH0sCiBd CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmggYi9zcmMv aW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmgKaW5kZXggZWNmNWEyOGUwMC4uZGFmZDQ4 Mzc2YSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oCisr KyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb24uaApAQCAtNTQsNiArNTQsOSBA QCBDQVRBTE9HKHBnX3B1YmxpY2F0aW9uLDYxMDQsUHVibGljYXRpb25SZWxhdGlvbklkKQogCiAJ LyogdHJ1ZSBpZiBwYXJ0aXRpb24gY2hhbmdlcyBhcmUgcHVibGlzaGVkIHVzaW5nIHJvb3Qgc2No ZW1hICovCiAJYm9vbAkJcHVidmlhcm9vdDsKKworCS8qIHRydWUgaWYgdGFibGUgY3JlYXRpb25z IGFyZSBwdWJsaXNoZWQgKi8KKwlib29sCQlwdWJkZGw7CiB9IEZvcm1EYXRhX3BnX3B1YmxpY2F0 aW9uOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tCkBAIC03Miw2ICs3NSw3IEBAIHR5cGVkZWYgc3Ry dWN0IFB1YmxpY2F0aW9uQWN0aW9ucwogCWJvb2wJCXB1YnVwZGF0ZTsKIAlib29sCQlwdWJkZWxl dGU7CiAJYm9vbAkJcHVidHJ1bmNhdGU7CisJYm9vbAkJcHViZGRsOwogfSBQdWJsaWNhdGlvbkFj dGlvbnM7CiAKIHR5cGVkZWYgc3RydWN0IFB1YmxpY2F0aW9uRGVzYwpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMv ZXZlbnRfdHJpZ2dlci5oCmluZGV4IDEwMDkxYzNhYWYuLmZkMmVlN2ZmZTQgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaAorKysgYi9zcmMvaW5jbHVkZS9j b21tYW5kcy9ldmVudF90cmlnZ2VyLmgKQEAgLTcxLDcgKzcxLDggQEAgZXh0ZXJuIHZvaWQgRXZl bnRUcmlnZ2VyQ29sbGVjdFNpbXBsZUNvbW1hbmQoT2JqZWN0QWRkcmVzcyBhZGRyZXNzLAogZXh0 ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyQWx0ZXJUYWJsZVN0YXJ0KE5vZGUgKnBhcnNldHJlZSk7CiBl eHRlcm4gdm9pZCBFdmVudFRyaWdnZXJBbHRlclRhYmxlUmVsaWQoT2lkIG9iamVjdElkKTsKIGV4 dGVybiB2b2lkIEV2ZW50VHJpZ2dlckNvbGxlY3RBbHRlclRhYmxlU3ViY21kKE5vZGUgKnN1YmNt ZCwKLQkJCQkJCQkJCQkJCU9iamVjdEFkZHJlc3MgYWRkcmVzcyk7CisJCQkJCQkJCQkJCQlPYmpl Y3RBZGRyZXNzIGFkZHJlc3MsCisJCQkJCQkJCQkJCQlib29sIHJld3JpdGUpOwogZXh0ZXJuIHZv aWQgRXZlbnRUcmlnZ2VyQWx0ZXJUYWJsZUVuZCh2b2lkKTsKIAogZXh0ZXJuIHZvaWQgRXZlbnRU cmlnZ2VyQ29sbGVjdEdyYW50KEludGVybmFsR3JhbnQgKmlzdG10KTsKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0 aW9uL2RkbG1lc3NhZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5h OGRjYTg2M2I1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGRs bWVzc2FnZS5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogZGRsbWVz c2FnZS5oCisgKgkgICBFeHBvcnRzIGZyb20gcmVwbGljYXRpb24vbG9naWNhbC9kZGxtZXNzYWdl LmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3Bt ZW50IEdyb3VwCisgKgorICogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGRsbWVzc2FnZS5oCisg Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBQR19MT0dJQ0FMX0RETF9NRVNTQUdFX0gK KyNkZWZpbmUgUEdfTE9HSUNBTF9ERExfTUVTU0FHRV9ICisKKyNpbmNsdWRlICJhY2Nlc3MveGxv Zy5oIgorI2luY2x1ZGUgImFjY2Vzcy94bG9nZGVmcy5oIgorI2luY2x1ZGUgImFjY2Vzcy94bG9n cmVhZGVyLmgiCisjaW5jbHVkZSAibm9kZXMvbm9kZXMuaCIKKworCisvKgorICogU3VwcG9ydCBm b3Iga2VlcGluZyB0cmFjayBvZiBkZXBhcnNlZCBjb21tYW5kcy4KKyAqLwordHlwZWRlZiBlbnVt IERlcGFyc2VkQ29tbWFuZFR5cGUKK3sKKwlEQ1RfU2ltcGxlQ21kLAorCURDVF9UYWJsZURyb3BT dGFydCwKKwlEQ1RfVGFibGVEcm9wRW5kLAorCURDVF9UYWJsZUFsdGVyLAorCURDVF9PYmplY3RD cmVhdGUsCisJRENUX09iamVjdERyb3AKK30gRGVwYXJzZWRDb21tYW5kVHlwZTsKKworLyoKKyAq IEdlbmVyaWMgbG9naWNhbCBkZWNvZGluZyBEREwgbWVzc2FnZSB3YWwgcmVjb3JkLgorICovCit0 eXBlZGVmIHN0cnVjdCB4bF9sb2dpY2FsX2RkbF9tZXNzYWdlCit7CisJT2lkCQkJCQkJZGJJZDsJ CQkvKiBkYXRhYmFzZSBPaWQgZW1pdHRlZCBmcm9tICovCisJU2l6ZQkJCQkJcHJlZml4X3NpemU7 CS8qIGxlbmd0aCBvZiBwcmVmaXggKi8KKwlPaWQJCQkJCQlyZWxpZDsJCQkvKiBpZCBvZiB0aGUg dGFibGUgKi8KKwlEZXBhcnNlZENvbW1hbmRUeXBlCQljbWR0eXBlOwkJLyogdHlwZSBvZiBzcWwg Y29tbWFuZCAqLworCVNpemUJCQkJCW1lc3NhZ2Vfc2l6ZTsJICAvKiBzaXplIG9mIHRoZSBtZXNz YWdlICovCisKKwkvKgorCSAqIHBheWxvYWQsIGluY2x1ZGluZyBudWxsLXRlcm1pbmF0ZWQgcHJl Zml4IG9mIGxlbmd0aCBwcmVmaXhfc2l6ZQorCSAqLworCWNoYXIJCW1lc3NhZ2VbRkxFWElCTEVf QVJSQVlfTUVNQkVSXTsKK30geGxfbG9naWNhbF9kZGxfbWVzc2FnZTsKKworI2RlZmluZSBTaXpl T2ZMb2dpY2FsRERMTWVzc2FnZQkob2Zmc2V0b2YoeGxfbG9naWNhbF9kZGxfbWVzc2FnZSwgbWVz c2FnZSkpCisKK2V4dGVybiBYTG9nUmVjUHRyIExvZ0xvZ2ljYWxERExNZXNzYWdlKGNvbnN0IGNo YXIgKnByZWZpeCwgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJ CQkJCQkgICBjb25zdCBjaGFyICpkZGxfbWVzc2FnZSwgc2l6ZV90IHNpemUpOworCisvKiBSTUdS IEFQSSovCisjZGVmaW5lIFhMT0dfTE9HSUNBTF9ERExfTUVTU0FHRQkweDAwCit2b2lkCQlsb2dp Y2FsZGRsbXNnX3JlZG8oWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpOwordm9pZAkJbG9naWNhbGRk bG1zZ19kZXNjKFN0cmluZ0luZm8gYnVmLCBYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCk7Citjb25z dCBjaGFyICpsb2dpY2FsZGRsbXNnX2lkZW50aWZ5KHVpbnQ4IGluZm8pOworCisjZW5kaWYKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RlY29kZS5oIGIvc3JjL2luY2x1ZGUv cmVwbGljYXRpb24vZGVjb2RlLmgKaW5kZXggNzQxYmY2NWNmNy4uNDI3YTdiOTk3ZCAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGVjb2RlLmgKKysrIGIvc3JjL2luY2x1ZGUv cmVwbGljYXRpb24vZGVjb2RlLmgKQEAgLTI3LDYgKzI3LDcgQEAgZXh0ZXJuIHZvaWQgaGVhcDJf ZGVjb2RlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVm KTsKIGV4dGVybiB2b2lkIHhhY3RfZGVjb2RlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwg WExvZ1JlY29yZEJ1ZmZlciAqYnVmKTsKIGV4dGVybiB2b2lkIHN0YW5kYnlfZGVjb2RlKExvZ2lj YWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVmKTsKIGV4dGVybiB2 b2lkIGxvZ2ljYWxtc2dfZGVjb2RlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1Jl Y29yZEJ1ZmZlciAqYnVmKTsKK2V4dGVybiB2b2lkIGxvZ2ljYWxkZGxtc2dfZGVjb2RlKExvZ2lj YWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVmKTsKIAogZXh0ZXJu IHZvaWQgTG9naWNhbERlY29kaW5nUHJvY2Vzc1JlY29yZChMb2dpY2FsRGVjb2RpbmdDb250ZXh0 ICpjdHgsCiAJCQkJCQkJCQkJIFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKTsKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90by5oIGIvc3JjL2luY2x1ZGUvcmVw bGljYXRpb24vbG9naWNhbHByb3RvLmgKaW5kZXggN2VhYTRjOTdlZC4uNWQ2MTc0ODRmYiAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3RvLmgKKysrIGIvc3Jj L2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3RvLmgKQEAgLTYxLDYgKzYxLDcgQEAgdHlw ZWRlZiBlbnVtIExvZ2ljYWxSZXBNc2dUeXBlCiAJTE9HSUNBTF9SRVBfTVNHX1JFTEFUSU9OID0g J1InLAogCUxPR0lDQUxfUkVQX01TR19UWVBFID0gJ1knLAogCUxPR0lDQUxfUkVQX01TR19NRVNT QUdFID0gJ00nLAorCUxPR0lDQUxfUkVQX01TR19ERExNRVNTQUdFID0gJ0wnLAogCUxPR0lDQUxf UkVQX01TR19CRUdJTl9QUkVQQVJFID0gJ2InLAogCUxPR0lDQUxfUkVQX01TR19QUkVQQVJFID0g J1AnLAogCUxPR0lDQUxfUkVQX01TR19DT01NSVRfUFJFUEFSRUQgPSAnSycsCkBAIC0yMjksNyAr MjMwLDExIEBAIGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd3JpdGVfdHJ1bmNhdGUoU3RyaW5nSW5m byBvdXQsIFRyYW5zYWN0aW9uSWQgeGlkLAogZXh0ZXJuIExpc3QgKmxvZ2ljYWxyZXBfcmVhZF90 cnVuY2F0ZShTdHJpbmdJbmZvIGluLAogCQkJCQkJCQkJICBib29sICpjYXNjYWRlLCBib29sICpy ZXN0YXJ0X3NlcXMpOwogZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF93cml0ZV9tZXNzYWdlKFN0cmlu Z0luZm8gb3V0LCBUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24sCi0JCQkJCQkJCQkg Ym9vbCB0cmFuc2FjdGlvbmFsLCBjb25zdCBjaGFyICpwcmVmaXgsIFNpemUgc3osIGNvbnN0IGNo YXIgKm1lc3NhZ2UpOworCQkJCQkJCQkJIGJvb2wgdHJhbnNhY3Rpb25hbCwgY29uc3QgY2hhciAq cHJlZml4LAorCQkJCQkJCQkJIFNpemUgc3osIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworZXh0ZXJu IHZvaWQgbG9naWNhbHJlcF93cml0ZV9kZGxtZXNzYWdlKFN0cmluZ0luZm8gb3V0LCBUcmFuc2Fj dGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24sCisJCQkJCQkJCQkJY29uc3QgY2hhciAqcHJlZml4 LCBTaXplIHN6LCBjb25zdCBjaGFyICptZXNzYWdlKTsKK2V4dGVybiBjaGFyICpsb2dpY2FscmVw X3JlYWRfZGRsbWVzc2FnZShTdHJpbmdJbmZvIGluLCBYTG9nUmVjUHRyICpsc24sIGNvbnN0IGNo YXIgKipwcmVmaXgsIFNpemUgKnN6KTsKIGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd3JpdGVfcmVs KFN0cmluZ0luZm8gb3V0LCBUcmFuc2FjdGlvbklkIHhpZCwKIAkJCQkJCQkJIFJlbGF0aW9uIHJl bCwgQml0bWFwc2V0ICpjb2x1bW5zKTsKIGV4dGVybiBMb2dpY2FsUmVwUmVsYXRpb24gKmxvZ2lj YWxyZXBfcmVhZF9yZWwoU3RyaW5nSW5mbyBpbik7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9y ZXBsaWNhdGlvbi9vdXRwdXRfcGx1Z2luLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9vdXRw dXRfcGx1Z2luLmgKaW5kZXggYjdkMjhkNzA0NS4uNzYzZTQzZjZiZSAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvcmVwbGljYXRpb24vb3V0cHV0X3BsdWdpbi5oCisrKyBiL3NyYy9pbmNsdWRlL3Jl cGxpY2F0aW9uL291dHB1dF9wbHVnaW4uaApAQCAtOTAsNiArOTAsMTggQEAgdHlwZWRlZiB2b2lk ICgqTG9naWNhbERlY29kZU1lc3NhZ2VDQikgKHN0cnVjdCBMb2dpY2FsRGVjb2RpbmdDb250ZXh0 ICpjdHgsCiAJCQkJCQkJCQkJU2l6ZSBtZXNzYWdlX3NpemUsCiAJCQkJCQkJCQkJY29uc3QgY2hh ciAqbWVzc2FnZSk7CiAKKy8qCisgKiBDYWxsZWQgZm9yIHRoZSBsb2dpY2FsIGRlY29kaW5nIERE TCBtZXNzYWdlcy4KKyAqLwordHlwZWRlZiB2b2lkICgqTG9naWNhbERlY29kZURETE1lc3NhZ2VD QikgKHN0cnVjdCBMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCisJCQkJCQkJCQkJICAgUmVv cmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQkJCQkJCSAgIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24s CisJCQkJCQkJCQkJICAgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCQkJCQkJCSAgIE9pZCByZWxp ZCwKKwkJCQkJCQkJCQkgICBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJCQkJ ICAgU2l6ZSBtZXNzYWdlX3NpemUsCisJCQkJCQkJCQkJICAgY29uc3QgY2hhciAqbWVzc2FnZSk7 CisKIC8qCiAgKiBGaWx0ZXIgY2hhbmdlcyBieSBvcmlnaW4uCiAgKi8KQEAgLTIwMSw2ICsyMTMs MTkgQEAgdHlwZWRlZiB2b2lkICgqTG9naWNhbERlY29kZVN0cmVhbU1lc3NhZ2VDQikgKHN0cnVj dCBMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgKIAkJCQkJCQkJCQkJICBTaXplIG1lc3NhZ2Vf c2l6ZSwKIAkJCQkJCQkJCQkJICBjb25zdCBjaGFyICptZXNzYWdlKTsKIAorLyoKKyAqIENhbGxi YWNrIGZvciBzdHJlYW1pbmcgbG9naWNhbCBkZWNvZGluZyBEREwgbWVzc2FnZXMgZnJvbSBpbi1w cm9ncmVzcworICogdHJhbnNhY3Rpb25zLgorICovCit0eXBlZGVmIHZvaWQgKCpMb2dpY2FsRGVj b2RlU3RyZWFtRERMTWVzc2FnZUNCKSAoc3RydWN0IExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0 eCwKKwkJCQkJCQkJCQkJCSBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJCQkJCQkgWExv Z1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJCQkJCQkJCSBjb25zdCBjaGFyICpwcmVmaXgsCisJ CQkJCQkJCQkJCQkgT2lkIHJlbGlkLAorCQkJCQkJCQkJCQkJIERlcGFyc2VkQ29tbWFuZFR5cGUg Y21kdHlwZSwKKwkJCQkJCQkJCQkJCSBTaXplIG1lc3NhZ2Vfc2l6ZSwKKwkJCQkJCQkJCQkJCSBj b25zdCBjaGFyICptZXNzYWdlKTsKKwogLyoKICAqIENhbGxiYWNrIGZvciBzdHJlYW1pbmcgdHJ1 bmNhdGVzIGZyb20gaW4tcHJvZ3Jlc3MgdHJhbnNhY3Rpb25zLgogICovCkBAIC0yMjEsNiArMjQ2 LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgT3V0cHV0UGx1Z2luQ2FsbGJhY2tzCiAJTG9naWNhbERlY29k ZVRydW5jYXRlQ0IgdHJ1bmNhdGVfY2I7CiAJTG9naWNhbERlY29kZUNvbW1pdENCIGNvbW1pdF9j YjsKIAlMb2dpY2FsRGVjb2RlTWVzc2FnZUNCIG1lc3NhZ2VfY2I7CisJTG9naWNhbERlY29kZURE TE1lc3NhZ2VDQiBkZGxtZXNzYWdlX2NiOwogCUxvZ2ljYWxEZWNvZGVGaWx0ZXJCeU9yaWdpbkNC IGZpbHRlcl9ieV9vcmlnaW5fY2I7CiAJTG9naWNhbERlY29kZVNodXRkb3duQ0Igc2h1dGRvd25f Y2I7CiAKQEAgLTIzOSw2ICsyNjUsNyBAQCB0eXBlZGVmIHN0cnVjdCBPdXRwdXRQbHVnaW5DYWxs YmFja3MKIAlMb2dpY2FsRGVjb2RlU3RyZWFtQ29tbWl0Q0Igc3RyZWFtX2NvbW1pdF9jYjsKIAlM b2dpY2FsRGVjb2RlU3RyZWFtQ2hhbmdlQ0Igc3RyZWFtX2NoYW5nZV9jYjsKIAlMb2dpY2FsRGVj b2RlU3RyZWFtTWVzc2FnZUNCIHN0cmVhbV9tZXNzYWdlX2NiOworCUxvZ2ljYWxEZWNvZGVTdHJl YW1ERExNZXNzYWdlQ0Igc3RyZWFtX2RkbG1lc3NhZ2VfY2I7CiAJTG9naWNhbERlY29kZVN0cmVh bVRydW5jYXRlQ0Igc3RyZWFtX3RydW5jYXRlX2NiOwogfSBPdXRwdXRQbHVnaW5DYWxsYmFja3M7 CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Bnb3V0cHV0LmggYi9zcmMv aW5jbHVkZS9yZXBsaWNhdGlvbi9wZ291dHB1dC5oCmluZGV4IDAyMDI3NTUwZTIuLjgzZTBiMWUy ZTUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Bnb3V0cHV0LmgKKysrIGIv c3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcGdvdXRwdXQuaApAQCAtMjUsNiArMjUsNyBAQCB0eXBl ZGVmIHN0cnVjdCBQR091dHB1dERhdGEKIAl1aW50MzIJCXByb3RvY29sX3ZlcnNpb247CiAJTGlz dAkgICAqcHVibGljYXRpb25fbmFtZXM7CiAJTGlzdAkgICAqcHVibGljYXRpb25zOworCUxpc3QJ ICAgKmRlbGV0ZWRfcmVsaWRzOwogCWJvb2wJCWJpbmFyeTsKIAlib29sCQlzdHJlYW1pbmc7CiAJ Ym9vbAkJbWVzc2FnZXM7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9yZW9y ZGVyYnVmZmVyLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9yZW9yZGVyYnVmZmVyLmgKaW5k ZXggMDJiNTlhMTkzMS4uMGIxYTkxNjFjNSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGlj YXRpb24vcmVvcmRlcmJ1ZmZlci5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Jlb3Jk ZXJidWZmZXIuaApAQCAtMTEsNiArMTEsOCBAQAogCiAjaW5jbHVkZSAiYWNjZXNzL2h0dXBfZGV0 YWlscy5oIgogI2luY2x1ZGUgImxpYi9pbGlzdC5oIgorI2luY2x1ZGUgIm5vZGVzL25vZGVzLmgi CisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgogI2luY2x1ZGUgInN0b3JhZ2Uv c2ludmFsLmgiCiAjaW5jbHVkZSAidXRpbHMvaHNlYXJjaC5oIgogI2luY2x1ZGUgInV0aWxzL3Jl bGNhY2hlLmgiCkBAIC01Niw2ICs1OCw3IEBAIHR5cGVkZWYgZW51bSBSZW9yZGVyQnVmZmVyQ2hh bmdlVHlwZQogCVJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlNFUlQsCiAJUkVPUkRFUl9CVUZGRVJf Q0hBTkdFX1VQREFURSwKIAlSRU9SREVSX0JVRkZFUl9DSEFOR0VfREVMRVRFLAorCVJFT1JERVJf QlVGRkVSX0NIQU5HRV9ERExNRVNTQUdFLAogCVJFT1JERVJfQlVGRkVSX0NIQU5HRV9NRVNTQUdF LAogCVJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlZBTElEQVRJT04sCiAJUkVPUkRFUl9CVUZGRVJf Q0hBTkdFX0lOVEVSTkFMX1NOQVBTSE9ULApAQCAtMTMwLDYgKzEzMywxNiBAQCB0eXBlZGVmIHN0 cnVjdCBSZW9yZGVyQnVmZmVyQ2hhbmdlCiAJCQljaGFyCSAgICptZXNzYWdlOwogCQl9CQkJbXNn OwogCisJCS8qIERETCBNZXNzYWdlLiAqLworCQlzdHJ1Y3QKKwkJeworCQkJY2hhcgkgICAqcHJl Zml4OworCQkJU2l6ZQkJbWVzc2FnZV9zaXplOworCQkJY2hhcgkgICAqbWVzc2FnZTsKKwkJCU9p ZAkJCXJlbGlkOworCQkJRGVwYXJzZWRDb21tYW5kVHlwZQljbWR0eXBlOworCQl9CQkJZGRsbXNn OworCiAJCS8qIE5ldyBzbmFwc2hvdCwgc2V0IHdoZW4gYWN0aW9uID09ICpfSU5URVJOQUxfU05B UFNIT1QgKi8KIAkJU25hcHNob3QJc25hcHNob3Q7CiAKQEAgLTQzNSw2ICs0NDgsMTYgQEAgdHlw ZWRlZiB2b2lkICgqUmVvcmRlckJ1ZmZlck1lc3NhZ2VDQikgKFJlb3JkZXJCdWZmZXIgKnJiLAog CQkJCQkJCQkJCWNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBzeiwKIAkJCQkJCQkJCQljb25zdCBj aGFyICptZXNzYWdlKTsKIAorLyogRERMIG1lc3NhZ2UgY2FsbGJhY2sgc2lnbmF0dXJlICovCit0 eXBlZGVmIHZvaWQgKCpSZW9yZGVyQnVmZmVyRERMTWVzc2FnZUNCKSAoUmVvcmRlckJ1ZmZlciAq cmIsCisJCQkJCQkJCQkJICAgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQkJCQkJCSAgIFhM b2dSZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJCQkJCQkJICAgY29uc3QgY2hhciAqcHJlZml4LAor CQkJCQkJCQkJCSAgIE9pZCByZWxpZCwKKwkJCQkJCQkJCQkgICBEZXBhcnNlZENvbW1hbmRUeXBl IGNtZHR5cGUsCisJCQkJCQkJCQkJICAgU2l6ZSBzeiwKKwkJCQkJCQkJCQkgICBjb25zdCBjaGFy ICptZXNzYWdlKTsKKwogLyogYmVnaW4gcHJlcGFyZSBjYWxsYmFjayBzaWduYXR1cmUgKi8KIHR5 cGVkZWYgdm9pZCAoKlJlb3JkZXJCdWZmZXJCZWdpblByZXBhcmVDQikgKFJlb3JkZXJCdWZmZXIg KnJiLAogCQkJCQkJCQkJCQkgUmVvcmRlckJ1ZmZlclRYTiAqdHhuKTsKQEAgLTUwMSw2ICs1MjQs MTcgQEAgdHlwZWRlZiB2b2lkICgqUmVvcmRlckJ1ZmZlclN0cmVhbU1lc3NhZ2VDQikgKAogCQkJ CQkJCQkJCQkgIGNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBzeiwKIAkJCQkJCQkJCQkJICBjb25z dCBjaGFyICptZXNzYWdlKTsKIAorLyogc3RyZWFtIERETCBtZXNzYWdlIGNhbGxiYWNrIHNpZ25h dHVyZSAqLwordHlwZWRlZiB2b2lkICgqUmVvcmRlckJ1ZmZlclN0cmVhbURETE1lc3NhZ2VDQikg KAorCQkJCQkJCQkJCQkJIFJlb3JkZXJCdWZmZXIgKnJiLAorCQkJCQkJCQkJCQkJIFJlb3JkZXJC dWZmZXJUWE4gKnR4biwKKwkJCQkJCQkJCQkJCSBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAorCQkJ CQkJCQkJCQkJIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJCQkJCQkJCSBPaWQgcmVsaWQsCisJ CQkJCQkJCQkJCQkgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQkJCQkJCQkJIFNp emUgc3osCisJCQkJCQkJCQkJCQkgY29uc3QgY2hhciAqbWVzc2FnZSk7CisKIC8qIHN0cmVhbSB0 cnVuY2F0ZSBjYWxsYmFjayBzaWduYXR1cmUgKi8KIHR5cGVkZWYgdm9pZCAoKlJlb3JkZXJCdWZm ZXJTdHJlYW1UcnVuY2F0ZUNCKSAoCiAJCQkJCQkJCQkJCSAgIFJlb3JkZXJCdWZmZXIgKnJiLApA QCAtNTUyLDYgKzU4Niw3IEBAIHN0cnVjdCBSZW9yZGVyQnVmZmVyCiAJUmVvcmRlckJ1ZmZlckFw cGx5VHJ1bmNhdGVDQiBhcHBseV90cnVuY2F0ZTsKIAlSZW9yZGVyQnVmZmVyQ29tbWl0Q0IgY29t bWl0OwogCVJlb3JkZXJCdWZmZXJNZXNzYWdlQ0IgbWVzc2FnZTsKKwlSZW9yZGVyQnVmZmVyRERM TWVzc2FnZUNCIGRkbG1lc3NhZ2U7CiAKIAkvKgogCSAqIENhbGxiYWNrcyB0byBiZSBjYWxsZWQg d2hlbiBzdHJlYW1pbmcgYSB0cmFuc2FjdGlvbiBhdCBwcmVwYXJlIHRpbWUuCkBAIC01NzEsNiAr NjA2LDcgQEAgc3RydWN0IFJlb3JkZXJCdWZmZXIKIAlSZW9yZGVyQnVmZmVyU3RyZWFtQ29tbWl0 Q0Igc3RyZWFtX2NvbW1pdDsKIAlSZW9yZGVyQnVmZmVyU3RyZWFtQ2hhbmdlQ0Igc3RyZWFtX2No YW5nZTsKIAlSZW9yZGVyQnVmZmVyU3RyZWFtTWVzc2FnZUNCIHN0cmVhbV9tZXNzYWdlOworCVJl b3JkZXJCdWZmZXJTdHJlYW1ERExNZXNzYWdlQ0Igc3RyZWFtX2RkbG1lc3NhZ2U7CiAJUmVvcmRl ckJ1ZmZlclN0cmVhbVRydW5jYXRlQ0Igc3RyZWFtX3RydW5jYXRlOwogCiAJLyoKQEAgLTY1MCw2 ICs2ODYsOSBAQCBleHRlcm4gdm9pZCBSZW9yZGVyQnVmZmVyUXVldWVNZXNzYWdlKFJlb3JkZXJC dWZmZXIgKnJiLCBUcmFuc2FjdGlvbklkIHhpZCwKIAkJCQkJCQkJCSAgU25hcHNob3Qgc25hcCwg WExvZ1JlY1B0ciBsc24sCiAJCQkJCQkJCQkgIGJvb2wgdHJhbnNhY3Rpb25hbCwgY29uc3QgY2hh ciAqcHJlZml4LAogCQkJCQkJCQkJICBTaXplIG1lc3NhZ2Vfc2l6ZSwgY29uc3QgY2hhciAqbWVz c2FnZSk7CitleHRlcm4gdm9pZCBSZW9yZGVyQnVmZmVyUXVldWVERExNZXNzYWdlKFJlb3JkZXJC dWZmZXIgKiwgVHJhbnNhY3Rpb25JZCwgWExvZ1JlY1B0ciBsc24sCisJCQkJCQkJCQkJICBjb25z dCBjaGFyICpwcmVmaXgsIFNpemUgbWVzc2FnZV9zaXplLAorCQkJCQkJCQkJCSAgY29uc3QgY2hh ciAqbWVzc2FnZSwgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUpOwogZXh0 ZXJuIHZvaWQgUmVvcmRlckJ1ZmZlckNvbW1pdChSZW9yZGVyQnVmZmVyICpyYiwgVHJhbnNhY3Rp b25JZCB4aWQsCiAJCQkJCQkJCVhMb2dSZWNQdHIgY29tbWl0X2xzbiwgWExvZ1JlY1B0ciBlbmRf bHNuLAogCQkJCQkJCQlUaW1lc3RhbXBUeiBjb21taXRfdGltZSwgUmVwT3JpZ2luSWQgb3JpZ2lu X2lkLCBYTG9nUmVjUHRyIG9yaWdpbl9sc24pOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9wc3FsLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHNxbC5vdXQK aW5kZXggYTdmNTcwMGVkYy4uYmZjNzNjMjMyOCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9wc3FsLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BzcWwu b3V0CkBAIC01OTcwLDkgKzU5NzAsOSBAQCBMaXN0IG9mIHNjaGVtYXMKICgwIHJvd3MpCiAKIFxk UnAgIm5vLnN1Y2gucHVibGljYXRpb24iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBM aXN0IG9mIHB1YmxpY2F0aW9ucwotIE5hbWUgfCBPd25lciB8IEFsbCB0YWJsZXMgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLSstLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHB1 YmxpY2F0aW9ucworIE5hbWUgfCBPd25lciB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRl cyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0rLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLSstLS0tLS0KICgwIHJvd3MpCiAKIFxkUnMgIm5vLnN1Y2guc3Vic2NyaXB0aW9u IgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wdWJsaWNhdGlvbi5vdXQg Yi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dAppbmRleCBiZmNlMWUx YmMwLi4zOTQ2M2M0MWE5IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1 YmxpY2F0aW9uLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9u Lm91dApAQCAtMzAsMjAgKzMwLDIwIEBAIEVSUk9SOiAgY29uZmxpY3Rpbmcgb3IgcmVkdW5kYW50 IG9wdGlvbnMKIExJTkUgMTogLi4udWJfeHh4IFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9y b290ID0gJ3RydWUnLCBwdWJsaXNoX3ZpLi4uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgogXGRScAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgcHVibGljYXRpb25zCi0gICAg ICAgIE5hbWUgICAgICAgIHwgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8 IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSB0 ZXN0cGliX2luc190cnVuY3QgfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgotIHRlc3RwdWJf ZGVmYXVsdCAgICB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAg ICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgcHVibGljYXRpb25zCisg ICAgICAgIE5hbWUgICAgICAgIHwgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwg RERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tKy0tLS0tLQorIHRlc3RwaWJfaW5zX3RydW5jdCB8IHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAg ICAgfCBmICAgICAgICB8IGYKKyB0ZXN0cHViX2RlZmF1bHQgICAgfCByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAg ICAgICAgIHwgZiAgICAgICAgfCBmCiAoMiByb3dzKQogCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0 cHViX2RlZmF1bHQgU0VUIChwdWJsaXNoID0gJ2luc2VydCwgdXBkYXRlLCBkZWxldGUnKTsKIFxk UnAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9m IHB1YmxpY2F0aW9ucwotICAgICAgICBOYW1lICAgICAgICB8ICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0 ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tCi0gdGVzdHBpYl9pbnNfdHJ1bmN0IHwgcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAg ICAgICB8IGYKLSB0ZXN0cHViX2RlZmF1bHQgICAgfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIg fCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgIHwg ZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0 IG9mIHB1YmxpY2F0aW9ucworICAgICAgICBOYW1lICAgICAgICB8ICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVu Y2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyB0ZXN0cGliX2luc190cnVuY3QgfCBy ZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAg fCBmICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCisgdGVzdHB1Yl9kZWZhdWx0ICAg IHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgZgogKDIgcm93cykKIAogLS0t IGFkZGluZyB0YWJsZXMKQEAgLTg3LDEwICs4NywxMCBAQCBSRVNFVCBjbGllbnRfbWluX21lc3Nh Z2VzOwogLS0gc2hvdWxkIGJlIGFibGUgdG8gYWRkIHNjaGVtYSB0byAnRk9SIFRBQkxFJyBwdWJs aWNhdGlvbgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZSBBREQgVEFCTEVTIElO IFNDSEVNQSBwdWJfdGVzdDsKIFxkUnArIHRlc3RwdWJfZm9ydGFibGUKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZQotICAgICAgICAg IE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0 ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZQorICAgICAgICAgIE93 bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMg fCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBm CiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3RibDEiCiBUYWJsZXMgZnJvbSBzY2hlbWFz OgpAQCAtOTksMjAgKzk5LDIwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAtLSBzaG91bGQgYmUg YWJsZSB0byBkcm9wIHNjaGVtYSBmcm9tICdGT1IgVEFCTEUnIHB1YmxpY2F0aW9uCiBBTFRFUiBQ VUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlIERST1AgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVz dDsKIFxkUnArIHRlc3RwdWJfZm9ydGFibGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZQotICAgICAgICAgIE93bmVyICAgICAgICAg ICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMg fCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVz c19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8 IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBW aWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0t LS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAg InB1YmxpYy50ZXN0cHViX3RibDEiCiAKIC0tIHNob3VsZCBiZSBhYmxlIHRvIHNldCBzY2hlbWEg dG8gJ0ZPUiBUQUJMRScgcHVibGljYXRpb24KIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9y dGFibGUgU0VUIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3Q7CiBcZFJwKyB0ZXN0cHViX2ZvcnRh YmxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJf Zm9ydGFibGUKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0 cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYg ICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9y dGFibGUKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3Qi CiAKQEAgLTEyMywxMCArMTIzLDEwIEBAIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnNj aGVtYSBGT1IgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDsKIENSRUFURSBQVUJMSUNBVElPTiB0 ZXN0cHViX2Zvcl90Ymxfc2NoZW1hIEZPUiBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0LCBUQUJM RSBwdWJfdGVzdC50ZXN0cHViX25vcGs7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogXGRS cCsgdGVzdHB1Yl9mb3JfdGJsX3NjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ dWJsaWNhdGlvbiB0ZXN0cHViX2Zvcl90Ymxfc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRl cyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ dWJsaWNhdGlvbiB0ZXN0cHViX2Zvcl90Ymxfc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRl cyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0t Ky0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoK ICAgICAicHViX3Rlc3QudGVzdHB1Yl9ub3BrIgogVGFibGVzIGZyb20gc2NoZW1hczoKQEAgLTEz NSwxMCArMTM1LDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAtLSBzaG91bGQgYmUgYWJsZSB0 byBhZGQgYSB0YWJsZSBvZiB0aGUgc2FtZSBzY2hlbWEgdG8gdGhlIHNjaGVtYSBwdWJsaWNhdGlv bgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3JzY2hlbWEgQUREIFRBQkxFIHB1Yl90ZXN0 LnRlc3RwdWJfbm9wazsKIFxkUnArIHRlc3RwdWJfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JzY2hlbWEKLSAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yc2NoZW1hCisgICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYK IFRhYmxlczoKICAgICAicHViX3Rlc3QudGVzdHB1Yl9ub3BrIgogVGFibGVzIGZyb20gc2NoZW1h czoKQEAgLTE0NywxMCArMTQ3LDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAtLSBzaG91bGQg YmUgYWJsZSB0byBkcm9wIHRoZSB0YWJsZQogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3Jz Y2hlbWEgRFJPUCBUQUJMRSBwdWJfdGVzdC50ZXN0cHViX25vcGs7CiBcZFJwKyB0ZXN0cHViX2Zv cnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3Rw dWJfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IElu c2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIg fCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwg ZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHVi X2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJf dGVzdCIKIApAQCAtMTYxLDEwICsxNjEsMTAgQEAgRVJST1I6ICByZWxhdGlvbiAidGVzdHB1Yl9u b3BrIiBpcyBub3QgcGFydCBvZiB0aGUgcHVibGljYXRpb24KIC0tIHNob3VsZCBiZSBhYmxlIHRv IHNldCB0YWJsZSB0byBzY2hlbWEgcHVibGljYXRpb24KIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3Rw dWJfZm9yc2NoZW1hIFNFVCBUQUJMRSBwdWJfdGVzdC50ZXN0cHViX25vcGs7CiBcZFJwKyB0ZXN0 cHViX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9u IHRlc3RwdWJfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0 ZXN0cHViX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMg fCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERE THMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1Yl90ZXN0LnRl c3RwdWJfbm9wayIKIApAQCAtMTg2LDEwICsxODYsMTAgQEAgUHVibGljYXRpb25zOgogICAgICJ0 ZXN0cHViX2ZvcmFsbHRhYmxlcyIKIAogXGRScCsgdGVzdHB1Yl9mb3JhbGx0YWJsZXMKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yYWxsdGFibGVz Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCB0ICAgICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JhbGx0YWJsZXMK KyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0 ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgdCAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8 IGYgICAgICAgIHwgZgogKDEgcm93KQogCiBEUk9QIFRBQkxFIHRlc3RwdWJfdGJsMjsKQEAgLTIw MSwxOSArMjAxLDE5IEBAIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViMyBGT1IgVEFCTEUgdGVz dHB1Yl90YmwzOwogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWI0IEZPUiBUQUJMRSBPTkxZIHRl c3RwdWJfdGJsMzsKIFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CiBcZFJwKyB0ZXN0cHViMwot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjMK LSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0 ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMworICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAg ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAg ICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3RibDMiCiAgICAgInB1YmxpYy50 ZXN0cHViX3RibDNhIgogCiBcZFJwKyB0ZXN0cHViNAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjQKLSAgICAgICAgICBPd25lciAgICAgICAg ICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVz IHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNAorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFs bCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEg cm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0K KyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1 YmxpYy50ZXN0cHViX3RibDMiCiAKQEAgLTIzNCwxMCArMjM0LDEwIEBAIFVQREFURSB0ZXN0cHVi X3BhcnRlZDEgU0VUIGEgPSAxOwogLS0gb25seSBwYXJlbnQgaXMgbGlzdGVkIGFzIGJlaW5nIGlu IHB1YmxpY2F0aW9uLCBub3QgdGhlIHBhcnRpdGlvbgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1 Yl9mb3JwYXJ0ZWQgQUREIFRBQkxFIHRlc3RwdWJfcGFydGVkOwogXGRScCsgdGVzdHB1Yl9mb3Jw YXJ0ZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHVi X2ZvcnBhcnRlZAotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9m b3JwYXJ0ZWQKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0 cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNh dGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl9wYXJ0 ZWQiCiAKQEAgLTI1MiwxMCArMjUyLDEwIEBAIEFMVEVSIFRBQkxFIHRlc3RwdWJfcGFydGVkIERF VEFDSCBQQVJUSVRJT04gdGVzdHB1Yl9wYXJ0ZWQxOwogVVBEQVRFIHRlc3RwdWJfcGFydGVkMSBT RVQgYSA9IDE7CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnBhcnRlZCBTRVQgKHB1Ymxp c2hfdmlhX3BhcnRpdGlvbl9yb290ID0gdHJ1ZSk7CiBcZFJwKyB0ZXN0cHViX2ZvcnBhcnRlZAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ycGFy dGVkCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBV cGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgdAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnBhcnRl ZAorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAg IHwgdCAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3BhcnRlZCIKIApA QCAtMjg0LDEwICsyODQsMTAgQEAgU0VUIGNsaWVudF9taW5fbWVzc2FnZXMgPSAnRVJST1InOwog Q1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWI1IEZPUiBUQUJMRSB0ZXN0cHViX3JmX3RibDEsIHRl c3RwdWJfcmZfdGJsMiBXSEVSRSAoYyA8PiAndGVzdCcgQU5EIGQgPCA1KSBXSVRIIChwdWJsaXNo ID0gJ2luc2VydCcpOwogUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKIFxkUnArIHRlc3RwdWI1 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHVi NQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAg ICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI1CisgICAg ICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwg RGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYg ICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmICAg ICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMSIKICAgICAicHVi bGljLnRlc3RwdWJfcmZfdGJsMiIgV0hFUkUgKChjIDw+ICd0ZXN0Jzo6dGV4dCkgQU5EIChkIDwg NSkpCkBAIC0zMDAsMTAgKzMwMCwxMCBAQCBUYWJsZXM6CiAKIEFMVEVSIFBVQkxJQ0FUSU9OIHRl c3RwdWI1IEFERCBUQUJMRSB0ZXN0cHViX3JmX3RibDMgV0hFUkUgKGUgPiAxMDAwIEFORCBlIDwg MjAwMCk7CiBcZFJwKyB0ZXN0cHViNQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUHVibGljYXRpb24gdGVzdHB1YjUKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBm ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViNQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMg fCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERE THMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAg ICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0 cHViX3JmX3RibDEiCiAgICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDIiIFdIRVJFICgoYyA8PiAn dGVzdCc6OnRleHQpIEFORCAoZCA8IDUpKQpAQCAtMzE5LDEwICszMTksMTAgQEAgUHVibGljYXRp b25zOgogCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNSBEUk9QIFRBQkxFIHRlc3RwdWJfcmZf dGJsMjsKIFxkUnArIHRlc3RwdWI1Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViNQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0 YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9v dCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNh dGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYg ICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1Ymxp Y2F0aW9uIHRlc3RwdWI1CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8 IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERM cyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3Nf cHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAg ICAgfCBmICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3Rw dWJfcmZfdGJsMSIKICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMyIgV0hFUkUgKChlID4gMTAw MCkgQU5EIChlIDwgMjAwMCkpCkBAIC0zMzAsMTAgKzMzMCwxMCBAQCBUYWJsZXM6CiAtLSByZW1v dmUgdGVzdHB1Yl9yZl90YmwxIGFuZCBhZGQgdGVzdHB1Yl9yZl90YmwzIGFnYWluIChhbm90aGVy IFdIRVJFIGV4cHJlc3Npb24pCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNSBTRVQgVEFCTEUg dGVzdHB1Yl9yZl90YmwzIFdIRVJFIChlID4gMzAwIEFORCBlIDwgNTAwKTsKIFxkUnArIHRlc3Rw dWI1Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0 cHViNQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwg VXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI1Cisg ICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVz IHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8 IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBm ICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMyIgV0hFUkUg KChlID4gMzAwKSBBTkQgKGUgPCA1MDApKQogCkBAIC0zNjYsMTAgKzM2NiwxMCBAQCBTRVQgY2xp ZW50X21pbl9tZXNzYWdlcyA9ICdFUlJPUic7CiBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9z eW50YXgxIEZPUiBUQUJMRSB0ZXN0cHViX3JmX3RibDEsIE9OTFkgdGVzdHB1Yl9yZl90YmwzIFdI RVJFIChlIDwgOTk5KSBXSVRIIChwdWJsaXNoID0gJ2luc2VydCcpOwogUkVTRVQgY2xpZW50X21p bl9tZXNzYWdlczsKIFxkUnArIHRlc3RwdWJfc3ludGF4MQotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX3N5bnRheDEKLSAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1 bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQot IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAg ICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX3N5bnRheDEKKyAgICAgICAgICBPd25lciAgICAg ICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNh dGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVz OgogICAgICJwdWJsaWMudGVzdHB1Yl9yZl90YmwxIgogICAgICJwdWJsaWMudGVzdHB1Yl9yZl90 YmwzIiBXSEVSRSAoZSA8IDk5OSkKQEAgLTM3OSwxMCArMzc5LDEwIEBAIFNFVCBjbGllbnRfbWlu X21lc3NhZ2VzID0gJ0VSUk9SJzsKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX3N5bnRheDIg Rk9SIFRBQkxFIHRlc3RwdWJfcmZfdGJsMSwgdGVzdHB1Yl9yZl9zY2hlbWExLnRlc3RwdWJfcmZf dGJsNSBXSEVSRSAoaCA8IDk5OSkgV0lUSCAocHVibGlzaCA9ICdpbnNlcnQnKTsKIFJFU0VUIGNs aWVudF9taW5fbWVzc2FnZXM7CiBcZFJwKyB0ZXN0cHViX3N5bnRheDIKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9zeW50YXgyCi0gICAgICAgICAg T3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRl cyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8 IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9zeW50YXgyCisgICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmICAgICAgICB8IGYK IFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMSIKICAgICAidGVzdHB1Yl9yZl9z Y2hlbWExLnRlc3RwdWJfcmZfdGJsNSIgV0hFUkUgKGggPCA5OTkpCkBAIC00OTcsMTAgKzQ5Nywx MCBAQCBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjYgRk9SIFRBQkxFUyBJTiBTQ0hFTUEgdGVz dHB1Yl9yZl9zY2hlbWEyOwogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjYgU0VUIFRBQkxFUyBJ TiBTQ0hFTUEgdGVzdHB1Yl9yZl9zY2hlbWEyLCBUQUJMRSB0ZXN0cHViX3JmX3NjaGVtYTIudGVz dHB1Yl9yZl90Ymw2IFdIRVJFIChpIDwgOTkpOwogUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsK IFxkUnArIHRlc3RwdWI2Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViNgotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMg fCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg ICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9u IHRlc3RwdWI2CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2Vy dHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAidGVzdHB1Yl9yZl9zY2hlbWEy LnRlc3RwdWJfcmZfdGJsNiIgV0hFUkUgKGkgPCA5OSkKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CkBA IC03MTQsMTAgKzcxNCwxMCBAQCBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl90YWJsZV9pbnMg V0lUSCAocHVibGlzaCA9ICdpbnNlcnQsIHRydW5jYXRlJyk7CiBSRVNFVCBjbGllbnRfbWluX21l c3NhZ2VzOwogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl90YWJsZV9pbnMgQUREIFRBQkxFIHRl c3RwdWJfdGJsNSAoYSk7CQktLSBvawogXGRScCsgdGVzdHB1Yl90YWJsZV9pbnMKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX3RhYmxlX2lucwotICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQg ICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl90YWJsZV9pbnMKKyAgICAg ICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAg ICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IHQgICAgICAgICB8IGYgICAg ICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl90Ymw1IiAoYSkKIApAQCAtODkx LDEwICs4OTEsMTAgQEAgQ1JFQVRFIFRBQkxFIHRlc3RwdWJfdGJsX2JvdGhfZmlsdGVycyAoYSBp bnQsIGIgaW50LCBjIGludCwgUFJJTUFSWSBLRVkgKGEsYykpOwogQUxURVIgVEFCTEUgdGVzdHB1 Yl90YmxfYm90aF9maWx0ZXJzIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggdGVzdHB1Yl90 YmxfYm90aF9maWx0ZXJzX3BrZXk7CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2JvdGhfZmls dGVycyBBREQgVEFCTEUgdGVzdHB1Yl90YmxfYm90aF9maWx0ZXJzIChhLGMpIFdIRVJFIChjICE9 IDEpOwogXGRScCsgdGVzdHB1Yl9ib3RoX2ZpbHRlcnMKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfYm90aF9maWx0ZXJzCi0gICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0K LSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9ib3RoX2ZpbHRlcnMKKyAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1 bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFi bGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl90YmxfYm90aF9maWx0ZXJzIiAoYSwgYykgV0hFUkUg KGMgPD4gMSkKIApAQCAtMTA5OSwxMCArMTA5OSwxMCBAQCBFUlJPUjogIHJlbGF0aW9uICJ0ZXN0 cHViX3RibDEiIGlzIGFscmVhZHkgbWVtYmVyIG9mIHB1YmxpY2F0aW9uICJ0ZXN0cHViX2ZvcnRi bAogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGJsIEZPUiBUQUJMRSB0ZXN0cHViX3Ri bDE7CiBFUlJPUjogIHB1YmxpY2F0aW9uICJ0ZXN0cHViX2ZvcnRibCIgYWxyZWFkeSBleGlzdHMK IFxkUnArIHRlc3RwdWJfZm9ydGJsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ dWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRibAotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFs bCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEg cm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJs aWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1Ymxp Y2F0aW9uIHRlc3RwdWJfZm9ydGJsCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRh YmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJl Z3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHViX3Rl c3QudGVzdHB1Yl9ub3BrIgogICAgICJwdWJsaWMudGVzdHB1Yl90YmwxIgpAQCAtMTE0MCwxMCAr MTE0MCwxMCBAQCBQdWJsaWNhdGlvbnM6CiAgICAgInRlc3RwdWJfZm9ydGJsIgogCiBcZFJwKyB0 ZXN0cHViX2RlZmF1bHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1Yl9kZWZhdWx0Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAg ICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24g dGVzdHB1Yl9kZWZhdWx0CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8 IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERM cyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3Nf cHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCBmICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHViX3Rlc3QudGVz dHB1Yl9ub3BrIgogICAgICJwdWJsaWMudGVzdHB1Yl90YmwxIgpAQCAtMTIyMSwxMCArMTIyMSwx MCBAQCBSRVZPS0UgQ1JFQVRFIE9OIERBVEFCQVNFIHJlZ3Jlc3Npb24gRlJPTSByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIyOwogRFJPUCBUQUJMRSB0ZXN0cHViX3BhcnRlZDsKIERST1AgVEFCTEUg dGVzdHB1Yl90YmwxOwogXGRScCsgdGVzdHB1Yl9kZWZhdWx0Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZGVmYXVsdAotICAgICAgICAgIE93bmVy ICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0t Ci0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZGVmYXVsdAorICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVu Y2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCiAoMSBy b3cpCiAKIC0tIGZhaWwgLSBtdXN0IGJlIG93bmVyIG9mIHB1YmxpY2F0aW9uCkBAIC0xMjM0LDIw ICsxMjM0LDIwIEBAIEVSUk9SOiAgbXVzdCBiZSBvd25lciBvZiBwdWJsaWNhdGlvbiB0ZXN0cHVi X2RlZmF1bHQKIFJFU0VUIFJPTEU7CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2RlZmF1bHQg UkVOQU1FIFRPIHRlc3RwdWJfZm9vOwogXGRScCB0ZXN0cHViX2ZvbwotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgcHVibGljYXRpb25zCi0gICAgTmFt ZSAgICAgfCAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gdGVzdHB1Yl9mb28gfCByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIExpc3Qgb2YgcHVibGljYXRpb25zCisgICAgTmFtZSAgICAgfCAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyB0ZXN0cHViX2ZvbyB8IHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCBmICAgICAgICAgfCBmICAgICAgICB8IGYKICgxIHJvdykKIAogLS0gcmVuYW1lIGJh Y2sgdG8ga2VlcCB0aGUgcmVzdCBzaW1wbGUKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9v IFJFTkFNRSBUTyB0ZXN0cHViX2RlZmF1bHQ7CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2Rl ZmF1bHQgT1dORVIgVE8gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyMjsKIFxkUnAgdGVzdHB1Yl9k ZWZhdWx0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0 IG9mIHB1YmxpY2F0aW9ucwotICAgICAgTmFtZSAgICAgICB8ICAgICAgICAgICBPd25lciAgICAg ICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNh dGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0KLSB0ZXN0cHViX2RlZmF1bHQgfCByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAg ICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBM aXN0IG9mIHB1YmxpY2F0aW9ucworICAgICAgTmFtZSAgICAgICB8ICAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1 bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHRlc3RwdWJfZGVmYXVsdCB8IHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlcjIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCiAoMSByb3cpCiAKIC0tIGFkZGluZyBz Y2hlbWFzIGFuZCB0YWJsZXMKQEAgLTEyNjMsMTkgKzEyNjMsMTkgQEAgQ1JFQVRFIFRBQkxFICJD VVJSRU5UX1NDSEVNQSIuIkNVUlJFTlRfU0NIRU1BIihpZCBpbnQpOwogU0VUIGNsaWVudF9taW5f bWVzc2FnZXMgPSAnRVJST1InOwogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVt YSBGT1IgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDE7CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hl bWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9m b3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0 cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYg ICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9y c2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMg fCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRp b25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0 MSIKIAogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWIyX2ZvcnNjaGVtYSBGT1IgVEFCTEVTIElO IFNDSEVNQSBwdWJfdGVzdDEsIHB1Yl90ZXN0MiwgcHViX3Rlc3QzOwogXGRScCsgdGVzdHB1YjJf Zm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVz dHB1YjJfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8 IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAg IHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3Rw dWIyX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJw dWJfdGVzdDEiCiAgICAgInB1Yl90ZXN0MiIKQEAgLTEyODksNDQgKzEyODksNDQgQEAgQ1JFQVRF IFBVQkxJQ0FUSU9OIHRlc3RwdWI2X2ZvcnNjaGVtYSBGT1IgVEFCTEVTIElOIFNDSEVNQSAiQ1VS UkVOVF9TQ0hFTUEiLCBDVVIKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlIEZP UiBUQUJMRSAiQ1VSUkVOVF9TQ0hFTUEiLiJDVVJSRU5UX1NDSEVNQSI7CiBSRVNFVCBjbGllbnRf bWluX21lc3NhZ2VzOwogXGRScCsgdGVzdHB1YjNfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjNfZm9yc2NoZW1hCi0gICAgICAgICAg T3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRl cyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIzX2ZvcnNjaGVtYQorICAgICAgICAgIE93 bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMg fCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBm CiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJsaWMiCiAKIFxkUnArIHRlc3RwdWI0X2Zv cnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3Rw dWI0X2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8 IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHVi NF9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJs aWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAiQ1VS UkVOVF9TQ0hFTUEiCiAKIFxkUnArIHRlc3RwdWI1X2ZvcnNjaGVtYQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI1X2ZvcnNjaGVtYQotICAgICAgICAg IE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0 ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNV9mb3JzY2hlbWEKKyAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwg ZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAiQ1VSUkVOVF9TQ0hFTUEiCiAgICAgInB1Ymxp YyIKIAogXGRScCsgdGVzdHB1YjZfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUHVibGljYXRpb24gdGVzdHB1YjZfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAg ICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5j YXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSBy ZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI2X2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0 ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMg ZnJvbSBzY2hlbWFzOgogICAgICJDVVJSRU5UX1NDSEVNQSIKICAgICAicHVibGljIgogCiBcZFJw KyB0ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1Ymxp Y2F0aW9uIHRlc3RwdWJfZm9ydGFibGUKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0 aW9uIHRlc3RwdWJfZm9ydGFibGUKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg fCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJDVVJSRU5U X1NDSEVNQS5DVVJSRU5UX1NDSEVNQSIKIApAQCAtMTM2MCwxMCArMTM2MCwxMCBAQCBFUlJPUjog IHNjaGVtYSAidGVzdHB1Yl92aWV3IiBkb2VzIG5vdCBleGlzdAogLS0gZHJvcHBpbmcgdGhlIHNj aGVtYSBzaG91bGQgcmVmbGVjdCB0aGUgY2hhbmdlIGluIHB1YmxpY2F0aW9uCiBEUk9QIFNDSEVN QSBwdWJfdGVzdDM7CiBcZFJwKyB0ZXN0cHViMl9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMl9mb3JzY2hlbWEKLSAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjJfZm9yc2NoZW1hCisgICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYK IFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKICAgICAicHViX3Rlc3QyIgpA QCAtMTM3MSwyMCArMTM3MSwyMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogLS0gcmVuYW1pbmcg dGhlIHNjaGVtYSBzaG91bGQgcmVmbGVjdCB0aGUgY2hhbmdlIGluIHB1YmxpY2F0aW9uCiBBTFRF UiBTQ0hFTUEgcHViX3Rlc3QxIFJFTkFNRSB0byBwdWJfdGVzdDFfcmVuYW1lZDsKIFxkUnArIHRl c3RwdWIyX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0 aW9uIHRlc3RwdWIyX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0 YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9v dCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNh dGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlv biB0ZXN0cHViMl9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg fCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoK ICAgICAicHViX3Rlc3QxX3JlbmFtZWQiCiAgICAgInB1Yl90ZXN0MiIKIAogQUxURVIgU0NIRU1B IHB1Yl90ZXN0MV9yZW5hbWVkIFJFTkFNRSB0byBwdWJfdGVzdDE7CiBcZFJwKyB0ZXN0cHViMl9m b3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0 cHViMl9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwg SW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNl ciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAg fCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1 YjJfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IElu c2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1 Yl90ZXN0MSIKICAgICAicHViX3Rlc3QyIgpAQCAtMTM5MiwxMCArMTM5MiwxMCBAQCBUYWJsZXMg ZnJvbSBzY2hlbWFzOgogLS0gYWx0ZXIgcHVibGljYXRpb24gYWRkIHNjaGVtYQogQUxURVIgUFVC TElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIEFERCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0 MjsKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0 ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAg ICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVz IHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0r LS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZy b20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogICAgICJwdWJfdGVzdDIiCkBAIC0xNDA0LDEw ICsxNDA0LDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0 cHViMV9mb3JzY2hlbWEgQUREIFRBQkxFUyBJTiBTQ0hFTUEgbm9uX2V4aXN0ZW50X3NjaGVtYTsK IEVSUk9SOiAgc2NoZW1hICJub25fZXhpc3RlbnRfc2NoZW1hIiBkb2VzIG5vdCBleGlzdAogXGRS cCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVi bGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwg QWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZp YSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1Ymxp Y2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFs bCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEg cm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0K KyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hl bWFzOgogICAgICJwdWJfdGVzdDEiCiAgICAgInB1Yl90ZXN0MiIKQEAgLTE0MTYsMTAgKzE0MTYs MTAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2Zv cnNjaGVtYSBBREQgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDE7CiBFUlJPUjogIHNjaGVtYSAi cHViX3Rlc3QxIiBpcyBhbHJlYWR5IG1lbWJlciBvZiBwdWJsaWNhdGlvbiAidGVzdHB1YjFfZm9y c2NoZW1hIgogXGRScCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0K LSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVu Y2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJs ZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAgICAgInB1Yl90ZXN0MiIKQEAgLTE0 MjcsMTAgKzE0MjcsMTAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIC0tIGFsdGVyIHB1YmxpY2F0 aW9uIGRyb3Agc2NoZW1hCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgRFJP UCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MjsKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNj aGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwg VXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hl bWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg ICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgog CkBAIC0xNDM4LDEwICsxNDM4LDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiBBTFRFUiBQVUJM SUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgRFJPUCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0 MjsKIEVSUk9SOiAgdGFibGVzIGZyb20gc2NoZW1hICJwdWJfdGVzdDIiIGFyZSBub3QgcGFydCBv ZiB0aGUgcHVibGljYXRpb24KIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAg IHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogCkBAIC0xNDQ5LDI5 ICsxNDQ5LDI5IEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0 cHViMV9mb3JzY2hlbWEgRFJPUCBUQUJMRVMgSU4gU0NIRU1BIG5vbl9leGlzdGVudF9zY2hlbWE7 CiBFUlJPUjogIHNjaGVtYSAibm9uX2V4aXN0ZW50X3NjaGVtYSIgZG9lcyBub3QgZXhpc3QKIFxk UnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8 IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBW aWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19w dWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0t CisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2No ZW1hczoKICAgICAicHViX3Rlc3QxIgogCiAtLSBkcm9wIGFsbCBzY2hlbWFzCiBBTFRFUiBQVUJM SUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgRFJPUCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0 MTsKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0 ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAg ICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVz IHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0r LS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogKDEgcm93KQog CiAtLSBhbHRlciBwdWJsaWNhdGlvbiBzZXQgbXVsdGlwbGUgc2NoZW1hCiBBTFRFUiBQVUJMSUNB VElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgU0VUIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxLCBw dWJfdGVzdDI7CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25l ciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwg VHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRh YmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKICAgICAicHViX3Rlc3QyIgpAQCAt MTQ4MCwxMCArMTQ4MCwxMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogQUxURVIgUFVCTElDQVRJ T04gdGVzdHB1YjFfZm9yc2NoZW1hIFNFVCBUQUJMRVMgSU4gU0NIRU1BIG5vbl9leGlzdGVudF9z Y2hlbWE7CiBFUlJPUjogIHNjaGVtYSAibm9uX2V4aXN0ZW50X3NjaGVtYSIgZG9lcyBub3QgZXhp c3QKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0 ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAg ICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVz IHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0r LS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZy b20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogICAgICJwdWJfdGVzdDIiCkBAIC0xNDkyLDEw ICsxNDkyLDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAtLSByZW1vdmluZyB0aGUgZHVwbGlj YXRlIHNjaGVtYXMKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBTRVQgVEFC TEVTIElOIFNDSEVNQSBwdWJfdGVzdDEsIHB1Yl90ZXN0MTsKIFxkUnArIHRlc3RwdWIxX2ZvcnNj aGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIx X2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9m b3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0 cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNh dGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rl c3QxIgogCkBAIC0xNTc0LDE4ICsxNTc0LDE4IEBAIFNFVCBjbGllbnRfbWluX21lc3NhZ2VzID0g J0VSUk9SJzsKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViM19mb3JzY2hlbWE7CiBSRVNFVCBj bGllbnRfbWluX21lc3NhZ2VzOwogXGRScCsgdGVzdHB1YjNfZm9yc2NoZW1hCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjNfZm9yc2NoZW1hCi0gICAg ICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwg RGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIzX2ZvcnNjaGVtYQorICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAg ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAg ICAgfCBmCiAoMSByb3cpCiAKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWIzX2ZvcnNjaGVtYSBT RVQgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDE7CiBcZFJwKyB0ZXN0cHViM19mb3JzY2hlbWEK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViM19mb3Jz Y2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjNfZm9yc2No ZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBV cGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg ICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIK IApAQCAtMTU5NSwyMCArMTU5NSwyMCBAQCBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3Jz Y2hlbWFfZm9ydGFibGUgRk9SIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxLCBUQQogQ1JFQVRF IFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFibGVfZm9yc2NoZW1hIEZPUiBUQUJMRSBwdWJfdGVz dDIudGJsMSwgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDE7CiBSRVNFVCBjbGllbnRfbWluX21l c3NhZ2VzOwogXGRScCsgdGVzdHB1Yl9mb3JzY2hlbWFfZm9ydGFibGUKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yc2NoZW1hX2ZvcnRhYmxlCi0gICAg ICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwg RGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JzY2hlbWFfZm9ydGFibGUKKyAg ICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMg fCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYg ICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJfdGVzdDIudGJsMSIKIFRhYmxlcyBmcm9tIHNj aGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKIAogXGRScCsgdGVzdHB1Yl9mb3J0YWJsZV9mb3JzY2hl bWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGFi bGVfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IElu c2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIg fCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwg ZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0 YWJsZV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwg SW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExz IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19w dWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJfdGVzdDIudGJs MSIKIFRhYmxlcyBmcm9tIHNjaGVtYXM6Ci0tIAoyLjMyLjAKCg== --00000000000056eb5505e991f569 Content-Type: text/x-patch; charset="US-ASCII"; name="v23-0003-Support-CREATE-TABLE-AS-SELECT-INTO.patch" Content-Disposition: attachment; filename="v23-0003-Support-CREATE-TABLE-AS-SELECT-INTO.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l8imipwt2 RnJvbSBmMDM2MGIxNDY3NTQ1M2I0MTZhNmY3NDYzZDc4NTZhMTI2YzQyYWFiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFR1ZSwgMjAgU2VwIDIwMjIgMDk6NTM6NDQgLTA0MDAKU3ViamVjdDogW1BBVENI IHYyMyAzLzZdIFN1cHBvcnQgQ1JFQVRFIFRBQkxFIEFTIFNFTEVDVCBJTlRPCgpUaGUgbWFpbiBp ZGVhIG9mIHJlcGxpY2F0aW5nIHRoZSBDUkVBVEUgVEFCTEUgQVMgaXMgdGhhdCB3ZSBkZXByYXNl IHRoZSBDUkVBVEUKVEFCTEUgQVMgaW50byBhIHNpbXBsZSBDUkVBVEUgVEFCTEUod2l0aG91dCBz dWJxdWVyeSkgY29tbWFuZCBhbmQgV0FMIGxvZyBpdAphZnRlciBjcmVhdGluZyB0aGUgdGFibGUg YW5kIGJlZm9yZSB3cml0aW5nIGRhdGEgaW50byB0aGUgdGFibGUgYW5kIHJlcGxpY2F0ZQp0aGUg aW5jb21pbmcgd3JpdGVzIGxhdGVyIGFzIG5vcm1hbCBJTlNFUlRzLiBJbiB0aGlzIGFwcG9yYWNo LCB3ZSBkb24ndCBleGVjdXRlCnRoZSBzdWJxdWVyeSBvbiBzdWJzY3JpYmVyIHNvIHRoYXQgZG9u J3QgbmVlZCB0byBtYWtlIHN1cmUgYWxsIHRoZSBvYmplY3RzCnJlZmVyZW5jZWQgaW4gdGhlIHN1 YnF1ZXJ5IGFsc28gZXhpc3RzIGluIHN1YnNjcmliZXIuIEFuZCBUaGlzIGFwcHJvYWNoIHdvcmtz CmZvciBhbGwga2luZCBvZiBjb21tYW5kcyhlLmcuIENSQUVURSBUQUJMRSBBUyBbU0VMRUNUXVtF WEVDVVRFXVtWQUxVRVNdKQoKSW50cm9kdWNpbmcgYSBuZXcgdHlwZSBvZiBldmVudCB0cmlnZ2Vy ICJ0YWJsZV9pbml0X3dyaXRlIi4gd2hpY2ggd291bGQgYmUgZmlyZWQKZm9yIENSRUFURSBUQUJM RSBBUy9TRUxFQ1QgSU5UTyBhZnRlciBjcmVhdGluZyB0aGUgdGFibGUgYW5kCmJlZm9yZSBhbnkg b3RoZXIgbW9kaWZpY2F0aW9uLiB3ZSBkZXBhcnNlIHRoZSBjb21tYW5kIGluIHRoZSB0YWJsZV9p bml0X3dyaXRlIGV2ZW50CnRyaWdnZXIgYW5kIFdBTCBsb2cgdGhlIGRlcGFyc2VkIGpzb24gc3Ry aW5nLiBUaGUgd2Fsc2VuZGVyIHdpbGwgc2VuZCB0aGUKc3RyaW5nIHRvIHN1YnNjcmliZXIuIEFu ZCBpbmNvbWluZyBJTlNFUlRzIHdpbGwgYWxzbyBiZSByZXBsaWNhdGVkLgotLS0KIHNyYy9iYWNr ZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMgICAgICAgIHwgIDEwICsrCiBzcmMvYmFja2VuZC9jb21t YW5kcy9kZGxfZGVwYXJzZS5jICAgICB8ICAyNCArKysrCiBzcmMvYmFja2VuZC9jb21tYW5kcy9l dmVudF90cmlnZ2VyLmMgICB8IDE3MiArKysrKysrKysrKysrKysrKysrKysrKystCiBzcmMvYmFj a2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYyB8ICAgOSArKwogc3JjL2JhY2tlbmQvdGNv cC91dGlsaXR5LmMgICAgICAgICAgICAgfCAgIDIgKwogc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUv ZXZ0Y2FjaGUuYyAgICAgfCAgIDIgKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCAg ICAgICAgfCAgIDMgKwogc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oICAgfCAg IDQgKwogc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaCAgICAgfCAgIDkgKy0KIHNy Yy9pbmNsdWRlL3V0aWxzL2V2dGNhY2hlLmggICAgICAgICAgIHwgICAzICstCiAxMCBmaWxlcyBj aGFuZ2VkLCAyMzIgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9jb21tYW5kcy9jcmVhdGVhcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY3Jl YXRlYXMuYwppbmRleCAxNTJjMjliNTUxLi4wZDgwYzZjOTc3IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9jb21tYW5kcy9jcmVhdGVhcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0 ZWFzLmMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJjYXRhbG9nL25hbWVzcGFjZS5oIgog I2luY2x1ZGUgImNhdGFsb2cvdG9hc3RpbmcuaCIKICNpbmNsdWRlICJjb21tYW5kcy9jcmVhdGVh cy5oIgorI2luY2x1ZGUgImNvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaCIKICNpbmNsdWRlICJjb21t YW5kcy9tYXR2aWV3LmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvcHJlcGFyZS5oIgogI2luY2x1ZGUg ImNvbW1hbmRzL3RhYmxlY21kcy5oIgpAQCAtMTQzLDYgKzE0NCwxNSBAQCBjcmVhdGVfY3Rhc19p bnRlcm5hbChMaXN0ICphdHRyTGlzdCwgSW50b0NsYXVzZSAqaW50bykKIAkJU3RvcmVWaWV3UXVl cnkoaW50b1JlbGF0aW9uQWRkci5vYmplY3RJZCwgcXVlcnksIGZhbHNlKTsKIAkJQ29tbWFuZENv dW50ZXJJbmNyZW1lbnQoKTsKIAl9CisJZWxzZQorCXsKKwkJLyoKKwkJICogRmlyZSB0aGUgdHJp Z2dlciBmb3IgdGFibGVfaW5pdF93cml0ZSBhZnRlciBjcmVhdGluZyB0aGUgdGFibGUgc28KKwkJ ICogdGhhdCB3ZSBjYW4gYWNjZXNzIHRoZSBjYXRhbG9nIGluZm8gYWJvdXQgdGhlIG5ld2x5IGNy ZWF0ZWQgdGFibGUgaW4KKwkJICogdGhlIHRyaWdnZXIgZnVuY3Rpb24uCisJCSAqLworCQlFdmVu dFRyaWdnZXJUYWJsZUluaXRXcml0ZSgoTm9kZSAqKSBjcmVhdGUsIGludG9SZWxhdGlvbkFkZHIp OworCX0KIAogCXJldHVybiBpbnRvUmVsYXRpb25BZGRyOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9k ZXBhcnNlLmMKaW5kZXggMjlhNTgxZWY1MS4uY2YxN2JmMzQ3ZCAxMDA3NTUKLS0tIGEvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9k ZGxfZGVwYXJzZS5jCkBAIC02NTcxLDYgKzY1NzEsMjcgQEAgZGVwYXJzZV9UeXBlX1N1YnNjcmlw dChPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfdHlwZSB0eXBGb3JtKQogCXJldHVybiBuZXdfb2Jq ZWN0X29iamVjdCh0eXBzdWJzY3JpcHQpOwogfQogCisvKgorICogRGVwYXJzZSBDUkVBVEUgVEFC TEUgQVMgY29tbWFuZC4KKyAqCisgKiBkZXBhcnNlX0NyZWF0ZVN0bXQgZG8gdGhlIGFjdHVhbCB3 b3JrIGFzIHdlIGRlcGFyc2UgdGhlIGZpbmFsIENyZWF0ZVN0bXQgZm9yCisgKiBDUkVBVEUgVEFC TEUgQVMgY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVUYWJs ZUFzU3RtdChDb2xsZWN0ZWRDb21tYW5kICpjbWQpCit7CisJT2lkCQkJb2JqZWN0SWQ7CisJTm9k ZQkgICAqcGFyc2V0cmVlOworCisJQXNzZXJ0KGNtZC0+dHlwZSA9PSBTQ1RfQ3JlYXRlVGFibGVB cyk7CisKKwlwYXJzZXRyZWUgPSBjbWQtPmQuY3Rhcy5yZWFsX2NyZWF0ZTsKKwlvYmplY3RJZCA9 IGNtZC0+ZC5jdGFzLmFkZHJlc3Mub2JqZWN0SWQ7CisKKwlyZXR1cm4gZGVwYXJzZV9DcmVhdGVT dG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworfQorCisKIC8qCiAgKiBIYW5kbGUgZGVwYXJzaW5n IG9mIHNpbXBsZSBjb21tYW5kcy4KICAqCkBAIC02ODI1LDYgKzY4NDYsOSBAQCBkZXBhcnNlX3V0 aWxpdHlfY29tbWFuZChDb2xsZWN0ZWRDb21tYW5kICpjbWQsIGJvb2wgdmVyYm9zZV9tb2RlKQog CQljYXNlIFNDVF9BbHRlclRhYmxlOgogCQkJdHJlZSA9IGRlcGFyc2VfQWx0ZXJUYWJsZVN0bXQo Y21kKTsKIAkJCWJyZWFrOworCQljYXNlIFNDVF9DcmVhdGVUYWJsZUFzOgorCQkJdHJlZSA9IGRl cGFyc2VfQ3JlYXRlVGFibGVBc1N0bXQoY21kKTsKKwkJCWJyZWFrOwogCQljYXNlIFNDVF9BbHRl ck9wRmFtaWx5OgogCQkJdHJlZSA9IGRlcGFyc2VfQWx0ZXJPcEZhbWlseShjbWQpOwogCQkJYnJl YWs7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMgYi9z cmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMKaW5kZXggNmFmZGUwYjhkMC4uMzli NDAxYjU3NCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5j CisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYwpAQCAtMTMzLDcgKzEz Myw4IEBAIENyZWF0ZUV2ZW50VHJpZ2dlcihDcmVhdGVFdmVudFRyaWdTdG10ICpzdG10KQogCWlm IChzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAiZGRsX2NvbW1hbmRfc3RhcnQiKSAhPSAwICYmCiAJ CXN0cmNtcChzdG10LT5ldmVudG5hbWUsICJkZGxfY29tbWFuZF9lbmQiKSAhPSAwICYmCiAJCXN0 cmNtcChzdG10LT5ldmVudG5hbWUsICJzcWxfZHJvcCIpICE9IDAgJiYKLQkJc3RyY21wKHN0bXQt PmV2ZW50bmFtZSwgInRhYmxlX3Jld3JpdGUiKSAhPSAwKQorCQlzdHJjbXAoc3RtdC0+ZXZlbnRu YW1lLCAidGFibGVfcmV3cml0ZSIpICE9IDAgJiYKKwkJc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwg InRhYmxlX2luaXRfd3JpdGUiKSAhPSAwKQogCQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJjb2Rl KEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKIAkJCQkgZXJybXNnKCJ1bnJlY29nbml6ZWQgZXZlbnQg bmFtZSBcIiVzXCIiLApAQCAtMTU5LDcgKzE2MCw4IEBAIENyZWF0ZUV2ZW50VHJpZ2dlcihDcmVh dGVFdmVudFRyaWdTdG10ICpzdG10KQogCS8qIFZhbGlkYXRlIHRhZyBsaXN0LCBpZiBhbnkuICov CiAJaWYgKChzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAiZGRsX2NvbW1hbmRfc3RhcnQiKSA9PSAw IHx8CiAJCSBzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAiZGRsX2NvbW1hbmRfZW5kIikgPT0gMCB8 fAotCQkgc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgInNxbF9kcm9wIikgPT0gMCkKKwkJIHN0cmNt cChzdG10LT5ldmVudG5hbWUsICJzcWxfZHJvcCIpID09IDAgfHwKKwkJIHN0cmNtcChzdG10LT5l dmVudG5hbWUsICJ0YWJsZV9pbml0X3dyaXRlIikgPT0gMCkKIAkJJiYgdGFncyAhPSBOVUxMKQog CQl2YWxpZGF0ZV9kZGxfdGFncygidGFnIiwgdGFncyk7CiAJZWxzZSBpZiAoc3RyY21wKHN0bXQt PmV2ZW50bmFtZSwgInRhYmxlX3Jld3JpdGUiKSA9PSAwCkBAIC01ODUsNyArNTg3LDggQEAgRXZl bnRUcmlnZ2VyQ29tbW9uU2V0dXAoTm9kZSAqcGFyc2V0cmVlLAogCQlkYmd0YWcgPSBDcmVhdGVD b21tYW5kVGFnKHBhcnNldHJlZSk7CiAJCWlmIChldmVudCA9PSBFVlRfRERMQ29tbWFuZFN0YXJ0 IHx8CiAJCQlldmVudCA9PSBFVlRfRERMQ29tbWFuZEVuZCB8fAotCQkJZXZlbnQgPT0gRVZUX1NR TERyb3ApCisJCQlldmVudCA9PSBFVlRfU1FMRHJvcCB8fAorCQkJZXZlbnQgPT0gRVZUX1RhYmxl SW5pdFdyaXRlKQogCQl7CiAJCQlpZiAoIWNvbW1hbmRfdGFnX2V2ZW50X3RyaWdnZXJfb2soZGJn dGFnKSkKIAkJCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBjb21tYW5kIHRhZyBcIiVzXCIiLCBH ZXRDb21tYW5kVGFnTmFtZShkYmd0YWcpKTsKQEAgLTg2OCw2ICs4NzEsMTYzIEBAIEV2ZW50VHJp Z2dlclRhYmxlUmV3cml0ZShOb2RlICpwYXJzZXRyZWUsIE9pZCB0YWJsZU9pZCwgaW50IHJlYXNv bikKIAlDb21tYW5kQ291bnRlckluY3JlbWVudCgpOwogfQogCisKKy8qCisgKiBFdmVudFRyaWdn ZXJUYWJsZUluaXRXcml0ZVN0YXJ0CisgKiAgICAgUHJlcGFyZSB0byByZWNlaXZlIGRhdGEgb24g YW4gQ1JFQVRFIFRBQkxFIEFTL1NFTEVUIElOVE8gY29tbWFuZCBhYm91dAorICogICAgIHRvIGJl IGV4ZWN1dGVkLgorICovCit2b2lkCitFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZVN0YXJ0KE5v ZGUgKnBhcnNldHJlZSkKK3sKKwlNZW1vcnlDb250ZXh0IG9sZGN4dDsKKwlDb2xsZWN0ZWRDb21t YW5kICpjb21tYW5kOworCisJLyogaWdub3JlIGlmIGV2ZW50IHRyaWdnZXIgY29udGV4dCBub3Qg c2V0LCBvciBjb2xsZWN0aW9uIGRpc2FibGVkICovCisJaWYgKCFjdXJyZW50RXZlbnRUcmlnZ2Vy U3RhdGUgfHwKKwkJY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jb21tYW5kQ29sbGVjdGlvbklu aGliaXRlZCkKKwkJcmV0dXJuOworCisJb2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGN1 cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3h0KTsKKworCWNvbW1hbmQgPSBwYWxsb2Moc2l6ZW9m KENvbGxlY3RlZENvbW1hbmQpKTsKKworCWNvbW1hbmQtPnR5cGUgPSBTQ1RfQ3JlYXRlVGFibGVB czsKKwljb21tYW5kLT5pbl9leHRlbnNpb24gPSBjcmVhdGluZ19leHRlbnNpb247CisJY29tbWFu ZC0+ZC5jdGFzLmFkZHJlc3MgPSBJbnZhbGlkT2JqZWN0QWRkcmVzczsKKwljb21tYW5kLT5kLmN0 YXMucmVhbF9jcmVhdGUgPSBOVUxMOworCWNvbW1hbmQtPnBhcnNldHJlZSA9IGNvcHlPYmplY3Qo cGFyc2V0cmVlKTsKKworCWNvbW1hbmQtPnBhcmVudCA9IGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0 ZS0+Y3VycmVudENvbW1hbmQ7CisJY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29t bWFuZCA9IGNvbW1hbmQ7CisKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3h0KTsKK30KKwor LyoKKyAqIEV2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlRW5kCisgKgkJRmluaXNoIHVwIHNhdmlu ZyBhbiBDUkVBVEUgVEFCTEUgQVMvU0VMRUNUIElOVE8gY29tbWFuZC4KKyAqCisgKiBGSVhNRSB0 aGlzIEFQSSBpc24ndCBjb25zaWRlcmluZyB0aGUgcG9zc2liaWxpdHkgdGhhdCBhbiB4YWN0L3N1 YnhhY3QgaXMKKyAqIGFib3J0ZWQgcGFydHdheSB0aHJvdWdoLiAgUHJvYmFibHkgaXQncyBiZXN0 IHRvIGFkZCBhbgorICogQXRFT1N1YlhhY3RfRXZlbnRUcmlnZ2VycygpIHRvIGZpeCB0aGlzLgor ICovCit2b2lkCitFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZUVuZCh2b2lkKQoreworCUNvbGxl Y3RlZENvbW1hbmQgKnBhcmVudDsKKworCS8qIGlnbm9yZSBpZiBldmVudCB0cmlnZ2VyIGNvbnRl eHQgbm90IHNldCwgb3IgY29sbGVjdGlvbiBkaXNhYmxlZCAqLworCWlmICghY3VycmVudEV2ZW50 VHJpZ2dlclN0YXRlIHx8CisJCWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y29tbWFuZENvbGxl Y3Rpb25JbmhpYml0ZWQpCisJCXJldHVybjsKKworCXBhcmVudCA9IGN1cnJlbnRFdmVudFRyaWdn ZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQtPnBhcmVudDsKKworCXBmcmVlKGN1cnJlbnRFdmVudFRy aWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQpOworCisJY3VycmVudEV2ZW50VHJpZ2dlclN0YXRl LT5jdXJyZW50Q29tbWFuZCA9IHBhcmVudDsKK30KKworLyoKKyAqIHB1YmxpY2F0aW9uX2RlcGFy c2VfdGFibGVfaW5pdF93cml0ZQorICoKKyAqIERlcGFyc2UgdGhlIGRkbCB0YWJsZSBjcmVhdGUg Y29tbWFuZCBhbmQgbG9nIGl0LgorICovCitEYXR1bQorcHVibGljYXRpb25fZGVwYXJzZV90YWJs ZV9pbml0X3dyaXRlKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJY2hhcgkJCQlyZWxwZXJzaXN0Owor CUNvbGxlY3RlZENvbW1hbmQgICAqY21kOworCWNoYXIgICAJCQkgICAqanNvbl9zdHJpbmc7CisK KwlpZiAoIUNBTExFRF9BU19FVkVOVF9UUklHR0VSKGZjaW5mbykpCisJCWVsb2coRVJST1IsICJu b3QgZmlyZWQgYnkgZXZlbnQgdHJpZ2dlciBtYW5hZ2VyIik7CisKKwljbWQgPSBjdXJyZW50RXZl bnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kOworCUFzc2VydChjbWQpOworCisJcmVscGVy c2lzdCA9IGdldF9yZWxfcGVyc2lzdGVuY2UoY21kLT5kLnNpbXBsZS5hZGRyZXNzLm9iamVjdElk KTsKKworCS8qCisJICogRG8gbm90IGdlbmVyYXRlIHdhbCBsb2cgZm9yIGNvbW1hbmRzIHdob3Nl IHRhcmdldCB0YWJsZSBpcyBhIHRlbXBvcmFyeQorCSAqIHRhYmxlLgorCSAqCisJICogV2Ugd2ls bCBnZW5lcmF0ZSB3YWwgbG9ncyBmb3IgdW5sb2dnZWQgdGFibGVzIHNvIHRoYXQgdW5sb2dnZWQg dGFibGVzCisJICogY2FuIGFsc28gYmUgY3JlYXRlZCBhbmQgYWx0ZXJlZCBvbiB0aGUgc3Vic2Ny aWJlciBzaWRlLiBUaGlzIG1ha2VzIGl0CisJICogcG9zc2libGUgdG8gZGlyZWN0bHkgcmVwbGF5 IHRoZSBTRVQgTE9HR0VEIGNvbW1hbmQgYW5kIHRoZSBpbmNvbWluZworCSAqIHJld3JpdGUgbWVz c2FnZSB3aXRob3V0IGNyZWF0aW5nIGEgbmV3IHRhYmxlLgorCSAqLworCWlmIChyZWxwZXJzaXN0 ID09IFJFTFBFUlNJU1RFTkNFX1RFTVApCisJCXJldHVybiBQb2ludGVyR2V0RGF0dW0oTlVMTCk7 CisKKwkvKiBEZXBhcnNlIHRoZSBEREwgY29tbWFuZCBhbmQgV0FMIGxvZyBpdCB0byBhbGxvdyBk ZWNvZGluZyBvZiB0aGUgc2FtZS4gKi8KKwlqc29uX3N0cmluZyA9IGRlcGFyc2VfdXRpbGl0eV9j b21tYW5kKGNtZCwgZmFsc2UpOworCisJaWYgKGpzb25fc3RyaW5nICE9IE5VTEwpCisJCUxvZ0xv Z2ljYWxERExNZXNzYWdlKCJkZXBhcnNlIiwgY21kLT5kLnNpbXBsZS5hZGRyZXNzLm9iamVjdElk LCBEQ1RfU2ltcGxlQ21kLAorCQkJCQkJCSBqc29uX3N0cmluZywgc3RybGVuKGpzb25fc3RyaW5n KSArIDEpOworCisJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShOVUxMKTsKK30KKworLyoKKyAqIEZp cmUgdGFibGVfaW5pdF9yZXdyaXRlIHRyaWdnZXJzLgorICovCit2b2lkCitFdmVudFRyaWdnZXJU YWJsZUluaXRXcml0ZShOb2RlICpyZWFsX2NyZWF0ZSwgT2JqZWN0QWRkcmVzcyBhZGRyZXNzKQor eworCUxpc3QJICAgKnJ1bmxpc3Q7CisJRXZlbnRUcmlnZ2VyRGF0YSB0cmlnZGF0YTsKKwlDb2xs ZWN0ZWRDb21tYW5kICpjb21tYW5kOworCisJLyoKKwkgKiBTZWUgRXZlbnRUcmlnZ2VyRERMQ29t bWFuZFN0YXJ0IGZvciBhIGRpc2N1c3Npb24gYWJvdXQgd2h5IGV2ZW50CisJICogdHJpZ2dlcnMg YXJlIGRpc2FibGVkIGluIHNpbmdsZSB1c2VyIG1vZGUuCisJICovCisJaWYgKCFJc1VuZGVyUG9z dG1hc3RlcikKKwkJcmV0dXJuOworCisJLyoKKwkgKiBBbHNvIGRvIG5vdGhpbmcgaWYgb3VyIHN0 YXRlIGlzbid0IHNldCB1cCwgd2hpY2ggaXQgd29uJ3QgYmUgaWYgdGhlcmUKKwkgKiB3ZXJlbid0 IGFueSByZWxldmFudCBldmVudCB0cmlnZ2VycyBhdCB0aGUgc3RhcnQgb2YgdGhlIGN1cnJlbnQg RERMCisJICogY29tbWFuZC4gIFRoaXMgdGVzdCBtaWdodCB0aGVyZWZvcmUgc2VlbSBvcHRpb25h bCwgYnV0IGl0J3MKKwkgKiAqbmVjZXNzYXJ5KiwgYmVjYXVzZSBFdmVudFRyaWdnZXJDb21tb25T ZXR1cCBtaWdodCBmaW5kIHRyaWdnZXJzIHRoYXQKKwkgKiBkaWRuJ3QgZXhpc3QgYXQgdGhlIHRp bWUgdGhlIGNvbW1hbmQgc3RhcnRlZC4KKwkgKi8KKwlpZiAoIWN1cnJlbnRFdmVudFRyaWdnZXJT dGF0ZSkKKwkJcmV0dXJuOworCisJLyogRG8gbm90aGluZyBpZiBubyBjb21tYW5kIHdhcyBjb2xs ZWN0ZWQuICovCisJaWYgKCFjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5k KQorCQlyZXR1cm47CisKKwljb21tYW5kID0gY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJy ZW50Q29tbWFuZDsKKworCXJ1bmxpc3QgPSBFdmVudFRyaWdnZXJDb21tb25TZXR1cChjb21tYW5k LT5wYXJzZXRyZWUsCisJCQkJCQkJCQkgIEVWVF9UYWJsZUluaXRXcml0ZSwKKwkJCQkJCQkJCSAg InRhYmxlX2luaXRfd3JpdGUiLAorCQkJCQkJCQkJICAmdHJpZ2RhdGEpOworCWlmIChydW5saXN0 ID09IE5JTCkKKwkJcmV0dXJuOworCisJLyogU2V0IHRoZSByZWFsIENyZWF0ZVRhYmxlIHN0YXRt ZW50IGFuZCBvYmplY3QgYWRkcmVzcyAqLworCWNvbW1hbmQtPmQuY3Rhcy5yZWFsX2NyZWF0ZSA9 IHJlYWxfY3JlYXRlOworCWNvbW1hbmQtPmQuY3Rhcy5hZGRyZXNzID0gYWRkcmVzczsKKworCS8q IFJ1biB0aGUgdHJpZ2dlcnMuICovCisJRXZlbnRUcmlnZ2VySW52b2tlKHJ1bmxpc3QsICZ0cmln ZGF0YSk7CisKKwkvKiBDbGVhbnVwLiAqLworCWxpc3RfZnJlZShydW5saXN0KTsKKworCS8qCisJ ICogTWFrZSBzdXJlIGFueXRoaW5nIHRoZSBldmVudCB0cmlnZ2VycyBkaWQgd2lsbCBiZSB2aXNp YmxlIHRvIHRoZSBtYWluCisJICogY29tbWFuZC4KKwkgKi8KKwlDb21tYW5kQ291bnRlckluY3Jl bWVudCgpOworfQorCiAvKgogICogSW52b2tlIGVhY2ggZXZlbnQgdHJpZ2dlciBpbiBhIGxpc3Qg b2YgZXZlbnQgdHJpZ2dlcnMuCiAgKi8KQEAgLTExNDksNyArMTMwOSw4IEBAIHRyYWNrRHJvcHBl ZE9iamVjdHNOZWVkZWQodm9pZCkKIAkgKi8KIAlyZXR1cm4gKEV2ZW50Q2FjaGVMb29rdXAoRVZU X1NRTERyb3ApICE9IE5JTCkgfHwKIAkJKEV2ZW50Q2FjaGVMb29rdXAoRVZUX1RhYmxlUmV3cml0 ZSkgIT0gTklMKSB8fAotCQkoRXZlbnRDYWNoZUxvb2t1cChFVlRfRERMQ29tbWFuZEVuZCkgIT0g TklMKTsKKwkJKEV2ZW50Q2FjaGVMb29rdXAoRVZUX0RETENvbW1hbmRFbmQpICE9IE5JTCkgfHwK KwkJKEV2ZW50Q2FjaGVMb29rdXAoRVZUX1RhYmxlSW5pdFdyaXRlKSAhPSBOSUwpOwogfQogCiAv KgpAQCAtMTg2OCw2ICsyMDI5LDcgQEAgcGdfZXZlbnRfdHJpZ2dlcl9kZGxfY29tbWFuZHMoUEdf RlVOQ1RJT05fQVJHUykKIAkJCWNhc2UgU0NUX0FsdGVyT3BGYW1pbHk6CiAJCQljYXNlIFNDVF9D cmVhdGVPcENsYXNzOgogCQkJY2FzZSBTQ1RfQWx0ZXJUU0NvbmZpZzoKKwkJCWNhc2UgU0NUX0Ny ZWF0ZVRhYmxlQXM6CiAJCQkJewogCQkJCQljaGFyCSAgICppZGVudGl0eTsKIAkJCQkJY2hhcgkg ICAqdHlwZTsKQEAgLTE4ODUsNiArMjA0Nyw4IEBAIHBnX2V2ZW50X3RyaWdnZXJfZGRsX2NvbW1h bmRzKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCQkJCQlhZGRyID0gY21kLT5kLmNyZWF0ZW9wYy5hZGRy ZXNzOwogCQkJCQllbHNlIGlmIChjbWQtPnR5cGUgPT0gU0NUX0FsdGVyVFNDb25maWcpCiAJCQkJ CQlhZGRyID0gY21kLT5kLmF0c2NmZy5hZGRyZXNzOworCQkJCQllbHNlIGlmIChjbWQtPnR5cGUg PT0gU0NUX0FsdGVyVFNDb25maWcpCisJCQkJCQlhZGRyID0gY21kLT5kLmN0YXMuYWRkcmVzczsK IAogCQkJCQkvKgogCQkJCQkgKiBJZiBhbiBvYmplY3Qgd2FzIGRyb3BwZWQgaW4gdGhlIHNhbWUg Y29tbWFuZCB3ZSBtYXkgZW5kCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9wdWJs aWNhdGlvbmNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCmlu ZGV4IGVjOGM2N2YwM2UuLjg2MTJiODY0YjIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1h bmRzL3B1YmxpY2F0aW9uY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0 aW9uY21kcy5jCkBAIC05NzksNiArOTc5LDExIEBAIENyZWF0ZVB1YmxpY2F0aW9uKFBhcnNlU3Rh dGUgKnBzdGF0ZSwgQ3JlYXRlUHVibGljYXRpb25TdG10ICpzdG10KQogCQkJQ01EVEFHX0FMVEVS X0lOREVYCiAJCX07CiAKKwkJQ29tbWFuZFRhZwlpbml0X2NvbW1hbmRzW10gPSB7CisJCQlDTURU QUdfQ1JFQVRFX1RBQkxFX0FTLAorCQkJQ01EVEFHX1NFTEVDVF9JTlRPCisJCX07CisKIAkJLyog Q3JlYXRlIHRoZSBkZGxfY29tbWFuZF9lbmQgZXZlbnQgdHJpZ2dlciAqLwogCQlDcmVhdGVERExS ZXBsaWNhRXZlbnRUcmlnZ2VyKCJkZGxfY29tbWFuZF9lbmQiLCBlbmRfY29tbWFuZHMsCiAJCQkJ CQkJCQkgbGVuZ3Rob2YoZW5kX2NvbW1hbmRzKSwgbXlzZWxmLCBwdWJvaWQpOwpAQCAtOTkwLDYg Kzk5NSwxMCBAQCBDcmVhdGVQdWJsaWNhdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIENyZWF0ZVB1 YmxpY2F0aW9uU3RtdCAqc3RtdCkKIAkJLyogQ3JlYXRlIHRoZSB0YWJsZV9yZXdyaXRlIGV2ZW50 IHRyaWdnZXIgKi8KIAkJQ3JlYXRlRERMUmVwbGljYUV2ZW50VHJpZ2dlcigidGFibGVfcmV3cml0 ZSIsIHJld3JpdGVfY29tbWFuZHMsCiAJCQkJCQkJCQkgbGVuZ3Rob2YocmV3cml0ZV9jb21tYW5k cyksIG15c2VsZiwgcHVib2lkKTsKKworCQkvKiBDcmVhdGUgdGhlIHRhYmxlX2luaXRfd3JpdGUg ZXZlbnQgdHJpZ2dlciAqLworCQlDcmVhdGVERExSZXBsaWNhRXZlbnRUcmlnZ2VyKCJ0YWJsZV9p bml0X3dyaXRlIiwgaW5pdF9jb21tYW5kcywKKwkJCQkJCQkJCSBsZW5ndGhvZihpbml0X2NvbW1h bmRzKSwgbXlzZWxmLCBwdWJvaWQpOwogCX0KIAogCXRhYmxlX2Nsb3NlKHJlbCwgUm93RXhjbHVz aXZlTG9jayk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYyBiL3NyYy9i YWNrZW5kL3Rjb3AvdXRpbGl0eS5jCmluZGV4IGFhMDA4MTU3ODcuLmZiNWU2NzljMWYgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jCisrKyBiL3NyYy9iYWNrZW5kL3Rjb3Av dXRpbGl0eS5jCkBAIC0xNjY1LDggKzE2NjUsMTAgQEAgUHJvY2Vzc1V0aWxpdHlTbG93KFBhcnNl U3RhdGUgKnBzdGF0ZSwKIAkJCQlicmVhazsKIAogCQkJY2FzZSBUX0NyZWF0ZVRhYmxlQXNTdG10 OgorCQkJCUV2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlU3RhcnQocGFyc2V0cmVlKTsKIAkJCQlh ZGRyZXNzID0gRXhlY0NyZWF0ZVRhYmxlQXMocHN0YXRlLCAoQ3JlYXRlVGFibGVBc1N0bXQgKikg cGFyc2V0cmVlLAogCQkJCQkJCQkJCQlwYXJhbXMsIHF1ZXJ5RW52LCBxYyk7CisJCQkJRXZlbnRU cmlnZ2VyVGFibGVJbml0V3JpdGVFbmQoKTsKIAkJCQlicmVhazsKIAogCQkJY2FzZSBUX1JlZnJl c2hNYXRWaWV3U3RtdDoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL2V2dGNh Y2hlLmMgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9ldnRjYWNoZS5jCmluZGV4IGY3ZjcxNjVm N2YuLjdmYjhjYjI5MWQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL2V2dGNh Y2hlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvZXZ0Y2FjaGUuYwpAQCAtMTY3LDYg KzE2Nyw4IEBAIEJ1aWxkRXZlbnRUcmlnZ2VyQ2FjaGUodm9pZCkKIAkJCWV2ZW50ID0gRVZUX1NR TERyb3A7CiAJCWVsc2UgaWYgKHN0cmNtcChldnRldmVudCwgInRhYmxlX3Jld3JpdGUiKSA9PSAw KQogCQkJZXZlbnQgPSBFVlRfVGFibGVSZXdyaXRlOworCQllbHNlIGlmIChzdHJjbXAoZXZ0ZXZl bnQsICJ0YWJsZV9pbml0X3dyaXRlIikgPT0gMCkKKwkJCWV2ZW50ID0gRVZUX1RhYmxlSW5pdFdy aXRlOwogCQllbHNlCiAJCQljb250aW51ZTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0 YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKaW5kZXgg MmZiMzY1NGE2NC4uNDdhMzkzYTNhNSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9w Z19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CkBAIC0xMTgz NSw0ICsxMTgzNSw3IEBACiB7IG9pZCA9PiAnNDY0NicsIGRlc2NyID0+ICd0cmlnZ2VyIGZvciBk ZGwgY29tbWFuZCBkZXBhcnNlIHRhYmxlIHJld3JpdGUnLAogICBwcm9uYW1lID0+ICdwdWJsaWNh dGlvbl9kZXBhcnNlX3RhYmxlX3Jld3JpdGUnLCBwcm9yZXR0eXBlID0+ICdldmVudF90cmlnZ2Vy JywKICAgcHJvYXJndHlwZXMgPT4gJycsIHByb3NyYyA9PiAncHVibGljYXRpb25fZGVwYXJzZV90 YWJsZV9yZXdyaXRlJyB9LAoreyBvaWQgPT4gJzQ2NDcnLCBkZXNjciA9PiAndHJpZ2dlciBmb3Ig ZGRsIGNvbW1hbmQgZGVwYXJzZSB0YWJsZSBpbml0JywKKyAgcHJvbmFtZSA9PiAncHVibGljYXRp b25fZGVwYXJzZV90YWJsZV9pbml0X3dyaXRlJywgcHJvcmV0dHlwZSA9PiAnZXZlbnRfdHJpZ2dl cicsCisgIHByb2FyZ3R5cGVzID0+ICcnLCBwcm9zcmMgPT4gJ3B1YmxpY2F0aW9uX2RlcGFyc2Vf dGFibGVfaW5pdF93cml0ZScgfSwKIF0KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRz L2V2ZW50X3RyaWdnZXIuaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaApp bmRleCBmZDJlZTdmZmU0Li5hOWUwZjcxZjZhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21t YW5kcy9ldmVudF90cmlnZ2VyLmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJp Z2dlci5oCkBAIC01NSw2ICs1NSwxMCBAQCBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJERExDb21t YW5kRW5kKE5vZGUgKnBhcnNldHJlZSk7CiBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJTUUxEcm9w KE5vZGUgKnBhcnNldHJlZSk7CiBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJUYWJsZVJld3JpdGUo Tm9kZSAqcGFyc2V0cmVlLCBPaWQgdGFibGVPaWQsIGludCByZWFzb24pOwogCitleHRlcm4gdm9p ZCBFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZVN0YXJ0KE5vZGUgKnBhcnNldHJlZSk7CitleHRl cm4gdm9pZCBFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZShOb2RlICpwYXJzZXRyZWUsIE9iamVj dEFkZHJlc3MgYWRkcmVzcyk7CitleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0 ZUVuZCh2b2lkKTsKKwogZXh0ZXJuIGJvb2wgRXZlbnRUcmlnZ2VyQmVnaW5Db21wbGV0ZVF1ZXJ5 KHZvaWQpOwogZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyRW5kQ29tcGxldGVRdWVyeSh2b2lkKTsK IGV4dGVybiBib29sIHRyYWNrRHJvcHBlZE9iamVjdHNOZWVkZWQodm9pZCk7CmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oIGIvc3JjL2luY2x1ZGUvdGNvcC9k ZXBhcnNlX3V0aWxpdHkuaAppbmRleCBiNTMyOTRiZjU3Li4zZDI5NGEwMzcxIDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oCisrKyBiL3NyYy9pbmNsdWRlL3Rj b3AvZGVwYXJzZV91dGlsaXR5LmgKQEAgLTI5LDcgKzI5LDggQEAgdHlwZWRlZiBlbnVtIENvbGxl Y3RlZENvbW1hbmRUeXBlCiAJU0NUX0FsdGVyT3BGYW1pbHksCiAJU0NUX0FsdGVyRGVmYXVsdFBy aXZpbGVnZXMsCiAJU0NUX0NyZWF0ZU9wQ2xhc3MsCi0JU0NUX0FsdGVyVFNDb25maWcKKwlTQ1Rf QWx0ZXJUU0NvbmZpZywKKwlTQ1RfQ3JlYXRlVGFibGVBcwogfSBDb2xsZWN0ZWRDb21tYW5kVHlw ZTsKIAogLyoKQEAgLTEwMSw2ICsxMDIsMTIgQEAgdHlwZWRlZiBzdHJ1Y3QgQ29sbGVjdGVkQ29t bWFuZAogCQl7CiAJCQlPYmplY3RUeXBlCW9ianR5cGU7CiAJCX0JCQlkZWZwcml2czsKKworCQlz dHJ1Y3QKKwkJeworCQkJT2JqZWN0QWRkcmVzcyBhZGRyZXNzOworCQkJTm9kZQkJICpyZWFsX2Ny ZWF0ZTsKKwkJfQkJCWN0YXM7CiAJfQkJCWQ7CiAKIAlzdHJ1Y3QgQ29sbGVjdGVkQ29tbWFuZCAq cGFyZW50OwkvKiB3aGVuIG5lc3RlZCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMv ZXZ0Y2FjaGUuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL2V2dGNhY2hlLmgKaW5kZXggZGRiNjdhNjhm YS4uMWU2NDgzMTdhZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvZXZ0Y2FjaGUuaAor KysgYi9zcmMvaW5jbHVkZS91dGlscy9ldnRjYWNoZS5oCkBAIC0yMiw3ICsyMiw4IEBAIHR5cGVk ZWYgZW51bQogCUVWVF9ERExDb21tYW5kU3RhcnQsCiAJRVZUX0RETENvbW1hbmRFbmQsCiAJRVZU X1NRTERyb3AsCi0JRVZUX1RhYmxlUmV3cml0ZQorCUVWVF9UYWJsZVJld3JpdGUsCisJRVZUX1Rh YmxlSW5pdFdyaXRlCiB9IEV2ZW50VHJpZ2dlckV2ZW50OwogCiB0eXBlZGVmIHN0cnVjdAotLSAK Mi4zMi4wCgo= --00000000000056eb5505e991f569 Content-Type: text/x-patch; charset="US-ASCII"; name="v23-0004-Test-cases-for-DDL-replication.patch" Content-Disposition: attachment; filename="v23-0004-Test-cases-for-DDL-replication.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l8imiuvv3 RnJvbSBmZjE5NmMzMmFiMTMwMzMwM2MzZGJmMWFlYmUxZGFiOGVkM2E1ZDUxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFR1ZSwgMjAgU2VwIDIwMjIgMTA6MjY6MDkgLTA0MDAKU3ViamVjdDogW1BBVENI IHYyMyA0LzZdIFRlc3QgY2FzZXMgZm9yIERETCByZXBsaWNhdGlvbi4KCkF1dGhvcjogVGFrYW1p Y2hpIE9zdW1pCi0tLQogLi4uL3N1YnNjcmlwdGlvbi90LzAzMl9kZGxfcmVwbGljYXRpb24ucGwg ICAgIHwgNDY1ICsrKysrKysrKysrKysrKysrKwogMSBmaWxlIGNoYW5nZWQsIDQ2NSBpbnNlcnRp b25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDMyX2Rk bF9yZXBsaWNhdGlvbi5wbAoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAz Ml9kZGxfcmVwbGljYXRpb24ucGwgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMzJfZGRsX3Jl cGxpY2F0aW9uLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjY2ZGNi MDEyYTYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMzJfZGRs X3JlcGxpY2F0aW9uLnBsCkBAIC0wLDAgKzEsNDY1IEBACisjIENvcHlyaWdodCAoYykgMjAyMiwg UG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyMgUmVncmVzc2lvbiB0ZXN0cyBm b3IgbG9naWNhbCByZXBsaWNhdGlvbiBvZiBERExzCisjCit1c2Ugc3RyaWN0OwordXNlIHdhcm5p bmdzOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7Cit1c2UgUG9zdGdyZVNRTDo6VGVz dDo6VXRpbHM7Cit1c2UgVGVzdDo6TW9yZTsKKworbXkgJG5vZGVfcHVibGlzaGVyID0gUG9zdGdy ZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdwdWJsaXNoZXInKTsKKyRub2RlX3B1Ymxpc2hlci0+ aW5pdChhbGxvd3Nfc3RyZWFtaW5nID0+ICdsb2dpY2FsJyk7Ciskbm9kZV9wdWJsaXNoZXItPnN0 YXJ0OworCitteSAkbm9kZV9zdWJzY3JpYmVyID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+ bmV3KCdzdWJzY3JpYmVyJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5pbml0KGFsbG93c19zdHJlYW1p bmcgPT4gJ2xvZ2ljYWwnKTsKKyRub2RlX3N1YnNjcmliZXItPnN0YXJ0OworCitteSAkZGRsID0g IkNSRUFURSBUQUJMRSB0ZXN0X3JlcChpZCBpbnQgcHJpbWFyeSBrZXksIG5hbWUgdmFyY2hhciwg dmFsdWUgaW50ZWdlcik7IjsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICRkZGwpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJ TlRPIHRlc3RfcmVwIFZBTFVFUyAoMSwgJ2RhdGExJywgMSk7Iik7Ciskbm9kZV9zdWJzY3JpYmVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJGRkbCk7CisKK215ICRwdWJsaXNoZXJfY29ubnN0ciA9 ICRub2RlX3B1Ymxpc2hlci0+Y29ubnN0ciAuICcgZGJuYW1lPXBvc3RncmVzJzsKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBQVUJMSUNBVElPTiBteXB1 YiBGT1IgQUxMIFRBQkxFUyB3aXRoIChwdWJsaXNoID0gJ2luc2VydCwgdXBkYXRlLCBkZWxldGUs IGRkbCcpOyIpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNS RUFURSBTVUJTQ1JJUFRJT04gbXlzdWIgQ09OTkVDVElPTiAnJHB1Ymxpc2hlcl9jb25uc3RyJyBQ VUJMSUNBVElPTiBteXB1YjsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgn bXlzdWInKTsKKworIyBNYWtlIHN1cmUgd2UgaGF2ZSBmdWxseSBzeW5jaHJvbml6ZWQgdGhlIHRh YmxlLgorIyBUaGlzIHByZXZlbnRzIEFMVEVSIFRBQkxFIGNvbW1hbmQgYmVsb3cgZnJvbSBiZWlu ZyBleGVjdXRlZCBkdXJpbmcgdGFibGUgc3luY2hyb25pemF0aW9uLgorJG5vZGVfc3Vic2NyaWJl ci0+cG9sbF9xdWVyeV91bnRpbCgncG9zdGdyZXMnLAorICAgIlNFTEVDVCBDT1VOVCgxKSA9IDAg RlJPTSBwZ19zdWJzY3JpcHRpb25fcmVsIHNyIFdIRVJFIHNyLnNyc3Vic3RhdGUgTk9UIElOICgn cycsICdyJykgQU5EIHNyLnNycmVsaWQgPSAndGVzdF9yZXAnOjpyZWdjbGFzcyIKKyk7CisKKyMg VGVzdCBBTFRFUiBUQUJMRSBBREQKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJBTFRFUiBUQUJMRSB0ZXN0X3JlcCBBREQgYzQgaW50OyIpOworJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRlc3RfcmVwIFZBTFVFUyAoMiwg J2RhdGEyJywgMiwgMik7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215 c3ViJyk7CitteSAkcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3JlcCBXSEVSRSBjNCA9IDI7Iik7Citpcygk cmVzdWx0LCBxcSgxKSwgJ0FMVEVSIHRlc3RfcmVwIEFERCByZXBsaWNhdGVkJyk7CisKKyMgVGVz dCBBTFRFUiBUQUJMRSBEUk9QCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiQUxURVIgVEFCTEUgdGVzdF9yZXAgRFJPUCBjNDsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJERUxFVEUgRlJPTSB0ZXN0X3JlcCB3aGVyZSBpZCA9IDI7Iik7 Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0ID0g JG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikg ZnJvbSB0ZXN0X3JlcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnQUxURVIgdGVzdF9yZXAgRFJP UCByZXBsaWNhdGVkJyk7CisKKyMgVGVzdCBBTFRFUiBUQUJMRSBBTFRFUiBUWVBFCiskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQUxURVIgVEFCTEUgdGVzdF9yZXAgQUxU RVIgdmFsdWUgVFlQRSB2YXJjaGFyIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiSU5TRVJUIElOVE8gdGVzdF9yZXAgVkFMVUVTICgzLCAnZGF0YTMnLCAnMycpOyIp OworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9 ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCop IEZST00gdGVzdF9yZXAgV0hFUkUgdmFsdWUgPSAnMyc7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwg J0FMVEVSIHRlc3RfcmVwIEFMVEVSIENPTFVNTiBUWVBFIHJlcGxpY2F0ZWQnKTsKKworIyBUZXN0 IEFMVEVSIFRBQkxFIEFMVEVSIFNFVCBERUZBVUxUCisjIENoZWNrIGlmIHdlIGhhdmUgdGhlIGRl ZmF1bHQgdmFsdWUgYWZ0ZXIgdGhlIGRpcmVjdCBpbnNlcnQgdG8gc3Vic2NyaWJlciBub2RlLgor JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkFMVEVSIFRBQkxFIHRlc3Rf cmVwIEFMVEVSIENPTFVNTiB2YWx1ZSBTRVQgREVGQVVMVCAnZm9vJyIpOworJG5vZGVfcHVibGlz aGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDQsICdkYXRhNCcp OyIpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi U0VMRUNUIHZhbHVlIEZST00gdGVzdF9yZXAgV0hFUkUgaWQgPSA0OyIpOworaXMoJHJlc3VsdCwg J2ZvbycsICdBTFRFUiB0ZXN0X3JlcCBBTFRFUiBTRVQgREVGQVVMVCByZXBsaWNhdGVkJyk7CisK KyMgVGVzdCBBTFRFUiBUQUJMRSBBTFRFUiBEUk9QIERFRkFVTFQKKyMgQ2hlY2sgaWYgd2UgZG9u J3QgaGF2ZSB0aGUgZGVmYXVsdCB2YWx1ZSBwcmV2aW91c2x5IGRlZmluZWQuCiskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQUxURVIgVEFCTEUgdGVzdF9yZXAgQUxURVIg Q09MVU1OIHZhbHVlIERST1AgREVGQVVMVDsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3Jf Y2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiSU5TRVJUIElOVE8gdGVzdF9yZXAgVkFMVUVTICg1LCAnZGF0YTUnKTsiKTsKKyRyZXN1bHQg PSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCB2YWx1ZSBJ UyBOVUxMIEZST00gdGVzdF9yZXAgV0hFUkUgaWQgPSA1OyIpOworaXMoJHJlc3VsdCwgcSh0KSwg J0FMVEVSIHRlc3RfcmVwIEFMVEVSIERST1AgREVGQVVMVCByZXBsaWNhdGVkJyk7CisKKyMgVGVz dCBBTFRFUiBUQUJMRSBBTFRFUiBTRVQgTk9UIE5VTEwKKyMgUmVtb3ZlIHRoZSBleGlzdGluZyBy ZWNvcmQgdGhhdCBjb250YWlucyBudWxsIHZhbHVlIGZpcnN0LgorbXkgKCRzdGRvdXQsICRzdGRl cnIpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJERUxFVEUgRlJP TSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDU7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiQUxURVIgVEFCTEUgdGVzdF9yZXAgQUxURVIgdmFsdWUgU0VUIE5PVCBOVUxM OyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVf c3Vic2NyaWJlci0+cHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdGVzdF9yZXAgVkFMVUVT ICg2LCAnZGF0YTYnKTsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0 ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIg PX4gL0VSUk9SOiAgbnVsbCB2YWx1ZSBpbiBjb2x1bW4gXCJ2YWx1ZVwiIG9mIHJlbGF0aW9uIFwi dGVzdF9yZXBcIiB2aW9sYXRlcyBub3QtbnVsbCBjb25zdHJhaW50LworICBvciBkaWUgImZhaWxl ZCB0byByZXBsaWNhdGUgQUxURVIgVEFCTEUgQUxURVIgU0VUIE5PVCBOVUxMIjsKKworIyBUZXN0 IEFMVEVSIFRBQkxFIEFMVEVSIERST1AgTk9UIE5VTEwKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJBTFRFUiBUQUJMRSB0ZXN0X3JlcCBBTFRFUiB2YWx1ZSBEUk9QIE5P VCBOVUxMOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOwor IyBJbnNlcnQgc2FtZSBkYXRhIHRoYXQgaGFzIE5VTEwgdmFsdWUuIFRoaXMgZmFpbGVkIGJlZm9y ZSBidXQgbm93IHNob3VsZCBzdWNjZWVkLgorJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDYsICdkYXRhNicpOyIpOwor JHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNU IHZhbHVlIElTIE5VTEwgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDY7Iik7CitpcygkcmVzdWx0 LCBxKHQpLCAiQUxURVIgdGVzdF9yZXAgQUxURVIgRFJPUCBOT1QgTlVMTCByZXBsaWNhdGVkIik7 CisKKyMgVGVzdCBBTFRFUiBUQUJMRSBTRVQgVU5MT0dHRUQKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICdBTFRFUiBUQUJMRSB0ZXN0X3JlcCBTRVQgVU5MT0dHRUQ7Jyk7 Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdGVzdF9yZXAgVkFMVUVT ICg3LCAnZGF0YTcnLCAnNycpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVw KCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00gdGVzdF9yZXAgV0hFUkUgaWQgPSA3OyIpOworaXMo JHJlc3VsdCwgcXEoMCksICdBTFRFUiB0ZXN0X3JlcCBTRVQgVU5MT0dHRUQgcmVwbGljYXRlZCcp OworCisjIFRlc3QgQUxURVIgVEFCTEUgU0VUIExPR0dFRAorJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgJ0FMVEVSIFRBQkxFIHRlc3RfcmVwIFNFVCBMT0dHRUQ7Jyk7Cisk bm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdGVzdF9yZXAgVkFMVUVTICg4 LCAnZGF0YTgnLCAnOCcpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdt eXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiU0VMRUNUIGNvdW50KCopIEZST00gdGVzdF9yZXAgV0hFUkUgaWQgPSA4OyIpOworaXMoJHJl c3VsdCwgcXEoMSksICdBTFRFUiB0ZXN0X3JlcCBTRVQgTE9HR0VEIHJlcGxpY2F0ZWQnKTsKKwor IyBUZXN0IENSRUFURSBUQUJMRSBhbmQgRE1MIGNoYW5nZXMKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChhIGludCwgYiB2YXJjaGFyKTsi KTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQg PSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgq KSBmcm9tIHBnX3RhYmxlcyB3aGVyZSB0YWJsZW5hbWUgPSAndG1wJzsiKTsKK2lzKCRyZXN1bHQs IHFxKDEpLCAnQ1JFQVRFIHRtcCBpcyByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIHZhbHVlcyAoMSwgJ2EnKSIpOwor JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCB2 YWx1ZXMgKDIsICdiJykiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlz dWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IlNFTEVDVCBjb3VudCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDIpLCAnRE1MIENo YW5nZXMgdG8gdG1wIGFyZSByZXBsaWNhdGVkJyk7CisKKyMgVGVzdCBDUkVBVEUgVEFCTEUgSU5I RVJJVFMKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFC TEUgdG1wMiAoYzMgaW50KSBJTkhFUklUUyAodG1wKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAyIFZBTFVFUyAoMSwgJ2EnLCAxKTsi KTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQg PSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgq KSBmcm9tIHBnX3RhYmxlcyB3aGVyZSB0YWJsZW5hbWUgPSAndG1wMic7Iik7CitpcygkcmVzdWx0 LCBxcSgxKSwgJ0NSRUFURSBUQUJMRSBJTkhFUklUUyBpcyByZXBsaWNhdGVkJyk7CiskcmVzdWx0 ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQo KikgZnJvbSB0bXAyOyIpOworaXMoJHJlc3VsdCwgcXEoMSksICdpbnNlcnRpbmcgc29tZSBkYXRh IHRvIGluaGVyaXRlZCB0YWJsZSByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAyIik7CisKKyMgVGVzdCBDUkVBVEUgVEFC TEUgTElLRQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBU QUJMRSB0bXAzIChjMyBpbnQsIExJS0UgdG1wKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAzIFZBTFVFUyAoMSwgMSwgJ2EnKTsiKTsK KyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAk bm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBm cm9tIHBnX3RhYmxlcyB3aGVyZSB0YWJsZW5hbWUgPSAndG1wMyc7Iik7CitpcygkcmVzdWx0LCBx cSgxKSwgJ0NSRUFURSBUQUJMRSBMSUtFIHJlcGxpY2F0ZWQnKTsKKyRyZXN1bHQgPSAkbm9kZV9z dWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHRt cDM7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ2luc2VydCBzb21lIGRhdGEgdG8gYSB0YWJsZSBk ZWZpbmVkIHdpdGggTElLRSByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAzIik7CisKKyMgVGVzdCBEUk9QIFRBQkxFCisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXA7Iik7 Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0ID0g JG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikg ZnJvbSBwZ190YWJsZXMgd2hlcmUgdGFibGVuYW1lID0gJ3RtcCc7Iik7CitpcygkcmVzdWx0LCBx cSgwKSwgJ1RBQkxFIHRtcCBpcyBkcm9wcGVkJyk7CisKKyMgVGVzdCBDUkVBVEUgVU5MT0dHRUQg VEFCTEUKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVU5M T0dHRUQgVEFCTEUgdG1wIChpZCBpbnQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIpOworJG5vZGVfcHVibGlz aGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmli ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20gcGdfdGFibGVz IHdoZXJlIHRhYmxlbmFtZSA9ICd0bXAnOyIpOworaXMoJHJlc3VsdCwgcXEoMSksICdDUkVBVEUg VU5MT0dHRUQgVEFCTEUgaXMgcmVwbGljYXRlZCBjb3JyZWN0bHknKTsKKyRyZXN1bHQgPSAkbm9k ZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9t IHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDApLCAnaW5zZXJ0aW5nIGRhdGEgdG8gdW5sb2dnZWQg dGFibGUgaXMgbm90IHJlcGxpY2F0ZWQgY29ycmVjdGx5Jyk7Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAiKTsKKworIyBUZXN0IENSRUFURSBU QUJMRSBJRiBOT1QgRVhJU1RTCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgdG1wIChpZCBpbnQpOyIpOworJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEp OyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3Vs dCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50 KCopIGZyb20gcGdfdGFibGVzIHdoZXJlIHRhYmxlbmFtZSA9ICd0bXAnOyIpOworaXMoJHJlc3Vs dCwgcXEoMSksICdDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyByZXBsaWNhdGVkJyk7CiskcmVz dWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291 bnQoKikgZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ2luc2VydGluZyBkYXRhIHRv IGEgdGFibGUgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIkRST1AgVEFCTEUgdG1wIik7CisKKyMgVGVzdCBDUkVBVEUgVEFCTEUgSUYgTk9UIEVY SVNUUyAoY2hlY2sgaWYgd2Ugc2tpcCB0byBjcmVhdGUgYSB0YWJsZQorIyB3aGVuIHdlIGhhdmUg dGhlIHRhYmxlIG9uIHRoZSBzdWJzY3JpYmVyIGluIGFkdmFuY2UsIGFuZCBpZiB3ZSBzdWNjZWVk CisjIGluIHJlcGxpY2F0aW5nIGNoYW5nZXMuKQorJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBpbnQpOyIpOworJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHRt cCAoaWQgaW50KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJ TlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3Jf Y2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFx KDEpLCAnQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgcmVwbGljYXRlZCcpOworJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7CisKKyMgVGVz dCBDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyAoY2hlY2sgaWYgd2Ugc2tpcCB0byBjcmVhdGUg YSB0YWJsZQorIyB3aGVuIHdlIGhhdmUgdGhlIHRhYmxlIG9uIHRoZSBwdWJsaXNoZXIsIGJ1dCBu b3Qgb24gdGhlIHN1YnNjcmliZXIuKQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgdG1wIChpZCBp bnQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJ TlRPIHRtcCBWQUxVRVMgKDEpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVw KCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoMSksICdD UkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAiKTsKKworIyBUZXN0IENSRUFU RSBUQUJMRSB3aXRoIGNvbGxhdGUKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJDUkVBVEUgVEFCTEUgdG1wIChuYW1lIHRleHQgQ09MTEFURSBcIkNcIik7Iik7Ciskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVF UyAoJ2ZvbycpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1Yicp OworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VM RUNUIGNvbGxhdGlvbl9uYW1lIEZST00gaW5mb3JtYXRpb25fc2NoZW1hLmNvbHVtbnMgV0hFUkUg dGFibGVfbmFtZSA9ICd0bXAnOyIpOworaXMoJHJlc3VsdCwgcXEoQyksICdDUkVBVEUgVEFCTEUg d2l0aCBjb2xsYXRlIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOworCisjIFRlc3QgQ1JFQVRFIFRBQkxFIHdpdGgg bmFtZWQgY29uc3RyYWludAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCBDT05TVFJBSU5UIFwibXVzdCBiZSBiaWdnZXIgdGhh biAxMFwiIENIRUNLIChpZCA+IDEwKSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2Nh dGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJJTlNF UlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJ CQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsK KyRzdGRlcnIgPX4gL0VSUk9SOiAgbmV3IHJvdyBmb3IgcmVsYXRpb24gInRtcCIgdmlvbGF0ZXMg Y2hlY2sgY29uc3RyYWludCAibXVzdCBiZSBiaWdnZXIgdGhhbiAxMCIvCisgIG9yIGRpZSAiZmFp bGVkIHRvIHJlcGxpY2F0ZSBuYW1lZCBjb25zdHJhaW50IGF0IGNyZWF0aW5nIHRhYmxlIjsKKyRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDsiKTsK KworIyBUZXN0IENSRUFURSBUQUJMRSB3aXRoIHZhcmlvdXMgdHlwZXMgb2YgY29uc3RyYWludHMu CisjIE5PVCBOVUxMIGNvbnN0cmFpbnQKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBpbnQsIG5hbWUgdGV4dCBOT1QgTlVMTCk7Iik7 Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJz Y3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiLAor CQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwK KwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgbnVsbCB2 YWx1ZSBpbiBjb2x1bW4gIm5hbWUiIG9mIHJlbGF0aW9uICJ0bXAiIHZpb2xhdGVzIG5vdC1udWxs IGNvbnN0cmFpbnQvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxpY2F0ZSBub24gbnVsbCBjb25z dHJhaW50IGF0IGNyZWF0aW5nIHRhYmxlIjsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDsiKTsKKworIyBOVUxMIGNvbnN0cmFpbnQKKyRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBp bnQsIG5hbWUgdGV4dCBOVUxMKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1 cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5T RVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7Iik7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgbmFtZSBJUyBOVUxMIEZST00gdG1wOyIpOwor aXMoJHJlc3VsdCwgcXEodCksICJDUkVBVEUgVEFCTEUgd2l0aCBOVUxMIGNvbnN0cmFpbnQgcmVw bGljYXRlZCIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1Ag VEFCTEUgdG1wIik7CisKKyMgQ0hFQ0sgY29uc3RyYWludAorJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCwgcHJvZHVjdF9hbWUg dGV4dCwgcHJpY2UgaW50IENIRUNLIChwcmljZSA+IDApKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+ d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnBzcWwoJ3Bvc3Rn cmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEsICdmb28nLCAtMTAwKTsiLAorCQkJCQkg ICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJ ICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgbmV3IHJvdyBmb3Ig cmVsYXRpb24gInRtcCIgdmlvbGF0ZXMgY2hlY2sgY29uc3RyYWludCAidG1wX3ByaWNlX2NoZWNr Ii8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVwbGljYXRlIENIRUNLIGNvbnN0cmFpbnQiOworJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOwor CisjIERFRkFVTFQKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVB VEUgVEFCTEUgdG1wIChpZCBpbnQsIG5hbWUgdGV4dCBERUZBVUxUICdmb28nKTsiKTsKKyRub2Rl X3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7Iik7Cisk cmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1Qg bmFtZSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKGZvbyksICJDUkVBVEUgVEFCTEUgd2l0 aCBkZWZhdWx0IHZhbHVlIHJlcGxpY2F0ZWQiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOworCisjIFVOSVFVRSBjb25zdHJhaW50Cisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAo aWQgaW50IFVOSVFVRSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRf Zm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5wc3FsKCdwb3N0Z3Jlcycs ICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+ IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rk b3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgZHVwbGljYXRlIGtleSB2YWx1ZSB2aW9sYXRlcyB1 bmlxdWUgY29uc3RyYWludCAidG1wX2lkX2tleSIvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxp Y2F0ZSBjb25zdHJhaW50IGF0IGNyZWF0aW5nIHRhYmxlIjsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDsiKTsKKworIyBQUklNQVJZIEtFWQor JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAg KGlkIGludCBQUklNQVJZIEtFWSwgbmFtZSB0ZXh0KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxLCAnZm9vJyk7Iik7 Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJz Y3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxLCAnYmFy Jyk7IiwKKwkJCQkJICAgb25fZXJyb3Jfc3RvcCA9PiAwLAorCQkJCQkgICBzdGRlcnIgPT4gXCRz dGRlcnIsCisJCQkJCSAgIHN0ZG91dCA9PiBcJHN0ZG91dCk7Ciskc3RkZXJyID1+IC9FUlJPUjog IGR1cGxpY2F0ZSBrZXkgdmFsdWUgdmlvbGF0ZXMgdW5pcXVlIGNvbnN0cmFpbnQgInRtcF9wa2V5 Ii8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVwbGljYXRlIHByaW1hcnkga2V5IGF0IGNyZWF0aW5n IHRhYmxlIjsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRB QkxFIHRtcDsiKTsKKworIyBFWENMVURFCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiQ1JFQVRFIFRBQkxFIGNpcmNsZXMgKGMgY2lyY2xlLCBFWENMVURFIFVTSU5HIGdp c3QgKGMgV0lUSCAmJikpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIklOU0VSVCBJTlRPIGNpcmNsZXMgVkFMVUVTICgnPCgxLCAxKSwgMT4nOjpjaXJjbGUpOyIp OworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vi c2NyaWJlci0+cHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gY2lyY2xlcyBWQUxVRVMgKCc8 KDEsIDEpLCAxPic6OmNpcmNsZSk7IiwKKwkJCQkJICAgb25fZXJyb3Jfc3RvcCA9PiAwLAorCQkJ CQkgICBzdGRlcnIgPT4gXCRzdGRlcnIsCisJCQkJCSAgIHN0ZG91dCA9PiBcJHN0ZG91dCk7Cisk c3RkZXJyID1+IC9FUlJPUjogIGNvbmZsaWN0aW5nIGtleSB2YWx1ZSB2aW9sYXRlcyBleGNsdXNp b24gY29uc3RyYWludCAiY2lyY2xlc19jX2V4Y2wiLworICBvciBkaWUgImZhaWxlZCB0byByZXBs aWNhdGUgRVhDTFVERSBhdCBjcmVhdGluZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSBjaXJjbGVzIik7CisKKyMgUkVGRVJFTkNFUwor JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSBwcm9k dWN0IChpZCBpbnQgUFJJTUFSWSBLRVksIG5hbWUgdGV4dCk7Iik7Ciskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gcHJvZHVjdCBWQUxVRVMgKDEsICdm b28nKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQg SU5UTyBwcm9kdWN0IFZBTFVFUyAoMiwgJ2JhcicpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSBvcmRlcnMgKG9yZGVyX2lkIGludCBQUklN QVJZIEtFWSwgcHJvZHVjdF9pZCBpbnQgUkVGRVJFTkNFUyBwcm9kdWN0IChpZCkpIik7Ciskbm9k ZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVy LT5wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyBvcmRlcnMgVkFMVUVTICgxLCAxMCkiLAor CQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwK KwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgaW5zZXJ0 IG9yIHVwZGF0ZSBvbiB0YWJsZSAib3JkZXJzIiB2aW9sYXRlcyBmb3JlaWduIGtleSBjb25zdHJh aW50ICJvcmRlcnNfcHJvZHVjdF9pZF9ma2V5Ii8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVwbGlj YXRlIFJFRkVSRU5DRVMgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgb3JkZXJzIik7Ciskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSBwcm9kdWN0Iik7CisKKyMgREVGRVJS QUJMRQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJM RSB0bXAgKGlkIGludCBQUklNQVJZIEtFWSBERUZFUlJBQkxFLCBuYW1lIHRleHQpOyIpOworJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxV RVMgKDEsICdmb28nKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgyLCAnYmFyJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXIt PndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CisjIFF1aWNrIGNoZWNrIG9mIGRlZmVycmFibGUg Y2xhdXNlCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlVQREFURSB0 bXAgU0VUIGlkID0gaWQgKyAxOyIpOworIyBBbHNvLCBleGVjdXRlIGEgdGVzdCB0aGF0IHNob3Vs ZCBmYWlsIGZvciBJTklUSUFMTFkgSU1NRURJQVRFKHRoZSBkZWZhdWx0KQorJG5vZGVfc3Vic2Ny aWJlci0+cHNxbCgncG9zdGdyZXMnLCBxcSgKK0JFR0lOOworVVBEQVRFIHRtcCBTRVQgaWQgPSBp ZCArIDE7CitJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgzLCAnZm9vYmFyJyk7CitERUxFVEUgRlJP TSB0bXAgV0hFUkUgaWQgPSAzOworQ09NTUlUOworKSwgb25fZXJyb3Jfc3RvcCA9PiAwLCBzdGRl cnIgPT4gXCRzdGRlcnIsIHN0ZG91dCA9PiBcJHN0ZG91dCk7Ciskc3RkZXJyID1+IC9FUlJPUjog IGR1cGxpY2F0ZSBrZXkgdmFsdWUgdmlvbGF0ZXMgdW5pcXVlIGNvbnN0cmFpbnQgInRtcF9wa2V5 Ii8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVwbGljYXRlIERFRkVSUkFCTEUgYXQgY3JlYXRpbmcg dGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFC TEUgdG1wOyIpOworCisjIE5PVCBERUZFUlJBQkxFCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50IFBSSU1BUlkgS0VZIE5PVCBE RUZFUlJBQkxFLCBuYW1lIHRleHQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEsICdmb28nKTsiKTsKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgy LCAnYmFyJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7 Ciskbm9kZV9zdWJzY3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJVUERBVEUgdG1wIFNFVCBpZCA9 IGlkICsgMTsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9 PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VS Uk9SOiAgZHVwbGljYXRlIGtleSB2YWx1ZSB2aW9sYXRlcyB1bmlxdWUgY29uc3RyYWludCAidG1w X3BrZXkiLworICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgTk9UIERFRkVSUkFCTEUgYXQg Y3JlYXRpbmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IkRST1AgVEFCTEUgdG1wOyIpOworCisjIERFRkVSUkFCTEUgYW5kIElOSVRJQUxMWSBERUZFUlJF RAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0 bXAgKGlkIGludCBQUklNQVJZIEtFWSBERUZFUlJBQkxFIElOSVRJQUxMWSBERUZFUlJFRCwgbmFt ZSB0ZXh0KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNF UlQgSU5UTyB0bXAgVkFMVUVTICgxLCAnZm9vJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMiwgJ2JhcicpOyIpOwor JG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworIyBRdWljayBjaGVj ayBvZiBkZWZlcnJhYmxlIGNsYXVzZQorJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJVUERBVEUgdG1wIFNFVCBpZCA9IGlkICsgMTsiKTsKKyMgQWxzbywgZXhlY3V0ZSBh IHRlc3QgdGhhdCBzaG91bGQgc3VjY2VlZCBmb3IgSU5JVElBTExZIERFRkVSUkVECiskbm9kZV9z dWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCitCRUdJTjsKK1VQREFURSB0bXAg U0VUIGlkID0gaWQgKyAxOworSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMywgJ2Zvb2JhcicpOwor REVMRVRFIEZST00gdG1wIFdIRVJFIGlkID0gMzsKK0NPTU1JVDsKKykpOworJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisjIFRlc3Qg Q1JFQVRFIFRBQkxFIHdpdGggdGFibGUgY29uc3RyYWludAorIyBXZSB3aWxsIHNldCB0d28gY2hl Y2tzIGFuZCBjb25kdWN0IHR3byBpbnNlcnRzIHRoYXQgc2hvdWxkIGZhaWwgcmVzcGVjdGl2ZWx5 LgorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFRBQkxF IHRtcCAocHJpY2UgaW50LCBkaXNjb3VudGVkX3ByaWNlIGludCwgQ0hFQ0sgKGRpc2NvdW50ZWRf cHJpY2UgPiAwIEFORCBwcmljZSA+IGRpc2NvdW50ZWRfcHJpY2UpKTsiKTsKKyRub2RlX3B1Ymxp c2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnBzcWwo J3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEwMCwgMCk7IiwKKwkJCQkJICAg b25fZXJyb3Jfc3RvcCA9PiAwLAorCQkJCQkgICBzdGRlcnIgPT4gXCRzdGRlcnIsCisJCQkJCSAg IHN0ZG91dCA9PiBcJHN0ZG91dCk7Ciskc3RkZXJyID1+IC9FUlJPUjogIG5ldyByb3cgZm9yIHJl bGF0aW9uICJ0bXAiIHZpb2xhdGVzIGNoZWNrIGNvbnN0cmFpbnQgInRtcF9jaGVjayIvCisgIG9y IGRpZSAiZmFpbGVkIHRvIHJlcGxpY2F0ZSB0YWJsZSBjb25zdHJhaW50IChmaXJzdCBjb25kaXRp b24pIGF0IGNyZWF0aW5nIHRhYmxlIjsKKyRub2RlX3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVz JywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDUwLCAxMDApOyIsCisJCQkJCSAgIG9uX2Vycm9y X3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQg PT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBuZXcgcm93IGZvciByZWxhdGlvbiAi dG1wIiB2aW9sYXRlcyBjaGVjayBjb25zdHJhaW50ICJ0bXBfY2hlY2siLworICBvciBkaWUgImZh aWxlZCB0byByZXBsaWNhdGUgdGFibGUgY29uc3RyYWludCAoc2Vjb25kIGNvbmRpdGlvbikgYXQg Y3JlYXRpbmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IkRST1AgVEFCTEUgdG1wOyIpOworCisjIFRlc3QgQ1JFQVRFIFRBQkxFIFdJVEggc3Ryb3JhZ2Vf cGFyYW1ldGVyCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRF IFRBQkxFIHRtcCAoaWQgaW50KSBXSVRIIChmaWxsZmFjdG9yID0gODApOyIpOworJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEp OyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVf c3Vic2NyaWJlci0+cHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIHJlbG9wdGlvbnMgRlJPTSBwZ19j bGFzcyBXSEVSRSByZWxuYW1lID0gJ3RtcCc7IiwKKwkJCQkJICAgb25fZXJyb3Jfc3RvcCA9PiAw LAorCQkJCQkgICBzdGRlcnIgPT4gXCRzdGRlcnIsCisJCQkJCSAgIHN0ZG91dCA9PiBcJHN0ZG91 dCk7Ciskc3Rkb3V0ID1+IC97ZmlsbGZhY3Rvcj04MH0vCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJl cGxpY2F0ZSBzdG9yYWdlIG9wdGlvbiI7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgZnJvbSB0bXA7Iik7CitpcygkcmVz dWx0LCBxcSgxKSwgJ0NSRUFURSBUQUJMRSB3aXRoIHN0b3JhZ2VfcGFyYW1ldGVyIHJlcGxpY2F0 ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxF IHRtcDsiKTsKKworIyBUZXN0IENSRUFURSBUQUJMRSBUQUJMRVNQQUNFIChjcmVhdGluZyBhIHRh Ymxlc3BhY2UgaXMgbm90IHJlcGxpY2F0ZWQpCisjIFByZXBhcmUgdGhlIGRpcmVjdG9yaWVzIGZv ciB0aGUgcHVibGlzaGVyIGFuZCBzdWJzY3JpYmVyIGZpcnN0LgorbXkgKCRiYXNlZGlyLCAkdGFi bGVzcGFjZV9kaXIpOworCiskYmFzZWRpciA9ICRub2RlX3B1Ymxpc2hlci0+YmFzZWRpcjsKKyR0 YWJsZXNwYWNlX2RpciA9ICIkYmFzZWRpci90YmxzcGNfcHViIjsKK21rZGlyKCR0YWJsZXNwYWNl X2Rpcik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRB QkxFU1BBQ0UgbXl0YmxzcGMgTE9DQVRJT04gJyR0YWJsZXNwYWNlX2Rpcic7Iik7CiskYmFzZWRp ciA9ICRub2RlX3N1YnNjcmliZXItPmJhc2VkaXI7CiskdGFibGVzcGFjZV9kaXIgPSAiJGJhc2Vk aXIvdGJsc3BjX3N1YiI7Citta2RpciAoJHRhYmxlc3BhY2VfZGlyKTsKKyRub2RlX3N1YnNjcmli ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFU1BBQ0UgbXl0YmxzcGMgTE9D QVRJT04gJyR0YWJsZXNwYWNlX2Rpcic7Iik7CisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBpbnQpIFRBQkxFU1BBQ0UgbXl0Ymxz cGM7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElO VE8gdG1wIFZBTFVFUyAoMSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAo J215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJTRUxFQ1QgY291bnQoKikgZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ0NS RUFURSBUQUJMRSBUQUJMRVNQQUNFIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDsiKTsKKworIyBUZXN0IENSRUFURSBU WVBFCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRZUEUg bXl0eXBlIEFTIChpZCBpbnQsIG5hbWUgdGV4dCwgYWdlIGludCk7Iik7Ciskbm9kZV9wdWJsaXNo ZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCBPRiBteXR5cGU7Iik7Ciskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSwg J2JhcicpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOwor JHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNU IGNvdW50KCopIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoMSksICdDUkVBVEUgVEFCTEUg T0YgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IkRST1AgVEFCTEUgdG1wIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiRFJPUCBUWVBFIG15dHlwZSIpOworCisjIFRlc3QgQ1JFQVRFIEVOVU0gVFlQRQorJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUWVBFIG15ZW51bXR5cGUg QVMgRU5VTSAoJ25ldycsICdvcGVuJywgJ2Nsb3NlZCcpOyIpOworJG5vZGVfcHVibGlzaGVyLT53 YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKHN0YXR1cyBteWVudW10eXBlKTsiKTsKKyRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVT ICgnbmV3Jyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7 CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxF Q1QgKiBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKG5ldyksICdDUkVBVEUgVEFCTEUgT0Yg cmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRS T1AgVEFCTEUgdG1wIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi RFJPUCBUWVBFIG15ZW51bXR5cGUiKTsKKworIyBUZXN0IENSRUFURSBSQU5HRSBUWVBFCiskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRZUEUgZmxvYXQ4X3Jh bmdlIEFTIFJBTkdFIChzdWJ0eXBlID0gZmxvYXQ4LCBzdWJ0eXBlX2RpZmYgPSBmbG9hdDhtaSk7 Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAodmFsIGZs b2F0OF9yYW5nZSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi aW5zZXJ0IGludG8gdG1wIHZhbHVlcyhmbG9hdDhfcmFuZ2UoLTEyLjM0LCAnMS4xMTExMTNlMycp KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1 bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCAqIGZy b20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoWy0xMi4zNCwxMTExLjExM1wpKSwgJ0NSRUFURSBU QUJMRSBPRiByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiRFJPUCBUQUJMRSB0bXAiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJEUk9QIFRZUEUgZmxvYXQ4X3JhbmdlIik7CisKKyMgVGVzdCBDUkVBVEUgQkFTRSBE QVRBIFRZUEUgYW5kIHVzZSBpdCBpbiB0YWJsZSBkZWZpbml0aW9uCiskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiCitDUkVBVEUgVFlQRSBpbnQ0MjsKK0NSRUFURSBGVU5D VElPTiBpbnQ0Ml9pbihjc3RyaW5nKQorICAgUkVUVVJOUyBpbnQ0MgorICAgQVMgJ2ludDRpbicK KyAgIExBTkdVQUdFIGludGVybmFsIFNUUklDVCBJTU1VVEFCTEU7CitDUkVBVEUgRlVOQ1RJT04g aW50NDJfb3V0KGludDQyKQorICAgUkVUVVJOUyBjc3RyaW5nCisgICBBUyAnaW50NG91dCcKKyAg IExBTkdVQUdFIGludGVybmFsIFNUUklDVCBJTU1VVEFCTEU7CitDUkVBVEUgVFlQRSBpbnQ0MiAo CisgICBpbnRlcm5hbGxlbmd0aCA9IDQsCisgICBpbnB1dCA9IGludDQyX2luLAorICAgb3V0cHV0 ID0gaW50NDJfb3V0LAorICAgYWxpZ25tZW50ID0gaW50NCwKKyAgIGRlZmF1bHQgPSA0MiwKKyAg IHBhc3NlZGJ5dmFsdWUKKyk7CitDUkVBVEUgVEFCTEUgdG1wIChmMSBpbnQ0Mik7CitJTlNFUlQg SU5UTyB0bXAgREVGQVVMVCBWQUxVRVM7CisiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3Jf Y2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIlNFTEVDVCAqIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoNDIpLCAn Q1JFQVRFIFRBQkxFIE9GIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkRST1AgVFlQRSBpbnQ0MiBjYXNjYWRlIik7CisKK3Bhc3MgIkRETCBy ZXBsaWNhdGlvbiB0ZXN0cyBwYXNzZWQ6IjsKKworJG5vZGVfc3Vic2NyaWJlci0+c3RvcDsKKyRu b2RlX3B1Ymxpc2hlci0+c3RvcDsKKworZG9uZV90ZXN0aW5nKCk7Ci0tIAoyLjMyLjAKCg== --00000000000056eb5505e991f569 Content-Type: text/x-patch; charset="US-ASCII"; name="v23-0005-Support-DDL-of-GRANT-Command.patch" Content-Disposition: attachment; filename="v23-0005-Support-DDL-of-GRANT-Command.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l8imj0pz4 RnJvbSBjNWJjMGZkZjQzZDk2M2RmNGQ0YWRhYzk1NDk4NDM2OTIzODIyOWUwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFR1ZSwgMjAgU2VwIDIwMjIgMTA6Mzc6MjEgLTA0MDAKU3ViamVjdDogW1BBVENI IHYyMyA1LzZdIFN1cHBvcnQgRERMIG9mIEdSQU5UIENvbW1hbmQuCgpHcmFudGluZyB0aGUgZm9s bG93aW5nIGdsb2JhbCBvYmplY3RzIGFyZSBub3Qgc3VwcG9ydGVkOgoxKSBGb3JlaWduIGRhdGEg d3JhcHBlcgoyKSBwYXJhbWV0ZXIgLSBleDogZ3JhbnQgYWxsIG9uIHBhcmFtZXRlciB3YWxfYnVm ZmVycyBUTyB0ZXN0OwozKSB0YWJsZXNwYWNlIC0gIGV4OiBncmFudCBjcmVhdGUgb24gdGFibGVz cGFjZSB0YnMxIHRvIHRlc3Q7CjQpIGRhdGFiYXNlIC0gIGV4OiBncmFudCBhbGwgb24gZGF0YWJh c2UgcG9zdGdyZXMgdG8gdGVzdDsKNSkgcm9sZSAtICBleDogZ3JhbnQgdGVzdCB0byB0ZXN0MTsg LS0gbm8gZXZlbnQgdHJpZ2dlciBmb3IgZ2xvYmFsIG9iamVjdHMKLS0tCiBzcmMvYmFja2VuZC9j YXRhbG9nL2FjbGNoay5jICAgICAgICAgICB8ICAgNCArCiBzcmMvYmFja2VuZC9jb21tYW5kcy9k ZGxfZGVwYXJzZS5jICAgICB8IDI1MCArKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvYmFj a2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMgICB8ICAgMyArLQogc3JjL2JhY2tlbmQvY29t bWFuZHMvcHVibGljYXRpb25jbWRzLmMgfCAgIDMgKy0KIHNyYy9pbmNsdWRlL3V0aWxzL2FjbGNo a19pbnRlcm5hbC5oICAgIHwgICAxICsKIDUgZmlsZXMgY2hhbmdlZCwgMjU5IGluc2VydGlvbnMo KyksIDIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9hY2xj aGsuYyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvYWNsY2hrLmMKaW5kZXggYWE1YTJlZDk0OC4uN2Rj MTkwZGRlYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9hY2xjaGsuYworKysgYi9z cmMvYmFja2VuZC9jYXRhbG9nL2FjbGNoay5jCkBAIC0zODUsNyArMzg1LDExIEBAIEV4ZWN1dGVH cmFudFN0bXQoR3JhbnRTdG10ICpzdG10KQogCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJKGVycmNv ZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAogCQkJCQkgZXJybXNnKCJncmFudG9y IG11c3QgYmUgY3VycmVudCB1c2VyIikpKTsKKworCQlpc3RtdC5ncmFudG9yX3VpZCA9IGdyYW50 b3I7CiAJfQorCWVsc2UKKwkJaXN0bXQuZ3JhbnRvcl91aWQgPSBJbnZhbGlkT2lkOwogCiAJLyoK IAkgKiBUdXJuIHRoZSByZWd1bGFyIEdyYW50U3RtdCBpbnRvIHRoZSBJbnRlcm5hbEdyYW50IGZv cm0uCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jIGIvc3Jj L2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYwppbmRleCBjZjE3YmYzNDdkLi4wYWFlOGRk OWY2IDEwMDc1NQotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jCisrKyBi L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMKQEAgLTMyLDE1ICszMiwxOSBAQAog I2luY2x1ZGUgImNhdGFsb2cvbmFtZXNwYWNlLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19hbS5o IgogI2luY2x1ZGUgImNhdGFsb2cvcGdfYXR0cmlidXRlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9w Z19hdXRoaWQuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2Nhc3QuaCIKICNpbmNsdWRlICJjYXRh bG9nL3BnX2NsYXNzLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb2xsYXRpb24uaCIKICNpbmNs dWRlICJjYXRhbG9nL3BnX2NvbnN0cmFpbnQuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2NvbnZl cnNpb24uaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2RlcGVuZC5oIgorI2luY2x1ZGUgImNhdGFs b2cvcGdfZm9yZWlnbl9kYXRhX3dyYXBwZXIuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2ZvcmVp Z25fc2VydmVyLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19leHRlbnNpb24uaCIKICNpbmNsdWRl ICJjYXRhbG9nL3BnX2luaGVyaXRzLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19sYW5ndWFnZS5o IgorI2luY2x1ZGUgImNhdGFsb2cvcGdfbGFyZ2VvYmplY3QuaCIKICNpbmNsdWRlICJjYXRhbG9n L3BnX25hbWVzcGFjZS5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfb3BjbGFzcy5oIgogI2luY2x1 ZGUgImNhdGFsb2cvcGdfb3BlcmF0b3IuaCIKQEAgLTc2NSw2ICs3NjksMzkgQEAgbmV3X29ianRy ZWVfZm9yX3JvbGVzcGVjKFJvbGVTcGVjICpzcGVjKQogCXJldHVybiByb2xlOwogfQogCisvKgor ICogSGVscGVyIHJvdXRpbmUgZm9yICV7fVIgb2JqZWN0cywgd2l0aCByb2xlIHNwZWNpZmllZCBi eSBPSUQuICAoQUNMX0lEX1BVQkxJQworICogbWVhbnMgdG8gdXNlICJwdWJsaWMiKS4KKyAqLwor c3RhdGljIE9ialRyZWUgKgorbmV3X29ianRyZWVfZm9yX3JvbGVfaWQoT2lkIHJvbGVvaWQpCit7 CisJT2JqVHJlZSAgICAqcm9sZTsKKworCXJvbGUgPSBuZXdfb2JqdHJlZSgiIik7CisKKwlpZiAo cm9sZW9pZCAhPSBBQ0xfSURfUFVCTElDKQorCXsKKwkJSGVhcFR1cGxlCXJvbHR1cDsKKwkJY2hh cgkgICAqcm9sZW5hbWU7CisKKwkJcm9sdHVwID0gU2VhcmNoU3lzQ2FjaGUxKEFVVEhPSUQsIE9i amVjdElkR2V0RGF0dW0ocm9sZW9pZCkpOworCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocm9sdHVw KSkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfVU5ERUZJTkVEX09C SkVDVCksCisJCQkJCSBlcnJtc2coInJvbGUgd2l0aCBPSUQgJXUgZG9lcyBub3QgZXhpc3QiLCBy b2xlb2lkKSkpOworCisJCXJvbGVuYW1lID0gTmFtZVN0cigoKEZvcm1fcGdfYXV0aGlkKSBHRVRT VFJVQ1Qocm9sdHVwKSktPnJvbG5hbWUpOworCQlhcHBlbmRfc3RyaW5nX29iamVjdChyb2xlLCAi JXtyb2xlbmFtZX1JIiwgcHN0cmR1cChyb2xlbmFtZSkpOworCisJCVJlbGVhc2VTeXNDYWNoZShy b2x0dXApOworCX0KKwllbHNlCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJvbGUsICIle3JvbGVu YW1lfUkiLCAicHVibGljIik7CisKKwlyZXR1cm4gcm9sZTsKK30KKwogLyoKICAqIEEgaGVscGVy IHJvdXRpbmUgdG8gc2V0dXAgJXt9VCBlbGVtZW50cy4KICAqLwpAQCAtMTcxMCw2ICsxNzQ3LDIx NiBAQCBkZXBhcnNlX0FsdGVyT2JqZWN0U2NoZW1hU3RtdChPYmplY3RBZGRyZXNzIGFkZHJlc3Ms IE5vZGUgKnBhcnNldHJlZSwKIAlyZXR1cm4gYWx0ZXJTdG10OwogfQogCisvKgorICogZGVwYXJz ZSBhbiBHUkFOVCBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0dyYW50 U3RtdChDb2xsZWN0ZWRDb21tYW5kICpjbWQpCit7CisJSW50ZXJuYWxHcmFudCAqaXN0bXQ7CisJ T2JqVHJlZQkgICAqZ3JhbnRTdG10OworCWNoYXIJICAgKmZtdDsKKwljaGFyCSAgICpvYmp0eXBl OworCUxpc3QJICAgKmxpc3Q7CisJTGlzdENlbGwgICAqY2VsbDsKKwlPaWQJCQljbGFzc0lkOwor CU9ialRyZWUJICAgKnRtcDsKKworCWlzdG10ID0gY21kLT5kLmdyYW50LmlzdG10OworCisJLyoK KwkgKiBJZiB0aGVyZSBhcmUgbm8gb2JqZWN0cyBmcm9tICJBTEwgLi4uIElOIFNDSEVNQSIgdG8g YmUgZ3JhbnRlZCwgdGhlbgorCSAqIHdlIG5lZWQgbm90IGRvIGFueXRoaW5nLgorCSAqLworCWlm IChpc3RtdC0+b2JqZWN0cyA9PSBOSUwpCisJCXJldHVybiBOVUxMOworCisJc3dpdGNoIChpc3Rt dC0+b2JqdHlwZSkKKwl7CisJCWNhc2UgT0JKRUNUX0NPTFVNTjoKKwkJY2FzZSBPQkpFQ1RfVEFC TEU6CisJCQlvYmp0eXBlID0gIlRBQkxFIjsKKwkJCWNsYXNzSWQgPSBSZWxhdGlvblJlbGF0aW9u SWQ7CisJCQlicmVhazsKKwkJY2FzZSBPQkpFQ1RfU0VRVUVOQ0U6CisJCQlvYmp0eXBlID0gIlNF UVVFTkNFIjsKKwkJCWNsYXNzSWQgPSBSZWxhdGlvblJlbGF0aW9uSWQ7CisJCQlicmVhazsKKwkJ Y2FzZSBPQkpFQ1RfRE9NQUlOOgorCQkJb2JqdHlwZSA9ICJET01BSU4iOworCQkJY2xhc3NJZCA9 IFR5cGVSZWxhdGlvbklkOworCQkJYnJlYWs7CisJCWNhc2UgT0JKRUNUX0ZEVzoKKwkJCW9ianR5 cGUgPSAiRk9SRUlHTiBEQVRBIFdSQVBQRVIiOworCQkJY2xhc3NJZCA9IEZvcmVpZ25EYXRhV3Jh cHBlclJlbGF0aW9uSWQ7CisJCQlicmVhazsKKwkJY2FzZSBPQkpFQ1RfRk9SRUlHTl9TRVJWRVI6 CisJCQlvYmp0eXBlID0gIkZPUkVJR04gU0VSVkVSIjsKKwkJCWNsYXNzSWQgPSBGb3JlaWduU2Vy dmVyUmVsYXRpb25JZDsKKwkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9GVU5DVElPTjoKKwkJCW9i anR5cGUgPSAiRlVOQ1RJT04iOworCQkJY2xhc3NJZCA9IFByb2NlZHVyZVJlbGF0aW9uSWQ7CisJ CQlicmVhazsKKwkJY2FzZSBPQkpFQ1RfUFJPQ0VEVVJFOgorCQkJb2JqdHlwZSA9ICJQUk9DRURV UkUiOworCQkJY2xhc3NJZCA9IFByb2NlZHVyZVJlbGF0aW9uSWQ7CisJCQlicmVhazsKKwkJY2Fz ZSBPQkpFQ1RfUk9VVElORToKKwkJCW9ianR5cGUgPSAiUk9VVElORSI7CisJCQljbGFzc0lkID0g UHJvY2VkdXJlUmVsYXRpb25JZDsKKwkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9MQU5HVUFHRToK KwkJCW9ianR5cGUgPSAiTEFOR1VBR0UiOworCQkJY2xhc3NJZCA9IExhbmd1YWdlUmVsYXRpb25J ZDsKKwkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9MQVJHRU9CSkVDVDoKKwkJCW9ianR5cGUgPSAi TEFSR0UgT0JKRUNUIjsKKwkJCWNsYXNzSWQgPSBMYXJnZU9iamVjdFJlbGF0aW9uSWQ7CisJCQli cmVhazsKKwkJY2FzZSBPQkpFQ1RfU0NIRU1BOgorCQkJb2JqdHlwZSA9ICJTQ0hFTUEiOworCQkJ Y2xhc3NJZCA9IE5hbWVzcGFjZVJlbGF0aW9uSWQ7CisJCQlicmVhazsKKwkJY2FzZSBPQkpFQ1Rf VFlQRToKKwkJCW9ianR5cGUgPSAiVFlQRSI7CisJCQljbGFzc0lkID0gVHlwZVJlbGF0aW9uSWQ7 CisJCQlicmVhazsKKwkJY2FzZSBPQkpFQ1RfREFUQUJBU0U6CisJCWNhc2UgT0JKRUNUX1RBQkxF U1BBQ0U6CisJCQlvYmp0eXBlID0gIiI7CisJCQljbGFzc0lkID0gSW52YWxpZE9pZDsKKwkJCWVs b2coRVJST1IsICJnbG9iYWwgb2JqZWN0cyBub3Qgc3VwcG9ydGVkIik7CisJCQlicmVhazsKKwkJ ZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIE9CSkVDVCB2YWx1ZSAlZCIsIGlzdG10 LT5vYmp0eXBlKTsKKwl9CisKKwlmbXQgPSBwc3ByaW50ZigiR1JBTlQiKTsKKworCWdyYW50U3Rt dCA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMCk7CisKKwkvKiBidWlsZCBsaXN0IG9mIHByaXZpbGVn ZXMgdG8gZ3JhbnQgKi8KKwlpZiAoaXN0bXQtPmFsbF9wcml2cykKKwl7CisJCXRtcCA9IG5ld19v Ymp0cmVlX1ZBKCJBTEwgUFJJVklMRUdFUyIsIDApOworCQlsaXN0ID0gbGlzdF9tYWtlMShuZXdf b2JqZWN0X29iamVjdCh0bXApKTsKKwl9CisJZWxzZQorCXsKKwkJbGlzdCA9IE5JTDsKKworCQlp ZiAoaXN0bXQtPnByaXZpbGVnZXMgJiBBQ0xfSU5TRVJUKQorCQkJbGlzdCA9IGxhcHBlbmQobGlz dCwgbmV3X3N0cmluZ19vYmplY3QoIklOU0VSVCIpKTsKKwkJaWYgKGlzdG10LT5wcml2aWxlZ2Vz ICYgQUNMX1NFTEVDVCkKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0 KCJTRUxFQ1QiKSk7CisJCWlmIChpc3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9VUERBVEUpCisJCQls aXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdCgiVVBEQVRFIikpOworCQlpZiAo aXN0bXQtPnByaXZpbGVnZXMgJiBBQ0xfREVMRVRFKQorCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwg bmV3X3N0cmluZ19vYmplY3QoIkRFTEVURSIpKTsKKwkJaWYgKGlzdG10LT5wcml2aWxlZ2VzICYg QUNMX1RSVU5DQVRFKQorCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3Qo IlRSVU5DQVRFIikpOworCQlpZiAoaXN0bXQtPnByaXZpbGVnZXMgJiBBQ0xfUkVGRVJFTkNFUykK KwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KCJSRUZFUkVOQ0VTIikp OworCQlpZiAoaXN0bXQtPnByaXZpbGVnZXMgJiBBQ0xfVFJJR0dFUikKKwkJCWxpc3QgPSBsYXBw ZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KCJUUklHR0VSIikpOworCQlpZiAoaXN0bXQtPnBy aXZpbGVnZXMgJiBBQ0xfRVhFQ1VURSkKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJp bmdfb2JqZWN0KCJFWEVDVVRFIikpOworCQlpZiAoaXN0bXQtPnByaXZpbGVnZXMgJiBBQ0xfVVNB R0UpCisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdCgiVVNBR0UiKSk7 CisJCWlmIChpc3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9DUkVBVEUpCisJCQlsaXN0ID0gbGFwcGVu ZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdCgiQ1JFQVRFIikpOworCQlpZiAoaXN0bXQtPnByaXZp bGVnZXMgJiBBQ0xfQ1JFQVRFX1RFTVApCisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3Ry aW5nX29iamVjdCgiVEVNUE9SQVJZIikpOworCQlpZiAoaXN0bXQtPnByaXZpbGVnZXMgJiBBQ0xf Q09OTkVDVCkKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KCJDT05O RUNUIikpOworCisJCWlmIChpc3RtdC0+Y29sX3ByaXZzICE9IE5JTCkKKwkJeworCQkJTGlzdENl bGwgICAqb2NlbGw7CisKKwkJCWZvcmVhY2gob2NlbGwsIGlzdG10LT5jb2xfcHJpdnMpCisJCQl7 CisJCQkJQWNjZXNzUHJpdiAqcHJpdiA9IGxmaXJzdChvY2VsbCk7CisJCQkJTGlzdCAgICpjb2xz ID0gTklMOworCisJCQkJdG1wID0gbmV3X29ianRyZWUoIiIpOworCQkJCWZvcmVhY2goY2VsbCwg cHJpdi0+Y29scykKKwkJCQl7CisJCQkJCVN0cmluZyAqY29sbmFtZSA9IGxmaXJzdF9ub2RlKFN0 cmluZywgY2VsbCk7CisKKwkJCQkJY29scyA9IGxhcHBlbmQoY29scywKKwkJCQkJCQkJICAgbmV3 X3N0cmluZ19vYmplY3Qoc3RyVmFsKGNvbG5hbWUpKSk7CisJCQkJfQorCQkJCWFwcGVuZF9hcnJh eV9vYmplY3QodG1wLCAiKCV7Y29sczosIH1zKSIsIGNvbHMpOworCisJCQkJaWYgKHByaXYtPnBy aXZfbmFtZSA9PSBOVUxMKQorCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdChncmFudFN0bXQsICIl e3ByaXZ9cyIsICJBTEwgUFJJVklMRUdFUyIpOworCQkJCWVsc2UKKwkJCQkJYXBwZW5kX3N0cmlu Z19vYmplY3QoZ3JhbnRTdG10LCAiJXtwcml2fXMiLCBwcml2LT5wcml2X25hbWUpOworCisJCQkJ bGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJCQl9CisJCX0K Kwl9CisJYXBwZW5kX2FycmF5X29iamVjdChncmFudFN0bXQsICIle3ByaXZpbGVnZXM6LCB9cyBP TiIsIGxpc3QpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoZ3JhbnRTdG10LCAiJXtvYmp0eXBl fXMiLCBvYmp0eXBlKTsKKworCS8qIHRhcmdldCBvYmplY3RzLiAgV2UgdXNlIG9iamVjdCBpZGVu dGl0aWVzIGhlcmUgKi8KKwlsaXN0ID0gTklMOworCWZvcmVhY2goY2VsbCwgaXN0bXQtPm9iamVj dHMpCisJeworCQlPaWQJCW9iamlkID0gbGZpcnN0X29pZChjZWxsKTsKKwkJT2JqZWN0QWRkcmVz cyBhZGRyOworCisJCWFkZHIuY2xhc3NJZCA9IGNsYXNzSWQ7CisJCWFkZHIub2JqZWN0SWQgPSBv YmppZDsKKwkJYWRkci5vYmplY3RTdWJJZCA9IDA7CisKKwkJdG1wID0gbmV3X29ianRyZWVfVkEo IiV7aWRlbnRpdHl9cyIsIDEsCisJCQkJCQkJICAgImlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywK KwkJCQkJCQkgICBnZXRPYmplY3RJZGVudGl0eSgmYWRkciwgZmFsc2UpKTsKKworCQlsaXN0ID0g bGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwl9CisJYXBwZW5kX2FycmF5 X29iamVjdChncmFudFN0bXQsICIle3ByaXZ0YXJnZXQ6LCB9cyBUTyIsIGxpc3QpOworCisJLyog bGlzdCBvZiBncmFudGVlcyAqLworCWxpc3QgPSBOSUw7CisJZm9yZWFjaChjZWxsLCBpc3RtdC0+ Z3JhbnRlZXMpCisJeworCQlPaWQJCWdyYW50ZWUgPSBsZmlyc3Rfb2lkKGNlbGwpOworCisJCXRt cCA9IG5ld19vYmp0cmVlX2Zvcl9yb2xlX2lkKGdyYW50ZWUpOworCQlsaXN0ID0gbGFwcGVuZChs aXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwl9CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0 KGdyYW50U3RtdCwgIiV7Z3JhbnRlZXM6LCB9cyIsIGxpc3QpOworCisJLyogdGhlIHdvcmRpbmcg b2YgdGhlIGdyYW50IG9wdGlvbiBpcyB2YXJpYWJsZSAuLi4gKi8KKwlhcHBlbmRfc3RyaW5nX29i amVjdChncmFudFN0bXQsICIle2dyYW50X29wdGlvbn1zIiwKKwkJCQkJCSBpc3RtdC0+Z3JhbnRf b3B0aW9uID8gICJXSVRIIEdSQU5UIE9QVElPTiIgOiAiIik7CisKKwlpZiAoaXN0bXQtPmdyYW50 b3JfdWlkKQorCXsKKwkJSGVhcFR1cGxlCXJvbHR1cDsKKwkJY2hhcgkgICAqcm9sZW5hbWU7CisK KwkJcm9sdHVwID0gU2VhcmNoU3lzQ2FjaGUxKEFVVEhPSUQsIE9iamVjdElkR2V0RGF0dW0oaXN0 bXQtPmdyYW50b3JfdWlkKSk7CisJCWlmICghSGVhcFR1cGxlSXNWYWxpZChyb2x0dXApKQorCQkJ ZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9VTkRFRklORURfT0JKRUNUKSwK KwkJCQkJIGVycm1zZygicm9sZSB3aXRoIE9JRCAldSBkb2VzIG5vdCBleGlzdCIsIGlzdG10LT5n cmFudG9yX3VpZCkpKTsKKworCQlyb2xlbmFtZSA9IE5hbWVTdHIoKChGb3JtX3BnX2F1dGhpZCkg R0VUU1RSVUNUKHJvbHR1cCkpLT5yb2xuYW1lKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoZ3Jh bnRTdG10LCAiR1JBTlRFRCBCWSAle3JvbGVuYW1lfXMiLCByb2xlbmFtZSk7CisJCVJlbGVhc2VT eXNDYWNoZShyb2x0dXApOworCX0KKworCXJldHVybiBncmFudFN0bXQ7Cit9CisKIC8qCiAgKiBE ZXBhcnNlIGFuIEFsdGVyT3BlcmF0b3JTdG10IChBTFRFUiBPUEVSQVRPUiAuLi4gU0VUIC4uLiku CiAgKi8KQEAgLTY4NDYsNiArNzA5Myw5IEBAIGRlcGFyc2VfdXRpbGl0eV9jb21tYW5kKENvbGxl Y3RlZENvbW1hbmQgKmNtZCwgYm9vbCB2ZXJib3NlX21vZGUpCiAJCWNhc2UgU0NUX0FsdGVyVGFi bGU6CiAJCQl0cmVlID0gZGVwYXJzZV9BbHRlclRhYmxlU3RtdChjbWQpOwogCQkJYnJlYWs7CisJ CWNhc2UgU0NUX0dyYW50OgorCQkJdHJlZSA9IGRlcGFyc2VfR3JhbnRTdG10KGNtZCk7CisJCQli cmVhazsKIAkJY2FzZSBTQ1RfQ3JlYXRlVGFibGVBczoKIAkJCXRyZWUgPSBkZXBhcnNlX0NyZWF0 ZVRhYmxlQXNTdG10KGNtZCk7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2V2ZW50X3RyaWdnZXIuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdn ZXIuYwppbmRleCAzOWI0MDFiNTc0Li5lNDc1MTQ3NzhhIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZl bnRfdHJpZ2dlci5jCkBAIC0yNDc0LDcgKzI0NzQsOCBAQCBwdWJsaWNhdGlvbl9kZXBhcnNlX2Rk bF9jb21tYW5kX2VuZChQR19GVU5DVElPTl9BUkdTKQogCQl7CiAJCQlSZW5hbWVTdG10ICpyZW5h bWVTdG10ID0gKFJlbmFtZVN0bXQgKiljbWQtPnBhcnNldHJlZTsKIAotCQkJaWYgKHJlbmFtZVN0 bXQtPnJlbGF0aW9uVHlwZSAhPSBPQkpFQ1RfVFlQRSAmJgorCQkJaWYgKHJlbmFtZVN0bXQgJiYK KwkJCQlyZW5hbWVTdG10LT5yZWxhdGlvblR5cGUgIT0gT0JKRUNUX1RZUEUgJiYKIAkJCQlyZW5h bWVTdG10LT5yZWxhdGlvblR5cGUgIT0gT0JKRUNUX1RBQkxFKQogCQkJCWNvbnRpbnVlOwogCQl9 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYyBiL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCmluZGV4IDg2MTJiODY0YjIuLjJm YWU5MjRjM2EgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21k cy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCkBAIC05NzYs NyArOTc2LDggQEAgQ3JlYXRlUHVibGljYXRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVQ dWJsaWNhdGlvblN0bXQgKnN0bXQpCiAJCQlDTURUQUdfRFJPUF9TQ0hFTUEsCiAJCQlDTURUQUdf Q1JFQVRFX0lOREVYLAogCQkJQ01EVEFHX0RST1BfSU5ERVgsCi0JCQlDTURUQUdfQUxURVJfSU5E RVgKKwkJCUNNRFRBR19BTFRFUl9JTkRFWCwKKwkJCUNNRFRBR19HUkFOVAogCQl9OwogCiAJCUNv bW1hbmRUYWcJaW5pdF9jb21tYW5kc1tdID0gewpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRp bHMvYWNsY2hrX2ludGVybmFsLmggYi9zcmMvaW5jbHVkZS91dGlscy9hY2xjaGtfaW50ZXJuYWwu aAppbmRleCAzNjEyODRkOGViLi40ZTAyMGVmNGFlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91 dGlscy9hY2xjaGtfaW50ZXJuYWwuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9hY2xjaGtfaW50 ZXJuYWwuaApAQCAtMzksNiArMzksNyBAQCB0eXBlZGVmIHN0cnVjdAogCUxpc3QJICAgKmdyYW50 ZWVzOwogCWJvb2wJCWdyYW50X29wdGlvbjsKIAlEcm9wQmVoYXZpb3IgYmVoYXZpb3I7CisJT2lk CQkJZ3JhbnRvcl91aWQ7CiB9IEludGVybmFsR3JhbnQ7CiAKIAotLSAKMi4zMi4wCgo= --00000000000056eb5505e991f569 Content-Type: text/x-patch; charset="US-ASCII"; name="v23-0006-Add-DDL-deparser-support-for-TEXT-SEARCH-command.patch" Content-Disposition: attachment; filename="v23-0006-Add-DDL-deparser-support-for-TEXT-SEARCH-command.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l8imj5ef5 RnJvbSBkZTIzZDY0MTA2OTI1NDdkODM0YjIzZWM2MjIzMmU2NGFlOWM3NTliIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiWmhlbmcgKFphbmUpIExpIiA8emhlbGxpQGFtYXpvbi5jb20+ CkRhdGU6IFdlZCwgNyBTZXAgMjAyMiAyMDoxOToxNyArMDAwMApTdWJqZWN0OiBbUEFUQ0ggdjIz IDYvNl0gQWRkIERETCBkZXBhcnNlciBzdXBwb3J0IGZvciBURVhUIFNFQVJDSCBjb21tYW5kcywK IHdoaWNoIGluY2x1ZGVzOiAtQ1JFQVRFIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04vUEFSU0VS L0RJQ1RJT05BUlkvVEVNUExBVEUKIC1EUk9QIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04vUEFS U0VSL0RJQ1RJT05BUlkvVEVNUExBVEUgLUFMVEVSIFRFWFQgU0VBUkNICiBDT05GSUdVUkFUSU9O IGFuZCBBTFRFUiBURVhUIFNFQVJDSCBESUNUSU9OQVJZCgotLS0KIHNyYy9iYWNrZW5kL2NvbW1h bmRzL2RkbF9kZXBhcnNlLmMgICAgIHwgNDU2ICsrKysrKysrKysrKysrKysrKysrKysrKysKIHNy Yy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYyAgIHwgICA2ICstCiBzcmMvYmFja2Vu ZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYyB8ICAxMCArCiAzIGZpbGVzIGNoYW5nZWQsIDQ3 MSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv Y29tbWFuZHMvZGRsX2RlcGFyc2UuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9kZXBhcnNl LmMKaW5kZXggMGFhZThkZDlmNi4uYTFjOWY0M2Y3YSAxMDA3NTUKLS0tIGEvc3JjL2JhY2tlbmQv Y29tbWFuZHMvZGRsX2RlcGFyc2UuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVw YXJzZS5jCkBAIC01Myw2ICs1MywxMCBAQAogI2luY2x1ZGUgImNhdGFsb2cvcGdfcHJvYy5oIgog I2luY2x1ZGUgImNhdGFsb2cvcGdfcmFuZ2UuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3NlcXVl bmNlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ190c19jb25maWcuaCIKKyNpbmNsdWRlICJjYXRh bG9nL3BnX3RzX2RpY3QuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3RzX3BhcnNlci5oIgorI2lu Y2x1ZGUgImNhdGFsb2cvcGdfdHNfdGVtcGxhdGUuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3R5 cGUuaCIKICNpbmNsdWRlICJjb21tYW5kcy9kZWZyZW0uaCIKICNpbmNsdWRlICJjb21tYW5kcy9z ZXF1ZW5jZS5oIgpAQCAtMTU1LDYgKzE1OSwxMCBAQCBzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9D b2x1bW5JZGVudGl0eShPaWQgc2VxcmVsaWQsIGNoYXIgaWRlbnRpdHksIGJvb2wgYWx0ZXJfdAog c3RhdGljIE9ialRyZWUgKmRlcGFyc2VfQ29sdW1uU2V0T3B0aW9ucyhBbHRlclRhYmxlQ21kICpz dWJjbWQpOwogc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfRGVmaW5lU3RtdF9PcGVyYXRvcihPaWQg b2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSk7CiBzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9E ZWZpbmVTdG10X1R5cGUoT2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUpOworc3RhdGlj IE9ialRyZWUgKmRlcGFyc2VfRGVmaW5lU3RtdF9UU0NvbmZpZyhPaWQgb2JqZWN0SWQsIERlZmlu ZVN0bXQgKmRlZmluZSwgT2JqZWN0QWRkcmVzcyBjb3BpZWQpOworc3RhdGljIE9ialRyZWUgKmRl cGFyc2VfRGVmaW5lU3RtdF9UU1BhcnNlcihPaWQgb2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmlu ZSk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9EZWZpbmVTdG10X1RTRGljdGlvbmFyeShPaWQg b2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9E ZWZpbmVTdG10X1RTVGVtcGxhdGUoT2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUpOwog CiBzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9EZWZFbGVtKERlZkVsZW0gKmVsZW0sIGJvb2wgaXNf cmVzZXQpOwogc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfRnVuY3Rpb25TZXQoVmFyaWFibGVTZXRL aW5kIGtpbmQsIGNoYXIgKm5hbWUsIGNoYXIgKnZhbHVlKTsKQEAgLTUxNjQsNiArNTE3MiwyMiBA QCBkZXBhcnNlX0RlZmluZVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUsIE9iamVj dEFkZHJlc3Mgc2Vjb25kYXJ5T2JqKQogCQkJZGVmU3RtdCA9IGRlcGFyc2VfRGVmaW5lU3RtdF9U eXBlKG9iamVjdElkLCBkZWZpbmUpOwogCQkJYnJlYWs7CiAKKwkJY2FzZSBPQkpFQ1RfVFNDT05G SUdVUkFUSU9OOgorCQkJZGVmU3RtdCA9IGRlcGFyc2VfRGVmaW5lU3RtdF9UU0NvbmZpZyhvYmpl Y3RJZCwgZGVmaW5lLCBzZWNvbmRhcnlPYmopOworCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpFQ1Rf VFNQQVJTRVI6CisJCQlkZWZTdG10ID0gZGVwYXJzZV9EZWZpbmVTdG10X1RTUGFyc2VyKG9iamVj dElkLCBkZWZpbmUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpFQ1RfVFNESUNUSU9OQVJZOgor CQkJZGVmU3RtdCA9IGRlcGFyc2VfRGVmaW5lU3RtdF9UU0RpY3Rpb25hcnkob2JqZWN0SWQsIGRl ZmluZSk7CisJCQlicmVhazsKKworCQljYXNlIE9CSkVDVF9UU1RFTVBMQVRFOgorCQkJZGVmU3Rt dCA9IGRlcGFyc2VfRGVmaW5lU3RtdF9UU1RlbXBsYXRlKG9iamVjdElkLCBkZWZpbmUpOworCQkJ YnJlYWs7CisKIAkJZGVmYXVsdDoKIAkJCWVsb2coRVJST1IsICJ1bnN1cHBvcnRlZCBvYmplY3Qg a2luZCIpOwogCX0KQEAgLTU1MjQsNiArNTU0OCw0MjcgQEAgZGVwYXJzZV9EZWZpbmVTdG10X1R5 cGUoT2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUpCiAJcmV0dXJuIHN0bXQ7CiB9CiAK K3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRGVmaW5lU3RtdF9UU0NvbmZpZyhPaWQgb2JqZWN0 SWQsIERlZmluZVN0bXQgKmRlZmluZSwKKwkJCQkJCQlPYmplY3RBZGRyZXNzIGNvcGllZCkKK3sK KwlIZWFwVHVwbGUgICB0c2NUdXA7CisJSGVhcFR1cGxlICAgdHNwVHVwOworCU9ialRyZWUJICAg KnN0bXQ7CisJT2JqVHJlZQkgICAqdG1wOworCUZvcm1fcGdfdHNfY29uZmlnIHRzY0Zvcm07CisJ Rm9ybV9wZ190c19wYXJzZXIgdHNwRm9ybTsKKwlMaXN0CSAgICpsaXN0OworCisJdHNjVHVwID0g U2VhcmNoU3lzQ2FjaGUxKFRTQ09ORklHT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7 CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHRzY1R1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBs b29rdXAgZmFpbGVkIGZvciB0ZXh0IHNlYXJjaCBjb25maWd1cmF0aW9uICV1IiwKKwkJCSBvYmpl Y3RJZCk7CisJdHNjRm9ybSA9IChGb3JtX3BnX3RzX2NvbmZpZykgR0VUU1RSVUNUKHRzY1R1cCk7 CisKKwl0c3BUdXAgPSBTZWFyY2hTeXNDYWNoZTEoVFNQQVJTRVJPSUQsIE9iamVjdElkR2V0RGF0 dW0odHNjRm9ybS0+Y2ZncGFyc2VyKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHRzcFR1cCkp CisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB0ZXh0IHNlYXJjaCBwYXJz ZXIgJXUiLAorCQkJIHRzY0Zvcm0tPmNmZ3BhcnNlcik7CisJdHNwRm9ybSA9IChGb3JtX3BnX3Rz X3BhcnNlcikgR0VUU1RSVUNUKHRzcFR1cCk7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJ ICoKKwkgKiBDUkVBVEUgVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiAle2lkZW50aXR5fUQgKCV7 ZWxlbXM6LCB9cykKKwkgKi8KKwlzdG10ID0gbmV3X29ianRyZWUoIkNSRUFURSIpOworCisJYXBw ZW5kX29iamVjdF9vYmplY3Qoc3RtdCwgIlRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04gJXtpZGVu dGl0eX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUodHNjRm9ybS0+Y2ZnbmFt ZXNwYWNlLAorCQkJCQkJCQkJCQkJICBOYW1lU3RyKHRzY0Zvcm0tPmNmZ25hbWUpKSk7CisKKwkv KgorCSAqIEFkZCB0aGUgZGVmaW5pdGlvbiBjbGF1c2UuICBJZiB3ZSBoYXZlIENPUFknZWQgYW4g ZXhpc3RpbmcgY29uZmlnLCBhZGQKKwkgKiBhIENPUFkgY2xhdXNlOyBvdGhlcndpc2UgYWRkIGEg UEFSU0VSIGNsYXVzZS4KKwkgKi8KKwlsaXN0ID0gTklMOworCS8qIENPUFkgKi8KKwl0bXAgPSBu ZXdfb2JqdHJlZV9WQSgiQ09QWT0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5n LCAiY29weSIpOworCWlmIChjb3BpZWQub2JqZWN0SWQgIT0gSW52YWxpZE9pZCkKKwkJYXBwZW5k X29iamVjdF9vYmplY3QodG1wLCAiJXt0c2NvbmZpZ31EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lX2lkKFRTQ29uZmlnUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIGNvcGll ZC5vYmplY3RJZCkpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQi LCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7 CisKKwkvKiBQQVJTRVIgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiUEFSU0VSPSIsIDEsCisJ CQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJwYXJzZXIiKTsKKwlpZiAoY29waWVkLm9i amVjdElkID09IEludmFsaWRPaWQpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cGFy c2VyfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUodHNwRm9ybS0+cHJzbmFt ZXNwYWNlLAorCQkJCQkJCQkJCQkJCSAgTmFtZVN0cih0c3BGb3JtLT5wcnNuYW1lKSkpOworCWVs c2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9 IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwlhcHBlbmRfYXJyYXlf b2JqZWN0KHN0bXQsICIoJXtlbGVtczosIH1zKSIsIGxpc3QpOworCisJUmVsZWFzZVN5c0NhY2hl KHRzcFR1cCk7CisJUmVsZWFzZVN5c0NhY2hlKHRzY1R1cCk7CisKKwlyZXR1cm4gc3RtdDsKK30K Kworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9EZWZpbmVTdG10X1RTUGFyc2VyKE9pZCBvYmpl Y3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lKQoreworCUhlYXBUdXBsZSAgIHRzcFR1cDsKKwlPYmpU cmVlCSAgICpzdG10OworCU9ialRyZWUJICAgKnRtcDsKKwlMaXN0CSAgICpsaXN0OworCUZvcm1f cGdfdHNfcGFyc2VyIHRzcEZvcm07CisKKwl0c3BUdXAgPSBTZWFyY2hTeXNDYWNoZTEoVFNQQVJT RVJPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFs aWQodHNwVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHRleHQg c2VhcmNoIHBhcnNlciB3aXRoIE9JRCAldSIsCisJCQkgb2JqZWN0SWQpOworCXRzcEZvcm0gPSAo Rm9ybV9wZ190c19wYXJzZXIpIEdFVFNUUlVDVCh0c3BUdXApOworCisJLyoKKwkgKiBWZXJib3Nl IHN5bnRheAorCSAqCisJICogQ1JFQVRFIFRFWFQgU0VBUkNIIFBBUlNFUiAle2lkZW50aXR5fUQg KCV7ZWxlbXM6LCB9cykKKwkgKi8KKwlzdG10ID0gbmV3X29ianRyZWUoIkNSRUFURSIpOworCisJ YXBwZW5kX29iamVjdF9vYmplY3Qoc3RtdCwgIlRFWFQgU0VBUkNIIFBBUlNFUiAle2lkZW50aXR5 fUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZSh0c3BGb3JtLT5wcnNuYW1lc3Bh Y2UsCisJCQkJCQkJCQkJCQkgIE5hbWVTdHIodHNwRm9ybS0+cHJzbmFtZSkpKTsKKworCS8qIEFk ZCB0aGUgZGVmaW5pdGlvbiBjbGF1c2UgKi8KKwlsaXN0ID0gTklMOworCisJLyogU1RBUlQgKi8K Kwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiU1RBUlQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2Jq VHlwZVN0cmluZywgInN0YXJ0Iik7CisJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtwcm9j ZWR1cmV9RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJl bGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIHRzcEZvcm0tPnByc3N0YXJ0KSk7CisJbGlzdCA9IGxh cHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBHRVRUT0tFTiAqLwor CXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJHRVRUT0tFTj0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBP YmpUeXBlU3RyaW5nLCAiZ2V0dG9rZW4iKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIl e3Byb2NlZHVyZX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2Vk dXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgdHNwRm9ybS0+cHJzdG9rZW4pKTsKKwlsaXN0 ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIEVORCAqLwor CXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJFTkQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlw ZVN0cmluZywgImVuZCIpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2VkdXJl fUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlv bklkLAorCQkJCQkJCQkJCQkJCSB0c3BGb3JtLT5wcnNlbmQpKTsKKwlsaXN0ID0gbGFwcGVuZChs aXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIExFWFRZUEVTICovCisJdG1wID0g bmV3X29ianRyZWVfVkEoIkxFWFRZUEVTPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVT dHJpbmcsICJsZXh0eXBlcyIpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2Vk dXJlfUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxh dGlvbklkLAorCQkJCQkJCQkJCQkJCSB0c3BGb3JtLT5wcnNsZXh0eXBlKSk7CisJbGlzdCA9IGxh cHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBIRUFETElORSAqLwor CXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJIRUFETElORT0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBP YmpUeXBlU3RyaW5nLCAiaGVhZGxpbmUiKTsKKwlpZiAoT2lkSXNWYWxpZCh0c3BGb3JtLT5wcnNo ZWFkbGluZSkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2VkdXJlfUQiLAor CQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwK KwkJCQkJCQkJCQkJCQkJIHRzcEZvcm0tPnByc2hlYWRsaW5lKSk7CisJZWxzZQorCQlhcHBlbmRf Ym9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0 LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCWFwcGVuZF9hcnJheV9vYmplY3Qoc3RtdCwg Iigle2VsZW1zOiwgfXMpIiwgbGlzdCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHNwVHVwKTsKKwor CXJldHVybiBzdG10OworfQorCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0RlZmluZVN0bXRf VFNEaWN0aW9uYXJ5KE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lKQoreworCUhlYXBU dXBsZSAgIHRzZFR1cDsKKwlPYmpUcmVlCSAgICpzdG10OworCU9ialRyZWUJICAgKnRtcDsKKwlM aXN0CSAgICpsaXN0OworCURhdHVtCQlvcHRpb25zOworCWJvb2wJCWlzbnVsbDsKKwlGb3JtX3Bn X3RzX2RpY3QgdHNkRm9ybTsKKworCXRzZFR1cCA9IFNlYXJjaFN5c0NhY2hlMShUU0RJQ1RPSUQs IE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHNk VHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHRleHQgc2VhcmNo IGRpY3Rpb25hcnkgIgorCQkJICJ3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwl0c2RGb3JtID0g KEZvcm1fcGdfdHNfZGljdCkgR0VUU1RSVUNUKHRzZFR1cCk7CisKKwkvKgorCSAqIFZlcmJvc2Ug c3ludGF4CisJICoKKwkgKiBDUkVBVEUgVEVYVCBTRUFSQ0ggRElDVElPTkFSWSAle2lkZW50aXR5 fUQgKCV7ZWxlbXM6LCB9cykKKwkgKi8KKwlzdG10ID0gbmV3X29ianRyZWUoIkNSRUFURSIpOwor CisJYXBwZW5kX29iamVjdF9vYmplY3Qoc3RtdCwgIlRFWFQgU0VBUkNIIERJQ1RJT05BUlkgJXtp ZGVudGl0eX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUodHNkRm9ybS0+ZGlj dG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgTmFtZVN0cih0c2RGb3JtLT5kaWN0bmFtZSkpKTsK KworCS8qIEFkZCB0aGUgZGVmaW5pdGlvbiBjbGF1c2UgKi8KKwlsaXN0ID0gTklMOworCisJLyog VEVNUExBVEUgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiVEVNUExBVEU9IiwgMSwKKwkJCQkJ CSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInRlbXBsYXRlIik7CisJYXBwZW5kX29iamVjdF9v YmplY3QodG1wLCAiJXt0ZW1wbGF0ZX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5h bWVfaWQoVFNUZW1wbGF0ZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIHRzZEZvcm0tPmRpY3R0 ZW1wbGF0ZSkpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkp OworCisJLyoKKwkgKiBvcHRpb25zLiAgWFhYIHRoaXMgaXMgYSBwcmV0dHkgdXNlbGVzcyByZXBy ZXNlbnRhdGlvbiwgYnV0IHdlIGNhbid0IGRvCisJICogYmV0dGVyIHdpdGhvdXQgbW9yZSB0c19j YWNoZS5jIGNvb3BlcmF0aW9uIC4uLgorCSAqLworCW9wdGlvbnMgPSBTeXNDYWNoZUdldEF0dHIo VFNESUNUT0lELCB0c2RUdXAsCisJCQkJCQkJICBBbnVtX3BnX3RzX2RpY3RfZGljdGluaXRvcHRp b24sCisJCQkJCQkJICAmaXNudWxsKTsKKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiIiwgMCk7CisJ aWYgKCFpc251bGwpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgIiV7b3B0aW9uc31zIiwg VGV4dERhdHVtR2V0Q1N0cmluZyhvcHRpb25zKSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmpl Y3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2Jq ZWN0X29iamVjdCh0bXApKTsKKworCWFwcGVuZF9hcnJheV9vYmplY3Qoc3RtdCwgIigle2VsZW1z OiwgfXMpIiwgbGlzdCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHNkVHVwKTsKKworCXJldHVybiBz dG10OworfQorCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0RlZmluZVN0bXRfVFNUZW1wbGF0 ZShPaWQgb2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSkKK3sKKwlIZWFwVHVwbGUgICB0c3RU dXA7CisJT2JqVHJlZQkgICAqc3RtdDsKKwlPYmpUcmVlCSAgICp0bXA7CisJTGlzdAkgICAqbGlz dDsKKwlGb3JtX3BnX3RzX3RlbXBsYXRlIHRzdEZvcm07CisKKwl0c3RUdXAgPSBTZWFyY2hTeXND YWNoZTEoVFNURU1QTEFURU9JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICgh SGVhcFR1cGxlSXNWYWxpZCh0c3RUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZh aWxlZCBmb3IgdGV4dCBzZWFyY2ggdGVtcGxhdGUgd2l0aCBPSUQgJXUiLAorCQkJIG9iamVjdElk KTsKKwl0c3RGb3JtID0gKEZvcm1fcGdfdHNfdGVtcGxhdGUpIEdFVFNUUlVDVCh0c3RUdXApOwor CisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICogQ1JFQVRFIFRFWFQgU0VBUkNIIFRF TVBMQVRFICV7aWRlbnRpdHl9RCAoJXtlbGVtczosIH1zKQorCSAqLworCXN0bXQgPSBuZXdfb2Jq dHJlZSgiQ1JFQVRFIik7CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChzdG10LCAiVEVYVCBTRUFS Q0ggVEVNUExBVEUgJXtpZGVudGl0eX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5h bWUodHN0Rm9ybS0+dG1wbG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgTmFtZVN0cih0c3RGb3Jt LT50bXBsbmFtZSkpKTsKKworCS8qIEFkZCB0aGUgZGVmaW5pdGlvbiBjbGF1c2UgKi8KKwlsaXN0 ID0gTklMOworCisJLyogSU5JVCAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJJTklUPSIsIDEs CisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJpbml0Iik7CisJaWYgKE9pZElzVmFs aWQodHN0Rm9ybS0+dG1wbGluaXQpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle3By b2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVy ZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0c3RGb3JtLT50bXBsaW5pdCkpOworCWVsc2UK KwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9IGxh cHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBMRVhJWkUgKi8KKwl0 bXAgPSBuZXdfb2JqdHJlZV9WQSgiTEVYSVpFPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5 cGVTdHJpbmcsICJsZXhpemUiKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle3Byb2Nl ZHVyZX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVs YXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgdHN0Rm9ybS0+dG1wbGxleGl6ZSkpOworCWxpc3QgPSBs YXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJYXBwZW5kX2FycmF5X29i amVjdChzdG10LCAiKCV7ZWxlbXM6LCB9cykiLCBsaXN0KTsKKworCVJlbGVhc2VTeXNDYWNoZSh0 c3RUdXApOworCisJcmV0dXJuIHN0bXQ7Cit9CisKK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2Vf QWx0ZXJUU0NvbmZpZ3VyYXRpb25TdG10KENvbGxlY3RlZENvbW1hbmQgKmNtZCkKK3sKKwlBbHRl clRTQ29uZmlndXJhdGlvblN0bXQgKm5vZGUgPSAoQWx0ZXJUU0NvbmZpZ3VyYXRpb25TdG10ICop IGNtZC0+cGFyc2V0cmVlOworCU9ialRyZWUgKmNvbmZpZzsKKwlPYmpUcmVlICp0bXA7CisJTGlz dAkgICAqbGlzdDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCWludAkJCWk7CisKKwkvKgorCSAqIFZl cmJvc2Ugc3ludGF4CisJICogY2FzZSBBTFRFUl9UU0NPTkZJR19BRERfTUFQUElORzoKKwkgKiBB TFRFUiBURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OICV7aWRlbnRpdHl9RCBBREQgTUFQUElORyBG T1IgJXt0b2tlbnR5cGU6LCB9SSBXSVRIICV7ZGljdGlvbmFyaWVzOiwgfUQKKwkgKgorCSAqIGNh c2UgQUxURVJfVFNDT05GSUdfRFJPUF9NQVBQSU5HOgorCSAqIEFMVEVSIFRFWFQgU0VBUkNIIENP TkZJR1VSQVRJT04gJXtpZGVudGl0eX1EIERST1AgTUFQUElORyAle2lmX2V4aXN0c31zIEZPUiAl e3Rva2VudHlwZX1JCisJICoKKwkgKiBjYXNlIEFMVEVSX1RTQ09ORklHX0FMVEVSX01BUFBJTkdf Rk9SX1RPS0VOOgorCSAqIEFMVEVSIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04gJXtpZGVudGl0 eX1EIEFMVEVSIE1BUFBJTkcgRk9SICV7dG9rZW50eXBlOiwgfUkgV0lUSCAle2RpY3Rpb25hcmll czosIH1ECisJICoKKwkgKiBjYXNlIEFMVEVSX1RTQ09ORklHX1JFUExBQ0VfRElDVDoKKwkgKiBB TFRFUiBURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OICV7aWRlbnRpdHl9RCBBTFRFUiBNQVBQSU5H IFJFUExBQ0UgJXtvbGRfZGljdGlvbmFyeX1EIFdJVEggJXtuZXdfZGljdGlvbmFyeX1ECisJICoK KwkgKiBjYXNlIEFMVEVSX1RTQ09ORklHX1JFUExBQ0VfRElDVF9GT1JfVE9LRU46CisJICogQUxU RVIgVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiAle2lkZW50aXR5fUQgQUxURVIgTUFQUElORyBG T1IgJXt0b2tlbnR5cGU6LCB9SSBSRVBMQUNFICV7b2xkX2RpY3Rpb25hcnl9RCBXSVRIICV7bmV3 X2RpY3Rpb25hcnl9RAorCSAqLworCisJY29uZmlnID0gbmV3X29ianRyZWUoIkFMVEVSIFRFWFQg U0VBUkNIIENPTkZJR1VSQVRJT04iKTsKKworCS8qIGRldGVybWluZSB0aGUgZm9ybWF0IHN0cmlu ZyBhcHByb3ByaWF0ZSB0byBlYWNoIHN1YmNvbW1hbmQgKi8KKwlzd2l0Y2ggKG5vZGUtPmtpbmQp CisJeworCQljYXNlIEFMVEVSX1RTQ09ORklHX0FERF9NQVBQSU5HOgorCQkJYXBwZW5kX29iamVj dF9vYmplY3QoY29uZmlnLCAiJXtpZGVudGl0eX1EIEFERCBNQVBQSU5HIiwKKwkJCQkJCSBuZXdf b2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoY21kLT5kLmF0c2NmZy5hZGRyZXNzLmNsYXNzSWQsCisJ CQkJCQkJCQkJCQkJIGNtZC0+ZC5hdHNjZmcuYWRkcmVzcy5vYmplY3RJZCkpOworCQkJYnJlYWs7 CisKKwkJY2FzZSBBTFRFUl9UU0NPTkZJR19EUk9QX01BUFBJTkc6CisJCQlhcHBlbmRfb2JqZWN0 X29iamVjdChjb25maWcsICIle2lkZW50aXR5fUQgRFJPUCBNQVBQSU5HIiwKKwkJCQkJCQkJIG5l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChjbWQtPmQuYXRzY2ZnLmFkZHJlc3MuY2xhc3NJZCwK KwkJCQkJCQkJCQkJCQkJCSBjbWQtPmQuYXRzY2ZnLmFkZHJlc3Mub2JqZWN0SWQpKTsKKwkJCXRt cCA9IG5ld19vYmp0cmVlX1ZBKCJJRiBFWElTVFMiLCAwKTsKKwkJCWFwcGVuZF9ib29sX29iamVj dCh0bXAsICJwcmVzZW50Iiwgbm9kZS0+bWlzc2luZ19vayk7CisJCQlhcHBlbmRfb2JqZWN0X29i amVjdChjb25maWcsICIle2lmX2V4aXN0c31zIiwgdG1wKTsKKwkJCWJyZWFrOworCisJCWNhc2Ug QUxURVJfVFNDT05GSUdfQUxURVJfTUFQUElOR19GT1JfVE9LRU46CisJCQlhcHBlbmRfb2JqZWN0 X29iamVjdChjb25maWcsICIle2lkZW50aXR5fUQgQUxURVIgTUFQUElORyIsCisJCQkJCQkJCSBu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoY21kLT5kLmF0c2NmZy5hZGRyZXNzLmNsYXNzSWQs CisJCQkJCQkJCQkJCQkJCQkgY21kLT5kLmF0c2NmZy5hZGRyZXNzLm9iamVjdElkKSk7CisJCQli cmVhazsKKworCQljYXNlIEFMVEVSX1RTQ09ORklHX1JFUExBQ0VfRElDVDoKKwkJCWFwcGVuZF9v YmplY3Rfb2JqZWN0KGNvbmZpZywgIiV7aWRlbnRpdHl9RCBBTFRFUiBNQVBQSU5HIiwKKwkJCQkJ CQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChjbWQtPmQuYXRzY2ZnLmFkZHJlc3MuY2xh c3NJZCwKKwkJCQkJCQkJCQkJCQkJCSBjbWQtPmQuYXRzY2ZnLmFkZHJlc3Mub2JqZWN0SWQpKTsK KwkJCWJyZWFrOworCisJCWNhc2UgQUxURVJfVFNDT05GSUdfUkVQTEFDRV9ESUNUX0ZPUl9UT0tF TjoKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNvbmZpZywgIiV7aWRlbnRpdHl9RCBBTFRFUiBN QVBQSU5HIiwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChjbWQtPmQuYXRz Y2ZnLmFkZHJlc3MuY2xhc3NJZCwKKwkJCQkJCQkJCQkJCQkJCSBjbWQtPmQuYXRzY2ZnLmFkZHJl c3Mub2JqZWN0SWQpKTsKKwkJCWJyZWFrOworCX0KKworCS8qIEFkZCB0aGUgYWZmZWN0ZWQgdG9r ZW4gbGlzdCwgZm9yIHN1YmNvbW1hbmRzIHRoYXQgaGF2ZSBvbmUgKi8KKwlpZiAobm9kZS0+a2lu ZCA9PSBBTFRFUl9UU0NPTkZJR19BRERfTUFQUElORyB8fAorCQlub2RlLT5raW5kID09IEFMVEVS X1RTQ09ORklHX0FMVEVSX01BUFBJTkdfRk9SX1RPS0VOIHx8CisJCW5vZGUtPmtpbmQgPT0gQUxU RVJfVFNDT05GSUdfUkVQTEFDRV9ESUNUX0ZPUl9UT0tFTiB8fAorCQlub2RlLT5raW5kID09IEFM VEVSX1RTQ09ORklHX0RST1BfTUFQUElORykKKwl7CisJCWxpc3QgPSBOSUw7CisJCWZvcmVhY2go Y2VsbCwgbm9kZS0+dG9rZW50eXBlKQorCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmlu Z19vYmplY3Qoc3RyVmFsKGxmaXJzdChjZWxsKSkpKTsKKwkJYXBwZW5kX2FycmF5X29iamVjdChj b25maWcsICJGT1IgJXt0b2tlbnR5cGU6LCB9SSIsIGxpc3QpOworCX0KKworCS8qIGFkZCBmdXJ0 aGVyIHN1YmNvbW1hbmQtc3BlY2lmaWMgZWxlbWVudHMgKi8KKwlpZiAobm9kZS0+a2luZCA9PSBB TFRFUl9UU0NPTkZJR19BRERfTUFQUElORyB8fAorCQlub2RlLT5raW5kID09IEFMVEVSX1RTQ09O RklHX0FMVEVSX01BUFBJTkdfRk9SX1RPS0VOKQorCXsKKwkJLyogQUREIE1BUFBJTkcgYW5kIEFM VEVSIE1BUFBJTkcgRk9SIG5lZWQgYSBsaXN0IG9mIGRpY3Rpb25hcmllcyAqLworCQlsaXN0ID0g TklMOworCQlmb3IgKGkgPSAwOyBpIDwgY21kLT5kLmF0c2NmZy5uZGljdHM7IGkrKykKKwkJewor CQkJT2JqVHJlZQkqZGljdG9iajsKKworCQkJZGljdG9iaiA9IG5ld19vYmp0cmVlX2Zvcl9xdWFs bmFtZV9pZChUU0RpY3Rpb25hcnlSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJICBjbWQtPmQuYXRz Y2ZnLmRpY3RJZHNbaV0pOworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwKKwkJCQkJCSAgIG5ld19v YmplY3Rfb2JqZWN0KGRpY3RvYmopKTsKKwkJfQorCQlhcHBlbmRfYXJyYXlfb2JqZWN0KGNvbmZp ZywgIldJVEggJXtkaWN0aW9uYXJpZXM6LCB9RCIsIGxpc3QpOworCX0KKwllbHNlIGlmIChub2Rl LT5raW5kID09IEFMVEVSX1RTQ09ORklHX1JFUExBQ0VfRElDVCB8fAorCQkJIG5vZGUtPmtpbmQg PT0gQUxURVJfVFNDT05GSUdfUkVQTEFDRV9ESUNUX0ZPUl9UT0tFTikKKwl7CisJCS8qIHRoZSBS RVBMQUNFIGZvcm1zIHdhbnQgb2xkIGFuZCBuZXcgZGljdGlvbmFyaWVzICovCisJCUFzc2VydChj bWQtPmQuYXRzY2ZnLm5kaWN0cyA9PSAyKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3QoY29uZmln LCAiUkVQTEFDRSAle29sZF9kaWN0aW9uYXJ5fUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWVfaWQoVFNEaWN0aW9uYXJ5UmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIGNtZC0+ ZC5hdHNjZmcuZGljdElkc1swXSkpOworCQlhcHBlbmRfb2JqZWN0X29iamVjdChjb25maWcsICJX SVRIICV7bmV3X2RpY3Rpb25hcnl9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZV9pZChUU0RpY3Rpb25hcnlSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgY21kLT5kLmF0c2Nm Zy5kaWN0SWRzWzFdKSk7CisJfQorCisJcmV0dXJuIGNvbmZpZzsKK30KKworc3RhdGljIE9ialRy ZWUgKgorZGVwYXJzZV9BbHRlclRTRGljdGlvbmFyeVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpw YXJzZXRyZWUpCit7CisJT2JqVHJlZSAqYWx0ZXJUU0Q7CisJT2JqVHJlZSAqdG1wOworCURhdHVt CQlvcHRpb25zOworCUxpc3QJICAgKmRlZmluaXRpb24gPSBOSUw7CisJYm9vbAkJaXNudWxsOwor CUhlYXBUdXBsZSAgIHRzZFR1cDsKKwlGb3JtX3BnX3RzX2RpY3QgdHNkRm9ybTsKKworCXRzZFR1 cCA9IFNlYXJjaFN5c0NhY2hlMShUU0RJQ1RPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQp KTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHNkVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hl IGxvb2t1cCBmYWlsZWQgZm9yIHRleHQgc2VhcmNoIGRpY3Rpb25hcnkgIgorCQkJICJ3aXRoIE9J RCAldSIsIG9iamVjdElkKTsKKwl0c2RGb3JtID0gKEZvcm1fcGdfdHNfZGljdCkgR0VUU1RSVUNU KHRzZFR1cCk7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICogQUxURVIgVEVYVCBTRUFS Q0ggRElDVElPTkFSWSAle2lkZW50aXR5fUQgKCV7ZGVmaW5pdGlvbjosIH1zKQorCSAqLworCisJ YWx0ZXJUU0QgPSBuZXdfb2JqdHJlZSgiQUxURVIgVEVYVCBTRUFSQ0ggRElDVElPTkFSWSIpOwor CisJYXBwZW5kX29iamVjdF9vYmplY3QoYWx0ZXJUU0QsICIle2lkZW50aXR5fUQiLAorCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZSh0c2RGb3JtLT5kaWN0bmFtZXNwYWNlLAorCQkJCQkJ CQkJCQkJICBOYW1lU3RyKHRzZEZvcm0tPmRpY3RuYW1lKSkpOworCisJLyogQWRkIHRoZSBkZWZp bml0aW9uIGxpc3QgYWNjb3JkaW5nIHRvIHRoZSBwZ190c19kaWN0IGRpY3Rpbml0b3B0aW9uIGNv bHVtbiAqLworCW9wdGlvbnMgPSBTeXNDYWNoZUdldEF0dHIoVFNESUNUT0lELCB0c2RUdXAsCisJ CQkJCQkJICBBbnVtX3BnX3RzX2RpY3RfZGljdGluaXRvcHRpb24sCisJCQkJCQkJICAmaXNudWxs KTsKKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiIiwgMCk7CisJaWYgKCFpc251bGwpCisJCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KHRtcCwgIiV7b3B0aW9uc31zIiwgVGV4dERhdHVtR2V0Q1N0cmluZyhv cHRpb25zKSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZh bHNlKTsKKworCWRlZmluaXRpb24gPSBsYXBwZW5kKGRlZmluaXRpb24sIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcCkpOworCWFwcGVuZF9hcnJheV9vYmplY3QoYWx0ZXJUU0QsICIoJXtkZWZpbml0aW9u OiwgfXMpIiwgZGVmaW5pdGlvbik7CisJUmVsZWFzZVN5c0NhY2hlKHRzZFR1cCk7CisKKwlyZXR1 cm4gYWx0ZXJUU0Q7Cit9CisKIC8qCiAgKiAuLi4gQUxURVIgQ09MVU1OIC4uLiBTRVQvUkVTRVQg KC4uLikKICAqLwpAQCAtNjM1NCw2ICs2Nzk5LDEwIEBAIGRlcGFyc2VfUmVuYW1lU3RtdChPYmpl Y3RBZGRyZXNzIGFkZHJlc3MsIE5vZGUgKnBhcnNldHJlZSkKIAkJY2FzZSBPQkpFQ1RfVFlQRToK IAkJY2FzZSBPQkpFQ1RfQ09OVkVSU0lPTjoKIAkJY2FzZSBPQkpFQ1RfRE9NQUlOOgorCQljYXNl IE9CSkVDVF9UU0RJQ1RJT05BUlk6CisJCWNhc2UgT0JKRUNUX1RTUEFSU0VSOgorCQljYXNlIE9C SkVDVF9UU1RFTVBMQVRFOgorCQljYXNlIE9CSkVDVF9UU0NPTkZJR1VSQVRJT046CiAJCQl7CiAJ CQkJSGVhcFR1cGxlCW9ialR1cDsKIAkJCQlSZWxhdGlvbgljYXRhbG9nOwpAQCAtNjk4NCw2ICs3 NDMzLDEwIEBAIGRlcGFyc2Vfc2ltcGxlX2NvbW1hbmQoQ29sbGVjdGVkQ29tbWFuZCAqY21kKQog CQkJY29tbWFuZCA9IGRlcGFyc2VfQ3JlYXRlQ2FzdFN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7 CiAJCQlicmVhazsKIAorCQljYXNlIFRfQWx0ZXJUU0RpY3Rpb25hcnlTdG10OgorCQkJY29tbWFu ZCA9IGRlcGFyc2VfQWx0ZXJUU0RpY3Rpb25hcnlTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOwor CQkJYnJlYWs7CisKIAkJZGVmYXVsdDoKIAkJCWNvbW1hbmQgPSBOVUxMOwogCQkJZWxvZyhMT0cs ICJ1bnJlY29nbml6ZWQgbm9kZSB0eXBlIGluIGRlcGFyc2UgY29tbWFuZDogJWQiLApAQCAtNzEw NSw2ICs3NTU4LDkgQEAgZGVwYXJzZV91dGlsaXR5X2NvbW1hbmQoQ29sbGVjdGVkQ29tbWFuZCAq Y21kLCBib29sIHZlcmJvc2VfbW9kZSkKIAkJY2FzZSBTQ1RfQ3JlYXRlT3BDbGFzczoKIAkJCXRy ZWUgPSBkZXBhcnNlX0NyZWF0ZU9wQ2xhc3NTdG10KGNtZCk7CiAJCQlicmVhazsKKwkJY2FzZSBT Q1RfQWx0ZXJUU0NvbmZpZzoKKwkJCXRyZWUgPSBkZXBhcnNlX0FsdGVyVFNDb25maWd1cmF0aW9u U3RtdChjbWQpOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQllbG9nKEVSUk9SLCAidW5leHBl Y3RlZCBkZXBhcnNlIG5vZGUgdHlwZSAlZCIsIGNtZC0+dHlwZSk7CiAJfQpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jIGIvc3JjL2JhY2tlbmQvY29tbWFu ZHMvZXZlbnRfdHJpZ2dlci5jCmluZGV4IGU0NzUxNDc3OGEuLjlhMDNlYTE4ODYgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYworKysgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMKQEAgLTI1NTMsNyArMjU1MywxMSBAQCBwdWJsaWNh dGlvbl9kZXBhcnNlX2RkbF9jb21tYW5kX2VuZChQR19GVU5DVElPTl9BUkdTKQogCQkJCSBzdHJj bXAob2JqLT5vYmplY3R0eXBlLCAidHJpZ2dlciIpID09IDAgfHwKIAkJCQkgc3RyY21wKG9iai0+ b2JqZWN0dHlwZSwgImNvbnZlcnNpb24iKSA9PSAwIHx8CiAJCQkJIHN0cmNtcChvYmotPm9iamVj dHR5cGUsICJwb2xpY3kiKSA9PSAwCXx8Ci0JCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJl eHRlbnNpb24iKSA9PSAwKQorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAiZXh0ZW5zaW9u IikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAidGV4dCBzZWFyY2ggY29u ZmlndXJhdGlvbiIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgInRleHQg c2VhcmNoIGRpY3Rpb25hcnkiKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUs ICJ0ZXh0IHNlYXJjaCBwYXJzZXIiKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5 cGUsICJ0ZXh0IHNlYXJjaCB0ZW1wbGF0ZSIpID09IDApCiAJCQljbWR0eXBlID0gRENUX09iamVj dERyb3A7CiAJCWVsc2UKIAkJCWNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29t bWFuZHMvcHVibGljYXRpb25jbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlv bmNtZHMuYwppbmRleCAyZmFlOTI0YzNhLi4zY2Y1ZjdlZmUwIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5k cy9wdWJsaWNhdGlvbmNtZHMuYwpAQCAtOTMyLDYgKzkzMiwxNiBAQCBDcmVhdGVQdWJsaWNhdGlv bihQYXJzZVN0YXRlICpwc3RhdGUsIENyZWF0ZVB1YmxpY2F0aW9uU3RtdCAqc3RtdCkKIAkJCUNN RFRBR19DUkVBVEVfRVhURU5TSU9OLAogCQkJQ01EVEFHX0FMVEVSX0VYVEVOU0lPTiwKIAkJCUNN RFRBR19EUk9QX0VYVEVOU0lPTiwKKwkJCUNNRFRBR19DUkVBVEVfVEVYVF9TRUFSQ0hfQ09ORklH VVJBVElPTiwKKwkJCUNNRFRBR19BTFRFUl9URVhUX1NFQVJDSF9DT05GSUdVUkFUSU9OLAorCQkJ Q01EVEFHX0RST1BfVEVYVF9TRUFSQ0hfQ09ORklHVVJBVElPTiwKKwkJCUNNRFRBR19DUkVBVEVf VEVYVF9TRUFSQ0hfRElDVElPTkFSWSwKKwkJCUNNRFRBR19BTFRFUl9URVhUX1NFQVJDSF9ESUNU SU9OQVJZLAorCQkJQ01EVEFHX0RST1BfVEVYVF9TRUFSQ0hfRElDVElPTkFSWSwKKwkJCUNNRFRB R19DUkVBVEVfVEVYVF9TRUFSQ0hfUEFSU0VSLAorCQkJQ01EVEFHX0RST1BfVEVYVF9TRUFSQ0hf UEFSU0VSLAorCQkJQ01EVEFHX0NSRUFURV9URVhUX1NFQVJDSF9URU1QTEFURSwKKwkJCUNNRFRB R19EUk9QX1RFWFRfU0VBUkNIX1RFTVBMQVRFLAogCQkJQ01EVEFHX0NSRUFURV9QT0xJQ1ksCiAJ CQlDTURUQUdfQUxURVJfUE9MSUNZLAogCQkJQ01EVEFHX0RST1BfUE9MSUNZLAotLSAKMi4zMi4w Cgo= --00000000000056eb5505e991f569--