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 B744A40B74 for ; Wed, 29 Dec 2021 00:54:31 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 6F19168AFEC; Wed, 29 Dec 2021 02:54:28 +0200 (EET) Received: from mail-ua1-f42.google.com (mail-ua1-f42.google.com [209.85.222.42]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 91E5368AA61 for ; Wed, 29 Dec 2021 02:54:22 +0200 (EET) Received: by mail-ua1-f42.google.com with SMTP id i6so34449790uae.6 for ; Tue, 28 Dec 2021 16:54:22 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=dkKIj4iOdxdahAfd9cHWUYo/1/U31dm01LM1mrrv9GM=; b=jUSG3CwUDqkFS2mBdQT3Fk0/NquFwjabJwedWbWLxsyjnH/oFitJAMHo7q8LZVCzX1 stvv/HmVqUy3YAuKxgv3SHZYyw/IhtL+meZpS3Zb9tr6iHV8mxNPQ0cMa7Iv/alIp/Dx dHGjyBh8ilIHGOGcgPwGLNN5ncwhfiSXDt7cPs2bBLgF4yIdXMSCZCY+WSkUAONyOTQM tDTia3K18STHrML512GlDqEXP5QGPM2fAxsi7/HC7R/Uhut2q6hUBQenJnceCyC6BiX2 vBPyjaxnBL52cGvwkxcuMK6kToZVXMpv8yF7a5ofdeXMMsTgkjSYJCdZxDFdIxTg5QPc qz1w== X-Gm-Message-State: AOAM5329fFKivkSkO0rbnz+tlieaFL/6jJRp7iQczAcPcV/Gws+jk5Ll AzQG/ggm4PkFEOcdH5Iw9MWwy9roGZrSUQnMTuGlbGKg5Eo= X-Google-Smtp-Source: ABdhPJxSbMRjXz9Zo9Cz5YdZvYZ37R9pBJ/0KDPVlWpe8fNzaro5esCYVZNeqXdCEwKiX9XPO+etVfBFwkpPhyCZeNw= X-Received: by 2002:a67:f793:: with SMTP id j19mr7216215vso.60.1640739260568; Tue, 28 Dec 2021 16:54:20 -0800 (PST) MIME-Version: 1.0 References: <7580B1EB-3AD3-4D90-AEDD-43F98F9BBC53@rastageeks.org> In-Reply-To: <7580B1EB-3AD3-4D90-AEDD-43F98F9BBC53@rastageeks.org> From: Aman Karmani Date: Tue, 28 Dec 2021 16:54:07 -0800 Message-ID: To: FFmpeg development discussions and patches X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: Re: [FFmpeg-devel] [PATCH v6 01/03] libavdevice/avfoundation.m: use AudioConvert, extend supported formats 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 Cc: Thilo Borgmann , Romain Beauxis Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: T24gVHVlLCBEZWMgMjgsIDIwMjEgYXQgMjo1MCBQTSBSb21haW4gQmVhdXhpcyA8dG9vdHNAcmFz dGFnZWVrcy5vcmc+IHdyb3RlOgoKPiBUaGlzIGlzIHRoZSBmaXJzdCBwYXRjaCBvZiBhIHNlcmll cyBvZiAzIHRoYXQgZml4LCBjbGVhbnVwIGFuZCBlbmhhbmNlIHRoZQo+IGF2Zm91bmRhdGlvbiBp bXBsZW1lbnRhdGlvbiBmb3IgbGliYXZkZXZpY2UuCj4KPiBUaGUgcGF0Y2hlcyBoYXZlIGJlZW4g c3VibWl0dGVkIGEgY291cGxlIG9mIHRpbWVzIG5vdyBhbmQgaGF2ZQo+IHJlY2VpdmVkIHZlcnkg bmljZSBmZWVkYmFjayBmb3IgdGhlIGxhc3QgdHdvIGhvd2V2ZXIgYnV0IHRoZXkgZG8gbm90IHNl ZW0KPiB0byBoYXZlIGJlZW4gY29uc2lkZXJlZCBmb3IgaW5jbHVzaW9uIHRodXMgZmFyLgo+Cj4g VGhlc2UgcGF0Y2hlcyBjb21lIGZyb20gYW4gYWN0dWFsIHVzZXItZmFjaW5nIGFwcGxpY2F0aW9u IHJlbHlpbmcgb24KPiBsaWJhdmRldmljZeKAmXMgaW1wbGVtZW50YXRpb24gb2YgYXZmb3VuZGF0 aW9uIGF1ZGlvIGlucHV0LiBXaXRob3V0IHRoZW0sCj4gQXZmb3VuZGF0aW9uIGlzIHByYWN0aWNh bGx5IHVudXNhYmxlIGFzIGl0IHdpbGw6Cj4gKiBSZWZ1c2UgdG8gcHJvY2VzcyBjZXJ0YWluIHNw ZWNpZmljIGF1ZGlvIGlucHV0IGZvcm1hdCB0aGF0IGFyZSBhY3R1YWxseQo+ICAgcmV0dXJuZWQg YnkgdGhlIE9TIGZvciBzb21lIHVzZXJzIChwYWNrZWQgUENNIGF1ZGlvKQo+ICogRHJvcCBhdWRp byBmcmFtZXMsIHJlc3VsdGluZyBpbiBjb3JydXB0ZWQgYXVkaW8gaW5wdXQuIFRoaXMgbWlnaHQg aGF2ZQo+IGJlZW4KPiAgIHVubm90aWNlZCB3aXRoIHZpZGVvIGZyYW1lcyBidXQgdGhpcyBtYWtl cyBhdmZvdW5kYXRpb24gZXNzZW50aWFsbHkKPiB1bnVzYWJsZQo+ICAgZm9yIGF1ZGlvLgo+Cj4g VGhlIHBhdGNoZXMgYXJlIG5vdyBiZWluZyBpbmNsdWRlZCBpbiBvdXIgcHJvZHVjdGlvbiBidWls ZCBzbyB0aGV5IGFyZQo+IHRlc3RlZAo+IGFuZCB1c2FibGUgaW4gcHJvZHVjdGlvbi4KPgo+IFNv LCB0aGlzIGJhcmVzIHRoZSBxdWVzdGlvbjogaXMgYXZmb3VuZGF0aW9uIHN0aWxsIHN1cHBvcnRl ZCBhbmQgYWN0aXZlbHkKPiBtYWludGFpbmVkCj4gaW4gbGliYXZkZXZpY2U/IEl0IGZlZWxzIHRo YXQgc3VjaCBpbXBvcnRhbnQgYnVncyBzaG91bGQgaGF2ZSBiZWVuIG5vdGljZWQKPiBieSBub3cK PiBhbmQgYWxzbyBnZW5lcmF0ZWQgYSBsaXR0bGUgbW9yZSBpbnRlcmVzdCBpbiBmaXhpbmcgdGhl bS4KCgpUaGFua3MgZm9yIHdvcmtpbmcgb24gdGhpcywgYW5kIGFkZHJlc3NpbmcgYWxsIHRoZSBm ZWVkYmFjayBzbyBmYXIuCgpUaGUgcGF0Y2hzZXQgTEdUTSwgYW5kIEkgdGhpbmsgaXQgc2hvdWxk IGJlIGFwcGxpZWQuCgpMb29rcyBsaWtlIE1BSU5UQUlORVJTIGxpc3RzIFRoaWxvIGZvciBhdmZv dW5kYXRpb24ubS4gSSdtIG5vdCBzdXJlIGlmIGhlJ3MKc2VlbiB0aGlzIHlldCwgc28gSSdtIGNj J2luZyBvbiB0aGlzIHJlcGx5LgoKSWYgd2UgZG9uJ3QgaGVhciBpbiB0aGUgbmV4dCBjb3VwbGUg d2Vla3MsIEkgY2FuIGFwcGx5IHRoZXNlIGNoYW5nZXMuCgpBbWFuCgoKPgo+IFRoYW5rcyBmb3Ig eeKAmWFsbCBmZWVkYmFjayEKPiDigJQgUm9tYWluCj4gLS0tLS0KPgo+IENoYW5nZXM6Cj4gKiB2 MjogTm9uZQo+ICogdjM6IE5vbmUKPiAqIHY0OiBOb25lCj4gKiB2NTogRml4IGluZGVudGF0aW9u L3dyYXBwaW5nCj4gKiB2NjogTm9uZQo+Cj4gKiBJbXBsZW1lbnQgc3VwcG9ydCBmb3IgQXVkaW9D b252ZXJ0ZXIKPiAqIFN3aXRjaCB0byBBdWRpb0NvbnZlcnRlcidzIEFQSSB0byBjb252ZXJ0IHVu c3VwcG9ydGVkIFBDTQo+ICAgZm9ybWF0cyAobm9uLWludGVybGVhdmVkLCBub24tcGFja2VkKSB0 byBzdXBwb3J0ZWQgZm9ybWF0cwo+ICogTWluaW1pemUgZGF0YSBjb3B5Lgo+Cj4gVGhpcyBmaXhl czogaHR0cHM6Ly90cmFjLmZmbXBlZy5vcmcvdGlja2V0Lzk1MDIKPgo+IEFQSSByZWY6Cj4KPiBo dHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi9hdWRpb3Rvb2xib3gvYXVk aW9fY29udmVydGVyX3NlcnZpY2VzCj4KPiBTaWduZWQtb2ZmLWJ5OiBSb21haW4gQmVhdXhpcyA8 dG9vdHNAcmFzdGFnZWVrcy5vcmc+Cj4gLS0tCj4gbGliYXZkZXZpY2UvYXZmb3VuZGF0aW9uLm0g fCAyNTAgKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLQo+IDEgZmlsZSBjaGFu Z2VkLCAxNDQgaW5zZXJ0aW9ucygrKSwgMTA2IGRlbGV0aW9ucygtKQo+Cj4gZGlmZiAtLWdpdCBh L2xpYmF2ZGV2aWNlL2F2Zm91bmRhdGlvbi5tIGIvbGliYXZkZXZpY2UvYXZmb3VuZGF0aW9uLm0K PiBpbmRleCAwY2Q2ZTY0NmQ1Li43OWM5MjA3Y2ZhIDEwMDY0NAo+IC0tLSBhL2xpYmF2ZGV2aWNl L2F2Zm91bmRhdGlvbi5tCj4gKysrIGIvbGliYXZkZXZpY2UvYXZmb3VuZGF0aW9uLm0KPiBAQCAt MTExLDE2ICsxMTEsMTAgQEAKPgo+ICAgICBpbnQgICAgICAgICAgICAgbnVtX3ZpZGVvX2Rldmlj ZXM7Cj4KPiAtICAgIGludCAgICAgICAgICAgICBhdWRpb19jaGFubmVsczsKPiAtICAgIGludCAg ICAgICAgICAgICBhdWRpb19iaXRzX3Blcl9zYW1wbGU7Cj4gLSAgICBpbnQgICAgICAgICAgICAg YXVkaW9fZmxvYXQ7Cj4gLSAgICBpbnQgICAgICAgICAgICAgYXVkaW9fYmU7Cj4gLSAgICBpbnQg ICAgICAgICAgICAgYXVkaW9fc2lnbmVkX2ludGVnZXI7Cj4gLSAgICBpbnQgICAgICAgICAgICAg YXVkaW9fcGFja2VkOwo+IC0gICAgaW50ICAgICAgICAgICAgIGF1ZGlvX25vbl9pbnRlcmxlYXZl ZDsKPiAtCj4gLSAgICBpbnQzMl90ICAgICAgICAgKmF1ZGlvX2J1ZmZlcjsKPiAtICAgIGludCAg ICAgICAgICAgICBhdWRpb19idWZmZXJfc2l6ZTsKPiArICAgIFVJbnQzMiAgICAgICAgICAgIGF1 ZGlvX2J1ZmZlcnM7Cj4gKyAgICBVSW50MzIgICAgICAgICAgICBhdWRpb19jaGFubmVsczsKPiAr ICAgIFVJbnQzMiAgICAgICAgICAgIGJ5dGVzX3Blcl9zYW1wbGU7Cj4gKyAgICBBdWRpb0NvbnZl cnRlclJlZiBhdWRpb19jb252ZXJ0ZXI7Cj4KPiAgICAgZW51bSBBVlBpeGVsRm9ybWF0IHBpeGVs X2Zvcm1hdDsKPgo+IEBAIC0yOTksNyArMjkzLDEwIEBAIHN0YXRpYyB2b2lkIGRlc3Ryb3lfY29u dGV4dChBVkZDb250ZXh0KiBjdHgpCj4gICAgIGN0eC0+YXZmX2RlbGVnYXRlICAgID0gTlVMTDsK PiAgICAgY3R4LT5hdmZfYXVkaW9fZGVsZWdhdGUgPSBOVUxMOwo+Cj4gLSAgICBhdl9mcmVlcCgm Y3R4LT5hdWRpb19idWZmZXIpOwo+ICsgICAgaWYgKGN0eC0+YXVkaW9fY29udmVydGVyKSB7Cj4g KyAgICAgIEF1ZGlvQ29udmVydGVyRGlzcG9zZShjdHgtPmF1ZGlvX2NvbnZlcnRlcik7Cj4gKyAg ICAgIGN0eC0+YXVkaW9fY29udmVydGVyID0gTlVMTDsKPiArICAgIH0KPgo+ICAgICBwdGhyZWFk X211dGV4X2Rlc3Ryb3koJmN0eC0+ZnJhbWVfbG9jayk7Cj4KPiBAQCAtNjczLDYgKzY3MCwxMCBA QCBzdGF0aWMgaW50IGdldF9hdWRpb19jb25maWcoQVZGb3JtYXRDb250ZXh0ICpzKQo+ICAgICBB VkZDb250ZXh0ICpjdHggPSAoQVZGQ29udGV4dCopcy0+cHJpdl9kYXRhOwo+ICAgICBDTUZvcm1h dERlc2NyaXB0aW9uUmVmIGZvcm1hdF9kZXNjOwo+ICAgICBBVlN0cmVhbSogc3RyZWFtID0gYXZm b3JtYXRfbmV3X3N0cmVhbShzLCBOVUxMKTsKPiArICAgIEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlw dGlvbiBvdXRwdXRfZm9ybWF0ID0gezB9Owo+ICsgICAgaW50IGF1ZGlvX2JpdHNfcGVyX3NhbXBs ZSwgYXVkaW9fZmxvYXQsIGF1ZGlvX2JlOwo+ICsgICAgaW50IGF1ZGlvX3NpZ25lZF9pbnRlZ2Vy LCBhdWRpb19wYWNrZWQsIGF1ZGlvX25vbl9pbnRlcmxlYXZlZDsKPiArICAgIGludCBtdXN0X2Nv bnZlcnQgPSAwOwo+Cj4gICAgIGlmICghc3RyZWFtKSB7Cj4gICAgICAgICByZXR1cm4gMTsKPiBA QCAtNjkwLDYwICs2OTEsOTUgQEAgc3RhdGljIGludCBnZXRfYXVkaW9fY29uZmlnKEFWRm9ybWF0 Q29udGV4dCAqcykKPiAgICAgYXZwcml2X3NldF9wdHNfaW5mbyhzdHJlYW0sIDY0LCAxLCBhdmZf dGltZV9iYXNlKTsKPgo+ICAgICBmb3JtYXRfZGVzYyA9Cj4gQ01TYW1wbGVCdWZmZXJHZXRGb3Jt YXREZXNjcmlwdGlvbihjdHgtPmN1cnJlbnRfYXVkaW9fZnJhbWUpOwo+IC0gICAgY29uc3QgQXVk aW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uICpiYXNpY19kZXNjID0KPiBDTUF1ZGlvRm9ybWF0RGVz Y3JpcHRpb25HZXRTdHJlYW1CYXNpY0Rlc2NyaXB0aW9uKGZvcm1hdF9kZXNjKTsKPiArICAgIGNv bnN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiAqaW5wdXRfZm9ybWF0ID0KPiBDTUF1ZGlv Rm9ybWF0RGVzY3JpcHRpb25HZXRTdHJlYW1CYXNpY0Rlc2NyaXB0aW9uKGZvcm1hdF9kZXNjKTsK Pgo+IC0gICAgaWYgKCFiYXNpY19kZXNjKSB7Cj4gKyAgICBpZiAoIWlucHV0X2Zvcm1hdCkgewo+ ICAgICAgICAgdW5sb2NrX2ZyYW1lcyhjdHgpOwo+ICAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19F UlJPUiwgImF1ZGlvIGZvcm1hdCBub3QgYXZhaWxhYmxlXG4iKTsKPiAgICAgICAgIHJldHVybiAx Owo+ICAgICB9Cj4KPiArICAgIGlmIChpbnB1dF9mb3JtYXQtPm1Gb3JtYXRJRCAhPSBrQXVkaW9G b3JtYXRMaW5lYXJQQ00pIHsKPiArICAgICAgICB1bmxvY2tfZnJhbWVzKGN0eCk7Cj4gKyAgICAg ICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgIm9ubHkgUENNIGF1ZGlvIGZvcm1hdCBhcmUgc3Vw cG9ydGVkIGF0Cj4gdGhlIG1vbWVudFxuIik7Cj4gKyAgICAgICAgcmV0dXJuIDE7Cj4gKyAgICB9 Cj4gKwo+ICAgICBzdHJlYW0tPmNvZGVjcGFyLT5jb2RlY190eXBlICAgICA9IEFWTUVESUFfVFlQ RV9BVURJTzsKPiAtICAgIHN0cmVhbS0+Y29kZWNwYXItPnNhbXBsZV9yYXRlICAgID0gYmFzaWNf ZGVzYy0+bVNhbXBsZVJhdGU7Cj4gLSAgICBzdHJlYW0tPmNvZGVjcGFyLT5jaGFubmVscyAgICAg ICA9IGJhc2ljX2Rlc2MtPm1DaGFubmVsc1BlckZyYW1lOwo+ICsgICAgc3RyZWFtLT5jb2RlY3Bh ci0+c2FtcGxlX3JhdGUgICAgPSBpbnB1dF9mb3JtYXQtPm1TYW1wbGVSYXRlOwo+ICsgICAgc3Ry ZWFtLT5jb2RlY3Bhci0+Y2hhbm5lbHMgICAgICAgPSBpbnB1dF9mb3JtYXQtPm1DaGFubmVsc1Bl ckZyYW1lOwo+ICAgICBzdHJlYW0tPmNvZGVjcGFyLT5jaGFubmVsX2xheW91dCA9Cj4gYXZfZ2V0 X2RlZmF1bHRfY2hhbm5lbF9sYXlvdXQoc3RyZWFtLT5jb2RlY3Bhci0+Y2hhbm5lbHMpOwo+Cj4g LSAgICBjdHgtPmF1ZGlvX2NoYW5uZWxzICAgICAgICA9IGJhc2ljX2Rlc2MtPm1DaGFubmVsc1Bl ckZyYW1lOwo+IC0gICAgY3R4LT5hdWRpb19iaXRzX3Blcl9zYW1wbGUgPSBiYXNpY19kZXNjLT5t Qml0c1BlckNoYW5uZWw7Cj4gLSAgICBjdHgtPmF1ZGlvX2Zsb2F0ICAgICAgICAgICA9IGJhc2lj X2Rlc2MtPm1Gb3JtYXRGbGFncyAmCj4ga0F1ZGlvRm9ybWF0RmxhZ0lzRmxvYXQ7Cj4gLSAgICBj dHgtPmF1ZGlvX2JlICAgICAgICAgICAgICA9IGJhc2ljX2Rlc2MtPm1Gb3JtYXRGbGFncyAmCj4g a0F1ZGlvRm9ybWF0RmxhZ0lzQmlnRW5kaWFuOwo+IC0gICAgY3R4LT5hdWRpb19zaWduZWRfaW50 ZWdlciAgPSBiYXNpY19kZXNjLT5tRm9ybWF0RmxhZ3MgJgo+IGtBdWRpb0Zvcm1hdEZsYWdJc1Np Z25lZEludGVnZXI7Cj4gLSAgICBjdHgtPmF1ZGlvX3BhY2tlZCAgICAgICAgICA9IGJhc2ljX2Rl c2MtPm1Gb3JtYXRGbGFncyAmCj4ga0F1ZGlvRm9ybWF0RmxhZ0lzUGFja2VkOwo+IC0gICAgY3R4 LT5hdWRpb19ub25faW50ZXJsZWF2ZWQgPSBiYXNpY19kZXNjLT5tRm9ybWF0RmxhZ3MgJgo+IGtB dWRpb0Zvcm1hdEZsYWdJc05vbkludGVybGVhdmVkOwo+IC0KPiAtICAgIGlmIChiYXNpY19kZXNj LT5tRm9ybWF0SUQgPT0ga0F1ZGlvRm9ybWF0TGluZWFyUENNICYmCj4gLSAgICAgICAgY3R4LT5h dWRpb19mbG9hdCAmJgo+IC0gICAgICAgIGN0eC0+YXVkaW9fYml0c19wZXJfc2FtcGxlID09IDMy ICYmCj4gLSAgICAgICAgY3R4LT5hdWRpb19wYWNrZWQpIHsKPiAtICAgICAgICBzdHJlYW0tPmNv ZGVjcGFyLT5jb2RlY19pZCA9IGN0eC0+YXVkaW9fYmUgPwo+IEFWX0NPREVDX0lEX1BDTV9GMzJC RSA6IEFWX0NPREVDX0lEX1BDTV9GMzJMRTsKPiAtICAgIH0gZWxzZSBpZiAoYmFzaWNfZGVzYy0+ bUZvcm1hdElEID09IGtBdWRpb0Zvcm1hdExpbmVhclBDTSAmJgo+IC0gICAgICAgIGN0eC0+YXVk aW9fc2lnbmVkX2ludGVnZXIgJiYKPiAtICAgICAgICBjdHgtPmF1ZGlvX2JpdHNfcGVyX3NhbXBs ZSA9PSAxNiAmJgo+IC0gICAgICAgIGN0eC0+YXVkaW9fcGFja2VkKSB7Cj4gLSAgICAgICAgc3Ry ZWFtLT5jb2RlY3Bhci0+Y29kZWNfaWQgPSBjdHgtPmF1ZGlvX2JlID8KPiBBVl9DT0RFQ19JRF9Q Q01fUzE2QkUgOiBBVl9DT0RFQ19JRF9QQ01fUzE2TEU7Cj4gLSAgICB9IGVsc2UgaWYgKGJhc2lj X2Rlc2MtPm1Gb3JtYXRJRCA9PSBrQXVkaW9Gb3JtYXRMaW5lYXJQQ00gJiYKPiAtICAgICAgICBj dHgtPmF1ZGlvX3NpZ25lZF9pbnRlZ2VyICYmCj4gLSAgICAgICAgY3R4LT5hdWRpb19iaXRzX3Bl cl9zYW1wbGUgPT0gMjQgJiYKPiAtICAgICAgICBjdHgtPmF1ZGlvX3BhY2tlZCkgewo+IC0gICAg ICAgIHN0cmVhbS0+Y29kZWNwYXItPmNvZGVjX2lkID0gY3R4LT5hdWRpb19iZSA/Cj4gQVZfQ09E RUNfSURfUENNX1MyNEJFIDogQVZfQ09ERUNfSURfUENNX1MyNExFOwo+IC0gICAgfSBlbHNlIGlm IChiYXNpY19kZXNjLT5tRm9ybWF0SUQgPT0ga0F1ZGlvRm9ybWF0TGluZWFyUENNICYmCj4gLSAg ICAgICAgY3R4LT5hdWRpb19zaWduZWRfaW50ZWdlciAmJgo+IC0gICAgICAgIGN0eC0+YXVkaW9f Yml0c19wZXJfc2FtcGxlID09IDMyICYmCj4gLSAgICAgICAgY3R4LT5hdWRpb19wYWNrZWQpIHsK PiAtICAgICAgICBzdHJlYW0tPmNvZGVjcGFyLT5jb2RlY19pZCA9IGN0eC0+YXVkaW9fYmUgPwo+ IEFWX0NPREVDX0lEX1BDTV9TMzJCRSA6IEFWX0NPREVDX0lEX1BDTV9TMzJMRTsKPiArICAgIGF1 ZGlvX2JpdHNfcGVyX3NhbXBsZSA9IGlucHV0X2Zvcm1hdC0+bUJpdHNQZXJDaGFubmVsOwo+ICsg ICAgYXVkaW9fZmxvYXQgICAgICAgICAgID0gaW5wdXRfZm9ybWF0LT5tRm9ybWF0RmxhZ3MgJgo+ IGtBdWRpb0Zvcm1hdEZsYWdJc0Zsb2F0Owo+ICsgICAgYXVkaW9fYmUgICAgICAgICAgICAgID0g aW5wdXRfZm9ybWF0LT5tRm9ybWF0RmxhZ3MgJgo+IGtBdWRpb0Zvcm1hdEZsYWdJc0JpZ0VuZGlh bjsKPiArICAgIGF1ZGlvX3NpZ25lZF9pbnRlZ2VyICA9IGlucHV0X2Zvcm1hdC0+bUZvcm1hdEZs YWdzICYKPiBrQXVkaW9Gb3JtYXRGbGFnSXNTaWduZWRJbnRlZ2VyOwo+ICsgICAgYXVkaW9fcGFj a2VkICAgICAgICAgID0gaW5wdXRfZm9ybWF0LT5tRm9ybWF0RmxhZ3MgJgo+IGtBdWRpb0Zvcm1h dEZsYWdJc1BhY2tlZDsKPiArICAgIGF1ZGlvX25vbl9pbnRlcmxlYXZlZCA9IGlucHV0X2Zvcm1h dC0+bUZvcm1hdEZsYWdzICYKPiBrQXVkaW9Gb3JtYXRGbGFnSXNOb25JbnRlcmxlYXZlZDsKPiAr Cj4gKyAgICBjdHgtPmJ5dGVzX3Blcl9zYW1wbGUgPSBpbnB1dF9mb3JtYXQtPm1CaXRzUGVyQ2hh bm5lbCA+PiAzOwo+ICsgICAgY3R4LT5hdWRpb19jaGFubmVscyAgID0gaW5wdXRfZm9ybWF0LT5t Q2hhbm5lbHNQZXJGcmFtZTsKPiArCj4gKyAgICBpZiAoYXVkaW9fbm9uX2ludGVybGVhdmVkKSB7 Cj4gKyAgICAgICAgY3R4LT5hdWRpb19idWZmZXJzID0gaW5wdXRfZm9ybWF0LT5tQ2hhbm5lbHNQ ZXJGcmFtZTsKPiAgICAgfSBlbHNlIHsKPiAtICAgICAgICB1bmxvY2tfZnJhbWVzKGN0eCk7Cj4g LSAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgImF1ZGlvIGZvcm1hdCBpcyBub3Qgc3Vw cG9ydGVkXG4iKTsKPiAtICAgICAgICByZXR1cm4gMTsKPiArICAgICAgICBjdHgtPmF1ZGlvX2J1 ZmZlcnMgPSAxOwo+ICsgICAgfQo+ICsKPiArICAgIGlmIChhdWRpb19ub25faW50ZXJsZWF2ZWQg fHwgIWF1ZGlvX3BhY2tlZCkgewo+ICsgICAgICBtdXN0X2NvbnZlcnQgPSAxOwo+ICsgICAgfQo+ ICsKPiArICAgIG91dHB1dF9mb3JtYXQubUJpdHNQZXJDaGFubmVsICAgPSBpbnB1dF9mb3JtYXQt Pm1CaXRzUGVyQ2hhbm5lbDsKPiArICAgIG91dHB1dF9mb3JtYXQubUNoYW5uZWxzUGVyRnJhbWUg PSBjdHgtPmF1ZGlvX2NoYW5uZWxzOwo+ICsgICAgb3V0cHV0X2Zvcm1hdC5tRnJhbWVzUGVyUGFj a2V0ICA9IDE7Cj4gKyAgICBvdXRwdXRfZm9ybWF0Lm1CeXRlc1BlckZyYW1lICAgID0gb3V0cHV0 X2Zvcm1hdC5tQ2hhbm5lbHNQZXJGcmFtZSAqCj4gY3R4LT5ieXRlc19wZXJfc2FtcGxlOwo+ICsg ICAgb3V0cHV0X2Zvcm1hdC5tQnl0ZXNQZXJQYWNrZXQgICA9IG91dHB1dF9mb3JtYXQubUZyYW1l c1BlclBhY2tldCAqCj4gb3V0cHV0X2Zvcm1hdC5tQnl0ZXNQZXJGcmFtZTsKPiArICAgIG91dHB1 dF9mb3JtYXQubUZvcm1hdEZsYWdzICAgICAgPSBrQXVkaW9Gb3JtYXRGbGFnSXNQYWNrZWQgfCBh dWRpb19iZTsKPiArICAgIG91dHB1dF9mb3JtYXQubUZvcm1hdElEICAgICAgICAgPSBrQXVkaW9G b3JtYXRMaW5lYXJQQ007Cj4gKyAgICBvdXRwdXRfZm9ybWF0Lm1SZXNlcnZlZCAgICAgICAgID0g MDsKPiArICAgIG91dHB1dF9mb3JtYXQubVNhbXBsZVJhdGUgICAgICAgPSBpbnB1dF9mb3JtYXQt Pm1TYW1wbGVSYXRlOwo+ICsKPiArICAgIGlmIChhdWRpb19mbG9hdCAmJgo+ICsgICAgICAgIGF1 ZGlvX2JpdHNfcGVyX3NhbXBsZSA9PSAzMikgewo+ICsgICAgICAgIHN0cmVhbS0+Y29kZWNwYXIt PmNvZGVjX2lkID0gYXVkaW9fYmUgPyBBVl9DT0RFQ19JRF9QQ01fRjMyQkUgOgo+IEFWX0NPREVD X0lEX1BDTV9GMzJMRTsKPiArICAgICAgICBvdXRwdXRfZm9ybWF0Lm1Gb3JtYXRGbGFncyB8PSBr QXVkaW9Gb3JtYXRGbGFnSXNGbG9hdDsKPiArICAgIH0gZWxzZSBpZiAoYXVkaW9fZmxvYXQgJiYK PiArICAgICAgICBhdWRpb19iaXRzX3Blcl9zYW1wbGUgPT0gNjQpIHsKPiArICAgICAgICBzdHJl YW0tPmNvZGVjcGFyLT5jb2RlY19pZCA9IGF1ZGlvX2JlID8gQVZfQ09ERUNfSURfUENNX0Y2NEJF IDoKPiBBVl9DT0RFQ19JRF9QQ01fRjY0TEU7Cj4gKyAgICAgICAgb3V0cHV0X2Zvcm1hdC5tRm9y bWF0RmxhZ3MgfD0ga0F1ZGlvRm9ybWF0RmxhZ0lzRmxvYXQ7Cj4gKyAgICB9IGVsc2UgaWYgKGF1 ZGlvX3NpZ25lZF9pbnRlZ2VyICYmCj4gKyAgICAgICAgYXVkaW9fYml0c19wZXJfc2FtcGxlID09 IDgpIHsKPiArICAgICAgICBzdHJlYW0tPmNvZGVjcGFyLT5jb2RlY19pZCA9IEFWX0NPREVDX0lE X1BDTV9TODsKPiArICAgICAgICBvdXRwdXRfZm9ybWF0Lm1Gb3JtYXRGbGFncyB8PSBrQXVkaW9G b3JtYXRGbGFnSXNTaWduZWRJbnRlZ2VyOwo+ICsgICAgfSBlbHNlIGlmIChhdWRpb19zaWduZWRf aW50ZWdlciAmJgo+ICsgICAgICAgIGF1ZGlvX2JpdHNfcGVyX3NhbXBsZSA9PSAxNikgewo+ICsg ICAgICAgIHN0cmVhbS0+Y29kZWNwYXItPmNvZGVjX2lkID0gYXVkaW9fYmUgPyBBVl9DT0RFQ19J RF9QQ01fUzE2QkUgOgo+IEFWX0NPREVDX0lEX1BDTV9TMTZMRTsKPiArICAgICAgICBvdXRwdXRf Zm9ybWF0Lm1Gb3JtYXRGbGFncyB8PSBrQXVkaW9Gb3JtYXRGbGFnSXNTaWduZWRJbnRlZ2VyOwo+ ICsgICAgfSBlbHNlIGlmIChhdWRpb19zaWduZWRfaW50ZWdlciAmJgo+ICsgICAgICAgIGF1ZGlv X2JpdHNfcGVyX3NhbXBsZSA9PSAyNCkgewo+ICsgICAgICAgIHN0cmVhbS0+Y29kZWNwYXItPmNv ZGVjX2lkID0gYXVkaW9fYmUgPyBBVl9DT0RFQ19JRF9QQ01fUzI0QkUgOgo+IEFWX0NPREVDX0lE X1BDTV9TMjRMRTsKPiArICAgICAgICBvdXRwdXRfZm9ybWF0Lm1Gb3JtYXRGbGFncyB8PSBrQXVk aW9Gb3JtYXRGbGFnSXNTaWduZWRJbnRlZ2VyOwo+ICsgICAgfSBlbHNlIGlmIChhdWRpb19zaWdu ZWRfaW50ZWdlciAmJgo+ICsgICAgICAgIGF1ZGlvX2JpdHNfcGVyX3NhbXBsZSA9PSAzMikgewo+ ICsgICAgICAgIHN0cmVhbS0+Y29kZWNwYXItPmNvZGVjX2lkID0gYXVkaW9fYmUgPyBBVl9DT0RF Q19JRF9QQ01fUzMyQkUgOgo+IEFWX0NPREVDX0lEX1BDTV9TMzJMRTsKPiArICAgICAgICBvdXRw dXRfZm9ybWF0Lm1Gb3JtYXRGbGFncyB8PSBrQXVkaW9Gb3JtYXRGbGFnSXNTaWduZWRJbnRlZ2Vy Owo+ICsgICAgfSBlbHNlIGlmIChhdWRpb19zaWduZWRfaW50ZWdlciAmJgo+ICsgICAgICAgIGF1 ZGlvX2JpdHNfcGVyX3NhbXBsZSA9PSA2NCkgewo+ICsgICAgICAgIHN0cmVhbS0+Y29kZWNwYXIt PmNvZGVjX2lkID0gYXVkaW9fYmUgPyBBVl9DT0RFQ19JRF9QQ01fUzY0QkUgOgo+IEFWX0NPREVD X0lEX1BDTV9TNjRMRTsKPiArICAgICAgICBvdXRwdXRfZm9ybWF0Lm1Gb3JtYXRGbGFncyB8PSBr QXVkaW9Gb3JtYXRGbGFnSXNTaWduZWRJbnRlZ2VyOwo+ICsgICAgfSBlbHNlIHsKPiArICAgICAg ICBzdHJlYW0tPmNvZGVjcGFyLT5jb2RlY19pZCA9IGF1ZGlvX2JlID8gQVZfQ09ERUNfSURfUENN X1MzMkJFIDoKPiBBVl9DT0RFQ19JRF9QQ01fUzMyTEU7Cj4gKyAgICAgICAgb3V0cHV0X2Zvcm1h dC5tQml0c1BlckNoYW5uZWwgPSAzMjsKPiArICAgICAgICBvdXRwdXRfZm9ybWF0Lm1Gb3JtYXRG bGFncyB8PSBrQXVkaW9Gb3JtYXRGbGFnSXNTaWduZWRJbnRlZ2VyOwo+ICsgICAgICAgIG11c3Rf Y29udmVydCA9IDE7Cj4gICAgIH0KPgo+IC0gICAgaWYgKGN0eC0+YXVkaW9fbm9uX2ludGVybGVh dmVkKSB7Cj4gLSAgICAgICAgQ01CbG9ja0J1ZmZlclJlZiBibG9ja19idWZmZXIgPQo+IENNU2Ft cGxlQnVmZmVyR2V0RGF0YUJ1ZmZlcihjdHgtPmN1cnJlbnRfYXVkaW9fZnJhbWUpOwo+IC0gICAg ICAgIGN0eC0+YXVkaW9fYnVmZmVyX3NpemUgICAgICAgID0KPiBDTUJsb2NrQnVmZmVyR2V0RGF0 YUxlbmd0aChibG9ja19idWZmZXIpOwo+IC0gICAgICAgIGN0eC0+YXVkaW9fYnVmZmVyICAgICAg ICAgICAgID0gYXZfbWFsbG9jKGN0eC0+YXVkaW9fYnVmZmVyX3NpemUpOwo+IC0gICAgICAgIGlm ICghY3R4LT5hdWRpb19idWZmZXIpIHsKPiArICAgIGlmIChtdXN0X2NvbnZlcnQpIHsKPiArICAg ICAgICBPU1N0YXR1cyByZXQgPSBBdWRpb0NvbnZlcnRlck5ldyhpbnB1dF9mb3JtYXQsICZvdXRw dXRfZm9ybWF0LAo+ICZjdHgtPmF1ZGlvX2NvbnZlcnRlcik7Cj4gKyAgICAgICAgaWYgKHJldCAh PSBub0Vycikgewo+ICAgICAgICAgICAgIHVubG9ja19mcmFtZXMoY3R4KTsKPiAtICAgICAgICAg ICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgImVycm9yIGFsbG9jYXRpbmcgYXVkaW8gYnVmZmVy XG4iKTsKPiArICAgICAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgIkVycm9yIHdoaWxl IGFsbG9jYXRpbmcgYXVkaW8KPiBjb252ZXJ0ZXJcbiIpOwo+ICAgICAgICAgICAgIHJldHVybiAx Owo+ICAgICAgICAgfQo+ICAgICB9Cj4gQEAgLTEwNDgsNiArMTA4NCw3IEBAIHN0YXRpYyBpbnQg Y29weV9jdnBpeGVsYnVmZmVyKEFWRm9ybWF0Q29udGV4dCAqcywKPgo+IHN0YXRpYyBpbnQgYXZm X3JlYWRfcGFja2V0KEFWRm9ybWF0Q29udGV4dCAqcywgQVZQYWNrZXQgKnBrdCkKPiB7Cj4gKyAg ICBPU1N0YXR1cyByZXQ7Cj4gICAgIEFWRkNvbnRleHQqIGN0eCA9IChBVkZDb250ZXh0KilzLT5w cml2X2RhdGE7Cj4KPiAgICAgZG8gewo+IEBAIC0xMDkxLDcgKzExMjgsNyBAQCBzdGF0aWMgaW50 IGF2Zl9yZWFkX3BhY2tldChBVkZvcm1hdENvbnRleHQgKnMsCj4gQVZQYWNrZXQgKnBrdCkKPiAg ICAgICAgICAgICAgICAgc3RhdHVzID0gY29weV9jdnBpeGVsYnVmZmVyKHMsIGltYWdlX2J1ZmZl ciwgcGt0KTsKPiAgICAgICAgICAgICB9IGVsc2Ugewo+ICAgICAgICAgICAgICAgICBzdGF0dXMg PSAwOwo+IC0gICAgICAgICAgICAgICAgT1NTdGF0dXMgcmV0ID0gQ01CbG9ja0J1ZmZlckNvcHlE YXRhQnl0ZXMoYmxvY2tfYnVmZmVyLAo+IDAsIHBrdC0+c2l6ZSwgcGt0LT5kYXRhKTsKPiArICAg ICAgICAgICAgICAgIHJldCA9IENNQmxvY2tCdWZmZXJDb3B5RGF0YUJ5dGVzKGJsb2NrX2J1ZmZl ciwgMCwKPiBwa3QtPnNpemUsIHBrdC0+ZGF0YSk7Cj4gICAgICAgICAgICAgICAgIGlmIChyZXQg IT0ga0NNQmxvY2tCdWZmZXJOb0Vycikgewo+ICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0g QVZFUlJPUihFSU8pOwo+ICAgICAgICAgICAgICAgICB9Cj4gQEAgLTExMDUsODIgKzExNDIsODMg QEAgc3RhdGljIGludCBhdmZfcmVhZF9wYWNrZXQoQVZGb3JtYXRDb250ZXh0ICpzLAo+IEFWUGFj a2V0ICpwa3QpCj4gICAgICAgICAgICAgfQo+ICAgICAgICAgfSBlbHNlIGlmIChjdHgtPmN1cnJl bnRfYXVkaW9fZnJhbWUgIT0gbmlsKSB7Cj4gICAgICAgICAgICAgQ01CbG9ja0J1ZmZlclJlZiBi bG9ja19idWZmZXIgPQo+IENNU2FtcGxlQnVmZmVyR2V0RGF0YUJ1ZmZlcihjdHgtPmN1cnJlbnRf YXVkaW9fZnJhbWUpOwo+IC0gICAgICAgICAgICBpbnQgYmxvY2tfYnVmZmVyX3NpemUgICAgICAg ICA9Cj4gQ01CbG9ja0J1ZmZlckdldERhdGFMZW5ndGgoYmxvY2tfYnVmZmVyKTsKPgo+IC0gICAg ICAgICAgICBpZiAoIWJsb2NrX2J1ZmZlciB8fCAhYmxvY2tfYnVmZmVyX3NpemUpIHsKPiAtICAg ICAgICAgICAgICAgIHVubG9ja19mcmFtZXMoY3R4KTsKPiAtICAgICAgICAgICAgICAgIHJldHVy biBBVkVSUk9SKEVJTyk7Cj4gLSAgICAgICAgICAgIH0KPiArICAgICAgICAgICAgc2l6ZV90IGlu cHV0X3NpemUgPSBDTUJsb2NrQnVmZmVyR2V0RGF0YUxlbmd0aChibG9ja19idWZmZXIpOwo+ICsg ICAgICAgICAgICBpbnQgYnVmZmVyX3NpemUgPSBpbnB1dF9zaXplIC8gY3R4LT5hdWRpb19idWZm ZXJzOwo+ICsgICAgICAgICAgICBpbnQgbmJfc2FtcGxlcyA9IGlucHV0X3NpemUgLyAoY3R4LT5h dWRpb19jaGFubmVscyAqCj4gY3R4LT5ieXRlc19wZXJfc2FtcGxlKTsKPiArICAgICAgICAgICAg aW50IG91dHB1dF9zaXplID0gYnVmZmVyX3NpemU7Cj4KPiAtICAgICAgICAgICAgaWYgKGN0eC0+ YXVkaW9fbm9uX2ludGVybGVhdmVkICYmIGJsb2NrX2J1ZmZlcl9zaXplID4KPiBjdHgtPmF1ZGlv X2J1ZmZlcl9zaXplKSB7Cj4gKyAgICAgICAgICAgIFVJbnQzMiBzaXplID0gc2l6ZW9mKG91dHB1 dF9zaXplKTsKPiArICAgICAgICAgICAgcmV0ID0gQXVkaW9Db252ZXJ0ZXJHZXRQcm9wZXJ0eShj dHgtPmF1ZGlvX2NvbnZlcnRlciwKPiBrQXVkaW9Db252ZXJ0ZXJQcm9wZXJ0eUNhbGN1bGF0ZU91 dHB1dEJ1ZmZlclNpemUsICZzaXplLCAmb3V0cHV0X3NpemUpOwo+ICsgICAgICAgICAgICBpZiAo cmV0ICE9IG5vRXJyKSB7Cj4gICAgICAgICAgICAgICAgIHVubG9ja19mcmFtZXMoY3R4KTsKPiAt ICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0JVRkZFUl9UT09fU01BTEw7Cj4gKyAgICAg ICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFSU8pOwo+ICAgICAgICAgICAgIH0KPgo+IC0gICAg ICAgICAgICBpZiAoYXZfbmV3X3BhY2tldChwa3QsIGJsb2NrX2J1ZmZlcl9zaXplKSA8IDApIHsK PiArICAgICAgICAgICAgaWYgKGF2X25ld19wYWNrZXQocGt0LCBvdXRwdXRfc2l6ZSkgPCAwKSB7 Cj4gICAgICAgICAgICAgICAgIHVubG9ja19mcmFtZXMoY3R4KTsKPiAgICAgICAgICAgICAgICAg cmV0dXJuIEFWRVJST1IoRUlPKTsKPiAgICAgICAgICAgICB9Cj4KPiAtICAgICAgICAgICAgQ01J dGVtQ291bnQgY291bnQ7Cj4gLSAgICAgICAgICAgIENNU2FtcGxlVGltaW5nSW5mbyB0aW1pbmdf aW5mbzsKPiArICAgICAgICAgICAgaWYgKGN0eC0+YXVkaW9fY29udmVydGVyKSB7Cj4gKyAgICAg ICAgICAgICAgICBzaXplX3QgaW5wdXRfYnVmZmVyX3NpemUgPSBvZmZzZXRvZihBdWRpb0J1ZmZl ckxpc3QsCj4gbUJ1ZmZlcnNbMF0pICsgKHNpemVvZihBdWRpb0J1ZmZlcikgKiBjdHgtPmF1ZGlv X2J1ZmZlcnMpOwo+ICsgICAgICAgICAgICAgICAgQXVkaW9CdWZmZXJMaXN0ICppbnB1dF9idWZm ZXIgPQo+IGF2X21hbGxvYyhpbnB1dF9idWZmZXJfc2l6ZSk7Cj4KPiAtICAgICAgICAgICAgaWYK PiAoQ01TYW1wbGVCdWZmZXJHZXRPdXRwdXRTYW1wbGVUaW1pbmdJbmZvQXJyYXkoY3R4LT5jdXJy ZW50X2F1ZGlvX2ZyYW1lLCAxLAo+ICZ0aW1pbmdfaW5mbywgJmNvdW50KSA9PSBub0Vycikgewo+ IC0gICAgICAgICAgICAgICAgQVZSYXRpb25hbCB0aW1lYmFzZV9xID0gYXZfbWFrZV9xKDEsCj4g dGltaW5nX2luZm8ucHJlc2VudGF0aW9uVGltZVN0YW1wLnRpbWVzY2FsZSk7Cj4gLSAgICAgICAg ICAgICAgICBwa3QtPnB0cyA9IHBrdC0+ZHRzID0KPiBhdl9yZXNjYWxlX3EodGltaW5nX2luZm8u cHJlc2VudGF0aW9uVGltZVN0YW1wLnZhbHVlLCB0aW1lYmFzZV9xLAo+IGF2Zl90aW1lX2Jhc2Vf cSk7Cj4gLSAgICAgICAgICAgIH0KPiArICAgICAgICAgICAgICAgIGlucHV0X2J1ZmZlci0+bU51 bWJlckJ1ZmZlcnMgPSBjdHgtPmF1ZGlvX2J1ZmZlcnM7Cj4KPiAtICAgICAgICAgICAgcGt0LT5z dHJlYW1faW5kZXggID0gY3R4LT5hdWRpb19zdHJlYW1faW5kZXg7Cj4gLSAgICAgICAgICAgIHBr dC0+ZmxhZ3MgICAgICAgIHw9IEFWX1BLVF9GTEFHX0tFWTsKPiArICAgICAgICAgICAgICAgIGZv ciAoaW50IGMgPSAwOyBjIDwgY3R4LT5hdWRpb19idWZmZXJzOyBjKyspIHsKPiArICAgICAgICAg ICAgICAgICAgICBpbnB1dF9idWZmZXItPm1CdWZmZXJzW2NdLm1OdW1iZXJDaGFubmVscyA9IDE7 Cj4KPiAtICAgICAgICAgICAgaWYgKGN0eC0+YXVkaW9fbm9uX2ludGVybGVhdmVkKSB7Cj4gLSAg ICAgICAgICAgICAgICBpbnQgc2FtcGxlLCBjLCBzaGlmdCwgbnVtX3NhbXBsZXM7Cj4gKyAgICAg ICAgICAgICAgICAgICAgcmV0ID0gQ01CbG9ja0J1ZmZlckdldERhdGFQb2ludGVyKGJsb2NrX2J1 ZmZlciwgYyAqCj4gYnVmZmVyX3NpemUsIChzaXplX3QgKikmaW5wdXRfYnVmZmVyLT5tQnVmZmVy c1tjXS5tRGF0YUJ5dGVTaXplLCBOVUxMLAo+ICh2b2lkICopJmlucHV0X2J1ZmZlci0+bUJ1ZmZl cnNbY10ubURhdGEpOwo+Cj4gLSAgICAgICAgICAgICAgICBPU1N0YXR1cyByZXQgPSBDTUJsb2Nr QnVmZmVyQ29weURhdGFCeXRlcyhibG9ja19idWZmZXIsCj4gMCwgcGt0LT5zaXplLCBjdHgtPmF1 ZGlvX2J1ZmZlcik7Cj4gLSAgICAgICAgICAgICAgICBpZiAocmV0ICE9IGtDTUJsb2NrQnVmZmVy Tm9FcnIpIHsKPiAtICAgICAgICAgICAgICAgICAgICB1bmxvY2tfZnJhbWVzKGN0eCk7Cj4gLSAg ICAgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlPKTsKPiArICAgICAgICAgICAgICAg ICAgICBpZiAocmV0ICE9IGtDTUJsb2NrQnVmZmVyTm9FcnIpIHsKPiArICAgICAgICAgICAgICAg ICAgICAgICAgYXZfZnJlZShpbnB1dF9idWZmZXIpOwo+ICsgICAgICAgICAgICAgICAgICAgICAg ICB1bmxvY2tfZnJhbWVzKGN0eCk7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBB VkVSUk9SKEVJTyk7Cj4gKyAgICAgICAgICAgICAgICAgICAgfQo+ICAgICAgICAgICAgICAgICB9 Cj4KPiAtICAgICAgICAgICAgICAgIG51bV9zYW1wbGVzID0gcGt0LT5zaXplIC8gKGN0eC0+YXVk aW9fY2hhbm5lbHMgKgo+IChjdHgtPmF1ZGlvX2JpdHNfcGVyX3NhbXBsZSA+PiAzKSk7Cj4gLQo+ IC0gICAgICAgICAgICAgICAgLy8gdHJhbnNmb3JtIGRlY29kZWQgZnJhbWUgaW50byBvdXRwdXQg Zm9ybWF0Cj4gLSAgICAgICAgICAgICAgICAjZGVmaW5lIElOVEVSTEVBVkVfT1VUUFVUKGJwcykK PiAgICAgICAgICAgICAgXAo+IC0gICAgICAgICAgICAgICAgewo+ICAgICAgICAgICAgICAgXAo+ IC0gICAgICAgICAgICAgICAgICAgIGludCMjYnBzIyNfdCAqKnNyYzsKPiAgICAgICAgICAgICAg IFwKPiAtICAgICAgICAgICAgICAgICAgICBpbnQjI2JwcyMjX3QgKmRlc3Q7Cj4gICAgICAgICAg ICAgICBcCj4gLSAgICAgICAgICAgICAgICAgICAgc3JjID0gYXZfbWFsbG9jKGN0eC0+YXVkaW9f Y2hhbm5lbHMgKgo+IHNpemVvZihpbnQjI2JwcyMjX3QqKSk7ICAgICAgXAo+IC0gICAgICAgICAg ICAgICAgICAgIGlmICghc3JjKSB7Cj4gICAgICAgICAgICAgICBcCj4gLSAgICAgICAgICAgICAg ICAgICAgICAgIHVubG9ja19mcmFtZXMoY3R4KTsKPiAgICAgICAgICAgICAgIFwKPiAtICAgICAg ICAgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlPKTsKPiAgICAgICAgICAgICAgXAo+ IC0gICAgICAgICAgICAgICAgICAgIH0KPiAgICAgICAgICAgICAgIFwKPiAtCj4gICAgICAgICAg ICAgIFwKPiAtICAgICAgICAgICAgICAgICAgICBmb3IgKGMgPSAwOyBjIDwgY3R4LT5hdWRpb19j aGFubmVsczsgYysrKSB7Cj4gICAgICAgICAgICAgICBcCj4gLSAgICAgICAgICAgICAgICAgICAg ICAgIHNyY1tjXSA9ICgoaW50IyNicHMjI190KiljdHgtPmF1ZGlvX2J1ZmZlcikgKyBjICoKPiBu dW1fc2FtcGxlczsgXAo+IC0gICAgICAgICAgICAgICAgICAgIH0KPiAgICAgICAgICAgICAgIFwK PiAtICAgICAgICAgICAgICAgICAgICBkZXN0ICA9IChpbnQjI2JwcyMjX3QqKXBrdC0+ZGF0YTsK PiAgICAgICAgICAgICAgIFwKPiAtICAgICAgICAgICAgICAgICAgICBzaGlmdCA9IGJwcyAtIGN0 eC0+YXVkaW9fYml0c19wZXJfc2FtcGxlOwo+ICAgICAgICAgICAgICAgXAo+IC0gICAgICAgICAg ICAgICAgICAgIGZvciAoc2FtcGxlID0gMDsgc2FtcGxlIDwgbnVtX3NhbXBsZXM7IHNhbXBsZSsr KQo+ICAgICAgICAgICAgICBcCj4gLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoYyA9IDA7 IGMgPCBjdHgtPmF1ZGlvX2NoYW5uZWxzOyBjKyspCj4gICAgICAgICAgICAgICBcCj4gLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqZGVzdCsrID0gc3JjW2NdW3NhbXBsZV0gPDwgc2hpZnQ7 Cj4gICAgICAgICAgICAgIFwKPiAtICAgICAgICAgICAgICAgICAgICBhdl9mcmVlcCgmc3JjKTsK PiAgICAgICAgICAgICAgIFwKPiAtICAgICAgICAgICAgICAgIH0KPiArICAgICAgICAgICAgICAg IEF1ZGlvQnVmZmVyTGlzdCBvdXRwdXRfYnVmZmVyID0gewo+ICsgICAgICAgICAgICAgICAgICAg Lm1OdW1iZXJCdWZmZXJzID0gMSwKPiArICAgICAgICAgICAgICAgICAgIC5tQnVmZmVyc1swXSAg ICA9IHsKPiArICAgICAgICAgICAgICAgICAgICAgICAubU51bWJlckNoYW5uZWxzID0gY3R4LT5h dWRpb19jaGFubmVscywKPiArICAgICAgICAgICAgICAgICAgICAgICAubURhdGFCeXRlU2l6ZSAg ID0gcGt0LT5zaXplLAo+ICsgICAgICAgICAgICAgICAgICAgICAgIC5tRGF0YSAgICAgICAgICAg PSBwa3QtPmRhdGEKPiArICAgICAgICAgICAgICAgICAgIH0KPiArICAgICAgICAgICAgICAgIH07 Cj4KPiAtICAgICAgICAgICAgICAgIGlmIChjdHgtPmF1ZGlvX2JpdHNfcGVyX3NhbXBsZSA8PSAx Nikgewo+IC0gICAgICAgICAgICAgICAgICAgIElOVEVSTEVBVkVfT1VUUFVUKDE2KQo+IC0gICAg ICAgICAgICAgICAgfSBlbHNlIHsKPiAtICAgICAgICAgICAgICAgICAgICBJTlRFUkxFQVZFX09V VFBVVCgzMikKPiAtICAgICAgICAgICAgICAgIH0KPiAtICAgICAgICAgICAgfSBlbHNlIHsKPiAt ICAgICAgICAgICAgICAgIE9TU3RhdHVzIHJldCA9IENNQmxvY2tCdWZmZXJDb3B5RGF0YUJ5dGVz KGJsb2NrX2J1ZmZlciwKPiAwLCBwa3QtPnNpemUsIHBrdC0+ZGF0YSk7Cj4gLSAgICAgICAgICAg ICAgICBpZiAocmV0ICE9IGtDTUJsb2NrQnVmZmVyTm9FcnIpIHsKPiArICAgICAgICAgICAgICAg IHJldCA9Cj4gQXVkaW9Db252ZXJ0ZXJDb252ZXJ0Q29tcGxleEJ1ZmZlcihjdHgtPmF1ZGlvX2Nv bnZlcnRlciwgbmJfc2FtcGxlcywKPiBpbnB1dF9idWZmZXIsICZvdXRwdXRfYnVmZmVyKTsKPiAr ICAgICAgICAgICAgICAgIGF2X2ZyZWUoaW5wdXRfYnVmZmVyKTsKPiArCj4gKyAgICAgICAgICAg ICAgICBpZiAocmV0ICE9IG5vRXJyKSB7Cj4gICAgICAgICAgICAgICAgICAgICB1bmxvY2tfZnJh bWVzKGN0eCk7Cj4gICAgICAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFSU8pOwo+ICAg ICAgICAgICAgICAgICB9Cj4gKwo+ICsgICAgICAgICAgICAgICAgcGt0LT5zaXplID0gb3V0cHV0 X2J1ZmZlci5tQnVmZmVyc1swXS5tRGF0YUJ5dGVTaXplOwo+ICsgICAgICAgICAgICB9IGVsc2Ug ewo+ICsgICAgICAgICAgICAgICAgIHJldCA9IENNQmxvY2tCdWZmZXJDb3B5RGF0YUJ5dGVzKGJs b2NrX2J1ZmZlciwgMCwKPiBwa3QtPnNpemUsIHBrdC0+ZGF0YSk7Cj4gKyAgICAgICAgICAgICAg ICAgaWYgKHJldCAhPSBrQ01CbG9ja0J1ZmZlck5vRXJyKSB7Cj4gKyAgICAgICAgICAgICAgICAg ICAgIHVubG9ja19mcmFtZXMoY3R4KTsKPiArICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFW RVJST1IoRUlPKTsKPiArICAgICAgICAgICAgICAgICB9Cj4gICAgICAgICAgICAgfQo+Cj4gKyAg ICAgICAgICAgIENNSXRlbUNvdW50IGNvdW50Owo+ICsgICAgICAgICAgICBDTVNhbXBsZVRpbWlu Z0luZm8gdGltaW5nX2luZm87Cj4gKwo+ICsgICAgICAgICAgICBpZgo+IChDTVNhbXBsZUJ1ZmZl ckdldE91dHB1dFNhbXBsZVRpbWluZ0luZm9BcnJheShjdHgtPmN1cnJlbnRfYXVkaW9fZnJhbWUs IDEsCj4gJnRpbWluZ19pbmZvLCAmY291bnQpID09IG5vRXJyKSB7Cj4gKyAgICAgICAgICAgICAg ICBBVlJhdGlvbmFsIHRpbWViYXNlX3EgPSBhdl9tYWtlX3EoMSwKPiB0aW1pbmdfaW5mby5wcmVz ZW50YXRpb25UaW1lU3RhbXAudGltZXNjYWxlKTsKPiArICAgICAgICAgICAgICAgIHBrdC0+cHRz ID0gcGt0LT5kdHMgPQo+IGF2X3Jlc2NhbGVfcSh0aW1pbmdfaW5mby5wcmVzZW50YXRpb25UaW1l U3RhbXAudmFsdWUsIHRpbWViYXNlX3EsCj4gYXZmX3RpbWVfYmFzZV9xKTsKPiArICAgICAgICAg ICAgfQo+ICsKPiArICAgICAgICAgICAgcGt0LT5zdHJlYW1faW5kZXggID0gY3R4LT5hdWRpb19z dHJlYW1faW5kZXg7Cj4gKyAgICAgICAgICAgIHBrdC0+ZmxhZ3MgICAgICAgIHw9IEFWX1BLVF9G TEFHX0tFWTsKPiArCj4gICAgICAgICAgICAgQ0ZSZWxlYXNlKGN0eC0+Y3VycmVudF9hdWRpb19m cmFtZSk7Cj4gICAgICAgICAgICAgY3R4LT5jdXJyZW50X2F1ZGlvX2ZyYW1lID0gbmlsOwo+ICsK PiArICAgICAgICAgICAgdW5sb2NrX2ZyYW1lcyhjdHgpOwo+ICAgICAgICAgfSBlbHNlIHsKPiAg ICAgICAgICAgICBwa3QtPmRhdGEgPSBOVUxMOwo+ICAgICAgICAgICAgIHVubG9ja19mcmFtZXMo Y3R4KTsKPiAtLQo+IDIuMzIuMCAoQXBwbGUgR2l0LTEzMikKPgo+IF9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gZmZtcGVnLWRldmVsIG1haWxpbmcgbGlz dAo+IGZmbXBlZy1kZXZlbEBmZm1wZWcub3JnCj4gaHR0cHM6Ly9mZm1wZWcub3JnL21haWxtYW4v bGlzdGluZm8vZmZtcGVnLWRldmVsCj4KPiBUbyB1bnN1YnNjcmliZSwgdmlzaXQgbGluayBhYm92 ZSwgb3IgZW1haWwKPiBmZm1wZWctZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdpdGggc3ViamVj dCAidW5zdWJzY3JpYmUiLgo+Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCmZmbXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QKZmZtcGVnLWRldmVsQGZmbXBlZy5v cmcKaHR0cHM6Ly9mZm1wZWcub3JnL21haWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVsCgpUbyB1 bnN1YnNjcmliZSwgdmlzaXQgbGluayBhYm92ZSwgb3IgZW1haWwKZmZtcGVnLWRldmVsLXJlcXVl c3RAZmZtcGVnLm9yZyB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJlIi4K