From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.ffmpeg.org (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id 23C394DB8E for ; Wed, 4 Jun 2025 03:39:23 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id 1173468C774; Wed, 4 Jun 2025 06:39:19 +0300 (EEST) Received: from mail-pl1-f179.google.com (mail-pl1-f179.google.com [209.85.214.179]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTPS id 6FF8168BEDB for ; Wed, 4 Jun 2025 06:39:12 +0300 (EEST) Received: by mail-pl1-f179.google.com with SMTP id d9443c01a7336-2320d06b728so54729235ad.1 for ; Tue, 03 Jun 2025 20:39:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1749008350; x=1749613150; darn=ffmpeg.org; h=message-id:in-reply-to:to:references:date:subject:mime-version :content-transfer-encoding:from:from:to:cc:subject:date:message-id :reply-to; bh=N0RgyKI8PPgNBOSYirlkb+CyvoqAHTpkM9jtUYCpuwY=; b=f0Lck/A0Ux/O6qL/pNV7A5tpd0Bgt5iJz2Oe/B9nYcrVD46HleAFRJitb50Cgc+ZMc mrNEdwHRQPwKr7TIRZ5Qb1D6FGwg86Sq9yH7ZuF+6hOmz3xwFdcqq7naRJPgUIyP8HZA 8LR9HRQuQAOvDHXbVwW1Vpg5tggBv+Dqqud+AONTZlx00N6FWzIWAn3OKNhrQVIzIk5m b+dPhvLWU7QY/F+euSJ58V9KXLsLu3vlYlWwmlvNTNv3PHXJXoE4DQs2hu2CJL7jqauf GQ25nRbQPSA0pNJPT684cJHWsot76ok5xk1jPdKKLQi+vtezWu8HyT4zNeT/9zujNgII lcgA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749008350; x=1749613150; h=message-id:in-reply-to:to:references:date:subject:mime-version :content-transfer-encoding:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=N0RgyKI8PPgNBOSYirlkb+CyvoqAHTpkM9jtUYCpuwY=; b=DLqHe4OCSnsIj4Uw9QY43Vocve5olChkxjvIHWkiLCkKzDnLpND5sliVyQKmdmI5yV tvHtCVE9dTQcv1V75xL3vbk4Idpqs5KCYmdBxRyCmdpNXxnYY4RX4UJcG2fSAO3xo6rB 8VQxkNuuRe4u43H3K5V2Ndt64nwLTHQYT331p8DinnE/ie9TwL0MTCK2ht3Uies2JSgk Q3Rg4oNRRAAeKhubIarrBXu0VsZWCQhmdsXgsmmFpzYxHHcAq/r/JNg1NX5k5Bk654tU wiX+D97LAfy5c7cfq64nG6mGk27MQRBAsvGMEIo8rcB27nIKfaDxHm1UdX1JJxuGTUAW PvZg== X-Gm-Message-State: AOJu0YwNjYrbyc8UN2/fZPO1ln/icdjp7+gSKM6ULabC2Xe9Z9uoefGu bq1K8uQX7fs2H8xrUsBaFYDjoz9egeY9mx2eJY5/m6Bueaz+8qaHA/2WLN2LLKOj X-Gm-Gg: ASbGncu63YmD5wiZTGrOxmY6GepPRTFXZcRmre7LztW80GIVwmUMEVuGEK2+kzXe8Pl Vuhu5LI3cn74O2RwWiIAHwOLwUt5xqofrS7yL3T4MnWHzHtNEbbNgynLbLVvwl52lA26G8PozQq bXROy9HU6TWFZ3YB1dLyD0CB9qWMZBwEDk/V8ImVWXVHb1aNAm7fRBIWc3Z4sGKDD51hIY5uklk ROxH6ck76Z7MyREPZfuYmvugOReKvVm0IW/UTwCrd/tyKG1lHaz2JI9r4TSZF14ZTe/ZxMQxYIm xy9sl+kvo36AynJIUZtlFnIMNDf7G6Sjop/QZno8MKSuew+lfHojqosW5r+E1hCa X-Google-Smtp-Source: AGHT+IHI2j4ztWvNKxtS+ZDkyVJGbOPy3cDNH17tIlAnrmzkZzzNKKek24RAQBkXQ6De9k1ypXqNIA== X-Received: by 2002:a17:902:ea03:b0:22e:3b02:c094 with SMTP id d9443c01a7336-235e1486ae2mr13241015ad.8.1749008348450; Tue, 03 Jun 2025 20:39:08 -0700 (PDT) Received: from smtpclient.apple ([23.247.137.216]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-b2eceb297a6sm7815262a12.27.2025.06.03.20.39.06 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 03 Jun 2025 20:39:08 -0700 (PDT) From: Jack Lau Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3826.600.51.1.1\)) Date: Wed, 4 Jun 2025 11:38:53 +0800 References: To: FFmpeg development discussions and patches In-Reply-To: Message-Id: <8AAF27DC-32AE-4EAD-A464-F13C68A97AE6@gmail.com> X-Mailer: Apple Mail (2.3826.600.51.1.1) Subject: Re: [FFmpeg-devel] [PATCH v3] avformat/whip: Add WHIP muxer support for subsecond latency streaming X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: Cgo+IE9uIEp1biA0LCAyMDI1LCBhdCAxMToyMSwgU3RldmVuIExpdSA8bGluZ2ppdWppYW5rZUBn bWFpbC5jb20+IHdyb3RlOgo+IAo+IEphY2sgTGF1IHZpYSBmZm1wZWctZGV2ZWwgPGZmbXBlZy1k ZXZlbEBmZm1wZWcub3JnPiDkuo4yMDI15bm0NeaciDE35pel5ZGo5YWtIDE3OjI15YaZ6YGT77ya Cj4+IAo+PiAwLiBXSElQIFZlcnNpb24gMy4KPj4gMS4gVGhlIFdISVAgbXV4ZXIgaGFzIGJlZW4g cmVuYW1lZCBhbmQgcmVmaW5lZCwgd2l0aCBpbXByb3ZlZCBsb2dnaW5nIGNvbnRleHQgYW5kIGVy cm9yIG1lc3NhZ2VzIGZvciBTU0wsIERUTFMsIGFuZCBSVEMuCj4+IDIuIE1hZ2ljIG51bWJlcnMg aGF2ZSBiZWVuIHJlcGxhY2VkIHdpdGggbWFjcm9zIGFuZCBleHRyYWN0ZWQgdG8gZnVuY3Rpb25z LCBhbmQgbG9nIGxldmVscyBoYXZlIGJlZW4gYWx0ZXJlZCBmb3IgYmV0dGVyIGNsYXJpdHkuCj4+ IDMuIERUTFMgY3VydmUgbGlzdCBoYXMgYmVlbiB1cGRhdGVkLCBhbmQgU1JUUCBwcm9maWxlIG5h bWVzIGhhdmUgYmVlbiByZWZpbmVkIGZvciBGRm1wZWcgYW5kIE9wZW5TU0wuCj4+IDQuIElDRSBT VFVOIG1hZ2ljIG51bWJlciBoYXMgYmVlbiByZWZpbmVkLCBhbmQgUlRQIHBheWxvYWQgdHlwZXMg aGF2ZSBiZWVuIHVwZGF0ZWQgYmFzZWQgb24gQ2hyb21lJ3MgZGVmaW5pdGlvbi4KPj4gNS4gRml4 ZWQgZnJhbWUgc2l6ZSBoYXMgYmVlbiByZWZpbmVkIHRvIHJ0Yy0+YXVkaW9fcGFyLT5mcmFtZV9z aXplLCBhbmQgaDI2NF9tcDR0b2FubmV4YiBpcyBub3cgdXNlZCB0byBjb252ZXJ0IE1QNC9JU09N IHRvIGFubmV4Yi4KPj4gNi4gT1BVUyB0aW1lc3RhbXAgaXNzdWUgaGFzIGJlZW4gYWRkcmVzc2Vk LCBhbmQgbWFya2VyIHNldHRpbmcgaGFzIGJlZW4gY29ycmVjdGVkIGFmdGVyIHV0aWxpemluZyBC U0YuCj4+IDcuIERUTFMgaGFuZHNoYWtlIGFuZCBJQ0UgaGFuZGxpbmcgaGF2ZSBiZWVuIG9wdGlt aXplZCBmb3IgaW1wcm92ZWQgcGVyZm9ybWFuY2UsIHdpdGggYSBzaW5nbGUgaGFuZHNoYWtlIHRp bWVvdXQgYW5kIHNlcnZlciByb2xlIHRvIHByZXZlbnQgQVJRLgo+PiA4LiBDb25zb2xpZGF0ZWQg SUNFIHJlcXVlc3QvcmVzcG9uc2UgaGFuZGxpbmcgYW5kIERUTFMgaGFuZHNoYWtlIGludG8gYSBz aW5nbGUgZnVuY3Rpb24sIGFuZCBmaXhlZCBPcGVuU1NMIGJ1aWxkIGVycm9ycyB0byB3b3JrIHdp dGggUGlvbi4KPj4gOS4gTWVyZ2UgVExTICYgRFRMUyBpbXBsZW1lbnRhdGlvbiwgc2hhcmVkIEJJ TyBjYWxsYmFja3MsIHJlYWQsIHdyaXRlLCBwcmludF9zc2xfZXJyb3IsIG9wZW5zc2xfaW5pdF9j YV9rZXlfY2VydCwgaW5pdF9iaW9fbWV0aG9kIGZ1bmN0aW9uIGFuZCBzaGFyZWQgc2FtZSBkYXRh IHN0cnVjdHVyZQo+PiAxMC4gTW9kaWZ5IGNvbmZpZ3VyZSB0aGF0IHdoaXAgaXMgZW5hYmxlZCBv bmx5IGR0bHMgaXMgZW5hYmxlZChqdXN0IHN1cHBvcnQgb3BlbnNzbCBmb3Igbm93KSB0byBmaXgg YnVpbGQgZXJyb3IKPj4gCj4+IENvLWF1dGhvcmVkLWJ5OiB3aW5saW4gPHdpbmxpbnZpcEBnbWFp bC5jb20+Cj4+IENvLWF1dGhvcmVkLWJ5OiB5YW5ncnRjIDx5YW5ncnRjQGFsaXl1bi5jb20+Cj4+ IENvLWF1dGhvcmVkLWJ5OiBjbG91ZHdlYnJ0YyA8ZHVhbndlaXdlaTE5ODJAZ21haWwuY29tPgo+ PiBDby1hdXRob3JlZC1ieTogSGFpYm8gQ2hlbiA8NDk1ODEwMjQyQHFxLmNvbT4KPj4gQ28tYXV0 aG9yZWQtYnk6IFN0ZXZlbiBMaXUgPGxxQGNoaW5hZmZtcGVnLm9yZz4KPj4gQ28tYXV0aG9yZWQt Ynk6IEp1biBaaGFvIDxiYXJyeWp6aGFvQHRlbmNlbnQuY29tPgo+PiBTaWduZWQtb2ZmLWJ5OiBK YWNrIExhdSA8amFja2xhdTEyMjJAcXEuY29tPgo+PiAtLS0KPj4gY29uZmlndXJlICAgICAgICAg ICAgICAgICB8ICAgMTIgKwo+PiBkb2MvbXV4ZXJzLnRleGkgICAgICAgICAgIHwgICA0NyArCj4+ IGxpYmF2Zm9ybWF0L01ha2VmaWxlICAgICAgfCAgICAxICsKPj4gbGliYXZmb3JtYXQvYWxsZm9y bWF0cy5jICB8ICAgIDEgKwo+PiBsaWJhdmZvcm1hdC9hdmlvLmMgICAgICAgIHwgICAgNSArLQo+ PiBsaWJhdmZvcm1hdC9odHRwLmMgICAgICAgIHwgICAgNiArCj4+IGxpYmF2Zm9ybWF0L2h0dHAu aCAgICAgICAgfCAgICAyICsKPj4gbGliYXZmb3JtYXQvcHJvdG9jb2xzLmMgICB8ICAgIDEgKwo+ PiBsaWJhdmZvcm1hdC9zcnRwLmggICAgICAgIHwgICAgNCArLQo+PiBsaWJhdmZvcm1hdC90bHMu YyAgICAgICAgIHwgICA3MCArLQo+PiBsaWJhdmZvcm1hdC90bHMuaCAgICAgICAgIHwgICA1OCAr LQo+PiBsaWJhdmZvcm1hdC90bHNfb3BlbnNzbC5jIHwgIDg1NyArKysrKysrKysrKysrKysrLQo+ PiBsaWJhdmZvcm1hdC93aGlwLmMgICAgICAgIHwgMTkxNyArKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrCj4+IDEzIGZpbGVzIGNoYW5nZWQsIDI5MjUgaW5zZXJ0aW9ucygrKSwg NTYgZGVsZXRpb25zKC0pCj4+IGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmZvcm1hdC93aGlwLmMK Pj4gCj4+IGRpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKPj4gaW5kZXggMDYwOWRh YzRhYi4uMmEzMTY2OTYyYSAxMDA3NTUKPj4gLS0tIGEvY29uZmlndXJlCj4+ICsrKyBiL2NvbmZp Z3VyZQo+PiBAQCAtMzc0Nyw2ICszNzQ3LDcgQEAgd2F2X2RlbXV4ZXJfc2VsZWN0PSJyaWZmZGVj Igo+PiB3YXZfbXV4ZXJfc2VsZWN0PSJyaWZmZW5jIgo+PiB3ZWJtX2NodW5rX211eGVyX3NlbGVj dD0id2VibV9tdXhlciIKPj4gd2VibV9kYXNoX21hbmlmZXN0X2RlbXV4ZXJfc2VsZWN0PSJtYXRy b3NrYV9kZW11eGVyIgo+PiArd2hpcF9tdXhlcl9kZXBzX2FueT0iZHRsc19wcm90b2NvbCIKPj4g d3R2X2RlbXV4ZXJfc2VsZWN0PSJtcGVndHNfZGVtdXhlciByaWZmZGVjIgo+PiB3dHZfbXV4ZXJf c2VsZWN0PSJtcGVndHNfbXV4ZXIgcmlmZmVuYyIKPj4geG12X2RlbXV4ZXJfc2VsZWN0PSJyaWZm ZGVjIgo+PiBAQCAtMzg0NSw2ICszODQ2LDkgQEAgc3J0cF9wcm90b2NvbF9zZWxlY3Q9InJ0cF9w cm90b2NvbCBzcnRwIgo+PiB0Y3BfcHJvdG9jb2xfc2VsZWN0PSJuZXR3b3JrIgo+PiB0bHNfcHJv dG9jb2xfZGVwc19hbnk9ImdudXRscyBvcGVuc3NsIHNjaGFubmVsIHNlY3VyZXRyYW5zcG9ydCBs aWJ0bHMgbWJlZHRscyIKPj4gdGxzX3Byb3RvY29sX3NlbGVjdD0idGNwX3Byb3RvY29sIgo+PiAr IyBUT0RPOiBTdXBwb3J0IGxpYnRscywgbWJlZHRscywgYW5kIGdudXRscy4KPj4gK2R0bHNfcHJv dG9jb2xfZGVwc19hbnk9Im9wZW5zc2wiCj4+ICtkdGxzX3Byb3RvY29sX3NlbGVjdD0idWRwX3By b3RvY29sIgo+PiB1ZHBfcHJvdG9jb2xfc2VsZWN0PSJuZXR3b3JrIgo+PiB1ZHBsaXRlX3Byb3Rv Y29sX3NlbGVjdD0ibmV0d29yayIKPj4gdW5peF9wcm90b2NvbF9kZXBzPSJzeXNfdW5faCIKPj4g QEAgLTcxOTIsNiArNzE5NiwxNCBAQCBlbmFibGVkIHJrbXBwICAgICAgICAgICAgICYmIHsgcmVx dWlyZV9wa2dfY29uZmlnIHJrbXBwIHJvY2tjaGlwX21wcCAgcm9ja2NoaXAvcgo+PiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIH0KPj4gZW5hYmxlZCB2YXBvdXJzeW50aCAgICAgICAmJiBy ZXF1aXJlX2hlYWRlcnMgInZhcG91cnN5bnRoL1ZTU2NyaXB0NC5oIHZhcG91cnN5bnRoL1ZhcG91 clN5bnRoNC5oIgo+PiAKPj4gK2VuYWJsZWQgb3BlbnNzbCAgICAgICAgICAgICYmIHsKPj4gKyAg ICBlbmFibGVkIHdoaXBfbXV4ZXIgJiYgewo+PiArICAgICAgICAkcGtnX2NvbmZpZyAtLWV4aXN0 cyAtLXByaW50LWVycm9ycyAib3BlbnNzbCA+PSAxLjAuMWsiIHx8Cj4+ICsgICAgICAgIHJlcXVp cmVfcGtnX2NvbmZpZyBvcGVuc3NsICJvcGVuc3NsID49IDEuMC4xayIgb3BlbnNzbC9zc2wuaCBT U0xfbGlicmFyeV9pbml0IHx8Cj4+ICsgICAgICAgIHJlcXVpcmVfcGtnX2NvbmZpZyBvcGVuc3Ns ICJvcGVuc3NsID49IDEuMC4xayIgb3BlbnNzbC9zc2wuaCBPUEVOU1NMX2luaXRfc3NsCj4+ICsg ICAgfQo+PiArfQo+PiArCj4+IAo+PiBpZiBlbmFibGVkIGdjcnlwdDsgdGhlbgo+PiAgICAgR0NS WVBUX0NPTkZJRz0iJHtjcm9zc19wcmVmaXh9bGliZ2NyeXB0LWNvbmZpZyIKPj4gZGlmZiAtLWdp dCBhL2RvYy9tdXhlcnMudGV4aSBiL2RvYy9tdXhlcnMudGV4aQo+PiBpbmRleCAwNGI3ZjIwYjdl Li4zMGM5NWMzZDM0IDEwMDY0NAo+PiAtLS0gYS9kb2MvbXV4ZXJzLnRleGkKPj4gKysrIGIvZG9j L211eGVycy50ZXhpCj4+IEBAIC0zODc5LDQgKzM4NzksNTEgQEAgZmZtcGVnIC1mIHdlYm1fZGFz aF9tYW5pZmVzdCAtaSB2aWRlbzEud2VibSBcCj4+ICAgICAgICBtYW5pZmVzdC54bWwKPj4gQGVu ZCBleGFtcGxlCj4+IAo+PiArQGFuY2hvcnt3aGlwfQo+PiArQHNlY3Rpb24gd2hpcAo+PiArCj4+ ICtXZWJSVEMgKFJlYWwtVGltZSBDb21tdW5pY2F0aW9uKSBtdXhlciB0aGF0IHN1cHBvcnRzIHN1 Yi1zZWNvbmQgbGF0ZW5jeSBzdHJlYW1pbmcgYWNjb3JkaW5nIHRvCj4+ICt0aGUgV0hJUCAoV2Vi UlRDLUhUVFAgaW5nZXN0aW9uIHByb3RvY29sKSBzcGVjaWZpY2F0aW9uLgo+PiArCj4+ICtJdCB1 c2VzIEhUVFAgYXMgYSBzaWduYWxpbmcgcHJvdG9jb2wgdG8gZXhjaGFuZ2UgU0RQIGNhcGFiaWxp dGllcyBhbmQgSUNFIGxpdGUgY2FuZGlkYXRlcy4gVGhlbiwKPj4gK2l0IHVzZXMgU1RVTiBiaW5k aW5nIHJlcXVlc3RzIGFuZCByZXNwb25zZXMgdG8gZXN0YWJsaXNoIGEgc2Vzc2lvbiBvdmVyIFVE UC4gU3Vic2VxdWVudGx5LCBpdAo+PiAraW5pdGlhdGVzIGEgRFRMUyBoYW5kc2hha2UgdG8gZXhj aGFuZ2UgdGhlIFNSVFAgZW5jcnlwdGlvbiBrZXlzLiBMYXN0bHksIGl0IHNwbGl0cyB2aWRlbyBh bmQKPj4gK2F1ZGlvIGZyYW1lcyBpbnRvIFJUUCBwYWNrZXRzIGFuZCBlbmNyeXB0cyB0aGVtIHVz aW5nIFNSVFAuCj4+ICsKPj4gK0Vuc3VyZSB0aGF0IHlvdSB1c2UgSC4yNjQgd2l0aG91dCBCIGZy YW1lcyBhbmQgT3B1cyBmb3IgdGhlIGF1ZGlvIGNvZGVjLiBGb3IgZXhhbXBsZSwgdG8gY29udmVy dAo+PiArYW4gaW5wdXQgZmlsZSB3aXRoIEBjb21tYW5ke2ZmbXBlZ30gdG8gV2ViUlRDOgo+PiAr QGV4YW1wbGUKPj4gK2ZmbXBlZyAtcmUgLWkgaW5wdXQubXA0IC1hY29kZWMgbGlib3B1cyAtYXIg NDgwMDAgLWFjIDIgXAo+PiArICAtdmNvZGVjIGxpYngyNjQgLXByb2ZpbGU6diBiYXNlbGluZSAt dHVuZSB6ZXJvbGF0ZW5jeSAtdGhyZWFkcyAxIC1iZiAwIFwKPj4gKyAgLWYgd2hpcCAiaHR0cDov L2xvY2FsaG9zdDoxOTg1L3J0Yy92MS93aGlwLz9hcHA9bGl2ZSZzdHJlYW09bGl2ZXN0cmVhbSIK Pj4gK0BlbmQgZXhhbXBsZQo+PiArCj4+ICtGb3IgdGhpcyBleGFtcGxlLCB3ZSBoYXZlIGVtcGxv eWVkIGxvdyBsYXRlbmN5IG9wdGlvbnMsIHJlc3VsdGluZyBpbiBhbiBlbmQtdG8tZW5kIGxhdGVu Y3kgb2YKPj4gK2FwcHJveGltYXRlbHkgMTUwbXMuCj4+ICsKPj4gK0BzdWJzZWN0aW9uIE9wdGlv bnMKPj4gKwo+PiArVGhpcyBtdXhlciBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIG9wdGlvbnM6Cj4+ ICsKPj4gK0B0YWJsZSBAb3B0aW9uCj4+ICsKPj4gK0BpdGVtIGhhbmRzaGFrZV90aW1lb3V0IEB2 YXJ7aW50ZWdlcn0KPj4gK1NldCB0aGUgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgZm9yIElDRSBh bmQgRFRMUyBoYW5kc2hha2UuCj4+ICtEZWZhdWx0IHZhbHVlIGlzIDUwMDAuCj4+ICsKPj4gK0Bp dGVtIHBrdF9zaXplIEB2YXJ7aW50ZWdlcn0KPj4gK1NldCB0aGUgbWF4aW11bSBzaXplLCBpbiBi eXRlcywgb2YgUlRQIHBhY2tldHMgdGhhdCBzZW5kIG91dC4KPj4gK0RlZmF1bHQgdmFsdWUgaXMg MTUwMC4KPj4gKwo+PiArQGl0ZW0gYXV0aG9yaXphdGlvbiBAdmFye3N0cmluZ30KPj4gK1RoZSBv cHRpb25hbCBCZWFyZXIgdG9rZW4gZm9yIFdISVAgQXV0aG9yaXphdGlvbi4KPj4gKwo+PiArQGl0 ZW0gY2VydF9maWxlIEB2YXJ7c3RyaW5nfQo+PiArVGhlIG9wdGlvbmFsIGNlcnRpZmljYXRlIGZp bGUgcGF0aCBmb3IgRFRMUy4KPj4gKwo+PiArQGl0ZW0ga2V5X2ZpbGUgQHZhcntzdHJpbmd9Cj4+ ICtUaGUgb3B0aW9uYWwgcHJpdmF0ZSBrZXkgZmlsZSBwYXRoIGZvciBEVExTLgo+PiArCj4+ICtA ZW5kIHRhYmxlCj4+ICsKPj4gQGMgbWFuIGVuZCBNVVhFUlMKPj4gZGlmZiAtLWdpdCBhL2xpYmF2 Zm9ybWF0L01ha2VmaWxlIGIvbGliYXZmb3JtYXQvTWFrZWZpbGUKPj4gaW5kZXggNmM5OTkyYWRh Yi4uOTZhNjQzMDE1OCAxMDA2NDQKPj4gLS0tIGEvbGliYXZmb3JtYXQvTWFrZWZpbGUKPj4gKysr IGIvbGliYXZmb3JtYXQvTWFrZWZpbGUKPj4gQEAgLTYzNyw2ICs2MzcsNyBAQCBPQkpTLSQoQ09O RklHX1dFQk1fQ0hVTktfTVVYRVIpICAgICAgICAgICs9IHdlYm1fY2h1bmsubwo+PiBPQkpTLSQo Q09ORklHX1dFQlBfTVVYRVIpICAgICAgICAgICAgICAgICs9IHdlYnBlbmMubwo+PiBPQkpTLSQo Q09ORklHX1dFQlZUVF9ERU1VWEVSKSAgICAgICAgICAgICs9IHdlYnZ0dGRlYy5vIHN1YnRpdGxl cy5vCj4+IE9CSlMtJChDT05GSUdfV0VCVlRUX01VWEVSKSAgICAgICAgICAgICAgKz0gd2VidnR0 ZW5jLm8KPj4gK09CSlMtJChDT05GSUdfV0hJUF9NVVhFUikgICAgICAgICAgICAgICAgKz0gd2hp cC5vIGF2Yy5vIGh0dHAubyBzcnRwLm8gdGxzX29wZW5zc2wubwo+PiBPQkpTLSQoQ09ORklHX1dT QVVEX0RFTVVYRVIpICAgICAgICAgICAgICs9IHdlc3R3b29kX2F1ZC5vCj4+IE9CSlMtJChDT05G SUdfV1NBVURfTVVYRVIpICAgICAgICAgICAgICAgKz0gd2VzdHdvb2RfYXVkZW5jLm8KPj4gT0JK Uy0kKENPTkZJR19XU0RfREVNVVhFUikgICAgICAgICAgICAgICArPSB3c2RkZWMubyByYXdkZWMu bwo+PiBkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvYWxsZm9ybWF0cy5jIGIvbGliYXZmb3JtYXQv YWxsZm9ybWF0cy5jCj4+IGluZGV4IGI1YTIzZjljMTcuLjNlNWYxMjdkYzEgMTAwNjQ0Cj4+IC0t LSBhL2xpYmF2Zm9ybWF0L2FsbGZvcm1hdHMuYwo+PiArKysgYi9saWJhdmZvcm1hdC9hbGxmb3Jt YXRzLmMKPj4gQEAgLTUxNyw2ICs1MTcsNyBAQCBleHRlcm4gY29uc3QgRkZPdXRwdXRGb3JtYXQg ZmZfd2VicF9tdXhlcjsKPj4gZXh0ZXJuIGNvbnN0IEZGSW5wdXRGb3JtYXQgIGZmX3dlYnZ0dF9k ZW11eGVyOwo+PiBleHRlcm4gY29uc3QgRkZPdXRwdXRGb3JtYXQgZmZfd2VidnR0X211eGVyOwo+ PiBleHRlcm4gY29uc3QgRkZJbnB1dEZvcm1hdCAgZmZfd3NhdWRfZGVtdXhlcjsKPj4gK2V4dGVy biBjb25zdCBGRk91dHB1dEZvcm1hdCBmZl93aGlwX211eGVyOwo+PiBleHRlcm4gY29uc3QgRkZP dXRwdXRGb3JtYXQgZmZfd3NhdWRfbXV4ZXI7Cj4+IGV4dGVybiBjb25zdCBGRklucHV0Rm9ybWF0 ICBmZl93c2RfZGVtdXhlcjsKPj4gZXh0ZXJuIGNvbnN0IEZGSW5wdXRGb3JtYXQgIGZmX3dzdnFh X2RlbXV4ZXI7Cj4+IGRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC9hdmlvLmMgYi9saWJhdmZvcm1h dC9hdmlvLmMKPj4gaW5kZXggZDEwOWYzYWRmZi4uYjE0NmFjOWYxOSAxMDA2NDQKPj4gLS0tIGEv bGliYXZmb3JtYXQvYXZpby5jCj4+ICsrKyBiL2xpYmF2Zm9ybWF0L2F2aW8uYwo+PiBAQCAtMzM5 LDggKzMzOSw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgVVJMUHJvdG9jb2wgKnVybF9maW5kX3By b3RvY29sKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQo+PiAgICAgICAgIH0KPj4gICAgIH0KPj4gICAg IGF2X2ZyZWVwKCZwcm90b2NvbHMpOwo+PiAtICAgIGlmIChhdl9zdHJzdGFydChmaWxlbmFtZSwg Imh0dHBzOiIsIE5VTEwpIHx8IGF2X3N0cnN0YXJ0KGZpbGVuYW1lLCAidGxzOiIsIE5VTEwpKQo+ PiAtICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1dBUk5JTkcsICJodHRwcyBwcm90b2NvbCBu b3QgZm91bmQsIHJlY29tcGlsZSBGRm1wZWcgd2l0aCAiCj4+ICsgICAgaWYgKGF2X3N0cnN0YXJ0 KGZpbGVuYW1lLCAiaHR0cHM6IiwgTlVMTCkgfHwgYXZfc3Ryc3RhcnQoZmlsZW5hbWUsICJ0bHM6 IiwgTlVMTCkgfHwKPj4gKyAgICAgICAgYXZfc3Ryc3RhcnQoZmlsZW5hbWUsICJkdGxzOiIsIE5V TEwpKQo+PiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1dBUk5JTkcsICJodHRwcyBvciBk dGxzIHByb3RvY29sIG5vdCBmb3VuZCwgcmVjb21waWxlIEZGbXBlZyB3aXRoICIKPj4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVuc3NsLCBnbnV0bHMgb3Igc2VjdXJl dHJhbnNwb3J0IGVuYWJsZWQuXG4iKTsKPj4gCj4+ICAgICByZXR1cm4gTlVMTDsKPj4gZGlmZiAt LWdpdCBhL2xpYmF2Zm9ybWF0L2h0dHAuYyBiL2xpYmF2Zm9ybWF0L2h0dHAuYwo+PiBpbmRleCBm N2IyYThhMDI5Li5mZjYzYzI1OTY5IDEwMDY0NAo+PiAtLS0gYS9saWJhdmZvcm1hdC9odHRwLmMK Pj4gKysrIGIvbGliYXZmb3JtYXQvaHR0cC5jCj4+IEBAIC01NjIsNiArNTYyLDEyIEBAIGludCBm Zl9odHRwX2F2ZXJyb3IoaW50IHN0YXR1c19jb2RlLCBpbnQgZGVmYXVsdF9hdmVycm9yKQo+PiAg ICAgICAgIHJldHVybiBkZWZhdWx0X2F2ZXJyb3I7Cj4+IH0KPj4gCj4+ICtjb25zdCBjaGFyKiBm Zl9odHRwX2dldF9uZXdfbG9jYXRpb24oVVJMQ29udGV4dCAqaCkKPj4gK3sKPj4gKyAgICBIVFRQ Q29udGV4dCAqcyA9IGgtPnByaXZfZGF0YTsKPj4gKyAgICByZXR1cm4gcy0+bmV3X2xvY2F0aW9u Owo+PiArfQo+PiArCj4+IHN0YXRpYyBpbnQgaHR0cF93cml0ZV9yZXBseShVUkxDb250ZXh0KiBo LCBpbnQgc3RhdHVzX2NvZGUpCj4+IHsKPj4gICAgIGludCByZXQsIGJvZHkgPSAwLCByZXBseV9j b2RlLCBtZXNzYWdlX2xlbjsKPj4gZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L2h0dHAuaCBiL2xp YmF2Zm9ybWF0L2h0dHAuaAo+PiBpbmRleCA1ZjY1MGVmMTQzLi5kMWI2OTE4MjZiIDEwMDY0NAo+ PiAtLS0gYS9saWJhdmZvcm1hdC9odHRwLmgKPj4gKysrIGIvbGliYXZmb3JtYXQvaHR0cC5oCj4+ IEBAIC02Miw0ICs2Miw2IEBAIGludCBmZl9odHRwX2RvX25ld19yZXF1ZXN0MihVUkxDb250ZXh0 ICpoLCBjb25zdCBjaGFyICp1cmksIEFWRGljdGlvbmFyeSAqKm9wdGlvCj4+IAo+PiBpbnQgZmZf aHR0cF9hdmVycm9yKGludCBzdGF0dXNfY29kZSwgaW50IGRlZmF1bHRfYXZlcnJvcik7Cj4+IAo+ PiArY29uc3QgY2hhciogZmZfaHR0cF9nZXRfbmV3X2xvY2F0aW9uKFVSTENvbnRleHQgKmgpOwo+ PiArCj4+ICNlbmRpZiAvKiBBVkZPUk1BVF9IVFRQX0ggKi8KPj4gZGlmZiAtLWdpdCBhL2xpYmF2 Zm9ybWF0L3Byb3RvY29scy5jIGIvbGliYXZmb3JtYXQvcHJvdG9jb2xzLmMKPj4gaW5kZXggOTNh NmQ2NzI2MS4uZDM5NDQ1NGQ0MSAxMDA2NDQKPj4gLS0tIGEvbGliYXZmb3JtYXQvcHJvdG9jb2xz LmMKPj4gKysrIGIvbGliYXZmb3JtYXQvcHJvdG9jb2xzLmMKPj4gQEAgLTYyLDYgKzYyLDcgQEAg ZXh0ZXJuIGNvbnN0IFVSTFByb3RvY29sIGZmX3N1YmZpbGVfcHJvdG9jb2w7Cj4+IGV4dGVybiBj b25zdCBVUkxQcm90b2NvbCBmZl90ZWVfcHJvdG9jb2w7Cj4+IGV4dGVybiBjb25zdCBVUkxQcm90 b2NvbCBmZl90Y3BfcHJvdG9jb2w7Cj4+IGV4dGVybiBjb25zdCBVUkxQcm90b2NvbCBmZl90bHNf cHJvdG9jb2w7Cj4+ICtleHRlcm4gY29uc3QgVVJMUHJvdG9jb2wgZmZfZHRsc19wcm90b2NvbDsK Pj4gZXh0ZXJuIGNvbnN0IFVSTFByb3RvY29sIGZmX3VkcF9wcm90b2NvbDsKPj4gZXh0ZXJuIGNv bnN0IFVSTFByb3RvY29sIGZmX3VkcGxpdGVfcHJvdG9jb2w7Cj4+IGV4dGVybiBjb25zdCBVUkxQ cm90b2NvbCBmZl91bml4X3Byb3RvY29sOwo+PiBkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvc3J0 cC5oIGIvbGliYXZmb3JtYXQvc3J0cC5oCj4+IGluZGV4IDMxODlmOGY1NGIuLjM1MjI0Y2M5YmEg MTAwNjQ0Cj4+IC0tLSBhL2xpYmF2Zm9ybWF0L3NydHAuaAo+PiArKysgYi9saWJhdmZvcm1hdC9z cnRwLmgKPj4gQEAgLTI3LDcgKzI3LDcgQEAKPj4gc3RydWN0IEFWQUVTOwo+PiBzdHJ1Y3QgQVZI TUFDOwo+PiAKPj4gLXN0cnVjdCBTUlRQQ29udGV4dCB7Cj4+ICt0eXBlZGVmIHN0cnVjdCBTUlRQ Q29udGV4dCB7Cj4+ICAgICBzdHJ1Y3QgQVZBRVMgKmFlczsKPj4gICAgIHN0cnVjdCBBVkhNQUMg KmhtYWM7Cj4+ICAgICBpbnQgcnRwX2htYWNfc2l6ZSwgcnRjcF9obWFjX3NpemU7Cj4+IEBAIC00 MCw3ICs0MCw3IEBAIHN0cnVjdCBTUlRQQ29udGV4dCB7Cj4+ICAgICB1aW50MzJfdCByb2M7Cj4+ IAo+PiAgICAgdWludDMyX3QgcnRjcF9pbmRleDsKPj4gLX07Cj4+ICt9IFNSVFBDb250ZXh0Owo+ PiAKPj4gaW50IGZmX3NydHBfc2V0X2NyeXB0byhzdHJ1Y3QgU1JUUENvbnRleHQgKnMsIGNvbnN0 IGNoYXIgKnN1aXRlLAo+PiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhcmFt cyk7Cj4+IGRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC90bHMuYyBiL2xpYmF2Zm9ybWF0L3Rscy5j Cj4+IGluZGV4IGY5NmZmNjIxNWQuLmUwNmI3MDIyYmYgMTAwNjQ0Cj4+IC0tLSBhL2xpYmF2Zm9y bWF0L3Rscy5jCj4+ICsrKyBiL2xpYmF2Zm9ybWF0L3Rscy5jCj4+IEBAIC0xLDYgKzEsNyBAQAo+ PiAvKgo+PiAtICogVExTL1NTTCBQcm90b2NvbAo+PiArICogVExTL0RUTFMvU1NMIFByb3RvY29s Cj4+ICAqIENvcHlyaWdodCAoYykgMjAxMSBNYXJ0aW4gU3RvcnNqbwo+PiArICogQ29weXJpZ2h0 IChjKSAyMDI1IEphY2sgTGF1Cj4+ICAqCj4+ICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBl Zy4KPj4gICoKPj4gQEAgLTIwLDYgKzIxLDcgQEAKPj4gICovCj4+IAo+PiAjaW5jbHVkZSAiYXZm b3JtYXQuaCIKPj4gKyNpbmNsdWRlICJpbnRlcm5hbC5oIgo+PiAjaW5jbHVkZSAibmV0d29yay5o Igo+PiAjaW5jbHVkZSAib3Nfc3VwcG9ydC5oIgo+PiAjaW5jbHVkZSAidXJsLmgiCj4+IEBAIC05 Myw3ICs5NSw3IEBAIGludCBmZl90bHNfb3Blbl91bmRlcmx5aW5nKFRMU1NoYXJlZCAqYywgVVJM Q29udGV4dCAqcGFyZW50LCBjb25zdCBjaGFyICp1cmksIEFWCj4+ICAgICAgICAgICAgIGMtPmxp c3RlbiA9IDE7Cj4+ICAgICB9Cj4+IAo+PiAtICAgIGZmX3VybF9qb2luKGJ1Ziwgc2l6ZW9mKGJ1 ZiksICJ0Y3AiLCBOVUxMLCBjLT51bmRlcmx5aW5nX2hvc3QsIHBvcnQsICIlcyIsIHApOwo+PiAr ICAgIGZmX3VybF9qb2luKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGMtPmlzX2R0bHMgPyAidWRwIiA6ICJ0 Y3AiLCBOVUxMLCBjLT51bmRlcmx5aW5nX2hvc3QsIHBvcnQsICIlcyIsIHApOwo+PiAKPj4gICAg IGhpbnRzLmFpX2ZsYWdzID0gQUlfTlVNRVJJQ0hPU1Q7Cj4+ICAgICBpZiAoIWdldGFkZHJpbmZv KGMtPnVuZGVybHlpbmdfaG9zdCwgTlVMTCwgJmhpbnRzLCAmYWkpKSB7Cj4+IEBAIC0xMjQsNyAr MTI2LDY1IEBAIGludCBmZl90bHNfb3Blbl91bmRlcmx5aW5nKFRMU1NoYXJlZCAqYywgVVJMQ29u dGV4dCAqcGFyZW50LCBjb25zdCBjaGFyICp1cmksIEFWCj4+ICAgICB9Cj4+IAo+PiAgICAgZnJl ZWVudl91dGY4KGVudl9odHRwX3Byb3h5KTsKPj4gLSAgICByZXR1cm4gZmZ1cmxfb3Blbl93aGl0 ZWxpc3QoJmMtPnRjcCwgYnVmLCBBVklPX0ZMQUdfUkVBRF9XUklURSwKPj4gLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJnBhcmVudC0+aW50ZXJydXB0X2NhbGxiYWNrLCBvcHRpb25z LAo+PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQtPnByb3RvY29sX3do aXRlbGlzdCwgcGFyZW50LT5wcm90b2NvbF9ibGFja2xpc3QsIHBhcmVudCk7Cj4+ICsgICAgaWYg KGMtPmlzX2R0bHMpIHsKPj4gKyAgICAgICAgYXZfZGljdF9zZXRfaW50KG9wdGlvbnMsICJjb25u ZWN0IiwgMSwgMCk7Cj4+ICsgICAgICAgIGF2X2RpY3Rfc2V0X2ludChvcHRpb25zLCAiZmlmb19z aXplIiwgMCwgMCk7Cj4+ICsgICAgICAgIC8qIFNldCB0aGUgbWF4IHBhY2tldCBzaXplIHRvIHRo ZSBidWZmZXIgc2l6ZS4gKi8KPj4gKyAgICAgICAgYXZfZGljdF9zZXRfaW50KG9wdGlvbnMsICJw a3Rfc2l6ZSIsIGMtPm10dSwgMCk7Cj4+ICsgICAgfQo+PiArICAgIHJldCA9IGZmdXJsX29wZW5f d2hpdGVsaXN0KGMtPmlzX2R0bHMgPyAmYy0+dWRwIDogJmMtPnRjcCwgYnVmLCBBVklPX0ZMQUdf UkVBRF9XUklURSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcGFyZW50LT5p bnRlcnJ1cHRfY2FsbGJhY2ssIG9wdGlvbnMsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcGFyZW50LT5wcm90b2NvbF93aGl0ZWxpc3QsIHBhcmVudC0+cHJvdG9jb2xfYmxhY2ts aXN0LCBwYXJlbnQpOwo+PiArICAgIGlmIChjLT5pc19kdGxzKSB7Cj4+ICsgICAgICAgIGlmIChy ZXQgPCAwKSB7Cj4+ICsgICAgICAgICAgICBhdl9sb2coYywgQVZfTE9HX0VSUk9SLCAiV0hJUDog RmFpbGVkIHRvIGNvbm5lY3QgdWRwOi8vJXM6JWRcbiIsIGMtPnVuZGVybHlpbmdfaG9zdCwgcG9y dCk7Cj4+ICsgICAgICAgICAgICByZXR1cm4gcmV0Owo+PiArICAgICAgICB9Cj4+ICsgICAgICAg IC8qIE1ha2UgdGhlIHNvY2tldCBub24tYmxvY2tpbmcsIHNldCB0byBSRUFEIGFuZCBXUklURSBt b2RlIGFmdGVyIGNvbm5lY3RlZCAqLwo+PiArICAgICAgICBmZl9zb2NrZXRfbm9uYmxvY2soZmZ1 cmxfZ2V0X2ZpbGVfaGFuZGxlKGMtPnVkcCksIDEpOwo+PiArICAgICAgICBjLT51ZHAtPmZsYWdz IHw9IEFWSU9fRkxBR19SRUFEIHwgQVZJT19GTEFHX05PTkJMT0NLOwo+PiArICAgIH0KPj4gKyAg ICByZXR1cm4gcmV0Owo+PiB9Cj4+ICsKPj4gKy8qKgo+PiArICogUmVhZCBhbGwgZGF0YSBmcm9t IHRoZSBnaXZlbiBVUkwgdXJsIGFuZCBzdG9yZSBpdCBpbiB0aGUgZ2l2ZW4gYnVmZmVyIGJwLgo+ PiArICovCj4+ICtpbnQgZmZfdXJsX3JlYWRfYWxsKGNvbnN0IGNoYXIgKnVybCwgQVZCUHJpbnQg KmJwKQo+PiArewo+PiArICAgIGludCByZXQgPSAwOwo+PiArICAgIEFWRGljdGlvbmFyeSAqb3B0 cyA9IE5VTEw7Cj4+ICsgICAgVVJMQ29udGV4dCAqdWMgPSBOVUxMOwo+PiArICAgIGNoYXIgYnVm W01BWF9VUkxfU0laRV07Cj4+ICsKPj4gKyAgICByZXQgPSBmZnVybF9vcGVuX3doaXRlbGlzdCgm dWMsIHVybCwgQVZJT19GTEFHX1JFQUQsIE5VTEwsICZvcHRzLCBOVUxMLCBOVUxMLCBOVUxMKTsK Pj4gKyAgICBpZiAocmV0IDwgMCkgewo+PiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VS Uk9SLCAiVExTOiBGYWlsZWQgdG8gb3BlbiB1cmwgJXNcbiIsIHVybCk7Cj4+ICsgICAgICAgIGdv dG8gZW5kOwo+PiArICAgIH0KPj4gKwo+PiArICAgIHdoaWxlICgxKSB7Cj4+ICsgICAgICAgIHJl dCA9IGZmdXJsX3JlYWQodWMsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwo+PiArICAgICAgICBpZiAocmV0 ID09IEFWRVJST1JfRU9GKSB7Cj4+ICsgICAgICAgICAgICAvKiBSZXNldCB0aGUgZXJyb3IgYmVj YXVzZSB3ZSByZWFkIGFsbCByZXNwb25zZSBhcyBhbnN3ZXIgdXRpbCBFT0YuICovCj4+ICsgICAg ICAgICAgICByZXQgPSAwOwo+PiArICAgICAgICAgICAgYnJlYWs7Cj4+ICsgICAgICAgIH0KPj4g KyAgICAgICAgaWYgKHJldCA8PSAwKSB7Cj4+ICsgICAgICAgICAgICBhdl9sb2coTlVMTCwgQVZf TE9HX0VSUk9SLCAiVExTOiBGYWlsZWQgdG8gcmVhZCBmcm9tIHVybD0lcywga2V5IGlzICVzXG4i LCB1cmwsIGJwLT5zdHIpOwo+PiArICAgICAgICAgICAgZ290byBlbmQ7Cj4+ICsgICAgICAgIH0K Pj4gKwo+PiArICAgICAgICBhdl9icHJpbnRmKGJwLCAiJS4qcyIsIHJldCwgYnVmKTsKPj4gKyAg ICAgICAgaWYgKCFhdl9icHJpbnRfaXNfY29tcGxldGUoYnApKSB7Cj4+ICsgICAgICAgICAgICBh dl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiVExTOiBFeGNlZWQgbWF4IHNpemUgJS4qcywgJXNc biIsIHJldCwgYnVmLCBicC0+c3RyKTsKPj4gKyAgICAgICAgICAgIHJldCA9IEFWRVJST1IoRUlP KTsKPj4gKyAgICAgICAgICAgIGdvdG8gZW5kOwo+PiArICAgICAgICB9Cj4+ICsgICAgfQo+PiAr Cj4+ICtlbmQ6Cj4+ICsgICAgZmZ1cmxfY2xvc2VwKCZ1Yyk7Cj4+ICsgICAgYXZfZGljdF9mcmVl KCZvcHRzKTsKPj4gKyAgICByZXR1cm4gcmV0Owo+PiArfQo+PiBcIE5vIG5ld2xpbmUgYXQgZW5k IG9mIGZpbGUKPj4gZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L3Rscy5oIGIvbGliYXZmb3JtYXQv dGxzLmgKPj4gaW5kZXggNmM2YWEwMWE5YS4uY2I2MjZmMTk3NyAxMDA2NDQKPj4gLS0tIGEvbGli YXZmb3JtYXQvdGxzLmgKPj4gKysrIGIvbGliYXZmb3JtYXQvdGxzLmgKPj4gQEAgLTEsNiArMSw3 IEBACj4+IC8qCj4+IC0gKiBUTFMvU1NMIFByb3RvY29sCj4+ICsgKiBUTFMvRFRMUy9TU0wgUHJv dG9jb2wKPj4gICogQ29weXJpZ2h0IChjKSAyMDExIE1hcnRpbiBTdG9yc2pvCj4+ICsgKiBDb3B5 cmlnaHQgKGMpIDIwMjUgSmFjayBMYXUKPj4gICoKPj4gICogVGhpcyBmaWxlIGlzIHBhcnQgb2Yg RkZtcGVnLgo+PiAgKgo+PiBAQCAtMjIsMTAgKzIzLDI3IEBACj4+ICNpZm5kZWYgQVZGT1JNQVRf VExTX0gKPj4gI2RlZmluZSBBVkZPUk1BVF9UTFNfSAo+PiAKPj4gKyNpbmNsdWRlICJsaWJhdnV0 aWwvYnByaW50LmgiCj4+ICNpbmNsdWRlICJsaWJhdnV0aWwvb3B0LmgiCj4+IAo+PiAjaW5jbHVk ZSAidXJsLmgiCj4+IAo+PiArLyoqCj4+ICsgKiBNYXhpbXVtIHNpemUgbGltaXQgb2YgYSBjZXJ0 aWZpY2F0ZSBhbmQgcHJpdmF0ZSBrZXkgc2l6ZS4KPj4gKyAqLwo+PiArI2RlZmluZSBNQVhfQ0VS VElGSUNBVEVfU0laRSA4MTkyCj4+ICsKPj4gK2VudW0gRFRMU1N0YXRlIHsKPj4gKyAgICBEVExT X1NUQVRFX05PTkUsCj4+ICsKPj4gKyAgICAvKiBXaGV0aGVyIERUTFMgaGFuZHNoYWtlIGlzIGZp bmlzaGVkLiAqLwo+PiArICAgIERUTFNfU1RBVEVfRklOSVNIRUQsCj4+ICsgICAgLyogV2hldGhl ciBEVExTIHNlc3Npb24gaXMgY2xvc2VkLiAqLwo+PiArICAgIERUTFNfU1RBVEVfQ0xPU0VELAo+ PiArICAgIC8qIFdoZXRoZXIgRFRMUyBoYW5kc2hha2UgaXMgZmFpbGVkLiAqLwo+PiArICAgIERU TFNfU1RBVEVfRkFJTEVELAo+PiArfTsKPj4gKwo+PiB0eXBlZGVmIHN0cnVjdCBUTFNTaGFyZWQg ewo+PiAgICAgY2hhciAqY2FfZmlsZTsKPj4gICAgIGludCB2ZXJpZnk7Cj4+IEBAIC00MCw2ICs1 OCwyNSBAQCB0eXBlZGVmIHN0cnVjdCBUTFNTaGFyZWQgewo+PiAgICAgaW50IG51bWVyaWNob3N0 Owo+PiAKPj4gICAgIFVSTENvbnRleHQgKnRjcDsKPj4gKwo+PiArICAgIGludCBpc19kdGxzOwo+ PiArCj4+ICsgICAgZW51bSBEVExTU3RhdGUgc3RhdGU7Cj4+ICsKPj4gKyAgICBpbnQgdXNlX2V4 dGVybmFsX3VkcDsKPj4gKyAgICBVUkxDb250ZXh0ICp1ZHA7Cj4+ICsKPj4gKyAgICAvKiBUaGUg ZmluZ2VycHJpbnQgb2YgY2VydGlmaWNhdGUsIHVzZWQgaW4gU0RQIG9mZmVyLiAqLwo+PiArICAg IGNoYXIgKmZpbmdlcnByaW50Owo+PiArCj4+ICsgICAgLyogVGhlIGNlcnRpZmljYXRlIGFuZCBw cml2YXRlIGtleSBjb250ZW50IHVzZWQgZm9yIERUTFMgaGFuZHNoYWtlICovCj4+ICsgICAgY2hh ciogY2VydF9idWY7Cj4+ICsgICAgY2hhcioga2V5X2J1ZjsKPj4gKyAgICAvKioKPj4gKyAgICAg KiBUaGUgc2l6ZSBvZiBSVFAgcGFja2V0LCBzaG91bGQgZ2VuZXJhbGx5IGJlIHNldCB0byBNVFUu Cj4+ICsgICAgICogTm90ZSB0aGF0IHBpb24gcmVxdWlyZXMgYSBzbWFsbGVyIHZhbHVlLCBmb3Ig ZXhhbXBsZSwgMTIwMC4KPj4gKyAgICAgKi8KPj4gKyAgICBpbnQgbXR1Owo+PiB9IFRMU1NoYXJl ZDsKPj4gCj4+ICNkZWZpbmUgVExTX09QVEZMIChBVl9PUFRfRkxBR19ERUNPRElOR19QQVJBTSB8 IEFWX09QVF9GTEFHX0VOQ09ESU5HX1BBUkFNKQo+PiBAQCAtNTEsMTAgKzg4LDI3IEBAIHR5cGVk ZWYgc3RydWN0IFRMU1NoYXJlZCB7Cj4+ICAgICB7ImtleV9maWxlIiwgICAiUHJpdmF0ZSBrZXkg ZmlsZSIsICAgICAgICAgICAgICAgICAgICBvZmZzZXRvZihwc3RydWN0LCBvcHRpb25zX2ZpZWxk IC4ga2V5X2ZpbGUpLCAgQVZfT1BUX1RZUEVfU1RSSU5HLCAuZmxhZ3MgPSBUTFNfT1BURkwgfSwg XAo+PiAgICAgeyJsaXN0ZW4iLCAgICAgIkxpc3RlbiBmb3IgaW5jb21pbmcgY29ubmVjdGlvbnMi LCAgICAgb2Zmc2V0b2YocHN0cnVjdCwgb3B0aW9uc19maWVsZCAuIGxpc3RlbiksICAgIEFWX09Q VF9UWVBFX0lOVCwgeyAuaTY0ID0gMCB9LCAwLCAxLCAuZmxhZ3MgPSBUTFNfT1BURkwgfSwgXAo+ PiAgICAgeyJ2ZXJpZnlob3N0IiwgIlZlcmlmeSBhZ2FpbnN0IGEgc3BlY2lmaWMgaG9zdG5hbWUi LCAgb2Zmc2V0b2YocHN0cnVjdCwgb3B0aW9uc19maWVsZCAuIGhvc3QpLCAgICAgIEFWX09QVF9U WVBFX1NUUklORywgLmZsYWdzID0gVExTX09QVEZMIH0sIFwKPj4gLSAgICB7Imh0dHBfcHJveHki LCAiU2V0IHByb3h5IHRvIHR1bm5lbCB0aHJvdWdoIiwgICAgICAgICBvZmZzZXRvZihwc3RydWN0 LCBvcHRpb25zX2ZpZWxkIC4gaHR0cF9wcm94eSksIEFWX09QVF9UWVBFX1NUUklORywgLmZsYWdz ID0gVExTX09QVEZMIH0KPj4gKyAgICB7Imh0dHBfcHJveHkiLCAiU2V0IHByb3h5IHRvIHR1bm5l bCB0aHJvdWdoIiwgICAgICAgICBvZmZzZXRvZihwc3RydWN0LCBvcHRpb25zX2ZpZWxkIC4gaHR0 cF9wcm94eSksIEFWX09QVF9UWVBFX1NUUklORywgLmZsYWdzID0gVExTX09QVEZMIH0sIFwKPj4g KyAgICB7InVzZV9leHRlcm5hbF91ZHAiLCAiVXNlIGV4dGVybmFsIFVEUCBmcm9tIG11eGVyIG9y IGRlbXV4ZXIiLCBvZmZzZXRvZihwc3RydWN0LCBvcHRpb25zX2ZpZWxkIC4gdXNlX2V4dGVybmFs X3VkcCksIEFWX09QVF9UWVBFX0lOVCwgeyAuaTY0ID0gMH0sIDAsIDEsIC5mbGFncyA9IFRMU19P UFRGTCB9LCBcCj4+ICsgICAgeyJtdHUiLCAiTWF4aW11bSBUcmFuc21pc3Npb24gVW5pdCIsIG9m ZnNldG9mKHBzdHJ1Y3QsIG9wdGlvbnNfZmllbGQgLiBtdHUpLCBBVl9PUFRfVFlQRV9JTlQsICB7 IC5pNjQgPSAwfSwgSU5UNjRfTUlOLCBJTlQ2NF9NQVgsIC5mbGFncyA9IFRMU19PUFRGTH0sIFwK Pj4gKyAgICB7ImZpbmdlcnByaW50IiwgIlRoZSBvcHRpb25hbCBmaW5nZXJwcmludCBmb3IgRFRM UyIsIG9mZnNldG9mKHBzdHJ1Y3QsIG9wdGlvbnNfZmllbGQgLiBmaW5nZXJwcmludCksIEFWX09Q VF9UWVBFX1NUUklORywgLmZsYWdzID0gVExTX09QVEZMfSwgXAo+PiArICAgIHsiY2VydF9idWYi LCAiVGhlIG9wdGlvbmFsIGNlcnRpZmljYXRlIGJ1ZmZlciBmb3IgRFRMUyIsIG9mZnNldG9mKHBz dHJ1Y3QsIG9wdGlvbnNfZmllbGQgLiBjZXJ0X2J1ZiksIEFWX09QVF9UWVBFX1NUUklORywgLmZs YWdzID0gVExTX09QVEZMfSwgXAo+PiArICAgIHsia2V5X2J1ZiIsICJUaGUgb3B0aW9uYWwgcHJp dmF0ZSBrZXkgYnVmZmVyIGZvciBEVExTIiwgb2Zmc2V0b2YocHN0cnVjdCwgb3B0aW9uc19maWVs ZCAuIGtleV9idWYpLCBBVl9PUFRfVFlQRV9TVFJJTkcsIC5mbGFncyA9IFRMU19PUFRGTH0KPj4g Cj4+IGludCBmZl90bHNfb3Blbl91bmRlcmx5aW5nKFRMU1NoYXJlZCAqYywgVVJMQ29udGV4dCAq cGFyZW50LCBjb25zdCBjaGFyICp1cmksIEFWRGljdGlvbmFyeSAqKm9wdGlvbnMpOwo+PiAKPj4g K2ludCBmZl91cmxfcmVhZF9hbGwoY29uc3QgY2hhciAqdXJsLCBBVkJQcmludCAqYnApOwo+PiAr Cj4+ICtpbnQgZmZfZHRsc19zZXRfdWRwKFVSTENvbnRleHQgKmgsIFVSTENvbnRleHQgKnVkcCk7 Cj4+ICsKPj4gK2ludCBmZl9kdGxzX2V4cG9ydF9tYXRlcmlhbHMoVVJMQ29udGV4dCAqaCwgY2hh ciAqZHRsc19zcnRwX21hdGVyaWFscywgc2l6ZV90IG1hdGVyaWFsc19zeik7Cj4+ICsKPj4gK2lu dCBmZl9kdGxzX3N0YXRlKFVSTENvbnRleHQgKmgpOwo+PiArCj4+ICtpbnQgZmZfc3NsX3JlYWRf a2V5X2NlcnQoY2hhciAqa2V5X3VybCwgY2hhciAqY2VydF91cmwsIGNoYXIgKmtleV9idWYsIHNp emVfdCBrZXlfc3osIGNoYXIgKmNlcnRfYnVmLCBzaXplX3QgY2VydF9zeiwgY2hhciAqKmZpbmdl cnByaW50KTsKPj4gKwo+PiAraW50IGZmX3NzbF9nZW5fa2V5X2NlcnQoY2hhciAqa2V5X2J1Ziwg c2l6ZV90IGtleV9zeiwgY2hhciAqY2VydF9idWYsIHNpemVfdCBjZXJ0X3N6LCBjaGFyICoqZmlu Z2VycHJpbnQpOwo+PiArCj4+IHZvaWQgZmZfZ251dGxzX2luaXQodm9pZCk7Cj4+IHZvaWQgZmZf Z251dGxzX2RlaW5pdCh2b2lkKTsKPj4gCj4+IGRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC90bHNf b3BlbnNzbC5jIGIvbGliYXZmb3JtYXQvdGxzX29wZW5zc2wuYwo+PiBpbmRleCA4YjBjZjllZmIy Li5iNTg5ZDVkOTBhIDEwMDY0NAo+PiAtLS0gYS9saWJhdmZvcm1hdC90bHNfb3BlbnNzbC5jCj4+ ICsrKyBiL2xpYmF2Zm9ybWF0L3Rsc19vcGVuc3NsLmMKPj4gQEAgLTEsNiArMSw3IEBACj4+IC8q Cj4+IC0gKiBUTFMvU1NMIFByb3RvY29sCj4+ICsgKiBUTFMvRFRMUy9TU0wgUHJvdG9jb2wKPj4g ICogQ29weXJpZ2h0IChjKSAyMDExIE1hcnRpbiBTdG9yc2pvCj4+ICsgKiBDb3B5cmlnaHQgKGMp IDIwMjUgSmFjayBMYXUKPj4gICoKPj4gICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgo+ PiAgKgo+PiBAQCAtMTksOCArMjAsMTAgQEAKPj4gICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQo+PiAg Ki8KPj4gCj4+ICsjaW5jbHVkZSAibGliYXZ1dGlsL21lbS5oIgo+PiAjaW5jbHVkZSAibmV0d29y ay5oIgo+PiAjaW5jbHVkZSAib3Nfc3VwcG9ydC5oIgo+PiArI2luY2x1ZGUgImxpYmF2dXRpbC9y YW5kb21fc2VlZC5oIgo+PiAjaW5jbHVkZSAidXJsLmgiCj4+ICNpbmNsdWRlICJ0bHMuaCIKPj4g I2luY2x1ZGUgImxpYmF2dXRpbC9vcHQuaCIKPj4gQEAgLTI5LDYgKzMyLDQzNiBAQAo+PiAjaW5j bHVkZSA8b3BlbnNzbC9zc2wuaD4KPj4gI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Cj4+IAo+PiAr LyoqCj4+ICsgKiBSZXR1cm5zIGEgaGVhcOKAkGFsbG9jYXRlZCBudWxs4oCQdGVybWluYXRlZCBz dHJpbmcgY29udGFpbmluZwo+PiArICogdGhlIFBFTeKAkGVuY29kZWQgcHVibGljIGtleS4gIENh bGxlciBtdXN0IGZyZWUuCj4+ICsgKi8KPj4gK3N0YXRpYyBjaGFyICpwa2V5X3RvX3BlbV9zdHJp bmcoRVZQX1BLRVkgKnBrZXkpIHsKPj4gKyAgICBCSU8gICAgICAgICptZW0gPSBOVUxMOwo+PiAr ICAgIEJVRl9NRU0gICAgKmJwdHIgPSBOVUxMOwo+PiArICAgIGNoYXIgICAgICAgKnBlbV9zdHIg PSBOVUxMOwo+PiArCj4+ICsgICAgLy8gQ3JlYXRlIGEgbWVtb3J5IEJJTwo+PiArICAgIGlmICgh KG1lbSA9IEJJT19uZXcoQklPX3NfbWVtKCkpKSkKPj4gKyAgICAgICAgZ290byBlcnI7Cj4+ICsK Pj4gKyAgICAvLyBXcml0ZSBwdWJsaWMga2V5IGluIFBFTSBmb3JtCj4+ICsgICAgaWYgKCFQRU1f d3JpdGVfYmlvX1ByaXZhdGVLZXkobWVtLCBwa2V5LCBOVUxMLCBOVUxMLCAwLCBOVUxMLCBOVUxM KSkKPj4gKyAgICAgICAgZ290byBlcnI7Cj4+ICsKPj4gKyAgICAvLyBFeHRyYWN0IHBvaW50ZXIv bGVuZ3RoCj4+ICsgICAgQklPX2dldF9tZW1fcHRyKG1lbSwgJmJwdHIpOwo+PiArICAgIGlmICgh YnB0ciB8fCAhYnB0ci0+bGVuZ3RoKQo+PiArICAgICAgICBnb3RvIGVycjsKPj4gKwo+PiArICAg IC8vIEFsbG9jYXRlIHN0cmluZyAoKzEgZm9yIE5VTCkKPj4gKyAgICBwZW1fc3RyID0gYXZfbWFs bG9jKGJwdHItPmxlbmd0aCArIDEpOwo+PiArICAgIGlmICghcGVtX3N0cikKPj4gKyAgICAgICAg Z290byBlcnI7Cj4+ICsKPj4gKyAgICAvLyBDb3B5IGRhdGEgJiBOVUzigJB0ZXJtaW5hdGUKPj4g KyAgICBtZW1jcHkocGVtX3N0ciwgYnB0ci0+ZGF0YSwgYnB0ci0+bGVuZ3RoKTsKPj4gKyAgICBw ZW1fc3RyW2JwdHItPmxlbmd0aF0gPSAnXDAnOwo+PiArCj4+ICtjbGVhbnVwOgo+PiArICAgIEJJ T19mcmVlKG1lbSk7Cj4+ICsgICAgcmV0dXJuIHBlbV9zdHI7Cj4+ICsKPj4gK2VycjoKPj4gKyAg ICAvLyBlcnJvciBwYXRoOiBmcmVlIGFuZCByZXR1cm4gTlVMTAo+PiArICAgIGZyZWUocGVtX3N0 cik7Cj4+ICsgICAgcGVtX3N0ciA9IE5VTEw7Cj4+ICsgICAgZ290byBjbGVhbnVwOwo+PiArfQo+ PiArCj4+ICsvKioKPj4gKyAqIFNlcmlhbGl6ZSBhbiBYNTA5IGNlcnRpZmljYXRlIHRvIGEgYXZf bWFsbG9j4oCZZCBQRU0gc3RyaW5nLgo+PiArICogQ2FsbGVyIG11c3QgZnJlZSB0aGUgcmV0dXJu ZWQgcG9pbnRlci4KPj4gKyAqLwo+PiArc3RhdGljIGNoYXIgKmNlcnRfdG9fcGVtX3N0cmluZyhY NTA5ICpjZXJ0KQo+PiArewo+PiArICAgIEJJTyAgICAgKm1lbSA9IEJJT19uZXcoQklPX3NfbWVt KCkpOwo+PiArICAgIEJVRl9NRU0gKmJwdHIgPSBOVUxMOwo+PiArICAgIGNoYXIgICAgKm91dCA9 IE5VTEw7Cj4+ICsKPj4gKyAgICBpZiAoIW1lbSkgZ290byBlcnI7Cj4+ICsKPj4gKyAgICAvKiBX cml0ZSB0aGUgUEVNIGNlcnRpZmljYXRlICovCj4+ICsgICAgaWYgKCFQRU1fd3JpdGVfYmlvX1g1 MDkobWVtLCBjZXJ0KSkKPj4gKyAgICAgICAgZ290byBlcnI7Cj4+ICsKPj4gKyAgICBCSU9fZ2V0 X21lbV9wdHIobWVtLCAmYnB0cik7Cj4+ICsgICAgaWYgKCFicHRyIHx8ICFicHRyLT5sZW5ndGgp IGdvdG8gZXJyOwo+PiArCj4+ICsgICAgb3V0ID0gYXZfbWFsbG9jKGJwdHItPmxlbmd0aCArIDEp Owo+PiArICAgIGlmICghb3V0KSBnb3RvIGVycjsKPj4gKwo+PiArICAgIG1lbWNweShvdXQsIGJw dHItPmRhdGEsIGJwdHItPmxlbmd0aCk7Cj4+ICsgICAgb3V0W2JwdHItPmxlbmd0aF0gPSAnXDAn Owo+PiArCj4+ICtjbGVhbnVwOgo+PiArICAgIEJJT19mcmVlKG1lbSk7Cj4+ICsgICAgcmV0dXJu IG91dDsKPj4gKwo+PiArZXJyOgo+PiArICAgIGZyZWUob3V0KTsKPj4gKyAgICBvdXQgPSBOVUxM Owo+PiArICAgIGdvdG8gY2xlYW51cDsKPj4gK30KPj4gKwo+PiArCj4+ICsvKioKPj4gKyAqIEdl bmVyYXRlIGEgU0hBLTI1NiBmaW5nZXJwcmludCBvZiBhbiBYLjUwOSBjZXJ0aWZpY2F0ZS4KPj4g KyAqCj4+ICsgKiBAcGFyYW0gY3R4ICAgICAgIEFWRm9ybWF0Q29udGV4dCBmb3IgbG9nZ2luZyAo Y2FuIGJlIE5VTEwpCj4+ICsgKiBAcGFyYW0gY2VydCAgICAgIFg1MDkgY2VydGlmaWNhdGUgdG8g ZmluZ2VycHJpbnQKPj4gKyAqIEByZXR1cm4gICAgICAgICAgTmV3bHkgYWxsb2NhdGVkIGZpbmdl cnByaW50IHN0cmluZyBpbiAiQUE6QkI6Q0M64oCmIiBmb3JtYXQsCj4+ICsgKiAgICAgICAgICAg ICAgICAgIG9yIE5VTEwgb24gZXJyb3IgKGxvZ3MgdmlhIGF2X2xvZyBpZiBjdHggaXMgbm90IE5V TEwpLgo+PiArICogICAgICAgICAgICAgICAgICBDYWxsZXIgbXVzdCBmcmVlKCkgdGhlIHJldHVy bmVkIHN0cmluZy4KPj4gKyAqLwo+PiArc3RhdGljIGNoYXIgKmdlbmVyYXRlX2ZpbmdlcnByaW50 KFg1MDkgKmNlcnQpCj4+ICt7Cj4+ICsgICAgdW5zaWduZWQgY2hhciBtZFtFVlBfTUFYX01EX1NJ WkVdOwo+PiArICAgIGludCBuID0gMDsKPj4gKyAgICBBVkJQcmludCBmaW5nZXJwcmludDsKPj4g KyAgICBjaGFyICpyZXN1bHQgPSBOVUxMOwo+PiArICAgIGludCBpOwo+PiArCj4+ICsgICAgLyog VG8gcHJldmVudCBhIGNyYXNoIGR1cmluZyBjbGVhbnVwLCBhbHdheXMgaW5pdGlhbGl6ZSBpdC4g Ki8KPj4gKyAgICBhdl9icHJpbnRfaW5pdCgmZmluZ2VycHJpbnQsIDAsIEFWX0JQUklOVF9TSVpF X1VOTElNSVRFRCk7Cj4+ICsKPj4gKyAgICBpZiAoWDUwOV9kaWdlc3QoY2VydCwgRVZQX3NoYTI1 NigpLCBtZCwgJm4pICE9IDEpIHsKPj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJP UiwgIlRMUzogRmFpbGVkIHRvIGdlbmVyYXRlIGZpbmdlcnByaW50LCAlc1xuIiwgRVJSX2Vycm9y X3N0cmluZyhFUlJfZ2V0X2Vycm9yKCksIE5VTEwpKTsKPj4gKyAgICAgICAgZ290byBlbmQ7Cj4+ ICsgICAgfQo+PiArCj4+ICsgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewo+PiArICAgICAg ICBhdl9icHJpbnRmKCZmaW5nZXJwcmludCwgIiUwMlgiLCBtZFtpXSk7Cj4+ICsgICAgICAgIGlm IChpICsgMSA8IG4pCj4+ICsgICAgICAgICAgICBhdl9icHJpbnRmKCZmaW5nZXJwcmludCwgIjoi KTsKPj4gKyAgICB9Cj4+ICsKPj4gKyAgICBpZiAoIWZpbmdlcnByaW50LnN0ciB8fCAhc3RybGVu KGZpbmdlcnByaW50LnN0cikpIHsKPj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJP UiwgIlRMUzogRmluZ2VycHJpbnQgaXMgZW1wdHlcbiIpOwo+PiArICAgICAgICBnb3RvIGVuZDsK Pj4gKyAgICB9Cj4+ICsKPj4gKyAgICByZXN1bHQgPSBhdl9zdHJkdXAoZmluZ2VycHJpbnQuc3Ry KTsKPj4gKyAgICBpZiAoIXJlc3VsdCkgewo+PiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9H X0VSUk9SLCAiVExTOiBPdXQgb2YgbWVtb3J5IGdlbmVyYXRpbmcgZmluZ2VycHJpbnRcbiIpOwo+ PiArICAgIH0KPj4gKwo+PiArZW5kOgo+PiArICAgIGF2X2JwcmludF9maW5hbGl6ZSgmZmluZ2Vy cHJpbnQsIE5VTEwpOwo+PiArICAgIHJldHVybiByZXN1bHQ7Cj4+ICt9Cj4+ICsKPj4gK2ludCBm Zl9zc2xfcmVhZF9rZXlfY2VydChjaGFyICprZXlfdXJsLCBjaGFyICpjZXJ0X3VybCwgY2hhciAq a2V5X2J1Ziwgc2l6ZV90IGtleV9zeiwgY2hhciAqY2VydF9idWYsIHNpemVfdCBjZXJ0X3N6LCBj aGFyICoqZmluZ2VycHJpbnQpCj4+ICt7Cj4+ICsgICAgaW50IHJldCA9IDA7Cj4+ICsgICAgQklP ICprZXlfYiA9IE5VTEwsICpjZXJ0X2IgPSBOVUxMOwo+PiArICAgIEFWQlByaW50IGtleV9icCwg Y2VydF9icDsKPj4gKyAgICBFVlBfUEtFWSAqcGtleTsKPj4gKyAgICBYNTA5ICpjZXJ0Owo+PiAr ICAgIGNoYXIgKmtleV90ZW0gPSBOVUxMLCAqY2VydF90ZW0gPSBOVUxMOwo+PiArCj4+ICsgICAg LyogVG8gcHJldmVudCBhIGNyYXNoIGR1cmluZyBjbGVhbnVwLCBhbHdheXMgaW5pdGlhbGl6ZSBp dC4gKi8KPj4gKyAgICBhdl9icHJpbnRfaW5pdCgma2V5X2JwLCAxLCBNQVhfQ0VSVElGSUNBVEVf U0laRSk7Cj4+ICsgICAgYXZfYnByaW50X2luaXQoJmNlcnRfYnAsIDEsIE1BWF9DRVJUSUZJQ0FU RV9TSVpFKTsKPj4gKwo+PiArICAgIC8qIFJlYWQga2V5IGZpbGUuICovCj4+ICsgICAgcmV0ID0g ZmZfdXJsX3JlYWRfYWxsKGtleV91cmwsICZrZXlfYnApOwo+PiArICAgIGlmIChyZXQgPCAwKSB7 Cj4+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJUTFM6IEZhaWxlZCB0byBv cGVuIGtleSBmaWxlICVzXG4iLCBrZXlfdXJsKTsKPj4gKyAgICAgICAgZ290byBlbmQ7Cj4+ICsg ICAgfQo+PiArCj4+ICsgICAgaWYgKCEoa2V5X2IgPSBCSU9fbmV3KEJJT19zX21lbSgpKSkpIHsK Pj4gKyAgICAgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOwo+PiArICAgICAgICBnb3RvIGVuZDsK Pj4gKyAgICB9Cj4+ICsKPj4gKyAgICBCSU9fd3JpdGUoa2V5X2IsIGtleV9icC5zdHIsIGtleV9i cC5sZW4pOwo+PiArICAgIHBrZXkgPSBQRU1fcmVhZF9iaW9fUHJpdmF0ZUtleShrZXlfYiwgTlVM TCwgTlVMTCwgTlVMTCk7Cj4+ICsgICAgaWYgKCFwa2V5KSB7Cj4+ICsgICAgICAgIGF2X2xvZyhO VUxMLCBBVl9MT0dfRVJST1IsICJUTFM6IEZhaWxlZCB0byByZWFkIHByaXZhdGUga2V5IGZyb20g JXNcbiIsIGtleV91cmwpOwo+PiArICAgICAgICByZXQgPSBBVkVSUk9SKEVJTyk7Cj4+ICsgICAg ICAgIGdvdG8gZW5kOwo+PiArICAgIH0KPj4gKwo+PiArICAgIC8qIFJlYWQgY2VydGlmaWNhdGUu ICovCj4+ICsgICAgcmV0ID0gZmZfdXJsX3JlYWRfYWxsKGNlcnRfdXJsLCAmY2VydF9icCk7Cj4+ ICsgICAgaWYgKHJldCA8IDApIHsKPj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJP UiwgIlRMUzogRmFpbGVkIHRvIG9wZW4gY2VydCBmaWxlICVzXG4iLCBjZXJ0X3VybCk7Cj4+ICsg ICAgICAgIGdvdG8gZW5kOwo+PiArICAgIH0KPj4gKwo+PiArICAgIGlmICghKGNlcnRfYiA9IEJJ T19uZXcoQklPX3NfbWVtKCkpKSkgewo+PiArICAgICAgICByZXQgPSBBVkVSUk9SKEVOT01FTSk7 Cj4+ICsgICAgICAgIGdvdG8gZW5kOwo+PiArICAgIH0KPj4gKwo+PiArICAgIEJJT193cml0ZShj ZXJ0X2IsIGNlcnRfYnAuc3RyLCBjZXJ0X2JwLmxlbik7Cj4+ICsgICAgY2VydCA9IFBFTV9yZWFk X2Jpb19YNTA5KGNlcnRfYiwgTlVMTCwgTlVMTCwgTlVMTCk7Cj4+ICsgICAgaWYgKCFjZXJ0KSB7 Cj4+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJUTFM6IEZhaWxlZCB0byBy ZWFkIGNlcnRpZmljYXRlIGZyb20gJXNcbiIsIGNlcnRfdXJsKTsKPj4gKyAgICAgICAgcmV0ID0g QVZFUlJPUihFSU8pOwo+PiArICAgICAgICBnb3RvIGVuZDsKPj4gKyAgICB9Cj4+ICsKPj4gKyAg ICBrZXlfdGVtID0gcGtleV90b19wZW1fc3RyaW5nKHBrZXkpOwo+PiArICAgIGNlcnRfdGVtID0g Y2VydF90b19wZW1fc3RyaW5nKGNlcnQpOwo+PiArCj4+ICsgICAgc25wcmludGYoa2V5X2J1Ziwg IGtleV9zeiwgICIlcyIsIGtleV90ZW0pOwo+PiArICAgIHNucHJpbnRmKGNlcnRfYnVmLCBjZXJ0 X3N6LCAiJXMiLCBjZXJ0X3RlbSk7Cj4+ICsKPj4gKyAgICAvKiBHZW5lcmF0ZSBmaW5nZXJwcmlu dC4gKi8KPj4gKyAgICAqZmluZ2VycHJpbnQgPSBnZW5lcmF0ZV9maW5nZXJwcmludChjZXJ0KTsK Pj4gKyAgICBpZiAoISpmaW5nZXJwcmludCkgewo+PiArICAgICAgICBhdl9sb2coTlVMTCwgQVZf TE9HX0VSUk9SLCAiVExTOiBGYWlsZWQgdG8gZ2VuZXJhdGUgZmluZ2VycHJpbnQgZnJvbSAlc1xu IiwgY2VydF91cmwpOwo+PiArICAgICAgICByZXQgPSBBVkVSUk9SKEVJTyk7Cj4+ICsgICAgICAg IGdvdG8gZW5kOwo+PiArICAgIH0KPj4gKwo+PiArZW5kOgo+PiArICAgIEJJT19mcmVlKGtleV9i KTsKPj4gKyAgICBhdl9icHJpbnRfZmluYWxpemUoJmtleV9icCwgTlVMTCk7Cj4+ICsgICAgQklP X2ZyZWUoY2VydF9iKTsKPj4gKyAgICBhdl9icHJpbnRfZmluYWxpemUoJmNlcnRfYnAsIE5VTEwp Owo+PiArICAgIGlmIChrZXlfdGVtKSBhdl9mcmVlKGtleV90ZW0pOwo+PiArICAgIGlmIChjZXJ0 X3RlbSkgYXZfZnJlZShjZXJ0X3RlbSk7Cj4+ICsgICAgcmV0dXJuIHJldDsKPj4gK30KPj4gKwo+ PiArc3RhdGljIGludCBvcGVuc3NsX2dlbl9wcml2YXRlX2tleShFVlBfUEtFWSAqKnBrZXksIEVD X0tFWSAqKmVja2V5KQo+PiArewo+PiArICAgIGludCByZXQgPSAwOwo+PiArCj4+ICsgICAgLyoq Cj4+ICsgICAgICogTm90ZSB0aGF0IHNlY3AyNTZyMSBpbiBvcGVuc3NsIGlzIGNhbGxlZCBOSURf WDlfNjJfcHJpbWUyNTZ2MSBvciBwcmltZTI1NnYxIGluIHN0cmluZywKPj4gKyAgICAgKiBub3Qg TklEX3NlY3AyNTZrMSBvciBzZWNwMjU2azEgaW4gc3RyaW5nLgo+PiArICAgICAqCj4+ICsgICAg ICogVE9ETzogU2hvdWxkIGNob29zZSB0aGUgY3VydmVzIGluIENsaWVudEhlbGxvLnN1cHBvcnRl ZF9ncm91cHMsIGZvciBleGFtcGxlOgo+PiArICAgICAqICAgICAgU3VwcG9ydGVkIEdyb3VwOiB4 MjU1MTkgKDB4MDAxZCkKPj4gKyAgICAgKiAgICAgIFN1cHBvcnRlZCBHcm91cDogc2VjcDI1NnIx ICgweDAwMTcpCj4+ICsgICAgICogICAgICBTdXBwb3J0ZWQgR3JvdXA6IHNlY3AzODRyMSAoMHgw MDE4KQo+PiArICAgICAqLwo+PiArI2lmIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgPCAweDMwMDAw MDAwTCAvKiBPcGVuU1NMIDMuMCAqLwo+PiArICAgIEVDX0dST1VQICplY2dyb3VwID0gTlVMTDsK Pj4gKyAgICBpbnQgY3VydmUgPSBOSURfWDlfNjJfcHJpbWUyNTZ2MTsKPj4gKyNlbHNlCj4+ICsg ICAgY29uc3QgY2hhciAqY3VydmUgPSBTTl9YOV82Ml9wcmltZTI1NnYxOwo+PiArI2VuZGlmCj4+ ICsKPj4gKyNpZiBPUEVOU1NMX1ZFUlNJT05fTlVNQkVSIDwgMHgzMDAwMDAwMEwgLyogT3BlblNT TCAzLjAgKi8KPj4gKyAgICAqcGtleSA9IEVWUF9QS0VZX25ldygpOwo+PiArICAgICplY2tleSA9 IEVDX0tFWV9uZXcoKTsKPj4gKyAgICBlY2dyb3VwID0gRUNfR1JPVVBfbmV3X2J5X2N1cnZlX25h bWUoY3VydmUpOwo+PiArICAgIGlmICghZWNncm91cCkgewo+PiArICAgICAgICBhdl9sb2coTlVM TCwgQVZfTE9HX0VSUk9SLCAiVExTOiBDcmVhdGUgRUMgZ3JvdXAgYnkgY3VydmU9JWQgZmFpbGVk LCAlcyIsIGN1cnZlLCBFUlJfZXJyb3Jfc3RyaW5nKEVSUl9nZXRfZXJyb3IoKSwgTlVMTCkpOwo+ PiArICAgICAgICBnb3RvIGVpbnZhbF9lbmQ7Cj4+ICsgICAgfQo+PiArCj4+ICsjaWYgT1BFTlNT TF9WRVJTSU9OX05VTUJFUiA8IDB4MTAxMDAwMDBMIC8vIHYxLjEueAo+PiArICAgIC8qIEZvciBv cGVuc3NsIDEuMCwgd2UgbXVzdCBzZXQgdGhlIGdyb3VwIHBhcmFtZXRlcnMsIHNvIHRoYXQgY2Vy dCBpcyBvay4gKi8KPj4gKyAgICBFQ19HUk9VUF9zZXRfYXNuMV9mbGFnKGVjZ3JvdXAsIE9QRU5T U0xfRUNfTkFNRURfQ1VSVkUpOwo+PiArI2VuZGlmCj4+ICsKPj4gKyAgICBpZiAoRUNfS0VZX3Nl dF9ncm91cCgqZWNrZXksIGVjZ3JvdXApICE9IDEpIHsKPj4gKyAgICAgICAgYXZfbG9nKE5VTEws IEFWX0xPR19FUlJPUiwgIlRMUzogR2VuZXJhdGUgcHJpdmF0ZSBrZXksIEVDX0tFWV9zZXRfZ3Jv dXAgZmFpbGVkLCAlc1xuIiwgRVJSX2Vycm9yX3N0cmluZyhFUlJfZ2V0X2Vycm9yKCksIE5VTEwp KTsKPj4gKyAgICAgICAgZ290byBlaW52YWxfZW5kOwo+PiArICAgIH0KPj4gKwo+PiArICAgIGlm IChFQ19LRVlfZ2VuZXJhdGVfa2V5KCplY2tleSkgIT0gMSkgewo+PiArICAgICAgICBhdl9sb2co TlVMTCwgQVZfTE9HX0VSUk9SLCAiVExTOiBHZW5lcmF0ZSBwcml2YXRlIGtleSwgRUNfS0VZX2dl bmVyYXRlX2tleSBmYWlsZWQsICVzXG4iLCBFUlJfZXJyb3Jfc3RyaW5nKEVSUl9nZXRfZXJyb3Io KSwgTlVMTCkpOwo+PiArICAgICAgICBnb3RvIGVpbnZhbF9lbmQ7Cj4+ICsgICAgfQo+PiArCj4+ ICsgICAgaWYgKEVWUF9QS0VZX3NldDFfRUNfS0VZKCpwa2V5LCAqZWNrZXkpICE9IDEpIHsKPj4g KyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIlRMUzogR2VuZXJhdGUgcHJpdmF0 ZSBrZXksIEVWUF9QS0VZX3NldDFfRUNfS0VZIGZhaWxlZCwgJXNcbiIsIEVSUl9lcnJvcl9zdHJp bmcoRVJSX2dldF9lcnJvcigpLCBOVUxMKSk7Cj4+ICsgICAgICAgIGdvdG8gZWludmFsX2VuZDsK Pj4gKyAgICB9Cj4+ICsjZWxzZQo+PiArICAgICpwa2V5ID0gRVZQX0VDX2dlbihjdXJ2ZSk7Cj4+ ICsgICAgaWYgKCEqcGtleSkgewo+PiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9S LCAiVExTOiBHZW5lcmF0ZSBwcml2YXRlIGtleSwgRVZQX0VDX2dlbiBjdXJ2ZT0lcyBmYWlsZWQs ICVzXG4iLCBjdXJ2ZSwgRVJSX2Vycm9yX3N0cmluZyhFUlJfZ2V0X2Vycm9yKCksIE5VTEwpKTsK Pj4gKyAgICAgICAgZ290byBlaW52YWxfZW5kOwo+PiArICAgIH0KPj4gKyNlbmRpZgo+PiArICAg IGdvdG8gZW5kOwo+PiArCj4+ICtlaW52YWxfZW5kOgo+PiArICAgIHJldCA9IEFWRVJST1IoRUlO VkFMKTsKPj4gK2VuZDoKPj4gKyNpZiBPUEVOU1NMX1ZFUlNJT05fTlVNQkVSIDwgMHgzMDAwMDAw MEwgLyogT3BlblNTTCAzLjAgKi8KPj4gKyAgICBFQ19HUk9VUF9mcmVlKGVjZ3JvdXApOwo+PiAr I2VuZGlmCj4+ICsgICAgcmV0dXJuIHJldDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBvcGVu c3NsX2dlbl9jZXJ0aWZpY2F0ZShFVlBfUEtFWSAqcGtleSwgWDUwOSAqKmNlcnQsIGNoYXIgKipm aW5nZXJwcmludCkKPj4gK3sKPj4gKyAgICBpbnQgcmV0ID0gMCwgc2VyaWFsLCBleHBpcmVfZGF5 Owo+PiArICAgIGNvbnN0IGNoYXIgKmFvciA9ICJsYXZmIjsKPj4gKyAgICBYNTA5X05BTUUqIHN1 YmplY3QgPSBOVUxMOwo+PiArCj4+ICsgICAgKmNlcnQ9IFg1MDlfbmV3KCk7Cj4+ICsgICAgaWYg KCEqY2VydCkgewo+PiArICAgICAgICBnb3RvIGVub21lbV9lbmQ7Cj4+ICsgICAgfQo+PiArCj4+ ICsgICAgLy8gVE9ETzogU3VwcG9ydCBub24tc2VsZi1zaWduZWQgY2VydGlmaWNhdGUsIGZvciBl eGFtcGxlLCBsb2FkIGZyb20gYSBmaWxlLgo+PiArICAgIHN1YmplY3QgPSBYNTA5X05BTUVfbmV3 KCk7Cj4+ICsgICAgaWYgKCFzdWJqZWN0KSB7Cj4+ICsgICAgICAgIGdvdG8gZW5vbWVtX2VuZDsK Pj4gKyAgICB9Cj4+ICsKPj4gKyAgICBzZXJpYWwgPSAoaW50KWF2X2dldF9yYW5kb21fc2VlZCgp Owo+PiArICAgIGlmIChBU04xX0lOVEVHRVJfc2V0KFg1MDlfZ2V0X3NlcmlhbE51bWJlcigqY2Vy dCksIHNlcmlhbCkgIT0gMSkgewo+PiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9S LCAiVExTOiBGYWlsZWQgdG8gc2V0IHNlcmlhbCwgJXNcbiIsIEVSUl9lcnJvcl9zdHJpbmcoRVJS X2dldF9lcnJvcigpLCBOVUxMKSk7Cj4+ICsgICAgICAgIGdvdG8gZWludmFsX2VuZDsKPj4gKyAg ICB9Cj4+ICsKPj4gKyAgICBpZiAoWDUwOV9OQU1FX2FkZF9lbnRyeV9ieV90eHQoc3ViamVjdCwg IkNOIiwgTUJTVFJJTkdfQVNDLCBhb3IsIHN0cmxlbihhb3IpLCAtMSwgMCkgIT0gMSkgewo+PiAr ICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiVExTOiBGYWlsZWQgdG8gc2V0IENO LCAlc1xuIiwgRVJSX2Vycm9yX3N0cmluZyhFUlJfZ2V0X2Vycm9yKCksIE5VTEwpKTsKPj4gKyAg ICAgICAgZ290byBlaW52YWxfZW5kOwo+PiArICAgIH0KPj4gKwo+PiArICAgIGlmIChYNTA5X3Nl dF9pc3N1ZXJfbmFtZSgqY2VydCwgc3ViamVjdCkgIT0gMSkgewo+PiArICAgICAgICBhdl9sb2co TlVMTCwgQVZfTE9HX0VSUk9SLCAiVExTOiBGYWlsZWQgdG8gc2V0IGlzc3VlciwgJXNcbiIsIEVS Ul9lcnJvcl9zdHJpbmcoRVJSX2dldF9lcnJvcigpLCBOVUxMKSk7Cj4+ICsgICAgICAgIGdvdG8g ZWludmFsX2VuZDsKPj4gKyAgICB9Cj4+ICsgICAgaWYgKFg1MDlfc2V0X3N1YmplY3RfbmFtZSgq Y2VydCwgc3ViamVjdCkgIT0gMSkgewo+PiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VS Uk9SLCAiVExTOiBGYWlsZWQgdG8gc2V0IHN1YmplY3QgbmFtZSwgJXNcbiIsIEVSUl9lcnJvcl9z dHJpbmcoRVJSX2dldF9lcnJvcigpLCBOVUxMKSk7Cj4+ICsgICAgICAgIGdvdG8gZWludmFsX2Vu ZDsKPj4gKyAgICB9Cj4+ICsKPj4gKyAgICBleHBpcmVfZGF5ID0gMzY1Owo+PiArICAgIGlmICgh WDUwOV9nbXRpbWVfYWRqKFg1MDlfZ2V0X25vdEJlZm9yZSgqY2VydCksIDApKSB7Cj4+ICsgICAg ICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJUTFM6IEZhaWxlZCB0byBzZXQgbm90QmVm b3JlLCAlc1xuIiwgRVJSX2Vycm9yX3N0cmluZyhFUlJfZ2V0X2Vycm9yKCksIE5VTEwpKTsKPj4g KyAgICAgICAgZ290byBlaW52YWxfZW5kOwo+PiArICAgIH0KPj4gKyAgICBpZiAoIVg1MDlfZ210 aW1lX2FkaihYNTA5X2dldF9ub3RBZnRlcigqY2VydCksIDYwKjYwKjI0KmV4cGlyZV9kYXkpKSB7 Cj4+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJUTFM6IEZhaWxlZCB0byBz ZXQgbm90QWZ0ZXIsICVzXG4iLCBFUlJfZXJyb3Jfc3RyaW5nKEVSUl9nZXRfZXJyb3IoKSwgTlVM TCkpOwo+PiArICAgICAgICBnb3RvIGVpbnZhbF9lbmQ7Cj4+ICsgICAgfQo+PiArCj4+ICsgICAg aWYgKFg1MDlfc2V0X3ZlcnNpb24oKmNlcnQsIDIpICE9IDEpIHsKPj4gKyAgICAgICAgYXZfbG9n KE5VTEwsIEFWX0xPR19FUlJPUiwgIlRMUzogRmFpbGVkIHRvIHNldCB2ZXJzaW9uLCAlc1xuIiwg RVJSX2Vycm9yX3N0cmluZyhFUlJfZ2V0X2Vycm9yKCksIE5VTEwpKTsKPj4gKyAgICAgICAgZ290 byBlaW52YWxfZW5kOwo+PiArICAgIH0KPj4gKwo+PiArICAgIGlmIChYNTA5X3NldF9wdWJrZXko KmNlcnQsIHBrZXkpICE9IDEpIHsKPj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJP UiwgIlRMUzogRmFpbGVkIHRvIHNldCBwdWJsaWMga2V5LCAlc1xuIiwgRVJSX2Vycm9yX3N0cmlu ZyhFUlJfZ2V0X2Vycm9yKCksIE5VTEwpKTsKPj4gKyAgICAgICAgZ290byBlaW52YWxfZW5kOwo+ PiArICAgIH0KPj4gKwo+PiArICAgIGlmICghWDUwOV9zaWduKCpjZXJ0LCBwa2V5LCBFVlBfc2hh MSgpKSkgewo+PiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiVExTOiBGYWls ZWQgdG8gc2lnbiBjZXJ0aWZpY2F0ZSwgJXNcbiIsIEVSUl9lcnJvcl9zdHJpbmcoRVJSX2dldF9l cnJvcigpLCBOVUxMKSk7Cj4+ICsgICAgICAgIGdvdG8gZWludmFsX2VuZDsKPj4gKyAgICB9Cj4+ ICsKPj4gKyAgICAqZmluZ2VycHJpbnQgPSBnZW5lcmF0ZV9maW5nZXJwcmludCgqY2VydCk7Cj4+ ICsgICAgaWYgKCEqZmluZ2VycHJpbnQpIHsKPj4gKyAgICAgICAgZ290byBlbm9tZW1fZW5kOwo+ PiArICAgIH0KPj4gKwo+PiArICAgIGdvdG8gZW5kOwo+PiArZW5vbWVtX2VuZDoKPj4gKyAgICBy ZXQgPSBBVkVSUk9SKEVOT01FTSk7Cj4+ICsgICAgZ290byBlbmQ7Cj4+ICtlaW52YWxfZW5kOgo+ PiArICAgIHJldCA9IEFWRVJST1IoRUlOVkFMKTsKPj4gK2VuZDoKPj4gKyAgICBYNTA5X05BTUVf ZnJlZShzdWJqZWN0KTsKPj4gKyAgICAvL2F2X2JwcmludF9maW5hbGl6ZSgmZmluZ2VycHJpbnQs IE5VTEwpOwo+PiArICAgIHJldHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4gK2ludCBmZl9zc2xfZ2Vu X2tleV9jZXJ0KGNoYXIgKmtleV9idWYsIHNpemVfdCBrZXlfc3osIGNoYXIgKmNlcnRfYnVmLCBz aXplX3QgY2VydF9zeiwgY2hhciAqKmZpbmdlcnByaW50KQo+PiArewo+PiArICAgIGludCByZXQg PSAwOwo+PiArICAgIEVWUF9QS0VZICpwa2V5ID0gTlVMTDsKPj4gKyAgICBFQ19LRVkgKmVjX2tl eSA9IE5VTEw7Cj4+ICsgICAgWDUwOSAqY2VydCA9IE5VTEw7Cj4+ICsgICAgY2hhciAqa2V5X3Rl bSA9IE5VTEwsICpjZXJ0X3RlbSA9IE5VTEw7Cj4+ICsKPj4gKyAgICByZXQgPSBvcGVuc3NsX2dl bl9wcml2YXRlX2tleSgmcGtleSwgJmVjX2tleSk7Cj4+ICsgICAgaWYgKHJldCA8IDApIGdvdG8g ZXJyb3I7Cj4+ICsKPj4gKyAgICByZXQgPSBvcGVuc3NsX2dlbl9jZXJ0aWZpY2F0ZShwa2V5LCAm Y2VydCwgZmluZ2VycHJpbnQpOwo+PiArICAgIGlmIChyZXQgPCAwKSBnb3RvIGVycm9yOwo+PiAr Cj4+ICsgICAga2V5X3RlbSA9IHBrZXlfdG9fcGVtX3N0cmluZyhwa2V5KTsKPj4gKyAgICBjZXJ0 X3RlbSA9IGNlcnRfdG9fcGVtX3N0cmluZyhjZXJ0KTsKPj4gKwo+PiArICAgIHNucHJpbnRmKGtl eV9idWYsICBrZXlfc3osICAiJXMiLCBrZXlfdGVtKTsKPj4gKyAgICBzbnByaW50ZihjZXJ0X2J1 ZiwgY2VydF9zeiwgIiVzIiwgY2VydF90ZW0pOwo+PiArCj4+ICsgICAgaWYgKGtleV90ZW0pIGF2 X2ZyZWUoa2V5X3RlbSk7Cj4+ICsgICAgaWYgKGNlcnRfdGVtKSBhdl9mcmVlKGNlcnRfdGVtKTsK Pj4gK2Vycm9yOgo+PiArICAgIHJldHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4gKwo+PiArLyoqCj4+ ICsgKiBEZXNlcmlhbGl6ZSBhIFBFTeKAkGVuY29kZWQgcHJpdmF0ZSBvciBwdWJsaWMga2V5IGZy b20gYSBOVUwtdGVybWluYXRlZCBDIHN0cmluZy4KPj4gKyAqCj4+ICsgKiBAcGFyYW0gcGVtX3N0 ciAgIFRoZSBQRU0gdGV4dCwgZS5nLgo+PiArICogICAgICAgICAgICAgICAgICAiLS0tLS1CRUdJ TiBQUklWQVRFIEtFWS0tLS0tXG7igKZcbi0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS1cbiIKPj4g KyAqIEBwYXJhbSBpc19wcml2ICAgSWYgbm9uLXplcm8sIHBhcnNlIGFzIGEgUFJJVkFURSBrZXk7 IG90aGVyd2lzZSwgcGFyc2UgYXMgYSBQVUJMSUMga2V5Lgo+PiArICogQHJldHVybiAgICAgICAg ICBFVlBfUEtFWSogb24gc3VjY2VzcyAobXVzdCBFVlBfUEtFWV9mcmVlKCkpLCBvciBOVUxMIG9u IGVycm9yLgo+PiArICovCj4+ICtzdGF0aWMgRVZQX1BLRVkgKnBrZXlfZnJvbV9wZW1fc3RyaW5n KGNvbnN0IGNoYXIgKnBlbV9zdHIsIGludCBpc19wcml2KQo+PiArewo+PiArICAgIEJJTyAqbWVt ID0gQklPX25ld19tZW1fYnVmKHBlbV9zdHIsIC0xKTsKPj4gKyAgICBpZiAoIW1lbSkgewo+PiAr ICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiQklPX25ld19tZW1fYnVmIGZhaWxl ZFxuIik7Cj4+ICsgICAgICAgIHJldHVybiBOVUxMOwo+PiArICAgIH0KPj4gKwo+PiArICAgIEVW UF9QS0VZICpwa2V5ID0gTlVMTDsKPj4gKyAgICBpZiAoaXNfcHJpdikgewo+PiArICAgICAgICBw a2V5ID0gUEVNX3JlYWRfYmlvX1ByaXZhdGVLZXkobWVtLCBOVUxMLCBOVUxMLCBOVUxMKTsKPj4g KyAgICB9IGVsc2Ugewo+PiArICAgICAgICBwa2V5ID0gUEVNX3JlYWRfYmlvX1BVQktFWShtZW0s IE5VTEwsIE5VTEwsIE5VTEwpOwo+PiArICAgIH0KPj4gKwo+PiArICAgIGlmICghcGtleSkKPj4g KyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byBwYXJzZSAlcyBr ZXkgZnJvbSBzdHJpbmdcbiIsCj4+ICsgICAgICAgICAgICAgIGlzX3ByaXYgPyAicHJpdmF0ZSIg OiAicHVibGljIik7Cj4+ICsKPj4gKyAgICBCSU9fZnJlZShtZW0pOwo+PiArICAgIHJldHVybiBw a2V5Owo+PiArfQo+PiArCj4+ICsvKioKPj4gKyAqIERlc2VyaWFsaXplIGEgUEVN4oCQZW5jb2Rl ZCBjZXJ0aWZpY2F0ZSBmcm9tIGEgTlVMLXRlcm1pbmF0ZWQgQyBzdHJpbmcuCj4+ICsgKgo+PiAr ICogQHBhcmFtIHBlbV9zdHIgICBUaGUgUEVNIHRleHQsIGUuZy4KPj4gKyAqICAgICAgICAgICAg ICAgICAgIi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLVxu4oCmXG4tLS0tLUVORCBDRVJUSUZJ Q0FURS0tLS0tXG4iCj4+ICsgKiBAcmV0dXJuICAgICAgICAgIFg1MDkqIG9uIHN1Y2Nlc3MgKG11 c3QgWDUwOV9mcmVlKCkpLCBvciBOVUxMIG9uIGVycm9yLgo+PiArICovCj4+ICtzdGF0aWMgWDUw OSAqY2VydF9mcm9tX3BlbV9zdHJpbmcoY29uc3QgY2hhciAqcGVtX3N0cikKPj4gK3sKPj4gKyAg ICBCSU8gKm1lbSA9IEJJT19uZXdfbWVtX2J1ZihwZW1fc3RyLCAtMSk7Cj4+ICsgICAgaWYgKCFt ZW0pIHsKPj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIkJJT19uZXdfbWVt X2J1ZiBmYWlsZWRcbiIpOwo+PiArICAgICAgICByZXR1cm4gTlVMTDsKPj4gKyAgICB9Cj4+ICsK Pj4gKyAgICBYNTA5ICpjZXJ0ID0gUEVNX3JlYWRfYmlvX1g1MDkobWVtLCBOVUxMLCBOVUxMLCBO VUxMKTsKPj4gKyAgICBpZiAoIWNlcnQpIHsKPj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xP R19FUlJPUiwgIkZhaWxlZCB0byBwYXJzZSBjZXJ0aWZpY2F0ZSBmcm9tIHN0cmluZ1xuIik7Cj4+ ICsgICAgICAgIHJldHVybiBOVUxMOwo+PiArICAgIH0KPj4gKwo+PiArICAgIEJJT19mcmVlKG1l bSk7Cj4+ICsgICAgcmV0dXJuIGNlcnQ7Cj4+ICt9Cj4+ICsKPj4gKwo+PiB0eXBlZGVmIHN0cnVj dCBUTFNDb250ZXh0IHsKPj4gICAgIGNvbnN0IEFWQ2xhc3MgKmNsYXNzOwo+PiAgICAgVExTU2hh cmVkIHRsc19zaGFyZWQ7Cj4+IEBAIC0zOCw4ICs0NzEsNTYgQEAgdHlwZWRlZiBzdHJ1Y3QgVExT Q29udGV4dCB7Cj4+ICAgICBCSU9fTUVUSE9EKiB1cmxfYmlvX21ldGhvZDsKPj4gI2VuZGlmCj4+ ICAgICBpbnQgaW9fZXJyOwo+PiArICAgIGNoYXIgZXJyb3JfbWVzc2FnZVsyNTZdOwo+PiB9IFRM U0NvbnRleHQ7Cj4+IAo+PiArLyoqCj4+ICsgKiBSZXRyaWV2ZXMgdGhlIGVycm9yIG1lc3NhZ2Ug Zm9yIHRoZSBsYXRlc3QgT3BlblNTTCBlcnJvci4KPj4gKyAqCj4+ICsgKiBUaGlzIGZ1bmN0aW9u IHJldHJpZXZlcyB0aGUgZXJyb3IgY29kZSBmcm9tIHRoZSB0aHJlYWQncyBlcnJvciBxdWV1ZSwg Y29udmVydHMgaXQKPj4gKyAqIHRvIGEgaHVtYW4tcmVhZGFibGUgc3RyaW5nLCBhbmQgc3RvcmVz IGl0IGluIHRoZSBUTFNDb250ZXh0J3MgZXJyb3JfbWVzc2FnZSBmaWVsZC4KPj4gKyAqIFRoZSBl cnJvciBxdWV1ZSBpcyB0aGVuIGNsZWFyZWQgdXNpbmcgRVJSX2NsZWFyX2Vycm9yKCkuCj4+ICsg Ki8KPj4gK3N0YXRpYyBjb25zdCBjaGFyKiBvcGVuc3NsX2dldF9lcnJvcihUTFNDb250ZXh0ICpj dHgpCj4+ICt7Cj4+ICsgICAgaW50IHIyID0gRVJSX2dldF9lcnJvcigpOwo+PiArICAgIGlmIChy Mikgewo+PiArICAgICAgICBFUlJfZXJyb3Jfc3RyaW5nX24ocjIsIGN0eC0+ZXJyb3JfbWVzc2Fn ZSwgc2l6ZW9mKGN0eC0+ZXJyb3JfbWVzc2FnZSkpOwo+PiArICAgIH0gZWxzZQo+PiArICAgICAg ICBjdHgtPmVycm9yX21lc3NhZ2VbMF0gPSAnXDAnOwo+PiArCj4+ICsgICAgRVJSX2NsZWFyX2Vy cm9yKCk7Cj4+ICsgICAgcmV0dXJuIGN0eC0+ZXJyb3JfbWVzc2FnZTsKPj4gK30KPj4gKwo+PiAr aW50IGZmX2R0bHNfc2V0X3VkcChVUkxDb250ZXh0ICpoLCBVUkxDb250ZXh0ICp1ZHApCj4+ICt7 Cj4+ICsgICAgVExTQ29udGV4dCAqYyA9IGgtPnByaXZfZGF0YTsKPj4gKyAgICBjLT50bHNfc2hh cmVkLnVkcCA9IHVkcDsKPj4gKyAgICByZXR1cm4gMDsKPj4gK30KPj4gKwo+PiAraW50IGZmX2R0 bHNfZXhwb3J0X21hdGVyaWFscyhVUkxDb250ZXh0ICpoLCBjaGFyICpkdGxzX3NydHBfbWF0ZXJp YWxzLCBzaXplX3QgbWF0ZXJpYWxzX3N6KQo+PiArewo+PiArICAgIGludCByZXQgPSAwOwo+PiAr ICAgIGNvbnN0IGNoYXIqIGRzdCA9ICJFWFRSQUNUT1ItZHRsc19zcnRwIjsKPj4gKyAgICBUTFND b250ZXh0ICpjID0gaC0+cHJpdl9kYXRhOwo+PiArCj4+ICsgICAgcmV0ID0gU1NMX2V4cG9ydF9r ZXlpbmdfbWF0ZXJpYWwoYy0+c3NsLCBkdGxzX3NydHBfbWF0ZXJpYWxzLCBtYXRlcmlhbHNfc3os Cj4+ICsgICAgICAgIGRzdCwgc3RybGVuKGRzdCksIE5VTEwsIDAsIDApOwo+PiArICAgIGlmICgh cmV0KSB7Cj4+ICsgICAgICAgIGF2X2xvZyhjLCBBVl9MT0dfRVJST1IsICJUTFM6IEZhaWxlZCB0 byBleHBvcnQgU1JUUCBtYXRlcmlhbCwgJXNcbiIsIG9wZW5zc2xfZ2V0X2Vycm9yKGMpKTsKPj4g KyAgICAgICAgcmV0dXJuIC0xOwo+PiArICAgIH0KPj4gKyAgICByZXR1cm4gMDsKPj4gK30KPj4g Kwo+PiAraW50IGZmX2R0bHNfc3RhdGUoVVJMQ29udGV4dCAqaCkKPj4gK3sKPj4gKyAgICBUTFND b250ZXh0ICpjID0gaC0+cHJpdl9kYXRhOwo+PiArICAgIHJldHVybiBjLT50bHNfc2hhcmVkLnN0 YXRlOwo+PiArfQo+PiArCj4+IC8qIE9wZW5TU0wgMS4wLjIgb3IgYmVsb3csIHRoZW4geW91IHdv dWxkIHVzZSBTU0xfbGlicmFyeV9pbml0LiBJZiB5b3UgYXJlCj4+ICAqIHVzaW5nIE9wZW5TU0wg MS4xLjAgb3IgYWJvdmUsIHRoZW4gdGhlIGxpYnJhcnkgd2lsbCBpbml0aWFsaXplCj4+ICAqIGl0 c2VsZiBhdXRvbWF0aWNhbGx5Lgo+PiBAQCAtMTIxLDcgKzYwMiw3IEBAIHZvaWQgZmZfb3BlbnNz bF9kZWluaXQodm9pZCkKPj4gfQo+PiAjZW5kaWYKPj4gCj4+IC1zdGF0aWMgaW50IHByaW50X3Rs c19lcnJvcihVUkxDb250ZXh0ICpoLCBpbnQgcmV0KQo+PiArc3RhdGljIGludCBwcmludF9zc2xf ZXJyb3IoVVJMQ29udGV4dCAqaCwgaW50IHJldCkKPj4gewo+PiAgICAgVExTQ29udGV4dCAqYyA9 IGgtPnByaXZfZGF0YTsKPj4gICAgIGludCBwcmludGVkID0gMCwgZSwgYXZlcnIgPSBBVkVSUk9S KEVJTyk7Cj4+IEBAIC0xOTMsNyArNjc0LDcgQEAgc3RhdGljIGludCB1cmxfYmlvX2Rlc3Ryb3ko QklPICpiKQo+PiBzdGF0aWMgaW50IHVybF9iaW9fYnJlYWQoQklPICpiLCBjaGFyICpidWYsIGlu dCBsZW4pCj4+IHsKPj4gICAgIFRMU0NvbnRleHQgKmMgPSBHRVRfQklPX0RBVEEoYik7Cj4+IC0g ICAgaW50IHJldCA9IGZmdXJsX3JlYWQoYy0+dGxzX3NoYXJlZC50Y3AsIGJ1ZiwgbGVuKTsKPj4g KyAgICBpbnQgcmV0ID0gZmZ1cmxfcmVhZChjLT50bHNfc2hhcmVkLmlzX2R0bHMgPyBjLT50bHNf c2hhcmVkLnVkcCA6IGMtPnRsc19zaGFyZWQudGNwLCBidWYsIGxlbik7Cj4+ICAgICBpZiAocmV0 ID49IDApCj4+ICAgICAgICAgcmV0dXJuIHJldDsKPj4gICAgIEJJT19jbGVhcl9yZXRyeV9mbGFn cyhiKTsKPj4gQEAgLTIwOSw3ICs2OTAsNyBAQCBzdGF0aWMgaW50IHVybF9iaW9fYnJlYWQoQklP ICpiLCBjaGFyICpidWYsIGludCBsZW4pCj4+IHN0YXRpYyBpbnQgdXJsX2Jpb19id3JpdGUoQklP ICpiLCBjb25zdCBjaGFyICpidWYsIGludCBsZW4pCj4+IHsKPj4gICAgIFRMU0NvbnRleHQgKmMg PSBHRVRfQklPX0RBVEEoYik7Cj4+IC0gICAgaW50IHJldCA9IGZmdXJsX3dyaXRlKGMtPnRsc19z aGFyZWQudGNwLCBidWYsIGxlbik7Cj4+ICsgICAgaW50IHJldCA9IGZmdXJsX3dyaXRlKGMtPnRs c19zaGFyZWQuaXNfZHRscyA/IGMtPnRsc19zaGFyZWQudWRwIDogYy0+dGxzX3NoYXJlZC50Y3As IGJ1ZiwgbGVuKTsKPj4gICAgIGlmIChyZXQgPj0gMCkKPj4gICAgICAgICByZXR1cm4gcmV0Owo+ PiAgICAgQklPX2NsZWFyX3JldHJ5X2ZsYWdzKGIpOwo+PiBAQCAtMjUwLDExICs3MzEsMzAwIEBA IHN0YXRpYyBCSU9fTUVUSE9EIHVybF9iaW9fbWV0aG9kID0gewo+PiB9Owo+PiAjZW5kaWYKPj4g Cj4+ICtzdGF0aWMgYXZfY29sZCB2b2lkIGluaXRfYmlvX21ldGhvZChVUkxDb250ZXh0ICpoKQo+ PiArewo+PiArICAgIFRMU0NvbnRleHQgKnAgPSBoLT5wcml2X2RhdGE7Cj4+ICsgICAgQklPICpi aW87Cj4+ICsjaWYgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA+PSAweDEwMTAwMDBmTAo+PiArICAg IHAtPnVybF9iaW9fbWV0aG9kID0gQklPX21ldGhfbmV3KEJJT19UWVBFX1NPVVJDRV9TSU5LLCAi dXJscHJvdG9jb2wgYmlvIik7Cj4+ICsgICAgQklPX21ldGhfc2V0X3dyaXRlKHAtPnVybF9iaW9f bWV0aG9kLCB1cmxfYmlvX2J3cml0ZSk7Cj4+ICsgICAgQklPX21ldGhfc2V0X3JlYWQocC0+dXJs X2Jpb19tZXRob2QsIHVybF9iaW9fYnJlYWQpOwo+PiArICAgIEJJT19tZXRoX3NldF9wdXRzKHAt PnVybF9iaW9fbWV0aG9kLCB1cmxfYmlvX2JwdXRzKTsKPj4gKyAgICBCSU9fbWV0aF9zZXRfY3Ry bChwLT51cmxfYmlvX21ldGhvZCwgdXJsX2Jpb19jdHJsKTsKPj4gKyAgICBCSU9fbWV0aF9zZXRf Y3JlYXRlKHAtPnVybF9iaW9fbWV0aG9kLCB1cmxfYmlvX2NyZWF0ZSk7Cj4+ICsgICAgQklPX21l dGhfc2V0X2Rlc3Ryb3kocC0+dXJsX2Jpb19tZXRob2QsIHVybF9iaW9fZGVzdHJveSk7Cj4+ICsg ICAgYmlvID0gQklPX25ldyhwLT51cmxfYmlvX21ldGhvZCk7Cj4+ICsgICAgQklPX3NldF9kYXRh KGJpbywgcCk7Cj4+ICsjZWxzZQo+PiArICAgIGJpbyA9IEJJT19uZXcoJnVybF9iaW9fbWV0aG9k KTsKPj4gKyAgICBiaW8tPnB0ciA9IHA7Cj4+ICsjZW5kaWYKPj4gKyAgICBTU0xfc2V0X2Jpbyhw LT5zc2wsIGJpbywgYmlvKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgb3BlbnNzbF9pbmZv X2NhbGxiYWNrKGNvbnN0IFNTTCAqc3NsLCBpbnQgd2hlcmUsIGludCByZXQpIHsKPj4gKyAgICBj b25zdCBjaGFyICptZXRob2QgPSAidW5kZWZpbmVkIjsKPj4gKyAgICBUTFNDb250ZXh0ICpjdHgg PSAoVExTQ29udGV4dCopU1NMX2dldF9leF9kYXRhKHNzbCwgMCk7Cj4+ICsKPj4gKyAgICBpZiAo d2hlcmUgJiBTU0xfU1RfQ09OTkVDVCkgewo+PiArICAgICAgICBtZXRob2QgPSAiU1NMX2Nvbm5l Y3QiOwo+PiArICAgIH0gZWxzZSBpZiAod2hlcmUgJiBTU0xfU1RfQUNDRVBUKQo+PiArICAgICAg ICBtZXRob2QgPSAiU1NMX2FjY2VwdCI7Cj4+ICsKPj4gKyAgICBpZiAod2hlcmUgJiBTU0xfQ0Jf TE9PUCkgewo+PiArICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfREVCVUcsICJJbmZvIG1ldGhv ZD0lcyBzdGF0ZT0lcyglcyksIHdoZXJlPSVkLCByZXQ9JWRcbiIsCj4+ICsgICAgICAgICAgICAg ICBtZXRob2QsIFNTTF9zdGF0ZV9zdHJpbmcoc3NsKSwgU1NMX3N0YXRlX3N0cmluZ19sb25nKHNz bCksIHdoZXJlLCByZXQpOwo+PiArICAgIH0gZWxzZSBpZiAod2hlcmUgJiBTU0xfQ0JfQUxFUlQp IHsKPj4gKyAgICAgICAgbWV0aG9kID0gKHdoZXJlICYgU1NMX0NCX1JFQUQpID8gInJlYWQiOiJ3 cml0ZSI7Cj4+ICsgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19ERUJVRywgIkFsZXJ0IG1ldGhv ZD0lcyBzdGF0ZT0lcyglcyksIHdoZXJlPSVkLCByZXQ9JWRcbiIsCj4+ICsgICAgICAgICAgICAg ICBtZXRob2QsIFNTTF9zdGF0ZV9zdHJpbmcoc3NsKSwgU1NMX3N0YXRlX3N0cmluZ19sb25nKHNz bCksIHdoZXJlLCByZXQpOwo+PiArICAgIH0KPj4gK30KPj4gKwo+PiArLyoqCj4+ICsgKiBBbHdh eXMgcmV0dXJuIDEgdG8gYWNjZXB0IGFueSBjZXJ0aWZpY2F0ZS4gVGhpcyBpcyBiZWNhdXNlIHdl IGFsbG93IHRoZSBwZWVyIHRvCj4+ICsgKiB1c2UgYSB0ZW1wb3Jhcnkgc2VsZi1zaWduZWQgY2Vy dGlmaWNhdGUgZm9yIERUTFMuCj4+ICsgKi8KPj4gK3N0YXRpYyBpbnQgb3BlbnNzbF9kdGxzX3Zl cmlmeV9jYWxsYmFjayhpbnQgcHJldmVyaWZ5X29rLCBYNTA5X1NUT1JFX0NUWCAqY3R4KQo+PiAr ewo+PiArICAgIHJldHVybiAxOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGR0bHNfaGFuZHNo YWtlKFVSTENvbnRleHQgKmgpCj4+ICt7Cj4+ICsgICAgaW50IHJldCA9IDAsIHIwLCByMTsKPj4g KyAgICBUTFNDb250ZXh0ICpwID0gaC0+cHJpdl9kYXRhOwo+PiArCj4+ICsgICAgcjAgPSBTU0xf ZG9faGFuZHNoYWtlKHAtPnNzbCk7Cj4+ICsgICAgcjEgPSBTU0xfZ2V0X2Vycm9yKHAtPnNzbCwg cjApOwo+PiArICAgIGlmIChyMCA8PSAwKSB7Cj4+ICsgICAgICAgIGlmIChyMSAhPSBTU0xfRVJS T1JfV0FOVF9SRUFEICYmIHIxICE9IFNTTF9FUlJPUl9XQU5UX1dSSVRFICYmIHIxICE9IFNTTF9F UlJPUl9aRVJPX1JFVFVSTikgewo+PiArICAgICAgICAgICAgYXZfbG9nKHAsIEFWX0xPR19FUlJP UiwgIlRMUzogUmVhZCBmYWlsZWQsIHIwPSVkLCByMT0lZCAlc1xuIiwgcjAsIHIxLCBvcGVuc3Ns X2dldF9lcnJvcihwKSk7Cj4+ICsgICAgICAgICAgICByZXQgPSBBVkVSUk9SKEVJTyk7Cj4+ICsg ICAgICAgICAgICBnb3RvIGVuZDsKPj4gKyAgICAgICAgfQo+PiArICAgIH0gZWxzZSB7Cj4+ICsg ICAgICAgIGF2X2xvZyhwLCBBVl9MT0dfVFJBQ0UsICJUTFM6IFJlYWQgJWQgYnl0ZXMsIHIwPSVk LCByMT0lZFxuIiwgcjAsIHIwLCByMSk7Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgLyogQ2hlY2sg d2hldGhlciB0aGUgRFRMUyBpcyBjb21wbGV0ZWQuICovCj4+ICsgICAgaWYgKFNTTF9pc19pbml0 X2ZpbmlzaGVkKHAtPnNzbCkgIT0gMSkKPj4gKyAgICAgICAgZ290byBlbmQ7Cj4+ICsKPj4gKyAg ICBwLT50bHNfc2hhcmVkLnN0YXRlID0gRFRMU19TVEFURV9GSU5JU0hFRDsKPj4gK2VuZDoKPj4g KyAgICByZXR1cm4gcmV0Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgYXZfY29sZCBpbnQgb3BlbnNz bF9pbml0X2NhX2tleV9jZXJ0KFVSTENvbnRleHQgKmgpCj4+ICt7Cj4+ICsgICAgaW50IHJldDsK Pj4gKyAgICBUTFNDb250ZXh0ICpwID0gaC0+cHJpdl9kYXRhOwo+PiArICAgIFRMU1NoYXJlZCAq YyA9ICZwLT50bHNfc2hhcmVkOwo+PiArICAgIEVWUF9QS0VZICpwa2V5ID0gTlVMTDsKPj4gKyAg ICBYNTA5ICpjZXJ0ID0gTlVMTDsKPj4gKyAgICAvKiBzZXR1cCBjYSwgcHJpdmF0ZSBrZXksIGNl cnRpZmljYXRlICovCj4+ICsgICAgaWYgKGMtPmNhX2ZpbGUpIHsKPj4gKyAgICAgICAgaWYgKCFT U0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyhwLT5jdHgsIGMtPmNhX2ZpbGUsIE5VTEwpKQo+ PiArICAgICAgICAgICAgYXZfbG9nKGgsIEFWX0xPR19FUlJPUiwgIlNTTF9DVFhfbG9hZF92ZXJp ZnlfbG9jYXRpb25zICVzXG4iLCBvcGVuc3NsX2dldF9lcnJvcihwKSk7Cj4+ICsgICAgfQo+PiAr Cj4+ICsgICAgaWYgKGMtPmNlcnRfZmlsZSkgewo+PiArICAgICAgICByZXQgPSBTU0xfQ1RYX3Vz ZV9jZXJ0aWZpY2F0ZV9jaGFpbl9maWxlKHAtPmN0eCwgYy0+Y2VydF9maWxlKTsKPj4gKyAgICAg ICAgaWYgKHJldCA8PSAwKSB7Cj4+ICsgICAgICAgICAgICBhdl9sb2coaCwgQVZfTE9HX0VSUk9S LCAiVW5hYmxlIHRvIGxvYWQgY2VydCBmaWxlICVzOiAlc1xuIiwKPj4gKyAgICAgICAgICAgICAg IGMtPmNlcnRfZmlsZSwgb3BlbnNzbF9nZXRfZXJyb3IocCkpOwo+PiArICAgICAgICAgICAgcmV0 ID0gQVZFUlJPUihFSU8pOwo+PiArICAgICAgICAgICAgZ290byBmYWlsOwo+PiArICAgICAgICB9 Cj4+ICsgICAgfSBlbHNlIGlmIChwLT50bHNfc2hhcmVkLmNlcnRfYnVmKSB7Cj4+ICsgICAgICAg IGNlcnQgPSBjZXJ0X2Zyb21fcGVtX3N0cmluZyhwLT50bHNfc2hhcmVkLmNlcnRfYnVmKTsKPj4g KyAgICAgICAgaWYgKFNTTF9DVFhfdXNlX2NlcnRpZmljYXRlKHAtPmN0eCwgY2VydCkgIT0gMSkg ewo+PiArICAgICAgICAgICAgYXZfbG9nKHAsIEFWX0xPR19FUlJPUiwgIlNTTDogSW5pdCBTU0xf Q1RYX3VzZV9jZXJ0aWZpY2F0ZSBmYWlsZWQsICVzXG4iLCBvcGVuc3NsX2dldF9lcnJvcihwKSk7 Cj4+ICsgICAgICAgICAgICByZXQgPSBBVkVSUk9SKEVJTlZBTCk7Cj4+ICsgICAgICAgICAgICBy ZXR1cm4gcmV0Owo+PiArICAgICAgICB9Cj4+ICsgICAgfSBlbHNlIGlmIChwLT50bHNfc2hhcmVk LmlzX2R0bHMpewo+PiArICAgICAgICBhdl9sb2cocCwgQVZfTE9HX0VSUk9SLCAiVExTOiBJbml0 IGNlcnQgZmFpbGVkLCAlc1xuIiwgb3BlbnNzbF9nZXRfZXJyb3IocCkpOwo+PiArICAgICAgICBy ZXQgPSBBVkVSUk9SKEVJTlZBTCk7Cj4+ICsgICAgICAgIGdvdG8gZmFpbDsKPj4gKyAgICB9Cj4+ ICsKPj4gKyAgICBpZiAoYy0+a2V5X2ZpbGUpIHsKPj4gKyAgICAgICAgcmV0ID0gU1NMX0NUWF91 c2VfUHJpdmF0ZUtleV9maWxlKHAtPmN0eCwgYy0+a2V5X2ZpbGUsIFNTTF9GSUxFVFlQRV9QRU0p Owo+PiArICAgICAgICBpZiAocmV0IDw9IDApIHsKPj4gKyAgICAgICAgICAgIGF2X2xvZyhoLCBB Vl9MT0dfRVJST1IsICJVbmFibGUgdG8gbG9hZCBrZXkgZmlsZSAlczogJXNcbiIsCj4+ICsgICAg ICAgICAgICAgICAgYy0+a2V5X2ZpbGUsIG9wZW5zc2xfZ2V0X2Vycm9yKHApKTsKPj4gKyAgICAg ICAgICAgIHJldCA9IEFWRVJST1IoRUlPKTsKPj4gKyAgICAgICAgICAgIGdvdG8gZmFpbDsKPj4g KyAgICAgICAgfQo+PiArICAgIH0gZWxzZSBpZiAocC0+dGxzX3NoYXJlZC5rZXlfYnVmKSB7Cj4+ ICsgICAgICAgIHBrZXkgPSBwa2V5X2Zyb21fcGVtX3N0cmluZyhwLT50bHNfc2hhcmVkLmtleV9i dWYsIDEpOwo+PiArICAgICAgICBpZiAoU1NMX0NUWF91c2VfUHJpdmF0ZUtleShwLT5jdHgsIHBr ZXkpICE9IDEpIHsKPj4gKyAgICAgICAgICAgIGF2X2xvZyhwLCBBVl9MT0dfRVJST1IsICJUTFM6 IEluaXQgU1NMX0NUWF91c2VfUHJpdmF0ZUtleSBmYWlsZWQsICVzXG4iLCBvcGVuc3NsX2dldF9l cnJvcihwKSk7Cj4+ICsgICAgICAgICAgICByZXQgPSBBVkVSUk9SKEVJTlZBTCk7Cj4+ICsgICAg ICAgICAgICByZXR1cm4gcmV0Owo+PiArICAgICAgICB9Cj4+ICsgICAgfSBlbHNlIGlmIChwLT50 bHNfc2hhcmVkLmlzX2R0bHMpewo+PiArICAgICAgICBhdl9sb2cocCwgQVZfTE9HX0VSUk9SLCAi VExTOiBJbml0IHBrZXkgZmFpbGVkLCAlc1xuIiwgb3BlbnNzbF9nZXRfZXJyb3IocCkpOwo+PiAr ICAgICAgICByZXQgPSBBVkVSUk9SKEVJTlZBTCk7Cj4+ICsgICAgICAgIGdvdG8gZmFpbDsKPj4g KyAgICB9Cj4+ICsgICAgcmV0ID0gMDsKPj4gK2ZhaWw6Cj4+ICsgICAgcmV0dXJuIHJldDsKPj4g K30KPj4gKwo+PiArLyoqCj4+ICsgKiBPbmNlIHRoZSBEVExTIHJvbGUgaGFzIGJlZW4gbmVnb3Rp YXRlZCAtIGFjdGl2ZSBmb3IgdGhlIERUTFMgY2xpZW50IG9yIHBhc3NpdmUgZm9yIHRoZQo+PiAr ICogRFRMUyBzZXJ2ZXIgLSB3ZSBwcm9jZWVkIHRvIHNldCB1cCB0aGUgRFRMUyBzdGF0ZSBhbmQg aW5pdGlhdGUgdGhlIGhhbmRzaGFrZS4KPj4gKyAqLwo+PiArc3RhdGljIGludCBkdGxzX3N0YXJ0 KFVSTENvbnRleHQgKmgsIGNvbnN0IGNoYXIgKnVybCwgaW50IGZsYWdzLCBBVkRpY3Rpb25hcnkg KipvcHRpb25zKQo+PiArewo+PiArICAgIFRMU0NvbnRleHQgKnAgPSBoLT5wcml2X2RhdGE7Cj4+ ICsgICAgVExTU2hhcmVkICpjID0gJnAtPnRsc19zaGFyZWQ7Cj4+ICsgICAgaW50IHJldCA9IDA7 Cj4+ICsgICAgYy0+aXNfZHRscyA9IDE7Cj4+ICsgICAgY29uc3QgY2hhciogY2lwaGVycyA9ICJB TEwiOwo+PiArICAgIC8qKgo+PiArICAgICAqIFRoZSBwcm9maWxlIGZvciBPcGVuU1NMJ3MgU1JU UCBpcyBTUlRQX0FFUzEyOF9DTV9TSEExXzgwLCBzZWUgc3NsL2QxX3NydHAuYy4KPj4gKyAgICAg KiBUaGUgcHJvZmlsZSBmb3IgRkZtcGVnJ3MgU1JUUCBpcyBTUlRQX0FFUzEyOF9DTV9ITUFDX1NI QTFfODAsIHNlZSBsaWJhdmZvcm1hdC9zcnRwLmMuCj4+ICsgICAgICovCj4+ICsgICAgY29uc3Qg Y2hhciogcHJvZmlsZXMgPSAiU1JUUF9BRVMxMjhfQ01fU0hBMV84MCI7Cj4+ICsgICAgLyogUmVm ZXIgdG8gdGhlIHRlc3QgY2FzZXMgcmVnYXJkaW5nIHRoZXNlIGN1cnZlcyBpbiB0aGUgV2ViUlRD IGNvZGUuICovCj4+ICsjaWYgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA+PSAweDEwMTAwMDAwTCAv KiBPcGVuU1NMIDEuMS4wICovCj4+ICsgICAgY29uc3QgY2hhciogY3VydmVzID0gIlgyNTUxOTpQ LTI1NjpQLTM4NDpQLTUyMSI7Cj4+ICsjZWxpZiBPUEVOU1NMX1ZFUlNJT05fTlVNQkVSID49IDB4 MTAwMDIwMDBMIC8qIE9wZW5TU0wgMS4wLjIgKi8KPj4gKyAgICBjb25zdCBjaGFyKiBjdXJ2ZXMg PSAiUC0yNTY6UC0zODQ6UC01MjEiOwo+PiArI2VuZGlmCj4+ICsKPj4gKyNpZiBPUEVOU1NMX1ZF UlNJT05fTlVNQkVSIDwgMHgxMDAwMjAwMEwgLyogT3BlblNTTCB2MS4wLjIgKi8KPj4gKyAgICBw LT5jdHggPSBTU0xfQ1RYX25ldyhEVExTdjFfbWV0aG9kKCkpOwo+PiArI2Vsc2UKPj4gKyAgICBw LT5jdHggPSBTU0xfQ1RYX25ldyhEVExTX21ldGhvZCgpKTsKPj4gKyNlbmRpZgo+PiArICAgIGlm ICghcC0+Y3R4KSB7Cj4+ICsgICAgICAgIHJldCA9IEFWRVJST1IoRU5PTUVNKTsKPj4gKyAgICAg ICAgZ290byBmYWlsOwo+PiArICAgIH0KPj4gKwo+PiArI2lmIE9QRU5TU0xfVkVSU0lPTl9OVU1C RVIgPj0gMHgxMDAwMjAwMEwgLyogT3BlblNTTCAxLjAuMiAqLwo+PiArICAgIC8qIEZvciBFQ0RT QSwgd2UgY291bGQgc2V0IHRoZSBjdXJ2ZXMgbGlzdC4gKi8KPj4gKyAgICBpZiAoU1NMX0NUWF9z ZXQxX2N1cnZlc19saXN0KHAtPmN0eCwgY3VydmVzKSAhPSAxKSB7Cj4+ICsgICAgICAgIGF2X2xv ZyhwLCBBVl9MT0dfRVJST1IsICJUTFM6IEluaXQgU1NMX0NUWF9zZXQxX2N1cnZlc19saXN0IGZh aWxlZCwgY3VydmVzPSVzLCAlc1xuIiwKPj4gKyAgICAgICAgICAgIGN1cnZlcywgb3BlbnNzbF9n ZXRfZXJyb3IocCkpOwo+PiArICAgICAgICByZXQgPSBBVkVSUk9SKEVJTlZBTCk7Cj4+ICsgICAg ICAgIHJldHVybiByZXQ7Cj4+ICsgICAgfQo+PiArI2VuZGlmCj4+ICsKPj4gKyNpZiBPUEVOU1NM X1ZFUlNJT05fTlVNQkVSIDwgMHgxMDEwMDAwMEwgLy8gdjEuMS54Cj4+ICsjaWYgT1BFTlNTTF9W RVJTSU9OX05VTUJFUiA8IDB4MTAwMDIwMDBMIC8vIHYxLjAuMgo+PiArICAgIGlmIChjdHgtPmR0 bHNfZWNrZXkpCj4+ICsgICAgICAgIFNTTF9DVFhfc2V0X3RtcF9lY2RoKHAtPmN0eCwgcC0+ZHRs c19lY2tleSk7Cj4+ICsjZWxzZQo+PiArICAgIFNTTF9DVFhfc2V0X2VjZGhfYXV0byhwLT5jdHgs IDEpOwo+PiArI2VuZGlmCj4+ICsjZW5kaWYKPj4gKwo+PiArICAgIC8qKgo+PiArICAgICAqIFdl IGFjdGl2YXRlICJBTEwiIGNpcGhlciBzdWl0ZXMgdG8gYWxpZ24gd2l0aCB0aGUgcGVlcidzIGNh cGFiaWxpdGllcywKPj4gKyAgICAgKiBlbnN1cmluZyBtYXhpbXVtIGNvbXBhdGliaWxpdHkuCj4+ ICsgICAgICovCj4+ICsgICAgaWYgKFNTTF9DVFhfc2V0X2NpcGhlcl9saXN0KHAtPmN0eCwgY2lw aGVycykgIT0gMSkgewo+PiArICAgICAgICBhdl9sb2cocCwgQVZfTE9HX0VSUk9SLCAiVExTOiBJ bml0IFNTTF9DVFhfc2V0X2NpcGhlcl9saXN0IGZhaWxlZCwgY2lwaGVycz0lcywgJXNcbiIsCj4+ ICsgICAgICAgICAgICBjaXBoZXJzLCBvcGVuc3NsX2dldF9lcnJvcihwKSk7Cj4+ICsgICAgICAg IHJldCA9IEFWRVJST1IoRUlOVkFMKTsKPj4gKyAgICAgICAgcmV0dXJuIHJldDsKPj4gKyAgICB9 Cj4+ICsgICAgcmV0ID0gb3BlbnNzbF9pbml0X2NhX2tleV9jZXJ0KGgpOwo+PiArICAgIGlmIChy ZXQgPCAwKSBnb3RvIGZhaWw7Cj4+ICsKPj4gKyAgICAvKiBTZXJ2ZXIgd2lsbCBzZW5kIENlcnRp ZmljYXRlIFJlcXVlc3QuICovCj4+ICsgICAgU1NMX0NUWF9zZXRfdmVyaWZ5KHAtPmN0eCwgU1NM X1ZFUklGWV9QRUVSIHwgU1NMX1ZFUklGWV9DTElFTlRfT05DRSwgb3BlbnNzbF9kdGxzX3Zlcmlm eV9jYWxsYmFjayk7Cj4+ICsgICAgLyogVGhlIGRlcHRoIGNvdW50IGlzICJsZXZlbCAwOnBlZXIg Y2VydGlmaWNhdGUiLCAibGV2ZWwgMTogQ0EgY2VydGlmaWNhdGUiLAo+PiArICAgICAqICJsZXZl bCAyOiBoaWdoZXIgbGV2ZWwgQ0EgY2VydGlmaWNhdGUiLCBhbmQgc28gb24uICovCj4+ICsgICAg U1NMX0NUWF9zZXRfdmVyaWZ5X2RlcHRoKHAtPmN0eCwgNCk7Cj4+ICsgICAgLyogV2hldGhlciB3 ZSBzaG91bGQgcmVhZCBhcyBtYW55IGlucHV0IGJ5dGVzIGFzIHBvc3NpYmxlIChmb3Igbm9uLWJs b2NraW5nIHJlYWRzKSBvciBub3QuICovCj4+ICsgICAgU1NMX0NUWF9zZXRfcmVhZF9haGVhZChw LT5jdHgsIDEpOwo+PiArICAgIC8qIFNldHVwIHRoZSBTUlRQIGNvbnRleHQgKi8KPj4gKyAgICBp ZiAoU1NMX0NUWF9zZXRfdGxzZXh0X3VzZV9zcnRwKHAtPmN0eCwgcHJvZmlsZXMpKSB7Cj4+ICsg ICAgICAgIGF2X2xvZyhwLCBBVl9MT0dfRVJST1IsICJUTFM6IEluaXQgU1NMX0NUWF9zZXRfdGxz ZXh0X3VzZV9zcnRwIGZhaWxlZCwgcHJvZmlsZXM9JXMsICVzXG4iLAo+PiArICAgICAgICAgICAg cHJvZmlsZXMsIG9wZW5zc2xfZ2V0X2Vycm9yKHApKTsKPj4gKyAgICAgICAgcmV0ID0gQVZFUlJP UihFSU5WQUwpOwo+PiArICAgICAgICByZXR1cm4gcmV0Owo+PiArICAgIH0KPj4gKwo+PiArICAg IC8qIFRoZSBzc2wgc2hvdWxkIG5vdCBiZSBjcmVhdGVkIHVubGVzcyB0aGUgY3R4IGhhcyBiZWVu IGluaXRpYWxpemVkLiAqLwo+PiArICAgIHAtPnNzbCA9IFNTTF9uZXcocC0+Y3R4KTsKPj4gKyAg ICBpZiAoIXAtPnNzbCkgewo+PiArICAgICAgICByZXQgPSBBVkVSUk9SKEVOT01FTSk7Cj4+ICsg ICAgICAgIGdvdG8gZmFpbDsKPj4gKyAgICB9Cj4+ICsKPj4gKyAgICAvKiBTZXR1cCB0aGUgY2Fs bGJhY2sgZm9yIGxvZ2dpbmcuICovCj4+ICsgICAgU1NMX3NldF9leF9kYXRhKHAtPnNzbCwgMCwg cCk7Cj4+ICsgICAgU1NMX3NldF9pbmZvX2NhbGxiYWNrKHAtPnNzbCwgb3BlbnNzbF9pbmZvX2Nh bGxiYWNrKTsKPj4gKyAgICAvKioKPj4gKyAgICAgKiBXZSBoYXZlIHNldCB0aGUgTVRVIHRvIGZy YWdtZW50IHRoZSBEVExTIHBhY2tldC4gSXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCB0aGUK Pj4gKyAgICAgKiBwYWNrZXQgaXMgc3BsaXQgdG8gZW5zdXJlIHRoYXQgZWFjaCBoYW5kc2hha2Ug cGFja2V0IGlzIHNtYWxsZXIgdGhhbiB0aGUgTVRVLgo+PiArICAgICAqLwo+PiArICAgIFNTTF9z ZXRfb3B0aW9ucyhwLT5zc2wsIFNTTF9PUF9OT19RVUVSWV9NVFUpOwo+PiArICAgIFNTTF9zZXRf bXR1KHAtPnNzbCwgcC0+dGxzX3NoYXJlZC5tdHUpOwo+PiArI2lmIE9QRU5TU0xfVkVSU0lPTl9O VU1CRVIgPj0gMHgxMDAwMTBiMEwgLyogT3BlblNTTCAxLjAuMWsgKi8KPj4gKyAgICBEVExTX3Nl dF9saW5rX210dShwLT5zc2wsIHAtPnRsc19zaGFyZWQubXR1KTsKPj4gKyNlbmRpZgo+PiArICAg IGluaXRfYmlvX21ldGhvZChoKTsKPj4gKwo+PiArICAgIGlmIChwLT50bHNfc2hhcmVkLnVzZV9l eHRlcm5hbF91ZHAgIT0gMSkgewo+PiArICAgICAgICBpZiAoKHJldCA9IGZmX3Rsc19vcGVuX3Vu ZGVybHlpbmcoJnAtPnRsc19zaGFyZWQsIGgsIHVybCwgb3B0aW9ucykpIDwgMCkgewo+PiArICAg ICAgICAgICAgYXZfbG9nKHAsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byBjb25uZWN0ICVzXG4i LCB1cmwpOwo+PiArICAgICAgICAgICAgcmV0dXJuIHJldDsKPj4gKyAgICAgICAgfQo+PiArICAg IH0KPj4gKwo+PiArICAgIC8qIFNldHVwIERUTFMgYXMgcGFzc2l2ZSwgd2hpY2ggaXMgc2VydmVy IHJvbGUuICovCj4+ICsgICAgYy0+bGlzdGVuID8gU1NMX3NldF9hY2NlcHRfc3RhdGUocC0+c3Ns KSA6IFNTTF9zZXRfY29ubmVjdF9zdGF0ZShwLT5zc2wpOwo+PiArCj4+ICsgICAgLyoqCj4+ICsg ICAgICogRHVyaW5nIGluaXRpYWxpemF0aW9uLCB3ZSBvbmx5IG5lZWQgdG8gY2FsbCBTU0xfZG9f aGFuZHNoYWtlIG9uY2UgYmVjYXVzZSBTU0xfcmVhZCBjb25zdW1lcwo+PiArICAgICAqIHRoZSBo YW5kc2hha2UgbWVzc2FnZSBpZiB0aGUgaGFuZHNoYWtlIGlzIGluY29tcGxldGUuCj4+ICsgICAg ICogVG8gc2ltcGxpZnkgbWFpbnRlbmFuY2UsIHdlIGluaXRpYXRlIHRoZSBoYW5kc2hha2UgZm9y IGJvdGggdGhlIERUTFMgc2VydmVyIGFuZCBjbGllbnQgYWZ0ZXIKPj4gKyAgICAgKiBzZW5kaW5n IG91dCB0aGUgSUNFIHJlc3BvbnNlIGluIHRoZSBzdGFydF9hY3RpdmVfaGFuZHNoYWtlIGZ1bmN0 aW9uLiBJdCdzIHdvcnRoIG5vdGluZyB0aGF0Cj4+ICsgICAgICogYWx0aG91Z2ggdGhlIERUTFMg c2VydmVyIG1heSByZWNlaXZlIHRoZSBDbGllbnRIZWxsbyBpbW1lZGlhdGVseSBhZnRlciBzZW5k aW5nIG91dCB0aGUgSUNFCj4+ICsgICAgICogcmVzcG9uc2UsIHRoaXMgc2hvdWxkbid0IGJlIGFu IGlzc3VlIGFzIHRoZSBoYW5kc2hha2UgZnVuY3Rpb24gaXMgY2FsbGVkIGJlZm9yZSBhbnkgRFRM Uwo+PiArICAgICAqIHBhY2tldHMgYXJlIHJlY2VpdmVkLgo+PiArICAgICAqCj4+ICsgICAgICog VGhlIFNTTF9kb19oYW5kc2hha2UgY2FuJ3QgYmUgY2FsbGVkIGlmIERUTFMgaGFzbid0IHByZXBh cmUgZm9yIHVkcC4KPj4gKyAgICAgKi8KPj4gKyAgICBpZiAocC0+dGxzX3NoYXJlZC51c2VfZXh0 ZXJuYWxfdWRwICE9IDEpIHsKPj4gKyAgICAgICAgcmV0ID0gZHRsc19oYW5kc2hha2UoaCk7Cj4+ ICsgICAgICAgIC8vIEZhdGFsIFNTTCBlcnJvciwgZm9yIGV4YW1wbGUsIG5vIGF2YWlsYWJsZSBz dWl0ZSB3aGVuIHBlZXIgaXMgRFRMUyAxLjAgd2hpbGUgd2UgYXJlIERUTFMgMS4yLgo+PiArICAg ICAgICBpZiAocmV0IDwgMCkgewo+PiArICAgICAgICAgICAgYXZfbG9nKHAsIEFWX0xPR19FUlJP UiwgIlRMUzogRmFpbGVkIHRvIGRyaXZlIFNTTCBjb250ZXh0LCByZXQ9JWRcbiIsIHJldCk7Cj4+ ICsgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFSU8pOwo+PiArICAgICAgICB9Cj4+ICsgICAg fQo+PiArCj4+ICsgICAgYXZfbG9nKHAsIEFWX0xPR19WRVJCT1NFLCAiVExTOiBTZXR1cCBvaywg TVRVPSVkLCBmaW5nZXJwcmludCAlc1xuIiwKPj4gKyAgICAgICAgcC0+dGxzX3NoYXJlZC5tdHUs IHAtPnRsc19zaGFyZWQuZmluZ2VycHJpbnQpOwo+PiArCj4+ICsgICAgcmV0ID0gMDsKPj4gK2Zh aWw6Cj4+ICsgICAgcmV0dXJuIHJldDsKPj4gK30KPj4gKwo+PiArLyoqCj4+ICsgKiBDbGVhbnVw IHRoZSBEVExTIGNvbnRleHQuCj4+ICsgKi8KPj4gK3N0YXRpYyBhdl9jb2xkIGludCBkdGxzX2Ns b3NlKFVSTENvbnRleHQgKmgpCj4+ICt7Cj4+ICsgICAgVExTQ29udGV4dCAqY3R4ID0gaC0+cHJp dl9kYXRhOwo+PiArICAgIFNTTF9mcmVlKGN0eC0+c3NsKTsKPj4gKyAgICBTU0xfQ1RYX2ZyZWUo Y3R4LT5jdHgpOwo+PiArICAgIGF2X2ZyZWVwKCZjdHgtPnRsc19zaGFyZWQuZmluZ2VycHJpbnQp Owo+PiArICAgIGF2X2ZyZWVwKCZjdHgtPnRsc19zaGFyZWQuY2VydF9idWYpOwo+PiArICAgIGF2 X2ZyZWVwKCZjdHgtPnRsc19zaGFyZWQua2V5X2J1Zik7Cj4+ICsjaWYgT1BFTlNTTF9WRVJTSU9O X05VTUJFUiA8IDB4MzAwMDAwMDBMIC8qIE9wZW5TU0wgMy4wICovCj4+ICsgICAgRUNfS0VZX2Zy ZWUoY3R4LT5kdGxzX2Vja2V5KTsKPj4gKyNlbmRpZgo+PiArICAgIHJldHVybiAwOwo+PiArfQo+ PiArCj4+IHN0YXRpYyBpbnQgdGxzX29wZW4oVVJMQ29udGV4dCAqaCwgY29uc3QgY2hhciAqdXJp LCBpbnQgZmxhZ3MsIEFWRGljdGlvbmFyeSAqKm9wdGlvbnMpCj4+IHsKPj4gICAgIFRMU0NvbnRl eHQgKnAgPSBoLT5wcml2X2RhdGE7Cj4+ICAgICBUTFNTaGFyZWQgKmMgPSAmcC0+dGxzX3NoYXJl ZDsKPj4gLSAgICBCSU8gKmJpbzsKPj4gICAgIGludCByZXQ7Cj4+IAo+PiAjaWYgT1BFTlNTTF9W RVJTSU9OX05VTUJFUiA8IDB4MTAxMDAwMDBMCj4+IEBAIC0yNzEsNTIgKzEwNDEsMjYgQEAgc3Rh dGljIGludCB0bHNfb3BlbihVUkxDb250ZXh0ICpoLCBjb25zdCBjaGFyICp1cmksIGludCBmbGFn cywgQVZEaWN0aW9uYXJ5ICoqb3AKPj4gICAgIC8vIHN1cHBvcnQgZm9yIHRoZSBvbGQgcHJvdG9j b2xzIGltbWVkaWF0ZWx5IGFmdGVyIGNyZWF0aW5nIHRoZSBjb250ZXh0Lgo+PiAgICAgcC0+Y3R4 ID0gU1NMX0NUWF9uZXcoYy0+bGlzdGVuID8gU1NMdjIzX3NlcnZlcl9tZXRob2QoKSA6IFNTTHYy M19jbGllbnRfbWV0aG9kKCkpOwo+PiAgICAgaWYgKCFwLT5jdHgpIHsKPj4gLSAgICAgICAgYXZf bG9nKGgsIEFWX0xPR19FUlJPUiwgIiVzXG4iLCBFUlJfZXJyb3Jfc3RyaW5nKEVSUl9nZXRfZXJy b3IoKSwgTlVMTCkpOwo+PiArICAgICAgICBhdl9sb2coaCwgQVZfTE9HX0VSUk9SLCAiJXNcbiIs IG9wZW5zc2xfZ2V0X2Vycm9yKHApKTsKPj4gICAgICAgICByZXQgPSBBVkVSUk9SKEVJTyk7Cj4+ ICAgICAgICAgZ290byBmYWlsOwo+PiAgICAgfQo+PiAgICAgU1NMX0NUWF9zZXRfb3B0aW9ucyhw LT5jdHgsIFNTTF9PUF9OT19TU0x2MiB8IFNTTF9PUF9OT19TU0x2Myk7Cj4+IC0gICAgaWYgKGMt PmNhX2ZpbGUpIHsKPj4gLSAgICAgICAgaWYgKCFTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9u cyhwLT5jdHgsIGMtPmNhX2ZpbGUsIE5VTEwpKQo+PiAtICAgICAgICAgICAgYXZfbG9nKGgsIEFW X0xPR19FUlJPUiwgIlNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zICVzXG4iLCBFUlJfZXJy b3Jfc3RyaW5nKEVSUl9nZXRfZXJyb3IoKSwgTlVMTCkpOwo+PiAtICAgIH0KPj4gLSAgICBpZiAo Yy0+Y2VydF9maWxlICYmICFTU0xfQ1RYX3VzZV9jZXJ0aWZpY2F0ZV9jaGFpbl9maWxlKHAtPmN0 eCwgYy0+Y2VydF9maWxlKSkgewo+PiAtICAgICAgICBhdl9sb2coaCwgQVZfTE9HX0VSUk9SLCAi VW5hYmxlIHRvIGxvYWQgY2VydCBmaWxlICVzOiAlc1xuIiwKPj4gLSAgICAgICAgICAgICAgIGMt PmNlcnRfZmlsZSwgRVJSX2Vycm9yX3N0cmluZyhFUlJfZ2V0X2Vycm9yKCksIE5VTEwpKTsKPj4g LSAgICAgICAgcmV0ID0gQVZFUlJPUihFSU8pOwo+PiAtICAgICAgICBnb3RvIGZhaWw7Cj4+IC0g ICAgfQo+PiAtICAgIGlmIChjLT5rZXlfZmlsZSAmJiAhU1NMX0NUWF91c2VfUHJpdmF0ZUtleV9m aWxlKHAtPmN0eCwgYy0+a2V5X2ZpbGUsIFNTTF9GSUxFVFlQRV9QRU0pKSB7Cj4+IC0gICAgICAg IGF2X2xvZyhoLCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gbG9hZCBrZXkgZmlsZSAlczogJXNc biIsCj4+IC0gICAgICAgICAgICAgICBjLT5rZXlfZmlsZSwgRVJSX2Vycm9yX3N0cmluZyhFUlJf Z2V0X2Vycm9yKCksIE5VTEwpKTsKPj4gLSAgICAgICAgcmV0ID0gQVZFUlJPUihFSU8pOwo+PiAt ICAgICAgICBnb3RvIGZhaWw7Cj4+IC0gICAgfQo+PiArICAgIHJldCA9IG9wZW5zc2xfaW5pdF9j YV9rZXlfY2VydChoKTsKPj4gKyAgICBpZiAocmV0IDwgMCkgZ290byBmYWlsOwo+PiAgICAgLy8g Tm90ZSwgdGhpcyBkb2Vzbid0IGNoZWNrIHRoYXQgdGhlIHBlZXIgY2VydGlmaWNhdGUgYWN0dWFs bHkgbWF0Y2hlcwo+PiAgICAgLy8gdGhlIHJlcXVlc3RlZCBob3N0bmFtZS4KPj4gICAgIGlmIChj LT52ZXJpZnkpCj4+ICAgICAgICAgU1NMX0NUWF9zZXRfdmVyaWZ5KHAtPmN0eCwgU1NMX1ZFUklG WV9QRUVSfFNTTF9WRVJJRllfRkFJTF9JRl9OT19QRUVSX0NFUlQsIE5VTEwpOwo+PiAgICAgcC0+ c3NsID0gU1NMX25ldyhwLT5jdHgpOwo+PiAgICAgaWYgKCFwLT5zc2wpIHsKPj4gLSAgICAgICAg YXZfbG9nKGgsIEFWX0xPR19FUlJPUiwgIiVzXG4iLCBFUlJfZXJyb3Jfc3RyaW5nKEVSUl9nZXRf ZXJyb3IoKSwgTlVMTCkpOwo+PiArICAgICAgICBhdl9sb2coaCwgQVZfTE9HX0VSUk9SLCAiJXNc biIsIG9wZW5zc2xfZ2V0X2Vycm9yKHApKTsKPj4gICAgICAgICByZXQgPSBBVkVSUk9SKEVJTyk7 Cj4+ICAgICAgICAgZ290byBmYWlsOwo+PiAgICAgfQo+PiAtI2lmIE9QRU5TU0xfVkVSU0lPTl9O VU1CRVIgPj0gMHgxMDEwMDAwZkwKPj4gLSAgICBwLT51cmxfYmlvX21ldGhvZCA9IEJJT19tZXRo X25ldyhCSU9fVFlQRV9TT1VSQ0VfU0lOSywgInVybHByb3RvY29sIGJpbyIpOwo+PiAtICAgIEJJ T19tZXRoX3NldF93cml0ZShwLT51cmxfYmlvX21ldGhvZCwgdXJsX2Jpb19id3JpdGUpOwo+PiAt ICAgIEJJT19tZXRoX3NldF9yZWFkKHAtPnVybF9iaW9fbWV0aG9kLCB1cmxfYmlvX2JyZWFkKTsK Pj4gLSAgICBCSU9fbWV0aF9zZXRfcHV0cyhwLT51cmxfYmlvX21ldGhvZCwgdXJsX2Jpb19icHV0 cyk7Cj4+IC0gICAgQklPX21ldGhfc2V0X2N0cmwocC0+dXJsX2Jpb19tZXRob2QsIHVybF9iaW9f Y3RybCk7Cj4+IC0gICAgQklPX21ldGhfc2V0X2NyZWF0ZShwLT51cmxfYmlvX21ldGhvZCwgdXJs X2Jpb19jcmVhdGUpOwo+PiAtICAgIEJJT19tZXRoX3NldF9kZXN0cm95KHAtPnVybF9iaW9fbWV0 aG9kLCB1cmxfYmlvX2Rlc3Ryb3kpOwo+PiAtICAgIGJpbyA9IEJJT19uZXcocC0+dXJsX2Jpb19t ZXRob2QpOwo+PiAtICAgIEJJT19zZXRfZGF0YShiaW8sIHApOwo+PiAtI2Vsc2UKPj4gLSAgICBi aW8gPSBCSU9fbmV3KCZ1cmxfYmlvX21ldGhvZCk7Cj4+IC0gICAgYmlvLT5wdHIgPSBwOwo+PiAt I2VuZGlmCj4+IC0gICAgU1NMX3NldF9iaW8ocC0+c3NsLCBiaW8sIGJpbyk7Cj4+ICsgICAgU1NM X3NldF9leF9kYXRhKHAtPnNzbCwgMCwgcCk7Cj4+ICsgICAgU1NMX0NUWF9zZXRfaW5mb19jYWxs YmFjayhwLT5jdHgsIG9wZW5zc2xfaW5mb19jYWxsYmFjayk7Cj4+ICsgICAgaW5pdF9iaW9fbWV0 aG9kKGgpOwo+PiAgICAgaWYgKCFjLT5saXN0ZW4gJiYgIWMtPm51bWVyaWNob3N0KQo+PiAgICAg ICAgIFNTTF9zZXRfdGxzZXh0X2hvc3RfbmFtZShwLT5zc2wsIGMtPmhvc3QpOwo+PiAgICAgcmV0 ID0gYy0+bGlzdGVuID8gU1NMX2FjY2VwdChwLT5zc2wpIDogU1NMX2Nvbm5lY3QocC0+c3NsKTsK Pj4gQEAgLTMyNSw3ICsxMDY5LDcgQEAgc3RhdGljIGludCB0bHNfb3BlbihVUkxDb250ZXh0ICpo LCBjb25zdCBjaGFyICp1cmksIGludCBmbGFncywgQVZEaWN0aW9uYXJ5ICoqb3AKPj4gICAgICAg ICByZXQgPSBBVkVSUk9SKEVJTyk7Cj4+ICAgICAgICAgZ290byBmYWlsOwo+PiAgICAgfSBlbHNl IGlmIChyZXQgPCAwKSB7Cj4+IC0gICAgICAgIHJldCA9IHByaW50X3Rsc19lcnJvcihoLCByZXQp Owo+PiArICAgICAgICByZXQgPSBwcmludF9zc2xfZXJyb3IoaCwgcmV0KTsKPj4gICAgICAgICBn b3RvIGZhaWw7Cj4+ICAgICB9Cj4+IAo+PiBAQCAtMzM4LDMxICsxMDgyLDM1IEBAIGZhaWw6Cj4+ IHN0YXRpYyBpbnQgdGxzX3JlYWQoVVJMQ29udGV4dCAqaCwgdWludDhfdCAqYnVmLCBpbnQgc2l6 ZSkKPj4gewo+PiAgICAgVExTQ29udGV4dCAqYyA9IGgtPnByaXZfZGF0YTsKPj4gKyAgICBVUkxD b250ZXh0ICp1YyA9IGMtPnRsc19zaGFyZWQuaXNfZHRscyA/IGMtPnRsc19zaGFyZWQudWRwCj4+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjLT50bHNfc2hh cmVkLnRjcDsKPj4gICAgIGludCByZXQ7Cj4+ICAgICAvLyBTZXQgb3IgY2xlYXIgdGhlIEFWSU9f RkxBR19OT05CTE9DSyBvbiBjLT50bHNfc2hhcmVkLnRjcAo+PiAtICAgIGMtPnRsc19zaGFyZWQu dGNwLT5mbGFncyAmPSB+QVZJT19GTEFHX05PTkJMT0NLOwo+PiAtICAgIGMtPnRsc19zaGFyZWQu dGNwLT5mbGFncyB8PSBoLT5mbGFncyAmIEFWSU9fRkxBR19OT05CTE9DSzsKPj4gKyAgICB1Yy0+ ZmxhZ3MgJj0gfkFWSU9fRkxBR19OT05CTE9DSzsKPj4gKyAgICB1Yy0+ZmxhZ3MgfD0gaC0+Zmxh Z3MgJiBBVklPX0ZMQUdfTk9OQkxPQ0s7Cj4+ICAgICByZXQgPSBTU0xfcmVhZChjLT5zc2wsIGJ1 Ziwgc2l6ZSk7Cj4+ICAgICBpZiAocmV0ID4gMCkKPj4gICAgICAgICByZXR1cm4gcmV0Owo+PiAg ICAgaWYgKHJldCA9PSAwKQo+PiAgICAgICAgIHJldHVybiBBVkVSUk9SX0VPRjsKPj4gLSAgICBy ZXR1cm4gcHJpbnRfdGxzX2Vycm9yKGgsIHJldCk7Cj4+ICsgICAgcmV0dXJuIHByaW50X3NzbF9l cnJvcihoLCByZXQpOwo+PiB9Cj4+IAo+PiBzdGF0aWMgaW50IHRsc193cml0ZShVUkxDb250ZXh0 ICpoLCBjb25zdCB1aW50OF90ICpidWYsIGludCBzaXplKQo+PiB7Cj4+ICAgICBUTFNDb250ZXh0 ICpjID0gaC0+cHJpdl9kYXRhOwo+PiArICAgIFVSTENvbnRleHQgKnVjID0gYy0+dGxzX3NoYXJl ZC5pc19kdGxzID8gYy0+dGxzX3NoYXJlZC51ZHAKPj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA6IGMtPnRsc19zaGFyZWQudGNwOwo+PiAgICAgaW50IHJldDsK Pj4gICAgIC8vIFNldCBvciBjbGVhciB0aGUgQVZJT19GTEFHX05PTkJMT0NLIG9uIGMtPnRsc19z aGFyZWQudGNwCj4+IC0gICAgYy0+dGxzX3NoYXJlZC50Y3AtPmZsYWdzICY9IH5BVklPX0ZMQUdf Tk9OQkxPQ0s7Cj4+IC0gICAgYy0+dGxzX3NoYXJlZC50Y3AtPmZsYWdzIHw9IGgtPmZsYWdzICYg QVZJT19GTEFHX05PTkJMT0NLOwo+PiArICAgIHVjLT5mbGFncyAmPSB+QVZJT19GTEFHX05PTkJM T0NLOwo+PiArICAgIHVjLT5mbGFncyB8PSBoLT5mbGFncyAmIEFWSU9fRkxBR19OT05CTE9DSzsK Pj4gICAgIHJldCA9IFNTTF93cml0ZShjLT5zc2wsIGJ1Ziwgc2l6ZSk7Cj4+ICAgICBpZiAocmV0 ID4gMCkKPj4gICAgICAgICByZXR1cm4gcmV0Owo+PiAgICAgaWYgKHJldCA9PSAwKQo+PiAgICAg ICAgIHJldHVybiBBVkVSUk9SX0VPRjsKPj4gLSAgICByZXR1cm4gcHJpbnRfdGxzX2Vycm9yKGgs IHJldCk7Cj4+ICsgICAgcmV0dXJuIHByaW50X3NzbF9lcnJvcihoLCByZXQpOwo+PiB9Cj4+IAo+ PiBzdGF0aWMgaW50IHRsc19nZXRfZmlsZV9oYW5kbGUoVVJMQ29udGV4dCAqaCkKPj4gQEAgLTQw MSwzICsxMTQ5LDIyIEBAIGNvbnN0IFVSTFByb3RvY29sIGZmX3Rsc19wcm90b2NvbCA9IHsKPj4g ICAgIC5mbGFncyAgICAgICAgICA9IFVSTF9QUk9UT0NPTF9GTEFHX05FVFdPUkssCj4+ICAgICAu cHJpdl9kYXRhX2NsYXNzID0gJnRsc19jbGFzcywKPj4gfTsKPj4gKwo+PiArc3RhdGljIGNvbnN0 IEFWQ2xhc3MgZHRsc19jbGFzcyA9IHsKPj4gKyAgICAuY2xhc3NfbmFtZSA9ICJkdGxzIiwKPj4g KyAgICAuaXRlbV9uYW1lICA9IGF2X2RlZmF1bHRfaXRlbV9uYW1lLAo+PiArICAgIC5vcHRpb24g ICAgID0gb3B0aW9ucywKPj4gKyAgICAudmVyc2lvbiAgICA9IExJQkFWVVRJTF9WRVJTSU9OX0lO VCwKPj4gK307Cj4+ICsKPj4gK2NvbnN0IFVSTFByb3RvY29sIGZmX2R0bHNfcHJvdG9jb2wgPSB7 Cj4+ICsgICAgLm5hbWUgICAgICAgICAgID0gImR0bHMiLAo+PiArICAgIC51cmxfb3BlbjIgICAg ICA9IGR0bHNfc3RhcnQsCj4+ICsgICAgLnVybF9oYW5kc2hha2UgID0gZHRsc19oYW5kc2hha2Us Cj4+ICsgICAgLnVybF9jbG9zZSAgICAgID0gZHRsc19jbG9zZSwKPj4gKyAgICAudXJsX3JlYWQg ICAgICAgPSB0bHNfcmVhZCwKPj4gKyAgICAudXJsX3dyaXRlICAgICAgPSB0bHNfd3JpdGUsCj4+ ICsgICAgLnByaXZfZGF0YV9zaXplID0gc2l6ZW9mKFRMU0NvbnRleHQpLAo+PiArICAgIC5mbGFn cyAgICAgICAgICA9IFVSTF9QUk9UT0NPTF9GTEFHX05FVFdPUkssCj4+ICsgICAgLnByaXZfZGF0 YV9jbGFzcyA9ICZkdGxzX2NsYXNzLAo+PiArfTsKPj4gZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0 L3doaXAuYyBiL2xpYmF2Zm9ybWF0L3doaXAuYwo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBp bmRleCAwMDAwMDAwMDAwLi4wNjcxZTIzNjM1Cj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIvbGli YXZmb3JtYXQvd2hpcC5jCj4+IEBAIC0wLDAgKzEsMTkxNyBAQAo+PiArLyoKPj4gKyAqIFdlYlJU Qy1IVFRQIGluZ2VzdGlvbiBwcm90b2NvbCAoV0hJUCkgbXV4ZXIKPj4gKyAqIENvcHlyaWdodCAo YykgMjAyMyBUaGUgRkZtcGVnIFByb2plY3QKPj4gKyAqCj4+ICsgKiBUaGlzIGZpbGUgaXMgcGFy dCBvZiBGRm1wZWcuCj4+ICsgKgo+PiArICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgo+PiArICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+PiArICogTGljZW5zZSBhcyBwdWJs aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCj4+ICsgKiB2ZXJz aW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy c2lvbi4KPj4gKyAqCj4+ICsgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKPj4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4+ICsgKiBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQo+PiArICog TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPj4gKyAqCj4+ ICsgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdl bmVyYWwgUHVibGljCj4+ICsgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdy aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCj4+ICsgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCj4+ICsg Ki8KPj4gKwo+PiArI2luY2x1ZGUgImxpYmF2Y29kZWMvYXZjb2RlYy5oIgo+PiArI2luY2x1ZGUg ImxpYmF2Y29kZWMvY29kZWNfZGVzYy5oIgo+PiArI2luY2x1ZGUgImxpYmF2Y29kZWMvaDI2NC5o Igo+PiArI2luY2x1ZGUgImxpYmF2Y29kZWMvc3RhcnRjb2RlLmgiCj4+ICsjaW5jbHVkZSAibGli YXZ1dGlsL2Jhc2U2NC5oIgo+PiArI2luY2x1ZGUgImxpYmF2dXRpbC9icHJpbnQuaCIKPj4gKyNp bmNsdWRlICJsaWJhdnV0aWwvY3JjLmgiCj4+ICsjaW5jbHVkZSAibGliYXZ1dGlsL2htYWMuaCIK Pj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvaW50cmVhZHdyaXRlLmgiCj4+ICsjaW5jbHVkZSAibGli YXZ1dGlsL2xmZy5oIgo+PiArI2luY2x1ZGUgImxpYmF2dXRpbC9vcHQuaCIKPj4gKyNpbmNsdWRl ICJsaWJhdnV0aWwvbWVtLmgiCj4+ICsjaW5jbHVkZSAibGliYXZ1dGlsL3JhbmRvbV9zZWVkLmgi Cj4+ICsjaW5jbHVkZSAibGliYXZ1dGlsL3RpbWUuaCIKPj4gKyNpbmNsdWRlICJhdmMuaCIKPj4g KyNpbmNsdWRlICJuYWwuaCIKPj4gKyNpbmNsdWRlICJhdmlvX2ludGVybmFsLmgiCj4+ICsjaW5j bHVkZSAiaHR0cC5oIgo+PiArI2luY2x1ZGUgImludGVybmFsLmgiCj4+ICsjaW5jbHVkZSAibXV4 LmgiCj4+ICsjaW5jbHVkZSAibmV0d29yay5oIgo+PiArI2luY2x1ZGUgInNydHAuaCIKPj4gKyNp bmNsdWRlICJ0bHMuaCIKPj4gKwo+PiArLyoqCj4+ICsgKiBNYXhpbXVtIHNpemUgbGltaXQgb2Yg YSBTZXNzaW9uIERlc2NyaXB0aW9uIFByb3RvY29sIChTRFApLAo+PiArICogYmUgaXQgYW4gb2Zm ZXIgb3IgYW5zd2VyLgo+PiArICovCj4+ICsjZGVmaW5lIE1BWF9TRFBfU0laRSA4MTkyCj4+ICsK Pj4gKy8qKgo+PiArICogVGhlIHNpemUgb2YgdGhlIFNlY3VyZSBSZWFsLXRpbWUgVHJhbnNwb3J0 IFByb3RvY29sIChTUlRQKSBtYXN0ZXIga2V5IG1hdGVyaWFsCj4+ICsgKiB0aGF0IGlzIGV4cG9y dGVkIGJ5IFNlY3VyZSBTb2NrZXRzIExheWVyIChTU0wpIGFmdGVyIGEgc3VjY2Vzc2Z1bCBEYXRh Z3JhbQo+PiArICogVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IChEVExTKSBoYW5kc2hha2UuIFRo aXMgbWF0ZXJpYWwgY29uc2lzdHMgb2YgYSBrZXkKPj4gKyAqIG9mIDE2IGJ5dGVzIGFuZCBhIHNh bHQgb2YgMTQgYnl0ZXMuCj4+ICsgKi8KPj4gKyNkZWZpbmUgRFRMU19TUlRQX0tFWV9MRU4gMTYK Pj4gKyNkZWZpbmUgRFRMU19TUlRQX1NBTFRfTEVOIDE0Cj4+ICsKPj4gKy8qKgo+PiArICogVGhl IG1heGltdW0gc2l6ZSBvZiB0aGUgU2VjdXJlIFJlYWwtdGltZSBUcmFuc3BvcnQgUHJvdG9jb2wg KFNSVFApIEhNQUMgY2hlY2tzdW0KPj4gKyAqIGFuZCBwYWRkaW5nIHRoYXQgaXMgYXBwZW5kZWQg dG8gdGhlIGVuZCBvZiB0aGUgcGFja2V0LiBUbyBjYWxjdWxhdGUgdGhlIG1heGltdW0KPj4gKyAq IHNpemUgb2YgdGhlIFVzZXIgRGF0YWdyYW0gUHJvdG9jb2wgKFVEUCkgcGFja2V0IHRoYXQgY2Fu IGJlIHNlbnQgb3V0LCBzdWJ0cmFjdAo+PiArICogdGhpcyBzaXplIGZyb20gdGhlIGBwa3Rfc2l6 ZWAuCj4+ICsgKi8KPj4gKyNkZWZpbmUgRFRMU19TUlRQX0NIRUNLU1VNX0xFTiAxNgo+PiArCj4+ ICsvKioKPj4gKyAqIFdoZW4gc2VuZGluZyBJQ0Ugb3IgRFRMUyBtZXNzYWdlcywgcmVzcG9uc2Vz IGFyZSByZWNlaXZlZCB2aWEgVURQLiBIb3dldmVyLCB0aGUgcGVlcgo+PiArICogbWF5IG5vdCBi ZSByZWFkeSBhbmQgcmV0dXJuIEVBR0FJTiwgaW4gd2hpY2ggY2FzZSB3ZSBzaG91bGQgd2FpdCBm b3IgYSBzaG9ydCBkdXJhdGlvbgo+PiArICogYW5kIHJldHJ5IHJlYWRpbmcuCj4+ICsgKiBGb3Ig aW5zdGFuY2UsIGlmIHdlIHRyeSB0byByZWFkIGZyb20gVURQIGFuZCBnZXQgRUFHQUlOLCB3ZSBz bGVlcCBmb3IgNW1zIGFuZCByZXRyeS4KPj4gKyAqIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBsaW1p dCB0aGUgdG90YWwgZHVyYXRpb24gaW4gbWlsbGlzZWNvbmRzIChlLmcuLCA1MG1zKSwgc28gd2UK Pj4gKyAqIHdpbGwgdHJ5IGF0IG1vc3QgNSB0aW1lcy4KPj4gKyAqIEtlZXAgaW4gbWluZCB0aGF0 IHRoaXMgbWFjcm8gc2hvdWxkIGhhdmUgYSBtaW5pbXVtIGR1cmF0aW9uIG9mIDUgbXMuCj4+ICsg Ki8KPj4gKyNkZWZpbmUgSUNFX0RUTFNfUkVBRF9JTlRFUlZBTCA1MAo+PiArCj4+ICsvKiBUaGUg bWFnaWMgY29va2llIGZvciBTZXNzaW9uIFRyYXZlcnNhbCBVdGlsaXRpZXMgZm9yIE5BVCAoU1RV TikgbWVzc2FnZXMuICovCj4+ICsjZGVmaW5lIFNUVU5fTUFHSUNfQ09PS0lFIDB4MjExMkE0NDIK Pj4gKwo+PiArLyoqCj4+ICsgKiBUaGUgRFRMUyBjb250ZW50IHR5cGUuCj4+ICsgKiBTZWUgaHR0 cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzIyNDYjc2VjdGlvbi02LjIuMQo+PiArICogY2hh bmdlX2NpcGhlcl9zcGVjKDIwKSwgYWxlcnQoMjEpLCBoYW5kc2hha2UoMjIpLCBhcHBsaWNhdGlv bl9kYXRhKDIzKQo+PiArICovCj4+ICsjZGVmaW5lIERUTFNfQ09OVEVOVF9UWVBFX0NIQU5HRV9D SVBIRVJfU1BFQyAyMAo+PiArCj4+ICsvKioKPj4gKyAqIFRoZSBEVExTIHJlY29yZCBsYXllciBo ZWFkZXIgaGFzIGEgdG90YWwgc2l6ZSBvZiAxMyBieXRlcywgY29uc2lzdGluZyBvZgo+PiArICog Q29udGVudFR5cGUgKDEgYnl0ZSksIFByb3RvY29sVmVyc2lvbiAoMiBieXRlcyksIEVwb2NoICgy IGJ5dGVzKSwKPj4gKyAqIFNlcXVlbmNlTnVtYmVyICg2IGJ5dGVzKSwgYW5kIExlbmd0aCAoMiBi eXRlcykuCj4+ICsgKiBTZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9y ZmM5MTQ3I3NlY3Rpb24tNAo+PiArICovCj4+ICsjZGVmaW5lIERUTFNfUkVDT1JEX0xBWUVSX0hF QURFUl9MRU4gMTMKPj4gKwo+PiArLyoqCj4+ICsgKiBUaGUgRFRMUyB2ZXJzaW9uIG51bWJlciwg d2hpY2ggaXMgMHhmZWZmIGZvciBEVExTIDEuMCwgb3IgMHhmZWZkIGZvciBEVExTIDEuMi4KPj4g KyAqIFNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzkxNDcjbmFt ZS10aGUtZHRscy1yZWNvcmQtbGF5ZXIKPj4gKyAqLwo+PiArI2RlZmluZSBEVExTX1ZFUlNJT05f MTAgMHhmZWZmCj4+ICsjZGVmaW5lIERUTFNfVkVSU0lPTl8xMiAweGZlZmQKPj4gKwo+PiArLyoq Cj4+ICsgKiBNYXhpbXVtIHNpemUgb2YgdGhlIGJ1ZmZlciBmb3Igc2VuZGluZyBhbmQgcmVjZWl2 aW5nIFVEUCBwYWNrZXRzLgo+PiArICogUGxlYXNlIG5vdGUgdGhhdCB0aGlzIHNpemUgZG9lcyBu b3QgbGltaXQgdGhlIHNpemUgb2YgdGhlIFVEUCBwYWNrZXQgdGhhdCBjYW4gYmUgc2VudC4KPj4g KyAqIFRvIHNldCB0aGUgbGltaXQgZm9yIHBhY2tldCBzaXplLCBtb2RpZnkgdGhlIGBwa3Rfc2l6 ZWAgcGFyYW1ldGVyLgo+PiArICogRm9yIGluc3RhbmNlLCBpdCBpcyBwb3NzaWJsZSB0byBzZXQg dGhlIFVEUCBidWZmZXIgdG8gNDA5NiB0byBzZW5kIG9yIHJlY2VpdmUgcGFja2V0cywKPj4gKyAq IGJ1dCBwbGVhc2Uga2VlcCBpbiBtaW5kIHRoYXQgdGhlIGBwa3Rfc2l6ZWAgb3B0aW9uIGxpbWl0 cyB0aGUgcGFja2V0IHNpemUgdG8gMTQwMC4KPj4gKyAqLwo+PiArI2RlZmluZSBNQVhfVURQX0JV RkZFUl9TSVpFIDQwOTYKPj4gKwo+PiArLyogUmVmZXJyaW5nIHRvIENocm9tZSdzIGRlZmluaXRp b24gb2YgUlRQIHBheWxvYWQgdHlwZXMuICovCj4+ICsjZGVmaW5lIFdISVBfUlRQX1BBWUxPQURf VFlQRV9IMjY0IDEwNgo+PiArI2RlZmluZSBXSElQX1JUUF9QQVlMT0FEX1RZUEVfT1BVUyAxMTEK Pj4gKwo+PiArLyoqCj4+ICsgKiBUaGUgU1RVTiBtZXNzYWdlIGhlYWRlciwgd2hpY2ggaXMgMjAg Ynl0ZXMgbG9uZywgY29tcHJpc2VzIHRoZQo+PiArICogU1RVTk1lc3NhZ2VUeXBlICgxQiksIE1l c3NhZ2VMZW5ndGggKDJCKSwgTWFnaWNDb29raWUgKDRCKSwKPj4gKyAqIGFuZCBUcmFuc2FjdGlv bklEICgxMkIpLgo+PiArICogU2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0 bWwvcmZjNTM4OSNzZWN0aW9uLTYKPj4gKyAqLwo+PiArI2RlZmluZSBJQ0VfU1RVTl9IRUFERVJf U0laRSAyMAo+PiArCj4+ICsvKioKPj4gKyAqIFRoZSBSVFAgaGVhZGVyIGlzIDEyIGJ5dGVzIGxv bmcsIGNvbXByaXNpbmcgdGhlIFZlcnNpb24oMUIpLCBQVCgxQiksCj4+ICsgKiBTZXF1ZW5jZU51 bWJlcigyQiksIFRpbWVzdGFtcCg0QiksIGFuZCBTU1JDKDRCKS4KPj4gKyAqIFNlZSBodHRwczov L3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjMzU1MCNzZWN0aW9uLTUuMQo+PiArICovCj4+ICsj ZGVmaW5lIFdISVBfUlRQX0hFQURFUl9TSVpFIDEyCj4+ICsKPj4gKy8qKgo+PiArICogRm9yIFJU Q1AsIFBUIGlzIFsxMjgsIDIyM10gKG9yIHdpdGhvdXQgbWFya2VyIFswLCA5NV0pLiBMaXRlcmFs bHksIFJUQ1Agc3RhcnRzCj4+ICsgKiBmcm9tIDY0IG5vdCAwLCBzbyBQVCBpcyBbMTkyLCAyMjNd IChvciB3aXRob3V0IG1hcmtlciBbNjQsIDk1XSksIHNlZSAiUlRDUCBDb250cm9sCj4+ICsgKiBQ YWNrZXQgVHlwZXMgKFBUKSIgYXQKPj4gKyAqIGh0dHBzOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1l bnRzL3J0cC1wYXJhbWV0ZXJzL3J0cC1wYXJhbWV0ZXJzLnhodG1sI3J0cC1wYXJhbWV0ZXJzLTQK Pj4gKyAqCj4+ICsgKiBGb3IgUlRQLCB0aGUgUFQgaXMgWzk2LCAxMjddLCBvciBbMjI0LCAyNTVd IHdpdGggbWFya2VyLiBTZWUgIlJUUCBQYXlsb2FkIFR5cGVzIChQVCkKPj4gKyAqIGZvciBzdGFu ZGFyZCBhdWRpbyBhbmQgdmlkZW8gZW5jb2RpbmdzIiBhdAo+PiArICogaHR0cHM6Ly93d3cuaWFu YS5vcmcvYXNzaWdubWVudHMvcnRwLXBhcmFtZXRlcnMvcnRwLXBhcmFtZXRlcnMueGh0bWwjcnRw LXBhcmFtZXRlcnMtMQo+PiArICovCj4+ICsjZGVmaW5lIFdISVBfUlRDUF9QVF9TVEFSVCAxOTIK Pj4gKyNkZWZpbmUgV0hJUF9SVENQX1BUX0VORCAgIDIyMwo+PiArCj4+ICsvKioKPj4gKyAqIElu IHRoZSBjYXNlIG9mIElDRS1MSVRFLCB0aGVzZSBmaWVsZHMgYXJlIG5vdCB1c2VkOyBpbnN0ZWFk LCB0aGV5IGFyZSBkZWZpbmVkCj4+ICsgKiBhcyBjb25zdGFudCB2YWx1ZXMuCj4+ICsgKi8KPj4g KyNkZWZpbmUgV0hJUF9TRFBfU0VTU0lPTl9JRCAiNDQ4OTA0NTE0MTY5Mjc5OTM1OSIKPj4gKyNk ZWZpbmUgV0hJUF9TRFBfQ1JFQVRPUl9JUCAiMTI3LjAuMC4xIgo+PiArCj4+ICsvKiBDYWxjdWxh dGUgdGhlIGVsYXBzZWQgdGltZSBmcm9tIHN0YXJ0dGltZSB0byBlbmR0aW1lIGluIG1pbGxpc2Vj b25kcy4gKi8KPj4gKyNkZWZpbmUgRUxBUFNFRChzdGFydHRpbWUsIGVuZHRpbWUpICgoaW50KShl bmR0aW1lIC0gc3RhcnR0aW1lKSAvIDEwMDApCj4+ICsKPj4gKy8qIFNUVU4gQXR0cmlidXRlLCBj b21wcmVoZW5zaW9uLXJlcXVpcmVkIHJhbmdlICgweDAwMDAtMHg3RkZGKSAqLwo+PiArZW51bSBT VFVOQXR0ciB7Cj4+ICsgICAgU1RVTl9BVFRSX1VTRVJOQU1FICAgICAgICAgICAgICAgICAgPSAw eDAwMDYsIC8vLyBzaGFyZWQgc2VjcmV0IHJlc3BvbnNlL2JpbmQgcmVxdWVzdAo+PiArICAgIFNU VU5fQVRUUl9VU0VfQ0FORElEQVRFICAgICAgICAgICAgID0gMHgwMDI1LCAvLy8gYmluZCByZXF1 ZXN0Cj4+ICsgICAgU1RVTl9BVFRSX01FU1NBR0VfSU5URUdSSVRZICAgICAgICAgPSAweDAwMDgs IC8vLyBiaW5kIHJlcXVlc3QvcmVzcG9uc2UKPj4gKyAgICBTVFVOX0FUVFJfRklOR0VSUFJJTlQg ICAgICAgICAgICAgICA9IDB4ODAyOCwgLy8vIHJmYzUzODkKPj4gK307Cj4+ICsKPj4gK2VudW0g V0hJUFN0YXRlIHsKPj4gKyAgICBXSElQX1NUQVRFX05PTkUsCj4+ICsKPj4gKyAgICAvKiBUaGUg aW5pdGlhbCBzdGF0ZS4gKi8KPj4gKyAgICBXSElQX1NUQVRFX0lOSVQsCj4+ICsgICAgLyogVGhl IG11eGVyIGhhcyBzZW50IHRoZSBvZmZlciB0byB0aGUgcGVlci4gKi8KPj4gKyAgICBXSElQX1NU QVRFX09GRkVSLAo+PiArICAgIC8qIFRoZSBtdXhlciBoYXMgcmVjZWl2ZWQgdGhlIGFuc3dlciBm cm9tIHRoZSBwZWVyLiAqLwo+PiArICAgIFdISVBfU1RBVEVfQU5TV0VSLAo+PiArICAgIC8qKgo+ PiArICAgICAqIEFmdGVyIHBhcnNpbmcgdGhlIGFuc3dlciByZWNlaXZlZCBmcm9tIHRoZSBwZWVy LCB0aGUgbXV4ZXIgbmVnb3RpYXRlcyB0aGUgYWJpbGl0aWVzCj4+ICsgICAgICogaW4gdGhlIG9m ZmVyIHRoYXQgaXQgZ2VuZXJhdGVkLgo+PiArICAgICAqLwo+PiArICAgIFdISVBfU1RBVEVfTkVH T1RJQVRFRCwKPj4gKyAgICAvKiBUaGUgbXV4ZXIgaGFzIGNvbm5lY3RlZCB0byB0aGUgcGVlciB2 aWEgVURQLiAqLwo+PiArICAgIFdISVBfU1RBVEVfVURQX0NPTk5FQ1RFRCwKPj4gKyAgICAvKiBU aGUgbXV4ZXIgaGFzIHNlbnQgdGhlIElDRSByZXF1ZXN0IHRvIHRoZSBwZWVyLiAqLwo+PiArICAg IFdISVBfU1RBVEVfSUNFX0NPTk5FQ1RJTkcsCj4+ICsgICAgLyogVGhlIG11eGVyIGhhcyByZWNl aXZlZCB0aGUgSUNFIHJlc3BvbnNlIGZyb20gdGhlIHBlZXIuICovCj4+ICsgICAgV0hJUF9TVEFU RV9JQ0VfQ09OTkVDVEVELAo+PiArICAgIC8qIFRoZSBtdXhlciBzdGFydHMgYXR0ZW1wdGluZyB0 aGUgRFRMUyBoYW5kc2hha2UuICovCj4+ICsgICAgV0hJUF9TVEFURV9EVExTX0NPTk5FQ1RJTkcs Cj4+ICsgICAgLyogVGhlIG11eGVyIGhhcyBmaW5pc2hlZCB0aGUgRFRMUyBoYW5kc2hha2Ugd2l0 aCB0aGUgcGVlci4gKi8KPj4gKyAgICBXSElQX1NUQVRFX0RUTFNfRklOSVNIRUQsCj4+ICsgICAg LyogVGhlIG11eGVyIGhhcyBmaW5pc2hlZCB0aGUgU1JUUCBzZXR1cC4gKi8KPj4gKyAgICBXSElQ X1NUQVRFX1NSVFBfRklOSVNIRUQsCj4+ICsgICAgLyogVGhlIG11eGVyIGlzIHJlYWR5IHRvIHNl bmQvcmVjZWl2ZSBtZWRpYSBmcmFtZXMuICovCj4+ICsgICAgV0hJUF9TVEFURV9SRUFEWSwKPj4g KyAgICAvKiBUaGUgbXV4ZXIgaXMgZmFpbGVkLiAqLwo+PiArICAgIFdISVBfU1RBVEVfRkFJTEVE LAo+PiArfTsKPj4gKwo+PiArdHlwZWRlZiBzdHJ1Y3QgV0hJUENvbnRleHQgewo+PiArICAgIEFW Q2xhc3MgKmF2X2NsYXNzOwo+PiArCj4+ICsgICAgLyogVGhlIHN0YXRlIG9mIHRoZSBSVEMgY29u bmVjdGlvbi4gKi8KPj4gKyAgICBlbnVtIFdISVBTdGF0ZSBzdGF0ZTsKPj4gKyAgICAvKiBUaGUg Y2FsbGJhY2sgcmV0dXJuIHZhbHVlIGZvciBEVExTLiAqLwo+PiArICAgIGludCBkdGxzX3JldDsK Pj4gKyAgICBpbnQgZHRsc19jbG9zZWQ7Cj4+ICsKPj4gKyAgICAvKiBQYXJhbWV0ZXJzIGZvciB0 aGUgaW5wdXQgYXVkaW8gYW5kIHZpZGVvIGNvZGVjcy4gKi8KPj4gKyAgICBBVkNvZGVjUGFyYW1l dGVycyAqYXVkaW9fcGFyOwo+PiArICAgIEFWQ29kZWNQYXJhbWV0ZXJzICp2aWRlb19wYXI7Cj4+ ICsKPj4gKyAgICAvKioKPj4gKyAgICAgKiBUaGUgaDI2NF9tcDR0b2FubmV4YiBCaXRzdHJlYW0g RmlsdGVyIChCU0YpIGJ5cGFzc2VzIHRoZSBBbm5leEIgcGFja2V0Owo+PiArICAgICAqIHRoZXJl Zm9yZSwgaXQgaXMgZXNzZW50aWFsIHRvIGluc2VydCB0aGUgU1BTIGFuZCBQUFMgYmVmb3JlIGVh Y2ggSURSIGZyYW1lCj4+ICsgICAgICogaW4gc3VjaCBjYXNlcy4KPj4gKyAgICAgKi8KPj4gKyAg ICBpbnQgaDI2NF9hbm5leGJfaW5zZXJ0X3Nwc19wcHM7Cj4+ICsKPj4gKyAgICAvKiBUaGUgcmFu ZG9tIG51bWJlciBnZW5lcmF0b3IuICovCj4+ICsgICAgQVZMRkcgcm5kOwo+PiArCj4+ICsgICAg LyogVGhlIElDRSB1c2VybmFtZSBhbmQgcHdkIGZyYWdtZW50IGdlbmVyYXRlZCBieSB0aGUgbXV4 ZXIuICovCj4+ICsgICAgY2hhciBpY2VfdWZyYWdfbG9jYWxbOV07Cj4+ICsgICAgY2hhciBpY2Vf cHdkX2xvY2FsWzMzXTsKPj4gKyAgICAvKiBUaGUgU1NSQyBvZiB0aGUgYXVkaW8gYW5kIHZpZGVv IHN0cmVhbSwgZ2VuZXJhdGVkIGJ5IHRoZSBtdXhlci4gKi8KPj4gKyAgICB1aW50MzJfdCBhdWRp b19zc3JjOwo+PiArICAgIHVpbnQzMl90IHZpZGVvX3NzcmM7Cj4+ICsgICAgLyogVGhlIFBUKFBh eWxvYWQgVHlwZSkgb2Ygc3RyZWFtLCBnZW5lcmF0ZWQgYnkgdGhlIG11eGVyLiAqLwo+PiArICAg IHVpbnQ4X3QgYXVkaW9fcGF5bG9hZF90eXBlOwo+PiArICAgIHVpbnQ4X3QgdmlkZW9fcGF5bG9h ZF90eXBlOwo+PiArICAgIC8qKgo+PiArICAgICAqIFRoaXMgaXMgdGhlIFNEUCBvZmZlciBnZW5l cmF0ZWQgYnkgdGhlIG11eGVyIGJhc2VkIG9uIHRoZSBjb2RlYyBwYXJhbWV0ZXJzLAo+PiArICAg ICAqIERUTFMsIGFuZCBJQ0UgaW5mb3JtYXRpb24uCj4+ICsgICAgICovCj4+ICsgICAgY2hhciAq c2RwX29mZmVyOwo+PiArCj4+ICsgICAgLyogVGhlIElDRSB1c2VybmFtZSBhbmQgcHdkIGZyb20g cmVtb3RlIHNlcnZlci4gKi8KPj4gKyAgICBjaGFyICppY2VfdWZyYWdfcmVtb3RlOwo+PiArICAg IGNoYXIgKmljZV9wd2RfcmVtb3RlOwo+PiArICAgIC8qKgo+PiArICAgICAqIFRoaXMgcmVwcmVz ZW50cyB0aGUgSUNFIGNhbmRpZGF0ZSBwcm90b2NvbCwgcHJpb3JpdHksIGhvc3QgYW5kIHBvcnQu Cj4+ICsgICAgICogQ3VycmVudGx5LCB3ZSBvbmx5IHN1cHBvcnQgb25lIGNhbmRpZGF0ZSBhbmQg Y2hvb3NlIHRoZSBmaXJzdCBVRFAgY2FuZGlkYXRlLgo+PiArICAgICAqIEhvd2V2ZXIsIHdlIHBs YW4gdG8gc3VwcG9ydCBtdWx0aXBsZSBjYW5kaWRhdGVzIGluIHRoZSBmdXR1cmUuCj4+ICsgICAg ICovCj4+ICsgICAgY2hhciAqaWNlX3Byb3RvY29sOwo+PiArICAgIGNoYXIgKmljZV9ob3N0Owo+ PiArICAgIGludCBpY2VfcG9ydDsKPj4gKwo+PiArICAgIC8qIFRoZSBTRFAgYW5zd2VyIHJlY2Vp dmVkIGZyb20gdGhlIFdlYlJUQyBzZXJ2ZXIuICovCj4+ICsgICAgY2hhciAqc2RwX2Fuc3dlcjsK Pj4gKyAgICAvKiBUaGUgcmVzb3VyY2UgVVJMIHJldHVybmVkIGluIHRoZSBMb2NhdGlvbiBoZWFk ZXIgb2YgV0hJUCBIVFRQIHJlc3BvbnNlLiAqLwo+PiArICAgIGNoYXIgKndoaXBfcmVzb3VyY2Vf dXJsOwo+PiArCj4+ICsgICAgLyogVGhlc2UgdmFyaWFibGVzIHJlcHJlc2VudCB0aW1lc3RhbXBz IHVzZWQgZm9yIGNhbGN1bGF0aW5nIGFuZCB0cmFja2luZyB0aGUgY29zdC4gKi8KPj4gKyAgICBp bnQ2NF90IHdoaXBfc3RhcnR0aW1lOwo+PiArICAgIGludDY0X3Qgd2hpcF9pbml0X3RpbWU7Cj4+ ICsgICAgaW50NjRfdCB3aGlwX29mZmVyX3RpbWU7Cj4+ICsgICAgaW50NjRfdCB3aGlwX2Fuc3dl cl90aW1lOwo+PiArICAgIGludDY0X3Qgd2hpcF91ZHBfdGltZTsKPj4gKyAgICBpbnQ2NF90IHdo aXBfaWNlX3RpbWU7Cj4+ICsgICAgaW50NjRfdCB3aGlwX2R0bHNfdGltZTsKPj4gKyAgICBpbnQ2 NF90IHdoaXBfc3J0cF90aW1lOwo+PiArCj4+ICsgICAgLyogVGhlIGNlcnRpZmljYXRlIGFuZCBw cml2YXRlIGtleSBjb250ZW50IHVzZWQgZm9yIERUTFMgaGFuc2hha2UgKi8KPj4gKyAgICBjaGFy IGNlcnRfYnVmW01BWF9DRVJUSUZJQ0FURV9TSVpFXTsKPj4gKyAgICBjaGFyIGtleV9idWZbTUFY X0NFUlRJRklDQVRFX1NJWkVdOwo+PiArICAgIC8qIFRoZSBmaW5nZXJwcmludCBvZiBjZXJ0aWZp Y2F0ZSwgdXNlZCBpbiBTRFAgb2ZmZXIuICovCj4+ICsgICAgY2hhciAqZHRsc19maW5nZXJwcmlu dDsKPj4gKyAgICAvKioKPj4gKyAgICAgKiBUaGlzIHJlcHJlc2VudHMgdGhlIG1hdGVyaWFsIHVz ZWQgdG8gYnVpbGQgdGhlIFNSVFAgbWFzdGVyIGtleS4gSXQgaXMKPj4gKyAgICAgKiBnZW5lcmF0 ZWQgYnkgRFRMUyBhbmQgaGFzIHRoZSBmb2xsb3dpbmcgbGF5b3V0Ogo+PiArICAgICAqICAgICAg ICAgIDE2QiAgICAgICAgIDE2QiAgICAgICAgIDE0QiAgICAgICAgICAgICAxNEIKPj4gKyAgICAg KiAgICAgIGNsaWVudF9rZXkgfCBzZXJ2ZXJfa2V5IHwgY2xpZW50X3NhbHQgfCBzZXJ2ZXJfc2Fs dAo+PiArICAgICAqLwo+PiArICAgIHVpbnQ4X3QgZHRsc19zcnRwX21hdGVyaWFsc1soRFRMU19T UlRQX0tFWV9MRU4gKyBEVExTX1NSVFBfU0FMVF9MRU4pICogMl07Cj4+ICsKPj4gKyAgICBjaGFy IHNzbF9lcnJvcl9tZXNzYWdlWzI1Nl07Cj4+ICsKPj4gKyAgICAvKiBUT0RPOiBVc2UgQVZJT0Nv bnRleHQgaW5zdGVhZCBvZiBVUkxDb250ZXh0ICovCj4+ICsgICAgVVJMQ29udGV4dCAqZHRsc191 YzsKPj4gKwo+PiArICAgIC8qIFRoZSBTUlRQIHNlbmQgY29udGV4dCwgdG8gZW5jcnlwdCBvdXRn b2luZyBwYWNrZXRzLiAqLwo+PiArICAgIFNSVFBDb250ZXh0IHNydHBfYXVkaW9fc2VuZDsKPj4g KyAgICBTUlRQQ29udGV4dCBzcnRwX3ZpZGVvX3NlbmQ7Cj4+ICsgICAgU1JUUENvbnRleHQgc3J0 cF9ydGNwX3NlbmQ7Cj4+ICsgICAgLyogVGhlIFNSVFAgcmVjZWl2ZSBjb250ZXh0LCB0byBkZWNy eXB0IGluY29taW5nIHBhY2tldHMuICovCj4+ICsgICAgU1JUUENvbnRleHQgc3J0cF9yZWN2Owo+ PiArCj4+ICsgICAgLyogVGhlIFVEUCB0cmFuc3BvcnQgaXMgdXNlZCBmb3IgZGVsaXZlcmluZyBJ Q0UsIERUTFMgYW5kIFNSVFAgcGFja2V0cy4gKi8KPj4gKyAgICBVUkxDb250ZXh0ICp1ZHA7Cj4+ ICsgICAgLyogVGhlIGJ1ZmZlciBmb3IgVURQIHRyYW5zbWlzc2lvbi4gKi8KPj4gKyAgICBjaGFy IGJ1ZltNQVhfVURQX0JVRkZFUl9TSVpFXTsKPj4gKwo+PiArICAgIC8qIFRoZSB0aW1lb3V0IGlu IG1pbGxpc2Vjb25kcyBmb3IgSUNFIGFuZCBEVExTIGhhbmRzaGFrZS4gKi8KPj4gKyAgICBpbnQg aGFuZHNoYWtlX3RpbWVvdXQ7Cj4+ICsgICAgLyoqCj4+ICsgICAgICogVGhlIHNpemUgb2YgUlRQ IHBhY2tldCwgc2hvdWxkIGdlbmVyYWxseSBiZSBzZXQgdG8gTVRVLgo+PiArICAgICAqIE5vdGUg dGhhdCBwaW9uIHJlcXVpcmVzIGEgc21hbGxlciB2YWx1ZSwgZm9yIGV4YW1wbGUsIDEyMDAuCj4+ ICsgICAgICovCj4+ICsgICAgaW50IHBrdF9zaXplOwo+PiArICAgIC8qKgo+PiArICAgICAqIFRo ZSBvcHRpb25hbCBCZWFyZXIgdG9rZW4gZm9yIFdISVAgQXV0aG9yaXphdGlvbi4KPj4gKyAgICAg KiBTZWUgaHR0cHM6Ly93d3cuaWV0Zi5vcmcvYXJjaGl2ZS9pZC9kcmFmdC1pZXRmLXdpc2gtd2hp cC0wOC5odG1sI25hbWUtYXV0aGVudGljYXRpb24tYW5kLWF1dGhvcml6Cj4+ICsgICAgICovCj4+ ICsgICAgY2hhciogYXV0aG9yaXphdGlvbjsKPj4gKyAgICAvKiBUaGUgY2VydGlmaWNhdGUgYW5k IHByaXZhdGUga2V5IHVzZWQgZm9yIERUTFMgaGFuZHNoYWtlLiAqLwo+PiArICAgIGNoYXIqIGNl cnRfZmlsZTsKPj4gKyAgICBjaGFyKiBrZXlfZmlsZTsKPj4gK30gV0hJUENvbnRleHQ7Cj4+ICsK Pj4gKy8qKgo+PiArICogV2hldGhlciB0aGUgcGFja2V0IGlzIGEgRFRMUyBwYWNrZXQuCj4+ICsg Ki8KPj4gK3N0YXRpYyBpbnQgaXNfZHRsc19wYWNrZXQodWludDhfdCAqYiwgaW50IHNpemUpIHsK Pj4gKyAgICB1aW50MTZfdCB2ZXJzaW9uID0gQVZfUkIxNigmYlsxXSk7Cj4+ICsgICAgcmV0dXJu IHNpemUgPiBEVExTX1JFQ09SRF9MQVlFUl9IRUFERVJfTEVOICYmCj4+ICsgICAgICAgIGJbMF0g Pj0gRFRMU19DT05URU5UX1RZUEVfQ0hBTkdFX0NJUEhFUl9TUEVDICYmCj4+ICsgICAgICAgICh2 ZXJzaW9uID09IERUTFNfVkVSU0lPTl8xMCB8fCB2ZXJzaW9uID09IERUTFNfVkVSU0lPTl8xMik7 Cj4+ICt9Cj4+ICsKPj4gKwo+PiArLyoqCj4+ICsgKiBHZXQgb3IgR2VuZXJhdGUgYSBzZWxmLXNp Z25lZCBjZXJ0aWZpY2F0ZSBhbmQgcHJpdmF0ZSBrZXkgZm9yIERUTFMsCj4+ICsgKiBmaW5nZXJw cmludCBmb3IgU0RQCj4+ICsgKi8KPj4gK3N0YXRpYyBhdl9jb2xkIGludCBjZXJ0aWZpY2F0ZV9r ZXlfaW5pdChBVkZvcm1hdENvbnRleHQgKnMpCj4+ICt7Cj4+ICsgICAgaW50IHJldCA9IDA7Cj4+ ICsgICAgV0hJUENvbnRleHQgKndoaXAgPSBzLT5wcml2X2RhdGE7Cj4+ICsKPj4gKyAgICBpZiAo d2hpcC0+Y2VydF9maWxlICYmIHdoaXAtPmtleV9maWxlKSB7Cj4+ICsgICAgICAgIC8qIFJlYWQg dGhlIHByaXZhdGUga2V5IGFuZCBjZXJ0aWZpY2F0ZSBmcm9tIHRoZSBmaWxlLiAqLwo+PiArICAg ICAgICBpZiAoKHJldCA9IGZmX3NzbF9yZWFkX2tleV9jZXJ0KHdoaXAtPmtleV9maWxlLCB3aGlw LT5jZXJ0X2ZpbGUsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg d2hpcC0+a2V5X2J1Ziwgc2l6ZW9mKHdoaXAtPmtleV9idWYpLAo+PiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHdoaXAtPmNlcnRfYnVmLCBzaXplb2Yod2hpcC0+Y2Vy dF9idWYpLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ3aGlw LT5kdGxzX2ZpbmdlcnByaW50KSkgPCAwKSB7Cj4+ICsgICAgICAgICAgICBhdl9sb2cocywgQVZf TE9HX0VSUk9SLCAiRFRMUzogRmFpbGVkIHRvIHJlYWQgRFRMUyBjZXJ0aWZpY2F0ZSBmcm9tIGNl cnQ9JXMsIGtleT0lc1xuIiwKPj4gKyAgICAgICAgICAgICAgICB3aGlwLT5jZXJ0X2ZpbGUsIHdo aXAtPmtleV9maWxlKTsKPj4gKyAgICAgICAgICAgIHJldHVybiByZXQ7Cj4+ICsgICAgICAgIH0K Pj4gKyAgICB9IGVsc2Ugewo+PiArICAgICAgICAvKiBHZW5lcmF0ZSBhIHByaXZhdGUga2V5IHRv IGN0eC0+ZHRsc19wa2V5IGFuZCBzZWxmLXNpZ25lZCBjZXJ0aWZpY2F0ZS4gKi8KPj4gKyAgICAg ICAgaWYgKChyZXQgPSBmZl9zc2xfZ2VuX2tleV9jZXJ0KHdoaXAtPmtleV9idWYsIHNpemVvZih3 aGlwLT5rZXlfYnVmKSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHdoaXAtPmNlcnRfYnVmLCBzaXplb2Yod2hpcC0+Y2VydF9idWYpLAo+PiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJndoaXAtPmR0bHNfZmluZ2VycHJpbnQpKSA8IDAp IHsKPj4gKyAgICAgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJEVExTOiBGYWlsZWQg dG8gZ2VuZXJhdGUgRFRMUyBwcml2YXRlIGtleSBhbmQgY2VydGlmaWNhdGVcbiIpOwo+PiArICAg ICAgICAgICAgcmV0dXJuIHJldDsKPj4gKyAgICAgICAgfQo+PiArICAgIH0KPj4gKwo+PiArICAg IHJldHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4gKy8qKgo+PiArICogV2hlbiBEVExTIHN0YXRlIGNo YW5nZS4KPj4gKyAqLwo+PiArc3RhdGljIGludCBkdGxzX2NvbnRleHRfb25fc3RhdGUoQVZGb3Jt YXRDb250ZXh0ICpzLCBjb25zdCBjaGFyKiB0eXBlLCBjb25zdCBjaGFyKiBkZXNjKQo+PiArewo+ PiArICAgIGludCByZXQgPSAwOwo+PiArICAgIFdISVBDb250ZXh0ICp3aGlwID0gcy0+cHJpdl9k YXRhOwo+PiArICAgIGludCBzdGF0ZSA9IGZmX2R0bHNfc3RhdGUod2hpcC0+ZHRsc191Yyk7Cj4+ ICsKPj4gKyAgICBpZiAoc3RhdGUgPT0gRFRMU19TVEFURV9DTE9TRUQpIHsKPj4gKyAgICAgICAg d2hpcC0+ZHRsc19jbG9zZWQgPSAxOwo+PiArICAgICAgICBhdl9sb2cod2hpcCwgQVZfTE9HX1ZF UkJPU0UsICJXSElQOiBEVExTIHNlc3Npb24gY2xvc2VkLCB0eXBlPSVzLCBkZXNjPSVzLCBlbGFw c2VkPSVkbXNcbiIsCj4+ICsgICAgICAgICAgICB0eXBlID8gdHlwZSA6ICIiLCBkZXNjID8gZGVz YyA6ICIiLCBFTEFQU0VEKHdoaXAtPndoaXBfc3RhcnR0aW1lLCBhdl9nZXR0aW1lKCkpKTsKPj4g KyAgICAgICAgZ290byBlcnJvcjsKPj4gKyAgICB9Cj4+ICsKPj4gKyAgICBpZiAoc3RhdGUgPT0g RFRMU19TVEFURV9GQUlMRUQpIHsKPj4gKyAgICAgICAgd2hpcC0+c3RhdGUgPSBXSElQX1NUQVRF X0ZBSUxFRDsKPj4gKyAgICAgICAgYXZfbG9nKHdoaXAsIEFWX0xPR19FUlJPUiwgIldISVA6IERU TFMgc2Vzc2lvbiBmYWlsZWQsIHR5cGU9JXMsIGRlc2M9JXNcbiIsCj4+ICsgICAgICAgICAgICB0 eXBlID8gdHlwZSA6ICIiLCBkZXNjID8gZGVzYyA6ICIiKTsKPj4gKyAgICAgICAgd2hpcC0+ZHRs c19yZXQgPSBBVkVSUk9SKEVJTyk7Cj4+ICsgICAgICAgIGdvdG8gZXJyb3I7Cj4+ICsgICAgfQo+ PiArCj4+ICsgICAgaWYgKHN0YXRlID09IERUTFNfU1RBVEVfRklOSVNIRUQgJiYgd2hpcC0+c3Rh dGUgPCBXSElQX1NUQVRFX0RUTFNfRklOSVNIRUQpIHsKPj4gKyAgICAgICAgd2hpcC0+c3RhdGUg PSBXSElQX1NUQVRFX0RUTFNfRklOSVNIRUQ7Cj4+ICsgICAgICAgIHdoaXAtPndoaXBfZHRsc190 aW1lID0gYXZfZ2V0dGltZSgpOwo+PiArICAgICAgICBhdl9sb2cod2hpcCwgQVZfTE9HX1ZFUkJP U0UsICJXSElQOiBEVExTIGhhbmRzaGFrZSBpcyBkb25lLCBlbGFwc2VkPSVkbXNcbiIsCj4+ICsg ICAgICAgICAgICBFTEFQU0VEKHdoaXAtPndoaXBfc3RhcnR0aW1lLCBhdl9nZXR0aW1lKCkpKTsK Pj4gKyAgICAgICAgcmV0dXJuIHJldDsKPj4gKyAgICB9Cj4+ICtlcnJvcjoKPj4gKyAgICByZXR1 cm4gLTE7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBhdl9jb2xkIGludCBkdGxzX2luaXRpYWxpemUo QVZGb3JtYXRDb250ZXh0ICpzKQo+PiArewo+PiArICAgIFdISVBDb250ZXh0ICp3aGlwID0gcy0+ cHJpdl9kYXRhOwo+PiArICAgIC8qIHJldXNlIHRoZSB1ZHAgY3JlYXRlZCBieSB3aGlwICovCj4+ ICsgICAgZmZfZHRsc19zZXRfdWRwKHdoaXAtPmR0bHNfdWMsIHdoaXAtPnVkcCk7Cj4+ICsgICAg cmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gKy8qKgo+PiArICogSW5pdGlhbGl6ZSBhbmQgY2hlY2sg dGhlIG9wdGlvbnMgZm9yIHRoZSBXZWJSVEMgbXV4ZXIuCj4+ICsgKi8KPj4gK3N0YXRpYyBhdl9j b2xkIGludCBpbml0aWFsaXplKEFWRm9ybWF0Q29udGV4dCAqcykKPj4gK3sKPj4gKyAgICBpbnQg cmV0LCBpZGVhbF9wa3Rfc2l6ZSA9IDUzMjsKPj4gKyAgICBXSElQQ29udGV4dCAqd2hpcCA9IHMt PnByaXZfZGF0YTsKPj4gKyAgICB1aW50MzJfdCBzZWVkOwo+PiArCj4+ICsgICAgd2hpcC0+d2hp cF9zdGFydHRpbWUgPSBhdl9nZXR0aW1lKCk7Cj4+ICsKPj4gKyAgICByZXQgPSBjZXJ0aWZpY2F0 ZV9rZXlfaW5pdChzKTsKPj4gKyAgICBpZiAocmV0IDwgMCkgewo+PiArICAgICAgICBhdl9sb2co d2hpcCwgQVZfTE9HX0VSUk9SLCAiV0hJUDogRmFpbGVkIHRvIGluaXQgY2VydGlmaWNhdGUgYW5k IGtleVxuIik7Cj4+ICsgICAgICAgIHJldHVybiByZXQ7Cj4+ICsgICAgfQo+PiArCj4+ICsgICAg LyogSW5pdGlhbGl6ZSB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuICovCj4+ICsgICAgc2Vl ZCA9IGF2X2dldF9yYW5kb21fc2VlZCgpOwo+PiArICAgIGF2X2xmZ19pbml0KCZ3aGlwLT5ybmQs IHNlZWQpOwo+PiArCj4+ICsgICAgaWYgKHdoaXAtPnBrdF9zaXplIDwgaWRlYWxfcGt0X3NpemUp Cj4+ICsgICAgICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfV0FSTklORywgIldISVA6IHBrdF9zaXpl PSVkKDwlZCkgaXMgdG9vIHNtYWxsLCBtYXkgY2F1c2UgcGFja2V0IGxvc3NcbiIsCj4+ICsgICAg ICAgICAgICAgICB3aGlwLT5wa3Rfc2l6ZSwgaWRlYWxfcGt0X3NpemUpOwo+PiArCj4+ICsgICAg aWYgKHdoaXAtPnN0YXRlIDwgV0hJUF9TVEFURV9JTklUKQo+PiArICAgICAgICB3aGlwLT5zdGF0 ZSA9IFdISVBfU1RBVEVfSU5JVDsKPj4gKyAgICB3aGlwLT53aGlwX2luaXRfdGltZSA9IGF2X2dl dHRpbWUoKTsKPj4gKyAgICBhdl9sb2cod2hpcCwgQVZfTE9HX1ZFUkJPU0UsICJXSElQOiBJbml0 IHN0YXRlPSVkLCBoYW5kc2hha2VfdGltZW91dD0lZG1zLCBwa3Rfc2l6ZT0lZCwgc2VlZD0lZCwg ZWxhcHNlZD0lZG1zXG4iLAo+PiArICAgICAgICB3aGlwLT5zdGF0ZSwgd2hpcC0+aGFuZHNoYWtl X3RpbWVvdXQsIHdoaXAtPnBrdF9zaXplLCBzZWVkLCBFTEFQU0VEKHdoaXAtPndoaXBfc3RhcnR0 aW1lLCBhdl9nZXR0aW1lKCkpKTsKPj4gKwo+PiArICAgIHJldHVybiAwOwo+PiArfQo+PiArCj4+ ICsvKioKPj4gKyAqIFdoZW4gZHVwbGljYXRpbmcgYSBzdHJlYW0sIHRoZSBkZW11eGVyIGhhcyBh bHJlYWR5IHNldCB0aGUgZXh0cmFkYXRhLCBwcm9maWxlLCBhbmQKPj4gKyAqIGxldmVsIG9mIHRo ZSBwYXIuIEtlZXAgaW4gbWluZCB0aGF0IHRoaXMgZnVuY3Rpb24gd2lsbCBub3QgYmUgaW52b2tl ZCBzaW5jZSB0aGUKPj4gKyAqIHByb2ZpbGUgYW5kIGxldmVsIGFyZSBzZXQuCj4+ICsgKgo+PiAr ICogV2hlbiB1dGlsaXppbmcgYW4gZW5jb2Rlciwgc3VjaCBhcyBsaWJ4MjY0LCB0byBlbmNvZGUg YSBzdHJlYW0sIHRoZSBleHRyYWRhdGEgaW4KPj4gKyAqIHBhci0+ZXh0cmFkYXRhIGNvbnRhaW5z IHRoZSBTUFMsIHdoaWNoIGluY2x1ZGVzIHByb2ZpbGUgYW5kIGxldmVsIGluZm9ybWF0aW9uLgo+ PiArICogSG93ZXZlciwgdGhlIHByb2ZpbGUgYW5kIGxldmVsIG9mIHBhciByZW1haW4gdW5zcGVj aWZpZWQuIFRoZXJlZm9yZSwgaXQgaXMgbmVjZXNzYXJ5Cj4+ICsgKiB0byBleHRyYWN0IHRoZSBw cm9maWxlIGFuZCBsZXZlbCBkYXRhIGZyb20gdGhlIGV4dHJhZGF0YSBhbmQgYXNzaWduIGl0IHRv IHRoZSBwYXIncwo+PiArICogcHJvZmlsZSBhbmQgbGV2ZWwuIEtlZXAgaW4gbWluZCB0aGF0IEFW Rk1UX0dMT0JBTEhFQURFUiBtdXN0IGJlIGVuYWJsZWQ7IG90aGVyd2lzZSwKPj4gKyAqIHRoZSBl eHRyYWRhdGEgd2lsbCByZW1haW4gZW1wdHkuCj4+ICsgKi8KPj4gK3N0YXRpYyBpbnQgcGFyc2Vf cHJvZmlsZV9sZXZlbChBVkZvcm1hdENvbnRleHQgKnMsIEFWQ29kZWNQYXJhbWV0ZXJzICpwYXIp Cj4+ICt7Cj4+ICsgICAgaW50IHJldCA9IDA7Cj4+ICsgICAgY29uc3QgdWludDhfdCAqciA9IHBh ci0+ZXh0cmFkYXRhLCAqcjEsICplbmQgPSBwYXItPmV4dHJhZGF0YSArIHBhci0+ZXh0cmFkYXRh X3NpemU7Cj4+ICsgICAgSDI2NFNQUyBzZXEsICpjb25zdCBzcHMgPSAmc2VxOwo+PiArICAgIHVp bnQzMl90IHN0YXRlOwo+PiArICAgIFdISVBDb250ZXh0ICp3aGlwID0gcy0+cHJpdl9kYXRhOwo+ PiArCj4+ICsgICAgaWYgKHBhci0+Y29kZWNfaWQgIT0gQVZfQ09ERUNfSURfSDI2NCkKPj4gKyAg ICAgICAgcmV0dXJuIHJldDsKPj4gKwo+PiArICAgIGlmIChwYXItPnByb2ZpbGUgIT0gQVZfUFJP RklMRV9VTktOT1dOICYmIHBhci0+bGV2ZWwgIT0gQVZfTEVWRUxfVU5LTk9XTikKPj4gKyAgICAg ICAgcmV0dXJuIHJldDsKPj4gKwo+PiArICAgIGlmICghcGFyLT5leHRyYWRhdGEgfHwgcGFyLT5l eHRyYWRhdGFfc2l6ZSA8PSAwKSB7Cj4+ICsgICAgICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfRVJS T1IsICJXSElQOiBVbmFibGUgdG8gcGFyc2UgcHJvZmlsZSBmcm9tIGVtcHR5IGV4dHJhZGF0YT0l cCwgc2l6ZT0lZFxuIiwKPj4gKyAgICAgICAgICAgIHBhci0+ZXh0cmFkYXRhLCBwYXItPmV4dHJh ZGF0YV9zaXplKTsKPj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKPj4gKyAgICB9 Cj4+ICsKPj4gKyAgICB3aGlsZSAoMSkgewo+PiArICAgICAgICByID0gYXZwcml2X2ZpbmRfc3Rh cnRfY29kZShyLCBlbmQsICZzdGF0ZSk7Cj4+ICsgICAgICAgIGlmIChyID49IGVuZCkKPj4gKyAg ICAgICAgICAgIGJyZWFrOwo+PiArCj4+ICsgICAgICAgIHIxID0gZmZfbmFsX2ZpbmRfc3RhcnRj b2RlKHIsIGVuZCk7Cj4+ICsgICAgICAgIGlmICgoc3RhdGUgJiAweDFmKSA9PSBIMjY0X05BTF9T UFMpIHsKPj4gKyAgICAgICAgICAgIHJldCA9IGZmX2F2Y19kZWNvZGVfc3BzKHNwcywgciwgcjEg LSByKTsKPj4gKyAgICAgICAgICAgIGlmIChyZXQgPCAwKSB7Cj4+ICsgICAgICAgICAgICAgICAg YXZfbG9nKHdoaXAsIEFWX0xPR19FUlJPUiwgIldISVA6IEZhaWxlZCB0byBkZWNvZGUgU1BTLCBz dGF0ZT0leCwgc2l6ZT0lZFxuIiwKPj4gKyAgICAgICAgICAgICAgICAgICAgc3RhdGUsIChpbnQp KHIxIC0gcikpOwo+PiArICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4+ICsgICAgICAgICAg ICB9Cj4+ICsKPj4gKyAgICAgICAgICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfVkVSQk9TRSwgIldI SVA6IFBhcnNlIHByb2ZpbGU9JWQsIGxldmVsPSVkIGZyb20gU1BTXG4iLAo+PiArICAgICAgICAg ICAgICAgIHNwcy0+cHJvZmlsZV9pZGMsIHNwcy0+bGV2ZWxfaWRjKTsKPj4gKyAgICAgICAgICAg IHBhci0+cHJvZmlsZSA9IHNwcy0+cHJvZmlsZV9pZGM7Cj4+ICsgICAgICAgICAgICBwYXItPmxl dmVsID0gc3BzLT5sZXZlbF9pZGM7Cj4+ICsgICAgICAgIH0KPj4gKwo+PiArICAgICAgICByID0g cjE7Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgcmV0dXJuIHJldDsKPj4gK30KPj4gKwo+PiArLyoq Cj4+ICsgKiBQYXJzZXMgdmlkZW8gU1BTL1BQUyBmcm9tIHRoZSBleHRyYWRhdGEgb2YgY29kZWNw YXIgYW5kIGNoZWNrcyB0aGUgY29kZWMuCj4+ICsgKiBDdXJyZW50bHkgb25seSBzdXBwb3J0cyB2 aWRlbyhoMjY0KSBhbmQgYXVkaW8ob3B1cykuIE5vdGUgdGhhdCBvbmx5IGJhc2VsaW5lCj4+ICsg KiBhbmQgY29uc3RyYWluZWQgYmFzZWxpbmUgcHJvZmlsZXMgb2YgaDI2NCBhcmUgc3VwcG9ydGVk Lgo+PiArICoKPj4gKyAqIElmIHRoZSBwcm9maWxlIGlzIGxlc3MgdGhhbiAwLCB0aGUgZnVuY3Rp b24gY29uc2lkZXJzIHRoZSBwcm9maWxlIGFzIGJhc2VsaW5lLgo+PiArICogSXQgbWF5IG5lZWQg dG8gcGFyc2UgdGhlIHByb2ZpbGUgZnJvbSBTUFMvUFBTLiBUaGlzIHNpdHVhdGlvbiBvY2N1cnMg d2hlbiBpbmdlc3RpbmcKPj4gKyAqIGRlc2t0b3AgYW5kIHRyYW5zY29kaW5nLgo+PiArICoKPj4g KyAqIEBwYXJhbSBzIFBvaW50ZXIgdG8gdGhlIEFWRm9ybWF0Q29udGV4dAo+PiArICogQHJldHVy bnMgUmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWwgb3IgQVZFUlJPUl94eHggaW4gY2FzZSBvZiBhbiBl cnJvci4KPj4gKyAqCj4+ICsgKiBUT0RPOiBGSVhNRTogVGhlcmUgaXMgYW4gaXNzdWUgd2l0aCB0 aGUgdGltZXN0YW1wIG9mIE9QVVMgYXVkaW8sIGVzcGVjaWFsbHkgd2hlbgo+PiArICogIHRoZSBp bnB1dCBpcyBhbiBNUDQgZmlsZS4gVGhlIHRpbWVzdGFtcCBkZXZpYXRlcyBmcm9tIHRoZSBleHBl Y3RlZCB2YWx1ZSBvZiA5NjAsCj4+ICsgKiAgY2F1c2luZyBDaHJvbWUgdG8gcGxheSB0aGUgYXVk aW8gc3RyZWFtIHdpdGggbm9pc2UuIFRoaXMgcHJvYmxlbSBjYW4gYmUgcmVwbGljYXRlZAo+PiAr ICogIGJ5IHRyYW5zY29kaW5nIGEgc3BlY2lmaWMgZmlsZSBpbnRvIE1QNCBmb3JtYXQgYW5kIHB1 Ymxpc2hpbmcgaXQgdXNpbmcgdGhlIFdISVAKPj4gKyAqICBtdXhlci4gSG93ZXZlciwgd2hlbiBk aXJlY3RseSB0cmFuc2NvZGluZyBhbmQgcHVibGlzaGluZyB0aHJvdWdoIHRoZSBXSElQIG11eGVy LAo+PiArICogIHRoZSBpc3N1ZSBpcyBub3QgcHJlc2VudCwgYW5kIHRoZSBhdWRpbyB0aW1lc3Rh bXAgcmVtYWlucyBjb25zaXN0ZW50LiBUaGUgcm9vdAo+PiArICogIGNhdXNlIGlzIHN0aWxsIHVu a25vd24sIGFuZCB0aGlzIGNvbW1lbnQgaGFzIGJlZW4gYWRkZWQgdG8gYWRkcmVzcyB0aGlzIGlz c3VlCj4+ICsgKiAgaW4gdGhlIGZ1dHVyZS4gRnVydGhlciByZXNlYXJjaCBpcyBuZWVkZWQgdG8g cmVzb2x2ZSB0aGUgcHJvYmxlbS4KPj4gKyAqLwo+PiArc3RhdGljIGludCBwYXJzZV9jb2RlYyhB VkZvcm1hdENvbnRleHQgKnMpCj4+ICt7Cj4+ICsgICAgaW50IGksIHJldCA9IDA7Cj4+ICsgICAg V0hJUENvbnRleHQgKndoaXAgPSBzLT5wcml2X2RhdGE7Cj4+ICsKPj4gKyAgICBmb3IgKGkgPSAw OyBpIDwgcy0+bmJfc3RyZWFtczsgaSsrKSB7Cj4+ICsgICAgICAgIEFWQ29kZWNQYXJhbWV0ZXJz ICpwYXIgPSBzLT5zdHJlYW1zW2ldLT5jb2RlY3BhcjsKPj4gKyAgICAgICAgY29uc3QgQVZDb2Rl Y0Rlc2NyaXB0b3IgKmRlc2MgPSBhdmNvZGVjX2Rlc2NyaXB0b3JfZ2V0KHBhci0+Y29kZWNfaWQp Owo+PiArICAgICAgICBzd2l0Y2ggKHBhci0+Y29kZWNfdHlwZSkgewo+PiArICAgICAgICBjYXNl IEFWTUVESUFfVFlQRV9WSURFTzoKPj4gKyAgICAgICAgICAgIGlmICh3aGlwLT52aWRlb19wYXIp IHsKPj4gKyAgICAgICAgICAgICAgICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9SLCAiV0hJUDog T25seSBvbmUgdmlkZW8gc3RyZWFtIGlzIHN1cHBvcnRlZCBieSBSVENcbiIpOwo+PiArICAgICAg ICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Cj4+ICsgICAgICAgICAgICB9Cj4+ICsg ICAgICAgICAgICB3aGlwLT52aWRlb19wYXIgPSBwYXI7Cj4+ICsKPj4gKyAgICAgICAgICAgIGlm IChwYXItPmNvZGVjX2lkICE9IEFWX0NPREVDX0lEX0gyNjQpIHsKPj4gKyAgICAgICAgICAgICAg ICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9SLCAiV0hJUDogVW5zdXBwb3J0ZWQgdmlkZW8gY29k ZWMgJXMgYnkgUlRDLCBjaG9vc2UgaDI2NFxuIiwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAg ZGVzYyA/IGRlc2MtPm5hbWUgOiAidW5rbm93biIpOwo+PiArICAgICAgICAgICAgICAgIHJldHVy biBBVkVSUk9SX1BBVENIV0VMQ09NRTsKPj4gKyAgICAgICAgICAgIH0KPj4gKwo+PiArICAgICAg ICAgICAgaWYgKHBhci0+dmlkZW9fZGVsYXkgPiAwKSB7Cj4+ICsgICAgICAgICAgICAgICAgYXZf bG9nKHdoaXAsIEFWX0xPR19FUlJPUiwgIldISVA6IFVuc3VwcG9ydGVkIEIgZnJhbWVzIGJ5IFJU Q1xuIik7Cj4+ICsgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfUEFUQ0hXRUxDT01FOwo+ PiArICAgICAgICAgICAgfQo+PiArCj4+ICsgICAgICAgICAgICBpZiAoKHJldCA9IHBhcnNlX3By b2ZpbGVfbGV2ZWwocywgcGFyKSkgPCAwKSB7Cj4+ICsgICAgICAgICAgICAgICAgYXZfbG9nKHdo aXAsIEFWX0xPR19FUlJPUiwgIldISVA6IEZhaWxlZCB0byBwYXJzZSBTUFMvUFBTIGZyb20gZXh0 cmFkYXRhXG4iKTsKPj4gKyAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwo+ PiArICAgICAgICAgICAgfQo+PiArCj4+ICsgICAgICAgICAgICBpZiAocGFyLT5wcm9maWxlID09 IEFWX1BST0ZJTEVfVU5LTk9XTikgewo+PiArICAgICAgICAgICAgICAgIGF2X2xvZyh3aGlwLCBB Vl9MT0dfV0FSTklORywgIldISVA6IE5vIHByb2ZpbGUgZm91bmQgaW4gZXh0cmFkYXRhLCBjb25z aWRlciBiYXNlbGluZVxuIik7Cj4+ICsgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlO VkFMKTsKPj4gKyAgICAgICAgICAgIH0KPj4gKyAgICAgICAgICAgIGlmIChwYXItPmxldmVsID09 IEFWX0xFVkVMX1VOS05PV04pIHsKPj4gKyAgICAgICAgICAgICAgICBhdl9sb2cod2hpcCwgQVZf TE9HX1dBUk5JTkcsICJXSElQOiBObyBsZXZlbCBmb3VuZCBpbiBleHRyYWRhdGEsIGNvbnNpZGVy IDMuMVxuIik7Cj4+ICsgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKPj4g KyAgICAgICAgICAgIH0KPj4gKyAgICAgICAgICAgIGJyZWFrOwo+PiArICAgICAgICBjYXNlIEFW TUVESUFfVFlQRV9BVURJTzoKPj4gKyAgICAgICAgICAgIGlmICh3aGlwLT5hdWRpb19wYXIpIHsK Pj4gKyAgICAgICAgICAgICAgICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9SLCAiV0hJUDogT25s eSBvbmUgYXVkaW8gc3RyZWFtIGlzIHN1cHBvcnRlZCBieSBSVENcbiIpOwo+PiArICAgICAgICAg ICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Cj4+ICsgICAgICAgICAgICB9Cj4+ICsgICAg ICAgICAgICB3aGlwLT5hdWRpb19wYXIgPSBwYXI7Cj4+ICsKPj4gKyAgICAgICAgICAgIGlmIChw YXItPmNvZGVjX2lkICE9IEFWX0NPREVDX0lEX09QVVMpIHsKPj4gKyAgICAgICAgICAgICAgICBh dl9sb2cod2hpcCwgQVZfTE9HX0VSUk9SLCAiV0hJUDogVW5zdXBwb3J0ZWQgYXVkaW8gY29kZWMg JXMgYnkgUlRDLCBjaG9vc2Ugb3B1c1xuIiwKPj4gKyAgICAgICAgICAgICAgICAgICAgZGVzYyA/ IGRlc2MtPm5hbWUgOiAidW5rbm93biIpOwo+PiArICAgICAgICAgICAgICAgIHJldHVybiBBVkVS Uk9SX1BBVENIV0VMQ09NRTsKPj4gKyAgICAgICAgICAgIH0KPj4gKwo+PiArICAgICAgICAgICAg aWYgKHBhci0+Y2hfbGF5b3V0Lm5iX2NoYW5uZWxzICE9IDIpIHsKPj4gKyAgICAgICAgICAgICAg ICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9SLCAiV0hJUDogVW5zdXBwb3J0ZWQgYXVkaW8gY2hh bm5lbHMgJWQgYnkgUlRDLCBjaG9vc2Ugc3RlcmVvXG4iLAo+PiArICAgICAgICAgICAgICAgICAg ICBwYXItPmNoX2xheW91dC5uYl9jaGFubmVscyk7Cj4+ICsgICAgICAgICAgICAgICAgcmV0dXJu IEFWRVJST1JfUEFUQ0hXRUxDT01FOwo+PiArICAgICAgICAgICAgfQo+PiArCj4+ICsgICAgICAg ICAgICBpZiAocGFyLT5zYW1wbGVfcmF0ZSAhPSA0ODAwMCkgewo+PiArICAgICAgICAgICAgICAg IGF2X2xvZyh3aGlwLCBBVl9MT0dfRVJST1IsICJXSElQOiBVbnN1cHBvcnRlZCBhdWRpbyBzYW1w bGUgcmF0ZSAlZCBieSBSVEMsIGNob29zZSA0ODAwMFxuIiwgcGFyLT5zYW1wbGVfcmF0ZSk7Cj4+ ICsgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfUEFUQ0hXRUxDT01FOwo+PiArICAgICAg ICAgICAgfQo+PiArICAgICAgICAgICAgYnJlYWs7Cj4+ICsgICAgICAgIGRlZmF1bHQ6Cj4+ICsg ICAgICAgICAgICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9SLCAiV0hJUDogQ29kZWMgdHlwZSAn JXMnIGZvciBzdHJlYW0gJWQgaXMgbm90IHN1cHBvcnRlZCBieSBSVENcbiIsCj4+ICsgICAgICAg ICAgICAgICAgICAgYXZfZ2V0X21lZGlhX3R5cGVfc3RyaW5nKHBhci0+Y29kZWNfdHlwZSksIGkp Owo+PiArICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfUEFUQ0hXRUxDT01FOwo+PiArICAgICAg ICB9Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgcmV0dXJuIHJldDsKPj4gK30KPj4gKwo+PiArLyoq Cj4+ICsgKiBHZW5lcmF0ZSBTRFAgb2ZmZXIgYWNjb3JkaW5nIHRvIHRoZSBjb2RlYyBwYXJhbWV0 ZXJzLCBEVExTIGFuZCBJQ0UgaW5mb3JtYXRpb24uCj4+ICsgKgo+PiArICogTm90ZSB0aGF0IHdl IGRvbid0IHVzZSBhdl9zZHBfY3JlYXRlIHRvIGdlbmVyYXRlIFNEUCBvZmZlciBiZWNhdXNlIGl0 IGRvZXNuJ3QKPj4gKyAqIHN1cHBvcnQgRFRMUyBhbmQgSUNFIGluZm9ybWF0aW9uLgo+PiArICoK Pj4gKyAqIEByZXR1cm4gMCBpZiBPSywgQVZFUlJPUl94eHggb24gZXJyb3IKPj4gKyAqLwo+PiAr c3RhdGljIGludCBnZW5lcmF0ZV9zZHBfb2ZmZXIoQVZGb3JtYXRDb250ZXh0ICpzKQo+PiArewo+ PiArICAgIGludCByZXQgPSAwLCBwcm9maWxlLCBsZXZlbCwgcHJvZmlsZV9pb3A7Cj4+ICsgICAg Y29uc3QgY2hhciAqYWNvZGVjX25hbWUgPSBOVUxMLCAqdmNvZGVjX25hbWUgPSBOVUxMOwo+PiAr ICAgIEFWQlByaW50IGJwOwo+PiArICAgIFdISVBDb250ZXh0ICp3aGlwID0gcy0+cHJpdl9kYXRh Owo+PiArCj4+ICsgICAgLyogVG8gcHJldmVudCBhIGNyYXNoIGR1cmluZyBjbGVhbnVwLCBhbHdh eXMgaW5pdGlhbGl6ZSBpdC4gKi8KPj4gKyAgICBhdl9icHJpbnRfaW5pdCgmYnAsIDEsIE1BWF9T RFBfU0laRSk7Cj4+ICsKPj4gKyAgICBpZiAod2hpcC0+c2RwX29mZmVyKSB7Cj4+ICsgICAgICAg IGF2X2xvZyh3aGlwLCBBVl9MT0dfRVJST1IsICJXSElQOiBTRFAgb2ZmZXIgaXMgYWxyZWFkeSBz ZXRcbiIpOwo+PiArICAgICAgICByZXQgPSBBVkVSUk9SKEVJTlZBTCk7Cj4+ICsgICAgICAgIGdv dG8gZW5kOwo+PiArICAgIH0KPj4gKwo+PiArICAgIHNucHJpbnRmKHdoaXAtPmljZV91ZnJhZ19s b2NhbCwgc2l6ZW9mKHdoaXAtPmljZV91ZnJhZ19sb2NhbCksICIlMDh4IiwKPj4gKyAgICAgICAg YXZfbGZnX2dldCgmd2hpcC0+cm5kKSk7Cj4+ICsgICAgc25wcmludGYod2hpcC0+aWNlX3B3ZF9s b2NhbCwgc2l6ZW9mKHdoaXAtPmljZV9wd2RfbG9jYWwpLCAiJTA4eCUwOHglMDh4JTA4eCIsCj4+ ICsgICAgICAgIGF2X2xmZ19nZXQoJndoaXAtPnJuZCksIGF2X2xmZ19nZXQoJndoaXAtPnJuZCks IGF2X2xmZ19nZXQoJndoaXAtPnJuZCksCj4+ICsgICAgICAgIGF2X2xmZ19nZXQoJndoaXAtPnJu ZCkpOwo+PiArCj4+ICsgICAgd2hpcC0+YXVkaW9fc3NyYyA9IGF2X2xmZ19nZXQoJndoaXAtPnJu ZCk7Cj4+ICsgICAgd2hpcC0+dmlkZW9fc3NyYyA9IGF2X2xmZ19nZXQoJndoaXAtPnJuZCk7Cj4+ ICsKPj4gKyAgICB3aGlwLT5hdWRpb19wYXlsb2FkX3R5cGUgPSBXSElQX1JUUF9QQVlMT0FEX1RZ UEVfT1BVUzsKPj4gKyAgICB3aGlwLT52aWRlb19wYXlsb2FkX3R5cGUgPSBXSElQX1JUUF9QQVlM T0FEX1RZUEVfSDI2NDsKPj4gKwo+PiArICAgIGF2X2JwcmludGYoJmJwLCAiIgo+PiArICAgICAg ICAidj0wXHJcbiIKPj4gKyAgICAgICAgIm89RkZtcGVnICVzIDIgSU4gSVA0ICVzXHJcbiIKPj4g KyAgICAgICAgInM9RkZtcGVnUHVibGlzaFNlc3Npb25cclxuIgo+PiArICAgICAgICAidD0wIDBc clxuIgo+PiArICAgICAgICAiYT1ncm91cDpCVU5ETEUgMCAxXHJcbiIKPj4gKyAgICAgICAgImE9 ZXh0bWFwLWFsbG93LW1peGVkXHJcbiIKPj4gKyAgICAgICAgImE9bXNpZC1zZW1hbnRpYzogV01T XHJcbiIsCj4+ICsgICAgICAgIFdISVBfU0RQX1NFU1NJT05fSUQsCj4+ICsgICAgICAgIFdISVBf U0RQX0NSRUFUT1JfSVApOwo+PiArCj4+ICsgICAgaWYgKHdoaXAtPmF1ZGlvX3Bhcikgewo+PiAr ICAgICAgICBpZiAod2hpcC0+YXVkaW9fcGFyLT5jb2RlY19pZCA9PSBBVl9DT0RFQ19JRF9PUFVT KQo+PiArICAgICAgICAgICAgYWNvZGVjX25hbWUgPSAib3B1cyI7Cj4+ICsKPj4gKyAgICAgICAg YXZfYnByaW50ZigmYnAsICIiCj4+ICsgICAgICAgICAgICAibT1hdWRpbyA5IFVEUC9UTFMvUlRQ L1NBVlBGICV1XHJcbiIKPj4gKyAgICAgICAgICAgICJjPUlOIElQNCAwLjAuMC4wXHJcbiIKPj4g KyAgICAgICAgICAgICJhPWljZS11ZnJhZzolc1xyXG4iCj4+ICsgICAgICAgICAgICAiYT1pY2Ut cHdkOiVzXHJcbiIKPj4gKyAgICAgICAgICAgICJhPWZpbmdlcnByaW50OnNoYS0yNTYgJXNcclxu Igo+PiArICAgICAgICAgICAgImE9c2V0dXA6cGFzc2l2ZVxyXG4iCj4+ICsgICAgICAgICAgICAi YT1taWQ6MFxyXG4iCj4+ICsgICAgICAgICAgICAiYT1zZW5kb25seVxyXG4iCj4+ICsgICAgICAg ICAgICAiYT1tc2lkOkZGbXBlZyBhdWRpb1xyXG4iCj4+ICsgICAgICAgICAgICAiYT1ydGNwLW11 eFxyXG4iCj4+ICsgICAgICAgICAgICAiYT1ydHBtYXA6JXUgJXMvJWQvJWRcclxuIgo+PiArICAg ICAgICAgICAgImE9c3NyYzoldSBjbmFtZTpGRm1wZWdcclxuIgo+PiArICAgICAgICAgICAgImE9 c3NyYzoldSBtc2lkOkZGbXBlZyBhdWRpb1xyXG4iLAo+PiArICAgICAgICAgICAgd2hpcC0+YXVk aW9fcGF5bG9hZF90eXBlLAo+PiArICAgICAgICAgICAgd2hpcC0+aWNlX3VmcmFnX2xvY2FsLAo+ PiArICAgICAgICAgICAgd2hpcC0+aWNlX3B3ZF9sb2NhbCwKPj4gKyAgICAgICAgICAgIHdoaXAt PmR0bHNfZmluZ2VycHJpbnQsCj4+ICsgICAgICAgICAgICB3aGlwLT5hdWRpb19wYXlsb2FkX3R5 cGUsCj4+ICsgICAgICAgICAgICBhY29kZWNfbmFtZSwKPj4gKyAgICAgICAgICAgIHdoaXAtPmF1 ZGlvX3Bhci0+c2FtcGxlX3JhdGUsCj4+ICsgICAgICAgICAgICB3aGlwLT5hdWRpb19wYXItPmNo X2xheW91dC5uYl9jaGFubmVscywKPj4gKyAgICAgICAgICAgIHdoaXAtPmF1ZGlvX3NzcmMsCj4+ ICsgICAgICAgICAgICB3aGlwLT5hdWRpb19zc3JjKTsKPj4gKyAgICB9Cj4+ICsKPj4gKyAgICBp ZiAod2hpcC0+dmlkZW9fcGFyKSB7Cj4+ICsgICAgICAgIHByb2ZpbGVfaW9wID0gcHJvZmlsZSA9 IHdoaXAtPnZpZGVvX3Bhci0+cHJvZmlsZTsKPj4gKyAgICAgICAgbGV2ZWwgPSB3aGlwLT52aWRl b19wYXItPmxldmVsOwo+PiArICAgICAgICBpZiAod2hpcC0+dmlkZW9fcGFyLT5jb2RlY19pZCA9 PSBBVl9DT0RFQ19JRF9IMjY0KSB7Cj4+ICsgICAgICAgICAgICB2Y29kZWNfbmFtZSA9ICJIMjY0 IjsKPj4gKyAgICAgICAgICAgIHByb2ZpbGVfaW9wICY9IEFWX1BST0ZJTEVfSDI2NF9DT05TVFJB SU5FRDsKPj4gKyAgICAgICAgICAgIHByb2ZpbGUgJj0gKH5BVl9QUk9GSUxFX0gyNjRfQ09OU1RS QUlORUQpOwo+PiArICAgICAgICB9Cj4+ICsKPj4gKyAgICAgICAgYXZfYnByaW50ZigmYnAsICIi Cj4+ICsgICAgICAgICAgICAibT12aWRlbyA5IFVEUC9UTFMvUlRQL1NBVlBGICV1XHJcbiIKPj4g KyAgICAgICAgICAgICJjPUlOIElQNCAwLjAuMC4wXHJcbiIKPj4gKyAgICAgICAgICAgICJhPWlj ZS11ZnJhZzolc1xyXG4iCj4+ICsgICAgICAgICAgICAiYT1pY2UtcHdkOiVzXHJcbiIKPj4gKyAg ICAgICAgICAgICJhPWZpbmdlcnByaW50OnNoYS0yNTYgJXNcclxuIgo+PiArICAgICAgICAgICAg ImE9c2V0dXA6cGFzc2l2ZVxyXG4iCj4+ICsgICAgICAgICAgICAiYT1taWQ6MVxyXG4iCj4+ICsg ICAgICAgICAgICAiYT1zZW5kb25seVxyXG4iCj4+ICsgICAgICAgICAgICAiYT1tc2lkOkZGbXBl ZyB2aWRlb1xyXG4iCj4+ICsgICAgICAgICAgICAiYT1ydGNwLW11eFxyXG4iCj4+ICsgICAgICAg ICAgICAiYT1ydGNwLXJzaXplXHJcbiIKPj4gKyAgICAgICAgICAgICJhPXJ0cG1hcDoldSAlcy85 MDAwMFxyXG4iCj4+ICsgICAgICAgICAgICAiYT1mbXRwOiV1IGxldmVsLWFzeW1tZXRyeS1hbGxv d2VkPTE7cGFja2V0aXphdGlvbi1tb2RlPTE7cHJvZmlsZS1sZXZlbC1pZD0lMDJ4JTAyeCUwMnhc clxuIgo+PiArICAgICAgICAgICAgImE9c3NyYzoldSBjbmFtZTpGRm1wZWdcclxuIgo+PiArICAg ICAgICAgICAgImE9c3NyYzoldSBtc2lkOkZGbXBlZyB2aWRlb1xyXG4iLAo+PiArICAgICAgICAg ICAgd2hpcC0+dmlkZW9fcGF5bG9hZF90eXBlLAo+PiArICAgICAgICAgICAgd2hpcC0+aWNlX3Vm cmFnX2xvY2FsLAo+PiArICAgICAgICAgICAgd2hpcC0+aWNlX3B3ZF9sb2NhbCwKPj4gKyAgICAg ICAgICAgIHdoaXAtPmR0bHNfZmluZ2VycHJpbnQsCj4+ICsgICAgICAgICAgICB3aGlwLT52aWRl b19wYXlsb2FkX3R5cGUsCj4+ICsgICAgICAgICAgICB2Y29kZWNfbmFtZSwKPj4gKyAgICAgICAg ICAgIHdoaXAtPnZpZGVvX3BheWxvYWRfdHlwZSwKPj4gKyAgICAgICAgICAgIHByb2ZpbGUsCj4+ ICsgICAgICAgICAgICBwcm9maWxlX2lvcCwKPj4gKyAgICAgICAgICAgIGxldmVsLAo+PiArICAg ICAgICAgICAgd2hpcC0+dmlkZW9fc3NyYywKPj4gKyAgICAgICAgICAgIHdoaXAtPnZpZGVvX3Nz cmMpOwo+PiArICAgIH0KPj4gKwo+PiArICAgIGlmICghYXZfYnByaW50X2lzX2NvbXBsZXRlKCZi cCkpIHsKPj4gKyAgICAgICAgYXZfbG9nKHdoaXAsIEFWX0xPR19FUlJPUiwgIldISVA6IE9mZmVy IGV4Y2VlZCBtYXggJWQsICVzXG4iLCBNQVhfU0RQX1NJWkUsIGJwLnN0cik7Cj4+ICsgICAgICAg IHJldCA9IEFWRVJST1IoRUlPKTsKPj4gKyAgICAgICAgZ290byBlbmQ7Cj4+ICsgICAgfQo+PiAr Cj4+ICsgICAgd2hpcC0+c2RwX29mZmVyID0gYXZfc3RyZHVwKGJwLnN0cik7Cj4+ICsgICAgaWYg KCF3aGlwLT5zZHBfb2ZmZXIpIHsKPj4gKyAgICAgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOwo+ PiArICAgICAgICBnb3RvIGVuZDsKPj4gKyAgICB9Cj4+ICsKPj4gKyAgICBpZiAod2hpcC0+c3Rh dGUgPCBXSElQX1NUQVRFX09GRkVSKQo+PiArICAgICAgICB3aGlwLT5zdGF0ZSA9IFdISVBfU1RB VEVfT0ZGRVI7Cj4+ICsgICAgd2hpcC0+d2hpcF9vZmZlcl90aW1lID0gYXZfZ2V0dGltZSgpOwo+ PiArICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfVkVSQk9TRSwgIldISVA6IEdlbmVyYXRlZCBzdGF0 ZT0lZCwgb2ZmZXI6ICVzXG4iLCB3aGlwLT5zdGF0ZSwgd2hpcC0+c2RwX29mZmVyKTsKPj4gKwo+ PiArZW5kOgo+PiArICAgIGF2X2JwcmludF9maW5hbGl6ZSgmYnAsIE5VTEwpOwo+PiArICAgIHJl dHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4gKy8qKgo+PiArICogRXhjaGFuZ2UgU0RQIG9mZmVyIHdp dGggV2ViUlRDIHBlZXIgdG8gZ2V0IHRoZSBhbnN3ZXIuCj4+ICsgKgo+PiArICogQHJldHVybiAw IGlmIE9LLCBBVkVSUk9SX3h4eCBvbiBlcnJvcgo+PiArICovCj4+ICtzdGF0aWMgaW50IGV4Y2hh bmdlX3NkcChBVkZvcm1hdENvbnRleHQgKnMpCj4+ICt7Cj4+ICsgICAgaW50IHJldDsKPj4gKyAg ICBjaGFyIGJ1ZltNQVhfVVJMX1NJWkVdOwo+PiArICAgIEFWQlByaW50IGJwOwo+PiArICAgIFdI SVBDb250ZXh0ICp3aGlwID0gcy0+cHJpdl9kYXRhOwo+PiArICAgIC8qIFRoZSBVUkwgY29udGV4 dCBpcyBhbiBIVFRQIHRyYW5zcG9ydCBsYXllciBmb3IgdGhlIFdISVAgcHJvdG9jb2wuICovCj4+ ICsgICAgVVJMQ29udGV4dCAqd2hpcF91YyA9IE5VTEw7Cj4+ICsgICAgQVZEaWN0aW9uYXJ5ICpv cHRzID0gTlVMTDsKPj4gKyAgICBjaGFyICpoZXhfZGF0YSA9IE5VTEw7Cj4+ICsKPj4gKyAgICAv KiBUbyBwcmV2ZW50IGEgY3Jhc2ggZHVyaW5nIGNsZWFudXAsIGFsd2F5cyBpbml0aWFsaXplIGl0 LiAqLwo+PiArICAgIGF2X2JwcmludF9pbml0KCZicCwgMSwgTUFYX1NEUF9TSVpFKTsKPj4gKwo+ PiArICAgIGlmICghd2hpcC0+c2RwX29mZmVyIHx8ICFzdHJsZW4od2hpcC0+c2RwX29mZmVyKSkg ewo+PiArICAgICAgICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9SLCAiV0hJUDogTm8gb2ZmZXIg dG8gZXhjaGFuZ2VcbiIpOwo+PiArICAgICAgICByZXQgPSBBVkVSUk9SKEVJTlZBTCk7Cj4+ICsg ICAgICAgIGdvdG8gZW5kOwo+PiArICAgIH0KPj4gKwo+PiArICAgIHJldCA9IHNucHJpbnRmKGJ1 Ziwgc2l6ZW9mKGJ1ZiksICJDYWNoZS1Db250cm9sOiBuby1jYWNoZVxyXG5Db250ZW50LVR5cGU6 IGFwcGxpY2F0aW9uL3NkcFxyXG4iKTsKPj4gKyAgICBpZiAod2hpcC0+YXV0aG9yaXphdGlvbikK Pj4gKyAgICAgICAgcmV0ICs9IHNucHJpbnRmKGJ1ZiArIHJldCwgc2l6ZW9mKGJ1ZikgLSByZXQs ICJBdXRob3JpemF0aW9uOiBCZWFyZXIgJXNcclxuIiwgd2hpcC0+YXV0aG9yaXphdGlvbik7Cj4+ ICsgICAgaWYgKHJldCA8PSAwIHx8IHJldCA+PSBzaXplb2YoYnVmKSkgewo+PiArICAgICAgICBh dl9sb2cod2hpcCwgQVZfTE9HX0VSUk9SLCAiV0hJUDogRmFpbGVkIHRvIGdlbmVyYXRlIGhlYWRl cnMsIHNpemU9JWQsICVzXG4iLCByZXQsIGJ1Zik7Cj4+ICsgICAgICAgIHJldCA9IEFWRVJST1Io RUlOVkFMKTsKPj4gKyAgICAgICAgZ290byBlbmQ7Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgYXZf ZGljdF9zZXQoJm9wdHMsICJoZWFkZXJzIiwgYnVmLCAwKTsKPj4gKyAgICBhdl9kaWN0X3NldF9p bnQoJm9wdHMsICJjaHVua2VkX3Bvc3QiLCAwLCAwKTsKPj4gKwo+PiArICAgIGhleF9kYXRhID0g YXZfbWFsbG9jeigyICogc3RybGVuKHdoaXAtPnNkcF9vZmZlcikgKyAxKTsKPj4gKyAgICBpZiAo IWhleF9kYXRhKSB7Cj4+ICsgICAgICAgIHJldCA9IEFWRVJST1IoRU5PTUVNKTsKPj4gKyAgICAg ICAgZ290byBlbmQ7Cj4+ICsgICAgfQo+PiArICAgIGZmX2RhdGFfdG9faGV4KGhleF9kYXRhLCB3 aGlwLT5zZHBfb2ZmZXIsIHN0cmxlbih3aGlwLT5zZHBfb2ZmZXIpLCAwKTsKPj4gKyAgICBhdl9k aWN0X3NldCgmb3B0cywgInBvc3RfZGF0YSIsIGhleF9kYXRhLCAwKTsKPj4gKwo+PiArICAgIHJl dCA9IGZmdXJsX29wZW5fd2hpdGVsaXN0KCZ3aGlwX3VjLCBzLT51cmwsIEFWSU9fRkxBR19SRUFE X1dSSVRFLCAmcy0+aW50ZXJydXB0X2NhbGxiYWNrLAo+PiArICAgICAgICAmb3B0cywgcy0+cHJv dG9jb2xfd2hpdGVsaXN0LCBzLT5wcm90b2NvbF9ibGFja2xpc3QsIE5VTEwpOwo+PiArICAgIGlm IChyZXQgPCAwKSB7Cj4+ICsgICAgICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfRVJST1IsICJXSElQ OiBGYWlsZWQgdG8gcmVxdWVzdCB1cmw9JXMsIG9mZmVyOiAlc1xuIiwgcy0+dXJsLCB3aGlwLT5z ZHBfb2ZmZXIpOwo+PiArICAgICAgICBnb3RvIGVuZDsKPj4gKyAgICB9Cj4+ICsKPj4gKyAgICBp ZiAoZmZfaHR0cF9nZXRfbmV3X2xvY2F0aW9uKHdoaXBfdWMpKSB7Cj4+ICsgICAgICAgIHdoaXAt PndoaXBfcmVzb3VyY2VfdXJsID0gYXZfc3RyZHVwKGZmX2h0dHBfZ2V0X25ld19sb2NhdGlvbih3 aGlwX3VjKSk7Cj4+ICsgICAgICAgIGlmICghd2hpcC0+d2hpcF9yZXNvdXJjZV91cmwpIHsKPj4g KyAgICAgICAgICAgIHJldCA9IEFWRVJST1IoRU5PTUVNKTsKPj4gKyAgICAgICAgICAgIGdvdG8g ZW5kOwo+PiArICAgICAgICB9Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgd2hpbGUgKDEpIHsKPj4g KyAgICAgICAgcmV0ID0gZmZ1cmxfcmVhZCh3aGlwX3VjLCBidWYsIHNpemVvZihidWYpKTsKPj4g KyAgICAgICAgaWYgKHJldCA9PSBBVkVSUk9SX0VPRikgewo+PiArICAgICAgICAgICAgLyogUmVz ZXQgdGhlIGVycm9yIGJlY2F1c2Ugd2UgcmVhZCBhbGwgcmVzcG9uc2UgYXMgYW5zd2VyIHV0aWwg RU9GLiAqLwo+PiArICAgICAgICAgICAgcmV0ID0gMDsKPj4gKyAgICAgICAgICAgIGJyZWFrOwo+ PiArICAgICAgICB9Cj4+ICsgICAgICAgIGlmIChyZXQgPD0gMCkgewo+PiArICAgICAgICAgICAg YXZfbG9nKHdoaXAsIEFWX0xPR19FUlJPUiwgIldISVA6IEZhaWxlZCB0byByZWFkIHJlc3BvbnNl IGZyb20gdXJsPSVzLCBvZmZlciBpcyAlcywgYW5zd2VyIGlzICVzXG4iLAo+PiArICAgICAgICAg ICAgICAgIHMtPnVybCwgd2hpcC0+c2RwX29mZmVyLCB3aGlwLT5zZHBfYW5zd2VyKTsKPj4gKyAg ICAgICAgICAgIGdvdG8gZW5kOwo+PiArICAgICAgICB9Cj4+ICsKPj4gKyAgICAgICAgYXZfYnBy aW50ZigmYnAsICIlLipzIiwgcmV0LCBidWYpOwo+PiArICAgICAgICBpZiAoIWF2X2JwcmludF9p c19jb21wbGV0ZSgmYnApKSB7Cj4+ICsgICAgICAgICAgICBhdl9sb2cod2hpcCwgQVZfTE9HX0VS Uk9SLCAiV0hJUDogQW5zd2VyIGV4Y2VlZCBtYXggc2l6ZSAlZCwgJS4qcywgJXNcbiIsIE1BWF9T RFBfU0laRSwgcmV0LCBidWYsIGJwLnN0cik7Cj4+ICsgICAgICAgICAgICByZXQgPSBBVkVSUk9S KEVJTyk7Cj4+ICsgICAgICAgICAgICBnb3RvIGVuZDsKPj4gKyAgICAgICAgfQo+PiArICAgIH0K Pj4gKwo+PiArICAgIGlmICghYXZfc3Ryc3RhcnQoYnAuc3RyLCAidj0iLCBOVUxMKSkgewo+PiAr ICAgICAgICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9SLCAiV0hJUDogSW52YWxpZCBhbnN3ZXI6 ICVzXG4iLCBicC5zdHIpOwo+PiArICAgICAgICByZXQgPSBBVkVSUk9SKEVJTlZBTCk7Cj4+ICsg ICAgICAgIGdvdG8gZW5kOwo+PiArICAgIH0KPj4gKwo+PiArICAgIHdoaXAtPnNkcF9hbnN3ZXIg PSBhdl9zdHJkdXAoYnAuc3RyKTsKPj4gKyAgICBpZiAoIXdoaXAtPnNkcF9hbnN3ZXIpIHsKPj4g KyAgICAgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOwo+PiArICAgICAgICBnb3RvIGVuZDsKPj4g KyAgICB9Cj4+ICsKPj4gKyAgICBpZiAod2hpcC0+c3RhdGUgPCBXSElQX1NUQVRFX0FOU1dFUikK Pj4gKyAgICAgICAgd2hpcC0+c3RhdGUgPSBXSElQX1NUQVRFX0FOU1dFUjsKPj4gKyAgICBhdl9s b2cod2hpcCwgQVZfTE9HX1ZFUkJPU0UsICJXSElQOiBHb3Qgc3RhdGU9JWQsIGFuc3dlcjogJXNc biIsIHdoaXAtPnN0YXRlLCB3aGlwLT5zZHBfYW5zd2VyKTsKPj4gKwo+PiArZW5kOgo+PiArICAg IGZmdXJsX2Nsb3NlcCgmd2hpcF91Yyk7Cj4+ICsgICAgYXZfYnByaW50X2ZpbmFsaXplKCZicCwg TlVMTCk7Cj4+ICsgICAgYXZfZGljdF9mcmVlKCZvcHRzKTsKPj4gKyAgICBhdl9mcmVlcCgmaGV4 X2RhdGEpOwo+PiArICAgIHJldHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4gKy8qKgo+PiArICogUGFy c2VzIHRoZSBJQ0UgdWZyYWcsIHB3ZCwgYW5kIGNhbmRpZGF0ZXMgZnJvbSB0aGUgU0RQIGFuc3dl ci4KPj4gKyAqCj4+ICsgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZXh0cmFjdCB0aGUgSUNF IHVmcmFnLCBwd2QsIGFuZCBjYW5kaWRhdGVzIGZyb20gdGhlIFNEUCBhbnN3ZXIuCj4+ICsgKiBJ dCByZXR1cm5zIGFuIGVycm9yIGlmIGFueSBvZiB0aGVzZSBmaWVsZHMgaXMgTlVMTC4gVGhlIGZ1 bmN0aW9uIG9ubHkgdXNlcyB0aGUgZmlyc3QKPj4gKyAqIGNhbmRpZGF0ZSBpZiB0aGVyZSBhcmUg bXVsdGlwbGUgY2FuZGlkYXRlcy4gSG93ZXZlciwgc3VwcG9ydCBmb3IgbXVsdGlwbGUgY2FuZGlk YXRlcwo+PiArICogd2lsbCBiZSBhZGRlZCBpbiB0aGUgZnV0dXJlLgo+PiArICoKPj4gKyAqIEBw YXJhbSBzIFBvaW50ZXIgdG8gdGhlIEFWRm9ybWF0Q29udGV4dAo+PiArICogQHJldHVybnMgUmV0 dXJucyAwIGlmIHN1Y2Nlc3NmdWwgb3IgQVZFUlJPUl94eHggaWYgYW4gZXJyb3Igb2NjdXJzLgo+ PiArICovCj4+ICtzdGF0aWMgaW50IHBhcnNlX2Fuc3dlcihBVkZvcm1hdENvbnRleHQgKnMpCj4+ ICt7Cj4+ICsgICAgaW50IHJldCA9IDA7Cj4+ICsgICAgQVZJT0NvbnRleHQgKnBiOwo+PiArICAg IGNoYXIgbGluZVtNQVhfVVJMX1NJWkVdOwo+PiArICAgIGNvbnN0IGNoYXIgKnB0cjsKPj4gKyAg ICBpbnQgaTsKPj4gKyAgICBXSElQQ29udGV4dCAqd2hpcCA9IHMtPnByaXZfZGF0YTsKPj4gKwo+ PiArICAgIGlmICghd2hpcC0+c2RwX2Fuc3dlciB8fCAhc3RybGVuKHdoaXAtPnNkcF9hbnN3ZXIp KSB7Cj4+ICsgICAgICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfRVJST1IsICJXSElQOiBObyBhbnN3 ZXIgdG8gcGFyc2VcbiIpOwo+PiArICAgICAgICByZXQgPSBBVkVSUk9SKEVJTlZBTCk7Cj4+ICsg ICAgICAgIGdvdG8gZW5kOwo+PiArICAgIH0KPj4gKwo+PiArICAgIHBiID0gYXZpb19hbGxvY19j b250ZXh0KHdoaXAtPnNkcF9hbnN3ZXIsIHN0cmxlbih3aGlwLT5zZHBfYW5zd2VyKSwgMCwgTlVM TCwgTlVMTCwgTlVMTCwgTlVMTCk7Cj4+ICsgICAgaWYgKCFwYikKPj4gKyAgICAgICAgcmV0dXJu IEFWRVJST1IoRU5PTUVNKTsKPj4gKwo+PiArICAgIGZvciAoaSA9IDA7ICFhdmlvX2Zlb2YocGIp OyBpKyspIHsKPj4gKyAgICAgICAgZmZfZ2V0X2Nob21wX2xpbmUocGIsIGxpbmUsIHNpemVvZihs aW5lKSk7Cj4+ICsgICAgICAgIGlmIChhdl9zdHJzdGFydChsaW5lLCAiYT1pY2UtdWZyYWc6Iiwg JnB0cikgJiYgIXdoaXAtPmljZV91ZnJhZ19yZW1vdGUpIHsKPj4gKyAgICAgICAgICAgIHdoaXAt PmljZV91ZnJhZ19yZW1vdGUgPSBhdl9zdHJkdXAocHRyKTsKPj4gKyAgICAgICAgICAgIGlmICgh d2hpcC0+aWNlX3VmcmFnX3JlbW90ZSkgewo+PiArICAgICAgICAgICAgICAgIHJldCA9IEFWRVJS T1IoRU5PTUVNKTsKPj4gKyAgICAgICAgICAgICAgICBnb3RvIGVuZDsKPj4gKyAgICAgICAgICAg IH0KPj4gKyAgICAgICAgfSBlbHNlIGlmIChhdl9zdHJzdGFydChsaW5lLCAiYT1pY2UtcHdkOiIs ICZwdHIpICYmICF3aGlwLT5pY2VfcHdkX3JlbW90ZSkgewo+PiArICAgICAgICAgICAgd2hpcC0+ aWNlX3B3ZF9yZW1vdGUgPSBhdl9zdHJkdXAocHRyKTsKPj4gKyAgICAgICAgICAgIGlmICghd2hp cC0+aWNlX3B3ZF9yZW1vdGUpIHsKPj4gKyAgICAgICAgICAgICAgICByZXQgPSBBVkVSUk9SKEVO T01FTSk7Cj4+ICsgICAgICAgICAgICAgICAgZ290byBlbmQ7Cj4+ICsgICAgICAgICAgICB9Cj4+ ICsgICAgICAgIH0gZWxzZSBpZiAoYXZfc3Ryc3RhcnQobGluZSwgImE9Y2FuZGlkYXRlOiIsICZw dHIpICYmICF3aGlwLT5pY2VfcHJvdG9jb2wpIHsKPj4gKyAgICAgICAgICAgIHB0ciA9IGF2X3N0 cmlzdHIocHRyLCAidWRwIik7Cj4+ICsgICAgICAgICAgICBpZiAocHRyICYmIGF2X3N0cmlzdHIo cHRyLCAiaG9zdCIpKSB7Cj4+ICsgICAgICAgICAgICAgICAgY2hhciBwcm90b2NvbFsxN10sIGhv c3RbMTI5XTsKPj4gKyAgICAgICAgICAgICAgICBpbnQgcHJpb3JpdHksIHBvcnQ7Cj4+ICsgICAg ICAgICAgICAgICAgcmV0ID0gc3NjYW5mKHB0ciwgIiUxNnMgJWQgJTEyOHMgJWQgdHlwIGhvc3Qi LCBwcm90b2NvbCwgJnByaW9yaXR5LCBob3N0LCAmcG9ydCk7Cj4+ICsgICAgICAgICAgICAgICAg aWYgKHJldCAhPSA0KSB7Cj4+ICsgICAgICAgICAgICAgICAgICAgIGF2X2xvZyh3aGlwLCBBVl9M T0dfRVJST1IsICJXSElQOiBGYWlsZWQgJWQgdG8gcGFyc2UgbGluZSAlZCAlcyBmcm9tICVzXG4i LAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgcmV0LCBpLCBsaW5lLCB3aGlwLT5zZHBfYW5z d2VyKTsKPj4gKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gQVZFUlJPUihFSU8pOwo+PiArICAg ICAgICAgICAgICAgICAgICBnb3RvIGVuZDsKPj4gKyAgICAgICAgICAgICAgICB9Cj4+ICsKPj4g KyAgICAgICAgICAgICAgICBpZiAoYXZfc3RyY2FzZWNtcChwcm90b2NvbCwgInVkcCIpKSB7Cj4+ ICsgICAgICAgICAgICAgICAgICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfRVJST1IsICJXSElQOiBQ cm90b2NvbCAlcyBpcyBub3Qgc3VwcG9ydGVkIGJ5IFJUQywgY2hvb3NlIHVkcCwgbGluZSAlZCAl cyBvZiAlc1xuIiwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvY29sLCBpLCBsaW5l LCB3aGlwLT5zZHBfYW5zd2VyKTsKPj4gKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gQVZFUlJP UihFSU8pOwo+PiArICAgICAgICAgICAgICAgICAgICBnb3RvIGVuZDsKPj4gKyAgICAgICAgICAg ICAgICB9Cj4+ICsKPj4gKyAgICAgICAgICAgICAgICB3aGlwLT5pY2VfcHJvdG9jb2wgPSBhdl9z dHJkdXAocHJvdG9jb2wpOwo+PiArICAgICAgICAgICAgICAgIHdoaXAtPmljZV9ob3N0ID0gYXZf c3RyZHVwKGhvc3QpOwo+PiArICAgICAgICAgICAgICAgIHdoaXAtPmljZV9wb3J0ID0gcG9ydDsK Pj4gKyAgICAgICAgICAgICAgICBpZiAoIXdoaXAtPmljZV9wcm90b2NvbCB8fCAhd2hpcC0+aWNl X2hvc3QpIHsKPj4gKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOwo+ PiArICAgICAgICAgICAgICAgICAgICBnb3RvIGVuZDsKPj4gKyAgICAgICAgICAgICAgICB9Cj4+ ICsgICAgICAgICAgICB9Cj4+ICsgICAgICAgIH0KPj4gKyAgICB9Cj4+ICsKPj4gKyAgICBpZiAo IXdoaXAtPmljZV9wd2RfcmVtb3RlIHx8ICFzdHJsZW4od2hpcC0+aWNlX3B3ZF9yZW1vdGUpKSB7 Cj4+ICsgICAgICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfRVJST1IsICJXSElQOiBObyByZW1vdGUg aWNlIHB3ZCBwYXJzZWQgZnJvbSAlc1xuIiwgd2hpcC0+c2RwX2Fuc3dlcik7Cj4+ICsgICAgICAg IHJldCA9IEFWRVJST1IoRUlOVkFMKTsKPj4gKyAgICAgICAgZ290byBlbmQ7Cj4+ICsgICAgfQo+ PiArCj4+ICsgICAgaWYgKCF3aGlwLT5pY2VfdWZyYWdfcmVtb3RlIHx8ICFzdHJsZW4od2hpcC0+ aWNlX3VmcmFnX3JlbW90ZSkpIHsKPj4gKyAgICAgICAgYXZfbG9nKHdoaXAsIEFWX0xPR19FUlJP UiwgIldISVA6IE5vIHJlbW90ZSBpY2UgdWZyYWcgcGFyc2VkIGZyb20gJXNcbiIsIHdoaXAtPnNk cF9hbnN3ZXIpOwo+PiArICAgICAgICByZXQgPSBBVkVSUk9SKEVJTlZBTCk7Cj4+ICsgICAgICAg IGdvdG8gZW5kOwo+PiArICAgIH0KPj4gKwo+PiArICAgIGlmICghd2hpcC0+aWNlX3Byb3RvY29s IHx8ICF3aGlwLT5pY2VfaG9zdCB8fCAhd2hpcC0+aWNlX3BvcnQpIHsKPj4gKyAgICAgICAgYXZf bG9nKHdoaXAsIEFWX0xPR19FUlJPUiwgIldISVA6IE5vIGljZSBjYW5kaWRhdGUgcGFyc2VkIGZy b20gJXNcbiIsIHdoaXAtPnNkcF9hbnN3ZXIpOwo+PiArICAgICAgICByZXQgPSBBVkVSUk9SKEVJ TlZBTCk7Cj4+ICsgICAgICAgIGdvdG8gZW5kOwo+PiArICAgIH0KPj4gKwo+PiArICAgIGlmICh3 aGlwLT5zdGF0ZSA8IFdISVBfU1RBVEVfTkVHT1RJQVRFRCkKPj4gKyAgICAgICAgd2hpcC0+c3Rh dGUgPSBXSElQX1NUQVRFX05FR09USUFURUQ7Cj4+ICsgICAgd2hpcC0+d2hpcF9hbnN3ZXJfdGlt ZSA9IGF2X2dldHRpbWUoKTsKPj4gKyAgICBhdl9sb2cod2hpcCwgQVZfTE9HX1ZFUkJPU0UsICJX SElQOiBTRFAgc3RhdGU9JWQsIG9mZmVyPSVsdUIsIGFuc3dlcj0lbHVCLCB1ZnJhZz0lcywgcHdk PSVsdUIsIHRyYW5zcG9ydD0lczovLyVzOiVkLCBlbGFwc2VkPSVkbXNcbiIsCj4+ICsgICAgICAg IHdoaXAtPnN0YXRlLCBzdHJsZW4od2hpcC0+c2RwX29mZmVyKSwgc3RybGVuKHdoaXAtPnNkcF9h bnN3ZXIpLCB3aGlwLT5pY2VfdWZyYWdfcmVtb3RlLCBzdHJsZW4od2hpcC0+aWNlX3B3ZF9yZW1v dGUpLAo+PiArICAgICAgICB3aGlwLT5pY2VfcHJvdG9jb2wsIHdoaXAtPmljZV9ob3N0LCB3aGlw LT5pY2VfcG9ydCwgRUxBUFNFRCh3aGlwLT53aGlwX3N0YXJ0dGltZSwgYXZfZ2V0dGltZSgpKSk7 Cj4+ICsKPj4gK2VuZDoKPj4gKyAgICBhdmlvX2NvbnRleHRfZnJlZSgmcGIpOwo+PiArICAgIHJl dHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4gKy8qKgo+PiArICogQ3JlYXRlcyBhbmQgbWFyc2hhbHMg YW4gSUNFIGJpbmRpbmcgcmVxdWVzdCBwYWNrZXQuCj4+ICsgKgo+PiArICogVGhpcyBmdW5jdGlv biBjcmVhdGVzIGFuZCBtYXJzaGFscyBhbiBJQ0UgYmluZGluZyByZXF1ZXN0IHBhY2tldC4gVGhl IGZ1bmN0aW9uIG9ubHkKPj4gKyAqIGdlbmVyYXRlcyB0aGUgdXNlcm5hbWUgYXR0cmlidXRlIGFu ZCBkb2VzIG5vdCBpbmNsdWRlIGdvb2ctbmV0d29yay1pbmZvLCBpY2UtY29udHJvbGxpbmcsCj4+ ICsgKiB1c2UtY2FuZGlkYXRlLCBhbmQgcHJpb3JpdHkuIEhvd2V2ZXIsIHNvbWUgb2YgdGhlc2Ug YXR0cmlidXRlcyBtYXkgYmUgYWRkZWQgaW4gdGhlIGZ1dHVyZS4KPj4gKyAqCj4+ICsgKiBAcGFy YW0gcyBQb2ludGVyIHRvIHRoZSBBVkZvcm1hdENvbnRleHQKPj4gKyAqIEBwYXJhbSBidWYgUG9p bnRlciB0byBtZW1vcnkgYnVmZmVyIHRvIHN0b3JlIHRoZSByZXF1ZXN0IHBhY2tldAo+PiArICog QHBhcmFtIGJ1Zl9zaXplIFNpemUgb2YgdGhlIG1lbW9yeSBidWZmZXIKPj4gKyAqIEBwYXJhbSBy ZXF1ZXN0X3NpemUgUG9pbnRlciB0byBhbiBpbnRlZ2VyIHRoYXQgcmVjZWl2ZXMgdGhlIHNpemUg b2YgdGhlIHJlcXVlc3QgcGFja2V0Cj4+ICsgKiBAcmV0dXJuIFJldHVybnMgMCBpZiBzdWNjZXNz ZnVsIG9yIEFWRVJST1JfeHh4IGlmIGFuIGVycm9yIG9jY3Vycy4KPj4gKyAqLwo+PiArc3RhdGlj IGludCBpY2VfY3JlYXRlX3JlcXVlc3QoQVZGb3JtYXRDb250ZXh0ICpzLCB1aW50OF90ICpidWYs IGludCBidWZfc2l6ZSwgaW50ICpyZXF1ZXN0X3NpemUpCj4+ICt7Cj4+ICsgICAgaW50IHJldCwg c2l6ZSwgY3JjMzI7Cj4+ICsgICAgY2hhciB1c2VybmFtZVsxMjhdOwo+PiArICAgIEFWSU9Db250 ZXh0ICpwYiA9IE5VTEw7Cj4+ICsgICAgQVZITUFDICpobWFjID0gTlVMTDsKPj4gKyAgICBXSElQ Q29udGV4dCAqd2hpcCA9IHMtPnByaXZfZGF0YTsKPj4gKwo+PiArICAgIHBiID0gYXZpb19hbGxv Y19jb250ZXh0KGJ1ZiwgYnVmX3NpemUsIDEsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOwo+PiAr ICAgIGlmICghcGIpCj4+ICsgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4+ICsKPj4g KyAgICBobWFjID0gYXZfaG1hY19hbGxvYyhBVl9ITUFDX1NIQTEpOwo+PiArICAgIGlmICghaG1h Yykgewo+PiArICAgICAgICByZXQgPSBBVkVSUk9SKEVOT01FTSk7Cj4+ICsgICAgICAgIGdvdG8g ZW5kOwo+PiArICAgIH0KPj4gKwo+PiArICAgIC8qIFdyaXRlIDIwIGJ5dGVzIGhlYWRlciAqLwo+ PiArICAgIGF2aW9fd2IxNihwYiwgMHgwMDAxKTsgLyogU1RVTiBiaW5kaW5nIHJlcXVlc3QgKi8K Pj4gKyAgICBhdmlvX3diMTYocGIsIDApOyAgICAgIC8qIGxlbmd0aCAqLwo+PiArICAgIGF2aW9f d2IzMihwYiwgU1RVTl9NQUdJQ19DT09LSUUpOyAvKiBtYWdpYyBjb29raWUgKi8KPj4gKyAgICBh dmlvX3diMzIocGIsIGF2X2xmZ19nZXQoJndoaXAtPnJuZCkpOyAvKiB0cmFuc2FjdGlvbiBJRCAq Lwo+PiArICAgIGF2aW9fd2IzMihwYiwgYXZfbGZnX2dldCgmd2hpcC0+cm5kKSk7IC8qIHRyYW5z YWN0aW9uIElEICovCj4+ICsgICAgYXZpb193YjMyKHBiLCBhdl9sZmdfZ2V0KCZ3aGlwLT5ybmQp KTsgLyogdHJhbnNhY3Rpb24gSUQgKi8KPj4gKwo+PiArICAgIC8qIFRoZSB1c2VybmFtZSBpcyB0 aGUgY29uY2F0ZW5hdGlvbiBvZiB0aGUgdHdvIElDRSB1ZnJhZyAqLwo+PiArICAgIHJldCA9IHNu cHJpbnRmKHVzZXJuYW1lLCBzaXplb2YodXNlcm5hbWUpLCAiJXM6JXMiLCB3aGlwLT5pY2VfdWZy YWdfcmVtb3RlLCB3aGlwLT5pY2VfdWZyYWdfbG9jYWwpOwo+PiArICAgIGlmIChyZXQgPD0gMCB8 fCByZXQgPj0gc2l6ZW9mKHVzZXJuYW1lKSkgewo+PiArICAgICAgICBhdl9sb2cod2hpcCwgQVZf TE9HX0VSUk9SLCAiV0hJUDogRmFpbGVkIHRvIGJ1aWxkIHVzZXJuYW1lICVzOiVzLCBtYXg9JWx1 LCByZXQ9JWRcbiIsCj4+ICsgICAgICAgICAgICB3aGlwLT5pY2VfdWZyYWdfcmVtb3RlLCB3aGlw LT5pY2VfdWZyYWdfbG9jYWwsIHNpemVvZih1c2VybmFtZSksIHJldCk7Cj4+ICsgICAgICAgIHJl dCA9IEFWRVJST1IoRUlPKTsKPj4gKyAgICAgICAgZ290byBlbmQ7Cj4+ICsgICAgfQo+PiArCj4+ ICsgICAgLyogV3JpdGUgdGhlIHVzZXJuYW1lIGF0dHJpYnV0ZSAqLwo+PiArICAgIGF2aW9fd2Ix NihwYiwgU1RVTl9BVFRSX1VTRVJOQU1FKTsgLyogYXR0cmlidXRlIHR5cGUgdXNlcm5hbWUgKi8K Pj4gKyAgICBhdmlvX3diMTYocGIsIHJldCk7IC8qIHNpemUgb2YgdXNlcm5hbWUgKi8KPj4gKyAg ICBhdmlvX3dyaXRlKHBiLCB1c2VybmFtZSwgcmV0KTsgLyogYnl0ZXMgb2YgdXNlcm5hbWUgKi8K Pj4gKyAgICBmZmlvX2ZpbGwocGIsIDAsICg0IC0gKHJldCAlIDQpKSAlIDQpOyAvKiBwYWRkaW5n ICovCj4+ICsKPj4gKyAgICAvKiBXcml0ZSB0aGUgdXNlLWNhbmRpZGF0ZSBhdHRyaWJ1dGUgKi8K Pj4gKyAgICBhdmlvX3diMTYocGIsIFNUVU5fQVRUUl9VU0VfQ0FORElEQVRFKTsgLyogYXR0cmli dXRlIHR5cGUgdXNlLWNhbmRpZGF0ZSAqLwo+PiArICAgIGF2aW9fd2IxNihwYiwgMCk7IC8qIHNp emUgb2YgdXNlLWNhbmRpZGF0ZSAqLwo+PiArCj4+ICsgICAgLyogQnVpbGQgYW5kIHVwZGF0ZSBt ZXNzYWdlIGludGVncml0eSAqLwo+PiArICAgIGF2aW9fd2IxNihwYiwgU1RVTl9BVFRSX01FU1NB R0VfSU5URUdSSVRZKTsgLyogYXR0cmlidXRlIHR5cGUgbWVzc2FnZSBpbnRlZ3JpdHkgKi8KPj4g KyAgICBhdmlvX3diMTYocGIsIDIwKTsgLyogc2l6ZSBvZiBtZXNzYWdlIGludGVncml0eSAqLwo+ PiArICAgIGZmaW9fZmlsbChwYiwgMCwgMjApOyAvKiBmaWxsIHdpdGggemVybyB0byBkaXJlY3Rs eSB3cml0ZSBhbmQgc2tpcCBpdCAqLwo+PiArICAgIHNpemUgPSBhdmlvX3RlbGwocGIpOwo+PiAr ICAgIGJ1ZlsyXSA9IChzaXplIC0gMjApID4+IDg7Cj4+ICsgICAgYnVmWzNdID0gKHNpemUgLSAy MCkgJiAweEZGOwo+PiArICAgIGF2X2htYWNfaW5pdChobWFjLCB3aGlwLT5pY2VfcHdkX3JlbW90 ZSwgc3RybGVuKHdoaXAtPmljZV9wd2RfcmVtb3RlKSk7Cj4+ICsgICAgYXZfaG1hY191cGRhdGUo aG1hYywgYnVmLCBzaXplIC0gMjQpOwo+PiArICAgIGF2X2htYWNfZmluYWwoaG1hYywgYnVmICsg c2l6ZSAtIDIwLCAyMCk7Cj4+ICsKPj4gKyAgICAvKiBXcml0ZSB0aGUgZmluZ2VycHJpbnQgYXR0 cmlidXRlICovCj4+ICsgICAgYXZpb193YjE2KHBiLCBTVFVOX0FUVFJfRklOR0VSUFJJTlQpOyAv KiBhdHRyaWJ1dGUgdHlwZSBmaW5nZXJwcmludCAqLwo+PiArICAgIGF2aW9fd2IxNihwYiwgNCk7 IC8qIHNpemUgb2YgZmluZ2VycHJpbnQgKi8KPj4gKyAgICBmZmlvX2ZpbGwocGIsIDAsIDQpOyAv KiBmaWxsIHdpdGggemVybyB0byBkaXJlY3RseSB3cml0ZSBhbmQgc2tpcCBpdCAqLwo+PiArICAg IHNpemUgPSBhdmlvX3RlbGwocGIpOwo+PiArICAgIGJ1ZlsyXSA9IChzaXplIC0gMjApID4+IDg7 Cj4+ICsgICAgYnVmWzNdID0gKHNpemUgLSAyMCkgJiAweEZGOwo+PiArICAgIC8qIFJlZmVyIHRv IHRoZSBhdl9oYXNoX2FsbG9jKCJDUkMzMiIpLCBhdl9oYXNoX2luaXQgYW5kIGF2X2hhc2hfZmlu YWwgKi8KPj4gKyAgICBjcmMzMiA9IGF2X2NyYyhhdl9jcmNfZ2V0X3RhYmxlKEFWX0NSQ18zMl9J RUVFX0xFKSwgMHhGRkZGRkZGRiwgYnVmLCBzaXplIC0gOCkgXiAweEZGRkZGRkZGOwo+PiArICAg IGF2aW9fc2tpcChwYiwgLTQpOwo+PiArICAgIGF2aW9fd2IzMihwYiwgY3JjMzIgXiAweDUzNTQ1 NTRFKTsgLyogeG9yIHdpdGggIlNUVU4iICovCj4+ICsKPj4gKyAgICAqcmVxdWVzdF9zaXplID0g c2l6ZTsKPj4gKwo+PiArZW5kOgo+PiArICAgIGF2aW9fY29udGV4dF9mcmVlKCZwYik7Cj4+ICsg ICAgYXZfaG1hY19mcmVlKGhtYWMpOwo+PiArICAgIHJldHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4g Ky8qKgo+PiArICogQ3JlYXRlIGFuIElDRSBiaW5kaW5nIHJlc3BvbnNlLgo+PiArICoKPj4gKyAq IFRoaXMgZnVuY3Rpb24gZ2VuZXJhdGVzIGFuIElDRSBiaW5kaW5nIHJlc3BvbnNlIGFuZCB3cml0 ZXMgaXQgdG8gdGhlIHByb3ZpZGVkCj4+ICsgKiBidWZmZXIuIFRoZSByZXNwb25zZSBpcyBzaWdu ZWQgdXNpbmcgdGhlIGxvY2FsIHBhc3N3b3JkIGZvciBtZXNzYWdlIGludGVncml0eS4KPj4gKyAq Cj4+ICsgKiBAcGFyYW0gcyBQb2ludGVyIHRvIHRoZSBBVkZvcm1hdENvbnRleHQgc3RydWN0dXJl Lgo+PiArICogQHBhcmFtIHRpZCBQb2ludGVyIHRvIHRoZSB0cmFuc2FjdGlvbiBJRCBvZiB0aGUg YmluZGluZyByZXF1ZXN0LiBUaGUgdGlkX3NpemUgc2hvdWxkIGJlIDEyLgo+PiArICogQHBhcmFt IHRpZF9zaXplIFRoZSBzaXplIG9mIHRoZSB0cmFuc2FjdGlvbiBJRCwgc2hvdWxkIGJlIDEyLgo+ PiArICogQHBhcmFtIGJ1ZiBQb2ludGVyIHRvIHRoZSBidWZmZXIgd2hlcmUgdGhlIHJlc3BvbnNl IHdpbGwgYmUgd3JpdHRlbi4KPj4gKyAqIEBwYXJhbSBidWZfc2l6ZSBUaGUgc2l6ZSBvZiB0aGUg YnVmZmVyIHByb3ZpZGVkIGZvciB0aGUgcmVzcG9uc2UuCj4+ICsgKiBAcGFyYW0gcmVzcG9uc2Vf c2l6ZSBQb2ludGVyIHRvIGFuIGludGVnZXIgdGhhdCB3aWxsIHN0b3JlIHRoZSBzaXplIG9mIHRo ZSBnZW5lcmF0ZWQgcmVzcG9uc2UuCj4+ICsgKiBAcmV0dXJuIFJldHVybnMgMCBpZiBzdWNjZXNz ZnVsIG9yIEFWRVJST1JfeHh4IGlmIGFuIGVycm9yIG9jY3Vycy4KPj4gKyAqLwo+PiArc3RhdGlj IGludCBpY2VfY3JlYXRlX3Jlc3BvbnNlKEFWRm9ybWF0Q29udGV4dCAqcywgY2hhciAqdGlkLCBp bnQgdGlkX3NpemUsIHVpbnQ4X3QgKmJ1ZiwgaW50IGJ1Zl9zaXplLCBpbnQgKnJlc3BvbnNlX3Np emUpCj4+ICt7Cj4+ICsgICAgaW50IHJldCA9IDAsIHNpemUsIGNyYzMyOwo+PiArICAgIEFWSU9D b250ZXh0ICpwYiA9IE5VTEw7Cj4+ICsgICAgQVZITUFDICpobWFjID0gTlVMTDsKPj4gKyAgICBX SElQQ29udGV4dCAqd2hpcCA9IHMtPnByaXZfZGF0YTsKPj4gKwo+PiArICAgIGlmICh0aWRfc2l6 ZSAhPSAxMikgewo+PiArICAgICAgICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9SLCAiV0hJUDog SW52YWxpZCB0cmFuc2FjdGlvbiBJRCBzaXplLiBFeHBlY3RlZCAxMiwgZ290ICVkXG4iLCB0aWRf c2l6ZSk7Cj4+ICsgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Cj4+ICsgICAgfQo+PiAr Cj4+ICsgICAgcGIgPSBhdmlvX2FsbG9jX2NvbnRleHQoYnVmLCBidWZfc2l6ZSwgMSwgTlVMTCwg TlVMTCwgTlVMTCwgTlVMTCk7Cj4+ICsgICAgaWYgKCFwYikKPj4gKyAgICAgICAgcmV0dXJuIEFW RVJST1IoRU5PTUVNKTsKPj4gKwo+PiArICAgIGhtYWMgPSBhdl9obWFjX2FsbG9jKEFWX0hNQUNf U0hBMSk7Cj4+ICsgICAgaWYgKCFobWFjKSB7Cj4+ICsgICAgICAgIHJldCA9IEFWRVJST1IoRU5P TUVNKTsKPj4gKyAgICAgICAgZ290byBlbmQ7Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgLyogV3Jp dGUgMjAgYnl0ZXMgaGVhZGVyICovCj4+ICsgICAgYXZpb193YjE2KHBiLCAweDAxMDEpOyAvKiBT VFVOIGJpbmRpbmcgcmVzcG9uc2UgKi8KPj4gKyAgICBhdmlvX3diMTYocGIsIDApOyAgICAgIC8q IGxlbmd0aCAqLwo+PiArICAgIGF2aW9fd2IzMihwYiwgU1RVTl9NQUdJQ19DT09LSUUpOyAvKiBt YWdpYyBjb29raWUgKi8KPj4gKyAgICBhdmlvX3dyaXRlKHBiLCB0aWQsIHRpZF9zaXplKTsgLyog dHJhbnNhY3Rpb24gSUQgKi8KPj4gKwo+PiArICAgIC8qIEJ1aWxkIGFuZCB1cGRhdGUgbWVzc2Fn ZSBpbnRlZ3JpdHkgKi8KPj4gKyAgICBhdmlvX3diMTYocGIsIFNUVU5fQVRUUl9NRVNTQUdFX0lO VEVHUklUWSk7IC8qIGF0dHJpYnV0ZSB0eXBlIG1lc3NhZ2UgaW50ZWdyaXR5ICovCj4+ICsgICAg YXZpb193YjE2KHBiLCAyMCk7IC8qIHNpemUgb2YgbWVzc2FnZSBpbnRlZ3JpdHkgKi8KPj4gKyAg ICBmZmlvX2ZpbGwocGIsIDAsIDIwKTsgLyogZmlsbCB3aXRoIHplcm8gdG8gZGlyZWN0bHkgd3Jp dGUgYW5kIHNraXAgaXQgKi8KPj4gKyAgICBzaXplID0gYXZpb190ZWxsKHBiKTsKPj4gKyAgICBi dWZbMl0gPSAoc2l6ZSAtIDIwKSA+PiA4Owo+PiArICAgIGJ1ZlszXSA9IChzaXplIC0gMjApICYg MHhGRjsKPj4gKyAgICBhdl9obWFjX2luaXQoaG1hYywgd2hpcC0+aWNlX3B3ZF9sb2NhbCwgc3Ry bGVuKHdoaXAtPmljZV9wd2RfbG9jYWwpKTsKPj4gKyAgICBhdl9obWFjX3VwZGF0ZShobWFjLCBi dWYsIHNpemUgLSAyNCk7Cj4+ICsgICAgYXZfaG1hY19maW5hbChobWFjLCBidWYgKyBzaXplIC0g MjAsIDIwKTsKPj4gKwo+PiArICAgIC8qIFdyaXRlIHRoZSBmaW5nZXJwcmludCBhdHRyaWJ1dGUg Ki8KPj4gKyAgICBhdmlvX3diMTYocGIsIFNUVU5fQVRUUl9GSU5HRVJQUklOVCk7IC8qIGF0dHJp YnV0ZSB0eXBlIGZpbmdlcnByaW50ICovCj4+ICsgICAgYXZpb193YjE2KHBiLCA0KTsgLyogc2l6 ZSBvZiBmaW5nZXJwcmludCAqLwo+PiArICAgIGZmaW9fZmlsbChwYiwgMCwgNCk7IC8qIGZpbGwg d2l0aCB6ZXJvIHRvIGRpcmVjdGx5IHdyaXRlIGFuZCBza2lwIGl0ICovCj4+ICsgICAgc2l6ZSA9 IGF2aW9fdGVsbChwYik7Cj4+ICsgICAgYnVmWzJdID0gKHNpemUgLSAyMCkgPj4gODsKPj4gKyAg ICBidWZbM10gPSAoc2l6ZSAtIDIwKSAmIDB4RkY7Cj4+ICsgICAgLyogUmVmZXIgdG8gdGhlIGF2 X2hhc2hfYWxsb2MoIkNSQzMyIiksIGF2X2hhc2hfaW5pdCBhbmQgYXZfaGFzaF9maW5hbCAqLwo+ PiArICAgIGNyYzMyID0gYXZfY3JjKGF2X2NyY19nZXRfdGFibGUoQVZfQ1JDXzMyX0lFRUVfTEUp LCAweEZGRkZGRkZGLCBidWYsIHNpemUgLSA4KSBeIDB4RkZGRkZGRkY7Cj4+ICsgICAgYXZpb19z a2lwKHBiLCAtNCk7Cj4+ICsgICAgYXZpb193YjMyKHBiLCBjcmMzMiBeIDB4NTM1NDU1NEUpOyAv KiB4b3Igd2l0aCAiU1RVTiIgKi8KPj4gKwo+PiArICAgICpyZXNwb25zZV9zaXplID0gc2l6ZTsK Pj4gKwo+PiArZW5kOgo+PiArICAgIGF2aW9fY29udGV4dF9mcmVlKCZwYik7Cj4+ICsgICAgYXZf aG1hY19mcmVlKGhtYWMpOwo+PiArICAgIHJldHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4gKy8qKgo+ PiArICogQSBCaW5kaW5nIHJlcXVlc3QgaGFzIGNsYXNzPTBiMDAgKHJlcXVlc3QpIGFuZCBtZXRo b2Q9MGIwMDAwMDAwMDAwMDEgKEJpbmRpbmcpCj4+ICsgKiBhbmQgaXMgZW5jb2RlZCBpbnRvIHRo ZSBmaXJzdCAxNiBiaXRzIGFzIDB4MDAwMS4KPj4gKyAqIFNlZSBodHRwczovL2RhdGF0cmFja2Vy LmlldGYub3JnL2RvYy9odG1sL3JmYzUzODkjc2VjdGlvbi02Cj4+ICsgKi8KPj4gK3N0YXRpYyBp bnQgaWNlX2lzX2JpbmRpbmdfcmVxdWVzdCh1aW50OF90ICpiLCBpbnQgc2l6ZSkKPj4gK3sKPj4g KyAgICByZXR1cm4gc2l6ZSA+PSBJQ0VfU1RVTl9IRUFERVJfU0laRSAmJiBBVl9SQjE2KCZiWzBd KSA9PSAweDAwMDE7Cj4+ICt9Cj4+ICsKPj4gKy8qKgo+PiArICogQSBCaW5kaW5nIHJlc3BvbnNl IGhhcyBjbGFzcz0wYjEwIChzdWNjZXNzIHJlc3BvbnNlKSBhbmQgbWV0aG9kPTBiMDAwMDAwMDAw MDAxLAo+PiArICogYW5kIGlzIGVuY29kZWQgaW50byB0aGUgZmlyc3QgMTYgYml0cyBhcyAweDAx MDEuCj4+ICsgKi8KPj4gK3N0YXRpYyBpbnQgaWNlX2lzX2JpbmRpbmdfcmVzcG9uc2UodWludDhf dCAqYiwgaW50IHNpemUpCj4+ICt7Cj4+ICsgICAgcmV0dXJuIHNpemUgPj0gSUNFX1NUVU5fSEVB REVSX1NJWkUgJiYgQVZfUkIxNigmYlswXSkgPT0gMHgwMTAxOwo+PiArfQo+PiArCj4+ICsvKioK Pj4gKyAqIEluIFJUUCBwYWNrZXRzLCB0aGUgZmlyc3QgYnl0ZSBpcyByZXByZXNlbnRlZCBhcyAw YjEweHh4eHh4LCB3aGVyZSB0aGUgaW5pdGlhbAo+PiArICogdHdvIGJpdHMgKDBiMTApIGluZGlj YXRlIHRoZSBSVFAgdmVyc2lvbiwKPj4gKyAqIHNlZSBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9y Zy9yZmMvcmZjMzU1MCNzZWN0aW9uLTUuMQo+PiArICogVGhlIFJUQ1AgcGFja2V0IGhlYWRlciBp cyBzaW1pbGFyIHRvIFJUUCwKPj4gKyAqIHNlZSBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9y ZmMvcmZjMzU1MCNzZWN0aW9uLTYuNC4xCj4+ICsgKi8KPj4gK3N0YXRpYyBpbnQgbWVkaWFfaXNf cnRwX3J0Y3AodWludDhfdCAqYiwgaW50IHNpemUpCj4+ICt7Cj4+ICsgICAgcmV0dXJuIHNpemUg Pj0gV0hJUF9SVFBfSEVBREVSX1NJWkUgJiYgKGJbMF0gJiAweEMwKSA9PSAweDgwOwo+PiArfQo+ PiArCj4+ICsvKiBXaGV0aGVyIHRoZSBwYWNrZXQgaXMgUlRDUC4gKi8KPj4gK3N0YXRpYyBpbnQg bWVkaWFfaXNfcnRjcCh1aW50OF90ICpiLCBpbnQgc2l6ZSkKPj4gK3sKPj4gKyAgICByZXR1cm4g c2l6ZSA+PSBXSElQX1JUUF9IRUFERVJfU0laRSAmJiBiWzFdID49IFdISVBfUlRDUF9QVF9TVEFS VCAmJiBiWzFdIDw9IFdISVBfUlRDUF9QVF9FTkQ7Cj4+ICt9Cj4+ICsKPj4gKy8qKgo+PiArICog VGhpcyBmdW5jdGlvbiBoYW5kbGVzIGluY29taW5nIGJpbmRpbmcgcmVxdWVzdCBtZXNzYWdlcyBi eSByZXNwb25kaW5nIHRvIHRoZW0uCj4+ICsgKiBJZiB0aGUgbWVzc2FnZSBpcyBub3QgYSBiaW5k aW5nIHJlcXVlc3QsIGl0IHdpbGwgYmUgaWdub3JlZC4KPj4gKyAqLwo+PiArc3RhdGljIGludCBp Y2VfaGFuZGxlX2JpbmRpbmdfcmVxdWVzdChBVkZvcm1hdENvbnRleHQgKnMsIGNoYXIgKmJ1Ziwg aW50IGJ1Zl9zaXplKQo+PiArewo+PiArICAgIGludCByZXQgPSAwLCBzaXplOwo+PiArICAgIGNo YXIgdGlkWzEyXTsKPj4gKyAgICBXSElQQ29udGV4dCAqd2hpcCA9IHMtPnByaXZfZGF0YTsKPj4g Kwo+PiArICAgIC8qIElnbm9yZSBpZiBub3QgYSBiaW5kaW5nIHJlcXVlc3QuICovCj4+ICsgICAg aWYgKCFpY2VfaXNfYmluZGluZ19yZXF1ZXN0KGJ1ZiwgYnVmX3NpemUpKQo+PiArICAgICAgICBy ZXR1cm4gcmV0Owo+PiArCj4+ICsgICAgaWYgKGJ1Zl9zaXplIDwgSUNFX1NUVU5fSEVBREVSX1NJ WkUpIHsKPj4gKyAgICAgICAgYXZfbG9nKHdoaXAsIEFWX0xPR19FUlJPUiwgIldISVA6IEludmFs aWQgU1RVTiBtZXNzYWdlLCBleHBlY3RlZCBhdCBsZWFzdCAlZCwgZ290ICVkXG4iLAo+PiArICAg ICAgICAgICAgSUNFX1NUVU5fSEVBREVSX1NJWkUsIGJ1Zl9zaXplKTsKPj4gKyAgICAgICAgcmV0 dXJuIEFWRVJST1IoRUlOVkFMKTsKPj4gKyAgICB9Cj4+ICsKPj4gKyAgICAvKiBQYXJzZSB0cmFu c2FjdGlvbiBpZCBmcm9tIGJpbmRpbmcgcmVxdWVzdCBpbiBidWYuICovCj4+ICsgICAgbWVtY3B5 KHRpZCwgYnVmICsgOCwgMTIpOwo+PiArCj4+ICsgICAgLyogQnVpbGQgdGhlIFNUVU4gYmluZGlu ZyByZXNwb25zZS4gKi8KPj4gKyAgICByZXQgPSBpY2VfY3JlYXRlX3Jlc3BvbnNlKHMsIHRpZCwg c2l6ZW9mKHRpZCksIHdoaXAtPmJ1Ziwgc2l6ZW9mKHdoaXAtPmJ1ZiksICZzaXplKTsKPj4gKyAg ICBpZiAocmV0IDwgMCkgewo+PiArICAgICAgICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9SLCAi V0hJUDogRmFpbGVkIHRvIGNyZWF0ZSBTVFVOIGJpbmRpbmcgcmVzcG9uc2UsIHNpemU9JWRcbiIs IHNpemUpOwo+PiArICAgICAgICByZXR1cm4gcmV0Owo+PiArICAgIH0KPj4gKwo+PiArICAgIHJl dCA9IGZmdXJsX3dyaXRlKHdoaXAtPnVkcCwgd2hpcC0+YnVmLCBzaXplKTsKPj4gKyAgICBpZiAo cmV0IDwgMCkgewo+PiArICAgICAgICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9SLCAiV0hJUDog RmFpbGVkIHRvIHNlbmQgU1RVTiBiaW5kaW5nIHJlc3BvbnNlLCBzaXplPSVkXG4iLCBzaXplKTsK Pj4gKyAgICAgICAgcmV0dXJuIHJldDsKPj4gKyAgICB9Cj4+ICsKPj4gKyAgICByZXR1cm4gMDsK Pj4gK30KPj4gKwo+PiArLyoqCj4+ICsgKiBUbyBlc3RhYmxpc2ggYSBjb25uZWN0aW9uIHdpdGgg dGhlIFVEUCBzZXJ2ZXIsIHdlIHV0aWxpemUgSUNFLUxJVEUgaW4gYSBDbGllbnQtU2VydmVyCj4+ ICsgKiBtb2RlLiBJbiB0aGlzIHNldHVwLCBGRm1wZWcgYWN0cyBhcyB0aGUgVURQIGNsaWVudCwg d2hpbGUgdGhlIHBlZXIgZnVuY3Rpb25zIGFzIHRoZQo+PiArICogVURQIHNlcnZlci4KPj4gKyAq Lwo+PiArc3RhdGljIGludCB1ZHBfY29ubmVjdChBVkZvcm1hdENvbnRleHQgKnMpCj4+ICt7Cj4+ ICsgICAgaW50IHJldCA9IDA7Cj4+ICsgICAgY2hhciB1cmxbMjU2XTsKPj4gKyAgICBBVkRpY3Rp b25hcnkgKm9wdHMgPSBOVUxMOwo+PiArICAgIFdISVBDb250ZXh0ICp3aGlwID0gcy0+cHJpdl9k YXRhOwo+PiArCj4+ICsgICAgLyogQnVpbGQgVURQIFVSTCBhbmQgY3JlYXRlIHRoZSBVRFAgY29u dGV4dCBhcyB0cmFuc3BvcnQuICovCj4+ICsgICAgZmZfdXJsX2pvaW4odXJsLCBzaXplb2YodXJs KSwgInVkcCIsIE5VTEwsIHdoaXAtPmljZV9ob3N0LCB3aGlwLT5pY2VfcG9ydCwgTlVMTCk7Cj4+ ICsKPj4gKyAgICBhdl9kaWN0X3NldF9pbnQoJm9wdHMsICJjb25uZWN0IiwgMSwgMCk7Cj4+ICsg ICAgYXZfZGljdF9zZXRfaW50KCZvcHRzLCAiZmlmb19zaXplIiwgMCwgMCk7Cj4+ICsgICAgLyog U2V0IHRoZSBtYXggcGFja2V0IHNpemUgdG8gdGhlIGJ1ZmZlciBzaXplLiAqLwo+PiArICAgIGF2 X2RpY3Rfc2V0X2ludCgmb3B0cywgInBrdF9zaXplIiwgd2hpcC0+cGt0X3NpemUsIDApOwo+PiAr Cj4+ICsgICAgcmV0ID0gZmZ1cmxfb3Blbl93aGl0ZWxpc3QoJndoaXAtPnVkcCwgdXJsLCBBVklP X0ZMQUdfV1JJVEUsICZzLT5pbnRlcnJ1cHRfY2FsbGJhY2ssCj4+ICsgICAgICAgICZvcHRzLCBz LT5wcm90b2NvbF93aGl0ZWxpc3QsIHMtPnByb3RvY29sX2JsYWNrbGlzdCwgTlVMTCk7Cj4+ICsg ICAgaWYgKHJldCA8IDApIHsKPj4gKyAgICAgICAgYXZfbG9nKHdoaXAsIEFWX0xPR19FUlJPUiwg IldISVA6IEZhaWxlZCB0byBjb25uZWN0IHVkcDovLyVzOiVkXG4iLCB3aGlwLT5pY2VfaG9zdCwg d2hpcC0+aWNlX3BvcnQpOwo+PiArICAgICAgICBnb3RvIGVuZDsKPj4gKyAgICB9Cj4+ICsKPj4g KyAgICAvKiBNYWtlIHRoZSBzb2NrZXQgbm9uLWJsb2NraW5nLCBzZXQgdG8gUkVBRCBhbmQgV1JJ VEUgbW9kZSBhZnRlciBjb25uZWN0ZWQgKi8KPj4gKyAgICBmZl9zb2NrZXRfbm9uYmxvY2soZmZ1 cmxfZ2V0X2ZpbGVfaGFuZGxlKHdoaXAtPnVkcCksIDEpOwo+PiArICAgIHdoaXAtPnVkcC0+Zmxh Z3MgfD0gQVZJT19GTEFHX1JFQUQgfCBBVklPX0ZMQUdfTk9OQkxPQ0s7Cj4+ICsKPj4gKyAgICBp ZiAod2hpcC0+c3RhdGUgPCBXSElQX1NUQVRFX1VEUF9DT05ORUNURUQpCj4+ICsgICAgICAgIHdo aXAtPnN0YXRlID0gV0hJUF9TVEFURV9VRFBfQ09OTkVDVEVEOwo+PiArICAgIHdoaXAtPndoaXBf dWRwX3RpbWUgPSBhdl9nZXR0aW1lKCk7Cj4+ICsgICAgYXZfbG9nKHdoaXAsIEFWX0xPR19WRVJC T1NFLCAiV0hJUDogVURQIHN0YXRlPSVkLCBlbGFwc2VkPSVkbXMsIGNvbm5lY3RlZCB0byB1ZHA6 Ly8lczolZFxuIiwKPj4gKyAgICAgICAgd2hpcC0+c3RhdGUsIEVMQVBTRUQod2hpcC0+d2hpcF9z dGFydHRpbWUsIGF2X2dldHRpbWUoKSksIHdoaXAtPmljZV9ob3N0LCB3aGlwLT5pY2VfcG9ydCk7 Cj4+ICsKPj4gK2VuZDoKPj4gKyAgICBhdl9kaWN0X2ZyZWUoJm9wdHMpOwo+PiArICAgIHJldHVy biByZXQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgaWNlX2R0bHNfaGFuZHNoYWtlKEFWRm9y bWF0Q29udGV4dCAqcykKPj4gK3sKPj4gKyAgICBpbnQgcmV0ID0gMCwgc2l6ZSwgaTsKPj4gKyAg ICBpbnQ2NF90IHN0YXJ0dGltZSA9IGF2X2dldHRpbWUoKSwgbm93Owo+PiArICAgIFdISVBDb250 ZXh0ICp3aGlwID0gcy0+cHJpdl9kYXRhOwo+PiArICAgIEFWRGljdGlvbmFyeSAqb3B0cyA9IE5V TEw7Cj4+ICsgICAgY2hhciBzdHJbOF07Cj4+ICsgICAgY2hhciBidWZbMjU2XSwgKmNlcnRfYnVm ID0gTlVMTCwgKmtleV9idWYgPSBOVUxMOwo+PiArCj4+ICsgICAgaWYgKHdoaXAtPnN0YXRlIDwg V0hJUF9TVEFURV9VRFBfQ09OTkVDVEVEIHx8ICF3aGlwLT51ZHApIHsKPj4gKyAgICAgICAgYXZf bG9nKHdoaXAsIEFWX0xPR19FUlJPUiwgIldISVA6IFVEUCBub3QgY29ubmVjdGVkLCBzdGF0ZT0l ZCwgdWRwPSVwXG4iLCB3aGlwLT5zdGF0ZSwgd2hpcC0+dWRwKTsKPj4gKyAgICAgICAgcmV0dXJu IEFWRVJST1IoRUlOVkFMKTsKPj4gKyAgICB9Cj4+ICsKPj4gKyAgICB3aGlsZSAoMSkgewo+PiAr ICAgICAgICBpZiAod2hpcC0+c3RhdGUgPD0gV0hJUF9TVEFURV9JQ0VfQ09OTkVDVElORykgewo+ PiArICAgICAgICAgICAgLyogQnVpbGQgdGhlIFNUVU4gYmluZGluZyByZXF1ZXN0LiAqLwo+PiAr ICAgICAgICAgICAgcmV0ID0gaWNlX2NyZWF0ZV9yZXF1ZXN0KHMsIHdoaXAtPmJ1Ziwgc2l6ZW9m KHdoaXAtPmJ1ZiksICZzaXplKTsKPj4gKyAgICAgICAgICAgIGlmIChyZXQgPCAwKSB7Cj4+ICsg ICAgICAgICAgICAgICAgYXZfbG9nKHdoaXAsIEFWX0xPR19FUlJPUiwgIldISVA6IEZhaWxlZCB0 byBjcmVhdGUgU1RVTiBiaW5kaW5nIHJlcXVlc3QsIHNpemU9JWRcbiIsIHNpemUpOwo+PiArICAg ICAgICAgICAgICAgIGdvdG8gZW5kOwo+PiArICAgICAgICAgICAgfQo+PiArCj4+ICsgICAgICAg ICAgICByZXQgPSBmZnVybF93cml0ZSh3aGlwLT51ZHAsIHdoaXAtPmJ1Ziwgc2l6ZSk7Cj4+ICsg ICAgICAgICAgICBpZiAocmV0IDwgMCkgewo+PiArICAgICAgICAgICAgICAgIGF2X2xvZyh3aGlw LCBBVl9MT0dfRVJST1IsICJXSElQOiBGYWlsZWQgdG8gc2VuZCBTVFVOIGJpbmRpbmcgcmVxdWVz dCwgc2l6ZT0lZFxuIiwgc2l6ZSk7Cj4+ICsgICAgICAgICAgICAgICAgZ290byBlbmQ7Cj4+ICsg ICAgICAgICAgICB9Cj4+ICsKPj4gKyAgICAgICAgICAgIGlmICh3aGlwLT5zdGF0ZSA8IFdISVBf U1RBVEVfSUNFX0NPTk5FQ1RJTkcpCj4+ICsgICAgICAgICAgICAgICAgd2hpcC0+c3RhdGUgPSBX SElQX1NUQVRFX0lDRV9DT05ORUNUSU5HOwo+PiArICAgICAgICB9Cj4+ICsKPj4gK25leHRfcGFj a2V0Ogo+PiArICAgICAgICBpZiAod2hpcC0+c3RhdGUgPj0gV0hJUF9TVEFURV9EVExTX0ZJTklT SEVEKQo+PiArICAgICAgICAgICAgLyogRFRMUyBoYW5kc2hha2UgaXMgZG9uZSwgZXhpdCB0aGUg bG9vcC4gKi8KPj4gKyAgICAgICAgICAgIGJyZWFrOwo+PiArCj4+ICsgICAgICAgIG5vdyA9IGF2 X2dldHRpbWUoKTsKPj4gKyAgICAgICAgaWYgKG5vdyAtIHN0YXJ0dGltZSA+PSB3aGlwLT5oYW5k c2hha2VfdGltZW91dCAqIDEwMDApIHsKPj4gKyAgICAgICAgICAgIGF2X2xvZyh3aGlwLCBBVl9M T0dfRVJST1IsICJXSElQOiBEVExTIGhhbmRzaGFrZSB0aW1lb3V0PSVkbXMsIGNvc3Q9JWRtcywg ZWxhcHNlZD0lZG1zLCBzdGF0ZT0lZFxuIiwKPj4gKyAgICAgICAgICAgICAgICB3aGlwLT5oYW5k c2hha2VfdGltZW91dCwgRUxBUFNFRChzdGFydHRpbWUsIG5vdyksIEVMQVBTRUQod2hpcC0+d2hp cF9zdGFydHRpbWUsIG5vdyksIHdoaXAtPnN0YXRlKTsKPj4gKyAgICAgICAgICAgIHJldCA9IEFW RVJST1IoRVRJTUVET1VUKTsKPj4gKyAgICAgICAgICAgIGdvdG8gZW5kOwo+PiArICAgICAgICB9 Cj4+ICsKPj4gKyAgICAgICAgLyogUmVhZCB0aGUgU1RVTiBvciBEVExTIG1lc3NhZ2VzIGZyb20g cGVlci4gKi8KPj4gKyAgICAgICAgZm9yIChpID0gMDsgaSA8IElDRV9EVExTX1JFQURfSU5URVJW QUwgLyA1ICYmIHdoaXAtPnN0YXRlIDwgV0hJUF9TVEFURV9EVExTX0NPTk5FQ1RJTkc7IGkrKykg ewo+PiArICAgICAgICAgICAgcmV0ID0gZmZ1cmxfcmVhZCh3aGlwLT51ZHAsIHdoaXAtPmJ1Ziwg c2l6ZW9mKHdoaXAtPmJ1ZikpOwo+PiArICAgICAgICAgICAgaWYgKHJldCA+IDApCj4+ICsgICAg ICAgICAgICAgICAgYnJlYWs7Cj4+ICsgICAgICAgICAgICBpZiAocmV0ID09IEFWRVJST1IoRUFH QUlOKSkgewo+PiArICAgICAgICAgICAgICAgIGF2X3VzbGVlcCg1ICogMTAwMCk7Cj4+ICsgICAg ICAgICAgICAgICAgY29udGludWU7Cj4+ICsgICAgICAgICAgICB9Cj4+ICsgICAgICAgICAgICBh dl9sb2cod2hpcCwgQVZfTE9HX0VSUk9SLCAiV0hJUDogRmFpbGVkIHRvIHJlYWQgbWVzc2FnZVxu Iik7Cj4+ICsgICAgICAgICAgICBnb3RvIGVuZDsKPj4gKyAgICAgICAgfQo+PiArCj4+ICsgICAg ICAgIC8qIEdvdCBub3RoaW5nLCBjb250aW51ZSB0byBwcm9jZXNzIGhhbmRzaGFrZS4gKi8KPj4g KyAgICAgICAgaWYgKHJldCA8PSAwICYmIHdoaXAtPnN0YXRlIDwgV0hJUF9TVEFURV9EVExTX0NP Tk5FQ1RJTkcpCj4+ICsgICAgICAgICAgICBjb250aW51ZTsKPj4gKwo+PiArICAgICAgICAvKiBI YW5kbGUgdGhlIElDRSBiaW5kaW5nIHJlc3BvbnNlLiAqLwo+PiArICAgICAgICBpZiAoaWNlX2lz X2JpbmRpbmdfcmVzcG9uc2Uod2hpcC0+YnVmLCByZXQpKSB7Cj4+ICsgICAgICAgICAgICBpZiAo d2hpcC0+c3RhdGUgPCBXSElQX1NUQVRFX0lDRV9DT05ORUNURUQpIHsKPj4gKyAgICAgICAgICAg ICAgICB3aGlwLT5zdGF0ZSA9IFdISVBfU1RBVEVfSUNFX0NPTk5FQ1RFRDsKPj4gKyAgICAgICAg ICAgICAgICB3aGlwLT53aGlwX2ljZV90aW1lID0gYXZfZ2V0dGltZSgpOwo+PiArICAgICAgICAg ICAgICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfVkVSQk9TRSwgIldISVA6IElDRSBTVFVOIG9rLCBz dGF0ZT0lZCwgdXJsPXVkcDovLyVzOiVkLCBsb2NhdGlvbj0lcywgdXNlcm5hbWU9JXM6JXMsIHJl cz0lZEIsIGVsYXBzZWQ9JWRtc1xuIiwKPj4gKyAgICAgICAgICAgICAgICAgICAgd2hpcC0+c3Rh dGUsIHdoaXAtPmljZV9ob3N0LCB3aGlwLT5pY2VfcG9ydCwgd2hpcC0+d2hpcF9yZXNvdXJjZV91 cmwgPyB3aGlwLT53aGlwX3Jlc291cmNlX3VybCA6ICIiLAo+PiArICAgICAgICAgICAgICAgICAg ICB3aGlwLT5pY2VfdWZyYWdfcmVtb3RlLCB3aGlwLT5pY2VfdWZyYWdfbG9jYWwsIHJldCwgRUxB UFNFRCh3aGlwLT53aGlwX3N0YXJ0dGltZSwgYXZfZ2V0dGltZSgpKSk7Cj4+ICsKPj4gKyAgICAg ICAgICAgICAgICBmZl91cmxfam9pbihidWYsIHNpemVvZihidWYpLCAiZHRscyIsIE5VTEwsIHdo aXAtPmljZV9ob3N0LCB3aGlwLT5pY2VfcG9ydCwgTlVMTCk7Cj4+ICsgICAgICAgICAgICAgICAg c25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwgIiVkIiwgd2hpcC0+cGt0X3NpemUpOwo+PiArICAg ICAgICAgICAgICAgIGF2X2RpY3Rfc2V0KCZvcHRzLCAibXR1Iiwgc3RyLCAwKTsKPj4gKyAgICAg ICAgICAgICAgICBpZiAod2hpcC0+Y2VydF9maWxlKSB7Cj4+ICsgICAgICAgICAgICAgICAgICAg IGF2X2RpY3Rfc2V0KCZvcHRzLCAiY2VydF9maWxlIiwgd2hpcC0+Y2VydF9maWxlLCAwKTsKPj4g KyAgICAgICAgICAgICAgICB9IGVsc2UKPj4gKyAgICAgICAgICAgICAgICAgICAgYXZfZGljdF9z ZXQoJm9wdHMsICJjZXJ0X2J1ZiIsIHdoaXAtPmNlcnRfYnVmLCAwKTsKPj4gKwo+PiArICAgICAg ICAgICAgICAgIGlmICh3aGlwLT5rZXlfZmlsZSkgewo+PiArICAgICAgICAgICAgICAgICAgICBh dl9kaWN0X3NldCgmb3B0cywgImtleV9maWxlIiwgd2hpcC0+a2V5X2ZpbGUsIDApOwo+PiArICAg ICAgICAgICAgICAgIH0gZWxzZQo+PiArICAgICAgICAgICAgICAgICAgICBhdl9kaWN0X3NldCgm b3B0cywgImtleV9idWYiLCB3aGlwLT5rZXlfYnVmLCAwKTsKPj4gKwo+PiArICAgICAgICAgICAg ICAgIGF2X2RpY3Rfc2V0KCZvcHRzLCAiZmluZ2VycHJpbnQiLCB3aGlwLT5kdGxzX2ZpbmdlcnBy aW50LCAwKTsKPj4gKyAgICAgICAgICAgICAgICBhdl9kaWN0X3NldCgmb3B0cywgInVzZV9leHRl cm5hbF91ZHAiLCAiMSIsIDApOwo+PiArICAgICAgICAgICAgICAgIGF2X2RpY3Rfc2V0KCZvcHRz LCAibGlzdGVuIiwgIjEiLCAwKTsKPj4gKyAgICAgICAgICAgICAgICAvKiBJZiBnb3QgdGhlIGZp cnN0IGJpbmRpbmcgcmVzcG9uc2UsIHN0YXJ0IERUTFMgaGFuZHNoYWtlLiAqLwo+PiArICAgICAg ICAgICAgICAgIHJldCA9IGZmdXJsX29wZW5fd2hpdGVsaXN0KCZ3aGlwLT5kdGxzX3VjLCBidWYs IEFWSU9fRkxBR19SRUFEX1dSSVRFLCAmcy0+aW50ZXJydXB0X2NhbGxiYWNrLAo+PiArICAgICAg ICAgICAgICAgICAgICAmb3B0cywgcy0+cHJvdG9jb2xfd2hpdGVsaXN0LCBzLT5wcm90b2NvbF9i bGFja2xpc3QsIE5VTEwpOwo+PiArICAgICAgICAgICAgICAgIGlmIChyZXQgPCAwKQo+PiArICAg ICAgICAgICAgICAgICAgICBnb3RvIGVuZDsKPj4gKyAgICAgICAgICAgICAgICBkdGxzX2luaXRp YWxpemUocyk7Cj4+ICsgICAgICAgICAgICB9Cj4+ICsgICAgICAgICAgICBnb3RvIG5leHRfcGFj a2V0Owo+PiArICAgICAgICB9Cj4+ICsKPj4gKyAgICAgICAgLyogV2hlbiBhIGJpbmRpbmcgcmVx dWVzdCBpcyByZWNlaXZlZCwgaXQgaXMgbmVjZXNzYXJ5IHRvIHJlc3BvbmQgaW1tZWRpYXRlbHku ICovCj4+ICsgICAgICAgIGlmIChpY2VfaXNfYmluZGluZ19yZXF1ZXN0KHdoaXAtPmJ1ZiwgcmV0 KSkgewo+PiArICAgICAgICAgICAgaWYgKChyZXQgPSBpY2VfaGFuZGxlX2JpbmRpbmdfcmVxdWVz dChzLCB3aGlwLT5idWYsIHJldCkpIDwgMCkKPj4gKyAgICAgICAgICAgICAgICBnb3RvIGVuZDsK Pj4gKyAgICAgICAgICAgIGdvdG8gbmV4dF9wYWNrZXQ7Cj4+ICsgICAgICAgIH0KPj4gKwo+PiAr ICAgICAgICAvKiBJZiBnb3QgYW55IERUTFMgbWVzc2FnZXMsIGhhbmRsZSBpdC4gKi8KPj4gKyAg ICAgICAgaWYgKGlzX2R0bHNfcGFja2V0KHdoaXAtPmJ1ZiwgcmV0KSAmJiB3aGlwLT5zdGF0ZSA+ PSBXSElQX1NUQVRFX0lDRV9DT05ORUNURUQgfHwgd2hpcC0+c3RhdGUgPT0gV0hJUF9TVEFURV9E VExTX0NPTk5FQ1RJTkcpIHsKPj4gKyAgICAgICAgICAgIHdoaXAtPnN0YXRlID0gV0hJUF9TVEFU RV9EVExTX0NPTk5FQ1RJTkc7Cj4+ICsgICAgICAgICAgICBpZiAoKHJldCA9IGZmdXJsX2hhbmRz aGFrZSh3aGlwLT5kdGxzX3VjKSkgPCAwKQo+PiArICAgICAgICAgICAgICAgIGdvdG8gZW5kOwo+ PiArICAgICAgICAgICAgZHRsc19jb250ZXh0X29uX3N0YXRlKHMsIE5VTEwsIE5VTEwpOwo+PiAr ICAgICAgICAgICAgZ290byBuZXh0X3BhY2tldDsKPj4gKyAgICAgICAgfQo+PiArICAgIH0KPj4g Kwo+PiArZW5kOgo+PiArICAgIGlmIChjZXJ0X2J1ZikKPj4gKyAgICAgICAgYXZfZnJlZShjZXJ0 X2J1Zik7Cj4+ICsgICAgaWYgKGtleV9idWYpCj4+ICsgICAgICAgIGF2X2ZyZWUoa2V5X2J1Zik7 Cj4+ICsgICAgcmV0dXJuIHJldDsKPj4gK30KPj4gKwo+PiArLyoqCj4+ICsgKiBFc3RhYmxpc2gg dGhlIFNSVFAgY29udGV4dCB1c2luZyB0aGUga2V5aW5nIG1hdGVyaWFsIGV4cG9ydGVkIGZyb20g RFRMUy4KPj4gKyAqCj4+ICsgKiBDcmVhdGUgc2VwYXJhdGUgU1JUUCBjb250ZXh0cyBmb3Igc2Vu ZGluZyB2aWRlbyBhbmQgYXVkaW8sIGFzIHRoZWlyIHNlcXVlbmNlcyBkaWZmZXIKPj4gKyAqIGFu ZCBzaG91bGQgbm90IHNoYXJlIGEgc2luZ2xlIGNvbnRleHQuIEdlbmVyYXRlIGEgc2luZ2xlIFNS VFAgY29udGV4dCBmb3IgcmVjZWl2aW5nCj4+ICsgKiBSVENQIG9ubHkuCj4+ICsgKgo+PiArICog QHJldHVybiAwIGlmIE9LLCBBVkVSUk9SX3h4eCBvbiBlcnJvcgo+PiArICovCj4+ICtzdGF0aWMg aW50IHNldHVwX3NydHAoQVZGb3JtYXRDb250ZXh0ICpzKQo+PiArewo+PiArICAgIGludCByZXQ7 Cj4+ICsgICAgY2hhciByZWN2X2tleVtEVExTX1NSVFBfS0VZX0xFTiArIERUTFNfU1JUUF9TQUxU X0xFTl07Cj4+ICsgICAgY2hhciBzZW5kX2tleVtEVExTX1NSVFBfS0VZX0xFTiArIERUTFNfU1JU UF9TQUxUX0xFTl07Cj4+ICsgICAgY2hhciBidWZbQVZfQkFTRTY0X1NJWkUoRFRMU19TUlRQX0tF WV9MRU4gKyBEVExTX1NSVFBfU0FMVF9MRU4pXTsKPj4gKyAgICAvKioKPj4gKyAgICAgKiBUaGUg cHJvZmlsZSBmb3IgT3BlblNTTCdzIFNSVFAgaXMgU1JUUF9BRVMxMjhfQ01fU0hBMV84MCwgc2Vl IHNzbC9kMV9zcnRwLmMuCj4+ICsgICAgICogVGhlIHByb2ZpbGUgZm9yIEZGbXBlZydzIFNSVFAg aXMgU1JUUF9BRVMxMjhfQ01fSE1BQ19TSEExXzgwLCBzZWUgbGliYXZmb3JtYXQvc3J0cC5jLgo+ PiArICAgICAqLwo+PiArICAgIGNvbnN0IGNoYXIqIHN1aXRlID0gIlNSVFBfQUVTMTI4X0NNX0hN QUNfU0hBMV84MCI7Cj4+ICsgICAgV0hJUENvbnRleHQgKndoaXAgPSBzLT5wcml2X2RhdGE7Cj4+ ICsgICAgcmV0ID0gZmZfZHRsc19leHBvcnRfbWF0ZXJpYWxzKHdoaXAtPmR0bHNfdWMsIHdoaXAt PmR0bHNfc3J0cF9tYXRlcmlhbHMsIHNpemVvZih3aGlwLT5kdGxzX3NydHBfbWF0ZXJpYWxzKSk7 Cj4+ICsgICAgaWYgKHJldCA8IDApCj4+ICsgICAgICAgIGdvdG8gZW5kOwo+PiArICAgIC8qKgo+ PiArICAgICAqIFRoaXMgcmVwcmVzZW50cyB0aGUgbWF0ZXJpYWwgdXNlZCB0byBidWlsZCB0aGUg U1JUUCBtYXN0ZXIga2V5LiBJdCBpcwo+PiArICAgICAqIGdlbmVyYXRlZCBieSBEVExTIGFuZCBo YXMgdGhlIGZvbGxvd2luZyBsYXlvdXQ6Cj4+ICsgICAgICogICAgICAgICAgMTZCICAgICAgICAg MTZCICAgICAgICAgMTRCICAgICAgICAgICAgIDE0Qgo+PiArICAgICAqICAgICAgY2xpZW50X2tl eSB8IHNlcnZlcl9rZXkgfCBjbGllbnRfc2FsdCB8IHNlcnZlcl9zYWx0Cj4+ICsgICAgICovCj4+ ICsgICAgY2hhciAqY2xpZW50X2tleSA9IHdoaXAtPmR0bHNfc3J0cF9tYXRlcmlhbHM7Cj4+ICsg ICAgY2hhciAqc2VydmVyX2tleSA9IHdoaXAtPmR0bHNfc3J0cF9tYXRlcmlhbHMgKyBEVExTX1NS VFBfS0VZX0xFTjsKPj4gKyAgICBjaGFyICpjbGllbnRfc2FsdCA9IHNlcnZlcl9rZXkgKyBEVExT X1NSVFBfS0VZX0xFTjsKPj4gKyAgICBjaGFyICpzZXJ2ZXJfc2FsdCA9IGNsaWVudF9zYWx0ICsg RFRMU19TUlRQX1NBTFRfTEVOOwo+PiArCj4+ICsgICAgLyogQXMgRFRMUyBzZXJ2ZXIsIHRoZSBy ZWN2IGtleSBpcyBjbGllbnQgbWFzdGVyIGtleSBwbHVzIHNhbHQuICovCj4+ICsgICAgbWVtY3B5 KHJlY3Zfa2V5LCBjbGllbnRfa2V5LCBEVExTX1NSVFBfS0VZX0xFTik7Cj4+ICsgICAgbWVtY3B5 KHJlY3Zfa2V5ICsgRFRMU19TUlRQX0tFWV9MRU4sIGNsaWVudF9zYWx0LCBEVExTX1NSVFBfU0FM VF9MRU4pOwo+PiArCj4+ICsgICAgLyogQXMgRFRMUyBzZXJ2ZXIsIHRoZSBzZW5kIGtleSBpcyBz ZXJ2ZXIgbWFzdGVyIGtleSBwbHVzIHNhbHQuICovCj4+ICsgICAgbWVtY3B5KHNlbmRfa2V5LCBz ZXJ2ZXJfa2V5LCBEVExTX1NSVFBfS0VZX0xFTik7Cj4+ICsgICAgbWVtY3B5KHNlbmRfa2V5ICsg RFRMU19TUlRQX0tFWV9MRU4sIHNlcnZlcl9zYWx0LCBEVExTX1NSVFBfU0FMVF9MRU4pOwo+PiAr Cj4+ICsgICAgLyogU2V0dXAgU1JUUCBjb250ZXh0IGZvciBvdXRnb2luZyBwYWNrZXRzICovCj4+ ICsgICAgaWYgKCFhdl9iYXNlNjRfZW5jb2RlKGJ1Ziwgc2l6ZW9mKGJ1ZiksIHNlbmRfa2V5LCBz aXplb2Yoc2VuZF9rZXkpKSkgewo+PiArICAgICAgICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9S LCAiV0hJUDogRmFpbGVkIHRvIGVuY29kZSBzZW5kIGtleVxuIik7Cj4+ICsgICAgICAgIHJldCA9 IEFWRVJST1IoRUlPKTsKPj4gKyAgICAgICAgZ290byBlbmQ7Cj4+ICsgICAgfQo+PiArCj4+ICsg ICAgcmV0ID0gZmZfc3J0cF9zZXRfY3J5cHRvKCZ3aGlwLT5zcnRwX2F1ZGlvX3NlbmQsIHN1aXRl LCBidWYpOwo+PiArICAgIGlmIChyZXQgPCAwKSB7Cj4+ICsgICAgICAgIGF2X2xvZyh3aGlwLCBB Vl9MT0dfRVJST1IsICJXSElQOiBGYWlsZWQgdG8gc2V0IGNyeXB0byBmb3IgYXVkaW8gc2VuZFxu Iik7Cj4+ICsgICAgICAgIGdvdG8gZW5kOwo+PiArICAgIH0KPj4gKwo+PiArICAgIHJldCA9IGZm X3NydHBfc2V0X2NyeXB0bygmd2hpcC0+c3J0cF92aWRlb19zZW5kLCBzdWl0ZSwgYnVmKTsKPj4g KyAgICBpZiAocmV0IDwgMCkgewo+PiArICAgICAgICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9S LCAiV0hJUDogRmFpbGVkIHRvIHNldCBjcnlwdG8gZm9yIHZpZGVvIHNlbmRcbiIpOwo+PiArICAg ICAgICBnb3RvIGVuZDsKPj4gKyAgICB9Cj4+ICsKPj4gKyAgICByZXQgPSBmZl9zcnRwX3NldF9j cnlwdG8oJndoaXAtPnNydHBfcnRjcF9zZW5kLCBzdWl0ZSwgYnVmKTsKPj4gKyAgICBpZiAocmV0 IDwgMCkgewo+PiArICAgICAgICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRv IHNldCBjcnlwdG8gZm9yIHJ0Y3Agc2VuZFxuIik7Cj4+ICsgICAgICAgIGdvdG8gZW5kOwo+PiAr ICAgIH0KPj4gKwo+PiArICAgIC8qIFNldHVwIFNSVFAgY29udGV4dCBmb3IgaW5jb21pbmcgcGFj a2V0cyAqLwo+PiArICAgIGlmICghYXZfYmFzZTY0X2VuY29kZShidWYsIHNpemVvZihidWYpLCBy ZWN2X2tleSwgc2l6ZW9mKHJlY3Zfa2V5KSkpIHsKPj4gKyAgICAgICAgYXZfbG9nKHdoaXAsIEFW X0xPR19FUlJPUiwgIldISVA6IEZhaWxlZCB0byBlbmNvZGUgcmVjdiBrZXlcbiIpOwo+PiArICAg ICAgICByZXQgPSBBVkVSUk9SKEVJTyk7Cj4+ICsgICAgICAgIGdvdG8gZW5kOwo+PiArICAgIH0K Pj4gKwo+PiArICAgIHJldCA9IGZmX3NydHBfc2V0X2NyeXB0bygmd2hpcC0+c3J0cF9yZWN2LCBz dWl0ZSwgYnVmKTsKPj4gKyAgICBpZiAocmV0IDwgMCkgewo+PiArICAgICAgICBhdl9sb2cod2hp cCwgQVZfTE9HX0VSUk9SLCAiV0hJUDogRmFpbGVkIHRvIHNldCBjcnlwdG8gZm9yIHJlY3ZcbiIp Owo+PiArICAgICAgICBnb3RvIGVuZDsKPj4gKyAgICB9Cj4+ICsKPj4gKyAgICBpZiAod2hpcC0+ c3RhdGUgPCBXSElQX1NUQVRFX1NSVFBfRklOSVNIRUQpCj4+ICsgICAgICAgIHdoaXAtPnN0YXRl ID0gV0hJUF9TVEFURV9TUlRQX0ZJTklTSEVEOwo+PiArICAgIHdoaXAtPndoaXBfc3J0cF90aW1l ID0gYXZfZ2V0dGltZSgpOwo+PiArICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfVkVSQk9TRSwgIldI SVA6IFNSVFAgc2V0dXAgZG9uZSwgc3RhdGU9JWQsIHN1aXRlPSVzLCBrZXk9JWx1QiwgZWxhcHNl ZD0lZG1zXG4iLAo+PiArICAgICAgICB3aGlwLT5zdGF0ZSwgc3VpdGUsIHNpemVvZihzZW5kX2tl eSksIEVMQVBTRUQod2hpcC0+d2hpcF9zdGFydHRpbWUsIGF2X2dldHRpbWUoKSkpOwo+PiArCj4+ ICtlbmQ6Cj4+ICsgICAgcmV0dXJuIHJldDsKPj4gK30KPj4gKwo+PiArLyoqCj4+ICsgKiBDYWxs YmFjayB0cmlnZ2VyZWQgYnkgdGhlIFJUUCBtdXhlciB3aGVuIGl0IGNyZWF0ZXMgYW5kIHNlbmRz IG91dCBhbiBSVFAgcGFja2V0Lgo+PiArICoKPj4gKyAqIFRoaXMgZnVuY3Rpb24gbW9kaWZpZXMg dGhlIHZpZGVvIFNUQVAgcGFja2V0LCByZW1vdmluZyB0aGUgbWFya2VycywgYW5kIHVwZGF0aW5n IHRoZQo+PiArICogTlJJIG9mIHRoZSBmaXJzdCBOQUxVLiBBZGRpdGlvbmFsbHksIGl0IHVzZXMg dGhlIGNvcnJlc3BvbmRpbmcgU1JUUCBjb250ZXh0IHRvIGVuY3J5cHQKPj4gKyAqIHRoZSBSVFAg cGFja2V0LCB3aGVyZSB0aGUgdmlkZW8gcGFja2V0IGlzIGhhbmRsZWQgYnkgdGhlIHZpZGVvIFNS VFAgY29udGV4dC4KPj4gKyAqLwo+PiArc3RhdGljIGludCBvbl9ydHBfd3JpdGVfcGFja2V0KHZv aWQgKm9wYXF1ZSwgY29uc3QgdWludDhfdCAqYnVmLCBpbnQgYnVmX3NpemUpCj4+ICt7Cj4+ICsg ICAgaW50IHJldCwgY2lwaGVyX3NpemUsIGlzX3J0Y3AsIGlzX3ZpZGVvOwo+PiArICAgIHVpbnQ4 X3QgcGF5bG9hZF90eXBlOwo+PiArICAgIEFWRm9ybWF0Q29udGV4dCAqcyA9IG9wYXF1ZTsKPj4g KyAgICBXSElQQ29udGV4dCAqd2hpcCA9IHMtPnByaXZfZGF0YTsKPj4gKyAgICBTUlRQQ29udGV4 dCAqc3J0cDsKPj4gKwo+PiArICAgIC8qIElnbm9yZSBpZiBub3QgUlRQIG9yIFJUQ1AgcGFja2V0 LiAqLwo+PiArICAgIGlmICghbWVkaWFfaXNfcnRwX3J0Y3AoYnVmLCBidWZfc2l6ZSkpCj4+ICsg ICAgICAgIHJldHVybiAwOwo+PiArCj4+ICsgICAgLyogT25seSBzdXBwb3J0IGF1ZGlvLCB2aWRl byBhbmQgcnRjcC4gKi8KPj4gKyAgICBpc19ydGNwID0gbWVkaWFfaXNfcnRjcChidWYsIGJ1Zl9z aXplKTsKPj4gKyAgICBwYXlsb2FkX3R5cGUgPSBidWZbMV0gJiAweDdmOwo+PiArICAgIGlzX3Zp ZGVvID0gcGF5bG9hZF90eXBlID09IHdoaXAtPnZpZGVvX3BheWxvYWRfdHlwZTsKPj4gKyAgICBp ZiAoIWlzX3J0Y3AgJiYgcGF5bG9hZF90eXBlICE9IHdoaXAtPnZpZGVvX3BheWxvYWRfdHlwZSAm JiBwYXlsb2FkX3R5cGUgIT0gd2hpcC0+YXVkaW9fcGF5bG9hZF90eXBlKQo+PiArICAgICAgICBy ZXR1cm4gMDsKPj4gKwo+PiArICAgIC8qIEdldCB0aGUgY29ycmVzcG9uZGluZyBTUlRQIGNvbnRl eHQuICovCj4+ICsgICAgc3J0cCA9IGlzX3J0Y3AgPyAmd2hpcC0+c3J0cF9ydGNwX3NlbmQgOiAo aXNfdmlkZW8/ICZ3aGlwLT5zcnRwX3ZpZGVvX3NlbmQgOiAmd2hpcC0+c3J0cF9hdWRpb19zZW5k KTsKPj4gKwo+PiArICAgIC8qIEVuY3J5cHQgYnkgU1JUUCBhbmQgc2VuZCBvdXQuICovCj4+ICsg ICAgY2lwaGVyX3NpemUgPSBmZl9zcnRwX2VuY3J5cHQoc3J0cCwgYnVmLCBidWZfc2l6ZSwgd2hp cC0+YnVmLCBzaXplb2Yod2hpcC0+YnVmKSk7Cj4+ICsgICAgaWYgKGNpcGhlcl9zaXplIDw9IDAg fHwgY2lwaGVyX3NpemUgPCBidWZfc2l6ZSkgewo+PiArICAgICAgICBhdl9sb2cod2hpcCwgQVZf TE9HX1dBUk5JTkcsICJXSElQOiBGYWlsZWQgdG8gZW5jcnlwdCBwYWNrZXQ9JWRCLCBjaXBoZXI9 JWRCXG4iLCBidWZfc2l6ZSwgY2lwaGVyX3NpemUpOwo+PiArICAgICAgICByZXR1cm4gMDsKPj4g KyAgICB9Cj4+ICsKPj4gKyAgICByZXQgPSBmZnVybF93cml0ZSh3aGlwLT51ZHAsIHdoaXAtPmJ1 ZiwgY2lwaGVyX3NpemUpOwo+PiArICAgIGlmIChyZXQgPCAwKSB7Cj4+ICsgICAgICAgIGF2X2xv Zyh3aGlwLCBBVl9MT0dfRVJST1IsICJXSElQOiBGYWlsZWQgdG8gd3JpdGUgcGFja2V0PSVkQiwg cmV0PSVkXG4iLCBjaXBoZXJfc2l6ZSwgcmV0KTsKPj4gKyAgICAgICAgcmV0dXJuIHJldDsKPj4g KyAgICB9Cj4+ICsKPj4gKyAgICByZXR1cm4gcmV0Owo+PiArfQo+PiArCj4+ICsvKioKPj4gKyAq IENyZWF0ZXMgZGVkaWNhdGVkIFJUUCBtdXhlcnMgZm9yIGVhY2ggc3RyZWFtIGluIHRoZSBBVkZv cm1hdENvbnRleHQgdG8gYnVpbGQgUlRQCj4+ICsgKiBwYWNrZXRzIGZyb20gdGhlIGVuY29kZWQg ZnJhbWVzLgo+PiArICoKPj4gKyAqIFRoZSBjb3JyZXNwb25kaW5nIFNSVFAgY29udGV4dCBpcyB1 dGlsaXplZCB0byBlbmNyeXB0IGVhY2ggc3RyZWFtJ3MgUlRQIHBhY2tldHMuIEZvcgo+PiArICog ZXhhbXBsZSwgYSB2aWRlbyBTUlRQIGNvbnRleHQgaXMgdXNlZCBmb3IgdGhlIHZpZGVvIHN0cmVh bS4gQWRkaXRpb25hbGx5LCB0aGUKPj4gKyAqICJvbl9ydHBfd3JpdGVfcGFja2V0IiBjYWxsYmFj ayBmdW5jdGlvbiBpcyBzZXQgYXMgdGhlIHdyaXRlIGZ1bmN0aW9uIGZvciBlYWNoIFJUUAo+PiAr ICogbXV4ZXIgdG8gc2VuZCBvdXQgZW5jcnlwdGVkIFJUUCBwYWNrZXRzLgo+PiArICoKPj4gKyAq IEByZXR1cm4gMCBpZiBPSywgQVZFUlJPUl94eHggb24gZXJyb3IKPj4gKyAqLwo+PiArc3RhdGlj IGludCBjcmVhdGVfcnRwX211eGVyKEFWRm9ybWF0Q29udGV4dCAqcykKPj4gK3sKPj4gKyAgICBp bnQgcmV0LCBpLCBpc192aWRlbywgYnVmZmVyX3NpemUsIG1heF9wYWNrZXRfc2l6ZTsKPj4gKyAg ICBBVkZvcm1hdENvbnRleHQgKnJ0cF9jdHggPSBOVUxMOwo+PiArICAgIEFWRGljdGlvbmFyeSAq b3B0cyA9IE5VTEw7Cj4+ICsgICAgdWludDhfdCAqYnVmZmVyID0gTlVMTDsKPj4gKyAgICBjaGFy IGJ1Zls2NF07Cj4+ICsgICAgV0hJUENvbnRleHQgKndoaXAgPSBzLT5wcml2X2RhdGE7Cj4+ICsK Pj4gKyAgICBjb25zdCBBVk91dHB1dEZvcm1hdCAqcnRwX2Zvcm1hdCA9IGF2X2d1ZXNzX2Zvcm1h dCgicnRwIiwgTlVMTCwgTlVMTCk7Cj4+ICsgICAgaWYgKCFydHBfZm9ybWF0KSB7Cj4+ICsgICAg ICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfRVJST1IsICJXSElQOiBGYWlsZWQgdG8gZ3Vlc3MgcnRw IG11eGVyXG4iKTsKPj4gKyAgICAgICAgcmV0ID0gQVZFUlJPUihFTk9TWVMpOwo+PiArICAgICAg ICBnb3RvIGVuZDsKPj4gKyAgICB9Cj4+ICsKPj4gKyAgICAvKiBUaGUgVURQIGJ1ZmZlciBzaXpl LCBtYXkgZ3JlYXRlciB0aGFuIE1UVS4gKi8KPj4gKyAgICBidWZmZXJfc2l6ZSA9IE1BWF9VRFBf QlVGRkVSX1NJWkU7Cj4+ICsgICAgLyogVGhlIFJUUCBwYXlsb2FkIG1heCBzaXplLiBSZXNlcnZl ZCBzb21lIGJ5dGVzIGZvciBTUlRQIGNoZWNrc3VtIGFuZCBwYWRkaW5nLiAqLwo+PiArICAgIG1h eF9wYWNrZXRfc2l6ZSA9IHdoaXAtPnBrdF9zaXplIC0gRFRMU19TUlRQX0NIRUNLU1VNX0xFTjsK Pj4gKwo+PiArICAgIGZvciAoaSA9IDA7IGkgPCBzLT5uYl9zdHJlYW1zOyBpKyspIHsKPj4gKyAg ICAgICAgcnRwX2N0eCA9IGF2Zm9ybWF0X2FsbG9jX2NvbnRleHQoKTsKPj4gKyAgICAgICAgaWYg KCFydHBfY3R4KSB7Cj4+ICsgICAgICAgICAgICByZXQgPSBBVkVSUk9SKEVOT01FTSk7Cj4+ICsg ICAgICAgICAgICBnb3RvIGVuZDsKPj4gKyAgICAgICAgfQo+PiArCj4+ICsgICAgICAgIHJ0cF9j dHgtPm9mb3JtYXQgPSBydHBfZm9ybWF0Owo+PiArICAgICAgICBpZiAoIWF2Zm9ybWF0X25ld19z dHJlYW0ocnRwX2N0eCwgTlVMTCkpIHsKPj4gKyAgICAgICAgICAgIHJldCA9IEFWRVJST1IoRU5P TUVNKTsKPj4gKyAgICAgICAgICAgIGdvdG8gZW5kOwo+PiArICAgICAgICB9Cj4+ICsgICAgICAg IC8qIFBhc3MgdGhlIGludGVycnVwdCBjYWxsYmFjayBvbiAqLwo+PiArICAgICAgICBydHBfY3R4 LT5pbnRlcnJ1cHRfY2FsbGJhY2sgPSBzLT5pbnRlcnJ1cHRfY2FsbGJhY2s7Cj4+ICsgICAgICAg IC8qIENvcHkgdGhlIG1heCBkZWxheSBzZXR0aW5nOyB0aGUgcnRwIG11eGVyIHJlYWRzIHRoaXMu ICovCj4+ICsgICAgICAgIHJ0cF9jdHgtPm1heF9kZWxheSA9IHMtPm1heF9kZWxheTsKPj4gKyAg ICAgICAgLyogQ29weSBvdGhlciBzdHJlYW0gcGFyYW1ldGVycy4gKi8KPj4gKyAgICAgICAgcnRw X2N0eC0+c3RyZWFtc1swXS0+c2FtcGxlX2FzcGVjdF9yYXRpbyA9IHMtPnN0cmVhbXNbaV0tPnNh bXBsZV9hc3BlY3RfcmF0aW87Cj4+ICsgICAgICAgIHJ0cF9jdHgtPmZsYWdzIHw9IHMtPmZsYWdz ICYgQVZGTVRfRkxBR19CSVRFWEFDVDsKPj4gKyAgICAgICAgcnRwX2N0eC0+c3RyaWN0X3N0ZF9j b21wbGlhbmNlID0gcy0+c3RyaWN0X3N0ZF9jb21wbGlhbmNlOwo+PiArCj4+ICsgICAgICAgIC8q IFNldCB0aGUgc3luY2hyb25pemVkIHN0YXJ0IHRpbWUuICovCj4+ICsgICAgICAgIHJ0cF9jdHgt PnN0YXJ0X3RpbWVfcmVhbHRpbWUgPSBzLT5zdGFydF90aW1lX3JlYWx0aW1lOwo+PiArCj4+ICsg ICAgICAgIGF2Y29kZWNfcGFyYW1ldGVyc19jb3B5KHJ0cF9jdHgtPnN0cmVhbXNbMF0tPmNvZGVj cGFyLCBzLT5zdHJlYW1zW2ldLT5jb2RlY3Bhcik7Cj4+ICsgICAgICAgIHJ0cF9jdHgtPnN0cmVh bXNbMF0tPnRpbWVfYmFzZSA9IHMtPnN0cmVhbXNbaV0tPnRpbWVfYmFzZTsKPj4gKwo+PiArICAg ICAgICAvKioKPj4gKyAgICAgICAgICogRm9yIEguMjY0LCBjb25zaXN0ZW50bHkgdXRpbGl6ZSB0 aGUgYW5uZXhiIGZvcm1hdCB0aHJvdWdoIHRoZSBCaXRzdHJlYW0gRmlsdGVyIChCU0YpOwo+PiAr ICAgICAgICAgKiB0aGVyZWZvcmUsIHdlIGRlYWN0aXZhdGUgdGhlIGV4dHJhZGF0YSBkZXRlY3Rp b24gZm9yIHRoZSBSVFAgbXV4ZXIuCj4+ICsgICAgICAgICAqLwo+PiArICAgICAgICBpZiAocy0+ c3RyZWFtc1tpXS0+Y29kZWNwYXItPmNvZGVjX2lkID09IEFWX0NPREVDX0lEX0gyNjQpIHsKPj4g KyAgICAgICAgICAgIGF2X2ZyZWVwKCZydHBfY3R4LT5zdHJlYW1zW2ldLT5jb2RlY3Bhci0+ZXh0 cmFkYXRhKTsKPj4gKyAgICAgICAgICAgIHJ0cF9jdHgtPnN0cmVhbXNbaV0tPmNvZGVjcGFyLT5l eHRyYWRhdGFfc2l6ZSA9IDA7Cj4+ICsgICAgICAgIH0KPj4gKwo+PiArICAgICAgICBidWZmZXIg PSBhdl9tYWxsb2MoYnVmZmVyX3NpemUpOwo+PiArICAgICAgICBpZiAoIWJ1ZmZlcikgewo+PiAr ICAgICAgICAgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOwo+PiArICAgICAgICAgICAgZ290byBl bmQ7Cj4+ICsgICAgICAgIH0KPj4gKwo+PiArICAgICAgICBydHBfY3R4LT5wYiA9IGF2aW9fYWxs b2NfY29udGV4dChidWZmZXIsIGJ1ZmZlcl9zaXplLCAxLCBzLCBOVUxMLCBvbl9ydHBfd3JpdGVf cGFja2V0LCBOVUxMKTsKPj4gKyAgICAgICAgaWYgKCFydHBfY3R4LT5wYikgewo+PiArICAgICAg ICAgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOwo+PiArICAgICAgICAgICAgZ290byBlbmQ7Cj4+ ICsgICAgICAgIH0KPj4gKyAgICAgICAgcnRwX2N0eC0+cGItPm1heF9wYWNrZXRfc2l6ZSA9IG1h eF9wYWNrZXRfc2l6ZTsKPj4gKyAgICAgICAgcnRwX2N0eC0+cGItPmF2X2NsYXNzID0gJmZmX2F2 aW9fY2xhc3M7Cj4+ICsKPj4gKyAgICAgICAgaXNfdmlkZW8gPSBzLT5zdHJlYW1zW2ldLT5jb2Rl Y3Bhci0+Y29kZWNfdHlwZSA9PSBBVk1FRElBX1RZUEVfVklERU87Cj4+ICsgICAgICAgIHNucHJp bnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlZCIsIGlzX3ZpZGVvPyB3aGlwLT52aWRlb19wYXlsb2Fk X3R5cGUgOiB3aGlwLT5hdWRpb19wYXlsb2FkX3R5cGUpOwo+PiArICAgICAgICBhdl9kaWN0X3Nl dCgmb3B0cywgInBheWxvYWRfdHlwZSIsIGJ1ZiwgMCk7Cj4+ICsgICAgICAgIHNucHJpbnRmKGJ1 Ziwgc2l6ZW9mKGJ1ZiksICIlZCIsIGlzX3ZpZGVvPyB3aGlwLT52aWRlb19zc3JjIDogd2hpcC0+ YXVkaW9fc3NyYyk7Cj4+ICsgICAgICAgIGF2X2RpY3Rfc2V0KCZvcHRzLCAic3NyYyIsIGJ1Ziwg MCk7Cj4+ICsKPj4gKyAgICAgICAgcmV0ID0gYXZmb3JtYXRfd3JpdGVfaGVhZGVyKHJ0cF9jdHgs ICZvcHRzKTsKPj4gKyAgICAgICAgaWYgKHJldCA8IDApIHsKPj4gKyAgICAgICAgICAgIGF2X2xv Zyh3aGlwLCBBVl9MT0dfRVJST1IsICJXSElQOiBGYWlsZWQgdG8gd3JpdGUgcnRwIGhlYWRlclxu Iik7Cj4+ICsgICAgICAgICAgICBnb3RvIGVuZDsKPj4gKyAgICAgICAgfQo+PiArCj4+ICsgICAg ICAgIGZmX2Zvcm1hdF9zZXRfdXJsKHJ0cF9jdHgsIGF2X3N0cmR1cChzLT51cmwpKTsKPj4gKyAg ICAgICAgcy0+c3RyZWFtc1tpXS0+dGltZV9iYXNlID0gcnRwX2N0eC0+c3RyZWFtc1swXS0+dGlt ZV9iYXNlOwo+PiArICAgICAgICBzLT5zdHJlYW1zW2ldLT5wcml2X2RhdGEgPSBydHBfY3R4Owo+ PiArICAgICAgICBydHBfY3R4ID0gTlVMTDsKPj4gKyAgICB9Cj4+ICsKPj4gKyAgICBpZiAod2hp cC0+c3RhdGUgPCBXSElQX1NUQVRFX1JFQURZKQo+PiArICAgICAgICB3aGlwLT5zdGF0ZSA9IFdI SVBfU1RBVEVfUkVBRFk7Cj4+ICsgICAgYXZfbG9nKHdoaXAsIEFWX0xPR19JTkZPLCAiV0hJUDog TXV4ZXIgc3RhdGU9JWQsIGJ1ZmZlcl9zaXplPSVkLCBtYXhfcGFja2V0X3NpemU9JWQsICIKPj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICJlbGFwc2VkPSVkbXMoaW5pdDolZCxvZmZlcjol ZCxhbnN3ZXI6JWQsdWRwOiVkLGljZTolZCxkdGxzOiVkLHNydHA6JWQpXG4iLAo+PiArICAgICAg ICB3aGlwLT5zdGF0ZSwgYnVmZmVyX3NpemUsIG1heF9wYWNrZXRfc2l6ZSwgRUxBUFNFRCh3aGlw LT53aGlwX3N0YXJ0dGltZSwgYXZfZ2V0dGltZSgpKSwKPj4gKyAgICAgICAgRUxBUFNFRCh3aGlw LT53aGlwX3N0YXJ0dGltZSwgICB3aGlwLT53aGlwX2luaXRfdGltZSksCj4+ICsgICAgICAgIEVM QVBTRUQod2hpcC0+d2hpcF9pbml0X3RpbWUsICAgd2hpcC0+d2hpcF9vZmZlcl90aW1lKSwKPj4g KyAgICAgICAgRUxBUFNFRCh3aGlwLT53aGlwX29mZmVyX3RpbWUsICB3aGlwLT53aGlwX2Fuc3dl cl90aW1lKSwKPj4gKyAgICAgICAgRUxBUFNFRCh3aGlwLT53aGlwX2Fuc3dlcl90aW1lLCB3aGlw LT53aGlwX3VkcF90aW1lKSwKPj4gKyAgICAgICAgRUxBUFNFRCh3aGlwLT53aGlwX3VkcF90aW1l LCAgICB3aGlwLT53aGlwX2ljZV90aW1lKSwKPj4gKyAgICAgICAgRUxBUFNFRCh3aGlwLT53aGlw X2ljZV90aW1lLCAgICB3aGlwLT53aGlwX2R0bHNfdGltZSksCj4+ICsgICAgICAgIEVMQVBTRUQo d2hpcC0+d2hpcF9kdGxzX3RpbWUsICAgd2hpcC0+d2hpcF9zcnRwX3RpbWUpKTsKPj4gKwo+PiAr ZW5kOgo+PiArICAgIGlmIChydHBfY3R4KQo+PiArICAgICAgICBhdmlvX2NvbnRleHRfZnJlZSgm cnRwX2N0eC0+cGIpOwo+PiArICAgIGF2Zm9ybWF0X2ZyZWVfY29udGV4dChydHBfY3R4KTsKPj4g KyAgICBhdl9kaWN0X2ZyZWUoJm9wdHMpOwo+PiArICAgIHJldHVybiByZXQ7Cj4+ICt9Cj4+ICsK Pj4gKy8qKgo+PiArICogUlRDIGlzIGNvbm5lY3Rpb25sZXNzLCBmb3IgaXQncyBiYXNlZCBvbiBV RFAsIHNvIGl0IGNoZWNrIHdoZXRoZXIgc2VzaXNvbiBpcwo+PiArICogdGltZW91dC4gSW4gc3Vj aCBjYXNlLCBwdWJsaXNoZXJzIGNhbid0IHJlcHVibGlzaCB0aGUgc3RyZWFtIHV0aWwgdGhlIHNl c3Npb24KPj4gKyAqIGlzIHRpbWVvdXQuCj4+ICsgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0 byBub3RpZnkgdGhlIHNlcnZlciB0aGF0IHRoZSBzdHJlYW0gaXMgZW5kZWQsIHNlcnZlcgo+PiAr ICogc2hvdWxkIGV4cGlyZSBhbmQgY2xvc2UgdGhlIHNlc3Npb24gaW1tZWRpYXRlbHksIHNvIHRo YXQgcHVibGlzaGVycyBjYW4gcmVwdWJsaXNoCj4+ICsgKiB0aGUgc3RyZWFtIHF1aWNrbHkuCj4+ ICsgKi8KPj4gK3N0YXRpYyBpbnQgZGlzcG9zZV9zZXNzaW9uKEFWRm9ybWF0Q29udGV4dCAqcykK Pj4gK3sKPj4gKyAgICBpbnQgcmV0Owo+PiArICAgIGNoYXIgYnVmW01BWF9VUkxfU0laRV07Cj4+ ICsgICAgVVJMQ29udGV4dCAqd2hpcF91YyA9IE5VTEw7Cj4+ICsgICAgQVZEaWN0aW9uYXJ5ICpv cHRzID0gTlVMTDsKPj4gKyAgICBXSElQQ29udGV4dCAqd2hpcCA9IHMtPnByaXZfZGF0YTsKPj4g Kwo+PiArICAgIGlmICghd2hpcC0+d2hpcF9yZXNvdXJjZV91cmwpCj4+ICsgICAgICAgIHJldHVy biAwOwo+PiArCj4+ICsgICAgcmV0ID0gc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIkNhY2hl LUNvbnRyb2w6IG5vLWNhY2hlXHJcbiIpOwo+PiArICAgIGlmICh3aGlwLT5hdXRob3JpemF0aW9u KQo+PiArICAgICAgICByZXQgKz0gc25wcmludGYoYnVmICsgcmV0LCBzaXplb2YoYnVmKSAtIHJl dCwgIkF1dGhvcml6YXRpb246IEJlYXJlciAlc1xyXG4iLCB3aGlwLT5hdXRob3JpemF0aW9uKTsK Pj4gKyAgICBpZiAocmV0IDw9IDAgfHwgcmV0ID49IHNpemVvZihidWYpKSB7Cj4+ICsgICAgICAg IGF2X2xvZyh3aGlwLCBBVl9MT0dfRVJST1IsICJXSElQOiBGYWlsZWQgdG8gZ2VuZXJhdGUgaGVh ZGVycywgc2l6ZT0lZCwgJXNcbiIsIHJldCwgYnVmKTsKPj4gKyAgICAgICAgcmV0ID0gQVZFUlJP UihFSU5WQUwpOwo+PiArICAgICAgICBnb3RvIGVuZDsKPj4gKyAgICB9Cj4+ICsKPj4gKyAgICBh dl9kaWN0X3NldCgmb3B0cywgImhlYWRlcnMiLCBidWYsIDApOwo+PiArICAgIGF2X2RpY3Rfc2V0 X2ludCgmb3B0cywgImNodW5rZWRfcG9zdCIsIDAsIDApOwo+PiArICAgIGF2X2RpY3Rfc2V0KCZv cHRzLCAibWV0aG9kIiwgIkRFTEVURSIsIDApOwo+PiArICAgIHJldCA9IGZmdXJsX29wZW5fd2hp dGVsaXN0KCZ3aGlwX3VjLCB3aGlwLT53aGlwX3Jlc291cmNlX3VybCwgQVZJT19GTEFHX1JFQURf V1JJVEUsICZzLT5pbnRlcnJ1cHRfY2FsbGJhY2ssCj4+ICsgICAgICAgICZvcHRzLCBzLT5wcm90 b2NvbF93aGl0ZWxpc3QsIHMtPnByb3RvY29sX2JsYWNrbGlzdCwgTlVMTCk7Cj4+ICsgICAgaWYg KHJldCA8IDApIHsKPj4gKyAgICAgICAgYXZfbG9nKHdoaXAsIEFWX0xPR19FUlJPUiwgIldISVA6 IEZhaWxlZCB0byBERUxFVEUgdXJsPSVzXG4iLCB3aGlwLT53aGlwX3Jlc291cmNlX3VybCk7Cj4+ ICsgICAgICAgIGdvdG8gZW5kOwo+PiArICAgIH0KPj4gKwo+PiArICAgIHdoaWxlICgxKSB7Cj4+ ICsgICAgICAgIHJldCA9IGZmdXJsX3JlYWQod2hpcF91YywgYnVmLCBzaXplb2YoYnVmKSk7Cj4+ ICsgICAgICAgIGlmIChyZXQgPT0gQVZFUlJPUl9FT0YpIHsKPj4gKyAgICAgICAgICAgIHJldCA9 IDA7Cj4+ICsgICAgICAgICAgICBicmVhazsKPj4gKyAgICAgICAgfQo+PiArICAgICAgICBpZiAo cmV0IDwgMCkgewo+PiArICAgICAgICAgICAgYXZfbG9nKHdoaXAsIEFWX0xPR19FUlJPUiwgIldI SVA6IEZhaWxlZCB0byByZWFkIHJlc3BvbnNlIGZyb20gREVMRVRFIHVybD0lc1xuIiwgd2hpcC0+ d2hpcF9yZXNvdXJjZV91cmwpOwo+PiArICAgICAgICAgICAgZ290byBlbmQ7Cj4+ICsgICAgICAg IH0KPj4gKyAgICB9Cj4+ICsKPj4gKyAgICBhdl9sb2cod2hpcCwgQVZfTE9HX0lORk8sICJXSElQ OiBEaXNwb3NlIHJlc291cmNlICVzIG9rXG4iLCB3aGlwLT53aGlwX3Jlc291cmNlX3VybCk7Cj4+ ICsKPj4gK2VuZDoKPj4gKyAgICBmZnVybF9jbG9zZXAoJndoaXBfdWMpOwo+PiArICAgIGF2X2Rp Y3RfZnJlZSgmb3B0cyk7Cj4+ICsgICAgcmV0dXJuIHJldDsKPj4gK30KPj4gKwo+PiArLyoqCj4+ ICsgKiBTaW5jZSB0aGUgaDI2NF9tcDR0b2FubmV4YiBmaWx0ZXIgb25seSBwcm9jZXNzZXMgdGhl IE1QNCBJU09NIGZvcm1hdCBhbmQgYnlwYXNzZXMKPj4gKyAqIHRoZSBhbm5leGIgZm9ybWF0LCBp dCBpcyBuZWNlc3NhcnkgdG8gbWFudWFsbHkgaW5zZXJ0IGVuY29kZXIgbWV0YWRhdGEgYmVmb3Jl IGVhY2gKPj4gKyAqIElEUiB3aGVuIGRlYWxpbmcgd2l0aCBhbm5leGIgZm9ybWF0IHBhY2tldHMu IEZvciBpbnN0YW5jZSwgaW4gdGhlIGNhc2Ugb2YgSC4yNjQsCj4+ICsgKiB3ZSBtdXN0IGluc2Vy dCBTUFMgYW5kIFBQUyBiZWZvcmUgdGhlIElEUiBmcmFtZS4KPj4gKyAqLwo+PiArc3RhdGljIGlu dCBoMjY0X2FubmV4Yl9pbnNlcnRfc3BzX3BwcyhBVkZvcm1hdENvbnRleHQgKnMsIEFWUGFja2V0 ICpwa3QpCj4+ICt7Cj4+ICsgICAgaW50IHJldCA9IDA7Cj4+ICsgICAgQVZQYWNrZXQgKmluID0g TlVMTDsKPj4gKyAgICBBVkNvZGVjUGFyYW1ldGVycyAqcGFyID0gcy0+c3RyZWFtc1twa3QtPnN0 cmVhbV9pbmRleF0tPmNvZGVjcGFyOwo+PiArICAgIHVpbnQzMl90IG5hbF9zaXplID0gMCwgb3V0 X3NpemUgPSBwYXIgPyBwYXItPmV4dHJhZGF0YV9zaXplIDogMDsKPj4gKyAgICB1aW50OF90IHVu aXRfdHlwZSwgc3BzX3NlZW4gPSAwLCBwcHNfc2VlbiA9IDAsIGlkcl9zZWVuID0gMCwgKm91dDsK Pj4gKyAgICBjb25zdCB1aW50OF90ICpidWYsICpidWZfZW5kLCAqcjE7Cj4+ICsKPj4gKyAgICBp ZiAoIXBrdCB8fCAhcGt0LT5kYXRhIHx8IHBrdC0+c2l6ZSA8PSAwKQo+PiArICAgICAgICByZXR1 cm4gcmV0Owo+PiArICAgIGlmICghcGFyIHx8ICFwYXItPmV4dHJhZGF0YSB8fCBwYXItPmV4dHJh ZGF0YV9zaXplIDw9IDApCj4+ICsgICAgICAgIHJldHVybiByZXQ7Cj4+ICsKPj4gKyAgICAvKiBE aXNjb3ZlciBOQUxVIHR5cGUgZnJvbSBwYWNrZXQuICovCj4+ICsgICAgYnVmX2VuZCAgPSBwa3Qt PmRhdGEgKyBwa3QtPnNpemU7Cj4+ICsgICAgZm9yIChidWYgPSBmZl9uYWxfZmluZF9zdGFydGNv ZGUocGt0LT5kYXRhLCBidWZfZW5kKTsgYnVmIDwgYnVmX2VuZDsgYnVmICs9IG5hbF9zaXplKSB7 Cj4+ICsgICAgICAgIHdoaWxlICghKihidWYrKykpOwo+PiArICAgICAgICByMSA9IGZmX25hbF9m aW5kX3N0YXJ0Y29kZShidWYsIGJ1Zl9lbmQpOwo+PiArICAgICAgICBpZiAoKG5hbF9zaXplID0g cjEgLSBidWYpID4gMCkgewo+PiArICAgICAgICAgICAgdW5pdF90eXBlID0gKmJ1ZiAmIDB4MWY7 Cj4+ICsgICAgICAgICAgICBpZiAodW5pdF90eXBlID09IEgyNjRfTkFMX1NQUykgewo+PiArICAg ICAgICAgICAgICAgIHNwc19zZWVuID0gMTsKPj4gKyAgICAgICAgICAgIH0gZWxzZSBpZiAodW5p dF90eXBlID09IEgyNjRfTkFMX1BQUykgewo+PiArICAgICAgICAgICAgICAgIHBwc19zZWVuID0g MTsKPj4gKyAgICAgICAgICAgIH0gZWxzZSBpZiAodW5pdF90eXBlID09IEgyNjRfTkFMX0lEUl9T TElDRSkgewo+PiArICAgICAgICAgICAgICAgIGlkcl9zZWVuID0gMTsKPj4gKyAgICAgICAgICAg IH0KPj4gKwo+PiArICAgICAgICAgICAgb3V0X3NpemUgKz0gMyArIG5hbF9zaXplOwo+PiArICAg ICAgICB9Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgaWYgKCFpZHJfc2VlbiB8fCAoc3BzX3NlZW4g JiYgcHBzX3NlZW4pKQo+PiArICAgICAgICByZXR1cm4gcmV0Owo+PiArCj4+ICsgICAgLyogU2Vl IGF2X2JzZl9zZW5kX3BhY2tldCAqLwo+PiArICAgIGluID0gYXZfcGFja2V0X2FsbG9jKCk7Cj4+ ICsgICAgaWYgKCFpbikKPj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKPj4gKwo+ PiArICAgIHJldCA9IGF2X3BhY2tldF9tYWtlX3JlZmNvdW50ZWQocGt0KTsKPj4gKyAgICBpZiAo cmV0IDwgMCkKPj4gKyAgICAgICAgZ290byBmYWlsOwo+PiArCj4+ICsgICAgYXZfcGFja2V0X21v dmVfcmVmKGluLCBwa3QpOwo+PiArCj4+ICsgICAgLyogQ3JlYXRlIGEgbmV3IHBhY2tldCB3aXRo IHNwcy9wcHMgaW5zZXJ0ZWQuICovCj4+ICsgICAgcmV0ID0gYXZfbmV3X3BhY2tldChwa3QsIG91 dF9zaXplKTsKPj4gKyAgICBpZiAocmV0IDwgMCkKPj4gKyAgICAgICAgZ290byBmYWlsOwo+PiAr Cj4+ICsgICAgcmV0ID0gYXZfcGFja2V0X2NvcHlfcHJvcHMocGt0LCBpbik7Cj4+ICsgICAgaWYg KHJldCA8IDApCj4+ICsgICAgICAgIGdvdG8gZmFpbDsKPj4gKwo+PiArICAgIG1lbWNweShwa3Qt PmRhdGEsIHBhci0+ZXh0cmFkYXRhLCBwYXItPmV4dHJhZGF0YV9zaXplKTsKPj4gKyAgICBvdXQg PSBwa3QtPmRhdGEgKyBwYXItPmV4dHJhZGF0YV9zaXplOwo+PiArICAgIGJ1Zl9lbmQgID0gaW4t PmRhdGEgKyBpbi0+c2l6ZTsKPj4gKyAgICBmb3IgKGJ1ZiA9IGZmX25hbF9maW5kX3N0YXJ0Y29k ZShpbi0+ZGF0YSwgYnVmX2VuZCk7IGJ1ZiA8IGJ1Zl9lbmQ7IGJ1ZiArPSBuYWxfc2l6ZSkgewo+ PiArICAgICAgICB3aGlsZSAoISooYnVmKyspKTsKPj4gKyAgICAgICAgcjEgPSBmZl9uYWxfZmlu ZF9zdGFydGNvZGUoYnVmLCBidWZfZW5kKTsKPj4gKyAgICAgICAgaWYgKChuYWxfc2l6ZSA9IHIx IC0gYnVmKSA+IDApIHsKPj4gKyAgICAgICAgICAgIEFWX1dCMjQob3V0LCAweDAwMDAxKTsKPj4g KyAgICAgICAgICAgIG1lbWNweShvdXQgKyAzLCBidWYsIG5hbF9zaXplKTsKPj4gKyAgICAgICAg ICAgIG91dCArPSAzICsgbmFsX3NpemU7Cj4+ICsgICAgICAgIH0KPj4gKyAgICB9Cj4+ICsKPj4g K2ZhaWw6Cj4+ICsgICAgaWYgKHJldCA8IDApCj4+ICsgICAgICAgIGF2X3BhY2tldF91bnJlZihw a3QpOwo+PiArICAgIGF2X3BhY2tldF9mcmVlKCZpbik7Cj4+ICsKPj4gKyAgICByZXR1cm4gcmV0 Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgYXZfY29sZCBpbnQgd2hpcF9pbml0KEFWRm9ybWF0Q29u dGV4dCAqcykKPj4gK3sKPj4gKyAgICBpbnQgcmV0Owo+PiArICAgIFdISVBDb250ZXh0ICp3aGlw ID0gcy0+cHJpdl9kYXRhOwo+PiArCj4+ICsgICAgaWYgKChyZXQgPSBpbml0aWFsaXplKHMpKSA8 IDApCj4+ICsgICAgICAgIGdvdG8gZW5kOwo+PiArCj4+ICsgICAgaWYgKChyZXQgPSBwYXJzZV9j b2RlYyhzKSkgPCAwKQo+PiArICAgICAgICBnb3RvIGVuZDsKPj4gKwo+PiArICAgIGlmICgocmV0 ID0gZ2VuZXJhdGVfc2RwX29mZmVyKHMpKSA8IDApCj4+ICsgICAgICAgIGdvdG8gZW5kOwo+PiAr Cj4+ICsgICAgaWYgKChyZXQgPSBleGNoYW5nZV9zZHAocykpIDwgMCkKPj4gKyAgICAgICAgZ290 byBlbmQ7Cj4+ICsKPj4gKyAgICBpZiAoKHJldCA9IHBhcnNlX2Fuc3dlcihzKSkgPCAwKQo+PiAr ICAgICAgICBnb3RvIGVuZDsKPj4gKwo+PiArICAgIGlmICgocmV0ID0gdWRwX2Nvbm5lY3Qocykp IDwgMCkKPj4gKyAgICAgICAgZ290byBlbmQ7Cj4+ICsKPj4gKyAgICBpZiAoKHJldCA9IGljZV9k dGxzX2hhbmRzaGFrZShzKSkgPCAwKQo+PiArICAgICAgICBnb3RvIGVuZDsKPj4gKwo+PiArICAg IGlmICgocmV0ID0gc2V0dXBfc3J0cChzKSkgPCAwKQo+PiArICAgICAgICBnb3RvIGVuZDsKPj4g Kwo+PiArICAgIGlmICgocmV0ID0gY3JlYXRlX3J0cF9tdXhlcihzKSkgPCAwKQo+PiArICAgICAg ICBnb3RvIGVuZDsKPj4gKwo+PiArZW5kOgo+PiArICAgIGlmIChyZXQgPCAwICYmIHdoaXAtPnN0 YXRlIDwgV0hJUF9TVEFURV9GQUlMRUQpCj4+ICsgICAgICAgIHdoaXAtPnN0YXRlID0gV0hJUF9T VEFURV9GQUlMRUQ7Cj4+ICsgICAgaWYgKHJldCA+PSAwICYmIHdoaXAtPnN0YXRlID49IFdISVBf U1RBVEVfRkFJTEVEICYmIHdoaXAtPmR0bHNfcmV0IDwgMCkKPj4gKyAgICAgICAgcmV0ID0gd2hp cC0+ZHRsc19yZXQ7Cj4+ICsgICAgcmV0dXJuIHJldDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGlu dCB3aGlwX3dyaXRlX3BhY2tldChBVkZvcm1hdENvbnRleHQgKnMsIEFWUGFja2V0ICpwa3QpCj4+ ICt7Cj4+ICsgICAgaW50IHJldDsKPj4gKyAgICBXSElQQ29udGV4dCAqd2hpcCA9IHMtPnByaXZf ZGF0YTsKPj4gKyAgICBBVlN0cmVhbSAqc3QgPSBzLT5zdHJlYW1zW3BrdC0+c3RyZWFtX2luZGV4 XTsKPj4gKyAgICBBVkZvcm1hdENvbnRleHQgKnJ0cF9jdHggPSBzdC0+cHJpdl9kYXRhOwo+PiAr Cj4+ICsgICAgLyogVE9ETzogU2VuZCBiaW5kaW5nIHJlcXVlc3QgZXZlcnkgMXMgYXMgV2ViUlRD IGhlYXJ0YmVhdC4gKi8KPj4gKwo+PiArICAgIC8qKgo+PiArICAgICAqIFJlY2VpdmUgcGFja2V0 cyBmcm9tIHRoZSBzZXJ2ZXIgc3VjaCBhcyBJQ0UgYmluZGluZyByZXF1ZXN0cywgRFRMUyBtZXNz YWdlcywKPj4gKyAgICAgKiBhbmQgUlRDUCBsaWtlIFBMSSByZXF1ZXN0cywgdGhlbiByZXNwb25k IHRvIHRoZW0uCj4+ICsgICAgICovCj4+ICsgICAgcmV0ID0gZmZ1cmxfcmVhZCh3aGlwLT51ZHAs IHdoaXAtPmJ1Ziwgc2l6ZW9mKHdoaXAtPmJ1ZikpOwo+PiArICAgIGlmIChyZXQgPiAwKSB7Cj4+ ICsgICAgICAgIGlmIChpc19kdGxzX3BhY2tldCh3aGlwLT5idWYsIHJldCkpIHsKPj4gKyAgICAg ICAgICAgIGlmICgocmV0ID0gZmZ1cmxfd3JpdGUod2hpcC0+ZHRsc191Yywgd2hpcC0+YnVmLCBy ZXQpKSA8IDApIHsKPj4gKyAgICAgICAgICAgICAgICBhdl9sb2cod2hpcCwgQVZfTE9HX0VSUk9S LCAiV0hJUDogRmFpbGVkIHRvIGhhbmRsZSBEVExTIG1lc3NhZ2VcbiIpOwo+PiArICAgICAgICAg ICAgICAgIGdvdG8gZW5kOwo+PiArICAgICAgICAgICAgfQo+PiArICAgICAgICB9Cj4+ICsgICAg fSBlbHNlIGlmIChyZXQgIT0gQVZFUlJPUihFQUdBSU4pKSB7Cj4+ICsgICAgICAgIGF2X2xvZyh3 aGlwLCBBVl9MT0dfRVJST1IsICJXSElQOiBGYWlsZWQgdG8gcmVhZCBmcm9tIFVEUCBzb2NrZXRc biIpOwo+PiArICAgICAgICBnb3RvIGVuZDsKPj4gKyAgICB9Cj4+ICsKPj4gKyAgICBpZiAod2hp cC0+aDI2NF9hbm5leGJfaW5zZXJ0X3Nwc19wcHMgJiYgc3QtPmNvZGVjcGFyLT5jb2RlY19pZCA9 PSBBVl9DT0RFQ19JRF9IMjY0KSB7Cj4+ICsgICAgICAgIGlmICgocmV0ID0gaDI2NF9hbm5leGJf aW5zZXJ0X3Nwc19wcHMocywgcGt0KSkgPCAwKSB7Cj4+ICsgICAgICAgICAgICBhdl9sb2cod2hp cCwgQVZfTE9HX0VSUk9SLCAiV0hJUDogRmFpbGVkIHRvIGluc2VydCBTUFMvUFBTIGJlZm9yZSBJ RFJcbiIpOwo+PiArICAgICAgICAgICAgZ290byBlbmQ7Cj4+ICsgICAgICAgIH0KPj4gKyAgICB9 Cj4+ICsKPj4gKyAgICByZXQgPSBmZl93cml0ZV9jaGFpbmVkKHJ0cF9jdHgsIDAsIHBrdCwgcywg MCk7Cj4+ICsgICAgaWYgKHJldCA8IDApIHsKPj4gKyAgICAgICAgaWYgKHJldCA9PSBBVkVSUk9S KEVJTlZBTCkpIHsKPj4gKyAgICAgICAgICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfV0FSTklORywg IldISVA6IElnbm9yZSBmYWlsZWQgdG8gd3JpdGUgcGFja2V0PSVkQiwgcmV0PSVkXG4iLCBwa3Qt PnNpemUsIHJldCk7Cj4+ICsgICAgICAgICAgICByZXQgPSAwOwo+PiArICAgICAgICB9IGVsc2UK Pj4gKyAgICAgICAgICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfRVJST1IsICJXSElQOiBGYWlsZWQg dG8gd3JpdGUgcGFja2V0LCBzaXplPSVkXG4iLCBwa3QtPnNpemUpOwo+PiArICAgICAgICBnb3Rv IGVuZDsKPj4gKyAgICB9Cj4+ICsKPj4gK2VuZDoKPj4gKyAgICBpZiAocmV0IDwgMCAmJiB3aGlw LT5zdGF0ZSA8IFdISVBfU1RBVEVfRkFJTEVEKQo+PiArICAgICAgICB3aGlwLT5zdGF0ZSA9IFdI SVBfU1RBVEVfRkFJTEVEOwo+PiArICAgIGlmIChyZXQgPj0gMCAmJiB3aGlwLT5zdGF0ZSA+PSBX SElQX1NUQVRFX0ZBSUxFRCAmJiB3aGlwLT5kdGxzX3JldCA8IDApCj4+ICsgICAgICAgIHJldCA9 IHdoaXAtPmR0bHNfcmV0Owo+PiArICAgIGlmIChyZXQgPj0gMCAmJiB3aGlwLT5kdGxzX2Nsb3Nl ZCkKPj4gKyAgICAgICAgcmV0ID0gQVZFUlJPUihFSU8pOwo+PiArICAgIHJldHVybiByZXQ7Cj4+ ICt9Cj4+ICsKPj4gK3N0YXRpYyBhdl9jb2xkIHZvaWQgd2hpcF9kZWluaXQoQVZGb3JtYXRDb250 ZXh0ICpzKQo+PiArewo+PiArICAgIGludCBpLCByZXQ7Cj4+ICsgICAgV0hJUENvbnRleHQgKndo aXAgPSBzLT5wcml2X2RhdGE7Cj4+ICsKPj4gKyAgICByZXQgPSBkaXNwb3NlX3Nlc3Npb24ocyk7 Cj4+ICsgICAgaWYgKHJldCA8IDApCj4+ICsgICAgICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfV0FS TklORywgIldISVA6IEZhaWxlZCB0byBkaXNwb3NlIHJlc291cmNlLCByZXQ9JWRcbiIsIHJldCk7 Cj4+ICsKPj4gKyAgICBmb3IgKGkgPSAwOyBpIDwgcy0+bmJfc3RyZWFtczsgaSsrKSB7Cj4+ICsg ICAgICAgIEFWRm9ybWF0Q29udGV4dCogcnRwX2N0eCA9IHMtPnN0cmVhbXNbaV0tPnByaXZfZGF0 YTsKPj4gKyAgICAgICAgaWYgKCFydHBfY3R4KQo+PiArICAgICAgICAgICAgY29udGludWU7Cj4+ ICsKPj4gKyAgICAgICAgYXZfd3JpdGVfdHJhaWxlcihydHBfY3R4KTsKPj4gKyAgICAgICAgLyoq Cj4+ICsgICAgICAgICAqIEtlZXAgaW4gbWluZCB0aGF0IGl0IGlzIG5lY2Vzc2FyeSB0byBmcmVl IHRoZSBidWZmZXIgb2YgcGIgc2luY2Ugd2UgYWxsb2NhdGUKPj4gKyAgICAgICAgICogaXQgYW5k IHBhc3MgaXQgdG8gcGIgdXNpbmcgYXZpb19hbGxvY19jb250ZXh0LCB3aGlsZSBhdmlvX2NvbnRl eHRfZnJlZSBkb2VzCj4+ICsgICAgICAgICAqIG5vdCBwZXJmb3JtIHRoaXMgYWN0aW9uLgo+PiAr ICAgICAgICAgKi8KPj4gKyAgICAgICAgYXZfZnJlZXAoJnJ0cF9jdHgtPnBiLT5idWZmZXIpOwo+ PiArICAgICAgICBhdmlvX2NvbnRleHRfZnJlZSgmcnRwX2N0eC0+cGIpOwo+PiArICAgICAgICBh dmZvcm1hdF9mcmVlX2NvbnRleHQocnRwX2N0eCk7Cj4+ICsgICAgICAgIHMtPnN0cmVhbXNbaV0t PnByaXZfZGF0YSA9IE5VTEw7Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgYXZfZnJlZXAoJndoaXAt PnNkcF9vZmZlcik7Cj4+ICsgICAgYXZfZnJlZXAoJndoaXAtPnNkcF9hbnN3ZXIpOwo+PiArICAg IGF2X2ZyZWVwKCZ3aGlwLT53aGlwX3Jlc291cmNlX3VybCk7Cj4+ICsgICAgYXZfZnJlZXAoJndo aXAtPmljZV91ZnJhZ19yZW1vdGUpOwo+PiArICAgIGF2X2ZyZWVwKCZ3aGlwLT5pY2VfcHdkX3Jl bW90ZSk7Cj4+ICsgICAgYXZfZnJlZXAoJndoaXAtPmljZV9wcm90b2NvbCk7Cj4+ICsgICAgYXZf ZnJlZXAoJndoaXAtPmljZV9ob3N0KTsKPj4gKyAgICBhdl9mcmVlcCgmd2hpcC0+YXV0aG9yaXph dGlvbik7Cj4+ICsgICAgYXZfZnJlZXAoJndoaXAtPmNlcnRfZmlsZSk7Cj4+ICsgICAgYXZfZnJl ZXAoJndoaXAtPmtleV9maWxlKTsKPj4gKyAgICBmZnVybF9jbG9zZXAoJndoaXAtPnVkcCk7Cj4+ ICsgICAgZmZfc3J0cF9mcmVlKCZ3aGlwLT5zcnRwX2F1ZGlvX3NlbmQpOwo+PiArICAgIGZmX3Ny dHBfZnJlZSgmd2hpcC0+c3J0cF92aWRlb19zZW5kKTsKPj4gKyAgICBmZl9zcnRwX2ZyZWUoJndo aXAtPnNydHBfcnRjcF9zZW5kKTsKPj4gKyAgICBmZl9zcnRwX2ZyZWUoJndoaXAtPnNydHBfcmVj dik7Cj4+ICsgICAgZmZ1cmxfY2xvc2Uod2hpcC0+ZHRsc191Yyk7Cj4+ICt9Cj4+ICsKPj4gK3N0 YXRpYyBpbnQgd2hpcF9jaGVja19iaXRzdHJlYW0oQVZGb3JtYXRDb250ZXh0ICpzLCBBVlN0cmVh bSAqc3QsIGNvbnN0IEFWUGFja2V0ICpwa3QpCj4+ICt7Cj4+ICsgICAgaW50IHJldCA9IDEsIGV4 dHJhZGF0YV9pc29tID0gMDsKPj4gKyAgICB1aW50OF90ICpiID0gcGt0LT5kYXRhOwo+PiArICAg IFdISVBDb250ZXh0ICp3aGlwID0gcy0+cHJpdl9kYXRhOwo+PiArCj4+ICsgICAgaWYgKHN0LT5j b2RlY3Bhci0+Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfSDI2NCkgewo+PiArICAgICAgICBleHRy YWRhdGFfaXNvbSA9IHN0LT5jb2RlY3Bhci0+ZXh0cmFkYXRhX3NpemUgPiAwICYmIHN0LT5jb2Rl Y3Bhci0+ZXh0cmFkYXRhWzBdID09IDE7Cj4+ICsgICAgICAgIGlmIChwa3QtPnNpemUgPj0gNSAm JiBBVl9SQjMyKGIpICE9IDB4MDAwMDAwMSAmJiAoQVZfUkIyNChiKSAhPSAweDAwMDAwMSB8fCBl eHRyYWRhdGFfaXNvbSkpIHsKPj4gKyAgICAgICAgICAgIHJldCA9IGZmX3N0cmVhbV9hZGRfYml0 c3RyZWFtX2ZpbHRlcihzdCwgImgyNjRfbXA0dG9hbm5leGIiLCBOVUxMKTsKPj4gKyAgICAgICAg ICAgIGF2X2xvZyh3aGlwLCBBVl9MT0dfVkVSQk9TRSwgIldISVA6IEVuYWJsZSBCU0YgaDI2NF9t cDR0b2FubmV4YiwgcGFja2V0PVsleCAleCAleCAleCAleCAuLi5dLCBleHRyYWRhdGFfaXNvbT0l ZFxuIiwKPj4gKyAgICAgICAgICAgICAgICBiWzBdLCBiWzFdLCBiWzJdLCBiWzNdLCBiWzRdLCBl eHRyYWRhdGFfaXNvbSk7Cj4+ICsgICAgICAgIH0gZWxzZQo+PiArICAgICAgICAgICAgd2hpcC0+ aDI2NF9hbm5leGJfaW5zZXJ0X3Nwc19wcHMgPSAxOwo+PiArICAgIH0KPj4gKwo+PiArICAgIHJl dHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4gKyNkZWZpbmUgT0ZGU0VUKHgpIG9mZnNldG9mKFdISVBD b250ZXh0LCB4KQo+PiArI2RlZmluZSBERUMgQVZfT1BUX0ZMQUdfREVDT0RJTkdfUEFSQU0KPj4g K3N0YXRpYyBjb25zdCBBVk9wdGlvbiBvcHRpb25zW10gPSB7Cj4+ICsgICAgeyAiaGFuZHNoYWtl X3RpbWVvdXQiLCAgIlRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIGZvciBJQ0UgYW5kIERUTFMgaGFu ZHNoYWtlLiIsICAgICAgT0ZGU0VUKGhhbmRzaGFrZV90aW1lb3V0KSwgIEFWX09QVF9UWVBFX0lO VCwgICAgeyAuaTY0ID0gNTAwMCB9LCAgICAtMSwgSU5UX01BWCwgREVDIH0sCj4+ICsgICAgeyAi cGt0X3NpemUiLCAgICAgICAgICAgIlRoZSBtYXhpbXVtIHNpemUsIGluIGJ5dGVzLCBvZiBSVFAg cGFja2V0cyB0aGF0IHNlbmQgb3V0IiwgT0ZGU0VUKHBrdF9zaXplKSwgICAgICAgICAgIEFWX09Q VF9UWVBFX0lOVCwgICAgeyAuaTY0ID0gMTIwMCB9LCAgICAtMSwgSU5UX01BWCwgREVDIH0sCj4+ ICsgICAgeyAiYXV0aG9yaXphdGlvbiIsICAgICAgIlRoZSBvcHRpb25hbCBCZWFyZXIgdG9rZW4g Zm9yIFdISVAgQXV0aG9yaXphdGlvbiIsICAgICAgICAgT0ZGU0VUKGF1dGhvcml6YXRpb24pLCAg ICAgIEFWX09QVF9UWVBFX1NUUklORywgeyAuc3RyID0gTlVMTCB9LCAgICAgMCwgICAgICAgMCwg REVDIH0sCj4+ICsgICAgeyAiY2VydF9maWxlIiwgICAgICAgICAgIlRoZSBvcHRpb25hbCBjZXJ0 aWZpY2F0ZSBmaWxlIHBhdGggZm9yIERUTFMiLCAgICAgICAgICAgICAgT0ZGU0VUKGNlcnRfZmls ZSksICAgICAgICAgIEFWX09QVF9UWVBFX1NUUklORywgeyAuc3RyID0gTlVMTCB9LCAgICAgMCwg ICAgICAgMCwgREVDIH0sCj4+ICsgICAgeyAia2V5X2ZpbGUiLCAgICAgICAgICAgIlRoZSBvcHRp b25hbCBwcml2YXRlIGtleSBmaWxlIHBhdGggZm9yIERUTFMiLCAgICAgICAgICAgICAgT0ZGU0VU KGtleV9maWxlKSwgICAgICBBVl9PUFRfVFlQRV9TVFJJTkcsIHsgLnN0ciA9IE5VTEwgfSwgICAg IDAsICAgICAgIDAsIERFQyB9LAo+PiArICAgIHsgTlVMTCB9LAo+PiArfTsKPj4gKwo+PiArc3Rh dGljIGNvbnN0IEFWQ2xhc3Mgd2hpcF9tdXhlcl9jbGFzcyA9IHsKPj4gKyAgICAuY2xhc3NfbmFt ZSA9ICJXSElQIG11eGVyIiwKPj4gKyAgICAuaXRlbV9uYW1lICA9IGF2X2RlZmF1bHRfaXRlbV9u YW1lLAo+PiArICAgIC5vcHRpb24gICAgID0gb3B0aW9ucywKPj4gKyAgICAudmVyc2lvbiAgICA9 IExJQkFWVVRJTF9WRVJTSU9OX0lOVCwKPj4gK307Cj4+ICsKPj4gK2NvbnN0IEZGT3V0cHV0Rm9y bWF0IGZmX3doaXBfbXV4ZXIgPSB7Cj4+ICsgICAgLnAubmFtZSAgICAgICAgICAgICA9ICJ3aGlw IiwKPj4gKyAgICAucC5sb25nX25hbWUgICAgICAgID0gTlVMTF9JRl9DT05GSUdfU01BTEwoIldI SVAoV2ViUlRDLUhUVFAgaW5nZXN0aW9uIHByb3RvY29sKSBtdXhlciIpLAo+PiArICAgIC5wLmF1 ZGlvX2NvZGVjICAgICAgPSBBVl9DT0RFQ19JRF9PUFVTLAo+PiArICAgIC5wLnZpZGVvX2NvZGVj ICAgICAgPSBBVl9DT0RFQ19JRF9IMjY0LAo+PiArICAgIC5wLmZsYWdzICAgICAgICAgICAgPSBB VkZNVF9HTE9CQUxIRUFERVIgfCBBVkZNVF9OT0ZJTEUsCj4+ICsgICAgLnAucHJpdl9jbGFzcyAg ICAgICA9ICZ3aGlwX211eGVyX2NsYXNzLAo+PiArICAgIC5wcml2X2RhdGFfc2l6ZSAgICAgPSBz aXplb2YoV0hJUENvbnRleHQpLAo+PiArICAgIC5pbml0ICAgICAgICAgICAgICAgPSB3aGlwX2lu aXQsCj4+ICsgICAgLndyaXRlX3BhY2tldCAgICAgICA9IHdoaXBfd3JpdGVfcGFja2V0LAo+PiAr ICAgIC5kZWluaXQgICAgICAgICAgICAgPSB3aGlwX2RlaW5pdCwKPj4gKyAgICAuY2hlY2tfYml0 c3RyZWFtICAgID0gd2hpcF9jaGVja19iaXRzdHJlYW0sCj4+ICt9Owo+PiAtLQo+PiAyLjQ5LjAK Pj4gCj4+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4+ IGZmbXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QKPj4gZmZtcGVnLWRldmVsQGZmbXBlZy5vcmcKPj4g aHR0cHM6Ly9mZm1wZWcub3JnL21haWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVsCj4+IAo+PiBU byB1bnN1YnNjcmliZSwgdmlzaXQgbGluayBhYm92ZSwgb3IgZW1haWwKPj4gZmZtcGVnLWRldmVs LXJlcXVlc3RAZmZtcGVnLm9yZyB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJlIi4KPiAKPiBQdXNo ZWQsCj4gCj4gQlRXLCBpZiB5b3Ugb3RoZXIgZGV2ZWxvcGVycyB3YW50IGZpeCBvdGhlciBwcm9i bGVtcywgcGF0Y2h3ZWxjb21lLAo+IAo+IFRvIEphY2ssIHlvdSBjYW4gY29udGludWUgc3VibWl0 IG1vcmUgcGF0Y2hlcyBmb3Igd2hpcCBpbiBmZm1wZWcuCkkgd2lsbCBhZGQgc29tZSBkb2N1bWVu dGF0aW9uIGFib3V0IERUTFMgZmlyc3QsIGFuZCB0aGVuIHRyeSB0byBhZGQgbmV3IGZlYXR1cmVz IHRvIHdoaXAuIFRoYW5rcyB0byBAU2Vhbi1EZXIgZm9yIGhlbHBpbmcgbWUgcXVpY2tseSBmYW1p bGlhcml6ZSBteXNlbGYgd2l0aCBvcGVuc3NsIGFuZCBnZXQgdGhpcyBkb25lLiBJ4oCZbGwgaW1w cm92ZSB0aGlzIGZlYXR1cmUgd2l0aCBoaW3wn5iECj4gCj4gCj4gVGhhbmtzCj4gU3RldmVuCj4g X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiBmZm1wZWct ZGV2ZWwgbWFpbGluZyBsaXN0Cj4gZmZtcGVnLWRldmVsQGZmbXBlZy5vcmcKPiBodHRwczovL2Zm bXBlZy5vcmcvbWFpbG1hbi9saXN0aW5mby9mZm1wZWctZGV2ZWwKPiAKPiBUbyB1bnN1YnNjcmli ZSwgdmlzaXQgbGluayBhYm92ZSwgb3IgZW1haWwKPiBmZm1wZWctZGV2ZWwtcmVxdWVzdEBmZm1w ZWcub3JnIHdpdGggc3ViamVjdCAidW5zdWJzY3JpYmUiLgoKX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KZmZtcGVnLWRldmVsIG1haWxpbmcgbGlzdApmZm1w ZWctZGV2ZWxAZmZtcGVnLm9yZwpodHRwczovL2ZmbXBlZy5vcmcvbWFpbG1hbi9saXN0aW5mby9m Zm1wZWctZGV2ZWwKClRvIHVuc3Vic2NyaWJlLCB2aXNpdCBsaW5rIGFib3ZlLCBvciBlbWFpbApm Zm1wZWctZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdpdGggc3ViamVjdCAidW5zdWJzY3JpYmUi Lgo=