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 1ogdIA-0000FS-EV for pgsql-hackers@arkaria.postgresql.org; Fri, 07 Oct 2022 02:40:51 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1ogdI8-0001av-6Z for pgsql-hackers@arkaria.postgresql.org; Fri, 07 Oct 2022 02:40:48 +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 1ogdI7-0001aD-B1 for pgsql-hackers@lists.postgresql.org; Fri, 07 Oct 2022 02:40:47 +0000 Received: from mail-pl1-x62a.google.com ([2607:f8b0:4864:20::62a]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1ogdHz-0000Rn-CJ for pgsql-hackers@lists.postgresql.org; Fri, 07 Oct 2022 02:40:46 +0000 Received: by mail-pl1-x62a.google.com with SMTP id h10so3383464plb.2 for ; Thu, 06 Oct 2022 19:40:38 -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:message-id:reply-to; bh=rB/svW+X4+YCnUvoi0aoEFGRdZ7aTIjEQ1X6BdnlGqg=; b=pnr3T8fUjw5eG9b4g2yTOr7lwth/r20zqVET5MhNmlAV0DiNfbjDbT1ZldAg7WirBP Uf7RPt8l2VzD1ahvy51m7UG4SjIJ2/IhDiKOSGH7hsmEidjXu5QYQMhgm9lL7HR5jMU1 5MhfkHAsHD5uAz6UVE1Ww8zg5lRdQy6+hNFBLrcJohjsjkKdxypKAiYdjtu8/pCSnt2y oGk9NEu5GsLITELUlwmruL4uT1NSFSgGcxxbiTncK0Uq2FYKw8SUg/ozay/ZsHaEvu6b yW2HFGqUjfP9yCfawadtVLYNHK3ZoTFHfGTNhEnfIhCwmWGq/aNKHLP95P6hw7uXMsMm qw7g== 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:message-id :reply-to; bh=rB/svW+X4+YCnUvoi0aoEFGRdZ7aTIjEQ1X6BdnlGqg=; b=d0uIWc7WdvRND2pSl8FtAOWRgK8L3+uq77tCwL8JoP9OuWirpwjaJ+128wEDBmWmnO F6/kNKsVb15u0n6f6bU8qovJPR4XkEnBsip27r3FsANFsu3oSeSktZIhkyUKRhKgeffF oYTafKgQ401rXlP+916Wpfcs2c37WRPjifxgVdj14SEfCmD8vSFZ9cRfNtfzTAVtlGij cgGcucusb5PtaMXXtESVh3/MmJW0CDroUkQEeXEaWF126CvGfh6jR6qva1hSONLOOa7J AOVR3b2pV0RINv1ORXp/xQmtzzdkalQu3JI+jdx9o2V2kP5hQdIbJ1p99tmAp/Xw/dmI DcFw== X-Gm-Message-State: ACrzQf1/XvnkLvrQpNk5Tjgc2jgxqg8D4F8e/LvdPWBIl8ooBdEY8Ms5 +JE3YBgW/fyqAm68s8g7jDc8OHxUBdCvmHgp1Ig= X-Google-Smtp-Source: AMsMyM4FDJe4w+qqtMsESDH6nujYZSGlPOYh+DWrTH2q6h7Qf0RP6GW3/5TAyIuKxaBSwnlziYLDeVuC+W8KhZeX8CI= X-Received: by 2002:a17:902:e80f:b0:178:fee:c5fe with SMTP id u15-20020a170902e80f00b001780feec5femr2824116plg.85.1665110437042; Thu, 06 Oct 2022 19:40:37 -0700 (PDT) MIME-Version: 1.0 References: <20221006171601.6um4ey5idm4h62vf@alvherre.pgsql> In-Reply-To: From: Zheng Li Date: Thu, 6 Oct 2022 22:40:25 -0400 Message-ID: Subject: Re: Support logical replication of DDLs To: Ajin Cherian Cc: Alvaro Herrera , vignesh C , "houzj.fnst@fujitsu.com" , Peter Smith , Amit Kapila , Masahiko Sawada , Japin Li , Dilip Kumar , rajesh singarapu , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="0000000000001ced0705ea68bc1e" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000001ced0705ea68bc1e Content-Type: text/plain; charset="UTF-8" > Thanks for the new patch-set. > Could you add the changes to patch 1 and patch 2, rather than adding a > new patch? > Otherwise, we'll have a separate patch for each command and it will > take double work to keep it updated > for each new command added. OK. Here is the consolidated patch set. TEXT SEARCH and TRANSFORM commands are consolidated into patch 1 and patch 2. I was wondering if keeping the changes for each command separate makes it easier to review. Maybe just for some commands that need special handling. With Regards, Zheng --0000000000001ced0705ea68bc1e Content-Type: application/octet-stream; name="v25-0004-Test-cases-for-DDL-replication.patch" Content-Disposition: attachment; filename="v25-0004-Test-cases-for-DDL-replication.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l8xvpgqr3 RnJvbSA5MTM0MDY0MWM3MTU4YmVjMTNjMGQ4NDBiNzRkMGFlZDA1OThlMmVmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFRodSwgMjkgU2VwIDIwMjIgMDk6Mzc6MjggLTA0MDAKU3ViamVjdDogW1BBVENI IDQvNF0gVGVzdCBjYXNlcyBmb3IgRERMIHJlcGxpY2F0aW9uLgoKQXV0aG9yOiBUYWthbWljaGkg T3N1bWkKLS0tCiAuLi4vc3Vic2NyaXB0aW9uL3QvMDMyX2RkbF9yZXBsaWNhdGlvbi5wbCAgICAg fCA0NjUgKysrKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgNDY1IGluc2VydGlvbnMo KykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMzJfZGRsX3Jl cGxpY2F0aW9uLnBsCgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDMyX2Rk bF9yZXBsaWNhdGlvbi5wbCBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAzMl9kZGxfcmVwbGlj YXRpb24ucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNjZkY2IwMTJh NgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAzMl9kZGxfcmVw bGljYXRpb24ucGwKQEAgLTAsMCArMSw0NjUgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDIyLCBQb3N0 Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorIyBSZWdyZXNzaW9uIHRlc3RzIGZvciBs b2dpY2FsIHJlcGxpY2F0aW9uIG9mIERETHMKKyMKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7 Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpV dGlsczsKK3VzZSBUZXN0OjpNb3JlOworCitteSAkbm9kZV9wdWJsaXNoZXIgPSBQb3N0Z3JlU1FM OjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3B1Ymxpc2hlcicpOworJG5vZGVfcHVibGlzaGVyLT5pbml0 KGFsbG93c19zdHJlYW1pbmcgPT4gJ2xvZ2ljYWwnKTsKKyRub2RlX3B1Ymxpc2hlci0+c3RhcnQ7 CisKK215ICRub2RlX3N1YnNjcmliZXIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXco J3N1YnNjcmliZXInKTsKKyRub2RlX3N1YnNjcmliZXItPmluaXQoYWxsb3dzX3N0cmVhbWluZyA9 PiAnbG9naWNhbCcpOworJG5vZGVfc3Vic2NyaWJlci0+c3RhcnQ7CisKK215ICRkZGwgPSAiQ1JF QVRFIFRBQkxFIHRlc3RfcmVwKGlkIGludCBwcmltYXJ5IGtleSwgbmFtZSB2YXJjaGFyLCB2YWx1 ZSBpbnRlZ2VyKTsiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJGRk bCk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8g dGVzdF9yZXAgVkFMVUVTICgxLCAnZGF0YTEnLCAxKTsiKTsKKyRub2RlX3N1YnNjcmliZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAkZGRsKTsKKworbXkgJHB1Ymxpc2hlcl9jb25uc3RyID0gJG5v ZGVfcHVibGlzaGVyLT5jb25uc3RyIC4gJyBkYm5hbWU9cG9zdGdyZXMnOworJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFBVQkxJQ0FUSU9OIG15cHViIEZP UiBBTEwgVEFCTEVTIHdpdGggKHB1Ymxpc2ggPSAnaW5zZXJ0LCB1cGRhdGUsIGRlbGV0ZSwgZGRs Jyk7Iik7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRF IFNVQlNDUklQVElPTiBteXN1YiBDT05ORUNUSU9OICckcHVibGlzaGVyX2Nvbm5zdHInIFBVQkxJ Q0FUSU9OIG15cHViOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1 YicpOworCisjIE1ha2Ugc3VyZSB3ZSBoYXZlIGZ1bGx5IHN5bmNocm9uaXplZCB0aGUgdGFibGUu CisjIFRoaXMgcHJldmVudHMgQUxURVIgVEFCTEUgY29tbWFuZCBiZWxvdyBmcm9tIGJlaW5nIGV4 ZWN1dGVkIGR1cmluZyB0YWJsZSBzeW5jaHJvbml6YXRpb24uCiskbm9kZV9zdWJzY3JpYmVyLT5w b2xsX3F1ZXJ5X3VudGlsKCdwb3N0Z3JlcycsCisgICAiU0VMRUNUIENPVU5UKDEpID0gMCBGUk9N IHBnX3N1YnNjcmlwdGlvbl9yZWwgc3IgV0hFUkUgc3Iuc3JzdWJzdGF0ZSBOT1QgSU4gKCdzJywg J3InKSBBTkQgc3Iuc3JyZWxpZCA9ICd0ZXN0X3JlcCc6OnJlZ2NsYXNzIgorKTsKKworIyBUZXN0 IEFMVEVSIFRBQkxFIEFERAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IkFMVEVSIFRBQkxFIHRlc3RfcmVwIEFERCBjNCBpbnQ7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdGVzdF9yZXAgVkFMVUVTICgyLCAnZGF0 YTInLCAyLCAyKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWIn KTsKK215ICRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IlNFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3RfcmVwIFdIRVJFIGM0ID0gMjsiKTsKK2lzKCRyZXN1 bHQsIHFxKDEpLCAnQUxURVIgdGVzdF9yZXAgQUREIHJlcGxpY2F0ZWQnKTsKKworIyBUZXN0IEFM VEVSIFRBQkxFIERST1AKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJB TFRFUiBUQUJMRSB0ZXN0X3JlcCBEUk9QIGM0OyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkRFTEVURSBGUk9NIHRlc3RfcmVwIHdoZXJlIGlkID0gMjsiKTsKKyRu b2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9k ZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9t IHRlc3RfcmVwOyIpOworaXMoJHJlc3VsdCwgcXEoMSksICdBTFRFUiB0ZXN0X3JlcCBEUk9QIHJl cGxpY2F0ZWQnKTsKKworIyBUZXN0IEFMVEVSIFRBQkxFIEFMVEVSIFRZUEUKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJBTFRFUiBUQUJMRSB0ZXN0X3JlcCBBTFRFUiB2 YWx1ZSBUWVBFIHZhcmNoYXIiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDMsICdkYXRhMycsICczJyk7Iik7Cisk bm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0ID0gJG5v ZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgRlJP TSB0ZXN0X3JlcCBXSEVSRSB2YWx1ZSA9ICczJzsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnQUxU RVIgdGVzdF9yZXAgQUxURVIgQ09MVU1OIFRZUEUgcmVwbGljYXRlZCcpOworCisjIFRlc3QgQUxU RVIgVEFCTEUgQUxURVIgU0VUIERFRkFVTFQKKyMgQ2hlY2sgaWYgd2UgaGF2ZSB0aGUgZGVmYXVs dCB2YWx1ZSBhZnRlciB0aGUgZGlyZWN0IGluc2VydCB0byBzdWJzY3JpYmVyIG5vZGUuCiskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQUxURVIgVEFCTEUgdGVzdF9yZXAg QUxURVIgQ09MVU1OIHZhbHVlIFNFVCBERUZBVUxUICdmb28nIik7Ciskbm9kZV9wdWJsaXNoZXIt PndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRlc3RfcmVwIFZBTFVFUyAoNCwgJ2RhdGE0Jyk7Iik7 CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxF Q1QgdmFsdWUgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDQ7Iik7CitpcygkcmVzdWx0LCAnZm9v JywgJ0FMVEVSIHRlc3RfcmVwIEFMVEVSIFNFVCBERUZBVUxUIHJlcGxpY2F0ZWQnKTsKKworIyBU ZXN0IEFMVEVSIFRBQkxFIEFMVEVSIERST1AgREVGQVVMVAorIyBDaGVjayBpZiB3ZSBkb24ndCBo YXZlIHRoZSBkZWZhdWx0IHZhbHVlIHByZXZpb3VzbHkgZGVmaW5lZC4KKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJBTFRFUiBUQUJMRSB0ZXN0X3JlcCBBTFRFUiBDT0xV TU4gdmFsdWUgRFJPUCBERUZBVUxUOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRj aHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJ TlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDUsICdkYXRhNScpOyIpOworJHJlc3VsdCA9ICRu b2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIHZhbHVlIElTIE5V TEwgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDU7Iik7CitpcygkcmVzdWx0LCBxKHQpLCAnQUxU RVIgdGVzdF9yZXAgQUxURVIgRFJPUCBERUZBVUxUIHJlcGxpY2F0ZWQnKTsKKworIyBUZXN0IEFM VEVSIFRBQkxFIEFMVEVSIFNFVCBOT1QgTlVMTAorIyBSZW1vdmUgdGhlIGV4aXN0aW5nIHJlY29y ZCB0aGF0IGNvbnRhaW5zIG51bGwgdmFsdWUgZmlyc3QuCitteSAoJHN0ZG91dCwgJHN0ZGVycik7 Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRFTEVURSBGUk9NIHRl c3RfcmVwIFdIRVJFIGlkID0gNTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJBTFRFUiBUQUJMRSB0ZXN0X3JlcCBBTFRFUiB2YWx1ZSBTRVQgTk9UIE5VTEw7Iik7 Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJz Y3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDYs ICdkYXRhNicpOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJy ID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAv RVJST1I6ICBudWxsIHZhbHVlIGluIGNvbHVtbiBcInZhbHVlXCIgb2YgcmVsYXRpb24gXCJ0ZXN0 X3JlcFwiIHZpb2xhdGVzIG5vdC1udWxsIGNvbnN0cmFpbnQvCisgIG9yIGRpZSAiZmFpbGVkIHRv IHJlcGxpY2F0ZSBBTFRFUiBUQUJMRSBBTFRFUiBTRVQgTk9UIE5VTEwiOworCisjIFRlc3QgQUxU RVIgVEFCTEUgQUxURVIgRFJPUCBOT1QgTlVMTAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIkFMVEVSIFRBQkxFIHRlc3RfcmVwIEFMVEVSIHZhbHVlIERST1AgTk9UIE5V TEw7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CisjIElu c2VydCBzYW1lIGRhdGEgdGhhdCBoYXMgTlVMTCB2YWx1ZS4gVGhpcyBmYWlsZWQgYmVmb3JlIGJ1 dCBub3cgc2hvdWxkIHN1Y2NlZWQuCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIklOU0VSVCBJTlRPIHRlc3RfcmVwIFZBTFVFUyAoNiwgJ2RhdGE2Jyk7Iik7CiskcmVz dWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgdmFs dWUgSVMgTlVMTCBGUk9NIHRlc3RfcmVwIFdIRVJFIGlkID0gNjsiKTsKK2lzKCRyZXN1bHQsIHEo dCksICJBTFRFUiB0ZXN0X3JlcCBBTFRFUiBEUk9QIE5PVCBOVUxMIHJlcGxpY2F0ZWQiKTsKKwor IyBUZXN0IEFMVEVSIFRBQkxFIFNFVCBVTkxPR0dFRAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgJ0FMVEVSIFRBQkxFIHRlc3RfcmVwIFNFVCBVTkxPR0dFRDsnKTsKKyRu b2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDcs ICdkYXRhNycsICc3Jyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215 c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDc7Iik7CitpcygkcmVz dWx0LCBxcSgwKSwgJ0FMVEVSIHRlc3RfcmVwIFNFVCBVTkxPR0dFRCByZXBsaWNhdGVkJyk7CisK KyMgVGVzdCBBTFRFUiBUQUJMRSBTRVQgTE9HR0VECiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAnQUxURVIgVEFCTEUgdGVzdF9yZXAgU0VUIExPR0dFRDsnKTsKKyRub2Rl X3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDgsICdk YXRhOCcsICc4Jyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3Vi Jyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJT RUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDg7Iik7CitpcygkcmVzdWx0 LCBxcSgxKSwgJ0FMVEVSIHRlc3RfcmVwIFNFVCBMT0dHRUQgcmVwbGljYXRlZCcpOworCisjIFRl c3QgQ1JFQVRFIFRBQkxFIGFuZCBETUwgY2hhbmdlcworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGEgaW50LCBiIHZhcmNoYXIpOyIpOwor JG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRu b2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZy b20gcGdfdGFibGVzIHdoZXJlIHRhYmxlbmFtZSA9ICd0bXAnOyIpOworaXMoJHJlc3VsdCwgcXEo MSksICdDUkVBVEUgdG1wIGlzIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgdmFsdWVzICgxLCAnYScpIik7Ciskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIHZhbHVl cyAoMiwgJ2InKSIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1Yicp OworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VM RUNUIGNvdW50KCopIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoMiksICdETUwgQ2hhbmdl cyB0byB0bXAgYXJlIHJlcGxpY2F0ZWQnKTsKKworIyBUZXN0IENSRUFURSBUQUJMRSBJTkhFUklU UworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0 bXAyIChjMyBpbnQpIElOSEVSSVRTICh0bXApOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcDIgVkFMVUVTICgxLCAnYScsIDEpOyIpOwor JG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRu b2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZy b20gcGdfdGFibGVzIHdoZXJlIHRhYmxlbmFtZSA9ICd0bXAyJzsiKTsKK2lzKCRyZXN1bHQsIHFx KDEpLCAnQ1JFQVRFIFRBQkxFIElOSEVSSVRTIGlzIHJlcGxpY2F0ZWQnKTsKKyRyZXN1bHQgPSAk bm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBm cm9tIHRtcDI7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ2luc2VydGluZyBzb21lIGRhdGEgdG8g aW5oZXJpdGVkIHRhYmxlIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDIiKTsKKworIyBUZXN0IENSRUFURSBUQUJMRSBM SUtFCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxF IHRtcDMgKGMzIGludCwgTElLRSB0bXApOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcDMgVkFMVUVTICgxLCAxLCAnYScpOyIpOworJG5v ZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2Rl X3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20g cGdfdGFibGVzIHdoZXJlIHRhYmxlbmFtZSA9ICd0bXAzJzsiKTsKK2lzKCRyZXN1bHQsIHFxKDEp LCAnQ1JFQVRFIFRBQkxFIExJS0UgcmVwbGljYXRlZCcpOworJHJlc3VsdCA9ICRub2RlX3N1YnNj cmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20gdG1wMzsi KTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnaW5zZXJ0IHNvbWUgZGF0YSB0byBhIHRhYmxlIGRlZmlu ZWQgd2l0aCBMSUtFIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDMiKTsKKworIyBUZXN0IERST1AgVEFCTEUKKyRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDsiKTsKKyRu b2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9k ZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9t IHBnX3RhYmxlcyB3aGVyZSB0YWJsZW5hbWUgPSAndG1wJzsiKTsKK2lzKCRyZXN1bHQsIHFxKDAp LCAnVEFCTEUgdG1wIGlzIGRyb3BwZWQnKTsKKworIyBUZXN0IENSRUFURSBVTkxPR0dFRCBUQUJM RQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBVTkxPR0dF RCBUQUJMRSB0bXAgKGlkIGludCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7Iik7Ciskbm9kZV9wdWJsaXNoZXIt PndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgZnJvbSBwZ190YWJsZXMgd2hl cmUgdGFibGVuYW1lID0gJ3RtcCc7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ0NSRUFURSBVTkxP R0dFRCBUQUJMRSBpcyByZXBsaWNhdGVkIGNvcnJlY3RseScpOworJHJlc3VsdCA9ICRub2RlX3N1 YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20gdG1w OyIpOworaXMoJHJlc3VsdCwgcXEoMCksICdpbnNlcnRpbmcgZGF0YSB0byB1bmxvZ2dlZCB0YWJs ZSBpcyBub3QgcmVwbGljYXRlZCBjb3JyZWN0bHknKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOworCisjIFRlc3QgQ1JFQVRFIFRBQkxF IElGIE5PVCBFWElTVFMKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJD UkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyB0bXAgKGlkIGludCk7Iik7Ciskbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7Iik7 Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0ID0g JG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikg ZnJvbSBwZ190YWJsZXMgd2hlcmUgdGFibGVuYW1lID0gJ3RtcCc7Iik7CitpcygkcmVzdWx0LCBx cSgxKSwgJ0NSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHJlcGxpY2F0ZWQnKTsKKyRyZXN1bHQg PSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgq KSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnaW5zZXJ0aW5nIGRhdGEgdG8gYSB0 YWJsZSByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiRFJPUCBUQUJMRSB0bXAiKTsKKworIyBUZXN0IENSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RT IChjaGVjayBpZiB3ZSBza2lwIHRvIGNyZWF0ZSBhIHRhYmxlCisjIHdoZW4gd2UgaGF2ZSB0aGUg dGFibGUgb24gdGhlIHN1YnNjcmliZXIgaW4gYWR2YW5jZSwgYW5kIGlmIHdlIHN1Y2NlZWQKKyMg aW4gcmVwbGljYXRpbmcgY2hhbmdlcy4pCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCk7Iik7Ciskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgdG1wIChp ZCBpbnQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VS VCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRj aHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoMSks ICdDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAiKTsKKworIyBUZXN0IENS RUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIChjaGVjayBpZiB3ZSBza2lwIHRvIGNyZWF0ZSBhIHRh YmxlCisjIHdoZW4gd2UgaGF2ZSB0aGUgdGFibGUgb24gdGhlIHB1Ymxpc2hlciwgYnV0IG5vdCBv biB0aGUgc3Vic2NyaWJlci4pCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyB0bXAgKGlkIGludCk7 Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8g dG1wIFZBTFVFUyAoMSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215 c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJTRUxFQ1QgY291bnQoKikgZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ0NSRUFU RSBUQUJMRSBJRiBOT1QgRVhJU1RTIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOworCisjIFRlc3QgQ1JFQVRFIFRB QkxFIHdpdGggY29sbGF0ZQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IkNSRUFURSBUQUJMRSB0bXAgKG5hbWUgdGV4dCBDT0xMQVRFIFwiQ1wiKTsiKTsKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgn Zm9vJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Cisk cmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1Qg Y29sbGF0aW9uX25hbWUgRlJPTSBpbmZvcm1hdGlvbl9zY2hlbWEuY29sdW1ucyBXSEVSRSB0YWJs ZV9uYW1lID0gJ3RtcCc7Iik7CitpcygkcmVzdWx0LCBxcShDKSwgJ0NSRUFURSBUQUJMRSB3aXRo IGNvbGxhdGUgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIkRST1AgVEFCTEUgdG1wIik7CisKKyMgVGVzdCBDUkVBVEUgVEFCTEUgd2l0aCBuYW1l ZCBjb25zdHJhaW50Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JF QVRFIFRBQkxFIHRtcCAoaWQgaW50IENPTlNUUkFJTlQgXCJtdXN0IGJlIGJpZ2dlciB0aGFuIDEw XCIgQ0hFQ0sgKGlkID4gMTApKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1 cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJ TlRPIHRtcCBWQUxVRVMgKDEpOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJ ICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0 ZGVyciA9fiAvRVJST1I6ICBuZXcgcm93IGZvciByZWxhdGlvbiAidG1wIiB2aW9sYXRlcyBjaGVj ayBjb25zdHJhaW50ICJtdXN0IGJlIGJpZ2dlciB0aGFuIDEwIi8KKyAgb3IgZGllICJmYWlsZWQg dG8gcmVwbGljYXRlIG5hbWVkIGNvbnN0cmFpbnQgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisj IFRlc3QgQ1JFQVRFIFRBQkxFIHdpdGggdmFyaW91cyB0eXBlcyBvZiBjb25zdHJhaW50cy4KKyMg Tk9UIE5VTEwgY29uc3RyYWludAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCwgbmFtZSB0ZXh0IE5PVCBOVUxMKTsiKTsKKyRu b2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmli ZXItPnBzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIsCisJCQkJ CSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJ CQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBudWxsIHZhbHVl IGluIGNvbHVtbiAibmFtZSIgb2YgcmVsYXRpb24gInRtcCIgdmlvbGF0ZXMgbm90LW51bGwgY29u c3RyYWludC8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVwbGljYXRlIG5vbiBudWxsIGNvbnN0cmFp bnQgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisjIE5VTEwgY29uc3RyYWludAorJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCwg bmFtZSB0ZXh0IE5VTEwpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdt eXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQg SU5UTyB0bXAgVkFMVUVTICgxKTsiKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBuYW1lIElTIE5VTEwgRlJPTSB0bXA7Iik7Citpcygk cmVzdWx0LCBxcSh0KSwgIkNSRUFURSBUQUJMRSB3aXRoIE5VTEwgY29uc3RyYWludCByZXBsaWNh dGVkIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJM RSB0bXAiKTsKKworIyBDSEVDSyBjb25zdHJhaW50Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50LCBwcm9kdWN0X2FtZSB0ZXh0 LCBwcmljZSBpbnQgQ0hFQ0sgKHByaWNlID4gMCkpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0 X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9zdGdyZXMn LCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSwgJ2ZvbycsIC0xMDApOyIsCisJCQkJCSAgIG9u X2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkgICBz dGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBuZXcgcm93IGZvciByZWxh dGlvbiAidG1wIiB2aW9sYXRlcyBjaGVjayBjb25zdHJhaW50ICJ0bXBfcHJpY2VfY2hlY2siLwor ICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgQ0hFQ0sgY29uc3RyYWludCI7Ciskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXA7Iik7CisKKyMg REVGQVVMVAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBU QUJMRSB0bXAgKGlkIGludCwgbmFtZSB0ZXh0IERFRkFVTFQgJ2ZvbycpOyIpOworJG5vZGVfcHVi bGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiKTsKKyRyZXN1 bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBuYW1l IGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoZm9vKSwgIkNSRUFURSBUQUJMRSB3aXRoIGRl ZmF1bHQgdmFsdWUgcmVwbGljYXRlZCIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7CisKKyMgVU5JUVVFIGNvbnN0cmFpbnQKKyRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBp bnQgVU5JUVVFKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJ TlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3Jf Y2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIklO U0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwK KwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQp OworJHN0ZGVyciA9fiAvRVJST1I6ICBkdXBsaWNhdGUga2V5IHZhbHVlIHZpb2xhdGVzIHVuaXF1 ZSBjb25zdHJhaW50ICJ0bXBfaWRfa2V5Ii8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVwbGljYXRl IGNvbnN0cmFpbnQgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisjIFBSSU1BUlkgS0VZCiskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQg aW50IFBSSU1BUlkgS0VZLCBuYW1lIHRleHQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEsICdmb28nKTsiKTsKKyRu b2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmli ZXItPnBzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEsICdiYXInKTsi LAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVy ciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgZHVw bGljYXRlIGtleSB2YWx1ZSB2aW9sYXRlcyB1bmlxdWUgY29uc3RyYWludCAidG1wX3BrZXkiLwor ICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgcHJpbWFyeSBrZXkgYXQgY3JlYXRpbmcgdGFi bGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUg dG1wOyIpOworCisjIEVYQ0xVREUKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJDUkVBVEUgVEFCTEUgY2lyY2xlcyAoYyBjaXJjbGUsIEVYQ0xVREUgVVNJTkcgZ2lzdCAo YyBXSVRIICYmKSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi SU5TRVJUIElOVE8gY2lyY2xlcyBWQUxVRVMgKCc8KDEsIDEpLCAxPic6OmNpcmNsZSk7Iik7Cisk bm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3Jp YmVyLT5wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyBjaXJjbGVzIFZBTFVFUyAoJzwoMSwg MSksIDE+Jzo6Y2lyY2xlKTsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAg IHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRl cnIgPX4gL0VSUk9SOiAgY29uZmxpY3Rpbmcga2V5IHZhbHVlIHZpb2xhdGVzIGV4Y2x1c2lvbiBj b25zdHJhaW50ICJjaXJjbGVzX2NfZXhjbCIvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxpY2F0 ZSBFWENMVURFIGF0IGNyZWF0aW5nIHRhYmxlIjsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIGNpcmNsZXMiKTsKKworIyBSRUZFUkVOQ0VTCiskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHByb2R1Y3Qg KGlkIGludCBQUklNQVJZIEtFWSwgbmFtZSB0ZXh0KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyBwcm9kdWN0IFZBTFVFUyAoMSwgJ2Zvbycp OyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRP IHByb2R1Y3QgVkFMVUVTICgyLCAnYmFyJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIG9yZGVycyAob3JkZXJfaWQgaW50IFBSSU1BUlkg S0VZLCBwcm9kdWN0X2lkIGludCBSRUZFUkVOQ0VTIHByb2R1Y3QgKGlkKSkiKTsKKyRub2RlX3B1 Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnBz cWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIG9yZGVycyBWQUxVRVMgKDEsIDEwKSIsCisJCQkJ CSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJ CQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBpbnNlcnQgb3Ig dXBkYXRlIG9uIHRhYmxlICJvcmRlcnMiIHZpb2xhdGVzIGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQg Im9yZGVyc19wcm9kdWN0X2lkX2ZrZXkiLworICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUg UkVGRVJFTkNFUyBhdCBjcmVhdGluZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSBvcmRlcnMiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHByb2R1Y3QiKTsKKworIyBERUZFUlJBQkxF Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRt cCAoaWQgaW50IFBSSU1BUlkgS0VZIERFRkVSUkFCTEUsIG5hbWUgdGV4dCk7Iik7Ciskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAo MSwgJ2ZvbycpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklO U0VSVCBJTlRPIHRtcCBWQUxVRVMgKDIsICdiYXInKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2Fp dF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyMgUXVpY2sgY2hlY2sgb2YgZGVmZXJyYWJsZSBjbGF1 c2UKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiVVBEQVRFIHRtcCBT RVQgaWQgPSBpZCArIDE7Iik7CisjIEFsc28sIGV4ZWN1dGUgYSB0ZXN0IHRoYXQgc2hvdWxkIGZh aWwgZm9yIElOSVRJQUxMWSBJTU1FRElBVEUodGhlIGRlZmF1bHQpCiskbm9kZV9zdWJzY3JpYmVy LT5wc3FsKCdwb3N0Z3JlcycsIHFxKAorQkVHSU47CitVUERBVEUgdG1wIFNFVCBpZCA9IGlkICsg MTsKK0lOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDMsICdmb29iYXInKTsKK0RFTEVURSBGUk9NIHRt cCBXSEVSRSBpZCA9IDM7CitDT01NSVQ7CispLCBvbl9lcnJvcl9zdG9wID0+IDAsIHN0ZGVyciA9 PiBcJHN0ZGVyciwgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgZHVw bGljYXRlIGtleSB2YWx1ZSB2aW9sYXRlcyB1bmlxdWUgY29uc3RyYWludCAidG1wX3BrZXkiLwor ICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgREVGRVJSQUJMRSBhdCBjcmVhdGluZyB0YWJs ZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0 bXA7Iik7CisKKyMgTk9UIERFRkVSUkFCTEUKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBpbnQgUFJJTUFSWSBLRVkgTk9UIERFRkVS UkFCTEUsIG5hbWUgdGV4dCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSwgJ2ZvbycpOyIpOworJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDIsICdi YXInKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRu b2RlX3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIlVQREFURSB0bXAgU0VUIGlkID0gaWQg KyAxOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwk c3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6 ICBkdXBsaWNhdGUga2V5IHZhbHVlIHZpb2xhdGVzIHVuaXF1ZSBjb25zdHJhaW50ICJ0bXBfcGtl eSIvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxpY2F0ZSBOT1QgREVGRVJSQUJMRSBhdCBjcmVh dGluZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJP UCBUQUJMRSB0bXA7Iik7CisKKyMgREVGRVJSQUJMRSBhbmQgSU5JVElBTExZIERFRkVSUkVECisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAo aWQgaW50IFBSSU1BUlkgS0VZIERFRkVSUkFCTEUgSU5JVElBTExZIERFRkVSUkVELCBuYW1lIHRl eHQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJ TlRPIHRtcCBWQUxVRVMgKDEsICdmb28nKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgyLCAnYmFyJyk7Iik7Ciskbm9k ZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CisjIFF1aWNrIGNoZWNrIG9m IGRlZmVycmFibGUgY2xhdXNlCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIlVQREFURSB0bXAgU0VUIGlkID0gaWQgKyAxOyIpOworIyBBbHNvLCBleGVjdXRlIGEgdGVz dCB0aGF0IHNob3VsZCBzdWNjZWVkIGZvciBJTklUSUFMTFkgREVGRVJSRUQKKyRub2RlX3N1YnNj cmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKK0JFR0lOOworVVBEQVRFIHRtcCBTRVQg aWQgPSBpZCArIDE7CitJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgzLCAnZm9vYmFyJyk7CitERUxF VEUgRlJPTSB0bXAgV0hFUkUgaWQgPSAzOworQ09NTUlUOworKSk7Ciskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXA7Iik7CisKKyMgVGVzdCBDUkVB VEUgVEFCTEUgd2l0aCB0YWJsZSBjb25zdHJhaW50CisjIFdlIHdpbGwgc2V0IHR3byBjaGVja3Mg YW5kIGNvbmR1Y3QgdHdvIGluc2VydHMgdGhhdCBzaG91bGQgZmFpbCByZXNwZWN0aXZlbHkuCisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgVEFCTEUgdG1w IChwcmljZSBpbnQsIGRpc2NvdW50ZWRfcHJpY2UgaW50LCBDSEVDSyAoZGlzY291bnRlZF9wcmlj ZSA+IDAgQU5EIHByaWNlID4gZGlzY291bnRlZF9wcmljZSkpOyIpOworJG5vZGVfcHVibGlzaGVy LT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9z dGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMTAwLCAwKTsiLAorCQkJCQkgICBvbl9l cnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rk b3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgbmV3IHJvdyBmb3IgcmVsYXRp b24gInRtcCIgdmlvbGF0ZXMgY2hlY2sgY29uc3RyYWludCAidG1wX2NoZWNrIi8KKyAgb3IgZGll ICJmYWlsZWQgdG8gcmVwbGljYXRlIHRhYmxlIGNvbnN0cmFpbnQgKGZpcnN0IGNvbmRpdGlvbikg YXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9zdGdyZXMnLCAi SU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoNTAsIDEwMCk7IiwKKwkJCQkJICAgb25fZXJyb3Jfc3Rv cCA9PiAwLAorCQkJCQkgICBzdGRlcnIgPT4gXCRzdGRlcnIsCisJCQkJCSAgIHN0ZG91dCA9PiBc JHN0ZG91dCk7Ciskc3RkZXJyID1+IC9FUlJPUjogIG5ldyByb3cgZm9yIHJlbGF0aW9uICJ0bXAi IHZpb2xhdGVzIGNoZWNrIGNvbnN0cmFpbnQgInRtcF9jaGVjayIvCisgIG9yIGRpZSAiZmFpbGVk IHRvIHJlcGxpY2F0ZSB0YWJsZSBjb25zdHJhaW50IChzZWNvbmQgY29uZGl0aW9uKSBhdCBjcmVh dGluZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJP UCBUQUJMRSB0bXA7Iik7CisKKyMgVGVzdCBDUkVBVEUgVEFCTEUgV0lUSCBzdHJvcmFnZV9wYXJh bWV0ZXIKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFC TEUgdG1wIChpZCBpbnQpIFdJVEggKGZpbGxmYWN0b3IgPSA4MCk7Iik7Ciskbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7Iik7 Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJz Y3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgcmVsb3B0aW9ucyBGUk9NIHBnX2NsYXNz IFdIRVJFIHJlbG5hbWUgPSAndG1wJzsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJ CQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsK KyRzdGRvdXQgPX4gL3tmaWxsZmFjdG9yPTgwfS8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVwbGlj YXRlIHN0b3JhZ2Ugb3B0aW9uIjsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQs IHFxKDEpLCAnQ1JFQVRFIFRBQkxFIHdpdGggc3RvcmFnZV9wYXJhbWV0ZXIgcmVwbGljYXRlZCcp OworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1w OyIpOworCisjIFRlc3QgQ1JFQVRFIFRBQkxFIFRBQkxFU1BBQ0UgKGNyZWF0aW5nIGEgdGFibGVz cGFjZSBpcyBub3QgcmVwbGljYXRlZCkKKyMgUHJlcGFyZSB0aGUgZGlyZWN0b3JpZXMgZm9yIHRo ZSBwdWJsaXNoZXIgYW5kIHN1YnNjcmliZXIgZmlyc3QuCitteSAoJGJhc2VkaXIsICR0YWJsZXNw YWNlX2Rpcik7CisKKyRiYXNlZGlyID0gJG5vZGVfcHVibGlzaGVyLT5iYXNlZGlyOworJHRhYmxl c3BhY2VfZGlyID0gIiRiYXNlZGlyL3RibHNwY19wdWIiOworbWtkaXIoJHRhYmxlc3BhY2VfZGly KTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEVT UEFDRSBteXRibHNwYyBMT0NBVElPTiAnJHRhYmxlc3BhY2VfZGlyJzsiKTsKKyRiYXNlZGlyID0g JG5vZGVfc3Vic2NyaWJlci0+YmFzZWRpcjsKKyR0YWJsZXNwYWNlX2RpciA9ICIkYmFzZWRpci90 YmxzcGNfc3ViIjsKK21rZGlyICgkdGFibGVzcGFjZV9kaXIpOworJG5vZGVfc3Vic2NyaWJlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEVTUEFDRSBteXRibHNwYyBMT0NBVElP TiAnJHRhYmxlc3BhY2VfZGlyJzsiKTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCkgVEFCTEVTUEFDRSBteXRibHNwYzsi KTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0 bXAgVkFMVUVTICgxKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlz dWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IlNFTEVDVCBjb3VudCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnQ1JFQVRF IFRBQkxFIFRBQkxFU1BBQ0UgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisjIFRlc3QgQ1JFQVRFIFRZUEUK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVFlQRSBteXR5 cGUgQVMgKGlkIGludCwgbmFtZSB0ZXh0LCBhZ2UgaW50KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+ d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIE9GIG15dHlwZTsiKTsKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxLCAnYmFy Jyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVz dWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291 bnQoKikgZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ0NSRUFURSBUQUJMRSBPRiBy ZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJP UCBUQUJMRSB0bXAiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJE Uk9QIFRZUEUgbXl0eXBlIik7CisKKyMgVGVzdCBDUkVBVEUgRU5VTSBUWVBFCiskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRZUEUgbXllbnVtdHlwZSBBUyBF TlVNICgnbmV3JywgJ29wZW4nLCAnY2xvc2VkJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRf Zm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoc3RhdHVzIG15ZW51bXR5cGUpOyIpOworJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKCdu ZXcnKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRy ZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCAq IGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEobmV3KSwgJ0NSRUFURSBUQUJMRSBPRiByZXBs aWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBU QUJMRSB0bXAiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9Q IFRZUEUgbXllbnVtdHlwZSIpOworCisjIFRlc3QgQ1JFQVRFIFJBTkdFIFRZUEUKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVFlQRSBmbG9hdDhfcmFuZ2Ug QVMgUkFOR0UgKHN1YnR5cGUgPSBmbG9hdDgsIHN1YnR5cGVfZGlmZiA9IGZsb2F0OG1pKTsiKTsK KyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wICh2YWwgZmxvYXQ4 X3JhbmdlKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJpbnNl cnQgaW50byB0bXAgdmFsdWVzKGZsb2F0OF9yYW5nZSgtMTIuMzQsICcxLjExMTExM2UzJykpOyIp OworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9 ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUICogZnJvbSB0 bXA7Iik7CitpcygkcmVzdWx0LCBxcShbLTEyLjM0LDExMTEuMTEzXCkpLCAnQ1JFQVRFIFRBQkxF IE9GIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJEUk9QIFRBQkxFIHRtcCIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIkRST1AgVFlQRSBmbG9hdDhfcmFuZ2UiKTsKKworIyBUZXN0IENSRUFURSBCQVNFIERBVEEg VFlQRSBhbmQgdXNlIGl0IGluIHRhYmxlIGRlZmluaXRpb24KKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICIKK0NSRUFURSBUWVBFIGludDQyOworQ1JFQVRFIEZVTkNUSU9O IGludDQyX2luKGNzdHJpbmcpCisgICBSRVRVUk5TIGludDQyCisgICBBUyAnaW50NGluJworICAg TEFOR1VBR0UgaW50ZXJuYWwgU1RSSUNUIElNTVVUQUJMRTsKK0NSRUFURSBGVU5DVElPTiBpbnQ0 Ml9vdXQoaW50NDIpCisgICBSRVRVUk5TIGNzdHJpbmcKKyAgIEFTICdpbnQ0b3V0JworICAgTEFO R1VBR0UgaW50ZXJuYWwgU1RSSUNUIElNTVVUQUJMRTsKK0NSRUFURSBUWVBFIGludDQyICgKKyAg IGludGVybmFsbGVuZ3RoID0gNCwKKyAgIGlucHV0ID0gaW50NDJfaW4sCisgICBvdXRwdXQgPSBp bnQ0Ml9vdXQsCisgICBhbGlnbm1lbnQgPSBpbnQ0LAorICAgZGVmYXVsdCA9IDQyLAorICAgcGFz c2VkYnl2YWx1ZQorKTsKK0NSRUFURSBUQUJMRSB0bXAgKGYxIGludDQyKTsKK0lOU0VSVCBJTlRP IHRtcCBERUZBVUxUIFZBTFVFUzsKKyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRj aHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiU0VMRUNUICogZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcSg0MiksICdDUkVB VEUgVEFCTEUgT0YgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiRFJPUCBUWVBFIGludDQyIGNhc2NhZGUiKTsKKworcGFzcyAiRERMIHJlcGxp Y2F0aW9uIHRlc3RzIHBhc3NlZDoiOworCiskbm9kZV9zdWJzY3JpYmVyLT5zdG9wOworJG5vZGVf cHVibGlzaGVyLT5zdG9wOworCitkb25lX3Rlc3RpbmcoKTsKLS0gCjIuMzcuMQoK --0000000000001ced0705ea68bc1e Content-Type: application/octet-stream; name="v25-0003-Support-CREATE-TABLE-AS-SELECT-INTO.patch" Content-Disposition: attachment; filename="v25-0003-Support-CREATE-TABLE-AS-SELECT-INTO.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l8xvpgqq2 RnJvbSBiYmE0ZDcxOGUzZDQyMjMzMTU5MTcyNmI2NDE3NmU1ZWFlMDc5ZTQ0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBWaWduZXNod2FyYW4gQyA8dmlnbmVzaDIxQGdtYWlsLmNvbT4K RGF0ZTogRnJpLCAzMCBTZXAgMjAyMiAxMjowNToyMyArMDUzMApTdWJqZWN0OiBbUEFUQ0ggMy80 XSBTdXBwb3J0IENSRUFURSBUQUJMRSBBUyBTRUxFQ1QgSU5UTwoKVGhlIG1haW4gaWRlYSBvZiBy ZXBsaWNhdGluZyB0aGUgQ1JFQVRFIFRBQkxFIEFTIGlzIHRoYXQgd2UgZGVwcmFzZSB0aGUgQ1JF QVRFClRBQkxFIEFTIGludG8gYSBzaW1wbGUgQ1JFQVRFIFRBQkxFKHdpdGhvdXQgc3VicXVlcnkp IGNvbW1hbmQgYW5kIFdBTCBsb2cgaXQKYWZ0ZXIgY3JlYXRpbmcgdGhlIHRhYmxlIGFuZCBiZWZv cmUgd3JpdGluZyBkYXRhIGludG8gdGhlIHRhYmxlIGFuZCByZXBsaWNhdGUKdGhlIGluY29taW5n IHdyaXRlcyBsYXRlciBhcyBub3JtYWwgSU5TRVJUcy4gSW4gdGhpcyBhcHBvcmFjaCwgd2UgZG9u J3QgZXhlY3V0ZQp0aGUgc3VicXVlcnkgb24gc3Vic2NyaWJlciBzbyB0aGF0IGRvbid0IG5lZWQg dG8gbWFrZSBzdXJlIGFsbCB0aGUgb2JqZWN0cwpyZWZlcmVuY2VkIGluIHRoZSBzdWJxdWVyeSBh bHNvIGV4aXN0cyBpbiBzdWJzY3JpYmVyLiBBbmQgVGhpcyBhcHByb2FjaCB3b3Jrcwpmb3IgYWxs IGtpbmQgb2YgY29tbWFuZHMoZS5nLiBDUkFFVEUgVEFCTEUgQVMgW1NFTEVDVF1bRVhFQ1VURV1b VkFMVUVTXSkKCkludHJvZHVjaW5nIGEgbmV3IHR5cGUgb2YgZXZlbnQgdHJpZ2dlciAidGFibGVf aW5pdF93cml0ZSIuIHdoaWNoIHdvdWxkIGJlIGZpcmVkCmZvciBDUkVBVEUgVEFCTEUgQVMvU0VM RUNUIElOVE8gYWZ0ZXIgY3JlYXRpbmcgdGhlIHRhYmxlIGFuZApiZWZvcmUgYW55IG90aGVyIG1v ZGlmaWNhdGlvbi4gd2UgZGVwYXJzZSB0aGUgY29tbWFuZCBpbiB0aGUgdGFibGVfaW5pdF93cml0 ZSBldmVudAp0cmlnZ2VyIGFuZCBXQUwgbG9nIHRoZSBkZXBhcnNlZCBqc29uIHN0cmluZy4gVGhl IHdhbHNlbmRlciB3aWxsIHNlbmQgdGhlCnN0cmluZyB0byBzdWJzY3JpYmVyLiBBbmQgaW5jb21p bmcgSU5TRVJUcyB3aWxsIGFsc28gYmUgcmVwbGljYXRlZC4KLS0tCiBzcmMvYmFja2VuZC9jb21t YW5kcy9jcmVhdGVhcy5jICAgICAgICB8ICAxMCArKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRs X2RlcGFyc2UuYyAgICAgfCAgMjMgKysrKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJp Z2dlci5jICAgfCAxNzIgKysrKysrKysrKysrKysrKysrKysrKysrLQogc3JjL2JhY2tlbmQvY29t bWFuZHMvcHVibGljYXRpb25jbWRzLmMgfCAgIDkgKysKIHNyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0 eS5jICAgICAgICAgICAgIHwgICAyICsKIHNyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL2V2dGNhY2hl LmMgICAgIHwgICAyICsKIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgICAgICAgIHwg ICAzICsKIHNyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaCAgIHwgICA0ICsKIHNy Yy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmggICAgIHwgICA5ICstCiBzcmMvaW5jbHVk ZS91dGlscy9ldnRjYWNoZS5oICAgICAgICAgICB8ICAgMyArLQogMTAgZmlsZXMgY2hhbmdlZCwg MjMxIGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvY3JlYXRlYXMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMK aW5kZXggMTUyYzI5YjU1MS4uMGQ4MGM2Yzk3NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29t bWFuZHMvY3JlYXRlYXMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jcmVhdGVhcy5jCkBA IC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9uYW1lc3BhY2UuaCIKICNpbmNsdWRl ICJjYXRhbG9nL3RvYXN0aW5nLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvY3JlYXRlYXMuaCIKKyNp bmNsdWRlICJjb21tYW5kcy9ldmVudF90cmlnZ2VyLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvbWF0 dmlldy5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3ByZXBhcmUuaCIKICNpbmNsdWRlICJjb21tYW5k cy90YWJsZWNtZHMuaCIKQEAgLTE0Myw2ICsxNDQsMTUgQEAgY3JlYXRlX2N0YXNfaW50ZXJuYWwo TGlzdCAqYXR0ckxpc3QsIEludG9DbGF1c2UgKmludG8pCiAJCVN0b3JlVmlld1F1ZXJ5KGludG9S ZWxhdGlvbkFkZHIub2JqZWN0SWQsIHF1ZXJ5LCBmYWxzZSk7CiAJCUNvbW1hbmRDb3VudGVySW5j cmVtZW50KCk7CiAJfQorCWVsc2UKKwl7CisJCS8qCisJCSAqIEZpcmUgdGhlIHRyaWdnZXIgZm9y IHRhYmxlX2luaXRfd3JpdGUgYWZ0ZXIgY3JlYXRpbmcgdGhlIHRhYmxlIHNvCisJCSAqIHRoYXQg d2UgY2FuIGFjY2VzcyB0aGUgY2F0YWxvZyBpbmZvIGFib3V0IHRoZSBuZXdseSBjcmVhdGVkIHRh YmxlIGluCisJCSAqIHRoZSB0cmlnZ2VyIGZ1bmN0aW9uLgorCQkgKi8KKwkJRXZlbnRUcmlnZ2Vy VGFibGVJbml0V3JpdGUoKE5vZGUgKikgY3JlYXRlLCBpbnRvUmVsYXRpb25BZGRyKTsKKwl9CiAK IAlyZXR1cm4gaW50b1JlbGF0aW9uQWRkcjsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2RkbF9kZXBhcnNlLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5j CmluZGV4IDI2MGE4NjU1NGUuLjgwYzgwNWNkNWMgMTAwNzU1Ci0tLSBhL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2RkbF9kZXBhcnNlLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFy c2UuYwpAQCAtNzc2OCw2ICs3NzY4LDI2IEBAIGRlcGFyc2VfQ3JlYXRlVHJhbnNmb3JtU3RtdChP aWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKIAlyZXR1cm4gY3JlYXRlVHJhbnNmb3JtOwog fQogCisvKgorICogRGVwYXJzZSBDUkVBVEUgVEFCTEUgQVMgY29tbWFuZC4KKyAqCisgKiBkZXBh cnNlX0NyZWF0ZVN0bXQgZG8gdGhlIGFjdHVhbCB3b3JrIGFzIHdlIGRlcGFyc2UgdGhlIGZpbmFs IENyZWF0ZVN0bXQgZm9yCisgKiBDUkVBVEUgVEFCTEUgQVMgY29tbWFuZC4KKyAqLworc3RhdGlj IE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVUYWJsZUFzU3RtdChDb2xsZWN0ZWRDb21tYW5kICpj bWQpCit7CisJT2lkCQkJb2JqZWN0SWQ7CisJTm9kZQkgICAqcGFyc2V0cmVlOworCisJQXNzZXJ0 KGNtZC0+dHlwZSA9PSBTQ1RfQ3JlYXRlVGFibGVBcyk7CisKKwlwYXJzZXRyZWUgPSBjbWQtPmQu Y3Rhcy5yZWFsX2NyZWF0ZTsKKwlvYmplY3RJZCA9IGNtZC0+ZC5jdGFzLmFkZHJlc3Mub2JqZWN0 SWQ7CisKKwlyZXR1cm4gZGVwYXJzZV9DcmVhdGVTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOwor fQorCiAKIC8qCiAgKiBIYW5kbGUgZGVwYXJzaW5nIG9mIHNpbXBsZSBjb21tYW5kcy4KQEAgLTgw NTAsNiArODA3MCw5IEBAIGRlcGFyc2VfdXRpbGl0eV9jb21tYW5kKENvbGxlY3RlZENvbW1hbmQg KmNtZCwgYm9vbCB2ZXJib3NlX21vZGUpCiAJCWNhc2UgU0NUX0dyYW50OgogCQkJdHJlZSA9IGRl cGFyc2VfR3JhbnRTdG10KGNtZCk7CiAJCQlicmVhazsKKwkJY2FzZSBTQ1RfQ3JlYXRlVGFibGVB czoKKwkJCXRyZWUgPSBkZXBhcnNlX0NyZWF0ZVRhYmxlQXNTdG10KGNtZCk7CisJCQlicmVhazsK IAkJY2FzZSBTQ1RfQWx0ZXJPcEZhbWlseToKIAkJCXRyZWUgPSBkZXBhcnNlX0FsdGVyT3BGYW1p bHkoY21kKTsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZl bnRfdHJpZ2dlci5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jCmluZGV4 IDdjOGMxZjUzOTQuLjI1NTU4YWExYzUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRz L2V2ZW50X3RyaWdnZXIuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2Vy LmMKQEAgLTEzMyw3ICsxMzMsOCBAQCBDcmVhdGVFdmVudFRyaWdnZXIoQ3JlYXRlRXZlbnRUcmln U3RtdCAqc3RtdCkKIAlpZiAoc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgImRkbF9jb21tYW5kX3N0 YXJ0IikgIT0gMCAmJgogCQlzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAiZGRsX2NvbW1hbmRfZW5k IikgIT0gMCAmJgogCQlzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAic3FsX2Ryb3AiKSAhPSAwICYm Ci0JCXN0cmNtcChzdG10LT5ldmVudG5hbWUsICJ0YWJsZV9yZXdyaXRlIikgIT0gMCkKKwkJc3Ry Y21wKHN0bXQtPmV2ZW50bmFtZSwgInRhYmxlX3Jld3JpdGUiKSAhPSAwICYmCisJCXN0cmNtcChz dG10LT5ldmVudG5hbWUsICJ0YWJsZV9pbml0X3dyaXRlIikgIT0gMCkKIAkJZXJlcG9ydChFUlJP UiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCiAJCQkJIGVycm1zZygidW5y ZWNvZ25pemVkIGV2ZW50IG5hbWUgXCIlc1wiIiwKQEAgLTE1OSw3ICsxNjAsOCBAQCBDcmVhdGVF dmVudFRyaWdnZXIoQ3JlYXRlRXZlbnRUcmlnU3RtdCAqc3RtdCkKIAkvKiBWYWxpZGF0ZSB0YWcg bGlzdCwgaWYgYW55LiAqLwogCWlmICgoc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgImRkbF9jb21t YW5kX3N0YXJ0IikgPT0gMCB8fAogCQkgc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgImRkbF9jb21t YW5kX2VuZCIpID09IDAgfHwKLQkJIHN0cmNtcChzdG10LT5ldmVudG5hbWUsICJzcWxfZHJvcCIp ID09IDApCisJCSBzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAic3FsX2Ryb3AiKSA9PSAwIHx8CisJ CSBzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAidGFibGVfaW5pdF93cml0ZSIpID09IDApCiAJCSYm IHRhZ3MgIT0gTlVMTCkKIAkJdmFsaWRhdGVfZGRsX3RhZ3MoInRhZyIsIHRhZ3MpOwogCWVsc2Ug aWYgKHN0cmNtcChzdG10LT5ldmVudG5hbWUsICJ0YWJsZV9yZXdyaXRlIikgPT0gMApAQCAtNTg1 LDcgKzU4Nyw4IEBAIEV2ZW50VHJpZ2dlckNvbW1vblNldHVwKE5vZGUgKnBhcnNldHJlZSwKIAkJ ZGJndGFnID0gQ3JlYXRlQ29tbWFuZFRhZyhwYXJzZXRyZWUpOwogCQlpZiAoZXZlbnQgPT0gRVZU X0RETENvbW1hbmRTdGFydCB8fAogCQkJZXZlbnQgPT0gRVZUX0RETENvbW1hbmRFbmQgfHwKLQkJ CWV2ZW50ID09IEVWVF9TUUxEcm9wKQorCQkJZXZlbnQgPT0gRVZUX1NRTERyb3AgfHwKKwkJCWV2 ZW50ID09IEVWVF9UYWJsZUluaXRXcml0ZSkKIAkJewogCQkJaWYgKCFjb21tYW5kX3RhZ19ldmVu dF90cmlnZ2VyX29rKGRiZ3RhZykpCiAJCQkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgY29tbWFu ZCB0YWcgXCIlc1wiIiwgR2V0Q29tbWFuZFRhZ05hbWUoZGJndGFnKSk7CkBAIC04NjgsNiArODcx LDE2MyBAQCBFdmVudFRyaWdnZXJUYWJsZVJld3JpdGUoTm9kZSAqcGFyc2V0cmVlLCBPaWQgdGFi bGVPaWQsIGludCByZWFzb24pCiAJQ29tbWFuZENvdW50ZXJJbmNyZW1lbnQoKTsKIH0KIAorCisv KgorICogRXZlbnRUcmlnZ2VyVGFibGVJbml0V3JpdGVTdGFydAorICogICAgIFByZXBhcmUgdG8g cmVjZWl2ZSBkYXRhIG9uIGFuIENSRUFURSBUQUJMRSBBUy9TRUxFVCBJTlRPIGNvbW1hbmQgYWJv dXQKKyAqICAgICB0byBiZSBleGVjdXRlZC4KKyAqLwordm9pZAorRXZlbnRUcmlnZ2VyVGFibGVJ bml0V3JpdGVTdGFydChOb2RlICpwYXJzZXRyZWUpCit7CisJTWVtb3J5Q29udGV4dCBvbGRjeHQ7 CisJQ29sbGVjdGVkQ29tbWFuZCAqY29tbWFuZDsKKworCS8qIGlnbm9yZSBpZiBldmVudCB0cmln Z2VyIGNvbnRleHQgbm90IHNldCwgb3IgY29sbGVjdGlvbiBkaXNhYmxlZCAqLworCWlmICghY3Vy cmVudEV2ZW50VHJpZ2dlclN0YXRlIHx8CisJCWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y29t bWFuZENvbGxlY3Rpb25JbmhpYml0ZWQpCisJCXJldHVybjsKKworCW9sZGN4dCA9IE1lbW9yeUNv bnRleHRTd2l0Y2hUbyhjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN4dCk7CisKKwljb21tYW5k ID0gcGFsbG9jKHNpemVvZihDb2xsZWN0ZWRDb21tYW5kKSk7CisKKwljb21tYW5kLT50eXBlID0g U0NUX0NyZWF0ZVRhYmxlQXM7CisJY29tbWFuZC0+aW5fZXh0ZW5zaW9uID0gY3JlYXRpbmdfZXh0 ZW5zaW9uOworCWNvbW1hbmQtPmQuY3Rhcy5hZGRyZXNzID0gSW52YWxpZE9iamVjdEFkZHJlc3M7 CisJY29tbWFuZC0+ZC5jdGFzLnJlYWxfY3JlYXRlID0gTlVMTDsKKwljb21tYW5kLT5wYXJzZXRy ZWUgPSBjb3B5T2JqZWN0KHBhcnNldHJlZSk7CisKKwljb21tYW5kLT5wYXJlbnQgPSBjdXJyZW50 RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kOworCWN1cnJlbnRFdmVudFRyaWdnZXJT dGF0ZS0+Y3VycmVudENvbW1hbmQgPSBjb21tYW5kOworCisJTWVtb3J5Q29udGV4dFN3aXRjaFRv KG9sZGN4dCk7Cit9CisKKy8qCisgKiBFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZUVuZAorICoJ CUZpbmlzaCB1cCBzYXZpbmcgYW4gQ1JFQVRFIFRBQkxFIEFTL1NFTEVDVCBJTlRPIGNvbW1hbmQu CisgKgorICogRklYTUUgdGhpcyBBUEkgaXNuJ3QgY29uc2lkZXJpbmcgdGhlIHBvc3NpYmlsaXR5 IHRoYXQgYW4geGFjdC9zdWJ4YWN0IGlzCisgKiBhYm9ydGVkIHBhcnR3YXkgdGhyb3VnaC4gIFBy b2JhYmx5IGl0J3MgYmVzdCB0byBhZGQgYW4KKyAqIEF0RU9TdWJYYWN0X0V2ZW50VHJpZ2dlcnMo KSB0byBmaXggdGhpcy4KKyAqLwordm9pZAorRXZlbnRUcmlnZ2VyVGFibGVJbml0V3JpdGVFbmQo dm9pZCkKK3sKKwlDb2xsZWN0ZWRDb21tYW5kICpwYXJlbnQ7CisKKwkvKiBpZ25vcmUgaWYgZXZl bnQgdHJpZ2dlciBjb250ZXh0IG5vdCBzZXQsIG9yIGNvbGxlY3Rpb24gZGlzYWJsZWQgKi8KKwlp ZiAoIWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZSB8fAorCQljdXJyZW50RXZlbnRUcmlnZ2VyU3Rh dGUtPmNvbW1hbmRDb2xsZWN0aW9uSW5oaWJpdGVkKQorCQlyZXR1cm47CisKKwlwYXJlbnQgPSBj dXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kLT5wYXJlbnQ7CisKKwlwZnJl ZShjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kKTsKKworCWN1cnJlbnRF dmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQgPSBwYXJlbnQ7Cit9CisKKy8qCisgKiBw dWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxlX2luaXRfd3JpdGUKKyAqCisgKiBEZXBhcnNlIHRoZSBk ZGwgdGFibGUgY3JlYXRlIGNvbW1hbmQgYW5kIGxvZyBpdC4KKyAqLworRGF0dW0KK3B1YmxpY2F0 aW9uX2RlcGFyc2VfdGFibGVfaW5pdF93cml0ZShQR19GVU5DVElPTl9BUkdTKQoreworCWNoYXIJ CQkJcmVscGVyc2lzdDsKKwlDb2xsZWN0ZWRDb21tYW5kICAgKmNtZDsKKwljaGFyICAgCQkJICAg Kmpzb25fc3RyaW5nOworCisJaWYgKCFDQUxMRURfQVNfRVZFTlRfVFJJR0dFUihmY2luZm8pKQor CQllbG9nKEVSUk9SLCAibm90IGZpcmVkIGJ5IGV2ZW50IHRyaWdnZXIgbWFuYWdlciIpOworCisJ Y21kID0gY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZDsKKwlBc3NlcnQo Y21kKTsKKworCXJlbHBlcnNpc3QgPSBnZXRfcmVsX3BlcnNpc3RlbmNlKGNtZC0+ZC5zaW1wbGUu YWRkcmVzcy5vYmplY3RJZCk7CisKKwkvKgorCSAqIERvIG5vdCBnZW5lcmF0ZSB3YWwgbG9nIGZv ciBjb21tYW5kcyB3aG9zZSB0YXJnZXQgdGFibGUgaXMgYSB0ZW1wb3JhcnkKKwkgKiB0YWJsZS4K KwkgKgorCSAqIFdlIHdpbGwgZ2VuZXJhdGUgd2FsIGxvZ3MgZm9yIHVubG9nZ2VkIHRhYmxlcyBz byB0aGF0IHVubG9nZ2VkIHRhYmxlcworCSAqIGNhbiBhbHNvIGJlIGNyZWF0ZWQgYW5kIGFsdGVy ZWQgb24gdGhlIHN1YnNjcmliZXIgc2lkZS4gVGhpcyBtYWtlcyBpdAorCSAqIHBvc3NpYmxlIHRv IGRpcmVjdGx5IHJlcGxheSB0aGUgU0VUIExPR0dFRCBjb21tYW5kIGFuZCB0aGUgaW5jb21pbmcK KwkgKiByZXdyaXRlIG1lc3NhZ2Ugd2l0aG91dCBjcmVhdGluZyBhIG5ldyB0YWJsZS4KKwkgKi8K KwlpZiAocmVscGVyc2lzdCA9PSBSRUxQRVJTSVNURU5DRV9URU1QKQorCQlyZXR1cm4gUG9pbnRl ckdldERhdHVtKE5VTEwpOworCisJLyogRGVwYXJzZSB0aGUgRERMIGNvbW1hbmQgYW5kIFdBTCBs b2cgaXQgdG8gYWxsb3cgZGVjb2Rpbmcgb2YgdGhlIHNhbWUuICovCisJanNvbl9zdHJpbmcgPSBk ZXBhcnNlX3V0aWxpdHlfY29tbWFuZChjbWQsIGZhbHNlKTsKKworCWlmIChqc29uX3N0cmluZyAh PSBOVUxMKQorCQlMb2dMb2dpY2FsRERMTWVzc2FnZSgiZGVwYXJzZSIsIGNtZC0+ZC5zaW1wbGUu YWRkcmVzcy5vYmplY3RJZCwgRENUX1NpbXBsZUNtZCwKKwkJCQkJCQkganNvbl9zdHJpbmcsIHN0 cmxlbihqc29uX3N0cmluZykgKyAxKTsKKworCXJldHVybiBQb2ludGVyR2V0RGF0dW0oTlVMTCk7 Cit9CisKKy8qCisgKiBGaXJlIHRhYmxlX2luaXRfcmV3cml0ZSB0cmlnZ2Vycy4KKyAqLwordm9p ZAorRXZlbnRUcmlnZ2VyVGFibGVJbml0V3JpdGUoTm9kZSAqcmVhbF9jcmVhdGUsIE9iamVjdEFk ZHJlc3MgYWRkcmVzcykKK3sKKwlMaXN0CSAgICpydW5saXN0OworCUV2ZW50VHJpZ2dlckRhdGEg dHJpZ2RhdGE7CisJQ29sbGVjdGVkQ29tbWFuZCAqY29tbWFuZDsKKworCS8qCisJICogU2VlIEV2 ZW50VHJpZ2dlckRETENvbW1hbmRTdGFydCBmb3IgYSBkaXNjdXNzaW9uIGFib3V0IHdoeSBldmVu dAorCSAqIHRyaWdnZXJzIGFyZSBkaXNhYmxlZCBpbiBzaW5nbGUgdXNlciBtb2RlLgorCSAqLwor CWlmICghSXNVbmRlclBvc3RtYXN0ZXIpCisJCXJldHVybjsKKworCS8qCisJICogQWxzbyBkbyBu b3RoaW5nIGlmIG91ciBzdGF0ZSBpc24ndCBzZXQgdXAsIHdoaWNoIGl0IHdvbid0IGJlIGlmIHRo ZXJlCisJICogd2VyZW4ndCBhbnkgcmVsZXZhbnQgZXZlbnQgdHJpZ2dlcnMgYXQgdGhlIHN0YXJ0 IG9mIHRoZSBjdXJyZW50IERETAorCSAqIGNvbW1hbmQuICBUaGlzIHRlc3QgbWlnaHQgdGhlcmVm b3JlIHNlZW0gb3B0aW9uYWwsIGJ1dCBpdCdzCisJICogKm5lY2Vzc2FyeSosIGJlY2F1c2UgRXZl bnRUcmlnZ2VyQ29tbW9uU2V0dXAgbWlnaHQgZmluZCB0cmlnZ2VycyB0aGF0CisJICogZGlkbid0 IGV4aXN0IGF0IHRoZSB0aW1lIHRoZSBjb21tYW5kIHN0YXJ0ZWQuCisJICovCisJaWYgKCFjdXJy ZW50RXZlbnRUcmlnZ2VyU3RhdGUpCisJCXJldHVybjsKKworCS8qIERvIG5vdGhpbmcgaWYgbm8g Y29tbWFuZCB3YXMgY29sbGVjdGVkLiAqLworCWlmICghY3VycmVudEV2ZW50VHJpZ2dlclN0YXRl LT5jdXJyZW50Q29tbWFuZCkKKwkJcmV0dXJuOworCisJY29tbWFuZCA9IGN1cnJlbnRFdmVudFRy aWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQ7CisKKwlydW5saXN0ID0gRXZlbnRUcmlnZ2VyQ29t bW9uU2V0dXAoY29tbWFuZC0+cGFyc2V0cmVlLAorCQkJCQkJCQkJICBFVlRfVGFibGVJbml0V3Jp dGUsCisJCQkJCQkJCQkgICJ0YWJsZV9pbml0X3dyaXRlIiwKKwkJCQkJCQkJCSAgJnRyaWdkYXRh KTsKKwlpZiAocnVubGlzdCA9PSBOSUwpCisJCXJldHVybjsKKworCS8qIFNldCB0aGUgcmVhbCBD cmVhdGVUYWJsZSBzdGF0bWVudCBhbmQgb2JqZWN0IGFkZHJlc3MgKi8KKwljb21tYW5kLT5kLmN0 YXMucmVhbF9jcmVhdGUgPSByZWFsX2NyZWF0ZTsKKwljb21tYW5kLT5kLmN0YXMuYWRkcmVzcyA9 IGFkZHJlc3M7CisKKwkvKiBSdW4gdGhlIHRyaWdnZXJzLiAqLworCUV2ZW50VHJpZ2dlckludm9r ZShydW5saXN0LCAmdHJpZ2RhdGEpOworCisJLyogQ2xlYW51cC4gKi8KKwlsaXN0X2ZyZWUocnVu bGlzdCk7CisKKwkvKgorCSAqIE1ha2Ugc3VyZSBhbnl0aGluZyB0aGUgZXZlbnQgdHJpZ2dlcnMg ZGlkIHdpbGwgYmUgdmlzaWJsZSB0byB0aGUgbWFpbgorCSAqIGNvbW1hbmQuCisJICovCisJQ29t bWFuZENvdW50ZXJJbmNyZW1lbnQoKTsKK30KKwogLyoKICAqIEludm9rZSBlYWNoIGV2ZW50IHRy aWdnZXIgaW4gYSBsaXN0IG9mIGV2ZW50IHRyaWdnZXJzLgogICovCkBAIC0xMTQ5LDcgKzEzMDks OCBAQCB0cmFja0Ryb3BwZWRPYmplY3RzTmVlZGVkKHZvaWQpCiAJICovCiAJcmV0dXJuIChFdmVu dENhY2hlTG9va3VwKEVWVF9TUUxEcm9wKSAhPSBOSUwpIHx8CiAJCShFdmVudENhY2hlTG9va3Vw KEVWVF9UYWJsZVJld3JpdGUpICE9IE5JTCkgfHwKLQkJKEV2ZW50Q2FjaGVMb29rdXAoRVZUX0RE TENvbW1hbmRFbmQpICE9IE5JTCk7CisJCShFdmVudENhY2hlTG9va3VwKEVWVF9ERExDb21tYW5k RW5kKSAhPSBOSUwpIHx8CisJCShFdmVudENhY2hlTG9va3VwKEVWVF9UYWJsZUluaXRXcml0ZSkg IT0gTklMKTsKIH0KIAogLyoKQEAgLTE4NjgsNiArMjAyOSw3IEBAIHBnX2V2ZW50X3RyaWdnZXJf ZGRsX2NvbW1hbmRzKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCQljYXNlIFNDVF9BbHRlck9wRmFtaWx5 OgogCQkJY2FzZSBTQ1RfQ3JlYXRlT3BDbGFzczoKIAkJCWNhc2UgU0NUX0FsdGVyVFNDb25maWc6 CisJCQljYXNlIFNDVF9DcmVhdGVUYWJsZUFzOgogCQkJCXsKIAkJCQkJY2hhcgkgICAqaWRlbnRp dHk7CiAJCQkJCWNoYXIJICAgKnR5cGU7CkBAIC0xODg1LDYgKzIwNDcsOCBAQCBwZ19ldmVudF90 cmlnZ2VyX2RkbF9jb21tYW5kcyhQR19GVU5DVElPTl9BUkdTKQogCQkJCQkJYWRkciA9IGNtZC0+ ZC5jcmVhdGVvcGMuYWRkcmVzczsKIAkJCQkJZWxzZSBpZiAoY21kLT50eXBlID09IFNDVF9BbHRl clRTQ29uZmlnKQogCQkJCQkJYWRkciA9IGNtZC0+ZC5hdHNjZmcuYWRkcmVzczsKKwkJCQkJZWxz ZSBpZiAoY21kLT50eXBlID09IFNDVF9BbHRlclRTQ29uZmlnKQorCQkJCQkJYWRkciA9IGNtZC0+ ZC5jdGFzLmFkZHJlc3M7CiAKIAkJCQkJLyoKIAkJCQkJICogSWYgYW4gb2JqZWN0IHdhcyBkcm9w cGVkIGluIHRoZSBzYW1lIGNvbW1hbmQgd2UgbWF5IGVuZApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9wdWJs aWNhdGlvbmNtZHMuYwppbmRleCA1YTViOTc5YjAzLi5iNjAwNTUwYmUxIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYworKysgYi9zcmMvYmFja2VuZC9j b21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYwpAQCAtOTk4LDYgKzk5OCwxMSBAQCBDcmVhdGVQdWJs aWNhdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIENyZWF0ZVB1YmxpY2F0aW9uU3RtdCAqc3RtdCkK IAkJCUNNRFRBR19SRUZSRVNIX01BVEVSSUFMSVpFRF9WSUVXCiAJCX07CiAKKwkJQ29tbWFuZFRh Zwlpbml0X2NvbW1hbmRzW10gPSB7CisJCQlDTURUQUdfQ1JFQVRFX1RBQkxFX0FTLAorCQkJQ01E VEFHX1NFTEVDVF9JTlRPCisJCX07CisKIAkJLyogQ3JlYXRlIHRoZSBkZGxfY29tbWFuZF9lbmQg ZXZlbnQgdHJpZ2dlciAqLwogCQlDcmVhdGVERExSZXBsaWNhRXZlbnRUcmlnZ2VyKCJkZGxfY29t bWFuZF9lbmQiLCBlbmRfY29tbWFuZHMsCiAJCQkJCQkJCQkgbGVuZ3Rob2YoZW5kX2NvbW1hbmRz KSwgbXlzZWxmLCBwdWJvaWQpOwpAQCAtMTAwOSw2ICsxMDE0LDEwIEBAIENyZWF0ZVB1YmxpY2F0 aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQ3JlYXRlUHVibGljYXRpb25TdG10ICpzdG10KQogCQkv KiBDcmVhdGUgdGhlIHRhYmxlX3Jld3JpdGUgZXZlbnQgdHJpZ2dlciAqLwogCQlDcmVhdGVERExS ZXBsaWNhRXZlbnRUcmlnZ2VyKCJ0YWJsZV9yZXdyaXRlIiwgcmV3cml0ZV9jb21tYW5kcywKIAkJ CQkJCQkJCSBsZW5ndGhvZihyZXdyaXRlX2NvbW1hbmRzKSwgbXlzZWxmLCBwdWJvaWQpOworCisJ CS8qIENyZWF0ZSB0aGUgdGFibGVfaW5pdF93cml0ZSBldmVudCB0cmlnZ2VyICovCisJCUNyZWF0 ZURETFJlcGxpY2FFdmVudFRyaWdnZXIoInRhYmxlX2luaXRfd3JpdGUiLCBpbml0X2NvbW1hbmRz LAorCQkJCQkJCQkJIGxlbmd0aG9mKGluaXRfY29tbWFuZHMpLCBteXNlbGYsIHB1Ym9pZCk7CiAJ fQogCiAJdGFibGVfY2xvc2UocmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jIGIvc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5LmMKaW5k ZXggMjQ3ZDA4MTZhZC4uYzYzNDkyYjQ5YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdGNvcC91 dGlsaXR5LmMKKysrIGIvc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5LmMKQEAgLTE2NjUsOCArMTY2 NSwxMCBAQCBQcm9jZXNzVXRpbGl0eVNsb3coUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJCWJyZWFr OwogCiAJCQljYXNlIFRfQ3JlYXRlVGFibGVBc1N0bXQ6CisJCQkJRXZlbnRUcmlnZ2VyVGFibGVJ bml0V3JpdGVTdGFydChwYXJzZXRyZWUpOwogCQkJCWFkZHJlc3MgPSBFeGVjQ3JlYXRlVGFibGVB cyhwc3RhdGUsIChDcmVhdGVUYWJsZUFzU3RtdCAqKSBwYXJzZXRyZWUsCiAJCQkJCQkJCQkJCXBh cmFtcywgcXVlcnlFbnYsIHFjKTsKKwkJCQlFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZUVuZCgp OwogCQkJCWJyZWFrOwogCiAJCQljYXNlIFRfUmVmcmVzaE1hdFZpZXdTdG10OgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvZXZ0Y2FjaGUuYyBiL3NyYy9iYWNrZW5kL3V0aWxz L2NhY2hlL2V2dGNhY2hlLmMKaW5kZXggZjdmNzE2NWY3Zi4uN2ZiOGNiMjkxZCAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvZXZ0Y2FjaGUuYworKysgYi9zcmMvYmFja2VuZC91 dGlscy9jYWNoZS9ldnRjYWNoZS5jCkBAIC0xNjcsNiArMTY3LDggQEAgQnVpbGRFdmVudFRyaWdn ZXJDYWNoZSh2b2lkKQogCQkJZXZlbnQgPSBFVlRfU1FMRHJvcDsKIAkJZWxzZSBpZiAoc3RyY21w KGV2dGV2ZW50LCAidGFibGVfcmV3cml0ZSIpID09IDApCiAJCQlldmVudCA9IEVWVF9UYWJsZVJl d3JpdGU7CisJCWVsc2UgaWYgKHN0cmNtcChldnRldmVudCwgInRhYmxlX2luaXRfd3JpdGUiKSA9 PSAwKQorCQkJZXZlbnQgPSBFVlRfVGFibGVJbml0V3JpdGU7CiAJCWVsc2UKIAkJCWNvbnRpbnVl OwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0IGIvc3JjL2lu Y2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAppbmRleCBjZTFiMTdmNWFiLi44MWZiZmQ0YWFjIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CisrKyBiL3NyYy9pbmNs dWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKQEAgLTExODM4LDQgKzExODM4LDcgQEAKIHsgb2lkID0+ ICc0NjQ2JywgZGVzY3IgPT4gJ3RyaWdnZXIgZm9yIGRkbCBjb21tYW5kIGRlcGFyc2UgdGFibGUg cmV3cml0ZScsCiAgIHByb25hbWUgPT4gJ3B1YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVfcmV3cml0 ZScsIHByb3JldHR5cGUgPT4gJ2V2ZW50X3RyaWdnZXInLAogICBwcm9hcmd0eXBlcyA9PiAnJywg cHJvc3JjID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxlX3Jld3JpdGUnIH0sCit7IG9pZCA9 PiAnNDY0NycsIGRlc2NyID0+ICd0cmlnZ2VyIGZvciBkZGwgY29tbWFuZCBkZXBhcnNlIHRhYmxl IGluaXQnLAorICBwcm9uYW1lID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxlX2luaXRfd3Jp dGUnLCBwcm9yZXR0eXBlID0+ICdldmVudF90cmlnZ2VyJywKKyAgcHJvYXJndHlwZXMgPT4gJycs IHByb3NyYyA9PiAncHVibGljYXRpb25fZGVwYXJzZV90YWJsZV9pbml0X3dyaXRlJyB9LAogXQpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oIGIvc3JjL2lu Y2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oCmluZGV4IGZkMmVlN2ZmZTQuLmE5ZTBmNzFm NmEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaAorKysg Yi9zcmMvaW5jbHVkZS9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmgKQEAgLTU1LDYgKzU1LDEwIEBA IGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckRETENvbW1hbmRFbmQoTm9kZSAqcGFyc2V0cmVlKTsK IGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlclNRTERyb3AoTm9kZSAqcGFyc2V0cmVlKTsKIGV4dGVy biB2b2lkIEV2ZW50VHJpZ2dlclRhYmxlUmV3cml0ZShOb2RlICpwYXJzZXRyZWUsIE9pZCB0YWJs ZU9pZCwgaW50IHJlYXNvbik7CiAKK2V4dGVybiB2b2lkIEV2ZW50VHJpZ2dlclRhYmxlSW5pdFdy aXRlU3RhcnQoTm9kZSAqcGFyc2V0cmVlKTsKK2V4dGVybiB2b2lkIEV2ZW50VHJpZ2dlclRhYmxl SW5pdFdyaXRlKE5vZGUgKnBhcnNldHJlZSwgT2JqZWN0QWRkcmVzcyBhZGRyZXNzKTsKK2V4dGVy biB2b2lkIEV2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlRW5kKHZvaWQpOworCiBleHRlcm4gYm9v bCBFdmVudFRyaWdnZXJCZWdpbkNvbXBsZXRlUXVlcnkodm9pZCk7CiBleHRlcm4gdm9pZCBFdmVu dFRyaWdnZXJFbmRDb21wbGV0ZVF1ZXJ5KHZvaWQpOwogZXh0ZXJuIGJvb2wgdHJhY2tEcm9wcGVk T2JqZWN0c05lZWRlZCh2b2lkKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJz ZV91dGlsaXR5LmggYi9zcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oCmluZGV4IGI1 MzI5NGJmNTcuLjNkMjk0YTAzNzEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJz ZV91dGlsaXR5LmgKKysrIGIvc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaApAQCAt MjksNyArMjksOCBAQCB0eXBlZGVmIGVudW0gQ29sbGVjdGVkQ29tbWFuZFR5cGUKIAlTQ1RfQWx0 ZXJPcEZhbWlseSwKIAlTQ1RfQWx0ZXJEZWZhdWx0UHJpdmlsZWdlcywKIAlTQ1RfQ3JlYXRlT3BD bGFzcywKLQlTQ1RfQWx0ZXJUU0NvbmZpZworCVNDVF9BbHRlclRTQ29uZmlnLAorCVNDVF9DcmVh dGVUYWJsZUFzCiB9IENvbGxlY3RlZENvbW1hbmRUeXBlOwogCiAvKgpAQCAtMTAxLDYgKzEwMiwx MiBAQCB0eXBlZGVmIHN0cnVjdCBDb2xsZWN0ZWRDb21tYW5kCiAJCXsKIAkJCU9iamVjdFR5cGUJ b2JqdHlwZTsKIAkJfQkJCWRlZnByaXZzOworCisJCXN0cnVjdAorCQl7CisJCQlPYmplY3RBZGRy ZXNzIGFkZHJlc3M7CisJCQlOb2RlCQkgKnJlYWxfY3JlYXRlOworCQl9CQkJY3RhczsKIAl9CQkJ ZDsKIAogCXN0cnVjdCBDb2xsZWN0ZWRDb21tYW5kICpwYXJlbnQ7CS8qIHdoZW4gbmVzdGVkICov CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9ldnRjYWNoZS5oIGIvc3JjL2luY2x1ZGUv dXRpbHMvZXZ0Y2FjaGUuaAppbmRleCBkZGI2N2E2OGZhLi4xZTY0ODMxN2FlIDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS91dGlscy9ldnRjYWNoZS5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2V2 dGNhY2hlLmgKQEAgLTIyLDcgKzIyLDggQEAgdHlwZWRlZiBlbnVtCiAJRVZUX0RETENvbW1hbmRT dGFydCwKIAlFVlRfRERMQ29tbWFuZEVuZCwKIAlFVlRfU1FMRHJvcCwKLQlFVlRfVGFibGVSZXdy aXRlCisJRVZUX1RhYmxlUmV3cml0ZSwKKwlFVlRfVGFibGVJbml0V3JpdGUKIH0gRXZlbnRUcmln Z2VyRXZlbnQ7CiAKIHR5cGVkZWYgc3RydWN0Ci0tIAoyLjM3LjEKCg== --0000000000001ced0705ea68bc1e Content-Type: application/octet-stream; name="v25-0002-Support-DDL-replication.patch" Content-Disposition: attachment; filename="v25-0002-Support-DDL-replication.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l8xvpgqq1 RnJvbSAwMjZhMmQ1OGMyZmRlYzJhNDM0ZjIyYTkxMzAwNDdkYzBkODM2MGY0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFRodSwgMjkgU2VwIDIwMjIgMDk6MTA6NDQgLTA0MDAKU3ViamVjdDogW1BBVENI IDIvNF0gU3VwcG9ydCBEREwgcmVwbGljYXRpb24uCgpUbyBzdXBwb3J0IERETCByZXBsaWNhdGlv 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 Z2VyLmMgICAgICAgICAgfCAyNTAgKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3B1 YmxpY2F0aW9uY21kcy5jICAgICAgICB8IDE1NyArKysrKysrCiBzcmMvYmFja2VuZC9jb21tYW5k cy90YWJsZWNtZHMuYyAgICAgICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0 aW9uL2xvZ2ljYWwvTWFrZWZpbGUgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL2RkbG1lc3NhZ2UuYyAgfCAgODYgKysrKwogc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC9kZWNvZGUuYyAgICAgIHwgIDQxICsrCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL2xvZ2ljYWwuYyAgICAgfCAgOTMgKysrKwogc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC9wcm90by5jICAgICAgIHwgIDQ4ICsrCiAuLi4vcmVwbGljYXRpb24vbG9naWNh bC9yZW9yZGVyYnVmZmVyLmMgICAgICAgfCAxMzYgKysrKysrCiBzcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL3dvcmtlci5jICAgICAgfCAyMzIgKysrKysrKysrKwogc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYyAgIHwgMTkyICsrKysrKystCiBzcmMvYmFj a2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jICAgICAgICAgICAgfCAgIDEgKwogc3JjL2Jpbi9w Z19kdW1wL3BnX2R1bXAuYyAgICAgICAgICAgICAgICAgICAgIHwgIDIxICstCiBzcmMvYmluL3Bn X2R1bXAvcGdfZHVtcC5oICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2Jpbi9wZ193 YWxkdW1wL3JtZ3JkZXNjLmMgICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9iaW4vcHNxbC9k ZXNjcmliZS5jICAgICAgICAgICAgICAgICAgICAgICB8ICAxNyArLQogc3JjL2luY2x1ZGUvYWNj ZXNzL3JtZ3JsaXN0LmggICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL2NhdGFs b2cvcGdfcHJvYy5kYXQgICAgICAgICAgICAgICB8ICAgOSArCiBzcmMvaW5jbHVkZS9jYXRhbG9n L3BnX3B1YmxpY2F0aW9uLmggICAgICAgICAgfCAgIDQgKwogc3JjL2luY2x1ZGUvY29tbWFuZHMv ZXZlbnRfdHJpZ2dlci5oICAgICAgICAgIHwgICAzICstCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlv bi9kZGxtZXNzYWdlLmggICAgICAgICAgfCAgNjAgKysrCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlv bi9kZWNvZGUuaCAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24v bG9naWNhbHByb3RvLmggICAgICAgIHwgICA3ICstCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9v dXRwdXRfcGx1Z2luLmggICAgICAgfCAgMjcgKysKIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Bn b3V0cHV0LmggICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9yZW9y ZGVyYnVmZmVyLmggICAgICAgfCAgMzkgKysKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHNx bC5vdXQgICAgICAgICAgICB8ICAgNiArLQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wdWJs aWNhdGlvbi5vdXQgICAgIHwgNDIwICsrKysrKysrKy0tLS0tLS0tLQogMzEgZmlsZXMgY2hhbmdl ZCwgMTY4MiBpbnNlcnRpb25zKCspLCAyMjkgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2 NDQgc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL2xvZ2ljYWxkZGxtc2dkZXNjLmMKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RkbG1lc3NhZ2Uu YwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RkbG1lc3NhZ2Uu aAoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9NYWtlZmlsZSBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9NYWtlZmlsZQppbmRleCBmODhkNzJmZDg2Li5iOGUy OWU4ZGYzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvTWFrZWZpbGUK KysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL01ha2VmaWxlCkBAIC0xOSw2ICsxOSw3 IEBAIE9CSlMgPSBcCiAJaGFzaGRlc2MubyBcCiAJaGVhcGRlc2MubyBcCiAJbG9naWNhbG1zZ2Rl c2MubyBcCisJbG9naWNhbGRkbG1zZ2Rlc2MubyBcCiAJbXhhY3RkZXNjLm8gXAogCW5idGRlc2Mu byBcCiAJcmVsbWFwZGVzYy5vIFwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdy ZGVzYy9sb2dpY2FsZGRsbXNnZGVzYy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL2xv Z2ljYWxkZGxtc2dkZXNjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4u ODFkZWU1MjlkMAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVz Yy9sb2dpY2FsZGRsbXNnZGVzYy5jCkBAIC0wLDAgKzEsNTIgQEAKKy8qLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICoKKyAqIGxvZ2ljYWxkZGxtc2dkZXNjLmMKKyAqCSAgcm1nciBkZXNjcmlwdG9yIHJvdXRp bmVzIGZvciByZXBsaWNhdGlvbi9sb2dpY2FsL2RkbG1lc3NhZ2UuYworICoKKyAqIFBvcnRpb25z IENvcHlyaWdodCAoYykgMjAxNS0yMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBH cm91cAorICoKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMvYmFja2VuZC9hY2Nlc3Mv cm1ncmRlc2MvbG9naWNhbGRkbG1zZ2Rlc2MuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICov CisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgInJlcGxpY2F0aW9uL2RkbG1lc3Nh Z2UuaCIKKwordm9pZAorbG9naWNhbGRkbG1zZ19kZXNjKFN0cmluZ0luZm8gYnVmLCBYTG9nUmVh ZGVyU3RhdGUgKnJlY29yZCkKK3sKKwljaGFyCSAgICpyZWMgPSBYTG9nUmVjR2V0RGF0YShyZWNv cmQpOworCXVpbnQ4CQlpbmZvID0gWExvZ1JlY0dldEluZm8ocmVjb3JkKSAmIH5YTFJfSU5GT19N QVNLOworCisJaWYgKGluZm8gPT0gWExPR19MT0dJQ0FMX0RETF9NRVNTQUdFKQorCXsKKwkJeGxf bG9naWNhbF9kZGxfbWVzc2FnZSAqeGxyZWMgPSAoeGxfbG9naWNhbF9kZGxfbWVzc2FnZSAqKSBy ZWM7CisJCWNoYXIJICAgKnByZWZpeCA9IHhscmVjLT5tZXNzYWdlOworCQljaGFyCSAgICptZXNz YWdlID0geGxyZWMtPm1lc3NhZ2UgKyB4bHJlYy0+cHJlZml4X3NpemU7CisJCWNoYXIJICAgKnNl cCA9ICIiOworCisJCUFzc2VydChwcmVmaXhbeGxyZWMtPnByZWZpeF9zaXplXSAhPSAnXDAnKTsK KworCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgInByZWZpeCBcIiVzXCI7IHBheWxvYWQgKCV6dSBi eXRlcyk6ICIsCisJCQkJCQkgcHJlZml4LCB4bHJlYy0+bWVzc2FnZV9zaXplKTsKKwkJYXBwZW5k U3RyaW5nSW5mbyhidWYsICJyZWxpZCAldSBjbWR0eXBlICV1IiwgeGxyZWMtPnJlbGlkLCB4bHJl Yy0+Y21kdHlwZSk7CisJCS8qIFdyaXRlIG1lc3NhZ2UgcGF5bG9hZCBhcyBhIHNlcmllcyBvZiBo ZXggYnl0ZXMgKi8KKwkJZm9yIChpbnQgY250ID0gMDsgY250IDwgeGxyZWMtPm1lc3NhZ2Vfc2l6 ZTsgY250KyspCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJXMlMDJYIiwgc2VwLCAo dW5zaWduZWQgY2hhcikgbWVzc2FnZVtjbnRdKTsKKwkJCXNlcCA9ICIgIjsKKwkJfQorCX0KK30K KworY29uc3QgY2hhciAqCitsb2dpY2FsZGRsbXNnX2lkZW50aWZ5KHVpbnQ4IGluZm8pCit7CisJ aWYgKChpbmZvICYgflhMUl9JTkZPX01BU0spID09IFhMT0dfTE9HSUNBTF9ERExfTUVTU0FHRSkK KwkJcmV0dXJuICJEREwgTUVTU0FHRSI7CisKKwlyZXR1cm4gTlVMTDsKK30KZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGljYXRpb24uYyBiL3NyYy9iYWNrZW5kL2NhdGFs b2cvcGdfcHVibGljYXRpb24uYwppbmRleCA1OTk2NzA5OGIzLi43MjFkMDIzYWE1IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMKKysrIGIvc3JjL2JhY2tl bmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jCkBAIC0xMDA1LDYgKzEwMDUsNyBAQCBHZXRQdWJs aWNhdGlvbihPaWQgcHViaWQpCiAJcHViLT5wdWJhY3Rpb25zLnB1YnVwZGF0ZSA9IHB1YmZvcm0t PnB1YnVwZGF0ZTsKIAlwdWItPnB1YmFjdGlvbnMucHViZGVsZXRlID0gcHViZm9ybS0+cHViZGVs ZXRlOwogCXB1Yi0+cHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSA9IHB1YmZvcm0tPnB1YnRydW5jYXRl OworCXB1Yi0+cHViYWN0aW9ucy5wdWJkZGwgPSBwdWJmb3JtLT5wdWJkZGw7CiAJcHViLT5wdWJ2 aWFyb290ID0gcHViZm9ybS0+cHVidmlhcm9vdDsKIAogCVJlbGVhc2VTeXNDYWNoZSh0dXApOwpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jIGIvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jCmluZGV4IDQ0MWYyOWQ2ODQuLjdjOGMxZjUz OTQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYworKysg Yi9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMKQEAgLTM3LDggKzM3LDExIEBA CiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX2Z1bmMuaCIK ICNpbmNsdWRlICJwZ3N0YXQuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgi CisjaW5jbHVkZSAicmVwbGljYXRpb24vbWVzc2FnZS5oIgogI2luY2x1ZGUgInRjb3AvZGVwYXJz ZV91dGlsaXR5LmgiCiAjaW5jbHVkZSAidGNvcC91dGlsaXR5LmgiCisjaW5jbHVkZSAidGNvcC9k ZGxfZGVwYXJzZS5oIgogI2luY2x1ZGUgInV0aWxzL2FjbC5oIgogI2luY2x1ZGUgInV0aWxzL2J1 aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvZXZ0Y2FjaGUuaCIKQEAgLTE1MzcsNiArMTU0MCw3 IEBAIEV2ZW50VHJpZ2dlckFsdGVyVGFibGVTdGFydChOb2RlICpwYXJzZXRyZWUpCiAKIAljb21t YW5kLT5kLmFsdGVyVGFibGUuY2xhc3NJZCA9IFJlbGF0aW9uUmVsYXRpb25JZDsKIAljb21tYW5k LT5kLmFsdGVyVGFibGUub2JqZWN0SWQgPSBJbnZhbGlkT2lkOworCWNvbW1hbmQtPmQuYWx0ZXJU YWJsZS5yZXdyaXRlID0gZmFsc2U7CiAJY29tbWFuZC0+ZC5hbHRlclRhYmxlLnN1YmNtZHMgPSBO SUw7CiAJY29tbWFuZC0+cGFyc2V0cmVlID0gY29weU9iamVjdChwYXJzZXRyZWUpOwogCkBAIC0x NTcwLDcgKzE1NzQsNyBAQCBFdmVudFRyaWdnZXJBbHRlclRhYmxlUmVsaWQoT2lkIG9iamVjdElk KQogICogaW50ZXJuYWxseSwgc28gdGhhdCdzIGFsbCB0aGF0IHRoaXMgY29kZSBuZWVkcyB0byBo YW5kbGUgYXQgdGhlIG1vbWVudC4KICAqLwogdm9pZAotRXZlbnRUcmlnZ2VyQ29sbGVjdEFsdGVy VGFibGVTdWJjbWQoTm9kZSAqc3ViY21kLCBPYmplY3RBZGRyZXNzIGFkZHJlc3MpCitFdmVudFRy aWdnZXJDb2xsZWN0QWx0ZXJUYWJsZVN1YmNtZChOb2RlICpzdWJjbWQsIE9iamVjdEFkZHJlc3Mg YWRkcmVzcywgYm9vbCByZXdyaXRlKQogewogCU1lbW9yeUNvbnRleHQgb2xkY3h0OwogCUNvbGxl Y3RlZEFUU3ViY21kICpuZXdzdWI7CkBAIC0xNTkwLDYgKzE1OTQsNyBAQCBFdmVudFRyaWdnZXJD b2xsZWN0QWx0ZXJUYWJsZVN1YmNtZChOb2RlICpzdWJjbWQsIE9iamVjdEFkZHJlc3MgYWRkcmVz cykKIAluZXdzdWItPmFkZHJlc3MgPSBhZGRyZXNzOwogCW5ld3N1Yi0+cGFyc2V0cmVlID0gY29w eU9iamVjdChzdWJjbWQpOwogCisJY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29t bWFuZC0+ZC5hbHRlclRhYmxlLnJld3JpdGUgfD0gcmV3cml0ZTsKIAljdXJyZW50RXZlbnRUcmln Z2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kLT5kLmFsdGVyVGFibGUuc3ViY21kcyA9CiAJCWxhcHBl bmQoY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZC0+ZC5hbHRlclRhYmxl LnN1YmNtZHMsIG5ld3N1Yik7CiAKQEAgLTIxNzUsMyArMjE4MCwyNDYgQEAgc3RyaW5naWZ5X2Fk ZWZwcml2c19vYmp0eXBlKE9iamVjdFR5cGUgb2JqdHlwZSkKIAogCXJldHVybiAiPz8/IjsJCQkJ Lyoga2VlcCBjb21waWxlciBxdWlldCAqLwogfQorCisvKgorICogcHVibGljYXRpb25fZGVwYXJz ZV9kZGxfY29tbWFuZF9zdGFydAorICoKKyAqIERlcGFyc2UgdGhlIGRkbCBjb21tYW5kIGFuZCBs b2cgaXQuCisgKi8KK0RhdHVtCitwdWJsaWNhdGlvbl9kZXBhcnNlX2RkbF9jb21tYW5kX3N0YXJ0 KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJRXZlbnRUcmlnZ2VyRGF0YSAqdHJpZ2RhdGE7CisJY2hh cgkJKmNvbW1hbmQgPSBwc3ByaW50ZigiRHJvcCB0YWJsZSBjb21tYW5kIHN0YXJ0Iik7CisJRHJv cFN0bXQJKnN0bXQ7CisJTGlzdENlbGwJKmNlbGwxOworCisJaWYgKCFDQUxMRURfQVNfRVZFTlRf VFJJR0dFUihmY2luZm8pKQorCQllbG9nKEVSUk9SLCAibm90IGZpcmVkIGJ5IGV2ZW50IHRyaWdn ZXIgbWFuYWdlciIpOworCisJdHJpZ2RhdGEgPSAoRXZlbnRUcmlnZ2VyRGF0YSAqKSBmY2luZm8t PmNvbnRleHQ7CisJc3RtdAkgPSAoRHJvcFN0bXQgKikgdHJpZ2RhdGEtPnBhcnNldHJlZTsKKwor CS8qIGV4dHJhY3QgdGhlIHJlbGlkIGZyb20gdGhlIHBhcnNlIHRyZWUgKi8KKwlmb3JlYWNoKGNl bGwxLCBzdG10LT5vYmplY3RzKQorCXsKKwkJY2hhcglyZWxwZXJzaXN0OworCQlOb2RlCSpvYmpl Y3QgPSBsZmlyc3QoY2VsbDEpOworCQlPYmplY3RBZGRyZXNzIGFkZHJlc3M7CisJCVJlbGF0aW9u IHJlbGF0aW9uID0gTlVMTDsKKworCQlhZGRyZXNzID0gZ2V0X29iamVjdF9hZGRyZXNzKHN0bXQt PnJlbW92ZVR5cGUsCisJCQkJCQkJCQkgb2JqZWN0LAorCQkJCQkJCQkJICZyZWxhdGlvbiwKKwkJ CQkJCQkJCSBBY2Nlc3NFeGNsdXNpdmVMb2NrLAorCQkJCQkJCQkJIHRydWUpOworCisJCXJlbHBl cnNpc3QgPSBnZXRfcmVsX3BlcnNpc3RlbmNlKGFkZHJlc3Mub2JqZWN0SWQpOworCisJCS8qCisJ CSAqIERvIG5vdCBnZW5lcmF0ZSB3YWwgbG9nIGZvciBjb21tYW5kcyB3aG9zZSB0YXJnZXQgdGFi bGUgaXMgYQorCQkgKiB0ZW1wb3JhcnkgdGFibGUuCisJCSAqCisJCSAqIFdlIHdpbGwgZ2VuZXJh dGUgd2FsIGxvZ3MgZm9yIHVubG9nZ2VkIHRhYmxlcyBzbyB0aGF0IHVubG9nZ2VkCisJCSAqIHRh YmxlcyBjYW4gYWxzbyBiZSBjcmVhdGVkIGFuZCBhbHRlcmVkIG9uIHRoZSBzdWJzY3JpYmVyIHNp ZGUuIFRoaXMKKwkJICogbWFrZXMgaXQgcG9zc2libGUgdG8gZGlyZWN0bHkgcmVwbGF5IHRoZSBT RVQgTE9HR0VEIGNvbW1hbmQgYW5kIHRoZQorCQkgKiBpbmNvbWluZyByZXdyaXRlIG1lc3NhZ2Ug d2l0aG91dCBjcmVhdGluZyBhIG5ldyB0YWJsZS4KKwkJICovCisJCWlmIChyZWxwZXJzaXN0ID09 IFJFTFBFUlNJU1RFTkNFX1RFTVApCisJCXsKKwkJCXRhYmxlX2Nsb3NlKHJlbGF0aW9uLCBOb0xv Y2spOworCQkJY29udGludWU7CisJCX0KKworCQlMb2dMb2dpY2FsRERMTWVzc2FnZSgiZGVwYXJz ZSIsIGFkZHJlc3Mub2JqZWN0SWQsIERDVF9UYWJsZURyb3BTdGFydCwKKwkJCQkJCQkgY29tbWFu ZCwgc3RybGVuKGNvbW1hbmQpICsgMSk7CisKKwkJaWYgKHJlbGF0aW9uKQorCQkJdGFibGVfY2xv c2UocmVsYXRpb24sIE5vTG9jayk7CisJfQorCXJldHVybiBQb2ludGVyR2V0RGF0dW0oTlVMTCk7 Cit9CisKKy8qCisgKiBwdWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxlX3Jld3JpdGUKKyAqCisgKiBE ZXBhcnNlIHRoZSBkZGwgdGFibGUgcmV3cml0ZSBjb21tYW5kIGFuZCBsb2cgaXQuCisgKi8KK0Rh dHVtCitwdWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxlX3Jld3JpdGUoUEdfRlVOQ1RJT05fQVJHUykK K3sKKwljaGFyCQkJCXJlbHBlcnNpc3Q7CisJQ29sbGVjdGVkQ29tbWFuZCAgICpjbWQ7CisJY2hh cgkJCSAgICpqc29uX3N0cmluZzsKKworCWlmICghQ0FMTEVEX0FTX0VWRU5UX1RSSUdHRVIoZmNp bmZvKSkKKwkJZWxvZyhFUlJPUiwgIm5vdCBmaXJlZCBieSBldmVudCB0cmlnZ2VyIG1hbmFnZXIi KTsKKworCWNtZCA9IGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQ7CisK KwlBc3NlcnQoY21kICYmIGNtZC0+ZC5hbHRlclRhYmxlLnJld3JpdGUpOworCisJcmVscGVyc2lz dCA9IGdldF9yZWxfcGVyc2lzdGVuY2UoY21kLT5kLmFsdGVyVGFibGUub2JqZWN0SWQpOworCisJ LyoKKwkgKiBEbyBub3QgZ2VuZXJhdGUgd2FsIGxvZyBmb3IgY29tbWFuZHMgd2hvc2UgdGFyZ2V0 IHRhYmxlIGlzIGEgdGVtcG9yYXJ5CisJICogdGFibGUuCisJICoKKwkgKiBXZSB3aWxsIGdlbmVy YXRlIHdhbCBsb2dzIGZvciB1bmxvZ2dlZCB0YWJsZXMgc28gdGhhdCB1bmxvZ2dlZCB0YWJsZXMK KwkgKiBjYW4gYWxzbyBiZSBjcmVhdGVkIGFuZCBhbHRlcmVkIG9uIHRoZSBzdWJzY3JpYmVyIHNp ZGUuIFRoaXMgbWFrZXMgaXQKKwkgKiBwb3NzaWJsZSB0byBkaXJlY3RseSByZXBsYXkgdGhlIFNF VCBMT0dHRUQgY29tbWFuZCBhbmQgdGhlIGluY29taW5nCisJICogcmV3cml0ZSBtZXNzYWdlIHdp dGhvdXQgY3JlYXRpbmcgYSBuZXcgdGFibGUuCisJICovCisJaWYgKHJlbHBlcnNpc3QgPT0gUkVM UEVSU0lTVEVOQ0VfVEVNUCkKKwkJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShOVUxMKTsKKworCS8q IERlcGFyc2UgdGhlIERETCBjb21tYW5kIGFuZCBXQUwgbG9nIGl0IHRvIGFsbG93IGRlY29kaW5n IG9mIHRoZSBzYW1lLiAqLworCWpzb25fc3RyaW5nID0gZGVwYXJzZV91dGlsaXR5X2NvbW1hbmQo Y21kLCBmYWxzZSk7CisKKwlpZiAoanNvbl9zdHJpbmcgIT0gTlVMTCkKKwkJTG9nTG9naWNhbERE TE1lc3NhZ2UoImRlcGFyc2UiLCBjbWQtPmQuYWx0ZXJUYWJsZS5vYmplY3RJZCwgRENUX1RhYmxl QWx0ZXIsCisJCQkJCQkJIGpzb25fc3RyaW5nLCBzdHJsZW4oanNvbl9zdHJpbmcpICsgMSk7CisK KwlyZXR1cm4gUG9pbnRlckdldERhdHVtKE5VTEwpOworfQorCisvKgorICogcHVibGljYXRpb25f ZGVwYXJzZV9kZGxfY29tbWFuZF9lbmQKKyAqCisgKiBEZXBhcnNlIHRoZSBkZGwgY29tbWFuZCBh bmQgbG9nIGl0LgorICovCitEYXR1bQorcHVibGljYXRpb25fZGVwYXJzZV9kZGxfY29tbWFuZF9l bmQoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlMaXN0Q2VsbCAgICpsYzsKKwlzbGlzdF9pdGVyICBp dGVyOworCURlcGFyc2VkQ29tbWFuZFR5cGUgdHlwZTsKKwlPaWQgcmVsaWQ7CisKKwlpZiAoIUNB TExFRF9BU19FVkVOVF9UUklHR0VSKGZjaW5mbykpCisJCWVsb2coRVJST1IsICJub3QgZmlyZWQg YnkgZXZlbnQgdHJpZ2dlciBtYW5hZ2VyIik7CisKKwlmb3JlYWNoKGxjLCBjdXJyZW50RXZlbnRU cmlnZ2VyU3RhdGUtPmNvbW1hbmRMaXN0KQorCXsKKwkJY2hhcgkJCQlyZWxwZXJzaXN0ID0gUkVM UEVSU0lTVEVOQ0VfUEVSTUFORU5UOworCQlDb2xsZWN0ZWRDb21tYW5kICAgKmNtZCA9IGxmaXJz dChsYyk7CisJCWNoYXIJCQkgICAqanNvbl9zdHJpbmc7CisKKwkJLyogUmV3cml0ZSBEREwgaGFz IGJlZW4gaGFuZGxlZCBpbiB0YWJsZV9yZXdyaXRlIHRyaWdnZXIgKi8KKwkJaWYgKGNtZC0+ZC5h bHRlclRhYmxlLnJld3JpdGUpCisJCXsKKwkJCVJlbmFtZVN0bXQgKnJlbmFtZVN0bXQgPSAoUmVu YW1lU3RtdCAqKWNtZC0+cGFyc2V0cmVlOworCisJCQlpZiAocmVuYW1lU3RtdCAmJiByZW5hbWVT dG10LT5yZWxhdGlvblR5cGUgIT0gT0JKRUNUX1RZUEUgJiYKKwkJCQlyZW5hbWVTdG10LT5yZWxh dGlvblR5cGUgIT0gT0JKRUNUX1RBQkxFKQorCQkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGNt ZC0+dHlwZSA9PSBTQ1RfU2ltcGxlICYmCisJCQkhT2lkSXNWYWxpZChjbWQtPmQuc2ltcGxlLmFk ZHJlc3Mub2JqZWN0SWQpKQorCQkJY29udGludWU7CisKKwkJaWYgKGNtZC0+dHlwZSA9PSBTQ1Rf QWx0ZXJUYWJsZSkKKwkJeworCQkJcmVsaWQgPSBjbWQtPmQuYWx0ZXJUYWJsZS5vYmplY3RJZDsK KwkJCXR5cGUgPSBEQ1RfVGFibGVBbHRlcjsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qIE9ubHkg U0NUX1NpbXBsZSBmb3Igbm93ICovCisJCQlyZWxpZCA9IGNtZC0+ZC5zaW1wbGUuYWRkcmVzcy5v YmplY3RJZDsKKwkJCXR5cGUgPSBEQ1RfU2ltcGxlQ21kOworCQl9CisKKwkJaWYgKGdldF9yZWxf cmVsa2luZChyZWxpZCkpCisJCQlyZWxwZXJzaXN0ID0gZ2V0X3JlbF9wZXJzaXN0ZW5jZShyZWxp ZCk7CisKKwkJLyoKKwkJICogRG8gbm90IGdlbmVyYXRlIHdhbCBsb2cgZm9yIGNvbW1hbmRzIHdo b3NlIHRhcmdldCB0YWJsZSBpcyBhCisJCSAqIHRlbXBvcmFyeSB0YWJsZS4KKwkJICoKKwkJICog V2Ugd2lsbCBnZW5lcmF0ZSB3YWwgbG9ncyBmb3IgdW5sb2dnZWQgdGFibGVzIHNvIHRoYXQgdW5s b2dnZWQgdGFibGVzCisJCSAqIGNhbiBhbHNvIGJlIGNyZWF0ZWQgYW5kIGFsdGVyZWQgb24gdGhl IHN1YnNjcmliZXIgc2lkZS4gVGhpcyBtYWtlcyBpdAorCQkgKiBwb3NzaWJsZSB0byBkaXJlY3Rs eSByZXBsYXkgdGhlIFNFVCBMT0dHRUQgY29tbWFuZCBhbmQgdGhlIGluY29taW5nCisJCSAqIHJl d3JpdGUgbWVzc2FnZSB3aXRob3V0IGNyZWF0aW5nIGEgbmV3IHRhYmxlLgorCQkgKi8KKwkJaWYg KHJlbHBlcnNpc3QgPT0gUkVMUEVSU0lTVEVOQ0VfVEVNUCkKKwkJCWNvbnRpbnVlOworCisJCS8q CisJCSAqIERlcGFyc2UgdGhlIERETCBjb21tYW5kIGFuZCBXQUwgbG9nIGl0IHRvIGFsbG93IGRl Y29kaW5nIG9mIHRoZQorCQkgKiBzYW1lLgorCQkgKi8KKwkJanNvbl9zdHJpbmcgPSBkZXBhcnNl X3V0aWxpdHlfY29tbWFuZChjbWQsIGZhbHNlKTsKKworCQlpZiAoanNvbl9zdHJpbmcgPT0gTlVM TCkKKwkJCWNvbnRpbnVlOworCisJCUxvZ0xvZ2ljYWxERExNZXNzYWdlKCJkZXBhcnNlIiwgcmVs aWQsIHR5cGUsIGpzb25fc3RyaW5nLAorCQkJCQkJCSBzdHJsZW4oanNvbl9zdHJpbmcpICsgMSk7 CisJfQorCisJc2xpc3RfZm9yZWFjaChpdGVyLCAmKGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+ U1FMRHJvcExpc3QpKQorCXsKKwkJdm9sYXRpbGUgU1FMRHJvcE9iamVjdCAqb2JqOworCQlEcm9w U3RtdAkJCSAgICpzdG10OworCQlFdmVudFRyaWdnZXJEYXRhIAkgICAqdHJpZ2RhdGE7CisJCWNo YXIJCQkJICAgKmNvbW1hbmQ7CisJCURlcGFyc2VkQ29tbWFuZFR5cGUJCWNtZHR5cGU7CisJCWNv bnN0IGNoYXIJCQkgICAqdG1wdHlwZTsKKworCQl0cmlnZGF0YSA9IChFdmVudFRyaWdnZXJEYXRh ICopIGZjaW5mby0+Y29udGV4dDsKKwkJc3RtdAkgPSAoRHJvcFN0bXQgKikgdHJpZ2RhdGEtPnBh cnNldHJlZTsKKworCQlvYmogPSBzbGlzdF9jb250YWluZXIoU1FMRHJvcE9iamVjdCwgbmV4dCwg aXRlci5jdXIpOworCisJCWlmIChzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAidGFibGUiKSA9PSAw KQorCQkJY21kdHlwZSA9IERDVF9UYWJsZURyb3BFbmQ7CisJCWVsc2UgaWYgKHN0cmNtcChvYmot Pm9iamVjdHR5cGUsICJzZXF1ZW5jZSIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0 dHlwZSwgInNjaGVtYSIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgImlu ZGV4IikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAiZnVuY3Rpb24iKSA9 PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJwcm9jZWR1cmUiKSA9PSAwIHx8 CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJvcGVyYXRvciIpID09IDAgfHwKKwkJCQkg c3RyY21wKG9iai0+b2JqZWN0dHlwZSwgIm9wZXJhdG9yIGNsYXNzIikgPT0gMCB8fAorCQkJCSBz dHJjbXAob2JqLT5vYmplY3R0eXBlLCAib3BlcmF0b3IgZmFtaWx5IikgPT0gMCB8fAorCQkJCSBz dHJjbXAob2JqLT5vYmplY3R0eXBlLCAiY2FzdCIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+ b2JqZWN0dHlwZSwgInR5cGUiKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUs ICJkb21haW4iKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJ0cmlnZ2Vy IikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAiY29udmVyc2lvbiIpID09 IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgInBvbGljeSIpID09IDAJfHwKKwkJ CQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgInJ1bGUiKSA9PSAwIHx8CisJCQkJIHN0cmNtcChv YmotPm9iamVjdHR5cGUsICJleHRlbnNpb24iKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9i amVjdHR5cGUsICJmb3JlaWduLWRhdGEgd3JhcHBlciIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9i ai0+b2JqZWN0dHlwZSwgInRleHQgc2VhcmNoIGNvbmZpZ3VyYXRpb24iKSA9PSAwIHx8CisJCQkJ IHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJ0ZXh0IHNlYXJjaCBkaWN0aW9uYXJ5IikgPT0gMCB8 fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAidGV4dCBzZWFyY2ggcGFyc2VyIikgPT0g MCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAidGV4dCBzZWFyY2ggdGVtcGxhdGUi KSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJ0cmFuc2Zvcm0iKSA9PSAw KQorCQkJY21kdHlwZSA9IERDVF9PYmplY3REcm9wOworCQllbHNlCisJCQljb250aW51ZTsKKwor CQkvKgorCQkgKiBDaGFuZ2UgZm9yZWlnbi1kYXRhIHdyYXBwZXIgdG8gZm9yZWlnbiBkYXRhIHdy YXBwZXIuCisJCSAqLworCQlpZiAoc3RybmNtcChvYmotPm9iamVjdHR5cGUsICJmb3JlaWduLWRh dGEgd3JhcHBlciIsIDIwKSA9PSAwKQorCQl7CisJCQl0bXB0eXBlID0gcHN0cmR1cCgiZm9yZWln biBkYXRhIHdyYXBwZXIiKTsKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX2Ryb3BfY29tbWFuZChvYmot Pm9iamlkZW50aXR5LCB0bXB0eXBlLAorCQkJCQkJCQkJCSAgIHN0bXQtPmJlaGF2aW9yKTsKKwkJ fQorCQllbHNlCisJCQljb21tYW5kID0gZGVwYXJzZV9kcm9wX2NvbW1hbmQob2JqLT5vYmppZGVu dGl0eSwgb2JqLT5vYmplY3R0eXBlLAorCQkJCQkJCQkJICAgc3RtdC0+YmVoYXZpb3IpOworCisJ CWlmIChjb21tYW5kID09IE5VTEwpCisJCQljb250aW51ZTsKKworCQlMb2dMb2dpY2FsRERMTWVz c2FnZSgiZGVwYXJzZSIsIG9iai0+YWRkcmVzcy5vYmplY3RJZCwgY21kdHlwZSwKKwkJCQkJCQkg Y29tbWFuZCwgc3RybGVuKGNvbW1hbmQpICsgMSk7CisJfQorCisJcmV0dXJuIFBvaW50ZXJHZXRE YXR1bShOVUxMKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0 aW9uY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMKaW5kZXgg YThiNzVlYjFiZS4uNWE1Yjk3OWIwMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMv cHVibGljYXRpb25jbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25j bWRzLmMKQEAgLTM3LDEwICszNywxMiBAQAogI2luY2x1ZGUgImNvbW1hbmRzL3B1YmxpY2F0aW9u Y21kcy5oIgogI2luY2x1ZGUgImZ1bmNhcGkuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNp bmNsdWRlICJub2Rlcy9tYWtlZnVuY3MuaCIKICNpbmNsdWRlICJub2Rlcy9ub2RlRnVuY3MuaCIK ICNpbmNsdWRlICJwYXJzZXIvcGFyc2VfY2xhdXNlLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNl X2NvbGxhdGUuaCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2VfcmVsYXRpb24uaCIKKyNpbmNsdWRl ICJwYXJzZXIvcGFyc2VyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCiAjaW5jbHVkZSAi dXRpbHMvYWNsLmgiCiAjaW5jbHVkZSAidXRpbHMvYXJyYXkuaCIKQEAgLTk2LDYgKzk4LDcgQEAg cGFyc2VfcHVibGljYXRpb25fb3B0aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsCiAJcHViYWN0aW9u cy0+cHVidXBkYXRlID0gdHJ1ZTsKIAlwdWJhY3Rpb25zLT5wdWJkZWxldGUgPSB0cnVlOwogCXB1 YmFjdGlvbnMtPnB1YnRydW5jYXRlID0gdHJ1ZTsKKwlwdWJhY3Rpb25zLT5wdWJkZGwgPSBmYWxz ZTsKIAkqcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSBmYWxzZTsKIAogCS8qIFBhcnNlIG9w dGlvbnMgKi8KQEAgLTE0Myw2ICsxNDYsOCBAQCBwYXJzZV9wdWJsaWNhdGlvbl9vcHRpb25zKFBh cnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQkJcHViYWN0aW9ucy0+cHViZGVsZXRlID0gdHJ1ZTsKIAkJ CQllbHNlIGlmIChzdHJjbXAocHVibGlzaF9vcHQsICJ0cnVuY2F0ZSIpID09IDApCiAJCQkJCXB1 YmFjdGlvbnMtPnB1YnRydW5jYXRlID0gdHJ1ZTsKKwkJCQllbHNlIGlmIChzdHJjbXAocHVibGlz aF9vcHQsICJkZGwiKSA9PSAwKQorCQkJCQlwdWJhY3Rpb25zLT5wdWJkZGwgPSB0cnVlOwogCQkJ CWVsc2UKIAkJCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRB WF9FUlJPUiksCkBAIC03MjcsNiArNzMyLDUzIEBAIENoZWNrUHViUmVsYXRpb25Db2x1bW5MaXN0 KGNoYXIgKnB1Ym5hbWUsIExpc3QgKnRhYmxlcywKIAl9CiB9CiAKKy8qCisgKiBDcmVhdGUgZXZl bnQgdHJpZ2dlciB3aGljaCBpcyB1c2VkIGZvciBEREwgcmVwbGljYXRpb24uCisgKi8KK3N0YXRp YyB2b2lkCitDcmVhdGVERExSZXBsaWNhRXZlbnRUcmlnZ2VyKGNoYXIgKmV2ZW50bmFtZSwgQ29t bWFuZFRhZyAqY29tbWFuZHMsCisJCQkJCQkJIGludCBuY29tbWFuZHMsIE9iamVjdEFkZHJlc3Mg cHViYWRkcmVzcywKKwkJCQkJCQkgT2lkIHB1Ym9pZCkKK3sKKwlpbnQJCQkJCWk7CisJTGlzdAkJ CSAgICp0YWdzID0gTklMOworCU9pZAkJCQkJdHJpZ2dlcl9pZDsKKwlPYmplY3RBZGRyZXNzCQly ZWZlcmVuY2VkOworCUNyZWF0ZUV2ZW50VHJpZ1N0bXQgKmRkbF90cmlnZ2VyOworCWNoYXIJCQkJ dHJpZ2dlcl9uYW1lW05BTUVEQVRBTEVOXTsKKwljaGFyCQkJCXRyaWdnZXJfZnVuY19uYW1lW05B TUVEQVRBTEVOXTsKKwlzdGF0aWMgY29uc3QgY2hhciAgICp0cmlnZ2VyX25hbWVfcHJlZml4ID0g InBnX2RlcGFyc2VfdHJpZ18lc18ldSI7CisJc3RhdGljIGNvbnN0IGNoYXIgICAqdHJpZ2dlcl9m dW5jX3ByZWZpeCA9ICJwdWJsaWNhdGlvbl9kZXBhcnNlXyVzIjsKKworCWRkbF90cmlnZ2VyID0g bWFrZU5vZGUoQ3JlYXRlRXZlbnRUcmlnU3RtdCk7CisKKwlzbnByaW50Zih0cmlnZ2VyX25hbWUs IHNpemVvZih0cmlnZ2VyX25hbWUpLCB0cmlnZ2VyX25hbWVfcHJlZml4LAorCQkJIGV2ZW50bmFt ZSwgcHVib2lkKTsKKwlzbnByaW50Zih0cmlnZ2VyX2Z1bmNfbmFtZSwgc2l6ZW9mKHRyaWdnZXJf ZnVuY19uYW1lKSwgdHJpZ2dlcl9mdW5jX3ByZWZpeCwKKwkJCSBldmVudG5hbWUpOworCisJZGRs X3RyaWdnZXItPnRyaWduYW1lID0gcHN0cmR1cCh0cmlnZ2VyX25hbWUpOworCWRkbF90cmlnZ2Vy LT5ldmVudG5hbWUgPSBldmVudG5hbWU7CisJZGRsX3RyaWdnZXItPmZ1bmNuYW1lID0gU3lzdGVt RnVuY05hbWUodHJpZ2dlcl9mdW5jX25hbWUpOworCisJZm9yIChpID0gMDsgaSA8IG5jb21tYW5k czsgaSsrKQorCXsKKwkJU3RyaW5nICp0YWcgPSBtYWtlU3RyaW5nKHBzdHJkdXAoR2V0Q29tbWFu ZFRhZ05hbWUoY29tbWFuZHNbaV0pKSk7CisJCXRhZ3MgPSBsYXBwZW5kKHRhZ3MsIHRhZyk7CisJ fQorCisJZGRsX3RyaWdnZXItPndoZW5jbGF1c2UgPSBsaXN0X21ha2UxKG1ha2VEZWZFbGVtKCJ0 YWciLCAoTm9kZSAqKSB0YWdzLCAtMSkpOworCisJdHJpZ2dlcl9pZCA9IENyZWF0ZUV2ZW50VHJp Z2dlcihkZGxfdHJpZ2dlcik7CisKKwkvKgorCSAqIFJlZ2lzdGVyIHRoZSBldmVudCB0cmlnZ2Vy cyBhcyBpbnRlcm5hbGx5IGRlcGVuZGVudCBvbiB0aGUKKwkgKiBwdWJsaWNhdGlvbi4KKwkgKi8K KwlPYmplY3RBZGRyZXNzU2V0KHJlZmVyZW5jZWQsIEV2ZW50VHJpZ2dlclJlbGF0aW9uSWQsIHRy aWdnZXJfaWQpOworCXJlY29yZERlcGVuZGVuY3lPbigmcmVmZXJlbmNlZCwgJnB1YmFkZHJlc3Ms IERFUEVOREVOQ1lfSU5URVJOQUwpOworfQorCiAvKgogICogQ3JlYXRlIG5ldyBwdWJsaWNhdGlv bi4KICAqLwpAQCAtNzk3LDYgKzg0OSw4IEBAIENyZWF0ZVB1YmxpY2F0aW9uKFBhcnNlU3RhdGUg KnBzdGF0ZSwgQ3JlYXRlUHVibGljYXRpb25TdG10ICpzdG10KQogCQlCb29sR2V0RGF0dW0ocHVi YWN0aW9ucy5wdWJkZWxldGUpOwogCXZhbHVlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1YnRydW5j YXRlIC0gMV0gPQogCQlCb29sR2V0RGF0dW0ocHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSk7CisJdmFs dWVzW0FudW1fcGdfcHVibGljYXRpb25fcHViZGRsIC0gMV0gPQorCQlCb29sR2V0RGF0dW0ocHVi YWN0aW9ucy5wdWJkZGwpOwogCXZhbHVlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1YnZpYXJvb3Qg LSAxXSA9CiAJCUJvb2xHZXREYXR1bShwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCk7CiAKQEAg LTg1Nyw2ICs5MTEsMTA2IEBAIENyZWF0ZVB1YmxpY2F0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwg Q3JlYXRlUHVibGljYXRpb25TdG10ICpzdG10KQogCQl9CiAJfQogCisJLyoKKwkgKiBDcmVhdGUg YW4gZXZlbnQgdHJpZ2dlciB0byBhbGxvdyBsb2dnaW5nIG9mIERETCBzdGF0ZW1lbnRzLgorCSAq CisJICogVE9ETzogV2UgbmVlZCB0byBmaW5kIGEgYmV0dGVyIHN5bnRheCB0byBhbGxvdyByZXBs aWNhdGlvbiBvZiBEREwKKwkgKiBzdGF0ZW1lbnRzLgorCSAqCisJICogWFhYOiBUaGlzIGNvZGUg aXMganVzdCB0byBzaG93IHRoZSByZXBsaWNhdGlvbiBvZiBDUkVBVEUvQUxURVIvRFJPUAorCSAq IFRBQkxFIHdvcmtzLiBXZSBuZWVkIHRvIGVuaGFuY2UgdGhpcyBvbmNlIHRoZSBhcHByb2FjaCBm b3IgRERMCisJICogcmVwbGljYXRpb24gaXMgZmluYWxpemVkLgorCSAqLworCWlmIChwdWJhY3Rp b25zLnB1YmRkbCkKKwl7CisJCUNvbW1hbmRUYWcJc3RhcnRfY29tbWFuZHNbXSA9IHtDTURUQUdf RFJPUF9UQUJMRX07CisJCUNvbW1hbmRUYWcJcmV3cml0ZV9jb21tYW5kc1tdID0ge0NNRFRBR19B TFRFUl9UQUJMRX07CisKKwkJQ29tbWFuZFRhZwllbmRfY29tbWFuZHNbXSA9IHsKKwkJCUNNRFRB R19DUkVBVEVfVFJBTlNGT1JNLAorCQkJQ01EVEFHX0RST1BfVFJBTlNGT1JNLAorCQkJQ01EVEFH X0NSRUFURV9GT1JFSUdOX0RBVEFfV1JBUFBFUiwKKwkJCUNNRFRBR19BTFRFUl9GT1JFSUdOX0RB VEFfV1JBUFBFUiwKKwkJCUNNRFRBR19EUk9QX0ZPUkVJR05fREFUQV9XUkFQUEVSLAorCQkJQ01E VEFHX0NSRUFURV9FWFRFTlNJT04sCisJCQlDTURUQUdfQUxURVJfRVhURU5TSU9OLAorCQkJQ01E VEFHX0RST1BfRVhURU5TSU9OLAorCQkJQ01EVEFHX0NSRUFURV9URVhUX1NFQVJDSF9DT05GSUdV UkFUSU9OLAorCQkJQ01EVEFHX0FMVEVSX1RFWFRfU0VBUkNIX0NPTkZJR1VSQVRJT04sCisJCQlD TURUQUdfRFJPUF9URVhUX1NFQVJDSF9DT05GSUdVUkFUSU9OLAorCQkJQ01EVEFHX0NSRUFURV9U RVhUX1NFQVJDSF9ESUNUSU9OQVJZLAorCQkJQ01EVEFHX0FMVEVSX1RFWFRfU0VBUkNIX0RJQ1RJ T05BUlksCisJCQlDTURUQUdfRFJPUF9URVhUX1NFQVJDSF9ESUNUSU9OQVJZLAorCQkJQ01EVEFH X0NSRUFURV9URVhUX1NFQVJDSF9QQVJTRVIsCisJCQlDTURUQUdfRFJPUF9URVhUX1NFQVJDSF9Q QVJTRVIsCisJCQlDTURUQUdfQ1JFQVRFX1RFWFRfU0VBUkNIX1RFTVBMQVRFLAorCQkJQ01EVEFH X0RST1BfVEVYVF9TRUFSQ0hfVEVNUExBVEUsCisJCQlDTURUQUdfQ1JFQVRFX1BPTElDWSwKKwkJ CUNNRFRBR19BTFRFUl9QT0xJQ1ksCisJCQlDTURUQUdfRFJPUF9QT0xJQ1ksCisJCQlDTURUQUdf Q1JFQVRFX0NPTlZFUlNJT04sCisJCQlDTURUQUdfQUxURVJfQ09OVkVSU0lPTiwKKwkJCUNNRFRB R19EUk9QX0NPTlZFUlNJT04sCisJCQlDTURUQUdfQ1JFQVRFX0RPTUFJTiwKKwkJCUNNRFRBR19B TFRFUl9ET01BSU4sCisJCQlDTURUQUdfRFJPUF9ET01BSU4sCisJCQlDTURUQUdfQUxURVJfSU5E RVgsCisJCQlDTURUQUdfQ1JFQVRFX1RZUEUsCisJCQlDTURUQUdfRFJPUF9UWVBFLAorCQkJQ01E VEFHX0FMVEVSX1RZUEUsCisJCQlDTURUQUdfQ1JFQVRFX0NBU1QsCisJCQlDTURUQUdfQUxURVJf Q0FTVCwKKwkJCUNNRFRBR19EUk9QX0NBU1QsCisJCQlDTURUQUdfQ1JFQVRFX09QRVJBVE9SLAor CQkJQ01EVEFHX0NSRUFURV9PUEVSQVRPUl9DTEFTUywKKwkJCUNNRFRBR19DUkVBVEVfT1BFUkFU T1JfRkFNSUxZLAorCQkJQ01EVEFHX0FMVEVSX09QRVJBVE9SX0ZBTUlMWSwKKwkJCUNNRFRBR19B TFRFUl9PUEVSQVRPUl9DTEFTUywKKwkJCUNNRFRBR19BTFRFUl9PUEVSQVRPUiwKKwkJCUNNRFRB R19EUk9QX09QRVJBVE9SLAorCQkJQ01EVEFHX0RST1BfT1BFUkFUT1JfQ0xBU1MsCisJCQlDTURU QUdfRFJPUF9PUEVSQVRPUl9GQU1JTFksCisJCQlDTURUQUdfQ1JFQVRFX1BST0NFRFVSRSwKKwkJ CUNNRFRBR19BTFRFUl9QUk9DRURVUkUsCisJCQlDTURUQUdfRFJPUF9QUk9DRURVUkUsCisJCQlD TURUQUdfQ1JFQVRFX0ZVTkNUSU9OLAorCQkJQ01EVEFHX0FMVEVSX0ZVTkNUSU9OLAorCQkJQ01E VEFHX0RST1BfRlVOQ1RJT04sCisJCQlDTURUQUdfQ1JFQVRFX1RSSUdHRVIsCisJCQlDTURUQUdf QUxURVJfVFJJR0dFUiwKKwkJCUNNRFRBR19EUk9QX1RBQkxFLAorCQkJQ01EVEFHX0NSRUFURV9U QUJMRSwKKwkJCUNNRFRBR19BTFRFUl9UQUJMRSwKKwkJCUNNRFRBR19DUkVBVEVfU0VRVUVOQ0Us CisJCQlDTURUQUdfQUxURVJfU0VRVUVOQ0UsCisJCQlDTURUQUdfRFJPUF9TRVFVRU5DRSwKKwkJ CUNNRFRBR19DUkVBVEVfU0NIRU1BLAorCQkJQ01EVEFHX0FMVEVSX1NDSEVNQSwKKwkJCUNNRFRB R19EUk9QX1NDSEVNQSwKKwkJCUNNRFRBR19DUkVBVEVfSU5ERVgsCisJCQlDTURUQUdfRFJPUF9J TkRFWCwKKwkJCUNNRFRBR19BTFRFUl9JTkRFWCwKKwkJCUNNRFRBR19HUkFOVCwKKwkJCUNNRFRB R19SRVZPS0UsCisJCQlDTURUQUdfQ1JFQVRFX1JVTEUsCisJCQlDTURUQUdfQUxURVJfUlVMRSwK KwkJCUNNRFRBR19EUk9QX1JVTEUsCisJCQlDTURUQUdfUkVGUkVTSF9NQVRFUklBTElaRURfVklF VworCQl9OworCisJCS8qIENyZWF0ZSB0aGUgZGRsX2NvbW1hbmRfZW5kIGV2ZW50IHRyaWdnZXIg Ki8KKwkJQ3JlYXRlRERMUmVwbGljYUV2ZW50VHJpZ2dlcigiZGRsX2NvbW1hbmRfZW5kIiwgZW5k X2NvbW1hbmRzLAorCQkJCQkJCQkJIGxlbmd0aG9mKGVuZF9jb21tYW5kcyksIG15c2VsZiwgcHVi b2lkKTsKKworCQkvKiBDcmVhdGUgdGhlIGRkbF9jb21tYW5kX3N0YXJ0IGV2ZW50IHRyaWdnZXIg Ki8KKwkJQ3JlYXRlRERMUmVwbGljYUV2ZW50VHJpZ2dlcigiZGRsX2NvbW1hbmRfc3RhcnQiLCBz dGFydF9jb21tYW5kcywKKwkJCQkJCQkJCSBsZW5ndGhvZihzdGFydF9jb21tYW5kcyksIG15c2Vs ZiwgcHVib2lkKTsKKworCQkvKiBDcmVhdGUgdGhlIHRhYmxlX3Jld3JpdGUgZXZlbnQgdHJpZ2dl ciAqLworCQlDcmVhdGVERExSZXBsaWNhRXZlbnRUcmlnZ2VyKCJ0YWJsZV9yZXdyaXRlIiwgcmV3 cml0ZV9jb21tYW5kcywKKwkJCQkJCQkJCSBsZW5ndGhvZihyZXdyaXRlX2NvbW1hbmRzKSwgbXlz ZWxmLCBwdWJvaWQpOworCX0KKwogCXRhYmxlX2Nsb3NlKHJlbCwgUm93RXhjbHVzaXZlTG9jayk7 CiAKIAlJbnZva2VPYmplY3RQb3N0Q3JlYXRlSG9vayhQdWJsaWNhdGlvblJlbGF0aW9uSWQsIHB1 Ym9pZCwgMCk7CkBAIC05OTUsNiArMTE0OSw5IEBAIEFsdGVyUHVibGljYXRpb25PcHRpb25zKFBh cnNlU3RhdGUgKnBzdGF0ZSwgQWx0ZXJQdWJsaWNhdGlvblN0bXQgKnN0bXQsCiAKIAkJdmFsdWVz W0FudW1fcGdfcHVibGljYXRpb25fcHVidHJ1bmNhdGUgLSAxXSA9IEJvb2xHZXREYXR1bShwdWJh Y3Rpb25zLnB1YnRydW5jYXRlKTsKIAkJcmVwbGFjZXNbQW51bV9wZ19wdWJsaWNhdGlvbl9wdWJ0 cnVuY2F0ZSAtIDFdID0gdHJ1ZTsKKworCQl2YWx1ZXNbQW51bV9wZ19wdWJsaWNhdGlvbl9wdWJk ZGwgLSAxXSA9IEJvb2xHZXREYXR1bShwdWJhY3Rpb25zLnB1YmRkbCk7CisJCXJlcGxhY2VzW0Fu dW1fcGdfcHVibGljYXRpb25fcHViZGRsIC0gMV0gPSB0cnVlOwogCX0KIAogCWlmIChwdWJsaXNo X3ZpYV9wYXJ0aXRpb25fcm9vdF9naXZlbikKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1h bmRzL3RhYmxlY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKaW5kZXgg MWY3NzRhYzA2NS4uN2ZjNmY0MTYwMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMv dGFibGVjbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKQEAgLTUy NTMsNyArNTI1Myw3IEBAIEFURXhlY0NtZChMaXN0ICoqd3F1ZXVlLCBBbHRlcmVkVGFibGVJbmZv ICp0YWIsCiAJICogUmVwb3J0IHRoZSBzdWJjb21tYW5kIHRvIGludGVyZXN0ZWQgZXZlbnQgdHJp Z2dlcnMuCiAJICovCiAJaWYgKGNtZCkKLQkJRXZlbnRUcmlnZ2VyQ29sbGVjdEFsdGVyVGFibGVT dWJjbWQoKE5vZGUgKikgY21kLCBhZGRyZXNzKTsKKwkJRXZlbnRUcmlnZ2VyQ29sbGVjdEFsdGVy VGFibGVTdWJjbWQoKE5vZGUgKikgY21kLCBhZGRyZXNzLCB0YWItPnJld3JpdGUpOwogCiAJLyoK IAkgKiBCdW1wIHRoZSBjb21tYW5kIGNvdW50ZXIgdG8gZW5zdXJlIHRoZSBuZXh0IHN1YmNvbW1h bmQgaW4gdGhlIHNlcXVlbmNlCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9s b2dpY2FsL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmls ZQppbmRleCBjNGUyZmRlYjcxLi5mM2VlYjY3MzEyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvTWFrZWZpbGUKQEAgLTE2LDYgKzE2LDcgQEAgb3ZlcnJpZGUgQ1BQRkxBR1MgOj0g LUkkKHNyY2RpcikgJChDUFBGTEFHUykKIAogT0JKUyA9IFwKIAlkZWNvZGUubyBcCisJZGRsbWVz c2FnZS5vXAogCWxhdW5jaGVyLm8gXAogCWxvZ2ljYWwubyBcCiAJbG9naWNhbGZ1bmNzLm8gXApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZGxtZXNzYWdlLmMg Yi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RkbG1lc3NhZ2UuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi41MDkzNTIzZTlhCi0tLSAvZGV2L251bGwKKysr IGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZGxtZXNzYWdlLmMKQEAgLTAsMCAr MSw4NiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZGRsbWVzc2FnZS5jCisgKgkgIExv Z2ljYWwgRERMIG1lc3NhZ2VzLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAyMiwgUG9zdGdyZVNR TCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBz cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RkbG1lc3NhZ2UuYworICoKKyAqIE5PVEVT CisgKgorICogTG9naWNhbCBEREwgbWVzc2FnZXMgYWxsb3cgWExPRyBsb2dnaW5nIG9mIERETCBj b21tYW5kIHN0cmluZ3MgdGhhdAorICogZ2V0IHBhc3NlZCB0byB0aGUgbG9naWNhbCBkZWNvZGlu ZyBwbHVnaW4uIEluIG5vcm1hbCBYTE9HIHByb2Nlc3NpbmcgdGhleQorICogYXJlIHNhbWUgYXMg Tk9PUC4KKyAqCisgKiBVbmxpa2UgZ2VuZXJpYyBsb2dpY2FsIG1lc3NhZ2VzLCB0aGVzZSBEREwg bWVzc2FnZXMgaGF2ZSBvbmx5IHRyYW5zYWN0aW9uYWwKKyAqIG1vZGUuTm90ZSBieSBkZWZhdWx0 IERETHMgaW4gUG9zdGdyZVNRTCBhcmUgdHJhbnNhY3Rpb25hbC4KKyAqCisgKiBUaGVzZSBtZXNz YWdlcyBhcmUgcGFydCBvZiBjdXJyZW50IHRyYW5zYWN0aW9uIGFuZCB3aWxsIGJlIHNlbnQgdG8K KyAqIGRlY29kaW5nIHBsdWdpbiB1c2luZyBpbiBhIHNhbWUgd2F5IGFzIERNTCBvcGVyYXRpb25z LgorICoKKyAqIEV2ZXJ5IG1lc3NhZ2UgY2FycmllcyBwcmVmaXggdG8gYXZvaWQgY29uZmxpY3Rz IGJldHdlZW4gZGlmZmVyZW50IGRlY29kaW5nCisgKiBwbHVnaW5zLiBUaGUgcGx1Z2luIGF1dGhv cnMgbXVzdCB0YWtlIGV4dHJhIGNhcmUgdG8gdXNlIHVuaXF1ZSBwcmVmaXgsCisgKiBnb29kIG9w dGlvbnMgc2VlbXMgdG8gYmUgZm9yIGV4YW1wbGUgdG8gdXNlIHRoZSBuYW1lIG9mIHRoZSBleHRl bnNpb24uCisgKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUgInBvc3Rn cmVzLmgiCisKKyNpbmNsdWRlICJhY2Nlc3MveGFjdC5oIgorI2luY2x1ZGUgImFjY2Vzcy94bG9n aW5zZXJ0LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9uYW1lc3BhY2UuaCIKKyNpbmNsdWRlICJtaXNj YWRtaW4uaCIKKyNpbmNsdWRlICJub2Rlcy9leGVjbm9kZXMuaCIKKyNpbmNsdWRlICJyZXBsaWNh dGlvbi9sb2dpY2FsLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgorI2lu Y2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCisKKy8qCisgKiBXcml0ZSBsb2dpY2FsIGRlY29kaW5n IERETCBtZXNzYWdlIGludG8gWExvZy4KKyAqLworWExvZ1JlY1B0cgorTG9nTG9naWNhbERETE1l c3NhZ2UoY29uc3QgY2hhciAqcHJlZml4LCBPaWQgcmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5cGUg Y21kdHlwZSwKKwkJCQkJIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIHNpemVfdCBzaXplKQoreworCXhs X2xvZ2ljYWxfZGRsX21lc3NhZ2UgeGxyZWM7CisKKwkvKgorCSAqIEVuc3VyZSB3ZSBoYXZlIGEg dmFsaWQgdHJhbnNhY3Rpb24gaWQuCisJICovCisJQXNzZXJ0KElzVHJhbnNhY3Rpb25TdGF0ZSgp KTsKKwlHZXRDdXJyZW50VHJhbnNhY3Rpb25JZCgpOworCisJeGxyZWMuZGJJZCA9IE15RGF0YWJh c2VJZDsKKwkvKiB0cmFpbGluZyB6ZXJvIGlzIGNyaXRpY2FsOyBzZWUgbG9naWNhbGRkbG1zZ19k ZXNjICovCisJeGxyZWMucHJlZml4X3NpemUgPSBzdHJsZW4ocHJlZml4KSArIDE7CisJeGxyZWMu bWVzc2FnZV9zaXplID0gc2l6ZTsKKwl4bHJlYy5yZWxpZCA9IHJlbGlkOworCXhscmVjLmNtZHR5 cGUgPSBjbWR0eXBlOworCisJWExvZ0JlZ2luSW5zZXJ0KCk7CisJWExvZ1JlZ2lzdGVyRGF0YSgo Y2hhciAqKSAmeGxyZWMsIFNpemVPZkxvZ2ljYWxERExNZXNzYWdlKTsKKwlYTG9nUmVnaXN0ZXJE YXRhKHVuY29uc3RpZnkoY2hhciAqLCBwcmVmaXgpLCB4bHJlYy5wcmVmaXhfc2l6ZSk7CisJWExv Z1JlZ2lzdGVyRGF0YSh1bmNvbnN0aWZ5KGNoYXIgKiwgbWVzc2FnZSksIHNpemUpOworCisJLyog YWxsb3cgb3JpZ2luIGZpbHRlcmluZyAqLworCVhMb2dTZXRSZWNvcmRGbGFncyhYTE9HX0lOQ0xV REVfT1JJR0lOKTsKKworCXJldHVybiBYTG9nSW5zZXJ0KFJNX0xPR0lDQUxERExNU0dfSUQsIFhM T0dfTE9HSUNBTF9ERExfTUVTU0FHRSk7Cit9CisKKy8qCisgKiBSZWRvIGlzIGJhc2ljYWxseSBq dXN0IG5vb3AgZm9yIGxvZ2ljYWwgZGVjb2RpbmcgZGRsIG1lc3NhZ2VzLgorICovCit2b2lkCits b2dpY2FsZGRsbXNnX3JlZG8oWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCit7CisJdWludDgJCWlu Zm8gPSBYTG9nUmVjR2V0SW5mbyhyZWNvcmQpICYgflhMUl9JTkZPX01BU0s7CisKKwlpZiAoaW5m byAhPSBYTE9HX0xPR0lDQUxfRERMX01FU1NBR0UpCisJCWVsb2coUEFOSUMsICJsb2dpY2FsZGRs bXNnX3JlZG86IHVua25vd24gb3AgY29kZSAldSIsIGluZm8pOworCisJLyogVGhpcyBpcyBvbmx5 IGludGVyZXN0aW5nIGZvciBsb2dpY2FsIGRlY29kaW5nLCBzZWUgZGVjb2RlLmMuICovCit9CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RlY29kZS5jIGIvc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZWNvZGUuYwppbmRleCAyY2MwYWM5ZWIwLi4x ZjJjNzUxNzU5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2Rl Y29kZS5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2RlLmMKQEAg LTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJhY2Nlc3MveGxvZ3V0aWxzLmgiCiAjaW5jbHVkZSAi Y2F0YWxvZy9wZ19jb250cm9sLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vZGVjb2RlLmgiCisj aW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9u L2xvZ2ljYWwuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9tZXNzYWdlLmgiCiAjaW5jbHVkZSAi cmVwbGljYXRpb24vb3JpZ2luLmgiCkBAIC02MDMsNiArNjA0LDQ2IEBAIGxvZ2ljYWxtc2dfZGVj b2RlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVmKQog CQkJCQkJCSAgbWVzc2FnZS0+bWVzc2FnZSArIG1lc3NhZ2UtPnByZWZpeF9zaXplKTsKIH0KIAor LyoKKyAqIEhhbmRsZSBybWdyIExPR0lDQUxERExNU0dfSUQgcmVjb3JkcyBmb3IgRGVjb2RlUmVj b3JkSW50b1Jlb3JkZXJCdWZmZXIoKS4KKyAqLwordm9pZAorbG9naWNhbGRkbG1zZ19kZWNvZGUo TG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYpCit7CisJ U25hcEJ1aWxkICAqYnVpbGRlciA9IGN0eC0+c25hcHNob3RfYnVpbGRlcjsKKwlYTG9nUmVhZGVy U3RhdGUgKnIgPSBidWYtPnJlY29yZDsKKwlUcmFuc2FjdGlvbklkIHhpZCA9IFhMb2dSZWNHZXRY aWQocik7CisJdWludDgJCWluZm8gPSBYTG9nUmVjR2V0SW5mbyhyKSAmIH5YTFJfSU5GT19NQVNL OworCVJlcE9yaWdpbklkIG9yaWdpbl9pZCA9IFhMb2dSZWNHZXRPcmlnaW4ocik7CisJeGxfbG9n aWNhbF9kZGxfbWVzc2FnZSAqbWVzc2FnZTsKKworCWlmIChpbmZvICE9IFhMT0dfTE9HSUNBTF9E RExfTUVTU0FHRSkKKwkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgUk1fTE9HSUNBTERETE1TR19J RCByZWNvcmQgdHlwZTogJXUiLCBpbmZvKTsKKworCVJlb3JkZXJCdWZmZXJQcm9jZXNzWGlkKGN0 eC0+cmVvcmRlciwgWExvZ1JlY0dldFhpZChyKSwgYnVmLT5vcmlncHRyKTsKKworCS8qCisJICog SWYgd2UgZG9uJ3QgaGF2ZSBzbmFwc2hvdCBvciB3ZSBhcmUganVzdCBmYXN0LWZvcndhcmRpbmcs IHRoZXJlIGlzIG5vCisJICogcG9pbnQgaW4gZGVjb2RpbmcgZGRsIG1lc3NhZ2VzLgorCSAqLwor CWlmIChTbmFwQnVpbGRDdXJyZW50U3RhdGUoYnVpbGRlcikgPCBTTkFQQlVJTERfRlVMTF9TTkFQ U0hPVCB8fAorCQljdHgtPmZhc3RfZm9yd2FyZCkKKwkJcmV0dXJuOworCisJbWVzc2FnZSA9ICh4 bF9sb2dpY2FsX2RkbF9tZXNzYWdlICopIFhMb2dSZWNHZXREYXRhKHIpOworCisJaWYgKG1lc3Nh Z2UtPmRiSWQgIT0gY3R4LT5zbG90LT5kYXRhLmRhdGFiYXNlIHx8CisJCUZpbHRlckJ5T3JpZ2lu KGN0eCwgb3JpZ2luX2lkKSkKKwkJcmV0dXJuOworCisJaWYgKFNuYXBCdWlsZFByb2Nlc3NDaGFu Z2UoYnVpbGRlciwgeGlkLCBidWYtPm9yaWdwdHIpKQorCQlSZW9yZGVyQnVmZmVyUXVldWVERExN ZXNzYWdlKGN0eC0+cmVvcmRlciwgeGlkLCBidWYtPmVuZHB0ciwKKwkJCQkJCQkJCSBtZXNzYWdl LT5tZXNzYWdlLCAvKiBmaXJzdCBwYXJ0IG9mIG1lc3NhZ2UgaXMgcHJlZml4ICovCisJCQkJCQkJ CQkgbWVzc2FnZS0+bWVzc2FnZV9zaXplLAorCQkJCQkJCQkJIG1lc3NhZ2UtPm1lc3NhZ2UgKyBt ZXNzYWdlLT5wcmVmaXhfc2l6ZSwKKwkJCQkJCQkJCSBtZXNzYWdlLT5yZWxpZCwgbWVzc2FnZS0+ Y21kdHlwZSk7Cit9CisKIC8qCiAgKiBDb25zb2xpZGF0ZWQgY29tbWl0IHJlY29yZCBoYW5kbGlu ZyBiZXR3ZWVuIHRoZSBkaWZmZXJlbnQgZm9ybSBvZiBjb21taXQKICAqIHJlY29yZHMuCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xvZ2ljYWwuYyBiL3NyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbC5jCmluZGV4IDYyNWE3ZjQyNzMuLjk4 OTY5YzdhZWMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9n aWNhbC5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbC5jCkBA IC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiZm1nci5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5o IgogI2luY2x1ZGUgInBnc3RhdC5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL2RkbG1lc3NhZ2Uu aCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZWNvZGUuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlv bi9sb2dpY2FsLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vb3JpZ2luLmgiCkBAIC03Myw2ICs3 NCwxMCBAQCBzdGF0aWMgdm9pZCB0cnVuY2F0ZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNh Y2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiBzdGF0aWMgdm9pZCBtZXNzYWdlX2NiX3dyYXBw ZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCQkJCQkg ICBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLCBib29sIHRyYW5zYWN0aW9uYWwsCiAJCQkJCQkJICAg Y29uc3QgY2hhciAqcHJlZml4LCBTaXplIG1lc3NhZ2Vfc2l6ZSwgY29uc3QgY2hhciAqbWVzc2Fn ZSk7CitzdGF0aWMgdm9pZCBkZGxtZXNzYWdlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2Fj aGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJCQkJICBYTG9nUmVjUHRyIG1lc3NhZ2Vf bHNuLCBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJCQkJCSAgT2lkIHJlbGlkLCBEZXBhcnNlZENv bW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJCSAgU2l6ZSBtZXNzYWdlX3NpemUsIGNvbnN0IGNo YXIgKm1lc3NhZ2UpOwogCiAvKiBzdHJlYW1pbmcgY2FsbGJhY2tzICovCiBzdGF0aWMgdm9pZCBz dHJlYW1fc3RhcnRfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZl clRYTiAqdHhuLApAQCAtOTAsNiArOTUsMTEgQEAgc3RhdGljIHZvaWQgc3RyZWFtX2NoYW5nZV9j Yl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4KIHN0 YXRpYyB2b2lkIHN0cmVhbV9tZXNzYWdlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUs IFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCQkJCQkJCSAgWExvZ1JlY1B0ciBtZXNzYWdlX2xz biwgYm9vbCB0cmFuc2FjdGlvbmFsLAogCQkJCQkJCQkJICBjb25zdCBjaGFyICpwcmVmaXgsIFNp emUgbWVzc2FnZV9zaXplLCBjb25zdCBjaGFyICptZXNzYWdlKTsKK3N0YXRpYyB2b2lkIHN0cmVh bV9kZGxtZXNzYWdlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZm ZXJUWE4gKnR4biwKKwkJCQkJCQkJCQkgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJCQkJ CQkgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCQkJCQkJCSBPaWQgcmVsaWQsIERlcGFyc2VkQ29t bWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJCQkJCQkgU2l6ZSBtZXNzYWdlX3NpemUsIGNvbnN0IGNo YXIgKm1lc3NhZ2UpOwogc3RhdGljIHZvaWQgc3RyZWFtX3RydW5jYXRlX2NiX3dyYXBwZXIoUmVv cmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCQkJCQkJCSAgIGlu dCBucmVsYXRpb25zLCBSZWxhdGlvbiByZWxhdGlvbnNbXSwgUmVvcmRlckJ1ZmZlckNoYW5nZSAq Y2hhbmdlKTsKIApAQCAtMjE4LDYgKzIyOCw3IEBAIFN0YXJ0dXBEZWNvZGluZ0NvbnRleHQoTGlz dCAqb3V0cHV0X3BsdWdpbl9vcHRpb25zLAogCWN0eC0+cmVvcmRlci0+YXBwbHlfdHJ1bmNhdGUg PSB0cnVuY2F0ZV9jYl93cmFwcGVyOwogCWN0eC0+cmVvcmRlci0+Y29tbWl0ID0gY29tbWl0X2Ni X3dyYXBwZXI7CiAJY3R4LT5yZW9yZGVyLT5tZXNzYWdlID0gbWVzc2FnZV9jYl93cmFwcGVyOwor CWN0eC0+cmVvcmRlci0+ZGRsbWVzc2FnZSA9IGRkbG1lc3NhZ2VfY2Jfd3JhcHBlcjsKIAogCS8q CiAJICogVG8gc3VwcG9ydCBzdHJlYW1pbmcsIHdlIHJlcXVpcmUgc3RhcnQvc3RvcC9hYm9ydC9j b21taXQvY2hhbmdlCkBAIC0yMzQsNiArMjQ1LDcgQEAgU3RhcnR1cERlY29kaW5nQ29udGV4dChM aXN0ICpvdXRwdXRfcGx1Z2luX29wdGlvbnMsCiAJCShjdHgtPmNhbGxiYWNrcy5zdHJlYW1fY29t bWl0X2NiICE9IE5VTEwpIHx8CiAJCShjdHgtPmNhbGxiYWNrcy5zdHJlYW1fY2hhbmdlX2NiICE9 IE5VTEwpIHx8CiAJCShjdHgtPmNhbGxiYWNrcy5zdHJlYW1fbWVzc2FnZV9jYiAhPSBOVUxMKSB8 fAorCQkoY3R4LT5jYWxsYmFja3Muc3RyZWFtX2RkbG1lc3NhZ2VfY2IgIT0gTlVMTCkgfHwKIAkJ KGN0eC0+Y2FsbGJhY2tzLnN0cmVhbV90cnVuY2F0ZV9jYiAhPSBOVUxMKTsKIAogCS8qCkBAIC0y NTEsNiArMjYzLDcgQEAgU3RhcnR1cERlY29kaW5nQ29udGV4dChMaXN0ICpvdXRwdXRfcGx1Z2lu X29wdGlvbnMsCiAJY3R4LT5yZW9yZGVyLT5zdHJlYW1fY29tbWl0ID0gc3RyZWFtX2NvbW1pdF9j Yl93cmFwcGVyOwogCWN0eC0+cmVvcmRlci0+c3RyZWFtX2NoYW5nZSA9IHN0cmVhbV9jaGFuZ2Vf Y2Jfd3JhcHBlcjsKIAljdHgtPnJlb3JkZXItPnN0cmVhbV9tZXNzYWdlID0gc3RyZWFtX21lc3Nh Z2VfY2Jfd3JhcHBlcjsKKwljdHgtPnJlb3JkZXItPnN0cmVhbV9kZGxtZXNzYWdlID0gc3RyZWFt X2RkbG1lc3NhZ2VfY2Jfd3JhcHBlcjsKIAljdHgtPnJlb3JkZXItPnN0cmVhbV90cnVuY2F0ZSA9 IHN0cmVhbV90cnVuY2F0ZV9jYl93cmFwcGVyOwogCiAKQEAgLTEyMjAsNiArMTIzMyw0NCBAQCBt ZXNzYWdlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4g KnR4biwKIAllcnJvcl9jb250ZXh0X3N0YWNrID0gZXJyY2FsbGJhY2sucHJldmlvdXM7CiB9CiAK K3N0YXRpYyB2b2lkCitkZGxtZXNzYWdlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUs IFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJICBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAor CQkJCQkgIGNvbnN0IGNoYXIgKnByZWZpeCwgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBl IGNtZHR5cGUsCisJCQkJCSAgU2l6ZSBtZXNzYWdlX3NpemUsCisJCQkJCSAgY29uc3QgY2hhciAq bWVzc2FnZSkKK3sKKwlMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHggPSBjYWNoZS0+cHJpdmF0 ZV9kYXRhOworCUxvZ2ljYWxFcnJvckNhbGxiYWNrU3RhdGUgc3RhdGU7CisJRXJyb3JDb250ZXh0 Q2FsbGJhY2sgZXJyY2FsbGJhY2s7CisKKwlBc3NlcnQoIWN0eC0+ZmFzdF9mb3J3YXJkKTsKKwor CWlmIChjdHgtPmNhbGxiYWNrcy5kZGxtZXNzYWdlX2NiID09IE5VTEwpCisJCXJldHVybjsKKwor CS8qIFB1c2ggY2FsbGJhY2sgKyBpbmZvIG9uIHRoZSBlcnJvciBjb250ZXh0IHN0YWNrICovCisJ c3RhdGUuY3R4ID0gY3R4OworCXN0YXRlLmNhbGxiYWNrX25hbWUgPSAiZGRsbWVzc2FnZSI7CisJ c3RhdGUucmVwb3J0X2xvY2F0aW9uID0gbWVzc2FnZV9sc247CisJZXJyY2FsbGJhY2suY2FsbGJh Y2sgPSBvdXRwdXRfcGx1Z2luX2Vycm9yX2NhbGxiYWNrOworCWVycmNhbGxiYWNrLmFyZyA9ICh2 b2lkICopICZzdGF0ZTsKKwllcnJjYWxsYmFjay5wcmV2aW91cyA9IGVycm9yX2NvbnRleHRfc3Rh Y2s7CisJZXJyb3JfY29udGV4dF9zdGFjayA9ICZlcnJjYWxsYmFjazsKKworCS8qIHNldCBvdXRw dXQgc3RhdGUgKi8KKwljdHgtPmFjY2VwdF93cml0ZXMgPSB0cnVlOworCWN0eC0+d3JpdGVfeGlk ID0gdHhuICE9IE5VTEwgPyB0eG4tPnhpZCA6IEludmFsaWRUcmFuc2FjdGlvbklkOworCWN0eC0+ d3JpdGVfbG9jYXRpb24gPSBtZXNzYWdlX2xzbjsKKworCS8qIGRvIHRoZSBhY3R1YWwgd29yazog Y2FsbCBjYWxsYmFjayAqLworCWN0eC0+Y2FsbGJhY2tzLmRkbG1lc3NhZ2VfY2IoY3R4LCB0eG4s IG1lc3NhZ2VfbHNuLCBwcmVmaXgsIHJlbGlkLCBjbWR0eXBlLAorCQkJCQkJCQkgbWVzc2FnZV9z aXplLCBtZXNzYWdlKTsKKworCS8qIFBvcCB0aGUgZXJyb3IgY29udGV4dCBzdGFjayAqLworCWVy cm9yX2NvbnRleHRfc3RhY2sgPSBlcnJjYWxsYmFjay5wcmV2aW91czsKK30KKwogc3RhdGljIHZv aWQKIHN0cmVhbV9zdGFydF9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVy QnVmZmVyVFhOICp0eG4sCiAJCQkJCQlYTG9nUmVjUHRyIGZpcnN0X2xzbikKQEAgLTE1MzUsNiAr MTU4Niw0OCBAQCBzdHJlYW1fbWVzc2FnZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hl LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJZXJyb3JfY29udGV4dF9zdGFjayA9IGVycmNhbGxi YWNrLnByZXZpb3VzOwogfQogCitzdGF0aWMgdm9pZAorc3RyZWFtX2RkbG1lc3NhZ2VfY2Jfd3Jh cHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQkJ CSBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAorCQkJCQkJCSBjb25zdCBjaGFyICpwcmVmaXgsIE9p ZCByZWxpZCwgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQkJCSBTaXplIG1lc3Nh Z2Vfc2l6ZSwKKwkJCQkJCQkgY29uc3QgY2hhciAqbWVzc2FnZSkKK3sKKwlMb2dpY2FsRGVjb2Rp bmdDb250ZXh0ICpjdHggPSBjYWNoZS0+cHJpdmF0ZV9kYXRhOworCUxvZ2ljYWxFcnJvckNhbGxi YWNrU3RhdGUgc3RhdGU7CisJRXJyb3JDb250ZXh0Q2FsbGJhY2sgZXJyY2FsbGJhY2s7CisKKwlB c3NlcnQoIWN0eC0+ZmFzdF9mb3J3YXJkKTsKKworCS8qIFdlJ3JlIG9ubHkgc3VwcG9zZWQgdG8g Y2FsbCB0aGlzIHdoZW4gc3RyZWFtaW5nIGlzIHN1cHBvcnRlZC4gKi8KKwlBc3NlcnQoY3R4LT5z dHJlYW1pbmcpOworCisJLyogdGhpcyBjYWxsYmFjayBpcyBvcHRpb25hbCAqLworCWlmIChjdHgt PmNhbGxiYWNrcy5zdHJlYW1fZGRsbWVzc2FnZV9jYiA9PSBOVUxMKQorCQlyZXR1cm47CisKKwkv KiBQdXNoIGNhbGxiYWNrICsgaW5mbyBvbiB0aGUgZXJyb3IgY29udGV4dCBzdGFjayAqLworCXN0 YXRlLmN0eCA9IGN0eDsKKwlzdGF0ZS5jYWxsYmFja19uYW1lID0gInN0cmVhbV9kZGxtZXNzYWdl IjsKKwlzdGF0ZS5yZXBvcnRfbG9jYXRpb24gPSBtZXNzYWdlX2xzbjsKKwllcnJjYWxsYmFjay5j YWxsYmFjayA9IG91dHB1dF9wbHVnaW5fZXJyb3JfY2FsbGJhY2s7CisJZXJyY2FsbGJhY2suYXJn ID0gKHZvaWQgKikgJnN0YXRlOworCWVycmNhbGxiYWNrLnByZXZpb3VzID0gZXJyb3JfY29udGV4 dF9zdGFjazsKKwllcnJvcl9jb250ZXh0X3N0YWNrID0gJmVycmNhbGxiYWNrOworCisJLyogc2V0 IG91dHB1dCBzdGF0ZSAqLworCWN0eC0+YWNjZXB0X3dyaXRlcyA9IHRydWU7CisJY3R4LT53cml0 ZV94aWQgPSB0eG4gIT0gTlVMTCA/IHR4bi0+eGlkIDogSW52YWxpZFRyYW5zYWN0aW9uSWQ7CisJ Y3R4LT53cml0ZV9sb2NhdGlvbiA9IG1lc3NhZ2VfbHNuOworCisJLyogZG8gdGhlIGFjdHVhbCB3 b3JrOiBjYWxsIGNhbGxiYWNrICovCisJY3R4LT5jYWxsYmFja3Muc3RyZWFtX2RkbG1lc3NhZ2Vf Y2IoY3R4LCB0eG4sIG1lc3NhZ2VfbHNuLCBwcmVmaXgsIHJlbGlkLAorCQkJCQkJCQkJCWNtZHR5 cGUsIG1lc3NhZ2Vfc2l6ZSwgbWVzc2FnZSk7CisKKwkvKiBQb3AgdGhlIGVycm9yIGNvbnRleHQg c3RhY2sgKi8KKwllcnJvcl9jb250ZXh0X3N0YWNrID0gZXJyY2FsbGJhY2sucHJldmlvdXM7Cit9 CisKIHN0YXRpYyB2b2lkCiBzdHJlYW1fdHJ1bmNhdGVfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVy ICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCQkJICAgaW50IG5yZWxhdGlvbnMs IFJlbGF0aW9uIHJlbGF0aW9uc1tdLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC9wcm90by5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90 by5jCmluZGV4IGZmODUxM2UyZDIuLmYzNTQwNjI3NWIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL3Byb3RvLmMKQEAgLTY2Miw2ICs2NjIsNTIgQEAgbG9naWNhbHJlcF93cml0ZV9t ZXNzYWdlKFN0cmluZ0luZm8gb3V0LCBUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24s CiAJcHFfc2VuZGJ5dGVzKG91dCwgbWVzc2FnZSwgc3opOwogfQogCisvKgorICogUmVhZCBEREwg TUVTU0FHRSBmcm9tIHN0cmVhbQorICovCitjaGFyICoKK2xvZ2ljYWxyZXBfcmVhZF9kZGxtZXNz YWdlKFN0cmluZ0luZm8gaW4sIFhMb2dSZWNQdHIgKmxzbiwKKwkJCQkJCSAgIGNvbnN0IGNoYXIg KipwcmVmaXgsCisJCQkJCQkgICBTaXplICpzeikKK3sKKwl1aW50OCBmbGFnczsKKwljaGFyICpt c2c7CisKKwkvL1RPRE8gZG91YmxlIGNoZWNrIHdoZW4gZG8gd2UgbmVlZCB0byBnZXQgVHJhbnNh Y3Rpb25JZC4KKworCWZsYWdzID0gcHFfZ2V0bXNnaW50KGluLCAxKTsKKwlpZiAoZmxhZ3MgIT0g MCkKKwkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBmbGFncyAldSBpbiBkZGwgbWVzc2FnZSIs IGZsYWdzKTsKKwkqbHNuID0gcHFfZ2V0bXNnaW50NjQoaW4pOworCSpwcmVmaXggPSBwcV9nZXRt c2dzdHJpbmcoaW4pOworCSpzeiA9IHBxX2dldG1zZ2ludChpbiwgNCk7CisJbXNnID0gKGNoYXIg KikgcHFfZ2V0bXNnYnl0ZXMoaW4sICpzeik7CisKKwlyZXR1cm4gbXNnOworfQorCisvKgorICog V3JpdGUgRERMIE1FU1NBR0UgdG8gc3RyZWFtCisgKi8KK3ZvaWQKK2xvZ2ljYWxyZXBfd3JpdGVf ZGRsbWVzc2FnZShTdHJpbmdJbmZvIG91dCwgVHJhbnNhY3Rpb25JZCB4aWQsIFhMb2dSZWNQdHIg bHNuLAorCQkJCQkJCWNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBzeiwgY29uc3QgY2hhciAqbWVz c2FnZSkKK3sKKwl1aW50OAkJZmxhZ3MgPSAwOworCisJcHFfc2VuZGJ5dGUob3V0LCBMT0dJQ0FM X1JFUF9NU0dfRERMTUVTU0FHRSk7CisKKwkvKiB0cmFuc2FjdGlvbiBJRCAoaWYgbm90IHZhbGlk LCB3ZSdyZSBub3Qgc3RyZWFtaW5nKSAqLworCWlmIChUcmFuc2FjdGlvbklkSXNWYWxpZCh4aWQp KQorCQlwcV9zZW5kaW50MzIob3V0LCB4aWQpOworCisJcHFfc2VuZGludDgob3V0LCBmbGFncyk7 CisJcHFfc2VuZGludDY0KG91dCwgbHNuKTsKKwlwcV9zZW5kc3RyaW5nKG91dCwgcHJlZml4KTsK KwlwcV9zZW5kaW50MzIob3V0LCBzeik7CisJcHFfc2VuZGJ5dGVzKG91dCwgbWVzc2FnZSwgc3op OworfQorCiAvKgogICogV3JpdGUgcmVsYXRpb24gZGVzY3JpcHRpb24gdG8gdGhlIG91dHB1dCBz dHJlYW0uCiAgKi8KQEAgLTEyMTgsNiArMTI2NCw4IEBAIGxvZ2ljYWxyZXBfbWVzc2FnZV90eXBl KExvZ2ljYWxSZXBNc2dUeXBlIGFjdGlvbikKIAkJCXJldHVybiAiVFlQRSI7CiAJCWNhc2UgTE9H SUNBTF9SRVBfTVNHX01FU1NBR0U6CiAJCQlyZXR1cm4gIk1FU1NBR0UiOworCQljYXNlIExPR0lD QUxfUkVQX01TR19ERExNRVNTQUdFOgorCQkJcmV0dXJuICJEREwiOwogCQljYXNlIExPR0lDQUxf UkVQX01TR19CRUdJTl9QUkVQQVJFOgogCQkJcmV0dXJuICJCRUdJTiBQUkVQQVJFIjsKIAkJY2Fz ZSBMT0dJQ0FMX1JFUF9NU0dfUFJFUEFSRToKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bG9naWNhbC9yZW9yZGVyYnVmZmVyLmMKaW5kZXggNmRmZjk5MTVhNS4uM2MzNzY5MGMzMiAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVyLmMK KysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVyLmMKQEAg LTk0LDYgKzk0LDcgQEAKICNpbmNsdWRlICJsaWIvYmluYXJ5aGVhcC5oIgogI2luY2x1ZGUgIm1p c2NhZG1pbi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL2Rk bG1lc3NhZ2UuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2FsLmgiCiAjaW5jbHVkZSAi cmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL3Nsb3Qu aCIKQEAgLTUxNSw2ICs1MTYsMTQgQEAgUmVvcmRlckJ1ZmZlclJldHVybkNoYW5nZShSZW9yZGVy QnVmZmVyICpyYiwgUmVvcmRlckJ1ZmZlckNoYW5nZSAqY2hhbmdlLAogCQkJCXBmcmVlKGNoYW5n ZS0+ZGF0YS5tc2cubWVzc2FnZSk7CiAJCQljaGFuZ2UtPmRhdGEubXNnLm1lc3NhZ2UgPSBOVUxM OwogCQkJYnJlYWs7CisJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0RETE1FU1NBR0U6CisJ CQlpZiAoY2hhbmdlLT5kYXRhLmRkbG1zZy5wcmVmaXggIT0gTlVMTCkKKwkJCQlwZnJlZShjaGFu Z2UtPmRhdGEuZGRsbXNnLnByZWZpeCk7CisJCQljaGFuZ2UtPmRhdGEuZGRsbXNnLnByZWZpeCA9 IE5VTEw7CisJCQlpZiAoY2hhbmdlLT5kYXRhLmRkbG1zZy5tZXNzYWdlICE9IE5VTEwpCisJCQkJ cGZyZWUoY2hhbmdlLT5kYXRhLmRkbG1zZy5tZXNzYWdlKTsKKwkJCWNoYW5nZS0+ZGF0YS5kZGxt c2cubWVzc2FnZSA9IE5VTEw7CisJCQlicmVhazsKIAkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFO R0VfSU5WQUxJREFUSU9OOgogCQkJaWYgKGNoYW5nZS0+ZGF0YS5pbnZhbC5pbnZhbGlkYXRpb25z KQogCQkJCXBmcmVlKGNoYW5nZS0+ZGF0YS5pbnZhbC5pbnZhbGlkYXRpb25zKTsKQEAgLTg2OSw2 ICs4NzgsMzYgQEAgUmVvcmRlckJ1ZmZlclF1ZXVlTWVzc2FnZShSZW9yZGVyQnVmZmVyICpyYiwg VHJhbnNhY3Rpb25JZCB4aWQsCiAJfQogfQogCisvKgorICogQSB0cmFuc2FjdGlvbmFsIERETCBt ZXNzYWdlIGlzIHF1ZXVlZCB0byBiZSBwcm9jZXNzZWQgdXBvbiBjb21taXQuCisgKi8KK3ZvaWQK K1Jlb3JkZXJCdWZmZXJRdWV1ZURETE1lc3NhZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0 aW9uSWQgeGlkLAorCQkJCQkJCSBYTG9nUmVjUHRyIGxzbiwgY29uc3QgY2hhciAqcHJlZml4LAor CQkJCQkJCSBTaXplIG1lc3NhZ2Vfc2l6ZSwgY29uc3QgY2hhciAqbWVzc2FnZSwKKwkJCQkJCQkg T2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUpCit7CisJTWVtb3J5Q29udGV4 dCBvbGRjb250ZXh0OworCVJlb3JkZXJCdWZmZXJDaGFuZ2UgKmNoYW5nZTsKKworCUFzc2VydCh4 aWQgIT0gSW52YWxpZFRyYW5zYWN0aW9uSWQpOworCisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRl eHRTd2l0Y2hUbyhyYi0+Y29udGV4dCk7CisKKwljaGFuZ2UgPSBSZW9yZGVyQnVmZmVyR2V0Q2hh bmdlKHJiKTsKKwljaGFuZ2UtPmFjdGlvbiA9IFJFT1JERVJfQlVGRkVSX0NIQU5HRV9ERExNRVNT QUdFOworCWNoYW5nZS0+ZGF0YS5kZGxtc2cucHJlZml4ID0gcHN0cmR1cChwcmVmaXgpOworCWNo YW5nZS0+ZGF0YS5kZGxtc2cucmVsaWQgPSByZWxpZDsKKwljaGFuZ2UtPmRhdGEuZGRsbXNnLmNt ZHR5cGUgPSBjbWR0eXBlOworCWNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZV9zaXplID0gbWVz c2FnZV9zaXplOworCWNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZSA9IHBhbGxvYyhtZXNzYWdl X3NpemUpOworCW1lbWNweShjaGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2UsIG1lc3NhZ2UsIG1l c3NhZ2Vfc2l6ZSk7CisKKwlSZW9yZGVyQnVmZmVyUXVldWVDaGFuZ2UocmIsIHhpZCwgbHNuLCBj aGFuZ2UsIGZhbHNlKTsKKworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKK30K KwogLyoKICAqIEFzc2VydFRYTkxzbk9yZGVyCiAgKgkJVmVyaWZ5IExTTiBvcmRlcmluZyBvZiB0 cmFuc2FjdGlvbiBsaXN0cyBpbiB0aGUgcmVvcmRlcmJ1ZmZlcgpAQCAtMTk2OCw2ICsyMDA3LDI5 IEBAIFJlb3JkZXJCdWZmZXJBcHBseU1lc3NhZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFJlb3JkZXJC dWZmZXJUWE4gKnR4biwKIAkJCQkJY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlKTsKIH0KIAorLyoK KyAqIEhlbHBlciBmdW5jdGlvbiBmb3IgUmVvcmRlckJ1ZmZlclByb2Nlc3NUWE4gZm9yIGFwcGx5 aW5nIHRoZSBEREwgbWVzc2FnZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCitSZW9yZGVyQnVm ZmVyQXBwbHlERExNZXNzYWdlKFJlb3JkZXJCdWZmZXIgKnJiLCBSZW9yZGVyQnVmZmVyVFhOICp0 eG4sCisJCQkJCQkJIFJlb3JkZXJCdWZmZXJDaGFuZ2UgKmNoYW5nZSwgYm9vbCBzdHJlYW1pbmcp Cit7CisJaWYgKHN0cmVhbWluZykKKwkJcmItPnN0cmVhbV9kZGxtZXNzYWdlKHJiLCB0eG4sIGNo YW5nZS0+bHNuLAorCQkJCQkJCSAgY2hhbmdlLT5kYXRhLmRkbG1zZy5wcmVmaXgsCisJCQkJCQkJ ICBjaGFuZ2UtPmRhdGEuZGRsbXNnLnJlbGlkLAorCQkJCQkJCSAgY2hhbmdlLT5kYXRhLmRkbG1z Zy5jbWR0eXBlLAorCQkJCQkJCSAgY2hhbmdlLT5kYXRhLmRkbG1zZy5tZXNzYWdlX3NpemUsCisJ CQkJCQkJICBjaGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2UpOworCWVsc2UKKwkJcmItPmRkbG1l c3NhZ2UocmIsIHR4biwgY2hhbmdlLT5sc24sCisJCQkJCSAgIGNoYW5nZS0+ZGF0YS5kZGxtc2cu cHJlZml4LAorCQkJCQkgICBjaGFuZ2UtPmRhdGEuZGRsbXNnLnJlbGlkLAorCQkJCQkgICBjaGFu Z2UtPmRhdGEuZGRsbXNnLmNtZHR5cGUsCisJCQkJCSAgIGNoYW5nZS0+ZGF0YS5kZGxtc2cubWVz c2FnZV9zaXplLAorCQkJCQkgICBjaGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2UpOworfQorCiAv KgogICogRnVuY3Rpb24gdG8gc3RvcmUgdGhlIGNvbW1hbmQgaWQgYW5kIHNuYXBzaG90IGF0IHRo ZSBlbmQgb2YgdGhlIGN1cnJlbnQKICAqIHN0cmVhbSBzbyB0aGF0IHdlIGNhbiByZXVzZSB0aGUg c2FtZSB3aGlsZSBzZW5kaW5nIHRoZSBuZXh0IHN0cmVhbS4KQEAgLTIzNDgsNiArMjQxMCwxMCBA QCBSZW9yZGVyQnVmZmVyUHJvY2Vzc1RYTihSZW9yZGVyQnVmZmVyICpyYiwgUmVvcmRlckJ1ZmZl clRYTiAqdHhuLAogCQkJCQlSZW9yZGVyQnVmZmVyQXBwbHlNZXNzYWdlKHJiLCB0eG4sIGNoYW5n ZSwgc3RyZWFtaW5nKTsKIAkJCQkJYnJlYWs7CiAKKwkJCQljYXNlIFJFT1JERVJfQlVGRkVSX0NI QU5HRV9ERExNRVNTQUdFOgorCQkJCQlSZW9yZGVyQnVmZmVyQXBwbHlERExNZXNzYWdlKHJiLCB0 eG4sIGNoYW5nZSwgc3RyZWFtaW5nKTsKKwkJCQkJYnJlYWs7CisKIAkJCQljYXNlIFJFT1JERVJf QlVGRkVSX0NIQU5HRV9JTlZBTElEQVRJT046CiAJCQkJCS8qIEV4ZWN1dGUgdGhlIGludmFsaWRh dGlvbiBtZXNzYWdlcyBsb2NhbGx5ICovCiAJCQkJCVJlb3JkZXJCdWZmZXJFeGVjdXRlSW52YWxp ZGF0aW9ucyhjaGFuZ2UtPmRhdGEuaW52YWwubmludmFsaWRhdGlvbnMsCkBAIC0zNzcxLDYgKzM4 MzcsNDAgQEAgUmVvcmRlckJ1ZmZlclNlcmlhbGl6ZUNoYW5nZShSZW9yZGVyQnVmZmVyICpyYiwg UmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCQkgICBjaGFuZ2UtPmRhdGEubXNnLm1lc3NhZ2Vf c2l6ZSk7CiAJCQkJZGF0YSArPSBjaGFuZ2UtPmRhdGEubXNnLm1lc3NhZ2Vfc2l6ZTsKIAorCQkJ CWJyZWFrOworCQkJfQorCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9ERExNRVNTQUdFOgor CQkJeworCQkJCWNoYXIJICAgKmRhdGE7CisJCQkJU2l6ZQkJcHJlZml4X3NpemUgPSBzdHJsZW4o Y2hhbmdlLT5kYXRhLmRkbG1zZy5wcmVmaXgpICsgMTsKKworCQkJCXN6ICs9IHByZWZpeF9zaXpl ICsgY2hhbmdlLT5kYXRhLmRkbG1zZy5tZXNzYWdlX3NpemUgKworCQkJCQlzaXplb2YoU2l6ZSkg KyBzaXplb2YoT2lkKSArIHNpemVvZihpbnQpICsgc2l6ZW9mKFNpemUpOworCQkJCVJlb3JkZXJC dWZmZXJTZXJpYWxpemVSZXNlcnZlKHJiLCBzeik7CisKKwkJCQlkYXRhID0gKChjaGFyICopIHJi LT5vdXRidWYpICsgc2l6ZW9mKFJlb3JkZXJCdWZmZXJEaXNrQ2hhbmdlKTsKKworCQkJCS8qIG1p Z2h0IGhhdmUgYmVlbiByZWFsbG9jYXRlZCBhYm92ZSAqLworCQkJCW9uZGlzayA9IChSZW9yZGVy QnVmZmVyRGlza0NoYW5nZSAqKSByYi0+b3V0YnVmOworCisJCQkJLyogd3JpdGUgdGhlIHByZWZp eCwgcmVsaWQgYW5kIGNtZHR5cGUgaW5jbHVkaW5nIHRoZSBzaXplICovCisJCQkJbWVtY3B5KGRh dGEsICZwcmVmaXhfc2l6ZSwgc2l6ZW9mKFNpemUpKTsKKwkJCQlkYXRhICs9IHNpemVvZihTaXpl KTsKKwkJCQltZW1jcHkoZGF0YSwgJmNoYW5nZS0+ZGF0YS5kZGxtc2cucmVsaWQsIHNpemVvZihP aWQpKTsKKwkJCQlkYXRhICs9IHNpemVvZihPaWQpOworCQkJCW1lbWNweShkYXRhLCAmY2hhbmdl LT5kYXRhLmRkbG1zZy5jbWR0eXBlLCBzaXplb2YoaW50KSk7CisJCQkJZGF0YSArPSBzaXplb2Yo aW50KTsKKwkJCQltZW1jcHkoZGF0YSwgY2hhbmdlLT5kYXRhLmRkbG1zZy5wcmVmaXgsCisJCQkJ CSAgIHByZWZpeF9zaXplKTsKKwkJCQlkYXRhICs9IHByZWZpeF9zaXplOworCisJCQkJLyogd3Jp dGUgdGhlIG1lc3NhZ2UgaW5jbHVkaW5nIHRoZSBzaXplICovCisJCQkJbWVtY3B5KGRhdGEsICZj aGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2Vfc2l6ZSwgc2l6ZW9mKFNpemUpKTsKKwkJCQlkYXRh ICs9IHNpemVvZihTaXplKTsKKwkJCQltZW1jcHkoZGF0YSwgY2hhbmdlLT5kYXRhLmRkbG1zZy5t ZXNzYWdlLAorCQkJCQkgICBjaGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2Vfc2l6ZSk7CisJCQkJ ZGF0YSArPSBjaGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2Vfc2l6ZTsKKwogCQkJCWJyZWFrOwog CQkJfQogCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlZBTElEQVRJT046CkBAIC00MDg1 LDYgKzQxODUsMTUgQEAgUmVvcmRlckJ1ZmZlckNoYW5nZVNpemUoUmVvcmRlckJ1ZmZlckNoYW5n ZSAqY2hhbmdlKQogCQkJCXN6ICs9IHByZWZpeF9zaXplICsgY2hhbmdlLT5kYXRhLm1zZy5tZXNz YWdlX3NpemUgKwogCQkJCQlzaXplb2YoU2l6ZSkgKyBzaXplb2YoU2l6ZSk7CiAKKwkJCQlicmVh azsKKwkJCX0KKwkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfRERMTUVTU0FHRToKKwkJCXsK KwkJCQlTaXplCQlwcmVmaXhfc2l6ZSA9IHN0cmxlbihjaGFuZ2UtPmRhdGEuZGRsbXNnLnByZWZp eCkgKyAxOworCisJCQkJc3ogKz0gcHJlZml4X3NpemUgKyBjaGFuZ2UtPmRhdGEuZGRsbXNnLm1l c3NhZ2Vfc2l6ZSArCisJCQkJCXNpemVvZihTaXplKSArIHNpemVvZihTaXplKSArIHNpemVvZihP aWQpICsgc2l6ZW9mKGludCk7CisKIAkJCQlicmVhazsKIAkJCX0KIAkJY2FzZSBSRU9SREVSX0JV RkZFUl9DSEFOR0VfSU5WQUxJREFUSU9OOgpAQCAtNDM2MCw2ICs0NDY5LDMzIEBAIFJlb3JkZXJC dWZmZXJSZXN0b3JlQ2hhbmdlKFJlb3JkZXJCdWZmZXIgKnJiLCBSZW9yZGVyQnVmZmVyVFhOICp0 eG4sCiAJCQkJCSAgIGNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZV9zaXplKTsKIAkJCQlkYXRhICs9 IGNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZV9zaXplOwogCisJCQkJYnJlYWs7CisJCQl9CisJCWNh c2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0RETE1FU1NBR0U6CisJCQl7CisJCQkJU2l6ZQkJcHJl Zml4X3NpemU7CisKKwkJCQkvKiByZWFkIHByZWZpeCAqLworCQkJCW1lbWNweSgmcHJlZml4X3Np emUsIGRhdGEsIHNpemVvZihTaXplKSk7CisJCQkJZGF0YSArPSBzaXplb2YoU2l6ZSk7CisJCQkJ bWVtY3B5KCZjaGFuZ2UtPmRhdGEuZGRsbXNnLnJlbGlkLCBkYXRhLCBzaXplb2YoT2lkKSk7CisJ CQkJZGF0YSArPSBzaXplb2YoT2lkKTsKKwkJCQltZW1jcHkoJmNoYW5nZS0+ZGF0YS5kZGxtc2cu Y21kdHlwZSwgZGF0YSwgc2l6ZW9mKGludCkpOworCQkJCWRhdGEgKz0gc2l6ZW9mKGludCk7CisJ CQkJY2hhbmdlLT5kYXRhLmRkbG1zZy5wcmVmaXggPSBNZW1vcnlDb250ZXh0QWxsb2MocmItPmNv bnRleHQsIHByZWZpeF9zaXplKTsKKwkJCQltZW1jcHkoY2hhbmdlLT5kYXRhLmRkbG1zZy5wcmVm aXgsIGRhdGEsIHByZWZpeF9zaXplKTsKKwkJCQlBc3NlcnQoY2hhbmdlLT5kYXRhLmRkbG1zZy5w cmVmaXhbcHJlZml4X3NpemUgLSAxXSA9PSAnXDAnKTsKKwkJCQlkYXRhICs9IHByZWZpeF9zaXpl OworCisJCQkJLyogcmVhZCB0aGUgbWVzc2FnZSAqLworCQkJCW1lbWNweSgmY2hhbmdlLT5kYXRh Lm1zZy5tZXNzYWdlX3NpemUsIGRhdGEsIHNpemVvZihTaXplKSk7CisJCQkJZGF0YSArPSBzaXpl b2YoU2l6ZSk7CisJCQkJY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlID0gTWVtb3J5Q29udGV4dEFs bG9jKHJiLT5jb250ZXh0LAorCQkJCQkJCQkJCQkJCQkJICBjaGFuZ2UtPmRhdGEubXNnLm1lc3Nh Z2Vfc2l6ZSk7CisJCQkJbWVtY3B5KGNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZSwgZGF0YSwKKwkJ CQkJICAgY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlX3NpemUpOworCQkJCWRhdGEgKz0gY2hhbmdl LT5kYXRhLm1zZy5tZXNzYWdlX3NpemU7CisKIAkJCQlicmVhazsKIAkJCX0KIAkJY2FzZSBSRU9S REVSX0JVRkZFUl9DSEFOR0VfSU5WQUxJREFUSU9OOgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xv Z2ljYWwvd29ya2VyLmMKaW5kZXggMjA3YTU4MDViYS4uMjFiODJmMzQ0ZiAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYworKysgYi9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jCkBAIC0xNTYsNiArMTU2LDcgQEAKICNpbmNs dWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJub2Rlcy9tYWtlZnVuY3MuaCIKICNpbmNsdWRl ICJvcHRpbWl6ZXIvb3B0aW1pemVyLmgiCisjaW5jbHVkZSAicGFyc2VyL2FuYWx5emUuaCIKICNp bmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL2Jnd29ya2VyLmgiCiAjaW5j bHVkZSAicG9zdG1hc3Rlci9pbnRlcnJ1cHQuaCIKQEAgLTE3OSw3ICsxODAsMTAgQEAKICNpbmNs dWRlICJzdG9yYWdlL2xtZ3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2MuaCIKICNpbmNsdWRl ICJzdG9yYWdlL3Byb2NhcnJheS5oIgorI2luY2x1ZGUgInRjb3AvZGRsX2RlcGFyc2UuaCIKKyNp bmNsdWRlICJ0Y29wL3BxdWVyeS5oIgogI2luY2x1ZGUgInRjb3AvdGNvcHByb3QuaCIKKyNpbmNs dWRlICJ0Y29wL3V0aWxpdHkuaCIKICNpbmNsdWRlICJ1dGlscy9hY2wuaCIKICNpbmNsdWRlICJ1 dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL2NhdGNhY2hlLmgiCkBAIC0yNDY0LDYg KzI0NjgsMjMwIEBAIGFwcGx5X2hhbmRsZV90cnVuY2F0ZShTdHJpbmdJbmZvIHMpCiAJZW5kX3Jl cGxpY2F0aW9uX3N0ZXAoKTsKIH0KIAorLyogUmVtb3ZlIHRoZSBkYXRhIHBvcHVsYXRpb24gZnJv bSB0aGUgY29tbWFuZCAqLworc3RhdGljIHZvaWQKK3ByZXByb2Nlc3NfY3JlYXRlX3RhYmxlKFJh d1N0bXQgKmNvbW1hbmQpCit7CisJQ29tbWFuZFRhZwljb21tYW5kVGFnOworCisJY29tbWFuZFRh ZyA9IENyZWF0ZUNvbW1hbmRUYWcoKE5vZGUgKiljb21tYW5kKTsKKworCXN3aXRjaCAoY29tbWFu ZFRhZykKKwl7CisJCWNhc2UgQ01EVEFHX0NSRUFURV9UQUJMRV9BUzoKKwkJY2FzZSBDTURUQUdf U0VMRUNUX0lOVE86CisJCQl7CisJCQkJQ3JlYXRlVGFibGVBc1N0bXQgKmNhc3RtdCA9IChDcmVh dGVUYWJsZUFzU3RtdCAqKSBjb21tYW5kLT5zdG10OworCQkJCWlmIChjYXN0bXQtPm9ianR5cGUg PT0gT0JKRUNUX1RBQkxFKQorCQkJCXsKKwkJCQkJLyoKKwkJCQkJICogRm9yY2Ugc2tpcHBpbmcg ZGF0YSBwb3B1bGF0aW9uIHRvIGF2b2lkIGRhdGEKKwkJCQkJICogaW5jb25zaXN0ZW5jeS4gRGF0 YSBzaG91bGQgYmUgcmVwbGljYXRlZCBmcm9tIHRoZQorCQkJCQkgKiBwdWJsaXNoZXIgaW5zdGVh ZC4KKwkJCQkJICovCisJCQkJCWNhc3RtdC0+aW50by0+c2tpcERhdGEgPSB0cnVlOworCQkJCX0K KwkJCX0KKwkJCWJyZWFrOworCQljYXNlIENNRFRBR19TRUxFQ1Q6CisJCQl7CisJCQkJU2VsZWN0 U3RtdCAqc3N0bXQgPSAoU2VsZWN0U3RtdCAqKSBjb21tYW5kLT5zdG10OworCisJCQkJaWYgKHNz dG10LT5pbnRvQ2xhdXNlICE9IE5VTEwpCisJCQkJeworCQkJCQkvKgorCQkJCQkgKiBGb3JjZSBz a2lwcGluZyBkYXRhIHBvcHVsYXRpb24gdG8gYXZvaWQgZGF0YQorCQkJCQkgKiBpbmNvbnNpc3Rl bmN5LiBEYXRhIHNob3VsZCBiZSByZXBsaWNhdGVkIGZyb20gdGhlCisJCQkJCSAqIHB1Ymxpc2hl ciBpbnN0ZWFkLgorCQkJCQkgKi8KKwkJCQkJc3N0bXQtPmludG9DbGF1c2UtPnNraXBEYXRhID0g dHJ1ZTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9 CisKKy8qCisgKiBIYW5kbGUgQ1JFQVRFIFRBQkxFIGNvbW1hbmQKKyAqCisgKiBDYWxsIEFkZFN1 YnNjcmlwdGlvblJlbFN0YXRlIGZvciBDUkVBVEUgVEFCRUwgY29tbWFuZCB0byBzZXQgdGhlIHJl bHN0YXRlIHRvCisgKiBTVUJSRUxfU1RBVEVfUkVBRFkgc28gRE1MIGNoYW5nZXMgb24gdGhpcyBu ZXcgdGFibGUgY2FuIGJlIHJlcGxpY2F0ZWQgd2l0aG91dAorICogaGF2aW5nIHRvIG1hbnVhbGx5 IHJ1biAiYWx0ZXIgc3Vic2NyaXB0aW9uIC4uLiByZWZyZXNoIHB1YmxpY2F0aW9uIgorICovCitz dGF0aWMgdm9pZAoraGFuZGxlX2NyZWF0ZV90YWJsZShSYXdTdG10ICpjb21tYW5kKQoreworCUNv bW1hbmRUYWcJY29tbWFuZFRhZzsKKwlSYW5nZVZhcgkgKnJ2ID0gTlVMTDsKKwlPaWQJCQlyZWxp ZDsKKwlPaWQJCQlyZWxuYW1lc3BhY2UgPSBJbnZhbGlkT2lkOworCWNoYXIgCQkgKnNjaGVtYW5h bWUgPSBOVUxMOworCWNoYXIJCSAqcmVsbmFtZSA9IE5VTEw7CisKKwljb21tYW5kVGFnID0gQ3Jl YXRlQ29tbWFuZFRhZygoTm9kZSAqKSBjb21tYW5kKTsKKworCXN3aXRjaCAoY29tbWFuZFRhZykK Kwl7CisJCWNhc2UgQ01EVEFHX0NSRUFURV9UQUJMRToKKwkJCXsKKwkJCQlDcmVhdGVTdG10ICpj c3RtdCA9IChDcmVhdGVTdG10ICopIGNvbW1hbmQtPnN0bXQ7CisJCQkJcnYgPSBjc3RtdC0+cmVs YXRpb247CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCX0KKworCWlm ICghcnYpCisJCXJldHVybjsKKworCXNjaGVtYW5hbWUgPSBydi0+c2NoZW1hbmFtZTsKKwlyZWxu YW1lID0gcnYtPnJlbG5hbWU7CisKKwlpZiAoc2NoZW1hbmFtZSAhPSBOVUxMKQorCQlyZWxuYW1l c3BhY2UgPSBnZXRfbmFtZXNwYWNlX29pZChzY2hlbWFuYW1lLCBmYWxzZSk7CisKKwlpZiAocmVs bmFtZXNwYWNlICE9IEludmFsaWRPaWQpCisJCXJlbGlkID0gZ2V0X3JlbG5hbWVfcmVsaWQocmVs bmFtZSwgcmVsbmFtZXNwYWNlKTsKKwllbHNlCisJCXJlbGlkID0gUmVsbmFtZUdldFJlbGlkKHJl bG5hbWUpOworCisJaWYgKHJlbGlkICE9IEludmFsaWRPaWQpCisJeworCQlBZGRTdWJzY3JpcHRp b25SZWxTdGF0ZShNeVN1YnNjcmlwdGlvbi0+b2lkLCByZWxpZCwKKwkJCQkJCQkJU1VCUkVMX1NU QVRFX1JFQURZLAorCQkJCQkJCQlJbnZhbGlkWExvZ1JlY1B0cik7CisJCWVyZXBvcnQoREVCVUcx LAorCQkJCShlcnJtc2dfaW50ZXJuYWwoInRhYmxlIFwiJXNcIiBhZGRlZCB0byBzdWJzY3JpcHRp b24gXCIlc1wiIiwKKwkJCQkJCQkJIHJlbG5hbWUsIE15U3Vic2NyaXB0aW9uLT5uYW1lKSkpOwor CX0KK30KKworc3RhdGljIHZvaWQKK2FwcGx5X2hhbmRsZV9kZGwoU3RyaW5nSW5mbyBzKQorewor CVhMb2dSZWNQdHIgbHNuOworCWNvbnN0IGNoYXIgKnByZWZpeCA9IE5VTEw7CisJY2hhciAqbWVz c2FnZSA9IE5VTEw7CisJY2hhcgkgICAqZGRsX2NvbW1hbmQ7CisJU2l6ZQkJc3o7CisJTGlzdAkg ICAqcGFyc2V0cmVlX2xpc3Q7CisJTGlzdENlbGwgICAqcGFyc2V0cmVlX2l0ZW07CisJRGVzdFJl Y2VpdmVyICpyZWNlaXZlcjsKKwlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisJY29uc3QgY2hh ciAqc2F2ZV9kZWJ1Z19xdWVyeV9zdHJpbmcgPSBkZWJ1Z19xdWVyeV9zdHJpbmc7CisKKwltZXNz YWdlID0gbG9naWNhbHJlcF9yZWFkX2RkbG1lc3NhZ2UocywgJmxzbiwgJnByZWZpeCwgJnN6KTsK KworCS8qIE1ha2Ugc3VyZSB3ZSBhcmUgaW4gYSB0cmFuc2FjdGlvbiBjb21tYW5kICovCisJYmVn aW5fcmVwbGljYXRpb25fc3RlcCgpOworCisJZGRsX2NvbW1hbmQgPSBkZGxfZGVwYXJzZV9qc29u X3RvX3N0cmluZyhtZXNzYWdlKTsKKwlkZWJ1Z19xdWVyeV9zdHJpbmcgPSBkZGxfY29tbWFuZDsK KworCS8qIERlc3ROb25lIGZvciBsb2dpY2FsIHJlcGxpY2F0aW9uICovCisJcmVjZWl2ZXIgPSBD cmVhdGVEZXN0UmVjZWl2ZXIoRGVzdE5vbmUpOworCXBhcnNldHJlZV9saXN0ID0gcGdfcGFyc2Vf cXVlcnkoZGRsX2NvbW1hbmQpOworCisJZm9yZWFjaChwYXJzZXRyZWVfaXRlbSwgcGFyc2V0cmVl X2xpc3QpCisJeworCQlMaXN0CSAgICpwbGFudHJlZV9saXN0OworCQlMaXN0CSAgICpxdWVyeXRy ZWVfbGlzdDsKKwkJUmF3U3RtdAkgICAqY29tbWFuZCA9IChSYXdTdG10ICopIGxmaXJzdChwYXJz ZXRyZWVfaXRlbSk7CisJCUNvbW1hbmRUYWcJY29tbWFuZFRhZzsKKwkJTWVtb3J5Q29udGV4dCBw ZXJfcGFyc2V0cmVlX2NvbnRleHQgPSBOVUxMOworCQlQb3J0YWwJCXBvcnRhbDsKKwkJYm9vbAkJ IHNuYXBzaG90X3NldCA9IGZhbHNlOworCisJCWNvbW1hbmRUYWcgPSBDcmVhdGVDb21tYW5kVGFn KChOb2RlICopIGNvbW1hbmQpOworCisJCS8qIElmIHdlIGdvdCBhIGNhbmNlbCBzaWduYWwgaW4g cGFyc2luZyBvciBwcmlvciBjb21tYW5kLCBxdWl0ICovCisJCUNIRUNLX0ZPUl9JTlRFUlJVUFRT KCk7CisKKwkJLyogUmVtb3ZlIGRhdGEgcG9wdWxhdGlvbiBmcm9tIHRoZSBjb21tYW5kICovCisJ CXByZXByb2Nlc3NfY3JlYXRlX3RhYmxlKGNvbW1hbmQpOworCisJCS8qCisJCSAqIFNldCB1cCBh IHNuYXBzaG90IGlmIHBhcnNlIGFuYWx5c2lzL3BsYW5uaW5nIHdpbGwgbmVlZCBvbmUuCisJCSAq LworCQlpZiAoYW5hbHl6ZV9yZXF1aXJlc19zbmFwc2hvdChjb21tYW5kKSkKKwkJeworCQkJUHVz aEFjdGl2ZVNuYXBzaG90KEdldFRyYW5zYWN0aW9uU25hcHNob3QoKSk7CisJCQlzbmFwc2hvdF9z ZXQgPSB0cnVlOworCQl9CisKKwkJLyoKKwkJICogV2UgZG8gdGhlIHdvcmsgZm9yIGVhY2ggcGFy c2V0cmVlIGluIGEgc2hvcnQtbGl2ZWQgY29udGV4dCwgdG8KKwkJICogbGltaXQgdGhlIG1lbW9y eSB1c2VkIHdoZW4gdGhlcmUgYXJlIG1hbnkgY29tbWFuZHMgaW4gdGhlIHN0cmluZy4KKwkJICov CisJCXBlcl9wYXJzZXRyZWVfY29udGV4dCA9CisJCQlBbGxvY1NldENvbnRleHRDcmVhdGUoQ3Vy cmVudE1lbW9yeUNvbnRleHQsCisJCQkJCQkJCSAgImV4ZWN1dGVfc3FsX3N0cmluZyBwZXItc3Rh dGVtZW50IGNvbnRleHQiLAorCQkJCQkJCQkgIEFMTE9DU0VUX0RFRkFVTFRfU0laRVMpOworCQlv bGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHBlcl9wYXJzZXRyZWVfY29udGV4dCk7 CisKKwkJcXVlcnl0cmVlX2xpc3QgPSBwZ19hbmFseXplX2FuZF9yZXdyaXRlX2ZpeGVkcGFyYW1z KGNvbW1hbmQsCisJCQkJCQkJCQkJCQkJCQlkZGxfY29tbWFuZCwKKwkJCQkJCQkJCQkJCQkJCU5V TEwsIDAsIE5VTEwpOworCisJCXBsYW50cmVlX2xpc3QgPSBwZ19wbGFuX3F1ZXJpZXMocXVlcnl0 cmVlX2xpc3QsIGRkbF9jb21tYW5kLCAwLCBOVUxMKTsKKworCQkvKiBEb25lIHdpdGggdGhlIHNu YXBzaG90IHVzZWQgZm9yIHBhcnNpbmcvcGxhbm5pbmcgKi8KKwkJaWYgKHNuYXBzaG90X3NldCkK KwkJCVBvcEFjdGl2ZVNuYXBzaG90KCk7CisKKwkJcG9ydGFsID0gQ3JlYXRlUG9ydGFsKCJsb2dp Y2FsIHJlcGxpY2F0aW9uIiwgdHJ1ZSwgdHJ1ZSk7CisKKwkJLyoKKwkJICogV2UgZG9uJ3QgaGF2 ZSB0byBjb3B5IGFueXRoaW5nIGludG8gdGhlIHBvcnRhbCwgYmVjYXVzZSBldmVyeXRoaW5nCisJ CSAqIHdlIGFyZSBwYXNzaW5nIGhlcmUgaXMgaW4gQXBwbHlNZXNzYWdlQ29udGV4dCBvciB0aGUK KwkJICogcGVyX3BhcnNldHJlZV9jb250ZXh0LCBhbmQgc28gd2lsbCBvdXRsaXZlIHRoZSBwb3J0 YWwgYW55d2F5LgorCQkgKi8KKwkJUG9ydGFsRGVmaW5lUXVlcnkocG9ydGFsLAorCQkJCQkJICBO VUxMLAorCQkJCQkJICBkZGxfY29tbWFuZCwKKwkJCQkJCSAgY29tbWFuZFRhZywKKwkJCQkJCSAg cGxhbnRyZWVfbGlzdCwKKwkJCQkJCSAgTlVMTCk7CisKKwkJLyoKKwkJICogU3RhcnQgdGhlIHBv cnRhbC4gIE5vIHBhcmFtZXRlcnMgaGVyZS4KKwkJICovCisJCVBvcnRhbFN0YXJ0KHBvcnRhbCwg TlVMTCwgMCwgSW52YWxpZFNuYXBzaG90KTsKKworCQkvKgorCQkgKiBTd2l0Y2ggYmFjayB0byB0 cmFuc2FjdGlvbiBjb250ZXh0IGZvciBleGVjdXRpb24uCisJCSAqLworCQlNZW1vcnlDb250ZXh0 U3dpdGNoVG8ob2xkY29udGV4dCk7CisKKwkJKHZvaWQpIFBvcnRhbFJ1bihwb3J0YWwsCisJCQkJ CQkgRkVUQ0hfQUxMLAorCQkJCQkJIHRydWUsCisJCQkJCQkgdHJ1ZSwKKwkJCQkJCSByZWNlaXZl ciwKKwkJCQkJCSByZWNlaXZlciwKKwkJCQkJCSBOVUxMKTsKKworCQlQb3J0YWxEcm9wKHBvcnRh bCwgZmFsc2UpOworCisJCUNvbW1hbmRDb3VudGVySW5jcmVtZW50KCk7CisKKwkJLyoKKwkJICog VGFibGUgY3JlYXRlZCBieSBEREwgcmVwbGljYXRpb24gKGRhdGFiYXNlIGxldmVsKSBpcyBhdXRv bWF0aWNhbGx5CisJCSAqIGFkZGVkIHRvIHRoZSBzdWJzY3JpcHRpb24gaGVyZS4KKwkJICovCisJ CWhhbmRsZV9jcmVhdGVfdGFibGUoY29tbWFuZCk7CisKKwkJLyogTm93IHdlIG1heSBkcm9wIHRo ZSBwZXItcGFyc2V0cmVlIGNvbnRleHQsIGlmIG9uZSB3YXMgY3JlYXRlZC4gKi8KKwkJTWVtb3J5 Q29udGV4dERlbGV0ZShwZXJfcGFyc2V0cmVlX2NvbnRleHQpOworCX0KKworCWRlYnVnX3F1ZXJ5 X3N0cmluZyA9IHNhdmVfZGVidWdfcXVlcnlfc3RyaW5nOworCWVuZF9yZXBsaWNhdGlvbl9zdGVw KCk7Cit9CisKIAogLyoKICAqIExvZ2ljYWwgcmVwbGljYXRpb24gcHJvdG9jb2wgbWVzc2FnZSBk aXNwYXRjaGVyLgpAQCAtMjUyOSw2ICsyNzU3LDEwIEBAIGFwcGx5X2Rpc3BhdGNoKFN0cmluZ0lu Zm8gcykKIAkJCSAqLwogCQkJYnJlYWs7CiAKKwkJY2FzZSBMT0dJQ0FMX1JFUF9NU0dfRERMTUVT U0FHRToKKwkJCWFwcGx5X2hhbmRsZV9kZGwocyk7CisJCQlicmVhazsKKwogCQljYXNlIExPR0lD QUxfUkVQX01TR19TVFJFQU1fU1RBUlQ6CiAJCQlhcHBseV9oYW5kbGVfc3RyZWFtX3N0YXJ0KHMp OwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1 dC9wZ291dHB1dC5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQu YwppbmRleCAyZWNhYTViOTA3Li41ZTViMWNhMTJmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0 aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMKQEAgLTUzLDYgKzUzLDExIEBAIHN0YXRpYyB2b2lkIHBn b3V0cHV0X21lc3NhZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAogCQkJCQkJCSBSZW9y ZGVyQnVmZmVyVFhOICp0eG4sIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCiAJCQkJCQkJIGJvb2wg dHJhbnNhY3Rpb25hbCwgY29uc3QgY2hhciAqcHJlZml4LAogCQkJCQkJCSBTaXplIHN6LCBjb25z dCBjaGFyICptZXNzYWdlKTsKK3N0YXRpYyB2b2lkIHBnb3V0cHV0X2RkbG1lc3NhZ2UoTG9naWNh bERlY29kaW5nQ29udGV4dCAqY3R4LAorCQkJCQkJCQlSZW9yZGVyQnVmZmVyVFhOICp0eG4sIFhM b2dSZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJCQkJCWNvbnN0IGNoYXIgKnByZWZpeCwgT2lkIHJl bGlkLAorCQkJCQkJCQlEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJCVNpemUg c3osIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOwogc3RhdGljIGJvb2wgcGdvdXRwdXRfb3JpZ2luX2Zp bHRlcihMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCiAJCQkJCQkJCSAgIFJlcE9yaWdpbklk IG9yaWdpbl9pZCk7CiBzdGF0aWMgdm9pZCBwZ291dHB1dF9iZWdpbl9wcmVwYXJlX3R4bihMb2dp Y2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCkBAIC0yNTYsNiArMjYxLDcgQEAgX1BHX291dHB1dF9w bHVnaW5faW5pdChPdXRwdXRQbHVnaW5DYWxsYmFja3MgKmNiKQogCWNiLT5jaGFuZ2VfY2IgPSBw Z291dHB1dF9jaGFuZ2U7CiAJY2ItPnRydW5jYXRlX2NiID0gcGdvdXRwdXRfdHJ1bmNhdGU7CiAJ Y2ItPm1lc3NhZ2VfY2IgPSBwZ291dHB1dF9tZXNzYWdlOworCWNiLT5kZGxtZXNzYWdlX2NiID0g cGdvdXRwdXRfZGRsbWVzc2FnZTsKIAljYi0+Y29tbWl0X2NiID0gcGdvdXRwdXRfY29tbWl0X3R4 bjsKIAogCWNiLT5iZWdpbl9wcmVwYXJlX2NiID0gcGdvdXRwdXRfYmVnaW5fcHJlcGFyZV90eG47 CkBAIC0yNzIsNiArMjc4LDcgQEAgX1BHX291dHB1dF9wbHVnaW5faW5pdChPdXRwdXRQbHVnaW5D YWxsYmFja3MgKmNiKQogCWNiLT5zdHJlYW1fY29tbWl0X2NiID0gcGdvdXRwdXRfc3RyZWFtX2Nv bW1pdDsKIAljYi0+c3RyZWFtX2NoYW5nZV9jYiA9IHBnb3V0cHV0X2NoYW5nZTsKIAljYi0+c3Ry ZWFtX21lc3NhZ2VfY2IgPSBwZ291dHB1dF9tZXNzYWdlOworCWNiLT5zdHJlYW1fZGRsbWVzc2Fn ZV9jYiA9IHBnb3V0cHV0X2RkbG1lc3NhZ2U7CiAJY2ItPnN0cmVhbV90cnVuY2F0ZV9jYiA9IHBn b3V0cHV0X3RydW5jYXRlOwogCS8qIHRyYW5zYWN0aW9uIHN0cmVhbWluZyAtIHR3by1waGFzZSBj b21taXQgKi8KIAljYi0+c3RyZWFtX3ByZXBhcmVfY2IgPSBwZ291dHB1dF9zdHJlYW1fcHJlcGFy ZV90eG47CkBAIC00MjYsNiArNDMzLDcgQEAgcGdvdXRwdXRfc3RhcnR1cChMb2dpY2FsRGVjb2Rp bmdDb250ZXh0ICpjdHgsIE91dHB1dFBsdWdpbk9wdGlvbnMgKm9wdCwKIAogCS8qIFRoaXMgcGx1 Z2luIHVzZXMgYmluYXJ5IHByb3RvY29sLiAqLwogCW9wdC0+b3V0cHV0X3R5cGUgPSBPVVRQVVRf UExVR0lOX0JJTkFSWV9PVVRQVVQ7CisJb3B0LT5yZWNlaXZlX3Jld3JpdGVzID0gdHJ1ZTsKIAog CS8qCiAJICogVGhpcyBpcyByZXBsaWNhdGlvbiBzdGFydCBhbmQgbm90IHNsb3QgaW5pdGlhbGl6 YXRpb24uCkBAIC00OTksNiArNTA3LDcgQEAgcGdvdXRwdXRfc3RhcnR1cChMb2dpY2FsRGVjb2Rp bmdDb250ZXh0ICpjdHgsIE91dHB1dFBsdWdpbk9wdGlvbnMgKm9wdCwKIAogCQkvKiBJbml0IHB1 YmxpY2F0aW9uIHN0YXRlLiAqLwogCQlkYXRhLT5wdWJsaWNhdGlvbnMgPSBOSUw7CisJCWRhdGEt PmRlbGV0ZWRfcmVsaWRzID0gTklMOwogCQlwdWJsaWNhdGlvbnNfdmFsaWQgPSBmYWxzZTsKIAkJ Q2FjaGVSZWdpc3RlclN5c2NhY2hlQ2FsbGJhY2soUFVCTElDQVRJT05PSUQsCiAJCQkJCQkJCQkg IHB1YmxpY2F0aW9uX2ludmFsaWRhdGlvbl9jYiwKQEAgLTEzNzcsOSArMTM4NiwyMiBAQCBwZ291 dHB1dF9jaGFuZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhO ICp0eG4sCiAJUmVvcmRlckJ1ZmZlckNoYW5nZVR5cGUgYWN0aW9uID0gY2hhbmdlLT5hY3Rpb247 CiAJVHVwbGVUYWJsZVNsb3QgKm9sZF9zbG90ID0gTlVMTDsKIAlUdXBsZVRhYmxlU2xvdCAqbmV3 X3Nsb3QgPSBOVUxMOworCWJvb2wJCQl0YWJsZV9yZXdyaXRlID0gZmFsc2U7CiAKIAl1cGRhdGVf cmVwbGljYXRpb25fcHJvZ3Jlc3MoY3R4LCBmYWxzZSk7CiAKKwkvKgorCSAqIEZvciBoZWFwIHJl d3JpdGVzLCB3ZSBtaWdodCBuZWVkIHRvIHJlcGxpY2F0ZSB0aGVtIGlmIHRoZSByZXdyaXR0ZW4K KwkgKiB0YWJsZSBwdWJsaXNoZXMgcmV3cml0ZSBkZGwgbWVzc2FnZS4gU28gZ2V0IHRoZSBhY3R1 YWwgcmVsYXRpb24gaGVyZSBhbmQKKwkgKiBjaGVjayB0aGUgcHViYWN0aW9uIGxhdGVyLgorCSAq LworCWlmIChyZWxhdGlvbi0+cmRfcmVsLT5yZWxyZXdyaXRlKQorCXsKKwkJdGFibGVfcmV3cml0 ZSA9IHRydWU7CisJCXJlbGF0aW9uID0gUmVsYXRpb25JZEdldFJlbGF0aW9uKHJlbGF0aW9uLT5y ZF9yZWwtPnJlbHJld3JpdGUpOworCQl0YXJnZXRyZWwgPSByZWxhdGlvbjsKKwl9CisKIAlpZiAo IWlzX3B1Ymxpc2hhYmxlX3JlbGF0aW9uKHJlbGF0aW9uKSkKIAkJcmV0dXJuOwogCkBAIC0xNDEz LDYgKzE0MzUsMTMgQEAgcGdvdXRwdXRfY2hhbmdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0 eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJQXNzZXJ0KGZhbHNlKTsKIAl9CiAKKwkvKgor CSAqIFdlIGRvbid0IHB1Ymxpc2ggdGFibGUgcmV3cml0ZSBjaGFuZ2UgdW5sZXNzIHdlIHB1Ymxp c2ggdGhlIHJld3JpdGUgZGRsCisJICogbWVzc2FnZS4KKwkgKi8KKwlpZiAodGFibGVfcmV3cml0 ZSAmJiAhcmVsZW50cnktPnB1YmFjdGlvbnMucHViZGRsKQorCQlyZXR1cm47CisKIAkvKiBBdm9p ZCBsZWFraW5nIG1lbW9yeSBieSB1c2luZyBhbmQgcmVzZXR0aW5nIG91ciBvd24gY29udGV4dCAq LwogCW9sZCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhkYXRhLT5jb250ZXh0KTsKIApAQCAtMTQ0 Miw4ICsxNDcxLDggQEAgcGdvdXRwdXRfY2hhbmdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0 eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJfQogCiAJCQkvKiBDaGVjayByb3cgZmlsdGVy ICovCi0JCQlpZiAoIXBnb3V0cHV0X3Jvd19maWx0ZXIodGFyZ2V0cmVsLCBOVUxMLCAmbmV3X3Ns b3QsIHJlbGVudHJ5LAotCQkJCQkJCQkJICZhY3Rpb24pKQorCQkJaWYgKCF0YWJsZV9yZXdyaXRl ICYmCisJCQkJIXBnb3V0cHV0X3Jvd19maWx0ZXIodGFyZ2V0cmVsLCBOVUxMLCAmbmV3X3Nsb3Qs IHJlbGVudHJ5LCAmYWN0aW9uKSkKIAkJCQlicmVhazsKIAogCQkJLyoKQEAgLTE0NjMsOCArMTQ5 MiwxOSBAQCBwZ291dHB1dF9jaGFuZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9y ZGVyQnVmZmVyVFhOICp0eG4sCiAJCQltYXliZV9zZW5kX3NjaGVtYShjdHgsIGNoYW5nZSwgcmVs YXRpb24sIHJlbGVudHJ5KTsKIAogCQkJT3V0cHV0UGx1Z2luUHJlcGFyZVdyaXRlKGN0eCwgdHJ1 ZSk7Ci0JCQlsb2dpY2FscmVwX3dyaXRlX2luc2VydChjdHgtPm91dCwgeGlkLCB0YXJnZXRyZWws IG5ld19zbG90LAotCQkJCQkJCQkJZGF0YS0+YmluYXJ5LCByZWxlbnRyeS0+Y29sdW1ucyk7CisK KwkJCS8qCisJCQkgKiBDb252ZXJ0IHRoZSByZXdyaXRlIGluc2VydHMgdG8gdXBkYXRlcyBzbyB0 aGF0IHRoZSBzdWJzY3JpYmVyCisJCQkgKiBjYW4gcmVwbGF5IGl0LiBUaGlzIGlzIG5lZWRlZCB0 byBtYWtlIHN1cmUgdGhlIGRhdGEgYmV0d2VlbgorCQkJICogcHVibGlzaGVyIGFuZCBzdWJzY3Jp YmVyIGlzIGNvbnNpc3RlbnQuCisJCQkgKi8KKwkJCWlmICh0YWJsZV9yZXdyaXRlKQorCQkJCWxv Z2ljYWxyZXBfd3JpdGVfdXBkYXRlKGN0eC0+b3V0LCB4aWQsIHRhcmdldHJlbCwKKwkJCQkJCQkJ CQlOVUxMLCBuZXdfc2xvdCwgZGF0YS0+YmluYXJ5LAorCQkJCQkJCQkJCXJlbGVudHJ5LT5jb2x1 bW5zKTsKKwkJCWVsc2UKKwkJCQlsb2dpY2FscmVwX3dyaXRlX2luc2VydChjdHgtPm91dCwgeGlk LCB0YXJnZXRyZWwsIG5ld19zbG90LAorCQkJCQkJCQkJCWRhdGEtPmJpbmFyeSwgcmVsZW50cnkt PmNvbHVtbnMpOwogCQkJT3V0cHV0UGx1Z2luV3JpdGUoY3R4LCB0cnVlKTsKIAkJCWJyZWFrOwog CQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9VUERBVEU6CkBAIC0xNTk0LDYgKzE2MzQsOSBA QCBwZ291dHB1dF9jaGFuZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVm ZmVyVFhOICp0eG4sCiAJCWFuY2VzdG9yID0gTlVMTDsKIAl9CiAKKwlpZiAodGFibGVfcmV3cml0 ZSkKKwkJUmVsYXRpb25DbG9zZShyZWxhdGlvbik7CisKIAkvKiBDbGVhbnVwICovCiAJTWVtb3J5 Q29udGV4dFN3aXRjaFRvKG9sZCk7CiAJTWVtb3J5Q29udGV4dFJlc2V0KGRhdGEtPmNvbnRleHQp OwpAQCAtMTY3MSw4ICsxNzE0LDggQEAgcGdvdXRwdXRfdHJ1bmNhdGUoTG9naWNhbERlY29kaW5n Q29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAKIHN0YXRpYyB2b2lkCiBwZ291 dHB1dF9tZXNzYWdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRY TiAqdHhuLAotCQkJCSBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLCBib29sIHRyYW5zYWN0aW9uYWws IGNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBzeiwKLQkJCQkgY29uc3QgY2hhciAqbWVzc2FnZSkK KwkJCQkgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwgYm9vbCB0cmFuc2FjdGlvbmFsLAorCQkJCSBj b25zdCBjaGFyICpwcmVmaXgsIFNpemUgc3osIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCiB7CiAJUEdP dXRwdXREYXRhICpkYXRhID0gKFBHT3V0cHV0RGF0YSAqKSBjdHgtPm91dHB1dF9wbHVnaW5fcHJp dmF0ZTsKIAlUcmFuc2FjdGlvbklkIHhpZCA9IEludmFsaWRUcmFuc2FjdGlvbklkOwpAQCAtMTcx Miw2ICsxNzU1LDEzNyBAQCBwZ291dHB1dF9tZXNzYWdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQg KmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCU91dHB1dFBsdWdpbldyaXRlKGN0eCwgdHJ1 ZSk7CiB9CiAKK3N0YXRpYyB2b2lkCitwZ291dHB1dF9kZGxtZXNzYWdlKExvZ2ljYWxEZWNvZGlu Z0NvbnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQlYTG9nUmVjUHRyIG1l c3NhZ2VfbHNuLAorCQkJCQljb25zdCBjaGFyICpwcmVmaXgsIE9pZCByZWxpZCwgRGVwYXJzZWRD b21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQlTaXplIHN6LCBjb25zdCBjaGFyICptZXNzYWdlKQor eworCVBHT3V0cHV0RGF0YSAqZGF0YSA9IChQR091dHB1dERhdGEgKikgY3R4LT5vdXRwdXRfcGx1 Z2luX3ByaXZhdGU7CisJUEdPdXRwdXRUeG5EYXRhICp0eG5kYXRhID0gKFBHT3V0cHV0VHhuRGF0 YSAqKSB0eG4tPm91dHB1dF9wbHVnaW5fcHJpdmF0ZTsKKwlSZWxhdGlvbglyZWxhdGlvbiA9IE5V TEw7CisJVHJhbnNhY3Rpb25JZCB4aWQgPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKKwlSZWxhdGlv blN5bmNFbnRyeSAqcmVsZW50cnk7CisKKwkvKgorCSAqIFJlbWVtYmVyIHRoZSB4aWQgZm9yIHRo ZSBtZXNzYWdlIGluIHN0cmVhbWluZyBtb2RlLiBTZWUKKwkgKiBwZ291dHB1dF9jaGFuZ2UuCisJ ICovCisJaWYgKGluX3N0cmVhbWluZykKKwkJeGlkID0gdHhuLT54aWQ7CisKKwlzd2l0Y2ggKGNt ZHR5cGUpCisJeworCQljYXNlIERDVF9UYWJsZURyb3BTdGFydDoKKwkJCS8qCisJCQkgKiBPbiBE Uk9QIHN0YXJ0LCBhZGQgdGhlIHJlbGlkIHRvIGEgZGVsZXRlZF9yZWxpZCBsaXN0IGlmIHRoZQor CQkJICogcmVsaWQgaXMgcGFydCBvZiBhIHB1YmxpY2F0aW9uIHRoYXQgc3VwcG9ydHMgZGRsIHB1 YmxpY2F0aW9uLiBXZQorCQkJICogbmVlZCB0aGlzIGJlY2F1c2Ugb24gRFJPUCBlbmQsIHRoZSBy ZWxpZCB3aWxsIG5vIGxvbmdlciBiZQorCQkJICogdmFsaWQuIExhdGVyIG9uIERyb3AgZW5kLCB2 ZXJpZnkgdGhhdCB0aGUgZHJvcCBpcyBmb3IgYSByZWxpZAorCQkJICogdGhhdCBpcyBvbiB0aGUg ZGVsZXRlZF9yaWQgbGlzdCwgYW5kIG9ubHkgdGhlbiBzZW5kIHRoZSBkZGwKKwkJCSAqIG1lc3Nh Z2UuCisJCQkgKi8KKwkJCXJlbGF0aW9uID0gUmVsYXRpb25JZEdldFJlbGF0aW9uKHJlbGlkKTsK KworCQkJQXNzZXJ0KHJlbGF0aW9uKTsKKwkJCXJlbGVudHJ5ID0gZ2V0X3JlbF9zeW5jX2VudHJ5 KGRhdGEsIHJlbGF0aW9uKTsKKworCQkJaWYgKHJlbGVudHJ5LT5wdWJhY3Rpb25zLnB1YmRkbCkK KwkJCQlkYXRhLT5kZWxldGVkX3JlbGlkcyA9IGxhcHBlbmRfb2lkKGRhdGEtPmRlbGV0ZWRfcmVs aWRzLCByZWxpZCk7CisKKwkJCVJlbGF0aW9uQ2xvc2UocmVsYXRpb24pOworCQkJcmV0dXJuOwor CQljYXNlIERDVF9UYWJsZURyb3BFbmQ6CisJCQlpZiAoIWxpc3RfbWVtYmVyX29pZChkYXRhLT5k ZWxldGVkX3JlbGlkcywgcmVsaWQpKQorCQkJCXJldHVybjsKKwkJCWVsc2UKKwkJCQlkYXRhLT5k ZWxldGVkX3JlbGlkcyA9IGxpc3RfZGVsZXRlX29pZChkYXRhLT5kZWxldGVkX3JlbGlkcywgcmVs aWQpOworCQkJYnJlYWs7CisJCWNhc2UgRENUX1RhYmxlQWx0ZXI6CisJCQkvKgorCQkJICogRm9y IHRhYmxlIHJld3JpdGUgZGRsLCB3ZSBmaXJzdCBzZW5kIHRoZSBvcmlnaW5hbCBkZGwgbWVzc2Fn ZSB0bworCQkJICogc3Vic2NyaWJlciwgdGhlbiBjb252ZXJ0IHRoZSB1cGNvbWluZyByZXdyaXRl IElOU0VSVCB0byBVUERBVEUgYW5kCisJCQkgKiBzZW5kIHRoZW0gdG8gc3Vic2NyaWJlciBzbyB0 aGF0IHRoZSBkYXRhIGJldHdlZW4gcHVibGlzaGVyIGFuZAorCQkJICogc3Vic2NyaWJlciBjYW4g YWx3YXlzIGJlIGNvbnNpc3RlbnQuCisJCQkgKgorCQkJICogV2UgZG8gdGhpcyB3YXkgYmVjYXVz ZSBvZiB0d28gcmVhc29uOgorCQkJICoKKwkJCSAqICgxKSBUaGUgZGF0YSBiZWZvcmUgdGhlIHJl d3JpdGUgZGRsIGNvdWxkIGFscmVhZHkgYmUgZGlmZmVyZW50IGFtb25nCisJCQkgKiBwdWJsaXNo ZXIgYW5kIHN1YnNjcmliZXIuIFRvIG1ha2Ugc3VyZSB0aGUgZXh0cmEgZGF0YSBpbiBzdWJzY3Jp YmVyCisJCQkgKiB3aGljaCBkb2Vzbid0IGV4aXN0IGluIHB1Ymxpc2hlciBhbHNvIGdldCByZXdy aXR0ZW4sIHdlIG5lZWQgdG8gbGV0CisJCQkgKiB0aGUgc3Vic2NyaWJlciBleGVjdXRlIHRoZSBv cmlnaW5hbCByZXdyaXRlIGRkbCB0byByZXdyaXRlIGFsbCB0aGUKKwkJCSAqIGRhdGEgYXQgZmly c3QuCisJCQkgKgorCQkJICogKDIpIHRoZSBkYXRhIGFmdGVyIGV4ZWN1dGluZyByZXdyaXRlIGRk bCBjb3VsZCBiZSBkaWZmZXJlbnQgYW1vbmcKKwkJCSAqIHB1Ymxpc2hlciBhbmQgc3Vic2NyaWJl cihkdWUgdG8gZGlmZmVyZW50IGZ1bmN0aW9ucy9vcGVyYXRvcnMgdXNlZAorCQkJICogZHVyaW5n IHJld3JpdGUpLCBzbyB3ZSBuZWVkIHRvIHJlcGxpY2F0ZSB0aGUgcmV3cml0ZSBVUERBVEVzIHRv IGtlZXAKKwkJCSAqIHRoZSBkYXRhIGNvbnNpc3RlbnQuCisJCQkgKgorCQkJICogVE8gSU1QUk9W RTogV2UgY291bGQgaW1wcm92ZSB0aGlzIGJ5IGxldHRpbmcgdGhlIHN1YnNjcmliZXIgb25seQor CQkJICogcmV3cml0ZSB0aGUgZXh0cmEgZGF0YSBpbnN0ZWFkIG9mIGRvaW5nIGZ1bGx5IHJld3Jp dGUgYW5kIHVzZSB0aGUKKwkJCSAqIHVwY29taW5nIHJld3JpdGUgVVBEQVRFcyB0byByZXdyaXRl IHRoZSByZXN0IGRhdGEuIEJlc2lkZXMsIHdlIG1heQorCQkJICogbm90IG5lZWQgdG8gc2VuZCBy ZXdyaXRlIGNoYW5nZXMgZm9yIGFsbCB0eXBlIG9mIHJld3JpdGUgZGRsLCBmb3IKKwkJCSAqIGV4 YW1wbGUsIGl0IHNlZW1zIGZpbmUgdG8gc2tpcCBzZW5kaW5nIHJld3JpdGUgY2hhbmdlcyBmb3Ig QUxURVIKKwkJCSAqIFRBQkxFIFNFVCBMT0dHRUQgYXMgdGhlIGRhdGEgaW4gdGhlIHRhYmxlIGRv ZXNuJ3QgYWN0dWFsbHkgYmUKKwkJCSAqIGNoYW5nZWQuCisJCQkgKi8KKwkJCXJlbGF0aW9uID0g UmVsYXRpb25JZEdldFJlbGF0aW9uKHJlbGlkKTsKKwkJCUFzc2VydChyZWxhdGlvbik7CisKKwkJ CXJlbGVudHJ5ID0gZ2V0X3JlbF9zeW5jX2VudHJ5KGRhdGEsIHJlbGF0aW9uKTsKKworCQkJLyoK KwkJCSAqIFNraXAgc2VuZGluZyB0aGlzIGRkbCBpZiB3ZSBkb24ndCBwdWJsaXNoIGRkbCBtZXNz YWdlIG9yIHRoZSBkZGwKKwkJCSAqIG5lZWQgdG8gYmUgcHVibGlzaGVkIHZpYSBpdHMgcm9vdCBy ZWxhdGlvbi4KKwkJCSAqLworCQkJaWYgKCFyZWxlbnRyeS0+cHViYWN0aW9ucy5wdWJkZGwgfHwK KwkJCQlyZWxlbnRyeS0+cHVibGlzaF9hc19yZWxpZCAhPSByZWxpZCkKKwkJCXsKKwkJCQlSZWxh dGlvbkNsb3NlKHJlbGF0aW9uKTsKKwkJCQlyZXR1cm47CisJCQl9CisKKwkJCWJyZWFrOworCQlj YXNlIERDVF9TaW1wbGVDbWQ6CisJCQlyZWxhdGlvbiA9IFJlbGF0aW9uSWRHZXRSZWxhdGlvbihy ZWxpZCk7CisKKwkJCWlmIChyZWxhdGlvbiA9PSBOVUxMKQorCQkJCWJyZWFrOworCisJCQlyZWxl bnRyeSA9IGdldF9yZWxfc3luY19lbnRyeShkYXRhLCByZWxhdGlvbik7CisKKwkJCWlmICghcmVs ZW50cnktPnB1YmFjdGlvbnMucHViZGRsKQorCQkJeworCQkJCVJlbGF0aW9uQ2xvc2UocmVsYXRp b24pOworCQkJCXJldHVybjsKKwkJCX0KKworCQkJYnJlYWs7CisJCWNhc2UgRENUX09iamVjdERy b3A6CisJCQkvKiBkbyBub3RoaW5nICovCisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVsb2co RVJST1IsICJ1bnN1cHBvcnRlZCB0eXBlICVkIiwgY21kdHlwZSk7CisJCQlicmVhazsKKwl9CisK KwkvKiBTZW5kIEJFR0lOIGlmIHdlIGhhdmVuJ3QgeWV0ICovCisJaWYgKHR4bmRhdGEgJiYgIXR4 bmRhdGEtPnNlbnRfYmVnaW5fdHhuKQorCQlwZ291dHB1dF9zZW5kX2JlZ2luKGN0eCwgdHhuKTsK KworCU91dHB1dFBsdWdpblByZXBhcmVXcml0ZShjdHgsIHRydWUpOworCWxvZ2ljYWxyZXBfd3Jp dGVfZGRsbWVzc2FnZShjdHgtPm91dCwKKwkJCQkJCQkJeGlkLAorCQkJCQkJCQltZXNzYWdlX2xz biwKKwkJCQkJCQkJcHJlZml4LAorCQkJCQkJCQlzeiwKKwkJCQkJCQkJbWVzc2FnZSk7CisJT3V0 cHV0UGx1Z2luV3JpdGUoY3R4LCB0cnVlKTsKKworCWlmIChyZWxhdGlvbikKKwkJUmVsYXRpb25D bG9zZShyZWxhdGlvbik7Cit9CisKIC8qCiAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgZGF0YSBpcyBh c3NvY2lhdGVkIHdpdGggYW4gb3JpZ2luIGFuZCB0aGUgdXNlciBoYXMKICAqIHJlcXVlc3RlZCB0 aGUgY2hhbmdlcyB0aGF0IGRvbid0IGhhdmUgYW4gb3JpZ2luLCBmYWxzZSBvdGhlcndpc2UuCkBA IC0xOTkzLDcgKzIxNjcsOCBAQCBnZXRfcmVsX3N5bmNfZW50cnkoUEdPdXRwdXREYXRhICpkYXRh LCBSZWxhdGlvbiByZWxhdGlvbikKIAkJZW50cnktPnNjaGVtYV9zZW50ID0gZmFsc2U7CiAJCWVu dHJ5LT5zdHJlYW1lZF90eG5zID0gTklMOwogCQllbnRyeS0+cHViYWN0aW9ucy5wdWJpbnNlcnQg PSBlbnRyeS0+cHViYWN0aW9ucy5wdWJ1cGRhdGUgPQotCQkJZW50cnktPnB1YmFjdGlvbnMucHVi ZGVsZXRlID0gZW50cnktPnB1YmFjdGlvbnMucHVidHJ1bmNhdGUgPSBmYWxzZTsKKwkJCWVudHJ5 LT5wdWJhY3Rpb25zLnB1YmRlbGV0ZSA9IGVudHJ5LT5wdWJhY3Rpb25zLnB1YnRydW5jYXRlID0K KwkJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YmRkbCA9IGZhbHNlOwogCQllbnRyeS0+bmV3X3Nsb3Qg PSBOVUxMOwogCQllbnRyeS0+b2xkX3Nsb3QgPSBOVUxMOwogCQltZW1zZXQoZW50cnktPmV4cHJz dGF0ZSwgMCwgc2l6ZW9mKGVudHJ5LT5leHByc3RhdGUpKTsKQEAgLTIwNTEsNiArMjIyNiw3IEBA IGdldF9yZWxfc3luY19lbnRyeShQR091dHB1dERhdGEgKmRhdGEsIFJlbGF0aW9uIHJlbGF0aW9u KQogCQllbnRyeS0+cHViYWN0aW9ucy5wdWJ1cGRhdGUgPSBmYWxzZTsKIAkJZW50cnktPnB1YmFj dGlvbnMucHViZGVsZXRlID0gZmFsc2U7CiAJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YnRydW5jYXRl ID0gZmFsc2U7CisJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YmRkbCA9IGZhbHNlOwogCiAJCS8qCiAJ CSAqIFR1cGxlIHNsb3RzIGNsZWFudXBzLiAoV2lsbCBiZSByZWJ1aWx0IGxhdGVyIGlmIG5lZWRl ZCkuCkBAIC0yMTY0LDYgKzIzNDAsNyBAQCBnZXRfcmVsX3N5bmNfZW50cnkoUEdPdXRwdXREYXRh ICpkYXRhLCBSZWxhdGlvbiByZWxhdGlvbikKIAkJCQllbnRyeS0+cHViYWN0aW9ucy5wdWJ1cGRh dGUgfD0gcHViLT5wdWJhY3Rpb25zLnB1YnVwZGF0ZTsKIAkJCQllbnRyeS0+cHViYWN0aW9ucy5w dWJkZWxldGUgfD0gcHViLT5wdWJhY3Rpb25zLnB1YmRlbGV0ZTsKIAkJCQllbnRyeS0+cHViYWN0 aW9ucy5wdWJ0cnVuY2F0ZSB8PSBwdWItPnB1YmFjdGlvbnMucHVidHJ1bmNhdGU7CisJCQkJZW50 cnktPnB1YmFjdGlvbnMucHViZGRsIHw9IHB1Yi0+cHViYWN0aW9ucy5wdWJkZGw7CiAKIAkJCQkv KgogCQkJCSAqIFdlIHdhbnQgdG8gcHVibGlzaCB0aGUgY2hhbmdlcyBhcyB0aGUgdG9wLW1vc3Qg YW5jZXN0b3IKQEAgLTIzNDksNiArMjUyNiw3IEBAIHJlbF9zeW5jX2NhY2hlX3B1YmxpY2F0aW9u X2NiKERhdHVtIGFyZywgaW50IGNhY2hlaWQsIHVpbnQzMiBoYXNodmFsdWUpCiAJewogCQllbnRy eS0+cmVwbGljYXRlX3ZhbGlkID0gZmFsc2U7CiAJfQorCiB9CiAKIC8qIFNlbmQgUmVwbGljYXRp b24gb3JpZ2luICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNo ZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYwppbmRleCAwMGRjMGYyNDAz Li5mMWI0ZDA5M2NlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNo ZS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMKQEAgLTU2ODMsNiAr NTY4Myw3IEBAIFJlbGF0aW9uQnVpbGRQdWJsaWNhdGlvbkRlc2MoUmVsYXRpb24gcmVsYXRpb24s IFB1YmxpY2F0aW9uRGVzYyAqcHViZGVzYykKIAkJcHViZGVzYy0+cHViYWN0aW9ucy5wdWJ1cGRh dGUgfD0gcHViZm9ybS0+cHVidXBkYXRlOwogCQlwdWJkZXNjLT5wdWJhY3Rpb25zLnB1YmRlbGV0 ZSB8PSBwdWJmb3JtLT5wdWJkZWxldGU7CiAJCXB1YmRlc2MtPnB1YmFjdGlvbnMucHVidHJ1bmNh dGUgfD0gcHViZm9ybS0+cHVidHJ1bmNhdGU7CisJCXB1YmRlc2MtPnB1YmFjdGlvbnMucHViZGRs IHw9IHB1YmZvcm0tPnB1YmRkbDsKIAogCQkvKgogCQkgKiBDaGVjayBpZiBhbGwgY29sdW1ucyBy ZWZlcmVuY2VkIGluIHRoZSBmaWx0ZXIgZXhwcmVzc2lvbiBhcmUgcGFydApkaWZmIC0tZ2l0IGEv c3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKaW5k ZXggYmQ5YjA2NmU0ZS4uOTdmNDM0YTdlOCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3Bn X2R1bXAuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCkBAIC0zODk3LDYgKzM4OTcs NyBAQCBnZXRQdWJsaWNhdGlvbnMoQXJjaGl2ZSAqZm91dCwgaW50ICpudW1QdWJsaWNhdGlvbnMp CiAJaW50CQkJaV9wdWJ1cGRhdGU7CiAJaW50CQkJaV9wdWJkZWxldGU7CiAJaW50CQkJaV9wdWJ0 cnVuY2F0ZTsKKwlpbnQJCQlpX3B1YmRkbDsKIAlpbnQJCQlpX3B1YnZpYXJvb3Q7CiAJaW50CQkJ aSwKIAkJCQludHVwczsKQEAgLTM5MTIsMjMgKzM5MTMsMjMgQEAgZ2V0UHVibGljYXRpb25zKEFy Y2hpdmUgKmZvdXQsIGludCAqbnVtUHVibGljYXRpb25zKQogCXJlc2V0UFFFeHBCdWZmZXIocXVl cnkpOwogCiAJLyogR2V0IHRoZSBwdWJsaWNhdGlvbnMuICovCi0JaWYgKGZvdXQtPnJlbW90ZVZl cnNpb24gPj0gMTMwMDAwKQorCWlmIChmb3V0LT5yZW1vdGVWZXJzaW9uID49IDE1MDAwMCkKIAkJ YXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksCiAJCQkJCQkJICJTRUxFQ1QgcC50YWJsZW9pZCwg cC5vaWQsIHAucHVibmFtZSwgIgogCQkJCQkJCSAicC5wdWJvd25lciwgIgotCQkJCQkJCSAicC5w dWJhbGx0YWJsZXMsIHAucHViaW5zZXJ0LCBwLnB1YnVwZGF0ZSwgcC5wdWJkZWxldGUsIHAucHVi dHJ1bmNhdGUsIHAucHVidmlhcm9vdCAiCisJCQkJCQkJICJwLnB1YmFsbHRhYmxlcywgcC5wdWJp bnNlcnQsIHAucHVidXBkYXRlLCBwLnB1YmRlbGV0ZSwgcC5wdWJ0cnVuY2F0ZSwgcC5wdWJkZGws IHAucHVidmlhcm9vdCAiCiAJCQkJCQkJICJGUk9NIHBnX3B1YmxpY2F0aW9uIHAiKTsKIAllbHNl IGlmIChmb3V0LT5yZW1vdGVWZXJzaW9uID49IDExMDAwMCkKIAkJYXBwZW5kUFFFeHBCdWZmZXJT dHIocXVlcnksCiAJCQkJCQkJICJTRUxFQ1QgcC50YWJsZW9pZCwgcC5vaWQsIHAucHVibmFtZSwg IgogCQkJCQkJCSAicC5wdWJvd25lciwgIgotCQkJCQkJCSAicC5wdWJhbGx0YWJsZXMsIHAucHVi aW5zZXJ0LCBwLnB1YnVwZGF0ZSwgcC5wdWJkZWxldGUsIHAucHVidHJ1bmNhdGUsIGZhbHNlIEFT IHB1YnZpYXJvb3QgIgorCQkJCQkJCSAicC5wdWJhbGx0YWJsZXMsIHAucHViaW5zZXJ0LCBwLnB1 YnVwZGF0ZSwgcC5wdWJkZWxldGUsIHAucHVidHJ1bmNhdGUsIGZhbHNlIGFzIHAucHViZGRsLCBm YWxzZSBBUyBwdWJ2aWFyb290ICIKIAkJCQkJCQkgIkZST00gcGdfcHVibGljYXRpb24gcCIpOwog CWVsc2UKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksCiAJCQkJCQkJICJTRUxFQ1QgcC50 YWJsZW9pZCwgcC5vaWQsIHAucHVibmFtZSwgIgogCQkJCQkJCSAicC5wdWJvd25lciwgIgotCQkJ CQkJCSAicC5wdWJhbGx0YWJsZXMsIHAucHViaW5zZXJ0LCBwLnB1YnVwZGF0ZSwgcC5wdWJkZWxl dGUsIGZhbHNlIEFTIHB1YnRydW5jYXRlLCBmYWxzZSBBUyBwdWJ2aWFyb290ICIKKwkJCQkJCQkg InAucHViYWxsdGFibGVzLCBwLnB1Ymluc2VydCwgcC5wdWJ1cGRhdGUsIHAucHViZGVsZXRlLCBm YWxzZSBBUyBwdWJ0cnVuY2F0ZSwgZmFsc2UgYXMgcC5wdWJkZGwsIGZhbHNlIEFTIHB1YnZpYXJv b3QgIgogCQkJCQkJCSAiRlJPTSBwZ19wdWJsaWNhdGlvbiBwIik7CiAKIAlyZXMgPSBFeGVjdXRl U3FsUXVlcnkoZm91dCwgcXVlcnktPmRhdGEsIFBHUkVTX1RVUExFU19PSyk7CkBAIC0zOTQ0LDYg KzM5NDUsNyBAQCBnZXRQdWJsaWNhdGlvbnMoQXJjaGl2ZSAqZm91dCwgaW50ICpudW1QdWJsaWNh dGlvbnMpCiAJaV9wdWJ1cGRhdGUgPSBQUWZudW1iZXIocmVzLCAicHVidXBkYXRlIik7CiAJaV9w dWJkZWxldGUgPSBQUWZudW1iZXIocmVzLCAicHViZGVsZXRlIik7CiAJaV9wdWJ0cnVuY2F0ZSA9 IFBRZm51bWJlcihyZXMsICJwdWJ0cnVuY2F0ZSIpOworCWlfcHViZGRsID0gUFFmbnVtYmVyKHJl cywgInB1YmRkbCIpOwogCWlfcHVidmlhcm9vdCA9IFBRZm51bWJlcihyZXMsICJwdWJ2aWFyb290 Iik7CiAKIAlwdWJpbmZvID0gcGdfbWFsbG9jKG50dXBzICogc2l6ZW9mKFB1YmxpY2F0aW9uSW5m bykpOwpAQCAtMzk2Nyw2ICszOTY5LDggQEAgZ2V0UHVibGljYXRpb25zKEFyY2hpdmUgKmZvdXQs IGludCAqbnVtUHVibGljYXRpb25zKQogCQkJKHN0cmNtcChQUWdldHZhbHVlKHJlcywgaSwgaV9w dWJkZWxldGUpLCAidCIpID09IDApOwogCQlwdWJpbmZvW2ldLnB1YnRydW5jYXRlID0KIAkJCShz dHJjbXAoUFFnZXR2YWx1ZShyZXMsIGksIGlfcHVidHJ1bmNhdGUpLCAidCIpID09IDApOworCQlw dWJpbmZvW2ldLnB1YmRkbCA9CisJCQkoc3RyY21wKFBRZ2V0dmFsdWUocmVzLCBpLCBpX3B1YmRk bCksICJ0IikgPT0gMCk7CiAJCXB1YmluZm9baV0ucHVidmlhcm9vdCA9CiAJCQkoc3RyY21wKFBR Z2V0dmFsdWUocmVzLCBpLCBpX3B1YnZpYXJvb3QpLCAidCIpID09IDApOwogCkBAIC00MDQ2LDYg KzQwNTAsMTUgQEAgZHVtcFB1YmxpY2F0aW9uKEFyY2hpdmUgKmZvdXQsIGNvbnN0IFB1YmxpY2F0 aW9uSW5mbyAqcHViaW5mbykKIAkJZmlyc3QgPSBmYWxzZTsKIAl9CiAKKwlpZiAocHViaW5mby0+ cHViZGRsKQorCXsKKwkJaWYgKCFmaXJzdCkKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5 LCAiLCAiKTsKKworCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgImRkbCIpOworCQlmaXJz dCA9IGZhbHNlOworCX0KKwogCWFwcGVuZFBRRXhwQnVmZmVyQ2hhcihxdWVyeSwgJ1wnJyk7CiAK IAlpZiAocHViaW5mby0+cHVidmlhcm9vdCkKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9w Z19kdW1wLmggYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5oCmluZGV4IDQyN2Y1ZDQ1ZjYuLjY4 NTY4M2VlYjAgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmgKKysrIGIvc3Jj L2Jpbi9wZ19kdW1wL3BnX2R1bXAuaApAQCAtNjIwLDYgKzYyMCw3IEBAIHR5cGVkZWYgc3RydWN0 IF9QdWJsaWNhdGlvbkluZm8KIAlib29sCQlwdWJkZWxldGU7CiAJYm9vbAkJcHVidHJ1bmNhdGU7 CiAJYm9vbAkJcHVidmlhcm9vdDsKKwlib29sCQlwdWJkZGw7CiB9IFB1YmxpY2F0aW9uSW5mbzsK IAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfd2FsZHVtcC9ybWdyZGVzYy5jIGIvc3JjL2Jp bi9wZ193YWxkdW1wL3JtZ3JkZXNjLmMKaW5kZXggNmI4YzE3YmI0Yy4uNzkyZjQzODk1OSAxMDA2 NDQKLS0tIGEvc3JjL2Jpbi9wZ193YWxkdW1wL3JtZ3JkZXNjLmMKKysrIGIvc3JjL2Jpbi9wZ193 YWxkdW1wL3JtZ3JkZXNjLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJjb21tYW5kcy9z ZXF1ZW5jZS5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3RhYmxlc3BhY2UuaCIKICNpbmNsdWRlICJy ZXBsaWNhdGlvbi9tZXNzYWdlLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5o IgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL29yaWdpbi5oIgogI2luY2x1ZGUgInJtZ3JkZXNjLmgi CiAjaW5jbHVkZSAic3RvcmFnZS9zdGFuZGJ5ZGVmcy5oIgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9w c3FsL2Rlc2NyaWJlLmMgYi9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYwppbmRleCBjNjQ1ZDY2NDE4 Li4yZTk0ZmNhNzQ0IDEwMDY0NAotLS0gYS9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYworKysgYi9z cmMvYmluL3BzcWwvZGVzY3JpYmUuYwpAQCAtNjE1OSw3ICs2MTU5LDcgQEAgbGlzdFB1YmxpY2F0 aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCVBRRXhwQnVmZmVyRGF0YSBidWY7CiAJUEdyZXN1 bHQgICAqcmVzOwogCXByaW50UXVlcnlPcHQgbXlvcHQgPSBwc2V0LnBvcHQ7Ci0Jc3RhdGljIGNv bnN0IGJvb2wgdHJhbnNsYXRlX2NvbHVtbnNbXSA9IHtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxz ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2V9OworCXN0YXRpYyBjb25zdCBib29sIHRyYW5z bGF0ZV9jb2x1bW5zW10gPSB7ZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxz ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZX07CiAKIAlpZiAocHNldC5zdmVyc2lvbiA8IDEwMDAwMCkK IAl7CkBAIC02MTk0LDYgKzYxOTQsMTAgQEAgbGlzdFB1YmxpY2F0aW9ucyhjb25zdCBjaGFyICpw YXR0ZXJuKQogCQlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVmLAogCQkJCQkJICAiLFxuICBwdWJ2aWFy b290IEFTIFwiJXNcIiIsCiAJCQkJCQkgIGdldHRleHRfbm9vcCgiVmlhIHJvb3QiKSk7CisJaWYg KHBzZXQuc3ZlcnNpb24gPj0gMTQwMDAwKQorCQlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVmLAorCQkJ CQkJICAiLFxuICBwdWJkZGwgQVMgXCIlc1wiIiwKKwkJCQkJCSAgZ2V0dGV4dF9ub29wKCJERExz IikpOwogCiAJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmJ1ZiwKIAkJCQkJCSAiXG5GUk9NIHBnX2Nh dGFsb2cucGdfcHVibGljYXRpb25cbiIpOwpAQCAtNjI4NCw2ICs2Mjg4LDcgQEAgZGVzY3JpYmVQ dWJsaWNhdGlvbnMoY29uc3QgY2hhciAqcGF0dGVybikKIAlQR3Jlc3VsdCAgICpyZXM7CiAJYm9v bAkJaGFzX3B1YnRydW5jYXRlOwogCWJvb2wJCWhhc19wdWJ2aWFyb290OworCWJvb2wJCWhhc19w dWJkZGw7CiAKIAlQUUV4cEJ1ZmZlckRhdGEgdGl0bGU7CiAJcHJpbnRUYWJsZUNvbnRlbnQgY29u dDsKQEAgLTYzMDAsNiArNjMwNSw3IEBAIGRlc2NyaWJlUHVibGljYXRpb25zKGNvbnN0IGNoYXIg KnBhdHRlcm4pCiAKIAloYXNfcHVidHJ1bmNhdGUgPSAocHNldC5zdmVyc2lvbiA+PSAxMTAwMDAp OwogCWhhc19wdWJ2aWFyb290ID0gKHBzZXQuc3ZlcnNpb24gPj0gMTMwMDAwKTsKKwloYXNfcHVi ZGRsID0gIChwc2V0LnN2ZXJzaW9uID49IDE1MDAwMCk7CiAKIAlpbml0UFFFeHBCdWZmZXIoJmJ1 Zik7CiAKQEAgLTYzMTMsNiArNjMxOSw5IEBAIGRlc2NyaWJlUHVibGljYXRpb25zKGNvbnN0IGNo YXIgKnBhdHRlcm4pCiAJaWYgKGhhc19wdWJ2aWFyb290KQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0 cigmYnVmLAogCQkJCQkJCSAiLCBwdWJ2aWFyb290Iik7CisJaWYgKGhhc19wdWJkZGwpCisJCWFw cGVuZFBRRXhwQnVmZmVyU3RyKCZidWYsCisJCQkJCQkJICIsIHB1YmRkbCIpOwogCWFwcGVuZFBR RXhwQnVmZmVyU3RyKCZidWYsCiAJCQkJCQkgIlxuRlJPTSBwZ19jYXRhbG9nLnBnX3B1YmxpY2F0 aW9uXG4iKTsKIApAQCAtNjM2NCw2ICs2MzczLDggQEAgZGVzY3JpYmVQdWJsaWNhdGlvbnMoY29u c3QgY2hhciAqcGF0dGVybikKIAkJCW5jb2xzKys7CiAJCWlmIChoYXNfcHVidmlhcm9vdCkKIAkJ CW5jb2xzKys7CisJCWlmIChoYXNfcHViZGRsKQorCQkJbmNvbHMrKzsKIAogCQlpbml0UFFFeHBC dWZmZXIoJnRpdGxlKTsKIAkJcHJpbnRmUFFFeHBCdWZmZXIoJnRpdGxlLCBfKCJQdWJsaWNhdGlv biAlcyIpLCBwdWJuYW1lKTsKQEAgLTYzNzgsNiArNjM4OSw4IEBAIGRlc2NyaWJlUHVibGljYXRp b25zKGNvbnN0IGNoYXIgKnBhdHRlcm4pCiAJCQlwcmludFRhYmxlQWRkSGVhZGVyKCZjb250LCBn ZXR0ZXh0X25vb3AoIlRydW5jYXRlcyIpLCB0cnVlLCBhbGlnbik7CiAJCWlmIChoYXNfcHVidmlh cm9vdCkKIAkJCXByaW50VGFibGVBZGRIZWFkZXIoJmNvbnQsIGdldHRleHRfbm9vcCgiVmlhIHJv b3QiKSwgdHJ1ZSwgYWxpZ24pOworCQlpZiAoaGFzX3B1YmRkbCkKKwkJCXByaW50VGFibGVBZGRI ZWFkZXIoJmNvbnQsIGdldHRleHRfbm9vcCgiRERMcyIpLCB0cnVlLCBhbGlnbik7CiAKIAkJcHJp bnRUYWJsZUFkZENlbGwoJmNvbnQsIFBRZ2V0dmFsdWUocmVzLCBpLCAyKSwgZmFsc2UsIGZhbHNl KTsKIAkJcHJpbnRUYWJsZUFkZENlbGwoJmNvbnQsIFBRZ2V0dmFsdWUocmVzLCBpLCAzKSwgZmFs c2UsIGZhbHNlKTsKQEAgLTYzODgsNiArNjQwMSw4IEBAIGRlc2NyaWJlUHVibGljYXRpb25zKGNv bnN0IGNoYXIgKnBhdHRlcm4pCiAJCQlwcmludFRhYmxlQWRkQ2VsbCgmY29udCwgUFFnZXR2YWx1 ZShyZXMsIGksIDcpLCBmYWxzZSwgZmFsc2UpOwogCQlpZiAoaGFzX3B1YnZpYXJvb3QpCiAJCQlw cmludFRhYmxlQWRkQ2VsbCgmY29udCwgUFFnZXR2YWx1ZShyZXMsIGksIDgpLCBmYWxzZSwgZmFs c2UpOworCQlpZiAoaGFzX3B1YmRkbCkKKwkJCXByaW50VGFibGVBZGRDZWxsKCZjb250LCBQUWdl dHZhbHVlKHJlcywgaSwgOSksIGZhbHNlLCBmYWxzZSk7CiAKIAkJaWYgKCFwdWJhbGx0YWJsZXMp CiAJCXsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9ybWdybGlzdC5oIGIvc3JjL2lu Y2x1ZGUvYWNjZXNzL3JtZ3JsaXN0LmgKaW5kZXggMDAwYmNiZmRhZi4uMzdkZmQ0NTFmNiAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JtZ3JsaXN0LmgKKysrIGIvc3JjL2luY2x1ZGUv YWNjZXNzL3JtZ3JsaXN0LmgKQEAgLTQ3LDMgKzQ3LDQgQEAgUEdfUk1HUihSTV9DT01NSVRfVFNf SUQsICJDb21taXRUcyIsIGNvbW1pdF90c19yZWRvLCBjb21taXRfdHNfZGVzYywgY29tbWl0X3Rz X2kKIFBHX1JNR1IoUk1fUkVQTE9SSUdJTl9JRCwgIlJlcGxpY2F0aW9uT3JpZ2luIiwgcmVwbG9y aWdpbl9yZWRvLCByZXBsb3JpZ2luX2Rlc2MsIHJlcGxvcmlnaW5faWRlbnRpZnksIE5VTEwsIE5V TEwsIE5VTEwsIE5VTEwpCiBQR19STUdSKFJNX0dFTkVSSUNfSUQsICJHZW5lcmljIiwgZ2VuZXJp Y19yZWRvLCBnZW5lcmljX2Rlc2MsIGdlbmVyaWNfaWRlbnRpZnksIE5VTEwsIE5VTEwsIGdlbmVy aWNfbWFzaywgTlVMTCkKIFBHX1JNR1IoUk1fTE9HSUNBTE1TR19JRCwgIkxvZ2ljYWxNZXNzYWdl IiwgbG9naWNhbG1zZ19yZWRvLCBsb2dpY2FsbXNnX2Rlc2MsIGxvZ2ljYWxtc2dfaWRlbnRpZnks IE5VTEwsIE5VTEwsIE5VTEwsIGxvZ2ljYWxtc2dfZGVjb2RlKQorUEdfUk1HUihSTV9MT0dJQ0FM RERMTVNHX0lELCAiTG9naWNhbERETE1lc3NhZ2UiLCBsb2dpY2FsZGRsbXNnX3JlZG8sIGxvZ2lj YWxkZGxtc2dfZGVzYywgbG9naWNhbGRkbG1zZ19pZGVudGlmeSwgTlVMTCwgTlVMTCwgTlVMTCwg bG9naWNhbGRkbG1zZ19kZWNvZGUpCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3Bn X3Byb2MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAppbmRleCAyYzg3MTA2 ZWVmLi5jZTFiMTdmNWFiIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2Mu ZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKQEAgLTExODI5LDQgKzEx ODI5LDEzIEBACiB7IG9pZCA9PiAnNDY0MycsIGRlc2NyID0+ICdleHBhbmQganNvbiBmb3JtYXQg RERMIHRvIGEgcGxhaW4gRERMIGNvbW1hbmQnLAogICBwcm9uYW1lID0+ICdkZGxfZGVwYXJzZV9l eHBhbmRfY29tbWFuZCcsIHByb3JldHR5cGUgPT4gJ3RleHQnLAogICBwcm9hcmd0eXBlcyA9PiAn dGV4dCcsIHByb3NyYyA9PiAnZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQnIH0sCit7IG9pZCA9 PiAnNDY0NCcsIGRlc2NyID0+ICd0cmlnZ2VyIGZvciBkZGwgY29tbWFuZCBkZXBhcnNlJywKKyAg cHJvbmFtZSA9PiAncHVibGljYXRpb25fZGVwYXJzZV9kZGxfY29tbWFuZF9lbmQnLCBwcm9yZXR0 eXBlID0+ICdldmVudF90cmlnZ2VyJywKKyAgcHJvYXJndHlwZXMgPT4gJycsIHByb3NyYyA9PiAn cHVibGljYXRpb25fZGVwYXJzZV9kZGxfY29tbWFuZF9lbmQnIH0sCit7IG9pZCA9PiAnNDY0NScs IGRlc2NyID0+ICd0cmlnZ2VyIGZvciBkZGwgY29tbWFuZCBkZXBhcnNlIHN0YXJ0JywKKyAgcHJv bmFtZSA9PiAncHVibGljYXRpb25fZGVwYXJzZV9kZGxfY29tbWFuZF9zdGFydCcsIHByb3JldHR5 cGUgPT4gJ2V2ZW50X3RyaWdnZXInLAorICBwcm9hcmd0eXBlcyA9PiAnJywgcHJvc3JjID0+ICdw dWJsaWNhdGlvbl9kZXBhcnNlX2RkbF9jb21tYW5kX3N0YXJ0JyB9LAoreyBvaWQgPT4gJzQ2NDYn LCBkZXNjciA9PiAndHJpZ2dlciBmb3IgZGRsIGNvbW1hbmQgZGVwYXJzZSB0YWJsZSByZXdyaXRl JywKKyAgcHJvbmFtZSA9PiAncHVibGljYXRpb25fZGVwYXJzZV90YWJsZV9yZXdyaXRlJywgcHJv cmV0dHlwZSA9PiAnZXZlbnRfdHJpZ2dlcicsCisgIHByb2FyZ3R5cGVzID0+ICcnLCBwcm9zcmMg PT4gJ3B1YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVfcmV3cml0ZScgfSwKIF0KZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb24uaCBiL3NyYy9pbmNsdWRlL2NhdGFs b2cvcGdfcHVibGljYXRpb24uaAppbmRleCBlY2Y1YTI4ZTAwLi5kYWZkNDgzNzZhIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmgKKysrIGIvc3JjL2luY2x1 ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oCkBAIC01NCw2ICs1NCw5IEBAIENBVEFMT0cocGdf cHVibGljYXRpb24sNjEwNCxQdWJsaWNhdGlvblJlbGF0aW9uSWQpCiAKIAkvKiB0cnVlIGlmIHBh cnRpdGlvbiBjaGFuZ2VzIGFyZSBwdWJsaXNoZWQgdXNpbmcgcm9vdCBzY2hlbWEgKi8KIAlib29s CQlwdWJ2aWFyb290OworCisJLyogdHJ1ZSBpZiB0YWJsZSBjcmVhdGlvbnMgYXJlIHB1Ymxpc2hl ZCAqLworCWJvb2wJCXB1YmRkbDsKIH0gRm9ybURhdGFfcGdfcHVibGljYXRpb247CiAKIC8qIC0t LS0tLS0tLS0tLS0tLS0KQEAgLTcyLDYgKzc1LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUHVibGljYXRp b25BY3Rpb25zCiAJYm9vbAkJcHVidXBkYXRlOwogCWJvb2wJCXB1YmRlbGV0ZTsKIAlib29sCQlw dWJ0cnVuY2F0ZTsKKwlib29sCQlwdWJkZGw7CiB9IFB1YmxpY2F0aW9uQWN0aW9uczsKIAogdHlw ZWRlZiBzdHJ1Y3QgUHVibGljYXRpb25EZXNjCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21t YW5kcy9ldmVudF90cmlnZ2VyLmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9ldmVudF90cmlnZ2Vy LmgKaW5kZXggMTAwOTFjM2FhZi4uZmQyZWU3ZmZlNCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv Y29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50 X3RyaWdnZXIuaApAQCAtNzEsNyArNzEsOCBAQCBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJDb2xs ZWN0U2ltcGxlQ29tbWFuZChPYmplY3RBZGRyZXNzIGFkZHJlc3MsCiBleHRlcm4gdm9pZCBFdmVu dFRyaWdnZXJBbHRlclRhYmxlU3RhcnQoTm9kZSAqcGFyc2V0cmVlKTsKIGV4dGVybiB2b2lkIEV2 ZW50VHJpZ2dlckFsdGVyVGFibGVSZWxpZChPaWQgb2JqZWN0SWQpOwogZXh0ZXJuIHZvaWQgRXZl bnRUcmlnZ2VyQ29sbGVjdEFsdGVyVGFibGVTdWJjbWQoTm9kZSAqc3ViY21kLAotCQkJCQkJCQkJ CQkJT2JqZWN0QWRkcmVzcyBhZGRyZXNzKTsKKwkJCQkJCQkJCQkJCU9iamVjdEFkZHJlc3MgYWRk cmVzcywKKwkJCQkJCQkJCQkJCWJvb2wgcmV3cml0ZSk7CiBleHRlcm4gdm9pZCBFdmVudFRyaWdn ZXJBbHRlclRhYmxlRW5kKHZvaWQpOwogCiBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJDb2xsZWN0 R3JhbnQoSW50ZXJuYWxHcmFudCAqaXN0bXQpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVw bGljYXRpb24vZGRsbWVzc2FnZS5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGRsbWVzc2Fn ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmE4ZGNhODYzYjUKLS0t IC9kZXYvbnVsbAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgKQEAg LTAsMCArMSw2MCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBkZGxtZXNzYWdlLmgKKyAqCSAg IEV4cG9ydHMgZnJvbSByZXBsaWNhdGlvbi9sb2dpY2FsL2RkbG1lc3NhZ2UuYworICoKKyAqIENv cHlyaWdodCAoYykgMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAq CisgKiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgKKyAqLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICovCisjaWZuZGVmIFBHX0xPR0lDQUxfRERMX01FU1NBR0VfSAorI2RlZmluZSBQR19M T0dJQ0FMX0RETF9NRVNTQUdFX0gKKworI2luY2x1ZGUgImFjY2Vzcy94bG9nLmgiCisjaW5jbHVk ZSAiYWNjZXNzL3hsb2dkZWZzLmgiCisjaW5jbHVkZSAiYWNjZXNzL3hsb2dyZWFkZXIuaCIKKyNp bmNsdWRlICJub2Rlcy9ub2Rlcy5oIgorCisKKy8qCisgKiBTdXBwb3J0IGZvciBrZWVwaW5nIHRy YWNrIG9mIGRlcGFyc2VkIGNvbW1hbmRzLgorICovCit0eXBlZGVmIGVudW0gRGVwYXJzZWRDb21t YW5kVHlwZQoreworCURDVF9TaW1wbGVDbWQsCisJRENUX1RhYmxlRHJvcFN0YXJ0LAorCURDVF9U YWJsZURyb3BFbmQsCisJRENUX1RhYmxlQWx0ZXIsCisJRENUX09iamVjdENyZWF0ZSwKKwlEQ1Rf T2JqZWN0RHJvcAorfSBEZXBhcnNlZENvbW1hbmRUeXBlOworCisvKgorICogR2VuZXJpYyBsb2dp Y2FsIGRlY29kaW5nIERETCBtZXNzYWdlIHdhbCByZWNvcmQuCisgKi8KK3R5cGVkZWYgc3RydWN0 IHhsX2xvZ2ljYWxfZGRsX21lc3NhZ2UKK3sKKwlPaWQJCQkJCQlkYklkOwkJCS8qIGRhdGFiYXNl IE9pZCBlbWl0dGVkIGZyb20gKi8KKwlTaXplCQkJCQlwcmVmaXhfc2l6ZTsJLyogbGVuZ3RoIG9m IHByZWZpeCAqLworCU9pZAkJCQkJCXJlbGlkOwkJCS8qIGlkIG9mIHRoZSB0YWJsZSAqLworCURl cGFyc2VkQ29tbWFuZFR5cGUJCWNtZHR5cGU7CQkvKiB0eXBlIG9mIHNxbCBjb21tYW5kICovCisJ U2l6ZQkJCQkJbWVzc2FnZV9zaXplOwkgIC8qIHNpemUgb2YgdGhlIG1lc3NhZ2UgKi8KKworCS8q CisJICogcGF5bG9hZCwgaW5jbHVkaW5nIG51bGwtdGVybWluYXRlZCBwcmVmaXggb2YgbGVuZ3Ro IHByZWZpeF9zaXplCisJICovCisJY2hhcgkJbWVzc2FnZVtGTEVYSUJMRV9BUlJBWV9NRU1CRVJd OworfSB4bF9sb2dpY2FsX2RkbF9tZXNzYWdlOworCisjZGVmaW5lIFNpemVPZkxvZ2ljYWxERExN ZXNzYWdlCShvZmZzZXRvZih4bF9sb2dpY2FsX2RkbF9tZXNzYWdlLCBtZXNzYWdlKSkKKworZXh0 ZXJuIFhMb2dSZWNQdHIgTG9nTG9naWNhbERETE1lc3NhZ2UoY29uc3QgY2hhciAqcHJlZml4LCBP aWQgcmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJCQkJCSAgIGNvbnN0 IGNoYXIgKmRkbF9tZXNzYWdlLCBzaXplX3Qgc2l6ZSk7CisKKy8qIFJNR1IgQVBJKi8KKyNkZWZp bmUgWExPR19MT0dJQ0FMX0RETF9NRVNTQUdFCTB4MDAKK3ZvaWQJCWxvZ2ljYWxkZGxtc2dfcmVk byhYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCk7Cit2b2lkCQlsb2dpY2FsZGRsbXNnX2Rlc2MoU3Ry aW5nSW5mbyBidWYsIFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKTsKK2NvbnN0IGNoYXIgKmxvZ2lj YWxkZGxtc2dfaWRlbnRpZnkodWludDggaW5mbyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvcmVwbGljYXRpb24vZGVjb2RlLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9k ZWNvZGUuaAppbmRleCA3NDFiZjY1Y2Y3Li40MjdhN2I5OTdkIDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9yZXBsaWNhdGlvbi9kZWNvZGUuaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9k ZWNvZGUuaApAQCAtMjcsNiArMjcsNyBAQCBleHRlcm4gdm9pZCBoZWFwMl9kZWNvZGUoTG9naWNh bERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYpOwogZXh0ZXJuIHZv aWQgeGFjdF9kZWNvZGUoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVm ZmVyICpidWYpOwogZXh0ZXJuIHZvaWQgc3RhbmRieV9kZWNvZGUoTG9naWNhbERlY29kaW5nQ29u dGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYpOwogZXh0ZXJuIHZvaWQgbG9naWNhbG1z Z19kZWNvZGUoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpi dWYpOworZXh0ZXJuIHZvaWQgbG9naWNhbGRkbG1zZ19kZWNvZGUoTG9naWNhbERlY29kaW5nQ29u dGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYpOwogCiBleHRlcm4gdm9pZCBMb2dpY2Fs RGVjb2RpbmdQcm9jZXNzUmVjb3JkKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKIAkJCQkJ CQkJCQkgWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv cmVwbGljYXRpb24vbG9naWNhbHByb3RvLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dp Y2FscHJvdG8uaAppbmRleCA3ZWFhNGM5N2VkLi41ZDYxNzQ4NGZiIDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FscHJvdG8uaAorKysgYi9zcmMvaW5jbHVkZS9yZXBs aWNhdGlvbi9sb2dpY2FscHJvdG8uaApAQCAtNjEsNiArNjEsNyBAQCB0eXBlZGVmIGVudW0gTG9n aWNhbFJlcE1zZ1R5cGUKIAlMT0dJQ0FMX1JFUF9NU0dfUkVMQVRJT04gPSAnUicsCiAJTE9HSUNB TF9SRVBfTVNHX1RZUEUgPSAnWScsCiAJTE9HSUNBTF9SRVBfTVNHX01FU1NBR0UgPSAnTScsCisJ TE9HSUNBTF9SRVBfTVNHX0RETE1FU1NBR0UgPSAnTCcsCiAJTE9HSUNBTF9SRVBfTVNHX0JFR0lO X1BSRVBBUkUgPSAnYicsCiAJTE9HSUNBTF9SRVBfTVNHX1BSRVBBUkUgPSAnUCcsCiAJTE9HSUNB TF9SRVBfTVNHX0NPTU1JVF9QUkVQQVJFRCA9ICdLJywKQEAgLTIyOSw3ICsyMzAsMTEgQEAgZXh0 ZXJuIHZvaWQgbG9naWNhbHJlcF93cml0ZV90cnVuY2F0ZShTdHJpbmdJbmZvIG91dCwgVHJhbnNh Y3Rpb25JZCB4aWQsCiBleHRlcm4gTGlzdCAqbG9naWNhbHJlcF9yZWFkX3RydW5jYXRlKFN0cmlu Z0luZm8gaW4sCiAJCQkJCQkJCQkgIGJvb2wgKmNhc2NhZGUsIGJvb2wgKnJlc3RhcnRfc2Vxcyk7 CiBleHRlcm4gdm9pZCBsb2dpY2FscmVwX3dyaXRlX21lc3NhZ2UoU3RyaW5nSW5mbyBvdXQsIFRy YW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbiwKLQkJCQkJCQkJCSBib29sIHRyYW5zYWN0 aW9uYWwsIGNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBzeiwgY29uc3QgY2hhciAqbWVzc2FnZSk7 CisJCQkJCQkJCQkgYm9vbCB0cmFuc2FjdGlvbmFsLCBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJ CQkJCQkgU2l6ZSBzeiwgY29uc3QgY2hhciAqbWVzc2FnZSk7CitleHRlcm4gdm9pZCBsb2dpY2Fs cmVwX3dyaXRlX2RkbG1lc3NhZ2UoU3RyaW5nSW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQgeGlkLCBY TG9nUmVjUHRyIGxzbiwKKwkJCQkJCQkJCQljb25zdCBjaGFyICpwcmVmaXgsIFNpemUgc3osIGNv bnN0IGNoYXIgKm1lc3NhZ2UpOworZXh0ZXJuIGNoYXIgKmxvZ2ljYWxyZXBfcmVhZF9kZGxtZXNz YWdlKFN0cmluZ0luZm8gaW4sIFhMb2dSZWNQdHIgKmxzbiwgY29uc3QgY2hhciAqKnByZWZpeCwg U2l6ZSAqc3opOwogZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF93cml0ZV9yZWwoU3RyaW5nSW5mbyBv dXQsIFRyYW5zYWN0aW9uSWQgeGlkLAogCQkJCQkJCQkgUmVsYXRpb24gcmVsLCBCaXRtYXBzZXQg KmNvbHVtbnMpOwogZXh0ZXJuIExvZ2ljYWxSZXBSZWxhdGlvbiAqbG9naWNhbHJlcF9yZWFkX3Jl bChTdHJpbmdJbmZvIGluKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL291 dHB1dF9wbHVnaW4uaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL291dHB1dF9wbHVnaW4uaApp bmRleCBiN2QyOGQ3MDQ1Li43NjNlNDNmNmJlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBs aWNhdGlvbi9vdXRwdXRfcGx1Z2luLmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vb3V0 cHV0X3BsdWdpbi5oCkBAIC05MCw2ICs5MCwxOCBAQCB0eXBlZGVmIHZvaWQgKCpMb2dpY2FsRGVj b2RlTWVzc2FnZUNCKSAoc3RydWN0IExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKIAkJCQkJ CQkJCQlTaXplIG1lc3NhZ2Vfc2l6ZSwKIAkJCQkJCQkJCQljb25zdCBjaGFyICptZXNzYWdlKTsK IAorLyoKKyAqIENhbGxlZCBmb3IgdGhlIGxvZ2ljYWwgZGVjb2RpbmcgRERMIG1lc3NhZ2VzLgor ICovCit0eXBlZGVmIHZvaWQgKCpMb2dpY2FsRGVjb2RlRERMTWVzc2FnZUNCKSAoc3RydWN0IExv Z2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKKwkJCQkJCQkJCQkgICBSZW9yZGVyQnVmZmVyVFhO ICp0eG4sCisJCQkJCQkJCQkJICAgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJCQkJCQkg ICBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJCQkJCQkJICAgT2lkIHJlbGlkLAorCQkJCQkJCQkJ CSAgIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJCQkJCQkgICBTaXplIG1lc3Nh Z2Vfc2l6ZSwKKwkJCQkJCQkJCQkgICBjb25zdCBjaGFyICptZXNzYWdlKTsKKwogLyoKICAqIEZp bHRlciBjaGFuZ2VzIGJ5IG9yaWdpbi4KICAqLwpAQCAtMjAxLDYgKzIxMywxOSBAQCB0eXBlZGVm IHZvaWQgKCpMb2dpY2FsRGVjb2RlU3RyZWFtTWVzc2FnZUNCKSAoc3RydWN0IExvZ2ljYWxEZWNv ZGluZ0NvbnRleHQgKmN0eAogCQkJCQkJCQkJCQkgIFNpemUgbWVzc2FnZV9zaXplLAogCQkJCQkJ CQkJCQkgIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOwogCisvKgorICogQ2FsbGJhY2sgZm9yIHN0cmVh bWluZyBsb2dpY2FsIGRlY29kaW5nIERETCBtZXNzYWdlcyBmcm9tIGluLXByb2dyZXNzCisgKiB0 cmFuc2FjdGlvbnMuCisgKi8KK3R5cGVkZWYgdm9pZCAoKkxvZ2ljYWxEZWNvZGVTdHJlYW1ERExN ZXNzYWdlQ0IpIChzdHJ1Y3QgTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAorCQkJCQkJCQkJ CQkJIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJCQkJCQkJCSBYTG9nUmVjUHRyIG1lc3Nh Z2VfbHNuLAorCQkJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJCQkJCQkJCSBP aWQgcmVsaWQsCisJCQkJCQkJCQkJCQkgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJ CQkJCQkJCQkJIFNpemUgbWVzc2FnZV9zaXplLAorCQkJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKm1l c3NhZ2UpOworCiAvKgogICogQ2FsbGJhY2sgZm9yIHN0cmVhbWluZyB0cnVuY2F0ZXMgZnJvbSBp bi1wcm9ncmVzcyB0cmFuc2FjdGlvbnMuCiAgKi8KQEAgLTIyMSw2ICsyNDYsNyBAQCB0eXBlZGVm IHN0cnVjdCBPdXRwdXRQbHVnaW5DYWxsYmFja3MKIAlMb2dpY2FsRGVjb2RlVHJ1bmNhdGVDQiB0 cnVuY2F0ZV9jYjsKIAlMb2dpY2FsRGVjb2RlQ29tbWl0Q0IgY29tbWl0X2NiOwogCUxvZ2ljYWxE ZWNvZGVNZXNzYWdlQ0IgbWVzc2FnZV9jYjsKKwlMb2dpY2FsRGVjb2RlRERMTWVzc2FnZUNCIGRk bG1lc3NhZ2VfY2I7CiAJTG9naWNhbERlY29kZUZpbHRlckJ5T3JpZ2luQ0IgZmlsdGVyX2J5X29y aWdpbl9jYjsKIAlMb2dpY2FsRGVjb2RlU2h1dGRvd25DQiBzaHV0ZG93bl9jYjsKIApAQCAtMjM5 LDYgKzI2NSw3IEBAIHR5cGVkZWYgc3RydWN0IE91dHB1dFBsdWdpbkNhbGxiYWNrcwogCUxvZ2lj YWxEZWNvZGVTdHJlYW1Db21taXRDQiBzdHJlYW1fY29tbWl0X2NiOwogCUxvZ2ljYWxEZWNvZGVT dHJlYW1DaGFuZ2VDQiBzdHJlYW1fY2hhbmdlX2NiOwogCUxvZ2ljYWxEZWNvZGVTdHJlYW1NZXNz YWdlQ0Igc3RyZWFtX21lc3NhZ2VfY2I7CisJTG9naWNhbERlY29kZVN0cmVhbURETE1lc3NhZ2VD QiBzdHJlYW1fZGRsbWVzc2FnZV9jYjsKIAlMb2dpY2FsRGVjb2RlU3RyZWFtVHJ1bmNhdGVDQiBz dHJlYW1fdHJ1bmNhdGVfY2I7CiB9IE91dHB1dFBsdWdpbkNhbGxiYWNrczsKIApkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcGdvdXRwdXQuaCBiL3NyYy9pbmNsdWRlL3JlcGxp Y2F0aW9uL3Bnb3V0cHV0LmgKaW5kZXggMDIwMjc1NTBlMi4uODNlMGIxZTJlNSAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcGdvdXRwdXQuaAorKysgYi9zcmMvaW5jbHVkZS9y ZXBsaWNhdGlvbi9wZ291dHB1dC5oCkBAIC0yNSw2ICsyNSw3IEBAIHR5cGVkZWYgc3RydWN0IFBH T3V0cHV0RGF0YQogCXVpbnQzMgkJcHJvdG9jb2xfdmVyc2lvbjsKIAlMaXN0CSAgICpwdWJsaWNh dGlvbl9uYW1lczsKIAlMaXN0CSAgICpwdWJsaWNhdGlvbnM7CisJTGlzdAkgICAqZGVsZXRlZF9y ZWxpZHM7CiAJYm9vbAkJYmluYXJ5OwogCWJvb2wJCXN0cmVhbWluZzsKIAlib29sCQltZXNzYWdl czsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaCBi L3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaAppbmRleCAwMmI1OWExOTMx Li4wYjFhOTE2MWM1IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9yZW9yZGVy YnVmZmVyLmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oCkBA IC0xMSw2ICsxMSw4IEBACiAKICNpbmNsdWRlICJhY2Nlc3MvaHR1cF9kZXRhaWxzLmgiCiAjaW5j bHVkZSAibGliL2lsaXN0LmgiCisjaW5jbHVkZSAibm9kZXMvbm9kZXMuaCIKKyNpbmNsdWRlICJy ZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zaW52YWwuaCIKICNp bmNsdWRlICJ1dGlscy9oc2VhcmNoLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsY2FjaGUuaCIKQEAg LTU2LDYgKzU4LDcgQEAgdHlwZWRlZiBlbnVtIFJlb3JkZXJCdWZmZXJDaGFuZ2VUeXBlCiAJUkVP UkRFUl9CVUZGRVJfQ0hBTkdFX0lOU0VSVCwKIAlSRU9SREVSX0JVRkZFUl9DSEFOR0VfVVBEQVRF LAogCVJFT1JERVJfQlVGRkVSX0NIQU5HRV9ERUxFVEUsCisJUkVPUkRFUl9CVUZGRVJfQ0hBTkdF X0RETE1FU1NBR0UsCiAJUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX01FU1NBR0UsCiAJUkVPUkRFUl9C VUZGRVJfQ0hBTkdFX0lOVkFMSURBVElPTiwKIAlSRU9SREVSX0JVRkZFUl9DSEFOR0VfSU5URVJO QUxfU05BUFNIT1QsCkBAIC0xMzAsNiArMTMzLDE2IEBAIHR5cGVkZWYgc3RydWN0IFJlb3JkZXJC dWZmZXJDaGFuZ2UKIAkJCWNoYXIJICAgKm1lc3NhZ2U7CiAJCX0JCQltc2c7CiAKKwkJLyogRERM IE1lc3NhZ2UuICovCisJCXN0cnVjdAorCQl7CisJCQljaGFyCSAgICpwcmVmaXg7CisJCQlTaXpl CQltZXNzYWdlX3NpemU7CisJCQljaGFyCSAgICptZXNzYWdlOworCQkJT2lkCQkJcmVsaWQ7CisJ CQlEZXBhcnNlZENvbW1hbmRUeXBlCWNtZHR5cGU7CisJCX0JCQlkZGxtc2c7CisKIAkJLyogTmV3 IHNuYXBzaG90LCBzZXQgd2hlbiBhY3Rpb24gPT0gKl9JTlRFUk5BTF9TTkFQU0hPVCAqLwogCQlT bmFwc2hvdAlzbmFwc2hvdDsKIApAQCAtNDM1LDYgKzQ0OCwxNiBAQCB0eXBlZGVmIHZvaWQgKCpS ZW9yZGVyQnVmZmVyTWVzc2FnZUNCKSAoUmVvcmRlckJ1ZmZlciAqcmIsCiAJCQkJCQkJCQkJY29u c3QgY2hhciAqcHJlZml4LCBTaXplIHN6LAogCQkJCQkJCQkJCWNvbnN0IGNoYXIgKm1lc3NhZ2Up OwogCisvKiBEREwgbWVzc2FnZSBjYWxsYmFjayBzaWduYXR1cmUgKi8KK3R5cGVkZWYgdm9pZCAo KlJlb3JkZXJCdWZmZXJERExNZXNzYWdlQ0IpIChSZW9yZGVyQnVmZmVyICpyYiwKKwkJCQkJCQkJ CQkgICBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJCQkJICAgWExvZ1JlY1B0ciBtZXNz YWdlX2xzbiwKKwkJCQkJCQkJCQkgICBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJCQkJCQkJICAg T2lkIHJlbGlkLAorCQkJCQkJCQkJCSAgIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJ CQkJCQkJCQkgICBTaXplIHN6LAorCQkJCQkJCQkJCSAgIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOwor CiAvKiBiZWdpbiBwcmVwYXJlIGNhbGxiYWNrIHNpZ25hdHVyZSAqLwogdHlwZWRlZiB2b2lkICgq UmVvcmRlckJ1ZmZlckJlZ2luUHJlcGFyZUNCKSAoUmVvcmRlckJ1ZmZlciAqcmIsCiAJCQkJCQkJ CQkJCSBSZW9yZGVyQnVmZmVyVFhOICp0eG4pOwpAQCAtNTAxLDYgKzUyNCwxNyBAQCB0eXBlZGVm IHZvaWQgKCpSZW9yZGVyQnVmZmVyU3RyZWFtTWVzc2FnZUNCKSAoCiAJCQkJCQkJCQkJCSAgY29u c3QgY2hhciAqcHJlZml4LCBTaXplIHN6LAogCQkJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKm1lc3Nh Z2UpOwogCisvKiBzdHJlYW0gRERMIG1lc3NhZ2UgY2FsbGJhY2sgc2lnbmF0dXJlICovCit0eXBl ZGVmIHZvaWQgKCpSZW9yZGVyQnVmZmVyU3RyZWFtRERMTWVzc2FnZUNCKSAoCisJCQkJCQkJCQkJ CQkgUmVvcmRlckJ1ZmZlciAqcmIsCisJCQkJCQkJCQkJCQkgUmVvcmRlckJ1ZmZlclRYTiAqdHhu LAorCQkJCQkJCQkJCQkJIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJCQkJCQkJCQkgY29u c3QgY2hhciAqcHJlZml4LAorCQkJCQkJCQkJCQkJIE9pZCByZWxpZCwKKwkJCQkJCQkJCQkJCSBE ZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJCQkJCQkgU2l6ZSBzeiwKKwkJCQkJ CQkJCQkJCSBjb25zdCBjaGFyICptZXNzYWdlKTsKKwogLyogc3RyZWFtIHRydW5jYXRlIGNhbGxi YWNrIHNpZ25hdHVyZSAqLwogdHlwZWRlZiB2b2lkICgqUmVvcmRlckJ1ZmZlclN0cmVhbVRydW5j YXRlQ0IpICgKIAkJCQkJCQkJCQkJICAgUmVvcmRlckJ1ZmZlciAqcmIsCkBAIC01NTIsNiArNTg2 LDcgQEAgc3RydWN0IFJlb3JkZXJCdWZmZXIKIAlSZW9yZGVyQnVmZmVyQXBwbHlUcnVuY2F0ZUNC IGFwcGx5X3RydW5jYXRlOwogCVJlb3JkZXJCdWZmZXJDb21taXRDQiBjb21taXQ7CiAJUmVvcmRl ckJ1ZmZlck1lc3NhZ2VDQiBtZXNzYWdlOworCVJlb3JkZXJCdWZmZXJERExNZXNzYWdlQ0IgZGRs bWVzc2FnZTsKIAogCS8qCiAJICogQ2FsbGJhY2tzIHRvIGJlIGNhbGxlZCB3aGVuIHN0cmVhbWlu ZyBhIHRyYW5zYWN0aW9uIGF0IHByZXBhcmUgdGltZS4KQEAgLTU3MSw2ICs2MDYsNyBAQCBzdHJ1 Y3QgUmVvcmRlckJ1ZmZlcgogCVJlb3JkZXJCdWZmZXJTdHJlYW1Db21taXRDQiBzdHJlYW1fY29t bWl0OwogCVJlb3JkZXJCdWZmZXJTdHJlYW1DaGFuZ2VDQiBzdHJlYW1fY2hhbmdlOwogCVJlb3Jk ZXJCdWZmZXJTdHJlYW1NZXNzYWdlQ0Igc3RyZWFtX21lc3NhZ2U7CisJUmVvcmRlckJ1ZmZlclN0 cmVhbURETE1lc3NhZ2VDQiBzdHJlYW1fZGRsbWVzc2FnZTsKIAlSZW9yZGVyQnVmZmVyU3RyZWFt VHJ1bmNhdGVDQiBzdHJlYW1fdHJ1bmNhdGU7CiAKIAkvKgpAQCAtNjUwLDYgKzY4Niw5IEBAIGV4 dGVybiB2b2lkIFJlb3JkZXJCdWZmZXJRdWV1ZU1lc3NhZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFRy YW5zYWN0aW9uSWQgeGlkLAogCQkJCQkJCQkJICBTbmFwc2hvdCBzbmFwLCBYTG9nUmVjUHRyIGxz biwKIAkJCQkJCQkJCSAgYm9vbCB0cmFuc2FjdGlvbmFsLCBjb25zdCBjaGFyICpwcmVmaXgsCiAJ CQkJCQkJCQkgIFNpemUgbWVzc2FnZV9zaXplLCBjb25zdCBjaGFyICptZXNzYWdlKTsKK2V4dGVy biB2b2lkIFJlb3JkZXJCdWZmZXJRdWV1ZURETE1lc3NhZ2UoUmVvcmRlckJ1ZmZlciAqLCBUcmFu c2FjdGlvbklkLCBYTG9nUmVjUHRyIGxzbiwKKwkJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKnByZWZp eCwgU2l6ZSBtZXNzYWdlX3NpemUsCisJCQkJCQkJCQkJICBjb25zdCBjaGFyICptZXNzYWdlLCBP aWQgcmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSk7CiBleHRlcm4gdm9pZCBSZW9y ZGVyQnVmZmVyQ29tbWl0KFJlb3JkZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlvbklkIHhpZCwKIAkJ CQkJCQkJWExvZ1JlY1B0ciBjb21taXRfbHNuLCBYTG9nUmVjUHRyIGVuZF9sc24sCiAJCQkJCQkJ CVRpbWVzdGFtcFR6IGNvbW1pdF90aW1lLCBSZXBPcmlnaW5JZCBvcmlnaW5faWQsIFhMb2dSZWNQ dHIgb3JpZ2luX2xzbik7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3Bz cWwub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wc3FsLm91dAppbmRleCBhN2Y1NzAw ZWRjLi5iZmM3M2MyMzI4IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3Bz cWwub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHNxbC5vdXQKQEAgLTU5NzAs OSArNTk3MCw5IEBAIExpc3Qgb2Ygc2NoZW1hcwogKDAgcm93cykKIAogXGRScCAibm8uc3VjaC5w dWJsaWNhdGlvbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgcHVibGlj YXRpb25zCi0gTmFtZSB8IE93bmVyIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwg RGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgcHVibGljYXRpb25zCisg TmFtZSB8IE93bmVyIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0t LS0tLQogKDAgcm93cykKIAogXGRScyAibm8uc3VjaC5zdWJzY3JpcHRpb24iCmRpZmYgLS1naXQg YS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dCBiL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0CmluZGV4IDQyN2Y4N2VhMDcuLjJiN2NkMGQ1 OTYgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0 CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0CkBAIC0zMCwy MCArMzAsMjAgQEAgRVJST1I6ICBjb25mbGljdGluZyBvciByZWR1bmRhbnQgb3B0aW9ucwogTElO RSAxOiAuLi51Yl94eHggV0lUSCAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSAndHJ1ZScs IHB1Ymxpc2hfdmkuLi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBeCiBcZFJwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKLSAgICAgICAgTmFtZSAgICAg ICAgfCAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHRlc3RwaWJfaW5zX3Ry dW5jdCB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg ZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCi0gdGVzdHB1Yl9kZWZhdWx0ICAgIHwg cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgfCB0ICAgICAg IHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKKyAgICAgICAgTmFtZSAg ICAgICAgfCAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0t CisgdGVzdHBpYl9pbnNfdHJ1bmN0IHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYgICAgICAg IHwgZgorIHRlc3RwdWJfZGVmYXVsdCAgICB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYg ICAgICAgICAgfCBmICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmICAg ICAgICB8IGYKICgyIHJvd3MpCiAKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZGVmYXVsdCBT RVQgKHB1Ymxpc2ggPSAnaW5zZXJ0LCB1cGRhdGUsIGRlbGV0ZScpOwogXGRScAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgcHVibGljYXRpb25z Ci0gICAgICAgIE5hbWUgICAgICAgIHwgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRh YmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0KLSB0ZXN0cGliX2luc190cnVuY3QgfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAg ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgotIHRl c3RwdWJfZGVmYXVsdCAgICB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgcHVibGljYXRp b25zCisgICAgICAgIE5hbWUgICAgICAgIHwgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSBy b290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tKy0tLS0tLQorIHRlc3RwaWJfaW5zX3RydW5jdCB8IHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBm ICAgICAgICAgfCBmICAgICAgICB8IGYKKyB0ZXN0cHViX2RlZmF1bHQgICAgfCByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCiAoMiByb3dzKQogCiAtLS0gYWRkaW5nIHRhYmxl cwpAQCAtODcsMTAgKzg3LDEwIEBAIFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CiAtLSBzaG91 bGQgYmUgYWJsZSB0byBhZGQgc2NoZW1hIHRvICdGT1IgVEFCTEUnIHB1YmxpY2F0aW9uCiBBTFRF UiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlIEFERCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90 ZXN0OwogXGRScCsgdGVzdHB1Yl9mb3J0YWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRl cyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlCisgICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0t LS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAg ICAicHVibGljLnRlc3RwdWJfdGJsMSIKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CkBAIC05OSwyMCAr OTksMjAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIC0tIHNob3VsZCBiZSBhYmxlIHRvIGRyb3Ag c2NoZW1hIGZyb20gJ0ZPUiBUQUJMRScgcHVibGljYXRpb24KIEFMVEVSIFBVQkxJQ0FUSU9OIHRl c3RwdWJfZm9ydGFibGUgRFJPUCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0OwogXGRScCsgdGVz dHB1Yl9mb3J0YWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlv biB0ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0 ZXN0cHViX2ZvcnRhYmxlCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8 IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERM cyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3Nf cHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3Rw dWJfdGJsMSIKIAogLS0gc2hvdWxkIGJlIGFibGUgdG8gc2V0IHNjaGVtYSB0byAnRk9SIFRBQkxF JyBwdWJsaWNhdGlvbgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZSBTRVQgVEFC TEVTIElOIFNDSEVNQSBwdWJfdGVzdDsKIFxkUnArIHRlc3RwdWJfZm9ydGFibGUKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZQotICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZQorICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAg ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAg ICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdCIKIApAQCAtMTIzLDEw ICsxMjMsMTAgQEAgQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9yc2NoZW1hIEZPUiBUQUJM RVMgSU4gU0NIRU1BIHB1Yl90ZXN0OwogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9yX3Ri bF9zY2hlbWEgRk9SIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QsIFRBQkxFIHB1Yl90ZXN0LnRl c3RwdWJfbm9wazsKIFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CiBcZFJwKyB0ZXN0cHViX2Zv cl90Ymxfc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRl c3RwdWJfZm9yX3RibF9zY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRp b25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRl c3RwdWJfZm9yX3RibF9zY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg fCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJfdGVz dC50ZXN0cHViX25vcGsiCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgpAQCAtMTM1LDEwICsxMzUsMTAg QEAgVGFibGVzIGZyb20gc2NoZW1hczoKIC0tIHNob3VsZCBiZSBhYmxlIHRvIGFkZCBhIHRhYmxl IG9mIHRoZSBzYW1lIHNjaGVtYSB0byB0aGUgc2NoZW1hIHB1YmxpY2F0aW9uCiBBTFRFUiBQVUJM SUNBVElPTiB0ZXN0cHViX2ZvcnNjaGVtYSBBREQgVEFCTEUgcHViX3Rlc3QudGVzdHB1Yl9ub3Br OwogXGRScCsgdGVzdHB1Yl9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAg ICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMg fCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVz c19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1Yl9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAg fCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0t LS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAg ICJwdWJfdGVzdC50ZXN0cHViX25vcGsiCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgpAQCAtMTQ3LDEw ICsxNDcsMTAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIC0tIHNob3VsZCBiZSBhYmxlIHRvIGRy b3AgdGhlIHRhYmxlCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnNjaGVtYSBEUk9QIFRB QkxFIHB1Yl90ZXN0LnRlc3RwdWJfbm9wazsKIFxkUnArIHRlc3RwdWJfZm9yc2NoZW1hCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JzY2hlbWEK LSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0 ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yc2NoZW1hCisg ICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVz IHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8 IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBm ICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0IgogCkBAIC0x NjEsMTAgKzE2MSwxMCBAQCBFUlJPUjogIHJlbGF0aW9uICJ0ZXN0cHViX25vcGsiIGlzIG5vdCBw YXJ0IG9mIHRoZSBwdWJsaWNhdGlvbgogLS0gc2hvdWxkIGJlIGFibGUgdG8gc2V0IHRhYmxlIHRv IHNjaGVtYSBwdWJsaWNhdGlvbgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3JzY2hlbWEg U0VUIFRBQkxFIHB1Yl90ZXN0LnRlc3RwdWJfbm9wazsKIFxkUnArIHRlc3RwdWJfZm9yc2NoZW1h Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3Jz Y2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yc2No ZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBV cGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg ICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHViX3Rlc3QudGVzdHB1Yl9ub3BrIgog CkBAIC0xODYsMTAgKzE4NiwxMCBAQCBQdWJsaWNhdGlvbnM6CiAgICAgInRlc3RwdWJfZm9yYWxs dGFibGVzIgogCiBcZFJwKyB0ZXN0cHViX2ZvcmFsbHRhYmxlcwotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JhbGx0YWJsZXMKLSAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IHQgICAgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcmFsbHRhYmxlcworICAgICAgICAgIE93 bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMg fCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCB0ICAgICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBm CiAoMSByb3cpCiAKIERST1AgVEFCTEUgdGVzdHB1Yl90YmwyOwpAQCAtMjAxLDE5ICsyMDEsMTkg QEAgQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWIzIEZPUiBUQUJMRSB0ZXN0cHViX3RibDM7CiBD UkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjQgRk9SIFRBQkxFIE9OTFkgdGVzdHB1Yl90YmwzOwog UkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKIFxkUnArIHRlc3RwdWIzCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMwotICAgICAgICAgIE93 bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMg fCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIzCisgICAgICAgICAgT3duZXIgICAg ICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5j YXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxl czoKICAgICAicHVibGljLnRlc3RwdWJfdGJsMyIKICAgICAicHVibGljLnRlc3RwdWJfdGJsM2Ei CiAKIFxkUnArIHRlc3RwdWI0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ dWJsaWNhdGlvbiB0ZXN0cHViNAotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAK LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0 aW9uIHRlc3RwdWI0CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IElu c2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJf dGJsMyIKIApAQCAtMjM0LDEwICsyMzQsMTAgQEAgVVBEQVRFIHRlc3RwdWJfcGFydGVkMSBTRVQg YSA9IDE7CiAtLSBvbmx5IHBhcmVudCBpcyBsaXN0ZWQgYXMgYmVpbmcgaW4gcHVibGljYXRpb24s IG5vdCB0aGUgcGFydGl0aW9uCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnBhcnRlZCBB REQgVEFCTEUgdGVzdHB1Yl9wYXJ0ZWQ7CiBcZFJwKyB0ZXN0cHViX2ZvcnBhcnRlZAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ycGFydGVkCi0g ICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVz IHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnBhcnRlZAorICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAg ICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3BhcnRlZCIKIApAQCAtMjUy LDEwICsyNTIsMTAgQEAgQUxURVIgVEFCTEUgdGVzdHB1Yl9wYXJ0ZWQgREVUQUNIIFBBUlRJVElP TiB0ZXN0cHViX3BhcnRlZDE7CiBVUERBVEUgdGVzdHB1Yl9wYXJ0ZWQxIFNFVCBhID0gMTsKIEFM VEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ycGFydGVkIFNFVCAocHVibGlzaF92aWFfcGFydGl0 aW9uX3Jvb3QgPSB0cnVlKTsKIFxkUnArIHRlc3RwdWJfZm9ycGFydGVkCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JwYXJ0ZWQKLSAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCB0CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ycGFydGVkCisgICAgICAgICAg T3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRl cyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCB0ICAgICAgICB8 IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfcGFydGVkIgogCkBAIC0yODQsMTAgKzI4 NCwxMCBAQCBTRVQgY2xpZW50X21pbl9tZXNzYWdlcyA9ICdFUlJPUic7CiBDUkVBVEUgUFVCTElD QVRJT04gdGVzdHB1YjUgRk9SIFRBQkxFIHRlc3RwdWJfcmZfdGJsMSwgdGVzdHB1Yl9yZl90Ymwy IFdIRVJFIChjIDw+ICd0ZXN0JyBBTkQgZCA8IDUpIFdJVEggKHB1Ymxpc2ggPSAnaW5zZXJ0Jyk7 CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogXGRScCsgdGVzdHB1YjUKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI1Ci0gICAgICAgICAg T3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRl cyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8 IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjUKKyAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1 bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQg ICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFi bGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl9yZl90YmwxIgogICAgICJwdWJsaWMudGVzdHB1Yl9y Zl90YmwyIiBXSEVSRSAoKGMgPD4gJ3Rlc3QnOjp0ZXh0KSBBTkQgKGQgPCA1KSkKQEAgLTMwMCwx MCArMzAwLDEwIEBAIFRhYmxlczoKIAogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjUgQUREIFRB QkxFIHRlc3RwdWJfcmZfdGJsMyBXSEVSRSAoZSA+IDEwMDAgQU5EIGUgPCAyMDAwKTsKIFxkUnAr IHRlc3RwdWI1Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlv biB0ZXN0cHViNQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3Rw dWI1CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBV cGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAg ICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMSIK ICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMiIgV0hFUkUgKChjIDw+ICd0ZXN0Jzo6dGV4dCkg QU5EIChkIDwgNSkpCkBAIC0zMTksMTAgKzMxOSwxMCBAQCBQdWJsaWNhdGlvbnM6CiAKIEFMVEVS IFBVQkxJQ0FUSU9OIHRlc3RwdWI1IERST1AgVEFCTEUgdGVzdHB1Yl9yZl90YmwyOwogXGRScCsg dGVzdHB1YjUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9u IHRlc3RwdWI1Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2Vy dHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1 YjUKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAg ICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl9yZl90YmwxIgog ICAgICJwdWJsaWMudGVzdHB1Yl9yZl90YmwzIiBXSEVSRSAoKGUgPiAxMDAwKSBBTkQgKGUgPCAy MDAwKSkKQEAgLTMzMCwxMCArMzMwLDEwIEBAIFRhYmxlczoKIC0tIHJlbW92ZSB0ZXN0cHViX3Jm X3RibDEgYW5kIGFkZCB0ZXN0cHViX3JmX3RibDMgYWdhaW4gKGFub3RoZXIgV0hFUkUgZXhwcmVz c2lvbikKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI1IFNFVCBUQUJMRSB0ZXN0cHViX3JmX3Ri bDMgV0hFUkUgKGUgPiAzMDAgQU5EIGUgPCA1MDApOwogXGRScCsgdGVzdHB1YjUKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI1Ci0gICAgICAg ICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVs ZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAg ICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjUKKyAgICAgICAgICBPd25l ciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwg VHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8 IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgZgog VGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl9yZl90YmwzIiBXSEVSRSAoKGUgPiAzMDApIEFO RCAoZSA8IDUwMCkpCiAKQEAgLTM2NiwxMCArMzY2LDEwIEBAIFNFVCBjbGllbnRfbWluX21lc3Nh Z2VzID0gJ0VSUk9SJzsKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX3N5bnRheDEgRk9SIFRB QkxFIHRlc3RwdWJfcmZfdGJsMSwgT05MWSB0ZXN0cHViX3JmX3RibDMgV0hFUkUgKGUgPCA5OTkp IFdJVEggKHB1Ymxpc2ggPSAnaW5zZXJ0Jyk7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwog XGRScCsgdGVzdHB1Yl9zeW50YXgxCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWJfc3ludGF4MQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFs bCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEg cm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJs aWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8 IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1Ymxp Y2F0aW9uIHRlc3RwdWJfc3ludGF4MQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0 YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9v dCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyBy ZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAg fCBmICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1Ymxp Yy50ZXN0cHViX3JmX3RibDEiCiAgICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDMiIFdIRVJFIChl IDwgOTk5KQpAQCAtMzc5LDEwICszNzksMTAgQEAgU0VUIGNsaWVudF9taW5fbWVzc2FnZXMgPSAn RVJST1InOwogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfc3ludGF4MiBGT1IgVEFCTEUgdGVz dHB1Yl9yZl90YmwxLCB0ZXN0cHViX3JmX3NjaGVtYTEudGVzdHB1Yl9yZl90Ymw1IFdIRVJFICho IDwgOTk5KSBXSVRIIChwdWJsaXNoID0gJ2luc2VydCcpOwogUkVTRVQgY2xpZW50X21pbl9tZXNz YWdlczsKIFxkUnArIHRlc3RwdWJfc3ludGF4MgotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX3N5bnRheDIKLSAgICAgICAgICBPd25lciAgICAgICAg ICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVz IHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYg ICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViX3N5bnRheDIKKyAgICAgICAgICBPd25lciAgICAgICAgICAg fCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0t LS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBm ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAg ICJwdWJsaWMudGVzdHB1Yl9yZl90YmwxIgogICAgICJ0ZXN0cHViX3JmX3NjaGVtYTEudGVzdHB1 Yl9yZl90Ymw1IiBXSEVSRSAoaCA8IDk5OSkKQEAgLTQ5NywxMCArNDk3LDEwIEBAIENSRUFURSBQ VUJMSUNBVElPTiB0ZXN0cHViNiBGT1IgVEFCTEVTIElOIFNDSEVNQSB0ZXN0cHViX3JmX3NjaGVt YTI7CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNiBTRVQgVEFCTEVTIElOIFNDSEVNQSB0ZXN0 cHViX3JmX3NjaGVtYTIsIFRBQkxFIHRlc3RwdWJfcmZfc2NoZW1hMi50ZXN0cHViX3JmX3RibDYg V0hFUkUgKGkgPCA5OSk7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogXGRScCsgdGVzdHB1 YjYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3Rw dWI2Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBV cGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjYKKyAg ICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMg fCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYg ICAgICAgIHwgZgogVGFibGVzOgogICAgICJ0ZXN0cHViX3JmX3NjaGVtYTIudGVzdHB1Yl9yZl90 Ymw2IiBXSEVSRSAoaSA8IDk5KQogVGFibGVzIGZyb20gc2NoZW1hczoKQEAgLTcxNCwxMCArNzE0 LDEwIEBAIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX3RhYmxlX2lucyBXSVRIIChwdWJsaXNo ID0gJ2luc2VydCwgdHJ1bmNhdGUnKTsKIFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CiBBTFRF UiBQVUJMSUNBVElPTiB0ZXN0cHViX3RhYmxlX2lucyBBREQgVEFCTEUgdGVzdHB1Yl90Ymw1IChh KTsJCS0tIG9rCiBcZFJwKyB0ZXN0cHViX3RhYmxlX2lucwotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfdGFibGVfaW5zCi0gICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0K LSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAg ICAgfCBmICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX3RhYmxlX2lucworICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVu Y2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAg ICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJs ZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3RibDUiIChhKQogCkBAIC04OTEsMTAgKzg5MSwxMCBA QCBDUkVBVEUgVEFCTEUgdGVzdHB1Yl90YmxfYm90aF9maWx0ZXJzIChhIGludCwgYiBpbnQsIGMg aW50LCBQUklNQVJZIEtFWSAoYSxjKSk7CiBBTFRFUiBUQUJMRSB0ZXN0cHViX3RibF9ib3RoX2Zp bHRlcnMgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCB0ZXN0cHViX3RibF9ib3RoX2ZpbHRl cnNfcGtleTsKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfYm90aF9maWx0ZXJzIEFERCBUQUJM RSB0ZXN0cHViX3RibF9ib3RoX2ZpbHRlcnMgKGEsYykgV0hFUkUgKGMgIT0gMSk7CiBcZFJwKyB0 ZXN0cHViX2JvdGhfZmlsdGVycwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1Yl9ib3RoX2ZpbHRlcnMKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNh dGlvbiB0ZXN0cHViX2JvdGhfZmlsdGVycworICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFs bCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEg cm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0K KyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1 YmxpYy50ZXN0cHViX3RibF9ib3RoX2ZpbHRlcnMiIChhLCBjKSBXSEVSRSAoYyA8PiAxKQogCkBA IC0xMDk5LDEwICsxMDk5LDEwIEBAIEVSUk9SOiAgcmVsYXRpb24gInRlc3RwdWJfdGJsMSIgaXMg YWxyZWFkeSBtZW1iZXIgb2YgcHVibGljYXRpb24gInRlc3RwdWJfZm9ydGJsCiBDUkVBVEUgUFVC TElDQVRJT04gdGVzdHB1Yl9mb3J0YmwgRk9SIFRBQkxFIHRlc3RwdWJfdGJsMTsKIEVSUk9SOiAg cHVibGljYXRpb24gInRlc3RwdWJfZm9ydGJsIiBhbHJlYWR5IGV4aXN0cwogXGRScCsgdGVzdHB1 Yl9mb3J0YmwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRl c3RwdWJfZm9ydGJsCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IElu c2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIg fCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwg ZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1 Yl9mb3J0YmwKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0 cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNh dGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJfdGVzdC50ZXN0cHViX25v cGsiCiAgICAgInB1YmxpYy50ZXN0cHViX3RibDEiCkBAIC0xMTQwLDEwICsxMTQwLDEwIEBAIFB1 YmxpY2F0aW9uczoKICAgICAidGVzdHB1Yl9mb3J0YmwiCiAKIFxkUnArIHRlc3RwdWJfZGVmYXVs dAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2Rl ZmF1bHQKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2RlZmF1 bHQKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAg ICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJfdGVzdC50ZXN0cHViX25vcGsiCiAg ICAgInB1YmxpYy50ZXN0cHViX3RibDEiCkBAIC0xMjIxLDEwICsxMjIxLDEwIEBAIFJFVk9LRSBD UkVBVEUgT04gREFUQUJBU0UgcmVncmVzc2lvbiBGUk9NIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNl cjI7CiBEUk9QIFRBQkxFIHRlc3RwdWJfcGFydGVkOwogRFJPUCBUQUJMRSB0ZXN0cHViX3RibDE7 CiBcZFJwKyB0ZXN0cHViX2RlZmF1bHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1Yl9kZWZhdWx0Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwg QWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZp YSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVi bGljYXRpb24gdGVzdHB1Yl9kZWZhdWx0CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSBy b290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQor IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmICAgICAgICB8IGYKICgxIHJvdykKIAogLS0gZmFp bCAtIG11c3QgYmUgb3duZXIgb2YgcHVibGljYXRpb24KQEAgLTEyMzQsMjAgKzEyMzQsMjAgQEAg RVJST1I6ICBtdXN0IGJlIG93bmVyIG9mIHB1YmxpY2F0aW9uIHRlc3RwdWJfZGVmYXVsdAogUkVT RVQgUk9MRTsKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZGVmYXVsdCBSRU5BTUUgVE8gdGVz dHB1Yl9mb287CiBcZFJwIHRlc3RwdWJfZm9vCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKLSAgICBOYW1lICAgICB8ICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSB0ZXN0cHViX2ZvbyB8IHJlZ3Jlc3NfcHVibGljYXRp b25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAg ICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg TGlzdCBvZiBwdWJsaWNhdGlvbnMKKyAgICBOYW1lICAgICB8ICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0 ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHRlc3RwdWJfZm9vIHwgcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAg ICAgICB8IGYgICAgICAgIHwgZgogKDEgcm93KQogCiAtLSByZW5hbWUgYmFjayB0byBrZWVwIHRo ZSByZXN0IHNpbXBsZQogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb28gUkVOQU1FIFRPIHRl c3RwdWJfZGVmYXVsdDsKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZGVmYXVsdCBPV05FUiBU TyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIyOwogXGRScCB0ZXN0cHViX2RlZmF1bHQKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgcHVibGljYXRp b25zCi0gICAgICBOYW1lICAgICAgIHwgICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0 YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9v dCAKLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LQotIHRlc3RwdWJfZGVmYXVsdCB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlcjIgfCBmICAgICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgcHVibGlj YXRpb25zCisgICAgICBOYW1lICAgICAgIHwgICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFs bCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEg cm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0rLS0tLS0tCisgdGVzdHB1Yl9kZWZhdWx0IHwgcmVncmVzc19wdWJsaWNhdGlv bl91c2VyMiB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAg ICAgICAgfCBmICAgICAgICB8IGYKICgxIHJvdykKIAogLS0gYWRkaW5nIHNjaGVtYXMgYW5kIHRh YmxlcwpAQCAtMTI2MywxOSArMTI2MywxOSBAQCBDUkVBVEUgVEFCTEUgIkNVUlJFTlRfU0NIRU1B Ii4iQ1VSUkVOVF9TQ0hFTUEiKGlkIGludCk7CiBTRVQgY2xpZW50X21pbl9tZXNzYWdlcyA9ICdF UlJPUic7CiBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIEZPUiBUQUJMRVMg SU4gU0NIRU1BIHB1Yl90ZXN0MTsKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAg ICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAg ICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAg ICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogCiBDUkVBVEUg UFVCTElDQVRJT04gdGVzdHB1YjJfZm9yc2NoZW1hIEZPUiBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90 ZXN0MSwgcHViX3Rlc3QyLCBwdWJfdGVzdDM7CiBcZFJwKyB0ZXN0cHViMl9mb3JzY2hlbWEKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMl9mb3JzY2hl bWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjJfZm9yc2NoZW1h CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNl ciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAg fCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKICAg ICAicHViX3Rlc3QyIgpAQCAtMTI4OSw0NCArMTI4OSw0NCBAQCBDUkVBVEUgUFVCTElDQVRJT04g dGVzdHB1YjZfZm9yc2NoZW1hIEZPUiBUQUJMRVMgSU4gU0NIRU1BICJDVVJSRU5UX1NDSEVNQSIs IENVUgogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFibGUgRk9SIFRBQkxFICJDVVJS RU5UX1NDSEVNQSIuIkNVUlJFTlRfU0NIRU1BIjsKIFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7 CiBcZFJwKyB0ZXN0cHViM19mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViM19mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAg ICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVz IHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1YjNfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0t LS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9t IHNjaGVtYXM6CiAgICAgInB1YmxpYyIKIAogXGRScCsgdGVzdHB1YjRfZm9yc2NoZW1hCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjRfZm9yc2NoZW1h Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI0X2ZvcnNjaGVtYQor ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRl cyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIg fCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwg ZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJDVVJSRU5UX1NDSEVNQSIK IAogXGRScCsgdGVzdHB1YjVfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUHVibGljYXRpb24gdGVzdHB1YjVfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRl cyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFB1YmxpY2F0aW9uIHRlc3RwdWI1X2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAg ICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMg fCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSst LS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJv bSBzY2hlbWFzOgogICAgICJDVVJSRU5UX1NDSEVNQSIKICAgICAicHVibGljIgogCiBcZFJwKyB0 ZXN0cHViNl9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNh dGlvbiB0ZXN0cHViNl9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1YjZfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRh YmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJl Z3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6 CiAgICAgIkNVUlJFTlRfU0NIRU1BIgogICAgICJwdWJsaWMiCiAKIFxkUnArIHRlc3RwdWJfZm9y dGFibGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1 Yl9mb3J0YWJsZQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9m b3J0YWJsZQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgIkNVUlJFTlRfU0NIRU1BLkNVUlJF TlRfU0NIRU1BIgogCkBAIC0xMzYwLDEwICsxMzYwLDEwIEBAIEVSUk9SOiAgc2NoZW1hICJ0ZXN0 cHViX3ZpZXciIGRvZXMgbm90IGV4aXN0CiAtLSBkcm9wcGluZyB0aGUgc2NoZW1hIHNob3VsZCBy ZWZsZWN0IHRoZSBjaGFuZ2UgaW4gcHVibGljYXRpb24KIERST1AgU0NIRU1BIHB1Yl90ZXN0MzsK IFxkUnArIHRlc3RwdWIyX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFB1YmxpY2F0aW9uIHRlc3RwdWIyX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAg ICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMg fCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVz c19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ dWJsaWNhdGlvbiB0ZXN0cHViMl9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAg fCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0t LS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20g c2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogICAgICJwdWJfdGVzdDIiCkBAIC0xMzcxLDIwICsx MzcxLDIwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAtLSByZW5hbWluZyB0aGUgc2NoZW1hIHNo b3VsZCByZWZsZWN0IHRoZSBjaGFuZ2UgaW4gcHVibGljYXRpb24KIEFMVEVSIFNDSEVNQSBwdWJf dGVzdDEgUkVOQU1FIHRvIHB1Yl90ZXN0MV9yZW5hbWVkOwogXGRScCsgdGVzdHB1YjJfZm9yc2No ZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjJf Zm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2Vy dHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIyX2Zv cnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVz dDFfcmVuYW1lZCIKICAgICAicHViX3Rlc3QyIgogCiBBTFRFUiBTQ0hFTUEgcHViX3Rlc3QxX3Jl bmFtZWQgUkVOQU1FIHRvIHB1Yl90ZXN0MTsKIFxkUnArIHRlc3RwdWIyX2ZvcnNjaGVtYQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIyX2ZvcnNjaGVt YQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMl9mb3JzY2hlbWEK KyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0 ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8 IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogICAg ICJwdWJfdGVzdDIiCkBAIC0xMzkyLDEwICsxMzkyLDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6 CiAtLSBhbHRlciBwdWJsaWNhdGlvbiBhZGQgc2NoZW1hCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0 cHViMV9mb3JzY2hlbWEgQUREIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QyOwogXGRScCsgdGVz dHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRh YmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9u IHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8 IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgog ICAgICJwdWJfdGVzdDEiCiAgICAgInB1Yl90ZXN0MiIKQEAgLTE0MDQsMTAgKzE0MDQsMTAgQEAg VGFibGVzIGZyb20gc2NoZW1hczoKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVt YSBBREQgVEFCTEVTIElOIFNDSEVNQSBub25fZXhpc3RlbnRfc2NoZW1hOwogRVJST1I6ICBzY2hl bWEgIm5vbl9leGlzdGVudF9zY2hlbWEiIGRvZXMgbm90IGV4aXN0CiBcZFJwKyB0ZXN0cHViMV9m b3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0 cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwg SW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNl ciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAg fCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1 YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IElu c2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1 Yl90ZXN0MSIKICAgICAicHViX3Rlc3QyIgpAQCAtMTQxNiwxMCArMTQxNiwxMCBAQCBUYWJsZXMg ZnJvbSBzY2hlbWFzOgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIEFERCBU QUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MTsKIEVSUk9SOiAgc2NoZW1hICJwdWJfdGVzdDEiIGlz IGFscmVhZHkgbWVtYmVyIG9mIHB1YmxpY2F0aW9uICJ0ZXN0cHViMV9mb3JzY2hlbWEiCiBcZFJw KyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSBy b290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQor IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVt YXM6CiAgICAgInB1Yl90ZXN0MSIKICAgICAicHViX3Rlc3QyIgpAQCAtMTQyNywxMCArMTQyNywx MCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogLS0gYWx0ZXIgcHVibGljYXRpb24gZHJvcCBzY2hl bWEKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBEUk9QIFRBQkxFUyBJTiBT Q0hFTUEgcHViX3Rlc3QyOwogXGRScCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAg ICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVs ZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAg IE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0 ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAg fCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAKQEAgLTE0MzgsMTAg KzE0MzgsMTAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3Rw dWIxX2ZvcnNjaGVtYSBEUk9QIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QyOwogRVJST1I6ICB0 YWJsZXMgZnJvbSBzY2hlbWEgInB1Yl90ZXN0MiIgYXJlIG5vdCBwYXJ0IG9mIHRoZSBwdWJsaWNh dGlvbgogXGRScCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAg ICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5j YXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSBy ZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0 ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMg ZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAKQEAgLTE0NDksMjkgKzE0NDksMjkgQEAg VGFibGVzIGZyb20gc2NoZW1hczoKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVt YSBEUk9QIFRBQkxFUyBJTiBTQ0hFTUEgbm9uX2V4aXN0ZW50X3NjaGVtYTsKIEVSUk9SOiAgc2No ZW1hICJub25fZXhpc3RlbnRfc2NoZW1hIiBkb2VzIG5vdCBleGlzdAogXGRScCsgdGVzdHB1YjFf Zm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVz dHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8 IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAg IHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3Rw dWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJw dWJfdGVzdDEiCiAKIC0tIGRyb3AgYWxsIHNjaGVtYXMKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3Rw dWIxX2ZvcnNjaGVtYSBEUk9QIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxOwogXGRScCsgdGVz dHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRh YmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9u IHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8 IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiAoMSByb3cpCiAKIC0tIGFsdGVyIHB1 YmxpY2F0aW9uIHNldCBtdWx0aXBsZSBzY2hlbWEKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWIx X2ZvcnNjaGVtYSBTRVQgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDEsIHB1Yl90ZXN0MjsKIFxk UnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8 IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBW aWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19w dWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0t CisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2No ZW1hczoKICAgICAicHViX3Rlc3QxIgogICAgICJwdWJfdGVzdDIiCkBAIC0xNDgwLDEwICsxNDgw LDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9m b3JzY2hlbWEgU0VUIFRBQkxFUyBJTiBTQ0hFTUEgbm9uX2V4aXN0ZW50X3NjaGVtYTsKIEVSUk9S OiAgc2NoZW1hICJub25fZXhpc3RlbnRfc2NoZW1hIiBkb2VzIG5vdCBleGlzdAogXGRScCsgdGVz dHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRh YmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9u IHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8 IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgog ICAgICJwdWJfdGVzdDEiCiAgICAgInB1Yl90ZXN0MiIKQEAgLTE0OTIsMTAgKzE0OTIsMTAgQEAg VGFibGVzIGZyb20gc2NoZW1hczoKIC0tIHJlbW92aW5nIHRoZSBkdXBsaWNhdGUgc2NoZW1hcwog QUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIFNFVCBUQUJMRVMgSU4gU0NIRU1B IHB1Yl90ZXN0MSwgcHViX3Rlc3QxOwogXGRScCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCi0g ICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVz IHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAg ICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAKQEAgLTE1 NzQsMTggKzE1NzQsMTggQEAgU0VUIGNsaWVudF9taW5fbWVzc2FnZXMgPSAnRVJST1InOwogQ1JF QVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWIzX2ZvcnNjaGVtYTsKIFJFU0VUIGNsaWVudF9taW5fbWVz c2FnZXM7CiBcZFJwKyB0ZXN0cHViM19mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViM19mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1 bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQot IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUHVibGljYXRpb24gdGVzdHB1YjNfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAg ICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5j YXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKICgxIHJv dykKIAogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjNfZm9yc2NoZW1hIFNFVCBUQUJMRVMgSU4g U0NIRU1BIHB1Yl90ZXN0MTsKIFxkUnArIHRlc3RwdWIzX2ZvcnNjaGVtYQotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIzX2ZvcnNjaGVtYQotICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViM19mb3JzY2hlbWEKKyAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAg IHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogCkBAIC0xNTk1LDIw ICsxNTk1LDIwIEBAIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnNjaGVtYV9mb3J0YWJs ZSBGT1IgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDEsIFRBCiBDUkVBVEUgUFVCTElDQVRJT04g dGVzdHB1Yl9mb3J0YWJsZV9mb3JzY2hlbWEgRk9SIFRBQkxFIHB1Yl90ZXN0Mi50YmwxLCBUQUJM RVMgSU4gU0NIRU1BIHB1Yl90ZXN0MTsKIFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CiBcZFJw KyB0ZXN0cHViX2ZvcnNjaGVtYV9mb3J0YWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1Yl9mb3JzY2hlbWFfZm9ydGFibGUKLSAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1 bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQot IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnNjaGVtYV9mb3J0YWJsZQorICAgICAgICAgIE93bmVy ICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBU YWJsZXM6CiAgICAgInB1Yl90ZXN0Mi50YmwxIgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAi cHViX3Rlc3QxIgogCiBcZFJwKyB0ZXN0cHViX2ZvcnRhYmxlX2ZvcnNjaGVtYQotICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZV9mb3JzY2hlbWEK LSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0 ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlX2ZvcnNjaGVt YQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAg IHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1Yl90ZXN0Mi50YmwxIgogVGFibGVzIGZy b20gc2NoZW1hczoKLS0gCjIuMzcuMQoK --0000000000001ced0705ea68bc1e Content-Type: application/octet-stream; name="v25-0001-Functions-to-deparse-DDL-commands.patch" Content-Disposition: attachment; filename="v25-0001-Functions-to-deparse-DDL-commands.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l8xvpgqo0 RnJvbSBiM2MzZDY4ZTYyOWQ2OTU4MmJmMTQ4NWMwMjM3Yzk5OGUzNGUxNjcyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFdlZCwgMjggU2VwIDIwMjIgMDk6NDY6MzEgLTA0MDAKU3ViamVjdDogW1BBVENI IDEvNF0gRnVuY3Rpb25zIHRvIGRlcGFyc2UgRERMIGNvbW1hbmRzLgoKVGhpcyBwYXRjaCBwcm92 aWRlcyBKU09OIGJsb2JzIHJlcHJlc2VudGluZyBEREwgY29tbWFuZHMsIHdoaWNoIGNhbgpsYXRl ciBiZSByZS1wcm9jZXNzZWQgaW50byBwbGFpbiBzdHJpbmdzIGJ5IHdlbGwtZGVmaW5lZCBzcHJp bnRmLWxpa2UKZXhwYW5zaW9uLiBUaGVzZSBKU09OIG9iamVjdHMgYXJlIGludGVuZGVkIHRvIGFs bG93IGZvciBtYWNoaW5lLWVkaXRpbmcgb2YKdGhlIGNvbW1hbmRzLCBieSByZXBsYWNpbmcgY2Vy dGFpbiBub2RlcyB3aXRoaW4gdGhlIG9iamVjdHMuCgpNdWNoIG9mIHRoZSBpbmZvcm1hdGlvbiBp biB0aGUgb3V0cHV0IGJsb2IgYWN0dWFsbHkgY29tZXMgZnJvbSBzeXN0ZW0KY2F0YWxvZ3MsIG5v dCBmcm9tIHRoZSBjb21tYW5kIHBhcnNlIG5vZGUsIGFzIGl0IGlzIGltcG9zc2libGUgdG8gcmVs aWFibHkKY29uc3RydWN0IGEgZnVsbHktc3BlY2lmaWVkIGNvbW1hbmQgKGkuZS4gb25lIG5vdCBk ZXBlbmRlbnQgb24gc2VhcmNoX3BhdGgKZXRjKSBsb29raW5nIG9ubHkgYXQgdGhlIHBhcnNlIG5v ZGUuCgpUaGlzIHByb3ZpZGVzIGEgYmFzZSBmb3IgbG9naWNhbCByZXBsaWNhdGlvbiBvZiBEREwg c3RhdGVtZW50cy4gQ3VycmVudGx5LAp0aGUgcGF0Y2ggaGFzIHN1cHBvcnQgZm9yOgoKQ1JFQVRF L0FMVEVSL0RST1AgVEFCTEUgLS0gTm90ZSAjMSwgTm90ZSAjMgpDUkVBVEUvQUxURVIvRFJPUCBT RVFVRU5DRQpDUkVBVEUvQUxURVIvRFJPUCBTQ0hFTUEKQ1JFQVRFL0FMVEVSIEZVTkNUSU9OL1BS T0NFRFVSRQpDUkVBVEUvQUxURVIgVFJJR0dFUgpDUkVBVEUvRFJPUCBJTkRFWApDUkVBVEUvRFJP UCBPUEVSQVRPUiBbQ0xBU1MvRkFNSUxZXQpDUkVBVEUvQUxURVIvRFJPUCBDQVNUCkNSRUFURS9B TFRFUi9EUk9QIERPTUFJTgpDUkVBVEUvQUxURVIvRFJPUCBUWVBFCkNSRUFURS9BTFRFUi9EUk9Q IENPTlZFUlNJT04KQ1JFQVRFL0FMVEVSL0RST1AgUE9MSUNZCkNSRUFURS9BTFRFUi9EUk9QIEVY VEVOU0lPTgpDUkVBVEUvQUxURVIvRFJPUCBGT1JFSUdOIERBVEEgV1JBUFBFUgpDUkVBVEUvQUxU RVIvRFJPUCBSVUxFCkdSQU5UClJFVk9LRQpSRUZSRVNIIE1BVEVSSUFMSVpFRCBWSUVXCkNSRUFU RS9BTFRFUi9EUk9QIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04vUEFSU0VSL0RJQ1RJT05BUlkv VEVNUExBVEUKQ1JFQVRFL0RST1AgVFJBTlNGT1JNCgooTm90ZSAjMSkgTm90ZSB0aGF0IHNvbWUg cmVjZW50bHkgaW50cm9kdWNlZCBERExzKGUuZy4gRERMcyByZWxhdGVkIHRvClBBUlRJVElPTkVE IFRBQkxFKSBhcmUgdW5zdXBwb3J0ZWQuIFdlIGNhbiBleHRlbmQgaXQgYXMgd2UgbmVlZCBtb3Jl CmZ1bmN0aW9uYWxpdHkgZm9yIERETCByZXBsaWNhdGlvbi4KCihOb3RlICMyKSBOb3RlIHRoYXQs IGZvciBBVFRBQ0gvREVUQUNIIFBBUlRJVElPTiwgd2UgaGF2ZW4ndCBhZGRlZCBleHRyYSBsb2dp YyBvbgpzdWJzY3JpYmVyIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgdGFibGUgb24gcHVi bGlzaGVyIGlzIGEgUEFSVElUSU9ORUQKVEFCTEUgd2hpbGUgdGhlIHRhcmdldCB0YWJsZSBvbiBz dWJjcmliZXIgc2lkZSBpcyBOT1JNQUwgdGFibGUuIFdlIHdpbGwKcmVzZWFyY2ggdGhpcyBtb3Jl IGFuZCBpbXByb3ZlIHRoaXMgbGF0ZXIuCgooTm90ZSAjMykgUmVtb3ZlZCBhbiB1bmRlc2lyYWJs ZSAnb24nIGZyb20gdGhlIGlkZW50aXR5IHN0cmluZyBmb3IgVFJBTlNGT1JNCmluIGdldE9iamVj dElkZW50aXR5UGFydHMuIFRoaXMgaXMgbmVlZGVkIHRvIG1ha2UgZGVwYXJzZSBvZiBEUk9QClRS QU5TRk9STSBjb21tYW5kIHdvcmsgc2luY2UgJ29uJyBpcyBub3QgcHJlc2VudCBpbiB0aGUgY3Vy cmVudApEUk9QIFRSQU5TRk9STSBzeW50YXguIEZvciBleGFtcGxlLCB0aGUgY29ycmVjdCBzeW50 YXggaXMKZHJvcCB0cmFuc2Zvcm0gdHJmIGZvciBpbnQgbGFuZ3VhZ2Ugc3FsOwppbnN0ZWFkIG9m CmRyb3AgdHJhbnNmb3JtIHRyZiBmb3IgaW50IG9uIGxhbmd1YWdlIHNxbDsKLS0tCiBzcmMvYmFj a2VuZC9jYXRhbG9nL2FjbGNoay5jICAgICAgICAgICAgICAgICB8ICAgIDQgKwogc3JjL2JhY2tl bmQvY2F0YWxvZy9vYmplY3RhZGRyZXNzLmMgICAgICAgICAgfCAgICAyICstCiBzcmMvYmFja2Vu ZC9jb21tYW5kcy9NYWtlZmlsZSAgICAgICAgICAgICAgICB8ICAgIDIgKwogc3JjL2JhY2tlbmQv Y29tbWFuZHMvZGRsX2RlcGFyc2UuYyAgICAgICAgICAgfCA4MDg2ICsrKysrKysrKysrKysrKysr Kwogc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2pzb24uYyAgICAgICAgICAgICAgfCAgNzYzICsr CiBzcmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jICAgICAgICAgICAgICB8ICAgMzMgKwog c3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Zvcm1hdF90eXBlLmMgICAgICAgICAgfCAgICAzICstCiBz cmMvYmFja2VuZC91dGlscy9hZHQvcmVncHJvYy5jICAgICAgICAgICAgICB8ICAgNTIgKwogc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jICAgICAgICAgICAgfCAgMjIwICstCiBzcmMv aW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0ICAgICAgICAgICAgICB8ICAgIDYgKwogc3JjL2lu Y2x1ZGUvY29tbWFuZHMvc2VxdWVuY2UuaCAgICAgICAgICAgICAgfCAgICAxICsKIHNyYy9pbmNs dWRlL3Rjb3AvZGRsX2RlcGFyc2UuaCAgICAgICAgICAgICAgIHwgICAyMyArCiBzcmMvaW5jbHVk ZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oICAgICAgICAgICB8ICAgIDEgKwogc3JjL2luY2x1ZGUv dXRpbHMvYWNsY2hrX2ludGVybmFsLmggICAgICAgICAgfCAgICAxICsKIHNyYy9pbmNsdWRlL3V0 aWxzL2J1aWx0aW5zLmggICAgICAgICAgICAgICAgIHwgICAgMiArCiBzcmMvaW5jbHVkZS91dGls cy9ydWxldXRpbHMuaCAgICAgICAgICAgICAgICB8ICAgMTYgKwogc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9vYmplY3RfYWRkcmVzcy5vdXQgfCAgICAyICstCiBzcmMvdG9vbHMvcGdpbmRlbnQv dHlwZWRlZnMubGlzdCAgICAgICAgICAgICB8ICAgIDQgKwogMTggZmlsZXMgY2hhbmdlZCwgOTE0 OSBpbnNlcnRpb25zKCspLCA3MiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDc1NSBzcmMv YmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2Jh Y2tlbmQvY29tbWFuZHMvZGRsX2pzb24uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRl L3Rjb3AvZGRsX2RlcGFyc2UuaAoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvYWNs Y2hrLmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2FjbGNoay5jCmluZGV4IGFhNWEyZWQ5NDguLjdk YzE5MGRkZWIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvYWNsY2hrLmMKKysrIGIv c3JjL2JhY2tlbmQvY2F0YWxvZy9hY2xjaGsuYwpAQCAtMzg1LDcgKzM4NSwxMSBAQCBFeGVjdXRl R3JhbnRTdG10KEdyYW50U3RtdCAqc3RtdCkKIAkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCShlcnJj b2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKIAkJCQkJIGVycm1zZygiZ3JhbnRv ciBtdXN0IGJlIGN1cnJlbnQgdXNlciIpKSk7CisKKwkJaXN0bXQuZ3JhbnRvcl91aWQgPSBncmFu dG9yOwogCX0KKwllbHNlCisJCWlzdG10LmdyYW50b3JfdWlkID0gSW52YWxpZE9pZDsKIAogCS8q CiAJICogVHVybiB0aGUgcmVndWxhciBHcmFudFN0bXQgaW50byB0aGUgSW50ZXJuYWxHcmFudCBm b3JtLgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9vYmplY3RhZGRyZXNzLmMgYi9z cmMvYmFja2VuZC9jYXRhbG9nL29iamVjdGFkZHJlc3MuYwppbmRleCAyODRjYTU1NDY5Li4wODRh Y2ViYmUyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL29iamVjdGFkZHJlc3MuYwor KysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL29iamVjdGFkZHJlc3MuYwpAQCAtNjAwMSw3ICs2MDAx LDcgQEAgZ2V0T2JqZWN0SWRlbnRpdHlQYXJ0cyhjb25zdCBPYmplY3RBZGRyZXNzICpvYmplY3Qs CiAJCQkJdHJhbnNmb3JtVHlwZSA9IGZvcm1hdF90eXBlX2JlX3F1YWxpZmllZCh0cmFuc2Zvcm0t PnRyZnR5cGUpOwogCQkJCXRyYW5zZm9ybUxhbmcgPSBnZXRfbGFuZ3VhZ2VfbmFtZSh0cmFuc2Zv cm0tPnRyZmxhbmcsIGZhbHNlKTsKIAotCQkJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZmZlciwgImZv ciAlcyBvbiBsYW5ndWFnZSAlcyIsCisJCQkJYXBwZW5kU3RyaW5nSW5mbygmYnVmZmVyLCAiZm9y ICVzIGxhbmd1YWdlICVzIiwKIAkJCQkJCQkJIHRyYW5zZm9ybVR5cGUsCiAJCQkJCQkJCSB0cmFu c2Zvcm1MYW5nKTsKIAkJCQlpZiAob2JqbmFtZSkKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvTWFrZWZpbGUKaW5kZXggNDhm NzM0OGY5MS4uMTcxZGZiMjgwMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvTWFr ZWZpbGUKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvTWFrZWZpbGUKQEAgLTI5LDYgKzI5LDgg QEAgT0JKUyA9IFwKIAljb3B5dG8ubyBcCiAJY3JlYXRlYXMubyBcCiAJZGJjb21tYW5kcy5vIFwK KwlkZGxfZGVwYXJzZS5vIFwKKwlkZGxfanNvbi5vIFwKIAlkZWZpbmUubyBcCiAJZGlzY2FyZC5v IFwKIAlkcm9wY21kcy5vIFwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9k ZXBhcnNlLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jCm5ldyBmaWxlIG1v ZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAuLjI2MGE4NjU1NGUKLS0tIC9kZXYvbnVsbAorKysg Yi9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jCkBAIC0wLDAgKzEsODA4NiBAQAor LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZGRsX2RlcGFyc2UuYworICoJICBGdW5jdGlvbnMg dG8gY29udmVydCB1dGlsaXR5IGNvbW1hbmRzIHRvIG1hY2hpbmUtcGFyc2VhYmxlCisgKgkgIHJl cHJlc2VudGF0aW9uCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjIsIFBv c3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQg KGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAq IE5PVEVTCisgKgorICogVGhpcyBpcyBpbnRlbmRlZCB0byBwcm92aWRlIEpTT04gYmxvYnMgcmVw cmVzZW50aW5nIERETCBjb21tYW5kcywgd2hpY2ggY2FuCisgKiBsYXRlciBiZSByZS1wcm9jZXNz ZWQgaW50byBwbGFpbiBzdHJpbmdzIGJ5IHdlbGwtZGVmaW5lZCBzcHJpbnRmLWxpa2UKKyAqIGV4 cGFuc2lvbi4gIFRoZXNlIEpTT04gb2JqZWN0cyBhcmUgaW50ZW5kZWQgdG8gYWxsb3cgZm9yIG1h Y2hpbmUtZWRpdGluZyBvZgorICogdGhlIGNvbW1hbmRzLCBieSByZXBsYWNpbmcgY2VydGFpbiBu b2RlcyB3aXRoaW4gdGhlIG9iamVjdHMuCisgKgorICogTXVjaCBvZiB0aGUgaW5mb3JtYXRpb24g aW4gdGhlIG91dHB1dCBibG9iIGFjdHVhbGx5IGNvbWVzIGZyb20gc3lzdGVtCisgKiBjYXRhbG9n cywgbm90IGZyb20gdGhlIGNvbW1hbmQgcGFyc2Ugbm9kZSwgYXMgaXQgaXMgaW1wb3NzaWJsZSB0 byByZWxpYWJseQorICogY29uc3RydWN0IGEgZnVsbHktc3BlY2lmaWVkIGNvbW1hbmQgKGkuZS4g b25lIG5vdCBkZXBlbmRlbnQgb24gc2VhcmNoX3BhdGgKKyAqIGV0YykgbG9va2luZyBvbmx5IGF0 IHRoZSBwYXJzZSBub2RlLgorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9iYWNrZW5k L2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lu Y2x1ZGUgInBvc3RncmVzLmgiCisjaW5jbHVkZSAidGNvcC9kZGxfZGVwYXJzZS5oIgorI2luY2x1 ZGUgImFjY2Vzcy9hbWFwaS5oIgorI2luY2x1ZGUgImFjY2Vzcy90YWJsZS5oIgorI2luY2x1ZGUg ImFjY2Vzcy9yZWxhdGlvbi5oIgorI2luY2x1ZGUgImNhdGFsb2cvbmFtZXNwYWNlLmgiCisjaW5j bHVkZSAiY2F0YWxvZy9wZ19hbS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfYXR0cmlidXRlLmgi CisjaW5jbHVkZSAiY2F0YWxvZy9wZ19hdXRoaWQuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2Nh c3QuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2NsYXNzLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9w Z19jb2xsYXRpb24uaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2NvbnN0cmFpbnQuaCIKKyNpbmNs dWRlICJjYXRhbG9nL3BnX2NvbnZlcnNpb24uaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2RlcGVu ZC5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfZXh0ZW5zaW9uLmgiCisjaW5jbHVkZSAiY2F0YWxv Zy9wZ19mb3JlaWduX2RhdGFfd3JhcHBlci5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfZm9yZWln bl9zZXJ2ZXIuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2luaGVyaXRzLmgiCisjaW5jbHVkZSAi Y2F0YWxvZy9wZ19sYW5ndWFnZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfbGFyZ2VvYmplY3Qu aCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX25hbWVzcGFjZS5oIgorI2luY2x1ZGUgImNhdGFsb2cv cGdfb3BjbGFzcy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfb3BlcmF0b3IuaCIKKyNpbmNsdWRl ICJjYXRhbG9nL3BnX29wZmFtaWx5LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19wb2xpY3kuaCIK KyNpbmNsdWRlICJjYXRhbG9nL3BnX3Byb2MuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3Jhbmdl LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19yZXdyaXRlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9w Z19zZXF1ZW5jZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfdHJhbnNmb3JtLmgiCisjaW5jbHVk ZSAiY2F0YWxvZy9wZ190c19jb25maWcuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3RzX2RpY3Qu aCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3RzX3BhcnNlci5oIgorI2luY2x1ZGUgImNhdGFsb2cv cGdfdHNfdGVtcGxhdGUuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3R5cGUuaCIKKyNpbmNsdWRl ICJjb21tYW5kcy9kZWZyZW0uaCIKKyNpbmNsdWRlICJjb21tYW5kcy9zZXF1ZW5jZS5oIgorI2lu Y2x1ZGUgImNvbW1hbmRzL3RhYmxlc3BhY2UuaCIKKyNpbmNsdWRlICJmdW5jYXBpLmgiCisjaW5j bHVkZSAibGliL2lsaXN0LmgiCisjaW5jbHVkZSAibWIvcGdfd2NoYXIuaCIKKyNpbmNsdWRlICJu b2Rlcy9tYWtlZnVuY3MuaCIKKyNpbmNsdWRlICJub2Rlcy9ub2RlRnVuY3MuaCIKKyNpbmNsdWRl ICJub2Rlcy9wYXJzZW5vZGVzLmgiCisjaW5jbHVkZSAib3B0aW1pemVyL29wdGltaXplci5oIgor I2luY2x1ZGUgInJld3JpdGUvcmV3cml0ZUhhbmRsZXIuaCIKKyNpbmNsdWRlICJ1dGlscy9idWls dGlucy5oIgorI2luY2x1ZGUgInV0aWxzL2ZtZ3JvaWRzLmgiCisjaW5jbHVkZSAidXRpbHMvZ3Vj LmgiCisjaW5jbHVkZSAidXRpbHMvanNvbmIuaCIKKyNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUu aCIKKyNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgorI2luY2x1ZGUgInV0aWxzL3JlbC5oIgor I2luY2x1ZGUgInV0aWxzL3J1bGV1dGlscy5oIgorI2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgi CisKKy8qIEVzdGltYXRlZCBsZW5ndGggb2YgdGhlIGdlbmVyYXRlZCBqc29uYiBzdHJpbmcgKi8K KyNkZWZpbmUgSlNPTkJfRVNUSU1BVEVEX0xFTiAxMjgKKworLyoKKyAqIEJlZm9yZSB0aGV5IGFy ZSB0dXJuZWQgaW50byBKU09OQiByZXByZXNlbnRhdGlvbiwgZWFjaCBjb21tYW5kIGlzCisgKiBy ZXByZXNlbnRlZCBhcyBhbiBvYmplY3QgdHJlZSwgdXNpbmcgdGhlIHN0cnVjdHMgYmVsb3cuCisg Ki8KK3R5cGVkZWYgZW51bQoreworCU9ialR5cGVOdWxsLAorCU9ialR5cGVCb29sLAorCU9ialR5 cGVTdHJpbmcsCisJT2JqVHlwZUFycmF5LAorCU9ialR5cGVJbnRlZ2VyLAorCU9ialR5cGVGbG9h dCwKKwlPYmpUeXBlT2JqZWN0Cit9IE9ialR5cGU7CisKK3R5cGVkZWYgc3RydWN0IE9ialRyZWUK K3sKKwlzbGlzdF9oZWFkCXBhcmFtczsKKwlpbnQJCQludW1QYXJhbXM7CisJU3RyaW5nSW5mbwlm bXRpbmZvOworCWJvb2wJCXByZXNlbnQ7Cit9IE9ialRyZWU7CisKK3R5cGVkZWYgc3RydWN0IE9i akVsZW0KK3sKKwljaGFyCSAgICpuYW1lOworCU9ialR5cGUJCW9ianR5cGU7CisKKwl1bmlvbgor CXsKKwkJYm9vbAkJYm9vbGVhbjsKKwkJY2hhcgkgICAqc3RyaW5nOworCQlpbnQ2NAkJaW50ZWdl cjsKKwkJZmxvYXQ4CQlmbHQ7CisJCU9ialRyZWUJICAgKm9iamVjdDsKKwkJTGlzdAkgICAqYXJy YXk7CisJfSB2YWx1ZTsKKwlzbGlzdF9ub2RlCW5vZGU7Cit9IE9iakVsZW07CisKK2Jvb2wgdmVy Ym9zZSA9IHRydWU7CisKK3N0YXRpYyB2b2lkIGFwcGVuZF9hcnJheV9vYmplY3QoT2JqVHJlZSAq dHJlZSwgY2hhciAqbmFtZSwgTGlzdCAqYXJyYXkpOworc3RhdGljIHZvaWQgYXBwZW5kX2Jvb2xf b2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKm5hbWUsIGJvb2wgdmFsdWUpOworc3RhdGljIHZv aWQgYXBwZW5kX2Zsb2F0X29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpuYW1lLCBmbG9hdDgg dmFsdWUpOworc3RhdGljIHZvaWQgYXBwZW5kX251bGxfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNo YXIgKm5hbWUpOworc3RhdGljIHZvaWQgYXBwZW5kX29iamVjdF9vYmplY3QoT2JqVHJlZSAqdHJl ZSwgY2hhciAqbmFtZSwgT2JqVHJlZSAqdmFsdWUpOworc3RhdGljIGNoYXIgKmFwcGVuZF9vYmpl Y3RfdG9fZm9ybWF0X3N0cmluZyhPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10KTsKK3N0YXRp YyB2b2lkIGFwcGVuZF9wcmVtYWRlX29iamVjdChPYmpUcmVlICp0cmVlLCBPYmpFbGVtICplbGVt KTsKK3N0YXRpYyB2b2lkIGFwcGVuZF9zdHJpbmdfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIg Km5hbWUsIGNoYXIgKnZhbHVlKTsKK3N0YXRpYyB2b2lkIGZvcm1hdF90eXBlX2RldGFpbGVkKE9p ZCB0eXBlX29pZCwgaW50MzIgdHlwZW1vZCwKKwkJCQkJCQkJIE9pZCAqbnNwaWQsIGNoYXIgKip0 eXBuYW1lLCBjaGFyICoqdHlwZW1vZHN0ciwKKwkJCQkJCQkJIGJvb2wgKnR5cGFycmF5KTsKK3N0 YXRpYyBMaXN0ICpGdW5jdGlvbkdldERlZmF1bHRzKHRleHQgKnByb2FyZ2RlZmF1bHRzKTsKK3N0 YXRpYyBPYmpFbGVtICpuZXdfb2JqZWN0KE9ialR5cGUgdHlwZSwgY2hhciAqbmFtZSk7CitzdGF0 aWMgT2JqVHJlZSAqbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKE9pZCBjbGFzc0lkLCBPaWQg b2JqZWN0SWQpOworc3RhdGljIE9ialRyZWUgKm5ld19vYmp0cmVlX2Zvcl9yb2xlc3BlYyhSb2xl U3BlYyAqc3BlYyk7CitzdGF0aWMgT2JqRWxlbSAqbmV3X29iamVjdF9vYmplY3QoT2JqVHJlZSAq dmFsdWUpOworc3RhdGljIE9ialRyZWUgKm5ld19vYmp0cmVlX1ZBKGNoYXIgKmZtdCwgaW50IG51 bW9ianMsLi4uKTsKK3N0YXRpYyBPYmpFbGVtICpuZXdfc3RyaW5nX29iamVjdChjaGFyICp2YWx1 ZSk7CitzdGF0aWMgSnNvbmJWYWx1ZSAqb2JqdHJlZV90b19qc29uYl9yZWMoT2JqVHJlZSAqdHJl ZSwgSnNvbmJQYXJzZVN0YXRlICpzdGF0ZSk7CitzdGF0aWMgdm9pZCBwZ19nZXRfaW5kZXhkZWZf ZGV0YWlsZWQoT2lkIGluZGV4cmVsaWQsCisJCQkJCQkJCQkgY2hhciAqKmluZGV4X2FtLAorCQkJ CQkJCQkJIGNoYXIgKipkZWZpbml0aW9uLAorCQkJCQkJCQkJIGNoYXIgKipyZWxvcHRpb25zLAor CQkJCQkJCQkJIGNoYXIgKip0YWJsZXNwYWNlLAorCQkJCQkJCQkJIGNoYXIgKip3aGVyZUNsYXVz ZSk7CitzdGF0aWMgY2hhciAqUmVsYXRpb25HZXRDb2x1bW5EZWZhdWx0KFJlbGF0aW9uIHJlbCwg QXR0ck51bWJlciBhdHRubywKKwkJCQkJCQkJCSAgTGlzdCAqZHBjb250ZXh0LCBMaXN0ICoqZXhw cnMpOworc3RhdGljIGNvbnN0IGNoYXIgKnN0cmluZ2lmeV9vYmp0eXBlKE9iamVjdFR5cGUgb2Jq dHlwZSk7CisKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0NvbHVtbkRlZihSZWxhdGlvbiByZWxh dGlvbiwgTGlzdCAqZHBjb250ZXh0LCBib29sIGNvbXBvc2l0ZSwKKwkJCQkJCQkJICBDb2x1bW5E ZWYgKmNvbGRlZiwgYm9vbCBpc19hbHRlciwgTGlzdCAqKmV4cHJzKTsKK3N0YXRpYyBPYmpUcmVl ICpkZXBhcnNlX0NvbHVtbklkZW50aXR5KE9pZCBzZXFyZWxpZCwgY2hhciBpZGVudGl0eSwgYm9v bCBhbHRlcl90YWJsZSk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9Db2x1bW5TZXRPcHRpb25z KEFsdGVyVGFibGVDbWQgKnN1YmNtZCk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9EZWZpbmVT dG10X09wZXJhdG9yKE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lKTsKK3N0YXRpYyBP YmpUcmVlICpkZXBhcnNlX0RlZmluZVN0bXRfVHlwZShPaWQgb2JqZWN0SWQsIERlZmluZVN0bXQg KmRlZmluZSk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9EZWZpbmVTdG10X1RTQ29uZmlnKE9p ZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lLCBPYmplY3RBZGRyZXNzIGNvcGllZCk7Citz dGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9EZWZpbmVTdG10X1RTUGFyc2VyKE9pZCBvYmplY3RJZCwg RGVmaW5lU3RtdCAqZGVmaW5lKTsKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0RlZmluZVN0bXRf VFNEaWN0aW9uYXJ5KE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lKTsKK3N0YXRpYyBP YmpUcmVlICpkZXBhcnNlX0RlZmluZVN0bXRfVFNUZW1wbGF0ZShPaWQgb2JqZWN0SWQsIERlZmlu ZVN0bXQgKmRlZmluZSk7CisKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0RlZkVsZW0oRGVmRWxl bSAqZWxlbSwgYm9vbCBpc19yZXNldCk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9GdW5jdGlv blNldChWYXJpYWJsZVNldEtpbmQga2luZCwgY2hhciAqbmFtZSwgY2hhciAqdmFsdWUpOworc3Rh dGljIE9ialRyZWUgKmRlcGFyc2VfT25Db21taXRDbGF1c2UoT25Db21taXRBY3Rpb24gb3B0aW9u KTsKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX1JlbFNldE9wdGlvbnMoQWx0ZXJUYWJsZUNtZCAq c3ViY21kKTsKKworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9DYWNoZShPYmpU cmVlICpwYXJlbnQsIEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSk7 CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfU2VxX0N5Y2xlKE9ialRyZWUgKnBhcmVu dCwgRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKTsKK3N0YXRpYyBp bmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9TZXFfSW5jcmVtZW50QnkoT2JqVHJlZSAqcGFyZW50LCBG b3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpOworc3RhdGljIGlubGlu ZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9NaW52YWx1ZShPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdf c2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSk7CitzdGF0aWMgaW5saW5lIE9iakVs ZW0gKmRlcGFyc2VfU2VxX01heHZhbHVlKE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ19zZXF1ZW5j ZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKTsKK3N0YXRpYyBPYmpFbGVtICpkZXBhcnNlX1Nl cV9Pd25lZEJ5KE9ialRyZWUgKnBhcmVudCwgT2lkIHNlcXVlbmNlSWQsIGJvb2wgYWx0ZXJfdGFi bGUpOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9SZXN0YXJ0KE9ialRyZWUg KnBhcmVudCwgRm9ybV9wZ19zZXF1ZW5jZV9kYXRhIHNlcWRhdGEpOworc3RhdGljIGlubGluZSBP YmpFbGVtICpkZXBhcnNlX1NlcV9TdGFydHdpdGgoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3Nl cXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpOworc3RhdGljIGlubGluZSBPYmpFbGVt ICpkZXBhcnNlX1R5cGVfU3RvcmFnZShPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfdHlwZSB0eXBG b3JtKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9UeXBlX1JlY2VpdmUoT2JqVHJl ZSAqcGFyZW50LCBGb3JtX3BnX3R5cGUgdHlwRm9ybSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0g KmRlcGFyc2VfVHlwZV9TZW5kKE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ190eXBlIHR5cEZvcm0p Oworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1R5cGVfVHlwbW9kX0luKE9ialRyZWUg KnBhcmVudCwgRm9ybV9wZ190eXBlIHR5cEZvcm0pOworc3RhdGljIGlubGluZSBPYmpFbGVtICpk ZXBhcnNlX1R5cGVfVHlwbW9kX091dChPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfdHlwZSB0eXBG b3JtKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9UeXBlX0FuYWx5emUoT2JqVHJl ZSAqcGFyZW50LCBGb3JtX3BnX3R5cGUgdHlwRm9ybSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0g KmRlcGFyc2VfVHlwZV9TdWJzY3JpcHQoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3R5cGUgdHlw Rm9ybSk7CisKK3N0YXRpYyBMaXN0ICpkZXBhcnNlX0luaFJlbGF0aW9ucyhPaWQgb2JqZWN0SWQp Oworc3RhdGljIExpc3QgKmRlcGFyc2VfVGFibGVFbGVtZW50cyhSZWxhdGlvbiByZWxhdGlvbiwg TGlzdCAqdGFibGVFbGVtZW50cywgTGlzdCAqZHBjb250ZXh0LAorCQkJCQkJCQkgICBib29sIHR5 cGVkLCBib29sIGNvbXBvc2l0ZSk7CisKKy8qCisgKiBBZGQgY29tbW9uIGNsYXVzZXMgdG8gQ3Jl YXRlUG9saWN5IG9yIEFsdGVyUG9saWN5IGRlcGFyc2Ugb2JqZWN0cworICovCitzdGF0aWMgdm9p ZAorYWRkX3BvbGljeV9jbGF1c2VzKE9ialRyZWUgKnBvbGljeVN0bXQsIE9pZCBwb2xpY3lPaWQs IExpc3QgKnJvbGVzLAorCQkJCSAgIGJvb2wgZG9fcXVhbCwgYm9vbCBkb193aXRoX2NoZWNrKQor eworCVJlbGF0aW9uCXBvbFJlbCA9IHRhYmxlX29wZW4oUG9saWN5UmVsYXRpb25JZCwgQWNjZXNz U2hhcmVMb2NrKTsKKwlIZWFwVHVwbGUJcG9sVHVwID0gZ2V0X2NhdGFsb2dfb2JqZWN0X2J5X29p ZChwb2xSZWwsIEFudW1fcGdfcG9saWN5X29pZCwgcG9saWN5T2lkKTsKKwlGb3JtX3BnX3BvbGlj eSBwb2xGb3JtOworCisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHBvbFR1cCkpCisJCWVsb2coRVJS T1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBwb2xpY3kgJXUiLCBwb2xpY3lPaWQpOworCisJ cG9sRm9ybSA9IChGb3JtX3BnX3BvbGljeSkgR0VUU1RSVUNUKHBvbFR1cCk7CisKKwkvKiBhZGQg dGhlICJPTiB0YWJsZSIgY2xhdXNlICovCisJYXBwZW5kX29iamVjdF9vYmplY3QocG9saWN5U3Rt dCwgIk9OICV7dGFibGV9RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJl bGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgcG9sRm9ybS0+cG9scmVsaWQpKTsKKwor CS8qCisJICogQWRkIHRoZSAiVE8gcm9sZSIgY2xhdXNlLCBpZiBhbnkuICBJbiB0aGUgQ1JFQVRF IGNhc2UsIGl0IGFsd2F5cworCSAqIGNvbnRhaW5zIGF0IGxlYXN0IFBVQkxJQywgYnV0IGluIHRo ZSBBTFRFUiBjYXNlIGl0IG1pZ2h0IGJlIGVtcHR5LgorCSAqLworCWlmIChyb2xlcykKKwl7CisJ CUxpc3QgICAqbGlzdCA9IE5JTDsKKwkJTGlzdENlbGwgKmNlbGw7CisKKwkJZm9yZWFjaCAoY2Vs bCwgcm9sZXMpCisJCXsKKwkJCVJvbGVTcGVjICAgKnNwZWMgPSAoUm9sZVNwZWMgKikgbGZpcnN0 KGNlbGwpOworCisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LAorCQkJCQkJICAgbmV3X29iamVjdF9v YmplY3QobmV3X29ianRyZWVfZm9yX3JvbGVzcGVjKHNwZWMpKSk7CisJCX0KKwkJYXBwZW5kX2Fy cmF5X29iamVjdChwb2xpY3lTdG10LCJUTyAle3JvbGU6LCB9UiIsIGxpc3QpOworCX0KKwllbHNl CisJeworCQlhcHBlbmRfYm9vbF9vYmplY3QocG9saWN5U3RtdCwgInByZXNlbnQiLCBmYWxzZSk7 CisJfQorCisJLyogYWRkIHRoZSBVU0lORyBjbGF1c2UsIGlmIGFueSAqLworCWlmIChkb19xdWFs KQorCXsKKwkJRGF0dW0JZGVwYXJzZWQ7CisJCURhdHVtCXN0b3JlZGV4cHI7CisJCWJvb2wJaXNu dWxsOworCisJCXN0b3JlZGV4cHIgPSBoZWFwX2dldGF0dHIocG9sVHVwLCBBbnVtX3BnX3BvbGlj eV9wb2xxdWFsLAorCQkJCQkJCQkgIFJlbGF0aW9uR2V0RGVzY3IocG9sUmVsKSwgJmlzbnVsbCk7 CisJCWlmIChpc251bGwpCisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBOVUxMIHBvbHF1YWwgZXhw cmVzc2lvbiBpbiBwb2xpY3kgJXUiLCBwb2xpY3lPaWQpOworCQlkZXBhcnNlZCA9IERpcmVjdEZ1 bmN0aW9uQ2FsbDIocGdfZ2V0X2V4cHIsIHN0b3JlZGV4cHIsIHBvbEZvcm0tPnBvbHJlbGlkKTsK KwkJYXBwZW5kX3N0cmluZ19vYmplY3QocG9saWN5U3RtdCwgIlVTSU5HICgle2V4cHJlc3Npb259 cykiLAorCQkJCQkJCSBUZXh0RGF0dW1HZXRDU3RyaW5nKGRlcGFyc2VkKSk7CisJfQorCWVsc2UK KwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHBvbGljeVN0bXQsICJwcmVzZW50IiwgZmFsc2UpOworCisJ LyogYWRkIHRoZSBXSVRIIENIRUNLIGNsYXVzZSwgaWYgYW55ICovCisJaWYgKGRvX3dpdGhfY2hl Y2spCisJeworCQlEYXR1bQlkZXBhcnNlZDsKKwkJRGF0dW0Jc3RvcmVkZXhwcjsKKwkJYm9vbAlp c251bGw7CisKKwkJc3RvcmVkZXhwciA9IGhlYXBfZ2V0YXR0cihwb2xUdXAsIEFudW1fcGdfcG9s aWN5X3BvbHdpdGhjaGVjaywKKwkJCQkJCQkJICBSZWxhdGlvbkdldERlc2NyKHBvbFJlbCksICZp c251bGwpOworCQlpZiAoaXNudWxsKQorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgTlVMTCBwb2x3 aXRoY2hlY2sgZXhwcmVzc2lvbiBpbiBwb2xpY3kgJXUiLCBwb2xpY3lPaWQpOworCQlkZXBhcnNl ZCA9IERpcmVjdEZ1bmN0aW9uQ2FsbDIocGdfZ2V0X2V4cHIsIHN0b3JlZGV4cHIsIHBvbEZvcm0t PnBvbHJlbGlkKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QocG9saWN5U3RtdCwgIldJVEggQ0hF Q0sgKCV7ZXhwcmVzc2lvbn1zKSIsCisJCQkJCQkJIFRleHREYXR1bUdldENTdHJpbmcoZGVwYXJz ZWQpKTsKKwl9CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QocG9saWN5U3RtdCwgInByZXNl bnQiLCBmYWxzZSk7CisKKwlyZWxhdGlvbl9jbG9zZShwb2xSZWwsIEFjY2Vzc1NoYXJlTG9jayk7 Cit9CisKKy8qIEFwcGVuZCBhbiBhcnJheSBwYXJhbWV0ZXIgdG8gYSB0cmVlICovCitzdGF0aWMg dm9pZAorYXBwZW5kX2FycmF5X29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10LCBM aXN0ICphcnJheSkKK3sKKwlPYmpFbGVtCSpwYXJhbTsKKwljaGFyICpvYmplY3RfbmFtZTsKKwor CUFzc2VydChzdWJfZm10KTsKKworCWlmIChsaXN0X2xlbmd0aChhcnJheSkgPT0gMCkKKwkJcmV0 dXJuOworCisJaWYgKCF2ZXJib3NlKQorCXsKKwkJTGlzdENlbGwgKmxjOworCisJCS8qIEV4dHJh Y3QgdGhlIE9iakVsZW1zIHdob3NlIHByZXNlbnQgZmxhZyBpcyB0cnVlICovCisJCWZvcmVhY2go bGMsIGFycmF5KQorCQl7CisJCQlPYmpFbGVtICplbGVtID0gKE9iakVsZW0gKikgbGZpcnN0KGxj KTsKKworCQkJQXNzZXJ0KGVsZW0tPm9ianR5cGUgPT0gT2JqVHlwZU9iamVjdCB8fAorCQkJCSAg IGVsZW0tPm9ianR5cGUgPT0gT2JqVHlwZVN0cmluZyk7CisKKwkJCWlmICghZWxlbS0+dmFsdWUu b2JqZWN0LT5wcmVzZW50ICYmCisJCQkJZWxlbS0+b2JqdHlwZSA9PSBPYmpUeXBlT2JqZWN0KQor CQkJCWFycmF5ID0gZm9yZWFjaF9kZWxldGVfY3VycmVudChhcnJheSwgbGMpOworCQl9CisKKwl9 CisKKwlvYmplY3RfbmFtZSA9IGFwcGVuZF9vYmplY3RfdG9fZm9ybWF0X3N0cmluZyh0cmVlLCBz dWJfZm10KTsKKworCXBhcmFtID0gbmV3X29iamVjdChPYmpUeXBlQXJyYXksIG9iamVjdF9uYW1l KTsKKwlwYXJhbS0+dmFsdWUuYXJyYXkgPSBhcnJheTsKKwlhcHBlbmRfcHJlbWFkZV9vYmplY3Qo dHJlZSwgcGFyYW0pOworfQorCisvKiBBcHBlbmQgYSBib29sZWFuIHBhcmFtZXRlciB0byBhIHRy ZWUgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRfYm9vbF9vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hh ciAqc3ViX2ZtdCwgYm9vbCB2YWx1ZSkKK3sKKwlPYmpFbGVtICAqcGFyYW07CisJY2hhcgkgKm9i amVjdF9uYW1lID0gc3ViX2ZtdDsKKwlib29sCSAgaXNfcHJlc2VudF9mbGFnID0gZmFsc2U7CisK KwlBc3NlcnQoc3ViX2ZtdCk7CisKKwkvKiBDaGVjayBpZiB0aGUgcHJlc2VudCBpcyBwYXJ0IG9m IHRoZSBmb3JtYXQgc3RyaW5nIGFuZCBzdG9yZSB0aGUgYm9vbGVhbiB2YWx1ZSovCisJaWYgKHN0 cmNtcChzdWJfZm10LCAicHJlc2VudCIpID09IDApCisJeworCQlpc19wcmVzZW50X2ZsYWcgPSB0 cnVlOworCQl0cmVlLT5wcmVzZW50ID0gdmFsdWU7CisJfQorCisJaWYgKCF2ZXJib3NlICYmICF0 cmVlLT5wcmVzZW50KQorCQlyZXR1cm47CisKKwlpZiAoIWlzX3ByZXNlbnRfZmxhZykKKwkJb2Jq ZWN0X25hbWUgPSBhcHBlbmRfb2JqZWN0X3RvX2Zvcm1hdF9zdHJpbmcodHJlZSwgc3ViX2ZtdCk7 CisKKwlwYXJhbSA9IG5ld19vYmplY3QoT2JqVHlwZUJvb2wsIG9iamVjdF9uYW1lKTsKKwlwYXJh bS0+dmFsdWUuYm9vbGVhbiA9IHZhbHVlOworCWFwcGVuZF9wcmVtYWRlX29iamVjdCh0cmVlLCBw YXJhbSk7Cit9CisKKy8qCisgKiBBcHBlbmQgYSBmbG9hdDggcGFyYW1ldGVyIHRvIGEgdHJlZS4K KyAqLworc3RhdGljIHZvaWQKK2FwcGVuZF9mbG9hdF9vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hh ciAqc3ViX2ZtdCwgZmxvYXQ4IHZhbHVlKQoreworCU9iakVsZW0JICAgKnBhcmFtOworCWNoYXIJ ICAgKm9iamVjdF9uYW1lOworCisJQXNzZXJ0KHN1Yl9mbXQpOworCisJb2JqZWN0X25hbWUgPSBh cHBlbmRfb2JqZWN0X3RvX2Zvcm1hdF9zdHJpbmcodHJlZSwgc3ViX2ZtdCk7CisKKwlwYXJhbSA9 IG5ld19vYmplY3QoT2JqVHlwZUZsb2F0LCBvYmplY3RfbmFtZSk7CisJcGFyYW0tPnZhbHVlLmZs dCA9IHZhbHVlOworCWFwcGVuZF9wcmVtYWRlX29iamVjdCh0cmVlLCBwYXJhbSk7Cit9CisKKy8q CisgKiBBcHBlbmQgdGhlIGlucHV0IGZvcm1hdCBzdHJpbmcgdG8gdGhlIE9ialRyZWUuCisgKi8K K3N0YXRpYyB2b2lkCithcHBlbmRfZm9ybWF0X3N0cmluZyhPYmpUcmVlICp0cmVlLCBjaGFyICpz dWJfZm10KQoreworCWludAkJCQlsZW47CisJY2hhcgkJICAgKmZtdDsKKworCWlmICh0cmVlLT5m bXRpbmZvID09IE5VTEwpCisJCXJldHVybjsKKworCWZtdCA9IHRyZWUtPmZtdGluZm8tPmRhdGE7 CisJbGVuID0gdHJlZS0+Zm10aW5mby0+bGVuOworCisJLyogQWRkIGEgc2VwYXJhdG9yIGlmIG5l Y2Vzc2FyeSAqLworCWlmIChsZW4gPiAwICYmIGZtdFtsZW4gLSAxXSAhPSAnICcpCisJCWFwcGVu ZFN0cmluZ0luZm9TcGFjZXModHJlZS0+Zm10aW5mbywgMSk7CisKKwlhcHBlbmRTdHJpbmdJbmZv U3RyaW5nKHRyZWUtPmZtdGluZm8sIHN1Yl9mbXQpOworfQorCisvKiBBcHBlbmQgYSBOVUxMIG9i amVjdCB0byBhIHRyZWUgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRfbnVsbF9vYmplY3QoT2JqVHJl ZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCkKK3sKKwljaGFyICpvYmplY3RfbmFtZTsKKworCUFzc2Vy dChzdWJfZm10KTsKKworCWlmICghdmVyYm9zZSkKKwkJcmV0dXJuOworCisJb2JqZWN0X25hbWUg PSBhcHBlbmRfb2JqZWN0X3RvX2Zvcm1hdF9zdHJpbmcodHJlZSwgc3ViX2ZtdCk7CisKKwlhcHBl bmRfcHJlbWFkZV9vYmplY3QodHJlZSwgbmV3X29iamVjdChPYmpUeXBlTnVsbCwgb2JqZWN0X25h bWUpKTsKK30KKworLyogQXBwZW5kIGFuIG9iamVjdCBwYXJhbWV0ZXIgdG8gYSB0cmVlICovCitz dGF0aWMgdm9pZAorYXBwZW5kX29iamVjdF9vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3Vi X2ZtdCwgT2JqVHJlZSAqdmFsdWUpCit7CisJT2JqRWxlbQkqcGFyYW07CisJY2hhciAgICpvYmpl Y3RfbmFtZTsKKworCUFzc2VydChzdWJfZm10KTsKKworCWlmICghdmVyYm9zZSAmJiAhdmFsdWUt PnByZXNlbnQpCisJCXJldHVybjsKKworCW9iamVjdF9uYW1lID0gYXBwZW5kX29iamVjdF90b19m b3JtYXRfc3RyaW5nKHRyZWUsIHN1Yl9mbXQpOworCisJcGFyYW0gPSBuZXdfb2JqZWN0KE9ialR5 cGVPYmplY3QsIG9iamVjdF9uYW1lKTsKKwlwYXJhbS0+dmFsdWUub2JqZWN0ID0gdmFsdWU7CisJ YXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRyZWUsIHBhcmFtKTsKK30KKworLyoKKyAqIFJldHVybiB0 aGUgb2JqZWN0IG5hbWUgd2hpY2ggaXMgZXh0cmFjdGVkIGZyb20gdGhlIGlucHV0ICIqJXtuYW1l WzouXX0qIgorICogc3R5bGUgc3RyaW5nLiBBbmQgYXBwZW5kIHRoZSBpbnB1dCBmb3JtYXQgc3Ry aW5nIHRvIHRoZSBPYmpUcmVlLgorICovCitzdGF0aWMgY2hhciAqCithcHBlbmRfb2JqZWN0X3Rv X2Zvcm1hdF9zdHJpbmcoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCkKK3sKKwlTdHJpbmdJ bmZvRGF0YQlvYmplY3RfbmFtZTsKKwljb25zdCBjaGFyCSAgICplbmRfcHRyOworCWNvbnN0IGNo YXIJICAgKmNwOworCWJvb2wJCQlzdGFydF9jb3B5ID0gZmFsc2U7CisKKwlpZiAoc3ViX2ZtdCA9 PSBOVUxMIHx8IHRyZWUtPmZtdGluZm8gPT0gTlVMTCkKKwkJcmV0dXJuIHN1Yl9mbXQ7CisKKwlp bml0U3RyaW5nSW5mbygmb2JqZWN0X25hbWUpOworCWVuZF9wdHIgPSBzdWJfZm10ICsgc3RybGVu KHN1Yl9mbXQpOworCisJZm9yIChjcCA9IHN1Yl9mbXQ7IGNwIDwgZW5kX3B0cjsgY3ArKykKKwl7 CisJCWlmICgqY3AgPT0gJ3snKQorCQl7CisJCQlzdGFydF9jb3B5ID0gdHJ1ZTsKKwkJCWNvbnRp bnVlOworCQl9CisKKwkJaWYgKCFzdGFydF9jb3B5KQorCQkJY29udGludWU7CisKKwkJaWYgKCpj cCA9PSAnOicgfHwgKmNwID09ICd9JykKKwkJCWJyZWFrOworCisJCWFwcGVuZFN0cmluZ0luZm9D aGFyTWFjcm8oJm9iamVjdF9uYW1lLCAqY3ApOworCX0KKworCWlmIChvYmplY3RfbmFtZS5sZW4g PT0gMCkKKwkJZWxvZyhFUlJPUiwgIm9iamVjdCBuYW1lIG5vdCBmb3VuZCIpOworCisJYXBwZW5k X2Zvcm1hdF9zdHJpbmcodHJlZSwgc3ViX2ZtdCk7CisKKwlyZXR1cm4gb2JqZWN0X25hbWUuZGF0 YTsKK30KKworLyogQXBwZW5kIGEgcHJlYWxsb2NhdGVkIHBhcmFtZXRlciB0byBhIHRyZWUgKi8K K3N0YXRpYyBpbmxpbmUgdm9pZAorYXBwZW5kX3ByZW1hZGVfb2JqZWN0KE9ialRyZWUgKnRyZWUs IE9iakVsZW0gKmVsZW0pCit7CisJc2xpc3RfcHVzaF9oZWFkKCZ0cmVlLT5wYXJhbXMsICZlbGVt LT5ub2RlKTsKKwl0cmVlLT5udW1QYXJhbXMrKzsKK30KKworLyogQXBwZW5kIGEgc3RyaW5nIHBh cmFtZXRlciB0byBhIHRyZWUgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRfc3RyaW5nX29iamVjdChP YmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10LCBjaGFyICp2YWx1ZSkKK3sKKwlPYmpFbGVtCSAg ICpwYXJhbTsKKwljaGFyCSAgICpvYmplY3RfbmFtZTsKKworCUFzc2VydChzdWJfZm10KTsKKwor CWlmICghdmVyYm9zZSAmJiAodmFsdWUgPT0gTlVMTCB8fCB2YWx1ZVswXSA9PSAnXDAnKSkKKwkJ cmV0dXJuOworCisJb2JqZWN0X25hbWUgPSBhcHBlbmRfb2JqZWN0X3RvX2Zvcm1hdF9zdHJpbmco dHJlZSwgc3ViX2ZtdCk7CisKKwlwYXJhbSA9IG5ld19vYmplY3QoT2JqVHlwZVN0cmluZywgb2Jq ZWN0X25hbWUpOworCXBhcmFtLT52YWx1ZS5zdHJpbmcgPSB2YWx1ZTsKKwlhcHBlbmRfcHJlbWFk ZV9vYmplY3QodHJlZSwgcGFyYW0pOworfQorCisvKgorICogU2ltaWxhciB0byBmb3JtYXRfdHlw ZV9leHRlbmRlZCwgZXhjZXB0IHdlIHJldHVybiBlYWNoIGJpdCBvZiBpbmZvcm1hdGlvbgorICog c2VwYXJhdGVseToKKyAqCisgKiAtIG5zcGlkIGlzIHRoZSBzY2hlbWEgT0lELiAgRm9yIGNlcnRh aW4gU1FMLXN0YW5kYXJkIHR5cGVzIHdoaWNoIGhhdmUgd2VpcmQKKyAqICAgdHlwbW9kIHJ1bGVz LCB3ZSByZXR1cm4gSW52YWxpZE9pZDsgY2FsbGVyIGlzIGV4cGVjdGVkIHRvIG5vdCBzY2hlbWEt CisgKiAgIHF1YWxpZnkgdGhlIG5hbWUgbm9yIGFkZCBxdW90ZXMgdG8gdGhlIHR5cGUgbmFtZSBp biB0aGlzIGNhc2UuCisgKgorICogLSB0eXBuYW1lIGlzIHNldCB0byB0aGUgdHlwZSBuYW1lLCB3 aXRob3V0IHF1b3RlcworICoKKyAqIC0gdHlwZW1vZHN0ciBpcyBzZXQgdG8gdGhlIHR5cGVtb2Qs IGlmIGFueSwgYXMgYSBzdHJpbmcgd2l0aCBwYXJlbnMKKyAqCisgKiAtIHR5cGFycmF5IGluZGlj YXRlcyB3aGV0aGVyIFtdcyBtdXN0IGJlIGFkZGVkCisgKgorICogV2UgZG9uJ3QgdHJ5IHRvIGRl Y29kZSB0eXBlIG5hbWVzIHRvIHRoZWlyIHN0YW5kYXJkLW1hbmRhdGVkIG5hbWVzLCBleGNlcHQK KyAqIGluIHRoZSBjYXNlcyBvZiB0eXBlcyB3aXRoIHVudXN1YWwgdHlwbW9kIHJ1bGVzLgorICov CitzdGF0aWMgdm9pZAorZm9ybWF0X3R5cGVfZGV0YWlsZWQoT2lkIHR5cGVfb2lkLCBpbnQzMiB0 eXBlbW9kLAorCQkJCQkgT2lkICpuc3BpZCwgY2hhciAqKnR5cG5hbWUsIGNoYXIgKip0eXBlbW9k c3RyLAorCQkJCQkgYm9vbCAqdHlwYXJyYXkpCit7CisJSGVhcFR1cGxlCQl0dXBsZTsKKwlGb3Jt X3BnX3R5cGUJdHlwZWZvcm07CisJT2lkCQkJCWFycmF5X2Jhc2VfdHlwZTsKKworCXR1cGxlID0g U2VhcmNoU3lzQ2FjaGUxKFRZUEVPSUQsIE9iamVjdElkR2V0RGF0dW0odHlwZV9vaWQpKTsKKwlp ZiAoIUhlYXBUdXBsZUlzVmFsaWQodHVwbGUpKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3Vw IGZhaWxlZCBmb3IgdHlwZSAldSIsIHR5cGVfb2lkKTsKKworCXR5cGVmb3JtID0gKEZvcm1fcGdf dHlwZSkgR0VUU1RSVUNUKHR1cGxlKTsKKworCS8qCisJICogQ2hlY2sgaWYgaXQncyBhIHJlZ3Vs YXIgKHZhcmlhYmxlIGxlbmd0aCkgYXJyYXkgdHlwZS4gIEFzIGFib3ZlLAorCSAqIGZpeGVkLWxl bmd0aCBhcnJheSB0eXBlcyBzdWNoIGFzICJuYW1lIiBzaG91bGRuJ3QgZ2V0IGRlY29uc3RydWN0 ZWQuCisJICovCisJYXJyYXlfYmFzZV90eXBlID0gdHlwZWZvcm0tPnR5cGVsZW07CisKKwkqdHlw YXJyYXkgPSAoSXNUcnVlQXJyYXlUeXBlKHR5cGVmb3JtKSAmJiB0eXBlZm9ybS0+dHlwc3RvcmFn ZSAhPSBUWVBTVE9SQUdFX1BMQUlOKTsKKworCWlmICgqdHlwYXJyYXkpCisJeworCQkvKiBTd2l0 Y2ggb3VyIGF0dGVudGlvbiB0byB0aGUgYXJyYXkgZWxlbWVudCB0eXBlICovCisJCVJlbGVhc2VT eXNDYWNoZSh0dXBsZSk7CisJCXR1cGxlID0gU2VhcmNoU3lzQ2FjaGUxKFRZUEVPSUQsIE9iamVj dElkR2V0RGF0dW0oYXJyYXlfYmFzZV90eXBlKSk7CisJCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0 dXBsZSkpCisJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgdHlwZSAldSIs IHR5cGVfb2lkKTsKKworCQl0eXBlZm9ybSA9IChGb3JtX3BnX3R5cGUpIEdFVFNUUlVDVCh0dXBs ZSk7CisJCXR5cGVfb2lkID0gYXJyYXlfYmFzZV90eXBlOworCX0KKworCS8qCisJICogU3BlY2lh bC1jYXNlIGNyb2NrIGZvciB0eXBlcyB3aXRoIHN0cmFuZ2UgdHlwbW9kIHJ1bGVzIHdoZXJlIHdl IHB1dAorCSAqIHR5cG1vZCBhdCB0aGUgbWlkZGxlIG9mIG5hbWUoZS5nLiBUSU1FKDYpIHdpdGgg dGltZSB6b25lICkuIFdlIGNhbm5vdAorCSAqIHNjaGVtYS1xdWFsaWZ5IG5vciBhZGQgcXVvdGVz IHRvIHRoZSB0eXBlIG5hbWUgaW4gdGhlc2UgY2FzZXMuCisJICovCisJaWYgKHR5cGVfb2lkID09 IElOVEVSVkFMT0lEIHx8CisJCXR5cGVfb2lkID09IFRJTUVTVEFNUE9JRCB8fAorCQl0eXBlX29p ZCA9PSBUSU1FU1RBTVBUWk9JRCB8fAorCQl0eXBlX29pZCA9PSBUSU1FT0lEIHx8CisJCXR5cGVf b2lkID09IFRJTUVUWk9JRCkKKwl7CisJCXN3aXRjaCAodHlwZV9vaWQpCisJCXsKKwkJCWNhc2Ug SU5URVJWQUxPSUQ6CisJCQkJKnR5cG5hbWUgPSBwc3RyZHVwKCJJTlRFUlZBTCIpOworCQkJCWJy ZWFrOworCQkJY2FzZSBUSU1FU1RBTVBUWk9JRDoKKwkJCQlpZiAodHlwZW1vZCA8IDApCisJCQkJ CSp0eXBuYW1lID0gcHN0cmR1cCgiVElNRVNUQU1QIFdJVEggVElNRSBaT05FIik7CisJCQkJZWxz ZQorCQkJCQkvKiBvdGhlcndpc2UsIFdJVEggVFogaXMgYWRkZWQgYnkgdHlwbW9kLiAqLworCQkJ CQkqdHlwbmFtZSA9IHBzdHJkdXAoIlRJTUVTVEFNUCIpOworCQkJCWJyZWFrOworCQkJY2FzZSBU SU1FU1RBTVBPSUQ6CisJCQkJKnR5cG5hbWUgPSBwc3RyZHVwKCJUSU1FU1RBTVAiKTsKKwkJCQli cmVhazsKKwkJCWNhc2UgVElNRVRaT0lEOgorCQkJCWlmICh0eXBlbW9kIDwgMCkKKwkJCQkJKnR5 cG5hbWUgPSBwc3RyZHVwKCJUSU1FIFdJVEggVElNRSBaT05FIik7CisJCQkJZWxzZQorCQkJCQkv KiBvdGhlcndpc2UsIFdJVEggVFogaXMgYWRkZWQgYnkgdHlwbW9kZS4gKi8KKwkJCQkJKnR5cG5h bWUgPSBwc3RyZHVwKCJUSU1FIik7CisJCQkJYnJlYWs7CisJCQljYXNlIFRJTUVPSUQ6CisJCQkJ KnR5cG5hbWUgPSBwc3RyZHVwKCJUSU1FIik7CisJCQkJYnJlYWs7CisJCX0KKwkJKm5zcGlkID0g SW52YWxpZE9pZDsKKwl9CisJZWxzZQorCXsKKwkJLyoKKwkJICogTm8gYWRkaXRpb25hbCBwcm9j ZXNzaW5nIGlzIHJlcXVpcmVkIGZvciBvdGhlciB0eXBlcywgc28gZ2V0IHRoZSB0eXBlCisJCSAq IG5hbWUgYW5kIHNjaGVtYSBkaXJlY3RseSBmcm9tIHRoZSBjYXRhbG9nLgorCQkgKi8KKwkJKm5z cGlkID0gdHlwZWZvcm0tPnR5cG5hbWVzcGFjZTsKKwkJKnR5cG5hbWUgPSBwc3RyZHVwKE5hbWVT dHIodHlwZWZvcm0tPnR5cG5hbWUpKTsKKwl9CisKKwlpZiAodHlwZW1vZCA+PSAwKQorCQkqdHlw ZW1vZHN0ciA9IHByaW50VHlwbW9kKCIiLCB0eXBlbW9kLCB0eXBlZm9ybS0+dHlwbW9kb3V0KTsK KwllbHNlCisJCSp0eXBlbW9kc3RyID0gcHN0cmR1cCgiIik7CisKKwlSZWxlYXNlU3lzQ2FjaGUo dHVwbGUpOworfQorCisvKgorICogUmV0dXJuIHRoZSBkZWZhdWx0cyB2YWx1ZXMgb2YgYXJndW1l bnRzIHRvIGEgZnVuY3Rpb24sIGFzIGEgbGlzdCBvZgorICogZGVwYXJzZWQgZXhwcmVzc2lvbnMu CisgKi8KK3N0YXRpYyBMaXN0ICoKK0Z1bmN0aW9uR2V0RGVmYXVsdHModGV4dCAqcHJvYXJnZGVm YXVsdHMpCit7CisJTGlzdCAgICpub2RlZGVmczsKKwlMaXN0ICAgKnN0cmRlZnMgPSBOSUw7CisJ TGlzdENlbGwgKmNlbGw7CisKKwlub2RlZGVmcyA9IChMaXN0ICopIHN0cmluZ1RvTm9kZSh0ZXh0 X3RvX2NzdHJpbmcocHJvYXJnZGVmYXVsdHMpKTsKKwlpZiAoIUlzQShub2RlZGVmcywgTGlzdCkp CisJCWVsb2coRVJST1IsICJwcm9hcmdkZWZhdWx0cyBpcyBub3QgYSBsaXN0Iik7CisKKwlmb3Jl YWNoKGNlbGwsIG5vZGVkZWZzKQorCXsKKwkJTm9kZSAgICpvbmVkZWYgPSBsZmlyc3QoY2VsbCk7 CisKKwkJc3RyZGVmcyA9IGxhcHBlbmQoc3RyZGVmcywgZGVwYXJzZV9leHByZXNzaW9uKG9uZWRl ZiwgTklMLCBmYWxzZSwgZmFsc2UpKTsKKwl9CisKKwlyZXR1cm4gc3RyZGVmczsKK30KKworLyoK KyAqIFJldHVybiB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBSRUxQRVJT SVNURU5DRSB2YWx1ZS4KKyAqLworc3RhdGljIGNoYXIgKgorZ2V0X3BlcnNpc3RlbmNlX3N0cihj aGFyIHBlcnNpc3RlbmNlKQoreworCXN3aXRjaCAocGVyc2lzdGVuY2UpCisJeworCQljYXNlIFJF TFBFUlNJU1RFTkNFX1RFTVA6CisJCQlyZXR1cm4gIlRFTVBPUkFSWSI7CisJCWNhc2UgUkVMUEVS U0lTVEVOQ0VfVU5MT0dHRUQ6CisJCQlyZXR1cm4gIlVOTE9HR0VEIjsKKwkJY2FzZSBSRUxQRVJT SVNURU5DRV9QRVJNQU5FTlQ6CisJCQlyZXR1cm4gIiI7CisJCWRlZmF1bHQ6CisJCQllbG9nKEVS Uk9SLCAidW5leHBlY3RlZCBwZXJzaXN0ZW5jZSBtYXJraW5nICVjIiwgcGVyc2lzdGVuY2UpOwor CQkJcmV0dXJuICIiOwkJLyogbWFrZSBjb21waWxlciBoYXBweSAqLworCX0KK30KKworLyogQWxs b2NhdGUgYSBuZXcgcGFyYW1ldGVyICovCitzdGF0aWMgT2JqRWxlbSAqCituZXdfb2JqZWN0KE9i alR5cGUgdHlwZSwgY2hhciAqbmFtZSkKK3sKKwlPYmpFbGVtCSpwYXJhbTsKKworCXBhcmFtID0g cGFsbG9jMChzaXplb2YoT2JqRWxlbSkpOworCXBhcmFtLT5uYW1lID0gbmFtZTsKKwlwYXJhbS0+ b2JqdHlwZSA9IHR5cGU7CisKKwlyZXR1cm4gcGFyYW07Cit9CisKKy8qIEFsbG9jYXRlIGEgbmV3 IG9iamVjdCBwYXJhbWV0ZXIgKi8KK3N0YXRpYyBPYmpFbGVtICoKK25ld19vYmplY3Rfb2JqZWN0 KE9ialRyZWUgKnZhbHVlKQoreworCU9iakVsZW0JKnBhcmFtOworCisJcGFyYW0gPSBuZXdfb2Jq ZWN0KE9ialR5cGVPYmplY3QsIE5VTEwpOworCXBhcmFtLT52YWx1ZS5vYmplY3QgPSB2YWx1ZTsK KworCXJldHVybiBwYXJhbTsKK30KKworLyoKKyAqIEFsbG9jYXRlIGEgbmV3IG9iamVjdCB0cmVl IHRvIHN0b3JlIHBhcmFtZXRlciB2YWx1ZXMuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK25ld19v Ymp0cmVlKGNoYXIgKmZtdCkKK3sKKwlPYmpUcmVlCSpwYXJhbXM7CisKKwlwYXJhbXMgPSBwYWxs b2MwKHNpemVvZihPYmpUcmVlKSk7CisJcGFyYW1zLT5wcmVzZW50ID0gdHJ1ZTsKKwlzbGlzdF9p bml0KCZwYXJhbXMtPnBhcmFtcyk7CisKKwlpZiAoZm10KQorCXsKKwkJcGFyYW1zLT5mbXRpbmZv ID0gbWFrZVN0cmluZ0luZm8oKTsKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhwYXJhbXMtPmZt dGluZm8sIGZtdCk7CisJfQorCisJcmV0dXJuIHBhcmFtczsKK30KKworLyoKKyAqIEEgaGVscGVy IHJvdXRpbmUgdG8gc2V0dXAgJXt9RCBhbmQgJXt9TyBlbGVtZW50cy4KKyAqCisgKiBFbGVtZW50 cyAic2NoZW1hbmFtZSIgYW5kICJvYmpuYW1lIiBhcmUgc2V0LiAgSWYgdGhlIG5hbWVzcGFjZSBP SUQKKyAqIGNvcnJlc3BvbmRzIHRvIGEgdGVtcCBzY2hlbWEsIHRoYXQncyBzZXQgdG8gInBnX3Rl bXAiLgorICoKKyAqIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhvc2UgdHdvIGVsZW1lbnQgdHlw ZXMgaXMgd2hldGhlciB0aGUgb2JqbmFtZSB3aWxsCisgKiBiZSBxdW90ZWQgYXMgYW4gaWRlbnRp ZmllciBvciBub3QsIHdoaWNoIGlzIG5vdCBzb21ldGhpbmcgdGhhdCB0aGlzIHJvdXRpbmUKKyAq IGNvbmNlcm5zIGl0c2VsZiB3aXRoOyB0aGF0IHdpbGwgYmUgdXAgdG8gdGhlIGV4cGFuZCBmdW5j dGlvbi4KKyAqLworc3RhdGljIE9ialRyZWUgKgorbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKE9p ZCBuc3BpZCwgY2hhciAqbmFtZSkKK3sKKwlPYmpUcmVlCSpxdWFsaWZpZWQ7CisJY2hhcgkgICAq bmFtZXNwYWNlOworCisJaWYgKGlzQW55VGVtcE5hbWVzcGFjZShuc3BpZCkpCisJCW5hbWVzcGFj ZSA9IHBzdHJkdXAoInBnX3RlbXAiKTsKKwllbHNlCisJCW5hbWVzcGFjZSA9IGdldF9uYW1lc3Bh Y2VfbmFtZShuc3BpZCk7CisKKwlxdWFsaWZpZWQgPSBuZXdfb2JqdHJlZV9WQShOVUxMLCAyLAor CQkJCQkJCSAgInNjaGVtYW5hbWUiLCBPYmpUeXBlU3RyaW5nLCBuYW1lc3BhY2UsCisJCQkJCQkJ ICAib2JqbmFtZSIsIE9ialR5cGVTdHJpbmcsIHBzdHJkdXAobmFtZSkpOworCisJcmV0dXJuIHF1 YWxpZmllZDsKK30KKworLyoKKyAqIEEgaGVscGVyIHJvdXRpbmUgdG8gc2V0dXAgJXt9RCBhbmQg JXt9TyBlbGVtZW50cywgd2l0aCB0aGUgb2JqZWN0IHNwZWNpZmllZAorICogYnkgY2xhc3NJZC9v YmpJZC4KKyAqCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK25ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZV9pZChPaWQgY2xhc3NJZCwgT2lkIG9iamVjdElkKQoreworCU9ialRyZWUJKnF1YWxpZmllZDsK KwlSZWxhdGlvbgljYXRhbG9nOworCUhlYXBUdXBsZQljYXRvYmo7CisJRGF0dW0JCW9iam5zcDsK KwlEYXR1bQkJb2JqbmFtZTsKKwlBdHRyTnVtYmVyCUFudW1fbmFtZTsKKwlBdHRyTnVtYmVyCUFu dW1fbmFtZXNwYWNlOworCUF0dHJOdW1iZXIJQW51bV9vaWQgPSBnZXRfb2JqZWN0X2F0dG51bV9v aWQoY2xhc3NJZCk7CisJYm9vbAkJaXNudWxsOworCisJY2F0YWxvZyA9IHRhYmxlX29wZW4oY2xh c3NJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCWNhdG9iaiA9IGdldF9jYXRhbG9nX29iamVjdF9i eV9vaWQoY2F0YWxvZywgQW51bV9vaWQsIG9iamVjdElkKTsKKwlpZiAoIWNhdG9iaikKKwkJZWxv ZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9iamVjdCAldSBvZiBjYXRhbG9nIFwi JXNcIiIsCisJCQkgb2JqZWN0SWQsIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKGNhdGFsb2cpKTsK KwlBbnVtX25hbWUgPSBnZXRfb2JqZWN0X2F0dG51bV9uYW1lKGNsYXNzSWQpOworCUFudW1fbmFt ZXNwYWNlID0gZ2V0X29iamVjdF9hdHRudW1fbmFtZXNwYWNlKGNsYXNzSWQpOworCisJb2JqbnNw ID0gaGVhcF9nZXRhdHRyKGNhdG9iaiwgQW51bV9uYW1lc3BhY2UsIFJlbGF0aW9uR2V0RGVzY3Io Y2F0YWxvZyksCisJCQkJCQkgICZpc251bGwpOworCWlmIChpc251bGwpCisJCWVsb2coRVJST1Is ICJ1bmV4cGVjdGVkIE5VTEwgbmFtZXNwYWNlIik7CisKKwlvYmpuYW1lID0gaGVhcF9nZXRhdHRy KGNhdG9iaiwgQW51bV9uYW1lLCBSZWxhdGlvbkdldERlc2NyKGNhdGFsb2cpLAorCQkJCQkJICAg JmlzbnVsbCk7CisJaWYgKGlzbnVsbCkKKwkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgTlVMTCBu YW1lIik7CisKKwlxdWFsaWZpZWQgPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoRGF0dW1HZXRP YmplY3RJZChvYmpuc3ApLAorCQkJCQkJCQkJCSBOYW1lU3RyKCpEYXR1bUdldE5hbWUob2JqbmFt ZSkpKTsKKwl0YWJsZV9jbG9zZShjYXRhbG9nLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJu IHF1YWxpZmllZDsKK30KKworLyoKKyAqIEhlbHBlciByb3V0aW5lIGZvciAle31SIG9iamVjdHMs IHdpdGggcm9sZSBzcGVjaWZpZWQgYnkgUm9sZVNwZWMgbm9kZS4KKyAqIFNwZWNpYWwgdmFsdWVz IHN1Y2ggYXMgUk9MRVNQRUNfQ1VSUkVOVF9VU0VSIGFyZSBleHBhbmRlZCB0byB0aGVpciBmaW5h bAorICogbmFtZXMuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK25ld19vYmp0cmVlX2Zvcl9yb2xl c3BlYyhSb2xlU3BlYyAqc3BlYykKK3sKKwlPYmpUcmVlCSAgICpyb2xlOworCWNoYXIJICAgKnJv bGV0eXBlOworCisJaWYgKHNwZWMtPnJvbGV0eXBlICE9IFJPTEVTUEVDX1BVQkxJQykKKwkJcm9s ZXR5cGUgPSBnZXRfcm9sZXNwZWNfbmFtZShzcGVjKTsKKwllbHNlCisJCXJvbGV0eXBlID0gcHN0 cmR1cCgiIik7CisKKwlyb2xlID0gbmV3X29ianRyZWVfVkEoTlVMTCwyLAorCQkJCQkJICAiaXNf cHVibGljIiwgT2JqVHlwZUJvb2wsIHNwZWMtPnJvbGV0eXBlID09IFJPTEVTUEVDX1BVQkxJQywK KwkJCQkJCSAgInJvbGVuYW1lIiwgT2JqVHlwZVN0cmluZywgcm9sZXR5cGUpOworCXJldHVybiBy b2xlOworfQorCisvKgorICogSGVscGVyIHJvdXRpbmUgZm9yICV7fVIgb2JqZWN0cywgd2l0aCBy b2xlIHNwZWNpZmllZCBieSBPSUQuICAoQUNMX0lEX1BVQkxJQworICogbWVhbnMgdG8gdXNlICJw dWJsaWMiKS4KKyAqLworc3RhdGljIE9ialRyZWUgKgorbmV3X29ianRyZWVfZm9yX3JvbGVfaWQo T2lkIHJvbGVvaWQpCit7CisJT2JqVHJlZSAgICAqcm9sZTsKKworCXJvbGUgPSBuZXdfb2JqdHJl ZSgiIik7CisKKwlpZiAocm9sZW9pZCAhPSBBQ0xfSURfUFVCTElDKQorCXsKKwkJSGVhcFR1cGxl CXJvbHR1cDsKKwkJY2hhcgkgICAqcm9sZW5hbWU7CisKKwkJcm9sdHVwID0gU2VhcmNoU3lzQ2Fj aGUxKEFVVEhPSUQsIE9iamVjdElkR2V0RGF0dW0ocm9sZW9pZCkpOworCQlpZiAoIUhlYXBUdXBs ZUlzVmFsaWQocm9sdHVwKSkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNP REVfVU5ERUZJTkVEX09CSkVDVCksCisJCQkJCSBlcnJtc2coInJvbGUgd2l0aCBPSUQgJXUgZG9l cyBub3QgZXhpc3QiLCByb2xlb2lkKSkpOworCisJCXJvbGVuYW1lID0gTmFtZVN0cigoKEZvcm1f cGdfYXV0aGlkKSBHRVRTVFJVQ1Qocm9sdHVwKSktPnJvbG5hbWUpOworCQlhcHBlbmRfc3RyaW5n X29iamVjdChyb2xlLCAiJXtyb2xlbmFtZX1JIiwgcHN0cmR1cChyb2xlbmFtZSkpOworCisJCVJl bGVhc2VTeXNDYWNoZShyb2x0dXApOworCX0KKwllbHNlCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KHJvbGUsICIle3JvbGVuYW1lfUkiLCAicHVibGljIik7CisKKwlyZXR1cm4gcm9sZTsKK30KKwor LyoKKyAqIEEgaGVscGVyIHJvdXRpbmUgdG8gc2V0dXAgJXt9VCBlbGVtZW50cy4KKyAqLworc3Rh dGljIE9ialRyZWUgKgorbmV3X29ianRyZWVfZm9yX3R5cGUoT2lkIHR5cGVJZCwgaW50MzIgdHlw bW9kKQoreworCU9ialRyZWUJKnR5cGVQYXJhbTsKKwlPaWQJCQl0eXBuc3BpZDsKKwljaGFyCSAg ICp0eXBuc3A7CisJY2hhcgkgICAqdHlwZW5hbWUgPSBOVUxMOworCWNoYXIJICAgKnR5cG1vZHN0 cjsKKwlib29sCQl0eXBhcnJheTsKKworCWZvcm1hdF90eXBlX2RldGFpbGVkKHR5cGVJZCwgdHlw bW9kLAorCQkJCQkJICZ0eXBuc3BpZCwgJnR5cGVuYW1lLCAmdHlwbW9kc3RyLCAmdHlwYXJyYXkp OworCisJaWYgKE9pZElzVmFsaWQodHlwbnNwaWQpKQorCQl0eXBuc3AgPSBnZXRfbmFtZXNwYWNl X25hbWVfb3JfdGVtcCh0eXBuc3BpZCk7CisJZWxzZQorCQl0eXBuc3AgPSBwc3RyZHVwKCIiKTsK KworCXR5cGVQYXJhbSA9IG5ld19vYmp0cmVlX1ZBKE5VTEwsIDQsCisJCQkJCQkJICAgInNjaGVt YW5hbWUiLCBPYmpUeXBlU3RyaW5nLCB0eXBuc3AsCisJCQkJCQkJICAgInR5cGVuYW1lIiwgT2Jq VHlwZVN0cmluZywgdHlwZW5hbWUsCisJCQkJCQkJICAgInR5cG1vZCIsIE9ialR5cGVTdHJpbmcs IHR5cG1vZHN0ciwKKwkJCQkJCQkgICAidHlwYXJyYXkiLCBPYmpUeXBlQm9vbCwgdHlwYXJyYXkp OworCisJcmV0dXJuIHR5cGVQYXJhbTsKK30KKworLyoKKyAqIEFsbG9jYXRlIGEgbmV3IG9iamVj dCB0cmVlIHRvIHN0b3JlIHBhcmFtZXRlciB2YWx1ZXMgLS0gdmFyYXJncyB2ZXJzaW9uLgorICoK KyAqIFRoZSAiZm10IiBhcmd1bWVudCBpcyB1c2VkIHRvIGFwcGVuZCBhcyBhICJmbXQiIGVsZW1l bnQgaW4gdGhlIG91dHB1dCBibG9iLgorICogbnVtb2JqcyBpbmRpY2F0ZXMgdGhlIG51bWJlciBv ZiBleHRyYSBlbGVtZW50cyB0byBhcHBlbmQ7IGZvciBlYWNoIG9uZSwgYQorICogbmFtZSAoc3Ry aW5nKSwgdHlwZSAoZnJvbSB0aGUgT2JqVHlwZSBlbnVtKSBhbmQgdmFsdWUgbXVzdCBiZSBzdXBw bGllZC4gIFRoZQorICogdmFsdWUgbXVzdCBtYXRjaCB0aGUgdHlwZSBnaXZlbjsgZm9yIGluc3Rh bmNlLCBPYmpUeXBlSW50ZWdlciByZXF1aXJlcyBhbgorICogaW50NjQsIE9ialR5cGVTdHJpbmcg cmVxdWlyZXMgYSBjaGFyICosIE9ialR5cGVBcnJheSByZXF1aXJlcyBhIGxpc3QgKG9mCisgKiBP YmpFbGVtKSwgT2JqVHlwZU9iamVjdCByZXF1aXJlcyBhbiBPYmpUcmVlLCBhbmQgc28gb24uICBF YWNoIGVsZW1lbnQgdHlwZSAqCisgKiBtdXN0IG1hdGNoIHRoZSBjb252ZXJzaW9uIHNwZWNpZmll ciBnaXZlbiBpbiB0aGUgZm9ybWF0IHN0cmluZywgYXMgZGVzY3JpYmVkCisgKiBpbiBkZGxfZGVw YXJzZV9leHBhbmRfY29tbWFuZCwgcS52LgorICoKKyAqIE5vdGUgd2UgZG9uJ3QgaGF2ZSB0aGUg bHV4dXJ5IG9mIHNwcmludGYtbGlrZSBjb21waWxlciB3YXJuaW5ncyBmb3IKKyAqIG1hbGZvcm1l ZCBhcmd1bWVudCBsaXN0cy4KKyAqLworc3RhdGljIE9ialRyZWUgKgorbmV3X29ianRyZWVfVkEo Y2hhciAqZm10LCBpbnQgbnVtb2JqcywuLi4pCit7CisJT2JqVHJlZQkgICAqdHJlZTsKKwl2YV9s aXN0CQlhcmdzOworCWludAkJCWk7CisKKwkvKiBTZXQgdXAgdGhlIHRvcGxldmVsIG9iamVjdCBh bmQgaXRzICJmbXQiICovCisJdHJlZSA9IG5ld19vYmp0cmVlKGZtdCk7CisKKwkvKiBBbmQgcHJv Y2VzcyB0aGUgZ2l2ZW4gdmFyYXJncyAqLworCXZhX3N0YXJ0KGFyZ3MsIG51bW9ianMpOworCWZv ciAoaSA9IDA7IGkgPCBudW1vYmpzOyBpKyspCisJeworCQljaGFyCSAgICpuYW1lOworCQlPYmpU eXBlCQl0eXBlOworCQlPYmpFbGVtCSAgICplbGVtOworCisJCW5hbWUgPSB2YV9hcmcoYXJncywg Y2hhciAqKTsKKwkJdHlwZSA9IHZhX2FyZyhhcmdzLCBPYmpUeXBlKTsKKwkJZWxlbSA9IG5ld19v YmplY3QodHlwZSwgTlVMTCk7CisKKwkJLyoKKwkJICogRm9yIGFsbCBvdGhlciBwYXJhbSB0eXBl cyB0aGVyZSBtdXN0IGJlIGEgdmFsdWUgaW4gdGhlIHZhcmFyZ3MuCisJCSAqIEZldGNoIGl0IGFu ZCBhZGQgdGhlIGZ1bGx5IGZvcm1lZCBzdWJvYmplY3QgaW50byB0aGUgbWFpbiBvYmplY3QuCisJ CSAqLworCQlzd2l0Y2ggKHR5cGUpCisJCXsKKwkJCWNhc2UgT2JqVHlwZU51bGw6CisJCQkJLyog TnVsbCBwYXJhbXMgZG9uJ3QgaGF2ZSBhIHZhbHVlIChvYnZpb3VzbHkpICovCisJCQkJYnJlYWs7 CisJCQljYXNlIE9ialR5cGVCb29sOgorCQkJCWVsZW0tPnZhbHVlLmJvb2xlYW4gPSB2YV9hcmco YXJncywgaW50KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgT2JqVHlwZVN0cmluZzoKKwkJCQllbGVt LT52YWx1ZS5zdHJpbmcgPSB2YV9hcmcoYXJncywgY2hhciAqKTsKKwkJCQlicmVhazsKKwkJCWNh c2UgT2JqVHlwZUFycmF5OgorCQkJCWVsZW0tPnZhbHVlLmFycmF5ID0gdmFfYXJnKGFyZ3MsIExp c3QgKik7CisJCQkJYnJlYWs7CisJCQljYXNlIE9ialR5cGVJbnRlZ2VyOgorCQkJCWVsZW0tPnZh bHVlLmludGVnZXIgPSB2YV9hcmcoYXJncywgaW50NjQpOworCQkJCWJyZWFrOworCQkJY2FzZSBP YmpUeXBlRmxvYXQ6CisJCQkJZWxlbS0+dmFsdWUuZmx0ID0gdmFfYXJnKGFyZ3MsIGRvdWJsZSk7 CisJCQkJYnJlYWs7CisJCQljYXNlIE9ialR5cGVPYmplY3Q6CisJCQkJZWxlbS0+dmFsdWUub2Jq ZWN0ID0gdmFfYXJnKGFyZ3MsIE9ialRyZWUgKik7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0Ogor CQkJCWVsb2coRVJST1IsICJpbnZhbGlkIE9ialRyZWUgZWxlbWVudCB0eXBlICVkIiwgdHlwZSk7 CisJCX0KKworCQllbGVtLT5uYW1lID0gbmFtZTsKKwkJYXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRy ZWUsIGVsZW0pOworCX0KKworCXZhX2VuZChhcmdzKTsKKwlyZXR1cm4gdHJlZTsKK30KKworLyog QWxsb2NhdGUgYSBuZXcgc3RyaW5nIG9iamVjdCAqLworc3RhdGljIE9iakVsZW0gKgorbmV3X3N0 cmluZ19vYmplY3QoY2hhciAqdmFsdWUpCit7CisJT2JqRWxlbSAgICAqcGFyYW07CisKKwlBc3Nl cnQodmFsdWUpOworCisJcGFyYW0gPSBuZXdfb2JqZWN0KE9ialR5cGVTdHJpbmcsIE5VTEwpOwor CXBhcmFtLT52YWx1ZS5zdHJpbmcgPSB2YWx1ZTsKKworCXJldHVybiBwYXJhbTsKK30KKworLyoK KyAqIFByb2Nlc3MgdGhlIHByZS1idWlsdCBmb3JtYXQgc3RyaW5nIGZyb20gdGhlIE9ialRyZWUg aW50byB0aGUgb3V0cHV0IHBhcnNlCisgKiBzdGF0ZS4KKyAqLworc3RhdGljIHZvaWQKK29ianRy ZWVfZm10X3RvX2pzb25iX2VsZW1lbnQoSnNvbmJQYXJzZVN0YXRlICpzdGF0ZSwgT2JqVHJlZSAq dHJlZSkKK3sKKwlKc29uYlZhbHVlCWtleTsKKwlKc29uYlZhbHVlCXZhbDsKKworCWlmICh0cmVl LT5mbXRpbmZvID09IE5VTEwpCisJCXJldHVybjsKKworCS8qIFB1c2ggdGhlIGtleSBmaXJzdCAq LworCWtleS50eXBlID0gamJ2U3RyaW5nOworCWtleS52YWwuc3RyaW5nLnZhbCA9ICJmbXQiOwor CWtleS52YWwuc3RyaW5nLmxlbiA9IHN0cmxlbihrZXkudmFsLnN0cmluZy52YWwpOworCXB1c2hK c29uYlZhbHVlKCZzdGF0ZSwgV0pCX0tFWSwgJmtleSk7CisKKwkvKiBUaGVuIHByb2Nlc3MgdGhl IHByZS1idWlsdCBmb3JtYXQgc3RyaW5nICovCisJdmFsLnR5cGUgPSBqYnZTdHJpbmc7CisJdmFs LnZhbC5zdHJpbmcubGVuID0gdHJlZS0+Zm10aW5mby0+bGVuOworCXZhbC52YWwuc3RyaW5nLnZh bCA9IHRyZWUtPmZtdGluZm8tPmRhdGE7CisJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfVkFM VUUsICZ2YWwpOworfQorCisvKgorICogQ3JlYXRlIGEgSlNPTkIgcmVwcmVzZW50YXRpb24gZnJv bSBhbiBPYmpUcmVlLgorICovCitzdGF0aWMgSnNvbmIgKgorb2JqdHJlZV90b19qc29uYihPYmpU cmVlICp0cmVlKQoreworCUpzb25iVmFsdWUgKnZhbHVlOworCisJdmFsdWUgPSBvYmp0cmVlX3Rv X2pzb25iX3JlYyh0cmVlLCBOVUxMKTsKKwlyZXR1cm4gSnNvbmJWYWx1ZVRvSnNvbmIodmFsdWUp OworfQorCisvKgorICogSGVscGVyIGZvciBvYmp0cmVlX3RvX2pzb25iOiBwcm9jZXNzIGFuIGlu ZGl2aWR1YWwgZWxlbWVudCBmcm9tIGFuIG9iamVjdCBvcgorICogYW4gYXJyYXkgaW50byB0aGUg b3V0cHV0IHBhcnNlIHN0YXRlLgorICovCitzdGF0aWMgdm9pZAorb2JqdHJlZV90b19qc29uYl9l bGVtZW50KEpzb25iUGFyc2VTdGF0ZSAqc3RhdGUsIE9iakVsZW0gKm9iamVjdCwKKwkJCQkJCSBK c29uYkl0ZXJhdG9yVG9rZW4gZWxlbV90b2tlbikKK3sKKwlMaXN0Q2VsbCAgICpjZWxsOworCUpz b25iVmFsdWUJdmFsOworCisJc3dpdGNoIChvYmplY3QtPm9ianR5cGUpCisJeworCQljYXNlIE9i alR5cGVOdWxsOgorCQkJdmFsLnR5cGUgPSBqYnZOdWxsOworCQkJcHVzaEpzb25iVmFsdWUoJnN0 YXRlLCBlbGVtX3Rva2VuLCAmdmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT2JqVHlwZVN0cmlu ZzoKKwkJCXZhbC50eXBlID0gamJ2U3RyaW5nOworCQkJdmFsLnZhbC5zdHJpbmcubGVuID0gc3Ry bGVuKG9iamVjdC0+dmFsdWUuc3RyaW5nKTsKKwkJCXZhbC52YWwuc3RyaW5nLnZhbCA9IG9iamVj dC0+dmFsdWUuc3RyaW5nOworCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBlbGVtX3Rva2VuLCAm dmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT2JqVHlwZUludGVnZXI6CisJCQl2YWwudHlwZSA9 IGpidk51bWVyaWM7CisJCQl2YWwudmFsLm51bWVyaWMgPSAoTnVtZXJpYykKKwkJCQlEYXR1bUdl dE51bWVyaWMoRGlyZWN0RnVuY3Rpb25DYWxsMShpbnQ4X251bWVyaWMsCisJCQkJCQkJCQkJCQkJ b2JqZWN0LT52YWx1ZS5pbnRlZ2VyKSk7CisJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIGVsZW1f dG9rZW4sICZ2YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPYmpUeXBlRmxvYXQ6CisJCQl2YWwu dHlwZSA9IGpidk51bWVyaWM7CisJCQl2YWwudmFsLm51bWVyaWMgPSAoTnVtZXJpYykKKwkJCQlE YXR1bUdldE51bWVyaWMoRGlyZWN0RnVuY3Rpb25DYWxsMShmbG9hdDhfbnVtZXJpYywKKwkJCQkJ CQkJCQkJCQlvYmplY3QtPnZhbHVlLmludGVnZXIpKTsKKwkJCXB1c2hKc29uYlZhbHVlKCZzdGF0 ZSwgZWxlbV90b2tlbiwgJnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIE9ialR5cGVCb29sOgor CQkJdmFsLnR5cGUgPSBqYnZCb29sOworCQkJdmFsLnZhbC5ib29sZWFuID0gb2JqZWN0LT52YWx1 ZS5ib29sZWFuOworCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBlbGVtX3Rva2VuLCAmdmFsKTsK KwkJCWJyZWFrOworCisJCWNhc2UgT2JqVHlwZU9iamVjdDoKKwkJCS8qIFJlY3Vyc2l2ZWx5IGFk ZCB0aGUgb2JqZWN0IGludG8gdGhlIGV4aXN0aW5nIHBhcnNlIHN0YXRlICovCisJCQlvYmp0cmVl X3RvX2pzb25iX3JlYyhvYmplY3QtPnZhbHVlLm9iamVjdCwgc3RhdGUpOworCQkJYnJlYWs7CisK KwkJY2FzZSBPYmpUeXBlQXJyYXk6CisJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9CRUdJ Tl9BUlJBWSwgTlVMTCk7CisJCQlmb3JlYWNoKGNlbGwsIG9iamVjdC0+dmFsdWUuYXJyYXkpCisJ CQl7CisJCQkJT2JqRWxlbSAgICplbGVtID0gbGZpcnN0KGNlbGwpOworCisJCQkJb2JqdHJlZV90 b19qc29uYl9lbGVtZW50KHN0YXRlLCBlbGVtLCBXSkJfRUxFTSk7CisJCQl9CisJCQlwdXNoSnNv bmJWYWx1ZSgmc3RhdGUsIFdKQl9FTkRfQVJSQVksIE5VTEwpOworCQkJYnJlYWs7CisKKwkJZGVm YXVsdDoKKwkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgb2JqZWN0IHR5cGUgJWQiLCBvYmpl Y3QtPm9ianR5cGUpOworCQkJYnJlYWs7CisJfQorfQorCisvKgorICogUmVjdXJzaXZlIGhlbHBl ciBmb3Igb2JqdHJlZV90b19qc29uYi4KKyAqLworc3RhdGljIEpzb25iVmFsdWUgKgorb2JqdHJl ZV90b19qc29uYl9yZWMoT2JqVHJlZSAqdHJlZSwgSnNvbmJQYXJzZVN0YXRlICpzdGF0ZSkKK3sK KwlzbGlzdF9pdGVyCWl0ZXI7CisKKwlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9P QkpFQ1QsIE5VTEwpOworCisJb2JqdHJlZV9mbXRfdG9fanNvbmJfZWxlbWVudChzdGF0ZSwgdHJl ZSk7CisKKwlzbGlzdF9mb3JlYWNoKGl0ZXIsICZ0cmVlLT5wYXJhbXMpCisJeworCQlPYmpFbGVt CSpvYmplY3QgPSBzbGlzdF9jb250YWluZXIoT2JqRWxlbSwgbm9kZSwgaXRlci5jdXIpOworCQlK c29uYlZhbHVlCWtleTsKKworCQkvKiBQdXNoIHRoZSBrZXkgZmlyc3QgKi8KKwkJa2V5LnR5cGUg PSBqYnZTdHJpbmc7CisJCWtleS52YWwuc3RyaW5nLmxlbiA9IHN0cmxlbihvYmplY3QtPm5hbWUp OworCQlrZXkudmFsLnN0cmluZy52YWwgPSBvYmplY3QtPm5hbWU7CisJCXB1c2hKc29uYlZhbHVl KCZzdGF0ZSwgV0pCX0tFWSwgJmtleSk7CisKKwkJLyogVGhlbiBwcm9jZXNzIHRoZSB2YWx1ZSBh Y2NvcmRpbmcgdG8gaXRzIHR5cGUgKi8KKwkJb2JqdHJlZV90b19qc29uYl9lbGVtZW50KHN0YXRl LCBvYmplY3QsIFdKQl9WQUxVRSk7CisJfQorCisJcmV0dXJuIHB1c2hKc29uYlZhbHVlKCZzdGF0 ZSwgV0pCX0VORF9PQkpFQ1QsIE5VTEwpOworfQorCisvKgorICogU3Vicm91dGluZSBmb3IgQ1JF QVRFIFRBQkxFL0NSRUFURSBET01BSU4gZGVwYXJzaW5nLgorICoKKyAqIEdpdmVuIGEgdGFibGUg T0lEIG9yIGRvbWFpbiBPSUQsIG9idGFpbiBpdHMgY29uc3RyYWludHMgYW5kIGFwcGVuZCB0aGVt IHRvCisgKiB0aGUgZ2l2ZW4gZWxlbWVudHMgbGlzdC4gIFRoZSB1cGRhdGVkIGxpc3QgaXMgcmV0 dXJuZWQuCisgKgorICogVGhpcyB3b3JrcyBmb3IgdHlwZWQgdGFibGVzLCByZWd1bGFyIHRhYmxl cywgYW5kIGRvbWFpbnMuCisgKgorICogTm90ZSB0aGF0IENPTlNUUkFJTlRfRk9SRUlHTiBjb25z dHJhaW50cyBhcmUgYWx3YXlzIGlnbm9yZWQuCisgKi8KK3N0YXRpYyBMaXN0ICoKK29idGFpbkNv bnN0cmFpbnRzKExpc3QgKmVsZW1lbnRzLCBPaWQgcmVsYXRpb25JZCwgT2lkIGRvbWFpbklkKQor eworCVJlbGF0aW9uCWNvblJlbDsKKwlTY2FuS2V5RGF0YSBrZXk7CisJU3lzU2NhbkRlc2Mgc2Nh bjsKKwlIZWFwVHVwbGUJdHVwbGU7CisJT2JqVHJlZQkqY29uc3RyOworCisJLyogT25seSBvbmUg bWF5IGJlIHZhbGlkICovCisJQXNzZXJ0KE9pZElzVmFsaWQocmVsYXRpb25JZCkgXiBPaWRJc1Zh bGlkKGRvbWFpbklkKSk7CisKKwkvKgorCSAqIFNjYW4gcGdfY29uc3RyYWludCB0byBmZXRjaCBh bGwgY29uc3RyYWludHMgbGlua2VkIHRvIHRoZSBnaXZlbgorCSAqIHJlbGF0aW9uLgorCSAqLwor CWNvblJlbCA9IHRhYmxlX29wZW4oQ29uc3RyYWludFJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9j ayk7CisJaWYgKE9pZElzVmFsaWQocmVsYXRpb25JZCkpCisJeworCQlTY2FuS2V5SW5pdCgma2V5 LAorCQkJCQlBbnVtX3BnX2NvbnN0cmFpbnRfY29ucmVsaWQsCisJCQkJCUJURXF1YWxTdHJhdGVn eU51bWJlciwgRl9PSURFUSwKKwkJCQkJT2JqZWN0SWRHZXREYXR1bShyZWxhdGlvbklkKSk7CisJ CXNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4oY29uUmVsLCBDb25zdHJhaW50UmVsaWRUeXBpZE5h bWVJbmRleElkLAorCQkJCQkJCQkgIHRydWUsIE5VTEwsIDEsICZrZXkpOworCX0KKwllbHNlCisJ eworCQlBc3NlcnQoT2lkSXNWYWxpZChkb21haW5JZCkpOworCQlTY2FuS2V5SW5pdCgma2V5LAor CQkJCQlBbnVtX3BnX2NvbnN0cmFpbnRfY29udHlwaWQsCisJCQkJCUJURXF1YWxTdHJhdGVneU51 bWJlciwgRl9PSURFUSwKKwkJCQkJT2JqZWN0SWRHZXREYXR1bShkb21haW5JZCkpOworCQlzY2Fu ID0gc3lzdGFibGVfYmVnaW5zY2FuKGNvblJlbCwgQ29uc3RyYWludFR5cGlkSW5kZXhJZCwKKwkJ CQkJCQkJICB0cnVlLCBOVUxMLCAxLCAma2V5KTsKKwl9CisKKwkvKgorCSAqIEZvciBlYWNoIGNv bnN0cmFpbnQsIGFkZCBhIG5vZGUgdG8gdGhlIGxpc3Qgb2YgdGFibGUgZWxlbWVudHMuICBJbgor CSAqIHRoZXNlIG5vZGVzIHdlIGluY2x1ZGUgbm90IG9ubHkgdGhlIHByaW50YWJsZSBpbmZvcm1h dGlvbiAoImZtdCIpLCBidXQKKwkgKiBhbHNvIHNlcGFyYXRlIGF0dHJpYnV0ZXMgdG8gaW5kaWNh dGUgdGhlIHR5cGUgb2YgY29uc3RyYWludCwgZm9yCisJICogYXV0b21hdGljIHByb2Nlc3Npbmcu CisJICovCisJd2hpbGUgKEhlYXBUdXBsZUlzVmFsaWQodHVwbGUgPSBzeXN0YWJsZV9nZXRuZXh0 KHNjYW4pKSkKKwl7CisJCUZvcm1fcGdfY29uc3RyYWludCBjb25zdHJGb3JtOworCQljaGFyCSAg ICpjb250eXBlOworCisJCWNvbnN0ckZvcm0gPSAoRm9ybV9wZ19jb25zdHJhaW50KSBHRVRTVFJV Q1QodHVwbGUpOworCisJCXN3aXRjaCAoY29uc3RyRm9ybS0+Y29udHlwZSkKKwkJeworCQkJY2Fz ZSBDT05TVFJBSU5UX0NIRUNLOgorCQkJCWNvbnR5cGUgPSAiY2hlY2siOworCQkJCWJyZWFrOwor CQkJY2FzZSBDT05TVFJBSU5UX0ZPUkVJR046CisJCQkJY29udGludWU7CS8qIG5vdCBoZXJlICov CisJCQljYXNlIENPTlNUUkFJTlRfUFJJTUFSWToKKwkJCQljb250eXBlID0gInByaW1hcnkga2V5 IjsKKwkJCQlicmVhazsKKwkJCWNhc2UgQ09OU1RSQUlOVF9VTklRVUU6CisJCQkJY29udHlwZSA9 ICJ1bmlxdWUiOworCQkJCWJyZWFrOworCQkJY2FzZSBDT05TVFJBSU5UX1RSSUdHRVI6CisJCQkJ Y29udHlwZSA9ICJ0cmlnZ2VyIjsKKwkJCQlicmVhazsKKwkJCWNhc2UgQ09OU1RSQUlOVF9FWENM VVNJT046CisJCQkJY29udHlwZSA9ICJleGNsdXNpb24iOworCQkJCWJyZWFrOworCQkJZGVmYXVs dDoKKwkJCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIGNvbnN0cmFpbnQgdHlwZSIpOworCQl9 CisKKwkJLyoKKwkJICogInR5cGUiIGFuZCAiY29udHlwZSIgYXJlIG5vdCBwYXJ0IG9mIHRoZSBw cmludGFibGUgb3V0cHV0LCBidXQgYXJlCisJCSAqIHVzZWZ1bCB0byBwcm9ncmFtbWF0aWNhbGx5 IGRpc3Rpbmd1aXNoIHRoZXNlIGZyb20gY29sdW1ucyBhbmQgYW1vbmcKKwkJICogZGlmZmVyZW50 IGNvbnN0cmFpbnQgdHlwZXMuCisJCSAqCisJCSAqIFhYWCBpdCBtaWdodCBiZSB1c2VmdWwgdG8g YWxzbyBsaXN0IHRoZSBjb2x1bW4gbmFtZXMgaW4gYSBQSywgZXRjLgorCQkgKi8KKwkJY29uc3Ry ID0gbmV3X29ianRyZWVfVkEoIkNPTlNUUkFJTlQgJXtuYW1lfUkgJXtkZWZpbml0aW9ufXMiLAor CQkJCQkJCQk0LAorCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJjb25zdHJhaW50IiwK KwkJCQkJCQkJImNvbnR5cGUiLCBPYmpUeXBlU3RyaW5nLCBjb250eXBlLAorCQkJCQkJCQkibmFt ZSIsIE9ialR5cGVTdHJpbmcsIE5hbWVTdHIoY29uc3RyRm9ybS0+Y29ubmFtZSksCisJCQkJCQkJ CSJkZWZpbml0aW9uIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJIHBnX2dldF9jb25zdHJhaW50 ZGVmX2NvbW1hbmRfc2ltcGxlKGNvbnN0ckZvcm0tPm9pZCkpOworCQllbGVtZW50cyA9IGxhcHBl bmQoZWxlbWVudHMsIG5ld19vYmplY3Rfb2JqZWN0KGNvbnN0cikpOworCX0KKworCXN5c3RhYmxl X2VuZHNjYW4oc2Nhbik7CisJdGFibGVfY2xvc2UoY29uUmVsLCBBY2Nlc3NTaGFyZUxvY2spOwor CisJcmV0dXJuIGVsZW1lbnRzOworfQorCisvKgorICogUmV0dXJuIGFuIGluZGV4IGRlZmluaXRp b24sIHNwbGl0IGluIHNldmVyYWwgcGllY2VzLgorICoKKyAqIEEgbGFyZ2UgYW1vdW50IG9mIGNv ZGUgaXMgZHVwbGljYXRlZCBmcm9tICBwZ19nZXRfaW5kZXhkZWZfd29ya2VyLCBidXQKKyAqIGNv bnRyb2wgZmxvdyBpcyBkaWZmZXJlbnQgZW5vdWdoIHRoYXQgaXQgZG9lc24ndCBzZWVtIHdvcnRo IGtlZXBpbmcgdGhlbQorICogdG9nZXRoZXIuCisgKi8KK3N0YXRpYyB2b2lkCitwZ19nZXRfaW5k ZXhkZWZfZGV0YWlsZWQoT2lkIGluZGV4cmVsaWQsCisJCQkJCQkgY2hhciAqKmluZGV4X2FtLAor CQkJCQkJIGNoYXIgKipkZWZpbml0aW9uLAorCQkJCQkJIGNoYXIgKipyZWxvcHRpb25zLAorCQkJ CQkJIGNoYXIgKip0YWJsZXNwYWNlLAorCQkJCQkJIGNoYXIgKip3aGVyZUNsYXVzZSkKK3sKKwlI ZWFwVHVwbGUJaHRfaWR4OworCUhlYXBUdXBsZQlodF9pZHhyZWw7CisJSGVhcFR1cGxlCWh0X2Ft OworCUZvcm1fcGdfaW5kZXggaWR4cmVjOworCUZvcm1fcGdfY2xhc3MgaWR4cmVscmVjOworCUZv cm1fcGdfYW0JYW1yZWM7CisJSW5kZXhBbVJvdXRpbmUgKmFtcm91dGluZTsKKwlMaXN0CSAgICpp bmRleHByczsKKwlMaXN0Q2VsbCAgICppbmRleHByX2l0ZW07CisJTGlzdAkgICAqY29udGV4dDsK KwlPaWQJCQlpbmRyZWxpZDsKKwlpbnQJCQlrZXlubzsKKwlEYXR1bQkJaW5kY29sbERhdHVtOwor CURhdHVtCQlpbmRjbGFzc0RhdHVtOworCURhdHVtCQlpbmRvcHRpb25EYXR1bTsKKwlib29sCQlp c251bGw7CisJb2lkdmVjdG9yICAqaW5kY29sbGF0aW9uOworCW9pZHZlY3RvciAgKmluZGNsYXNz OworCWludDJ2ZWN0b3IgKmluZG9wdGlvbjsKKwlTdHJpbmdJbmZvRGF0YSBkZWZpbml0aW9uQnVm OworCisJLyoKKwkgKiBGZXRjaCB0aGUgcGdfaW5kZXggdHVwbGUgYnkgdGhlIE9pZCBvZiB0aGUg aW5kZXgKKwkgKi8KKwlodF9pZHggPSBTZWFyY2hTeXNDYWNoZTEoSU5ERVhSRUxJRCwgT2JqZWN0 SWRHZXREYXR1bShpbmRleHJlbGlkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGh0X2lkeCkp CisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBpbmRleCAldSIsIGluZGV4 cmVsaWQpOworCWlkeHJlYyA9IChGb3JtX3BnX2luZGV4KSBHRVRTVFJVQ1QoaHRfaWR4KTsKKwor CWluZHJlbGlkID0gaWR4cmVjLT5pbmRyZWxpZDsKKwlBc3NlcnQoaW5kZXhyZWxpZCA9PSBpZHhy ZWMtPmluZGV4cmVsaWQpOworCisJLyogTXVzdCBnZXQgaW5kY29sbGF0aW9uLCBpbmRjbGFzcywg YW5kIGluZG9wdGlvbiB0aGUgaGFyZCB3YXkgKi8KKwlpbmRjb2xsRGF0dW0gPSBTeXNDYWNoZUdl dEF0dHIoSU5ERVhSRUxJRCwgaHRfaWR4LAorCQkJCQkJCQkgICBBbnVtX3BnX2luZGV4X2luZGNv bGxhdGlvbiwgJmlzbnVsbCk7CisJQXNzZXJ0KCFpc251bGwpOworCWluZGNvbGxhdGlvbiA9IChv aWR2ZWN0b3IgKikgRGF0dW1HZXRQb2ludGVyKGluZGNvbGxEYXR1bSk7CisKKwlpbmRjbGFzc0Rh dHVtID0gU3lzQ2FjaGVHZXRBdHRyKElOREVYUkVMSUQsIGh0X2lkeCwKKwkJCQkJCQkJCUFudW1f cGdfaW5kZXhfaW5kY2xhc3MsICZpc251bGwpOworCUFzc2VydCghaXNudWxsKTsKKwlpbmRjbGFz cyA9IChvaWR2ZWN0b3IgKikgRGF0dW1HZXRQb2ludGVyKGluZGNsYXNzRGF0dW0pOworCisJaW5k b3B0aW9uRGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoSU5ERVhSRUxJRCwgaHRfaWR4LAorCQkJCQkJ CQkJIEFudW1fcGdfaW5kZXhfaW5kb3B0aW9uLCAmaXNudWxsKTsKKwlBc3NlcnQoIWlzbnVsbCk7 CisJaW5kb3B0aW9uID0gKGludDJ2ZWN0b3IgKikgRGF0dW1HZXRQb2ludGVyKGluZG9wdGlvbkRh dHVtKTsKKworCS8qCisJICogRmV0Y2ggdGhlIHBnX2NsYXNzIHR1cGxlIG9mIHRoZSBpbmRleCBy ZWxhdGlvbgorCSAqLworCWh0X2lkeHJlbCA9IFNlYXJjaFN5c0NhY2hlMShSRUxPSUQsIE9iamVj dElkR2V0RGF0dW0oaW5kZXhyZWxpZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChodF9pZHhy ZWwpKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcmVsYXRpb24gJXUi LCBpbmRleHJlbGlkKTsKKwlpZHhyZWxyZWMgPSAoRm9ybV9wZ19jbGFzcykgR0VUU1RSVUNUKGh0 X2lkeHJlbCk7CisKKwkvKgorCSAqIEZldGNoIHRoZSBwZ19hbSB0dXBsZSBvZiB0aGUgaW5kZXgn IGFjY2VzcyBtZXRob2QKKwkgKi8KKwlodF9hbSA9IFNlYXJjaFN5c0NhY2hlMShBTU9JRCwgT2Jq ZWN0SWRHZXREYXR1bShpZHhyZWxyZWMtPnJlbGFtKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlk KGh0X2FtKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGFjY2VzcyBt ZXRob2QgJXUiLAorCQkJIGlkeHJlbHJlYy0+cmVsYW0pOworCWFtcmVjID0gKEZvcm1fcGdfYW0p IEdFVFNUUlVDVChodF9hbSk7CisKKwkvKgorCSAqIEdldCB0aGUgaW5kZXggZXhwcmVzc2lvbnMs IGlmIGFueS4gIChOT1RFOiB3ZSBkbyBub3QgdXNlIHRoZSByZWxjYWNoZQorCSAqIHZlcnNpb25z IG9mIHRoZSBleHByZXNzaW9ucyBhbmQgcHJlZGljYXRlLCBiZWNhdXNlIHdlIHdhbnQgdG8gZGlz cGxheQorCSAqIG5vbi1jb25zdC1mb2xkZWQgZXhwcmVzc2lvbnMuKQorCSAqLworCWlmICghaGVh cF9hdHRpc251bGwoaHRfaWR4LCBBbnVtX3BnX2luZGV4X2luZGV4cHJzLCBOVUxMKSkKKwl7CisJ CURhdHVtCQlleHByc0RhdHVtOworCQlib29sCQlpc251bGw7CisJCWNoYXIJICAgKmV4cHJzU3Ry aW5nOworCisJCWV4cHJzRGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoSU5ERVhSRUxJRCwgaHRfaWR4 LAorCQkJCQkJCQkJIEFudW1fcGdfaW5kZXhfaW5kZXhwcnMsICZpc251bGwpOworCQlBc3NlcnQo IWlzbnVsbCk7CisJCWV4cHJzU3RyaW5nID0gVGV4dERhdHVtR2V0Q1N0cmluZyhleHByc0RhdHVt KTsKKwkJaW5kZXhwcnMgPSAoTGlzdCAqKSBzdHJpbmdUb05vZGUoZXhwcnNTdHJpbmcpOworCQlw ZnJlZShleHByc1N0cmluZyk7CisJfQorCWVsc2UKKwkJaW5kZXhwcnMgPSBOSUw7CisKKwlpbmRl eHByX2l0ZW0gPSBsaXN0X2hlYWQoaW5kZXhwcnMpOworCisJY29udGV4dCA9IGRlcGFyc2VfY29u dGV4dF9mb3IoZ2V0X3JlbF9uYW1lKGluZHJlbGlkKSwgaW5kcmVsaWQpOworCisJaW5pdFN0cmlu Z0luZm8oJmRlZmluaXRpb25CdWYpOworCisJLyogT3V0cHV0IGluZGV4IEFNICovCisJKmluZGV4 X2FtID0gcHN0cmR1cChxdW90ZV9pZGVudGlmaWVyKE5hbWVTdHIoYW1yZWMtPmFtbmFtZSkpKTsK KworCS8qIEZldGNoIHRoZSBpbmRleCBBTSdzIEFQSSBzdHJ1Y3QgKi8KKwlhbXJvdXRpbmUgPSBH ZXRJbmRleEFtUm91dGluZShhbXJlYy0+YW1oYW5kbGVyKTsKKworCS8qCisJICogT3V0cHV0IGlu ZGV4IGRlZmluaXRpb24uICBOb3RlIHRoZSBvdXRlciBwYXJlbnMgbXVzdCBiZSBzdXBwbGllZCBi eQorCSAqIGNhbGxlci4KKwkgKi8KKwlmb3IgKGtleW5vID0gMDsga2V5bm8gPCBpZHhyZWMtPmlu ZG5hdHRzOyBrZXlubysrKQorCXsKKwkJQXR0ck51bWJlcglhdHRudW0gPSBpZHhyZWMtPmluZGtl eS52YWx1ZXNba2V5bm9dOworCQlpbnQxNgkJb3B0ID0gaW5kb3B0aW9uLT52YWx1ZXNba2V5bm9d OworCQlPaWQJCQlrZXljb2x0eXBlOworCQlPaWQJCQlrZXljb2xjb2xsYXRpb247CisJCU9pZAkJ CWluZGNvbGw7CisKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZGVmaW5pdGlvbkJ1Ziwga2V5 bm8gPT0gMCA/ICIiIDogIiwgIik7CisKKwkJaWYgKGF0dG51bSAhPSAwKQorCQl7CisJCQkvKiBT aW1wbGUgaW5kZXggY29sdW1uICovCisJCQljaGFyCSAgICphdHRuYW1lOworCQkJaW50MzIJCWtl eWNvbHR5cG1vZDsKKworCQkJYXR0bmFtZSA9IGdldF9hdHRuYW1lKGluZHJlbGlkLCBhdHRudW0s IGZhbHNlKTsKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmRlZmluaXRpb25CdWYsIHF1b3Rl X2lkZW50aWZpZXIoYXR0bmFtZSkpOworCQkJZ2V0X2F0dHR5cGV0eXBtb2Rjb2xsKGluZHJlbGlk LCBhdHRudW0sCisJCQkJCQkJCSAgJmtleWNvbHR5cGUsICZrZXljb2x0eXBtb2QsCisJCQkJCQkJ CSAgJmtleWNvbGNvbGxhdGlvbik7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKiBFeHByZXNzaW9u YWwgaW5kZXggKi8KKwkJCU5vZGUJICAgKmluZGV4a2V5OworCQkJY2hhcgkgICAqc3RyOworCisJ CQlpZiAoaW5kZXhwcl9pdGVtID09IE5VTEwpCisJCQkJZWxvZyhFUlJPUiwgInRvbyBmZXcgZW50 cmllcyBpbiBpbmRleHBycyBsaXN0Iik7CisJCQlpbmRleGtleSA9IChOb2RlICopIGxmaXJzdChp bmRleHByX2l0ZW0pOworCQkJaW5kZXhwcl9pdGVtID0gbG5leHQoaW5kZXhwcnMsIGluZGV4cHJf aXRlbSk7CisJCQkvKiBEZXBhcnNlICovCisJCQlzdHIgPSBkZXBhcnNlX2V4cHJlc3Npb24oaW5k ZXhrZXksIGNvbnRleHQsIGZhbHNlLCBmYWxzZSk7CisKKwkJCS8qIE5lZWQgcGFyZW5zIGlmIGl0 J3Mgbm90IGEgYmFyZSBmdW5jdGlvbiBjYWxsICovCisJCQlpZiAoaW5kZXhrZXkgJiYgSXNBKGlu ZGV4a2V5LCBGdW5jRXhwcikgJiYKKwkJCQkoKEZ1bmNFeHByICopIGluZGV4a2V5KS0+ZnVuY2Zv cm1hdCA9PSBDT0VSQ0VfRVhQTElDSVRfQ0FMTCkKKwkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5n KCZkZWZpbml0aW9uQnVmLCBzdHIpOworCQkJZWxzZQorCQkJCWFwcGVuZFN0cmluZ0luZm8oJmRl ZmluaXRpb25CdWYsICIoJXMpIiwgc3RyKTsKKworCQkJa2V5Y29sdHlwZSA9IGV4cHJUeXBlKGlu ZGV4a2V5KTsKKwkJCWtleWNvbGNvbGxhdGlvbiA9IGV4cHJDb2xsYXRpb24oaW5kZXhrZXkpOwor CQl9CisKKwkJLyogQWRkIGNvbGxhdGlvbiwgZXZlbiBpZiBkZWZhdWx0ICovCisJCWluZGNvbGwg PSBpbmRjb2xsYXRpb24tPnZhbHVlc1trZXlub107CisJCWlmIChPaWRJc1ZhbGlkKGluZGNvbGwp KQorCQkJYXBwZW5kU3RyaW5nSW5mbygmZGVmaW5pdGlvbkJ1ZiwgIiBDT0xMQVRFICVzIiwKKwkJ CQkJCQkgZ2VuZXJhdGVfY29sbGF0aW9uX25hbWUoKGluZGNvbGwpKSk7CisKKwkJLyogQWRkIHRo ZSBvcGVyYXRvciBjbGFzcyBuYW1lLCBldmVuIGlmIGRlZmF1bHQgKi8KKwkJZ2V0X29wY2xhc3Nf bmFtZShpbmRjbGFzcy0+dmFsdWVzW2tleW5vXSwgSW52YWxpZE9pZCwgJmRlZmluaXRpb25CdWYp OworCisJCS8qIEFkZCBvcHRpb25zIGlmIHJlbGV2YW50ICovCisJCWlmIChhbXJvdXRpbmUtPmFt Y2Fub3JkZXIpCisJCXsKKwkJCS8qIElmIGl0IHN1cHBvcnRzIHNvcnQgb3JkZXJpbmcsIHJlcG9y dCBERVNDIGFuZCBOVUxMUyBvcHRzICovCisJCQlpZiAob3B0ICYgSU5ET1BUSU9OX0RFU0MpCisJ CQl7CisJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZGVmaW5pdGlvbkJ1ZiwgIiBERVNDIik7 CisJCQkJLyogTlVMTFMgRklSU1QgaXMgdGhlIGRlZmF1bHQgaW4gdGhpcyBjYXNlICovCisJCQkJ aWYgKCEob3B0ICYgSU5ET1BUSU9OX05VTExTX0ZJUlNUKSkKKwkJCQkJYXBwZW5kU3RyaW5nSW5m b1N0cmluZygmZGVmaW5pdGlvbkJ1ZiwgIiBOVUxMUyBMQVNUIik7CisJCQl9CisJCQllbHNlCisJ CQl7CisJCQkJaWYgKG9wdCAmIElORE9QVElPTl9OVUxMU19GSVJTVCkKKwkJCQkJYXBwZW5kU3Ry aW5nSW5mb1N0cmluZygmZGVmaW5pdGlvbkJ1ZiwgIiBOVUxMUyBGSVJTVCIpOworCQkJfQorCQl9 CisKKwkJLyogWFhYIGV4Y2x1ZGVPcHMgdGhpbmd5IHdhcyBoZXJlOyBkbyB3ZSBuZWVkIGFueXRo aW5nPyAqLworCX0KKwkqZGVmaW5pdGlvbiA9IGRlZmluaXRpb25CdWYuZGF0YTsKKworCS8qIE91 dHB1dCByZWxvcHRpb25zICovCisJKnJlbG9wdGlvbnMgPSBmbGF0dGVuX3JlbG9wdGlvbnMoaW5k ZXhyZWxpZCk7CisKKwkvKiBPdXRwdXQgdGFibGVzcGFjZSAqLworCXsKKwkJT2lkCQkJdGJsc3Bj OworCisJCXRibHNwYyA9IGdldF9yZWxfdGFibGVzcGFjZShpbmRleHJlbGlkKTsKKwkJaWYgKE9p ZElzVmFsaWQodGJsc3BjKSkKKwkJCSp0YWJsZXNwYWNlID0gcHN0cmR1cChxdW90ZV9pZGVudGlm aWVyKGdldF90YWJsZXNwYWNlX25hbWUodGJsc3BjKSkpOworCQllbHNlCisJCQkqdGFibGVzcGFj ZSA9IE5VTEw7CisJfQorCisJLyogUmVwb3J0IGluZGV4IHByZWRpY2F0ZSwgaWYgYW55ICovCisJ aWYgKCFoZWFwX2F0dGlzbnVsbChodF9pZHgsIEFudW1fcGdfaW5kZXhfaW5kcHJlZCwgTlVMTCkp CisJeworCQlOb2RlCSAgICpub2RlOworCQlEYXR1bQkJcHJlZERhdHVtOworCQlib29sCQlpc251 bGw7CisJCWNoYXIJICAgKnByZWRTdHJpbmc7CisKKwkJLyogQ29udmVydCB0ZXh0IHN0cmluZyB0 byBub2RlIHRyZWUgKi8KKwkJcHJlZERhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKElOREVYUkVMSUQs IGh0X2lkeCwKKwkJCQkJCQkJCUFudW1fcGdfaW5kZXhfaW5kcHJlZCwgJmlzbnVsbCk7CisJCUFz c2VydCghaXNudWxsKTsKKwkJcHJlZFN0cmluZyA9IFRleHREYXR1bUdldENTdHJpbmcocHJlZERh dHVtKTsKKwkJbm9kZSA9IChOb2RlICopIHN0cmluZ1RvTm9kZShwcmVkU3RyaW5nKTsKKwkJcGZy ZWUocHJlZFN0cmluZyk7CisKKwkJLyogRGVwYXJzZSAqLworCQkqd2hlcmVDbGF1c2UgPQorCQkJ ZGVwYXJzZV9leHByZXNzaW9uKG5vZGUsIGNvbnRleHQsIGZhbHNlLCBmYWxzZSk7CisJfQorCWVs c2UKKwkJKndoZXJlQ2xhdXNlID0gTlVMTDsKKworCS8qIENsZWFuIHVwICovCisJUmVsZWFzZVN5 c0NhY2hlKGh0X2lkeCk7CisJUmVsZWFzZVN5c0NhY2hlKGh0X2lkeHJlbCk7CisJUmVsZWFzZVN5 c0NhY2hlKGh0X2FtKTsKK30KKworLyoKKyAqIE9idGFpbiB0aGUgZGVwYXJzZWQgZGVmYXVsdCB2 YWx1ZSBmb3IgdGhlIGdpdmVuIGNvbHVtbiBvZiB0aGUgZ2l2ZW4gdGFibGUuCisgKgorICogQ2Fs bGVyIG11c3QgaGF2ZSBzZXQgYSBjb3JyZWN0IGRlcGFyc2UgY29udGV4dC4KKyAqLworc3RhdGlj IGNoYXIgKgorUmVsYXRpb25HZXRDb2x1bW5EZWZhdWx0KFJlbGF0aW9uIHJlbCwgQXR0ck51bWJl ciBhdHRubywgTGlzdCAqZHBjb250ZXh0LAorCQkJCQkJIExpc3QgKipleHBycykKK3sKKwlOb2Rl ICpkZWZ2YWw7CisJY2hhciAqZGVmc3RyOworCisJZGVmdmFsID0gYnVpbGRfY29sdW1uX2RlZmF1 bHQocmVsLCBhdHRubyk7CisJZGVmc3RyID0gZGVwYXJzZV9leHByZXNzaW9uKGRlZnZhbCwgZHBj b250ZXh0LCBmYWxzZSwgZmFsc2UpOworCisJLyogQ29sbGVjdCB0aGUgZXhwcmVzc2lvbiBmb3Ig bGF0ZXIgcmVwbGljYXRpb24gc2FmZXR5IGNoZWNrcyAqLworCWlmIChleHBycykKKwkJKmV4cHJz ID0gbGFwcGVuZCgqZXhwcnMsIGRlZnZhbCk7CisKKwlyZXR1cm4gZGVmc3RyOworfQorCisvKgor ICogT2J0YWluIHRoZSBkZXBhcnNlZCBwYXJ0aXRpb24gYm91bmQgZXhwcmVzc2lvbiBmb3IgdGhl IGdpdmVuIHRhYmxlLgorICovCitzdGF0aWMgY2hhciAqCitSZWxhdGlvbkdldFBhcnRpdGlvbkJv dW5kKE9pZCByZWxpZCkKK3sKKwlEYXR1bQkJZGVwYXJzZWQ7CisJRGF0dW0JCWJvdW5kRGF0dW07 CisJYm9vbAkJaXNudWxsOworCUhlYXBUdXBsZQl0dXBsZTsKKworCXR1cGxlID0gU2VhcmNoU3lz Q2FjaGUxKFJFTE9JRCwgcmVsaWQpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSkpCisJ CWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciByZWxhdGlvbiAldSIsCisJCQkg cmVsaWQpOworCisJYm91bmREYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihSRUxPSUQsIHR1cGxlLAor CQkJCQkJCQkgQW51bV9wZ19jbGFzc19yZWxwYXJ0Ym91bmQsCisJCQkJCQkJCSAmaXNudWxsKTsK KworCWRlcGFyc2VkID0gRGlyZWN0RnVuY3Rpb25DYWxsMihwZ19nZXRfZXhwciwKKwkJCQkJCQkJ ICAgQ1N0cmluZ0dldFRleHREYXR1bShUZXh0RGF0dW1HZXRDU3RyaW5nKGJvdW5kRGF0dW0pKSwK KwkJCQkJCQkJICAgcmVsaWQpOworCisJUmVsZWFzZVN5c0NhY2hlKHR1cGxlKTsKKworCXJldHVy biBUZXh0RGF0dW1HZXRDU3RyaW5nKGRlcGFyc2VkKTsKK30KKworLyoKKyAqIFJldHVybiB0aGUg Z2l2ZW4gb2JqZWN0IHR5cGUgYXMgYSBzdHJpbmcuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICoK K3N0cmluZ2lmeV9vYmp0eXBlKE9iamVjdFR5cGUgb2JqdHlwZSkKK3sKKwlzd2l0Y2ggKG9ianR5 cGUpCisJeworCQljYXNlIE9CSkVDVF9BR0dSRUdBVEU6CisJCQlyZXR1cm4gIkFHR1JFR0FURSI7 CisJCWNhc2UgT0JKRUNUX0NBU1Q6CisJCQlyZXR1cm4gIkNBU1QiOworCQljYXNlIE9CSkVDVF9D T0xVTU46CisJCQlyZXR1cm4gIkNPTFVNTiI7CisJCWNhc2UgT0JKRUNUX0NPTExBVElPTjoKKwkJ CXJldHVybiAiQ09MTEFUSU9OIjsKKwkJY2FzZSBPQkpFQ1RfQ09OVkVSU0lPTjoKKwkJCXJldHVy biAiQ09OVkVSU0lPTiI7CisJCWNhc2UgT0JKRUNUX0RBVEFCQVNFOgorCQkJcmV0dXJuICJEQVRB QkFTRSI7CisJCWNhc2UgT0JKRUNUX0RPTUFJTjoKKwkJCXJldHVybiAiRE9NQUlOIjsKKwkJY2Fz ZSBPQkpFQ1RfRVZFTlRfVFJJR0dFUjoKKwkJCXJldHVybiAiRVZFTlQgVFJJR0dFUiI7CisJCWNh c2UgT0JKRUNUX0VYVEVOU0lPTjoKKwkJCXJldHVybiAiRVhURU5TSU9OIjsKKwkJY2FzZSBPQkpF Q1RfRkRXOgorCQkJcmV0dXJuICJGT1JFSUdOIERBVEEgV1JBUFBFUiI7CisJCWNhc2UgT0JKRUNU X0ZPUkVJR05fU0VSVkVSOgorCQkJcmV0dXJuICJTRVJWRVIiOworCQljYXNlIE9CSkVDVF9GT1JF SUdOX1RBQkxFOgorCQkJcmV0dXJuICJGT1JFSUdOIFRBQkxFIjsKKwkJY2FzZSBPQkpFQ1RfRlVO Q1RJT046CisJCQlyZXR1cm4gIkZVTkNUSU9OIjsKKwkJY2FzZSBPQkpFQ1RfSU5ERVg6CisJCQly ZXR1cm4gIklOREVYIjsKKwkJY2FzZSBPQkpFQ1RfTEFOR1VBR0U6CisJCQlyZXR1cm4gIkxBTkdV QUdFIjsKKwkJY2FzZSBPQkpFQ1RfTEFSR0VPQkpFQ1Q6CisJCQlyZXR1cm4gIkxBUkdFIE9CSkVD VCI7CisJCWNhc2UgT0JKRUNUX01BVFZJRVc6CisJCQlyZXR1cm4gIk1BVEVSSUFMSVpFRCBWSUVX IjsKKwkJY2FzZSBPQkpFQ1RfT1BDTEFTUzoKKwkJCXJldHVybiAiT1BFUkFUT1IgQ0xBU1MiOwor CQljYXNlIE9CSkVDVF9PUEVSQVRPUjoKKwkJCXJldHVybiAiT1BFUkFUT1IiOworCQljYXNlIE9C SkVDVF9PUEZBTUlMWToKKwkJCXJldHVybiAiT1BFUkFUT1IgRkFNSUxZIjsKKwkJY2FzZSBPQkpF Q1RfUE9MSUNZOgorCQkJcmV0dXJuICJQT0xJQ1kiOworCQljYXNlIE9CSkVDVF9ST0xFOgorCQkJ cmV0dXJuICJST0xFIjsKKwkJY2FzZSBPQkpFQ1RfUlVMRToKKwkJCXJldHVybiAiUlVMRSI7CisJ CWNhc2UgT0JKRUNUX1NDSEVNQToKKwkJCXJldHVybiAiU0NIRU1BIjsKKwkJY2FzZSBPQkpFQ1Rf U0VRVUVOQ0U6CisJCQlyZXR1cm4gIlNFUVVFTkNFIjsKKwkJY2FzZSBPQkpFQ1RfVEFCTEU6CisJ CQlyZXR1cm4gIlRBQkxFIjsKKwkJY2FzZSBPQkpFQ1RfVEFCTEVTUEFDRToKKwkJCXJldHVybiAi VEFCTEVTUEFDRSI7CisJCWNhc2UgT0JKRUNUX1RSSUdHRVI6CisJCQlyZXR1cm4gIlRSSUdHRVIi OworCQljYXNlIE9CSkVDVF9UU0NPTkZJR1VSQVRJT046CisJCQlyZXR1cm4gIlRFWFQgU0VBUkNI IENPTkZJR1VSQVRJT04iOworCQkvKgorCQljYXNlIE9CSkVDVF9UU0NPTkZJR19NQVBQSU5HOgor CQkJcmV0dXJuICJURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OIE1BUFBJTkciOworCQkqLworCQlj YXNlIE9CSkVDVF9UU0RJQ1RJT05BUlk6CisJCQlyZXR1cm4gIlRFWFQgU0VBUkNIIERJQ1RJT05B UlkiOworCQljYXNlIE9CSkVDVF9UU1BBUlNFUjoKKwkJCXJldHVybiAiVEVYVCBTRUFSQ0ggUEFS U0VSIjsKKwkJY2FzZSBPQkpFQ1RfVFNURU1QTEFURToKKwkJCXJldHVybiAiVEVYVCBTRUFSQ0gg VEVNUExBVEUiOworCQljYXNlIE9CSkVDVF9UWVBFOgorCQkJcmV0dXJuICJUWVBFIjsKKwkJY2Fz ZSBPQkpFQ1RfVVNFUl9NQVBQSU5HOgorCQkJcmV0dXJuICJVU0VSIE1BUFBJTkciOworCQljYXNl IE9CSkVDVF9WSUVXOgorCQkJcmV0dXJuICJWSUVXIjsKKworCQlkZWZhdWx0OgorCQkJZWxvZyhF UlJPUiwgInVuc3VwcG9ydGVkIG9iamVjdCB0eXBlICVkIiwgb2JqdHlwZSk7CisJfQorfQorCisv KgorICogR2l2ZW4gYSBDb2xsZWN0ZWRDb21tYW5kLCByZXR1cm4gYSBKU09OIHJlcHJlc2VudGF0 aW9uIG9mIGl0LgorICoKKyAqIFRoZSBjb21tYW5kIGlzIGV4cGFuZGVkIGZ1bGx5LCBzbyB0aGF0 IHRoZXJlIGFyZSBubyBhbWJpZ3VpdGllcyBldmVuIGluIHRoZQorICogZmFjZSBvZiBzZWFyY2hf cGF0aCBjaGFuZ2VzLgorICovCitEYXR1bQorZGRsX2RlcGFyc2VfdG9fanNvbihQR19GVU5DVElP Tl9BUkdTKQoreworCUNvbGxlY3RlZENvbW1hbmQgKmNtZCA9IChDb2xsZWN0ZWRDb21tYW5kICop IFBHX0dFVEFSR19QT0lOVEVSKDApOworCWNoYXIJCSAgICpjb21tYW5kOworCisJY29tbWFuZCA9 IGRlcGFyc2VfdXRpbGl0eV9jb21tYW5kKGNtZCwgdHJ1ZSk7CisKKwlpZiAoY29tbWFuZCkKKwkJ UEdfUkVUVVJOX1RFWFRfUChjc3RyaW5nX3RvX3RleHQoY29tbWFuZCkpOworCisJUEdfUkVUVVJO X05VTEwoKTsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQWx0ZXJGdW5jdGlvblN0bXQgKEFMVEVS IEZVTkNUSU9OKQorICoKKyAqIEdpdmVuIGEgZnVuY3Rpb24gT0lEIGFuZCB0aGUgcGFyc2V0cmVl IHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIHRoZSBKU09OCisgKiBibG9iIHJlcHJlc2VudGluZyB0 aGUgYWx0ZXIgY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlckZ1 bmN0aW9uKE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUFsdGVyRnVuY3Rpb25T dG10ICpub2RlID0gKEFsdGVyRnVuY3Rpb25TdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlCSAg ICphbHRlckZ1bmM7CisJT2JqVHJlZQkgICAqc2lnbjsKKwlIZWFwVHVwbGUJcHJvY1R1cDsKKwlG b3JtX3BnX3Byb2MgcHJvY0Zvcm07CisJTGlzdAkgICAqcGFyYW1zID0gTklMOworCUxpc3QJICAg KmVsZW1zID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisJaW50CQkJaTsKKworCS8qIEdldCB0 aGUgcGdfcHJvYyB0dXBsZSAqLworCXByb2NUdXAgPSBTZWFyY2hTeXNDYWNoZTEoUFJPQ09JRCwg b2JqZWN0SWQpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChwcm9jVHVwKSkKKwkJZWxvZyhFUlJP UiwgImNhY2hlIGxvb2t1cCBmYWlsdXJlIGZvciBmdW5jdGlvbiB3aXRoIE9JRCAldSIsCisJCQkg b2JqZWN0SWQpOworCXByb2NGb3JtID0gKEZvcm1fcGdfcHJvYykgR0VUU1RSVUNUKHByb2NUdXAp OworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICogQUxURVIgRlVOQ1RJT04gJXtz aWduYXR1cmV9cyAle2RlZmluaXRpb246IH1zCisJICovCisJYWx0ZXJGdW5jID0gbmV3X29ianRy ZWVfVkEoIkFMVEVSIEZVTkNUSU9OIiwgMCk7CisKKwkvKgorCSAqIEFMVEVSIEZVTkNUSU9OIGRv ZXMgbm90IGNoYW5nZSBzaWduYXR1cmUgc28gd2UgY2FuIHVzZSBjYXRhbG9nCisJICogdG8gZ2V0 IGlucHV0IHR5cGUgT2lkcy4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgcHJvY0Zvcm0tPnByb25h cmdzOyBpKyspCisJeworCQlPYmpUcmVlCSAgICp0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiJXt0 eXBlfVQiLCAwKTsKKworCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICJ0eXBlIiwKKwkJ CQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUocHJvY0Zvcm0tPnByb2FyZ3R5cGVzLnZhbHVlc1tp XSwgLTEpKTsKKwkJcGFyYW1zID0gbGFwcGVuZChwYXJhbXMsIG5ld19vYmplY3Rfb2JqZWN0KHRt cG9iaikpOworCX0KKworCXNpZ24gPSBuZXdfb2JqdHJlZSgiIik7CisKKwlhcHBlbmRfb2JqZWN0 X29iamVjdChzaWduLCAiJXtpZGVudGl0eX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVh bG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgb2JqZWN0SWQpKTsK KwlhcHBlbmRfYXJyYXlfb2JqZWN0KHNpZ24sICIoJXthcmd1bWVudHM6LCB9cykiLCBwYXJhbXMp OworCisJYXBwZW5kX29iamVjdF9vYmplY3QoYWx0ZXJGdW5jLCAiJXtzaWduYXR1cmV9cyIsIHNp Z24pOworCisJZm9yZWFjaChjZWxsLCBub2RlLT5hY3Rpb25zKQorCXsKKwkJRGVmRWxlbQkqZGVm ZWwgPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisJCU9ialRyZWUJICAgKnRtcG9iaiA9IE5V TEw7CisKKwkJaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInZvbGF0aWxpdHkiKSA9PSAwKQor CQl7CisJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQShzdHJWYWwoZGVmZWwtPmFyZyksIDApOwor CQl9CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInN0cmljdCIpID09IDApCisJ CXsKKwkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKGludFZhbChkZWZlbC0+YXJnKSA/CisJCQkJ CQkJCSAiUkVUVVJOUyBOVUxMIE9OIE5VTEwgSU5QVVQiIDoKKwkJCQkJCQkJICJDQUxMRUQgT04g TlVMTCBJTlBVVCIsIDApOworCQl9CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwg InNlY3VyaXR5IikgPT0gMCkKKwkJeworCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoaW50VmFs KGRlZmVsLT5hcmcpID8KKwkJCQkJCQkJICJTRUNVUklUWSBERUZJTkVSIiA6ICJTRUNVUklUWSBJ TlZPS0VSIiwgMCk7CisJCX0KKwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAibGVh a3Byb29mIikgPT0gMCkKKwkJeworCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoaW50VmFsKGRl ZmVsLT5hcmcpID8KKwkJCQkJCQkJICJMRUFLUFJPT0YiIDogIk5PVCBMRUFLUFJPT0YiLCAwKTsK KwkJfQorCQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJjb3N0IikgPT0gMCkKKwkJ eworCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkNPU1QgJXtjb3N0fW4iLCAxLAorCQkJCQkJ CQkgImNvc3QiLCBPYmpUeXBlRmxvYXQsCisJCQkJCQkJCSBkZWZHZXROdW1lcmljKGRlZmVsKSk7 CisJCX0KKwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAicm93cyIpID09IDApCisJ CXsKKwkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJST1dTIiwgMCk7CisJCQlpZiAoZGVmR2V0 TnVtZXJpYyhkZWZlbCkgPT0gMCkKKwkJCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJl c2VudCIsIGZhbHNlKTsKKwkJCWVsc2UKKwkJCQlhcHBlbmRfZmxvYXRfb2JqZWN0KHRtcG9iaiwg IiV7cm93c31uIiwKKwkJCQkJCQkJCWRlZkdldE51bWVyaWMoZGVmZWwpKTsKKwkJfQorCQllbHNl IGlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJzZXQiKSA9PSAwKQorCQl7CisJCQlWYXJpYWJs ZVNldFN0bXQgKnNzdG10ID0gKFZhcmlhYmxlU2V0U3RtdCAqKSBkZWZlbC0+YXJnOworCQkJY2hh ciAqdmFsdWUgPSBFeHRyYWN0U2V0VmFyaWFibGVBcmdzKHNzdG10KTsKKworCQkJdG1wb2JqID0g ZGVwYXJzZV9GdW5jdGlvblNldChzc3RtdC0+a2luZCwgc3N0bXQtPm5hbWUsIHZhbHVlKTsKKwkJ fQorCQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJzdXBwb3J0IikgPT0gMCkKKwkJ eworCQkJT2lkCQkJYXJndHlwZXNbMV07CisKKwkJCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJTVVBQ T1JUIik7CisKKwkJCUFzc2VydChwcm9jRm9ybS0+cHJvc3VwcG9ydCk7CisKKwkJCS8qCisJCQkg KiBXZSBzaG91bGQgcXVhbGlmeSB0aGUgc3VwcG9ydCBmdW5jdGlvbidzIG5hbWUgaWYgaXQgd291 bGRuJ3QgYmUKKwkJCSAqIHJlc29sdmVkIGJ5IGxvb2t1cCBpbiB0aGUgY3VycmVudCBzZWFyY2gg cGF0aC4KKwkJCSAqLworCQkJYXJndHlwZXNbMF0gPSBJTlRFUk5BTE9JRDsKKwkJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7bmFtZX1zIiwKKwkJCQkJCQkJIGdlbmVyYXRlX2Z1bmN0 aW9uX25hbWUocHJvY0Zvcm0tPnByb3N1cHBvcnQsIDEsCisJCQkJCQkJCQkJCQkJCU5JTCwgYXJn dHlwZXMsCisJCQkJCQkJCQkJCQkJCWZhbHNlLCBOVUxMLAorCQkJCQkJCQkJCQkJCQlFWFBSX0tJ TkRfTk9ORSkpOworCQl9CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInBhcmFs bGVsIikgPT0gMCkKKwkJeworCQkJY2hhciAqZm10ID0gcHNwcmludGYoIlBBUkFMTEVMICVzIiwg c3RyVmFsKGRlZmVsLT5hcmcpKTsKKwkJCXRtcG9iaiA9IG5ld19vYmp0cmVlKGZtdCk7CisJCX0K KworCQllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOwor CX0KKworCWFwcGVuZF9hcnJheV9vYmplY3QoYWx0ZXJGdW5jLCAiJXtkZWZpbml0aW9uOiB9cyIs IGVsZW1zKTsKKworCVJlbGVhc2VTeXNDYWNoZShwcm9jVHVwKTsKKworCXJldHVybiBhbHRlckZ1 bmM7Cit9CisKKy8qCisgKiBkZXBhcnNlIGFuIEFMVEVSIC4uLiBTRVQgU0NIRU1BIGNvbW1hbmQu CisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJPYmplY3RTY2hlbWFTdG10KE9i amVjdEFkZHJlc3MgYWRkcmVzcywgTm9kZSAqcGFyc2V0cmVlLAorCQkJCQkJCSAgT2JqZWN0QWRk cmVzcyBvbGRzY2hlbWEpCit7CisJQWx0ZXJPYmplY3RTY2hlbWFTdG10ICpub2RlID0gKEFsdGVy T2JqZWN0U2NoZW1hU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZQkgICAqYWx0ZXJTdG10Owor CWNoYXIJICAgKmZtdDsKKwljaGFyCSAgICppZGVudGl0eTsKKwljaGFyCSAgICpuZXdzY2hlbWE7 CisJY2hhcgkgICAqb2xkc2NobmFtZTsKKwljaGFyCSAgICppZGVudDsKKworCW5ld3NjaGVtYSA9 IG5vZGUtPm5ld3NjaGVtYTsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIEFM VEVSICVzICV7aWRlbnRpdHl9cyBTRVQgU0NIRU1BICV7bmV3c2NoZW1hfUkKKwkgKi8KKwlmbXQg PSBwc3ByaW50ZigiQUxURVIgJXMiLCBzdHJpbmdpZnlfb2JqdHlwZShub2RlLT5vYmplY3RUeXBl KSk7CisJYWx0ZXJTdG10ID0gbmV3X29ianRyZWUoZm10KTsKKworCS8qCisJICogU2luY2UgdGhl IGNvbW1hbmQgaGFzIGFscmVhZHkgdGFrZW4gcGxhY2UgZnJvbSB0aGUgcG9pbnQgb2YgdmlldyBv ZgorCSAqIGNhdGFsb2dzLCBnZXRPYmplY3RJZGVudGl0eSByZXR1cm5zIHRoZSBvYmplY3QgbmFt ZSB3aXRoIHRoZSBhbHJlYWR5CisJICogY2hhbmdlZCBzY2hlbWEuICBUaGUgb3V0cHV0IG9mIG91 ciBkZXBhcnNpbmcgbXVzdCByZXR1cm4gdGhlIG9yaWdpbmFsCisJICogc2NoZW1hIG5hbWUgaG93 ZXZlciwgc28gd2UgY2hvcCB0aGUgc2NoZW1hIG5hbWUgb2ZmIHRoZSBpZGVudGl0eSBzdHJpbmcK KwkgKiBhbmQgdGhlbiBwcmVwZW5kIHRoZSBxdW90ZWQgc2NoZW1hIG5hbWUuCisJICoKKwkgKiBY WFggVGhpcyBpcyBwcmV0dHkgY2x1bmt5LiBDYW4gd2UgZG8gYmV0dGVyPworCSAqLworCWlkZW50 aXR5ID0gZ2V0T2JqZWN0SWRlbnRpdHkoJmFkZHJlc3MsIGZhbHNlKTsKKwlvbGRzY2huYW1lID0g Z2V0X25hbWVzcGFjZV9uYW1lKG9sZHNjaGVtYS5vYmplY3RJZCk7CisJaWYgKCFvbGRzY2huYW1l KQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igc2NoZW1hIHdpdGggT0lE ICV1IiwKKwkJCSBvbGRzY2hlbWEub2JqZWN0SWQpOworCisJaWRlbnQgPSBwc3ByaW50ZigiJXMl cyIsIHF1b3RlX2lkZW50aWZpZXIob2xkc2NobmFtZSksCisJCQkJCSBpZGVudGl0eSArIHN0cmxl bihxdW90ZV9pZGVudGlmaWVyKG5ld3NjaGVtYSkpKTsKKwlhcHBlbmRfc3RyaW5nX29iamVjdChh bHRlclN0bXQsICIle2lkZW50aXR5fXMiLCBpZGVudCk7CisKKwlhcHBlbmRfc3RyaW5nX29iamVj dChhbHRlclN0bXQsICJTRVQgU0NIRU1BICV7bmV3c2NoZW1hfUkiLCBuZXdzY2hlbWEpOworCisJ cmV0dXJuIGFsdGVyU3RtdDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBHUkFOVC9SRVZPS0UgY29t bWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9HcmFudFN0bXQoQ29sbGVjdGVk Q29tbWFuZCAqY21kKQoreworCUludGVybmFsR3JhbnQgKmlzdG10OworCU9ialRyZWUJICAgKmdy YW50U3RtdDsKKwljaGFyCSAgICpmbXQ7CisJY2hhcgkgICAqb2JqdHlwZTsKKwlMaXN0CSAgICps aXN0OworCUxpc3RDZWxsICAgKmNlbGw7CisJT2lkCQkJY2xhc3NJZDsKKwlPYmpUcmVlCSAgICp0 bXA7CisKKwlpc3RtdCA9IGNtZC0+ZC5ncmFudC5pc3RtdDsKKworCS8qCisJICogSWYgdGhlcmUg YXJlIG5vIG9iamVjdHMgZnJvbSAiQUxMIC4uLiBJTiBTQ0hFTUEiIHRvIGJlIGdyYW50ZWQsIHRo ZW4KKwkgKiB3ZSBuZWVkIG5vdCBkbyBhbnl0aGluZy4KKwkgKi8KKwlpZiAoaXN0bXQtPm9iamVj dHMgPT0gTklMKQorCQlyZXR1cm4gTlVMTDsKKworCXN3aXRjaCAoaXN0bXQtPm9ianR5cGUpCisJ eworCQljYXNlIE9CSkVDVF9DT0xVTU46CisJCWNhc2UgT0JKRUNUX1RBQkxFOgorCQkJb2JqdHlw ZSA9ICJUQUJMRSI7CisJCQljbGFzc0lkID0gUmVsYXRpb25SZWxhdGlvbklkOworCQkJYnJlYWs7 CisJCWNhc2UgT0JKRUNUX1NFUVVFTkNFOgorCQkJb2JqdHlwZSA9ICJTRVFVRU5DRSI7CisJCQlj bGFzc0lkID0gUmVsYXRpb25SZWxhdGlvbklkOworCQkJYnJlYWs7CisJCWNhc2UgT0JKRUNUX0RP TUFJTjoKKwkJCW9ianR5cGUgPSAiRE9NQUlOIjsKKwkJCWNsYXNzSWQgPSBUeXBlUmVsYXRpb25J ZDsKKwkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9GRFc6CisJCQlvYmp0eXBlID0gIkZPUkVJR04g REFUQSBXUkFQUEVSIjsKKwkJCWNsYXNzSWQgPSBGb3JlaWduRGF0YVdyYXBwZXJSZWxhdGlvbklk OworCQkJYnJlYWs7CisJCWNhc2UgT0JKRUNUX0ZPUkVJR05fU0VSVkVSOgorCQkJb2JqdHlwZSA9 ICJGT1JFSUdOIFNFUlZFUiI7CisJCQljbGFzc0lkID0gRm9yZWlnblNlcnZlclJlbGF0aW9uSWQ7 CisJCQlicmVhazsKKwkJY2FzZSBPQkpFQ1RfRlVOQ1RJT046CisJCQlvYmp0eXBlID0gIkZVTkNU SU9OIjsKKwkJCWNsYXNzSWQgPSBQcm9jZWR1cmVSZWxhdGlvbklkOworCQkJYnJlYWs7CisJCWNh c2UgT0JKRUNUX1BST0NFRFVSRToKKwkJCW9ianR5cGUgPSAiUFJPQ0VEVVJFIjsKKwkJCWNsYXNz SWQgPSBQcm9jZWR1cmVSZWxhdGlvbklkOworCQkJYnJlYWs7CisJCWNhc2UgT0JKRUNUX1JPVVRJ TkU6CisJCQlvYmp0eXBlID0gIlJPVVRJTkUiOworCQkJY2xhc3NJZCA9IFByb2NlZHVyZVJlbGF0 aW9uSWQ7CisJCQlicmVhazsKKwkJY2FzZSBPQkpFQ1RfTEFOR1VBR0U6CisJCQlvYmp0eXBlID0g IkxBTkdVQUdFIjsKKwkJCWNsYXNzSWQgPSBMYW5ndWFnZVJlbGF0aW9uSWQ7CisJCQlicmVhazsK KwkJY2FzZSBPQkpFQ1RfTEFSR0VPQkpFQ1Q6CisJCQlvYmp0eXBlID0gIkxBUkdFIE9CSkVDVCI7 CisJCQljbGFzc0lkID0gTGFyZ2VPYmplY3RSZWxhdGlvbklkOworCQkJYnJlYWs7CisJCWNhc2Ug T0JKRUNUX1NDSEVNQToKKwkJCW9ianR5cGUgPSAiU0NIRU1BIjsKKwkJCWNsYXNzSWQgPSBOYW1l c3BhY2VSZWxhdGlvbklkOworCQkJYnJlYWs7CisJCWNhc2UgT0JKRUNUX1RZUEU6CisJCQlvYmp0 eXBlID0gIlRZUEUiOworCQkJY2xhc3NJZCA9IFR5cGVSZWxhdGlvbklkOworCQkJYnJlYWs7CisJ CWNhc2UgT0JKRUNUX0RBVEFCQVNFOgorCQljYXNlIE9CSkVDVF9UQUJMRVNQQUNFOgorCQkJb2Jq dHlwZSA9ICIiOworCQkJY2xhc3NJZCA9IEludmFsaWRPaWQ7CisJCQllbG9nKEVSUk9SLCAiZ2xv YmFsIG9iamVjdHMgbm90IHN1cHBvcnRlZCIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQll bG9nKEVSUk9SLCAiaW52YWxpZCBPQkpFQ1QgdmFsdWUgJWQiLCBpc3RtdC0+b2JqdHlwZSk7CisJ fQorCisJLyogR1JBTlQgVE8gb3IgUkVWT0tFIEZST00gKi8KKwlpZiAoaXN0bXQtPmlzX2dyYW50 KQorCQlmbXQgPSBwc3ByaW50ZigiR1JBTlQiKTsKKwllbHNlCisJCWZtdCA9IHBzcHJpbnRmKCJS RVZPS0UiKTsKKworCWdyYW50U3RtdCA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMCk7CisKKwkvKiBi dWlsZCBsaXN0IG9mIHByaXZpbGVnZXMgdG8gZ3JhbnQvcmV2b2tlICovCisJaWYgKGlzdG10LT5h bGxfcHJpdnMpCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiQUxMIFBSSVZJTEVHRVMiLCAw KTsKKwkJbGlzdCA9IGxpc3RfbWFrZTEobmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJfQorCWVs c2UKKwl7CisJCWxpc3QgPSBOSUw7CisKKwkJaWYgKGlzdG10LT5wcml2aWxlZ2VzICYgQUNMX0lO U0VSVCkKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KCJJTlNFUlQi KSk7CisJCWlmIChpc3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9TRUxFQ1QpCisJCQlsaXN0ID0gbGFw cGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdCgiU0VMRUNUIikpOworCQlpZiAoaXN0bXQtPnBy aXZpbGVnZXMgJiBBQ0xfVVBEQVRFKQorCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmlu Z19vYmplY3QoIlVQREFURSIpKTsKKwkJaWYgKGlzdG10LT5wcml2aWxlZ2VzICYgQUNMX0RFTEVU RSkKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KCJERUxFVEUiKSk7 CisJCWlmIChpc3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9UUlVOQ0FURSkKKwkJCWxpc3QgPSBsYXBw ZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KCJUUlVOQ0FURSIpKTsKKwkJaWYgKGlzdG10LT5w cml2aWxlZ2VzICYgQUNMX1JFRkVSRU5DRVMpCisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdf c3RyaW5nX29iamVjdCgiUkVGRVJFTkNFUyIpKTsKKwkJaWYgKGlzdG10LT5wcml2aWxlZ2VzICYg QUNMX1RSSUdHRVIpCisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdCgi VFJJR0dFUiIpKTsKKwkJaWYgKGlzdG10LT5wcml2aWxlZ2VzICYgQUNMX0VYRUNVVEUpCisJCQls aXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdCgiRVhFQ1VURSIpKTsKKwkJaWYg KGlzdG10LT5wcml2aWxlZ2VzICYgQUNMX1VTQUdFKQorCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwg bmV3X3N0cmluZ19vYmplY3QoIlVTQUdFIikpOworCQlpZiAoaXN0bXQtPnByaXZpbGVnZXMgJiBB Q0xfQ1JFQVRFKQorCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QoIkNS RUFURSIpKTsKKwkJaWYgKGlzdG10LT5wcml2aWxlZ2VzICYgQUNMX0NSRUFURV9URU1QKQorCQkJ bGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QoIlRFTVBPUkFSWSIpKTsKKwkJ aWYgKGlzdG10LT5wcml2aWxlZ2VzICYgQUNMX0NPTk5FQ1QpCisJCQlsaXN0ID0gbGFwcGVuZChs aXN0LCBuZXdfc3RyaW5nX29iamVjdCgiQ09OTkVDVCIpKTsKKworCQlpZiAoIWlzdG10LT5pc19n cmFudCAmJiBpc3RtdC0+Z3JhbnRfb3B0aW9uKQorCQkJYXBwZW5kX3N0cmluZ19vYmplY3QoZ3Jh bnRTdG10LCAiJXtncmFudF9vcHRpb259cyIsCisJCQkJCQkJCSBpc3RtdC0+Z3JhbnRfb3B0aW9u ID8gICJHUkFOVCBPUFRJT04gRk9SIiA6ICIiKTsKKworCQlpZiAoaXN0bXQtPmNvbF9wcml2cyAh PSBOSUwpCisJCXsKKwkJCUxpc3RDZWxsICAgKm9jZWxsOworCisJCQlmb3JlYWNoKG9jZWxsLCBp c3RtdC0+Y29sX3ByaXZzKQorCQkJeworCQkJCUFjY2Vzc1ByaXYgKnByaXYgPSBsZmlyc3Qob2Nl bGwpOworCQkJCUxpc3QgICAqY29scyA9IE5JTDsKKworCQkJCXRtcCA9IG5ld19vYmp0cmVlKCIi KTsKKwkJCQlmb3JlYWNoKGNlbGwsIHByaXYtPmNvbHMpCisJCQkJeworCQkJCQlTdHJpbmcgKmNv bG5hbWUgPSBsZmlyc3Rfbm9kZShTdHJpbmcsIGNlbGwpOworCisJCQkJCWNvbHMgPSBsYXBwZW5k KGNvbHMsCisJCQkJCQkJCSAgIG5ld19zdHJpbmdfb2JqZWN0KHN0clZhbChjb2xuYW1lKSkpOwor CQkJCX0KKwkJCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcCwgIigle2NvbHM6LCB9cykiLCBjb2xz KTsKKworCQkJCWlmIChwcml2LT5wcml2X25hbWUgPT0gTlVMTCkKKwkJCQkJYXBwZW5kX3N0cmlu Z19vYmplY3QoZ3JhbnRTdG10LCAiJXtwcml2fXMiLCAiQUxMIFBSSVZJTEVHRVMiKTsKKwkJCQll bHNlCisJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGdyYW50U3RtdCwgIiV7cHJpdn1zIiwgcHJp di0+cHJpdl9uYW1lKTsKKworCQkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcCkpOworCQkJfQorCQl9CisJfQorCWFwcGVuZF9hcnJheV9vYmplY3QoZ3JhbnRTdG10 LCAiJXtwcml2aWxlZ2VzOiwgfXMgT04iLCBsaXN0KTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KGdyYW50U3RtdCwgIiV7b2JqdHlwZX1zIiwgb2JqdHlwZSk7CisKKwkvKiB0YXJnZXQgb2JqZWN0 cy4gIFdlIHVzZSBvYmplY3QgaWRlbnRpdGllcyBoZXJlICovCisJbGlzdCA9IE5JTDsKKwlmb3Jl YWNoKGNlbGwsIGlzdG10LT5vYmplY3RzKQorCXsKKwkJT2lkCQlvYmppZCA9IGxmaXJzdF9vaWQo Y2VsbCk7CisJCU9iamVjdEFkZHJlc3MgYWRkcjsKKworCQlhZGRyLmNsYXNzSWQgPSBjbGFzc0lk OworCQlhZGRyLm9iamVjdElkID0gb2JqaWQ7CisJCWFkZHIub2JqZWN0U3ViSWQgPSAwOworCisJ CXRtcCA9IG5ld19vYmp0cmVlX1ZBKCIle2lkZW50aXR5fXMiLCAxLAorCQkJCQkJCSAgICJpZGVu dGl0eSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJICAgZ2V0T2JqZWN0SWRlbnRpdHkoJmFkZHIs IGZhbHNlKSk7CisKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1w KSk7CisJfQorCWFwcGVuZF9hcnJheV9vYmplY3QoZ3JhbnRTdG10LCAiJXtwcml2dGFyZ2V0Oiwg fXMiLCBsaXN0KTsKKworCWlmIChpc3RtdC0+aXNfZ3JhbnQpCisJCWFwcGVuZF9mb3JtYXRfc3Ry aW5nKGdyYW50U3RtdCwgIlRPIik7CisJZWxzZQorCQlhcHBlbmRfZm9ybWF0X3N0cmluZyhncmFu dFN0bXQsICJGUk9NIik7CisKKwkvKiBsaXN0IG9mIGdyYW50ZWVzICovCisJbGlzdCA9IE5JTDsK Kwlmb3JlYWNoKGNlbGwsIGlzdG10LT5ncmFudGVlcykKKwl7CisJCU9pZAkJZ3JhbnRlZSA9IGxm aXJzdF9vaWQoY2VsbCk7CisKKwkJdG1wID0gbmV3X29ianRyZWVfZm9yX3JvbGVfaWQoZ3JhbnRl ZSk7CisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCX0K KworCWFwcGVuZF9hcnJheV9vYmplY3QoZ3JhbnRTdG10LCAiJXtncmFudGVlczosIH1zIiwgbGlz dCk7CisKKwkvKiB0aGUgd29yZGluZyBvZiB0aGUgZ3JhbnQgb3B0aW9uIGlzIHZhcmlhYmxlIC4u LiAqLworCWlmIChpc3RtdC0+aXNfZ3JhbnQpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGdyYW50 U3RtdCwgIiV7Z3JhbnRfb3B0aW9ufXMiLAorCQkJCQkJCSBpc3RtdC0+Z3JhbnRfb3B0aW9uID8g ICJXSVRIIEdSQU5UIE9QVElPTiIgOiAiIik7CisKKwlpZiAoaXN0bXQtPmdyYW50b3JfdWlkKQor CXsKKwkJSGVhcFR1cGxlCXJvbHR1cDsKKwkJY2hhcgkgICAqcm9sZW5hbWU7CisKKwkJcm9sdHVw ID0gU2VhcmNoU3lzQ2FjaGUxKEFVVEhPSUQsIE9iamVjdElkR2V0RGF0dW0oaXN0bXQtPmdyYW50 b3JfdWlkKSk7CisJCWlmICghSGVhcFR1cGxlSXNWYWxpZChyb2x0dXApKQorCQkJZXJlcG9ydChF UlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9VTkRFRklORURfT0JKRUNUKSwKKwkJCQkJIGVy cm1zZygicm9sZSB3aXRoIE9JRCAldSBkb2VzIG5vdCBleGlzdCIsIGlzdG10LT5ncmFudG9yX3Vp ZCkpKTsKKworCQlyb2xlbmFtZSA9IE5hbWVTdHIoKChGb3JtX3BnX2F1dGhpZCkgR0VUU1RSVUNU KHJvbHR1cCkpLT5yb2xuYW1lKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoZ3JhbnRTdG10LCAi R1JBTlRFRCBCWSAle3JvbGVuYW1lfXMiLCByb2xlbmFtZSk7CisJCVJlbGVhc2VTeXNDYWNoZShy b2x0dXApOworCX0KKworCWlmICghaXN0bXQtPmlzX2dyYW50KQorCXsKKwkJaWYgKGlzdG10LT5i ZWhhdmlvciA9PSBEUk9QX0NBU0NBREUpCisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChncmFudFN0 bXQsICIle2Nhc2NhZGV9cyIsICJDQVNDQURFIik7CisJCWVsc2UKKwkJCWFwcGVuZF9zdHJpbmdf b2JqZWN0KGdyYW50U3RtdCwgIiV7Y2FzY2FkZX1zIiwgIiIpOworCX0KKworCXJldHVybiBncmFu dFN0bXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFsdGVyT3BlcmF0b3JTdG10IChBTFRFUiBP UEVSQVRPUiAuLi4gU0VUIC4uLikuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0 ZXJPcGVyYXRvclN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJSGVhcFR1 cGxlICAgCW9wclR1cDsKKwlBbHRlck9wZXJhdG9yU3RtdCAqbm9kZSA9IChBbHRlck9wZXJhdG9y U3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZQkJICAgKmFsdGVyb3A7CisJRm9ybV9wZ19vcGVy YXRvciBvcHJGb3JtOworCUxpc3RDZWxsCSAgICpjZWxsOworCUxpc3QJCSAgICpsaXN0ID0gTklM OworCisJb3ByVHVwID0gU2VhcmNoU3lzQ2FjaGUxKE9QRVJPSUQsIE9iamVjdElkR2V0RGF0dW0o b2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQob3ByVHVwKSkKKwkJZWxvZyhFUlJP UiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9wZXJhdG9yIHdpdGggT0lEICV1Iiwgb2JqZWN0 SWQpOworCW9wckZvcm0gPSAoRm9ybV9wZ19vcGVyYXRvcikgR0VUU1RSVUNUKG9wclR1cCk7CisK KwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBBTFRFUiBPUEVSQVRPUiAle2lkZW50 aXR5fU8gKCV7bGVmdF90eXBlfVQsICV7cmlnaHRfdHlwZX1UKSBTRVQKKwkgKiAoJXtlbGVtczos IH1zKQorCSAqLworCWFsdGVyb3AgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgT1BFUkFUT1IgJXtp ZGVudGl0eX1PIiwgMSwKKwkJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJ CQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKG9wckZvcm0tPm9wcm5hbWVzcGFjZSwKKwkJCQkJ CQkJCQkJCQkgIE5hbWVTdHIob3ByRm9ybS0+b3BybmFtZSkpKTsKKworCS8qIExFRlRBUkcgKi8K KwlpZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJsZWZ0KSkKKwkJYXBwZW5kX29iamVjdF9vYmpl Y3QoYWx0ZXJvcCwgIigle2xlZnRfdHlwZX1UIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5 cGUob3ByRm9ybS0+b3BybGVmdCwgLTEpKTsKKwllbHNlCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KGFsdGVyb3AsICIoJXtsZWZ0X3R5cGV9cyIsICJOT05FIik7CisKKwkvKiBSSUdIVEFSRyAqLwor CUFzc2VydChPaWRJc1ZhbGlkKG9wckZvcm0tPm9wcmxlZnQpKTsKKwlhcHBlbmRfb2JqZWN0X29i amVjdChhbHRlcm9wLCAiLCAle3JpZ2h0X3R5cGV9VCkiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zv cl90eXBlKG9wckZvcm0tPm9wcnJpZ2h0LCAtMSkpOworCisJZm9yZWFjaChjZWxsLCBub2RlLT5v cHRpb25zKQorCXsKKwkJRGVmRWxlbSAqZWxlbSA9IChEZWZFbGVtICopIGxmaXJzdChjZWxsKTsK KwkJT2JqVHJlZSAqdG1wb2JqID0gTlVMTDsKKworCQlpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUs ICJyZXN0cmljdCIpID09IDApCisJCXsKKwkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJSRVNU UklDVD0iLCAxLAorCQkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJyZXN0cmljdCIp OworCQkJaWYgKE9pZElzVmFsaWQob3ByRm9ybS0+b3BycmVzdCkpCisJCQkJYXBwZW5kX29iamVj dF9vYmplY3QodG1wb2JqLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJIG9w ckZvcm0tPm9wcnJlc3QpKTsKKwkJCWVsc2UKKwkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBv YmosICIle3Byb2NlZHVyZX1zIiwgIk5PTkUiKTsKKwkJfQorCQllbHNlIGlmIChzdHJjbXAoZWxl bS0+ZGVmbmFtZSwgImpvaW4iKSA9PSAwKQorCQl7CisJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9W QSgiSk9JTj0iLCAxLAorCQkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJqb2luIik7 CisJCQlpZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJqb2luKSkKKwkJCQlhcHBlbmRfb2JqZWN0 X29iamVjdCh0bXBvYmosICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9m b3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkgb3By Rm9ybS0+b3Byam9pbikpOworCQkJZWxzZQorCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9i aiwgIiV7cHJvY2VkdXJlfXMiLCAiTk9ORSIpOworCQl9CisKKwkJQXNzZXJ0KHRtcG9iaik7CisJ CWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCX0KKwor CWFwcGVuZF9hcnJheV9vYmplY3QoYWx0ZXJvcCwgIlNFVCAoJXtlbGVtczosIH1zKSIsIGxpc3Qp OworCisJUmVsZWFzZVN5c0NhY2hlKG9wclR1cCk7CisKKwlyZXR1cm4gYWx0ZXJvcDsKK30KKwor LyoKKyAqIERlcGFyc2UgYW4gQUxURVIgT1BFUkFUT1IgRkFNSUxZIEFERC9EUk9QIGNvbW1hbmQu CisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJPcEZhbWlseShDb2xsZWN0ZWRD b21tYW5kICpjbWQpCit7CisJT2JqVHJlZQkgICAqYWx0ZXJPcEZhbTsKKwlBbHRlck9wRmFtaWx5 U3RtdCAqc3RtdCA9IChBbHRlck9wRmFtaWx5U3RtdCAqKSBjbWQtPnBhcnNldHJlZTsKKwlIZWFw VHVwbGUJZnRwOworCUZvcm1fcGdfb3BmYW1pbHkgb3BmRm9ybTsKKwlMaXN0CSAgICpsaXN0Owor CUxpc3RDZWxsICAgKmNlbGw7CisKKwlmdHAgPSBTZWFyY2hTeXNDYWNoZTEoT1BGQU1JTFlPSUQs CisJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0oY21kLT5kLm9wZmFtLmFkZHJlc3Mub2JqZWN0SWQp KTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoZnRwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxv b2t1cCBmYWlsZWQgZm9yIG9wZXJhdG9yIGZhbWlseSAldSIsCisJCQkgY21kLT5kLm9wZmFtLmFk ZHJlc3Mub2JqZWN0SWQpOworCW9wZkZvcm0gPSAoRm9ybV9wZ19vcGZhbWlseSkgR0VUU1RSVUNU KGZ0cCk7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBBTFRFUiBPUEVSQVRP UiBGQU1JTFkgJXtpZGVudGl0eX1EIFVTSU5HICV7YW1uYW1lfUkgQUREL0RST1AKKwkgKiAle2l0 ZW1zOiwgfXMKKwkgKi8KKwlhbHRlck9wRmFtID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIE9QRVJB VE9SIEZBTUlMWSAle2lkZW50aXR5fUQgIgorCQkJCQkJCQkiVVNJTkcgJXthbW5hbWV9SSIsIDIs CisJCQkJCQkJCSJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCW5ld19vYmp0cmVl X2Zvcl9xdWFsbmFtZShvcGZGb3JtLT5vcGZuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJCSBOYW1l U3RyKG9wZkZvcm0tPm9wZm5hbWUpKSwKKwkJCQkJCQkJImFtbmFtZSIsIE9ialR5cGVTdHJpbmcs IHN0bXQtPmFtbmFtZSk7CisKKwlsaXN0ID0gTklMOworCWZvcmVhY2goY2VsbCwgY21kLT5kLm9w ZmFtLm9wZXJhdG9ycykKKwl7CisJCU9wRmFtaWx5TWVtYmVyICpvcGVyID0gbGZpcnN0KGNlbGwp OworCQlPYmpUcmVlCSAgICp0bXBvYmo7CisKKwkJLyoKKwkJICogVmVyYm9zZSBzeW50YXgKKwkJ ICoKKwkJICogT1BFUkFUT1IgJXtudW19biAle29wZXJhdG9yfU8oJXtsdHlwZX1ULCAle3J0eXBl fVQpICV7cHVycG9zZX1zCisJCSAqLworCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiT1BFUkFU T1IgJXtudW19biIsIDEsCisJCQkJCQkJICJudW0iLCBPYmpUeXBlSW50ZWdlciwgb3Blci0+bnVt YmVyKTsKKworCQkvKiBBZGQgdGhlIG9wZXJhdG9yIG5hbWU7IHRoZSBEUk9QIGNhc2UgZG9lc24n dCBoYXZlIHRoaXMgKi8KKwkJaWYgKCFzdG10LT5pc0Ryb3ApCisJCXsKKwkJCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KHRtcG9iaiwgIiV7b3BlcmF0b3J9TyIsCisJCQkJCQkJCSBuZXdfb2JqdHJlZV9m b3JfcXVhbG5hbWVfaWQoT3BlcmF0b3JSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJIG9wZXIt Pm9iamVjdCkpOworCQl9CisKKwkJLyogQWRkIHRoZSB0eXBlcyAqLworCQlhcHBlbmRfb2JqZWN0 X29iamVjdCh0bXBvYmosICIoJXtsdHlwZX1ULCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90 eXBlKG9wZXItPmxlZnR0eXBlLCAtMSkpOworCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmos ICIle3J0eXBlfVQpIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUob3Blci0+cmlnaHR0 eXBlLCAtMSkpOworCisJCS8qIEFkZCB0aGUgRk9SIFNFQVJDSCAvIEZPUiBPUkRFUiBCWSBjbGF1 c2U7IG5vdCBpbiB0aGUgRFJPUCBjYXNlICovCisJCWlmICghc3RtdC0+aXNEcm9wKQorCQl7CisJ CQlpZiAob3Blci0+c29ydGZhbWlseSA9PSBJbnZhbGlkT2lkKQorCQkJCWFwcGVuZF9zdHJpbmdf b2JqZWN0KHRtcG9iaiwgIiV7cHVycG9zZX1zIiwgIkZPUiBTRUFSQ0giKTsKKwkJCWVsc2UKKwkJ CXsKKwkJCQlPYmpUcmVlCSAgICp0bXBvYmoyOworCisJCQkJdG1wb2JqMiA9IG5ld19vYmp0cmVl X1ZBKCJGT1IgT1JERVIgQlkiLCAwKTsKKwkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmoy LCAiJXtvcGZhbWlseX1EIiwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQo T3BlcmF0b3JGYW1pbHlSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCSBvcGVyLT5zb3J0ZmFt aWx5KSk7CisJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtwdXJwb3NlfXMiLCB0 bXBvYmoyKTsKKwkJCX0KKwkJfQorCisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rf b2JqZWN0KHRtcG9iaikpOworCX0KKworCWZvcmVhY2goY2VsbCwgY21kLT5kLm9wZmFtLnByb2Nl ZHVyZXMpCisJeworCQlPcEZhbWlseU1lbWJlciAqcHJvYyA9IGxmaXJzdChjZWxsKTsKKwkJT2Jq VHJlZQkgICAqdG1wb2JqOworCisJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJGVU5DVElPTiAl e251bX1uICgle2x0eXBlfVQsICV7cnR5cGV9VCkiLCAzLAorCQkJCQkJCSAibnVtIiwgT2JqVHlw ZUludGVnZXIsIHByb2MtPm51bWJlciwKKwkJCQkJCQkgImx0eXBlIiwgT2JqVHlwZU9iamVjdCwK KwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUocHJvYy0+bGVmdHR5cGUsIC0xKSwKKwkJCQkJ CQkgInJ0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUo cHJvYy0+cmlnaHR0eXBlLCAtMSkpOworCisJCS8qIEFkZCB0aGUgZnVuY3Rpb24gbmFtZSBhbmQg YXJnIHR5cGVzOyB0aGUgRFJPUCBjYXNlIGRvZXNuJ3QgaGF2ZSB0aGlzICovCisJCWlmICghc3Rt dC0+aXNEcm9wKQorCQl7CisJCQlIZWFwVHVwbGUJcHJvY1R1cDsKKwkJCUZvcm1fcGdfcHJvYyBw cm9jRm9ybTsKKwkJCU9pZAkJICAgKnByb2FyZ3R5cGVzOworCQkJTGlzdAkgICAqYXJnbGlzdCA9 IE5JTDsKKwkJCWludAkJCWk7CisKKwkJCXByb2NUdXAgPSBTZWFyY2hTeXNDYWNoZTEoUFJPQ09J RCwgT2JqZWN0SWRHZXREYXR1bShwcm9jLT5vYmplY3QpKTsKKwkJCWlmICghSGVhcFR1cGxlSXNW YWxpZChwcm9jVHVwKSkKKwkJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Ig cHJvY2VkdXJlICV1IiwgcHJvYy0+b2JqZWN0KTsKKwkJCXByb2NGb3JtID0gKEZvcm1fcGdfcHJv YykgR0VUU1RSVUNUKHByb2NUdXApOworCisJCQlwcm9hcmd0eXBlcyA9IHByb2NGb3JtLT5wcm9h cmd0eXBlcy52YWx1ZXM7CisJCQlmb3IgKGkgPSAwOyBpIDwgcHJvY0Zvcm0tPnByb25hcmdzOyBp KyspCisJCQl7CisJCQkJT2JqVHJlZQkgICAqYXJnOworCisJCQkJYXJnID0gbmV3X29ianRyZWVf Zm9yX3R5cGUocHJvYXJndHlwZXNbaV0sIC0xKTsKKwkJCQlhcmdsaXN0ID0gbGFwcGVuZChhcmds aXN0LCBuZXdfb2JqZWN0X29iamVjdChhcmcpKTsKKwkJCX0KKworCQkJYXBwZW5kX29iamVjdF9v YmplY3QodG1wb2JqLCAiJXtmdW5jdGlvbn1EIiwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9x dWFsbmFtZShwcm9jRm9ybS0+cHJvbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCQkgIE5hbWVTdHIo cHJvY0Zvcm0tPnByb25hbWUpKSk7CisKKwkJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRtcG9iaiwg IigiKTsKKwkJCWFwcGVuZF9hcnJheV9vYmplY3QodG1wb2JqLCAiJXthcmd0eXBlczosIH1UIiwg YXJnbGlzdCk7CisJCQlhcHBlbmRfZm9ybWF0X3N0cmluZyh0bXBvYmosICIpIik7CisKKwkJCVJl bGVhc2VTeXNDYWNoZShwcm9jVHVwKTsKKwkJfQorCisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5l d19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCX0KKworCWlmIChzdG10LT5pc0Ryb3ApCisJCWFw cGVuZF9mb3JtYXRfc3RyaW5nKGFsdGVyT3BGYW0sICJEUk9QIik7CisJZWxzZQorCQlhcHBlbmRf Zm9ybWF0X3N0cmluZyhhbHRlck9wRmFtLCAiQUREIik7CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0 KGFsdGVyT3BGYW0sICIle2l0ZW1zOiwgfXMiLCBsaXN0KTsKKworCVJlbGVhc2VTeXNDYWNoZShm dHApOworCisJcmV0dXJuIGFsdGVyT3BGYW07Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQWx0ZXJP d25lclN0bXQgKEFMVEVSIC4uLiBPV05FUiBUTyAuLi4pLgorICovCitzdGF0aWMgT2JqVHJlZSAq CitkZXBhcnNlX0FsdGVyT3duZXJTdG10KE9iamVjdEFkZHJlc3MgYWRkcmVzcywgTm9kZSAqcGFy c2V0cmVlKQoreworCUFsdGVyT3duZXJTdG10ICpub2RlID0gKEFsdGVyT3duZXJTdG10ICopIHBh cnNldHJlZTsKKwlPYmpUcmVlCQkgICAqb3duZXJTdG10OworCWNoYXIJCSAgICpmbXQ7CisKKwlm bXQgPSBwc3ByaW50ZigiQUxURVIgJXMgJSV7aWRlbnRpdHl9cyBPV05FUiBUTyAlJXtuZXdvd25l cn1JIiwKKwkJCQkgICBzdHJpbmdpZnlfb2JqdHlwZShub2RlLT5vYmplY3RUeXBlKSk7CisKKwlv d25lclN0bXQgPSBuZXdfb2JqdHJlZV9WQShmbXQsIDIsCisJCQkJCQkJICAgImlkZW50aXR5Iiwg T2JqVHlwZVN0cmluZywKKwkJCQkJCQkgICBnZXRPYmplY3RJZGVudGl0eSgmYWRkcmVzcywgZmFs c2UpLAorCQkJCQkJCSAgICJuZXdvd25lciIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJICAgZ2V0 X3JvbGVzcGVjX25hbWUobm9kZS0+bmV3b3duZXIpKTsKKworCXJldHVybiBvd25lclN0bXQ7Cit9 CisKKy8qCisgKiBEZXBhcnNlIGFuIEFsdGVyU2VxU3RtdC4KKyAqCisgKiBHaXZlbiBhIHNlcXVl bmNlIE9JRCBhbmQgYSBwYXJzZXRyZWUgdGhhdCBtb2RpZmllZCBpdCwgcmV0dXJuIGFuIE9ialRy ZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgYWx0ZXIgY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRy ZWUgKgorZGVwYXJzZV9BbHRlclNlcVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUp Cit7CisJT2JqVHJlZQkJKmFsdGVyU2VxOworCU9ialRyZWUJCSp0bXBvYmo7CisJUmVsYXRpb24J IHJlbGF0aW9uOworCUZvcm1fcGdfc2VxdWVuY2VfZGF0YSBzZXFkYXRhOworCUxpc3QJICAgKmVs ZW1zID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisJRm9ybV9wZ19zZXF1ZW5jZSBzZXFmb3Jt OworCVJlbGF0aW9uCXJlbDsKKwlIZWFwVHVwbGUJc2VxdHVwbGU7CisJQWx0ZXJTZXFTdG10ICph bHRlclNlcVN0bXQgPSAoQWx0ZXJTZXFTdG10ICopIHBhcnNldHJlZTsKKworCS8qCisJICogU2Vx dWVuY2UgZm9yIElERU5USVRZIENPTFVNTiBvdXRwdXQgc2VwYXJhdGVseSh2aWEgQ1JFQVRFIFRB QkxFIG9yCisJICogQUxURVIgVEFCTEUpOyByZXR1cm4gZW1wdHkgaGVyZS4KKwkgKi8KKwlpZiAo YWx0ZXJTZXFTdG10LT5mb3JfaWRlbnRpdHkpCisJCXJldHVybiBOVUxMOworCisJc2VxZGF0YSA9 IGdldF9zZXF1ZW5jZV92YWx1ZXMob2JqZWN0SWQpOworCisJcmVsYXRpb24gPSByZWxhdGlvbl9v cGVuKG9iamVjdElkLCBBY2Nlc3NTaGFyZUxvY2spOworCXJlbCA9IHRhYmxlX29wZW4oU2VxdWVu Y2VSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKwlzZXF0dXBsZSA9IFNlYXJjaFN5c0Nh Y2hlQ29weTEoU0VRUkVMSUQsCisJCQkJCQkJCSAgIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQp KTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoc2VxdHVwbGUpKQorCQllbG9nKEVSUk9SLCAiY2Fj aGUgbG9va3VwIGZhaWxlZCBmb3Igc2VxdWVuY2UgJXUiLAorCQkJIG9iamVjdElkKTsKKworCXNl cWZvcm0gPSAoRm9ybV9wZ19zZXF1ZW5jZSkgR0VUU1RSVUNUKHNlcXR1cGxlKTsKKworCWFsdGVy U2VxID0gbmV3X29ianRyZWUoIkFMVEVSIFNFUVVFTkNFIik7CisKKwl0bXBvYmogPSBuZXdfb2Jq dHJlZV9mb3JfcXVhbG5hbWUocmVsYXRpb24tPnJkX3JlbC0+cmVsbmFtZXNwYWNlLAorCQkJCQkJ CQkgICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWxhdGlvbikpOworCWFwcGVuZF9vYmplY3Rf b2JqZWN0KGFsdGVyU2VxLCAiJXtpZGVudGl0eX1EIiwgdG1wb2JqKTsKKworCWZvcmVhY2goY2Vs bCwgKChBbHRlclNlcVN0bXQgKikgcGFyc2V0cmVlKS0+b3B0aW9ucykKKwl7CisJCURlZkVsZW0g KmVsZW0gPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisJCU9iakVsZW0gKm5ld2VsbTsKKwor CQlpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJjYWNoZSIpID09IDApCisJCQluZXdlbG0gPSBk ZXBhcnNlX1NlcV9DYWNoZShhbHRlclNlcSwgc2VxZm9ybSwgZmFsc2UpOworCQllbHNlIGlmIChz dHJjbXAoZWxlbS0+ZGVmbmFtZSwgImN5Y2xlIikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2Vf U2VxX0N5Y2xlKGFsdGVyU2VxLCBzZXFmb3JtLCBmYWxzZSk7CisJCWVsc2UgaWYgKHN0cmNtcChl bGVtLT5kZWZuYW1lLCAiaW5jcmVtZW50IikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfU2Vx X0luY3JlbWVudEJ5KGFsdGVyU2VxLCBzZXFmb3JtLCBmYWxzZSk7CisJCWVsc2UgaWYgKHN0cmNt cChlbGVtLT5kZWZuYW1lLCAibWludmFsdWUiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9T ZXFfTWludmFsdWUoYWx0ZXJTZXEsIHNlcWZvcm0sIGZhbHNlKTsKKwkJZWxzZSBpZiAoc3RyY21w KGVsZW0tPmRlZm5hbWUsICJtYXh2YWx1ZSIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1Nl cV9NYXh2YWx1ZShhbHRlclNlcSwgc2VxZm9ybSwgZmFsc2UpOworCQllbHNlIGlmIChzdHJjbXAo ZWxlbS0+ZGVmbmFtZSwgInN0YXJ0IikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfU2VxX1N0 YXJ0d2l0aChhbHRlclNlcSwgc2VxZm9ybSwgZmFsc2UpOworCQllbHNlIGlmIChzdHJjbXAoZWxl bS0+ZGVmbmFtZSwgInJlc3RhcnQiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9TZXFfUmVz dGFydChhbHRlclNlcSwgc2VxZGF0YSk7CisJCWVsc2UgaWYgKHN0cmNtcChlbGVtLT5kZWZuYW1l LCAib3duZWRfYnkiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9TZXFfT3duZWRCeShhbHRl clNlcSwgb2JqZWN0SWQsIGZhbHNlKTsKKwkJZWxzZQorCQkJZWxvZyhFUlJPUiwgImludmFsaWQg c2VxdWVuY2Ugb3B0aW9uICVzIiwgZWxlbS0+ZGVmbmFtZSk7CisKKwkJZWxlbXMgPSBsYXBwZW5k KGVsZW1zLCBuZXdlbG0pOworCX0KKworCWFwcGVuZF9hcnJheV9vYmplY3QoYWx0ZXJTZXEsICIl e2RlZmluaXRpb246IH1zIiwgZWxlbXMpOworCisJdGFibGVfY2xvc2UocmVsLCBSb3dFeGNsdXNp dmVMb2NrKTsKKwlyZWxhdGlvbl9jbG9zZShyZWxhdGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsKKwor CXJldHVybiBhbHRlclNlcTsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQWx0ZXJUeXBlU3RtdC4K KyAqCisgKiBHaXZlbiBhIHR5cGUgT0lEIGFuZCBhIHBhcnNldHJlZSB0aGF0IG1vZGlmaWVkIGl0 LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBhbHRlciB0eXBlLgorICov CitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyVHlwZVNldFN0bXQoT2lkIG9iamVjdElk LCBOb2RlICpjbWQpCit7CisJQWx0ZXJUeXBlU3RtdCAqYWx0ZXJUeXBlU2V0U3RtdCA9IChBbHRl clR5cGVTdG10ICopY21kOworCU9ialRyZWUJCSphbHRlclR5cGU7CisJTGlzdENlbGwgICAqcGw7 CisJTGlzdAkgICAqZWxlbXMgPSBOSUw7CisJSGVhcFR1cGxlICAgdHlwVHVwOworCUZvcm1fcGdf dHlwZSB0eXBGb3JtOworCisJdHlwVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFRZUEVPSUQsIE9iamVj dElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHlwVHVwKSkK KwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHR5cGUgd2l0aCBPSUQgJXUi LCBvYmplY3RJZCk7CisJdHlwRm9ybSA9IChGb3JtX3BnX3R5cGUpIEdFVFNUUlVDVCh0eXBUdXAp OworCisJYWx0ZXJUeXBlID0gbmV3X29ianRyZWUoIkFMVEVSIFRZUEUiKTsKKwlhcHBlbmRfb2Jq ZWN0X29iamVjdChhbHRlclR5cGUsICIle2lkZW50aXR5fUQgU0VUIiwKKwkJCQkJCSBuZXdfb2Jq dHJlZV9mb3JfcXVhbG5hbWVfaWQoVHlwZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIG9iamVj dElkKSk7CisKKwlmb3JlYWNoKHBsLCBhbHRlclR5cGVTZXRTdG10LT5vcHRpb25zKQorCXsKKwkJ RGVmRWxlbSAgICAqZGVmZWwgPSAoRGVmRWxlbSAqKSBsZmlyc3QocGwpOworCQlPYmpFbGVtICpu ZXdlbG07CisKKwkJaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInN0b3JhZ2UiKSA9PSAwKQor CQkJbmV3ZWxtID0gZGVwYXJzZV9UeXBlX1N0b3JhZ2UoYWx0ZXJUeXBlLCB0eXBGb3JtKTsKKwkJ aWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInJlY2VpdmUiKSA9PSAwKQorCQkJbmV3ZWxtID0g ZGVwYXJzZV9UeXBlX1JlY2VpdmUoYWx0ZXJUeXBlLCB0eXBGb3JtKTsKKwkJaWYgKHN0cmNtcChk ZWZlbC0+ZGVmbmFtZSwgInNlbmQiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9UeXBlX1Nl bmQoYWx0ZXJUeXBlLCB0eXBGb3JtKTsKKwkJaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInR5 cG1vZF9pbiIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1R5cGVfVHlwbW9kX0luKGFsdGVy VHlwZSwgdHlwRm9ybSk7CisJCWlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJ0eXBtb2Rfb3V0 IikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfVHlwZV9UeXBtb2RfT3V0KGFsdGVyVHlwZSwg dHlwRm9ybSk7CisJCWlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJhbmFseXplIikgPT0gMCkK KwkJCW5ld2VsbSA9IGRlcGFyc2VfVHlwZV9BbmFseXplKGFsdGVyVHlwZSwgdHlwRm9ybSk7CisJ CWlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJzdWJzY3JpcHQiKSA9PSAwKQorCQkJbmV3ZWxt ID0gZGVwYXJzZV9UeXBlX1N1YnNjcmlwdChhbHRlclR5cGUsIHR5cEZvcm0pOworCQllbHNlCisJ CQllbG9nKEVSUk9SLCAiaW52YWxpZCB0eXBlIG9wdGlvbiAlcyIsIGRlZmVsLT5kZWZuYW1lKTsK KworCQllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIG5ld2VsbSk7CisJfQorCisJYXBwZW5kX2FycmF5 X29iamVjdChhbHRlclR5cGUsICIoJXtkZWZpbml0aW9uOiB9cykiLCBlbGVtcyk7CisKKwlSZWxl YXNlU3lzQ2FjaGUodHlwVHVwKTsKKworCXJldHVybiBhbHRlclR5cGU7Cit9CisKKy8qCisgKiBE ZXBhcnNlIGEgQ29tcG9zaXRlVHlwZVN0bXQgKENSRUFURSBUWVBFIEFTKQorICoKKyAqIEdpdmVu IGEgdHlwZSBPSUQgYW5kIHRoZSBwYXJzZXRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4g T2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICovCitzdGF0 aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NvbXBvc2l0ZVR5cGVTdG10KE9pZCBvYmplY3RJZCwgTm9k ZSAqcGFyc2V0cmVlKQoreworCUNvbXBvc2l0ZVR5cGVTdG10ICpub2RlID0gKENvbXBvc2l0ZVR5 cGVTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlCSAgICpjb21wb3NpdGU7CisJSGVhcFR1cGxl CXR5cHR1cDsKKwlGb3JtX3BnX3R5cGUgdHlwZm9ybTsKKwlSZWxhdGlvbgl0eXBlcmVsOworCUxp c3QJICAgKmRwY29udGV4dDsKKwlMaXN0CSAgICp0YWJsZWVsdHMgPSBOSUw7CisKKwkvKiBGaW5k IHRoZSBwZ190eXBlIGVudHJ5IGFuZCBvcGVuIHRoZSBjb3JyZXNwb25kaW5nIHJlbGF0aW9uICov CisJdHlwdHVwID0gU2VhcmNoU3lzQ2FjaGUxKFRZUEVPSUQsIE9iamVjdElkR2V0RGF0dW0ob2Jq ZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHlwdHVwKSkKKwkJZWxvZyhFUlJPUiwg ImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHR5cGUgJXUiLCBvYmplY3RJZCk7CisJdHlwZm9ybSA9 IChGb3JtX3BnX3R5cGUpIEdFVFNUUlVDVCh0eXB0dXApOworCXR5cGVyZWwgPSByZWxhdGlvbl9v cGVuKHR5cGZvcm0tPnR5cHJlbGlkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJZHBjb250ZXh0ID0g ZGVwYXJzZV9jb250ZXh0X2ZvcihSZWxhdGlvbkdldFJlbGF0aW9uTmFtZSh0eXBlcmVsKSwKKwkJ CQkJCQkJCVJlbGF0aW9uR2V0UmVsaWQodHlwZXJlbCkpOworCisJY29tcG9zaXRlID0gbmV3X29i anRyZWVfVkEoIkNSRUFURSBUWVBFIiwgMCk7CisJYXBwZW5kX29iamVjdF9vYmplY3QoY29tcG9z aXRlLCAiJXtpZGVudGl0eX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQo VHlwZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIG9iamVjdElkKSk7CisKKwl0YWJsZWVsdHMg PSBkZXBhcnNlX1RhYmxlRWxlbWVudHModHlwZXJlbCwgbm9kZS0+Y29sZGVmbGlzdCwgZHBjb250 ZXh0LAorCQkJCQkJCQkJICBmYWxzZSwJCS8qIG5vdCB0eXBlZCAqLworCQkJCQkJCQkJICB0cnVl KTsJCS8qIGNvbXBvc2l0ZSB0eXBlICovCisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KGNvbXBvc2l0 ZSwgIkFTICgle2NvbHVtbnM6LCB9cykiLCB0YWJsZWVsdHMpOworCisJdGFibGVfY2xvc2UodHlw ZXJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlSZWxlYXNlU3lzQ2FjaGUodHlwdHVwKTsKKworCXJl dHVybiBjb21wb3NpdGU7Cit9CisKK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlQ29u dmVyc2lvbihPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlIZWFwVHVwbGUgICBj b25UdXA7CisJUmVsYXRpb24JY29udnJlbDsKKwlGb3JtX3BnX2NvbnZlcnNpb24gY29uRm9ybTsK KwlPYmpUcmVlCSAgICpjY1N0bXQsICp0bXBPYmo7CisKKwljb252cmVsID0gdGFibGVfb3BlbihD b252ZXJzaW9uUmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwljb25UdXAgPSBnZXRfY2F0 YWxvZ19vYmplY3RfYnlfb2lkKGNvbnZyZWwsIEFudW1fcGdfY29udmVyc2lvbl9vaWQsIG9iamVj dElkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoY29uVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNh Y2hlIGxvb2t1cCBmYWlsZWQgZm9yIGNvbnZlcnNpb24gd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7 CisJY29uRm9ybSA9IChGb3JtX3BnX2NvbnZlcnNpb24pIEdFVFNUUlVDVChjb25UdXApOworCisJ LyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICogQ1JFQVRFICV7ZGVmYXVsdH1zIENPTlZF UlNJT04gJXtpZGVudGl0eX1EIEZPUiAle3NvdXJjZX1MIFRPICV7ZGVzdH1MCisJICogRlJPTSAl e2Z1bmN0aW9ufUQKKwkgKi8KKwljY1N0bXQgPSBuZXdfb2JqdHJlZSgiQ1JFQVRFIik7CisKKwor CS8qIEFkZCB0aGUgREVGQVVMVCBjbGF1c2UgKi8KKwlhcHBlbmRfc3RyaW5nX29iamVjdChjY1N0 bXQsICJkZWZhdWx0IiwKKwkJCQkJCSBjb25Gb3JtLT5jb25kZWZhdWx0ID8gIkRFRkFVTFQiIDog IiIpOworCisJdG1wT2JqID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGNvbkZvcm0tPmNvbm5h bWVzcGFjZSwgTmFtZVN0cihjb25Gb3JtLT5jb25uYW1lKSk7CisJYXBwZW5kX29iamVjdF9vYmpl Y3QoY2NTdG10LCAiQ09OVkVSU0lPTiAle2lkZW50aXR5fUQiLCB0bXBPYmopOworCWFwcGVuZF9z dHJpbmdfb2JqZWN0KGNjU3RtdCwgIkZPUiAle3NvdXJjZX1MIiwgKGNoYXIgKikKKwkJCQkJCSBw Z19lbmNvZGluZ190b19jaGFyKGNvbkZvcm0tPmNvbmZvcmVuY29kaW5nKSk7CisJYXBwZW5kX3N0 cmluZ19vYmplY3QoY2NTdG10LCAiVE8gJXtkZXN0fUwiLCAoY2hhciAqKQorCQkJCQkJIHBnX2Vu Y29kaW5nX3RvX2NoYXIoY29uRm9ybS0+Y29udG9lbmNvZGluZykpOworCWFwcGVuZF9vYmplY3Rf b2JqZWN0KGNjU3RtdCwgIkZST00gJXtmdW5jdGlvbn1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9m b3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgY29uRm9y bS0+Y29ucHJvYykpOworCisJdGFibGVfY2xvc2UoY29udnJlbCwgQWNjZXNzU2hhcmVMb2NrKTsK KworCXJldHVybiBjY1N0bXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlRW51bVN0bXQg KENSRUFURSBUWVBFIEFTIEVOVU0pCisgKgorICogR2l2ZW4gYSB0eXBlIE9JRCBhbmQgdGhlIHBh cnNldHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRp bmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2Vf Q3JlYXRlRW51bVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRl RW51bVN0bXQgKm5vZGUgPSAoQ3JlYXRlRW51bVN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUJ ICAgKmVudW10eXBlOworCUxpc3QJICAgKnZhbHVlczsKKwlMaXN0Q2VsbCAgICpjZWxsOworCisJ ZW51bXR5cGUgPSBuZXdfb2JqdHJlZSgiQ1JFQVRFIFRZUEUiKTsKKwlhcHBlbmRfb2JqZWN0X29i amVjdChlbnVtdHlwZSwgIiV7aWRlbnRpdHl9RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1 YWxuYW1lX2lkKFR5cGVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSBvYmplY3RJZCkpOworCisJ dmFsdWVzID0gTklMOworCWZvcmVhY2goY2VsbCwgbm9kZS0+dmFscykKKwl7CisJCVN0cmluZyAg ICp2YWwgPSBsZmlyc3Rfbm9kZShTdHJpbmcsIGNlbGwpOworCisJCXZhbHVlcyA9IGxhcHBlbmQo dmFsdWVzLCBuZXdfc3RyaW5nX29iamVjdChzdHJWYWwodmFsKSkpOworCX0KKworCWFwcGVuZF9h cnJheV9vYmplY3QoZW51bXR5cGUsICJBUyBFTlVNICgle3ZhbHVlczosIH1MKSIsIHZhbHVlcyk7 CisJcmV0dXJuIGVudW10eXBlOworfQorCisvKgorICogZGVwYXJzZV9DcmVhdGVFeHRlbnNpb25T dG10CisgKgkJZGVwYXJzZSBhIENyZWF0ZUV4dGVuc2lvblN0bXQKKyAqCisgKiBHaXZlbiBhbiBl eHRlbnNpb24gT0lEIGFuZCB0aGUgcGFyc2V0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIHRo ZSBKU09OCisgKiBibG9iIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqCisg Ki8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlRXh0ZW5zaW9uU3RtdChPaWQgb2Jq ZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVFeHRlbnNpb25TdG10ICpub2RlID0g KENyZWF0ZUV4dGVuc2lvblN0bXQgKikgcGFyc2V0cmVlOworCVJlbGF0aW9uICAgIHBnX2V4dGVu c2lvbjsKKwlIZWFwVHVwbGUgICBleHRUdXA7CisJRm9ybV9wZ19leHRlbnNpb24gZXh0Rm9ybTsK KwlPYmpUcmVlCSAgICpleHRTdG10OworCU9ialRyZWUJICAgKnRtcDsKKwlMaXN0CSAgICpsaXN0 OworCUxpc3RDZWxsICAgKmNlbGw7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkg KiBDUkVBVEUgRVhURU5TSU9OICV7aWZfbm90X2V4aXN0c31zICV7aWRlbnRpdHl9SSAle29wdGlv bnM6IH1zCisJICovCisKKwlwZ19leHRlbnNpb24gPSB0YWJsZV9vcGVuKEV4dGVuc2lvblJlbGF0 aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJZXh0VHVwID0gZ2V0X2NhdGFsb2dfb2JqZWN0X2J5 X29pZChwZ19leHRlbnNpb24sIEFudW1fcGdfZXh0ZW5zaW9uX29pZCwgb2JqZWN0SWQpOworCWlm ICghSGVhcFR1cGxlSXNWYWxpZChleHRUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3Vw IGZhaWxlZCBmb3IgZXh0ZW5zaW9uIHdpdGggT0lEICV1IiwKKwkJCSBvYmplY3RJZCk7CisJZXh0 Rm9ybSA9IChGb3JtX3BnX2V4dGVuc2lvbikgR0VUU1RSVUNUKGV4dFR1cCk7CisKKwlleHRTdG10 ID0gbmV3X29ianRyZWUoIkNSRUFURSBFWFRFTlNJT04iKTsKKworCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KGV4dFN0bXQsICIle2lmX25vdF9leGlzdHN9cyIsCisJCQkJCQkgbm9kZS0+aWZfbm90X2V4 aXN0cyA/ICJJRiBOT1QgRVhJU1RTIiA6ICIiKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGV4 dFN0bXQsICIle25hbWV9SSIsIG5vZGUtPmV4dG5hbWUpOworCisJLyogTGlzdCBvZiBvcHRpb25z ICovCisJbGlzdCA9IE5JTDsKKwlmb3JlYWNoKGNlbGwsIG5vZGUtPm9wdGlvbnMpCisJeworCQlE ZWZFbGVtICpvcHQgPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisKKwkJaWYgKHN0cmNtcChv cHQtPmRlZm5hbWUsICJzY2hlbWEiKSA9PSAwKQorCQl7CisJCQkvKiBza2lwIHRoaXMgb25lOyB3 ZSBhZGQgb25lIHVuY29uZGl0aW9uYWxseSBiZWxvdyAqLworCQkJY29udGludWU7CisJCX0KKwkJ ZWxzZSBpZiAoc3RyY21wKG9wdC0+ZGVmbmFtZSwgIm5ld192ZXJzaW9uIikgPT0gMCkKKwkJewor CQkJdG1wID0gbmV3X29ianRyZWVfVkEoIlZFUlNJT04gJXt2ZXJzaW9ufUwiLCAyLAorCQkJCQkJ CQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAidmVyc2lvbiIsCisJCQkJCQkJCSAidmVyc2lvbiIs IE9ialR5cGVTdHJpbmcsIGRlZkdldFN0cmluZyhvcHQpKTsKKwkJCWxpc3QgPSBsYXBwZW5kKGxp c3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCQl9CisJCWVsc2UgaWYgKHN0cmNtcChvcHQt PmRlZm5hbWUsICJvbGRfdmVyc2lvbiIpID09IDApCisJCXsKKwkJCXRtcCA9IG5ld19vYmp0cmVl X1ZBKCJGUk9NICV7dmVyc2lvbn1MIiwgMiwKKwkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmlu ZywgImZyb20iLAorCQkJCQkJCQkgInZlcnNpb24iLCBPYmpUeXBlU3RyaW5nLCBkZWZHZXRTdHJp bmcob3B0KSk7CisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXAp KTsKKwkJfQorCQllbHNlCisJCQllbG9nKEVSUk9SLCAidW5zdXBwb3J0ZWQgb3B0aW9uICVzIiwg b3B0LT5kZWZuYW1lKTsKKwl9CisKKwkvKiBBZGQgdGhlIFNDSEVNQSBvcHRpb24gKi8KKwl0bXAg PSBuZXdfb2JqdHJlZV9WQSgiU0NIRU1BICV7c2NoZW1hfUkiLAorCQkJCQkJIDIsICJ0eXBlIiwg T2JqVHlwZVN0cmluZywgInNjaGVtYSIsCisJCQkJCQkgInNjaGVtYSIsIE9ialR5cGVTdHJpbmcs CisJCQkJCQkgZ2V0X25hbWVzcGFjZV9uYW1lKGV4dEZvcm0tPmV4dG5hbWVzcGFjZSkpOworCWxp c3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogZG9uZSAq LworCWFwcGVuZF9hcnJheV9vYmplY3QoZXh0U3RtdCwgIiV7b3B0aW9uczogfXMiLCBsaXN0KTsK KworCXRhYmxlX2Nsb3NlKHBnX2V4dGVuc2lvbiwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVy biBleHRTdG10OworfQorCisvKgorICogSWYgYSBjb2x1bW4gbmFtZSBpcyBzcGVjaWZpZWQsIGFk ZCBhbiBlbGVtZW50IGZvciBpdDsgb3RoZXJ3aXNlIGl0J3MgYQorICogdGFibGUtbGV2ZWwgb3B0 aW9uLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0Zkd09wdGlvbnMoTGlzdCAqb3B0 aW9ucywgY2hhciAqY29sbmFtZSkKK3sKKwlPYmpUcmVlCSAgICp0bXA7CisKKwlpZiAoY29sbmFt ZSkKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIiwKKwkJ CQkJCQkgMSwgImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIGNvbG5hbWUpOworCWVsc2UKKwkJdG1w ID0gbmV3X29ianRyZWVfVkEoIk9QVElPTlMiLCAwKTsKKworCWlmIChvcHRpb25zICE9IE5JTCkK Kwl7CisJCUxpc3QJICAgKm9wdG91dCA9IE5JTDsKKwkJTGlzdENlbGwgICAqY2VsbDsKKworCQlm b3JlYWNoKGNlbGwsIG9wdGlvbnMpCisJCXsKKwkJCURlZkVsZW0JICAgKmVsZW07CisJCQlPYmpU cmVlCSAgICpvcHQ7CisKKwkJCWVsZW0gPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisKKwkJ CXN3aXRjaCAoZWxlbS0+ZGVmYWN0aW9uKQorCQkJeworCQkJCWNhc2UgREVGRUxFTV9VTlNQRUM6 CisJCQkJCW9wdCA9IG5ld19vYmp0cmVlX1ZBKCIle2xhYmVsfUkgJXt2YWx1ZX1MIiwgMiwKKwkJ CQkJCQkJCQkgImxhYmVsIiwgT2JqVHlwZVN0cmluZywgZWxlbS0+ZGVmbmFtZSwKKwkJCQkJCQkJ CQkgInZhbHVlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkgZWxlbS0+YXJnID8gZGVmR2V0 U3RyaW5nKGVsZW0pIDoKKwkJCQkJCQkJCQkgZGVmR2V0Qm9vbGVhbihlbGVtKSA/ICJUUlVFIiA6 ICJGQUxTRSIpOworCQkJCQlicmVhazsKKwkJCQljYXNlIERFRkVMRU1fU0VUOgorCQkJCQlvcHQg PSBuZXdfb2JqdHJlZV9WQSgiU0VUICV7bGFiZWx9SSAle3ZhbHVlfUwiLCAyLAorCQkJCQkJCQkJ CSAibGFiZWwiLCBPYmpUeXBlU3RyaW5nLCBlbGVtLT5kZWZuYW1lLAorCQkJCQkJCQkJCSAidmFs dWUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCSBlbGVtLT5hcmcgPyBkZWZHZXRTdHJpbmco ZWxlbSkgOgorCQkJCQkJCQkJCSBkZWZHZXRCb29sZWFuKGVsZW0pID8gIlRSVUUiIDogIkZBTFNF Iik7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgREVGRUxFTV9BREQ6CisJCQkJCW9wdCA9IG5ld19v Ymp0cmVlX1ZBKCJBREQgJXtsYWJlbH1JICV7dmFsdWV9TCIsIDIsCisJCQkJCQkJCQkJICJsYWJl bCIsIE9ialR5cGVTdHJpbmcsIGVsZW0tPmRlZm5hbWUsCisJCQkJCQkJCQkJICJ2YWx1ZSIsIE9i alR5cGVTdHJpbmcsCisJCQkJCQkJCQkJIGVsZW0tPmFyZyA/IGRlZkdldFN0cmluZyhlbGVtKSA6 CisJCQkJCQkJCQkJIGRlZkdldEJvb2xlYW4oZWxlbSkgPyAiVFJVRSIgOiAiRkFMU0UiKTsKKwkJ CQkJYnJlYWs7CisJCQkJY2FzZSBERUZFTEVNX0RST1A6CisJCQkJCW9wdCA9IG5ld19vYmp0cmVl X1ZBKCJEUk9QICV7bGFiZWx9SSIsIDEsCisJCQkJCQkJCQkJICJsYWJlbCIsIE9ialR5cGVTdHJp bmcsIGVsZW0tPmRlZm5hbWUpOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQllbG9n KEVSUk9SLCAiaW52YWxpZCBkZWYgYWN0aW9uICVkIiwgZWxlbS0+ZGVmYWN0aW9uKTsKKwkJCQkJ b3B0ID0gTlVMTDsKKwkJCX0KKworCQkJb3B0b3V0ID0gbGFwcGVuZChvcHRvdXQsIG5ld19vYmpl Y3Rfb2JqZWN0KG9wdCkpOworCQl9CisKKwkJYXBwZW5kX2FycmF5X29iamVjdCh0bXAsICIoJXtv cHRpb246ICx9cykiLCBvcHRvdXQpOworCX0KKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0 bXAsICJwcmVzZW50IiwgZmFsc2UpOworCisJcmV0dXJuIHRtcDsKK30KKworLyoKKyAqIGRlcGFy c2VfQ3JlYXRlRmR3U3RtdAorICogICBEZXBhcnNlIGEgQ3JlYXRlRmR3U3RtdCAoQ1JFQVRFIEZP UkVJR04gREFUQSBXUkFQUEVSKQorICoKKyAqIEdpdmVuIGEgdHJpZ2dlciBPSUQgYW5kIHRoZSBw YXJzZXRyZWUgdGhhdCBjcmVhdGVkIGl0LAorICogcmV0dXJuIGFuIE9ialRyZWUgcmVwcmVzZW50 aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNl X0NyZWF0ZUZkd1N0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRl RmR3U3RtdCAqbm9kZSA9IChDcmVhdGVGZHdTdG10ICopIHBhcnNldHJlZTsKKwlIZWFwVHVwbGUJ CWZkd1R1cDsKKwlGb3JtX3BnX2ZvcmVpZ25fZGF0YV93cmFwcGVyIGZkd0Zvcm07CisJUmVsYXRp b24JcmVsOworCisJT2JqVHJlZQkgICAqY3JlYXRlU3RtdDsKKwlPYmpUcmVlCSAgICp0bXA7CisK KwlyZWwgPSB0YWJsZV9vcGVuKEZvcmVpZ25EYXRhV3JhcHBlclJlbGF0aW9uSWQsIFJvd0V4Y2x1 c2l2ZUxvY2spOworCisJZmR3VHVwID0gU2VhcmNoU3lzQ2FjaGUxKEZPUkVJR05EQVRBV1JBUFBF Uk9JRCwKKwkJCQkJCQkgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1 cGxlSXNWYWxpZChmZHdUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBm b3IgZm9yZWlnbi1kYXRhIHdyYXBwZXIgJXUiLCBvYmplY3RJZCk7CisKKwlmZHdGb3JtID0gKEZv cm1fcGdfZm9yZWlnbl9kYXRhX3dyYXBwZXIpIEdFVFNUUlVDVChmZHdUdXApOworCisJY3JlYXRl U3RtdCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgRk9SRUlHTiBEQVRBIFdSQVBQRVIgJXtpZGVu dGl0eX1JIiwgMSwKKwkJCQkJCQkJImlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywgTmFtZVN0cihm ZHdGb3JtLT5mZHduYW1lKSk7CisKKwkvKiBhZGQgSEFORExFUiBjbGF1c2UgKi8KKwlpZiAoZmR3 Rm9ybS0+ZmR3aGFuZGxlciA9PSBJbnZhbGlkT2lkKQorCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgi Tk8gSEFORExFUiIsIDApOworCWVsc2UKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJIQU5E TEVSICV7cHJvY2VkdXJlfUQiLCAxLAorCQkJCQkJCSAiaGFuZGxlciIsIE9ialR5cGVPYmplY3Qs CisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklk LAorCQkJCQkJCQkJCQkJCQkgZmR3Rm9ybS0+ZmR3aGFuZGxlcikpOworCX0KKwlhcHBlbmRfb2Jq ZWN0X29iamVjdChjcmVhdGVTdG10LCAiJXtoYW5kbGVyfXMiLCB0bXApOworCisJLyogYWRkIFZB TElEQVRPUiBjbGF1c2UgKi8KKwlpZiAoZmR3Rm9ybS0+ZmR3dmFsaWRhdG9yID09IEludmFsaWRP aWQpCisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJOTyBWQUxJREFUT1IiLCAwKTsKKwllbHNlCisJ eworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiVkFMSURBVE9SICV7cHJvY2VkdXJlfUQiLCAxLAor CQkJCQkJCSAidmFsaWRhdG9yIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSBmZHdG b3JtLT5mZHd2YWxpZGF0b3IpKTsKKwl9CisJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3Rt dCwgIiV7dmFsaWRhdG9yfXMiLCB0bXApOworCisJLyogYWRkIGFuIE9QVElPTlMgY2xhdXNlLCBp ZiBhbnkgKi8KKwlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTdG10LCAiJXtnZW5lcmljX29w dGlvbnN9cyIsCisJCQkJCQkgZGVwYXJzZV9GZHdPcHRpb25zKG5vZGUtPm9wdGlvbnMsIE5VTEwp KTsKKworCVJlbGVhc2VTeXNDYWNoZShmZHdUdXApOworCXRhYmxlX2Nsb3NlKHJlbCwgUm93RXhj bHVzaXZlTG9jayk7CisKKwlyZXR1cm4gY3JlYXRlU3RtdDsKK30KKworLyoKKyAqIGRlcGFyc2Vf QWx0ZXJGZHdTdG10CisgKiAgRGVwYXJzZSBhbiBBbHRlckZkd1N0bXQgKEFMVEVSIEZPUkVJR04g REFUQSBXUkFQUEVSKQorICoKKyAqIEdpdmVuIGEgZnVuY3Rpb24gT0lEIGFuZCB0aGUgcGFyc2V0 cmVlIHRoYXQgY3JlYXRlIGl0LCByZXR1cm4gdGhlCisgKiBKU09OIGJsb2IgcmVwcmVzZW50aW5n IHRoZSBhbHRlciBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVy RmR3U3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlBbHRlckZkd1N0bXQg Km5vZGUgPSAoQWx0ZXJGZHdTdG10ICopIHBhcnNldHJlZTsKKwlIZWFwVHVwbGUJCWZkd1R1cDsK KwlGb3JtX3BnX2ZvcmVpZ25fZGF0YV93cmFwcGVyIGZkd0Zvcm07CisJUmVsYXRpb24JcmVsOwor CU9ialRyZWUJICAgKmFsdGVyU3RtdDsKKwlMaXN0CSAgICpmZHdfb3B0aW9ucyA9IE5JTDsKKwlM aXN0Q2VsbCAgICpjZWxsOworCisJcmVsID0gdGFibGVfb3BlbihGb3JlaWduRGF0YVdyYXBwZXJS ZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCWZkd1R1cCA9IFNlYXJjaFN5c0NhY2hl MShGT1JFSUdOREFUQVdSQVBQRVJPSUQsCisJCQkJCQkJIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0 SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoZmR3VHVwKSkKKwkJZWxvZyhFUlJPUiwgImNh Y2hlIGxvb2t1cCBmYWlsZWQgZm9yIGZvcmVpZ24tZGF0YSB3cmFwcGVyICV1Iiwgb2JqZWN0SWQp OworCisJZmR3Rm9ybSA9IChGb3JtX3BnX2ZvcmVpZ25fZGF0YV93cmFwcGVyKSBHRVRTVFJVQ1Qo ZmR3VHVwKTsKKworCWFsdGVyU3RtdCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBGT1JFSUdOIERB VEEgV1JBUFBFUiAle2lkZW50aXR5fUkiLCAxLAorCQkJCQkJCSAgICJpZGVudGl0eSIsIE9ialR5 cGVTdHJpbmcsIE5hbWVTdHIoZmR3Rm9ybS0+ZmR3bmFtZSkpOworCisJLyoKKwkgKiBJdGVyYXRl IHRocm91Z2ggb3B0aW9ucywgdG8gc2VlIHdoYXQgY2hhbmdlZCwgYnV0IHVzZSBjYXRhbG9nIGFz IGJhc2lzCisJICogZm9yIG5ldyB2YWx1ZXMuCisJICovCisJZm9yZWFjaChjZWxsLCBub2RlLT5m dW5jX29wdGlvbnMpCisJeworCQlEZWZFbGVtCSAgICplbGVtOworCQlPYmpUcmVlCSAgICp0bXA7 CisKKwkJZWxlbSA9IGxmaXJzdChjZWxsKTsKKworCQlpZiAocGdfc3RyY2FzZWNtcChlbGVtLT5k ZWZuYW1lLCAiaGFuZGxlciIpID09IDApCisJCXsKKwkJCS8qIGFkZCBIQU5ETEVSIGNsYXVzZSAq LworCQkJaWYgKGZkd0Zvcm0tPmZkd2hhbmRsZXIgPT0gSW52YWxpZE9pZCkKKwkJCQl0bXAgPSBu ZXdfb2JqdHJlZV9WQSgiTk8gSEFORExFUiIsIDApOworCQkJZWxzZQorCQkJeworCQkJCXRtcCA9 IG5ld19vYmp0cmVlX1ZBKCJIQU5ETEVSICV7cHJvY2VkdXJlfUQiLCAxLAorCQkJCQkJCQkJICJw cm9jZWR1cmUiLAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1 cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCSBmZHdGb3JtLT5mZHdoYW5kbGVyKSk7CisJ CQl9CisJCQlmZHdfb3B0aW9ucyA9IGxhcHBlbmQoZmR3X29wdGlvbnMsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcCkpOworCQl9CisJCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoZWxlbS0+ZGVmbmFtZSwg InZhbGlkYXRvciIpID09IDApCisJCXsKKwkJCS8qIGFkZCBWQUxJREFUT1IgY2xhdXNlICovCisJ CQlpZiAoZmR3Rm9ybS0+ZmR3dmFsaWRhdG9yID09IEludmFsaWRPaWQpCisJCQkJdG1wID0gbmV3 X29ianRyZWVfVkEoIk5PIFZBTElEQVRPUiIsIDApOworCQkJZWxzZQorCQkJeworCQkJCXRtcCA9 IG5ld19vYmp0cmVlX1ZBKCJWQUxJREFUT1IgJXtwcm9jZWR1cmV9RCIsIDEsCisJCQkJCQkJCQkg InByb2NlZHVyZSIsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2Nl ZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJIGZkd0Zvcm0tPmZkd3ZhbGlkYXRvcikp OworCQkJfQorCQkJZmR3X29wdGlvbnMgPSBsYXBwZW5kKGZkd19vcHRpb25zLCBuZXdfb2JqZWN0 X29iamVjdCh0bXApKTsKKwkJfQorCX0KKworCS8qIEFkZCBIQU5ETEVSL1ZBTElEQVRPUiBpZiBz cGVjaWZpZWQgKi8KKwlhcHBlbmRfYXJyYXlfb2JqZWN0KGFsdGVyU3RtdCwgIiV7ZmR3X29wdGlv bnM6IH1zIiwgZmR3X29wdGlvbnMpOworCisKKwkvKiBhZGQgYW4gT1BUSU9OUyBjbGF1c2UsIGlm IGFueSAqLworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyU3RtdCwgIiV7Z2VuZXJpY19vcHRp b25zfUQiLAorCQkJCQkJIGRlcGFyc2VfRmR3T3B0aW9ucyhub2RlLT5vcHRpb25zLCBOVUxMKSk7 CisKKwlSZWxlYXNlU3lzQ2FjaGUoZmR3VHVwKTsKKwl0YWJsZV9jbG9zZShyZWwsIFJvd0V4Y2x1 c2l2ZUxvY2spOworCisJcmV0dXJuIGFsdGVyU3RtdDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBD UkVBVEUgVFlQRSBBUyBSQU5HRSBzdGF0ZW1lbnQKKyAqCisgKiBHaXZlbiBhIHR5cGUgT0lEIGFu ZCB0aGUgcGFyc2V0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJl cHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgor ZGVwYXJzZV9DcmVhdGVSYW5nZVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7 CisJT2JqVHJlZQkgICAqcmFuZ2U7CisJT2JqVHJlZQkgICAqdG1wOworCUxpc3QJICAgKmRlZmlu aXRpb24gPSBOSUw7CisJUmVsYXRpb24JcGdfcmFuZ2U7CisJSGVhcFR1cGxlCXJhbmdlVHVwOwor CUZvcm1fcGdfcmFuZ2UgcmFuZ2VGb3JtOworCVNjYW5LZXlEYXRhIGtleVsxXTsKKwlTeXNTY2Fu RGVzYyBzY2FuOworCisJcGdfcmFuZ2UgPSB0YWJsZV9vcGVuKFJhbmdlUmVsYXRpb25JZCwgUm93 RXhjbHVzaXZlTG9jayk7CisKKwlTY2FuS2V5SW5pdCgma2V5WzBdLAorCQkJCUFudW1fcGdfcmFu Z2Vfcm5ndHlwaWQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCU9i amVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKworCXNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4o cGdfcmFuZ2UsIFJhbmdlVHlwaWRJbmRleElkLCB0cnVlLAorCQkJCQkJCSAgTlVMTCwgMSwga2V5 KTsKKworCXJhbmdlVHVwID0gc3lzdGFibGVfZ2V0bmV4dChzY2FuKTsKKwlpZiAoIUhlYXBUdXBs ZUlzVmFsaWQocmFuZ2VUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBm b3IgcmFuZ2Ugd2l0aCB0eXBlIG9pZCAldSIsCisJCQkgb2JqZWN0SWQpOworCisJcmFuZ2VGb3Jt ID0gKEZvcm1fcGdfcmFuZ2UpIEdFVFNUUlVDVChyYW5nZVR1cCk7CisKKwlyYW5nZSA9IG5ld19v Ymp0cmVlX1ZBKCJDUkVBVEUgVFlQRSIsIDApOworCXRtcCA9IG5ld19vYmp0cmVlX2Zvcl9xdWFs bmFtZV9pZChUeXBlUmVsYXRpb25JZCwgb2JqZWN0SWQpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KHJhbmdlLCAiJXtpZGVudGl0eX1EIEFTIFJBTkdFIiwgdG1wKTsKKworCS8qIFNVQlRZUEUgKi8K Kwl0bXAgPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoVHlwZVJlbGF0aW9uSWQsCisJCQkJ CQkJCQkgIHJhbmdlRm9ybS0+cm5nc3VidHlwZSk7CisJdG1wID0gbmV3X29ianRyZWVfVkEoIlNV QlRZUEUgPSAle3R5cGV9RCIsCisJCQkJCQkgMiwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0 cmluZywgInN1YnR5cGUiLAorCQkJCQkJICJ0eXBlIiwgT2JqVHlwZU9iamVjdCwgdG1wKTsKKwlk ZWZpbml0aW9uID0gbGFwcGVuZChkZWZpbml0aW9uLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsK KworCS8qIFNVQlRZUEVfT1BDTEFTUyAqLworCWlmIChPaWRJc1ZhbGlkKHJhbmdlRm9ybS0+cm5n c3Vib3BjKSkKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChPcGVyYXRv ckNsYXNzUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkgIHJhbmdlRm9ybS0+cm5nc3Vib3BjKTsKKwkJ dG1wID0gbmV3X29ianRyZWVfVkEoIlNVQlRZUEVfT1BDTEFTUyA9ICV7b3BjbGFzc31EIiwKKwkJ CQkJCQkgMiwKKwkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJvcGNsYXNzIiwKKwkJ CQkJCQkgIm9wY2xhc3MiLCBPYmpUeXBlT2JqZWN0LCB0bXApOworCQlkZWZpbml0aW9uID0gbGFw cGVuZChkZWZpbml0aW9uLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwl9CisKKwkvKiBDT0xM QVRJT04gKi8KKwlpZiAoT2lkSXNWYWxpZChyYW5nZUZvcm0tPnJuZ2NvbGxhdGlvbikpCisJewor CQl0bXAgPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoQ29sbGF0aW9uUmVsYXRpb25JZCwK KwkJCQkJCQkJCQkgIHJhbmdlRm9ybS0+cm5nY29sbGF0aW9uKTsKKwkJdG1wID0gbmV3X29ianRy ZWVfVkEoIkNPTExBVElPTiA9ICV7Y29sbGF0aW9ufUQiLAorCQkJCQkJCSAyLAorCQkJCQkJCSAi Y2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImNvbGxhdGlvbiIsCisJCQkJCQkJICJjb2xsYXRpb24i LCBPYmpUeXBlT2JqZWN0LCB0bXApOworCQlkZWZpbml0aW9uID0gbGFwcGVuZChkZWZpbml0aW9u LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwl9CisKKwkvKiBDQU5PTklDQUwgKi8KKwlpZiAo T2lkSXNWYWxpZChyYW5nZUZvcm0tPnJuZ2Nhbm9uaWNhbCkpCisJeworCQl0bXAgPSBuZXdfb2Jq dHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkgIHJh bmdlRm9ybS0+cm5nY2Fub25pY2FsKTsKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIkNBTk9OSUNB TCA9ICV7Y2Fub25pY2FsfUQiLAorCQkJCQkJCSAyLAorCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlw ZVN0cmluZywgImNhbm9uaWNhbCIsCisJCQkJCQkJICJjYW5vbmljYWwiLCBPYmpUeXBlT2JqZWN0 LCB0bXApOworCQlkZWZpbml0aW9uID0gbGFwcGVuZChkZWZpbml0aW9uLCBuZXdfb2JqZWN0X29i amVjdCh0bXApKTsKKwl9CisKKwkvKiBTVUJUWVBFX0RJRkYgKi8KKwlpZiAoT2lkSXNWYWxpZChy YW5nZUZvcm0tPnJuZ3N1YmRpZmYpKQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJICByYW5nZUZvcm0tPnJuZ3N1 YmRpZmYpOworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiU1VCVFlQRV9ESUZGID0gJXtzdWJ0eXBl X2RpZmZ9RCIsCisJCQkJCQkJIDIsCisJCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAi c3VidHlwZV9kaWZmIiwKKwkJCQkJCQkgInN1YnR5cGVfZGlmZiIsIE9ialR5cGVPYmplY3QsIHRt cCk7CisJCWRlZmluaXRpb24gPSBsYXBwZW5kKGRlZmluaXRpb24sIG5ld19vYmplY3Rfb2JqZWN0 KHRtcCkpOworCX0KKworCWFwcGVuZF9hcnJheV9vYmplY3QocmFuZ2UsICIoJXtkZWZpbml0aW9u OiwgfXMpIiwgZGVmaW5pdGlvbik7CisKKwlzeXN0YWJsZV9lbmRzY2FuKHNjYW4pOworCXRhYmxl X2Nsb3NlKHBnX3JhbmdlLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCXJldHVybiByYW5nZTsKK30K KworLyoKKyAqIERlcGFyc2UgYW4gQWx0ZXJFbnVtU3RtdC4KKyAqCisgKiBHaXZlbiBhIHR5cGUg T0lEIGFuZCBhIHBhcnNldHJlZSB0aGF0IG1vZGlmaWVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQor ICogcmVwcmVzZW50aW5nIHRoZSBhbHRlciB0eXBlLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitk ZXBhcnNlX0FsdGVyRW51bVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJ QWx0ZXJFbnVtU3RtdCAqbm9kZSA9IChBbHRlckVudW1TdG10ICopIHBhcnNldHJlZTsKKwlPYmpU cmVlCSAgICphbHRlckVudW07CisKKwlhbHRlckVudW0gPQluZXdfb2JqdHJlZV9WQSgiQUxURVIg VFlQRSIsIDApOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyRW51bSwgIiV7aWRlbnRpdHl9 RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFR5cGVSZWxhdGlvbklkLAor CQkJCQkJCQkJCQkJCSBvYmplY3RJZCkpOworCisJaWYgKCFub2RlLT5vbGRWYWwpCisJeworCQlh cHBlbmRfZm9ybWF0X3N0cmluZyhhbHRlckVudW0sICJBREQgVkFMVUUiKTsKKwkJYXBwZW5kX3N0 cmluZ19vYmplY3QoYWx0ZXJFbnVtLCAiJXtpZl9ub3RfZXhpc3RzfXMiLAorCQkJCQkJCW5vZGUt PnNraXBJZk5ld1ZhbEV4aXN0cyA/ICJJRiBOT1QgRVhJU1RTIiA6ICIiKTsKKworCQlhcHBlbmRf c3RyaW5nX29iamVjdChhbHRlckVudW0sICIle3ZhbHVlfUwiLCBub2RlLT5uZXdWYWwpOworCisJ CWlmIChub2RlLT5uZXdWYWxOZWlnaGJvcikKKwkJeworCQkJYXBwZW5kX3N0cmluZ19vYmplY3Qo YWx0ZXJFbnVtLCAiJXthZnRlcl9vcl9iZWZvcmV9cyIsCisJCQkJCQkJCW5vZGUtPm5ld1ZhbElz QWZ0ZXIgPyAiQUZURVIiIDogIkJFRk9SRSIpOworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QoYWx0 ZXJFbnVtLCAiJXtuZWlnaGJvdXJ9TCIsIG5vZGUtPm5ld1ZhbE5laWdoYm9yKTsKKwkJfQorCX0K KwllbHNlCisJeworCQlhcHBlbmRfc3RyaW5nX29iamVjdChhbHRlckVudW0sICJSRU5BTUUgVkFM VUUgJXt2YWx1ZX1MIFRPIiwKKwkJCQkJCQkgbm9kZS0+b2xkVmFsKTsKKwkJYXBwZW5kX3N0cmlu Z19vYmplY3QoYWx0ZXJFbnVtLCAiJXtuZXd2YWx1ZX1MIiwKKwkJCQkJCQkgbm9kZS0+bmV3VmFs KTsKKwl9CisKKwlyZXR1cm4gYWx0ZXJFbnVtOworfQorCisvKgorICogRGVwYXJzZSBBTFRFUiBF WFRFTlNJT04gLi4gVVBEQVRFIFRPIFZFUlNJT04KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVw YXJzZV9BbHRlckV4dGVuc2lvblN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7 CisJQWx0ZXJFeHRlbnNpb25TdG10ICpub2RlID0gKEFsdGVyRXh0ZW5zaW9uU3RtdCAqKSBwYXJz ZXRyZWU7CisJUmVsYXRpb24gICAgcGdfZXh0ZW5zaW9uOworCUhlYXBUdXBsZSAgIGV4dFR1cDsK KwlGb3JtX3BnX2V4dGVuc2lvbiBleHRGb3JtOworCU9ialRyZWUJICAgKnN0bXQ7CisJT2JqVHJl ZQkgICAqdG1wOworCUxpc3QJICAgKmxpc3QgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKwor CXBnX2V4dGVuc2lvbiA9IHRhYmxlX29wZW4oRXh0ZW5zaW9uUmVsYXRpb25JZCwgQWNjZXNzU2hh cmVMb2NrKTsKKwlleHRUdXAgPSBnZXRfY2F0YWxvZ19vYmplY3RfYnlfb2lkKHBnX2V4dGVuc2lv biwgQW51bV9wZ19leHRlbnNpb25fb2lkLCAgb2JqZWN0SWQpOworCWlmICghSGVhcFR1cGxlSXNW YWxpZChleHRUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgZXh0 ZW5zaW9uIHdpdGggT0lEICV1IiwKKwkJCSBvYmplY3RJZCk7CisJZXh0Rm9ybSA9IChGb3JtX3Bn X2V4dGVuc2lvbikgR0VUU1RSVUNUKGV4dFR1cCk7CisKKwlzdG10ID0gbmV3X29ianRyZWVfVkEo IkFMVEVSIEVYVEVOU0lPTiAle2lkZW50aXR5fUQgVVBEQVRFIiwgMSwKKwkJCQkJCSAgImlkZW50 aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSAgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGV4 dEZvcm0tPmV4dG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgIE5hbWVTdHIoZXh0Rm9ybS0+ZXh0 bmFtZSkpKTsKKworCWZvcmVhY2goY2VsbCwgbm9kZS0+b3B0aW9ucykKKwl7CisJCURlZkVsZW0g Km9wdCA9IChEZWZFbGVtICopIGxmaXJzdChjZWxsKTsKKworCQlpZiAoc3RyY21wKG9wdC0+ZGVm bmFtZSwgIm5ld192ZXJzaW9uIikgPT0gMCkKKwkJeworCQkJdG1wID0gbmV3X29ianRyZWVfVkEo IlRPICV7dmVyc2lvbn1MIiwgMiwKKwkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInZl cnNpb24iLAorCQkJCQkJCQkgInZlcnNpb24iLCBPYmpUeXBlU3RyaW5nLCBkZWZHZXRTdHJpbmco b3B0KSk7CisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsK KwkJfQorCQllbHNlCisJCQllbG9nKEVSUk9SLCAidW5zdXBwb3J0ZWQgb3B0aW9uICVzIiwgb3B0 LT5kZWZuYW1lKTsKKwl9CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHN0bXQsICIle29wdGlvbnM6 IH1zIiwgbGlzdCk7CisKKwl0YWJsZV9jbG9zZShwZ19leHRlbnNpb24sIEFjY2Vzc1NoYXJlTG9j ayk7CisKKwlyZXR1cm4gc3RtdDsKK30KKworLyoKKyAqIEFMVEVSIEVYVEVOU0lPTiBleHQgQURE L0RST1Agb2JqZWN0CisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJFeHRlbnNp b25Db250ZW50c1N0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUsCisJCQkJCQkJCSAg IE9iamVjdEFkZHJlc3Mgb2JqZWN0QWRkcmVzcykKK3sKKwlBbHRlckV4dGVuc2lvbkNvbnRlbnRz U3RtdCAqbm9kZSA9IChBbHRlckV4dGVuc2lvbkNvbnRlbnRzU3RtdCAqKSBwYXJzZXRyZWU7CisJ T2JqVHJlZQkgICAqc3RtdDsKKwljaGFyCSAgICpmbXQ7CisKKwlBc3NlcnQobm9kZS0+YWN0aW9u ID09ICsxIHx8IG5vZGUtPmFjdGlvbiA9PSAtMSk7CisKKwlmbXQgPSBwc3ByaW50ZigiQUxURVIg RVhURU5TSU9OICUle2V4dGlkZW50aXR5fUkgJXMgJXMgJSV7b2JqaWRlbnRpdHl9cyIsCisJCQkJ ICAgbm9kZS0+YWN0aW9uID09ICsxID8gIkFERCIgOiAiRFJPUCIsCisJCQkJICAgc3RyaW5naWZ5 X29ianR5cGUobm9kZS0+b2JqdHlwZSkpOworCisJc3RtdCA9IG5ld19vYmp0cmVlX1ZBKGZtdCwg MiwgImV4dGlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSAgbm9kZS0+ZXh0bmFtZSwK KwkJCQkJCSAgIm9iamlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSAgZ2V0T2JqZWN0 SWRlbnRpdHkoJm9iamVjdEFkZHJlc3MsIGZhbHNlKSk7CisKKwlyZXR1cm4gc3RtdDsKK30KKy8q CisgKiBEZXBhcnNlIGFuIENyZWF0ZUNhc3RTdG10LgorICoKKyAqIEdpdmVuIGEgc2VxdWVuY2Ug T0lEIGFuZCBhIHBhcnNldHJlZSB0aGF0IG1vZGlmaWVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQor ICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJl ZSAqCitkZXBhcnNlX0NyZWF0ZUNhc3RTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVl KQoreworCUNyZWF0ZUNhc3RTdG10ICpub2RlID0gKENyZWF0ZUNhc3RTdG10ICopIHBhcnNldHJl ZTsKKwlSZWxhdGlvbgljYXN0cmVsOworCUhlYXBUdXBsZQljYXN0VHVwOworCUZvcm1fcGdfY2Fz dCBjYXN0Rm9ybTsKKwlPYmpUcmVlCSAgICpjcmVhdGVDYXN0OworCWNoYXIJICAgKmNvbnRleHQ7 CisKKwljYXN0cmVsID0gdGFibGVfb3BlbihDYXN0UmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2Nr KTsKKwljYXN0VHVwID0gZ2V0X2NhdGFsb2dfb2JqZWN0X2J5X29pZChjYXN0cmVsLCBBbnVtX3Bn X2Nhc3Rfb2lkLCBvYmplY3RJZCk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGNhc3RUdXApKQor CQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgY2FzdCB3aXRoIE9JRCAldSIs IG9iamVjdElkKTsKKwljYXN0Rm9ybSA9IChGb3JtX3BnX2Nhc3QpIEdFVFNUUlVDVChjYXN0VHVw KTsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIENSRUFURSBDQVNUICgle3Nv dXJjZXR5cGV9VCBBUyAle3RhcmdldHR5cGV9VCkgJXttZWNoYW5pc219cyAle2NvbnRleHR9cwor CSAqLworCWNyZWF0ZUNhc3QgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIENBU1QgKCV7c291cmNl dHlwZX1UIEFTICV7dGFyZ2V0dHlwZX1UKSIsCisJCQkJCQkJCTIsICJzb3VyY2V0eXBlIiwgT2Jq VHlwZU9iamVjdCwKKwkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3R5cGUoY2FzdEZvcm0tPmNhc3Rz b3VyY2UsIC0xKSwKKwkJCQkJCQkJInRhcmdldHR5cGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJ CQluZXdfb2JqdHJlZV9mb3JfdHlwZShjYXN0Rm9ybS0+Y2FzdHRhcmdldCwgLTEpKTsKKworCWlm IChub2RlLT5pbm91dCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlQ2FzdCwgIiV7bWVj aGFuaXNtfXMiLCAiV0lUSCBJTk9VVCIpOworCWVsc2UgaWYgKG5vZGUtPmZ1bmMgPT0gTlVMTCkK KwkJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlQ2FzdCwgIiV7bWVjaGFuaXNtfXMiLCAiV0lU SE9VVCBGVU5DVElPTiIpOworCWVsc2UKKwl7CisJCU9ialRyZWUJICAgKnRtcG9iajsKKwkJU3Ry aW5nSW5mb0RhdGEgZnVuYzsKKwkJSGVhcFR1cGxlCWZ1bmNUdXA7CisJCUZvcm1fcGdfcHJvYyBm dW5jRm9ybTsKKwkJaW50CQkJaTsKKworCQlmdW5jVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBST0NP SUQsIGNhc3RGb3JtLT5jYXN0ZnVuYyk7CisJCWZ1bmNGb3JtID0gKEZvcm1fcGdfcHJvYykgR0VU U1RSVUNUKGZ1bmNUdXApOworCisJCWluaXRTdHJpbmdJbmZvKCZmdW5jKTsKKwkJYXBwZW5kU3Ry aW5nSW5mbygmZnVuYywgIiVzKCIsCisJCQkJCQlxdW90ZV9xdWFsaWZpZWRfaWRlbnRpZmllcihn ZXRfbmFtZXNwYWNlX25hbWUoZnVuY0Zvcm0tPnByb25hbWVzcGFjZSksCisJCQkJCQkJCQkJCQkg ICBOYW1lU3RyKGZ1bmNGb3JtLT5wcm9uYW1lKSkpOworCQlmb3IgKGkgPSAwOyBpIDwgZnVuY0Zv cm0tPnByb25hcmdzOyBpKyspCisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZmdW5jLAorCQkJ CQkJCQkgICBmb3JtYXRfdHlwZV9iZV9xdWFsaWZpZWQoZnVuY0Zvcm0tPnByb2FyZ3R5cGVzLnZh bHVlc1tpXSkpOworCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmZnVuYywgJyknKTsKKworCQl0bXBv YmogPSBuZXdfb2JqdHJlZV9WQSgiV0lUSCBGVU5DVElPTiAle2Nhc3RmdW5jdGlvbn1zIiwgMSwK KwkJCQkJCQkgImNhc3RmdW5jdGlvbiIsIE9ialR5cGVTdHJpbmcsIGZ1bmMuZGF0YSk7CisJCWFw cGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZUNhc3QsICIle21lY2hhbmlzbX1zIiwgdG1wb2JqKTsK KworCQlSZWxlYXNlU3lzQ2FjaGUoZnVuY1R1cCk7CisJfQorCisJc3dpdGNoIChub2RlLT5jb250 ZXh0KQorCXsKKwkJY2FzZSBDT0VSQ0lPTl9JTVBMSUNJVDoKKwkJCWNvbnRleHQgPSAiQVMgSU1Q TElDSVQiOworCQkJYnJlYWs7CisJCWNhc2UgQ09FUkNJT05fQVNTSUdOTUVOVDoKKwkJCWNvbnRl eHQgPSAiQVMgQVNTSUdOTUVOVCI7CisJCQlicmVhazsKKwkJY2FzZSBDT0VSQ0lPTl9FWFBMSUNJ VDoKKwkJCWNvbnRleHQgPSAiIjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJP UiwgImludmFsaWQgY29lcmNpb24gY29kZSAlYyIsIG5vZGUtPmNvbnRleHQpOworCQkJcmV0dXJu IE5VTEw7CS8qIGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KKwl9CisJYXBwZW5kX3N0cmluZ19vYmpl Y3QoY3JlYXRlQ2FzdCwgIiV7Y29udGV4dH1zIiwgY29udGV4dCk7CisKKwl0YWJsZV9jbG9zZShj YXN0cmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJuIGNyZWF0ZUNhc3Q7Cit9CisKKy8q CisgKiBEZXBhcnNlIGFsbCB0aGUgY29sbGVjdGVkIHN1YmNvbW1hbmRzIGFuZCByZXR1cm4gYW4g T2JqVHJlZSByZXByZXNlbnRpbmcgdGhlCisgKiBhbHRlciBjb21tYW5kLgorICovCitzdGF0aWMg T2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyVGFibGVTdG10KENvbGxlY3RlZENvbW1hbmQgKmNtZCkK K3sKKwlPYmpUcmVlCSAgICphbHRlclRhYmxlU3RtdDsKKwlPYmpUcmVlCSAgICp0bXBvYmo7CisJ T2JqVHJlZQkgICAqdG1wb2JqMjsKKwlMaXN0CSAgICpkcGNvbnRleHQ7CisJUmVsYXRpb24JcmVs OworCUxpc3QJICAgKnN1YmNtZHMgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKwljaGFyCSAg ICpmbXRzdHI7CisJY29uc3QgY2hhciAqcmVsdHlwZTsKKwlib29sCQlpc3R5cGUgPSBmYWxzZTsK KwlMaXN0CSAgICpleHBycyA9IE5JTDsKKworCUFzc2VydChjbWQtPnR5cGUgPT0gU0NUX0FsdGVy VGFibGUpOworCisJcmVsID0gcmVsYXRpb25fb3BlbihjbWQtPmQuYWx0ZXJUYWJsZS5vYmplY3RJ ZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlkcGNvbnRleHQgPSBkZXBhcnNlX2NvbnRleHRfZm9yKFJl bGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCksCisJCQkJCQkJCQljbWQtPmQuYWx0ZXJUYWJsZS5v YmplY3RJZCk7CisKKwlzd2l0Y2ggKHJlbC0+cmRfcmVsLT5yZWxraW5kKQorCXsKKwkJY2FzZSBS RUxLSU5EX1JFTEFUSU9OOgorCQljYXNlIFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEU6CisJCQly ZWx0eXBlID0gIlRBQkxFIjsKKwkJCWJyZWFrOworCQljYXNlIFJFTEtJTkRfSU5ERVg6CisJCWNh c2UgUkVMS0lORF9QQVJUSVRJT05FRF9JTkRFWDoKKwkJCXJlbHR5cGUgPSAiSU5ERVgiOworCQkJ YnJlYWs7CisJCWNhc2UgUkVMS0lORF9WSUVXOgorCQkJcmVsdHlwZSA9ICJWSUVXIjsKKwkJCWJy ZWFrOworCQljYXNlIFJFTEtJTkRfQ09NUE9TSVRFX1RZUEU6CisJCQlyZWx0eXBlID0gIlRZUEUi OworCQkJaXN0eXBlID0gdHJ1ZTsKKwkJCWJyZWFrOworCQljYXNlIFJFTEtJTkRfRk9SRUlHTl9U QUJMRToKKwkJCXJlbHR5cGUgPSAiRk9SRUlHTiBUQUJMRSI7CisJCQlicmVhazsKKworCQkvKiBU T0RPIHN1cHBvcnQgZm9yIHBhcnRpdGlvbmVkIHRhYmxlICovCisKKwkJZGVmYXVsdDoKKwkJCWVs b2coRVJST1IsICJ1bmV4cGVjdGVkIHJlbGtpbmQgJWQiLCByZWwtPnJkX3JlbC0+cmVsa2luZCk7 CisJfQorCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICogQUxURVIgcmVsdHlwZSAl e2lkZW50aXR5fUQgJXtzdWJjbWRzOiwgfXMKKwkgKi8KKwlmbXRzdHIgPSBwc3ByaW50ZigiQUxU RVIgJXMiLCByZWx0eXBlKTsKKwlhbHRlclRhYmxlU3RtdCA9IG5ld19vYmp0cmVlKGZtdHN0cik7 CisKKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUocmVsLT5yZF9yZWwtPnJlbG5h bWVzcGFjZSwKKwkJCQkJCQkJICAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSk7CisJYXBw ZW5kX29iamVjdF9vYmplY3QoYWx0ZXJUYWJsZVN0bXQsICIle2lkZW50aXR5fUQiLCB0bXBvYmop OworCisJZm9yZWFjaChjZWxsLCBjbWQtPmQuYWx0ZXJUYWJsZS5zdWJjbWRzKQorCXsKKwkJQ29s bGVjdGVkQVRTdWJjbWQgKnN1YiA9IChDb2xsZWN0ZWRBVFN1YmNtZCAqKSBsZmlyc3QoY2VsbCk7 CisJCUFsdGVyVGFibGVDbWQJKnN1YmNtZCA9IChBbHRlclRhYmxlQ21kICopIHN1Yi0+cGFyc2V0 cmVlOworCQlPYmpUcmVlCSAgICp0cmVlOworCisJCUFzc2VydChJc0Eoc3ViY21kLCBBbHRlclRh YmxlQ21kKSk7CisKKwkJc3dpdGNoIChzdWJjbWQtPnN1YnR5cGUpCisJCXsKKwkJCWNhc2UgQVRf QWRkQ29sdW1uOgorCQkJY2FzZSBBVF9BZGRDb2x1bW5SZWN1cnNlOgorCQkJCS8qIFhYWCBuZWVk IHRvIHNldCB0aGUgInJlY3Vyc2UiIGJpdCBzb21ld2hlcmU/ICovCisJCQkJQXNzZXJ0KElzQShz dWJjbWQtPmRlZiwgQ29sdW1uRGVmKSk7CisJCQkJdHJlZSA9IGRlcGFyc2VfQ29sdW1uRGVmKHJl bCwgZHBjb250ZXh0LCBmYWxzZSwKKwkJCQkJCQkJCQkgKENvbHVtbkRlZiAqKSBzdWJjbWQtPmRl ZiwgdHJ1ZSwgJmV4cHJzKTsKKwkJCQlmbXRzdHIgPSBwc3ByaW50ZigiQUREICVzICUle2RlZmlu aXRpb259cyIsCisJCQkJCQkJCSAgaXN0eXBlID8gIkFUVFJJQlVURSIgOiAiQ09MVU1OIik7CisJ CQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoZm10c3RyLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwg T2JqVHlwZVN0cmluZywgImFkZCBjb2x1bW4iLAorCQkJCQkJCQkJICJkZWZpbml0aW9uIiwgT2Jq VHlwZU9iamVjdCwgdHJlZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29i amVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQWRkSW5kZXhD b25zdHJhaW50OgorCQkJCXsKKwkJCQkJSW5kZXhTdG10ICAqaXN0bXQ7CisJCQkJCVJlbGF0aW9u CWlkeDsKKwkJCQkJT2lkCQkJY29uc3RyT2lkID0gc3ViLT5hZGRyZXNzLm9iamVjdElkOworCisJ CQkJCUFzc2VydChJc0Eoc3ViY21kLT5kZWYsIEluZGV4U3RtdCkpOworCQkJCQlpc3RtdCA9IChJ bmRleFN0bXQgKikgc3ViY21kLT5kZWY7CisKKwkJCQkJQXNzZXJ0KGlzdG10LT5pc2NvbnN0cmFp bnQgJiYgaXN0bXQtPnVuaXF1ZSk7CisKKwkJCQkJaWR4ID0gcmVsYXRpb25fb3Blbihpc3RtdC0+ aW5kZXhPaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkJCQkJLyoKKwkJCQkJICogVmVyYm9zZSBz eW50YXgKKwkJCQkJICoKKwkJCQkJICogQUREIENPTlNUUkFJTlQgJXtuYW1lfUkgJXtjb25zdHJh aW50X3R5cGV9cyBVU0lORyBJTkRFWAorCQkJCQkgKiAlaW5kZXhfbmFtZX1JICV7ZGVmZXJyYWJs ZX1zICV7aW5pdF9kZWZlcnJlZH1zCisJCQkJCSAqLworCQkJCQl0bXBvYmogPSBuZXdfb2JqdHJl ZV9WQSgiQUREIENPTlNUUkFJTlQgJXtuYW1lfUkiLCAyLAorCQkJCQkJCQkJCSAidHlwZSIsIE9i alR5cGVTdHJpbmcsICJhZGQgY29uc3RyYWludCB1c2luZyBpbmRleCIsCisJCQkJCQkJCQkJICJu YW1lIiwgT2JqVHlwZVN0cmluZywgZ2V0X2NvbnN0cmFpbnRfbmFtZShjb25zdHJPaWQpKTsKKwor CQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle2NvbnN0cmFpbnRfdHlwZX1zIiwg aXN0bXQtPmRlZmVycmFibGUgPworCQkJCQkJCQkJCSAiREVGRVJSQUJMRSIgOiAiTk9UIERFRkVS UkFCTEUiKTsKKwkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiVVNJTkcgSU5ERVgg JXtpbmRleF9uYW1lfUkiLAorCQkJCQkJCQkJCSBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShpZHgp KTsKKwkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtkZWZlcnJhYmxlfXMiLCBp c3RtdC0+ZGVmZXJyYWJsZSA/CisJCQkJCQkJCQkJICJERUZFUlJBQkxFIiA6ICJOT1QgREVGRVJS QUJMRSIpOworCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle2luaXRfZGVmZXJy ZWR9cyIsIGlzdG10LT5pbml0ZGVmZXJyZWQgPworCQkJCQkJCQkJCSAiSU5JVElBTExZIERFRkVS UkVEIiA6ICJJTklUSUFMTFkgSU1NRURJQVRFIik7CisKKwkJCQkJc3ViY21kcyA9IGxhcHBlbmQo c3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisKKwkJCQkJcmVsYXRpb25fY2xv c2UoaWR4LCBBY2Nlc3NTaGFyZUxvY2spOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJY2FzZSBB VF9SZUFkZEluZGV4OgorCQkJY2FzZSBBVF9SZUFkZENvbnN0cmFpbnQ6CisJCQljYXNlIEFUX1Jl QWRkQ29tbWVudDoKKwkJCWNhc2UgQVRfUmVwbGFjZVJlbE9wdGlvbnM6CisJCQkJLyogU3VidHlw ZXMgdXNlZCBmb3IgaW50ZXJuYWwgb3BlcmF0aW9uczsgbm90aGluZyB0byBkbyBoZXJlICovCisJ CQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQWRkQ29sdW1uVG9WaWV3OgorCQkJCS8qIENSRUFURSBP UiBSRVBMQUNFIFZJRVcgLS0gbm90aGluZyB0byBkbyBoZXJlICovCisJCQkJYnJlYWs7CisKKwkJ CWNhc2UgQVRfQ29sdW1uRGVmYXVsdDoKKwkJCQlpZiAoc3ViY21kLT5kZWYgPT0gTlVMTCkKKwkJ CQl7CisJCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59 SSBEUk9QIERFRkFVTFQiLCAyLAorCQkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJk cm9wIGRlZmF1bHQiLAorCQkJCQkJCQkJCSAiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21k LT5uYW1lKTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJTGlzdAkgICAqZHBjb250ZXh0 OworCQkJCQlIZWFwVHVwbGUJYXR0cnR1cDsKKwkJCQkJQXR0ck51bWJlcglhdHRubzsKKworCQkJ CQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgU0VUIERF RkFVTFQiLCAyLAorCQkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgZGVmYXVs dCIsCisJCQkJCQkJCQkJICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOwor CisJCQkJCWRwY29udGV4dCA9IGRlcGFyc2VfY29udGV4dF9mb3IoUmVsYXRpb25HZXRSZWxhdGlv bk5hbWUocmVsKSwKKwkJCQkJCQkJCQkJCQlSZWxhdGlvbkdldFJlbGlkKHJlbCkpOworCQkJCQlh dHRydHVwID0gU2VhcmNoU3lzQ2FjaGVBdHROYW1lKFJlbGF0aW9uR2V0UmVsaWQocmVsKSwgc3Vi Y21kLT5uYW1lKTsKKwkJCQkJYXR0bm8gPSAoKEZvcm1fcGdfYXR0cmlidXRlKSBHRVRTVFJVQ1Qo YXR0cnR1cCkpLT5hdHRudW07CisJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7 ZGVmaW5pdGlvbn1zIiwKKwkJCQkJCQkJCQkgUmVsYXRpb25HZXRDb2x1bW5EZWZhdWx0KHJlbCwg YXR0bm8sIGRwY29udGV4dCwgTlVMTCkpOworCQkJCQlSZWxlYXNlU3lzQ2FjaGUoYXR0cnR1cCk7 CisJCQkJfQorCisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmpl Y3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRHJvcE5vdE51bGw6CisJCQkJ dG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIERST1AgTk9U IE5VTEwiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRyb3Agbm90IG51 bGwiLAorCQkJCQkJCQkJICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOwor CQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikp OworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1NldE5vdE51bGw6CisJCQkJdG1wb2JqID0gbmV3 X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIFNFVCBOT1QgTlVMTCIsIDIsCisJ CQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IG5vdCBudWxsIiwKKwkJCQkJCQkJ CSAiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0g bGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsK KworCQkJY2FzZSBBVF9Ecm9wRXhwcmVzc2lvbjoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9W QSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgRFJPUCBFWFBSRVNTSU9OIiwgMiwKKwkJCQkJCQkJ CSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkcm9wIGV4cHJlc3Npb24iLAorCQkJCQkJCQkJICJj b2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCWFwcGVuZF9zdHJpbmdf b2JqZWN0KHRtcG9iaiwgIiV7aWZfbm90X2V4aXN0c31zIiwKKwkJCQkJCQkJCSBzdWJjbWQtPm1p c3Npbmdfb2sgPyAiSUYgRVhJU1RTIjogIiIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNt ZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFU X1NldFN0YXRpc3RpY3M6CisJCQkJeworCQkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVmLCBJbnRl Z2VyKSk7CisJCQkJCWlmIChzdWJjbWQtPm5hbWUpCisJCQkJCQl0bXBvYmogPSBuZXdfb2JqdHJl ZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgU0VUIFNUQVRJU1RJQ1MgJXtzdGF0aXN0aWNz fW4iLAorCQkJCQkJCQkJCQkgMywKKwkJCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywg InNldCBzdGF0aXN0aWNzIiwKKwkJCQkJCQkJCQkJICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBz dWJjbWQtPm5hbWUsCisJCQkJCQkJCQkJCSAic3RhdGlzdGljcyIsIE9ialR5cGVJbnRlZ2VyLAor CQkJCQkJCQkJCQkgaW50VmFsKChJbnRlZ2VyICopIHN1YmNtZC0+ZGVmKSk7CisJCQkJCWVsc2UK KwkJCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59biBT RVQgU1RBVElTVElDUyAle3N0YXRpc3RpY3N9biIsCisJCQkJCQkJCQkJCSAzLAorCQkJCQkJCQkJ CQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IHN0YXRpc3RpY3MiLAorCQkJCQkJCQkJCQkg ImNvbHVtbiIsIE9ialR5cGVJbnRlZ2VyLCBzdWJjbWQtPm51bSwKKwkJCQkJCQkJCQkJICJzdGF0 aXN0aWNzIiwgT2JqVHlwZUludGVnZXIsCisJCQkJCQkJCQkJCSBpbnRWYWwoKEludGVnZXIgKikg c3ViY21kLT5kZWYpKTsKKwkJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVj dF9vYmplY3QodG1wb2JqKSk7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1NldE9w dGlvbnM6CisJCQljYXNlIEFUX1Jlc2V0T3B0aW9uczoKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChz dWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCgKKwkJCQkJCQkJCSAgZGVwYXJzZV9Db2x1bW5TZXRP cHRpb25zKHN1YmNtZCkpKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9TZXRTdG9yYWdlOgor CQkJCUFzc2VydChJc0Eoc3ViY21kLT5kZWYsIFN0cmluZykpOworCQkJCXRtcG9iaiA9IG5ld19v Ymp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBTRVQgU1RPUkFHRSAle3N0b3JhZ2V9 cyIsIDMsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IHN0b3JhZ2UiLAor CQkJCQkJCQkJICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUsCisJCQkJCQkJ CQkgInN0b3JhZ2UiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJIHN0clZhbCgoU3RyaW5nICop IHN1YmNtZC0+ZGVmKSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVj dF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfU2V0Q29tcHJlc3Np b246CisJCQkJQXNzZXJ0KElzQShzdWJjbWQtPmRlZiwgU3RyaW5nKSk7CisJCQkJdG1wb2JqID0g bmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIFNFVCBDT01QUkVTU0lPTiAl e2NvbXByZXNzaW9uX21ldGhvZH1zIiwKKwkJCQkJCQkJCSAzLAorCQkJCQkJCQkJICJ0eXBlIiwg T2JqVHlwZVN0cmluZywgInNldCBjb21wcmVzc2lvbiIsCisJCQkJCQkJCQkgImNvbHVtbiIsIE9i alR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSwKKwkJCQkJCQkJCSAiY29tcHJlc3Npb25fbWV0aG9k IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCSBzdHJWYWwoKFN0cmluZyAqKSBzdWJjbWQtPmRl ZikpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRt cG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Ryb3BDb2x1bW5SZWN1cnNlOgorCQkJ Y2FzZSBBVF9Ecm9wQ29sdW1uOgorCQkJCWZtdHN0ciA9IHBzcHJpbnRmKCJEUk9QICVzICUle2Nv bHVtbn1JIiwKKwkJCQkJCQkJICBpc3R5cGUgPyAiQVRUUklCVVRFIiA6ICJDT0xVTU4iKTsKKwkJ CQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQShmbXRzdHIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBP YmpUeXBlU3RyaW5nLCAiZHJvcCBjb2x1bW4iLAorCQkJCQkJCQkJICJjb2x1bW4iLCBPYmpUeXBl U3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXRtcG9iajIgPSBuZXdfb2JqdHJlZV9WQSgiQ0FT Q0FERSIsIDEsCisJCQkJCQkJCQkgICJwcmVzZW50IiwgT2JqVHlwZUJvb2wsIHN1YmNtZC0+YmVo YXZpb3IpOworCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7Y2FzY2FkZX1zIiwg dG1wb2JqMik7CisKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29i amVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9BZGRJbmRleDoKKwkJCQl7 CisJCQkJCU9pZAkJCWlkeE9pZCA9IHN1Yi0+YWRkcmVzcy5vYmplY3RJZDsKKwkJCQkJSW5kZXhT dG10ICAqaXN0bXQ7CisJCQkJCVJlbGF0aW9uCWlkeDsKKwkJCQkJY29uc3QgY2hhciAqaWR4bmFt ZTsKKwkJCQkJT2lkCQkJY29uc3RyT2lkOworCisJCQkJCUFzc2VydChJc0Eoc3ViY21kLT5kZWYs IEluZGV4U3RtdCkpOworCQkJCQlpc3RtdCA9IChJbmRleFN0bXQgKikgc3ViY21kLT5kZWY7CisK KwkJCQkJaWYgKCFpc3RtdC0+aXNjb25zdHJhaW50KQorCQkJCQkJYnJlYWs7CisKKwkJCQkJaWR4 ID0gcmVsYXRpb25fb3BlbihpZHhPaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQkJCWlkeG5hbWUg PSBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShpZHgpOworCisJCQkJCWNvbnN0ck9pZCA9IGdldF9y ZWxhdGlvbl9jb25zdHJhaW50X29pZCgKKwkJCQkJCWNtZC0+ZC5hbHRlclRhYmxlLm9iamVjdElk LCBpZHhuYW1lLCBmYWxzZSk7CisKKwkJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkFERCBD T05TVFJBSU5UICV7bmFtZX1JICV7ZGVmaW5pdGlvbn1zIiwgMywKKwkJCQkJCQkJCQkgInR5cGUi LCBPYmpUeXBlU3RyaW5nLCAiYWRkIGNvbnN0cmFpbnQiLAorCQkJCQkJCQkJCSAibmFtZSIsIE9i alR5cGVTdHJpbmcsIGlkeG5hbWUsCisJCQkJCQkJCQkJICJkZWZpbml0aW9uIiwgT2JqVHlwZVN0 cmluZywKKwkJCQkJCQkJCQkgcGdfZ2V0X2NvbnN0cmFpbnRkZWZfY29tbWFuZF9zaW1wbGUoY29u c3RyT2lkKSk7CisJCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcG9iaikpOworCisJCQkJCXJlbGF0aW9uX2Nsb3NlKGlkeCwgQWNjZXNzU2hhcmVMb2Nr KTsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQWRkQ29uc3RyYWludDoKKwkJCWNh c2UgQVRfQWRkQ29uc3RyYWludFJlY3Vyc2U6CisJCQkJeworCQkJCQkvKiBYWFggbmVlZCB0byBz ZXQgdGhlICJyZWN1cnNlIiBiaXQgc29tZXdoZXJlPyAqLworCQkJCQlPaWQJCQljb25zdHJPaWQg PSBzdWItPmFkZHJlc3Mub2JqZWN0SWQ7CisJCQkJCWJvb2wJCWlzbnVsbDsKKwkJCQkJSGVhcFR1 cGxlCXR1cDsKKwkJCQkJRGF0dW0JCXZhbDsKKwkJCQkJQ29uc3RyYWludCAqY29uc3RyOworCisJ CQkJCUFzc2VydChJc0Eoc3ViY21kLT5kZWYsIENvbnN0cmFpbnQpKTsKKwkJCQkJY29uc3RyID0g IGNhc3ROb2RlKENvbnN0cmFpbnQsIHN1YmNtZC0+ZGVmKTsKKworCQkJCQlpZiAoIWNvbnN0ci0+ c2tpcF92YWxpZGF0aW9uKQorCQkJCQl7CisJCQkJCQl0dXAgPSBTZWFyY2hTeXNDYWNoZTEoQ09O U1RST0lELCBPYmplY3RJZEdldERhdHVtKGNvbnN0ck9pZCkpOworCisJCQkJCQlpZiAoSGVhcFR1 cGxlSXNWYWxpZCh0dXApKQorCQkJCQkJeworCQkJCQkJCWNoYXIJICAgKmNvbmJpbjsKKworCQkJ CQkJCS8qIEZldGNoIGNvbnN0cmFpbnQgZXhwcmVzc2lvbiBpbiBwYXJzZXRyZWUgZm9ybSAqLwor CQkJCQkJCXZhbCA9IFN5c0NhY2hlR2V0QXR0cihDT05TVFJPSUQsIHR1cCwKKwkJCQkJCQkJCQkJ CSAgQW51bV9wZ19jb25zdHJhaW50X2NvbmJpbiwgJmlzbnVsbCk7CisKKwkJCQkJCQlpZiAoIWlz bnVsbCkKKwkJCQkJCQl7CisJCQkJCQkJCWNvbmJpbiA9IFRleHREYXR1bUdldENTdHJpbmcodmFs KTsKKwkJCQkJCQkJZXhwcnMgPSBsYXBwZW5kKGV4cHJzLCBzdHJpbmdUb05vZGUoY29uYmluKSk7 CisJCQkJCQkJfQorCisJCQkJCQkJUmVsZWFzZVN5c0NhY2hlKHR1cCk7CisJCQkJCQl9CisJCQkJ CX0KKworCQkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQUREIENPTlNUUkFJTlQgJXtuYW1l fUkgJXtkZWZpbml0aW9ufXMiLCAzLAorCQkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcs ICJhZGQgY29uc3RyYWludCIsCisJCQkJCQkJCQkJICJuYW1lIiwgT2JqVHlwZVN0cmluZywgZ2V0 X2NvbnN0cmFpbnRfbmFtZShjb25zdHJPaWQpLAorCQkJCQkJCQkJCSAiZGVmaW5pdGlvbiIsIE9i alR5cGVTdHJpbmcsCisJCQkJCQkJCQkJIHBnX2dldF9jb25zdHJhaW50ZGVmX2NvbW1hbmRfc2lt cGxlKGNvbnN0ck9pZCkpOworCQkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2Jq ZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQWx0 ZXJDb25zdHJhaW50OgorCQkJCXsKKwkJCQkJT2lkCQljb25zdHJPaWQgPSBzdWItPmFkZHJlc3Mu b2JqZWN0SWQ7CisJCQkJCUNvbnN0cmFpbnQgKmMgPSAoQ29uc3RyYWludCAqKSBzdWJjbWQtPmRl ZjsKKworCQkJCQkvKiBJZiBubyBjb25zdHJhaW50IHdhcyBhbHRlcmVkLCBzaWxlbnRseSBza2lw IGl0ICovCisJCQkJCWlmICghT2lkSXNWYWxpZChjb25zdHJPaWQpKQorCQkJCQkJYnJlYWs7CisK KwkJCQkJQXNzZXJ0KElzQShjLCBDb25zdHJhaW50KSk7CisJCQkJCXRtcG9iaiA9IG5ld19vYmp0 cmVlX1ZBKCJBTFRFUiBDT05TVFJBSU5UICV7bmFtZX1JICV7ZGVmZXJyYWJsZX1zICV7aW5pdF9k ZWZlcnJlZH1zIiwKKwkJCQkJCQkJCQkgNCwKKwkJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3Ry aW5nLCAiYWx0ZXIgY29uc3RyYWludCIsCisJCQkJCQkJCQkJICJuYW1lIiwgT2JqVHlwZVN0cmlu ZywgZ2V0X2NvbnN0cmFpbnRfbmFtZShjb25zdHJPaWQpLAorCQkJCQkJCQkJCSAiZGVmZXJyYWJs ZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJIGMtPmRlZmVycmFibGUgPyAiREVGRVJSQUJM RSIgOiAiTk9UIERFRkVSUkFCTEUiLAorCQkJCQkJCQkJCSAiaW5pdF9kZWZlcnJlZCIsIE9ialR5 cGVTdHJpbmcsCisJCQkJCQkJCQkJIGMtPmluaXRkZWZlcnJlZCA/ICJJTklUSUFMTFkgREVGRVJS RUQiIDogIklOSVRJQUxMWSBJTU1FRElBVEUiKTsKKworCQkJCQlzdWJjbWRzID0gbGFwcGVuZChz dWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQl9CisJCQkJYnJlYWs7CisK KwkJCWNhc2UgQVRfVmFsaWRhdGVDb25zdHJhaW50UmVjdXJzZToKKwkJCWNhc2UgQVRfVmFsaWRh dGVDb25zdHJhaW50OgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJWQUxJREFURSBDT05T VFJBSU5UICV7Y29uc3RyYWludH1JIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJp bmcsICJ2YWxpZGF0ZSBjb25zdHJhaW50IiwKKwkJCQkJCQkJCSAiY29uc3RyYWludCIsIE9ialR5 cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywg bmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRHJv cENvbnN0cmFpbnRSZWN1cnNlOgorCQkJY2FzZSBBVF9Ecm9wQ29uc3RyYWludDoKKwkJCQl0bXBv YmogPSBuZXdfb2JqdHJlZV9WQSgiRFJPUCBDT05TVFJBSU5UICV7Y29uc3RyYWludH1JIiwgMiwK KwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkcm9wIGNvbnN0cmFpbnQiLAorCQkJ CQkJCQkJICJjb25zdHJhaW50IiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlz dWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJ CQlicmVhazsKKworCQkJY2FzZSBBVF9BbHRlckNvbHVtblR5cGU6CisJCQkJeworCQkJCQlUdXBs ZURlc2MgdHVwZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IocmVsKTsKKwkJCQkJRm9ybV9wZ19hdHRy aWJ1dGUgYXR0OworCQkJCQlDb2x1bW5EZWYJICAgKmRlZjsKKworCQkJCQlhdHQgPSAmKHR1cGRl c2MtPmF0dHJzW3N1Yi0+YWRkcmVzcy5vYmplY3RTdWJJZCAtIDFdKTsKKwkJCQkJZGVmID0gKENv bHVtbkRlZiAqKSBzdWJjbWQtPmRlZjsKKwkJCQkJQXNzZXJ0KElzQShkZWYsIENvbHVtbkRlZikp OworCisJCQkJCS8qCisJCQkJCSAqIFZlcmJvc2Ugc3ludGF4CisJCQkJCSAqCisJCQkJCSAqIENv bXBvc2l0ZSB0eXBlczogQUxURVIgcmVsdHlwZSAle2NvbHVtbn1JIFNFVCBEQVRBIFRZUEUKKwkJ CQkJICogJXtkYXRhdHlwZX1UICV7Y29sbGF0aW9ufXMgQVRUUklCVVRFICV7Y2FzY2FkZX1zCisJ CQkJCSAqCisJCQkJCSAqIE5vcm1hbCB0eXBlczogQUxURVIgcmVsdHlwZSAle2NvbHVtbn1JIFNF VCBEQVRBIFRZUEUKKwkJCQkJICogJXtkYXRhdHlwZX1UICV7Y29sbGF0aW9ufXMgQ09MVU1OICV7 dXNpbmd9cworCQkJCQkgKi8KKwkJCQkJZm10c3RyID0gcHNwcmludGYoIkFMVEVSICVzICUle2Nv bHVtbn1JIFNFVCBEQVRBIFRZUEUiLAorCQkJCQkJCQkJICBpc3R5cGUgPyAiQVRUUklCVVRFIiA6 ICJDT0xVTU4iKTsKKworCQkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQShmbXRzdHIsIDIsCisJ CQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImFsdGVyIGNvbHVtbiB0eXBlIiwKKwkJ CQkJCQkJCQkgImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJCS8q IEFkZCB0aGUgVFlQRSBjbGF1c2UgKi8KKwkJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2Jq LCAiJXtkYXRhdHlwZX1UIiwKKwkJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUoYXR0LT5h dHR0eXBpZCwKKwkJCQkJCQkJCQkJCQkJCSAgYXR0LT5hdHR0eXBtb2QpKTsKKworCQkJCQkvKiBB ZGQgYSBDT0xMQVRFIGNsYXVzZSwgaWYgbmVlZGVkICovCisJCQkJCXRtcG9iajIgPSBuZXdfb2Jq dHJlZSgiQ09MTEFURSIpOworCQkJCQlpZiAoT2lkSXNWYWxpZChhdHQtPmF0dGNvbGxhdGlvbikp CisJCQkJCXsKKwkJCQkJCU9ialRyZWUgKmNvbGxuYW1lOworCisJCQkJCQljb2xsbmFtZSA9IG5l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChDb2xsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJ CQkJCQkJICAgYXR0LT5hdHRjb2xsYXRpb24pOworCQkJCQkJYXBwZW5kX29iamVjdF9vYmplY3Qo dG1wb2JqMiwgIiV7bmFtZX1EIiwgY29sbG5hbWUpOworCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJ CWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmoyLCAicHJlc2VudCIsIGZhbHNlKTsKKwkJCQkJYXBw ZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtjb2xsYXRpb259cyIsIHRtcG9iajIpOworCisJ CQkJCS8qIElmIG5vdCBhIGNvbXBvc2l0ZSB0eXBlLCBhZGQgdGhlIFVTSU5HIGNsYXVzZSAqLwor CQkJCQlpZiAoIWlzdHlwZSkKKwkJCQkJeworCQkJCQkJLyoKKwkJCQkJCSAqIElmIHRoZXJlJ3Mg YSBVU0lORyBjbGF1c2UsIHRyYW5zZm9ybUFsdGVyVGFibGVTdG10CisJCQkJCQkgKiByYW4gaXQg dGhyb3VnaCB0cmFuc2Zvcm1FeHByIGFuZCBzdG9yZWQgdGhlCisJCQkJCQkgKiByZXN1bHRpbmcg bm9kZSBpbiBjb29rZWRfZGVmYXVsdCwgd2hpY2ggd2UgY2FuIHVzZQorCQkJCQkJICogaGVyZS4K KwkJCQkJCSAqLworCQkJCQkJdG1wb2JqMiA9IG5ld19vYmp0cmVlKCJVU0lORyIpOworCQkJCQkJ aWYgKGRlZi0+cmF3X2RlZmF1bHQpCisJCQkJCQl7CisJCQkJCQkJRGF0dW0JZGVwYXJzZWQ7CisJ CQkJCQkJY2hhciAgICpkZWZleHByOworCisJCQkJCQkJZXhwcnMgPSBsYXBwZW5kKGV4cHJzLCBk ZWYtPmNvb2tlZF9kZWZhdWx0KTsKKwkJCQkJCQlkZWZleHByID0gbm9kZVRvU3RyaW5nKGRlZi0+ Y29va2VkX2RlZmF1bHQpOworCQkJCQkJCWRlcGFyc2VkID0gRGlyZWN0RnVuY3Rpb25DYWxsMihw Z19nZXRfZXhwciwKKwkJCQkJCQkJCQkJCQkJICAgQ1N0cmluZ0dldFRleHREYXR1bShkZWZleHBy KSwKKwkJCQkJCQkJCQkJCQkJICAgUmVsYXRpb25HZXRSZWxpZChyZWwpKTsKKwkJCQkJCQlhcHBl bmRfc3RyaW5nX29iamVjdCh0bXBvYmoyLCAiJXtleHByZXNzaW9ufXMiLAorCQkJCQkJCQkJCQkJ IFRleHREYXR1bUdldENTdHJpbmcoZGVwYXJzZWQpKTsKKwkJCQkJCX0KKwkJCQkJCWVsc2UKKwkJ CQkJCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqMiwgInByZXNlbnQiLCBmYWxzZSk7CisJCQkJ CQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle3VzaW5nfXMiLCB0bXBvYmoyKTsKKwkJ CQkJfQorCisJCQkJCS8qIElmIGl0J3MgYSBjb21wb3NpdGUgdHlwZSwgYWRkIHRoZSBDQVNDQURF IGNsYXVzZSAqLworCQkJCQlpZiAoaXN0eXBlKQorCQkJCQl7CisJCQkJCQl0bXBvYmoyID0gbmV3 X29ianRyZWUoIkNBU0NBREUiKTsKKwkJCQkJCWlmIChzdWJjbWQtPmJlaGF2aW9yICE9IERST1Bf Q0FTQ0FERSkKKwkJCQkJCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqMiwgInByZXNlbnQiLCBm YWxzZSk7CisJCQkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle2Nhc2NhZGV9cyIs IHRtcG9iajIpOworCQkJCQl9CisKKwkJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3 X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJfQorCQkJCWJyZWFrOworCisjaWZkZWYgVE9E T0xJU1QKKwkJCWNhc2UgQVRfQWx0ZXJDb2x1bW5HZW5lcmljT3B0aW9uczoKKwkJCQl0bXBvYmog PSBkZXBhcnNlX0Zkd09wdGlvbnMoKExpc3QgKikgc3ViY21kLT5kZWYsCisJCQkJCQkJCQkJIHN1 YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9v YmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisjZW5kaWYKKwkJCWNhc2UgQVRfQ2hhbmdlT3du ZXI6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIk9XTkVSIFRPICV7b3duZXJ9SSIsIDIs CisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiY2hhbmdlIG93bmVyIiwKKwkJCQkJ CQkJCSAib3duZXIiLCAgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCSBnZXRfcm9sZXNwZWNfbmFt ZShzdWJjbWQtPm5ld293bmVyKSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3 X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQ2x1c3Rl ck9uOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJDTFVTVEVSIE9OICV7aW5kZXh9SSIs IDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiY2x1c3RlciBvbiIsCisJCQkJ CQkJCQkgImluZGV4IiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRz ID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVh azsKKworCQkJY2FzZSBBVF9Ecm9wQ2x1c3RlcjoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9W QSgiU0VUIFdJVEhPVVQgQ0xVU1RFUiIsIDEsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3Ry aW5nLCAic2V0IHdpdGhvdXQgY2x1c3RlciIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNt ZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFU X1NldExvZ2dlZDoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiU0VUIExPR0dFRCIsIDEs CisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IGxvZ2dlZCIpOworCQkJCXN1 YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJ CWJyZWFrOworCisJCQljYXNlIEFUX1NldFVuTG9nZ2VkOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0 cmVlX1ZBKCJTRVQgVU5MT0dHRUQiLCAxLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmlu ZywgInNldCB1bmxvZ2dlZCIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19v YmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Ryb3BPaWRz OgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJTRVQgV0lUSE9VVCBPSURTIiwgMSwKKwkJ CQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgd2l0aG91dCBvaWRzIik7CisJCQkJ c3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJ CQkJYnJlYWs7CisJCQljYXNlIEFUX1NldEFjY2Vzc01ldGhvZDoKKwkJCQl0bXBvYmogPSBuZXdf b2JqdHJlZV9WQSgiU0VUIEFDQ0VTUyBNRVRIT0QgJXthY2Nlc3NfbWV0aG9kfUkiLCAyLAorCQkJ CQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBhY2Nlc3MgbWV0aG9kIiwKKwkJCQkJ CQkJCSAiYWNjZXNzX21ldGhvZCIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJ c3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJ CQkJYnJlYWs7CisJCQljYXNlIEFUX1NldFRhYmxlU3BhY2U6CisJCQkJdG1wb2JqID0gbmV3X29i anRyZWVfVkEoIlNFVCBUQUJMRVNQQUNFICV7dGFibGVzcGFjZX1JIiwgMiwKKwkJCQkJCQkJCSAi dHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgdGFibGVzcGFjZSIsCisJCQkJCQkJCQkgInRhYmxl c3BhY2UiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBw ZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJ CQljYXNlIEFUX1NldFJlbE9wdGlvbnM6CisJCQljYXNlIEFUX1Jlc2V0UmVsT3B0aW9uczoKKwkJ CQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCgKKwkJCQkJCQkJ CSAgZGVwYXJzZV9SZWxTZXRPcHRpb25zKHN1YmNtZCkpKTsKKwkJCQlicmVhazsKKworCQkJY2Fz ZSBBVF9FbmFibGVUcmlnOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgVFJJ R0dFUiAle3RyaWdnZXJ9SSIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAi ZW5hYmxlIHRyaWdnZXIiLAorCQkJCQkJCQkJICJ0cmlnZ2VyIiwgT2JqVHlwZVN0cmluZywgc3Vi Y21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29i amVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFibGVBbHdheXNUcmln OgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgQUxXQVlTIFRSSUdHRVIgJXt0 cmlnZ2VyfUkiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImVuYWJsZSBh bHdheXMgdHJpZ2dlciIsCisJCQkJCQkJCQkgInRyaWdnZXIiLCBPYmpUeXBlU3RyaW5nLCBzdWJj bWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0VuYWJsZVJlcGxpY2FUcmln OgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgUkVQTElDQSBUUklHR0VSICV7 dHJpZ2dlcn1JIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJlbmFibGUg cmVwbGljYSB0cmlnZ2VyIiwKKwkJCQkJCQkJCSAidHJpZ2dlciIsIE9ialR5cGVTdHJpbmcsIHN1 YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9v YmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRGlzYWJsZVRyaWc6CisJ CQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkRJU0FCTEUgVFJJR0dFUiAle3RyaWdnZXJ9SSIs IDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZGlzYWJsZSB0cmlnZ2VyIiwK KwkJCQkJCQkJCSAidHJpZ2dlciIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJ c3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJ CQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRW5hYmxlVHJpZ0FsbDoKKwkJCQl0bXBvYmogPSBuZXdf b2JqdHJlZV9WQSgiRU5BQkxFIFRSSUdHRVIgQUxMIiwgMSwKKwkJCQkJCQkJCSAidHlwZSIsIE9i alR5cGVTdHJpbmcsICJlbmFibGUgdHJpZ2dlciBhbGwiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVu ZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJ Y2FzZSBBVF9EaXNhYmxlVHJpZ0FsbDoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiRElT QUJMRSBUUklHR0VSIEFMTCIsIDEsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAi ZGlzYWJsZSB0cmlnZ2VyIGFsbCIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5l d19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0VuYWJs ZVRyaWdVc2VyOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgVFJJR0dFUiBV U0VSIiwgMSwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJlbmFibGUgdHJpZ2dl ciB1c2VyIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmpl Y3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRGlzYWJsZVRyaWdVc2VyOgor CQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJESVNBQkxFIFRSSUdHRVIgVVNFUiIsIDEsCisJ CQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZGlzYWJsZSB0cmlnZ2VyIHVzZXIiKTsK KwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmop KTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFibGVSdWxlOgorCQkJCXRtcG9iaiA9IG5l d19vYmp0cmVlX1ZBKCJFTkFCTEUgUlVMRSAle3J1bGV9SSIsIDIsCisJCQkJCQkJCQkgInR5cGUi LCBPYmpUeXBlU3RyaW5nLCAiZW5hYmxlIHJ1bGUiLAorCQkJCQkJCQkJICJydWxlIiwgT2JqVHlw ZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBu ZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFi bGVBbHdheXNSdWxlOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgQUxXQVlT IFJVTEUgJXtydWxlfUkiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImVu YWJsZSBhbHdheXMgcnVsZSIsCisJCQkJCQkJCQkgInJ1bGUiLCBPYmpUeXBlU3RyaW5nLCBzdWJj bWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0VuYWJsZVJlcGxpY2FSdWxl OgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgUkVQTElDQSBSVUxFICV7cnVs ZX1JIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJlbmFibGUgcmVwbGlj YSBydWxlIiwKKwkJCQkJCQkJCSAicnVsZSIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7 CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2Jq KSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRGlzYWJsZVJ1bGU6CisJCQkJdG1wb2JqID0g bmV3X29ianRyZWVfVkEoIkRJU0FCTEUgUlVMRSAle3J1bGV9SSIsIDIsCisJCQkJCQkJCQkgInR5 cGUiLCBPYmpUeXBlU3RyaW5nLCAiZGlzYWJsZSBydWxlIiwKKwkJCQkJCQkJCSAicnVsZSIsIE9i alR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21k cywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRf QWRkSW5oZXJpdDoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiSU5IRVJJVCAle3BhcmVu dH1EIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJpbmhlcml0IiwKKwkJ CQkJCQkJCSAicGFyZW50IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9m b3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCSBzdWIt PmFkZHJlc3Mub2JqZWN0SWQpKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdf b2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9Ecm9wSW5o ZXJpdDoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiTk8gSU5IRVJJVCAle3BhcmVudH1E IiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkcm9wIGluaGVyaXQiLAor CQkJCQkJCQkJICJwYXJlbnQiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJIG5ld19vYmp0cmVl X2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJIHN1 Yi0+YWRkcmVzcy5vYmplY3RJZCkpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5l d19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0FkZE9m OgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJPRiAle3R5cGVfb2Z9VCIsIDIsCisJCQkJ CQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiYWRkIG9mIiwKKwkJCQkJCQkJCSAidHlwZV9v ZiIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUoc3ViLT5h ZGRyZXNzLm9iamVjdElkLCAtMSkpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5l d19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Ryb3BP ZjoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiTk9UIE9GIiwgMSwKKwkJCQkJCQkJCSAi dHlwZSIsIE9ialR5cGVTdHJpbmcsICJub3Qgb2YiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChz dWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2Fz ZSBBVF9SZXBsaWNhSWRlbnRpdHk6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIlJFUExJ Q0EgSURFTlRJVFkiLCAxLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInJlcGxp Y2EgaWRlbnRpdHkiKTsKKwkJCQlzd2l0Y2ggKCgoUmVwbGljYUlkZW50aXR5U3RtdCAqKSBzdWJj bWQtPmRlZiktPmlkZW50aXR5X3R5cGUpCisJCQkJeworCQkJCQljYXNlIFJFUExJQ0FfSURFTlRJ VFlfREVGQVVMVDoKKwkJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7aWRlbnR9 cyIsICJERUZBVUxUIik7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBSRVBMSUNBX0lERU5USVRZ X0ZVTEw6CisJCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle2lkZW50fXMiLCAi RlVMTCIpOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgUkVQTElDQV9JREVOVElUWV9OT1RISU5H OgorCQkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtpZGVudH1zIiwgIk5PVEhJ TkciKTsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIFJFUExJQ0FfSURFTlRJVFlfSU5ERVg6CisJ CQkJCQl0bXBvYmoyID0gbmV3X29ianRyZWVfVkEoIlVTSU5HIElOREVYICV7aW5kZXh9SSIsIDEs CisJCQkJCQkJCQkJCSAgImluZGV4IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkJICAoKFJl cGxpY2FJZGVudGl0eVN0bXQgKikgc3ViY21kLT5kZWYpLT5uYW1lKTsKKwkJCQkJCWFwcGVuZF9v YmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7aWRlbnR9cyIsIHRtcG9iajIpOworCQkJCQkJYnJlYWs7 CisJCQkJfQorCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0VuYWJsZVJvd1NlY3VyaXR5Ogor CQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgUk9XIExFVkVMIFNFQ1VSSVRZIiwg MSwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJlbmFibGUgcm93IHNlY3VyaXR5 Iik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1w b2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRGlzYWJsZVJvd1NlY3VyaXR5OgorCQkJ CXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJESVNBQkxFIFJPVyBMRVZFTCBTRUNVUklUWSIsIDEs CisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZGlzYWJsZSByb3cgc2VjdXJpdHki KTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBv YmopKTsKKwkJCQlicmVhazsKKyNpZmRlZiBUT0RPTElTVAorCQkJY2FzZSBBVF9HZW5lcmljT3B0 aW9uczoKKwkJCQl0bXBvYmogPSBkZXBhcnNlX0Zkd09wdGlvbnMoKExpc3QgKikgc3ViY21kLT5k ZWYsIE5VTEwpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworI2VuZGlmCisJCQljYXNlIEFUX0F0dGFjaFBhcnRp dGlvbjoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQVRUQUNIIFBBUlRJVElPTiAle3Bh cnRpdGlvbl9pZGVudGl0eX1EIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcs ICJhdHRhY2ggcGFydGl0aW9uIiwKKwkJCQkJCQkJCSAicGFydGl0aW9uX2lkZW50aXR5IiwgT2Jq VHlwZU9iamVjdCwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRp b25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCSBzdWItPmFkZHJlc3Mub2JqZWN0SWQpKTsK KworCQkJCWlmIChyZWwtPnJkX3JlbC0+cmVsa2luZCA9PSBSRUxLSU5EX1BBUlRJVElPTkVEX1RB QkxFKQorCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle3BhcnRpdGlvbl9ib3Vu ZH1zIiwKKwkJCQkJCQkJCQkgUmVsYXRpb25HZXRQYXJ0aXRpb25Cb3VuZChzdWItPmFkZHJlc3Mu b2JqZWN0SWQpKTsKKworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rf b2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCQkJY2FzZSBBVF9EZXRhY2hQYXJ0aXRpb246 CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkRFVEFDSCBQQVJUSVRJT04gJXtwYXJ0aXRp b25faWRlbnRpdHl9RCIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZGV0 YWNoIHBhcnRpdGlvbiIsCisJCQkJCQkJCQkgInBhcnRpdGlvbl9pZGVudGl0eSIsIE9ialR5cGVP YmplY3QsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVs YXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkgc3ViLT5hZGRyZXNzLm9iamVjdElkKSk7CisJCQkJ c3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJ CQkJYnJlYWs7CisJCQljYXNlIEFUX0RldGFjaFBhcnRpdGlvbkZpbmFsaXplOgorCQkJCXRtcG9i aiA9IG5ld19vYmp0cmVlX1ZBKCJERVRBQ0ggUEFSVElUSU9OICV7cGFydGl0aW9uX2lkZW50aXR5 fUQgRklOQUxJWkUiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRldGFj aCBwYXJ0aXRpb24gZmluYWxpemUiLAorCQkJCQkJCQkJICJwYXJ0aXRpb25faWRlbnRpdHkiLCBP YmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxh dGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJIHN1Yi0+YWRkcmVzcy5vYmplY3RJZCkp OworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9i aikpOworCQkJCWJyZWFrOworCQkJY2FzZSBBVF9BZGRJZGVudGl0eToKKwkJCQl7CisJCQkJCUF0 dHJOdW1iZXIJYXR0bnVtOworCQkJCQlPaWQJCQlzZXFfcmVsaWQ7CisJCQkJCU9ialRyZWUJKnNl cWRlZjsKKwkJCQkJQ29sdW1uRGVmICAqY29sZGVmID0gKENvbHVtbkRlZiAqKSBzdWJjbWQtPmRl ZjsKKworCQkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1u fUkgQUREICV7aWRlbnRpdHlfY29sdW1ufXMiLCAyLAorCQkJCQkJCQkJCSAidHlwZSIsIE9ialR5 cGVTdHJpbmcsICJhZGQgaWRlbnRpdHkiLAorCQkJCQkJCQkJCSAiY29sdW1uIiwgT2JqVHlwZVN0 cmluZywgc3ViY21kLT5uYW1lKTsKKworCQkJCQlhdHRudW0gPSBnZXRfYXR0bnVtKFJlbGF0aW9u R2V0UmVsaWQocmVsKSwgc3ViY21kLT5uYW1lKTsKKwkJCQkJc2VxX3JlbGlkID0gZ2V0SWRlbnRp dHlTZXF1ZW5jZShSZWxhdGlvbkdldFJlbGlkKHJlbCksIGF0dG51bSwgdHJ1ZSk7CisJCQkJCXNl cWRlZiA9IGRlcGFyc2VfQ29sdW1uSWRlbnRpdHkoc2VxX3JlbGlkLCBjb2xkZWYtPmlkZW50aXR5 LCBmYWxzZSk7CisKKwkJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiaWRlbnRpdHlf Y29sdW1uIiwgc2VxZGVmKTsKKworCQkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdf b2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIEFUX1Nl dElkZW50aXR5OgorCQkJCXsKKwkJCQkJRGVmRWxlbQkqZGVmZWw7CisJCQkJCWNoYXIJCWlkZW50 aXR5ID0gMDsKKwkJCQkJT2JqVHJlZQkgICAqc2VxZGVmOworCQkJCQlBdHRyTnVtYmVyCWF0dG51 bTsKKwkJCQkJT2lkCQkJc2VxX3JlbGlkOworCisKKwkJCQkJdG1wb2JqID0gbmV3X29ianRyZWVf VkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIiwgMiwKKwkJCQkJCQkJCQkgInR5cGUiLCBPYmpU eXBlU3RyaW5nLCAic2V0IGlkZW50aXR5IiwKKwkJCQkJCQkJCQkgImNvbHVtbiIsIE9ialR5cGVT dHJpbmcsIHN1YmNtZC0+bmFtZSk7CisKKwkJCQkJaWYgKHN1YmNtZC0+ZGVmKQorCQkJCQl7CisJ CQkJCQlMaXN0CSAgICpkZWYgPSAoTGlzdCAqKSBzdWJjbWQtPmRlZjsKKworCQkJCQkJQXNzZXJ0 KElzQShzdWJjbWQtPmRlZiwgTGlzdCkpOworCisJCQkJCQlkZWZlbCA9IGxpbml0aWFsX25vZGUo RGVmRWxlbSwgZGVmKTsKKwkJCQkJCWlkZW50aXR5ID0gZGVmR2V0SW50MzIoZGVmZWwpOworCQkJ CQl9CisKKwkJCQkJYXR0bnVtID0gZ2V0X2F0dG51bShSZWxhdGlvbkdldFJlbGlkKHJlbCksIHN1 YmNtZC0+bmFtZSk7CisJCQkJCXNlcV9yZWxpZCA9IGdldElkZW50aXR5U2VxdWVuY2UoUmVsYXRp b25HZXRSZWxpZChyZWwpLCBhdHRudW0sIHRydWUpOworCQkJCQlzZXFkZWYgPSBkZXBhcnNlX0Nv bHVtbklkZW50aXR5KHNlcV9yZWxpZCwgaWRlbnRpdHksIHRydWUpOworCisJCQkJCWFwcGVuZF9v YmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7ZGVmaW5pdGlvbn1zIiwgc2VxZGVmKTsKKworCQkJCQlz dWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJ CQkJYnJlYWs7CisJCQkJfQorCQkJY2FzZSBBVF9Ecm9wSWRlbnRpdHk6CisJCQkJdG1wb2JqID0g bmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIERST1AgSURFTlRJVFkiLCAy LAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRyb3AgaWRlbnRpdHkiLAorCQkJ CQkJCQkJICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCisJCQkJYXBw ZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtpZl9ub3RfZXhpc3RzfXMiLAorCQkJCQkJCQkJ IHN1YmNtZC0+bWlzc2luZ19vayA/ICJJRiBFWElTVFMiIDogIiIpOworCisJCQkJc3ViY21kcyA9 IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7 CisJCQlkZWZhdWx0OgorCQkJCWVsb2coV0FSTklORywgInVuc3VwcG9ydGVkIGFsdGVyIHRhYmxl IHN1YnR5cGUgJWQiLAorCQkJCQkgc3ViY21kLT5zdWJ0eXBlKTsKKwkJCQlicmVhazsKKwkJfQor CisJCS8qCisJCSAqIFdlIGRvbid0IHN1cHBvcnQgcmVwbGljYXRpbmcgQUxURVIgVEFCTEUgd2hp Y2ggY29udGFpbnMgdm9sYXRpbGUKKwkJICogZnVuY3Rpb25zIGJlY2F1c2UgSXQncyBwb3NzaWJs ZSB0aGUgZnVuY3Rpb25zIGNvbnRhaW4gRERML0RNTCBpbgorCQkgKiB3aGljaCBjYXNlIHRoZXNl IG9wZXJ0aW9ucyB3aWxsIGJlIGV4ZWN1dGVkIHR3aWNlIGFuZCBjYXVzZQorCQkgKiBkdXBsaWNh dGUgZGF0YS4gSW4gYWRkaXRpb24sIHdlIGRvbid0IGtub3cgd2hldGhlciB0aGUgdGFibGVzIGJl aW5nCisJCSAqIGFjY2Vzc2VkIGJ5IHRoZXNlIERETC9ETUwgYXJlIHB1Ymxpc2hlZCBvciBub3Qu IFNvIGJsaW5kbHkgYWxsb3dpbmcKKwkJICogc3VjaCBmdW5jdGlvbnMgY2FuIGFsbG93IHVuaW50 ZW5kZWQgY2xhdXNlcyBsaWtlIHRoZSB0YWJsZXMgYWNjZXNzZWQKKwkJICogaW4gdGhvc2UgZnVu Y3Rpb25zIG1heSBub3QgZXZlbiBleGlzdCBvbiB0aGUgc3Vic2NyaWJlci1zaWRlLgorCQkgKi8K KwkJaWYgKGNvbnRhaW5fdm9sYXRpbGVfZnVuY3Rpb25zKChOb2RlICopIGV4cHJzKSkKKwkJCWVy ZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVE KSwKKwkJCQkJIGVycm1zZygiQUxURVIgVEFCTEUgY29tbWFuZCB1c2luZyB2b2xhdGlsZSBmdW5j dGlvbiBjYW5ub3QgYmUgcmVwbGljYXRlZCIpKSk7CisKKwkJLyoKKwkJICogQ2xlYW4gdGhlIGxp c3QgYXMgd2UgYWxyZWFkeSBjb25maXJtZWQgdGhlcmUgaXMgbm8gdm9sYXRpbGUKKwkJICogZnVu Y3Rpb24uCisJCSAqLworCQlsaXN0X2ZyZWUoZXhwcnMpOworCQlleHBycyA9IE5JTDsKKwl9CisK Kwl0YWJsZV9jbG9zZShyZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlpZiAobGlzdF9sZW5ndGgo c3ViY21kcykgPT0gMCkKKwkJcmV0dXJuIE5VTEw7CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KGFs dGVyVGFibGVTdG10LCAiJXtzdWJjbWRzOiwgfXMiLCBzdWJjbWRzKTsKKworCXJldHVybiBhbHRl clRhYmxlU3RtdDsKK30KKworLyoKKyAqIFN1YnJvdXRpbmUgZm9yIENSRUFURSBUQUJMRSBkZXBh cnNpbmcuCisgKgorICogRGVwYXJzZSBhIENvbHVtbkRlZiBub2RlIHdpdGhpbiBhIHJlZ3VsYXIg KG5vbiB0eXBlZCkgdGFibGUgY3JlYXRpb24uCisgKgorICogTk9UIE5VTEwgY29uc3RyYWludHMg aW4gdGhlIGNvbHVtbiBkZWZpbml0aW9uIGFyZSBlbWl0dGVkIGRpcmVjdGx5IGluIHRoZQorICog Y29sdW1uIGRlZmluaXRpb24gYnkgdGhpcyByb3V0aW5lOyBvdGhlciBjb25zdHJhaW50cyBtdXN0 IGJlIGVtaXR0ZWQKKyAqIGVsc2V3aGVyZSAodGhlIGluZm8gaW4gdGhlIHBhcnNlIG5vZGUgaXMg aW5jb21wbGV0ZSBhbnl3YXkuKS4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9Db2x1 bW5EZWYoUmVsYXRpb24gcmVsYXRpb24sIExpc3QgKmRwY29udGV4dCwgYm9vbCBjb21wb3NpdGUs CisJCQkJICBDb2x1bW5EZWYgKmNvbGRlZiwgYm9vbCBpc19hbHRlciwgTGlzdCAqKmV4cHJzKQor eworCU9ialRyZWUJICAgKmNvbHVtbjsKKwlPYmpUcmVlCSAgICp0bXBvYmo7CisJT2lkCQkJcmVs aWQgPSBSZWxhdGlvbkdldFJlbGlkKHJlbGF0aW9uKTsKKwlIZWFwVHVwbGUJYXR0clR1cDsKKwlG b3JtX3BnX2F0dHJpYnV0ZSBhdHRyRm9ybTsKKwlPaWQJCQl0eXBpZDsKKwlpbnQzMgkJdHlwbW9k OworCU9pZAkJCXR5cGNvbGxhdGlvbjsKKwlib29sCQlzYXdfbm90bnVsbDsKKwlMaXN0Q2VsbCAg ICpjZWxsOworCisJLyoKKwkgKiBJbmhlcml0ZWQgY29sdW1ucyB3aXRob3V0IGxvY2FsIGRlZmlu aXRpb25zIG11c3Qgbm90IGJlIGVtaXR0ZWQuCisJICoKKwkgKiBYWFggbWF5YmUgaXQgaXMgdXNl ZnVsIHRvIGhhdmUgdGhlbSB3aXRoICJwcmVzZW50ID0gZmFsc2UiIG9yIHNvbWUgc3VjaD8KKwkg Ki8KKwlpZiAoIWNvbGRlZi0+aXNfbG9jYWwpCisJCXJldHVybiBOVUxMOworCisJYXR0clR1cCA9 IFNlYXJjaFN5c0NhY2hlQXR0TmFtZShyZWxpZCwgY29sZGVmLT5jb2xuYW1lKTsKKwlpZiAoIUhl YXBUdXBsZUlzVmFsaWQoYXR0clR1cCkpCisJCWVsb2coRVJST1IsICJjb3VsZCBub3QgZmluZCBj YWNoZSBlbnRyeSBmb3IgY29sdW1uIFwiJXNcIiBvZiByZWxhdGlvbiAldSIsCisJCQkgY29sZGVm LT5jb2xuYW1lLCByZWxpZCk7CisJYXR0ckZvcm0gPSAoRm9ybV9wZ19hdHRyaWJ1dGUpIEdFVFNU UlVDVChhdHRyVHVwKTsKKworCWdldF9hdHR0eXBldHlwbW9kY29sbChyZWxpZCwgYXR0ckZvcm0t PmF0dG51bSwKKwkJCQkJCSAgJnR5cGlkLCAmdHlwbW9kLCAmdHlwY29sbGF0aW9uKTsKKworCS8q CisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqICV7bmFtZX1JICV7Y29sdHlwZX1UICV7Y29t cHJlc3Npb259cyAle2RlZmF1bHR9cyAle25vdF9udWxsfXMKKwkgKiAle2NvbGxhdGlvbn1zCisJ ICovCisJY29sdW1uID0gbmV3X29ianRyZWVfVkEoIiV7bmFtZX1JICV7Y29sdHlwZX1UIiwgMywK KwkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJjb2x1bW4iLAorCQkJCQkJCSJuYW1lIiwg T2JqVHlwZVN0cmluZywgY29sZGVmLT5jb2xuYW1lLAorCQkJCQkJCSJjb2x0eXBlIiwgT2JqVHlw ZU9iamVjdCwKKwkJCQkJCQluZXdfb2JqdHJlZV9mb3JfdHlwZSh0eXBpZCwgdHlwbW9kKSk7CisK KwkvKiBVU0lORyBjbGF1c2UgKi8KKwl0bXBvYmogPSBuZXdfb2JqdHJlZSgiQ09NUFJFU1NJT04i KTsKKwlpZiAoY29sZGVmLT5jb21wcmVzc2lvbikKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1w b2JqLCAiJXtjb21wcmVzc2lvbl9tZXRob2R9SSIsIGNvbGRlZi0+Y29tcHJlc3Npb24pOworCWVs c2UKKwl7CisJCWFwcGVuZF9udWxsX29iamVjdCh0bXBvYmosICIle2NvbXByZXNzaW9uX21ldGhv ZH1JIik7CisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOwor CX0KKwlhcHBlbmRfb2JqZWN0X29iamVjdChjb2x1bW4sICIle2NvbXByZXNzaW9ufXMiLCB0bXBv YmopOworCisJdG1wb2JqID0gbmV3X29ianRyZWUoIkNPTExBVEUiKTsKKwlpZiAoT2lkSXNWYWxp ZCh0eXBjb2xsYXRpb24pKQorCXsKKwkJT2JqVHJlZSAqY29sbG5hbWU7CisKKwkJY29sbG5hbWUg PSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoQ29sbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJ CQkJCQkJICAgdHlwY29sbGF0aW9uKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAi JXtuYW1lfUQiLCBjb2xsbmFtZSk7CisJfQorCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRt cG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QoY29sdW1uLCAi JXtjb2xsYXRpb259cyIsIHRtcG9iaik7CisKKwlpZiAoIWNvbXBvc2l0ZSkKKwl7CisJCU9pZAlz ZXFyZWxpZCA9IEludmFsaWRPaWQ7CisKKwkJLyoKKwkJICogRW1pdCBhIE5PVCBOVUxMIGRlY2xh cmF0aW9uIGlmIG5lY2Vzc2FyeS4gIE5vdGUgdGhhdCB3ZSBjYW5ub3QgdHJ1c3QKKwkJICogcGdf YXR0cmlidXRlLmF0dG5vdG51bGwgaGVyZSwgYmVjYXVzZSB0aGF0IGJpdCBpcyBhbHNvIHNldCB3 aGVuCisJCSAqIHByaW1hcnkga2V5cyBhcmUgc3BlY2lmaWVkOyBhbmQgd2UgbXVzdCBub3QgZW1p dCBhIE5PVCBOVUxMCisJCSAqIGNvbnN0cmFpbnQgaW4gdGhhdCBjYXNlLCB1bmxlc3MgZXhwbGlj aXRlbHkgc3BlY2lmaWVkLiAgVGhlcmVmb3JlLAorCQkgKiB3ZSBzY2FuIHRoZSBsaXN0IG9mIGNv bnN0cmFpbnRzIGF0dGFjaGVkIHRvIHRoaXMgY29sdW1uIHRvIGRldGVybWluZQorCQkgKiB3aGV0 aGVyIHdlIG5lZWQgdG8gZW1pdCBhbnl0aGluZy4KKwkJICogKEZvcnR1bmF0ZWx5LCBOT1QgTlVM TCBjb25zdHJhaW50cyBjYW5ub3QgYmUgdGFibGUgY29uc3RyYWludHMuKQorCQkgKgorCQkgKiBJ biB0aGUgQUxURVIgVEFCTEUgY2FzZXMsIHdlIGFsc28gYWRkIGEgTk9UIE5VTEwgaWYgdGhlIGNv bERlZiBpcworCQkgKiBtYXJrZWQgaXNfbm90X251bGwuCisJCSAqLworCQlzYXdfbm90bnVsbCA9 IGZhbHNlOworCQlmb3JlYWNoKGNlbGwsIGNvbGRlZi0+Y29uc3RyYWludHMpCisJCXsKKwkJCUNv bnN0cmFpbnQgKmNvbnN0ciA9IChDb25zdHJhaW50ICopIGxmaXJzdChjZWxsKTsKKworCQkJaWYg KGNvbnN0ci0+Y29udHlwZSA9PSBDT05TVFJfTk9UTlVMTCkKKwkJCQlzYXdfbm90bnVsbCA9IHRy dWU7CisJCX0KKwkJaWYgKGlzX2FsdGVyICYmIGNvbGRlZi0+aXNfbm90X251bGwpCisJCQlzYXdf bm90bnVsbCA9IHRydWU7CisKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoY29sdW1uLCAiJXtub3Rf bnVsbH1zIiwKKwkJCQkJCQkgc2F3X25vdG51bGwgPyAiTk9UIE5VTEwiIDogIiIpOworCisJCXRt cG9iaiA9IG5ld19vYmp0cmVlKCJERUZBVUxUIik7CisJCWlmIChhdHRyRm9ybS0+YXR0aGFzZGVm KQorCQl7CisJCQljaGFyICpkZWZzdHI7CisKKwkJCWRlZnN0ciA9IFJlbGF0aW9uR2V0Q29sdW1u RGVmYXVsdChyZWxhdGlvbiwgYXR0ckZvcm0tPmF0dG51bSwKKwkJCQkJCQkJCQkJICBkcGNvbnRl eHQsIGV4cHJzKTsKKworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtkZWZhdWx0 fXMiLCBkZWZzdHIpOworCQl9CisJCWVsc2UKKwkJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmos ICJwcmVzZW50IiwgZmFsc2UpOworCQlhcHBlbmRfb2JqZWN0X29iamVjdChjb2x1bW4sICIle2Rl ZmF1bHR9cyIsIHRtcG9iaik7CisKKwkJLyogSURFTlRJVFkgQ09MVU1OICovCisJCWlmIChjb2xk ZWYtPmlkZW50aXR5KQorCQl7CisJCQlPaWQJYXR0bm8gPSBnZXRfYXR0bnVtKHJlbGlkLCBjb2xk ZWYtPmNvbG5hbWUpOworCQkJc2VxcmVsaWQgPSBnZXRJZGVudGl0eVNlcXVlbmNlKHJlbGlkLCBh dHRubywgZmFsc2UpOworCQl9CisKKwkJdG1wb2JqID0gZGVwYXJzZV9Db2x1bW5JZGVudGl0eShz ZXFyZWxpZCwgY29sZGVmLT5pZGVudGl0eSwgaXNfYWx0ZXIpOworCQlhcHBlbmRfb2JqZWN0X29i amVjdChjb2x1bW4sICIle2lkZW50aXR5X2NvbHVtbn1zIiwgdG1wb2JqKTsKKworCQkvKiBHRU5F UkFURUQgQ09MVU1OIEVYUFJFU1NJT04gKi8KKwkJdG1wb2JqID0gbmV3X29ianRyZWUoIkdFTkVS QVRFRCBBTFdBWVMgQVMiKTsKKwkJaWYgKGNvbGRlZi0+Z2VuZXJhdGVkID09IEFUVFJJQlVURV9H RU5FUkFURURfU1RPUkVEKQorCQl7CisJCQljaGFyICpkZWZzdHI7CisKKwkJCWRlZnN0ciA9IFJl bGF0aW9uR2V0Q29sdW1uRGVmYXVsdChyZWxhdGlvbiwgYXR0ckZvcm0tPmF0dG51bSwKKwkJCQkJ CQkJCQkJICBkcGNvbnRleHQsIGV4cHJzKTsKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9i aiwgIiV7Z2VuZXJhdGlvbl9leHByfXMgU1RPUkVEIiwgZGVmc3RyKTsKKwkJfQorCQllbHNlCisJ CQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKworCQlhcHBl bmRfb2JqZWN0X29iamVjdChjb2x1bW4sICIle2dlbmVyYXRlZF9jb2x1bW59cyIsIHRtcG9iaik7 CisJfQorCisJUmVsZWFzZVN5c0NhY2hlKGF0dHJUdXApOworCisJcmV0dXJuIGNvbHVtbjsKK30K KworLyoKKyAqIFN1YnJvdXRpbmUgZm9yIENSRUFURSBUQUJMRSBPRiBkZXBhcnNpbmcuCisgKgor ICogRGVwYXJzZSBhIENvbHVtbkRlZiBub2RlIHdpdGhpbiBhIHR5cGVkIHRhYmxlIGNyZWF0aW9u LglUaGlzIGlzIHNpbXBsZXIKKyAqIHRoYW4gdGhlIHJlZ3VsYXIgY2FzZSwgYmVjYXVzZSB3ZSBk b24ndCBoYXZlIHRvIGVtaXQgdGhlIHR5cGUgZGVjbGFyYXRpb24sCisgKiBjb2xsYXRpb24sIG9y IGRlZmF1bHQuICBIZXJlIHdlIG9ubHkgcmV0dXJuIHNvbWV0aGluZyBpZiB0aGUgY29sdW1uIGlz IGJlaW5nCisgKiBkZWNsYXJlZCBOT1QgTlVMTC4KKyAqCisgKiBBcyBpbiBkZXBhcnNlX0NvbHVt bkRlZiwgYW55IG90aGVyIGNvbnN0cmFpbnQgaXMgcHJvY2Vzc2VkIGVsc2V3aGVyZS4KKyAqLwor c3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9Db2x1bW5EZWZfdHlwZWQoUmVsYXRpb24gcmVsYXRp b24sIExpc3QgKmRwY29udGV4dCwgQ29sdW1uRGVmICpjb2xkZWYpCit7CisJT2JqVHJlZQkqY29s dW1uID0gTlVMTDsKKwlPYmpUcmVlCSp0bXBvYmo7CisJT2lkCQkJcmVsaWQgPSBSZWxhdGlvbkdl dFJlbGlkKHJlbGF0aW9uKTsKKwlIZWFwVHVwbGUJYXR0clR1cDsKKwlGb3JtX3BnX2F0dHJpYnV0 ZSBhdHRyRm9ybTsKKwlPaWQJCQl0eXBpZDsKKwlpbnQzMgkJdHlwbW9kOworCU9pZAkJCXR5cGNv bGxhdGlvbjsKKwlib29sCQlzYXdfbm90bnVsbDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCisJYXR0 clR1cCA9IFNlYXJjaFN5c0NhY2hlQXR0TmFtZShyZWxpZCwgY29sZGVmLT5jb2xuYW1lKTsKKwlp ZiAoIUhlYXBUdXBsZUlzVmFsaWQoYXR0clR1cCkpCisJCWVsb2coRVJST1IsICJjb3VsZCBub3Qg ZmluZCBjYWNoZSBlbnRyeSBmb3IgY29sdW1uIFwiJXNcIiBvZiByZWxhdGlvbiAldSIsCisJCQkg Y29sZGVmLT5jb2xuYW1lLCByZWxpZCk7CisJYXR0ckZvcm0gPSAoRm9ybV9wZ19hdHRyaWJ1dGUp IEdFVFNUUlVDVChhdHRyVHVwKTsKKworCWdldF9hdHR0eXBldHlwbW9kY29sbChyZWxpZCwgYXR0 ckZvcm0tPmF0dG51bSwKKwkJCQkJCSAgJnR5cGlkLCAmdHlwbW9kLCAmdHlwY29sbGF0aW9uKTsK KworCS8qCisJICogU2VhcmNoIGZvciBhIE5PVCBOVUxMIGRlY2xhcmF0aW9uLiAgQXMgaW4gZGVw YXJzZV9Db2x1bW5EZWYsIHdlIHJlbHkgb24KKwkgKiBmaW5kaW5nIGEgY29uc3RyYWludCBvbiB0 aGUgY29sdW1uIHJhdGhlciB0aGFuIGNvbGRlZi0+aXNfbm90X251bGwuCisJICogKFRoaXMgcm91 dGluZSBpcyBuZXZlciB1c2VkIGZvciBBTFRFUiBjYXNlcy4pCisJICovCisJc2F3X25vdG51bGwg PSBmYWxzZTsKKwlmb3JlYWNoKGNlbGwsIGNvbGRlZi0+Y29uc3RyYWludHMpCisJeworCQlDb25z dHJhaW50ICpjb25zdHIgPSAoQ29uc3RyYWludCAqKSBsZmlyc3QoY2VsbCk7CisKKwkJaWYgKGNv bnN0ci0+Y29udHlwZSA9PSBDT05TVFJfTk9UTlVMTCkKKwkJeworCQkJc2F3X25vdG51bGwgPSB0 cnVlOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIXNhd19ub3RudWxsICYmICFhdHRyRm9y bS0+YXR0aGFzZGVmKQorCXsKKwkJUmVsZWFzZVN5c0NhY2hlKGF0dHJUdXApOworCQlyZXR1cm4g TlVMTDsKKwl9CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiAle25hbWV9SSBX SVRIIE9QVElPTlMgJXtkZWZhdWx0fXMgJXtub3RfbnVsbH1zLgorCSAqLworCWNvbHVtbiA9IG5l d19vYmp0cmVlX1ZBKCIle25hbWV9SSBXSVRIIE9QVElPTlMiLCAyLAorCQkJCQkJCSJ0eXBlIiwg T2JqVHlwZVN0cmluZywgImNvbHVtbiIsCisJCQkJCQkJIm5hbWUiLCBPYmpUeXBlU3RyaW5nLCBj b2xkZWYtPmNvbG5hbWUpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoY29sdW1uLCAiJXtub3Rf bnVsbH1zIiwKKwkJCQkJCSBzYXdfbm90bnVsbCA/ICJOT1QgTlVMTCIgOiAiIik7CisKKwl0bXBv YmogPSBuZXdfb2JqdHJlZSgiREVGQVVMVCIpOworCWlmIChhdHRyRm9ybS0+YXR0aGFzZGVmKQor CXsKKwkJY2hhciAqZGVmc3RyOworCisJCWRlZnN0ciA9IFJlbGF0aW9uR2V0Q29sdW1uRGVmYXVs dChyZWxhdGlvbiwgYXR0ckZvcm0tPmF0dG51bSwKKwkJCQkJCQkJCQkgIGRwY29udGV4dCwgTlVM TCk7CisKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtkZWZhdWx0fXMiLCBkZWZz dHIpOworCX0KKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50Iiwg ZmFsc2UpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNvbHVtbiwgIiV7ZGVmYXVsdH1zIiwgdG1w b2JqKTsKKworCS8qCisJICogR2VuZXJhdGVkIGNvbHVtbnMgYXJlIG5vdCBzdXBwb3J0ZWQgb24g dHlwZWQgdGFibGVzLCBzbyB3ZSBhcmUgZG9uZS4KKwkgKi8KKworCVJlbGVhc2VTeXNDYWNoZShh dHRyVHVwKTsKKworCXJldHVybiBjb2x1bW47Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBkZWZp bml0aW9uIG9mIGNvbHVtbiBpZGVudGl0eS4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJz ZV9Db2x1bW5JZGVudGl0eShPaWQgc2VxcmVsaWQsIGNoYXIgaWRlbnRpdHksIGJvb2wgYWx0ZXJf dGFibGUpCit7CisJT2JqVHJlZQkgICAqY29sdW1uOworCU9ialRyZWUJICAgKmlkZW50b2JqOwor CUxpc3QJICAgKmVsZW1zID0gTklMOworCVJlbGF0aW9uCXJlbDsKKwlIZWFwVHVwbGUJc2VxdHVw bGU7CisJRm9ybV9wZ19zZXF1ZW5jZSBzZXFmb3JtOworCUZvcm1fcGdfc2VxdWVuY2VfZGF0YSBz ZXFkYXRhOworCWNoYXIJICAgKmlkZW50Zm10OworCWNoYXIJICAgKm9iamZtdDsKKworCWNvbHVt biA9IG5ld19vYmp0cmVlKCIiKTsKKworCWlmICghT2lkSXNWYWxpZChzZXFyZWxpZCkpCisJewor CQlhcHBlbmRfYm9vbF9vYmplY3QoY29sdW1uLCAicHJlc2VudCIsIGZhbHNlKTsKKwkJcmV0dXJu IGNvbHVtbjsKKwl9CisKKwlpZiAoYWx0ZXJfdGFibGUpCisJeworCQlpZGVudGZtdCA9ICJTRVQg R0VORVJBVEVEICI7CisJCW9iamZtdCA9ICIle29wdGlvbn1zIjsKKwl9CisJZWxzZQorCXsKKwkJ aWRlbnRmbXQgPSAiR0VORVJBVEVEICI7CisJCW9iamZtdCA9ICIle29wdGlvbn1zIEFTIElERU5U SVRZIjsKKwl9CisKKwlpZGVudG9iaiA9IG5ld19vYmp0cmVlKGlkZW50Zm10KTsKKworCWlmIChp ZGVudGl0eSA9PSBBVFRSSUJVVEVfSURFTlRJVFlfQUxXQVlTKQorCQlhcHBlbmRfc3RyaW5nX29i amVjdChpZGVudG9iaiwgb2JqZm10LCAiQUxXQVlTIik7CisJZWxzZSBpZiAoaWRlbnRpdHkgPT0g IEFUVFJJQlVURV9JREVOVElUWV9CWV9ERUZBVUxUKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChp ZGVudG9iaiwgb2JqZm10LCAiQlkgREVGQVVMVCIpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2Jq ZWN0KGlkZW50b2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KGNvbHVtbiwgIiV7aWRlbnRpdHlfdHlwZX1zIiwgaWRlbnRvYmopOworCisJcmVsID0gdGFibGVf b3BlbihTZXF1ZW5jZVJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCXNlcXR1cGxlID0g U2VhcmNoU3lzQ2FjaGVDb3B5MShTRVFSRUxJRCwgc2VxcmVsaWQpOworCWlmICghSGVhcFR1cGxl SXNWYWxpZChzZXF0dXBsZSkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZv ciBzZXF1ZW5jZSAldSIsCisJCQkgc2VxcmVsaWQpOworCisJc2VxZm9ybSA9IChGb3JtX3BnX3Nl cXVlbmNlKSBHRVRTVFJVQ1Qoc2VxdHVwbGUpOworCXNlcWRhdGEgPSBnZXRfc2VxdWVuY2VfdmFs dWVzKHNlcXJlbGlkKTsKKworCS8qIERlZmluaXRpb24gZWxlbWVudHMgKi8KKwllbGVtcyA9IGxh cHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX0NhY2hlKE5VTEwsIHNlcWZvcm0sIGFsdGVyX3RhYmxl KSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9DeWNsZShOVUxMLCBzZXFm b3JtLCBhbHRlcl90YWJsZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFf SW5jcmVtZW50QnkoTlVMTCwgc2VxZm9ybSwgYWx0ZXJfdGFibGUpKTsKKwllbGVtcyA9IGxhcHBl bmQoZWxlbXMsIGRlcGFyc2VfU2VxX01pbnZhbHVlKE5VTEwsIHNlcWZvcm0sIGFsdGVyX3RhYmxl KSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9NYXh2YWx1ZShOVUxMLCBz ZXFmb3JtLCBhbHRlcl90YWJsZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9T ZXFfU3RhcnR3aXRoKE5VTEwsIHNlcWZvcm0sIGFsdGVyX3RhYmxlKSk7CisJZWxlbXMgPSBsYXBw ZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9SZXN0YXJ0KE5VTEwsIHNlcWRhdGEpKTsKKwkvKiBXZSBw dXJwb3NlZnVsbHkgZG8gbm90IGVtaXQgT1dORUQgQlkgaGVyZSAqLworCisJaWYgKGFsdGVyX3Rh YmxlKQorCQlhcHBlbmRfYXJyYXlfb2JqZWN0KGNvbHVtbiwgIiV7c2VxX2RlZmluaXRpb246IH1z IiwgZWxlbXMpOworCWVsc2UKKwkJYXBwZW5kX2FycmF5X29iamVjdChjb2x1bW4sICIoICV7c2Vx X2RlZmluaXRpb246IH1zICkiLCBlbGVtcyk7CisKKwl0YWJsZV9jbG9zZShyZWwsIFJvd0V4Y2x1 c2l2ZUxvY2spOworCisJcmV0dXJuIGNvbHVtbjsKK30KKworLyoKKyAqIC4uLiBBTFRFUiBDT0xV TU4gLi4uIFNFVC9SRVNFVCAoLi4uKQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0Nv bHVtblNldE9wdGlvbnMoQWx0ZXJUYWJsZUNtZCAqc3ViY21kKQoreworCUxpc3QJICAgKnNldHMg PSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKwlPYmpUcmVlCSAgICpjb2xzZXQ7CisJY2hhcgkg ICAqZm10OworCWJvb2wJCWlzX3Jlc2V0ID0gc3ViY21kLT5zdWJ0eXBlID09IEFUX1Jlc2V0T3B0 aW9uczsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIEFMVEVSIENPTFVNTiAl e2NvbHVtbn1JIFJFU0VUfFNFVCAoJXtvcHRpb25zOiwgfXMpCisJICovCisJaWYgKGlzX3Jlc2V0 KQorCQlmbXQgPSAiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgUkVTRVQgIjsKKwllbHNlCisJCWZt dCA9ICJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBTRVQgIjsKKworCWNvbHNldCA9IG5ld19vYmp0 cmVlX1ZBKGZtdCwgMSwgImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisK Kwlmb3JlYWNoKGNlbGwsIChMaXN0ICopIHN1YmNtZC0+ZGVmKQorCXsKKwkJRGVmRWxlbQkgICAq ZWxlbTsKKwkJT2JqVHJlZQkgICAqc2V0OworCisJCWVsZW0gPSAoRGVmRWxlbSAqKSBsZmlyc3Qo Y2VsbCk7CisJCXNldCA9IGRlcGFyc2VfRGVmRWxlbShlbGVtLCBpc19yZXNldCk7CisJCXNldHMg PSBsYXBwZW5kKHNldHMsIG5ld19vYmplY3Rfb2JqZWN0KHNldCkpOworCX0KKworCUFzc2VydChz ZXRzKTsKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KGNvbHNldCwgIigle29wdGlvbnM6LCB9cykiLCBz ZXRzKTsKKworCXJldHVybiBjb2xzZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBDUkVBVEUg RE9NQUlOCisgKgorICogR2l2ZW4gYSBmdW5jdGlvbiBPSUQgYW5kIHRoZSBwYXJzZXRyZWUgdGhh dCBjcmVhdGVkIGl0LCByZXR1cm4gdGhlIEpTT04KKyAqIGJsb2IgcmVwcmVzZW50aW5nIHRoZSBj cmVhdGlvbiBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZURv bWFpbihPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlPYmpUcmVlCSAgICpjcmVh dGVEb21haW47CisJT2JqVHJlZQkgICAqdG1wb2JqOworCUhlYXBUdXBsZQl0eXBUdXA7CisJRm9y bV9wZ190eXBlIHR5cEZvcm07CisJTGlzdAkgICAqY29uc3RyYWludHM7CisKKwl0eXBUdXAgPSBT ZWFyY2hTeXNDYWNoZTEoVFlQRU9JRCwgb2JqZWN0SWQpOworCWlmICghSGVhcFR1cGxlSXNWYWxp ZCh0eXBUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgZG9tYWlu IHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCXR5cEZvcm0gPSAoRm9ybV9wZ190eXBlKSBHRVRT VFJVQ1QodHlwVHVwKTsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIENSRUFU RSBET01BSU4gJXtpZGVudGl0eX1EIEFTICV7dHlwZX1UICV7bm90X251bGx9cyAle2NvbnN0cmFp bnRzfXMKKwkgKiAle2NvbGxhdGlvbn1zCisJICovCisJY3JlYXRlRG9tYWluID0gbmV3X29ianRy ZWUoIkNSRUFURSIpOworCisJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlRG9tYWluLAorCQkJ CQkJICJET01BSU4gJXtpZGVudGl0eX1EIEFTIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVh bG5hbWVfaWQoVHlwZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIG9iamVjdElkKSk7CisJYXBw ZW5kX29iamVjdF9vYmplY3QoY3JlYXRlRG9tYWluLAorCQkJCQkJICIle3R5cGV9VCIsCisJCQkJ CQkgbmV3X29ianRyZWVfZm9yX3R5cGUodHlwRm9ybS0+dHlwYmFzZXR5cGUsIHR5cEZvcm0tPnR5 cHR5cG1vZCkpOworCisJaWYgKHR5cEZvcm0tPnR5cG5vdG51bGwpCisJCWFwcGVuZF9zdHJpbmdf b2JqZWN0KGNyZWF0ZURvbWFpbiwgIiV7bm90X251bGx9cyIsICJOT1QgTlVMTCIpOworCWVsc2UK KwkJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlRG9tYWluLCAiJXtub3RfbnVsbH1zIiwgIiIp OworCisJY29uc3RyYWludHMgPSBvYnRhaW5Db25zdHJhaW50cyhOSUwsIEludmFsaWRPaWQsIG9i amVjdElkKTsKKwlpZiAoY29uc3RyYWludHMgPT0gTklMKQorCXsKKwkJdG1wb2JqID0gbmV3X29i anRyZWUoIiIpOworCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNl KTsKKwl9CisJZWxzZQorCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiJXtlbGVtZW50czosIH1z IiwgMSwKKwkJCQkJCQkgImVsZW1lbnRzIiwgT2JqVHlwZUFycmF5LCBjb25zdHJhaW50cyk7CisJ YXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlRG9tYWluLCAiJXtjb25zdHJhaW50c31zIiwgdG1w b2JqKTsKKworCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJDT0xMQVRFIik7CisJaWYgKE9pZElzVmFs aWQodHlwRm9ybS0+dHlwY29sbGF0aW9uKSkKKwl7CisJCU9ialRyZWUgKmNvbGxuYW1lOworCisJ CWNvbGxuYW1lID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKENvbGxhdGlvblJlbGF0aW9u SWQsCisJCQkJCQkJCQkJCSAgIHR5cEZvcm0tPnR5cGNvbGxhdGlvbik7CisJCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KHRtcG9iaiwgIiV7bmFtZX1EIiwgY29sbG5hbWUpOworCX0KKwllbHNlCisJCWFw cGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KGNyZWF0ZURvbWFpbiwgIiV7Y29sbGF0aW9ufXMiLCB0bXBvYmopOworCisJUmVs ZWFzZVN5c0NhY2hlKHR5cFR1cCk7CisKKwlyZXR1cm4gY3JlYXRlRG9tYWluOworfQorCisvKgor ICogRGVwYXJzZSBhIENyZWF0ZUZ1bmN0aW9uU3RtdCAoQ1JFQVRFIEZVTkNUSU9OKQorICoKKyAq IEdpdmVuIGEgZnVuY3Rpb24gT0lEIGFuZCB0aGUgcGFyc2V0cmVlIHRoYXQgY3JlYXRlZCBpdCwg cmV0dXJuIHRoZSBKU09OCisgKiBibG9iIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFu ZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVGdW5jdGlvbihPaWQgb2Jq ZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVGdW5jdGlvblN0bXQgKm5vZGUgPSAo Q3JlYXRlRnVuY3Rpb25TdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlCSAgICpjcmVhdGVGdW5j OworCU9ialRyZWUJICAgKnRtcG9iajsKKwlEYXR1bQkJdG1wZGF0dW07CisJY2hhcgkgICAqc291 cmNlOworCWNoYXIJICAgKnByb2JpbjsKKwlMaXN0CSAgICpwYXJhbXM7CisJTGlzdAkgICAqZGVm YXVsdHM7CisJTGlzdAkgICAqc2V0cyA9IE5JTDsKKwlMaXN0CSAgICp0eXBlcyA9IE5JTDsKKwlM aXN0Q2VsbCAgICpjZWxsOworCUxpc3RDZWxsICAgKmN1cmRlZjsKKwlMaXN0Q2VsbCAgICp0YWJs ZV9wYXJhbXMgPSBOVUxMOworCUhlYXBUdXBsZQlwcm9jVHVwOworCUZvcm1fcGdfcHJvYyBwcm9j Rm9ybTsKKwlIZWFwVHVwbGUJbGFuZ1R1cDsKKwlPaWQJCSAgICp0eXBhcnJheTsKKwlPaWQJCSAg ICp0cmZ0eXBlczsKKwlGb3JtX3BnX2xhbmd1YWdlIGxhbmdGb3JtOworCWludAkJCWk7CisJaW50 CQkJdHlwbnVtOworCWludAkJCW50eXBlczsKKwlib29sCQlpc251bGw7CisJYm9vbAkJaXNmdW5j dGlvbjsKKworCS8qIEdldCB0aGUgcGdfcHJvYyB0dXBsZSAqLworCXByb2NUdXAgPSBTZWFyY2hT eXNDYWNoZTEoUFJPQ09JRCwgb2JqZWN0SWQpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChwcm9j VHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsdXJlIGZvciBmdW5jdGlvbiB3 aXRoIE9JRCAldSIsCisJCQkgb2JqZWN0SWQpOworCXByb2NGb3JtID0gKEZvcm1fcGdfcHJvYykg R0VUU1RSVUNUKHByb2NUdXApOworCisJLyogR2V0IHRoZSBjb3JyZXNwb25kaW5nIHBnX2xhbmd1 YWdlIHR1cGxlICovCisJbGFuZ1R1cCA9IFNlYXJjaFN5c0NhY2hlMShMQU5HT0lELCBwcm9jRm9y bS0+cHJvbGFuZyk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGxhbmdUdXApKQorCQllbG9nKEVS Uk9SLCAiY2FjaGUgbG9va3VwIGZhaWx1cmUgZm9yIGxhbmd1YWdlIHdpdGggT0lEICV1IiwKKwkJ CSBwcm9jRm9ybS0+cHJvbGFuZyk7CisJbGFuZ0Zvcm0gPSAoRm9ybV9wZ19sYW5ndWFnZSkgR0VU U1RSVUNUKGxhbmdUdXApOworCisJLyoKKwkgKiBEZXRlcm1pbmUgdXNlZnVsIHZhbHVlcyBmb3Ig cHJvc3JjIGFuZCBwcm9iaW4uICBXZSBjb3BlIHdpdGggcHJvYmluCisJICogYmVpbmcgZWl0aGVy IE5VTEwgb3IgIi0iLCBidXQgcHJvc3JjIG11c3QgaGF2ZSBhIHZhbGlkIHZhbHVlLgorCSAqLwor CXRtcGRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKFBST0NPSUQsIHByb2NUdXAsCisJCQkJCQkJICAg QW51bV9wZ19wcm9jX3Byb3NyYywgJmlzbnVsbCk7CisJaWYgKGlzbnVsbCkKKwkJZWxvZyhFUlJP UiwgIm51bGwgcHJvc3JjIGluIGZ1bmN0aW9uIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCXNv dXJjZSA9IFRleHREYXR1bUdldENTdHJpbmcodG1wZGF0dW0pOworCisJLyogRGV0ZXJtaW5lIGEg dXNlZnVsIHZhbHVlIGZvciBwcm9iaW4gKi8KKwl0bXBkYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihQ Uk9DT0lELCBwcm9jVHVwLAorCQkJCQkJCSAgIEFudW1fcGdfcHJvY19wcm9iaW4sICZpc251bGwp OworCWlmIChpc251bGwpCisJCXByb2JpbiA9IE5VTEw7CisJZWxzZQorCXsKKwkJcHJvYmluID0g VGV4dERhdHVtR2V0Q1N0cmluZyh0bXBkYXR1bSk7CisJCWlmIChwcm9iaW5bMF0gPT0gJ1wwJyB8 fCBzdHJjbXAocHJvYmluLCAiLSIpID09IDApCisJCQlwcm9iaW4gPSBOVUxMOworCX0KKworCS8q CisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIENSRUFURSAle29yX3JlcGxhY2V9cyBGVU5D VElPTiAle3NpZ25hdHVyZX1zIFJFVFVSTlMgJXtyZXR1cm5fdHlwZX1zCisJICogTEFOR1VBR0Ug JXt0cmFuc2Zvcm1fdHlwZX1zICV7bGFuZ3VhZ2V9SSAle3dpbmRvd31zICV7dm9sYXRpbGl0eX1z CisJICogJXtwYXJhbGxlbF9zYWZldHl9cyAle2xlYWtwcm9vZn1zICV7c3RyaWN0fXMgJXtzZWN1 cml0eV9kZWZpbmVyfXMKKwkgKiAle2Nvc3R9cyAle3Jvd3N9cyAle3N1cHBvcnR9cyAle3NldF9v cHRpb25zOiB9cyBBUyAle29iamZpbGV9TCwKKwkgKiAle3N5bWJvbH1MCisJICovCisJY3JlYXRl RnVuYyA9IG5ld19vYmp0cmVlKCJDUkVBVEUiKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNy ZWF0ZUZ1bmMsICIle29yX3JlcGxhY2V9cyIsCisJCQkJCQkgbm9kZS0+cmVwbGFjZSA/ICJPUiBS RVBMQUNFIiA6ICIiKTsKKworCS8qCisJICogVG8gY29uc3RydWN0IHRoZSBhcmd1bWVudHMgYXJy YXksIGV4dHJhY3QgdGhlIHR5cGUgT0lEcyBmcm9tIHRoZQorCSAqIGZ1bmN0aW9uJ3MgcGdfcHJv YyBlbnRyeS4gIElmIHByb25hcmdzIGVxdWFscyB0aGUgcGFyYW1ldGVyIGxpc3QgbGVuZ3RoLAor CSAqIHRoZXJlIGFyZSBubyBPVVQgcGFyYW1ldGVycyBhbmQgdGh1cyB3ZSBjYW4gZXh0cmFjdCB0 aGUgdHlwZSBPSUQgZnJvbQorCSAqIHByb2FyZ3R5cGVzOyBvdGhlcndpc2Ugd2UgbmVlZCB0byBk ZWNvZGUgcHJvYWxsYXJndHlwZXMsIHdoaWNoIGlzCisJICogYSBiaXQgbW9yZSBpbnZvbHZlZC4K KwkgKi8KKwl0eXBhcnJheSA9IHBhbGxvYyhsaXN0X2xlbmd0aChub2RlLT5wYXJhbWV0ZXJzKSAq IHNpemVvZihPaWQpKTsKKwlpZiAobGlzdF9sZW5ndGgobm9kZS0+cGFyYW1ldGVycykgPiBwcm9j Rm9ybS0+cHJvbmFyZ3MpCisJeworCQlib29sCWlzbnVsbDsKKwkJRGF0dW0JYWxsdHlwZXM7CisJ CURhdHVtICAqdmFsdWVzOworCQlib29sICAgKm51bGxzOworCQlpbnQJCW5lbGVtczsKKworCQlh bGx0eXBlcyA9IFN5c0NhY2hlR2V0QXR0cihQUk9DT0lELCBwcm9jVHVwLAorCQkJCQkJCQkgICBB bnVtX3BnX3Byb2NfcHJvYWxsYXJndHlwZXMsICZpc251bGwpOworCQlpZiAoaXNudWxsKQorCQkJ ZWxvZyhFUlJPUiwgIk5VTEwgcHJvYWxsYXJndHlwZXMsIGJ1dCBtb3JlIHBhcmFtZXRlcnMgdGhh biBhcmdzIik7CisJCWRlY29uc3RydWN0X2FycmF5KERhdHVtR2V0QXJyYXlUeXBlUChhbGx0eXBl cyksCisJCQkJCQkgIE9JRE9JRCwgNCwgJ3QnLCAnaScsCisJCQkJCQkgICZ2YWx1ZXMsICZudWxs cywgJm5lbGVtcyk7CisJCWlmIChuZWxlbXMgIT0gbGlzdF9sZW5ndGgobm9kZS0+cGFyYW1ldGVy cykpCisJCQllbG9nKEVSUk9SLCAibWlzbWF0Y2hlZCBwcm9hbGxhcmdhdHlwZXMiKTsKKwkJZm9y IChpID0gMDsgaSA8IGxpc3RfbGVuZ3RoKG5vZGUtPnBhcmFtZXRlcnMpOyBpKyspCisJCQl0eXBh cnJheVtpXSA9IHZhbHVlc1tpXTsKKwl9CisJZWxzZQorCXsKKwkJZm9yIChpID0gMDsgaSA8IGxp c3RfbGVuZ3RoKG5vZGUtPnBhcmFtZXRlcnMpOyBpKyspCisJCQkgdHlwYXJyYXlbaV0gPSBwcm9j Rm9ybS0+cHJvYXJndHlwZXMudmFsdWVzW2ldOworCX0KKworCS8qCisJICogSWYgdGhlcmUgYXJl IGFueSBkZWZhdWx0IGV4cHJlc3Npb25zLCB3ZSByZWFkIHRoZSBkZXBhcnNlZCBleHByZXNzaW9u IGFzCisJICogYSBsaXN0IHNvIHRoYXQgd2UgY2FuIGF0dGFjaCB0aGVtIHRvIGVhY2ggYXJndW1l bnQuCisJICovCisJdG1wZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoUFJPQ09JRCwgcHJvY1R1cCwK KwkJCQkJCQkgICBBbnVtX3BnX3Byb2NfcHJvYXJnZGVmYXVsdHMsICZpc251bGwpOworCWlmICgh aXNudWxsKQorCXsKKwkJZGVmYXVsdHMgPSBGdW5jdGlvbkdldERlZmF1bHRzKERhdHVtR2V0VGV4 dFAodG1wZGF0dW0pKTsKKwkJY3VyZGVmID0gbGlzdF9oZWFkKGRlZmF1bHRzKTsKKwl9CisJZWxz ZQorCXsKKwkJZGVmYXVsdHMgPSBOSUw7CisJCWN1cmRlZiA9IE5VTEw7CisJfQorCisJLyoKKwkg KiBOb3cgaXRlcmF0ZSBvdmVyIGVhY2ggcGFyYW1ldGVyIGluIHRoZSBwYXJzZXRyZWUgdG8gY3Jl YXRlIHRoZQorCSAqIHBhcmFtZXRlcnMgYXJyYXkuCisJICovCisJcGFyYW1zID0gTklMOworCXR5 cG51bSA9IDA7CisJZm9yZWFjaChjZWxsLCBub2RlLT5wYXJhbWV0ZXJzKQorCXsKKwkJRnVuY3Rp b25QYXJhbWV0ZXIgKnBhcmFtID0gKEZ1bmN0aW9uUGFyYW1ldGVyICopIGxmaXJzdChjZWxsKTsK KwkJT2JqVHJlZQkgICAqcGFyYW1vYmo7CisJCU9ialRyZWUJICAgKmRlZmF1bHR2YWw7CisJCU9i alRyZWUJICAgKm5hbWU7CisKKwkJLyoKKwkJICogQSBQQVJBTV9UQUJMRSBwYXJhbWV0ZXIgaW5k aWNhdGVzIGVuZCBvZiBpbnB1dCBhcmd1bWVudHM7IHRoZQorCQkgKiBmb2xsb3dpbmcgcGFyYW1l dGVycyBhcmUgcGFydCBvZiB0aGUgcmV0dXJuIHR5cGUuICBXZSBpZ25vcmUgdGhlbQorCQkgKiBo ZXJlLCBidXQga2VlcCB0cmFjayBvZiB0aGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgbGlzdCBz byB0aGF0CisJCSAqIHdlIGNhbiBlYXNpbHkgcHJvZHVjZSB0aGUgcmV0dXJuIHR5cGUgYmVsb3cu CisJCSAqLworCQlpZiAocGFyYW0tPm1vZGUgPT0gRlVOQ19QQVJBTV9UQUJMRSkKKwkJeworCQkJ dGFibGVfcGFyYW1zID0gY2VsbDsKKwkJCWJyZWFrOworCQl9CisKKwkJLyoKKwkJICogVmVyYm9z ZSBzeW50YXggZm9yIHBhcmFtYXRlcjogJXttb2RlfXMgJXtuYW1lfXMgJXt0eXBlfVQgJXtkZWZh dWx0fXMKKwkJICoKKwkJICogTm90ZSB0aGF0ICV7bmFtZX1zIGlzIGEgc3RyaW5nIGhlcmUsIG5v dCBhbiBpZGVudGlmaWVyOyB0aGUgcmVhc29uCisJCSAqIGZvciB0aGlzIGlzIHRoYXQgYW4gYWJz ZW50IHBhcmFtZXRlciBuYW1lIG11c3QgcHJvZHVjZSBhbiBlbXB0eQorCQkgKiBzdHJpbmcsIG5v dCAiIiwgd2hpY2ggaXMgd2hhdCB3b3VsZCBoYXBwZW4gaWYgd2Ugd2VyZSB0byB1c2UKKwkJICog JXtuYW1lfUkgaGVyZS4gIFNvIHdlIGFkZCBhbm90aGVyIGxldmVsIG9mIGluZGlyZWN0aW9uIHRv IGFsbG93IHVzCisJCSAqIHRvIGluamVjdCBhICJwcmVzZW50IiBwYXJhbWV0ZXIuCisJCSAqLwor CQlwYXJhbW9iaiA9IG5ld19vYmp0cmVlKCIiKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QocGFy YW1vYmosICIle21vZGV9cyIsCisJCQkJCQkJIHBhcmFtLT5tb2RlID09IEZVTkNfUEFSQU1fSU4g PyAiSU4iIDoKKwkJCQkJCQkgcGFyYW0tPm1vZGUgPT0gRlVOQ19QQVJBTV9PVVQgPyAiT1VUIiA6 CisJCQkJCQkJIHBhcmFtLT5tb2RlID09IEZVTkNfUEFSQU1fSU5PVVQgPyAiSU5PVVQiIDoKKwkJ CQkJCQkgcGFyYW0tPm1vZGUgPT0gRlVOQ19QQVJBTV9WQVJJQURJQyA/ICJWQVJJQURJQyIgOgor CQkJCQkJCSAiSU4iKTsKKworCQkvKiBPcHRpb25hbCB3aG9sZXNhbGUgc3VwcHJlc3Npb24gb2Yg Im5hbWUiIG9jY3VycyBoZXJlICovCisKKwkJbmFtZSA9IG5ld19vYmp0cmVlKCIiKTsKKwkJYXBw ZW5kX3N0cmluZ19vYmplY3QobmFtZSwgIiV7bmFtZX1JIiwKKwkJCQkJCQkgcGFyYW0tPm5hbWUg PyBwYXJhbS0+bmFtZSA6ICJOVUxMIik7CisKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KG5hbWUsICJw cmVzZW50IiwKKwkJCQkJCSAgIHBhcmFtLT5uYW1lID8gdHJ1ZSA6IGZhbHNlKTsKKworCQlhcHBl bmRfb2JqZWN0X29iamVjdChwYXJhbW9iaiwgIiV7bmFtZX1zIiwgbmFtZSk7CisKKwkJZGVmYXVs dHZhbCA9IG5ld19vYmp0cmVlKCJERUZBVUxUIik7CisJCWlmIChQb2ludGVySXNWYWxpZChwYXJh bS0+ZGVmZXhwcikpCisJCXsKKwkJCWNoYXIgKmV4cHI7CisKKwkJCWlmIChjdXJkZWYgPT0gTlVM TCkKKwkJCQllbG9nKEVSUk9SLCAicHJvYXJnZGVmYXVsdHMgbGlzdCB0b28gc2hvcnQiKTsKKwkJ CWV4cHIgPSBsZmlyc3QoY3VyZGVmKTsKKworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QoZGVmYXVs dHZhbCwgIiV7dmFsdWV9cyIsIGV4cHIpOworCQkJY3VyZGVmID0gbG5leHQoZGVmYXVsdHMsIGN1 cmRlZik7CisJCX0KKwkJZWxzZQorCQkJYXBwZW5kX2Jvb2xfb2JqZWN0KGRlZmF1bHR2YWwsICJw cmVzZW50IiwgZmFsc2UpOworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHBhcmFtb2JqLCAiJXt0 eXBlfVQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZSh0eXBhcnJheVt0eXBudW0rK10s IC0xKSk7CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocGFyYW1vYmosICIle2RlZmF1bHR9cyIs IGRlZmF1bHR2YWwpOworCisJCXBhcmFtcyA9IGxhcHBlbmQocGFyYW1zLCBuZXdfb2JqZWN0X29i amVjdChwYXJhbW9iaikpOworCX0KKworCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCIle2lkZW50 aXR5fUQiLCAxLAorCQkJCQkJICAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJICBu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJ CQkJCQkgIG9iamVjdElkKSk7CisKKwlhcHBlbmRfZm9ybWF0X3N0cmluZyh0bXBvYmosICIoIik7 CisJYXBwZW5kX2FycmF5X29iamVjdCh0bXBvYmosICIle2FyZ3VtZW50czosIH1zIiwgcGFyYW1z KTsKKwlhcHBlbmRfZm9ybWF0X3N0cmluZyh0bXBvYmosICIpIik7CisKKwlpc2Z1bmN0aW9uID0g KHByb2NGb3JtLT5wcm9raW5kICE9IFBST0tJTkRfUFJPQ0VEVVJFKTsKKworCWlmIChpc2Z1bmN0 aW9uKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVGdW5jLCAiRlVOQ1RJT04gJXtzaWdu YXR1cmV9cyIsIHRtcG9iaik7CisJZWxzZQorCQlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVG dW5jLCAiUFJPQ0VEVVJFICV7c2lnbmF0dXJlfXMiLCB0bXBvYmopOworCisJLyoKKwkgKiBBIHJl dHVybiB0eXBlIGNhbiBhZG9wdCBvbmUgb2YgdHdvIGZvcm1zOiBlaXRoZXIgYSBbU0VUT0ZdIHNv bWVfdHlwZSwgb3IKKwkgKiBhIFRBQkxFKGxpc3Qtb2YtdHlwZXMpLiAgV2UgY2FuIHRlbGwgdGhl IHNlY29uZCBmb3JtIGJlY2F1c2Ugd2Ugc2F3IGEKKwkgKiB0YWJsZSBwYXJhbSBhYm92ZSB3aGls ZSBzY2FubmluZyB0aGUgYXJndW1lbnQgbGlzdC4KKwkgKi8KKwlpZiAodGFibGVfcGFyYW1zID09 IE5VTEwpCisJeworCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiIiwgMSwKKwkJCQkJCQkgInJl dHVybl9mb3JtIiwgT2JqVHlwZVN0cmluZywgInBsYWluIik7CisJCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KHRtcG9iaiwgIiV7c2V0b2Z9cyIsCisJCQkJCQkJIHByb2NGb3JtLT5wcm9yZXRzZXQgPyAi U0VUT0YiIDogIiIpOworCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle3JldHR5cGV9 VCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHByb2NGb3JtLT5wcm9yZXR0eXBlLCAt MSkpOworCX0KKwllbHNlCisJeworCQlMaXN0CSAgICpyZXR0eXBlcyA9IE5JTDsKKwkJT2JqVHJl ZQkgICAqcGFyYW1vYmo7CisKKwkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIlRBQkxFIiwgMSwK KwkJCQkJCQkgInJldHVybl9mb3JtIiwgT2JqVHlwZVN0cmluZywgInRhYmxlIik7CisJCWZvciAo OyB0YWJsZV9wYXJhbXMgIT0gTlVMTDsgdGFibGVfcGFyYW1zID0gbG5leHQobm9kZS0+cGFyYW1l dGVycywgdGFibGVfcGFyYW1zKSkKKwkJeworCQkJRnVuY3Rpb25QYXJhbWV0ZXIgKnBhcmFtID0g bGZpcnN0KHRhYmxlX3BhcmFtcyk7CisKKwkJCXBhcmFtb2JqID0gbmV3X29ianRyZWUoIiIpOwor CQkJYXBwZW5kX3N0cmluZ19vYmplY3QocGFyYW1vYmosICIle25hbWV9SSIsIHBhcmFtLT5uYW1l KTsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHBhcmFtb2JqLCAiJXt0eXBlfVQiLAorCQkJCQkJ CQkgbmV3X29ianRyZWVfZm9yX3R5cGUodHlwYXJyYXlbdHlwbnVtKytdLCAtMSkpOworCQkJcmV0 dHlwZXMgPSBsYXBwZW5kKHJldHR5cGVzLCBuZXdfb2JqZWN0X29iamVjdChwYXJhbW9iaikpOwor CQl9CisKKwkJYXBwZW5kX2FycmF5X29iamVjdCh0bXBvYmosICIoJXtyZXR0eXBlczosIH1zKSIs IHJldHR5cGVzKTsKKwl9CisKKwlpZiAoaXNmdW5jdGlvbikKKwkJYXBwZW5kX29iamVjdF9vYmpl Y3QoY3JlYXRlRnVuYywgIlJFVFVSTlMgJXtyZXR1cm5fdHlwZX1zIiwgdG1wb2JqKTsKKworCS8q IFRSQU5TRk9STSBGT1IgVFlQRSAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJUUkFOU0ZPUk0i KTsKKworCW50eXBlcyA9IGdldF9mdW5jX3RyZnR5cGVzKHByb2NUdXAsICZ0cmZ0eXBlcyk7CisJ Zm9yIChpID0gMDsgaSA8IG50eXBlczsgaSsrKQorCXsKKwkJdG1wb2JqID0gbmV3X29ianRyZWVf VkEoIkZPUiBUWVBFICV7dHlwZX1UIiwgMSwKKwkJCQkJCQkgInR5cGUiLCBPYmpUeXBlT2JqZWN0 LAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZSh0cmZ0eXBlc1tpXSwgLTEpKTsKKwkJdHlw ZXMgPSBsYXBwZW5kKHR5cGVzLCB0bXBvYmopOworCX0KKworCWlmICh0eXBlcykKKwkJYXBwZW5k X2FycmF5X29iamVjdCh0bXBvYmosICIle2Zvcl90eXBlOiwgfXMiLCB0eXBlcyk7CisJZWxzZQor CQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKworCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZUZ1bmMsICIle3RyYW5zZm9ybV90eXBlfXMiLCB0bXBvYmop OworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlRnVuYywgIkxBTkdVQUdFICV7bGFuZ3Vh Z2V9SSIsCisJCQkJCQkgTmFtZVN0cihsYW5nRm9ybS0+bGFubmFtZSkpOworCisJaWYgKGlzZnVu Y3Rpb24pCisJeworCQlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVGdW5jLCAiJXt3aW5kb3d9 cyIsCisJCQkJCQkJIHByb2NGb3JtLT5wcm9raW5kID09IFBST0tJTkRfV0lORE9XID8gIldJTkRP VyIgOiAiIik7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUZ1bmMsICIle3ZvbGF0aWxp dHl9cyIsCisJCQkJCQkJIHByb2NGb3JtLT5wcm92b2xhdGlsZSA9PSBQUk9WT0xBVElMRV9WT0xB VElMRSA/CisJCQkJCQkJICJWT0xBVElMRSIgOgorCQkJCQkJCSBwcm9jRm9ybS0+cHJvdm9sYXRp bGUgPT0gUFJPVk9MQVRJTEVfU1RBQkxFID8KKwkJCQkJCQkgIlNUQUJMRSIgOiAiSU1NVVRBQkxF Iik7CisKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlRnVuYywgIiV7cGFyYWxsZWxfc2Fm ZXR5fXMiLAorCQkJCQkJCSBwcm9jRm9ybS0+cHJvcGFyYWxsZWwgPT0gUFJPUEFSQUxMRUxfU0FG RSA/CisJCQkJCQkJICJQQVJBTExFTCBTQUZFIiA6CisJCQkJCQkJIHByb2NGb3JtLT5wcm9wYXJh bGxlbCA9PSBQUk9QQVJBTExFTF9SRVNUUklDVEVEID8KKwkJCQkJCQkgIlBBUkFMTEVMIFJFU1RS SUNURUQiIDogIlBBUkFMTEVMIFVOU0FGRSIpOworCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNy ZWF0ZUZ1bmMsICIle2xlYWtwcm9vZn1zIiwKKwkJCQkJCQkgcHJvY0Zvcm0tPnByb2xlYWtwcm9v ZiA/ICJMRUFLUFJPT0YiIDogIiIpOworCQlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVGdW5j LCAiJXtzdHJpY3R9cyIsCisJCQkJCQkJIHByb2NGb3JtLT5wcm9pc3N0cmljdCA/CisJCQkJCQkJ ICJSRVRVUk5TIE5VTEwgT04gTlVMTCBJTlBVVCIgOgorCQkJCQkJCSAiQ0FMTEVEIE9OIE5VTEwg SU5QVVQiKTsKKworCQlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVGdW5jLCAiJXtzZWN1cml0 eV9kZWZpbmVyfXMiLAorCQkJCQkJCSBwcm9jRm9ybS0+cHJvc2VjZGVmID8KKwkJCQkJCQkgIlNF Q1VSSVRZIERFRklORVIiIDogIlNFQ1VSSVRZIElOVk9LRVIiKTsKKworCQlhcHBlbmRfb2JqZWN0 X29iamVjdChjcmVhdGVGdW5jLCAiJXtjb3N0fXMiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9WQSgi Q09TVCAle2Nvc3R9biIsIDEsCisJCQkJCQkJCQkJCSJjb3N0IiwgT2JqVHlwZUZsb2F0LAorCQkJ CQkJCQkJCQlwcm9jRm9ybS0+cHJvY29zdCkpOworCisJCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJS T1dTIik7CisJCWlmIChwcm9jRm9ybS0+cHJvcm93cyA9PSAwKQorCQkJYXBwZW5kX2Jvb2xfb2Jq ZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJCWVsc2UKKwkJCWFwcGVuZF9mbG9hdF9v YmplY3QodG1wb2JqLCAiJXtyb3dzfW4iLCBwcm9jRm9ybS0+cHJvcm93cyk7CisJCWFwcGVuZF9v YmplY3Rfb2JqZWN0KGNyZWF0ZUZ1bmMsICIle3Jvd3N9cyIsIHRtcG9iaik7CisKKwkJdG1wb2Jq ID0gbmV3X29ianRyZWUoIlNVUFBPUlQgJXtuYW1lfXMiKTsKKwkJaWYgKHByb2NGb3JtLT5wcm9z dXBwb3J0KQorCQl7CisJCQlPaWQJCQlhcmd0eXBlc1sxXTsKKworCQkJLyoKKwkJCSAqIFdlIHNo b3VsZCBxdWFsaWZ5IHRoZSBzdXBwb3J0IGZ1bmN0aW9uJ3MgbmFtZSBpZiBpdCB3b3VsZG4ndCBi ZQorCQkJICogcmVzb2x2ZWQgYnkgbG9va3VwIGluIHRoZSBjdXJyZW50IHNlYXJjaCBwYXRoLgor CQkJICovCisJCQlhcmd0eXBlc1swXSA9IElOVEVSTkFMT0lEOworCQkJYXBwZW5kX3N0cmluZ19v YmplY3QodG1wb2JqLCAiJXtuYW1lfXMiLAorCQkJCQkJCQkgZ2VuZXJhdGVfZnVuY3Rpb25fbmFt ZShwcm9jRm9ybS0+cHJvc3VwcG9ydCwgMSwKKwkJCQkJCQkJCQkJCQkJTklMLCBhcmd0eXBlcywK KwkJCQkJCQkJCQkJCQkJZmFsc2UsIE5VTEwsCisJCQkJCQkJCQkJCQkJCUVYUFJfS0lORF9OT05F KSk7CisJCX0KKwkJZWxzZQorCQkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQi LCBmYWxzZSk7CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlRnVuYywgIiV7c3VwcG9y dH1zIiwgdG1wb2JqKTsKKwl9CisKKwlmb3JlYWNoKGNlbGwsIG5vZGUtPm9wdGlvbnMpCisJewor CQlEZWZFbGVtCSpkZWZlbCA9IChEZWZFbGVtICopIGxmaXJzdChjZWxsKTsKKwkJT2JqVHJlZQkg ICAqdG1wb2JqOworCisJCWlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJzZXQiKSA9PSAwKQor CQl7CisJCQlWYXJpYWJsZVNldFN0bXQgKnNzdG10ID0gKFZhcmlhYmxlU2V0U3RtdCAqKSBkZWZl bC0+YXJnOworCQkJY2hhciAqdmFsdWUgPSBFeHRyYWN0U2V0VmFyaWFibGVBcmdzKHNzdG10KTsK KworCQkJdG1wb2JqID0gZGVwYXJzZV9GdW5jdGlvblNldChzc3RtdC0+a2luZCwgc3N0bXQtPm5h bWUsIHZhbHVlKTsKKwkJCXNldHMgPSBsYXBwZW5kKHNldHMsIG5ld19vYmplY3Rfb2JqZWN0KHRt cG9iaikpOworCQl9CisJfQorCWFwcGVuZF9hcnJheV9vYmplY3QoY3JlYXRlRnVuYywgIiV7c2V0 X29wdGlvbnM6IH1zIiwgc2V0cyk7CisKKwkvKiBBZGQgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24g Ki8KKwkodm9pZCkgU3lzQ2FjaGVHZXRBdHRyKFBST0NPSUQsIHByb2NUdXAsIEFudW1fcGdfcHJv Y19wcm9zcWxib2R5LCAmaXNudWxsKTsKKwlpZiAocHJvY0Zvcm0tPnByb2xhbmcgPT0gU1FMbGFu Z3VhZ2VJZCAmJiAhaXNudWxsKQorCXsKKwkJU3RyaW5nSW5mb0RhdGEgYnVmOworCisJCWluaXRT dHJpbmdJbmZvKCZidWYpOworCQlwcmludF9mdW5jdGlvbl9zcWxib2R5KCZidWYsIHByb2NUdXAp OworCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUZ1bmMsICIle2RlZmluaXRpb259cyIs IGJ1Zi5kYXRhKTsKKwl9CisJZWxzZSBpZiAocHJvYmluID09IE5VTEwpCisJeworCQlhcHBlbmRf c3RyaW5nX29iamVjdChjcmVhdGVGdW5jLCAiQVMgJXtkZWZpbml0aW9ufUwiLAorCQkJCQkJCSBz b3VyY2UpOworCX0KKwllbHNlCisJeworCQlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVGdW5j LCAiQVMgJXtvYmpmaWxlfUwiLCBwcm9iaW4pOworCQlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVh dGVGdW5jLCAiLCAle3N5bWJvbH1MIiwgc291cmNlKTsKKwl9CisKKwlSZWxlYXNlU3lzQ2FjaGUo bGFuZ1R1cCk7CisJUmVsZWFzZVN5c0NhY2hlKHByb2NUdXApOworCisJcmV0dXJuIGNyZWF0ZUZ1 bmM7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ1JFQVRFIE9QRVJBVE9SIENMQVNTIGNvbW1hbmQu CisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlT3BDbGFzc1N0bXQoQ29sbGVj dGVkQ29tbWFuZCAqY21kKQoreworCU9pZAkJCW9wY29pZCA9IGNtZC0+ZC5jcmVhdGVvcGMuYWRk cmVzcy5vYmplY3RJZDsKKwlIZWFwVHVwbGUgICBvcGNUdXA7CisJSGVhcFR1cGxlICAgb3BmVHVw OworCUZvcm1fcGdfb3BmYW1pbHkgb3BmRm9ybTsKKwlGb3JtX3BnX29wY2xhc3Mgb3BjRm9ybTsK KwlPYmpUcmVlCSAgICpzdG10OworCU9ialRyZWUJICAgKnRtcG9iajsKKwlMaXN0CSAgICpsaXN0 OworCUxpc3RDZWxsICAgKmNlbGw7CisKKwkvKiBEb24ndCBkZXBhcnNlIHNxbCBjb21tYW5kcyBn ZW5lcmF0ZWQgd2hpbGUgY3JlYXRpbmcgZXh0ZW5zaW9uICovCisJaWYgKGNtZC0+aW5fZXh0ZW5z aW9uKQorCQlyZXR1cm4gTlVMTDsKKworCW9wY1R1cCA9IFNlYXJjaFN5c0NhY2hlMShDTEFPSUQs IE9iamVjdElkR2V0RGF0dW0ob3Bjb2lkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKG9wY1R1 cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBvcGNsYXNzIHdpdGgg T0lEICV1Iiwgb3Bjb2lkKTsKKwlvcGNGb3JtID0gKEZvcm1fcGdfb3BjbGFzcykgR0VUU1RSVUNU KG9wY1R1cCk7CisKKwlvcGZUdXAgPSBTZWFyY2hTeXNDYWNoZTEoT1BGQU1JTFlPSUQsIG9wY0Zv cm0tPm9wY2ZhbWlseSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKG9wZlR1cCkpCisJCWVsb2co RVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBvcGVyYXRvciBmYW1pbHkgd2l0aCBPSUQg JXUiLCBvcGNGb3JtLT5vcGNmYW1pbHkpOworCW9wZkZvcm0gPSAoRm9ybV9wZ19vcGZhbWlseSkg R0VUU1RSVUNUKG9wZlR1cCk7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBD UkVBVEUgT1BFUkFUT1IgQ0xBU1MgJXtpZGVudGl0eX1EICV7ZGVmYXVsdH1zIEZPUiBUWVBFICV7 dHlwZX1UIFVTSU5HCisJICogJXthbW5hbWV9SSAle29wZmFtaWx5fXMgQVMgJXtpdGVtczosIH1z CisJICovCisKKwlzdG10ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBPUEVSQVRPUiBDTEFTUyAl e2lkZW50aXR5fUQiLCAxLAorCQkJCQkJICAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJ CQkJICBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUob3BjRm9ybS0+b3BjbmFtZXNwYWNlLAorCQkJ CQkJCQkJCQkJICAgTmFtZVN0cihvcGNGb3JtLT5vcGNuYW1lKSkpOworCisJLyogQWRkIHRoZSBE RUZBVUxUIGNsYXVzZSAqLworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHN0bXQsICIle2RlZmF1bHR9 cyIsCisJCQkJCQkgb3BjRm9ybS0+b3BjZGVmYXVsdCA/ICJERUZBVUxUIiA6ICIiKTsKKworCS8q IEFkZCB0aGUgRk9SIFRZUEUgY2xhdXNlICovCisJYXBwZW5kX29iamVjdF9vYmplY3Qoc3RtdCwg IkZPUiBUWVBFICV7dHlwZX1UIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShvcGNGb3Jt LT5vcGNpbnR5cGUsIC0xKSk7CisKKwkvKiBBZGQgdGhlIFVTSU5HIGNsYXVzZSAqLworCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KHN0bXQsICJVU0lORyAle2FtbmFtZX1JIiwgZ2V0X2FtX25hbWUob3Bj Rm9ybS0+b3BjbWV0aG9kKSk7CisKKwkvKgorCSAqIEFkZCB0aGUgRkFNSUxZIGNsYXVzZTsgYnV0 IGlmIGl0IGhhcyB0aGUgc2FtZSBuYW1lIGFuZCBuYW1lc3BhY2UgYXMgdGhlCisJICogb3BjbGFz cywgdGhlbiBoYXZlIGl0IGV4cGFuZCB0byBlbXB0eSwgYmVjYXVzZSBpdCB3b3VsZCBjYXVzZSBh IGZhaWx1cmUKKwkgKiBpZiB0aGUgb3BmYW1pbHkgd2FzIGNyZWF0ZWQgaW50ZXJuYWxseS4KKwkg Ki8KKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiRkFNSUxZICV7b3BmYW1pbHl9RCIsIDEsCisJ CQkJCQkgIm9wZmFtaWx5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWUob3BmRm9ybS0+b3BmbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBOYW1lU3RyKG9w ZkZvcm0tPm9wZm5hbWUpKSk7CisKKwlpZiAoc3RyY21wKE5hbWVTdHIob3BmRm9ybS0+b3BmbmFt ZSksIE5hbWVTdHIob3BjRm9ybS0+b3BjbmFtZSkpID09IDAgJiYKKwkJb3BmRm9ybS0+b3BmbmFt ZXNwYWNlID09IG9wY0Zvcm0tPm9wY25hbWVzcGFjZSkKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRt cG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChzdG10LCAi JXtvcGZhbWlseX1zIiwgIHRtcG9iaik7CisKKwkvKgorCSAqIEFkZCB0aGUgaW5pdGlhbCBpdGVt IGxpc3QuICBOb3RlIHdlIGFsd2F5cyBhZGQgdGhlIFNUT1JBR0UgY2xhdXNlLCBldmVuCisJICog d2hlbiBpdCBpcyBpbXBsaWNpdCBpbiB0aGUgb3JpZ2luYWwgY29tbWFuZC4KKwkgKi8KKwl0bXBv YmogPSBuZXdfb2JqdHJlZSgiU1RPUkFHRSIpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9i aiwgIiV7dHlwZX1UIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShvcGNGb3JtLT5vcGNr ZXl0eXBlICE9IEludmFsaWRPaWQgPworCQkJCQkJCQkJCQkgIG9wY0Zvcm0tPm9wY2tleXR5cGUg OiBvcGNGb3JtLT5vcGNpbnR5cGUsCisJCQkJCQkJCQkJCSAgLTEpKTsKKwlsaXN0ID0gbGlzdF9t YWtlMShuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKworCS8qIEFkZCB0aGUgZGVjbGFyZWQg b3BlcmF0b3JzICovCisJZm9yZWFjaChjZWxsLCBjbWQtPmQuY3JlYXRlb3BjLm9wZXJhdG9ycykK Kwl7CisJCU9wRmFtaWx5TWVtYmVyICpvcGVyID0gbGZpcnN0KGNlbGwpOworCQlPYmpUcmVlCSAg ICp0bXBvYmo7CisKKwkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIk9QRVJBVE9SICV7bnVtfW4g JXtvcGVyYXRvcn1PKCV7bHR5cGV9VCwgJXtydHlwZX1UKSIsCisJCQkJCQkJIDQsCisJCQkJCQkJ ICJudW0iLCBPYmpUeXBlSW50ZWdlciwgb3Blci0+bnVtYmVyLAorCQkJCQkJCSAib3BlcmF0b3Ii LCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoT3Bl cmF0b3JSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgb3Blci0+b2JqZWN0KSwKKwkJCQkJCQki bHR5cGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl90eXBlKG9wZXIt PmxlZnR0eXBlLCAtMSksCisJCQkJCQkJInJ0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQlu ZXdfb2JqdHJlZV9mb3JfdHlwZShvcGVyLT5yaWdodHR5cGUsIC0xKSk7CisKKwkJLyogQWRkIHRo ZSBGT1IgU0VBUkNIIC8gRk9SIE9SREVSIEJZIGNsYXVzZSAqLworCQlpZiAob3Blci0+c29ydGZh bWlseSA9PSBJbnZhbGlkT2lkKQorCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtw dXJwb3NlfXMiLCAiRk9SIFNFQVJDSCIpOworCQllbHNlCisJCXsKKwkJCU9ialRyZWUJICAgKnRt cG9iajI7CisKKwkJCXRtcG9iajIgPSBuZXdfb2JqdHJlZV9WQSgiRk9SIE9SREVSIEJZICV7b3Bm YW1pbHl9RCIsIDApOworCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqMiwgIm9wZmFtaWx5 IiwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChPcGVyYXRvckZhbWlseVJl bGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkgb3Blci0+c29ydGZhbWlseSkpOworCQkJYXBwZW5k X29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtwdXJwb3NlfXMiLCB0bXBvYmoyKTsKKwkJfQorCisJ CWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCX0KKwor CS8qIEFkZCB0aGUgZGVjbGFyZWQgc3VwcG9ydCBmdW5jdGlvbnMgKi8KKwlmb3JlYWNoKGNlbGws IGNtZC0+ZC5jcmVhdGVvcGMucHJvY2VkdXJlcykKKwl7CisJCU9wRmFtaWx5TWVtYmVyICpwcm9j ID0gbGZpcnN0KGNlbGwpOworCQlPYmpUcmVlCSAgICp0bXBvYmo7CisJCUhlYXBUdXBsZQlwcm9j VHVwOworCQlGb3JtX3BnX3Byb2MgcHJvY0Zvcm07CisJCU9pZAkJICAgKnByb2FyZ3R5cGVzOwor CQlMaXN0CSAgICphcmdsaXN0ID0gTklMOworCQlpbnQJCQlpOworCisJCXByb2NUdXAgPSBTZWFy Y2hTeXNDYWNoZTEoUFJPQ09JRCwgT2JqZWN0SWRHZXREYXR1bShwcm9jLT5vYmplY3QpKTsKKwkJ aWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHByb2NUdXApKQorCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxv b2t1cCBmYWlsZWQgZm9yIHByb2NlZHVyZSAldSIsIHByb2MtPm9iamVjdCk7CisJCXByb2NGb3Jt ID0gKEZvcm1fcGdfcHJvYykgR0VUU1RSVUNUKHByb2NUdXApOworCisJCXRtcG9iaiA9IG5ld19v Ymp0cmVlX1ZBKCJGVU5DVElPTiAle251bX1uICgle2x0eXBlfVQsICV7cnR5cGV9VCkgJXtmdW5j dGlvbn1EIiwKKwkJCQkJCQkgNCwKKwkJCQkJCQkgIm51bSIsIE9ialR5cGVJbnRlZ2VyLCBwcm9j LT5udW1iZXIsCisJCQkJCQkJICJsdHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJIG5ld19v Ymp0cmVlX2Zvcl90eXBlKHByb2MtPmxlZnR0eXBlLCAtMSksCisJCQkJCQkJICJydHlwZSIsIE9i alR5cGVPYmplY3QsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHByb2MtPnJpZ2h0dHlw ZSwgLTEpLAorCQkJCQkJCSAiZnVuY3Rpb24iLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCSBuZXdf b2JqdHJlZV9mb3JfcXVhbG5hbWUocHJvY0Zvcm0tPnByb25hbWVzcGFjZSwKKwkJCQkJCQkJCQkJ CQkgIE5hbWVTdHIocHJvY0Zvcm0tPnByb25hbWUpKSk7CisKKwkJcHJvYXJndHlwZXMgPSBwcm9j Rm9ybS0+cHJvYXJndHlwZXMudmFsdWVzOworCQlmb3IgKGkgPSAwOyBpIDwgcHJvY0Zvcm0tPnBy b25hcmdzOyBpKyspCisJCXsKKwkJCU9ialRyZWUJICAgKmFyZzsKKworCQkJYXJnID0gbmV3X29i anRyZWVfZm9yX3R5cGUocHJvYXJndHlwZXNbaV0sIC0xKTsKKwkJCWFyZ2xpc3QgPSBsYXBwZW5k KGFyZ2xpc3QsIG5ld19vYmplY3Rfb2JqZWN0KGFyZykpOworCQl9CisKKwkJYXBwZW5kX2Zvcm1h dF9zdHJpbmcodG1wb2JqLCAiKCIpOworCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcG9iaiwgIiV7 YXJndHlwZXM6LCB9VCIsIGFyZ2xpc3QpOworCQlhcHBlbmRfZm9ybWF0X3N0cmluZyh0bXBvYmos ICIpIik7CisKKwkJUmVsZWFzZVN5c0NhY2hlKHByb2NUdXApOworCisJCWxpc3QgPSBsYXBwZW5k KGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCX0KKworCWFwcGVuZF9hcnJheV9v YmplY3Qoc3RtdCwgIkFTICV7aXRlbXM6LCB9cyIsIGxpc3QpOworCisJUmVsZWFzZVN5c0NhY2hl KG9wZlR1cCk7CisJUmVsZWFzZVN5c0NhY2hlKG9wY1R1cCk7CisKKwlyZXR1cm4gc3RtdDsKK30K KworLyoKKyAqIERlcGFyc2UgYSBDcmVhdGVUcmlnU3RtdCAoQ1JFQVRFIE9QRVJBVE9SIEZBTUlM WSkKKyAqCisgKiBHaXZlbiBhIHRyaWdnZXIgT0lEIGFuZCB0aGUgcGFyc2V0cmVlIHRoYXQgY3Jl YXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24g Y29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVPcEZhbWlseShP aWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlIZWFwVHVwbGUgICBvcGZUdXA7CisJ SGVhcFR1cGxlICAgYW1UdXA7CisJRm9ybV9wZ19vcGZhbWlseSBvcGZGb3JtOworCUZvcm1fcGdf YW0gIGFtRm9ybTsKKwlPYmpUcmVlCSAgICpjb3BmU3RtdDsKKworCW9wZlR1cCA9IFNlYXJjaFN5 c0NhY2hlMShPUEZBTUlMWU9JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICgh SGVhcFR1cGxlSXNWYWxpZChvcGZUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZh aWxlZCBmb3Igb3BlcmF0b3IgZmFtaWx5IHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCW9wZkZv cm0gPSAoRm9ybV9wZ19vcGZhbWlseSkgR0VUU1RSVUNUKG9wZlR1cCk7CisKKwlhbVR1cCA9IFNl YXJjaFN5c0NhY2hlMShBTU9JRCwgT2JqZWN0SWRHZXREYXR1bShvcGZGb3JtLT5vcGZtZXRob2Qp KTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoYW1UdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUg bG9va3VwIGZhaWxlZCBmb3IgYWNjZXNzIG1ldGhvZCAldSIsCisJCQkgb3BmRm9ybS0+b3BmbWV0 aG9kKTsKKwlhbUZvcm0gPSAoRm9ybV9wZ19hbSkgR0VUU1RSVUNUKGFtVHVwKTsKKworCWNvcGZT dG10ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBPUEVSQVRPUiBGQU1JTFkgJXtpZGVudGl0eX1E IFVTSU5HICV7YW1uYW1lfUkiLAorCQkJCQkJCSAgMiwKKwkJCQkJCQkgICJpZGVudGl0eSIsIE9i alR5cGVPYmplY3QsCisJCQkJCQkJICBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUob3BmRm9ybS0+ b3BmbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCSAgIE5hbWVTdHIob3BmRm9ybS0+b3BmbmFtZSkp LAorCQkJCQkJCSAgImFtbmFtZSIsIE9ialR5cGVTdHJpbmcsIE5hbWVTdHIoYW1Gb3JtLT5hbW5h bWUpKTsKKworCVJlbGVhc2VTeXNDYWNoZShhbVR1cCk7CisJUmVsZWFzZVN5c0NhY2hlKG9wZlR1 cCk7CisKKwlyZXR1cm4gY29wZlN0bXQ7Cit9CisKK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2Vf Q3JlYXRlUG9saWN5U3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVh dGVQb2xpY3lTdG10ICpub2RlID0gKENyZWF0ZVBvbGljeVN0bXQgKikgcGFyc2V0cmVlOworCU9i alRyZWUJICAgKnBvbGljeTsKKworCXBvbGljeSA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgUE9M SUNZICV7aWRlbnRpdHl9SSIsIDEsCisJCQkJCQkJImlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywg bm9kZS0+cG9saWN5X25hbWUpOworCisJLyogYWRkIHRoZSByZXN0IG9mIHRoZSBzdHVmZiAqLwor CWFkZF9wb2xpY3lfY2xhdXNlcyhwb2xpY3ksIG9iamVjdElkLCBub2RlLT5yb2xlcywgISFub2Rl LT5xdWFsLAorCQkJCQkgICAhIW5vZGUtPndpdGhfY2hlY2spOworCisJcmV0dXJuIHBvbGljeTsK K30KKworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlclBvbGljeVN0bXQoT2lkIG9iamVj dElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQWx0ZXJQb2xpY3lTdG10ICpub2RlID0gKEFsdGVy UG9saWN5U3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZQkgICAqcG9saWN5OworCisJcG9saWN5 ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIFBPTElDWSAle2lkZW50aXR5fUkiLCAxLAorCQkJCQkJ CSJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPnBvbGljeV9uYW1lKTsKKworCS8qIGFk ZCB0aGUgcmVzdCBvZiB0aGUgc3R1ZmYgKi8KKwlhZGRfcG9saWN5X2NsYXVzZXMocG9saWN5LCBv YmplY3RJZCwgbm9kZS0+cm9sZXMsICEhbm9kZS0+cXVhbCwKKwkJCQkJICAgISFub2RlLT53aXRo X2NoZWNrKTsKKworCXJldHVybiBwb2xpY3k7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRl U2NoZW1hU3RtdC4KKyAqCisgKiBHaXZlbiBhIHNjaGVtYSBPSUQgYW5kIHRoZSBwYXJzZXRyZWUg dGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBj cmVhdGlvbiBjb21tYW5kLgorICoKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVh dGVTY2hlbWFTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZVNj aGVtYVN0bXQgKm5vZGUgPSAoQ3JlYXRlU2NoZW1hU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJl ZQkJCSAqY3JlYXRlU2NoZW1hOworCU9ialRyZWUJCQkgKmF1dGg7CisKKwkvKgorCSAqIFZlcmJv c2Ugc3ludGF4CisJICoKKwkgKiBDUkVBVEUgU0NIRU1BICV7aWZfbm90X2V4aXN0c31zICV7bmFt ZX1JICV7YXV0aG9yaXphdGlvbn1zCisJICovCisJY3JlYXRlU2NoZW1hID0gbmV3X29ianRyZWUo IkNSRUFURSBTQ0hFTUEiKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZVNjaGVtYSwg IiV7aWZfbm90X2V4aXN0c31zIiwKKwkJCQkJCSBub2RlLT5pZl9ub3RfZXhpc3RzID8gIklGIE5P VCBFWElTVFMiIDogIiIpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlU2NoZW1hLCAi JXtuYW1lfUkiLCBub2RlLT5zY2hlbWFuYW1lKTsKKworCWF1dGggPSBuZXdfb2JqdHJlZSgiQVVU SE9SSVpBVElPTiIpOworCWlmIChub2RlLT5hdXRocm9sZSkKKwkJYXBwZW5kX3N0cmluZ19vYmpl Y3QoYXV0aCwgIiV7YXV0aG9yaXphdGlvbl9yb2xlfUkiLAorCQkJCQkJCSBnZXRfcm9sZXNwZWNf bmFtZShub2RlLT5hdXRocm9sZSkpOworCWVsc2UKKwl7CisJCWFwcGVuZF9udWxsX29iamVjdChh dXRoLCAiJXthdXRob3JpemF0aW9uX3JvbGV9SSAiKTsKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KGF1 dGgsICJwcmVzZW50IiwgZmFsc2UpOworCX0KKwlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVT Y2hlbWEsICIle2F1dGhvcml6YXRpb259cyIsIGF1dGgpOworCisJcmV0dXJuIGNyZWF0ZVNjaGVt YTsKK30KKworLyoKKyAqIFJldHVybiB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBhIGRvbWFpbi4KKyAq Lworc3RhdGljIGNoYXIgKgorRG9tYWluR2V0RGVmYXVsdChIZWFwVHVwbGUgZG9tVHVwKQorewor CURhdHVtCWRlZjsKKwlOb2RlICAgKmRlZnZhbDsKKwljaGFyICAgKmRlZnN0cjsKKwlib29sCWlz bnVsbDsKKworCWRlZiA9IFN5c0NhY2hlR2V0QXR0cihUWVBFT0lELCBkb21UdXAsIEFudW1fcGdf dHlwZV90eXBkZWZhdWx0YmluLAorCQkJCQkJCSAmaXNudWxsKTsKKwlpZiAoaXNudWxsKQorCQll bG9nKEVSUk9SLCAiZG9tYWluIFwiJXNcIiBkb2VzIG5vdCBoYXZlIGEgZGVmYXVsdCB2YWx1ZSIs CisJCQkgTmFtZVN0cigoKEZvcm1fcGdfdHlwZSkgR0VUU1RSVUNUKGRvbVR1cCkpLT50eXBuYW1l KSk7CisJZGVmdmFsID0gc3RyaW5nVG9Ob2RlKFRleHREYXR1bUdldENTdHJpbmcoZGVmKSk7CisJ ZGVmc3RyID0gZGVwYXJzZV9leHByZXNzaW9uKGRlZnZhbCwgTlVMTCAvKiBkcGNvbnRleHQ/ICov LAorCQkJCQkJCQkJICAgZmFsc2UsIGZhbHNlKTsKKworCXJldHVybiBkZWZzdHI7Cit9CisKKy8q CisgKiBEZXBhcnNlIGEgQWx0ZXJEb21haW5TdG10LgorICovCitzdGF0aWMgT2JqVHJlZSAqCitk ZXBhcnNlX0FsdGVyRG9tYWluU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSwKKwkJ CQkJCU9iamVjdEFkZHJlc3MgY29uc3RyYWludEFkZHIpCit7CisJQWx0ZXJEb21haW5TdG10ICpu b2RlID0gKEFsdGVyRG9tYWluU3RtdCAqKSBwYXJzZXRyZWU7CisJSGVhcFR1cGxlCWRvbVR1cDsK KwlGb3JtX3BnX3R5cGUgZG9tRm9ybTsKKwlPYmpUcmVlCSAgICphbHRlckRvbTsKKwljaGFyCSAg ICpmbXQ7CisJY29uc3QgY2hhciAqdHlwZTsKKworCS8qIEFMVEVSIERPTUFJTiBEUk9QIENPTlNU UkFJTlQgaXMgaGFuZGxlZCBieSB0aGUgRFJPUCBzdXBwb3J0IGNvZGUgKi8KKwlpZiAobm9kZS0+ c3VidHlwZSA9PSAnWCcpCisJCXJldHVybiBOVUxMOworCisJZG9tVHVwID0gU2VhcmNoU3lzQ2Fj aGUxKFRZUEVPSUQsIG9iamVjdElkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoZG9tVHVwKSkK KwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGRvbWFpbiB3aXRoIE9JRCAl dSIsCisJCQkgb2JqZWN0SWQpOworCWRvbUZvcm0gPSAoRm9ybV9wZ190eXBlKSBHRVRTVFJVQ1Qo ZG9tVHVwKTsKKworCXN3aXRjaCAobm9kZS0+c3VidHlwZSkKKwl7CisJCWNhc2UgJ1QnOgorCQkJ LyogU0VUIERFRkFVTFQgLyBEUk9QIERFRkFVTFQgKi8KKwkJCWlmIChub2RlLT5kZWYgPT0gTlVM TCkKKwkJCXsKKwkJCQlmbXQgPSAiQUxURVIgRE9NQUlOIjsKKwkJCQl0eXBlID0gImRyb3AgZGVm YXVsdCI7CisJCQkJYWx0ZXJEb20gPSBuZXdfb2JqdHJlZV9WQShmbXQsIDEsICJ0eXBlIiwgT2Jq VHlwZVN0cmluZywgdHlwZSk7CisJCQkJYXBwZW5kX29iamVjdF9vYmplY3QoYWx0ZXJEb20sICIl e2lkZW50aXR5fUQgRFJPUCBERUZBVUxUIiwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVh bG5hbWUoZG9tRm9ybS0+dHlwbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCQkJICBOYW1lU3RyKGRv bUZvcm0tPnR5cG5hbWUpKSk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJZm10ID0gIkFMVEVS IERPTUFJTiI7CisJCQkJdHlwZSA9ICJzZXQgZGVmYXVsdCI7CisJCQkJYWx0ZXJEb20gPSBuZXdf b2JqdHJlZV9WQShmbXQsIDEsICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgdHlwZSk7CisJCQkJYXBw ZW5kX29iamVjdF9vYmplY3QoYWx0ZXJEb20sICIle2lkZW50aXR5fUQgU0VUIERFRkFVTFQiLAor CQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShkb21Gb3JtLT50eXBuYW1lc3BhY2Us CisJCQkJCQkJCQkJCQkJCQkgIE5hbWVTdHIoZG9tRm9ybS0+dHlwbmFtZSkpKTsKKwkJCQlhcHBl bmRfc3RyaW5nX29iamVjdChhbHRlckRvbSwgIiV7ZGVmYXVsdH1zIiwgRG9tYWluR2V0RGVmYXVs dChkb21UdXApKTsKKwkJCX0KKworCQkJYnJlYWs7CisJCWNhc2UgJ04nOgorCQkJLyogRFJPUCBO T1QgTlVMTCAqLworCQkJZm10ID0gIkFMVEVSIERPTUFJTiI7CisJCQl0eXBlID0gImRyb3Agbm90 IG51bGwiOworCQkJYWx0ZXJEb20gPSBuZXdfb2JqdHJlZV9WQShmbXQsIDEsICJ0eXBlIiwgT2Jq VHlwZVN0cmluZywgdHlwZSk7CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdChhbHRlckRvbSwgIiV7 aWRlbnRpdHl9RCBEUk9QIE5PVCBOVUxMIiwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFs bmFtZShkb21Gb3JtLT50eXBuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJCSAgTmFtZVN0cihkb21G b3JtLT50eXBuYW1lKSkpOworCQkJYnJlYWs7CisJCWNhc2UgJ08nOgorCQkJLyogU0VUIE5PVCBO VUxMICovCisJCQlmbXQgPSAiQUxURVIgRE9NQUlOIjsKKwkJCXR5cGUgPSAic2V0IG5vdCBudWxs IjsKKwkJCWFsdGVyRG9tID0gbmV3X29ianRyZWVfVkEoZm10LCAxLCAidHlwZSIsIE9ialR5cGVT dHJpbmcsIHR5cGUpOworCQkJYXBwZW5kX29iamVjdF9vYmplY3QoYWx0ZXJEb20sICIle2lkZW50 aXR5fUQgU0VUIE5PVCBOVUxMIiwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShk b21Gb3JtLT50eXBuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJCSAgTmFtZVN0cihkb21Gb3JtLT50 eXBuYW1lKSkpOworCQkJYnJlYWs7CisJCWNhc2UgJ0MnOgorCQkJLyogQUREIENPTlNUUkFJTlQu ICBPbmx5IENIRUNLIGNvbnN0cmFpbnRzIGFyZSBzdXBwb3J0ZWQgYnkgZG9tYWlucyAqLworCQkJ Zm10ID0gIkFMVEVSIERPTUFJTiI7CisJCQl0eXBlID0gImFkZCBjb25zdHJhaW50IjsKKwkJCWFs dGVyRG9tID0gbmV3X29ianRyZWVfVkEoZm10LCAxLCAidHlwZSIsIE9ialR5cGVTdHJpbmcsIHR5 cGUpOworCQkJYXBwZW5kX29iamVjdF9vYmplY3QoYWx0ZXJEb20sICIle2lkZW50aXR5fUQiLAor CQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGRvbUZvcm0tPnR5cG5hbWVzcGFjZSwK KwkJCQkJCQkJCQkJCQkJICBOYW1lU3RyKGRvbUZvcm0tPnR5cG5hbWUpKSk7CisJCQkvKiBhIG5l dyBjb25zdHJhaW50IGhhcyBhIG5hbWUgYW5kIGRlZmluaXRpb24gKi8KKwkJCWFwcGVuZF9zdHJp bmdfb2JqZWN0KGFsdGVyRG9tLCAiQUREIENPTlNUUkFJTlQgJXtjb25zdHJhaW50X25hbWV9cyIs CisJCQkJCQkJCSBnZXRfY29uc3RyYWludF9uYW1lKGNvbnN0cmFpbnRBZGRyLm9iamVjdElkKSk7 CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChhbHRlckRvbSwgIiV7ZGVmaW5pdGlvbn1zIiwKKwkJ CQkJCQkJIHBnX2dldF9jb25zdHJhaW50ZGVmX2NvbW1hbmRfc2ltcGxlKGNvbnN0cmFpbnRBZGRy Lm9iamVjdElkKSk7CisJCQlicmVhazsKKwkJY2FzZSAnVic6CisJCQkvKiBWQUxJREFURSBDT05T VFJBSU5UICovCisJCQlmbXQgPSAiQUxURVIgRE9NQUlOIjsKKwkJCXR5cGUgPSAidmFsaWRhdGUg Y29uc3RyYWludCI7CisKKwkJCS8qCisJCQkgKiBQcm9jZXNzIHN1YnR5cGU9c3BlY2lmaWMgb3B0 aW9ucy4gVmFsaWRhdGlvbiBhIGNvbnN0cmFpbnQKKwkJCSAqIHJlcXVpcmVzIGl0cyBuYW1lLgor CQkJICovCisJCQlhbHRlckRvbSA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMSwgInR5cGUiLCBPYmpU eXBlU3RyaW5nLCB0eXBlKTsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyRG9tLCAiJXtp ZGVudGl0eX1EIiwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShkb21Gb3JtLT50 eXBuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJCSAgTmFtZVN0cihkb21Gb3JtLT50eXBuYW1lKSkp OworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QoYWx0ZXJEb20sICJWQUxJREFURSBDT05TVFJBSU5U ICV7Y29uc3RyYWludF9uYW1lfXMiLCBub2RlLT5uYW1lKTsKKworCQkJYnJlYWs7CisJCWRlZmF1 bHQ6CisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBzdWJ0eXBlICVjIiwgbm9kZS0+c3VidHlwZSk7 CisJfQorCisJLyogZG9uZSAqLworCVJlbGVhc2VTeXNDYWNoZShkb21UdXApOworCisJcmV0dXJu IGFsdGVyRG9tOworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZVNlcVN0bXQuCisgKgorICog R2l2ZW4gYSBzZXF1ZW5jZSBPSUQgYW5kIHRoZSBwYXJzZXRyZWUgdGhhdCBjcmVhdGUgaXQsIHJl dHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisg Ki8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlU2VxU3RtdChPaWQgb2JqZWN0SWQs IE5vZGUgKnBhcnNldHJlZSkKK3sKKwlPYmpUcmVlCSpjcmVhdGVTZXE7CisJT2JqVHJlZQkqdG1w b2JqOworCVJlbGF0aW9uCXJlbGF0aW9uOworCUZvcm1fcGdfc2VxdWVuY2VfZGF0YSBzZXFkYXRh OworCUxpc3QJICAgKmVsZW1zID0gTklMOworCUZvcm1fcGdfc2VxdWVuY2Ugc2VxZm9ybTsKKwlS ZWxhdGlvbglyZWw7CisJSGVhcFR1cGxlCXNlcXR1cGxlOworCUNyZWF0ZVNlcVN0bXQgKmNyZWF0 ZVNlcVN0bXQgPSAoQ3JlYXRlU2VxU3RtdCAqKSBwYXJzZXRyZWU7CisKKwkvKgorCSAqIFNlcXVl bmNlIGZvciBJREVOVElUWSBDT0xVTU4gb3V0cHV0IHNlcGFyYXRlbHkodmlhIENSRUFURSBUQUJM RSBvcgorCSAqIEFMVEVSIFRBQkxFKTsgcmV0dXJuIGVtcHR5IGhlcmUuCisJICovCisJaWYgKGNy ZWF0ZVNlcVN0bXQtPmZvcl9pZGVudGl0eSkKKwkJcmV0dXJuIE5VTEw7CisKKwlzZXFkYXRhID0g Z2V0X3NlcXVlbmNlX3ZhbHVlcyhvYmplY3RJZCk7CisKKwlyZWxhdGlvbiA9IHJlbGF0aW9uX29w ZW4ob2JqZWN0SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJcmVsID0gdGFibGVfb3BlbihTZXF1ZW5j ZVJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCXNlcXR1cGxlID0gU2VhcmNoU3lzQ2Fj aGVDb3B5MShTRVFSRUxJRCwKKwkJCQkJCQkJICAgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkp OworCWlmICghSGVhcFR1cGxlSXNWYWxpZChzZXF0dXBsZSkpCisJCWVsb2coRVJST1IsICJjYWNo ZSBsb29rdXAgZmFpbGVkIGZvciBzZXF1ZW5jZSAldSIsCisJCQkgb2JqZWN0SWQpOworCisJc2Vx Zm9ybSA9IChGb3JtX3BnX3NlcXVlbmNlKSBHRVRTVFJVQ1Qoc2VxdHVwbGUpOworCisJLyoKKwkg KiBWZXJib3NlIHN5bnRheAorCSAqCisJICogQ1JFQVRFICV7cGVyc2lzdGVuY2V9cyBTRVFVRU5D RSAle2lkZW50aXR5fUQKKwkgKi8KKwljcmVhdGVTZXEgPSBuZXdfb2JqdHJlZSgiQ1JFQVRFIik7 CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVTZXEsICIle3BlcnNpc3RlbmNlfXMiLAor CQkJCQkJIGdldF9wZXJzaXN0ZW5jZV9zdHIocmVsYXRpb24tPnJkX3JlbC0+cmVscGVyc2lzdGVu Y2UpKTsKKworCXRtcG9iaiA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShyZWxhdGlvbi0+cmRf cmVsLT5yZWxuYW1lc3BhY2UsCisJCQkJCQkJCSAgIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJl bGF0aW9uKSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU2VxLCAiU0VRVUVOQ0UgJXtp ZGVudGl0eX1EIiwgdG1wb2JqKTsKKworCS8qIERlZmluaXRpb24gZWxlbWVudHMgKi8KKwllbGVt cyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX0NhY2hlKGNyZWF0ZVNlcSwgc2VxZm9ybSwg ZmFsc2UpKTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX0N5Y2xlKGNyZWF0 ZVNlcSwgc2VxZm9ybSwgZmFsc2UpKTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2Vf U2VxX0luY3JlbWVudEJ5KGNyZWF0ZVNlcSwgc2VxZm9ybSwgZmFsc2UpKTsKKwllbGVtcyA9IGxh cHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX01pbnZhbHVlKGNyZWF0ZVNlcSwgc2VxZm9ybSwgZmFs c2UpKTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX01heHZhbHVlKGNyZWF0 ZVNlcSwgc2VxZm9ybSwgZmFsc2UpKTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2Vf U2VxX1N0YXJ0d2l0aChjcmVhdGVTZXEsIHNlcWZvcm0sIGZhbHNlKSk7CisJZWxlbXMgPSBsYXBw ZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9SZXN0YXJ0KGNyZWF0ZVNlcSwgc2VxZGF0YSkpOworCisJ LyogV2UgcHVycG9zZWZ1bGx5IGRvIG5vdCBlbWl0IE9XTkVEIEJZIGhlcmUgKi8KKwlhcHBlbmRf YXJyYXlfb2JqZWN0KGNyZWF0ZVNlcSwgIiV7ZGVmaW5pdGlvbjogfXMiLCBlbGVtcyk7CisKKwl0 YWJsZV9jbG9zZShyZWwsIFJvd0V4Y2x1c2l2ZUxvY2spOworCXJlbGF0aW9uX2Nsb3NlKHJlbGF0 aW9uLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJuIGNyZWF0ZVNlcTsKK30KKworLyoKKyAq IERlcGFyc2UgYSBDcmVhdGVTdG10IChDUkVBVEUgVEFCTEUpLgorICoKKyAqIEdpdmVuIGEgdGFi bGUgT0lEIGFuZCB0aGUgcGFyc2V0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRy ZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqLworc3RhdGljIE9i alRyZWUgKgorZGVwYXJzZV9DcmVhdGVTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVl KQoreworCUNyZWF0ZVN0bXQgKm5vZGUgPSAoQ3JlYXRlU3RtdCAqKSBwYXJzZXRyZWU7CisJUmVs YXRpb24JcmVsYXRpb24gPSByZWxhdGlvbl9vcGVuKG9iamVjdElkLCBBY2Nlc3NTaGFyZUxvY2sp OworCUxpc3QJICAgKmRwY29udGV4dDsKKwlPYmpUcmVlCSpjcmVhdGVTdG10OworCU9ialRyZWUJ KnRtcG9iajsKKwlMaXN0CSAgICpsaXN0ID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisKKwkv KgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBDUkVBVEUgJXtwZXJzaXN0ZW5jZX1zIFRB QkxFICV7aWZfbm90X2V4aXN0c31zICV7aWRlbnRpdHl9RCBbT0YKKwkgKiAle29mX3R5cGV9VCB8 IFBBUlRJVElPTiBPRiAle3BhcmVudF9pZGVudGl0eX1EXSAle3RhYmxlX2VsZW1lbnRzfXMKKwkg KiAle2luaGVyaXRzfXMgJXtwYXJ0aXRpb25fYnl9cyAle2FjY2Vzc19tZXRob2R9cyAle3dpdGhf Y2xhdXNlfXMKKwkgKiAle29uX2NvbW1pdH1zICV7dGFibGVzcGFjZX1zCisJICovCisJY3JlYXRl U3RtdCA9IG5ld19vYmp0cmVlKCJDUkVBVEUiKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNy ZWF0ZVN0bXQsICIle3BlcnNpc3RlbmNlfXMiLAorCQkJCQkJIGdldF9wZXJzaXN0ZW5jZV9zdHIo cmVsYXRpb24tPnJkX3JlbC0+cmVscGVyc2lzdGVuY2UpKTsKKworCWFwcGVuZF9mb3JtYXRfc3Ry aW5nKGNyZWF0ZVN0bXQsICJUQUJMRSIpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRl U3RtdCwgIiV7aWZfbm90X2V4aXN0c31zIiwKKwkJCQkJCSBub2RlLT5pZl9ub3RfZXhpc3RzID8g IklGIE5PVCBFWElTVFMiIDogIiIpOworCisJdG1wb2JqID0gbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lKHJlbGF0aW9uLT5yZF9yZWwtPnJlbG5hbWVzcGFjZSwKKwkJCQkJCQkJICAgUmVsYXRpb25H ZXRSZWxhdGlvbk5hbWUocmVsYXRpb24pKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVT dG10LCAiJXtpZGVudGl0eX1EIiwgdG1wb2JqKTsKKworCWRwY29udGV4dCA9IGRlcGFyc2VfY29u dGV4dF9mb3IoUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsYXRpb24pLAorCQkJCQkJCQkJb2Jq ZWN0SWQpOworCisJLyoKKwkgKiBUeXBlZCB0YWJsZXMgYW5kIHBhcnRpdGlvbnMgdXNlIGEgc2xp Z2h0bHkgZGlmZmVyZW50IGZvcm1hdCBzdHJpbmc6IHdlCisJICogbXVzdCBub3QgcHV0IHRhYmxl X2VsZW1lbnRzIHdpdGggcGFyZW50cyBkaXJlY3RseSBpbiB0aGUgZm10IHN0cmluZywKKwkgKiBi ZWNhdXNlIGlmIHRoZXJlIGFyZSBubyBvcHRpb25zIHRoZSBwYXJlbnMgbXVzdCBub3QgYmUgZW1p dHRlZDsgYW5kCisJICogYWxzbywgdHlwZWQgdGFibGVzIGRvIG5vdCBhbGxvdyBmb3IgaW5oZXJp dGFuY2UuCisJICovCisJaWYgKG5vZGUtPm9mVHlwZW5hbWUgfHwgbm9kZS0+cGFydGJvdW5kKQor CXsKKwkJTGlzdCAgICAgICAqdGFibGVlbHRzID0gTklMOworCisJCS8qCisJCSAqIFdlIGNhbid0 IHB1dCB0YWJsZSBlbGVtZW50cyBkaXJlY3RseSBpbiB0aGUgZm10IHN0cmluZyBhcyBhbiBhcnJh eQorCQkgKiBzdXJyb3VuZGVkIGJ5IHBhcmVucyBoZXJlLCBiZWNhdXNlIGFuIGVtcHR5IGNsYXVz ZSB3b3VsZCBjYXVzZSBhCisJCSAqIHN5bnRheCBlcnJvci4gIFRoZXJlZm9yZSwgd2UgdXNlIGFu IGluZGlyZWN0aW9uIGVsZW1lbnQgYW5kIHNldAorCQkgKiBwcmVzZW50PWZhbHNlIHdoZW4gdGhl cmUgYXJlIG5vIGVsZW1lbnRzLgorCQkgKi8KKwkJaWYgKG5vZGUtPm9mVHlwZW5hbWUpCisJCXsK KwkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX2Zvcl90eXBlKHJlbGF0aW9uLT5yZF9yZWwtPnJlbG9m dHlwZSwgLTEpOworCQkJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwgIk9GICV7b2Zf dHlwZX1UIiwgdG1wb2JqKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCUxpc3QgICAgICpwYXJlbnRz OworCQkJT2JqRWxlbSAgKmVsZW07CisKKwkJCXBhcmVudHMgPSBkZXBhcnNlX0luaFJlbGF0aW9u cyhvYmplY3RJZCk7CisJCQllbGVtID0gKE9iakVsZW0gKikgbGluaXRpYWwocGFyZW50cyk7CisK KwkJCUFzc2VydChsaXN0X2xlbmd0aChwYXJlbnRzKSA9PSAxKTsKKworCQkJYXBwZW5kX2Zvcm1h dF9zdHJpbmcoY3JlYXRlU3RtdCwgIlBBUlRJVElPTiBPRiIpOworCisJCQlhcHBlbmRfb2JqZWN0 X29iamVjdChjcmVhdGVTdG10LCAiJXtwYXJlbnRfaWRlbnRpdHl9RCIsCisJCQkJCQkJCSBlbGVt LT52YWx1ZS5vYmplY3QpOworCQl9CisKKwkJdGFibGVlbHRzID0gZGVwYXJzZV9UYWJsZUVsZW1l bnRzKHJlbGF0aW9uLCBub2RlLT50YWJsZUVsdHMsIGRwY29udGV4dCwKKwkJCQkJCQkJCQkgIHRy dWUsICAgICAgLyogdHlwZWQgdGFibGUgKi8KKwkJCQkJCQkJCQkgIGZhbHNlKTsgICAgLyogbm90 IGNvbXBvc2l0ZSAqLworCQl0YWJsZWVsdHMgPSBvYnRhaW5Db25zdHJhaW50cyh0YWJsZWVsdHMs IG9iamVjdElkLCBJbnZhbGlkT2lkKTsKKworCQlpZiAodGFibGVlbHRzID09IE5JTCkKKwkJewor CQkJdG1wb2JqID0gbmV3X29ianRyZWUoIiIpOworCQkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9i aiwgInByZXNlbnQiLCBmYWxzZSk7CisJCX0KKwkJZWxzZQorCQkJdG1wb2JqID0gbmV3X29ianRy ZWVfVkEoIigle2VsZW1lbnRzOiwgfXMpIiwgMSwKKwkJCQkJCQkJICJlbGVtZW50cyIsIE9ialR5 cGVBcnJheSwgdGFibGVlbHRzKTsKKworCQlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTdG10 LCAiJXt0YWJsZV9lbGVtZW50c31zIiwgdG1wb2JqKTsKKwl9CisJZWxzZQorCXsKKwkJTGlzdCAg ICAgICAqdGFibGVlbHRzID0gTklMOworCisJCS8qCisJCSAqIFRoZXJlIGlzIG5vIG5lZWQgdG8g cHJvY2VzcyBMSUtFIGNsYXVzZXMgc2VwYXJhdGVseTsgdGhleSBoYXZlCisJCSAqIGFscmVhZHkg YmVlbiB0cmFuc2Zvcm1lZCBpbnRvIGNvbHVtbnMgYW5kIGNvbnN0cmFpbnRzLgorCQkgKi8KKwor CQkvKgorCQkgKiBQcm9jZXNzIHRhYmxlIGVsZW1lbnRzOiBjb2x1bW4gZGVmaW5pdGlvbnMgYW5k IGNvbnN0cmFpbnRzLiAgT25seQorCQkgKiB0aGUgY29sdW1uIGRlZmluaXRpb25zIGFyZSBvYnRh aW5lZCBmcm9tIHRoZSBwYXJzZSBub2RlIGl0c2VsZi4gIFRvCisJCSAqIGdldCBjb25zdHJhaW50 cyB3ZSByZWx5IG9uIHBnX2NvbnN0cmFpbnQsIGJlY2F1c2UgdGhlIHBhcnNlIG5vZGUKKwkJICog bWlnaHQgYmUgbWlzc2luZyBzb21lIHRoaW5ncyBzdWNoIGFzIHRoZSBuYW1lIG9mIHRoZSBjb25z dHJhaW50cy4KKwkJICovCisJCXRhYmxlZWx0cyA9IGRlcGFyc2VfVGFibGVFbGVtZW50cyhyZWxh dGlvbiwgbm9kZS0+dGFibGVFbHRzLCBkcGNvbnRleHQsCisJCQkJCQkJCQkJICBmYWxzZSwgICAg IC8qIG5vdCB0eXBlZCB0YWJsZSAqLworCQkJCQkJCQkJCSAgZmFsc2UpOyAgICAvKiBub3QgY29t cG9zaXRlICovCisJCXRhYmxlZWx0cyA9IG9idGFpbkNvbnN0cmFpbnRzKHRhYmxlZWx0cywgb2Jq ZWN0SWQsIEludmFsaWRPaWQpOworCisJCWFwcGVuZF9hcnJheV9vYmplY3QoY3JlYXRlU3RtdCwg Iigle3RhYmxlX2VsZW1lbnRzOiwgfXMpIiwgdGFibGVlbHRzKTsKKworCQkvKgorCQkgKiBBZGQg aW5oZXJpdGFuY2Ugc3BlY2lmaWNhdGlvbi4gIFdlIGNhbm5vdCBzaW1wbHkgc2NhbiB0aGUgbGlz dCBvZgorCQkgKiBwYXJlbnRzIGZyb20gdGhlIHBhcnNlciBub2RlLCBiZWNhdXNlIHRoYXQgbWF5 IGxhY2sgdGhlIGFjdHVhbAorCQkgKiBxdWFsaWZpZWQgbmFtZXMgb2YgdGhlIHBhcmVudCByZWxh dGlvbnMuICBSYXRoZXIgdGhhbiB0cnlpbmcgdG8KKwkJICogcmUtcmVzb2x2ZSB0aGVtIGZyb20g dGhlIGluZm9ybWF0aW9uIGluIHRoZSBwYXJzZSBub2RlLCBpdCBzZWVtcworCQkgKiBtb3JlIGFj Y3VyYXRlIGFuZCBjb252ZW5pZW50IHRvIGdyYWIgaXQgZnJvbSBwZ19pbmhlcml0cy4KKwkJICov CisJCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJJTkhFUklUUyIpOworCQlpZiAobGlzdF9sZW5ndGgo bm9kZS0+aW5oUmVsYXRpb25zKSA+IDApCisJCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcG9iaiwg Iigle3BhcmVudHM6LCB9RCkiLCBkZXBhcnNlX0luaFJlbGF0aW9ucyhvYmplY3RJZCkpOworCQll bHNlCisJCXsKKwkJCWFwcGVuZF9udWxsX29iamVjdCh0bXBvYmosICIoJXtwYXJlbnRzOiwgfUQp Iik7CisJCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwkJ fQorCQlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTdG10LCAiJXtpbmhlcml0c31zIiwgdG1w b2JqKTsKKwl9CisKKwl0bXBvYmogPSBuZXdfb2JqdHJlZSgiVEFCTEVTUEFDRSIpOworCWlmIChu b2RlLT50YWJsZXNwYWNlbmFtZSkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXt0 YWJsZXNwYWNlfUkiLCBub2RlLT50YWJsZXNwYWNlbmFtZSk7CisJZWxzZQorCXsKKwkJYXBwZW5k X251bGxfb2JqZWN0KHRtcG9iaiwgIiV7dGFibGVzcGFjZX1JIik7CisJCWFwcGVuZF9ib29sX29i amVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCX0KKwlhcHBlbmRfb2JqZWN0X29iamVj dChjcmVhdGVTdG10LCAiJXt0YWJsZXNwYWNlfXMiLCB0bXBvYmopOworCWFwcGVuZF9vYmplY3Rf b2JqZWN0KGNyZWF0ZVN0bXQsICIle29uX2NvbW1pdH1zIiwKKwkJCQkJCSAgZGVwYXJzZV9PbkNv bW1pdENsYXVzZShub2RlLT5vbmNvbW1pdCkpOworCisJLyogRk9SIFZBTFVFUyBjbGF1c2UgKi8K KwlpZiAobm9kZS0+cGFydGJvdW5kKQorCXsKKwkJLyoKKwkJICogR2V0IHBnX2NsYXNzLnJlbHBh cnRib3VuZC4gV2UgY2Fubm90IHVzZSBwYXJ0Ym91bmQgaW4gdGhlCisJCSAqIHBhcnNldHJlZSBk aXJlY3RseSBhcyBpdCdzIHRoZSBvcmlnaW5hbCBwYXJ0Ym91bmQgZXhwcmVzc2lvbgorCQkgKiB3 aGljaCBoYXZlbid0IGJlZW4gdHJhbnNmb3JtZWQuCisJCSAqLworCQlhcHBlbmRfc3RyaW5nX29i amVjdChjcmVhdGVTdG10LCAiJXtwYXJ0aXRpb25fYm91bmR9cyIsCisJCQkJCQkJIFJlbGF0aW9u R2V0UGFydGl0aW9uQm91bmQob2JqZWN0SWQpKTsKKwl9CisKKwkvKiBQQVJUSVRJT04gQlkgY2xh dXNlICovCisJdG1wb2JqID0gbmV3X29ianRyZWUoIlBBUlRJVElPTiBCWSIpOworCWlmIChyZWxh dGlvbi0+cmRfcmVsLT5yZWxraW5kID09IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCisJCWFw cGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7ZGVmaW5pdGlvbn1zIiwgcGdfZ2V0X3BhcnRr ZXlkZWZfc2ltcGxlKG9iamVjdElkKSk7CisJZWxzZQorCXsKKwkJYXBwZW5kX251bGxfb2JqZWN0 KHRtcG9iaiwgIiV7ZGVmaW5pdGlvbn1zIik7CisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmos ICJwcmVzZW50IiwgZmFsc2UpOworCX0KKwlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTdG10 LCAiJXtwYXJ0aXRpb25fYnl9cyIsIHRtcG9iaik7CisKKwkvKiBVU0lORyBjbGF1c2UgKi8KKwl0 bXBvYmogPSBuZXdfb2JqdHJlZSgiVVNJTkciKTsKKwlpZiAobm9kZS0+YWNjZXNzTWV0aG9kKQor CQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle2FjY2Vzc19tZXRob2R9SSIsIG5vZGUt PmFjY2Vzc01ldGhvZCk7CisJZWxzZQorCXsKKwkJYXBwZW5kX251bGxfb2JqZWN0KHRtcG9iaiwg IiV7YWNjZXNzX21ldGhvZH1JIik7CisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVz ZW50IiwgZmFsc2UpOworCX0KKwlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTdG10LCAiJXth Y2Nlc3NfbWV0aG9kfXMiLCB0bXBvYmopOworCisJLyogV0lUSCBjbGF1c2UgKi8KKwl0bXBvYmog PSBuZXdfb2JqdHJlZSgiV0lUSCIpOworCisJZm9yZWFjaChjZWxsLCBub2RlLT5vcHRpb25zKQor CXsKKwkJT2JqVHJlZSAgICAqdG1wb2JqMjsKKwkJRGVmRWxlbSAqb3B0ID0gKERlZkVsZW0gKikg bGZpcnN0KGNlbGwpOworCisJCXRtcG9iajIgPSBkZXBhcnNlX0RlZkVsZW0ob3B0LCBmYWxzZSk7 CisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iajIpKTsKKwl9 CisKKwlpZiAobGlzdCkKKwkJYXBwZW5kX2FycmF5X29iamVjdCh0bXBvYmosICIoJXt3aXRoOiwg fXMpIiwgbGlzdCk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2Vu dCIsIGZhbHNlKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICIle3dpdGhf Y2xhdXNlfXMiLCB0bXBvYmopOworCisJcmVsYXRpb25fY2xvc2UocmVsYXRpb24sIEFjY2Vzc1No YXJlTG9jayk7CisKKwlyZXR1cm4gY3JlYXRlU3RtdDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBE ZWZpbmVTdG10LgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0RlZmluZVN0bXQoT2lk IG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUsIE9iamVjdEFkZHJlc3Mgc2Vjb25kYXJ5T2JqKQor eworCURlZmluZVN0bXQgKmRlZmluZSA9IChEZWZpbmVTdG10ICopIHBhcnNldHJlZTsKKwlPYmpU cmVlCSAgICpkZWZTdG10ID0gTlVMTDsKKworCXN3aXRjaCAoZGVmaW5lLT5raW5kKQorCXsKKwkJ Y2FzZSBPQkpFQ1RfT1BFUkFUT1I6CisJCQlkZWZTdG10ID0gZGVwYXJzZV9EZWZpbmVTdG10X09w ZXJhdG9yKG9iamVjdElkLCBkZWZpbmUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpFQ1RfVFlQ RToKKwkJCWRlZlN0bXQgPSBkZXBhcnNlX0RlZmluZVN0bXRfVHlwZShvYmplY3RJZCwgZGVmaW5l KTsKKwkJCWJyZWFrOworCisJCWNhc2UgT0JKRUNUX1RTQ09ORklHVVJBVElPTjoKKwkJCWRlZlN0 bXQgPSBkZXBhcnNlX0RlZmluZVN0bXRfVFNDb25maWcob2JqZWN0SWQsIGRlZmluZSwgc2Vjb25k YXJ5T2JqKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT0JKRUNUX1RTUEFSU0VSOgorCQkJZGVmU3Rt dCA9IGRlcGFyc2VfRGVmaW5lU3RtdF9UU1BhcnNlcihvYmplY3RJZCwgZGVmaW5lKTsKKwkJCWJy ZWFrOworCisJCWNhc2UgT0JKRUNUX1RTRElDVElPTkFSWToKKwkJCWRlZlN0bXQgPSBkZXBhcnNl X0RlZmluZVN0bXRfVFNEaWN0aW9uYXJ5KG9iamVjdElkLCBkZWZpbmUpOworCQkJYnJlYWs7CisK KwkJY2FzZSBPQkpFQ1RfVFNURU1QTEFURToKKwkJCWRlZlN0bXQgPSBkZXBhcnNlX0RlZmluZVN0 bXRfVFNUZW1wbGF0ZShvYmplY3RJZCwgZGVmaW5lKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6 CisJCQllbG9nKEVSUk9SLCAidW5zdXBwb3J0ZWQgb2JqZWN0IGtpbmQiKTsKKwl9CisKKwlyZXR1 cm4gZGVmU3RtdDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBEZWZpbmVTdG10IChDUkVBVEUgT1BF UkFUT1IpCisgKgorICogR2l2ZW4gYSB0cmlnZ2VyIE9JRCBhbmQgdGhlIHBhcnNldHJlZSB0aGF0 IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0 aW9uIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRGVmaW5lU3RtdF9P cGVyYXRvcihPaWQgb2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSkKK3sKKwlIZWFwVHVwbGUg ICBvcHJUdXA7CisJT2JqVHJlZQkgICAqc3RtdDsKKwlPYmpUcmVlCSAgICp0bXBvYmo7CisJTGlz dAkgICAqbGlzdCA9IE5JTDsKKwlGb3JtX3BnX29wZXJhdG9yIG9wckZvcm07CisKKwlvcHJUdXAg PSBTZWFyY2hTeXNDYWNoZTEoT1BFUk9JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOwor CWlmICghSGVhcFR1cGxlSXNWYWxpZChvcHJUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9v a3VwIGZhaWxlZCBmb3Igb3BlcmF0b3Igd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJb3ByRm9y bSA9IChGb3JtX3BnX29wZXJhdG9yKSBHRVRTVFJVQ1Qob3ByVHVwKTsKKworCXN0bXQgPSBuZXdf b2JqdHJlZV9WQSgiQ1JFQVRFIE9QRVJBVE9SICV7aWRlbnRpdHl9TyIsIDEsCisJCQkJCQkgICJp ZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZShvcHJGb3JtLT5vcHJuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgICBOYW1lU3RyKG9wckZvcm0t Pm9wcm5hbWUpKSk7CisKKwkvKiBQUk9DRURVUkUgKi8KKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9W QSgiUFJPQ0VEVVJFPSV7cHJvY2VkdXJlfUQiLCAyLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBl U3RyaW5nLCAicHJvY2VkdXJlIiwKKwkJCQkJCSAicHJvY2VkdXJlIiwgT2JqVHlwZU9iamVjdCwK KwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwK KwkJCQkJCQkJCQkJCQkgb3ByRm9ybS0+b3ByY29kZSkpOworCWxpc3QgPSBsYXBwZW5kKGxpc3Qs IG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCisJLyogTEVGVEFSRyAqLworCXRtcG9iaiA9 IG5ld19vYmp0cmVlX1ZBKCJMRUZUQVJHPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVT dHJpbmcsICJsZWZ0YXJnIik7CisJaWYgKE9pZElzVmFsaWQob3ByRm9ybS0+b3BybGVmdCkpCisJ CWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7dHlwZX1UIiwKKwkJCQkJCQkgbmV3X29i anRyZWVfZm9yX3R5cGUob3ByRm9ybS0+b3BybGVmdCwgLTEpKTsKKwllbHNlCisJCWFwcGVuZF9i b29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBwZW5kKGxp c3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCisJLyogUklHSFRBUkcgKi8KKwl0bXBv YmogPSBuZXdfb2JqdHJlZV9WQSgiUklHSFRBUkc9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2Jq VHlwZVN0cmluZywgInJpZ2h0YXJnIik7CisJaWYgKE9pZElzVmFsaWQob3ByRm9ybS0+b3Bycmln aHQpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle3R5cGV9VCIsCisJCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl90eXBlKG9wckZvcm0tPm9wcnJpZ2h0LCAtMSkpOworCWVsc2UKKwkJ YXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9IGxh cHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisKKwkvKiBDT01NVVRBVE9S ICovCisJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkNPTU1VVEFUT1I9IiwgMSwKKwkJCQkJCSAi Y2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImNvbW11dGF0b3IiKTsKKwlpZiAoT2lkSXNWYWxpZChv cHJGb3JtLT5vcHJjb20pKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle29wZXJ9 RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChPcGVyYXRvclJlbGF0aW9u SWQsCisJCQkJCQkJCQkJCQkJCSBvcHJGb3JtLT5vcHJjb20pKTsKKwllbHNlCisJCWFwcGVuZF9i b29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBwZW5kKGxp c3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCisJLyogTkVHQVRPUiAqLworCXRtcG9i aiA9IG5ld19vYmp0cmVlX1ZBKCJORUdBVE9SPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5 cGVTdHJpbmcsICJuZWdhdG9yIik7CisJaWYgKE9pZElzVmFsaWQob3ByRm9ybS0+b3BybmVnYXRl KSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtvcGVyfUQiLAorCQkJCQkJCSBu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoT3BlcmF0b3JSZWxhdGlvbklkLAorCQkJCQkJCQkJ CQkJCQkgb3ByRm9ybS0+b3BybmVnYXRlKSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3Qo dG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2Jq ZWN0X29iamVjdCh0bXBvYmopKTsKKworCS8qIFJFU1RSSUNUICovCisJdG1wb2JqID0gbmV3X29i anRyZWVfVkEoIlJFU1RSSUNUPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcs ICJyZXN0cmljdCIpOworCWlmIChPaWRJc1ZhbGlkKG9wckZvcm0tPm9wcnJlc3QpKQorCQlhcHBl bmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29i anRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJ CSBvcHJGb3JtLT5vcHJyZXN0KSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2Jq LCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29i amVjdCh0bXBvYmopKTsKKworCS8qIEpPSU4gKi8KKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgi Sk9JTj0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiam9pbiIpOworCWlm IChPaWRJc1ZhbGlkKG9wckZvcm0tPm9wcmpvaW4pKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0 bXBvYmosICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1l X2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSBvcHJGb3JtLT5vcHJqb2lu KSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNl KTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwor CS8qIE1FUkdFUyAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJNRVJHRVMiLCAxLAorCQkJ CQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAibWVyZ2VzIik7CisJaWYgKCFvcHJGb3JtLT5v cHJjYW5tZXJnZSkKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxz ZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisK KwkvKiBIQVNIRVMgKi8KKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiSEFTSEVTIiwgMSwKKwkJ CQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImhhc2hlcyIpOworCWlmICghb3ByRm9ybS0+ b3ByY2FuaGFzaCkKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxz ZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisK KwlhcHBlbmRfYXJyYXlfb2JqZWN0KHN0bXQsICIoJXtlbGVtczosIH1zKSIsIGxpc3QpOworCisJ UmVsZWFzZVN5c0NhY2hlKG9wclR1cCk7CisKKwlyZXR1cm4gc3RtdDsKK30KKworLyoKKyAqIERl cGFyc2UgYSBDUkVBVEUgVFlQRSBzdGF0ZW1lbnQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2Rl cGFyc2VfRGVmaW5lU3RtdF9UeXBlKE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lKQor eworCUhlYXBUdXBsZSAgIHR5cFR1cDsKKwlPYmpUcmVlCSAgICpzdG10OworCU9ialRyZWUJICAg KnRtcDsKKwlMaXN0CSAgICpsaXN0OworCWNoYXIJICAgKnN0cjsKKwlEYXR1bQkJZGZsdDsKKwli b29sCQlpc251bGw7CisJRm9ybV9wZ190eXBlIHR5cEZvcm07CisKKwl0eXBUdXAgPSBTZWFyY2hT eXNDYWNoZTEoVFlQRU9JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVh cFR1cGxlSXNWYWxpZCh0eXBUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxl ZCBmb3IgdHlwZSB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwl0eXBGb3JtID0gKEZvcm1fcGdf dHlwZSkgR0VUU1RSVUNUKHR5cFR1cCk7CisKKwkvKiBTaG9ydGN1dCBwcm9jZXNzaW5nIGZvciBz aGVsbCB0eXBlcy4gKi8KKwlpZiAoIXR5cEZvcm0tPnR5cGlzZGVmaW5lZCkKKwl7CisJCXN0bXQg PSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIFRZUEUiLCAwKTsKKwkJYXBwZW5kX29iamVjdF9vYmpl Y3Qoc3RtdCwgIiV7aWRlbnRpdHl9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZSh0eXBGb3JtLT50eXBuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJICBOYW1lU3RyKHR5cEZvcm0t PnR5cG5hbWUpKSk7CisJCWFwcGVuZF9ib29sX29iamVjdChzdG10LCAicHJlc2VudCIsIHRydWUp OworCQlSZWxlYXNlU3lzQ2FjaGUodHlwVHVwKTsKKwkJcmV0dXJuIHN0bXQ7CisJfQorCisJc3Rt dCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgVFlQRSIsIDApOworCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KHN0bXQsICIle2lkZW50aXR5fUQiLAorCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZSh0eXBGb3JtLT50eXBuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJTmFtZVN0cih0eXBGb3JtLT50 eXBuYW1lKSkpOworCWFwcGVuZF9ib29sX29iamVjdChzdG10LCAicHJlc2VudCIsIHRydWUpOwor CisJLyogQWRkIHRoZSBkZWZpbml0aW9uIGNsYXVzZSAqLworCWxpc3QgPSBOSUw7CisKKwkvKiBJ TlBVVCAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCIoSU5QVVQ9IiwgMSwKKwkJCQkJCSAiY2xh dXNlIiwgT2JqVHlwZVN0cmluZywgImlucHV0Iik7CisJYXBwZW5kX29iamVjdF9vYmplY3QodG1w LCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFBy b2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cGlucHV0KSk7CisJ bGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBPVVRQ VVQgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiT1VUUFVUPSIsIDEsCisJCQkJCQkgImNsYXVz ZSIsIE9ialR5cGVTdHJpbmcsICJvdXRwdXQiKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAs ICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJv Y2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlwb3V0cHV0KSk7CisJ bGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBSRUNF SVZFICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlJFQ0VJVkU9IiwgMSwKKwkJCQkJCSAiY2xh dXNlIiwgT2JqVHlwZVN0cmluZywgInJlY2VpdmUiKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3Jt LT50eXByZWNlaXZlKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtwcm9jZWR1cmV9 RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlv bklkLAorCQkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlwcmVjZWl2ZSkpOworCWVsc2UKKwkJYXBw ZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQo bGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBTRU5EICovCisJdG1wID0gbmV3 X29ianRyZWVfVkEoIlNFTkQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywg InNlbmQiKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXBzZW5kKSkKKwkJYXBwZW5kX29i amVjdF9vYmplY3QodG1wLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHlwRm9y bS0+dHlwc2VuZCkpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQi LCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7 CisKKwkvKiBUWVBNT0RfSU4gKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiVFlQTU9EX0lOPSIs IDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJ0eXBtb2RfaW4iKTsKKwlpZiAo T2lkSXNWYWxpZCh0eXBGb3JtLT50eXBtb2RpbikpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRt cCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQo UHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cG1vZGluKSk7 CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwls aXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIFRZUE1P RF9PVVQgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiVFlQTU9EX09VVD0iLCAxLAorCQkJCQkJ ICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAidHlwbW9kX291dCIpOworCWlmIChPaWRJc1ZhbGlk KHR5cEZvcm0tPnR5cG1vZG91dCkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJv Y2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJl UmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cG1vZG91dCkpOworCWVsc2UK KwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9IGxh cHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBBTkFMWVpFICovCisJ dG1wID0gbmV3X29ianRyZWVfVkEoIkFOQUxZWkU9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2Jq VHlwZVN0cmluZywgImFuYWx5emUiKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXBhbmFs eXplKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJ CQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJ CQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlwYW5hbHl6ZSkpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xf b2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3 X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBJTlRFUk5BTExFTkdUSCAqLworCWlmICh0eXBG b3JtLT50eXBsZW4gPT0gLTEpCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiSU5URVJOQUxM RU5HVEg9VkFSSUFCTEUiLCAwKTsKKwl9CisJZWxzZQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVf VkEoIklOVEVSTkFMTEVOR1RIPSV7dHlwbGVufW4iLCAxLAorCQkJCQkJCSAidHlwbGVuIiwgT2Jq VHlwZUludGVnZXIsIHR5cEZvcm0tPnR5cGxlbik7CisJfQorCisJbGlzdCA9IGxhcHBlbmQobGlz dCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBQQVNTRURCWVZBTFVFICovCisJdG1w ID0gbmV3X29ianRyZWVfVkEoIlBBU1NFREJZVkFMVUUiLCAxLAorCQkJCQkJICJjbGF1c2UiLCBP YmpUeXBlU3RyaW5nLCAicGFzc2VkYnl2YWx1ZSIpOworCWlmICghdHlwRm9ybS0+dHlwYnl2YWwp CisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBs YXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogQUxJR05NRU5UICov CisJdG1wID0gbmV3X29ianRyZWVfVkEoIkFMSUdOTUVOVD0iLCAxLAorCQkJCQkJICJjbGF1c2Ui LCBPYmpUeXBlU3RyaW5nLCAiYWxpZ25tZW50Iik7CisJLyogWFhYIGl0J3Mgb2RkIHRvIHJlcHJl c2VudCBhbGlnbm1lbnQgd2l0aCBzY2hlbWEtcXVhbGlmaWVkIHR5cGUgbmFtZXMgKi8KKwlzd2l0 Y2ggKHR5cEZvcm0tPnR5cGFsaWduKQorCXsKKwkJY2FzZSAnZCc6CisJCQlzdHIgPSAicGdfY2F0 YWxvZy5mbG9hdDgiOworCQkJYnJlYWs7CisJCWNhc2UgJ2knOgorCQkJc3RyID0gInBnX2NhdGFs b2cuaW50NCI7CisJCQlicmVhazsKKwkJY2FzZSAncyc6CisJCQlzdHIgPSAicGdfY2F0YWxvZy5p bnQyIjsKKwkJCWJyZWFrOworCQljYXNlICdjJzoKKwkJCXN0ciA9ICJwZ19jYXRhbG9nLmJwY2hh ciI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIGFsaWdu bWVudCAlYyIsIHR5cEZvcm0tPnR5cGFsaWduKTsKKwl9CisJYXBwZW5kX3N0cmluZ19vYmplY3Qo dG1wLCAiJXthbGlnbn1zIiwgc3RyKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0 X29iamVjdCh0bXApKTsKKworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJTVE9SQUdFPSIsIDEsCisJ CQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJzdG9yYWdlIik7CisJc3dpdGNoICh0eXBG b3JtLT50eXBzdG9yYWdlKQorCXsKKwkJY2FzZSAncCc6CisJCQlzdHIgPSAicGxhaW4iOworCQkJ YnJlYWs7CisJCWNhc2UgJ2UnOgorCQkJc3RyID0gImV4dGVybmFsIjsKKwkJCWJyZWFrOworCQlj YXNlICd4JzoKKwkJCXN0ciA9ICJleHRlbmRlZCI7CisJCQlicmVhazsKKwkJY2FzZSAnbSc6CisJ CQlzdHIgPSAibWFpbiI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJp bnZhbGlkIHN0b3JhZ2Ugc3BlY2lmaWVyICVjIiwgdHlwRm9ybS0+dHlwc3RvcmFnZSk7CisJfQor CWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgIiV7c3RvcmFnZX1zIiwgc3RyKTsKKwlsaXN0ID0g bGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIENBVEVHT1JZICov CisJdG1wID0gbmV3X29ianRyZWVfVkEoIkNBVEVHT1JZPSIsIDEsCisJCQkJCQkgImNsYXVzZSIs IE9ialR5cGVTdHJpbmcsICJjYXRlZ29yeSIpOworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwg IiV7Y2F0ZWdvcnl9cyIsCisJCQkJCQkgcHNwcmludGYoIiVjIiwgdHlwRm9ybS0+dHlwY2F0ZWdv cnkpKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwor CS8qIFBSRUZFUlJFRCAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJQUkVGRVJSRUQ9IiwgMSwK KwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInByZWZlcnJlZCIpOworCWlmICghdHlw Rm9ybS0+dHlwaXNwcmVmZXJyZWQpCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50 IiwgZmFsc2UpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkp OworCisJLyogREVGQVVMVCAqLworCWRmbHQgPSBTeXNDYWNoZUdldEF0dHIoVFlQRU9JRCwgdHlw VHVwLAorCQkJCQkJICAgQW51bV9wZ190eXBlX3R5cGRlZmF1bHQsCisJCQkJCQkgICAmaXNudWxs KTsKKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiREVGQVVMVD0iLCAxLAorCQkJCQkJICJjbGF1c2Ui LCBPYmpUeXBlU3RyaW5nLCAiZGVmYXVsdCIpOworCWlmICghaXNudWxsKQorCQlhcHBlbmRfc3Ry aW5nX29iamVjdCh0bXAsICIle2RlZmF1bHR9cyIsIFRleHREYXR1bUdldENTdHJpbmcoZGZsdCkp OworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJ bGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBFTEVN RU5UICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIkVMRU1FTlQ9IiwgMSwKKwkJCQkJCSAiY2xh dXNlIiwgT2JqVHlwZVN0cmluZywgImVsZW1lbnQiKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3Jt LT50eXBlbGVtKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiZWxlbSIsCisJCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl90eXBlKHR5cEZvcm0tPnR5cGVsZW0sIC0xKSk7CisJZWxzZQorCQlh cHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVu ZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIERFTElNSVRFUiAqLworCXRt cCA9IG5ld19vYmp0cmVlX1ZBKCJERUxJTUlURVI9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2Jq VHlwZVN0cmluZywgImRlbGltaXRlciIpOworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgIiV7 ZGVsaW19TCIsCisJCQkJCQkgcHNwcmludGYoIiVjIiwgdHlwRm9ybS0+dHlwZGVsaW0pKTsKKwls aXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIENPTExB VEFCTEUgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiQ09MTEFUQUJMRT0iLCAxLAorCQkJCQkJ ICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiY29sbGF0YWJsZSIpOworCWlmICghT2lkSXNWYWxp ZCh0eXBGb3JtLT50eXBjb2xsYXRpb24pKQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJl c2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0 bXApKTsKKworCWFwcGVuZF9hcnJheV9vYmplY3Qoc3RtdCwgIiV7ZWxlbXM6LCB9cykiLCBsaXN0 KTsKKworCVJlbGVhc2VTeXNDYWNoZSh0eXBUdXApOworCisJcmV0dXJuIHN0bXQ7Cit9CisKK3N0 YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRGVmaW5lU3RtdF9UU0NvbmZpZyhPaWQgb2JqZWN0SWQs IERlZmluZVN0bXQgKmRlZmluZSwKKwkJCQkJCQlPYmplY3RBZGRyZXNzIGNvcGllZCkKK3sKKwlI ZWFwVHVwbGUgICB0c2NUdXA7CisJSGVhcFR1cGxlICAgdHNwVHVwOworCU9ialRyZWUJICAgKnN0 bXQ7CisJT2JqVHJlZQkgICAqdG1wOworCUZvcm1fcGdfdHNfY29uZmlnIHRzY0Zvcm07CisJRm9y bV9wZ190c19wYXJzZXIgdHNwRm9ybTsKKwlMaXN0CSAgICpsaXN0OworCisJdHNjVHVwID0gU2Vh cmNoU3lzQ2FjaGUxKFRTQ09ORklHT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJ aWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHRzY1R1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29r dXAgZmFpbGVkIGZvciB0ZXh0IHNlYXJjaCBjb25maWd1cmF0aW9uICV1IiwKKwkJCSBvYmplY3RJ ZCk7CisJdHNjRm9ybSA9IChGb3JtX3BnX3RzX2NvbmZpZykgR0VUU1RSVUNUKHRzY1R1cCk7CisK Kwl0c3BUdXAgPSBTZWFyY2hTeXNDYWNoZTEoVFNQQVJTRVJPSUQsIE9iamVjdElkR2V0RGF0dW0o dHNjRm9ybS0+Y2ZncGFyc2VyKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHRzcFR1cCkpCisJ CWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB0ZXh0IHNlYXJjaCBwYXJzZXIg JXUiLAorCQkJIHRzY0Zvcm0tPmNmZ3BhcnNlcik7CisJdHNwRm9ybSA9IChGb3JtX3BnX3RzX3Bh cnNlcikgR0VUU1RSVUNUKHRzcFR1cCk7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoK KwkgKiBDUkVBVEUgVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiAle2lkZW50aXR5fUQgKCV7ZWxl bXM6LCB9cykKKwkgKi8KKwlzdG10ID0gbmV3X29ianRyZWUoIkNSRUFURSIpOworCisJYXBwZW5k X29iamVjdF9vYmplY3Qoc3RtdCwgIlRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04gJXtpZGVudGl0 eX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUodHNjRm9ybS0+Y2ZnbmFtZXNw YWNlLAorCQkJCQkJCQkJCQkJICBOYW1lU3RyKHRzY0Zvcm0tPmNmZ25hbWUpKSk7CisKKwkvKgor CSAqIEFkZCB0aGUgZGVmaW5pdGlvbiBjbGF1c2UuICBJZiB3ZSBoYXZlIENPUFknZWQgYW4gZXhp c3RpbmcgY29uZmlnLCBhZGQKKwkgKiBhIENPUFkgY2xhdXNlOyBvdGhlcndpc2UgYWRkIGEgUEFS U0VSIGNsYXVzZS4KKwkgKi8KKwlsaXN0ID0gTklMOworCS8qIENPUFkgKi8KKwl0bXAgPSBuZXdf b2JqdHJlZV9WQSgiQ09QWT0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAi Y29weSIpOworCWlmIChjb3BpZWQub2JqZWN0SWQgIT0gSW52YWxpZE9pZCkKKwkJYXBwZW5kX29i amVjdF9vYmplY3QodG1wLCAiJXt0c2NvbmZpZ31EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9y X3F1YWxuYW1lX2lkKFRTQ29uZmlnUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIGNvcGllZC5v YmplY3RJZCkpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBm YWxzZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisK KwkvKiBQQVJTRVIgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiUEFSU0VSPSIsIDEsCisJCQkJ CQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJwYXJzZXIiKTsKKwlpZiAoY29waWVkLm9iamVj dElkID09IEludmFsaWRPaWQpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cGFyc2Vy fUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUodHNwRm9ybS0+cHJzbmFtZXNw YWNlLAorCQkJCQkJCQkJCQkJCSAgTmFtZVN0cih0c3BGb3JtLT5wcnNuYW1lKSkpOworCWVsc2UK KwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9IGxh cHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwlhcHBlbmRfYXJyYXlfb2Jq ZWN0KHN0bXQsICIoJXtlbGVtczosIH1zKSIsIGxpc3QpOworCisJUmVsZWFzZVN5c0NhY2hlKHRz cFR1cCk7CisJUmVsZWFzZVN5c0NhY2hlKHRzY1R1cCk7CisKKwlyZXR1cm4gc3RtdDsKK30KKwor c3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9EZWZpbmVTdG10X1RTUGFyc2VyKE9pZCBvYmplY3RJ ZCwgRGVmaW5lU3RtdCAqZGVmaW5lKQoreworCUhlYXBUdXBsZSAgIHRzcFR1cDsKKwlPYmpUcmVl CSAgICpzdG10OworCU9ialRyZWUJICAgKnRtcDsKKwlMaXN0CSAgICpsaXN0OworCUZvcm1fcGdf dHNfcGFyc2VyIHRzcEZvcm07CisKKwl0c3BUdXAgPSBTZWFyY2hTeXNDYWNoZTEoVFNQQVJTRVJP SUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQo dHNwVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHRleHQgc2Vh cmNoIHBhcnNlciB3aXRoIE9JRCAldSIsCisJCQkgb2JqZWN0SWQpOworCXRzcEZvcm0gPSAoRm9y bV9wZ190c19wYXJzZXIpIEdFVFNUUlVDVCh0c3BUdXApOworCisJLyoKKwkgKiBWZXJib3NlIHN5 bnRheAorCSAqCisJICogQ1JFQVRFIFRFWFQgU0VBUkNIIFBBUlNFUiAle2lkZW50aXR5fUQgKCV7 ZWxlbXM6LCB9cykKKwkgKi8KKwlzdG10ID0gbmV3X29ianRyZWUoIkNSRUFURSIpOworCisJYXBw ZW5kX29iamVjdF9vYmplY3Qoc3RtdCwgIlRFWFQgU0VBUkNIIFBBUlNFUiAle2lkZW50aXR5fUQi LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZSh0c3BGb3JtLT5wcnNuYW1lc3BhY2Us CisJCQkJCQkJCQkJCQkgIE5hbWVTdHIodHNwRm9ybS0+cHJzbmFtZSkpKTsKKworCS8qIEFkZCB0 aGUgZGVmaW5pdGlvbiBjbGF1c2UgKi8KKwlsaXN0ID0gTklMOworCisJLyogU1RBUlQgKi8KKwl0 bXAgPSBuZXdfb2JqdHJlZV9WQSgiU1RBUlQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlw ZVN0cmluZywgInN0YXJ0Iik7CisJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtwcm9jZWR1 cmV9RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0 aW9uSWQsCisJCQkJCQkJCQkJCQkJIHRzcEZvcm0tPnByc3N0YXJ0KSk7CisJbGlzdCA9IGxhcHBl bmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBHRVRUT0tFTiAqLworCXRt cCA9IG5ld19vYmp0cmVlX1ZBKCJHRVRUT0tFTj0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpU eXBlU3RyaW5nLCAiZ2V0dG9rZW4iKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle3By b2NlZHVyZX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJl UmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgdHNwRm9ybS0+cHJzdG9rZW4pKTsKKwlsaXN0ID0g bGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIEVORCAqLworCXRt cCA9IG5ld19vYmp0cmVlX1ZBKCJFTkQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0 cmluZywgImVuZCIpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2VkdXJlfUQi LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklk LAorCQkJCQkJCQkJCQkJCSB0c3BGb3JtLT5wcnNlbmQpKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0 LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIExFWFRZUEVTICovCisJdG1wID0gbmV3 X29ianRyZWVfVkEoIkxFWFRZUEVTPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJp bmcsICJsZXh0eXBlcyIpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2VkdXJl fUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlv bklkLAorCQkJCQkJCQkJCQkJCSB0c3BGb3JtLT5wcnNsZXh0eXBlKSk7CisJbGlzdCA9IGxhcHBl bmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBIRUFETElORSAqLworCXRt cCA9IG5ld19vYmp0cmVlX1ZBKCJIRUFETElORT0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpU eXBlU3RyaW5nLCAiaGVhZGxpbmUiKTsKKwlpZiAoT2lkSXNWYWxpZCh0c3BGb3JtLT5wcnNoZWFk bGluZSkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJ CQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJ CQkJCQkJCQkJCQkJIHRzcEZvcm0tPnByc2hlYWRsaW5lKSk7CisJZWxzZQorCQlhcHBlbmRfYm9v bF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBu ZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCWFwcGVuZF9hcnJheV9vYmplY3Qoc3RtdCwgIigl e2VsZW1zOiwgfXMpIiwgbGlzdCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHNwVHVwKTsKKworCXJl dHVybiBzdG10OworfQorCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0RlZmluZVN0bXRfVFNE aWN0aW9uYXJ5KE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lKQoreworCUhlYXBUdXBs ZSAgIHRzZFR1cDsKKwlPYmpUcmVlCSAgICpzdG10OworCU9ialRyZWUJICAgKnRtcDsKKwlMaXN0 CSAgICpsaXN0OworCURhdHVtCQlvcHRpb25zOworCWJvb2wJCWlzbnVsbDsKKwlGb3JtX3BnX3Rz X2RpY3QgdHNkRm9ybTsKKworCXRzZFR1cCA9IFNlYXJjaFN5c0NhY2hlMShUU0RJQ1RPSUQsIE9i amVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHNkVHVw KSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHRleHQgc2VhcmNoIGRp Y3Rpb25hcnkgIgorCQkJICJ3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwl0c2RGb3JtID0gKEZv cm1fcGdfdHNfZGljdCkgR0VUU1RSVUNUKHRzZFR1cCk7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3lu dGF4CisJICoKKwkgKiBDUkVBVEUgVEVYVCBTRUFSQ0ggRElDVElPTkFSWSAle2lkZW50aXR5fUQg KCV7ZWxlbXM6LCB9cykKKwkgKi8KKwlzdG10ID0gbmV3X29ianRyZWUoIkNSRUFURSIpOworCisJ YXBwZW5kX29iamVjdF9vYmplY3Qoc3RtdCwgIlRFWFQgU0VBUkNIIERJQ1RJT05BUlkgJXtpZGVu dGl0eX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUodHNkRm9ybS0+ZGljdG5h bWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgTmFtZVN0cih0c2RGb3JtLT5kaWN0bmFtZSkpKTsKKwor CS8qIEFkZCB0aGUgZGVmaW5pdGlvbiBjbGF1c2UgKi8KKwlsaXN0ID0gTklMOworCisJLyogVEVN UExBVEUgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiVEVNUExBVEU9IiwgMSwKKwkJCQkJCSAi Y2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInRlbXBsYXRlIik7CisJYXBwZW5kX29iamVjdF9vYmpl Y3QodG1wLCAiJXt0ZW1wbGF0ZX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVf aWQoVFNUZW1wbGF0ZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIHRzZEZvcm0tPmRpY3R0ZW1w bGF0ZSkpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOwor CisJLyoKKwkgKiBvcHRpb25zLiAgWFhYIHRoaXMgaXMgYSBwcmV0dHkgdXNlbGVzcyByZXByZXNl bnRhdGlvbiwgYnV0IHdlIGNhbid0IGRvCisJICogYmV0dGVyIHdpdGhvdXQgbW9yZSB0c19jYWNo ZS5jIGNvb3BlcmF0aW9uIC4uLgorCSAqLworCW9wdGlvbnMgPSBTeXNDYWNoZUdldEF0dHIoVFNE SUNUT0lELCB0c2RUdXAsCisJCQkJCQkJICBBbnVtX3BnX3RzX2RpY3RfZGljdGluaXRvcHRpb24s CisJCQkJCQkJICAmaXNudWxsKTsKKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiIiwgMCk7CisJaWYg KCFpc251bGwpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgIiV7b3B0aW9uc31zIiwgVGV4 dERhdHVtR2V0Q1N0cmluZyhvcHRpb25zKSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3Qo dG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0 X29iamVjdCh0bXApKTsKKworCWFwcGVuZF9hcnJheV9vYmplY3Qoc3RtdCwgIigle2VsZW1zOiwg fXMpIiwgbGlzdCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHNkVHVwKTsKKworCXJldHVybiBzdG10 OworfQorCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0RlZmluZVN0bXRfVFNUZW1wbGF0ZShP aWQgb2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSkKK3sKKwlIZWFwVHVwbGUgICB0c3RUdXA7 CisJT2JqVHJlZQkgICAqc3RtdDsKKwlPYmpUcmVlCSAgICp0bXA7CisJTGlzdAkgICAqbGlzdDsK KwlGb3JtX3BnX3RzX3RlbXBsYXRlIHRzdEZvcm07CisKKwl0c3RUdXAgPSBTZWFyY2hTeXNDYWNo ZTEoVFNURU1QTEFURU9JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVh cFR1cGxlSXNWYWxpZCh0c3RUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxl ZCBmb3IgdGV4dCBzZWFyY2ggdGVtcGxhdGUgd2l0aCBPSUQgJXUiLAorCQkJIG9iamVjdElkKTsK Kwl0c3RGb3JtID0gKEZvcm1fcGdfdHNfdGVtcGxhdGUpIEdFVFNUUlVDVCh0c3RUdXApOworCisJ LyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICogQ1JFQVRFIFRFWFQgU0VBUkNIIFRFTVBM QVRFICV7aWRlbnRpdHl9RCAoJXtlbGVtczosIH1zKQorCSAqLworCXN0bXQgPSBuZXdfb2JqdHJl ZSgiQ1JFQVRFIik7CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChzdG10LCAiVEVYVCBTRUFSQ0gg VEVNUExBVEUgJXtpZGVudGl0eX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUo dHN0Rm9ybS0+dG1wbG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgTmFtZVN0cih0c3RGb3JtLT50 bXBsbmFtZSkpKTsKKworCS8qIEFkZCB0aGUgZGVmaW5pdGlvbiBjbGF1c2UgKi8KKwlsaXN0ID0g TklMOworCisJLyogSU5JVCAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJJTklUPSIsIDEsCisJ CQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJpbml0Iik7CisJaWYgKE9pZElzVmFsaWQo dHN0Rm9ybS0+dG1wbGluaXQpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle3Byb2Nl ZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJl bGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0c3RGb3JtLT50bXBsaW5pdCkpOworCWVsc2UKKwkJ YXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9IGxhcHBl bmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBMRVhJWkUgKi8KKwl0bXAg PSBuZXdfb2JqdHJlZV9WQSgiTEVYSVpFPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVT dHJpbmcsICJsZXhpemUiKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle3Byb2NlZHVy ZX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRp b25JZCwKKwkJCQkJCQkJCQkJCQkgdHN0Rm9ybS0+dG1wbGxleGl6ZSkpOworCWxpc3QgPSBsYXBw ZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJYXBwZW5kX2FycmF5X29iamVj dChzdG10LCAiKCV7ZWxlbXM6LCB9cykiLCBsaXN0KTsKKworCVJlbGVhc2VTeXNDYWNoZSh0c3RU dXApOworCisJcmV0dXJuIHN0bXQ7Cit9CisKK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0 ZXJUU0NvbmZpZ3VyYXRpb25TdG10KENvbGxlY3RlZENvbW1hbmQgKmNtZCkKK3sKKwlBbHRlclRT Q29uZmlndXJhdGlvblN0bXQgKm5vZGUgPSAoQWx0ZXJUU0NvbmZpZ3VyYXRpb25TdG10ICopIGNt ZC0+cGFyc2V0cmVlOworCU9ialRyZWUgKmNvbmZpZzsKKwlPYmpUcmVlICp0bXA7CisJTGlzdAkg ICAqbGlzdDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCWludAkJCWk7CisKKwkvKgorCSAqIFZlcmJv c2Ugc3ludGF4CisJICogY2FzZSBBTFRFUl9UU0NPTkZJR19BRERfTUFQUElORzoKKwkgKiBBTFRF UiBURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OICV7aWRlbnRpdHl9RCBBREQgTUFQUElORyBGT1Ig JXt0b2tlbnR5cGU6LCB9SSBXSVRIICV7ZGljdGlvbmFyaWVzOiwgfUQKKwkgKgorCSAqIGNhc2Ug QUxURVJfVFNDT05GSUdfRFJPUF9NQVBQSU5HOgorCSAqIEFMVEVSIFRFWFQgU0VBUkNIIENPTkZJ R1VSQVRJT04gJXtpZGVudGl0eX1EIERST1AgTUFQUElORyAle2lmX2V4aXN0c31zIEZPUiAle3Rv a2VudHlwZX1JCisJICoKKwkgKiBjYXNlIEFMVEVSX1RTQ09ORklHX0FMVEVSX01BUFBJTkdfRk9S X1RPS0VOOgorCSAqIEFMVEVSIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04gJXtpZGVudGl0eX1E IEFMVEVSIE1BUFBJTkcgRk9SICV7dG9rZW50eXBlOiwgfUkgV0lUSCAle2RpY3Rpb25hcmllczos IH1ECisJICoKKwkgKiBjYXNlIEFMVEVSX1RTQ09ORklHX1JFUExBQ0VfRElDVDoKKwkgKiBBTFRF UiBURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OICV7aWRlbnRpdHl9RCBBTFRFUiBNQVBQSU5HIFJF UExBQ0UgJXtvbGRfZGljdGlvbmFyeX1EIFdJVEggJXtuZXdfZGljdGlvbmFyeX1ECisJICoKKwkg KiBjYXNlIEFMVEVSX1RTQ09ORklHX1JFUExBQ0VfRElDVF9GT1JfVE9LRU46CisJICogQUxURVIg VEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiAle2lkZW50aXR5fUQgQUxURVIgTUFQUElORyBGT1Ig JXt0b2tlbnR5cGU6LCB9SSBSRVBMQUNFICV7b2xkX2RpY3Rpb25hcnl9RCBXSVRIICV7bmV3X2Rp Y3Rpb25hcnl9RAorCSAqLworCisJY29uZmlnID0gbmV3X29ianRyZWUoIkFMVEVSIFRFWFQgU0VB UkNIIENPTkZJR1VSQVRJT04iKTsKKworCS8qIGRldGVybWluZSB0aGUgZm9ybWF0IHN0cmluZyBh cHByb3ByaWF0ZSB0byBlYWNoIHN1YmNvbW1hbmQgKi8KKwlzd2l0Y2ggKG5vZGUtPmtpbmQpCisJ eworCQljYXNlIEFMVEVSX1RTQ09ORklHX0FERF9NQVBQSU5HOgorCQkJYXBwZW5kX29iamVjdF9v YmplY3QoY29uZmlnLCAiJXtpZGVudGl0eX1EIEFERCBNQVBQSU5HIiwKKwkJCQkJCSBuZXdfb2Jq dHJlZV9mb3JfcXVhbG5hbWVfaWQoY21kLT5kLmF0c2NmZy5hZGRyZXNzLmNsYXNzSWQsCisJCQkJ CQkJCQkJCQkJIGNtZC0+ZC5hdHNjZmcuYWRkcmVzcy5vYmplY3RJZCkpOworCQkJYnJlYWs7CisK KwkJY2FzZSBBTFRFUl9UU0NPTkZJR19EUk9QX01BUFBJTkc6CisJCQlhcHBlbmRfb2JqZWN0X29i amVjdChjb25maWcsICIle2lkZW50aXR5fUQgRFJPUCBNQVBQSU5HIiwKKwkJCQkJCQkJIG5ld19v Ymp0cmVlX2Zvcl9xdWFsbmFtZV9pZChjbWQtPmQuYXRzY2ZnLmFkZHJlc3MuY2xhc3NJZCwKKwkJ CQkJCQkJCQkJCQkJCSBjbWQtPmQuYXRzY2ZnLmFkZHJlc3Mub2JqZWN0SWQpKTsKKwkJCXRtcCA9 IG5ld19vYmp0cmVlX1ZBKCJJRiBFWElTVFMiLCAwKTsKKwkJCWFwcGVuZF9ib29sX29iamVjdCh0 bXAsICJwcmVzZW50Iiwgbm9kZS0+bWlzc2luZ19vayk7CisJCQlhcHBlbmRfb2JqZWN0X29iamVj dChjb25maWcsICIle2lmX2V4aXN0c31zIiwgdG1wKTsKKwkJCWJyZWFrOworCisJCWNhc2UgQUxU RVJfVFNDT05GSUdfQUxURVJfTUFQUElOR19GT1JfVE9LRU46CisJCQlhcHBlbmRfb2JqZWN0X29i amVjdChjb25maWcsICIle2lkZW50aXR5fUQgQUxURVIgTUFQUElORyIsCisJCQkJCQkJCSBuZXdf b2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoY21kLT5kLmF0c2NmZy5hZGRyZXNzLmNsYXNzSWQsCisJ CQkJCQkJCQkJCQkJCQkgY21kLT5kLmF0c2NmZy5hZGRyZXNzLm9iamVjdElkKSk7CisJCQlicmVh azsKKworCQljYXNlIEFMVEVSX1RTQ09ORklHX1JFUExBQ0VfRElDVDoKKwkJCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KGNvbmZpZywgIiV7aWRlbnRpdHl9RCBBTFRFUiBNQVBQSU5HIiwKKwkJCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChjbWQtPmQuYXRzY2ZnLmFkZHJlc3MuY2xhc3NJ ZCwKKwkJCQkJCQkJCQkJCQkJCSBjbWQtPmQuYXRzY2ZnLmFkZHJlc3Mub2JqZWN0SWQpKTsKKwkJ CWJyZWFrOworCisJCWNhc2UgQUxURVJfVFNDT05GSUdfUkVQTEFDRV9ESUNUX0ZPUl9UT0tFTjoK KwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNvbmZpZywgIiV7aWRlbnRpdHl9RCBBTFRFUiBNQVBQ SU5HIiwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChjbWQtPmQuYXRzY2Zn LmFkZHJlc3MuY2xhc3NJZCwKKwkJCQkJCQkJCQkJCQkJCSBjbWQtPmQuYXRzY2ZnLmFkZHJlc3Mu b2JqZWN0SWQpKTsKKwkJCWJyZWFrOworCX0KKworCS8qIEFkZCB0aGUgYWZmZWN0ZWQgdG9rZW4g bGlzdCwgZm9yIHN1YmNvbW1hbmRzIHRoYXQgaGF2ZSBvbmUgKi8KKwlpZiAobm9kZS0+a2luZCA9 PSBBTFRFUl9UU0NPTkZJR19BRERfTUFQUElORyB8fAorCQlub2RlLT5raW5kID09IEFMVEVSX1RT Q09ORklHX0FMVEVSX01BUFBJTkdfRk9SX1RPS0VOIHx8CisJCW5vZGUtPmtpbmQgPT0gQUxURVJf VFNDT05GSUdfUkVQTEFDRV9ESUNUX0ZPUl9UT0tFTiB8fAorCQlub2RlLT5raW5kID09IEFMVEVS X1RTQ09ORklHX0RST1BfTUFQUElORykKKwl7CisJCWxpc3QgPSBOSUw7CisJCWZvcmVhY2goY2Vs bCwgbm9kZS0+dG9rZW50eXBlKQorCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19v YmplY3Qoc3RyVmFsKGxmaXJzdChjZWxsKSkpKTsKKwkJYXBwZW5kX2FycmF5X29iamVjdChjb25m aWcsICJGT1IgJXt0b2tlbnR5cGU6LCB9SSIsIGxpc3QpOworCX0KKworCS8qIGFkZCBmdXJ0aGVy IHN1YmNvbW1hbmQtc3BlY2lmaWMgZWxlbWVudHMgKi8KKwlpZiAobm9kZS0+a2luZCA9PSBBTFRF Ul9UU0NPTkZJR19BRERfTUFQUElORyB8fAorCQlub2RlLT5raW5kID09IEFMVEVSX1RTQ09ORklH X0FMVEVSX01BUFBJTkdfRk9SX1RPS0VOKQorCXsKKwkJLyogQUREIE1BUFBJTkcgYW5kIEFMVEVS IE1BUFBJTkcgRk9SIG5lZWQgYSBsaXN0IG9mIGRpY3Rpb25hcmllcyAqLworCQlsaXN0ID0gTklM OworCQlmb3IgKGkgPSAwOyBpIDwgY21kLT5kLmF0c2NmZy5uZGljdHM7IGkrKykKKwkJeworCQkJ T2JqVHJlZQkqZGljdG9iajsKKworCQkJZGljdG9iaiA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZV9pZChUU0RpY3Rpb25hcnlSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJICBjbWQtPmQuYXRzY2Zn LmRpY3RJZHNbaV0pOworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwKKwkJCQkJCSAgIG5ld19vYmpl Y3Rfb2JqZWN0KGRpY3RvYmopKTsKKwkJfQorCQlhcHBlbmRfYXJyYXlfb2JqZWN0KGNvbmZpZywg IldJVEggJXtkaWN0aW9uYXJpZXM6LCB9RCIsIGxpc3QpOworCX0KKwllbHNlIGlmIChub2RlLT5r aW5kID09IEFMVEVSX1RTQ09ORklHX1JFUExBQ0VfRElDVCB8fAorCQkJIG5vZGUtPmtpbmQgPT0g QUxURVJfVFNDT05GSUdfUkVQTEFDRV9ESUNUX0ZPUl9UT0tFTikKKwl7CisJCS8qIHRoZSBSRVBM QUNFIGZvcm1zIHdhbnQgb2xkIGFuZCBuZXcgZGljdGlvbmFyaWVzICovCisJCUFzc2VydChjbWQt PmQuYXRzY2ZnLm5kaWN0cyA9PSAyKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3QoY29uZmlnLCAi UkVQTEFDRSAle29sZF9kaWN0aW9uYXJ5fUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVh bG5hbWVfaWQoVFNEaWN0aW9uYXJ5UmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIGNtZC0+ZC5h dHNjZmcuZGljdElkc1swXSkpOworCQlhcHBlbmRfb2JqZWN0X29iamVjdChjb25maWcsICJXSVRI ICV7bmV3X2RpY3Rpb25hcnl9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9p ZChUU0RpY3Rpb25hcnlSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgY21kLT5kLmF0c2NmZy5k aWN0SWRzWzFdKSk7CisJfQorCisJcmV0dXJuIGNvbmZpZzsKK30KKworc3RhdGljIE9ialRyZWUg KgorZGVwYXJzZV9BbHRlclRTRGljdGlvbmFyeVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJz ZXRyZWUpCit7CisJT2JqVHJlZSAqYWx0ZXJUU0Q7CisJT2JqVHJlZSAqdG1wOworCURhdHVtCQlv cHRpb25zOworCUxpc3QJICAgKmRlZmluaXRpb24gPSBOSUw7CisJYm9vbAkJaXNudWxsOworCUhl YXBUdXBsZSAgIHRzZFR1cDsKKwlGb3JtX3BnX3RzX2RpY3QgdHNkRm9ybTsKKworCXRzZFR1cCA9 IFNlYXJjaFN5c0NhY2hlMShUU0RJQ1RPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsK KwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHNkVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxv b2t1cCBmYWlsZWQgZm9yIHRleHQgc2VhcmNoIGRpY3Rpb25hcnkgIgorCQkJICJ3aXRoIE9JRCAl dSIsIG9iamVjdElkKTsKKwl0c2RGb3JtID0gKEZvcm1fcGdfdHNfZGljdCkgR0VUU1RSVUNUKHRz ZFR1cCk7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICogQUxURVIgVEVYVCBTRUFSQ0gg RElDVElPTkFSWSAle2lkZW50aXR5fUQgKCV7ZGVmaW5pdGlvbjosIH1zKQorCSAqLworCisJYWx0 ZXJUU0QgPSBuZXdfb2JqdHJlZSgiQUxURVIgVEVYVCBTRUFSQ0ggRElDVElPTkFSWSIpOworCisJ YXBwZW5kX29iamVjdF9vYmplY3QoYWx0ZXJUU0QsICIle2lkZW50aXR5fUQiLAorCQkJCQkJIG5l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZSh0c2RGb3JtLT5kaWN0bmFtZXNwYWNlLAorCQkJCQkJCQkJ CQkJICBOYW1lU3RyKHRzZEZvcm0tPmRpY3RuYW1lKSkpOworCisJLyogQWRkIHRoZSBkZWZpbml0 aW9uIGxpc3QgYWNjb3JkaW5nIHRvIHRoZSBwZ190c19kaWN0IGRpY3Rpbml0b3B0aW9uIGNvbHVt biAqLworCW9wdGlvbnMgPSBTeXNDYWNoZUdldEF0dHIoVFNESUNUT0lELCB0c2RUdXAsCisJCQkJ CQkJICBBbnVtX3BnX3RzX2RpY3RfZGljdGluaXRvcHRpb24sCisJCQkJCQkJICAmaXNudWxsKTsK Kwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiIiwgMCk7CisJaWYgKCFpc251bGwpCisJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KHRtcCwgIiV7b3B0aW9uc31zIiwgVGV4dERhdHVtR2V0Q1N0cmluZyhvcHRp b25zKSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNl KTsKKworCWRlZmluaXRpb24gPSBsYXBwZW5kKGRlZmluaXRpb24sIG5ld19vYmplY3Rfb2JqZWN0 KHRtcCkpOworCWFwcGVuZF9hcnJheV9vYmplY3QoYWx0ZXJUU0QsICIoJXtkZWZpbml0aW9uOiwg fXMpIiwgZGVmaW5pdGlvbik7CisJUmVsZWFzZVN5c0NhY2hlKHRzZFR1cCk7CisKKwlyZXR1cm4g YWx0ZXJUU0Q7Cit9CisKKy8qCisgKiAuLi4gQUxURVIgQ09MVU1OIC4uLiBTRVQvUkVTRVQgKC4u LikKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9SZWxTZXRPcHRpb25zKEFsdGVyVGFi bGVDbWQgKnN1YmNtZCkKK3sKKwlMaXN0CSAgICpzZXRzID0gTklMOworCUxpc3RDZWxsICAgKmNl bGw7CisJT2JqVHJlZQkgICAqcmVsc2V0OworCWNoYXIJICAgKmZtdDsKKwlib29sCQlpc19yZXNl dCA9IHN1YmNtZC0+c3VidHlwZSA9PSBBVF9SZXNldFJlbE9wdGlvbnM7CisKKwkvKgorCSAqIFZl cmJvc2Ugc3ludGF4CisJICoKKwkgKiBSRVNFVHxTRVQgKCV7b3B0aW9uczosIH1zKQorCSAqLwor CWlmIChpc19yZXNldCkKKwkJZm10ID0gIlJFU0VUICI7CisJZWxzZQorCQlmbXQgPSAiU0VUICI7 CisKKwlyZWxzZXQgPSBuZXdfb2JqdHJlZShmbXQpOworCisJZm9yZWFjaChjZWxsLCAoTGlzdCAq KSBzdWJjbWQtPmRlZikKKwl7CisJCURlZkVsZW0JICAgKmVsZW07CisJCU9ialRyZWUJICAgKnNl dDsKKworCQllbGVtID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCQlzZXQgPSBkZXBhcnNl X0RlZkVsZW0oZWxlbSwgaXNfcmVzZXQpOworCQlzZXRzID0gbGFwcGVuZChzZXRzLCBuZXdfb2Jq ZWN0X29iamVjdChzZXQpKTsKKwl9CisKKwlBc3NlcnQoc2V0cyk7CisJYXBwZW5kX2FycmF5X29i amVjdChyZWxzZXQsICIoJXtvcHRpb25zOiwgfXMpIiwgc2V0cyk7CisKKwlyZXR1cm4gcmVsc2V0 OworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZVRyaWdTdG10IChDUkVBVEUgVFJJR0dFUikK KyAqCisgKiBHaXZlbiBhIHRyaWdnZXIgT0lEIGFuZCB0aGUgcGFyc2V0cmVlIHRoYXQgY3JlYXRl ZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29t bWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVUcmlnU3RtdChPaWQg b2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVUcmlnU3RtdCAqbm9kZSA9IChD cmVhdGVUcmlnU3RtdCAqKSBwYXJzZXRyZWU7CisJUmVsYXRpb24JcGdfdHJpZ2dlcjsKKwlIZWFw VHVwbGUJdHJpZ1R1cDsKKwlGb3JtX3BnX3RyaWdnZXIgdHJpZ0Zvcm07CisJT2JqVHJlZQkgICAq dHJpZ2dlcjsKKwlPYmpUcmVlCSAgICp0bXBvYmo7CisJaW50CQkJdGduYXJnczsKKwlMaXN0CSAg ICpsaXN0OworCUxpc3QJICAgKmV2ZW50czsKKworCXBnX3RyaWdnZXIgPSB0YWJsZV9vcGVuKFRy aWdnZXJSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJdHJpZ1R1cCA9IGdldF9jYXRh bG9nX29iamVjdF9ieV9vaWQocGdfdHJpZ2dlciwgQW51bV9wZ190cmlnZ2VyX29pZCwgb2JqZWN0 SWQpOworCXRyaWdGb3JtID0gKEZvcm1fcGdfdHJpZ2dlcikgR0VUU1RSVUNUKHRyaWdUdXApOwor CisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICogQ1JFQVRFICV7Y29uc3RyYWludH1z IFRSSUdHRVIgJXtuYW1lfUkgJXt0aW1lfXMgJXtldmVudHM6IE9SIH1zCisJICogT04gJXtyZWxh dGlvbn1EICV7ZnJvbV90YWJsZX1zICV7Y29uc3RyYWludF9hdHRyczogfXMKKwkgKiBGT1IgRUFD SCAle2Zvcl9lYWNofXMgJXt3aGVufXMgRVhFQ1VURSBQUk9DRURVUkUgJXtmdW5jdGlvbn1zCisJ ICovCisJdHJpZ2dlciA9IG5ld19vYmp0cmVlKCJDUkVBVEUiKTsKKworCWFwcGVuZF9zdHJpbmdf b2JqZWN0KHRyaWdnZXIsICIle2NvbnN0cmFpbnR9cyIsCisJCQkJCQkgbm9kZS0+aXNjb25zdHJh aW50ID8gIkNPTlNUUkFJTlQiIDogIiIpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QodHJpZ2dl ciwgIlRSSUdHRVIgJXtuYW1lfUkiLCBub2RlLT50cmlnbmFtZSk7CisKKwlpZiAobm9kZS0+dGlt aW5nID09IFRSSUdHRVJfVFlQRV9CRUZPUkUpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRyaWdn ZXIsICIle3RpbWV9cyIsICJCRUZPUkUiKTsKKwllbHNlIGlmIChub2RlLT50aW1pbmcgPT0gVFJJ R0dFUl9UWVBFX0FGVEVSKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0cmlnZ2VyLCAiJXt0aW1l fXMiLCAiQUZURVIiKTsKKwllbHNlIGlmIChub2RlLT50aW1pbmcgPT0gVFJJR0dFUl9UWVBFX0lO U1RFQUQpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRyaWdnZXIsICIle3RpbWV9cyIsICJJTlNU RUFEIE9GIik7CisJZWxzZQorCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIHRyaWdnZXIgdGlt aW5nIHR5cGUgJWQiLCBub2RlLT50aW1pbmcpOworCisJLyoKKwkgKiBEZWNvZGUgdGhlIGV2ZW50 cyB0aGF0IHRoZSB0cmlnZ2VyIGZpcmVzIGZvci4gIFRoZSBvdXRwdXQgaXMgYSBsaXN0OworCSAq IGluIG1vc3QgY2FzZXMgaXQgd2lsbCBqdXN0IGJlIGEgc3RyaW5nIHdpdGggdGhlIGV2ZW50IG5h bWUsIGJ1dCB3aGVuCisJICogdGhlcmUncyBhbiBVUERBVEUgd2l0aCBhIGxpc3Qgb2YgY29sdW1u cywgd2UgcmV0dXJuIGEgSlNPTiBvYmplY3QuCisJICovCisJZXZlbnRzID0gTklMOworCWlmIChu b2RlLT5ldmVudHMgJiBUUklHR0VSX1RZUEVfSU5TRVJUKQorCQlldmVudHMgPSBsYXBwZW5kKGV2 ZW50cywgbmV3X3N0cmluZ19vYmplY3QoIklOU0VSVCIpKTsKKwlpZiAobm9kZS0+ZXZlbnRzICYg VFJJR0dFUl9UWVBFX0RFTEVURSkKKwkJZXZlbnRzID0gbGFwcGVuZChldmVudHMsIG5ld19zdHJp bmdfb2JqZWN0KCJERUxFVEUiKSk7CisJaWYgKG5vZGUtPmV2ZW50cyAmIFRSSUdHRVJfVFlQRV9U UlVOQ0FURSkKKwkJZXZlbnRzID0gbGFwcGVuZChldmVudHMsIG5ld19zdHJpbmdfb2JqZWN0KCJU UlVOQ0FURSIpKTsKKwlpZiAobm9kZS0+ZXZlbnRzICYgVFJJR0dFUl9UWVBFX1VQREFURSkKKwl7 CisJCWlmIChub2RlLT5jb2x1bW5zID09IE5JTCkKKwkJeworCQkJZXZlbnRzID0gbGFwcGVuZChl dmVudHMsIG5ld19zdHJpbmdfb2JqZWN0KCJVUERBVEUiKSk7CisJCX0KKwkJZWxzZQorCQl7CisJ CQlPYmpUcmVlCSAgICp1cGRhdGU7CisJCQlMaXN0Q2VsbCAgICpjZWxsOworCQkJTGlzdAkgICAq Y29scyA9IE5JTDsKKworCQkJLyoKKwkJCSAqIEN1cnJlbnRseSBvbmx5IFVQREFURSBPRiBjYW4g YmUgb2JqZWN0cyBpbiB0aGUgb3V0cHV0IEpTT04sIGJ1dAorCQkJICogd2UgYWRkIGEgImtpbmQi IGVsZW1lbnQgc28gdGhhdCB1c2VyIGNvZGUgY2FuIGRpc3Rpbmd1aXNoCisJCQkgKiBwb3NzaWJs ZSBmdXR1cmUgbmV3IGV2ZW50IHR5cGVzLgorCQkJICovCisJCQl1cGRhdGUgPSBuZXdfb2JqdHJl ZV9WQSgiVVBEQVRFIE9GIiwgMSwKKwkJCQkJCQkJCSJraW5kIiwgT2JqVHlwZVN0cmluZywgInVw ZGF0ZV9vZiIpOworCisJCQlmb3JlYWNoKGNlbGwsIG5vZGUtPmNvbHVtbnMpCisJCQl7CisJCQkJ Y2hhciAgICpjb2xuYW1lID0gc3RyVmFsKGxmaXJzdChjZWxsKSk7CisKKwkJCQljb2xzID0gbGFw cGVuZChjb2xzLCBuZXdfc3RyaW5nX29iamVjdChjb2xuYW1lKSk7CisJCQl9CisKKwkJCWFwcGVu ZF9hcnJheV9vYmplY3QodXBkYXRlLCAiJXtjb2x1bW5zOiwgfUkiLCBjb2xzKTsKKworCQkJZXZl bnRzID0gbGFwcGVuZChldmVudHMsIG5ld19vYmplY3Rfb2JqZWN0KHVwZGF0ZSkpOworCQl9CisJ fQorCWFwcGVuZF9hcnJheV9vYmplY3QodHJpZ2dlciwgIiV7ZXZlbnRzOiBPUiB9cyIsIGV2ZW50 cyk7CisKKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxh dGlvbklkLAorCQkJCQkJCQkJICB0cmlnRm9ybS0+dGdyZWxpZCk7CisJYXBwZW5kX29iamVjdF9v YmplY3QodHJpZ2dlciwgIk9OICV7cmVsYXRpb259RCIsIHRtcG9iaik7CisKKwl0bXBvYmogPSBu ZXdfb2JqdHJlZV9WQSgiRlJPTSIsIDApOworCWlmICh0cmlnRm9ybS0+dGdjb25zdHJyZWxpZCkK Kwl7CisJCU9ialRyZWUJICAgKnJlbDsKKworCQlyZWwgPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5h bWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCSAgdHJpZ0Zvcm0tPnRnY29uc3Ry cmVsaWQpOworCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle3JlbGF0aW9ufUQiLCBy ZWwpOworCX0KKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50Iiwg ZmFsc2UpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRyaWdnZXIsICIle2Zyb21fdGFibGV9cyIs IHRtcG9iaik7CisKKwlsaXN0ID0gTklMOworCWlmIChub2RlLT5kZWZlcnJhYmxlKQorCQlsaXN0 ID0gbGFwcGVuZChsaXN0LAorCQkJCQkgICBuZXdfc3RyaW5nX29iamVjdCgiREVGRVJSQUJMRSIp KTsKKwlpZiAobm9kZS0+aW5pdGRlZmVycmVkKQorCQlsaXN0ID0gbGFwcGVuZChsaXN0LAorCQkJ CQkgICBuZXdfc3RyaW5nX29iamVjdCgiSU5JVElBTExZIERFRkVSUkVEIikpOworCWFwcGVuZF9h cnJheV9vYmplY3QodHJpZ2dlciwgIiV7Y29uc3RyYWludF9hdHRyczogfXMiLCBsaXN0KTsKKwor CWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRyaWdnZXIsICJGT1IgRUFDSCAle2Zvcl9lYWNofXMiLAor CQkJCQkJIG5vZGUtPnJvdyA/ICJST1ciIDogIlNUQVRFTUVOVCIpOworCisJdG1wb2JqID0gbmV3 X29ianRyZWVfVkEoIldIRU4iLCAwKTsKKwlpZiAobm9kZS0+d2hlbkNsYXVzZSkKKwl7CisJCU5v ZGUJICAgKndoZW5DbGF1c2U7CisJCURhdHVtCQl2YWx1ZTsKKwkJYm9vbAkJaXNudWxsOworCisJ CXZhbHVlID0gZmFzdGdldGF0dHIodHJpZ1R1cCwgQW51bV9wZ190cmlnZ2VyX3RncXVhbCwKKwkJ CQkJCQlSZWxhdGlvbkdldERlc2NyKHBnX3RyaWdnZXIpLCAmaXNudWxsKTsKKwkJaWYgKGlzbnVs bCkKKwkJCWVsb2coRVJST1IsICJib2d1cyBOVUxMIHRncXVhbCIpOworCisJCXdoZW5DbGF1c2Ug PSBzdHJpbmdUb05vZGUoVGV4dERhdHVtR2V0Q1N0cmluZyh2YWx1ZSkpOworCQlhcHBlbmRfc3Ry aW5nX29iamVjdCh0bXBvYmosICIoJXtjbGF1c2V9cykiLAorCQkJCQkJCSBwZ19nZXRfdHJpZ2dl cl93aGVuY2xhdXNlKHRyaWdGb3JtLAorCQkJCQkJCQkJCQkJCSAgIHdoZW5DbGF1c2UsCisJCQkJ CQkJCQkJCQkJICAgZmFsc2UpKTsKKwl9CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1w b2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdCh0cmlnZ2VyLCAi JXt3aGVufXMiLCB0bXBvYmopOworCisJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIiV7ZnVuY25h bWV9RCIsIDEsCisJCQkJCQkgImZ1bmNuYW1lIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdf b2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJ CQkgdHJpZ0Zvcm0tPnRnZm9pZCkpOworCWxpc3QgPSBOSUw7CisJdGduYXJncyA9IHRyaWdGb3Jt LT50Z25hcmdzOworCWlmICh0Z25hcmdzID4gMCkKKwl7CisJCWJ5dGVhICAqdGdhcmdzOworCQlj aGFyICAgKmFyZ3N0cjsKKwkJYm9vbAlpc251bGw7CisJCWludAkJZmluZHg7CisJCWludAkJbGVu dGdhcmdzOworCQljaGFyICAgKnA7CisKKwkJdGdhcmdzID0gRGF0dW1HZXRCeXRlYVAoZmFzdGdl dGF0dHIodHJpZ1R1cCwKKwkJCQkJCQkJCQkJQW51bV9wZ190cmlnZ2VyX3RnYXJncywKKwkJCQkJ CQkJCQkJUmVsYXRpb25HZXREZXNjcihwZ190cmlnZ2VyKSwKKwkJCQkJCQkJCQkJJmlzbnVsbCkp OworCQlpZiAoaXNudWxsKQorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgTlVMTCB0Z2FyZ3MiKTsK KwkJYXJnc3RyID0gKGNoYXIgKikgVkFSREFUQSh0Z2FyZ3MpOworCQlsZW50Z2FyZ3MgPSBWQVJT SVpFX0FOWV9FWEhEUih0Z2FyZ3MpOworCisJCXAgPSBhcmdzdHI7CisJCWZvciAoZmluZHggPSAw OyBmaW5keCA8IHRnbmFyZ3M7IGZpbmR4KyspCisJCXsKKwkJCXNpemVfdAl0bGVuOworCisJCQkv KiBWZXJpZnkgdGhhdCB0aGUgYXJndW1lbnQgZW5jb2RpbmcgaXMgY29ycmVjdCAqLworCQkJdGxl biA9IHN0cmxlbihwKTsKKwkJCWlmIChwICsgdGxlbiA+PSBhcmdzdHIgKyBsZW50Z2FyZ3MpCisJ CQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVU RVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiaW52YWxpZCBhcmd1bWVudCBzdHJpbmcgKCVzKSBm b3IgdHJpZ2dlciBcIiVzXCIiLAorCQkJCQkJCQlhcmdzdHIsIE5hbWVTdHIodHJpZ0Zvcm0tPnRn bmFtZSkpKSk7CisKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KHAp KTsKKworCQkJcCArPSB0bGVuICsgMTsKKwkJfQorCX0KKworCWFwcGVuZF9mb3JtYXRfc3RyaW5n KHRtcG9iaiwgIigiKTsKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcG9iaiwgIiV7YXJnczosIH1M IiwgbGlzdCk7CQkvKiBtaWdodCBiZSBOSUwgKi8KKwlhcHBlbmRfZm9ybWF0X3N0cmluZyh0bXBv YmosICIpIik7CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdCh0cmlnZ2VyLCAiRVhFQ1VURSBQUk9D RURVUkUgJXtmdW5jdGlvbn1zIiwgdG1wb2JqKTsKKworCXRhYmxlX2Nsb3NlKHBnX3RyaWdnZXIs IEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gdHJpZ2dlcjsKK30KKworLyoKKyAqIERlcGFy c2UgYSBSZWZyZXNoTWF0Vmlld1N0bXQgKFJFRlJFU0ggTUFURVJJQUxJWkVEIFZJRVcpCisgKgor ICogR2l2ZW4gYSBtYXRlcmlhbGl6ZWQgdmlldyBPSUQgYW5kIHRoZSBwYXJzZXRyZWUgdGhhdCBj cmVhdGVkIGl0LCByZXR1cm4gYW4KKyAqIE9ialRyZWUgcmVwcmVzZW50aW5nIHRoZSByZWZyZXNo IGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfUmVmcmVzaE1hdFZpZXdT dG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCVJlZnJlc2hNYXRWaWV3U3Rt dCAqbm9kZSA9IChSZWZyZXNoTWF0Vmlld1N0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUJICAg KnJlZnJlc2hTdG10OworCU9ialRyZWUJICAgKnRtcDsKKworCXJlZnJlc2hTdG10ID0gbmV3X29i anRyZWVfVkEoIlJFRlJFU0ggTUFURVJJQUxJWkVEIFZJRVciLCAwKTsKKworCS8qIGFkZCBhIENP TkNVUlJFTlRMWSBjbGF1c2UgKi8KKwlhcHBlbmRfc3RyaW5nX29iamVjdChyZWZyZXNoU3RtdCwg IiV7Y29uY3VycmVudGx5fXMiLAorCQkJCQkJIG5vZGUtPmNvbmN1cnJlbnQgPyAiQ09OQ1VSUkVO VExZIiA6ICIiKTsKKwkvKiBhZGQgdGhlIG1hdHZpZXcgbmFtZSAqLworCWFwcGVuZF9vYmplY3Rf b2JqZWN0KHJlZnJlc2hTdG10LCAiJXtpZGVudGl0eX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9m b3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSBvYmplY3RJ ZCkpOworCS8qIGFkZCBhIFdJVEggTk8gREFUQSBjbGF1c2UgKi8KKwl0bXAgPSBuZXdfb2JqdHJl ZV9WQSgiV0lUSCBOTyBEQVRBIiwgMSwKKwkJCQkJCSAicHJlc2VudCIsIE9ialR5cGVCb29sLAor CQkJCQkJIG5vZGUtPnNraXBEYXRhID8gdHJ1ZSA6IGZhbHNlKTsKKwlhcHBlbmRfb2JqZWN0X29i amVjdChyZWZyZXNoU3RtdCwgIiV7d2l0aF9ub19kYXRhfXMiLCB0bXApOworCisJcmV0dXJuIHJl ZnJlc2hTdG10OworfQorCisvKgorICogRGVwYXJzZSBEZWZFbGVtcywgYXMgdXNlZCBlLmcuIGJ5 IEFMVEVSIENPTFVNTiAuLi4gU0VULCBpbnRvIGEgbGlzdCBvZiBTRVQKKyAqICguLi4pICBvciBS RVNFVCAoLi4uKSBjb250ZW50cy4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9EZWZF bGVtKERlZkVsZW0gKmVsZW0sIGJvb2wgaXNfcmVzZXQpCit7CisJT2JqVHJlZQkgICAqc2V0Owor CU9ialRyZWUJICAgKm9wdG5hbWU7CisKKwlzZXQgPSBuZXdfb2JqdHJlZSgiIik7CisJb3B0bmFt ZSA9IG5ld19vYmp0cmVlKCIiKTsKKworCWlmIChlbGVtLT5kZWZuYW1lc3BhY2UgIT0gTlVMTCkK KwkJYXBwZW5kX3N0cmluZ19vYmplY3Qob3B0bmFtZSwgIiV7c2NoZW1hfUkuIiwgZWxlbS0+ZGVm bmFtZXNwYWNlKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KG9wdG5hbWUsICIle2xhYmVsfUki LCBlbGVtLT5kZWZuYW1lKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHNldCwgIiV7bGFiZWx9 cyIsIG9wdG5hbWUpOworCisJaWYgKCFpc19yZXNldCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3Qo c2V0LCAiID0gJXt2YWx1ZX1MIiwKKwkJCQkJCQkgZWxlbS0+YXJnID8gZGVmR2V0U3RyaW5nKGVs ZW0pIDoKKwkJCQkJCQkgZGVmR2V0Qm9vbGVhbihlbGVtKSA/ICJUUlVFIiA6ICJGQUxTRSIpOwor CisJcmV0dXJuIHNldDsKK30KKworLyoKKyAqIEhhbmRsZSBkZXBhcnNpbmcgb2YgRFJPUCBjb21t YW5kcy4KKyAqLworY2hhciAqCitkZXBhcnNlX2Ryb3BfY29tbWFuZChjb25zdCBjaGFyICpvYmpp ZGVudGl0eSwgY29uc3QgY2hhciAqb2JqZWN0dHlwZSwKKwkJCQkJIERyb3BCZWhhdmlvciBiZWhh dmlvcikKK3sKKwlTdHJpbmdJbmZvRGF0YSAgc3RyOworCWNoYXIJCSAgICpjb21tYW5kOworCWNo YXIJCSAgICppZGVudGl0eSA9IChjaGFyICopIG9iamlkZW50aXR5OworCWNoYXIJCSAgICpmbXQ7 CisJT2JqVHJlZQkJKnN0bXQsICpzdG10MjsKKwlKc29uYgkJICAqanNvbmI7CisKKwlpbml0U3Ry aW5nSW5mbygmc3RyKTsKKworCWZtdCA9IHBzcHJpbnRmKCJEUk9QICVzIElGIEVYSVNUUyAlJXtv YmppZGVudGl0eX1zIiwgb2JqZWN0dHlwZSk7CisKKwlzdG10ID0gbmV3X29ianRyZWVfVkEoZm10 LCAxLCAib2JqaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBpZGVudGl0eSk7CisJc3RtdDIgPSBu ZXdfb2JqdHJlZV9WQSgiQ0FTQ0FERSIsIDEsCisJCQkJCQkgICAicHJlc2VudCIsIE9ialR5cGVC b29sLCBiZWhhdmlvciA9PSBEUk9QX0NBU0NBREUpOworCisJYXBwZW5kX29iamVjdF9vYmplY3Qo c3RtdCwgIiV7Y2FzY2FkZX1zIiwgc3RtdDIpOworCisJanNvbmIgPSBvYmp0cmVlX3RvX2pzb25i KHN0bXQpOworCWNvbW1hbmQgPSBKc29uYlRvQ1N0cmluZygmc3RyLCAmanNvbmItPnJvb3QsIEpT T05CX0VTVElNQVRFRF9MRU4pOworCisJcmV0dXJuIGNvbW1hbmQ7Cit9CisKKy8qCisgKiBIYW5k bGUgZGVwYXJzaW5nIHNldHRpbmcgb2YgRnVuY3Rpb24KKyAqLworc3RhdGljIE9ialRyZWUgKgor ZGVwYXJzZV9GdW5jdGlvblNldChWYXJpYWJsZVNldEtpbmQga2luZCwgY2hhciAqbmFtZSwgY2hh ciAqdmFsdWUpCit7CisJT2JqVHJlZQkgICAqb2JqOworCisJaWYgKGtpbmQgPT0gVkFSX1JFU0VU X0FMTCkKKwl7CisJCW9iaiA9IG5ld19vYmp0cmVlKCJSRVNFVCBBTEwiKTsKKwl9CisJZWxzZSBp ZiAodmFsdWUgIT0gTlVMTCkKKwl7CisJCW9iaiA9IG5ld19vYmp0cmVlX1ZBKCJTRVQgJXtzZXRf bmFtZX1JIiwgMSwKKwkJCQkJCSAgICJzZXRfbmFtZSIsIE9ialR5cGVTdHJpbmcsIG5hbWUpOwor CisJCS8qCisJCSAqIFNvbWUgR1VDIHZhcmlhYmxlIG5hbWVzIGFyZSAnTElTVCcgdHlwZSBhbmQg aGVuY2UgbXVzdCBub3QgYmUKKwkJICogcXVvdGVkLgorCQkgKi8KKwkJaWYgKEdldENvbmZpZ09w dGlvbkZsYWdzKG5hbWUsIHRydWUpICYgR1VDX0xJU1RfUVVPVEUpCisJCQlhcHBlbmRfc3RyaW5n X29iamVjdChvYmosICJUTyAle3NldF92YWx1ZX1zIiwgdmFsdWUpOworCQllbHNlCisJCQlhcHBl bmRfc3RyaW5nX29iamVjdChvYmosICJUTyAle3NldF92YWx1ZX1MIiwgdmFsdWUpOworCX0KKwll bHNlCisJeworCQlvYmogPSBuZXdfb2JqdHJlZSgiUkVTRVQiKTsKKwkJYXBwZW5kX3N0cmluZ19v YmplY3Qob2JqLCAiJXtzZXRfbmFtZX1JIiwgbmFtZSk7CisJfQorCisJcmV0dXJuIG9iajsKK30K KworLyoKKyAqIERlcGFyc2UgYW4gSW5kZXhTdG10LgorICoKKyAqIEdpdmVuIGFuIGluZGV4IE9J RCBhbmQgdGhlIHBhcnNldHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisg KiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICogSWYgdGhlIGluZGV4 IGNvcnJlc3BvbmRzIHRvIGEgY29uc3RyYWludCwgTlVMTCBpcyByZXR1cm5lZC4KKyAqLworc3Rh dGljIE9ialRyZWUgKgorZGVwYXJzZV9JbmRleFN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJz ZXRyZWUpCit7CisJSW5kZXhTdG10ICAqbm9kZSA9IChJbmRleFN0bXQgKikgcGFyc2V0cmVlOwor CU9ialRyZWUJICAgKmluZGV4U3RtdDsKKwlPYmpUcmVlCSAgICp0bXBvYmo7CisJUmVsYXRpb24J aWR4cmVsOworCVJlbGF0aW9uCWhlYXByZWw7CisJY2hhcgkgICAqaW5kZXhfYW07CisJY2hhcgkg ICAqZGVmaW5pdGlvbjsKKwljaGFyCSAgICpyZWxvcHRpb25zOworCWNoYXIJICAgKnRhYmxlc3Bh Y2U7CisJY2hhcgkgICAqd2hlcmVDbGF1c2U7CisKKwlpZiAobm9kZS0+cHJpbWFyeSB8fCBub2Rl LT5pc2NvbnN0cmFpbnQpCisJeworCQkvKgorCQkgKiBJbmRleGVzIGZvciBQUklNQVJZIEtFWSBh bmQgb3RoZXIgY29uc3RyYWludHMgYXJlIG91dHB1dAorCQkgKiBzZXBhcmF0ZWx5OyByZXR1cm4g ZW1wdHkgaGVyZS4KKwkJICovCisJCXJldHVybiBOVUxMOworCX0KKworCWlkeHJlbCA9IHJlbGF0 aW9uX29wZW4ob2JqZWN0SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJaGVhcHJlbCA9IHJlbGF0aW9u X29wZW4oaWR4cmVsLT5yZF9pbmRleC0+aW5kcmVsaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlw Z19nZXRfaW5kZXhkZWZfZGV0YWlsZWQob2JqZWN0SWQsCisJCQkJCQkJICZpbmRleF9hbSwgJmRl ZmluaXRpb24sICZyZWxvcHRpb25zLAorCQkJCQkJCSAmdGFibGVzcGFjZSwgJndoZXJlQ2xhdXNl KTsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIENSRUFURSAle3VuaXF1ZX1z IElOREVYICV7Y29uY3VycmVudGx5fXMgJXtpZl9ub3RfZXhpc3RzfXMgJXtuYW1lfUkgT04KKwkg KiAle3RhYmxlfUQgVVNJTkcgJXtpbmRleF9hbX1zICgle2RlZmluaXRpb259cykgJXt3aXRofXMg JXt0YWJsZXNwYWNlfXMKKwkgKiAle3doZXJlX2NsYXVzZX1zCisJICovCisJaW5kZXhTdG10ID0g bmV3X29ianRyZWUoIkNSRUFURSIpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoaW5kZXhTdG10 LCAiJXt1bmlxdWV9cyIsCisJCQkJCQkgbm9kZS0+dW5pcXVlID8gIlVOSVFVRSIgOiAiIik7CisK KwlhcHBlbmRfZm9ybWF0X3N0cmluZyhpbmRleFN0bXQsICJJTkRFWCIpOworCisJYXBwZW5kX3N0 cmluZ19vYmplY3QoaW5kZXhTdG10LCAiJXtjb25jdXJyZW50bHl9cyIsCisJCQkJCQkgbm9kZS0+ Y29uY3VycmVudCA/ICJDT05DVVJSRU5UTFkiIDogIiIpOworCisJYXBwZW5kX3N0cmluZ19vYmpl Y3QoaW5kZXhTdG10LCAiJXtpZl9ub3RfZXhpc3RzfXMiLAorCQkJCQkJIG5vZGUtPmlmX25vdF9l eGlzdHMgPyAiSUYgTk9UIEVYSVNUUyIgOiAiIik7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChp bmRleFN0bXQsICIle25hbWV9SSIsCisJCQkJCQkgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoaWR4 cmVsKSk7CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChpbmRleFN0bXQsICJPTiAle3RhYmxlfUQi LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShoZWFwcmVsLT5yZF9yZWwtPnJlbG5h bWVzcGFjZSwKKwkJCQkJCSBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShoZWFwcmVsKSkpOworCisJ YXBwZW5kX3N0cmluZ19vYmplY3QoaW5kZXhTdG10LCAiVVNJTkcgJXtpbmRleF9hbX1zIiwgaW5k ZXhfYW0pOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoaW5kZXhTdG10LCAiKCV7ZGVmaW5pdGlv bn1zKSIsIGRlZmluaXRpb24pOworCisJLyogcmVsb3B0aW9ucyAqLworCXRtcG9iaiA9IG5ld19v Ymp0cmVlKCJXSVRIIik7CisJaWYgKHJlbG9wdGlvbnMpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KHRtcG9iaiwgIigle29wdHN9cykiLCByZWxvcHRpb25zKTsKKwllbHNlCisJCWFwcGVuZF9ib29s X29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KGluZGV4U3RtdCwgIiV7d2l0aH1zIiwgdG1wb2JqKTsKKworCS8qIHRhYmxlc3BhY2UgKi8KKwl0 bXBvYmogPSBuZXdfb2JqdHJlZSgiVEFCTEVTUEFDRSIpOworCWlmICh0YWJsZXNwYWNlKQorCQlh cHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle3RhYmxlc3BhY2V9cyIsIHRhYmxlc3BhY2Up OworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7 CisJYXBwZW5kX29iamVjdF9vYmplY3QoaW5kZXhTdG10LCAiJXt0YWJsZXNwYWNlfXMiLCB0bXBv YmopOworCisJLyogV0hFUkUgY2xhdXNlICovCisJdG1wb2JqID0gbmV3X29ianRyZWUoIldIRVJF Iik7CisJaWYgKHdoZXJlQ2xhdXNlKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIl e3doZXJlfXMiLCB3aGVyZUNsYXVzZSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1w b2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChpbmRleFN0bXQs ICIle3doZXJlX2NsYXVzZX1zIiwgdG1wb2JqKTsKKworCXRhYmxlX2Nsb3NlKGlkeHJlbCwgQWNj ZXNzU2hhcmVMb2NrKTsKKwl0YWJsZV9jbG9zZShoZWFwcmVsLCBBY2Nlc3NTaGFyZUxvY2spOwor CisJcmV0dXJuIGluZGV4U3RtdDsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIElOSEVSSVRTIHJl bGF0aW9ucy4KKyAqCisgKiBHaXZlbiBhIHRhYmxlIE9JRCwgcmV0dXJuIGEgc2NoZW1hIHF1YWxp ZmllZCB0YWJsZSBsaXN0IHJlcHJlc2VudGluZworICogdGhlIHBhcmVudCB0YWJsZXMuCisgKi8K K3N0YXRpYyBMaXN0ICoKK2RlcGFyc2VfSW5oUmVsYXRpb25zKE9pZCBvYmplY3RJZCkKK3sKKwlM aXN0CSAgICpwYXJlbnRzID0gTklMOworCVJlbGF0aW9uCWluaFJlbDsKKwlTeXNTY2FuRGVzYyBz Y2FuOworCVNjYW5LZXlEYXRhIGtleTsKKwlIZWFwVHVwbGUJdHVwbGU7CisKKwlpbmhSZWwgPSB0 YWJsZV9vcGVuKEluaGVyaXRzUmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisKKwlTY2Fu S2V5SW5pdCgma2V5LAorCQkJCUFudW1fcGdfaW5oZXJpdHNfaW5ocmVsaWQsCisJCQkJQlRFcXVh bFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCU9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQp KTsKKworCXNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4oaW5oUmVsLCBJbmhlcml0c1JlbGlkU2Vx bm9JbmRleElkLAorCQkJCQkJCSAgdHJ1ZSwgTlVMTCwgMSwgJmtleSk7CisKKwl3aGlsZSAoSGVh cFR1cGxlSXNWYWxpZCh0dXBsZSA9IHN5c3RhYmxlX2dldG5leHQoc2NhbikpKQorCXsKKwkJT2Jq VHJlZQkqcGFyZW50OworCQlGb3JtX3BnX2luaGVyaXRzIGZvcm1JbmggPSAoRm9ybV9wZ19pbmhl cml0cykgR0VUU1RSVUNUKHR1cGxlKTsKKworCQlwYXJlbnQgPSBuZXdfb2JqdHJlZV9mb3JfcXVh bG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkgZm9ybUluaC0+aW5ocGFy ZW50KTsKKwkJcGFyZW50cyA9IGxhcHBlbmQocGFyZW50cywgbmV3X29iamVjdF9vYmplY3QocGFy ZW50KSk7CisJfQorCisJc3lzdGFibGVfZW5kc2NhbihzY2FuKTsKKwl0YWJsZV9jbG9zZShpbmhS ZWwsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJcmV0dXJuIHBhcmVudHM7Cit9CisKKy8qCisgKiBE ZXBhcnNlIHRoZSBPTiBDT01NTUlUIC4uLiBjbGF1c2UgZm9yIENSRUFURSAuLi4gVEVNUE9SQVJZ IC4uLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX09uQ29tbWl0Q2xhdXNlKE9uQ29t bWl0QWN0aW9uIG9wdGlvbikKK3sKKwlPYmpUcmVlCSAgICpvbmNvbW1pdDsKKworCW9uY29tbWl0 ID0gbmV3X29ianRyZWUoIk9OIENPTU1JVCIpOworCXN3aXRjaCAob3B0aW9uKQorCXsKKwkJY2Fz ZSBPTkNPTU1JVF9EUk9QOgorCQkJYXBwZW5kX3N0cmluZ19vYmplY3Qob25jb21taXQsICIle29u X2NvbW1pdF92YWx1ZX1zIiwgIkRST1AiKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT05DT01NSVRf REVMRVRFX1JPV1M6CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChvbmNvbW1pdCwgIiV7b25fY29t bWl0X3ZhbHVlfXMiLCAiREVMRVRFIFJPV1MiKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT05DT01N SVRfUFJFU0VSVkVfUk9XUzoKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KG9uY29tbWl0LCAiJXtv bl9jb21taXRfdmFsdWV9cyIsICJQUkVTRVJWRSBST1dTIik7CisJCQlicmVhazsKKworCQljYXNl IE9OQ09NTUlUX05PT1A6CisJCQlhcHBlbmRfbnVsbF9vYmplY3Qob25jb21taXQsICIle29uX2Nv bW1pdF92YWx1ZX1zIik7CisJCQlhcHBlbmRfYm9vbF9vYmplY3Qob25jb21taXQsICJwcmVzZW50 IiwgZmFsc2UpOworCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIG9uY29tbWl0OworfQorCisvKgor ICogRGVwYXJzZSBhIFJlbmFtZVN0bXQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2Vf UmVuYW1lU3RtdChPYmplY3RBZGRyZXNzIGFkZHJlc3MsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlS ZW5hbWVTdG10ICpub2RlID0gKFJlbmFtZVN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUJICAg KnJlbmFtZVN0bXQ7CisJY2hhcgkgICAqZm10c3RyOworCWNvbnN0IGNoYXIgKm9ianR5cGU7CisJ UmVsYXRpb24JcmVsYXRpb247CisJT2lkCQkJc2NoZW1hSWQ7CisKKwkvKgorCSAqIEluIGFuIEFM VEVSIC4uIFJFTkFNRSBjb21tYW5kLCB3ZSBkb24ndCBoYXZlIHRoZSBvcmlnaW5hbCBuYW1lIG9m IHRoZQorCSAqIG9iamVjdCBpbiBzeXN0ZW0gY2F0YWxvZ3M6IHNpbmNlIHdlIGluc3BlY3QgdGhl bSBhZnRlciB0aGUgY29tbWFuZCBoYXMKKwkgKiBleGVjdXRlZCwgdGhlIG9sZCBuYW1lIGlzIGFs cmVhZHkgZ29uZS4gIFRoZXJlZm9yZSwgd2UgZXh0cmFjdCBpdCBmcm9tCisJICogdGhlIHBhcnNl IG5vZGUuICBOb3RlIHdlIHN0aWxsIGV4dHJhY3QgdGhlIHNjaGVtYSBuYW1lIGZyb20gdGhlIGNh dGFsb2cKKwkgKiAoaXQgbWlnaHQgbm90IGJlIHByZXNlbnQgaW4gdGhlIHBhcnNlIG5vZGUpOyBp dCBjYW5ub3QgcG9zc2libHkgaGF2ZQorCSAqIGNoYW5nZWQgYW55d2F5LgorCSAqLworCXN3aXRj aCAobm9kZS0+cmVuYW1lVHlwZSkKKwl7CisJCWNhc2UgT0JKRUNUX1RBQkxFOgorCQljYXNlIE9C SkVDVF9JTkRFWDoKKwkJY2FzZSBPQkpFQ1RfU0VRVUVOQ0U6CisKKwkJCS8qCisJCQkgKiBWZXJi b3NlIHN5bnRheAorCQkJICoKKwkJCSAqIEFMVEVSICVzICV7aWZfZXhpc3RzfXMgJXtpZGVudGl0 eX1EIFJFTkFNRSBUTyAle25ld25hbWV9SQorCQkJICovCisJCQlvYmp0eXBlID0gc3RyaW5naWZ5 X29ianR5cGUobm9kZS0+cmVuYW1lVHlwZSk7CisJCQlmbXRzdHIgPSBwc3ByaW50ZigiQUxURVIg JXMiLCBvYmp0eXBlKTsKKwkJCXJlbGF0aW9uID0gcmVsYXRpb25fb3BlbihhZGRyZXNzLm9iamVj dElkLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJc2NoZW1hSWQgPSBSZWxhdGlvbkdldE5hbWVzcGFj ZShyZWxhdGlvbik7CisJCQlyZW5hbWVTdG10ID0gbmV3X29ianRyZWVfVkEoZm10c3RyLCAwKTsK KwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJlbmFtZVN0bXQsICIle2lmX2V4aXN0c31zIiwKKwkJ CQkJCQkJIG5vZGUtPm1pc3Npbmdfb2sgPyAiSUYgRVhJU1RTIiA6ICIiKTsKKwkJCWFwcGVuZF9v YmplY3Rfb2JqZWN0KHJlbmFtZVN0bXQsICIle2lkZW50aXR5fUQiLAorCQkJCQkJCQkgbmV3X29i anRyZWVfZm9yX3F1YWxuYW1lKHNjaGVtYUlkLAorCQkJCQkJCQkJCQkJCQkgIG5vZGUtPnJlbGF0 aW9uLT5yZWxuYW1lKSk7CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZW5hbWVTdG10LCAiUkVO QU1FIFRPICV7bmV3bmFtZX1JIiwKKwkJCQkJCQkJIG5vZGUtPm5ld25hbWUpOworCQkJcmVsYXRp b25fY2xvc2UocmVsYXRpb24sIEFjY2Vzc1NoYXJlTG9jayk7CisJCQlicmVhazsKKworCQljYXNl IE9CSkVDVF9QT0xJQ1k6CisJCQl7CisJCQkJSGVhcFR1cGxlCXBvbFR1cDsKKwkJCQlGb3JtX3Bn X3BvbGljeSBwb2xGb3JtOworCQkJCVJlbGF0aW9uCXBnX3BvbGljeTsKKwkJCQlTY2FuS2V5RGF0 YQlrZXk7CisJCQkJU3lzU2NhbkRlc2MJc2NhbjsKKworCQkJCXBnX3BvbGljeSA9IHJlbGF0aW9u X29wZW4oUG9saWN5UmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCQlTY2FuS2V5SW5p dCgma2V5LCBBbnVtX3BnX3BvbGljeV9vaWQsCisJCQkJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVy LCBGX09JREVRLAorCQkJCQkJCU9iamVjdElkR2V0RGF0dW0oYWRkcmVzcy5vYmplY3RJZCkpOwor CQkJCXNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4ocGdfcG9saWN5LCBQb2xpY3lPaWRJbmRleElk LCB0cnVlLAorCQkJCQkJCQkJCSAgTlVMTCwgMSwgJmtleSk7CisJCQkJcG9sVHVwID0gc3lzdGFi bGVfZ2V0bmV4dChzY2FuKTsKKwkJCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocG9sVHVwKSkKKwkJ CQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHBvbGljeSAldSIsIGFkZHJl c3Mub2JqZWN0SWQpOworCQkJCXBvbEZvcm0gPSAoRm9ybV9wZ19wb2xpY3kpIEdFVFNUUlVDVChw b2xUdXApOworCisJCQkJcmVuYW1lU3RtdCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBQT0xJQ1ki LCAwKTsKKwkJCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZW5hbWVTdG10LCAiJXtpZl9leGlzdHN9 cyIsCisJCQkJCQkJCQkgbm9kZS0+bWlzc2luZ19vayA/ICJJRiBFWElTVFMiIDogIiIpOworCQkJ CWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJlbmFtZVN0bXQsICIle3BvbGljeW5hbWV9SSIsIG5vZGUt PnN1Ym5hbWUpOworCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJlbmFtZVN0bXQsICJPTiAle2lk ZW50aXR5fUQiLAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlv blJlbGF0aW9uSWQsCisJCQkJCQkJCQkgcG9sRm9ybS0+cG9scmVsaWQpKTsKKwkJCQlhcHBlbmRf c3RyaW5nX29iamVjdChyZW5hbWVTdG10LCAiUkVOQU1FIFRPICV7bmV3bmFtZX1JIiwKKwkJCQkJ CQkJCSBub2RlLT5uZXduYW1lKTsKKwkJCQlzeXN0YWJsZV9lbmRzY2FuKHNjYW4pOworCQkJCXJl bGF0aW9uX2Nsb3NlKHBnX3BvbGljeSwgQWNjZXNzU2hhcmVMb2NrKTsKKworCQkJfQorCQkJYnJl YWs7CisKKwkJY2FzZSBPQkpFQ1RfQVRUUklCVVRFOgorCQljYXNlIE9CSkVDVF9DT0xVTU46CisJ CQlyZWxhdGlvbiA9IHJlbGF0aW9uX29wZW4oYWRkcmVzcy5vYmplY3RJZCwgQWNjZXNzU2hhcmVM b2NrKTsKKwkJCXNjaGVtYUlkID0gUmVsYXRpb25HZXROYW1lc3BhY2UocmVsYXRpb24pOworCisJ CQkvKgorCQkJICogVmVyYm9zZSBzeW50YXgKKwkJCSAqCisJCQkgKiBDb21wb3NpdGUgdHlwZXM6 IEFMVEVSIG9ianR5cGUgJXtpZGVudGl0eX1EIFJFTkFNRSBBVFRSSUJVVEUKKwkJCSAqICV7Y29s bmFtZX1JIFRPICV7bmV3bmFtZX1JICV7Y2FzY2FkZX1zCisJCQkgKgorCQkJICogTm9ybWFsIHR5 cGVzOiBBTFRFUiBvYmp0eXBlICV7aWZfZXhpc3RzfXMgJSV7aWRlbnRpdHl9RCBSRU5BTUUKKwkJ CSAqIENPTFVNTiAle2NvbG5hbWV9SSBUTyAle25ld25hbWV9SQorCQkJICovCisKKwkJCWlmIChu b2RlLT5yZW5hbWVUeXBlID09IE9CSkVDVF9BVFRSSUJVVEUpCisJCQl7CisJCQkJcmVuYW1lU3Rt dCA9IG5ld19vYmp0cmVlKCJBTFRFUiBUWVBFIik7CisJCQkJCQlhcHBlbmRfb2JqZWN0X29iamVj dChyZW5hbWVTdG10LCAiJXtpZGVudGl0eX1EIiwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9x dWFsbmFtZShzY2hlbWFJZCwKKwkJCQkJCQkJCQkJCQkJICBub2RlLT5yZWxhdGlvbi0+cmVsbmFt ZSkpOworCQkJCWZtdHN0ciA9IHBzcHJpbnRmKCJSRU5BTUUgQVRUUklCVVRFICUle2NvbG5hbWV9 SSIpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCW9ianR5cGUgPSBzdHJpbmdpZnlfb2JqdHlw ZShub2RlLT5yZWxhdGlvblR5cGUpOworCQkJCWZtdHN0ciA9IHBzcHJpbnRmKCJBTFRFUiAlcyIs IG9ianR5cGUpOworCQkJCXJlbmFtZVN0bXQgPSBuZXdfb2JqdHJlZShmbXRzdHIpOworCisJCQkJ LyogQ29tcG9zaXRlIHR5cGVzIGRvIG5vdCBzdXBwb3J0IElGIEVYSVNUUyAqLworCQkJCWlmIChu b2RlLT5yZW5hbWVUeXBlID09IE9CSkVDVF9DT0xVTU4pCisJCQkJCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KHJlbmFtZVN0bXQsICIle2lmX2V4aXN0c31zIiwKKwkJCQkJCQkJCQlub2RlLT5taXNzaW5n X29rID8gIklGIEVYSVNUUyIgOiAiIik7CisKKwkJCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZW5h bWVTdG10LCAiJXtpZGVudGl0eX1EIiwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5h bWUoc2NoZW1hSWQsCisJCQkJCQkJCQkJCQkJCQkgIG5vZGUtPnJlbGF0aW9uLT5yZWxuYW1lKSk7 CisJCQkJZm10c3RyID0gcHNwcmludGYoIlJFTkFNRSBDT0xVTU4gJSV7Y29sbmFtZX1JIik7CisJ CQl9CisKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJlbmFtZVN0bXQsIGZtdHN0ciwgbm9kZS0+ c3VibmFtZSk7CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZW5hbWVTdG10LCAiVE8gJXtuZXdu YW1lfUkiLCBub2RlLT5uZXduYW1lKTsKKworCQkJaWYgKG5vZGUtPnJlbmFtZVR5cGUgPT0gT0JK RUNUX0FUVFJJQlVURSkKKwkJCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZW5hbWVTdG10LCAiJXtj YXNjYWRlfXMiLAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX1ZBKCJDQVNDQURFIiwgMSwKKwkJCQkJ CQkJCQkJCQkicHJlc2VudCIsIE9ialR5cGVCb29sLAorCQkJCQkJCQkJCQkJCW5vZGUtPmJlaGF2 aW9yID09IERST1BfQ0FTQ0FERSkpOworCisJCQlyZWxhdGlvbl9jbG9zZShyZWxhdGlvbiwgQWNj ZXNzU2hhcmVMb2NrKTsKKworCQkJYnJlYWs7CisJCWNhc2UgT0JKRUNUX0ZVTkNUSU9OOgorCQkJ eworCQkJCWNoYXIJKmlkZW50OworCQkJCUhlYXBUdXBsZSBwcm9jdHVwOworCQkJCUZvcm1fcGdf cHJvYyBwcm9jZm9ybTsKKwkJCQlMaXN0CSAgICppZGVudGl0eTsKKworCQkJCUFzc2VydChJc0Eo bm9kZS0+b2JqZWN0LCBPYmplY3RXaXRoQXJncykpOworCQkJCWlkZW50aXR5ID0gKChPYmplY3RX aXRoQXJncyAqKSBub2RlLT5vYmplY3QpLT5vYmpuYW1lOworCisJCQkJcHJvY3R1cCA9IFNlYXJj aFN5c0NhY2hlMShQUk9DT0lELAorCQkJCQkJCQkJCSAgT2JqZWN0SWRHZXREYXR1bShhZGRyZXNz Lm9iamVjdElkKSk7CisJCQkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHByb2N0dXApKQorCQkJCQll bG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcHJvY2VkdXJlICV1IiwKKwkJCQkJ CSBhZGRyZXNzLm9iamVjdElkKTsKKwkJCQlwcm9jZm9ybSA9IChGb3JtX3BnX3Byb2MpIEdFVFNU UlVDVChwcm9jdHVwKTsKKworCQkJCS8qIFhYWCBkb2VzIHRoaXMgd29yayBmb3Igb3JkZXJlZC1z ZXQgYWdncmVnYXRlcz8gKi8KKwkJCQlpZGVudCA9IHBzcHJpbnRmKCIlcyVzIiwKKwkJCQkJCQkJ IHF1b3RlX3F1YWxpZmllZF9pZGVudGlmaWVyKGdldF9uYW1lc3BhY2VfbmFtZShwcm9jZm9ybS0+ cHJvbmFtZXNwYWNlKSwKKwkJCQkJCQkJCQkJCQkJCXN0clZhbChsbGFzdChpZGVudGl0eSkpKSwK KwkJCQkJCQkJIGZvcm1hdF9wcm9jZWR1cmVfYXJncyhhZGRyZXNzLm9iamVjdElkLCB0cnVlKSk7 CisKKwkJCQlmbXRzdHIgPSBwc3ByaW50ZigiQUxURVIgJXMgJSV7aWRlbnRpdHl9cyBSRU5BTUUg VE8gJSV7bmV3bmFtZX1JIiwKKwkJCQkJCQkJICBzdHJpbmdpZnlfb2JqdHlwZShub2RlLT5yZW5h bWVUeXBlKSk7CisJCQkJcmVuYW1lU3RtdCA9IG5ld19vYmp0cmVlX1ZBKGZtdHN0ciwgMiwKKwkJ CQkJCQkJCQkJImlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywgaWRlbnQsCisJCQkJCQkJCQkJCSJu ZXduYW1lIiwgT2JqVHlwZVN0cmluZywgbm9kZS0+bmV3bmFtZSk7CisKKwkJCQlSZWxlYXNlU3lz Q2FjaGUocHJvY3R1cCk7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIE9CSkVDVF9PUENMQVNT OgorCQkJeworCQkJCUhlYXBUdXBsZSAgIG9wY1R1cDsKKwkJCQlGb3JtX3BnX29wY2xhc3Mgb3Bj Rm9ybTsKKwkJCQlMaXN0CSAgICpvbGRuYW1lczsKKwkJCQljaGFyCSAgICpzY2hlbWFuYW1lOwor CQkJCWNoYXIJICAgKm9wY25hbWU7CisJCQkJY2hhcgkgICAqZm10OworCisJCQkJZm10ID0gcHNw cmludGYoIkFMVEVSICVzICUle2lkZW50aXR5fUQgVVNJTkcgJSV7aW5kZXhfbWV0aG9kfXMgUkVO QU1FIFRPICUle25ld25hbWV9SSIsCisJCQkJCQkJICAgc3RyaW5naWZ5X29ianR5cGUobm9kZS0+ cmVuYW1lVHlwZSkpOworCisJCQkJb3BjVHVwID0gU2VhcmNoU3lzQ2FjaGUxKENMQU9JRCwgT2Jq ZWN0SWRHZXREYXR1bShhZGRyZXNzLm9iamVjdElkKSk7CisJCQkJaWYgKCFIZWFwVHVwbGVJc1Zh bGlkKG9wY1R1cCkpCisJCQkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBv cGNsYXNzIHdpdGggT0lEICV1IiwKKwkJCQkJCSBhZGRyZXNzLm9iamVjdElkKTsKKworCQkJCW9w Y0Zvcm0gPSAoRm9ybV9wZ19vcGNsYXNzKSBHRVRTVFJVQ1Qob3BjVHVwKTsKKworCQkJCW9sZG5h bWVzID0gbGlzdF9jb3B5X3RhaWwoKExpc3QgKikgbm9kZS0+b2JqZWN0LCAxKTsKKworCQkJCS8q IGRlY29uc3RydWN0IHRoZSBuYW1lIGxpc3QgKi8KKwkJCQlEZWNvbnN0cnVjdFF1YWxpZmllZE5h bWUob2xkbmFtZXMsICZzY2hlbWFuYW1lLCAmb3BjbmFtZSk7CisKKwkJCQlyZW5hbWVTdG10ID0g bmV3X29ianRyZWVfVkEoZm10LCAzLAorCQkJCQkJCQkJCQkiaWRlbnRpdHkiLCBPYmpUeXBlT2Jq ZWN0LAorCQkJCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUob3BjRm9ybS0+b3BjbmFt ZXNwYWNlLAorCQkJCQkJCQkJCQkJCQkJCQkgb3BjbmFtZSksCisJCQkJCQkJCQkJCSJpbmRleF9t ZXRob2QiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCQlnZXRfYW1fbmFtZShvcGNGb3JtLT5v cGNtZXRob2QpLAorCQkJCQkJCQkJCQkibmV3bmFtZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPm5l d25hbWUpOworCisJCQkJUmVsZWFzZVN5c0NhY2hlKG9wY1R1cCk7CisJCQl9CisJCQlicmVhazsK KworCQljYXNlIE9CSkVDVF9PUEZBTUlMWToKKwkJCXsKKwkJCQlIZWFwVHVwbGUgICBvcGZUdXA7 CisJCQkJSGVhcFR1cGxlICAgYW1UdXA7CisJCQkJRm9ybV9wZ19vcGZhbWlseSBvcGZGb3JtOwor CQkJCUZvcm1fcGdfYW0gIGFtRm9ybTsKKwkJCQlMaXN0CSAgICpvbGRuYW1lczsKKwkJCQljaGFy CSAgICpzY2hlbWFuYW1lOworCQkJCWNoYXIJICAgKm9wZm5hbWU7CisJCQkJY2hhcgkgICAqZm10 OworCisJCQkJZm10ID0gcHNwcmludGYoIkFMVEVSICVzICUle2lkZW50aXR5fUQgVVNJTkcgJSV7 aW5kZXhfbWV0aG9kfXMgUkVOQU1FIFRPICUle25ld25hbWV9SSIsCisJCQkJCQkJICAgc3RyaW5n aWZ5X29ianR5cGUobm9kZS0+cmVuYW1lVHlwZSkpOworCisJCQkJb3BmVHVwID0gU2VhcmNoU3lz Q2FjaGUxKE9QRkFNSUxZT0lELCBhZGRyZXNzLm9iamVjdElkKTsKKwkJCQlpZiAoIUhlYXBUdXBs ZUlzVmFsaWQob3BmVHVwKSkKKwkJCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQg Zm9yIG9wZXJhdG9yIGZhbWlseSB3aXRoIE9JRCAldSIsCisJCQkJCQkgYWRkcmVzcy5vYmplY3RJ ZCk7CisJCQkJb3BmRm9ybSA9IChGb3JtX3BnX29wZmFtaWx5KSBHRVRTVFJVQ1Qob3BmVHVwKTsK KworCQkJCWFtVHVwID0gU2VhcmNoU3lzQ2FjaGUxKEFNT0lELCBPYmplY3RJZEdldERhdHVtKG9w ZkZvcm0tPm9wZm1ldGhvZCkpOworCQkJCWlmICghSGVhcFR1cGxlSXNWYWxpZChhbVR1cCkpCisJ CQkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBhY2Nlc3MgbWV0aG9kICV1 IiwKKwkJCQkJCSBvcGZGb3JtLT5vcGZtZXRob2QpOworCisJCQkJYW1Gb3JtID0gKEZvcm1fcGdf YW0pIEdFVFNUUlVDVChhbVR1cCk7CisKKwkJCQlvbGRuYW1lcyA9IGxpc3RfY29weV90YWlsKChM aXN0ICopIG5vZGUtPm9iamVjdCwgMSk7CisKKwkJCQkvKiBkZWNvbnN0cnVjdCB0aGUgbmFtZSBs aXN0ICovCisJCQkJRGVjb25zdHJ1Y3RRdWFsaWZpZWROYW1lKG9sZG5hbWVzLCAmc2NoZW1hbmFt ZSwgJm9wZm5hbWUpOworCisJCQkJcmVuYW1lU3RtdCA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMywK KwkJCQkJCQkJCQkJImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCQkJbmV3X29i anRyZWVfZm9yX3F1YWxuYW1lKG9wZkZvcm0tPm9wZm5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJ CQkJIG9wZm5hbWUpLAorCQkJCQkJCQkJCQkiaW5kZXhfbWV0aG9kIiwgT2JqVHlwZVN0cmluZywK KwkJCQkJCQkJCQkJTmFtZVN0cihhbUZvcm0tPmFtbmFtZSksCisJCQkJCQkJCQkJCSJuZXduYW1l IiwgT2JqVHlwZVN0cmluZywgbm9kZS0+bmV3bmFtZSk7CisKKwkJCQlSZWxlYXNlU3lzQ2FjaGUo YW1UdXApOworCQkJCVJlbGVhc2VTeXNDYWNoZShvcGZUdXApOworCQkJfQorCQkJYnJlYWs7CisK KwkJY2FzZSBPQkpFQ1RfU0NIRU1BOgorCQkJcmVuYW1lU3RtdCA9CisJCQkJbmV3X29ianRyZWVf VkEoIkFMVEVSIFNDSEVNQSAle2lkZW50aXR5fUkgUkVOQU1FIFRPICV7bmV3bmFtZX1JIiwgMiwK KwkJCQkJCQkgICAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5zdWJuYW1lLAorCQkJ CQkJCSAgICJuZXduYW1lIiwgT2JqVHlwZVN0cmluZywgbm9kZS0+bmV3bmFtZSk7CisJCQlicmVh azsKKworCQljYXNlIE9CSkVDVF9GRFc6CisJCQl7CisJCQkJU3RyaW5nICppZGVudGl0eSA9IGNh c3ROb2RlKFN0cmluZywgbm9kZS0+b2JqZWN0KTsKKworCQkJCXJlbmFtZVN0bXQgPQorCQkJCQlu ZXdfb2JqdHJlZV9WQSgiQUxURVIgRk9SRUlHTiBEQVRBIFdSQVBQRVIgJXtpZGVudGl0eX1JIFJF TkFNRSBUTyAle25ld25hbWV9SSIsCisJCQkJCQkJCSAgIDIsICJpZGVudGl0eSIsIE9ialR5cGVT dHJpbmcsIHN0clZhbChpZGVudGl0eSksCisJCQkJCQkJCSAgICJuZXduYW1lIiwgT2JqVHlwZVN0 cmluZywgbm9kZS0+bmV3bmFtZSk7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIE9CSkVDVF9S VUxFOgorCQkJeworCQkJCUhlYXBUdXBsZQlyZXdyVHVwOworCQkJCUZvcm1fcGdfcmV3cml0ZSBy ZXdyRm9ybTsKKwkJCQlSZWxhdGlvbglwZ19yZXdyaXRlOworCisJCQkJcGdfcmV3cml0ZSA9IHJl bGF0aW9uX29wZW4oUmV3cml0ZVJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQkJcmV3 clR1cCA9IGdldF9jYXRhbG9nX29iamVjdF9ieV9vaWQocGdfcmV3cml0ZSwgQW51bV9wZ19yZXdy aXRlX29pZCwgIGFkZHJlc3Mub2JqZWN0SWQpOworCQkJCXJld3JGb3JtID0gKEZvcm1fcGdfcmV3 cml0ZSkgR0VUU1RSVUNUKHJld3JUdXApOworCisJCQkJcmVuYW1lU3RtdCA9IG5ld19vYmp0cmVl X1ZBKCJBTFRFUiBSVUxFICV7cnVsZW5hbWV9SSBPTiAle2lkZW50aXR5fUQgUkVOQU1FIFRPICV7 bmV3bmFtZX1JIiwKKwkJCQkJCQkJCQkJMywKKwkJCQkJCQkJCQkJInJ1bGVuYW1lIiwgT2JqVHlw ZVN0cmluZywgbm9kZS0+c3VibmFtZSwKKwkJCQkJCQkJCQkJImlkZW50aXR5IiwgT2JqVHlwZU9i amVjdCwKKwkJCQkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVs YXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkJCXJld3JGb3JtLT5ldl9jbGFzcyksCisJCQkJCQkJ CQkJCSJuZXduYW1lIiwgT2JqVHlwZVN0cmluZywgbm9kZS0+bmV3bmFtZSk7CisJCQkJcmVsYXRp b25fY2xvc2UocGdfcmV3cml0ZSwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCX0KKwkJCWJyZWFrOwor CisJCWNhc2UgT0JKRUNUX1RSSUdHRVI6CisJCQl7CisJCQkJSGVhcFR1cGxlCXRyaWdUdXA7CisJ CQkJRm9ybV9wZ190cmlnZ2VyIHRyaWdGb3JtOworCQkJCVJlbGF0aW9uCXBnX3RyaWdnZXI7CisK KwkJCQlwZ190cmlnZ2VyID0gcmVsYXRpb25fb3BlbihUcmlnZ2VyUmVsYXRpb25JZCwgQWNjZXNz U2hhcmVMb2NrKTsKKwkJCQl0cmlnVHVwID0gZ2V0X2NhdGFsb2dfb2JqZWN0X2J5X29pZChwZ190 cmlnZ2VyLCBnZXRfb2JqZWN0X2F0dG51bV9vaWQoYWRkcmVzcy5jbGFzc0lkKSwgYWRkcmVzcy5v YmplY3RJZCk7CisJCQkJdHJpZ0Zvcm0gPSAoRm9ybV9wZ190cmlnZ2VyKSBHRVRTVFJVQ1QodHJp Z1R1cCk7CisKKwkJCQlyZW5hbWVTdG10ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIFRSSUdHRVIg JXt0cmlnZ2VybmFtZX1JIE9OICV7aWRlbnRpdHl9RCBSRU5BTUUgVE8gJXtuZXduYW1lfUkiLAor CQkJCQkJCQkJCQkzLAorCQkJCQkJCQkJCQkidHJpZ2dlcm5hbWUiLCBPYmpUeXBlU3RyaW5nLCBu b2RlLT5zdWJuYW1lLAorCQkJCQkJCQkJCQkiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJ CQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAor CQkJCQkJCQkJCQkJCQkJCQkJdHJpZ0Zvcm0tPnRncmVsaWQpLAorCQkJCQkJCQkJCQkibmV3bmFt ZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPm5ld25hbWUpOworCisJCQkJcmVsYXRpb25fY2xvc2Uo cGdfdHJpZ2dlciwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2Ug T0JKRUNUX1RZUEU6CisJCWNhc2UgT0JKRUNUX0NPTlZFUlNJT046CisJCWNhc2UgT0JKRUNUX0RP TUFJTjoKKwkJY2FzZSBPQkpFQ1RfVFNESUNUSU9OQVJZOgorCQljYXNlIE9CSkVDVF9UU1BBUlNF UjoKKwkJY2FzZSBPQkpFQ1RfVFNURU1QTEFURToKKwkJY2FzZSBPQkpFQ1RfVFNDT05GSUdVUkFU SU9OOgorCQkJeworCQkJCUhlYXBUdXBsZQlvYmpUdXA7CisJCQkJUmVsYXRpb24JY2F0YWxvZzsK KwkJCQlEYXR1bQkJb2JqbnNwOworCQkJCWJvb2wJCWlzbnVsbDsKKwkJCQlBdHRyTnVtYmVyCUFu dW1fbmFtZXNwYWNlOworCQkJCUxpc3QJICAgKmlkZW50aXR5ID0gY2FzdE5vZGUoTGlzdCwgbm9k ZS0+b2JqZWN0KTsKKwkJCQljaGFyCSAgICpmbXRzdHJpbmc7CisKKwkJCQkvKiBvYnRhaW4gb2Jq ZWN0IHR1cGxlICovCisJCQkJY2F0YWxvZyA9IHJlbGF0aW9uX29wZW4oYWRkcmVzcy5jbGFzc0lk LCBBY2Nlc3NTaGFyZUxvY2spOworCQkJCW9ialR1cCA9IGdldF9jYXRhbG9nX29iamVjdF9ieV9v aWQoY2F0YWxvZywgZ2V0X29iamVjdF9hdHRudW1fb2lkKGFkZHJlc3MuY2xhc3NJZCksIGFkZHJl c3Mub2JqZWN0SWQpOworCisJCQkJLyogb2J0YWluIG5hbWVzcGFjZSAqLworCQkJCUFudW1fbmFt ZXNwYWNlID0gZ2V0X29iamVjdF9hdHRudW1fbmFtZXNwYWNlKGFkZHJlc3MuY2xhc3NJZCk7CisJ CQkJb2JqbnNwID0gaGVhcF9nZXRhdHRyKG9ialR1cCwgQW51bV9uYW1lc3BhY2UsCisJCQkJCQkJ CQkgIFJlbGF0aW9uR2V0RGVzY3IoY2F0YWxvZyksICZpc251bGwpOworCQkJCWlmIChpc251bGwp CisJCQkJCWVsb2coRVJST1IsICJpbnZhbGlkIE5VTEwgbmFtZXNwYWNlIik7CisKKwkJCQlvYmp0 eXBlID0gc3RyaW5naWZ5X29ianR5cGUobm9kZS0+cmVuYW1lVHlwZSk7CisJCQkJZm10c3RyaW5n ID0gcHNwcmludGYoIkFMVEVSICVzIiwgb2JqdHlwZSk7CisKKwkJCQlyZW5hbWVTdG10ID0gbmV3 X29ianRyZWVfVkEoZm10c3RyaW5nLAorCQkJCQkJCQkJCTApOworCQkJCWFwcGVuZF9vYmplY3Rf b2JqZWN0KHJlbmFtZVN0bXQsICIle2lkZW50aXR5fUQiLAorCQkJCQkJCQkJbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lKERhdHVtR2V0T2JqZWN0SWQob2JqbnNwKSwKKwkJCQkJCQkJCQkJCQkJCSAg c3RyVmFsKGxsYXN0KGlkZW50aXR5KSkpKTsKKworCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJl bmFtZVN0bXQsICJSRU5BTUUgVE8gJXtuZXduYW1lfUkiLAorCQkJCQkJCQkJIG5vZGUtPm5ld25h bWUpOworCQkJCXJlbGF0aW9uX2Nsb3NlKGNhdGFsb2csIEFjY2Vzc1NoYXJlTG9jayk7CisJCQl9 CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVuc3VwcG9ydGVkIG9i amVjdCB0eXBlICVkIiwgbm9kZS0+cmVuYW1lVHlwZSk7CisJfQorCisJcmV0dXJuIHJlbmFtZVN0 bXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQWx0ZXJPYmplY3REZXBlbmRzU3RtdCAoQUxURVIg Li4uIERFUEVORFMgT04gLi4uKS4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRl ckRlcGVuZFN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQWx0ZXJPYmpl Y3REZXBlbmRzU3RtdCAqbm9kZSA9IChBbHRlck9iamVjdERlcGVuZHNTdG10ICopIHBhcnNldHJl ZTsKKwlPYmpUcmVlCQkgICAqYWx0ZXJEZXBlbmRlU3RtdCA9IE5VTEw7CisKKworCWlmIChub2Rl LT5vYmplY3RUeXBlID09IE9CSkVDVF9JTkRFWCkKKwl7CisJCVJlbGF0aW9uICAgICAgICByZWxh dGlvbiA9IHJlbGF0aW9uX29wZW4ob2JqZWN0SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCU9ialRy ZWUgKnF1YWxpZmllZDsKKworCQlhbHRlckRlcGVuZGVTdG10ID0gbmV3X29ianRyZWUoIkFMVEVS IElOREVYIik7CisKKwkJcXVhbGlmaWVkID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHJlbGF0 aW9uLT5yZF9yZWwtPnJlbG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJIG5vZGUtPnJlbGF0aW9uLT5y ZWxuYW1lKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3QoYWx0ZXJEZXBlbmRlU3RtdCwgIiV7aWRl bnRpdHl9RCIsIHF1YWxpZmllZCk7CisJCXJlbGF0aW9uX2Nsb3NlKHJlbGF0aW9uLCBBY2Nlc3NT aGFyZUxvY2spOworCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGFsdGVyRGVwZW5kZVN0bXQsICIl e05PfXMiLAorCQkJCQkJIG5vZGUtPnJlbW92ZSA/ICJOTyIgOiAiIik7CisKKwkJYXBwZW5kX2Zv cm1hdF9zdHJpbmcoYWx0ZXJEZXBlbmRlU3RtdCwgIkRFUEVORFMgT04gRVhURU5TSU9OIik7CisJ CWFwcGVuZF9zdHJpbmdfb2JqZWN0KGFsdGVyRGVwZW5kZVN0bXQsICIle25ld25hbWV9SSIsIHN0 clZhbChub2RlLT5leHRuYW1lKSk7CisJfQorCWVsc2UKKwkJZWxvZyhMT0csICJ1bnJlY29nbml6 ZWQgbm9kZSB0eXBlIGluIGRlcGFyc2UgY29tbWFuZDogJWQiLAorCQkJIChpbnQpIG5vZGVUYWco cGFyc2V0cmVlKSk7CisKKwlyZXR1cm4gYWx0ZXJEZXBlbmRlU3RtdDsKK30KKworLyoKKyAqIERl cGFyc2UgdGhlIHNlcXVlbmNlIENBQ0hFIG9wdGlvbi4KKyAqLworc3RhdGljIGlubGluZSBPYmpF bGVtICoKK2RlcGFyc2VfU2VxX0NhY2hlKE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ19zZXF1ZW5j ZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKQoreworCU9ialRyZWUJICAgKmNhY2hlOworCWNo YXIJICAgKnRtcHN0cjsKKwljaGFyCSAgICpmbXQ7CisKKwl0bXBzdHIgPSBwc3ByaW50ZihJTlQ2 NF9GT1JNQVQsIHNlcWRhdGEtPnNlcWNhY2hlKTsKKworCWlmIChhbHRlcl90YWJsZSkKKwkJZm10 ID0gIlNFVCBDQUNIRSAle3ZhbHVlfXMiOworCWVsc2UKKwkJZm10ID0gIkNBQ0hFICV7dmFsdWV9 cyI7CisKKwljYWNoZSA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMiwKKwkJCQkJCSAgImNsYXVzZSIs IE9ialR5cGVTdHJpbmcsICJjYWNoZSIsCisJCQkJCQkgICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcs IHRtcHN0cik7CisKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QoY2FjaGUpOworfQorCisvKgor ICogRGVwYXJzZSB0aGUgc2VxdWVuY2UgQ1lDTEUgb3B0aW9uLgorICovCitzdGF0aWMgaW5saW5l IE9iakVsZW0gKgorZGVwYXJzZV9TZXFfQ3ljbGUoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3Nl cXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpCit7CisJT2JqVHJlZQkgICAqY3ljbGU7 CisJY2hhcgkgICAqZm10OworCisJaWYgKGFsdGVyX3RhYmxlKQorCQlmbXQgPSAiU0VUICV7bm99 cyBDWUNMRSI7CisJZWxzZQorCQlmbXQgPSAiJXtub31zIENZQ0xFIjsKKworCWN5Y2xlID0gbmV3 X29ianRyZWVfVkEoZm10LCAyLAorCQkJCQkJICAgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJj eWNsZSIsCisJCQkJCQkgICAibm8iLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJICAgc2VxZGF0YS0+ c2VxY3ljbGUgPyAiIiA6ICJOTyIpOworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdChjeWNsZSk7 Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBzZXF1ZW5jZSBJTkNSRU1FTlQgQlkgb3B0aW9uLgor ICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9TZXFfSW5jcmVtZW50QnkoT2Jq VHJlZSAqcGFyZW50LCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUp Cit7CisJT2JqVHJlZQkgICAqaW5jcmVtZW50YWxieTsKKwljaGFyCSAgICp0bXBzdHI7CisJY2hh cgkgICAqZm10OworCisJaWYgKGFsdGVyX3RhYmxlKQorCQlmbXQgPSAiU0VUIElOQ1JFTUVOVCBC WSAle3ZhbHVlfXMiOworCWVsc2UKKwkJZm10ID0gIklOQ1JFTUVOVCBCWSAle3ZhbHVlfXMiOwor CisJdG1wc3RyID0gcHNwcmludGYoSU5UNjRfRk9STUFULCBzZXFkYXRhLT5zZXFpbmNyZW1lbnQp OworCWluY3JlbWVudGFsYnkgPSBuZXdfb2JqdHJlZV9WQShmbXQsIDIsCisJCQkJCQkJCSAgICJj bGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAic2VxaW5jcmVtZW50IiwKKwkJCQkJCQkJICAgInZhbHVl IiwgT2JqVHlwZVN0cmluZywgdG1wc3RyKTsKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QoaW5j cmVtZW50YWxieSk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBzZXF1ZW5jZSBNQVhWQUxVRSBv cHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1NlcV9NYXh2YWx1 ZShPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90 YWJsZSkKK3sKKwlPYmpUcmVlCSAgICptYXh2YWx1ZTsKKwljaGFyCSAgICp0bXBzdHI7CisJY2hh cgkgICAqZm10OworCisJaWYgKGFsdGVyX3RhYmxlKQorCQlmbXQgPSAiU0VUIE1BWFZBTFVFICV7 dmFsdWV9cyI7CisJZWxzZQorCQlmbXQgPSAiTUFYVkFMVUUgJXt2YWx1ZX1zIjsKKworCXRtcHN0 ciA9IHBzcHJpbnRmKElOVDY0X0ZPUk1BVCwgc2VxZGF0YS0+c2VxbWF4KTsKKwltYXh2YWx1ZSA9 IG5ld19vYmp0cmVlX1ZBKGZtdCwgMiwKKwkJCQkJCQkgICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5n LCAibWF4dmFsdWUiLAorCQkJCQkJCSAgInZhbHVlIiwgT2JqVHlwZVN0cmluZywgdG1wc3RyKTsK KwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QobWF4dmFsdWUpOworfQorCisvKgorICogRGVwYXJz ZSB0aGUgc2VxdWVuY2UgTUlOVkFMVUUgb3B0aW9uLgorICovCitzdGF0aWMgaW5saW5lIE9iakVs ZW0gKgorZGVwYXJzZV9TZXFfTWludmFsdWUoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3NlcXVl bmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpCit7CisJT2JqVHJlZQkgICAqbWludmFsdWU7 CisJY2hhcgkgICAqdG1wc3RyOworCWNoYXIJICAgKmZtdDsKKworCWlmIChhbHRlcl90YWJsZSkK KwkJZm10ID0gIlNFVCBNSU5WQUxVRSAle3ZhbHVlfXMiOworCWVsc2UKKwkJZm10ID0gIk1JTlZB TFVFICV7dmFsdWV9cyI7CisKKwl0bXBzdHIgPSBwc3ByaW50ZihJTlQ2NF9GT1JNQVQsIHNlcWRh dGEtPnNlcW1pbik7CisJbWludmFsdWUgPSBuZXdfb2JqdHJlZV9WQShmbXQsIDIsCisJCQkJCQkJ ICAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgIm1pbnZhbHVlIiwKKwkJCQkJCQkgICJ2YWx1ZSIs IE9ialR5cGVTdHJpbmcsIHRtcHN0cik7CisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KG1pbnZh bHVlKTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHNlcXVlbmNlIE9XTkVEIEJZIGNvbW1hbmQu CisgKi8KK3N0YXRpYyBPYmpFbGVtICoKK2RlcGFyc2VfU2VxX093bmVkQnkoT2JqVHJlZSAqcGFy ZW50LCBPaWQgc2VxdWVuY2VJZCwgYm9vbCBhbHRlcl90YWJsZSkKK3sKKwlPYmpUcmVlCSAgICpv d25lZGJ5ID0gTlVMTDsKKwlSZWxhdGlvbglkZXBSZWw7CisJU3lzU2NhbkRlc2Mgc2NhbjsKKwlT Y2FuS2V5RGF0YSBrZXlzWzNdOworCUhlYXBUdXBsZSAgIHR1cGxlOworCisJZGVwUmVsID0gdGFi bGVfb3BlbihEZXBlbmRSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCVNjYW5LZXlJbml0 KCZrZXlzWzBdLAorCQkJCUFudW1fcGdfZGVwZW5kX2NsYXNzaWQsCisJCQkJQlRFcXVhbFN0cmF0 ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCU9iamVjdElkR2V0RGF0dW0oUmVsYXRpb25SZWxhdGlv bklkKSk7CisJU2NhbktleUluaXQoJmtleXNbMV0sCisJCQkJQW51bV9wZ19kZXBlbmRfb2JqaWQs CisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCU9iamVjdElkR2V0RGF0 dW0oc2VxdWVuY2VJZCkpOworCVNjYW5LZXlJbml0KCZrZXlzWzJdLAorCQkJCUFudW1fcGdfZGVw ZW5kX29ianN1YmlkLAorCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9JTlQ0RVEsCisJCQkJ SW50MzJHZXREYXR1bSgwKSk7CisKKwlzY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKGRlcFJlbCwg RGVwZW5kRGVwZW5kZXJJbmRleElkLCB0cnVlLAorCQkJCQkJCSAgTlVMTCwgMywga2V5cyk7CisJ d2hpbGUgKEhlYXBUdXBsZUlzVmFsaWQodHVwbGUgPSBzeXN0YWJsZV9nZXRuZXh0KHNjYW4pKSkK Kwl7CisJCU9pZAkJIG93bmVySWQ7CisJCUZvcm1fcGdfZGVwZW5kIGRlcGZvcm07CisJCU9ialRy ZWUJKnRtcG9iajsKKwkJY2hhcgkgICAqY29sbmFtZTsKKworCQlkZXBmb3JtID0gKEZvcm1fcGdf ZGVwZW5kKSBHRVRTVFJVQ1QodHVwbGUpOworCisJCS8qIE9ubHkgY29uc2lkZXIgQVVUTyBkZXBl bmRlbmNpZXMgb24gcGdfY2xhc3MgKi8KKwkJaWYgKGRlcGZvcm0tPmRlcHR5cGUgIT0gREVQRU5E RU5DWV9BVVRPKQorCQkJY29udGludWU7CisJCWlmIChkZXBmb3JtLT5yZWZjbGFzc2lkICE9IFJl bGF0aW9uUmVsYXRpb25JZCkKKwkJCWNvbnRpbnVlOworCQlpZiAoZGVwZm9ybS0+cmVmb2Jqc3Vi aWQgPD0gMCkKKwkJCWNvbnRpbnVlOworCisJCW93bmVySWQgPSBkZXBmb3JtLT5yZWZvYmppZDsK KwkJY29sbmFtZSA9IGdldF9hdHRuYW1lKG93bmVySWQsIGRlcGZvcm0tPnJlZm9ianN1YmlkLCBm YWxzZSk7CisJCWlmIChjb2xuYW1lID09IE5VTEwpCisJCQljb250aW51ZTsKKworCQl0bXBvYmog PSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLCBvd25lcklk KTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiYXR0cm5hbWUiLCBjb2xuYW1lKTsK KwkJb3duZWRieSA9IG5ld19vYmp0cmVlX1ZBKCJPV05FRCBCWSAle293bmVyfUQiLAorCQkJCQkJ CQkgMiwKKwkJCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAib3duZWQiLAorCQkJCQkJ CQkgIm93bmVyIiwgT2JqVHlwZU9iamVjdCwgdG1wb2JqKTsKKwl9CisKKwlzeXN0YWJsZV9lbmRz Y2FuKHNjYW4pOworCXJlbGF0aW9uX2Nsb3NlKGRlcFJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKwor CS8qCisJICogSWYgdGhlcmUncyBubyBvd25lciBjb2x1bW4sIGVtaXQgYW4gZW1wdHkgT1dORUQg QlkgZWxlbWVudCwgc2V0IHVwIHNvCisJICogdGhhdCBpdCB3b24ndCBwcmludCBhbnl0aGluZy4K KwkgKi8KKwlpZiAoIW93bmVkYnkpCisJCS8qIFhYWCB0aGlzIHNob3VsZG4ndCBoYXBwZW4gLi4u ICovCisJCW93bmVkYnkgPSBuZXdfb2JqdHJlZV9WQSgiT1dORUQgQlkgJXtvd25lcn1EIiwKKwkJ CQkJCQkJIDMsCisJCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgIm93bmVkIiwKKwkJ CQkJCQkJICJvd25lciIsIE9ialR5cGVOdWxsLAorCQkJCQkJCQkgInByZXNlbnQiLCBPYmpUeXBl Qm9vbCwgZmFsc2UpOworCisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KG93bmVkYnkpOworfQor CisvKgorICogRGVwYXJzZSB0aGUgc2VxdWVuY2UgUkVTVEFSVCBvcHRpb24uCisgKi8KK3N0YXRp YyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1NlcV9SZXN0YXJ0KE9ialRyZWUgKnBhcmVudCwg Rm9ybV9wZ19zZXF1ZW5jZV9kYXRhIHNlcWRhdGEpCit7CisJT2JqVHJlZQkgICAqcmVzdGFydDsK KwljaGFyCSAgICp0bXBzdHI7CisKKwl0bXBzdHIgPSBwc3ByaW50ZihJTlQ2NF9GT1JNQVQsIHNl cWRhdGEtPmxhc3RfdmFsdWUpOworCXJlc3RhcnQgPSBuZXdfb2JqdHJlZV9WQSgiUkVTVEFSVCAl e3ZhbHVlfXMiLCAyLAorCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInJlc3RhcnQi LAorCQkJCQkJCSAidmFsdWUiLCBPYmpUeXBlU3RyaW5nLCB0bXBzdHIpOworCXJldHVybiBuZXdf b2JqZWN0X29iamVjdChyZXN0YXJ0KTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHNlcXVlbmNl IFNUQVJUIFdJVEggb3B0aW9uLgorICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJz ZV9TZXFfU3RhcnR3aXRoKE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRh LCBib29sIGFsdGVyX3RhYmxlKQoreworCU9ialRyZWUJICAgKnN0YXJ0d2l0aDsKKwljaGFyCSAg ICp0bXBzdHI7CisJY2hhcgkgICAqZm10OworCisJaWYgKGFsdGVyX3RhYmxlKQorCQlmbXQgPSAi U0VUIFNUQVJUIFdJVEggJXt2YWx1ZX1zIjsKKwllbHNlCisJCWZtdCA9ICJTVEFSVCBXSVRIICV7 dmFsdWV9cyI7CisKKwl0bXBzdHIgPSBwc3ByaW50ZihJTlQ2NF9GT1JNQVQsIHNlcWRhdGEtPnNl cXN0YXJ0KTsKKwlzdGFydHdpdGggPSBuZXdfb2JqdHJlZV9WQShmbXQsIDIsCisJCQkJCQkJICAg ImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJzdGFydCIsCisJCQkJCQkJICAgInZhbHVlIiwgT2Jq VHlwZVN0cmluZywgdG1wc3RyKTsKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3Qoc3RhcnR3aXRo KTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHR5cGUgU1RPUkFHRSBvcHRpb24uCisgKi8KK3N0 YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1R5cGVfU3RvcmFnZShPYmpUcmVlICpwYXJl bnQsIEZvcm1fcGdfdHlwZSB0eXBGb3JtKQoreworCU9ialRyZWUJICAgKnN0b3JhZ2U7CisJY2hh cgkgICAqdG1wc3RyOworCWNoYXIJICAgKmZtdDsKKwljaGFyCSAgICpzdHI7CisKKwlzd2l0Y2gg KHR5cEZvcm0tPnR5cHN0b3JhZ2UpCisJeworCQljYXNlICdwJzoKKwkJCXN0ciA9ICJwbGFpbiI7 CisJCQlicmVhazsKKwkJY2FzZSAnZSc6CisJCQlzdHIgPSAiZXh0ZXJuYWwiOworCQkJYnJlYWs7 CisJCWNhc2UgJ3gnOgorCQkJc3RyID0gImV4dGVuZGVkIjsKKwkJCWJyZWFrOworCQljYXNlICdt JzoKKwkJCXN0ciA9ICJtYWluIjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJP UiwgImludmFsaWQgc3RvcmFnZSBzcGVjaWZpZXIgJWMiLCB0eXBGb3JtLT50eXBzdG9yYWdlKTsK Kwl9CisKKwl0bXBzdHIgPSBwc3ByaW50ZigiJXMiLCBzdHIpOworCisJZm10ID0gIlNUT1JBR0Ug PSAle3ZhbHVlfXMiOworCisJc3RvcmFnZSA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMiwKKwkJCQkJ CSAgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJzdG9yYWdlIiwKKwkJCQkJCSAgInZhbHVlIiwg T2JqVHlwZVN0cmluZywgdG1wc3RyKTsKKworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdChzdG9y YWdlKTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHR5cGUgUkVDRUlWRSBvcHRpb24uCisgKi8K K3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1R5cGVfUmVjZWl2ZShPYmpUcmVlICpw YXJlbnQsIEZvcm1fcGdfdHlwZSB0eXBGb3JtKQoreworCU9ialRyZWUJICAgKnJlY2VpdmU7CisK KwlyZWNlaXZlID0gbmV3X29ianRyZWVfVkEoIlJFQ0VJVkU9IiwgMSwKKwkJCQkJCSAiY2xhdXNl IiwgT2JqVHlwZVN0cmluZywgInJlY2VpdmUiKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50 eXByZWNlaXZlKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocmVjZWl2ZSwgIiV7cHJvY2VkdXJl fUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRp b25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cHJlY2VpdmUpKTsKKwllbHNlCisJCWFw cGVuZF9ib29sX29iamVjdChyZWNlaXZlLCAicHJlc2VudCIsIGZhbHNlKTsKKworCXJldHVybiBu ZXdfb2JqZWN0X29iamVjdChyZWNlaXZlKTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHR5cGUg U0VORCBvcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1R5cGVf U2VuZChPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfdHlwZSB0eXBGb3JtKQoreworCU9ialRyZWUJ ICAgKnNlbmQ7CisKKwlzZW5kID0gbmV3X29ianRyZWVfVkEoIlNFTkQ9IiwgMSwKKwkJCQkJCSAi Y2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInNlbmQiKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3Jt LT50eXBzZW5kKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3Qoc2VuZCwgIiV7cHJvY2VkdXJlfUQi LAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25J ZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cHNlbmQpKTsKKwllbHNlCisJCWFwcGVuZF9i b29sX29iamVjdChzZW5kLCAicHJlc2VudCIsIGZhbHNlKTsKKworCXJldHVybiBuZXdfb2JqZWN0 X29iamVjdChzZW5kKTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHR5cGUgdHlwbW9kX2luIG9w dGlvbi4KKyAqLworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfVHlwZV9UeXBtb2Rf SW4oT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3R5cGUgdHlwRm9ybSkKK3sKKwlPYmpUcmVlCSAg ICp0eXBtb2RpbjsKKworCXR5cG1vZGluID0gbmV3X29ianRyZWVfVkEoIlRZUE1PRF9JTj0iLCAx LAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAidHlwbW9kX2luIik7CisJaWYgKE9p ZElzVmFsaWQodHlwRm9ybS0+dHlwbW9kaW4pKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0eXBt b2RpbiwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVf aWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cG1vZGlu KSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodHlwbW9kaW4sICJwcmVzZW50IiwgZmFs c2UpOworCisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHR5cG1vZGluKTsKK30KKworCisvKgor ICogRGVwYXJzZSB0aGUgdHlwZSB0eXBtb2Rfb3V0IG9wdGlvbi4KKyAqLworc3RhdGljIGlubGlu ZSBPYmpFbGVtICoKK2RlcGFyc2VfVHlwZV9UeXBtb2RfT3V0KE9ialRyZWUgKnBhcmVudCwgRm9y bV9wZ190eXBlIHR5cEZvcm0pCit7CisJT2JqVHJlZQkgICAqdHlwbW9kb3V0OworCisJdHlwbW9k b3V0ID0gbmV3X29ianRyZWVfVkEoIlRZUE1PRF9PVVQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwg T2JqVHlwZVN0cmluZywgInR5cG1vZF9vdXQiKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50 eXBtb2RvdXQpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0eXBtb2RvdXQsICIle3Byb2NlZHVy ZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0 aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBtb2RvdXQpKTsKKwllbHNlCisJCWFw cGVuZF9ib29sX29iamVjdCh0eXBtb2RvdXQsICJwcmVzZW50IiwgZmFsc2UpOworCisJcmV0dXJu IG5ld19vYmplY3Rfb2JqZWN0KHR5cG1vZG91dCk7Cit9CisKKworLyoKKyAqIERlcGFyc2UgdGhl IHR5cGUgYW5hbHl6ZSBvcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBh cnNlX1R5cGVfQW5hbHl6ZShPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfdHlwZSB0eXBGb3JtKQor eworCU9ialRyZWUJICAgKnR5cGFuYWx5emU7CisKKwl0eXBhbmFseXplID0gbmV3X29ianRyZWVf VkEoIkFOQUxZWkU9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImFuYWx5 emUiKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXBhbmFseXplKSkKKwkJYXBwZW5kX29i amVjdF9vYmplY3QodHlwYW5hbHl6ZSwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2Jq dHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJ IHR5cEZvcm0tPnR5cGFuYWx5emUpKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0eXBh bmFseXplLCAicHJlc2VudCIsIGZhbHNlKTsKKworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdCh0 eXBhbmFseXplKTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHR5cGUgc3Vic2NyaXB0IG9wdGlv bi4KKyAqLworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfVHlwZV9TdWJzY3JpcHQo T2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3R5cGUgdHlwRm9ybSkKK3sKKwlPYmpUcmVlCSAgICp0 eXBzdWJzY3JpcHQ7CisKKwl0eXBzdWJzY3JpcHQgPSBuZXdfb2JqdHJlZV9WQSgiU1VCU0NSSVBU PSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJzdWJzY3JpcHQiKTsKKwlp ZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXBzdWJzY3JpcHQpKQorCQlhcHBlbmRfb2JqZWN0X29i amVjdCh0eXBzdWJzY3JpcHQsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBG b3JtLT50eXBzdWJzY3JpcHQpKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0eXBzdWJz Y3JpcHQsICJwcmVzZW50IiwgZmFsc2UpOworCisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHR5 cHN1YnNjcmlwdCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgUnVsZVN0bXQgKENSRUFURSBSVUxF KS4KKyAqCisgKiBHaXZlbiBhIHJ1bGUgT0lEIGFuZCB0aGUgcGFyc2V0cmVlIHRoYXQgY3JlYXRl ZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgcnVsZSBjb21tYW5k LgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX1J1bGVTdG10KE9pZCBvYmplY3RJZCwg Tm9kZSAqcGFyc2V0cmVlKQoreworCVJ1bGVTdG10ICpub2RlID0gKFJ1bGVTdG10ICopIHBhcnNl dHJlZTsKKwlPYmpUcmVlCSAgICpydWxlU3RtdDsKKwlPYmpUcmVlCSAgICp0bXA7CisJUmVsYXRp b24JcGdfcmV3cml0ZTsKKwlGb3JtX3BnX3Jld3JpdGUgcmV3ckZvcm07CisJSGVhcFR1cGxlCXJl d3JUdXA7CisJU3lzU2NhbkRlc2MJc2NhbjsKKwlTY2FuS2V5RGF0YQlrZXk7CisJRGF0dW0JCWV2 X3F1YWw7CisJRGF0dW0JCWV2X2FjdGlvbnM7CisJYm9vbAkJaXNudWxsOworCWNoYXIJICAgKnF1 YWw7CisJTGlzdAkgICAqYWN0aW9uczsKKwlMaXN0CSAgICpsaXN0OworCUxpc3RDZWxsICAgKmNl bGw7CisKKwlwZ19yZXdyaXRlID0gdGFibGVfb3BlbihSZXdyaXRlUmVsYXRpb25JZCwgQWNjZXNz U2hhcmVMb2NrKTsKKwlTY2FuS2V5SW5pdCgma2V5LAorCQkJCUFudW1fcGdfcmV3cml0ZV9vaWQs CisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLAorCQkJCUZfT0lERVEsIE9iamVjdElkR2V0RGF0 dW0ob2JqZWN0SWQpKTsKKworCXNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4ocGdfcmV3cml0ZSwg UmV3cml0ZU9pZEluZGV4SWQsIHRydWUsCisJCQkJCQkJICBOVUxMLCAxLCAma2V5KTsKKwlyZXdy VHVwID0gc3lzdGFibGVfZ2V0bmV4dChzY2FuKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocmV3 clR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciByZXdyaXRlIHJ1 bGUgd2l0aCBvaWQgJXUiLAorCQkJIG9iamVjdElkKTsKKworCXJld3JGb3JtID0gKEZvcm1fcGdf cmV3cml0ZSkgR0VUU1RSVUNUKHJld3JUdXApOworCisJcnVsZVN0bXQgPSBuZXdfb2JqdHJlZSgi Q1JFQVRFIFJVTEUiKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJ1bGVTdG10LCAiJXtvcl9y ZXBsYWNlfXMiLAorCQkJCQkJIG5vZGUtPnJlcGxhY2UgPyAiT1IgUkVQTEFDRSIgOiAiIik7CisK KwlhcHBlbmRfc3RyaW5nX29iamVjdChydWxlU3RtdCwgIiV7aWRlbnRpdHl9SSIsCisJCQkJCQkg bm9kZS0+cnVsZW5hbWUpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QocnVsZVN0bXQsICJBUyBP TiAle2V2ZW50fXMiLAorCQkJCQkJIG5vZGUtPmV2ZW50ID09IENNRF9TRUxFQ1QgPyAiU0VMRUNU IiA6CisJCQkJCQkgbm9kZS0+ZXZlbnQgPT0gQ01EX1VQREFURSA/ICJVUERBVEUiIDoKKwkJCQkJ CSBub2RlLT5ldmVudCA9PSBDTURfREVMRVRFID8gIkRFTEVURSIgOgorCQkJCQkJIG5vZGUtPmV2 ZW50ID09IENNRF9JTlNFUlQgPyAiSU5TRVJUIiA6ICJYWFgiKTsKKwlhcHBlbmRfb2JqZWN0X29i amVjdChydWxlU3RtdCwgIlRPICV7dGFibGV9RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1 YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgcmV3ckZvcm0tPmV2 X2NsYXNzKSk7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChydWxlU3RtdCwgIkRPICV7aW5zdGVh ZH1zIiwKKwkJCQkJCSBub2RlLT5pbnN0ZWFkID8gIklOU1RFQUQiIDogIkFMU08iKTsKKworCWV2 X3F1YWwgPSBoZWFwX2dldGF0dHIocmV3clR1cCwgQW51bV9wZ19yZXdyaXRlX2V2X3F1YWwsCisJ CQkJCQkgICBSZWxhdGlvbkdldERlc2NyKHBnX3Jld3JpdGUpLCAmaXNudWxsKTsKKwlldl9hY3Rp b25zID0gaGVhcF9nZXRhdHRyKHJld3JUdXAsIEFudW1fcGdfcmV3cml0ZV9ldl9hY3Rpb24sCisJ CQkJCQkJICBSZWxhdGlvbkdldERlc2NyKHBnX3Jld3JpdGUpLCAmaXNudWxsKTsKKworCXBnX2dl dF9ydWxlZGVmX2RldGFpbGVkKGV2X3F1YWwsIGV2X2FjdGlvbnMsICZxdWFsLCAmYWN0aW9ucyk7 CisKKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiV0hFUkUgJXtjbGF1c2V9cyIsIDApOworCisJaWYg KHF1YWwpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgImNsYXVzZSIsIHF1YWwpOworCWVs c2UKKwl7CisJCWFwcGVuZF9udWxsX29iamVjdCh0bXAsICJjbGF1c2UiKTsKKwkJYXBwZW5kX2Jv b2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJfQorCisJYXBwZW5kX29iamVjdF9v YmplY3QocnVsZVN0bXQsICJ3aGVyZV9jbGF1c2UiLCB0bXApOworCisJbGlzdCA9IE5JTDsKKwlm b3JlYWNoKGNlbGwsIGFjdGlvbnMpCisJeworCQljaGFyICphY3Rpb24gPSBsZmlyc3QoY2VsbCk7 CisKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QoYWN0aW9uKSk7CisJ fQorCWFwcGVuZF9hcnJheV9vYmplY3QocnVsZVN0bXQsICIle2FjdGlvbnM6LCB9cyIsIGxpc3Qp OworCisJc3lzdGFibGVfZW5kc2NhbihzY2FuKTsKKwl0YWJsZV9jbG9zZShwZ19yZXdyaXRlLCBB Y2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJuIHJ1bGVTdG10OworfQorCisvKgorICogRGVwYXJz ZSBhIENyZWF0ZVRyYW5zZm9ybVN0bXQgKENSRUFURSBUUkFOU0ZPUk0pLgorICoKKyAqIEdpdmVu IGEgdHJhbnNmb3JtIE9JRCBhbmQgdGhlIHBhcnNldHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVy biBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIENSRUFURSBUUkFOU0ZPUk0gY29tbWFu ZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVUcmFuc2Zvcm1TdG10KE9p ZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZVRyYW5zZm9ybVN0bXQgKm5v ZGUgPSAoQ3JlYXRlVHJhbnNmb3JtU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZQkqY3JlYXRl VHJhbnNmb3JtOworCU9ialRyZWUgKnNpZ247CisJSGVhcFR1cGxlIHRyZlR1cDsKKwlIZWFwVHVw bGUgbGFuZ1R1cDsKKwlIZWFwVHVwbGUgcHJvY1R1cDsKKwlGb3JtX3BnX3RyYW5zZm9ybSB0cmZG b3JtOworCUZvcm1fcGdfbGFuZ3VhZ2UgbGFuZ0Zvcm07CisJRm9ybV9wZ19wcm9jIHByb2NGb3Jt OworCWludCBpOworCisJLyogR2V0IHRoZSBwZ190cmFuc2Zvcm0gdHVwbGUgKi8KKwl0cmZUdXAg PSBTZWFyY2hTeXNDYWNoZTEoVFJGT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJ aWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHRyZlR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29r dXAgZmFpbHVyZSBmb3IgdHJhbnNmb3JtIHdpdGggT0lEICV1IiwKKwkJCSBvYmplY3RJZCk7CisJ dHJmRm9ybSA9IChGb3JtX3BnX3RyYW5zZm9ybSkgR0VUU1RSVUNUKHRyZlR1cCk7CisKKwkvKiBH ZXQgdGhlIGNvcnJlc3BvbmRpbmcgcGdfbGFuZ3VhZ2UgdHVwbGUgKi8KKwlsYW5nVHVwID0gU2Vh cmNoU3lzQ2FjaGUxKExBTkdPSUQsIHRyZkZvcm0tPnRyZmxhbmcpOworCWlmICghSGVhcFR1cGxl SXNWYWxpZChsYW5nVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsdXJlIGZv ciBsYW5ndWFnZSB3aXRoIE9JRCAldSIsCisJCQkgdHJmRm9ybS0+dHJmbGFuZyk7CisJbGFuZ0Zv cm0gPSAoRm9ybV9wZ19sYW5ndWFnZSkgR0VUU1RSVUNUKGxhbmdUdXApOworCisJLyoKKwkgKiBW ZXJib3NlIHN5bnRheAorCSAqCisJICogQ1JFQVRFICV7b3JfcmVwbGFjZX1zIFRSQU5TRk9STSBG T1IgJXt0eXBlbmFtZX1EIExBTkdVQUdFICV7bGFuZ3VhZ2V9SQorCSAqICggRlJPTSBTUUwgV0lU SCBGVU5DVElPTiAle3NpZ25hdHVyZX1zLCBUTyBTUUwgV0lUSCBGVU5DVElPTiAle3NpZ25hdHVy ZV90b2Z9cyApCisJICovCisJY3JlYXRlVHJhbnNmb3JtID0gbmV3X29ianRyZWUoIkNSRUFURSIp OworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlVHJhbnNmb3JtLCAiJXtvcl9yZXBsYWNl fXMiLAorCQkJCQkJIG5vZGUtPnJlcGxhY2UgPyAiT1IgUkVQTEFDRSIgOiAiIik7CisJYXBwZW5k X29iamVjdF9vYmplY3QoY3JlYXRlVHJhbnNmb3JtLCAiVFJBTlNGT1JNIEZPUiAle3R5cGVuYW1l fUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChUeXBlUmVsYXRpb25JZCwK KwkJCQkJCQkJCQkJCQkgdHJmRm9ybS0+dHJmdHlwZSkpOworCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KGNyZWF0ZVRyYW5zZm9ybSwgIkxBTkdVQUdFICV7bGFuZ3VhZ2V9SSIsCisJCQkJCQkgTmFtZVN0 cihsYW5nRm9ybS0+bGFubmFtZSkpOworCisJLyogZGVwYXJzZSB0aGUgdHJhbnNmb3JtX2VsZW1l bnRfbGlzdCAqLworCWlmICh0cmZGb3JtLT50cmZmcm9tc3FsICE9IEludmFsaWRPaWQpCisJewor CQlMaXN0ICpwYXJhbXMgPSBOSUw7CisKKwkJLyoKKwkJICogVmVyYm9zZSBzeW50YXgKKwkJICoK KwkJICogQ1JFQVRFICV7b3JfcmVwbGFjZX1zIFRSQU5TRk9STSBGT1IgJXt0eXBlbmFtZX1EIExB TkdVQUdFICV7bGFuZ3VhZ2V9SQorCQkgKiAoIEZST00gU1FMIFdJVEggRlVOQ1RJT04gJXtzaWdu YXR1cmV9cyApCisJCSAqLworCisJCS8qIEdldCB0aGUgcGdfcHJvYyB0dXBsZSBmb3IgdGhlIEZS T00gRlVOQ1RJT04gKi8KKwkJcHJvY1R1cCA9IFNlYXJjaFN5c0NhY2hlMShQUk9DT0lELCB0cmZG b3JtLT50cmZmcm9tc3FsKTsKKwkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHByb2NUdXApKQorCQkJ ZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsdXJlIGZvciBmdW5jdGlvbiB3aXRoIE9JRCAl dSIsCisJCQkJdHJmRm9ybS0+dHJmZnJvbXNxbCk7CisJCXByb2NGb3JtID0gKEZvcm1fcGdfcHJv YykgR0VUU1RSVUNUKHByb2NUdXApOworCisJCS8qCisJCSAqIENSRUFURSBUUkFOU0ZPUk0gZG9l cyBub3QgY2hhbmdlIGZ1bmN0aW9uIHNpZ25hdHVyZSBzbyB3ZSBjYW4gdXNlIGNhdGFsb2cKKwkJ ICogdG8gZ2V0IGlucHV0IHR5cGUgT2lkcy4KKwkJICovCisJCWZvciAoaSA9IDA7IGkgPCBwcm9j Rm9ybS0+cHJvbmFyZ3M7IGkrKykKKwkJeworCQkJT2JqVHJlZSAqcGFyYW1vYmogPSBuZXdfb2Jq dHJlZSgiIik7CisKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHBhcmFtb2JqLCAiJXt0eXBlfVQi LAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUocHJvY0Zvcm0tPnByb2FyZ3R5cGVzLnZh bHVlc1tpXSwgLTEpKTsKKwkJCXBhcmFtcyA9IGxhcHBlbmQocGFyYW1zLCBuZXdfb2JqZWN0X29i amVjdChwYXJhbW9iaikpOworCQl9CisKKwkJc2lnbiA9IG5ld19vYmp0cmVlKCIiKTsKKworCQlh cHBlbmRfb2JqZWN0X29iamVjdChzaWduLCAiJXtpZGVudGl0eX1EIiwKKwkJCQkJCQkgbmV3X29i anRyZWVfZm9yX3F1YWxuYW1lKHByb2NGb3JtLT5wcm9uYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJ ICBOYW1lU3RyKHByb2NGb3JtLT5wcm9uYW1lKSkpOworCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHNp Z24sICIoJXthcmd1bWVudHM6LCB9cykiLCBwYXJhbXMpOworCisJCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KGNyZWF0ZVRyYW5zZm9ybSwgIihGUk9NIFNRTCBXSVRIIEZVTkNUSU9OICV7c2lnbmF0dXJl fXMiLCBzaWduKTsKKwkJUmVsZWFzZVN5c0NhY2hlKHByb2NUdXApOworCX0KKwlpZiAodHJmRm9y bS0+dHJmdG9zcWwgIT0gSW52YWxpZE9pZCkKKwl7CisJCUxpc3QgKnBhcmFtcyA9IE5JTDsKKwor CQkvKgorCQkgKiBWZXJib3NlIHN5bnRheAorCQkgKgorCQkgKiBDUkVBVEUgJXtvcl9yZXBsYWNl fXMgVFJBTlNGT1JNIEZPUiAle3R5cGVuYW1lfUQgTEFOR1VBR0UgJXtsYW5ndWFnZX1JCisJCSAq ICggRlJPTSBTUUwgV0lUSCBGVU5DVElPTiAle3NpZ25hdHVyZX1zLCBUTyBTUUwgV0lUSCBGVU5D VElPTiAle3NpZ25hdHVyZV90b2Z9cyApCisJCSAqCisJCSAqIE9SCisJCSAqCisJCSAqIENSRUFU RSAle29yX3JlcGxhY2V9cyBUUkFOU0ZPUk0gRk9SICV7dHlwZW5hbWV9RCBMQU5HVUFHRSAle2xh bmd1YWdlfUkKKwkJICogKCBUTyBTUUwgV0lUSCBGVU5DVElPTiAle3NpZ25hdHVyZV90b2Z9cyAp CisJCSAqLworCisJCS8qIEFwcGVuZCBhICcsJyBpZiB0cmZmcm9tc3FsIGlzIHByZXNlbnQsIGVs c2UgYXBwZW5kICcoJyAqLworCQlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVUcmFuc2Zvcm0s ICIle2NvbW1hfXMiLAorCQkJCQkJCSB0cmZGb3JtLT50cmZmcm9tc3FsICE9IEludmFsaWRPaWQg PyAiLCIgOiAiKCIpOworCisJCS8qIEdldCB0aGUgcGdfcHJvYyB0dXBsZSBmb3IgdGhlIFRPIEZV TkNUSU9OICovCisJCXByb2NUdXAgPSBTZWFyY2hTeXNDYWNoZTEoUFJPQ09JRCwgdHJmRm9ybS0+ dHJmdG9zcWwpOworCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocHJvY1R1cCkpCisJCQllbG9nKEVS Uk9SLCAiY2FjaGUgbG9va3VwIGZhaWx1cmUgZm9yIGZ1bmN0aW9uIHdpdGggT0lEICV1IiwKKwkJ CQl0cmZGb3JtLT50cmZ0b3NxbCk7CisJCXByb2NGb3JtID0gKEZvcm1fcGdfcHJvYykgR0VUU1RS VUNUKHByb2NUdXApOworCisJCS8qCisJCSAqIENSRUFURSBUUkFOU0ZPUk0gZG9lcyBub3QgY2hh bmdlIGZ1bmN0aW9uIHNpZ25hdHVyZSBzbyB3ZSBjYW4gdXNlIGNhdGFsb2cKKwkJICogdG8gZ2V0 IGlucHV0IHR5cGUgT2lkcy4KKwkJICovCisJCWZvciAoaSA9IDA7IGkgPCBwcm9jRm9ybS0+cHJv bmFyZ3M7IGkrKykKKwkJeworCQkJT2JqVHJlZSAqcGFyYW1vYmogPSBuZXdfb2JqdHJlZSgiIik7 CisKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHBhcmFtb2JqLCAiJXt0eXBlfVQiLAorCQkJCQkJ CQkgbmV3X29ianRyZWVfZm9yX3R5cGUocHJvY0Zvcm0tPnByb2FyZ3R5cGVzLnZhbHVlc1tpXSwg LTEpKTsKKwkJCXBhcmFtcyA9IGxhcHBlbmQocGFyYW1zLCBuZXdfb2JqZWN0X29iamVjdChwYXJh bW9iaikpOworCQl9CisKKwkJc2lnbiA9IG5ld19vYmp0cmVlKCIiKTsKKworCQlhcHBlbmRfb2Jq ZWN0X29iamVjdChzaWduLCAiJXtpZGVudGl0eX1EIiwKKwkJCQkJCQluZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWUocHJvY0Zvcm0tPnByb25hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkgTmFtZVN0cihw cm9jRm9ybS0+cHJvbmFtZSkpKTsKKwkJYXBwZW5kX2FycmF5X29iamVjdChzaWduLCAiKCV7YXJn dW1lbnRzOiwgfXMpIiwgcGFyYW1zKTsKKworCQlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVU cmFuc2Zvcm0sICJUTyBTUUwgV0lUSCBGVU5DVElPTiAle3NpZ25hdHVyZV90b2Z9cyIsIHNpZ24p OworCQlSZWxlYXNlU3lzQ2FjaGUocHJvY1R1cCk7CisJfQorCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KGNyZWF0ZVRyYW5zZm9ybSwgIiV7Y2xvc2VfYnJhY2tldH1zIiwgIikiKTsKKworCVJlbGVhc2VT eXNDYWNoZShsYW5nVHVwKTsKKwlSZWxlYXNlU3lzQ2FjaGUodHJmVHVwKTsKKwlyZXR1cm4gY3Jl YXRlVHJhbnNmb3JtOworfQorCisKKy8qCisgKiBIYW5kbGUgZGVwYXJzaW5nIG9mIHNpbXBsZSBj b21tYW5kcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBjb3ZlciBhbGwgY2FzZXMgaGFu ZGxlZCBpbiBQcm9jZXNzVXRpbGl0eVNsb3cuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFy c2Vfc2ltcGxlX2NvbW1hbmQoQ29sbGVjdGVkQ29tbWFuZCAqY21kKQoreworCU9pZAkJCW9iamVj dElkOworCU5vZGUJICAgKnBhcnNldHJlZTsKKwlPYmpUcmVlCSAgICpjb21tYW5kOworCisJQXNz ZXJ0KGNtZC0+dHlwZSA9PSBTQ1RfU2ltcGxlKTsKKworCXBhcnNldHJlZSA9IGNtZC0+cGFyc2V0 cmVlOworCW9iamVjdElkID0gY21kLT5kLnNpbXBsZS5hZGRyZXNzLm9iamVjdElkOworCisJaWYg KGNtZC0+aW5fZXh0ZW5zaW9uICYmIChub2RlVGFnKHBhcnNldHJlZSkgIT0gVF9DcmVhdGVFeHRl bnNpb25TdG10KSkKKwkJcmV0dXJuIE5VTEw7CisKKworCS8qIFRoaXMgc3dpdGNoIG5lZWRzIHRv IGhhbmRsZSBldmVyeXRoaW5nIHRoYXQgUHJvY2Vzc1V0aWxpdHlTbG93IGRvZXMgKi8KKwlzd2l0 Y2ggKG5vZGVUYWcocGFyc2V0cmVlKSkKKwl7CisJCWNhc2UgVF9DcmVhdGVTY2hlbWFTdG10Ogor CQkJY29tbWFuZCA9IGRlcGFyc2VfQ3JlYXRlU2NoZW1hU3RtdChvYmplY3RJZCwgcGFyc2V0cmVl KTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9BbHRlckRvbWFpblN0bXQ6CisJCQljb21tYW5kID0g ZGVwYXJzZV9BbHRlckRvbWFpblN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSwKKwkJCQkJCQkJCQkJ ICBjbWQtPmQuc2ltcGxlLnNlY29uZGFyeU9iamVjdCk7CisJCQlicmVhazsKKworCQljYXNlIFRf Q3JlYXRlU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0NyZWF0ZVN0bXQob2JqZWN0SWQsIHBh cnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfUmVmcmVzaE1hdFZpZXdTdG10OgorCQkJ Y29tbWFuZCA9IGRlcGFyc2VfUmVmcmVzaE1hdFZpZXdTdG10KG9iamVjdElkLCBwYXJzZXRyZWUp OworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0NyZWF0ZVRyaWdTdG10OgorCQkJY29tbWFuZCA9IGRl cGFyc2VfQ3JlYXRlVHJpZ1N0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKwor CQljYXNlIFRfUnVsZVN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9SdWxlU3RtdChvYmplY3RJ ZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9DcmVhdGVTZXFTdG10OgorCQkJ Y29tbWFuZCA9IGRlcGFyc2VfQ3JlYXRlU2VxU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJ CWJyZWFrOworCisJCWNhc2UgVF9DcmVhdGVGZHdTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2Vf Q3JlYXRlRmR3U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2Ug VF9BbHRlckZkd1N0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9BbHRlckZkd1N0bXQob2JqZWN0 SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQWx0ZXJTZXFTdG10OgorCQkJ Y29tbWFuZCA9IGRlcGFyc2VfQWx0ZXJTZXFTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJ YnJlYWs7CisKKwkJY2FzZSBUX0RlZmluZVN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9EZWZp bmVTdG10KG9iamVjdElkLCBwYXJzZXRyZWUsCisJCQkJCQkJCQkJIGNtZC0+ZC5zaW1wbGUuc2Vj b25kYXJ5T2JqZWN0KTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9DcmVhdGVDb252ZXJzaW9uU3Rt dDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0NyZWF0ZUNvbnZlcnNpb24ob2JqZWN0SWQsIHBhcnNl dHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQ3JlYXRlRG9tYWluU3RtdDoKKwkJCWNvbW1h bmQgPSBkZXBhcnNlX0NyZWF0ZURvbWFpbihvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFr OworCisJCWNhc2UgVF9DcmVhdGVFeHRlbnNpb25TdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2Vf Q3JlYXRlRXh0ZW5zaW9uU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJ CWNhc2UgVF9BbHRlckV4dGVuc2lvblN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9BbHRlckV4 dGVuc2lvblN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRf QWx0ZXJFeHRlbnNpb25Db250ZW50c1N0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9BbHRlckV4 dGVuc2lvbkNvbnRlbnRzU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlLAorCQkJCQkJCQkJCQkJCQkg Y21kLT5kLnNpbXBsZS5zZWNvbmRhcnlPYmplY3QpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0Ny ZWF0ZU9wRmFtaWx5U3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0NyZWF0ZU9wRmFtaWx5KG9i amVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0NyZWF0ZVBvbGljeVN0 bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9DcmVhdGVQb2xpY3lTdG10KG9iamVjdElkLCBwYXJz ZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0luZGV4U3RtdDoKKwkJCWNvbW1hbmQgPSBk ZXBhcnNlX0luZGV4U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNh c2UgVF9DcmVhdGVGdW5jdGlvblN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9DcmVhdGVGdW5j dGlvbihvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9BbHRlckZ1 bmN0aW9uU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0FsdGVyRnVuY3Rpb24ob2JqZWN0SWQs IHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfUmVuYW1lU3RtdDoKKwkJCWNvbW1h bmQgPSBkZXBhcnNlX1JlbmFtZVN0bXQoY21kLT5kLnNpbXBsZS5hZGRyZXNzLCBwYXJzZXRyZWUp OworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0FsdGVyT2JqZWN0RGVwZW5kc1N0bXQ6CisJCQljb21t YW5kID0gZGVwYXJzZV9BbHRlckRlcGVuZFN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQli cmVhazsKKworCQljYXNlIFRfQWx0ZXJPYmplY3RTY2hlbWFTdG10OgorCQkJY29tbWFuZCA9IGRl cGFyc2VfQWx0ZXJPYmplY3RTY2hlbWFTdG10KGNtZC0+ZC5zaW1wbGUuYWRkcmVzcywKKwkJCQkJ CQkJCQkJCQlwYXJzZXRyZWUsCisJCQkJCQkJCQkJCQkJY21kLT5kLnNpbXBsZS5zZWNvbmRhcnlP YmplY3QpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0FsdGVyT3duZXJTdG10OgorCQkJY29tbWFu ZCA9IGRlcGFyc2VfQWx0ZXJPd25lclN0bXQoY21kLT5kLnNpbXBsZS5hZGRyZXNzLCBwYXJzZXRy ZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0FsdGVyT3BlcmF0b3JTdG10OgorCQkJY29tbWFu ZCA9IGRlcGFyc2VfQWx0ZXJPcGVyYXRvclN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQli cmVhazsKKworCQljYXNlIFRfQWx0ZXJQb2xpY3lTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2Vf QWx0ZXJQb2xpY3lTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2Fz ZSBUX0FsdGVyVHlwZVN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9BbHRlclR5cGVTZXRTdG10 KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0NvbXBvc2l0ZVR5 cGVTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQ29tcG9zaXRlVHlwZVN0bXQob2JqZWN0SWQs IHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQ3JlYXRlRW51bVN0bXQ6CS8qIENS RUFURSBUWVBFIEFTIEVOVU0gKi8KKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0NyZWF0ZUVudW1TdG10 KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0NyZWF0ZVJhbmdl U3RtdDoJLyogQ1JFQVRFIFRZUEUgQVMgUkFOR0UgKi8KKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0Ny ZWF0ZVJhbmdlU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2Ug VF9BbHRlckVudW1TdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQWx0ZXJFbnVtU3RtdChvYmpl Y3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9DcmVhdGVDYXN0U3RtdDoK KwkJCWNvbW1hbmQgPSBkZXBhcnNlX0NyZWF0ZUNhc3RTdG10KG9iamVjdElkLCBwYXJzZXRyZWUp OworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0FsdGVyVFNEaWN0aW9uYXJ5U3RtdDoKKwkJCWNvbW1h bmQgPSBkZXBhcnNlX0FsdGVyVFNEaWN0aW9uYXJ5U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsK KwkJCWJyZWFrOworCisJCWNhc2UgVF9DcmVhdGVUcmFuc2Zvcm1TdG10OgorCQkJY29tbWFuZCA9 IGRlcGFyc2VfQ3JlYXRlVHJhbnNmb3JtU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJy ZWFrOworCisJCWRlZmF1bHQ6CisJCQljb21tYW5kID0gTlVMTDsKKwkJCWVsb2coTE9HLCAidW5y ZWNvZ25pemVkIG5vZGUgdHlwZSBpbiBkZXBhcnNlIGNvbW1hbmQ6ICVkIiwKKwkJCQkgKGludCkg bm9kZVRhZyhwYXJzZXRyZWUpKTsKKwl9CisKKwlyZXR1cm4gY29tbWFuZDsKK30KKworLyoKKyAq IFN1YnJvdXRpbmUgZm9yIENSRUFURSBUQUJMRSBkZXBhcnNpbmcuCisgKgorICogRGVhbCB3aXRo IGFsbCB0aGUgdGFibGUgZWxlbWVudHMgKGNvbHVtbnMgYW5kIGNvbnN0cmFpbnRzKS4KKyAqCisg KiBOb3RlIHdlIGlnbm9yZSBjb25zdHJhaW50cyBpbiB0aGUgcGFyc2Ugbm9kZSBoZXJlOyB0aGV5 IGFyZSBleHRyYWN0ZWQgZnJvbQorICogc3lzdGVtIGNhdGFsb2dzIGluc3RlYWQuCisgKi8KK3N0 YXRpYyBMaXN0ICoKK2RlcGFyc2VfVGFibGVFbGVtZW50cyhSZWxhdGlvbiByZWxhdGlvbiwgTGlz dCAqdGFibGVFbGVtZW50cywgTGlzdCAqZHBjb250ZXh0LAorCQkJCQkgIGJvb2wgdHlwZWQsIGJv b2wgY29tcG9zaXRlKQoreworCUxpc3QJICAgKmVsZW1lbnRzID0gTklMOworCUxpc3RDZWxsICAg KmxjOworCisJZm9yZWFjaChsYywgdGFibGVFbGVtZW50cykKKwl7CisJCU5vZGUJICAgKmVsdCA9 IChOb2RlICopIGxmaXJzdChsYyk7CisKKwkJc3dpdGNoIChub2RlVGFnKGVsdCkpCisJCXsKKwkJ CWNhc2UgVF9Db2x1bW5EZWY6CisJCQkJeworCQkJCQlPYmpUcmVlCSAgICp0cmVlOworCisJCQkJ CXRyZWUgPSB0eXBlZCA/CisJCQkJCQlkZXBhcnNlX0NvbHVtbkRlZl90eXBlZChyZWxhdGlvbiwg ZHBjb250ZXh0LAorCQkJCQkJCQkJCQkJKENvbHVtbkRlZiAqKSBlbHQpIDoKKwkJCQkJCWRlcGFy c2VfQ29sdW1uRGVmKHJlbGF0aW9uLCBkcGNvbnRleHQsCisJCQkJCQkJCQkJCSAgY29tcG9zaXRl LCAoQ29sdW1uRGVmICopIGVsdCwKKwkJCQkJCQkJCQkJICBmYWxzZSwgTlVMTCk7CisJCQkJCWlm ICh0cmVlICE9IE5VTEwpCisJCQkJCXsKKwkJCQkJCU9iakVsZW0JKmNvbHVtbjsKKworCQkJCQkJ Y29sdW1uID0gbmV3X29iamVjdF9vYmplY3QodHJlZSk7CisJCQkJCQllbGVtZW50cyA9IGxhcHBl bmQoZWxlbWVudHMsIGNvbHVtbik7CisJCQkJCX0KKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNl IFRfQ29uc3RyYWludDoKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJZWxvZyhFUlJPUiwg ImludmFsaWQgbm9kZSB0eXBlICVkIiwgbm9kZVRhZyhlbHQpKTsKKwkJfQorCX0KKworCXJldHVy biBlbGVtZW50czsKK30KKworLyoKKyAqIFdvcmtob3JzZSB0byBkZXBhcnNlIGEgQ29sbGVjdGVk Q29tbWFuZC4KKyAqLworY2hhciAqCitkZXBhcnNlX3V0aWxpdHlfY29tbWFuZChDb2xsZWN0ZWRD b21tYW5kICpjbWQsIGJvb2wgdmVyYm9zZV9tb2RlKQoreworCU92ZXJyaWRlU2VhcmNoUGF0aCAq b3ZlcnJpZGVQYXRoOworCU1lbW9yeUNvbnRleHQJb2xkY3h0OworCU1lbW9yeUNvbnRleHQJdG1w Y3h0OworCU9ialRyZWUJCSAgICp0cmVlOworCWNoYXIJCSAgICpjb21tYW5kOworCVN0cmluZ0lu Zm9EYXRhICBzdHI7CisKKwkvKgorCSAqIEFsbG9jYXRlIGV2ZXJ5dGhpbmcgZG9uZSBieSB0aGUg ZGVwYXJzaW5nIHJvdXRpbmVzIGludG8gYSB0ZW1wIGNvbnRleHQsCisJICogdG8gYXZvaWQgaGF2 aW5nIHRvIHNwcmlua2xlIHRoZW0gd2l0aCBtZW1vcnkgaGFuZGxpbmcgY29kZTsgYnV0IGFsbG9j YXRlCisJICogdGhlIG91dHB1dCBTdHJpbmdJbmZvIGJlZm9yZSBzd2l0Y2hpbmcuCisJICovCisJ aW5pdFN0cmluZ0luZm8oJnN0cik7CisJdG1wY3h0ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKEN1 cnJlbnRNZW1vcnlDb250ZXh0LAorCQkJCQkJCQkgICAiZGVwYXJzZSBjdHgiLAorCQkJCQkJCQkg ICBBTExPQ1NFVF9ERUZBVUxUX01JTlNJWkUsCisJCQkJCQkJCSAgIEFMTE9DU0VUX0RFRkFVTFRf SU5JVFNJWkUsCisJCQkJCQkJCSAgIEFMTE9DU0VUX0RFRkFVTFRfTUFYU0laRSk7CisJb2xkY3h0 ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHRtcGN4dCk7CisKKwkvKgorCSAqIE1hbnkgcm91dGlu ZXMgdW5kZXJseWluZyB0aGlzIG9uZSB3aWxsIGludm9rZSBydWxldXRpbHMuYyBmdW5jdGlvbmFs aXR5CisJICogaW4gb3JkZXIgdG8gb2J0YWluIGRlcGFyc2VkIHZlcnNpb25zIG9mIGV4cHJlc3Np b25zLiAgSW4gc3VjaCByZXN1bHRzLAorCSAqIHdlIHdhbnQgYWxsIG9iamVjdCBuYW1lcyB0byBi ZSBxdWFsaWZpZWQsIHNvIHRoYXQgcmVzdWx0cyBhcmUgInBvcnRhYmxlIgorCSAqIHRvIGVudmly b25tZW50cyB3aXRoIGRpZmZlcmVudCBzZWFyY2hfcGF0aCBzZXR0aW5ncy4gIFJhdGhlciB0aGFu IGluamVjdAorCSAqIHdoYXQgd291bGQgYmUgcmVwZXRpdGl2ZSBjYWxscyB0byBvdmVycmlkZSBz ZWFyY2ggcGF0aCBhbGwgb3ZlciB0aGUKKwkgKiBwbGFjZSwgd2UgZG8gaXQgY2VudHJhbGx5IGhl cmUuCisJICovCisJb3ZlcnJpZGVQYXRoID0gR2V0T3ZlcnJpZGVTZWFyY2hQYXRoKEN1cnJlbnRN ZW1vcnlDb250ZXh0KTsKKwlvdmVycmlkZVBhdGgtPnNjaGVtYXMgPSBOSUw7CisJb3ZlcnJpZGVQ YXRoLT5hZGRDYXRhbG9nID0gZmFsc2U7CisJb3ZlcnJpZGVQYXRoLT5hZGRUZW1wID0gdHJ1ZTsK KwlQdXNoT3ZlcnJpZGVTZWFyY2hQYXRoKG92ZXJyaWRlUGF0aCk7CisKKwl2ZXJib3NlID0gdmVy Ym9zZV9tb2RlOworCisJc3dpdGNoIChjbWQtPnR5cGUpCisJeworCQljYXNlIFNDVF9TaW1wbGU6 CisJCQl0cmVlID0gZGVwYXJzZV9zaW1wbGVfY29tbWFuZChjbWQpOworCQkJYnJlYWs7CisJCWNh c2UgU0NUX0FsdGVyVGFibGU6CisJCQl0cmVlID0gZGVwYXJzZV9BbHRlclRhYmxlU3RtdChjbWQp OworCQkJYnJlYWs7CisJCWNhc2UgU0NUX0dyYW50OgorCQkJdHJlZSA9IGRlcGFyc2VfR3JhbnRT dG10KGNtZCk7CisJCQlicmVhazsKKwkJY2FzZSBTQ1RfQWx0ZXJPcEZhbWlseToKKwkJCXRyZWUg PSBkZXBhcnNlX0FsdGVyT3BGYW1pbHkoY21kKTsKKwkJCWJyZWFrOworCQljYXNlIFNDVF9DcmVh dGVPcENsYXNzOgorCQkJdHJlZSA9IGRlcGFyc2VfQ3JlYXRlT3BDbGFzc1N0bXQoY21kKTsKKwkJ CWJyZWFrOworCQljYXNlIFNDVF9BbHRlclRTQ29uZmlnOgorCQkJdHJlZSA9IGRlcGFyc2VfQWx0 ZXJUU0NvbmZpZ3VyYXRpb25TdG10KGNtZCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVs b2coRVJST1IsICJ1bmV4cGVjdGVkIGRlcGFyc2Ugbm9kZSB0eXBlICVkIiwgY21kLT50eXBlKTsK Kwl9CisKKwlQb3BPdmVycmlkZVNlYXJjaFBhdGgoKTsKKworCWlmICh0cmVlKQorCXsKKwkJSnNv bmIgKmpzb25iOworCisJCWpzb25iID0gb2JqdHJlZV90b19qc29uYih0cmVlKTsKKwkJY29tbWFu ZCA9IEpzb25iVG9DU3RyaW5nKCZzdHIsICZqc29uYi0+cm9vdCwgSlNPTkJfRVNUSU1BVEVEX0xF Tik7CisJfQorCWVsc2UKKwkJY29tbWFuZCA9IE5VTEw7CisKKwkvKgorCSAqIENsZWFuIHVwLiAg Tm90ZSB0aGF0IHNpbmNlIHdlIGNyZWF0ZWQgdGhlIFN0cmluZ0luZm8gaW4gdGhlIGNhbGxlcidz CisJICogY29udGV4dCwgdGhlIG91dHB1dCBzdHJpbmcgaXMgbm90IGRlbGV0ZWQgaGVyZS4KKwkg Ki8KKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3h0KTsKKwlNZW1vcnlDb250ZXh0RGVsZXRl KHRtcGN4dCk7CisKKwlyZXR1cm4gY29tbWFuZDsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2RkbF9qc29uLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfanNvbi5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmZiOTcwZjJiZWYKLS0tIC9kZXYv bnVsbAorKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfanNvbi5jCkBAIC0wLDAgKzEsNzYz IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBkZGxfanNvbi5jCisgKgkgIEpTT04gY29k ZSByZWxhdGVkIHRvIERETCBjb21tYW5kIGRlcGFyc2luZworICoKKyAqIFBvcnRpb25zIENvcHly aWdodCAoYykgMTk5Ni0yMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAor ICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5 IG9mIENhbGlmb3JuaWEKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMvYmFja2VuZC9j b21tYW5kcy9kZGxfanNvbi5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRl ICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAibGliL3N0cmluZ2luZm8uaCIKKyNpbmNsdWRlICJ1 dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxzL2pzb25iLmgiCisKKworLyoKKyAqIENv bnZlcnNpb24gc3BlY2lmaWVyLCBpdCBkZXRlcm1pbmVzIGhvdyB3ZSBleHBhbmQgdGhlIGpzb24g ZWxlbWVudCBpbnRvCisgKiBzdHJpbmcuCisgKi8KK3R5cGVkZWYgZW51bQoreworCVNwZWNUeXBl bmFtZSwKKwlTcGVjT3BlcmF0b3JuYW1lLAorCVNwZWNEb3R0ZWROYW1lLAorCVNwZWNTdHJpbmcs CisJU3BlY051bWJlciwKKwlTcGVjU3RyaW5nTGl0ZXJhbCwKKwlTcGVjSWRlbnRpZmllciwKKwlT cGVjUm9sZQorfSBjb252U3BlY2lmaWVyOworCisvKgorICogQSB0ZXJuYXJ5IHZhbHVlIHdoaWNo IHJlcHJlc2VudHMgYSBib29sZWFuIHR5cGUgSnNvbmJWYWx1ZS4KKyAqLwordHlwZWRlZiBlbnVt Cit7CisJdHZfYWJzZW50LAorCXR2X3RydWUsCisJdHZfZmFsc2UKK30ganNvbl90cml2YWx1ZTsK Kworc3RhdGljIGJvb2wgZXhwYW5kX29uZV9qc29uYl9lbGVtZW50KFN0cmluZ0luZm8gYnVmLCBj aGFyICpwYXJhbSwKKwkJCQkJCSBKc29uYlZhbHVlICpqc29udmFsLCBjb252U3BlY2lmaWVyIHNw ZWNpZmllciwKKwkJCQkJCSBjb25zdCBjaGFyICpmbXQpOworc3RhdGljIHZvaWQgZXhwYW5kX2pz b25iX2FycmF5KFN0cmluZ0luZm8gYnVmLCBjaGFyICpwYXJhbSwKKwkJCQkgICBKc29uYlZhbHVl ICpqc29uYXJyLCBjaGFyICphcnJheXNlcCwKKwkJCQkgICBjb252U3BlY2lmaWVyIHNwZWNpZmll ciwgY29uc3QgY2hhciAqZm10KTsKK3N0YXRpYyB2b2lkIGZtdHN0cl9lcnJvcl9jYWxsYmFjayh2 b2lkICphcmcpOworY2hhciAqZGRsX2RlcGFyc2VfanNvbl90b19zdHJpbmcoY2hhciAqanNvbmIp OworCisvKgorICogR2l2ZW4gYSBKc29uYkNvbnRhaW5lciwgZmluZCB0aGUgSnNvbmJWYWx1ZSB3 aXRoIHRoZSBnaXZlbiBrZXkgbmFtZSBpbiBpdC4KKyAqIElmIGl0J3Mgb2YgYSB0eXBlIG90aGVy IHRoYW4gamJ2Qm9vbCwgYW4gZXJyb3IgaXMgcmFpc2VkLiBJZiBpdCBkb2Vzbid0CisgKiBleGlz dCwgdHZfYWJzZW50IGlzIHJldHVybmVkOyBvdGhlcndpc2UgcmV0dXJuIHRoZSBhY3R1YWwganNv bl90cml2YWx1ZS4KKyAqLworc3RhdGljIGpzb25fdHJpdmFsdWUKK2ZpbmRfYm9vbF9pbl9qc29u YmNvbnRhaW5lcihKc29uYkNvbnRhaW5lciAqY29udGFpbmVyLCBjaGFyICprZXluYW1lKQorewor CUpzb25iVmFsdWUJa2V5OworCUpzb25iVmFsdWUgKnZhbHVlOworCWpzb25fdHJpdmFsdWUJcmVz dWx0OworCisJa2V5LnR5cGUgPSBqYnZTdHJpbmc7CisJa2V5LnZhbC5zdHJpbmcudmFsID0ga2V5 bmFtZTsKKwlrZXkudmFsLnN0cmluZy5sZW4gPSBzdHJsZW4oa2V5bmFtZSk7CisJdmFsdWUgPSBm aW5kSnNvbmJWYWx1ZUZyb21Db250YWluZXIoY29udGFpbmVyLAorCQkJCQkJCQkJCUpCX0ZPQkpF Q1QsICZrZXkpOworCWlmICh2YWx1ZSA9PSBOVUxMKQorCQlyZXR1cm4gdHZfYWJzZW50OworCWlm ICh2YWx1ZS0+dHlwZSAhPSBqYnZCb29sKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2Rl KEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2coImVsZW1lbnQg XCIlc1wiIGlzIG5vdCBvZiB0eXBlIGJvb2xlYW4iLAorCQkJCQkJa2V5bmFtZSkpKTsKKwlyZXN1 bHQgPSB2YWx1ZS0+dmFsLmJvb2xlYW4gPyB0dl90cnVlIDogdHZfZmFsc2U7CisJcGZyZWUodmFs dWUpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIEdpdmVuIGEgSnNvbmJDb250YWlu ZXIsIGZpbmQgdGhlIEpzb25iVmFsdWUgd2l0aCB0aGUgZ2l2ZW4ga2V5IG5hbWUgaW4gaXQuCisg KiBJZiBpdCdzIG9mIGEgdHlwZSBvdGhlciB0aGFuIGpidlN0cmluZywgYW4gZXJyb3IgaXMgcmFp c2VkLiAgSWYgaXQgZG9lc24ndAorICogZXhpc3QsIGFuIGVycm9yIGlzIHJhaXNlZCB1bmxlc3Mg bWlzc2luZ19vazsgb3RoZXJ3aXNlIHJldHVybiBOVUxMLgorICoKKyAqIElmIGl0IGV4aXN0cyBh bmQgaXMgYSBzdHJpbmcsIGEgZnJlc2hseSBwYWxsb2MnZWQgY29weSBpcyByZXR1cm5lZC4KKyAq CisgKiBJZiAqbGVuZ3RoIGlzIG5vdCBOVUxMLCBpdCBpcyBzZXQgdG8gdGhlIGxlbmd0aCBvZiB0 aGUgc3RyaW5nLgorICovCitzdGF0aWMgY2hhciAqCitmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRh aW5lcihKc29uYkNvbnRhaW5lciAqY29udGFpbmVyLCBjaGFyICprZXluYW1lLAorCQkJCQkJCSAg Ym9vbCBtaXNzaW5nX29rLCBpbnQgKmxlbmd0aCkKK3sKKwlKc29uYlZhbHVlCWtleTsKKwlKc29u YlZhbHVlICp2YWx1ZTsKKwljaGFyCSAgICpzdHI7CisKKwkvKiBYWFggdmVyaWZ5IHRoYXQgdGhp cyBpcyBhbiBvYmplY3QsIG5vdCBhbiBhcnJheSAqLworCisJa2V5LnR5cGUgPSBqYnZTdHJpbmc7 CisJa2V5LnZhbC5zdHJpbmcudmFsID0ga2V5bmFtZTsKKwlrZXkudmFsLnN0cmluZy5sZW4gPSBz dHJsZW4oa2V5bmFtZSk7CisJdmFsdWUgPSBmaW5kSnNvbmJWYWx1ZUZyb21Db250YWluZXIoY29u dGFpbmVyLAorCQkJCQkJCQkJCUpCX0ZPQkpFQ1QsICZrZXkpOworCWlmICh2YWx1ZSA9PSBOVUxM KQorCXsKKwkJaWYgKG1pc3Npbmdfb2spCisJCQlyZXR1cm4gTlVMTDsKKwkJZXJlcG9ydChFUlJP UiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkg ZXJybXNnKCJtaXNzaW5nIGVsZW1lbnQgXCIlc1wiIGluIGpzb24gb2JqZWN0Iiwga2V5bmFtZSkp KTsKKwl9CisKKwlzdHIgPSBwbnN0cmR1cCh2YWx1ZS0+dmFsLnN0cmluZy52YWwsIHZhbHVlLT52 YWwuc3RyaW5nLmxlbik7CisJaWYgKGxlbmd0aCkKKwkJKmxlbmd0aCA9IHZhbHVlLT52YWwuc3Ry aW5nLmxlbjsKKwlwZnJlZSh2YWx1ZSk7CisJcmV0dXJuIHN0cjsKK30KKworI2RlZmluZSBBRFZB TkNFX1BBUlNFX1BPSU5URVIocHRyLGVuZF9wdHIpIFwKKwlkbyB7IFwKKwkJaWYgKCsrKHB0cikg Pj0gKGVuZF9wdHIpKSBcCisJCQllcmVwb3J0KEVSUk9SLCBcCisJCQkJCShlcnJjb2RlKEVSUkNP REVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLCBcCisJCQkJCSBlcnJtc2coInVudGVybWluYXRl ZCBmb3JtYXQgc3BlY2lmaWVyIikpKTsgXAorCX0gd2hpbGUgKDApCisKKy8qCisgKiBSZWN1cnNp dmUgaGVscGVyIGZvciBwZ19ldmVudF90cmlnZ2VyX2V4cGFuZF9jb21tYW5kCisgKgorICogRmlu ZCB0aGUgImZtdCIgZWxlbWVudCBpbiB0aGUgZ2l2ZW4gY29udGFpbmVyLCBhbmQgZXhwYW5kIGl0 IGludG8gdGhlCisgKiBwcm92aWRlZCBTdHJpbmdJbmZvLgorICovCitzdGF0aWMgdm9pZAorZXhw YW5kX2ZtdF9yZWN1cnNpdmUoSnNvbmJDb250YWluZXIgKmNvbnRhaW5lciwgU3RyaW5nSW5mbyBi dWYpCit7CisJSnNvbmJWYWx1ZQlrZXk7CisJSnNvbmJWYWx1ZSAqdmFsdWU7CisJY29uc3QgY2hh ciAqY3A7CisJY29uc3QgY2hhciAqc3RhcnRfcHRyOworCWNvbnN0IGNoYXIgKmVuZF9wdHI7CisJ aW50CQkJbGVuOworCisJc3RhcnRfcHRyID0gZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWluZXIo Y29udGFpbmVyLCAiZm10IiwgZmFsc2UsICZsZW4pOworCWVuZF9wdHIgPSBzdGFydF9wdHIgKyBs ZW47CisKKwlmb3IgKGNwID0gc3RhcnRfcHRyOyBjcCA8IGVuZF9wdHI7IGNwKyspCisJeworCQlj b252U3BlY2lmaWVyIHNwZWNpZmllcjsKKwkJYm9vbAkJaXNfYXJyYXkgPSBmYWxzZTsKKwkJY2hh cgkgICAqcGFyYW0gPSBOVUxMOworCQljaGFyCSAgICphcnJheXNlcCA9IE5VTEw7CisKKwkJaWYg KCpjcCAhPSAnJScpCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyTWFjcm8oYnVmLCAqY3Ap OworCQkJY29udGludWU7CisJCX0KKworCisJCUFEVkFOQ0VfUEFSU0VfUE9JTlRFUihjcCwgZW5k X3B0cik7CisKKwkJLyogRWFzeSBjYXNlOiAlJSBvdXRwdXRzIGEgc2luZ2xlICUgKi8KKwkJaWYg KCpjcCA9PSAnJScpCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyTWFjcm8oYnVmLCAqY3Ap OworCQkJY29udGludWU7CisJCX0KKworCQkvKgorCQkgKiBTY2FuIHRoZSBtYW5kYXRvcnkgZWxl bWVudCBuYW1lLiAgQWxsb3cgZm9yIGFuIGFycmF5IHNlcGFyYXRvcgorCQkgKiAod2hpY2ggbWF5 IGJlIHRoZSBlbXB0eSBzdHJpbmcpIHRvIGJlIHNwZWNpZmllZCBhZnRlciBjb2xvbi4KKwkJICov CisJCWlmICgqY3AgPT0gJ3snKQorCQl7CisJCQlTdHJpbmdJbmZvRGF0YSBwYXJidWY7CisJCQlT dHJpbmdJbmZvRGF0YSBhcnJheXNlcGJ1ZjsKKwkJCVN0cmluZ0luZm8JYXBwZW5kVG87CisKKwkJ CWluaXRTdHJpbmdJbmZvKCZwYXJidWYpOworCQkJYXBwZW5kVG8gPSAmcGFyYnVmOworCisJCQlB RFZBTkNFX1BBUlNFX1BPSU5URVIoY3AsIGVuZF9wdHIpOworCQkJZm9yICg7IGNwIDwgZW5kX3B0 cjspCisJCQl7CisJCQkJaWYgKCpjcCA9PSAnOicpCisJCQkJeworCQkJCQkvKgorCQkJCQkgKiBG b3VuZCBhcnJheSBzZXBhcmF0b3IgZGVsaW1pdGVyOyBlbGVtZW50IG5hbWUgaXMgbm93CisJCQkJ CSAqIGNvbXBsZXRlLCBzdGFydCBmaWxsaW5nIHRoZSBzZXBhcmF0b3IuCisJCQkJCSAqLworCQkJ CQlpbml0U3RyaW5nSW5mbygmYXJyYXlzZXBidWYpOworCQkJCQlhcHBlbmRUbyA9ICZhcnJheXNl cGJ1ZjsKKwkJCQkJaXNfYXJyYXkgPSB0cnVlOworCQkJCQlBRFZBTkNFX1BBUlNFX1BPSU5URVIo Y3AsIGVuZF9wdHIpOworCQkJCQljb250aW51ZTsKKwkJCQl9CisKKwkJCQlpZiAoKmNwID09ICd9 JykKKwkJCQl7CisJCQkJCUFEVkFOQ0VfUEFSU0VfUE9JTlRFUihjcCwgZW5kX3B0cik7CisJCQkJ CWJyZWFrOworCQkJCX0KKwkJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhck1hY3JvKGFwcGVuZFRvLCAq Y3ApOworCQkJCUFEVkFOQ0VfUEFSU0VfUE9JTlRFUihjcCwgZW5kX3B0cik7CisJCQl9CisJCQlw YXJhbSA9IHBhcmJ1Zi5kYXRhOworCQkJaWYgKGlzX2FycmF5KQorCQkJCWFycmF5c2VwID0gYXJy YXlzZXBidWYuZGF0YTsKKwkJfQorCQlpZiAocGFyYW0gPT0gTlVMTCkKKwkJCWVyZXBvcnQoRVJS T1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJ CSBlcnJtc2coIm1pc3NpbmcgY29udmVyc2lvbiBuYW1lIGluIGNvbnZlcnNpb24gc3BlY2lmaWVy IikpKTsKKworCQlzd2l0Y2ggKCpjcCkKKwkJeworCQkJY2FzZSAnSSc6CisJCQkJc3BlY2lmaWVy ID0gU3BlY0lkZW50aWZpZXI7CisJCQkJYnJlYWs7CisJCQljYXNlICdEJzoKKwkJCQlzcGVjaWZp ZXIgPSBTcGVjRG90dGVkTmFtZTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ3MnOgorCQkJCXNwZWNp ZmllciA9IFNwZWNTdHJpbmc7CisJCQkJYnJlYWs7CisJCQljYXNlICdMJzoKKwkJCQlzcGVjaWZp ZXIgPSBTcGVjU3RyaW5nTGl0ZXJhbDsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ1QnOgorCQkJCXNw ZWNpZmllciA9IFNwZWNUeXBlbmFtZTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ08nOgorCQkJCXNw ZWNpZmllciA9IFNwZWNPcGVyYXRvcm5hbWU7CisJCQkJYnJlYWs7CisJCQljYXNlICduJzoKKwkJ CQlzcGVjaWZpZXIgPSBTcGVjTnVtYmVyOworCQkJCWJyZWFrOworCQkJY2FzZSAnUic6CisJCQkJ c3BlY2lmaWVyID0gU3BlY1JvbGU7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWVyZXBv cnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVF KSwKKwkJCQkJCSBlcnJtc2coImludmFsaWQgY29udmVyc2lvbiBzcGVjaWZpZXIgXCIlY1wiIiwg KmNwKSkpOworCQl9CisKKwkJLyoKKwkJICogT2J0YWluIHRoZSBlbGVtZW50IHRvIGJlIGV4cGFu ZGVkLgorCQkgKi8KKwkJa2V5LnR5cGUgPSBqYnZTdHJpbmc7CisJCWtleS52YWwuc3RyaW5nLnZh bCA9IHBhcmFtOworCQlrZXkudmFsLnN0cmluZy5sZW4gPSBzdHJsZW4ocGFyYW0pOworCisJCXZh bHVlID0gZmluZEpzb25iVmFsdWVGcm9tQ29udGFpbmVyKGNvbnRhaW5lciwgSkJfRk9CSkVDVCwg JmtleSk7CisKKwkJLyoKKwkJICogRXhwYW5kIHRoZSBkYXRhIChwb3NzaWJseSBhbiBhcnJheSkg aW50byB0aGUgb3V0cHV0IFN0cmluZ0luZm8uCisJCSAqLworCQlpZiAoaXNfYXJyYXkpCisJCQll eHBhbmRfanNvbmJfYXJyYXkoYnVmLCBwYXJhbSwgdmFsdWUsIGFycmF5c2VwLCBzcGVjaWZpZXIs IHN0YXJ0X3B0cik7CisJCWVsc2UKKwkJCWV4cGFuZF9vbmVfanNvbmJfZWxlbWVudChidWYsIHBh cmFtLCB2YWx1ZSwgc3BlY2lmaWVyLCBzdGFydF9wdHIpOworCX0KK30KKworLyoKKyAqIEV4cGFu ZCBhIGpzb24gdmFsdWUgYXMgYSBxdW90ZWQgaWRlbnRpZmllci4gIFRoZSB2YWx1ZSBtdXN0IGJl IG9mIHR5cGUgc3RyaW5nLgorICovCitzdGF0aWMgdm9pZAorZXhwYW5kX2pzb252YWxfaWRlbnRp ZmllcihTdHJpbmdJbmZvIGJ1ZiwgSnNvbmJWYWx1ZSAqanNvbnZhbCkKK3sKKwljaGFyCSAgICpz dHI7CisKKwlBc3NlcnQoanNvbnZhbC0+dHlwZSA9PSBqYnZTdHJpbmcpOworCisJc3RyID0gcG5z dHJkdXAoanNvbnZhbC0+dmFsLnN0cmluZy52YWwsIGpzb252YWwtPnZhbC5zdHJpbmcubGVuKTsK KwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgcXVvdGVfaWRlbnRpZmllcihzdHIpKTsKKwlw ZnJlZShzdHIpOworfQorCisvKgorICogRXhwYW5kIGEganNvbiB2YWx1ZSBhcyBhIGRvdC1zZXBh cmF0ZWQtbmFtZS4gIFRoZSB2YWx1ZSBtdXN0IGJlIG9mIHR5cGUKKyAqIG9iamVjdCBhbmQgbWF5 IGNvbnRhaW4gZWxlbWVudHMgInNjaGVtYW5hbWUiIChvcHRpb25hbCksICJvYmpuYW1lIgorICog KG1hbmRhdG9yeSksICJhdHRybmFtZSIgKG9wdGlvbmFsKS4gIERvdWJsZSBxdW90ZXMgYXJlIGFk ZGVkIHRvIGVhY2ggZWxlbWVudAorICogYXMgbmVjZXNzYXJ5LCBhbmQgZG90IHNlcGFyYXRvcnMg d2hlcmUgbmVlZGVkLgorICoKKyAqIE9uZSBkYXkgd2UgbWlnaHQgbmVlZCBhICJjYXRhbG9nIiBl bGVtZW50IGFzIHdlbGwsIGJ1dCBubyBjdXJyZW50IHVzZSBjYXNlCisgKiBuZWVkcyB0aGF0Lgor ICovCitzdGF0aWMgdm9pZAorZXhwYW5kX2pzb252YWxfZG90dGVkbmFtZShTdHJpbmdJbmZvIGJ1 ZiwgSnNvbmJWYWx1ZSAqanNvbnZhbCkKK3sKKwljaGFyCSAgICpzdHI7CisKKwlzdHIgPSBmaW5k X3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJCQkJ CQkJCQkJInNjaGVtYW5hbWUiLCB0cnVlLCBOVUxMKTsKKwlpZiAoc3RyKQorCXsKKwkJYXBwZW5k U3RyaW5nSW5mbyhidWYsICIlcy4iLCBxdW90ZV9pZGVudGlmaWVyKHN0cikpOworCQlwZnJlZShz dHIpOworCX0KKworCXN0ciA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGpzb252YWwt PnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkib2JqbmFtZSIsIGZhbHNlLCBOVUxMKTsKKwlh cHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVzIiwgcXVvdGVfaWRlbnRpZmllcihzdHIpKTsKKwlwZnJl ZShzdHIpOworCisJc3RyID0gZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+ dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCSJhdHRybmFtZSIsIHRydWUsIE5VTEwpOworCWlm IChzdHIpCisJeworCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIi4lcyIsIHF1b3RlX2lkZW50aWZp ZXIoc3RyKSk7CisJCXBmcmVlKHN0cik7CisJfQorfQorCisvKgorICogRXhwYW5kIGEganNvbiB2 YWx1ZSBhcyBhIHR5cGUgbmFtZS4KKyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9qc29udmFsX3R5 cGVuYW1lKFN0cmluZ0luZm8gYnVmLCBKc29uYlZhbHVlICpqc29udmFsKQoreworCWNoYXIJICAg KnNjaGVtYSA9IE5VTEw7CisJY2hhcgkgICAqdHlwZW5hbWU7CisJY2hhcgkgICAqdHlwbW9kc3Ry OworCWpzb25fdHJpdmFsdWUJaXNfYXJyYXk7CisJY2hhcgkgICAqYXJyYXlfZGVjb3I7CisKKwkv KgorCSAqIFdlIG9taXQgc2NoZW1hLXF1YWxpZnlpbmcgdGhlIG91dHB1dCBuYW1lIGlmIHRoZSBz Y2hlbWEgZWxlbWVudCBpcworCSAqIGVpdGhlciB0aGUgZW1wdHkgc3RyaW5nIG9yIE5VTEw7IHRo ZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhvc2UgdHdvIGNhc2VzCisJICogaXMgdGhhdCBpbiB0aGUg bGF0dGVyIHdlIHF1b3RlIHRoZSB0eXBlIG5hbWUsIGluIHRoZSBmb3JtZXIgd2UgZG9uJ3QuCisJ ICogVGhpcyBhbGxvd3MgZm9yIHR5cGVzIHdpdGggc3BlY2lhbCB0eXBtb2QgbmVlZHMsIHN1Y2gg YXMgaW50ZXJ2YWwgYW5kCisJICogdGltZXN0YW1wIChzZWUgZm9ybWF0X3R5cGVfZGV0YWlsZWQp LCB3aGlsZSBhdCB0aGUgc2FtZSB0aW1lIGFsbG93aW5nCisJICogZm9yIHRoZSBzY2hlbWEgbmFt ZSB0byBiZSBvbWl0dGVkIGZyb20gdHlwZSBuYW1lcyB0aGF0IHJlcXVpcmUgcXVvdGVzCisJICog YnV0IGFyZSB0byBiZSBvYnRhaW5lZCBmcm9tIGEgdXNlciBzY2hlbWEuCisJICovCisKKwlzY2hl bWEgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihqc29udmFsLT52YWwuYmluYXJ5LmRh dGEsCisJCQkJCQkJCQkJICAgInNjaGVtYW5hbWUiLCB0cnVlLCBOVUxMKTsKKwl0eXBlbmFtZSA9 IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwK KwkJCQkJCQkJCQkJICJ0eXBlbmFtZSIsIGZhbHNlLCBOVUxMKTsKKwl0eXBtb2RzdHIgPSBmaW5k X3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJCQkJ CQkJCQkJCSAgInR5cG1vZCIsIHRydWUsIE5VTEwpOworCWlzX2FycmF5ID0gZmluZF9ib29sX2lu X2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkgICAi dHlwYXJyYXkiKTsKKwlzd2l0Y2ggKGlzX2FycmF5KQorCXsKKwkJY2FzZSB0dl90cnVlOgorCQkJ YXJyYXlfZGVjb3IgPSAiW10iOworCQkJYnJlYWs7CisKKwkJY2FzZSB0dl9mYWxzZToKKwkJCWFy cmF5X2RlY29yID0gIiI7CisJCQlicmVhazsKKworCQljYXNlIHR2X2Fic2VudDoKKwkJZGVmYXVs dDoKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJB TUVURVJfVkFMVUUpLAorCQkJCQkgZXJybXNnKCJtaXNzaW5nIHR5cGFycmF5IGVsZW1lbnQiKSkp OworCX0KKworCWlmIChzY2hlbWEgPT0gTlVMTCkKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIl cyIsIHF1b3RlX2lkZW50aWZpZXIodHlwZW5hbWUpKTsKKwllbHNlIGlmIChzY2hlbWFbMF0gPT0g J1wwJykKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIlcyIsIHR5cGVuYW1lKTsgLyogU3BlY2lh bCB0eXBtb2QgbmVlZHMgKi8KKwllbHNlCisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJXMuJXMi LCBxdW90ZV9pZGVudGlmaWVyKHNjaGVtYSksCisJCQkJCQkgcXVvdGVfaWRlbnRpZmllcih0eXBl bmFtZSkpOworCisJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIlcyVzIiwgdHlwbW9kc3RyID8gdHlw bW9kc3RyIDogIiIsIGFycmF5X2RlY29yKTsKK30KKworLyoKKyAqIEV4cGFuZCBhIGpzb24gdmFs dWUgYXMgYW4gb3BlcmF0b3IgbmFtZQorICovCitzdGF0aWMgdm9pZAorZXhwYW5kX2pzb252YWxf b3BlcmF0b3IoU3RyaW5nSW5mbyBidWYsIEpzb25iVmFsdWUgKmpzb252YWwpCit7CisJY2hhcgkg ICAqc3RyOworCisJc3RyID0gZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+ dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCSJzY2hlbWFuYW1lIiwgdHJ1ZSwgTlVMTCk7CisJ LyogU2NoZW1hIG1pZ2h0IGJlIE5VTEwgb3IgZW1wdHkgKi8KKwlpZiAoc3RyICE9IE5VTEwgJiYg c3RyWzBdICE9ICdcMCcpCisJeworCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVzLiIsIHF1b3Rl X2lkZW50aWZpZXIoc3RyKSk7CisJCXBmcmVlKHN0cik7CisJfQorCisJc3RyID0gZmluZF9zdHJp bmdfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJ CSJvYmpuYW1lIiwgZmFsc2UsIE5VTEwpOworCisJaWYgKHN0cikKKwl7CisJCWFwcGVuZFN0cmlu Z0luZm9TdHJpbmcoYnVmLCBzdHIpOworCQlwZnJlZShzdHIpOworCX0KK30KKworLyoKKyAqIEV4 cGFuZCBhIGpzb24gdmFsdWUgYXMgYSBzdHJpbmcuICBUaGUgdmFsdWUgbXVzdCBiZSBvZiB0eXBl IHN0cmluZyBvciBvZgorICogdHlwZSBvYmplY3QuICBJbiB0aGUgbGF0dGVyIGNhc2UgaXQgbXVz dCBjb250YWluIGEgImZtdCIgZWxlbWVudCB3aGljaCB3aWxsCisgKiBiZSByZWN1cnNpdmVseSBl eHBhbmRlZDsgYWxzbywgaWYgdGhlIG9iamVjdCBjb250YWlucyBhbiBlbGVtZW50ICJwcmVzZW50 IgorICogYW5kIGl0IGlzIHNldCB0byBmYWxzZSwgdGhlIGV4cGFuc2lvbiBpcyB0aGUgZW1wdHkg c3RyaW5nLgorICoKKyAqIFJldHVybnMgZmFsc2UgaWYgbm8gYWN0dWFsIGV4cGFuc2lvbiB3YXMg bWFkZSBkdWUgdG8gdGhlICJwcmVzZW50IiBmbGFnCisgKiBiZWluZyBzZXQgdG8gImZhbHNlIi4K KyAqLworc3RhdGljIGJvb2wKK2V4cGFuZF9qc29udmFsX3N0cmluZyhTdHJpbmdJbmZvIGJ1Ziwg SnNvbmJWYWx1ZSAqanNvbnZhbCkKK3sKKwlpZiAoanNvbnZhbC0+dHlwZSA9PSBqYnZTdHJpbmcp CisJeworCQlhcHBlbmRCaW5hcnlTdHJpbmdJbmZvKGJ1ZiwganNvbnZhbC0+dmFsLnN0cmluZy52 YWwsCisJCQkJCQkJICAganNvbnZhbC0+dmFsLnN0cmluZy5sZW4pOworCX0KKwllbHNlIGlmIChq c29udmFsLT50eXBlID09IGpidkJpbmFyeSkKKwl7CisJCWpzb25fdHJpdmFsdWUJcHJlc2VudDsK KworCQlwcmVzZW50ID0gZmluZF9ib29sX2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5i aW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkJICAicHJlc2VudCIpOworCQkvKgorCQkgKiBJZiAicHJl c2VudCIgaXMgc2V0IHRvIGZhbHNlLCB0aGlzIGVsZW1lbnQgZXhwYW5kcyB0byBlbXB0eTsKKwkJ ICogb3RoZXJ3aXNlIChlaXRoZXIgdHJ1ZSBvciBhYnNlbnQpLCBmYWxsIHRocm91Z2ggdG8gZXhw YW5kICJmbXQiLgorCQkgKi8KKwkJaWYgKHByZXNlbnQgPT0gdHZfZmFsc2UpCisJCQlyZXR1cm4g ZmFsc2U7CisKKwkJZXhwYW5kX2ZtdF9yZWN1cnNpdmUoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRh LCBidWYpOworCX0KKwllbHNlCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQor CisvKgorICogRXhwYW5kIGEganNvbiB2YWx1ZSBhcyBhIHN0cmluZyBsaXRlcmFsLgorICovCitz dGF0aWMgdm9pZAorZXhwYW5kX2pzb252YWxfc3RybGl0KFN0cmluZ0luZm8gYnVmLCBKc29uYlZh bHVlICpqc29udmFsKQoreworCWNoYXIgICAqc3RyOworCVN0cmluZ0luZm9EYXRhIGRxZGVsaW07 CisJc3RhdGljIGNvbnN0IGNoYXIgZHFzdWZmaXhlc1tdID0gIl9YWVpaWVhfIjsKKwlpbnQgICAg ICAgICBkcW5leHRjaGFyID0gMDsKKworCXN0ciA9IHBuc3RyZHVwKGpzb252YWwtPnZhbC5zdHJp bmcudmFsLCBqc29udmFsLT52YWwuc3RyaW5nLmxlbik7CisKKwkvKiBFYXN5IGNhc2U6IGlmIHRo ZXJlIGFyZSBubyAnIGFuZCBubyBcLCBqdXN0IHVzZSBhIHNpbmdsZSBxdW90ZSAqLworCWlmIChz dHJjaHIoc3RyLCAnXCcnKSA9PSBOVUxMICYmCisJCXN0cmNocihzdHIsICdcXCcpID09IE5VTEwp CisJeworCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiclcyciLCBzdHIpOworCQlwZnJlZShzdHIp OworCQlyZXR1cm47CisJfQorCisJLyogT3RoZXJ3aXNlIG5lZWQgdG8gZmluZCBhIHVzZWZ1bCBk b2xsYXItcXVvdGUgZGVsaW1pdGVyICovCisJaW5pdFN0cmluZ0luZm8oJmRxZGVsaW0pOworCWFw cGVuZFN0cmluZ0luZm9TdHJpbmcoJmRxZGVsaW0sICIkIik7CisJd2hpbGUgKHN0cnN0cihzdHIs IGRxZGVsaW0uZGF0YSkgIT0gTlVMTCkKKwl7CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZkcWRl bGltLCBkcXN1ZmZpeGVzW2RxbmV4dGNoYXIrK10pOworCQlkcW5leHRjaGFyID0gZHFuZXh0Y2hh ciAlIChzaXplb2YoZHFzdWZmaXhlcykgLSAxKTsKKwl9CisJLyogQWRkIHRyYWlsaW5nICQgKi8K KwlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmZHFkZWxpbSwgJyQnKTsKKworCS8qIEFuZCBmaW5hbGx5 IHByb2R1Y2UgdGhlIHF1b3RlZCBsaXRlcmFsIGludG8gdGhlIG91dHB1dCBTdHJpbmdJbmZvICov CisJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIlcyVzJXMiLCBkcWRlbGltLmRhdGEsIHN0ciwgZHFk ZWxpbS5kYXRhKTsKKwlwZnJlZShkcWRlbGltLmRhdGEpOworCXBmcmVlKHN0cik7Cit9CisKKy8q CisgKiBFeHBhbmQgYSBqc29uIHZhbHVlIGFzIGFuIGludGVnZXIgcXVhbnRpdHkuCisgKi8KK3N0 YXRpYyB2b2lkCitleHBhbmRfanNvbnZhbF9udW1iZXIoU3RyaW5nSW5mbyBidWYsIEpzb25iVmFs dWUgKmpzb252YWwpCit7CisJY2hhciAqc3RyZGF0dW07CisKKwlzdHJkYXR1bSA9IERhdHVtR2V0 Q1N0cmluZyhEaXJlY3RGdW5jdGlvbkNhbGwxKG51bWVyaWNfb3V0LAorCQkJCQkJCQkJCQkJICAg TnVtZXJpY0dldERhdHVtKGpzb252YWwtPnZhbC5udW1lcmljKSkpOworCWFwcGVuZFN0cmluZ0lu Zm9TdHJpbmcoYnVmLCBzdHJkYXR1bSk7Cit9CisKKy8qCisgKiBFeHBhbmQgYSBqc29uIHZhbHVl IGFzIGEgcm9sZSBuYW1lLiAgSWYgdGhlIGlzX3B1YmxpYyBlbGVtZW50IGlzIHNldCB0bworICog dHJ1ZSwgUFVCTElDIGlzIGV4cGFuZGVkIChubyBxdW90ZXMpOyBvdGhlcndpc2UsIGV4cGFuZCB0 aGUgZ2l2ZW4gcm9sZSBuYW1lLAorICogcXVvdGluZyBhcyBhbiBpZGVudGlmaWVyLgorICovCitz dGF0aWMgdm9pZAorZXhwYW5kX2pzb252YWxfcm9sZShTdHJpbmdJbmZvIGJ1ZiwgSnNvbmJWYWx1 ZSAqanNvbnZhbCkKK3sKKwlqc29uX3RyaXZhbHVlCWlzX3B1YmxpYzsKKworCWlzX3B1YmxpYyA9 IGZpbmRfYm9vbF9pbl9qc29uYmNvbnRhaW5lcihqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJ CQkJCQkJCQkJCSJpc19wdWJsaWMiKTsKKwlpZiAoaXNfcHVibGljID09IHR2X3RydWUpCisJCWFw cGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiUFVCTElDIik7CisJZWxzZQorCXsKKwkJY2hhciAq cm9sZW5hbWU7CisKKwkJcm9sZW5hbWUgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihq c29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJCQkgInJvbGVuYW1lIiwgZmFsc2Us IE5VTEwpOworCQlpZiAocm9sZW5hbWUpCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmco YnVmLCBxdW90ZV9pZGVudGlmaWVyKHJvbGVuYW1lKSk7CisJCQlwZnJlZShyb2xlbmFtZSk7CisJ CX0KKwl9Cit9CisKKy8qCisgKiBFeHBhbmQgb25lIGpzb24gZWxlbWVudCBpbnRvIHRoZSBvdXRw dXQgU3RyaW5nSW5mbyBhY2NvcmRpbmcgdG8gdGhlCisgKiBjb252ZXJzaW9uIHNwZWNpZmllci4g IFRoZSBlbGVtZW50IHR5cGUgaXMgdmFsaWRhdGVkLCBhbmQgYW4gZXJyb3IgaXMgcmFpc2VkCisg KiBpZiBpdCBkb2Vzbid0IG1hdGNoIHdoYXQgd2UgZXhwZWN0IGZvciB0aGUgY29udmVyc2lvbiBz cGVjaWZpZXIuCisgKgorICogUmV0dXJucyBmYWxzZSBpZiBubyBhY3R1YWwgZXhwYW5zaW9uIHdh cyBtYWRlIChkdWUgdG8gdGhlICJwcmVzZW50IiBmbGFnCisgKiBiZWluZyBzZXQgdG8gImZhbHNl IiBpbiBmb3JtYXR0ZWQgc3RyaW5nIGV4cGFuc2lvbikuCisgKi8KK3N0YXRpYyBib29sCitleHBh bmRfb25lX2pzb25iX2VsZW1lbnQoU3RyaW5nSW5mbyBidWYsIGNoYXIgKnBhcmFtLCBKc29uYlZh bHVlICpqc29udmFsLAorCQkJCQkJIGNvbnZTcGVjaWZpZXIgc3BlY2lmaWVyLCBjb25zdCBjaGFy ICpmbXQpCit7CisJYm9vbCByZXN1bHQgPSB0cnVlOworCUVycm9yQ29udGV4dENhbGxiYWNrIHNx bGVycmNvbnRleHQ7CisKKwkvKiBJZiB3ZSB3ZXJlIGdpdmVuIGEgZm9ybWF0IHN0cmluZywgc2V0 dXAgYW4gZXJlcG9ydCgpIGNvbnRleHQgY2FsbGJhY2sgKi8KKwlpZiAoZm10KQorCXsKKwkJc3Fs ZXJyY29udGV4dC5jYWxsYmFjayA9IGZtdHN0cl9lcnJvcl9jYWxsYmFjazsKKwkJc3FsZXJyY29u dGV4dC5hcmcgPSAodm9pZCAqKSBmbXQ7CisJCXNxbGVycmNvbnRleHQucHJldmlvdXMgPSBlcnJv cl9jb250ZXh0X3N0YWNrOworCQllcnJvcl9jb250ZXh0X3N0YWNrID0gJnNxbGVycmNvbnRleHQ7 CisJfQorCisJaWYgKCFqc29udmFsKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVS UkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2coImVsZW1lbnQgXCIl c1wiIG5vdCBmb3VuZCIsIHBhcmFtKSkpOworCisJc3dpdGNoIChzcGVjaWZpZXIpCisJeworCQlj YXNlIFNwZWNJZGVudGlmaWVyOgorCQkJaWYgKGpzb252YWwtPnR5cGUgIT0gamJ2U3RyaW5nKQor CQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1F VEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2coImV4cGVjdGVkIEpTT04gc3RyaW5nIGZvciAlJUkg ZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIsCisJCQkJCQkJCXBhcmFtLCBqc29udmFsLT50eXBlKSkp OworCQkJZXhwYW5kX2pzb252YWxfaWRlbnRpZmllcihidWYsIGpzb252YWwpOworCQkJYnJlYWs7 CisKKwkJY2FzZSBTcGVjRG90dGVkTmFtZToKKwkJCWlmIChqc29udmFsLT50eXBlICE9IGpidkJp bmFyeSkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElE X1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQkgZXJybXNnKCJleHBlY3RlZCBKU09OIG9iamVjdCBm b3IgJSVEIGVsZW1lbnQgXCIlc1wiLCBnb3QgJWQiLAorCQkJCQkJCQlwYXJhbSwganNvbnZhbC0+ dHlwZSkpKTsKKwkJCWV4cGFuZF9qc29udmFsX2RvdHRlZG5hbWUoYnVmLCBqc29udmFsKTsKKwkJ CWJyZWFrOworCisJCWNhc2UgU3BlY1N0cmluZzoKKwkJCWlmIChqc29udmFsLT50eXBlICE9IGpi dlN0cmluZyAmJgorCQkJCWpzb252YWwtPnR5cGUgIT0gamJ2QmluYXJ5KQorCQkJCWVyZXBvcnQo RVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwK KwkJCQkJCSBlcnJtc2coImV4cGVjdGVkIEpTT04gc3RyaW5nIG9yIG9iamVjdCBmb3IgJSVzIGVs ZW1lbnQgXCIlc1wiLCBnb3QgJWQiLAorCQkJCQkJCQlwYXJhbSwganNvbnZhbC0+dHlwZSkpKTsK KwkJCXJlc3VsdCA9IGV4cGFuZF9qc29udmFsX3N0cmluZyhidWYsIGpzb252YWwpOworCQkJYnJl YWs7CisKKwkJY2FzZSBTcGVjU3RyaW5nTGl0ZXJhbDoKKwkJCWlmIChqc29udmFsLT50eXBlICE9 IGpidlN0cmluZykKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9J TlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQkgZXJybXNnKCJleHBlY3RlZCBKU09OIHN0 cmluZyBmb3IgJSVMIGVsZW1lbnQgXCIlc1wiLCBnb3QgJWQiLAorCQkJCQkJCQlwYXJhbSwganNv bnZhbC0+dHlwZSkpKTsKKwkJCWV4cGFuZF9qc29udmFsX3N0cmxpdChidWYsIGpzb252YWwpOwor CQkJYnJlYWs7CisKKwkJY2FzZSBTcGVjVHlwZW5hbWU6CisJCQlpZiAoanNvbnZhbC0+dHlwZSAh PSBqYnZCaW5hcnkpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVf SU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiZXhwZWN0ZWQgSlNPTiBv YmplY3QgZm9yICUlVCBlbGVtZW50IFwiJXNcIiwgZ290ICVkIiwKKwkJCQkJCQkJcGFyYW0sIGpz b252YWwtPnR5cGUpKSk7CisJCQlleHBhbmRfanNvbnZhbF90eXBlbmFtZShidWYsIGpzb252YWwp OworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVjT3BlcmF0b3JuYW1lOgorCQkJaWYgKGpzb252YWwt PnR5cGUgIT0gamJ2QmluYXJ5KQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShF UlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2coImV4cGVjdGVk IEpTT04gb2JqZWN0IGZvciAlJU8gZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIsCisJCQkJCQkJCXBh cmFtLCBqc29udmFsLT50eXBlKSkpOworCQkJZXhwYW5kX2pzb252YWxfb3BlcmF0b3IoYnVmLCBq c29udmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgU3BlY051bWJlcjoKKwkJCWlmIChqc29udmFs LT50eXBlICE9IGpidk51bWVyaWMpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2Rl KEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiZXhwZWN0 ZWQgSlNPTiBudW1lcmljIGZvciAlJW4gZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIsCisJCQkJCQkJ CXBhcmFtLCBqc29udmFsLT50eXBlKSkpOworCQkJZXhwYW5kX2pzb252YWxfbnVtYmVyKGJ1Ziwg anNvbnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIFNwZWNSb2xlOgorCQkJaWYgKGpzb252YWwt PnR5cGUgIT0gamJ2QmluYXJ5KQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShF UlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2coImV4cGVjdGVk IEpTT04gb2JqZWN0IGZvciAlJVIgZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIsCisJCQkJCQkJCXBh cmFtLCBqc29udmFsLT50eXBlKSkpOworCQkJZXhwYW5kX2pzb252YWxfcm9sZShidWYsIGpzb252 YWwpOworCQkJYnJlYWs7CisJfQorCisJaWYgKGZtdCkKKwkJZXJyb3JfY29udGV4dF9zdGFjayA9 IHNxbGVycmNvbnRleHQucHJldmlvdXM7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICog SXRlcmF0ZSBvbiB0aGUgZWxlbWVudHMgb2YgYSBKU09OIGFycmF5LCBleHBhbmRpbmcgZWFjaCBv bmUgaW50byB0aGUgb3V0cHV0CisgKiBTdHJpbmdJbmZvIHBlciB0aGUgZ2l2ZW4gY29udmVyc2lv biBzcGVjaWZpZXIsIHNlcGFyYXRlZCBieSB0aGUgZ2l2ZW4KKyAqIHNlcGFyYXRvci4KKyAqLwor c3RhdGljIHZvaWQKK2V4cGFuZF9qc29uYl9hcnJheShTdHJpbmdJbmZvIGJ1ZiwgY2hhciAqcGFy YW0sCisJCQkJICAgSnNvbmJWYWx1ZSAqanNvbmFyciwgY2hhciAqYXJyYXlzZXAsIGNvbnZTcGVj aWZpZXIgc3BlY2lmaWVyLAorCQkJCSAgIGNvbnN0IGNoYXIgKmZtdCkKK3sKKwlFcnJvckNvbnRl eHRDYWxsYmFjayBzcWxlcnJjb250ZXh0OworCUpzb25iQ29udGFpbmVyICpjb250YWluZXI7CisJ SnNvbmJJdGVyYXRvciAgKml0OworCUpzb25iVmFsdWUJdjsKKwlpbnQJCQl0eXBlOworCWJvb2wJ CWZpcnN0ID0gdHJ1ZTsKKwlTdHJpbmdJbmZvRGF0YSBhcnJheWVsZW07CisKKwkvKiBJZiB3ZSB3 ZXJlIGdpdmVuIGEgZm9ybWF0IHN0cmluZywgc2V0dXAgYW4gZXJlcG9ydCgpIGNvbnRleHQgY2Fs bGJhY2sgKi8KKwlpZiAoZm10KQorCXsKKwkJc3FsZXJyY29udGV4dC5jYWxsYmFjayA9IGZtdHN0 cl9lcnJvcl9jYWxsYmFjazsKKwkJc3FsZXJyY29udGV4dC5hcmcgPSAodm9pZCAqKSBmbXQ7CisJ CXNxbGVycmNvbnRleHQucHJldmlvdXMgPSBlcnJvcl9jb250ZXh0X3N0YWNrOworCQllcnJvcl9j b250ZXh0X3N0YWNrID0gJnNxbGVycmNvbnRleHQ7CisJfQorCisJaWYgKGpzb25hcnItPnR5cGUg IT0gamJ2QmluYXJ5KQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5W QUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2coImVsZW1lbnQgXCIlc1wiIGlzIG5v dCBhIEpTT04gYXJyYXkiLCBwYXJhbSkpKTsKKworCWNvbnRhaW5lciA9IGpzb25hcnItPnZhbC5i aW5hcnkuZGF0YTsKKwlpZiAoIUpzb25Db250YWluZXJJc0FycmF5KGNvbnRhaW5lcikpCisJCWVy ZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxV RSksCisJCQkJIGVycm1zZygiZWxlbWVudCBcIiVzXCIgaXMgbm90IGEgSlNPTiBhcnJheSIsIHBh cmFtKSkpOworCisJaW5pdFN0cmluZ0luZm8oJmFycmF5ZWxlbSk7CisKKwlpdCA9IEpzb25iSXRl cmF0b3JJbml0KGNvbnRhaW5lcik7CisJd2hpbGUgKCh0eXBlID0gSnNvbmJJdGVyYXRvck5leHQo Jml0LCAmdiwgdHJ1ZSkpICE9IFdKQl9ET05FKQorCXsKKwkJaWYgKHR5cGUgPT0gV0pCX0VMRU0p CisJCXsKKwkJCXJlc2V0U3RyaW5nSW5mbygmYXJyYXllbGVtKTsKKworCQkJaWYgKGV4cGFuZF9v bmVfanNvbmJfZWxlbWVudCgmYXJyYXllbGVtLCBwYXJhbSwgJnYsIHNwZWNpZmllciwgTlVMTCkp CisJCQl7CisJCQkJaWYgKCFmaXJzdCkKKwkJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYs IGFycmF5c2VwKTsKKworCQkJCWFwcGVuZEJpbmFyeVN0cmluZ0luZm8oYnVmLCBhcnJheWVsZW0u ZGF0YSwgYXJyYXllbGVtLmxlbik7CisJCQkJZmlyc3QgPSBmYWxzZTsKKwkJCX0KKwkJfQorCX0K KworCWlmIChmbXQpCisJCWVycm9yX2NvbnRleHRfc3RhY2sgPSBzcWxlcnJjb250ZXh0LnByZXZp b3VzOworfQorCisvKgorICogV29ya2hvcnNlIGZvciBkZGxfZGVwYXJzZV9leHBhbmRfY29tbWFu ZC4KKyAqLworY2hhciAqCitkZGxfZGVwYXJzZV9qc29uX3RvX3N0cmluZyhjaGFyICpqc29uX3N0 cikKK3sKKwlEYXR1bQkJZDsKKwlKc29uYgkgICAqanNvbmI7CisJU3RyaW5nSW5mbyBidWYgPSAo U3RyaW5nSW5mbykgcGFsbG9jMChzaXplb2YoU3RyaW5nSW5mb0RhdGEpKTsKKworCWluaXRTdHJp bmdJbmZvKGJ1Zik7CisKKwlkID0gRGlyZWN0RnVuY3Rpb25DYWxsMShqc29uYl9pbiwgUG9pbnRl ckdldERhdHVtKGpzb25fc3RyKSk7CisJanNvbmIgPSAoSnNvbmIgKikgRGF0dW1HZXRQb2ludGVy KGQpOworCisJZXhwYW5kX2ZtdF9yZWN1cnNpdmUoJmpzb25iLT5yb290LCBidWYpOworCisJcmV0 dXJuIGJ1Zi0+ZGF0YTsKK30KKworLyotLS0tLS0KKyAqIFJldHVybnMgYSBmb3JtYXR0ZWQgc3Ry aW5nIGZyb20gYSBKU09OIG9iamVjdC4KKyAqCisgKiBUaGUgc3RhcnRpbmcgcG9pbnQgaXMgdGhl IGVsZW1lbnQgbmFtZWQgImZtdCIgKHdoaWNoIG11c3QgYmUgYSBzdHJpbmcpLgorICogVGhpcyBm b3JtYXQgc3RyaW5nIG1heSBjb250YWluIHplcm8gb3IgbW9yZSAlLWVzY2FwZXMsIHdoaWNoIGNv bnNpc3Qgb2YgYW4KKyAqIGVsZW1lbnQgbmFtZSBlbmNsb3NlZCBpbiB7IH0sIHBvc3NpYmx5IGZv bGxvd2VkIGJ5IGEgY29udmVyc2lvbiBtb2RpZmllciwKKyAqIGZvbGxvd2VkIGJ5IGEgY29udmVy c2lvbiBzcGVjaWZpZXIuICBQb3NzaWJsZSBjb252ZXJzaW9uIHNwZWNpZmllcnMgYXJlOgorICoK KyAqICUJCWV4cGFuZCB0byBhIGxpdGVyYWwgJS4KKyAqIEkJCWV4cGFuZCBhcyBhIHNpbmdsZSwg bm9uLXF1YWxpZmllZCBpZGVudGlmaWVyCisgKiBECQlleHBhbmQgYXMgYSBwb3NzaWJseS1xdWFs aWZpZWQgaWRlbnRpZmllcgorICogVAkJZXhwYW5kIGFzIGEgdHlwZSBuYW1lCisgKiBPCQlleHBh bmQgYXMgYW4gb3BlcmF0b3IgbmFtZQorICogTAkJZXhwYW5kIGFzIGEgc3RyaW5nIGxpdGVyYWwg KHF1b3RlIHVzaW5nIHNpbmdsZSBxdW90ZXMpCisgKiBzCQlleHBhbmQgYXMgYSBzaW1wbGUgc3Ry aW5nIChubyBxdW90aW5nKQorICogbgkJZXhwYW5kIGFzIGEgc2ltcGxlIG51bWJlciAobm8gcXVv dGluZykKKyAqIFIJCWV4cGFuZCBhcyBhIHJvbGUgbmFtZSAocG9zc2libHkgcXVvdGVkIG5hbWUs IG9yIFBVQkxJQykKKyAqCisgKiBUaGUgZWxlbWVudCBuYW1lIG1heSBoYXZlIGFuIG9wdGlvbmFs IHNlcGFyYXRvciBzcGVjaWZpY2F0aW9uIHByZWNlZGVkCisgKiBieSBhIGNvbG9uLiAgSXRzIHBy ZXNlbmNlIGluZGljYXRlcyB0aGF0IHRoZSBlbGVtZW50IGlzIGV4cGVjdGVkIHRvIGJlCisgKiBh biBhcnJheTsgdGhlIHNwZWNpZmllZCBzZXBhcmF0b3IgaXMgdXNlZCB0byBqb2luIHRoZSBhcnJh eSBlbGVtZW50cy4KKyAqLS0tLS0tCisgKi8KK0RhdHVtCitkZGxfZGVwYXJzZV9leHBhbmRfY29t bWFuZChQR19GVU5DVElPTl9BUkdTKQoreworCXRleHQJICAgKmpzb24gPSBQR19HRVRBUkdfVEVY VF9QKDApOworCWNoYXIJICAgKmpzb25fc3RyOworCisJanNvbl9zdHIgPSB0ZXh0X3RvX2NzdHJp bmcoanNvbik7CisKKwlQR19SRVRVUk5fVEVYVF9QKGNzdHJpbmdfdG9fdGV4dChkZGxfZGVwYXJz ZV9qc29uX3RvX3N0cmluZyhqc29uX3N0cikpKTsKK30KKworLyoKKyAqIEVycm9yIGNvbnRleHQg Y2FsbGJhY2sgZm9yIEpTT04gZm9ybWF0IHN0cmluZyBleHBhbnNpb24uCisgKgorICogWFhYOiBp bmRpY2F0ZSB3aGljaCBlbGVtZW50IHdlJ3JlIGV4cGFuZGluZywgaWYgYXBwbGljYWJsZS4KKyAq Lworc3RhdGljIHZvaWQKK2ZtdHN0cl9lcnJvcl9jYWxsYmFjayh2b2lkICphcmcpCit7CisJZXJy Y29udGV4dCgid2hpbGUgZXhwYW5kaW5nIGZvcm1hdCBzdHJpbmcgXCIlc1wiIiwgKGNoYXIgKikg YXJnKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3NlcXVlbmNlLmMgYi9z cmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jCmluZGV4IDk5YzlmOTFjYmEuLjQyMDVkZGEy MjIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3NlcXVlbmNlLmMKKysrIGIvc3Jj L2JhY2tlbmQvY29tbWFuZHMvc2VxdWVuY2UuYwpAQCAtMTcwOCw2ICsxNzA4LDM5IEBAIHByb2Nl c3Nfb3duZWRfYnkoUmVsYXRpb24gc2VxcmVsLCBMaXN0ICpvd25lZF9ieSwgYm9vbCBmb3JfaWRl bnRpdHkpCiAJCXJlbGF0aW9uX2Nsb3NlKHRhYmxlcmVsLCBOb0xvY2spOwogfQogCisvKgorICog UmV0dXJuIHNlcXVlbmNlIHBhcmFtZXRlcnMsIGRldGFpbGVkCisgKi8KK0Zvcm1fcGdfc2VxdWVu Y2VfZGF0YQorZ2V0X3NlcXVlbmNlX3ZhbHVlcyhPaWQgc2VxdWVuY2VJZCkKK3sKKwlCdWZmZXIg ICAgICBidWY7CisJU2VxVGFibGUgICAgZWxtOworCVJlbGF0aW9uICAgIHNlcXJlbDsKKwlIZWFw VHVwbGVEYXRhIHNlcXR1cGxlOworCUZvcm1fcGdfc2VxdWVuY2VfZGF0YSBzZXE7CisJRm9ybV9w Z19zZXF1ZW5jZV9kYXRhIHJldFNlcTsKKworCS8qIE9wZW4gYW5kIEFjY2Vzc1NoYXJlTG9jayBz ZXF1ZW5jZSAqLworCWluaXRfc2VxdWVuY2Uoc2VxdWVuY2VJZCwgJmVsbSwgJnNlcXJlbCk7CisK KwlpZiAocGdfY2xhc3NfYWNsY2hlY2soc2VxdWVuY2VJZCwgR2V0VXNlcklkKCksCisJCQlBQ0xf U0VMRUNUIHwgQUNMX1VQREFURSB8IEFDTF9VU0FHRSkgIT0gQUNMQ0hFQ0tfT0spCisJCWVyZXBv cnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5TVUZGSUNJRU5UX1BSSVZJTEVHRSks CisJCQkJCSBlcnJtc2coInBlcm1pc3Npb24gZGVuaWVkIGZvciBzZXF1ZW5jZSAlcyIsCisJCQkJ CQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoc2VxcmVsKSkpKTsKKworCXNlcSA9IHJlYWRfc2Vx X3R1cGxlKHNlcXJlbCwgJmJ1ZiwgJnNlcXR1cGxlKTsKKwlyZXRTZXEgPSBwYWxsb2Moc2l6ZW9m KEZvcm1EYXRhX3BnX3NlcXVlbmNlX2RhdGEpKTsKKworCW1lbWNweShyZXRTZXEsIHNlcSwgc2l6 ZW9mKEZvcm1EYXRhX3BnX3NlcXVlbmNlX2RhdGEpKTsKKworCVVubG9ja1JlbGVhc2VCdWZmZXIo YnVmKTsKKwlyZWxhdGlvbl9jbG9zZShzZXFyZWwsIE5vTG9jayk7CisKKwlyZXR1cm4gcmV0U2Vx OworfQogCiAvKgogICogUmV0dXJuIHNlcXVlbmNlIHBhcmFtZXRlcnMgaW4gYSBsaXN0IG9mIHRo ZSBmb3JtIGNyZWF0ZWQgYnkgdGhlIHBhcnNlci4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0 aWxzL2FkdC9mb3JtYXRfdHlwZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Zvcm1hdF90eXBl LmMKaW5kZXggMjkxOGZkYmZiNi4uZjY0YTcyMTNiNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv dXRpbHMvYWR0L2Zvcm1hdF90eXBlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Zvcm1h dF90eXBlLmMKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlICJ1dGlscy9udW1lcmljLmgiCiAj aW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKIAotc3RhdGljIGNoYXIgKnByaW50VHlwbW9kKGNv bnN0IGNoYXIgKnR5cG5hbWUsIGludDMyIHR5cG1vZCwgT2lkIHR5cG1vZG91dCk7CiAKIAogLyoK QEAgLTM2Myw3ICszNjIsNyBAQCBmb3JtYXRfdHlwZV93aXRoX3R5cGVtb2QoT2lkIHR5cGVfb2lk LCBpbnQzMiB0eXBlbW9kKQogLyoKICAqIEFkZCB0eXBtb2QgZGVjb3JhdGlvbiB0byB0aGUgYmFz aWMgdHlwZSBuYW1lCiAgKi8KLXN0YXRpYyBjaGFyICoKK2NoYXIgKgogcHJpbnRUeXBtb2QoY29u c3QgY2hhciAqdHlwbmFtZSwgaW50MzIgdHlwbW9kLCBPaWQgdHlwbW9kb3V0KQogewogCWNoYXIJ ICAgKnJlczsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9yZWdwcm9jLmMgYi9z cmMvYmFja2VuZC91dGlscy9hZHQvcmVncHJvYy5jCmluZGV4IDZkNGMxYzI3YTUuLjZiMjM2ZTVm MTkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9yZWdwcm9jLmMKKysrIGIvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L3JlZ3Byb2MuYwpAQCAtNDQsNiArNDQsOCBAQAogc3RhdGljIHZv aWQgcGFyc2VOYW1lQW5kQXJnVHlwZXMoY29uc3QgY2hhciAqc3RyaW5nLCBib29sIGFsbG93Tm9u ZSwKIAkJCQkJCQkJIExpc3QgKipuYW1lcywgaW50ICpuYXJncywgT2lkICphcmd0eXBlcyk7CiAK K3N0YXRpYyB2b2lkIGZvcm1hdF9wcm9jZWR1cmVfYXJnc19pbnRlcm5hbChGb3JtX3BnX3Byb2Mg cHJvY2Zvcm0sCisJCQkJCQkJCQkJICAgU3RyaW5nSW5mbyBidWYsIGJvb2wgZm9yY2VfcXVhbGlm eSk7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoJIFVTRVIgSS9PIFJPVVRJTkVTCQkJCQkJ CQkJCQkJCQkgKgpAQCAtMzMxLDYgKzMzMywyOSBAQCBmb3JtYXRfcHJvY2VkdXJlX3F1YWxpZmll ZChPaWQgcHJvY2VkdXJlX29pZCkKIAlyZXR1cm4gZm9ybWF0X3Byb2NlZHVyZV9leHRlbmRlZChw cm9jZWR1cmVfb2lkLCBGT1JNQVRfUFJPQ19GT1JDRV9RVUFMSUZZKTsKIH0KIAorLyoKKyAqIGZv cm1hdF9wcm9jZWR1cmVfYXJncyAgIC0gY29udmVydHMgcHJvYyBPSUQgdG8gIihhcmdzKSIKKyAq LworY2hhciAqCitmb3JtYXRfcHJvY2VkdXJlX2FyZ3MoT2lkIHByb2NlZHVyZV9vaWQsIGJvb2wg Zm9yY2VfcXVhbGlmeSkKK3sKKwlTdHJpbmdJbmZvRGF0YSBidWY7CisJSGVhcFR1cGxlICAgcHJv Y3R1cDsKKwlGb3JtX3BnX3Byb2MgcHJvY2Zvcm07CisKKwlwcm9jdHVwID0gU2VhcmNoU3lzQ2Fj aGUxKFBST0NPSUQsIE9iamVjdElkR2V0RGF0dW0ocHJvY2VkdXJlX29pZCkpOworCWlmICghSGVh cFR1cGxlSXNWYWxpZChwcm9jdHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWls ZWQgZm9yIHByb2NlZHVyZSAldSIsIHByb2NlZHVyZV9vaWQpOworCXByb2Nmb3JtID0gKEZvcm1f cGdfcHJvYykgR0VUU1RSVUNUKHByb2N0dXApOworCisJaW5pdFN0cmluZ0luZm8oJmJ1Zik7CisJ Zm9ybWF0X3Byb2NlZHVyZV9hcmdzX2ludGVybmFsKHByb2Nmb3JtLCAmYnVmLCBmb3JjZV9xdWFs aWZ5KTsKKworCVJlbGVhc2VTeXNDYWNoZShwcm9jdHVwKTsKKworCXJldHVybiBidWYuZGF0YTsK K30KKwogLyoKICAqIGZvcm1hdF9wcm9jZWR1cmVfZXh0ZW5kZWQgLSBjb252ZXJ0cyBwcm9jZWR1 cmUgT0lEIHRvICJwcm9fbmFtZShhcmdzKSIKICAqCkBAIC0yMDYwLDMgKzIwODUsMzAgQEAgcGFy c2VOYW1lQW5kQXJnVHlwZXMoY29uc3QgY2hhciAqc3RyaW5nLCBib29sIGFsbG93Tm9uZSwgTGlz dCAqKm5hbWVzLAogCiAJcGZyZWUocmF3bmFtZSk7CiB9CisKKy8qCisgKiBBcHBlbmQgdGhlIHBh cmVudGhpc2VkIGFyZ3VtZW50cyBvZiB0aGUgZ2l2ZW4gcGdfcHJvYyByb3cgaW50byB0aGUgb3V0 cHV0CisgKiBidWZmZXIuICBmb3JjZV9xdWFsaWZ5IGluZGljYXRlcyB3aGV0aGVyIHRvIHNjaGVt YS1xdWFsaWZ5IHR5cGUgbmFtZXMKKyAqIHJlZ2FyZGxlc3Mgb2YgdmlzaWJpbGl0eS4KKyAqLwor c3RhdGljIHZvaWQKK2Zvcm1hdF9wcm9jZWR1cmVfYXJnc19pbnRlcm5hbChGb3JtX3BnX3Byb2Mg cHJvY2Zvcm0sIFN0cmluZ0luZm8gYnVmLAorCQkJCQkJCSAgIGJvb2wgZm9yY2VfcXVhbGlmeSkK K3sKKwlpbnQJCQlpOworCWludAkJCW5hcmdzID0gcHJvY2Zvcm0tPnByb25hcmdzOworCisJYXBw ZW5kU3RyaW5nSW5mb0NoYXIoYnVmLCAnKCcpOworCWZvciAoaSA9IDA7IGkgPCBuYXJnczsgaSsr KQorCXsKKwkJT2lkCQkJdGhpc2FyZ3R5cGUgPSBwcm9jZm9ybS0+cHJvYXJndHlwZXMudmFsdWVz W2ldOworCisJCWlmIChpID4gMCkKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJywnKTsK KwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsCisJCQkJCQkJICAgZm9yY2VfcXVhbGlmeSA/ CisJCQkJCQkJICAgZm9ybWF0X3R5cGVfYmVfcXVhbGlmaWVkKHRoaXNhcmd0eXBlKSA6CisJCQkJ CQkJICAgZm9ybWF0X3R5cGVfYmUodGhpc2FyZ3R5cGUpKTsKKwl9CisJYXBwZW5kU3RyaW5nSW5m b0NoYXIoYnVmLCAnKScpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1 bGV1dGlscy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jCmluZGV4IDg1NWQ0 ODM3MmEuLjMwYjhkOTA3NjUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxl dXRpbHMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKQEAgLTM1OCw3 ICszNTgsNiBAQCBzdGF0aWMgaW50CXByaW50X2Z1bmN0aW9uX2FyZ3VtZW50cyhTdHJpbmdJbmZv IGJ1ZiwgSGVhcFR1cGxlIHByb2N0dXAsCiAJCQkJCQkJCQkgYm9vbCBwcmludF90YWJsZV9hcmdz LCBib29sIHByaW50X2RlZmF1bHRzKTsKIHN0YXRpYyB2b2lkIHByaW50X2Z1bmN0aW9uX3JldHR5 cGUoU3RyaW5nSW5mbyBidWYsIEhlYXBUdXBsZSBwcm9jdHVwKTsKIHN0YXRpYyB2b2lkIHByaW50 X2Z1bmN0aW9uX3RyZnR5cGVzKFN0cmluZ0luZm8gYnVmLCBIZWFwVHVwbGUgcHJvY3R1cCk7Ci1z dGF0aWMgdm9pZCBwcmludF9mdW5jdGlvbl9zcWxib2R5KFN0cmluZ0luZm8gYnVmLCBIZWFwVHVw bGUgcHJvY3R1cCk7CiBzdGF0aWMgdm9pZCBzZXRfcnRhYmxlX25hbWVzKGRlcGFyc2VfbmFtZXNw YWNlICpkcG5zLCBMaXN0ICpwYXJlbnRfbmFtZXNwYWNlcywKIAkJCQkJCQkgQml0bWFwc2V0ICpy ZWxzX3VzZWQpOwogc3RhdGljIHZvaWQgc2V0X2RlcGFyc2VfZm9yX3F1ZXJ5KGRlcGFyc2VfbmFt ZXNwYWNlICpkcG5zLCBRdWVyeSAqcXVlcnksCkBAIC00ODIsMjIgKzQ4MSwxNSBAQCBzdGF0aWMg dm9pZCBnZXRfZnJvbV9jbGF1c2VfY29sZGVmbGlzdChSYW5nZVRibEZ1bmN0aW9uICpydGZ1bmMs CiAJCQkJCQkJCQkgICBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQpOwogc3RhdGljIHZvaWQgZ2V0 X3RhYmxlc2FtcGxlX2RlZihUYWJsZVNhbXBsZUNsYXVzZSAqdGFibGVzYW1wbGUsCiAJCQkJCQkJ CWRlcGFyc2VfY29udGV4dCAqY29udGV4dCk7Ci1zdGF0aWMgdm9pZCBnZXRfb3BjbGFzc19uYW1l KE9pZCBvcGNsYXNzLCBPaWQgYWN0dWFsX2RhdGF0eXBlLAotCQkJCQkJCSBTdHJpbmdJbmZvIGJ1 Zik7CiBzdGF0aWMgTm9kZSAqcHJvY2Vzc0luZGlyZWN0aW9uKE5vZGUgKm5vZGUsIGRlcGFyc2Vf Y29udGV4dCAqY29udGV4dCk7CiBzdGF0aWMgdm9pZCBwcmludFN1YnNjcmlwdHMoU3Vic2NyaXB0 aW5nUmVmICpzYnNyZWYsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCk7CiBzdGF0aWMgY2hhciAq Z2V0X3JlbGF0aW9uX25hbWUoT2lkIHJlbGlkKTsKIHN0YXRpYyBjaGFyICpnZW5lcmF0ZV9yZWxh dGlvbl9uYW1lKE9pZCByZWxpZCwgTGlzdCAqbmFtZXNwYWNlcyk7CiBzdGF0aWMgY2hhciAqZ2Vu ZXJhdGVfcXVhbGlmaWVkX3JlbGF0aW9uX25hbWUoT2lkIHJlbGlkKTsKLXN0YXRpYyBjaGFyICpn ZW5lcmF0ZV9mdW5jdGlvbl9uYW1lKE9pZCBmdW5jaWQsIGludCBuYXJncywKLQkJCQkJCQkJCUxp c3QgKmFyZ25hbWVzLCBPaWQgKmFyZ3R5cGVzLAotCQkJCQkJCQkJYm9vbCBoYXNfdmFyaWFkaWMs IGJvb2wgKnVzZV92YXJpYWRpY19wLAotCQkJCQkJCQkJUGFyc2VFeHByS2luZCBzcGVjaWFsX2V4 cHJraW5kKTsKIHN0YXRpYyBjaGFyICpnZW5lcmF0ZV9vcGVyYXRvcl9uYW1lKE9pZCBvcGVyaWQs IE9pZCBhcmcxLCBPaWQgYXJnMik7CiBzdGF0aWMgdm9pZCBhZGRfY2FzdF90byhTdHJpbmdJbmZv IGJ1ZiwgT2lkIHR5cGlkKTsKIHN0YXRpYyBjaGFyICpnZW5lcmF0ZV9xdWFsaWZpZWRfdHlwZV9u YW1lKE9pZCB0eXBpZCk7CiBzdGF0aWMgdGV4dCAqc3RyaW5nX3RvX3RleHQoY2hhciAqc3RyKTsK LXN0YXRpYyBjaGFyICpmbGF0dGVuX3JlbG9wdGlvbnMoT2lkIHJlbGlkKTsKIHN0YXRpYyB2b2lk IGdldF9yZWxvcHRpb25zKFN0cmluZ0luZm8gYnVmLCBEYXR1bSByZWxvcHRpb25zKTsKIAogI2Rl ZmluZSBvbmx5X21hcmtlcihydGUpICAoKHJ0ZSktPmluaCA/ICIiIDogIk9OTFkgIikKQEAgLTU0 NSw2ICs1MzcsNzcgQEAgcGdfZ2V0X3J1bGVkZWZfZXh0KFBHX0ZVTkNUSU9OX0FSR1MpCiAJUEdf UkVUVVJOX1RFWFRfUChzdHJpbmdfdG9fdGV4dChyZXMpKTsKIH0KIAorLyoKKyAqIEdpdmVuIGEg cGFpciBvZiBEYXR1bSBjb3JyZXNwb25kaW5nIHRvIGEgcnVsZSdzIHBnX3Jld3JpdGUuZXZfcXVh bCBhbmQKKyAqIGV2X2FjdGlvbiBjb2x1bW5zLCByZXR1cm4gdGhlaXIgdGV4dCByZXByZXNlbnRh dGlvbjsgZXZfcXVhbCBhcyBhIHNpbmdsZQorICogc3RyaW5nIGluIHdoZXJlQ2xhdXNlIGFuZCBl dl9hY3Rpb24gYXMgYSBMaXN0IG9mIHN0cmluZ3MgKHdoaWNoIG1pZ2h0IGJlCisgKiBOSUwsIHNp Z25hbGxpbmcgTk9USElORykgaW4gYWN0aW9ucy4KKyAqLwordm9pZAorcGdfZ2V0X3J1bGVkZWZf ZGV0YWlsZWQoRGF0dW0gZXZfcXVhbCwgRGF0dW0gZXZfYWN0aW9uLAorCQkJCQkJY2hhciAqKndo ZXJlQ2xhdXNlLCBMaXN0ICoqYWN0aW9ucykKK3sKKwlpbnQgcHJldHR5RmxhZ3MgPSAwOworCWNo YXIgKnF1YWxzdHIgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKGV2X3F1YWwpOworCWNoYXIgKmFjdGlv bnN0ciA9IFRleHREYXR1bUdldENTdHJpbmcoZXZfYWN0aW9uKTsKKwlMaXN0ICphY3Rpb25Ob2Rl TGlzdCA9IChMaXN0ICopIHN0cmluZ1RvTm9kZShhY3Rpb25zdHIpOworCVN0cmluZ0luZm9EYXRh IGJ1ZjsKKworCWluaXRTdHJpbmdJbmZvKCZidWYpOworCWlmIChzdHJsZW4ocXVhbHN0cikgPiAw ICYmIHN0cmNtcChxdWFsc3RyLCAiPD4iKSAhPSAwKQorCXsKKwkJTm9kZQkgICAqcXVhbDsKKwkJ UXVlcnkJICAgKnF1ZXJ5OworCQlkZXBhcnNlX2NvbnRleHQgY29udGV4dDsKKwkJZGVwYXJzZV9u YW1lc3BhY2UgZHBuczsKKworCQlxdWFsID0gc3RyaW5nVG9Ob2RlKHF1YWxzdHIpOworCisJCXF1 ZXJ5ID0gKFF1ZXJ5ICopIGxpbml0aWFsKGFjdGlvbk5vZGVMaXN0KTsKKwkJcXVlcnkgPSBnZXRJ bnNlcnRTZWxlY3RRdWVyeShxdWVyeSwgTlVMTCk7CisKKwkJQWNxdWlyZVJld3JpdGVMb2Nrcyhx dWVyeSwgZmFsc2UsIGZhbHNlKTsKKworCQljb250ZXh0LmJ1ZiA9ICZidWY7CisJCWNvbnRleHQu bmFtZXNwYWNlcyA9IGxpc3RfbWFrZTEoJmRwbnMpOworCQljb250ZXh0LndpbmRvd0NsYXVzZSA9 IE5JTDsKKwkJY29udGV4dC53aW5kb3dUTGlzdCA9IE5JTDsKKwkJY29udGV4dC52YXJwcmVmaXgg PSAobGlzdF9sZW5ndGgocXVlcnktPnJ0YWJsZSkgIT0gMSk7CisJCWNvbnRleHQucHJldHR5Rmxh Z3MgPSBwcmV0dHlGbGFnczsKKwkJY29udGV4dC53cmFwQ29sdW1uID0gV1JBUF9DT0xVTU5fREVG QVVMVDsKKwkJY29udGV4dC5pbmRlbnRMZXZlbCA9IFBSRVRUWUlOREVOVF9TVEQ7CisKKwkJc2V0 X2RlcGFyc2VfZm9yX3F1ZXJ5KCZkcG5zLCBxdWVyeSwgTklMKTsKKworCQlnZXRfcnVsZV9leHBy KHF1YWwsICZjb250ZXh0LCBmYWxzZSk7CisKKwkJKndoZXJlQ2xhdXNlID0gcHN0cmR1cChidWYu ZGF0YSk7CisJfQorCWVsc2UKKwkJKndoZXJlQ2xhdXNlID0gTlVMTDsKKworCWlmIChsaXN0X2xl bmd0aChhY3Rpb25Ob2RlTGlzdCkgPT0gMCkKKwkJKmFjdGlvbnMgPSBOSUw7CisJZWxzZQorCXsK KwkJTGlzdENlbGwgKmNlbGw7CisJCUxpc3QJKm91dHB1dCA9IE5JTDsKKworCQlmb3JlYWNoKGNl bGwsIGFjdGlvbk5vZGVMaXN0KQorCQl7CisJCQlRdWVyeQkqcXVlcnkgPSAoUXVlcnkgKikgbGZp cnN0KGNlbGwpOworCisJCQlpZiAocXVlcnktPmNvbW1hbmRUeXBlID09IENNRF9OT1RISU5HKQor CQkJCWNvbnRpbnVlOworCisJCQlyZXNldFN0cmluZ0luZm8oJmJ1Zik7CisJCQlnZXRfcXVlcnlf ZGVmKHF1ZXJ5LCAmYnVmLCBOSUwsIE5VTEwsIHRydWUsCisJCQkJCQkgIHByZXR0eUZsYWdzLCBX UkFQX0NPTFVNTl9ERUZBVUxULCAwKTsKKwkJCW91dHB1dCA9IGxhcHBlbmQob3V0cHV0LCBwc3Ry ZHVwKGJ1Zi5kYXRhKSk7CisJCX0KKwkJKmFjdGlvbnMgPSBvdXRwdXQ7CisJfQorfQogCiBzdGF0 aWMgY2hhciAqCiBwZ19nZXRfcnVsZWRlZl93b3JrZXIoT2lkIHJ1bGVvaWQsIGludCBwcmV0dHlG bGFncykKQEAgLTEwMTUsNjUgKzEwNzgsMTIgQEAgcGdfZ2V0X3RyaWdnZXJkZWZfd29ya2VyKE9p ZCB0cmlnaWQsIGJvb2wgcHJldHR5KQogCWlmICghaXNudWxsKQogCXsKIAkJTm9kZQkgICAqcXVh bDsKLQkJY2hhcgkJcmVsa2luZDsKLQkJZGVwYXJzZV9jb250ZXh0IGNvbnRleHQ7Ci0JCWRlcGFy c2VfbmFtZXNwYWNlIGRwbnM7Ci0JCVJhbmdlVGJsRW50cnkgKm9sZHJ0ZTsKLQkJUmFuZ2VUYmxF bnRyeSAqbmV3cnRlOwotCi0JCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmJ1ZiwgIldIRU4gKCIp OworCQljaGFyICAgICAgICpxdWFsc3RyOwogCiAJCXF1YWwgPSBzdHJpbmdUb05vZGUoVGV4dERh dHVtR2V0Q1N0cmluZyh2YWx1ZSkpOworCQlxdWFsc3RyID0gcGdfZ2V0X3RyaWdnZXJfd2hlbmNs YXVzZSh0cmlncmVjLCBxdWFsLCBwcmV0dHkpOwogCi0JCXJlbGtpbmQgPSBnZXRfcmVsX3JlbGtp bmQodHJpZ3JlYy0+dGdyZWxpZCk7Ci0KLQkJLyogQnVpbGQgbWluaW1hbCBPTEQgYW5kIE5FVyBS VEVzIGZvciB0aGUgcmVsICovCi0JCW9sZHJ0ZSA9IG1ha2VOb2RlKFJhbmdlVGJsRW50cnkpOwot CQlvbGRydGUtPnJ0ZWtpbmQgPSBSVEVfUkVMQVRJT047Ci0JCW9sZHJ0ZS0+cmVsaWQgPSB0cmln cmVjLT50Z3JlbGlkOwotCQlvbGRydGUtPnJlbGtpbmQgPSByZWxraW5kOwotCQlvbGRydGUtPnJl bGxvY2ttb2RlID0gQWNjZXNzU2hhcmVMb2NrOwotCQlvbGRydGUtPmFsaWFzID0gbWFrZUFsaWFz KCJvbGQiLCBOSUwpOwotCQlvbGRydGUtPmVyZWYgPSBvbGRydGUtPmFsaWFzOwotCQlvbGRydGUt PmxhdGVyYWwgPSBmYWxzZTsKLQkJb2xkcnRlLT5pbmggPSBmYWxzZTsKLQkJb2xkcnRlLT5pbkZy b21DbCA9IHRydWU7Ci0KLQkJbmV3cnRlID0gbWFrZU5vZGUoUmFuZ2VUYmxFbnRyeSk7Ci0JCW5l d3J0ZS0+cnRla2luZCA9IFJURV9SRUxBVElPTjsKLQkJbmV3cnRlLT5yZWxpZCA9IHRyaWdyZWMt PnRncmVsaWQ7Ci0JCW5ld3J0ZS0+cmVsa2luZCA9IHJlbGtpbmQ7Ci0JCW5ld3J0ZS0+cmVsbG9j a21vZGUgPSBBY2Nlc3NTaGFyZUxvY2s7Ci0JCW5ld3J0ZS0+YWxpYXMgPSBtYWtlQWxpYXMoIm5l dyIsIE5JTCk7Ci0JCW5ld3J0ZS0+ZXJlZiA9IG5ld3J0ZS0+YWxpYXM7Ci0JCW5ld3J0ZS0+bGF0 ZXJhbCA9IGZhbHNlOwotCQluZXdydGUtPmluaCA9IGZhbHNlOwotCQluZXdydGUtPmluRnJvbUNs ID0gdHJ1ZTsKLQotCQkvKiBCdWlsZCB0d28tZWxlbWVudCBydGFibGUgKi8KLQkJbWVtc2V0KCZk cG5zLCAwLCBzaXplb2YoZHBucykpOwotCQlkcG5zLnJ0YWJsZSA9IGxpc3RfbWFrZTIob2xkcnRl LCBuZXdydGUpOwotCQlkcG5zLnN1YnBsYW5zID0gTklMOwotCQlkcG5zLmN0ZXMgPSBOSUw7Ci0J CWRwbnMuYXBwZW5kcmVscyA9IE5VTEw7Ci0JCXNldF9ydGFibGVfbmFtZXMoJmRwbnMsIE5JTCwg TlVMTCk7Ci0JCXNldF9zaW1wbGVfY29sdW1uX25hbWVzKCZkcG5zKTsKLQotCQkvKiBTZXQgdXAg Y29udGV4dCB3aXRoIG9uZS1kZWVwIG5hbWVzcGFjZSBzdGFjayAqLwotCQljb250ZXh0LmJ1ZiA9 ICZidWY7Ci0JCWNvbnRleHQubmFtZXNwYWNlcyA9IGxpc3RfbWFrZTEoJmRwbnMpOwotCQljb250 ZXh0LndpbmRvd0NsYXVzZSA9IE5JTDsKLQkJY29udGV4dC53aW5kb3dUTGlzdCA9IE5JTDsKLQkJ Y29udGV4dC52YXJwcmVmaXggPSB0cnVlOwotCQljb250ZXh0LnByZXR0eUZsYWdzID0gR0VUX1BS RVRUWV9GTEFHUyhwcmV0dHkpOwotCQljb250ZXh0LndyYXBDb2x1bW4gPSBXUkFQX0NPTFVNTl9E RUZBVUxUOwotCQljb250ZXh0LmluZGVudExldmVsID0gUFJFVFRZSU5ERU5UX1NURDsKLQkJY29u dGV4dC5zcGVjaWFsX2V4cHJraW5kID0gRVhQUl9LSU5EX05PTkU7Ci0JCWNvbnRleHQuYXBwZW5k cGFyZW50cyA9IE5VTEw7Ci0KLQkJZ2V0X3J1bGVfZXhwcihxdWFsLCAmY29udGV4dCwgZmFsc2Up OwotCi0JCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmJ1ZiwgIikgIik7CisJCWFwcGVuZFN0cmlu Z0luZm8oJmJ1ZiwgIldIRU4gKCVzKSAiLCBxdWFsc3RyKTsKIAl9CiAKIAlhcHBlbmRTdHJpbmdJ bmZvKCZidWYsICJFWEVDVVRFIEZVTkNUSU9OICVzKCIsCkBAIC0xMTE0LDYgKzExMjQsNjQgQEAg cGdfZ2V0X3RyaWdnZXJkZWZfd29ya2VyKE9pZCB0cmlnaWQsIGJvb2wgcHJldHR5KQogCXJldHVy biBidWYuZGF0YTsKIH0KIAorY2hhciAqCitwZ19nZXRfdHJpZ2dlcl93aGVuY2xhdXNlKEZvcm1f cGdfdHJpZ2dlciB0cmlncmVjLCBOb2RlICp3aGVuQ2xhdXNlLCBib29sIHByZXR0eSkKK3sKKwlT dHJpbmdJbmZvRGF0YSBidWY7CisJY2hhciAgICAgICAgcmVsa2luZDsKKwlkZXBhcnNlX2NvbnRl eHQgY29udGV4dDsKKwlkZXBhcnNlX25hbWVzcGFjZSBkcG5zOworCVJhbmdlVGJsRW50cnkgKm9s ZHJ0ZTsKKwlSYW5nZVRibEVudHJ5ICpuZXdydGU7CisKKyAgIGluaXRTdHJpbmdJbmZvKCZidWYp OworCisgICByZWxraW5kID0gZ2V0X3JlbF9yZWxraW5kKHRyaWdyZWMtPnRncmVsaWQpOworCisg ICAvKiBCdWlsZCBtaW5pbWFsIE9MRCBhbmQgTkVXIFJURXMgZm9yIHRoZSByZWwgKi8KKyAgIG9s ZHJ0ZSA9IG1ha2VOb2RlKFJhbmdlVGJsRW50cnkpOworICAgb2xkcnRlLT5ydGVraW5kID0gUlRF X1JFTEFUSU9OOworICAgb2xkcnRlLT5yZWxpZCA9IHRyaWdyZWMtPnRncmVsaWQ7CisgICBvbGRy dGUtPnJlbGtpbmQgPSByZWxraW5kOworICAgb2xkcnRlLT5hbGlhcyA9IG1ha2VBbGlhcygib2xk IiwgTklMKTsKKyAgIG9sZHJ0ZS0+ZXJlZiA9IG9sZHJ0ZS0+YWxpYXM7CisgICBvbGRydGUtPmxh dGVyYWwgPSBmYWxzZTsKKyAgIG9sZHJ0ZS0+aW5oID0gZmFsc2U7CisgICBvbGRydGUtPmluRnJv bUNsID0gdHJ1ZTsKKworICAgbmV3cnRlID0gbWFrZU5vZGUoUmFuZ2VUYmxFbnRyeSk7CisgICBu ZXdydGUtPnJ0ZWtpbmQgPSBSVEVfUkVMQVRJT047CisgICBuZXdydGUtPnJlbGlkID0gdHJpZ3Jl Yy0+dGdyZWxpZDsKKyAgIG5ld3J0ZS0+cmVsa2luZCA9IHJlbGtpbmQ7CisgICBuZXdydGUtPmFs aWFzID0gbWFrZUFsaWFzKCJuZXciLCBOSUwpOworICAgbmV3cnRlLT5lcmVmID0gbmV3cnRlLT5h bGlhczsKKyAgIG5ld3J0ZS0+bGF0ZXJhbCA9IGZhbHNlOworICAgbmV3cnRlLT5pbmggPSBmYWxz ZTsKKyAgIG5ld3J0ZS0+aW5Gcm9tQ2wgPSB0cnVlOworCisgICAvKiBCdWlsZCB0d28tZWxlbWVu dCBydGFibGUgKi8KKyAgIG1lbXNldCgmZHBucywgMCwgc2l6ZW9mKGRwbnMpKTsKKyAgIGRwbnMu cnRhYmxlID0gbGlzdF9tYWtlMihvbGRydGUsIG5ld3J0ZSk7CisgICBkcG5zLmN0ZXMgPSBOSUw7 CisgICBzZXRfcnRhYmxlX25hbWVzKCZkcG5zLCBOSUwsIE5VTEwpOworICAgc2V0X3NpbXBsZV9j b2x1bW5fbmFtZXMoJmRwbnMpOworCisgICAvKiBTZXQgdXAgY29udGV4dCB3aXRoIG9uZS1kZWVw IG5hbWVzcGFjZSBzdGFjayAqLworICAgY29udGV4dC5idWYgPSAmYnVmOworICAgY29udGV4dC5u YW1lc3BhY2VzID0gbGlzdF9tYWtlMSgmZHBucyk7CisgICBjb250ZXh0LndpbmRvd0NsYXVzZSA9 IE5JTDsKKyAgIGNvbnRleHQud2luZG93VExpc3QgPSBOSUw7CisgICBjb250ZXh0LnZhcnByZWZp eCA9IHRydWU7CisgICBjb250ZXh0LnByZXR0eUZsYWdzID0gcHJldHR5ID8gUFJFVFRZRkxBR19Q QVJFTiB8IFBSRVRUWUZMQUdfSU5ERU5UIDogUFJFVFRZRkxBR19JTkRFTlQ7CisgICBjb250ZXh0 LndyYXBDb2x1bW4gPSBXUkFQX0NPTFVNTl9ERUZBVUxUOworICAgY29udGV4dC5pbmRlbnRMZXZl bCA9IFBSRVRUWUlOREVOVF9TVEQ7CisgICBjb250ZXh0LnNwZWNpYWxfZXhwcmtpbmQgPSBFWFBS X0tJTkRfTk9ORTsKKworICAgZ2V0X3J1bGVfZXhwcih3aGVuQ2xhdXNlLCAmY29udGV4dCwgZmFs c2UpOworCisgICByZXR1cm4gYnVmLmRhdGE7Cit9CisKIC8qIC0tLS0tLS0tLS0KICAqIHBnX2dl dF9pbmRleGRlZgkJCS0gR2V0IHRoZSBkZWZpbml0aW9uIG9mIGFuIGluZGV4CiAgKgpAQCAtMTg4 MCw2ICsxOTQ4LDEzIEBAIHBnX2dldF9wYXJ0a2V5ZGVmX2NvbHVtbnMoT2lkIHJlbGlkLCBib29s IHByZXR0eSkKIAlyZXR1cm4gcGdfZ2V0X3BhcnRrZXlkZWZfd29ya2VyKHJlbGlkLCBwcmV0dHlG bGFncywgdHJ1ZSwgZmFsc2UpOwogfQogCisvKiBJbnRlcm5hbCB2ZXJzaW9uIHRoYXQgcmVwb3J0 cyB0aGUgZnVsbCBwYXJ0aXRpb24ga2V5IGRlZmluaXRpb24gKi8KK2NoYXIgKgorcGdfZ2V0X3Bh cnRrZXlkZWZfc2ltcGxlKE9pZCByZWxpZCkKK3sKKwlyZXR1cm4gcGdfZ2V0X3BhcnRrZXlkZWZf d29ya2VyKHJlbGlkLCAwLCBmYWxzZSwgZmFsc2UpOworfQorCiAvKgogICogSW50ZXJuYWwgd29y a2hvcnNlIHRvIGRlY29tcGlsZSBhIHBhcnRpdGlvbiBrZXkgZGVmaW5pdGlvbi4KICAqLwpAQCAt MjEzMSw2ICsyMjA2LDE1IEBAIHBnX2dldF9jb25zdHJhaW50ZGVmX2V4dChQR19GVU5DVElPTl9B UkdTKQogCVBHX1JFVFVSTl9URVhUX1Aoc3RyaW5nX3RvX3RleHQocmVzKSk7CiB9CiAKKy8qCisg KiBJbnRlcm5hbCB2ZXJzaW9uIHRoYXQgcmV0dXJucyBkZWZpbml0aW9uIG9mIGEgQ09OU1RSQUlO VCBjb21tYW5kCisgKi8KK2NoYXIgKgorcGdfZ2V0X2NvbnN0cmFpbnRkZWZfY29tbWFuZF9zaW1w bGUoT2lkIGNvbnN0cmFpbnRJZCkKK3sKKwlyZXR1cm4gcGdfZ2V0X2NvbnN0cmFpbnRkZWZfd29y a2VyKGNvbnN0cmFpbnRJZCwgZmFsc2UsIDAsIGZhbHNlKTsKK30KKwogLyoKICAqIEludGVybmFs IHZlcnNpb24gdGhhdCByZXR1cm5zIGEgZnVsbCBBTFRFUiBUQUJMRSAuLi4gQUREIENPTlNUUkFJ TlQgY29tbWFuZAogICovCkBAIC0zNTAxLDcgKzM1ODUsNyBAQCBwZ19nZXRfZnVuY3Rpb25fYXJn X2RlZmF1bHQoUEdfRlVOQ1RJT05fQVJHUykKIAlQR19SRVRVUk5fVEVYVF9QKHN0cmluZ190b190 ZXh0KHN0cikpOwogfQogCi1zdGF0aWMgdm9pZAordm9pZAogcHJpbnRfZnVuY3Rpb25fc3FsYm9k eShTdHJpbmdJbmZvIGJ1ZiwgSGVhcFR1cGxlIHByb2N0dXApCiB7CiAJaW50CQkJbnVtYXJnczsK QEAgLTExMzg0LDcgKzExNDY4LDcgQEAgZ2V0X3RhYmxlc2FtcGxlX2RlZihUYWJsZVNhbXBsZUNs YXVzZSAqdGFibGVzYW1wbGUsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCkKICAqIGFjdHVhbF9k YXRhdHlwZS4gIChJZiB5b3UgZG9uJ3Qgd2FudCB0aGlzIGJlaGF2aW9yLCBqdXN0IHBhc3MKICAq IEludmFsaWRPaWQgZm9yIGFjdHVhbF9kYXRhdHlwZS4pCiAgKi8KLXN0YXRpYyB2b2lkCit2b2lk CiBnZXRfb3BjbGFzc19uYW1lKE9pZCBvcGNsYXNzLCBPaWQgYWN0dWFsX2RhdGF0eXBlLAogCQkJ CSBTdHJpbmdJbmZvIGJ1ZikKIHsKQEAgLTExNzc4LDcgKzExODYyLDcgQEAgZ2VuZXJhdGVfcXVh bGlmaWVkX3JlbGF0aW9uX25hbWUoT2lkIHJlbGlkKQogICoKICAqIFRoZSByZXN1bHQgaW5jbHVk ZXMgYWxsIG5lY2Vzc2FyeSBxdW90aW5nIGFuZCBzY2hlbWEtcHJlZml4aW5nLgogICovCi1zdGF0 aWMgY2hhciAqCitjaGFyICoKIGdlbmVyYXRlX2Z1bmN0aW9uX25hbWUoT2lkIGZ1bmNpZCwgaW50 IG5hcmdzLCBMaXN0ICphcmduYW1lcywgT2lkICphcmd0eXBlcywKIAkJCQkJICAgYm9vbCBoYXNf dmFyaWFkaWMsIGJvb2wgKnVzZV92YXJpYWRpY19wLAogCQkJCQkgICBQYXJzZUV4cHJLaW5kIHNw ZWNpYWxfZXhwcmtpbmQpCkBAIC0xMjE2NCw3ICsxMjI0OCw3IEBAIGdldF9yZWxvcHRpb25zKFN0 cmluZ0luZm8gYnVmLCBEYXR1bSByZWxvcHRpb25zKQogLyoKICAqIEdlbmVyYXRlIGEgQyBzdHJp bmcgcmVwcmVzZW50aW5nIGEgcmVsYXRpb24ncyByZWxvcHRpb25zLCBvciBOVUxMIGlmIG5vbmUu CiAgKi8KLXN0YXRpYyBjaGFyICoKK2NoYXIgKgogZmxhdHRlbl9yZWxvcHRpb25zKE9pZCByZWxp ZCkKIHsKIAljaGFyCSAgICpyZXN1bHQgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv Y2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKaW5k ZXggNjhiYjAzMmQzZS4uMmM4NzEwNmVlZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxv Zy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CkBAIC0x MTgyMyw0ICsxMTgyMywxMCBAQAogICBwcm9yZXR0eXBlID0+ICdieXRlYScsIHByb2FyZ3R5cGVz ID0+ICdwZ19icmluX21pbm1heF9tdWx0aV9zdW1tYXJ5JywKICAgcHJvc3JjID0+ICdicmluX21p bm1heF9tdWx0aV9zdW1tYXJ5X3NlbmQnIH0sCiAKK3sgb2lkID0+ICc0NjQyJywgZGVzY3IgPT4g J2RlcGFyc2UgdGhlIERETCBjb21tYW5kIGludG8ganNvbiBmb3JtYXQgc3RyaW5nJywKKyAgcHJv bmFtZSA9PiAnZGRsX2RlcGFyc2VfdG9fanNvbicsIHByb3JldHR5cGUgPT4gJ3RleHQnLAorICBw cm9hcmd0eXBlcyA9PiAncGdfZGRsX2NvbW1hbmQnLCBwcm9zcmMgPT4gJ2RkbF9kZXBhcnNlX3Rv X2pzb24nIH0sCit7IG9pZCA9PiAnNDY0MycsIGRlc2NyID0+ICdleHBhbmQganNvbiBmb3JtYXQg RERMIHRvIGEgcGxhaW4gRERMIGNvbW1hbmQnLAorICBwcm9uYW1lID0+ICdkZGxfZGVwYXJzZV9l eHBhbmRfY29tbWFuZCcsIHByb3JldHR5cGUgPT4gJ3RleHQnLAorICBwcm9hcmd0eXBlcyA9PiAn dGV4dCcsIHByb3NyYyA9PiAnZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQnIH0sCiBdCmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9zZXF1ZW5jZS5oIGIvc3JjL2luY2x1ZGUvY29t bWFuZHMvc2VxdWVuY2UuaAppbmRleCBiM2IwNGNjZmE5Li5jMmIxY2EzMmY2IDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9jb21tYW5kcy9zZXF1ZW5jZS5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1h bmRzL3NlcXVlbmNlLmgKQEAgLTU0LDYgKzU0LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgeGxfc2VxX3Jl YwogZXh0ZXJuIGludDY0IG5leHR2YWxfaW50ZXJuYWwoT2lkIHJlbGlkLCBib29sIGNoZWNrX3Bl cm1pc3Npb25zKTsKIGV4dGVybiBEYXR1bSBuZXh0dmFsKFBHX0ZVTkNUSU9OX0FSR1MpOwogZXh0 ZXJuIExpc3QgKnNlcXVlbmNlX29wdGlvbnMoT2lkIHJlbGlkKTsKK2V4dGVybiBGb3JtX3BnX3Nl cXVlbmNlX2RhdGEgZ2V0X3NlcXVlbmNlX3ZhbHVlcyhPaWQgc2VxdWVuY2VJZCk7CiAKIGV4dGVy biBPYmplY3RBZGRyZXNzIERlZmluZVNlcXVlbmNlKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQ3JlYXRl U2VxU3RtdCAqc2VxKTsKIGV4dGVybiBPYmplY3RBZGRyZXNzIEFsdGVyU2VxdWVuY2UoUGFyc2VT dGF0ZSAqcHN0YXRlLCBBbHRlclNlcVN0bXQgKnN0bXQpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvdGNvcC9kZGxfZGVwYXJzZS5oIGIvc3JjL2luY2x1ZGUvdGNvcC9kZGxfZGVwYXJzZS5oCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmJkZmRmNDdlMmYKLS0tIC9kZXYv bnVsbAorKysgYi9zcmMvaW5jbHVkZS90Y29wL2RkbF9kZXBhcnNlLmgKQEAgLTAsMCArMSwyMyBA QAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZGRsX2RlcGFyc2UuaAorICoKKyAqIFBvcnRp b25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVu dCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBV bml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBzcmMvaW5jbHVkZS90Y29wL2RkbF9kZXBh cnNlLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBERExfREVQQVJTRV9I CisjZGVmaW5lIERETF9ERVBBUlNFX0gKKworI2luY2x1ZGUgInRjb3AvZGVwYXJzZV91dGlsaXR5 LmgiCisKK2V4dGVybiBjaGFyICpkZXBhcnNlX3V0aWxpdHlfY29tbWFuZChDb2xsZWN0ZWRDb21t YW5kICpjbWQsIGJvb2wgdmVyYm9zZV9tb2RlKTsKK2V4dGVybiBjaGFyICpkZGxfZGVwYXJzZV9q c29uX3RvX3N0cmluZyhjaGFyICpqc29uYik7CitleHRlcm4gY2hhciAqZGVwYXJzZV9kcm9wX2Nv bW1hbmQoY29uc3QgY2hhciAqb2JqaWRlbnRpdHksIGNvbnN0IGNoYXIgKm9iamVjdHR5cGUsCisJ CQkJCQkJCSAgRHJvcEJlaGF2aW9yIGJlaGF2aW9yKTsKKworCisjZW5kaWYJCS8qIERETF9ERVBB UlNFX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5Lmgg Yi9zcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oCmluZGV4IDk0ZGUxM2Q5OTAuLmI1 MzI5NGJmNTcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmgK KysrIGIvc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaApAQCAtNjIsNiArNjIsNyBA QCB0eXBlZGVmIHN0cnVjdCBDb2xsZWN0ZWRDb21tYW5kCiAJCXsKIAkJCU9pZAkJCW9iamVjdElk OwogCQkJT2lkCQkJY2xhc3NJZDsKKwkJCWJvb2wJCXJld3JpdGU7CiAJCQlMaXN0CSAgICpzdWJj bWRzOwogCQl9CQkJYWx0ZXJUYWJsZTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMv YWNsY2hrX2ludGVybmFsLmggYi9zcmMvaW5jbHVkZS91dGlscy9hY2xjaGtfaW50ZXJuYWwuaApp bmRleCAzNjEyODRkOGViLi40ZTAyMGVmNGFlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGls cy9hY2xjaGtfaW50ZXJuYWwuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9hY2xjaGtfaW50ZXJu YWwuaApAQCAtMzksNiArMzksNyBAQCB0eXBlZGVmIHN0cnVjdAogCUxpc3QJICAgKmdyYW50ZWVz OwogCWJvb2wJCWdyYW50X29wdGlvbjsKIAlEcm9wQmVoYXZpb3IgYmVoYXZpb3I7CisJT2lkCQkJ Z3JhbnRvcl91aWQ7CiB9IEludGVybmFsR3JhbnQ7CiAKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvdXRpbHMvYnVpbHRpbnMuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL2J1aWx0aW5zLmgKaW5kZXgg ODE2MzFmMTY0NS4uNzE1MGZhYmQyNCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvYnVp bHRpbnMuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9idWlsdGlucy5oCkBAIC0xMTQsMTAgKzEx NCwxMiBAQCBleHRlcm4gRGF0dW0gbnVtZXJpY19mbG9hdDhfbm9fb3ZlcmZsb3coUEdfRlVOQ1RJ T05fQVJHUyk7CiAjZGVmaW5lIEZPUk1BVF9UWVBFX0ZPUkNFX1FVQUxJRlkJMHgwNAkvKiBmb3Jj ZSBxdWFsaWZpY2F0aW9uIG9mIHR5cGUgKi8KICNkZWZpbmUgRk9STUFUX1RZUEVfSU5WQUxJRF9B U19OVUxMCTB4MDgJLyogTlVMTCBpZiB1bmRlZmluZWQgKi8KIGV4dGVybiBjaGFyICpmb3JtYXRf dHlwZV9leHRlbmRlZChPaWQgdHlwZV9vaWQsIGludDMyIHR5cGVtb2QsIGJpdHMxNiBmbGFncyk7 CitleHRlcm4gY2hhciAqZm9ybWF0X3Byb2NlZHVyZV9hcmdzKE9pZCBwcm9jZWR1cmVfb2lkLCBi b29sIGZvcmNlX3F1YWxpZnkpOwogCiBleHRlcm4gY2hhciAqZm9ybWF0X3R5cGVfYmUoT2lkIHR5 cGVfb2lkKTsKIGV4dGVybiBjaGFyICpmb3JtYXRfdHlwZV9iZV9xdWFsaWZpZWQoT2lkIHR5cGVf b2lkKTsKIGV4dGVybiBjaGFyICpmb3JtYXRfdHlwZV93aXRoX3R5cGVtb2QoT2lkIHR5cGVfb2lk LCBpbnQzMiB0eXBlbW9kKTsKK2V4dGVybiBjaGFyICpwcmludFR5cG1vZChjb25zdCBjaGFyICp0 eXBuYW1lLCBpbnQzMiB0eXBtb2QsIE9pZCB0eXBtb2RvdXQpOwogCiBleHRlcm4gaW50MzIgdHlw ZV9tYXhpbXVtX3NpemUoT2lkIHR5cGVfb2lkLCBpbnQzMiB0eXBlbW9kKTsKIApkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvdXRpbHMvcnVsZXV0aWxzLmggYi9zcmMvaW5jbHVkZS91dGlscy9ydWxl dXRpbHMuaAppbmRleCA3ZDQ4OTcxOGEzLi4zY2JjYTQ4Zjg1IDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS91dGlscy9ydWxldXRpbHMuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9ydWxldXRpbHMu aApAQCAtMTMsNiArMTMsNyBAQAogI2lmbmRlZiBSVUxFVVRJTFNfSAogI2RlZmluZSBSVUxFVVRJ TFNfSAogCisjaW5jbHVkZSAiY2F0YWxvZy9wZ190cmlnZ2VyLmgiCiAjaW5jbHVkZSAibm9kZXMv bm9kZXMuaCIKICNpbmNsdWRlICJub2Rlcy9wYXJzZW5vZGVzLmgiCiAjaW5jbHVkZSAibm9kZXMv cGdfbGlzdC5oIgpAQCAtMjMsMTIgKzI0LDE5IEBAIHN0cnVjdCBQbGFubmVkU3RtdDsKIAogZXh0 ZXJuIGNoYXIgKnBnX2dldF9pbmRleGRlZl9zdHJpbmcoT2lkIGluZGV4cmVsaWQpOwogZXh0ZXJu IGNoYXIgKnBnX2dldF9pbmRleGRlZl9jb2x1bW5zKE9pZCBpbmRleHJlbGlkLCBib29sIHByZXR0 eSk7CitleHRlcm4gY2hhciAqcGdfZ2V0X3RyaWdnZXJfd2hlbmNsYXVzZShGb3JtX3BnX3RyaWdn ZXIgdHJpZ3JlYywKKwkJCQkJCQkJCSAgIE5vZGUgKndoZW5DbGF1c2UsIGJvb2wgcHJldHR5KTsK IGV4dGVybiBjaGFyICpwZ19nZXRfcXVlcnlkZWYoUXVlcnkgKnF1ZXJ5LCBib29sIHByZXR0eSk7 CiAKIGV4dGVybiBjaGFyICpwZ19nZXRfcGFydGtleWRlZl9jb2x1bW5zKE9pZCByZWxpZCwgYm9v bCBwcmV0dHkpOworZXh0ZXJuIGNoYXIgKnBnX2dldF9wYXJ0a2V5ZGVmX3NpbXBsZShPaWQgcmVs aWQpOwogZXh0ZXJuIGNoYXIgKnBnX2dldF9wYXJ0Y29uc3RyZGVmX3N0cmluZyhPaWQgcGFydGl0 aW9uSWQsIGNoYXIgKmFsaWFzbmFtZSk7CiAKIGV4dGVybiBjaGFyICpwZ19nZXRfY29uc3RyYWlu dGRlZl9jb21tYW5kKE9pZCBjb25zdHJhaW50SWQpOworZXh0ZXJuIGNoYXIgKnBnX2dldF9jb25z dHJhaW50ZGVmX2NvbW1hbmRfc2ltcGxlKE9pZCBjb25zdHJhaW50SWQpOworZXh0ZXJuIHZvaWQg cGdfZ2V0X3J1bGVkZWZfZGV0YWlsZWQoRGF0dW0gZXZfcXVhbCwgRGF0dW0gZXZfYWN0aW9uLAor CQkJCQkJCQkgICBjaGFyICoqd2hlcmVDbGF1c2UsIExpc3QgKiphY3Rpb25zKTsKKwogZXh0ZXJu IGNoYXIgKmRlcGFyc2VfZXhwcmVzc2lvbihOb2RlICpleHByLCBMaXN0ICpkcGNvbnRleHQsCiAJ CQkJCQkJCWJvb2wgZm9yY2VwcmVmaXgsIGJvb2wgc2hvd2ltcGxpY2l0KTsKIGV4dGVybiBMaXN0 ICpkZXBhcnNlX2NvbnRleHRfZm9yKGNvbnN0IGNoYXIgKmFsaWFzbmFtZSwgT2lkIHJlbGlkKTsK QEAgLTQwLDggKzQ4LDE2IEBAIGV4dGVybiBMaXN0ICpzZWxlY3RfcnRhYmxlX25hbWVzX2Zvcl9l eHBsYWluKExpc3QgKnJ0YWJsZSwKIAkJCQkJCQkJCQkJIEJpdG1hcHNldCAqcmVsc191c2VkKTsK IGV4dGVybiBjaGFyICpnZW5lcmF0ZV9jb2xsYXRpb25fbmFtZShPaWQgY29sbGlkKTsKIGV4dGVy biBjaGFyICpnZW5lcmF0ZV9vcGNsYXNzX25hbWUoT2lkIG9wY2xhc3MpOworZXh0ZXJuIGNoYXIg KmdlbmVyYXRlX2Z1bmN0aW9uX25hbWUoT2lkIGZ1bmNpZCwgaW50IG5hcmdzLCBMaXN0ICphcmdu YW1lcywKKwkJCQkJCQkJCU9pZCAqYXJndHlwZXMsIGJvb2wgaGFzX3ZhcmlhZGljLAorCQkJCQkJ CQkJYm9vbCAqdXNlX3ZhcmlhZGljX3AsCisJCQkJCQkJCQlQYXJzZUV4cHJLaW5kIHNwZWNpYWxf ZXhwcmtpbmQpOwogZXh0ZXJuIGNoYXIgKmdldF9yYW5nZV9wYXJ0Ym91bmRfc3RyaW5nKExpc3Qg KmJvdW5kX2RhdHVtcyk7CitleHRlcm4gdm9pZCBnZXRfb3BjbGFzc19uYW1lKE9pZCBvcGNsYXNz LCBPaWQgYWN0dWFsX2RhdGF0eXBlLAorCQkJCQkJCSAgU3RyaW5nSW5mbyBidWYpOworZXh0ZXJu IGNoYXIgKmZsYXR0ZW5fcmVsb3B0aW9ucyhPaWQgcmVsaWQpOwogCiBleHRlcm4gY2hhciAqcGdf Z2V0X3N0YXRpc3RpY3NvYmpkZWZfc3RyaW5nKE9pZCBzdGF0ZXh0aWQpOworZXh0ZXJuIHZvaWQg cHJpbnRfZnVuY3Rpb25fc3FsYm9keShTdHJpbmdJbmZvIGJ1ZiwgSGVhcFR1cGxlIHByb2N0dXAp OwogCiAjZW5kaWYJCQkJCQkJLyogUlVMRVVUSUxTX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvb2JqZWN0X2FkZHJlc3Mub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9vYmplY3RfYWRkcmVzcy5vdXQKaW5kZXggMzU0OWI2M2E3OS4uM2M0Y2I3YjMzNiAx MDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9vYmplY3RfYWRkcmVzcy5vdXQK KysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9vYmplY3RfYWRkcmVzcy5vdXQKQEAgLTQ5 MCw3ICs0OTAsNyBAQCBTRUxFQ1QgKHBnX2lkZW50aWZ5X29iamVjdChhZGRyMS5jbGFzc2lkLCBh ZGRyMS5vYmppZCwgYWRkcjEub2Jqc3ViaWQpKS4qLAogIHBvbGljeSAgICAgICAgICAgICAgICAg ICAgfCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgfCBnZW5wb2wgb24gYWRkcl9uc3Au Z2VudGFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHQKICBz dGF0aXN0aWNzIG9iamVjdCAgICAgICAgIHwgYWRkcl9uc3AgICB8IGdlbnRhYmxlX3N0YXQgICAg IHwgYWRkcl9uc3AuZ2VudGFibGVfc3RhdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfCB0CiAgY29sbGF0aW9uICAgICAgICAgICAgICAgICB8IHBnX2NhdGFs b2cgfCAiZGVmYXVsdCIgICAgICAgICB8IHBnX2NhdGFsb2cuImRlZmF1bHQiICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdAotIHRyYW5zZm9ybSAgICAg ICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgfCBmb3IgaW50ZWdl ciBvbiBsYW5ndWFnZSBzcWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8IHQKKyB0cmFuc2Zvcm0gICAgICAgICAgICAgICAgIHwgICAgICAgICAgICB8ICAgICAgICAg ICAgICAgICAgIHwgZm9yIGludGVnZXIgbGFuZ3VhZ2Ugc3FsICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfCB0CiAgdGV4dCBzZWFyY2ggZGljdGlvbmFyeSAgICB8 IGFkZHJfbnNwICAgfCBhZGRyX3RzX2RpY3QgICAgICB8IGFkZHJfbnNwLmFkZHJfdHNfZGljdCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdAogIHRleHQg c2VhcmNoIHBhcnNlciAgICAgICAgfCBhZGRyX25zcCAgIHwgYWRkcl90c19wcnMgICAgICAgfCBh ZGRyX25zcC5hZGRyX3RzX3BycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB8IHQKICB0ZXh0IHNlYXJjaCBjb25maWd1cmF0aW9uIHwgYWRkcl9uc3AgICB8 IGFkZHJfdHNfY29uZiAgICAgIHwgYWRkcl9uc3AuYWRkcl90c19jb25mICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0CmRpZmYgLS1naXQgYS9zcmMvdG9v bHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5s aXN0CmluZGV4IDk3YzliYzE4NjEuLmVmMTY4Njk0YTEgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9w Z2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5s aXN0CkBAIC0xNjEwLDYgKzE2MTAsOSBAQCBPU0luZm8KIE9TU0xDaXBoZXIKIE9TU0xEaWdlc3QK IE9WRVJMQVBQRUQKK09iakVsZW0KK09ialRyZWUKK09ialR5cGUKIE9iamVjdEFjY2Vzc0Ryb3AK IE9iamVjdEFjY2Vzc05hbWVzcGFjZVNlYXJjaAogT2JqZWN0QWNjZXNzUG9zdEFsdGVyCkBAIC0z MTc2LDYgKzMxNzksNyBAQCBjb2xvcm1hcHJhbmdlCiBjb21wYXJlX2NvbnRleHQKIGNvbmZpZ192 YXJfdmFsdWUKIGNvbnRhaW5fYWdnc19vZl9sZXZlbF9jb250ZXh0Citjb252U3BlY2lmaWVyCiBj b252ZXJ0X3Rlc3RleHByX2NvbnRleHQKIGNvcHlfZGF0YV9zb3VyY2VfY2IKIGNvcmVfWVlTVFlQ RQotLSAKMi4zNy4xCgo= --0000000000001ced0705ea68bc1e--