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 C442F40AB9 for ; Tue, 5 Apr 2022 18:52:42 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 0854468B183; Tue, 5 Apr 2022 21:52:39 +0300 (EEST) Received: from mail-oi1-f174.google.com (mail-oi1-f174.google.com [209.85.167.174]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9625568A59A for ; Tue, 5 Apr 2022 21:52:32 +0300 (EEST) Received: by mail-oi1-f174.google.com with SMTP id v75so67932oie.1 for ; Tue, 05 Apr 2022 11:52:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=message-id:date:mime-version:user-agent:content-language:to :references:from:subject:in-reply-to:content-transfer-encoding; bh=WgVP7eRGGAQml/WQmySR/zaFVsY1YYMUptI9Kldq1/4=; b=Ay6CmWtKOVU2qd48C0XnLTr+b/VkcHU/F9YXFH5mhw43KgI6Qg28/dKekh59V4nDEf bb3j7QqNdQgvWmVq8umnXT+CHZwY7t85q/DJVXymBDDG1irqtZRovZN30iLUryaxQGo+ Blum2YLU4a4vVW8lV8V3f6Ion9r8b3k3q/rk9lpHqU6VAC/ZoM82gF7weOdlfHDb+i3w /5ozfJ+6yQG+Bcqmaci8JSUcLqU8iytQCrHMlYD50wFeJ5XCih1NWXuE9heTfB4TuoPd m0McqoUZ5n2tDiYVpyqW5WWq72JFf/2Tl5+J58cSJbPnP5Bk4aOFnaJ7WdaJZVGECF6M nyxQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:date:mime-version:user-agent :content-language:to:references:from:subject:in-reply-to :content-transfer-encoding; bh=WgVP7eRGGAQml/WQmySR/zaFVsY1YYMUptI9Kldq1/4=; b=S7ExbfMmtlGCkzhqQcJfVHoHLqs0G25Z2Jrma7RuRj+K1QolnVVm9N1UR35OLObRyb ps01QQRig0sU8sW8Fo54l9T30e1fAL5z3ySqdqzLK1YthzG9EiFWrT/khO17i3mnCSjl cB1i14+FwU+JtEyKP5AIj52jHCShJqXb3/2upOZxWGRVUASJc3DF/1uEVr0rKgDFObfo bs9QR/GK1N2qeS66Ze5QHldvMhO5dlipdca+b9BXw2wN7OHLB8sQan/sPmgBZaswqVqE bcBf/2EnqPJg2UFYHN5H12cJLHgIte0XN+wAPRKjlR3upGBQJJ3dTPcAIDW6vfdMshWp 2THw== X-Gm-Message-State: AOAM532zcYCFim4/D2EvZGeEPhvAMBR3PP7xsA0vvcbeyslz1jqodjUq +91GGSEzUD56FwX8D3efoPVXhO79h7L53A== X-Google-Smtp-Source: ABdhPJxBac0lDxf+2sRc45YyxVTREYr2djdHKDco9QEBva+hl/IYtr90sOPiQjQBEbTom0r9v1FHBg== X-Received: by 2002:a05:6808:11c2:b0:2d9:a01a:4bc2 with SMTP id p2-20020a05680811c200b002d9a01a4bc2mr2026747oiv.233.1649184749290; Tue, 05 Apr 2022 11:52:29 -0700 (PDT) Received: from [192.168.0.12] ([186.136.131.95]) by smtp.gmail.com with ESMTPSA id z5-20020a056830128500b005cdc661ad98sm5987594otp.28.2022.04.05.11.52.27 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 05 Apr 2022 11:52:28 -0700 (PDT) Message-ID: Date: Tue, 5 Apr 2022 15:52:32 -0300 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.7.0 Content-Language: en-US To: ffmpeg-devel@ffmpeg.org References: <006701d8481f$9ccdf900$d669eb00$@samsung.com> From: James Almer In-Reply-To: <006701d8481f$9ccdf900$d669eb00$@samsung.com> Subject: Re: [FFmpeg-devel] [PATCH] Provided support for MPEG-5 EVC (Essential Video Coding) codec 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-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: T24gNC80LzIwMjIgOToyOSBBTSwgRGF3aWQgS296aW5za2kgd3JvdGU6Cj4gZGlmZiAtLWdpdCBh L0NoYW5nZWxvZyBiL0NoYW5nZWxvZwo+IGluZGV4IDVhMzJjZjBkNWMuLjIxZWJjMTFmZjQgMTAw NjQ0Cj4gLS0tIGEvQ2hhbmdlbG9nCj4gKysrIGIvQ2hhbmdlbG9nCj4gQEAgLTEwNiw3ICsxMDYs OCBAQCB2ZXJzaW9uIDUuMDoKPiAgIC0gVmlkZW9Ub29sYm94IFByb1JlcyBlbmNvZGVyCj4gICAt IGFubG1mIGF1ZGlvIGZpbHRlcgo+ICAgLSBJTUYgZGVtdXhlciAoZXhwZXJpbWVudGFsKQo+IC0K PiArLSBlWHRyYS1mYXN0IEVzc2VudGlhbCBWaWRlbyBFbmNvZGVyIChYRVZFKQo+ICstIGVYdHJh LWZhc3QgRXNzZW50aWFsIFZpZGVvIERlY29kZXIgKFhFVkQpCj4gICAKPiAgIHZlcnNpb24gNC40 Ogo+ICAgLSBBdWRpb1Rvb2xib3ggb3V0cHV0IGRldmljZQo+IGRpZmYgLS1naXQgYS9jb25maWd1 cmUgYi9jb25maWd1cmUKPiBpbmRleCA3YTYyZjBjMjQ4Li43NDkxZDNhZjZiIDEwMDc1NQo+IC0t LSBhL2NvbmZpZ3VyZQo+ICsrKyBiL2NvbmZpZ3VyZQo+IEBAIC0yODksNiArMjg5LDggQEAgRXh0 ZXJuYWwgbGlicmFyeSBzdXBwb3J0Ogo+ICAgICAtLWVuYWJsZS1saWJ3ZWJwICAgICAgICAgZW5h YmxlIFdlYlAgZW5jb2RpbmcgdmlhIGxpYndlYnAgW25vXQo+ICAgICAtLWVuYWJsZS1saWJ4MjY0 ICAgICAgICAgZW5hYmxlIEguMjY0IGVuY29kaW5nIHZpYSB4MjY0IFtub10KPiAgICAgLS1lbmFi bGUtbGlieDI2NSAgICAgICAgIGVuYWJsZSBIRVZDIGVuY29kaW5nIHZpYSB4MjY1IFtub10KPiAr ICAtLWVuYWJsZS1saWJ4ZXZlICAgICAgICAgZW5hYmxlIFhFVkUgZW5jb2RpbmcgdmlhIHhldmUg W25vXQo+ICsgIC0tZW5hYmxlLWxpYnhldmQgICAgICAgICBlbmFibGUgWEVWRCBkZWNvZGluZyB2 aWEgeGV2ZCBbbm9dCj4gICAgIC0tZW5hYmxlLWxpYnhhdnMgICAgICAgICBlbmFibGUgQVZTIGVu Y29kaW5nIHZpYSB4YXZzIFtub10KPiAgICAgLS1lbmFibGUtbGlieGF2czIgICAgICAgIGVuYWJs ZSBBVlMyIGVuY29kaW5nIHZpYSB4YXZzMiBbbm9dCj4gICAgIC0tZW5hYmxlLWxpYnhjYiAgICAg ICAgICBlbmFibGUgWDExIGdyYWJiaW5nIHVzaW5nIFhDQiBbYXV0b2RldGVjdF0KPiBAQCAtMTg4 MCw2ICsxODgyLDggQEAgRVhURVJOQUxfTElCUkFSWV9MSVNUPSIKPiAgICAgICBvcGVuc3NsCj4g ICAgICAgcG9ja2V0c3BoaW54Cj4gICAgICAgdmFwb3Vyc3ludGgKPiArICAgIGxpYnhldmUKPiAr ICAgIGxpYnhldmQKPiAgICIKPiAgIAo+ICAgSFdBQ0NFTF9BVVRPREVURUNUX0xJQlJBUllfTElT VD0iCj4gQEAgLTI0NTMsNiArMjQ1Nyw3IEBAIENPTkZJR19FWFRSQT0iCj4gICAgICAgaDI2NHBy ZWQKPiAgICAgICBoMjY0cXBlbAo+ICAgICAgIGhldmNwYXJzZQo+ICsgICAgZXZjcGFyc2UKClRo aXMgaXMgdW51c2VkLCBzbyByZW1vdmUgaXQgZnJvbSBoZXJlIGFuZCBiZWxvdy4KCj4gICAgICAg aHBlbGRzcAo+ICAgICAgIGh1ZmZtYW4KPiAgICAgICBodWZmeXV2ZHNwCj4gQEAgLTMyNTIsNiAr MzI1Nyw3IEBAIG1wZWdhdWRpb19wYXJzZXJfc2VsZWN0PSJtcGVnYXVkaW9oZWFkZXIiCj4gICBt cGVndmlkZW9fcGFyc2VyX3NlbGVjdD0ibXBlZ3ZpZGVvIgo+ICAgbXBlZzR2aWRlb19wYXJzZXJf c2VsZWN0PSJoMjYzZHNwIG1wZWd2aWRlbyBxcGVsZHNwIgo+ICAgdmMxX3BhcnNlcl9zZWxlY3Q9 InZjMWRzcCIKPiArZXZjX3BhcnNlcl9zZWxlY3Q9ImV2Y3BhcnNlIgo+ICAgCj4gICAjIGJpdHN0 cmVhbV9maWx0ZXJzCj4gICBhYWNfYWR0c3RvYXNjX2JzZl9zZWxlY3Q9ImFkdHNfaGVhZGVyIG1w ZWc0YXVkaW8iCj4gQEAgLTMzNzcsNiArMzM4Myw4IEBAIGxpYngyNjRfZW5jb2Rlcl9zZWxlY3Q9 ImF0c2NfYTUzIgo+ICAgbGlieDI2NHJnYl9lbmNvZGVyX2RlcHM9ImxpYngyNjQiCj4gICBsaWJ4 MjY0cmdiX2VuY29kZXJfc2VsZWN0PSJsaWJ4MjY0X2VuY29kZXIiCj4gICBsaWJ4MjY1X2VuY29k ZXJfZGVwcz0ibGlieDI2NSIKPiArbGlieGV2ZV9lbmNvZGVyX2RlcHM9ImxpYnhldmUiCj4gK2xp YnhldmRfZGVjb2Rlcl9kZXBzPSJsaWJ4ZXZkIgo+ICAgbGlieGF2c19lbmNvZGVyX2RlcHM9Imxp YnhhdnMiCj4gICBsaWJ4YXZzMl9lbmNvZGVyX2RlcHM9ImxpYnhhdnMyIgo+ICAgbGlieHZpZF9l bmNvZGVyX2RlcHM9ImxpYnh2aWQiCj4gQEAgLTY2NTksNiArNjY2Nyw4IEBAIGVuYWJsZWQgbGli eDI2NCAgICAgICAgICAgJiYgeyBjaGVja19wa2dfY29uZmlnIGxpYngyNjQgeDI2NCAic3RkaW50 LmggeDI2NC5oIiB4Cj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX2NwcF9j b25kaXRpb24gbGlieDI2MiB4MjY0LmggIlgyNjRfTVBFRzIiCj4gICBlbmFibGVkIGxpYngyNjUg ICAgICAgICAgICYmIHJlcXVpcmVfcGtnX2NvbmZpZyBsaWJ4MjY1IHgyNjUgeDI2NS5oIHgyNjVf YXBpX2dldCAmJgo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlX2NwcF9j b25kaXRpb24gbGlieDI2NSB4MjY1LmggIlgyNjVfQlVJTEQgPj0gNzAiCj4gK2VuYWJsZWQgbGli eGV2ZSAgICAgICAgICAgJiYgcmVxdWlyZV9wa2dfY29uZmlnIGxpYnhldmUgInhldmUgPj0gMS4w LjAiICJ4ZXZlLmgiIHhldmVfZW5jb2RlCj4gK2VuYWJsZWQgbGlieGV2ZCAgICAgICAgICAgJiYg cmVxdWlyZV9wa2dfY29uZmlnIGxpYnhldmQgInhldmQgPj0gMS4wLjAiICJ4ZXZkLmgiIHhldmRf ZGVjb2RlCj4gICBlbmFibGVkIGxpYnhhdnMgICAgICAgICAgICYmIHJlcXVpcmUgbGlieGF2cyAi c3RkaW50LmggeGF2cy5oIiB4YXZzX2VuY29kZXJfZW5jb2RlICItbHhhdnMgJHB0aHJlYWRzX2V4 dHJhbGlicyAkbGlibV9leHRyYWxpYnMiCj4gICBlbmFibGVkIGxpYnhhdnMyICAgICAgICAgICYm IHJlcXVpcmVfcGtnX2NvbmZpZyBsaWJ4YXZzMiAieGF2czIgPj0gMS4zLjAiICJzdGRpbnQuaCB4 YXZzMi5oIiB4YXZzMl9hcGlfZ2V0Cj4gICBlbmFibGVkIGxpYnh2aWQgICAgICAgICAgICYmIHJl cXVpcmUgbGlieHZpZCB4dmlkLmggeHZpZF9nbG9iYWwgLWx4dmlkY29yZQoKWy4uLl0KCj4gZGlm ZiAtLWdpdCBhL2xpYmF2Y29kZWMvZXZjX3BhcnNlci5jIGIvbGliYXZjb2RlYy9ldmNfcGFyc2Vy LmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAuLmY2OGM0Y2MzYTAK PiAtLS0gL2Rldi9udWxsCj4gKysrIGIvbGliYXZjb2RlYy9ldmNfcGFyc2VyLmMKPiBAQCAtMCww ICsxLDQ1MiBAQAo+ICsvKgo+ICsgKiBFVkMgQVZDIGZvcm1hdCBwYXJzZXIKPiArICoKPiArICog Q29weXJpZ2h0IChDKSAyMDIxIERhd2lkIEtvemluc2tpIDxkLmtvemluc2tpQHNhbXN1bmcuY29t Pgo+ICsgKgo+ICsgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCj4gKyAqCj4gKyAqIEZG bXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKPiAr ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1 YmxpYwo+ICsgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uOyBlaXRoZXIKPiArICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5 b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4gKyAqCj4gKyAqIEZGbXBlZyBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ICsgKiBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlIEdOVQo+ICsgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y ZSBkZXRhaWxzLgo+ICsgKgo+ICsgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCj4gKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBG Rm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKPiArICogRm91bmRhdGlv biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjEx MC0xMzAxIFVTQQo+ICsgKi8KPiArCj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvY29tbW9uLmgiCj4g Kwo+ICsjaW5jbHVkZSAiZ29sb21iLmgiCj4gKyNpbmNsdWRlICJwYXJzZXIuaCIKPiArI2luY2x1 ZGUgInhldmQuaCIKCkEgcGFyc2VyIG11c3Qgbm90IGRlcGVuZCBvbiBleHRlcm5hbCBsaWJyYXJp ZXMgb3IgaGVhZGVycy4KCj4gKyNpbmNsdWRlIDxzdGRpbnQuaD4KPiArCj4gKyNkZWZpbmUgRVZD X05BTF9IRUFERVJfU0laRSAgIDIgLyogYnl0ZSAqLwo+ICsjZGVmaW5lIE1BWF9TUFNfQ05UICAx NiAvKiBkZWZpbmVkIHZhbHVlIGluIEVWQyBzdGFuZGFyZCAqLwo+ICsKPiArdHlwZWRlZiBzdHJ1 Y3QgX0VWQ1BhcnNlclNQUyB7Cj4gKyAgICBpbnQgc3BzX2lkOwo+ICsgICAgaW50IHByb2ZpbGVf aWRjOwo+ICsgICAgaW50IGxldmVsX2lkYzsKPiArICAgIGludCBjaHJvbWFfZm9ybWF0X2lkYzsK PiArICAgIGludCBwaWNfd2lkdGhfaW5fbHVtYV9zYW1wbGVzOwo+ICsgICAgaW50IHBpY19oZWln aHRfaW5fbHVtYV9zYW1wbGVzOwo+ICsgICAgaW50IGJpdF9kZXB0aF9sdW1hOwo+ICsgICAgaW50 IGJpdF9kZXB0aF9jaHJvbWE7Cj4gKwo+ICsgICAgaW50IHBpY3R1cmVfY3JvcHBpbmdfZmxhZzsK PiArICAgIGludCBwaWN0dXJlX2Nyb3BfbGVmdF9vZmZzZXQ7Cj4gKyAgICBpbnQgcGljdHVyZV9j cm9wX3JpZ2h0X29mZnNldDsKPiArICAgIGludCBwaWN0dXJlX2Nyb3BfdG9wX29mZnNldDsKPiAr ICAgIGludCBwaWN0dXJlX2Nyb3BfYm90dG9tX29mZnNldDsKPiArfSBFVkNQYXJzZXJTUFM7Cj4g Kwo+ICt0eXBlZGVmIHN0cnVjdCBFVkNQYXJzZXJDb250ZXh0IHsKPiArICAgIFBhcnNlQ29udGV4 dCBwYzsKPiArICAgIEVWQ1BhcnNlclNQUyBzcHNbTUFYX1NQU19DTlRdOwo+ICsgICAgaW50IGlz X2F2YzsKPiArICAgIGludCBuYWxfbGVuZ3RoX3NpemU7Cj4gKyAgICBpbnQgdG9fcmVhZDsKPiAr ICAgIGludCBpbmNvbXBsZXRlX25hbHVfcHJlZml4X3JlYWQ7IC8vIFRoZSBmbGFnIGlzIHNldCB0 byAxIHdoZW4gaW5jb21wbGV0ZSBOQUwgdW5pdCBwcmVmaXggaGFzIGJlZW4gcmVhZAo+ICsKPiAr ICAgIGludCBwYXJzZWRfZXh0cmFkYXRhOwo+ICsKPiArICAgIGludCBwb2M7Cj4gKyAgICBpbnQg cG9jVGlkMDsKPiArCj4gKyAgICBpbnQgZ290X3NwczsKPiArICAgIGludCBnb3RfcHBzOwo+ICsg ICAgaW50IGdvdF9zZWk7Cj4gKyAgICBpbnQgZ290X3NsaWNlOwo+ICt9IEVWQ1BhcnNlckNvbnRl eHQ7Cj4gKwo+ICtzdGF0aWMgaW50IGdldF9uYWx1X3R5cGUoY29uc3QgdWludDhfdCAqYnMsIGlu dCBic19zaXplKQo+ICt7Cj4gKyAgICBHZXRCaXRDb250ZXh0IGdiOwo+ICsgICAgaW50IGZ6Yiwg bnV0Owo+ICsgICAgaW5pdF9nZXRfYml0cygmZ2IsIGJzLCBic19zaXplICogOCk7Cj4gKyAgICBm emIgPSBnZXRfYml0czEoJmdiKTsKPiArICAgIGlmKGZ6YiAhPSAwKSB7Cj4gKyAgICAgICAgYXZf bG9nKE5VTEwsIEFWX0xPR19ERUJVRywgImZvcmJpZGRlbl96ZXJvX2JpdCBpcyBub3QgY2xlYXJc biIpOwo+ICsgICAgfQo+ICsgICAgbnV0ID0gZ2V0X2JpdHMoJmdiLCA2KTsgLyogbmFsX3VuaXRf dHlwZV9wbHVzMSAqLwo+ICsgICAgcmV0dXJuIG51dCAtIDE7Cj4gK30KPiArCj4gK3N0YXRpYyBp bnQgZ2V0X25hbHVfdHlwZTIoY29uc3QgdWludDhfdCAqYnMsIGludCBic19zaXplKQo+ICt7Cj4g KyAgICBpbnQgbmFsdV90eXBlID0gMDsKPiArICAgIFhFVkRfSU5GTyBpbmZvOwo+ICsgICAgaW50 IHJldDsKPiArCj4gKyAgICBpZihic19zaXplPj1FVkNfTkFMX0hFQURFUl9TSVpFKSB7Cj4gKyAg ICAgICAgcmV0ID0geGV2ZF9pbmZvKCh2b2lkKilicywgRVZDX05BTF9IRUFERVJfU0laRSwgMSwg JmluZm8pOwoKWW91IHdpbGwgbmVlZCB0byBpbXBsZW1lbnQgdGhpcyBwYXJzaW5nIGluIGxhdmMu CgpJIHJlY29tbWVuZCB5b3UgZG9pbmcgaXQgYXMgYSBDQlMgbW9kdWxlLCB3aGljaCBjYW4gYmUg cmV1c2VkIGJ5IApkaWZmZXJlbnQgY29tcG9uZW50cywgYW5kIHdpbGwgbWFrZSB3cml0aW5nIHRo aXMgcGFyc2VyIGVhc2llci4KClNlZSBjYnNfaDI2NDUuYyBhbmQgc28uCgo+ICsgICAgICAgIGlm IChYRVZEX0ZBSUxFRChyZXQpKSB7Cj4gKyAgICAgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0df RVJST1IsICJDYW5ub3QgZ2V0IGJpdHN0cmVhbSBpbmZvcm1hdGlvblxuIik7Cj4gKyAgICAgICAg ICAgIHJldHVybiAwOwo+ICsgICAgICAgIH0KPiArICAgICAgICBuYWx1X3R5cGUgPSBpbmZvLm5h bHVfdHlwZTsKPiArCj4gKyAgICB9Cj4gKyAgICByZXR1cm4gbmFsdV90eXBlLTE7Cj4gK30KPiAr Cj4gK3N0YXRpYyBFVkNQYXJzZXJTUFMgKiBwYXJzZV9zcHMoY29uc3QgdWludDhfdCAqYnMsIGlu dCBic19zaXplLCBFVkNQYXJzZXJDb250ZXh0ICpldikKPiArewo+ICsgICAgR2V0Qml0Q29udGV4 dCBnYjsKPiArICAgIEVWQ1BhcnNlclNQUyAqc3BzOwo+ICsgICAgaW50IHNwc19pZDsKPiArCj4g KyAgICBpbml0X2dldF9iaXRzKCZnYiwgYnMsIGJzX3NpemUqOCk7Cj4gKwo+ICsgICAgc3BzX2lk ID0gZ2V0X3VlX2dvbG9tYigmZ2IpOwo+ICsgICAgaWYoc3BzX2lkID49IE1BWF9TUFNfQ05UKSBn b3RvIEVSUjsKPiArICAgIHNwcyA9ICZldi0+c3BzW3Nwc19pZF07Cj4gKyAgICBzcHMtPnNwc19p ZCA9IHNwc19pZDsKPiArICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfREVCVUcsICJbRVZDIFBhcnNl cl0gc3BzX2lkPSVkXG4iLCBzcHMtPnNwc19pZCk7Cj4gKwo+ICsgICAgc3BzLT5wcm9maWxlX2lk YyA9IGdldF9iaXRzKCZnYiwgOCk7Cj4gKyAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0RFQlVHLCAi W0VWQyBQYXJzZXJdIHByb2ZpbGU9JWRcbiIsIHNwcy0+cHJvZmlsZV9pZGMpOwo+ICsgICAgc3Bz LT5sZXZlbF9pZGMgPSBnZXRfYml0cygmZ2IsIDgpOwo+ICsKPiArICAgIHNraXBfYml0c19sb25n KCZnYiwgMzIpOyAvKiBza2lwIHRvb2xzZXRfaWRjX2ggKi8KPiArICAgIHNraXBfYml0c19sb25n KCZnYiwgMzIpOyAvKiBza2lwIHRvb2xzZXRfaWRjX2wgKi8KPiArCj4gKyAgICBzcHMtPmNocm9t YV9mb3JtYXRfaWRjID0gZ2V0X3VlX2dvbG9tYigmZ2IpOwo+ICsgICAgc3BzLT5waWNfd2lkdGhf aW5fbHVtYV9zYW1wbGVzID0gZ2V0X3VlX2dvbG9tYigmZ2IpOwo+ICsgICAgYXZfbG9nKE5VTEws IEFWX0xPR19ERUJVRywgIltFVkMgUGFyc2VyXSB3aWR0aD0lZFxuIiwgc3BzLT5waWNfd2lkdGhf aW5fbHVtYV9zYW1wbGVzKTsKPiArICAgIHNwcy0+cGljX2hlaWdodF9pbl9sdW1hX3NhbXBsZXMg PSBnZXRfdWVfZ29sb21iKCZnYik7Cj4gKwo+ICsgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19ERUJV RywgIltFVkMgUGFyc2VyXSBoZWlnaHQ9JWRcbiIsIHNwcy0+cGljX2hlaWdodF9pbl9sdW1hX3Nh bXBsZXMpOwo+ICsgICAgc3BzLT5iaXRfZGVwdGhfbHVtYSA9IGdldF91ZV9nb2xvbWIoJmdiKTsK PiArICAgIHNwcy0+Yml0X2RlcHRoX2Nocm9tYSA9IGdldF91ZV9nb2xvbWIoJmdiKTsKPiArCj4g KyAgICAvLyBAdG9kbyB3ZSBuZWVkIHRvIHBhcnNlIGNyb3AgYW5kIHZ1aSBpbmZvcm1hdGlvbiBo ZXJlCj4gKwo+ICsgICAgcmV0dXJuIHNwczsKPiArCj4gK0VSUjoKPiArICAgIHJldHVybiBOVUxM Owo+ICt9Cj4gKwo+ICsvKioKPiArICogUmVhZCBOQUwgdW5pdCBsZW5ndGgKPiArICogQHBhcmFt IGJzIGlucHV0IGRhdGEgKGJpdHN0cmVhbSkKPiArICogQHJldHVybiB0aGUgbGVuZ2h0aCBvZiBO QUwgdW5pdCBvbiBzdWNjZXNzLCAwIHZhbHVlIG9uIGZhaWx1cmUKPiArICovCj4gK3N0YXRpYyB1 aW50MzJfdCByZWFkX25hbF91bml0X2xlbmd0aChjb25zdCB1aW50OF90ICpicywgaW50IGJzX3Np emUpCj4gK3sKPiArICAgIHVpbnQzMl90IGxlbiA9IDA7Cj4gKyAgICBYRVZEX0lORk8gaW5mbzsK PiArICAgIGludCByZXQ7Cj4gKwo+ICsgICAgaWYoYnNfc2l6ZT49WEVWRF9OQUxfVU5JVF9MRU5H VEhfQllURSkgewo+ICsgICAgICAgIHJldCA9IHhldmRfaW5mbygodm9pZCopYnMsIFhFVkRfTkFM X1VOSVRfTEVOR1RIX0JZVEUsIDEsICZpbmZvKTsKPiArICAgICAgICBpZiAoWEVWRF9GQUlMRUQo cmV0KSkgewo+ICsgICAgICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiQ2Fubm90 IGdldCBiaXRzdHJlYW0gaW5mb3JtYXRpb25cbiIpOwo+ICsgICAgICAgICAgICByZXR1cm4gMDsK PiArICAgICAgICB9Cj4gKyAgICAgICAgbGVuID0gaW5mby5uYWx1X2xlbjsKPiArICAgICAgICBp ZihsZW4gPT0gMCkKPiArICAgICAgICB7Cj4gKyAgICAgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9M T0dfRVJST1IsICJJbnZhbGlkIGJpdHN0cmVhbSBzaXplISAxIFslZF0gWyVkXVxuIiwgbGVuLCBi c19zaXplKTsKPiArICAgICAgICAgICAgcmV0dXJuIDA7Cj4gKyAgICAgICAgfQo+ICsgICAgfQo+ ICsgICAgcmV0dXJuIGxlbjsKPiArfQo+ICsKPiArc3RhdGljIGludCBwYXJzZV9uYWxfdW5pdHMo QVZDb2RlY1BhcnNlckNvbnRleHQgKnMsIGNvbnN0IHVpbnQ4X3QgKmJzLAo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgYnNfc2l6ZSwgQVZDb2RlY0NvbnRleHQgKmN0eCkKPiArewo+ ICsgICAgRVZDUGFyc2VyQ29udGV4dCAqZXYgPSBzLT5wcml2X2RhdGE7Cj4gKyAgICBpbnQgbmFs dV90eXBlLCBuYWx1X3NpemU7Cj4gKyAgICB1bnNpZ25lZCBjaGFyICogYml0cyA9ICh1bnNpZ25l ZCBjaGFyICopYnM7Cj4gKyAgICBpbnQgYml0c19zaXplID0gYnNfc2l6ZTsKPiArCj4gKyAgICBj dHgtPmNvZGVjX2lkID0gQVZfQ09ERUNfSURfRVZDOwo+ICsKPiArICAgIG5hbHVfc2l6ZSA9IHJl YWRfbmFsX3VuaXRfbGVuZ3RoKGJpdHMsIGJpdHNfc2l6ZSk7Cj4gKyAgICBpZihuYWx1X3NpemU9 PTApIHsKPiArICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJJbnZhbGlkIE5BTCB1 bml0IHNpemU6ICglZClcbiIsIG5hbHVfc2l6ZSk7Cj4gKyAgICAgICAgcmV0dXJuIC0xOwo+ICsg ICAgfQo+ICsKPiArICAgIGJpdHMgKz0gWEVWRF9OQUxfVU5JVF9MRU5HVEhfQllURTsKPiArICAg IGJpdHNfc2l6ZSAtPSBYRVZEX05BTF9VTklUX0xFTkdUSF9CWVRFOwo+ICsKPiArICAgIG5hbHVf dHlwZSA9IGdldF9uYWx1X3R5cGUyKGJpdHMsIGJpdHNfc2l6ZSk7Cj4gKwo+ICsgICAgYml0cyAr PSBFVkNfTkFMX0hFQURFUl9TSVpFOwo+ICsgICAgYml0c19zaXplIC09IEVWQ19OQUxfSEVBREVS X1NJWkU7Cj4gKwo+ICsKPiArICAgIGlmIChuYWx1X3R5cGUgPT0gWEVWRF9OVVRfU1BTKSB7Cj4g KyAgICAgICAgRVZDUGFyc2VyU1BTICogc3BzOwo+ICsKPiArICAgICAgICBzcHMgPSBwYXJzZV9z cHMoYml0cywgYml0c19zaXplLCBldik7Cj4gKwo+ICsgICAgICAgIGN0eC0+Y29kZWRfd2lkdGgg ICAgICAgICA9IHNwcy0+cGljX3dpZHRoX2luX2x1bWFfc2FtcGxlczsKPiArICAgICAgICBjdHgt PmNvZGVkX2hlaWdodCAgICAgICAgPSBzcHMtPnBpY19oZWlnaHRfaW5fbHVtYV9zYW1wbGVzOwo+ ICsgICAgICAgIGN0eC0+d2lkdGggICAgICAgICAgICAgICA9IHNwcy0+cGljX3dpZHRoX2luX2x1 bWFfc2FtcGxlczsKPiArICAgICAgICBjdHgtPmhlaWdodCAgICAgICAgICAgICAgPSBzcHMtPnBp Y19oZWlnaHRfaW5fbHVtYV9zYW1wbGVzOwo+ICsKPiArICAgICAgICBpZihzcHMtPnByb2ZpbGVf aWRjID09IDApIGN0eC0+cHJvZmlsZSA9IEZGX1BST0ZJTEVfRVZDX0JBU0VMSU5FOwo+ICsgICAg ICAgIGVsc2UgaWYgKHNwcy0+cHJvZmlsZV9pZGMgPT0gMSkgY3R4LT5wcm9maWxlID0gRkZfUFJP RklMRV9FVkNfTUFJTjsKPiArICAgICAgICBlbHNlewo+ICsgICAgICAgICAgICBhdl9sb2coY3R4 LCBBVl9MT0dfRVJST1IsICJub3Qgc3VwcG9ydGVkIHByb2ZpbGUgKCVkKVxuIiwgc3BzLT5wcm9m aWxlX2lkYyk7Cj4gKyAgICAgICAgICAgIHJldHVybiAtMTsKPiArICAgICAgICB9Cj4gKwo+ICsg ICAgICAgIHN3aXRjaChzcHMtPmNocm9tYV9mb3JtYXRfaWRjKQo+ICsgICAgICAgIHsKPiArICAg ICAgICBjYXNlIDA6IC8qIFlDQkNSNDAwXzEwTEUgKi8KPiArICAgICAgICAgICAgLyogQHRvZG8g c3VwcG9ydCB0aGlzICovCj4gKyAgICAgICAgICAgIGN0eC0+cGl4X2ZtdCA9IEFWX1BJWF9GTVRf R1JBWTEwTEU7Cj4gKyAgICAgICAgICAgIHJldHVybiAtMTsKPiArICAgICAgICAgICAgYnJlYWs7 Cj4gKyAgICAgICAgY2FzZSAxOiAvKiBZQ0JDUjQyMF8xMExFICovCj4gKyAgICAgICAgICAgIGN0 eC0+cGl4X2ZtdCA9IEFWX1BJWF9GTVRfWVVWNDIwUDEwTEU7Cj4gKyAgICAgICAgICAgIGJyZWFr Owo+ICsgICAgICAgIGNhc2UgMjogLyogWUNCQ1I0MjJfMTBMRSAqLwo+ICsgICAgICAgICAgICAv KiBAdG9kbyBzdXBwb3J0IHRoaXMgKi8KPiArICAgICAgICAgICAgY3R4LT5waXhfZm10ID0gQVZf UElYX0ZNVF9ZVVY0MjJQMTBMRTsKPiArICAgICAgICAgICAgcmV0dXJuIC0xOwo+ICsgICAgICAg ICAgICBicmVhazsKPiArICAgICAgICBjYXNlIDM6IC8qIFlDQkNSNDQ0XzEwTEUgKi8KPiArICAg ICAgICAgICAgLyogQHRvZG8gc3VwcG9ydCB0aGlzICovCj4gKyAgICAgICAgICAgIGN0eC0+cGl4 X2ZtdCA9IEFWX1BJWF9GTVRfWVVWNDQ0UDEwTEU7Cj4gKyAgICAgICAgICAgIHJldHVybiAtMTsK PiArICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAgZGVmYXVsdDoKPiArICAgICAgICAgICAg Y3R4LT5waXhfZm10ID0gQVZfUElYX0ZNVF9OT05FOwo+ICsgICAgICAgICAgICBhdl9sb2coTlVM TCwgQVZfTE9HX0VSUk9SLCAidW5rbm93biBjb2xvciBzcGFjZVxuIik7Cj4gKyAgICAgICAgICAg IHJldHVybiAtMTsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIC8vYXZjdHgtPmhhc19iX2Zy YW1lcyA9IDE7IC8vIEB0b2RvIEZJWC1NRQo+ICsKPiArICAgICAgICBldi0+Z290X3NwcyA9IDE7 Cj4gKwo+ICsgICAgfQo+ICsgICAgZWxzZSBpZiAobmFsdV90eXBlID09IFhFVkRfTlVUX1BQUykg ewo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfREVCVUcsICJYRVZEX05VVF9QUFMgXG4i KTsKPiArICAgICAgICBldi0+Z290X3BwcyA9IDE7Cj4gKyAgICB9Cj4gKyAgICBlbHNlIGlmKG5h bHVfdHlwZSA9PSBYRVZEX05VVF9TRUkpIHsKPiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9H X0RFQlVHLCAiWEVWRF9OVVRfU0VJIFxuIik7Cj4gKyAgICAgICAgZXYtPmdvdF9zZWkgPSAxOwoK VGhpcyBpcyBhIHdyaXRlIG9ubHkgZmllbGQuCgo+ICsgICAgfQo+ICsgICAgZWxzZSBpZiAobmFs dV90eXBlID09IFhFVkRfTlVUX0lEUiB8fCBuYWx1X3R5cGUgPT0gWEVWRF9OVVRfTk9OSURSKSB7 Cj4gKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0RFQlVHLCAiWEVWRF9OVVRfTk9OSURSXG4i KTsKPiArICAgICAgICBldi0+Z290X3NsaWNlKys7CgpUaGlzIHRvby4gTWF5YmUgeW91IG1lYW50 IHRvIHNldCBjdHgtPnBpY3RfdHlwZSBiYXNlZCBvbiBuYWx1X3R5cGU/Cgo+ICsgICAgfSBlbHNl IHsKPiArICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJJbnZhbGlkIE5BTCB1bml0 IHR5cGU6ICVkXG4iLCBuYWx1X3R5cGUpOwo+ICsgICAgICAgIHJldHVybiAtMTsKPiArICAgIH0K PiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICsKPiArLyoqCj4gKyAqIEZpbmQgdGhlIGVuZCBv ZiB0aGUgY3VycmVudCBmcmFtZSBpbiB0aGUgYml0c3RyZWFtLgo+ICsgKiBAcmV0dXJuIHRoZSBw b3NpdGlvbiBvZiB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgbmV4dCBmcmFtZSwgb3IgRU5EX05PVF9G T1VORAo+ICsgKi8KPiArc3RhdGljIGludCBldmNfZmluZF9mcmFtZV9lbmQoQVZDb2RlY1BhcnNl ckNvbnRleHQgKnMsIGNvbnN0IHVpbnQ4X3QgKmJ1ZiwKPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCBidWZfc2l6ZSkKPiArewo+ICsgICAgRVZDUGFyc2VyQ29udGV4dCAqZXYg PSBzLT5wcml2X2RhdGE7Cj4gKwo+ICsgICAgaWYoIWV2LT50b19yZWFkKQo+ICsgICAgewo+ICsg ICAgICAgIGludCBuYWxfdW5pdF9zaXplID0gMDsKPiArICAgICAgICBpbnQgbmV4dCA9IEVORF9O T1RfRk9VTkQ7Cj4gKwo+ICsgICAgICAgIC8vIFRoaXMgaXMgdGhlIGNhc2Ugd2hlbiBidWZmZXIg c2l6ZSBpcyBub3QgZW5vdWdoIGZvciBidWZmZXIgdG8gc3RvcmUgTkFMIHVuaXQgbGVuZ3RoCj4g KyAgICAgICAgaWYoYnVmX3NpemUgPCBYRVZEX05BTF9VTklUX0xFTkdUSF9CWVRFKSB7Cj4gKyAg ICAgICAgICAgIGV2LT50b19yZWFkID0gWEVWRF9OQUxfVU5JVF9MRU5HVEhfQllURTsKPiArICAg ICAgICAgICAgZXYtPm5hbF9sZW5ndGhfc2l6ZSA9IGJ1Zl9zaXplOwo+ICsgICAgICAgICAgICBl di0+aW5jb21wbGV0ZV9uYWx1X3ByZWZpeF9yZWFkICA9IDE7Cj4gKwo+ICsgICAgICAgICAgICBy ZXR1cm4gRU5EX05PVF9GT1VORDsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIG5hbF91bml0 X3NpemUgPSByZWFkX25hbF91bml0X2xlbmd0aChidWYsIGJ1Zl9zaXplKTsKPiArICAgICAgICBh dl9sb2coTlVMTCwgQVZfTE9HX0RFQlVHLCAibmFsX3VuaXRfc2l6ZTogJWQgfCBidWZfc2l6ZTog JWQgXG4iLCBuYWxfdW5pdF9zaXplLCBidWZfc2l6ZSk7Cj4gKyAgICAgICAgZXYtPm5hbF9sZW5n dGhfc2l6ZSA9IFhFVkRfTkFMX1VOSVRfTEVOR1RIX0JZVEU7Cj4gKwo+ICsgICAgICAgIG5leHQg PSBuYWxfdW5pdF9zaXplICsgWEVWRF9OQUxfVU5JVF9MRU5HVEhfQllURTsKPiArICAgICAgICBl di0+dG9fcmVhZCA9IG5leHQ7Cj4gKyAgICAgICAgaWYobmV4dDxidWZfc2l6ZSkKPiArICAgICAg ICAgICAgcmV0dXJuIG5leHQ7Cj4gKyAgICAgICAgZWxzZQo+ICsgICAgICAgICAgICByZXR1cm4g RU5EX05PVF9GT1VORDsKPiArICAgIH0gZWxzZSBpZihldi0+dG9fcmVhZCA+IGJ1Zl9zaXplKSB7 Cj4gKyAgICAgICAgLy8vIEB0b2RvIENvbnNpZGVyIGhhbmRsaW5nIHRoZSBmb2xsb3dpbmcgY2Fz ZQo+ICsgICAgICAgIC8vIGlmKGV2LT5pbmNvbXBsZXRlX25hbHVfcHJlZml4X3JlYWQgID09IDEp IHsKPiArICAgICAgICAvLyB9Cj4gKyAgICAgICAgcmV0dXJuIEVORF9OT1RfRk9VTkQ7Cj4gKyAg ICB9IGVsc2UgIHsKPiArICAgICAgICBpZihldi0+aW5jb21wbGV0ZV9uYWx1X3ByZWZpeF9yZWFk ICA9PSAxKSB7Cj4gKyAgICAgICAgICAgIEVWQ1BhcnNlckNvbnRleHQgKmV2ID0gcy0+cHJpdl9k YXRhOwo+ICsgICAgICAgICAgICBQYXJzZUNvbnRleHQgKnBjID0gJmV2LT5wYzsKPiArICAgICAg ICAgICAgdWludDhfdCBuYWx1X2xlbltYRVZEX05BTF9VTklUX0xFTkdUSF9CWVRFXSA9IHswfTsK PiArICAgICAgICAgICAgaW50IG5hbF91bml0X3NpemUgPSAwOwo+ICsKPiArICAgICAgICAgICAg Ly8gMS4gcGMtPmJ1ZmZlciBjb250YWlucyBwcmV2aW91c2x5IHJlYWQgYnl0ZXMgb2YgTkFMVSBw cmVmaXgKPiArICAgICAgICAgICAgLy8gMi4gYnVmIGNvbnRhaW5zIHRoZSByZXN0IG9mIE5BTCB1 bml0IHByZWZpeCBieXRlcwo+ICsgICAgICAgICAgICAvLwo+ICsgICAgICAgICAgICAvLyB+fn5+ fn5+Cj4gKyAgICAgICAgICAgIC8vIEVYQU1QTEUKPiArICAgICAgICAgICAgLy8gfn5+fn5+fgo+ ICsgICAgICAgICAgICAvLwo+ICsgICAgICAgICAgICAvLyBJbiB0aGUgZm9sbG93aW5nIGV4YW1w bGUgd2UgYXNzdW1lZCB0aGF0IHRoZSBudW1iZXIgb2YgYWxyZWFkeSByZWFkIE5BTCBVbml0IHBy ZWZpeCBieXRlcyBpcyBlcXVhbCAxCj4gKyAgICAgICAgICAgIC8vCj4gKyAgICAgICAgICAgIC8v IC0tLS0tLS0tLS0KPiArICAgICAgICAgICAgLy8gcGMtPmJ1ZmZlciAtPiBjb25hdGlucyBhbHJl YWR5IHJlYWQgYnl0ZXMKPiArICAgICAgICAgICAgLy8gLS0tLS0tLS0tLQo+ICsgICAgICAgICAg ICAvLyAgICAgICAgICAgICAgX18gcGMtPmluZGV4ID09IDEKPiArICAgICAgICAgICAgLy8gICAg ICAgICAgICAgfAo+ICsgICAgICAgICAgICAvLyAgICAgICAgICAgICBWCj4gKyAgICAgICAgICAg IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KPiArICAgICAgICAgICAgLy8gfCAgIDAgICB8ICAgMSAgIHwgICAyICAgfCAgIDMgICB8ICAg NCAgIHwgLi4uIHwgICBOICAgfAo+ICsgICAgICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gKyAgICAgICAgICAgIC8vIHwg IDB4MDAgfCAgMHhYWCB8ICAweFhYIHwgIDB4WFggfCAgMHhYWCB8IC4uLiB8ICAweFhYIHwKPiAr ICAgICAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQo+ICsgICAgICAgICAgICAvLwo+ICsgICAgICAgICAgICAvLyAtLS0tLS0t LS0tCj4gKyAgICAgICAgICAgIC8vIGJ1ZiAtPiBjb250YWlucyBuZXdseSByZWFkIGJ5dGVzCj4g KyAgICAgICAgICAgIC8vIC0tLS0tLS0tLS0KPiArICAgICAgICAgICAgLy8gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ICsgICAgICAgICAg ICAvLyB8ICAgMCAgIHwgICAxICAgfCAgIDIgICB8ICAgMyAgIHwgICA0ICAgfCAuLi4gfCAgIE4g ICB8Cj4gKyAgICAgICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KPiArICAgICAgICAgICAgLy8gfCAgMHgwMCB8ICAweDAwIHwg IDB4M0MgfCAgMHhYWCB8ICAweFhYIHwgLi4uIHwgIDB4WFggfAo+ICsgICAgICAgICAgICAvLyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4g KyAgICAgICAgICAgIC8vCj4gKyAgICAgICAgICAgIGZvcihpbnQgaT0wO2k8WEVWRF9OQUxfVU5J VF9MRU5HVEhfQllURTtpKyspIHsKPiArICAgICAgICAgICAgICAgIGlmKGk8cGMtPmluZGV4KSB7 Cj4gKyAgICAgICAgICAgICAgICAgICAgbmFsdV9sZW5baV0gPSBwYy0+YnVmZmVyW2ldOwo+ICsg ICAgICAgICAgICAgICAgfSBlbHNlIHsKPiArICAgICAgICAgICAgICAgICAgICBuYWx1X2xlbltp XSA9IGJ1ZltpLXBjLT5pbmRleF07Cj4gKyAgICAgICAgICAgICAgICB9Cj4gKyAgICAgICAgICAg IH0KPiArCj4gKyAgICAgICAgICAgIC8vIC0tLS0tLS0tLS0KPiArICAgICAgICAgICAgLy8gbmFs dV9sZW4KPiArICAgICAgICAgICAgLy8gLS0tLS0tLS0tLQo+ICsgICAgICAgICAgICAvLyAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiArICAgICAgICAgICAgLy8gfCAgIDAgICB8 ICAgMSAgIHwgICAyICAgfCAgIDMgICB8Cj4gKyAgICAgICAgICAgIC8vIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQo+ICsgICAgICAgICAgICAvLyB8ICAweDAwIHwgIDB4MDAgfCAg MHgwMCB8ICAweDNDIHwKPiArICAgICAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCj4gKyAgICAgICAgICAgIC8vIHwgTkFMVSBMRU5HVEggICAgICAgICAgICAgICAg ICAgfAo+ICsgICAgICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K PiArICAgICAgICAgICAgLy8gTkFMIFVuaXQgbGVuZ2h0ID0gIDYwICgweDAwMDAwMDNDKQo+ICsK PiArICAgICAgICAgICAgbmFsX3VuaXRfc2l6ZSA9IHJlYWRfbmFsX3VuaXRfbGVuZ3RoKG5hbHVf bGVuLCBYRVZEX05BTF9VTklUX0xFTkdUSF9CWVRFKTsKPiArICAgICAgICAgICAgYXZfbG9nKE5V TEwsIEFWX0xPR19ERUJVRywgIm5hbF91bml0X3NpemU6ICVkIHwgYnVmX3NpemU6ICVkIFxuIiwg bmFsX3VuaXRfc2l6ZSwgYnVmX3NpemUpOwo+ICsKPiArICAgICAgICAgICAgZXYtPnRvX3JlYWQg PSBuYWxfdW5pdF9zaXplICsgWEVWRF9OQUxfVU5JVF9MRU5HVEhfQllURSAtIHBjLT5pbmRleDsK PiArCj4gKyAgICAgICAgICAgIGV2LT5pbmNvbXBsZXRlX25hbHVfcHJlZml4X3JlYWQgPSAwOwo+ ICsKPiArICAgICAgICAgICAgaWYoZXYtPnRvX3JlYWQgPiBidWZfc2l6ZSkgewo+ICsgICAgICAg ICAgICAgICAgcmV0dXJuIEVORF9OT1RfRk9VTkQ7Cj4gKyAgICAgICAgICAgIH0gZWxzZSAgewo+ ICsgICAgICAgICAgICAgICAgcmV0dXJuIGV2LT50b19yZWFkOwo+ICsgICAgICAgICAgICB9Cj4g KyAgICAgICAgfQo+ICsgICAgICAgIHJldHVybiBldi0+dG9fcmVhZDsKPiArICAgIH0KPiArICAg IHJldHVybiBFTkRfTk9UX0ZPVU5EOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGV2Y19wYXJzZXJf aW5pdChBVkNvZGVjUGFyc2VyQ29udGV4dCAqcykgewo+ICsKPiArICAgIEVWQ1BhcnNlckNvbnRl eHQgKmV2ID0gcy0+cHJpdl9kYXRhOwo+ICsKPiArICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfREVC VUcsICJlWHRyYS1mYXN0IEVzc2VudGlhbCBWaWRlbyBQYXJzZXJcbiIpOwoKVW5uZWNlc3Nhcnkg bG9nIG1lc3NhZ2UuCgo+ICsKPiArICAgIGV2LT5nb3Rfc3BzID0gMDsKPiArICAgIGV2LT5nb3Rf cHBzID0gMDsKPiArICAgIGV2LT5nb3Rfc2VpID0gMDsKPiArICAgIGV2LT5nb3Rfc2xpY2UgPSAw Owo+ICsgICAgZXYtPm5hbF9sZW5ndGhfc2l6ZSA9IFhFVkRfTkFMX1VOSVRfTEVOR1RIX0JZVEU7 Cj4gKyAgICBldi0+aW5jb21wbGV0ZV9uYWx1X3ByZWZpeF9yZWFkID0gMDsKPiArCj4gKyAgICBy ZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBldmNfcGFyc2UoQVZDb2RlY1BhcnNlckNv bnRleHQgKnMsIEFWQ29kZWNDb250ZXh0ICpjdHgsCj4gKyAgICAgICAgICAgICAgICAgICAgIGNv bnN0IHVpbnQ4X3QgKipwb3V0YnVmLCBpbnQgKnBvdXRidWZfc2l6ZSwKPiArICAgICAgICAgICAg ICAgICAgICAgY29uc3QgdWludDhfdCAqYnVmLCBpbnQgYnVmX3NpemUpCj4gK3sKPiArICAgIGlu dCBuZXh0Owo+ICsgICAgRVZDUGFyc2VyQ29udGV4dCAqZXYgPSBzLT5wcml2X2RhdGE7Cj4gKyAg ICBQYXJzZUNvbnRleHQgKnBjID0gJmV2LT5wYzsKPiArICAgIGludCBpc19kdW1teV9idWYgPSAh YnVmX3NpemU7Cj4gKyAgICBjb25zdCB1aW50OF90ICpkdW1teV9idWYgPSBidWY7Cj4gKwo+ICsg ICAgaWYgKGN0eC0+ZXh0cmFkYXRhICYmICFldi0+cGFyc2VkX2V4dHJhZGF0YSkgewo+ICsgICAg ICAgIC8vIEB0b2RvIGNvbnNpZGVyIGhhbmRsaW5nIGV4dHJhZGF0YQo+ICsgICAgICAgIC8vCj4g KyAgICAgICAgLy8gZmZfZXZjX2RlY29kZV9leHRyYWRhdGEoYXZjdHgtPmV4dHJhZGF0YSwgYXZj dHgtPmV4dHJhZGF0YV9zaXplLCAmY3R4LT5wcywgJmN0eC0+c2VpLAo+ICsgICAgICAgIC8vICAg ICAgICAgICAgICAgICAgICAgICAgICZjdHgtPmlzX2F2YywgJmN0eC0+bmFsX2xlbmd0aF9zaXpl LCBhdmN0eC0+ZXJyX3JlY29nbml0aW9uLAo+ICsgICAgICAgIC8vICAgICAgICAgICAgICAgICAg ICAgICAgIDEsIGF2Y3R4KTsKPiArICAgICAgICBldi0+cGFyc2VkX2V4dHJhZGF0YSA9IDE7Cj4g KyAgICB9Cj4gKwo+ICsgICAgaWYgKHMtPmZsYWdzICYgUEFSU0VSX0ZMQUdfQ09NUExFVEVfRlJB TUVTKSB7Cj4gKyAgICAgICAgbmV4dCA9IGJ1Zl9zaXplOwo+ICsgICAgfSBlbHNlIHsKPiArICAg ICAgICBuZXh0ID0gZXZjX2ZpbmRfZnJhbWVfZW5kKHMsIGJ1ZiwgYnVmX3NpemUpOwo+ICsgICAg ICAgIGlmIChmZl9jb21iaW5lX2ZyYW1lKHBjLCBuZXh0LCAmYnVmLCAmYnVmX3NpemUpIDwgMCkg ewo+ICsgICAgICAgICAgICAqcG91dGJ1ZiAgICAgID0gTlVMTDsKPiArICAgICAgICAgICAgKnBv dXRidWZfc2l6ZSA9IDA7Cj4gKyAgICAgICAgICAgIGV2LT50b19yZWFkIC09IGJ1Zl9zaXplOwo+ ICsgICAgICAgICAgICByZXR1cm4gYnVmX3NpemU7Cj4gKyAgICAgICAgfQo+ICsgICAgfQo+ICsj aWYgMQo+ICsgICAgaXNfZHVtbXlfYnVmICY9IChkdW1teV9idWYgPT0gYnVmKTsKPiArCj4gKyAg ICBpZiAoIWlzX2R1bW15X2J1Zikgewo+ICsgICAgICAgIHBhcnNlX25hbF91bml0cyhzLCBidWYs IGJ1Zl9zaXplLCBjdHgpOwo+ICsgICAgfQo+ICsjZWxzZQo+ICsgICAgaWYobmV4dCAhPSBFTkRf Tk9UX0ZPVU5EKSB7Cj4gKyAgICAgICAgcGFyc2VfbmFsX3VuaXRzKHMsIGJ1ZiwgYnVmX3NpemUs IGF2Y3R4KTsKPiArICAgIH0KPiArI2VuZGlmCj4gKwo+ICsgICAgKnBvdXRidWYgICAgICA9IGJ1 ZjsKPiArICAgICpwb3V0YnVmX3NpemUgPSBidWZfc2l6ZTsKPiArICAgIGV2LT50b19yZWFkIC09 IG5leHQ7Cj4gKyAgICByZXR1cm4gbmV4dDsKPiArfQo+ICsKPiArLy8gU3BsaXQgYWZ0ZXIgdGhl IHBhcmFtZXRlciBzZXRzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHN0cmVhbSBpZiB0aGV5IGV4 aXN0Lgo+ICtzdGF0aWMgaW50IGV2Y19zcGxpdChBVkNvZGVjQ29udGV4dCAqY3R4LCBjb25zdCB1 aW50OF90ICpicywgaW50IGJzX3NpemUpCgpSZW1vdmUgdGhpcywgbm90IG9ubHkgYmVjYXVzZSBp dCdzIGEgbm8tb3AgdGhlIHdheSB5b3Ugd3JvdGUgaXQsIGJ1dCAKYWxzbyBiZWNhdXNlIEFWQ29k ZWNQYXJzZXIuc3BsaXQoKSBpcyB1bnVzZWQuCgo+ICt7Cj4gKyAgICByZXR1cm4gMDsKPiArfQo+ ICsKPiArc3RhdGljIGF2X2NvbGQgdm9pZCBldmNfcGFyc2VyX2Nsb3NlKEFWQ29kZWNQYXJzZXJD b250ZXh0ICpzKQo+ICt7Cj4gKyAgICAvKiBFVkNQYXJzZXJDb250ZXh0ICpjdHggPSBzLT5wcml2 X2RhdGE7ICovCj4gK30KPiArCj4gK0FWQ29kZWNQYXJzZXIgZmZfZXZjX3BhcnNlciA9IHsKPiAr ICAgIC5jb2RlY19pZHMgICAgICA9IHsgQVZfQ09ERUNfSURfRVZDIH0sCj4gKyAgICAucHJpdl9k YXRhX3NpemUgPSBzaXplb2YoRVZDUGFyc2VyQ29udGV4dCksCj4gKyAgICAucGFyc2VyX2luaXQg ICAgPSBldmNfcGFyc2VyX2luaXQsCj4gKyAgICAucGFyc2VyX3BhcnNlICAgPSBldmNfcGFyc2Us Cj4gKyAgICAucGFyc2VyX2Nsb3NlICAgPSBldmNfcGFyc2VyX2Nsb3NlLAo+ICsgICAgLnNwbGl0 ICAgICAgICAgID0gZXZjX3NwbGl0LAo+ICt9Owo+IGRpZmYgLS1naXQgYS9saWJhdmNvZGVjL2xp YnhldmQuYyBiL2xpYmF2Y29kZWMvbGlieGV2ZC5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBp bmRleCAwMDAwMDAwMDAwLi5mZjllZTVjMTZmCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2xpYmF2 Y29kZWMvbGlieGV2ZC5jCj4gQEAgLTAsMCArMSw3MjQgQEAKPiArLyoKPiArICogbGlieGV2ZCBk ZWNvZGVyCj4gKyAqIEVWQyAoTVBFRy01IEVzc2VudGlhbCBWaWRlbyBDb2RpbmcpIGRlY29kaW5n IHVzaW5nIFhFVkQgTVBFRy01IEVWQyBkZWNvZGVyIGxpYnJhcnkKPiArICoKPiArICogQ29weXJp Z2h0IChDKSAyMDIxIERhd2lkIEtvemluc2tpIDxkLmtvemluc2tpQHNhbXN1bmcuY29tPgo+ICsg Kgo+ICsgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCj4gKyAqCj4gKyAqIEZGbXBlZyBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKPiArICogbW9k aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+ ICsgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u OyBlaXRoZXIKPiArICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4gKyAqCj4gKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRl ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ICsgKiBidXQgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ICsgKiBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlIEdOVQo+ICsgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgo+ICsgKgo+ICsgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCj4gKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7 IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKPiArICogRm91bmRhdGlvbiwgSW5j LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAx IFVTQQo+ICsgKi8KPiArCj4gKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQo+ICsjZGVmaW5lIFhFVkRf QVBJX0lNUE9SVFMgMQo+ICsjZW5kaWYKPiArCj4gKyNpbmNsdWRlIDx4ZXZkLmg+Cj4gKwo+ICsj aW5jbHVkZSA8ZmxvYXQuaD4KPiArI2luY2x1ZGUgPHN0ZGxpYi5oPgo+ICsKPiArI2luY2x1ZGUg ImxpYmF2dXRpbC9pbnRlcm5hbC5oIgo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL2NvbW1vbi5oIgo+ ICsjaW5jbHVkZSAibGliYXZ1dGlsL29wdC5oIgo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL3BpeGRl c2MuaCIKPiArI2luY2x1ZGUgImxpYmF2dXRpbC9waXhmbXQuaCIKPiArI2luY2x1ZGUgImxpYmF2 dXRpbC9pbWd1dGlscy5oIgo+ICsKPiArLy8gI2RlZmluZSBVU0VfRVhQX0dPTE9NQl9TVFVGRgo+ ICsjaWZkZWYgVVNFX0VYUF9HT0xPTUJfU1RVRkYKCklzIHRoaXMgYSByZW1uYW50IG9mIGRlYnVn aW5nIGNvZGU/IEp1c3QgcmVtb3ZlIGl0IGFuZCBlaXRoZXIgdXNlIGdvbG9tYiAKb3Igbm90LgoK PiArI2luY2x1ZGUgImdvbG9tYi5oIgo+ICsjZW5kaWYKPiArCj4gKyNpbmNsdWRlICJhdmNvZGVj LmgiCj4gKyNpbmNsdWRlICJpbnRlcm5hbC5oIgo+ICsjaW5jbHVkZSAicGFja2V0X2ludGVybmFs LmgiCj4gKwo+ICsjZGVmaW5lIFVOVVNFRCh4KSAodm9pZCkoeCkKPiArCj4gKyNkZWZpbmUgWEVW RF9QQVJBTV9CQURfTkFNRSAtMQo+ICsjZGVmaW5lIFhFVkRfUEFSQU1fQkFEX1ZBTFVFIC0yCj4g Kwo+ICsvKioKPiArICogVGhlIHN0cnVjdHVyZSBzdG9yZXMgYWxsIHRoZSBzdGF0ZSBhc3NvY2lh dGVkIHdpdGggdGhlIGluc3RhbmNlIG9mIFhldmUgTVBFRy01IEVWQyBkZWNvZGVyCj4gKyAqIFRo ZSBmaXJzdCBmaWVsZCBpcyBhIHBvaW50ZXIgdG8gYW4gQVZDbGFzcyBzdHJ1Y3QgKEBzZWUgaHR0 cHM6Ly9mZm1wZWcub3JnL2RveHlnZW4vdHJ1bmsvc3RydWN0QVZDbGFzcy5odG1sI2RldGFpbHMp Lgo+ICsgKi8KPiArdHlwZWRlZiBzdHJ1Y3QgWGV2ZENvbnRleHQgewo+ICsgICAgY29uc3QgQVZD bGFzcyAqY2xhc3M7Cj4gKwo+ICsgICAgWEVWRCBpZDsgICAgICAgIC8vIFhFVkQgaW5zdGFuY2Ug aWRlbnRpZmllciBAc2VlIHhldmQuaAo+ICsgICAgWEVWRF9DRFNDIGNkc2M7IC8vIGRlY29kaW5n IHBhcmFtZXRlcnMgQHNlZSB4ZXZkLmgKPiArCj4gKyAgICBpbnQgZGVjb2RfZnJhbWVzOyAvLyBu dW1iZXIgb2YgZGVjb2RlZCBmcmFtZXMKPiArICAgIGludCBwYWNrZXRfY291bnQ7IC8vIG51bWJl ciBvZiBwYWNrZXRzIGNyZWF0ZWQgYnkgZGVjb2Rlcgo+ICsKPiArICAgIC8vIGNvbmZpZ3VyYXRp b24gcGFyYW1ldGVycwo+ICsgICAgQVZEaWN0aW9uYXJ5ICp4ZXZkX29wdHM7IC8vIHhldmQgY29u ZmlndXJhdGlvbiByZWFkIGZyb20gYSA6LXNlcGFyYXRlZCBsaXN0IG9mIGtleT12YWx1ZSBwYXJh bWV0ZXJzCj4gKwo+ICt9IFhldmRDb250ZXh0Owo+ICsKPiArc3RhdGljIGludCAgb3BfdGhyZWFk cyA9IDE7IC8vIERlZmF1bHQgdmFsdWUKPiArCj4gKyNpZmRlZiBVU0VfRVhQX0dPTE9NQl9TVFVG Rgo+ICtzdGF0aWMgaW50IGdldF9uYWx1X3R5cGUoY29uc3QgdWludDhfdCAqYnMsIGludCBic19z aXplKQo+ICt7Cj4gKyAgICBHZXRCaXRDb250ZXh0IGdiOwo+ICsgICAgaW50IGZ6YiwgbnV0Owo+ ICsgICAgaW5pdF9nZXRfYml0cygmZ2IsIGJzLCBic19zaXplICogOCk7Cj4gKyAgICBmemIgPSBn ZXRfYml0czEoJmdiKTsKPiArICAgIGlmKGZ6YiAhPSAwKSB7Cj4gKyAgICAgICAgYXZfbG9nKE5V TEwsIEFWX0xPR19ERUJVRywgImZvcmJpZGRlbl96ZXJvX2JpdCBpcyBub3QgY2xlYXJcbiIpOwo+ ICsgICAgfQo+ICsgICAgbnV0ID0gZ2V0X2JpdHMoJmdiLCA2KTsgLyogbmFsX3VuaXRfdHlwZV9w bHVzMSAqLwo+ICsgICAgcmV0dXJuIG51dCAtIDE7Cj4gK30KPiArI2VuZGlmCj4gKwo+ICsjaWZk ZWYgUFJJTlRfTkFMVV9JTkZPCj4gK3N0YXRpYyB2b2lkIHByaW50X25hbHVfaW5mbyhYRVZEX1NU QVQgKiBzdGF0KQo+ICt7Cj4gKyAgICBpZihzdGF0LT5uYWx1X3R5cGUgPCBYRVZEX05VVF9TUFMp IHsKPiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0RFQlVHLCAiWEVWRF9OVVRfU1BTIFxu Iik7Cj4gKwo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfREVCVUcsICIlYy1zbGljZVxu Iiwgc3RhdC0+c3R5cGUgPT0gWEVWRF9TVF9JID8gJ0knIDogc3RhdC0+c3R5cGUgPT0gWEVWRF9T VF9QID8gJ1AnIDogJ0InKTsKPiArCj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19ERUJV RywgIiAlZCBieXRlc1xuIiwgc3RhdC0+cmVhZCk7Cj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFW X0xPR19ERUJVRywgIiwgcG9jPSVkLCB0aWQ9JWQsICIsIChpbnQpc3RhdC0+cG9jLCAoaW50KXN0 YXQtPnRpZCk7Cj4gKwo+ICsgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKSB7Cj4g KyAgICAgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfREVCVUcsICJbTCVkICIsIGkpOwo+ICsg ICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHN0YXQtPnJlZnBpY19udW1baV07IGorKykg YXZfbG9nKE5VTEwsIEFWX0xPR19ERUJVRywiJWQgIiwgc3RhdC0+cmVmcGljW2ldW2pdKTsKPiAr ICAgICAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19ERUJVRywiXSBcbiIpOwo+ICsgICAgICAg IH0KPiArICAgIH0gZWxzZSBpZihzdGF0LT5uYWx1X3R5cGUgPT0gWEVWRF9OVVRfU1BTKSB7Cj4g KyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19ERUJVRywgIlhFVkRfTlVUX1NQUyBcbiIpOwo+ ICsgICAgfSBlbHNlIGlmIChzdGF0LT5uYWx1X3R5cGUgPT0gWEVWRF9OVVRfUFBTKSB7Cj4gKyAg ICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19ERUJVRywgIlhFVkRfTlVUX1BQUyBcbiIpOwo+ICsg ICAgfSBlbHNlIGlmIChzdGF0LT5uYWx1X3R5cGUgPT0gWEVWRF9OVVRfU0VJKSB7Cj4gKyAgICAg ICAgYXZfbG9nKE5VTEwsIEFWX0xPR19ERUJVRywgIlhFVkRfTlVUX1NFSSBcbiIpOwo+ICsgICAg fSBlbHNlIHsKPiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0RFQlVHLCAiVW5rbm93biBi aXRzdHJlYW0gISEhISBcbiIpOwo+ICsgICAgfQo+ICt9Cj4gKyNlbmRpZgo+ICsKPiArLy8gQHRv ZG8gY29uc2lkZXIgbW92aW5nIGZvbGxvd2luZyBmdW5jdGlvbiB0byBzZXBhcmF0ZSBmaWxlIGNv bnRhaW5pbmcgaGVscGVyIGZ1bmN0aW9ucyBmb3IgRVZDIGRlY29kZXIKPiArI2lmZGVmIFBSSU5U X0ZSQU1FX0lORk8KCkFnYWluLCBubyBjaGVja3MgZm9yIGRlZmluZXMgdGhhdCBhcmUgbm90IGRl ZmluZWQgYW55d2hlcmUuCgo+ICtzdGF0aWMgdm9pZCBwcmludF9mcmFtZV9pbmZvKGNvbnN0IEFW RnJhbWUqIGYpCj4gK3sKPiArICAgIGludCBsZXZlbCA9IEFWX0xPR19ERUJVRzsKPiArICAgIGF2 X2xvZyhOVUxMLCBsZXZlbCwgImZyYW1lLT53aWR0aDogJWRcbiIsIGYtPndpZHRoKTsKPiArICAg IGF2X2xvZyhOVUxMLCBsZXZlbCwgImZyYW1lLT5oZWlnaHQ6ICVkXG4iLCBmLT5oZWlnaHQpOwoK RG9uJ3QgcHJpbnQgdG8gTlVMTC4KCj4gKwo+ICsgICAgYXZfbG9nKE5VTEwsIGxldmVsLCAiZnJh bWUtPmxpbmVzaXplWzBdOiAlZFxuIiwgZi0+bGluZXNpemVbMF0pOwo+ICsgICAgYXZfbG9nKE5V TEwsIGxldmVsLCAiZnJhbWUtPmxpbmVzaXplWzFdOiAlZFxuIiwgZi0+bGluZXNpemVbMV0pOwo+ ICsgICAgYXZfbG9nKE5VTEwsIGxldmVsLCAiZnJhbWUtPmxpbmVzaXplWzJdOiAlZFxuIiwgZi0+ bGluZXNpemVbMl0pOwo+ICsgICAgYXZfbG9nKE5VTEwsIGxldmVsLCAiZnJhbWUtPmJ1ZlswXTog JXBcbiIsIGYtPmJ1ZlswXSk7Cj4gKyAgICBhdl9sb2coTlVMTCwgbGV2ZWwsICJmcmFtZS0+YnVm WzFdOiAlcFxuIiwgZi0+YnVmWzFdKTsKPiArICAgIGF2X2xvZyhOVUxMLCBsZXZlbCwgImZyYW1l LT5idWZbMl06ICVwXG4iLCBmLT5idWZbMl0pOwo+ICsgICAgYXZfbG9nKE5VTEwsIGxldmVsLCAi ZnJhbWUtPmRhdGFbMF06ICVwXG4iLCBmLT5kYXRhWzBdKTsKPiArICAgIGF2X2xvZyhOVUxMLCBs ZXZlbCwgImZyYW1lLT5kYXRhWzFdOiAlcFxuIiwgZi0+ZGF0YVsxXSk7Cj4gKyAgICBhdl9sb2co TlVMTCwgbGV2ZWwsICJmcmFtZS0+ZGF0YVsyXTogJXBcbiIsIGYtPmRhdGFbMl0pOwo+ICt9Cj4g KyNlbmRpZgo+ICsKPiArLy8gQHRvZG8gY29uc2lkZXIgbW92aW5nIGZvbGxvd2luZyBmdW5jdGlv biB0byBzZXBhcmF0ZSBmaWxlIGNvbnRhaW5pbmcgaGVscGVyIGZ1bmN0aW9ucyBmb3IgRVZDIGRl Y29kZXIKPiArI2lmZGVmIFBSSU5UX1hFVkRfSU1HQl9JTkZPCgpEaXR0by4KCj4gK3N0YXRpYyB2 b2lkIHByaW50X3hldmRfaW1nYl9pbmZvKGNvbnN0IFhFVkRfSU1HQiogaW1nYikKPiArewo+ICsg ICAgYXZfbG9nKE5VTEwsIEFWX0xPR19ERUJVRywgImltZ2ItPm5wOiAlZFxuIiwgaW1nYi0+bnAp Owo+ICsgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19ERUJVRywgImltZ2ItPmJzaXplWzBdOiAlZFxu IiwgaW1nYi0+YnNpemVbMF0pOwo+ICsgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19ERUJVRywgImlt Z2ItPmJzaXplWzFdOiAlZFxuIiwgaW1nYi0+YnNpemVbMV0pOwo+ICsgICAgYXZfbG9nKE5VTEws IEFWX0xPR19ERUJVRywgImltZ2ItPmJzaXplWzJdOiAlZFxuIiwgaW1nYi0+YnNpemVbMl0pOwo+ ICt9Cj4gKyNlbmRpZgo+ICsKPiArLy8gQHRvZG8gY29uc2lkZXIgbW92aW5nIGZvbGxvd2luZyBm dW5jdGlvbiB0byBzZXBhcmF0ZSBmaWxlIGNvbnRhaW5pbmcgaGVscGVyIGZ1bmN0aW9ucyBmb3Ig RVZDIGRlY29kZXIKPiArI2lmZGVmIFBSSU5UX0FWQ1RYCgpEaXR0bywgYW5kIGV2ZXJ5IG90aGVy IGNhc2UgYmVsb3cuCgo+ICtzdGF0aWMgdm9pZCBwcmludF9hdmN0eChjb25zdCBBVkNvZGVjQ29u dGV4dCAqYXZjdHgpCj4gK3sKPiArICAgIGlmKCBBVk1FRElBX1RZUEVfVU5LTk9XTiA9PSBhdmN0 eC0+Y29kZWNfdHlwZSkgewo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfREVCVUcsICJh dmN0eC0+Y29kZWNfdHlwZTogQVZNRURJQV9UWVBFX1VOS05PV05cbiIpOwo+ICsgICAgfSBlbHNl IGlmKEFWTUVESUFfVFlQRV9WSURFTyAgPT0gYXZjdHgtPmNvZGVjX3R5cGUpCj4gKyAgICAgICAg YXZfbG9nKE5VTEwsIEFWX0xPR19ERUJVRywgImF2Y3R4LT5jb2RlY190eXBlOiBBVk1FRElBX1RZ UEVfVklERU8gXG4iKTsKPiArICAgIGVsc2Ugewo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9M T0dfREVCVUcsICJhdmN0eC0+Y29kZWNfdHlwZTogQVZNRURJQV9UWVBFX1VOS05PV05cbiIpOwo+ ICsgICAgfQo+ICsKPiArICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfREVCVUcsICJhdmN0eC0+Y29k ZWNfaWQ6ICVzXG4iLGF2Y29kZWNfZ2V0X25hbWUoYXZjdHgtPmNvZGVjX2lkKSk7Cj4gKyAgICBh dl9sb2coTlVMTCwgQVZfTE9HX0RFQlVHLCAiYXZjdHgtPndpZHRoOiAlZFxuIiwgYXZjdHgtPndp ZHRoKTsKPiArICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfREVCVUcsICJhdmN0eC0+aGVpZ2h0OiAl ZFxuIiwgYXZjdHgtPmhlaWdodCk7Cj4gKyAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0RFQlVHLCAi YXZjdHgtPnBpeF9mbXQ6ICVkXG4iLCBhdmN0eC0+cGl4X2ZtdCk7Cj4gK30KPiArI2VuZGlmCj4g Kwo+ICsvKioKPiArICogUmVhZCBvcHRpb25zCj4gKyAqCj4gKyAqIEBwYXJhbSBhdmN0eCBjb2Rl YyBjb250ZXh0Cj4gKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzCj4gKyAqLwo+ICtzdGF0aWMgaW50 IHJlYWRfb3B0aW9ucyhjb25zdCBBVkNvZGVjQ29udGV4dCogYXZjdHgpCj4gK3sKPiArCj4gKyAg ICBvcF90aHJlYWRzID0gKGF2Y3R4LT50aHJlYWRfY291bnQ+MCk/YXZjdHgtPnRocmVhZF9jb3Vu dDoxOwo+ICsKPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICsvKioKPiArICogUGFyc2UgOi1z ZXBhcmF0ZWQgbGlzdCBvZiBrZXk9dmFsdWUgcGFyYW1ldGVycwo+ICsgKgo+ICsgKiBAcGFyYW0g a2V5Cj4gKyAqIEBwYXJhbSB2YWx1ZQo+ICsgKgo+ICsgKiBAcmV0dXJuIDAgb24gc3VjY2Vzcywg bmVnYXRpdmUgdmFsdWUgb24gZmFpbHVyZQo+ICsgKgo+ICsgKiBAdG9kbyBDb25zaWRlciByZW1v dmluZyB0aGUgZnVuY3Rpb24KPiArICovCj4gK3N0YXRpYyBpbnQgeGV2ZF9wYXJhbXNfcGFyc2Uo Y29uc3QgY2hhcioga2V5LCBjb25zdCBjaGFyKiB2YWx1ZSkKPiArewo+ICsgICAgaWYoIWtleSkg ewo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJJdmFsaWQgYXJndW1lbnQ6 IGtleSBzdHJpbmcgaXMgTlVMTFxuIik7Cj4gKyAgICAgICAgcmV0dXJuIFhFVkRfRVJSX0lOVkFM SURfQVJHVU1FTlQ7Cj4gKyAgICB9Cj4gKyAgICBpZighdmFsdWUpIHsKPiArICAgICAgICBhdl9s b2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiSXZhbGlkIGFyZ3VtZW50OiB2YWx1ZSBzdHJpbmcgaXMg TlVMTFxuIik7Cj4gKyAgICAgICAgcmV0dXJuIFhFVkRfRVJSX0lOVkFMSURfQVJHVU1FTlQ7Cj4g KyAgICB9Cj4gKwo+ICsgICAgZWxzZSB7Cj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19F UlJPUiwgIlVua25vd24geGV2ZCBjb2RlYyBvcHRpb246ICVzXG4iLCBrZXkpOwo+ICsgICAgICAg IHJldHVybiBYRVZEX1BBUkFNX0JBRF9OQU1FOwo+ICsgICAgfQo+ICsgICAgcmV0dXJuIDA7Cj4g K30KPiArCj4gKy8qKgo+ICsgKiAgVGhlIGZ1bmN0aW9uIHJldHVybnMgYSBwb2ludGVyIHRvIHZh cmlhYmxlIG9mIHR5cGUgWEVWRF9DRFNDLgo+ICsgKiBYRVZEX0NEU0MgY29udGFpbnMgYWxsIGRl Y29kZXIgcGFyYW1ldGVycyB0aGF0IHNob3VsZCBiZSBpbml0aWFsaXplZCBiZWZvcmUgaXRzIHVz ZS4KPiArICoKPiArICogVGhlIGZpZWxkIHZhbHVlcyBvZiB0aGUgWEVWRF9DRFNDIHN0cnVjdHVy ZSBhcmUgcG9wdWxhdGVkIGJhc2VkIG9uOgo+ICsgKiAtIHRoZSBjb3JyZXNwb25kaW5nIGZpZWxk IHZhbHVlcyBvZiB0aGUgQXZDb2RlY0NvbmV0eHQgc3RydWN0dXJlLAo+ICsgKiAtIHRoZSB4ZXZk IGRlY29kZXIgc3BlY2lmaWMgb3B0aW9uIHZhbHVlcywKPiArICogICAodGhlIGZ1bGwgbGlzdCBv ZiBvcHRpb25zIGF2YWlsYWJsZSBmb3IgeGV2ZCBlbmNvZGVyIGlzIGRpc3BsYXllZCBhZnRlciBl eGVjdXRpbmcgdGhlIGNvbW1hbmQgLi9mZm1wZWcgLS1oZWxwIGRlY29kZXIgPSBsaWJ4ZXZkKQo+ ICsgKiAtIGFuZCB0aGUgeGV2ZCBlbmNvZGVyIG9wdGlvbnMgc3BlY2lmaWVkIGFzIGEgbGlzdCBv ZiBrZXkgdmFsdWUgcGFpcnMgZm9sbG93aW5nIHhldmQtcGFyYW1zIG9wdGlvbgo+ICsgKgo+ICsg KiBPcmRlciBvZiBpbnB1dCBwcm9jZXNzaW5nIGFuZCBwb3B1bGF0aW5nIHRoZSBYRVZEX0NEU0Mg c3RydWN0dXJlCj4gKyAqIDEuIGZpcnN0LCB0aGUgY29ycmVzcG9uZGluZyBmaWVsZHMgb2YgdGhl IEFWQ29kZWNDb250ZXh0IHN0cnVjdHVyZSBhcmUgcHJvY2Vzc2VkLCAoaS5lIC10aHJlYWRzIDQp Cj4gKyAqIDIuIHRoZW4geGV2ZC1zcGVjaWZpYyBvcHRpb25zIGFkZGVkIGFzIEFWT3B0aW9uIHRv IHRoZSB4ZXZkIEFWQ29kZWMgaW1wbGVtZW50YXRpb24gKGkuZSAtdGhyZWFkcyAzKQo+ICsgKiAz LiBmaW5hbGx5LCB0aGUgb3B0aW9ucyBzcGVjaWZpZWQgYWZ0ZXIgdGhlIHhldmQtcGFyYW1zIG9w dGlvbiBhcyB0aGUgcGFyYW1ldGVyIGxpc3Qgb2YgdHlwZSBrZXkgdmFsdWUgYXJlIHByb2Nlc3Nl ZCAoaS5lIC14ZXZkLXBhcmFtcyAibT0yIikKPiArICoKPiArICogVGhlcmUgYXJlIG9wdGlvbnMg dGhhdCBjYW4gYmUgc2V0IGluIGRpZmZlcmVudCB3YXlzLiBJbiB0aGlzIGNhc2UsIHBsZWFzZSBm b2xsb3cgdGhlIGFib3ZlLW1lbnRpb25lZCBvcmRlciBvZiBwcm9jZXNzaW5nLgo+ICsgKiBUaGUg bW9zdCByZWNlbnQgYXNzaWdubWVudHMgb3ZlcndyaXRlIHRoZSBwcmV2aW91cyB2YWx1ZXMuCj4g KyAqCj4gKyAqIEBwYXJhbSBhdmN0eCBjb2RlYyBjb250ZXh0Cj4gKyAqIEBwYXJhbSBjZHNjIGNv bnRhaW5zIGFsbCBlbmNvZGVyIHBhcmFtZXRlcnMgdGhhdCBzaG91bGQgYmUgaW5pdGlhbGl6ZWQg YmVmb3JlIGl0cyB1c2UuCj4gKyAqCj4gKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCBuZWdhdGl2 ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUKPiArICovCj4gK3N0YXRpYyBpbnQgZ2V0X2NvbmYoY29u c3QgQVZDb2RlY0NvbnRleHQqIGF2Y3R4LCBYRVZEX0NEU0MqIGNkc2MpCj4gK3sKPiArICAgIGlu dCBjcHVfY291bnQgPSBhdl9jcHVfY291bnQoKTsKPiArCj4gKyAgICAvKiByZWFkIG9wdGlvbnMg ZnJvbSBBVkNvZGVjQ29udGV4dCAmIGZyb20gWEVWRF9DRFNDICovCj4gKyAgICByZWFkX29wdGlv bnMoYXZjdHgpOwo+ICsKPiArICAgIC8qIHBhcnNlIDotc2VwYXJhdGVkIGxpc3Qgb2Yga2V5PXZh bHVlIHBhcmFtZXRlcnMgYW5kIHNldCB2YWx1ZXMgZm9yIGNyZWF0ZWQgZGVzY3JpcHRvciAoWEVW RF9DRFNDKSAqLwo+ICsgICAgewo+ICsgICAgICAgIFhldmRDb250ZXh0ICpjdHggPSBhdmN0eC0+ cHJpdl9kYXRhOwo+ICsgICAgICAgIEFWRGljdGlvbmFyeUVudHJ5ICplbiA9IE5VTEw7Cj4gKyAg ICAgICAgd2hpbGUgKChlbiA9IGF2X2RpY3RfZ2V0KGN0eC0+eGV2ZF9vcHRzLCAiIiwgZW4sIEFW X0RJQ1RfSUdOT1JFX1NVRkZJWCkpKSB7Cj4gKyAgICAgICAgICAgIGludCBwYXJzZV9yZXQgPSB4 ZXZkX3BhcmFtc19wYXJzZShlbi0+a2V5LCBlbi0+dmFsdWUpOwo+ICsKPiArICAgICAgICAgICAg c3dpdGNoIChwYXJzZV9yZXQpIHsKPiArICAgICAgICAgICAgY2FzZSBYRVZEX1BBUkFNX0JBRF9O QU1FOgo+ICsgICAgICAgICAgICAgICAgYXZfbG9nKChBVkNvZGVjQ29udGV4dCopYXZjdHgsIEFW X0xPR19XQVJOSU5HLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICJVbmtub3duIG9wdGlvbjog JXMuXG4iLCBlbi0+a2V5KTsKPiArICAgICAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgICAg ICBjYXNlIFhFVkRfUEFSQU1fQkFEX1ZBTFVFOgo+ICsgICAgICAgICAgICAgICAgYXZfbG9nKChB VkNvZGVjQ29udGV4dCopYXZjdHgsIEFWX0xPR19XQVJOSU5HLAo+ICsgICAgICAgICAgICAgICAg ICAgICAgICJJbnZhbGlkIHZhbHVlIGZvciAlczogJXMuXG4iLCBlbi0+a2V5LCBlbi0+dmFsdWUp Owo+ICsgICAgICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAgICAgIGRlZmF1bHQ6Cj4gKyAg ICAgICAgICAgICAgICBicmVhazsKPiArICAgICAgICAgICAgfQo+ICsgICAgICAgIH0KPiArICAg IH0KPiArCj4gKyAgICAvKiBjbGVhciBYRVZTX0NEU0Mgc3RydWN0dXJlICovCj4gKyAgICBtZW1z ZXQoY2RzYywgMCwgc2l6ZW9mKFhFVkRfQ0RTQykpOwo+ICsKPiArICAgIC8qIGluaXQgWEVWRF9D RFNDICovCj4gKyAgICBpZihhdmN0eC0+dGhyZWFkX2NvdW50IDw9IDApIHsKPiArICAgICAgICBj ZHNjLT50aHJlYWRzID0gKGNwdV9jb3VudDxYRVZEX01BWF9UQVNLX0NOVCk/Y3B1X2NvdW50OlhF VkRfTUFYX1RBU0tfQ05UOwo+ICsgICAgfSBlbHNlIGlmKGF2Y3R4LT50aHJlYWRfY291bnQgPiBY RVZEX01BWF9UQVNLX0NOVCkgewo+ICsgICAgICAgIGNkc2MtPnRocmVhZHMgPSBYRVZEX01BWF9U QVNLX0NOVDsKPiArICAgIH0gZWxzZSB7Cj4gKyAgICAgICAgY2RzYy0+dGhyZWFkcyA9IGF2Y3R4 LT50aHJlYWRfY291bnQ7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0dXJuIFhFVkRfT0s7Cj4gK30K PiArCj4gKy8qKgo+ICsgKiBSZWFkIE5BTCB1bml0IGxlbmd0aAo+ICsgKiBAcGFyYW0gYnMgaW5w dXQgZGF0YSAoYml0c3RyZWFtKQo+ICsgKiBAcmV0dXJuIHRoZSBsZW5naHRoIG9mIE5BTCB1bml0 IG9uIHN1Y2Nlc3MsIDAgdmFsdWUgb24gZmFpbHVyZQo+ICsgKi8KPiArc3RhdGljIHVpbnQzMl90 IHJlYWRfbmFsX3VuaXRfbGVuZ3RoKGNvbnN0IHVpbnQ4X3QgKmJzLCBpbnQgYnNfc2l6ZSkKPiAr ewo+ICsgICAgdWludDMyX3QgbGVuID0gMDsKPiArICAgIFhFVkRfSU5GTyBpbmZvOwo+ICsgICAg aW50IHJldDsKPiArCj4gKyAgICBpZihic19zaXplPT1YRVZEX05BTF9VTklUX0xFTkdUSF9CWVRF KSB7Cj4gKyAgICAgICAgcmV0ID0geGV2ZF9pbmZvKCh2b2lkKilicywgWEVWRF9OQUxfVU5JVF9M RU5HVEhfQllURSwgMSwgJmluZm8pOwo+ICsgICAgICAgIGlmIChYRVZEX0ZBSUxFRChyZXQpKSB7 Cj4gKyAgICAgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJDYW5ub3QgZ2V0IGJp dHN0cmVhbSBpbmZvcm1hdGlvblxuIik7Cj4gKyAgICAgICAgICAgIHJldHVybiAwOwo+ICsgICAg ICAgIH0KPiArICAgICAgICBsZW4gPSBpbmZvLm5hbHVfbGVuOwo+ICsgICAgICAgIGlmKGxlbiA9 PSAwKQo+ICsgICAgICAgIHsKPiArICAgICAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJP UiwgIkludmFsaWQgYml0c3RyZWFtIHNpemUhIFslZF1cbiIsIGJzX3NpemUpOwo+ICsgICAgICAg ICAgICByZXR1cm4gMDsKPiArICAgICAgICB9Cj4gKyAgICB9Cj4gKyAgICByZXR1cm4gbGVuOwo+ ICt9Cj4gKwo+ICsvKioKPiArICogQHBhcmFtIGF2Y3R4IGNvZGVjIGNvbnRleHQKPiArICogQHBh cmFtIGN0eCB0aGUgc3RydWN0dXJlIHRoYXQgc3RvcmVzIGFsbCB0aGUgc3RhdGUgYXNzb2NpYXRl ZCB3aXRoIHRoZSBpbnN0YW5jZSBvZiBYZXZlIE1QRUctNSBFVkMgZGVjb2Rlcgo+ICsgKiBAcmV0 dXJuIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb24gZmFpbHVyZQo+ICsgKi8KPiArc3Rh dGljIGludCBleHBvcnRfc3RyZWFtX3BhcmFtcyhBVkNvZGVjQ29udGV4dCAqYXZjdHgsIGNvbnN0 IFhldmRDb250ZXh0ICpjdHgpCj4gK3sKPiArICAgIC8vIHVuc2lnbmVkIGludCBudW0gPSAwLCBk ZW4gPSAwOwo+ICsgICAgLy8gQHRvZG8gc3VwcG9ydCBvdGhlciBmb3JtYXRzCj4gKwo+ICsgICAg aW50IHJldDsKPiArICAgIGludCBzaXplOwo+ICsgICAgaW50IGNvbG9yX3NwYWNlOwo+ICsKPiAr ICAgIGF2Y3R4LT5waXhfZm10ID0gQVZfUElYX0ZNVF9ZVVY0MjBQMTA7Cj4gKwo+ICsgICAgLy8g QHRvZG8gVGhlIEFWQ29kZWNDb250ZXh0IHNob3VsZCBiZSBpbml0aWFsaXplZCBoZXJlIHVzaW5n IGRhdGEgZnJvbSB0aGUgb2JqZWN0IG9mIFhFVkRfU1BTIHR5cGUuCj4gKyAgICAvLwo+ICsgICAg Ly8gSXQgc2VlbXMgdG8gYmUgaW1wb3NzaWJsZSByaWdodCBub3cgc2luY2UgWEVWRCBBUEkgbGlt aXRhdGlvbi4KPiArICAgIC8vIFRoZSBleHRlbnNpb24gZm9yIHRoZSBYRVZEIEFQSSBpcyBuZWVk ZWQuCj4gKyAgICAvLyBUbyBiZSBtb3JlIHByZWNpc2UsIHdoYXQgd2UgbmVlZCBpcyBhY2Nlc3Mg dG8gdGhlIG9iamVjdCBvZiBYRVZEX1NQUyB0eXBlIGJlaW5nIGEgcGFydCBvZiBYRVZEX0NUWCBv YmplY3QuCj4gKyAgICAvLyBUaGUgb2JqZWN0IG9mIFhFVkRfQ1RYIHR5cGUgaXMgY3JlYXRlZCB3 aGlsZSB0aGUgZnVuY3Rpb24geGV2ZF9jcmVhdGUoKSBiZWluZyBhIHBhcnQgb2YgcHVibGljIEFQ SSBpcyBjYWxsZWQuCj4gKyAgICAvLwo+ICsgICAgLy8gQHRvZG8gcmVtb3ZlIHRoZSBmb2xsb3dp bmcgaGFyZG9jZWQgaGFzX2JfZnJhbWVzOyBjb25zaWRlciB1c2luZyBzcHMtPm51bV9yZW9yZGVy X3BpY3MgdmFsdWUgaW5zdGVhZAo+ICsgICAgLy8KPiArICAgIC8vIGF2Y3R4LT5oYXNfYl9mcmFt ZXMgICAgICAgID0gMTsgLy8gKHNwcy0+bnVtX3Jlb3JkZXJfcGljcyk/MTowOwo+ICsgICAgc2l6 ZSA9IDQ7Cj4gKyAgICByZXQgPSB4ZXZkX2NvbmZpZyhjdHgtPmlkLCBYRVZEX0NGR19HRVRfQ09E RURfV0lEVEgsICZhdmN0eC0+Y29kZWRfd2lkdGgsICZzaXplKTsKPiArICAgIGlmIChYRVZEX0ZB SUxFRChyZXQpKSB7Cj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgImZhaWxl ZCB0byBnZXQgY29kZWRfd2lkdGhcbiIpOwo+ICsgICAgICAgIHJldHVybiAtMTsKPiArICAgIH0K PiArCj4gKyAgICByZXQgPSB4ZXZkX2NvbmZpZyhjdHgtPmlkLCBYRVZEX0NGR19HRVRfQ09ERURf SEVJR0hULCAmYXZjdHgtPmNvZGVkX2hlaWdodCwgJnNpemUpOwo+ICsgICAgaWYgKFhFVkRfRkFJ TEVEKHJldCkpIHsKPiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiZmFpbGVk IHRvIGdldCBjb2RlZF9oZWlnaHRcbiIpOwo+ICsgICAgICAgIHJldHVybiAtMTsKPiArICAgIH0K PiArCj4gKyAgICByZXQgPSB4ZXZkX2NvbmZpZyhjdHgtPmlkLCBYRVZEX0NGR19HRVRfV0lEVEgs ICZhdmN0eC0+d2lkdGgsICZzaXplKTsKPiArICAgIGlmIChYRVZEX0ZBSUxFRChyZXQpKSB7Cj4g KyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgImZhaWxlZCB0byBnZXQgd2lkdGhc biIpOwo+ICsgICAgICAgIHJldHVybiAtMTsKPiArICAgIH0KPiArCj4gKyAgICByZXQgPSB4ZXZk X2NvbmZpZyhjdHgtPmlkLCBYRVZEX0NGR19HRVRfSEVJR0hULCAmYXZjdHgtPmhlaWdodCwgJnNp emUpOwo+ICsgICAgaWYgKFhFVkRfRkFJTEVEKHJldCkpIHsKPiArICAgICAgICBhdl9sb2coTlVM TCwgQVZfTE9HX0VSUk9SLCAiZmFpbGVkIHRvIGdldCBoZWlnaHRcbiIpOwo+ICsgICAgICAgIHJl dHVybiAtMTsKPiArICAgIH0KPiArCj4gKyAgICByZXQgPSB4ZXZkX2NvbmZpZyhjdHgtPmlkLCBY RVZEX0NGR19HRVRfQ09MT1JfU1BBQ0UsICZjb2xvcl9zcGFjZSwgJnNpemUpOwo+ICsgICAgaWYg KFhFVkRfRkFJTEVEKHJldCkpIHsKPiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9S LCAiZmFpbGVkIHRvIGdldCBjb2xvcl9zcGFjZVxuIik7Cj4gKyAgICAgICAgcmV0dXJuIC0xOwo+ ICsgICAgfQo+ICsgICAgc3dpdGNoKGNvbG9yX3NwYWNlKSB7Cj4gKyAgICBjYXNlIFhFVkRfQ1Nf WUNCQ1I0MDBfMTBMRToKPiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0RFQlVHLCAiY29s b3Jfc3BhY2UgPSBYRVZEX0NTX1lDQkNSNDAwXzEwTEVcbiIpOwo+ICsgICAgICAgIGF2Y3R4LT5w aXhfZm10ID0gQVZfUElYX0ZNVF9HUkFZMTBMRTsKPiArICAgICAgICBicmVhazsKPiArICAgIGNh c2UgWEVWRF9DU19ZQ0JDUjQyMF8xMExFOgo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0df REVCVUcsICJjb2xvcl9zcGFjZSA9IFhFVkRfQ1NfWUNCQ1I0MjBfMTBMRVxuIik7Cj4gKyAgICAg ICAgYXZjdHgtPnBpeF9mbXQgPSBBVl9QSVhfRk1UX1lVVjQyMFAxMExFOwo+ICsgICAgICAgIGJy ZWFrOwo+ICsgICAgY2FzZSBYRVZEX0NTX1lDQkNSNDIyXzEwTEU6Cj4gKyAgICAgICAgYXZfbG9n KE5VTEwsIEFWX0xPR19ERUJVRywgImNvbG9yX3NwYWNlID0gWEVWRF9DU19ZQ0JDUjQyMl8xMExF XG4iKTsKPiArICAgICAgICBhdmN0eC0+cGl4X2ZtdCA9IEFWX1BJWF9GTVRfWVVWNDIyUDEwTEU7 Cj4gKyAgICAgICAgYnJlYWs7Cj4gKyAgICBjYXNlIFhFVkRfQ1NfWUNCQ1I0NDRfMTBMRToKPiAr ICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0RFQlVHLCAiY29sb3Jfc3BhY2UgPSBYRVZEX0NT X1lDQkNSNDQ0XzEwTEVcbiIpOwo+ICsgICAgICAgIGF2Y3R4LT5waXhfZm10ID0gQVZfUElYX0ZN VF9ZVVY0NDRQMTBMRTsKPiArICAgICAgICBicmVhazsKPiArICAgIGRlZmF1bHQ6Cj4gKyAgICAg ICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgInVua25vd24gY29sb3Igc3BhY2VcbiIpOwo+ ICsgICAgICAgIGF2Y3R4LT5waXhfZm10ID0gQVZfUElYX0ZNVF9OT05FOwo+ICsgICAgICAgIHJl dHVybiAtMTsKPiArICAgIH0KPiArCj4gKy8vIEB0b2RvIFVzZSBfWEVWRF9TUFMgZmllbGRzIHRv IGluaXRpYWxpemUgQVZDb2RlY0NvbnRleHQgd2hlbiBpdCBpcyBwb3NzaWJsZQo+ICsjaWZkZWYg VVNFX1hFVkRfU1BTX0ZJRUxEUwo+ICsgICAgYXZjdHgtPnByb2ZpbGUgPSBzcHMtPnByb2ZpbGVf aWRjOwo+ICsgICAgYXZjdHgtPmxldmVsID0gc3BzLT5sZXZlbF9pZGM7Cj4gKwo+ICsgICAgZmZf c2V0X3NhcihhdmN0eCwgc3BzLT52dWlfcGFyYW1ldGVycy5zYXIpOwo+ICsKPiArICAgIGlmIChz cHMtPnZ1aV9wYXJhbWV0ZXJzdnVpLnZpZGVvX3NpZ25hbF90eXBlX3ByZXNlbnRfZmxhZykKPiAr ICAgICAgICBhdmN0eC0+Y29sb3JfcmFuZ2UgPSBzcHMtPnZ1aV9wYXJhbWV0ZXJzLnZpZGVvX2Z1 bGxfcmFuZ2VfZmxhZyA/IEFWQ09MX1JBTkdFX0pQRUcKPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA6IEFWQ09MX1JBTkdFX01QRUc7Cj4gKyAgICBlbHNlCj4gKyAgICAgICAgYXZjdHgt PmNvbG9yX3JhbmdlID0gQVZDT0xfUkFOR0VfTVBFRzsKPiArCj4gKyAgICBpZiAoc3BzLT52dWlf cGFyYW1ldGVycy5jb2xvdXJfZGVzY3JpcHRpb25fcHJlc2VudF9mbGFnKSB7Cj4gKyAgICAgICAg YXZjdHgtPmNvbG9yX3ByaW1hcmllcyA9IHNwcy0+dnVpX3BhcmFtZXRlcnMuY29sb3VyX3ByaW1h cmllczsKPiArICAgICAgICBhdmN0eC0+Y29sb3JfdHJjICAgICAgID0gc3BzLT52dWlfcGFyYW1l dGVycy50cmFuc2Zlcl9jaGFyYWN0ZXJpc3RpYzsKPiArICAgICAgICBhdmN0eC0+Y29sb3JzcGFj ZSAgICAgID0gc3BzLT52dWlfcGFyYW1ldGVycy5tYXRyaXhfY29lZmZzOwo+ICsgICAgfSBlbHNl IHsKPiArICAgICAgICBhdmN0eC0+Y29sb3JfcHJpbWFyaWVzID0gQVZDT0xfUFJJX1VOU1BFQ0lG SUVEOwo+ICsgICAgICAgIGF2Y3R4LT5jb2xvcl90cmMgICAgICAgPSBBVkNPTF9UUkNfVU5TUEVD SUZJRUQ7Cj4gKyAgICAgICAgYXZjdHgtPmNvbG9yc3BhY2UgICAgICA9IEFWQ09MX1NQQ19VTlNQ RUNJRklFRDsKPiArICAgIH0KPiArCj4gKyAgICBpZiAoc3BzLT52dWlfcGFyYW1ldGVycy50aW1p bmdfaW5mb19wcmVzZW50X2ZsYWcpIHsKPiArICAgICAgICBudW0gPSBzcHMtPnZ1aV9wYXJhbWV0 ZXJzLm51bV91bml0c19pbl90aWNrOwo+ICsgICAgICAgIGRlbiA9IHNwcy0+dnVpX3BhcmFtZXRl cnMudGltZV9zY2FsZTsKPiArICAgIH0KPiArCj4gKyAgICBpZiAocy0+c2VpLmFsdGVybmF0aXZl X3RyYW5zZmVyLnByZXNlbnQgJiYKPiArICAgICAgICAgICAgYXZfY29sb3JfdHJhbnNmZXJfbmFt ZShzLT5zZWkuYWx0ZXJuYXRpdmVfdHJhbnNmZXIucHJlZmVycmVkX3RyYW5zZmVyX2NoYXJhY3Rl cmlzdGljcykgJiYKPiArICAgICAgICAgICAgcy0+c2VpLmFsdGVybmF0aXZlX3RyYW5zZmVyLnBy ZWZlcnJlZF90cmFuc2Zlcl9jaGFyYWN0ZXJpc3RpY3MgIT0gQVZDT0xfVFJDX1VOU1BFQ0lGSUVE KSB7Cj4gKyAgICAgICAgYXZjdHgtPmNvbG9yX3RyYyA9IHMtPnNlaS5hbHRlcm5hdGl2ZV90cmFu c2Zlci5wcmVmZXJyZWRfdHJhbnNmZXJfY2hhcmFjdGVyaXN0aWNzOwo+ICsgICAgfQo+ICsjZWxz ZQo+ICsgICAgYXZjdHgtPmNvbG9yX3ByaW1hcmllcyA9IEFWQ09MX1BSSV9VTlNQRUNJRklFRDsK PiArICAgIGF2Y3R4LT5jb2xvcl90cmMgICAgICAgPSBBVkNPTF9UUkNfVU5TUEVDSUZJRUQ7Cj4g KyAgICBhdmN0eC0+Y29sb3JzcGFjZSAgICAgID0gQVZDT0xfU1BDX1VOU1BFQ0lGSUVEOwo+ICsK PiArI2VuZGlmCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArLyoqCj4gKyAqIEluaXRpYWxp emUgZGVjb2RlciBzdGF0aWMgZGF0YQo+ICsgKgo+ICsgKiBAdG9kbyBDb25zaWRlciByZW1vdmlu ZyB1bnVzZWQgZnVuY3Rpb24KPiArICovCj4gK3N0YXRpYyBhdl9jb2xkIHZvaWQgbGlieGV2ZF9p bml0X3N0YXRpY19kYXRhKEFWQ29kZWMgKmNvZGVjKQo+ICt7Cj4gKyAgICBVTlVTRUQoY29kZWMp Owo+ICt9Cj4gKwo+ICsvKioKPiArICogSW5pdGlhbGl6ZSBkZWNvZGVyCj4gKyAqIENyZWF0ZSBk ZWNvZGVyIGluc3RhbmNlIGFuZCBhbGxvY2F0ZSBhbGwgdGhlIG5lZWRlZCByZXNvdXJjZXMKPiAr ICoKPiArICogQHBhcmFtIGF2Y3R4IGNvZGVjIGNvbnRleHQKPiArICogQHJldHVybiAwIG9uIHN1 Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZQo+ICsgKi8KPiArc3RhdGljIGF2 X2NvbGQgaW50IGxpYnhldmRfaW5pdChBVkNvZGVjQ29udGV4dCAqYXZjdHgpCj4gK3sKPiArICAg IFhldmRDb250ZXh0ICpjdHggPSBhdmN0eC0+cHJpdl9kYXRhOwo+ICsgICAgaW50IHZhbCA9IDA7 Cj4gKyAgICBYRVZEX0NEU0MgKmNkc2MgPSAmKGN0eC0+Y2RzYyk7Cj4gKwo+ICsgICAgYXZfbG9n KE5VTEwsIEFWX0xPR19ERUJVRywgImVYdHJhLWZhc3QgRXNzZW50aWFsIFZpZGVvIERlY29kZXJc biIpOwo+ICsjaWZkZWYgUFJJTlRfQVZDVFgKPiArICAgIHByaW50X2F2Y3R4KGF2Y3R4KTsKPiAr I2VuZGlmCj4gKwo+ICsgICAgLyogcmVhZCBjb25maWd1cmF0aW9ucyBhbmQgc2V0IHZhbHVlcyBm b3IgY3JlYXRlZCBkZXNjcmlwdG9yIChYRVZEX0NEU0MpICovCj4gKyAgICB2YWwgPSBnZXRfY29u ZihhdmN0eCwgY2RzYyk7Cj4gKyAgICBpZiAodmFsICE9IFhFVkRfT0spIHsKPiArICAgICAgICBh dl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCJDYW5ub3QgZ2V0IGNvbmZpZ3VyYXRpb25cbiIpOwo+ ICsgICAgICAgIHJldHVybiAtMTsKPiArICAgIH0KPiArCj4gKyAgICAvKiBjcmVhdGUgZGVjb2Rl ciAqLwo+ICsgICAgY3R4LT5pZCA9IHhldmRfY3JlYXRlKCYoY3R4LT5jZHNjKSwgTlVMTCk7Cj4g KyAgICBpZihjdHgtPmlkID09IE5VTEwpIHsKPiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9H X0VSUk9SLCAiY2Fubm90IGNyZWF0ZSBYRVZEIGVuY29kZXJcbiIpOwo+ICsgICAgICAgIHJldHVy biAtMTsKPiArICAgIH0KPiArCj4gKyAgICBjdHgtPnBhY2tldF9jb3VudCA9IDA7Cj4gKyAgICBj dHgtPmRlY29kX2ZyYW1lcyA9IDA7Cj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArLyoqCj4g KyAgKiBEbmNvZGUgcGljdHVyZQo+ICsgICoKPiArICAqIEBwYXJhbSAgICAgIGF2Y3R4ICAgICAg ICAgIGNvZGVjIGNvbnRleHQKPiArICAqIEBwYXJhbSAgICAgIGRhdGEgICAgICAgICAgIGNvZGVj IHR5cGUgZGVwZW5kZW50IG91dHB1dCBzdHJ1Y3QKPiArICAqIEBwYXJhbVtvdXRdIGdvdF9mcmFt ZSAgICAgIGRlY29kZXIgc2V0cyB0byAwIG9yIDEgdG8gaW5kaWNhdGUgdGhhdCBhCj4gKyAgKiAg ICAgICAgICAgICAgICAgICAgICAgICAgICBub24tZW1wdHkgZnJhbWUgb3Igc3VidGl0bGUgd2Fz IHJldHVybmVkIGluCj4gKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRkYXRhLgo+ ICsgICogQHBhcmFtW2luXSAgcGt0ICAgICAgICAgICAgQVZQYWNrZXQgY29udGFpbmluZyB0aGUg ZGF0YSB0byBiZSBkZWNvZGVkCj4gKyAgKiBAcmV0dXJuIGFtb3VudCBvZiBieXRlcyByZWFkIGZy b20gdGhlIHBhY2tldCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvcgo+ICsgICogICAgICAgICBj b2RlIG9uIGZhaWx1cmUKPiArICAqLwo+ICtzdGF0aWMgaW50IGxpYnhldmRfZGVjb2RlKEFWQ29k ZWNDb250ZXh0ICphdmN0eCwgdm9pZCAqZGF0YSwgaW50ICpnb3RfZnJhbWUsIEFWUGFja2V0ICpw a3QpCj4gK3sKPiArICAgIEFWRnJhbWUgKmZyYW1lID0gZGF0YTsKPiArICAgIFhldmRDb250ZXh0 ICpjdHggPSBOVUxMOwo+ICsgICAgWEVWRF9JTUdCICogaW1nYiA9IE5VTEw7Cj4gKyAgICBYRVZE X1NUQVQgc3RhdDsKPiArICAgIFhFVkRfQklUQiBiaXRiOwo+ICsgICAgaW50IHJldCwgbmFsdV9z aXplLCBic19yZWFkX3BvczsKPiArCj4gKyAgICBpZihhdmN0eCA9PSBOVUxMKSB7Cj4gKyAgICAg ICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIkludmFsaWQgaW5wdXQgcGFyYW1ldGVyOiBB VkNvZGVjQ29udGV4dFxuIik7Cj4gKyAgICAgICAgcmV0dXJuIC0xOwo+ICsgICAgfQo+ICsgICAg Y3R4ID0gYXZjdHgtPnByaXZfZGF0YTsKPiArICAgIGlmKGN0eCA9PSBOVUxMKSB7Cj4gKyAgICAg ICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJJbnZhbGlkIFhFVkQgY29udGV4dFxuIik7 Cj4gKyAgICAgICAgcmV0dXJuIC0xOwo+ICsgICAgfQo+ICsKPiArICAgIGlmKHBrdC0+c2l6ZSA+ IDApIHsKPiArICAgICAgICBic19yZWFkX3BvcyA9IDA7Cj4gKyAgICAgICAgaW1nYiA9IE5VTEw7 Cj4gKyAgICAgICAgd2hpbGUocGt0LT5zaXplID4gKGJzX3JlYWRfcG9zICsgWEVWRF9OQUxfVU5J VF9MRU5HVEhfQllURSkpIHsKPiArICAgICAgICAgICAgaW50IG5hbF90eXBlID0gMDsKPiArCj4g KyAgICAgICAgICAgIG1lbXNldCgmc3RhdCwgMCwgc2l6ZW9mKFhFVkRfU1RBVCkpOwo+ICsgICAg ICAgICAgICBtZW1zZXQoJmJpdGIsIDAsIHNpemVvZihYRVZEX0JJVEIpKTsKPiArCj4gKyAgICAg ICAgICAgIG5hbHVfc2l6ZSA9IHJlYWRfbmFsX3VuaXRfbGVuZ3RoKHBrdC0+ZGF0YSArIGJzX3Jl YWRfcG9zLCBYRVZEX05BTF9VTklUX0xFTkdUSF9CWVRFKTsKPiArICAgICAgICAgICAgaWYobmFs dV9zaXplID09IDApIHsKPiArICAgICAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VS Uk9SLCAiSW52YWxpZCBiaXRzdHJlYW1cbiIpOwo+ICsgICAgICAgICAgICAgICAgZ290byBFUlI7 Cj4gKyAgICAgICAgICAgIH0KPiArICAgICAgICAgICAgYnNfcmVhZF9wb3MgKz0gWEVWRF9OQUxf VU5JVF9MRU5HVEhfQllURTsKPiArCj4gKyAgICAgICAgICAgIGJpdGIuYWRkciA9IHBrdC0+ZGF0 YSArIGJzX3JlYWRfcG9zOwo+ICsgICAgICAgICAgICBiaXRiLnNzaXplID0gbmFsdV9zaXplOwo+ ICsKPiArICAgICAgICAgICAgLy8gUmVhZCBOQUwgVW5pdCBUeXBlIGZyb20gIE5BTCBVbml0IEhl YWRlcgo+ICsgICAgICAgICAgICAvLwo+ICsgICAgICAgICAgICAvLyBUaGUgc3RydWN0dXJlIG9m IE5BTCBVbml0IEhlYWRlciBsb29rcyBsaWtlIGZvbGxvd3MKPiArICAgICAgICAgICAgLy8KPiAr ICAgICAgICAgICAgLy/DgiArLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKPiArICAg ICAgICAgICAgLy/DgiB8MHwxfDJ8M3w0fDV8Nnw3fDB8MXwyfDN8NHw1fDZ8N3wKPiArICAgICAg ICAgICAgLy/DgiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKPiArICAgICAgICAg ICAgLy/DgiB8RnwgICBUeXBlICAgIHwgVElEIHwgUmVzZXJ2ZSB8RXwKPiArICAgICAgICAgICAg Ly/DgiArLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSsKPiArICAgICAgICAgICAgLy8K PiArICAgICAgICAgICAgLy8gRjogICAgICAgMSBiaXQgICAtIGZvcmJpZGRlbl96ZXJvX2JpdC4g IFJlcXVpcmVkIHRvIGJlIHplcm8gaW4gW0VWQ10uCj4gKyAgICAgICAgICAgIC8vIFR5cGU6ICAg IDYgYml0cyAgLSBuYWxfdW5pdF90eXBlX3BsdXMxIChUaGlzIGZpZWxkIHNwZWNpZmllcyB0aGUg TkFMIHVuaXQgdHlwZSBhcyBkZWZpbmVkIGluIFRhYmxlIDQgb2YgW0VWQ10pCj4gKyAgICAgICAg ICAgIC8vIFRJRDogICAgIDMgYml0cyAgLSBudWhfdGVtcG9yYWxfaWQuICBUaGlzIGZpZWxkIHNw ZWNpZmllcyB0aGUgdGVtcG9yYWwgaWRlbnRpZmllciBvZiB0aGUgTkFMIHVuaXQuCj4gKyAgICAg ICAgICAgIC8vIFJlc2VydmU6IDUgYml0cyAgLSBudWhfcmVzZXJ2ZWRfemVyb181Yml0cy4gIFRo aXMgZmllbGQgc2hhbGwgYmUgZXF1YWwgdG8gdGhlIHZlcnNpb24gb2YgdGhlIFtFVkNdIHNwZWNp ZmljYXRpb24uCj4gKyAgICAgICAgICAgIC8vIEU6ICAgICAgIDEgYml0ICAgLSBudWhfZXh0ZW5z aW9uX2ZsYWcuICBUaGlzIGZpZWxkIHNoYWxsIGJlIGVxdWFsIHRoZSB2ZXJzaW9uIG9mIHRoZSBb RVZDXSBzcGVjaWZpY2F0aW9uLgo+ICsgICAgICAgICAgICAvLwo+ICsgICAgICAgICAgICAvLyBA c2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1hdnRj b3JlLXJ0cC1ldmMtMDEjc2VjdGlvbi0xLjEuNAo+ICsKPiArI2lmZGVmIFVTRV9FWFBfR09MT01C X1NUVUZGCj4gKyAgICAgICAgICAgIG5hbF90eXBlID0gZ2V0X25hbHVfdHlwZShiaXRiLmFkZHIs IDEpOwo+ICsgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19ERUJVRywgIk5BTFUgVHlw ZTogJWRcbiIsIG5hbF90eXBlKTsKPiArI2Vsc2UKPiArICAgICAgICAgICAgbWVtY3B5KCZuYWxf dHlwZSxiaXRiLmFkZHIsMSk7Cj4gKyAgICAgICAgICAgIG5hbF90eXBlID0gbmFsX3R5cGUgJiAw eDdFOwo+ICsgICAgICAgICAgICBuYWxfdHlwZSA9IG5hbF90eXBlID4+IDE7Cj4gKyAgICAgICAg ICAgIG5hbF90eXBlIC09IDE7Cj4gKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RF QlVHLCAiTkFMVSBUeXBlOiAlZFxuIiwgbmFsX3R5cGUpOwo+ICsjZW5kaWYKPiArCj4gKyAgICAg ICAgICAgIC8qIG1haW4gZGVjb2RpbmcgYmxvY2sgKi8KPiArICAgICAgICAgICAgcmV0ID0geGV2 ZF9kZWNvZGUoY3R4LT5pZCwgJmJpdGIsICZzdGF0KTsKPiArICAgICAgICAgICAgaWYoWEVWRF9G QUlMRUQocmV0KSkgewo+ICsgICAgICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJS T1IsICJmYWlsZWQgdG8gZGVjb2RlIGJpdHN0cmVhbVxuIik7Cj4gKyAgICAgICAgICAgICAgICBn b3RvIEVSUjsKPiArICAgICAgICAgICAgfQo+ICsKPiArICAgICAgICAgICAgYnNfcmVhZF9wb3Mg Kz0gbmFsdV9zaXplOwo+ICsKPiArI2lmZGVmIFBSSU5UX05BTFVfSU5GTwo+ICsgICAgICAgICAg ICBwcmludF9uYWx1X2luZm8oY3R4KTsKPiArI2VuZGlmCj4gKwo+ICsgICAgICAgICAgICBpZihz dGF0Lm5hbHVfdHlwZSA9PSBYRVZEX05VVF9TUFMpIHsKPiArICAgICAgICAgICAgICAgIGF2X2xv ZyhhdmN0eCwgQVZfTE9HX0RFQlVHLCAiRVZDIHN0cmVhbSBwYXJhbWV0ZXJzIGNoYW5nZWRcbiIp Owo+ICsKPiArICAgICAgICAgICAgICAgIGlmKGV4cG9ydF9zdHJlYW1fcGFyYW1zKGF2Y3R4LCBj dHgpIT0wKSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgZ290byBFUlI7Cj4gKyAgICAgICAgICAg ICAgICB9Cj4gKyAgICAgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19ERUJVRywgIndp ZHRoOiAlZFxuIixhdmN0eC0+d2lkdGgpOwo+ICsgICAgICAgICAgICAgICAgYXZfbG9nKGF2Y3R4 LCBBVl9MT0dfREVCVUcsICJoZWlnaHQ6ICVkXG4iLGF2Y3R4LT5oZWlnaHQpOwo+ICsKPiArICAg ICAgICAgICAgfQo+ICsKPiArICAgICAgICAgICAgaWYoc3RhdC5yZWFkICE9IG5hbHVfc2l6ZSkg ewo+ICsgICAgICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfSU5GTywgImRpZmZlcmVu dCByZWFkaW5nIG9mIGJpdHN0cmVhbSAoaW46JWQsIHJlYWQ6JWQpXG4sIiwgbmFsdV9zaXplLCBz dGF0LnJlYWQpOwo+ICsgICAgICAgICAgICB9Cj4gKyAgICAgICAgICAgIGlmKHN0YXQuZm51bSA+ PSAwKSB7Cj4gKyAgICAgICAgICAgICAgICBpZiAoaW1nYikgeyAvKiBhbHJlYWR5IGhhcyBhIGRl Y29kZWQgaW1hZ2UgKi8KPiArICAgICAgICAgICAgICAgICAgICBpbWdiLT5yZWxlYXNlKGltZ2Ip OwoKU28gaWYgdGhlcmUncyBhIGRlY29kZWQgaW1hZ2UgYW5kIHRoaXMgbG9vcCBpcyBydW4gYWdh aW4gYmVjYXVzZSAKYnNfcmVhZF9wb3MgaXMgc3RpbGwgc21hbGxlciB0aGFuIHBrdC0+c2l6ZSwg eW91IGp1c3QgZGlzY2FyZCBpdD8KCllvdSBwcm9iYWJseSBzaG91bGQgd3JpdGUgdGhpcyBkZWNv ZGVyIHVzaW5nIHRoZSBkZWNvdXBsZWQgaW5wdXQvb3V0cHV0IApBUEkgKEFWQ29kZWMucmVjZWl2 ZV9mcmFtZSBpbnN0ZWFkIG9mIEFWQ29kZWMuZGVjb2RlKQoKPiArICAgICAgICAgICAgICAgICAg ICBpbWdiID0gTlVMTDsKPiArICAgICAgICAgICAgICAgIH0KPiArICAgICAgICAgICAgICAgIHJl dCA9IHhldmRfcHVsbChjdHgtPmlkLCAmaW1nYik7Cj4gKyAgICAgICAgICAgICAgICBpZihYRVZE X0ZBSUxFRChyZXQpKSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9M T0dfRVJST1IsICJmYWlsZWQgdG8gcHVsbCB0aGUgZGVjb2RlZCBpbWFnZSAoZXJyOiVkLCBmcmFt ZSM9JWQpXG4iLCByZXQsIHN0YXQuZm51bSk7Cj4gKyAgICAgICAgICAgICAgICAgICAgZ290byBF UlI7Cj4gKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJldCA9PSBYRVZEX09LX0ZSTV9ERUxB WUVEKSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfREVCVUcs ICJkZWxheWVkIGZyYW1lXG4iKTsKPiArICAgICAgICAgICAgICAgICAgICBpZihpbWdiKSB7Cj4g KyAgICAgICAgICAgICAgICAgICAgICAgIGltZ2ItPnJlbGVhc2UoaW1nYik7Cj4gKyAgICAgICAg ICAgICAgICAgICAgICAgIGltZ2IgPSBOVUxMOwo+ICsgICAgICAgICAgICAgICAgICAgIH0KPiAr ICAgICAgICAgICAgICAgIH0KPiArICAgICAgICAgICAgfQo+ICsgICAgICAgIH0KPiArICAgIH0g ZWxzZSB7Cj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19ERUJVRywgImJ1bXBpbmcgLi4u XG4iKTsKPiArICAgICAgICByZXQgPSB4ZXZkX3B1bGwoY3R4LT5pZCwgJihpbWdiKSk7Cj4gKyAg ICAgICAgaWYocmV0ID09IFhFVkRfRVJSX1VORVhQRUNURUQpIHsKPiArICAgICAgICAgICAgYXZf bG9nKGF2Y3R4LCBBVl9MT0dfREVCVUcsICJCdW1waW5nIHByb2Nlc3MgY29tcGxldGVkXG4iKTsK PiArICAgICAgICAgICAgKmdvdF9mcmFtZSA9IDA7Cj4gKyAgICAgICAgICAgIHJldHVybiAwOwo+ ICsgICAgICAgIH0gZWxzZSBpZihYRVZEX0ZBSUxFRChyZXQpKSB7Cj4gKyAgICAgICAgICAgIGF2 X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiZmFpbGVkIHRvIHB1bGwgdGhlIGRlY29kZWQgaW1h Z2UgKGVycjolZClcbiIsIHJldCk7Cj4gKyAgICAgICAgICAgIGdvdG8gRVJSOwo+ICsgICAgICAg IH0gZWxzZSB7Cj4gKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RFQlVHLCAiYnVt cGluZyBzdWNjZXNzXG4iKTsKPiArICAgICAgICB9Cj4gKyAgICB9Cj4gKwo+ICsgICAgaWYoaW1n Yikgewo+ICsgICAgICAgIC8qIEB0b2RvIHN1cHBvcnRzIG90aGVyIGNvbG9yIHNwYWNlIGFuZCBi aXQgZGVwdGggKi8KPiArICAgICAgICBpZihpbWdiLT5jcyAhPSBYRVZEX0NTX1lDQkNSNDIwXzEw TEUpIHsKPiArICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJOb3Qgc3Vw cG9ydGVkIHBpeGVsIGZvcm1hdDogJXNcbiIsIGF2X2dldF9waXhfZm10X25hbWUoYXZjdHgtPnBp eF9mbXQpKTsKPiArICAgICAgICAgICAgZ290byBFUlI7Cj4gKyAgICAgICAgfQo+ICsKPiArICAg ICAgICBpZiAoaW1nYi0+d1swXSAhPSBhdmN0eC0+d2lkdGggfHwgaW1nYi0+aFswXSAhPSBhdmN0 eC0+aGVpZ2h0KSB7Cj4gKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RFQlVHLCAi cmVzb2x1dGlvbiBjaGFuZ2VkICVkeCVkIC0+ICVkeCVkXG4iLAo+ICsgICAgICAgICAgICAgICAg ICAgYXZjdHgtPndpZHRoLCBhdmN0eC0+aGVpZ2h0LCBpbWdiLT53WzBdLCBpbWdiLT5oWzBdKTsK PiArICAgICAgICAgICAgaWYoZmZfc2V0X2RpbWVuc2lvbnMoYXZjdHgsIGltZ2ItPndbMF0sIGlt Z2ItPmhbMF0pIDwgMCkgewo+ICsgICAgICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0df RVJST1IsICJjYW5ub3Qgc2V0IG5ldyBkaW1lbnNpb25cbiIpOwo+ICsgICAgICAgICAgICAgICAg Z290byBFUlI7Cj4gKyAgICAgICAgICAgIH0KPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIGZy YW1lLT5jb2RlZF9waWN0dXJlX251bWJlcisrOwo+ICsgICAgICAgIGZyYW1lLT5kaXNwbGF5X3Bp Y3R1cmVfbnVtYmVyKys7Cj4gKyAgICAgICAgZnJhbWUtPmZvcm1hdCA9IEFWX1BJWF9GTVRfWVVW NDIwUDEwTEU7Cj4gKwo+ICsjaWZkZWYgUFJJTlRfWEVWRF9JTUdCX0lORk8KPiArICAgICAgICBw cmludF94ZXZkX2ltZ2JfaW5mbyhpbWdiKTsKPiArI2VuZGlmCj4gKwo+ICsgICAgICAgIGlmIChm Zl9nZXRfYnVmZmVyKGF2Y3R4LCBmcmFtZSwgMCkgPCAwKSB7Cj4gKyAgICAgICAgICAgIGF2X2xv ZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiY2Fubm90IGdldCBBViBidWZmZXJcbiIpOwo+ICsgICAg ICAgICAgICBnb3RvIEVSUjsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIGZyYW1lLT5wdHMg PSBwa3QtPnB0czsKCmZmX2dldF9idWZmZXIoKSBhbHJlYWR5IGZpbGxzIGZpZWxkcyBsaWtlIHRo aXMuCgo+ICsgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RFQlVHLCAiZnJhbWUtPnB0cyA9 ICVsZFxuIiwgZnJhbWUtPnB0cyk7Cj4gKwo+ICsgICAgICAgIGF2X2ltYWdlX2NvcHkoZnJhbWUt PmRhdGEsIGZyYW1lLT5saW5lc2l6ZSwgKGNvbnN0IHVpbnQ4X3QgKiopaW1nYi0+YSwKPiArICAg ICAgICAgICAgICAgICAgICAgIGltZ2ItPnMsIGF2Y3R4LT5waXhfZm10LAo+ICsgICAgICAgICAg ICAgICAgICAgICAgaW1nYi0+d1swXSwgaW1nYi0+aFswXSk7Cj4gKwo+ICsgICAgICAgIGN0eC0+ ZGVjb2RfZnJhbWVzKys7Cj4gKyAgICAgICAgKmdvdF9mcmFtZSA9IDE7Cj4gKwo+ICsjaWZkZWYg UFJJTlRfRlJBTUVfSU5GTwo+ICsgICAgICAgIHByaW50X2ZyYW1lX2luZm8oZnJhbWUpOwo+ICsj ZW5kaWYKPiArICAgICAgICBpbWdiLT5yZWxlYXNlKGltZ2IpOwo+ICsgICAgICAgIGltZ2IgPSBO VUxMOwo+ICsgICAgfSBlbHNlIHsKPiArICAgICAgICAqZ290X2ZyYW1lID0gMDsKPiArICAgIH0K PiArCj4gKyAgICBjdHgtPnBhY2tldF9jb3VudCsrOwo+ICsgICAgcmV0dXJuIHBrdC0+c2l6ZTsK PiArCj4gK0VSUjoKPiArICAgIGlmKGltZ2IpIHsKPiArICAgICAgICBpbWdiLT5yZWxlYXNlKGlt Z2IpOwo+ICsgICAgICAgIGltZ2IgPSBOVUxMOwo+ICsgICAgfQo+ICsgICAgKmdvdF9mcmFtZSA9 IDA7Cj4gKyAgICByZXR1cm4gLTE7CgpSZXR1cm4gcHJvcGVyIEFWRVJST1IgY29kZXMsIGhlcmUg YW5kIGV2ZXJ5d2hlcmUgZWxzZS4KCj4gK30KPiArCj4gKy8qKgo+ICsgKiBEZXN0cm95IGRlY29k ZXIKPiArICoKPiArICogQHBhcmFtIGF2Y3R4IGNvZGVjIGNvbnRleHQKPiArICogQHJldHVybiAw IG9uIHN1Y2Nlc3MKPiArICovCj4gK3N0YXRpYyBhdl9jb2xkIGludCBsaWJ4ZXZkX2Nsb3NlKEFW Q29kZWNDb250ZXh0ICphdmN0eCkKPiArewo+ICsgICAgWGV2ZENvbnRleHQgKmN0eCA9IGF2Y3R4 LT5wcml2X2RhdGE7Cj4gKyAgICBpZihjdHgtPmlkKSB7Cj4gKyAgICAgICAgeGV2ZF9kZWxldGUo Y3R4LT5pZCk7Cj4gKyAgICAgICAgY3R4LT5pZCA9IE5VTEw7Cj4gKyAgICB9Cj4gKwo+ICsgICAg cmV0dXJuIDA7Cj4gK30KPiArCj4gKyNkZWZpbmUgT0ZGU0VUKHgpIG9mZnNldG9mKFhldmRDb250 ZXh0LCB4KQo+ICsjZGVmaW5lIFZEIEFWX09QVF9GTEFHX1ZJREVPX1BBUkFNIHwgQVZfT1BUX0ZM QUdfREVDT0RJTkdfUEFSQU0KPiArCj4gKy8vIEB0b2RvIGNvbnNpZGVyIHVzaW5nIGZvbGxvd2lu ZyBvcHRpb25zICguL2ZmbXBlZyAtLWhlbHAgZGVjb2Rlcj1saWJ4ZXZkKQo+ICsvLwo+ICtzdGF0 aWMgY29uc3QgQVZPcHRpb24gb3B0aW9uc1tdID0gewo+ICsgICAgeyAieGV2ZC1wYXJhbXMiLCAg ICAgICAgICAgICAgICAib3ZlcnJpZGUgdGhlIHhldmQgY29uZmlndXJhdGlvbiB1c2luZyBhIDot c2VwYXJhdGVkIGxpc3Qgb2Yga2V5PXZhbHVlIHBhcmFtZXRlcnMiLCBPRkZTRVQoeGV2ZF9vcHRz KSwgQVZfT1BUX1RZUEVfRElDVCwgICB7IDAgfSwgMCwgMCwgVkQgfSwKPiArICAgIHsgTlVMTCB9 Cj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3QgQVZDbGFzcyB4ZXZkX2NsYXNzID0gewo+ICsgICAg LmNsYXNzX25hbWUgPSAibGlieGV2ZCIsCj4gKyAgICAuaXRlbV9uYW1lICA9IGF2X2RlZmF1bHRf aXRlbV9uYW1lLAo+ICsgICAgLm9wdGlvbiAgICAgPSBvcHRpb25zLAo+ICsgICAgLnZlcnNpb24g ICAgPSBMSUJBVlVUSUxfVkVSU0lPTl9JTlQsCj4gK307Cj4gKwo+ICsvLy8gQHRvZG8gcHJvdmlk ZSBpbXBsZW1lbnRhdGlvbgo+ICtzdGF0aWMgY29uc3QgQVZDb2RlY0RlZmF1bHQgeGV2ZF9kZWZh dWx0c1tdID0gewo+ICsgICAgeyAiYiIsICIwIiB9LAo+ICsgICAgeyBOVUxMIH0sCj4gK307Cj4g Kwo+ICtBVkNvZGVjIGZmX2xpYnhldmRfZGVjb2RlciA9IHsKPiArICAgIC5uYW1lICAgICAgICAg ICAgID0gImV2YyIsCj4gKyAgICAubG9uZ19uYW1lICAgICAgICA9IE5VTExfSUZfQ09ORklHX1NN QUxMKCJFVkMgLyBNUEVHLTUgRXNzZW50aWFsIFZpZGVvIENvZGluZyAoRVZDKSIpLAo+ICsgICAg LnR5cGUgICAgICAgICAgICAgPSBBVk1FRElBX1RZUEVfVklERU8sCj4gKyAgICAuaWQgICAgICAg ICAgICAgICA9IEFWX0NPREVDX0lEX0VWQywKPiArICAgIC5pbml0ICAgICAgICAgICAgID0gbGli eGV2ZF9pbml0LAo+ICsgICAgLmluaXRfc3RhdGljX2RhdGEgPSBsaWJ4ZXZkX2luaXRfc3RhdGlj X2RhdGEsCj4gKyAgICAuZGVjb2RlICAgICAgICAgICA9IGxpYnhldmRfZGVjb2RlLAo+ICsgICAg LmNsb3NlICAgICAgICAgICAgPSBsaWJ4ZXZkX2Nsb3NlLAo+ICsgICAgLnByaXZfZGF0YV9zaXpl ICAgPSBzaXplb2YoWGV2ZENvbnRleHQpLAo+ICsgICAgLnByaXZfY2xhc3MgICAgICAgPSAmeGV2 ZF9jbGFzcywKPiArICAgIC5kZWZhdWx0cyAgICAgICAgID0geGV2ZF9kZWZhdWx0cywKPiArICAg IC5jYXBhYmlsaXRpZXMgICAgID0gQVZfQ09ERUNfQ0FQX0RFTEFZIHwgQVZfQ09ERUNfQ0FQX0FV VE9fVEhSRUFEUyB8IEFWX0NPREVDX0NBUF9BVk9JRF9QUk9CSU5HLAoKTWlzc2luZyBBVl9DT0RF Q19DQVBfRFIxIHNpbmNlIHlvdSdyZSB1c2luZyBmZl9nZXRfYnVmZmVyKCkuCgo+ICsgICAgLndy YXBwZXJfbmFtZSAgICAgPSAibGlieGV2ZCIsCj4gK307Cj4gZGlmZiAtLWdpdCBhL2xpYmF2Y29k ZWMvbGlieGV2ZS5jIGIvbGliYXZjb2RlYy9saWJ4ZXZlLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0 NAo+IGluZGV4IDAwMDAwMDAwMDAuLmYzNGExZDZlZmQKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIv bGliYXZjb2RlYy9saWJ4ZXZlLmMKPiBAQCAtMCwwICsxLDExODUgQEAKPiArLyoKPiArICogbGli eGV2ZSBlbmNvZGVyCj4gKyAqIEVWQyAoTVBFRy01IEVzc2VudGlhbCBWaWRlbyBDb2RpbmcpIGVu Y29kaW5nIHVzaW5nIFhFVkUgTVBFRy01IEVWQyBlbmNvZGVyIGxpYnJhcnkKPiArICoKPiArICog Q29weXJpZ2h0IChDKSAyMDIxIERhd2lkIEtvemluc2tpIDxkLmtvemluc2tpQHNhbXN1bmcuY29t Pgo+ICsgKgo+ICsgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCj4gKyAqCj4gKyAqIEZG bXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKPiAr ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1 YmxpYwo+ICsgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uOyBlaXRoZXIKPiArICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5 b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4gKyAqCj4gKyAqIEZGbXBlZyBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ICsgKiBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlIEdOVQo+ICsgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y ZSBkZXRhaWxzLgo+ICsgKgo+ICsgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCj4gKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBG Rm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKPiArICogRm91bmRhdGlv biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjEx MC0xMzAxIFVTQQo+ICsgKi8KPiArCj4gKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQo+ICsjZGVmaW5l IFhFVkVfQVBJX0lNUE9SVFMgMQo+ICsjZW5kaWYKPiArCj4gKyNpbmNsdWRlIDx4ZXZlLmg+Cj4g Kwo+ICsjaW5jbHVkZSA8ZmxvYXQuaD4KPiArI2luY2x1ZGUgPHN0ZGxpYi5oPgo+ICsKPiArI2lu Y2x1ZGUgImxpYmF2dXRpbC9pbnRlcm5hbC5oIgo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL2NvbW1v bi5oIgo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL29wdC5oIgo+ICsjaW5jbHVkZSAibGliYXZ1dGls L3BpeGRlc2MuaCIKPiArI2luY2x1ZGUgImxpYmF2dXRpbC9waXhmbXQuaCIKPiArI2luY2x1ZGUg ImxpYmF2dXRpbC90aW1lLmgiCj4gKwo+ICsjaW5jbHVkZSAiYXZjb2RlYy5oIgo+ICsjaW5jbHVk ZSAiaW50ZXJuYWwuaCIKPiArI2luY2x1ZGUgInBhY2tldF9pbnRlcm5hbC5oIgo+ICsKPiArI2Rl ZmluZSBNQVhfQlNfQlVGICgxNioxMDI0KjEwMjQpCj4gKwo+ICsvKioKPiArICogRXJyb3IgY29k ZXMKPiArICovCj4gKyNkZWZpbmUgWEVWRV9QQVJBTV9CQURfTkFNRSAtMTAwCj4gKyNkZWZpbmUg WEVWRV9QQVJBTV9CQURfVkFMVUUgLTIwMAo+ICsKPiArLyoqCj4gKyAqIE1hY3JvIGZvciBlbGlt aW5hdGluZyB0aGUgdW51c2VkIHZhcmlhYmxlIHdhcm5pbmcKPiArICovCj4gKyNkZWZpbmUgVU5V U0VEKHgpICh2b2lkKSh4KQo+ICsKPiArLyoqCj4gKyAqIEVuY29kZXIgc3RhdGVzCj4gKyAqCj4g KyAqIFNUQVRFX0VOQ09ESU5HIC0gdGhlIGVuY29kZXIgcmVjZWl2ZXMgYW5kIHByb2Nlc3NlcyBp bnB1dCBmcmFtZXMKPiArICogU1RBVEVfQlVNUElORyAgLSB0aGVyZSBhcmUgbm8gbW9yZSBpbnB1 dCBmcmFtZXMsIGhvd2V2ZXIgdGhlIGVuY29kZXIgc3RpbGwgcHJvY2Vzc2VzIHByZXZpb3VzbHkg cmVjZWl2ZWQgZGF0YQo+ICsgKiBTVEFURV9TS0lQUElORyAtIHNraXBwaW5nIGlucHV0IGZyYW1l cwo+ICsgKi8KPiArdHlwZWRlZiBlbnVtIFN0YXRlIHsKPiArICAgIFNUQVRFX0VOQ09ESU5HLAo+ ICsgICAgU1RBVEVfQlVNUElORywKPiArICAgIFNUQVRFX1NLSVBQSU5HCj4gK30gU3RhdGU7Cj4g Kwo+ICsvKioKPiArICogVGhlIHN0cnVjdHVyZSBzdG9yZXMgYWxsIHRoZSBzdGF0ZSBhc3NvY2lh dGVkIHdpdGggdGhlIGluc3RhbmNlIG9mIFhldmUgTVBFRy01IEVWQyBlbmNvZGVyCj4gKyAqIFRo ZSBmaXJzdCBmaWVsZCBpcyBhIHBvaW50ZXIgdG8gYW4gQVZDbGFzcyBzdHJ1Y3QgKEBzZWUgaHR0 cHM6Ly9mZm1wZWcub3JnL2RveHlnZW4vdHJ1bmsvc3RydWN0QVZDbGFzcy5odG1sI2RldGFpbHMp Lgo+ICsgKi8KPiArdHlwZWRlZiBzdHJ1Y3QgWGV2ZUNvbnRleHQgewo+ICsgICAgY29uc3QgQVZD bGFzcyAqY2xhc3M7Cj4gKwo+ICsgICAgWEVWRSBpZDsgICAgICAgIC8vIFhFVkUgaW5zdGFuY2Ug aWRlbnRpZmllcgo+ICsgICAgWEVWRV9DRFNDIGNkc2M7IC8vIGNvZGluZyBwYXJhbWV0ZXJzIGku ZSBwcm9maWxlLCB3aWR0aCAmIGhlaWdodCBvZiBpbnB1dCBmcmFtZSwgbnVtIG9mIHRoZXJhZHMs IGZyYW1lIHJhdGUgLi4uCj4gKyAgICBYRVZFX0JJVEIgYml0YjsgLy8gYml0c3RyZWFtIGJ1ZmZl ciAob3V0cHV0KQo+ICsgICAgWEVWRV9TVEFUIHN0YXQ7IC8vIGVuY29kaW5nIHN0YXR1cyAob3V0 cHV0KQo+ICsgICAgWEVWRV9JTUdCIGltZ2I7IC8vIGltYWdlIGJ1ZmZlciAoaW5wdXQpCj4gKwo+ ICsgICAgU3RhdGUgc3RhdGU7IC8vIGVuY29kZXIgc3RhdGUgKHNraXBwaW5nLCBlbmNvZGluZywg YnVtcGluZykKPiArCj4gKyAgICBpbnQgZW5jb2RfZnJhbWVzOyAgIC8vIG51bSBvZiBlbmNvZGVk IGZyYW1lcwo+ICsgICAgZG91YmxlIGJ5dGVzX3RvdGFsOyAvLyBlbmNvZGVkIGJpdHN0cmVhbSBi eXRlIHNpemUKPiArICAgIGRvdWJsZSBiaXRyYXRlOyAgICAgLy8gYml0cyBwZXIgc2Vjb25kCj4g KyAgICBpbnQgcGFja2V0X2NvdW50OyAgIC8vIG51bSBvZiBwYWNrZXRzIGNyZWF0ZWQgYnkgZW5j b2Rlcgo+ICsKPiArICAgIC8vIENocm9tYSBzdWJzYW1wbGluZwo+ICsgICAgaW50IHdpZHRoX2x1 bWE7Cj4gKyAgICBpbnQgaGVpZ2h0X2x1bWE7Cj4gKyAgICBpbnQgd2lkdGhfY2hyb21hOwo+ICsg ICAgaW50IGhlaWdodF9jaHJvbWE7Cj4gKwo+ICsgICAgaW50IHByb2ZpbGVfaWQ7ICAvLyBlbmNv ZGVyIHByb2ZpbGUgKG1haW4sIGJhc2VsaW5lKQo+ICsgICAgaW50IHByZXNldF9pZDsgICAvLyBw cmVzZXQgb2YgeGV2ZSAoIGZhc3QsIG1lZGl1bSwgc2xvdywgcGxhY2VibykKPiArICAgIGludCB0 dW5lX2lkOyAgICAgLy8gdHVuZSBvZiB4ZXZlIChwc25yLCB6ZXJvbGF0ZW5jeSkKPiArICAgIGlu dCBpbnB1dF9kZXB0aDsgLy8gaW5wdXQgYml0LWRlcHRoOiA4Yml0LCAxMGJpdAo+ICsgICAgaW50 IGhhc2g7Cj4gKwo+ICsgICAgLyogdmFyaWFibGVzIGZvciBpbnB1dCBwYXJhbWV0ZXIgKi8KPiAr ICAgIGNoYXIgKiBvcF9wcmVzZXQ7Cj4gKyAgICBjaGFyICogb3BfdHVuZTsKPiArICAgIGludCAg ICBvcF9xcDsKPiArICAgIGludCAgICBvcF9jcmY7Cj4gKwo+ICsgICAgLy8gY29uZmlndXJhdGlv biBwYXJhbWV0ZXJzCj4gKyAgICAvLyB4ZXZlIGNvbmZpZ3VyYXRpb24gcmVhZCBmcm9tIGEgOi1z ZXBhcmF0ZWQgbGlzdCBvZiBrZXk9dmFsdWUgcGFyYW1ldGVycwo+ICsgICAgQVZEaWN0aW9uYXJ5 ICp4ZXZlX3BhcmFtczsKPiArfSBYZXZlQ29udGV4dDsKPiArCj4gKy8qKgo+ICsgKiBHZXRzIFhl dmUgZW5jb2RlciBwcmUtZGVmaW5lZCBwcm9maWxlCj4gKyAqCj4gKyAqIEBwYXJhbSBwcm9maWxl IHN0cmluZyBkZXNjcmliaW5nIFhldmUgZW5jb2RlciBwcm9maWxlIChiYXNlbGluZSwgbWFpbikK PiArICogQHJldHVybiBYRVZFIHByZS1kZWZpbmVkIHByb2ZpbGUgb24gc3VjY2VzcywgbmVnYXRp dmUgdmFsdWUgb24gZmFpbHVyZQo+ICsgKi8KPiArc3RhdGljIGludCBnZXRfcHJvZmlsZV9pZChj b25zdCBjaGFyICogcHJvZmlsZSkKPiArewo+ICsgICAgaWYgKCFzdHJjbXAocHJvZmlsZSwgImJh c2VsaW5lIikpIHsKPiArICAgICAgICByZXR1cm4gWEVWRV9QUk9GSUxFX0JBU0VMSU5FOwo+ICsg ICAgfSBlbHNlIGlmICghc3RyY21wKHByb2ZpbGUsICJtYWluIikpIHsKPiArICAgICAgICByZXR1 cm4gWEVWRV9QUk9GSUxFX01BSU47Cj4gKyAgICB9IGVsc2Ugewo+ICsgICAgICAgIHJldHVybiAt MTsKPiArICAgIH0KPiArfQo+ICsKPiArLyoqCj4gKyAqIEdldHMgWGV2ZSBwcmUtZGVmaW5lZCBw cmVzZXQKPiArICoKPiArICogQHBhcmFtIHByZXNldCBzdHJpbmcgZGVzY3JpYmluZyBYZXZlIGVu Y29kZXIgcHJlc2V0IChmYXN0LCBtZWRpdW0sIHNsb3csIHBsYWNlYm8gKQo+ICsgKiBAcmV0dXJu IFhFVkUgcHJlLWRlZmluZWQgcHJvZmlsZSBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvbiBm YWlsdXJlCj4gKyAqLwo+ICtzdGF0aWMgaW50IGdldF9wcmVzZXRfaWQoY29uc3QgY2hhciAqIHBy ZXNldCkKPiArewo+ICsgICAgaWYoKCFzdHJjbXAocHJlc2V0LCAiZmFzdCIpKSkgewo+ICsgICAg ICAgIHJldHVybiBYRVZFX1BSRVNFVF9GQVNUOwo+ICsgICAgfSBlbHNlIGlmICghc3RyY21wKHBy ZXNldCwgIm1lZGl1bSIpKSB7Cj4gKyAgICAgICAgcmV0dXJuIFhFVkVfUFJFU0VUX01FRElVTTsK PiArICAgIH0gZWxzZSBpZiAoIXN0cmNtcChwcmVzZXQsICJzbG93IikpIHsKPiArICAgICAgICBy ZXR1cm4gWEVWRV9QUkVTRVRfU0xPVzsKPiArICAgIH0gZWxzZSBpZiAoIXN0cmNtcChwcmVzZXQs ICJwbGFjZWJvIikpIHsKPiArICAgICAgICByZXR1cm4gWEVWRV9QUkVTRVRfUExBQ0VCTzsKPiAr ICAgIH0gZWxzZSB7Cj4gKyAgICAgICAgcmV0dXJuIC0xOwo+ICsgICAgfQo+ICt9Cj4gKwo+ICsv KioKPiArICogR2V0cyBYZXZlIHByZS1kZWZpbmVkIHR1bmUgaWQKPiArICoKPiArICogQHBhcmFt IHByZXNldCBzdHJpbmcgZGVzY3JpYmluZyBYZXZlIGVuY29kZXIgcHJlc2V0IChmYXN0LCBtZWRp dW0sIHNsb3csIHBsYWNlYm8gKQo+ICsgKiBAcmV0dXJuIFhFVkUgcHJlLWRlZmluZWQgcHJvZmls ZSBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvbiBmYWlsdXJlCj4gKyAqLwo+ICtzdGF0aWMg aW50IGdldF90dW5lX2lkKGNvbnN0IGNoYXIgKiB0dW5lKQo+ICt7Cj4gKyAgICBpZigoIXN0cmNt cCh0dW5lLCAicHNuciIpKSkgewo+ICsgICAgICAgIHJldHVybiBYRVZFX1RVTkVfUFNOUjsKPiAr ICAgIH0gZWxzZSBpZiAoIXN0cmNtcCh0dW5lLCAiemVyb2xhdGVuY3kiKSkgewo+ICsgICAgICAg IHJldHVybiBYRVZFX1RVTkVfWkVST0xBVEVOQ1k7Cj4gKyAgICB9IGVsc2Ugewo+ICsgICAgICAg IHJldHVybiAtMTsKPiArICAgIH0KPiArfQo+ICsKPiArc3RhdGljIGludCBrYnBzX3N0cl90b19p bnQoY2hhciAqc3RyKQo+ICt7Cj4gKyAgICBpbnQga2JwcyA9IDA7Cj4gKyAgICBpZiAoc3RyY2hy KHN0ciwgJ0snKSB8fCBzdHJjaHIoc3RyLCAnaycpKSB7Cj4gKyAgICAgICAgY2hhciAqdG1wID0g c3RydG9rKHN0ciwgIktrICIpOwo+ICsgICAgICAgIGticHMgPSAoaW50KShhdG9mKHRtcCkpOwo+ ICsgICAgfSBlbHNlIGlmIChzdHJjaHIoc3RyLCAnTScpIHx8IHN0cmNocihzdHIsICdtJykpIHsK PiArICAgICAgICBjaGFyICp0bXAgPSBzdHJ0b2soc3RyLCAiTW0gIik7Cj4gKyAgICAgICAga2Jw cyA9IChpbnQpKGF0b2YodG1wKSAqIDEwMDApOwo+ICsgICAgfSBlbHNlIHsKPiArICAgICAgICBr YnBzID0gYXRvaShzdHIpOwo+ICsgICAgfQo+ICsgICAgcmV0dXJuIGticHM7Cj4gK30KPiArCj4g Ky8qKgo+ICsgKiBQYXJzZSA6LXNlcGFyYXRlZCBsaXN0IG9mIGtleT12YWx1ZSBwYXJhbWV0ZXJz Cj4gKyAqCj4gKyAqIEBwYXJhbSBrZXkKPiArICogQHBhcmFtIHZhbHVlCj4gKyAqIEBwYXJhbSB4 ZSBwb2ludGVyIHRvIHRoZSBzdHJ1Y3R1cmUgdGhhdCBzdG9yZXMgYWxsIHRoZSBzdGF0ZSBhc3Nv Y2lhdGVkIHdpdGgKPiArICogICAgICAgICAgIHRoZSBpbnN0YW5jZSBvZiBYZXZlIE1QRUctNSBF VkMgZW5jb2Rlcgo+ICsgKiBAcGFyYW0gcGFyYW0gY29kaW5nIHBhcmFtZXRlcnMKPiArICoKPiAr ICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG9uIGZhaWx1cmUKPiArICov Cj4gK3N0YXRpYyBpbnQgcGFyc2VfeGV2ZV9wYXJhbXMoY29uc3QgY2hhcioga2V5LCBjb25zdCBj aGFyKiB2YWx1ZSwgWGV2ZUNvbnRleHQqIHhlLCBYRVZFX1BBUkFNKiBwYXJhbSkKPiArewo+ICsg ICAgaWYoIWtleSkgewo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJJdmFs aWQgYXJndW1lbnQ6IGtleSBzdHJpbmcgaXMgTlVMTFxuIik7Cj4gKyAgICAgICAgcmV0dXJuIFhF VkVfUEFSQU1fQkFEX1ZBTFVFOwo+ICsgICAgfQo+ICsgICAgaWYoIXZhbHVlKSB7Cj4gKyAgICAg ICAgaWYgKHN0cmNtcChrZXksICJoYXNoIikgPT0gMCkgewo+ICsgICAgICAgICAgICB4ZS0+aGFz aCA9IDE7Cj4gKyAgICAgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfSU5GTywgImVtYmVkZGlu ZyBzaWduYXR1cmUgaXMgZW5hYmxlZFxuIik7Cj4gKyAgICAgICAgfSBlbHNlIHsKPiArICAgICAg ICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIkl2YWxpZCBhcmd1bWVudDogdmFsdWUg c3RyaW5nIGlzIE5VTExcbiIpOwo+ICsgICAgICAgICAgICByZXR1cm4gWEVWRV9QQVJBTV9CQURf VkFMVUU7Cj4gKyAgICAgICAgfQo+ICsgICAgfSBlbHNlIGlmIChzdHJjbXAoa2V5LCAidmJ2LWJ1 ZnNpemUiKSA9PSAwICkgewo+ICsgICAgICAgIHBhcmFtLT52YnZfYnVmc2l6ZSA9IGticHNfc3Ry X3RvX2ludCgoY2hhciopdmFsdWUpOwo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfSU5G TywgIlZCViBidWZmZXIgc2l6ZTogJWRrYml0c1xuIiwgcGFyYW0tPnZidl9idWZzaXplKTsKPiAr ICAgIH0gZWxzZSBpZiAoc3RyY21wKGtleSwgInJjLXR5cGUiKSA9PSAwICkgewo+ICsgICAgICAg IGludCByY190eXBlID0gYXRvaSh2YWx1ZSk7Cj4gKyAgICAgICAgaWYocmNfdHlwZSA8IDAgfHwg cmNfdHlwZSA+IDIpIHsKPiArICAgICAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwg IlJhdGUgY29udHJvbCB0eXBlIFsgMChyY19vZmYpIC8gMShDQlIpIF0gYmFkIHZhbHVlOiAlZFxu IiwgcmNfdHlwZSk7Cj4gKyAgICAgICAgICAgIHJldHVybiBYRVZFX1BBUkFNX0JBRF9WQUxVRTsK PiArICAgICAgICB9Cj4gKyAgICAgICAgcGFyYW0tPnJjX3R5cGUgPSByY190eXBlOwo+ICsgICAg ICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfSU5GTywgIlJhdGUgY29udHJvbCB0eXBlIFsgMChyY19v ZmYpIC8gMShDQlIpIF0gOiAlZFxuIiwgcmNfdHlwZSk7Cj4gKyAgICB9IGVsc2UgaWYgKHN0cmNt cChrZXksICJiZnJhbWVzIikgPT0gMCApIHsKPiArICAgICAgICBpbnQgYmZyYW1lcyA9IGF0b2ko dmFsdWUpOwo+ICsgICAgICAgIGlmKGJmcmFtZXMgPCAwKSB7Cj4gKyAgICAgICAgICAgIGF2X2xv ZyhOVUxMLCBBVl9MT0dfRVJST1IsICJiZnJhbWVzOiBiYWQgdmFsdWU6ICVkXG4iLCBiZnJhbWVz KTsKPiArICAgICAgICAgICAgcmV0dXJuIFhFVkVfUEFSQU1fQkFEX1ZBTFVFOwo+ICsgICAgICAg IH0KPiArICAgICAgICBwYXJhbS0+YmZyYW1lcyA9IGJmcmFtZXM7Cj4gKyAgICAgICAgYXZfbG9n KE5VTEwsIEFWX0xPR19JTkZPLCAiYmZyYW1lcyA6ICVkXG4iLCBiZnJhbWVzKTsKPiArICAgIH0g ZWxzZSBpZiAoc3RyY21wKGtleSwgInByb2ZpbGUiKSA9PSAwICkgewo+ICsgICAgICAgIGNvbnN0 IGNoYXIqIHByb2ZpbGUgPSB2YWx1ZTsKPiArICAgICAgICBpbnQgcHJvZmlsZV9pZDsKPiArICAg ICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0lORk8sICJwcm9maWxlIChiYXNlbGluZSwgbWFpbik6 ICVzXG4iLCBwcm9maWxlKTsKPiArICAgICAgICBwcm9maWxlX2lkID0gZ2V0X3Byb2ZpbGVfaWQo cHJvZmlsZSk7Cj4gKyAgICAgICAgaWYgKHByb2ZpbGVfaWQgPCAwKSB7Cj4gKyAgICAgICAgICAg IGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJJbnZhbGlkIHhldmUgcGFyYW06IHByb2ZpbGUo JXMpXG4iLCBwcm9maWxlKTsKPiArICAgICAgICAgICAgcmV0dXJuIFhFVkVfUEFSQU1fQkFEX1ZB TFVFOwo+ICsgICAgICAgIH0KPiArICAgICAgICB4ZS0+cHJvZmlsZV9pZCA9IHByb2ZpbGVfaWQ7 Cj4gKyAgICB9IGVsc2UgaWYgKHN0cmNtcChrZXksICJwcmVzZXQiKSA9PSAwICkgewo+ICsgICAg ICAgIGNvbnN0IGNoYXIqIHByZXNldCA9IHZhbHVlOwo+ICsgICAgICAgIGludCBwcmVzZXRfaWQ7 Cj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19JTkZPLCAiUHJlc2V0IG9mIHhldmUgKGZh c3QsIG1lZGl1bSwgc2xvdywgcGxhY2Vibyk6ICVzXG4iLCBwcmVzZXQpOwo+ICsgICAgICAgIHBy ZXNldF9pZCA9IGdldF9wcmVzZXRfaWQocHJlc2V0KTsKPiArICAgICAgICBpZiggcHJlc2V0X2lk IDwgMCkgewo+ICsgICAgICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiSW52YWxp ZCB4ZXZlIHBhcmFtOiBwcmVzZXQoJXMpXG4iLCBwcmVzZXQpOwo+ICsgICAgICAgICAgICByZXR1 cm4gWEVWRV9QQVJBTV9CQURfVkFMVUU7Cj4gKyAgICAgICAgfQo+ICsgICAgICAgIHhlLT5wcmVz ZXRfaWQgPSBwcmVzZXRfaWQ7Cj4gKyAgICB9IGVsc2UgaWYgKHN0cmNtcChrZXksICJ0dW5lIikg PT0gMCApIHsKPiArICAgICAgICBjb25zdCBjaGFyKiB0dW5lID0gdmFsdWU7Cj4gKyAgICAgICAg aW50IHR1bmVfaWQ7Cj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19JTkZPLCAiVHVuZSBv ZiB4ZXZlIChwc25yLCB6ZXJvbGF0ZW5jeSk6ICVzXG4iLCB0dW5lKTsKPiArICAgICAgICB0dW5l X2lkPSBnZXRfdHVuZV9pZCh0dW5lKTsKPiArICAgICAgICBpZiggdHVuZV9pZCA8IDApIHsKPiAr ICAgICAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIkludmFsaWQgeGV2ZSBwYXJh bTogdHVuZSglcylcbiIsIHR1bmUpOwo+ICsgICAgICAgICAgICByZXR1cm4gWEVWRV9QQVJBTV9C QURfVkFMVUU7Cj4gKyAgICAgICAgfQo+ICsgICAgICAgIHhlLT50dW5lX2lkID0gdHVuZV9pZDsK PiArICAgIH0gZWxzZSBpZiAoc3RyY21wKGtleSwgImJpdHJhdGUiKSA9PSAwICkgewo+ICsgICAg ICAgIHBhcmFtLT5iaXRyYXRlID0ga2Jwc19zdHJfdG9faW50KChjaGFyICopdmFsdWUpOwo+ICsg ICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfSU5GTywgIkJpdHJhdGUgPSAlZGticHNcbiIsIHBh cmFtLT5iaXRyYXRlKTsKPiArICAgIH0gZWxzZSBpZiAoc3RyY21wKGtleSwgInEiKSA9PSAwIHx8 IHN0cmNtcChrZXksICJxcCIpID09IDApIHsKPiArICAgICAgICBpbnQgcXAgPSBhdG9pKHZhbHVl KTsKPiArICAgICAgICBpZihxcCA8IDAgfHwgcXAgPiA1MSkgewo+ICsgICAgICAgICAgICBhdl9s b2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCBRUCB2YWx1ZSAoMH41MSkgOiVkXG4iLCBx cCk7Cj4gKyAgICAgICAgICAgIHJldHVybiBYRVZFX1BBUkFNX0JBRF9WQUxVRTsKPiArICAgICAg ICB9Cj4gKyAgICAgICAgcGFyYW0tPnFwID0gcXA7Cj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFW X0xPR19JTkZPLCAiUVAgdmFsdWUgKDB+NTEpOiAlZFxuIiwgcGFyYW0tPnFwKTsKPiArICAgIH0g ZWxzZSB7Cj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIlVua25vd24geGV2 ZSBjb2RlYyBvcHRpb246ICVzXG4iLCBrZXkpOwo+ICsgICAgICAgIHJldHVybiBYRVZFX1BBUkFN X0JBRF9OQU1FOwo+ICsgICAgfQo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gKy8qKgo+ICsg KiBDb252ZXJ0IGZmbXBlZyBwaXhlbCBmb3JtYXQgKEFWUGl4ZWxGb3JtYXQpIHRvIFhFVkUgcHJl LWRlZmluZWQgY29sb3IgZm9ybWF0Cj4gKyAqCj4gKyAqIEBwYXJhbVtpbl0gIHB4X2ZtdCBwaXhl bCBmb3JtYXQgKEBzZWUgaHR0cHM6Ly9mZm1wZWcub3JnL2RveHlnZW4vdHJ1bmsvcGl4Zm10Xzho Lmh0bWwjYTlhOGUzMzVjZjNiZTQ3MjA0MmJjOWYwY2Y4MGNkNGM1KQo+ICsgKiBAcGFyYW1bb3V0 XSBjb2xvcl9mb3JtYXQgWEVWRSBwcmUtZGVmaW5lZCBjb2xvciBmb3JtYXQgKEBzZWUgeGV2ZS5o KQo+ICsgKiBAcGFyYW1bb3V0XSBiaXRfZGVwdGggYml0IGRlcHRoCj4gKyAqCj4gKyAqIEByZXR1 cm4gMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvbiBmYWlsdXJlCj4gKyAqLwo+ICtzdGF0 aWMgaW50IGdldF9waXhfZm10KGVudW0gQVZQaXhlbEZvcm1hdCBwaXhfZm10LCBpbnQgKmNvbG9y X2Zvcm1hdCwgaW50ICpiaXRfZGVwdGgpCj4gK3sKPiArICAgIHN3aXRjaCAocGl4X2ZtdCkgewo+ ICsgICAgY2FzZSBBVl9QSVhfRk1UX1lVVjQyMFA6Cj4gKyAgICAgICAgKmNvbG9yX2Zvcm1hdCA9 IFhFVkVfQ0ZfWUNCQ1I0MjA7Cj4gKyAgICAgICAgKmJpdF9kZXB0aCA9IDg7Cj4gKyAgICAgICAg YnJlYWs7Cj4gKyAgICBjYXNlIEFWX1BJWF9GTVRfWVVWNDIyUDoKPiArICAgICAgICAqY29sb3Jf Zm9ybWF0ID0gWEVWRV9DRl9ZQ0JDUjQyMjsKPiArICAgICAgICAqYml0X2RlcHRoID0gODsKPiAr ICAgICAgICBicmVhazsKPiArICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVY0NDRQOgo+ICsgICAgICAg ICpjb2xvcl9mb3JtYXQgPSBYRVZFX0NGX1lDQkNSNDQ0Owo+ICsgICAgICAgICpiaXRfZGVwdGgg PSA4Owo+ICsgICAgICAgIGJyZWFrOwo+ICsgICAgY2FzZSBBVl9QSVhfRk1UX1lVVjQyMFAxMDoK PiArICAgICAgICAqY29sb3JfZm9ybWF0ID0gWEVWRV9DRl9ZQ0JDUjQyMDsKPiArICAgICAgICAq Yml0X2RlcHRoID0gMTA7Cj4gKyAgICAgICAgYnJlYWs7Cj4gKyAgICBjYXNlIEFWX1BJWF9GTVRf WVVWNDIyUDEwOgo+ICsgICAgICAgICpjb2xvcl9mb3JtYXQgPSBYRVZFX0NGX1lDQkNSNDIyOwo+ ICsgICAgICAgICpiaXRfZGVwdGggPSAxMDsKPiArICAgICAgICBicmVhazsKPiArICAgIGNhc2Ug QVZfUElYX0ZNVF9ZVVY0NDRQMTA6Cj4gKyAgICAgICAgKmNvbG9yX2Zvcm1hdCA9IFhFVkVfQ0Zf WUNCQ1I0NDQ7Cj4gKyAgICAgICAgKmJpdF9kZXB0aCA9IDEwOwo+ICsgICAgICAgIGJyZWFrOwo+ ICsgICAgZGVmYXVsdDoKPiArICAgICAgICAqY29sb3JfZm9ybWF0ID0gWEVWRV9DRl9VTktOT1dO Owo+ICsgICAgICAgIHJldHVybiAtMTsKPiArICAgIH0KPiArICAgIHJldHVybiAwOwo+ICt9Cj4g Kwo+ICsvKioKPiArICogVGhlIGZ1bmN0aW9uIHJldHVybnMgYSBwb2ludGVyIHRvIHZhcmlhYmxl IG9mIHR5cGUgWEVWRV9DRFNDLgo+ICsgKiBYRVZFX0NEU0MgY29udGFpbnMgYWxsIGVuY29kZXIg cGFyYW1ldGVycyB0aGF0IHNob3VsZCBiZSBpbml0aWFsaXplZCBiZWZvcmUgaXRzIHVzZS4KPiAr ICoKPiArICogVGhlIGZpZWxkIHZhbHVlcyBvZiB0aGUgWEVWRV9DRFNDIHN0cnVjdHVyZSBhcmUg cG9wdWxhdGVkIGJhc2VkIG9uOgo+ICsgKiAtIHRoZSBjb3JyZXNwb25kaW5nIGZpZWxkIHZhbHVl cyBvZiB0aGUgQXZDb2RlY0NvbmV0eHQgc3RydWN0dXJlLAo+ICsgKiAtIHRoZSB4ZXZlIGVuY29k ZXIgc3BlY2lmaWMgb3B0aW9uIHZhbHVlcywKPiArICogICAodGhlIGZ1bGwgbGlzdCBvZiBvcHRp b25zIGF2YWlsYWJsZSBmb3IgeGV2ZSBlbmNvZGVyIGlzIGRpc3BsYXllZCBhZnRlciBleGVjdXRp bmcgdGhlIGNvbW1hbmQgLi9mZm1wZWcgLS1oZWxwIGVuY29kZXIgPSBsaWJ4ZXZlKQo+ICsgKiAt IGFuZCB0aGUgeGV2ZSBlbmNvZGVyIG9wdGlvbnMgc3BlY2lmaWVkIGFzIGEgbGlzdCBvZiBrZXkg dmFsdWUgcGFpcnMgZm9sbG93aW5nIHhldmUtcGFyYW1zIG9wdGlvbgo+ICsgKgo+ICsgKiBPcmRl ciBvZiBpbnB1dCBwcm9jZXNzaW5nIGFuZCBwb3B1bGF0aW5nIHRoZSBYRVZFX0NEU0Mgc3RydWN0 dXJlCj4gKyAqIDEuIGZpcnN0LCB0aGUgY29ycmVzcG9uZGluZyBmaWVsZHMgb2YgdGhlIEFWQ29k ZWNDb250ZXh0IHN0cnVjdHVyZSBhcmUgcHJvY2Vzc2VkLCAoaS5lIC1waXhfZm10IHl1djQyMHAg LXM6diAxOTIweDEwODAgLXIgMzAgLXByb2ZpbGU6diAwKQo+ICsgKiAyLiB0aGVuIHhldmUtc3Bl Y2lmaWMgb3B0aW9ucyBhZGRlZCBhcyBBVk9wdGlvbiB0byB0aGUgeGV2ZSBBVkNvZGVjIGltcGxl bWVudGF0aW9uIChpLmUgLXRocmVhZHNfY250IDMgLXByZXNldCAwKQo+ICsgKiAzLiBmaW5hbGx5 LCB0aGUgb3B0aW9ucyBzcGVjaWZpZWQgYWZ0ZXIgdGhlIHhldmUtcGFyYW1zIG9wdGlvbiBhcyB0 aGUgcGFyYW1ldGVyIGxpc3Qgb2YgdHlwZSBrZXkgdmFsdWUgYXJlIHByb2Nlc3NlZCAoaS5lIC14 ZXZlLXBhcmFtcyAibT0yOnE9MTciKQo+ICsgKgo+ICsgKiBUaGVyZSBhcmUgb3B0aW9ucyB0aGF0 IGNhbiBiZSBzZXQgaW4gZGlmZmVyZW50IHdheXMuIEluIHRoaXMgY2FzZSwgcGxlYXNlIGZvbGxv dyB0aGUgYWJvdmUtbWVudGlvbmVkIG9yZGVyIG9mIHByb2Nlc3NpbmcuCj4gKyAqIFRoZSBtb3N0 IHJlY2VudCBhc3NpZ25tZW50cyBvdmVyd3JpdGUgdGhlIHByZXZpb3VzIHZhbHVlcy4KPiArICoK PiArICogQHBhcmFtIGN0eCBjb2RlYyBjb250ZXh0Cj4gKyAqIEBwYXJhbSBjZHNjIGNvbnRhaW5z IGFsbCBlbmNvZGVyIHBhcmFtZXRlcnMgdGhhdCBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgYmVmb3Jl IGl0cyB1c2UuCj4gKyAqCj4gKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJv ciBjb2RlIG9uIGZhaWx1cmUKPiArICovCj4gK3N0YXRpYyBpbnQgZ2V0X2NvbmYoY29uc3QgQVZD b2RlY0NvbnRleHQgKmN0eCwgWEVWRV9DRFNDICpjZHNjKQo+ICt7Cj4gKyAgICBYRVZFX1BBUkFN ICogcGFyYW0gPSBOVUxMOwo+ICsgICAgWGV2ZUNvbnRleHQgKnhlID0gTlVMTDsKPiArICAgIGlu dCBjb2xvcl9mb3JtYXQ7Cj4gKyAgICBpbnQgY3B1X2NvdW50ID0gYXZfY3B1X2NvdW50KCk7Cj4g KyAgICBpbnQgcmV0Owo+ICsKPiArICAgIHhlID0gY3R4LT5wcml2X2RhdGE7Cj4gKyAgICBwYXJh bSA9ICZjZHNjLT5wYXJhbTsKPiArCj4gKyAgICAvKiBzZXQgZGVmdWFsdCB2YWx1ZSBpbiBwcml2 X2RhdGEgKi8KPiArICAgIG1lbXNldChjZHNjLCAwLCBzaXplb2YoWEVWRV9DRFNDKSk7Cj4gKyAg ICB4ZS0+aGFzaCA9IDA7Cj4gKwo+ICsgICAgLyogc2V0IGRlZmF1bHQgcGFyYW1ldGVycyAqLwo+ ICsgICAgcmV0ID0geGV2ZV9wYXJhbV9kZWZhdWx0KHBhcmFtKTsKPiArICAgIGlmIChYRVZFX0ZB SUxFRChyZXQpKSB7Cj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgImNhbm5v dCBzZXRfZGVmYXVsdCBwYXJhbWV0ZXJcbiIpOwo+ICsgICAgICAgIGdvdG8gRVJSOwo+ICsgICAg fQo+ICsKPiArICAgIC8qIHJlYWQgb3B0aW9ucyBmcm9tIEFWQ29kZWNDb250ZXh0ICAqLwo+ICsg ICAgaWYoY3R4LT53aWR0aCA+IDApIHsKPiArICAgICAgICBwYXJhbS0+dyA9IGN0eC0+d2lkdGg7 Cj4gKyAgICAgICAgeGUtPndpZHRoX2x1bWEgPSBjdHgtPndpZHRoOwo+ICsgICAgfQo+ICsKPiAr ICAgIGlmKGN0eC0+aGVpZ2h0ID4gMCkgewo+ICsgICAgICAgIHBhcmFtLT5oID0gY3R4LT5oZWln aHQ7Cj4gKyAgICAgICAgeGUtPmhlaWdodF9sdW1hID0gY3R4LT5oZWlnaHQ7Cj4gKyAgICB9Cj4g Kwo+ICsgICAgaWYoY3R4LT5mcmFtZXJhdGUubnVtID4gMCkgewo+ICsgICAgICAgIC8qIEB0b2Rv OiBmcHMgY2FuIGJlIGZsb2F0IG51bWJlciwgYnV0IHhldmUgQVBJIGRvZXNuJ3Qgc3VwcG9ydCBp dCAqLwo+ICsgICAgICAgIHBhcmFtLT5mcHMgPSAoaW50KSgoKGZsb2F0KWN0eC0+ZnJhbWVyYXRl Lm51bSAvIGN0eC0+ZnJhbWVyYXRlLmRlbikgKyAwLjUpOwo+ICsgICAgfQo+ICsKPiArICAgIGlm KGN0eC0+Z29wX3NpemUgPj0gMCkgeyAvKiBrZXktZnJhbWUgaW50ZXJ2YWwgKi8KPiArICAgICAg ICBwYXJhbS0+a2V5aW50ID0gY3R4LT5nb3Bfc2l6ZTsgLy8gMDogb25seSBvbmUgSS1mcmFtZSBh dCB0aGUgZmlyc3QgdGltZTsgMTogZXZlcnkgZnJhbWUgaXMgY29kZWQgaW4gSS1mcmFtZQo+ICsg ICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfSU5GTywgIkdPUCBzaXplIChrZXktZnJhbWUgaW50 ZXJ2YWwpOiAlZFxuIiwgY3R4LT5nb3Bfc2l6ZSk7Cj4gKyAgICB9Cj4gKyAgICBpZiAoY3R4LT5t YXhfYl9mcmFtZXMgPT0gMCB8fCBjdHgtPm1heF9iX2ZyYW1lcyA9PSAxIHx8IGN0eC0+bWF4X2Jf ZnJhbWVzID09IDMgfHwKPiArICAgICAgICAgICAgY3R4LT5tYXhfYl9mcmFtZXMgPT0gNyB8fCBj dHgtPm1heF9iX2ZyYW1lcyA9PSAxNSkgeyAvKiBudW1iZXIgb2YgYi1mcmFtZSAqLwo+ICsgICAg ICAgIHBhcmFtLT5iZnJhbWVzID0gY3R4LT5tYXhfYl9mcmFtZXM7Cj4gKyAgICAgICAgYXZfbG9n KE5VTEwsIEFWX0xPR19JTkZPLCAiTnVtYmVyIG9mIG1heCBiLWZyYW1lczogJWRcbiIsIGN0eC0+ bWF4X2JfZnJhbWVzKTsKPiArICAgIH0gZWxzZSB7Cj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFW X0xPR19FUlJPUiwgIkluY29ycmVjdCB2YWx1ZSBmb3IgbWF4aW11bSBudW1iZXIgb2YgQiBmcmFt ZXM6ICglZCkgXG4iCj4gKyAgICAgICAgICAgICAgICJBY2NlcHRhYmxlIHZhbHVlcyBmb3IgYmYg b3B0aW9uIChtYXhpbXVtIG51bWJlciBvZiBCIGZyYW1lcykgYXJlIDAsMSwzLDcgb3IgMTVcbiIs IGN0eC0+bWF4X2JfZnJhbWVzKTsKPiArICAgICAgICBnb3RvIEVSUjsKPiArICAgIH0KPiArCj4g KyAgICBpZiAoY3R4LT5sZXZlbCA+PSAwKSB7Cj4gKyAgICAgICAgcGFyYW0tPmxldmVsX2lkYyA9 IGN0eC0+bGV2ZWw7Cj4gKyAgICB9Cj4gKyAgICByZXQgPSBnZXRfcGl4X2ZtdChjdHgtPnBpeF9m bXQsICZjb2xvcl9mb3JtYXQsICZ4ZS0+aW5wdXRfZGVwdGgpOwo+ICsgICAgaWYgKHJldCE9MCkg ewo+ICsgICAgICAgIGF2X2xvZygoQVZDb2RlY0NvbnRleHQqKWN0eCwgQVZfTE9HX0VSUk9SLCAi VW5zdXBwb3J0ZWQgcGl4ZWwgZm9ybWF0LlxuIik7Cj4gKyAgICAgICAgZ290byBFUlI7Cj4gKyAg ICB9Cj4gKyAgICBwYXJhbS0+Y3MgPSBYRVZFX0NTX1NFVChjb2xvcl9mb3JtYXQsIHhlLT5pbnB1 dF9kZXB0aCwgMCk7Cj4gKwo+ICsgICAgaWYgKGN0eC0+cmNfYnVmZmVyX3NpemUgPiAwKSB7Cj4g KyAgICAgICAgcGFyYW0tPnZidl9idWZzaXplID0gKGludCkoY3R4LT5yY19idWZmZXJfc2l6ZS8g MTAwMCk7Cj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19JTkZPLCAiVkJWIGJ1ZiBzaXpl OiAlZFxuIiwgY3R4LT5yY19idWZmZXJfc2l6ZSk7Cj4gKyAgICB9Cj4gKyAgICBpZiAoY3R4LT5i aXRfcmF0ZSA+IDApIHsKPiArICAgICAgICBpZiAoY3R4LT5iaXRfcmF0ZSAvIDEwMDAgPiBJTlRf TUFYIHx8IGN0eC0+cmNfbWF4X3JhdGUgLyAxMDAwID4gSU5UX01BWCkgewo+ICsgICAgICAgICAg ICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAibm90IHN1cHBvcnRlZCBiaXRyYXRlIGJpdF9y YXRlIGFuZCByY19tYXhfcmF0ZSA+ICVkMDAwXG4iLCBJTlRfTUFYKTsKPiArICAgICAgICAgICAg Z290byBFUlI7Cj4gKyAgICAgICAgfQo+ICsgICAgICAgIHBhcmFtLT5iaXRyYXRlID0gKGludCko Y3R4LT5iaXRfcmF0ZSAvIDEwMDApOwo+ICsgICAgICAgIHBhcmFtLT5yY190eXBlID0gWEVWRV9S Q19BQlI7Cj4gKyAgICB9Cj4gKyAgICBpZiAoeGUtPm9wX2NyZiA+PSAwKSB7Cj4gKyAgICAgICAg cGFyYW0tPmNyZiA9IHhlLT5vcF9jcmY7Cj4gKyAgICAgICAgcGFyYW0tPnJjX3R5cGUgPSBYRVZF X1JDX0NSRjsKPiArICAgIH0KPiArCj4gKyAgICBpZihjdHgtPnRocmVhZF9jb3VudCA8PSAwKSB7 Cj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19ERUJVRywgImNwdV9jb3VudDogJWRcbiIs IGNwdV9jb3VudCk7Cj4gKyAgICAgICAgcGFyYW0tPnRocmVhZHMgPSAoY3B1X2NvdW50IDwgWEVW RV9NQVhfVEhSRUFEUyk/IGNwdV9jb3VudDogWEVWRV9NQVhfVEhSRUFEUzsKPiArICAgIH0gZWxz ZSBpZihjdHgtPnRocmVhZF9jb3VudCA+IFhFVkVfTUFYX1RIUkVBRFMpIHsKPiArICAgICAgICBw YXJhbS0+dGhyZWFkcyA9IFhFVkVfTUFYX1RIUkVBRFM7Cj4gKyAgICB9IGVsc2Ugewo+ICsgICAg ICAgIHBhcmFtLT50aHJlYWRzID0gY3R4LT50aHJlYWRfY291bnQ7Cj4gKyAgICB9Cj4gKyAgICBh dl9sb2coTlVMTCwgQVZfTE9HX0lORk8sICJwYXJhbS0+dGhyZWFkczogJWRcbiIsIHBhcmFtLT50 aHJlYWRzKTsKPiArCj4gKyAgICBjZHNjLT5wYXJhbS5jcyA9IFhFVkVfQ1NfU0VUKGNvbG9yX2Zv cm1hdCwgcGFyYW0tPmNvZGVjX2JpdF9kZXB0aCwgMCk7Cj4gKyAgICBjZHNjLT5tYXhfYnNfYnVm X3NpemUgPSBNQVhfQlNfQlVGOwo+ICsKPiArICAgIGlmKGN0eC0+cHJvZmlsZSA9PSBGRl9QUk9G SUxFX0VWQ19CQVNFTElORSkgewo+ICsgICAgICAgIHhlLT5wcm9maWxlX2lkID0gWEVWRV9QUk9G SUxFX0JBU0VMSU5FOwo+ICsgICAgfSBlbHNlIGlmKGN0eC0+cHJvZmlsZSA9PSBGRl9QUk9GSUxF X0VWQ19NQUlOKSB7Cj4gKyAgICAgICAgeGUtPnByb2ZpbGVfaWQgPSBYRVZFX1BST0ZJTEVfTUFJ TjsKPiArICAgIH0gZWxzZSB7Cj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwg IlVua25vd24gZW5jb2RlciBwcm9maWxlICglZClcbiIKPiArICAgICAgICAgICAgICAgIkFjY2Vw dGFibGUgdmFsdWVzIGZvciBwcm9maWxlIG9wdGlvbiBhcmUgMCBhbmQgMSAoMDogYmFzZWxpbmUg cHJvZmlsZTsgMTogbWFpbiBwcm9maWxlKVxuIiwgY3R4LT5wcm9maWxlKTsKPiArICAgICAgICBn b3RvIEVSUjsKPiArICAgIH0KPiArICAgIGlmICh4ZS0+b3BfcHJlc2V0KSB7Cj4gKyAgICAgICAg eGUtPnByZXNldF9pZCA9IGdldF9wcmVzZXRfaWQoeGUtPm9wX3ByZXNldCk7Cj4gKyAgICAgICAg YXZfbG9nKE5VTEwsIEFWX0xPR19JTkZPLCAiUHJlc2V0ICA6ICVzXG4iLCB4ZS0+b3BfcHJlc2V0 KTsKPiArICAgIH0KPiArICAgIGlmICh4ZS0+b3BfdHVuZSkgewo+ICsgICAgICAgIHhlLT50dW5l X2lkID0gZ2V0X3R1bmVfaWQoeGUtPm9wX3R1bmUpOwo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBB Vl9MT0dfSU5GTywgIlR1bmUgICAgOiAlc1xuIiwgeGUtPm9wX3R1bmUpOwo+ICsgICAgfQo+ICsK PiArICAgIHJldCA9IHhldmVfcGFyYW1fcHB0KHBhcmFtLCB4ZS0+cHJvZmlsZV9pZCwgeGUtPnBy ZXNldF9pZCwgeGUtPnR1bmVfaWQpOwo+ICsgICAgaWYgKFhFVkVfRkFJTEVEKHJldCkpIHsKPiAr ICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiY2Fubm90IHNldCBwcm9maWxlKCVk KSwgcHJlc2V0KCVkKSwgdHVuZSglZClcbiIsIHhlLT5wcm9maWxlX2lkLCB4ZS0+cHJlc2V0X2lk LCB4ZS0+dHVuZV9pZCk7Cj4gKyAgICAgICAgZ290byBFUlI7Cj4gKyAgICB9Cj4gKwo+ICsgICAg LyogcGFyc2UgOi1zZXBhcmF0ZWQgbGlzdCBvZiBrZXk9dmFsdWUgcGFyYW1ldGVycyBhbmQgc2V0 IHZhbHVlcyBmb3IgY3JlYXRlZCBkZXNjcmlwdG9yIChYRVZFX0NEU0MpICovCj4gKyAgICB7Cj4g KyAgICAgICAgQVZEaWN0aW9uYXJ5RW50cnkgKmVuID0gTlVMTDsKPiArICAgICAgICBhdl9sb2co TlVMTCwgQVZfTE9HX0lORk8sICIjIyMgU3RhcnQgdG8gcGFyc2UgeGV2ZV9wYXJhbXMgIyMjXG4i KTsKPiArICAgICAgICB3aGlsZSAoKGVuID0gYXZfZGljdF9nZXQoeGUtPnhldmVfcGFyYW1zLCAi IiwgZW4sIEFWX0RJQ1RfSUdOT1JFX1NVRkZJWCkpKSB7Cj4gKyAgICAgICAgICAgIGludCBwYXJz ZV9yZXQgPSBwYXJzZV94ZXZlX3BhcmFtcyhlbi0+a2V5LCBlbi0+dmFsdWUsIHhlLCBwYXJhbSk7 Cj4gKwo+ICsgICAgICAgICAgICBzd2l0Y2ggKHBhcnNlX3JldCkgewo+ICsgICAgICAgICAgICBj YXNlIFhFVkVfUEFSQU1fQkFEX05BTUU6Cj4gKyAgICAgICAgICAgICAgICBhdl9sb2coKEFWQ29k ZWNDb250ZXh0KiljdHgsIEFWX0xPR19XQVJOSU5HLAo+ICsgICAgICAgICAgICAgICAgICAgICAg ICJVbmtub3duIG9wdGlvbjogJXMuXG4iLCBlbi0+a2V5KTsKPiArICAgICAgICAgICAgICAgIGJy ZWFrOwo+ICsgICAgICAgICAgICBjYXNlIFhFVkVfUEFSQU1fQkFEX1ZBTFVFOgo+ICsgICAgICAg ICAgICAgICAgYXZfbG9nKChBVkNvZGVjQ29udGV4dCopY3R4LCBBVl9MT0dfV0FSTklORywKPiAr ICAgICAgICAgICAgICAgICAgICAgICAiSW52YWxpZCB2YWx1ZSBmb3IgJXM6ICVzLlxuIiwgZW4t PmtleSwgZW4tPnZhbHVlKTsKPiArICAgICAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgICAg ICBkZWZhdWx0Ogo+ICsgICAgICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAgICAgIH0KPiAr ICAgICAgICB9Cj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19JTkZPLCAiIyMjIEVuZCBv ZiBwYXJzaW5nIHhldmVfcGFyYW1zICMjI1xuIik7Cj4gKyAgICB9Cj4gKwo+ICsgICAgYXZfbG9n KE5VTEwsIEFWX0xPR19JTkZPLCAiUmF0ZSBjb250cm9sIHR5cGUgWyAwKENRUCkgLyAxKEFCUikg LyAyKENSRikgXSA6ICVkXG4iLCBwYXJhbS0+cmNfdHlwZSk7Cj4gKyAgICBhdl9sb2coTlVMTCwg QVZfTE9HX0lORk8sICJjcmY9JWQsIGJpdHJhdGU9JWQsIHZidl9idWZzaXplPSVkLCBmcHM9JWRc biIsIHBhcmFtLT5jcmYsIHBhcmFtLT5iaXRyYXRlLCBwYXJhbS0+dmJ2X2J1ZnNpemUsIHBhcmFt LT5mcHMpOwo+ICsKPiArICAgIHJldHVybiAwOwo+ICsKPiArRVJSOgo+ICsgICAgcmV0dXJuIEFW RVJST1IoRUlOVkFMKTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIENoZWNrIGNvZGVjIGNvbmZpZ3Vy YXRpb24KPiArICoKPiArICogQHBhcmFtIGN0eCBjb2RlYyBjb250ZXh0Cj4gKyAqIEBwYXJhbSBj ZHNjIGNvbnRhaW5zIGFsbCBlbmNvZGVyIHBhcmFtZXRlcnMgdGhhdCBzaG91bGQgYmUgaW5pdGlh bGl6ZWQgYmVmb3JlIGl0cyB1c2UuCj4gKyAqCj4gKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCBu ZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUKPiArICovCj4gK3N0YXRpYyBpbnQgY2hlY2tf Y29uZihBVkNvZGVjQ29udGV4dCAqY3R4LCAgWEVWRV9DRFNDICpjZHNjKQo+ICt7Cj4gKyAgICBp bnQgcmV0ID0gMDsKPiArICAgIGludCBtaW5fYmxvY2tfc2l6ZSA9IDQ7Cj4gKyAgICBpbnQgcGlj X207Cj4gKwo+ICsgICAgaWYoY2RzYy0+cGFyYW0ucHJvZmlsZSA9PSBYRVZFX1BST0ZJTEVfQkFT RUxJTkUpIHsKPiArICAgICAgICBpZiAoY2RzYy0+cGFyYW0udG9vbF9hbXZyICAgID09IDEpIHsK PiArICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiQU1WUiBjYW5ub3QgYmUg b24gaW4gYmFzZSBwcm9maWxlXG4iKTsKPiArICAgICAgICAgICAgcmV0ID0gLTE7Cj4gKyAgICAg ICAgfQo+ICsgICAgICAgIGlmIChjZHNjLT5wYXJhbS50b29sX21tdmQgICAgPT0gMSkgewo+ICsg ICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJNTVZEIGNhbm5vdCBiZSBvbiBp biBiYXNlIHByb2ZpbGVcbiIpOwo+ICsgICAgICAgICAgICByZXQgPSAtMTsKPiArICAgICAgICB9 Cj4gKyAgICAgICAgaWYgKGNkc2MtPnBhcmFtLnRvb2xfYWZmaW5lICA9PSAxKSB7Cj4gKyAgICAg ICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIkFmZmluZSBjYW5ub3QgYmUgb24gaW4g YmFzZSBwcm9maWxlXG4iKTsKPiArICAgICAgICAgICAgcmV0ID0gLTE7Cj4gKyAgICAgICAgfQo+ ICsgICAgICAgIGlmIChjZHNjLT5wYXJhbS50b29sX2RtdnIgICAgPT0gMSkgewo+ICsgICAgICAg ICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJETVZSIGNhbm5vdCBiZSBvbiBpbiBiYXNl IHByb2ZpbGVcbiIpOwo+ICsgICAgICAgICAgICByZXQgPSAtMTsKPiArICAgICAgICB9Cj4gKyAg ICAgICAgaWYgKGNkc2MtPnBhcmFtLnRvb2xfYWRtdnAgICA9PSAxKSB7Cj4gKyAgICAgICAgICAg IGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIkFETVZQIGNhbm5vdCBiZSBvbiBpbiBiYXNlIHBy b2ZpbGVcbiIpOwo+ICsgICAgICAgICAgICByZXQgPSAtMTsKPiArICAgICAgICB9Cj4gKyAgICAg ICAgaWYgKGNkc2MtPnBhcmFtLnRvb2xfaG12cCAgICA9PSAxKSB7Cj4gKyAgICAgICAgICAgIGF2 X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIkhNVlAgY2Fubm90IGJlIG9uIGluIGJhc2UgcHJvZmls ZVxuIik7Cj4gKyAgICAgICAgICAgIHJldCA9IC0xOwo+ICsgICAgICAgIH0KPiArICAgICAgICBp ZiAoY2RzYy0+cGFyYW0udG9vbF9hZGRiICAgID09IDEpIHsKPiArICAgICAgICAgICAgYXZfbG9n KGN0eCwgQVZfTE9HX0VSUk9SLCAiQUREQiBjYW5ub3QgYmUgb24gaW4gYmFzZSBwcm9maWxlXG4i KTsKPiArICAgICAgICAgICAgcmV0ID0gLTE7Cj4gKyAgICAgICAgfQo+ICsgICAgICAgIGlmIChj ZHNjLT5wYXJhbS50b29sX2FsZiAgICAgPT0gMSkgewo+ICsgICAgICAgICAgICBhdl9sb2coY3R4 LCBBVl9MT0dfRVJST1IsICJBTEYgY2Fubm90IGJlIG9uIGluIGJhc2UgcHJvZmlsZVxuIik7Cj4g KyAgICAgICAgICAgIHJldCA9IC0xOwo+ICsgICAgICAgIH0KPiArICAgICAgICBpZiAoY2RzYy0+ cGFyYW0udG9vbF9odGRmICAgID09IDEpIHsKPiArICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZf TE9HX0VSUk9SLCAiSFRERiBjYW5ub3QgYmUgb24gaW4gYmFzZSBwcm9maWxlXG4iKTsKPiArICAg ICAgICAgICAgcmV0ID0gLTE7Cj4gKyAgICAgICAgfQo+ICsgICAgICAgIGlmIChjZHNjLT5wYXJh bS5idHQgICAgICAgICAgPT0gMSkgewo+ICsgICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0df RVJST1IsICJCVFQgY2Fubm90IGJlIG9uIGluIGJhc2UgcHJvZmlsZVxuIik7Cj4gKyAgICAgICAg ICAgIHJldCA9IC0xOwo+ICsgICAgICAgIH0KPiArICAgICAgICBpZiAoY2RzYy0+cGFyYW0uc3Vj byAgICAgICAgID09IDEpIHsKPiArICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9S LCAiU1VDTyBjYW5ub3QgYmUgb24gaW4gYmFzZSBwcm9maWxlXG4iKTsKPiArICAgICAgICAgICAg cmV0ID0gLTE7Cj4gKyAgICAgICAgfQo+ICsgICAgICAgIGlmIChjZHNjLT5wYXJhbS50b29sX2Vp cGQgICAgPT0gMSkgewo+ICsgICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJF SVBEIGNhbm5vdCBiZSBvbiBpbiBiYXNlIHByb2ZpbGVcbiIpOwo+ICsgICAgICAgICAgICByZXQg PSAtMTsKPiArICAgICAgICB9Cj4gKyAgICAgICAgaWYgKGNkc2MtPnBhcmFtLnRvb2xfaXF0ICAg ICA9PSAxKSB7Cj4gKyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIklRVCBj YW5ub3QgYmUgb24gaW4gYmFzZSBwcm9maWxlXG4iKTsKPiArICAgICAgICAgICAgcmV0ID0gLTE7 Cj4gKyAgICAgICAgfQo+ICsgICAgICAgIGlmIChjZHNjLT5wYXJhbS50b29sX2NtX2luaXQgPT0g MSkgewo+ICsgICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJDTV9JTklUIGNh bm5vdCBiZSBvbiBpbiBiYXNlIHByb2ZpbGVcbiIpOwo+ICsgICAgICAgICAgICByZXQgPSAtMTsK PiArICAgICAgICB9Cj4gKyAgICAgICAgaWYgKGNkc2MtPnBhcmFtLnRvb2xfYWRjYyAgICA9PSAx KSB7Cj4gKyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIkFEQ0MgY2Fubm90 IGJlIG9uIGluIGJhc2UgcHJvZmlsZVxuIik7Cj4gKyAgICAgICAgICAgIHJldCA9IC0xOwo+ICsg ICAgICAgIH0KPiArICAgICAgICBpZiAoY2RzYy0+cGFyYW0udG9vbF9hdHMgICAgID09IDEpIHsK PiArICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiQVRTX0lOVFJBIGNhbm5v dCBiZSBvbiBpbiBiYXNlIHByb2ZpbGVcbiIpOwo+ICsgICAgICAgICAgICByZXQgPSAtMTsKPiAr ICAgICAgICB9Cj4gKyAgICAgICAgaWYgKGNkc2MtPnBhcmFtLmliY19mbGFnICAgICA9PSAxKSB7 Cj4gKyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIklCQyBjYW5ub3QgYmUg b24gaW4gYmFzZSBwcm9maWxlXG4iKTsKPiArICAgICAgICAgICAgcmV0ID0gLTE7Cj4gKyAgICAg ICAgfQo+ICsgICAgICAgIGlmIChjZHNjLT5wYXJhbS50b29sX3JwbCAgICAgPT0gMSkgewo+ICsg ICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJSUEwgY2Fubm90IGJlIG9uIGlu IGJhc2UgcHJvZmlsZVxuIik7Cj4gKyAgICAgICAgICAgIHJldCA9IC0xOwo+ICsgICAgICAgIH0K PiArICAgICAgICBpZiAoY2RzYy0+cGFyYW0udG9vbF9wb2NzICAgID09IDEpIHsKPiArICAgICAg ICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiUE9DUyBjYW5ub3QgYmUgb24gaW4gYmFz ZSBwcm9maWxlXG4iKTsKPiArICAgICAgICAgICAgcmV0ID0gLTE7Cj4gKyAgICAgICAgfQo+ICsg ICAgfSBlbHNlIHsKPiArICAgICAgICBpZiAoY2RzYy0+cGFyYW0udG9vbF9hZG12cCAgID09IDAg JiYgY2RzYy0+cGFyYW0udG9vbF9hZmZpbmUgPT0gMSkgewo+ICsgICAgICAgICAgICBhdl9sb2co Y3R4LCBBVl9MT0dfRVJST1IsICJBRkZJTkUgY2Fubm90IGJlIG9uIHdoZW4gQURNVlAgaXMgb2Zm XG4iKTsKPiArICAgICAgICAgICAgcmV0ID0gLTE7Cj4gKyAgICAgICAgfQo+ICsgICAgICAgIGlm IChjZHNjLT5wYXJhbS50b29sX2FkbXZwICAgPT0gMCAmJiBjZHNjLT5wYXJhbS50b29sX2FtdnIg ICA9PSAxKSB7Cj4gKyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIkFNVlIg Y2Fubm90IGJlIG9uIHdoZW4gQURNVlAgaXMgb2ZmXG4iKTsKPiArICAgICAgICAgICAgcmV0ID0g LTE7Cj4gKyAgICAgICAgfQo+ICsgICAgICAgIGlmIChjZHNjLT5wYXJhbS50b29sX2FkbXZwICAg PT0gMCAmJiBjZHNjLT5wYXJhbS50b29sX2RtdnIgICA9PSAxKSB7Cj4gKyAgICAgICAgICAgIGF2 X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIkRNVlIgY2Fubm90IGJlIG9uIHdoZW4gQURNVlAgaXMg b2ZmXG4iKTsKPiArICAgICAgICAgICAgcmV0ID0gLTE7Cj4gKyAgICAgICAgfQo+ICsgICAgICAg IGlmIChjZHNjLT5wYXJhbS50b29sX2FkbXZwICAgPT0gMCAmJiBjZHNjLT5wYXJhbS50b29sX21t dmQgICA9PSAxKSB7Cj4gKyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIk1N VkQgY2Fubm90IGJlIG9uIHdoZW4gQURNVlAgaXMgb2ZmXG4iKTsKPiArICAgICAgICAgICAgcmV0 ID0gLTE7Cj4gKyAgICAgICAgfQo+ICsgICAgICAgIGlmIChjZHNjLT5wYXJhbS50b29sX2VpcGQg ICAgPT0gMCAmJiBjZHNjLT5wYXJhbS5pYmNfZmxhZyAgICA9PSAxKSB7Cj4gKyAgICAgICAgICAg IGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIklCQyBjYW5ub3QgYmUgb24gd2hlbiBFSVBEIGlz IG9mZlxuIik7Cj4gKyAgICAgICAgICAgIHJldCA9IC0xOwo+ICsgICAgICAgIH0KPiArICAgICAg ICBpZiAoY2RzYy0+cGFyYW0udG9vbF9pcXQgICAgID09IDAgJiYgY2RzYy0+cGFyYW0udG9vbF9h dHMgICAgPT0gMSkgewo+ICsgICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJB VFMgY2Fubm90IGJlIG9uIHdoZW4gSVFUIGlzIG9mZlxuIik7Cj4gKyAgICAgICAgICAgIHJldCA9 IC0xOwo+ICsgICAgICAgIH0KPiArICAgICAgICBpZiAoY2RzYy0+cGFyYW0udG9vbF9jbV9pbml0 ID09IDAgJiYgY2RzYy0+cGFyYW0udG9vbF9hZGNjICAgPT0gMSkgewo+ICsgICAgICAgICAgICBh dl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJBRENDIGNhbm5vdCBiZSBvbiB3aGVuIENNX0lOSVQg aXMgb2ZmXG4iKTsKPiArICAgICAgICAgICAgcmV0ID0gLTE7Cj4gKyAgICAgICAgfQo+ICsgICAg fQo+ICsKPiArICAgIGlmIChjZHNjLT5wYXJhbS5idHQgPT0gMSkgewo+ICsgICAgICAgIGlmIChj ZHNjLT5wYXJhbS5mcmFtZXdvcmtfY2JfbWF4ICYmIGNkc2MtPnBhcmFtLmZyYW1ld29ya19jYl9t YXggPCA1KSB7Cj4gKyAgICAgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJNYXhp bXVuIENvZGluZyBCbG9jayBzaXplIGNhbm5vdCBiZSBzbWFsbGVyIHRoYW4gNVxuIik7Cj4gKyAg ICAgICAgICAgIHJldCA9IC0xOwo+ICsgICAgICAgIH0KPiArICAgICAgICBpZiAoY2RzYy0+cGFy YW0uZnJhbWV3b3JrX2NiX21heCA+IDcpIHsKPiArICAgICAgICAgICAgYXZfbG9nKE5VTEwsIEFW X0xPR19FUlJPUiwgIk1heGltdW4gQ29kaW5nIEJsb2NrIHNpemUgY2Fubm90IGJlIGdyZWF0ZXIg dGhhbiA3XG4iKTsKPiArICAgICAgICAgICAgcmV0ID0gLTE7Cj4gKyAgICAgICAgfQo+ICsgICAg ICAgIGlmIChjZHNjLT5wYXJhbS5mcmFtZXdvcmtfY2JfbWluICYmIGNkc2MtPnBhcmFtLmZyYW1l d29ya19jYl9taW4gPCAyKSB7Cj4gKyAgICAgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJS T1IsICJNaW5pbXVtIENvZGluZyBCbG9jayBzaXplIGNhbm5vdCBiZSBzbWFsbGVyIHRoYW4gMlxu Iik7Cj4gKyAgICAgICAgICAgIHJldCA9IC0xOwo+ICsgICAgICAgIH0KPiArICAgICAgICBpZiAo KGNkc2MtPnBhcmFtLmZyYW1ld29ya19jYl9tYXggfHwgY2RzYy0+cGFyYW0uZnJhbWV3b3JrX2Ni X21pbikgJiYKPiArICAgICAgICAgICAgICAgIGNkc2MtPnBhcmFtLmZyYW1ld29ya19jYl9taW4g PiBjZHNjLT5wYXJhbS5mcmFtZXdvcmtfY2JfbWF4KSB7Cj4gKyAgICAgICAgICAgIGF2X2xvZyhO VUxMLCBBVl9MT0dfRVJST1IsICJNaW5pbXVtIENvZGluZyBCbG9jayBzaXplIGNhbm5vdCBiZSBn cmVhdGVyIHRoYW4gTWF4aW11bSBjb2RpbmcgQmxvY2sgc2l6ZVxuIik7Cj4gKyAgICAgICAgICAg IHJldCA9IC0xOwo+ICsgICAgICAgIH0KPiArICAgICAgICBpZiAoY2RzYy0+cGFyYW0uZnJhbWV3 b3JrX2N1MTRfbWF4ID4gNikgewo+ICsgICAgICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VS Uk9SLCAiTWF4aW11biAxOjQgQ29kaW5nIEJsb2NrIHNpemUgY2Fubm90IGJlIGdyZWF0ZXIgdGhh biA2XG4iKTsKPiArICAgICAgICAgICAgcmV0ID0gLTE7Cj4gKyAgICAgICAgfQo+ICsgICAgICAg IGlmICgoY2RzYy0+cGFyYW0uZnJhbWV3b3JrX2NiX21heCB8fCBjZHNjLT5wYXJhbS5mcmFtZXdv cmtfY3UxNF9tYXgpICYmCj4gKyAgICAgICAgICAgICAgICBjZHNjLT5wYXJhbS5mcmFtZXdvcmtf Y3UxNF9tYXggPiBjZHNjLT5wYXJhbS5mcmFtZXdvcmtfY2JfbWF4KSB7Cj4gKyAgICAgICAgICAg IGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJNYXhpbXVuIDE6NCBDb2RpbmcgQmxvY2sgc2l6 ZSBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuIE1heGltdW0gY29kaW5nIEJsb2NrIHNpemVcbiIpOwo+ ICsgICAgICAgICAgICByZXQgPSAtMTsKPiArICAgICAgICB9Cj4gKyAgICAgICAgaWYgKGNkc2Mt PnBhcmFtLmZyYW1ld29ya190cmlzX21heCA+IDYpIHsKPiArICAgICAgICAgICAgYXZfbG9nKE5V TEwsIEFWX0xPR19FUlJPUiwgIk1heGltdW4gVHJpLXNwbGl0IEJsb2NrIHNpemUgYmUgZ3JlYXRl ciB0aGFuIDZcbiIpOwo+ICsgICAgICAgICAgICByZXQgPSAtMTsKPiArICAgICAgICB9Cj4gKyAg ICAgICAgaWYgKChjZHNjLT5wYXJhbS5mcmFtZXdvcmtfdHJpc19tYXggfHwgY2RzYy0+cGFyYW0u ZnJhbWV3b3JrX2NiX21heCkgJiYKPiArICAgICAgICAgICAgICAgIGNkc2MtPnBhcmFtLmZyYW1l d29ya190cmlzX21heCA+IGNkc2MtPnBhcmFtLmZyYW1ld29ya19jYl9tYXgpIHsKPiArICAgICAg ICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIk1heGltdW4gVHJpLXNwbGl0IEJsb2Nr IHNpemUgY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiBNYXhpbXVtIGNvZGluZyBCbG9jayBzaXplXG4i KTsKPiArICAgICAgICAgICAgcmV0ID0gLTE7Cj4gKyAgICAgICAgfQo+ICsgICAgICAgIGlmICgo Y2RzYy0+cGFyYW0uZnJhbWV3b3JrX3RyaXNfbWluIHx8IGNkc2MtPnBhcmFtLmZyYW1ld29ya19j Yl9taW4pICYmCj4gKyAgICAgICAgICAgICAgICBjZHNjLT5wYXJhbS5mcmFtZXdvcmtfdHJpc19t aW4gPCBjZHNjLT5wYXJhbS5mcmFtZXdvcmtfY2JfbWluICsgMikgewo+ICsgICAgICAgICAgICBh dl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiTWF4aW11biBUcmktc3BsaXQgQmxvY2sgc2l6ZSBj YW5ub3QgYmUgc21hbGxlciB0aGFuIE1pbmltdW0gQ29kaW5nIEJsb2NrIHNpemUgcGx1cyB0d29c biIpOwo+ICsgICAgICAgICAgICByZXQgPSAtMTsKPiArICAgICAgICB9Cj4gKyAgICAgICAgaWYo Y2RzYy0+cGFyYW0uZnJhbWV3b3JrX2NiX21pbikgbWluX2Jsb2NrX3NpemUgPSAxIDw8IGNkc2Mt PnBhcmFtLmZyYW1ld29ya19jYl9taW47Cj4gKyAgICAgICAgZWxzZSBtaW5fYmxvY2tfc2l6ZSA9 IDg7Cj4gKyAgICB9Cj4gKwo+ICsgICAgaWYgKGNkc2MtPnBhcmFtLnN1Y28gPT0gMSkgewo+ICsg ICAgICAgIGlmIChjZHNjLT5wYXJhbS5mcmFtZXdvcmtfc3Vjb19tYXggPiA2KSB7Cj4gKyAgICAg ICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJNYXhpbXVuIFNVQ08gc2l6ZSBjYW5u b3QgYmUgZ3JlYXRlciB0aGFuIDZcbiIpOwo+ICsgICAgICAgICAgICByZXQgPSAtMTsKPiArICAg ICAgICB9Cj4gKyAgICAgICAgaWYgKGNkc2MtPnBhcmFtLmZyYW1ld29ya19jYl9tYXggJiYgY2Rz Yy0+cGFyYW0uZnJhbWV3b3JrX3N1Y29fbWF4ID4gY2RzYy0+cGFyYW0uZnJhbWV3b3JrX2NiX21h eCkgewo+ICsgICAgICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCJNYXhpbXVuIFNV Q08gc2l6ZSBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuIE1heGltdW0gY29kaW5nIEJsb2NrIHNpemVc biIpOwo+ICsgICAgICAgICAgICByZXQgPSAtMTsKPiArICAgICAgICB9Cj4gKyAgICAgICAgaWYg KGNkc2MtPnBhcmFtLmZyYW1ld29ya19zdWNvX21pbiA8IDQpIHsKPiArICAgICAgICAgICAgYXZf bG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIk1pbmltdW4gU1VDTyBzaXplIGNhbm5vdCBiZSBzbWFs bGVyIHRoYW4gNFxuIik7Cj4gKyAgICAgICAgICAgIHJldCA9IC0xOwo+ICsgICAgICAgIH0KPiAr ICAgICAgICBpZiAoY2RzYy0+cGFyYW0uZnJhbWV3b3JrX2NiX21pbiAmJiBjZHNjLT5wYXJhbS5m cmFtZXdvcmtfc3Vjb19taW4gPCBjZHNjLT5wYXJhbS5mcmFtZXdvcmtfY2JfbWluKSB7Cj4gKyAg ICAgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsIk1pbmltdW4gU1VDTyBzaXplIGNh bm5vdCBiZSBzbWFsbGVyIHRoYW4gTWluaW11bSBjb2RpbmcgQmxvY2sgc2l6ZVxuIik7Cj4gKyAg ICAgICAgICAgIHJldCA9IC0xOwo+ICsgICAgICAgIH0KPiArICAgICAgICBpZiAoY2RzYy0+cGFy YW0uZnJhbWV3b3JrX3N1Y29fbWluID4gY2RzYy0+cGFyYW0uZnJhbWV3b3JrX3N1Y29fbWF4KSB7 Cj4gKyAgICAgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJNaW5pbXVtIFNVQ08g c2l6ZSBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuIE1heGltdW0gU1VDTyBzaXplXG4iKTsKPiArICAg ICAgICAgICAgcmV0ID0gLTE7Cj4gKyAgICAgICAgfQo+ICsgICAgfQo+ICsKPiArICAgIHBpY19t ID0gKDggPiBtaW5fYmxvY2tfc2l6ZSkgPyBtaW5fYmxvY2tfc2l6ZSA6IDg7Cj4gKyAgICBpZiAo KGNkc2MtPnBhcmFtLncgJiAocGljX20gLSAxKSkgIT0gMCkgewo+ICsgICAgICAgIGF2X2xvZyhO VUxMLCBBVl9MT0dfRVJST1IsICJDdXJyZW50IGVuY29kZXIgZG9lcyBub3Qgc3VwcG9ydCBwaWN0 dXJlIHdpZHRoLCBub3QgbXVsdGlwbGUgb2YgbWF4KDgsIG1pbmltdW0gQ1Ugc2l6ZSlcbiIpOwo+ ICsgICAgICAgIHJldCA9IC0xOwo+ICsgICAgfQo+ICsgICAgaWYgKChjZHNjLT5wYXJhbS5oICYg KHBpY19tIC0gMSkpICE9IDApIHsKPiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9S LCAiQ3VycmVudCBlbmNvZGVyIGRvZXMgbm90IHN1cHBvcnQgcGljdHVyZSBoZWlnaHQsIG5vdCBt dWx0aXBsZSBvZiBtYXgoOCwgbWluaW11bSBDVSBzaXplKVxuIik7Cj4gKyAgICAgICAgcmV0ID0g LTE7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0dXJuIHJldDsKPiArfQo+ICsKPiArLyoqCj4gKyAq IFNldCBYRVZFX0NGR19TRVRfVVNFX1BJQ19TSUdOQVRVUkUgZm9yIGVuY29kZXIKPiArICoKPiAr ICogQHBhcmFtIGlkIFhFVkUgaW5zdGFuY2UgaWRlbnRpZmllcgo+ICsgKiBAcGFyYW0gY3R4IHRo ZSBzdHJ1Y3R1cmUgc3RvcmVzIGFsbCB0aGUgc3RhdGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbnN0 YW5jZSBvZiBYZXZlIE1QRUctNSBFVkMgZW5jb2Rlcgo+ICsgKiBAcmV0dXJuIFhFVkUgcHJlLWRl ZmluZWQgY29sb3Igc3BhY2UgKEBzZWUgeGV2ZS5oKSBvbiBzdWNjZXNzLCBYRVZFX0NGX1VOS05P V04gb24gZmFpbHVyZQo+ICsgKgo+ICsgKiBAdG9kbyBjb25zaWRlciByZW1vdmluZyB0aGUgZnVu Y3Rpb24KPiArICovCj4gK3N0YXRpYyBpbnQgc2V0X2V4dHJhX2NvbmZpZyhYRVZFIGlkLCBYZXZl Q29udGV4dCAqY3R4KQo+ICt7Cj4gKyAgICBpbnQgcmV0LCBzaXplLCB2YWx1ZTsKPiArCj4gKyAg ICBpZihjdHgtPmhhc2gpIHsKPiArICAgICAgICB2YWx1ZSA9IDE7Cj4gKyAgICAgICAgc2l6ZSA9 IDQ7Cj4gKyAgICAgICAgcmV0ID0geGV2ZV9jb25maWcoaWQsIFhFVkVfQ0ZHX1NFVF9VU0VfUElD X1NJR05BVFVSRSwgJnZhbHVlLCAmc2l6ZSk7Cj4gKyAgICAgICAgaWYoWEVWRV9GQUlMRUQocmV0 KSkgewo+ICsgICAgICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiZmFpbGVkIHRv IHNldCBjb25maWcgZm9yIHBpY3R1cmUgc2lnbmF0dXJlXG4iKTsKPiArICAgICAgICAgICAgcmV0 dXJuIC0xOwo+ICsgICAgICAgIH0KPiArICAgIH0KPiArCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ ICsKPiArLyoqCj4gKyAqIENvbnZlcnQgZmZtcGVnIHBpeGVsIGZvcm1hdCAoQVZQaXhlbEZvcm1h dCkgaW50byBYRVZFIHByZS1kZWZpbmVkIGNvbG9yIHNwYWNlCj4gKyAqCj4gKyAqIEBwYXJhbSBw eF9mbXQgcGl4ZWwgZm9ybWF0IChAc2VlIGh0dHBzOi8vZmZtcGVnLm9yZy9kb3h5Z2VuL3RydW5r L3BpeGZtdF84aC5odG1sI2E5YThlMzM1Y2YzYmU0NzIwNDJiYzlmMGNmODBjZDRjNSkKPiArICog QHJldHVybiBYRVZFIHByZS1kZWZpbmVkIGNvbG9yIHNwYWNlIChAc2VlIHhldmUuaCkgb24gc3Vj Y2VzcywgWEVWRV9DRl9VTktOT1dOIG9uIGZhaWx1cmUKPiArICovCj4gK3N0YXRpYyBpbnQgeGV2 ZV9jb2xvcl9zcGFjZShlbnVtIEFWUGl4ZWxGb3JtYXQgcGl4X2ZtdCkKPiArewo+ICsgICAgLyog Y29sb3Igc3BhY2Ugb2YgaW5wdXQgaW1hZ2UgKi8KPiArICAgIGludCBjcyA9IFhFVkVfQ0ZfVU5L Tk9XTjsKPiArCj4gKyAgICBzd2l0Y2ggKHBpeF9mbXQpIHsKPiArICAgIGNhc2UgQVZfUElYX0ZN VF9ZVVY0MjBQOgo+ICsgICAgICAgIGNzID0gWEVWRV9DU19ZQ0JDUjQyMDsKPiArICAgICAgICBi cmVhazsKPiArICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVY0MjBQMTA6Cj4gKyNpZiBBVl9IQVZFX0JJ R0VORElBTgo+ICsgICAgICAgIGNzID0gWEVWRV9DU19TRVQoWEVWRV9DRl9ZQ0JDUjQyMCwgMTAs IDEpOwo+ICsjZWxzZQo+ICsgICAgICAgIGNzID0gWEVWRV9DU19ZQ0JDUjQyMF8xMExFOwo+ICsj ZW5kaWYKPiArCj4gKyAgICAgICAgYnJlYWs7Cj4gKyAgICBjYXNlIEFWX1BJWF9GTVRfWVVWNDIw UDEyOgo+ICsjaWYgQVZfSEFWRV9CSUdFTkRJQU4KPiArICAgICAgICBjcyA9IFhFVkVfQ1NfU0VU KFhFVkVfQ0ZfWUNCQ1I0MjAsIDEyLCAxKTsKPiArI2Vsc2UKPiArICAgICAgICBjcyA9IFhFVkVf Q1NfWUNCQ1I0MjBfMTJMRTsKPiArI2VuZGlmCj4gKwo+ICsgICAgICAgIGJyZWFrOwo+ICsgICAg Y2FzZSBBVl9QSVhfRk1UX1lVVjQyMlA6Cj4gKyAgICAgICAgY3MgPSBYRVZFX0NTX1lDQkNSNDIy Owo+ICsgICAgICAgIGJyZWFrOwo+ICsgICAgY2FzZSBBVl9QSVhfRk1UX1lVVjQyMlAxMDoKPiAr I2lmIEFWX0hBVkVfQklHRU5ESUFOCj4gKyAgICAgICAgY3MgPSBYRVZFX0NTX1NFVChYRVZFX0NG X1lDQkNSNDIyLCAxMCwgMSk7Cj4gKyNlbHNlCj4gKyAgICAgICAgY3MgPSBYRVZFX0NTX1lDQkNS NDIyXzEwTEU7Cj4gKyNlbmRpZgo+ICsKPiArICAgICAgICBicmVhazsKPiArICAgIGNhc2UgQVZf UElYX0ZNVF9ZVVY0MjJQMTI6Cj4gKyNpZiBBVl9IQVZFX0JJR0VORElBTgo+ICsgICAgICAgIGNz ID0gWEVWRV9DU19TRVQoWEVWRV9DRl9ZQ0JDUjQyMiwgMTIsIDEpOwo+ICsjZWxzZQo+ICsgICAg ICAgIGNzID0gWEVWRV9DU19TRVQoWEVWRV9DRl9ZQ0JDUjQyMiwgMTIsIDApOwo+ICsjZW5kaWYK PiArCj4gKyAgICAgICAgYnJlYWs7Cj4gKyAgICBjYXNlIEFWX1BJWF9GTVRfR0JSUDoKPiArICAg IGNhc2UgQVZfUElYX0ZNVF9HQlJQMTA6Cj4gKyAgICBjYXNlIEFWX1BJWF9GTVRfR0JSUDEyOgo+ ICsgICAgICAgIGNzID0gWEVWRV9DRl9VTktOT1dOOwo+ICsgICAgICAgIGJyZWFrOwo+ICsgICAg Y2FzZSBBVl9QSVhfRk1UX1lVVjQ0NFA6Cj4gKyAgICAgICAgY3MgPSBYRVZFX0NGX1lDQkNSNDQ0 Owo+ICsgICAgICAgIGJyZWFrOwo+ICsgICAgY2FzZSBBVl9QSVhfRk1UX1lVVjQ0NFAxMDoKPiAr I2lmIEFWX0hBVkVfQklHRU5ESUFOCj4gKyAgICAgICAgY3MgPSBYRVZFX0NTX1NFVChYRVZFX0NG X1lDQkNSNDQ0LCAxMCwgMSk7Cj4gKyNlbHNlCj4gKyAgICAgICAgY3MgPSBYRVZFX0NTX1lDQkNS NDQ0XzEwTEU7Cj4gKyNlbmRpZgo+ICsKPiArICAgICAgICBicmVhazsKPiArICAgIGNhc2UgQVZf UElYX0ZNVF9ZVVY0NDRQMTI6Cj4gKyNpZiBBVl9IQVZFX0JJR0VORElBTgo+ICsgICAgICAgIGNz ID0gWEVWRV9DU19TRVQoWEVWRV9DRl9ZQ0JDUjQ0NCwgMTIsIDEpOwo+ICsjZWxzZQo+ICsgICAg ICAgIGNzID0gWEVWRV9DU19TRVQoWEVWRV9DRl9ZQ0JDUjQ0NCwgMTIsIDApOwo+ICsjZW5kaWYK PiArCj4gKyAgICAgICAgYnJlYWs7Cj4gKyAgICBjYXNlIEFWX1BJWF9GTVRfR1JBWTg6Cj4gKyAg ICAgICAgY3MgPSBYRVZFX0NGX1lDQkNSNDAwOwo+ICsgICAgICAgIGJyZWFrOwo+ICsgICAgY2Fz ZSBBVl9QSVhfRk1UX0dSQVkxMDoKPiArI2lmIEFWX0hBVkVfQklHRU5ESUFOCj4gKyAgICAgICAg Y3MgPSBYRVZFX0NTX1NFVChYRVZFX0NGX1lDQkNSNDAwLCAxMCwgMSk7Cj4gKyNlbHNlCj4gKyAg ICAgICAgY3MgPSBYRVZFX0NTX1lDQkNSNDAwXzEwTEU7Cj4gKyNlbmRpZgo+ICsKPiArICAgICAg ICBicmVhazsKPiArICAgIGNhc2UgQVZfUElYX0ZNVF9HUkFZMTI6Cj4gKyNpZiBBVl9IQVZFX0JJ R0VORElBTgo+ICsgICAgICAgIGNzID0gWEVWRV9DU19TRVQoWEVWRV9DRl9ZQ0JDUjQwMCwgMTIs IDEpOwo+ICsjZWxzZQo+ICsgICAgICAgIGNzID0gWEVWRV9DU19ZQ0JDUjQwMF8xMkxFOwo+ICsj ZW5kaWYKPiArCj4gKyAgICAgICAgYnJlYWs7Cj4gKyAgICBkZWZhdWx0Ogo+ICsgICAgICAgIGNz ID0gWEVWRV9DRl9VTktOT1dOOwo+ICsgICAgICAgIGJyZWFrOwo+ICsgICAgfQo+ICsgICAgcmV0 dXJuIGNzOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHNldHVwX2J1bXBpbmcoWEVWRSBpZCkKPiAr ewo+ICsgICAgaW50IHZhbCwgc2l6ZTsKPiArICAgIHZhbCAgPSAxOwo+ICsgICAgc2l6ZSA9IHNp emVvZihpbnQpOwo+ICsgICAgaWYoWEVWRV9GQUlMRUQoeGV2ZV9jb25maWcoaWQsIFhFVkVfQ0ZH X1NFVF9GT1JDRV9PVVQsICh2b2lkICopKCZ2YWwpLCAmc2l6ZSkpKSB7Cj4gKyAgICAgICAgcmV0 dXJuIC0xOwo+ICsgICAgfQo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25z dCBjaGFyKiBzbGljZV90eXBlKGVudW0gQVZQaWN0dXJlVHlwZSBhdl9waWNfdHlwZSkKPiArewo+ ICsgICAgaWYoYXZfcGljX3R5cGUgPT0gQVZfUElDVFVSRV9UWVBFX0kpIHsKPiArICAgICAgICBy ZXR1cm4gIlNsaWNlIFR5cGUgSSI7Cj4gKyAgICB9IGVsc2UgaWYoYXZfcGljX3R5cGUgPT0gQVZf UElDVFVSRV9UWVBFX1ApIHsKPiArICAgICAgICByZXR1cm4gIlNsaWNlIFR5cGUgUCI7Cj4gKyAg ICB9IGVsc2UgaWYoYXZfcGljX3R5cGUgPT0gQVZfUElDVFVSRV9UWVBFX0IpIHsKPiArICAgICAg ICByZXR1cm4gIlNsaWNlIFR5cGUgQiI7Cj4gKyAgICB9Cj4gKyAgICByZXR1cm4gIlNsaWNlIFR5 cGUgVU5ERUZJTkVEIjsKPiArfQo+ICsKPiArLyoqCj4gKyAqIEluaXRpYWxpemUgY29kZWMgc3Rh dGljIGRhdGEKPiArICoKPiArICogQHRvZG8gY29uc2lkZXIgcmVtb3ZpbmcgdW51c2VkIGZ1bmN0 aW9uCj4gKyAqLwo+ICtzdGF0aWMgYXZfY29sZCB2b2lkIGxpYnhldmVfaW5pdF9zdGF0aWNfZGF0 YShBVkNvZGVjICpjb2RlYykKPiArewo+ICsgICAgVU5VU0VEKGNvZGVjKTsKPiArfQo+ICsKPiAr LyoqCj4gKyAqIEluaXRpYWxpemUgY29kZWMKPiArICogQ3JlYXRlIGVuY29kZXIgaW5zdGFuY2Ug YW5kIGFsbG9jYXRlIGFsbCB0aGUgbmVlZGVkIHJlc291cmNlcwo+ICsgKgo+ICsgKiBAcGFyYW0g Y3R4IGNvZGVjIGNvbnRleHQKPiArICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVy cm9yIGNvZGUgb24gZmFpbHVyZQo+ICsgKi8KPiArc3RhdGljIGF2X2NvbGQgaW50IGxpYnhldmVf aW5pdChBVkNvZGVjQ29udGV4dCAqY3R4KQo+ICt7Cj4gKyAgICBYZXZlQ29udGV4dCAqeGUgPSBj dHgtPnByaXZfZGF0YTsKPiArICAgIHVuc2lnbmVkIGNoYXIgKmJzX2J1ZiA9IE5VTEw7Cj4gKyAg ICBpbnQgaSwgdmFsID0gMDsKPiArICAgIGludCBzaGlmdF9oID0gMDsKPiArICAgIGludCBzaGlm dF92ID0gMDsKPiArICAgIFhFVkVfSU1HQiAqIGltZ2IgPSBOVUxMOwo+ICsKPiArICAgIFhFVkVf Q0RTQyAqY2RzYyA9ICYoeGUtPmNkc2MpOwo+ICsKPiArICAgIGF2X2xvZyhOVUxMLCBBVl9MT0df REVCVUcsICJlWHRyYS1mYXN0IEVzc2VudGlhbCBWaWRlbyBFbmNvZGVyXG4iKTsKPiArCj4gKyAg ICBpZihjdHgtPnBpeF9mbXQgIT0gQVZfUElYX0ZNVF9ZVVY0MjBQICYmIGN0eC0+cGl4X2ZtdCAh PSBBVl9QSVhfRk1UX1lVVjQyMFAxMCkgewo+ICsgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19F UlJPUiwgIkludmFsaWQgcGl4ZWwgZm9ybWF0OiAlc1xuIiwgYXZfZ2V0X3BpeF9mbXRfbmFtZShj dHgtPnBpeF9mbXQpKTsKPiArICAgICAgICBnb3RvIEVSUjsKPiArICAgIH0KPiArCj4gKyAgICAv KiBhbGxvY2F0ZSBiaXRzdHJlYW0gYnVmZmVyICovCj4gKyAgICBic19idWYgPSAodW5zaWduZWQg Y2hhciopbWFsbG9jKE1BWF9CU19CVUYpOwo+ICsgICAgaWYoYnNfYnVmID09IE5VTEwpIHsKPiAr ICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiY2Fubm90IGFsbG9jYXRlIGJpdHN0 cmVhbSBidWZmZXIsIHNpemU9JWQiLCBNQVhfQlNfQlVGKTsKPiArICAgICAgICBnb3RvIEVSUjsK PiArICAgIH0KPiArCj4gKyAgICAvKiByZWFkIGNvbmZpZ3VyYXRpb25zIGFuZCBzZXQgdmFsdWVz IGZvciBjcmVhdGVkIGRlc2NyaXB0b3IgKFhFVkVfQ0RTQykgKi8KPiArICAgIHZhbCA9IGdldF9j b25mKGN0eCwgY2RzYyk7Cj4gKyAgICBpZiAodmFsICE9IFhFVkVfT0spIHsKPiArICAgICAgICBh dl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCJjYW5ub3QgZ2V0IGNvbmZpZ3VyYXRpb25cbiIpOwo+ ICsgICAgICAgIGdvdG8gRVJSOwo+ICsgICAgfQo+ICsKPiArICAgIGlmIChjaGVja19jb25mKGN0 eCwgY2RzYykgIT0gMCkgewo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsImlu dmFsaWQgY29uZmlndXJhdGlvblxuIik7Cj4gKyAgICAgICAgZ290byBFUlI7Cj4gKyAgICB9Cj4g Kwo+ICsgICAgLyogY3JlYXRlIGVuY29kZXIgKi8KPiArICAgIHhlLT5pZCA9IHhldmVfY3JlYXRl KGNkc2MsIE5VTEwpOwo+ICsgICAgaWYoeGUtPmlkID09IE5VTEwpIHsKPiArICAgICAgICBhdl9s b2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiY2Fubm90IGNyZWF0ZSBYRVZFIGVuY29kZXJcbiIpOwo+ ICsgICAgICAgIGdvdG8gRVJSOwo+ICsgICAgfQo+ICsKPiArICAgIGlmKHNldF9leHRyYV9jb25m aWcoeGUtPmlkLCB4ZSkpIHsKPiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAi Y2Fubm90IHNldCBleHRyYSBjb25maWd1cmF0aW9uc1xuIik7Cj4gKyAgICAgICAgZ290byBFUlI7 Cj4gKyAgICB9Cj4gKwo+ICsgICAgeGUtPmJpdGIuYWRkciA9IGJzX2J1ZjsKPiArICAgIHhlLT5i aXRiLmJzaXplID0gTUFYX0JTX0JVRjsKPiArCj4gKyAgICBpZihhdl9waXhfZm10X2dldF9jaHJv bWFfc3ViX3NhbXBsZShjdHgtPnBpeF9mbXQsICZzaGlmdF9oLCAmc2hpZnRfdikpIHsKPiArICAg ICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJmYWlsZWQgdG8gZ2V0ICBjaHJvbWEgc2hp ZnRcbiIpOwo+ICsgICAgICAgIGdvdG8gRVJSOwo+ICsgICAgfQo+ICsgICAgLy8gWVVWIGZvcm1h dCBleHBsYW5hdGlvbgo+ICsgICAgLy8gc2hpZnRfaCA9PSAxICYmIHNoaWZ0X3YgPT0gMSA6IFlV VjQyMAo+ICsgICAgLy8gc2hpZnRfaCA9PSAxICYmIHNoaWZ0X3YgPT0gMCA6IFlVVjQyMgo+ICsg ICAgLy8gc2hpZnRfaCA9PSAwICYmIHNoaWZ0X3YgPT0gMCA6IFlVVjQ0NAo+ICsgICAgLy8KPiAr ICAgIHhlLT53aWR0aF9jaHJvbWEgPSBBVl9DRUlMX1JTSElGVChjdHgtPndpZHRoLCBzaGlmdF9o KTsKPiArICAgIHhlLT5oZWlnaHRfY2hyb21hID0gQVZfQ0VJTF9SU0hJRlQoY3R4LT5oZWlnaHQs IHNoaWZ0X3YpOwo+ICsKPiArICAgIC8qIHNldCBkZWZhdWx0IHZhbHVlcyBmb3IgaW5wdXQgaW1h Z2UgYnVmZmVyICovCj4gKyAgICBpbWdiID0gJnhlLT5pbWdiOwo+ICsgICAgaW1nYi0+Y3MgPSB4 ZXZlX2NvbG9yX3NwYWNlKGN0eC0+cGl4X2ZtdCk7Cj4gKyAgICBpbWdiLT5ucCA9IDM7IC8qIG9u bHkgZm9yIHl1djQyMHAsIHl1djQyMHBsZSAqLwo+ICsgICAgZm9yIChpPTA7IGk8aW1nYi0+bnA7 IGkrKykgewo+ICsgICAgICAgIGltZ2ItPnhbaV0gPSBpbWdiLT55W2ldID0gMDsKPiArICAgIH0K PiArICAgIGltZ2ItPndbMF0gPSBpbWdiLT5hd1swXSA9IHhlLT53aWR0aF9sdW1hOwo+ICsgICAg aW1nYi0+d1sxXSA9IGltZ2ItPndbMl0gPSBpbWdiLT5hd1sxXT0gaW1nYi0+YXdbMl0gPSB4ZS0+ d2lkdGhfY2hyb21hOwo+ICsgICAgaW1nYi0+aFswXSA9IGltZ2ItPmFoWzBdID0geGUtPmhlaWdo dF9sdW1hOwo+ICsgICAgaW1nYi0+aFsxXSA9IGltZ2ItPmhbMl0gPSBpbWdiLT5haFsxXSA9IGlt Z2ItPmFoWzJdID0geGUtPmhlaWdodF9jaHJvbWE7Cj4gKwo+ICsgICAgeGUtPmVuY29kX2ZyYW1l cyA9IDA7Cj4gKyAgICB4ZS0+Ynl0ZXNfdG90YWwgPSAwOwo+ICsgICAgeGUtPnN0YXRlID0gU1RB VEVfRU5DT0RJTkc7Cj4gKyAgICB4ZS0+cGFja2V0X2NvdW50ID0gMDsKPiArICAgIHhlLT5iaXRy YXRlID0gMDsKPiArICAgIHJldHVybiAwOwo+ICsKPiArRVJSOgo+ICsgICAgaWYoYnNfYnVmKSBm cmVlKGJzX2J1Zik7Cj4gKyAgICByZXR1cm4gLTE7Cj4gK30KPiArCj4gKy8qKgo+ICsgICogRW5j b2RlIGRhdGEgdG8gYW4gQVZQYWNrZXQuCj4gKyAgKgo+ICsgICogQHBhcmFtICAgICAgY3R4ICAg ICAgICAgICAgY29kZWMgY29udGV4dAo+ICsgICogQHBhcmFtICAgICAgcGt0ICAgICAgICAgICAg b3V0cHV0IEFWUGFja2V0Cj4gKyAgKiBAcGFyYW1baW5dICBmcmFtZSAgICAgICAgICBBVkZyYW1l IGNvbnRhaW5pbmcgdGhlIHJhdyBkYXRhIHRvIGJlIGVuY29kZWQKPiArICAqIEBwYXJhbVtvdXRd IGdvdF9wYWNrZXQgICAgIGVuY29kZXIgc2V0cyB0byAwIG9yIDEgdG8gaW5kaWNhdGUgdGhhdCBh Cj4gKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub24tZW1wdHkgcGFja2V0IHdhcyBy ZXR1cm5lZCBpbiBhdnBrdC4KPiArICAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBl cnJvciBjb2RlIG9uIGZhaWx1cmUKPiArICAqLwo+ICtzdGF0aWMgaW50IGxpYnhldmVfZW5jb2Rl KEFWQ29kZWNDb250ZXh0ICpjdHgsIEFWUGFja2V0ICpwa3QsCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgQVZGcmFtZSAqZnJhbWUsIGludCAqZ290X3BhY2tldCkKPiArewo+ICsg ICAgWGV2ZUNvbnRleHQgKnhlID0gTlVMTDsKPiArICAgIGludCAgcmV0ID0gLTE7Cj4gKyAgICBp bnQgeGV2ZV9jczsKPiArICAgIGlmKGN0eCA9PSBOVUxMIHx8IHBrdCA9PSBOVUxMIHx8IGdvdF9w YWNrZXQ9PU5VTEwpIHsKClVubmVjZXNzYXJ5IGNoZWNrcy4KCj4gKyAgICAgICAgYXZfbG9nKGN0 eCwgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCBhcmd1bWVudHNcbiIpOwo+ICsgICAgICAgIHJldHVy biAtMTsKPiArICAgIH0KPiArICAgIHhlID0gY3R4LT5wcml2X2RhdGE7CgpTYW1lLgoKPiArICAg IGlmKHhlID09IE5VTEwpIHsKPiArICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJJ bnZhbGlkIFhFVkUgY29udGV4dFxuIik7Cj4gKyAgICAgICAgcmV0dXJuIC0xOwo+ICsgICAgfQo+ ICsgICAgaWYoeGUtPnN0YXRlID09IFNUQVRFX1NLSVBQSU5HICYmIGZyYW1lICkgewo+ICsgICAg ICAgIGF2X2xvZyhjdHgsIEFWX0xPR19ERUJVRywgIkVtcHR5IGZyYW1lIC0+IEVudGVyaW5nIGVu Y29kaW5nIHByb2Nlc3MuLi5cbiIpOwo+ICsgICAgICAgIHhlLT5zdGF0ZSA9IFNUQVRFX0VOQ09E SU5HOwo+ICsgICAgfSBlbHNlIGlmKHhlLT5zdGF0ZSA9PSBTVEFURV9FTkNPRElORyAmJiBmcmFt ZSA9PSBOVUxMKSB7Cj4gKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0RFQlVHLCAiRW1wdHkg ZnJhbWUgLT4gRW50ZXJpbmcgYnVtcGluZyBwcm9jZXNzLi4uXG4iKTsKPiArICAgICAgICBpZiAo c2V0dXBfYnVtcGluZyh4ZS0+aWQpID09IDApIHsKPiArICAgICAgICAgICAgeGUtPnN0YXRlID0g U1RBVEVfQlVNUElORzsKPiArICAgICAgICB9IGVsc2Ugewo+ICsgICAgICAgICAgICBhdl9sb2co Y3R4LCBBVl9MT0dfRVJST1IsIkZhaWxlZCB0byBzZXR1cCBidW1waW5nXG4iKTsKPiArICAgICAg ICAgICAgeGUtPnN0YXRlID0gU1RBVEVfU0tJUFBJTkc7Cj4gKyAgICAgICAgfQo+ICsgICAgfQo+ ICsKPiArICAgIGlmKHhlLT5zdGF0ZSA9PSBTVEFURV9FTkNPRElORykgewo+ICsgICAgICAgIGNv bnN0IEFWUGl4Rm10RGVzY3JpcHRvciAqcGl4ZWxfZm10X2Rlc2MgPSBhdl9waXhfZm10X2Rlc2Nf Z2V0IChmcmFtZS0+Zm9ybWF0KTsKPiArICAgICAgICBpZighcGl4ZWxfZm10X2Rlc2MpIHsKPiAr ICAgICAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIkludmFsaWQgcGl4ZWwgZm9y bWF0IGRlc2NyaXB0b3IgZm9yIHBpeGVsIGZvcm1hdDogJXNcbiIsIGF2X2dldF9waXhfZm10X25h bWUoY3R4LT5waXhfZm10KSk7Cj4gKyAgICAgICAgICAgIHJldHVybiAtMTsKPiArICAgICAgICB9 Cj4gKwo+ICsgICAgICAgIHhldmVfY3MgPSB4ZXZlX2NvbG9yX3NwYWNlKGN0eC0+cGl4X2ZtdCk7 Cj4gKyAgICAgICAgaWYoeGV2ZV9jcyAhPSBYRVZFX0NTX1lDQkNSNDIwICYmIHhldmVfY3MgIT0g WEVWRV9DU19ZQ0JDUjQyMF8xMExFKSB7Cj4gKyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xP R19FUlJPUiwgIkludmFsaWQgcGl4ZWwgZm9ybWF0OiAlc1xuIiwgYXZfZ2V0X3BpeF9mbXRfbmFt ZShjdHgtPnBpeF9mbXQpKTsKPiArICAgICAgICAgICAgcmV0dXJuIC0xOwo+ICsgICAgICAgIH0K PiArCj4gKyAgICAgICAgewo+ICsgICAgICAgICAgICBpbnQgaTsKPiArICAgICAgICAgICAgWEVW RV9JTUdCICogaW1nYiA9IE5VTEw7Cj4gKyAgICAgICAgICAgIGludCB4ZXZlX2J5dGVfZGVwdGgg PSAwOwo+ICsKPiArICAgICAgICAgICAgaW1nYiA9ICZ4ZS0+aW1nYjsKPiArCj4gKyAgICAgICAg ICAgIHhldmVfYnl0ZV9kZXB0aCA9IFhFVkVfQ1NfR0VUX0JZVEVfREVQVEgoeGV2ZV9jcyk7Cj4g KyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19ERUJVRywgImJ5dGUgZGVwdGg6ICVkXG4i LHhldmVfYnl0ZV9kZXB0aCk7Cj4gKwo+ICsgICAgICAgICAgICBmb3IgKGk9MDsgaTxpbWdiLT5u cDsgaSsrKSB7Cj4gKyAgICAgICAgICAgICAgICBpbWdiLT5hW2ldID0gZnJhbWUtPmRhdGFbaV07 Cj4gKyAgICAgICAgICAgICAgICBpbWdiLT5zW2ldID0gZnJhbWUtPmxpbmVzaXplW2ldOwo+ICsg ICAgICAgICAgICB9Cj4gKwo+ICsgICAgICAgICAgICBpZih4ZS0+aWQgPT0gTlVMTCkgewo+ICsg ICAgICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCBYRVZFIGVu Y29kZXJcbiIpOwo+ICsgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwo+ICsgICAgICAgICAgICB9 Cj4gKwo+ICsgICAgICAgICAgICBpbWdiLT50c1swXSA9IGZyYW1lLT5wdHM7Cj4gKyAgICAgICAg ICAgIGltZ2ItPnRzWzFdID0gMDsKPiArICAgICAgICAgICAgaW1nYi0+dHNbMl0gPSAwOwo+ICsg ICAgICAgICAgICBpbWdiLT50c1szXSA9IDA7Cj4gKwo+ICsgICAgICAgICAgICAvKiBwdXNoIGlt YWdlIHRvIGVuY29kZXIgKi8KPiArICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0RFQlVH LCAiSU5QVVQgfCBSQVcgZnJhbWUgfCB0aW1lc3RhbXBzIHwgJWxsZCB8ICVsbGQgfCAlbGxkIHwg JWxsZCB8XG4iLCBpbWdiLT50c1swXSwgaW1nYi0+dHNbMV0sIGltZ2ItPnRzWzJdLCBpbWdiLT50 c1szXSk7Cj4gKwo+ICsgICAgICAgICAgICByZXQgPSB4ZXZlX3B1c2goeGUtPmlkLCBpbWdiKTsK PiArICAgICAgICAgICAgaWYoWEVWRV9GQUlMRUQocmV0KSkgewo+ICsgICAgICAgICAgICAgICAg YXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAieGV2ZV9wdXNoKCkgZmFpbGVkXG4iKTsKPiArICAg ICAgICAgICAgICAgIHJldHVybiAtMTsKPiArICAgICAgICAgICAgfQo+ICsgICAgICAgIH0KPiAr ICAgIH0KPiArICAgIGlmKHhlLT5zdGF0ZSA9PSBTVEFURV9FTkNPRElORyB8fCB4ZS0+c3RhdGUg PT0gU1RBVEVfQlVNUElORykgewo+ICsKPiArICAgICAgICAvKiBlbmNvZGluZyAqLwo+ICsgICAg ICAgIHJldCA9IHhldmVfZW5jb2RlKHhlLT5pZCwgJih4ZS0+Yml0YiksICYoeGUtPnN0YXQpKTsK PiArICAgICAgICBpZihYRVZFX0ZBSUxFRChyZXQpKSB7Cj4gKyAgICAgICAgICAgIGF2X2xvZyhj dHgsIEFWX0xPR19FUlJPUiwgInhldmVfZW5jb2RlKCkgZmFpbGVkXG4iKTsKPiArICAgICAgICAg ICAgcmV0dXJuIC0xOwo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgeGUtPmVuY29kX2ZyYW1l cysrOwo+ICsKPiArICAgICAgICAvKiBzdG9yZSBiaXRzdHJlYW0gKi8KPiArICAgICAgICBpZiAo cmV0ID09IFhFVkVfT0tfT1VUX05PVF9BVkFJTEFCTEUpIHsKPiArICAgICAgICAgICAgYXZfbG9n KGN0eCwgQVZfTE9HX0RFQlVHLCAiUkVUVVJOIE9LIEJVVCBQSUNUVVJFIElTIE5PVCBBVkFJTEFC TEUgWUVUICglZCkgZnJhbWU6ICVkXG4iLCByZXQsIHhlLT5lbmNvZF9mcmFtZXMpOwo+ICsgICAg ICAgICAgICAqZ290X3BhY2tldCA9IDA7Cj4gKyAgICAgICAgICAgIHJldHVybiAwOwo+ICsgICAg ICAgIH0gZWxzZSBpZihyZXQgPT0gWEVWRV9PSykgewo+ICsgICAgICAgICAgICBpbnQgYXZfcGlj X3R5cGU7Cj4gKwo+ICsgICAgICAgICAgICBpZih4ZS0+c3RhdC53cml0ZSA+IDApIHsKPiArICAg ICAgICAgICAgICAgIHhlLT5ieXRlc190b3RhbCs9eGUtPnN0YXQud3JpdGU7Cj4gKyAgICAgICAg ICAgICAgICAvLyBhdl9sb2coY3R4LCBBVl9MT0dfREVCVUcsICJmcmFtZTogJWQgfCBCeXRlcyB3 cml0dGVuOiAgJWQgfCBieXRlcyB0b3RhbDogJWYgfCBmbnVtICVkIHwgJWxsZCB8ICVsbGQgfCAl bGxkIHwgJWxsZCB8XG4iLCB4ZS0+ZW5jb2RfZnJhbWVzLCB4ZS0+c3RhdC53cml0ZSwgeGUtPmJ5 dGVzX3RvdGFsLCB4ZS0+c3RhdC5mbnVtLCB4ZS0+Yml0Yi50c1swXSx4ZS0+Yml0Yi50c1sxXSx4 ZS0+Yml0Yi50c1syXSx4ZS0+Yml0Yi50c1szXSk7Cj4gKwo+ICsgICAgICAgICAgICAgICAgcmV0 ID0gYXZfZ3Jvd19wYWNrZXQocGt0LCB4ZS0+c3RhdC53cml0ZSk7CgpmZl9nZXRfZW5jb2RlX2J1 ZmZlcigpLgoKPiArICAgICAgICAgICAgICAgIGlmIChyZXQgPCAwKSB7Cj4gKyAgICAgICAgICAg ICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiQ2FuJ3QgYWxsb2NhdGUgbWVtb3J5 IGZvciBBVlBhY2tldCBkYXRhXG4iKTsKPiArICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0 Owo+ICsgICAgICAgICAgICAgICAgfQo+ICsKPiArICAgICAgICAgICAgICAgIG1lbWNweShwa3Qt PmRhdGEsIHhlLT5iaXRiLmFkZHIsIHhlLT5zdGF0LndyaXRlKTsKPiArCj4gKyAgICAgICAgICAg ICAgICBwa3QtPnB0cyA9IHhlLT5iaXRiLnRzWzBdOwo+ICsgICAgICAgICAgICAgICAgcGt0LT5k dHMgPSB4ZS0+Yml0Yi50c1sxXTsKPiArCj4gKyAgICAgICAgICAgICAgICBhdl9sb2coTlVMTCwg QVZfTE9HX0RFQlVHLCAiUFRTOiAlbGQgfCBEVFM6ICVsZFxuIiwgcGt0LT5wdHMsIHBrdC0+ZHRz KTsKPiArCj4gKyAgICAgICAgICAgICAgICB4ZS0+Yml0cmF0ZSArPSAoeGUtPnN0YXQud3JpdGUg LSB4ZS0+c3RhdC5zZWlfc2l6ZSk7Cj4gKwo+ICsgICAgICAgICAgICAgICAgc3dpdGNoKHhlLT5z dGF0LnN0eXBlKSB7Cj4gKyAgICAgICAgICAgICAgICBjYXNlIFhFVkVfU1RfSToKPiArICAgICAg ICAgICAgICAgICAgICBhdl9waWNfdHlwZSA9IEFWX1BJQ1RVUkVfVFlQRV9JOwo+ICsgICAgICAg ICAgICAgICAgICAgIHBrdC0+ZmxhZ3MgfD0gQVZfUEtUX0ZMQUdfS0VZOwo+ICsgICAgICAgICAg ICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgICAgICAgICAgY2FzZSBYRVZFX1NUX1A6Cj4gKyAg ICAgICAgICAgICAgICAgICAgYXZfcGljX3R5cGUgPSBBVl9QSUNUVVJFX1RZUEVfUDsKPiArICAg ICAgICAgICAgICAgICAgICBicmVhazsKPiArICAgICAgICAgICAgICAgIGNhc2UgWEVWRV9TVF9C Ogo+ICsgICAgICAgICAgICAgICAgICAgIGF2X3BpY190eXBlID0gQVZfUElDVFVSRV9UWVBFX0I7 Cj4gKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAgICAgICAgICBjYXNlIFhF VkVfU1RfVU5LTk9XTjoKPiArICAgICAgICAgICAgICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9H X0VSUk9SLCAidW5rbm93biBzbGljZSB0eXBlXG4iKTsKPiArICAgICAgICAgICAgICAgICAgICBy ZXR1cm4gLTE7Cj4gKyAgICAgICAgICAgICAgICB9Cj4gKwo+ICsgICAgICAgICAgICAgICAgYXZf bG9nKGN0eCwgQVZfTE9HX0RFQlVHLCAiT1VUUFVUIHwgRW5jb2RlZCB8IHNsaWNlIHR5cGU6ICVz IHwgZm51bTogJWxkIHwgcG9jOiAlZCB8IEJ5dGVzIHdyaXR0ZW46ICAlZCB8IGJ5dGVzIHRvdGFs OiAlZiB8IHRpbWVzdGFtcHMgfCAlbGxkIHwgJWxsZCB8ICVsbGQgfCAlbGxkIHxcbiIsCj4gKyAg ICAgICAgICAgICAgICAgICAgc2xpY2VfdHlwZShhdl9waWNfdHlwZSksCj4gKyAgICAgICAgICAg ICAgICAgICAgeGUtPnN0YXQuZm51bSwKPiArICAgICAgICAgICAgICAgICAgICB4ZS0+c3RhdC5w b2MsCj4gKyAgICAgICAgICAgICAgICAgICAgeGUtPnN0YXQud3JpdGUsCj4gKyAgICAgICAgICAg ICAgICAgICAgeGUtPmJ5dGVzX3RvdGFsLAo+ICsgICAgICAgICAgICAgICAgICAgIHhlLT5iaXRi LnRzWzBdLAo+ICsgICAgICAgICAgICAgICAgICAgIHhlLT5iaXRiLnRzWzFdLAo+ICsgICAgICAg ICAgICAgICAgICAgIHhlLT5iaXRiLnRzWzJdLAo+ICsgICAgICAgICAgICAgICAgICAgIHhlLT5i aXRiLnRzWzNdKTsKPiArCj4gKyAgICAgICAgICAgICAgICBmZl9zaWRlX2RhdGFfc2V0X2VuY29k ZXJfc3RhdHMocGt0LCB4ZS0+c3RhdC5xcCpGRl9RUDJMQU1CREEsIE5VTEwsIDAsIGF2X3BpY190 eXBlKTsKPiArCj4gKyAgICAgICAgICAgICAgICB4ZS0+Yml0cmF0ZSArPSAoeGUtPnN0YXQud3Jp dGUgLSB4ZS0+c3RhdC5zZWlfc2l6ZSk7Cj4gKwo+ICsgICAgICAgICAgICAgICAgKmdvdF9wYWNr ZXQgPSAxOwo+ICsgICAgICAgICAgICAgICAgeGUtPnBhY2tldF9jb3VudCsrOwo+ICsgICAgICAg ICAgICB9Cj4gKyAgICAgICAgfSBlbHNlIGlmIChyZXQgPT0gWEVWRV9PS19OT19NT1JFX0ZSTSkg ewo+ICsgICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfSU5GTywgIlJldHVybiBPSyBidXQg bm8gbW9yZSBmcmFtZXMgKCVkKVxuIiwgcmV0KTsKPiArICAgICAgICAgICAgcmV0dXJuIDA7Cj4g KyAgICAgICAgfSBlbHNlIHsKPiArICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0RFQlVH LCAiSW52YWxpZCByZXR1cm4gdmFsdWUgKCVkKVxuIiwgcmV0KTsKPiArICAgICAgICAgICAgcmV0 dXJuIC0xOwo+ICsgICAgICAgIH0KPiArICAgIH0gZWxzZSB7Cj4gKyAgICAgICAgYXZfbG9nKE5V TEwsIEFWX0xPR19FUlJPUiwgIlVkZWZpbmVkIHN0YXRlOiAlZFxuIiwgeGUtPnN0YXRlKTsKPiAr ICAgICAgICByZXR1cm4gLTE7Cj4gKyAgICB9Cj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiAr LyoqCj4gKyAqIERlc3Ryb3kgZW5jb2RlciBhbmQgcmVsZWFzZSBhbGwgdGhlIGFsbG9jYXRlZCBy ZXNvdXJjZXMKPiArICoKPiArICogQHBhcmFtIGN0eCBjb2RlYyBjb250ZXh0Cj4gKyAqIEByZXR1 cm4gMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUKPiArICovCj4g K3N0YXRpYyBhdl9jb2xkIGludCBsaWJ4ZXZlX2Nsb3NlKEFWQ29kZWNDb250ZXh0ICpjdHgpCj4g K3sKPiArICAgIFhldmVDb250ZXh0ICp4ZSA9IGN0eC0+cHJpdl9kYXRhOwo+ICsKPiArICAgIHhl dmVfZGVsZXRlKHhlLT5pZCk7Cj4gKwo+ICsgICAgaWYoeGUtPmJpdGIuYWRkcikgZnJlZSh4ZS0+ Yml0Yi5hZGRyKTsgLyogcmVsZWFzZSBiaXRzdHJlYW0gYnVmZmVyICovCj4gKwo+ICsgICAgcmV0 dXJuIDA7Cj4gK30KPiArCj4gKyNkZWZpbmUgT0ZGU0VUKHgpIG9mZnNldG9mKFhldmVDb250ZXh0 LCB4KQo+ICsjZGVmaW5lIFZFIEFWX09QVF9GTEFHX1ZJREVPX1BBUkFNIHwgQVZfT1BUX0ZMQUdf RU5DT0RJTkdfUEFSQU0KPiArCj4gKy8vIEV4YW1wbGUgb2YgdXNpbmc6IC4vZmZtcGVnIC14ZXZl LXBhcmFtcyAibT0yOnE9MTciCj4gKy8vIENvbnNpZGVyIHVzaW5nIGZvbGxvd2luZyBvcHRpb25z ICguL2ZmbXBlZyAtLWhlbHAgZW5jb2Rlcj1saWJ4ZXZlKQo+ICsvLwo+ICtzdGF0aWMgY29uc3Qg QVZPcHRpb24geGV2ZV9vcHRpb25zW10gPSB7Cj4gKyAgICB7ICJwcmVzZXQiLCAiRW5jb2Rpbmcg cHJlc2V0IGZvciBzZXR0aW5nIGVuY29kaW5nIHNwZWVkIFtmYXN0LCBtZWRpdW0sIHNsb3csIHBs YWNlYm9dIiwgT0ZGU0VUKG9wX3ByZXNldCksIEFWX09QVF9UWVBFX1NUUklORywgeyAuc3RyID0g Im1lZGl1bSIgfSwgMCwgMCwgVkUgfSwKPiArICAgIHsgInR1bmUiLCAiVHVuZWluZyBwYXJhbWV0 ZXIgZm9yIHNwZWNpYWwgcHVycG9zZSBvcGVyYXRpb24gW3BzbnIsIHplcm9sYXRlbmN5XSIsIE9G RlNFVChvcF90dW5lKSwgQVZfT1BUX1RZUEVfU1RSSU5HLCB7IDAgfSwgMCwgMCwgVkV9LAo+ICsg ICAgeyAicXAiLCAicXVhbnRpemF0aW9uIHBhcmFtZXRlciBxcCA8MC4uNTE+IFtkZWZhdWx0OiAz Ml0iLCBPRkZTRVQob3BfcXApLCBBVl9PUFRfVFlQRV9JTlQsIHsgLmk2NCA9IDMyIH0sIDAsIDUx LCBWRSB9LAo+ICsgICAgeyAiY3JmIiwgImNvbnN0YW50IHJhdGUgZmFjdG9yIDwtMS4uNTE+IFtk ZWZhdWx0OiAzMl0iLCBPRkZTRVQob3BfY3JmKSwgQVZfT1BUX1RZUEVfSU5ULCB7IC5pNjQgPSAt MSB9LCAtMSwgNTEsIFZFIH0sCj4gKyAgICB7ICJ4ZXZlLXBhcmFtcyIsICJvdmVycmlkZSB0aGUg eGV2ZSBjb25maWd1cmF0aW9uIHVzaW5nIGEgOi1zZXBhcmF0ZWQgbGlzdCBvZiBrZXk9dmFsdWUg cGFyYW1ldGVycyIsIE9GRlNFVCh4ZXZlX3BhcmFtcyksIEFWX09QVF9UWVBFX0RJQ1QsICAgeyAw IH0sIDAsIDAsIFZFIH0sCj4gKyAgICB7IE5VTEwgfQo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0 IEFWQ2xhc3MgeGV2ZV9jbGFzcyA9IHsKPiArICAgIC5jbGFzc19uYW1lID0gImxpYnhldmUiLAo+ ICsgICAgLml0ZW1fbmFtZSAgPSBhdl9kZWZhdWx0X2l0ZW1fbmFtZSwKPiArICAgIC5vcHRpb24g ICAgID0geGV2ZV9vcHRpb25zLAo+ICsgICAgLnZlcnNpb24gICAgPSBMSUJBVlVUSUxfVkVSU0lP Tl9JTlQsCj4gK307Cj4gKwo+ICsvKioKPiArICogIGxpYmF2Y29kZWMgZ2VuZXJpYyBnbG9iYWwg b3B0aW9ucywgd2hpY2ggY2FuIGJlIHNldCBvbiBhbGwgdGhlIGVuY29kZXJzIGFuZCBkZWNvZGVy cwo+ICsgKiAgQHNlZSBodHRwczovL3d3dy5mZm1wZWcub3JnL2ZmbXBlZy1jb2RlY3MuaHRtbCND b2RlYy1PcHRpb25zCj4gKyAqLwo+ICtzdGF0aWMgY29uc3QgQVZDb2RlY0RlZmF1bHQgeGV2ZV9k ZWZhdWx0c1tdID0gewo+ICsgICAgeyAiYiIsICIwIiB9LCAgICAgICAvLyBiaXRyYXRlCj4gKyAg ICB7ICJnIiwgIjAiIH0sICAgICAgIC8vIGdvcF9zaXplIChrZXktZnJhbWUgaW50ZXJ2YWwgMDog b25seSBvbmUgSS1mcmFtZSBhdCB0aGUgZmlyc3QgdGltZTsgMTogZXZlcnkgZnJhbWUgaXMgY29k ZWQgaW4gSS1mcmFtZSkKPiArICAgIHsgImJmIiwgIjE1In0sICAgICAgLy8gYmZyYW1lcyAoMDog bm8gQi1mcmFtZXMpCj4gKyAgICB7ICJwcm9maWxlIiwgIjAifSwgIC8vIGVuY29kZXIgY29kZWMg cHJvZmlsZSAoMDogYmFzZWxpZTsgMTogbWFpbikKPiArICAgIHsgInRocmVhZHMiLCAiMCJ9LCAg Ly8gbnVtYmVyIG9mIHRocmVhZHMgdG8gYmUgdXNlZCAoMDogYXV0b21hdGljYWxseSBzZWxlY3Qg dGhlIG51bWJlciBvZiB0aHJlYWRzIHRvIHNldCkKPiArICAgIHsgTlVMTCB9LAo+ICt9Owo+ICsK PiArQVZDb2RlYyBmZl9saWJ4ZXZlX2VuY29kZXIgPSB7Cj4gKyAgICAubmFtZSAgICAgICAgICAg ICA9ICJsaWJ4ZXZlIiwKPiArICAgIC5sb25nX25hbWUgICAgICAgID0gTlVMTF9JRl9DT05GSUdf U01BTEwoImxpYnhldmUgTVBFRy01IEVWQyIpLAo+ICsgICAgLnR5cGUgICAgICAgICAgICAgPSBB Vk1FRElBX1RZUEVfVklERU8sCj4gKyAgICAuaWQgICAgICAgICAgICAgICA9IEFWX0NPREVDX0lE X0VWQywKPiArICAgIC5pbml0ICAgICAgICAgICAgID0gbGlieGV2ZV9pbml0LAo+ICsgICAgLmlu aXRfc3RhdGljX2RhdGEgPSBsaWJ4ZXZlX2luaXRfc3RhdGljX2RhdGEsCj4gKyAgICAuZW5jb2Rl MiAgICAgICAgICA9IGxpYnhldmVfZW5jb2RlLAo+ICsgICAgLmNsb3NlICAgICAgICAgICAgPSBs aWJ4ZXZlX2Nsb3NlLAo+ICsgICAgLnByaXZfZGF0YV9zaXplICAgPSBzaXplb2YoWGV2ZUNvbnRl eHQpLAo+ICsgICAgLnByaXZfY2xhc3MgICAgICAgPSAmeGV2ZV9jbGFzcywKPiArICAgIC5kZWZh dWx0cyAgICAgICAgID0geGV2ZV9kZWZhdWx0cywKPiArICAgIC5jYXBhYmlsaXRpZXMgICAgID0g QVZfQ09ERUNfQ0FQX0RFTEFZIHwgQVZfQ09ERUNfQ0FQX0FVVE9fVEhSRUFEUyB8Cj4gKyAgICBB Vl9DT0RFQ19DQVBfRU5DT0RFUl9SRU9SREVSRURfT1BBUVVFLAoKWW91J3JlIG5vdCBzZXR0aW5n IHJlb3JkZXJlZF9vcGFxdWUsIHNvIHdoeSBzaWduYWwgdGhpcyBjb2RlYyBjYXBhYmlsaXR5PwoK QWxzbyBhZGQgQVZfQ09ERUNfQ0FQX0RSMSBpZiB5b3UgdXNlIGZmX2dldF9lbmNvZGVfYnVmZmVy KCkuCgo+ICsgICAgLndyYXBwZXJfbmFtZSAgICAgPSAibGlieGV2ZSIsCj4gK307Cj4gZGlmZiAt LWdpdCBhL2xpYmF2Y29kZWMvcGFyc2Vycy5jIGIvbGliYXZjb2RlYy9wYXJzZXJzLmMKPiBpbmRl eCA2YjQwYzE4ZDgwLi4yOTVmYTMzZjUyIDEwMDY0NAo+IC0tLSBhL2xpYmF2Y29kZWMvcGFyc2Vy cy5jCj4gKysrIGIvbGliYXZjb2RlYy9wYXJzZXJzLmMKPiBAQCAtNzMsNiArNzMsNyBAQCBleHRl cm4gY29uc3QgQVZDb2RlY1BhcnNlciBmZl92cDlfcGFyc2VyOwo+ICAgZXh0ZXJuIGNvbnN0IEFW Q29kZWNQYXJzZXIgZmZfd2VicF9wYXJzZXI7Cj4gICBleHRlcm4gY29uc3QgQVZDb2RlY1BhcnNl ciBmZl94Ym1fcGFyc2VyOwo+ICAgZXh0ZXJuIGNvbnN0IEFWQ29kZWNQYXJzZXIgZmZfeG1hX3Bh cnNlcjsKPiArZXh0ZXJuIGNvbnN0IEFWQ29kZWNQYXJzZXIgZmZfZXZjX3BhcnNlcjsKPiAgIAo+ ICAgI2luY2x1ZGUgImxpYmF2Y29kZWMvcGFyc2VyX2xpc3QuYyIKPiAgIAo+IGRpZmYgLS1naXQg YS9saWJhdmNvZGVjL3Byb2ZpbGVzLmMgYi9saWJhdmNvZGVjL3Byb2ZpbGVzLmMKPiBpbmRleCA3 YWY3ZmJlYjEzLi5hMzEyNDRlMGRiIDEwMDY0NAo+IC0tLSBhL2xpYmF2Y29kZWMvcHJvZmlsZXMu Ywo+ICsrKyBiL2xpYmF2Y29kZWMvcHJvZmlsZXMuYwo+IEBAIC0xODEsNCArMTgxLDEwIEBAIGNv bnN0IEFWUHJvZmlsZSBmZl9hcmliX2NhcHRpb25fcHJvZmlsZXNbXSA9IHsKPiAgICAgICB7IEZG X1BST0ZJTEVfVU5LTk9XTiB9Cj4gICB9Owo+ICAgCj4gK2NvbnN0IEFWUHJvZmlsZSBmZl9ldmNf cHJvZmlsZXNbXSA9IHsKPiArICAgIHsgRkZfUFJPRklMRV9FVkNfQkFTRUxJTkUsICAgICAgICAg ICAgICJCYXNlbGluZSIgICAgICAgICAgICAgIH0sCj4gKyAgICB7IEZGX1BST0ZJTEVfRVZDX01B SU4sICAgICAgICAgICAgICAgICAiTWFpbiIgICAgICAgICAgICAgICAgICB9LAo+ICsgICAgeyBG Rl9QUk9GSUxFX1VOS05PV04gfSwKPiArfTsKPiArCj4gICAjZW5kaWYgLyogIUNPTkZJR19TTUFM TCAqLwo+IGRpZmYgLS1naXQgYS9saWJhdmNvZGVjL3Byb2ZpbGVzLmggYi9saWJhdmNvZGVjL3By b2ZpbGVzLmgKPiBpbmRleCA0MWExOWFhOWFkLi5jZjkyYjVmMTI2IDEwMDY0NAo+IC0tLSBhL2xp YmF2Y29kZWMvcHJvZmlsZXMuaAo+ICsrKyBiL2xpYmF2Y29kZWMvcHJvZmlsZXMuaAo+IEBAIC03 Miw1ICs3Miw2IEBAIGV4dGVybiBjb25zdCBBVlByb2ZpbGUgZmZfc2JjX3Byb2ZpbGVzW107Cj4g ICBleHRlcm4gY29uc3QgQVZQcm9maWxlIGZmX3Byb3Jlc19wcm9maWxlc1tdOwo+ICAgZXh0ZXJu IGNvbnN0IEFWUHJvZmlsZSBmZl9tanBlZ19wcm9maWxlc1tdOwo+ICAgZXh0ZXJuIGNvbnN0IEFW UHJvZmlsZSBmZl9hcmliX2NhcHRpb25fcHJvZmlsZXNbXTsKPiArZXh0ZXJuIGNvbnN0IEFWUHJv ZmlsZSBmZl9ldmNfcHJvZmlsZXNbXTsKPiAgIAo+ICAgI2VuZGlmIC8qIEFWQ09ERUNfUFJPRklM RVNfSCAqLwo+IGRpZmYgLS1naXQgYS9saWJhdmNvZGVjL3ZlcnNpb24uaCBiL2xpYmF2Y29kZWMv dmVyc2lvbi5oCj4gaW5kZXggNGQ3NzQzMTg0Mi4uZmIxYTBmZWVjNiAxMDA2NDQKPiAtLS0gYS9s aWJhdmNvZGVjL3ZlcnNpb24uaAo+ICsrKyBiL2xpYmF2Y29kZWMvdmVyc2lvbi5oCj4gQEAgLTI4 LDcgKzI4LDcgQEAKPiAgICNpbmNsdWRlICJsaWJhdnV0aWwvdmVyc2lvbi5oIgo+ICAgCj4gICAj ZGVmaW5lIExJQkFWQ09ERUNfVkVSU0lPTl9NQUpPUiAgNTkKPiAtI2RlZmluZSBMSUJBVkNPREVD X1ZFUlNJT05fTUlOT1IgIDE4Cj4gKyNkZWZpbmUgTElCQVZDT0RFQ19WRVJTSU9OX01JTk9SICAx OQo+ICAgI2RlZmluZSBMSUJBVkNPREVDX1ZFUlNJT05fTUlDUk8gMTAwCj4gICAKPiAgICNkZWZp bmUgTElCQVZDT0RFQ19WRVJTSU9OX0lOVCAgQVZfVkVSU0lPTl9JTlQoTElCQVZDT0RFQ19WRVJT SU9OX01BSk9SLCBcCj4gZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L01ha2VmaWxlIGIvbGliYXZm b3JtYXQvTWFrZWZpbGUKPiBpbmRleCA4NGU3M2UzYzYzLi5kYjQ2MWU3OWI3IDEwMDY0NAo+IC0t LSBhL2xpYmF2Zm9ybWF0L01ha2VmaWxlCj4gKysrIGIvbGliYXZmb3JtYXQvTWFrZWZpbGUKPiBA QCAtMjQxLDYgKzI0MSw4IEBAIE9CSlMtJChDT05GSUdfSENPTV9ERU1VWEVSKSAgICAgICAgICAg ICAgKz0gaGNvbS5vIHBjbS5vCj4gICBPQkpTLSQoQ09ORklHX0hEU19NVVhFUikgICAgICAgICAg ICAgICAgICs9IGhkc2VuYy5vCj4gICBPQkpTLSQoQ09ORklHX0hFVkNfREVNVVhFUikgICAgICAg ICAgICAgICs9IGhldmNkZWMubyByYXdkZWMubwo+ICAgT0JKUy0kKENPTkZJR19IRVZDX01VWEVS KSAgICAgICAgICAgICAgICArPSByYXdlbmMubwo+ICtPQkpTLSQoQ09ORklHX0VWQ19ERU1VWEVS KSAgICAgICAgICAgICAgICs9IGV2Y2RlYy5vIHJhd2RlYy5vCj4gK09CSlMtJChDT05GSUdfRVZD X01VWEVSKSAgICAgICAgICAgICAgICAgKz0gcmF3ZW5jLm8KPiAgIE9CSlMtJChDT05GSUdfSExT X0RFTVVYRVIpICAgICAgICAgICAgICAgKz0gaGxzLm8gaGxzX3NhbXBsZV9lbmNyeXB0aW9uLm8K PiAgIE9CSlMtJChDT05GSUdfSExTX01VWEVSKSAgICAgICAgICAgICAgICAgKz0gaGxzZW5jLm8g aGxzcGxheWxpc3QubyBhdmMubwo+ICAgT0JKUy0kKENPTkZJR19ITk1fREVNVVhFUikgICAgICAg ICAgICAgICArPSBobm0ubwo+IGRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC9hbGxmb3JtYXRzLmMg Yi9saWJhdmZvcm1hdC9hbGxmb3JtYXRzLmMKPiBpbmRleCBkMDY2YTc3NDViLi4xMTQ4MDI0ZTcx IDEwMDY0NAo+IC0tLSBhL2xpYmF2Zm9ybWF0L2FsbGZvcm1hdHMuYwo+ICsrKyBiL2xpYmF2Zm9y bWF0L2FsbGZvcm1hdHMuYwo+IEBAIC0xNDUsNiArMTQ1LDggQEAgZXh0ZXJuIGNvbnN0IEFWSW5w dXRGb3JtYXQgIGZmX2VhX2NkYXRhX2RlbXV4ZXI7Cj4gICBleHRlcm4gY29uc3QgQVZJbnB1dEZv cm1hdCAgZmZfZWFjM19kZW11eGVyOwo+ICAgZXh0ZXJuIGNvbnN0IEFWT3V0cHV0Rm9ybWF0IGZm X2VhYzNfbXV4ZXI7Cj4gICBleHRlcm4gY29uc3QgQVZJbnB1dEZvcm1hdCAgZmZfZXBhZl9kZW11 eGVyOwo+ICtleHRlcm4gY29uc3QgQVZJbnB1dEZvcm1hdCAgZmZfZXZjX2RlbXV4ZXI7Cj4gK2V4 dGVybiBjb25zdCBBVk91dHB1dEZvcm1hdCBmZl9ldmNfbXV4ZXI7Cj4gICBleHRlcm4gY29uc3Qg QVZPdXRwdXRGb3JtYXQgZmZfZjR2X211eGVyOwo+ICAgZXh0ZXJuIGNvbnN0IEFWSW5wdXRGb3Jt YXQgIGZmX2ZmbWV0YWRhdGFfZGVtdXhlcjsKPiAgIGV4dGVybiBjb25zdCBBVk91dHB1dEZvcm1h dCBmZl9mZm1ldGFkYXRhX211eGVyOwo+IGRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC9ldmNkZWMu YyBiL2xpYmF2Zm9ybWF0L2V2Y2RlYy5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAw MDAwMDAwMDAwLi5kZDkxMDJjZGQ0Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2xpYmF2Zm9ybWF0 L2V2Y2RlYy5jCj4gQEAgLTAsMCArMSwxMzYgQEAKPiArLyoKPiArICogUkFXIEVWQyB2aWRlbyBk ZW11eGVyCj4gKyAqCj4gKyAqIENvcHlyaWdodCAoYykgMjAyMSBEYXdpZCBLb3ppbnNraSA8ZC5r b3ppbnNraUBzYW1zdW5nLmNvbT4KPiArICoKPiArICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZt cGVnLgo+ICsgKgo+ICsgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yCj4gKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKPiArICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCj4gKyAqIHZlcnNpb24gMi4xIG9mIHRo ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgo+ICsgKgo+ ICsgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz ZWZ1bCwKPiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKPiArICogTGVzc2VyIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiArICoKPiArICogWW91IHNob3VsZCBoYXZl IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+ICsgKiBM aWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3 YXJlCj4gKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv b3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKPiArICovCj4gKwo+ICsjaW5jbHVkZSAibGli YXZjb2RlYy9nZXRfYml0cy5oIgo+ICsjaW5jbHVkZSAibGliYXZjb2RlYy9nb2xvbWIuaCIKPiAr I2luY2x1ZGUgImF2Zm9ybWF0LmgiCj4gKyNpbmNsdWRlICJyYXdkZWMuaCIKPiArI2luY2x1ZGUg ImxpYmF2Y29kZWMvaW50ZXJuYWwuaCIKPiArI2luY2x1ZGUgInhldmQuaCIKCkxpa2Ugd2l0aCB0 aGUgcGFyc2VyLCB0aGUgZGVtdXhlciBhbmQgbXV4ZXIgY2FuJ3QgZGVwZW5kIG9uIGV4dGVybmFs IApsaWJyYXJpZXMuCgo+ICsKPiArdHlwZWRlZiBzdHJ1Y3QgRVZDUGFyc2VyQ29udGV4dCB7Cj4g KyAgICBpbnQgZ290X3NwczsKPiArICAgIGludCBnb3RfcHBzOwo+ICsgICAgaW50IGdvdF9pZHI7 Cj4gKyAgICBpbnQgZ290X25vbmlkcjsKPiArfSBFVkNQYXJzZXJDb250ZXh0Owo+ICsKPiArc3Rh dGljIGludCBnZXRfbmFsdV90eXBlKGNvbnN0IHVpbnQ4X3QgKmJzLCBpbnQgYnNfc2l6ZSkKPiAr ewo+ICsgICAgR2V0Qml0Q29udGV4dCBnYjsKPiArICAgIGludCBmemIsIG51dDsKPiArICAgIGlu aXRfZ2V0X2JpdHMoJmdiLCBicywgYnNfc2l6ZSAqIDgpOwo+ICsgICAgZnpiID0gZ2V0X2JpdHMx KCZnYik7Cj4gKyAgICBpZihmemIgIT0gMCkgewo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9M T0dfREVCVUcsICJmb3JiaWRkZW5femVyb19iaXQgaXMgbm90IGNsZWFyXG4iKTsKPiArICAgIH0K PiArICAgIG51dCA9IGdldF9iaXRzKCZnYiwgNik7IC8qIG5hbF91bml0X3R5cGVfcGx1czEgKi8K PiArICAgIHJldHVybiBudXQgLSAxOwo+ICt9Cj4gKwo+ICsvKioKPiArICogUmVhZCBOQUwgdW5p dCBsZW5ndGgKPiArICogQHBhcmFtIGJzIGlucHV0IGRhdGEgKGJpdHN0cmVhbSkKPiArICogQHJl dHVybiB0aGUgbGVuZ2h0aCBvZiBOQUwgdW5pdCBvbiBzdWNjZXNzLCAwIHZhbHVlIG9uIGZhaWx1 cmUKPiArICovCj4gK3N0YXRpYyB1aW50MzJfdCByZWFkX25hbF91bml0X2xlbmd0aChjb25zdCB1 aW50OF90ICpicywgaW50IGJzX3NpemUpCj4gK3sKPiArICAgIHVpbnQzMl90IGxlbiA9IDA7Cj4g KyAgICBYRVZEX0lORk8gaW5mbzsKPiArICAgIGludCByZXQ7Cj4gKwo+ICsgICAgaWYoYnNfc2l6 ZT49WEVWRF9OQUxfVU5JVF9MRU5HVEhfQllURSkgewo+ICsgICAgICAgIHJldCA9IHhldmRfaW5m bygodm9pZCopYnMsIFhFVkRfTkFMX1VOSVRfTEVOR1RIX0JZVEUsIDEsICZpbmZvKTsKPiArICAg ICAgICBpZiAoWEVWRF9GQUlMRUQocmV0KSkgewo+ICsgICAgICAgICAgICBhdl9sb2coTlVMTCwg QVZfTE9HX0VSUk9SLCAiQ2Fubm90IGdldCBiaXRzdHJlYW0gaW5mb3JtYXRpb25cbiIpOwo+ICsg ICAgICAgICAgICByZXR1cm4gMDsKPiArICAgICAgICB9Cj4gKyAgICAgICAgbGVuID0gaW5mby5u YWx1X2xlbjsKPiArICAgICAgICBpZihsZW4gPT0gMCkKPiArICAgICAgICB7Cj4gKyAgICAgICAg ICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJJbnZhbGlkIGJpdHN0cmVhbSBzaXplISBb JWRdXG4iLCBic19zaXplKTsKPiArICAgICAgICAgICAgcmV0dXJuIDA7Cj4gKyAgICAgICAgfQo+ ICsgICAgfQo+ICsgICAgcmV0dXJuIGxlbjsKPiArfQo+ICsKPiArc3RhdGljIGludCBwYXJzZV9u YWxfdW5pdHMoY29uc3QgQVZQcm9iZURhdGEgKnAsIEVWQ1BhcnNlckNvbnRleHQgKmV2KQo+ICt7 Cj4gKyAgICBpbnQgbmFsdV90eXBlOwo+ICsgICAgc2l6ZV90IG5hbHVfc2l6ZTsKPiArICAgIHVu c2lnbmVkIGNoYXIqIGJpdHMgPSAodW5zaWduZWQgY2hhciAqKXAtPmJ1ZjsKPiArICAgIGludCBi eXRlc190b19yZWFkID0gcC0+YnVmX3NpemU7Cj4gKwo+ICsgICAgYXZfbG9nKE5VTEwsIEFWX0xP R19ERUJVRywgImJ5dGVzX3RvX3JlYWQ6ICVkIFxuIiwgYnl0ZXNfdG9fcmVhZCk7Cj4gKwo+ICsg ICAgd2hpbGUoYnl0ZXNfdG9fcmVhZCA+IFhFVkRfTkFMX1VOSVRfTEVOR1RIX0JZVEUpIHsKPiAr Cj4gKyAgICAgICAgbmFsdV9zaXplID0gcmVhZF9uYWxfdW5pdF9sZW5ndGgoYml0cywgWEVWRF9O QUxfVU5JVF9MRU5HVEhfQllURSk7Cj4gKyAgICAgICAgaWYobmFsdV9zaXplID09IDApIGJyZWFr Owo+ICsKPiArICAgICAgICBiaXRzICs9IFhFVkRfTkFMX1VOSVRfTEVOR1RIX0JZVEU7Cj4gKyAg ICAgICAgYnl0ZXNfdG9fcmVhZCAtPSBYRVZEX05BTF9VTklUX0xFTkdUSF9CWVRFOwo+ICsKPiAr ICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0RFQlVHLCAibmFsdV9zaXplOiAlbGQgXG4iLCBu YWx1X3NpemUpOwo+ICsKPiArICAgICAgICBpZihieXRlc190b19yZWFkIDwgbmFsdV9zaXplKSBi cmVhazsKPiArCj4gKyAgICAgICAgbmFsdV90eXBlID0gZ2V0X25hbHVfdHlwZShiaXRzLCBieXRl c190b19yZWFkKTsKPiArCj4gKyAgICAgICAgYml0cyArPSBuYWx1X3NpemU7Cj4gKyAgICAgICAg Ynl0ZXNfdG9fcmVhZCAtPSBuYWx1X3NpemU7Cj4gKwo+ICsgICAgICAgIGlmIChuYWx1X3R5cGUg PT0gWEVWRF9OVVRfU1BTKSB7Cj4gKyAgICAgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfREVC VUcsICJYRVZEX05VVF9TUFMgXG4iKTsKPiArICAgICAgICAgICAgZXYtPmdvdF9zcHMrKzsKPiAr ICAgICAgICB9Cj4gKyAgICAgICAgZWxzZSBpZiAobmFsdV90eXBlID09IFhFVkRfTlVUX1BQUykg ewo+ICsgICAgICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0RFQlVHLCAiWEVWRF9OVVRfUFBT IFxuIik7Cj4gKyAgICAgICAgICAgIGV2LT5nb3RfcHBzKys7Cj4gKyAgICAgICAgfQo+ICsgICAg ICAgIGVsc2UgaWYgKG5hbHVfdHlwZSA9PSBYRVZEX05VVF9JRFIgKSB7Cj4gKyAgICAgICAgICAg IGF2X2xvZyhOVUxMLCBBVl9MT0dfREVCVUcsICJYRVZEX05VVF9JRFJcbiIpOwo+ICsgICAgICAg ICAgICBldi0+Z290X2lkcisrOwo+ICsgICAgICAgIH0KPiArICAgICAgICBlbHNlIGlmIChuYWx1 X3R5cGUgPT0gWEVWRF9OVVRfTk9OSURSKSB7Cj4gKyAgICAgICAgICAgIGF2X2xvZyhOVUxMLCBB Vl9MT0dfREVCVUcsICJYRVZEX05VVF9OT05JRFJcbiIpOwo+ICsgICAgICAgICAgICBldi0+Z290 X25vbmlkcisrOwo+ICsgICAgICAgIH0KPiArICAgIH0KPiArICAgIHJldHVybiAwOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgaW50IGV2Y19wcm9iZShjb25zdCBBVlByb2JlRGF0YSAqcCkKPiArewo+ICsg ICAgRVZDUGFyc2VyQ29udGV4dCBldiA9IHt9Owo+ICsgICAgaW50IHJldCA9IHBhcnNlX25hbF91 bml0cyhwLCAmZXYpOwo+ICsKPiArICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfREVCVUcsICJzcHM6 JWQgcHBzOiVkIGlkcjolZCBzbGk6JWRcbiIsIGV2LmdvdF9zcHMsIGV2LmdvdF9wcHMsIGV2Lmdv dF9pZHIsIGV2LmdvdF9ub25pZHIpOwo+ICsKPiArICAgIGlmIChyZXQgPT0gMCAmJiBldi5nb3Rf c3BzICYmIGV2LmdvdF9wcHMgJiYgKGV2LmdvdF9pZHIgfHwgZXYuZ290X25vbmlkciA+IDMpKQo+ ICsgICAgICAgIHJldHVybiBBVlBST0JFX1NDT1JFX0VYVEVOU0lPTiArIDE7ICAvLyAxIG1vcmUg dGhhbiAubXBnCj4gKwo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK0ZGX0RFRl9SQVdWSURF T19ERU1VWEVSKGV2YywgInJhdyBFVkMgdmlkZW8iLCBldmNfcHJvYmUsICJldmMiLCBBVl9DT0RF Q19JRF9FVkMpCj4gZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L2lzb21fdGFncy5jIGIvbGliYXZm b3JtYXQvaXNvbV90YWdzLmMKPiBpbmRleCA2MmU2MDQ3MGE4Li4wMjQ1Y2ZiOTk5IDEwMDY0NAo+ IC0tLSBhL2xpYmF2Zm9ybWF0L2lzb21fdGFncy5jCj4gKysrIGIvbGliYXZmb3JtYXQvaXNvbV90 YWdzLmMKPiBAQCAtMTQ1LDYgKzE0NSw4IEBAIGNvbnN0IEFWQ29kZWNUYWcgZmZfY29kZWNfbW92 dmlkZW9fdGFnc1tdID0gewo+ICAgICAgIHsgQVZfQ09ERUNfSURfSDI2NCwgTUtUQUcoJ2QnLCAn dicsICdhJywgJzEnKSB9LCAvKiBBVkMtYmFzZWQgRG9sYnkgVmlzaW9uIGRlcml2ZWQgZnJvbSBh dmMxICovCj4gICAgICAgeyBBVl9DT0RFQ19JRF9IMjY0LCBNS1RBRygnZCcsICd2JywgJ2EnLCAn dicpIH0sIC8qIEFWQy1iYXNlZCBEb2xieSBWaXNpb24gZGVyaXZlZCBmcm9tIGF2YzMgKi8KPiAg IAo+ICsgICAgeyBBVl9DT0RFQ19JRF9FVkMsICBNS1RBRygnZScsICd2JywgJ2MnLCAnMScpIH0s IC8qIEVWQy9NUEVHLTUgKi8KPiArCj4gICAgICAgeyBBVl9DT0RFQ19JRF9WUDgsICBNS1RBRygn dicsICdwJywgJzAnLCAnOCcpIH0sIC8qIFZQOCAqLwo+ICAgICAgIHsgQVZfQ09ERUNfSURfVlA5 LCAgTUtUQUcoJ3YnLCAncCcsICcwJywgJzknKSB9LCAvKiBWUDkgKi8KPiAgICAgICB7IEFWX0NP REVDX0lEX0FWMSwgIE1LVEFHKCdhJywgJ3YnLCAnMCcsICcxJykgfSwgLyogQVYxICovCj4gZGlm ZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L21vdi5jIGIvbGliYXZmb3JtYXQvbW92LmMKPiBpbmRleCA2 ZmIwOWRmN2UxLi5lODM4NzJmYmUyIDEwMDY0NAo+IC0tLSBhL2xpYmF2Zm9ybWF0L21vdi5jCj4g KysrIGIvbGliYXZmb3JtYXQvbW92LmMKPiBAQCAtODU2OCw3ICs4NTY4LDcgQEAgY29uc3QgQVZJ bnB1dEZvcm1hdCBmZl9tb3ZfZGVtdXhlciA9IHsKPiAgICAgICAubG9uZ19uYW1lICAgICAgPSBO VUxMX0lGX0NPTkZJR19TTUFMTCgiUXVpY2tUaW1lIC8gTU9WIiksCj4gICAgICAgLnByaXZfY2xh c3MgICAgID0gJm1vdl9jbGFzcywKPiAgICAgICAucHJpdl9kYXRhX3NpemUgPSBzaXplb2YoTU9W Q29udGV4dCksCj4gLSAgICAuZXh0ZW5zaW9ucyAgICAgPSAibW92LG1wNCxtNGEsM2dwLDNnMixt ajIscHNwLG00Yixpc20saXNtdixpc21hLGY0diIsCj4gKyAgICAuZXh0ZW5zaW9ucyAgICAgPSAi bW92LG1wNCxtNGEsM2dwLDNnMixtajIscHNwLG00Yixpc20saXNtdixpc21hLGY0dixldmMiLAo+ ICAgICAgIC5mbGFnc19pbnRlcm5hbCA9IEZGX0ZNVF9JTklUX0NMRUFOVVAsCj4gICAgICAgLnJl YWRfcHJvYmUgICAgID0gbW92X3Byb2JlLAo+ICAgICAgIC5yZWFkX2hlYWRlciAgICA9IG1vdl9y ZWFkX2hlYWRlciwKPiBkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvbW92ZW5jLmMgYi9saWJhdmZv cm1hdC9tb3ZlbmMuYwo+IGluZGV4IDRjODY4OTE5YWUuLjMwZTUwMzdmMDYgMTAwNjQ0Cj4gLS0t IGEvbGliYXZmb3JtYXQvbW92ZW5jLmMKPiArKysgYi9saWJhdmZvcm1hdC9tb3ZlbmMuYwo+IEBA IC0xMzQyLDYgKzEzNDIsMTYgQEAgc3RhdGljIGludCBtb3Zfd3JpdGVfaHZjY190YWcoQVZJT0Nv bnRleHQgKnBiLCBNT1ZUcmFjayAqdHJhY2spCj4gICAgICAgcmV0dXJuIHVwZGF0ZV9zaXplKHBi LCBwb3MpOwo+ICAgfQo+ICAgCj4gK3N0YXRpYyBpbnQgbW92X3dyaXRlX2V2Y2NfdGFnKEFWSU9D b250ZXh0ICpwYiwgTU9WVHJhY2sgKnRyYWNrKQo+ICt7Cj4gKyAgICBpbnQ2NF90IHBvcyA9IGF2 aW9fdGVsbChwYik7Cj4gKwo+ICsgICAgYXZpb193YjMyKHBiLCAwKTsKPiArICAgIGZmaW9fd2Zv dXJjYyhwYiwgImV2Y0MiKTsKPiArICAgIGZmX2lzb21fd3JpdGVfYXZjYyhwYiwgdHJhY2stPnZv c19kYXRhLCB0cmFjay0+dm9zX2xlbik7CgpXaHkgYXJlIHlvdSB3cml0aW5nIGgyNjQgZXh0cmFk YXRhPyBFc3BlY2lhbGx5IHdoZW4geW91IGRpZCBub3QgZGVmaW5lIAphbnkgYXMgZXhwb3J0ZWQg YnkgdGhlIGVuY29kZXIgb3IgdGhlIG1vdiBkZW11eGVyLgoKPiArICAgIHJldHVybiB1cGRhdGVf c2l6ZShwYiwgcG9zKTsKPiArfQo+ICsKPiAgIC8qIGFsc28gdXNlZCBieSBhbGwgYXZpZCBjb2Rl Y3MgKGR2LCBpbXgsIG1lcmlkaWVuKSBhbmQgdGhlaXIgdmFyaWFudHMgKi8KPiAgIHN0YXRpYyBp bnQgbW92X3dyaXRlX2F2aWRfdGFnKEFWSU9Db250ZXh0ICpwYiwgTU9WVHJhY2sgKnRyYWNrKQo+ ICAgewo+IEBAIC0xNTkxLDYgKzE2MDEsMTkgQEAgc3RhdGljIGludCBtb3ZfZ2V0X2gyNjRfY29k ZWNfdGFnKEFWRm9ybWF0Q29udGV4dCAqcywgTU9WVHJhY2sgKnRyYWNrKQo+ICAgICAgIHJldHVy biB0YWc7Cj4gICB9Cj4gICAKPiArc3RhdGljIGludCBtb3ZfZ2V0X2V2Y19jb2RlY190YWcoQVZG b3JtYXRDb250ZXh0ICpzLCBNT1ZUcmFjayAqdHJhY2spCj4gK3sKPiArICAgIGludCB0YWcgPSB0 cmFjay0+cGFyLT5jb2RlY190YWc7Cj4gKyAgICBpbnQgaW50ZXJsYWNlZCA9IHRyYWNrLT5wYXIt PmZpZWxkX29yZGVyID4gQVZfRklFTERfUFJPR1JFU1NJVkU7Cj4gKyAgICBBVlN0cmVhbSAqc3Qg PSB0cmFjay0+c3Q7Cj4gKyAgICBpbnQgcmF0ZSA9IGRlZmluZWRfZnJhbWVfcmF0ZShzLCBzdCk7 Cj4gKwo+ICsgICAgaWYgKCF0YWcpCj4gKyAgICAgICAgdGFnID0gTUtUQUcoJ2UnLCAndicsICdj JywgJ2knKTsgLy9mYWxsYmFjayB0YWcKPiArCj4gKyAgICByZXR1cm4gdGFnOwo+ICt9Cj4gKwo+ ICAgc3RhdGljIGNvbnN0IHN0cnVjdCB7Cj4gICAgICAgZW51bSBBVlBpeGVsRm9ybWF0IHBpeF9m bXQ7Cj4gICAgICAgdWludDMyX3QgdGFnOwo+IEBAIC0xNjcyLDYgKzE2OTUsOCBAQCBzdGF0aWMg dW5zaWduZWQgaW50IG1vdl9nZXRfY29kZWNfdGFnKEFWRm9ybWF0Q29udGV4dCAqcywgTU9WVHJh Y2sgKnRyYWNrKQo+ICAgICAgICAgICAgICAgdGFnID0gbW92X2dldF9tcGVnMl94ZGNhbV9jb2Rl Y190YWcocywgdHJhY2spOwo+ICAgICAgICAgICBlbHNlIGlmICh0cmFjay0+cGFyLT5jb2RlY19p ZCA9PSBBVl9DT0RFQ19JRF9IMjY0KQo+ICAgICAgICAgICAgICAgdGFnID0gbW92X2dldF9oMjY0 X2NvZGVjX3RhZyhzLCB0cmFjayk7Cj4gKyAgICAgICAgZWxzZSBpZiAodHJhY2stPnBhci0+Y29k ZWNfaWQgPT0gQVZfQ09ERUNfSURfRVZDKQo+ICsgICAgICAgICAgICB0YWcgPSBtb3ZfZ2V0X2V2 Y19jb2RlY190YWcocywgdHJhY2spOwo+ICAgICAgICAgICBlbHNlIGlmICh0cmFjay0+cGFyLT5j b2RlY19pZCA9PSBBVl9DT0RFQ19JRF9ETlhIRCkKPiAgICAgICAgICAgICAgIHRhZyA9IG1vdl9n ZXRfZG54aGRfY29kZWNfdGFnKHMsIHRyYWNrKTsKPiAgICAgICAgICAgZWxzZSBpZiAodHJhY2st PnBhci0+Y29kZWNfdHlwZSA9PSBBVk1FRElBX1RZUEVfVklERU8pIHsKPiBAQCAtMjIwOCw2ICsy MjMzLDkgQEAgc3RhdGljIGludCBtb3Zfd3JpdGVfdmlkZW9fdGFnKEFWRm9ybWF0Q29udGV4dCAq cywgQVZJT0NvbnRleHQgKnBiLCBNT1ZNdXhDb250ZXgKPiAgICAgICAgICAgbW92X3dyaXRlX2F2 Y2NfdGFnKHBiLCB0cmFjayk7Cj4gICAgICAgICAgIGlmICh0cmFjay0+bW9kZSA9PSBNT0RFX0lQ T0QpCj4gICAgICAgICAgICAgICBtb3Zfd3JpdGVfdXVpZF90YWdfaXBvZChwYik7Cj4gKyAgICB9 Cj4gKyAgICBlbHNlIGlmICh0cmFjay0+cGFyLT5jb2RlY19pZCA9PUFWX0NPREVDX0lEX0VWQykg ewo+ICsgICAgICAgIG1vdl93cml0ZV9ldmNjX3RhZyhwYiwgdHJhY2spOwo+ICAgICAgIH0gZWxz ZSBpZiAodHJhY2stPnBhci0+Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfVlA5KSB7Cj4gICAgICAg ICAgIG1vdl93cml0ZV92cGNjX3RhZyhtb3YtPmZjLCBwYiwgdHJhY2spOwo+ICAgICAgIH0gZWxz ZSBpZiAodHJhY2stPnBhci0+Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfQVYxKSB7Cj4gQEAgLTU3 MzcsNiArNTc2NSw3IEBAIGludCBmZl9tb3Zfd3JpdGVfcGFja2V0KEFWRm9ybWF0Q29udGV4dCAq cywgQVZQYWNrZXQgKnBrdCkKPiAgICAgICBpZiAoKHBhci0+Y29kZWNfaWQgPT0gQVZfQ09ERUNf SURfRE5YSEQgfHwKPiAgICAgICAgICAgIHBhci0+Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfSDI2 NCB8fAo+ICAgICAgICAgICAgcGFyLT5jb2RlY19pZCA9PSBBVl9DT0RFQ19JRF9IRVZDIHx8Cj4g KyAgICAgICAgIHBhci0+Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfRVZDIHx8Cj4gICAgICAgICAg ICBwYXItPmNvZGVjX2lkID09IEFWX0NPREVDX0lEX1RSVUVIRCB8fAo+ICAgICAgICAgICAgcGFy LT5jb2RlY19pZCA9PSBBVl9DT0RFQ19JRF9BQzMpICYmICF0cmstPnZvc19sZW4gJiYKPiAgICAg ICAgICAgICFUQUdfSVNfQVZDSSh0cmstPnRhZykpIHsKPiBAQCAtNzMxMSw2ICs3MzQwLDcgQEAg c3RhdGljIGNvbnN0IEFWQ29kZWNUYWcgY29kZWNfbXA0X3RhZ3NbXSA9IHsKPiAgICAgICB7IEFW X0NPREVDX0lEX0gyNjQsICAgICAgICAgICAgTUtUQUcoJ2EnLCAndicsICdjJywgJzMnKSB9LAo+ ICAgICAgIHsgQVZfQ09ERUNfSURfSEVWQywgICAgICAgICAgICBNS1RBRygnaCcsICdlJywgJ3Yn LCAnMScpIH0sCj4gICAgICAgeyBBVl9DT0RFQ19JRF9IRVZDLCAgICAgICAgICAgIE1LVEFHKCdo JywgJ3YnLCAnYycsICcxJykgfSwKPiArICAgIHsgQVZfQ09ERUNfSURfRVZDLCAgICAgICAgICAg ICBNS1RBRygnZScsICd2JywgJ2MnLCAnMScpIH0sCj4gICAgICAgeyBBVl9DT0RFQ19JRF9NUEVH MlZJREVPLCAgICAgIE1LVEFHKCdtJywgJ3AnLCAnNCcsICd2JykgfSwKPiAgICAgICB7IEFWX0NP REVDX0lEX01QRUcxVklERU8sICAgICAgTUtUQUcoJ20nLCAncCcsICc0JywgJ3YnKSB9LAo+ICAg ICAgIHsgQVZfQ09ERUNfSURfTUpQRUcsICAgICAgICAgICBNS1RBRygnbScsICdwJywgJzQnLCAn dicpIH0sCj4gZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L3Jhd2VuYy5jIGIvbGliYXZmb3JtYXQv cmF3ZW5jLmMKPiBpbmRleCA0YmJhZTc3MTdiLi4zMjJhYjU4M2FiIDEwMDY0NAo+IC0tLSBhL2xp YmF2Zm9ybWF0L3Jhd2VuYy5jCj4gKysrIGIvbGliYXZmb3JtYXQvcmF3ZW5jLmMKPiBAQCAtMzg2 LDYgKzM4NiwyMCBAQCBjb25zdCBBVk91dHB1dEZvcm1hdCBmZl9oZXZjX211eGVyID0gewo+ICAg fTsKPiAgICNlbmRpZgo+ICAgCj4gKyNpZiBDT05GSUdfRVZDX01VWEVSCj4gK0FWT3V0cHV0Rm9y bWF0IGZmX2V2Y19tdXhlciA9IHsKPiArICAgIC5uYW1lICAgICAgICAgICAgICA9ICJldmMiLAo+ ICsgICAgLmxvbmdfbmFtZSAgICAgICAgID0gTlVMTF9JRl9DT05GSUdfU01BTEwoInJhdyBFVkMg dmlkZW8iKSwKPiArICAgIC5leHRlbnNpb25zICAgICAgICA9ICJldmMiLAo+ICsgICAgLmF1ZGlv X2NvZGVjICAgICAgID0gQVZfQ09ERUNfSURfTk9ORSwKPiArICAgIC52aWRlb19jb2RlYyAgICAg ICA9IEFWX0NPREVDX0lEX0VWQywKPiArICAgIC53cml0ZV9oZWFkZXIgICAgICA9IGZvcmNlX29u ZV9zdHJlYW0sCj4gKyAgICAud3JpdGVfcGFja2V0ICAgICAgPSBmZl9yYXdfd3JpdGVfcGFja2V0 LAo+ICsgICAgLmZsYWdzICAgICAgICAgICAgID0gQVZGTVRfTk9USU1FU1RBTVBTLAo+ICt9Owo+ ICsjZW5kaWYKPiArCj4gKwo+ICAgI2lmIENPTkZJR19NNFZfTVVYRVIKPiAgIGNvbnN0IEFWT3V0 cHV0Rm9ybWF0IGZmX200dl9tdXhlciA9IHsKPiAgICAgICAubmFtZSAgICAgICAgICAgICAgPSAi bTR2IiwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZmZt cGVnLWRldmVsIG1haWxpbmcgbGlzdApmZm1wZWctZGV2ZWxAZmZtcGVnLm9yZwpodHRwczovL2Zm bXBlZy5vcmcvbWFpbG1hbi9saXN0aW5mby9mZm1wZWctZGV2ZWwKClRvIHVuc3Vic2NyaWJlLCB2 aXNpdCBsaW5rIGFib3ZlLCBvciBlbWFpbApmZm1wZWctZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3Jn IHdpdGggc3ViamVjdCAidW5zdWJzY3JpYmUiLgo=