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 309FC46228 for ; Wed, 10 May 2023 08:52:03 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 2CF6368C189; Wed, 10 May 2023 11:52:00 +0300 (EEST) Received: from mail-vk1-f171.google.com (mail-vk1-f171.google.com [209.85.221.171]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id A6C4F68B5DA for ; Wed, 10 May 2023 11:51:52 +0300 (EEST) Received: by mail-vk1-f171.google.com with SMTP id 71dfb90a1353d-44ff2f8ec9dso4298816e0c.1 for ; Wed, 10 May 2023 01:51:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1683708711; x=1686300711; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=mvJfS2V1Tjc9YZjo36+ewiSlCB0LezF3L5XX4LKmbNE=; b=M38yOm3DZ3HjKYpjH+Yw+OVEb+XliwvTvd987+bKVbN9YeOZV25MZrQtHL6MsH6VXq qLE9d9UuiWqnQG2b2vx1szmyfJLRcnaeJf2TCS5GjO8utDKovWTT8j5pd6/HB8LFI6/c fDC3s9m2DTS67yP9ybR0943X56RP5IRAPtoS95310R5WAkCoHkPN1v9TXotx64OX5/RU aCTLDoe+4nGdvxIxHpxYfSDvR/hrd9pcEE+6vRY1NLfrykuO/6HLotZNgCCpTqgCkaxg QZjF8yYRZr/W58cowWnJHgDyDE6qvlKZGmO51ND2fyLAvvGPm/+1IiCf8dEqj7bbQ2o8 jrLQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1683708711; x=1686300711; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=mvJfS2V1Tjc9YZjo36+ewiSlCB0LezF3L5XX4LKmbNE=; b=ZeB0vcV8j0DHGSsIU9vw1e9CUT+iMHzd+vsPqkpwWpO50S6eP0V/3d0tTsOehzdWso F8/9QK/IyZo5SIEHNDP7ptD79p7XSILS+p/1LYd9cp/U7bkqRAgFQe9YnrXmrLOi9/Fi O54AKy+0fgOwQj23by+Xfw95CHnYOxs7CWE5Pj3tFLLv1T2x3MF2L2EC5RvuXoiuby0X l32XFSTfiA5h/GX6A0mRot2xHbg09ovy7zfPiiD6aL6+anYuv/GhJkgyFHAhdTagAIxC Np3prXb7ljxwiBoqs4rpKWdsSzmcxsYS1a36PviCDxLugnFVmvzqdY8LSHxAU+GHLeIs IbXw== X-Gm-Message-State: AC+VfDxXzkz5vSvuN/5EqsJm/iWkk3LeYPEGoOSQz6r//5HWOwGQ6BOs dtnmEY6aQVtCBeYQ/JPrXST+4y3KAW9AULdGi9L/LhBR X-Google-Smtp-Source: ACHHUZ79NDcF8J7sWMWWnxFn+mKQP6T+18sHxW2XtzAAIvuAJw5D6BfJTNn8n6ESgB8IbTywLoJ7L1S+mdXUzCwKIoA= X-Received: by 2002:a1f:4684:0:b0:440:448c:27a0 with SMTP id t126-20020a1f4684000000b00440448c27a0mr4802299vka.8.1683708711090; Wed, 10 May 2023 01:51:51 -0700 (PDT) MIME-Version: 1.0 From: Paul B Mahol Date: Wed, 10 May 2023 10:51:19 +0200 Message-ID: To: FFmpeg development discussions and patches Content-Type: multipart/mixed; boundary="000000000000a19eed05fb52fbcb" X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: [FFmpeg-devel] [PATCH] avcodec/avformat cleanup of pseudo stuff 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: --000000000000a19eed05fb52fbcb Content-Type: text/plain; charset="UTF-8" Patches attached. If there is enough interest I'm willing to make proper audio filter source with more features and more formats support. --000000000000a19eed05fb52fbcb Content-Type: text/x-patch; charset="US-ASCII"; name="0002-avformat-remove-SBaGen-binaural-beats-script.patch" Content-Disposition: attachment; filename="0002-avformat-remove-SBaGen-binaural-beats-script.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lhhgmrw40 RnJvbSA1NWU0N2ExMjVkOTI5Yjg4NTc4ZWI3NDMyMDNlODFmYmY3NzcwY2FiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQYXVsIEIgTWFob2wgPG9uZW1kYUBnbWFpbC5jb20+CkRhdGU6 IFdlZCwgMTAgTWF5IDIwMjMgMTA6NDQ6NTEgKzAyMDAKU3ViamVjdDogW1BBVENIIDIvMl0gYXZm b3JtYXQ6IHJlbW92ZSBTQmFHZW4gYmluYXVyYWwgYmVhdHMgc2NyaXB0CgpQcm9wZXIgcGxhY2Ug aXMgaW4gbGliYXZmaWx0ZXIuCkFsc28gMSBvZiAyIC5zYmcgZmlsZXMgYXZhaWxhYmxlIG9uIHdl YiB0aGF0IEkgdHJpZWQKZmFpbGVkIHRvIGdpdmUgYXVkaW8gYXMgaXQgZXJyb3JzIGluIHRpbWVz dGFtcCBwYXJzaW5nLgpFaXRoZXIgcmVncmVzc2lvbiBvciBidWcgZnJvbSBzdGFydC4KClNpZ25l ZC1vZmYtYnk6IFBhdWwgQiBNYWhvbCA8b25lbWRhQGdtYWlsLmNvbT4KLS0tCiBkb2MvZGVtdXhl cnMudGV4aSAgICAgICAgfCAgIDMwIC0KIGxpYmF2Zm9ybWF0L01ha2VmaWxlICAgICB8ICAgIDEg LQogbGliYXZmb3JtYXQvYWxsZm9ybWF0cy5jIHwgICAgMSAtCiBsaWJhdmZvcm1hdC9zYmdkZWMu YyAgICAgfCAxNTQ2IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiA0IGZp bGVzIGNoYW5nZWQsIDE1NzggZGVsZXRpb25zKC0pCiBkZWxldGUgbW9kZSAxMDA2NDQgbGliYXZm b3JtYXQvc2JnZGVjLmMKCmRpZmYgLS1naXQgYS9kb2MvZGVtdXhlcnMudGV4aSBiL2RvYy9kZW11 eGVycy50ZXhpCmluZGV4IDJkMzNiNDdhNTYuLmUwOWMwNjBkNmYgMTAwNjQ0Ci0tLSBhL2RvYy9k ZW11eGVycy50ZXhpCisrKyBiL2RvYy9kZW11eGVycy50ZXhpCkBAIC04NjksMzYgKzg2OSw2IEBA IHRoZSBjb21tYW5kOgogZmZwbGF5IC1mIHJhd3ZpZGVvIC1waXhlbF9mb3JtYXQgcmdiMjQgLXZp ZGVvX3NpemUgMzIweDI0MCAtZnJhbWVyYXRlIDEwIGlucHV0LnJhdwogQGVuZCBleGFtcGxlCiAK LUBzZWN0aW9uIHNiZwotCi1TQmFHZW4gc2NyaXB0IGRlbXV4ZXIuCi0KLVRoaXMgZGVtdXhlciBy ZWFkcyB0aGUgc2NyaXB0IGxhbmd1YWdlIHVzZWQgYnkgU0JhR2VuCi1AdXJse2h0dHA6Ly91YXp1 Lm5ldC9zYmFnZW4vfSB0byBnZW5lcmF0ZSBiaW5hdXJhbCBiZWF0cyBzZXNzaW9ucy4gQSBTQkcK LXNjcmlwdCBsb29rcyBsaWtlIHRoYXQ6Ci1AZXhhbXBsZQotLVNFCi1hOiAzMDAtMi41LzMgNDQw KzQuNS8wCi1iOiAzMDAtMi41LzAgNDQwKzQuNS8zCi1vZmY6IC0KLU5PVyAgICAgID09IGEKLSsw OjA3OjAwID09IGIKLSswOjE0OjAwID09IGEKLSswOjIxOjAwID09IGIKLSswOjMwOjAwICAgIG9m ZgotQGVuZCBleGFtcGxlCi0KLUEgU0JHIHNjcmlwdCBjYW4gbWl4IGFic29sdXRlIGFuZCByZWxh dGl2ZSB0aW1lc3RhbXBzLiBJZiB0aGUgc2NyaXB0IHVzZXMKLWVpdGhlciBvbmx5IGFic29sdXRl IHRpbWVzdGFtcHMgKGluY2x1ZGluZyB0aGUgc2NyaXB0IHN0YXJ0IHRpbWUpIG9yIG9ubHkKLXJl bGF0aXZlIG9uZXMsIHRoZW4gaXRzIGxheW91dCBpcyBmaXhlZCwgYW5kIHRoZSBjb252ZXJzaW9u IGlzCi1zdHJhaWdodGZvcndhcmQuIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB0aGUgc2NyaXB0IG1p eGVzIGJvdGgga2luZCBvZgotdGltZXN0YW1wcywgdGhlbiB0aGUgQHZhcntOT1d9IHJlZmVyZW5j ZSBmb3IgcmVsYXRpdmUgdGltZXN0YW1wcyB3aWxsIGJlCi10YWtlbiBmcm9tIHRoZSBjdXJyZW50 IHRpbWUgb2YgZGF5IGF0IHRoZSB0aW1lIHRoZSBzY3JpcHQgaXMgcmVhZCwgYW5kIHRoZQotc2Ny aXB0IGxheW91dCB3aWxsIGJlIGZyb3plbiBhY2NvcmRpbmcgdG8gdGhhdCByZWZlcmVuY2UuIFRo YXQgbWVhbnMgdGhhdCBpZgotdGhlIHNjcmlwdCBpcyBkaXJlY3RseSBwbGF5ZWQsIHRoZSBhY3R1 YWwgdGltZXMgd2lsbCBtYXRjaCB0aGUgYWJzb2x1dGUKLXRpbWVzdGFtcHMgdXAgdG8gdGhlIHNv dW5kIGNvbnRyb2xsZXIncyBjbG9jayBhY2N1cmFjeSwgYnV0IGlmIHRoZSB1c2VyCi1zb21laG93 IHBhdXNlcyB0aGUgcGxheWJhY2sgb3Igc2Vla3MsIGFsbCB0aW1lcyB3aWxsIGJlIHNoaWZ0ZWQg YWNjb3JkaW5nbHkuCi0KIEBzZWN0aW9uIHRlZGNhcHRpb25zCiAKIEpTT04gY2FwdGlvbnMgdXNl ZCBmb3IgQHVybHtodHRwOi8vd3d3LnRlZC5jb20vLCBURUQgVGFsa3N9LgpkaWZmIC0tZ2l0IGEv bGliYXZmb3JtYXQvTWFrZWZpbGUgYi9saWJhdmZvcm1hdC9NYWtlZmlsZQppbmRleCBmOGFkN2M2 YTExLi5mMDM3ZTg0N2VmIDEwMDY0NAotLS0gYS9saWJhdmZvcm1hdC9NYWtlZmlsZQorKysgYi9s aWJhdmZvcm1hdC9NYWtlZmlsZQpAQCAtNTIxLDcgKzUyMSw2IEBAIE9CSlMtJChDT05GSUdfU0FQ X0RFTVVYRVIpICAgICAgICAgICAgICAgKz0gc2FwZGVjLm8KIE9CSlMtJChDT05GSUdfU0FQX01V WEVSKSAgICAgICAgICAgICAgICAgKz0gc2FwZW5jLm8KIE9CSlMtJChDT05GSUdfU0JDX0RFTVVY RVIpICAgICAgICAgICAgICAgKz0gc2JjZGVjLm8gcmF3ZGVjLm8KIE9CSlMtJChDT05GSUdfU0JD X01VWEVSKSAgICAgICAgICAgICAgICAgKz0gcmF3ZW5jLm8KLU9CSlMtJChDT05GSUdfU0JHX0RF TVVYRVIpICAgICAgICAgICAgICAgKz0gc2JnZGVjLm8KIE9CSlMtJChDT05GSUdfU0NDX0RFTVVY RVIpICAgICAgICAgICAgICAgKz0gc2NjZGVjLm8gc3VidGl0bGVzLm8KIE9CSlMtJChDT05GSUdf U0NDX01VWEVSKSAgICAgICAgICAgICAgICAgKz0gc2NjZW5jLm8KIE9CSlMtJChDT05GSUdfU0NE X0RFTVVYRVIpICAgICAgICAgICAgICAgKz0gc2NkLm8KZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0 L2FsbGZvcm1hdHMuYyBiL2xpYmF2Zm9ybWF0L2FsbGZvcm1hdHMuYwppbmRleCBlZmRiMzRlMjlk Li5mZDM3N2Y0NWRkIDEwMDY0NAotLS0gYS9saWJhdmZvcm1hdC9hbGxmb3JtYXRzLmMKKysrIGIv bGliYXZmb3JtYXQvYWxsZm9ybWF0cy5jCkBAIC00MDMsNyArNDAzLDYgQEAgZXh0ZXJuIGNvbnN0 IEFWSW5wdXRGb3JtYXQgIGZmX3NhcF9kZW11eGVyOwogZXh0ZXJuIGNvbnN0IEZGT3V0cHV0Rm9y bWF0IGZmX3NhcF9tdXhlcjsKIGV4dGVybiBjb25zdCBBVklucHV0Rm9ybWF0ICBmZl9zYmNfZGVt dXhlcjsKIGV4dGVybiBjb25zdCBGRk91dHB1dEZvcm1hdCBmZl9zYmNfbXV4ZXI7Ci1leHRlcm4g Y29uc3QgQVZJbnB1dEZvcm1hdCAgZmZfc2JnX2RlbXV4ZXI7CiBleHRlcm4gY29uc3QgQVZJbnB1 dEZvcm1hdCAgZmZfc2NjX2RlbXV4ZXI7CiBleHRlcm4gY29uc3QgRkZPdXRwdXRGb3JtYXQgZmZf c2NjX211eGVyOwogZXh0ZXJuIGNvbnN0IEFWSW5wdXRGb3JtYXQgIGZmX3NjZF9kZW11eGVyOwpk aWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvc2JnZGVjLmMgYi9saWJhdmZvcm1hdC9zYmdkZWMuYwpk ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWVkYjk2NjRjYy4uMDAwMDAwMDAwMAotLS0g YS9saWJhdmZvcm1hdC9zYmdkZWMuYworKysgL2Rldi9udWxsCkBAIC0xLDE1NDYgKzAsMCBAQAot LyoKLSAqIFNCRyAoU0JhR2VuKSBmaWxlIGZvcm1hdCBkZWNvZGVyCi0gKiBDb3B5cmlnaHQgKGMp IDIwMTEgTmljb2xhcyBHZW9yZ2UKLSAqCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcu Ci0gKgotICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH ZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3Ig KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBGRm1wZWcgaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg TGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBu b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCi0g Ki8KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8 dGltZS5oPgotI2luY2x1ZGUgImxpYmF2dXRpbC9jaGFubmVsX2xheW91dC5oIgotI2luY2x1ZGUg ImxpYmF2dXRpbC9pbnRyZWFkd3JpdGUuaCIKLSNpbmNsdWRlICJsaWJhdnV0aWwvbG9nLmgiCi0j aW5jbHVkZSAibGliYXZ1dGlsL29wdC5oIgotI2luY2x1ZGUgImxpYmF2dXRpbC90aW1lX2ludGVy bmFsLmgiCi0jaW5jbHVkZSAiYXZmb3JtYXQuaCIKLSNpbmNsdWRlICJpbnRlcm5hbC5oIgotCi0j ZGVmaW5lIFNCR19TQ0FMRSAoMSA8PCAxNikKLSNkZWZpbmUgREFZICgyNCAqIDYwICogNjApCi0j ZGVmaW5lIERBWV9UUyAoKGludDY0X3QpREFZICogQVZfVElNRV9CQVNFKQotCi1zdHJ1Y3Qgc2Jn X2RlbXV4ZXIgewotICAgIEFWQ2xhc3MgKmNsYXNzOwotICAgIGludCBzYW1wbGVfcmF0ZTsKLSAg ICBpbnQgZnJhbWVfc2l6ZTsKLSAgICBpbnQgbWF4X2ZpbGVfc2l6ZTsKLX07Ci0KLXN0cnVjdCBz Ymdfc3RyaW5nIHsKLSAgICBjaGFyICpzOwotICAgIGNoYXIgKmU7Ci19OwotCi1lbnVtIHNiZ19m YWRlX3R5cGUgewotICAgIFNCR19GQURFX1NJTEVOQ0UgPSAwLAotICAgIFNCR19GQURFX1NBTUUg ICAgPSAxLAotICAgIFNCR19GQURFX0FEQVBUICAgPSAzLAotfTsKLQotc3RydWN0IHNiZ19mYWRl IHsKLSAgICBpbnQ4X3QgaW4sIG91dCwgc2xpZGU7Ci19OwotCi1lbnVtIHNiZ19zeW50aF90eXBl IHsKLSAgICBTQkdfVFlQRV9OT05FLAotICAgIFNCR19UWVBFX1NJTkUsCi0gICAgU0JHX1RZUEVf Tk9JU0UsCi0gICAgU0JHX1RZUEVfQkVMTCwKLSAgICBTQkdfVFlQRV9NSVgsCi0gICAgU0JHX1RZ UEVfU1BJTiwKLX07Ci0KLS8qIGJlbGw6IGZyZXEgY29uc3RhbnQsIGFtcGwgZGVjcmVhc2VzIGV4 cG9uZW50aWFsbHksIGNhbiBiZSBhcHByb3ggbGluICovCi0KLXN0cnVjdCBzYmdfdGltZXN0YW1w IHsKLSAgICBpbnQ2NF90IHQ7Ci0gICAgY2hhciB0eXBlOyAvKiAwIGZvciByZWxhdGl2ZSwgJ04n IGZvciBub3csICdUJyBmb3IgYWJzb2x1dGUgKi8KLX07Ci0KLXN0cnVjdCBzYmdfc2NyaXB0X2Rl ZmluaXRpb24gewotICAgIGNoYXIgKm5hbWU7Ci0gICAgaW50IG5hbWVfbGVuOwotICAgIGludCBl bGVtZW50cywgbmJfZWxlbWVudHM7Ci0gICAgY2hhciB0eXBlOyAvKiAnUycgb3IgJ0InICovCi19 OwotCi1zdHJ1Y3Qgc2JnX3NjcmlwdF9zeW50aCB7Ci0gICAgaW50IGNhcnJpZXI7Ci0gICAgaW50 IGJlYXQ7Ci0gICAgaW50IHZvbDsKLSAgICBlbnVtIHNiZ19zeW50aF90eXBlIHR5cGU7Ci0gICAg c3RydWN0IHsKLSAgICAgICAgaW50IGwsIHI7Ci0gICAgfSByZWY7Ci19OwotCi1zdHJ1Y3Qgc2Jn X3NjcmlwdF90c2VxIHsKLSAgICBzdHJ1Y3Qgc2JnX3RpbWVzdGFtcCB0czsKLSAgICBjaGFyICpu YW1lOwotICAgIGludCBuYW1lX2xlbjsKLSAgICBpbnQgbG9jazsKLSAgICBzdHJ1Y3Qgc2JnX2Zh ZGUgZmFkZTsKLX07Ci0KLXN0cnVjdCBzYmdfc2NyaXB0X2V2ZW50IHsKLSAgICBpbnQ2NF90IHRz OwotICAgIGludDY0X3QgdHNfaW50LCB0c190cmFucywgdHNfbmV4dDsKLSAgICBpbnQgZWxlbWVu dHMsIG5iX2VsZW1lbnRzOwotICAgIHN0cnVjdCBzYmdfZmFkZSBmYWRlOwotfTsKLQotc3RydWN0 IHNiZ19zY3JpcHQgewotICAgIHN0cnVjdCBzYmdfc2NyaXB0X2RlZmluaXRpb24gKmRlZjsKLSAg ICBzdHJ1Y3Qgc2JnX3NjcmlwdF9zeW50aCAqc3ludGg7Ci0gICAgc3RydWN0IHNiZ19zY3JpcHRf dHNlcSAqdHNlcTsKLSAgICBzdHJ1Y3Qgc2JnX3NjcmlwdF90c2VxICpibG9ja190c2VxOwotICAg IHN0cnVjdCBzYmdfc2NyaXB0X2V2ZW50ICpldmVudHM7Ci0gICAgaW50IG5iX2RlZjsKLSAgICBp bnQgbmJfdHNlcTsKLSAgICBpbnQgbmJfZXZlbnRzOwotICAgIGludCBuYl9zeW50aDsKLSAgICBp bnQ2NF90IHN0YXJ0X3RzOwotICAgIGludDY0X3QgZW5kX3RzOwotICAgIGludDY0X3Qgb3B0X2Zh ZGVfdGltZTsKLSAgICBpbnQ2NF90IG9wdF9kdXJhdGlvbjsKLSAgICBjaGFyICpvcHRfbWl4Owot ICAgIGludCBzYW1wbGVfcmF0ZTsKLSAgICB1aW50OF90IG9wdF9zdGFydF9hdF9maXJzdDsKLSAg ICB1aW50OF90IG9wdF9lbmRfYXRfbGFzdDsKLX07Ci0KLXN0cnVjdCBzYmdfcGFyc2VyIHsKLSAg ICB2b2lkICpsb2c7Ci0gICAgY2hhciAqc2NyaXB0LCAqZW5kOwotICAgIGNoYXIgKmN1cnNvcjsK LSAgICBzdHJ1Y3Qgc2JnX3NjcmlwdCBzY3M7Ci0gICAgc3RydWN0IHNiZ190aW1lc3RhbXAgY3Vy cmVudF90aW1lOwotICAgIGludCBuYl9ibG9ja190c2VxOwotICAgIGludCBuYl9kZWZfbWF4LCBu Yl9zeW50aF9tYXgsIG5iX3RzZXFfbWF4LCBuYl9ibG9ja190c2VxX21heDsKLSAgICBpbnQgbGlu ZV9ubzsKLSAgICBjaGFyIGVycl9tc2dbMTI4XTsKLX07Ci0KLWVudW0gd3NfaW50ZXJ2YWxfdHlw ZSB7Ci0gICAgV1NfU0lORSAgPSBNS1RBRygnUycsJ0knLCdOJywnRScpLAotICAgIFdTX05PSVNF ID0gTUtUQUcoJ04nLCdPJywnSScsJ1MnKSwKLX07Ci0KLXN0cnVjdCB3c19pbnRlcnZhbCB7Ci0g ICAgaW50NjRfdCB0czEsIHRzMjsKLSAgICBlbnVtIHdzX2ludGVydmFsX3R5cGUgdHlwZTsKLSAg ICB1aW50MzJfdCBjaGFubmVsczsKLSAgICBpbnQzMl90IGYxLCBmMjsKLSAgICBpbnQzMl90IGEx LCBhMjsKLSAgICB1aW50MzJfdCBwaGk7Ci19OwotCi1zdHJ1Y3Qgd3NfaW50ZXJ2YWxzIHsKLSAg ICBzdHJ1Y3Qgd3NfaW50ZXJ2YWwgKmludGVyOwotICAgIGludCBuYl9pbnRlcjsKLSAgICBpbnQg bWF4X2ludGVyOwotfTsKLQotc3RhdGljIHZvaWQgKmFsbG9jX2FycmF5X2VsZW0odm9pZCAqKmFy cmF5LCBzaXplX3QgZWxzaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpz aXplLCBpbnQgKm1heF9zaXplKQotewotICAgIHZvaWQgKnJldDsKLQotICAgIGlmICgqc2l6ZSA9 PSAqbWF4X3NpemUpIHsKLSAgICAgICAgaW50IG0gPSBGRk1BWCgzMiwgRkZNSU4oKm1heF9zaXpl LCBJTlRfTUFYIC8gMikgKiAyKTsKLSAgICAgICAgaWYgKCpzaXplID49IG0pCi0gICAgICAgICAg ICByZXR1cm4gTlVMTDsKLSAgICAgICAgKmFycmF5ID0gYXZfcmVhbGxvY19mKCphcnJheSwgbSwg ZWxzaXplKTsKLSAgICAgICAgaWYgKCEqYXJyYXkpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsK LSAgICAgICAgKm1heF9zaXplID0gbTsKLSAgICB9Ci0gICAgcmV0ID0gKGNoYXIgKikqYXJyYXkg KyBlbHNpemUgKiAqc2l6ZTsKLSAgICBtZW1zZXQocmV0LCAwLCBlbHNpemUpOwotICAgICgqc2l6 ZSkrKzsKLSAgICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IHN0cl90b190aW1lKGNvbnN0 IGNoYXIgKnN0ciwgaW50NjRfdCAqcnRpbWUpCi17Ci0gICAgY29uc3QgY2hhciAqY3VyID0gc3Ry OwotICAgIGNoYXIgKmVuZDsKLSAgICBpbnQgaG91cnMsIG1pbnV0ZXM7Ci0gICAgZG91YmxlIHNl Y29uZHMgPSAwOwotICAgIGludDY0X3QgdHMgPSAwOwotCi0gICAgaWYgKCpjdXIgPCAnMCcgfHwg KmN1ciA+ICc5JykKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaG91cnMgPSBzdHJ0b2woY3VyLCAm ZW5kLCAxMCk7Ci0gICAgaWYgKGVuZCA9PSBjdXIgfHwgKmVuZCAhPSAnOicgfHwgZW5kWzFdIDwg JzAnIHx8IGVuZFsxXSA+ICc5JykKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgY3VyID0gZW5kICsg MTsKLSAgICBtaW51dGVzID0gc3RydG9sKGN1ciwgJmVuZCwgMTApOwotICAgIGlmIChlbmQgPT0g Y3VyKQotICAgICAgICByZXR1cm4gMDsKLSAgICBjdXIgPSBlbmQ7Ci0gICAgaWYgKCplbmQgPT0g JzonKXsKLSAgICAgICAgc2Vjb25kcyA9IHN0cnRvZChjdXIgKyAxLCAmZW5kKTsKLSAgICAgICAg aWYgKGVuZCA+IGN1ciArIDEpCi0gICAgICAgICAgICBjdXIgPSBlbmQ7Ci0gICAgICAgIHRzID0g YXZfY2xpcGQoc2Vjb25kcyAqIEFWX1RJTUVfQkFTRSwgSU5UNjRfTUlOLzIsIElOVDY0X01BWC8y KTsKLSAgICB9Ci0gICAgKnJ0aW1lID0gYXZfc2F0X2FkZDY0KChob3VycyAqIDM2MDBMTCArIG1p bnV0ZXMgKiA2MExMKSAqIEFWX1RJTUVfQkFTRSwgdHMpOwotICAgIHJldHVybiBjdXIgLSBzdHI7 Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGlzX3NwYWNlKGNoYXIgYykKLXsKLSAgICByZXR1cm4g YyA9PSAnICcgIHx8IGMgPT0gJ1x0JyB8fCBjID09ICdccic7Ci19Ci0KLXN0YXRpYyBpbmxpbmUg aW50IHNjYWxlX2RvdWJsZSh2b2lkICpsb2csIGRvdWJsZSBkLCBkb3VibGUgbSwgaW50ICpyKQot ewotICAgIG0gKj0gZCAqIFNCR19TQ0FMRTsKLSAgICBpZiAobSA8IElOVF9NSU4gfHwgbSA+PSBJ TlRfTUFYKSB7Ci0gICAgICAgIGlmIChsb2cpCi0gICAgICAgICAgICBhdl9sb2cobG9nLCBBVl9M T0dfRVJST1IsICIlZyBpcyB0b28gbGFyZ2VcbiIsIGQpOwotICAgICAgICByZXR1cm4gQVZFUlJP UihFRE9NKTsKLSAgICB9Ci0gICAgKnIgPSBtOwotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMg aW50IGxleF9zcGFjZShzdHJ1Y3Qgc2JnX3BhcnNlciAqcCkKLXsKLSAgICBjaGFyICpjID0gcC0+ Y3Vyc29yOwotCi0gICAgd2hpbGUgKHAtPmN1cnNvciA8IHAtPmVuZCAmJiBpc19zcGFjZSgqcC0+ Y3Vyc29yKSkKLSAgICAgICAgcC0+Y3Vyc29yKys7Ci0gICAgcmV0dXJuIHAtPmN1cnNvciA+IGM7 Ci19Ci0KLXN0YXRpYyBpbnQgbGV4X2NoYXIoc3RydWN0IHNiZ19wYXJzZXIgKnAsIGNoYXIgYykK LXsKLSAgICBpbnQgciA9IHAtPmN1cnNvciA8IHAtPmVuZCAmJiAqcC0+Y3Vyc29yID09IGM7Ci0K LSAgICBwLT5jdXJzb3IgKz0gcjsKLSAgICByZXR1cm4gcjsKLX0KLQotc3RhdGljIGludCBsZXhf ZG91YmxlKHN0cnVjdCBzYmdfcGFyc2VyICpwLCBkb3VibGUgKnIpCi17Ci0gICAgZG91YmxlIGQ7 Ci0gICAgY2hhciAqZW5kOwotCi0gICAgaWYgKHAtPmN1cnNvciA9PSBwLT5lbmQgfHwgaXNfc3Bh Y2UoKnAtPmN1cnNvcikgfHwgKnAtPmN1cnNvciA9PSAnXG4nKQotICAgICAgICByZXR1cm4gMDsK LSAgICBkID0gc3RydG9kKHAtPmN1cnNvciwgJmVuZCk7Ci0gICAgaWYgKGVuZCA+IHAtPmN1cnNv cikgewotICAgICAgICAqciA9IGQ7Ci0gICAgICAgIHAtPmN1cnNvciA9IGVuZDsKLSAgICAgICAg cmV0dXJuIDE7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGxleF9maXhl ZChzdHJ1Y3Qgc2JnX3BhcnNlciAqcCwgY29uc3QgY2hhciAqdCwgaW50IGwpCi17Ci0gICAgaWYg KHAtPmVuZCAtIHAtPmN1cnNvciA8IGwgfHwgbWVtY21wKHAtPmN1cnNvciwgdCwgbCkpCi0gICAg ICAgIHJldHVybiAwOwotICAgIHAtPmN1cnNvciArPSBsOwotICAgIHJldHVybiAxOwotfQotCi1z dGF0aWMgaW50IGxleF9saW5lX2VuZChzdHJ1Y3Qgc2JnX3BhcnNlciAqcCkKLXsKLSAgICBpZiAo cC0+Y3Vyc29yIDwgcC0+ZW5kICYmICpwLT5jdXJzb3IgPT0gJyMnKSB7Ci0gICAgICAgIHAtPmN1 cnNvcisrOwotICAgICAgICB3aGlsZSAocC0+Y3Vyc29yIDwgcC0+ZW5kICYmICpwLT5jdXJzb3Ig IT0gJ1xuJykKLSAgICAgICAgICAgIHAtPmN1cnNvcisrOwotICAgIH0KLSAgICBpZiAocC0+Y3Vy c29yID09IHAtPmVuZCkKLSAgICAgICAgLyogc2ltdWxhdGUgZmluYWwgTEYgZm9yIGZpbGVzIGxh Y2tpbmcgaXQgKi8KLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgaWYgKCpwLT5jdXJzb3IgIT0gJ1xu JykKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcC0+Y3Vyc29yKys7Ci0gICAgcC0+bGluZV9ubysr OwotICAgIGxleF9zcGFjZShwKTsKLSAgICByZXR1cm4gMTsKLX0KLQotc3RhdGljIGludCBsZXhf d3N3b3JkKHN0cnVjdCBzYmdfcGFyc2VyICpwLCBzdHJ1Y3Qgc2JnX3N0cmluZyAqcnMpCi17Ci0g ICAgY2hhciAqcyA9IHAtPmN1cnNvciwgKmMgPSBzOwotCi0gICAgaWYgKHMgPT0gcC0+ZW5kIHx8 ICpzID09ICdcbicpCi0gICAgICAgIHJldHVybiAwOwotICAgIHdoaWxlIChjIDwgcC0+ZW5kICYm ICpjICE9ICdcbicgJiYgIWlzX3NwYWNlKCpjKSkKLSAgICAgICAgYysrOwotICAgIHJzLT5zID0g czsKLSAgICBycy0+ZSA9IHAtPmN1cnNvciA9IGM7Ci0gICAgbGV4X3NwYWNlKHApOwotICAgIHJl dHVybiAxOwotfQotCi1zdGF0aWMgaW50IGxleF9uYW1lKHN0cnVjdCBzYmdfcGFyc2VyICpwLCBz dHJ1Y3Qgc2JnX3N0cmluZyAqcnMpCi17Ci0gICAgY2hhciAqcyA9IHAtPmN1cnNvciwgKmMgPSBz OwotCi0gICAgd2hpbGUgKGMgPCBwLT5lbmQgJiYgKCgqYyA+PSAnYScgJiYgKmMgPD0gJ3onKSB8 fCAoKmMgPj0gJ0EnICYmICpjIDw9ICdaJykKLSAgICAgICAgICAgfHwgKCpjID49ICcwJyAmJiAq YyA8PSAnOScpIHx8ICpjID09ICdfJyB8fCAqYyA9PSAnLScpKQotICAgICAgICBjKys7Ci0gICAg aWYgKGMgPT0gcykKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcnMtPnMgPSBzOwotICAgIHJzLT5l ID0gcC0+Y3Vyc29yID0gYzsKLSAgICByZXR1cm4gMTsKLX0KLQotc3RhdGljIGludCBsZXhfdGlt ZShzdHJ1Y3Qgc2JnX3BhcnNlciAqcCwgaW50NjRfdCAqcnQpCi17Ci0gICAgaW50IHIgPSBzdHJf dG9fdGltZShwLT5jdXJzb3IsIHJ0KTsKLSAgICBwLT5jdXJzb3IgKz0gcjsKLSAgICByZXR1cm4g ciA+IDA7Ci19Ci0KLSNkZWZpbmUgRk9SV0FSRF9FUlJPUihjKSBcCi0gICAgZG8geyBcCi0gICAg ICAgIGludCBlcnJjb2RlID0gYzsgXAotICAgICAgICBpZiAoZXJyY29kZSA8PSAwKSBcCi0gICAg ICAgICAgICByZXR1cm4gZXJyY29kZSA/IGVycmNvZGUgOiBBVkVSUk9SX0lOVkFMSUREQVRBOyBc Ci0gICAgfSB3aGlsZSAoMCkKLQotc3RhdGljIGludCBwYXJzZV9pbW1lZGlhdGUoc3RydWN0IHNi Z19wYXJzZXIgKnApCi17Ci0gICAgc25wcmludGYocC0+ZXJyX21zZywgc2l6ZW9mKHAtPmVycl9t c2cpLAotICAgICAgICAgICAgICJpbW1lZGlhdGUgc2VxdWVuY2VzIG5vdCB5ZXQgaW1wbGVtZW50 ZWQiKTsKLSAgICByZXR1cm4gQVZFUlJPUl9QQVRDSFdFTENPTUU7Ci19Ci0KLXN0YXRpYyBpbnQg cGFyc2VfcHJlcHJvZ3JhbW1lZChzdHJ1Y3Qgc2JnX3BhcnNlciAqcCkKLXsKLSAgICBzbnByaW50 ZihwLT5lcnJfbXNnLCBzaXplb2YocC0+ZXJyX21zZyksCi0gICAgICAgICAgICAgInByZXByb2dy YW1tZWQgc2VxdWVuY2VzIG5vdCB5ZXQgaW1wbGVtZW50ZWQiKTsKLSAgICByZXR1cm4gQVZFUlJP Ul9QQVRDSFdFTENPTUU7Ci19Ci0KLXN0YXRpYyBpbnQgcGFyc2Vfb3B0YXJnKHN0cnVjdCBzYmdf cGFyc2VyICpwLCBjaGFyIG8sIHN0cnVjdCBzYmdfc3RyaW5nICpyKQotewotICAgIGlmICghbGV4 X3dzd29yZChwLCByKSkgewotICAgICAgICBzbnByaW50ZihwLT5lcnJfbXNnLCBzaXplb2YocC0+ ZXJyX21zZyksCi0gICAgICAgICAgICAgICAgICJvcHRpb24gJyVjJyByZXF1aXJlcyBhbiBhcmd1 bWVudCIsIG8pOwotICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKLSAgICB9Ci0g ICAgcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBpbnQgcGFyc2Vfb3B0aW9ucyhzdHJ1Y3Qgc2JnX3Bh cnNlciAqcCkKLXsKLSAgICBzdHJ1Y3Qgc2JnX3N0cmluZyBvc3RyLCBvYXJnOwotICAgIGNoYXIg bW9kZSA9IDA7Ci0gICAgaW50IHI7Ci0gICAgY2hhciAqdHB0cjsKLSAgICBkb3VibGUgdjsKLQot ICAgIGlmIChwLT5jdXJzb3IgPT0gcC0+ZW5kIHx8ICpwLT5jdXJzb3IgIT0gJy0nKQotICAgICAg ICByZXR1cm4gMDsKLSAgICB3aGlsZSAobGV4X2NoYXIocCwgJy0nKSAmJiBsZXhfd3N3b3JkKHAs ICZvc3RyKSkgewotICAgICAgICBmb3IgKDsgb3N0ci5zIDwgb3N0ci5lOyBvc3RyLnMrKykgewot ICAgICAgICAgICAgY2hhciBvcHQgPSAqb3N0ci5zOwotICAgICAgICAgICAgc3dpdGNoIChvcHQp IHsKLSAgICAgICAgICAgICAgICBjYXNlICdTJzoKLSAgICAgICAgICAgICAgICAgICAgcC0+c2Nz Lm9wdF9zdGFydF9hdF9maXJzdCA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg ICAgICAgICAgICAgIGNhc2UgJ0UnOgotICAgICAgICAgICAgICAgICAgICBwLT5zY3Mub3B0X2Vu ZF9hdF9sYXN0ID0gMTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg ICAgY2FzZSAnaSc6Ci0gICAgICAgICAgICAgICAgICAgIG1vZGUgPSAnaSc7Ci0gICAgICAgICAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgJ3AnOgotICAgICAgICAgICAg ICAgICAgICBtb2RlID0gJ3AnOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg ICAgICAgICBjYXNlICdGJzoKLSAgICAgICAgICAgICAgICAgICAgRk9SV0FSRF9FUlJPUihwYXJz ZV9vcHRhcmcocCwgb3B0LCAmb2FyZykpOwotICAgICAgICAgICAgICAgICAgICB2ID0gc3RydG9k KG9hcmcucywgJnRwdHIpOwotICAgICAgICAgICAgICAgICAgICBpZiAob2FyZy5lICE9IHRwdHIp IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNucHJpbnRmKHAtPmVycl9tc2csIHNpemVvZihw LT5lcnJfbXNnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzeW50YXggZXJy b3IgZm9yIG9wdGlvbiAtRiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJS T1JfSU5WQUxJRERBVEE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg ICAgcC0+c2NzLm9wdF9mYWRlX3RpbWUgPSB2ICogQVZfVElNRV9CQVNFIC8gMTAwMDsKLSAgICAg ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAnTCc6Ci0gICAgICAg ICAgICAgICAgICAgIEZPUldBUkRfRVJST1IocGFyc2Vfb3B0YXJnKHAsIG9wdCwgJm9hcmcpKTsK LSAgICAgICAgICAgICAgICAgICAgciA9IHN0cl90b190aW1lKG9hcmcucywgJnAtPnNjcy5vcHRf ZHVyYXRpb24pOwotICAgICAgICAgICAgICAgICAgICBpZiAob2FyZy5lICE9IG9hcmcucyArIHIp IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNucHJpbnRmKHAtPmVycl9tc2csIHNpemVvZihw LT5lcnJfbXNnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzeW50YXggZXJy b3IgZm9yIG9wdGlvbiAtTCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJS T1JfSU5WQUxJRERBVEE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAnVCc6Ci0gICAgICAgICAgICAgICAgICAg IEZPUldBUkRfRVJST1IocGFyc2Vfb3B0YXJnKHAsIG9wdCwgJm9hcmcpKTsKLSAgICAgICAgICAg ICAgICAgICAgciA9IHN0cl90b190aW1lKG9hcmcucywgJnAtPnNjcy5zdGFydF90cyk7Ci0gICAg ICAgICAgICAgICAgICAgIGlmIChvYXJnLmUgIT0gb2FyZy5zICsgcikgewotICAgICAgICAgICAg ICAgICAgICAgICAgc25wcmludGYocC0+ZXJyX21zZywgc2l6ZW9mKHAtPmVycl9tc2cpLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN5bnRheCBlcnJvciBmb3Igb3B0aW9uIC1U Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsK LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg ICAgICAgICAgICBjYXNlICdtJzoKLSAgICAgICAgICAgICAgICAgICAgRk9SV0FSRF9FUlJPUihw YXJzZV9vcHRhcmcocCwgb3B0LCAmb2FyZykpOwotICAgICAgICAgICAgICAgICAgICB0cHRyID0g YXZfbWFsbG9jKG9hcmcuZSAtIG9hcmcucyArIDEpOwotICAgICAgICAgICAgICAgICAgICBpZiAo IXRwdHIpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwot ICAgICAgICAgICAgICAgICAgICBtZW1jcHkodHB0ciwgb2FyZy5zLCBvYXJnLmUgLSBvYXJnLnMp OwotICAgICAgICAgICAgICAgICAgICB0cHRyW29hcmcuZSAtIG9hcmcuc10gPSAwOwotICAgICAg ICAgICAgICAgICAgICBhdl9mcmVlKHAtPnNjcy5vcHRfbWl4KTsKLSAgICAgICAgICAgICAgICAg ICAgcC0+c2NzLm9wdF9taXggPSB0cHRyOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg ICAgICAgICAgICAgICBjYXNlICdxJzoKLSAgICAgICAgICAgICAgICAgICAgRk9SV0FSRF9FUlJP UihwYXJzZV9vcHRhcmcocCwgb3B0LCAmb2FyZykpOwotICAgICAgICAgICAgICAgICAgICB2ID0g c3RydG9kKG9hcmcucywgJnRwdHIpOwotICAgICAgICAgICAgICAgICAgICBpZiAob2FyZy5lICE9 IHRwdHIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNucHJpbnRmKHAtPmVycl9tc2csIHNp emVvZihwLT5lcnJfbXNnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzeW50 YXggZXJyb3IgZm9yIG9wdGlvbiAtcSIpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu IEFWRVJST1JfSU5WQUxJRERBVEE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg ICAgICAgICAgaWYgKHYgIT0gMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgc25wcmludGYo cC0+ZXJyX21zZywgc2l6ZW9mKHAtPmVycl9tc2cpLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgInNwZWVkIGZhY3RvciBvdGhlciB0aGFuIDEgbm90IHN1cHBvcnRlZCIpOwotICAg ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfUEFUQ0hXRUxDT01FOwotICAgICAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg ICAgIGNhc2UgJ3InOgotICAgICAgICAgICAgICAgICAgICBGT1JXQVJEX0VSUk9SKHBhcnNlX29w dGFyZyhwLCBvcHQsICZvYXJnKSk7Ci0gICAgICAgICAgICAgICAgICAgIHIgPSBzdHJ0b2wob2Fy Zy5zLCAmdHB0ciwgMTApOwotICAgICAgICAgICAgICAgICAgICBpZiAob2FyZy5lICE9IHRwdHIp IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNucHJpbnRmKHAtPmVycl9tc2csIHNpemVvZihw LT5lcnJfbXNnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzeW50YXggZXJy b3IgZm9yIG9wdGlvbiAtciIpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJS T1JfSU5WQUxJRERBVEE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg ICAgaWYgKHIgPCA0MCkgewotICAgICAgICAgICAgICAgICAgICAgICAgc25wcmludGYocC0+ZXJy X21zZywgc2l6ZW9mKHAtPmVycl9tc2cpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgImludmFsaWQgc2FtcGxlIHJhdGUiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy biBBVkVSUk9SX1BBVENIV0VMQ09NRTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg ICAgICAgICAgICBwLT5zY3Muc2FtcGxlX3JhdGUgPSByOwotICAgICAgICAgICAgICAgICAgICBi cmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBzbnBy aW50ZihwLT5lcnJfbXNnLCBzaXplb2YocC0+ZXJyX21zZyksCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJ1bmtub3duIG9wdGlvbjogJyVjJyIsICpvc3RyLnMpOwotICAgICAgICAgICAg ICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKLSAgICAgICAgICAgIH0KLSAgICAg ICAgfQotICAgIH0KLSAgICBzd2l0Y2ggKG1vZGUpIHsKLSAgICAgICAgY2FzZSAnaSc6Ci0gICAg ICAgICAgICByZXR1cm4gcGFyc2VfaW1tZWRpYXRlKHApOwotICAgICAgICBjYXNlICdwJzoKLSAg ICAgICAgICAgIHJldHVybiBwYXJzZV9wcmVwcm9ncmFtbWVkKHApOwotICAgICAgICBjYXNlIDA6 Ci0gICAgICAgICAgICBpZiAoIWxleF9saW5lX2VuZChwKSkKLSAgICAgICAgICAgICAgICByZXR1 cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKLSAgICAgICAgICAgIHJldHVybiAxOwotICAgIH0KLSAg ICByZXR1cm4gQVZFUlJPUl9CVUc7Ci19Ci0KLXN0YXRpYyBpbnQgcGFyc2VfdGltZXN0YW1wKHN0 cnVjdCBzYmdfcGFyc2VyICpwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj dCBzYmdfdGltZXN0YW1wICpydHMsIGludDY0X3QgKnJyZWwpCi17Ci0gICAgaW50NjRfdCBhYnMg PSAwLCByZWwgPSAwLCBkdDsKLSAgICBjaGFyIHR5cGUgPSAwOwotICAgIGludCByOwotCi0gICAg aWYgKGxleF9maXhlZChwLCAiTk9XIiwgMykpIHsKLSAgICAgICAgdHlwZSA9ICdOJzsKLSAgICAg ICAgciA9IDE7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgciA9IGxleF90aW1lKHAsICZhYnMpOwot ICAgICAgICBpZiAocikKLSAgICAgICAgICAgIHR5cGUgPSAnVCc7Ci0gICAgfQotICAgIHdoaWxl IChsZXhfY2hhcihwLCAnKycpKSB7Ci0gICAgICAgIGlmICghbGV4X3RpbWUocCwgJmR0KSkKLSAg ICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwotICAgICAgICBpZiAoYXZfc2F0 X2FkZDY0KHJlbCwgZHQpIC0gZHQgIT0gcmVsKQotICAgICAgICAgICAgcmV0dXJuIEFWRVJST1Jf SU5WQUxJRERBVEE7Ci0gICAgICAgIHJlbCArPSBkdDsKLSAgICAgICAgciA9IDE7Ci0gICAgfQot ICAgIGlmIChyKSB7Ci0gICAgICAgIGlmICghbGV4X3NwYWNlKHApKQotICAgICAgICAgICAgcmV0 dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Ci0gICAgICAgIHJ0cy0+dHlwZSA9IHR5cGU7Ci0gICAg ICAgIHJ0cy0+dCAgICA9IGFiczsKLSAgICAgICAgKnJyZWwgICAgID0gcmVsOwotICAgIH0KLSAg ICByZXR1cm4gcjsKLX0KLQotc3RhdGljIGludCBwYXJzZV9mYWRlKHN0cnVjdCBzYmdfcGFyc2Vy ICpwLCBzdHJ1Y3Qgc2JnX2ZhZGUgKmZyKQotewotICAgIHN0cnVjdCBzYmdfZmFkZSBmID0gezB9 OwotCi0gICAgaWYgKGxleF9jaGFyKHAsICc8JykpCi0gICAgICAgIGYuaW4gPSBTQkdfRkFERV9T SUxFTkNFOwotICAgIGVsc2UgaWYgKGxleF9jaGFyKHAsICctJykpCi0gICAgICAgIGYuaW4gPSBT QkdfRkFERV9TQU1FOwotICAgIGVsc2UgaWYgKGxleF9jaGFyKHAsICc9JykpCi0gICAgICAgIGYu aW4gPSBTQkdfRkFERV9BREFQVDsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiAwOwotICAgIGlm IChsZXhfY2hhcihwLCAnPicpKQotICAgICAgICBmLm91dCA9IFNCR19GQURFX1NJTEVOQ0U7Ci0g ICAgZWxzZSBpZiAobGV4X2NoYXIocCwgJy0nKSkKLSAgICAgICAgZi5vdXQgPSBTQkdfRkFERV9T QU1FOwotICAgIGVsc2UgaWYgKGxleF9jaGFyKHAsICc9JykpCi0gICAgICAgIGYub3V0ID0gU0JH X0ZBREVfQURBUFQ7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFU QTsKLSAgICAqZnIgPSBmOwotICAgIHJldHVybiAxOwotfQotCi1zdGF0aWMgaW50IHBhcnNlX3Rp bWVfc2VxdWVuY2Uoc3RydWN0IHNiZ19wYXJzZXIgKnAsIGludCBpbmJsb2NrKQotewotICAgIHN0 cnVjdCBzYmdfdGltZXN0YW1wIHRzOwotICAgIGludDY0X3QgcmVsX3RzOwotICAgIGludCByOwot ICAgIHN0cnVjdCBzYmdfZmFkZSBmYWRlID0geyBTQkdfRkFERV9TQU1FLCBTQkdfRkFERV9TQU1F LCAwIH07Ci0gICAgc3RydWN0IHNiZ19zdHJpbmcgbmFtZTsKLSAgICBzdHJ1Y3Qgc2JnX3Njcmlw dF90c2VxICp0c2VxOwotCi0gICAgciA9IHBhcnNlX3RpbWVzdGFtcChwLCAmdHMsICZyZWxfdHMp OwotICAgIGlmICghcikKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKHIgPCAwKQotICAgICAg ICByZXR1cm4gcjsKLSAgICBpZiAodHMudHlwZSkgewotICAgICAgICBpZiAoaW5ibG9jaykKLSAg ICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwotICAgICAgICBwLT5jdXJyZW50 X3RpbWUudHlwZSA9IHRzLnR5cGU7Ci0gICAgICAgIHAtPmN1cnJlbnRfdGltZS50ICAgID0gdHMu dDsKLSAgICB9IGVsc2UgaWYoIWluYmxvY2sgJiYgIXAtPmN1cnJlbnRfdGltZS50eXBlKSB7Ci0g ICAgICAgIHNucHJpbnRmKHAtPmVycl9tc2csIHNpemVvZihwLT5lcnJfbXNnKSwKLSAgICAgICAg ICAgICAgICAgInJlbGF0aXZlIHRpbWUgd2l0aG91dCBwcmV2aW91cyBhYnNvbHV0ZSB0aW1lIik7 Ci0gICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwotICAgIH0KLSAgICB0cy50eXBl ID0gcC0+Y3VycmVudF90aW1lLnR5cGU7Ci0KLSAgICBpZiAoYXZfc2F0X2FkZDY0KHAtPmN1cnJl bnRfdGltZS50LCByZWxfdHMpICE9IHAtPmN1cnJlbnRfdGltZS50ICsgKHVpbnQ2NF90KXJlbF90 cykKLSAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Ci0gICAgdHMudCAgICA9IHAt PmN1cnJlbnRfdGltZS50ICsgcmVsX3RzOwotICAgIHIgPSBwYXJzZV9mYWRlKHAsICZmYWRlKTsK LSAgICBpZiAociA8IDApCi0gICAgICAgIHJldHVybiByOwotICAgIGxleF9zcGFjZShwKTsKLSAg ICBpZiAoIWxleF9uYW1lKHAsICZuYW1lKSkKLSAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJ RERBVEE7Ci0gICAgbGV4X3NwYWNlKHApOwotICAgIGlmIChsZXhfZml4ZWQocCwgIi0+IiwgMikp IHsKLSAgICAgICAgZmFkZS5zbGlkZSA9IFNCR19GQURFX0FEQVBUOwotICAgICAgICBsZXhfc3Bh Y2UocCk7Ci0gICAgfQotICAgIGlmICghbGV4X2xpbmVfZW5kKHApKQotICAgICAgICByZXR1cm4g QVZFUlJPUl9JTlZBTElEREFUQTsKLSAgICB0c2VxID0gaW5ibG9jayA/Ci0gICAgICAgICAgIGFs bG9jX2FycmF5X2VsZW0oKHZvaWQgKiopJnAtPnNjcy5ibG9ja190c2VxLCBzaXplb2YoKnRzZXEp LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwLT5uYl9ibG9ja190c2VxLCAmcC0+bmJf YmxvY2tfdHNlcV9tYXgpIDoKLSAgICAgICAgICAgYWxsb2NfYXJyYXlfZWxlbSgodm9pZCAqKikm cC0+c2NzLnRzZXEsIHNpemVvZigqdHNlcSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg JnAtPnNjcy5uYl90c2VxLCAmcC0+bmJfdHNlcV9tYXgpOwotICAgIGlmICghdHNlcSkKLSAgICAg ICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKLSAgICB0c2VxLT50cyAgICAgICA9IHRzOwotICAg IHRzZXEtPm5hbWUgICAgID0gbmFtZS5zOwotICAgIHRzZXEtPm5hbWVfbGVuID0gbmFtZS5lIC0g bmFtZS5zOwotICAgIHRzZXEtPmZhZGUgICAgID0gZmFkZTsKLSAgICByZXR1cm4gMTsKLX0KLQot c3RhdGljIGludCBwYXJzZV93YXZlX2RlZihzdHJ1Y3Qgc2JnX3BhcnNlciAqcCwgaW50IHdhdmVu dW0pCi17Ci0gICAgc25wcmludGYocC0+ZXJyX21zZywgc2l6ZW9mKHAtPmVycl9tc2cpLAotICAg ICAgICAgICAgICJ3YXZlZm9ybSBkZWZpbml0aW9ucyBub3QgeWV0IGltcGxlbWVudGVkIik7Ci0g ICAgcmV0dXJuIEFWRVJST1JfUEFUQ0hXRUxDT01FOwotfQotCi1zdGF0aWMgaW50IHBhcnNlX2Js b2NrX2RlZihzdHJ1Y3Qgc2JnX3BhcnNlciAqcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg IHN0cnVjdCBzYmdfc2NyaXB0X2RlZmluaXRpb24gKmRlZikKLXsKLSAgICBpbnQgciwgdHNlcTsK LQotICAgIGxleF9zcGFjZShwKTsKLSAgICBpZiAoIWxleF9saW5lX2VuZChwKSkKLSAgICAgICAg cmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Ci0gICAgdHNlcSA9IHAtPm5iX2Jsb2NrX3RzZXE7 Ci0gICAgd2hpbGUgKDEpIHsKLSAgICAgICAgciA9IHBhcnNlX3RpbWVfc2VxdWVuY2UocCwgMSk7 Ci0gICAgICAgIGlmIChyIDwgMCkKLSAgICAgICAgICAgIHJldHVybiByOwotICAgICAgICBpZiAo IXIpCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgaWYgKCFsZXhfY2hhcihwLCAnfScp KQotICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKLSAgICBsZXhfc3BhY2UocCk7 Ci0gICAgaWYgKCFsZXhfbGluZV9lbmQocCkpCi0gICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFM SUREQVRBOwotICAgIGRlZi0+dHlwZSAgICAgICAgPSAnQic7Ci0gICAgZGVmLT5lbGVtZW50cyAg ICA9IHRzZXE7Ci0gICAgZGVmLT5uYl9lbGVtZW50cyA9IHAtPm5iX2Jsb2NrX3RzZXEgLSB0c2Vx OwotICAgIGlmICghZGVmLT5uYl9lbGVtZW50cykKLSAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5W QUxJRERBVEE7Ci0gICAgcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBpbnQgcGFyc2Vfdm9sdW1lKHN0 cnVjdCBzYmdfcGFyc2VyICpwLCBpbnQgKnZvbCkKLXsKLSAgICBkb3VibGUgdjsKLQotICAgIGlm ICghbGV4X2NoYXIocCwgJy8nKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFsZXhfZG91 YmxlKHAsICZ2KSkKLSAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Ci0gICAgaWYg KHNjYWxlX2RvdWJsZShwLT5sb2csIHYsIDAuMDEsIHZvbCkpCi0gICAgICAgIHJldHVybiBBVkVS Uk9SKEVSQU5HRSk7Ci0gICAgcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBpbnQgcGFyc2Vfc3ludGhf Y2hhbm5lbF9zaW5lKHN0cnVjdCBzYmdfcGFyc2VyICpwLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc3RydWN0IHNiZ19zY3JpcHRfc3ludGggKnN5bnRoKQotewotICAgIGRv dWJsZSBjYXJyaWVyZiwgYmVhdGY7Ci0gICAgaW50IGNhcnJpZXIsIGJlYXQsIHZvbDsKLQotICAg IGlmICghbGV4X2RvdWJsZShwLCAmY2FycmllcmYpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBp ZiAoIWxleF9kb3VibGUocCwgJmJlYXRmKSkKLSAgICAgICAgYmVhdGYgPSAwOwotICAgIEZPUldB UkRfRVJST1IocGFyc2Vfdm9sdW1lKHAsICZ2b2wpKTsKLSAgICBpZiAoc2NhbGVfZG91YmxlKHAt PmxvZywgY2FycmllcmYsIDEsICZjYXJyaWVyKSA8IDAgfHwKLSAgICAgICAgc2NhbGVfZG91Ymxl KHAtPmxvZywgYmVhdGYsIDEsICZiZWF0KSA8IDApCi0gICAgICAgIHJldHVybiBBVkVSUk9SKEVE T00pOwotICAgIHN5bnRoLT50eXBlICAgID0gU0JHX1RZUEVfU0lORTsKLSAgICBzeW50aC0+Y2Fy cmllciA9IGNhcnJpZXI7Ci0gICAgc3ludGgtPmJlYXQgICAgPSBiZWF0OwotICAgIHN5bnRoLT52 b2wgICAgID0gdm9sOwotICAgIHJldHVybiAxOwotfQotCi1zdGF0aWMgaW50IHBhcnNlX3N5bnRo X2NoYW5uZWxfcGluayhzdHJ1Y3Qgc2JnX3BhcnNlciAqcCwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCBzYmdfc2NyaXB0X3N5bnRoICpzeW50aCkKLXsKLSAgICBp bnQgdm9sOwotCi0gICAgaWYgKCFsZXhfZml4ZWQocCwgInBpbmsiLCA0KSkKLSAgICAgICAgcmV0 dXJuIDA7Ci0gICAgRk9SV0FSRF9FUlJPUihwYXJzZV92b2x1bWUocCwgJnZvbCkpOwotICAgIHN5 bnRoLT50eXBlICAgID0gU0JHX1RZUEVfTk9JU0U7Ci0gICAgc3ludGgtPnZvbCAgICAgPSB2b2w7 Ci0gICAgcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBpbnQgcGFyc2Vfc3ludGhfY2hhbm5lbF9iZWxs KHN0cnVjdCBzYmdfcGFyc2VyICpwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3RydWN0IHNiZ19zY3JpcHRfc3ludGggKnN5bnRoKQotewotICAgIGRvdWJsZSBjYXJyaWVy ZjsKLSAgICBpbnQgY2Fycmllciwgdm9sOwotCi0gICAgaWYgKCFsZXhfZml4ZWQocCwgImJlbGwi LCA0KSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFsZXhfZG91YmxlKHAsICZjYXJyaWVy ZikpCi0gICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwotICAgIEZPUldBUkRfRVJS T1IocGFyc2Vfdm9sdW1lKHAsICZ2b2wpKTsKLSAgICBpZiAoc2NhbGVfZG91YmxlKHAtPmxvZywg Y2FycmllcmYsIDEsICZjYXJyaWVyKSA8IDApCi0gICAgICAgIHJldHVybiBBVkVSUk9SKEVET00p OwotICAgIHN5bnRoLT50eXBlICAgID0gU0JHX1RZUEVfQkVMTDsKLSAgICBzeW50aC0+Y2Fycmll ciA9IGNhcnJpZXI7Ci0gICAgc3ludGgtPnZvbCAgICAgPSB2b2w7Ci0gICAgcmV0dXJuIDE7Ci19 Ci0KLXN0YXRpYyBpbnQgcGFyc2Vfc3ludGhfY2hhbm5lbF9taXgoc3RydWN0IHNiZ19wYXJzZXIg KnAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzYmdfc2NyaXB0 X3N5bnRoICpzeW50aCkKLXsKLSAgICBpbnQgdm9sOwotCi0gICAgaWYgKCFsZXhfZml4ZWQocCwg Im1peCIsIDMpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBGT1JXQVJEX0VSUk9SKHBhcnNlX3Zv bHVtZShwLCAmdm9sKSk7Ci0gICAgc3ludGgtPnR5cGUgICAgPSBTQkdfVFlQRV9NSVg7Ci0gICAg c3ludGgtPnZvbCAgICAgPSB2b2w7Ci0gICAgcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBpbnQgcGFy c2Vfc3ludGhfY2hhbm5lbF9zcGluKHN0cnVjdCBzYmdfcGFyc2VyICpwLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNiZ19zY3JpcHRfc3ludGggKnN5bnRoKQot ewotICAgIGRvdWJsZSBjYXJyaWVyZiwgYmVhdGY7Ci0gICAgaW50IGNhcnJpZXIsIGJlYXQsIHZv bDsKLQotICAgIGlmICghbGV4X2ZpeGVkKHAsICJzcGluOiIsIDUpKQotICAgICAgICByZXR1cm4g MDsKLSAgICBpZiAoIWxleF9kb3VibGUocCwgJmNhcnJpZXJmKSkKLSAgICAgICAgcmV0dXJuIEFW RVJST1JfSU5WQUxJRERBVEE7Ci0gICAgaWYgKCFsZXhfZG91YmxlKHAsICZiZWF0ZikpCi0gICAg ICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwotICAgIEZPUldBUkRfRVJST1IocGFyc2Vf dm9sdW1lKHAsICZ2b2wpKTsKLSAgICBpZiAoc2NhbGVfZG91YmxlKHAtPmxvZywgY2FycmllcmYs IDEsICZjYXJyaWVyKSA8IDAgfHwKLSAgICAgICAgc2NhbGVfZG91YmxlKHAtPmxvZywgYmVhdGYs IDEsICZiZWF0KSA8IDApCi0gICAgICAgIHJldHVybiBBVkVSUk9SKEVET00pOwotICAgIHN5bnRo LT50eXBlICAgID0gU0JHX1RZUEVfU1BJTjsKLSAgICBzeW50aC0+Y2FycmllciA9IGNhcnJpZXI7 Ci0gICAgc3ludGgtPmJlYXQgICAgPSBiZWF0OwotICAgIHN5bnRoLT52b2wgICAgID0gdm9sOwot ICAgIHJldHVybiAxOwotfQotCi1zdGF0aWMgaW50IHBhcnNlX3N5bnRoX2NoYW5uZWwoc3RydWN0 IHNiZ19wYXJzZXIgKnApCi17Ci0gICAgaW50IHI7Ci0gICAgc3RydWN0IHNiZ19zY3JpcHRfc3lu dGggKnN5bnRoOwotCi0gICAgc3ludGggPSBhbGxvY19hcnJheV9lbGVtKCh2b2lkICoqKSZwLT5z Y3Muc3ludGgsIHNpemVvZigqc3ludGgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm cC0+c2NzLm5iX3N5bnRoLCAmcC0+bmJfc3ludGhfbWF4KTsKLSAgICBpZiAoIXN5bnRoKQotICAg ICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwotICAgIHIgPSBsZXhfY2hhcihwLCAnLScpOwot ICAgIGlmICghcikKLSAgICAgICAgciA9IHBhcnNlX3N5bnRoX2NoYW5uZWxfcGluayhwLCBzeW50 aCk7Ci0gICAgaWYgKCFyKQotICAgICAgICByID0gcGFyc2Vfc3ludGhfY2hhbm5lbF9iZWxsKHAs IHN5bnRoKTsKLSAgICBpZiAoIXIpCi0gICAgICAgIHIgPSBwYXJzZV9zeW50aF9jaGFubmVsX21p eChwLCBzeW50aCk7Ci0gICAgaWYgKCFyKQotICAgICAgICByID0gcGFyc2Vfc3ludGhfY2hhbm5l bF9zcGluKHAsIHN5bnRoKTsKLSAgICAvKiBVbmltcGxlbWVudGVkOiB3YXZlJWQ6JWYlZi92b2wg KGNhcnJpZXIsIGJlYXQpICovCi0gICAgaWYgKCFyKQotICAgICAgICByID0gcGFyc2Vfc3ludGhf Y2hhbm5lbF9zaW5lKHAsIHN5bnRoKTsKLSAgICBpZiAociA8PSAwKQotICAgICAgICBwLT5zY3Mu bmJfc3ludGgtLTsKLSAgICByZXR1cm4gcjsKLX0KLQotc3RhdGljIGludCBwYXJzZV9zeW50aF9k ZWYoc3RydWN0IHNiZ19wYXJzZXIgKnAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3Qgc2JnX3NjcmlwdF9kZWZpbml0aW9uICpkZWYpCi17Ci0gICAgaW50IHIsIHN5bnRoOwotCi0g ICAgc3ludGggPSBwLT5zY3MubmJfc3ludGg7Ci0gICAgd2hpbGUgKDEpIHsKLSAgICAgICAgciA9 IHBhcnNlX3N5bnRoX2NoYW5uZWwocCk7Ci0gICAgICAgIGlmIChyIDwgMCkKLSAgICAgICAgICAg IHJldHVybiByOwotICAgICAgICBpZiAoIXIgfHwgIWxleF9zcGFjZShwKSkKLSAgICAgICAgICAg IGJyZWFrOwotICAgIH0KLSAgICBsZXhfc3BhY2UocCk7Ci0gICAgaWYgKHN5bnRoID09IHAtPnNj cy5uYl9zeW50aCkKLSAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Ci0gICAgaWYg KCFsZXhfbGluZV9lbmQocCkpCi0gICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwot ICAgIGRlZi0+dHlwZSAgICAgICAgPSAnUyc7Ci0gICAgZGVmLT5lbGVtZW50cyAgICA9IHN5bnRo OwotICAgIGRlZi0+bmJfZWxlbWVudHMgPSBwLT5zY3MubmJfc3ludGggLSBzeW50aDsKLSAgICBy ZXR1cm4gMTsKLX0KLQotc3RhdGljIGludCBwYXJzZV9uYW1lZF9kZWYoc3RydWN0IHNiZ19wYXJz ZXIgKnApCi17Ci0gICAgY2hhciAqY3Vyc29yX3NhdmUgPSBwLT5jdXJzb3I7Ci0gICAgc3RydWN0 IHNiZ19zdHJpbmcgbmFtZTsKLSAgICBzdHJ1Y3Qgc2JnX3NjcmlwdF9kZWZpbml0aW9uICpkZWY7 Ci0KLSAgICBpZiAoIWxleF9uYW1lKHAsICZuYW1lKSB8fCAhbGV4X2NoYXIocCwgJzonKSB8fCAh bGV4X3NwYWNlKHApKSB7Ci0gICAgICAgIHAtPmN1cnNvciA9IGN1cnNvcl9zYXZlOwotICAgICAg ICByZXR1cm4gMDsKLSAgICB9Ci0gICAgaWYgKG5hbWUuZSAtIG5hbWUucyA9PSA2ICYmICFtZW1j bXAobmFtZS5zLCAid2F2ZSIsIDQpICYmCi0gICAgICAgIG5hbWUuc1s0XSA+PSAnMCcgJiYgbmFt ZS5zWzRdIDw9ICc5JyAmJgotICAgICAgICBuYW1lLnNbNV0gPj0gJzAnICYmIG5hbWUuc1s1XSA8 PSAnOScpIHsKLSAgICAgICAgaW50IHdhdmVudW0gPSAobmFtZS5zWzRdIC0gJzAnKSAqIDEwICsg KG5hbWUuc1s1XSAtICcwJyk7Ci0gICAgICAgIHJldHVybiBwYXJzZV93YXZlX2RlZihwLCB3YXZl bnVtKTsKLSAgICB9Ci0gICAgZGVmID0gYWxsb2NfYXJyYXlfZWxlbSgodm9pZCAqKikmcC0+c2Nz LmRlZiwgc2l6ZW9mKCpkZWYpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgJnAtPnNjcy5u Yl9kZWYsICZwLT5uYl9kZWZfbWF4KTsKLSAgICBpZiAoIWRlZikKLSAgICAgICAgcmV0dXJuIEFW RVJST1IoRU5PTUVNKTsKLSAgICBkZWYtPm5hbWUgICAgID0gbmFtZS5zOwotICAgIGRlZi0+bmFt ZV9sZW4gPSBuYW1lLmUgLSBuYW1lLnM7Ci0gICAgaWYgKGxleF9jaGFyKHAsICd7JykpCi0gICAg ICAgIHJldHVybiBwYXJzZV9ibG9ja19kZWYocCwgZGVmKTsKLSAgICByZXR1cm4gcGFyc2Vfc3lu dGhfZGVmKHAsIGRlZik7Ci19Ci0KLXN0YXRpYyB2b2lkIGZyZWVfc2NyaXB0KHN0cnVjdCBzYmdf c2NyaXB0ICpzKQotewotICAgIGF2X2ZyZWVwKCZzLT5kZWYpOwotICAgIGF2X2ZyZWVwKCZzLT5z eW50aCk7Ci0gICAgYXZfZnJlZXAoJnMtPnRzZXEpOwotICAgIGF2X2ZyZWVwKCZzLT5ibG9ja190 c2VxKTsKLSAgICBhdl9mcmVlcCgmcy0+ZXZlbnRzKTsKLSAgICBhdl9mcmVlcCgmcy0+b3B0X21p eCk7Ci19Ci0KLXN0YXRpYyBpbnQgcGFyc2Vfc2NyaXB0KHZvaWQgKmxvZywgY2hhciAqc2NyaXB0 LCBpbnQgc2NyaXB0X2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2Jn X3NjcmlwdCAqcnNjcmlwdCkKLXsKLSAgICBzdHJ1Y3Qgc2JnX3BhcnNlciBzcCA9IHsKLSAgICAg ICAgLmxvZyAgICAgPSBsb2csCi0gICAgICAgIC5zY3JpcHQgID0gc2NyaXB0LAotICAgICAgICAu ZW5kICAgICA9IHNjcmlwdCArIHNjcmlwdF9sZW4sCi0gICAgICAgIC5jdXJzb3IgID0gc2NyaXB0 LAotICAgICAgICAubGluZV9ubyA9IDEsCi0gICAgICAgIC5lcnJfbXNnID0gIiIsCi0gICAgICAg IC5zY3MgPSB7Ci0gICAgICAgICAgICAvKiBkZWZhdWx0IHZhbHVlcyAqLwotICAgICAgICAgICAg LnN0YXJ0X3RzICAgICAgPSBBVl9OT1BUU19WQUxVRSwKLSAgICAgICAgICAgIC5zYW1wbGVfcmF0 ZSAgID0gNDQxMDAsCi0gICAgICAgICAgICAub3B0X2ZhZGVfdGltZSA9IDYwICogQVZfVElNRV9C QVNFLAotICAgICAgICB9LAotICAgIH07Ci0gICAgaW50IHI7Ci0KLSAgICBsZXhfc3BhY2UoJnNw KTsKLSAgICB3aGlsZSAoc3AuY3Vyc29yIDwgc3AuZW5kKSB7Ci0gICAgICAgIHIgPSBwYXJzZV9v cHRpb25zKCZzcCk7Ci0gICAgICAgIGlmIChyIDwgMCkKLSAgICAgICAgICAgIGdvdG8gZmFpbDsK LSAgICAgICAgaWYgKCFyICYmICFsZXhfbGluZV9lbmQoJnNwKSkKLSAgICAgICAgICAgIGJyZWFr OwotICAgIH0KLSAgICB3aGlsZSAoc3AuY3Vyc29yIDwgc3AuZW5kKSB7Ci0gICAgICAgIHIgPSBw YXJzZV9uYW1lZF9kZWYoJnNwKTsKLSAgICAgICAgaWYgKCFyKQotICAgICAgICAgICAgciA9IHBh cnNlX3RpbWVfc2VxdWVuY2UoJnNwLCAwKTsKLSAgICAgICAgaWYgKCFyKQotICAgICAgICAgICAg ciA9IGxleF9saW5lX2VuZCgmc3ApID8gMSA6IEFWRVJST1JfSU5WQUxJRERBVEE7Ci0gICAgICAg IGlmIChyIDwgMCkKLSAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICB9Ci0gICAgKnJzY3JpcHQg PSBzcC5zY3M7Ci0gICAgcmV0dXJuIDE7Ci1mYWlsOgotICAgIGZyZWVfc2NyaXB0KCZzcC5zY3Mp OwotICAgIGlmICghKnNwLmVycl9tc2cpCi0gICAgICAgIGlmIChyID09IEFWRVJST1JfSU5WQUxJ RERBVEEpCi0gICAgICAgICAgICBzbnByaW50ZihzcC5lcnJfbXNnLCBzaXplb2Yoc3AuZXJyX21z ZyksICJzeW50YXggZXJyb3IiKTsKLSAgICBpZiAobG9nICYmICpzcC5lcnJfbXNnKSB7Ci0gICAg ICAgIGNvbnN0IGNoYXIgKmN0eCA9IHNwLmN1cnNvcjsKLSAgICAgICAgY29uc3QgY2hhciAqZWN0 eCA9IGF2X3hfaWZfbnVsbChtZW1jaHIoY3R4LCAnXG4nLCBzcC5lbmQgLSBzcC5jdXJzb3IpLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwLmVuZCk7Ci0gICAgICAg IGludCBsY3R4ID0gZWN0eCAtIGN0eDsKLSAgICAgICAgY29uc3QgY2hhciAqcXVvdGUgPSAiXCIi OwotICAgICAgICBpZiAobGN0eCA+IDAgJiYgY3R4W2xjdHggLSAxXSA9PSAnXHInKQotICAgICAg ICAgICAgbGN0eC0tOwotICAgICAgICBpZiAobGN0eCA9PSAwKSB7Ci0gICAgICAgICAgICBjdHgg PSAidGhlIGVuZCBvZiBsaW5lIjsKLSAgICAgICAgICAgIGxjdHggPSBzdHJsZW4oY3R4KTsKLSAg ICAgICAgICAgIHF1b3RlID0gIiI7Ci0gICAgICAgIH0KLSAgICAgICAgYXZfbG9nKGxvZywgQVZf TE9HX0VSUk9SLCAiRXJyb3IgbGluZSAlZDogJXMgbmVhciAlcyUuKnMlcy5cbiIsCi0gICAgICAg ICAgICAgICBzcC5saW5lX25vLCBzcC5lcnJfbXNnLCBxdW90ZSwgbGN0eCwgY3R4LCBxdW90ZSk7 Ci0gICAgfQotICAgIHJldHVybiByOwotfQotCi1zdGF0aWMgaW50IHJlYWRfd2hvbGVfZmlsZShB VklPQ29udGV4dCAqaW8sIGludCBtYXhfc2l6ZSwgY2hhciAqKnJidWYpCi17Ci0gICAgY2hhciAq YnVmID0gTlVMTDsKLSAgICBpbnQgc2l6ZSA9IDAsIGJ1ZnNpemUgPSAwLCByOwotCi0gICAgd2hp bGUgKDEpIHsKLSAgICAgICAgaWYgKGJ1ZnNpemUgLSBzaXplIDwgMTAyNCkgewotICAgICAgICAg ICAgYnVmc2l6ZSA9IEZGTUlOKEZGTUFYKDIgKiBidWZzaXplLCA4MTkyKSwgbWF4X3NpemUpOwot ICAgICAgICAgICAgaWYgKGJ1ZnNpemUgLSBzaXplIDwgMikgewotICAgICAgICAgICAgICAgIHNp emUgPSBBVkVSUk9SKEVGQklHKTsKLSAgICAgICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAg ICAgICB9Ci0gICAgICAgICAgICBidWYgPSBhdl9yZWFsbG9jX2YoYnVmLCBidWZzaXplLCAxKTsK LSAgICAgICAgICAgIGlmICghYnVmKSB7Ci0gICAgICAgICAgICAgICAgc2l6ZSA9IEFWRVJST1Io RU5PTUVNKTsKLSAgICAgICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgICAgICB9Ci0gICAg ICAgIH0KLSAgICAgICAgciA9IGF2aW9fcmVhZChpbywgYnVmLCBidWZzaXplIC0gc2l6ZSAtIDEp OwotICAgICAgICBpZiAociA9PSBBVkVSUk9SX0VPRikKLSAgICAgICAgICAgIGJyZWFrOwotICAg ICAgICBpZiAociA8IDApCi0gICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgIHNpemUgKz0g cjsKLSAgICB9Ci0gICAgYnVmW3NpemVdID0gMDsKLSAgICAqcmJ1ZiA9IGJ1ZjsKLSAgICByZXR1 cm4gc2l6ZTsKLWZhaWw6Ci0gICAgYXZfZnJlZShidWYpOwotICAgIHJldHVybiBzaXplOwotfQot Ci1zdGF0aWMgaW50IGV4cGFuZF90aW1lc3RhbXBzKHZvaWQgKmxvZywgc3RydWN0IHNiZ19zY3Jp cHQgKnMpCi17Ci0gICAgaW50IGksIG5iX3JlbCA9IDA7Ci0gICAgaW50NjRfdCBub3csIGN1cl90 cywgZGVsdGEgPSAwOwotCi0gICAgZm9yIChpID0gMDsgaSA8IHMtPm5iX3RzZXE7IGkrKykKLSAg ICAgICAgbmJfcmVsICs9IHMtPnRzZXFbaV0udHMudHlwZSA9PSAnTic7Ci0gICAgaWYgKG5iX3Jl bCA9PSBzLT5uYl90c2VxKSB7Ci0gICAgICAgIC8qIEFsbCB0cyBhcmUgcmVsYXRpdmUgdG8gTk9X OiBjb25zaWRlciBOT1cgPSAwICovCi0gICAgICAgIG5vdyA9IDA7Ci0gICAgICAgIGlmIChzLT5z dGFydF90cyAhPSBBVl9OT1BUU19WQUxVRSkKLSAgICAgICAgICAgIGF2X2xvZyhsb2csIEFWX0xP R19XQVJOSU5HLAotICAgICAgICAgICAgICAgICAgICJTdGFydCB0aW1lIGlnbm9yZWQgaW4gYSBw dXJlbHkgcmVsYXRpdmUgc2NyaXB0LlxuIik7Ci0gICAgfSBlbHNlIGlmIChuYl9yZWwgPT0gMCAm JiBzLT5zdGFydF90cyAhPSBBVl9OT1BUU19WQUxVRSB8fAotICAgICAgICAgICAgICAgcy0+b3B0 X3N0YXJ0X2F0X2ZpcnN0KSB7Ci0gICAgICAgIC8qIEFsbCB0cyBhcmUgYWJzb2x1dGUgYW5kIHN0 YXJ0IHRpbWUgaXMgc3BlY2lmaWVkICovCi0gICAgICAgIGlmIChzLT5zdGFydF90cyA9PSBBVl9O T1BUU19WQUxVRSkKLSAgICAgICAgICAgIHMtPnN0YXJ0X3RzID0gcy0+dHNlcVswXS50cy50Owot ICAgICAgICBub3cgPSBzLT5zdGFydF90czsKLSAgICB9IGVsc2UgewotICAgICAgICAvKiBNaXhl ZCByZWxhdGl2ZS9hYnNvbHV0ZSB0czogZXhwYW5kICovCi0gICAgICAgIHRpbWVfdCBub3cwOwot ICAgICAgICBzdHJ1Y3QgdG0gKnRtLCB0bXBidWY7Ci0KLSAgICAgICAgYXZfbG9nKGxvZywgQVZf TE9HX1dBUk5JTkcsCi0gICAgICAgICAgICAgICAiU2NyaXB0cyB3aXRoIG1peGVkIGFic29sdXRl IGFuZCByZWxhdGl2ZSB0aW1lc3RhbXBzIGNhbiBnaXZlICIKLSAgICAgICAgICAgICAgICJ1bmV4 cGVjdGVkIHJlc3VsdHMgKHBhdXNlLCBzZWVraW5nLCB0aW1lIHpvbmUgY2hhbmdlKS5cbiIpOwot I3VuZGVmIHRpbWUKLSAgICAgICAgdGltZSgmbm93MCk7Ci0gICAgICAgIHRtID0gbG9jYWx0aW1l X3IoJm5vdzAsICZ0bXBidWYpOwotICAgICAgICBub3cgPSB0bSA/IHRtLT50bV9ob3VyICogMzYw MCArIHRtLT50bV9taW4gKiA2MCArIHRtLT50bV9zZWMgOgotICAgICAgICAgICAgICAgICAgIG5v dzAgJSBEQVk7Ci0gICAgICAgIGF2X2xvZyhsb2csIEFWX0xPR19JTkZPLCAiVXNpbmcgJTAyZDol MDJkOiUwMmQgYXMgTk9XLlxuIiwKLSAgICAgICAgICAgICAgIChpbnQpKG5vdyAvIDM2MDApLCAo aW50KShub3cgLyA2MCkgJSA2MCwgKGludClub3cgJSA2MCk7Ci0gICAgICAgIG5vdyAqPSBBVl9U SU1FX0JBU0U7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBzLT5uYl90c2VxOyBpKyspIHsKLSAg ICAgICAgICAgIGlmIChzLT50c2VxW2ldLnRzLnR5cGUgPT0gJ04nKSB7Ci0gICAgICAgICAgICAg ICAgcy0+dHNlcVtpXS50cy50ICs9IG5vdzsKLSAgICAgICAgICAgICAgICBzLT50c2VxW2ldLnRz LnR5cGUgPSAnVCc7IC8qIG5vdCBuZWNlc3NhcnkgKi8KLSAgICAgICAgICAgIH0KLSAgICAgICAg fQotICAgIH0KLSAgICBpZiAocy0+c3RhcnRfdHMgPT0gQVZfTk9QVFNfVkFMVUUpCi0gICAgICAg IHMtPnN0YXJ0X3RzID0gKHMtPm9wdF9zdGFydF9hdF9maXJzdCAmJiBzLT50c2VxKSA/IHMtPnRz ZXFbMF0udHMudCA6IG5vdzsKLSAgICBpZiAocy0+c3RhcnRfdHMgPiBJTlQ2NF9NQVggLSBzLT5v cHRfZHVyYXRpb24pCi0gICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwotCi0gICAg cy0+ZW5kX3RzID0gcy0+b3B0X2R1cmF0aW9uID8gcy0+c3RhcnRfdHMgKyBzLT5vcHRfZHVyYXRp b24gOgotICAgICAgICAgICAgICAgIEFWX05PUFRTX1ZBTFVFOyAvKiBtYXkgYmUgb3ZlcnJpZGRl biBsYXRlciBieSAtRSBvcHRpb24gKi8KLSAgICBjdXJfdHMgPSBub3c7Ci0gICAgZm9yIChpID0g MDsgaSA8IHMtPm5iX3RzZXE7IGkrKykgewotICAgICAgICBpZiAoYXZfc2F0X2FkZDY0KHMtPnRz ZXFbaV0udHMudCwgZGVsdGEpICE9IHMtPnRzZXFbaV0udHMudCArICh1aW50NjRfdClkZWx0YSkK LSAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwotICAgICAgICBpZiAocy0+ dHNlcVtpXS50cy50ICsgZGVsdGEgPCBjdXJfdHMpCi0gICAgICAgICAgICBkZWx0YSArPSBEQVlf VFM7Ci0gICAgICAgIGN1cl90cyA9IHMtPnRzZXFbaV0udHMudCArPSBkZWx0YTsKLSAgICB9Ci0g ICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZXhwYW5kX3RzZXEodm9pZCAqbG9nLCBzdHJ1 Y3Qgc2JnX3NjcmlwdCAqcywgaW50ICpuYl9ldl9tYXgsCi0gICAgICAgICAgICAgICAgICAgICAg IGludDY0X3QgdDAsIHN0cnVjdCBzYmdfc2NyaXB0X3RzZXEgKnRzZXEpCi17Ci0gICAgaW50IGks IHI7Ci0gICAgc3RydWN0IHNiZ19zY3JpcHRfZGVmaW5pdGlvbiAqZGVmOwotICAgIHN0cnVjdCBz Ymdfc2NyaXB0X3RzZXEgKmJlOwotICAgIHN0cnVjdCBzYmdfc2NyaXB0X2V2ZW50ICpldjsKLQot ICAgIGlmICh0c2VxLT5sb2NrKyspIHsKLSAgICAgICAgYXZfbG9nKGxvZywgQVZfTE9HX0VSUk9S LCAiUmVjdXJzaW9uIGxvb3Agb24gXCIlLipzXCJcbiIsCi0gICAgICAgICAgICAgICB0c2VxLT5u YW1lX2xlbiwgdHNlcS0+bmFtZSk7Ci0gICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Ci0g ICAgfQotICAgIGlmICh0MCArICh1aW50NjRfdCl0c2VxLT50cy50ICE9IGF2X3NhdF9hZGQ2NCh0 MCwgdHNlcS0+dHMudCkpCi0gICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Ci0KLSAgICB0 MCArPSB0c2VxLT50cy50OwotICAgIGZvciAoaSA9IDA7IGkgPCBzLT5uYl9kZWY7IGkrKykgewot ICAgICAgICBpZiAocy0+ZGVmW2ldLm5hbWVfbGVuID09IHRzZXEtPm5hbWVfbGVuICYmCi0gICAg ICAgICAgICAhbWVtY21wKHMtPmRlZltpXS5uYW1lLCB0c2VxLT5uYW1lLCB0c2VxLT5uYW1lX2xl bikpCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgaWYgKGkgPj0gcy0+bmJfZGVmKSB7 Ci0gICAgICAgIGF2X2xvZyhsb2csIEFWX0xPR19FUlJPUiwgIlRvbmUtc2V0IFwiJS4qc1wiIG5v dCBkZWZpbmVkXG4iLAotICAgICAgICAgICAgICAgdHNlcS0+bmFtZV9sZW4sIHRzZXEtPm5hbWUp OwotICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwotICAgIH0KLSAgICBkZWYgPSAmcy0+ ZGVmW2ldOwotICAgIGlmIChkZWYtPnR5cGUgPT0gJ0InKSB7Ci0gICAgICAgIGJlID0gcy0+Ymxv Y2tfdHNlcSArIGRlZi0+ZWxlbWVudHM7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBkZWYtPm5i X2VsZW1lbnRzOyBpKyspIHsKLSAgICAgICAgICAgIHIgPSBleHBhbmRfdHNlcShsb2csIHMsIG5i X2V2X21heCwgdDAsICZiZVtpXSk7Ci0gICAgICAgICAgICBpZiAociA8IDApCi0gICAgICAgICAg ICAgICAgcmV0dXJuIHI7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBldiA9IGFs bG9jX2FycmF5X2VsZW0oKHZvaWQgKiopJnMtPmV2ZW50cywgc2l6ZW9mKCpldiksCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmcy0+bmJfZXZlbnRzLCBuYl9ldl9tYXgpOwotICAgICAg ICBpZiAoIWV2KQotICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKLSAgICAgICAg ZXYtPnRzICAgICAgICAgID0gdHNlcS0+dHMudDsKLSAgICAgICAgZXYtPmVsZW1lbnRzICAgID0g ZGVmLT5lbGVtZW50czsKLSAgICAgICAgZXYtPm5iX2VsZW1lbnRzID0gZGVmLT5uYl9lbGVtZW50 czsKLSAgICAgICAgZXYtPmZhZGUgICAgICAgID0gdHNlcS0+ZmFkZTsKLSAgICB9Ci0gICAgdHNl cS0+bG9jay0tOwotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGV4cGFuZF9zY3JpcHQo dm9pZCAqbG9nLCBzdHJ1Y3Qgc2JnX3NjcmlwdCAqcykKLXsKLSAgICBpbnQgaSwgciwgbmJfZXZl bnRzX21heCA9IDA7Ci0KLSAgICByID0gZXhwYW5kX3RpbWVzdGFtcHMobG9nLCBzKTsKLSAgICBp ZiAociA8IDApCi0gICAgICAgIHJldHVybiByOwotICAgIGZvciAoaSA9IDA7IGkgPCBzLT5uYl90 c2VxOyBpKyspIHsKLSAgICAgICAgciA9IGV4cGFuZF90c2VxKGxvZywgcywgJm5iX2V2ZW50c19t YXgsIDAsICZzLT50c2VxW2ldKTsKLSAgICAgICAgaWYgKHIgPCAwKQotICAgICAgICAgICAgcmV0 dXJuIHI7Ci0gICAgfQotICAgIGlmICghcy0+bmJfZXZlbnRzKSB7Ci0gICAgICAgIGF2X2xvZyhs b2csIEFWX0xPR19FUlJPUiwgIk5vIGV2ZW50cyBpbiBzY3JpcHRcbiIpOwotICAgICAgICByZXR1 cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKLSAgICB9Ci0gICAgaWYgKHMtPm9wdF9lbmRfYXRfbGFz dCkKLSAgICAgICAgcy0+ZW5kX3RzID0gcy0+ZXZlbnRzW3MtPm5iX2V2ZW50cyAtIDFdLnRzOwot ICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGFkZF9pbnRlcnZhbChzdHJ1Y3Qgd3NfaW50 ZXJ2YWxzICppbnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gd3NfaW50ZXJ2YWxf dHlwZSB0eXBlLCB1aW50MzJfdCBjaGFubmVscywgaW50IHJlZiwKLSAgICAgICAgICAgICAgICAg ICAgICAgIGludDY0X3QgdHMxLCBpbnQzMl90IGYxLCBpbnQzMl90IGExLAotICAgICAgICAgICAg ICAgICAgICAgICAgaW50NjRfdCB0czIsIGludDMyX3QgZjIsIGludDMyX3QgYTIpCi17Ci0gICAg c3RydWN0IHdzX2ludGVydmFsICppLCAqcmk7Ci0KLSAgICBpZiAocmVmID49IDApIHsKLSAgICAg ICAgcmkgPSAmaW50ZXItPmludGVyW3JlZl07Ci0gICAgICAgIC8qIHJlZiBhbmQgbmV3IGludGVy dmFscyBhcmUgY29uc3RhbnQsIGlkZW50aWNhbCBhbmQgYWRqYWNlbnQgKi8KLSAgICAgICAgaWYg KHJpLT50eXBlID09IHR5cGUgJiYgcmktPmNoYW5uZWxzID09IGNoYW5uZWxzICYmCi0gICAgICAg ICAgICByaS0+ZjEgPT0gcmktPmYyICYmIHJpLT5mMiA9PSBmMSAmJiBmMSA9PSBmMiAmJgotICAg ICAgICAgICAgcmktPmExID09IHJpLT5hMiAmJiByaS0+YTIgPT0gYTEgJiYgYTEgPT0gYTIgJiYK LSAgICAgICAgICAgIHJpLT50czIgPT0gdHMxKSB7Ci0gICAgICAgICAgICByaS0+dHMyID0gdHMy OwotICAgICAgICAgICAgcmV0dXJuIHJlZjsKLSAgICAgICAgfQotICAgIH0KLSAgICBpID0gYWxs b2NfYXJyYXlfZWxlbSgodm9pZCAqKikmaW50ZXItPmludGVyLCBzaXplb2YoKmkpLAotICAgICAg ICAgICAgICAgICAgICAgICAgICZpbnRlci0+bmJfaW50ZXIsICZpbnRlci0+bWF4X2ludGVyKTsK LSAgICBpZiAoIWkpCi0gICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Ci0gICAgaS0+dHMx ICAgICAgPSB0czE7Ci0gICAgaS0+dHMyICAgICAgPSB0czI7Ci0gICAgaS0+dHlwZSAgICAgPSB0 eXBlOwotICAgIGktPmNoYW5uZWxzID0gY2hhbm5lbHM7Ci0gICAgaS0+ZjEgICAgICAgPSBmMTsK LSAgICBpLT5mMiAgICAgICA9IGYyOwotICAgIGktPmExICAgICAgID0gYTE7Ci0gICAgaS0+YTIg ICAgICAgPSBhMjsKLSAgICBpLT5waGkgICAgICA9IHJlZiA+PSAwID8gcmVmIHwgMHg4MDAwMDAw MCA6IDA7Ci0gICAgcmV0dXJuIGkgLSBpbnRlci0+aW50ZXI7Ci19Ci0KLXN0YXRpYyBpbnQgYWRk X2JlbGwoc3RydWN0IHdzX2ludGVydmFscyAqaW50ZXIsIHN0cnVjdCBzYmdfc2NyaXB0ICpzLAot ICAgICAgICAgICAgICAgICAgICBpbnQ2NF90IHRzMSwgaW50NjRfdCB0czIsIGludDMyX3QgZiwg aW50MzJfdCBhKQotewotICAgIC8qIFNCYUdlbiB1c2VzIGFuIGV4cG9uZW50aWFsIGRlY3JlYXNl IGV2ZXJ5IDUwbXMuCi0gICAgICAgV2UgYXBwcm94aW1hdGUgaXQgd2l0aCBwaWVjZXdpc2UgYWZm aW5lIHNlZ21lbnRzLiAqLwotICAgIGludDMyX3QgY3BvaW50c1tdWzJdID0gewotICAgICAgICB7 ICAyLCBhIH0sCi0gICAgICAgIHsgIDQsIGEgLSBhIC8gNCB9LAotICAgICAgICB7ICA4LCBhIC8g MiB9LAotICAgICAgICB7IDE2LCBhIC8gNCB9LAotICAgICAgICB7IDI1LCBhIC8gMTAgfSwKLSAg ICAgICAgeyA1MCwgYSAvIDgwIH0sCi0gICAgICAgIHsgNzUsIDAgfSwKLSAgICB9OwotICAgIGlu dCBpLCByOwotICAgIGludDY0X3QgZHQgPSBzLT5zYW1wbGVfcmF0ZSAvIDIwLCB0czMgPSB0czEs IHRzNDsKLSAgICBmb3IgKGkgPSAwOyBpIDwgRkZfQVJSQVlfRUxFTVMoY3BvaW50cyk7IGkrKykg ewotICAgICAgICB0czQgPSBGRk1JTih0czIsIHRzMSArIGNwb2ludHNbaV1bMF0gKiBkdCk7Ci0g ICAgICAgIHIgPSBhZGRfaW50ZXJ2YWwoaW50ZXIsIFdTX1NJTkUsIDMsIC0xLAotICAgICAgICAg ICAgICAgICAgICAgICAgIHRzMywgZiwgYSwgdHM0LCBmLCBjcG9pbnRzW2ldWzFdKTsKLSAgICAg ICAgaWYgKHIgPCAwKQotICAgICAgICAgICAgcmV0dXJuIHI7Ci0gICAgICAgIHRzMyA9IHRzNDsK LSAgICAgICAgYSA9IGNwb2ludHNbaV1bMV07Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCi1z dGF0aWMgaW50IGdlbmVyYXRlX2ludGVydmFsKHZvaWQgKmxvZywgc3RydWN0IHNiZ19zY3JpcHQg KnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB3c19pbnRlcnZhbHMgKmlu dGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQ2NF90IHRzMSwgaW50NjRfdCB0 czIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzYmdfc2NyaXB0X3N5bnRo ICpzMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNiZ19zY3JpcHRfc3lu dGggKnMyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdHJhbnNpdGlvbikKLXsK LSAgICBpbnQgcjsKLQotICAgIGlmICh0czIgPD0gdHMxIHx8IChzMS0+dm9sID09IDAgJiYgczIt PnZvbCA9PSAwKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgc3dpdGNoIChzMS0+dHlwZSkgewot ICAgICAgICBjYXNlIFNCR19UWVBFX05PTkU6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg Y2FzZSBTQkdfVFlQRV9TSU5FOgotICAgICAgICAgICAgaWYgKHMxLT5iZWF0ID09IDAgJiYgczIt PmJlYXQgPT0gMCkgewotICAgICAgICAgICAgICAgIHIgPSBhZGRfaW50ZXJ2YWwoaW50ZXIsIFdT X1NJTkUsIDMsIHMxLT5yZWYubCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRz MSwgczEtPmNhcnJpZXIsIHMxLT52b2wsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB0czIsIHMyLT5jYXJyaWVyLCBzMi0+dm9sKTsKLSAgICAgICAgICAgICAgICBpZiAociA8IDAp Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiByOwotICAgICAgICAgICAgICAgIHMyLT5yZWYu bCA9IHMyLT5yZWYuciA9IHI7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg IHIgPSBhZGRfaW50ZXJ2YWwoaW50ZXIsIFdTX1NJTkUsIDEsIHMxLT5yZWYubCwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHRzMSwgczEtPmNhcnJpZXIgKyBzMS0+YmVhdCAvIDIs IHMxLT52b2wsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0czIsIHMyLT5jYXJy aWVyICsgczItPmJlYXQgLyAyLCBzMi0+dm9sKTsKLSAgICAgICAgICAgICAgICBpZiAociA8IDAp Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiByOwotICAgICAgICAgICAgICAgIHMyLT5yZWYu bCA9IHI7Ci0gICAgICAgICAgICAgICAgciA9IGFkZF9pbnRlcnZhbChpbnRlciwgV1NfU0lORSwg MiwgczEtPnJlZi5yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHMxLCBzMS0+ Y2FycmllciAtIHMxLT5iZWF0IC8gMiwgczEtPnZvbCwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRzMiwgczItPmNhcnJpZXIgLSBzMi0+YmVhdCAvIDIsIHMyLT52b2wpOwotICAg ICAgICAgICAgICAgIGlmIChyIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHI7Ci0g ICAgICAgICAgICAgICAgczItPnJlZi5yID0gcjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg IGJyZWFrOwotCi0gICAgICAgIGNhc2UgU0JHX1RZUEVfQkVMTDoKLSAgICAgICAgICAgIGlmICh0 cmFuc2l0aW9uID09IDIpIHsKLSAgICAgICAgICAgICAgICByID0gYWRkX2JlbGwoaW50ZXIsIHMs IHRzMSwgdHMyLCBzMS0+Y2FycmllciwgczItPnZvbCk7Ci0gICAgICAgICAgICAgICAgaWYgKHIg PCAwKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcjsKLSAgICAgICAgICAgIH0KLSAgICAg ICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU0JHX1RZUEVfU1BJTjoKLSAgICAgICAgICAg IGF2X2xvZyhsb2csIEFWX0xPR19XQVJOSU5HLCAiU3Bpbm5pbmcgbm9pc2Ugbm90IGltcGxlbWVu dGVkLCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVzaW5nIHBp bmsgbm9pc2UgaW5zdGVhZC5cbiIpOwotICAgICAgICAgICAgLyogZmFsbCB0aHJvdWdoICovCi0g ICAgICAgIGNhc2UgU0JHX1RZUEVfTk9JU0U6Ci0gICAgICAgICAgICAvKiBTQmFHZW4ncyBwaW5r IG5vaXNlIGdlbmVyYXRvciB1c2VzOgotICAgICAgICAgICAgICAgLSAxIGJhbmQgb2Ygd2hpdGUg bm9pc2UsIG1lYW4gc3F1YXJlOiAxLzM7Ci0gICAgICAgICAgICAgICAtIDkgYmFuZHMgb2Ygc3Vi c2FtcGxlZCB3aGl0ZSBub2lzZSB3aXRoIGxpbmVhcgotICAgICAgICAgICAgICAgICBpbnRlcnBv bGF0aW9uLCBtZWFuIHNxdWFyZTogMi8zIGVhY2g7Ci0gICAgICAgICAgICAgICB3aXRoIDEvMTAg d2VpZ2h0IGVhY2g6IHRoZSB0b3RhbCBtZWFuIHNxdWFyZSBpcyA3LzMwMC4KLSAgICAgICAgICAg ICAgIE91ciBwaW5rIG5vaXNlIGdlbmVyYXRvciB1c2VzIDggYmFuZHMgb2Ygd2hpdGUgbm9pc2Ug d2l0aAotICAgICAgICAgICAgICAgcmVjdGFuZ3VsYXIgc3Vic2FtcGxpbmc6IHRoZSB0b3RhbCBt ZWFuIHNxdWFyZSBpcyAxLzI0LgotICAgICAgICAgICAgICAgVGhlcmVmb3JlLCB0byBtYXRjaCBT QmFHZW4ncyB2b2x1bWUsIHdlIG11c3QgbXVsdGlwbHkgdm9sIGJ5Ci0gICAgICAgICAgICAgICBz cXJ0KCg3LzMwMCkgLyAoMS8yNCkpID0gc3FydCgxNC8yNSkgPX4gMC43NDgKLSAgICAgICAgICAg ICAqLwotICAgICAgICAgICAgciA9IGFkZF9pbnRlcnZhbChpbnRlciwgV1NfTk9JU0UsIDMsIHMx LT5yZWYubCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHMxLCAwLCBzMS0+dm9sIC0g czEtPnZvbCAvIDQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzMiwgMCwgczItPnZv bCAtIHMyLT52b2wgLyA0KTsKLSAgICAgICAgICAgIGlmIChyIDwgMCkKLSAgICAgICAgICAgICAg ICByZXR1cm4gcjsKLSAgICAgICAgICAgIHMyLT5yZWYubCA9IHMyLT5yZWYuciA9IHI7Ci0gICAg ICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFNCR19UWVBFX01JWDoKLSAgICAgICAgICAg IC8qIFVuaW1wbGVtZW50ZWQ6IHNpbGVuY2U7IHdhcm5pbmcgcHJlc2VudCBlbHNld2hlcmUgKi8K LSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGF2X2xvZyhsb2csIEFWX0xPR19FUlJPUiwK LSAgICAgICAgICAgICAgICAgICAiVHlwZSAlZCBpcyBub3QgaW1wbGVtZW50ZWRcbiIsIHMxLT50 eXBlKTsKLSAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX1BBVENIV0VMQ09NRTsKLSAgICB9Ci0g ICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZ2VuZXJhdGVfcGxhdGVhdSh2b2lkICpsb2cs IHN0cnVjdCBzYmdfc2NyaXB0ICpzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj dCB3c19pbnRlcnZhbHMgKmludGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj dCBzYmdfc2NyaXB0X2V2ZW50ICpldjEpCi17Ci0gICAgaW50NjRfdCB0czEgPSBldjEtPnRzX2lu dCwgdHMyID0gZXYxLT50c190cmFuczsKLSAgICBpbnQgaSwgcjsKLSAgICBzdHJ1Y3Qgc2JnX3Nj cmlwdF9zeW50aCAqczE7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgZXYxLT5uYl9lbGVtZW50czsg aSsrKSB7Ci0gICAgICAgIHMxID0gJnMtPnN5bnRoW2V2MS0+ZWxlbWVudHMgKyBpXTsKLSAgICAg ICAgciA9IGdlbmVyYXRlX2ludGVydmFsKGxvZywgcywgaW50ZXIsIHRzMSwgdHMyLCBzMSwgczEs IDApOwotICAgICAgICBpZiAociA8IDApCi0gICAgICAgICAgICByZXR1cm4gcjsKLSAgICB9Ci0g ICAgcmV0dXJuIDA7Ci19Ci0KLS8qCi0KLSAgIHRzMSAgICAgICAgICAgICB0czIgICAgICAgICB0 czEgICAgdHNtaWQgICAgdHMyCi0gICAgfCAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAg ICAgfCAgICAgICB8Ci0gICAgdiAgICAgICAgICAgICAgIHYgICAgICAgICAgIHYgICAgICAgfCAg ICAgICB2Ci1fX19fICAgICAgICAgICAgICAgICAgICAgICAgX19fXyAgICAgICAgdiAgICAgICBf X19fCi0gICAgJycnJy4uLi4gICAgICAgICAgICAgICAgICAgICcnLi4gICAgICAgIC4uJycKLSAg ICAgICAgICAgICcnJycuLi4uX19fXyAgICAgICAgICAgICcnLi4uLicnCi0KLSAgY29tcGF0aWJs ZSB0cmFuc2l0aW9uICAgICAgaW5jb21wYXRpYmxlIHRyYW5zaXRpb24KLSAqLwotCi1zdGF0aWMg aW50IGdlbmVyYXRlX3RyYW5zaXRpb24odm9pZCAqbG9nLCBzdHJ1Y3Qgc2JnX3NjcmlwdCAqcywK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgd3NfaW50ZXJ2YWxzICppbnRl ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2JnX3NjcmlwdF9ldmVu dCAqZXYxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzYmdfc2NyaXB0 X2V2ZW50ICpldjIpCi17Ci0gICAgaW50NjRfdCB0czEgPSBldjEtPnRzX3RyYW5zLCB0czIgPSBl djEtPnRzX25leHQ7Ci0gICAgLyogKHRzMSArIHRzMikgLyAyIHdpdGhvdXQgb3ZlcmZsb3cgKi8K LSAgICBpbnQ2NF90IHRzbWlkID0gKHRzMSA+PiAxKSArICh0czIgPj4gMSkgKyAodHMxICYgdHMy ICYgMSk7Ci0gICAgZW51bSBzYmdfZmFkZV90eXBlIHR5cGUgPSBldjEtPmZhZGUuc2xpZGUgfCAo ZXYxLT5mYWRlLm91dCAmIGV2Mi0+ZmFkZS5pbik7Ci0gICAgaW50IG5iX2VsZW1lbnRzID0gRkZN QVgoZXYxLT5uYl9lbGVtZW50cywgZXYyLT5uYl9lbGVtZW50cyk7Ci0gICAgc3RydWN0IHNiZ19z Y3JpcHRfc3ludGggKnMxLCAqczIsIHMxbW9kLCBzMm1vZCwgc21pZDsKLSAgICBpbnQgcGFzcywg aSwgcjsKLQotICAgIGZvciAocGFzcyA9IDA7IHBhc3MgPCAyOyBwYXNzKyspIHsKLSAgICAgICAg LyogcGFzcyA9IDAgLT4gY29tcGF0aWJsZSBhbmQgZmlyc3QgaGFsZiBvZiBpbmNvbXBhdGlibGUK LSAgICAgICAgICAgcGFzcyA9IDEgLT4gc2Vjb25kIGhhbGYgb2YgaW5jb21wYXRpYmxlCi0gICAg ICAgICAgIFVzaW5nIHR3byBwYXNzZXMgbGlrZSB0aGF0IGVuc3VyZXMgdGhhdCB0aGUgaW50ZXJ2 YWxzIGFyZSBnZW5lcmF0ZWQKLSAgICAgICAgICAgaW4gaW5jcmVhc2luZyBvcmRlciBhY2NvcmRp bmcgdG8gdGhlaXIgc3RhcnQgdGltZXN0YW1wLgotICAgICAgICAgICBPdGhlcndpc2UgaXQgd291 bGQgYmUgbmVjZXNzYXJ5IHRvIHNvcnQgdGhlbQotICAgICAgICAgICB3aGlsZSBrZWVwaW5nIHRo ZSBtdXR1YWwgcmVmZXJlbmNlcy4KLSAgICAgICAgICovCi0gICAgICAgIGZvciAoaSA9IDA7IGkg PCBuYl9lbGVtZW50czsgaSsrKSB7Ci0gICAgICAgICAgICBzMSA9IGkgPCBldjEtPm5iX2VsZW1l bnRzID8gJnMtPnN5bnRoW2V2MS0+ZWxlbWVudHMgKyBpXSA6ICZzMW1vZDsKLSAgICAgICAgICAg IHMyID0gaSA8IGV2Mi0+bmJfZWxlbWVudHMgPyAmcy0+c3ludGhbZXYyLT5lbGVtZW50cyArIGld IDogJnMybW9kOwotICAgICAgICAgICAgczFtb2QgPSBzMSAhPSAmczFtb2QgPyAqczEgOiAoc3Ry dWN0IHNiZ19zY3JpcHRfc3ludGgpeyAwIH07Ci0gICAgICAgICAgICBzMm1vZCA9IHMyICE9ICZz Mm1vZCA/ICpzMiA6IChzdHJ1Y3Qgc2JnX3NjcmlwdF9zeW50aCl7IDAgfTsKLSAgICAgICAgICAg IGlmIChldjEtPmZhZGUuc2xpZGUpIHsKLSAgICAgICAgICAgICAgICAvKiBmb3Igc2xpZGVzLCBh bmQgb25seSBmb3Igc2xpZGVzLCBzaWxlbmNlICgiLSIpIGlzIGVxdWl2YWxlbnQKLSAgICAgICAg ICAgICAgICAgICB0byBhbnl0aGluZyB3aXRoIHZvbHVtZSAwICovCi0gICAgICAgICAgICAgICAg aWYgKHMxbW9kLnR5cGUgPT0gU0JHX1RZUEVfTk9ORSkgewotICAgICAgICAgICAgICAgICAgICBz MW1vZCA9IHMybW9kOwotICAgICAgICAgICAgICAgICAgICBzMW1vZC52b2wgPSAwOwotICAgICAg ICAgICAgICAgIH0gZWxzZSBpZiAoczJtb2QudHlwZSA9PSBTQkdfVFlQRV9OT05FKSB7Ci0gICAg ICAgICAgICAgICAgICAgIHMybW9kID0gczFtb2Q7Ci0gICAgICAgICAgICAgICAgICAgIHMybW9k LnZvbCA9IDA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAg aWYgKHMxbW9kLnR5cGUgPT0gczJtb2QudHlwZSAmJgotICAgICAgICAgICAgICAgIHMxbW9kLnR5 cGUgIT0gU0JHX1RZUEVfQkVMTCAmJgotICAgICAgICAgICAgICAgICh0eXBlID09IFNCR19GQURF X0FEQVBUIHx8Ci0gICAgICAgICAgICAgICAgIChzMW1vZC5jYXJyaWVyID09IHMybW9kLmNhcnJp ZXIgJiYKLSAgICAgICAgICAgICAgICAgIHMxbW9kLmJlYXQgPT0gczJtb2QuYmVhdCkpKSB7Ci0g ICAgICAgICAgICAgICAgLyogY29tcGF0aWJsZTogc2luZ2xlIHRyYW5zaXRpb24gKi8KLSAgICAg ICAgICAgICAgICBpZiAoIXBhc3MpIHsKLSAgICAgICAgICAgICAgICAgICAgciA9IGdlbmVyYXRl X2ludGVydmFsKGxvZywgcywgaW50ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB0czEsIHRzMiwgJnMxbW9kLCAmczJtb2QsIDMpOwotICAgICAgICAgICAgICAg ICAgICBpZiAociA8IDApCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcjsKLSAgICAg ICAgICAgICAgICAgICAgczItPnJlZiA9IHMybW9kLnJlZjsKLSAgICAgICAgICAgICAgICB9Ci0g ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8qIGluY29tcGF0aWJsZTogc2ls ZW5jZSBhdCBtaWRwb2ludCAqLwotICAgICAgICAgICAgICAgIGlmICghcGFzcykgewotICAgICAg ICAgICAgICAgICAgICBzbWlkID0gczFtb2Q7Ci0gICAgICAgICAgICAgICAgICAgIHNtaWQudm9s ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgciA9IGdlbmVyYXRlX2ludGVydmFsKGxvZywgcywg aW50ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0czEsIHRz bWlkLCAmczFtb2QsICZzbWlkLCAxKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHIgPCAwKQot ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHI7Ci0gICAgICAgICAgICAgICAgfSBlbHNl IHsKLSAgICAgICAgICAgICAgICAgICAgc21pZCA9IHMybW9kOwotICAgICAgICAgICAgICAgICAg ICBzbWlkLnZvbCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIHIgPSBnZW5lcmF0ZV9pbnRlcnZh bChsb2csIHMsIGludGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdHNtaWQsIHRzMiwgJnNtaWQsICZzMm1vZCwgMik7Ci0gICAgICAgICAgICAgICAgICAgIGlm IChyIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByOwotICAgICAgICAgICAg ICAgICAgICBzMi0+cmVmID0gczJtb2QucmVmOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg ICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotLyoKLSAgICBldjEg ICAgICAgICAgICAgICAgICB0cmF0cyBldjIgIGludHRzICAgICAgICAgICBlbmR0cyBldjMKLSAg ICAgfCAgICAgICAgICAgICAgICAgICAgIHwgICAgfCAgICAgfCAgICAgICAgICAgICAgIHwgICAg fAotICAgICB2ICAgICAgICAgICAgICAgICAgICAgdiAgICB2ICAgICB2ICAgICAgICAgICAgICAg diAgICB2Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX19fX19fX19f X19fX18KLS4uLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4uICAgICAgICAgICAg ICAgIC4uLi4KLSAgICAnJycuLi4uX19fX19fX19fX19fX19fXy4uLi4nJycgICAgICAgICAgICAg ICAgICAgICAgICAnJycuLi4uX19fX19fX19fX19fX19fCi0KLVxfX19fX19fX18vXF9fX19fX19f X19fX19fL1xfX19fX19fX18vXF9fX19fX19fX19fX19fL1xfX19fX19fX18vXF9fX19fX19fX19f X18vCi0gIHRyIHgtPjEgICAgICAgIGludDEgICAgICAgIHRyIDEtPjIgICAgICAgIGludDIgICAg ICAgIHRyIDItPjMgICAgICAgIGludDMKLSAqLwotCi1zdGF0aWMgaW50IGdlbmVyYXRlX2ludGVy dmFscyh2b2lkICpsb2csIHN0cnVjdCBzYmdfc2NyaXB0ICpzLCBpbnQgc2FtcGxlX3JhdGUsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgd3NfaW50ZXJ2YWxzICppbnRlcikK LXsKLSAgICBpbnQ2NF90IHRyYW5zX3RpbWUgPSBzLT5vcHRfZmFkZV90aW1lIC8gMjsKLSAgICBz dHJ1Y3Qgc2JnX3NjcmlwdF9ldmVudCBldjAsICpldjEsICpldjI7Ci0gICAgaW50NjRfdCBwZXJp b2Q7Ci0gICAgaW50IGksIHI7Ci0KLSAgICAvKiBTQmFHZW4gaGFuZGxlcyB0aGUgdGltZSBiZWZv cmUgYW5kIGFmdGVyIHRoZSBleHRyZW1hbCBldmVudHMsCi0gICAgICAgYW5kIHRoZSBjb3JyZXNw b25kaW5nIHRyYW5zaXRpb25zLCBhcyBpZiB0aGUgc2VxdWVuY2Ugd2VyZSBjeWNsaWMKLSAgICAg ICB3aXRoIGEgMjQtaG91cnMgcGVyaW9kLiAqLwotICAgIHBlcmlvZCA9IHMtPmV2ZW50c1tzLT5u Yl9ldmVudHMgLSAxXS50cyAtIHMtPmV2ZW50c1swXS50czsKLSAgICBwZXJpb2QgPSAocGVyaW9k ICsgKERBWV9UUyAtIDEpKSAvIERBWV9UUyAqIERBWV9UUzsKLSAgICBwZXJpb2QgPSBGRk1BWChw ZXJpb2QsIERBWV9UUyk7Ci0KLSAgICAvKiBQcmVwYXJlIHRpbWVzdGFtcHMgZm9yIHRyYW5zaXRp b25zICovCi0gICAgZm9yIChpID0gMDsgaSA8IHMtPm5iX2V2ZW50czsgaSsrKSB7Ci0gICAgICAg IGV2MSA9ICZzLT5ldmVudHNbaV07Ci0gICAgICAgIGV2MiA9ICZzLT5ldmVudHNbKGkgKyAxKSAl IHMtPm5iX2V2ZW50c107Ci0gICAgICAgIGV2MS0+dHNfaW50ICAgPSBldjEtPnRzOwotCi0gICAg ICAgIGlmICghZXYxLT5mYWRlLnNsaWRlICYmIGV2MSA+PSBldjIgJiYgZXYyLT50cyA+IElOVDY0 X01BWCAtIHBlcmlvZCkKLSAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwot Ci0gICAgICAgIGV2MS0+dHNfdHJhbnMgPSBldjEtPmZhZGUuc2xpZGUgPyBldjEtPnRzCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBldjItPnRzICsgKGV2MSA8IGV2 MiA/IDAgOiBwZXJpb2QpOwotICAgIH0KLSAgICBmb3IgKGkgPSAwOyBpIDwgcy0+bmJfZXZlbnRz OyBpKyspIHsKLSAgICAgICAgZXYxID0gJnMtPmV2ZW50c1tpXTsKLSAgICAgICAgZXYyID0gJnMt PmV2ZW50c1soaSArIDEpICUgcy0+bmJfZXZlbnRzXTsKLSAgICAgICAgaWYgKCFldjEtPmZhZGUu c2xpZGUpIHsKLSAgICAgICAgICAgIGV2MS0+dHNfdHJhbnMgPSBGRk1BWChldjEtPnRzX2ludCwg ICBldjEtPnRzX3RyYW5zIC0gdHJhbnNfdGltZSk7Ci0gICAgICAgICAgICBldjItPnRzX2ludCAg ID0gRkZNSU4oZXYyLT50c190cmFucywgZXYyLT50c19pbnQgICArIHRyYW5zX3RpbWUpOwotICAg ICAgICB9Ci0gICAgICAgIGV2MS0+dHNfbmV4dCAgPSBldjItPnRzX2ludCArIChldjEgPCBldjIg PyAwIDogcGVyaW9kKTsKLSAgICB9Ci0KLSAgICAvKiBQc2V1ZG8gZXZlbnQgYmVmb3JlIHRoZSBm aXJzdCBvbmUgKi8KLSAgICBldjAgPSBzLT5ldmVudHNbcy0+bmJfZXZlbnRzIC0gMV07Ci0gICAg aWYgKGF2X3NhdF9zdWI2NChldjAudHNfaW50LCBwZXJpb2QpICE9ICh1aW50NjRfdClldjAudHNf aW50IC0gcGVyaW9kKQotICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKLSAgICBl djAudHNfaW50ICAgLT0gcGVyaW9kOwotICAgIGV2MC50c190cmFucyAtPSBwZXJpb2Q7Ci0gICAg ZXYwLnRzX25leHQgIC09IHBlcmlvZDsKLQotICAgIC8qIENvbnZlcnQgdGltZXN0YW1wcyAqLwot ICAgIGZvciAoaSA9IC0xOyBpIDwgcy0+bmJfZXZlbnRzOyBpKyspIHsKLSAgICAgICAgZXYxID0g aSA8IDAgPyAmZXYwIDogJnMtPmV2ZW50c1tpXTsKLSAgICAgICAgZXYxLT50c19pbnQgICA9IGF2 X3Jlc2NhbGUoZXYxLT50c19pbnQsICAgc2FtcGxlX3JhdGUsIEFWX1RJTUVfQkFTRSk7Ci0gICAg ICAgIGV2MS0+dHNfdHJhbnMgPSBhdl9yZXNjYWxlKGV2MS0+dHNfdHJhbnMsIHNhbXBsZV9yYXRl LCBBVl9USU1FX0JBU0UpOwotICAgICAgICBldjEtPnRzX25leHQgID0gYXZfcmVzY2FsZShldjEt PnRzX25leHQsICBzYW1wbGVfcmF0ZSwgQVZfVElNRV9CQVNFKTsKLSAgICB9Ci0KLSAgICAvKiBH ZW5lcmF0ZSBpbnRlcnZhbHMgKi8KLSAgICBmb3IgKGkgPSAwOyBpIDwgcy0+bmJfc3ludGg7IGkr KykKLSAgICAgICAgcy0+c3ludGhbaV0ucmVmLmwgPSBzLT5zeW50aFtpXS5yZWYuciA9IC0xOwot ICAgIGZvciAoaSA9IC0xOyBpIDwgcy0+bmJfZXZlbnRzOyBpKyspIHsKLSAgICAgICAgZXYxID0g aSA8IDAgPyAmZXYwIDogJnMtPmV2ZW50c1tpXTsKLSAgICAgICAgZXYyID0gJnMtPmV2ZW50c1so aSArIDEpICUgcy0+bmJfZXZlbnRzXTsKLSAgICAgICAgciA9IGdlbmVyYXRlX3BsYXRlYXUobG9n LCBzLCBpbnRlciwgZXYxKTsKLSAgICAgICAgaWYgKHIgPCAwKQotICAgICAgICAgICAgcmV0dXJu IHI7Ci0gICAgICAgIHIgPSBnZW5lcmF0ZV90cmFuc2l0aW9uKGxvZywgcywgaW50ZXIsIGV2MSwg ZXYyKTsKLSAgICAgICAgaWYgKHIgPCAwKQotICAgICAgICAgICAgcmV0dXJuIHI7Ci0gICAgfQot ICAgIGlmICghaW50ZXItPm5iX2ludGVyKQotICAgICAgICBhdl9sb2cobG9nLCBBVl9MT0dfV0FS TklORywgIkNvbXBsZXRlbHkgc2lsZW50IHNjcmlwdC5cbiIpOwotICAgIHJldHVybiAwOwotfQot Ci1zdGF0aWMgaW50IGVuY29kZV9pbnRlcnZhbHMoc3RydWN0IHNiZ19zY3JpcHQgKnMsIEFWQ29k ZWNQYXJhbWV0ZXJzICpwYXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHdz X2ludGVydmFscyAqaW50ZXIpCi17Ci0gICAgaW50IGksIGVkYXRhX3NpemUgPSA0LCByZXQ7Ci0g ICAgdWludDhfdCAqZWRhdGE7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgaW50ZXItPm5iX2ludGVy OyBpKyspIHsKLSAgICAgICAgZWRhdGFfc2l6ZSArPSBpbnRlci0+aW50ZXJbaV0udHlwZSA9PSBX U19TSU5FICA/IDQ0IDoKLSAgICAgICAgICAgICAgICAgICAgICBpbnRlci0+aW50ZXJbaV0udHlw ZSA9PSBXU19OT0lTRSA/IDMyIDogMDsKLSAgICAgICAgaWYgKGVkYXRhX3NpemUgPCAwKQotICAg ICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKLSAgICB9Ci0gICAgaWYgKChyZXQgPSBm Zl9hbGxvY19leHRyYWRhdGEocGFyLCBlZGF0YV9zaXplKSkgPCAwKQotICAgICAgICByZXR1cm4g cmV0OwotICAgIGVkYXRhID0gcGFyLT5leHRyYWRhdGE7Ci0KLSNkZWZpbmUgQUREX0VEQVRBMzIo dikgZG8geyBBVl9XTDMyKGVkYXRhLCAodikpOyBlZGF0YSArPSA0OyB9IHdoaWxlKDApCi0jZGVm aW5lIEFERF9FREFUQTY0KHYpIGRvIHsgQVZfV0w2NChlZGF0YSwgKHYpKTsgZWRhdGEgKz0gODsg fSB3aGlsZSgwKQotICAgIEFERF9FREFUQTMyKGludGVyLT5uYl9pbnRlcik7Ci0gICAgZm9yIChp ID0gMDsgaSA8IGludGVyLT5uYl9pbnRlcjsgaSsrKSB7Ci0gICAgICAgIEFERF9FREFUQTY0KGlu dGVyLT5pbnRlcltpXS50czEpOwotICAgICAgICBBRERfRURBVEE2NChpbnRlci0+aW50ZXJbaV0u dHMyKTsKLSAgICAgICAgQUREX0VEQVRBMzIoaW50ZXItPmludGVyW2ldLnR5cGUpOwotICAgICAg ICBBRERfRURBVEEzMihpbnRlci0+aW50ZXJbaV0uY2hhbm5lbHMpOwotICAgICAgICBzd2l0Y2gg KGludGVyLT5pbnRlcltpXS50eXBlKSB7Ci0gICAgICAgICAgICBjYXNlIFdTX1NJTkU6Ci0gICAg ICAgICAgICAgICAgQUREX0VEQVRBMzIoaW50ZXItPmludGVyW2ldLmYxKTsKLSAgICAgICAgICAg ICAgICBBRERfRURBVEEzMihpbnRlci0+aW50ZXJbaV0uZjIpOwotICAgICAgICAgICAgICAgIEFE RF9FREFUQTMyKGludGVyLT5pbnRlcltpXS5hMSk7Ci0gICAgICAgICAgICAgICAgQUREX0VEQVRB MzIoaW50ZXItPmludGVyW2ldLmEyKTsKLSAgICAgICAgICAgICAgICBBRERfRURBVEEzMihpbnRl ci0+aW50ZXJbaV0ucGhpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNh c2UgV1NfTk9JU0U6Ci0gICAgICAgICAgICAgICAgQUREX0VEQVRBMzIoaW50ZXItPmludGVyW2ld LmExKTsKLSAgICAgICAgICAgICAgICBBRERfRURBVEEzMihpbnRlci0+aW50ZXJbaV0uYTIpOwot ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChlZGF0YSAh PSBwYXItPmV4dHJhZGF0YSArIGVkYXRhX3NpemUpCi0gICAgICAgIHJldHVybiBBVkVSUk9SX0JV RzsKLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGF2X2NvbGQgaW50IHNiZ19yZWFkX3Byb2Jl KGNvbnN0IEFWUHJvYmVEYXRhICpwKQotewotICAgIGludCByLCBzY29yZTsKLSAgICBzdHJ1Y3Qg c2JnX3NjcmlwdCBzY3JpcHQgPSB7IDAgfTsKLQotICAgIHIgPSBwYXJzZV9zY3JpcHQoTlVMTCwg cC0+YnVmLCBwLT5idWZfc2l6ZSwgJnNjcmlwdCk7Ci0gICAgc2NvcmUgPSByIDwgMCB8fCAhc2Ny aXB0Lm5iX2RlZiB8fCAhc2NyaXB0Lm5iX3RzZXEgPyAwIDoKLSAgICAgICAgICAgIEFWUFJPQkVf U0NPUkVfTUFYIC8gMzsKLSAgICBmcmVlX3NjcmlwdCgmc2NyaXB0KTsKLSAgICByZXR1cm4gc2Nv cmU7Ci19Ci0KLXN0YXRpYyBhdl9jb2xkIGludCBzYmdfcmVhZF9oZWFkZXIoQVZGb3JtYXRDb250 ZXh0ICphdmYpCi17Ci0gICAgc3RydWN0IHNiZ19kZW11eGVyICpzYmcgPSBhdmYtPnByaXZfZGF0 YTsKLSAgICBpbnQgcjsKLSAgICBjaGFyICpidWYgPSBOVUxMOwotICAgIHN0cnVjdCBzYmdfc2Ny aXB0IHNjcmlwdCA9IHsgMCB9OwotICAgIEFWU3RyZWFtICpzdDsKLSAgICBGRlN0cmVhbSAqc3Rp OwotICAgIHN0cnVjdCB3c19pbnRlcnZhbHMgaW50ZXIgPSB7IDAgfTsKLQotICAgIHIgPSByZWFk X3dob2xlX2ZpbGUoYXZmLT5wYiwgc2JnLT5tYXhfZmlsZV9zaXplLCAmYnVmKTsKLSAgICBpZiAo ciA8IDApCi0gICAgICAgIGdvdG8gZmFpbDsKLSAgICByID0gcGFyc2Vfc2NyaXB0KGF2ZiwgYnVm LCByLCAmc2NyaXB0KTsKLSAgICBpZiAociA8IDApCi0gICAgICAgIGdvdG8gZmFpbDsKLSAgICBp ZiAoIXNiZy0+c2FtcGxlX3JhdGUpCi0gICAgICAgIHNiZy0+c2FtcGxlX3JhdGUgPSBzY3JpcHQu c2FtcGxlX3JhdGU7Ci0gICAgZWxzZQotICAgICAgICBzY3JpcHQuc2FtcGxlX3JhdGUgPSBzYmct PnNhbXBsZV9yYXRlOwotICAgIGlmICghc2JnLT5mcmFtZV9zaXplKQotICAgICAgICBzYmctPmZy YW1lX3NpemUgPSBGRk1BWCgxLCBzYmctPnNhbXBsZV9yYXRlIC8gMTApOwotICAgIGlmIChzY3Jp cHQub3B0X21peCkKLSAgICAgICAgYXZfbG9nKGF2ZiwgQVZfTE9HX1dBUk5JTkcsICJNaXggZmVh dHVyZSBub3QgaW1wbGVtZW50ZWQ6ICIKLSAgICAgICAgICAgICAgICItbSBpcyBpZ25vcmVkIGFu ZCBtaXggY2hhbm5lbHMgd2lsbCBiZSBzaWxlbnQuXG4iKTsKLSAgICByID0gZXhwYW5kX3Njcmlw dChhdmYsICZzY3JpcHQpOwotICAgIGlmIChyIDwgMCkKLSAgICAgICAgZ290byBmYWlsOwotICAg IGF2X2ZyZWVwKCZidWYpOwotICAgIHIgPSBnZW5lcmF0ZV9pbnRlcnZhbHMoYXZmLCAmc2NyaXB0 LCBzYmctPnNhbXBsZV9yYXRlLCAmaW50ZXIpOwotICAgIGlmIChyIDwgMCkKLSAgICAgICAgZ290 byBmYWlsOwotCi0gICAgaWYgKHNjcmlwdC5lbmRfdHMgIT0gQVZfTk9QVFNfVkFMVUUgJiYgc2Ny aXB0LmVuZF90cyA8IHNjcmlwdC5zdGFydF90cykgewotICAgICAgICByID0gQVZFUlJPUl9JTlZB TElEREFUQTsKLSAgICAgICAgZ290byBmYWlsOwotICAgIH0KLQotICAgIHN0ID0gYXZmb3JtYXRf bmV3X3N0cmVhbShhdmYsIE5VTEwpOwotICAgIGlmICghc3QpCi0gICAgICAgIHJldHVybiBBVkVS Uk9SKEVOT01FTSk7Ci0gICAgc3RpID0gZmZzdHJlYW0oc3QpOwotICAgIHN0LT5jb2RlY3Bhci0+ Y29kZWNfdHlwZSAgICAgPSBBVk1FRElBX1RZUEVfQVVESU87Ci0gICAgc3QtPmNvZGVjcGFyLT5j b2RlY19pZCAgICAgICA9IEFWX0NPREVDX0lEX0ZGV0FWRVNZTlRIOwotICAgIHN0LT5jb2RlY3Bh ci0+Y2hfbGF5b3V0ICAgICAgPSAoQVZDaGFubmVsTGF5b3V0KUFWX0NIQU5ORUxfTEFZT1VUX1NU RVJFTzsKLSAgICBzdC0+Y29kZWNwYXItPnNhbXBsZV9yYXRlICAgID0gc2JnLT5zYW1wbGVfcmF0 ZTsKLSAgICBzdC0+Y29kZWNwYXItPmZyYW1lX3NpemUgICAgID0gc2JnLT5mcmFtZV9zaXplOwot ICAgIGF2cHJpdl9zZXRfcHRzX2luZm8oc3QsIDY0LCAxLCBzdC0+Y29kZWNwYXItPnNhbXBsZV9y YXRlKTsKLSAgICBzdGktPnByb2JlX3BhY2tldHMgPSAwOwotICAgIHN0LT5zdGFydF90aW1lICAg ID0gYXZfcmVzY2FsZShzY3JpcHQuc3RhcnRfdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNiZy0+c2FtcGxlX3JhdGUsIEFWX1RJTUVfQkFTRSk7Ci0gICAgc3QtPmR1cmF0 aW9uICAgICAgPSBzY3JpcHQuZW5kX3RzID09IEFWX05PUFRTX1ZBTFVFID8gQVZfTk9QVFNfVkFM VUUgOgotICAgICAgICAgICAgICAgICAgICAgICAgYXZfcmVzY2FsZShzY3JpcHQuZW5kX3RzIC0g c2NyaXB0LnN0YXJ0X3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYmct PnNhbXBsZV9yYXRlLCBBVl9USU1FX0JBU0UpOwotICAgIHN0aS0+Y3VyX2R0cyAgICAgID0gc3Qt PnN0YXJ0X3RpbWU7Ci0gICAgciA9IGVuY29kZV9pbnRlcnZhbHMoJnNjcmlwdCwgc3QtPmNvZGVj cGFyLCAmaW50ZXIpOwotICAgIGlmIChyIDwgMCkKLSAgICAgICAgZ290byBmYWlsOwotCi0gICAg YXZfZnJlZShpbnRlci5pbnRlcik7Ci0gICAgZnJlZV9zY3JpcHQoJnNjcmlwdCk7Ci0gICAgcmV0 dXJuIDA7Ci0KLWZhaWw6Ci0gICAgYXZfZnJlZShpbnRlci5pbnRlcik7Ci0gICAgZnJlZV9zY3Jp cHQoJnNjcmlwdCk7Ci0gICAgYXZfZnJlZShidWYpOwotICAgIHJldHVybiByOwotfQotCi1zdGF0 aWMgaW50IHNiZ19yZWFkX3BhY2tldChBVkZvcm1hdENvbnRleHQgKmF2ZiwgQVZQYWNrZXQgKnBh Y2tldCkKLXsKLSAgICBpbnQ2NF90IHRzLCBlbmRfdHM7Ci0gICAgaW50IHJldDsKLQotICAgIHRz ID0gZmZzdHJlYW0oYXZmLT5zdHJlYW1zWzBdKS0+Y3VyX2R0czsKLSAgICBlbmRfdHMgPSBhdl9z YXRfYWRkNjQodHMsIGF2Zi0+c3RyZWFtc1swXS0+Y29kZWNwYXItPmZyYW1lX3NpemUpOwotICAg IGlmIChhdmYtPnN0cmVhbXNbMF0tPmR1cmF0aW9uICE9IEFWX05PUFRTX1ZBTFVFKQotICAgICAg ICBlbmRfdHMgPSBGRk1JTihhdmYtPnN0cmVhbXNbMF0tPnN0YXJ0X3RpbWUgKyBhdmYtPnN0cmVh bXNbMF0tPmR1cmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICBlbmRfdHMpOwotICAgIGlm IChlbmRfdHMgPD0gdHMpCi0gICAgICAgIHJldHVybiBBVkVSUk9SX0VPRjsKLSAgICBpZiAoKHJl dCA9IGF2X25ld19wYWNrZXQocGFja2V0LCAxMikpIDwgMCkKLSAgICAgICAgcmV0dXJuIHJldDsK LSAgICBwYWNrZXQtPmR0cyA9IHBhY2tldC0+cHRzID0gdHM7Ci0gICAgcGFja2V0LT5kdXJhdGlv biA9IGVuZF90cyAtIHRzOwotICAgIEFWX1dMNjQocGFja2V0LT5kYXRhICsgMCwgdHMpOwotICAg IEFWX1dMMzIocGFja2V0LT5kYXRhICsgOCwgcGFja2V0LT5kdXJhdGlvbik7Ci0gICAgcmV0dXJu IHBhY2tldC0+c2l6ZTsKLX0KLQotc3RhdGljIGludCBzYmdfcmVhZF9zZWVrMihBVkZvcm1hdENv bnRleHQgKmF2ZiwgaW50IHN0cmVhbV9pbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg aW50NjRfdCBtaW5fdHMsIGludDY0X3QgdHMsIGludDY0X3QgbWF4X3RzLCBpbnQgZmxhZ3MpCi17 Ci0gICAgaWYgKGZsYWdzIHx8IHN0cmVhbV9pbmRleCA+IDApCi0gICAgICAgIHJldHVybiBBVkVS Uk9SKEVJTlZBTCk7Ci0gICAgaWYgKHN0cmVhbV9pbmRleCA8IDApCi0gICAgICAgIHRzID0gYXZf cmVzY2FsZV9xKHRzLCBBVl9USU1FX0JBU0VfUSwgYXZmLT5zdHJlYW1zWzBdLT50aW1lX2Jhc2Up OwotICAgIGZmc3RyZWFtKGF2Zi0+c3RyZWFtc1swXSktPmN1cl9kdHMgPSB0czsKLSAgICByZXR1 cm4gMDsKLX0KLQotc3RhdGljIGludCBzYmdfcmVhZF9zZWVrKEFWRm9ybWF0Q29udGV4dCAqYXZm LCBpbnQgc3RyZWFtX2luZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgIGludDY0X3QgdHMs IGludCBmbGFncykKLXsKLSAgICByZXR1cm4gc2JnX3JlYWRfc2VlazIoYXZmLCBzdHJlYW1faW5k ZXgsIHRzLCB0cywgdHMsIDApOwotfQotCi1zdGF0aWMgY29uc3QgQVZPcHRpb24gc2JnX29wdGlv bnNbXSA9IHsKLSAgICB7ICJzYW1wbGVfcmF0ZSIsICIiLCBvZmZzZXRvZihzdHJ1Y3Qgc2JnX2Rl bXV4ZXIsIHNhbXBsZV9yYXRlKSwKLSAgICAgIEFWX09QVF9UWVBFX0lOVCwgeyAuaTY0ID0gMCB9 LCAwLCBJTlRfTUFYLAotICAgICAgQVZfT1BUX0ZMQUdfREVDT0RJTkdfUEFSQU0gfSwKLSAgICB7 ICJmcmFtZV9zaXplIiwgIiIsIG9mZnNldG9mKHN0cnVjdCBzYmdfZGVtdXhlciwgZnJhbWVfc2l6 ZSksCi0gICAgICBBVl9PUFRfVFlQRV9JTlQsIHsgLmk2NCA9IDAgfSwgMCwgSU5UX01BWCwKLSAg ICAgIEFWX09QVF9GTEFHX0RFQ09ESU5HX1BBUkFNIH0sCi0gICAgeyAibWF4X2ZpbGVfc2l6ZSIs ICIiLCBvZmZzZXRvZihzdHJ1Y3Qgc2JnX2RlbXV4ZXIsIG1heF9maWxlX3NpemUpLAotICAgICAg QVZfT1BUX1RZUEVfSU5ULCB7IC5pNjQgPSA1MDAwMDAwIH0sIDAsIElOVF9NQVgsCi0gICAgICBB Vl9PUFRfRkxBR19ERUNPRElOR19QQVJBTSB9LAotICAgIHsgTlVMTCB9LAotfTsKLQotc3RhdGlj IGNvbnN0IEFWQ2xhc3Mgc2JnX2RlbXV4ZXJfY2xhc3MgPSB7Ci0gICAgLmNsYXNzX25hbWUgPSAi c2JnX2RlbXV4ZXIiLAotICAgIC5pdGVtX25hbWUgID0gYXZfZGVmYXVsdF9pdGVtX25hbWUsCi0g ICAgLm9wdGlvbiAgICAgPSBzYmdfb3B0aW9ucywKLSAgICAudmVyc2lvbiAgICA9IExJQkFWVVRJ TF9WRVJTSU9OX0lOVCwKLX07Ci0KLWNvbnN0IEFWSW5wdXRGb3JtYXQgZmZfc2JnX2RlbXV4ZXIg PSB7Ci0gICAgLm5hbWUgICAgICAgICAgID0gInNiZyIsCi0gICAgLmxvbmdfbmFtZSAgICAgID0g TlVMTF9JRl9DT05GSUdfU01BTEwoIlNCYUdlbiBiaW5hdXJhbCBiZWF0cyBzY3JpcHQiKSwKLSAg ICAucHJpdl9kYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IHNiZ19kZW11eGVyKSwKLSAgICAucmVh ZF9wcm9iZSAgICAgPSBzYmdfcmVhZF9wcm9iZSwKLSAgICAucmVhZF9oZWFkZXIgICAgPSBzYmdf cmVhZF9oZWFkZXIsCi0gICAgLnJlYWRfcGFja2V0ICAgID0gc2JnX3JlYWRfcGFja2V0LAotICAg IC5yZWFkX3NlZWsgICAgICA9IHNiZ19yZWFkX3NlZWssCi0gICAgLnJlYWRfc2VlazIgICAgID0g c2JnX3JlYWRfc2VlazIsCi0gICAgLmV4dGVuc2lvbnMgICAgID0gInNiZyIsCi0gICAgLnByaXZf Y2xhc3MgICAgID0gJnNiZ19kZW11eGVyX2NsYXNzLAotfTsKLS0gCjIuMzkuMQoK --000000000000a19eed05fb52fbcb Content-Type: text/x-patch; charset="US-ASCII"; name="0001-avcodec-remove-obscure-pseudo-synth-decoder.patch" Content-Disposition: attachment; filename="0001-avcodec-remove-obscure-pseudo-synth-decoder.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lhhgms051 RnJvbSA2MDc4NGM1MzYwMDgxNTQzZWM1YTcyZDgwNmE2MmIyZjZjMzMyZGM4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQYXVsIEIgTWFob2wgPG9uZW1kYUBnbWFpbC5jb20+CkRhdGU6 IFdlZCwgMTAgTWF5IDIwMjMgMTA6NDE6MDAgKzAyMDAKU3ViamVjdDogW1BBVENIIDEvMl0gYXZj b2RlYzogcmVtb3ZlIG9ic2N1cmUgcHNldWRvIHN5bnRoICJkZWNvZGVyIgoKUHJvcGVyIHBsYWNl IGZvciBzeW50aHMgaXMgaW4gbGliYXZmaWx0ZXIuCgpTaWduZWQtb2ZmLWJ5OiBQYXVsIEIgTWFo b2wgPG9uZW1kYUBnbWFpbC5jb20+Ci0tLQogZG9jL2RlY29kZXJzLnRleGkgICAgICAgICAgfCAg IDggLQogbGliYXZjb2RlYy9NYWtlZmlsZSAgICAgICAgfCAgIDEgLQogbGliYXZjb2RlYy9hbGxj b2RlY3MuYyAgICAgfCAgIDEgLQogbGliYXZjb2RlYy9jb2RlY19kZXNjLmMgICAgfCAgIDIgKwog bGliYXZjb2RlYy9jb2RlY19pZC5oICAgICAgfCAgIDIgKwogbGliYXZjb2RlYy9mZndhdmVzeW50 aC5jICAgfCA0NzMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogbGliYXZj b2RlYy92ZXJzaW9uX21ham9yLmggfCAgIDEgKwogNyBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlv bnMoKyksIDQ4MyBkZWxldGlvbnMoLSkKIGRlbGV0ZSBtb2RlIDEwMDY0NCBsaWJhdmNvZGVjL2Zm d2F2ZXN5bnRoLmMKCmRpZmYgLS1naXQgYS9kb2MvZGVjb2RlcnMudGV4aSBiL2RvYy9kZWNvZGVy cy50ZXhpCmluZGV4IDA5YjgzMTRkZDIuLjFlY2Q4ZmU4NWIgMTAwNjQ0Ci0tLSBhL2RvYy9kZWNv ZGVycy50ZXhpCisrKyBiL2RvYy9kZWNvZGVycy50ZXhpCkBAIC0yNDAsMTQgKzI0MCw2IEBAIGNv cnJlY3RseSBieSB1c2luZyBsYXZjJ3Mgb2xkIGJ1Z2d5IGxwYyBsb2dpYyBmb3IgZGVjb2Rpbmcu CiAKIEBlbmQgdGFibGUKIAotQHNlY3Rpb24gZmZ3YXZlc3ludGgKLQotSW50ZXJuYWwgd2F2ZSBz eW50aGVzaXplci4KLQotVGhpcyBkZWNvZGVyIGdlbmVyYXRlcyB3YXZlIHBhdHRlcm5zIGFjY29y ZGluZyB0byBwcmVkZWZpbmVkIHNlcXVlbmNlcy4gSXRzCi11c2UgaXMgcHVyZWx5IGludGVybmFs IGFuZCB0aGUgZm9ybWF0IG9mIHRoZSBkYXRhIGl0IGFjY2VwdHMgaXMgbm90IHB1YmxpY2x5Ci1k b2N1bWVudGVkLgotCiBAc2VjdGlvbiBsaWJjZWx0CiAKIGxpYmNlbHQgZGVjb2RlciB3cmFwcGVy LgpkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy9NYWtlZmlsZSBiL2xpYmF2Y29kZWMvTWFrZWZpbGUK aW5kZXggYjA5NzFjZTgzMy4uMWRlYzA5MWIyMSAxMDA2NDQKLS0tIGEvbGliYXZjb2RlYy9NYWtl ZmlsZQorKysgYi9saWJhdmNvZGVjL01ha2VmaWxlCkBAIC0zNTYsNyArMzU2LDYgQEAgT0JKUy0k KENPTkZJR19FWFJfRU5DT0RFUikgICAgICAgICAgICAgKz0gZXhyZW5jLm8gZmxvYXQyaGFsZi5v CiBPQkpTLSQoQ09ORklHX0ZBU1RBVURJT19ERUNPREVSKSAgICAgICArPSBmYXN0YXVkaW8ubwog T0JKUy0kKENPTkZJR19GRlYxX0RFQ09ERVIpICAgICAgICAgICAgKz0gZmZ2MWRlYy5vIGZmdjEu bwogT0JKUy0kKENPTkZJR19GRlYxX0VOQ09ERVIpICAgICAgICAgICAgKz0gZmZ2MWVuYy5vIGZm djEubwotT0JKUy0kKENPTkZJR19GRldBVkVTWU5USF9ERUNPREVSKSAgICAgKz0gZmZ3YXZlc3lu dGgubwogT0JKUy0kKENPTkZJR19GSUNfREVDT0RFUikgICAgICAgICAgICAgKz0gZmljLm8KIE9C SlMtJChDT05GSUdfRklUU19ERUNPREVSKSAgICAgICAgICAgICs9IGZpdHNkZWMubyBmaXRzLm8K IE9CSlMtJChDT05GSUdfRklUU19FTkNPREVSKSAgICAgICAgICAgICs9IGZpdHNlbmMubwpkaWZm IC0tZ2l0IGEvbGliYXZjb2RlYy9hbGxjb2RlY3MuYyBiL2xpYmF2Y29kZWMvYWxsY29kZWNzLmMK aW5kZXggOGVlZWQzNGU1Ny4uNjdiOWE5NWUxNCAxMDA2NDQKLS0tIGEvbGliYXZjb2RlYy9hbGxj b2RlY3MuYworKysgYi9saWJhdmNvZGVjL2FsbGNvZGVjcy5jCkBAIC00NzAsNyArNDcwLDYgQEAg ZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZfZWFjM19lbmNvZGVyOwogZXh0ZXJuIGNvbnN0IEZGQ29k ZWMgZmZfZWFjM19kZWNvZGVyOwogZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZfZXZyY19kZWNvZGVy OwogZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZfZmFzdGF1ZGlvX2RlY29kZXI7Ci1leHRlcm4gY29u c3QgRkZDb2RlYyBmZl9mZndhdmVzeW50aF9kZWNvZGVyOwogZXh0ZXJuIGNvbnN0IEZGQ29kZWMg ZmZfZmxhY19lbmNvZGVyOwogZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZfZmxhY19kZWNvZGVyOwog ZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZfZnRyX2RlY29kZXI7CmRpZmYgLS1naXQgYS9saWJhdmNv ZGVjL2NvZGVjX2Rlc2MuYyBiL2xpYmF2Y29kZWMvY29kZWNfZGVzYy5jCmluZGV4IGQ0MDk3N2Q2 YjMuLmI4NjQ4Mzg3MWIgMTAwNjQ0Ci0tLSBhL2xpYmF2Y29kZWMvY29kZWNfZGVzYy5jCisrKyBi L2xpYmF2Y29kZWMvY29kZWNfZGVzYy5jCkBAIC0zMTMxLDYgKzMxMzEsNyBAQCBzdGF0aWMgY29u c3QgQVZDb2RlY0Rlc2NyaXB0b3IgY29kZWNfZGVzY3JpcHRvcnNbXSA9IHsKICAgICAgICAgLmxv bmdfbmFtZSA9IE5VTExfSUZfQ09ORklHX1NNQUxMKCJjb2RlYzIgKHZlcnkgbG93IGJpdHJhdGUg c3BlZWNoIGNvZGVjKSIpLAogICAgICAgICAucHJvcHMgICAgID0gQVZfQ09ERUNfUFJPUF9JTlRS QV9PTkxZIHwgQVZfQ09ERUNfUFJPUF9MT1NTWSwKICAgICB9LAorI2lmIEZGX0FQSV9GRldBVkVT WU5USF9DT0RFQ0lECiAgICAgewogICAgICAgICAuaWQgICAgICAgID0gQVZfQ09ERUNfSURfRkZX QVZFU1lOVEgsCiAgICAgICAgIC50eXBlICAgICAgPSBBVk1FRElBX1RZUEVfQVVESU8sCkBAIC0z MTM4LDYgKzMxMzksNyBAQCBzdGF0aWMgY29uc3QgQVZDb2RlY0Rlc2NyaXB0b3IgY29kZWNfZGVz Y3JpcHRvcnNbXSA9IHsKICAgICAgICAgLmxvbmdfbmFtZSA9IE5VTExfSUZfQ09ORklHX1NNQUxM KCJXYXZlIHN5bnRoZXNpcyBwc2V1ZG8tY29kZWMiKSwKICAgICAgICAgLnByb3BzICAgICA9IEFW X0NPREVDX1BST1BfSU5UUkFfT05MWSwKICAgICB9LAorI2lmIEZGX0FQSV9GRldBVkVTWU5USF9D T0RFQ0lECiAgICAgewogICAgICAgICAuaWQgICAgICAgID0gQVZfQ09ERUNfSURfU09OSUMsCiAg ICAgICAgIC50eXBlICAgICAgPSBBVk1FRElBX1RZUEVfQVVESU8sCmRpZmYgLS1naXQgYS9saWJh dmNvZGVjL2NvZGVjX2lkLmggYi9saWJhdmNvZGVjL2NvZGVjX2lkLmgKaW5kZXggNzA4MDBlYzIw Yi4uMjk5ODg5YzE1YiAxMDA2NDQKLS0tIGEvbGliYXZjb2RlYy9jb2RlY19pZC5oCisrKyBiL2xp YmF2Y29kZWMvY29kZWNfaWQuaApAQCAtNTA0LDcgKzUwNCw5IEBAIGVudW0gQVZDb2RlY0lEIHsK ICAgICBBVl9DT0RFQ19JRF9PTjJBVkMsCiAgICAgQVZfQ09ERUNfSURfRFNTX1NQLAogICAgIEFW X0NPREVDX0lEX0NPREVDMiwKKyNpZiBGRl9BUElfV0FWRVNZTlRIX0NPREVDSUQKICAgICBBVl9D T0RFQ19JRF9GRldBVkVTWU5USCwKKyNlbmRpZgogICAgIEFWX0NPREVDX0lEX1NPTklDLAogICAg IEFWX0NPREVDX0lEX1NPTklDX0xTLAogICAgIEFWX0NPREVDX0lEX0VWUkMsCmRpZmYgLS1naXQg YS9saWJhdmNvZGVjL2Zmd2F2ZXN5bnRoLmMgYi9saWJhdmNvZGVjL2Zmd2F2ZXN5bnRoLmMKZGVs ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5MzIzMjZmZDAuLjAwMDAwMDAwMDAKLS0tIGEv bGliYXZjb2RlYy9mZndhdmVzeW50aC5jCisrKyAvZGV2L251bGwKQEAgLTEsNDczICswLDAgQEAK LS8qCi0gKiBXYXZlc3ludGggcHNldWRvLWNvZGVjCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTEgTmlj b2xhcyBHZW9yZ2UKLSAqCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCi0gKgotICog RkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgot ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1 YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO VQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAq Ci0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdl bmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRl IHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCi0gKi8KLQotI2lu Y2x1ZGUgImxpYmF2dXRpbC9pbnRyZWFkd3JpdGUuaCIKLSNpbmNsdWRlICJsaWJhdnV0aWwvbG9n LmgiCi0jaW5jbHVkZSAiYXZjb2RlYy5oIgotI2luY2x1ZGUgImNvZGVjX2ludGVybmFsLmgiCi0j aW5jbHVkZSAiZGVjb2RlLmgiCi0KLQotI2RlZmluZSBTSU5fQklUUyAxNAotI2RlZmluZSBXU19N QVhfQ0hBTk5FTFMgMzIKLSNkZWZpbmUgSU5GX1RTIDB4N0ZGRkZGRkZGRkZGRkZGRgotCi0jZGVm aW5lIFBJTktfVU5JVCAxMjgKLQotLyoKLSAgIEZvcm1hdCBvZiB0aGUgZXh0cmFkYXRhIGFuZCBw YWNrZXRzCi0KLSAgIFRISVMgSU5GT1JNQVRJT04gSVMgTk9UIFBBUlQgT0YgVEhFIFBVQkxJQyBB UEkgT1IgQUJJLgotICAgSVQgQ0FOIENIQU5HRSBXSVRIT1VUIE5PVElGSUNBVElPTi4KLQotICAg QWxsIG51bWJlcnMgYXJlIGluIGxpdHRsZSBlbmRpYW4uCi0KLSAgIFRoZSBjb2RlYyBleHRyYWRh dGEgZGVmaW5lIGEgc2V0IG9mIGludGVydmFscyB3aXRoIHVuaWZvcm0gY29udGVudC4KLSAgIE92 ZXJsYXBwaW5nIGludGVydmFscyBhcmUgYWRkZWQgdG9nZXRoZXIuCi0KLSAgIGV4dHJhZGF0YToK LSAgICAgICB1aW50MzIgICAgICBudW1iZXIgb2YgaW50ZXJ2YWxzCi0gICAgICAgLi4uICAgICAg ICAgaW50ZXJ2YWxzCi0KLSAgIGludGVydmFsOgotICAgICAgIGludDY0ICAgICAgIHN0YXJ0IHRp bWVzdGFtcDsgdGltZV9iYXNlIG11c3QgYmUgMS9zYW1wbGVfcmF0ZTsKLSAgICAgICAgICAgICAg ICAgICBzdGFydCB0aW1lc3RhbXBzIG11c3QgYmUgaW4gYXNjZW5kaW5nIG9yZGVyCi0gICAgICAg aW50NjQgICAgICAgZW5kIHRpbWVzdGFtcAotICAgICAgIHVpbnQzMiAgICAgIHR5cGUKLSAgICAg ICB1aW50MzIgICAgICBjaGFubmVscyBtYXNrCi0gICAgICAgLi4uICAgICAgICAgYWRkaXRpb25h bCBpbmZvcm1hdGlvbiwgZGVwZW5kcyBvbiB0eXBlCi0KLSAgIHNpbmUgaW50ZXJ2YWwgKHR5cGUg Zm91cmNjICJTSU5FIik6Ci0gICAgICAgaW50MzIgICAgICAgc3RhcnQgZnJlcXVlbmN5LCBpbiAx LygxPDwxNikgSHoKLSAgICAgICBpbnQzMiAgICAgICBlbmQgZnJlcXVlbmN5Ci0gICAgICAgaW50 MzIgICAgICAgc3RhcnQgYW1wbGl0dWRlLCAxPDwxNiBpcyB0aGUgZnVsbCBhbXBsaXR1ZGUKLSAg ICAgICBpbnQzMiAgICAgICBlbmQgYW1wbGl0dWRlCi0gICAgICAgdWludDMyICAgICAgc3RhcnQg cGhhc2UsIDAgaXMgc2luKDApLCAweDIwMDAwMDAwIGlzIHNpbihwaS8yKSwgZXRjLjsKLSAgICAg ICAgICAgICAgICAgICBuIHwgKDE8PDMxKSBtZWFucyB0byBtYXRjaCB0aGUgcGhhc2Ugb2YgcHJl dmlvdXMgY2hhbm5lbCAjbgotCi0gICBwaW5rIG5vaXNlIGludGVydmFsICh0eXBlIGZvdXJjYyAi Tk9JUyIpOgotICAgICAgIGludDMyICAgICAgIHN0YXJ0IGFtcGxpdHVkZQotICAgICAgIGludDMy ICAgICAgIGVuZCBhbXBsaXR1ZGUKLQotICAgVGhlIGlucHV0IHBhY2tldHMgZW5jb2RlIHRoZSB0 aW1lIGFuZCBkdXJhdGlvbiBvZiB0aGUgcmVxdWVzdGVkIHNlZ21lbnQuCi0KLSAgIHBhY2tldDoK LSAgICAgICBpbnQ2NCAgICAgICBzdGFydCB0aW1lc3RhbXAKLSAgICAgICBpbnQzMiAgICAgICBk dXJhdGlvbgotCi0qLwotCi1lbnVtIHdzX2ludGVydmFsX3R5cGUgewotICAgIFdTX1NJTkUgID0g TUtUQUcoJ1MnLCdJJywnTicsJ0UnKSwKLSAgICBXU19OT0lTRSA9IE1LVEFHKCdOJywnTycsJ0kn LCdTJyksCi19OwotCi1zdHJ1Y3Qgd3NfaW50ZXJ2YWwgewotICAgIGludDY0X3QgdHNfc3RhcnQs IHRzX2VuZDsKLSAgICB1aW50NjRfdCBwaGkwLCBkcGhpMCwgZGRwaGk7Ci0gICAgdWludDY0X3Qg YW1wMCwgZGFtcDsKLSAgICB1aW50NjRfdCBwaGksIGRwaGksIGFtcDsKLSAgICB1aW50MzJfdCBj aGFubmVsczsKLSAgICBlbnVtIHdzX2ludGVydmFsX3R5cGUgdHlwZTsKLSAgICBpbnQgbmV4dDsK LX07Ci0KLXN0cnVjdCB3YXZlc3ludGhfY29udGV4dCB7Ci0gICAgaW50NjRfdCBjdXJfdHM7Ci0g ICAgaW50NjRfdCBuZXh0X3RzOwotICAgIGludDMyX3QgKnNpbjsKLSAgICBzdHJ1Y3Qgd3NfaW50 ZXJ2YWwgKmludGVyOwotICAgIHVpbnQzMl90IGRpdGhlcl9zdGF0ZTsKLSAgICB1aW50MzJfdCBw aW5rX3N0YXRlOwotICAgIGludDMyX3QgcGlua19wb29sW1BJTktfVU5JVF07Ci0gICAgdW5zaWdu ZWQgcGlua19uZWVkLCBwaW5rX3BvczsKLSAgICBpbnQgbmJfaW50ZXI7Ci0gICAgaW50IGN1cl9p bnRlcjsKLSAgICBpbnQgbmV4dF9pbnRlcjsKLX07Ci0KLSNkZWZpbmUgTENHX0EgMTI4NDg2NTgz NwotI2RlZmluZSBMQ0dfQyA0MTUwNzU1NjYzCi0jZGVmaW5lIExDR19BSSA4NDkyMjU4OTMgLyog QSpBSSA9IDEgW21vZCAxPDwzMl0gKi8KLQotc3RhdGljIHVpbnQzMl90IGxjZ19uZXh0KHVpbnQz Ml90ICpzKQotewotICAgICpzID0gKnMgKiBMQ0dfQSArIExDR19DOwotICAgIHJldHVybiAqczsK LX0KLQotc3RhdGljIHZvaWQgbGNnX3NlZWsodWludDMyX3QgKnMsIHVpbnQzMl90IGR0KQotewot ICAgIHVpbnQzMl90IGEsIGMsIHQgPSAqczsKLQotICAgIGEgPSBMQ0dfQTsKLSAgICBjID0gTENH X0M7Ci0gICAgd2hpbGUgKGR0KSB7Ci0gICAgICAgIGlmIChkdCAmIDEpCi0gICAgICAgICAgICB0 ID0gYSAqIHQgKyBjOwotICAgICAgICBjICo9IGEgKyAxOyAvKiBjb2VmZmljaWVudHMgZm9yIGEg ZG91YmxlIHN0ZXAgKi8KLSAgICAgICAgYSAqPSBhOwotICAgICAgICBkdCA+Pj0gMTsKLSAgICB9 Ci0gICAgKnMgPSB0OwotfQotCi0vKiBFbXVsYXRlIHBpbmsgbm9pc2UgYnkgc3VtbWluZyB3aGl0 ZSBub2lzZSBhdCB0aGUgc2FtcGxpbmcgZnJlcXVlbmN5LAotICogd2hpdGUgbm9pc2UgYXQgaGFs ZiB0aGUgc2FtcGxpbmcgZnJlcXVlbmN5IChlYWNoIHZhbHVlIHRha2VuIHR3aWNlKSwKLSAqIGV0 Yy4sIHdpdGggYSB0b3RhbCBvZiA4IG9jdGF2ZXMuCi0gKiBUaGlzIGlzIGtub3duIGFzIHRoZSBW b3NzLU1jQ2FydG5leSBhbGdvcml0aG0uICovCi0KLXN0YXRpYyB2b2lkIHBpbmtfZmlsbChzdHJ1 Y3Qgd2F2ZXN5bnRoX2NvbnRleHQgKndzKQotewotICAgIGludDMyX3QgdnRbN10gPSB7IDAgfSwg diA9IDA7Ci0gICAgaW50IGksIGo7Ci0KLSAgICB3cy0+cGlua19wb3MgPSAwOwotICAgIGlmICgh d3MtPnBpbmtfbmVlZCkKLSAgICAgICAgcmV0dXJuOwotICAgIGZvciAoaSA9IDA7IGkgPCBQSU5L X1VOSVQ7IGkrKykgewotICAgICAgICBmb3IgKGogPSAwOyBqIDwgNzsgaisrKSB7Ci0gICAgICAg ICAgICBpZiAoKGkgPj4gaikgJiAxKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg ICAgdiAtPSB2dFtqXTsKLSAgICAgICAgICAgIHZ0W2pdID0gKGludDMyX3QpbGNnX25leHQoJndz LT5waW5rX3N0YXRlKSA+PiAzOwotICAgICAgICAgICAgdiArPSB2dFtqXTsKLSAgICAgICAgfQot ICAgICAgICB3cy0+cGlua19wb29sW2ldID0gdiArICgoaW50MzJfdClsY2dfbmV4dCgmd3MtPnBp bmtfc3RhdGUpID4+IDMpOwotICAgIH0KLSAgICBsY2dfbmV4dCgmd3MtPnBpbmtfc3RhdGUpOyAv KiBzbyB3ZSB1c2UgZXhhY3RseSAyNTYgc3RlcHMgKi8KLX0KLQotLyoqCi0gKiBAcmV0dXJuICAo MTw8NjQpICogYSAvIGIsIHdpdGhvdXQgb3ZlcmZsb3csIGlmIGEgPCBiCi0gKi8KLXN0YXRpYyB1 aW50NjRfdCBmcmFjNjQodWludDY0X3QgYSwgdWludDY0X3QgYikKLXsKLSAgICB1aW50NjRfdCBy ID0gMDsKLSAgICBpbnQgaTsKLQotICAgIGlmIChiIDwgKHVpbnQ2NF90KTEgPDwgMzIpIHsgLyog YiBzbWFsbCwgdXNlIHR3byAzMi1iaXRzIHN0ZXBzICovCi0gICAgICAgIGEgPDw9IDMyOwotICAg ICAgICByZXR1cm4gKChhIC8gYikgPDwgMzIpIHwgKChhICUgYikgPDwgMzIpIC8gYjsKLSAgICB9 Ci0gICAgaWYgKGIgPCAodWludDY0X3QpMSA8PCA0OCkgeyAvKiBiIG1lZGl1bSwgdXNlIGZvdXIg MTYtYml0cyBzdGVwcyAqLwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0gICAg ICAgICAgICBhIDw8PSAxNjsKLSAgICAgICAgICAgIHIgPSAociA8PCAxNikgfCAoYSAvIGIpOwot ICAgICAgICAgICAgYSAlPSBiOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByOwotICAgIH0K LSAgICBmb3IgKGkgPSA2MzsgaSA+PSAwOyBpLS0pIHsKLSAgICAgICAgaWYgKGEgPj0gKHVpbnQ2 NF90KTEgPDwgNjMgfHwgYSA8PCAxID49IGIpIHsKLSAgICAgICAgICAgIHIgfD0gKHVpbnQ2NF90 KTEgPDwgaTsKLSAgICAgICAgICAgIGEgPSAoYSA8PCAxKSAtIGI7Ci0gICAgICAgIH0gZWxzZSB7 Ci0gICAgICAgICAgICBhIDw8PSAxOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiByOwot fQotCi1zdGF0aWMgdWludDY0X3QgcGhpX2F0KHN0cnVjdCB3c19pbnRlcnZhbCAqaW4sIGludDY0 X3QgdHMpCi17Ci0gICAgdWludDY0X3QgZHQgPSB0cyAtICh1aW50NjRfdClpbi0+dHNfc3RhcnQ7 Ci0gICAgdWludDY0X3QgZHQyID0gZHQgJiAxID8gLyogZHQgKiAoZHQgLSAxKSAvIDIgd2l0aG91 dCBvdmVyZmxvdyAqLwotICAgICAgICAgICAgICAgICAgIGR0ICogKChkdCAtIDEpID4+IDEpIDog KGR0ID4+IDEpICogKGR0IC0gMSk7Ci0gICAgcmV0dXJuIGluLT5waGkwICsgZHQgKiBpbi0+ZHBo aTAgKyBkdDIgKiBpbi0+ZGRwaGk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdhdmVzeW50aF9zZWVrKHN0 cnVjdCB3YXZlc3ludGhfY29udGV4dCAqd3MsIGludDY0X3QgdHMpCi17Ci0gICAgaW50ICpsYXN0 LCBpOwotICAgIHN0cnVjdCB3c19pbnRlcnZhbCAqaW47Ci0KLSAgICBsYXN0ID0gJndzLT5jdXJf aW50ZXI7Ci0gICAgZm9yIChpID0gMDsgaSA8IHdzLT5uYl9pbnRlcjsgaSsrKSB7Ci0gICAgICAg IGluID0gJndzLT5pbnRlcltpXTsKLSAgICAgICAgaWYgKHRzIDwgaW4tPnRzX3N0YXJ0KQotICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlmICh0cyA+PSBpbi0+dHNfZW5kKQotICAgICAgICAg ICAgY29udGludWU7Ci0gICAgICAgICpsYXN0ID0gaTsKLSAgICAgICAgbGFzdCA9ICZpbi0+bmV4 dDsKLSAgICAgICAgaW4tPnBoaSAgPSBwaGlfYXQoaW4sIHRzKTsKLSAgICAgICAgaW4tPmRwaGkg PSBpbi0+ZHBoaTAgKyAodHMgLSBpbi0+dHNfc3RhcnQpICogaW4tPmRkcGhpOwotICAgICAgICBp bi0+YW1wICA9IGluLT5hbXAwICArICh0cyAtIGluLT50c19zdGFydCkgKiBpbi0+ZGFtcDsKLSAg ICB9Ci0gICAgd3MtPm5leHRfaW50ZXIgPSBpOwotICAgIHdzLT5uZXh0X3RzID0gaSA8IHdzLT5u Yl9pbnRlciA/IHdzLT5pbnRlcltpXS50c19zdGFydCA6IElORl9UUzsKLSAgICAqbGFzdCA9IC0x OwotICAgIGxjZ19zZWVrKCZ3cy0+ZGl0aGVyX3N0YXRlLCAodWludDMyX3QpdHMgLSAodWludDMy X3Qpd3MtPmN1cl90cyk7Ci0gICAgaWYgKHdzLT5waW5rX25lZWQpIHsKLSAgICAgICAgdWludDY0 X3QgcGlua190c19jdXIgID0gKHdzLT5jdXJfdHMgKyAodWludDY0X3QpUElOS19VTklUIC0gMSkg JiB+KFBJTktfVU5JVCAtIDEpOwotICAgICAgICB1aW50NjRfdCBwaW5rX3RzX25leHQgPSB0cyAm IH4oUElOS19VTklUIC0gMSk7Ci0gICAgICAgIGludCBwb3MgPSB0cyAmIChQSU5LX1VOSVQgLSAx KTsKLSAgICAgICAgbGNnX3NlZWsoJndzLT5waW5rX3N0YXRlLCAodWludDMyX3QpKHBpbmtfdHNf bmV4dCAtIHBpbmtfdHNfY3VyKSAqIDIpOwotICAgICAgICBpZiAocG9zKSB7Ci0gICAgICAgICAg ICBwaW5rX2ZpbGwod3MpOwotICAgICAgICAgICAgd3MtPnBpbmtfcG9zID0gcG9zOwotICAgICAg ICB9IGVsc2UgewotICAgICAgICAgICAgd3MtPnBpbmtfcG9zID0gUElOS19VTklUOwotICAgICAg ICB9Ci0gICAgfQotICAgIHdzLT5jdXJfdHMgPSB0czsKLX0KLQotc3RhdGljIGludCB3YXZlc3lu dGhfcGFyc2VfZXh0cmFkYXRhKEFWQ29kZWNDb250ZXh0ICphdmMpCi17Ci0gICAgc3RydWN0IHdh dmVzeW50aF9jb250ZXh0ICp3cyA9IGF2Yy0+cHJpdl9kYXRhOwotICAgIHN0cnVjdCB3c19pbnRl cnZhbCAqaW47Ci0gICAgdWludDhfdCAqZWRhdGEsICplZGF0YV9lbmQ7Ci0gICAgaW50MzJfdCBm MSwgZjIsIGExLCBhMjsKLSAgICB1aW50MzJfdCBwaGk7Ci0gICAgaW50NjRfdCBkcGhpMSwgZHBo aTIsIGR0LCBjdXJfdHMgPSAtMHg4MDAwMDAwMDAwMDAwMDAwOwotICAgIGludCBpOwotCi0gICAg aWYgKGF2Yy0+ZXh0cmFkYXRhX3NpemUgPCA0KQotICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5W QUwpOwotICAgIGVkYXRhID0gYXZjLT5leHRyYWRhdGE7Ci0gICAgZWRhdGFfZW5kID0gZWRhdGEg KyBhdmMtPmV4dHJhZGF0YV9zaXplOwotICAgIHdzLT5uYl9pbnRlciA9IEFWX1JMMzIoZWRhdGEp OwotICAgIGVkYXRhICs9IDQ7Ci0gICAgaWYgKHdzLT5uYl9pbnRlciA8IDAgfHwgKGVkYXRhX2Vu ZCAtIGVkYXRhKSAvIDI0IDwgd3MtPm5iX2ludGVyKQotICAgICAgICByZXR1cm4gQVZFUlJPUihF SU5WQUwpOwotICAgIHdzLT5pbnRlciA9IGF2X2NhbGxvYyh3cy0+bmJfaW50ZXIsIHNpemVvZigq d3MtPmludGVyKSk7Ci0gICAgaWYgKCF3cy0+aW50ZXIpCi0gICAgICAgIHJldHVybiBBVkVSUk9S KEVOT01FTSk7Ci0gICAgZm9yIChpID0gMDsgaSA8IHdzLT5uYl9pbnRlcjsgaSsrKSB7Ci0gICAg ICAgIGluID0gJndzLT5pbnRlcltpXTsKLSAgICAgICAgaWYgKGVkYXRhX2VuZCAtIGVkYXRhIDwg MjQpCi0gICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwotICAgICAgICBpbi0+dHNf c3RhcnQgPSBBVl9STDY0KGVkYXRhICsgIDApOwotICAgICAgICBpbi0+dHNfZW5kICAgPSBBVl9S TDY0KGVkYXRhICsgIDgpOwotICAgICAgICBpbi0+dHlwZSAgICAgPSBBVl9STDMyKGVkYXRhICsg MTYpOwotICAgICAgICBpbi0+Y2hhbm5lbHMgPSBBVl9STDMyKGVkYXRhICsgMjApOwotICAgICAg ICBlZGF0YSArPSAyNDsKLSAgICAgICAgaWYgKGluLT50c19zdGFydCA8IGN1cl90cyB8fAotICAg ICAgICAgICAgaW4tPnRzX2VuZCA8PSBpbi0+dHNfc3RhcnQgfHwKLSAgICAgICAgICAgICh1aW50 NjRfdClpbi0+dHNfZW5kIC0gaW4tPnRzX3N0YXJ0ID4gSU5UNjRfTUFYCi0gICAgICAgICkKLSAg ICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Ci0gICAgICAgIGN1cl90cyA9IGluLT50 c19zdGFydDsKLSAgICAgICAgZHQgPSBpbi0+dHNfZW5kIC0gaW4tPnRzX3N0YXJ0OwotICAgICAg ICBzd2l0Y2ggKGluLT50eXBlKSB7Ci0gICAgICAgICAgICBjYXNlIFdTX1NJTkU6Ci0gICAgICAg ICAgICAgICAgaWYgKGVkYXRhX2VuZCAtIGVkYXRhIDwgMjAgfHwgYXZjLT5zYW1wbGVfcmF0ZSA8 PSAwKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwotICAgICAg ICAgICAgICAgIGYxICA9IEFWX1JMMzIoZWRhdGEgKyAgMCk7Ci0gICAgICAgICAgICAgICAgZjIg ID0gQVZfUkwzMihlZGF0YSArICA0KTsKLSAgICAgICAgICAgICAgICBhMSAgPSBBVl9STDMyKGVk YXRhICsgIDgpOwotICAgICAgICAgICAgICAgIGEyICA9IEFWX1JMMzIoZWRhdGEgKyAxMik7Ci0g ICAgICAgICAgICAgICAgcGhpID0gQVZfUkwzMihlZGF0YSArIDE2KTsKLSAgICAgICAgICAgICAg ICBlZGF0YSArPSAyMDsKLSAgICAgICAgICAgICAgICBkcGhpMSA9IGZyYWM2NChmMSwgKGludDY0 X3QpYXZjLT5zYW1wbGVfcmF0ZSA8PCAxNik7Ci0gICAgICAgICAgICAgICAgZHBoaTIgPSBmcmFj NjQoZjIsIChpbnQ2NF90KWF2Yy0+c2FtcGxlX3JhdGUgPDwgMTYpOwotICAgICAgICAgICAgICAg IGluLT5kcGhpMCA9IGRwaGkxOwotICAgICAgICAgICAgICAgIGluLT5kZHBoaSA9IChpbnQ2NF90 KShkcGhpMiAtICh1aW50NjRfdClkcGhpMSkgLyBkdDsKLSAgICAgICAgICAgICAgICBpZiAocGhp ICYgMHg4MDAwMDAwMCkgewotICAgICAgICAgICAgICAgICAgICBwaGkgJj0gfjB4ODAwMDAwMDA7 Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwaGkgPj0gaSkKLSAgICAgICAgICAgICAgICAgICAg ICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Ci0gICAgICAgICAgICAgICAgICAgIGluLT5waGkw ID0gcGhpX2F0KCZ3cy0+aW50ZXJbcGhpXSwgaW4tPnRzX3N0YXJ0KTsKLSAgICAgICAgICAgICAg ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpbi0+cGhpMCA9ICh1aW50NjRfdClwaGkg PDwgMzM7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICAgICAgY2FzZSBXU19OT0lTRToKLSAgICAgICAgICAgICAgICBpZiAoZWRhdGFfZW5kIC0gZWRh dGEgPCA4KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwotICAg ICAgICAgICAgICAgIGExICA9IEFWX1JMMzIoZWRhdGEgKyAgMCk7Ci0gICAgICAgICAgICAgICAg YTIgID0gQVZfUkwzMihlZGF0YSArICA0KTsKLSAgICAgICAgICAgICAgICBlZGF0YSArPSA4Owot ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg ICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwotICAgICAgICB9Ci0gICAgICAgIGluLT5hbXAw ID0gKHVpbnQ2NF90KWExIDw8IDMyOwotICAgICAgICBpbi0+ZGFtcCA9IChpbnQ2NF90KSgoKHVp bnQ2NF90KWEyIDw8IDMyKSAtICgodWludDY0X3QpYTEgPDwgMzIpKSAvIGR0OwotICAgIH0KLSAg ICBpZiAoZWRhdGEgIT0gZWRhdGFfZW5kKQotICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwp OwotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgYXZfY29sZCBpbnQgd2F2ZXN5bnRoX2luaXQo QVZDb2RlY0NvbnRleHQgKmF2YykKLXsKLSAgICBzdHJ1Y3Qgd2F2ZXN5bnRoX2NvbnRleHQgKndz ID0gYXZjLT5wcml2X2RhdGE7Ci0gICAgaW50IGksIHI7Ci0KLSAgICBpZiAoYXZjLT5jaF9sYXlv dXQubmJfY2hhbm5lbHMgPiBXU19NQVhfQ0hBTk5FTFMpIHsKLSAgICAgICAgYXZfbG9nKGF2Yywg QVZfTE9HX0VSUk9SLAotICAgICAgICAgICAgICAgIlRoaXMgaW1wbGVtZW50YXRpb24gaXMgbGlt aXRlZCB0byAlZCBjaGFubmVscy5cbiIsCi0gICAgICAgICAgICAgICBXU19NQVhfQ0hBTk5FTFMp OwotICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwotICAgIH0KLSAgICByID0gd2F2ZXN5 bnRoX3BhcnNlX2V4dHJhZGF0YShhdmMpOwotICAgIGlmIChyIDwgMCkgewotICAgICAgICBhdl9s b2coYXZjLCBBVl9MT0dfRVJST1IsICJJbnZhbGlkIGludGVydmFscyBkZWZpbml0aW9ucy5cbiIp OwotICAgICAgICByZXR1cm4gcjsKLSAgICB9Ci0gICAgd3MtPnNpbiA9IGF2X21hbGxvYyhzaXpl b2YoKndzLT5zaW4pIDw8IFNJTl9CSVRTKTsKLSAgICBpZiAoIXdzLT5zaW4pCi0gICAgICAgIHJl dHVybiBBVkVSUk9SKEVOT01FTSk7Ci0gICAgZm9yIChpID0gMDsgaSA8IDEgPDwgU0lOX0JJVFM7 IGkrKykKLSAgICAgICAgd3MtPnNpbltpXSA9IGZsb29yKDMyNzY3ICogc2luKDIgKiBNX1BJICog aSAvICgxIDw8IFNJTl9CSVRTKSkpOwotICAgIHdzLT5kaXRoZXJfc3RhdGUgPSBNS1RBRygnRCcs J0knLCdUJywnSCcpOwotICAgIGZvciAoaSA9IDA7IGkgPCB3cy0+bmJfaW50ZXI7IGkrKykKLSAg ICAgICAgd3MtPnBpbmtfbmVlZCArPSB3cy0+aW50ZXJbaV0udHlwZSA9PSBXU19OT0lTRTsKLSAg ICB3cy0+cGlua19zdGF0ZSA9IE1LVEFHKCdQJywnSScsJ04nLCdLJyk7Ci0gICAgd3MtPnBpbmtf cG9zID0gUElOS19VTklUOwotICAgIHdhdmVzeW50aF9zZWVrKHdzLCAwKTsKLSAgICBhdmMtPnNh bXBsZV9mbXQgPSBBVl9TQU1QTEVfRk1UX1MxNjsKLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGlj IHZvaWQgd2F2ZXN5bnRoX3N5bnRoX3NhbXBsZShzdHJ1Y3Qgd2F2ZXN5bnRoX2NvbnRleHQgKndz LCBpbnQ2NF90IHRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90 ICpjaGFubmVscykKLXsKLSAgICBpbnQzMl90IGFtcCwgKmN2OwotICAgIHVuc2lnbmVkIHZhbDsK LSAgICBzdHJ1Y3Qgd3NfaW50ZXJ2YWwgKmluOwotICAgIGludCBpLCAqbGFzdCwgcGluazsKLSAg ICB1aW50MzJfdCBjLCBhbGxfY2ggPSAwOwotCi0gICAgaSA9IHdzLT5jdXJfaW50ZXI7Ci0gICAg bGFzdCA9ICZ3cy0+Y3VyX2ludGVyOwotICAgIGlmICh3cy0+cGlua19wb3MgPT0gUElOS19VTklU KQotICAgICAgICBwaW5rX2ZpbGwod3MpOwotICAgIHBpbmsgPSB3cy0+cGlua19wb29sW3dzLT5w aW5rX3BvcysrXSA+PiAxNjsKLSAgICB3aGlsZSAoaSA+PSAwKSB7Ci0gICAgICAgIGluID0gJndz LT5pbnRlcltpXTsKLSAgICAgICAgaSA9IGluLT5uZXh0OwotICAgICAgICBpZiAodHMgPj0gaW4t PnRzX2VuZCkgewotICAgICAgICAgICAgKmxhc3QgPSBpOwotICAgICAgICAgICAgY29udGludWU7 Ci0gICAgICAgIH0KLSAgICAgICAgbGFzdCA9ICZpbi0+bmV4dDsKLSAgICAgICAgYW1wID0gaW4t PmFtcCA+PiAzMjsKLSAgICAgICAgaW4tPmFtcCAgKz0gaW4tPmRhbXA7Ci0gICAgICAgIHN3aXRj aCAoaW4tPnR5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgV1NfU0lORToKLSAgICAgICAgICAgICAg ICB2YWwgPSBhbXAgKiAodW5zaWduZWQpd3MtPnNpbltpbi0+cGhpID4+ICg2NCAtIFNJTl9CSVRT KV07Ci0gICAgICAgICAgICAgICAgaW4tPnBoaSAgKz0gaW4tPmRwaGk7Ci0gICAgICAgICAgICAg ICAgaW4tPmRwaGkgKz0gaW4tPmRkcGhpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICAgICAgY2FzZSBXU19OT0lTRToKLSAgICAgICAgICAgICAgICB2YWwgPSBhbXAgKiAodW5zaWdu ZWQpcGluazsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0g ICAgICAgICAgICAgICAgdmFsID0gMDsKLSAgICAgICAgfQotICAgICAgICBhbGxfY2ggfD0gaW4t PmNoYW5uZWxzOwotICAgICAgICBmb3IgKGMgPSBpbi0+Y2hhbm5lbHMsIGN2ID0gY2hhbm5lbHM7 IGM7IGMgPj49IDEsIGN2KyspCi0gICAgICAgICAgICBpZiAoYyAmIDEpCi0gICAgICAgICAgICAg ICAgKmN2ICs9ICh1bnNpZ25lZCl2YWw7Ci0gICAgfQotICAgIHZhbCA9IChpbnQzMl90KWxjZ19u ZXh0KCZ3cy0+ZGl0aGVyX3N0YXRlKSA+PiAxNjsKLSAgICBmb3IgKGMgPSBhbGxfY2gsIGN2ID0g Y2hhbm5lbHM7IGM7IGMgPj49IDEsIGN2KyspCi0gICAgICAgIGlmIChjICYgMSkKLSAgICAgICAg ICAgICpjdiArPSB2YWw7Ci19Ci0KLXN0YXRpYyB2b2lkIHdhdmVzeW50aF9lbnRlcl9pbnRlcnZh bHMoc3RydWN0IHdhdmVzeW50aF9jb250ZXh0ICp3cywgaW50NjRfdCB0cykKLXsKLSAgICBpbnQg Kmxhc3QsIGk7Ci0gICAgc3RydWN0IHdzX2ludGVydmFsICppbjsKLQotICAgIGxhc3QgPSAmd3Mt PmN1cl9pbnRlcjsKLSAgICBmb3IgKGkgPSB3cy0+Y3VyX2ludGVyOyBpID49IDA7IGkgPSB3cy0+ aW50ZXJbaV0ubmV4dCkKLSAgICAgICAgbGFzdCA9ICZ3cy0+aW50ZXJbaV0ubmV4dDsKLSAgICBm b3IgKGkgPSB3cy0+bmV4dF9pbnRlcjsgaSA8IHdzLT5uYl9pbnRlcjsgaSsrKSB7Ci0gICAgICAg IGluID0gJndzLT5pbnRlcltpXTsKLSAgICAgICAgaWYgKHRzIDwgaW4tPnRzX3N0YXJ0KQotICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlmICh0cyA+PSBpbi0+dHNfZW5kKQotICAgICAgICAg ICAgY29udGludWU7Ci0gICAgICAgICpsYXN0ID0gaTsKLSAgICAgICAgbGFzdCA9ICZpbi0+bmV4 dDsKLSAgICAgICAgaW4tPnBoaSA9IGluLT5waGkwOwotICAgICAgICBpbi0+ZHBoaSA9IGluLT5k cGhpMDsKLSAgICAgICAgaW4tPmFtcCA9IGluLT5hbXAwOwotICAgIH0KLSAgICB3cy0+bmV4dF9p bnRlciA9IGk7Ci0gICAgd3MtPm5leHRfdHMgPSBpIDwgd3MtPm5iX2ludGVyID8gd3MtPmludGVy W2ldLnRzX3N0YXJ0IDogSU5GX1RTOwotICAgICpsYXN0ID0gLTE7Ci19Ci0KLXN0YXRpYyBpbnQg d2F2ZXN5bnRoX2RlY29kZShBVkNvZGVjQ29udGV4dCAqYXZjLCBBVkZyYW1lICpmcmFtZSwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnJnb3RfZnJhbWUsIEFWUGFja2V0ICpwYWNr ZXQpCi17Ci0gICAgc3RydWN0IHdhdmVzeW50aF9jb250ZXh0ICp3cyA9IGF2Yy0+cHJpdl9kYXRh OwotICAgIGludDY0X3QgdHM7Ci0gICAgaW50IGR1cmF0aW9uOwotICAgIGludCBzLCBjLCByOwot ICAgIGludDE2X3QgKnBjbTsKLSAgICBpbnQzMl90IGNoYW5uZWxzW1dTX01BWF9DSEFOTkVMU107 Ci0KLSAgICAqcmdvdF9mcmFtZSA9IDA7Ci0gICAgaWYgKHBhY2tldC0+c2l6ZSAhPSAxMikKLSAg ICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Ci0gICAgdHMgPSBBVl9STDY0KHBhY2tl dC0+ZGF0YSk7Ci0gICAgaWYgKHRzICE9IHdzLT5jdXJfdHMpCi0gICAgICAgIHdhdmVzeW50aF9z ZWVrKHdzLCB0cyk7Ci0gICAgZHVyYXRpb24gPSBBVl9STDMyKHBhY2tldC0+ZGF0YSArIDgpOwot ICAgIGlmIChkdXJhdGlvbiA8PSAwKQotICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwot ICAgIGZyYW1lLT5uYl9zYW1wbGVzID0gZHVyYXRpb247Ci0gICAgciA9IGZmX2dldF9idWZmZXIo YXZjLCBmcmFtZSwgMCk7Ci0gICAgaWYgKHIgPCAwKQotICAgICAgICByZXR1cm4gcjsKLSAgICBw Y20gPSAoaW50MTZfdCAqKWZyYW1lLT5kYXRhWzBdOwotICAgIGZvciAocyA9IDA7IHMgPCBkdXJh dGlvbjsgcysrLCB0cys9KHVpbnQ2NF90KTEpIHsKLSAgICAgICAgbWVtc2V0KGNoYW5uZWxzLCAw LCBhdmMtPmNoX2xheW91dC5uYl9jaGFubmVscyAqIHNpemVvZigqY2hhbm5lbHMpKTsKLSAgICAg ICAgaWYgKHRzID49IHdzLT5uZXh0X3RzKQotICAgICAgICAgICAgd2F2ZXN5bnRoX2VudGVyX2lu dGVydmFscyh3cywgdHMpOwotICAgICAgICB3YXZlc3ludGhfc3ludGhfc2FtcGxlKHdzLCB0cywg Y2hhbm5lbHMpOwotICAgICAgICBmb3IgKGMgPSAwOyBjIDwgYXZjLT5jaF9sYXlvdXQubmJfY2hh bm5lbHM7IGMrKykKLSAgICAgICAgICAgICoocGNtKyspID0gY2hhbm5lbHNbY10gPj4gMTY7Ci0g ICAgfQotICAgIHdzLT5jdXJfdHMgKz0gKHVpbnQ2NF90KWR1cmF0aW9uOwotICAgICpyZ290X2Zy YW1lID0gMTsKLSAgICByZXR1cm4gcGFja2V0LT5zaXplOwotfQotCi1zdGF0aWMgYXZfY29sZCBp bnQgd2F2ZXN5bnRoX2Nsb3NlKEFWQ29kZWNDb250ZXh0ICphdmMpCi17Ci0gICAgc3RydWN0IHdh dmVzeW50aF9jb250ZXh0ICp3cyA9IGF2Yy0+cHJpdl9kYXRhOwotCi0gICAgYXZfZnJlZXAoJndz LT5zaW4pOwotICAgIGF2X2ZyZWVwKCZ3cy0+aW50ZXIpOwotICAgIHJldHVybiAwOwotfQotCi1j b25zdCBGRkNvZGVjIGZmX2Zmd2F2ZXN5bnRoX2RlY29kZXIgPSB7Ci0gICAgLnAubmFtZSAgICAg ICAgID0gIndhdmVzeW50aCIsCi0gICAgQ09ERUNfTE9OR19OQU1FKCJXYXZlIHN5bnRoZXNpcyBw c2V1ZG8tY29kZWMiKSwKLSAgICAucC50eXBlICAgICAgICAgPSBBVk1FRElBX1RZUEVfQVVESU8s Ci0gICAgLnAuaWQgICAgICAgICAgID0gQVZfQ09ERUNfSURfRkZXQVZFU1lOVEgsCi0gICAgLnBy aXZfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCB3YXZlc3ludGhfY29udGV4dCksCi0gICAgLmlu aXQgICAgICAgICAgID0gd2F2ZXN5bnRoX2luaXQsCi0gICAgLmNsb3NlICAgICAgICAgID0gd2F2 ZXN5bnRoX2Nsb3NlLAotICAgIEZGX0NPREVDX0RFQ09ERV9DQih3YXZlc3ludGhfZGVjb2RlKSwK LSAgICAucC5jYXBhYmlsaXRpZXMgPSBBVl9DT0RFQ19DQVBfRFIxLAotICAgIC5jYXBzX2ludGVy bmFsICA9IEZGX0NPREVDX0NBUF9JTklUX0NMRUFOVVAsCi19OwpkaWZmIC0tZ2l0IGEvbGliYXZj b2RlYy92ZXJzaW9uX21ham9yLmggYi9saWJhdmNvZGVjL3ZlcnNpb25fbWFqb3IuaAppbmRleCA0 MGRiMjEzNDk5Li5iN2FmNDUxOGM5IDEwMDY0NAotLS0gYS9saWJhdmNvZGVjL3ZlcnNpb25fbWFq b3IuaAorKysgYi9saWJhdmNvZGVjL3ZlcnNpb25fbWFqb3IuaApAQCAtNDEsNiArNDEsNyBAQAog I2RlZmluZSBGRl9BUElfSURDVF9OT05FICAgICAgICAgICAoTElCQVZDT0RFQ19WRVJTSU9OX01B Sk9SIDwgNjEpCiAjZGVmaW5lIEZGX0FQSV9TVlRBVjFfT1BUUyAgICAgICAgIChMSUJBVkNPREVD X1ZFUlNJT05fTUFKT1IgPCA2MSkKICNkZWZpbmUgRkZfQVBJX0FZVVZfQ09ERUNJRCAgICAgICAg KExJQkFWQ09ERUNfVkVSU0lPTl9NQUpPUiA8IDYxKQorI2RlZmluZSBGRl9BUElfRkZXQVZFU1lO VEhfQ09ERUNJRCAoTElCQVZDT0RFQ19WRVJTSU9OX01BSk9SIDwgNjEpCiAjZGVmaW5lIEZGX0FQ SV9WVF9PVVRQVVRfQ0FMTEJBQ0sgIChMSUJBVkNPREVDX1ZFUlNJT05fTUFKT1IgPCA2MSkKICNk ZWZpbmUgRkZfQVBJX0FWQ09ERUNfQ0hST01BX1BPUyAgKExJQkFWQ09ERUNfVkVSU0lPTl9NQUpP UiA8IDYxKQogI2RlZmluZSBGRl9BUElfVlRfSFdBQ0NFTF9DT05URVhUICAoTElCQVZDT0RFQ19W RVJTSU9OX01BSk9SIDwgNjEpCi0tIAoyLjM5LjEKCg== --000000000000a19eed05fb52fbcb Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". --000000000000a19eed05fb52fbcb--