From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM10-DM6-obe.outbound.protection.outlook.com (mail-dm6nam10on2090.outbound.protection.outlook.com [40.107.93.90]) by sourceware.org (Postfix) with ESMTPS id 95ECD3858D3C for ; Sun, 24 Oct 2021 19:03:19 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 95ECD3858D3C ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Lt1+//Pb3dDBzCxLQ8Ow68knpbxZUxTPivksDPrwhOQLcjiR6ia+WCqqcYS4OUWTo2E2qP478eL7/5L6bRJmdPOj3uehF9By2nu5v+N4ZVX+uOfxMomEKScm5ZRh2fVtyNm3YoB7mFolF5gsmlPvkRLqYUrXIfj1yHu3OP4j0FP1en6oTydbqWMY36KdVgORme3dOtqQsbPjbUjYYoQmN16VQlG2Kjrm3fLjX4ysD1Qh7C9v1Jc4AnIN/AX2eJ6fU3+2D6B5OcKn/12GEMFwE2NPD6NaxEdRhMMfRNZWL4PWJLzqd+tUpTX+wbPHYGiRxMnmf0lwg93n1RHloTIPBw== 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=91CoQpKWHuuPWkAdecLC9i/zwiDHN9tpDFpniU+L+Y8=; b=DOClC+XrfAR40F1zjLqE4GS7nfE9hsNA+Xf6patiBma91HvORjnAXT3WAqpKuhnKioEGgr4SddL2aXtVB7D08chGyAoYFWYAG8thuSpWg9P9vLA+jhPNb/JwiDRR7Frm+DGi37f9+dgwCIcVZjYEQxc4IiRtQ8jw61AVnQx+UQGwIySj3k5qrc+8ld3VSadYoi/XXE0YnmsMu/yqlGYyWIyHxz/tIL0cP9Hv+Td+90gYQg3oTUjD1JKB+suhFW0QNIf8dmQX+03U/XNEFFurwKh084Yp4o2q65Gkw+HfFmaz8Oh1I7/2DO0HVgl/PUQ1UpQB9rD+XGCYubQB0mlcNA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=os.amperecomputing.com; dmarc=pass action=none header.from=os.amperecomputing.com; dkim=pass header.d=os.amperecomputing.com; arc=none Received: from SN6PR01MB4240.prod.exchangelabs.com (2603:10b6:805:ae::22) by SA0PR01MB6154.prod.exchangelabs.com (2603:10b6:806:e5::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4628.16; Sun, 24 Oct 2021 19:03:17 +0000 Received: from SN6PR01MB4240.prod.exchangelabs.com ([fe80::edf1:7957:f80d:8498]) by SN6PR01MB4240.prod.exchangelabs.com ([fe80::edf1:7957:f80d:8498%7]) with mapi id 15.20.4628.020; Sun, 24 Oct 2021 19:03:17 +0000 From: Di Zhao OS To: Richard Biener CC: "gcc-patches@gcc.gnu.org" Subject: RE: [PATCH v2] tree-optimization/101186 - extend FRE with "equivalence map" for condition prediction Thread-Topic: [PATCH v2] tree-optimization/101186 - extend FRE with "equivalence map" for condition prediction Thread-Index: AderIQ5ze6DGwTxqRe+jZTicjjVEiwLoytWABI5GjDA= Date: Sun, 24 Oct 2021 19:03:17 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: zh-CN X-MS-Has-Attach: yes X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 5162c9df-c224-4655-de42-08d99720f00d x-ms-traffictypediagnostic: SA0PR01MB6154: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:8882; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: I+nuqwvserlFdRDHwUCwmdIh6QhYfdJejJglZkszvwrzwrQRnSyb05pjAvKCU6ebLtmKBMf5yMJPZ2hHn9eOWD/ZYqIRWfPoZc0tfv6aNCWVyUMMkvW3Ys1b/08jAPqfLkvaIQoxbh7hwFdRdp6HYkIRZsdr7Bx/e60gJPFbK9LTn+UcIOWiuhxkZ651+gItqF3gLzWLFD3dt9diPWZucJEEtIXv8UvL8/E27Vbr0Ax27VnhHEPwiX3fLuQg5Zh5Z3uyx34203RQ0EVc3ca/0Q5k9O2WykDm3AtjSkeO+GNO1eOu6GN8PJdNnPu6jxSFyN8nffTnJTyOFtcLg5Nq+Ph/8ssRy67Q1DWykuXc4xVnh9j3ui8IgDU0KdadyYQttaEKVuSqy9HcKbkAYnXpnJgXJ1ePxKTprWFOq+IQZkB+dsx6e6XQdKNkX6xY81DBEi5QpsIEHVHGqoK2La8BT65MU8yikGeft+cuk8zlvYNqPfLknbCr2tm0wN7mTtFhb7NAu02ggRDrgnOJMbevEkca0tAPBsmX+u+2CKtKPlil8RMvcVVS4Go2JH5BRvUnRXJ83eRnOI9aO/UT9FTvHQpDXdtTxbBTFHNuKmJYRbpj0DWuSIdVUKp6Yl1Nx6VU95f88nooFrmlLiezA+HFSTJwFIQob/TZNIcncdwCyCLcnCTDMGpHvSm8zvQ8ZI2epjRf37YqUYRiTZw0c9EejWhC3Vp1ZBhC/N0Weqy8CTWXex4feR1xLZ9Il5wZ4ojwmFSZcd7M+xDLoZ9Y8jX1Lw== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SN6PR01MB4240.prod.exchangelabs.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(6506007)(8936002)(53546011)(508600001)(76116006)(26005)(71200400001)(122000001)(52536014)(83380400001)(4326008)(6916009)(2906002)(8676002)(186003)(66946007)(66556008)(66476007)(66446008)(7696005)(38070700005)(86362001)(316002)(4001150100001)(5660300002)(64756008)(30864003)(33656002)(55016002)(9686003)(38100700002)(99936003); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?WjRjRzlBak5VU05UcGEyVGNveCs0SndXcDNTdmhZdzgrV24vdjVVT0g0QUp0?= =?utf-8?B?MG95dGg2c3pzVndlT2pLaU93ZEtvU210MHFYaExGTkVqajYzY2RQeVlROTk5?= =?utf-8?B?MDJMK3crMEI1UkJDb3Q2UVRaUm1hWllWSlJINHV2M3A5WXlTeVEwd2VScG9C?= =?utf-8?B?T0I2b25PZGp1YVNGU2gzdytHUTZLZGhJYU5MUS9IRkNGWjhWaUxOZ1MyYkFM?= =?utf-8?B?ZlJlVHlQamt3VXZqbVVQb29BbmZROXVOMGpVSkpKNW9ZSUVxaFhDem1GazNv?= =?utf-8?B?SWRQR0ZNUlZndS9NV2tLTG9keHNYbHFRQkxJclV1T0xiQzQzWHdlaTVuYllz?= =?utf-8?B?K1Y0ejFSYWNzSkI3akRwc1AvcW5RZlhpOWg0b0JFVXg0amJtVXdRajQ5QjJW?= =?utf-8?B?VVU1OFhTMjFXcTZNSG9pMlFaVkZiLzBDWXdYVzk0dE5UUjVtOG5pR2c4TDA5?= =?utf-8?B?RzhseFNzK1NYMnZxc09URXZqMWJsRGRSVG1ENmRQSXNqaTJEazlIeFJ1ekZi?= =?utf-8?B?c3lQTTN3R0NNaHN6UDdMSkFiS1lHanRMVWFEbTBVSEtTdlpvNlBrWURLTkVE?= =?utf-8?B?c3ZYM0sxaVhZTzUvUU0yQjZqMFBkb2NpSGZoZktscENqU3Z2T2d6VjcxMXRM?= =?utf-8?B?SGtrRS9TdEh6amlJRzAvcXFJMnNDRVVJNUU3dWJLL1h2RmlBWE92cmxoT3lw?= =?utf-8?B?SWlZT3p0TzVVVUdtVm4xSjY3b1IxVmc3VjVnSGJqOVpqcDFCWWJpNmZqS2Z4?= =?utf-8?B?dUxoeXhoV1lSREp3Z0ZvRytsajAyUWRUR0FmWUlDN0MwelZ0ak1ZN29GaDlS?= =?utf-8?B?ZFBsSmlxNGFyUkE5NVorT2hMRitGQUtlQUlHTW9scFJQOCtUNWltTTRwSG5D?= =?utf-8?B?aEhhNC9TU1hmd2RwdnBJbU9mRE5LWEEyOHRSd1ZJbTJtYm1Ka0VVVjV6d0pk?= =?utf-8?B?a3pseDVBSVM1WTkrQzNhNFYvaXptQ0Fya1ArWFZBKzFoU2dFOUdsRGxueFdx?= =?utf-8?B?M042L1E0cVBVTlNkMEEzeEl5MCtVRWxOZkYzanNWVzYwWVJOQlpreUdkUUhu?= =?utf-8?B?UTlZc0tFRnl4bnIvY2VMSi92Vk1ZbFN0RlBQWGtZYUxSeXNlWTFiNXg4R2k0?= =?utf-8?B?NWNZalpKY2pSVVRZc3JXUjZ2VnYyOS9xRzNrYTRhb2NhTm1DYVNFZWw0WmFI?= =?utf-8?B?U2pCRkozeXlkZWkxMUJ3SUNRWUY2SXh0SDdITjZsNGMyNXpWLy9qMGJhQkF3?= =?utf-8?B?RFAyNWRvQlZWeXBLUE8vODZOV2U1RTdOdzFsOUdFQ1FHQVBhT1RJeFlmbUtT?= =?utf-8?B?K2lFcVIxY2NMZWxvc1J1RERlMm9uQWFoUTRFUTdMUWxxY2hJaGRRUGNORjBy?= =?utf-8?B?WGpsdjFXY0ZSSzBUNWhPZm1aTnpnVk1Kc1pKRThVR1dydFdMMzhQZFpaK2J6?= =?utf-8?B?UHJhMVcvb1ZaNWpIVXVzUmJxSk9IcVF0TmRiTHd0MlgvcE1CbVF5SnJ4d2ND?= =?utf-8?B?ZU13WHBlak1nMG5ZVFZJRHR5Yi94YXhXSGg3cDc0U2lONFNFN3B6dk1VUXZN?= =?utf-8?B?WEdteDNEMXpCSHptQzNRazExWWhZWjVTTExob1Y2M3Y5Z0VRUXkxRzBKbHAw?= =?utf-8?B?eE1sbU50eFZqYlJ2QlNIVlU3WnljNVZBK3JTa0FyYlFwazQ0STI4YVFlSVhw?= =?utf-8?B?cWhINEpQUFVpUUxRRTZ1dy83MkF4VnV3WkQxV2VuSktlZFdzK09RS1psRDR0?= =?utf-8?B?b052QUJ2OXk2SXFmd216MWZndWl4ZlBCTy83WjAzRUZ4bU1TUGNDNEdGUkRX?= =?utf-8?B?VDY0bU9mbXdJcHNkWjdCRnRuSlJjdzA0M3N6TlRUcXBrcHk1WW4vZ1lzNlNm?= =?utf-8?B?WUJvWEMvVkc2SlRsNWtRSndwSG01M2E5NWxvY29UU2FDQWZmN1NtM1JTUDRY?= =?utf-8?B?azRrMHg0cTFqK0huWjhsUWRPb3NUd2drN2FyWXRGWmlUSEZYRG9ONkx0T3Z2?= =?utf-8?B?THhGVENZRGhTMGN5c1FaM1JQRVdSOXpLRlZia0J6QnUrS2ZBSHNmSElISDg2?= =?utf-8?B?cE5QN1ZkQVNXaUFrVElzemR6WUlkMWZWSDl6VDBlT3dHQ0I0aGZoK3YxSmJQ?= =?utf-8?B?L1k5L0psaHJZT1ZUaUJpNGJnWThuUFFueS9DelpnM2pFWGY5Ymw0TGxDK3lM?= =?utf-8?B?Uk41amprTkFEZnNYOEhiVlNJZm9NN0c2S1drQWxrc3NqWHVta1VNRDNNYUJN?= =?utf-8?B?SjhYbFRXS0xtZGR5NXZ3SDJMWkRkY0QzOStISUNiVHNCNS9sVDB0ODhETzVE?= =?utf-8?Q?4l2/zO2zudx9b0gzWH?= Content-Type: multipart/mixed; boundary="_002_SN6PR01MB4240F1B812D1C86CADA0EC37E8829SN6PR01MB4240prod_" MIME-Version: 1.0 X-OriginatorOrg: os.amperecomputing.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: SN6PR01MB4240.prod.exchangelabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5162c9df-c224-4655-de42-08d99720f00d X-MS-Exchange-CrossTenant-originalarrivaltime: 24 Oct 2021 19:03:17.0315 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3bc2b170-fd94-476d-b0ce-4229bdc904a7 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: ve4w7mYGxQk4Ap5aG8dYfNK6mBNjPymaEsOcutUO74I9uVtyA1bOW0Wj3+fLdMJvMhtYgOhNpzNo+8WZ8CGAZEXa+iTKUwHyL1pK9d3MATyvP8AYVgF7QjY/JsFKmShz X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA0PR01MB6154 X-Spam-Status: No, score=-2.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, KAM_ASCII_DIVIDERS, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_PASS, TXREP autolearn=no 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: Sun, 24 Oct 2021 19:03:22 -0000 --_002_SN6PR01MB4240F1B812D1C86CADA0EC37E8829SN6PR01MB4240prod_ Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGksDQoNCkF0dGFjaGVkIGlzIGEgbmV3IHZlcnNpb24gb2YgdGhlIHBhdGNoLCBtYWlubHkgZm9y IGltcHJvdmluZyBwZXJmb3JtYW5jZQ0KYW5kIHNpbXBsaWZ5aW5nIHRoZSBjb2RlLg0KDQpGaXJz dCwgcmVnYXJkaW5nIHRoZSBjb21tZW50czoNCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0t LQ0KPiBGcm9tOiBSaWNoYXJkIEJpZW5lciA8cmljaGFyZC5ndWVudGhlckBnbWFpbC5jb20+DQo+ IFNlbnQ6IEZyaWRheSwgT2N0b2JlciAxLCAyMDIxIDk6MDAgUE0NCj4gVG86IERpIFpoYW8gT1Mg PGRpemhhb0Bvcy5hbXBlcmVjb21wdXRpbmcuY29tPg0KPiBDYzogZ2NjLXBhdGNoZXNAZ2NjLmdu dS5vcmcNCj4gU3ViamVjdDogUmU6IFtQQVRDSCB2Ml0gdHJlZS1vcHRpbWl6YXRpb24vMTAxMTg2 IC0gZXh0ZW5kIEZSRSB3aXRoDQo+ICJlcXVpdmFsZW5jZSBtYXAiIGZvciBjb25kaXRpb24gcHJl ZGljdGlvbg0KPiANCj4gT24gVGh1LCBTZXAgMTYsIDIwMjEgYXQgODoxMyBQTSBEaSBaaGFvIE9T DQo+IDxkaXpoYW9Ab3MuYW1wZXJlY29tcHV0aW5nLmNvbT4gd3JvdGU6DQo+ID4NCj4gPiBTb3Jy eSBhYm91dCB1cGRhdGluZyBvbiB0aGlzIGFmdGVyIHNvIGxvbmcuIEl0IHRvb2sgbWUgbXVjaCB0 aW1lIHRvIHdvcmsgb3V0IGENCj4gPiBuZXcgcGxhbiBhbmQgcGFzcyB0aGUgdGVzdHMuDQo+ID4N Cj4gPiBUaGUgbmV3IGlkZWEgaXMgdG8gdXNlIG9uZSB2YXJpYWJsZSB0byByZXByZXNlbnQgYSBz ZXQgb2YgZXF1YWwgdmFyaWFibGVzIGF0DQo+ID4gc29tZSBiYXNpYy1ibG9jay4gVGhpcyB2YXJp YWJsZSBpcyBjYWxsZWQgYSAiZXF1aXZhbGVuY2UgaGVhZCIgb3IgImVxdWl2LWhlYWQiDQo+ID4g aW4gdGhlIGNvZGUuIChUaGVyZSdzIG5vLWxvbmdlciBhICJlcXVpdmFsZW5jZSBtYXAiLikNCj4g Pg0KPiA+IC0gSW5pdGlhbGx5IGFuIFNTQV9OQU1FJ3MgImVxdWl2YWxlbmNlIGhlYWQiIGlzIGl0 cyB2YWx1ZSBudW1iZXIuIFRlbXBvcmFyeQ0KPiA+ICAgZXF1aXZhbGVuY2UgaGVhZHMgYXJlIHJl Y29yZGVkIGFzIHVuYXJ5IE5PUF9FWFBSIHJlc3VsdHMgaW4gdGhlIHZuX25hcnlfb3BfdA0KPiA+ ICAgbWFwLiBCZXNpZGVzLCB3aGVuIGluc2VydGluZyBpbnRvIHZuX25hcnlfb3BfdCBtYXAsIG1h a2UgdGhlIG5ldyByZXN1bHQgYXQNCj4gPiAgIGZyb250IG9mIHRoZSB2bl9wdmFsIGxpc3QsIHNv IHRoYXQgd2hlbiBzZWFyY2hpbmcgZm9yIGEgdmFyaWFibGUncw0KPiA+ICAgZXF1aXZhbGVuY2Ug aGVhZCwgdGhlIGZpcnN0IHJlc3VsdCByZXByZXNlbnRzIHRoZSBsYXJnZXN0IGVxdWl2YWxlbmNl IHNldCBhdA0KPiA+ICAgY3VycmVudCBsb2NhdGlvbi4NCj4gPiAtIEluIHZuX3NzYV9hdXhfdCwg bWFpbnRhaW4gYSBsaXN0IG9mIHJlZmVyZW5jZXMgdG8gdmFsaWRfaW5mby0+bmFyeSBlbnRyeS4N Cj4gPiAgIEZvciByZWNvcmRlZCBlcXVpdmFsZW5jZXMsIHRoZSByZWZlcmVuY2UgaXMgcmVzdWx0 LT5lbnRyeTsgZm9yIG5vcm1hbCBOLWFyeQ0KPiA+ICAgb3BlcmF0aW9ucywgdGhlIHJlZmVyZW5j ZSBpcyBvcGVyYW5kLT5lbnRyeS4NCj4gPiAtIFdoZW4gcmVjb3JkaW5nIGVxdWl2YWxlbmNlcywg aWYgb25lIHNpZGUgQSBpcyBjb25zdGFudCBvciBoYXMgbW9yZSByZWZzLCBtYWtlDQo+ID4gICBp dCB0aGUgbmV3IGVxdWl2YWxlbmNlIGhlYWQgb2YgdGhlIG90aGVyIHNpZGUgQi4gVHJhdmVyc2Ug QidzIHJlZi1saXN0LCBpZiBhDQo+ID4gICB2YXJpYWJsZSBDJ3MgcHJldmlvdXMgZXF1aXYtaGVh ZCBpcyBCLCB1cGRhdGUgdG8gQS4gQW5kIHJlLWluc2VydCBCJ3Mgbi1hcnkNCj4gPiAgIG9wZXJh dGlvbnMgYnkgcmVwbGFjaW5nIEIgd2l0aCBBLg0KPiA+IC0gV2hlbiBpbnNlcnRpbmcgYW5kIGxv b2tpbmcgZm9yIHRoZSByZXN1bHRzIG9mIG4tYXJ5IG9wZXJhdGlvbnMsIGluc2VydCBhbmQNCj4g PiAgIGxvb2t1cCBieSB0aGUgb3BlcmFuZHMnIGVxdWl2LWhlYWRzLg0KPiA+IC4uLg0KPiA+DQo+ ID4gVGhhbmtzLA0KPiA+IERpIFpoYW8NCj4gPg0KPiA+IC0tLS0tLS0tDQo+ID4gRXh0ZW5kIEZS RSB3aXRoIHRlbXBvcmFyeSBlcXVpdmFsZW5jZXMuDQo+IA0KPiBDb21tZW50cyBvbiB0aGUgcGF0 Y2g6DQo+IA0KPiArICAvKiBuYXJ5X3JlZiBjb3VudC4gICovDQo+ICsgIHVuc2lnbmVkIG51bV9u YXJ5X3JlZjsNCj4gKw0KPiANCj4gSSB0aGluayBhIHVuc2lnbmVkIHNob3J0IHNob3VsZCBiZSBl bm91Z2ggYW5kIHRoYXQgd291bGQgbmljZWx5DQo+IHBhY2sgYWZ0ZXIgdmFsdWVfaWQgdG9nZXRo ZXIgd2l0aCB0aGUgYml0ZmllbGQgKG1heWJlIGNoYW5nZSB0aGF0DQo+IHRvIHVuc2lnbmVkIHNo b3J0IDoxIHRoZW4pLg0KDQpDaGFuZ2VkIG51bV9uYXJ5X3JlZiB0byB1bnNpZ25lZCBzaG9ydCBh bmQgbW92ZWQgYWZ0ZXIgdmFsdWVfaWQuDQoNCj4gQEAgLTczMDcsMTcgKzc4MzksMjMgQEAgcHJv Y2Vzc19iYiAocnBvX2VsaW0gJmF2YWlsLCBiYXNpY19ibG9jayBiYiwNCj4gICAgICAgICAgICAg dHJlZSB2YWwgPSBnaW1wbGVfc2ltcGxpZnkgKGdpbXBsZV9jb25kX2NvZGUgKGxhc3QpLA0KPiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbl90eXBlX25vZGUs IGxocywgcmhzLA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVM TCwgdm5fdmFsdWVpemUpOw0KPiArICAgICAgICAgICB2bl9uYXJ5X29wX3Qgdm5yZXN1bHQgPSBO VUxMOw0KPiAgICAgICAgICAgICAvKiBJZiB0aGUgY29uZGl0aW9uIGRpZG4ndCBzaW1wbGZ5IHNl ZSBpZiB3ZSBoYXZlIHJlY29yZGVkDQo+ICAgICAgICAgICAgICAgIGFuIGV4cHJlc3Npb24gZnJv bSBzb2ZhciB0YWtlbiBlZGdlcy4gICovDQo+ICAgICAgICAgICAgIGlmICghIHZhbCB8fCBUUkVF X0NPREUgKHZhbCkgIT0gSU5URUdFUl9DU1QpDQo+ICAgICAgICAgICAgICAgew0KPiAtICAgICAg ICAgICAgICAgdm5fbmFyeV9vcF90IHZucmVzdWx0Ow0KPiANCj4gbG9va3MgbGlrZSB5b3UgZG9u J3QgbmVlZCB2bnJlc3VsdCBvdXRzaWRlIG9mIHRoZSBpZigpPw0KDQp2bnJlc3VsdCBpcyByZXVz ZWQgbGF0ZXIgdG8gcmVjb3JkIGVxdWl2YWxlbmNlcyBnZW5lcmF0ZWQgYnkgUEhJIG5vZGVzLg0K DQo+ICsvKiBGaW5kIHByZWRpY2F0ZWQgdmFsdWUgb2Ygdm5fbmFyeV9vcCBieSB0aGUgb3BlcmFu ZHMnIGVxdWl2YWxlbmNlcy4gIFJldHVybg0KPiArICogTlVMTF9UUkVFIGlmIG5vIGtub3duIHJl c3VsdCBpcyBmb3VuZC4gICovDQo+ICsNCj4gK3N0YXRpYyB0cmVlDQo+ICtmaW5kX3ByZWRpY2F0 ZWRfdmFsdWVfYnlfZXF1aXZzICh2bl9uYXJ5X29wX3Qgdm5vLCBiYXNpY19ibG9jayBiYiwNCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm5fbmFyeV9vcF90ICp2bnJlc3VsdCkN Cj4gK3sNCj4gKyAgbG9va3VwX2VxdWl2X2hlYWRzICh2bm8tPmxlbmd0aCwgdm5vLT5vcCwgdm5v LT5vcCwgYmIpOw0KPiArICB0cmVlIHJlc3VsdA0KPiArICAgID0gc2ltcGxpZnlfbmFyeV9vcCAo dm5vLT5sZW5ndGgsIHZuby0+b3Bjb2RlLCB2bm8tPm9wLCB2bm8tPnR5cGUpOw0KPiANCj4gd2h5 IGlzIGl0IG5lY2Vzc2FyeSB0byBzaW1wbGlmeSBoZXJlPyAgSXQgbG9va3MgbGlrZSB0aGUgY2Fs bGVyDQo+IGFscmVhZHkgZG9lcyB0aGlzLg0KDQpJbiB0aGUgbmV3IHBhdGNoLCBjaGFuZ2VkIHRo ZSBjb2RlIGEgbGl0dGxlIHRvIHJlbW92ZSByZWR1bmRhbnQgY2FsY3VsYXRpb24uDQoNCj4gSSB3 b25kZXIgd2hldGhlciBpdCdzIHZhbGlkIHRvIGFsd2F5cyBwZXJmb3JtIGZpbmRfcHJlZGljYXRl ZF92YWx1ZV9ieV9lcXVpdnMNCj4gZnJvbSBpbnNpZGUgdm5fbmFyeV9vcF9nZXRfcHJlZGljYXRl ZF92YWx1ZSBpbnN0ZWFkIG9mIGJvbHRpbmcgaXQgdG8gb25seQ0KPiBhIHNpbmdsZSBwbGFjZT8N Cg0KUmVtb3ZlZCBmdW5jdGlvbiBmaW5kX3ByZWRpY2F0ZWRfdmFsdWVfYnlfZXF1aXZzIGFuZCBp bmxpbmVkIHRoZSBjb2RlLg0KDQpCZWNhdXNlIGxvb2t1cF9lcXVpdl9oZWFkIHVzZXMgdm5fbmFy eV9vcF9nZXRfcHJlZGljYXRlZF92YWx1ZSwgc28gSSBsZWZ0DQp2bl9uYXJ5X29wX2dldF9wcmVk aWNhdGVkX3ZhbHVlIHVuY2hhbmdlZC4gSW5zdGVhZCwgb3BlcmFuZHMgYXJlIHNldCB0bw0KZXF1 aXYtaGVhZHMgaW4gaW5pdF92bl9uYXJ5X29wX2Zyb21fc3RtdC4gU28gYWx0b2dldGhlciwgcHJl ZGljYXRlcyBhcmUgYWx3YXlzDQppbnNlcnRlZCBhbmQgc2VhcmNoZWQgYnkgZXF1aXYtaGVhZHMu DQoNCj4gKw0KPiArc3RhdGljIHZuX25hcnlfb3BfdA0KPiArdmFsX2VxdWl2X2luc2VydCAodHJl ZSBvcDEsIHRyZWUgb3AyLCBlZGdlIGUpDQo+ICt7DQo+IA0KPiArICBpZiAoaXNfZ2ltcGxlX21p bl9pbnZhcmlhbnQgKGxocykpDQo+ICsgICAgc3RkOjpzd2FwIChsaHMsIHJocyk7DQo+ICsgIGlm IChpc19naW1wbGVfbWluX2ludmFyaWFudCAobGhzKSB8fCBUUkVFX0NPREUgKGxocykgIT0gU1NB X05BTUUpDQo+ICsgICAgLyogUG9zc2libGUgaWYgaW52b2tlZCBmcm9tIHJlY29yZF9lcXVpdl9m cm9tX3ByZXZpb3VzX2NvbmQuICAqLw0KPiArICAgIHJldHVybiBOVUxMOw0KPiANCj4gQmV0dGVy IGZvcm11bGF0ZSBhbGwgb2YgdGhlIGFib3ZlIGluIHRlcm1zIG9mIG9ubHkgU1NBX05BTUUgY2hl Y2tzIHNpbmNlLi4uDQo+IA0KPiArICAvKiBNYWtlIHRoZSBoYW5kLXNpZGUgd2l0aCBtb3JlIHJl Y29yZGVkIG4tYXJ5IGV4cHJlc3Npb25zIG5ldw0KPiArICAgKiBlcXVpdmFsZW5jZS1oZWFkLCB0 byBtYWtlIGZld2VyIHJlLWluc2VydGlvbnMuICAqLw0KPiArICBpZiAoVFJFRV9DT0RFIChyaHMp ID09IFNTQV9OQU1FDQo+ICsgICAgICAmJiBWTl9JTkZPIChyaHMpLT5udW1fbmFyeV9yZWYgPCBW Tl9JTkZPIChsaHMpLT5udW1fbmFyeV9yZWYpDQo+ICsgICAgc3RkOjpzd2FwIChsaHMsIHJocyk7 DQo+IA0KPiBoZXJlIExIUyBuZWVkcyB0byBiZSBhbiBTU0FfTkFNRS4NCg0KVHJpZWQgdG8gZml4 IHRoaXMgaW4gdGhlIG5ldyBwYXRjaC4NCg0KPiArICAvKiBSZWNvcmQgZXF1aXZhbGVuY2UgYXMg dW5hcnkgTk9QX0VYUFIuICAqLw0KPiArICB2bl9uYXJ5X29wX3QgdmFsDQo+ICsgICAgPSB2bl9u YXJ5X29wX2luc2VydF9waWVjZXNfcHJlZGljYXRlZF8xICgxLCBOT1BfRVhQUiwgVFJFRV9UWVBF IChsaHMpLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm bGhzLCByaHMsIDAsIGJiKTsNCj4gDQo+IHNvIHlvdSBhcmUgcmVjb3JkaW5nIGFuIGVxdWl2YWxl bmNlIG9mIGxocyB0byByaHMgYXMgKE5PUF9FWFBSKWxocw0KPiB3aXRoIHZhbHVlIHJocz8NCj4g UHJlc3VtYWJseSB5b3UgdGhpbmsgdGhhdCdzIGdvb2QgZW5vdWdoIHRvIG5vdCBvdmVybGFwIHdp dGggZW50cmllcw0KPiBmb3IgInJlYWwiIElMPw0KDQpCeSBjaGVja2luZyByZWxhdGVkIGNvZGVz LCBpdCBzZWVtcyB0byBtZSB0aGVyZSdzIG5vIG92ZXJsYXAgYXMgbG9uZyBhcw0KZXF1aXZhbGVu Y2VzIGFyZSBpbnNlcnRlZCBhbmQgc2VhcmNoZWQgYXMgcHJlZGljYXRlZF92YWx1ZXMuIEl0IHNo b3VsZCBiZSBlYXN5DQp0byByZXBsYWNlIHRoaXMgd2l0aCBvdGhlciBwcmVmZXJyZWQgb3Bjb2Rl Lg0KDQo+IEluIHBhcnRpY3VsYXIgd2h5IGRpZCB5b3UgY2hvb3NlIHRvIF9ub3RfIHVzZSAoMiwg RVFfRVhQUiwgYm9vbGVhbl90eXBlX25vZGUsDQo+ICZbbGhzLCByaHNdLCBib29sZWFuX3RydWVf bm9kZSwgLi4uKSBsaWtlIEkgdGhpbmsgd2hhdCB3b3VsZCBiZQ0KPiBpbnNlcnRlZCBmb3IgYnkg dGhlDQo+IGV4aXN0aW5nIGNvZGUgaW4gcHJvY2Vzc19iYiB2aWEgdm5fbmFyeV9vcF9pbnNlcnRf cGllY2VzX3ByZWRpY2F0ZWQ/DQo+IEl0IHdvdWxkIHByb2JhYmx5IGZlbHQgbW9yZSBuYXR1cmFs IGlmIHRoZSAibmV3IiBjb2RlIGJvbHRlZCBvbiB0aGUgY2FzZSB3aGVyZQ0KPiB0aGF0IGlzIGNh bGxlZCB3aXRoIGFuIGVxdWl2YWxlbmNlPw0KDQpUaGUgImVxdWl2YWxlbmNlIGhlYWQicyBhY3R1 YWxseSBpbXBsZW1lbnQgRGlzam9pbnQtc2V0cy4gU28gYnkgYSBoYXNodGFibGUNCnNlYXJjaCBp biB0aGUgbmFyeS1tYXAsIHRoZSBzZXQgb2YgZXF1aXZhbGVuY2VzIG9mIGEgdmFyaWFibGUgY2Fu IGJlIGZvdW5kLg0KQWxzbyBpdCdzIGVhc3kgdG8gZmluZCBvdXQgd2hldGhlciB0d28gdmFyaWFi bGVzIGFyZSBlcXVhbC4gQW5kIHRoZSANCmRpc2pvaW50LXNldHMgYXJlIHBhdGgtY29tcHJlc3Nl ZCBieSB1cGRhdGluZyAiZXF1aXZhbGVuY2UgaGVhZCIgYW5kDQpyZS1pbnNlcnRpbmcgcHJlZGlj YXRlcy4NCg0KSW4gdGhlIG5ldyBhdHRhY2hlZCBwYXRjaCwgcHJlZGljYXRlcyBsaWtlICJBPT1C IGlzIHRydWUiIGFuZCAiQSE9QiBpcyBmYWxzZSINCmFyZSBub3QgaW5zZXJ0ZWQsIGFzIHRoZXkg Y2FuIGJlIGNvbXB1dGVkIGZyb20gZXF1aXZhbGVuY2VzLiBTYW1lIHdpdGggdGhlDQpwcmVkaWNh dGVzIGRlcml2ZWQgZnJvbSB0aGVtLiBUaGlzIHJlZHVjZXMgaW5zZXJ0aW9ucyBvZiBwcmVkaWNh dGVzIGJ5IGEgbG90ICgNCmNvdW50aW5nIHRoZSBlcXVpdmFsZW5jZXMgdGhlbXNlbHZlcyBhbmQg cmUtaW5zZXJ0ZWQgcHJlZGljYXRlcykuIEJlbG93IGFyZQ0KdGVzdCByZXN1bHRzIG9uIFNQRUMg aW50cmF0ZSwgY29tcGFyaW5nIHdpdGggdHJ1bmsgKGY0NTYxMGE0LCBPY3QgMTkpOg0KDQogICAg ICAgICAgICAgIHxtb3JlIGJiIHxtb3JlIGJiIHxtb3JlIHN0bXR8bW9yZSBzdG10fGxlc3MgICAg ICB8bGVzcw0KICAgICAgICAgICAgICB8cmVtb3ZlZCB8cmVtb3ZlZCB8cmVtb3ZlZCAgfHJlbW92 ZWQgIHxwcmVkaWNhdGVzfHByZWRpY2F0ZXMNCiAgICAgICAgICAgICAgfGF0IGZyZTEgfGF0IGZy ZTEgfGF0IGZyZTEgIHxhdCBmcmUxICB8aW5zZXJ0ZWQgIHxpbnNlcnRlZA0KLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0NCjUwMC5wZXJsYmVuY2hfcnwgNjQgICAgfCAxLjU2JSAgfCAxMDIgICAgfCAwLjE4JSAg IHwgNTE5MjggICAgfCA1My40NCUNCjUwMi5nY2NfciAgICAgIHwgNjc5ICAgfCA0Ljg4JSAgfCAy OTAgICAgfCAwLjIxJSAgIHwgMTQ5OTY4ICAgfCA2NS41JQ0KNTA1Lm1jZl9yICAgICAgfCA1ICAg ICB8IDM1LjcxJSB8IDkgICAgICB8IDEuNDAlICAgfCAzNDkgICAgICB8IDI3LjQ4JQ0KNTIwLm9t bmV0cHAgICAgfCAxMzIgICB8IDUuMzYlICB8IDQ4ICAgICB8IDAuMTQlICAgfCAyODE5MiAgICB8 IDU4LjM4JQ0KNTIzLnhhbGFuY2Jta19yfCAyMzEgICB8IDMuMTUlICB8IDMwOCAgICB8IDAuMzUl ICAgfCA2NTEzMSAgICB8IDU4Ljk1JQ0KNTI1LngyNjRfciAgICAgfCA0ICAgICB8IDEuMzYlICB8 IDI3ICAgICB8IDAuMTElICAgfCAxMDQwMSAgICB8IDQwLjY4JQ0KNTMxLmRlZXBzamVuZ19yfCAx ICAgICB8IDMuNDUlICB8IDIgICAgICB8IDAuMTQlICAgfCAxNDEyICAgICB8IDUzLjgxJQ0KNTQx LmxlZWxhX3IgICAgfCAyICAgICB8IDAuNjIlICB8IDUgICAgICB8IDAuMDYlICAgfCAzODc0ICAg ICB8IDQ4LjU2JQ0KNTQ4LmV4Y2hhbmdlMl9yfCAwICAgICB8IDAuMDAlICB8IDMgICAgICB8IDAu MDQlICAgfCAxNTkgICAgICB8IDMuMzMlDQo1NTcueHpfciAgICAgICB8IDAgICAgIHwgMC4wMCUg IHwgMyAgICAgIHwgMC4wNyUgICB8IDE4OTQgICAgIHwgNTIuMzklDQoNCkNvbnNpZGVyaW5nIHRo ZSBjb3B5aW5nIGFuZCB1bndpbmRpbmcgd29yayBzYXZlZCwgdGhpcyBwYXRjaCBjb3VsZCByZWR1 Y2UNCmNvbXBpbGUgdGltZSByYXRoZXIgdGhhbiBpbmNyZWFzZSBpdC4NCg0KPiBCdHcsIEkgZGlk bid0IGZpbmQgYW55IGNvbmRpdGlvbiB0aGF0IHByZXZlbnRzIGVxdWl2YWxlbmNlcyBiZWluZyB1 c2VkIGZvcg0KPiBub24taW50ZWdlciB0eXBlcz8gIEFyZSB5b3Ugc3VyZSB0aGlzIGlzIGFsbCB2 YWxpZCBmb3IgRlAgY29tcGFyZXMgd2l0aG91dA0KPiBmdXJ0aGVyIHJlc3RyaWN0aW9ucz8NCg0K SSB0aGluayB0aGlzIGFwcHJvYWNoIGZvbGxvd3Mgc2Njdm4ncyBwcmV2aW91cyBkZWNpc2lvbnMg b24gRlAgY29tcGFyaXNvbnMsDQpmb3IgZXF1aXZhbGVuY2VzIGFyZSBpbnNlcnRlZCBvbmx5IHdo ZW4gRVFfRVhQUnMgd2VyZSBldmFsdWF0ZWQgdG8gYmUgdHJ1ZS4NClRoZSBwYXRjaCBpcyB0ZXN0 ZWQgb24gcmVncmVzc2lvbiB0ZXN0cyBhbmQgU1BFQyBmcHJhdGUgY2FzZXMuDQoNCj4gDQo+IEBA IC00MjI0LDM2ICs0NDA0LDM0NSBAQCB2bl9uYXJ5X29wX2luc2VydF9waWVjZXNfcHJlZGljYXRl ZCAodW5zaWduZWQNCj4gaW50IGxlbmd0aCwgZW51bSB0cmVlX2NvZGUgY29kZSwNCj4gICAgICAg IGZwcmludGYgKGR1bXBfZmlsZSwgIiA9PSAlc1xuIiwNCj4gICAgICAgICAgICAgICAgaW50ZWdl cl96ZXJvcCAocmVzdWx0KSA/ICJmYWxzZSIgOiAidHJ1ZSIpOw0KPiAgICAgIH0NCj4gLSAgdm5f bmFyeV9vcF90IHZubzEgPSBhbGxvY192bl9uYXJ5X29wIChsZW5ndGgsIE5VTExfVFJFRSwgdmFs dWVfaWQpOw0KPiAtICBpbml0X3ZuX25hcnlfb3BfZnJvbV9waWVjZXMgKHZubzEsIGxlbmd0aCwg Y29kZSwgdHlwZSwgb3BzKTsNCj4gLSAgdm5vMS0+cHJlZGljYXRlZF92YWx1ZXMgPSAxOw0KPiAt ICB2bm8xLT51LnZhbHVlcyA9ICh2bl9wdmFsICopIG9ic3RhY2tfYWxsb2MgKCZ2bl90YWJsZXNf b2JzdGFjaywNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNpemVvZiAodm5fcHZhbCkpOw0KPiAtICB2bm8xLT51LnZhbHVlcy0+bmV4dCA9IE5VTEw7DQo+ IC0gIHZubzEtPnUudmFsdWVzLT5yZXN1bHQgPSByZXN1bHQ7DQo+IC0gIHZubzEtPnUudmFsdWVz LT5uID0gMTsNCj4gLSAgdm5vMS0+dS52YWx1ZXMtPnZhbGlkX2RvbWluYXRlZF9ieV9wWzBdID0g cHJlZF9lLT5kZXN0LT5pbmRleDsNCj4gLSAgcmV0dXJuIHZuX25hcnlfb3BfaW5zZXJ0X2ludG8g KHZubzEsIHZhbGlkX2luZm8tPm5hcnksIHRydWUpOw0KPiArICAvKiBJbnNlcnQgYnkgb3BlcmFu ZHMnIGVxdWl2LWhlYWRzLiAgKi8NCj4gKyAgdHJlZSBuZXdfb3BzWzNdOw0KPiArICBsb29rdXBf ZXF1aXZfaGVhZHMgKGxlbmd0aCwgb3BzLCBuZXdfb3BzLCBwcmVkX2UtPmRlc3QpOw0KPiArICAv KiBTa2lwIGlmIHRoZSByZXN1bHQgaXMga25vd24uICAqLw0KPiArICB0cmVlIHNpbXBsaWZpZWQg PSBzaW1wbGlmeV9uYXJ5X29wIChsZW5ndGgsIGNvZGUsIG5ld19vcHMsIHR5cGUpOw0KPiArICBp ZiAoc2ltcGxpZmllZCkNCj4gKyAgICB7DQo+ICsgICAgICBpZiAoZHVtcF9maWxlICYmIChkdW1w X2ZsYWdzICYgVERGX0RFVEFJTFMpKQ0KPiArICAgICAgIHsNCj4gKyAgICAgICAgIGZwcmludGYg KGR1bXBfZmlsZSwgIlJlc3VsdCBpcyBrbm93bjogIik7DQo+ICsgICAgICAgICBwcmludF9nZW5l cmljX2V4cHIgKGR1bXBfZmlsZSwgc2ltcGxpZmllZCwgVERGX05PTkUpOw0KPiArICAgICAgICAg ZnByaW50ZiAoZHVtcF9maWxlLCAiLCBza2lwcGVkLlxuIik7DQo+ICsgICAgICAgfQ0KPiArICAg ICAgcmV0dXJuIE5VTEw7DQo+ICsgICAgfQ0KPiANCj4gc29vIC0gaG93IGRvIHRoZSBleGlzdGlu ZyBwcmVkaWNhdGVkIGV4cHJlc3Npb25zIGNoYW5nZSB0byBiZSBoYW5kbGVkIGhlcmU/DQo+IFdo eSB3b3VsZCB0aGV5IGV2ZXIgYmUgc2ltcGxpZmllZD8gIFNob3VsZCB0aGlzIHNpbXBsaWZpY2F0 aW9uIG5vdCBiZXR0ZXINCj4gaGFwcGVuDQo+IHVwdGhyZWFkIHdoZW4gdmlzaXRpbmcgdGhlIGNv bmRpdGlvbmFsPyAgTWF5YmUgdGhhdCBuZWVkcyB0byB1c2UgdGhlIGVxdWl2cw0KPiBhbHJlYWR5 Pw0KDQpUaGlzIGhhcHBlbnMgd2hlbiB1cGRhdGluZyB2YXJpYWJsZSBBJ3MgZXF1aXZfaGVhZCBm cm9tIEIgdG8gQywgYW5kIA0KcmUtaW5zZXJ0aW5nIGZvcm1lciBwcmVkaWNhdGVzIG9mIEIgd2l0 aCBDLiBGb3IgZXhhbXBsZSwgInggPCAwIiBpcyByZWNvcmRlZCwNCnRoZW4geCBpcyBhc3NpZ25l ZCB3aXRoIG5ldyBlcXVpdl9oZWFkIC0xIGF0IHNvbWUgbG9jYXRpb24sIHRoZW4gLTEgPCAwIGNh bg0Kc2ltcGxpZnkuIEl0IHNob3VsZG4ndCBoYXBwZW4gd2hlbiBpbnNlcnRpbmcgbmV3IHByZWRp Y2F0ZXMuDQoNCj4gDQo+IFlvdSByZS11c2UgdGhlIHByZWRpY2F0ZWQgdmFsdWUgbGlzdCB3aGlj aCBJIHRoaW5rIGlzIGdyZWF0LCBjYW4geW91IGV4cGxhaW4NCj4gaG93ICJsYXRlc3QiIGlzIG1l YW50IGluIHRoZSBmb2xsb3dpbmc/DQo+IA0KPiBAQCAtNDE0NSw3ICs0MjY0LDEyIEBAIHZuX25h cnlfb3BfaW5zZXJ0X2ludG8gKHZuX25hcnlfb3BfdCB2bm8sDQo+IHZuX25hcnlfb3BfdGFibGVf dHlwZSAqdGFibGUsDQo+ICAgICAgICAgICAgICAgbmV4dCA9ICYoKm5leHQpLT5uZXh0Ow0KPiAg ICAgICAgICAgICB9DQo+ICAgICAgICAgICBpZiAoIWZvdW5kKQ0KPiAtICAgICAgICAgICAqbmV4 dCA9IG52YWw7DQo+ICsgICAgICAgICAgIHsNCj4gKyAgICAgICAgICAgICAvKiBJbnNlcnQgbmV3 IHZhbHVlIGF0IHRoZSBmcm9udCwgc28gdGhhdCBsb29rdXBfZXF1aXZfaGVhZCBjYW4NCj4gKyAg ICAgICAgICAgICAgKiBmaW5kIHRoZSBsYXRlc3QgcmVzdWx0LiAgKi8NCj4gKyAgICAgICAgICAg ICBudmFsLT5uZXh0ID0gdm5vLT51LnZhbHVlczsNCj4gKyAgICAgICAgICAgICB2bm8tPnUudmFs dWVzID0gbnZhbDsNCj4gKyAgICAgICAgICAgfQ0KDQpJdCBtZWFudCB0aGUgIm1vc3QgZ2VuZXJh bCIgcmVzdWx0LiAoSSBwaWNrZWQgdGhlIHdyb25nIHdvcmQuIFRoZSBkZXNjcmlwdGlvbg0KaXMg Y2hhbmdlZCBpbiB0aGUgbmV3IHBhdGNoIGZpbGUuICkNCg0KVGhlcmUgY2FuIGJlIG11bHRpcGxl IHZhbGlkIHJlc3VsdHMgYXQgdGhlIHNhbWUgdGltZS4gQXMgd2UgdHJhdmVyc2UgaW4gUlBPIGFu ZA0KdXBkYXRlIGVxdWl2LWhlYWRzIChpLmUuIHVuaXRlIGRpc2pvaW50LXNldHMpLCB0aGUgbGFz dCBpbnNlcnRlZCByZXN1bHQNCnJlcHJlc2VudHMgdGhlIG1vc3QgY29tcGxldGUgc2V0IG9mIGVx dWl2YWxlbmNlcyBvZiB0aGUgdmFyaWFibGUuDQoNCihJbiB0aGUgbGFzdCBwYXRjaCB2ZXJzaW9u LCB3aGVuICJBcHBlbmRpbmcgcHJlZGljYXRlIHRvIHZhbHVlIiwgdGhlIG5ldyByZXN1bHQNCmlz IG5vdCBtb3ZlZCB0byB0aGUgZnJvbnQuIFRoYXQgdmlvbGF0ZXMgdGhlIHByb3BlcnR5IG9mIGVx dWl2LWhlYWRzIGFuZCBzb21lDQpvcHBvcnR1bml0aWVzIHdpbGwgYmUgbG9zdC4gRml4ZWQgdGhp cyBpbiB0aGUgbmV3IHBhdGNoIGZpbGUuKQ0KDQo+IA0KPiBPSywgSSBoYXZlIHRvIHN0b3Agbm93 IGJ1dCB3aWxsIHRyeSB0byB1bmRlcnN0YW5kIGFuZCByZXZpZXcgZnVydGhlciBuZXh0IHdlZWsu DQo+IFNvcnJ5IGZvciB0aGUgZGVsYXlzIGJ1dCB0aGUgcGF0Y2ggaXMgcXVpdGUgY29tcGxleCB0 byB1bmRlcnN0YW5kIDovDQo+IA0KPiBSaWNoYXJkLg0KPiANCj4gPiAyMDIxLTA5LTE2ICBEaSBa aGFvICA8ZGl6aGFvQG9zLmFtcGVyZWNvbXB1dGluZy5jb20+DQo+ID4NCg0KT3RoZXIgY2hhbmdl czoNCi0gRml4ZWQgc29tZSBlcnJzIGluIGNvbW1lbnRzLg0KLSBPbiByZWNvcmRpbmcgdGVtcG9y YXJ5IGVxdWl2YWxlbmNlcyBnZW5lcmF0ZWQgYnkgUEhJIG5vZGVzLCBhbHRlcmVkIHRoZQ0KICBs b2dpYywgaG9wZSBpdCBjYW4gYmUgYSBiaXQgbW9yZSBjbGVhci4NCiAgMS4gV2hlbiBhIGNvbmRp dGlvbmFsIGV4cHJlc3Npb24ncyB0cnVlL2ZhbHNlIGVkZ2UgRSBpcyBhc3Nlc3NlZCB0byBiZSAN CiAgICAgZXhlY3V0YWJsZSwgc2VhcmNoIGZvciBjb25mbGljdGluZyBwcmVkaWNhdGVzIGZvciBF IHRvIGJlIHRha2VuLiBJZiBhDQogICAgIGNvbmZsaWN0aW5nIHByZWRpY2F0ZSBpcyBmb3VuZCBh dCBMLCBhbmQgTCdzIHNpbmdsZSBwcmVkZWNlc3NvciBQIA0KICAgICBkb21pbmF0ZXMgY3VycmVu dCBCQiwgdGhlbiB3ZSBrbm93IFAtPkwgY2Fubm90IGJlIHRha2VuIGlmIEUgaXMgdGFrZW4uDQog IDIuIFByb2Nlc3MgcGhpX2JiIChpbW1lZGlhdGVseSBkb21pbmF0ZWQgYnkgUCwgYW5kIGRvbWlu YXRlcyBCQiksIHJ1bGUgb3V0DQogICAgIFBISSBhcmd1bWVudHMgKHgyKSB0aGF0IGNhbiBvbmx5 IGNvbWUgZnJvbSBQLT5MLiBJZiB0aGVyZSdzIGEgc2luZ2xlIA0KICAgICBQSEkgYXJndW1lbnQg KHgxKSBsZWZ0LCByZWNvcmQgdGhlIGVxdWl2YWxlbmNlIG9mIHgxIGFuZCBQSEkgcmVzdWx0IHgN CiAgICAgYXQgZWRnZSBFLg0KICAgICAgICAgIC0tLS0tDQogICAgICAgICAgfCBQIHwgDQogICAg ICAgICAgLS0tLS0NCiAgICAgICAgICAgfCAgXA0KICAgICAgICAgICB8ICAgLS0tLS0NCiAgICAg ICAgICAgfCAgIHwgTCB8ICA8PT0gY29uZmxpY3RpbmcgcHJlZGljYXRlJ3MgbG9jYXRpb24NCiAg ICAgICAgICAgfCAgIC0tLS0tDQogICAgICAgICAgIHwgICAgLw0KICAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tDQogIHwgeCA9IFBISTx4MShQKSwgeDIoTCk+IHwgcGhpX2JiDQogIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgICAgICB8DQogICAgICAgICAgICAuLi4uDQogICAg ICAgICAgICAgfA0KICAgICAgICAgICAtLS0tLQ0KICAgICAgICAgICB8IEJCIHwgPD09IGN1cnJl bnQgYmINCiAgICAgICAgICAgLS0tLS0NCiAgICAgICAgICAvICAgICBcIGVkZ2UgRQ0KICAgICAg ICAuLi4gICAgIC0tLS0tLS0NCiAgICAgICAgICAgICAgICB8IGRlc3QgfA0KICAgICAgICAgICAg ICAgIC0tLS0tLS0NCg0KLSBGaXhlZCBhIGNvcnJlY3RuZXNzIHByb2JsZW0gd2hlbiByZWNvcmRp bmcgZXF1aXZhbGVuY2VzIGZyb20gUEhJIGluIHByZXZpb3VzDQogIHZlcnNpb24uIEFsc28gdGVz dCBjYXNlIHNzYS1mcmUtOTUuYzprIGluIHByZXZpb3VzIHZlcnNpb24gd2FzIGluY29ycmVjdCwN CiAgZml4ZWQgdGhhdC4NCg0KVGhhbmtzLA0KRGkgWmhhbw0KDQotLS0NCkV4dGVuZCBGUkUgd2l0 aCB0ZW1wb3JhcnkgZXF1aXZhbGVuY2VzLg0KDQoyMDIxLTEwLTI0ICBEaSBaaGFvICA8ZGl6aGFv QG9zLmFtcGVyZWNvbXB1dGluZy5jb20+DQoNCmdjYy9DaGFuZ2VMb2c6DQogICAgICAgIFBSIHRy ZWUtb3B0aW1pemF0aW9uLzEwMTE4Ng0KICAgICAgICAqIHRyZWUtc3NhLXNjY3ZuLmMgKFZOX0lO Rk8pOiByZW1vdmUgYXNzZXJ0aW9ucyAodGhlcmUgY291bGQgYmUgYQ0KICAgICAgICBwcmVkaWNh dGUgYWxyZWFkeSkuDQogICAgICAgIChkb21pbmF0ZWRfYnlfcF93X3VuZXgpOiBNb3ZlZCB1cHdh cmQuDQogICAgICAgICh2bl9uYXJ5X29wX2dldF9wcmVkaWNhdGVkX3ZhbHVlKTogTW92ZWQgdXB3 YXJkLg0KICAgICAgICAoaXNfdm5fdmFsaWRfYXRfYmIpOiBDaGVjayBpZiB2bl9wdmFsIGlzIHZh bGlkIGF0IEJCLg0KICAgICAgICAobG9va3VwX2VxdWl2X2hlYWQpOiBMb29rdXAgdGhlICJlcXVp dmFsZW5jZSBoZWFkIiBvZiBnaXZlbiBub2RlLg0KICAgICAgICAobG9va3VwX2VxdWl2X2hlYWRz KTogTG9va3VwIHRoZSAiZXF1aXZhbGVuY2UgaGVhZCJzIG9mIGdpdmVuIG5vZGVzLg0KICAgICAg ICAodm5fdHJhY2tpbmdfZWRnZSk6IEV4dHJhY3RlZCB1dGlsaXR5IGZ1bmN0aW9uLg0KICAgICAg ICAoaW5pdF92bl9uYXJ5X29wX2Zyb21fc3RtdCk6IEluc2VydCBhbmQgbG9va3VwIGJ5ICJlcXVp dmFsZW5jZSBoZWFkInMuDQogICAgICAgICh2bl9uYXJ5X29wX2luc2VydF9pbnRvKTogSW5zZXJ0 IG5ldyB2YWx1ZSBhdCB0aGUgZnJvbnQuDQogICAgICAgICh2bl9uYXJ5X29wX2luc2VydF9waWVj ZXNfcHJlZGljYXRlZF8xKTogSW5zZXJ0IGFzIHByZWRpY2F0ZWQgdmFsdWVzDQogICAgICAgIGZy b20gcGllY2VzLg0KICAgICAgICAoZm9sZF9jb25zdF9mcm9tX2VxdWl2X2hlYWRzKTogRm9sZCBO LWFyeSBleHByZXNzaW9uIG9mIGVxdWl2LWhlYWRzLg0KICAgICAgICAocHVzaF9uZXdfbmFyeV9y ZWYpOiBJbnNlcnQgYSBiYWNrLXJlZmVyZW5jZSB0byB2bl9uYXJ5X29wX3QuDQogICAgICAgICh2 YWxfZXF1aXZfaW5zZXJ0KTogUmVjb3JkIHRlbXBvcmFyeSBlcXVpdmFsZW5jZS4NCiAgICAgICAg KHZuX25hcnlfb3BfaW5zZXJ0X3BpZWNlc19wcmVkaWNhdGVkKTogUmVjb3JkIGVxdWl2YWxlbmNl cyBpbnN0ZWFkIG9mDQogICAgICAgIHNvbWUgcHJlZGljYXRlczsgaW5zZXJ0IGJhY2stcmVmcy4N CiAgICAgICAgKHJlY29yZF9lcXVpdl9mcm9tX3ByZXZfcGhpXzEpOiBSZWNvcmQgdGVtcG9yYXJ5 IGVxdWl2YWxlbmNlcyBnZW5lcmF0ZWQNCiAgICAgICAgYnkgUEhJIG5vZGVzLg0KICAgICAgICAo cmVjb3JkX2VxdWl2X2Zyb21fcHJldl9waGkpOiBHaXZlbiBhbiBvdXRnb2luZyBlZGdlIG9mIGEg Y29uZGl0aW9uYWwNCiAgICAgICAgZXhwcmVzc2lvbiB0YWtlbiwgcmVjb3JkIGVxdWl2YWxlbmNl cyBnZW5lcmF0ZWQgYnkgUEhJIG5vZGVzLg0KICAgICAgICAodmlzaXRfbmFyeV9vcCk6IEFkZCBs b29rdXAgcHJldmlvdXMgcmVzdWx0cyBvZiBOLWFyeSBvcGVyYXRpb25zIGJ5DQogICAgICAgIGVx dWl2YWxlbmNlcy4NCiAgICAgICAgKGluc2VydF9yZWxhdGVkX3ByZWRpY2F0ZXNfb25fZWRnZSk6 IFNvbWUgcHJlZGljYXRlcyBjYW4gYmUgY29tcHV0ZWQNCiAgICAgICAgZnJvbSBlcXVpdmFsZW5j ZXMsIG5vIG5lZWQgdG8gaW5zZXJ0IHRoZW0uDQogICAgICAgIChwcm9jZXNzX2JiKTogQWRkIGxv b2t1cCBwcmVkaWNhdGVkIHZhbHVlcyBieSBlcXVpdmFsZW5jfi90bXAvdGltZS1mcmVlcy4NCiAg ICAgICAgKHN0cnVjdCB1bndpbmRfc3RhdGUpOiBVbndpbmQgc3RhdGUgb2YgYmFjay1yZWZzIHRv IHZuX25hcnlfb3BfdC4NCiAgICAgICAgKGRvX3Vud2luZCk6IFVud2luZCB0aGUgYmFjay1yZWZz IHRvIHZuX25hcnlfb3BfdC4NCiAgICAgICAgKGRvX3Jwb192bik6IFVwZGF0ZSBiYWNrLXJlZmVy ZW5jZSB1bndpbmQgc3RhdGUuDQogICAgICAgICogdHJlZS1zc2Etc2Njdm4uaCAoc3RydWN0IG5h cnlfcmVmKTogaG9sZCBhIGxpc3RzIG9mIHJlZmVyZW5jZXMgdG8gdGhlDQogICAgICAgIG5hcnkg bWFwIGVudHJpZXMuDQoNCmdjYy90ZXN0c3VpdGUvQ2hhbmdlTG9nOg0KDQogICAgICAgICogZ2Nj LmRnL3RyZWUtc3NhL3ByNjg2MTktMi5jOiBEaXNhYmxlIGZyZS4NCiAgICAgICAgKiBnY2MuZGcv dHJlZS1zc2EvcHI3MTk0Ny0xLmM6IERpc2FibGUgZnJlLg0KICAgICAgICAqIGdjYy5kZy90cmVl LXNzYS9wcjcxOTQ3LTIuYzogRGlzYWJsZSBmcmUuDQogICAgICAgICogZ2NjLmRnL3RyZWUtc3Nh L3ByNzE5NDctMy5jOiBEaXNhYmxlIGZyZS4NCiAgICAgICAgKiBnY2MuZGcvdHJlZS1zc2EvcHI3 MTk0Ny01LmM6IERpc2FibGUgZnJlLg0KICAgICAgICAqIGdjYy5kZy90cmVlLXNzYS9wcjcxOTQ3 LTcuYzogRGlzYWJsZSBmcmUuDQogICAgICAgICogZ2NjLmRnL3RyZWUtc3NhL3ByNzE5NDctOC5j OiBEaXNhYmxlIGZyZS4NCiAgICAgICAgKiBnY2MuZGcvdHJlZS1zc2EvcHI3MTk0Ny05LmM6IERp c2FibGUgZnJlLg0KICAgICAgICAqIGdjYy5kZy90cmVlLXNzYS92cnAwMy5jOiBEaXNhYmxlIGZy ZS4NCiAgICAgICAgKiBnY2MuZGcvdHJlZS1zc2Evc3NhLWZyZS0xMDAuYzogTmV3IHRlc3QuDQog ICAgICAgICogZ2NjLmRnL3RyZWUtc3NhL3NzYS1mcmUtMTAxLmM6IE5ldyB0ZXN0Lg0KICAgICAg ICAqIGdjYy5kZy90cmVlLXNzYS9zc2EtZnJlLTEwMi5jOiBOZXcgdGVzdC4NCiAgICAgICAgKiBn Y2MuZGcvdHJlZS1zc2Evc3NhLXByZS0zNC5jOiBOZXcgdGVzdC4NCg0K --_002_SN6PR01MB4240F1B812D1C86CADA0EC37E8829SN6PR01MB4240prod_ Content-Type: application/octet-stream; name="v3-tree-optimization-101186.patch" Content-Description: v3-tree-optimization-101186.patch Content-Disposition: attachment; filename="v3-tree-optimization-101186.patch"; size=37568; creation-date="Sun, 24 Oct 2021 19:00:47 GMT"; modification-date="Sun, 24 Oct 2021 18:58:24 GMT" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL3ByNjg2MTktMi5jIGIv Z2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvcHI2ODYxOS0yLmMNCmluZGV4IGNjYTcwNmUw YzRmLi4wYTk5YzNjNjIwZSAxMDA2NDQNCi0tLSBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUt c3NhL3ByNjg2MTktMi5jDQorKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9wcjY4 NjE5LTIuYw0KQEAgLTEsNSArMSw1IEBADQogLyogeyBkZy1kbyBjb21waWxlIH0gKi8NCi0vKiB7 IGRnLW9wdGlvbnMgIi1PMiAtZmR1bXAtdHJlZS1kb20yLWRldGFpbHMgLXciIH0gKi8NCisvKiB7 IGRnLW9wdGlvbnMgIi1PMiAtZm5vLXRyZWUtZnJlIC1mZHVtcC10cmVlLWRvbTItZGV0YWlscyAt dyIgfSAqLw0KIA0KIHR5cGVkZWYgdW5pb24gdHJlZV9ub2RlICp0cmVlOw0KIHN0cnVjdCBnY2Nf b3B0aW9ucw0KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL3ByNzE5 NDctMS5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvcHI3MTk0Ny0xLmMNCmluZGV4 IGFjODI3MWNjNTc0Li5lOWE3OTdlODJiMCAxMDA2NDQNCi0tLSBhL2djYy90ZXN0c3VpdGUvZ2Nj LmRnL3RyZWUtc3NhL3ByNzE5NDctMS5jDQorKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVl LXNzYS9wcjcxOTQ3LTEuYw0KQEAgLTEsNSArMSw1IEBADQogLyogeyBkZy1kbyBjb21waWxlIH0g Ki8gDQotLyogeyBkZy1vcHRpb25zICItTzIgLWZuby10cmVlLXZycCAtZmR1bXAtdHJlZS1kb20t ZGV0YWlscyIgfSAqLw0KKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1mbm8tdHJlZS12cnAgLWZuby10 cmVlLWZyZSAtZmR1bXAtdHJlZS1kb20tZGV0YWlscyIgfSAqLw0KIA0KIA0KIGludCBmKGludCB4 LCBpbnQgeSkNCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9wcjcx OTQ3LTIuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL3ByNzE5NDctMi5jDQppbmRl eCBiMmMwOWNiYjAyMS4uYmNiYzQxOTU3NWMgMTAwNjQ0DQotLS0gYS9nY2MvdGVzdHN1aXRlL2dj Yy5kZy90cmVlLXNzYS9wcjcxOTQ3LTIuYw0KKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJl ZS1zc2EvcHI3MTk0Ny0yLmMNCkBAIC0xLDUgKzEsNSBAQA0KIC8qIHsgZGctZG8gY29tcGlsZSB9 ICovDQotLyogeyBkZy1vcHRpb25zICItTzIgLWZuby10cmVlLXZycCAtZmR1bXAtdHJlZS1kb20t ZGV0YWlscyIgfSAqLw0KKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1mbm8tdHJlZS12cnAgLWZuby10 cmVlLWZyZSAtZmR1bXAtdHJlZS1kb20tZGV0YWlscyIgfSAqLw0KIA0KIA0KIGludCBmKGludCB4 LCBpbnQgeSkNCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9wcjcx OTQ3LTMuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL3ByNzE5NDctMy5jDQppbmRl eCAyMzE2ZjdlMWMwNC4uZDYzMjkxZGE0NDAgMTAwNjQ0DQotLS0gYS9nY2MvdGVzdHN1aXRlL2dj Yy5kZy90cmVlLXNzYS9wcjcxOTQ3LTMuYw0KKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJl ZS1zc2EvcHI3MTk0Ny0zLmMNCkBAIC0xLDUgKzEsNSBAQA0KIC8qIHsgZGctZG8gY29tcGlsZSB9 ICovDQotLyogeyBkZy1vcHRpb25zICItTzIgLWZuby10cmVlLXZycCAtZmR1bXAtdHJlZS1kb20t ZGV0YWlscyIgfSAqLw0KKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1mbm8tdHJlZS12cnAgLWZuby10 cmVlLWZyZSAtZmR1bXAtdHJlZS1kb20tZGV0YWlscyIgfSAqLw0KIA0KIGludCBmKGludCB4LCBp bnQgeSkNCiB7DQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvcHI3 MTk0Ny01LmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9wcjcxOTQ3LTUuYw0KaW5k ZXggZTcwMzhkMDIzN2YuLmMxZTU2NjdiNDVhIDEwMDY0NA0KLS0tIGEvZ2NjL3Rlc3RzdWl0ZS9n Y2MuZGcvdHJlZS1zc2EvcHI3MTk0Ny01LmMNCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3Ry ZWUtc3NhL3ByNzE5NDctNS5jDQpAQCAtMSw1ICsxLDUgQEANCiAvKiB7IGRnLWRvIGNvbXBpbGUg fSAqLw0KLS8qIHsgZGctb3B0aW9ucyAiLU8yIC1mbm8tdHJlZS12cnAgLWZkdW1wLXRyZWUtZG9t LWRldGFpbHMiIH0gKi8NCisvKiB7IGRnLW9wdGlvbnMgIi1PMiAtZm5vLXRyZWUtdnJwIC1mbm8t dHJlZS1mcmUgLWZkdW1wLXRyZWUtZG9tLWRldGFpbHMiIH0gKi8NCiANCiANCiBzdGF0aWMgaW5s aW5lIGxvbmcgbG9hZChsb25nICpwKQ0KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRn L3RyZWUtc3NhL3ByNzE5NDctNy5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvcHI3 MTk0Ny03LmMNCmluZGV4IGI0NGMwNjRhYTIzLi4wNjllNGExMDZjMyAxMDA2NDQNCi0tLSBhL2dj Yy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL3ByNzE5NDctNy5jDQorKysgYi9nY2MvdGVzdHN1 aXRlL2djYy5kZy90cmVlLXNzYS9wcjcxOTQ3LTcuYw0KQEAgLTEsNSArMSw1IEBADQogLyogeyBk Zy1kbyBjb21waWxlIH0gKi8NCi0vKiB7IGRnLW9wdGlvbnMgIi1PMiAtZm5vLXRyZWUtdnJwIC1m ZHVtcC10cmVlLWRvbS1kZXRhaWxzIiB9ICovDQorLyogeyBkZy1vcHRpb25zICItTzIgLWZuby10 cmVlLXZycCAtZm5vLXRyZWUtZnJlIC1mZHVtcC10cmVlLWRvbS1kZXRhaWxzIiB9ICovDQogDQog DQogaW50IGYoaW50IHgsIGludCB5KQ0KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRn L3RyZWUtc3NhL3ByNzE5NDctOC5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvcHI3 MTk0Ny04LmMNCmluZGV4IDI2ZTVhYmJkYzI5Li4yNmIzMDNlODk2ZSAxMDA2NDQNCi0tLSBhL2dj Yy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL3ByNzE5NDctOC5jDQorKysgYi9nY2MvdGVzdHN1 aXRlL2djYy5kZy90cmVlLXNzYS9wcjcxOTQ3LTguYw0KQEAgLTEsNSArMSw1IEBADQogLyogeyBk Zy1kbyBjb21waWxlIH0gKi8NCi0vKiB7IGRnLW9wdGlvbnMgIi1PMiAtZm5vLXRyZWUtdnJwIC1m ZHVtcC10cmVlLWRvbS1kZXRhaWxzIiB9ICovDQorLyogeyBkZy1vcHRpb25zICItTzIgLWZuby10 cmVlLXZycCAtZm5vLXRyZWUtZnJlIC1mZHVtcC10cmVlLWRvbS1kZXRhaWxzIiB9ICovDQogDQog DQogaW50IGYoaW50IHgsIGludCB5KQ0KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRn L3RyZWUtc3NhL3ByNzE5NDctOS5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvcHI3 MTk0Ny05LmMNCmluZGV4IDIyYjY4ZDVlZGUwLi4zZWQzYmY2YWQyOSAxMDA2NDQNCi0tLSBhL2dj Yy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL3ByNzE5NDctOS5jDQorKysgYi9nY2MvdGVzdHN1 aXRlL2djYy5kZy90cmVlLXNzYS9wcjcxOTQ3LTkuYw0KQEAgLTEsNSArMSw1IEBADQogLyogeyBk Zy1kbyBjb21waWxlIH0gKi8NCi0vKiB7IGRnLW9wdGlvbnMgIi1PMiAtZm5vLXRyZWUtdnJwIC1m ZHVtcC10cmVlLWRvbS1kZXRhaWxzIiB9ICovDQorLyogeyBkZy1vcHRpb25zICItTzIgLWZuby10 cmVlLXZycCAtZm5vLXRyZWUtZnJlIC1mZHVtcC10cmVlLWRvbS1kZXRhaWxzIiB9ICovDQogDQog DQogaW50IGYoaW50IHgsIGludCB5KQ0KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRn L3RyZWUtc3NhL3NzYS1mcmUtMTAwLmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9z c2EtZnJlLTEwMC5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMDAuLmNj YjBmZGFhNjk4DQotLS0gL2Rldi9udWxsDQorKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVl LXNzYS9zc2EtZnJlLTEwMC5jDQpAQCAtMCwwICsxLDQ1IEBADQorLyogeyBkZy1kbyBjb21waWxl IH0gKi8NCisvKiB7IGRnLW9wdGlvbnMgIi1PMiAtZmR1bXAtdHJlZS1mcmUxIiB9ICovDQorDQor ZXh0ZXJuIHZvaWQgYmFyKHZvaWQpOw0KK2V4dGVybiB2b2lkIGJvbyh2b2lkKTsNCitleHRlcm4g dm9pZCBmb28odm9pZCk7DQorDQorLyogVGVzdCB0ZW1wb3JhcnkgZXF1aXZhbGVuY2VzOiBiYXNp Yy4gICovDQorDQordm9pZCBmICh1bnNpZ25lZCBpbnQgYSwgdW5zaWduZWQgaW50IGIpDQorew0K KyAgaWYgKGEgPT0gYikNCisgICAgew0KKyAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBh OyBpKyspDQorCXsNCisJICBiYXIgKCk7DQorCSAgaWYgKGkgPj0gYikNCisJICAgIC8qIFVucmVh Y2hhYmxlLiAgKi8NCisJICAgIGZvbyAoKTsNCisJfQ0KKyAgICB9DQorfQ0KKw0KKy8qIFRlc3Qg dGVtcG9yYXJ5IGVxdWl2YWxlbmNlczogdHJhbnNpdGl2ZS4gICovDQorDQordm9pZCBnICh1bnNp Z25lZCBpbnQgYSwgdW5zaWduZWQgaW50IGIsIHVuc2lnbmVkIGludCBjKQ0KK3sNCisgIGZvciAo dW5zaWduZWQgaSA9IDA7IGkgPCBjOyBpKyspDQorICAgIHsNCisgICAgICBpZiAoYSA9PSBiKQ0K Kwl7DQorCSAgaWYgKGIgPT0gYykNCisJICAgIHsNCisJICAgICAgYm9vICgpOw0KKwkgICAgICBp ZiAoaSA+PSBhKQ0KKwkJLyogVW5yZWFjaGFibGUuICAqLw0KKwkJZm9vICgpOw0KKwkgICAgfQ0K Kwl9DQorICAgIH0NCit9DQorDQorLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLW5vdCAi Zm9vIiAiZnJlMSIgfSB9ICovDQorLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJiYXIi ICJmcmUxIiB9IH0gKi8NCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgImJvbyIgImZy ZTEiIH0gfSAqLw0KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL3Nz YS1mcmUtMTAxLmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9zc2EtZnJlLTEwMS5j DQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMDAuLjQ4OTU0ZDUwZjJlDQot LS0gL2Rldi9udWxsDQorKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9zc2EtZnJl LTEwMS5jDQpAQCAtMCwwICsxLDc0IEBADQorLyogeyBkZy1kbyBjb21waWxlIH0gKi8NCisvKiB7 IGRnLW9wdGlvbnMgIi1PMiAtZmR1bXAtdHJlZS1mcmUxIiB9ICovDQorDQorZXh0ZXJuIHZvaWQg YmFyKHZvaWQpOw0KK2V4dGVybiB2b2lkIGJhZyh2b2lkKTsNCitleHRlcm4gdm9pZCBiYXModm9p ZCk7DQorZXh0ZXJuIHZvaWQgZm9vKHZvaWQpOw0KKw0KK3ZvaWQgZiAodW5zaWduZWQgaW50IGEs IHVuc2lnbmVkIGludCBiKQ0KK3sNCisgIGlmIChhID09IGIpDQorICAgIHsNCisgICAgICBmb3Ig KHVuc2lnbmVkIGkgPSBhOyBpIDwgMTAwOyBpKyspDQorCXsNCisJICBpZiAoaSA+IGIpDQorCSAg ICAvKiBTaG91bGQgbm90IGJlIGVsaW1pbmF0ZWQuICAqLw0KKwkgICAgYmFyICgpOw0KKwl9DQor ICAgIH0NCit9DQorDQorLyogVGVzdCB0ZW1wb3JhcnkgZXF1aXZhbGVuY2VzOiBkZXJpdmVkIGNv bmRpdGlvbi4gICovDQorDQordm9pZCBnICh1bnNpZ25lZCBpbnQgYSwgdW5zaWduZWQgaW50IGIs IHVuc2lnbmVkIGludCBkKQ0KK3sNCisgIHVuc2lnbmVkIGludCBjID0gMTAwOw0KKyAgaWYgKGEg PiAwKQ0KKyAgICBjID0gYjsNCisgIGVsc2UNCisgICAgYyA9IGQ7DQorICBmb3IgKHVuc2lnbmVk IGkgPSAwOyBpIDwgYzsgaSsrKQ0KKyAgICB7DQorICAgICAgaWYgKGEgPj0gMCkNCisJew0KKwkg IGlmIChpID49IGIpDQorCSAgICAvKiBTaG91bGQgbm90IGJlIGVsaW1pbmF0ZWQuICgiYSA+PSAw IiBjYW5ub3QgZGVyaXZlICJhID4gMCIuKSAgKi8NCisJICAgIGJhcyAoKTsNCisJfQ0KKyAgICAg IGVsc2UNCisJew0KKwkgIGlmIChpID49IGQpDQorCSAgICAvKiBTaG91bGQgYmUgZWxpbWluYXRl ZCwgYXMgImEgPCAwIiBjYW4gZGVyaXZlICJhIDw9IDAiLiAgKi8NCisJICAgIGZvbyAoKTsNCisJ fQ0KKyAgICAgIGkrKzsNCisgICAgfQ0KK30NCisNCisvKiBUZXN0IHRlbXBvcmFyeSBlcXVpdmFs ZW5jZXM6IG5vIGRvbWluYXRpb24uICAqLw0KKw0KK3ZvaWQgaCAodW5zaWduZWQgaW50IGEsIHVu c2lnbmVkIGludCBiKQ0KK3sNCisgIHVuc2lnbmVkIGludCBjID0gMTAwOw0KKyAgaWYgKGIgJSAy KQ0KKyAgICB7DQorICAgICAgaWYgKGEgIT0gMCkNCisJYyA9IGI7DQorICAgIH0NCisgIGZvciAo dW5zaWduZWQgaSA9IDA7IGkgPCBjOyBpKyspDQorICAgIHsNCisgICAgICBpZiAoYSAhPSAwKQ0K Kwl7DQorCSAgaWYgKGkgPj0gYikNCisJICAgIC8qIFNob3VsZCBub3QgYmUgZWxpbWluYXRlZC4g ICovDQorCSAgICBiYWcgKCk7DQorCX0NCisgICAgICBpKys7DQorICAgIH0NCit9DQorDQorLyog eyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJiYXIiICJmcmUxIiB9IH0gKi8NCisvKiB7IGRn LWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgImJhcyIgImZyZTEiIH0gfSAqLw0KKy8qIHsgZGctZmlu YWwgeyBzY2FuLXRyZWUtZHVtcCAiYmFnIiAiZnJlMSIgfSB9ICovDQorLyogeyBkZy1maW5hbCB7 IHNjYW4tdHJlZS1kdW1wLW5vdCAiZm9vIiAiZnJlMSIgfSB9ICovDQpkaWZmIC0tZ2l0IGEvZ2Nj L3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2Evc3NhLWZyZS0xMDIuYyBiL2djYy90ZXN0c3VpdGUv Z2NjLmRnL3RyZWUtc3NhL3NzYS1mcmUtMTAyLmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRl eCAwMDAwMDAwMDAwMC4uMDJmMTI5MjljYmINCi0tLSAvZGV2L251bGwNCisrKyBiL2djYy90ZXN0 c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL3NzYS1mcmUtMTAyLmMNCkBAIC0wLDAgKzEsNDUgQEANCisN CisNCisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLw0KKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1mZHVt cC10cmVlLWZyZTEiIH0gKi8NCisNCitleHRlcm4gdm9pZCBiYXIodm9pZCk7DQorZXh0ZXJuIHZv aWQgYmFnKHZvaWQpOw0KK2V4dGVybiB2b2lkIGZvbyh2b2lkKTsNCitpbnQgZzsNCisNCisvKiBU ZXN0IHRlbXBvcmFyeSBlcXVpdmFsZW5jZXM6IG9wdGltaXplIE4tYXJ5IGV4cHJlc3Npb25zLiAg Ki8NCisNCit2b2lkDQorZiAodW5zaWduZWQgaW50IGEsIHVuc2lnbmVkIGludCBiLCB1bnNpZ25l ZCBpbnQgeCwgdW5zaWduZWQgaW50IHkpDQorew0KKyAgaWYgKGEgPT0gYikNCisgICAgew0KKyAg ICAgIGcgPSAxMDA7DQorICAgICAgaWYgKGEgKyB4ID09IDk5KQ0KKwlnID0geCArIGI7IC8qIHNo b3VsZCBiZSBzaW1wbGlmaWVkIHRvIDk5ICovDQorICAgIH0NCisgIGVsc2UNCisgICAgLy8gYSE9 IGINCisgICAgew0KKyAgICAgIGlmIChhID09IDEwMCAtIHgpDQorCXsNCisJICBnKys7DQorCSAg aWYgKGIgPT0gMTAwIC0geCkNCisJICAgIGZvbyAoKTsgLyogc2hvdWxkIGJlIHJlbW92ZWQgKi8N CisJfQ0KKyAgICAgIGVsc2UNCisJew0KKwkgIGctLTsNCisJICBpZiAoYiA9PSAxMDAgLSB4KQ0K KwkgICAgYmFnICgpOyAvKiBzaG91bGQgbm90IGJlIHJlbW92ZWQgKi8NCisJICBlbHNlDQorCSAg ICBiYXIgKCk7IC8qIHNob3VsZCBub3QgYmUgcmVtb3ZlZCAqLw0KKwl9DQorICAgIH0NCit9DQor DQorLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJiYWciICJmcmUxIiB9IH0gKi8NCisv KiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgImJhciIgImZyZTEiIH0gfSAqLw0KKy8qIHsg ZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC1ub3QgImZvbyIgImZyZTEiIH0gfSAqLw0KKy8qIHsg ZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC1ub3QgIj0gYl8qICsgeF8iICJmcmUxIiB9IH0gKi8N CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9zc2EtcHJlLTM0LmMg Yi9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9zc2EtcHJlLTM0LmMNCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwMC4uZGJhOWFlZDMzOGENCi0tLSAvZGV2L251bGwN CisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL3NzYS1wcmUtMzQuYw0KQEAgLTAs MCArMSw1MyBAQA0KKy8qIHsgZGctZG8gY29tcGlsZSB9ICovDQorLyogeyBkZy1vcHRpb25zICIt TzIgLWZkdW1wLXRyZWUtcHJlIiB9ICovDQorDQorZXh0ZXJuIHZvaWQgZm9vKHZvaWQpOw0KK2V4 dGVybiB2b2lkIGJhZyh2b2lkKTsNCitleHRlcm4gdm9pZCBiYXModm9pZCk7DQorDQorLyogVGVz dCB0ZW1wb3JhcnkgZXF1aXZhbGVuY2VzOiBpZGVudGljYWwgY29uZGl0aW9uLiAgKi8NCisNCit2 b2lkIGggKGludCBhLCBpbnQgYiwgaW50IHgsIGludCB5KQ0KK3sNCisgIGludCBjID0geTsNCisg IGlmIChhICE9IDApDQorICAgIGMgPSB4Ow0KKyAgd2hpbGUgKGIgPCAxMDAwKQ0KKyAgICB7DQor ICAgICAgaWYgKGEgIT0gMCkNCisJew0KKwkgIGlmIChjID4geCkNCisJICAgIC8qIFVucmVhY2hh YmxlLiAgKi8NCisJICAgIGZvbyAoKTsNCisJfQ0KKyAgICAgIGVsc2UNCisJYmFzICgpOw0KKyAg ICAgIGIrKzsNCisgICAgfQ0KK30NCisNCisvKiBUZXN0IHRlbXBvcmFyeSBlcXVpdmFsZW5jZXM6 IGRlcml2ZWQgY29uZGl0aW9uLiAgKi8NCisNCit2b2lkIGsgKGludCBhLCBpbnQgYiwgaW50IHgs IGludCB5KQ0KK3sNCisgIGludCBjID0geTsNCisgIGlmIChhICE9IDApDQorICAgIGMgPSB4Ow0K KyAgd2hpbGUgKGIgPCAxMDAwKQ0KKyAgICB7DQorICAgICAgaWYgKGEgPiAwKQ0KKwkvKiBBbGwg cGF0aHMgcmVhY2hpbmcgImE+MCBpcyB0cnVlIiBjb21lIGZyb20gImEhPTAgaXMgdHJ1ZSIuICAq Lw0KKwl7DQorCSAgaWYgKGMgPiB4KQ0KKwkgICAgLyogVW5yZWFjaGFibGUuICAqLw0KKwkgICAg Zm9vICgpOw0KKwl9DQorICAgICAgZWxzZQ0KKwliYWcgKCk7DQorICAgICAgYisrOw0KKyAgICB9 DQorfQ0KKw0KKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC1ub3QgImZvbyIgImZyZTEi IH0gfSAqLw0KKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAiYmFnIiAiZnJlMSIgfSB9 ICovDQorLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJiYXMiICJmcmUxIiB9IH0gKi8N ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQ0KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUv Z2NjLmRnL3RyZWUtc3NhL3ZycDAzLmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS92 cnAwMy5jDQppbmRleCAxZDdlYTRlOGZmYi4uODdkZjMxZDRmMGQgMTAwNjQ0DQotLS0gYS9nY2Mv dGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS92cnAwMy5jDQorKysgYi9nY2MvdGVzdHN1aXRlL2dj Yy5kZy90cmVlLXNzYS92cnAwMy5jDQpAQCAtMSw1ICsxLDUgQEANCiAvKiB7IGRnLWRvIGNvbXBp bGUgfSAqLw0KLS8qIHsgZGctb3B0aW9ucyAiLU8yIC1mZGlzYWJsZS10cmVlLWV2cnAgLWZkdW1w LXRyZWUtdnJwMSAtZmRpc2FibGUtdHJlZS1ldGhyZWFkIC1mZGlzYWJsZS10cmVlLXRocmVhZDEi IH0gKi8NCisvKiB7IGRnLW9wdGlvbnMgIi1PMiAtZmRpc2FibGUtdHJlZS1ldnJwIC1mbm8tdHJl ZS1mcmUgLWZkdW1wLXRyZWUtdnJwMSAtZmRpc2FibGUtdHJlZS1ldGhyZWFkIC1mZGlzYWJsZS10 cmVlLXRocmVhZDEiIH0gKi8NCiANCiBzdHJ1Y3QgQQ0KIHsNCmRpZmYgLS1naXQgYS9nY2MvdHJl ZS1zc2Etc2Njdm4uYyBiL2djYy90cmVlLXNzYS1zY2N2bi5jDQppbmRleCA4OTNiMWQwZGRhYS4u OGUzY2YyOGI5MzcgMTAwNjQ0DQotLS0gYS9nY2MvdHJlZS1zc2Etc2Njdm4uYw0KKysrIGIvZ2Nj L3RyZWUtc3NhLXNjY3ZuLmMNCkBAIC0zNTMsNiArMzUzLDggQEAgc3RhdGljIHZuX3JlZmVyZW5j ZV90IGxhc3RfaW5zZXJ0ZWRfcmVmOw0KIHN0YXRpYyB2bl9waGlfdCBsYXN0X2luc2VydGVkX3Bo aTsNCiBzdGF0aWMgdm5fbmFyeV9vcF90IGxhc3RfaW5zZXJ0ZWRfbmFyeTsNCiBzdGF0aWMgdm5f c3NhX2F1eF90IGxhc3RfcHVzaGVkX2F2YWlsOw0KK3N0YXRpYyB2bl9zc2FfYXV4X3QgbGFzdF9w dXNoZWRfbmFyeV9yZWY7DQorc3RhdGljIG5hcnlfcmVmKiBuYXJ5X3JlZl9mcmVlbGlzdDsNCiAN CiAvKiBWYWxpZCBoYXNodGFibGVzIHN0b3JpbmcgaW5mb3JtYXRpb24gd2UgaGF2ZSBwcm92ZW4g dG8gYmUNCiAgICBjb3JyZWN0LiAgKi8NCkBAIC00OTEsOSArNDkzLDkgQEAgVk5fSU5GTyAodHJl ZSBuYW1lKQ0KIAkgICAgbmFyeS0+cHJlZGljYXRlZF92YWx1ZXMgPSAwOw0KIAkgICAgbmFyeS0+ dS5yZXN1bHQgPSBib29sZWFuX3RydWVfbm9kZTsNCiAJICAgIHZuX25hcnlfb3BfaW5zZXJ0X2lu dG8gKG5hcnksIHZhbGlkX2luZm8tPm5hcnksIHRydWUpOw0KLQkgICAgZ2NjX2Fzc2VydCAobmFy eS0+dW53aW5kX3RvID09IE5VTEwpOw0KIAkgICAgLyogQWxzbyBkbyBub3QgbGluayBpdCBpbnRv IHRoZSB1bmRvIGNoYWluLiAgKi8NCiAJICAgIGxhc3RfaW5zZXJ0ZWRfbmFyeSA9IG5hcnktPm5l eHQ7DQorCSAgICAvKiBUaGVyZSBjb3VsZCBiZSBhIHByZWRpY2F0ZSBhbHJlYWR5LiAgKi8NCiAJ ICAgIG5hcnktPm5leHQgPSAodm5fbmFyeV9vcF90KSh2b2lkICopLTE7DQogCSAgICBuYXJ5ID0g YWxsb2Nfdm5fbmFyeV9vcF9ub2luaXQgKDIsICZ2bl90YWJsZXNfaW5zZXJ0X29ic3RhY2spOw0K IAkgICAgaW5pdF92bl9uYXJ5X29wX2Zyb21fcGllY2VzIChuYXJ5LCAyLCBFUV9FWFBSLA0KQEAg LTUwMSw3ICs1MDMsNiBAQCBWTl9JTkZPICh0cmVlIG5hbWUpDQogCSAgICBuYXJ5LT5wcmVkaWNh dGVkX3ZhbHVlcyA9IDA7DQogCSAgICBuYXJ5LT51LnJlc3VsdCA9IGJvb2xlYW5fZmFsc2Vfbm9k ZTsNCiAJICAgIHZuX25hcnlfb3BfaW5zZXJ0X2ludG8gKG5hcnksIHZhbGlkX2luZm8tPm5hcnks IHRydWUpOw0KLQkgICAgZ2NjX2Fzc2VydCAobmFyeS0+dW53aW5kX3RvID09IE5VTEwpOw0KIAkg ICAgbGFzdF9pbnNlcnRlZF9uYXJ5ID0gbmFyeS0+bmV4dDsNCiAJICAgIG5hcnktPm5leHQgPSAo dm5fbmFyeV9vcF90KSh2b2lkICopLTE7DQogCSAgICBpZiAoZHVtcF9maWxlICYmIChkdW1wX2Zs YWdzICYgVERGX0RFVEFJTFMpKQ0KQEAgLTM4NDcsNiArMzg0OCwxMTQgQEAgdm5fcmVmZXJlbmNl X2luc2VydF9waWVjZXMgKHRyZWUgdnVzZSwgYWxpYXNfc2V0X3R5cGUgc2V0LA0KICAgcmV0dXJu IHZyMTsNCiB9DQogDQorc3RhdGljIGJvb2wNCitkb21pbmF0ZWRfYnlfcF93X3VuZXggKGJhc2lj X2Jsb2NrIGJiMSwgYmFzaWNfYmxvY2sgYmIyLCBib29sKTsNCisNCitzdGF0aWMgdHJlZQ0KK3Zu X25hcnlfb3BfZ2V0X3ByZWRpY2F0ZWRfdmFsdWUgKHZuX25hcnlfb3BfdCB2bm8sIGJhc2ljX2Js b2NrIGJiKQ0KK3sNCisgIGlmICghIHZuby0+cHJlZGljYXRlZF92YWx1ZXMpDQorICAgIHJldHVy biB2bm8tPnUucmVzdWx0Ow0KKyAgZm9yICh2bl9wdmFsICp2YWwgPSB2bm8tPnUudmFsdWVzOyB2 YWw7IHZhbCA9IHZhbC0+bmV4dCkNCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbC0+ bjsgKytpKQ0KKyAgICAgIHsNCisJLyogRG8gbm90IGhhbmRsZSBiYWNrZWRnZSBleGVjdXRhYmls aXR5IG9wdGltaXN0aWNhbGx5IHNpbmNlDQorCSB3aGVuIGZpZ3VyaW5nIG91dCB3aGV0aGVyIHRv IGl0ZXJhdGUgd2UgZG8gbm90IGNvbnNpZGVyDQorCSBjaGFuZ2VkIHByZWRpY2F0aW9uLiAgKi8N CisJaWYgKGRvbWluYXRlZF9ieV9wX3dfdW5leCAoDQorCSAgICAgIGJiLCBCQVNJQ19CTE9DS19G T1JfRk4gKGNmdW4sIHZhbC0+dmFsaWRfZG9taW5hdGVkX2J5X3BbaV0pLA0KKwkgICAgICBmYWxz ZSkpDQorCXJldHVybiB2YWwtPnJlc3VsdDsNCisgICAgICB9DQorICByZXR1cm4gTlVMTF9UUkVF Ow0KK30NCisNCisvKiBXaGV0aGVyIGEgcHJlZGljYXRlZCB2YWx1ZSBWQUwgaXMgdmFsaWQgYXQg QkIuICAqLw0KKw0KK3N0YXRpYyBpbmxpbmUgYm9vbA0KK2lzX3ZuX3ZhbGlkX2F0X2JiICh2bl9w dmFsICp2YWwsIGJhc2ljX2Jsb2NrIGJiKQ0KK3sNCisgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg PCB2YWwtPm47ICsraSkNCisgICAgew0KKyAgICAgIGJhc2ljX2Jsb2NrIHZhbF9iYg0KKwk9IEJB U0lDX0JMT0NLX0ZPUl9GTiAoY2Z1biwgdmFsLT52YWxpZF9kb21pbmF0ZWRfYnlfcFtpXSk7DQor ICAgICAgaWYgKGRvbWluYXRlZF9ieV9wX3dfdW5leCAoYmIsIHZhbF9iYiwgZmFsc2UpKQ0KKwly ZXR1cm4gdHJ1ZTsNCisgICAgfQ0KKyAgcmV0dXJuIGZhbHNlOw0KK30NCisNCisvKiBMb29rdXAg dGhlIHZhcmlhYmxlIHRoYXQgcmVwcmVzZW50cyBhIHNldCBvZiBlcXVpdmFsZW5jZXMgb2YgTkFN RSBhdA0KKyAgIGJhc2ljLWJsb2NrIEJCLiAgVGhpcyB2YXJpYWJsZSBpcyBjYWxsZWQgdGhlICJl cXVpdmFsZW5jZSBoZWFkIiBvZiBOQU1FLiAgKi8NCisNCitzdGF0aWMgdHJlZQ0KK2xvb2t1cF9l cXVpdl9oZWFkICh0cmVlIG5hbWUsIGJhc2ljX2Jsb2NrIGJiKQ0KK3sNCisgIGlmIChUUkVFX0NP REUgKG5hbWUpICE9IFNTQV9OQU1FKQ0KKyAgICByZXR1cm4gbmFtZTsNCisgIHRyZWUgcmVzdWx0 ID0gVk5fSU5GTyAobmFtZSktPnZhbG51bTsNCisgIGlmIChyZXN1bHQgPT0gVk5fVE9QKQ0KKyAg ICAvKiBWTl9UT1AgaXMgbm90IGFsbG93ZWQsIG90aGVyd2lzZSBpdCB3aWxsIGJlIHRvbyBvcHRp bWlzdGljIGZvcg0KKyAgICAgICBub24taXRlcmF0aW5nIG1vZGUuICAqLw0KKyAgICByZXR1cm4g bmFtZTsNCisgIHZuX25hcnlfb3BfdCB2bnJlc3VsdDsNCisgIC8qIEFzIHdlIGluc2VydCBuZXcg dmFsdWUgYXQgZnJvbnQgaW4gdm5fbmFyeV9vcF9pbnNlcnRfaW50bywgd2UgZG9uJ3QgbmVlZA0K KyAgICAgc2VhcmNoIGl0ZXJhdGl2ZWx5IGZvciB0aGUgbW9zdCBnZW5lcmFsIGVxdWl2LWhlYWQu ICAqLw0KKyAgdm5fbmFyeV9vcF9sb29rdXBfcGllY2VzICgxLCBOT1BfRVhQUiwgVFJFRV9UWVBF IChyZXN1bHQpLCAmcmVzdWx0LA0KKwkJCSAgICAmdm5yZXN1bHQpOw0KKyAgaWYgKHZucmVzdWx0 ICYmIHZucmVzdWx0LT5wcmVkaWNhdGVkX3ZhbHVlcykNCisgICAgew0KKyAgICAgIHRyZWUgZXEg PSB2bl9uYXJ5X29wX2dldF9wcmVkaWNhdGVkX3ZhbHVlICh2bnJlc3VsdCwgYmIpOw0KKyAgICAg IGlmIChlcSkNCisJcmV0dXJuIGVxOw0KKyAgICB9DQorICByZXR1cm4gcmVzdWx0Ow0KK30NCisN CisvKiBMb29rdXAgdGhlICJlcXVpdmFsZW5jZSBoZWFkInMgb2YgT1BTIGF0IEJCLCBhbmQgc3Rv cmUgdGhlbSBpbiBUTy4gIE4gaXMgdGhlDQorICAgc2l6ZSBvZiBPUFMuICAqLw0KKw0KK3N0YXRp YyB2b2lkDQorbG9va3VwX2VxdWl2X2hlYWRzICh1bnNpZ25lZCBuLCB0cmVlICpvcHMsIHRyZWUg KnRvLCBiYXNpY19ibG9jayBiYikNCit7DQorICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbjsg aSsrKQ0KKyAgICB7DQorICAgICAgdHJlZSBlcXVpdl9oZWFkID0gbG9va3VwX2VxdWl2X2hlYWQg KG9wc1tpXSwgYmIpOw0KKyAgICAgIGlmIChkdW1wX2ZpbGUgJiYgKGR1bXBfZmxhZ3MgJiBUREZf REVUQUlMUykgJiYgZXF1aXZfaGVhZCAhPSBvcHNbaV0pDQorCXsNCisJICBmcHJpbnRmIChkdW1w X2ZpbGUsICJVc2UgZXF1aXYtaGVhZCAiKTsNCisJICBwcmludF9nZW5lcmljX2V4cHIgKGR1bXBf ZmlsZSwgZXF1aXZfaGVhZCwgVERGX05PTkUpOw0KKwkgIGZwcmludGYgKGR1bXBfZmlsZSwgIiBm b3IgIik7DQorCSAgcHJpbnRfZ2VuZXJpY19leHByIChkdW1wX2ZpbGUsIG9wc1tpXSwgVERGX05P TkUpOw0KKwkgIGZwcmludGYgKGR1bXBfZmlsZSwgIlxuIik7DQorCX0NCisgICAgICB0b1tpXSA9 IGVxdWl2X2hlYWQ7DQorICAgIH0NCit9DQorDQorLyogUmV0dXJucyB3aGV0aGVyIGVkZ2UgUFJF RF9FIGlzIGN1cnJlbnRseSBiZWluZyB0cmFja2VkLiAgKi8NCisNCitzdGF0aWMgaW5saW5lIGJv b2wNCit2bl90cmFja2luZ19lZGdlIChlZGdlIHByZWRfZSkNCit7DQorICBpZiAoIXNpbmdsZV9w cmVkX3AgKHByZWRfZS0+ZGVzdCkpDQorICAgIHsNCisgICAgICAvKiBOZXZlciByZWNvcmQgZm9y IGJhY2tlZGdlcy4gICovDQorICAgICAgaWYgKHByZWRfZS0+ZmxhZ3MgJiBFREdFX0RGU19CQUNL KQ0KKwlyZXR1cm4gZmFsc2U7DQorICAgICAgZWRnZV9pdGVyYXRvciBlaTsNCisgICAgICBlZGdl IGU7DQorICAgICAgaW50IGNudCA9IDA7DQorICAgICAgLyogSWdub3JlIGJhY2tlZGdlcy4gICov DQorICAgICAgRk9SX0VBQ0hfRURHRSAoZSwgZWksIHByZWRfZS0+ZGVzdC0+cHJlZHMpDQorCWlm ICghZG9taW5hdGVkX2J5X3AgKENESV9ET01JTkFUT1JTLCBlLT5zcmMsIGUtPmRlc3QpKQ0KKwkg IGNudCsrOw0KKyAgICAgIGlmIChjbnQgIT0gMSkNCisJcmV0dXJuIGZhbHNlOw0KKyAgICB9DQor ICByZXR1cm4gdHJ1ZTsNCit9DQorDQogLyogQ29tcHV0ZSBhbmQgcmV0dXJuIHRoZSBoYXNoIHZh bHVlIGZvciBuYXJ5IG9wZXJhdGlvbiBWQk8xLiAgKi8NCiANCiBzdGF0aWMgaGFzaHZhbF90DQpA QCAtMzk4NCw2ICs0MDkzLDkgQEAgaW5pdF92bl9uYXJ5X29wX2Zyb21fc3RtdCAodm5fbmFyeV9v cF90IHZubywgZ2Fzc2lnbiAqc3RtdCkNCiAgICAgICBmb3IgKGkgPSAwOyBpIDwgdm5vLT5sZW5n dGg7ICsraSkNCiAJdm5vLT5vcFtpXSA9IGdpbXBsZV9vcCAoc3RtdCwgaSArIDEpOw0KICAgICB9 DQorICAvKiBJbnNlcnQgYW5kIGxvb2t1cCBOLWFyeSByZXN1bHRzIGJ5IHRoZSBvcGVyYW5kcycg ZXF1aXZhbGVuY2UgaGVhZHMuICAqLw0KKyAgaWYgKGdpbXBsZV9iYiAoc3RtdCkpDQorICAgIGxv b2t1cF9lcXVpdl9oZWFkcyAodm5vLT5sZW5ndGgsIHZuby0+b3AsIHZuby0+b3AsIGdpbXBsZV9i YiAoc3RtdCkpOw0KIH0NCiANCiAvKiBDb21wdXRlIHRoZSBoYXNoY29kZSBmb3IgVk5PIGFuZCBs b29rIGZvciBpdCBpbiB0aGUgaGFzaCB0YWJsZTsNCkBAIC00MTI2LDEyICs0MjM4LDEwIEBAIHZu X25hcnlfb3BfaW5zZXJ0X2ludG8gKHZuX25hcnlfb3BfdCB2bm8sIHZuX25hcnlfb3BfdGFibGVf dHlwZSAqdGFibGUsDQogCSAgICA9IEJBU0lDX0JMT0NLX0ZPUl9GTiAoY2Z1biwgdm5vLT51LnZh bHVlcy0+dmFsaWRfZG9taW5hdGVkX2J5X3BbMF0pOw0KIAkgIHZuX3B2YWwgKm52YWwgPSB2bm8t PnUudmFsdWVzOw0KIAkgIHZuX3B2YWwgKipuZXh0ID0gJnZuby0+dS52YWx1ZXM7DQotCSAgYm9v bCBmb3VuZCA9IGZhbHNlOw0KIAkgIGZvciAodm5fcHZhbCAqdmFsID0gKCpzbG90KS0+dS52YWx1 ZXM7IHZhbDsgdmFsID0gdmFsLT5uZXh0KQ0KIAkgICAgew0KIAkgICAgICBpZiAoZXhwcmVzc2lv bnNfZXF1YWxfcCAodmFsLT5yZXN1bHQsIG52YWwtPnJlc3VsdCkpDQogCQl7DQotCQkgIGZvdW5k ID0gdHJ1ZTsNCiAJCSAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbC0+bjsgKytpKQ0KIAkJ ICAgIHsNCiAJCSAgICAgIGJhc2ljX2Jsb2NrIHZhbF9iYg0KQEAgLTQxNDUsMTcgKzQyNTUsMTUg QEAgdm5fbmFyeV9vcF9pbnNlcnRfaW50byAodm5fbmFyeV9vcF90IHZubywgdm5fbmFyeV9vcF90 YWJsZV90eXBlICp0YWJsZSwNCiAJCQlnY2NfdW5yZWFjaGFibGUgKCk7DQogCQkgICAgfQ0KIAkJ ICAvKiBBcHBlbmQgdmFsdWUuICAqLw0KLQkJICAqbmV4dCA9ICh2bl9wdmFsICopIG9ic3RhY2tf YWxsb2MgKCZ2bl90YWJsZXNfb2JzdGFjaywNCi0JCQkJCQkgICAgIHNpemVvZiAodm5fcHZhbCkN Ci0JCQkJCQkgICAgICsgdmFsLT5uICogc2l6ZW9mIChpbnQpKTsNCi0JCSAgKCpuZXh0KS0+bmV4 dCA9IE5VTEw7DQotCQkgICgqbmV4dCktPnJlc3VsdCA9IHZhbC0+cmVzdWx0Ow0KLQkJICAoKm5l eHQpLT5uID0gdmFsLT5uICsgMTsNCi0JCSAgbWVtY3B5ICgoKm5leHQpLT52YWxpZF9kb21pbmF0 ZWRfYnlfcCwNCi0JCQkgIHZhbC0+dmFsaWRfZG9taW5hdGVkX2J5X3AsDQorCQkgIG52YWwgPSAo dm5fcHZhbCAqKSBvYnN0YWNrX2FsbG9jICgmdm5fdGFibGVzX29ic3RhY2ssDQorCQkJCQkJICAg IHNpemVvZiAodm5fcHZhbCkNCisJCQkJCQkgICAgICArIHZhbC0+biAqIHNpemVvZiAoaW50KSk7 DQorCQkgIG52YWwtPm5leHQgPSBOVUxMOw0KKwkJICBudmFsLT5yZXN1bHQgPSB2YWwtPnJlc3Vs dDsNCisJCSAgbnZhbC0+biA9IHZhbC0+biArIDE7DQorCQkgIG1lbWNweSAobnZhbC0+dmFsaWRf ZG9taW5hdGVkX2J5X3AsIHZhbC0+dmFsaWRfZG9taW5hdGVkX2J5X3AsDQogCQkJICB2YWwtPm4g KiBzaXplb2YgKGludCkpOw0KLQkJICAoKm5leHQpLT52YWxpZF9kb21pbmF0ZWRfYnlfcFt2YWwt Pm5dID0gdm5vX2JiLT5pbmRleDsNCi0JCSAgbmV4dCA9ICYoKm5leHQpLT5uZXh0Ow0KKwkJICBu dmFsLT52YWxpZF9kb21pbmF0ZWRfYnlfcFt2YWwtPm5dID0gdm5vX2JiLT5pbmRleDsNCiAJCSAg aWYgKGR1bXBfZmlsZSAmJiAoZHVtcF9mbGFncyAmIFRERl9ERVRBSUxTKSkNCiAJCSAgICBmcHJp bnRmIChkdW1wX2ZpbGUsICJBcHBlbmRpbmcgcHJlZGljYXRlIHRvIHZhbHVlLlxuIik7DQogCQkg IGNvbnRpbnVlOw0KQEAgLTQxNjgsOCArNDI3NiwxMCBAQCB2bl9uYXJ5X29wX2luc2VydF9pbnRv ICh2bl9uYXJ5X29wX3Qgdm5vLCB2bl9uYXJ5X29wX3RhYmxlX3R5cGUgKnRhYmxlLA0KIAkgICAg ICAoKm5leHQpLT5uZXh0ID0gTlVMTDsNCiAJICAgICAgbmV4dCA9ICYoKm5leHQpLT5uZXh0Ow0K IAkgICAgfQ0KLQkgIGlmICghZm91bmQpDQotCSAgICAqbmV4dCA9IG52YWw7DQorCSAgLyogUHV0 IG5ldyByZXN1bHQgYXQgZnJvbnQsIHNvIGxvb2t1cF9lcXVpdl9oZWFkIGNhbiBmaW5kIHRoZSBs YXN0DQorCSAgICAgaW5zZXJ0ZWQgKG1vc3QgZ2VuZXJhbCkgcmVzdWx0LiAgKi8NCisJICBudmFs LT5uZXh0ID0gdm5vLT51LnZhbHVlczsNCisJICB2bm8tPnUudmFsdWVzID0gbnZhbDsNCiANCiAJ ICAqc2xvdCA9IHZubzsNCiAJICB2bm8tPm5leHQgPSBsYXN0X2luc2VydGVkX25hcnk7DQpAQCAt NDIxNCw2ICs0MzI0LDg2IEBAIHZuX25hcnlfb3BfaW5zZXJ0X3BpZWNlcyAodW5zaWduZWQgaW50 IGxlbmd0aCwgZW51bSB0cmVlX2NvZGUgY29kZSwNCiAgIHJldHVybiB2bl9uYXJ5X29wX2luc2Vy dF9pbnRvICh2bm8xLCB2YWxpZF9pbmZvLT5uYXJ5LCB0cnVlKTsNCiB9DQogDQorLyogU2ltaWxh ciB3aXRoIHZuX25hcnlfb3BfaW5zZXJ0X3BpZWNlcywgYnV0IGluc2VydCBhcyBwcmVkaWNhdGVk IHZhbHVlcy4gICovDQorDQorc3RhdGljIHZuX25hcnlfb3BfdA0KK3ZuX25hcnlfb3BfaW5zZXJ0 X3BpZWNlc19wcmVkaWNhdGVkXzEgKHVuc2lnbmVkIGludCBsZW5ndGgsIGVudW0gdHJlZV9jb2Rl IGNvZGUsDQorCQkJCSAgICAgICB0cmVlIHR5cGUsIHRyZWUgKm9wcywgdHJlZSByZXN1bHQsDQor CQkJCSAgICAgICB1bnNpZ25lZCBpbnQgdmFsdWVfaWQsIGJhc2ljX2Jsb2NrIGJiKQ0KK3sNCisg IHZuX25hcnlfb3BfdCB2bm8xID0gYWxsb2Nfdm5fbmFyeV9vcCAobGVuZ3RoLCBOVUxMX1RSRUUs IHZhbHVlX2lkKTsNCisgIGluaXRfdm5fbmFyeV9vcF9mcm9tX3BpZWNlcyAodm5vMSwgbGVuZ3Ro LCBjb2RlLCB0eXBlLCBvcHMpOw0KKyAgdm5vMS0+cHJlZGljYXRlZF92YWx1ZXMgPSAxOw0KKyAg dm5vMS0+dS52YWx1ZXMNCisgICAgPSAodm5fcHZhbCAqKSBvYnN0YWNrX2FsbG9jICgmdm5fdGFi bGVzX29ic3RhY2ssIHNpemVvZiAodm5fcHZhbCkpOw0KKyAgdm5vMS0+dS52YWx1ZXMtPm5leHQg PSBOVUxMOw0KKyAgdm5vMS0+dS52YWx1ZXMtPnJlc3VsdCA9IHJlc3VsdDsNCisgIHZubzEtPnUu dmFsdWVzLT5uID0gMTsNCisgIHZubzEtPnUudmFsdWVzLT52YWxpZF9kb21pbmF0ZWRfYnlfcFsw XSA9IGJiLT5pbmRleDsNCisgIHJldHVybiB2bl9uYXJ5X29wX2luc2VydF9pbnRvICh2bm8xLCB2 YWxpZF9pbmZvLT5uYXJ5LCB0cnVlKTsNCit9DQorDQorLyogRm9sZCBOLWFyeSBleHByZXNzaW9u IG9mIGVxdWl2LWhlYWRzLCByZXR1cm4gTlVMTF9UUkVFIGlmIG5vdCBmb2xkZWQuICAqLw0KKw0K K3N0YXRpYyB0cmVlDQorZm9sZF9jb25zdF9mcm9tX2VxdWl2X2hlYWRzICh1bnNpZ25lZCBsZW5n dGgsIHRyZWVfY29kZSBvcGNvZGUsIHRyZWUgKm9wLA0KKwkJCSAgICAgdHJlZSB0eXBlKQ0KK3sN CisgIHRyZWUgcmVzdWx0ID0gTlVMTF9UUkVFOw0KKyAgLyogV2UncmUgdXNpbmcgZXF1aXYtaGVh ZHMsIGkuZS4gdGhlIG1vc3QgZ2VuZXJhbCBvcGVyYW5kcywgc2hvcnRjdXQgZm9yDQorICAgICBz aXR1YXRpb25zIHRoYXQgY2FuIGZvbGQuICAqLw0KKyAgc3dpdGNoIChsZW5ndGgpDQorICAgIHsN CisgICAgY2FzZSAxOg0KKyAgICAgIGlmIChDT05TVEFOVF9DTEFTU19QIChvcFswXSkpDQorCXJl c3VsdA0KKwkgID0gZ2ltcGxlX3NpbXBsaWZ5IChvcGNvZGUsIHR5cGUsIG9wWzBdLCBOVUxMLCBu b19mb2xsb3dfc3NhX2VkZ2VzKTsNCisgICAgICBicmVhazsNCisgICAgY2FzZSAyOg0KKyAgICAg IGlmICgoQ09OU1RBTlRfQ0xBU1NfUCAob3BbMF0pICYmIENPTlNUQU5UX0NMQVNTX1AgKG9wWzFd KSkNCisJICB8fCBvcFswXSA9PSBvcFsxXSkNCisJcmVzdWx0ID0gZ2ltcGxlX3NpbXBsaWZ5IChv cGNvZGUsIHR5cGUsIG9wWzBdLCBvcFsxXSwgTlVMTCwNCisJCQkJICBub19mb2xsb3dfc3NhX2Vk Z2VzKTsNCisgICAgICBicmVhazsNCisgICAgY2FzZSAzOg0KKyAgICAgIGlmIChDT05TVEFOVF9D TEFTU19QIChvcFswXSkgJiYgQ09OU1RBTlRfQ0xBU1NfUCAob3BbMV0pDQorCSAgJiYgQ09OU1RB TlRfQ0xBU1NfUCAob3BbMl0pKQ0KKwlyZXN1bHQgPSBnaW1wbGVfc2ltcGxpZnkgKG9wY29kZSwg dHlwZSwgb3BbMF0sIG9wWzFdLCBvcFsyXSwgTlVMTCwNCisJCQkJICBub19mb2xsb3dfc3NhX2Vk Z2VzKTsNCisgICAgICBicmVhazsNCisgICAgZGVmYXVsdDoNCisgICAgICBicmVhazsNCisgICAg fQ0KKyAgaWYgKHJlc3VsdCAmJiAhdXNlbGVzc190eXBlX2NvbnZlcnNpb25fcCAodHlwZSwgVFJF RV9UWVBFIChyZXN1bHQpKSkNCisgICAgcmVzdWx0ID0gZm9sZF9jb252ZXJ0ICh0eXBlLCByZXN1 bHQpOw0KKyAgcmV0dXJuIHJlc3VsdDsNCit9DQorDQorLyogSW5zZXJ0IGEgYmFjay1yZWZlcmVu Y2UgdG8gdm5fbmFyeV9vcF90IGluIHZuX3NzYV9hdXguICAqLw0KKw0KK3N0YXRpYyBpbmxpbmUg dm9pZA0KK3B1c2hfbmV3X25hcnlfcmVmICh2bl9uYXJ5X29wX3Qgc2xvdCwgdm5fc3NhX2F1eF90 IGluZm8pDQorew0KKyAgbmFyeV9yZWYgKnJlZjsNCisgIGlmIChuYXJ5X3JlZl9mcmVlbGlzdCkN CisgICAgew0KKyAgICAgIHJlZiA9IG5hcnlfcmVmX2ZyZWVsaXN0Ow0KKyAgICAgIG5hcnlfcmVm X2ZyZWVsaXN0ID0gbmFyeV9yZWZfZnJlZWxpc3QtPm5leHQ7DQorICAgIH0NCisgIGVsc2UNCisg ICAgcmVmID0gWE9CTkVXICgmdm5fc3NhX2F1eF9vYnN0YWNrLCBuYXJ5X3JlZik7DQorICByZWYt Pm5leHQgPSBpbmZvLT5yZWY7DQorICByZWYtPm5leHRfdW5kbyA9IGxhc3RfcHVzaGVkX25hcnlf cmVmOw0KKyAgcmVmLT5zbG90ID0gc2xvdDsNCisgIGxhc3RfcHVzaGVkX25hcnlfcmVmID0gaW5m bzsNCisgIGluZm8tPnJlZiA9IHJlZjsNCisgICsraW5mby0+bnVtX25hcnlfcmVmOw0KKyAgZ2Nj X2Fzc2VydCAoaW5mby0+bnVtX25hcnlfcmVmID4gMCk7DQorfQ0KKw0KK3N0YXRpYyB2bl9uYXJ5 X29wX3QNCit2YWxfZXF1aXZfaW5zZXJ0ICh0cmVlIG9wMSwgdHJlZSBvcDIsIGVkZ2UgZSk7DQor DQogc3RhdGljIHZuX25hcnlfb3BfdA0KIHZuX25hcnlfb3BfaW5zZXJ0X3BpZWNlc19wcmVkaWNh dGVkICh1bnNpZ25lZCBpbnQgbGVuZ3RoLCBlbnVtIHRyZWVfY29kZSBjb2RlLA0KIAkJCQkgICAg IHRyZWUgdHlwZSwgdHJlZSAqb3BzLA0KQEAgLTQyMjEsMjEgKzQ0MTEsMTUgQEAgdm5fbmFyeV9v cF9pbnNlcnRfcGllY2VzX3ByZWRpY2F0ZWQgKHVuc2lnbmVkIGludCBsZW5ndGgsIGVudW0gdHJl ZV9jb2RlIGNvZGUsDQogCQkJCSAgICAgZWRnZSBwcmVkX2UpDQogew0KICAgLyogPz8/ICBDdXJy ZW50bHkgdHJhY2tpbmcgQkJzLiAgKi8NCi0gIGlmICghIHNpbmdsZV9wcmVkX3AgKHByZWRfZS0+ ZGVzdCkpDQotICAgIHsNCi0gICAgICAvKiBOZXZlciByZWNvcmQgZm9yIGJhY2tlZGdlcy4gICov DQotICAgICAgaWYgKHByZWRfZS0+ZmxhZ3MgJiBFREdFX0RGU19CQUNLKQ0KLQlyZXR1cm4gTlVM TDsNCi0gICAgICBlZGdlX2l0ZXJhdG9yIGVpOw0KLSAgICAgIGVkZ2UgZTsNCi0gICAgICBpbnQg Y250ID0gMDsNCi0gICAgICAvKiBJZ25vcmUgYmFja2VkZ2VzLiAgKi8NCi0gICAgICBGT1JfRUFD SF9FREdFIChlLCBlaSwgcHJlZF9lLT5kZXN0LT5wcmVkcykNCi0JaWYgKCEgZG9taW5hdGVkX2J5 X3AgKENESV9ET01JTkFUT1JTLCBlLT5zcmMsIGUtPmRlc3QpKQ0KLQkgIGNudCsrOw0KLSAgICAg IGlmIChjbnQgIT0gMSkNCi0JcmV0dXJuIE5VTEw7DQotICAgIH0NCisgIGlmICghdm5fdHJhY2tp bmdfZWRnZSAocHJlZF9lKSkNCisgICAgcmV0dXJuIE5VTEw7DQorICAvKiBFcXVpdmFsZW5jZSBj YW4gcmVwcmVzZW50IHRoaXMuICAqLw0KKyAgaWYgKGNvZGUgPT0gRVFfRVhQUiAmJiByZXN1bHQg PT0gYm9vbGVhbl90cnVlX25vZGUpDQorICAgIHJldHVybiB2YWxfZXF1aXZfaW5zZXJ0IChvcHNb MF0sIG9wc1sxXSwgcHJlZF9lKTsNCisgIC8qIExlYXZlIHRoaXMgZm9yIGludmVydGVkIGNvbmRp dGlvbi4gICovDQorICBpZiAoY29kZSA9PSBORV9FWFBSICYmIHJlc3VsdCA9PSBib29sZWFuX2Zh bHNlX25vZGUpDQorICAgIHJldHVybiBOVUxMOw0KKw0KICAgaWYgKGR1bXBfZmlsZSAmJiAoZHVt cF9mbGFncyAmIFRERl9ERVRBSUxTKQ0KICAgICAgIC8qID8/PyAgRml4IGR1bXBpbmcsIGJ1dCBj dXJyZW50bHkgd2Ugb25seSBnZXQgY29tcGFyaXNvbnMuICAqLw0KICAgICAgICYmIFRSRUVfQ09E RV9DTEFTUyAoY29kZSkgPT0gdGNjX2NvbXBhcmlzb24pDQpAQCAtNDI0OCwzNiArNDQzMiwyNTIg QEAgdm5fbmFyeV9vcF9pbnNlcnRfcGllY2VzX3ByZWRpY2F0ZWQgKHVuc2lnbmVkIGludCBsZW5n dGgsIGVudW0gdHJlZV9jb2RlIGNvZGUsDQogICAgICAgZnByaW50ZiAoZHVtcF9maWxlLCAiID09 ICVzXG4iLA0KIAkgICAgICAgaW50ZWdlcl96ZXJvcCAocmVzdWx0KSA/ICJmYWxzZSIgOiAidHJ1 ZSIpOw0KICAgICB9DQotICB2bl9uYXJ5X29wX3Qgdm5vMSA9IGFsbG9jX3ZuX25hcnlfb3AgKGxl bmd0aCwgTlVMTF9UUkVFLCB2YWx1ZV9pZCk7DQotICBpbml0X3ZuX25hcnlfb3BfZnJvbV9waWVj ZXMgKHZubzEsIGxlbmd0aCwgY29kZSwgdHlwZSwgb3BzKTsNCi0gIHZubzEtPnByZWRpY2F0ZWRf dmFsdWVzID0gMTsNCi0gIHZubzEtPnUudmFsdWVzID0gKHZuX3B2YWwgKikgb2JzdGFja19hbGxv YyAoJnZuX3RhYmxlc19vYnN0YWNrLA0KLQkJCQkJICAgICAgc2l6ZW9mICh2bl9wdmFsKSk7DQot ICB2bm8xLT51LnZhbHVlcy0+bmV4dCA9IE5VTEw7DQotICB2bm8xLT51LnZhbHVlcy0+cmVzdWx0 ID0gcmVzdWx0Ow0KLSAgdm5vMS0+dS52YWx1ZXMtPm4gPSAxOw0KLSAgdm5vMS0+dS52YWx1ZXMt PnZhbGlkX2RvbWluYXRlZF9ieV9wWzBdID0gcHJlZF9lLT5kZXN0LT5pbmRleDsNCi0gIHJldHVy biB2bl9uYXJ5X29wX2luc2VydF9pbnRvICh2bm8xLCB2YWxpZF9pbmZvLT5uYXJ5LCB0cnVlKTsN CisgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykNCisgICAgZ2NjX2NoZWNr aW5nX2Fzc2VydCAobG9va3VwX2VxdWl2X2hlYWQgKG9wc1tpXSwgcHJlZF9lLT5kZXN0KSA9PSBv cHNbaV0pOw0KKw0KKyAgLyogU2tpcCBpZiB0aGUgcmVzdWx0IGlzIGtub3duLiAoQ2F1c2VkIGJ5 IHJlLWluc2VydGluZyBwcmVkaWNhdGVzLikgICovDQorICB0cmVlIHNpbXBsaWZpZWQgPSBmb2xk X2NvbnN0X2Zyb21fZXF1aXZfaGVhZHMgKGxlbmd0aCwgY29kZSwgb3BzLCB0eXBlKTsNCisgIGlm IChzaW1wbGlmaWVkKQ0KKyAgICB7DQorICAgICAgaWYgKGR1bXBfZmlsZSAmJiAoZHVtcF9mbGFn cyAmIFRERl9ERVRBSUxTKSkNCisJew0KKwkgIGZwcmludGYgKGR1bXBfZmlsZSwgIlJlc3VsdCBp cyBrbm93bjogIik7DQorCSAgcHJpbnRfZ2VuZXJpY19leHByIChkdW1wX2ZpbGUsIHNpbXBsaWZp ZWQsIFRERl9OT05FKTsNCisJICBmcHJpbnRmIChkdW1wX2ZpbGUsICIsIHNraXBwZWQuXG4iKTsN CisJfQ0KKyAgICAgIHJldHVybiBOVUxMOw0KKyAgICB9DQorDQorICB2bl9uYXJ5X29wX3QgdmFs DQorICAgID0gdm5fbmFyeV9vcF9pbnNlcnRfcGllY2VzX3ByZWRpY2F0ZWRfMSAobGVuZ3RoLCBj b2RlLCB0eXBlLCBvcHMsDQorCQkJCQkgICAgIHJlc3VsdCwgdmFsdWVfaWQsIHByZWRfZS0+ZGVz dCk7DQorICAvKiBJbnNlcnQgYmFjay1yZWZzIChvcGVyYW5kLT5zbG90KSB0byB2bl9zc2FfYXV4 IHN0cnVjdHVyZS4gICovDQorICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKysp DQorICAgIGlmIChUUkVFX0NPREUgKG9wc1tpXSkgPT0gU1NBX05BTUUpDQorICAgICAgew0KKwl2 bl9zc2FfYXV4X3QgaW5mbyA9IFZOX0lORk8gKG9wc1tpXSk7DQorCWlmIChpbmZvLT52YWxudW0g PT0gb3BzW2ldKQ0KKwkgIHB1c2hfbmV3X25hcnlfcmVmICh2YWwsIGluZm8pOw0KKyAgICAgIH0N CisgIHJldHVybiB2YWw7DQogfQ0KIA0KLXN0YXRpYyBib29sDQotZG9taW5hdGVkX2J5X3Bfd191 bmV4IChiYXNpY19ibG9jayBiYjEsIGJhc2ljX2Jsb2NrIGJiMiwgYm9vbCk7DQorLyogUmVjb3Jk IHRoZSBlcXVpdmFsZW5jZSBvZiBPUDEgYW5kIE9QMiBvbiBlZGdlIEUuICAqLw0KIA0KLXN0YXRp YyB0cmVlDQotdm5fbmFyeV9vcF9nZXRfcHJlZGljYXRlZF92YWx1ZSAodm5fbmFyeV9vcF90IHZu bywgYmFzaWNfYmxvY2sgYmIpDQorc3RhdGljIHZuX25hcnlfb3BfdA0KK3ZhbF9lcXVpdl9pbnNl cnQgKHRyZWUgb3AxLCB0cmVlIG9wMiwgZWRnZSBlKQ0KIHsNCi0gIGlmICghIHZuby0+cHJlZGlj YXRlZF92YWx1ZXMpDQotICAgIHJldHVybiB2bm8tPnUucmVzdWx0Ow0KKyAgLyogUmVjb3JkIGJ5 IGVxdWl2YWxlbmNlIGhlYWRzLiAgKi8NCisgIGJhc2ljX2Jsb2NrIGJiID0gZS0+ZGVzdDsNCisg IHRyZWUgbGhzID0gbG9va3VwX2VxdWl2X2hlYWQgKG9wMSwgYmIpOw0KKyAgdHJlZSByaHMgPSBs b29rdXBfZXF1aXZfaGVhZCAob3AyLCBiYik7DQorICBpZiAobGhzID09IHJocykNCisgICAgcmV0 dXJuIE5VTEw7DQorICAvKiBTZXQgUkhTIHRvIGJlIG5ldyBlcXVpdi1oZWFkIGZvciBMSFMuICBM SFMgbXVzdCBiZSBTU0FfTkFNRS4gICovDQorICBpZiAoVFJFRV9DT0RFIChsaHMpICE9IFNTQV9O QU1FKQ0KKyAgICB7DQorICAgICAgaWYgKFRSRUVfQ09ERSAocmhzKSA9PSBTU0FfTkFNRSkNCisJ c3RkOjpzd2FwIChsaHMsIHJocyk7DQorICAgICAgZWxzZQ0KKwlyZXR1cm4gTlVMTDsNCisgICAg fQ0KKyAgdm5fc3NhX2F1eF90IHJoc19pbmZvID0gTlVMTCwgbGhzX2luZm8gPSBWTl9JTkZPIChs aHMpOw0KKw0KKyAgLyogQ2hvb3NlIHRoZSBoYW5kLXNpZGUgd2l0aCBtb3JlIHJlY29yZGVkIG4t YXJ5IGV4cHJlc3Npb25zIGFzIG5ldw0KKyAgICAgZXF1aXZhbGVuY2UgaGVhZCwgdG8gbWFrZSBm ZXdlciByZS1pbnNlcnRpb25zLiAgKi8NCisgIGlmIChUUkVFX0NPREUgKHJocykgPT0gU1NBX05B TUUpDQorICAgIHsNCisgICAgICByaHNfaW5mbyA9IFZOX0lORk8gKHJocyk7DQorICAgICAgaWYg KHJoc19pbmZvLT5udW1fbmFyeV9yZWYgPCBsaHNfaW5mby0+bnVtX25hcnlfcmVmKQ0KKwl7DQor CSAgc3RkOjpzd2FwIChsaHMsIHJocyk7DQorCSAgc3RkOjpzd2FwIChyaHNfaW5mbywgbGhzX2lu Zm8pOw0KKwl9DQorICAgIH0NCisNCisgIGlmIChkdW1wX2ZpbGUgJiYgKGR1bXBfZmxhZ3MgJiBU REZfREVUQUlMUykpDQorICAgIHsNCisgICAgICBmcHJpbnRmIChkdW1wX2ZpbGUsICJSZWNvcmRp bmcgZXF1aXZhbGVuY2Ugb2YgIik7DQorICAgICAgcHJpbnRfZ2VuZXJpY19leHByIChkdW1wX2Zp bGUsIGxocyk7DQorICAgICAgZnByaW50ZiAoZHVtcF9maWxlLCAiIGFuZCAiKTsNCisgICAgICBw cmludF9nZW5lcmljX2V4cHIgKGR1bXBfZmlsZSwgcmhzKTsNCisgICAgICBmcHJpbnRmIChkdW1w X2ZpbGUsICIgYXQgQkIlZFxuIiwgYmItPmluZGV4KTsNCisgICAgfQ0KKyAgLyogUmVjb3JkIGVx dWl2YWxlbmNlIGFzIHVuYXJ5IE5PUF9FWFBSLiAgKi8NCisgIHZuX25hcnlfb3BfdCB2YWwNCisg ICAgPSB2bl9uYXJ5X29wX2luc2VydF9waWVjZXNfcHJlZGljYXRlZF8xICgxLCBOT1BfRVhQUiwg VFJFRV9UWVBFIChsaHMpLA0KKwkJCQkJICAgICAmbGhzLCByaHMsIDAsIGJiKTsNCisgIC8qIEJh Y2stcmVmIGZvciBlcXVpdmFsZW5jZXMgaXMgcmVzdWx0LT5zbG90IHJhdGhlciB0aGFuIG9wLT5z bG90LCBzbyB0aGF0DQorICAgICB3aGVuIG5ldyBlcXVpdi1oZWFkIGlzIGFwcGVuZGVkLCB3ZSBj YW4gdXBkYXRlIHRoZW0uICAqLw0KKyAgaWYgKFRSRUVfQ09ERSAocmhzKSA9PSBTU0FfTkFNRSkN CisgICAgcHVzaF9uZXdfbmFyeV9yZWYgKHZhbCwgcmhzX2luZm8pOw0KKw0KKyAgLyogSXRlcmF0 ZSBvbiBMSFMncyByZWZlcmVuY2VzLCBmaXJzdCB1cGRhdGUgZXF1aXYtaGVhZHMsIHRoZW4gcmUt aW5zZXJ0DQorICAgICBmb3JtZXIgcHJlZGljYXRlcywgc28gdGhhdCB0aGUgcmVzdWx0IHdpbGwg YmUgbGF0ZXN0LiAgKi8NCisgIGF1dG9fdmVjPHZuX25hcnlfb3BfdD4gcHJlZGljYXRlczsNCisg IGF1dG9fdmVjPHRyZWU+IHJlc3VsdHM7DQorICB2bl9uYXJ5X29wX3Qgc2xvdDsNCisgIHRyZWUg b2xkX2hlYWQgPSBsaHNfaW5mby0+dmFsbnVtOw0KKyAgbmFyeV9yZWYgKnJlZiA9IGxoc19pbmZv LT5yZWY7DQorICBmb3IgKDsgcmVmOyByZWYgPSByZWYtPm5leHQpDQorICAgIHsNCisgICAgICBz bG90ID0gcmVmLT5zbG90Ow0KKyAgICAgIGlmICghc2xvdC0+cHJlZGljYXRlZF92YWx1ZXMpDQor CWNvbnRpbnVlOw0KKyAgICAgIC8qIFVwZGF0ZSByZWNvcmRlZCBlcXVpdmFsZW5jZXMgd2l0aCBu ZXcgZXF1aXYtaGVhZC4gICovDQorICAgICAgaWYgKHNsb3QtPm9wY29kZSA9PSBOT1BfRVhQUiAm JiBzbG90LT5sZW5ndGggPT0gMSkNCisJew0KKwkgIGlmIChzbG90LT5vcFswXSA9PSByaHMpDQor CSAgICBjb250aW51ZTsNCisJICBmb3IgKHZuX3B2YWwgKnB2YWwgPSBzbG90LT51LnZhbHVlczsg cHZhbDsgcHZhbCA9IHB2YWwtPm5leHQpDQorCSAgICBpZiAocHZhbC0+cmVzdWx0ID09IG9sZF9o ZWFkICYmIGlzX3ZuX3ZhbGlkX2F0X2JiIChwdmFsLCBiYikpDQorCSAgICAgIHsNCisJCWlmIChk dW1wX2ZpbGUgJiYgKGR1bXBfZmxhZ3MgJiBUREZfREVUQUlMUykpDQorCQkgIHsNCisJCSAgICBm cHJpbnRmIChkdW1wX2ZpbGUsICJVcGRhdGluZyBlcXVpdi1oZWFkIG9mICIpOw0KKwkJICAgIHBy aW50X2dlbmVyaWNfZXhwciAoZHVtcF9maWxlLCBzbG90LT5vcFswXSwgVERGX1NMSU0pOw0KKwkJ ICAgIGZwcmludGYgKGR1bXBfZmlsZSwgIiB0byAiKTsNCisJCSAgICBwcmludF9nZW5lcmljX2V4 cHIgKGR1bXBfZmlsZSwgcmhzLCBUREZfU0xJTSk7DQorCQkgICAgZnByaW50ZiAoZHVtcF9maWxl LCAiIGF0IEJCJWRcbiIsIGJiLT5pbmRleCk7DQorCQkgIH0NCisJCXZuX25hcnlfb3BfdCBuZXdf dmFsDQorCQkgID0gdm5fbmFyeV9vcF9pbnNlcnRfcGllY2VzX3ByZWRpY2F0ZWRfMSAoMSwgTk9Q X0VYUFIsDQorCQkJCQkJCSAgIHNsb3QtPnR5cGUsIHNsb3QtPm9wLA0KKwkJCQkJCQkgICByaHMs IDAsIGJiKTsNCisJCS8qIFB1c2ggYmFjay1yZWYgKHJlc3VsdC0+c2xvdCkgZm9yIG5ldyBlcXVp dmFsZW5jZS4gICovDQorCQlpZiAoVFJFRV9DT0RFIChyaHMpID09IFNTQV9OQU1FKQ0KKwkJICBw dXNoX25ld19uYXJ5X3JlZiAobmV3X3ZhbCwgcmhzX2luZm8pOw0KKwkgICAgICB9DQorCX0NCisg ICAgICBlbHNlDQorCS8qIFByZWRpY2F0ZWQgdmFsdWVzIGFyZSBjb2xsZWN0ZWQsIHRvIGJlIHJl LWluc2VydGVkIGxhdGVyLiAgKi8NCisJZm9yICh2bl9wdmFsICpwdmFsID0gc2xvdC0+dS52YWx1 ZXM7IHB2YWw7IHB2YWwgPSBwdmFsLT5uZXh0KQ0KKwkgIHsNCisJICAgIGlmICghaXNfdm5fdmFs aWRfYXRfYmIgKHB2YWwsIGJiKSkNCisJICAgICAgY29udGludWU7DQorCSAgICBwcmVkaWNhdGVz LnNhZmVfcHVzaCAoc2xvdCk7DQorCSAgICByZXN1bHRzLnNhZmVfcHVzaCAocHZhbC0+cmVzdWx0 KTsNCisJICB9DQorICAgIH0NCisgIHVuc2lnbmVkIGk7DQorICBpZiAocHJlZGljYXRlcy5sZW5n dGggKCkgPiAwICYmIGR1bXBfZmlsZSAmJiAoZHVtcF9mbGFncyAmIFRERl9ERVRBSUxTKSkNCisg ICAgZnByaW50ZiAoZHVtcF9maWxlLCAiUmUtaW5zZXJ0aW5nICVkIHByZWRpY2F0ZXMuLi5cbiIs DQorCSAgICAgcHJlZGljYXRlcy5sZW5ndGggKCkpOw0KKyAgdHJlZSBuZXdfb3BzWzNdOw0KKyAg Rk9SX0VBQ0hfVkVDX0VMVCAocHJlZGljYXRlcywgaSwgc2xvdCkNCisgICAgew0KKyAgICAgIGxv b2t1cF9lcXVpdl9oZWFkcyAoc2xvdC0+bGVuZ3RoLCBzbG90LT5vcCwgbmV3X29wcywgZS0+ZGVz dCk7DQorICAgICAgdm5fbmFyeV9vcF9pbnNlcnRfcGllY2VzX3ByZWRpY2F0ZWQgKHNsb3QtPmxl bmd0aCwgc2xvdC0+b3Bjb2RlLA0KKwkJCQkJICAgc2xvdC0+dHlwZSwgbmV3X29wcywgcmVzdWx0 c1tpXSwNCisJCQkJCSAgIHNsb3QtPnZhbHVlX2lkLCBlKTsNCisgICAgfQ0KKyAgcmV0dXJuIHZh bDsNCit9DQorDQorLyogUmVjb3JkIHRlbXBvcmFyeSBlcXVpdmFsZW5jZXMgZ2VuZXJhdGVkIGJ5 IFBISSBub2RlcywgYW5kIGFyZSB2YWxpZCB3aGVuDQorICAgQkIncyBvdXRnb2luZyBlZGdlIEUg aXMgdGFrZW4uICBWTk8gY29udGFpbnMgdGhlIGludGVyZXN0ZWQgZXhwcmVzc2lvbi4gIElmDQor ICAgSU5WRVJTRSBpcyB0cnVlLCBydWxlIG91dCBWTk8ncyByZXN1bHRzIHRoYXQgYXJlIGRpZmZl cmVudCB3aXRoIFJFU1VMVDsNCisgICBvdGhlcndpc2UgcnVsZSBvdXQgUkVTVUxUIGl0c2VsZi4g ICovDQorDQorc3RhdGljIHZvaWQNCityZWNvcmRfZXF1aXZfZnJvbV9wcmV2X3BoaV8xICh2bl9u YXJ5X29wX3Qgdm5vLCBlZGdlIGUsIGJhc2ljX2Jsb2NrIGJiLA0KKwkJCSAgICAgIHRyZWUgcmVz dWx0LCBib29sIGludmVyc2UpDQorew0KKyAgaWYgKCEodm5vICYmIHZuby0+cHJlZGljYXRlZF92 YWx1ZXMpKQ0KKyAgICByZXR1cm47DQorDQorICAvKiBQcm9jZXNzIHByZWRpY2F0ZWQgdmFsdWVz IGluIFZOTywgbG9va2luZyBmb3IgYSBjb25mbGljdGluZyByZXN1bHQsIGFuZA0KKyAgICAgdGhl IGxvY2F0aW9uJ3Mgc2luZ2xlX3ByZWQgZG9taW5hdGVzIEJCLiAgKi8NCiAgIGZvciAodm5fcHZh bCAqdmFsID0gdm5vLT51LnZhbHVlczsgdmFsOyB2YWwgPSB2YWwtPm5leHQpDQotICAgIGZvciAo dW5zaWduZWQgaSA9IDA7IGkgPCB2YWwtPm47ICsraSkNCi0gICAgICAvKiBEbyBub3QgaGFuZGxl IGJhY2tlZGdlIGV4ZWN1dGFiaWxpdHkgb3B0aW1pc3RpY2FsbHkgc2luY2UNCi0JIHdoZW4gZmln dXJpbmcgb3V0IHdoZXRoZXIgdG8gaXRlcmF0ZSB3ZSBkbyBub3QgY29uc2lkZXINCi0JIGNoYW5n ZWQgcHJlZGljYXRpb24uICAqLw0KLSAgICAgIGlmIChkb21pbmF0ZWRfYnlfcF93X3VuZXgNCi0J ICAgIChiYiwgQkFTSUNfQkxPQ0tfRk9SX0ZOIChjZnVuLCB2YWwtPnZhbGlkX2RvbWluYXRlZF9i eV9wW2ldKSwNCi0JICAgICBmYWxzZSkpDQotCXJldHVybiB2YWwtPnJlc3VsdDsNCi0gIHJldHVy biBOVUxMX1RSRUU7DQorICAgIHsNCisgICAgICBpZiAoaW52ZXJzZSA/IHZhbC0+cmVzdWx0ID09 IHJlc3VsdCA6IHZhbC0+cmVzdWx0ICE9IHJlc3VsdCkNCisJY29udGludWU7DQorICAgICAgLyog Rm91bmQgYSByZXN1bHQgdG8gcnVsZSBvdXQsIHByb2Nlc3MgZWFjaCBsb2NhdGlvbi4gICovDQor ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbC0+bjsgKytpKQ0KKwl7DQorCSAgYmFz aWNfYmxvY2sgYmIxDQorCSAgICA9IEJBU0lDX0JMT0NLX0ZPUl9GTiAoY2Z1biwgdmFsLT52YWxp ZF9kb21pbmF0ZWRfYnlfcFtpXSk7DQorCSAgaWYgKCFzaW5nbGVfcHJlZF9wIChiYjEpKQ0KKwkg ICAgY29udGludWU7DQorCSAgYmFzaWNfYmxvY2sgcCA9IHNpbmdsZV9wcmVkIChiYjEpOw0KKwkg IGlmICghZG9taW5hdGVkX2J5X3Bfd191bmV4IChiYiwgcCwgZmFsc2UpKQ0KKwkgICAgY29udGlu dWU7DQorCSAgZ2NjX2Fzc2VydCAoRURHRV9DT1VOVCAocC0+c3VjY3MpID09IDIpOw0KKwkgIC8q IEl0ZXJhdGUgb24gcG9zc2libGUgcGhpX2JicyAoY2FuIGJlIEJCIGl0c2VsZikuIENvbnNpZGVy aW5nDQorCSAgICAgbm9uLWV4ZWN1dGFibGUgZWRnZXMsIHRoZXJlIGNhbiBiZSBtdWx0aXBsZSBw aGlfYmJzLiAgKi8NCisJICBmb3IgKGJhc2ljX2Jsb2NrIHBoaV9iYiA6IGdldF9kb21pbmF0ZWRf YnkgKENESV9ET01JTkFUT1JTLCBwKSkNCisJICAgIHsNCisJICAgICAgaWYgKCFkb21pbmF0ZWRf YnlfcF93X3VuZXggKGJiLCBwaGlfYmIsIGZhbHNlKSkNCisJCWNvbnRpbnVlOw0KKwkgICAgICAv KiBQcm9jZXNzIFBISXMsIHJ1bGUgb3V0IGluY29taW5nIGVkZ2VzIHRoYXQgZGVmaW5pdGVseSBj b21lDQorCQkgZnJvbSBwLT5iYjEuICBJZiB0aGVyZSdzIGEgc2luZ2xlIFBISSBhcmd1bWVudCBY IGxlZnQsIHJlY29yZA0KKwkJIHRoZSBlcXVpdmFsZW5jZSBvZiBYIGFuZCBQSEkgcmVzdWx0IGF0 IGVkZ2UgZS4gICovDQorCSAgICAgIGZvciAoZ3BoaV9pdGVyYXRvciBnc2kgPSBnc2lfc3RhcnRf bm9udmlydHVhbF9waGlzIChwaGlfYmIpOw0KKwkJICAgIWdzaV9lbmRfcCAoZ3NpKTsgZ3NpX25l eHRfbm9udmlydHVhbF9waGkgKCZnc2kpKQ0KKwkJew0KKwkJICBncGhpICpwaGkgPSBnc2kucGhp ICgpOw0KKwkJICB0cmVlIGVxdWl2ID0gTlVMTF9UUkVFOw0KKwkJICBmb3IgKHVuc2lnbmVkIGog PSAwOyBqIDwgZ2ltcGxlX3BoaV9udW1fYXJncyAocGhpKTsgKytqKQ0KKwkJICAgIHsNCisJCSAg ICAgIGVkZ2UgaW4gPSBnaW1wbGVfcGhpX2FyZ19lZGdlIChwaGksIGopOw0KKwkJICAgICAgaWYg KGluLT5zcmMgPT0gYmIxDQorCQkJICB8fCBkb21pbmF0ZWRfYnlfcF93X3VuZXggKGluLT5zcmMs IGJiMSwgZmFsc2UpKQ0KKwkJCS8qIERlZmluaXRlbHkgY29tZXMgZnJvbSBwLT5iYjEuICAqLw0K KwkJCWNvbnRpbnVlOw0KKwkJICAgICAgdHJlZSBhcmcgPSB2bl92YWx1ZWl6ZSAoZ2ltcGxlX3Bo aV9hcmdfZGVmIChwaGksIGopKTsNCisJCSAgICAgIGlmIChlcXVpdiAmJiBlcXVpdiAhPSBhcmcp DQorCQkJew0KKwkJCSAgZXF1aXYgPSBOVUxMX1RSRUU7DQorCQkJICBicmVhazsNCisJCQl9DQor CQkgICAgICBlcXVpdiA9IGFyZzsNCisJCSAgICB9DQorCQkgIGlmIChlcXVpdikNCisJCSAgICB2 YWxfZXF1aXZfaW5zZXJ0IChlcXVpdiwgUEhJX1JFU1VMVCAocGhpKSwgZSk7DQorCQl9DQorCSAg ICB9DQorCX0NCisgICAgfQ0KK30NCisNCisvKiBSZWNvcmQgdGVtcG9yYXJ5IGVxdWl2YWxlbmNl cyBnZW5lcmF0ZWQgYnkgUEhJIG5vZGVzLCBhbmQgYXJlIHZhbGlkIHdoZW4NCisgICBCQidzIG91 dGdvaW5nIGVkZ2UgRSBpcyB0YWtlbi4gIENPREUsIE9QUyBhbmQgUkVTVUxUIGFyZSB0aGUgY29u ZGl0aW9uIGFuZA0KKyAgIHJlc3VsdCBmb3IgRSB0byBiZSB0YWtlbi4gIFZOTyBjb250YWlucyB0 aGUgY29uZGl0aW9uJ3MgcmVzdWx0cyByZWNvcmRlZCBpbg0KKyAgIG5hcnkgbWFwLg0KKw0KKyAg IFRoZSBpZGVhIGlzIHRvIGZpbmQgYSBjb25mbGljdGluZyBwcmVkaWNhdGUgYXQgc29tZSBsb2Nh dGlvbiBMLCB3aGVyZSBMJ3MNCisgICBwcmVkZWNlc3NvciBQIGRvbWluYXRlcyBCQiwgc28gd2Ug a25vdyBwYXRoIFAtPkwgd2lsbCBub3QgYmUgdGFrZW4gaWYgRSBpcw0KKyAgIHRha2VuLiAgSWYg YnkgcnVsaW5nIG91dCBQLT5MIGNhbiBnZW5lcmF0ZSBzb21lIGVxdWl2YWxlbmNlcywgcmVjb3Jk IHRoZW0gYXQNCisgICBFLT5kZXN0LiAgKi8NCisNCitzdGF0aWMgdm9pZA0KK3JlY29yZF9lcXVp dl9mcm9tX3ByZXZfcGhpICh2bl9uYXJ5X29wX3Qgdm5vLCBlZGdlIGUsIGJhc2ljX2Jsb2NrIGJi LA0KKwkJCSAgICB0cmVlX2NvZGUgY29kZSwgdHJlZSAqb3BzLCB0cmVlIHJlc3VsdCkNCit7DQor ICBpZiAoIXZuX3RyYWNraW5nX2VkZ2UgKGUpKQ0KKyAgICByZXR1cm47DQorICByZWNvcmRfZXF1 aXZfZnJvbV9wcmV2X3BoaV8xICh2bm8sIGUsIGJiLCByZXN1bHQsIHRydWUpOw0KKw0KKyAgLyog Rm9yIHByZWRpY2F0ZXMgbGlrZSAiYT09YiBpcyBmYWxzZSIgb3IgImEhPWIgaXMgdHJ1ZSIsIGVx dWl2YWxlbmNlcyBhcmUNCisgICAgIGNvbmZsaWN0aW5nIHJlc3VsdHMsIGkuZS4gIk5PX09QIChh KSBpcyBiIiBvciAiTk9fT1AgKGIpIGlzIGEiLiAgKi8NCisgIGlmICgocmVzdWx0ID09IGJvb2xl YW5fdHJ1ZV9ub2RlDQorICAgICAgICYmIChjb2RlID09IE5FX0VYUFIgfHwgY29kZSA9PSBHVF9F WFBSIHx8IGNvZGUgPT0gTFRfRVhQUikpDQorICAgICAgfHwgKHJlc3VsdCA9PSBib29sZWFuX2Zh bHNlX25vZGUgJiYgY29kZSA9PSBFUV9FWFBSKSkNCisgICAgew0KKyAgICAgIHZuX25hcnlfb3Bf dCB2bnJlc3VsdDsNCisgICAgICBpZiAoVFJFRV9DT0RFIChvcHNbMF0pID09IFNTQV9OQU1FKQ0K Kwl7DQorCSAgdm5fbmFyeV9vcF9sb29rdXBfcGllY2VzICgxLCBOT1BfRVhQUiwgVFJFRV9UWVBF IChvcHNbMF0pLCBvcHMsDQorCQkJCSAgICAmdm5yZXN1bHQpOw0KKwkgIHJlY29yZF9lcXVpdl9m cm9tX3ByZXZfcGhpXzEgKHZucmVzdWx0LCBlLCBiYiwgb3BzWzFdLCBmYWxzZSk7DQorCX0NCisg ICAgICBpZiAoVFJFRV9DT0RFIChvcHNbMV0pID09IFNTQV9OQU1FKQ0KKwl7DQorCSAgdm5fbmFy eV9vcF9sb29rdXBfcGllY2VzICgxLCBOT1BfRVhQUiwgVFJFRV9UWVBFIChvcHNbMV0pLCAmb3Bz WzFdLA0KKwkJCQkgICAgJnZucmVzdWx0KTsNCisJICByZWNvcmRfZXF1aXZfZnJvbV9wcmV2X3Bo aV8xICh2bnJlc3VsdCwgZSwgYmIsIG9wc1swXSwgZmFsc2UpOw0KKwl9DQorICAgIH0NCiB9DQog DQogLyogSW5zZXJ0IHRoZSByaHMgb2YgU1RNVCBpbnRvIHRoZSBjdXJyZW50IGhhc2ggdGFibGUg d2l0aCBhIHZhbHVlIG51bWJlciBvZg0KQEAgLTQ4OTYsOCArNTI5NiwyNSBAQCBzdGF0aWMgYm9v bA0KIHZpc2l0X25hcnlfb3AgKHRyZWUgbGhzLCBnYXNzaWduICpzdG10KQ0KIHsNCiAgIHZuX25h cnlfb3BfdCB2bnJlc3VsdDsNCi0gIHRyZWUgcmVzdWx0ID0gdm5fbmFyeV9vcF9sb29rdXBfc3Rt dCAoc3RtdCwgJnZucmVzdWx0KTsNCi0gIGlmICghIHJlc3VsdCAmJiB2bnJlc3VsdCkNCisgIHVu c2lnbmVkIGxlbmd0aCA9IHZuX25hcnlfbGVuZ3RoX2Zyb21fc3RtdCAoc3RtdCk7DQorICB2bl9u YXJ5X29wX3Qgdm5vDQorICAgID0gWEFMTE9DQVZBUiAoc3RydWN0IHZuX25hcnlfb3Bfcywgc2l6 ZW9mX3ZuX25hcnlfb3AgKGxlbmd0aCkpOw0KKyAgaW5pdF92bl9uYXJ5X29wX2Zyb21fc3RtdCAo dm5vLCBzdG10KTsNCisgIHRyZWUgcmVzdWx0ID0gTlVMTF9UUkVFOw0KKyAgLyogVHJ5IHRvIGdl dCBhIHNpbXBsaWZpZWQgcmVzdWx0LiAgKi8NCisgIC8qIERvIG5vdCBzaW1wbGlmeSB2YXJpYWJs ZSB1c2VkIGluIFBISSBhdCBsb29wIGV4aXQsIG9yDQorICAgICBzaW1wbGlmeV9wZWVsZWRfY2hy ZWMvY29uc3RhbnRfYWZ0ZXJfcGVlbGluZyBtYXkgbWlzcyB0aGUgbG9vcC4gICovDQorICBnaW1w bGUgKnVzZV9zdG10Ow0KKyAgdXNlX29wZXJhbmRfcCB1c2VfcDsNCisgIGlmICghKHNpbmdsZV9p bW1fdXNlIChsaHMsICZ1c2VfcCwgJnVzZV9zdG10KQ0KKwkmJiBnaW1wbGVfY29kZSAodXNlX3N0 bXQpID09IEdJTVBMRV9QSEkNCisJJiYgc2luZ2xlX3N1Y2NfcCAoZ2ltcGxlX2JiICh1c2Vfc3Rt dCkpDQorCSYmIChzaW5nbGVfc3VjY19lZGdlIChnaW1wbGVfYmIgKHVzZV9zdG10KSktPmZsYWdz ICYgRURHRV9ERlNfQkFDSykpKQ0KKyAgICByZXN1bHQgPSBmb2xkX2NvbnN0X2Zyb21fZXF1aXZf aGVhZHMgKHZuby0+bGVuZ3RoLCB2bm8tPm9wY29kZSwgdm5vLT5vcCwNCisJCQkJCSAgdm5vLT50 eXBlKTsNCisgIGlmICghcmVzdWx0KQ0KKyAgICByZXN1bHQgPSB2bl9uYXJ5X29wX2xvb2t1cF8x ICh2bm8sICZ2bnJlc3VsdCk7DQorICBpZiAoIXJlc3VsdCAmJiB2bnJlc3VsdCkNCiAgICAgcmVz dWx0ID0gdm5fbmFyeV9vcF9nZXRfcHJlZGljYXRlZF92YWx1ZSAodm5yZXN1bHQsIGdpbXBsZV9i YiAoc3RtdCkpOw0KICAgaWYgKHJlc3VsdCkNCiAgICAgcmV0dXJuIHNldF9zc2FfdmFsX3RvIChs aHMsIHJlc3VsdCk7DQpAQCAtNzE3MCwxMiArNzU4Nyw4IEBAIGluc2VydF9yZWxhdGVkX3ByZWRp Y2F0ZXNfb25fZWRnZSAoZW51bSB0cmVlX2NvZGUgY29kZSwgdHJlZSAqb3BzLCBlZGdlIHByZWRf ZSkNCiAJCQkJCSAgIG9wcywgYm9vbGVhbl9mYWxzZV9ub2RlLCAwLCBwcmVkX2UpOw0KICAgICAg IGJyZWFrOw0KICAgICBjYXNlIEVRX0VYUFI6DQotICAgICAgLyogYSA9PSBiIC0+ICEgYSB7PCw+ fSBiICovDQotICAgICAgdm5fbmFyeV9vcF9pbnNlcnRfcGllY2VzX3ByZWRpY2F0ZWQgKDIsIExU X0VYUFIsIGJvb2xlYW5fdHlwZV9ub2RlLA0KLQkJCQkJICAgb3BzLCBib29sZWFuX2ZhbHNlX25v ZGUsIDAsIHByZWRfZSk7DQotICAgICAgdm5fbmFyeV9vcF9pbnNlcnRfcGllY2VzX3ByZWRpY2F0 ZWQgKDIsIEdUX0VYUFIsIGJvb2xlYW5fdHlwZV9ub2RlLA0KLQkJCQkJICAgb3BzLCBib29sZWFu X2ZhbHNlX25vZGUsIDAsIHByZWRfZSk7DQotICAgICAgYnJlYWs7DQorICAgICAgLyogTm8gbmVl ZCB0byBpbnNlcnQgZGVyaXZlZCBwcmVkaWNhdGVzIGZvciAnPT0nLCBhcyB0aGV5IGNhbiBiZSBj b21wdXRlZA0KKwkgYnkgZXF1aXYtaGVhZHMgJiBmb2xkX2NvbnN0X2Zyb21fZXF1aXZfaGVhZHMu ICAqLw0KICAgICBjYXNlIExFX0VYUFI6DQogICAgIGNhc2UgR0VfRVhQUjoNCiAgICAgY2FzZSBO RV9FWFBSOg0KQEAgLTczNDIsMjQgKzc3NTUsMzEgQEAgcHJvY2Vzc19iYiAocnBvX2VsaW0gJmF2 YWlsLCBiYXNpY19ibG9jayBiYiwNCiAgICAgICBzd2l0Y2ggKGdpbXBsZV9jb2RlIChsYXN0KSkN CiAJew0KIAljYXNlIEdJTVBMRV9TV0lUQ0g6DQorCSAgLyogVE9ETzogdXRpbGl6ZSB0ZW1wb3Jh cnkgZXF1aXZhbGVuY2VzLiAgKi8NCiAJICBlID0gZmluZF90YWtlbl9lZGdlIChiYiwgdm5fdmFs dWVpemUgKGdpbXBsZV9zd2l0Y2hfaW5kZXgNCiAJCQkJCQkoYXNfYSA8Z3N3aXRjaCAqPiAobGFz dCkpKSk7DQogCSAgYnJlYWs7DQogCWNhc2UgR0lNUExFX0NPTkQ6DQogCSAgew0KLQkgICAgdHJl ZSBsaHMgPSB2bl92YWx1ZWl6ZSAoZ2ltcGxlX2NvbmRfbGhzIChsYXN0KSk7DQotCSAgICB0cmVl IHJocyA9IHZuX3ZhbHVlaXplIChnaW1wbGVfY29uZF9yaHMgKGxhc3QpKTsNCi0JICAgIHRyZWUg dmFsID0gZ2ltcGxlX3NpbXBsaWZ5IChnaW1wbGVfY29uZF9jb2RlIChsYXN0KSwNCi0JCQkJCWJv b2xlYW5fdHlwZV9ub2RlLCBsaHMsIHJocywNCi0JCQkJCU5VTEwsIHZuX3ZhbHVlaXplKTsNCisJ ICAgIHRyZWUgbGhzID0gbG9va3VwX2VxdWl2X2hlYWQgKGdpbXBsZV9jb25kX2xocyAobGFzdCks IGJiKTsNCisJICAgIHRyZWUgcmhzID0gbG9va3VwX2VxdWl2X2hlYWQgKGdpbXBsZV9jb25kX3Jo cyAobGFzdCksIGJiKTsNCisJICAgIHRyZWUgb3BzWzJdOw0KKwkgICAgb3BzWzBdID0gbGhzOw0K KwkgICAgb3BzWzFdID0gcmhzOw0KKwkgICAgdHJlZSB2YWwgPSBmb2xkX2NvbnN0X2Zyb21fZXF1 aXZfaGVhZHMgKDIsIGdpbXBsZV9jb25kX2NvZGUgKGxhc3QpLA0KKwkJCQkJCSAgICBvcHMsIGJv b2xlYW5fdHlwZV9ub2RlKTsNCisJICAgIGlmICh2YWwgJiYgKGR1bXBfZmxhZ3MgJiBUREZfREVU QUlMUykpDQorCSAgICAgIHsNCisJCWZwcmludGYgKGR1bXBfZmlsZSwgIkdvdCBzaW1wbGlmaWVk IHJlc3VsdCAiKTsNCisJCXByaW50X2dlbmVyaWNfZXhwciAoZHVtcF9maWxlLCB2YWwsIFRERl9O T05FKTsNCisJCWZwcmludGYgKGR1bXBfZmlsZSwgIiBmb3IgIik7DQorCQlwcmludF9naW1wbGVf c3RtdCAoZHVtcF9maWxlLCBsYXN0LCBUREZfU0xJTSk7DQorCSAgICAgIH0NCisJICAgIHZuX25h cnlfb3BfdCB2bnJlc3VsdCA9IE5VTEw7DQogCSAgICAvKiBJZiB0aGUgY29uZGl0aW9uIGRpZG4n dCBzaW1wbGZ5IHNlZSBpZiB3ZSBoYXZlIHJlY29yZGVkDQogCSAgICAgICBhbiBleHByZXNzaW9u IGZyb20gc29mYXIgdGFrZW4gZWRnZXMuICAqLw0KIAkgICAgaWYgKCEgdmFsIHx8IFRSRUVfQ09E RSAodmFsKSAhPSBJTlRFR0VSX0NTVCkNCiAJICAgICAgew0KLQkJdm5fbmFyeV9vcF90IHZucmVz dWx0Ow0KLQkJdHJlZSBvcHNbMl07DQotCQlvcHNbMF0gPSBsaHM7DQotCQlvcHNbMV0gPSByaHM7 DQogCQl2YWwgPSB2bl9uYXJ5X29wX2xvb2t1cF9waWVjZXMgKDIsIGdpbXBsZV9jb25kX2NvZGUg KGxhc3QpLA0KIAkJCQkJCWJvb2xlYW5fdHlwZV9ub2RlLCBvcHMsDQogCQkJCQkJJnZucmVzdWx0 KTsNCkBAIC03NDI3LDYgKzc4NDcsMTUgQEAgcHJvY2Vzc19iYiAocnBvX2VsaW0gJmF2YWlsLCBi YXNpY19ibG9jayBiYiwNCiAJCSAgICBpZiAoZmFsc2VfZSkNCiAJCSAgICAgIGluc2VydF9yZWxh dGVkX3ByZWRpY2F0ZXNfb25fZWRnZSAoaWNvZGUsIG9wcywgZmFsc2VfZSk7DQogCQkgIH0NCisN CisJCS8qIFRyeSB0byByZWNvcmQgZXF1aXZhbGVuY2VzIGdlbmVyYXRlZCBieSBwcmV2aW91cyBQ SEkgbm9kZXMNCisJCSAgICBvbiBjdXJyZW50IHRydWUgJiBmYWxzZSBlZGdlcy4gICovDQorCQlp ZiAodHJ1ZV9lKQ0KKwkJICByZWNvcmRfZXF1aXZfZnJvbV9wcmV2X3BoaSAodm5yZXN1bHQsIHRy dWVfZSwgYmIsIGNvZGUsIG9wcywNCisJCQkJCSAgICAgIGJvb2xlYW5fdHJ1ZV9ub2RlKTsNCisJ CWlmIChmYWxzZV9lKQ0KKwkJICByZWNvcmRfZXF1aXZfZnJvbV9wcmV2X3BoaSAodm5yZXN1bHQs IGZhbHNlX2UsIGJiLCBjb2RlLCBvcHMsDQorCQkJCQkgICAgICBib29sZWFuX2ZhbHNlX25vZGUp Ow0KIAkgICAgICB9DQogCSAgICBicmVhazsNCiAJICB9DQpAQCAtNzU0OSw2ICs3OTc4LDcgQEAg c3RydWN0IHVud2luZF9zdGF0ZQ0KICAgdm5fcGhpX3QgcGhpX3RvcDsNCiAgIHZuX25hcnlfb3Bf dCBuYXJ5X3RvcDsNCiAgIHZuX2F2YWlsICphdmFpbF90b3A7DQorICBuYXJ5X3JlZiAqbmFyeV9y ZWZfdG9wOw0KIH07DQogDQogLyogVW53aW5kIHRoZSBSUE8gVk4gc3RhdGUgZm9yIGl0ZXJhdGlv bi4gICovDQpAQCAtNzU5OCw2ICs4MDI4LDE3IEBAIGRvX3Vud2luZCAodW53aW5kX3N0YXRlICp0 bywgcnBvX2VsaW0gJmF2YWlsKQ0KICAgICAgIGF2LT5uZXh0ID0gYXZhaWwubV9hdmFpbF9mcmVl bGlzdDsNCiAgICAgICBhdmFpbC5tX2F2YWlsX2ZyZWVsaXN0ID0gYXY7DQogICAgIH0NCisgIC8q IERyYWluIG5hcnlfcmVmcyB0byBmcmVlbGlzdCwgdG8gcmV1c2UgdGhlIG1lbW9yeS4gICovDQor ICBmb3IgKDsgbGFzdF9wdXNoZWRfbmFyeV9yZWYgJiYgbGFzdF9wdXNoZWRfbmFyeV9yZWYtPnJl ZiAhPSB0by0+bmFyeV9yZWZfdG9wOykNCisgICAgew0KKyAgICAgIHZuX3NzYV9hdXhfdCB2YWwg PSBsYXN0X3B1c2hlZF9uYXJ5X3JlZjsNCisgICAgICBuYXJ5X3JlZiAqcmVmID0gdmFsLT5yZWY7 DQorICAgICAgdmFsLT5yZWYgPSByZWYtPm5leHQ7DQorICAgICAgbGFzdF9wdXNoZWRfbmFyeV9y ZWYgPSByZWYtPm5leHRfdW5kbzsNCisgICAgICByZWYtPm5leHQgPSBuYXJ5X3JlZl9mcmVlbGlz dDsNCisgICAgICBuYXJ5X3JlZl9mcmVlbGlzdCA9IHJlZjsNCisgICAgICAtLXZhbC0+bnVtX25h cnlfcmVmOw0KKyAgICB9DQogfQ0KIA0KIC8qIERvIFZOIG9uIGEgU0VNRSByZWdpb24gc3BlY2lm aWVkIGJ5IEVOVFJZIGFuZCBFWElUX0JCUyBpbiBGTi4NCkBAIC03NzExLDYgKzgxNTIsOCBAQCBk b19ycG9fdm4gKGZ1bmN0aW9uICpmbiwgZWRnZSBlbnRyeSwgYml0bWFwIGV4aXRfYmJzLA0KICAg bGFzdF9pbnNlcnRlZF9waGkgPSBOVUxMOw0KICAgbGFzdF9pbnNlcnRlZF9uYXJ5ID0gTlVMTDsN CiAgIGxhc3RfcHVzaGVkX2F2YWlsID0gTlVMTDsNCisgIGxhc3RfcHVzaGVkX25hcnlfcmVmID0g TlVMTDsNCisgIG5hcnlfcmVmX2ZyZWVsaXN0ID0gTlVMTDsNCiANCiAgIHZuX3ZhbHVlaXplID0g cnBvX3ZuX3ZhbHVlaXplOw0KIA0KQEAgLTc4MDUsNiArODI0OCw4IEBAIGRvX3Jwb192biAoZnVu Y3Rpb24gKmZuLCBlZGdlIGVudHJ5LCBiaXRtYXAgZXhpdF9iYnMsDQogCSAgICBycG9fc3RhdGVb aWR4XS5uYXJ5X3RvcCA9IGxhc3RfaW5zZXJ0ZWRfbmFyeTsNCiAJICAgIHJwb19zdGF0ZVtpZHhd LmF2YWlsX3RvcA0KIAkgICAgICA9IGxhc3RfcHVzaGVkX2F2YWlsID8gbGFzdF9wdXNoZWRfYXZh aWwtPmF2YWlsIDogTlVMTDsNCisJICAgIHJwb19zdGF0ZVtpZHhdLm5hcnlfcmVmX3RvcA0KKwkg ICAgICA9IGxhc3RfcHVzaGVkX25hcnlfcmVmID8gbGFzdF9wdXNoZWRfbmFyeV9yZWYtPnJlZiA6 IE5VTEw7DQogCSAgfQ0KIA0KIAlpZiAoIShiYi0+ZmxhZ3MgJiBCQl9FWEVDVVRBQkxFKSkNCmRp ZmYgLS1naXQgYS9nY2MvdHJlZS1zc2Etc2Njdm4uaCBiL2djYy90cmVlLXNzYS1zY2N2bi5oDQpp bmRleCA4YTFiNjQ5YzcyNi4uNjUyNDBjOWJmMjUgMTAwNjQ0DQotLS0gYS9nY2MvdHJlZS1zc2Et c2Njdm4uaA0KKysrIGIvZ2NjL3RyZWUtc3NhLXNjY3ZuLmgNCkBAIC0yMTcsNiArMjE3LDE2IEBA IHN0cnVjdCB2bl9hdmFpbA0KICAgc3RydWN0IHZuX3NzYV9hdXggKm5leHRfdW5kbzsNCiB9Ow0K IA0KKy8qIEluIHZuX3NzYV9hdXggc3RydWN0dXJlLCBob2xkIGEgbGlzdHMgb2YgcmVmZXJlbmNl cyB0byB0aGUgbmFyeSBtYXAgZW50cmllcywNCisgICBzbyB0aGF0IHdoZW4gcmVjb3JkaW5nIG5l dyBlcXVpdmFsZW5jZSB0byB0aGUgdmFsdWUgbnVtYmVyLCB3ZSBjYW4gcmUtaW5zZXJ0DQorICAg ZXhwcmVzc2lvbnMnIHJlc3VsdHMgYmFzZWQgb24gdGhpcy4gICovDQorc3RydWN0IG5hcnlfcmVm DQorew0KKyAgbmFyeV9yZWYgKm5leHQ7DQorICB2bl9uYXJ5X29wX3Qgc2xvdDsNCisgIHN0cnVj dCB2bl9zc2FfYXV4ICpuZXh0X3VuZG87DQorfTsNCisNCiB0eXBlZGVmIHN0cnVjdCB2bl9zc2Ff YXV4DQogew0KICAgLyogU1NBIG5hbWUgdGhpcyB2bl9zc2FfYXV4IGlzIGFzc29jaWF0ZWQgd2l0 aCBpbiB0aGUgbGF0dGljZS4gICovDQpAQCAtMjMwLDkgKzI0MCwxNSBAQCB0eXBlZGVmIHN0cnVj dCB2bl9zc2FfYXV4DQogICAgICBmb3IgU1NBIG5hbWVzIGFsc28gc2VydmluZyBhcyB2YWx1ZXMg KE5BTUUgPT0gVkFMTlVNKS4gICovDQogICB2bl9hdmFpbCAqYXZhaWw7DQogDQorICAvKiBSZWZl cmVuY2VzIHRvIHNsb3RzIGluIHRoZSBuYXJ5IG1hcCwgd2l0aCBWQUxOVU0gYXMgb3BlcmFuZC4g ICovDQorICBuYXJ5X3JlZiAqcmVmOw0KKw0KICAgLyogVW5pcXVlIGlkZW50aWZpZXIgdGhhdCBh bGwgZXhwcmVzc2lvbnMgd2l0aCB0aGUgc2FtZSB2YWx1ZSBoYXZlLiAqLw0KICAgdW5zaWduZWQg aW50IHZhbHVlX2lkOw0KIA0KKyAgLyogbmFyeV9yZWYgY291bnQuICAqLw0KKyAgdW5zaWduZWQg c2hvcnQgbnVtX25hcnlfcmVmOw0KKw0KICAgLyogV2hldGhlciB0aGUgU1NBX05BTUUgaGFzIGJl ZW4gcHJvY2Vzc2VkIGF0IGxlYXN0IG9uY2UuICAqLw0KICAgdW5zaWduZWQgdmlzaXRlZCA6IDE7 DQogDQo= --_002_SN6PR01MB4240F1B812D1C86CADA0EC37E8829SN6PR01MB4240prod_--