From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM12-BN8-obe.outbound.protection.outlook.com (mail-bn8nam12on2112.outbound.protection.outlook.com [40.107.237.112]) by sourceware.org (Postfix) with ESMTPS id 0C3FA3858405 for ; Mon, 15 Nov 2021 17:24:21 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 0C3FA3858405 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=WL3Hu1O5JruIU5xFfD3/dUxgA88Wc0etB9ZQo412voq49YclItLFvTMf0OGhG/SylJ46M+PqORVrC9UoeonEI8Yy0wHAVgZezhT/L7Ulf2hf2xFufxlSNbp7YrOo/7OS3WIyO9NCkMxsrtJLdKH0tCL4e8nMj/gBwDvHE9b/nESfNRlxdYSXfu88KQasTK4xoRcUPCarmK0WmkbZLTByHxh3yiAjy5QY1A28vX9KN7tsnlekiF+p02hzkkoqFRqqDUm3yaO62dB+nIUkWTVCuQrNp+Vhne+XGnbl0GdSI+3hHQeV/KhWhA1XMTYfBblGwpDF4IPqETUAdujfJWzOgA== 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=OI0QOlK8MsiEIbEeiGh8J7nD6P/A/aH9PbK29eXd9pc=; b=jjnuOqYFnLSVHB5jfpf/w0bUAO59NXop6ySH62MP21BwjDB5HJ5zAF/XTLqWo4BoFkAEVCbwNk9mPz6Qdogna2krq5OsleLxIAQ3yR59mJxMKr0IhVxihBLmp9YHX7rtuvl23kkMLGaQ4ttA56nSvr1iyGFBG9/M5LXDNzkoI94IFAu7ht0mA3uy++/xC5HAZ/Z69w/JV+pt7nf8hpmylGAQTlQXw6cFiaO+RypSfOmmnlB+Odj0WtGBZiADWKYHG2DiVwir1omkXm/Np2zy1oRyHaE1HtoFx48mPoftjy77y1py3t9ygn1A7C2q+Jb8OxZ4IdhNtUitqjzlKrNbyw== 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 SA0PR01MB6187.prod.exchangelabs.com (2603:10b6:806:ed::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4690.26; Mon, 15 Nov 2021 17:24:17 +0000 Received: from SN6PR01MB4240.prod.exchangelabs.com ([fe80::991:c74:79a6:bb62]) by SN6PR01MB4240.prod.exchangelabs.com ([fe80::991:c74:79a6:bb62%7]) with mapi id 15.20.4690.027; Mon, 15 Nov 2021 17:24: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+jZTicjjVEiwLoytWABI5GjDADRokPAAD1pIvg Date: Mon, 15 Nov 2021 17:24: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: ac5fc219-eae2-40d1-5a9e-08d9a85cc0b3 x-ms-traffictypediagnostic: SA0PR01MB6187: 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: NYWdDN9XXKQ29LD/bTQmWZuX9o8x6/aXQcMhZNwI8FsWnQtDe40oK2NAwKPbpk1dHcmjDw02XSs33mmeQwCJKQD4nsj1yAynSobfYNfKqGaYVylSq1KHenIh2N/4obUyWbk/exPDjZHE8TwWBYfJveFJ3x0ivq51Qlava9HDJw6oPGjZUTlNo9TMpGwL3nk2obbVIR2RnzZdUraWalrQ+9VyR2amGiRodlBf7YiuDXmpvwkCXNY0L0vpdg/XtPimthdExmDOUKEFoAOEsQBP6rZun2c6II/LVYhfXJCfLcD7pEsofx0FWkMH53N5+d2bY/gy4n9j54GtCj5P0Engdgu+IAsf5/yreTGPYOodu50dQ1syj5KcNA8CgUOrxpl2EpwvIqoJRXdMbJM4FQErmdw0ClcbD5d7g4LfSEawjqsTvyJOnQ37SNTw066a/xhC3LlbMtr0gdvWwHtlbDMdnka9jpj+AXJpM/qOpkGZNTMCGc5/z98JWSCzylf0r6m0KOjIthegH4fj+KGOyRgjm84CGT1wcG7k4CU4xcum9ZEk7aV4EV+VL41c0M0UK1DCGzzO89ldp138k/BLd8sCrUynaxTecHvLkZWh5M7z0u/kcr7TnDqfydpqdA8YMHnpzi0uRuM5CsY/hBJuFsF0qLU7SLt7HOfoBBZ1wfsv62c6WXBEkKLlBZWGXewmpCjNAf0azIYxYV5N54l6tjP5wadp5R3KP0BASJyyxjUgVy/LMws/4CER0DXP2HPP+ksp8nYvOxBODnAmVIMXWl9Y949D7TXgUiEVdjxCaIkI6t8= 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)(186003)(8936002)(26005)(55016002)(66556008)(64756008)(66476007)(66946007)(4001150100001)(76116006)(2906002)(99936003)(30864003)(66446008)(316002)(33656002)(9686003)(508600001)(8676002)(7696005)(38070700005)(4326008)(53546011)(6506007)(52536014)(5660300002)(38100700002)(71200400001)(122000001)(86362001)(6916009)(83380400001); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?Z1pDcndlZWw0V0dmR29rZEtzRTkvTDRETW5IUUxxSUYxQVF4UlJRbzd5MjN3?= =?utf-8?B?NHd3RzUvNGJYQWJGR21NWUUrN3dXUVM4MjYwcHR0MWJtU1gvUWE4U1FqcVVr?= =?utf-8?B?cGI3bXJxN2I1WWNBUEU3cHRvSjBZSG9VVDNtbTljVUJqWE43S0dHUk16VHdz?= =?utf-8?B?RjByUE16Y01NNTVQTlFRTmRCQmRRaHdxVXFyODltSmlCemJhOGlqcXNUZUtz?= =?utf-8?B?dERCVE9pT1RUcU5Rb2hRZWhtMThkMVFwYlFFYXFTakxCODZPWk5WcXdJUVZj?= =?utf-8?B?T2x3eFlycGNyeUgybWs5QzRNWi9KaHJsNjhXQXpKZlp6ek0yZUtXcnV2Tk9X?= =?utf-8?B?S3hGdUxYZzFQdktxOWQxejVNWE5EYXV3cnFDVGRYTHR2ZFJZNGhGZU44cWQw?= =?utf-8?B?TkhEYzRzcWtjYzUxRDJydEpheHhCbC93M3V0REV4Wm5HdG9GRVJNTUxUNmM1?= =?utf-8?B?eWlGV1ZxeDFwVzdsZ3UyMEhkcWdCbUZRMm85Y2tWWTlPbUZNR3ZLaml4TXBn?= =?utf-8?B?TDlKTHJjS1JQbVVUejZVVy9wMkZYcXhJaE85WmFUb2liM0xNUE9vdEVrWGVj?= =?utf-8?B?enE1c0dRYkFiSlp6UEk3bWEwaldsOHFWY1Yxc3V2Q2dqREJzSGRyYVlwNHFH?= =?utf-8?B?dFRudEQ2RXZkNmJBNDBqa3ZiNU00T3R5cXV4Y3phWmVYNmVtMVMxaWlSR0xj?= =?utf-8?B?aUdkMnk5eWFOZElCQXhnWEhPRHZvN0ZuWkppc3E4Z2dMMVhBZGVOTCs3VHRm?= =?utf-8?B?TkZURWtEMjU0ZzZnNDZVTGordFgrdmlER0NLMWVSeXlYbFllUE1kN0lpOG5v?= =?utf-8?B?Y1NVamp2RzJIcHRjSGZ6c1dVT2lnUk05M2F4R0VHcWxKWEp1RWEzbWN1MW5N?= =?utf-8?B?TGpqZUV4ZHhITFFwbUd1QWNibDIrZW1JaVl4Y2tmMXpuQ2tjKzFqTG1rYUNN?= =?utf-8?B?ck5mUDB6Q3pVbnNrQmsyLzRjSzZoRHRRdVBEdzVBNUVpcnNiOVFOL2dvOXBk?= =?utf-8?B?VjZkall2Um01bnc4S1VncEwwTkVMZWU0S0RhZ2lvMmdEa1czd20ybkFPMlZ6?= =?utf-8?B?enAyZEpUL2plY3pJa3MzN1ZWeVM1RStkKzdVeU9YM3NVMFJDY3k5TlFYcDFm?= =?utf-8?B?R0h5eDBOR2JkcDFCellMaXFBTjc4NGxZTkJjNGJoYStEcFFRL0JublpzRDlU?= =?utf-8?B?U2FPdEhZcjhqRE0xNUVkTWsvY3U1VUdWTm9HK2tDMEdpYU0wU29vRUNnd3pS?= =?utf-8?B?aHdMSENHL3RpbUxaaUxlenQzbTlZZ3FmL1kvMTErUTkyVU1BbWJaQmRxTU1m?= =?utf-8?B?bHVTYnlWa0ZkODZDSkhvaW96VlhPek9mR1dTdHV4VnRaUVVxbkI4anAwOGxT?= =?utf-8?B?d1FYOVZDNzlzZnkzTEZOSkdkZ0JXQmY0VXlzSGZHdTkrWG56QjAvd1dXeGpO?= =?utf-8?B?a25RYmZMMjRFNjIxQ1M3Q1ZTREtwQmVsbFIydTRzZnpIV3BvUHdqRGtSSlVY?= =?utf-8?B?emNnaFVHaVptdFBkN2VrNS8wYzdhK3FOdndHQXFiazNYTWpIYWFSZ1FLTkdV?= =?utf-8?B?UFVqenNvY01LL3RDVDFELzhLQWMwMGVkQ29Pa01BN1N2S1J6Z01VbzVjVkF6?= =?utf-8?B?RVc4eXduQVpodS9MWUw5by9yUDFrMHg3QmVvUXdpdmF4NEdFMkNpZnc2dzBq?= =?utf-8?B?cndMbFRFSm83ZE5kTUxqcUhJUmpkaTZCd2ExUi9DZHdOZnBwTkp6dUpva0kv?= =?utf-8?B?OGU1Qm1KK2ZXaDZpOGRJeHdLMVdyTnBiVXlGMWxHWUdzMENqd2x2KzEwdEpD?= =?utf-8?B?dmxtRkJGak8vQUthLzBOS3dNWHowNXlFTWY4UWJad3cwQzJxbFJyd1cvczZL?= =?utf-8?B?NGtCZWtiTktwYUdYV1lBV2pLM2dqQUtZRlBMWGEySzFlWDNESml2NUhnVFR1?= =?utf-8?B?NVMxdmoxckc5THZaakFEYkpTaW11Z2cyK2tMSkNNYmtGUlQ0aTJSTXkzZGNZ?= =?utf-8?B?R25mR0ovYkFZeVdCS3doeW5qZ3JvY0hmVnFTNXpiNHFDM2pBNmR4VkI5OEdF?= =?utf-8?B?djVZWG0zZ0llQkxCSkVMTUQ0WTMya2dOcFZ3cUFDc3krUFZZazFLM005ZlVq?= =?utf-8?B?eURTNUY3NXdxNFl5SDdRNTBad0FzZlZxTzBDeHFZM0xLRkN4dW5ZSkJCY3Jx?= =?utf-8?B?ZklEdXVkazdUSGpNeS9pR3JzZDF6R3o3K3NMV01OTjZlaXFVNmM3OVVuekdr?= =?utf-8?B?a0RNS0F3OGw4am5ZcW1RWUlwL1hKOXVDMXk4dEpKakMvd0lqTnVMK0VnZ29E?= =?utf-8?Q?vWWpPgVjYtv3f5xm83?= Content-Type: multipart/mixed; boundary="_002_SN6PR01MB4240775EAA800E6C8BB02B69E8989SN6PR01MB4240prod_" 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: ac5fc219-eae2-40d1-5a9e-08d9a85cc0b3 X-MS-Exchange-CrossTenant-originalarrivaltime: 15 Nov 2021 17:24:17.1124 (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: omXWfsKF804FaprVY/NaGfWHt2x+nCCwKwRnHgfFmAhlsBQlUiOtycBKmKEAfqGOfE/RoCB6ya2iJwkqRYu/RM2fhcwcbgYZc1UtC6zr92zpbChDt5kNczqaI8RqG6Od X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA0PR01MB6187 X-Spam-Status: No, score=-2.2 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: Mon, 15 Nov 2021 17:24:24 -0000 --_002_SN6PR01MB4240775EAA800E6C8BB02B69E8989SN6PR01MB4240prod_ Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 QXR0YWNoZWQgaXMgdGhlIHVwZGF0ZWQgcGF0Y2guIEZpeGVkIHNvbWUgZXJyb3JzIGluIHRlc3Rj YXNlcy4NCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBSaWNoYXJkIEJp ZW5lciA8cmljaGFyZC5ndWVudGhlckBnbWFpbC5jb20+DQo+IFNlbnQ6IFdlZG5lc2RheSwgTm92 ZW1iZXIgMTAsIDIwMjEgNTo0NCBQTQ0KPiBUbzogRGkgWmhhbyBPUyA8ZGl6aGFvQG9zLmFtcGVy ZWNvbXB1dGluZy5jb20+DQo+IENjOiBnY2MtcGF0Y2hlc0BnY2MuZ251Lm9yZzsgQW5kcmV3IE1h Y0xlb2QgPGFtYWNsZW9kQHJlZGhhdC5jb20+DQo+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggdjJdIHRy ZWUtb3B0aW1pemF0aW9uLzEwMTE4NiAtIGV4dGVuZCBGUkUgd2l0aA0KPiAiZXF1aXZhbGVuY2Ug bWFwIiBmb3IgY29uZGl0aW9uIHByZWRpY3Rpb24NCj4gDQo+IE9uIFN1biwgT2N0IDI0LCAyMDIx IGF0IDk6MDMgUE0gRGkgWmhhbyBPUw0KPiA8ZGl6aGFvQG9zLmFtcGVyZWNvbXB1dGluZy5jb20+ IHdyb3RlOg0KPiA+DQo+ID4gSGksDQo+ID4NCj4gPiBBdHRhY2hlZCBpcyBhIG5ldyB2ZXJzaW9u IG9mIHRoZSBwYXRjaCwgbWFpbmx5IGZvciBpbXByb3ZpbmcgcGVyZm9ybWFuY2UNCj4gPiBhbmQg c2ltcGxpZnlpbmcgdGhlIGNvZGUuDQo+IA0KPiBUaGUgcGF0Y2ggZG9lc24ndCBhcHBseSBhbnlt b3JlLCBjYW4geW91IHVwZGF0ZSBpdCBwbGVhc2U/DQo+IA0KPiBJIHNlZSB0aGUgbmV3IHNzYS1m cmUtMTAxLmMgdGVzdCBhbHJlYWR5IHBhc3Npbmcgd2l0aG91dCB0aGUgcGF0Y2guDQoNCkl0IHdh cyBhIG1pc3Rha2UgaW4gdGVzdCBzc2EtZnJlLTEwMS5jOjpnIHRvIGRlZmluZSB0aGUgdmFyaWFi bGVzIHdpdGgNCnRoZSB1bnNpZ25lZCBpbnRlZ2VycywgaW4gdGhpcyB3YXkgImEgPj0gMCIgaXMg YWx3YXlzIHRydWUuIEFmdGVyIG1vZGlmaWVkDQp0aGUgY2FzZSwgbm93IGZyZTEgaW4gdGhlIHBh dGNoIGNhbiByZW1vdmUgdW5yZWFjaGFibGUgY2FsbCAiZm9vICgpIiwgYW5kDQpldnJwIG9uIHRy dW5rIGRvZXMgbm90Lg0KDQo+IExpa2V3aXNlIHNzYS1mcmUtMTAwLmMgYW5kIHNzYS1mcmUtMTAy LmMgd291bGQgUEFTUyBpZiB5b3Ugc2Nhbg0KPiB0aGUgcGFzcyBkdW1wIGFmdGVyIGZyZTEgd2hp Y2ggaXMgZXZycCBzbyBpdCBzZWVtcyB0aGF0IGV2cnAgYWxyZWFkeQ0KPiBoYW5kbGVzIHRoZSBl cXVpdmFsZW5jZXMgKGxpa2VseSB3aXRoIHRoZSByZWxhdGlvbiBvcmFjbGUpIG5vdz8NCj4gSSdt IHN1cmUgdGhlcmUgYXJlIHNlY29uZCBvcmRlciBlZmZlY3RzIHdoZW4gZWxpbWluYXRpbmcgY29u ZGl0aW9ucw0KPiBpbiBGUkUgYnV0IGRpZCB5b3UgcmUtZXZhbHVhdGUgd2hhdCBtYWRlIHlvdSBp bXByb3ZlIFZOIHRvIHNlZQ0KPiBpZiB0aGUgY2FzZXMgYXJlIGhhbmRsZWQgYXMgZXhwZWN0ZWQg bm93IHdpdGhvdXQgdGhpcyBjaGFuZ2U/DQoNCkluIGNhc2Ugc3NhLWZyZS0xMDIuYywgdGhlIHVu cmVhY2hhYmxlIGNhbGwgImZvbyAoKSIgY2FuIGJlIHJlbW92ZWQgYnkNCmV2cnAsIGJ1dCBmcmUg aW4gdGhlIHBhdGNoIGNhbiBhZGRpdGlvbmFsbHkgcmVwbGFjZSAiZyA9IHggKyBiIiB3aXRoDQoi ZyA9IDk5Ii4gKEFnYWluIEknbSBzb3JyeSB0aGUgcmVnZXggdG8gY2hlY2sgdGhpcyB3YXMgd3Jv bmcuLikNCg0KVGVzdCBjYXNlcyB0byBzaW11bGF0ZSB0aGUgb3JpZ2luYWwgcHJvYmxlbSBJIGZv dW5kIGFyZSBtb3ZlZCBpbnRvDQpnY2MuZGcvdHJlZS1zc2Evc3NhLXByZS0zNC5jLiBUaGUgdW5y ZWFjaGFibGUgY2FsbHMgdG8gImZvbyAoKSIgYXJlDQpzdGlsbCByZW1vdmVkIGJ5IHByZSB3aXRo IHRoZSBwYXRjaC4gKElmIGNvbXBpbGVkIHdpdGggLU8zLCB0aGUNCiJmb28gKCkicyBpbiB0ZXN0 IGZpbGUgY2FuIG5vdyBiZSByZW1vdmVkIGJ5IHRocmVhZDIvdGhyZWFkZnVsbDIgYW5kDQpkb20z IG9uIHRydW5rLiBUaGlzIHJlbGllcyBvbiBqdW1wIHRocmVhZGluZyBhY3Jvc3MgdGhlIGxvb3Bz LCBzbw0KZXZlbiB3aXRoIC1PMywgc2ltaWxhciBjYXNlcyBtYXkgbm90IGdldCBvcHRpbWl6ZWQg c2F5IGlmIHRoZXJlJ3JlDQp0b28gbWFueSBzdGF0ZW1lbnRzIHRvIGNvcHkuKQ0KDQpUaGFua3Ms DQpEaSBaaGFvDQoNCj4gDQo+IEkgd2lsbCBzdGlsbCBsb29rIGF0IGFuZCBjb25zaWRlciB0aGUg Y2hhbmdlIGJ0dywgYnV0IGdpdmVuIHRoZSBFVlJQDQo+IGltcHJvdmVtZW50cyBJJ20gYWxzbyBj b25zaWRlcmluZyB0byByZW1vdmUgdGhlIHByZWRpY2F0aW9uDQo+IHN1cHBvcnQgZnJvbSBWTiBh bGx0b2dldGhlci4gIEF0IGxlYXN0IGluIHRoZSBub24taXRlcmF0aW5nIG1vZGUNCj4gaXQgc2hv dWxkIGJlIHRyaXZpYWxseSBlYXN5IHRvIHVzZSByYW5nZXJzIHJlbGF0aW9uIG9yYWNsZSB0byBz aW1wbGlmeQ0KPiBwcmVkaWNhdGVzLiAgRm9yIHRoZSBpdGVyYXRpbmcgbW9kZSBpdCBtaWdodCBu b3QgYmUgMTAwJSBlZmZlY3RpdmUNCj4gc2luY2UgSSdtIG5vdCBzdXJlIHdlIGNhbiBtYWtlIGl0 IHVzZSB0aGUgY3VycmVudCBTU0EgdmFsdWVzIGFuZA0KPiBob3cgaXQgd291bGQgYmVoYXZlIHdp dGggdGhvc2UgZXZlbnR1YWxseSBjaGFuZ2luZyB0byB3b3JzZS4NCj4gDQo+IEFuZHJldywgaG93 IHdvdWxkIG9uZSBhc2sgdGhlIHJlbGF0aW9uIG9yYWNsZSB0byBzaW1wbGlmeSBhDQo+IGNvbmRp dGlvbj8gIERvIEkgaGF2ZSB0byBkbyBhbnkgYm9va2tlZXBpbmcgdG8gcmVnaXN0ZXINCj4gcHJl ZGljYXRlcyBvbiBlZGdlcyBmb3IgaXQ/DQo+IA0KPiBUaGFua3MsDQo+IFJpY2hhcmQuDQo+IA0K PiA+IEZpcnN0LCByZWdhcmRpbmcgdGhlIGNvbW1lbnRzOg0KPiA+DQo+ID4gPiAtLS0tLU9yaWdp bmFsIE1lc3NhZ2UtLS0tLQ0KPiA+ID4gRnJvbTogUmljaGFyZCBCaWVuZXIgPHJpY2hhcmQuZ3Vl bnRoZXJAZ21haWwuY29tPg0KPiA+ID4gU2VudDogRnJpZGF5LCBPY3RvYmVyIDEsIDIwMjEgOTow MCBQTQ0KPiA+ID4gVG86IERpIFpoYW8gT1MgPGRpemhhb0Bvcy5hbXBlcmVjb21wdXRpbmcuY29t Pg0KPiA+ID4gQ2M6IGdjYy1wYXRjaGVzQGdjYy5nbnUub3JnDQo+ID4gPiBTdWJqZWN0OiBSZTog W1BBVENIIHYyXSB0cmVlLW9wdGltaXphdGlvbi8xMDExODYgLSBleHRlbmQgRlJFIHdpdGgNCj4g PiA+ICJlcXVpdmFsZW5jZSBtYXAiIGZvciBjb25kaXRpb24gcHJlZGljdGlvbg0KPiA+ID4NCj4g PiA+IE9uIFRodSwgU2VwIDE2LCAyMDIxIGF0IDg6MTMgUE0gRGkgWmhhbyBPUw0KPiA+ID4gPGRp emhhb0Bvcy5hbXBlcmVjb21wdXRpbmcuY29tPiB3cm90ZToNCj4gPiA+ID4NCj4gPiA+ID4gU29y cnkgYWJvdXQgdXBkYXRpbmcgb24gdGhpcyBhZnRlciBzbyBsb25nLiBJdCB0b29rIG1lIG11Y2gg dGltZSB0byB3b3JrIG91dCBhDQo+ID4gPiA+IG5ldyBwbGFuIGFuZCBwYXNzIHRoZSB0ZXN0cy4N Cj4gPiA+ID4NCj4gPiA+ID4gVGhlIG5ldyBpZGVhIGlzIHRvIHVzZSBvbmUgdmFyaWFibGUgdG8g cmVwcmVzZW50IGEgc2V0IG9mIGVxdWFsIHZhcmlhYmxlcyBhdA0KPiA+ID4gPiBzb21lIGJhc2lj LWJsb2NrLiBUaGlzIHZhcmlhYmxlIGlzIGNhbGxlZCBhICJlcXVpdmFsZW5jZSBoZWFkIiBvciAi ZXF1aXYtaGVhZCINCj4gPiA+ID4gaW4gdGhlIGNvZGUuIChUaGVyZSdzIG5vLWxvbmdlciBhICJl cXVpdmFsZW5jZSBtYXAiLikNCj4gPiA+ID4NCj4gPiA+ID4gLSBJbml0aWFsbHkgYW4gU1NBX05B TUUncyAiZXF1aXZhbGVuY2UgaGVhZCIgaXMgaXRzIHZhbHVlIG51bWJlci4gVGVtcG9yYXJ5DQo+ ID4gPiA+ICAgZXF1aXZhbGVuY2UgaGVhZHMgYXJlIHJlY29yZGVkIGFzIHVuYXJ5IE5PUF9FWFBS IHJlc3VsdHMgaW4gdGhlIHZuX25hcnlfb3BfdA0KPiA+ID4gPiAgIG1hcC4gQmVzaWRlcywgd2hl biBpbnNlcnRpbmcgaW50byB2bl9uYXJ5X29wX3QgbWFwLCBtYWtlIHRoZSBuZXcgcmVzdWx0IGF0 DQo+ID4gPiA+ICAgZnJvbnQgb2YgdGhlIHZuX3B2YWwgbGlzdCwgc28gdGhhdCB3aGVuIHNlYXJj aGluZyBmb3IgYSB2YXJpYWJsZSdzDQo+ID4gPiA+ICAgZXF1aXZhbGVuY2UgaGVhZCwgdGhlIGZp cnN0IHJlc3VsdCByZXByZXNlbnRzIHRoZSBsYXJnZXN0IGVxdWl2YWxlbmNlIHNldCBhdA0KPiA+ ID4gPiAgIGN1cnJlbnQgbG9jYXRpb24uDQo+ID4gPiA+IC0gSW4gdm5fc3NhX2F1eF90LCBtYWlu dGFpbiBhIGxpc3Qgb2YgcmVmZXJlbmNlcyB0byB2YWxpZF9pbmZvLT5uYXJ5IGVudHJ5Lg0KPiA+ ID4gPiAgIEZvciByZWNvcmRlZCBlcXVpdmFsZW5jZXMsIHRoZSByZWZlcmVuY2UgaXMgcmVzdWx0 LT5lbnRyeTsgZm9yIG5vcm1hbCBOLWFyeQ0KPiA+ID4gPiAgIG9wZXJhdGlvbnMsIHRoZSByZWZl cmVuY2UgaXMgb3BlcmFuZC0+ZW50cnkuDQo+ID4gPiA+IC0gV2hlbiByZWNvcmRpbmcgZXF1aXZh bGVuY2VzLCBpZiBvbmUgc2lkZSBBIGlzIGNvbnN0YW50IG9yIGhhcyBtb3JlIHJlZnMsIG1ha2UN Cj4gPiA+ID4gICBpdCB0aGUgbmV3IGVxdWl2YWxlbmNlIGhlYWQgb2YgdGhlIG90aGVyIHNpZGUg Qi4gVHJhdmVyc2UgQidzIHJlZi1saXN0LGlmIGENCj4gPiA+ID4gICB2YXJpYWJsZSBDJ3MgcHJl dmlvdXMgZXF1aXYtaGVhZCBpcyBCLCB1cGRhdGUgdG8gQS4gQW5kIHJlLWluc2VydCBCJ3Mgbi1h cnkNCj4gPiA+ID4gICBvcGVyYXRpb25zIGJ5IHJlcGxhY2luZyBCIHdpdGggQS4NCj4gPiA+ID4g LSBXaGVuIGluc2VydGluZyBhbmQgbG9va2luZyBmb3IgdGhlIHJlc3VsdHMgb2Ygbi1hcnkgb3Bl cmF0aW9ucywgaW5zZXJ0IGFuZA0KPiA+ID4gPiAgIGxvb2t1cCBieSB0aGUgb3BlcmFuZHMnIGVx dWl2LWhlYWRzLg0KPiA+ID4gPiAuLi4NCj4gPiA+ID4NCj4gPiA+ID4gVGhhbmtzLA0KPiA+ID4g PiBEaSBaaGFvDQo+ID4gPiA+DQo+ID4gPiA+IC0tLS0tLS0tDQo+ID4gPiA+IEV4dGVuZCBGUkUg d2l0aCB0ZW1wb3JhcnkgZXF1aXZhbGVuY2VzLg0KPiA+ID4NCj4gPiA+IENvbW1lbnRzIG9uIHRo ZSBwYXRjaDoNCj4gPiA+DQo+ID4gPiArICAvKiBuYXJ5X3JlZiBjb3VudC4gICovDQo+ID4gPiAr ICB1bnNpZ25lZCBudW1fbmFyeV9yZWY7DQo+ID4gPiArDQo+ID4gPg0KPiA+ID4gSSB0aGluayBh IHVuc2lnbmVkIHNob3J0IHNob3VsZCBiZSBlbm91Z2ggYW5kIHRoYXQgd291bGQgbmljZWx5DQo+ ID4gPiBwYWNrIGFmdGVyIHZhbHVlX2lkIHRvZ2V0aGVyIHdpdGggdGhlIGJpdGZpZWxkIChtYXli ZSBjaGFuZ2UgdGhhdA0KPiA+ID4gdG8gdW5zaWduZWQgc2hvcnQgOjEgdGhlbikuDQo+ID4NCj4g PiBDaGFuZ2VkIG51bV9uYXJ5X3JlZiB0byB1bnNpZ25lZCBzaG9ydCBhbmQgbW92ZWQgYWZ0ZXIg dmFsdWVfaWQuDQo+ID4NCj4gPiA+IEBAIC03MzA3LDE3ICs3ODM5LDIzIEBAIHByb2Nlc3NfYmIg KHJwb19lbGltICZhdmFpbCwgYmFzaWNfYmxvY2sgYmIsDQo+ID4gPiAgICAgICAgICAgICB0cmVl IHZhbCA9IGdpbXBsZV9zaW1wbGlmeSAoZ2ltcGxlX2NvbmRfY29kZSAobGFzdCksDQo+ID4gPiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbl90eXBlX25vZGUs IGxocywgcmhzLA0KPiA+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE5VTEwsIHZuX3ZhbHVlaXplKTsNCj4gPiA+ICsgICAgICAgICAgIHZuX25hcnlfb3BfdCB2bnJl c3VsdCA9IE5VTEw7DQo+ID4gPiAgICAgICAgICAgICAvKiBJZiB0aGUgY29uZGl0aW9uIGRpZG4n dCBzaW1wbGZ5IHNlZSBpZiB3ZSBoYXZlIHJlY29yZGVkDQo+ID4gPiAgICAgICAgICAgICAgICBh biBleHByZXNzaW9uIGZyb20gc29mYXIgdGFrZW4gZWRnZXMuICAqLw0KPiA+ID4gICAgICAgICAg ICAgaWYgKCEgdmFsIHx8IFRSRUVfQ09ERSAodmFsKSAhPSBJTlRFR0VSX0NTVCkNCj4gPiA+ICAg ICAgICAgICAgICAgew0KPiA+ID4gLSAgICAgICAgICAgICAgIHZuX25hcnlfb3BfdCB2bnJlc3Vs dDsNCj4gPiA+DQo+ID4gPiBsb29rcyBsaWtlIHlvdSBkb24ndCBuZWVkIHZucmVzdWx0IG91dHNp ZGUgb2YgdGhlIGlmKCk/DQo+ID4NCj4gPiB2bnJlc3VsdCBpcyByZXVzZWQgbGF0ZXIgdG8gcmVj b3JkIGVxdWl2YWxlbmNlcyBnZW5lcmF0ZWQgYnkgUEhJIG5vZGVzLg0KPiA+DQo+ID4gPiArLyog RmluZCBwcmVkaWNhdGVkIHZhbHVlIG9mIHZuX25hcnlfb3AgYnkgdGhlIG9wZXJhbmRzJyBlcXVp dmFsZW5jZXMuIFJldHVybg0KPiA+ID4gKyAqIE5VTExfVFJFRSBpZiBubyBrbm93biByZXN1bHQg aXMgZm91bmQuICAqLw0KPiA+ID4gKw0KPiA+ID4gK3N0YXRpYyB0cmVlDQo+ID4gPiArZmluZF9w cmVkaWNhdGVkX3ZhbHVlX2J5X2VxdWl2cyAodm5fbmFyeV9vcF90IHZubywgYmFzaWNfYmxvY2sg YmIsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bl9uYXJ5X29wX3Qg KnZucmVzdWx0KQ0KPiA+ID4gK3sNCj4gPiA+ICsgIGxvb2t1cF9lcXVpdl9oZWFkcyAodm5vLT5s ZW5ndGgsIHZuby0+b3AsIHZuby0+b3AsIGJiKTsNCj4gPiA+ICsgIHRyZWUgcmVzdWx0DQo+ID4g PiArICAgID0gc2ltcGxpZnlfbmFyeV9vcCAodm5vLT5sZW5ndGgsIHZuby0+b3Bjb2RlLCB2bm8t Pm9wLCB2bm8tPnR5cGUpOw0KPiA+ID4NCj4gPiA+IHdoeSBpcyBpdCBuZWNlc3NhcnkgdG8gc2lt cGxpZnkgaGVyZT8gIEl0IGxvb2tzIGxpa2UgdGhlIGNhbGxlcg0KPiA+ID4gYWxyZWFkeSBkb2Vz IHRoaXMuDQo+ID4NCj4gPiBJbiB0aGUgbmV3IHBhdGNoLCBjaGFuZ2VkIHRoZSBjb2RlIGEgbGl0 dGxlIHRvIHJlbW92ZSByZWR1bmRhbnQgY2FsY3VsYXRpb24uDQo+ID4NCj4gPiA+IEkgd29uZGVy IHdoZXRoZXIgaXQncyB2YWxpZCB0byBhbHdheXMgcGVyZm9ybSBmaW5kX3ByZWRpY2F0ZWRfdmFs dWVfYnlfZXF1aXZzDQo+ID4gPiBmcm9tIGluc2lkZSB2bl9uYXJ5X29wX2dldF9wcmVkaWNhdGVk X3ZhbHVlIGluc3RlYWQgb2YgYm9sdGluZyBpdCB0byBvbmx5DQo+ID4gPiBhIHNpbmdsZSBwbGFj ZT8NCj4gPg0KPiA+IFJlbW92ZWQgZnVuY3Rpb24gZmluZF9wcmVkaWNhdGVkX3ZhbHVlX2J5X2Vx dWl2cyBhbmQgaW5saW5lZCB0aGUgY29kZS4NCj4gPg0KPiA+IEJlY2F1c2UgbG9va3VwX2VxdWl2 X2hlYWQgdXNlcyB2bl9uYXJ5X29wX2dldF9wcmVkaWNhdGVkX3ZhbHVlLCBzbyBJIGxlZnQNCj4g PiB2bl9uYXJ5X29wX2dldF9wcmVkaWNhdGVkX3ZhbHVlIHVuY2hhbmdlZC4gSW5zdGVhZCwgb3Bl cmFuZHMgYXJlIHNldCB0bw0KPiA+IGVxdWl2LWhlYWRzIGluIGluaXRfdm5fbmFyeV9vcF9mcm9t X3N0bXQuIFNvIGFsdG9nZXRoZXIsIHByZWRpY2F0ZXMgYXJlIGFsd2F5cw0KPiA+IGluc2VydGVk IGFuZCBzZWFyY2hlZCBieSBlcXVpdi1oZWFkcy4NCj4gPg0KPiA+ID4gKw0KPiA+ID4gK3N0YXRp YyB2bl9uYXJ5X29wX3QNCj4gPiA+ICt2YWxfZXF1aXZfaW5zZXJ0ICh0cmVlIG9wMSwgdHJlZSBv cDIsIGVkZ2UgZSkNCj4gPiA+ICt7DQo+ID4gPg0KPiA+ID4gKyAgaWYgKGlzX2dpbXBsZV9taW5f aW52YXJpYW50IChsaHMpKQ0KPiA+ID4gKyAgICBzdGQ6OnN3YXAgKGxocywgcmhzKTsNCj4gPiA+ ICsgIGlmIChpc19naW1wbGVfbWluX2ludmFyaWFudCAobGhzKSB8fCBUUkVFX0NPREUgKGxocykg IT0gU1NBX05BTUUpDQo+ID4gPiArICAgIC8qIFBvc3NpYmxlIGlmIGludm9rZWQgZnJvbSByZWNv cmRfZXF1aXZfZnJvbV9wcmV2aW91c19jb25kLiAgKi8NCj4gPiA+ICsgICAgcmV0dXJuIE5VTEw7 DQo+ID4gPg0KPiA+ID4gQmV0dGVyIGZvcm11bGF0ZSBhbGwgb2YgdGhlIGFib3ZlIGluIHRlcm1z IG9mIG9ubHkgU1NBX05BTUUgY2hlY2tzIHNpbmNlLi4uDQo+ID4gPg0KPiA+ID4gKyAgLyogTWFr ZSB0aGUgaGFuZC1zaWRlIHdpdGggbW9yZSByZWNvcmRlZCBuLWFyeSBleHByZXNzaW9ucyBuZXcN Cj4gPiA+ICsgICAqIGVxdWl2YWxlbmNlLWhlYWQsIHRvIG1ha2UgZmV3ZXIgcmUtaW5zZXJ0aW9u cy4gICovDQo+ID4gPiArICBpZiAoVFJFRV9DT0RFIChyaHMpID09IFNTQV9OQU1FDQo+ID4gPiAr ICAgICAgJiYgVk5fSU5GTyAocmhzKS0+bnVtX25hcnlfcmVmIDwgVk5fSU5GTyAobGhzKS0+bnVt X25hcnlfcmVmKQ0KPiA+ID4gKyAgICBzdGQ6OnN3YXAgKGxocywgcmhzKTsNCj4gPiA+DQo+ID4g PiBoZXJlIExIUyBuZWVkcyB0byBiZSBhbiBTU0FfTkFNRS4NCj4gPg0KPiA+IFRyaWVkIHRvIGZp eCB0aGlzIGluIHRoZSBuZXcgcGF0Y2guDQo+ID4NCj4gPiA+ICsgIC8qIFJlY29yZCBlcXVpdmFs ZW5jZSBhcyB1bmFyeSBOT1BfRVhQUi4gICovDQo+ID4gPiArICB2bl9uYXJ5X29wX3QgdmFsDQo+ ID4gPiArICAgID0gdm5fbmFyeV9vcF9pbnNlcnRfcGllY2VzX3ByZWRpY2F0ZWRfMSAoMSwgTk9Q X0VYUFIsIFRSRUVfVFlQRSAobGhzKSwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZsaHMsIHJocywgMCwgYmIpOw0KPiA+ID4NCj4gPiA+IHNvIHlv dSBhcmUgcmVjb3JkaW5nIGFuIGVxdWl2YWxlbmNlIG9mIGxocyB0byByaHMgYXMgKE5PUF9FWFBS KWxocw0KPiA+ID4gd2l0aCB2YWx1ZSByaHM/DQo+ID4gPiBQcmVzdW1hYmx5IHlvdSB0aGluayB0 aGF0J3MgZ29vZCBlbm91Z2ggdG8gbm90IG92ZXJsYXAgd2l0aCBlbnRyaWVzDQo+ID4gPiBmb3Ig InJlYWwiIElMPw0KPiA+DQo+ID4gQnkgY2hlY2tpbmcgcmVsYXRlZCBjb2RlcywgaXQgc2VlbXMg dG8gbWUgdGhlcmUncyBubyBvdmVybGFwIGFzIGxvbmcgYXMNCj4gPiBlcXVpdmFsZW5jZXMgYXJl IGluc2VydGVkIGFuZCBzZWFyY2hlZCBhcyBwcmVkaWNhdGVkX3ZhbHVlcy4gSXQgc2hvdWxkIGJl IGVhc3kNCj4gPiB0byByZXBsYWNlIHRoaXMgd2l0aCBvdGhlciBwcmVmZXJyZWQgb3Bjb2RlLg0K PiA+DQo+ID4gPiBJbiBwYXJ0aWN1bGFyIHdoeSBkaWQgeW91IGNob29zZSB0byBfbm90XyB1c2Ug KDIsIEVRX0VYUFIsIGJvb2xlYW5fdHlwZV9ub2RlLA0KPiA+ID4gJltsaHMsIHJoc10sIGJvb2xl YW5fdHJ1ZV9ub2RlLCAuLi4pIGxpa2UgSSB0aGluayB3aGF0IHdvdWxkIGJlDQo+ID4gPiBpbnNl cnRlZCBmb3IgYnkgdGhlDQo+ID4gPiBleGlzdGluZyBjb2RlIGluIHByb2Nlc3NfYmIgdmlhIHZu X25hcnlfb3BfaW5zZXJ0X3BpZWNlc19wcmVkaWNhdGVkPw0KPiA+ID4gSXQgd291bGQgcHJvYmFi bHkgZmVsdCBtb3JlIG5hdHVyYWwgaWYgdGhlICJuZXciIGNvZGUgYm9sdGVkIG9uIHRoZSBjYXNl IHdoZXJlDQo+ID4gPiB0aGF0IGlzIGNhbGxlZCB3aXRoIGFuIGVxdWl2YWxlbmNlPw0KPiA+DQo+ ID4gVGhlICJlcXVpdmFsZW5jZSBoZWFkInMgYWN0dWFsbHkgaW1wbGVtZW50IERpc2pvaW50LXNl dHMuIFNvIGJ5IGEgaGFzaHRhYmxlDQo+ID4gc2VhcmNoIGluIHRoZSBuYXJ5LW1hcCwgdGhlIHNl dCBvZiBlcXVpdmFsZW5jZXMgb2YgYSB2YXJpYWJsZSBjYW4gYmUgZm91bmQuDQo+ID4gQWxzbyBp dCdzIGVhc3kgdG8gZmluZCBvdXQgd2hldGhlciB0d28gdmFyaWFibGVzIGFyZSBlcXVhbC4gQW5k IHRoZQ0KPiA+IGRpc2pvaW50LXNldHMgYXJlIHBhdGgtY29tcHJlc3NlZCBieSB1cGRhdGluZyAi ZXF1aXZhbGVuY2UgaGVhZCIgYW5kDQo+ID4gcmUtaW5zZXJ0aW5nIHByZWRpY2F0ZXMuDQo+ID4N Cj4gPiBJbiB0aGUgbmV3IGF0dGFjaGVkIHBhdGNoLCBwcmVkaWNhdGVzIGxpa2UgIkE9PUIgaXMg dHJ1ZSIgYW5kICJBIT1CIGlzIGZhbHNlIg0KPiA+IGFyZSBub3QgaW5zZXJ0ZWQsIGFzIHRoZXkg Y2FuIGJlIGNvbXB1dGVkIGZyb20gZXF1aXZhbGVuY2VzLiBTYW1lIHdpdGggdGhlDQo+ID4gcHJl ZGljYXRlcyBkZXJpdmVkIGZyb20gdGhlbS4gVGhpcyByZWR1Y2VzIGluc2VydGlvbnMgb2YgcHJl ZGljYXRlcyBieSBhIGxvdCAoDQo+ID4gY291bnRpbmcgdGhlIGVxdWl2YWxlbmNlcyB0aGVtc2Vs dmVzIGFuZCByZS1pbnNlcnRlZCBwcmVkaWNhdGVzKS4gQmVsb3cgYXJlDQo+ID4gdGVzdCByZXN1 bHRzIG9uIFNQRUMgaW50cmF0ZSwgY29tcGFyaW5nIHdpdGggdHJ1bmsgKGY0NTYxMGE0LCBPY3Qg MTkpOg0KPiA+DQo+ID4gICAgICAgICAgICAgICB8bW9yZSBiYiB8bW9yZSBiYiB8bW9yZSBzdG10 fG1vcmUgc3RtdHxsZXNzICAgICAgfGxlc3MNCj4gPiAgICAgICAgICAgICAgIHxyZW1vdmVkIHxy ZW1vdmVkIHxyZW1vdmVkICB8cmVtb3ZlZCAgfHByZWRpY2F0ZXN8cHJlZGljYXRlcw0KPiA+ICAg ICAgICAgICAgICAgfGF0IGZyZTEgfGF0IGZyZTEgfGF0IGZyZTEgIHxhdCBmcmUxICB8aW5zZXJ0 ZWQgIHxpbnNlcnRlZA0KPiA+IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+ID4gNTAwLnBlcmxiZW5jaF9y fCA2NCAgICB8IDEuNTYlICB8IDEwMiAgICB8IDAuMTglICAgfCA1MTkyOCAgICB8IDUzLjQ0JQ0K PiA+IDUwMi5nY2NfciAgICAgIHwgNjc5ICAgfCA0Ljg4JSAgfCAyOTAgICAgfCAwLjIxJSAgIHwg MTQ5OTY4ICAgfCA2NS41JQ0KPiA+IDUwNS5tY2ZfciAgICAgIHwgNSAgICAgfCAzNS43MSUgfCA5 ICAgICAgfCAxLjQwJSAgIHwgMzQ5ICAgICAgfCAyNy40OCUNCj4gPiA1MjAub21uZXRwcCAgICB8 IDEzMiAgIHwgNS4zNiUgIHwgNDggICAgIHwgMC4xNCUgICB8IDI4MTkyICAgIHwgNTguMzglDQo+ ID4gNTIzLnhhbGFuY2Jta19yfCAyMzEgICB8IDMuMTUlICB8IDMwOCAgICB8IDAuMzUlICAgfCA2 NTEzMSAgICB8IDU4Ljk1JQ0KPiA+IDUyNS54MjY0X3IgICAgIHwgNCAgICAgfCAxLjM2JSAgfCAy NyAgICAgfCAwLjExJSAgIHwgMTA0MDEgICAgfCA0MC42OCUNCj4gPiA1MzEuZGVlcHNqZW5nX3J8 IDEgICAgIHwgMy40NSUgIHwgMiAgICAgIHwgMC4xNCUgICB8IDE0MTIgICAgIHwgNTMuODElDQo+ ID4gNTQxLmxlZWxhX3IgICAgfCAyICAgICB8IDAuNjIlICB8IDUgICAgICB8IDAuMDYlICAgfCAz ODc0ICAgICB8IDQ4LjU2JQ0KPiA+IDU0OC5leGNoYW5nZTJfcnwgMCAgICAgfCAwLjAwJSAgfCAz ICAgICAgfCAwLjA0JSAgIHwgMTU5ICAgICAgfCAzLjMzJQ0KPiA+IDU1Ny54el9yICAgICAgIHwg MCAgICAgfCAwLjAwJSAgfCAzICAgICAgfCAwLjA3JSAgIHwgMTg5NCAgICAgfCA1Mi4zOSUNCj4g Pg0KPiA+IENvbnNpZGVyaW5nIHRoZSBjb3B5aW5nIGFuZCB1bndpbmRpbmcgd29yayBzYXZlZCwg dGhpcyBwYXRjaCBjb3VsZCByZWR1Y2UNCj4gPiBjb21waWxlIHRpbWUgcmF0aGVyIHRoYW4gaW5j cmVhc2UgaXQuDQo+ID4NCj4gPiA+IEJ0dywgSSBkaWRuJ3QgZmluZCBhbnkgY29uZGl0aW9uIHRo YXQgcHJldmVudHMgZXF1aXZhbGVuY2VzIGJlaW5nIHVzZWQgZm9yDQo+ID4gPiBub24taW50ZWdl ciB0eXBlcz8gIEFyZSB5b3Ugc3VyZSB0aGlzIGlzIGFsbCB2YWxpZCBmb3IgRlAgY29tcGFyZXMg d2l0aG91dA0KPiA+ID4gZnVydGhlciByZXN0cmljdGlvbnM/DQo+ID4NCj4gPiBJIHRoaW5rIHRo aXMgYXBwcm9hY2ggZm9sbG93cyBzY2N2bidzIHByZXZpb3VzIGRlY2lzaW9ucyBvbiBGUCBjb21w YXJpc29ucywNCj4gPiBmb3IgZXF1aXZhbGVuY2VzIGFyZSBpbnNlcnRlZCBvbmx5IHdoZW4gRVFf RVhQUnMgd2VyZSBldmFsdWF0ZWQgdG8gYmUgdHJ1ZS4NCj4gPiBUaGUgcGF0Y2ggaXMgdGVzdGVk IG9uIHJlZ3Jlc3Npb24gdGVzdHMgYW5kIFNQRUMgZnByYXRlIGNhc2VzLg0KPiA+DQo+ID4gPg0K PiA+ID4gQEAgLTQyMjQsMzYgKzQ0MDQsMzQ1IEBAIHZuX25hcnlfb3BfaW5zZXJ0X3BpZWNlc19w cmVkaWNhdGVkICh1bnNpZ25lZA0KPiA+ID4gaW50IGxlbmd0aCwgZW51bSB0cmVlX2NvZGUgY29k ZSwNCj4gPiA+ICAgICAgICBmcHJpbnRmIChkdW1wX2ZpbGUsICIgPT0gJXNcbiIsDQo+ID4gPiAg ICAgICAgICAgICAgICBpbnRlZ2VyX3plcm9wIChyZXN1bHQpID8gImZhbHNlIiA6ICJ0cnVlIik7 DQo+ID4gPiAgICAgIH0NCj4gPiA+IC0gIHZuX25hcnlfb3BfdCB2bm8xID0gYWxsb2Nfdm5fbmFy eV9vcCAobGVuZ3RoLCBOVUxMX1RSRUUsIHZhbHVlX2lkKTsNCj4gPiA+IC0gIGluaXRfdm5fbmFy eV9vcF9mcm9tX3BpZWNlcyAodm5vMSwgbGVuZ3RoLCBjb2RlLCB0eXBlLCBvcHMpOw0KPiA+ID4g LSAgdm5vMS0+cHJlZGljYXRlZF92YWx1ZXMgPSAxOw0KPiA+ID4gLSAgdm5vMS0+dS52YWx1ZXMg PSAodm5fcHZhbCAqKSBvYnN0YWNrX2FsbG9jICgmdm5fdGFibGVzX29ic3RhY2ssDQo+ID4gPiAt ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mICh2bl9w dmFsKSk7DQo+ID4gPiAtICB2bm8xLT51LnZhbHVlcy0+bmV4dCA9IE5VTEw7DQo+ID4gPiAtICB2 bm8xLT51LnZhbHVlcy0+cmVzdWx0ID0gcmVzdWx0Ow0KPiA+ID4gLSAgdm5vMS0+dS52YWx1ZXMt Pm4gPSAxOw0KPiA+ID4gLSAgdm5vMS0+dS52YWx1ZXMtPnZhbGlkX2RvbWluYXRlZF9ieV9wWzBd ID0gcHJlZF9lLT5kZXN0LT5pbmRleDsNCj4gPiA+IC0gIHJldHVybiB2bl9uYXJ5X29wX2luc2Vy dF9pbnRvICh2bm8xLCB2YWxpZF9pbmZvLT5uYXJ5LCB0cnVlKTsNCj4gPiA+ICsgIC8qIEluc2Vy dCBieSBvcGVyYW5kcycgZXF1aXYtaGVhZHMuICAqLw0KPiA+ID4gKyAgdHJlZSBuZXdfb3BzWzNd Ow0KPiA+ID4gKyAgbG9va3VwX2VxdWl2X2hlYWRzIChsZW5ndGgsIG9wcywgbmV3X29wcywgcHJl ZF9lLT5kZXN0KTsNCj4gPiA+ICsgIC8qIFNraXAgaWYgdGhlIHJlc3VsdCBpcyBrbm93bi4gICov DQo+ID4gPiArICB0cmVlIHNpbXBsaWZpZWQgPSBzaW1wbGlmeV9uYXJ5X29wIChsZW5ndGgsIGNv ZGUsIG5ld19vcHMsIHR5cGUpOw0KPiA+ID4gKyAgaWYgKHNpbXBsaWZpZWQpDQo+ID4gPiArICAg IHsNCj4gPiA+ICsgICAgICBpZiAoZHVtcF9maWxlICYmIChkdW1wX2ZsYWdzICYgVERGX0RFVEFJ TFMpKQ0KPiA+ID4gKyAgICAgICB7DQo+ID4gPiArICAgICAgICAgZnByaW50ZiAoZHVtcF9maWxl LCAiUmVzdWx0IGlzIGtub3duOiAiKTsNCj4gPiA+ICsgICAgICAgICBwcmludF9nZW5lcmljX2V4 cHIgKGR1bXBfZmlsZSwgc2ltcGxpZmllZCwgVERGX05PTkUpOw0KPiA+ID4gKyAgICAgICAgIGZw cmludGYgKGR1bXBfZmlsZSwgIiwgc2tpcHBlZC5cbiIpOw0KPiA+ID4gKyAgICAgICB9DQo+ID4g PiArICAgICAgcmV0dXJuIE5VTEw7DQo+ID4gPiArICAgIH0NCj4gPiA+DQo+ID4gPiBzb28gLSBo b3cgZG8gdGhlIGV4aXN0aW5nIHByZWRpY2F0ZWQgZXhwcmVzc2lvbnMgY2hhbmdlIHRvIGJlIGhh bmRsZWQgaGVyZT8NCj4gPiA+IFdoeSB3b3VsZCB0aGV5IGV2ZXIgYmUgc2ltcGxpZmllZD8gIFNo b3VsZCB0aGlzIHNpbXBsaWZpY2F0aW9uIG5vdCBiZXR0ZXIgaGFwcGVuDQo+ID4gPiB1cHRocmVh ZCB3aGVuIHZpc2l0aW5nIHRoZSBjb25kaXRpb25hbD8gIE1heWJlIHRoYXQgbmVlZHMgdG8gdXNl IHRoZSBlcXVpdnMNCj4gPiA+IGFscmVhZHk/DQo+ID4NCj4gPiBUaGlzIGhhcHBlbnMgd2hlbiB1 cGRhdGluZyB2YXJpYWJsZSBBJ3MgZXF1aXZfaGVhZCBmcm9tIEIgdG8gQywgYW5kDQo+ID4gcmUt aW5zZXJ0aW5nIGZvcm1lciBwcmVkaWNhdGVzIG9mIEIgd2l0aCBDLiBGb3IgZXhhbXBsZSwgIngg PCAwIiBpcyByZWNvcmRlZCwNCj4gPiB0aGVuIHggaXMgYXNzaWduZWQgd2l0aCBuZXcgZXF1aXZf aGVhZCAtMSBhdCBzb21lIGxvY2F0aW9uLCB0aGVuIC0xIDwgMCBjYW4NCj4gPiBzaW1wbGlmeS4g SXQgc2hvdWxkbid0IGhhcHBlbiB3aGVuIGluc2VydGluZyBuZXcgcHJlZGljYXRlcy4NCj4gPg0K PiA+ID4NCj4gPiA+IFlvdSByZS11c2UgdGhlIHByZWRpY2F0ZWQgdmFsdWUgbGlzdCB3aGljaCBJ IHRoaW5rIGlzIGdyZWF0LCBjYW4geW91IGV4cGxhaW4NCj4gPiA+IGhvdyAibGF0ZXN0IiBpcyBt ZWFudCBpbiB0aGUgZm9sbG93aW5nPw0KPiA+ID4NCj4gPiA+IEBAIC00MTQ1LDcgKzQyNjQsMTIg QEAgdm5fbmFyeV9vcF9pbnNlcnRfaW50byAodm5fbmFyeV9vcF90IHZubywNCj4gPiA+IHZuX25h cnlfb3BfdGFibGVfdHlwZSAqdGFibGUsDQo+ID4gPiAgICAgICAgICAgICAgIG5leHQgPSAmKCpu ZXh0KS0+bmV4dDsNCj4gPiA+ICAgICAgICAgICAgIH0NCj4gPiA+ICAgICAgICAgICBpZiAoIWZv dW5kKQ0KPiA+ID4gLSAgICAgICAgICAgKm5leHQgPSBudmFsOw0KPiA+ID4gKyAgICAgICAgICAg ew0KPiA+ID4gKyAgICAgICAgICAgICAvKiBJbnNlcnQgbmV3IHZhbHVlIGF0IHRoZSBmcm9udCwg c28gdGhhdCBsb29rdXBfZXF1aXZfaGVhZCBjYW4NCj4gPiA+ICsgICAgICAgICAgICAgICogZmlu ZCB0aGUgbGF0ZXN0IHJlc3VsdC4gICovDQo+ID4gPiArICAgICAgICAgICAgIG52YWwtPm5leHQg PSB2bm8tPnUudmFsdWVzOw0KPiA+ID4gKyAgICAgICAgICAgICB2bm8tPnUudmFsdWVzID0gbnZh bDsNCj4gPiA+ICsgICAgICAgICAgIH0NCj4gPg0KPiA+IEl0IG1lYW50IHRoZSAibW9zdCBnZW5l cmFsIiByZXN1bHQuIChJIHBpY2tlZCB0aGUgd3Jvbmcgd29yZC4gVGhlIGRlc2NyaXB0aW9uDQo+ ID4gaXMgY2hhbmdlZCBpbiB0aGUgbmV3IHBhdGNoIGZpbGUuICkNCj4gPg0KPiA+IFRoZXJlIGNh biBiZSBtdWx0aXBsZSB2YWxpZCByZXN1bHRzIGF0IHRoZSBzYW1lIHRpbWUuIEFzIHdlIHRyYXZl cnNlIGluIFJQTyBhbmQNCj4gPiB1cGRhdGUgZXF1aXYtaGVhZHMgKGkuZS4gdW5pdGUgZGlzam9p bnQtc2V0cyksIHRoZSBsYXN0IGluc2VydGVkIHJlc3VsdA0KPiA+IHJlcHJlc2VudHMgdGhlIG1v c3QgY29tcGxldGUgc2V0IG9mIGVxdWl2YWxlbmNlcyBvZiB0aGUgdmFyaWFibGUuDQo+ID4NCj4g PiAoSW4gdGhlIGxhc3QgcGF0Y2ggdmVyc2lvbiwgd2hlbiAiQXBwZW5kaW5nIHByZWRpY2F0ZSB0 byB2YWx1ZSIsIHRoZSBuZXcgcmVzdWx0DQo+ID4gaXMgbm90IG1vdmVkIHRvIHRoZSBmcm9udC4g VGhhdCB2aW9sYXRlcyB0aGUgcHJvcGVydHkgb2YgZXF1aXYtaGVhZHMgYW5kIHNvbWUNCj4gPiBv cHBvcnR1bml0aWVzIHdpbGwgYmUgbG9zdC4gRml4ZWQgdGhpcyBpbiB0aGUgbmV3IHBhdGNoIGZp bGUuKQ0KPiA+DQo+ID4gPg0KPiA+ID4gT0ssIEkgaGF2ZSB0byBzdG9wIG5vdyBidXQgd2lsbCB0 cnkgdG8gdW5kZXJzdGFuZCBhbmQgcmV2aWV3IGZ1cnRoZXIgbmV4dCB3ZWVrLg0KPiA+ID4gU29y cnkgZm9yIHRoZSBkZWxheXMgYnV0IHRoZSBwYXRjaCBpcyBxdWl0ZSBjb21wbGV4IHRvIHVuZGVy c3RhbmQgOi8NCj4gPiA+DQo+ID4gPiBSaWNoYXJkLg0KPiA+ID4NCj4gPiA+ID4gMjAyMS0wOS0x NiAgRGkgWmhhbyAgPGRpemhhb0Bvcy5hbXBlcmVjb21wdXRpbmcuY29tPg0KPiA+ID4gPg0KPiA+ DQo+ID4gT3RoZXIgY2hhbmdlczoNCj4gPiAtIEZpeGVkIHNvbWUgZXJycyBpbiBjb21tZW50cy4N Cj4gPiAtIE9uIHJlY29yZGluZyB0ZW1wb3JhcnkgZXF1aXZhbGVuY2VzIGdlbmVyYXRlZCBieSBQ SEkgbm9kZXMsIGFsdGVyZWQgdGhlDQo+ID4gICBsb2dpYywgaG9wZSBpdCBjYW4gYmUgYSBiaXQg bW9yZSBjbGVhci4NCj4gPiAgIDEuIFdoZW4gYSBjb25kaXRpb25hbCBleHByZXNzaW9uJ3MgdHJ1 ZS9mYWxzZSBlZGdlIEUgaXMgYXNzZXNzZWQgdG8gYmUNCj4gPiAgICAgIGV4ZWN1dGFibGUsIHNl YXJjaCBmb3IgY29uZmxpY3RpbmcgcHJlZGljYXRlcyBmb3IgRSB0byBiZSB0YWtlbi4gSWYgYQ0K PiA+ICAgICAgY29uZmxpY3RpbmcgcHJlZGljYXRlIGlzIGZvdW5kIGF0IEwsIGFuZCBMJ3Mgc2lu Z2xlIHByZWRlY2Vzc29yIFANCj4gPiAgICAgIGRvbWluYXRlcyBjdXJyZW50IEJCLCB0aGVuIHdl IGtub3cgUC0+TCBjYW5ub3QgYmUgdGFrZW4gaWYgRSBpcyB0YWtlbi4NCj4gPiAgIDIuIFByb2Nl c3MgcGhpX2JiIChpbW1lZGlhdGVseSBkb21pbmF0ZWQgYnkgUCwgYW5kIGRvbWluYXRlcyBCQiks IHJ1bGUgb3V0DQo+ID4gICAgICBQSEkgYXJndW1lbnRzICh4MikgdGhhdCBjYW4gb25seSBjb21l IGZyb20gUC0+TC4gSWYgdGhlcmUncyBhIHNpbmdsZQ0KPiA+ICAgICAgUEhJIGFyZ3VtZW50ICh4 MSkgbGVmdCwgcmVjb3JkIHRoZSBlcXVpdmFsZW5jZSBvZiB4MSBhbmQgUEhJIHJlc3VsdCB4DQo+ ID4gICAgICBhdCBlZGdlIEUuDQo+ID4gICAgICAgICAgIC0tLS0tDQo+ID4gICAgICAgICAgIHwg UCB8DQo+ID4gICAgICAgICAgIC0tLS0tDQo+ID4gICAgICAgICAgICB8ICBcDQo+ID4gICAgICAg ICAgICB8ICAgLS0tLS0NCj4gPiAgICAgICAgICAgIHwgICB8IEwgfCAgPD09IGNvbmZsaWN0aW5n IHByZWRpY2F0ZSdzIGxvY2F0aW9uDQo+ID4gICAgICAgICAgICB8ICAgLS0tLS0NCj4gPiAgICAg ICAgICAgIHwgICAgLw0KPiA+ICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiA+ICAgfCB4 ID0gUEhJPHgxKFApLCB4MihMKT4gfCBwaGlfYmINCj4gPiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0NCj4gPiAgICAgICAgICAgICAgfA0KPiA+ICAgICAgICAgICAgIC4uLi4NCj4gPiAgICAg ICAgICAgICAgfA0KPiA+ICAgICAgICAgICAgLS0tLS0NCj4gPiAgICAgICAgICAgIHwgQkIgfCA8 PT0gY3VycmVudCBiYg0KPiA+ICAgICAgICAgICAgLS0tLS0NCj4gPiAgICAgICAgICAgLyAgICAg XCBlZGdlIEUNCj4gPiAgICAgICAgIC4uLiAgICAgLS0tLS0tLQ0KPiA+ICAgICAgICAgICAgICAg ICB8IGRlc3QgfA0KPiA+ICAgICAgICAgICAgICAgICAtLS0tLS0tDQo+ID4NCj4gPiAtIEZpeGVk IGEgY29ycmVjdG5lc3MgcHJvYmxlbSB3aGVuIHJlY29yZGluZyBlcXVpdmFsZW5jZXMgZnJvbSBQ SEkgaW4gcHJldmlvdXMNCj4gPiAgIHZlcnNpb24uIEFsc28gdGVzdCBjYXNlIHNzYS1mcmUtOTUu YzprIGluIHByZXZpb3VzIHZlcnNpb24gd2FzIGluY29ycmVjdCwNCj4gPiAgIGZpeGVkIHRoYXQu DQo+ID4NCj4gPiBUaGFua3MsDQo+ID4gRGkgWmhhbw0KDQotLS0NCg0KRXh0ZW5kIEZSRSB3aXRo IHRlbXBvcmFyeSBlcXVpdmFsZW5jZXMuDQoNCjIwMjEtMTEtMTUgIERpIFpoYW8gIDxkaXpoYW9A b3MuYW1wZXJlY29tcHV0aW5nLmNvbT4NCg0KZ2NjL0NoYW5nZUxvZzoNCiAgICAgICAgUFIgdHJl ZS1vcHRpbWl6YXRpb24vMTAxMTg2DQogICAgICAgICogdHJlZS1zc2Etc2Njdm4uYyAoVk5fSU5G Tyk6IHJlbW92ZSBhc3NlcnRpb25zICh0aGVyZSBjb3VsZCBiZSBhDQogICAgICAgIHByZWRpY2F0 ZSBhbHJlYWR5KS4NCiAgICAgICAgKGRvbWluYXRlZF9ieV9wX3dfdW5leCk6IE1vdmVkIHVwd2Fy ZC4NCiAgICAgICAgKHZuX25hcnlfb3BfZ2V0X3ByZWRpY2F0ZWRfdmFsdWUpOiBNb3ZlZCB1cHdh cmQuDQogICAgICAgIChpc192bl92YWxpZF9hdF9iYik6IENoZWNrIGlmIHZuX3B2YWwgaXMgdmFs aWQgYXQgQkIuDQogICAgICAgIChsb29rdXBfZXF1aXZfaGVhZCk6IExvb2t1cCB0aGUgImVxdWl2 YWxlbmNlIGhlYWQiIG9mIGdpdmVuIG5vZGUuDQogICAgICAgIChsb29rdXBfZXF1aXZfaGVhZHMp OiBMb29rdXAgdGhlICJlcXVpdmFsZW5jZSBoZWFkInMgb2YgZ2l2ZW4gbm9kZXMuDQogICAgICAg ICh2bl90cmFja2luZ19lZGdlKTogRXh0cmFjdGVkIHV0aWxpdHkgZnVuY3Rpb24uDQogICAgICAg IChpbml0X3ZuX25hcnlfb3BfZnJvbV9zdG10KTogSW5zZXJ0IGFuZCBsb29rdXAgYnkgImVxdWl2 YWxlbmNlIGhlYWQicy4NCiAgICAgICAgKHZuX25hcnlfb3BfaW5zZXJ0X2ludG8pOiBJbnNlcnQg bmV3IHZhbHVlIGF0IHRoZSBmcm9udC4NCiAgICAgICAgKHZuX25hcnlfb3BfaW5zZXJ0X3BpZWNl c19wcmVkaWNhdGVkXzEpOiBJbnNlcnQgYXMgcHJlZGljYXRlZCB2YWx1ZXMNCiAgICAgICAgZnJv bSBwaWVjZXMuDQogICAgICAgIChmb2xkX2NvbnN0X2Zyb21fZXF1aXZfaGVhZHMpOiBGb2xkIE4t YXJ5IGV4cHJlc3Npb24gb2YgZXF1aXYtaGVhZHMuDQogICAgICAgIChwdXNoX25ld19uYXJ5X3Jl Zik6IEluc2VydCBhIGJhY2stcmVmZXJlbmNlIHRvIHZuX25hcnlfb3BfdC4NCiAgICAgICAgKHZh bF9lcXVpdl9pbnNlcnQpOiBSZWNvcmQgdGVtcG9yYXJ5IGVxdWl2YWxlbmNlLg0KICAgICAgICAo dm5fbmFyeV9vcF9pbnNlcnRfcGllY2VzX3ByZWRpY2F0ZWQpOiBSZWNvcmQgZXF1aXZhbGVuY2Vz IGluc3RlYWQgb2YNCiAgICAgICAgc29tZSBwcmVkaWNhdGVzOyBpbnNlcnQgYmFjay1yZWZzLg0K ICAgICAgICAocmVjb3JkX2VxdWl2X2Zyb21fcHJldl9waGlfMSk6IFJlY29yZCB0ZW1wb3Jhcnkg ZXF1aXZhbGVuY2VzIGdlbmVyYXRlZA0KICAgICAgICBieSBQSEkgbm9kZXMuDQogICAgICAgIChy ZWNvcmRfZXF1aXZfZnJvbV9wcmV2X3BoaSk6IEdpdmVuIGFuIG91dGdvaW5nIGVkZ2Ugb2YgYSBj b25kaXRpb25hbA0KICAgICAgICBleHByZXNzaW9uIHRha2VuLCByZWNvcmQgZXF1aXZhbGVuY2Vz IGdlbmVyYXRlZCBieSBQSEkgbm9kZXMuDQogICAgICAgICh2aXNpdF9uYXJ5X29wKTogQWRkIGxv b2t1cCBwcmV2aW91cyByZXN1bHRzIG9mIE4tYXJ5IG9wZXJhdGlvbnMgYnkNCiAgICAgICAgZXF1 aXZhbGVuY2VzLg0KICAgICAgICAoaW5zZXJ0X3JlbGF0ZWRfcHJlZGljYXRlc19vbl9lZGdlKTog U29tZSBwcmVkaWNhdGVzIGNhbiBiZSBjb21wdXRlZA0KICAgICAgICBmcm9tIGVxdWl2YWxlbmNl cywgbm8gbmVlZCB0byBpbnNlcnQgdGhlbS4NCiAgICAgICAgKHByb2Nlc3NfYmIpOiBBZGQgbG9v a3VwIHByZWRpY2F0ZWQgdmFsdWVzIGJ5IGVxdWl2YWxlbmN+L3RtcC90aW1lLWZyZWVzLg0KICAg ICAgICAoc3RydWN0IHVud2luZF9zdGF0ZSk6IFVud2luZCBzdGF0ZSBvZiBiYWNrLXJlZnMgdG8g dm5fbmFyeV9vcF90Lg0KICAgICAgICAoZG9fdW53aW5kKTogVW53aW5kIHRoZSBiYWNrLXJlZnMg dG8gdm5fbmFyeV9vcF90Lg0KICAgICAgICAoZG9fcnBvX3ZuKTogVXBkYXRlIGJhY2stcmVmZXJl bmNlIHVud2luZCBzdGF0ZS4NCiAgICAgICAgKiB0cmVlLXNzYS1zY2N2bi5oIChzdHJ1Y3QgbmFy eV9yZWYpOiBob2xkIGEgbGlzdHMgb2YgcmVmZXJlbmNlcyB0byB0aGUNCiAgICAgICAgbmFyeSBt YXAgZW50cmllcy4NCg0KZ2NjL3Rlc3RzdWl0ZS9DaGFuZ2VMb2c6DQoNCiAgICAgICAgKiBnY2Mu ZGcvdHJlZS1zc2EvcHI2ODYxOS0yLmM6IERpc2FibGUgZnJlLg0KICAgICAgICAqIGdjYy5kZy90 cmVlLXNzYS9wcjcxOTQ3LTEuYzogRGlzYWJsZSBmcmUuDQogICAgICAgICogZ2NjLmRnL3RyZWUt c3NhL3ByNzE5NDctMi5jOiBEaXNhYmxlIGZyZS4NCiAgICAgICAgKiBnY2MuZGcvdHJlZS1zc2Ev cHI3MTk0Ny0zLmM6IERpc2FibGUgZnJlLg0KICAgICAgICAqIGdjYy5kZy90cmVlLXNzYS9wcjcx OTQ3LTUuYzogRGlzYWJsZSBmcmUuDQogICAgICAgICogZ2NjLmRnL3RyZWUtc3NhL3ByNzE5NDct Ny5jOiBEaXNhYmxlIGZyZS4NCiAgICAgICAgKiBnY2MuZGcvdHJlZS1zc2EvcHI3MTk0Ny04LmM6 IERpc2FibGUgZnJlLg0KICAgICAgICAqIGdjYy5kZy90cmVlLXNzYS9wcjcxOTQ3LTkuYzogRGlz YWJsZSBmcmUuDQogICAgICAgICogZ2NjLmRnL3RyZWUtc3NhL3ZycDAzLmM6IERpc2FibGUgZnJl Lg0KICAgICAgICAqIGdjYy5kZy90cmVlLXNzYS9zc2EtZnJlLTEwMC5jOiBOZXcgdGVzdC4NCiAg ICAgICAgKiBnY2MuZGcvdHJlZS1zc2Evc3NhLWZyZS0xMDEuYzogTmV3IHRlc3QuDQogICAgICAg ICogZ2NjLmRnL3RyZWUtc3NhL3NzYS1mcmUtMTAyLmM6IE5ldyB0ZXN0Lg0KICAgICAgICAqIGdj Yy5kZy90cmVlLXNzYS9zc2EtcHJlLTM0LmM6IE5ldyB0ZXN0Lg0K --_002_SN6PR01MB4240775EAA800E6C8BB02B69E8989SN6PR01MB4240prod_ Content-Type: application/octet-stream; name="v4-tree-optimization-101186.patch" Content-Description: v4-tree-optimization-101186.patch Content-Disposition: attachment; filename="v4-tree-optimization-101186.patch"; size=37565; creation-date="Mon, 15 Nov 2021 17:22:10 GMT"; modification-date="Mon, 15 Nov 2021 17:21:54 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 DQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMDAuLjYxNzg0MzdhMzA5DQot LS0gL2Rldi9udWxsDQorKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9zc2EtZnJl LTEwMS5jDQpAQCAtMCwwICsxLDgzIEBADQorLyogeyBkZy1kbyBjb21waWxlIH0gKi8NCisvKiB7 IGRnLW9wdGlvbnMgIi1PMiAtZmR1bXAtdHJlZS1mcmUxIiB9ICovDQorDQorZXh0ZXJuIHZvaWQg YmFyKHZvaWQpOw0KK2V4dGVybiB2b2lkIGJhZyh2b2lkKTsNCitleHRlcm4gdm9pZCBiYXModm9p ZCk7DQorZXh0ZXJuIHZvaWQgZm9vKHZvaWQpOw0KKw0KK3ZvaWQgZiAodW5zaWduZWQgaW50IGEs IHVuc2lnbmVkIGludCBiKQ0KK3sNCisgIGlmIChhID09IGIpDQorICAgIHsNCisgICAgICBmb3Ig KHVuc2lnbmVkIGkgPSBhOyBpIDwgMTAwOyBpKyspDQorCXsNCisJICBpZiAoaSA+IGIpDQorCSAg ICAvKiBTaG91bGQgbm90IGJlIGVsaW1pbmF0ZWQuICAqLw0KKwkgICAgYmFyICgpOw0KKwl9DQor ICAgIH0NCit9DQorDQorLyogVGVzdCB0ZW1wb3JhcnkgZXF1aXZhbGVuY2VzOiBkZXJpdmVkIGNv bmRpdGlvbi4gICovDQorDQoraW50IGdnOw0KKw0KK3ZvaWQgZyAoaW50IGEsIGludCBiLCBpbnQg ZCkNCit7DQorICBpbnQgYyA9IDEwMDsNCisgIGlmIChhID4gMCkNCisgICAgew0KKyAgICAgIGMg PSBiOw0KKyAgICAgIGdnKys7DQorICAgIH0NCisgIGVsc2UNCisgICAgLyogYSA8PSAwICovDQor ICAgIHsNCisgICAgICBjID0gZDsNCisgICAgICBnZy0tOw0KKyAgICB9DQorICBmb3IgKGludCBp ID0gMDsgaSA8IGM7IGkrKykNCisgICAgew0KKyAgICAgIGlmIChhID49IDApDQorCXsNCisJICBp ZiAoaSA+PSBiKQ0KKwkgICAgLyogU2hvdWxkIG5vdCBiZSBlbGltaW5hdGVkLiAoImEgPj0gMCIg Y2Fubm90IGRlcml2ZSAiYSA+IDAiLikgICovDQorCSAgICBiYXMgKCk7DQorCX0NCisgICAgICBl bHNlDQorCS8qIGEgPCAwICovDQorCXsNCisJICBpZiAoaSA+PSBkKQ0KKwkgICAgLyogU2hvdWxk IGJlIGVsaW1pbmF0ZWQsIGFzICJhIDwgMCIgY2FuIGRlcml2ZSAiYSA8PSAwIi4gICovDQorCSAg ICBmb28gKCk7DQorCX0NCisgICAgfQ0KK30NCisNCisvKiBUZXN0IHRlbXBvcmFyeSBlcXVpdmFs ZW5jZXM6IG5vIGRvbWluYXRpb24uICAqLw0KKw0KK3ZvaWQgaCAodW5zaWduZWQgaW50IGEsIHVu c2lnbmVkIGludCBiKQ0KK3sNCisgIHVuc2lnbmVkIGludCBjID0gMTAwOw0KKyAgaWYgKGIgJSAy KQ0KKyAgICB7DQorICAgICAgaWYgKGEgIT0gMCkNCisJYyA9IGI7DQorICAgIH0NCisgIGZvciAo dW5zaWduZWQgaSA9IDA7IGkgPCBjOyBpKyspDQorICAgIHsNCisgICAgICBpZiAoYSAhPSAwKQ0K Kwl7DQorCSAgaWYgKGkgPj0gYikNCisJICAgIC8qIFNob3VsZCBub3QgYmUgZWxpbWluYXRlZC4g ICovDQorCSAgICBiYWcgKCk7DQorCX0NCisgICAgICBpKys7DQorICAgIH0NCit9DQorDQorLyog eyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJiYXIiICJmcmUxIiB9IH0gKi8NCisvKiB7IGRn LWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgImJhcyIgImZyZTEiIH0gfSAqLw0KKy8qIHsgZGctZmlu YWwgeyBzY2FuLXRyZWUtZHVtcCAiYmFnIiAiZnJlMSIgfSB9ICovDQorLyogeyBkZy1maW5hbCB7 IHNjYW4tdHJlZS1kdW1wLW5vdCAiZm9vIiAiZnJlMSIgfSB9ICovDQpkaWZmIC0tZ2l0IGEvZ2Nj L3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2Evc3NhLWZyZS0xMDIuYyBiL2djYy90ZXN0c3VpdGUv Z2NjLmRnL3RyZWUtc3NhL3NzYS1mcmUtMTAyLmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRl eCAwMDAwMDAwMDAwMC4uM2M4OTAwYzQyMTkNCi0tLSAvZGV2L251bGwNCisrKyBiL2djYy90ZXN0 c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL3NzYS1mcmUtMTAyLmMNCkBAIC0wLDAgKzEsNDUgQEANCisN CisNCisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLw0KKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1mZHVt cC10cmVlLWZyZTEiIH0gKi8NCisNCitleHRlcm4gdm9pZCBiYXIodm9pZCk7DQorZXh0ZXJuIHZv aWQgYmFnKHZvaWQpOw0KK2V4dGVybiB2b2lkIGZvbyh2b2lkKTsNCitpbnQgZzsNCisNCisvKiBU ZXN0IHRlbXBvcmFyeSBlcXVpdmFsZW5jZXM6IG9wdGltaXplIE4tYXJ5IGV4cHJlc3Npb25zLiAg Ki8NCisNCit2b2lkDQorZiAodW5zaWduZWQgaW50IGEsIHVuc2lnbmVkIGludCBiLCB1bnNpZ25l ZCBpbnQgeCwgdW5zaWduZWQgaW50IHkpDQorew0KKyAgaWYgKGEgPT0gYikNCisgICAgew0KKyAg ICAgIGcgPSAxMDA7DQorICAgICAgaWYgKGEgKyB4ID09IDk5KQ0KKwlnID0geCArIGI7IC8qIHNo b3VsZCBiZSBzaW1wbGlmaWVkIHRvIDk5ICovDQorICAgIH0NCisgIGVsc2UNCisgICAgLy8gYSE9 IGINCisgICAgew0KKyAgICAgIGlmIChhID09IDEwMCAtIHgpDQorCXsNCisJICBnKys7DQorCSAg aWYgKGIgPT0gMTAwIC0geCkNCisJICAgIGZvbyAoKTsgLyogc2hvdWxkIGJlIHJlbW92ZWQgKi8N CisJfQ0KKyAgICAgIGVsc2UNCisJew0KKwkgIGctLTsNCisJICBpZiAoYiA9PSAxMDAgLSB4KQ0K KwkgICAgYmFnICgpOyAvKiBzaG91bGQgbm90IGJlIHJlbW92ZWQgKi8NCisJICBlbHNlDQorCSAg ICBiYXIgKCk7IC8qIHNob3VsZCBub3QgYmUgcmVtb3ZlZCAqLw0KKwl9DQorICAgIH0NCit9DQor DQorLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJiYWciICJmcmUxIiB9IH0gKi8NCisv KiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgImJhciIgImZyZTEiIH0gfSAqLw0KKy8qIHsg ZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC1ub3QgImZvbyIgImZyZTEiIH0gfSAqLw0KKy8qIHsg ZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC1ub3QgIj0gYl9cWzAtOV0rXFwoXFtBLVpdK1xcKSBc XCsgeF8iICJmcmUxIiB9IH0gKi8NCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy90 cmVlLXNzYS9zc2EtcHJlLTM0LmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9zc2Et cHJlLTM0LmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwMC4uMDkxYTY3 ZWMwYTINCi0tLSAvZGV2L251bGwNCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3Nh L3NzYS1wcmUtMzQuYw0KQEAgLTAsMCArMSw1MiBAQA0KKy8qIHsgZGctZG8gY29tcGlsZSB9ICov DQorLyogeyBkZy1vcHRpb25zICItTzIgLWZkdW1wLXRyZWUtcHJlIiB9ICovDQorDQorZXh0ZXJu IHZvaWQgZm9vKHZvaWQpOw0KK2V4dGVybiB2b2lkIGJhZyh2b2lkKTsNCitleHRlcm4gdm9pZCBi YXModm9pZCk7DQorDQorLyogVGVzdCB0ZW1wb3JhcnkgZXF1aXZhbGVuY2VzOiBpZGVudGljYWwg Y29uZGl0aW9uLiAgKi8NCisNCit2b2lkIGggKGludCBhLCBpbnQgYiwgaW50IHgsIGludCB5KQ0K K3sNCisgIGludCBjID0geTsNCisgIGlmIChhICE9IDApDQorICAgIGMgPSB4Ow0KKyAgd2hpbGUg KGIgPCAxMDAwKQ0KKyAgICB7DQorICAgICAgaWYgKGEgIT0gMCkNCisJew0KKwkgIGlmIChjID4g eCkNCisJICAgIC8qIFVucmVhY2hhYmxlLiAgKi8NCisJICAgIGZvbyAoKTsNCisJfQ0KKyAgICAg IGVsc2UNCisJYmFzICgpOw0KKyAgICAgIGIrKzsNCisgICAgfQ0KK30NCisNCisvKiBUZXN0IHRl bXBvcmFyeSBlcXVpdmFsZW5jZXM6IGRlcml2ZWQgY29uZGl0aW9uLiAgKi8NCisNCit2b2lkIGsg KGludCBhLCBpbnQgYiwgaW50IHgsIGludCB5KQ0KK3sNCisgIGludCBjID0geTsNCisgIGlmIChh ICE9IGIpDQorICAgIGMgPSB4Ow0KKyAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDAwOyBpKyspDQor ICAgIHsNCisgICAgICBpZiAoYSA8IGIpDQorCS8qIEFsbCBwYXRocyByZWFjaGluZyAiYT4wIGlz IHRydWUiIGNvbWUgZnJvbSAiYSE9MCBpcyB0cnVlIi4gICovDQorCXsNCisJICBpZiAoYyA+IHgp DQorCSAgICAvKiBVbnJlYWNoYWJsZS4gICovDQorCSAgICBmb28gKCk7DQorCX0NCisgICAgICBl bHNlDQorCWJhZyAoKTsNCisgICAgfQ0KK30NCisNCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVl LWR1bXAtbm90ICJmb28gXFwoXFwpIiAicHJlIiB9IH0gKi8NCisvKiB7IGRnLWZpbmFsIHsgc2Nh bi10cmVlLWR1bXAgImJhZyIgInByZSIgfSB9ICovDQorLyogeyBkZy1maW5hbCB7IHNjYW4tdHJl ZS1kdW1wICJiYXMiICJwcmUiIH0gfSAqLw0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlDQpk aWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvdnJwMDMuYyBiL2djYy90 ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL3ZycDAzLmMNCmluZGV4IDRjYmFjYTQxMzMyLi42OWI4 M2I2Y2MzMCAxMDA2NDQNCi0tLSBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL3ZycDAz LmMNCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL3ZycDAzLmMNCkBAIC0xLDUg KzEsNSBAQA0KIC8qIHsgZGctZG8gY29tcGlsZSB9ICovDQotLyogeyBkZy1vcHRpb25zICItTzIg LWZkaXNhYmxlLXRyZWUtZXZycCAtZmR1bXAtdHJlZS12cnAxIC1mbm8tdGhyZWFkLWp1bXBzIiB9 ICovDQorLyogeyBkZy1vcHRpb25zICItTzIgLWZkaXNhYmxlLXRyZWUtZXZycCAtZmR1bXAtdHJl ZS12cnAxIC1mbm8tdGhyZWFkLWp1bXBzIC1mbm8tdHJlZS1mcmUiIH0gKi8NCiANCiBzdHJ1Y3Qg QQ0KIHsNCmRpZmYgLS1naXQgYS9nY2MvdHJlZS1zc2Etc2Njdm4uYyBiL2djYy90cmVlLXNzYS1z Y2N2bi5jDQppbmRleCAxNDk2NzRlNmExNi4uMjA2MTY0N2FlMDYgMTAwNjQ0DQotLS0gYS9nY2Mv dHJlZS1zc2Etc2Njdm4uYw0KKysrIGIvZ2NjL3RyZWUtc3NhLXNjY3ZuLmMNCkBAIC0zNTMsNiAr MzUzLDggQEAgc3RhdGljIHZuX3JlZmVyZW5jZV90IGxhc3RfaW5zZXJ0ZWRfcmVmOw0KIHN0YXRp YyB2bl9waGlfdCBsYXN0X2luc2VydGVkX3BoaTsNCiBzdGF0aWMgdm5fbmFyeV9vcF90IGxhc3Rf aW5zZXJ0ZWRfbmFyeTsNCiBzdGF0aWMgdm5fc3NhX2F1eF90IGxhc3RfcHVzaGVkX2F2YWlsOw0K K3N0YXRpYyB2bl9zc2FfYXV4X3QgbGFzdF9wdXNoZWRfbmFyeV9yZWY7DQorc3RhdGljIG5hcnlf cmVmKiBuYXJ5X3JlZl9mcmVlbGlzdDsNCiANCiAvKiBWYWxpZCBoYXNodGFibGVzIHN0b3Jpbmcg aW5mb3JtYXRpb24gd2UgaGF2ZSBwcm92ZW4gdG8gYmUNCiAgICBjb3JyZWN0LiAgKi8NCkBAIC00 OTEsOSArNDkzLDkgQEAgVk5fSU5GTyAodHJlZSBuYW1lKQ0KIAkgICAgbmFyeS0+cHJlZGljYXRl ZF92YWx1ZXMgPSAwOw0KIAkgICAgbmFyeS0+dS5yZXN1bHQgPSBib29sZWFuX3RydWVfbm9kZTsN CiAJICAgIHZuX25hcnlfb3BfaW5zZXJ0X2ludG8gKG5hcnksIHZhbGlkX2luZm8tPm5hcnkpOw0K LQkgICAgZ2NjX2Fzc2VydCAobmFyeS0+dW53aW5kX3RvID09IE5VTEwpOw0KIAkgICAgLyogQWxz byBkbyBub3QgbGluayBpdCBpbnRvIHRoZSB1bmRvIGNoYWluLiAgKi8NCiAJICAgIGxhc3RfaW5z ZXJ0ZWRfbmFyeSA9IG5hcnktPm5leHQ7DQorCSAgICAvKiBUaGVyZSBjb3VsZCBiZSBhIHByZWRp Y2F0ZSBhbHJlYWR5LiAgKi8NCiAJICAgIG5hcnktPm5leHQgPSAodm5fbmFyeV9vcF90KSh2b2lk ICopLTE7DQogCSAgICBuYXJ5ID0gYWxsb2Nfdm5fbmFyeV9vcF9ub2luaXQgKDIsICZ2bl90YWJs ZXNfaW5zZXJ0X29ic3RhY2spOw0KIAkgICAgaW5pdF92bl9uYXJ5X29wX2Zyb21fcGllY2VzIChu YXJ5LCAyLCBFUV9FWFBSLA0KQEAgLTUwMSw3ICs1MDMsNiBAQCBWTl9JTkZPICh0cmVlIG5hbWUp DQogCSAgICBuYXJ5LT5wcmVkaWNhdGVkX3ZhbHVlcyA9IDA7DQogCSAgICBuYXJ5LT51LnJlc3Vs dCA9IGJvb2xlYW5fZmFsc2Vfbm9kZTsNCiAJICAgIHZuX25hcnlfb3BfaW5zZXJ0X2ludG8gKG5h cnksIHZhbGlkX2luZm8tPm5hcnkpOw0KLQkgICAgZ2NjX2Fzc2VydCAobmFyeS0+dW53aW5kX3Rv ID09IE5VTEwpOw0KIAkgICAgbGFzdF9pbnNlcnRlZF9uYXJ5ID0gbmFyeS0+bmV4dDsNCiAJICAg IG5hcnktPm5leHQgPSAodm5fbmFyeV9vcF90KSh2b2lkICopLTE7DQogCSAgICBpZiAoZHVtcF9m aWxlICYmIChkdW1wX2ZsYWdzICYgVERGX0RFVEFJTFMpKQ0KQEAgLTM4NTAsNiArMzg1MSwxMTQg QEAgdm5fcmVmZXJlbmNlX2luc2VydF9waWVjZXMgKHRyZWUgdnVzZSwgYWxpYXNfc2V0X3R5cGUg c2V0LA0KICAgcmV0dXJuIHZyMTsNCiB9DQogDQorc3RhdGljIGJvb2wNCitkb21pbmF0ZWRfYnlf cF93X3VuZXggKGJhc2ljX2Jsb2NrIGJiMSwgYmFzaWNfYmxvY2sgYmIyLCBib29sKTsNCisNCitz dGF0aWMgdHJlZQ0KK3ZuX25hcnlfb3BfZ2V0X3ByZWRpY2F0ZWRfdmFsdWUgKHZuX25hcnlfb3Bf dCB2bm8sIGJhc2ljX2Jsb2NrIGJiKQ0KK3sNCisgIGlmICghIHZuby0+cHJlZGljYXRlZF92YWx1 ZXMpDQorICAgIHJldHVybiB2bm8tPnUucmVzdWx0Ow0KKyAgZm9yICh2bl9wdmFsICp2YWwgPSB2 bm8tPnUudmFsdWVzOyB2YWw7IHZhbCA9IHZhbC0+bmV4dCkNCisgICAgZm9yICh1bnNpZ25lZCBp ID0gMDsgaSA8IHZhbC0+bjsgKytpKQ0KKyAgICAgIHsNCisJLyogRG8gbm90IGhhbmRsZSBiYWNr ZWRnZSBleGVjdXRhYmlsaXR5IG9wdGltaXN0aWNhbGx5IHNpbmNlDQorCSB3aGVuIGZpZ3VyaW5n IG91dCB3aGV0aGVyIHRvIGl0ZXJhdGUgd2UgZG8gbm90IGNvbnNpZGVyDQorCSBjaGFuZ2VkIHBy ZWRpY2F0aW9uLiAgKi8NCisJaWYgKGRvbWluYXRlZF9ieV9wX3dfdW5leCAoDQorCSAgICAgIGJi LCBCQVNJQ19CTE9DS19GT1JfRk4gKGNmdW4sIHZhbC0+dmFsaWRfZG9taW5hdGVkX2J5X3BbaV0p LA0KKwkgICAgICBmYWxzZSkpDQorCXJldHVybiB2YWwtPnJlc3VsdDsNCisgICAgICB9DQorICBy ZXR1cm4gTlVMTF9UUkVFOw0KK30NCisNCisvKiBXaGV0aGVyIGEgcHJlZGljYXRlZCB2YWx1ZSBW QUwgaXMgdmFsaWQgYXQgQkIuICAqLw0KKw0KK3N0YXRpYyBpbmxpbmUgYm9vbA0KK2lzX3ZuX3Zh bGlkX2F0X2JiICh2bl9wdmFsICp2YWwsIGJhc2ljX2Jsb2NrIGJiKQ0KK3sNCisgIGZvciAodW5z aWduZWQgaSA9IDA7IGkgPCB2YWwtPm47ICsraSkNCisgICAgew0KKyAgICAgIGJhc2ljX2Jsb2Nr IHZhbF9iYg0KKwk9IEJBU0lDX0JMT0NLX0ZPUl9GTiAoY2Z1biwgdmFsLT52YWxpZF9kb21pbmF0 ZWRfYnlfcFtpXSk7DQorICAgICAgaWYgKGRvbWluYXRlZF9ieV9wX3dfdW5leCAoYmIsIHZhbF9i YiwgZmFsc2UpKQ0KKwlyZXR1cm4gdHJ1ZTsNCisgICAgfQ0KKyAgcmV0dXJuIGZhbHNlOw0KK30N CisNCisvKiBMb29rdXAgdGhlIHZhcmlhYmxlIHRoYXQgcmVwcmVzZW50cyBhIHNldCBvZiBlcXVp dmFsZW5jZXMgb2YgTkFNRSBhdA0KKyAgIGJhc2ljLWJsb2NrIEJCLiAgVGhpcyB2YXJpYWJsZSBp cyBjYWxsZWQgdGhlICJlcXVpdmFsZW5jZSBoZWFkIiBvZiBOQU1FLiAgKi8NCisNCitzdGF0aWMg dHJlZQ0KK2xvb2t1cF9lcXVpdl9oZWFkICh0cmVlIG5hbWUsIGJhc2ljX2Jsb2NrIGJiKQ0KK3sN CisgIGlmIChUUkVFX0NPREUgKG5hbWUpICE9IFNTQV9OQU1FKQ0KKyAgICByZXR1cm4gbmFtZTsN CisgIHRyZWUgcmVzdWx0ID0gVk5fSU5GTyAobmFtZSktPnZhbG51bTsNCisgIGlmIChyZXN1bHQg PT0gVk5fVE9QKQ0KKyAgICAvKiBWTl9UT1AgaXMgbm90IGFsbG93ZWQsIG90aGVyd2lzZSBpdCB3 aWxsIGJlIHRvbyBvcHRpbWlzdGljIGZvcg0KKyAgICAgICBub24taXRlcmF0aW5nIG1vZGUuICAq Lw0KKyAgICByZXR1cm4gbmFtZTsNCisgIHZuX25hcnlfb3BfdCB2bnJlc3VsdDsNCisgIC8qIEFz IHdlIGluc2VydCBuZXcgdmFsdWUgYXQgZnJvbnQgaW4gdm5fbmFyeV9vcF9pbnNlcnRfaW50bywg d2UgZG9uJ3QgbmVlZA0KKyAgICAgc2VhcmNoIGl0ZXJhdGl2ZWx5IGZvciB0aGUgbW9zdCBnZW5l cmFsIGVxdWl2LWhlYWQuICAqLw0KKyAgdm5fbmFyeV9vcF9sb29rdXBfcGllY2VzICgxLCBOT1Bf RVhQUiwgVFJFRV9UWVBFIChyZXN1bHQpLCAmcmVzdWx0LA0KKwkJCSAgICAmdm5yZXN1bHQpOw0K KyAgaWYgKHZucmVzdWx0ICYmIHZucmVzdWx0LT5wcmVkaWNhdGVkX3ZhbHVlcykNCisgICAgew0K KyAgICAgIHRyZWUgZXEgPSB2bl9uYXJ5X29wX2dldF9wcmVkaWNhdGVkX3ZhbHVlICh2bnJlc3Vs dCwgYmIpOw0KKyAgICAgIGlmIChlcSkNCisJcmV0dXJuIGVxOw0KKyAgICB9DQorICByZXR1cm4g cmVzdWx0Ow0KK30NCisNCisvKiBMb29rdXAgdGhlICJlcXVpdmFsZW5jZSBoZWFkInMgb2YgT1BT IGF0IEJCLCBhbmQgc3RvcmUgdGhlbSBpbiBUTy4gIE4gaXMgdGhlDQorICAgc2l6ZSBvZiBPUFMu ICAqLw0KKw0KK3N0YXRpYyB2b2lkDQorbG9va3VwX2VxdWl2X2hlYWRzICh1bnNpZ25lZCBuLCB0 cmVlICpvcHMsIHRyZWUgKnRvLCBiYXNpY19ibG9jayBiYikNCit7DQorICBmb3IgKHVuc2lnbmVk IGkgPSAwOyBpIDwgbjsgaSsrKQ0KKyAgICB7DQorICAgICAgdHJlZSBlcXVpdl9oZWFkID0gbG9v a3VwX2VxdWl2X2hlYWQgKG9wc1tpXSwgYmIpOw0KKyAgICAgIGlmIChkdW1wX2ZpbGUgJiYgKGR1 bXBfZmxhZ3MgJiBUREZfREVUQUlMUykgJiYgZXF1aXZfaGVhZCAhPSBvcHNbaV0pDQorCXsNCisJ ICBmcHJpbnRmIChkdW1wX2ZpbGUsICJVc2UgZXF1aXYtaGVhZCAiKTsNCisJICBwcmludF9nZW5l cmljX2V4cHIgKGR1bXBfZmlsZSwgZXF1aXZfaGVhZCwgVERGX05PTkUpOw0KKwkgIGZwcmludGYg KGR1bXBfZmlsZSwgIiBmb3IgIik7DQorCSAgcHJpbnRfZ2VuZXJpY19leHByIChkdW1wX2ZpbGUs IG9wc1tpXSwgVERGX05PTkUpOw0KKwkgIGZwcmludGYgKGR1bXBfZmlsZSwgIlxuIik7DQorCX0N CisgICAgICB0b1tpXSA9IGVxdWl2X2hlYWQ7DQorICAgIH0NCit9DQorDQorLyogUmV0dXJucyB3 aGV0aGVyIGVkZ2UgUFJFRF9FIGlzIGN1cnJlbnRseSBiZWluZyB0cmFja2VkLiAgKi8NCisNCitz dGF0aWMgaW5saW5lIGJvb2wNCit2bl90cmFja2luZ19lZGdlIChlZGdlIHByZWRfZSkNCit7DQor ICBpZiAoIXNpbmdsZV9wcmVkX3AgKHByZWRfZS0+ZGVzdCkpDQorICAgIHsNCisgICAgICAvKiBO ZXZlciByZWNvcmQgZm9yIGJhY2tlZGdlcy4gICovDQorICAgICAgaWYgKHByZWRfZS0+ZmxhZ3Mg JiBFREdFX0RGU19CQUNLKQ0KKwlyZXR1cm4gZmFsc2U7DQorICAgICAgZWRnZV9pdGVyYXRvciBl aTsNCisgICAgICBlZGdlIGU7DQorICAgICAgaW50IGNudCA9IDA7DQorICAgICAgLyogSWdub3Jl IGJhY2tlZGdlcy4gICovDQorICAgICAgRk9SX0VBQ0hfRURHRSAoZSwgZWksIHByZWRfZS0+ZGVz dC0+cHJlZHMpDQorCWlmICghZG9taW5hdGVkX2J5X3AgKENESV9ET01JTkFUT1JTLCBlLT5zcmMs IGUtPmRlc3QpKQ0KKwkgIGNudCsrOw0KKyAgICAgIGlmIChjbnQgIT0gMSkNCisJcmV0dXJuIGZh bHNlOw0KKyAgICB9DQorICByZXR1cm4gdHJ1ZTsNCit9DQorDQogLyogQ29tcHV0ZSBhbmQgcmV0 dXJuIHRoZSBoYXNoIHZhbHVlIGZvciBuYXJ5IG9wZXJhdGlvbiBWQk8xLiAgKi8NCiANCiBzdGF0 aWMgaGFzaHZhbF90DQpAQCAtMzk4Myw2ICs0MDkyLDkgQEAgaW5pdF92bl9uYXJ5X29wX2Zyb21f c3RtdCAodm5fbmFyeV9vcF90IHZubywgZ2Fzc2lnbiAqc3RtdCkNCiAgICAgICBmb3IgKGkgPSAw OyBpIDwgdm5vLT5sZW5ndGg7ICsraSkNCiAJdm5vLT5vcFtpXSA9IGdpbXBsZV9vcCAoc3RtdCwg aSArIDEpOw0KICAgICB9DQorICAvKiBJbnNlcnQgYW5kIGxvb2t1cCBOLWFyeSByZXN1bHRzIGJ5 IHRoZSBvcGVyYW5kcycgZXF1aXZhbGVuY2UgaGVhZHMuICAqLw0KKyAgaWYgKGdpbXBsZV9iYiAo c3RtdCkpDQorICAgIGxvb2t1cF9lcXVpdl9oZWFkcyAodm5vLT5sZW5ndGgsIHZuby0+b3AsIHZu by0+b3AsIGdpbXBsZV9iYiAoc3RtdCkpOw0KIH0NCiANCiAvKiBDb21wdXRlIHRoZSBoYXNoY29k ZSBmb3IgVk5PIGFuZCBsb29rIGZvciBpdCBpbiB0aGUgaGFzaCB0YWJsZTsNCkBAIC00MTI4LDEy ICs0MjQwLDEwIEBAIHZuX25hcnlfb3BfaW5zZXJ0X2ludG8gKHZuX25hcnlfb3BfdCB2bm8sIHZu X25hcnlfb3BfdGFibGVfdHlwZSAqdGFibGUpDQogCSAgICA9IEJBU0lDX0JMT0NLX0ZPUl9GTiAo Y2Z1biwgdm5vLT51LnZhbHVlcy0+dmFsaWRfZG9taW5hdGVkX2J5X3BbMF0pOw0KIAkgIHZuX3B2 YWwgKm52YWwgPSB2bm8tPnUudmFsdWVzOw0KIAkgIHZuX3B2YWwgKipuZXh0ID0gJnZuby0+dS52 YWx1ZXM7DQotCSAgYm9vbCBmb3VuZCA9IGZhbHNlOw0KIAkgIGZvciAodm5fcHZhbCAqdmFsID0g KCpzbG90KS0+dS52YWx1ZXM7IHZhbDsgdmFsID0gdmFsLT5uZXh0KQ0KIAkgICAgew0KIAkgICAg ICBpZiAoZXhwcmVzc2lvbnNfZXF1YWxfcCAodmFsLT5yZXN1bHQsIG52YWwtPnJlc3VsdCkpDQog CQl7DQotCQkgIGZvdW5kID0gdHJ1ZTsNCiAJCSAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZh bC0+bjsgKytpKQ0KIAkJICAgIHsNCiAJCSAgICAgIGJhc2ljX2Jsb2NrIHZhbF9iYg0KQEAgLTQx NDcsMTcgKzQyNTcsMTUgQEAgdm5fbmFyeV9vcF9pbnNlcnRfaW50byAodm5fbmFyeV9vcF90IHZu bywgdm5fbmFyeV9vcF90YWJsZV90eXBlICp0YWJsZSkNCiAJCQlnY2NfdW5yZWFjaGFibGUgKCk7 DQogCQkgICAgfQ0KIAkJICAvKiBBcHBlbmQgdmFsdWUuICAqLw0KLQkJICAqbmV4dCA9ICh2bl9w dmFsICopIG9ic3RhY2tfYWxsb2MgKCZ2bl90YWJsZXNfb2JzdGFjaywNCi0JCQkJCQkgICAgIHNp emVvZiAodm5fcHZhbCkNCi0JCQkJCQkgICAgICsgdmFsLT5uICogc2l6ZW9mIChpbnQpKTsNCi0J CSAgKCpuZXh0KS0+bmV4dCA9IE5VTEw7DQotCQkgICgqbmV4dCktPnJlc3VsdCA9IHZhbC0+cmVz dWx0Ow0KLQkJICAoKm5leHQpLT5uID0gdmFsLT5uICsgMTsNCi0JCSAgbWVtY3B5ICgoKm5leHQp LT52YWxpZF9kb21pbmF0ZWRfYnlfcCwNCi0JCQkgIHZhbC0+dmFsaWRfZG9taW5hdGVkX2J5X3As DQorCQkgIG52YWwgPSAodm5fcHZhbCAqKSBvYnN0YWNrX2FsbG9jICgmdm5fdGFibGVzX29ic3Rh Y2ssDQorCQkJCQkJICAgIHNpemVvZiAodm5fcHZhbCkNCisJCQkJCQkgICAgICArIHZhbC0+biAq IHNpemVvZiAoaW50KSk7DQorCQkgIG52YWwtPm5leHQgPSBOVUxMOw0KKwkJICBudmFsLT5yZXN1 bHQgPSB2YWwtPnJlc3VsdDsNCisJCSAgbnZhbC0+biA9IHZhbC0+biArIDE7DQorCQkgIG1lbWNw eSAobnZhbC0+dmFsaWRfZG9taW5hdGVkX2J5X3AsIHZhbC0+dmFsaWRfZG9taW5hdGVkX2J5X3As DQogCQkJICB2YWwtPm4gKiBzaXplb2YgKGludCkpOw0KLQkJICAoKm5leHQpLT52YWxpZF9kb21p bmF0ZWRfYnlfcFt2YWwtPm5dID0gdm5vX2JiLT5pbmRleDsNCi0JCSAgbmV4dCA9ICYoKm5leHQp LT5uZXh0Ow0KKwkJICBudmFsLT52YWxpZF9kb21pbmF0ZWRfYnlfcFt2YWwtPm5dID0gdm5vX2Ji LT5pbmRleDsNCiAJCSAgaWYgKGR1bXBfZmlsZSAmJiAoZHVtcF9mbGFncyAmIFRERl9ERVRBSUxT KSkNCiAJCSAgICBmcHJpbnRmIChkdW1wX2ZpbGUsICJBcHBlbmRpbmcgcHJlZGljYXRlIHRvIHZh bHVlLlxuIik7DQogCQkgIGNvbnRpbnVlOw0KQEAgLTQxNzAsOCArNDI3OCwxMCBAQCB2bl9uYXJ5 X29wX2luc2VydF9pbnRvICh2bl9uYXJ5X29wX3Qgdm5vLCB2bl9uYXJ5X29wX3RhYmxlX3R5cGUg KnRhYmxlKQ0KIAkgICAgICAoKm5leHQpLT5uZXh0ID0gTlVMTDsNCiAJICAgICAgbmV4dCA9ICYo Km5leHQpLT5uZXh0Ow0KIAkgICAgfQ0KLQkgIGlmICghZm91bmQpDQotCSAgICAqbmV4dCA9IG52 YWw7DQorCSAgLyogUHV0IG5ldyByZXN1bHQgYXQgZnJvbnQsIHNvIGxvb2t1cF9lcXVpdl9oZWFk IGNhbiBmaW5kIHRoZSBsYXN0DQorCSAgICAgaW5zZXJ0ZWQgKG1vc3QgZ2VuZXJhbCkgcmVzdWx0 LiAgKi8NCisJICBudmFsLT5uZXh0ID0gdm5vLT51LnZhbHVlczsNCisJICB2bm8tPnUudmFsdWVz ID0gbnZhbDsNCiANCiAJICAqc2xvdCA9IHZubzsNCiAJICB2bm8tPm5leHQgPSBsYXN0X2luc2Vy dGVkX25hcnk7DQpAQCAtNDIxNiw2ICs0MzI2LDg2IEBAIHZuX25hcnlfb3BfaW5zZXJ0X3BpZWNl cyAodW5zaWduZWQgaW50IGxlbmd0aCwgZW51bSB0cmVlX2NvZGUgY29kZSwNCiAgIHJldHVybiB2 bl9uYXJ5X29wX2luc2VydF9pbnRvICh2bm8xLCB2YWxpZF9pbmZvLT5uYXJ5KTsNCiB9DQogDQor LyogU2ltaWxhciB3aXRoIHZuX25hcnlfb3BfaW5zZXJ0X3BpZWNlcywgYnV0IGluc2VydCBhcyBw cmVkaWNhdGVkIHZhbHVlcy4gICovDQorDQorc3RhdGljIHZuX25hcnlfb3BfdA0KK3ZuX25hcnlf b3BfaW5zZXJ0X3BpZWNlc19wcmVkaWNhdGVkXzEgKHVuc2lnbmVkIGludCBsZW5ndGgsIGVudW0g dHJlZV9jb2RlIGNvZGUsDQorCQkJCSAgICAgICB0cmVlIHR5cGUsIHRyZWUgKm9wcywgdHJlZSBy ZXN1bHQsDQorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgdmFsdWVfaWQsIGJhc2ljX2Jsb2NrIGJi KQ0KK3sNCisgIHZuX25hcnlfb3BfdCB2bm8xID0gYWxsb2Nfdm5fbmFyeV9vcCAobGVuZ3RoLCBO VUxMX1RSRUUsIHZhbHVlX2lkKTsNCisgIGluaXRfdm5fbmFyeV9vcF9mcm9tX3BpZWNlcyAodm5v MSwgbGVuZ3RoLCBjb2RlLCB0eXBlLCBvcHMpOw0KKyAgdm5vMS0+cHJlZGljYXRlZF92YWx1ZXMg PSAxOw0KKyAgdm5vMS0+dS52YWx1ZXMNCisgICAgPSAodm5fcHZhbCAqKSBvYnN0YWNrX2FsbG9j ICgmdm5fdGFibGVzX29ic3RhY2ssIHNpemVvZiAodm5fcHZhbCkpOw0KKyAgdm5vMS0+dS52YWx1 ZXMtPm5leHQgPSBOVUxMOw0KKyAgdm5vMS0+dS52YWx1ZXMtPnJlc3VsdCA9IHJlc3VsdDsNCisg IHZubzEtPnUudmFsdWVzLT5uID0gMTsNCisgIHZubzEtPnUudmFsdWVzLT52YWxpZF9kb21pbmF0 ZWRfYnlfcFswXSA9IGJiLT5pbmRleDsNCisgIHJldHVybiB2bl9uYXJ5X29wX2luc2VydF9pbnRv ICh2bm8xLCB2YWxpZF9pbmZvLT5uYXJ5KTsNCit9DQorDQorLyogRm9sZCBOLWFyeSBleHByZXNz aW9uIG9mIGVxdWl2LWhlYWRzLCByZXR1cm4gTlVMTF9UUkVFIGlmIG5vdCBmb2xkZWQuICAqLw0K Kw0KK3N0YXRpYyB0cmVlDQorZm9sZF9jb25zdF9mcm9tX2VxdWl2X2hlYWRzICh1bnNpZ25lZCBs ZW5ndGgsIHRyZWVfY29kZSBvcGNvZGUsIHRyZWUgKm9wLA0KKwkJCSAgICAgdHJlZSB0eXBlKQ0K K3sNCisgIHRyZWUgcmVzdWx0ID0gTlVMTF9UUkVFOw0KKyAgLyogV2UncmUgdXNpbmcgZXF1aXYt aGVhZHMsIGkuZS4gdGhlIG1vc3QgZ2VuZXJhbCBvcGVyYW5kcywgc2hvcnRjdXQgZm9yDQorICAg ICBzaXR1YXRpb25zIHRoYXQgY2FuIGZvbGQuICAqLw0KKyAgc3dpdGNoIChsZW5ndGgpDQorICAg IHsNCisgICAgY2FzZSAxOg0KKyAgICAgIGlmIChDT05TVEFOVF9DTEFTU19QIChvcFswXSkpDQor CXJlc3VsdA0KKwkgID0gZ2ltcGxlX3NpbXBsaWZ5IChvcGNvZGUsIHR5cGUsIG9wWzBdLCBOVUxM LCBub19mb2xsb3dfc3NhX2VkZ2VzKTsNCisgICAgICBicmVhazsNCisgICAgY2FzZSAyOg0KKyAg ICAgIGlmICgoQ09OU1RBTlRfQ0xBU1NfUCAob3BbMF0pICYmIENPTlNUQU5UX0NMQVNTX1AgKG9w WzFdKSkNCisJICB8fCBvcFswXSA9PSBvcFsxXSkNCisJcmVzdWx0ID0gZ2ltcGxlX3NpbXBsaWZ5 IChvcGNvZGUsIHR5cGUsIG9wWzBdLCBvcFsxXSwgTlVMTCwNCisJCQkJICBub19mb2xsb3dfc3Nh X2VkZ2VzKTsNCisgICAgICBicmVhazsNCisgICAgY2FzZSAzOg0KKyAgICAgIGlmIChDT05TVEFO VF9DTEFTU19QIChvcFswXSkgJiYgQ09OU1RBTlRfQ0xBU1NfUCAob3BbMV0pDQorCSAgJiYgQ09O U1RBTlRfQ0xBU1NfUCAob3BbMl0pKQ0KKwlyZXN1bHQgPSBnaW1wbGVfc2ltcGxpZnkgKG9wY29k ZSwgdHlwZSwgb3BbMF0sIG9wWzFdLCBvcFsyXSwgTlVMTCwNCisJCQkJICBub19mb2xsb3dfc3Nh X2VkZ2VzKTsNCisgICAgICBicmVhazsNCisgICAgZGVmYXVsdDoNCisgICAgICBicmVhazsNCisg ICAgfQ0KKyAgaWYgKHJlc3VsdCAmJiAhdXNlbGVzc190eXBlX2NvbnZlcnNpb25fcCAodHlwZSwg VFJFRV9UWVBFIChyZXN1bHQpKSkNCisgICAgcmVzdWx0ID0gZm9sZF9jb252ZXJ0ICh0eXBlLCBy ZXN1bHQpOw0KKyAgcmV0dXJuIHJlc3VsdDsNCit9DQorDQorLyogSW5zZXJ0IGEgYmFjay1yZWZl cmVuY2UgdG8gdm5fbmFyeV9vcF90IGluIHZuX3NzYV9hdXguICAqLw0KKw0KK3N0YXRpYyBpbmxp bmUgdm9pZA0KK3B1c2hfbmV3X25hcnlfcmVmICh2bl9uYXJ5X29wX3Qgc2xvdCwgdm5fc3NhX2F1 eF90IGluZm8pDQorew0KKyAgbmFyeV9yZWYgKnJlZjsNCisgIGlmIChuYXJ5X3JlZl9mcmVlbGlz dCkNCisgICAgew0KKyAgICAgIHJlZiA9IG5hcnlfcmVmX2ZyZWVsaXN0Ow0KKyAgICAgIG5hcnlf cmVmX2ZyZWVsaXN0ID0gbmFyeV9yZWZfZnJlZWxpc3QtPm5leHQ7DQorICAgIH0NCisgIGVsc2UN CisgICAgcmVmID0gWE9CTkVXICgmdm5fc3NhX2F1eF9vYnN0YWNrLCBuYXJ5X3JlZik7DQorICBy ZWYtPm5leHQgPSBpbmZvLT5yZWY7DQorICByZWYtPm5leHRfdW5kbyA9IGxhc3RfcHVzaGVkX25h cnlfcmVmOw0KKyAgcmVmLT5zbG90ID0gc2xvdDsNCisgIGxhc3RfcHVzaGVkX25hcnlfcmVmID0g aW5mbzsNCisgIGluZm8tPnJlZiA9IHJlZjsNCisgICsraW5mby0+bnVtX25hcnlfcmVmOw0KKyAg Z2NjX2Fzc2VydCAoaW5mby0+bnVtX25hcnlfcmVmID4gMCk7DQorfQ0KKw0KK3N0YXRpYyB2bl9u YXJ5X29wX3QNCit2YWxfZXF1aXZfaW5zZXJ0ICh0cmVlIG9wMSwgdHJlZSBvcDIsIGVkZ2UgZSk7 DQorDQogc3RhdGljIHZuX25hcnlfb3BfdA0KIHZuX25hcnlfb3BfaW5zZXJ0X3BpZWNlc19wcmVk aWNhdGVkICh1bnNpZ25lZCBpbnQgbGVuZ3RoLCBlbnVtIHRyZWVfY29kZSBjb2RlLA0KIAkJCQkg ICAgIHRyZWUgdHlwZSwgdHJlZSAqb3BzLA0KQEAgLTQyMjMsMjEgKzQ0MTMsMTUgQEAgdm5fbmFy eV9vcF9pbnNlcnRfcGllY2VzX3ByZWRpY2F0ZWQgKHVuc2lnbmVkIGludCBsZW5ndGgsIGVudW0g dHJlZV9jb2RlIGNvZGUsDQogCQkJCSAgICAgZWRnZSBwcmVkX2UpDQogew0KICAgLyogPz8/ICBD dXJyZW50bHkgdHJhY2tpbmcgQkJzLiAgKi8NCi0gIGlmICghIHNpbmdsZV9wcmVkX3AgKHByZWRf ZS0+ZGVzdCkpDQotICAgIHsNCi0gICAgICAvKiBOZXZlciByZWNvcmQgZm9yIGJhY2tlZGdlcy4g ICovDQotICAgICAgaWYgKHByZWRfZS0+ZmxhZ3MgJiBFREdFX0RGU19CQUNLKQ0KLQlyZXR1cm4g TlVMTDsNCi0gICAgICBlZGdlX2l0ZXJhdG9yIGVpOw0KLSAgICAgIGVkZ2UgZTsNCi0gICAgICBp bnQgY250ID0gMDsNCi0gICAgICAvKiBJZ25vcmUgYmFja2VkZ2VzLiAgKi8NCi0gICAgICBGT1Jf RUFDSF9FREdFIChlLCBlaSwgcHJlZF9lLT5kZXN0LT5wcmVkcykNCi0JaWYgKCEgZG9taW5hdGVk X2J5X3AgKENESV9ET01JTkFUT1JTLCBlLT5zcmMsIGUtPmRlc3QpKQ0KLQkgIGNudCsrOw0KLSAg ICAgIGlmIChjbnQgIT0gMSkNCi0JcmV0dXJuIE5VTEw7DQotICAgIH0NCisgIGlmICghdm5fdHJh Y2tpbmdfZWRnZSAocHJlZF9lKSkNCisgICAgcmV0dXJuIE5VTEw7DQorICAvKiBFcXVpdmFsZW5j ZSBjYW4gcmVwcmVzZW50IHRoaXMuICAqLw0KKyAgaWYgKGNvZGUgPT0gRVFfRVhQUiAmJiByZXN1 bHQgPT0gYm9vbGVhbl90cnVlX25vZGUpDQorICAgIHJldHVybiB2YWxfZXF1aXZfaW5zZXJ0IChv cHNbMF0sIG9wc1sxXSwgcHJlZF9lKTsNCisgIC8qIExlYXZlIHRoaXMgZm9yIGludmVydGVkIGNv bmRpdGlvbi4gICovDQorICBpZiAoY29kZSA9PSBORV9FWFBSICYmIHJlc3VsdCA9PSBib29sZWFu X2ZhbHNlX25vZGUpDQorICAgIHJldHVybiBOVUxMOw0KKw0KICAgaWYgKGR1bXBfZmlsZSAmJiAo ZHVtcF9mbGFncyAmIFRERl9ERVRBSUxTKQ0KICAgICAgIC8qID8/PyAgRml4IGR1bXBpbmcsIGJ1 dCBjdXJyZW50bHkgd2Ugb25seSBnZXQgY29tcGFyaXNvbnMuICAqLw0KICAgICAgICYmIFRSRUVf Q09ERV9DTEFTUyAoY29kZSkgPT0gdGNjX2NvbXBhcmlzb24pDQpAQCAtNDI1MCwzNiArNDQzNCwy NTIgQEAgdm5fbmFyeV9vcF9pbnNlcnRfcGllY2VzX3ByZWRpY2F0ZWQgKHVuc2lnbmVkIGludCBs ZW5ndGgsIGVudW0gdHJlZV9jb2RlIGNvZGUsDQogICAgICAgZnByaW50ZiAoZHVtcF9maWxlLCAi ID09ICVzXG4iLA0KIAkgICAgICAgaW50ZWdlcl96ZXJvcCAocmVzdWx0KSA/ICJmYWxzZSIgOiAi dHJ1ZSIpOw0KICAgICB9DQotICB2bl9uYXJ5X29wX3Qgdm5vMSA9IGFsbG9jX3ZuX25hcnlfb3Ag KGxlbmd0aCwgTlVMTF9UUkVFLCB2YWx1ZV9pZCk7DQotICBpbml0X3ZuX25hcnlfb3BfZnJvbV9w aWVjZXMgKHZubzEsIGxlbmd0aCwgY29kZSwgdHlwZSwgb3BzKTsNCi0gIHZubzEtPnByZWRpY2F0 ZWRfdmFsdWVzID0gMTsNCi0gIHZubzEtPnUudmFsdWVzID0gKHZuX3B2YWwgKikgb2JzdGFja19h bGxvYyAoJnZuX3RhYmxlc19vYnN0YWNrLA0KLQkJCQkJICAgICAgc2l6ZW9mICh2bl9wdmFsKSk7 DQotICB2bm8xLT51LnZhbHVlcy0+bmV4dCA9IE5VTEw7DQotICB2bm8xLT51LnZhbHVlcy0+cmVz dWx0ID0gcmVzdWx0Ow0KLSAgdm5vMS0+dS52YWx1ZXMtPm4gPSAxOw0KLSAgdm5vMS0+dS52YWx1 ZXMtPnZhbGlkX2RvbWluYXRlZF9ieV9wWzBdID0gcHJlZF9lLT5kZXN0LT5pbmRleDsNCi0gIHJl dHVybiB2bl9uYXJ5X29wX2luc2VydF9pbnRvICh2bm8xLCB2YWxpZF9pbmZvLT5uYXJ5KTsNCisg IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykNCisgICAgZ2NjX2NoZWNraW5n X2Fzc2VydCAobG9va3VwX2VxdWl2X2hlYWQgKG9wc1tpXSwgcHJlZF9lLT5kZXN0KSA9PSBvcHNb aV0pOw0KKw0KKyAgLyogU2tpcCBpZiB0aGUgcmVzdWx0IGlzIGtub3duLiAoQ2F1c2VkIGJ5IHJl LWluc2VydGluZyBwcmVkaWNhdGVzLikgICovDQorICB0cmVlIHNpbXBsaWZpZWQgPSBmb2xkX2Nv bnN0X2Zyb21fZXF1aXZfaGVhZHMgKGxlbmd0aCwgY29kZSwgb3BzLCB0eXBlKTsNCisgIGlmIChz aW1wbGlmaWVkKQ0KKyAgICB7DQorICAgICAgaWYgKGR1bXBfZmlsZSAmJiAoZHVtcF9mbGFncyAm IFRERl9ERVRBSUxTKSkNCisJew0KKwkgIGZwcmludGYgKGR1bXBfZmlsZSwgIlJlc3VsdCBpcyBr bm93bjogIik7DQorCSAgcHJpbnRfZ2VuZXJpY19leHByIChkdW1wX2ZpbGUsIHNpbXBsaWZpZWQs IFRERl9OT05FKTsNCisJICBmcHJpbnRmIChkdW1wX2ZpbGUsICIsIHNraXBwZWQuXG4iKTsNCisJ fQ0KKyAgICAgIHJldHVybiBOVUxMOw0KKyAgICB9DQorDQorICB2bl9uYXJ5X29wX3QgdmFsDQor ICAgID0gdm5fbmFyeV9vcF9pbnNlcnRfcGllY2VzX3ByZWRpY2F0ZWRfMSAobGVuZ3RoLCBjb2Rl LCB0eXBlLCBvcHMsDQorCQkJCQkgICAgIHJlc3VsdCwgdmFsdWVfaWQsIHByZWRfZS0+ZGVzdCk7 DQorICAvKiBJbnNlcnQgYmFjay1yZWZzIChvcGVyYW5kLT5zbG90KSB0byB2bl9zc2FfYXV4IHN0 cnVjdHVyZS4gICovDQorICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspDQor ICAgIGlmIChUUkVFX0NPREUgKG9wc1tpXSkgPT0gU1NBX05BTUUpDQorICAgICAgew0KKwl2bl9z c2FfYXV4X3QgaW5mbyA9IFZOX0lORk8gKG9wc1tpXSk7DQorCWlmIChpbmZvLT52YWxudW0gPT0g b3BzW2ldKQ0KKwkgIHB1c2hfbmV3X25hcnlfcmVmICh2YWwsIGluZm8pOw0KKyAgICAgIH0NCisg IHJldHVybiB2YWw7DQogfQ0KIA0KLXN0YXRpYyBib29sDQotZG9taW5hdGVkX2J5X3Bfd191bmV4 IChiYXNpY19ibG9jayBiYjEsIGJhc2ljX2Jsb2NrIGJiMiwgYm9vbCk7DQorLyogUmVjb3JkIHRo ZSBlcXVpdmFsZW5jZSBvZiBPUDEgYW5kIE9QMiBvbiBlZGdlIEUuICAqLw0KIA0KLXN0YXRpYyB0 cmVlDQotdm5fbmFyeV9vcF9nZXRfcHJlZGljYXRlZF92YWx1ZSAodm5fbmFyeV9vcF90IHZubywg YmFzaWNfYmxvY2sgYmIpDQorc3RhdGljIHZuX25hcnlfb3BfdA0KK3ZhbF9lcXVpdl9pbnNlcnQg KHRyZWUgb3AxLCB0cmVlIG9wMiwgZWRnZSBlKQ0KIHsNCi0gIGlmICghIHZuby0+cHJlZGljYXRl ZF92YWx1ZXMpDQotICAgIHJldHVybiB2bm8tPnUucmVzdWx0Ow0KKyAgLyogUmVjb3JkIGJ5IGVx dWl2YWxlbmNlIGhlYWRzLiAgKi8NCisgIGJhc2ljX2Jsb2NrIGJiID0gZS0+ZGVzdDsNCisgIHRy ZWUgbGhzID0gbG9va3VwX2VxdWl2X2hlYWQgKG9wMSwgYmIpOw0KKyAgdHJlZSByaHMgPSBsb29r dXBfZXF1aXZfaGVhZCAob3AyLCBiYik7DQorICBpZiAobGhzID09IHJocykNCisgICAgcmV0dXJu IE5VTEw7DQorICAvKiBTZXQgUkhTIHRvIGJlIG5ldyBlcXVpdi1oZWFkIGZvciBMSFMuICBMSFMg bXVzdCBiZSBTU0FfTkFNRS4gICovDQorICBpZiAoVFJFRV9DT0RFIChsaHMpICE9IFNTQV9OQU1F KQ0KKyAgICB7DQorICAgICAgaWYgKFRSRUVfQ09ERSAocmhzKSA9PSBTU0FfTkFNRSkNCisJc3Rk Ojpzd2FwIChsaHMsIHJocyk7DQorICAgICAgZWxzZQ0KKwlyZXR1cm4gTlVMTDsNCisgICAgfQ0K KyAgdm5fc3NhX2F1eF90IHJoc19pbmZvID0gTlVMTCwgbGhzX2luZm8gPSBWTl9JTkZPIChsaHMp Ow0KKw0KKyAgLyogQ2hvb3NlIHRoZSBoYW5kLXNpZGUgd2l0aCBtb3JlIHJlY29yZGVkIG4tYXJ5 IGV4cHJlc3Npb25zIGFzIG5ldw0KKyAgICAgZXF1aXZhbGVuY2UgaGVhZCwgdG8gbWFrZSBmZXdl ciByZS1pbnNlcnRpb25zLiAgKi8NCisgIGlmIChUUkVFX0NPREUgKHJocykgPT0gU1NBX05BTUUp DQorICAgIHsNCisgICAgICByaHNfaW5mbyA9IFZOX0lORk8gKHJocyk7DQorICAgICAgaWYgKHJo c19pbmZvLT5udW1fbmFyeV9yZWYgPCBsaHNfaW5mby0+bnVtX25hcnlfcmVmKQ0KKwl7DQorCSAg c3RkOjpzd2FwIChsaHMsIHJocyk7DQorCSAgc3RkOjpzd2FwIChyaHNfaW5mbywgbGhzX2luZm8p Ow0KKwl9DQorICAgIH0NCisNCisgIGlmIChkdW1wX2ZpbGUgJiYgKGR1bXBfZmxhZ3MgJiBUREZf REVUQUlMUykpDQorICAgIHsNCisgICAgICBmcHJpbnRmIChkdW1wX2ZpbGUsICJSZWNvcmRpbmcg ZXF1aXZhbGVuY2Ugb2YgIik7DQorICAgICAgcHJpbnRfZ2VuZXJpY19leHByIChkdW1wX2ZpbGUs IGxocyk7DQorICAgICAgZnByaW50ZiAoZHVtcF9maWxlLCAiIGFuZCAiKTsNCisgICAgICBwcmlu dF9nZW5lcmljX2V4cHIgKGR1bXBfZmlsZSwgcmhzKTsNCisgICAgICBmcHJpbnRmIChkdW1wX2Zp bGUsICIgYXQgQkIlZFxuIiwgYmItPmluZGV4KTsNCisgICAgfQ0KKyAgLyogUmVjb3JkIGVxdWl2 YWxlbmNlIGFzIHVuYXJ5IE5PUF9FWFBSLiAgKi8NCisgIHZuX25hcnlfb3BfdCB2YWwNCisgICAg PSB2bl9uYXJ5X29wX2luc2VydF9waWVjZXNfcHJlZGljYXRlZF8xICgxLCBOT1BfRVhQUiwgVFJF RV9UWVBFIChsaHMpLA0KKwkJCQkJICAgICAmbGhzLCByaHMsIDAsIGJiKTsNCisgIC8qIEJhY2st cmVmIGZvciBlcXVpdmFsZW5jZXMgaXMgcmVzdWx0LT5zbG90IHJhdGhlciB0aGFuIG9wLT5zbG90 LCBzbyB0aGF0DQorICAgICB3aGVuIG5ldyBlcXVpdi1oZWFkIGlzIGFwcGVuZGVkLCB3ZSBjYW4g dXBkYXRlIHRoZW0uICAqLw0KKyAgaWYgKFRSRUVfQ09ERSAocmhzKSA9PSBTU0FfTkFNRSkNCisg ICAgcHVzaF9uZXdfbmFyeV9yZWYgKHZhbCwgcmhzX2luZm8pOw0KKw0KKyAgLyogSXRlcmF0ZSBv biBMSFMncyByZWZlcmVuY2VzLCBmaXJzdCB1cGRhdGUgZXF1aXYtaGVhZHMsIHRoZW4gcmUtaW5z ZXJ0DQorICAgICBmb3JtZXIgcHJlZGljYXRlcywgc28gdGhhdCB0aGUgcmVzdWx0IHdpbGwgYmUg bGF0ZXN0LiAgKi8NCisgIGF1dG9fdmVjPHZuX25hcnlfb3BfdD4gcHJlZGljYXRlczsNCisgIGF1 dG9fdmVjPHRyZWU+IHJlc3VsdHM7DQorICB2bl9uYXJ5X29wX3Qgc2xvdDsNCisgIHRyZWUgb2xk X2hlYWQgPSBsaHNfaW5mby0+dmFsbnVtOw0KKyAgbmFyeV9yZWYgKnJlZiA9IGxoc19pbmZvLT5y ZWY7DQorICBmb3IgKDsgcmVmOyByZWYgPSByZWYtPm5leHQpDQorICAgIHsNCisgICAgICBzbG90 ID0gcmVmLT5zbG90Ow0KKyAgICAgIGlmICghc2xvdC0+cHJlZGljYXRlZF92YWx1ZXMpDQorCWNv bnRpbnVlOw0KKyAgICAgIC8qIFVwZGF0ZSByZWNvcmRlZCBlcXVpdmFsZW5jZXMgd2l0aCBuZXcg ZXF1aXYtaGVhZC4gICovDQorICAgICAgaWYgKHNsb3QtPm9wY29kZSA9PSBOT1BfRVhQUiAmJiBz bG90LT5sZW5ndGggPT0gMSkNCisJew0KKwkgIGlmIChzbG90LT5vcFswXSA9PSByaHMpDQorCSAg ICBjb250aW51ZTsNCisJICBmb3IgKHZuX3B2YWwgKnB2YWwgPSBzbG90LT51LnZhbHVlczsgcHZh bDsgcHZhbCA9IHB2YWwtPm5leHQpDQorCSAgICBpZiAocHZhbC0+cmVzdWx0ID09IG9sZF9oZWFk ICYmIGlzX3ZuX3ZhbGlkX2F0X2JiIChwdmFsLCBiYikpDQorCSAgICAgIHsNCisJCWlmIChkdW1w X2ZpbGUgJiYgKGR1bXBfZmxhZ3MgJiBUREZfREVUQUlMUykpDQorCQkgIHsNCisJCSAgICBmcHJp bnRmIChkdW1wX2ZpbGUsICJVcGRhdGluZyBlcXVpdi1oZWFkIG9mICIpOw0KKwkJICAgIHByaW50 X2dlbmVyaWNfZXhwciAoZHVtcF9maWxlLCBzbG90LT5vcFswXSwgVERGX1NMSU0pOw0KKwkJICAg IGZwcmludGYgKGR1bXBfZmlsZSwgIiB0byAiKTsNCisJCSAgICBwcmludF9nZW5lcmljX2V4cHIg KGR1bXBfZmlsZSwgcmhzLCBUREZfU0xJTSk7DQorCQkgICAgZnByaW50ZiAoZHVtcF9maWxlLCAi IGF0IEJCJWRcbiIsIGJiLT5pbmRleCk7DQorCQkgIH0NCisJCXZuX25hcnlfb3BfdCBuZXdfdmFs DQorCQkgID0gdm5fbmFyeV9vcF9pbnNlcnRfcGllY2VzX3ByZWRpY2F0ZWRfMSAoMSwgTk9QX0VY UFIsDQorCQkJCQkJCSAgIHNsb3QtPnR5cGUsIHNsb3QtPm9wLA0KKwkJCQkJCQkgICByaHMsIDAs IGJiKTsNCisJCS8qIFB1c2ggYmFjay1yZWYgKHJlc3VsdC0+c2xvdCkgZm9yIG5ldyBlcXVpdmFs ZW5jZS4gICovDQorCQlpZiAoVFJFRV9DT0RFIChyaHMpID09IFNTQV9OQU1FKQ0KKwkJICBwdXNo X25ld19uYXJ5X3JlZiAobmV3X3ZhbCwgcmhzX2luZm8pOw0KKwkgICAgICB9DQorCX0NCisgICAg ICBlbHNlDQorCS8qIFByZWRpY2F0ZWQgdmFsdWVzIGFyZSBjb2xsZWN0ZWQsIHRvIGJlIHJlLWlu c2VydGVkIGxhdGVyLiAgKi8NCisJZm9yICh2bl9wdmFsICpwdmFsID0gc2xvdC0+dS52YWx1ZXM7 IHB2YWw7IHB2YWwgPSBwdmFsLT5uZXh0KQ0KKwkgIHsNCisJICAgIGlmICghaXNfdm5fdmFsaWRf YXRfYmIgKHB2YWwsIGJiKSkNCisJICAgICAgY29udGludWU7DQorCSAgICBwcmVkaWNhdGVzLnNh ZmVfcHVzaCAoc2xvdCk7DQorCSAgICByZXN1bHRzLnNhZmVfcHVzaCAocHZhbC0+cmVzdWx0KTsN CisJICB9DQorICAgIH0NCisgIHVuc2lnbmVkIGk7DQorICBpZiAocHJlZGljYXRlcy5sZW5ndGgg KCkgPiAwICYmIGR1bXBfZmlsZSAmJiAoZHVtcF9mbGFncyAmIFRERl9ERVRBSUxTKSkNCisgICAg ZnByaW50ZiAoZHVtcF9maWxlLCAiUmUtaW5zZXJ0aW5nICVkIHByZWRpY2F0ZXMuLi5cbiIsDQor CSAgICAgcHJlZGljYXRlcy5sZW5ndGggKCkpOw0KKyAgdHJlZSBuZXdfb3BzWzNdOw0KKyAgRk9S X0VBQ0hfVkVDX0VMVCAocHJlZGljYXRlcywgaSwgc2xvdCkNCisgICAgew0KKyAgICAgIGxvb2t1 cF9lcXVpdl9oZWFkcyAoc2xvdC0+bGVuZ3RoLCBzbG90LT5vcCwgbmV3X29wcywgZS0+ZGVzdCk7 DQorICAgICAgdm5fbmFyeV9vcF9pbnNlcnRfcGllY2VzX3ByZWRpY2F0ZWQgKHNsb3QtPmxlbmd0 aCwgc2xvdC0+b3Bjb2RlLA0KKwkJCQkJICAgc2xvdC0+dHlwZSwgbmV3X29wcywgcmVzdWx0c1tp XSwNCisJCQkJCSAgIHNsb3QtPnZhbHVlX2lkLCBlKTsNCisgICAgfQ0KKyAgcmV0dXJuIHZhbDsN Cit9DQorDQorLyogUmVjb3JkIHRlbXBvcmFyeSBlcXVpdmFsZW5jZXMgZ2VuZXJhdGVkIGJ5IFBI SSBub2RlcywgYW5kIGFyZSB2YWxpZCB3aGVuDQorICAgQkIncyBvdXRnb2luZyBlZGdlIEUgaXMg dGFrZW4uICBWTk8gY29udGFpbnMgdGhlIGludGVyZXN0ZWQgZXhwcmVzc2lvbi4gIElmDQorICAg SU5WRVJTRSBpcyB0cnVlLCBydWxlIG91dCBWTk8ncyByZXN1bHRzIHRoYXQgYXJlIGRpZmZlcmVu dCB3aXRoIFJFU1VMVDsNCisgICBvdGhlcndpc2UgcnVsZSBvdXQgUkVTVUxUIGl0c2VsZi4gICov DQorDQorc3RhdGljIHZvaWQNCityZWNvcmRfZXF1aXZfZnJvbV9wcmV2X3BoaV8xICh2bl9uYXJ5 X29wX3Qgdm5vLCBlZGdlIGUsIGJhc2ljX2Jsb2NrIGJiLA0KKwkJCSAgICAgIHRyZWUgcmVzdWx0 LCBib29sIGludmVyc2UpDQorew0KKyAgaWYgKCEodm5vICYmIHZuby0+cHJlZGljYXRlZF92YWx1 ZXMpKQ0KKyAgICByZXR1cm47DQorDQorICAvKiBQcm9jZXNzIHByZWRpY2F0ZWQgdmFsdWVzIGlu IFZOTywgbG9va2luZyBmb3IgYSBjb25mbGljdGluZyByZXN1bHQsIGFuZA0KKyAgICAgdGhlIGxv Y2F0aW9uJ3Mgc2luZ2xlX3ByZWQgZG9taW5hdGVzIEJCLiAgKi8NCiAgIGZvciAodm5fcHZhbCAq dmFsID0gdm5vLT51LnZhbHVlczsgdmFsOyB2YWwgPSB2YWwtPm5leHQpDQotICAgIGZvciAodW5z aWduZWQgaSA9IDA7IGkgPCB2YWwtPm47ICsraSkNCi0gICAgICAvKiBEbyBub3QgaGFuZGxlIGJh Y2tlZGdlIGV4ZWN1dGFiaWxpdHkgb3B0aW1pc3RpY2FsbHkgc2luY2UNCi0JIHdoZW4gZmlndXJp bmcgb3V0IHdoZXRoZXIgdG8gaXRlcmF0ZSB3ZSBkbyBub3QgY29uc2lkZXINCi0JIGNoYW5nZWQg cHJlZGljYXRpb24uICAqLw0KLSAgICAgIGlmIChkb21pbmF0ZWRfYnlfcF93X3VuZXgNCi0JICAg IChiYiwgQkFTSUNfQkxPQ0tfRk9SX0ZOIChjZnVuLCB2YWwtPnZhbGlkX2RvbWluYXRlZF9ieV9w W2ldKSwNCi0JICAgICBmYWxzZSkpDQotCXJldHVybiB2YWwtPnJlc3VsdDsNCi0gIHJldHVybiBO VUxMX1RSRUU7DQorICAgIHsNCisgICAgICBpZiAoaW52ZXJzZSA/IHZhbC0+cmVzdWx0ID09IHJl c3VsdCA6IHZhbC0+cmVzdWx0ICE9IHJlc3VsdCkNCisJY29udGludWU7DQorICAgICAgLyogRm91 bmQgYSByZXN1bHQgdG8gcnVsZSBvdXQsIHByb2Nlc3MgZWFjaCBsb2NhdGlvbi4gICovDQorICAg ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbC0+bjsgKytpKQ0KKwl7DQorCSAgYmFzaWNf YmxvY2sgYmIxDQorCSAgICA9IEJBU0lDX0JMT0NLX0ZPUl9GTiAoY2Z1biwgdmFsLT52YWxpZF9k b21pbmF0ZWRfYnlfcFtpXSk7DQorCSAgaWYgKCFzaW5nbGVfcHJlZF9wIChiYjEpKQ0KKwkgICAg Y29udGludWU7DQorCSAgYmFzaWNfYmxvY2sgcCA9IHNpbmdsZV9wcmVkIChiYjEpOw0KKwkgIGlm ICghZG9taW5hdGVkX2J5X3Bfd191bmV4IChiYiwgcCwgZmFsc2UpKQ0KKwkgICAgY29udGludWU7 DQorCSAgZ2NjX2Fzc2VydCAoRURHRV9DT1VOVCAocC0+c3VjY3MpID09IDIpOw0KKwkgIC8qIEl0 ZXJhdGUgb24gcG9zc2libGUgcGhpX2JicyAoY2FuIGJlIEJCIGl0c2VsZikuIENvbnNpZGVyaW5n DQorCSAgICAgbm9uLWV4ZWN1dGFibGUgZWRnZXMsIHRoZXJlIGNhbiBiZSBtdWx0aXBsZSBwaGlf YmJzLiAgKi8NCisJICBmb3IgKGJhc2ljX2Jsb2NrIHBoaV9iYiA6IGdldF9kb21pbmF0ZWRfYnkg KENESV9ET01JTkFUT1JTLCBwKSkNCisJICAgIHsNCisJICAgICAgaWYgKCFkb21pbmF0ZWRfYnlf cF93X3VuZXggKGJiLCBwaGlfYmIsIGZhbHNlKSkNCisJCWNvbnRpbnVlOw0KKwkgICAgICAvKiBQ cm9jZXNzIFBISXMsIHJ1bGUgb3V0IGluY29taW5nIGVkZ2VzIHRoYXQgZGVmaW5pdGVseSBjb21l DQorCQkgZnJvbSBwLT5iYjEuICBJZiB0aGVyZSdzIGEgc2luZ2xlIFBISSBhcmd1bWVudCBYIGxl ZnQsIHJlY29yZA0KKwkJIHRoZSBlcXVpdmFsZW5jZSBvZiBYIGFuZCBQSEkgcmVzdWx0IGF0IGVk Z2UgZS4gICovDQorCSAgICAgIGZvciAoZ3BoaV9pdGVyYXRvciBnc2kgPSBnc2lfc3RhcnRfbm9u dmlydHVhbF9waGlzIChwaGlfYmIpOw0KKwkJICAgIWdzaV9lbmRfcCAoZ3NpKTsgZ3NpX25leHRf bm9udmlydHVhbF9waGkgKCZnc2kpKQ0KKwkJew0KKwkJICBncGhpICpwaGkgPSBnc2kucGhpICgp Ow0KKwkJICB0cmVlIGVxdWl2ID0gTlVMTF9UUkVFOw0KKwkJICBmb3IgKHVuc2lnbmVkIGogPSAw OyBqIDwgZ2ltcGxlX3BoaV9udW1fYXJncyAocGhpKTsgKytqKQ0KKwkJICAgIHsNCisJCSAgICAg IGVkZ2UgaW4gPSBnaW1wbGVfcGhpX2FyZ19lZGdlIChwaGksIGopOw0KKwkJICAgICAgaWYgKGlu LT5zcmMgPT0gYmIxDQorCQkJICB8fCBkb21pbmF0ZWRfYnlfcF93X3VuZXggKGluLT5zcmMsIGJi MSwgZmFsc2UpKQ0KKwkJCS8qIERlZmluaXRlbHkgY29tZXMgZnJvbSBwLT5iYjEuICAqLw0KKwkJ CWNvbnRpbnVlOw0KKwkJICAgICAgdHJlZSBhcmcgPSB2bl92YWx1ZWl6ZSAoZ2ltcGxlX3BoaV9h cmdfZGVmIChwaGksIGopKTsNCisJCSAgICAgIGlmIChlcXVpdiAmJiBlcXVpdiAhPSBhcmcpDQor CQkJew0KKwkJCSAgZXF1aXYgPSBOVUxMX1RSRUU7DQorCQkJICBicmVhazsNCisJCQl9DQorCQkg ICAgICBlcXVpdiA9IGFyZzsNCisJCSAgICB9DQorCQkgIGlmIChlcXVpdikNCisJCSAgICB2YWxf ZXF1aXZfaW5zZXJ0IChlcXVpdiwgUEhJX1JFU1VMVCAocGhpKSwgZSk7DQorCQl9DQorCSAgICB9 DQorCX0NCisgICAgfQ0KK30NCisNCisvKiBSZWNvcmQgdGVtcG9yYXJ5IGVxdWl2YWxlbmNlcyBn ZW5lcmF0ZWQgYnkgUEhJIG5vZGVzLCBhbmQgYXJlIHZhbGlkIHdoZW4NCisgICBCQidzIG91dGdv aW5nIGVkZ2UgRSBpcyB0YWtlbi4gIENPREUsIE9QUyBhbmQgUkVTVUxUIGFyZSB0aGUgY29uZGl0 aW9uIGFuZA0KKyAgIHJlc3VsdCBmb3IgRSB0byBiZSB0YWtlbi4gIFZOTyBjb250YWlucyB0aGUg Y29uZGl0aW9uJ3MgcmVzdWx0cyByZWNvcmRlZCBpbg0KKyAgIG5hcnkgbWFwLg0KKw0KKyAgIFRo ZSBpZGVhIGlzIHRvIGZpbmQgYSBjb25mbGljdGluZyBwcmVkaWNhdGUgYXQgc29tZSBsb2NhdGlv biBMLCB3aGVyZSBMJ3MNCisgICBwcmVkZWNlc3NvciBQIGRvbWluYXRlcyBCQiwgc28gd2Uga25v dyBwYXRoIFAtPkwgd2lsbCBub3QgYmUgdGFrZW4gaWYgRSBpcw0KKyAgIHRha2VuLiAgSWYgYnkg cnVsaW5nIG91dCBQLT5MIGNhbiBnZW5lcmF0ZSBzb21lIGVxdWl2YWxlbmNlcywgcmVjb3JkIHRo ZW0gYXQNCisgICBFLT5kZXN0LiAgKi8NCisNCitzdGF0aWMgdm9pZA0KK3JlY29yZF9lcXVpdl9m cm9tX3ByZXZfcGhpICh2bl9uYXJ5X29wX3Qgdm5vLCBlZGdlIGUsIGJhc2ljX2Jsb2NrIGJiLA0K KwkJCSAgICB0cmVlX2NvZGUgY29kZSwgdHJlZSAqb3BzLCB0cmVlIHJlc3VsdCkNCit7DQorICBp ZiAoIXZuX3RyYWNraW5nX2VkZ2UgKGUpKQ0KKyAgICByZXR1cm47DQorICByZWNvcmRfZXF1aXZf ZnJvbV9wcmV2X3BoaV8xICh2bm8sIGUsIGJiLCByZXN1bHQsIHRydWUpOw0KKw0KKyAgLyogRm9y IHByZWRpY2F0ZXMgbGlrZSAiYT09YiBpcyBmYWxzZSIgb3IgImEhPWIgaXMgdHJ1ZSIsIGVxdWl2 YWxlbmNlcyBhcmUNCisgICAgIGNvbmZsaWN0aW5nIHJlc3VsdHMsIGkuZS4gIk5PX09QIChhKSBp cyBiIiBvciAiTk9fT1AgKGIpIGlzIGEiLiAgKi8NCisgIGlmICgocmVzdWx0ID09IGJvb2xlYW5f dHJ1ZV9ub2RlDQorICAgICAgICYmIChjb2RlID09IE5FX0VYUFIgfHwgY29kZSA9PSBHVF9FWFBS IHx8IGNvZGUgPT0gTFRfRVhQUikpDQorICAgICAgfHwgKHJlc3VsdCA9PSBib29sZWFuX2ZhbHNl X25vZGUgJiYgY29kZSA9PSBFUV9FWFBSKSkNCisgICAgew0KKyAgICAgIHZuX25hcnlfb3BfdCB2 bnJlc3VsdDsNCisgICAgICBpZiAoVFJFRV9DT0RFIChvcHNbMF0pID09IFNTQV9OQU1FKQ0KKwl7 DQorCSAgdm5fbmFyeV9vcF9sb29rdXBfcGllY2VzICgxLCBOT1BfRVhQUiwgVFJFRV9UWVBFIChv cHNbMF0pLCBvcHMsDQorCQkJCSAgICAmdm5yZXN1bHQpOw0KKwkgIHJlY29yZF9lcXVpdl9mcm9t X3ByZXZfcGhpXzEgKHZucmVzdWx0LCBlLCBiYiwgb3BzWzFdLCBmYWxzZSk7DQorCX0NCisgICAg ICBpZiAoVFJFRV9DT0RFIChvcHNbMV0pID09IFNTQV9OQU1FKQ0KKwl7DQorCSAgdm5fbmFyeV9v cF9sb29rdXBfcGllY2VzICgxLCBOT1BfRVhQUiwgVFJFRV9UWVBFIChvcHNbMV0pLCAmb3BzWzFd LA0KKwkJCQkgICAgJnZucmVzdWx0KTsNCisJICByZWNvcmRfZXF1aXZfZnJvbV9wcmV2X3BoaV8x ICh2bnJlc3VsdCwgZSwgYmIsIG9wc1swXSwgZmFsc2UpOw0KKwl9DQorICAgIH0NCiB9DQogDQog LyogSW5zZXJ0IHRoZSByaHMgb2YgU1RNVCBpbnRvIHRoZSBjdXJyZW50IGhhc2ggdGFibGUgd2l0 aCBhIHZhbHVlIG51bWJlciBvZg0KQEAgLTQ5MDIsOCArNTMwMiwyNSBAQCBzdGF0aWMgYm9vbA0K IHZpc2l0X25hcnlfb3AgKHRyZWUgbGhzLCBnYXNzaWduICpzdG10KQ0KIHsNCiAgIHZuX25hcnlf b3BfdCB2bnJlc3VsdDsNCi0gIHRyZWUgcmVzdWx0ID0gdm5fbmFyeV9vcF9sb29rdXBfc3RtdCAo c3RtdCwgJnZucmVzdWx0KTsNCi0gIGlmICghIHJlc3VsdCAmJiB2bnJlc3VsdCkNCisgIHVuc2ln bmVkIGxlbmd0aCA9IHZuX25hcnlfbGVuZ3RoX2Zyb21fc3RtdCAoc3RtdCk7DQorICB2bl9uYXJ5 X29wX3Qgdm5vDQorICAgID0gWEFMTE9DQVZBUiAoc3RydWN0IHZuX25hcnlfb3Bfcywgc2l6ZW9m X3ZuX25hcnlfb3AgKGxlbmd0aCkpOw0KKyAgaW5pdF92bl9uYXJ5X29wX2Zyb21fc3RtdCAodm5v LCBzdG10KTsNCisgIHRyZWUgcmVzdWx0ID0gTlVMTF9UUkVFOw0KKyAgLyogVHJ5IHRvIGdldCBh IHNpbXBsaWZpZWQgcmVzdWx0LiAgKi8NCisgIC8qIERvIG5vdCBzaW1wbGlmeSB2YXJpYWJsZSB1 c2VkIGluIFBISSBhdCBsb29wIGV4aXQsIG9yDQorICAgICBzaW1wbGlmeV9wZWVsZWRfY2hyZWMv Y29uc3RhbnRfYWZ0ZXJfcGVlbGluZyBtYXkgbWlzcyB0aGUgbG9vcC4gICovDQorICBnaW1wbGUg KnVzZV9zdG10Ow0KKyAgdXNlX29wZXJhbmRfcCB1c2VfcDsNCisgIGlmICghKHNpbmdsZV9pbW1f dXNlIChsaHMsICZ1c2VfcCwgJnVzZV9zdG10KQ0KKwkmJiBnaW1wbGVfY29kZSAodXNlX3N0bXQp ID09IEdJTVBMRV9QSEkNCisJJiYgc2luZ2xlX3N1Y2NfcCAoZ2ltcGxlX2JiICh1c2Vfc3RtdCkp DQorCSYmIChzaW5nbGVfc3VjY19lZGdlIChnaW1wbGVfYmIgKHVzZV9zdG10KSktPmZsYWdzICYg RURHRV9ERlNfQkFDSykpKQ0KKyAgICByZXN1bHQgPSBmb2xkX2NvbnN0X2Zyb21fZXF1aXZfaGVh ZHMgKHZuby0+bGVuZ3RoLCB2bm8tPm9wY29kZSwgdm5vLT5vcCwNCisJCQkJCSAgdm5vLT50eXBl KTsNCisgIGlmICghcmVzdWx0KQ0KKyAgICByZXN1bHQgPSB2bl9uYXJ5X29wX2xvb2t1cF8xICh2 bm8sICZ2bnJlc3VsdCk7DQorICBpZiAoIXJlc3VsdCAmJiB2bnJlc3VsdCkNCiAgICAgcmVzdWx0 ID0gdm5fbmFyeV9vcF9nZXRfcHJlZGljYXRlZF92YWx1ZSAodm5yZXN1bHQsIGdpbXBsZV9iYiAo c3RtdCkpOw0KICAgaWYgKHJlc3VsdCkNCiAgICAgcmV0dXJuIHNldF9zc2FfdmFsX3RvIChsaHMs IHJlc3VsdCk7DQpAQCAtNzE3OSwxMiArNzU5Niw4IEBAIGluc2VydF9yZWxhdGVkX3ByZWRpY2F0 ZXNfb25fZWRnZSAoZW51bSB0cmVlX2NvZGUgY29kZSwgdHJlZSAqb3BzLCBlZGdlIHByZWRfZSkN CiAJCQkJCSAgIG9wcywgYm9vbGVhbl9mYWxzZV9ub2RlLCAwLCBwcmVkX2UpOw0KICAgICAgIGJy ZWFrOw0KICAgICBjYXNlIEVRX0VYUFI6DQotICAgICAgLyogYSA9PSBiIC0+ICEgYSB7PCw+fSBi ICovDQotICAgICAgdm5fbmFyeV9vcF9pbnNlcnRfcGllY2VzX3ByZWRpY2F0ZWQgKDIsIExUX0VY UFIsIGJvb2xlYW5fdHlwZV9ub2RlLA0KLQkJCQkJICAgb3BzLCBib29sZWFuX2ZhbHNlX25vZGUs IDAsIHByZWRfZSk7DQotICAgICAgdm5fbmFyeV9vcF9pbnNlcnRfcGllY2VzX3ByZWRpY2F0ZWQg KDIsIEdUX0VYUFIsIGJvb2xlYW5fdHlwZV9ub2RlLA0KLQkJCQkJICAgb3BzLCBib29sZWFuX2Zh bHNlX25vZGUsIDAsIHByZWRfZSk7DQotICAgICAgYnJlYWs7DQorICAgICAgLyogTm8gbmVlZCB0 byBpbnNlcnQgZGVyaXZlZCBwcmVkaWNhdGVzIGZvciAnPT0nLCBhcyB0aGV5IGNhbiBiZSBjb21w dXRlZA0KKwkgYnkgZXF1aXYtaGVhZHMgJiBmb2xkX2NvbnN0X2Zyb21fZXF1aXZfaGVhZHMuICAq Lw0KICAgICBjYXNlIExFX0VYUFI6DQogICAgIGNhc2UgR0VfRVhQUjoNCiAgICAgY2FzZSBORV9F WFBSOg0KQEAgLTczNTEsMjQgKzc3NjQsMzEgQEAgcHJvY2Vzc19iYiAocnBvX2VsaW0gJmF2YWls LCBiYXNpY19ibG9jayBiYiwNCiAgICAgICBzd2l0Y2ggKGdpbXBsZV9jb2RlIChsYXN0KSkNCiAJ ew0KIAljYXNlIEdJTVBMRV9TV0lUQ0g6DQorCSAgLyogVE9ETzogdXRpbGl6ZSB0ZW1wb3Jhcnkg ZXF1aXZhbGVuY2VzLiAgKi8NCiAJICBlID0gZmluZF90YWtlbl9lZGdlIChiYiwgdm5fdmFsdWVp emUgKGdpbXBsZV9zd2l0Y2hfaW5kZXgNCiAJCQkJCQkoYXNfYSA8Z3N3aXRjaCAqPiAobGFzdCkp KSk7DQogCSAgYnJlYWs7DQogCWNhc2UgR0lNUExFX0NPTkQ6DQogCSAgew0KLQkgICAgdHJlZSBs aHMgPSB2bl92YWx1ZWl6ZSAoZ2ltcGxlX2NvbmRfbGhzIChsYXN0KSk7DQotCSAgICB0cmVlIHJo cyA9IHZuX3ZhbHVlaXplIChnaW1wbGVfY29uZF9yaHMgKGxhc3QpKTsNCi0JICAgIHRyZWUgdmFs ID0gZ2ltcGxlX3NpbXBsaWZ5IChnaW1wbGVfY29uZF9jb2RlIChsYXN0KSwNCi0JCQkJCWJvb2xl YW5fdHlwZV9ub2RlLCBsaHMsIHJocywNCi0JCQkJCU5VTEwsIHZuX3ZhbHVlaXplKTsNCisJICAg IHRyZWUgbGhzID0gbG9va3VwX2VxdWl2X2hlYWQgKGdpbXBsZV9jb25kX2xocyAobGFzdCksIGJi KTsNCisJICAgIHRyZWUgcmhzID0gbG9va3VwX2VxdWl2X2hlYWQgKGdpbXBsZV9jb25kX3JocyAo bGFzdCksIGJiKTsNCisJICAgIHRyZWUgb3BzWzJdOw0KKwkgICAgb3BzWzBdID0gbGhzOw0KKwkg ICAgb3BzWzFdID0gcmhzOw0KKwkgICAgdHJlZSB2YWwgPSBmb2xkX2NvbnN0X2Zyb21fZXF1aXZf aGVhZHMgKDIsIGdpbXBsZV9jb25kX2NvZGUgKGxhc3QpLA0KKwkJCQkJCSAgICBvcHMsIGJvb2xl YW5fdHlwZV9ub2RlKTsNCisJICAgIGlmICh2YWwgJiYgKGR1bXBfZmxhZ3MgJiBUREZfREVUQUlM UykpDQorCSAgICAgIHsNCisJCWZwcmludGYgKGR1bXBfZmlsZSwgIkdvdCBzaW1wbGlmaWVkIHJl c3VsdCAiKTsNCisJCXByaW50X2dlbmVyaWNfZXhwciAoZHVtcF9maWxlLCB2YWwsIFRERl9OT05F KTsNCisJCWZwcmludGYgKGR1bXBfZmlsZSwgIiBmb3IgIik7DQorCQlwcmludF9naW1wbGVfc3Rt dCAoZHVtcF9maWxlLCBsYXN0LCBUREZfU0xJTSk7DQorCSAgICAgIH0NCisJICAgIHZuX25hcnlf b3BfdCB2bnJlc3VsdCA9IE5VTEw7DQogCSAgICAvKiBJZiB0aGUgY29uZGl0aW9uIGRpZG4ndCBz aW1wbGZ5IHNlZSBpZiB3ZSBoYXZlIHJlY29yZGVkDQogCSAgICAgICBhbiBleHByZXNzaW9uIGZy b20gc29mYXIgdGFrZW4gZWRnZXMuICAqLw0KIAkgICAgaWYgKCEgdmFsIHx8IFRSRUVfQ09ERSAo dmFsKSAhPSBJTlRFR0VSX0NTVCkNCiAJICAgICAgew0KLQkJdm5fbmFyeV9vcF90IHZucmVzdWx0 Ow0KLQkJdHJlZSBvcHNbMl07DQotCQlvcHNbMF0gPSBsaHM7DQotCQlvcHNbMV0gPSByaHM7DQog CQl2YWwgPSB2bl9uYXJ5X29wX2xvb2t1cF9waWVjZXMgKDIsIGdpbXBsZV9jb25kX2NvZGUgKGxh c3QpLA0KIAkJCQkJCWJvb2xlYW5fdHlwZV9ub2RlLCBvcHMsDQogCQkJCQkJJnZucmVzdWx0KTsN CkBAIC03NDM2LDYgKzc4NTYsMTUgQEAgcHJvY2Vzc19iYiAocnBvX2VsaW0gJmF2YWlsLCBiYXNp Y19ibG9jayBiYiwNCiAJCSAgICBpZiAoZmFsc2VfZSkNCiAJCSAgICAgIGluc2VydF9yZWxhdGVk X3ByZWRpY2F0ZXNfb25fZWRnZSAoaWNvZGUsIG9wcywgZmFsc2VfZSk7DQogCQkgIH0NCisNCisJ CS8qIFRyeSB0byByZWNvcmQgZXF1aXZhbGVuY2VzIGdlbmVyYXRlZCBieSBwcmV2aW91cyBQSEkg bm9kZXMNCisJCSAgICBvbiBjdXJyZW50IHRydWUgJiBmYWxzZSBlZGdlcy4gICovDQorCQlpZiAo dHJ1ZV9lKQ0KKwkJICByZWNvcmRfZXF1aXZfZnJvbV9wcmV2X3BoaSAodm5yZXN1bHQsIHRydWVf ZSwgYmIsIGNvZGUsIG9wcywNCisJCQkJCSAgICAgIGJvb2xlYW5fdHJ1ZV9ub2RlKTsNCisJCWlm IChmYWxzZV9lKQ0KKwkJICByZWNvcmRfZXF1aXZfZnJvbV9wcmV2X3BoaSAodm5yZXN1bHQsIGZh bHNlX2UsIGJiLCBjb2RlLCBvcHMsDQorCQkJCQkgICAgICBib29sZWFuX2ZhbHNlX25vZGUpOw0K IAkgICAgICB9DQogCSAgICBicmVhazsNCiAJICB9DQpAQCAtNzU1OCw2ICs3OTg3LDcgQEAgc3Ry dWN0IHVud2luZF9zdGF0ZQ0KICAgdm5fcGhpX3QgcGhpX3RvcDsNCiAgIHZuX25hcnlfb3BfdCBu YXJ5X3RvcDsNCiAgIHZuX2F2YWlsICphdmFpbF90b3A7DQorICBuYXJ5X3JlZiAqbmFyeV9yZWZf dG9wOw0KIH07DQogDQogLyogVW53aW5kIHRoZSBSUE8gVk4gc3RhdGUgZm9yIGl0ZXJhdGlvbi4g ICovDQpAQCAtNzYwNyw2ICs4MDM3LDE3IEBAIGRvX3Vud2luZCAodW53aW5kX3N0YXRlICp0bywg cnBvX2VsaW0gJmF2YWlsKQ0KICAgICAgIGF2LT5uZXh0ID0gYXZhaWwubV9hdmFpbF9mcmVlbGlz dDsNCiAgICAgICBhdmFpbC5tX2F2YWlsX2ZyZWVsaXN0ID0gYXY7DQogICAgIH0NCisgIC8qIERy YWluIG5hcnlfcmVmcyB0byBmcmVlbGlzdCwgdG8gcmV1c2UgdGhlIG1lbW9yeS4gICovDQorICBm b3IgKDsgbGFzdF9wdXNoZWRfbmFyeV9yZWYgJiYgbGFzdF9wdXNoZWRfbmFyeV9yZWYtPnJlZiAh PSB0by0+bmFyeV9yZWZfdG9wOykNCisgICAgew0KKyAgICAgIHZuX3NzYV9hdXhfdCB2YWwgPSBs YXN0X3B1c2hlZF9uYXJ5X3JlZjsNCisgICAgICBuYXJ5X3JlZiAqcmVmID0gdmFsLT5yZWY7DQor ICAgICAgdmFsLT5yZWYgPSByZWYtPm5leHQ7DQorICAgICAgbGFzdF9wdXNoZWRfbmFyeV9yZWYg PSByZWYtPm5leHRfdW5kbzsNCisgICAgICByZWYtPm5leHQgPSBuYXJ5X3JlZl9mcmVlbGlzdDsN CisgICAgICBuYXJ5X3JlZl9mcmVlbGlzdCA9IHJlZjsNCisgICAgICAtLXZhbC0+bnVtX25hcnlf cmVmOw0KKyAgICB9DQogfQ0KIA0KIC8qIERvIFZOIG9uIGEgU0VNRSByZWdpb24gc3BlY2lmaWVk IGJ5IEVOVFJZIGFuZCBFWElUX0JCUyBpbiBGTi4NCkBAIC03NzIwLDYgKzgxNjEsOCBAQCBkb19y cG9fdm4gKGZ1bmN0aW9uICpmbiwgZWRnZSBlbnRyeSwgYml0bWFwIGV4aXRfYmJzLA0KICAgbGFz dF9pbnNlcnRlZF9waGkgPSBOVUxMOw0KICAgbGFzdF9pbnNlcnRlZF9uYXJ5ID0gTlVMTDsNCiAg IGxhc3RfcHVzaGVkX2F2YWlsID0gTlVMTDsNCisgIGxhc3RfcHVzaGVkX25hcnlfcmVmID0gTlVM TDsNCisgIG5hcnlfcmVmX2ZyZWVsaXN0ID0gTlVMTDsNCiANCiAgIHZuX3ZhbHVlaXplID0gcnBv X3ZuX3ZhbHVlaXplOw0KIA0KQEAgLTc4MTQsNiArODI1Nyw4IEBAIGRvX3Jwb192biAoZnVuY3Rp b24gKmZuLCBlZGdlIGVudHJ5LCBiaXRtYXAgZXhpdF9iYnMsDQogCSAgICBycG9fc3RhdGVbaWR4 XS5uYXJ5X3RvcCA9IGxhc3RfaW5zZXJ0ZWRfbmFyeTsNCiAJICAgIHJwb19zdGF0ZVtpZHhdLmF2 YWlsX3RvcA0KIAkgICAgICA9IGxhc3RfcHVzaGVkX2F2YWlsID8gbGFzdF9wdXNoZWRfYXZhaWwt PmF2YWlsIDogTlVMTDsNCisJICAgIHJwb19zdGF0ZVtpZHhdLm5hcnlfcmVmX3RvcA0KKwkgICAg ICA9IGxhc3RfcHVzaGVkX25hcnlfcmVmID8gbGFzdF9wdXNoZWRfbmFyeV9yZWYtPnJlZiA6IE5V TEw7DQogCSAgfQ0KIA0KIAlpZiAoIShiYi0+ZmxhZ3MgJiBCQl9FWEVDVVRBQkxFKSkNCmRpZmYg LS1naXQgYS9nY2MvdHJlZS1zc2Etc2Njdm4uaCBiL2djYy90cmVlLXNzYS1zY2N2bi5oDQppbmRl eCA3ZDUzYWI1ZTM5Zi4uMDQ3NmRjMDcyOTIgMTAwNjQ0DQotLS0gYS9nY2MvdHJlZS1zc2Etc2Nj dm4uaA0KKysrIGIvZ2NjL3RyZWUtc3NhLXNjY3ZuLmgNCkBAIC0yMTcsNiArMjE3LDE2IEBAIHN0 cnVjdCB2bl9hdmFpbA0KICAgc3RydWN0IHZuX3NzYV9hdXggKm5leHRfdW5kbzsNCiB9Ow0KIA0K Ky8qIEluIHZuX3NzYV9hdXggc3RydWN0dXJlLCBob2xkIGEgbGlzdHMgb2YgcmVmZXJlbmNlcyB0 byB0aGUgbmFyeSBtYXAgZW50cmllcywNCisgICBzbyB0aGF0IHdoZW4gcmVjb3JkaW5nIG5ldyBl cXVpdmFsZW5jZSB0byB0aGUgdmFsdWUgbnVtYmVyLCB3ZSBjYW4gcmUtaW5zZXJ0DQorICAgZXhw cmVzc2lvbnMnIHJlc3VsdHMgYmFzZWQgb24gdGhpcy4gICovDQorc3RydWN0IG5hcnlfcmVmDQor ew0KKyAgbmFyeV9yZWYgKm5leHQ7DQorICB2bl9uYXJ5X29wX3Qgc2xvdDsNCisgIHN0cnVjdCB2 bl9zc2FfYXV4ICpuZXh0X3VuZG87DQorfTsNCisNCiB0eXBlZGVmIHN0cnVjdCB2bl9zc2FfYXV4 DQogew0KICAgLyogU1NBIG5hbWUgdGhpcyB2bl9zc2FfYXV4IGlzIGFzc29jaWF0ZWQgd2l0aCBp biB0aGUgbGF0dGljZS4gICovDQpAQCAtMjMwLDkgKzI0MCwxNSBAQCB0eXBlZGVmIHN0cnVjdCB2 bl9zc2FfYXV4DQogICAgICBmb3IgU1NBIG5hbWVzIGFsc28gc2VydmluZyBhcyB2YWx1ZXMgKE5B TUUgPT0gVkFMTlVNKS4gICovDQogICB2bl9hdmFpbCAqYXZhaWw7DQogDQorICAvKiBSZWZlcmVu Y2VzIHRvIHNsb3RzIGluIHRoZSBuYXJ5IG1hcCwgd2l0aCBWQUxOVU0gYXMgb3BlcmFuZC4gICov DQorICBuYXJ5X3JlZiAqcmVmOw0KKw0KICAgLyogVW5pcXVlIGlkZW50aWZpZXIgdGhhdCBhbGwg ZXhwcmVzc2lvbnMgd2l0aCB0aGUgc2FtZSB2YWx1ZSBoYXZlLiAqLw0KICAgdW5zaWduZWQgaW50 IHZhbHVlX2lkOw0KIA0KKyAgLyogbmFyeV9yZWYgY291bnQuICAqLw0KKyAgdW5zaWduZWQgc2hv cnQgbnVtX25hcnlfcmVmOw0KKw0KICAgLyogV2hldGhlciB0aGUgU1NBX05BTUUgaGFzIGJlZW4g cHJvY2Vzc2VkIGF0IGxlYXN0IG9uY2UuICAqLw0KICAgdW5zaWduZWQgdmlzaXRlZCA6IDE7DQog DQo= --_002_SN6PR01MB4240775EAA800E6C8BB02B69E8989SN6PR01MB4240prod_--