From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id CCAC7469AB for ; Mon, 31 Jul 2023 20:05:30 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id AF35068C124; Mon, 31 Jul 2023 23:05:26 +0300 (EEST) Received: from mail-lf1-f41.google.com (mail-lf1-f41.google.com [209.85.167.41]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 60F8368BD8D for ; Mon, 31 Jul 2023 23:05:20 +0300 (EEST) Received: by mail-lf1-f41.google.com with SMTP id 2adb3069b0e04-4fe0e23a4b1so7767354e87.3 for ; Mon, 31 Jul 2023 13:05:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1690833919; x=1691438719; h=content-transfer-encoding:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=cOKwRPxR0RswLBj5A/b/j5EK8sWc5usZUwCwsMEExv4=; b=PwHX5X9b749FHUu0FqAFC3tY/zFMMCT1NpWrA0qGHIyR5Cdut2pZ5W9QF6V3BIZzCl BWXFAy+ZFOS/4ptBclZlll57CIEOlxLHDxVho+z5qCEG62HC32OJYGS1iQTbVpNRzIPV utBxIjqYoWfnn/3AO4FOlr1M+uyFGmhkKljqrF2eXgxJ6gjx2eG2uf54vQBeB/p3DgMH vKACmGmd9urGM5Lhyfsg9UqqfyAb9Vjb3KtGeW+qdRVCLi3xDgvX5KvlDETG5RNQEtZA MYySn3wEow1pYKrLeUYSnlzV9wAaHBAVb+V1EP2sx6uYLSD+5wBCHLItVifVNomv2TSI aX9Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690833919; x=1691438719; h=content-transfer-encoding:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=cOKwRPxR0RswLBj5A/b/j5EK8sWc5usZUwCwsMEExv4=; b=Ay5Tlo6ChUTS1RnqiYeAPWn/wYZS6L+m54vXfNkw4vOWtMDunCEsCl99MTGVLdQhUl nNPeDWnn6XOWh1nb7an0nI4LDNdCpMlybITIq9F5p/ZlvI0E/12l+2LkBeqEmhBoCO91 wadjCDSTkJPaXqNuE1aTn1vEf0FzhRDvuTIj+S6DuwSv6xm8sc1+KdiW3qsOyPEYVudR ZdLcjlxhu9AzTy42ndYlVZe4QvnELgLM5UU1fS6PJlL03zheoLspAlNbk39AZnm2Mi3a nNZTXfiA4NmpQNoqVl4piFc/tQWFycotQKIzbyOFfOjOsK0KQq9yr1d8Of7F5IL2pJbj rCGA== X-Gm-Message-State: ABy/qLaKFWAIOdCahSZrdrnFqCJEGmf/Wl1D8zx/YCdrzZp+WYVcfM3v 2OWuMCmBD4+pjXEN65JaOX40+QGe6knc26js41UGaf0WIxEsWioW X-Google-Smtp-Source: APBJJlEWRAOey0V2+QE68K/0/2Dr2rTLuNfLYK8bR8UIihSBwtpC37+vsiiQW9MJqpejX7fSe+GVwUIOe6ZduNYfMXo= X-Received: by 2002:a05:6512:5cf:b0:4fb:61ea:95dc with SMTP id o15-20020a05651205cf00b004fb61ea95dcmr552015lfo.7.1690833918206; Mon, 31 Jul 2023 13:05:18 -0700 (PDT) MIME-Version: 1.0 References: <20230718031203.87803-1-fei.w.wang@intel.com> <20230718031203.87803-6-fei.w.wang@intel.com> In-Reply-To: <20230718031203.87803-6-fei.w.wang@intel.com> From: Neal Gompa Date: Mon, 31 Jul 2023 21:04:41 +0100 Message-ID: To: FFmpeg development discussions and patches Subject: Re: [FFmpeg-devel] [PATCH v2 6/6] lavc/vaapi_encode: Add VAAPI AV1 encoder 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: T24gVHVlLCBKdWwgMTgsIDIwMjMgYXQgNDoxM+KAr0FNIEZlaSBXYW5nCjxmZWkudy53YW5nLWF0 LWludGVsLmNvbUBmZm1wZWcub3JnPiB3cm90ZToKPgo+IFNpZ25lZC1vZmYtYnk6IEZlaSBXYW5n IDxmZWkudy53YW5nQGludGVsLmNvbT4KPiAtLS0KPiB1cGRhdGUKPiAxLiBzZXQgY29sb3JfcmFu Z2UgaW4gc2VxdWVuY2UgaGVhZGVyLgo+Cj4gIENoYW5nZWxvZyAgICAgICAgICAgICAgICAgICAg IHwgICAgMSArCj4gIGNvbmZpZ3VyZSAgICAgICAgICAgICAgICAgICAgIHwgICAgMyArCj4gIGRv Yy9lbmNvZGVycy50ZXhpICAgICAgICAgICAgIHwgICAxMyArCj4gIGxpYmF2Y29kZWMvTWFrZWZp bGUgICAgICAgICAgIHwgICAgMSArCj4gIGxpYmF2Y29kZWMvYWxsY29kZWNzLmMgICAgICAgIHwg ICAgMSArCj4gIGxpYmF2Y29kZWMvdmFhcGlfZW5jb2RlLmMgICAgIHwgIDEyNSArKystCj4gIGxp YmF2Y29kZWMvdmFhcGlfZW5jb2RlLmggICAgIHwgICAxMiArCj4gIGxpYmF2Y29kZWMvdmFhcGlf ZW5jb2RlX2F2MS5jIHwgMTIyOSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAg OCBmaWxlcyBjaGFuZ2VkLCAxMzY3IGluc2VydGlvbnMoKyksIDE4IGRlbGV0aW9ucygtKQo+ICBj cmVhdGUgbW9kZSAxMDA2NDQgbGliYXZjb2RlYy92YWFwaV9lbmNvZGVfYXYxLmMKPgo+IGRpZmYg LS1naXQgYS9DaGFuZ2Vsb2cgYi9DaGFuZ2Vsb2cKPiBpbmRleCAzODc2MDgyODQ0Li43YWU5Yjg1 ZDUyIDEwMDY0NAo+IC0tLSBhL0NoYW5nZWxvZwo+ICsrKyBiL0NoYW5nZWxvZwo+IEBAIC0yNSw2 ICsyNSw3IEBAIHZlcnNpb24gPG5leHQ+Ogo+ICAtIFJhdyBWVkMgYml0c3RyZWFtIHBhcnNlciwg bXV4ZXIgYW5kIGRlbXV4ZXIKPiAgLSBCaXRzdHJlYW0gZmlsdGVyIGZvciBlZGl0aW5nIG1ldGFk YXRhIGluIFZWQyBzdHJlYW1zCj4gIC0gQml0c3RyZWFtIGZpbHRlciBmb3IgY29udmVydGluZyBW VkMgZnJvbSBNUDQgdG8gQW5uZXggQgo+ICstIFZBQVBJIEFWMSBlbmNvZGVyCj4KPiAgdmVyc2lv biA2LjA6Cj4gIC0gUmFkaWFuY2UgSERSIGltYWdlIHN1cHBvcnQKPiBkaWZmIC0tZ2l0IGEvY29u ZmlndXJlIGIvY29uZmlndXJlCj4gaW5kZXggYjAxOGFiZjEzOS4uZmJjNzI5YjVjNiAxMDA3NTUK PiAtLS0gYS9jb25maWd1cmUKPiArKysgYi9jb25maWd1cmUKPiBAQCAtMzMyMyw2ICszMzIzLDgg QEAgYXYxX3Fzdl9kZWNvZGVyX3NlbGVjdD0icXN2ZGVjIgo+ICBhdjFfcXN2X2VuY29kZXJfc2Vs ZWN0PSJxc3ZlbmMiCj4gIGF2MV9xc3ZfZW5jb2Rlcl9kZXBzPSJsaWJ2cGwiCj4gIGF2MV9hbWZf ZW5jb2Rlcl9kZXBzPSJhbWYiCj4gK2F2MV92YWFwaV9lbmNvZGVyX2RlcHM9IlZBRW5jUGljdHVy ZVBhcmFtZXRlckJ1ZmZlckFWMSIKPiArYXYxX3ZhYXBpX2VuY29kZXJfc2VsZWN0PSJjYnNfYXYx IHZhYXBpX2VuY29kZSIKPgo+ICAjIHBhcnNlcnMKPiAgYWFjX3BhcnNlcl9zZWxlY3Q9ImFkdHNf aGVhZGVyIG1wZWc0YXVkaW8iCj4gQEAgLTcxMDQsNiArNzEwNiw3IEBAIGlmIGVuYWJsZWQgdmFh cGk7IHRoZW4KPiAgICAgIGNoZWNrX3R5cGUgInZhL3ZhLmggdmEvdmFfZW5jX2pwZWcuaCIgIlZB RW5jUGljdHVyZVBhcmFtZXRlckJ1ZmZlckpQRUciCj4gICAgICBjaGVja190eXBlICJ2YS92YS5o IHZhL3ZhX2VuY192cDguaCIgICJWQUVuY1BpY3R1cmVQYXJhbWV0ZXJCdWZmZXJWUDgiCj4gICAg ICBjaGVja190eXBlICJ2YS92YS5oIHZhL3ZhX2VuY192cDkuaCIgICJWQUVuY1BpY3R1cmVQYXJh bWV0ZXJCdWZmZXJWUDkiCj4gKyAgICBjaGVja190eXBlICJ2YS92YS5oIHZhL3ZhX2VuY19hdjEu aCIgICJWQUVuY1BpY3R1cmVQYXJhbWV0ZXJCdWZmZXJBVjEiCj4gIGZpCj4KPiAgaWYgZW5hYmxl ZF9hbGwgb3BlbmNsIGxpYmRybSA7IHRoZW4KPiBkaWZmIC0tZ2l0IGEvZG9jL2VuY29kZXJzLnRl eGkgYi9kb2MvZW5jb2RlcnMudGV4aQo+IGluZGV4IDI1ZDZiN2YwOWUuLmZiMzMxZWJkOGUgMTAw NjQ0Cj4gLS0tIGEvZG9jL2VuY29kZXJzLnRleGkKPiArKysgYi9kb2MvZW5jb2RlcnMudGV4aQo+ IEBAIC0zOTkxLDYgKzM5OTEsMTkgQEAgQXZlcmFnZSB2YXJpYWJsZSBiaXRyYXRlLgo+ICBFYWNo IGVuY29kZXIgYWxzbyBoYXMgaXRzIG93biBzcGVjaWZpYyBvcHRpb25zOgo+ICBAdGFibGUgQG9w dGlvbgo+Cj4gK0BpdGVtIGF2MV92YWFwaQo+ICtAb3B0aW9ue3Byb2ZpbGV9IHNldHMgdGhlIHZh bHVlIG9mIEBlbXBoe3NlcV9wcm9maWxlfS4KPiArQG9wdGlvbnt0aWVyfSBzZXRzIHRoZSB2YWx1 ZSBvZiBAZW1waHtzZXFfdGllcn0uCj4gK0BvcHRpb257bGV2ZWx9IHNldHMgdGhlIHZhbHVlIG9m IEBlbXBoe3NlcV9sZXZlbF9pZHh9Lgo+ICsKPiArQHRhYmxlIEBvcHRpb24KPiArQGl0ZW0gdGls ZXMKPiArU2V0IHRoZSBudW1iZXIgb2YgdGlsZXMgdG8gZW5jb2RlIHRoZSBpbnB1dCB2aWRlbyB3 aXRoLCBhcyBjb2x1bW5zIHggcm93cy4KPiArKGRlZmF1bHQgaXMgMXgxKS4KPiArQGl0ZW0gdGls ZV9ncm91cHMKPiArU2V0IHRpbGUgZ3JvdXBzIG51bWJlciAoZGVmYXVsdCBpcyAxKS4KPiArQGVu ZCB0YWJsZQo+ICsKPiAgQGl0ZW0gaDI2NF92YWFwaQo+ICBAb3B0aW9ue3Byb2ZpbGV9IHNldHMg dGhlIHZhbHVlIG9mIEBlbXBoe3Byb2ZpbGVfaWRjfSBhbmQgdGhlIEBlbXBoe2NvbnN0cmFpbnRf c2V0Kl9mbGFnfXMuCj4gIEBvcHRpb257bGV2ZWx9IHNldHMgdGhlIHZhbHVlIG9mIEBlbXBoe2xl dmVsX2lkY30uCj4gZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvTWFrZWZpbGUgYi9saWJhdmNvZGVj L01ha2VmaWxlCj4gaW5kZXggM2NkNTk5N2U2NC4uZmUxZTZhYTk5ZCAxMDA2NDQKPiAtLS0gYS9s aWJhdmNvZGVjL01ha2VmaWxlCj4gKysrIGIvbGliYXZjb2RlYy9NYWtlZmlsZQo+IEBAIC0yNTks NiArMjU5LDcgQEAgT0JKUy0kKENPTkZJR19BVjFfTUVESUFDT0RFQ19ERUNPREVSKSAgKz0gbWVk aWFjb2RlY2RlYy5vCj4gIE9CSlMtJChDT05GSUdfQVYxX01FRElBQ09ERUNfRU5DT0RFUikgICs9 IG1lZGlhY29kZWNlbmMubwo+ICBPQkpTLSQoQ09ORklHX0FWMV9OVkVOQ19FTkNPREVSKSAgICAg ICArPSBudmVuY19hdjEubyBudmVuYy5vCj4gIE9CSlMtJChDT05GSUdfQVYxX1FTVl9FTkNPREVS KSAgICAgICAgICs9IHFzdmVuY19hdjEubwo+ICtPQkpTLSQoQ09ORklHX0FWMV9WQUFQSV9FTkNP REVSKSAgICAgICArPSB2YWFwaV9lbmNvZGVfYXYxLm8gYXYxX3Byb2ZpbGVfbGV2ZWwubwo+ICBP QkpTLSQoQ09ORklHX0FWUk5fREVDT0RFUikgICAgICAgICAgICArPSBhdnJuZGVjLm8KPiAgT0JK Uy0kKENPTkZJR19BVlJQX0RFQ09ERVIpICAgICAgICAgICAgKz0gcjIxMGRlYy5vCj4gIE9CSlMt JChDT05GSUdfQVZSUF9FTkNPREVSKSAgICAgICAgICAgICs9IHIyMTBlbmMubwo+IGRpZmYgLS1n aXQgYS9saWJhdmNvZGVjL2FsbGNvZGVjcy5jIGIvbGliYXZjb2RlYy9hbGxjb2RlY3MuYwo+IGlu ZGV4IDg3NzVkMTVhNGYuLmM0M2MxZDdiNDggMTAwNjQ0Cj4gLS0tIGEvbGliYXZjb2RlYy9hbGxj b2RlY3MuYwo+ICsrKyBiL2xpYmF2Y29kZWMvYWxsY29kZWNzLmMKPiBAQCAtODQ0LDYgKzg0NCw3 IEBAIGV4dGVybiBjb25zdCBGRkNvZGVjIGZmX2F2MV9udmVuY19lbmNvZGVyOwo+ICBleHRlcm4g Y29uc3QgRkZDb2RlYyBmZl9hdjFfcXN2X2RlY29kZXI7Cj4gIGV4dGVybiBjb25zdCBGRkNvZGVj IGZmX2F2MV9xc3ZfZW5jb2RlcjsKPiAgZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZfYXYxX2FtZl9l bmNvZGVyOwo+ICtleHRlcm4gY29uc3QgRkZDb2RlYyBmZl9hdjFfdmFhcGlfZW5jb2RlcjsKPiAg ZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZfbGlib3BlbmgyNjRfZW5jb2RlcjsKPiAgZXh0ZXJuIGNv bnN0IEZGQ29kZWMgZmZfbGlib3BlbmgyNjRfZGVjb2RlcjsKPiAgZXh0ZXJuIGNvbnN0IEZGQ29k ZWMgZmZfaDI2NF9hbWZfZW5jb2RlcjsKPiBkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy92YWFwaV9l bmNvZGUuYyBiL2xpYmF2Y29kZWMvdmFhcGlfZW5jb2RlLmMKPiBpbmRleCAyNjA0ZjEyYjllLi4y OTA3ZTE1OWZiIDEwMDY0NAo+IC0tLSBhL2xpYmF2Y29kZWMvdmFhcGlfZW5jb2RlLmMKPiArKysg Yi9saWJhdmNvZGVjL3ZhYXBpX2VuY29kZS5jCj4gQEAgLTY2OSw2ICs2NjksMTUgQEAgc3RhdGlj IGludCB2YWFwaV9lbmNvZGVfc2V0X291dHB1dF90aW1lc3RhbXAoQVZDb2RlY0NvbnRleHQgKmF2 Y3R4LAo+ICB7Cj4gICAgICBWQUFQSUVuY29kZUNvbnRleHQgKmN0eCA9IGF2Y3R4LT5wcml2X2Rh dGE7Cj4KPiArICAgIC8vIEFWMSBwYWNrcyBQIGZyYW1lIGFuZCBuZXh0IEIgZnJhbWUgaW50byBv bmUgcGt0LCBhbmQgdXNlcyB0aGUgb3RoZXIKPiArICAgIC8vIHJlcGVhdCBmcmFtZSBoZWFkZXIg cGt0IGF0IHRoZSBkaXNwbGF5IG9yZGVyIHBvc2l0aW9uIG9mIHRoZSBQIGZyYW1lCj4gKyAgICAv LyB0byBpbmRpY2F0ZSBpdHMgZnJhbWUgaW5kZXguIEVhY2ggZnJhbWUgaGFzIGEgY29ycmVzcG9u ZGluZyBwa3QgaW4gaXRzCj4gKyAgICAvLyBkaXNwbGF5IG9yZGVyIHBvc2l0aW9uLiBTbyBkb24n dCBuZWVkIHRvIGNvbnNpZGVyIGRlbGF5IGZvciBBVjEgdGltZXN0YW1wLgo+ICsgICAgaWYgKGF2 Y3R4LT5jb2RlY19pZCA9PSBBVl9DT0RFQ19JRF9BVjEpIHsKPiArICAgICAgICBwa3QtPmR0cyA9 IHBrdC0+cHRzIC0gY3R4LT5kdHNfcHRzX2RpZmY7Cj4gKyAgICAgICAgcmV0dXJuIDA7Cj4gKyAg ICB9Cj4gKwo+ICAgICAgaWYgKGN0eC0+b3V0cHV0X2RlbGF5ID09IDApIHsKPiAgICAgICAgICBw a3QtPmR0cyA9IHBrdC0+cHRzOwo+ICAgICAgfSBlbHNlIGlmIChwaWMtPmVuY29kZV9vcmRlciA8 IGN0eC0+ZGVjb2RlX2RlbGF5KSB7Cj4gQEAgLTY4OSw5ICs2OTgsMTAgQEAgc3RhdGljIGludCB2 YWFwaV9lbmNvZGVfb3V0cHV0KEFWQ29kZWNDb250ZXh0ICphdmN0eCwKPiAgewo+ICAgICAgVkFB UElFbmNvZGVDb250ZXh0ICpjdHggPSBhdmN0eC0+cHJpdl9kYXRhOwo+ICAgICAgVkFDb2RlZEJ1 ZmZlclNlZ21lbnQgKmJ1Zl9saXN0LCAqYnVmOwo+IC0gICAgVkFTdGF0dXMgdmFzOwo+ICsgICAg QVZQYWNrZXQgKnBrdF9wdHIgPSBwa3Q7Cj4gICAgICBpbnQgdG90YWxfc2l6ZSA9IDA7Cj4gICAg ICB1aW50OF90ICpwdHI7Cj4gKyAgICBWQVN0YXR1cyB2YXM7Cj4gICAgICBpbnQgZXJyOwo+Cj4g ICAgICBlcnIgPSB2YWFwaV9lbmNvZGVfd2FpdChhdmN0eCwgcGljKTsKPiBAQCAtNzExLDExICs3 MjEsNTIgQEAgc3RhdGljIGludCB2YWFwaV9lbmNvZGVfb3V0cHV0KEFWQ29kZWNDb250ZXh0ICph dmN0eCwKPiAgICAgIGZvciAoYnVmID0gYnVmX2xpc3Q7IGJ1ZjsgYnVmID0gYnVmLT5uZXh0KQo+ ICAgICAgICAgIHRvdGFsX3NpemUgKz0gYnVmLT5zaXplOwo+Cj4gLSAgICBlcnIgPSBmZl9nZXRf ZW5jb2RlX2J1ZmZlcihhdmN0eCwgcGt0LCB0b3RhbF9zaXplLCAwKTsKPiAtICAgIHB0ciA9IHBr dC0+ZGF0YTsKPiArICAgIC8qKiByZXBhY2sgYXYxIGNvZGVkIGZyYW1lIGZvciBub3QgZGlzcGxh eSBhbmQgcmVwZWF0IGZyYW1lcyAqLwo+ICsgICAgaWYgKGF2Y3R4LT5jb2RlY19pZCA9PSBBVl9D T0RFQ19JRF9BVjEpIHsKPiArICAgICAgICBpbnQgZGlzcGxheV9mcmFtZSA9IHBpYy0+ZGlzcGxh eV9vcmRlciA8PSBwaWMtPmVuY29kZV9vcmRlcjsKPgo+IC0gICAgaWYgKGVyciA8IDApCj4gLSAg ICAgICAgZ290byBmYWlsX21hcHBlZDsKPiArICAgICAgICBpZiAoZGlzcGxheV9mcmFtZSkgewo+ ICsgICAgICAgICAgICB0b3RhbF9zaXplICs9IGN0eC0+aGVhZGVyX2RhdGFfc2l6ZTsKPiArICAg ICAgICAgICAgZXJyID0gZmZfZ2V0X2VuY29kZV9idWZmZXIoYXZjdHgsIHBrdCwgdG90YWxfc2l6 ZSwgMCk7Cj4gKyAgICAgICAgICAgIGlmIChlcnIgPCAwKQo+ICsgICAgICAgICAgICAgICAgZ290 byBmYWlsX21hcHBlZDsKPiArICAgICAgICAgICAgcHRyID0gcGt0LT5kYXRhOwo+ICsKPiArICAg ICAgICAgICAgaWYgKGN0eC0+aGVhZGVyX2RhdGFfc2l6ZSkgewo+ICsgICAgICAgICAgICAgICAg bWVtY3B5KHB0ciwgY3R4LT5oZWFkZXJfZGF0YSwgY3R4LT5oZWFkZXJfZGF0YV9zaXplKTsKPiAr ICAgICAgICAgICAgICAgIHB0ciArPSBjdHgtPmhlYWRlcl9kYXRhX3NpemU7Cj4gKyAgICAgICAg ICAgICAgICBjdHgtPmhlYWRlcl9kYXRhX3NpemUgPSAwOwo+ICsgICAgICAgICAgICB9Cj4gKyAg ICAgICAgfSBlbHNlIHsKPiArICAgICAgICAgICAgY3R4LT5oZWFkZXJfZGF0YSA9IGF2X3JlYWxs b2MoY3R4LT5oZWFkZXJfZGF0YSwgdG90YWxfc2l6ZSk7Cj4gKyAgICAgICAgICAgIGlmICghY3R4 LT5oZWFkZXJfZGF0YSkgewo+ICsgICAgICAgICAgICAgICAgZXJyID0gQVZFUlJPUihFTk9NRU0p Owo+ICsgICAgICAgICAgICAgICAgZ290byBmYWlsX21hcHBlZDsKPiArICAgICAgICAgICAgfQo+ ICsgICAgICAgICAgICBwdHIgPSBjdHgtPmhlYWRlcl9kYXRhOwo+ICsgICAgICAgICAgICBjdHgt PmhlYWRlcl9kYXRhX3NpemUgPSB0b3RhbF9zaXplOwo+ICsKPiArICAgICAgICAgICAgaWYgKHBp Yy0+dGFpbF9zaXplKSB7Cj4gKyAgICAgICAgICAgICAgICBpZiAoY3R4LT50YWlsX3BrdC0+c2l6 ZSkgewo+ICsgICAgICAgICAgICAgICAgICAgIGVyciA9IEFWRVJST1IoQVZFUlJPUl9CVUcpOwo+ ICsgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbF9tYXBwZWQ7Cj4gKyAgICAgICAgICAgICAg ICB9Cj4gKwo+ICsgICAgICAgICAgICAgICAgZXJyID0gZmZfZ2V0X2VuY29kZV9idWZmZXIoYXZj dHgsIGN0eC0+dGFpbF9wa3QsIHBpYy0+dGFpbF9zaXplLCAwKTsKPiArICAgICAgICAgICAgICAg IGlmIChlcnIgPCAwKQo+ICsgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbF9tYXBwZWQ7Cj4g Kwo+ICsgICAgICAgICAgICAgICAgbWVtY3B5KGN0eC0+dGFpbF9wa3QtPmRhdGEsIHBpYy0+dGFp bF9kYXRhLCBwaWMtPnRhaWxfc2l6ZSk7Cj4gKyAgICAgICAgICAgICAgICBwa3RfcHRyID0gY3R4 LT50YWlsX3BrdDsKPiArICAgICAgICAgICAgfQo+ICsgICAgICAgIH0KPiArICAgIH0gZWxzZSB7 Cj4gKyAgICAgICAgZXJyID0gZmZfZ2V0X2VuY29kZV9idWZmZXIoYXZjdHgsIHBrdCwgdG90YWxf c2l6ZSwgMCk7Cj4gKyAgICAgICAgcHRyID0gcGt0LT5kYXRhOwo+ICsKPiArICAgICAgICBpZiAo ZXJyIDwgMCkKPiArICAgICAgICAgICAgZ290byBmYWlsX21hcHBlZDsKPiArICAgIH0KPgo+ICAg ICAgZm9yIChidWYgPSBidWZfbGlzdDsgYnVmOyBidWYgPSBidWYtPm5leHQpIHsKPiAgICAgICAg ICBhdl9sb2coYXZjdHgsIEFWX0xPR19ERUJVRywgIk91dHB1dCBidWZmZXI6ICV1IGJ5dGVzICIK PiBAQCAtNzI2LDEwICs3NzcsMTAgQEAgc3RhdGljIGludCB2YWFwaV9lbmNvZGVfb3V0cHV0KEFW Q29kZWNDb250ZXh0ICphdmN0eCwKPiAgICAgIH0KPgo+ICAgICAgaWYgKHBpYy0+dHlwZSA9PSBQ SUNUVVJFX1RZUEVfSURSKQo+IC0gICAgICAgIHBrdC0+ZmxhZ3MgfD0gQVZfUEtUX0ZMQUdfS0VZ Owo+ICsgICAgICAgIHBrdF9wdHItPmZsYWdzIHw9IEFWX1BLVF9GTEFHX0tFWTsKPgo+IC0gICAg cGt0LT5wdHMgPSBwaWMtPnB0czsKPiAtICAgIHBrdC0+ZHVyYXRpb24gPSBwaWMtPmR1cmF0aW9u Owo+ICsgICAgcGt0X3B0ci0+cHRzID0gcGljLT5wdHM7Cj4gKyAgICBwa3RfcHRyLT5kdXJhdGlv biA9IHBpYy0+ZHVyYXRpb247Cj4KPiAgICAgIHZhcyA9IHZhVW5tYXBCdWZmZXIoY3R4LT5od2N0 eC0+ZGlzcGxheSwgcGljLT5vdXRwdXRfYnVmZmVyKTsKPiAgICAgIGlmICh2YXMgIT0gVkFfU1RB VFVTX1NVQ0NFU1MpIHsKPiBAQCAtNzQyLDggKzc5Myw4IEBAIHN0YXRpYyBpbnQgdmFhcGlfZW5j b2RlX291dHB1dChBVkNvZGVjQ29udGV4dCAqYXZjdHgsCj4gICAgICAvLyBmb3Igbm8tZGVsYXkg ZW5jb2RlcnMgdGhpcyBpcyBoYW5kbGVkIGluIGdlbmVyaWMgY29kZWMKPiAgICAgIGlmIChhdmN0 eC0+Y29kZWMtPmNhcGFiaWxpdGllcyAmIEFWX0NPREVDX0NBUF9ERUxBWSAmJgo+ICAgICAgICAg IGF2Y3R4LT5mbGFncyAmIEFWX0NPREVDX0ZMQUdfQ09QWV9PUEFRVUUpIHsKPiAtICAgICAgICBw a3QtPm9wYXF1ZSAgICAgPSBwaWMtPm9wYXF1ZTsKPiAtICAgICAgICBwa3QtPm9wYXF1ZV9yZWYg PSBwaWMtPm9wYXF1ZV9yZWY7Cj4gKyAgICAgICAgcGt0X3B0ci0+b3BhcXVlICAgICA9IHBpYy0+ b3BhcXVlOwo+ICsgICAgICAgIHBrdF9wdHItPm9wYXF1ZV9yZWYgPSBwaWMtPm9wYXF1ZV9yZWY7 Cj4gICAgICAgICAgcGljLT5vcGFxdWVfcmVmID0gTlVMTDsKPiAgICAgIH0KPgo+IEBAIC03NTIs NiArODAzLDkgQEAgc3RhdGljIGludCB2YWFwaV9lbmNvZGVfb3V0cHV0KEFWQ29kZWNDb250ZXh0 ICphdmN0eCwKPgo+ICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfREVCVUcsICJPdXRwdXQgcmVh ZCBmb3IgcGljICUiUFJJZDY0Ii8lIlBSSWQ2NCIuXG4iLAo+ICAgICAgICAgICAgIHBpYy0+ZGlz cGxheV9vcmRlciwgcGljLT5lbmNvZGVfb3JkZXIpOwo+ICsKPiArICAgIHZhYXBpX2VuY29kZV9z ZXRfb3V0cHV0X3RpbWVzdGFtcChhdmN0eCwgcGljLCBwa3RfcHRyKTsKPiArCj4gICAgICByZXR1 cm4gMDsKPgo+ICBmYWlsX21hcHBlZDoKPiBAQCAtMTEyOCw5ICsxMTgyLDE5IEBAIHN0YXRpYyBp bnQgdmFhcGlfZW5jb2RlX3BpY2tfbmV4dChBVkNvZGVjQ29udGV4dCAqYXZjdHgsCj4KPiAgICAg IHZhYXBpX2VuY29kZV9hZGRfcmVmKGF2Y3R4LCBwaWMsIHBpYywgMCwgMSwgMCk7Cj4gICAgICBp ZiAocGljLT50eXBlICE9IFBJQ1RVUkVfVFlQRV9JRFIpIHsKPiAtICAgICAgICB2YWFwaV9lbmNv ZGVfYWRkX3JlZihhdmN0eCwgcGljLCBzdGFydCwKPiAtICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBwaWMtPnR5cGUgPT0gUElDVFVSRV9UWVBFX1AsCj4gLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYl9jb3VudGVyID4gMCwgMCk7Cj4gKyAgICAgICAgLy8gVE9ETzogYXBwbHkgYm90 aCBwcmV2aW91cyBhbmQgZm9yd2FyZCBtdWx0aSByZWZlcmVuY2UgZm9yIGFsbCB2YWFwaSBlbmNv ZGVycy4KPiArICAgICAgICAvLyBBbmQgTDAvTDEgcmVmZXJlbmNlIGZyYW1lIG51bWJlciBjYW4g YmUgc2V0IGR5bmFtaWNhbGx5IHRocm91Z2ggcXVlcnkKPiArICAgICAgICAvLyBWQUNvbmZpZ0F0 dHJpYkVuY01heFJlZkZyYW1lcyBhdHRyaWJ1dGUuCj4gKyAgICAgICAgaWYgKGF2Y3R4LT5jb2Rl Y19pZCA9PSBBVl9DT0RFQ19JRF9BVjEpIHsKPiArICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8 IGN0eC0+bmJfbmV4dF9wcmV2OyBpKyspCj4gKyAgICAgICAgICAgICAgICB2YWFwaV9lbmNvZGVf YWRkX3JlZihhdmN0eCwgcGljLCBjdHgtPm5leHRfcHJldltpXSwKPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHBpYy0+dHlwZSA9PSBQSUNUVVJFX1RZUEVfUCwKPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJfY291bnRlciA+IDAsIDApOwo+ICsg ICAgICAgIH0gZWxzZQo+ICsgICAgICAgICAgICB2YWFwaV9lbmNvZGVfYWRkX3JlZihhdmN0eCwg cGljLCBzdGFydCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGljLT50eXBl ID09IFBJQ1RVUkVfVFlQRV9QLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi X2NvdW50ZXIgPiAwLCAwKTsKPiArCj4gICAgICAgICAgdmFhcGlfZW5jb2RlX2FkZF9yZWYoYXZj dHgsIHBpYywgY3R4LT5uZXh0X3ByZXZbY3R4LT5uYl9uZXh0X3ByZXYgLSAxXSwgMCwgMCwgMSk7 Cj4gICAgICB9Cj4KPiBAQCAtMTI5Miw2ICsxMzU2LDE5IEBAIGludCBmZl92YWFwaV9lbmNvZGVf cmVjZWl2ZV9wYWNrZXQoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCBBVlBhY2tldCAqcGt0KQo+ICAg ICAgQVZGcmFtZSAqZnJhbWUgPSBjdHgtPmZyYW1lOwo+ICAgICAgaW50IGVycjsKPgo+ICtzdGFy dDoKPiArICAgIC8qKiBpZiBubyBCIGZyYW1lIGJlZm9yZSByZXBlYXQgUCBmcmFtZSwgc2VudCBy ZXBlYXQgUCBmcmFtZSBvdXQuICovCj4gKyAgICBpZiAoYXZjdHgtPmNvZGVjX2lkID09IEFWX0NP REVDX0lEX0FWMSAmJiBjdHgtPnRhaWxfcGt0LT5zaXplKSB7Cj4gKyAgICAgICAgZm9yIChWQUFQ SUVuY29kZVBpY3R1cmUgKnRtcCA9IGN0eC0+cGljX3N0YXJ0OyB0bXA7IHRtcCA9IHRtcC0+bmV4 dCkgewo+ICsgICAgICAgICAgICBpZiAodG1wLT50eXBlID09IFBJQ1RVUkVfVFlQRV9CICYmIHRt cC0+cHRzIDwgY3R4LT50YWlsX3BrdC0+cHRzKQo+ICsgICAgICAgICAgICAgICAgYnJlYWs7Cj4g KyAgICAgICAgICAgIGVsc2UgaWYgKCF0bXAtPm5leHQpIHsKPiArICAgICAgICAgICAgICAgIGF2 X3BhY2tldF9tb3ZlX3JlZihwa3QsIGN0eC0+dGFpbF9wa3QpOwo+ICsgICAgICAgICAgICAgICAg Z290byBlbmQ7Cj4gKyAgICAgICAgICAgIH0KPiArICAgICAgICB9Cj4gKyAgICB9Cj4gKwo+ICAg ICAgZXJyID0gZmZfZW5jb2RlX2dldF9mcmFtZShhdmN0eCwgZnJhbWUpOwo+ICAgICAgaWYgKGVy ciA8IDAgJiYgZXJyICE9IEFWRVJST1JfRU9GKQo+ICAgICAgICAgIHJldHVybiBlcnI7Cj4gQEAg LTEzNTYsMTcgKzE0MzMsMjEgQEAgaW50IGZmX3ZhYXBpX2VuY29kZV9yZWNlaXZlX3BhY2tldChB VkNvZGVjQ29udGV4dCAqYXZjdHgsIEFWUGFja2V0ICpwa3QpCj4gICAgICAgICAgcmV0dXJuIGVy cjsKPiAgICAgIH0KPgo+IC0gICAgdmFhcGlfZW5jb2RlX3NldF9vdXRwdXRfdGltZXN0YW1wKGF2 Y3R4LCBwaWMsIHBrdCk7Cj4gLSAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19ERUJVRywgIk91dHB1 dCBwYWNrZXQ6IHB0cyAlIlBSSWQ2NCIsIGR0cyAlIlBSSWQ2NCIsICIKPiAtICAgICAgICAgICAi c2l6ZSAldSBieXRlcy5cbiIsIHBrdC0+cHRzLCBwa3QtPmR0cywgcGt0LT5zaXplKTsKPiAtCj4g ICAgICBjdHgtPm91dHB1dF9vcmRlciA9IHBpYy0+ZW5jb2RlX29yZGVyOwo+ICAgICAgdmFhcGlf ZW5jb2RlX2NsZWFyX29sZChhdmN0eCk7Cj4KPiArICAgIC8qKiBsb29wIHRvIGdldCBhbiBhdmFp bGFibGUgcGt0IGluIGVuY29kZXIgZmx1c2hpbmcuICovCj4gKyAgICBpZiAoY3R4LT5lbmRfb2Zf c3RyZWFtICYmICFwa3QtPnNpemUpCj4gKyAgICAgICAgZ290byBzdGFydDsKPiArCj4gK2VuZDoK PiArICAgIGlmIChwa3QtPnNpemUpCj4gKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfREVC VUcsICJPdXRwdXQgcGFja2V0OiBwdHMgJSJQUklkNjQiLCBkdHMgJSJQUklkNjQiLCAiCj4gKyAg ICAgICAgICAgICAgICJzaXplICV1IGJ5dGVzLlxuIiwgcGt0LT5wdHMsIHBrdC0+ZHRzLCBwa3Qt PnNpemUpOwo+ICsKPiAgICAgIHJldHVybiAwOwo+ICB9Cj4KPiAtCj4gIHN0YXRpYyBhdl9jb2xk IHZvaWQgdmFhcGlfZW5jb2RlX2FkZF9nbG9iYWxfcGFyYW0oQVZDb2RlY0NvbnRleHQgKmF2Y3R4 LCBpbnQgdHlwZSwKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQo+ICB7Cj4gQEAgLTI2NjcsNiArMjc0 OCwxMiBAQCBhdl9jb2xkIGludCBmZl92YWFwaV9lbmNvZGVfaW5pdChBVkNvZGVjQ29udGV4dCAq YXZjdHgpCj4gICAgICBjdHgtPmRldmljZSA9IChBVkhXRGV2aWNlQ29udGV4dCopY3R4LT5kZXZp Y2VfcmVmLT5kYXRhOwo+ICAgICAgY3R4LT5od2N0eCA9IGN0eC0+ZGV2aWNlLT5od2N0eDsKPgo+ ICsgICAgY3R4LT50YWlsX3BrdCA9IGF2X3BhY2tldF9hbGxvYygpOwo+ICsgICAgaWYgKCFjdHgt PnRhaWxfcGt0KSB7Cj4gKyAgICAgICAgZXJyID0gQVZFUlJPUihFTk9NRU0pOwo+ICsgICAgICAg IGdvdG8gZmFpbDsKPiArICAgIH0KPiArCj4gICAgICBlcnIgPSB2YWFwaV9lbmNvZGVfcHJvZmls ZV9lbnRyeXBvaW50KGF2Y3R4KTsKPiAgICAgIGlmIChlcnIgPCAwKQo+ICAgICAgICAgIGdvdG8g ZmFpbDsKPiBAQCAtMjg1OSw5ICsyOTQ2LDExIEBAIGF2X2NvbGQgaW50IGZmX3ZhYXBpX2VuY29k ZV9jbG9zZShBVkNvZGVjQ29udGV4dCAqYXZjdHgpCj4gICAgICB9Cj4KPiAgICAgIGF2X2ZyYW1l X2ZyZWUoJmN0eC0+ZnJhbWUpOwo+ICsgICAgYXZfcGFja2V0X2ZyZWUoJmN0eC0+dGFpbF9wa3Qp Owo+Cj4gICAgICBhdl9mcmVlcCgmY3R4LT5jb2RlY19zZXF1ZW5jZV9wYXJhbXMpOwo+ICAgICAg YXZfZnJlZXAoJmN0eC0+Y29kZWNfcGljdHVyZV9wYXJhbXMpOwo+ICsgICAgYXZfZnJlZXAoJmN0 eC0+aGVhZGVyX2RhdGEpOwo+ICAgICAgYXZfZmlmb19mcmVlcDIoJmN0eC0+ZW5jb2RlX2ZpZm8p Owo+Cj4gICAgICBhdl9idWZmZXJfdW5yZWYoJmN0eC0+cmVjb25fZnJhbWVzX3JlZik7Cj4gZGlm ZiAtLWdpdCBhL2xpYmF2Y29kZWMvdmFhcGlfZW5jb2RlLmggYi9saWJhdmNvZGVjL3ZhYXBpX2Vu Y29kZS5oCj4gaW5kZXggZDU0NTJhMzdiMy4uMDNkZjhkNmQ0NiAxMDA2NDQKPiAtLS0gYS9saWJh dmNvZGVjL3ZhYXBpX2VuY29kZS5oCj4gKysrIGIvbGliYXZjb2RlYy92YWFwaV9lbmNvZGUuaAo+ IEBAIC0xMzMsNiArMTMzLDExIEBAIHR5cGVkZWYgc3RydWN0IFZBQVBJRW5jb2RlUGljdHVyZSB7 Cj4KPiAgICAgIGludCAgICAgICAgICBuYl9zbGljZXM7Cj4gICAgICBWQUFQSUVuY29kZVNsaWNl ICpzbGljZXM7Cj4gKwo+ICsgICAgLyoqIFRhaWwgZGF0YSBvZiBjdXJyZW50IHBpYywgdXNlZCBv bmx5IGZvciByZXBlYXQgaGVhZGVyIG9mIEFWMS4gKi8KPiArICAgIGNoYXIgdGFpbF9kYXRhW01B WF9QQVJBTV9CVUZGRVJfU0laRV07Cj4gKyAgICAvKiogQnl0ZSBsZW5ndGggb2YgdGFpbF9kYXRh LiAqLwo+ICsgICAgc2l6ZV90IHRhaWxfc2l6ZTsKPiAgfSBWQUFQSUVuY29kZVBpY3R1cmU7Cj4K PiAgdHlwZWRlZiBzdHJ1Y3QgVkFBUElFbmNvZGVQcm9maWxlIHsKPiBAQCAtMzY3LDYgKzM3Miwx MyBAQCB0eXBlZGVmIHN0cnVjdCBWQUFQSUVuY29kZUNvbnRleHQgewo+ICAgICAgQVZGaWZvICAg ICAgICAgICplbmNvZGVfZmlmbzsKPiAgICAgIC8vIE1heCBudW1iZXIgb2YgZnJhbWUgYnVmZmVy ZWQgaW4gZW5jb2Rlci4KPiAgICAgIGludCAgICAgICAgICAgICBhc3luY19kZXB0aDsKPiArCj4g KyAgICAvKiogSGVhZCBkYXRhIGZvciBjdXJyZW50IG91dHB1dCBwa3QsIHVzZWQgb25seSBmb3Ig QVYxLiAqLwo+ICsgICAgdm9pZCAgKmhlYWRlcl9kYXRhOwo+ICsgICAgc2l6ZV90IGhlYWRlcl9k YXRhX3NpemU7Cj4gKwo+ICsgICAgLyoqIFN0b3JlIGF2MSByZXBlYXQgZnJhbWUgaGVhZGVyIHBr dC4gKi8KPiArICAgIEFWUGFja2V0ICp0YWlsX3BrdDsKPiAgfSBWQUFQSUVuY29kZUNvbnRleHQ7 Cj4KPiAgZW51bSB7Cj4gZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvdmFhcGlfZW5jb2RlX2F2MS5j IGIvbGliYXZjb2RlYy92YWFwaV9lbmNvZGVfYXYxLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ IGluZGV4IDAwMDAwMDAwMDAuLjc3OGM1YjM1YzcKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvbGli YXZjb2RlYy92YWFwaV9lbmNvZGVfYXYxLmMKPiBAQCAtMCwwICsxLDEyMjkgQEAKPiArLyoKPiAr ICogQ29weXJpZ2h0IChjKSAyMDIzIEludGVsIENvcnBvcmF0aW9uCj4gKyAqCj4gKyAqIFRoaXMg ZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KPiArICoKPiArICogRkZtcGVnIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgo+ICsgKiBtb2RpZnkgaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCj4gKyAqIExpY2Vuc2Ug YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgo+ICsg KiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0 ZXIgdmVyc2lvbi4KPiArICoKPiArICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4gKyAqIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCj4gKyAq IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4gKyAqCj4g KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu ZXJhbCBQdWJsaWMKPiArICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0 ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQo+ICsgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp biBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCj4gKyAqLwo+ ICsKPiArI2luY2x1ZGUgPHZhL3ZhLmg+Cj4gKyNpbmNsdWRlIDx2YS92YV9lbmNfYXYxLmg+Cj4g Kwo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL3BpeGRlc2MuaCIKPiArI2luY2x1ZGUgImxpYmF2dXRp bC9vcHQuaCIKPiArCj4gKyNpbmNsdWRlICJjYnNfYXYxLmgiCj4gKyNpbmNsdWRlICJwdXRfYml0 cy5oIgo+ICsjaW5jbHVkZSAiY29kZWNfaW50ZXJuYWwuaCIKPiArI2luY2x1ZGUgImF2MV9wcm9m aWxlX2xldmVsLmgiCj4gKyNpbmNsdWRlICJ2YWFwaV9lbmNvZGUuaCIKPiArCj4gKyNkZWZpbmUg QVYxX01BWF9RVUFOVCAyNTUKPiArCj4gK3R5cGVkZWYgc3RydWN0IFZBQVBJRW5jb2RlQVYxUGlj dHVyZSB7Cj4gKyAgICBpbnQ2NF90IGxhc3RfaWRyX2ZyYW1lOwo+ICsgICAgaW50IHNsb3Q7Cj4g K30gVkFBUElFbmNvZGVBVjFQaWN0dXJlOwo+ICsKPiArdHlwZWRlZiBzdHJ1Y3QgVkFBUElFbmNv ZGVBVjFDb250ZXh0IHsKPiArICAgIFZBQVBJRW5jb2RlQ29udGV4dCBjb21tb247Cj4gKyAgICBB VjFSYXdPQlUgc2g7IC8qKjwgc2VxdWVuY2UgaGVhZGVyLiovCj4gKyAgICBBVjFSYXdPQlUgZmg7 IC8qKjwgZnJhbWUgaGVhZGVyLiovCj4gKyAgICBDb2RlZEJpdHN0cmVhbUNvbnRleHQgKmNiYzsK PiArICAgIENvZGVkQml0c3RyZWFtRnJhZ21lbnQgY3VycmVudF9vYnU7Cj4gKyAgICBWQUNvbmZp Z0F0dHJpYlZhbEVuY0FWMSBhdHRyOwo+ICsgICAgVkFDb25maWdBdHRyaWJWYWxFbmNBVjFFeHQx IGF0dHJfZXh0MTsKPiArICAgIFZBQ29uZmlnQXR0cmliVmFsRW5jQVYxRXh0MiBhdHRyX2V4dDI7 Cj4gKwo+ICsgICAgY2hhciBzaF9kYXRhW01BWF9QQVJBTV9CVUZGRVJfU0laRV07IC8qKjwgY29k ZWQgc2VxdWVuY2UgaGVhZGVyIGRhdGEuICovCj4gKyAgICBzaXplX3Qgc2hfZGF0YV9sZW47IC8q KjwgYml0IGxlbmd0aCBvZiBzaF9kYXRhLiAqLwo+ICsgICAgY2hhciBmaF9kYXRhW01BWF9QQVJB TV9CVUZGRVJfU0laRV07IC8qKjwgY29kZWQgZnJhbWUgaGVhZGVyIGRhdGEuICovCj4gKyAgICBz aXplX3QgZmhfZGF0YV9sZW47IC8qKjwgYml0IGxlbmd0aCBvZiBmaF9kYXRhLiAqLwo+ICsKPiAr ICAgIHVpbnQ4X3QgdW5pZm9ybV90aWxlOwo+ICsgICAgdWludDhfdCB1c2VfMTI4eDEyOF9zdXBl cmJsb2NrOwo+ICsgICAgaW50IHNiX2NvbHM7Cj4gKyAgICBpbnQgc2Jfcm93czsKPiArICAgIGlu dCB0aWxlX2NvbHNfbG9nMjsKPiArICAgIGludCB0aWxlX3Jvd3NfbG9nMjsKPiArICAgIGludCBt YXhfdGlsZV93aWR0aF9zYjsKPiArICAgIGludCBtYXhfdGlsZV9oZWlnaHRfc2I7Cj4gKyAgICB1 aW50OF90IHdpZHRoX2luX3Nic19taW51c18xW0FWMV9NQVhfVElMRV9DT0xTXTsKPiArICAgIHVp bnQ4X3QgaGVpZ2h0X2luX3Nic19taW51c18xW0FWMV9NQVhfVElMRV9ST1dTXTsKPiArCj4gKyAg ICBpbnQgbWluX2xvZzJfdGlsZV9jb2xzOwo+ICsgICAgaW50IG1heF9sb2cyX3RpbGVfY29sczsK PiArICAgIGludCBtaW5fbG9nMl90aWxlX3Jvd3M7Cj4gKyAgICBpbnQgbWF4X2xvZzJfdGlsZV9y b3dzOwo+ICsKPiArICAgIGludCBxX2lkeF9pZHI7Cj4gKyAgICBpbnQgcV9pZHhfcDsKPiArICAg IGludCBxX2lkeF9iOwo+ICsKPiArICAgIC8qKiB1c2VyIG9wdGlvbnMgKi8KPiArICAgIGludCBw cm9maWxlOwo+ICsgICAgaW50IGxldmVsOwo+ICsgICAgaW50IHRpZXI7Cj4gKyAgICBpbnQgdGls ZV9jb2xzLCB0aWxlX3Jvd3M7Cj4gKyAgICBpbnQgdGlsZV9ncm91cHM7Cj4gK30gVkFBUElFbmNv ZGVBVjFDb250ZXh0Owo+ICsKPiArc3RhdGljIGF2X2NvbGQgaW50IHZhYXBpX2VuY29kZV9hdjFf Y29uZmlndXJlKEFWQ29kZWNDb250ZXh0ICphdmN0eCkKPiArewo+ICsgICAgVkFBUElFbmNvZGVD b250ZXh0ICAgICAqY3R4ID0gYXZjdHgtPnByaXZfZGF0YTsKPiArICAgIFZBQVBJRW5jb2RlQVYx Q29udGV4dCAqcHJpdiA9IGF2Y3R4LT5wcml2X2RhdGE7Cj4gKyAgICBpbnQgcmV0Owo+ICsKPiAr ICAgIHJldCA9IGZmX2Nic19pbml0KCZwcml2LT5jYmMsIEFWX0NPREVDX0lEX0FWMSwgYXZjdHgp Owo+ICsgICAgaWYgKHJldCA8IDApCj4gKyAgICAgICAgcmV0dXJuIHJldDsKPiArCj4gKyAgICBp ZiAoY3R4LT5yY19tb2RlLT5xdWFsaXR5KSB7Cj4gKyAgICAgICAgcHJpdi0+cV9pZHhfcCA9IGF2 X2NsaXAoY3R4LT5yY19xdWFsaXR5LCAwLCBBVjFfTUFYX1FVQU5UKTsKPiArICAgICAgICBpZiAo ZmFicyhhdmN0eC0+aV9xdWFudF9mYWN0b3IpID4gMC4wKQo+ICsgICAgICAgICAgICBwcml2LT5x X2lkeF9pZHIgPQo+ICsgICAgICAgICAgICAgICAgYXZfY2xpcCgoZmFicyhhdmN0eC0+aV9xdWFu dF9mYWN0b3IpICogcHJpdi0+cV9pZHhfcCAgKwo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg YXZjdHgtPmlfcXVhbnRfb2Zmc2V0KSArIDAuNSwKPiArICAgICAgICAgICAgICAgICAgICAgICAg MCwgQVYxX01BWF9RVUFOVCk7Cj4gKyAgICAgICAgZWxzZQo+ICsgICAgICAgICAgICBwcml2LT5x X2lkeF9pZHIgPSBwcml2LT5xX2lkeF9wOwo+ICsKPiArICAgICAgICBpZiAoZmFicyhhdmN0eC0+ Yl9xdWFudF9mYWN0b3IpID4gMC4wKQo+ICsgICAgICAgICAgICBwcml2LT5xX2lkeF9iID0KPiAr ICAgICAgICAgICAgICAgIGF2X2NsaXAoKGZhYnMoYXZjdHgtPmJfcXVhbnRfZmFjdG9yKSAqIHBy aXYtPnFfaWR4X3AgICsKPiArICAgICAgICAgICAgICAgICAgICAgICAgIGF2Y3R4LT5iX3F1YW50 X29mZnNldCkgKyAwLjUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgIDAsIEFWMV9NQVhfUVVB TlQpOwo+ICsgICAgICAgIGVsc2UKPiArICAgICAgICAgICAgcHJpdi0+cV9pZHhfYiA9IHByaXYt PnFfaWR4X3A7Cj4gKyAgICB9IGVsc2Ugewo+ICsgICAgICAgIC8qKiBBcmJpdHJhcnkgdmFsdWUg Ki8KPiArICAgICAgICBwcml2LT5xX2lkeF9pZHIgPSBwcml2LT5xX2lkeF9wID0gcHJpdi0+cV9p ZHhfYiA9IDEyODsKPiArICAgIH0KPiArCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3Rh dGljIGludCB2YWFwaV9lbmNvZGVfYXYxX2FkZF9vYnUoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LAo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlZEJpdHN0cmVhbUZyYWdt ZW50ICphdSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCB0 eXBlLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpvYnVfdW5p dCkKPiArewo+ICsgICAgaW50IHJldDsKPiArCj4gKyAgICByZXQgPSBmZl9jYnNfaW5zZXJ0X3Vu aXRfY29udGVudChhdSwgLTEsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB0eXBlLCBvYnVfdW5pdCwgTlVMTCk7Cj4gKyAgICBpZiAocmV0IDwgMCkgewo+ICsgICAgICAg IGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIGFkZCBPQlUgdW5pdDogIgo+ ICsgICAgICAgICAgICAgICAidHlwZSA9ICVkLlxuIiwgdHlwZSk7Cj4gKyAgICAgICAgcmV0dXJu IHJldDsKPiArICAgIH0KPiArCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGlu dCB2YWFwaV9lbmNvZGVfYXYxX3dyaXRlX29idShBVkNvZGVjQ29udGV4dCAqYXZjdHgsCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqZGF0YSwgc2l6ZV90ICpk YXRhX2xlbiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlZEJp dHN0cmVhbUZyYWdtZW50ICpicykKPiArewo+ICsgICAgVkFBUElFbmNvZGVBVjFDb250ZXh0ICpw cml2ID0gYXZjdHgtPnByaXZfZGF0YTsKPiArICAgIGludCByZXQ7Cj4gKwo+ICsgICAgcmV0ID0g ZmZfY2JzX3dyaXRlX2ZyYWdtZW50X2RhdGEocHJpdi0+Y2JjLCBicyk7Cj4gKyAgICBpZiAocmV0 IDwgMCkgewo+ICsgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRv IHdyaXRlIHBhY2tlZCBoZWFkZXIuXG4iKTsKPiArICAgICAgICByZXR1cm4gcmV0Owo+ICsgICAg fQo+ICsKPiArICAgIGlmICgoc2l6ZV90KTggKiBNQVhfUEFSQU1fQlVGRkVSX1NJWkUgPCA4ICog YnMtPmRhdGFfc2l6ZSAtIGJzLT5kYXRhX2JpdF9wYWRkaW5nKSB7Cj4gKyAgICAgICAgYXZfbG9n KGF2Y3R4LCBBVl9MT0dfRVJST1IsICJBY2Nlc3MgdW5pdCB0b28gbGFyZ2U6ICIKPiArICAgICAg ICAgICAgICAgIiV6dSA8ICV6dS5cbiIsIChzaXplX3QpOCAqIE1BWF9QQVJBTV9CVUZGRVJfU0la RSwKPiArICAgICAgICAgICAgICAgOCAqIGJzLT5kYXRhX3NpemUgLSBicy0+ZGF0YV9iaXRfcGFk ZGluZyk7Cj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PU1BDKTsKPiArICAgIH0KPiArCj4g KyAgICBtZW1jcHkoZGF0YSwgYnMtPmRhdGEsIGJzLT5kYXRhX3NpemUpOwo+ICsgICAgKmRhdGFf bGVuID0gOCAqIGJzLT5kYXRhX3NpemUgLSBicy0+ZGF0YV9iaXRfcGFkZGluZzsKPiArCj4gKyAg ICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBnZXRfcmVsYXRpdmVfZGlzdChjb25z dCBBVjFSYXdTZXF1ZW5jZUhlYWRlciAqc2VxLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHVuc2lnbmVkIGludCBhLCB1bnNpZ25lZCBpbnQgYikKPiArewo+ICsgICAgdW5zaWduZWQg aW50IGRpZmYsIG07Cj4gKyAgICBpZiAoIXNlcS0+ZW5hYmxlX29yZGVyX2hpbnQpCj4gKyAgICAg ICAgcmV0dXJuIDA7Cj4gKyAgICBkaWZmID0gYSAtIGI7Cj4gKyAgICBtID0gMSA8PCBzZXEtPm9y ZGVyX2hpbnRfYml0c19taW51c18xOwo+ICsgICAgZGlmZiA9IChkaWZmICYgKG0gLSAxKSkgLSAo ZGlmZiAmIG0pOwo+ICsgICAgcmV0dXJuIGRpZmY7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgd3Jp dGVfbnMoUHV0Qml0Q29udGV4dCAqcGJjLCB1aW50MzJfdCBuLCB1aW50MzJfdCB2YWx1ZSkKPiAr ewo+ICsgICAgdWludDMyX3QgdywgbSwgdiwgZXh0cmFfYml0Owo+ICsKPiArICAgIHcgPSBhdl9s b2cyKG4pICsgMTsKPiArICAgIG0gPSAoMSA8PCB3KSAtIG47Cj4gKwo+ICsgICAgaWYgKHZhbHVl IDwgbSkgewo+ICsgICAgICAgIHYgPSB2YWx1ZTsKPiArICAgICAgICBwdXRfYml0cyhwYmMsIHcg LSAxLCB2KTsKPiArICAgIH0gZWxzZSB7Cj4gKyAgICAgICAgdiA9IG0gKyAoKHZhbHVlIC0gbSkg Pj4gMSk7Cj4gKyAgICAgICAgZXh0cmFfYml0ID0gKHZhbHVlIC0gbSkgJiAxOwo+ICsgICAgICAg IHB1dF9iaXRzKHBiYywgdyAtIDEsIHYpOwo+ICsgICAgICAgIHB1dF9iaXRzKHBiYywgMSwgZXh0 cmFfYml0KTsKPiArICAgIH0KPiArCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArLyoqCj4g KyAqIFRoaXMgQVBJIHByb3ZpZGUgdGhlIG1pbm11bSBpbXBsZW1lbnRpb24gYWNjb3JkaW5nIGN1 cnJlbnQgZW5hYmxlZCBmZWF0dXJlcwo+ICsgKiBpbiBmcmFtZSBoZWFkZXIuIElmIG1vcmUgZmVh dHVyZXMgd2lsbCBlbmFibGUgaW4gZnVydHVyZSwgcGxlYXNlIG1ha2Ugc3VyZQo+ICsgKiB0aGUg cmVsYXRpdmUgZmxhZ3Mgb2YgZmVhdHVyZXMgc2hvdWxkIGJlIHBhY2tlZCBjb3JyZWN0bHkgaW50 byBmcmFtZSBoZWFkZXIKPiArICogb2J1IGluIHRoaXMgQVBJLgo+ICsgKi8KPiArc3RhdGljIGlu dCB2YWFwaV9lbmNvZGVfYXYxX3dyaXRlX2ZyYW1lX2hlYWRlcihBVkNvZGVjQ29udGV4dCAqYXZj dHgsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkFB UElFbmNvZGVQaWN0dXJlICpwaWMsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY2hhciAqZGF0YSwgc2l6ZV90ICpkYXRhX2xlbikKPiArewo+ICsgICAg VkFBUElFbmNvZGVDb250ZXh0ICAgICAgICAgICAgICAqY3R4ID0gYXZjdHgtPnByaXZfZGF0YTsK PiArICAgIFZBQVBJRW5jb2RlQVYxQ29udGV4dCAgICAgICAgICAqcHJpdiA9IGF2Y3R4LT5wcml2 X2RhdGE7Cj4gKyAgICBBVjFSYXdPQlUgICAgICAgICAgICAgICAgICAgICpmaF9vYnUgPSAmcHJp di0+Zmg7Cj4gKyAgICBBVjFSYXdPQlUgICAgICAgICAgICAgICAgICAgICpzaF9vYnUgPSAmcHJp di0+c2g7Cj4gKyAgICBBVjFSYXdGcmFtZUhlYWRlciAgICAgICAgICAgICAgICAqZmggPSAmZmhf b2J1LT5vYnUuZnJhbWUuaGVhZGVyOwo+ICsgICAgQVYxUmF3U2VxdWVuY2VIZWFkZXIgICAgICAg ICAgICAgKnNoID0gJnNoX29idS0+b2J1LnNlcXVlbmNlX2hlYWRlcjsKPiArICAgIFZBRW5jUGlj dHVyZVBhcmFtZXRlckJ1ZmZlckFWMSAqdnBpYyA9IHBpYy0+Y29kZWNfcGljdHVyZV9wYXJhbXM7 Cj4gKyAgICBQdXRCaXRDb250ZXh0IHBiYywgcGJjX3RtcDsKPiArICAgIHVpbnQ4X3QgYnl0ZTsK PiArICAgIGludCBxaW5kZXgsIGNvZGVkX2xvc3NsZXNzOwo+ICsgICAgaW50IGlkX2xlbiwgZnJh bWVfaXNfaW50cmEsIHNraXBfbW9kZV9hbGxvd2VkOwo+ICsgICAgaW50IHN0YXJ0LCBwYXlsb2Fk X2JpdHMsIG9idV9zaXplLCBvYnVfc2l6ZV9sZW47Cj4gKyAgICBpbnQgcWluZGV4X29mZnNldCwg bG9vcGZpbHRlcl9vZmZzZXQ7Cj4gKyAgICBpbnQgY2RlZl9zdGFydF9vZmZzZXQsIGNkZWZfZW5k X29mZnNldDsKPiArICAgIGludCBpOwo+ICsKPiArICAgIGluaXRfcHV0X2JpdHMoJnBiYywgZGF0 YSwgTUFYX1BBUkFNX0JVRkZFUl9TSVpFKTsKPiArCj4gKyAgICAvKiogb2J1IGhlYWRlciAqLwo+ ICsgICAgcHV0X2JpdHMoJnBiYywgMSwgZmhfb2J1LT5oZWFkZXIub2J1X2ZvcmJpZGRlbl9iaXQp Owo+ICsgICAgcHV0X2JpdHMoJnBiYywgNCwgZmhfb2J1LT5oZWFkZXIub2J1X3R5cGUpOwo+ICsg ICAgcHV0X2JpdHMoJnBiYywgMSwgZmhfb2J1LT5oZWFkZXIub2J1X2V4dGVuc2lvbl9mbGFnKTsK PiArICAgIHB1dF9iaXRzKCZwYmMsIDEsIGZoX29idS0+aGVhZGVyLm9idV9oYXNfc2l6ZV9maWVs ZCk7Cj4gKyAgICBwdXRfYml0cygmcGJjLCAxLCBmaF9vYnUtPmhlYWRlci5vYnVfcmVzZXJ2ZWRf MWJpdCk7Cj4gKwo+ICsgICAgLyoqIHJlY29yZCBwYmMgc3RhdHVzIHRvIHJlLXdyaXRlIG9idSBz aXplIGxhdGVyLiAqLwo+ICsgICAgaWYgKGZoX29idS0+aGVhZGVyLm9idV9oYXNfc2l6ZV9maWVs ZCkgewo+ICsgICAgICAgIHBiY190bXAgPSBwYmM7Cj4gKyAgICAgICAgcHV0X2JpdHMzMigmcGJj LCAwKTsKPiArICAgICAgICBwdXRfYml0czMyKCZwYmMsIDApOwo+ICsgICAgfQo+ICsKPiArICAg IHN0YXJ0ID0gcHV0X2JpdHNfY291bnQoJnBiYyk7Cj4gKwo+ICsgICAgLyoqIHVuY29tcHJlc3Nl ZF9oZWFkZXIoKSAqLwo+ICsgICAgaWYgKHNoLT5mcmFtZV9pZF9udW1iZXJzX3ByZXNlbnRfZmxh ZykKPiArICAgICAgICBpZF9sZW4gPSBzaC0+YWRkaXRpb25hbF9mcmFtZV9pZF9sZW5ndGhfbWlu dXNfMSArCj4gKyAgICAgICAgICAgICAgICAgc2gtPmRlbHRhX2ZyYW1lX2lkX2xlbmd0aF9taW51 c18yICsgMzsKPiArCj4gKyAgICBmcmFtZV9pc19pbnRyYSA9IChmaC0+ZnJhbWVfdHlwZSA9PSBB VjFfRlJBTUVfS0VZIHx8Cj4gKyAgICAgICAgICAgICAgICAgICAgICBmaC0+ZnJhbWVfdHlwZSA9 PSBBVjFfRlJBTUVfSU5UUkFfT05MWSk7Cj4gKyAgICBpZiAoIXNoLT5yZWR1Y2VkX3N0aWxsX3Bp Y3R1cmVfaGVhZGVyKSB7Cj4gKyAgICAgICAgcHV0X2JpdHMoJnBiYywgMSwgZmgtPnNob3dfZXhp c3RpbmdfZnJhbWUpOwo+ICsgICAgICAgIGlmIChmaC0+c2hvd19leGlzdGluZ19mcmFtZSkgewo+ ICsgICAgICAgICAgICBwdXRfYml0cygmcGJjLCAzLCBmaC0+ZnJhbWVfdG9fc2hvd19tYXBfaWR4 KTsKPiArICAgICAgICAgICAgZ290byB0cmFpbGluZ19iaXRzOwo+ICsgICAgICAgIH0KPiArICAg ICAgICBpZiAoc2gtPmZyYW1lX2lkX251bWJlcnNfcHJlc2VudF9mbGFnKQo+ICsgICAgICAgICAg ICBwdXRfYml0cygmcGJjLCBpZF9sZW4sIGZoLT5kaXNwbGF5X2ZyYW1lX2lkKTsKPiArCj4gKyAg ICAgICAgcHV0X2JpdHMoJnBiYywgMiwgZmgtPmZyYW1lX3R5cGUpOwo+ICsgICAgICAgIHB1dF9i aXRzKCZwYmMsIDEsIGZoLT5zaG93X2ZyYW1lKTsKPiArICAgICAgICBpZiAoIWZoLT5zaG93X2Zy YW1lKQo+ICsgICAgICAgICAgICBwdXRfYml0cygmcGJjLCAxLCBmaC0+c2hvd2FibGVfZnJhbWUp Owo+ICsKPiArICAgICAgICBpZiAoIShmaC0+ZnJhbWVfdHlwZSA9PSBBVjFfRlJBTUVfU1dJVENI IHx8Cj4gKyAgICAgICAgICAgIChmaC0+ZnJhbWVfdHlwZSA9PSBBVjFfRlJBTUVfS0VZICYmIGZo LT5zaG93X2ZyYW1lKSkpCj4gKyAgICAgICAgICAgIHB1dF9iaXRzKCZwYmMsIDEsIGZoLT5lcnJv cl9yZXNpbGllbnRfbW9kZSk7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcHV0X2JpdHMoJnBiYywgMSwg ZmgtPmRpc2FibGVfY2RmX3VwZGF0ZSk7Cj4gKyAgICBpZiAoc2gtPnNlcV9mb3JjZV9zY3JlZW5f Y29udGVudF90b29scyA9PSBBVjFfU0VMRUNUX1NDUkVFTl9DT05URU5UX1RPT0xTKQo+ICsgICAg ICAgIHB1dF9iaXRzKCZwYmMsIDEsIGZoLT5hbGxvd19zY3JlZW5fY29udGVudF90b29scyk7Cj4g Kwo+ICsgICAgaWYgKGZoLT5hbGxvd19zY3JlZW5fY29udGVudF90b29scyAmJiBzaC0+c2VxX2Zv cmNlX2ludGVnZXJfbXYgPT0gQVYxX1NFTEVDVF9JTlRFR0VSX01WKQo+ICsgICAgICAgIHB1dF9i aXRzKCZwYmMsIDEsIGZoLT5mb3JjZV9pbnRlZ2VyX212KTsKPiArCj4gKyAgICBpZiAoc2gtPmZy YW1lX2lkX251bWJlcnNfcHJlc2VudF9mbGFnKQo+ICsgICAgICAgIHB1dF9iaXRzKCZwYmMsIGlk X2xlbiwgZmgtPmN1cnJlbnRfZnJhbWVfaWQpOwo+ICsKPiArICAgIGlmIChmaC0+ZnJhbWVfdHlw ZSAhPSBBVjFfRlJBTUVfU1dJVENIICYmICFzaC0+cmVkdWNlZF9zdGlsbF9waWN0dXJlX2hlYWRl cikKPiArICAgICAgICBwdXRfYml0cygmcGJjLCAxLCBmaC0+ZnJhbWVfc2l6ZV9vdmVycmlkZV9m bGFnKTsKPiArCj4gKyAgICBpZiAoc2gtPmVuYWJsZV9vcmRlcl9oaW50KQo+ICsgICAgICAgIHB1 dF9iaXRzKCZwYmMsIHNoLT5vcmRlcl9oaW50X2JpdHNfbWludXNfMSArIDEsIGZoLT5vcmRlcl9o aW50KTsKPiArCj4gKyAgICBpZiAoIShmcmFtZV9pc19pbnRyYSB8fCBmaC0+ZXJyb3JfcmVzaWxp ZW50X21vZGUpKQo+ICsgICAgICAgIHB1dF9iaXRzKCZwYmMsIDMsIGZoLT5wcmltYXJ5X3JlZl9m cmFtZSk7Cj4gKwo+ICsgICAgaWYgKCEoZmgtPmZyYW1lX3R5cGUgPT0gQVYxX0ZSQU1FX1NXSVRD SCB8fAo+ICsgICAgICAgIGZoLT5mcmFtZV90eXBlID09IEFWMV9GUkFNRV9LRVkgJiYgZmgtPnNo b3dfZnJhbWUpKQo+ICsgICAgICAgIHB1dF9iaXRzKCZwYmMsIDgsIGZoLT5yZWZyZXNoX2ZyYW1l X2ZsYWdzKTsKPiArCj4gKyAgICBpZiAoZnJhbWVfaXNfaW50cmEpIHsKPiArICAgICAgICAvKiog cmVuZGVyX3NpemUoKSAqLwo+ICsgICAgICAgICBwdXRfYml0cygmcGJjLCAxLCBmaC0+cmVuZGVy X2FuZF9mcmFtZV9zaXplX2RpZmZlcmVudCk7Cj4gKyAgICB9IGVsc2Ugewo+ICsgICAgICAgIGlm ICghZnJhbWVfaXNfaW50cmEgJiYgc2gtPmVuYWJsZV9vcmRlcl9oaW50KQo+ICsgICAgICAgICAg ICBwdXRfYml0cygmcGJjLCAxLCBmaC0+ZnJhbWVfcmVmc19zaG9ydF9zaWduYWxpbmcpOwo+ICsK PiArICAgICAgICBmb3IgKGkgPSAwOyBpIDwgQVYxX1JFRlNfUEVSX0ZSQU1FOyBpKyspIHsKPiAr ICAgICAgICAgICAgaWYgKCFmaC0+ZnJhbWVfcmVmc19zaG9ydF9zaWduYWxpbmcpCj4gKyAgICAg ICAgICAgICAgICBwdXRfYml0cygmcGJjLCAzLCBmaC0+cmVmX2ZyYW1lX2lkeFtpXSk7Cj4gKyAg ICAgICAgfQo+ICsKPiArICAgICAgICBpZiAoIShmaC0+ZnJhbWVfc2l6ZV9vdmVycmlkZV9mbGFn ICYmICFmaC0+ZXJyb3JfcmVzaWxpZW50X21vZGUpKQo+ICsgICAgICAgICAgICBwdXRfYml0cygm cGJjLCAxLCBmaC0+cmVuZGVyX2FuZF9mcmFtZV9zaXplX2RpZmZlcmVudCk7Cj4gKwo+ICsgICAg ICAgIGlmICghZmgtPmZvcmNlX2ludGVnZXJfbXYpCj4gKyAgICAgICAgICAgIHB1dF9iaXRzKCZw YmMsIDEsIGZoLT5hbGxvd19oaWdoX3ByZWNpc2lvbl9tdik7Cj4gKwo+ICsgICAgICAgIC8qKiBy ZWFkX2ludGVycG9sYXRpb25fZmlsdGVyKCkgKi8KPiArICAgICAgICBwdXRfYml0cygmcGJjLCAx LCBmaC0+aXNfZmlsdGVyX3N3aXRjaGFibGUpOwo+ICsgICAgICAgIGlmICghZmgtPmlzX2ZpbHRl cl9zd2l0Y2hhYmxlKQo+ICsgICAgICAgICAgICBwdXRfYml0cygmcGJjLCAyLCBmaC0+aW50ZXJw b2xhdGlvbl9maWx0ZXIpOwo+ICsKPiArICAgICAgICBwdXRfYml0cygmcGJjLCAxLCBmaC0+aXNf bW90aW9uX21vZGVfc3dpdGNoYWJsZSk7Cj4gKyAgICB9Cj4gKwo+ICsgICAgaWYgKCEoc2gtPnJl ZHVjZWRfc3RpbGxfcGljdHVyZV9oZWFkZXIgfHwgZmgtPmRpc2FibGVfY2RmX3VwZGF0ZSkpCj4g KyAgICAgICAgcHV0X2JpdHMoJnBiYywgMSwgZmgtPmRpc2FibGVfZnJhbWVfZW5kX3VwZGF0ZV9j ZGYpOwo+ICsKPiArICAgIC8qKiB0aWxlX2luZm8oKSAqLwo+ICsgICAgcHV0X2JpdHMoJnBiYywg MSwgZmgtPnVuaWZvcm1fdGlsZV9zcGFjaW5nX2ZsYWcpOwo+ICsgICAgaWYgKGZoLT51bmlmb3Jt X3RpbGVfc3BhY2luZ19mbGFnKSB7Cj4gKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHByaXYtPnRp bGVfY29sc19sb2cyIC0gcHJpdi0+bWluX2xvZzJfdGlsZV9jb2xzOyBpKyspIHsKPiArICAgICAg ICAgICAgcHV0X2JpdHMoJnBiYywgMSwgMSk7Cj4gKyAgICAgICAgfQo+ICsgICAgICAgIGlmIChw cml2LT50aWxlX2NvbHNfbG9nMiA8IHByaXYtPm1heF9sb2cyX3RpbGVfY29scykKPiArICAgICAg ICAgICAgcHV0X2JpdHMoJnBiYywgMSwgMCk7Cj4gKwo+ICsgICAgICAgIGZvciAoaSA9IDA7IGkg PCBwcml2LT50aWxlX3Jvd3NfbG9nMiAtIHByaXYtPm1pbl9sb2cyX3RpbGVfcm93czsgaSsrKSB7 Cj4gKyAgICAgICAgICAgIHB1dF9iaXRzKCZwYmMsIDEsIDEpOwo+ICsgICAgICAgIH0KPiArICAg ICAgICBpZiAocHJpdi0+dGlsZV9yb3dzX2xvZzIgPCBwcml2LT5tYXhfbG9nMl90aWxlX3Jvd3Mp Cj4gKyAgICAgICAgICAgIHB1dF9iaXRzKCZwYmMsIDEsIDApOwo+ICsgICAgfSBlbHNlIHsKPiAr ICAgICAgICBpbnQgc3RhcnRfc2IgPSAwOwo+ICsgICAgICAgIGludCBtYXhfd2lkdGgsIG1heF9o ZWlnaHQ7Cj4gKyAgICAgICAgZm9yIChpID0gMDsgc3RhcnRfc2IgPCBwcml2LT5zYl9jb2xzOyBp KyspIHsKPiArICAgICAgICAgICAgbWF4X3dpZHRoID0gRkZNSU4ocHJpdi0+c2JfY29scyAtIHN0 YXJ0X3NiLCBwcml2LT5tYXhfdGlsZV93aWR0aF9zYik7Cj4gKyAgICAgICAgICAgIHdyaXRlX25z KCZwYmMsIG1heF93aWR0aCwgZmgtPndpZHRoX2luX3Nic19taW51c18xW2ldKTsKPiArICAgICAg ICAgICAgc3RhcnRfc2IgKz0gZmgtPndpZHRoX2luX3Nic19taW51c18xW2ldICsgMTsKPiArICAg ICAgICB9Cj4gKwo+ICsgICAgICAgIHN0YXJ0X3NiID0gMDsKPiArICAgICAgICBmb3IgKGkgPSAw OyBzdGFydF9zYiA8IHByaXYtPnNiX3Jvd3M7IGkrKykgewo+ICsgICAgICAgICAgICBtYXhfaGVp Z2h0ID0gRkZNSU4ocHJpdi0+c2Jfcm93cyAtIHN0YXJ0X3NiLCBwcml2LT5tYXhfdGlsZV9oZWln aHRfc2IpOwo+ICsgICAgICAgICAgICB3cml0ZV9ucygmcGJjLCBtYXhfaGVpZ2h0LCBmaC0+aGVp Z2h0X2luX3Nic19taW51c18xW2ldKTsKPiArICAgICAgICAgICAgc3RhcnRfc2IgKz0gZmgtPmhl aWdodF9pbl9zYnNfbWludXNfMVtpXSArIDE7Cj4gKyAgICAgICAgfQo+ICsgICAgfQo+ICsKPiAr ICAgIGlmIChwcml2LT50aWxlX2NvbHNfbG9nMiB8fCBwcml2LT50aWxlX3Jvd3NfbG9nMikgewo+ ICsgICAgICAgIHB1dF9iaXRzKCZwYmMsIHByaXYtPnRpbGVfY29sc19sb2cyICsgcHJpdi0+dGls ZV9yb3dzX2xvZzIsIGZoLT5jb250ZXh0X3VwZGF0ZV90aWxlX2lkKTsKPiArICAgICAgICBwdXRf Yml0cygmcGJjLCAyLCBmaC0+dGlsZV9zaXplX2J5dGVzX21pbnVzMSk7Cj4gKyAgICB9Cj4gKwo+ ICsgICAgcWluZGV4X29mZnNldCA9IHB1dF9iaXRzX2NvdW50KCZwYmMpOwo+ICsgICAgLyoqIHF1 YW50aXphdGlvbl9wYXJhbXMoKSAqLwo+ICsgICAgcHV0X2JpdHMoJnBiYywgOCwgZmgtPmJhc2Vf cV9pZHgpOwo+ICsgICAgcHV0X2JpdHMoJnBiYywgMSwgZmgtPmRlbHRhX3FfeV9kYyk7Cj4gKyAg ICBwdXRfYml0cygmcGJjLCAxLCBmaC0+ZGVsdGFfcV91X2RjKTsKPiArICAgIHB1dF9iaXRzKCZw YmMsIDEsIGZoLT5kZWx0YV9xX3VfYWMpOwo+ICsgICAgcHV0X2JpdHMoJnBiYywgMSwgZmgtPnVz aW5nX3FtYXRyaXgpOwo+ICsKPiArICAgIC8qKiBzZWdtZW50YXRpb25fcGFyYW1zKCkgKi8KPiAr ICAgIHB1dF9iaXRzKCZwYmMsIDEsIGZoLT5zZWdtZW50YXRpb25fZW5hYmxlZCk7Cj4gKwo+ICsg ICAgLyoqIGRlbHRhX3FfcGFyYW1zKCkgKi8KPiArICAgIGlmIChmaC0+YmFzZV9xX2lkeCkKPiAr ICAgICAgICBwdXRfYml0cygmcGJjLCAxLCBmaC0+ZGVsdGFfcV9wcmVzZW50KTsKPiArICAgIGlm IChmaC0+ZGVsdGFfcV9wcmVzZW50KQo+ICsgICAgICAgIHB1dF9iaXRzKCZwYmMsIDIsIGZoLT5k ZWx0YV9xX3Jlcyk7Cj4gKwo+ICsgICAgLyoqIGRlbHRhX2xmX3BhcmFtcygpICovCj4gKyAgICBp ZiAoZmgtPmRlbHRhX3FfcHJlc2VudCkgewo+ICsgICAgICAgIGlmICghZmgtPmFsbG93X2ludHJh YmMpCj4gKyAgICAgICAgICAgIHB1dF9iaXRzKCZwYmMsIDEsIGZoLT5kZWx0YV9sZl9wcmVzZW50 KTsKPiArICAgICAgICBpZiAoZmgtPmRlbHRhX2xmX3ByZXNlbnQpIHsKPiArICAgICAgICAgICAg cHV0X2JpdHMoJnBiYywgMiwgZmgtPmRlbHRhX2xmX3Jlcyk7Cj4gKyAgICAgICAgICAgIHB1dF9i aXRzKCZwYmMsIDEsIGZoLT5kZWx0YV9sZl9tdWx0aSk7Cj4gKyAgICAgICAgfQo+ICsgICAgfQo+ ICsKPiArICAgIC8qKiBjb2RlbG9zc2xlc3MgKi8KPiArICAgIGNvZGVkX2xvc3NsZXNzID0gMTsK PiArICAgIGZvciAoaSA9IDA7IGkgPCBBVjFfTUFYX1NFR01FTlRTOyBpKyspIHsKPiArICAgICAg ICBpZiAoZmgtPnNlZ21lbnRhdGlvbl9lbmFibGVkICYmIGZoLT5mZWF0dXJlX2VuYWJsZWRbaV1b QVYxX1NFR19MVkxfQUxUX1FdKQo+ICsgICAgICAgICAgICBxaW5kZXggPSBmaC0+YmFzZV9xX2lk eCArIGZoLT5mZWF0dXJlX3ZhbHVlW2ldW0FWMV9TRUdfTFZMX0FMVF9RXTsKPiArICAgICAgICBl bHNlCj4gKyAgICAgICAgICAgIHFpbmRleCA9IGZoLT5iYXNlX3FfaWR4Owo+ICsgICAgICAgIHFp bmRleCA9IGF2X2NsaXBfdWludHAyKHFpbmRleCwgOCk7Cj4gKwo+ICsgICAgICAgIGlmIChxaW5k ZXggfHwgZmgtPmRlbHRhX3FfeV9kYyB8fCBmaC0+ZGVsdGFfcV91X2FjIHx8IGZoLT5kZWx0YV9x X3VfZGMgfHwKPiArICAgICAgICAgICAgZmgtPmRlbHRhX3Ffdl9hYyB8fCBmaC0+ZGVsdGFfcV92 X2RjKQo+ICsgICAgICAgICAgICBjb2RlZF9sb3NzbGVzcyA9IDA7Cj4gKyAgICB9Cj4gKwo+ICsg ICAgbG9vcGZpbHRlcl9vZmZzZXQgPSBwdXRfYml0c19jb3VudCgmcGJjKTsKPiArICAgIC8qKiBs b29wX2ZpbHRlcl9wYXJhbXMoKSAqLwo+ICsgICAgaWYgKCEoY29kZWRfbG9zc2xlc3MgfHwgZmgt PmFsbG93X2ludHJhYmMpKSB7Cj4gKyAgICAgICAgcHV0X2JpdHMoJnBiYywgNiwgZmgtPmxvb3Bf ZmlsdGVyX2xldmVsWzBdKTsKPiArICAgICAgICBwdXRfYml0cygmcGJjLCA2LCBmaC0+bG9vcF9m aWx0ZXJfbGV2ZWxbMV0pOwo+ICsgICAgICAgIGlmIChmaC0+bG9vcF9maWx0ZXJfbGV2ZWxbMF0g fHwgZmgtPmxvb3BfZmlsdGVyX2xldmVsWzFdKSB7Cj4gKyAgICAgICAgICAgIHB1dF9iaXRzKCZw YmMsIDYsIGZoLT5sb29wX2ZpbHRlcl9sZXZlbFsyXSk7Cj4gKyAgICAgICAgICAgIHB1dF9iaXRz KCZwYmMsIDYsIGZoLT5sb29wX2ZpbHRlcl9sZXZlbFszXSk7Cj4gKyAgICAgICAgfQo+ICsgICAg ICAgIHB1dF9iaXRzKCZwYmMsIDMsIGZoLT5sb29wX2ZpbHRlcl9zaGFycG5lc3MpOwo+ICsgICAg ICAgIHB1dF9iaXRzKCZwYmMsIDEsIGZoLT5sb29wX2ZpbHRlcl9kZWx0YV9lbmFibGVkKTsKPiAr ICAgIH0KPiArCj4gKyAgICBjZGVmX3N0YXJ0X29mZnNldCA9IHB1dF9iaXRzX2NvdW50KCZwYmMp Owo+ICsgICAgLyoqIGNkZWZfcGFyYW1zKCkgKi8KPiArICAgIGlmICghKGNvZGVkX2xvc3NsZXNz IHx8IGZoLT5hbGxvd19pbnRyYWJjIHx8ICFzaC0+ZW5hYmxlX2NkZWYpKSB7Cj4gKyAgICAgICAg cHV0X2JpdHMoJnBiYywgMiwgZmgtPmNkZWZfZGFtcGluZ19taW51c18zKTsKPiArICAgICAgICBw dXRfYml0cygmcGJjLCAyLCBmaC0+Y2RlZl9iaXRzKTsKPiArICAgICAgICBmb3IgKGkgPSAwOyBp IDwgKDEgPDwgZmgtPmNkZWZfYml0cyk7IGkrKykgewo+ICsgICAgICAgICAgICBwdXRfYml0cygm cGJjLCA0LCBmaC0+Y2RlZl95X3ByaV9zdHJlbmd0aFtpXSk7Cj4gKyAgICAgICAgICAgIHB1dF9i aXRzKCZwYmMsIDIsIGZoLT5jZGVmX3lfc2VjX3N0cmVuZ3RoW2ldKTsKPiArICAgICAgICAgICAg cHV0X2JpdHMoJnBiYywgNCwgZmgtPmNkZWZfdXZfcHJpX3N0cmVuZ3RoW2ldKTsKPiArICAgICAg ICAgICAgcHV0X2JpdHMoJnBiYywgMiwgZmgtPmNkZWZfdXZfc2VjX3N0cmVuZ3RoW2ldKTsKPiAr ICAgICAgICB9Cj4gKyAgICB9Cj4gKyAgICBjZGVmX2VuZF9vZmZzZXQgPSBwdXRfYml0c19jb3Vu dCgmcGJjKTsKPiArCj4gKyAgICAvKiogcmVhZF90eF9tb2RlKCkgKi8KPiArICAgIGlmIChmaC0+ dHhfbW9kZSA9PSBBVjFfVFhfTU9ERV9TRUxFQ1QpCj4gKyAgICAgICAgcHV0X2JpdHMoJnBiYywg MSwgMSk7Cj4gKyAgICBlbHNlCj4gKyAgICAgICAgcHV0X2JpdHMoJnBiYywgMSwgMCk7Cj4gKwo+ ICsgICAgLyoqIGZyYW1lX3JlZmVyZW5jZV9tb2RlKCkgKi8KPiArICAgIGlmICghZnJhbWVfaXNf aW50cmEpCj4gKyAgICAgICAgcHV0X2JpdHMoJnBiYywgMSwgZmgtPnJlZmVyZW5jZV9zZWxlY3Qp Owo+ICsKPiArICAgIC8qKiBza2lwX21vZGVfcGFyYW1zKCkgKi8KPiArICAgIGlmIChmcmFtZV9p c19pbnRyYSB8fCAhZmgtPnJlZmVyZW5jZV9zZWxlY3QgfHwgIXNoLT5lbmFibGVfb3JkZXJfaGlu dCkKPiArICAgICAgICBza2lwX21vZGVfYWxsb3dlZCA9IDA7Cj4gKyAgICBlbHNlIHsKPiArICAg ICAgICBpbnQgZm9yd2FyZF9pZHgsIGJhY2t3YXJkX2lkeDsKPiArICAgICAgICBpbnQgcmVmX2hp bnQsIGZvcndhcmRfaGludCwgYmFja3dhcmRfaGludDsKPiArCj4gKyAgICAgICAgZm9yd2FyZF9p ZHggPSAtMTsKPiArICAgICAgICBiYWNrd2FyZF9pZHggPSAtMTsKPiArCj4gKyAgICAgICAgZm9y IChpID0gMDsgaSA8IEFWMV9SRUZTX1BFUl9GUkFNRTsgaSsrKSB7Cj4gKyAgICAgICAgICAgIHJl Zl9oaW50ID0gZmgtPnJlZl9vcmRlcl9oaW50W2ZoLT5yZWZfZnJhbWVfaWR4W2ldXTsKPiArICAg ICAgICAgICAgaWYgKGdldF9yZWxhdGl2ZV9kaXN0KHNoLCByZWZfaGludCwgZmgtPm9yZGVyX2hp bnQpIDwgMCkgewo+ICsgICAgICAgICAgICAgICAgaWYgKGZvcndhcmRfaWR4IDwgMCB8fCBnZXRf cmVsYXRpdmVfZGlzdChzaCwgcmVmX2hpbnQsIGZvcndhcmRfaWR4KSA+IDApIHsKPiArICAgICAg ICAgICAgICAgICAgICBmb3J3YXJkX2lkeCA9IGk7Cj4gKyAgICAgICAgICAgICAgICAgICAgZm9y d2FyZF9oaW50ID0gcmVmX2hpbnQ7Cj4gKyAgICAgICAgICAgICAgICB9Cj4gKyAgICAgICAgICAg IH0gZWxzZSBpZiAoZ2V0X3JlbGF0aXZlX2Rpc3Qoc2gsIHJlZl9oaW50LCBmaC0+b3JkZXJfaGlu dCkgPiAwKSB7Cj4gKyAgICAgICAgICAgICAgICBpZiAoYmFja3dhcmRfaWR4IDwgMCB8fCBnZXRf cmVsYXRpdmVfZGlzdChzaCwgcmVmX2hpbnQsIGJhY2t3YXJkX2hpbnQpIDwgMCkgewo+ICsgICAg ICAgICAgICAgICAgICAgIGJhY2t3YXJkX2lkeCA9IGk7Cj4gKyAgICAgICAgICAgICAgICAgICAg YmFja3dhcmRfaGludCA9IHJlZl9oaW50Owo+ICsgICAgICAgICAgICAgICAgfQo+ICsgICAgICAg ICAgICB9Cj4gKyAgICAgICAgfQo+ICsgICAgICAgIGlmIChmb3J3YXJkX2lkeCA8IDApCj4gKyAg ICAgICAgICAgIHNraXBfbW9kZV9hbGxvd2VkID0gMDsKPiArICAgICAgICBlbHNlIGlmIChiYWNr d2FyZF9pZHggPj0gMCkKPiArICAgICAgICAgICAgc2tpcF9tb2RlX2FsbG93ZWQgPSAxOwo+ICsg ICAgICAgIGVsc2Ugewo+ICsgICAgICAgICAgICBpbnQgc2Vjb25kX2ZvcndhcmRfaWR4LCBzZWNv bmRfZm9yd2FyZF9oaW50Owo+ICsgICAgICAgICAgICBzZWNvbmRfZm9yd2FyZF9pZHggPSAtMTsK PiArICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IEFWMV9SRUZTX1BFUl9GUkFNRTsgaSsrKSB7 Cj4gKyAgICAgICAgICAgICAgICByZWZfaGludCA9IGZoLT5yZWZfb3JkZXJfaGludFtmaC0+cmVm X2ZyYW1lX2lkeFtpXV07Cj4gKyAgICAgICAgICAgICAgICBpZiAoZ2V0X3JlbGF0aXZlX2Rpc3Qo c2gsIHJlZl9oaW50LCBmb3J3YXJkX2hpbnQpIDwgMCkgewo+ICsgICAgICAgICAgICAgICAgICAg IGlmIChzZWNvbmRfZm9yd2FyZF9pZHggPCAwIHx8IGdldF9yZWxhdGl2ZV9kaXN0KHNoLCByZWZf aGludCwgc2Vjb25kX2ZvcndhcmRfaGludCkgPiAwKXsKPiArICAgICAgICAgICAgICAgICAgICAg ICAgc2Vjb25kX2ZvcndhcmRfaWR4ID0gaTsKPiArICAgICAgICAgICAgICAgICAgICAgICAgc2Vj b25kX2ZvcndhcmRfaGludCA9IHJlZl9oaW50Owo+ICsgICAgICAgICAgICAgICAgICAgIH0KPiAr ICAgICAgICAgICAgICAgIH0KPiArICAgICAgICAgICAgfQo+ICsgICAgICAgICAgICBpZiAoc2Vj b25kX2ZvcndhcmRfaWR4IDwgMCkKPiArICAgICAgICAgICAgICAgIHNraXBfbW9kZV9hbGxvd2Vk ID0gMDsKPiArICAgICAgICAgICAgZWxzZQo+ICsgICAgICAgICAgICAgICAgc2tpcF9tb2RlX2Fs bG93ZWQgPSAxOwo+ICsgICAgICAgIH0KPiArICAgIH0KPiArCj4gKyAgICBpZiAoc2tpcF9tb2Rl X2FsbG93ZWQpCj4gKyAgICAgICAgcHV0X2JpdHMoJnBiYywgMSwgZmgtPnNraXBfbW9kZV9wcmVz ZW50KTsKPiArCj4gKyAgICBwdXRfYml0cygmcGJjLCAxLCBmaC0+cmVkdWNlZF90eF9zZXQpOwo+ ICsKPiArICAgIC8qKiBnbG9iYWxfbW90aW9uX3BhcmFtcygpICovCj4gKyAgICBpZiAoIWZyYW1l X2lzX2ludHJhKSB7Cj4gKyAgICAgICAgZm9yIChpID0gQVYxX1JFRl9GUkFNRV9MQVNUOyBpIDw9 IEFWMV9SRUZfRlJBTUVfQUxUUkVGOyBpKyspIHsKPiArICAgICAgICAgICAgcHV0X2JpdHMoJnBi YywgMSwgZmgtPmlzX2dsb2JhbFtpXSk7Cj4gKyAgICAgICAgICAgIGlmIChmaC0+aXNfZ2xvYmFs W2ldKSB7Cj4gKyAgICAgICAgICAgICAgICBwdXRfYml0cygmcGJjLCAxLCBmaC0+aXNfcm90X3pv b21baV0pOwo+ICsgICAgICAgICAgICAgICAgaWYgKCFmaC0+aXNfcm90X3pvb21baV0pCj4gKyAg ICAgICAgICAgICAgICAgICAgcHV0X2JpdHMoJnBiYywgMSwgZmgtPmlzX3RyYW5zbGF0aW9uW2ld KTsKPiArICAgICAgICAgICAgfQo+ICsgICAgICAgIH0KPiArICAgIH0KPiArCj4gK3RyYWlsaW5n X2JpdHM6Cj4gKyAgICBwYXlsb2FkX2JpdHMgPSBwdXRfYml0c19jb3VudCgmcGJjKSAtIHN0YXJ0 Owo+ICsKPiArICAgIC8qKiB0cmFpbGluZ19iaXRzKCkgKi8KPiArICAgIHB1dF9iaXRzKCZwYmMs IDEsIDEpOwo+ICsgICAgb2J1X3NpemUgPSAocHV0X2JpdHNfY291bnQoJnBiYykgLSBzdGFydCAr IDcpIC8gODsKPiArICAgIGZvciAoaSA9IDA7IGkgPCBvYnVfc2l6ZSAqIDggLSBwYXlsb2FkX2Jp dHMgLSAxOyBpKyspCj4gKyAgICAgICAgcHV0X2JpdHMoJnBiYywgMSwgMCk7Cj4gKwo+ICsgICAg Zmx1c2hfcHV0X2JpdHMoJnBiYyk7Cj4gKyAgICAqZGF0YV9sZW4gPSBwdXRfYml0c19jb3VudCgm cGJjKTsKPiArCj4gKyAgICAvKiogdXBkYXRlIG9idSBzaXplIGluIGJpdHN0cmVhbSAqLwo+ICsg ICAgaWYgKGZoX29idS0+aGVhZGVyLm9idV9oYXNfc2l6ZV9maWVsZCkgewo+ICsgICAgICAgIG9i dV9zaXplX2xlbiA9IHByaXYtPmF0dHJfZXh0Mi5iaXRzLm9idV9zaXplX2J5dGVzX21pbnVzMSAr IDE7Cj4gKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG9idV9zaXplX2xlbjsgaSsrKSB7Cj4gKyAg ICAgICAgICAgIGJ5dGUgPSBvYnVfc2l6ZSA+PiAoNyAqIGkpICYgMHg3ZjsKPiArICAgICAgICAg ICAgaWYgKGkgPCBvYnVfc2l6ZV9sZW4gLSAxKQo+ICsgICAgICAgICAgICAgICAgYnl0ZSB8PSAw eDgwOwo+ICsgICAgICAgICAgICBwdXRfYml0cygmcGJjX3RtcCwgOCwgYnl0ZSk7Cj4gKyAgICAg ICAgfQo+ICsgICAgICAgIGZsdXNoX3B1dF9iaXRzKCZwYmNfdG1wKTsKPiArICAgICAgICBtZW1t b3ZlKHBiY190bXAuYnVmX3B0ciwgcGJjX3RtcC5idWZfcHRyICsgKDggLSBvYnVfc2l6ZV9sZW4p LCBvYnVfc2l6ZSk7Cj4gKyAgICAgICAgKmRhdGFfbGVuIC09ICg4IC0gb2J1X3NpemVfbGVuKSAq IDg7Cj4gKyAgICB9Cj4gKwo+ICsgICAgaWYgKGZoLT5zaG93X2V4aXN0aW5nX2ZyYW1lKQo+ICsg ICAgICAgIHJldHVybiAwOwo+ICsKPiArICAgIGlmICghKGN0eC0+dmFfcmNfbW9kZSAmIFZBX1JD X0NRUCkpIHsKPiArICAgICAgICB2cGljLT5taW5fYmFzZV9xaW5kZXggPSBhdl9jbGlwKGF2Y3R4 LT5xbWluLCAxLCBBVjFfTUFYX1FVQU5UKTsKPiArICAgICAgICB2cGljLT5tYXhfYmFzZV9xaW5k ZXggPSBhdl9jbGlwKGF2Y3R4LT5xbWF4LCAxLCBBVjFfTUFYX1FVQU5UKTsKPiArCj4gKyAgICAg ICAgdnBpYy0+Yml0X29mZnNldF9xaW5kZXggICAgICAgICAgICA9IHFpbmRleF9vZmZzZXQgLSAo OCAtIG9idV9zaXplX2xlbikgKiA4Owo+ICsgICAgICAgIHZwaWMtPmJpdF9vZmZzZXRfbG9vcGZp bHRlcl9wYXJhbXMgPSBsb29wZmlsdGVyX29mZnNldCAtICg4IC0gb2J1X3NpemVfbGVuKSAqIDg7 Cj4gKyAgICAgICAgdnBpYy0+Yml0X29mZnNldF9jZGVmX3BhcmFtcyAgICAgICA9IGNkZWZfc3Rh cnRfb2Zmc2V0IC0gKDggLSBvYnVfc2l6ZV9sZW4pICogODsKPiArICAgICAgICB2cGljLT5zaXpl X2luX2JpdHNfY2RlZl9wYXJhbXMgICAgID0gY2RlZl9lbmRfb2Zmc2V0IC0gY2RlZl9zdGFydF9v ZmZzZXQ7Cj4gKyAgICAgICAgdnBpYy0+c2l6ZV9pbl9iaXRzX2ZyYW1lX2hkcl9vYnUgICA9ICpk YXRhX2xlbjsKPiArCj4gKyAgICAgICAgdnBpYy0+Ynl0ZV9vZmZzZXRfZnJhbWVfaGRyX29idV9z aXplID0gKCgocGljLT50eXBlID09IFBJQ1RVUkVfVFlQRV9JRFIpID8KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2LT5zaF9kYXRhX2xlbiAvIDgg OiAwKSArCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KGZoX29idS0+aGVhZGVyLm9idV9leHRlbnNpb25fZmxhZyA/Cj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiA6IDEpKTsKPiArICAgIH0KPiArCj4gKyAg ICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCB0aWxlX2xvZzIoaW50IGJsa1NpemUs IGludCB0YXJnZXQpIHsKPiArICAgIGludCBrOwo+ICsgICAgZm9yIChrID0gMDsgKGJsa1NpemUg PDwgaykgPCB0YXJnZXQ7IGsrKyk7Cj4gKyAgICByZXR1cm4gazsKPiArfQo+ICsKPiArc3RhdGlj IGludCB2YWFwaV9lbmNvZGVfYXYxX3NldF90aWxlKEFWQ29kZWNDb250ZXh0ICphdmN0eCkKPiAr ewo+ICsgICAgVkFBUElFbmNvZGVBVjFDb250ZXh0ICpwcml2ID0gYXZjdHgtPnByaXZfZGF0YTsK PiArICAgIGludCBtaV9jb2xzLCBtaV9yb3dzLCBzYl9zaGlmdCwgc2Jfc2l6ZTsKPiArICAgIGlu dCBtYXhfdGlsZV9hcmVhX3NiLCBtYXhfdGlsZV9hcmVhX3NiX3ZhcmllZDsKPiArICAgIGludCB0 aWxlX3dpZHRoX3NiLCB0aWxlX2hlaWdodF9zYiwgd2lkZXN0X3RpbGVfc2I7Cj4gKyAgICBpbnQg bWluX2xvZzJfdGlsZXM7Cj4gKyAgICBpbnQgdGlsZV9yb3dzX3RtcCwgaTsKPiArCj4gKyAgICBp ZiAocHJpdi0+dGlsZV9jb2xzID4gQVYxX01BWF9USUxFX0NPTFMgfHwKPiArICAgICAgICBwcml2 LT50aWxlX3Jvd3MgPiBBVjFfTUFYX1RJTEVfUk9XUykgewo+ICsgICAgICAgIGF2X2xvZyhhdmN0 eCwgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCB0aWxlIG51bWJlciAlZHglZCwgc2hvdWxkIGxlc3Mg dGhhbiAlZHglZC5cbiIsCj4gKyAgICAgICAgICAgICAgIHByaXYtPnRpbGVfY29scywgcHJpdi0+ dGlsZV9yb3dzLCBBVjFfTUFYX1RJTEVfQ09MUywgQVYxX01BWF9USUxFX1JPV1MpOwo+ICsgICAg ICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Cj4gKyAgICB9Cj4gKwo+ICsgICAgbWlfY29scyA9 IDIgKiAoKGF2Y3R4LT53aWR0aCArIDcpID4+IDMpOwo+ICsgICAgbWlfcm93cyA9IDIgKiAoKGF2 Y3R4LT5oZWlnaHQgKyA3KSA+PiAzKTsKPiArICAgIHByaXYtPnNiX2NvbHMgPSBwcml2LT51c2Vf MTI4eDEyOF9zdXBlcmJsb2NrID8KPiArICAgICAgICAgICAgICAgICAgICAoKG1pX2NvbHMgKyAz MSkgPj4gNSkgOiAoKG1pX2NvbHMgKyAxNSkgPj4gNCk7Cj4gKyAgICBwcml2LT5zYl9yb3dzID0g cHJpdi0+dXNlXzEyOHgxMjhfc3VwZXJibG9jayA/Cj4gKyAgICAgICAgICAgICAgICAgICAgKCht aV9yb3dzICsgMzEpID4+IDUpIDogKChtaV9yb3dzICsgMTUpID4+IDQpOwo+ICsgICAgc2Jfc2hp ZnQgPSBwcml2LT51c2VfMTI4eDEyOF9zdXBlcmJsb2NrID8gNSA6IDQ7Cj4gKyAgICBzYl9zaXpl ICA9IHNiX3NoaWZ0ICsgMjsKPiArICAgIHByaXYtPm1heF90aWxlX3dpZHRoX3NiID0gQVYxX01B WF9USUxFX1dJRFRIID4+IHNiX3NpemU7Cj4gKyAgICBtYXhfdGlsZV9hcmVhX3NiID0gQVYxX01B WF9USUxFX0FSRUEgID4+ICgyICogc2Jfc2l6ZSk7Cj4gKwo+ICsgICAgcHJpdi0+bWluX2xvZzJf dGlsZV9jb2xzID0gdGlsZV9sb2cyKHByaXYtPm1heF90aWxlX3dpZHRoX3NiLCBwcml2LT5zYl9j b2xzKTsKPiArICAgIHByaXYtPm1heF9sb2cyX3RpbGVfY29scyA9IHRpbGVfbG9nMigxLCBGRk1J Tihwcml2LT5zYl9jb2xzLCBBVjFfTUFYX1RJTEVfQ09MUykpOwo+ICsgICAgcHJpdi0+bWF4X2xv ZzJfdGlsZV9yb3dzID0gdGlsZV9sb2cyKDEsIEZGTUlOKHByaXYtPnNiX3Jvd3MsIEFWMV9NQVhf VElMRV9ST1dTKSk7Cj4gKyAgICBtaW5fbG9nMl90aWxlcyA9IEZGTUFYKHByaXYtPm1pbl9sb2cy X3RpbGVfY29scywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlsZV9sb2cyKG1heF90 aWxlX2FyZWFfc2IsIHByaXYtPnNiX3Jvd3MgKiBwcml2LT5zYl9jb2xzKSk7Cj4gKwo+ICsgICAg aWYgKHByaXYtPnRpbGVfY29scyAhPSBhdl9jbGlwKHByaXYtPnRpbGVfY29scywgKHByaXYtPnNi X2NvbHMgKyBwcml2LT5tYXhfdGlsZV93aWR0aF9zYiAtIDEpIC8gcHJpdi0+bWF4X3RpbGVfd2lk dGhfc2IsIHByaXYtPnNiX2NvbHMpKSB7Cj4gKyAgICAgICAgcHJpdi0+dGlsZV9jb2xzID0gYXZf Y2xpcChwcml2LT50aWxlX2NvbHMsIChwcml2LT5zYl9jb2xzICsgcHJpdi0+bWF4X3RpbGVfd2lk dGhfc2IgLSAxKSAvIHByaXYtPm1heF90aWxlX3dpZHRoX3NiLCBwcml2LT5zYl9jb2xzKTsKPiAr ICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19XQVJOSU5HLCAiSW52YWxpZCB0aWxlIGNvbHMs IGNvcnJlY3QgdG8gJWQuXG4iLCBwcml2LT50aWxlX2NvbHMpOwo+ICsgICAgfQo+ICsKPiArICAg IHByaXYtPnRpbGVfY29sc19sb2cyID0gdGlsZV9sb2cyKDEsIHByaXYtPnRpbGVfY29scyk7Cj4g KyAgICB0aWxlX3dpZHRoX3NiID0gKHByaXYtPnNiX2NvbHMgKyAoMSA8PCBwcml2LT50aWxlX2Nv bHNfbG9nMikgLSAxKSA+Pgo+ICsgICAgICAgICAgICAgICAgICAgIHByaXYtPnRpbGVfY29sc19s b2cyOwo+ICsKPiArICAgIGlmIChwcml2LT50aWxlX3Jvd3MgPiBwcml2LT5zYl9yb3dzKSB7Cj4g KyAgICAgICAgcHJpdi0+dGlsZV9yb3dzID0gcHJpdi0+c2Jfcm93czsKPiArICAgICAgICBhdl9s b2coYXZjdHgsIEFWX0xPR19XQVJOSU5HLCAiSW52YWxpZCB0aWxlIHJvd3MsIGNvcnJlY3QgdG8g JWQuXG4iLCBwcml2LT50aWxlX3Jvd3MpOwo+ICsgICAgfQo+ICsKPiArICAgIGZvciAodGlsZV9y b3dzX3RtcCA9IHByaXYtPnRpbGVfcm93czsgdGlsZV9yb3dzX3RtcCA8PSBwcml2LT5zYl9yb3dz ICYmIHRpbGVfcm93c190bXAgPD0gQVYxX01BWF9USUxFX1JPV1M7IHRpbGVfcm93c190bXArKykg ewo+ICsgICAgICAgIC8qKiB0cnkgdW5pZm9ybWVkIHRpbGUuICovCj4gKyAgICAgICAgcHJpdi0+ dGlsZV9yb3dzX2xvZzIgPSB0aWxlX2xvZzIoMSwgdGlsZV9yb3dzX3RtcCk7Cj4gKyAgICAgICAg aWYgKChwcml2LT5zYl9jb2xzICsgdGlsZV93aWR0aF9zYiAtIDEpIC8gdGlsZV93aWR0aF9zYiA9 PSBwcml2LT50aWxlX2NvbHMpIHsKPiArICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHByaXYt PnRpbGVfY29scyAtIDE7IGkrKykKPiArICAgICAgICAgICAgICAgIHByaXYtPndpZHRoX2luX3Ni c19taW51c18xW2ldID0gdGlsZV93aWR0aF9zYiAtIDE7Cj4gKyAgICAgICAgICAgIHByaXYtPndp ZHRoX2luX3Nic19taW51c18xW2ldID0gcHJpdi0+c2JfY29scyAtIChwcml2LT50aWxlX2NvbHMg LSAxKSAqIHRpbGVfd2lkdGhfc2IgLSAxOwo+ICsKPiArICAgICAgICAgICAgdGlsZV9oZWlnaHRf c2IgPSAocHJpdi0+c2Jfcm93cyArICgxIDw8IHByaXYtPnRpbGVfcm93c19sb2cyKSAtIDEpID4+ Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+dGlsZV9yb3dzX2xvZzI7Cj4g Kwo+ICsgICAgICAgICAgICBpZiAoKHByaXYtPnNiX3Jvd3MgKyB0aWxlX2hlaWdodF9zYiAtIDEp IC8gdGlsZV9oZWlnaHRfc2IgPT0gdGlsZV9yb3dzX3RtcCAmJgo+ICsgICAgICAgICAgICAgICAg dGlsZV9oZWlnaHRfc2IgPD0gbWF4X3RpbGVfYXJlYV9zYiAvIHRpbGVfd2lkdGhfc2IpIHsKPiAr ICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB0aWxlX3Jvd3NfdG1wIC0gMTsgaSsrKQo+ ICsgICAgICAgICAgICAgICAgICAgIHByaXYtPmhlaWdodF9pbl9zYnNfbWludXNfMVtpXSA9IHRp bGVfaGVpZ2h0X3NiIC0gMTsKPiArICAgICAgICAgICAgICAgIHByaXYtPmhlaWdodF9pbl9zYnNf bWludXNfMVtpXSA9IHByaXYtPnNiX3Jvd3MgLSAodGlsZV9yb3dzX3RtcCAtIDEpICogdGlsZV9o ZWlnaHRfc2IgLSAxOwo+ICsKPiArICAgICAgICAgICAgICAgIHByaXYtPnVuaWZvcm1fdGlsZSA9 IDE7Cj4gKyAgICAgICAgICAgICAgICBwcml2LT5taW5fbG9nMl90aWxlX3Jvd3MgPSBGRk1BWCht aW5fbG9nMl90aWxlcyAtIHByaXYtPnRpbGVfY29sc19sb2cyLCAwKTsKPiArCj4gKyAgICAgICAg ICAgICAgICBicmVhazsKPiArICAgICAgICAgICAgfQo+ICsgICAgICAgIH0KPiArCj4gKyAgICAg ICAgLyoqIHRyeSBub24tdW5pZm9ybWVkIHRpbGUuICovCj4gKyAgICAgICAgd2lkZXN0X3RpbGVf c2IgPSAwOwo+ICsgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwcml2LT50aWxlX2NvbHM7IGkrKykg ewo+ICsgICAgICAgICAgICBwcml2LT53aWR0aF9pbl9zYnNfbWludXNfMVtpXSA9IChpICsgMSkg KiBwcml2LT5zYl9jb2xzIC8gcHJpdi0+dGlsZV9jb2xzIC0gaSAqIHByaXYtPnNiX2NvbHMgLyBw cml2LT50aWxlX2NvbHMgLSAxOwo+ICsgICAgICAgICAgICB3aWRlc3RfdGlsZV9zYiA9IEZGTUFY KHdpZGVzdF90aWxlX3NiLCBwcml2LT53aWR0aF9pbl9zYnNfbWludXNfMVtpXSArIDEpOwo+ICsg ICAgICAgIH0KPiArCj4gKyAgICAgICAgaWYgKG1pbl9sb2cyX3RpbGVzKQo+ICsgICAgICAgICAg ICBtYXhfdGlsZV9hcmVhX3NiX3ZhcmllZCA9IChwcml2LT5zYl9yb3dzICogcHJpdi0+c2JfY29s cykgPj4gKG1pbl9sb2cyX3RpbGVzICsgMSk7Cj4gKyAgICAgICAgZWxzZQo+ICsgICAgICAgICAg ICBtYXhfdGlsZV9hcmVhX3NiX3ZhcmllZCA9IHByaXYtPnNiX3Jvd3MgKiBwcml2LT5zYl9jb2xz Owo+ICsgICAgICAgIHByaXYtPm1heF90aWxlX2hlaWdodF9zYiA9IEZGTUFYKDEsIG1heF90aWxl X2FyZWFfc2JfdmFyaWVkIC8gd2lkZXN0X3RpbGVfc2IpOwo+ICsKPiArICAgICAgICBpZiAodGls ZV9yb3dzX3RtcCA9PSBhdl9jbGlwKHRpbGVfcm93c190bXAsIChwcml2LT5zYl9yb3dzICsgcHJp di0+bWF4X3RpbGVfaGVpZ2h0X3NiIC0gMSkgLyBwcml2LT5tYXhfdGlsZV9oZWlnaHRfc2IsIHBy aXYtPnNiX3Jvd3MpKSB7Cj4gKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB0aWxlX3Jvd3Nf dG1wOyBpKyspCj4gKyAgICAgICAgICAgICAgICBwcml2LT5oZWlnaHRfaW5fc2JzX21pbnVzXzFb aV0gPSAoaSArIDEpICogcHJpdi0+c2Jfcm93cyAvIHRpbGVfcm93c190bXAgLSBpICogcHJpdi0+ c2Jfcm93cyAvIHRpbGVfcm93c190bXAgLSAxOwo+ICsKPiArICAgICAgICAgICAgYnJlYWs7Cj4g KyAgICAgICAgfQo+ICsgICAgfQo+ICsKPiArICAgIGlmIChwcml2LT50aWxlX3Jvd3MgIT0gdGls ZV9yb3dzX3RtcCkgewo+ICsgICAgICAgIHByaXYtPnRpbGVfcm93cyA9IHRpbGVfcm93c190bXA7 Cj4gKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfV0FSTklORywgIkludmFsaWQgdGlsZSBy b3dzLCBjb3JyZWN0IHRvICVkLlxuIiwgcHJpdi0+dGlsZV9yb3dzKTsKPiArICAgIH0KPiArCj4g KyAgICAvKiogY2hlY2sgaWYgdGlsZSBjb2xzL3Jvd3MgaXMgc3VwcG9ydGVkIGJ5IGRyaXZlci4g Ki8KPiArICAgIGlmIChwcml2LT5hdHRyX2V4dDIuYml0cy5tYXhfdGlsZV9udW1fbWludXMxKSB7 Cj4gKyAgICAgICAgaWYgKChwcml2LT50aWxlX2NvbHMgKiBwcml2LT50aWxlX3Jvd3MgLSAxKSA+ IHByaXYtPmF0dHJfZXh0Mi5iaXRzLm1heF90aWxlX251bV9taW51czEpIHsKPiArICAgICAgICAg ICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJVbnN1cHBvcnRlZCB0aWxlIG51bSAlZCAq ICVkID0gJWQgYnkgZHJpdmVyLCAiCj4gKyAgICAgICAgICAgICAgICAgICAic2hvdWxkIGJlIGxl c3MgdGhhbiAlZC5cbiIsIHByaXYtPnRpbGVfY29scywgcHJpdi0+dGlsZV9yb3dzLAo+ICsgICAg ICAgICAgICAgICAgICAgcHJpdi0+dGlsZV9jb2xzICogcHJpdi0+dGlsZV9yb3dzLAo+ICsgICAg ICAgICAgICAgICAgICAgcHJpdi0+YXR0cl9leHQyLmJpdHMubWF4X3RpbGVfbnVtX21pbnVzMSAr IDEpOwo+ICsgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwo+ICsgICAgICAgIH0K PiArICAgIH0KPiArICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RFQlVHLCAiU2V0dGluZyB0aWxl IGNvbHMvcm93cyB0byAlZC8lZC5cbiIsCj4gKyAgICAgICAgICAgcHJpdi0+dGlsZV9jb2xzLCBw cml2LT50aWxlX3Jvd3MpOwo+ICsKPiArICAgIC8qKiBjaGVjayBpZiB0aWxlIGdyb3VwIG51bWJl cnMgaXMgdmFsaWQuICovCj4gKyAgICBpZiAocHJpdi0+dGlsZV9ncm91cHMgPiBwcml2LT50aWxl X2NvbHMgKiBwcml2LT50aWxlX3Jvd3MpIHsKPiArICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xP R19XQVJOSU5HLCAiSW52YWxpZCB0aWxlIGdyb3VwcyBudW1iZXIgJWQsICIKPiArICAgICAgICAi Y29ycmVjdCB0byAlZC5cbiIsIHByaXYtPnRpbGVfZ3JvdXBzLCBwcml2LT50aWxlX2NvbHMgKiBw cml2LT50aWxlX3Jvd3MpOwo+ICsgICAgICAgIHByaXYtPnRpbGVfZ3JvdXBzID0gcHJpdi0+dGls ZV9jb2xzICogcHJpdi0+dGlsZV9yb3dzOwo+ICsgICAgfQo+ICsKPiArICAgIHJldHVybiAwOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHZhYXBpX2VuY29kZV9hdjFfd3JpdGVfc2VxdWVuY2VfaGVh ZGVyKEFWQ29kZWNDb250ZXh0ICphdmN0eCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpkYXRhLCBzaXplX3QgKmRhdGFfbGVuKQo+ICt7 Cj4gKyAgICBWQUFQSUVuY29kZUFWMUNvbnRleHQgKnByaXYgPSBhdmN0eC0+cHJpdl9kYXRhOwo+ ICsKPiArICAgIG1lbWNweShkYXRhLCAmcHJpdi0+c2hfZGF0YSwgTUFYX1BBUkFNX0JVRkZFUl9T SVpFICogc2l6ZW9mKGNoYXIpKTsKPiArICAgICpkYXRhX2xlbiA9IHByaXYtPnNoX2RhdGFfbGVu Owo+ICsKPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHZhYXBpX2VuY29k ZV9hdjFfaW5pdF9zZXF1ZW5jZV9wYXJhbXMoQVZDb2RlY0NvbnRleHQgKmF2Y3R4KQo+ICt7Cj4g KyAgICBWQUFQSUVuY29kZUNvbnRleHQgICAgICAgICAgICAgICAqY3R4ID0gYXZjdHgtPnByaXZf ZGF0YTsKPiArICAgIFZBQVBJRW5jb2RlQVYxQ29udGV4dCAgICAgICAgICAgKnByaXYgPSBhdmN0 eC0+cHJpdl9kYXRhOwo+ICsgICAgQVYxUmF3T0JVICAgICAgICAgICAgICAgICAgICAgKnNoX29i dSA9ICZwcml2LT5zaDsKPiArICAgIEFWMVJhd1NlcXVlbmNlSGVhZGVyICAgICAgICAgICAgICAq c2ggPSAmc2hfb2J1LT5vYnUuc2VxdWVuY2VfaGVhZGVyOwo+ICsgICAgVkFFbmNTZXF1ZW5jZVBh cmFtZXRlckJ1ZmZlckFWMSAqdnNlcSA9IGN0eC0+Y29kZWNfc2VxdWVuY2VfcGFyYW1zOwo+ICsg ICAgQ29kZWRCaXRzdHJlYW1GcmFnbWVudCAgICAgICAgICAgKm9idSA9ICZwcml2LT5jdXJyZW50 X29idTsKPiArICAgIGNvbnN0IEFWUGl4Rm10RGVzY3JpcHRvciAqZGVzYzsKPiArICAgIGludCBy ZXQ7Cj4gKwo+ICsgICAgbWVtc2V0KHNoX29idSwgMCwgc2l6ZW9mKCpzaF9vYnUpKTsKPiArICAg IHNoX29idS0+aGVhZGVyLm9idV90eXBlID0gQVYxX09CVV9TRVFVRU5DRV9IRUFERVI7Cj4gKwo+ ICsgICAgZGVzYyA9IGF2X3BpeF9mbXRfZGVzY19nZXQocHJpdi0+Y29tbW9uLmlucHV0X2ZyYW1l cy0+c3dfZm9ybWF0KTsKPiArICAgIGF2X2Fzc2VydDAoZGVzYyk7Cj4gKwo+ICsgICAgc2gtPnNl cV9wcm9maWxlICA9IGF2Y3R4LT5wcm9maWxlOwo+ICsgICAgaWYgKCFzaC0+c2VxX2ZvcmNlX3Nj cmVlbl9jb250ZW50X3Rvb2xzKQo+ICsgICAgICAgIHNoLT5zZXFfZm9yY2VfaW50ZWdlcl9tdiA9 IEFWMV9TRUxFQ1RfSU5URUdFUl9NVjsKPiArICAgIHNoLT5mcmFtZV93aWR0aF9iaXRzX21pbnVz XzEgID0gYXZfbG9nMihhdmN0eC0+d2lkdGgpOwo+ICsgICAgc2gtPmZyYW1lX2hlaWdodF9iaXRz X21pbnVzXzEgPSBhdl9sb2cyKGF2Y3R4LT5oZWlnaHQpOwo+ICsgICAgc2gtPm1heF9mcmFtZV93 aWR0aF9taW51c18xICAgPSBhdmN0eC0+d2lkdGggLSAxOwo+ICsgICAgc2gtPm1heF9mcmFtZV9o ZWlnaHRfbWludXNfMSAgPSBhdmN0eC0+aGVpZ2h0IC0gMTsKPiArICAgIHNoLT5zZXFfdGllclsw XSAgICAgICAgICAgICAgID0gcHJpdi0+dGllcjsKPiArICAgIC8qKiBlbmFibGUgb3JkZXIgaGlu dCBhbmQgcmVzZXJ2ZSBtYXhpbXVtIDggYml0cyBmb3IgaXQgYnkgZGVmYXVsdC4gKi8KPiArICAg IHNoLT5lbmFibGVfb3JkZXJfaGludCAgICAgICAgID0gMTsKPiArICAgIHNoLT5vcmRlcl9oaW50 X2JpdHNfbWludXNfMSAgID0gNzsKPiArCj4gKyAgICBzaC0+Y29sb3JfY29uZmlnID0gKEFWMVJh d0NvbG9yQ29uZmlnKSB7Cj4gKyAgICAgICAgLmhpZ2hfYml0ZGVwdGggICAgICAgICAgICAgICAg ICA9IGRlc2MtPmNvbXBbMF0uZGVwdGggPT0gOCA/IDAgOiAxLAo+ICsgICAgICAgIC5jb2xvcl9w cmltYXJpZXMgICAgICAgICAgICAgICAgPSBhdmN0eC0+Y29sb3JfcHJpbWFyaWVzLAo+ICsgICAg ICAgIC50cmFuc2Zlcl9jaGFyYWN0ZXJpc3RpY3MgICAgICAgPSBhdmN0eC0+Y29sb3JfdHJjLAo+ ICsgICAgICAgIC5tYXRyaXhfY29lZmZpY2llbnRzICAgICAgICAgICAgPSBhdmN0eC0+Y29sb3Jz cGFjZSwKPiArICAgICAgICAuY29sb3JfZGVzY3JpcHRpb25fcHJlc2VudF9mbGFnID0gKGF2Y3R4 LT5jb2xvcl9wcmltYXJpZXMgIT0gQVZDT0xfUFJJX1VOU1BFQ0lGSUVEIHx8Cj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmN0eC0+Y29sb3JfdHJjICAgICAg ICE9IEFWQ09MX1RSQ19VTlNQRUNJRklFRCB8fAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYXZjdHgtPmNvbG9yc3BhY2UgICAgICAhPSBBVkNPTF9TUENfVU5T UEVDSUZJRUQpLAo+ICsgICAgICAgIC5jb2xvcl9yYW5nZSAgICAgICAgICAgICAgICAgICAgPSBh dmN0eC0+Y29sb3JfcmFuZ2UgPT0gQVZDT0xfUkFOR0VfSlBFRywKPiArICAgICAgICAuc3Vic2Ft cGxpbmdfeCAgICAgICAgICAgICAgICAgID0gZGVzYy0+bG9nMl9jaHJvbWFfdywKPiArICAgICAg ICAuc3Vic2FtcGxpbmdfeSAgICAgICAgICAgICAgICAgID0gZGVzYy0+bG9nMl9jaHJvbWFfaCwK PiArICAgIH07Cj4gKwo+ICsgICAgaWYgKGF2Y3R4LT5sZXZlbCAhPSBGRl9MRVZFTF9VTktOT1dO KSB7Cj4gKyAgICAgICAgc2gtPnNlcV9sZXZlbF9pZHhbMF0gPSBhdmN0eC0+bGV2ZWw7Cj4gKyAg ICB9IGVsc2Ugewo+ICsgICAgICAgIGNvbnN0IEFWMUxldmVsRGVzY3JpcHRvciAqbGV2ZWw7Cj4g KyAgICAgICAgZmxvYXQgZnJhbWVyYXRlOwo+ICsKPiArICAgICAgICBpZiAoYXZjdHgtPmZyYW1l cmF0ZS5udW0gPiAwICYmIGF2Y3R4LT5mcmFtZXJhdGUuZGVuID4gMCkKPiArICAgICAgICAgICAg ZnJhbWVyYXRlID0gYXZjdHgtPmZyYW1lcmF0ZS5udW0gLyBhdmN0eC0+ZnJhbWVyYXRlLmRlbjsK PiArICAgICAgICBlbHNlCj4gKyAgICAgICAgICAgIGZyYW1lcmF0ZSA9IDA7Cj4gKwo+ICsgICAg ICAgIGxldmVsID0gZmZfYXYxX2d1ZXNzX2xldmVsKGF2Y3R4LT5iaXRfcmF0ZSwgcHJpdi0+dGll ciwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnN1cmZhY2Vfd2lk dGgsIGN0eC0+c3VyZmFjZV9oZWlnaHQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcHJpdi0+dGlsZV9yb3dzICogcHJpdi0+dGlsZV9jb2xzLAo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHByaXYtPnRpbGVfY29scywgZnJhbWVyYXRlKTsKPiArICAg ICAgICBpZiAobGV2ZWwpIHsKPiArICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVS Qk9TRSwgIlVzaW5nIGxldmVsICVzLlxuIiwgbGV2ZWwtPm5hbWUpOwo+ICsgICAgICAgICAgICBz aC0+c2VxX2xldmVsX2lkeFswXSA9IGxldmVsLT5sZXZlbF9pZHg7Cj4gKyAgICAgICAgfSBlbHNl IHsKPiArICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIlN0cmVhbSB3 aWxsIG5vdCBjb25mb3JtIHRvICIKPiArICAgICAgICAgICAgICAgICAgICJhbnkgbm9ybWFsIGxl dmVsLCB1c2luZyBsZXZlbCA2LjMgYnkgZGVmYXVsdC5cbiIpOwo+ICsgICAgICAgICAgICBzaC0+ c2VxX2xldmVsX2lkeFswXSA9IDE5Owo+ICsgICAgICAgICAgICBzaC0+c2VxX3RpZXJbMF0gPSAx Owo+ICsgICAgICAgIH0KPiArICAgIH0KPiArICAgIHZzZXEtPnNlcV9wcm9maWxlICAgICAgICAg ICAgID0gc2gtPnNlcV9wcm9maWxlOwo+ICsgICAgdnNlcS0+c2VxX2xldmVsX2lkeCAgICAgICAg ICAgPSBzaC0+c2VxX2xldmVsX2lkeFswXTsKPiArICAgIHZzZXEtPnNlcV90aWVyICAgICAgICAg ICAgICAgID0gc2gtPnNlcV90aWVyWzBdOwo+ICsgICAgdnNlcS0+b3JkZXJfaGludF9iaXRzX21p bnVzXzEgPSBzaC0+b3JkZXJfaGludF9iaXRzX21pbnVzXzE7Cj4gKyAgICB2c2VxLT5pbnRyYV9w ZXJpb2QgICAgICAgICAgICA9IGN0eC0+Z29wX3NpemU7Cj4gKyAgICB2c2VxLT5pcF9wZXJpb2Qg ICAgICAgICAgICAgICA9IGN0eC0+Yl9wZXJfcCArIDE7Cj4gKwo+ICsgICAgdnNlcS0+c2VxX2Zp ZWxkcy5iaXRzLmVuYWJsZV9vcmRlcl9oaW50ID0gc2gtPmVuYWJsZV9vcmRlcl9oaW50Owo+ICsK PiArICAgIGlmICghKGN0eC0+dmFfcmNfbW9kZSAmIFZBX1JDX0NRUCkpIHsKPiArICAgICAgICB2 c2VxLT5iaXRzX3Blcl9zZWNvbmQgPSBjdHgtPnZhX2JpdF9yYXRlOwo+ICsgICAgICAgIHZzZXEt PnNlcV9maWVsZHMuYml0cy5lbmFibGVfY2RlZiA9IHNoLT5lbmFibGVfY2RlZiA9IDE7Cj4gKyAg ICB9Cj4gKwo+ICsgICAgcmV0ID0gdmFhcGlfZW5jb2RlX2F2MV9hZGRfb2J1KGF2Y3R4LCBvYnUs IEFWMV9PQlVfU0VRVUVOQ0VfSEVBREVSLCAmcHJpdi0+c2gpOwo+ICsgICAgaWYgKHJldCA8IDAp Cj4gKyAgICAgICAgZ290byBlbmQ7Cj4gKwo+ICsgICAgcmV0ID0gdmFhcGlfZW5jb2RlX2F2MV93 cml0ZV9vYnUoYXZjdHgsIHByaXYtPnNoX2RhdGEsICZwcml2LT5zaF9kYXRhX2xlbiwgb2J1KTsK PiArICAgIGlmIChyZXQgPCAwKQo+ICsgICAgICAgIGdvdG8gZW5kOwo+ICsKPiArZW5kOgo+ICsg ICAgZmZfY2JzX2ZyYWdtZW50X3Jlc2V0KG9idSk7Cj4gKyAgICByZXR1cm4gcmV0Owo+ICt9Cj4g Kwo+ICtzdGF0aWMgaW50IHZhYXBpX2VuY29kZV9hdjFfaW5pdF9waWN0dXJlX3BhcmFtcyhBVkNv ZGVjQ29udGV4dCAqYXZjdHgsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFZBQVBJRW5jb2RlUGljdHVyZSAqcGljKQo+ICt7Cj4gKyAgICBWQUFQSUVu Y29kZUFWMUNvbnRleHQgICAgICAgICAgKnByaXYgPSBhdmN0eC0+cHJpdl9kYXRhOwo+ICsgICAg VkFBUElFbmNvZGVBVjFQaWN0dXJlICAgICAgICAgICpocGljID0gcGljLT5wcml2X2RhdGE7Cj4g KyAgICBBVjFSYXdPQlUgICAgICAgICAgICAgICAgICAgICpmaF9vYnUgPSAmcHJpdi0+Zmg7Cj4g KyAgICBBVjFSYXdGcmFtZUhlYWRlciAgICAgICAgICAgICAgICAqZmggPSAmZmhfb2J1LT5vYnUu ZnJhbWUuaGVhZGVyOwo+ICsgICAgVkFFbmNQaWN0dXJlUGFyYW1ldGVyQnVmZmVyQVYxICp2cGlj ID0gcGljLT5jb2RlY19waWN0dXJlX3BhcmFtczsKPiArICAgIENvZGVkQml0c3RyZWFtRnJhZ21l bnQgICAgICAgICAgKm9idSA9ICZwcml2LT5jdXJyZW50X29idTsKPiArICAgIFZBQVBJRW5jb2Rl UGljdHVyZSAgICAqcmVmOwo+ICsgICAgVkFBUElFbmNvZGVBVjFQaWN0dXJlICpocmVmOwo+ICsg ICAgaW50IHNsb3QsIGk7Cj4gKyAgICBpbnQgcmV0Owo+ICsgICAgc3RhdGljIGNvbnN0IGludDhf dCBkZWZhdWx0X2xvb3BfZmlsdGVyX3JlZl9kZWx0YXNbQVYxX1RPVEFMX1JFRlNfUEVSX0ZSQU1F XSA9Cj4gKyAgICAgICAgeyAxLCAwLCAwLCAwLCAtMSwgMCwgLTEsIC0xIH07Cj4gKwo+ICsgICAg bWVtc2V0KGZoX29idSwgMCwgc2l6ZW9mKCpmaF9vYnUpKTsKPiArICAgIHBpYy0+bmJfc2xpY2Vz ID0gcHJpdi0+dGlsZV9ncm91cHM7Cj4gKyAgICBmaF9vYnUtPmhlYWRlci5vYnVfdHlwZSA9IEFW MV9PQlVfRlJBTUVfSEVBREVSOwo+ICsgICAgZmhfb2J1LT5oZWFkZXIub2J1X2hhc19zaXplX2Zp ZWxkID0gMTsKPiArCj4gKyAgICBzd2l0Y2ggKHBpYy0+dHlwZSkgewo+ICsgICAgY2FzZSBQSUNU VVJFX1RZUEVfSURSOgo+ICsgICAgICAgIGF2X2Fzc2VydDAocGljLT5uYl9yZWZzWzBdID09IDAg fHwgcGljLT5uYl9yZWZzWzFdKTsKPiArICAgICAgICBmaC0+ZnJhbWVfdHlwZSA9IEFWMV9GUkFN RV9LRVk7Cj4gKyAgICAgICAgZmgtPnJlZnJlc2hfZnJhbWVfZmxhZ3MgPSAweEZGOwo+ICsgICAg ICAgIGZoLT5iYXNlX3FfaWR4ID0gcHJpdi0+cV9pZHhfaWRyOwo+ICsgICAgICAgIGhwaWMtPnNs b3QgPSAwOwo+ICsgICAgICAgIGhwaWMtPmxhc3RfaWRyX2ZyYW1lID0gcGljLT5kaXNwbGF5X29y ZGVyOwo+ICsgICAgICAgIGJyZWFrOwo+ICsgICAgY2FzZSBQSUNUVVJFX1RZUEVfUDoKPiArICAg ICAgICBhdl9hc3NlcnQwKHBpYy0+bmJfcmVmc1swXSk7Cj4gKyAgICAgICAgZmgtPmZyYW1lX3R5 cGUgPSBBVjFfRlJBTUVfSU5URVI7Cj4gKyAgICAgICAgZmgtPmJhc2VfcV9pZHggPSBwcml2LT5x X2lkeF9wOwo+ICsgICAgICAgIHJlZiA9IHBpYy0+cmVmc1swXVtwaWMtPm5iX3JlZnNbMF0gLSAx XTsKPiArICAgICAgICBocmVmID0gcmVmLT5wcml2X2RhdGE7Cj4gKyAgICAgICAgaHBpYy0+c2xv dCA9ICFocmVmLT5zbG90Owo+ICsgICAgICAgIGhwaWMtPmxhc3RfaWRyX2ZyYW1lID0gaHJlZi0+ bGFzdF9pZHJfZnJhbWU7Cj4gKyAgICAgICAgZmgtPnJlZnJlc2hfZnJhbWVfZmxhZ3MgPSAxIDw8 IGhwaWMtPnNsb3Q7Cj4gKwo+ICsgICAgICAgIC8qKiBzZXQgdGhlIG5lYXJlc3QgZnJhbWUgaW4g TDAgYXMgYWxsIHJlZmVyZW5jZSBmcmFtZS4gKi8KPiArICAgICAgICBmb3IgKGkgPSAwOyBpIDwg QVYxX1JFRlNfUEVSX0ZSQU1FOyBpKyspIHsKPiArICAgICAgICAgICAgZmgtPnJlZl9mcmFtZV9p ZHhbaV0gPSBocmVmLT5zbG90Owo+ICsgICAgICAgIH0KPiArICAgICAgICBmaC0+cHJpbWFyeV9y ZWZfZnJhbWUgPSBocmVmLT5zbG90Owo+ICsgICAgICAgIGZoLT5yZWZfb3JkZXJfaGludFtocmVm LT5zbG90XSA9IHJlZi0+ZGlzcGxheV9vcmRlciAtIGhyZWYtPmxhc3RfaWRyX2ZyYW1lOwo+ICsg ICAgICAgIHZwaWMtPnJlZl9mcmFtZV9jdHJsX2wwLmZpZWxkcy5zZWFyY2hfaWR4MCA9IEFWMV9S RUZfRlJBTUVfTEFTVDsKPiArCj4gKyAgICAgICAgLyoqIHNldCB0aGUgMm5kIG5lYXJlc3QgZnJh bWUgaW4gTDAgYXMgR29sZGVuIGZyYW1lLiAqLwo+ICsgICAgICAgIGlmIChwaWMtPm5iX3JlZnNb MF0gPiAxKSB7Cj4gKyAgICAgICAgICAgIHJlZiA9IHBpYy0+cmVmc1swXVtwaWMtPm5iX3JlZnNb MF0gLSAyXTsKPiArICAgICAgICAgICAgaHJlZiA9IHJlZi0+cHJpdl9kYXRhOwo+ICsgICAgICAg ICAgICBmaC0+cmVmX2ZyYW1lX2lkeFszXSA9IGhyZWYtPnNsb3Q7Cj4gKyAgICAgICAgICAgIGZo LT5yZWZfb3JkZXJfaGludFtocmVmLT5zbG90XSA9IHJlZi0+ZGlzcGxheV9vcmRlciAtIGhyZWYt Pmxhc3RfaWRyX2ZyYW1lOwo+ICsgICAgICAgICAgICB2cGljLT5yZWZfZnJhbWVfY3RybF9sMC5m aWVsZHMuc2VhcmNoX2lkeDEgPSBBVjFfUkVGX0ZSQU1FX0dPTERFTjsKPiArICAgICAgICB9Cj4g KyAgICAgICAgYnJlYWs7Cj4gKyAgICBjYXNlIFBJQ1RVUkVfVFlQRV9COgo+ICsgICAgICAgIGF2 X2Fzc2VydDAocGljLT5uYl9yZWZzWzBdICYmIHBpYy0+bmJfcmVmc1sxXSk7Cj4gKyAgICAgICAg ZmgtPmZyYW1lX3R5cGUgPSBBVjFfRlJBTUVfSU5URVI7Cj4gKyAgICAgICAgZmgtPmJhc2VfcV9p ZHggPSBwcml2LT5xX2lkeF9iOwo+ICsgICAgICAgIGZoLT5yZWZyZXNoX2ZyYW1lX2ZsYWdzID0g MHgwOwo+ICsgICAgICAgIGZoLT5yZWZlcmVuY2Vfc2VsZWN0ID0gMTsKPiArCj4gKyAgICAgICAg LyoqIEIgZnJhbWUgd2lsbCBub3QgYmUgcmVmZXJlbmNlZCwgZGlzYWJsZSBpdHMgcmVjb24gZnJh bWUuICovCj4gKyAgICAgICAgdnBpYy0+cGljdHVyZV9mbGFncy5iaXRzLmRpc2FibGVfZnJhbWVf cmVjb24gPSAxOwo+ICsKPiArICAgICAgICAvKiogVXNlIExBU1RfRlJBTUUgYW5kIEJXRFJFRl9G UkFNRSBmb3IgcmVmZXJlbmNlLiAqLwo+ICsgICAgICAgIHZwaWMtPnJlZl9mcmFtZV9jdHJsX2ww LmZpZWxkcy5zZWFyY2hfaWR4MCA9IEFWMV9SRUZfRlJBTUVfTEFTVDsKPiArICAgICAgICB2cGlj LT5yZWZfZnJhbWVfY3RybF9sMS5maWVsZHMuc2VhcmNoX2lkeDAgPSBBVjFfUkVGX0ZSQU1FX0JX RFJFRjsKPiArCj4gKyAgICAgICAgcmVmICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gcGlj LT5yZWZzWzBdW3BpYy0+bmJfcmVmc1swXSAtIDFdOwo+ICsgICAgICAgIGhyZWYgICAgICAgICAg ICAgICAgICAgICAgICAgICA9IHJlZi0+cHJpdl9kYXRhOwo+ICsgICAgICAgIGhwaWMtPmxhc3Rf aWRyX2ZyYW1lICAgICAgICAgICA9IGhyZWYtPmxhc3RfaWRyX2ZyYW1lOwo+ICsgICAgICAgIGZo LT5wcmltYXJ5X3JlZl9mcmFtZSAgICAgICAgICA9IGhyZWYtPnNsb3Q7Cj4gKyAgICAgICAgZmgt PnJlZl9vcmRlcl9oaW50W2hyZWYtPnNsb3RdID0gcmVmLT5kaXNwbGF5X29yZGVyIC0gaHJlZi0+ bGFzdF9pZHJfZnJhbWU7Cj4gKyAgICAgICAgZm9yIChpID0gMDsgaSA8IEFWMV9SRUZfRlJBTUVf R09MREVOOyBpKyspIHsKPiArICAgICAgICAgICAgZmgtPnJlZl9mcmFtZV9pZHhbaV0gPSBocmVm LT5zbG90Owo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgcmVmICAgICAgICAgICAgICAgICAg ICAgICAgICAgID0gcGljLT5yZWZzWzFdW3BpYy0+bmJfcmVmc1sxXSAtIDFdOwo+ICsgICAgICAg IGhyZWYgICAgICAgICAgICAgICAgICAgICAgICAgICA9IHJlZi0+cHJpdl9kYXRhOwo+ICsgICAg ICAgIGZoLT5yZWZfb3JkZXJfaGludFtocmVmLT5zbG90XSA9IHJlZi0+ZGlzcGxheV9vcmRlciAt IGhyZWYtPmxhc3RfaWRyX2ZyYW1lOwo+ICsgICAgICAgIGZvciAoaSA9IEFWMV9SRUZfRlJBTUVf R09MREVOOyBpIDwgQVYxX1JFRlNfUEVSX0ZSQU1FOyBpKyspIHsKPiArICAgICAgICAgICAgZmgt PnJlZl9mcmFtZV9pZHhbaV0gPSBocmVmLT5zbG90Owo+ICsgICAgICAgIH0KPiArICAgICAgICBi cmVhazsKPiArICAgIGRlZmF1bHQ6Cj4gKyAgICAgICAgYXZfYXNzZXJ0MCgwICYmICJpbnZhbGlk IHBpY3R1cmUgdHlwZSIpOwo+ICsgICAgfQo+ICsKPiArICAgIGZoLT5zaG93X2ZyYW1lICAgICAg ICAgICAgICAgID0gcGljLT5kaXNwbGF5X29yZGVyIDw9IHBpYy0+ZW5jb2RlX29yZGVyOwo+ICsg ICAgZmgtPnNob3dhYmxlX2ZyYW1lICAgICAgICAgICAgPSBmaC0+ZnJhbWVfdHlwZSAhPSBBVjFf RlJBTUVfS0VZOwo+ICsgICAgZmgtPmZyYW1lX3dpZHRoX21pbnVzXzEgICAgICAgPSBhdmN0eC0+ d2lkdGggLSAxOwo+ICsgICAgZmgtPmZyYW1lX2hlaWdodF9taW51c18xICAgICAgPSBhdmN0eC0+ aGVpZ2h0IC0gMTsKPiArICAgIGZoLT5yZW5kZXJfd2lkdGhfbWludXNfMSAgICAgID0gZmgtPmZy YW1lX3dpZHRoX21pbnVzXzE7Cj4gKyAgICBmaC0+cmVuZGVyX2hlaWdodF9taW51c18xICAgICA9 IGZoLT5mcmFtZV9oZWlnaHRfbWludXNfMTsKPiArICAgIGZoLT5vcmRlcl9oaW50ICAgICAgICAg ICAgICAgID0gcGljLT5kaXNwbGF5X29yZGVyIC0gaHBpYy0+bGFzdF9pZHJfZnJhbWU7Cj4gKyAg ICBmaC0+dGlsZV9jb2xzICAgICAgICAgICAgICAgICA9IHByaXYtPnRpbGVfY29sczsKPiArICAg IGZoLT50aWxlX3Jvd3MgICAgICAgICAgICAgICAgID0gcHJpdi0+dGlsZV9yb3dzOwo+ICsgICAg ZmgtPnRpbGVfY29sc19sb2cyICAgICAgICAgICAgPSBwcml2LT50aWxlX2NvbHNfbG9nMjsKPiAr ICAgIGZoLT50aWxlX3Jvd3NfbG9nMiAgICAgICAgICAgID0gcHJpdi0+dGlsZV9yb3dzX2xvZzI7 Cj4gKyAgICBmaC0+dW5pZm9ybV90aWxlX3NwYWNpbmdfZmxhZyA9IHByaXYtPnVuaWZvcm1fdGls ZTsKPiArICAgIGZoLT50aWxlX3NpemVfYnl0ZXNfbWludXMxICAgID0gcHJpdi0+YXR0cl9leHQy LmJpdHMudGlsZV9zaXplX2J5dGVzX21pbnVzMTsKPiArICAgIGZoLT5yZWR1Y2VkX3R4X3NldCAg ICAgICAgICAgID0gMTsKPiArCj4gKyAgICAvKiogaWdub3JlIE9OTFlfNHg0IG1vZGUgZm9yIGNv ZGVkbG9zc2xlc3MgaXMgbm90IGZ1bGx5IGltcGxlbWVudGVkLiAqLwo+ICsgICAgaWYgKHByaXYt PmF0dHJfZXh0Mi5iaXRzLnR4X21vZGVfc3VwcG9ydCAmIDB4MDQpCj4gKyAgICAgICAgZmgtPnR4 X21vZGUgPSBBVjFfVFhfTU9ERV9TRUxFQ1Q7Cj4gKyAgICBlbHNlIGlmIChwcml2LT5hdHRyX2V4 dDIuYml0cy50eF9tb2RlX3N1cHBvcnQgJiAweDAyKQo+ICsgICAgICAgIGZoLT50eF9tb2RlID0g QVYxX1RYX01PREVfTEFSR0VTVDsKPiArICAgIGVsc2UKPiArICAgICAgICByZXR1cm4gQVZFUlJP UihFSU5WQUwpOwo+ICsKPiArICAgIGZvciAoaSA9IDA7IGkgPCBmaC0+dGlsZV9jb2xzOyBpKysp Cj4gKyAgICAgICAgZmgtPndpZHRoX2luX3Nic19taW51c18xW2ldID0gdnBpYy0+d2lkdGhfaW5f c2JzX21pbnVzXzFbaV0gPSBwcml2LT53aWR0aF9pbl9zYnNfbWludXNfMVtpXTsKPiArCj4gKyAg ICBmb3IgKGkgPSAwOyBpIDwgZmgtPnRpbGVfcm93czsgaSsrKQo+ICsgICAgICAgIGZoLT5oZWln aHRfaW5fc2JzX21pbnVzXzFbaV0gPSB2cGljLT5oZWlnaHRfaW5fc2JzX21pbnVzXzFbaV0gPSBw cml2LT5oZWlnaHRfaW5fc2JzX21pbnVzXzFbaV07Cj4gKwo+ICsgICAgbWVtY3B5KGZoLT5sb29w X2ZpbHRlcl9yZWZfZGVsdGFzLCBkZWZhdWx0X2xvb3BfZmlsdGVyX3JlZl9kZWx0YXMsCj4gKyAg ICAgICAgICAgQVYxX1RPVEFMX1JFRlNfUEVSX0ZSQU1FICogc2l6ZW9mKGludDhfdCkpOwo+ICsK PiArICAgIGlmIChmaC0+ZnJhbWVfdHlwZSA9PSBBVjFfRlJBTUVfS0VZICYmIGZoLT5zaG93X2Zy YW1lKSB7Cj4gKyAgICAgICAgZmgtPmVycm9yX3Jlc2lsaWVudF9tb2RlID0gMTsKPiArICAgIH0K PiArCj4gKyAgICBpZiAoZmgtPmZyYW1lX3R5cGUgPT0gQVYxX0ZSQU1FX0tFWSB8fCBmaC0+ZXJy b3JfcmVzaWxpZW50X21vZGUpCj4gKyAgICAgICAgZmgtPnByaW1hcnlfcmVmX2ZyYW1lID0gQVYx X1BSSU1BUllfUkVGX05PTkU7Cj4gKwo+ICsgICAgdnBpYy0+YmFzZV9xaW5kZXggICAgICAgICAg PSBmaC0+YmFzZV9xX2lkeDsKPiArICAgIHZwaWMtPmZyYW1lX3dpZHRoX21pbnVzXzEgID0gZmgt PmZyYW1lX3dpZHRoX21pbnVzXzE7Cj4gKyAgICB2cGljLT5mcmFtZV9oZWlnaHRfbWludXNfMSA9 IGZoLT5mcmFtZV9oZWlnaHRfbWludXNfMTsKPiArICAgIHZwaWMtPnByaW1hcnlfcmVmX2ZyYW1l ICAgID0gZmgtPnByaW1hcnlfcmVmX2ZyYW1lOwo+ICsgICAgdnBpYy0+cmVjb25zdHJ1Y3RlZF9m cmFtZSAgPSBwaWMtPnJlY29uX3N1cmZhY2U7Cj4gKyAgICB2cGljLT5jb2RlZF9idWYgICAgICAg ICAgICA9IHBpYy0+b3V0cHV0X2J1ZmZlcjsKPiArICAgIHZwaWMtPnRpbGVfY29scyAgICAgICAg ICAgID0gZmgtPnRpbGVfY29sczsKPiArICAgIHZwaWMtPnRpbGVfcm93cyAgICAgICAgICAgID0g ZmgtPnRpbGVfcm93czsKPiArICAgIHZwaWMtPm9yZGVyX2hpbnQgICAgICAgICAgID0gZmgtPm9y ZGVyX2hpbnQ7Cj4gKyNpZiBWQV9DSEVDS19WRVJTSU9OKDEsIDE1LCAwKQo+ICsgICAgdnBpYy0+ cmVmcmVzaF9mcmFtZV9mbGFncyAgPSBmaC0+cmVmcmVzaF9mcmFtZV9mbGFnczsKPiArI2VuZGlm Cj4gKwo+ICsgICAgdnBpYy0+cGljdHVyZV9mbGFncy5iaXRzLmVuYWJsZV9mcmFtZV9vYnUgICAg ID0gMDsKPiArICAgIHZwaWMtPnBpY3R1cmVfZmxhZ3MuYml0cy5mcmFtZV90eXBlICAgICAgICAg ICA9IGZoLT5mcmFtZV90eXBlOwo+ICsgICAgdnBpYy0+cGljdHVyZV9mbGFncy5iaXRzLnJlZHVj ZWRfdHhfc2V0ICAgICAgID0gZmgtPnJlZHVjZWRfdHhfc2V0Owo+ICsgICAgdnBpYy0+cGljdHVy ZV9mbGFncy5iaXRzLmVycm9yX3Jlc2lsaWVudF9tb2RlID0gZmgtPmVycm9yX3Jlc2lsaWVudF9t b2RlOwo+ICsKPiArICAgIC8qKiBsZXQgZHJpdmVyIGRlY2lkZSB0byB1c2Ugc2luZ2xlIG9yIGNv bXBvdW5kIHJlZmVyZW5jZSBwcmVkaWN0aW9uIG1vZGUuICovCj4gKyAgICB2cGljLT5tb2RlX2Nv bnRyb2xfZmxhZ3MuYml0cy5yZWZlcmVuY2VfbW9kZSA9IGZoLT5yZWZlcmVuY2Vfc2VsZWN0ID8g MiA6IDA7Cj4gKyAgICB2cGljLT5tb2RlX2NvbnRyb2xfZmxhZ3MuYml0cy50eF9tb2RlID0gZmgt PnR4X21vZGU7Cj4gKwo+ICsgICAgdnBpYy0+dGlsZV9ncm91cF9vYnVfaGRyX2luZm8uYml0cy5v YnVfaGFzX3NpemVfZmllbGQgPSAxOwo+ICsKPiArICAgIC8qKiBzZXQgcmVmZXJlbmNlLiAqLwo+ ICsgICAgZm9yIChpID0gMDsgaSA8IEFWMV9SRUZTX1BFUl9GUkFNRTsgaSsrKQo+ICsgICAgICAg IHZwaWMtPnJlZl9mcmFtZV9pZHhbaV0gPSBmaC0+cmVmX2ZyYW1lX2lkeFtpXTsKPiArCj4gKyAg ICBmb3IgKGkgPSAwOyBpIDwgRkZfQVJSQVlfRUxFTVModnBpYy0+cmVmZXJlbmNlX2ZyYW1lcyk7 IGkrKykKPiArICAgICAgICB2cGljLT5yZWZlcmVuY2VfZnJhbWVzW2ldID0gVkFfSU5WQUxJRF9T VVJGQUNFOwo+ICsKPiArICAgIGZvciAoaSA9IDA7IGkgPCBNQVhfUkVGRVJFTkNFX0xJU1RfTlVN OyBpKyspIHsKPiArICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHBpYy0+bmJfcmVmc1tpXTsg aisrKSB7Cj4gKyAgICAgICAgICAgIFZBQVBJRW5jb2RlUGljdHVyZSAqcmVmX3BpYyA9IHBpYy0+ cmVmc1tpXVtqXTsKPiArCj4gKyAgICAgICAgICAgIHNsb3QgPSAoKFZBQVBJRW5jb2RlQVYxUGlj dHVyZSopcmVmX3BpYy0+cHJpdl9kYXRhKS0+c2xvdDsKPiArICAgICAgICAgICAgYXZfYXNzZXJ0 MCh2cGljLT5yZWZlcmVuY2VfZnJhbWVzW3Nsb3RdID09IFZBX0lOVkFMSURfU1VSRkFDRSk7Cj4g Kwo+ICsgICAgICAgICAgICB2cGljLT5yZWZlcmVuY2VfZnJhbWVzW3Nsb3RdID0gcmVmX3BpYy0+ cmVjb25fc3VyZmFjZTsKPiArICAgICAgICB9Cj4gKyAgICB9Cj4gKwo+ICsgICAgLyoqIHBhY2sg ZnJhbWUgaGVhZGVyLCBhbmQgc2V0IHZhIHBhcmFtcyBvZmZzZXQgbGlrZSBiaXRfb2Zmc2V0X3Fp bmRleCBldGMuICovCj4gKyAgICByZXQgPSB2YWFwaV9lbmNvZGVfYXYxX3dyaXRlX2ZyYW1lX2hl YWRlcihhdmN0eCwgcGljLCBwcml2LT5maF9kYXRhLCAmcHJpdi0+ZmhfZGF0YV9sZW4pOwo+ICsg ICAgaWYgKHJldCA8IDApCj4gKyAgICAgICAgZ290byBlbmQ7Cj4gKwo+ICtlbmQ6Cj4gKyAgICBm Zl9jYnNfZnJhZ21lbnRfcmVzZXQob2J1KTsKPiArICAgIHJldHVybiByZXQ7Cj4gK30KPiArCj4g K3N0YXRpYyBpbnQgdmFhcGlfZW5jb2RlX2F2MV9pbml0X3NsaWNlX3BhcmFtcyhBVkNvZGVjQ29u dGV4dCAqYXZjdHgsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBWQUFQSUVuY29kZVBpY3R1cmUgKnBpYywKPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFZBQVBJRW5jb2RlU2xpY2UgKnNsaWNlKQo+ICt7Cj4gKyAg ICBWQUFQSUVuY29kZUFWMUNvbnRleHQgICAgICAqcHJpdiA9IGF2Y3R4LT5wcml2X2RhdGE7Cj4g KyAgICBWQUVuY1RpbGVHcm91cEJ1ZmZlckFWMSAgKnZzbGljZSA9IHNsaWNlLT5jb2RlY19zbGlj ZV9wYXJhbXM7Cj4gKyAgICBDb2RlZEJpdHN0cmVhbUFWMUNvbnRleHQgICpjYmN0eCA9IHByaXYt PmNiYy0+cHJpdl9kYXRhOwo+ICsgICAgaW50IGRpdjsKPiArCj4gKyAgICAvKiogU2V0IHRpbGUg Z3JvdXAgaW5mby4gKi8KPiArICAgIGRpdiA9IHByaXYtPnRpbGVfY29scyAqIHByaXYtPnRpbGVf cm93cyAvIHByaXYtPnRpbGVfZ3JvdXBzOwo+ICsgICAgdnNsaWNlLT50Z19zdGFydCA9IHNsaWNl LT5pbmRleCAqIGRpdjsKPiArICAgIGlmIChzbGljZS0+aW5kZXggPT0gKHByaXYtPnRpbGVfZ3Jv dXBzIC0gMSkpIHsKPiArICAgICAgICB2c2xpY2UtPnRnX2VuZCA9IHByaXYtPnRpbGVfY29scyAq IHByaXYtPnRpbGVfcm93cyAtIDE7Cj4gKyAgICAgICAgY2JjdHgtPnNlZW5fZnJhbWVfaGVhZGVy ID0gMDsKPiArICAgIH0gZWxzZSB7Cj4gKyAgICAgICAgdnNsaWNlLT50Z19lbmQgPSAoc2xpY2Ut PmluZGV4ICsgMSkgKiBkaXYgLSAxOwo+ICsgICAgfQo+ICsKPiArICAgIHJldHVybiAwOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgaW50IHZhYXBpX2VuY29kZV9hdjFfd3JpdGVfcGljdHVyZV9oZWFkZXIo QVZDb2RlY0NvbnRleHQgKmF2Y3R4LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgVkFBUElFbmNvZGVQaWN0dXJlICpwaWMsCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpkYXRhLCBzaXplX3Qg KmRhdGFfbGVuKQo+ICt7Cj4gKyAgICBWQUFQSUVuY29kZUFWMUNvbnRleHQgICAgICpwcml2ID0g YXZjdHgtPnByaXZfZGF0YTsKPiArICAgIENvZGVkQml0c3RyZWFtRnJhZ21lbnQgICAgICpvYnUg PSAmcHJpdi0+Y3VycmVudF9vYnU7Cj4gKyAgICBBVjFSYXdPQlUgICAgICAgICAgICAgICAqZmhf b2J1ID0gJnByaXYtPmZoOwo+ICsgICAgQVYxUmF3RnJhbWVIZWFkZXIgICAgICAgKnJlcF9maCA9 ICZmaF9vYnUtPm9idS5mcmFtZV9oZWFkZXI7Cj4gKyAgICBWQUFQSUVuY29kZUFWMVBpY3R1cmUg KmhyZWY7Cj4gKyAgICBpbnQgcmV0ID0gMDsKPiArCj4gKyAgICBwaWMtPnRhaWxfc2l6ZSA9IDA7 Cj4gKyAgICAvKiogUGFjayByZXBlYXQgZnJhbWUgaGVhZGVyLiAqLwo+ICsgICAgaWYgKHBpYy0+ ZGlzcGxheV9vcmRlciA+IHBpYy0+ZW5jb2RlX29yZGVyKSB7Cj4gKyAgICAgICAgbWVtc2V0KGZo X29idSwgMCwgc2l6ZW9mKCpmaF9vYnUpKTsKPiArICAgICAgICBocmVmID0gcGljLT5yZWZzWzBd W3BpYy0+bmJfcmVmc1swXSAtIDFdLT5wcml2X2RhdGE7Cj4gKyAgICAgICAgZmhfb2J1LT5oZWFk ZXIub2J1X3R5cGUgPSBBVjFfT0JVX0ZSQU1FX0hFQURFUjsKPiArICAgICAgICBmaF9vYnUtPmhl YWRlci5vYnVfaGFzX3NpemVfZmllbGQgPSAxOwo+ICsKPiArICAgICAgICByZXBfZmgtPnNob3df ZXhpc3RpbmdfZnJhbWUgICA9IDE7Cj4gKyAgICAgICAgcmVwX2ZoLT5mcmFtZV90b19zaG93X21h cF9pZHggPSBocmVmLT5zbG90ID09IDA7Cj4gKyAgICAgICAgcmVwX2ZoLT5mcmFtZV90eXBlICAg ICAgICAgICAgPSBBVjFfRlJBTUVfSU5URVI7Cj4gKyAgICAgICAgcmVwX2ZoLT5mcmFtZV93aWR0 aF9taW51c18xICAgPSBhdmN0eC0+d2lkdGggLSAxOwo+ICsgICAgICAgIHJlcF9maC0+ZnJhbWVf aGVpZ2h0X21pbnVzXzEgID0gYXZjdHgtPmhlaWdodCAtIDE7Cj4gKyAgICAgICAgcmVwX2ZoLT5y ZW5kZXJfd2lkdGhfbWludXNfMSAgPSByZXBfZmgtPmZyYW1lX3dpZHRoX21pbnVzXzE7Cj4gKyAg ICAgICAgcmVwX2ZoLT5yZW5kZXJfaGVpZ2h0X21pbnVzXzEgPSByZXBfZmgtPmZyYW1lX2hlaWdo dF9taW51c18xOwo+ICsKPiArICAgICAgICByZXQgPSB2YWFwaV9lbmNvZGVfYXYxX3dyaXRlX2Zy YW1lX2hlYWRlcihhdmN0eCwgcGljLCBwaWMtPnRhaWxfZGF0YSwgJnBpYy0+dGFpbF9zaXplKTsK PiArICAgICAgICBpZiAocmV0IDwgMCkKPiArICAgICAgICAgICAgZ290byBlbmQ7Cj4gKwo+ICsg ICAgICAgIHBpYy0+dGFpbF9zaXplIC89IDg7Cj4gKyAgICB9Cj4gKwo+ICsgICAgbWVtY3B5KGRh dGEsICZwcml2LT5maF9kYXRhLCBNQVhfUEFSQU1fQlVGRkVSX1NJWkUgKiBzaXplb2YoY2hhcikp Owo+ICsgICAgKmRhdGFfbGVuID0gcHJpdi0+ZmhfZGF0YV9sZW47Cj4gKwo+ICtlbmQ6Cj4gKyAg ICBmZl9jYnNfZnJhZ21lbnRfcmVzZXQob2J1KTsKPiArICAgIHJldHVybiByZXQ7Cj4gK30KPiAr Cj4gK3N0YXRpYyBjb25zdCBWQUFQSUVuY29kZVByb2ZpbGUgdmFhcGlfZW5jb2RlX2F2MV9wcm9m aWxlc1tdID0gewo+ICsgICAgeyBGRl9QUk9GSUxFX0FWMV9NQUlOLCAgOCwgMywgMSwgMSwgVkFQ cm9maWxlQVYxUHJvZmlsZTAgfSwKPiArICAgIHsgRkZfUFJPRklMRV9BVjFfTUFJTiwgMTAsIDMs IDEsIDEsIFZBUHJvZmlsZUFWMVByb2ZpbGUwIH0sCj4gKyAgICB7IEZGX1BST0ZJTEVfVU5LTk9X TiB9Cj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3QgVkFBUElFbmNvZGVUeXBlIHZhYXBpX2VuY29k ZV90eXBlX2F2MSA9IHsKPiArICAgIC5wcm9maWxlcyAgICAgICAgPSB2YWFwaV9lbmNvZGVfYXYx X3Byb2ZpbGVzLAo+ICsgICAgLmZsYWdzICAgICAgICAgICA9IEZMQUdfQl9QSUNUVVJFUywKPiAr ICAgIC5kZWZhdWx0X3F1YWxpdHkgPSAyNSwKPiArICAgIC5jb25maWd1cmUgICAgICAgPSAmdmFh cGlfZW5jb2RlX2F2MV9jb25maWd1cmUsCj4gKwo+ICsgICAgLnNlcXVlbmNlX2hlYWRlcl90eXBl ICA9IFZBRW5jUGFja2VkSGVhZGVyU2VxdWVuY2UsCj4gKyAgICAuc2VxdWVuY2VfcGFyYW1zX3Np emUgID0gc2l6ZW9mKFZBRW5jU2VxdWVuY2VQYXJhbWV0ZXJCdWZmZXJBVjEpLAo+ICsgICAgLmlu aXRfc2VxdWVuY2VfcGFyYW1zICA9ICZ2YWFwaV9lbmNvZGVfYXYxX2luaXRfc2VxdWVuY2VfcGFy YW1zLAo+ICsgICAgLndyaXRlX3NlcXVlbmNlX2hlYWRlciA9ICZ2YWFwaV9lbmNvZGVfYXYxX3dy aXRlX3NlcXVlbmNlX2hlYWRlciwKPiArCj4gKyAgICAucGljdHVyZV9wcml2X2RhdGFfc2l6ZSA9 IHNpemVvZihWQUFQSUVuY29kZUFWMVBpY3R1cmUpLAo+ICsgICAgLnBpY3R1cmVfaGVhZGVyX3R5 cGUgICAgPSBWQUVuY1BhY2tlZEhlYWRlclBpY3R1cmUsCj4gKyAgICAucGljdHVyZV9wYXJhbXNf c2l6ZSAgICA9IHNpemVvZihWQUVuY1BpY3R1cmVQYXJhbWV0ZXJCdWZmZXJBVjEpLAo+ICsgICAg LmluaXRfcGljdHVyZV9wYXJhbXMgICAgPSAmdmFhcGlfZW5jb2RlX2F2MV9pbml0X3BpY3R1cmVf cGFyYW1zLAo+ICsgICAgLndyaXRlX3BpY3R1cmVfaGVhZGVyICAgPSAmdmFhcGlfZW5jb2RlX2F2 MV93cml0ZV9waWN0dXJlX2hlYWRlciwKPiArCj4gKyAgICAuc2xpY2VfcGFyYW1zX3NpemUgPSBz aXplb2YoVkFFbmNUaWxlR3JvdXBCdWZmZXJBVjEpLAo+ICsgICAgLmluaXRfc2xpY2VfcGFyYW1z ID0gJnZhYXBpX2VuY29kZV9hdjFfaW5pdF9zbGljZV9wYXJhbXMsCj4gK307Cj4gKwo+ICtzdGF0 aWMgYXZfY29sZCBpbnQgdmFhcGlfZW5jb2RlX2F2MV9pbml0KEFWQ29kZWNDb250ZXh0ICphdmN0 eCkKPiArewo+ICsgICAgVkFBUElFbmNvZGVDb250ZXh0ICAgICAgKmN0eCA9IGF2Y3R4LT5wcml2 X2RhdGE7Cj4gKyAgICBWQUFQSUVuY29kZUFWMUNvbnRleHQgICpwcml2ID0gYXZjdHgtPnByaXZf ZGF0YTsKPiArICAgIFZBQ29uZmlnQXR0cmliIGF0dHI7Cj4gKyAgICBWQVN0YXR1cyB2YXM7Cj4g KyAgICBpbnQgcmV0Owo+ICsKPiArICAgIGN0eC0+Y29kZWMgPSAmdmFhcGlfZW5jb2RlX3R5cGVf YXYxOwo+ICsKPiArICAgIGN0eC0+ZGVzaXJlZF9wYWNrZWRfaGVhZGVycyA9Cj4gKyAgICAgICAg VkFfRU5DX1BBQ0tFRF9IRUFERVJfU0VRVUVOQ0UgfAo+ICsgICAgICAgIFZBX0VOQ19QQUNLRURf SEVBREVSX1BJQ1RVUkU7Cj4gKwo+ICsgICAgaWYgKGF2Y3R4LT5wcm9maWxlID09IEZGX1BST0ZJ TEVfVU5LTk9XTikKPiArICAgICAgICBhdmN0eC0+cHJvZmlsZSA9IHByaXYtPnByb2ZpbGU7Cj4g KyAgICBpZiAoYXZjdHgtPmxldmVsID09IEZGX0xFVkVMX1VOS05PV04pCj4gKyAgICAgICAgYXZj dHgtPmxldmVsID0gcHJpdi0+bGV2ZWw7Cj4gKwo+ICsgICAgaWYgKGF2Y3R4LT5sZXZlbCAhPSBG Rl9MRVZFTF9VTktOT1dOICYmIGF2Y3R4LT5sZXZlbCAmIH4weDFmKSB7Cj4gKyAgICAgICAgYXZf bG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJJbnZhbGlkIGxldmVsICVkXG4iLCBhdmN0eC0+bGV2 ZWwpOwo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Cj4gKyAgICB9Cj4gKwo+ICsg ICAgcmV0ID0gZmZfdmFhcGlfZW5jb2RlX2luaXQoYXZjdHgpOwo+ICsgICAgaWYgKHJldCA8IDAp Cj4gKyAgICAgICAgcmV0dXJuIHJldDsKPiArCj4gKyAgICBhdHRyLnR5cGUgPSBWQUNvbmZpZ0F0 dHJpYkVuY0FWMTsKPiArICAgIHZhcyA9IHZhR2V0Q29uZmlnQXR0cmlidXRlcyhjdHgtPmh3Y3R4 LT5kaXNwbGF5LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+dmFfcHJv ZmlsZSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnZhX2VudHJ5cG9p bnQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmF0dHIsIDEpOwo+ICsgICAg aWYgKHZhcyAhPSBWQV9TVEFUVVNfU1VDQ0VTUykgewo+ICsgICAgICAgIGF2X2xvZyhhdmN0eCwg QVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIHF1ZXJ5ICIKPiArICAgICAgICAgICAgICAgImNvbmZp ZyBhdHRyaWJ1dGU6ICVkICglcykuXG4iLCB2YXMsIHZhRXJyb3JTdHIodmFzKSk7Cj4gKyAgICAg ICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7Cj4gKyAgICB9IGVsc2UgaWYgKGF0dHIudmFsdWUg PT0gVkFfQVRUUklCX05PVF9TVVBQT1JURUQpIHsKPiArICAgICAgICBwcml2LT5hdHRyLnZhbHVl ID0gMDsKPiArICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19XQVJOSU5HLCAiQXR0cmlidXRl IHR5cGU6JWQgaXMgbm90ICIKPiArICAgICAgICAgICAgICAgInN1cHBvcnRlZC5cbiIsIGF0dHIu dHlwZSk7Cj4gKyAgICB9IGVsc2Ugewo+ICsgICAgICAgIHByaXYtPmF0dHIudmFsdWUgPSBhdHRy LnZhbHVlOwo+ICsgICAgfQo+ICsKPiArICAgIGF0dHIudHlwZSA9IFZBQ29uZmlnQXR0cmliRW5j QVYxRXh0MTsKPiArICAgIHZhcyA9IHZhR2V0Q29uZmlnQXR0cmlidXRlcyhjdHgtPmh3Y3R4LT5k aXNwbGF5LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+dmFfcHJvZmls ZSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnZhX2VudHJ5cG9pbnQs Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmF0dHIsIDEpOwo+ICsgICAgaWYg KHZhcyAhPSBWQV9TVEFUVVNfU1VDQ0VTUykgewo+ICsgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZf TE9HX0VSUk9SLCAiRmFpbGVkIHRvIHF1ZXJ5ICIKPiArICAgICAgICAgICAgICAgImNvbmZpZyBh dHRyaWJ1dGU6ICVkICglcykuXG4iLCB2YXMsIHZhRXJyb3JTdHIodmFzKSk7Cj4gKyAgICAgICAg cmV0dXJuIEFWRVJST1JfRVhURVJOQUw7Cj4gKyAgICB9IGVsc2UgaWYgKGF0dHIudmFsdWUgPT0g VkFfQVRUUklCX05PVF9TVVBQT1JURUQpIHsKPiArICAgICAgICBwcml2LT5hdHRyX2V4dDEudmFs dWUgPSAwOwo+ICsgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1dBUk5JTkcsICJBdHRyaWJ1 dGUgdHlwZTolZCBpcyBub3QgIgo+ICsgICAgICAgICAgICAgICAic3VwcG9ydGVkLlxuIiwgYXR0 ci50eXBlKTsKPiArICAgIH0gZWxzZSB7Cj4gKyAgICAgICAgcHJpdi0+YXR0cl9leHQxLnZhbHVl ID0gYXR0ci52YWx1ZTsKPiArICAgIH0KPiArCj4gKyAgICAvKiogVGhpcyBhdHRyIHByb3ZpZGVz IGVzc2VudGlhbCBpbmRpY2F0b3JzLCByZXR1cm4gZXJyb3IgaWYgbm90IHN1cHBvcnQuICovCj4g KyAgICBhdHRyLnR5cGUgPSBWQUNvbmZpZ0F0dHJpYkVuY0FWMUV4dDI7Cj4gKyAgICB2YXMgPSB2 YUdldENvbmZpZ0F0dHJpYnV0ZXMoY3R4LT5od2N0eC0+ZGlzcGxheSwKPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjdHgtPnZhX3Byb2ZpbGUsCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY3R4LT52YV9lbnRyeXBvaW50LAo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZhdHRyLCAxKTsKPiArICAgIGlmICh2YXMgIT0gVkFfU1RBVFVTX1NVQ0NF U1MgfHwgYXR0ci52YWx1ZSA9PSBWQV9BVFRSSUJfTk9UX1NVUFBPUlRFRCkgewo+ICsgICAgICAg IGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIHF1ZXJ5ICIKPiArICAgICAg ICAgICAgICAgImNvbmZpZyBhdHRyaWJ1dGU6ICVkICglcykuXG4iLCB2YXMsIHZhRXJyb3JTdHIo dmFzKSk7Cj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7Cj4gKyAgICB9IGVsc2Ug ewo+ICsgICAgICAgIHByaXYtPmF0dHJfZXh0Mi52YWx1ZSA9IGF0dHIudmFsdWU7Cj4gKyAgICB9 Cj4gKwo+ICsgICAgcmV0ID0gdmFhcGlfZW5jb2RlX2F2MV9zZXRfdGlsZShhdmN0eCk7Cj4gKyAg ICBpZiAocmV0IDwgMCkKPiArICAgICAgICByZXR1cm4gcmV0Owo+ICsKPiArICAgIHJldHVybiAw Owo+ICt9Cj4gKwo+ICtzdGF0aWMgYXZfY29sZCBpbnQgdmFhcGlfZW5jb2RlX2F2MV9jbG9zZShB VkNvZGVjQ29udGV4dCAqYXZjdHgpCj4gK3sKPiArICAgIFZBQVBJRW5jb2RlQVYxQ29udGV4dCAq cHJpdiA9IGF2Y3R4LT5wcml2X2RhdGE7Cj4gKwo+ICsgICAgZmZfY2JzX2ZyYWdtZW50X2ZyZWUo JnByaXYtPmN1cnJlbnRfb2J1KTsKPiArICAgIGZmX2Nic19jbG9zZSgmcHJpdi0+Y2JjKTsKPiAr Cj4gKyAgICByZXR1cm4gZmZfdmFhcGlfZW5jb2RlX2Nsb3NlKGF2Y3R4KTsKPiArfQo+ICsKPiAr I2RlZmluZSBPRkZTRVQoeCkgb2Zmc2V0b2YoVkFBUElFbmNvZGVBVjFDb250ZXh0LCB4KQo+ICsj ZGVmaW5lIEZMQUdTIChBVl9PUFRfRkxBR19WSURFT19QQVJBTSB8IEFWX09QVF9GTEFHX0VOQ09E SU5HX1BBUkFNKQo+ICsKPiArc3RhdGljIGNvbnN0IEFWT3B0aW9uIHZhYXBpX2VuY29kZV9hdjFf b3B0aW9uc1tdID0gewo+ICsgICAgVkFBUElfRU5DT0RFX0NPTU1PTl9PUFRJT05TLAo+ICsgICAg VkFBUElfRU5DT0RFX1JDX09QVElPTlMsCj4gKyAgICB7ICJwcm9maWxlIiwgIlNldCBwcm9maWxl IChzZXFfcHJvZmlsZSkiLAo+ICsgICAgICBPRkZTRVQocHJvZmlsZSksIEFWX09QVF9UWVBFX0lO VCwKPiArICAgICAgeyAuaTY0ID0gRkZfUFJPRklMRV9VTktOT1dOIH0sIEZGX1BST0ZJTEVfVU5L Tk9XTiwgMHhmZiwgRkxBR1MsICJwcm9maWxlIiB9LAo+ICsKPiArI2RlZmluZSBQUk9GSUxFKG5h bWUsIHZhbHVlKSAgbmFtZSwgTlVMTCwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIFwKPiArICAgIHsg Lmk2NCA9IHZhbHVlIH0sIDAsIDAsIEZMQUdTLCAicHJvZmlsZSIKPiArICAgIHsgUFJPRklMRSgi bWFpbiIsICAgICAgICAgICAgICAgRkZfUFJPRklMRV9BVjFfTUFJTikgfSwKPiArICAgIHsgUFJP RklMRSgiaGlnaCIsICAgICAgICAgICAgICAgRkZfUFJPRklMRV9BVjFfSElHSCkgfSwKPiArICAg IHsgUFJPRklMRSgicHJvZmVzc2lvbmFsIiwgICAgICAgRkZfUFJPRklMRV9BVjFfUFJPRkVTU0lP TkFMKSB9LAo+ICsjdW5kZWYgUFJPRklMRQo+ICsKPiArICAgIHsgInRpZXIiLCAiU2V0IHRpZXIg KHNlcV90aWVyKSIsCj4gKyAgICAgIE9GRlNFVCh0aWVyKSwgQVZfT1BUX1RZUEVfSU5ULCB7IC5p NjQgPSAwIH0sIDAsIDEsIEZMQUdTLCAidGllciIgfSwKPiArICAgIHsgIm1haW4iLCBOVUxMLCAw LCBBVl9PUFRfVFlQRV9DT05TVCwKPiArICAgICAgeyAuaTY0ID0gMCB9LCAwLCAwLCBGTEFHUywg InRpZXIiIH0sCj4gKyAgICB7ICJoaWdoIiwgTlVMTCwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsCj4g KyAgICAgIHsgLmk2NCA9IDEgfSwgMCwgMCwgRkxBR1MsICJ0aWVyIiB9LAo+ICsgICAgeyAibGV2 ZWwiLCAiU2V0IGxldmVsIChzZXFfbGV2ZWxfaWR4KSIsCj4gKyAgICAgIE9GRlNFVChsZXZlbCks IEFWX09QVF9UWVBFX0lOVCwKPiArICAgICAgeyAuaTY0ID0gRkZfTEVWRUxfVU5LTk9XTiB9LCBG Rl9MRVZFTF9VTktOT1dOLCAweDFmLCBGTEFHUywgImxldmVsIiB9LAo+ICsKPiArI2RlZmluZSBM RVZFTChuYW1lLCB2YWx1ZSkgbmFtZSwgTlVMTCwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIFwKPiAr ICAgICAgeyAuaTY0ID0gdmFsdWUgfSwgMCwgMCwgRkxBR1MsICJsZXZlbCIKPiArICAgIHsgTEVW RUwoIjIuMCIsICAwKSB9LAo+ICsgICAgeyBMRVZFTCgiMi4xIiwgIDEpIH0sCj4gKyAgICB7IExF VkVMKCIzLjAiLCAgNCkgfSwKPiArICAgIHsgTEVWRUwoIjMuMSIsICA1KSB9LAo+ICsgICAgeyBM RVZFTCgiNC4wIiwgIDgpIH0sCj4gKyAgICB7IExFVkVMKCI0LjEiLCAgOSkgfSwKPiArICAgIHsg TEVWRUwoIjUuMCIsIDEyKSB9LAo+ICsgICAgeyBMRVZFTCgiNS4xIiwgMTMpIH0sCj4gKyAgICB7 IExFVkVMKCI1LjIiLCAxNCkgfSwKPiArICAgIHsgTEVWRUwoIjUuMyIsIDE1KSB9LAo+ICsgICAg eyBMRVZFTCgiNi4wIiwgMTYpIH0sCj4gKyAgICB7IExFVkVMKCI2LjEiLCAxNykgfSwKPiArICAg IHsgTEVWRUwoIjYuMiIsIDE4KSB9LAo+ICsgICAgeyBMRVZFTCgiNi4zIiwgMTkpIH0sCj4gKyN1 bmRlZiBMRVZFTAo+ICsKPiArICAgIHsgInRpbGVzIiwgIlRpbGUgY29sdW1ucyB4IHJvd3MiLAo+ ICsgICAgICBPRkZTRVQodGlsZV9jb2xzKSwgQVZfT1BUX1RZUEVfSU1BR0VfU0laRSwgeyAuc3Ry ID0gIjF4MSIgfSwgMSwgQVYxX01BWF9USUxFX0NPTFMsIEZMQUdTIH0sCj4gKyAgICB7ICJ0aWxl X2dyb3VwcyIsICJOdW1iZXIgb2YgdGlsZSBncm91cHMgZm9yIGVuY29kaW5nIiwKPiArICAgICAg T0ZGU0VUKHRpbGVfZ3JvdXBzKSwgQVZfT1BUX1RZUEVfSU5ULCB7IC5pNjQgPSAxIH0sIDEsIEFW MV9NQVhfVElMRV9ST1dTICogQVYxX01BWF9USUxFX0NPTFMsIEZMQUdTIH0sCj4gKwo+ICsgICAg eyBOVUxMIH0sCj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3QgRkZDb2RlY0RlZmF1bHQgdmFhcGlf ZW5jb2RlX2F2MV9kZWZhdWx0c1tdID0gewo+ICsgICAgeyAiYiIsICAgICAgICAgICAgICAiMCIg ICB9LAo+ICsgICAgeyAiYmYiLCAgICAgICAgICAgICAiNyIgICB9LAo+ICsgICAgeyAiZyIsICAg ICAgICAgICAgICAiMTIwIiB9LAo+ICsgICAgeyAicW1pbiIsICAgICAgICAgICAiMSIgICB9LAo+ ICsgICAgeyAicW1heCIsICAgICAgICAgICAiMjU1IiB9LAo+ICsgICAgeyBOVUxMIH0sCj4gK307 Cj4gKwo+ICtzdGF0aWMgY29uc3QgQVZDbGFzcyB2YWFwaV9lbmNvZGVfYXYxX2NsYXNzID0gewo+ ICsgICAgLmNsYXNzX25hbWUgPSAiYXYxX3ZhYXBpIiwKPiArICAgIC5pdGVtX25hbWUgID0gYXZf ZGVmYXVsdF9pdGVtX25hbWUsCj4gKyAgICAub3B0aW9uICAgICA9IHZhYXBpX2VuY29kZV9hdjFf b3B0aW9ucywKPiArICAgIC52ZXJzaW9uICAgID0gTElCQVZVVElMX1ZFUlNJT05fSU5ULAo+ICt9 Owo+ICsKPiArY29uc3QgRkZDb2RlYyBmZl9hdjFfdmFhcGlfZW5jb2RlciA9IHsKPiArICAgIC5w Lm5hbWUgICAgICAgICA9ICJhdjFfdmFhcGkiLAo+ICsgICAgQ09ERUNfTE9OR19OQU1FKCJBVjEg KFZBQVBJKSIpLAo+ICsgICAgLnAudHlwZSAgICAgICAgID0gQVZNRURJQV9UWVBFX1ZJREVPLAo+ ICsgICAgLnAuaWQgICAgICAgICAgID0gQVZfQ09ERUNfSURfQVYxLAo+ICsgICAgLnByaXZfZGF0 YV9zaXplID0gc2l6ZW9mKFZBQVBJRW5jb2RlQVYxQ29udGV4dCksCj4gKyAgICAuaW5pdCAgICAg ICAgICAgPSAmdmFhcGlfZW5jb2RlX2F2MV9pbml0LAo+ICsgICAgRkZfQ09ERUNfUkVDRUlWRV9Q QUNLRVRfQ0IoJmZmX3ZhYXBpX2VuY29kZV9yZWNlaXZlX3BhY2tldCksCj4gKyAgICAuY2xvc2Ug ICAgICAgICAgPSAmdmFhcGlfZW5jb2RlX2F2MV9jbG9zZSwKPiArICAgIC5wLnByaXZfY2xhc3Mg ICA9ICZ2YWFwaV9lbmNvZGVfYXYxX2NsYXNzLAo+ICsgICAgLnAuY2FwYWJpbGl0aWVzID0gQVZf Q09ERUNfQ0FQX0RFTEFZIHwgQVZfQ09ERUNfQ0FQX0hBUkRXQVJFIHwKPiArICAgICAgICAgICAg ICAgICAgICAgIEFWX0NPREVDX0NBUF9EUjEgfCBBVl9DT0RFQ19DQVBfRU5DT0RFUl9SRU9SREVS RURfT1BBUVVFLAo+ICsgICAgLmNhcHNfaW50ZXJuYWwgID0gRkZfQ09ERUNfQ0FQX05PVF9JTklU X1RIUkVBRFNBRkUgfAo+ICsgICAgICAgICAgICAgICAgICAgICAgRkZfQ09ERUNfQ0FQX0lOSVRf Q0xFQU5VUCwKPiArICAgIC5kZWZhdWx0cyAgICAgICA9IHZhYXBpX2VuY29kZV9hdjFfZGVmYXVs dHMsCj4gKyAgICAucC5waXhfZm10cyA9IChjb25zdCBlbnVtIEFWUGl4ZWxGb3JtYXRbXSkgewo+ ICsgICAgICAgIEFWX1BJWF9GTVRfVkFBUEksCj4gKyAgICAgICAgQVZfUElYX0ZNVF9OT05FLAo+ ICsgICAgfSwKPiArICAgIC5od19jb25maWdzICAgICA9IGZmX3ZhYXBpX2VuY29kZV9od19jb25m aWdzLAo+ICsgICAgLnAud3JhcHBlcl9uYW1lID0gInZhYXBpIiwKPiArfTsKPiAtLQo+IDIuMjUu MQo+CgpTZWVtcyBzZW5zaWJsZSwgYnV0IHlvdXIgc2VuZGVyIGFkZHJlc3MgZ290IHJld3JpdHRl bi4gWW91IG1pZ2h0IHdhbnQKdG8gYWRkIGFuIGFkZGl0aW9uYWwKCkZyb206IEZlaSBXYW5nIDxm ZWkudy53YW5nQGludGVsLmNvbT4KCmF0IHRoZSB0b3Agb2YgeW91ciBjb21taXQgbWVzc2FnZSBi b2R5IGlmIHlvdSBjYW4ndCBnZXQgdGhlICJGcm9tIgpmaWVsZCBpbiB0aGUgZW1haWxzIHRvIGJl IHNldCBwcm9wZXJseSB3aGVuIHlvdSBzZW5kIHRvIHRoZSBsaXN0LgoKT3RoZXJ3aXNlIHRoZSBw YXRjaCBzZXJpZXMgTEdUTS4gSSBkb24ndCBoYXZlIGFueSBoYXJkd2FyZSB0byBleGVyY2lzZQp0 aGlzIGNvZGUgd2l0aCB0aG91Z2gsIHNvIHRoYXQgbWFrZXMgcmV2aWV3aW5nIGl0cyBiZWhhdmlv ciBhIGxpdHRsZQp0b3VnaC4KClJlZ2FyZGxlc3MsIEkgY2FuIGF0IGxlYXN0IGFjayBpdC4KCkFj a2VkLWJ5OiBOZWFsIEdvbXBhIDxuZ29tcGExM0BnbWFpbC5jb20+CgoKCgotLQrnnJ/lrp/jga/j gYTjgaTjgoLkuIDjgaTvvIEvIEFsd2F5cywgdGhlcmUncyBvbmx5IG9uZSB0cnV0aCEKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZmZtcGVnLWRldmVsIG1h aWxpbmcgbGlzdApmZm1wZWctZGV2ZWxAZmZtcGVnLm9yZwpodHRwczovL2ZmbXBlZy5vcmcvbWFp bG1hbi9saXN0aW5mby9mZm1wZWctZGV2ZWwKClRvIHVuc3Vic2NyaWJlLCB2aXNpdCBsaW5rIGFi b3ZlLCBvciBlbWFpbApmZm1wZWctZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdpdGggc3ViamVj dCAidW5zdWJzY3JpYmUiLgo=