From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05on2077.outbound.protection.outlook.com [40.107.22.77]) by sourceware.org (Postfix) with ESMTPS id 7A10B3858C2C for ; Mon, 20 Dec 2021 16:19:06 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 7A10B3858C2C Received: from DBBPR09CA0014.eurprd09.prod.outlook.com (2603:10a6:10:c0::26) by AM0PR08MB4532.eurprd08.prod.outlook.com (2603:10a6:208:145::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4801.14; Mon, 20 Dec 2021 16:18:53 +0000 Received: from DB5EUR03FT047.eop-EUR03.prod.protection.outlook.com (2603:10a6:10:c0:cafe::ea) by DBBPR09CA0014.outlook.office365.com (2603:10a6:10:c0::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4801.15 via Frontend Transport; Mon, 20 Dec 2021 16:18:53 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 63.35.35.123 as permitted sender) receiver=protection.outlook.com; client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com; Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by DB5EUR03FT047.mail.protection.outlook.com (10.152.21.232) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4801.14 via Frontend Transport; Mon, 20 Dec 2021 16:18:53 +0000 Received: ("Tessian outbound dbb52aec1fa6:v110"); Mon, 20 Dec 2021 16:18:53 +0000 X-CR-MTA-TID: 64aa7808 Received: from c6d68a40fc74.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 8D9FD4F1-A788-4B53-9A5B-15F440364B26.1; Mon, 20 Dec 2021 16:18:43 +0000 Received: from EUR05-VI1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id c6d68a40fc74.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Mon, 20 Dec 2021 16:18:43 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=X6cyKNSfG7IdRCss5j1DbwkbEBxtnp3FZ5FWORoygCP69nL8m95efd/K85nNb+He0Wk3YacdNN/4VS4Hy7bONys3lQz2f5eiXB1nHgS2vAACpdE6uegc1DFRExLYTbfS5N+JaS3S1iTTYkVw3kM5Zxh09GraNgxol4AnEwA8fMWOanxM2Zla7G+s+lA4Kg5PA2skXNryoZ4wdouaUdVs02nOfVG3CBOA3MtI5CmOkHbKQhl1Zgbe1XbMI0GodSn9gIF0p/hze7aTqElgRTjIMdXqhjV81GmBdV2tZc1l5hx/VkcGxEtrBjF25WBzHpGFVkB4JEoVsLuqVBrFnymMLQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=07omUkd0OS0rzkakdo//PlAahm9fwBKT3oT23iGTnUc=; b=fLzD9ru+4WQECRk3FsrWDbQgYJC/U6uBhu7n/ltSfDT5o3E1ZTbGwqX0Erl5+siB7tlpI1Eq2vFh1MGXPnuMRz9gNs6dTAuOhhqg4YwlIuhIc+xjNk0EZZxMZPdksQu9R4Lvb2RmyZUNYiigXGU0QdTcyfzk3fuwIvrikY1qhWbCg0T32/3Q08zRtyjEMgUHodGlYtrpQ526O3ccJIVPT5rIqKTxPcFTV6J4H6yWwUhFDtag9Wbk+49c9UPhQf4EEltoZ0diY33dMW4jIustuP34GJ1TkQHw/enfLxbxtW2u77vsJrdYbGRm2LN1duK2Na1+iiTPis8GhAfHbG4aLQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none Received: from VI1PR08MB5325.eurprd08.prod.outlook.com (2603:10a6:803:13e::17) by VI1PR08MB5454.eurprd08.prod.outlook.com (2603:10a6:803:13d::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4801.17; Mon, 20 Dec 2021 16:18:40 +0000 Received: from VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::12a:3d2c:81ff:8fcc]) by VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::12a:3d2c:81ff:8fcc%8]) with mapi id 15.20.4801.020; Mon, 20 Dec 2021 16:18:40 +0000 From: Tamar Christina To: Richard Sandiford , Tamar Christina via Gcc-patches CC: nd , "rguenther@suse.de" Subject: RE: [1/3 PATCH]middle-end vect: Simplify and extend the complex numbers validation routines. Thread-Topic: [1/3 PATCH]middle-end vect: Simplify and extend the complex numbers validation routines. Thread-Index: AQHX81yyTX7caeP4fkGHr6UvLPoJkKw23OxJgAS2YFA= Date: Mon, 20 Dec 2021 16:18:40 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: x-ts-tracking-id: B75447A5E3ADCA4F9FD02FCDE06B63DC.0 x-checkrecipientchecked: true Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; X-MS-Office365-Filtering-Correlation-Id: c6e5ae3b-cc69-4ecc-3c67-08d9c3d46a9a x-ms-traffictypediagnostic: VI1PR08MB5454:EE_|DB5EUR03FT047:EE_|AM0PR08MB4532:EE_ X-Microsoft-Antispam-PRVS: x-checkrecipientrouted: true nodisclaimer: true x-ms-oob-tlc-oobclassifiers: OLM:9508;OLM:9508; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: 2UJ3TaXXeZ2QlLcuR1YCZsNqM98e6Q0rI1NTwJKD8QJLakumBX2Gl6hoTd7LMS9L2NHazVHxGL1JmM8CCMenSwngWLYXzjwqN3QoeL4Jj9MVOjGzwc1hZO1oJiXnu0tzlehuXq9PHRzqwfA7qJbRTLG5yafKhgiHdhI8SHkFMceeoXgNKUxbAeExLCyWycX1jpXlywPzDsZBmDxpE2Gn/wLU8zNNGZLAixGQZNwjIXOgZ6sEtqOw7e9bFGVGaD1csGVonFaCEgf0ycm/kAPmQrTS6eY601ZpjlS10j1dvYXL2/4cnxe8an9VC2Zpffiu10nNIbSZj3cDEzCfzQuId5TlXdXDsQsfmdVMJv+tkleHhqrsZyzMBqjxfyBO8R07zxtez/V++qgcSuUUlC90n+zYiblm0ngu/eCBJxLw650ELvhJGsZNRuNrvRCkYDZ6qB/Q/6bphIpW4uIXnnxBLxjOeiQ12A/+tBO8QD3MAtDMbct0AGXxWfEsjVjFPG53LNVLGuC6QLDwsDxJ5B/JClfE+SQzy3z5KIOxr3XEOe7yLrO3/szBqSZ/YQB5z7AYsBsUgc7bU8HL7O/U0dbRmSqzqeWsKV81PVQZ62gaRHoH/fnCvrq5kONFsGrI5odGlPni8DoPAmJ+e/4Fk9aCF+eLR+oKjPYWbp3fwRl/+LcVCDFzmixrccFjpESawYKTrX0uvhiR8QZnLvnY/pjPJeaxC5Jdkr3IOj7o5Anfho0nVcWh/hiecfDgAULaHePYicExb/7OyE7/as9en8C3pm9y8uEkqA/OTOg6j7FhSlnLIDxatVwd5vz/+q3hzP3zZSjMf1+b4JpG42DHsfZUQQ== X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:VI1PR08MB5325.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(5660300002)(54906003)(316002)(38070700005)(110136005)(53546011)(6506007)(83380400001)(7696005)(2906002)(86362001)(4326008)(55016003)(84970400001)(99936003)(66556008)(38100700002)(122000001)(66476007)(66446008)(64756008)(33656002)(508600001)(52536014)(66946007)(8676002)(186003)(8936002)(71200400001)(26005)(76116006)(30864003)(9686003)(559001)(579004); DIR:OUT; SFP:1101; Content-Type: multipart/mixed; boundary="_002_VI1PR08MB5325E4E7FC25F1ECF90FC1E1FF7B9VI1PR08MB5325eurp_" MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR08MB5454 Original-Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DB5EUR03FT047.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: d3fde12a-6b65-4eb5-88cc-08d9c3d4627f X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: jWYxFTj7juiDSN8pTddEGxlcZZ0emGPTStM8mF4PL7S1xcVIGhesNEbmOff2WrFckQc8rV1zhB7Gd73o5NaJrpGxBS4h22BueickkPPYGXI0LuGic5ChRqhSoG6+9SUyC8BaNWIzko0r9EGivRt1EmRdwa/jvZXdMT4caGEmjjxRePiN+N3KhhpsNfwMOlluLgetd+pWhIadPfkOH1YJObV1IVQ9Qxl+z1es4oIQXYtfzxBH0LZ9WYiTBCZJdflOA6xsOzzPnLNmKsjm3aIjxVxfJhYVfDf6B/ajA1iVTGZ7qrCslYfgG05SVakM7OB3DmJqw0Ul4U59D+1WRZrF7fmNWouzGvwK+ellUDie2A6HmAma70Pd5JaSciIh/Zd+7sB57fb9piORo5pjuE1ZgN7GfSSfIYz5Ee9oMtKlNQg+0DETrI+K7Kknhvp1J9I1x6jD2yAZwVVx4p2CZhWorLWXyiJw6IzhS1ekrb3Go0r3pAu26H/whSekAI/hYG/7rnBYybWvrRScIsDIX+G3+nOH9CFyqsMxTHxyHG9HOG6juU3TxjZkmn2Ao4IMBugPnNN4+zX/Bsvq2POKzUXfsw2R+3Bui7+gp+sFj0xcwMYDHOhNHXP16pEsZbhisY09LZcvl/LkNRY8VqwgHyA/ke2RaWqsMEFxo1DzGFLr9uUrwuQkFvwWr/fBrP7sXbY4dfF0hKG1YcSunbjz/ge7wajS350+VPuJ0mqVKuH26DjHMizAtMYG7HXVT1Dddp7nhQPk7Jj8gJjWjYT1NlMM4sa0I09BSlkILwzZdOP09ANDc4sMqfKdkye7L4UprGOmsDisf95YAaEIB6JnRp8IFrs4M1qe92Sa4/PROipobJmEih/KfvWcEbX7D1h2sgmN X-Forefront-Antispam-Report: CIP:63.35.35.123; CTRY:IE; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:64aa7808-outbound-1.mta.getcheckrecipient.com; PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com; CAT:NONE; SFS:(4636009)(46966006)(36840700001)(40470700001)(508600001)(54906003)(52536014)(356005)(70586007)(107886003)(70206006)(33964004)(110136005)(40460700001)(83380400001)(84970400001)(26005)(7696005)(336012)(2906002)(47076005)(55016003)(82310400004)(6506007)(53546011)(86362001)(186003)(4326008)(30864003)(81166007)(8936002)(5660300002)(33656002)(8676002)(99936003)(235185007)(36860700001)(316002)(9686003)(579004); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Dec 2021 16:18:53.8526 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: c6e5ae3b-cc69-4ecc-3c67-08d9c3d46a9a X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[63.35.35.123]; Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com] X-MS-Exchange-CrossTenant-AuthSource: DB5EUR03FT047.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR08MB4532 X-Spam-Status: No, score=-13.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, GIT_PATCH_0, KAM_LOTSOFHASH, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_PASS, TXREP, UNPARSEABLE_RELAY autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 20 Dec 2021 16:19:12 -0000 --_002_VI1PR08MB5325E4E7FC25F1ECF90FC1E1FF7B9VI1PR08MB5325eurp_ Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogUmljaGFyZCBTYW5kaWZv cmQgPHJpY2hhcmQuc2FuZGlmb3JkQGFybS5jb20+DQo+IFNlbnQ6IEZyaWRheSwgRGVjZW1iZXIg MTcsIDIwMjEgNDoxOSBQTQ0KPiBUbzogVGFtYXIgQ2hyaXN0aW5hIHZpYSBHY2MtcGF0Y2hlcyA8 Z2NjLXBhdGNoZXNAZ2NjLmdudS5vcmc+DQo+IENjOiBUYW1hciBDaHJpc3RpbmEgPFRhbWFyLkNo cmlzdGluYUBhcm0uY29tPjsgbmQgPG5kQGFybS5jb20+Ow0KPiByZ3VlbnRoZXJAc3VzZS5kZQ0K PiBTdWJqZWN0OiBSZTogWzEvMyBQQVRDSF1taWRkbGUtZW5kIHZlY3Q6IFNpbXBsaWZ5IGFuZCBl eHRlbmQgdGhlIGNvbXBsZXgNCj4gbnVtYmVycyB2YWxpZGF0aW9uIHJvdXRpbmVzLg0KPiANCj4g SnVzdCBhIGNvbW1lbnQgb24gdGhlIGRvY3VtZW50YXRpb246DQo+IA0KPiBUYW1hciBDaHJpc3Rp bmEgdmlhIEdjYy1wYXRjaGVzIDxnY2MtcGF0Y2hlc0BnY2MuZ251Lm9yZz4gd3JpdGVzOg0KPiA+ IGRpZmYgLS1naXQgYS9nY2MvZG9jL21kLnRleGkgYi9nY2MvZG9jL21kLnRleGkgaW5kZXgNCj4g Pg0KPiA5ZWMwNTFlOTRlMTBjY2E5ZWVjMjc3M2UxYjhjMDFiNzRiNmVhNGRiLi42MGRjNWIzZWE2 MDg3YzI4MjRhZDE0NjcNCj4gYmM2Ng0KPiA+IGU5Y2ZlYmU5ZGNmYyAxMDA2NDQNCj4gPiAtLS0g YS9nY2MvZG9jL21kLnRleGkNCj4gPiArKysgYi9nY2MvZG9jL21kLnRleGkNCj4gPiBAQCAtNjMy NSwxMiArNjMyNSwxMiBAQCBQZXJmb3JtIGEgdmVjdG9yIG11bHRpcGx5IGFuZCBhY2N1bXVsYXRl IHRoYXQNCj4gPiBpcyBzZW1hbnRpY2FsbHkgdGhlIHNhbWUgYXMgIGEgbXVsdGlwbHkgYW5kIGFj Y3VtdWxhdGUgb2YgY29tcGxleCBudW1iZXJzLg0KPiA+DQo+ID4gIEBzbWFsbGV4YW1wbGUNCj4g PiAtICBjb21wbGV4IFRZUEUgY1tOXTsNCj4gPiAtICBjb21wbGV4IFRZUEUgYVtOXTsNCj4gPiAt ICBjb21wbGV4IFRZUEUgYltOXTsNCj4gPiArICBjb21wbGV4IFRZUEUgb3AwW05dOw0KPiA+ICsg IGNvbXBsZXggVFlQRSBvcDFbTl07DQo+ID4gKyAgY29tcGxleCBUWVBFIG9wMltOXTsNCj4gPiAg ICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkgKz0gMSkNCj4gPiAgICAgIEB7DQo+ID4gLSAgICAg IGNbaV0gKz0gYVtpXSAqIGJbaV07DQo+ID4gKyAgICAgIG9wMltpXSArPSBvcDFbaV0gKiBvcDJb aV07DQo+ID4gICAgICBAfQ0KPiANCj4gSSB0aGluayB0aGlzIHNob3VsZCBiZToNCj4gDQo+ICAg b3AwW2ldID0gb3AxW2ldICogb3AyW2ldICsgb3AzW2ldOw0KPiANCj4gc2luY2Ugb3BlcmFuZCAw IGlzIHRoZSBvdXRwdXQgYW5kIG9wZXJhbmQgMyBpcyB0aGUgYWNjdW11bGF0b3IgaW5wdXQuDQo+ IA0KPiBTYW1lIGlkZWEgZm9yIHRoZSBvdGhlcnMuICBGb3I6DQo+IA0KPiA+IEBAIC02NDE1LDEy ICs2NDE1LDEyIEBAIFBlcmZvcm0gYSB2ZWN0b3IgbXVsdGlwbHkgdGhhdCBpcyBzZW1hbnRpY2Fs bHkNCj4gPiB0aGUgc2FtZSBhcyBtdWx0aXBseSBvZiAgY29tcGxleCBudW1iZXJzLg0KPiA+DQo+ ID4gIEBzbWFsbGV4YW1wbGUNCj4gPiAtICBjb21wbGV4IFRZUEUgY1tOXTsNCj4gPiAtICBjb21w bGV4IFRZUEUgYVtOXTsNCj4gPiAtICBjb21wbGV4IFRZUEUgYltOXTsNCj4gPiArICBjb21wbGV4 IFRZUEUgb3AwW05dOw0KPiA+ICsgIGNvbXBsZXggVFlQRSBvcDFbTl07DQo+ID4gKyAgY29tcGxl eCBUWVBFIG9wMltOXTsNCj4gPiAgICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkgKz0gMSkNCj4g PiAgICAgIEB7DQo+ID4gLSAgICAgIGNbaV0gPSBhW2ldICogYltpXTsNCj4gPiArICAgICAgb3Ay W2ldID0gb3AwW2ldICogb3AxW2ldOw0KPiANCj4g4oCmdGhpcyBJIHRoaW5rIGl0IHNob3VsZCBi ZToNCj4gDQo+ICAgb3AwW2ldID0gb3AxW2ldICogb3AyW2ldOw0KDQpVcGRhdGVkIHBhdGNoIGF0 dGFjaGVkLg0KDQpCb290c3RyYXBwZWQgUmVndGVzdGVkIG9uIGFhcmNoNjQtbm9uZS1saW51eC1n bnUsDQp4ODZfNjQtcGMtbGludXgtZ251IGFuZCBubyByZWdyZXNzaW9ucy4NCg0KT2sgZm9yIG1h c3Rlcj8gYW5kIGJhY2twb3J0IHRvIEdDQyAxMSBhZnRlciBzb21lIHN0ZXc/DQoNClRoYW5rcywN ClRhbWFyDQoNCmdjYy9DaGFuZ2VMb2c6DQoNCglQUiB0cmVlLW9wdGltaXphdGlvbi8xMDI4MTkN CglQUiB0cmVlLW9wdGltaXphdGlvbi8xMDMxNjkNCgkqIGRvYy9tZC50ZXhpOiBVcGRhdGUgZG9j cyBmb3IgY2ZtcywgY2ZtYS4NCgkqIHRyZWUtZGF0YS1yZWYuaCAoc2FtZV9kYXRhX3JlZnMpOiBB Y2NlcHQgb3B0aW9uYWwgb2Zmc2V0Lg0KCSogdHJlZS12ZWN0LXNscC1wYXR0ZXJucy5jIChpc19s aW5lYXJfbG9hZF9wKTogRml4IGlzc3VlIHdpdGggcmVwZWF0aW5nDQoJcGF0dGVybnMuDQoJKHZl Y3Rfbm9ybWFsaXplX2NvbmpfbG9jKTogUmVtb3ZlLg0KCShpc19lcV9vcl90b3ApOiBDaGFuZ2Ug dG8gdGFrZSB0d28gbm9kZXMuDQoJKGVudW0gX2Nvbmpfc3RhdHVzLCBjb21wYXRpYmxlX2NvbXBs ZXhfbm9kZXNfcCwNCgl2ZWN0X3ZhbGlkYXRlX211bHRpcGxpY2F0aW9uKTogTmV3Lg0KCShjbGFz cyBjb21wbGV4X2FkZF9wYXR0ZXJuLCBjb21wbGV4X2FkZF9wYXR0ZXJuOjptYXRjaGVzLA0KCWNv bXBsZXhfYWRkX3BhdHRlcm46OnJlY29nbml6ZSwgY2xhc3MgY29tcGxleF9tdWxfcGF0dGVybiwN Cgljb21wbGV4X211bF9wYXR0ZXJuOjpyZWNvZ25pemUsIGNsYXNzIGNvbXBsZXhfZm1zX3BhdHRl cm4sDQoJY29tcGxleF9mbXNfcGF0dGVybjo6cmVjb2duaXplLCBjbGFzcyBjb21wbGV4X29wZXJh dGlvbnNfcGF0dGVybiwNCgljb21wbGV4X29wZXJhdGlvbnNfcGF0dGVybjo6cmVjb2duaXplLCBh ZGRzdWJfcGF0dGVybjo6cmVjb2duaXplKTogUGFzcw0KCW5ldyBjYWNoZS4NCgkoY29tcGxleF9m bXNfcGF0dGVybjo6bWF0Y2hlcywgY29tcGxleF9tdWxfcGF0dGVybjo6bWF0Y2hlcyk6IFBhc3Mg bmV3DQoJY2FjaGUgYW5kIHVzZSBuZXcgdmFsaWRhdGlvbiBjb2RlLg0KCSogdHJlZS12ZWN0LXNs cC5jICh2ZWN0X21hdGNoX3NscF9wYXR0ZXJuc18yLCB2ZWN0X21hdGNoX3NscF9wYXR0ZXJucywN Cgl2ZWN0X2FuYWx5emVfc2xwKTogUGFzcyBhbG9uZyBjYWNoZS4NCgkoY29tcGF0aWJsZV9jYWxs c19wKTogRXhwb3NlLg0KCSogdHJlZS12ZWN0b3JpemVyLmggKGNvbXBhdGlibGVfY2FsbHNfcCwg c2xwX25vZGVfaGFzaCwNCglzbHBfY29tcGF0X25vZGVzX21hcF90KTogTmV3Lg0KCShjbGFzcyB2 ZWN0X3BhdHRlcm4pOiBVcGRhdGUgc2lnbmF0dXJlcyBpbmNsdWRlIG5ldyBjYWNoZS4NCg0KZ2Nj L3Rlc3RzdWl0ZS9DaGFuZ2VMb2c6DQoNCglQUiB0cmVlLW9wdGltaXphdGlvbi8xMDI4MTkNCglQ UiB0cmVlLW9wdGltaXphdGlvbi8xMDMxNjkNCgkqIGcrKy5kZy92ZWN0L3ByOTkxNDkuY2M6IHhm YWlsIGZvciBub3cuDQoJKiBnY2MuZGcvdmVjdC9jb21wbGV4L3ByMTAyODE5LTEuYzogTmV3IHRl c3QuDQoJKiBnY2MuZGcvdmVjdC9jb21wbGV4L3ByMTAyODE5LTIuYzogTmV3IHRlc3QuDQoJKiBn Y2MuZGcvdmVjdC9jb21wbGV4L3ByMTAyODE5LTMuYzogTmV3IHRlc3QuDQoJKiBnY2MuZGcvdmVj dC9jb21wbGV4L3ByMTAyODE5LTQuYzogTmV3IHRlc3QuDQoJKiBnY2MuZGcvdmVjdC9jb21wbGV4 L3ByMTAyODE5LTUuYzogTmV3IHRlc3QuDQoJKiBnY2MuZGcvdmVjdC9jb21wbGV4L3ByMTAyODE5 LTYuYzogTmV3IHRlc3QuDQoJKiBnY2MuZGcvdmVjdC9jb21wbGV4L3ByMTAyODE5LTcuYzogTmV3 IHRlc3QuDQoJKiBnY2MuZGcvdmVjdC9jb21wbGV4L3ByMTAyODE5LTguYzogTmV3IHRlc3QuDQoJ KiBnY2MuZGcvdmVjdC9jb21wbGV4L3ByMTAyODE5LTkuYzogTmV3IHRlc3QuDQoJKiBnY2MuZGcv dmVjdC9jb21wbGV4L3ByMTAzMTY5LmM6IE5ldyB0ZXN0Lg0KDQotLS0gaW5saW5lIGNvcHkgb2Yg cGF0Y2ggLS0tDQoNCmRpZmYgLS1naXQgYS9nY2MvZG9jL21kLnRleGkgYi9nY2MvZG9jL21kLnRl eGkNCmluZGV4IDllYzA1MWU5NGUxMGNjYTllZWMyNzczZTFiOGMwMWI3NGI2ZWE0ZGIuLmFkMDZi MDJkMzY4NzYwODJhZmU0YzNmM2ZiNTE4ODdmN2E1MjJiMjMgMTAwNjQ0DQotLS0gYS9nY2MvZG9j L21kLnRleGkNCisrKyBiL2djYy9kb2MvbWQudGV4aQ0KQEAgLTYzMjUsMTIgKzYzMjUsMTMgQEAg UGVyZm9ybSBhIHZlY3RvciBtdWx0aXBseSBhbmQgYWNjdW11bGF0ZSB0aGF0IGlzIHNlbWFudGlj YWxseSB0aGUgc2FtZSBhcw0KIGEgbXVsdGlwbHkgYW5kIGFjY3VtdWxhdGUgb2YgY29tcGxleCBu dW1iZXJzLg0KIA0KIEBzbWFsbGV4YW1wbGUNCi0gIGNvbXBsZXggVFlQRSBjW05dOw0KLSAgY29t cGxleCBUWVBFIGFbTl07DQotICBjb21wbGV4IFRZUEUgYltOXTsNCisgIGNvbXBsZXggVFlQRSBv cDBbTl07DQorICBjb21wbGV4IFRZUEUgb3AxW05dOw0KKyAgY29tcGxleCBUWVBFIG9wMltOXTsN CisgIGNvbXBsZXggVFlQRSBvcDNbTl07DQogICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkgKz0g MSkNCiAgICAgQHsNCi0gICAgICBjW2ldICs9IGFbaV0gKiBiW2ldOw0KKyAgICAgIG9wMFtpXSA9 IG9wMVtpXSAqIG9wMltpXSArIG9wM1tpXTsNCiAgICAgQH0NCiBAZW5kIHNtYWxsZXhhbXBsZQ0K IA0KQEAgLTYzNDgsMTIgKzYzNDksMTMgQEAgdGhlIHNhbWUgYXMgYSBtdWx0aXBseSBhbmQgYWNj dW11bGF0ZSBvZiBjb21wbGV4IG51bWJlcnMgd2hlcmUgdGhlIHNlY29uZA0KIG11bHRpcGx5IGFy Z3VtZW50cyBpcyBjb25qdWdhdGVkLg0KIA0KIEBzbWFsbGV4YW1wbGUNCi0gIGNvbXBsZXggVFlQ RSBjW05dOw0KLSAgY29tcGxleCBUWVBFIGFbTl07DQotICBjb21wbGV4IFRZUEUgYltOXTsNCisg IGNvbXBsZXggVFlQRSBvcDBbTl07DQorICBjb21wbGV4IFRZUEUgb3AxW05dOw0KKyAgY29tcGxl eCBUWVBFIG9wMltOXTsNCisgIGNvbXBsZXggVFlQRSBvcDNbTl07DQogICBmb3IgKGludCBpID0g MDsgaSA8IE47IGkgKz0gMSkNCiAgICAgQHsNCi0gICAgICBjW2ldICs9IGFbaV0gKiBjb25qIChi W2ldKTsNCisgICAgICBvcDBbaV0gPSBvcDFbaV0gKiBjb25qIChvcDJbaV0pICsgb3AzW2ldOw0K ICAgICBAfQ0KIEBlbmQgc21hbGxleGFtcGxlDQogDQpAQCAtNjM3MCwxMiArNjM3MiwxMyBAQCBQ ZXJmb3JtIGEgdmVjdG9yIG11bHRpcGx5IGFuZCBzdWJ0cmFjdCB0aGF0IGlzIHNlbWFudGljYWxs eSB0aGUgc2FtZSBhcw0KIGEgbXVsdGlwbHkgYW5kIHN1YnRyYWN0IG9mIGNvbXBsZXggbnVtYmVy cy4NCiANCiBAc21hbGxleGFtcGxlDQotICBjb21wbGV4IFRZUEUgY1tOXTsNCi0gIGNvbXBsZXgg VFlQRSBhW05dOw0KLSAgY29tcGxleCBUWVBFIGJbTl07DQorICBjb21wbGV4IFRZUEUgb3AwW05d Ow0KKyAgY29tcGxleCBUWVBFIG9wMVtOXTsNCisgIGNvbXBsZXggVFlQRSBvcDJbTl07DQorICBj b21wbGV4IFRZUEUgb3AzW05dOw0KICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpICs9IDEpDQog ICAgIEB7DQotICAgICAgY1tpXSAtPSBhW2ldICogYltpXTsNCisgICAgICBvcDBbaV0gPSBvcDFb aV0gKiBvcDJbaV0gLSBvcDNbaV07DQogICAgIEB9DQogQGVuZCBzbWFsbGV4YW1wbGUNCiANCkBA IC02MzkzLDEyICs2Mzk2LDEzIEBAIHRoZSBzYW1lIGFzIGEgbXVsdGlwbHkgYW5kIHN1YnRyYWN0 IG9mIGNvbXBsZXggbnVtYmVycyB3aGVyZSB0aGUgc2Vjb25kDQogbXVsdGlwbHkgYXJndW1lbnRz IGlzIGNvbmp1Z2F0ZWQuDQogDQogQHNtYWxsZXhhbXBsZQ0KLSAgY29tcGxleCBUWVBFIGNbTl07 DQotICBjb21wbGV4IFRZUEUgYVtOXTsNCi0gIGNvbXBsZXggVFlQRSBiW05dOw0KKyAgY29tcGxl eCBUWVBFIG9wMFtOXTsNCisgIGNvbXBsZXggVFlQRSBvcDFbTl07DQorICBjb21wbGV4IFRZUEUg b3AyW05dOw0KKyAgY29tcGxleCBUWVBFIG9wM1tOXTsNCiAgIGZvciAoaW50IGkgPSAwOyBpIDwg TjsgaSArPSAxKQ0KICAgICBAew0KLSAgICAgIGNbaV0gLT0gYVtpXSAqIGNvbmogKGJbaV0pOw0K KyAgICAgIG9wMFtpXSA9IG9wMVtpXSAqIGNvbmogKG9wMltpXSkgLSBvcDNbaV07DQogICAgIEB9 DQogQGVuZCBzbWFsbGV4YW1wbGUNCiANCkBAIC02NDE1LDEyICs2NDE5LDEyIEBAIFBlcmZvcm0g YSB2ZWN0b3IgbXVsdGlwbHkgdGhhdCBpcyBzZW1hbnRpY2FsbHkgdGhlIHNhbWUgYXMgbXVsdGlw bHkgb2YNCiBjb21wbGV4IG51bWJlcnMuDQogDQogQHNtYWxsZXhhbXBsZQ0KLSAgY29tcGxleCBU WVBFIGNbTl07DQotICBjb21wbGV4IFRZUEUgYVtOXTsNCi0gIGNvbXBsZXggVFlQRSBiW05dOw0K KyAgY29tcGxleCBUWVBFIG9wMFtOXTsNCisgIGNvbXBsZXggVFlQRSBvcDFbTl07DQorICBjb21w bGV4IFRZUEUgb3AyW05dOw0KICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpICs9IDEpDQogICAg IEB7DQotICAgICAgY1tpXSA9IGFbaV0gKiBiW2ldOw0KKyAgICAgIG9wMFtpXSA9IG9wMVtpXSAq IG9wMltpXTsNCiAgICAgQH0NCiBAZW5kIHNtYWxsZXhhbXBsZQ0KIA0KQEAgLTY0MzcsMTIgKzY0 NDEsMTIgQEAgUGVyZm9ybSBhIHZlY3RvciBtdWx0aXBseSBieSBjb25qdWdhdGUgdGhhdCBpcyBz ZW1hbnRpY2FsbHkgdGhlIHNhbWUgYXMgYQ0KIG11bHRpcGx5IG9mIGNvbXBsZXggbnVtYmVycyB3 aGVyZSB0aGUgc2Vjb25kIG11bHRpcGx5IGFyZ3VtZW50cyBpcyBjb25qdWdhdGVkLg0KIA0KIEBz bWFsbGV4YW1wbGUNCi0gIGNvbXBsZXggVFlQRSBjW05dOw0KLSAgY29tcGxleCBUWVBFIGFbTl07 DQotICBjb21wbGV4IFRZUEUgYltOXTsNCisgIGNvbXBsZXggVFlQRSBvcDBbTl07DQorICBjb21w bGV4IFRZUEUgb3AxW05dOw0KKyAgY29tcGxleCBUWVBFIG9wMltOXTsNCiAgIGZvciAoaW50IGkg PSAwOyBpIDwgTjsgaSArPSAxKQ0KICAgICBAew0KLSAgICAgIGNbaV0gPSBhW2ldICogY29uaiAo YltpXSk7DQorICAgICAgb3AwW2ldID0gb3AxW2ldICogY29uaiAob3AyW2ldKTsNCiAgICAgQH0N CiBAZW5kIHNtYWxsZXhhbXBsZQ0KIA0KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZysrLmRn L3ZlY3QvcHI5OTE0OS5jYyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL3ZlY3QvcHI5OTE0OS5jYw0K aW5kZXggZTZlMDU5NGEzMzZmYTA1M2ZmYmE2NGExMmUyZGU0M2E0ZTM3M2Y0OS4uYmI5ZjVmYTg5 ZjEyYjE4NDM2OGJmNTQ4OGQ2ZTk0MzJjMjE2NjQ2MyAxMDA3NTUNCi0tLSBhL2djYy90ZXN0c3Vp dGUvZysrLmRnL3ZlY3QvcHI5OTE0OS5jYw0KKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvdmVj dC9wcjk5MTQ5LmNjDQpAQCAtMjQsNCArMjQsNCBAQCBwdWJsaWM6DQogfSBuOw0KIG1haW4oKSB7 IG4uaigpOyB9DQogDQotLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJzdG10 LipDT01QTEVYX01VTCIgMSAic2xwMiIgfSB9ICovDQorLyogeyBkZy1maW5hbCB7IHNjYW4tdHJl ZS1kdW1wLXRpbWVzICJzdG10LipDT01QTEVYX01VTCIgMSAic2xwMiIgeyB4ZmFpbCB7IHZlY3Rf ZmxvYXQgfSB9IH0gfSAqLw0KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3Qv Y29tcGxleC9wcjEwMjgxOS0xLmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L2NvbXBsZXgv cHIxMDI4MTktMS5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDZiOWE1NWYwNTI3OWQ3MzJmYTE0MThlMDJmNzc5 Y2Y2OTNlZGUwNw0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVj dC9jb21wbGV4L3ByMTAyODE5LTEuYw0KQEAgLTAsMCArMSwyMCBAQA0KKy8qIHsgZGctZG8gY29t cGlsZSB9ICovDQorLyogeyBkZy1hZGQtb3B0aW9ucyBhcm1fdjhfM2FfY29tcGxleF9uZW9uIH0g Ki8NCisNCitmbG9hdCBmWzEyXVsxMDBdOw0KKw0KK3ZvaWQgYmFkMShmbG9hdCB2MSwgZmxvYXQg djIpDQorew0KKyAgZm9yIChpbnQgciA9IDA7IHIgPCAxMDA7IHIgKz0gNCkNCisgICAgew0KKyAg ICAgIGludCBpID0gciArIDE7DQorICAgICAgZlswXVtyXSA9IGZbMV1bcl0gKiAoZlsyXVtyXSAr IHYyKSAtIGZbMV1baV0gKiAoZlsyXVtpXSArIHYxKTsNCisgICAgICBmWzBdW2ldID0gZlsxXVty XSAqIChmWzJdW2ldICsgdjEpICsgZlsxXVtpXSAqIChmWzJdW3JdICsgdjIpOw0KKyAgICAgIGZb MF1bcisyXSA9IGZbMV1bcisyXSAqIChmWzJdW3IrMl0gKyB2MikgLSBmWzFdW2krMl0gKiAoZlsy XVtpKzJdICsgdjEpOw0KKyAgICAgIGZbMF1baSsyXSA9IGZbMV1bcisyXSAqIChmWzJdW2krMl0g KyB2MSkgKyBmWzFdW2krMl0gKiAoZlsyXVtyKzJdICsgdjIpOw0KKyAgICAgIC8vICAgICAgICAg ICAgICAgICAgXl5eXl5eXiAgICAgICAgICAgICBeXl5eXl5eDQorICAgIH0NCit9DQorDQorLyog eyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJGb3VuZCBDT01QTEVYX01VTCIgInZlY3QiIHsg dGFyZ2V0IHsgdmVjdF9mbG9hdCB9IH0gfSB9ICovDQorDQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3Rz dWl0ZS9nY2MuZGcvdmVjdC9jb21wbGV4L3ByMTAyODE5LTIuYyBiL2djYy90ZXN0c3VpdGUvZ2Nj LmRnL3ZlY3QvY29tcGxleC9wcjEwMjgxOS0yLmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRl eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZmU2NDZlZmU1N2Y3 YWQwNzU0MWIwZmI5NjYwMTU5NmY0NmRjNWY4DQotLS0gL2Rldi9udWxsDQorKysgYi9nY2MvdGVz dHN1aXRlL2djYy5kZy92ZWN0L2NvbXBsZXgvcHIxMDI4MTktMi5jDQpAQCAtMCwwICsxLDE3IEBA DQorLyogeyBkZy1kbyBjb21waWxlIH0gKi8NCisvKiB7IGRnLWFkZC1vcHRpb25zIGFybV92OF8z YV9jb21wbGV4X25lb24gfSAqLw0KKw0KK2Zsb2F0IGZbMTJdWzEwMF07DQorDQordm9pZCBiYWQx KGZsb2F0IHYxLCBmbG9hdCB2MikNCit7DQorICBmb3IgKGludCByID0gMDsgciA8IDEwMDsgciAr PSAyKQ0KKyAgICB7DQorICAgICAgaW50IGkgPSByICsgMTsNCisgICAgICBmWzBdW3JdID0gZlsx XVtyXSAqIChmWzJdW3JdICsgdjEpIC0gZlsxXVtpXSAqIChmWzJdW2ldICsgdjIpOw0KKyAgICAg IGZbMF1baV0gPSBmWzFdW3JdICogKGZbMl1baV0gKyB2MSkgKyBmWzFdW2ldICogKGZbMl1bcl0g KyB2Mik7DQorICAgIH0NCit9DQorDQorLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLW5v dCAiRm91bmQgQ09NUExFWF9NVUwiICJ2ZWN0IiB7IHRhcmdldCB7IHZlY3RfZmxvYXQgfSB9IH0g fSAqLw0KKw0KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvY29tcGxleC9w cjEwMjgxOS0zLmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L2NvbXBsZXgvcHIxMDI4MTkt My5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMC4uNWY5OGFhMjA0ZDhiMTFiMGNiNDMzZjg5NjVkYmI3MmNmODk0MGRl MQ0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC9jb21wbGV4 L3ByMTAyODE5LTMuYw0KQEAgLTAsMCArMSwxNyBAQA0KKy8qIHsgZGctZG8gY29tcGlsZSB9ICov DQorLyogeyBkZy1hZGQtb3B0aW9ucyBhcm1fdjhfM2FfY29tcGxleF9uZW9uIH0gKi8NCisNCitm bG9hdCBmWzEyXVsxMDBdOw0KKw0KK3ZvaWQgZ29vZDEoZmxvYXQgdjEsIGZsb2F0IHYyKQ0KK3sN CisgIGZvciAoaW50IHIgPSAwOyByIDwgMTAwOyByICs9IDIpDQorICAgIHsNCisgICAgICBpbnQg aSA9IHIgKyAxOw0KKyAgICAgIGZbMF1bcl0gPSBmWzFdW3JdICogKGZbMl1bcl0gKyB2MikgLSBm WzFdW2ldICogKGZbMl1baV0gKyB2MSk7DQorICAgICAgZlswXVtpXSA9IGZbMV1bcl0gKiAoZlsy XVtpXSArIHYxKSArIGZbMV1baV0gKiAoZlsyXVtyXSArIHYyKTsNCisgICAgfQ0KK30NCisNCisv KiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgIkZvdW5kIENPTVBMRVhfTVVMIiAidmVjdCIg eyB0YXJnZXQgeyB2ZWN0X2Zsb2F0IH0gfSB9IH0gKi8NCisNCmRpZmYgLS1naXQgYS9nY2MvdGVz dHN1aXRlL2djYy5kZy92ZWN0L2NvbXBsZXgvcHIxMDI4MTktNC5jIGIvZ2NjL3Rlc3RzdWl0ZS9n Y2MuZGcvdmVjdC9jb21wbGV4L3ByMTAyODE5LTQuYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmlu ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg4Mjg1MTc4OWM1 MDg1ZTczNDAwMDYwOTExNGJlNDgwZDNiMDhiZDANCi0tLSAvZGV2L251bGwNCisrKyBiL2djYy90 ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvY29tcGxleC9wcjEwMjgxOS00LmMNCkBAIC0wLDAgKzEsMTcg QEANCisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLw0KKy8qIHsgZGctYWRkLW9wdGlvbnMgYXJtX3Y4 XzNhX2NvbXBsZXhfbmVvbiB9ICovDQorDQorZmxvYXQgZlsxMl1bMTAwXTsNCisNCit2b2lkIGdv b2QxKCkNCit7DQorICBmb3IgKGludCByID0gMDsgciA8IDEwMDsgciArPSAyKQ0KKyAgICB7DQor ICAgICAgaW50IGkgPSByICsgMTsNCisgICAgICBmWzBdW3JdID0gZlsxXVtyXSAqIGZbMl1bcl0g LSBmWzFdW2ldICogZlsyXVtpXTsNCisgICAgICBmWzBdW2ldID0gZlsxXVtyXSAqIGZbMl1baV0g KyBmWzFdW2ldICogZlsyXVtyXTsNCisgICAgfQ0KK30NCisNCisvKiB7IGRnLWZpbmFsIHsgc2Nh bi10cmVlLWR1bXAgIkZvdW5kIENPTVBMRVhfTVVMIiAidmVjdCIgeyB0YXJnZXQgeyB2ZWN0X2Zs b2F0IH0gfSB9IH0gKi8NCisNCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0 L2NvbXBsZXgvcHIxMDI4MTktNS5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC9jb21wbGV4 L3ByMTAyODE5LTUuYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZhMmQ1NDlkNjVmM2YyN2Q0MDdmYjBiZDQ2OTQ3 M2U2YTVjMzMzYWUNCi0tLSAvZGV2L251bGwNCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3Zl Y3QvY29tcGxleC9wcjEwMjgxOS01LmMNCkBAIC0wLDAgKzEsMTcgQEANCisvKiB7IGRnLWRvIGNv bXBpbGUgfSAqLw0KKy8qIHsgZGctYWRkLW9wdGlvbnMgYXJtX3Y4XzNhX2NvbXBsZXhfbmVvbiB9 ICovDQorDQorZmxvYXQgZlsxMl1bMTAwXTsNCisNCit2b2lkIGdvb2QyKCkNCit7DQorICBmb3Ig KGludCByID0gMDsgciA8IDEwMDsgciArPSAyKQ0KKyAgICB7DQorICAgICAgaW50IGkgPSByICsg MTsNCisgICAgICBmWzBdW3JdID0gZlsxXVtyXSAqIChmWzJdW3JdICsgMSkgLSBmWzFdW2ldICog KGZbMl1baV0gKyAxKTsNCisgICAgICBmWzBdW2ldID0gZlsxXVtyXSAqIChmWzJdW2ldICsgMSkg KyBmWzFdW2ldICogKGZbMl1bcl0gKyAxKTsNCisgICAgfQ0KK30NCisNCisvKiB7IGRnLWZpbmFs IHsgc2Nhbi10cmVlLWR1bXAgIkZvdW5kIENPTVBMRVhfTVVMIiAidmVjdCIgeyB0YXJnZXQgeyB2 ZWN0X2Zsb2F0IH0gfSB9IH0gKi8NCisNCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5k Zy92ZWN0L2NvbXBsZXgvcHIxMDI4MTktNi5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC9j b21wbGV4L3ByMTAyODE5LTYuYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcxZTY2ZGJlM2IyOWVlYzFmZmZiOGRm OWIyMTYwMjJmZGMwYWY1NGUNCi0tLSAvZGV2L251bGwNCisrKyBiL2djYy90ZXN0c3VpdGUvZ2Nj LmRnL3ZlY3QvY29tcGxleC9wcjEwMjgxOS02LmMNCkBAIC0wLDAgKzEsMTggQEANCisvKiB7IGRn LWRvIGNvbXBpbGUgfSAqLw0KKy8qIHsgZGctYWRkLW9wdGlvbnMgYXJtX3Y4XzNhX2NvbXBsZXhf bmVvbiB9ICovDQorDQorZmxvYXQgZlsxMl1bMTAwXTsNCisNCit2b2lkIGJhZDEoKQ0KK3sNCisg IGZvciAoaW50IHIgPSAwOyByIDwgMTAwOyByICs9IDIpDQorICAgIHsNCisgICAgICBpbnQgaSA9 IHIgKyAxOw0KKyAgICAgIGZbMF1bcl0gPSBmWzFdW3JdICogZlsyXVtyXSAtIGZbMV1baV0gKiBm WzNdW2ldOw0KKyAgICAgIGZbMF1baV0gPSBmWzFdW3JdICogZlsyXVtpXSArIGZbMV1baV0gKiBm WzNdW3JdOw0KKyAgICAgIC8vICAgICAgICAgICAgICAgICAgXl5eXl5eXiAgICAgICAgICAgICBe Xl5eXl5eDQorICAgIH0NCit9DQorDQorLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLW5v dCAiRm91bmQgQ09NUExFWF9NVUwiICJ2ZWN0IiB7IHRhcmdldCB7IHZlY3RfZmxvYXQgfSB9IH0g fSAqLw0KKw0KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvY29tcGxleC9w cjEwMjgxOS03LmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L2NvbXBsZXgvcHIxMDI4MTkt Ny5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMC4uNTM2NjcyZjNjOGJiNDc0YWQ1ZmE0YmI2MWIzYTM2YjU1NWFjZjNj Zg0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC9jb21wbGV4 L3ByMTAyODE5LTcuYw0KQEAgLTAsMCArMSwxOCBAQA0KKy8qIHsgZGctZG8gY29tcGlsZSB9ICov DQorLyogeyBkZy1hZGQtb3B0aW9ucyBhcm1fdjhfM2FfY29tcGxleF9uZW9uIH0gKi8NCisNCitm bG9hdCBmWzEyXVsxMDBdOw0KKw0KK3ZvaWQgYmFkMigpDQorew0KKyAgZm9yIChpbnQgciA9IDA7 IHIgPCAxMDA7IHIgKz0gMikNCisgICAgew0KKyAgICAgIGludCBpID0gciArIDE7DQorICAgICAg ZlswXVtyXSA9IGZbMV1bcl0gKiAoZlsyXVtyXSArIDEpIC0gZlsxXVtpXSAqIGZbMl1baV07DQor ICAgICAgZlswXVtpXSA9IGZbMV1bcl0gKiAoZlsyXVtpXSArIDEpICsgZlsxXVtpXSAqIGZbMl1b cl07DQorICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl4NCisgICAgfQ0KK30N CisNCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtbm90ICJGb3VuZCBDT01QTEVYX01V TCIgInZlY3QiIHsgdGFyZ2V0IHsgdmVjdF9mbG9hdCB9IH0gfSB9ICovDQorDQpkaWZmIC0tZ2l0 IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC9jb21wbGV4L3ByMTAyODE5LTguYyBiL2djYy90 ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvY29tcGxleC9wcjEwMjgxOS04LmMNCm5ldyBmaWxlIG1vZGUg MTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4w N2I0ODE0ODY4OGI3ZDUzMGU1ODkxZDAyM2Q1NThiNThhNDg1YzIzDQotLS0gL2Rldi9udWxsDQor KysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L2NvbXBsZXgvcHIxMDI4MTktOC5jDQpAQCAt MCwwICsxLDE4IEBADQorLyogeyBkZy1kbyBjb21waWxlIH0gKi8NCisvKiB7IGRnLWFkZC1vcHRp b25zIGFybV92OF8zYV9jb21wbGV4X25lb24gfSAqLw0KKw0KK2Zsb2F0IGZbMTJdWzEwMF07DQor DQordm9pZCBiYWQzKCkNCit7DQorICBmb3IgKGludCByID0gMDsgciA8IDEwMDsgciArPSAyKQ0K KyAgICB7DQorICAgICAgaW50IGkgPSByICsgMTsNCisgICAgICBmWzBdW3JdID0gZlsxXVtyXSAq IGZbMl1bcl0gLSBmWzFdW3JdICogZlsyXVtpXTsNCisgICAgICBmWzBdW2ldID0gZlsxXVtyXSAq IGZbMl1baV0gKyBmWzFdW2ldICogZlsyXVtyXTsNCisgICAgICAvLyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBeXl5eXl5eDQorICAgIH0NCit9DQorDQorLyogeyBkZy1maW5hbCB7IHNjYW4t dHJlZS1kdW1wLW5vdCAiRm91bmQgQ09NUExFWF9NVUwiICJ2ZWN0IiB7IHRhcmdldCB7IHZlY3Rf ZmxvYXQgfSB9IH0gfSAqLw0KKw0KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3Zl Y3QvY29tcGxleC9wcjEwMjgxOS05LmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L2NvbXBs ZXgvcHIxMDI4MTktOS5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzY1NTg1MjQzNGIyMWIzODFmZTdlZTMxNmU4 Y2FmM2Q0ODViOGVlMQ0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcv dmVjdC9jb21wbGV4L3ByMTAyODE5LTkuYw0KQEAgLTAsMCArMSwyMSBAQA0KKy8qIHsgZGctZG8g Y29tcGlsZSB9ICovDQorLyogeyBkZy1hZGQtb3B0aW9ucyBhcm1fdjhfM2FfY29tcGxleF9uZW9u IH0gKi8NCisNCisjaW5jbHVkZSA8c3RkaW8uaD4NCisjaW5jbHVkZSA8Y29tcGxleC5oPg0KKw0K KyNkZWZpbmUgTiAyMDANCisjZGVmaW5lIFRZUEUgZmxvYXQNCisjZGVmaW5lIFRZUEUyIGZsb2F0 DQorDQordm9pZCBnIChUWVBFMiBjb21wbGV4IGFbcmVzdHJpY3QgTl0sIFRZUEUgY29tcGxleCBi W3Jlc3RyaWN0IE5dLCBUWVBFIGNvbXBsZXggY1tyZXN0cmljdCBOXSkNCit7DQorICBmb3IgKGlu dCBpPTA7IGkgPCBOOyBpKyspDQorICAgIHsNCisgICAgICBjW2ldIC09ICBhW2ldICogYlswXTsN CisgICAgfQ0KK30NCisNCisvKiBUaGUgcGF0dGVybiBvdmVybGFwcyB3aXRoIENPTVBMRVhfQURE IHNvIHdlIG5lZWQgdG8gc3VwcG9ydCBjb25zdW1pbmcgQUREcyBpbiBDT01QTEVYX0ZNUy4gICov DQorDQorLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJGb3VuZCBDT01QTEVYX0ZNUyIg InZlY3QiIHsgeGZhaWwgeyB2ZWN0X2Zsb2F0IH0gfSB9IH0gKi8NCmRpZmYgLS1naXQgYS9nY2Mv dGVzdHN1aXRlL2djYy5kZy92ZWN0L2NvbXBsZXgvcHIxMDMxNjkuYyBiL2djYy90ZXN0c3VpdGUv Z2NjLmRnL3ZlY3QvY29tcGxleC9wcjEwMzE2OS5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5k ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWJmYWJiZDg1YTBl ZWRmYjQxNTZhODI1NzQzMjQxMjZlOTA4M2ZjNQ0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZ2NjL3Rl c3RzdWl0ZS9nY2MuZGcvdmVjdC9jb21wbGV4L3ByMTAzMTY5LmMNCkBAIC0wLDAgKzEsMTIgQEAN CisvKiB7IGRnLWRvIGNvbXBpbGUgeyB0YXJnZXQgeyB2ZWN0X2RvdWJsZSB9IH0gfSAqLw0KKy8q IHsgZGctYWRkLW9wdGlvbnMgYXJtX3Y4XzNhX2NvbXBsZXhfbmVvbiB9ICovDQorLyogeyBkZy1h ZGRpdGlvbmFsLW9wdGlvbnMgIi1PMiAtZnZlY3QtY29zdC1tb2RlbD11bmxpbWl0ZWQiIH0gKi8N CisNCitfQ29tcGxleCBkb3VibGUgYl8wLCBjXzA7DQorDQordm9pZA0KK211bDI3MHNuZCAodm9p ZCkNCit7DQorICBjXzAgPSBiXzAgKiAxLjBpRiAqIDEuMGlGOw0KK30NCisNCmRpZmYgLS1naXQg YS9nY2MvdHJlZS1kYXRhLXJlZi5oIGIvZ2NjL3RyZWUtZGF0YS1yZWYuaA0KaW5kZXggNzRmNTc5 YzlmM2YyM2JhYzI1ZDIxNTQ2MDY4YzJhYjQzMjA5YWEyYi4uOGFkNWZhNTIxMjc5YjIwZmE1ZTYz ZWVjZjQ0MmQ1ZGM1YzE2ZTdlZSAxMDA2NDQNCi0tLSBhL2djYy90cmVlLWRhdGEtcmVmLmgNCisr KyBiL2djYy90cmVlLWRhdGEtcmVmLmgNCkBAIC02MDAsMTAgKzYwMCwxMSBAQCBzYW1lX2RhdGFf cmVmc19iYXNlX29iamVjdHMgKGRhdGFfcmVmZXJlbmNlX3AgYSwgZGF0YV9yZWZlcmVuY2VfcCBi KQ0KIH0NCiANCiAvKiBSZXR1cm4gdHJ1ZSB3aGVuIHRoZSBkYXRhIHJlZmVyZW5jZXMgQSBhbmQg QiBhcmUgYWNjZXNzaW5nIHRoZSBzYW1lDQotICAgbWVtb3J5IG9iamVjdCB3aXRoIHRoZSBzYW1l IGFjY2VzcyBmdW5jdGlvbnMuICAqLw0KKyAgIG1lbW9yeSBvYmplY3Qgd2l0aCB0aGUgc2FtZSBh Y2Nlc3MgZnVuY3Rpb25zLiAgT3B0aW9uYWxseSBza2lwIHRoZQ0KKyAgIGxhc3QgT0ZGU0VUIGRp bWVuc2lvbnMgaW4gdGhlIGRhdGEgcmVmZXJlbmNlLiAgKi8NCiANCiBzdGF0aWMgaW5saW5lIGJv b2wNCi1zYW1lX2RhdGFfcmVmcyAoZGF0YV9yZWZlcmVuY2VfcCBhLCBkYXRhX3JlZmVyZW5jZV9w IGIpDQorc2FtZV9kYXRhX3JlZnMgKGRhdGFfcmVmZXJlbmNlX3AgYSwgZGF0YV9yZWZlcmVuY2Vf cCBiLCBpbnQgb2Zmc2V0ID0gMCkNCiB7DQogICB1bnNpZ25lZCBpbnQgaTsNCiANCkBAIC02MTQs NyArNjE1LDcgQEAgc2FtZV9kYXRhX3JlZnMgKGRhdGFfcmVmZXJlbmNlX3AgYSwgZGF0YV9yZWZl cmVuY2VfcCBiKQ0KICAgaWYgKCFzYW1lX2RhdGFfcmVmc19iYXNlX29iamVjdHMgKGEsIGIpKQ0K ICAgICByZXR1cm4gZmFsc2U7DQogDQotICBmb3IgKGkgPSAwOyBpIDwgRFJfTlVNX0RJTUVOU0lP TlMgKGEpOyBpKyspDQorICBmb3IgKGkgPSBvZmZzZXQ7IGkgPCBEUl9OVU1fRElNRU5TSU9OUyAo YSk7IGkrKykNCiAgICAgaWYgKCFlcV9ldm9sdXRpb25zX3AgKERSX0FDQ0VTU19GTiAoYSwgaSks IERSX0FDQ0VTU19GTiAoYiwgaSkpKQ0KICAgICAgIHJldHVybiBmYWxzZTsNCiANCmRpZmYgLS1n aXQgYS9nY2MvdHJlZS12ZWN0LXNscC1wYXR0ZXJucy5jIGIvZ2NjL3RyZWUtdmVjdC1zbHAtcGF0 dGVybnMuYw0KaW5kZXggMDM1MDQ0MWZhZDk2OTBjZDVkMDQzMzcxNzFjYTM0NzBhMDY0YTU3MS4u MDIwYzI5YmJhMDhjNWJkODA1MDNhMmRiYzA0MjkyZjhmZDMxMGIzYyAxMDA2NDQNCi0tLSBhL2dj Yy90cmVlLXZlY3Qtc2xwLXBhdHRlcm5zLmMNCisrKyBiL2djYy90cmVlLXZlY3Qtc2xwLXBhdHRl cm5zLmMNCkBAIC0xNDksMTIgKzE0OSwxMyBAQCBpc19saW5lYXJfbG9hZF9wIChsb2FkX3Blcm11 dGF0aW9uX3QgbG9hZHMpDQogICBpbnQgdmFsaWRfcGF0dGVybnMgPSA0Ow0KICAgRk9SX0VBQ0hf VkVDX0VMVCAobG9hZHMsIGksIGxvYWQpDQogICAgIHsNCi0gICAgICBpZiAoY2FuZGlkYXRlc1sw XSAhPSBQRVJNX1VOS05PV04gJiYgbG9hZCAhPSAxKQ0KKyAgICAgIHVuc2lnbmVkIGFkal9sb2Fk ID0gbG9hZCAlIDI7DQorICAgICAgaWYgKGNhbmRpZGF0ZXNbMF0gIT0gUEVSTV9VTktOT1dOICYm IGFkal9sb2FkICE9IDEpDQogCXsNCiAJICBjYW5kaWRhdGVzWzBdID0gUEVSTV9VTktOT1dOOw0K IAkgIHZhbGlkX3BhdHRlcm5zLS07DQogCX0NCi0gICAgICBpZiAoY2FuZGlkYXRlc1sxXSAhPSBQ RVJNX1VOS05PV04gJiYgbG9hZCAhPSAwKQ0KKyAgICAgIGlmIChjYW5kaWRhdGVzWzFdICE9IFBF Uk1fVU5LTk9XTiAmJiBhZGpfbG9hZCAhPSAwKQ0KIAl7DQogCSAgY2FuZGlkYXRlc1sxXSA9IFBF Uk1fVU5LTk9XTjsNCiAJICB2YWxpZF9wYXR0ZXJucy0tOw0KQEAgLTU5NiwxMSArNTk3LDEyIEBA IGNsYXNzIGNvbXBsZXhfYWRkX3BhdHRlcm4gOiBwdWJsaWMgY29tcGxleF9wYXR0ZXJuDQogICBw dWJsaWM6DQogICAgIHZvaWQgYnVpbGQgKHZlY19pbmZvICopOw0KICAgICBzdGF0aWMgaW50ZXJu YWxfZm4NCi0gICAgbWF0Y2hlcyAoY29tcGxleF9vcGVyYXRpb25fdCBvcCwgc2xwX3RyZWVfdG9f bG9hZF9wZXJtX21hcF90ICosIHNscF90cmVlICosDQotCSAgICAgdmVjPHNscF90cmVlPiAqKTsN CisgICAgbWF0Y2hlcyAoY29tcGxleF9vcGVyYXRpb25fdCBvcCwgc2xwX3RyZWVfdG9fbG9hZF9w ZXJtX21hcF90ICosDQorCSAgICAgc2xwX2NvbXBhdF9ub2Rlc19tYXBfdCAqLCBzbHBfdHJlZSAq LCB2ZWM8c2xwX3RyZWU+ICopOw0KIA0KICAgICBzdGF0aWMgdmVjdF9wYXR0ZXJuKg0KLSAgICBy ZWNvZ25pemUgKHNscF90cmVlX3RvX2xvYWRfcGVybV9tYXBfdCAqLCBzbHBfdHJlZSAqKTsNCisg ICAgcmVjb2duaXplIChzbHBfdHJlZV90b19sb2FkX3Blcm1fbWFwX3QgKiwgc2xwX2NvbXBhdF9u b2Rlc19tYXBfdCAqLA0KKwkgICAgICAgc2xwX3RyZWUgKik7DQogDQogICAgIHN0YXRpYyB2ZWN0 X3BhdHRlcm4qDQogICAgIG1rSW5zdGFuY2UgKHNscF90cmVlICpub2RlLCB2ZWM8c2xwX3RyZWU+ ICptX29wcywgaW50ZXJuYWxfZm4gaWZuKQ0KQEAgLTY0Nyw2ICs2NDksNyBAQCBjb21wbGV4X2Fk ZF9wYXR0ZXJuOjpidWlsZCAodmVjX2luZm8gKnZpbmZvKQ0KIGludGVybmFsX2ZuDQogY29tcGxl eF9hZGRfcGF0dGVybjo6bWF0Y2hlcyAoY29tcGxleF9vcGVyYXRpb25fdCBvcCwNCiAJCQkgICAg ICBzbHBfdHJlZV90b19sb2FkX3Blcm1fbWFwX3QgKnBlcm1fY2FjaGUsDQorCQkJICAgICAgc2xw X2NvbXBhdF9ub2Rlc19tYXBfdCAqIC8qIGNvbXBhdF9jYWNoZSAqLywNCiAJCQkgICAgICBzbHBf dHJlZSAqbm9kZSwgdmVjPHNscF90cmVlPiAqb3BzKQ0KIHsNCiAgIGludGVybmFsX2ZuIGlmbiA9 IElGTl9MQVNUOw0KQEAgLTY5MiwxMyArNjk1LDE0IEBAIGNvbXBsZXhfYWRkX3BhdHRlcm46Om1h dGNoZXMgKGNvbXBsZXhfb3BlcmF0aW9uX3Qgb3AsDQogDQogdmVjdF9wYXR0ZXJuKg0KIGNvbXBs ZXhfYWRkX3BhdHRlcm46OnJlY29nbml6ZSAoc2xwX3RyZWVfdG9fbG9hZF9wZXJtX21hcF90ICpw ZXJtX2NhY2hlLA0KKwkJCQlzbHBfY29tcGF0X25vZGVzX21hcF90ICpjb21wYXRfY2FjaGUsDQog CQkJCXNscF90cmVlICpub2RlKQ0KIHsNCiAgIGF1dG9fdmVjPHNscF90cmVlPiBvcHM7DQogICBj b21wbGV4X29wZXJhdGlvbl90IG9wDQogICAgID0gdmVjdF9kZXRlY3RfcGFpcl9vcCAoKm5vZGUs IHRydWUsICZvcHMpOw0KICAgaW50ZXJuYWxfZm4gaWZuDQotICAgID0gY29tcGxleF9hZGRfcGF0 dGVybjo6bWF0Y2hlcyAob3AsIHBlcm1fY2FjaGUsIG5vZGUsICZvcHMpOw0KKyAgICA9IGNvbXBs ZXhfYWRkX3BhdHRlcm46Om1hdGNoZXMgKG9wLCBwZXJtX2NhY2hlLCBjb21wYXRfY2FjaGUsIG5v ZGUsICZvcHMpOw0KICAgaWYgKGlmbiA9PSBJRk5fTEFTVCkNCiAgICAgcmV0dXJuIE5VTEw7DQog DQpAQCAtNzA5LDE0NyArNzEzLDIxNCBAQCBjb21wbGV4X2FkZF9wYXR0ZXJuOjpyZWNvZ25pemUg KHNscF90cmVlX3RvX2xvYWRfcGVybV9tYXBfdCAqcGVybV9jYWNoZSwNCiAgKiBjb21wbGV4X211 bF9wYXR0ZXJuDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCiANCi0vKiBDaGVjayB0byBzZWUg aWYgZWl0aGVyIG9mIHRoZSB0cmVlcyBpbiBBUkdTIGFyZSBhIE5FR0FURV9FWFBSLiAgSWYgdGhl IGZpcnN0DQotICAgY2hpbGQgKGFyZ3NbMF0pIGlzIGEgTkVHQVRFX0VYUFIgdGhlbiBORUdfRklS U1RfUCBpcyBzZXQgdG8gVFJVRS4NCi0NCi0gICBJZiBhIG5lZ2F0ZSBpcyBmb3VuZCB0aGVuIHRo ZSB2YWx1ZXMgaW4gQVJHUyBhcmUgcmVvcmRlcmVkIHN1Y2ggdGhhdCB0aGUNCi0gICBuZWdhdGUg bm9kZSBpcyBhbHdheXMgdGhlIHNlY29uZCBvbmUgYW5kIHRoZSBlbnRyeSBpcyByZXBsYWNlZCBi eSB0aGUgY2hpbGQNCi0gICBvZiB0aGUgbmVnYXRlIG5vZGUuICAqLw0KKy8qIEhlbHBlciBmdW5j dGlvbiB0byBjaGVjayBpZiBQRVJNIGlzIEtJTkQgb3IgUEVSTV9UT1AuICAqLw0KIA0KIHN0YXRp YyBpbmxpbmUgYm9vbA0KLXZlY3Rfbm9ybWFsaXplX2NvbmpfbG9jICh2ZWM8c2xwX3RyZWU+ICZh cmdzLCBib29sICpuZWdfZmlyc3RfcCA9IE5VTEwpDQoraXNfZXFfb3JfdG9wIChzbHBfdHJlZV90 b19sb2FkX3Blcm1fbWFwX3QgKnBlcm1fY2FjaGUsDQorCSAgICAgIHNscF90cmVlIG9wMSwgY29t cGxleF9wZXJtX2tpbmRzX3Qga2luZDEsDQorCSAgICAgIHNscF90cmVlIG9wMiwgY29tcGxleF9w ZXJtX2tpbmRzX3Qga2luZDIpDQogew0KLSAgZ2NjX2Fzc2VydCAoYXJncy5sZW5ndGggKCkgPT0g Mik7DQotICBib29sIG5lZ19mb3VuZCA9IGZhbHNlOw0KLQ0KLSAgaWYgKHZlY3RfbWF0Y2hfZXhw cmVzc2lvbl9wIChhcmdzWzBdLCBORUdBVEVfRVhQUikpDQotICAgIHsNCi0gICAgICBzdGQ6OnN3 YXAgKGFyZ3NbMF0sIGFyZ3NbMV0pOw0KLSAgICAgIG5lZ19mb3VuZCA9IHRydWU7DQotICAgICAg aWYgKG5lZ19maXJzdF9wKQ0KLQkqbmVnX2ZpcnN0X3AgPSB0cnVlOw0KLSAgICB9DQotICBlbHNl IGlmICh2ZWN0X21hdGNoX2V4cHJlc3Npb25fcCAoYXJnc1sxXSwgTkVHQVRFX0VYUFIpKQ0KLSAg ICB7DQotICAgICAgbmVnX2ZvdW5kID0gdHJ1ZTsNCi0gICAgICBpZiAobmVnX2ZpcnN0X3ApDQot CSpuZWdfZmlyc3RfcCA9IGZhbHNlOw0KLSAgICB9DQorICBjb21wbGV4X3Blcm1fa2luZHNfdCBw ZXJtMSA9IGxpbmVhcl9sb2Fkc19wIChwZXJtX2NhY2hlLCBvcDEpOw0KKyAgaWYgKHBlcm0xICE9 IGtpbmQxICYmIHBlcm0xICE9IFBFUk1fVE9QKQ0KKyAgICByZXR1cm4gZmFsc2U7DQogDQotICBp ZiAobmVnX2ZvdW5kKQ0KLSAgICBhcmdzWzFdID0gU0xQX1RSRUVfQ0hJTERSRU4gKGFyZ3NbMV0p WzBdOw0KKyAgY29tcGxleF9wZXJtX2tpbmRzX3QgcGVybTIgPSBsaW5lYXJfbG9hZHNfcCAocGVy bV9jYWNoZSwgb3AyKTsNCisgIGlmIChwZXJtMiAhPSBraW5kMiAmJiBwZXJtMiAhPSBQRVJNX1RP UCkNCisgICAgcmV0dXJuIGZhbHNlOw0KIA0KLSAgcmV0dXJuIG5lZ19mb3VuZDsNCisgIHJldHVy biB0cnVlOw0KIH0NCiANCi0vKiBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sgaWYgUEVSTSBpcyBL SU5EIG9yIFBFUk1fVE9QLiAgKi8NCitlbnVtIF9jb25qX3N0YXR1cyB7IENPTkpfTk9ORSwgQ09O Sl9GU1QsIENPTkpfU05EIH07DQogDQogc3RhdGljIGlubGluZSBib29sDQotaXNfZXFfb3JfdG9w IChjb21wbGV4X3Blcm1fa2luZHNfdCBwZXJtLCBjb21wbGV4X3Blcm1fa2luZHNfdCBraW5kKQ0K K2NvbXBhdGlibGVfY29tcGxleF9ub2Rlc19wIChzbHBfY29tcGF0X25vZGVzX21hcF90ICpjb21w YXRfY2FjaGUsDQorCQkJICAgIHNscF90cmVlIGEsIGludCAqcGEsIHNscF90cmVlIGIsIGludCAq cGIpDQogew0KLSAgcmV0dXJuIHBlcm0gPT0ga2luZCB8fCBwZXJtID09IFBFUk1fVE9QOw0KLX0N CisgIGJvb2wgKnRtcDsNCisgIHN0ZDo6cGFpcjxzbHBfdHJlZSwgc2xwX3RyZWU+IGtleSA9IHN0 ZDo6bWFrZV9wYWlyKGEsIGIpOw0KKyAgaWYgKCh0bXAgPSBjb21wYXRfY2FjaGUtPmdldCAoa2V5 KSkgIT0gTlVMTCkNCisgICAgcmV0dXJuICp0bXA7DQogDQotLyogSGVscGVyIGZ1bmN0aW9uIHRo YXQgY2hlY2tzIHRvIHNlZSBpZiBMRUZUX09QIGFuZCBSSUdIVF9PUCBhcmUgYm90aCBNVUxUX0VY UFINCi0gICBub2RlcyBidXQgYWxzbyB0aGF0IHRoZXkgcmVwcmVzZW50IGFuIG9wZXJhdGlvbiB0 aGF0IGlzIGVpdGhlciBhIGNvbXBsZXgNCi0gICBtdWx0aXBsaWNhdGlvbiBvciBhIGNvbXBsZXgg bXVsdGlwbGljYXRpb24gYnkgY29uanVnYXRlZCB2YWx1ZS4NCisgICBjb21wYXRfY2FjaGUtPnB1 dCAoa2V5LCBmYWxzZSk7DQogDQotICAgT2YgdGhlIG5lZ2F0aW9uIGlzIGV4cGVjdGVkIHRvIGJl IGluIHRoZSBmaXJzdCBoYWxmIG9mIHRoZSB0cmVlIChBcyByZXF1aXJlZA0KLSAgIGJ5IGFuIEZN UyBwYXR0ZXJuKSB0aGVuIE5FR19GSVJTVCBpcyB0cnVlLiAgSWYgdGhlIG9wZXJhdGlvbiBpcyBh IGNvbmp1Z2F0ZQ0KLSAgIG9wZXJhdGlvbiB0aGVuIENPTkpfRklSU1RfT1BFUkFORCBpcyBzZXQg dG8gaW5kaWNhdGUgd2hldGhlciB0aGUgZmlyc3Qgb3INCi0gICBzZWNvbmQgb3BlcmFuZCBjb250 YWlucyB0aGUgY29uanVnYXRlIG9wZXJhdGlvbi4gICovDQorICBpZiAoU0xQX1RSRUVfQ0hJTERS RU4gKGEpLmxlbmd0aCAoKSAhPSBTTFBfVFJFRV9DSElMRFJFTiAoYikubGVuZ3RoICgpKQ0KKyAg ICByZXR1cm4gZmFsc2U7DQogDQotc3RhdGljIGlubGluZSBib29sDQotdmVjdF92YWxpZGF0ZV9t dWx0aXBsaWNhdGlvbiAoc2xwX3RyZWVfdG9fbG9hZF9wZXJtX21hcF90ICpwZXJtX2NhY2hlLA0K LQkJCSAgICAgIGNvbnN0IHZlYzxzbHBfdHJlZT4gJmxlZnRfb3AsDQotCQkJICAgICAgY29uc3Qg dmVjPHNscF90cmVlPiAmcmlnaHRfb3AsDQotCQkJICAgICBib29sIG5lZ19maXJzdCwgYm9vbCAq Y29ual9maXJzdF9vcGVyYW5kLA0KLQkJCSAgICAgYm9vbCBmbXMpDQotew0KLSAgLyogVGhlIHBy ZXNlbmNlIG9mIGEgbmVnYXRpb24gaW5kaWNhdGVzIHRoYXQgd2UgaGF2ZSBlaXRoZXIgYSBjb25q dWdhdGUgb3IgYQ0KLSAgICAgcm90YXRpb24uICBXZSBuZWVkIHRvIGRpc3Rpbmd1aXNoIHdoaWNo IG9uZS4gICovDQotICAqY29ual9maXJzdF9vcGVyYW5kID0gZmFsc2U7DQotICBjb21wbGV4X3Bl cm1fa2luZHNfdCBraW5kOw0KLQ0KLSAgLyogQ29tcGxleCBjb25qdWdhdGVzIGhhdmUgdGhlIG5l Z2F0aW9uIG9uIHRoZSBpbWFnaW5hcnkgcGFydCBvZiB0aGUNCi0gICAgIG51bWJlciB3aGVyZSBy b3RhdGlvbnMgYWZmZWN0IHRoZSByZWFsIGNvbXBvbmVudC4gIFNvIGNoZWNrIGlmIHRoZQ0KLSAg ICAgbmVnYXRpb24gaXMgb24gYSBkdXAgb2YgbGFuZSAxLiAgKi8NCi0gIGlmIChmbXMpDQorICBp ZiAoU0xQX1RSRUVfREVGX1RZUEUgKGEpICE9IFNMUF9UUkVFX0RFRl9UWVBFIChiKSkNCisgICAg cmV0dXJuIGZhbHNlOw0KKw0KKyAgLyogT25seSBpbnRlcm5hbCBub2RlcyBjYW4gYmUgbG9hZHMs IGFzIHN1Y2ggd2UgY2FuJ3QgY2hlY2sgZnVydGhlciBpZiB0aGV5DQorICAgICBhcmUgZXh0ZXJu YWxzLiAgKi8NCisgIGlmIChTTFBfVFJFRV9ERUZfVFlQRSAoYSkgIT0gdmVjdF9pbnRlcm5hbF9k ZWYpDQogICAgIHsNCi0gICAgICAvKiBDYW5vbmljYWxpemF0aW9uIGZvciBmbXMgaXMgbm90IGNv bnNpc3RlbnQuIFNvIGhhdmUgdG8gdGVzdCBib3RoDQotCSB2YXJpYW50cyB0byBiZSBzdXJlLiAg VGhpcyBuZWVkcyB0byBiZSBmaXhlZCBpbiB0aGUgbWlkLWVuZCBzbw0KLQkgdGhpcyBwYXJ0IGNh biBiZSBzaW1wbGVyLiAgKi8NCi0gICAgICBraW5kID0gbGluZWFyX2xvYWRzX3AgKHBlcm1fY2Fj aGUsIHJpZ2h0X29wWzBdKTsNCi0gICAgICBpZiAoISgoaXNfZXFfb3JfdG9wIChsaW5lYXJfbG9h ZHNfcCAocGVybV9jYWNoZSwgcmlnaHRfb3BbMF0pLCBQRVJNX09ERE9ERCkNCi0JICAgJiYgaXNf ZXFfb3JfdG9wIChsaW5lYXJfbG9hZHNfcCAocGVybV9jYWNoZSwgcmlnaHRfb3BbMV0pLA0KLQkJ CSAgICAgUEVSTV9PRERFVkVOKSkNCi0JICB8fCAoa2luZCA9PSBQRVJNX09EREVWRU4NCi0JICAg ICAgJiYgaXNfZXFfb3JfdG9wIChsaW5lYXJfbG9hZHNfcCAocGVybV9jYWNoZSwgcmlnaHRfb3Bb MV0pLA0KLQkJCSAgICAgUEVSTV9PRERPREQpKSkpDQotCXJldHVybiBmYWxzZTsNCisgICAgICBm b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgU0xQX1RSRUVfU0NBTEFSX09QUyAoYSkubGVuZ3RoICgp OyBpKyspDQorCXsNCisJICB0cmVlIG9wMSA9IFNMUF9UUkVFX1NDQUxBUl9PUFMgKGEpW3BhW2kg JSAyXV07DQorCSAgdHJlZSBvcDIgPSBTTFBfVFJFRV9TQ0FMQVJfT1BTIChiKVtwYltpICUgMl1d Ow0KKwkgIGlmICghb3BlcmFuZF9lcXVhbF9wIChvcDEsIG9wMiwgMCkpDQorCSAgICByZXR1cm4g ZmFsc2U7DQorCX0NCisNCisgICAgICBjb21wYXRfY2FjaGUtPnB1dCAoa2V5LCB0cnVlKTsNCisg ICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgfQ0KKw0KKyAgYXV0byBhX3N0bXQgPSBTVE1UX1ZJTkZP X1NUTVQgKFNMUF9UUkVFX1JFUFJFU0VOVEFUSVZFIChhKSk7DQorICBhdXRvIGJfc3RtdCA9IFNU TVRfVklORk9fU1RNVCAoU0xQX1RSRUVfUkVQUkVTRU5UQVRJVkUgKGIpKTsNCisNCisgIGlmIChn aW1wbGVfY29kZSAoYV9zdG10KSAhPSBnaW1wbGVfY29kZSAoYl9zdG10KSkNCisgICAgcmV0dXJu IGZhbHNlOw0KKw0KKyAgLyogY29kZSwgY2hpbGRyZW4sIHR5cGUsIGV4dGVybmFscywgbG9hZHMs IGNvbnN0YW50cyAgKi8NCisgIGlmIChnaW1wbGVfbnVtX2FyZ3MgKGFfc3RtdCkgIT0gZ2ltcGxl X251bV9hcmdzIChiX3N0bXQpKQ0KKyAgICByZXR1cm4gZmFsc2U7DQorDQorICAvKiBBdCB0aGlz IHBvaW50LCBhIGFuZCBiIGFyZSBrbm93biB0byBiZSB0aGUgc2FtZSBnaW1wbGUgb3BlcmF0aW9u cy4gICovDQorICBpZiAoaXNfZ2ltcGxlX2NhbGwgKGFfc3RtdCkpDQorICAgIHsNCisJaWYgKCFj b21wYXRpYmxlX2NhbGxzX3AgKGR5bl9jYXN0IDxnY2FsbCAqPiAoYV9zdG10KSwNCisJCQkJIGR5 bl9jYXN0IDxnY2FsbCAqPiAoYl9zdG10KSkpDQorCSAgcmV0dXJuIGZhbHNlOw0KKyAgICB9DQor ICBlbHNlIGlmICghaXNfZ2ltcGxlX2Fzc2lnbiAoYV9zdG10KSkNCisgICAgcmV0dXJuIGZhbHNl Ow0KICAgZWxzZQ0KICAgICB7DQotICAgICAgaWYgKGxpbmVhcl9sb2Fkc19wIChwZXJtX2NhY2hl LCByaWdodF9vcFsxXSkgIT0gUEVSTV9PRERPREQNCi0JICAmJiAhaXNfZXFfb3JfdG9wIChsaW5l YXJfbG9hZHNfcCAocGVybV9jYWNoZSwgcmlnaHRfb3BbMF0pLA0KLQkJCSAgICBQRVJNX09EREVW RU4pKQ0KKyAgICAgIHRyZWVfY29kZSBhY29kZSA9IGdpbXBsZV9hc3NpZ25fcmhzX2NvZGUgKGFf c3RtdCk7DQorICAgICAgdHJlZV9jb2RlIGJjb2RlID0gZ2ltcGxlX2Fzc2lnbl9yaHNfY29kZSAo Yl9zdG10KTsNCisgICAgICBpZiAoKGFjb2RlID09IFJFQUxQQVJUX0VYUFIgfHwgYWNvZGUgPT0g SU1BR1BBUlRfRVhQUikNCisJICAmJiAoYmNvZGUgPT0gUkVBTFBBUlRfRVhQUiB8fCBiY29kZSA9 PSBJTUFHUEFSVF9FWFBSKSkNCisJcmV0dXJuIHRydWU7DQorDQorICAgICAgaWYgKGFjb2RlICE9 IGJjb2RlKQ0KIAlyZXR1cm4gZmFsc2U7DQogICAgIH0NCiANCi0gIC8qIERlYWwgd2l0aCBkaWZm ZXJlbmNlcyBpbiBpbmRleGVzLiAgKi8NCi0gIGludCBpbmRleDEgPSBmbXMgPyAxIDogMDsNCi0g IGludCBpbmRleDIgPSBmbXMgPyAwIDogMTsNCi0NCi0gIC8qIENoZWNrIGlmIHRoZSBjb25qdWdh dGUgaXMgb24gdGhlIHNlY29uZCBmaXJzdCBvciBzZWNvbmQgb3BlcmFuZC4gIFRoZQ0KLSAgICAg b3JkZXIgb2YgdGhlIG5vZGUgd2l0aCB0aGUgY29uanVnYXRlIHZhbHVlIGRldGVybWluZXMgdGhp cywgYW5kIHRoZSBkdXANCi0gICAgIG5vZGUgbXVzdCBiZSBvbmUgb2YgbGFuZSAwIG9mIHRoZSBz YW1lIERSIGFzIHRoZSBuZWcgbm9kZS4gICovDQotICBraW5kID0gbGluZWFyX2xvYWRzX3AgKHBl cm1fY2FjaGUsIGxlZnRfb3BbaW5kZXgxXSk7DQotICBpZiAoa2luZCA9PSBQRVJNX1RPUCkNCisg IGlmICghU0xQX1RSRUVfTE9BRF9QRVJNVVRBVElPTiAoYSkuZXhpc3RzICgpDQorICAgICAgfHwg IVNMUF9UUkVFX0xPQURfUEVSTVVUQVRJT04gKGIpLmV4aXN0cyAoKSkNCiAgICAgew0KLSAgICAg IGlmIChsaW5lYXJfbG9hZHNfcCAocGVybV9jYWNoZSwgbGVmdF9vcFtpbmRleDJdKSA9PSBQRVJN X0VWRU5PREQpDQotCXJldHVybiB0cnVlOw0KKyAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg PCBnaW1wbGVfbnVtX2FyZ3MgKGFfc3RtdCk7IGkrKykNCisJew0KKwkgIHRyZWUgdDEgPSBnaW1w bGVfYXJnIChhX3N0bXQsIGkpOw0KKwkgIHRyZWUgdDIgPSBnaW1wbGVfYXJnIChiX3N0bXQsIGkp Ow0KKwkgIGlmIChUUkVFX0NPREUgKHQxKSAhPSBUUkVFX0NPREUgKHQyKSkNCisJICAgIHJldHVy biBmYWxzZTsNCisNCisJICAvKiBJZiBTU0EgbmFtZSB0aGVuIHdlIHdpbGwgbmVlZCB0byBpbnNw ZWN0IHRoZSBjaGlsZHJlbg0KKwkgICAgIHNvIHdlIGNhbiBwdW50IGhlcmUuICAqLw0KKwkgIGlm IChUUkVFX0NPREUgKHQxKSA9PSBTU0FfTkFNRSkNCisJICAgIGNvbnRpbnVlOw0KKw0KKwkgIGlm ICghb3BlcmFuZF9lcXVhbF9wICh0MSwgdDIsIDApKQ0KKwkgICAgcmV0dXJuIGZhbHNlOw0KKwl9 DQogICAgIH0NCi0gIGVsc2UgaWYgKGtpbmQgPT0gUEVSTV9FVkVOT0REICYmICFuZWdfZmlyc3Qp DQorICBlbHNlDQogICAgIHsNCi0gICAgICBpZiAoKGtpbmQgPSBsaW5lYXJfbG9hZHNfcCAocGVy bV9jYWNoZSwgbGVmdF9vcFtpbmRleDJdKSkgIT0gUEVSTV9FVkVORVZFTikNCisgICAgICBhdXRv IGRyMSA9IFNUTVRfVklORk9fREFUQV9SRUYgKFNMUF9UUkVFX1JFUFJFU0VOVEFUSVZFIChhKSk7 DQorICAgICAgYXV0byBkcjIgPSBTVE1UX1ZJTkZPX0RBVEFfUkVGIChTTFBfVFJFRV9SRVBSRVNF TlRBVElWRSAoYikpOw0KKyAgICAgIC8qIERvbid0IGNoZWNrIHRoZSBsYXN0IGRpbWVuc2lvbiBh cyB0aGF0J3MgY2hlY2tlZCBieSB0aGUgbGluZWFyeQ0KKwkgY2hlY2tzLiAgVGhpcyBjaGVjayBp cyBhbHNvIG11Y2ggc3RyaWN0ZXIgdGhhbiB3aGF0IHdlIG5lZWQNCisJIGJlY2F1c2UgaXQgZG9l c24ndCBjb25zaWRlciBsb2FkaW5nIGZyb20gYWRqYWNlbnQgZWxlbWVudHMNCisJIGluIHRoZSBz YW1lIHN0cnVjdCBhcyBsb2FkaW5nIGZyb20gdGhlIHNhbWUgYmFzZSBvYmplY3QuDQorCSBCdXQg Zm9yIG5vdywgSSdsbCBwbGF5IGl0IHNhZmUuICAqLw0KKyAgICAgIGlmICghc2FtZV9kYXRhX3Jl ZnMgKGRyMSwgZHIyLCAxKSkNCiAJcmV0dXJuIGZhbHNlOw0KLSAgICAgIHJldHVybiB0cnVlOw0K ICAgICB9DQotICBlbHNlIGlmIChraW5kID09IFBFUk1fRVZFTkVWRU4gJiYgbmVnX2ZpcnN0KQ0K Kw0KKyAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IFNMUF9UUkVFX0NISUxEUkVOIChhKS5sZW5n dGggKCk7IGkrKykNCiAgICAgew0KLSAgICAgIGlmICgoa2luZCA9IGxpbmVhcl9sb2Fkc19wIChw ZXJtX2NhY2hlLCBsZWZ0X29wW2luZGV4Ml0pKSAhPSBQRVJNX0VWRU5PREQpDQorICAgICAgaWYg KCFjb21wYXRpYmxlX2NvbXBsZXhfbm9kZXNfcCAoY29tcGF0X2NhY2hlLA0KKwkJCQkgICAgICAg U0xQX1RSRUVfQ0hJTERSRU4gKGEpW2ldLCBwYSwNCisJCQkJICAgICAgIFNMUF9UUkVFX0NISUxE UkVOIChiKVtpXSwgcGIpKQ0KIAlyZXR1cm4gZmFsc2U7DQotDQotICAgICAgKmNvbmpfZmlyc3Rf b3BlcmFuZCA9IHRydWU7DQotICAgICAgcmV0dXJuIHRydWU7DQogICAgIH0NCi0gIGVsc2UNCi0g ICAgcmV0dXJuIGZhbHNlOw0KLQ0KLSAgaWYgKGtpbmQgIT0gUEVSTV9FVkVORVZFTikNCi0gICAg cmV0dXJuIGZhbHNlOw0KIA0KKyAgY29tcGF0X2NhY2hlLT5wdXQgKGtleSwgdHJ1ZSk7DQogICBy ZXR1cm4gdHJ1ZTsNCiB9DQogDQotLyogSGVscGVyIGZ1bmN0aW9uIHRvIGhlbHAgZGlzdGluZ3Vp c2ggYmV0d2VlbiBhIGNvbmp1Z2F0ZSBhbmQgYSByb3RhdGlvbiBpbiBhDQotICAgY29tcGxleCBt dWx0aXBsaWNhdGlvbi4gIFRoZSBvcGVyYXRpb25zIGhhdmUgc2ltaWxhciBzaGFwZXMgYnV0IHRo ZSBvcmRlciBvZg0KLSAgIHRoZSBsb2FkIHBlcm11dGVzIGFyZSBkaWZmZXJlbnQuICBUaGlzIGZ1 bmN0aW9uIHJldHVybnMgVFJVRSB3aGVuIHRoZSBvcmRlcg0KLSAgIGlzIGNvbnNpc3RlbnQgd2l0 aCBhIG11bHRpcGxpY2F0aW9uIG9yIG11bHRpcGxpY2F0aW9uIGJ5IGNvbmp1Z2F0ZWQNCi0gICBv cGVyYW5kIGJ1dCByZXR1cm5zIEZBTFNFIGlmIGl0J3MgYSBtdWx0aXBsaWNhdGlvbiBieSByb3Rh dGVkIG9wZXJhbmQuICAqLw0KLQ0KIHN0YXRpYyBpbmxpbmUgYm9vbA0KIHZlY3RfdmFsaWRhdGVf bXVsdGlwbGljYXRpb24gKHNscF90cmVlX3RvX2xvYWRfcGVybV9tYXBfdCAqcGVybV9jYWNoZSwN Ci0JCQkgICAgICBjb25zdCB2ZWM8c2xwX3RyZWU+ICZvcCwNCi0JCQkgICAgICBjb21wbGV4X3Bl cm1fa2luZHNfdCBwZXJtS2luZCkNCisJCQkgICAgICBzbHBfY29tcGF0X25vZGVzX21hcF90ICpj b21wYXRfY2FjaGUsDQorCQkJICAgICAgdmVjPHNscF90cmVlPiAmbGVmdF9vcCwNCisJCQkgICAg ICB2ZWM8c2xwX3RyZWU+ICZyaWdodF9vcCwNCisJCQkgICAgICBib29sIHN1YnRyYWN0LA0KKwkJ CSAgICAgIGVudW0gX2Nvbmpfc3RhdHVzICpfc3RhdHVzKQ0KIHsNCi0gIC8qIFRoZSBsZWZ0IG5v ZGUgaXMgdGhlIG1vcmUgY29tbW9uIGNhc2UsIHRlc3QgaXQgZmlyc3QuICAqLw0KLSAgaWYgKCFp c19lcV9vcl90b3AgKGxpbmVhcl9sb2Fkc19wIChwZXJtX2NhY2hlLCBvcFswXSksIHBlcm1LaW5k KSkNCisgIGF1dG9fdmVjPHNscF90cmVlPiBvcHM7DQorICBlbnVtIF9jb25qX3N0YXR1cyBzdGF0 cyA9IENPTkpfTk9ORTsNCisNCisgIC8qIFRoZSBjb21wbGV4IG9wZXJhdGlvbnMgY2FuIG9jY3Vy IGluIHR3byBsYXlvdXRzIGFuZCB0d28gcGVybXV0ZSBzZXF1ZW5jZXMNCisgICAgIHNvIGRlY2xh cmUgdGhlbSBhbmQgcmUtdXNlIHRoZW0uICAqLw0KKyAgaW50IHN0eWxlc1tdWzRdID0geyB7IDAs IDIsIDEsIDN9IC8qIHtMMSwgUjF9ICsge0wyLCBSMn0uICAqLw0KKwkJICAgICwgeyAwLCAzLCAx LCAyfSAvKiB7TDEsIFIyfSArIHtMMiwgUjF9LiAgKi8NCisJCSAgICB9Ow0KKw0KKyAgLyogTm93 IGZvciB0aGUgY29ycmVzcG9uZGluZyBwZXJtdXRlcyB0aGF0IGdvIHdpdGggdGhlc2UgdmFsdWVz LiAgKi8NCisgIGNvbXBsZXhfcGVybV9raW5kc190IHBlcm1zW11bNF0NCisgICAgPSB7IHsgUEVS TV9FVkVORVZFTiwgUEVSTV9PRERPREQsIFBFUk1fRVZFTk9ERCwgUEVSTV9PRERFVkVOIH0NCisg ICAgICAsIHsgUEVSTV9FVkVOT0RELCBQRVJNX09EREVWRU4sIFBFUk1fRVZFTkVWRU4sIFBFUk1f T0RET0REIH0NCisgICAgICB9Ow0KKw0KKyAgLyogVGhlc2UgcGVybXV0ZXMgYXJlIHVzZWQgZHVy aW5nIGNvbXBhcmlzb25zIG9mIGV4dGVybmFscyBvbiB3aGljaA0KKyAgICAgd2UgcmVxdWlyZSBz dHJpY3QgZXF1YWxpdHkuICAqLw0KKyAgaW50IGNxW11bNF1bMl0NCisgICAgPSB7IHsgeyAwLCAw IH0sIHsgMSwgMSB9LCB7IDAsIDEgfSwgeyAxLCAwIH0gfQ0KKyAgICAgICwgeyB7IDAsIDEgfSwg eyAxLCAwIH0sIHsgMCwgMCB9LCB7IDEsIDEgfSB9DQorICAgICAgfTsNCisNCisgIC8qIERlZmF1 bHQgdG8gc3R5bGUgYW5kIHBlcm0gMCwgbW9zdCBvcGVyYXRpb25zIHVzZSB0aGlzIG9uZS4gICov DQorICBpbnQgc3R5bGUgPSAwOw0KKyAgaW50IHBlcm0gPSBzdWJ0cmFjdCA/IDEgOiAwOw0KKw0K KyAgLyogQ2hlY2sgaWYgd2UgaGF2ZSBhIG5lZ2F0ZSBvcGVyYXRpb24sIGlmIHNvIGFic29yYiB0 aGUgbm9kZSBhbmQgY29udGludWUNCisgICAgIGxvb2tpbmcuICAqLw0KKyAgYm9vbCBuZWcwID0g dmVjdF9tYXRjaF9leHByZXNzaW9uX3AgKHJpZ2h0X29wWzBdLCBORUdBVEVfRVhQUik7DQorICBi b29sIG5lZzEgPSB2ZWN0X21hdGNoX2V4cHJlc3Npb25fcCAocmlnaHRfb3BbMV0sIE5FR0FURV9F WFBSKTsNCisNCisgIC8qIERldGVybWluZSB3aGljaCBzdHlsZSB3ZSdyZSBsb29raW5nIGF0LiAg V2Ugb25seSBoYXZlIGRpZmZlcmVudCBvbmVzDQorICAgICB3aGVuZXZlciBhIGNvbmp1Z2F0ZSBp cyBpbnZvbHZlZC4gICovDQorICBpZiAobmVnMCAmJiBuZWcxKQ0KKyAgICA7DQorICBlbHNlIGlm IChuZWcwKQ0KICAgICB7DQotICAgICAgaWYgKCFpc19lcV9vcl90b3AgKGxpbmVhcl9sb2Fkc19w IChwZXJtX2NhY2hlLCBvcFsxXSksIHBlcm1LaW5kKSkNCi0JcmV0dXJuIGZhbHNlOw0KKyAgICAg IHJpZ2h0X29wWzBdID0gU0xQX1RSRUVfQ0hJTERSRU4gKHJpZ2h0X29wWzBdKVswXTsNCisgICAg ICBzdGF0cyA9IENPTkpfRlNUOw0KKyAgICAgIGlmIChzdWJ0cmFjdCkNCisJcGVybSA9IDA7DQog ICAgIH0NCi0gIHJldHVybiB0cnVlOw0KKyAgZWxzZSBpZiAobmVnMSkNCisgICAgew0KKyAgICAg IHJpZ2h0X29wWzFdID0gU0xQX1RSRUVfQ0hJTERSRU4gKHJpZ2h0X29wWzFdKVswXTsNCisgICAg ICBzdGF0cyA9IENPTkpfU05EOw0KKyAgICAgIHBlcm0gPSAxOw0KKyAgICB9DQorDQorICAqX3N0 YXR1cyA9IHN0YXRzOw0KKw0KKyAgLyogRmxhdHRlbiB0aGUgaW5wdXRzIGFmdGVyIHdlJ3ZlIHJl bWFwcGVkIHRoZW0uICAqLw0KKyAgb3BzLmNyZWF0ZSAoNCk7DQorICBvcHMuc2FmZV9zcGxpY2Ug KGxlZnRfb3ApOw0KKyAgb3BzLnNhZmVfc3BsaWNlIChyaWdodF9vcCk7DQorDQorICAvKiBFeHRy YWN0IG91dCB0aGUgZWxlbWVudHMgdG8gY2hlY2suICAqLw0KKyAgc2xwX3RyZWUgb3AwID0gb3Bz W3N0eWxlc1tzdHlsZV1bMF1dOw0KKyAgc2xwX3RyZWUgb3AxID0gb3BzW3N0eWxlc1tzdHlsZV1b MV1dOw0KKyAgc2xwX3RyZWUgb3AyID0gb3BzW3N0eWxlc1tzdHlsZV1bMl1dOw0KKyAgc2xwX3Ry ZWUgb3AzID0gb3BzW3N0eWxlc1tzdHlsZV1bM11dOw0KKw0KKyAgLyogRG8gY2hlYXBlc3QgdGVz dCBmaXJzdC4gIElmIGZhaWxlZCBubyBuZWVkIHRvIGFuYWx5emUgZnVydGhlci4gICovDQorICBp ZiAobGluZWFyX2xvYWRzX3AgKHBlcm1fY2FjaGUsIG9wMCkgIT0gcGVybXNbcGVybV1bMF0NCisg ICAgICB8fCBsaW5lYXJfbG9hZHNfcCAocGVybV9jYWNoZSwgb3AxKSAhPSBwZXJtc1twZXJtXVsx XQ0KKyAgICAgIHx8ICFpc19lcV9vcl90b3AgKHBlcm1fY2FjaGUsIG9wMiwgcGVybXNbcGVybV1b Ml0sIG9wMywgcGVybXNbcGVybV1bM10pKQ0KKyAgICByZXR1cm4gZmFsc2U7DQorDQorICByZXR1 cm4gY29tcGF0aWJsZV9jb21wbGV4X25vZGVzX3AgKGNvbXBhdF9jYWNoZSwgb3AwLCBjcVtwZXJt XVswXSwgb3AxLA0KKwkJCQkgICAgIGNxW3Blcm1dWzFdKQ0KKwkgJiYgY29tcGF0aWJsZV9jb21w bGV4X25vZGVzX3AgKGNvbXBhdF9jYWNoZSwgb3AyLCBjcVtwZXJtXVsyXSwgb3AzLA0KKwkJCQkJ Y3FbcGVybV1bM10pOw0KIH0NCiANCiAvKiBUaGlzIGZ1bmN0aW9uIGNvbWJpbmVzIHR3byBub2Rl cyBjb250YWluaW5nIG9ubHkgZXZlbiBhbmQgb25seSBvZGQgbGFuZXMNCkBAIC05MDgsMTEgKzk3 OSwxMiBAQCBjbGFzcyBjb21wbGV4X211bF9wYXR0ZXJuIDogcHVibGljIGNvbXBsZXhfcGF0dGVy bg0KICAgcHVibGljOg0KICAgICB2b2lkIGJ1aWxkICh2ZWNfaW5mbyAqKTsNCiAgICAgc3RhdGlj IGludGVybmFsX2ZuDQotICAgIG1hdGNoZXMgKGNvbXBsZXhfb3BlcmF0aW9uX3Qgb3AsIHNscF90 cmVlX3RvX2xvYWRfcGVybV9tYXBfdCAqLCBzbHBfdHJlZSAqLA0KLQkgICAgIHZlYzxzbHBfdHJl ZT4gKik7DQorICAgIG1hdGNoZXMgKGNvbXBsZXhfb3BlcmF0aW9uX3Qgb3AsIHNscF90cmVlX3Rv X2xvYWRfcGVybV9tYXBfdCAqLA0KKwkgICAgIHNscF9jb21wYXRfbm9kZXNfbWFwX3QgKiwgc2xw X3RyZWUgKiwgdmVjPHNscF90cmVlPiAqKTsNCiANCiAgICAgc3RhdGljIHZlY3RfcGF0dGVybioN Ci0gICAgcmVjb2duaXplIChzbHBfdHJlZV90b19sb2FkX3Blcm1fbWFwX3QgKiwgc2xwX3RyZWUg Kik7DQorICAgIHJlY29nbml6ZSAoc2xwX3RyZWVfdG9fbG9hZF9wZXJtX21hcF90ICosIHNscF9j b21wYXRfbm9kZXNfbWFwX3QgKiwNCisJICAgICAgIHNscF90cmVlICopOw0KIA0KICAgICBzdGF0 aWMgdmVjdF9wYXR0ZXJuKg0KICAgICBta0luc3RhbmNlIChzbHBfdHJlZSAqbm9kZSwgdmVjPHNs cF90cmVlPiAqbV9vcHMsIGludGVybmFsX2ZuIGlmbikNCkBAIC05NDMsNiArMTAxNSw3IEBAIGNs YXNzIGNvbXBsZXhfbXVsX3BhdHRlcm4gOiBwdWJsaWMgY29tcGxleF9wYXR0ZXJuDQogaW50ZXJu YWxfZm4NCiBjb21wbGV4X211bF9wYXR0ZXJuOjptYXRjaGVzIChjb21wbGV4X29wZXJhdGlvbl90 IG9wLA0KIAkJCSAgICAgIHNscF90cmVlX3RvX2xvYWRfcGVybV9tYXBfdCAqcGVybV9jYWNoZSwN CisJCQkgICAgICBzbHBfY29tcGF0X25vZGVzX21hcF90ICpjb21wYXRfY2FjaGUsDQogCQkJICAg ICAgc2xwX3RyZWUgKm5vZGUsIHZlYzxzbHBfdHJlZT4gKm9wcykNCiB7DQogICBpbnRlcm5hbF9m biBpZm4gPSBJRk5fTEFTVDsNCkBAIC05OTAsMTcgKzEwNjMsMTMgQEAgY29tcGxleF9tdWxfcGF0 dGVybjo6bWF0Y2hlcyAoY29tcGxleF9vcGVyYXRpb25fdCBvcCwNCiAgICAgICB8fCBsaW5lYXJf bG9hZHNfcCAocGVybV9jYWNoZSwgbGVmdF9vcFsxXSkgPT0gUEVSTV9PRERFVkVOKQ0KICAgICBy ZXR1cm4gSUZOX0xBU1Q7DQogDQotICBib29sIG5lZ19maXJzdCA9IGZhbHNlOw0KLSAgYm9vbCBj b25qX2ZpcnN0X29wZXJhbmQgPSBmYWxzZTsNCi0gIGJvb2wgaXNfbmVnID0gdmVjdF9ub3JtYWxp emVfY29ual9sb2MgKHJpZ2h0X29wLCAmbmVnX2ZpcnN0KTsNCisgIGVudW0gX2Nvbmpfc3RhdHVz IHN0YXR1czsNCisgIGlmICghdmVjdF92YWxpZGF0ZV9tdWx0aXBsaWNhdGlvbiAocGVybV9jYWNo ZSwgY29tcGF0X2NhY2hlLCBsZWZ0X29wLA0KKwkJCQkgICAgIHJpZ2h0X29wLCBmYWxzZSwgJnN0 YXR1cykpDQorICAgIHJldHVybiBJRk5fTEFTVDsNCiANCi0gIGlmICghaXNfbmVnKQ0KKyAgaWYg KHN0YXR1cyA9PSBDT05KX05PTkUpDQogICAgIHsNCi0gICAgICAvKiBBIG11bHRpcGxpY2F0aW9u IG5lZWRzIHRvIG11bHRpcGx5IGFnYWlucyB0aGUgcmVhbCBwYWlyLCBvdGhlcndpc2UNCi0JIHRo ZSBwYXR0ZXJuIG1hdGNoZXMgdGhhdCBvZiBGTVMuICAgKi8NCi0gICAgICBpZiAoIXZlY3RfdmFs aWRhdGVfbXVsdGlwbGljYXRpb24gKHBlcm1fY2FjaGUsIGxlZnRfb3AsIFBFUk1fRVZFTkVWRU4p DQotCSAgfHwgdmVjdF9ub3JtYWxpemVfY29ual9sb2MgKGxlZnRfb3ApKQ0KLQlyZXR1cm4gSUZO X0xBU1Q7DQogICAgICAgaWYgKGFkZDApDQogCWlmbiA9IElGTl9DT01QTEVYX0ZNQTsNCiAgICAg ICBlbHNlDQpAQCAtMTAwOCwxMSArMTA3Nyw2IEBAIGNvbXBsZXhfbXVsX3BhdHRlcm46Om1hdGNo ZXMgKGNvbXBsZXhfb3BlcmF0aW9uX3Qgb3AsDQogICAgIH0NCiAgIGVsc2UNCiAgICAgew0KLSAg ICAgIGlmICghdmVjdF92YWxpZGF0ZV9tdWx0aXBsaWNhdGlvbiAocGVybV9jYWNoZSwgbGVmdF9v cCwgcmlnaHRfb3AsDQotCQkJCQkgbmVnX2ZpcnN0LCAmY29ual9maXJzdF9vcGVyYW5kLA0KLQkJ CQkJIGZhbHNlKSkNCi0JcmV0dXJuIElGTl9MQVNUOw0KLQ0KICAgICAgIGlmKGFkZDApDQogCWlm biA9IElGTl9DT01QTEVYX0ZNQV9DT05KOw0KICAgICAgIGVsc2UNCkBAIC0xMDI5LDE5ICsxMDkz LDEzIEBAIGNvbXBsZXhfbXVsX3BhdHRlcm46Om1hdGNoZXMgKGNvbXBsZXhfb3BlcmF0aW9uX3Qg b3AsDQogICAgIG9wcy0+cXVpY2tfcHVzaCAoYWRkMCk7DQogDQogICBjb21wbGV4X3Blcm1fa2lu ZHNfdCBraW5kID0gbGluZWFyX2xvYWRzX3AgKHBlcm1fY2FjaGUsIGxlZnRfb3BbMF0pOw0KLSAg aWYgKGtpbmQgPT0gUEVSTV9FVkVOT0REKQ0KKyAgaWYgKGtpbmQgPT0gUEVSTV9FVkVOT0REIHx8 IGtpbmQgPT0gUEVSTV9UT1ApDQogICAgIHsNCiAgICAgICBvcHMtPnF1aWNrX3B1c2ggKGxlZnRf b3BbMV0pOw0KICAgICAgIG9wcy0+cXVpY2tfcHVzaCAocmlnaHRfb3BbMV0pOw0KICAgICAgIG9w cy0+cXVpY2tfcHVzaCAobGVmdF9vcFswXSk7DQogICAgIH0NCi0gIGVsc2UgaWYgKGtpbmQgPT0g UEVSTV9UT1ApDQotICAgIHsNCi0gICAgICBvcHMtPnF1aWNrX3B1c2ggKGxlZnRfb3BbMV0pOw0K LSAgICAgIG9wcy0+cXVpY2tfcHVzaCAocmlnaHRfb3BbMV0pOw0KLSAgICAgIG9wcy0+cXVpY2tf cHVzaCAobGVmdF9vcFswXSk7DQotICAgIH0NCi0gIGVsc2UgaWYgKGtpbmQgPT0gUEVSTV9FVkVO RVZFTiAmJiAhY29ual9maXJzdF9vcGVyYW5kKQ0KKyAgZWxzZSBpZiAoa2luZCA9PSBQRVJNX0VW RU5FVkVOICYmIHN0YXR1cyAhPSBDT05KX1NORCkNCiAgICAgew0KICAgICAgIG9wcy0+cXVpY2tf cHVzaCAobGVmdF9vcFswXSk7DQogICAgICAgb3BzLT5xdWlja19wdXNoIChyaWdodF9vcFswXSk7 DQpAQCAtMTA2MSwxMyArMTExOSwxNCBAQCBjb21wbGV4X211bF9wYXR0ZXJuOjptYXRjaGVzIChj b21wbGV4X29wZXJhdGlvbl90IG9wLA0KIA0KIHZlY3RfcGF0dGVybioNCiBjb21wbGV4X211bF9w YXR0ZXJuOjpyZWNvZ25pemUgKHNscF90cmVlX3RvX2xvYWRfcGVybV9tYXBfdCAqcGVybV9jYWNo ZSwNCisJCQkJc2xwX2NvbXBhdF9ub2Rlc19tYXBfdCAqY29tcGF0X2NhY2hlLA0KIAkJCQlzbHBf dHJlZSAqbm9kZSkNCiB7DQogICBhdXRvX3ZlYzxzbHBfdHJlZT4gb3BzOw0KICAgY29tcGxleF9v cGVyYXRpb25fdCBvcA0KICAgICA9IHZlY3RfZGV0ZWN0X3BhaXJfb3AgKCpub2RlLCB0cnVlLCAm b3BzKTsNCiAgIGludGVybmFsX2ZuIGlmbg0KLSAgICA9IGNvbXBsZXhfbXVsX3BhdHRlcm46Om1h dGNoZXMgKG9wLCBwZXJtX2NhY2hlLCBub2RlLCAmb3BzKTsNCisgICAgPSBjb21wbGV4X211bF9w YXR0ZXJuOjptYXRjaGVzIChvcCwgcGVybV9jYWNoZSwgY29tcGF0X2NhY2hlLCBub2RlLCAmb3Bz KTsNCiAgIGlmIChpZm4gPT0gSUZOX0xBU1QpDQogICAgIHJldHVybiBOVUxMOw0KIA0KQEAgLTEx MTUsOSArMTE3NCw5IEBAIGNvbXBsZXhfbXVsX3BhdHRlcm46OmJ1aWxkICh2ZWNfaW5mbyAqdmlu Zm8pDQogDQogCS8qIEZpcnN0IHJlLWFycmFuZ2UgdGhlIGNoaWxkcmVuLiAgKi8NCiAJU0xQX1RS RUVfQ0hJTERSRU4gKCp0aGlzLT5tX25vZGUpLnNhZmVfZ3JvdyAoMyk7DQotCVNMUF9UUkVFX0NI SUxEUkVOICgqdGhpcy0+bV9ub2RlKVswXSA9IHRoaXMtPm1fb3BzWzBdOw0KLQlTTFBfVFJFRV9D SElMRFJFTiAoKnRoaXMtPm1fbm9kZSlbMV0gPSB0aGlzLT5tX29wc1szXTsNCi0JU0xQX1RSRUVf Q0hJTERSRU4gKCp0aGlzLT5tX25vZGUpWzJdID0gbmV3bm9kZTsNCisJU0xQX1RSRUVfQ0hJTERS RU4gKCp0aGlzLT5tX25vZGUpWzBdID0gdGhpcy0+bV9vcHNbM107DQorCVNMUF9UUkVFX0NISUxE UkVOICgqdGhpcy0+bV9ub2RlKVsxXSA9IG5ld25vZGU7DQorCVNMUF9UUkVFX0NISUxEUkVOICgq dGhpcy0+bV9ub2RlKVsyXSA9IHRoaXMtPm1fb3BzWzBdOw0KIA0KIAkvKiBUZWxsIHRoZSBidWls ZGVyIHRvIGV4cGVjdCBhbiBleHRyYSBhcmd1bWVudC4gICovDQogCXRoaXMtPm1fbnVtX2FyZ3Mr KzsNCkBAIC0xMTQ3LDExICsxMjA2LDEyIEBAIGNsYXNzIGNvbXBsZXhfZm1zX3BhdHRlcm4gOiBw dWJsaWMgY29tcGxleF9wYXR0ZXJuDQogICBwdWJsaWM6DQogICAgIHZvaWQgYnVpbGQgKHZlY19p bmZvICopOw0KICAgICBzdGF0aWMgaW50ZXJuYWxfZm4NCi0gICAgbWF0Y2hlcyAoY29tcGxleF9v cGVyYXRpb25fdCBvcCwgc2xwX3RyZWVfdG9fbG9hZF9wZXJtX21hcF90ICosIHNscF90cmVlICos DQotCSAgICAgdmVjPHNscF90cmVlPiAqKTsNCisgICAgbWF0Y2hlcyAoY29tcGxleF9vcGVyYXRp b25fdCBvcCwgc2xwX3RyZWVfdG9fbG9hZF9wZXJtX21hcF90ICosDQorCSAgICAgc2xwX2NvbXBh dF9ub2Rlc19tYXBfdCAqLCBzbHBfdHJlZSAqLCB2ZWM8c2xwX3RyZWU+ICopOw0KIA0KICAgICBz dGF0aWMgdmVjdF9wYXR0ZXJuKg0KLSAgICByZWNvZ25pemUgKHNscF90cmVlX3RvX2xvYWRfcGVy bV9tYXBfdCAqLCBzbHBfdHJlZSAqKTsNCisgICAgcmVjb2duaXplIChzbHBfdHJlZV90b19sb2Fk X3Blcm1fbWFwX3QgKiwgc2xwX2NvbXBhdF9ub2Rlc19tYXBfdCAqLA0KKwkgICAgICAgc2xwX3Ry ZWUgKik7DQogDQogICAgIHN0YXRpYyB2ZWN0X3BhdHRlcm4qDQogICAgIG1rSW5zdGFuY2UgKHNs cF90cmVlICpub2RlLCB2ZWM8c2xwX3RyZWU+ICptX29wcywgaW50ZXJuYWxfZm4gaWZuKQ0KQEAg LTExODIsNiArMTI0Miw3IEBAIGNsYXNzIGNvbXBsZXhfZm1zX3BhdHRlcm4gOiBwdWJsaWMgY29t cGxleF9wYXR0ZXJuDQogaW50ZXJuYWxfZm4NCiBjb21wbGV4X2Ztc19wYXR0ZXJuOjptYXRjaGVz IChjb21wbGV4X29wZXJhdGlvbl90IG9wLA0KIAkJCSAgICAgIHNscF90cmVlX3RvX2xvYWRfcGVy bV9tYXBfdCAqcGVybV9jYWNoZSwNCisJCQkgICAgICBzbHBfY29tcGF0X25vZGVzX21hcF90ICpj b21wYXRfY2FjaGUsDQogCQkJICAgICAgc2xwX3RyZWUgKiByZWZfbm9kZSwgdmVjPHNscF90cmVl PiAqb3BzKQ0KIHsNCiAgIGludGVybmFsX2ZuIGlmbiA9IElGTl9MQVNUOw0KQEAgLTExOTcsNiAr MTI1OCw4IEBAIGNvbXBsZXhfZm1zX3BhdHRlcm46Om1hdGNoZXMgKGNvbXBsZXhfb3BlcmF0aW9u X3Qgb3AsDQogICBpZiAoIXZlY3RfbWF0Y2hfZXhwcmVzc2lvbl9wIChyb290LCBNSU5VU19FWFBS KSkNCiAgICAgcmV0dXJuIElGTl9MQVNUOw0KIA0KKyAgLyogVE9ETzogU3VwcG9ydCBpbnZhcmlh bnRzIGhlcmUsIHdpdGggdGhlIG5ldyBsYXlvdXQgQ0FERCBub3cNCisJICAgY2FuIG1hdGNoIGJl Zm9yZSB3ZSBnZXQgYSBjaGFuY2UgdG8gdHJ5IENGTVMuICAqLw0KICAgYXV0byBub2RlcyA9IFNM UF9UUkVFX0NISUxEUkVOIChyb290KTsNCiAgIGlmICghdmVjdF9tYXRjaF9leHByZXNzaW9uX3Ag KG5vZGVzWzFdLCBNVUxUX0VYUFIpDQogICAgICAgfHwgdmVjdF9kZXRlY3RfcGFpcl9vcCAobm9k ZXNbMF0pICE9IFBMVVNfTUlOVVMpDQpAQCAtMTIxNywxNiArMTI4MCwxNCBAQCBjb21wbGV4X2Zt c19wYXR0ZXJuOjptYXRjaGVzIChjb21wbGV4X29wZXJhdGlvbl90IG9wLA0KICAgICAgIHx8ICF2 ZWN0X21hdGNoX2V4cHJlc3Npb25fcCAobDBub2RlWzFdLCBNVUxUX0VYUFIpKQ0KICAgICByZXR1 cm4gSUZOX0xBU1Q7DQogDQotICBib29sIGlzX25lZyA9IHZlY3Rfbm9ybWFsaXplX2NvbmpfbG9j IChsZWZ0X29wKTsNCi0NCi0gIGJvb2wgY29ual9maXJzdF9vcGVyYW5kID0gZmFsc2U7DQotICBp ZiAoIXZlY3RfdmFsaWRhdGVfbXVsdGlwbGljYXRpb24gKHBlcm1fY2FjaGUsIHJpZ2h0X29wLCBs ZWZ0X29wLCBmYWxzZSwNCi0JCQkJICAgICAmY29ual9maXJzdF9vcGVyYW5kLCB0cnVlKSkNCisg IGVudW0gX2Nvbmpfc3RhdHVzIHN0YXR1czsNCisgIGlmICghdmVjdF92YWxpZGF0ZV9tdWx0aXBs aWNhdGlvbiAocGVybV9jYWNoZSwgY29tcGF0X2NhY2hlLCByaWdodF9vcCwNCisJCQkJICAgICBs ZWZ0X29wLCB0cnVlLCAmc3RhdHVzKSkNCiAgICAgcmV0dXJuIElGTl9MQVNUOw0KIA0KLSAgaWYg KCFpc19uZWcpDQorICBpZiAoc3RhdHVzID09IENPTkpfTk9ORSkNCiAgICAgaWZuID0gSUZOX0NP TVBMRVhfRk1TOw0KLSAgZWxzZSBpZiAoaXNfbmVnKQ0KKyAgZWxzZQ0KICAgICBpZm4gPSBJRk5f Q09NUExFWF9GTVNfQ09OSjsNCiANCiAgIGlmICghdmVjdF9wYXR0ZXJuX3ZhbGlkYXRlX29wdGFi IChpZm4sICpyZWZfbm9kZSkpDQpAQCAtMTI0MywyNiArMTMwNCwxMiBAQCBjb21wbGV4X2Ztc19w YXR0ZXJuOjptYXRjaGVzIChjb21wbGV4X29wZXJhdGlvbl90IG9wLA0KICAgICAgIG9wcy0+cXVp Y2tfcHVzaCAocmlnaHRfb3BbMV0pOw0KICAgICAgIG9wcy0+cXVpY2tfcHVzaCAobGVmdF9vcFsx XSk7DQogICAgIH0NCi0gIGVsc2UgaWYgKGtpbmQgPT0gUEVSTV9UT1ApDQotICAgIHsNCi0gICAg ICBvcHMtPnF1aWNrX3B1c2ggKGwwbm9kZVswXSk7DQotICAgICAgb3BzLT5xdWlja19wdXNoIChy aWdodF9vcFsxXSk7DQotICAgICAgb3BzLT5xdWlja19wdXNoIChyaWdodF9vcFswXSk7DQotICAg ICAgb3BzLT5xdWlja19wdXNoIChsZWZ0X29wWzBdKTsNCi0gICAgfQ0KLSAgZWxzZSBpZiAoa2lu ZCA9PSBQRVJNX0VWRU5FVkVOICYmICFpc19uZWcpDQotICAgIHsNCi0gICAgICBvcHMtPnF1aWNr X3B1c2ggKGwwbm9kZVswXSk7DQotICAgICAgb3BzLT5xdWlja19wdXNoIChyaWdodF9vcFsxXSk7 DQotICAgICAgb3BzLT5xdWlja19wdXNoIChyaWdodF9vcFswXSk7DQotICAgICAgb3BzLT5xdWlj a19wdXNoIChsZWZ0X29wWzBdKTsNCi0gICAgfQ0KICAgZWxzZQ0KICAgICB7DQogICAgICAgb3Bz LT5xdWlja19wdXNoIChsMG5vZGVbMF0pOw0KICAgICAgIG9wcy0+cXVpY2tfcHVzaCAocmlnaHRf b3BbMV0pOw0KICAgICAgIG9wcy0+cXVpY2tfcHVzaCAocmlnaHRfb3BbMF0pOw0KLSAgICAgIG9w cy0+cXVpY2tfcHVzaCAobGVmdF9vcFsxXSk7DQorICAgICAgb3BzLT5xdWlja19wdXNoIChsZWZ0 X29wWzBdKTsNCiAgICAgfQ0KIA0KICAgcmV0dXJuIGlmbjsNCkBAIC0xMjcyLDEzICsxMzE5LDE0 IEBAIGNvbXBsZXhfZm1zX3BhdHRlcm46Om1hdGNoZXMgKGNvbXBsZXhfb3BlcmF0aW9uX3Qgb3As DQogDQogdmVjdF9wYXR0ZXJuKg0KIGNvbXBsZXhfZm1zX3BhdHRlcm46OnJlY29nbml6ZSAoc2xw X3RyZWVfdG9fbG9hZF9wZXJtX21hcF90ICpwZXJtX2NhY2hlLA0KKwkJCQlzbHBfY29tcGF0X25v ZGVzX21hcF90ICpjb21wYXRfY2FjaGUsDQogCQkJCXNscF90cmVlICpub2RlKQ0KIHsNCiAgIGF1 dG9fdmVjPHNscF90cmVlPiBvcHM7DQogICBjb21wbGV4X29wZXJhdGlvbl90IG9wDQogICAgID0g dmVjdF9kZXRlY3RfcGFpcl9vcCAoKm5vZGUsIHRydWUsICZvcHMpOw0KICAgaW50ZXJuYWxfZm4g aWZuDQotICAgID0gY29tcGxleF9mbXNfcGF0dGVybjo6bWF0Y2hlcyAob3AsIHBlcm1fY2FjaGUs IG5vZGUsICZvcHMpOw0KKyAgICA9IGNvbXBsZXhfZm1zX3BhdHRlcm46Om1hdGNoZXMgKG9wLCBw ZXJtX2NhY2hlLCBjb21wYXRfY2FjaGUsIG5vZGUsICZvcHMpOw0KICAgaWYgKGlmbiA9PSBJRk5f TEFTVCkNCiAgICAgcmV0dXJuIE5VTEw7DQogDQpAQCAtMTMwNSw5ICsxMzUzLDkgQEAgY29tcGxl eF9mbXNfcGF0dGVybjo6YnVpbGQgKHZlY19pbmZvICp2aW5mbykNCiAgIFNMUF9UUkVFX0NISUxE UkVOICgqdGhpcy0+bV9ub2RlKS5jcmVhdGUgKDMpOw0KIA0KICAgLyogRmlyc3QgcmUtYXJyYW5n ZSB0aGUgY2hpbGRyZW4uICAqLw0KLSAgU0xQX1RSRUVfQ0hJTERSRU4gKCp0aGlzLT5tX25vZGUp LnF1aWNrX3B1c2ggKHRoaXMtPm1fb3BzWzBdKTsNCiAgIFNMUF9UUkVFX0NISUxEUkVOICgqdGhp cy0+bV9ub2RlKS5xdWlja19wdXNoICh0aGlzLT5tX29wc1sxXSk7DQogICBTTFBfVFJFRV9DSElM RFJFTiAoKnRoaXMtPm1fbm9kZSkucXVpY2tfcHVzaCAobmV3bm9kZSk7DQorICBTTFBfVFJFRV9D SElMRFJFTiAoKnRoaXMtPm1fbm9kZSkucXVpY2tfcHVzaCAodGhpcy0+bV9vcHNbMF0pOw0KIA0K ICAgLyogQW5kIHRoZW4gcmV3cml0ZSB0aGUgbm9kZSBpdHNlbGYuICAqLw0KICAgY29tcGxleF9w YXR0ZXJuOjpidWlsZCAodmluZm8pOw0KQEAgLTEzMzQsMTEgKzEzODIsMTIgQEAgY2xhc3MgY29t cGxleF9vcGVyYXRpb25zX3BhdHRlcm4gOiBwdWJsaWMgY29tcGxleF9wYXR0ZXJuDQogICBwdWJs aWM6DQogICAgIHZvaWQgYnVpbGQgKHZlY19pbmZvICopOw0KICAgICBzdGF0aWMgaW50ZXJuYWxf Zm4NCi0gICAgbWF0Y2hlcyAoY29tcGxleF9vcGVyYXRpb25fdCBvcCwgc2xwX3RyZWVfdG9fbG9h ZF9wZXJtX21hcF90ICosIHNscF90cmVlICosDQotCSAgICAgdmVjPHNscF90cmVlPiAqKTsNCisg ICAgbWF0Y2hlcyAoY29tcGxleF9vcGVyYXRpb25fdCBvcCwgc2xwX3RyZWVfdG9fbG9hZF9wZXJt X21hcF90ICosDQorCSAgICAgc2xwX2NvbXBhdF9ub2Rlc19tYXBfdCAqLCBzbHBfdHJlZSAqLCB2 ZWM8c2xwX3RyZWU+ICopOw0KIA0KICAgICBzdGF0aWMgdmVjdF9wYXR0ZXJuKg0KLSAgICByZWNv Z25pemUgKHNscF90cmVlX3RvX2xvYWRfcGVybV9tYXBfdCAqLCBzbHBfdHJlZSAqKTsNCisgICAg cmVjb2duaXplIChzbHBfdHJlZV90b19sb2FkX3Blcm1fbWFwX3QgKiwgc2xwX2NvbXBhdF9ub2Rl c19tYXBfdCAqLA0KKwkgICAgICAgc2xwX3RyZWUgKik7DQogfTsNCiANCiAvKiBEdW1teSBtYXRj aGVzIGltcGxlbWVudGF0aW9uIGZvciBwcm94eSBvYmplY3QuICAqLw0KQEAgLTEzNDcsNiArMTM5 Niw3IEBAIGludGVybmFsX2ZuDQogY29tcGxleF9vcGVyYXRpb25zX3BhdHRlcm46Og0KIG1hdGNo ZXMgKGNvbXBsZXhfb3BlcmF0aW9uX3QgLyogb3AgKi8sDQogCSBzbHBfdHJlZV90b19sb2FkX3Bl cm1fbWFwX3QgKiAvKiBwZXJtX2NhY2hlICovLA0KKwkgc2xwX2NvbXBhdF9ub2Rlc19tYXBfdCAq IC8qIGNvbXBhdF9jYWNoZSAqLywNCiAJIHNscF90cmVlICogLyogcmVmX25vZGUgKi8sIHZlYzxz bHBfdHJlZT4gKiAvKiBvcHMgKi8pDQogew0KICAgcmV0dXJuIElGTl9MQVNUOw0KQEAgLTEzNTYs NiArMTQwNiw3IEBAIG1hdGNoZXMgKGNvbXBsZXhfb3BlcmF0aW9uX3QgLyogb3AgKi8sDQogDQog dmVjdF9wYXR0ZXJuKg0KIGNvbXBsZXhfb3BlcmF0aW9uc19wYXR0ZXJuOjpyZWNvZ25pemUgKHNs cF90cmVlX3RvX2xvYWRfcGVybV9tYXBfdCAqcGVybV9jYWNoZSwNCisJCQkJICAgICAgIHNscF9j b21wYXRfbm9kZXNfbWFwX3QgKmNjYWNoZSwNCiAJCQkJICAgICAgIHNscF90cmVlICpub2RlKQ0K IHsNCiAgIGF1dG9fdmVjPHNscF90cmVlPiBvcHM7DQpAQCAtMTM2MywxNSArMTQxNCwxNSBAQCBj b21wbGV4X29wZXJhdGlvbnNfcGF0dGVybjo6cmVjb2duaXplIChzbHBfdHJlZV90b19sb2FkX3Bl cm1fbWFwX3QgKnBlcm1fY2FjaGUsDQogICAgID0gdmVjdF9kZXRlY3RfcGFpcl9vcCAoKm5vZGUs IHRydWUsICZvcHMpOw0KICAgaW50ZXJuYWxfZm4gaWZuID0gSUZOX0xBU1Q7DQogDQotICBpZm4g ID0gY29tcGxleF9mbXNfcGF0dGVybjo6bWF0Y2hlcyAob3AsIHBlcm1fY2FjaGUsIG5vZGUsICZv cHMpOw0KKyAgaWZuICA9IGNvbXBsZXhfZm1zX3BhdHRlcm46Om1hdGNoZXMgKG9wLCBwZXJtX2Nh Y2hlLCBjY2FjaGUsIG5vZGUsICZvcHMpOw0KICAgaWYgKGlmbiAhPSBJRk5fTEFTVCkNCiAgICAg cmV0dXJuIGNvbXBsZXhfZm1zX3BhdHRlcm46Om1rSW5zdGFuY2UgKG5vZGUsICZvcHMsIGlmbik7 DQogDQotICBpZm4gID0gY29tcGxleF9tdWxfcGF0dGVybjo6bWF0Y2hlcyAob3AsIHBlcm1fY2Fj aGUsIG5vZGUsICZvcHMpOw0KKyAgaWZuICA9IGNvbXBsZXhfbXVsX3BhdHRlcm46Om1hdGNoZXMg KG9wLCBwZXJtX2NhY2hlLCBjY2FjaGUsIG5vZGUsICZvcHMpOw0KICAgaWYgKGlmbiAhPSBJRk5f TEFTVCkNCiAgICAgcmV0dXJuIGNvbXBsZXhfbXVsX3BhdHRlcm46Om1rSW5zdGFuY2UgKG5vZGUs ICZvcHMsIGlmbik7DQogDQotICBpZm4gID0gY29tcGxleF9hZGRfcGF0dGVybjo6bWF0Y2hlcyAo b3AsIHBlcm1fY2FjaGUsIG5vZGUsICZvcHMpOw0KKyAgaWZuICA9IGNvbXBsZXhfYWRkX3BhdHRl cm46Om1hdGNoZXMgKG9wLCBwZXJtX2NhY2hlLCBjY2FjaGUsIG5vZGUsICZvcHMpOw0KICAgaWYg KGlmbiAhPSBJRk5fTEFTVCkNCiAgICAgcmV0dXJuIGNvbXBsZXhfYWRkX3BhdHRlcm46Om1rSW5z dGFuY2UgKG5vZGUsICZvcHMsIGlmbik7DQogDQpAQCAtMTM5OCwxMSArMTQ0OSwxMyBAQCBjbGFz cyBhZGRzdWJfcGF0dGVybiA6IHB1YmxpYyB2ZWN0X3BhdHRlcm4NCiAgICAgdm9pZCBidWlsZCAo dmVjX2luZm8gKik7DQogDQogICAgIHN0YXRpYyB2ZWN0X3BhdHRlcm4qDQotICAgIHJlY29nbml6 ZSAoc2xwX3RyZWVfdG9fbG9hZF9wZXJtX21hcF90ICosIHNscF90cmVlICopOw0KKyAgICByZWNv Z25pemUgKHNscF90cmVlX3RvX2xvYWRfcGVybV9tYXBfdCAqLCBzbHBfY29tcGF0X25vZGVzX21h cF90ICosDQorCSAgICAgICBzbHBfdHJlZSAqKTsNCiB9Ow0KIA0KIHZlY3RfcGF0dGVybiAqDQot YWRkc3ViX3BhdHRlcm46OnJlY29nbml6ZSAoc2xwX3RyZWVfdG9fbG9hZF9wZXJtX21hcF90ICos IHNscF90cmVlICpub2RlXykNCithZGRzdWJfcGF0dGVybjo6cmVjb2duaXplIChzbHBfdHJlZV90 b19sb2FkX3Blcm1fbWFwX3QgKiwNCisJCQkgICBzbHBfY29tcGF0X25vZGVzX21hcF90ICosIHNs cF90cmVlICpub2RlXykNCiB7DQogICBzbHBfdHJlZSBub2RlID0gKm5vZGVfOw0KICAgaWYgKFNM UF9UUkVFX0NPREUgKG5vZGUpICE9IFZFQ19QRVJNX0VYUFINCmRpZmYgLS1naXQgYS9nY2MvdHJl ZS12ZWN0LXNscC5jIGIvZ2NjL3RyZWUtdmVjdC1zbHAuYw0KaW5kZXggYjkxMmMzNTc3ZGY2MWE2 OTRkNWJiOWUyMmM1MzAzZmU2YTQ4YWI2ZS4uY2I1NzdmOGE2MTJkNTgzMjU0ZTQyYmIwNmE2ZDdh MDg3NWRlNWU3NSAxMDA2NDQNCi0tLSBhL2djYy90cmVlLXZlY3Qtc2xwLmMNCisrKyBiL2djYy90 cmVlLXZlY3Qtc2xwLmMNCkBAIC04MDQsNyArODA0LDcgQEAgdmVjdF9nZXRfYW5kX2NoZWNrX3Ns cF9kZWZzICh2ZWNfaW5mbyAqdmluZm8sIHVuc2lnbmVkIGNoYXIgc3dhcCwNCiAvKiBSZXR1cm4g dHJ1ZSBpZiBjYWxsIHN0YXRlbWVudHMgQ0FMTDEgYW5kIENBTEwyIGFyZSBzaW1pbGFyIGVub3Vn aA0KICAgIHRvIGJlIGNvbWJpbmVkIGludG8gdGhlIHNhbWUgU0xQIGdyb3VwLiAgKi8NCiANCi1z dGF0aWMgYm9vbA0KK2Jvb2wNCiBjb21wYXRpYmxlX2NhbGxzX3AgKGdjYWxsICpjYWxsMSwgZ2Nh bGwgKmNhbGwyKQ0KIHsNCiAgIHVuc2lnbmVkIGludCBuYXJncyA9IGdpbXBsZV9jYWxsX251bV9h cmdzIChjYWxsMSk7DQpAQCAtMjkwNyw2ICsyOTA3LDcgQEAgb3B0aW1pemVfbG9hZF9yZWRpc3Ry aWJ1dGlvbiAoc2NhbGFyX3N0bXRzX3RvX3NscF90cmVlX21hcF90ICpic3RfbWFwLA0KIHN0YXRp YyBib29sDQogdmVjdF9tYXRjaF9zbHBfcGF0dGVybnNfMiAoc2xwX3RyZWUgKnJlZl9ub2RlLCB2 ZWNfaW5mbyAqdmluZm8sDQogCQkJICAgc2xwX3RyZWVfdG9fbG9hZF9wZXJtX21hcF90ICpwZXJt X2NhY2hlLA0KKwkJCSAgIHNscF9jb21wYXRfbm9kZXNfbWFwX3QgKmNvbXBhdF9jYWNoZSwNCiAJ CQkgICBoYXNoX3NldDxzbHBfdHJlZT4gKnZpc2l0ZWQpDQogew0KICAgdW5zaWduZWQgaTsNCkBA IC0yOTE4LDExICsyOTE5LDEzIEBAIHZlY3RfbWF0Y2hfc2xwX3BhdHRlcm5zXzIgKHNscF90cmVl ICpyZWZfbm9kZSwgdmVjX2luZm8gKnZpbmZvLA0KICAgc2xwX3RyZWUgY2hpbGQ7DQogICBGT1Jf RUFDSF9WRUNfRUxUIChTTFBfVFJFRV9DSElMRFJFTiAobm9kZSksIGksIGNoaWxkKQ0KICAgICBm b3VuZF9wIHw9IHZlY3RfbWF0Y2hfc2xwX3BhdHRlcm5zXzIgKCZTTFBfVFJFRV9DSElMRFJFTiAo bm9kZSlbaV0sDQotCQkJCQkgIHZpbmZvLCBwZXJtX2NhY2hlLCB2aXNpdGVkKTsNCisJCQkJCSAg dmluZm8sIHBlcm1fY2FjaGUsIGNvbXBhdF9jYWNoZSwNCisJCQkJCSAgdmlzaXRlZCk7DQogDQog ICBmb3IgKHVuc2lnbmVkIHggPSAwOyB4IDwgbnVtX19zbHBfcGF0dGVybnM7IHgrKykNCiAgICAg ew0KLSAgICAgIHZlY3RfcGF0dGVybiAqcGF0dGVybiA9IHNscF9wYXR0ZXJuc1t4XSAocGVybV9j YWNoZSwgcmVmX25vZGUpOw0KKyAgICAgIHZlY3RfcGF0dGVybiAqcGF0dGVybg0KKwk9IHNscF9w YXR0ZXJuc1t4XSAocGVybV9jYWNoZSwgY29tcGF0X2NhY2hlLCByZWZfbm9kZSk7DQogICAgICAg aWYgKHBhdHRlcm4pDQogCXsNCiAJICBwYXR0ZXJuLT5idWlsZCAodmluZm8pOw0KQEAgLTI5NDMs NyArMjk0Niw4IEBAIHZlY3RfbWF0Y2hfc2xwX3BhdHRlcm5zXzIgKHNscF90cmVlICpyZWZfbm9k ZSwgdmVjX2luZm8gKnZpbmZvLA0KIHN0YXRpYyBib29sDQogdmVjdF9tYXRjaF9zbHBfcGF0dGVy bnMgKHNscF9pbnN0YW5jZSBpbnN0YW5jZSwgdmVjX2luZm8gKnZpbmZvLA0KIAkJCSBoYXNoX3Nl dDxzbHBfdHJlZT4gKnZpc2l0ZWQsDQotCQkJIHNscF90cmVlX3RvX2xvYWRfcGVybV9tYXBfdCAq cGVybV9jYWNoZSkNCisJCQkgc2xwX3RyZWVfdG9fbG9hZF9wZXJtX21hcF90ICpwZXJtX2NhY2hl LA0KKwkJCSBzbHBfY29tcGF0X25vZGVzX21hcF90ICpjb21wYXRfY2FjaGUpDQogew0KICAgRFVN UF9WRUNUX1NDT1BFICgidmVjdF9tYXRjaF9zbHBfcGF0dGVybnMiKTsNCiAgIHNscF90cmVlICpy ZWZfbm9kZSA9ICZTTFBfSU5TVEFOQ0VfVFJFRSAoaW5zdGFuY2UpOw0KQEAgLTI5NTMsNyArMjk1 Nyw4IEBAIHZlY3RfbWF0Y2hfc2xwX3BhdHRlcm5zIChzbHBfaW5zdGFuY2UgaW5zdGFuY2UsIHZl Y19pbmZvICp2aW5mbywNCiAJCSAgICAgIkFuYWx5emluZyBTTFAgdHJlZSAlcCBmb3IgcGF0dGVy bnNcbiIsDQogCQkgICAgIFNMUF9JTlNUQU5DRV9UUkVFIChpbnN0YW5jZSkpOw0KIA0KLSAgcmV0 dXJuIHZlY3RfbWF0Y2hfc2xwX3BhdHRlcm5zXzIgKHJlZl9ub2RlLCB2aW5mbywgcGVybV9jYWNo ZSwgdmlzaXRlZCk7DQorICByZXR1cm4gdmVjdF9tYXRjaF9zbHBfcGF0dGVybnNfMiAocmVmX25v ZGUsIHZpbmZvLCBwZXJtX2NhY2hlLCBjb21wYXRfY2FjaGUsDQorCQkJCSAgICB2aXNpdGVkKTsN CiB9DQogDQogLyogU1RNVF9JTkZPIGlzIGEgc3RvcmUgZ3JvdXAgb2Ygc2l6ZSBHUk9VUF9TSVpF IHRoYXQgd2UgYXJlIGNvbnNpZGVyaW5nDQpAQCAtMzQzNywxMiArMzQ0MiwxNCBAQCB2ZWN0X2Fu YWx5emVfc2xwICh2ZWNfaW5mbyAqdmluZm8sIHVuc2lnbmVkIG1heF90cmVlX3NpemUpDQogDQog ICBoYXNoX3NldDxzbHBfdHJlZT4gdmlzaXRlZF9wYXR0ZXJuczsNCiAgIHNscF90cmVlX3RvX2xv YWRfcGVybV9tYXBfdCBwZXJtX2NhY2hlOw0KKyAgc2xwX2NvbXBhdF9ub2Rlc19tYXBfdCBjb21w YXRfY2FjaGU7DQogDQogICAvKiBTZWUgaWYgYW55IHBhdHRlcm5zIGNhbiBiZSBmb3VuZCBpbiB0 aGUgU0xQIHRyZWUuICAqLw0KICAgYm9vbCBwYXR0ZXJuX2ZvdW5kID0gZmFsc2U7DQogICBGT1Jf RUFDSF9WRUNfRUxUIChMT09QX1ZJTkZPX1NMUF9JTlNUQU5DRVMgKHZpbmZvKSwgaSwgaW5zdGFu Y2UpDQogICAgIHBhdHRlcm5fZm91bmQgfD0gdmVjdF9tYXRjaF9zbHBfcGF0dGVybnMgKGluc3Rh bmNlLCB2aW5mbywNCi0JCQkJCSAgICAgICZ2aXNpdGVkX3BhdHRlcm5zLCAmcGVybV9jYWNoZSk7 DQorCQkJCQkgICAgICAmdmlzaXRlZF9wYXR0ZXJucywgJnBlcm1fY2FjaGUsDQorCQkJCQkgICAg ICAmY29tcGF0X2NhY2hlKTsNCiANCiAgIC8qIElmIGFueSB3ZXJlIGZvdW5kIG9wdGltaXplIHBl cm11dGF0aW9ucyBvZiBsb2Fkcy4gICovDQogICBpZiAocGF0dGVybl9mb3VuZCkNCmRpZmYgLS1n aXQgYS9nY2MvdHJlZS12ZWN0b3JpemVyLmggYi9nY2MvdHJlZS12ZWN0b3JpemVyLmgNCmluZGV4 IDJmNmUxZTI2OGZiMDdlOWRlMDY1ZmY5YzQ1YWY4NzU0NmU1NjVkNjYuLjgzY2QwOTE5Yzc4Mzhj NjU1NzZlMWRlYmQ4ODFlMGVjNjM2YTYwNWEgMTAwNjQ0DQotLS0gYS9nY2MvdHJlZS12ZWN0b3Jp emVyLmgNCisrKyBiL2djYy90cmVlLXZlY3Rvcml6ZXIuaA0KQEAgLTIyNjgsNiArMjI2OCw3IEBA IGV4dGVybiB2b2lkIGR1cGxpY2F0ZV9hbmRfaW50ZXJsZWF2ZSAodmVjX2luZm8gKiwgZ2ltcGxl X3NlcSAqLCB0cmVlLA0KIGV4dGVybiBpbnQgdmVjdF9nZXRfcGxhY2VfaW5faW50ZXJsZWF2aW5n X2NoYWluIChzdG10X3ZlY19pbmZvLCBzdG10X3ZlY19pbmZvKTsNCiBleHRlcm4gc2xwX3RyZWUg dmVjdF9jcmVhdGVfbmV3X3NscF9ub2RlICh1bnNpZ25lZCwgdHJlZV9jb2RlKTsNCiBleHRlcm4g dm9pZCB2ZWN0X2ZyZWVfc2xwX3RyZWUgKHNscF90cmVlKTsNCitleHRlcm4gYm9vbCBjb21wYXRp YmxlX2NhbGxzX3AgKGdjYWxsICosIGdjYWxsICopOw0KIA0KIC8qIEluIHRyZWUtdmVjdC1wYXR0 ZXJucy5jLiAgKi8NCiBleHRlcm4gdm9pZA0KQEAgLTIzMDYsNiArMjMwNywxMiBAQCB0eXBlZGVm IGVudW0gX2NvbXBsZXhfcGVybV9raW5kcyB7DQogdHlwZWRlZiBoYXNoX21hcCA8c2xwX3RyZWUs IGNvbXBsZXhfcGVybV9raW5kc190Pg0KICAgc2xwX3RyZWVfdG9fbG9hZF9wZXJtX21hcF90Ow0K IA0KKy8qIENhY2hlIGZyb20gbm9kZXMgcGFpciB0byBiZWluZyBjb21wYXRpYmxlIG9yIG5vdC4g ICovDQordHlwZWRlZiBwYWlyX2hhc2ggPG5vZnJlZV9wdHJfaGFzaCA8X3NscF90cmVlPiwNCisJ CSAgIG5vZnJlZV9wdHJfaGFzaCA8X3NscF90cmVlPj4gc2xwX25vZGVfaGFzaDsNCit0eXBlZGVm IGhhc2hfbWFwIDxzbHBfbm9kZV9oYXNoLCBib29sPiBzbHBfY29tcGF0X25vZGVzX21hcF90Ow0K Kw0KKw0KIC8qIFZlY3RvciBwYXR0ZXJuIG1hdGNoZXIgYmFzZSBjbGFzcy4gIEFsbCBTTFAgcGF0 dGVybiBtYXRjaGVycyBtdXN0IGluaGVyaXQNCiAgICBmcm9tIHRoaXMgdHlwZS4gICovDQogDQpA QCAtMjMzOCw3ICsyMzQ1LDggQEAgY2xhc3MgdmVjdF9wYXR0ZXJuDQogICBwdWJsaWM6DQogDQog ICAgIC8qIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgcGF0dGVybiBtYXRjaGVyIGNsYXNz IG9mIHRoZSBnaXZlbiB0eXBlLiAgKi8NCi0gICAgc3RhdGljIHZlY3RfcGF0dGVybiogcmVjb2du aXplIChzbHBfdHJlZV90b19sb2FkX3Blcm1fbWFwX3QgKiwgc2xwX3RyZWUgKik7DQorICAgIHN0 YXRpYyB2ZWN0X3BhdHRlcm4qIHJlY29nbml6ZSAoc2xwX3RyZWVfdG9fbG9hZF9wZXJtX21hcF90 ICosDQorCQkJCSAgICBzbHBfY29tcGF0X25vZGVzX21hcF90ICosIHNscF90cmVlICopOw0KIA0K ICAgICAvKiBCdWlsZCB0aGUgcGF0dGVybiBmcm9tIHRoZSBkYXRhIGNvbGxlY3RlZCBzbyBmYXIu ICAqLw0KICAgICB2aXJ0dWFsIHZvaWQgYnVpbGQgKHZlY19pbmZvICopID0gMDsNCkBAIC0yMzUy LDYgKzIzNjAsNyBAQCBjbGFzcyB2ZWN0X3BhdHRlcm4NCiANCiAvKiBGdW5jdGlvbiBwb2ludGVy IHRvIGNyZWF0ZSBhIG5ldyBwYXR0ZXJuIG1hdGNoZXIgZnJvbSBhIGdlbmVyaWMgdHlwZS4gICov DQogdHlwZWRlZiB2ZWN0X3BhdHRlcm4qICgqdmVjdF9wYXR0ZXJuX2RlY2xfdCkgKHNscF90cmVl X3RvX2xvYWRfcGVybV9tYXBfdCAqLA0KKwkJCQkJICAgICAgc2xwX2NvbXBhdF9ub2Rlc19tYXBf dCAqLA0KIAkJCQkJICAgICAgc2xwX3RyZWUgKik7DQogDQogLyogTGlzdCBvZiBzdXBwb3J0ZWQg cGF0dGVybiBtYXRjaGVycy4gICovDQo= --_002_VI1PR08MB5325E4E7FC25F1ECF90FC1E1FF7B9VI1PR08MB5325eurp_ Content-Type: application/octet-stream; name="rb15145.patch" Content-Description: rb15145.patch Content-Disposition: attachment; filename="rb15145.patch"; size=41026; creation-date="Mon, 20 Dec 2021 16:17:23 GMT"; modification-date="Mon, 20 Dec 2021 16:16:43 GMT" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2djYy9kb2MvbWQudGV4aSBiL2djYy9kb2MvbWQudGV4aQppbmRleCA5ZWMw NTFlOTRlMTBjY2E5ZWVjMjc3M2UxYjhjMDFiNzRiNmVhNGRiLi5hZDA2YjAyZDM2ODc2MDgyYWZl NGMzZjNmYjUxODg3ZjdhNTIyYjIzIDEwMDY0NAotLS0gYS9nY2MvZG9jL21kLnRleGkKKysrIGIv Z2NjL2RvYy9tZC50ZXhpCkBAIC02MzI1LDEyICs2MzI1LDEzIEBAIFBlcmZvcm0gYSB2ZWN0b3Ig bXVsdGlwbHkgYW5kIGFjY3VtdWxhdGUgdGhhdCBpcyBzZW1hbnRpY2FsbHkgdGhlIHNhbWUgYXMK IGEgbXVsdGlwbHkgYW5kIGFjY3VtdWxhdGUgb2YgY29tcGxleCBudW1iZXJzLgogCiBAc21hbGxl eGFtcGxlCi0gIGNvbXBsZXggVFlQRSBjW05dOwotICBjb21wbGV4IFRZUEUgYVtOXTsKLSAgY29t cGxleCBUWVBFIGJbTl07CisgIGNvbXBsZXggVFlQRSBvcDBbTl07CisgIGNvbXBsZXggVFlQRSBv cDFbTl07CisgIGNvbXBsZXggVFlQRSBvcDJbTl07CisgIGNvbXBsZXggVFlQRSBvcDNbTl07CiAg IGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSArPSAxKQogICAgIEB7Ci0gICAgICBjW2ldICs9IGFb aV0gKiBiW2ldOworICAgICAgb3AwW2ldID0gb3AxW2ldICogb3AyW2ldICsgb3AzW2ldOwogICAg IEB9CiBAZW5kIHNtYWxsZXhhbXBsZQogCkBAIC02MzQ4LDEyICs2MzQ5LDEzIEBAIHRoZSBzYW1l IGFzIGEgbXVsdGlwbHkgYW5kIGFjY3VtdWxhdGUgb2YgY29tcGxleCBudW1iZXJzIHdoZXJlIHRo ZSBzZWNvbmQKIG11bHRpcGx5IGFyZ3VtZW50cyBpcyBjb25qdWdhdGVkLgogCiBAc21hbGxleGFt cGxlCi0gIGNvbXBsZXggVFlQRSBjW05dOwotICBjb21wbGV4IFRZUEUgYVtOXTsKLSAgY29tcGxl eCBUWVBFIGJbTl07CisgIGNvbXBsZXggVFlQRSBvcDBbTl07CisgIGNvbXBsZXggVFlQRSBvcDFb Tl07CisgIGNvbXBsZXggVFlQRSBvcDJbTl07CisgIGNvbXBsZXggVFlQRSBvcDNbTl07CiAgIGZv ciAoaW50IGkgPSAwOyBpIDwgTjsgaSArPSAxKQogICAgIEB7Ci0gICAgICBjW2ldICs9IGFbaV0g KiBjb25qIChiW2ldKTsKKyAgICAgIG9wMFtpXSA9IG9wMVtpXSAqIGNvbmogKG9wMltpXSkgKyBv cDNbaV07CiAgICAgQH0KIEBlbmQgc21hbGxleGFtcGxlCiAKQEAgLTYzNzAsMTIgKzYzNzIsMTMg QEAgUGVyZm9ybSBhIHZlY3RvciBtdWx0aXBseSBhbmQgc3VidHJhY3QgdGhhdCBpcyBzZW1hbnRp Y2FsbHkgdGhlIHNhbWUgYXMKIGEgbXVsdGlwbHkgYW5kIHN1YnRyYWN0IG9mIGNvbXBsZXggbnVt YmVycy4KIAogQHNtYWxsZXhhbXBsZQotICBjb21wbGV4IFRZUEUgY1tOXTsKLSAgY29tcGxleCBU WVBFIGFbTl07Ci0gIGNvbXBsZXggVFlQRSBiW05dOworICBjb21wbGV4IFRZUEUgb3AwW05dOwor ICBjb21wbGV4IFRZUEUgb3AxW05dOworICBjb21wbGV4IFRZUEUgb3AyW05dOworICBjb21wbGV4 IFRZUEUgb3AzW05dOwogICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkgKz0gMSkKICAgICBAewot ICAgICAgY1tpXSAtPSBhW2ldICogYltpXTsKKyAgICAgIG9wMFtpXSA9IG9wMVtpXSAqIG9wMltp XSAtIG9wM1tpXTsKICAgICBAfQogQGVuZCBzbWFsbGV4YW1wbGUKIApAQCAtNjM5MywxMiArNjM5 NiwxMyBAQCB0aGUgc2FtZSBhcyBhIG11bHRpcGx5IGFuZCBzdWJ0cmFjdCBvZiBjb21wbGV4IG51 bWJlcnMgd2hlcmUgdGhlIHNlY29uZAogbXVsdGlwbHkgYXJndW1lbnRzIGlzIGNvbmp1Z2F0ZWQu CiAKIEBzbWFsbGV4YW1wbGUKLSAgY29tcGxleCBUWVBFIGNbTl07Ci0gIGNvbXBsZXggVFlQRSBh W05dOwotICBjb21wbGV4IFRZUEUgYltOXTsKKyAgY29tcGxleCBUWVBFIG9wMFtOXTsKKyAgY29t cGxleCBUWVBFIG9wMVtOXTsKKyAgY29tcGxleCBUWVBFIG9wMltOXTsKKyAgY29tcGxleCBUWVBF IG9wM1tOXTsKICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpICs9IDEpCiAgICAgQHsKLSAgICAg IGNbaV0gLT0gYVtpXSAqIGNvbmogKGJbaV0pOworICAgICAgb3AwW2ldID0gb3AxW2ldICogY29u aiAob3AyW2ldKSAtIG9wM1tpXTsKICAgICBAfQogQGVuZCBzbWFsbGV4YW1wbGUKIApAQCAtNjQx NSwxMiArNjQxOSwxMiBAQCBQZXJmb3JtIGEgdmVjdG9yIG11bHRpcGx5IHRoYXQgaXMgc2VtYW50 aWNhbGx5IHRoZSBzYW1lIGFzIG11bHRpcGx5IG9mCiBjb21wbGV4IG51bWJlcnMuCiAKIEBzbWFs bGV4YW1wbGUKLSAgY29tcGxleCBUWVBFIGNbTl07Ci0gIGNvbXBsZXggVFlQRSBhW05dOwotICBj b21wbGV4IFRZUEUgYltOXTsKKyAgY29tcGxleCBUWVBFIG9wMFtOXTsKKyAgY29tcGxleCBUWVBF IG9wMVtOXTsKKyAgY29tcGxleCBUWVBFIG9wMltOXTsKICAgZm9yIChpbnQgaSA9IDA7IGkgPCBO OyBpICs9IDEpCiAgICAgQHsKLSAgICAgIGNbaV0gPSBhW2ldICogYltpXTsKKyAgICAgIG9wMFtp XSA9IG9wMVtpXSAqIG9wMltpXTsKICAgICBAfQogQGVuZCBzbWFsbGV4YW1wbGUKIApAQCAtNjQz NywxMiArNjQ0MSwxMiBAQCBQZXJmb3JtIGEgdmVjdG9yIG11bHRpcGx5IGJ5IGNvbmp1Z2F0ZSB0 aGF0IGlzIHNlbWFudGljYWxseSB0aGUgc2FtZSBhcyBhCiBtdWx0aXBseSBvZiBjb21wbGV4IG51 bWJlcnMgd2hlcmUgdGhlIHNlY29uZCBtdWx0aXBseSBhcmd1bWVudHMgaXMgY29uanVnYXRlZC4K IAogQHNtYWxsZXhhbXBsZQotICBjb21wbGV4IFRZUEUgY1tOXTsKLSAgY29tcGxleCBUWVBFIGFb Tl07Ci0gIGNvbXBsZXggVFlQRSBiW05dOworICBjb21wbGV4IFRZUEUgb3AwW05dOworICBjb21w bGV4IFRZUEUgb3AxW05dOworICBjb21wbGV4IFRZUEUgb3AyW05dOwogICBmb3IgKGludCBpID0g MDsgaSA8IE47IGkgKz0gMSkKICAgICBAewotICAgICAgY1tpXSA9IGFbaV0gKiBjb25qIChiW2ld KTsKKyAgICAgIG9wMFtpXSA9IG9wMVtpXSAqIGNvbmogKG9wMltpXSk7CiAgICAgQH0KIEBlbmQg c21hbGxleGFtcGxlCiAKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZysrLmRnL3ZlY3QvcHI5 OTE0OS5jYyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL3ZlY3QvcHI5OTE0OS5jYwppbmRleCBlNmUw NTk0YTMzNmZhMDUzZmZiYTY0YTEyZTJkZTQzYTRlMzczZjQ5Li5iYjlmNWZhODlmMTJiMTg0MzY4 YmY1NDg4ZDZlOTQzMmMyMTY2NDYzIDEwMDc1NQotLS0gYS9nY2MvdGVzdHN1aXRlL2crKy5kZy92 ZWN0L3ByOTkxNDkuY2MKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvdmVjdC9wcjk5MTQ5LmNj CkBAIC0yNCw0ICsyNCw0IEBAIHB1YmxpYzoKIH0gbjsKIG1haW4oKSB7IG4uaigpOyB9CiAKLS8q IHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAic3RtdC4qQ09NUExFWF9NVUwiIDEg InNscDIiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJzdG10 LipDT01QTEVYX01VTCIgMSAic2xwMiIgeyB4ZmFpbCB7IHZlY3RfZmxvYXQgfSB9IH0gfSAqLwpk aWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC9jb21wbGV4L3ByMTAyODE5LTEu YyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvY29tcGxleC9wcjEwMjgxOS0xLmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMC4uNDZiOWE1NWYwNTI3OWQ3MzJmYTE0MThlMDJmNzc5Y2Y2OTNlZGUwNwotLS0gL2Rldi9u dWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvY29tcGxleC9wcjEwMjgxOS0xLmMK QEAgLTAsMCArMSwyMCBAQAorLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctYWRkLW9w dGlvbnMgYXJtX3Y4XzNhX2NvbXBsZXhfbmVvbiB9ICovCisKK2Zsb2F0IGZbMTJdWzEwMF07CisK K3ZvaWQgYmFkMShmbG9hdCB2MSwgZmxvYXQgdjIpCit7CisgIGZvciAoaW50IHIgPSAwOyByIDwg MTAwOyByICs9IDQpCisgICAgeworICAgICAgaW50IGkgPSByICsgMTsKKyAgICAgIGZbMF1bcl0g PSBmWzFdW3JdICogKGZbMl1bcl0gKyB2MikgLSBmWzFdW2ldICogKGZbMl1baV0gKyB2MSk7Cisg ICAgICBmWzBdW2ldID0gZlsxXVtyXSAqIChmWzJdW2ldICsgdjEpICsgZlsxXVtpXSAqIChmWzJd W3JdICsgdjIpOworICAgICAgZlswXVtyKzJdID0gZlsxXVtyKzJdICogKGZbMl1bcisyXSArIHYy KSAtIGZbMV1baSsyXSAqIChmWzJdW2krMl0gKyB2MSk7CisgICAgICBmWzBdW2krMl0gPSBmWzFd W3IrMl0gKiAoZlsyXVtpKzJdICsgdjEpICsgZlsxXVtpKzJdICogKGZbMl1bcisyXSArIHYyKTsK KyAgICAgIC8vICAgICAgICAgICAgICAgICAgXl5eXl5eXiAgICAgICAgICAgICBeXl5eXl5eCisg ICAgfQorfQorCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgIkZvdW5kIENPTVBMRVhf TVVMIiAidmVjdCIgeyB0YXJnZXQgeyB2ZWN0X2Zsb2F0IH0gfSB9IH0gKi8KKwpkaWZmIC0tZ2l0 IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC9jb21wbGV4L3ByMTAyODE5LTIuYyBiL2djYy90 ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvY29tcGxleC9wcjEwMjgxOS0yLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmZl NjQ2ZWZlNTdmN2FkMDc1NDFiMGZiOTY2MDE1OTZmNDZkYzVmOAotLS0gL2Rldi9udWxsCisrKyBi L2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvY29tcGxleC9wcjEwMjgxOS0yLmMKQEAgLTAsMCAr MSwxNyBAQAorLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctYWRkLW9wdGlvbnMgYXJt X3Y4XzNhX2NvbXBsZXhfbmVvbiB9ICovCisKK2Zsb2F0IGZbMTJdWzEwMF07CisKK3ZvaWQgYmFk MShmbG9hdCB2MSwgZmxvYXQgdjIpCit7CisgIGZvciAoaW50IHIgPSAwOyByIDwgMTAwOyByICs9 IDIpCisgICAgeworICAgICAgaW50IGkgPSByICsgMTsKKyAgICAgIGZbMF1bcl0gPSBmWzFdW3Jd ICogKGZbMl1bcl0gKyB2MSkgLSBmWzFdW2ldICogKGZbMl1baV0gKyB2Mik7CisgICAgICBmWzBd W2ldID0gZlsxXVtyXSAqIChmWzJdW2ldICsgdjEpICsgZlsxXVtpXSAqIChmWzJdW3JdICsgdjIp OworICAgIH0KK30KKworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLW5vdCAiRm91bmQg Q09NUExFWF9NVUwiICJ2ZWN0IiB7IHRhcmdldCB7IHZlY3RfZmxvYXQgfSB9IH0gfSAqLworCmRp ZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L2NvbXBsZXgvcHIxMDI4MTktMy5j IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC9jb21wbGV4L3ByMTAyODE5LTMuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwLi41Zjk4YWEyMDRkOGIxMWIwY2I0MzNmODk2NWRiYjcyY2Y4OTQwZGUxCi0tLSAvZGV2L251 bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC9jb21wbGV4L3ByMTAyODE5LTMuYwpA QCAtMCwwICsxLDE3IEBACisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1hZGQtb3B0 aW9ucyBhcm1fdjhfM2FfY29tcGxleF9uZW9uIH0gKi8KKworZmxvYXQgZlsxMl1bMTAwXTsKKwor dm9pZCBnb29kMShmbG9hdCB2MSwgZmxvYXQgdjIpCit7CisgIGZvciAoaW50IHIgPSAwOyByIDwg MTAwOyByICs9IDIpCisgICAgeworICAgICAgaW50IGkgPSByICsgMTsKKyAgICAgIGZbMF1bcl0g PSBmWzFdW3JdICogKGZbMl1bcl0gKyB2MikgLSBmWzFdW2ldICogKGZbMl1baV0gKyB2MSk7Cisg ICAgICBmWzBdW2ldID0gZlsxXVtyXSAqIChmWzJdW2ldICsgdjEpICsgZlsxXVtpXSAqIChmWzJd W3JdICsgdjIpOworICAgIH0KK30KKworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJG b3VuZCBDT01QTEVYX01VTCIgInZlY3QiIHsgdGFyZ2V0IHsgdmVjdF9mbG9hdCB9IH0gfSB9ICov CisKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvY29tcGxleC9wcjEwMjgx OS00LmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L2NvbXBsZXgvcHIxMDI4MTktNC5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAuLjg4Mjg1MTc4OWM1MDg1ZTczNDAwMDYwOTExNGJlNDgwZDNiMDhiZDAKLS0tIC9k ZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L2NvbXBsZXgvcHIxMDI4MTkt NC5jCkBAIC0wLDAgKzEsMTcgQEAKKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLWFk ZC1vcHRpb25zIGFybV92OF8zYV9jb21wbGV4X25lb24gfSAqLworCitmbG9hdCBmWzEyXVsxMDBd OworCit2b2lkIGdvb2QxKCkKK3sKKyAgZm9yIChpbnQgciA9IDA7IHIgPCAxMDA7IHIgKz0gMikK KyAgICB7CisgICAgICBpbnQgaSA9IHIgKyAxOworICAgICAgZlswXVtyXSA9IGZbMV1bcl0gKiBm WzJdW3JdIC0gZlsxXVtpXSAqIGZbMl1baV07CisgICAgICBmWzBdW2ldID0gZlsxXVtyXSAqIGZb Ml1baV0gKyBmWzFdW2ldICogZlsyXVtyXTsKKyAgICB9Cit9CisKKy8qIHsgZGctZmluYWwgeyBz Y2FuLXRyZWUtZHVtcCAiRm91bmQgQ09NUExFWF9NVUwiICJ2ZWN0IiB7IHRhcmdldCB7IHZlY3Rf ZmxvYXQgfSB9IH0gfSAqLworCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0 L2NvbXBsZXgvcHIxMDI4MTktNS5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC9jb21wbGV4 L3ByMTAyODE5LTUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YTJkNTQ5ZDY1ZjNmMjdkNDA3ZmIwYmQ0Njk0NzNl NmE1YzMzM2FlCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC9j b21wbGV4L3ByMTAyODE5LTUuYwpAQCAtMCwwICsxLDE3IEBACisvKiB7IGRnLWRvIGNvbXBpbGUg fSAqLworLyogeyBkZy1hZGQtb3B0aW9ucyBhcm1fdjhfM2FfY29tcGxleF9uZW9uIH0gKi8KKwor ZmxvYXQgZlsxMl1bMTAwXTsKKwordm9pZCBnb29kMigpCit7CisgIGZvciAoaW50IHIgPSAwOyBy IDwgMTAwOyByICs9IDIpCisgICAgeworICAgICAgaW50IGkgPSByICsgMTsKKyAgICAgIGZbMF1b cl0gPSBmWzFdW3JdICogKGZbMl1bcl0gKyAxKSAtIGZbMV1baV0gKiAoZlsyXVtpXSArIDEpOwor ICAgICAgZlswXVtpXSA9IGZbMV1bcl0gKiAoZlsyXVtpXSArIDEpICsgZlsxXVtpXSAqIChmWzJd W3JdICsgMSk7CisgICAgfQorfQorCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgIkZv dW5kIENPTVBMRVhfTVVMIiAidmVjdCIgeyB0YXJnZXQgeyB2ZWN0X2Zsb2F0IH0gfSB9IH0gKi8K KwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC9jb21wbGV4L3ByMTAyODE5 LTYuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvY29tcGxleC9wcjEwMjgxOS02LmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMC4uNzFlNjZkYmUzYjI5ZWVjMWZmZmI4ZGY5YjIxNjAyMmZkYzBhZjU0ZQotLS0gL2Rl di9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvY29tcGxleC9wcjEwMjgxOS02 LmMKQEAgLTAsMCArMSwxOCBAQAorLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctYWRk LW9wdGlvbnMgYXJtX3Y4XzNhX2NvbXBsZXhfbmVvbiB9ICovCisKK2Zsb2F0IGZbMTJdWzEwMF07 CisKK3ZvaWQgYmFkMSgpCit7CisgIGZvciAoaW50IHIgPSAwOyByIDwgMTAwOyByICs9IDIpCisg ICAgeworICAgICAgaW50IGkgPSByICsgMTsKKyAgICAgIGZbMF1bcl0gPSBmWzFdW3JdICogZlsy XVtyXSAtIGZbMV1baV0gKiBmWzNdW2ldOworICAgICAgZlswXVtpXSA9IGZbMV1bcl0gKiBmWzJd W2ldICsgZlsxXVtpXSAqIGZbM11bcl07CisgICAgICAvLyAgICAgICAgICAgICAgICAgIF5eXl5e Xl4gICAgICAgICAgICAgXl5eXl5eXgorICAgIH0KK30KKworLyogeyBkZy1maW5hbCB7IHNjYW4t dHJlZS1kdW1wLW5vdCAiRm91bmQgQ09NUExFWF9NVUwiICJ2ZWN0IiB7IHRhcmdldCB7IHZlY3Rf ZmxvYXQgfSB9IH0gfSAqLworCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0 L2NvbXBsZXgvcHIxMDI4MTktNy5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC9jb21wbGV4 L3ByMTAyODE5LTcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MzY2NzJmM2M4YmI0NzRhZDVmYTRiYjYxYjNhMzZi NTU1YWNmM2NmCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC9j b21wbGV4L3ByMTAyODE5LTcuYwpAQCAtMCwwICsxLDE4IEBACisvKiB7IGRnLWRvIGNvbXBpbGUg fSAqLworLyogeyBkZy1hZGQtb3B0aW9ucyBhcm1fdjhfM2FfY29tcGxleF9uZW9uIH0gKi8KKwor ZmxvYXQgZlsxMl1bMTAwXTsKKwordm9pZCBiYWQyKCkKK3sKKyAgZm9yIChpbnQgciA9IDA7IHIg PCAxMDA7IHIgKz0gMikKKyAgICB7CisgICAgICBpbnQgaSA9IHIgKyAxOworICAgICAgZlswXVty XSA9IGZbMV1bcl0gKiAoZlsyXVtyXSArIDEpIC0gZlsxXVtpXSAqIGZbMl1baV07CisgICAgICBm WzBdW2ldID0gZlsxXVtyXSAqIChmWzJdW2ldICsgMSkgKyBmWzFdW2ldICogZlsyXVtyXTsKKyAg ICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eCisgICAgfQorfQorCisvKiB7IGRn LWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtbm90ICJGb3VuZCBDT01QTEVYX01VTCIgInZlY3QiIHsg dGFyZ2V0IHsgdmVjdF9mbG9hdCB9IH0gfSB9ICovCisKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3Vp dGUvZ2NjLmRnL3ZlY3QvY29tcGxleC9wcjEwMjgxOS04LmMgYi9nY2MvdGVzdHN1aXRlL2djYy5k Zy92ZWN0L2NvbXBsZXgvcHIxMDI4MTktOC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA3YjQ4MTQ4Njg4YjdkNTMw ZTU4OTFkMDIzZDU1OGI1OGE0ODVjMjMKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRl L2djYy5kZy92ZWN0L2NvbXBsZXgvcHIxMDI4MTktOC5jCkBAIC0wLDAgKzEsMTggQEAKKy8qIHsg ZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLWFkZC1vcHRpb25zIGFybV92OF8zYV9jb21wbGV4 X25lb24gfSAqLworCitmbG9hdCBmWzEyXVsxMDBdOworCit2b2lkIGJhZDMoKQoreworICBmb3Ig KGludCByID0gMDsgciA8IDEwMDsgciArPSAyKQorICAgIHsKKyAgICAgIGludCBpID0gciArIDE7 CisgICAgICBmWzBdW3JdID0gZlsxXVtyXSAqIGZbMl1bcl0gLSBmWzFdW3JdICogZlsyXVtpXTsK KyAgICAgIGZbMF1baV0gPSBmWzFdW3JdICogZlsyXVtpXSArIGZbMV1baV0gKiBmWzJdW3JdOwor ICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eXgorICAgIH0KK30KKwor LyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLW5vdCAiRm91bmQgQ09NUExFWF9NVUwiICJ2 ZWN0IiB7IHRhcmdldCB7IHZlY3RfZmxvYXQgfSB9IH0gfSAqLworCmRpZmYgLS1naXQgYS9nY2Mv dGVzdHN1aXRlL2djYy5kZy92ZWN0L2NvbXBsZXgvcHIxMDI4MTktOS5jIGIvZ2NjL3Rlc3RzdWl0 ZS9nY2MuZGcvdmVjdC9jb21wbGV4L3ByMTAyODE5LTkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NjU1ODUyNDM0 YjIxYjM4MWZlN2VlMzE2ZThjYWYzZDQ4NWI4ZWUxCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rl c3RzdWl0ZS9nY2MuZGcvdmVjdC9jb21wbGV4L3ByMTAyODE5LTkuYwpAQCAtMCwwICsxLDIxIEBA CisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1hZGQtb3B0aW9ucyBhcm1fdjhfM2Ff Y29tcGxleF9uZW9uIH0gKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8Y29tcGxl eC5oPgorCisjZGVmaW5lIE4gMjAwCisjZGVmaW5lIFRZUEUgZmxvYXQKKyNkZWZpbmUgVFlQRTIg ZmxvYXQKKwordm9pZCBnIChUWVBFMiBjb21wbGV4IGFbcmVzdHJpY3QgTl0sIFRZUEUgY29tcGxl eCBiW3Jlc3RyaWN0IE5dLCBUWVBFIGNvbXBsZXggY1tyZXN0cmljdCBOXSkKK3sKKyAgZm9yIChp bnQgaT0wOyBpIDwgTjsgaSsrKQorICAgIHsKKyAgICAgIGNbaV0gLT0gIGFbaV0gKiBiWzBdOwor ICAgIH0KK30KKworLyogVGhlIHBhdHRlcm4gb3ZlcmxhcHMgd2l0aCBDT01QTEVYX0FERCBzbyB3 ZSBuZWVkIHRvIHN1cHBvcnQgY29uc3VtaW5nIEFERHMgaW4gQ09NUExFWF9GTVMuICAqLworCisv KiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgIkZvdW5kIENPTVBMRVhfRk1TIiAidmVjdCIg eyB4ZmFpbCB7IHZlY3RfZmxvYXQgfSB9IH0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0 ZS9nY2MuZGcvdmVjdC9jb21wbGV4L3ByMTAzMTY5LmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92 ZWN0L2NvbXBsZXgvcHIxMDMxNjkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYmZhYmJkODVhMGVlZGZiNDE1NmE4 MjU3NDMyNDEyNmU5MDgzZmM1Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2Mu ZGcvdmVjdC9jb21wbGV4L3ByMTAzMTY5LmMKQEAgLTAsMCArMSwxMiBAQAorLyogeyBkZy1kbyBj b21waWxlIHsgdGFyZ2V0IHsgdmVjdF9kb3VibGUgfSB9IH0gKi8KKy8qIHsgZGctYWRkLW9wdGlv bnMgYXJtX3Y4XzNhX2NvbXBsZXhfbmVvbiB9ICovCisvKiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9u cyAiLU8yIC1mdmVjdC1jb3N0LW1vZGVsPXVubGltaXRlZCIgfSAqLworCitfQ29tcGxleCBkb3Vi bGUgYl8wLCBjXzA7CisKK3ZvaWQKK211bDI3MHNuZCAodm9pZCkKK3sKKyAgY18wID0gYl8wICog MS4waUYgKiAxLjBpRjsKK30KKwpkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtZGF0YS1yZWYuaCBiL2dj Yy90cmVlLWRhdGEtcmVmLmgKaW5kZXggNzRmNTc5YzlmM2YyM2JhYzI1ZDIxNTQ2MDY4YzJhYjQz MjA5YWEyYi4uOGFkNWZhNTIxMjc5YjIwZmE1ZTYzZWVjZjQ0MmQ1ZGM1YzE2ZTdlZSAxMDA2NDQK LS0tIGEvZ2NjL3RyZWUtZGF0YS1yZWYuaAorKysgYi9nY2MvdHJlZS1kYXRhLXJlZi5oCkBAIC02 MDAsMTAgKzYwMCwxMSBAQCBzYW1lX2RhdGFfcmVmc19iYXNlX29iamVjdHMgKGRhdGFfcmVmZXJl bmNlX3AgYSwgZGF0YV9yZWZlcmVuY2VfcCBiKQogfQogCiAvKiBSZXR1cm4gdHJ1ZSB3aGVuIHRo ZSBkYXRhIHJlZmVyZW5jZXMgQSBhbmQgQiBhcmUgYWNjZXNzaW5nIHRoZSBzYW1lCi0gICBtZW1v cnkgb2JqZWN0IHdpdGggdGhlIHNhbWUgYWNjZXNzIGZ1bmN0aW9ucy4gICovCisgICBtZW1vcnkg b2JqZWN0IHdpdGggdGhlIHNhbWUgYWNjZXNzIGZ1bmN0aW9ucy4gIE9wdGlvbmFsbHkgc2tpcCB0 aGUKKyAgIGxhc3QgT0ZGU0VUIGRpbWVuc2lvbnMgaW4gdGhlIGRhdGEgcmVmZXJlbmNlLiAgKi8K IAogc3RhdGljIGlubGluZSBib29sCi1zYW1lX2RhdGFfcmVmcyAoZGF0YV9yZWZlcmVuY2VfcCBh LCBkYXRhX3JlZmVyZW5jZV9wIGIpCitzYW1lX2RhdGFfcmVmcyAoZGF0YV9yZWZlcmVuY2VfcCBh LCBkYXRhX3JlZmVyZW5jZV9wIGIsIGludCBvZmZzZXQgPSAwKQogewogICB1bnNpZ25lZCBpbnQg aTsKIApAQCAtNjE0LDcgKzYxNSw3IEBAIHNhbWVfZGF0YV9yZWZzIChkYXRhX3JlZmVyZW5jZV9w IGEsIGRhdGFfcmVmZXJlbmNlX3AgYikKICAgaWYgKCFzYW1lX2RhdGFfcmVmc19iYXNlX29iamVj dHMgKGEsIGIpKQogICAgIHJldHVybiBmYWxzZTsKIAotICBmb3IgKGkgPSAwOyBpIDwgRFJfTlVN X0RJTUVOU0lPTlMgKGEpOyBpKyspCisgIGZvciAoaSA9IG9mZnNldDsgaSA8IERSX05VTV9ESU1F TlNJT05TIChhKTsgaSsrKQogICAgIGlmICghZXFfZXZvbHV0aW9uc19wIChEUl9BQ0NFU1NfRk4g KGEsIGkpLCBEUl9BQ0NFU1NfRk4gKGIsIGkpKSkKICAgICAgIHJldHVybiBmYWxzZTsKIApkaWZm IC0tZ2l0IGEvZ2NjL3RyZWUtdmVjdC1zbHAtcGF0dGVybnMuYyBiL2djYy90cmVlLXZlY3Qtc2xw LXBhdHRlcm5zLmMKaW5kZXggMDM1MDQ0MWZhZDk2OTBjZDVkMDQzMzcxNzFjYTM0NzBhMDY0YTU3 MS4uMDIwYzI5YmJhMDhjNWJkODA1MDNhMmRiYzA0MjkyZjhmZDMxMGIzYyAxMDA2NDQKLS0tIGEv Z2NjL3RyZWUtdmVjdC1zbHAtcGF0dGVybnMuYworKysgYi9nY2MvdHJlZS12ZWN0LXNscC1wYXR0 ZXJucy5jCkBAIC0xNDksMTIgKzE0OSwxMyBAQCBpc19saW5lYXJfbG9hZF9wIChsb2FkX3Blcm11 dGF0aW9uX3QgbG9hZHMpCiAgIGludCB2YWxpZF9wYXR0ZXJucyA9IDQ7CiAgIEZPUl9FQUNIX1ZF Q19FTFQgKGxvYWRzLCBpLCBsb2FkKQogICAgIHsKLSAgICAgIGlmIChjYW5kaWRhdGVzWzBdICE9 IFBFUk1fVU5LTk9XTiAmJiBsb2FkICE9IDEpCisgICAgICB1bnNpZ25lZCBhZGpfbG9hZCA9IGxv YWQgJSAyOworICAgICAgaWYgKGNhbmRpZGF0ZXNbMF0gIT0gUEVSTV9VTktOT1dOICYmIGFkal9s b2FkICE9IDEpCiAJewogCSAgY2FuZGlkYXRlc1swXSA9IFBFUk1fVU5LTk9XTjsKIAkgIHZhbGlk X3BhdHRlcm5zLS07CiAJfQotICAgICAgaWYgKGNhbmRpZGF0ZXNbMV0gIT0gUEVSTV9VTktOT1dO ICYmIGxvYWQgIT0gMCkKKyAgICAgIGlmIChjYW5kaWRhdGVzWzFdICE9IFBFUk1fVU5LTk9XTiAm JiBhZGpfbG9hZCAhPSAwKQogCXsKIAkgIGNhbmRpZGF0ZXNbMV0gPSBQRVJNX1VOS05PV047CiAJ ICB2YWxpZF9wYXR0ZXJucy0tOwpAQCAtNTk2LDExICs1OTcsMTIgQEAgY2xhc3MgY29tcGxleF9h ZGRfcGF0dGVybiA6IHB1YmxpYyBjb21wbGV4X3BhdHRlcm4KICAgcHVibGljOgogICAgIHZvaWQg YnVpbGQgKHZlY19pbmZvICopOwogICAgIHN0YXRpYyBpbnRlcm5hbF9mbgotICAgIG1hdGNoZXMg KGNvbXBsZXhfb3BlcmF0aW9uX3Qgb3AsIHNscF90cmVlX3RvX2xvYWRfcGVybV9tYXBfdCAqLCBz bHBfdHJlZSAqLAotCSAgICAgdmVjPHNscF90cmVlPiAqKTsKKyAgICBtYXRjaGVzIChjb21wbGV4 X29wZXJhdGlvbl90IG9wLCBzbHBfdHJlZV90b19sb2FkX3Blcm1fbWFwX3QgKiwKKwkgICAgIHNs cF9jb21wYXRfbm9kZXNfbWFwX3QgKiwgc2xwX3RyZWUgKiwgdmVjPHNscF90cmVlPiAqKTsKIAog ICAgIHN0YXRpYyB2ZWN0X3BhdHRlcm4qCi0gICAgcmVjb2duaXplIChzbHBfdHJlZV90b19sb2Fk X3Blcm1fbWFwX3QgKiwgc2xwX3RyZWUgKik7CisgICAgcmVjb2duaXplIChzbHBfdHJlZV90b19s b2FkX3Blcm1fbWFwX3QgKiwgc2xwX2NvbXBhdF9ub2Rlc19tYXBfdCAqLAorCSAgICAgICBzbHBf dHJlZSAqKTsKIAogICAgIHN0YXRpYyB2ZWN0X3BhdHRlcm4qCiAgICAgbWtJbnN0YW5jZSAoc2xw X3RyZWUgKm5vZGUsIHZlYzxzbHBfdHJlZT4gKm1fb3BzLCBpbnRlcm5hbF9mbiBpZm4pCkBAIC02 NDcsNiArNjQ5LDcgQEAgY29tcGxleF9hZGRfcGF0dGVybjo6YnVpbGQgKHZlY19pbmZvICp2aW5m bykKIGludGVybmFsX2ZuCiBjb21wbGV4X2FkZF9wYXR0ZXJuOjptYXRjaGVzIChjb21wbGV4X29w ZXJhdGlvbl90IG9wLAogCQkJICAgICAgc2xwX3RyZWVfdG9fbG9hZF9wZXJtX21hcF90ICpwZXJt X2NhY2hlLAorCQkJICAgICAgc2xwX2NvbXBhdF9ub2Rlc19tYXBfdCAqIC8qIGNvbXBhdF9jYWNo ZSAqLywKIAkJCSAgICAgIHNscF90cmVlICpub2RlLCB2ZWM8c2xwX3RyZWU+ICpvcHMpCiB7CiAg IGludGVybmFsX2ZuIGlmbiA9IElGTl9MQVNUOwpAQCAtNjkyLDEzICs2OTUsMTQgQEAgY29tcGxl eF9hZGRfcGF0dGVybjo6bWF0Y2hlcyAoY29tcGxleF9vcGVyYXRpb25fdCBvcCwKIAogdmVjdF9w YXR0ZXJuKgogY29tcGxleF9hZGRfcGF0dGVybjo6cmVjb2duaXplIChzbHBfdHJlZV90b19sb2Fk X3Blcm1fbWFwX3QgKnBlcm1fY2FjaGUsCisJCQkJc2xwX2NvbXBhdF9ub2Rlc19tYXBfdCAqY29t cGF0X2NhY2hlLAogCQkJCXNscF90cmVlICpub2RlKQogewogICBhdXRvX3ZlYzxzbHBfdHJlZT4g b3BzOwogICBjb21wbGV4X29wZXJhdGlvbl90IG9wCiAgICAgPSB2ZWN0X2RldGVjdF9wYWlyX29w ICgqbm9kZSwgdHJ1ZSwgJm9wcyk7CiAgIGludGVybmFsX2ZuIGlmbgotICAgID0gY29tcGxleF9h ZGRfcGF0dGVybjo6bWF0Y2hlcyAob3AsIHBlcm1fY2FjaGUsIG5vZGUsICZvcHMpOworICAgID0g Y29tcGxleF9hZGRfcGF0dGVybjo6bWF0Y2hlcyAob3AsIHBlcm1fY2FjaGUsIGNvbXBhdF9jYWNo ZSwgbm9kZSwgJm9wcyk7CiAgIGlmIChpZm4gPT0gSUZOX0xBU1QpCiAgICAgcmV0dXJuIE5VTEw7 CiAKQEAgLTcwOSwxNDcgKzcxMywyMTQgQEAgY29tcGxleF9hZGRfcGF0dGVybjo6cmVjb2duaXpl IChzbHBfdHJlZV90b19sb2FkX3Blcm1fbWFwX3QgKnBlcm1fY2FjaGUsCiAgKiBjb21wbGV4X211 bF9wYXR0ZXJuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0vKiBDaGVjayB0byBzZWUgaWYg ZWl0aGVyIG9mIHRoZSB0cmVlcyBpbiBBUkdTIGFyZSBhIE5FR0FURV9FWFBSLiAgSWYgdGhlIGZp cnN0Ci0gICBjaGlsZCAoYXJnc1swXSkgaXMgYSBORUdBVEVfRVhQUiB0aGVuIE5FR19GSVJTVF9Q IGlzIHNldCB0byBUUlVFLgotCi0gICBJZiBhIG5lZ2F0ZSBpcyBmb3VuZCB0aGVuIHRoZSB2YWx1 ZXMgaW4gQVJHUyBhcmUgcmVvcmRlcmVkIHN1Y2ggdGhhdCB0aGUKLSAgIG5lZ2F0ZSBub2RlIGlz IGFsd2F5cyB0aGUgc2Vjb25kIG9uZSBhbmQgdGhlIGVudHJ5IGlzIHJlcGxhY2VkIGJ5IHRoZSBj aGlsZAotICAgb2YgdGhlIG5lZ2F0ZSBub2RlLiAgKi8KKy8qIEhlbHBlciBmdW5jdGlvbiB0byBj aGVjayBpZiBQRVJNIGlzIEtJTkQgb3IgUEVSTV9UT1AuICAqLwogCiBzdGF0aWMgaW5saW5lIGJv b2wKLXZlY3Rfbm9ybWFsaXplX2NvbmpfbG9jICh2ZWM8c2xwX3RyZWU+ICZhcmdzLCBib29sICpu ZWdfZmlyc3RfcCA9IE5VTEwpCitpc19lcV9vcl90b3AgKHNscF90cmVlX3RvX2xvYWRfcGVybV9t YXBfdCAqcGVybV9jYWNoZSwKKwkgICAgICBzbHBfdHJlZSBvcDEsIGNvbXBsZXhfcGVybV9raW5k c190IGtpbmQxLAorCSAgICAgIHNscF90cmVlIG9wMiwgY29tcGxleF9wZXJtX2tpbmRzX3Qga2lu ZDIpCiB7Ci0gIGdjY19hc3NlcnQgKGFyZ3MubGVuZ3RoICgpID09IDIpOwotICBib29sIG5lZ19m b3VuZCA9IGZhbHNlOwotCi0gIGlmICh2ZWN0X21hdGNoX2V4cHJlc3Npb25fcCAoYXJnc1swXSwg TkVHQVRFX0VYUFIpKQotICAgIHsKLSAgICAgIHN0ZDo6c3dhcCAoYXJnc1swXSwgYXJnc1sxXSk7 Ci0gICAgICBuZWdfZm91bmQgPSB0cnVlOwotICAgICAgaWYgKG5lZ19maXJzdF9wKQotCSpuZWdf Zmlyc3RfcCA9IHRydWU7Ci0gICAgfQotICBlbHNlIGlmICh2ZWN0X21hdGNoX2V4cHJlc3Npb25f cCAoYXJnc1sxXSwgTkVHQVRFX0VYUFIpKQotICAgIHsKLSAgICAgIG5lZ19mb3VuZCA9IHRydWU7 Ci0gICAgICBpZiAobmVnX2ZpcnN0X3ApCi0JKm5lZ19maXJzdF9wID0gZmFsc2U7Ci0gICAgfQor ICBjb21wbGV4X3Blcm1fa2luZHNfdCBwZXJtMSA9IGxpbmVhcl9sb2Fkc19wIChwZXJtX2NhY2hl LCBvcDEpOworICBpZiAocGVybTEgIT0ga2luZDEgJiYgcGVybTEgIT0gUEVSTV9UT1ApCisgICAg cmV0dXJuIGZhbHNlOwogCi0gIGlmIChuZWdfZm91bmQpCi0gICAgYXJnc1sxXSA9IFNMUF9UUkVF X0NISUxEUkVOIChhcmdzWzFdKVswXTsKKyAgY29tcGxleF9wZXJtX2tpbmRzX3QgcGVybTIgPSBs aW5lYXJfbG9hZHNfcCAocGVybV9jYWNoZSwgb3AyKTsKKyAgaWYgKHBlcm0yICE9IGtpbmQyICYm IHBlcm0yICE9IFBFUk1fVE9QKQorICAgIHJldHVybiBmYWxzZTsKIAotICByZXR1cm4gbmVnX2Zv dW5kOworICByZXR1cm4gdHJ1ZTsKIH0KIAotLyogSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIGlm IFBFUk0gaXMgS0lORCBvciBQRVJNX1RPUC4gICovCitlbnVtIF9jb25qX3N0YXR1cyB7IENPTkpf Tk9ORSwgQ09OSl9GU1QsIENPTkpfU05EIH07CiAKIHN0YXRpYyBpbmxpbmUgYm9vbAotaXNfZXFf b3JfdG9wIChjb21wbGV4X3Blcm1fa2luZHNfdCBwZXJtLCBjb21wbGV4X3Blcm1fa2luZHNfdCBr aW5kKQorY29tcGF0aWJsZV9jb21wbGV4X25vZGVzX3AgKHNscF9jb21wYXRfbm9kZXNfbWFwX3Qg KmNvbXBhdF9jYWNoZSwKKwkJCSAgICBzbHBfdHJlZSBhLCBpbnQgKnBhLCBzbHBfdHJlZSBiLCBp bnQgKnBiKQogewotICByZXR1cm4gcGVybSA9PSBraW5kIHx8IHBlcm0gPT0gUEVSTV9UT1A7Ci19 CisgIGJvb2wgKnRtcDsKKyAgc3RkOjpwYWlyPHNscF90cmVlLCBzbHBfdHJlZT4ga2V5ID0gc3Rk OjptYWtlX3BhaXIoYSwgYik7CisgIGlmICgodG1wID0gY29tcGF0X2NhY2hlLT5nZXQgKGtleSkp ICE9IE5VTEwpCisgICAgcmV0dXJuICp0bXA7CiAKLS8qIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNo ZWNrcyB0byBzZWUgaWYgTEVGVF9PUCBhbmQgUklHSFRfT1AgYXJlIGJvdGggTVVMVF9FWFBSCi0g ICBub2RlcyBidXQgYWxzbyB0aGF0IHRoZXkgcmVwcmVzZW50IGFuIG9wZXJhdGlvbiB0aGF0IGlz IGVpdGhlciBhIGNvbXBsZXgKLSAgIG11bHRpcGxpY2F0aW9uIG9yIGEgY29tcGxleCBtdWx0aXBs aWNhdGlvbiBieSBjb25qdWdhdGVkIHZhbHVlLgorICAgY29tcGF0X2NhY2hlLT5wdXQgKGtleSwg ZmFsc2UpOwogCi0gICBPZiB0aGUgbmVnYXRpb24gaXMgZXhwZWN0ZWQgdG8gYmUgaW4gdGhlIGZp cnN0IGhhbGYgb2YgdGhlIHRyZWUgKEFzIHJlcXVpcmVkCi0gICBieSBhbiBGTVMgcGF0dGVybikg dGhlbiBORUdfRklSU1QgaXMgdHJ1ZS4gIElmIHRoZSBvcGVyYXRpb24gaXMgYSBjb25qdWdhdGUK LSAgIG9wZXJhdGlvbiB0aGVuIENPTkpfRklSU1RfT1BFUkFORCBpcyBzZXQgdG8gaW5kaWNhdGUg d2hldGhlciB0aGUgZmlyc3Qgb3IKLSAgIHNlY29uZCBvcGVyYW5kIGNvbnRhaW5zIHRoZSBjb25q dWdhdGUgb3BlcmF0aW9uLiAgKi8KKyAgaWYgKFNMUF9UUkVFX0NISUxEUkVOIChhKS5sZW5ndGgg KCkgIT0gU0xQX1RSRUVfQ0hJTERSRU4gKGIpLmxlbmd0aCAoKSkKKyAgICByZXR1cm4gZmFsc2U7 CiAKLXN0YXRpYyBpbmxpbmUgYm9vbAotdmVjdF92YWxpZGF0ZV9tdWx0aXBsaWNhdGlvbiAoc2xw X3RyZWVfdG9fbG9hZF9wZXJtX21hcF90ICpwZXJtX2NhY2hlLAotCQkJICAgICAgY29uc3QgdmVj PHNscF90cmVlPiAmbGVmdF9vcCwKLQkJCSAgICAgIGNvbnN0IHZlYzxzbHBfdHJlZT4gJnJpZ2h0 X29wLAotCQkJICAgICBib29sIG5lZ19maXJzdCwgYm9vbCAqY29ual9maXJzdF9vcGVyYW5kLAot CQkJICAgICBib29sIGZtcykKLXsKLSAgLyogVGhlIHByZXNlbmNlIG9mIGEgbmVnYXRpb24gaW5k aWNhdGVzIHRoYXQgd2UgaGF2ZSBlaXRoZXIgYSBjb25qdWdhdGUgb3IgYQotICAgICByb3RhdGlv bi4gIFdlIG5lZWQgdG8gZGlzdGluZ3Vpc2ggd2hpY2ggb25lLiAgKi8KLSAgKmNvbmpfZmlyc3Rf b3BlcmFuZCA9IGZhbHNlOwotICBjb21wbGV4X3Blcm1fa2luZHNfdCBraW5kOwotCi0gIC8qIENv bXBsZXggY29uanVnYXRlcyBoYXZlIHRoZSBuZWdhdGlvbiBvbiB0aGUgaW1hZ2luYXJ5IHBhcnQg b2YgdGhlCi0gICAgIG51bWJlciB3aGVyZSByb3RhdGlvbnMgYWZmZWN0IHRoZSByZWFsIGNvbXBv bmVudC4gIFNvIGNoZWNrIGlmIHRoZQotICAgICBuZWdhdGlvbiBpcyBvbiBhIGR1cCBvZiBsYW5l IDEuICAqLwotICBpZiAoZm1zKQorICBpZiAoU0xQX1RSRUVfREVGX1RZUEUgKGEpICE9IFNMUF9U UkVFX0RFRl9UWVBFIChiKSkKKyAgICByZXR1cm4gZmFsc2U7CisKKyAgLyogT25seSBpbnRlcm5h bCBub2RlcyBjYW4gYmUgbG9hZHMsIGFzIHN1Y2ggd2UgY2FuJ3QgY2hlY2sgZnVydGhlciBpZiB0 aGV5CisgICAgIGFyZSBleHRlcm5hbHMuICAqLworICBpZiAoU0xQX1RSRUVfREVGX1RZUEUgKGEp ICE9IHZlY3RfaW50ZXJuYWxfZGVmKQogICAgIHsKLSAgICAgIC8qIENhbm9uaWNhbGl6YXRpb24g Zm9yIGZtcyBpcyBub3QgY29uc2lzdGVudC4gU28gaGF2ZSB0byB0ZXN0IGJvdGgKLQkgdmFyaWFu dHMgdG8gYmUgc3VyZS4gIFRoaXMgbmVlZHMgdG8gYmUgZml4ZWQgaW4gdGhlIG1pZC1lbmQgc28K LQkgdGhpcyBwYXJ0IGNhbiBiZSBzaW1wbGVyLiAgKi8KLSAgICAgIGtpbmQgPSBsaW5lYXJfbG9h ZHNfcCAocGVybV9jYWNoZSwgcmlnaHRfb3BbMF0pOwotICAgICAgaWYgKCEoKGlzX2VxX29yX3Rv cCAobGluZWFyX2xvYWRzX3AgKHBlcm1fY2FjaGUsIHJpZ2h0X29wWzBdKSwgUEVSTV9PRERPREQp Ci0JICAgJiYgaXNfZXFfb3JfdG9wIChsaW5lYXJfbG9hZHNfcCAocGVybV9jYWNoZSwgcmlnaHRf b3BbMV0pLAotCQkJICAgICBQRVJNX09EREVWRU4pKQotCSAgfHwgKGtpbmQgPT0gUEVSTV9PRERF VkVOCi0JICAgICAgJiYgaXNfZXFfb3JfdG9wIChsaW5lYXJfbG9hZHNfcCAocGVybV9jYWNoZSwg cmlnaHRfb3BbMV0pLAotCQkJICAgICBQRVJNX09ERE9ERCkpKSkKLQlyZXR1cm4gZmFsc2U7Cisg ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgU0xQX1RSRUVfU0NBTEFSX09QUyAoYSkubGVu Z3RoICgpOyBpKyspCisJeworCSAgdHJlZSBvcDEgPSBTTFBfVFJFRV9TQ0FMQVJfT1BTIChhKVtw YVtpICUgMl1dOworCSAgdHJlZSBvcDIgPSBTTFBfVFJFRV9TQ0FMQVJfT1BTIChiKVtwYltpICUg Ml1dOworCSAgaWYgKCFvcGVyYW5kX2VxdWFsX3AgKG9wMSwgb3AyLCAwKSkKKwkgICAgcmV0dXJu IGZhbHNlOworCX0KKworICAgICAgY29tcGF0X2NhY2hlLT5wdXQgKGtleSwgdHJ1ZSk7CisgICAg ICByZXR1cm4gdHJ1ZTsKICAgICB9CisKKyAgYXV0byBhX3N0bXQgPSBTVE1UX1ZJTkZPX1NUTVQg KFNMUF9UUkVFX1JFUFJFU0VOVEFUSVZFIChhKSk7CisgIGF1dG8gYl9zdG10ID0gU1RNVF9WSU5G T19TVE1UIChTTFBfVFJFRV9SRVBSRVNFTlRBVElWRSAoYikpOworCisgIGlmIChnaW1wbGVfY29k ZSAoYV9zdG10KSAhPSBnaW1wbGVfY29kZSAoYl9zdG10KSkKKyAgICByZXR1cm4gZmFsc2U7CisK KyAgLyogY29kZSwgY2hpbGRyZW4sIHR5cGUsIGV4dGVybmFscywgbG9hZHMsIGNvbnN0YW50cyAg Ki8KKyAgaWYgKGdpbXBsZV9udW1fYXJncyAoYV9zdG10KSAhPSBnaW1wbGVfbnVtX2FyZ3MgKGJf c3RtdCkpCisgICAgcmV0dXJuIGZhbHNlOworCisgIC8qIEF0IHRoaXMgcG9pbnQsIGEgYW5kIGIg YXJlIGtub3duIHRvIGJlIHRoZSBzYW1lIGdpbXBsZSBvcGVyYXRpb25zLiAgKi8KKyAgaWYgKGlz X2dpbXBsZV9jYWxsIChhX3N0bXQpKQorICAgIHsKKwlpZiAoIWNvbXBhdGlibGVfY2FsbHNfcCAo ZHluX2Nhc3QgPGdjYWxsICo+IChhX3N0bXQpLAorCQkJCSBkeW5fY2FzdCA8Z2NhbGwgKj4gKGJf c3RtdCkpKQorCSAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgZWxzZSBpZiAoIWlzX2dpbXBsZV9h c3NpZ24gKGFfc3RtdCkpCisgICAgcmV0dXJuIGZhbHNlOwogICBlbHNlCiAgICAgewotICAgICAg aWYgKGxpbmVhcl9sb2Fkc19wIChwZXJtX2NhY2hlLCByaWdodF9vcFsxXSkgIT0gUEVSTV9PRERP REQKLQkgICYmICFpc19lcV9vcl90b3AgKGxpbmVhcl9sb2Fkc19wIChwZXJtX2NhY2hlLCByaWdo dF9vcFswXSksCi0JCQkgICAgUEVSTV9PRERFVkVOKSkKKyAgICAgIHRyZWVfY29kZSBhY29kZSA9 IGdpbXBsZV9hc3NpZ25fcmhzX2NvZGUgKGFfc3RtdCk7CisgICAgICB0cmVlX2NvZGUgYmNvZGUg PSBnaW1wbGVfYXNzaWduX3Joc19jb2RlIChiX3N0bXQpOworICAgICAgaWYgKChhY29kZSA9PSBS RUFMUEFSVF9FWFBSIHx8IGFjb2RlID09IElNQUdQQVJUX0VYUFIpCisJICAmJiAoYmNvZGUgPT0g UkVBTFBBUlRfRVhQUiB8fCBiY29kZSA9PSBJTUFHUEFSVF9FWFBSKSkKKwlyZXR1cm4gdHJ1ZTsK KworICAgICAgaWYgKGFjb2RlICE9IGJjb2RlKQogCXJldHVybiBmYWxzZTsKICAgICB9CiAKLSAg LyogRGVhbCB3aXRoIGRpZmZlcmVuY2VzIGluIGluZGV4ZXMuICAqLwotICBpbnQgaW5kZXgxID0g Zm1zID8gMSA6IDA7Ci0gIGludCBpbmRleDIgPSBmbXMgPyAwIDogMTsKLQotICAvKiBDaGVjayBp ZiB0aGUgY29uanVnYXRlIGlzIG9uIHRoZSBzZWNvbmQgZmlyc3Qgb3Igc2Vjb25kIG9wZXJhbmQu ICBUaGUKLSAgICAgb3JkZXIgb2YgdGhlIG5vZGUgd2l0aCB0aGUgY29uanVnYXRlIHZhbHVlIGRl dGVybWluZXMgdGhpcywgYW5kIHRoZSBkdXAKLSAgICAgbm9kZSBtdXN0IGJlIG9uZSBvZiBsYW5l IDAgb2YgdGhlIHNhbWUgRFIgYXMgdGhlIG5lZyBub2RlLiAgKi8KLSAga2luZCA9IGxpbmVhcl9s b2Fkc19wIChwZXJtX2NhY2hlLCBsZWZ0X29wW2luZGV4MV0pOwotICBpZiAoa2luZCA9PSBQRVJN X1RPUCkKKyAgaWYgKCFTTFBfVFJFRV9MT0FEX1BFUk1VVEFUSU9OIChhKS5leGlzdHMgKCkKKyAg ICAgIHx8ICFTTFBfVFJFRV9MT0FEX1BFUk1VVEFUSU9OIChiKS5leGlzdHMgKCkpCiAgICAgewot ICAgICAgaWYgKGxpbmVhcl9sb2Fkc19wIChwZXJtX2NhY2hlLCBsZWZ0X29wW2luZGV4Ml0pID09 IFBFUk1fRVZFTk9ERCkKLQlyZXR1cm4gdHJ1ZTsKKyAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7 IGkgPCBnaW1wbGVfbnVtX2FyZ3MgKGFfc3RtdCk7IGkrKykKKwl7CisJICB0cmVlIHQxID0gZ2lt cGxlX2FyZyAoYV9zdG10LCBpKTsKKwkgIHRyZWUgdDIgPSBnaW1wbGVfYXJnIChiX3N0bXQsIGkp OworCSAgaWYgKFRSRUVfQ09ERSAodDEpICE9IFRSRUVfQ09ERSAodDIpKQorCSAgICByZXR1cm4g ZmFsc2U7CisKKwkgIC8qIElmIFNTQSBuYW1lIHRoZW4gd2Ugd2lsbCBuZWVkIHRvIGluc3BlY3Qg dGhlIGNoaWxkcmVuCisJICAgICBzbyB3ZSBjYW4gcHVudCBoZXJlLiAgKi8KKwkgIGlmIChUUkVF X0NPREUgKHQxKSA9PSBTU0FfTkFNRSkKKwkgICAgY29udGludWU7CisKKwkgIGlmICghb3BlcmFu ZF9lcXVhbF9wICh0MSwgdDIsIDApKQorCSAgICByZXR1cm4gZmFsc2U7CisJfQogICAgIH0KLSAg ZWxzZSBpZiAoa2luZCA9PSBQRVJNX0VWRU5PREQgJiYgIW5lZ19maXJzdCkKKyAgZWxzZQogICAg IHsKLSAgICAgIGlmICgoa2luZCA9IGxpbmVhcl9sb2Fkc19wIChwZXJtX2NhY2hlLCBsZWZ0X29w W2luZGV4Ml0pKSAhPSBQRVJNX0VWRU5FVkVOKQorICAgICAgYXV0byBkcjEgPSBTVE1UX1ZJTkZP X0RBVEFfUkVGIChTTFBfVFJFRV9SRVBSRVNFTlRBVElWRSAoYSkpOworICAgICAgYXV0byBkcjIg PSBTVE1UX1ZJTkZPX0RBVEFfUkVGIChTTFBfVFJFRV9SRVBSRVNFTlRBVElWRSAoYikpOworICAg ICAgLyogRG9uJ3QgY2hlY2sgdGhlIGxhc3QgZGltZW5zaW9uIGFzIHRoYXQncyBjaGVja2VkIGJ5 IHRoZSBsaW5lYXJ5CisJIGNoZWNrcy4gIFRoaXMgY2hlY2sgaXMgYWxzbyBtdWNoIHN0cmljdGVy IHRoYW4gd2hhdCB3ZSBuZWVkCisJIGJlY2F1c2UgaXQgZG9lc24ndCBjb25zaWRlciBsb2FkaW5n IGZyb20gYWRqYWNlbnQgZWxlbWVudHMKKwkgaW4gdGhlIHNhbWUgc3RydWN0IGFzIGxvYWRpbmcg ZnJvbSB0aGUgc2FtZSBiYXNlIG9iamVjdC4KKwkgQnV0IGZvciBub3csIEknbGwgcGxheSBpdCBz YWZlLiAgKi8KKyAgICAgIGlmICghc2FtZV9kYXRhX3JlZnMgKGRyMSwgZHIyLCAxKSkKIAlyZXR1 cm4gZmFsc2U7Ci0gICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gIGVsc2UgaWYgKGtpbmQgPT0g UEVSTV9FVkVORVZFTiAmJiBuZWdfZmlyc3QpCisKKyAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8 IFNMUF9UUkVFX0NISUxEUkVOIChhKS5sZW5ndGggKCk7IGkrKykKICAgICB7Ci0gICAgICBpZiAo KGtpbmQgPSBsaW5lYXJfbG9hZHNfcCAocGVybV9jYWNoZSwgbGVmdF9vcFtpbmRleDJdKSkgIT0g UEVSTV9FVkVOT0REKQorICAgICAgaWYgKCFjb21wYXRpYmxlX2NvbXBsZXhfbm9kZXNfcCAoY29t cGF0X2NhY2hlLAorCQkJCSAgICAgICBTTFBfVFJFRV9DSElMRFJFTiAoYSlbaV0sIHBhLAorCQkJ CSAgICAgICBTTFBfVFJFRV9DSElMRFJFTiAoYilbaV0sIHBiKSkKIAlyZXR1cm4gZmFsc2U7Ci0K LSAgICAgICpjb25qX2ZpcnN0X29wZXJhbmQgPSB0cnVlOwotICAgICAgcmV0dXJuIHRydWU7CiAg ICAgfQotICBlbHNlCi0gICAgcmV0dXJuIGZhbHNlOwotCi0gIGlmIChraW5kICE9IFBFUk1fRVZF TkVWRU4pCi0gICAgcmV0dXJuIGZhbHNlOwogCisgIGNvbXBhdF9jYWNoZS0+cHV0IChrZXksIHRy dWUpOwogICByZXR1cm4gdHJ1ZTsKIH0KIAotLyogSGVscGVyIGZ1bmN0aW9uIHRvIGhlbHAgZGlz dGluZ3Vpc2ggYmV0d2VlbiBhIGNvbmp1Z2F0ZSBhbmQgYSByb3RhdGlvbiBpbiBhCi0gICBjb21w bGV4IG11bHRpcGxpY2F0aW9uLiAgVGhlIG9wZXJhdGlvbnMgaGF2ZSBzaW1pbGFyIHNoYXBlcyBi dXQgdGhlIG9yZGVyIG9mCi0gICB0aGUgbG9hZCBwZXJtdXRlcyBhcmUgZGlmZmVyZW50LiAgVGhp cyBmdW5jdGlvbiByZXR1cm5zIFRSVUUgd2hlbiB0aGUgb3JkZXIKLSAgIGlzIGNvbnNpc3RlbnQg d2l0aCBhIG11bHRpcGxpY2F0aW9uIG9yIG11bHRpcGxpY2F0aW9uIGJ5IGNvbmp1Z2F0ZWQKLSAg IG9wZXJhbmQgYnV0IHJldHVybnMgRkFMU0UgaWYgaXQncyBhIG11bHRpcGxpY2F0aW9uIGJ5IHJv dGF0ZWQgb3BlcmFuZC4gICovCi0KIHN0YXRpYyBpbmxpbmUgYm9vbAogdmVjdF92YWxpZGF0ZV9t dWx0aXBsaWNhdGlvbiAoc2xwX3RyZWVfdG9fbG9hZF9wZXJtX21hcF90ICpwZXJtX2NhY2hlLAot CQkJICAgICAgY29uc3QgdmVjPHNscF90cmVlPiAmb3AsCi0JCQkgICAgICBjb21wbGV4X3Blcm1f a2luZHNfdCBwZXJtS2luZCkKKwkJCSAgICAgIHNscF9jb21wYXRfbm9kZXNfbWFwX3QgKmNvbXBh dF9jYWNoZSwKKwkJCSAgICAgIHZlYzxzbHBfdHJlZT4gJmxlZnRfb3AsCisJCQkgICAgICB2ZWM8 c2xwX3RyZWU+ICZyaWdodF9vcCwKKwkJCSAgICAgIGJvb2wgc3VidHJhY3QsCisJCQkgICAgICBl bnVtIF9jb25qX3N0YXR1cyAqX3N0YXR1cykKIHsKLSAgLyogVGhlIGxlZnQgbm9kZSBpcyB0aGUg bW9yZSBjb21tb24gY2FzZSwgdGVzdCBpdCBmaXJzdC4gICovCi0gIGlmICghaXNfZXFfb3JfdG9w IChsaW5lYXJfbG9hZHNfcCAocGVybV9jYWNoZSwgb3BbMF0pLCBwZXJtS2luZCkpCisgIGF1dG9f dmVjPHNscF90cmVlPiBvcHM7CisgIGVudW0gX2Nvbmpfc3RhdHVzIHN0YXRzID0gQ09OSl9OT05F OworCisgIC8qIFRoZSBjb21wbGV4IG9wZXJhdGlvbnMgY2FuIG9jY3VyIGluIHR3byBsYXlvdXRz IGFuZCB0d28gcGVybXV0ZSBzZXF1ZW5jZXMKKyAgICAgc28gZGVjbGFyZSB0aGVtIGFuZCByZS11 c2UgdGhlbS4gICovCisgIGludCBzdHlsZXNbXVs0XSA9IHsgeyAwLCAyLCAxLCAzfSAvKiB7TDEs IFIxfSArIHtMMiwgUjJ9LiAgKi8KKwkJICAgICwgeyAwLCAzLCAxLCAyfSAvKiB7TDEsIFIyfSAr IHtMMiwgUjF9LiAgKi8KKwkJICAgIH07CisKKyAgLyogTm93IGZvciB0aGUgY29ycmVzcG9uZGlu ZyBwZXJtdXRlcyB0aGF0IGdvIHdpdGggdGhlc2UgdmFsdWVzLiAgKi8KKyAgY29tcGxleF9wZXJt X2tpbmRzX3QgcGVybXNbXVs0XQorICAgID0geyB7IFBFUk1fRVZFTkVWRU4sIFBFUk1fT0RET0RE LCBQRVJNX0VWRU5PREQsIFBFUk1fT0RERVZFTiB9CisgICAgICAsIHsgUEVSTV9FVkVOT0RELCBQ RVJNX09EREVWRU4sIFBFUk1fRVZFTkVWRU4sIFBFUk1fT0RET0REIH0KKyAgICAgIH07CisKKyAg LyogVGhlc2UgcGVybXV0ZXMgYXJlIHVzZWQgZHVyaW5nIGNvbXBhcmlzb25zIG9mIGV4dGVybmFs cyBvbiB3aGljaAorICAgICB3ZSByZXF1aXJlIHN0cmljdCBlcXVhbGl0eS4gICovCisgIGludCBj cVtdWzRdWzJdCisgICAgPSB7IHsgeyAwLCAwIH0sIHsgMSwgMSB9LCB7IDAsIDEgfSwgeyAxLCAw IH0gfQorICAgICAgLCB7IHsgMCwgMSB9LCB7IDEsIDAgfSwgeyAwLCAwIH0sIHsgMSwgMSB9IH0K KyAgICAgIH07CisKKyAgLyogRGVmYXVsdCB0byBzdHlsZSBhbmQgcGVybSAwLCBtb3N0IG9wZXJh dGlvbnMgdXNlIHRoaXMgb25lLiAgKi8KKyAgaW50IHN0eWxlID0gMDsKKyAgaW50IHBlcm0gPSBz dWJ0cmFjdCA/IDEgOiAwOworCisgIC8qIENoZWNrIGlmIHdlIGhhdmUgYSBuZWdhdGUgb3BlcmF0 aW9uLCBpZiBzbyBhYnNvcmIgdGhlIG5vZGUgYW5kIGNvbnRpbnVlCisgICAgIGxvb2tpbmcuICAq LworICBib29sIG5lZzAgPSB2ZWN0X21hdGNoX2V4cHJlc3Npb25fcCAocmlnaHRfb3BbMF0sIE5F R0FURV9FWFBSKTsKKyAgYm9vbCBuZWcxID0gdmVjdF9tYXRjaF9leHByZXNzaW9uX3AgKHJpZ2h0 X29wWzFdLCBORUdBVEVfRVhQUik7CisKKyAgLyogRGV0ZXJtaW5lIHdoaWNoIHN0eWxlIHdlJ3Jl IGxvb2tpbmcgYXQuICBXZSBvbmx5IGhhdmUgZGlmZmVyZW50IG9uZXMKKyAgICAgd2hlbmV2ZXIg YSBjb25qdWdhdGUgaXMgaW52b2x2ZWQuICAqLworICBpZiAobmVnMCAmJiBuZWcxKQorICAgIDsK KyAgZWxzZSBpZiAobmVnMCkKICAgICB7Ci0gICAgICBpZiAoIWlzX2VxX29yX3RvcCAobGluZWFy X2xvYWRzX3AgKHBlcm1fY2FjaGUsIG9wWzFdKSwgcGVybUtpbmQpKQotCXJldHVybiBmYWxzZTsK KyAgICAgIHJpZ2h0X29wWzBdID0gU0xQX1RSRUVfQ0hJTERSRU4gKHJpZ2h0X29wWzBdKVswXTsK KyAgICAgIHN0YXRzID0gQ09OSl9GU1Q7CisgICAgICBpZiAoc3VidHJhY3QpCisJcGVybSA9IDA7 CiAgICAgfQotICByZXR1cm4gdHJ1ZTsKKyAgZWxzZSBpZiAobmVnMSkKKyAgICB7CisgICAgICBy aWdodF9vcFsxXSA9IFNMUF9UUkVFX0NISUxEUkVOIChyaWdodF9vcFsxXSlbMF07CisgICAgICBz dGF0cyA9IENPTkpfU05EOworICAgICAgcGVybSA9IDE7CisgICAgfQorCisgICpfc3RhdHVzID0g c3RhdHM7CisKKyAgLyogRmxhdHRlbiB0aGUgaW5wdXRzIGFmdGVyIHdlJ3ZlIHJlbWFwcGVkIHRo ZW0uICAqLworICBvcHMuY3JlYXRlICg0KTsKKyAgb3BzLnNhZmVfc3BsaWNlIChsZWZ0X29wKTsK KyAgb3BzLnNhZmVfc3BsaWNlIChyaWdodF9vcCk7CisKKyAgLyogRXh0cmFjdCBvdXQgdGhlIGVs ZW1lbnRzIHRvIGNoZWNrLiAgKi8KKyAgc2xwX3RyZWUgb3AwID0gb3BzW3N0eWxlc1tzdHlsZV1b MF1dOworICBzbHBfdHJlZSBvcDEgPSBvcHNbc3R5bGVzW3N0eWxlXVsxXV07CisgIHNscF90cmVl IG9wMiA9IG9wc1tzdHlsZXNbc3R5bGVdWzJdXTsKKyAgc2xwX3RyZWUgb3AzID0gb3BzW3N0eWxl c1tzdHlsZV1bM11dOworCisgIC8qIERvIGNoZWFwZXN0IHRlc3QgZmlyc3QuICBJZiBmYWlsZWQg bm8gbmVlZCB0byBhbmFseXplIGZ1cnRoZXIuICAqLworICBpZiAobGluZWFyX2xvYWRzX3AgKHBl cm1fY2FjaGUsIG9wMCkgIT0gcGVybXNbcGVybV1bMF0KKyAgICAgIHx8IGxpbmVhcl9sb2Fkc19w IChwZXJtX2NhY2hlLCBvcDEpICE9IHBlcm1zW3Blcm1dWzFdCisgICAgICB8fCAhaXNfZXFfb3Jf dG9wIChwZXJtX2NhY2hlLCBvcDIsIHBlcm1zW3Blcm1dWzJdLCBvcDMsIHBlcm1zW3Blcm1dWzNd KSkKKyAgICByZXR1cm4gZmFsc2U7CisKKyAgcmV0dXJuIGNvbXBhdGlibGVfY29tcGxleF9ub2Rl c19wIChjb21wYXRfY2FjaGUsIG9wMCwgY3FbcGVybV1bMF0sIG9wMSwKKwkJCQkgICAgIGNxW3Bl cm1dWzFdKQorCSAmJiBjb21wYXRpYmxlX2NvbXBsZXhfbm9kZXNfcCAoY29tcGF0X2NhY2hlLCBv cDIsIGNxW3Blcm1dWzJdLCBvcDMsCisJCQkJCWNxW3Blcm1dWzNdKTsKIH0KIAogLyogVGhpcyBm dW5jdGlvbiBjb21iaW5lcyB0d28gbm9kZXMgY29udGFpbmluZyBvbmx5IGV2ZW4gYW5kIG9ubHkg b2RkIGxhbmVzCkBAIC05MDgsMTEgKzk3OSwxMiBAQCBjbGFzcyBjb21wbGV4X211bF9wYXR0ZXJu IDogcHVibGljIGNvbXBsZXhfcGF0dGVybgogICBwdWJsaWM6CiAgICAgdm9pZCBidWlsZCAodmVj X2luZm8gKik7CiAgICAgc3RhdGljIGludGVybmFsX2ZuCi0gICAgbWF0Y2hlcyAoY29tcGxleF9v cGVyYXRpb25fdCBvcCwgc2xwX3RyZWVfdG9fbG9hZF9wZXJtX21hcF90ICosIHNscF90cmVlICos Ci0JICAgICB2ZWM8c2xwX3RyZWU+ICopOworICAgIG1hdGNoZXMgKGNvbXBsZXhfb3BlcmF0aW9u X3Qgb3AsIHNscF90cmVlX3RvX2xvYWRfcGVybV9tYXBfdCAqLAorCSAgICAgc2xwX2NvbXBhdF9u b2Rlc19tYXBfdCAqLCBzbHBfdHJlZSAqLCB2ZWM8c2xwX3RyZWU+ICopOwogCiAgICAgc3RhdGlj IHZlY3RfcGF0dGVybioKLSAgICByZWNvZ25pemUgKHNscF90cmVlX3RvX2xvYWRfcGVybV9tYXBf dCAqLCBzbHBfdHJlZSAqKTsKKyAgICByZWNvZ25pemUgKHNscF90cmVlX3RvX2xvYWRfcGVybV9t YXBfdCAqLCBzbHBfY29tcGF0X25vZGVzX21hcF90ICosCisJICAgICAgIHNscF90cmVlICopOwog CiAgICAgc3RhdGljIHZlY3RfcGF0dGVybioKICAgICBta0luc3RhbmNlIChzbHBfdHJlZSAqbm9k ZSwgdmVjPHNscF90cmVlPiAqbV9vcHMsIGludGVybmFsX2ZuIGlmbikKQEAgLTk0Myw2ICsxMDE1 LDcgQEAgY2xhc3MgY29tcGxleF9tdWxfcGF0dGVybiA6IHB1YmxpYyBjb21wbGV4X3BhdHRlcm4K IGludGVybmFsX2ZuCiBjb21wbGV4X211bF9wYXR0ZXJuOjptYXRjaGVzIChjb21wbGV4X29wZXJh dGlvbl90IG9wLAogCQkJICAgICAgc2xwX3RyZWVfdG9fbG9hZF9wZXJtX21hcF90ICpwZXJtX2Nh Y2hlLAorCQkJICAgICAgc2xwX2NvbXBhdF9ub2Rlc19tYXBfdCAqY29tcGF0X2NhY2hlLAogCQkJ ICAgICAgc2xwX3RyZWUgKm5vZGUsIHZlYzxzbHBfdHJlZT4gKm9wcykKIHsKICAgaW50ZXJuYWxf Zm4gaWZuID0gSUZOX0xBU1Q7CkBAIC05OTAsMTcgKzEwNjMsMTMgQEAgY29tcGxleF9tdWxfcGF0 dGVybjo6bWF0Y2hlcyAoY29tcGxleF9vcGVyYXRpb25fdCBvcCwKICAgICAgIHx8IGxpbmVhcl9s b2Fkc19wIChwZXJtX2NhY2hlLCBsZWZ0X29wWzFdKSA9PSBQRVJNX09EREVWRU4pCiAgICAgcmV0 dXJuIElGTl9MQVNUOwogCi0gIGJvb2wgbmVnX2ZpcnN0ID0gZmFsc2U7Ci0gIGJvb2wgY29ual9m aXJzdF9vcGVyYW5kID0gZmFsc2U7Ci0gIGJvb2wgaXNfbmVnID0gdmVjdF9ub3JtYWxpemVfY29u al9sb2MgKHJpZ2h0X29wLCAmbmVnX2ZpcnN0KTsKKyAgZW51bSBfY29ual9zdGF0dXMgc3RhdHVz OworICBpZiAoIXZlY3RfdmFsaWRhdGVfbXVsdGlwbGljYXRpb24gKHBlcm1fY2FjaGUsIGNvbXBh dF9jYWNoZSwgbGVmdF9vcCwKKwkJCQkgICAgIHJpZ2h0X29wLCBmYWxzZSwgJnN0YXR1cykpCisg ICAgcmV0dXJuIElGTl9MQVNUOwogCi0gIGlmICghaXNfbmVnKQorICBpZiAoc3RhdHVzID09IENP TkpfTk9ORSkKICAgICB7Ci0gICAgICAvKiBBIG11bHRpcGxpY2F0aW9uIG5lZWRzIHRvIG11bHRp cGx5IGFnYWlucyB0aGUgcmVhbCBwYWlyLCBvdGhlcndpc2UKLQkgdGhlIHBhdHRlcm4gbWF0Y2hl cyB0aGF0IG9mIEZNUy4gICAqLwotICAgICAgaWYgKCF2ZWN0X3ZhbGlkYXRlX211bHRpcGxpY2F0 aW9uIChwZXJtX2NhY2hlLCBsZWZ0X29wLCBQRVJNX0VWRU5FVkVOKQotCSAgfHwgdmVjdF9ub3Jt YWxpemVfY29ual9sb2MgKGxlZnRfb3ApKQotCXJldHVybiBJRk5fTEFTVDsKICAgICAgIGlmIChh ZGQwKQogCWlmbiA9IElGTl9DT01QTEVYX0ZNQTsKICAgICAgIGVsc2UKQEAgLTEwMDgsMTEgKzEw NzcsNiBAQCBjb21wbGV4X211bF9wYXR0ZXJuOjptYXRjaGVzIChjb21wbGV4X29wZXJhdGlvbl90 IG9wLAogICAgIH0KICAgZWxzZQogICAgIHsKLSAgICAgIGlmICghdmVjdF92YWxpZGF0ZV9tdWx0 aXBsaWNhdGlvbiAocGVybV9jYWNoZSwgbGVmdF9vcCwgcmlnaHRfb3AsCi0JCQkJCSBuZWdfZmly c3QsICZjb25qX2ZpcnN0X29wZXJhbmQsCi0JCQkJCSBmYWxzZSkpCi0JcmV0dXJuIElGTl9MQVNU OwotCiAgICAgICBpZihhZGQwKQogCWlmbiA9IElGTl9DT01QTEVYX0ZNQV9DT05KOwogICAgICAg ZWxzZQpAQCAtMTAyOSwxOSArMTA5MywxMyBAQCBjb21wbGV4X211bF9wYXR0ZXJuOjptYXRjaGVz IChjb21wbGV4X29wZXJhdGlvbl90IG9wLAogICAgIG9wcy0+cXVpY2tfcHVzaCAoYWRkMCk7CiAK ICAgY29tcGxleF9wZXJtX2tpbmRzX3Qga2luZCA9IGxpbmVhcl9sb2Fkc19wIChwZXJtX2NhY2hl LCBsZWZ0X29wWzBdKTsKLSAgaWYgKGtpbmQgPT0gUEVSTV9FVkVOT0REKQorICBpZiAoa2luZCA9 PSBQRVJNX0VWRU5PREQgfHwga2luZCA9PSBQRVJNX1RPUCkKICAgICB7CiAgICAgICBvcHMtPnF1 aWNrX3B1c2ggKGxlZnRfb3BbMV0pOwogICAgICAgb3BzLT5xdWlja19wdXNoIChyaWdodF9vcFsx XSk7CiAgICAgICBvcHMtPnF1aWNrX3B1c2ggKGxlZnRfb3BbMF0pOwogICAgIH0KLSAgZWxzZSBp ZiAoa2luZCA9PSBQRVJNX1RPUCkKLSAgICB7Ci0gICAgICBvcHMtPnF1aWNrX3B1c2ggKGxlZnRf b3BbMV0pOwotICAgICAgb3BzLT5xdWlja19wdXNoIChyaWdodF9vcFsxXSk7Ci0gICAgICBvcHMt PnF1aWNrX3B1c2ggKGxlZnRfb3BbMF0pOwotICAgIH0KLSAgZWxzZSBpZiAoa2luZCA9PSBQRVJN X0VWRU5FVkVOICYmICFjb25qX2ZpcnN0X29wZXJhbmQpCisgIGVsc2UgaWYgKGtpbmQgPT0gUEVS TV9FVkVORVZFTiAmJiBzdGF0dXMgIT0gQ09OSl9TTkQpCiAgICAgewogICAgICAgb3BzLT5xdWlj a19wdXNoIChsZWZ0X29wWzBdKTsKICAgICAgIG9wcy0+cXVpY2tfcHVzaCAocmlnaHRfb3BbMF0p OwpAQCAtMTA2MSwxMyArMTExOSwxNCBAQCBjb21wbGV4X211bF9wYXR0ZXJuOjptYXRjaGVzIChj b21wbGV4X29wZXJhdGlvbl90IG9wLAogCiB2ZWN0X3BhdHRlcm4qCiBjb21wbGV4X211bF9wYXR0 ZXJuOjpyZWNvZ25pemUgKHNscF90cmVlX3RvX2xvYWRfcGVybV9tYXBfdCAqcGVybV9jYWNoZSwK KwkJCQlzbHBfY29tcGF0X25vZGVzX21hcF90ICpjb21wYXRfY2FjaGUsCiAJCQkJc2xwX3RyZWUg Km5vZGUpCiB7CiAgIGF1dG9fdmVjPHNscF90cmVlPiBvcHM7CiAgIGNvbXBsZXhfb3BlcmF0aW9u X3Qgb3AKICAgICA9IHZlY3RfZGV0ZWN0X3BhaXJfb3AgKCpub2RlLCB0cnVlLCAmb3BzKTsKICAg aW50ZXJuYWxfZm4gaWZuCi0gICAgPSBjb21wbGV4X211bF9wYXR0ZXJuOjptYXRjaGVzIChvcCwg cGVybV9jYWNoZSwgbm9kZSwgJm9wcyk7CisgICAgPSBjb21wbGV4X211bF9wYXR0ZXJuOjptYXRj aGVzIChvcCwgcGVybV9jYWNoZSwgY29tcGF0X2NhY2hlLCBub2RlLCAmb3BzKTsKICAgaWYgKGlm biA9PSBJRk5fTEFTVCkKICAgICByZXR1cm4gTlVMTDsKIApAQCAtMTExNSw5ICsxMTc0LDkgQEAg Y29tcGxleF9tdWxfcGF0dGVybjo6YnVpbGQgKHZlY19pbmZvICp2aW5mbykKIAogCS8qIEZpcnN0 IHJlLWFycmFuZ2UgdGhlIGNoaWxkcmVuLiAgKi8KIAlTTFBfVFJFRV9DSElMRFJFTiAoKnRoaXMt Pm1fbm9kZSkuc2FmZV9ncm93ICgzKTsKLQlTTFBfVFJFRV9DSElMRFJFTiAoKnRoaXMtPm1fbm9k ZSlbMF0gPSB0aGlzLT5tX29wc1swXTsKLQlTTFBfVFJFRV9DSElMRFJFTiAoKnRoaXMtPm1fbm9k ZSlbMV0gPSB0aGlzLT5tX29wc1szXTsKLQlTTFBfVFJFRV9DSElMRFJFTiAoKnRoaXMtPm1fbm9k ZSlbMl0gPSBuZXdub2RlOworCVNMUF9UUkVFX0NISUxEUkVOICgqdGhpcy0+bV9ub2RlKVswXSA9 IHRoaXMtPm1fb3BzWzNdOworCVNMUF9UUkVFX0NISUxEUkVOICgqdGhpcy0+bV9ub2RlKVsxXSA9 IG5ld25vZGU7CisJU0xQX1RSRUVfQ0hJTERSRU4gKCp0aGlzLT5tX25vZGUpWzJdID0gdGhpcy0+ bV9vcHNbMF07CiAKIAkvKiBUZWxsIHRoZSBidWlsZGVyIHRvIGV4cGVjdCBhbiBleHRyYSBhcmd1 bWVudC4gICovCiAJdGhpcy0+bV9udW1fYXJncysrOwpAQCAtMTE0NywxMSArMTIwNiwxMiBAQCBj bGFzcyBjb21wbGV4X2Ztc19wYXR0ZXJuIDogcHVibGljIGNvbXBsZXhfcGF0dGVybgogICBwdWJs aWM6CiAgICAgdm9pZCBidWlsZCAodmVjX2luZm8gKik7CiAgICAgc3RhdGljIGludGVybmFsX2Zu Ci0gICAgbWF0Y2hlcyAoY29tcGxleF9vcGVyYXRpb25fdCBvcCwgc2xwX3RyZWVfdG9fbG9hZF9w ZXJtX21hcF90ICosIHNscF90cmVlICosCi0JICAgICB2ZWM8c2xwX3RyZWU+ICopOworICAgIG1h dGNoZXMgKGNvbXBsZXhfb3BlcmF0aW9uX3Qgb3AsIHNscF90cmVlX3RvX2xvYWRfcGVybV9tYXBf dCAqLAorCSAgICAgc2xwX2NvbXBhdF9ub2Rlc19tYXBfdCAqLCBzbHBfdHJlZSAqLCB2ZWM8c2xw X3RyZWU+ICopOwogCiAgICAgc3RhdGljIHZlY3RfcGF0dGVybioKLSAgICByZWNvZ25pemUgKHNs cF90cmVlX3RvX2xvYWRfcGVybV9tYXBfdCAqLCBzbHBfdHJlZSAqKTsKKyAgICByZWNvZ25pemUg KHNscF90cmVlX3RvX2xvYWRfcGVybV9tYXBfdCAqLCBzbHBfY29tcGF0X25vZGVzX21hcF90ICos CisJICAgICAgIHNscF90cmVlICopOwogCiAgICAgc3RhdGljIHZlY3RfcGF0dGVybioKICAgICBt a0luc3RhbmNlIChzbHBfdHJlZSAqbm9kZSwgdmVjPHNscF90cmVlPiAqbV9vcHMsIGludGVybmFs X2ZuIGlmbikKQEAgLTExODIsNiArMTI0Miw3IEBAIGNsYXNzIGNvbXBsZXhfZm1zX3BhdHRlcm4g OiBwdWJsaWMgY29tcGxleF9wYXR0ZXJuCiBpbnRlcm5hbF9mbgogY29tcGxleF9mbXNfcGF0dGVy bjo6bWF0Y2hlcyAoY29tcGxleF9vcGVyYXRpb25fdCBvcCwKIAkJCSAgICAgIHNscF90cmVlX3Rv X2xvYWRfcGVybV9tYXBfdCAqcGVybV9jYWNoZSwKKwkJCSAgICAgIHNscF9jb21wYXRfbm9kZXNf bWFwX3QgKmNvbXBhdF9jYWNoZSwKIAkJCSAgICAgIHNscF90cmVlICogcmVmX25vZGUsIHZlYzxz bHBfdHJlZT4gKm9wcykKIHsKICAgaW50ZXJuYWxfZm4gaWZuID0gSUZOX0xBU1Q7CkBAIC0xMTk3 LDYgKzEyNTgsOCBAQCBjb21wbGV4X2Ztc19wYXR0ZXJuOjptYXRjaGVzIChjb21wbGV4X29wZXJh dGlvbl90IG9wLAogICBpZiAoIXZlY3RfbWF0Y2hfZXhwcmVzc2lvbl9wIChyb290LCBNSU5VU19F WFBSKSkKICAgICByZXR1cm4gSUZOX0xBU1Q7CiAKKyAgLyogVE9ETzogU3VwcG9ydCBpbnZhcmlh bnRzIGhlcmUsIHdpdGggdGhlIG5ldyBsYXlvdXQgQ0FERCBub3cKKwkgICBjYW4gbWF0Y2ggYmVm b3JlIHdlIGdldCBhIGNoYW5jZSB0byB0cnkgQ0ZNUy4gICovCiAgIGF1dG8gbm9kZXMgPSBTTFBf VFJFRV9DSElMRFJFTiAocm9vdCk7CiAgIGlmICghdmVjdF9tYXRjaF9leHByZXNzaW9uX3AgKG5v ZGVzWzFdLCBNVUxUX0VYUFIpCiAgICAgICB8fCB2ZWN0X2RldGVjdF9wYWlyX29wIChub2Rlc1sw XSkgIT0gUExVU19NSU5VUykKQEAgLTEyMTcsMTYgKzEyODAsMTQgQEAgY29tcGxleF9mbXNfcGF0 dGVybjo6bWF0Y2hlcyAoY29tcGxleF9vcGVyYXRpb25fdCBvcCwKICAgICAgIHx8ICF2ZWN0X21h dGNoX2V4cHJlc3Npb25fcCAobDBub2RlWzFdLCBNVUxUX0VYUFIpKQogICAgIHJldHVybiBJRk5f TEFTVDsKIAotICBib29sIGlzX25lZyA9IHZlY3Rfbm9ybWFsaXplX2NvbmpfbG9jIChsZWZ0X29w KTsKLQotICBib29sIGNvbmpfZmlyc3Rfb3BlcmFuZCA9IGZhbHNlOwotICBpZiAoIXZlY3RfdmFs aWRhdGVfbXVsdGlwbGljYXRpb24gKHBlcm1fY2FjaGUsIHJpZ2h0X29wLCBsZWZ0X29wLCBmYWxz ZSwKLQkJCQkgICAgICZjb25qX2ZpcnN0X29wZXJhbmQsIHRydWUpKQorICBlbnVtIF9jb25qX3N0 YXR1cyBzdGF0dXM7CisgIGlmICghdmVjdF92YWxpZGF0ZV9tdWx0aXBsaWNhdGlvbiAocGVybV9j YWNoZSwgY29tcGF0X2NhY2hlLCByaWdodF9vcCwKKwkJCQkgICAgIGxlZnRfb3AsIHRydWUsICZz dGF0dXMpKQogICAgIHJldHVybiBJRk5fTEFTVDsKIAotICBpZiAoIWlzX25lZykKKyAgaWYgKHN0 YXR1cyA9PSBDT05KX05PTkUpCiAgICAgaWZuID0gSUZOX0NPTVBMRVhfRk1TOwotICBlbHNlIGlm IChpc19uZWcpCisgIGVsc2UKICAgICBpZm4gPSBJRk5fQ09NUExFWF9GTVNfQ09OSjsKIAogICBp ZiAoIXZlY3RfcGF0dGVybl92YWxpZGF0ZV9vcHRhYiAoaWZuLCAqcmVmX25vZGUpKQpAQCAtMTI0 MywyNiArMTMwNCwxMiBAQCBjb21wbGV4X2Ztc19wYXR0ZXJuOjptYXRjaGVzIChjb21wbGV4X29w ZXJhdGlvbl90IG9wLAogICAgICAgb3BzLT5xdWlja19wdXNoIChyaWdodF9vcFsxXSk7CiAgICAg ICBvcHMtPnF1aWNrX3B1c2ggKGxlZnRfb3BbMV0pOwogICAgIH0KLSAgZWxzZSBpZiAoa2luZCA9 PSBQRVJNX1RPUCkKLSAgICB7Ci0gICAgICBvcHMtPnF1aWNrX3B1c2ggKGwwbm9kZVswXSk7Ci0g ICAgICBvcHMtPnF1aWNrX3B1c2ggKHJpZ2h0X29wWzFdKTsKLSAgICAgIG9wcy0+cXVpY2tfcHVz aCAocmlnaHRfb3BbMF0pOwotICAgICAgb3BzLT5xdWlja19wdXNoIChsZWZ0X29wWzBdKTsKLSAg ICB9Ci0gIGVsc2UgaWYgKGtpbmQgPT0gUEVSTV9FVkVORVZFTiAmJiAhaXNfbmVnKQotICAgIHsK LSAgICAgIG9wcy0+cXVpY2tfcHVzaCAobDBub2RlWzBdKTsKLSAgICAgIG9wcy0+cXVpY2tfcHVz aCAocmlnaHRfb3BbMV0pOwotICAgICAgb3BzLT5xdWlja19wdXNoIChyaWdodF9vcFswXSk7Ci0g ICAgICBvcHMtPnF1aWNrX3B1c2ggKGxlZnRfb3BbMF0pOwotICAgIH0KICAgZWxzZQogICAgIHsK ICAgICAgIG9wcy0+cXVpY2tfcHVzaCAobDBub2RlWzBdKTsKICAgICAgIG9wcy0+cXVpY2tfcHVz aCAocmlnaHRfb3BbMV0pOwogICAgICAgb3BzLT5xdWlja19wdXNoIChyaWdodF9vcFswXSk7Ci0g ICAgICBvcHMtPnF1aWNrX3B1c2ggKGxlZnRfb3BbMV0pOworICAgICAgb3BzLT5xdWlja19wdXNo IChsZWZ0X29wWzBdKTsKICAgICB9CiAKICAgcmV0dXJuIGlmbjsKQEAgLTEyNzIsMTMgKzEzMTks MTQgQEAgY29tcGxleF9mbXNfcGF0dGVybjo6bWF0Y2hlcyAoY29tcGxleF9vcGVyYXRpb25fdCBv cCwKIAogdmVjdF9wYXR0ZXJuKgogY29tcGxleF9mbXNfcGF0dGVybjo6cmVjb2duaXplIChzbHBf dHJlZV90b19sb2FkX3Blcm1fbWFwX3QgKnBlcm1fY2FjaGUsCisJCQkJc2xwX2NvbXBhdF9ub2Rl c19tYXBfdCAqY29tcGF0X2NhY2hlLAogCQkJCXNscF90cmVlICpub2RlKQogewogICBhdXRvX3Zl YzxzbHBfdHJlZT4gb3BzOwogICBjb21wbGV4X29wZXJhdGlvbl90IG9wCiAgICAgPSB2ZWN0X2Rl dGVjdF9wYWlyX29wICgqbm9kZSwgdHJ1ZSwgJm9wcyk7CiAgIGludGVybmFsX2ZuIGlmbgotICAg ID0gY29tcGxleF9mbXNfcGF0dGVybjo6bWF0Y2hlcyAob3AsIHBlcm1fY2FjaGUsIG5vZGUsICZv cHMpOworICAgID0gY29tcGxleF9mbXNfcGF0dGVybjo6bWF0Y2hlcyAob3AsIHBlcm1fY2FjaGUs IGNvbXBhdF9jYWNoZSwgbm9kZSwgJm9wcyk7CiAgIGlmIChpZm4gPT0gSUZOX0xBU1QpCiAgICAg cmV0dXJuIE5VTEw7CiAKQEAgLTEzMDUsOSArMTM1Myw5IEBAIGNvbXBsZXhfZm1zX3BhdHRlcm46 OmJ1aWxkICh2ZWNfaW5mbyAqdmluZm8pCiAgIFNMUF9UUkVFX0NISUxEUkVOICgqdGhpcy0+bV9u b2RlKS5jcmVhdGUgKDMpOwogCiAgIC8qIEZpcnN0IHJlLWFycmFuZ2UgdGhlIGNoaWxkcmVuLiAg Ki8KLSAgU0xQX1RSRUVfQ0hJTERSRU4gKCp0aGlzLT5tX25vZGUpLnF1aWNrX3B1c2ggKHRoaXMt Pm1fb3BzWzBdKTsKICAgU0xQX1RSRUVfQ0hJTERSRU4gKCp0aGlzLT5tX25vZGUpLnF1aWNrX3B1 c2ggKHRoaXMtPm1fb3BzWzFdKTsKICAgU0xQX1RSRUVfQ0hJTERSRU4gKCp0aGlzLT5tX25vZGUp LnF1aWNrX3B1c2ggKG5ld25vZGUpOworICBTTFBfVFJFRV9DSElMRFJFTiAoKnRoaXMtPm1fbm9k ZSkucXVpY2tfcHVzaCAodGhpcy0+bV9vcHNbMF0pOwogCiAgIC8qIEFuZCB0aGVuIHJld3JpdGUg dGhlIG5vZGUgaXRzZWxmLiAgKi8KICAgY29tcGxleF9wYXR0ZXJuOjpidWlsZCAodmluZm8pOwpA QCAtMTMzNCwxMSArMTM4MiwxMiBAQCBjbGFzcyBjb21wbGV4X29wZXJhdGlvbnNfcGF0dGVybiA6 IHB1YmxpYyBjb21wbGV4X3BhdHRlcm4KICAgcHVibGljOgogICAgIHZvaWQgYnVpbGQgKHZlY19p bmZvICopOwogICAgIHN0YXRpYyBpbnRlcm5hbF9mbgotICAgIG1hdGNoZXMgKGNvbXBsZXhfb3Bl cmF0aW9uX3Qgb3AsIHNscF90cmVlX3RvX2xvYWRfcGVybV9tYXBfdCAqLCBzbHBfdHJlZSAqLAot CSAgICAgdmVjPHNscF90cmVlPiAqKTsKKyAgICBtYXRjaGVzIChjb21wbGV4X29wZXJhdGlvbl90 IG9wLCBzbHBfdHJlZV90b19sb2FkX3Blcm1fbWFwX3QgKiwKKwkgICAgIHNscF9jb21wYXRfbm9k ZXNfbWFwX3QgKiwgc2xwX3RyZWUgKiwgdmVjPHNscF90cmVlPiAqKTsKIAogICAgIHN0YXRpYyB2 ZWN0X3BhdHRlcm4qCi0gICAgcmVjb2duaXplIChzbHBfdHJlZV90b19sb2FkX3Blcm1fbWFwX3Qg Kiwgc2xwX3RyZWUgKik7CisgICAgcmVjb2duaXplIChzbHBfdHJlZV90b19sb2FkX3Blcm1fbWFw X3QgKiwgc2xwX2NvbXBhdF9ub2Rlc19tYXBfdCAqLAorCSAgICAgICBzbHBfdHJlZSAqKTsKIH07 CiAKIC8qIER1bW15IG1hdGNoZXMgaW1wbGVtZW50YXRpb24gZm9yIHByb3h5IG9iamVjdC4gICov CkBAIC0xMzQ3LDYgKzEzOTYsNyBAQCBpbnRlcm5hbF9mbgogY29tcGxleF9vcGVyYXRpb25zX3Bh dHRlcm46OgogbWF0Y2hlcyAoY29tcGxleF9vcGVyYXRpb25fdCAvKiBvcCAqLywKIAkgc2xwX3Ry ZWVfdG9fbG9hZF9wZXJtX21hcF90ICogLyogcGVybV9jYWNoZSAqLywKKwkgc2xwX2NvbXBhdF9u b2Rlc19tYXBfdCAqIC8qIGNvbXBhdF9jYWNoZSAqLywKIAkgc2xwX3RyZWUgKiAvKiByZWZfbm9k ZSAqLywgdmVjPHNscF90cmVlPiAqIC8qIG9wcyAqLykKIHsKICAgcmV0dXJuIElGTl9MQVNUOwpA QCAtMTM1Niw2ICsxNDA2LDcgQEAgbWF0Y2hlcyAoY29tcGxleF9vcGVyYXRpb25fdCAvKiBvcCAq LywKIAogdmVjdF9wYXR0ZXJuKgogY29tcGxleF9vcGVyYXRpb25zX3BhdHRlcm46OnJlY29nbml6 ZSAoc2xwX3RyZWVfdG9fbG9hZF9wZXJtX21hcF90ICpwZXJtX2NhY2hlLAorCQkJCSAgICAgICBz bHBfY29tcGF0X25vZGVzX21hcF90ICpjY2FjaGUsCiAJCQkJICAgICAgIHNscF90cmVlICpub2Rl KQogewogICBhdXRvX3ZlYzxzbHBfdHJlZT4gb3BzOwpAQCAtMTM2MywxNSArMTQxNCwxNSBAQCBj b21wbGV4X29wZXJhdGlvbnNfcGF0dGVybjo6cmVjb2duaXplIChzbHBfdHJlZV90b19sb2FkX3Bl cm1fbWFwX3QgKnBlcm1fY2FjaGUsCiAgICAgPSB2ZWN0X2RldGVjdF9wYWlyX29wICgqbm9kZSwg dHJ1ZSwgJm9wcyk7CiAgIGludGVybmFsX2ZuIGlmbiA9IElGTl9MQVNUOwogCi0gIGlmbiAgPSBj b21wbGV4X2Ztc19wYXR0ZXJuOjptYXRjaGVzIChvcCwgcGVybV9jYWNoZSwgbm9kZSwgJm9wcyk7 CisgIGlmbiAgPSBjb21wbGV4X2Ztc19wYXR0ZXJuOjptYXRjaGVzIChvcCwgcGVybV9jYWNoZSwg Y2NhY2hlLCBub2RlLCAmb3BzKTsKICAgaWYgKGlmbiAhPSBJRk5fTEFTVCkKICAgICByZXR1cm4g Y29tcGxleF9mbXNfcGF0dGVybjo6bWtJbnN0YW5jZSAobm9kZSwgJm9wcywgaWZuKTsKIAotICBp Zm4gID0gY29tcGxleF9tdWxfcGF0dGVybjo6bWF0Y2hlcyAob3AsIHBlcm1fY2FjaGUsIG5vZGUs ICZvcHMpOworICBpZm4gID0gY29tcGxleF9tdWxfcGF0dGVybjo6bWF0Y2hlcyAob3AsIHBlcm1f Y2FjaGUsIGNjYWNoZSwgbm9kZSwgJm9wcyk7CiAgIGlmIChpZm4gIT0gSUZOX0xBU1QpCiAgICAg cmV0dXJuIGNvbXBsZXhfbXVsX3BhdHRlcm46Om1rSW5zdGFuY2UgKG5vZGUsICZvcHMsIGlmbik7 CiAKLSAgaWZuICA9IGNvbXBsZXhfYWRkX3BhdHRlcm46Om1hdGNoZXMgKG9wLCBwZXJtX2NhY2hl LCBub2RlLCAmb3BzKTsKKyAgaWZuICA9IGNvbXBsZXhfYWRkX3BhdHRlcm46Om1hdGNoZXMgKG9w LCBwZXJtX2NhY2hlLCBjY2FjaGUsIG5vZGUsICZvcHMpOwogICBpZiAoaWZuICE9IElGTl9MQVNU KQogICAgIHJldHVybiBjb21wbGV4X2FkZF9wYXR0ZXJuOjpta0luc3RhbmNlIChub2RlLCAmb3Bz LCBpZm4pOwogCkBAIC0xMzk4LDExICsxNDQ5LDEzIEBAIGNsYXNzIGFkZHN1Yl9wYXR0ZXJuIDog cHVibGljIHZlY3RfcGF0dGVybgogICAgIHZvaWQgYnVpbGQgKHZlY19pbmZvICopOwogCiAgICAg c3RhdGljIHZlY3RfcGF0dGVybioKLSAgICByZWNvZ25pemUgKHNscF90cmVlX3RvX2xvYWRfcGVy bV9tYXBfdCAqLCBzbHBfdHJlZSAqKTsKKyAgICByZWNvZ25pemUgKHNscF90cmVlX3RvX2xvYWRf cGVybV9tYXBfdCAqLCBzbHBfY29tcGF0X25vZGVzX21hcF90ICosCisJICAgICAgIHNscF90cmVl ICopOwogfTsKIAogdmVjdF9wYXR0ZXJuICoKLWFkZHN1Yl9wYXR0ZXJuOjpyZWNvZ25pemUgKHNs cF90cmVlX3RvX2xvYWRfcGVybV9tYXBfdCAqLCBzbHBfdHJlZSAqbm9kZV8pCithZGRzdWJfcGF0 dGVybjo6cmVjb2duaXplIChzbHBfdHJlZV90b19sb2FkX3Blcm1fbWFwX3QgKiwKKwkJCSAgIHNs cF9jb21wYXRfbm9kZXNfbWFwX3QgKiwgc2xwX3RyZWUgKm5vZGVfKQogewogICBzbHBfdHJlZSBu b2RlID0gKm5vZGVfOwogICBpZiAoU0xQX1RSRUVfQ09ERSAobm9kZSkgIT0gVkVDX1BFUk1fRVhQ UgpkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtdmVjdC1zbHAuYyBiL2djYy90cmVlLXZlY3Qtc2xwLmMK aW5kZXggYjkxMmMzNTc3ZGY2MWE2OTRkNWJiOWUyMmM1MzAzZmU2YTQ4YWI2ZS4uY2I1NzdmOGE2 MTJkNTgzMjU0ZTQyYmIwNmE2ZDdhMDg3NWRlNWU3NSAxMDA2NDQKLS0tIGEvZ2NjL3RyZWUtdmVj dC1zbHAuYworKysgYi9nY2MvdHJlZS12ZWN0LXNscC5jCkBAIC04MDQsNyArODA0LDcgQEAgdmVj dF9nZXRfYW5kX2NoZWNrX3NscF9kZWZzICh2ZWNfaW5mbyAqdmluZm8sIHVuc2lnbmVkIGNoYXIg c3dhcCwKIC8qIFJldHVybiB0cnVlIGlmIGNhbGwgc3RhdGVtZW50cyBDQUxMMSBhbmQgQ0FMTDIg YXJlIHNpbWlsYXIgZW5vdWdoCiAgICB0byBiZSBjb21iaW5lZCBpbnRvIHRoZSBzYW1lIFNMUCBn cm91cC4gICovCiAKLXN0YXRpYyBib29sCitib29sCiBjb21wYXRpYmxlX2NhbGxzX3AgKGdjYWxs ICpjYWxsMSwgZ2NhbGwgKmNhbGwyKQogewogICB1bnNpZ25lZCBpbnQgbmFyZ3MgPSBnaW1wbGVf Y2FsbF9udW1fYXJncyAoY2FsbDEpOwpAQCAtMjkwNyw2ICsyOTA3LDcgQEAgb3B0aW1pemVfbG9h ZF9yZWRpc3RyaWJ1dGlvbiAoc2NhbGFyX3N0bXRzX3RvX3NscF90cmVlX21hcF90ICpic3RfbWFw LAogc3RhdGljIGJvb2wKIHZlY3RfbWF0Y2hfc2xwX3BhdHRlcm5zXzIgKHNscF90cmVlICpyZWZf bm9kZSwgdmVjX2luZm8gKnZpbmZvLAogCQkJICAgc2xwX3RyZWVfdG9fbG9hZF9wZXJtX21hcF90 ICpwZXJtX2NhY2hlLAorCQkJICAgc2xwX2NvbXBhdF9ub2Rlc19tYXBfdCAqY29tcGF0X2NhY2hl LAogCQkJICAgaGFzaF9zZXQ8c2xwX3RyZWU+ICp2aXNpdGVkKQogewogICB1bnNpZ25lZCBpOwpA QCAtMjkxOCwxMSArMjkxOSwxMyBAQCB2ZWN0X21hdGNoX3NscF9wYXR0ZXJuc18yIChzbHBfdHJl ZSAqcmVmX25vZGUsIHZlY19pbmZvICp2aW5mbywKICAgc2xwX3RyZWUgY2hpbGQ7CiAgIEZPUl9F QUNIX1ZFQ19FTFQgKFNMUF9UUkVFX0NISUxEUkVOIChub2RlKSwgaSwgY2hpbGQpCiAgICAgZm91 bmRfcCB8PSB2ZWN0X21hdGNoX3NscF9wYXR0ZXJuc18yICgmU0xQX1RSRUVfQ0hJTERSRU4gKG5v ZGUpW2ldLAotCQkJCQkgIHZpbmZvLCBwZXJtX2NhY2hlLCB2aXNpdGVkKTsKKwkJCQkJICB2aW5m bywgcGVybV9jYWNoZSwgY29tcGF0X2NhY2hlLAorCQkJCQkgIHZpc2l0ZWQpOwogCiAgIGZvciAo dW5zaWduZWQgeCA9IDA7IHggPCBudW1fX3NscF9wYXR0ZXJuczsgeCsrKQogICAgIHsKLSAgICAg IHZlY3RfcGF0dGVybiAqcGF0dGVybiA9IHNscF9wYXR0ZXJuc1t4XSAocGVybV9jYWNoZSwgcmVm X25vZGUpOworICAgICAgdmVjdF9wYXR0ZXJuICpwYXR0ZXJuCisJPSBzbHBfcGF0dGVybnNbeF0g KHBlcm1fY2FjaGUsIGNvbXBhdF9jYWNoZSwgcmVmX25vZGUpOwogICAgICAgaWYgKHBhdHRlcm4p CiAJewogCSAgcGF0dGVybi0+YnVpbGQgKHZpbmZvKTsKQEAgLTI5NDMsNyArMjk0Niw4IEBAIHZl Y3RfbWF0Y2hfc2xwX3BhdHRlcm5zXzIgKHNscF90cmVlICpyZWZfbm9kZSwgdmVjX2luZm8gKnZp bmZvLAogc3RhdGljIGJvb2wKIHZlY3RfbWF0Y2hfc2xwX3BhdHRlcm5zIChzbHBfaW5zdGFuY2Ug aW5zdGFuY2UsIHZlY19pbmZvICp2aW5mbywKIAkJCSBoYXNoX3NldDxzbHBfdHJlZT4gKnZpc2l0 ZWQsCi0JCQkgc2xwX3RyZWVfdG9fbG9hZF9wZXJtX21hcF90ICpwZXJtX2NhY2hlKQorCQkJIHNs cF90cmVlX3RvX2xvYWRfcGVybV9tYXBfdCAqcGVybV9jYWNoZSwKKwkJCSBzbHBfY29tcGF0X25v ZGVzX21hcF90ICpjb21wYXRfY2FjaGUpCiB7CiAgIERVTVBfVkVDVF9TQ09QRSAoInZlY3RfbWF0 Y2hfc2xwX3BhdHRlcm5zIik7CiAgIHNscF90cmVlICpyZWZfbm9kZSA9ICZTTFBfSU5TVEFOQ0Vf VFJFRSAoaW5zdGFuY2UpOwpAQCAtMjk1Myw3ICsyOTU3LDggQEAgdmVjdF9tYXRjaF9zbHBfcGF0 dGVybnMgKHNscF9pbnN0YW5jZSBpbnN0YW5jZSwgdmVjX2luZm8gKnZpbmZvLAogCQkgICAgICJB bmFseXppbmcgU0xQIHRyZWUgJXAgZm9yIHBhdHRlcm5zXG4iLAogCQkgICAgIFNMUF9JTlNUQU5D RV9UUkVFIChpbnN0YW5jZSkpOwogCi0gIHJldHVybiB2ZWN0X21hdGNoX3NscF9wYXR0ZXJuc18y IChyZWZfbm9kZSwgdmluZm8sIHBlcm1fY2FjaGUsIHZpc2l0ZWQpOworICByZXR1cm4gdmVjdF9t YXRjaF9zbHBfcGF0dGVybnNfMiAocmVmX25vZGUsIHZpbmZvLCBwZXJtX2NhY2hlLCBjb21wYXRf Y2FjaGUsCisJCQkJICAgIHZpc2l0ZWQpOwogfQogCiAvKiBTVE1UX0lORk8gaXMgYSBzdG9yZSBn cm91cCBvZiBzaXplIEdST1VQX1NJWkUgdGhhdCB3ZSBhcmUgY29uc2lkZXJpbmcKQEAgLTM0Mzcs MTIgKzM0NDIsMTQgQEAgdmVjdF9hbmFseXplX3NscCAodmVjX2luZm8gKnZpbmZvLCB1bnNpZ25l ZCBtYXhfdHJlZV9zaXplKQogCiAgIGhhc2hfc2V0PHNscF90cmVlPiB2aXNpdGVkX3BhdHRlcm5z OwogICBzbHBfdHJlZV90b19sb2FkX3Blcm1fbWFwX3QgcGVybV9jYWNoZTsKKyAgc2xwX2NvbXBh dF9ub2Rlc19tYXBfdCBjb21wYXRfY2FjaGU7CiAKICAgLyogU2VlIGlmIGFueSBwYXR0ZXJucyBj YW4gYmUgZm91bmQgaW4gdGhlIFNMUCB0cmVlLiAgKi8KICAgYm9vbCBwYXR0ZXJuX2ZvdW5kID0g ZmFsc2U7CiAgIEZPUl9FQUNIX1ZFQ19FTFQgKExPT1BfVklORk9fU0xQX0lOU1RBTkNFUyAodmlu Zm8pLCBpLCBpbnN0YW5jZSkKICAgICBwYXR0ZXJuX2ZvdW5kIHw9IHZlY3RfbWF0Y2hfc2xwX3Bh dHRlcm5zIChpbnN0YW5jZSwgdmluZm8sCi0JCQkJCSAgICAgICZ2aXNpdGVkX3BhdHRlcm5zLCAm cGVybV9jYWNoZSk7CisJCQkJCSAgICAgICZ2aXNpdGVkX3BhdHRlcm5zLCAmcGVybV9jYWNoZSwK KwkJCQkJICAgICAgJmNvbXBhdF9jYWNoZSk7CiAKICAgLyogSWYgYW55IHdlcmUgZm91bmQgb3B0 aW1pemUgcGVybXV0YXRpb25zIG9mIGxvYWRzLiAgKi8KICAgaWYgKHBhdHRlcm5fZm91bmQpCmRp ZmYgLS1naXQgYS9nY2MvdHJlZS12ZWN0b3JpemVyLmggYi9nY2MvdHJlZS12ZWN0b3JpemVyLmgK aW5kZXggMmY2ZTFlMjY4ZmIwN2U5ZGUwNjVmZjljNDVhZjg3NTQ2ZTU2NWQ2Ni4uODNjZDA5MTlj NzgzOGM2NTU3NmUxZGViZDg4MWUwZWM2MzZhNjA1YSAxMDA2NDQKLS0tIGEvZ2NjL3RyZWUtdmVj dG9yaXplci5oCisrKyBiL2djYy90cmVlLXZlY3Rvcml6ZXIuaApAQCAtMjI2OCw2ICsyMjY4LDcg QEAgZXh0ZXJuIHZvaWQgZHVwbGljYXRlX2FuZF9pbnRlcmxlYXZlICh2ZWNfaW5mbyAqLCBnaW1w bGVfc2VxICosIHRyZWUsCiBleHRlcm4gaW50IHZlY3RfZ2V0X3BsYWNlX2luX2ludGVybGVhdmlu Z19jaGFpbiAoc3RtdF92ZWNfaW5mbywgc3RtdF92ZWNfaW5mbyk7CiBleHRlcm4gc2xwX3RyZWUg dmVjdF9jcmVhdGVfbmV3X3NscF9ub2RlICh1bnNpZ25lZCwgdHJlZV9jb2RlKTsKIGV4dGVybiB2 b2lkIHZlY3RfZnJlZV9zbHBfdHJlZSAoc2xwX3RyZWUpOworZXh0ZXJuIGJvb2wgY29tcGF0aWJs ZV9jYWxsc19wIChnY2FsbCAqLCBnY2FsbCAqKTsKIAogLyogSW4gdHJlZS12ZWN0LXBhdHRlcm5z LmMuICAqLwogZXh0ZXJuIHZvaWQKQEAgLTIzMDYsNiArMjMwNywxMiBAQCB0eXBlZGVmIGVudW0g X2NvbXBsZXhfcGVybV9raW5kcyB7CiB0eXBlZGVmIGhhc2hfbWFwIDxzbHBfdHJlZSwgY29tcGxl eF9wZXJtX2tpbmRzX3Q+CiAgIHNscF90cmVlX3RvX2xvYWRfcGVybV9tYXBfdDsKIAorLyogQ2Fj aGUgZnJvbSBub2RlcyBwYWlyIHRvIGJlaW5nIGNvbXBhdGlibGUgb3Igbm90LiAgKi8KK3R5cGVk ZWYgcGFpcl9oYXNoIDxub2ZyZWVfcHRyX2hhc2ggPF9zbHBfdHJlZT4sCisJCSAgIG5vZnJlZV9w dHJfaGFzaCA8X3NscF90cmVlPj4gc2xwX25vZGVfaGFzaDsKK3R5cGVkZWYgaGFzaF9tYXAgPHNs cF9ub2RlX2hhc2gsIGJvb2w+IHNscF9jb21wYXRfbm9kZXNfbWFwX3Q7CisKKwogLyogVmVjdG9y IHBhdHRlcm4gbWF0Y2hlciBiYXNlIGNsYXNzLiAgQWxsIFNMUCBwYXR0ZXJuIG1hdGNoZXJzIG11 c3QgaW5oZXJpdAogICAgZnJvbSB0aGlzIHR5cGUuICAqLwogCkBAIC0yMzM4LDcgKzIzNDUsOCBA QCBjbGFzcyB2ZWN0X3BhdHRlcm4KICAgcHVibGljOgogCiAgICAgLyogQ3JlYXRlIGEgbmV3IGlu c3RhbmNlIG9mIHRoZSBwYXR0ZXJuIG1hdGNoZXIgY2xhc3Mgb2YgdGhlIGdpdmVuIHR5cGUuICAq LwotICAgIHN0YXRpYyB2ZWN0X3BhdHRlcm4qIHJlY29nbml6ZSAoc2xwX3RyZWVfdG9fbG9hZF9w ZXJtX21hcF90ICosIHNscF90cmVlICopOworICAgIHN0YXRpYyB2ZWN0X3BhdHRlcm4qIHJlY29n bml6ZSAoc2xwX3RyZWVfdG9fbG9hZF9wZXJtX21hcF90ICosCisJCQkJICAgIHNscF9jb21wYXRf bm9kZXNfbWFwX3QgKiwgc2xwX3RyZWUgKik7CiAKICAgICAvKiBCdWlsZCB0aGUgcGF0dGVybiBm cm9tIHRoZSBkYXRhIGNvbGxlY3RlZCBzbyBmYXIuICAqLwogICAgIHZpcnR1YWwgdm9pZCBidWls ZCAodmVjX2luZm8gKikgPSAwOwpAQCAtMjM1Miw2ICsyMzYwLDcgQEAgY2xhc3MgdmVjdF9wYXR0 ZXJuCiAKIC8qIEZ1bmN0aW9uIHBvaW50ZXIgdG8gY3JlYXRlIGEgbmV3IHBhdHRlcm4gbWF0Y2hl ciBmcm9tIGEgZ2VuZXJpYyB0eXBlLiAgKi8KIHR5cGVkZWYgdmVjdF9wYXR0ZXJuKiAoKnZlY3Rf cGF0dGVybl9kZWNsX3QpIChzbHBfdHJlZV90b19sb2FkX3Blcm1fbWFwX3QgKiwKKwkJCQkJICAg ICAgc2xwX2NvbXBhdF9ub2Rlc19tYXBfdCAqLAogCQkJCQkgICAgICBzbHBfdHJlZSAqKTsKIAog LyogTGlzdCBvZiBzdXBwb3J0ZWQgcGF0dGVybiBtYXRjaGVycy4gICovCg== --_002_VI1PR08MB5325E4E7FC25F1ECF90FC1E1FF7B9VI1PR08MB5325eurp_--