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 B06E44767B for ; Sun, 19 Nov 2023 16:48:42 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 9771A68CE33; Sun, 19 Nov 2023 18:48:38 +0200 (EET) Received: from mail-vs1-f43.google.com (mail-vs1-f43.google.com [209.85.217.43]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B8BC1680276 for ; Sun, 19 Nov 2023 18:48:31 +0200 (EET) Received: by mail-vs1-f43.google.com with SMTP id ada2fe7eead31-45dadc5bf51so1388955137.2 for ; Sun, 19 Nov 2023 08:48:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1700412510; x=1701017310; darn=ffmpeg.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=5Z50srOdN5puY+5AbEnvClbFLFFbXs2h9NQXKcVqjuc=; b=Bud/4yeYe6EMxnoS/0Xir8vXhZEVggCgM/A/E102FyxVDt1BIO0+PKT47uPkh9eHpP AdVlb89DT5U6UYttoxbMAhwo7PDqey4OPx9sB0YYm/naDIUTJk066jIO88WJV/1VAC1D EGSR6nio3ekdwALbGenP6Fotyx8Vti+jIFUKnrlY1nuHdocioPJsESLJZ4TnDIu4sVDW YebtfpWfQDFyPb4dd6zhoUC8vl7JpGjj0V7KqlLtwrtUcumOmzv+8gQTZpnMle37yQgk 47RqLzHTfqohH2kn4S8q9cgIf2UI3HeDmjD1GC78RAIykCNZu4DAnJs9d0Wntac7oCjT y7oQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700412510; x=1701017310; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=5Z50srOdN5puY+5AbEnvClbFLFFbXs2h9NQXKcVqjuc=; b=f25fffBHnH2F//QOaQlmAfef5S4FBy7HuNUClNT2SPrNm2Sek9XbdCOqFZ2uOzG5sY zVIFOfj4sNTtpza9TnoLSqKpNEdihBqZp293lJFO7wq6MiCHV+DLUqtptT40kfGaY6ZI rGtAhuirXNEfk6AS27fbVLfcE7Xf+CIzFZW7ezwHZMmOQXsRIF3Io0rS5qyrNoMD5KfV KOQ5xoq29IdCpqkasksMNUgavCowmD/weMD/ea8P5p5q0O9MCB0kj16yv3Ccfxf8JGfA C/4Bh2NKgezX63gXCPwZvuIAHsF83X++1GiYFS10msPC5DINPZdMUXg7qkwkYtZXB9MC Mijw== X-Gm-Message-State: AOJu0YyujPfgXZJ+5iOmim097Njf/E2yhrxn8ROzG2bysoA0pd+ZWp8f wWrwFAb4MfHNTmaMJig6W2DHLpqNLAAFOuDWQ0ArXRir X-Google-Smtp-Source: AGHT+IFWy1M9/GlJxIu6bp8SvJF4fIS5tJ6jJtQDEkS1flaSAilcdZirOep/bEMazwjB4qO2nwZXwTkTYjFbQKrV2To= X-Received: by 2002:a67:f507:0:b0:462:8cc4:745 with SMTP id u7-20020a67f507000000b004628cc40745mr4369644vsn.22.1700412510253; Sun, 19 Nov 2023 08:48:30 -0800 (PST) MIME-Version: 1.0 From: Paul B Mahol Date: Sun, 19 Nov 2023 17:48:18 +0100 Message-ID: To: FFmpeg development discussions and patches Content-Type: multipart/mixed; boundary="000000000000a59aa5060a8423ba" X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: [FFmpeg-devel] [PATCH] avfilter: ambisonic decoder 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: --000000000000a59aa5060a8423ba Content-Type: text/plain; charset="UTF-8" Attached. --000000000000a59aa5060a8423ba Content-Type: text/x-patch; charset="UTF-8"; name="0001-avfilter-add-ambisonic-decoder.patch" Content-Disposition: attachment; filename="0001-avfilter-add-ambisonic-decoder.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lp5pospi0 RnJvbSAwZmY1YWQ1MjYzNjNiZWQ4NTAyMjM4MTEzNGExNTI2ODJjZGJhNDg3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQYXVsIEIgTWFob2wgPG9uZW1kYUBnbWFpbC5jb20+CkRhdGU6 IFRodSwgMTEgSmFuIDIwMTggMjE6MzI6MjIgKzAxMDAKU3ViamVjdDogW1BBVENIXSBhdmZpbHRl cjogYWRkIGFtYmlzb25pYyBkZWNvZGVyCgpTaWduZWQtb2ZmLWJ5OiBQYXVsIEIgTWFob2wgPG9u ZW1kYUBnbWFpbC5jb20+Ci0tLQogbGliYXZmaWx0ZXIvTWFrZWZpbGUgICAgICAgICAgICAgfCAg ICAxICsKIGxpYmF2ZmlsdGVyL2FmX2FtYmlzb25pYy5jICAgICAgIHwgMjAwMyArKysrKysrKysr KysrKysrKysrKysrKysrKysrKysKIGxpYmF2ZmlsdGVyL2FsbGZpbHRlcnMuYyAgICAgICAgIHwg ICAgMSArCiBsaWJhdmZpbHRlci9hbWJpc29uaWNfdGVtcGxhdGUuYyB8ICAyMjYgKysrKwogNCBm aWxlcyBjaGFuZ2VkLCAyMjMxIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJh dmZpbHRlci9hZl9hbWJpc29uaWMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2ZmlsdGVyL2Ft Ymlzb25pY190ZW1wbGF0ZS5jCgpkaWZmIC0tZ2l0IGEvbGliYXZmaWx0ZXIvTWFrZWZpbGUgYi9s aWJhdmZpbHRlci9NYWtlZmlsZQppbmRleCAwNGQ0NzE3Yjk4Li5jNzgwMDI5ZDFmIDEwMDY0NAot LS0gYS9saWJhdmZpbHRlci9NYWtlZmlsZQorKysgYi9saWJhdmZpbHRlci9NYWtlZmlsZQpAQCAt NzEsNiArNzEsNyBAQCBPQkpTLSQoQ09ORklHX0FMQVRFTkNZX0ZJTFRFUikgICAgICAgICAgICAg ICArPSBmX2xhdGVuY3kubwogT0JKUy0kKENPTkZJR19BTElNSVRFUl9GSUxURVIpICAgICAgICAg ICAgICAgKz0gYWZfYWxpbWl0ZXIubwogT0JKUy0kKENPTkZJR19BTExQQVNTX0ZJTFRFUikgICAg ICAgICAgICAgICAgKz0gYWZfYmlxdWFkcy5vCiBPQkpTLSQoQ09ORklHX0FMT09QX0ZJTFRFUikg ICAgICAgICAgICAgICAgICArPSBmX2xvb3AubworT0JKUy0kKENPTkZJR19BTUJJU09OSUNfRklM VEVSKSAgICAgICAgICAgICAgKz0gYWZfYW1iaXNvbmljLm8KIE9CSlMtJChDT05GSUdfQU1FUkdF X0ZJTFRFUikgICAgICAgICAgICAgICAgICs9IGFmX2FtZXJnZS5vCiBPQkpTLSQoQ09ORklHX0FN RVRBREFUQV9GSUxURVIpICAgICAgICAgICAgICArPSBmX21ldGFkYXRhLm8KIE9CSlMtJChDT05G SUdfQU1JWF9GSUxURVIpICAgICAgICAgICAgICAgICAgICs9IGFmX2FtaXgubwpkaWZmIC0tZ2l0 IGEvbGliYXZmaWx0ZXIvYWZfYW1iaXNvbmljLmMgYi9saWJhdmZpbHRlci9hZl9hbWJpc29uaWMu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5kNGRmM2JkM2YxCi0tLSAv ZGV2L251bGwKKysrIGIvbGliYXZmaWx0ZXIvYWZfYW1iaXNvbmljLmMKQEAgLTAsMCArMSwyMDAz IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDIyIFBhdWwgQiBNYWhvbAorICogQ29weXJpZ2h0 IChjKSAyMDE3IFNhbmNoaXQgU2luaGEKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1w ZWcuCisgKgorICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl ciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwg b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1wZWcgaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBp ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1 MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNB CisgKi8KKworI2luY2x1ZGUgPGZsb2F0Lmg+CisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUg PHN0ZGlvLmg+CisKKyNpbmNsdWRlICJsaWJhdnV0aWwvYXZzdHJpbmcuaCIKKyNpbmNsdWRlICJs aWJhdnV0aWwvY2hhbm5lbF9sYXlvdXQuaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvZmxvYXRfZHNw LmgiCisjaW5jbHVkZSAibGliYXZ1dGlsL29wdC5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC9hdmFz c2VydC5oIgorI2luY2x1ZGUgImF1ZGlvLmgiCisjaW5jbHVkZSAiYXZmaWx0ZXIuaCIKKyNpbmNs dWRlICJmb3JtYXRzLmgiCisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKworI2RlZmluZSBFVkVOIDAK KyNkZWZpbmUgT0REIDEKKyNkZWZpbmUgTUFYX09SREVSIDMKKyNkZWZpbmUgU1FSKHgpICgoeCkg KiAoeCkpCisjZGVmaW5lIE1BWF9DSEFOTkVMUyBTUVIoTUFYX09SREVSICsgMSkKKworZW51bSBB X05BTUUgeworICAgIEFfVywgQV9ZLCBBX1osIEFfWCwgQV9WLCBBX1QsIEFfUiwgQV9TLCBBX1Us IEFfUSwgQV9PLCBBX00sIEFfSywgQV9MLCBBX04sIEFfUCwKK307CisKK2VudW0gTmVhckZpZWxk VHlwZSB7CisgICAgTkZfQVVUTyA9IC0xLAorICAgIE5GX05PTkUsCisgICAgTkZfSU4sCisgICAg TkZfT1VULAorICAgIE5CX05GVFlQRVMsCit9OworCitlbnVtIFByZWNpc2lvblR5cGUgeworICAg IFBfQVVUTyA9IC0xLAorICAgIFBfU0lOR0xFLAorICAgIFBfRE9VQkxFLAorICAgIE5CX1BUWVBF UywKK307CisKK2VudW0gUFR5cGVzIHsKKyAgICBQVF9BTVAsCisgICAgUFRfUk1TLAorICAgIFBU X0VORVJHWSwKKyAgICBQVF9OQlRZUEVTLAorfTsKKworZW51bSBOb3JtVHlwZSB7CisgICAgTjNE LAorICAgIFNOM0QsCisgICAgRlVNQSwKKyAgICBOQl9OVFlQRVMsCit9OworCitlbnVtIERpcmVj dGlvblR5cGUgeworICAgIERfWCwKKyAgICBEX1ksCisgICAgRF9aLAorICAgIERfQywKKyAgICBO Ql9EVFlQRVMsCit9OworCitlbnVtIFNlcXVlbmNlVHlwZSB7CisgICAgTV9BQ04sCisgICAgTV9G VU1BLAorICAgIE1fU0lELAorICAgIE5CX01UWVBFUywKK307CisKK2VudW0gTGF5b3V0cyB7Cisg ICAgTU9OTywKKyAgICBTVEVSRU8sCisgICAgU1RFUkVPX0RPV05NSVgsCisgICAgU1VSUk9VTkQs CisgICAgTDJfMSwKKyAgICBUUklBTkdMRSwKKyAgICBRVUFELAorICAgIFNRVUFSRSwKKyAgICBM NF8wLAorICAgIEw1XzAsCisgICAgTDVfMF9TSURFLAorICAgIEw2XzAsCisgICAgTDdfMCwKKyAg ICBURVRSQSwKKyAgICBDVUJFLAorICAgIE5CX0xBWU9VVFMsCit9OworCit0eXBlZGVmIHN0cnVj dCBOZWFyRmllbGQgeworICAgIGRvdWJsZSBkW01BWF9PUkRFUl07CisgICAgZG91YmxlIHpbTUFY X09SREVSXTsKK30gTmVhckZpZWxkOworCit0eXBlZGVmIHN0cnVjdCBYb3ZlciB7CisgICAgZG91 YmxlIGJbM107CisgICAgZG91YmxlIGFbM107CisgICAgZG91YmxlIHdbMl07Cit9IFhvdmVyOwor CitzdGF0aWMgY29uc3QgZG91YmxlIGdhaW5zXzJkW11bNF0gPQoreworICAgIHsgMSB9LAorICAg IHsgMSwgMC43MDcxMDcgfSwKKyAgICB7IDEsIDAuODY2MDI1LCAwLjUgfSwKKyAgICB7IDEsIDAu OTIzODgsIDAuNzA3MTA3LCAwLjM4MjY4MyB9LAorfTsKKworc3RhdGljIGNvbnN0IGRvdWJsZSBn YWluc18zZFtdWzRdID0KK3sKKyAgICB7IDEgfSwKKyAgICB7IDEsIDAuNTc3MzUwMjcgfSwKKyAg ICB7IDEsIDAuNzc0NTk3LCAwLjQgfSwKKyAgICB7IDEsIDAuODYxMTM2LCAwLjYxMjMzNCwgMC4z MDQ3NDcgfSwKK307CisKK3N0YXRpYyBjb25zdCBkb3VibGUgc2FtZV9kaXN0YW5jZVtdID0KK3sK KyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLAorfTsK Kworc3RhdGljIGNvbnN0IGRvdWJsZSBjdWJlX2F6aW11dGhbXSA9Cit7CisgICAgMzE1LCA0NSwg MTM1LCAyMjUsIDMxNSwgNDUsIDEzNSwgMjI1LAorfTsKKworc3RhdGljIGNvbnN0IGRvdWJsZSBj dWJlX2VsZXZhdGlvbltdID0KK3sKKyAgICAgMzUuMjY0MzksICAzNS4yNjQzOSwgIDM1LjI2NDM5 LCAgMzUuMjY0MzksCisgICAgLTM1LjI2NDM5LCAtMzUuMjY0MzksIC0zNS4yNjQzOSwgLTM1LjI2 NDM5Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHsKKyAgICBjb25zdCBpbnQgICAgICAgICAg ICAgIG9yZGVyOworICAgIGNvbnN0IGludCAgICAgICAgICAgICAgaW5wdXRzOworICAgIGNvbnN0 IGludCAgICAgICAgICAgICAgc3BlYWtlcnM7CisgICAgY29uc3QgaW50ICAgICAgICAgICAgICBu ZWFyX2ZpZWxkOworICAgIGNvbnN0IGludCAgICAgICAgICAgICAgdHlwZTsKKyAgICBjb25zdCBk b3VibGUgICAgICAgICAgIHhvdmVyOworICAgIGNvbnN0IEFWQ2hhbm5lbExheW91dCAgb3V0bGF5 b3V0OworICAgIGNvbnN0IGRvdWJsZSAgICAgICAgICAqc3BlYWtlcnNfYXppbXV0aDsKKyAgICBj b25zdCBkb3VibGUgICAgICAgICAgKnNwZWFrZXJzX2VsZXZhdGlvbjsKKyAgICBjb25zdCBkb3Vi bGUgICAgICAgICAgKnNwZWFrZXJzX2Rpc3RhbmNlOworfSBhbWJpc29uaWNfdGFiW10gPSB7Cisg ICAgW01PTk9dID0geworICAgICAgICAub3JkZXIgPSAwLAorICAgICAgICAuaW5wdXRzID0gMSwK KyAgICAgICAgLnNwZWFrZXJzID0gMSwKKyAgICAgICAgLm5lYXJfZmllbGQgPSBORl9OT05FLAor ICAgICAgICAueG92ZXIgPSAwLiwKKyAgICAgICAgLm91dGxheW91dCA9IChBVkNoYW5uZWxMYXlv dXQpQVZfQ0hBTk5FTF9MQVlPVVRfTU9OTywKKyAgICAgICAgLnNwZWFrZXJzX2F6aW11dGggPSAo Y29uc3QgZG91YmxlWzFdKXsgMC4gfSwKKyAgICAgICAgLnNwZWFrZXJzX2Rpc3RhbmNlID0gKGNv bnN0IGRvdWJsZVsxXSl7IDEuIH0sCisgICAgfSwKKyAgICBbU1RFUkVPXSA9IHsKKyAgICAgICAg Lm9yZGVyID0gMSwKKyAgICAgICAgLmlucHV0cyA9IDQsCisgICAgICAgIC5zcGVha2VycyA9IDIs CisgICAgICAgIC5uZWFyX2ZpZWxkID0gTkZfTk9ORSwKKyAgICAgICAgLnhvdmVyID0gMC4sCisg ICAgICAgIC5vdXRsYXlvdXQgPSAoQVZDaGFubmVsTGF5b3V0KUFWX0NIQU5ORUxfTEFZT1VUX1NU RVJFTywKKyAgICAgICAgLnNwZWFrZXJzX2F6aW11dGggPSAoY29uc3QgZG91YmxlWzJdKXsgLTMw LCAzMH0sCisgICAgICAgIC5zcGVha2Vyc19kaXN0YW5jZSA9IHNhbWVfZGlzdGFuY2UsCisgICAg fSwKKyAgICBbU1RFUkVPX0RPV05NSVhdID0geworICAgICAgICAub3JkZXIgPSAxLAorICAgICAg ICAuaW5wdXRzID0gNCwKKyAgICAgICAgLnNwZWFrZXJzID0gMiwKKyAgICAgICAgLm5lYXJfZmll bGQgPSBORl9OT05FLAorICAgICAgICAueG92ZXIgPSAwLiwKKyAgICAgICAgLm91dGxheW91dCA9 IChBVkNoYW5uZWxMYXlvdXQpQVZfQ0hBTk5FTF9MQVlPVVRfU1RFUkVPX0RPV05NSVgsCisgICAg ICAgIC5zcGVha2Vyc19hemltdXRoID0gKGNvbnN0IGRvdWJsZVsyXSl7IC05MCwgOTAgfSwKKyAg ICAgICAgLnNwZWFrZXJzX2Rpc3RhbmNlID0gc2FtZV9kaXN0YW5jZSwKKyAgICB9LAorICAgIFtT VVJST1VORF0gPSB7CisgICAgICAgIC5vcmRlciA9IDEsCisgICAgICAgIC5pbnB1dHMgPSA0LAor ICAgICAgICAuc3BlYWtlcnMgPSAzLAorICAgICAgICAubmVhcl9maWVsZCA9IE5GX05PTkUsCisg ICAgICAgIC54b3ZlciA9IDAuLAorICAgICAgICAub3V0bGF5b3V0ID0gKEFWQ2hhbm5lbExheW91 dClBVl9DSEFOTkVMX0xBWU9VVF9TVVJST1VORCwKKyAgICAgICAgLnNwZWFrZXJzX2F6aW11dGgg PSAoY29uc3QgZG91YmxlWzNdKXsgLTQ1LCA0NSwgMCB9LAorICAgICAgICAuc3BlYWtlcnNfZGlz dGFuY2UgPSBzYW1lX2Rpc3RhbmNlLAorICAgIH0sCisgICAgW0wyXzFdID0geworICAgICAgICAu b3JkZXIgPSAxLAorICAgICAgICAuaW5wdXRzID0gNCwKKyAgICAgICAgLnNwZWFrZXJzID0gMywK KyAgICAgICAgLm5lYXJfZmllbGQgPSBORl9OT05FLAorICAgICAgICAueG92ZXIgPSAwLiwKKyAg ICAgICAgLm91dGxheW91dCA9IChBVkNoYW5uZWxMYXlvdXQpQVZfQ0hBTk5FTF9MQVlPVVRfMl8x LAorICAgICAgICAuc3BlYWtlcnNfYXppbXV0aCA9IChjb25zdCBkb3VibGVbM10peyAtNDUsIDQ1 LCAxODAgfSwKKyAgICAgICAgLnNwZWFrZXJzX2Rpc3RhbmNlID0gc2FtZV9kaXN0YW5jZSwKKyAg ICB9LAorICAgIFtUUklBTkdMRV0gPSB7CisgICAgICAgIC5vcmRlciA9IDEsCisgICAgICAgIC5p bnB1dHMgPSA0LAorICAgICAgICAuc3BlYWtlcnMgPSAzLAorICAgICAgICAudHlwZSA9IDEsCisg ICAgICAgIC5uZWFyX2ZpZWxkID0gTkZfTk9ORSwKKyAgICAgICAgLnhvdmVyID0gMC4sCisgICAg ICAgIC5vdXRsYXlvdXQgPSBBVl9DSEFOTkVMX0xBWU9VVF9NQVNLKDMsIEFWX0NIX0ZST05UX0NF TlRFUnwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVZf Q0hfQkFDS19MRUZUfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBBVl9DSF9CQUNLX1JJR0hUKSwKKyAgICAgICAgLnNwZWFrZXJzX2F6aW11dGggPSAoY29u c3QgZG91YmxlWzNdKXsgMCwgLTEyMCwgMTIwIH0sCisgICAgICAgIC5zcGVha2Vyc19kaXN0YW5j ZSA9IHNhbWVfZGlzdGFuY2UsCisgICAgfSwKKyAgICBbUVVBRF0gPSB7CisgICAgICAgIC5vcmRl ciA9IDEsCisgICAgICAgIC5pbnB1dHMgPSA0LAorICAgICAgICAuc3BlYWtlcnMgPSA0LAorICAg ICAgICAubmVhcl9maWVsZCA9IE5GX05PTkUsCisgICAgICAgIC54b3ZlciA9IDAuLAorICAgICAg ICAub3V0bGF5b3V0ID0gKEFWQ2hhbm5lbExheW91dClBVl9DSEFOTkVMX0xBWU9VVF9RVUFELAor ICAgICAgICAuc3BlYWtlcnNfYXppbXV0aCA9IChjb25zdCBkb3VibGVbNF0peyAtNDUsIDQ1LCAt MTM1LCAxMzUgfSwKKyAgICAgICAgLnNwZWFrZXJzX2Rpc3RhbmNlID0gc2FtZV9kaXN0YW5jZSwK KyAgICB9LAorICAgIFtTUVVBUkVdID0geworICAgICAgICAub3JkZXIgPSAxLAorICAgICAgICAu aW5wdXRzID0gNCwKKyAgICAgICAgLnNwZWFrZXJzID0gNCwKKyAgICAgICAgLnR5cGUgPSAxLAor ICAgICAgICAubmVhcl9maWVsZCA9IE5GX05PTkUsCisgICAgICAgIC54b3ZlciA9IDAuLAorICAg ICAgICAub3V0bGF5b3V0ID0gQVZfQ0hBTk5FTF9MQVlPVVRfTUFTSyg0LCBBVl9DSF9GUk9OVF9D RU5URVJ8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFW X0NIX0JBQ0tfQ0VOVEVSfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBBVl9DSF9TSURFX0xFRlR8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEFWX0NIX1NJREVfUklHSFQpLAorICAgICAgICAuc3BlYWtlcnNfYXpp bXV0aCA9IChjb25zdCBkb3VibGVbNF0peyAwLCAtOTAsIDE4MCwgOTAgfSwKKyAgICAgICAgLnNw ZWFrZXJzX2Rpc3RhbmNlID0gc2FtZV9kaXN0YW5jZSwKKyAgICB9LAorICAgIFtMNF8wXSA9IHsK KyAgICAgICAgLm9yZGVyID0gMSwKKyAgICAgICAgLmlucHV0cyA9IDQsCisgICAgICAgIC5zcGVh a2VycyA9IDQsCisgICAgICAgIC5uZWFyX2ZpZWxkID0gTkZfTk9ORSwKKyAgICAgICAgLnhvdmVy ID0gMC4sCisgICAgICAgIC5vdXRsYXlvdXQgPSAoQVZDaGFubmVsTGF5b3V0KUFWX0NIQU5ORUxf TEFZT1VUXzRQT0lOVDAsCisgICAgICAgIC5zcGVha2Vyc19hemltdXRoID0gKGNvbnN0IGRvdWJs ZVs0XSl7IC0zMCwgMzAsIDAsIDE4MCB9LAorICAgICAgICAuc3BlYWtlcnNfZGlzdGFuY2UgPSBz YW1lX2Rpc3RhbmNlLAorICAgIH0sCisgICAgW0w1XzBdID0geworICAgICAgICAub3JkZXIgPSAx LAorICAgICAgICAuaW5wdXRzID0gNCwKKyAgICAgICAgLnNwZWFrZXJzID0gNSwKKyAgICAgICAg Lm5lYXJfZmllbGQgPSBORl9OT05FLAorICAgICAgICAueG92ZXIgPSAwLiwKKyAgICAgICAgLm91 dGxheW91dCA9IChBVkNoYW5uZWxMYXlvdXQpQVZfQ0hBTk5FTF9MQVlPVVRfNVBPSU5UMF9CQUNL LAorICAgICAgICAuc3BlYWtlcnNfYXppbXV0aCA9IChjb25zdCBkb3VibGVbNV0peyAtMzAsIDMw LCAwLCAtMTQ1LCAxNDUgfSwKKyAgICAgICAgLnNwZWFrZXJzX2Rpc3RhbmNlID0gc2FtZV9kaXN0 YW5jZSwKKyAgICB9LAorICAgIFtMNV8wX1NJREVdID0geworICAgICAgICAub3JkZXIgPSAxLAor ICAgICAgICAuaW5wdXRzID0gNCwKKyAgICAgICAgLnNwZWFrZXJzID0gNSwKKyAgICAgICAgLm5l YXJfZmllbGQgPSBORl9OT05FLAorICAgICAgICAueG92ZXIgPSAwLiwKKyAgICAgICAgLm91dGxh eW91dCA9IChBVkNoYW5uZWxMYXlvdXQpQVZfQ0hBTk5FTF9MQVlPVVRfNVBPSU5UMCwKKyAgICAg ICAgLnNwZWFrZXJzX2F6aW11dGggPSAoY29uc3QgZG91YmxlWzVdKXsgLTMwLCAzMCwgMCwgLTEx MCwgMTEwIH0sCisgICAgICAgIC5zcGVha2Vyc19kaXN0YW5jZSA9IHNhbWVfZGlzdGFuY2UsCisg ICAgfSwKKyAgICBbTDZfMF0gPSB7CisgICAgICAgIC5vcmRlciA9IDEsCisgICAgICAgIC5pbnB1 dHMgPSA0LAorICAgICAgICAuc3BlYWtlcnMgPSA2LAorICAgICAgICAubmVhcl9maWVsZCA9IE5G X05PTkUsCisgICAgICAgIC54b3ZlciA9IDAuLAorICAgICAgICAub3V0bGF5b3V0ID0gKEFWQ2hh bm5lbExheW91dClBVl9DSEFOTkVMX0xBWU9VVF82UE9JTlQwLAorICAgICAgICAuc3BlYWtlcnNf YXppbXV0aCA9IChjb25zdCBkb3VibGVbNl0peyAtMzAsIDMwLCAwLCAxODAsIC0xMTAsIDExMCB9 LAorICAgICAgICAuc3BlYWtlcnNfZGlzdGFuY2UgPSBzYW1lX2Rpc3RhbmNlLAorICAgIH0sCisg ICAgW0w3XzBdID0geworICAgICAgICAub3JkZXIgPSAxLAorICAgICAgICAuaW5wdXRzID0gNCwK KyAgICAgICAgLnNwZWFrZXJzID0gNywKKyAgICAgICAgLm5lYXJfZmllbGQgPSBORl9OT05FLAor ICAgICAgICAueG92ZXIgPSAwLiwKKyAgICAgICAgLm91dGxheW91dCA9IChBVkNoYW5uZWxMYXlv dXQpQVZfQ0hBTk5FTF9MQVlPVVRfN1BPSU5UMCwKKyAgICAgICAgLnNwZWFrZXJzX2F6aW11dGgg PSAoY29uc3QgZG91YmxlWzddKXsgLTMwLCAzMCwgMCwgLTE0NSwgMTQ1LCAtMTEwLCAxMTAgfSwK KyAgICAgICAgLnNwZWFrZXJzX2Rpc3RhbmNlID0gc2FtZV9kaXN0YW5jZSwKKyAgICB9LAorICAg IFtURVRSQV0gPSB7CisgICAgICAgIC5vcmRlciA9IDEsCisgICAgICAgIC5pbnB1dHMgPSA0LAor ICAgICAgICAuc3BlYWtlcnMgPSA0LAorICAgICAgICAudHlwZSA9IDIsCisgICAgICAgIC5uZWFy X2ZpZWxkID0gTkZfTk9ORSwKKyAgICAgICAgLnhvdmVyID0gMC4sCisgICAgICAgIC5vdXRsYXlv dXQgPSBBVl9DSEFOTkVMX0xBWU9VVF9NQVNLKDQsIEFWX0NIX1NJREVfTEVGVHwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVZfQ0hfU0lERV9SSUdIVHwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVZfQ0hfVE9Q X0NFTlRFUnwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg QVZfQ0hfQk9UVE9NX0ZST05UX0NFTlRFUiksCisgICAgICAgIC5zcGVha2Vyc19hemltdXRoID0g KGNvbnN0IGRvdWJsZVs0XSl7IC05MCwgOTAsIDAsIDE4MCB9LAorICAgICAgICAuc3BlYWtlcnNf ZWxldmF0aW9uID0gKGNvbnN0IGRvdWJsZVs0XSl7IC0zNS4zLCAtMzUuMywgMzUuMywgMzUuMyB9 LAorICAgICAgICAuc3BlYWtlcnNfZGlzdGFuY2UgPSBzYW1lX2Rpc3RhbmNlLAorICAgIH0sCisg ICAgW0NVQkVdID0geworICAgICAgICAub3JkZXIgPSAxLAorICAgICAgICAuaW5wdXRzID0gNCwK KyAgICAgICAgLnNwZWFrZXJzID0gOCwKKyAgICAgICAgLnR5cGUgPSAyLAorICAgICAgICAubmVh cl9maWVsZCA9IE5GX05PTkUsCisgICAgICAgIC54b3ZlciA9IDAuLAorICAgICAgICAub3V0bGF5 b3V0ID0gKEFWQ2hhbm5lbExheW91dClBVl9DSEFOTkVMX0xBWU9VVF9DVUJFLAorICAgICAgICAu c3BlYWtlcnNfYXppbXV0aCA9IGN1YmVfYXppbXV0aCwKKyAgICAgICAgLnNwZWFrZXJzX2VsZXZh dGlvbiA9IGN1YmVfZWxldmF0aW9uLAorICAgICAgICAuc3BlYWtlcnNfZGlzdGFuY2UgPSBzYW1l X2Rpc3RhbmNlLAorICAgIH0sCit9OworCit0eXBlZGVmIHN0cnVjdCBBbWJpc29uaWNDb250ZXh0 IHsKKyAgICBjb25zdCBBVkNsYXNzICpjbGFzczsKKyAgICBpbnQgb3JkZXI7ICAgICAgICAgICAg ICAgICAgICAvKiBPcmRlciBvZiBhbWJpc29uaWMgKi8KKyAgICBpbnQgbGV2ZWw7ICAgICAgICAg ICAgICAgICAgICAvKiBPdXRwdXQgTGV2ZWwgY29tcGVuc2F0aW9uICovCisgICAgZW51bSBMYXlv dXRzIGxheW91dDsgICAgICAgICAgLyogT3V0cHV0IHNwZWFrZXIgbGF5b3V0ICovCisgICAgZW51 bSBOb3JtVHlwZSBzY2FsaW5nX25vcm07ICAgLyogTm9ybWFsaXphdGlvbiBUeXBlICovCisgICAg ZW51bSBQcmVjaXNpb25UeXBlIHByZWNpc2lvbjsgLyogUHJvY2Vzc2luZyBQcmVjaXNpb24gVHlw ZSAqLworICAgIGVudW0gU2VxdWVuY2VUeXBlIHNlcTsgICAgICAgIC8qIElucHV0IENoYW5uZWwg c2VxdWVuY2UgdHlwZSAqLworICAgIGVudW0gTmVhckZpZWxkVHlwZSBuZWFyX2ZpZWxkOyAvKiBO ZWFyIEZpZWxkIGNvbXBlbnNhdGlvbiB0eXBlICovCisKKyAgICBpbnQgaW52ZXJ0W05CX0RUWVBF U107ICAgICAgICAvKiBBeGlzIE9kZC9FdmVuIEludmVydCAqLworICAgIGRvdWJsZSBnYWluWzJd W05CX0RUWVBFU107ICAgIC8qIEF4aXMgT2RkL0V2ZW4gR2FpbnMgKi8KKyAgICBkb3VibGUgcGdh aW5zWzJdW01BWF9PUkRFUisxXTsvKiBMRi9IRiBwZXJjZXB0dWFsIGdhaW5zICovCisKKyAgICBk b3VibGUgeWF3OyAgICAgICAgICAgICAgICAgICAvKiBBbmdsZSBmb3IgeWF3KHgpIHJvdGF0aW9u ICovCisgICAgZG91YmxlIHBpdGNoOyAgICAgICAgICAgICAgICAgLyogQW5nbGUgZm9yIHBpdGNo KHkpIHJvdGF0aW9uICovCisgICAgZG91YmxlIHJvbGw7ICAgICAgICAgICAgICAgICAgLyogQW5n bGUgZm9yIHJvbGwoeikgcm90YXRpb24gKi8KKworICAgIGludCBwZ3R5cGU7CisgICAgaW50IG1h eF9jaGFubmVsczsgICAgICAgICAgICAgLyogTWF4IENoYW5uZWxzICovCisgICAgaW50IG1hdHJp eF9ub3JtOworICAgIGRvdWJsZSBtYXRjaGluZzsKKworICAgIGRvdWJsZSB0ZW1wOworICAgIGRv dWJsZSB4b3Zlcl9mcmVxOworICAgIGRvdWJsZSB4b3Zlcl9yYXRpbzsKKworICAgIFhvdmVyIHhv dmVyWzJdW01BWF9DSEFOTkVMU107CisgICAgTmVhckZpZWxkIG5mWzJdW01BWF9DSEFOTkVMU107 CisKKyAgICBpbnQgICAgc2VxX3RhYltOQl9NVFlQRVNdW01BWF9DSEFOTkVMU107CisgICAgaW50 ICAgIHNlcV9tYXBbTUFYX0NIQU5ORUxTXTsKKyAgICBkb3VibGUgbm9ybV90YWJbTkJfTlRZUEVT XVtNQVhfQ0hBTk5FTFNdOworICAgIGRvdWJsZSByb3RhdGVfbWF0W01BWF9DSEFOTkVMU11bTUFY X0NIQU5ORUxTXTsKKyAgICBkb3VibGUgZG9taW5hbmNlX21hdFs0XVs0XTsKKyAgICBkb3VibGUg ZGlyZWN0aW9uX21hdFs0XVs0XTsKKyAgICBkb3VibGUgem9vbV9tYXRbNF1bNF07CisgICAgZG91 YmxlIGZvY3VzX21hdFs0XVs0XTsKKyAgICBkb3VibGUgcHVzaF9tYXRbNF1bNF07CisgICAgZG91 YmxlIHByZXNzX21hdFs0XVs0XTsKKyAgICBkb3VibGUgbWlycm9yX21hdFtNQVhfQ0hBTk5FTFNd OworICAgIGRvdWJsZSB0cmFuc2Zvcm1fbWF0W01BWF9DSEFOTkVMU11bTUFYX0NIQU5ORUxTXTsK KyAgICBkb3VibGUgZGVjb2RlX21hdFtNQVhfQ0hBTk5FTFNdW01BWF9DSEFOTkVMU107CisgICAg ZG91YmxlIHVbTUFYX0NIQU5ORUxTXVtNQVhfQ0hBTk5FTFNdOworICAgIGRvdWJsZSB2W01BWF9D SEFOTkVMU11bTUFYX0NIQU5ORUxTXTsKKyAgICBkb3VibGUgd1tNQVhfQ0hBTk5FTFNdOworICAg IGRvdWJsZSBsZXZlbF90YWJbTUFYX0NIQU5ORUxTXTsKKyAgICBkb3VibGUgZ2FpbnNfdGFiWzJd W01BWF9DSEFOTkVMU107CisgICAgZG91YmxlIGRvbWluYW5jZVs0XTsKKyAgICBkb3VibGUgZGly ZWN0aW9uWzRdOworICAgIGRvdWJsZSB6b29tWzRdOworICAgIGRvdWJsZSBmb2N1c1s0XTsKKyAg ICBkb3VibGUgcHVzaFs0XTsKKyAgICBkb3VibGUgcHJlc3NbNF07CisKKyAgICBBVkZyYW1lICpz ZnJhbWU7CisgICAgQVZGcmFtZSAqcmZyYW1lOworICAgIEFWRnJhbWUgKmZyYW1lMjsKKworICAg IHZvaWQgKCpuZl9pbml0W01BWF9PUkRFUl0pKE5lYXJGaWVsZCAqbmYsIGRvdWJsZSByYWRpdXMs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHNwZWVkLCBkb3VibGUgcmF0 ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgZ2Fpbik7CisgICAgdm9p ZCAoKm5mX3Byb2Nlc3NbTUFYX09SREVSXSkoTmVhckZpZWxkICpuZiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBBVkZyYW1lICpmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgY2gsIGludCBhZGQsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZG91YmxlIGdhaW4pOworICAgIHZvaWQgKCpwcm9jZXNzKShBVkZpbHRlckNvbnRl eHQgKmN0eCwgQVZGcmFtZSAqaW4sIEFWRnJhbWUgKm91dCk7CisKKyAgICBBVkZsb2F0RFNQQ29u dGV4dCAqZmRzcDsKK30gQW1iaXNvbmljQ29udGV4dDsKKworI2RlZmluZSBPRkZTRVQoeCkgb2Zm c2V0b2YoQW1iaXNvbmljQ29udGV4dCx4KQorI2RlZmluZSBBRiBBVl9PUFRfRkxBR19BVURJT19Q QVJBTXxBVl9PUFRfRkxBR19GSUxURVJJTkdfUEFSQU0KKyNkZWZpbmUgQUZUIEFWX09QVF9GTEFH X0FVRElPX1BBUkFNfEFWX09QVF9GTEFHX0ZJTFRFUklOR19QQVJBTXxBVl9PUFRfRkxBR19SVU5U SU1FX1BBUkFNCisKK3N0YXRpYyBjb25zdCBBVk9wdGlvbiBhbWJpc29uaWNfb3B0aW9uc1tdID0g eworICAgIHsgImxheW91dCIsICJsYXlvdXQgb2Ygb3V0cHV0IiwgT0ZGU0VUKGxheW91dCksIEFW X09QVF9UWVBFX0lOVCwgey5pNjQ9U1RFUkVPfSwgMCwgTkJfTEFZT1VUUy0xLCBBRiAsICJseXQi fSwKKyAgICB7ICAgIm1vbm8iLCAgICJtb25vIGxheW91dCIsICAgMCwgQVZfT1BUX1RZUEVfQ09O U1QsIHsuaTY0PU1PTk99LCAgIDAsIDAsIEFGICwgImx5dCJ9LAorICAgIHsgICAic3RlcmVvIiwg InN0ZXJlbyBsYXlvdXQiLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQ9U1RFUkVPfSwgMCwg MCwgQUYgLCAibHl0In0sCisgICAgeyAgICJkb3dubWl4Iiwic3RlcmVvIGRvd25taXgiLCAwLCBB Vl9PUFRfVFlQRV9DT05TVCwgey5pNjQ9U1RFUkVPX0RPV05NSVh9LCAwLCAwLCBBRiAsICJseXQi fSwKKyAgICB7ICAgIjMuMCIsICAgICIzLjAgbGF5b3V0IiwgICAgMCwgQVZfT1BUX1RZUEVfQ09O U1QsIHsuaTY0PVNVUlJPVU5EfSwgMCwgMCwgQUYgLCAibHl0In0sCisgICAgeyAgICIzLjAoYmFj aykiLCIzLjAoYmFjaykgbGF5b3V0IiwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0PUwyXzF9 LCAwLCAwLCBBRiAsICJseXQifSwKKyAgICB7ICAgInRyaWFuZ2xlIiwidHJpYW5nbGUgbGF5b3V0 IiwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0PVRSSUFOR0xFfSwgMCwgMCwgQUYgLCAibHl0 In0sCisgICAgeyAgICJxdWFkIiwgICAicXVhZCBsYXlvdXQiLCAgIDAsIEFWX09QVF9UWVBFX0NP TlNULCB7Lmk2ND1RVUFEfSwgICAwLCAwLCBBRiAsICJseXQifSwKKyAgICB7ICAgInNxdWFyZSIs ICJzcXVhcmUgbGF5b3V0IiwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0PVNRVUFSRX0sIDAs IDAsIEFGICwgImx5dCJ9LAorICAgIHsgICAiNC4wIiwgICAgIjQuMCBsYXlvdXQiLCAgICAwLCBB Vl9PUFRfVFlQRV9DT05TVCwgey5pNjQ9TDRfMH0sICAgMCwgMCwgQUYgLCAibHl0In0sCisgICAg eyAgICI1LjAiLCAgICAiNS4wIGxheW91dCIsICAgIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2 ND1MNV8wfSwgICAwLCAwLCBBRiAsICJseXQifSwKKyAgICB7ICAgIjUuMChzaWRlKSIsICI1LjAo c2lkZSkgbGF5b3V0IiwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0PUw1XzBfU0lERX0sIDAs IDAsIEFGICwgImx5dCJ9LAorICAgIHsgICAiNi4wIiwgICAgIjYuMCBsYXlvdXQiLCAgICAwLCBB Vl9PUFRfVFlQRV9DT05TVCwgey5pNjQ9TDZfMH0sICAgMCwgMCwgQUYgLCAibHl0In0sCisgICAg eyAgICI3LjAiLCAgICAiNy4wIGxheW91dCIsICAgIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2 ND1MN18wfSwgICAwLCAwLCBBRiAsICJseXQifSwKKyAgICB7ICAgInRldHJhIiwgInRldHJhaGVk cm9uIGxheW91dCIsIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2ND1URVRSQX0sICAgMCwgMCwg QUYgLCAibHl0In0sCisgICAgeyAgICJjdWJlIiwgICAiY3ViZSBsYXlvdXQiLCAgIDAsIEFWX09Q VF9UWVBFX0NPTlNULCB7Lmk2ND1DVUJFfSwgICAwLCAwLCBBRiAsICJseXQifSwKKyAgICB7ICJz ZXF1ZW5jZSIsICJpbnB1dCBjaGFubmVsIHNlcXVlbmNlIiwgT0ZGU0VUKHNlcSksIEFWX09QVF9U WVBFX0lOVCwgey5pNjQ9TV9BQ059LCAgMCwgTkJfTVRZUEVTLTEsIEFGLCAic2VxIn0sCisgICAg eyAgICJhY24iLCAgIkFDTiIsICAwLCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQ9TV9BQ059LCAg MCwgMCwgQUYsICJzZXEifSwKKyAgICB7ICAgImZ1bWEiLCAiRnVNYSIsIDAsIEFWX09QVF9UWVBF X0NPTlNULCB7Lmk2ND1NX0ZVTUF9LCAwLCAwLCBBRiwgInNlcSJ9LAorICAgIHsgICAic2lkIiwg ICJTSUQiLCAgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0PU1fU0lEfSwgIDAsIDAsIEFGLCAi c2VxIn0sCisgICAgeyAic2NhbGluZyIsICJpbnB1dCBzY2FsaW5nIGZvcm1hdCIsIE9GRlNFVChz Y2FsaW5nX25vcm0pLCBBVl9PUFRfVFlQRV9JTlQsICAgey5pNjQ9U04zRH0sIDAsIE5CX05UWVBF Uy0xLCBBRiwgInNjbCJ9LAorICAgIHsgICAibjNkIiwgICJOM0Qgc2NhbGluZyAobm9ybWFsaXNl ZCkiLCAgICAgICAwLCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQ9TjNEfSwgIDAsIDAsIEFGLCAi c2NsIn0sCisgICAgeyAgICJzbjNkIiwgIlNOM0Qgc2NhbGluZyAoc2VtaS1ub3JtYWxpc2VkKSIs IDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2ND1TTjNEfSwgMCwgMCwgQUYsICJzY2wifSwKKyAg ICB7ICAgImZ1bWEiLCAiZnVyc2UgbWFsaGFtIHNjYWxpbmciLCAgICAgICAgICAgMCwgQVZfT1BU X1RZUEVfQ09OU1QsIHsuaTY0PUZVTUF9LCAwLCAwLCBBRiwgInNjbCJ9LAorICAgIHsgIm5lYXJm aWVsZCIsICJuZWFyLWZpZWxkIGNvbXBlbnN0YXRpb24iLCBPRkZTRVQobmVhcl9maWVsZCksIEFW X09QVF9UWVBFX0lOVCwgey5pNjQ9TkZfQVVUT30sIE5GX0FVVE8sIE5CX05GVFlQRVMtMSwgQUYs ICJuZiJ9LAorICAgIHsgICAiYXV0byIsICJhdXRvIiwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsu aTY0PU5GX0FVVE99LCAwLCAwLCBBRiwgIm5mIn0sCisgICAgeyAgICJub25lIiwgIm5vbmUiLCAw LCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQ9TkZfTk9ORX0sIDAsIDAsIEFGLCAibmYifSwKKyAg ICB7ICAgImluIiwgICAiaW4iLCAgIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2ND1ORl9JTn0s ICAgMCwgMCwgQUYsICJuZiJ9LAorICAgIHsgICAib3V0IiwgICJvdXQiLCAgMCwgQVZfT1BUX1RZ UEVfQ09OU1QsIHsuaTY0PU5GX09VVH0sICAwLCAwLCBBRiwgIm5mIn0sCisgICAgeyAibWF0Y2hp bmciLCAic2V0IG1hdGNoaW5nIGZvciBkZWNvZGUgbWF0cml4IiwgT0ZGU0VUKG1hdGNoaW5nKSwg QVZfT1BUX1RZUEVfRE9VQkxFLCB7LmRibD0wfSwgMC4sIDEuLCBBRiwgIm1hdGNoaW5nIiB9LAor ICAgIHsgICAibW9kZSIsICAgInNldCBleGFjdCBtb2RlIG1hdGNoaW5nIiwgIDAsIEFWX09QVF9U WVBFX0NPTlNULCB7LmRibD0wfSwgMCwgMCwgQUYsICJtYXRjaGluZyIgfSwKKyAgICB7ICAgImVu ZXJneSIsICJzZXQgZXZlbiBlbmVyZ3kgbWF0Y2hpbmciLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwg ey5kYmw9MX0sIDAsIDAsIEFGLCAibWF0Y2hpbmciIH0sCisgICAgeyAieG92ZXJmcmVxIiwgImNy b3NzLW92ZXIgZnJlcXVlbmN5IiwgT0ZGU0VUKHhvdmVyX2ZyZXEpLCBBVl9PUFRfVFlQRV9ET1VC TEUsIHsuZGJsPS0xLn0sIC0xLiwgODAwLiwgQUYgfSwKKyAgICB7ICJ4b3ZlcnJhdGlvIiwgImNy b3NzLW92ZXIgSEYvTEYgcmF0aW8iLCBPRkZTRVQoeG92ZXJfcmF0aW8pLCBBVl9PUFRfVFlQRV9E T1VCTEUsIHsuZGJsPTAufSwgLTMwLiwgMzAuLCBBRiB9LAorICAgIHsgInBndHlwZSIsICJzZXQg cGVyY2VwdHVhbCBMRi9IRiBnYWlucyB0eXBlIiwgT0ZGU0VUKHBndHlwZSksIEFWX09QVF9UWVBF X0lOVCwgey5pNjQ9UFRfUk1TfSwgMCwgUFRfTkJUWVBFUy0xLCBBRiwgInBndCIgfSwKKyAgICB7 ICAgImFtcGxpdHVkZSIsIE5VTEwsIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2ND1QVF9BTVB9 LCAgICAwLCAwLCBBRiwgInBndCIgfSwKKyAgICB7ICAgInJtcyIsICAgICAgIE5VTEwsIDAsIEFW X09QVF9UWVBFX0NPTlNULCB7Lmk2ND1QVF9STVN9LCAgICAwLCAwLCBBRiwgInBndCIgfSwKKyAg ICB7ICAgImVuZXJneSIsICAgIE5VTEwsIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2ND1QVF9F TkVSR1l9LCAwLCAwLCBBRiwgInBndCIgfSwKKyAgICB7ICJ0ZW1wIiwgInNldCB0ZW1wZXJhdHVy ZSDCsEMiLCBPRkZTRVQodGVtcCksIEFWX09QVF9UWVBFX0RPVUJMRSwgey5kYmw9MjAufSwgLTUw LiwgNTAuLCBBRiB9LAorICAgIHsgInlhdyIsICAgICJhbmdsZSBmb3IgeWF3ICh4LWF4aXMpIiwg ICBPRkZTRVQoeWF3KSwgICBBVl9PUFRfVFlQRV9ET1VCTEUsIHsuZGJsPTAufSwgLTE4MC4sIDE4 MC4sIEFGVCB9LAorICAgIHsgInBpdGNoIiwgICJhbmdsZSBmb3IgcGl0Y2ggKHktYXhpcykiLCBP RkZTRVQocGl0Y2gpLCBBVl9PUFRfVFlQRV9ET1VCTEUsIHsuZGJsPTAufSwgLTE4MC4sIDE4MC4s IEFGVCB9LAorICAgIHsgInJvbGwiLCAgICJhbmdsZSBmb3Igcm9sbCAoei1heGlzKSIsICBPRkZT RVQocm9sbCksICBBVl9PUFRfVFlQRV9ET1VCTEUsIHsuZGJsPTAufSwgLTE4MC4sIDE4MC4sIEFG VCB9LAorICAgIHsgImxldmVsIiwgICJvdXRwdXQgbGV2ZWwgY29tcGVuc2F0aW9uIiwgT0ZGU0VU KGxldmVsKSwgQVZfT1BUX1RZUEVfQk9PTCwgey5pNjQ9MX0sIDAsIDEsIEFGIH0sCisgICAgeyAi bm9ybSIsICAgImVuYWJsZSBtYXRyaXggbm9ybWFsaXphdGlvbiIsIE9GRlNFVChtYXRyaXhfbm9y bSksIEFWX09QVF9UWVBFX0JPT0wsIHsuaTY0PTB9LCAwLCAxLCBBRiB9LAorICAgIHsgInByZWNp c2lvbiIsICJwcm9jZXNzaW5nIHByZWNpc2lvbiIsIE9GRlNFVChwcmVjaXNpb24pLCBBVl9PUFRf VFlQRV9JTlQsIHsuaTY0PVBfQVVUT30sIFBfQVVUTywgTkJfUFRZUEVTLTEsIEFGLCAicHJlIn0s CisgICAgeyAgICJhdXRvIiwgICAiYXV0byIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw LCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQ9UF9BVVRPfSwgMCwgMCwgQUYsICJwcmUifSwKKyAg ICB7ICAgInNpbmdsZSIsICJzaW5nbGUgZmxvYXRpbmctcG9pbnQgcHJlY2lzaW9uIiwgIDAsIEFW X09QVF9UWVBFX0NPTlNULCB7Lmk2ND1QX1NJTkdMRX0sIDAsIDAsIEFGLCAicHJlIn0sCisgICAg eyAgICJkb3VibGUiLCAiZG91YmxlIGZsb2F0aW5nLXBvaW50IHByZWNpc2lvbiIgLCAwLCBBVl9P UFRfVFlQRV9DT05TVCwgey5pNjQ9UF9ET1VCTEV9LCAwLCAwLCBBRiwgInByZSJ9LAorICAgIHsg ImludmVydF94IiwgImludmVydCBYIiwgT0ZGU0VUKGludmVydFtEX1hdKSwgQVZfT1BUX1RZUEVf RkxBR1MsIHsuaTY0PTB9LCAwLCAzLCBBRlQsICJpeCJ9LAorICAgIHsgICAib2RkIiwgICJpbnZl cnQgb2RkIGhhcm1vbmljcyIsICAwLCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQ9MX0sIDAsIDAs IEFGVCwgIml4In0sCisgICAgeyAgICJldmVuIiwgImludmVydCBldmVuIGhhcm1vbmljcyIsIDAs IEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2ND0yfSwgMCwgMCwgQUZULCAiaXgifSwKKyAgICB7ICJp bnZlcnRfeSIsICJpbnZlcnQgWSIsIE9GRlNFVChpbnZlcnRbRF9ZXSksIEFWX09QVF9UWVBFX0ZM QUdTLCB7Lmk2ND0wfSwgMCwgMywgQUZULCAiaXkifSwKKyAgICB7ICAgIm9kZCIsICAiaW52ZXJ0 IG9kZCBoYXJtb25pY3MiLCAgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0PTF9LCAwLCAwLCBB RlQsICJpeSJ9LAorICAgIHsgICAiZXZlbiIsICJpbnZlcnQgZXZlbiBoYXJtb25pY3MiLCAwLCBB Vl9PUFRfVFlQRV9DT05TVCwgey5pNjQ9Mn0sIDAsIDAsIEFGVCwgIml5In0sCisgICAgeyAiaW52 ZXJ0X3oiLCAiaW52ZXJ0IFoiLCBPRkZTRVQoaW52ZXJ0W0RfWl0pLCBBVl9PUFRfVFlQRV9GTEFH Uywgey5pNjQ9MH0sIDAsIDMsIEFGVCwgIml6In0sCisgICAgeyAgICJvZGQiLCAgImludmVydCBv ZGQgaGFybW9uaWNzIiwgIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2ND0xfSwgMCwgMCwgQUZU LCAiaXoifSwKKyAgICB7ICAgImV2ZW4iLCAiaW52ZXJ0IGV2ZW4gaGFybW9uaWNzIiwgMCwgQVZf T1BUX1RZUEVfQ09OU1QsIHsuaTY0PTJ9LCAwLCAwLCBBRlQsICJpeiJ9LAorICAgIHsgImludmVy dF9jIiwgImNpcmN1bGFyIGludmVydCIsIE9GRlNFVChpbnZlcnRbRF9DXSksIEFWX09QVF9UWVBF X0JPT0wsIHsuaTY0PTB9LCAwLCAxLCBBRlR9LAorICAgIHsgInhfb2RkIiwgICJYIG9kZCBoYXJt b25pY3MgZ2FpbiIsICBPRkZTRVQoZ2FpbltPRERdW0RfWF0pLCAgQVZfT1BUX1RZUEVfRE9VQkxF LCB7LmRibD0xLn0sIDAsIDIuLCBBRlQgfSwKKyAgICB7ICJ4X2V2ZW4iLCAiWCBldmVuIGhhcm1v bmljcyBnYWluIiwgT0ZGU0VUKGdhaW5bRVZFTl1bRF9YXSksIEFWX09QVF9UWVBFX0RPVUJMRSwg ey5kYmw9MS59LCAwLCAyLiwgQUZUIH0sCisgICAgeyAieV9vZGQiLCAgIlkgb2RkIGhhcm1vbmlj cyBnYWluIiwgIE9GRlNFVChnYWluW09ERF1bRF9ZXSksICBBVl9PUFRfVFlQRV9ET1VCTEUsIHsu ZGJsPTEufSwgMCwgMi4sIEFGVCB9LAorICAgIHsgInlfZXZlbiIsICJZIGV2ZW4gaGFybW9uaWNz IGdhaW4iLCBPRkZTRVQoZ2FpbltFVkVOXVtEX1ldKSwgQVZfT1BUX1RZUEVfRE9VQkxFLCB7LmRi bD0xLn0sIDAsIDIuLCBBRlQgfSwKKyAgICB7ICJ6X29kZCIsICAiWiBvZGQgaGFybW9uaWNzIGdh aW4iLCAgT0ZGU0VUKGdhaW5bT0REXVtEX1pdKSwgIEFWX09QVF9UWVBFX0RPVUJMRSwgey5kYmw9 MS59LCAwLCAyLiwgQUZUIH0sCisgICAgeyAiel9ldmVuIiwgIlogZXZlbiBoYXJtb25pY3MgZ2Fp biIsIE9GRlNFVChnYWluW0VWRU5dW0RfWl0pLCBBVl9PUFRfVFlQRV9ET1VCTEUsIHsuZGJsPTEu fSwgMCwgMi4sIEFGVCB9LAorICAgIHsgImNfZ2FpbiIsICJzZXQgY2lyY3VsYXIgZ2FpbiIsICAg ICBPRkZTRVQoZ2FpblswXVtEX0NdKSwgICAgQVZfT1BUX1RZUEVfRE9VQkxFLCB7LmRibD0xLn0s IDAsIDIuLCBBRlQgfSwKKyAgICB7ICJmX2RvbSIsICAic2V0IGZvcndhcmQgZG9taW5hbmNlIiwg T0ZGU0VUKGRvbWluYW5jZVtBX1hdKSwgQVZfT1BUX1RZUEVfRE9VQkxFLCB7LmRibD0wLn0sLTEy LDEyLiwgQUZUIH0sCisgICAgeyAic19kb20iLCAgInNldCBzaWRlIGRvbWluYW5jZSIsICAgIE9G RlNFVChkb21pbmFuY2VbQV9ZXSksIEFWX09QVF9UWVBFX0RPVUJMRSwgey5kYmw9MC59LC0xMiwx Mi4sIEFGVCB9LAorICAgIHsgInZfZG9tIiwgICJzZXQgdmVydGljYWwgZG9taW5hbmNlIixPRkZT RVQoZG9taW5hbmNlW0FfWl0pLCBBVl9PUFRfVFlQRV9ET1VCTEUsIHsuZGJsPTAufSwtMTIsMTIu LCBBRlQgfSwKKyAgICB7ICJvX2RpciIsICAic2V0IG9yaWdpbiBzb3VuZGZpZWxkIGRpcmVjdGl2 aXR5IiwgT0ZGU0VUKGRpcmVjdGlvbltBX1ddKSwgQVZfT1BUX1RZUEVfRE9VQkxFLCB7LmRibD0w Ln0sMCw5MC4sIEFGVCB9LAorICAgIHsgInhfZGlyIiwgICJzZXQgWC1heGlzIHNvdW5kZmllbGQg ZGlyZWN0aXZpdHkiLCBPRkZTRVQoZGlyZWN0aW9uW0FfWF0pLCBBVl9PUFRfVFlQRV9ET1VCTEUs IHsuZGJsPTAufSwwLDkwLiwgQUZUIH0sCisgICAgeyAieV9kaXIiLCAgInNldCBZLWF4aXMgc291 bmRmaWVsZCBkaXJlY3Rpdml0eSIsIE9GRlNFVChkaXJlY3Rpb25bQV9ZXSksIEFWX09QVF9UWVBF X0RPVUJMRSwgey5kYmw9MC59LDAsOTAuLCBBRlQgfSwKKyAgICB7ICJ6X2RpciIsICAic2V0IFot YXhpcyBzb3VuZGZpZWxkIGRpcmVjdGl2aXR5IiwgT0ZGU0VUKGRpcmVjdGlvbltBX1pdKSwgQVZf T1BUX1RZUEVfRE9VQkxFLCB7LmRibD0wLn0sMCw5MC4sIEFGVCB9LAorICAgIHsgInhfem9vbSIs ICJzZXQgWC1heGlzIHNvdW5kZmllbGQgem9vbSIsIE9GRlNFVCh6b29tW0FfWF0pLCBBVl9PUFRf VFlQRV9ET1VCTEUsIHsuZGJsPTAufSwtOTAsOTAuLCBBRlQgfSwKKyAgICB7ICJ5X3pvb20iLCAi c2V0IFktYXhpcyBzb3VuZGZpZWxkIHpvb20iLCBPRkZTRVQoem9vbVtBX1ldKSwgQVZfT1BUX1RZ UEVfRE9VQkxFLCB7LmRibD0wLn0sLTkwLDkwLiwgQUZUIH0sCisgICAgeyAiel96b29tIiwgInNl dCBaLWF4aXMgc291bmRmaWVsZCB6b29tIiwgT0ZGU0VUKHpvb21bQV9aXSksIEFWX09QVF9UWVBF X0RPVUJMRSwgey5kYmw9MC59LC05MCw5MC4sIEFGVCB9LAorICAgIHsgInhfZm9jdXMiLCAic2V0 IFgtYXhpcyBzb3VuZGZpZWxkIGZvY3VzIiwgT0ZGU0VUKGZvY3VzW0FfWF0pLCBBVl9PUFRfVFlQ RV9ET1VCTEUsIHsuZGJsPTAufSwtOTAsOTAuLCBBRlQgfSwKKyAgICB7ICJ5X2ZvY3VzIiwgInNl dCBZLWF4aXMgc291bmRmaWVsZCBmb2N1cyIsIE9GRlNFVChmb2N1c1tBX1ldKSwgQVZfT1BUX1RZ UEVfRE9VQkxFLCB7LmRibD0wLn0sLTkwLDkwLiwgQUZUIH0sCisgICAgeyAiel9mb2N1cyIsICJz ZXQgWi1heGlzIHNvdW5kZmllbGQgZm9jdXMiLCBPRkZTRVQoZm9jdXNbQV9aXSksIEFWX09QVF9U WVBFX0RPVUJMRSwgey5kYmw9MC59LC05MCw5MC4sIEFGVCB9LAorICAgIHsgInhfcHVzaCIsICJz ZXQgWC1heGlzIHNvdW5kZmllbGQgcHVzaCIsIE9GRlNFVChwdXNoW0FfWF0pLCBBVl9PUFRfVFlQ RV9ET1VCTEUsIHsuZGJsPTAufSwtOTAsOTAuLCBBRlQgfSwKKyAgICB7ICJ5X3B1c2giLCAic2V0 IFktYXhpcyBzb3VuZGZpZWxkIHB1c2giLCBPRkZTRVQocHVzaFtBX1ldKSwgQVZfT1BUX1RZUEVf RE9VQkxFLCB7LmRibD0wLn0sLTkwLDkwLiwgQUZUIH0sCisgICAgeyAiel9wdXNoIiwgInNldCBa LWF4aXMgc291bmRmaWVsZCBwdXNoIiwgT0ZGU0VUKHB1c2hbQV9aXSksIEFWX09QVF9UWVBFX0RP VUJMRSwgey5kYmw9MC59LC05MCw5MC4sIEFGVCB9LAorICAgIHsgInhfcHJlc3MiLCAic2V0IFgt YXhpcyBzb3VuZGZpZWxkIHByZXNzIiwgT0ZGU0VUKHByZXNzW0FfWF0pLCBBVl9PUFRfVFlQRV9E T1VCTEUsIHsuZGJsPTAufSwtOTAsOTAuLCBBRlQgfSwKKyAgICB7ICJ5X3ByZXNzIiwgInNldCBZ LWF4aXMgc291bmRmaWVsZCBwcmVzcyIsIE9GRlNFVChwcmVzc1tBX1ldKSwgQVZfT1BUX1RZUEVf RE9VQkxFLCB7LmRibD0wLn0sLTkwLDkwLiwgQUZUIH0sCisgICAgeyAiel9wcmVzcyIsICJzZXQg Wi1heGlzIHNvdW5kZmllbGQgcHJlc3MiLCBPRkZTRVQocHJlc3NbQV9aXSksIEFWX09QVF9UWVBF X0RPVUJMRSwgey5kYmw9MC59LC05MCw5MC4sIEFGVCB9LAorICAgIHtOVUxMfQorfTsKKworc3Rh dGljIGRvdWJsZSBkYjJhKGRvdWJsZSBkYikKK3sKKyAgICByZXR1cm4gcG93KDEwLiwgZGIgLyAy MC4pOworfQorCitzdGF0aWMgZG91YmxlIHB5dGhhZyhkb3VibGUgYSwgZG91YmxlIGIpCit7Cisg ICAgZG91YmxlIGFic2EgPSBmYWJzKGEpOworICAgIGRvdWJsZSBhYnNiID0gZmFicyhiKTsKKwor ICAgIGlmIChhYnNhID4gYWJzYikgeworICAgICAgICByZXR1cm4gYWJzYSAqIHNxcnQoMS4wK1NR UihhYnNiL2Fic2EpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoYWJzYiA9PSAwLjApCisg ICAgICAgICAgICByZXR1cm4gMC4wOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4g YWJzYiAqIHNxcnQoMS4wK1NRUihhYnNhL2Fic2IpKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lk IG1zdGVwKGludCBtLCBpbnQgbiwgZG91YmxlIGgsIGludCBsLCBpbnQgaSwKKyAgICAgICAgICAg ICAgICAgIGRvdWJsZSB1W01BWF9DSEFOTkVMU11bTUFYX0NIQU5ORUxTXSkKK3sKKyAgICBmb3Ig KGludCBqID0gbDsgaiA8IG47IGorKykgeworICAgICAgICBkb3VibGUgcyA9IDAuMCwgZjsKKwor ICAgICAgICBmb3IgKGludCBrID0gaTsgayA8IG07IGsrKykKKyAgICAgICAgICAgIHMgKz0gdVtr XVtpXSAqIHVba11bal07CisgICAgICAgIGYgPSBzIC8gaDsKKyAgICAgICAgZm9yIChpbnQgayA9 IGk7IGsgPCBtOyBrKyspCisgICAgICAgICAgICB1W2tdW2pdICs9IGYgKiB1W2tdW2ldOworICAg IH0KK30KKworc3RhdGljIHZvaWQgc3ZkY21wKEFWRmlsdGVyQ29udGV4dCAqY3R4LAorICAgICAg ICAgICAgICAgICAgIGRvdWJsZSB1W01BWF9DSEFOTkVMU11bTUFYX0NIQU5ORUxTXSwKKyAgICAg ICAgICAgICAgICAgICBpbnQgbSwgaW50IG4sCisgICAgICAgICAgICAgICAgICAgZG91YmxlICpx LCBkb3VibGUgdltNQVhfQ0hBTk5FTFNdW01BWF9DSEFOTkVMU10pCit7CisgICAgZG91YmxlIGVb TUFYX0NIQU5ORUxTXSA9IHsgMC4gfTsKKyAgICBkb3VibGUgZywgeCwgcywgZiwgaCwgeiwgYywg eTsKKyAgICBkb3VibGUgZXBzID0gMWUtMTU7CisgICAgY29uc3QgZG91YmxlIHRvbCA9IDFlLTY0 IC8gZXBzOworICAgIGNvbnN0IGludCBpdG1heCA9IDUwOworICAgIGludCBsLCBsMTsKKworICAg IGF2X2Fzc2VydDAoMS4wICsgZXBzID4gMS4wKTsKKyAgICBhdl9hc3NlcnQwKHRvbCA+IDAuMCk7 CisKKyAgICBnID0gMC4wOworICAgIHggPSAwLjA7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8 IG47IGkrKykgeworICAgICAgICBzID0gMC4wOworCisgICAgICAgIGVbaV0gPSBnOworICAgICAg ICBsID0gaSArIDE7CisgICAgICAgIGZvciAoaW50IGogPSBpOyBqIDwgbTsgaisrKQorICAgICAg ICAgICAgcyArPSBTUVIodVtqXVtpXSk7CisgICAgICAgIGlmIChzIDw9IHRvbCkgeworICAgICAg ICAgICAgZyA9IDAuMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGYgPSB1W2ldW2ld OworICAgICAgICAgICAgZyA9IGYgPCAwLjAgPyBzcXJ0KHMpIDogLXNxcnQocyk7CisgICAgICAg ICAgICBoID0gZiAqIGcgLSBzOworICAgICAgICAgICAgdVtpXVtpXSA9IGYgLSBnOworICAgICAg ICAgICAgbXN0ZXAobSwgbiwgaCwgbCwgaSwgdSk7CisgICAgICAgIH0KKworICAgICAgICBxW2ld ID0gZzsKKyAgICAgICAgcyA9IDAuMDsKKyAgICAgICAgZm9yIChpbnQgaiA9IGw7IGogPCBuOyBq KyspCisgICAgICAgICAgICBzICs9IHVbaV1bal0qdVtpXVtqXTsKKyAgICAgICAgaWYgKHMgPD0g dG9sKSB7CisgICAgICAgICAgICBnID0gMC4wOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg ICAgZiA9IHVbaV1baSsxXTsKKyAgICAgICAgICAgIGcgPSBmIDwgMC4wID8gc3FydChzKSA6IC1z cXJ0KHMpOworICAgICAgICAgICAgaCA9IGYqZyAtIHM7CisgICAgICAgICAgICB1W2ldW2krMV0g PSBmLWc7CisgICAgICAgICAgICBmb3IgKGludCBqID0gbDsgaiA8IG47IGorKykKKyAgICAgICAg ICAgICAgICBlW2pdID0gdVtpXVtqXSAvIGg7CisgICAgICAgICAgICBmb3IgKGludCBqID0gbDsg aiA8IG07IGorKykgeworICAgICAgICAgICAgICAgIHMgPSAwLjA7CisgICAgICAgICAgICAgICAg Zm9yIChpbnQgayA9IGw7IGsgPCBuOyBrKyspCisgICAgICAgICAgICAgICAgICAgICBzICs9IHVb al1ba10qdVtpXVtrXTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBrID0gbDsgayA8IG47IGsr KykKKyAgICAgICAgICAgICAgICAgICAgIHVbal1ba10gKz0gcyAqIGVba107CisgICAgICAgICAg ICB9CisgICAgICAgIH0KKworICAgICAgICB5ID0gZmFicyhxW2ldKStmYWJzKGVbaV0pOworICAg ICAgICBpZiAoeSA+IHgpCisgICAgICAgICAgICB4ID0geTsKKyAgICB9CisKKyAgICBmb3IgKGlu dCBpID0gbiAtIDE7IGkgPiAtMTsgaS0tKSB7CisgICAgICAgIGlmIChnICE9IDAuMCkgeworICAg ICAgICAgICAgaCA9IGcqdVtpXVtpKzFdOworCisgICAgICAgICAgICBmb3IgKGludCBqID0gbDsg aiA8IG47IGorKykKKyAgICAgICAgICAgICAgICAgdltqXVtpXSA9IHVbaV1bal0gLyBoOworCisg ICAgICAgICAgICBmb3IgKGludCBqID0gbDsgaiA8IG47IGorKykgeworICAgICAgICAgICAgICAg IHMgPSAwLjA7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgayA9IGw7IGsgPCBuOyBrKyspCisg ICAgICAgICAgICAgICAgICAgIHMgKz0gdVtpXVtrXSAqIHZba11bal07CisgICAgICAgICAgICAg ICAgZm9yIChpbnQgayA9IGw7IGsgPCBuOyBrKyspCisgICAgICAgICAgICAgICAgICAgIHZba11b al0gKz0gcyAqIHZba11baV07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBm b3IgKGludCBqID0gbDsgaiA8IG47IGorKykgeworICAgICAgICAgICAgdltpXVtqXSA9IDAuMDsK KyAgICAgICAgICAgIHZbal1baV0gPSAwLjA7CisgICAgICAgIH0KKworICAgICAgICB2W2ldW2ld ID0gMS4wOworICAgICAgICBnID0gZVtpXTsKKyAgICAgICAgbCA9IGk7CisgICAgfQorCisgICAg Zm9yIChpbnQgaSA9IG4gLSAxOyBpID4gLTE7IGktLSkgeworICAgICAgICBsID0gaSsxOworICAg ICAgICBnID0gcVtpXTsKKyAgICAgICAgZm9yIChpbnQgaiA9IGw7IGogPCBuOyBqKyspCisgICAg ICAgICAgICB1W2ldW2pdID0gMC4wOworICAgICAgICBpZiAoZyAhPSAwLjApIHsKKyAgICAgICAg ICAgIGggPSB1W2ldW2ldICogZzsKKyAgICAgICAgICAgIG1zdGVwKG0sIG4sIGgsIGwsIGksIHUp OworICAgICAgICAgICAgZm9yIChpbnQgaiA9IGk7IGogPCBtOyBqKyspCisgICAgICAgICAgICAg ICAgdVtqXVtpXSA9IHVbal1baV0gLyBnOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg Zm9yIChpbnQgaiA9IGk7IGogPCBtOyBqKyspCisgICAgICAgICAgICAgICAgdVtqXVtpXSA9IDAu MDsKKyAgICAgICAgfQorICAgICAgICB1W2ldW2ldICs9IDEuMDsKKyAgICB9CisKKyAgICBlcHMg PSBlcHMgKiB4OworICAgIGZvciAoaW50IGsgPSBuLTE7IGsgPj0gMDsgay0tKSB7CisgICAgICAg IGZvciAoaW50IGl0ZXJhdGlvbiA9IDA7IGl0ZXJhdGlvbiA8IGl0bWF4OyBpdGVyYXRpb24rKykg eworICAgICAgICAgICAgaW50IGdvdG9fdGVzdF9mX2NvbnZlcmdlbmNlID0gMDsKKworICAgICAg ICAgICAgZm9yIChsID0gazsgbCA+PSAwOyBsLS0pIHsKKyAgICAgICAgICAgICAgICBnb3RvX3Rl c3RfZl9jb252ZXJnZW5jZSA9IDA7CisgICAgICAgICAgICAgICAgaWYgKGZhYnMoZVtsXSkgPD0g ZXBzKSB7CisgICAgICAgICAgICAgICAgICAgIGdvdG9fdGVzdF9mX2NvbnZlcmdlbmNlID0gMTsK KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg ICAgICAgICAgYXZfYXNzZXJ0MChsID4gMCk7CisgICAgICAgICAgICAgICAgaWYgKGZhYnMocVts LTFdKSA8PSBlcHMpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor ICAgICAgICAgICAgaWYgKCFnb3RvX3Rlc3RfZl9jb252ZXJnZW5jZSkgeworICAgICAgICAgICAg ICAgIGMgPSAwLjA7CisgICAgICAgICAgICAgICAgcyA9IDEuMDsKKyAgICAgICAgICAgICAgICBs MSA9IGwtMTsKKyAgICAgICAgICAgICAgICBhdl9hc3NlcnQwKGwxID49IDApOworICAgICAgICAg ICAgICAgIGZvciAoaW50IGkgPSBsOyBpIDw9IGs7IGkrKykgeworICAgICAgICAgICAgICAgICAg ICBmID0gcyplW2ldOworICAgICAgICAgICAgICAgICAgICBlW2ldID0gYyplW2ldOworCisgICAg ICAgICAgICAgICAgICAgIGlmIChmYWJzKGYpIDw9IGVwcykKKyAgICAgICAgICAgICAgICAgICAg ICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgIGcgPSBxW2ldOworICAgICAgICAgICAg ICAgICAgICBoID0gcHl0aGFnKGYsZyk7CisgICAgICAgICAgICAgICAgICAgIHFbaV0gPSBoOwor ICAgICAgICAgICAgICAgICAgICBjID0gZy9oOworICAgICAgICAgICAgICAgICAgICBzID0gLWYv aDsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBtOyBqKyspIHsKKyAg ICAgICAgICAgICAgICAgICAgICAgIHkgPSB1W2pdW2wxXTsKKyAgICAgICAgICAgICAgICAgICAg ICAgIHogPSB1W2pdW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgdVtqXVtsMV0gPSB5KmMr eipzOworICAgICAgICAgICAgICAgICAgICAgICAgdVtqXVtpXSA9IC15KnMreipjOworICAgICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg ICAgICAgeiA9IHFba107CisgICAgICAgICAgICBpZiAobCA9PSBrKSB7CisgICAgICAgICAgICAg ICAgaWYgKHogPD0gMC4wKSB7CisgICAgICAgICAgICAgICAgICAgIHFba10gPSAtejsKKyAgICAg ICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBuOyBqKyspCisgICAgICAgICAgICAg ICAgICAgICAgICB2W2pdW2tdID0gLXZbal1ba107CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaXRlcmF0 aW9uID49IGl0bWF4LTEpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIHgg PSBxW2xdOworICAgICAgICAgICAgYXZfYXNzZXJ0MChrID4gMCk7CisgICAgICAgICAgICB5ID0g cVtrLTFdOworICAgICAgICAgICAgZyA9IGVbay0xXTsKKyAgICAgICAgICAgIGggPSBlW2tdOwor ICAgICAgICAgICAgZiA9ICgoeS16KSooeSt6KSsoZy1oKSooZytoKSkvKDIuMCpoKnkpOworICAg ICAgICAgICAgZyA9IHB5dGhhZyhmLDEuMCk7CisgICAgICAgICAgICBpZiAoZiA8IDAuKQorICAg ICAgICAgICAgICAgIGYgPSAoKHgteikqKHgreikraCooeS8oZi1nKS1oKSkveDsKKyAgICAgICAg ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBmID0gKCh4LXopKih4K3opK2gqKHkvKGYrZyktaCkp L3g7CisgICAgICAgICAgICBjID0gMS4wOworICAgICAgICAgICAgcyA9IDEuMDsKKyAgICAgICAg ICAgIGZvciAoaW50IGkgPSBsKzE7IGkgPCBrKzE7IGkrKykgeworICAgICAgICAgICAgICAgIGcg PSBlW2ldOworICAgICAgICAgICAgICAgIHkgPSBxW2ldOworICAgICAgICAgICAgICAgIGggPSBz Kmc7CisgICAgICAgICAgICAgICAgZyA9IGMqZzsKKyAgICAgICAgICAgICAgICB6ID0gcHl0aGFn KGYsaCk7CisgICAgICAgICAgICAgICAgZVtpLTFdID0gejsKKyAgICAgICAgICAgICAgICBjID0g Zi96OworICAgICAgICAgICAgICAgIHMgPSBoL3o7CisgICAgICAgICAgICAgICAgZiA9IHgqYytn KnM7CisgICAgICAgICAgICAgICAgZyA9IC14KnMrZypjOworICAgICAgICAgICAgICAgIGggPSB5 KnM7CisgICAgICAgICAgICAgICAgeSA9IHkqYzsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBq ID0gMDsgaiA8IG47IGorKykgeworICAgICAgICAgICAgICAgICAgICB4ID0gdltqXVtpLTFdOwor ICAgICAgICAgICAgICAgICAgICB6ID0gdltqXVtpXTsKKyAgICAgICAgICAgICAgICAgICAgdltq XVtpLTFdID0geCpjK3oqczsKKyAgICAgICAgICAgICAgICAgICAgdltqXVtpXSA9IC14KnMreipj OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB6ID0gcHl0aGFnKGYsaCk7Cisg ICAgICAgICAgICAgICAgcVtpLTFdID0gejsKKyAgICAgICAgICAgICAgICBjID0gZi96OworICAg ICAgICAgICAgICAgIHMgPSBoL3o7CisgICAgICAgICAgICAgICAgZiA9IGMqZytzKnk7CisgICAg ICAgICAgICAgICAgeCA9IC1zKmcrYyp5OworICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAw OyBqIDwgbTsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgIHkgPSB1W2pdW2ktMV07CisgICAg ICAgICAgICAgICAgICAgIHogPSB1W2pdW2ldOworICAgICAgICAgICAgICAgICAgICB1W2pdW2kt MV0gPSB5KmMreipzOworICAgICAgICAgICAgICAgICAgICB1W2pdW2ldID0gLXkqcyt6KmM7Cisg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBlW2xdID0gMC4w OworICAgICAgICAgICAgZVtrXSA9IGY7CisgICAgICAgICAgICBxW2tdID0geDsKKyAgICAgICAg fQorICAgIH0KKworICAgIGF2X2xvZyhjdHgsIEFWX0xPR19ERUJVRywgInVtOlxuIik7CisgICAg Zm9yIChpbnQgaSA9IDA7IGkgPCBtOyBpKyspIHsKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGog PCBtOyBqKyspCisgICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfREVCVUcsICJcdCVnLCIs IHVbaV1bal0pOworICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfREVCVUcsICJcbiIpOworICAg IH0KKworICAgIGF2X2xvZyhjdHgsIEFWX0xPR19ERUJVRywgInd2OlxuIik7CisgICAgZm9yIChp bnQgaSA9IDA7IGkgPCBuOyBpKyspCisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19ERUJVRywg Ilx0JWcsIiwgcVtpXSk7CisgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0RFQlVHLCAiXG4iKTsKKwor ICAgIGF2X2xvZyhjdHgsIEFWX0xPR19ERUJVRywgInZtOlxuIik7CisgICAgZm9yIChpbnQgaSA9 IDA7IGkgPCBuOyBpKyspIHsKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBuOyBqKyspCisg ICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfREVCVUcsICJcdCVnIiwgdltpXVtqXSk7Cisg ICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19ERUJVRywgIlxuIik7CisgICAgfQorfQorCitzdGF0 aWMgaW50IHF1ZXJ5X2Zvcm1hdHMoQVZGaWx0ZXJDb250ZXh0ICpjdHgpCit7CisgICAgQW1iaXNv bmljQ29udGV4dCAqcyA9IGN0eC0+cHJpdjsKKyAgICBBVkZpbHRlckZvcm1hdHMgKmZvcm1hdHMg PSBOVUxMOworICAgIEFWRmlsdGVyQ2hhbm5lbExheW91dHMgKm91dGxheW91dHMgPSBOVUxMOwor ICAgIEFWRmlsdGVyQ2hhbm5lbExheW91dHMgKmlubGF5b3V0cyA9IE5VTEw7CisgICAgQVZDaGFu bmVsTGF5b3V0ICpvdXRsYXlvdXQgPSAoQVZDaGFubmVsTGF5b3V0ICopJmFtYmlzb25pY190YWJb cy0+bGF5b3V0XS5vdXRsYXlvdXQ7CisgICAgQVZDaGFubmVsTGF5b3V0IGlubGF5b3V0ID0gQVZf Q0hBTk5FTF9MQVlPVVRfQU1CSVNPTklDX0ZJUlNUX09SREVSOworICAgIGludCByZXQgPSAwOwor CisgICAgaWYgKHMtPnByZWNpc2lvbiA9PSBQX0FVVE8pIHsKKyAgICAgICAgcmV0ID0gZmZfYWRk X2Zvcm1hdCgmZm9ybWF0cywgQVZfU0FNUExFX0ZNVF9GTFRQKTsKKyAgICAgICAgaWYgKHJldCkK KyAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgIHJldCA9IGZmX2FkZF9mb3JtYXQoJmZv cm1hdHMsIEFWX1NBTVBMRV9GTVRfREJMUCk7CisgICAgfSBlbHNlIGlmIChzLT5wcmVjaXNpb24g PT0gUF9TSU5HTEUpIHsKKyAgICAgICAgcmV0ID0gZmZfYWRkX2Zvcm1hdCgmZm9ybWF0cywgQVZf U0FNUExFX0ZNVF9GTFRQKTsKKyAgICB9IGVsc2UgaWYgKHMtPnByZWNpc2lvbiA9PSBQX0RPVUJM RSkgeworICAgICAgICByZXQgPSBmZl9hZGRfZm9ybWF0KCZmb3JtYXRzLCBBVl9TQU1QTEVfRk1U X0RCTFApOworICAgIH0KKyAgICBpZiAocmV0KQorICAgICAgICByZXR1cm4gcmV0OworICAgIHJl dCA9IGZmX3NldF9jb21tb25fZm9ybWF0cyhjdHgsIGZvcm1hdHMpOworICAgIGlmIChyZXQpCisg ICAgICAgIHJldHVybiByZXQ7CisKKyAgICByZXQgPSBmZl9hZGRfY2hhbm5lbF9sYXlvdXQoJm91 dGxheW91dHMsIG91dGxheW91dCk7CisgICAgaWYgKHJldCkKKyAgICAgICAgcmV0dXJuIHJldDsK KworICAgIHJldCA9IGZmX2NoYW5uZWxfbGF5b3V0c19yZWYob3V0bGF5b3V0cywgJmN0eC0+b3V0 cHV0c1swXS0+aW5jZmcuY2hhbm5lbF9sYXlvdXRzKTsKKyAgICBpZiAocmV0KQorICAgICAgICBy ZXR1cm4gcmV0OworCisgICAgcmV0ID0gZmZfYWRkX2NoYW5uZWxfbGF5b3V0KCZpbmxheW91dHMs ICZpbmxheW91dCk7CisgICAgaWYgKHJldCkKKyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIHJl dCA9IGZmX2NoYW5uZWxfbGF5b3V0c19yZWYoaW5sYXlvdXRzLCAmY3R4LT5pbnB1dHNbMF0tPm91 dGNmZy5jaGFubmVsX2xheW91dHMpOworICAgIGlmIChyZXQpCisgICAgICAgIHJldHVybiByZXQ7 CisKKyAgICByZXR1cm4gZmZfc2V0X2NvbW1vbl9hbGxfc2FtcGxlcmF0ZXMoY3R4KTsKK30KKwor c3RhdGljIHZvaWQgYWNuX3RvX2xldmVsX29yZGVyKGludCBhY24sIGludCAqbGV2ZWwsIGludCAq b3JkZXIpCit7CisgICAgKmxldmVsID0gZmxvb3Ioc3FydChhY24pKTsKKyAgICAqb3JkZXIgPSBh Y24gLSAqbGV2ZWwgKiAqbGV2ZWwgLSAqbGV2ZWw7Cit9CisKK3N0YXRpYyB2b2lkIGNhbGNfYWNu X3NlcXVlbmNlKEFtYmlzb25pY0NvbnRleHQgKnMpCit7CisgICAgaW50ICpkc3QgPSBzLT5zZXFf dGFiW01fQUNOXTsKKworICAgIGZvciAoaW50IG4gPSAwLCBpID0gMDsgbiA8PSBzLT5vcmRlcjsg bisrKSB7CisgICAgICAgIGZvciAoaW50IG0gPSAtbjsgbSA8PSBuOyBtKyssIGkrKykKKyAgICAg ICAgICAgIGRzdFtpXSA9IG4gKiBuICsgbiArIG07CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBj YWxjX2Z1bWFfc2VxdWVuY2UoQW1iaXNvbmljQ29udGV4dCAqcykKK3sKKyAgICBpbnQgKmRzdCA9 IHMtPnNlcV90YWJbTV9GVU1BXTsKKworICAgIGZvciAoaW50IG4gPSAwLCBpID0gMDsgbiA8PSBz LT5vcmRlcjsgbisrKSB7CisgICAgICAgIGlmIChuIDwgMikgeworICAgICAgICAgICAgZm9yIChp bnQgbSA9IC1uOyBtIDw9IG47IG0rKykKKyAgICAgICAgICAgICAgICBkc3RbaSsrXSA9IG4gKiBu ICsgMiAqIChuIC0gRkZBQlMobSkpICsgKG0gPCAwKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg ICAgICAgIGZvciAoaW50IG0gPSAtbjsgbSA8PSBuOyBtKyspCisgICAgICAgICAgICAgICAgZHN0 W2krK10gPSBTUVIobikgKyBGRkFCUyhtKSAqIDIgLSAobSA+IDApOworICAgICAgICB9CisgICAg fQorfQorCitzdGF0aWMgdm9pZCBjYWxjX3NpZF9zZXF1ZW5jZShBbWJpc29uaWNDb250ZXh0ICpz KQoreworICAgIGludCAqZHN0ID0gcy0+c2VxX3RhYltNX1NJRF07CisKKyAgICBmb3IgKGludCBu ID0gMCwgaSA9IDA7IG4gPD0gcy0+b3JkZXI7IG4rKykgeworICAgICAgICBmb3IgKGludCBtID0g LW47IG0gPD0gbjsgbSsrLCBpKyspCisgICAgICAgICAgICBkc3RbaV0gPSBuICogbiArIDIgKiAo biAtIEZGQUJTKG0pKSArIChtIDwgMCk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBjYWxjX2No X21hcChBbWJpc29uaWNDb250ZXh0ICpzKQoreworICAgIGNvbnN0IGludCAqc3JjMCA9IHMtPnNl cV90YWJbTV9BQ05dOworICAgIGNvbnN0IGludCAqc3JjMSA9IHMtPnNlcV90YWJbcy0+c2VxXTsK KyAgICBpbnQgKmRzdCA9IHMtPnNlcV9tYXA7CisKKyAgICBmb3IgKGludCBuID0gMDsgbiA8IFNR UihzLT5vcmRlciArIDEpOyBuKyspCisgICAgICAgIGRzdFtzcmMwW25dXSA9IHNyYzFbbl07Cit9 CisKK3N0YXRpYyBkb3VibGUgZmFjdG9yaWFsKGludCB4KQoreworICAgIGRvdWJsZSBwcm9kID0g MS47CisKKyAgICBmb3IgKGludCBpID0gMTsgaSA8PSB4OyBpKyspCisgICAgICAgIHByb2QgKj0g aTsKKworICAgIHJldHVybiBwcm9kOworfQorCitzdGF0aWMgZG91YmxlIG4zZF9ub3JtKGludCBp KQoreworICAgIGludCBuLCBtOworCisgICAgYWNuX3RvX2xldmVsX29yZGVyKGksICZuLCAmbSk7 CisKKyAgICByZXR1cm4gc3FydCgoMiAqIG4gKyAxKSAqICgyIC0gKG0gPT0gMCkpICogZmFjdG9y aWFsKG4gLSBGRkFCUyhtKSkgLyBmYWN0b3JpYWwobiArIEZGQUJTKG0pKSk7Cit9CisKK3N0YXRp YyBkb3VibGUgc24zZF9ub3JtKGludCBpKQoreworICAgIGludCBuLCBtOworCisgICAgYWNuX3Rv X2xldmVsX29yZGVyKGksICZuLCAmbSk7CisKKyAgICByZXR1cm4gc3FydCgoMiAtIChtID09IDAp KSAqIGZhY3RvcmlhbChuIC0gRkZBQlMobSkpIC8gZmFjdG9yaWFsKG4gKyBGRkFCUyhtKSkpOwor fQorCitzdGF0aWMgdm9pZCBjYWxjX25vcm1fbWF0cml4KEFtYmlzb25pY0NvbnRleHQgKnMpCit7 CisgICAgY29uc3QgaW50IHNwZWFrZXJzID0gYW1iaXNvbmljX3RhYltzLT5sYXlvdXRdLnNwZWFr ZXJzOworICAgIGNvbnN0IGludCBpbnB1dHMgPSBhbWJpc29uaWNfdGFiW3MtPmxheW91dF0uaW5w dXRzOworCisgICAgaWYgKCFzLT5tYXRyaXhfbm9ybSkKKyAgICAgICAgcmV0dXJuOworCisgICAg Zm9yIChpbnQgeSA9IDA7IHkgPCBzcGVha2VyczsgeSsrKSB7CisgICAgICAgIGRvdWJsZSBzY2Fs ZSA9IDAuOworCisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgaW5wdXRzOyB4KyspCisgICAg ICAgICAgICBzY2FsZSArPSBmYWJzKHMtPmRlY29kZV9tYXRbeV1beF0pOworICAgICAgICBpZiAo c2NhbGUgPiAxLikKKyAgICAgICAgICAgIHNjYWxlID0gMS4gLyBzY2FsZTsKKyAgICAgICAgZWxz ZQorICAgICAgICAgICAgc2NhbGUgPSAxLjsKKworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8 IGlucHV0czsgeCsrKQorICAgICAgICAgICAgcy0+ZGVjb2RlX21hdFt5XVt4XSAqPSBzY2FsZTsK KyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGNhbGNfc24zZF9zY2FsaW5nKEFtYmlzb25pY0NvbnRl eHQgKnMpCit7CisgICAgZG91YmxlICpkc3QgPSBzLT5ub3JtX3RhYltTTjNEXTsKKworICAgIGZv ciAoaW50IGkgPSAwOyBpIDwgcy0+bWF4X2NoYW5uZWxzOyBpKyspCisgICAgICAgIGRzdFtpXSA9 IDEuOworfQorCitzdGF0aWMgdm9pZCBjYWxjX24zZF9zY2FsaW5nKEFtYmlzb25pY0NvbnRleHQg KnMpCit7CisgICAgZG91YmxlICpkc3QgPSBzLT5ub3JtX3RhYltOM0RdOworCisgICAgZm9yIChp bnQgaSA9IDA7IGkgPCBzLT5tYXhfY2hhbm5lbHM7IGkrKykKKyAgICAgICAgZHN0W2ldID0gbjNk X25vcm0oaSkgLyBzbjNkX25vcm0oaSk7Cit9CisKK3N0YXRpYyB2b2lkIGNhbGNfZnVtYV9zY2Fs aW5nKEFtYmlzb25pY0NvbnRleHQgKnMpCit7CisgICAgZG91YmxlICpkc3QgPSBzLT5ub3JtX3Rh YltGVU1BXTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcy0+bWF4X2NoYW5uZWxzOyBpKysp IHsKKyAgICAgICAgZHN0W2ldID0gc24zZF9ub3JtKGkpOworCisgICAgICAgIHN3aXRjaCAoaSkg eworICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICBkc3RbaV0gKj0gMS4gLyBNX1NRUlQyOwor ICAgICAgICBjYXNlIDE6CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgY2FzZSAzOgorICAgICAg ICBjYXNlIDEyOgorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg IGNhc2UgNDoKKyAgICAgICAgICAgIGRzdFtpXSAqPSAyLiAvIHNxcnQoMy4pOworICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgIGRzdFtpXSAqPSAyLiAvIHNx cnQoMy4pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgNjoKKyAgICAgICAgICAg IGJyZWFrOworICAgICAgICBjYXNlIDc6CisgICAgICAgICAgICBkc3RbaV0gKj0gMi4gLyBzcXJ0 KDMuKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDg6CisgICAgICAgICAgICBk c3RbaV0gKj0gMi4gLyBzcXJ0KDMuKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl IDk6CisgICAgICAgICAgICBkc3RbaV0gKj0gc3FydCg4LiAvIDUuKTsKKyAgICAgICAgICAgIGJy ZWFrOworICAgICAgICBjYXNlIDEwOgorICAgICAgICAgICAgZHN0W2ldICo9IDMuIC8gc3FydCg1 Lik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxMToKKyAgICAgICAgICAgIGRz dFtpXSAqPSBzcXJ0KDQ1LiAvIDMyLik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz ZSAxMzoKKyAgICAgICAgICAgIGRzdFtpXSAqPSBzcXJ0KDQ1LiAvIDMyLik7CisgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgY2FzZSAxNDoKKyAgICAgICAgICAgIGRzdFtpXSAqPSAzLiAvIHNx cnQoNS4pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMTU6CisgICAgICAgICAg ICBkc3RbaV0gKj0gc3FydCg4Li81Lik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor ICAgIH0KK30KKworc3RhdGljIHZvaWQgbXVsdGlwbHlfbWF0KGRvdWJsZSBvdXRbM11bM10sCisg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZG91YmxlIGFbM11bM10sCisgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgZG91YmxlIGJbM11bM10pCit7CisgICAgZm9yIChpbnQgaSA9 IDA7IGkgPCAzOyBpKyspIHsKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCAzOyBqKyspIHsK KyAgICAgICAgICAgIGRvdWJsZSBzdW0gPSAwLjsKKworICAgICAgICAgICAgZm9yIChpbnQgayA9 IDA7IGsgPCAzOyBrKyspCisgICAgICAgICAgICAgICAgc3VtICs9IGFbaV1ba10gKiBiW2tdW2pd OworCisgICAgICAgICAgICBvdXRbaV1bal0gPSBzdW07CisgICAgICAgIH0KKyAgICB9Cit9CisK K3N0YXRpYyBkb3VibGUgUChpbnQgaSwgaW50IGwsIGludCBtdSwgaW50IG1fLCBkb3VibGUgUl8x WzNdWzNdLAorICAgICAgICAgICAgICAgIGRvdWJsZSBSX2xtMVsyICogTUFYX09SREVSICsgMV1b MiAqIE1BWF9PUkRFUiArIDFdKQoreworICAgIGRvdWJsZSByZXQgPSAwLjsKKyAgICBkb3VibGUg cmkxICA9IFJfMVtpICsgMV1bMl07CisgICAgZG91YmxlIHJpbTEgPSBSXzFbaSArIDFdWzBdOwor ICAgIGRvdWJsZSByaTAgID0gUl8xW2kgKyAxXVsxXTsKKworICAgIGlmIChtXyA9PSAtbCkgewor ICAgICAgICByZXQgPSByaTEgKiBSX2xtMVttdSArIGwgLSAxXVswXSArIHJpbTEgKiBSX2xtMVtt dSArIGwtIDFdWzIgKiBsIC0gMl07CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG1fID09IGwp CisgICAgICAgICAgICByZXQgPSByaTEgKiBSX2xtMVttdSArIGwgLSAxXVsyICogbCAtIDJdIC0g cmltMSAqIFJfbG0xW211ICsgbCAtIDFdWzBdOworICAgICAgICBlbHNlCisgICAgICAgICAgICBy ZXQgPSByaTAgKiBSX2xtMVttdSArIGwgLSAxXVttXyArIGwgLSAxXTsKKyAgICB9CisgICAgcmV0 dXJuIHJldDsKK30KKworc3RhdGljIGRvdWJsZSBVKGludCBsLCBpbnQgbSwgaW50IG4sIGRvdWJs ZSBSXzFbM11bM10sCisgICAgICAgICAgICAgICAgZG91YmxlIFJfbG0xWzIgKiBNQVhfT1JERVIg KyAxXVsyICogTUFYX09SREVSICsgMV0pCit7CisgICAgcmV0dXJuIFAoMCwgbCwgbSwgbiwgUl8x LCBSX2xtMSk7Cit9CisKK3N0YXRpYyBkb3VibGUgVihpbnQgbCwgaW50IG0sIGludCBuLCBkb3Vi bGUgUl8xWzNdWzNdLAorICAgICAgICAgICAgICAgIGRvdWJsZSBSX2xtMVsyICogTUFYX09SREVS ICsgMV1bMiAqIE1BWF9PUkRFUiArIDFdKQoreworICAgIGRvdWJsZSByZXQgPSAwLjsKKworICAg IGlmIChtID09IDApIHsKKyAgICAgICAgZG91YmxlIHAwID0gUCggMSwgbCwgIDEsIG4sIFJfMSwg Ul9sbTEpOworICAgICAgICBkb3VibGUgcDEgPSBQKC0xLCBsLCAtMSwgbiwgUl8xLCBSX2xtMSk7 CisgICAgICAgIHJldCA9IHAwK3AxOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChtID4gMCkg eworICAgICAgICAgICAgaW50IGQgPSAobSA9PSAxKSA/IDEgOiAwOworICAgICAgICAgICAgZG91 YmxlIHAwID0gUCggMSwgbCwgIG0gLSAxLCBuLCBSXzEsIFJfbG0xKTsKKyAgICAgICAgICAgIGRv dWJsZSBwMSA9IFAoLTEsIGwsIC1tICsgMSwgbiwgUl8xLCBSX2xtMSk7CisKKyAgICAgICAgICAg IHJldCA9IHAwICogc3FydCgxICsgZCkgLSBwMSAqICgxIC0gZCk7CisgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICBpbnQgZCA9IChtID09IC0xKSA/IDEgOiAwOworICAgICAgICAgICAgZG91 YmxlIHAwID0gUCggMSwgbCwgIG0gKyAxLCBuLCBSXzEsIFJfbG0xKTsKKyAgICAgICAgICAgIGRv dWJsZSBwMSA9IFAoLTEsIGwsIC1tIC0gMSwgbiwgUl8xLCBSX2xtMSk7CisKKyAgICAgICAgICAg IHJldCA9IHAwICogKDEgLSBkKSArIHAxICogc3FydCgxICsgZCk7CisgICAgICAgIH0KKyAgICB9 CisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGRvdWJsZSBXKGludCBsLCBpbnQgbSwgaW50 IG4sIGRvdWJsZSBSXzFbM11bM10sCisgICAgICAgICAgICAgICAgZG91YmxlIFJfbG0xWzIgKiBN QVhfT1JERVIgKyAxXVsyICogTUFYX09SREVSICsgMV0pCit7CisgICAgZG91YmxlIHJldCA9IDAu OworCisgICAgaWYgKG0gIT0gMCkgeworICAgICAgICBpZiAobSA+IDApIHsKKyAgICAgICAgICAg IGRvdWJsZSBwMCA9IFAoIDEsIGwsIG0gKyAxLCBuLCBSXzEsIFJfbG0xKTsKKyAgICAgICAgICAg IGRvdWJsZSBwMSA9IFAoLTEsIGwsLW0gLSAxLCBuLCBSXzEsIFJfbG0xKTsKKworICAgICAgICAg ICAgcmV0ID0gcDAgKyBwMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRvdWJsZSBw MCA9IFAoIDEsIGwsICBtIC0gMSwgbiwgUl8xLCBSX2xtMSk7CisgICAgICAgICAgICBkb3VibGUg cDEgPSBQKC0xLCBsLCAtbSArIDEsIG4sIFJfMSwgUl9sbTEpOworCisgICAgICAgICAgICByZXQg PSBwMCAtIHAxOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJldDsKK30KKworc3Rh dGljIHZvaWQgY2FsY19yb3RhdGlvbl9tYXQoQVZGaWx0ZXJDb250ZXh0ICpjdHgsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBBbWJpc29uaWNDb250ZXh0ICpzLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZG91YmxlIHlhdywgZG91YmxlIHBpdGNoLCBkb3VibGUgcm9sbCkK K3sKKyAgICBkb3VibGUgWFszXVszXSA9IHt7MC59fSwgWVszXVszXSA9IHt7MC59fSwgWlszXVsz XSA9IHt7MC59fSwgUlszXVszXSwgdFszXVszXTsKKyAgICBkb3VibGUgUl9sbTFbMiAqIE1BWF9P UkRFUiArIDFdWzIgKiBNQVhfT1JERVIgKyAxXSA9IHt7MC59fTsKKyAgICBkb3VibGUgUl8xWzNd WzNdOworCisgICAgeWF3ICAgPSAoTV9QSSAvIDE4MC4pICogeWF3OworICAgIHBpdGNoID0gKE1f UEkgLyAxODAuKSAqIHBpdGNoOworICAgIHJvbGwgID0gKE1fUEkgLyAxODAuKSAqIHJvbGw7CisK KyAgICBYWzBdWzBdID0gMS47CisgICAgWFsxXVsxXSA9IFhbMl1bMl0gPSBjb3Mocm9sbCk7Cisg ICAgWFsxXVsyXSA9IHNpbihyb2xsKTsKKyAgICBYWzJdWzFdID0gLVhbMV1bMl07CisKKyAgICBZ WzBdWzBdID0gWVsyXVsyXSA9IGNvcyhwaXRjaCk7CisgICAgWVswXVsyXSA9IHNpbihwaXRjaCk7 CisgICAgWVsyXVswXSA9IC1ZWzBdWzJdOworICAgIFlbMV1bMV0gPSAxLjsKKworICAgIFpbMF1b MF0gPSBaWzFdWzFdID0gY29zKHlhdyk7CisgICAgWlswXVsxXSA9IHNpbih5YXcpOworICAgIFpb MV1bMF0gPSAtWlswXVsxXTsKKyAgICBaWzJdWzJdID0gMS47CisKKyAgICBtdWx0aXBseV9tYXQo dCwgWCwgWSk7CisgICAgbXVsdGlwbHlfbWF0KFIsIHQsIFopOworCisgICAgUl8xWzBdWzBdID0g UlsxXVsxXTsKKyAgICBSXzFbMF1bMV0gPSBSWzFdWzJdOworICAgIFJfMVswXVsyXSA9IFJbMV1b MF07CisgICAgUl8xWzFdWzBdID0gUlsyXVsxXTsKKyAgICBSXzFbMV1bMV0gPSBSWzJdWzJdOwor ICAgIFJfMVsxXVsyXSA9IFJbMl1bMF07CisgICAgUl8xWzJdWzBdID0gUlswXVsxXTsKKyAgICBS XzFbMl1bMV0gPSBSWzBdWzJdOworICAgIFJfMVsyXVsyXSA9IFJbMF1bMF07CisKKyAgICBtZW1z ZXQocy0+cm90YXRlX21hdCwgMCwgc2l6ZW9mKHMtPnJvdGF0ZV9tYXQpKTsKKworICAgIHMtPnJv dGF0ZV9tYXRbMF1bMF0gPSAxLjsKKyAgICBzLT5yb3RhdGVfbWF0WzFdWzFdID0gUl8xWzBdWzBd OworICAgIHMtPnJvdGF0ZV9tYXRbMV1bMl0gPSBSXzFbMF1bMV07CisgICAgcy0+cm90YXRlX21h dFsxXVszXSA9IFJfMVswXVsyXTsKKyAgICBzLT5yb3RhdGVfbWF0WzJdWzFdID0gUl8xWzFdWzBd OworICAgIHMtPnJvdGF0ZV9tYXRbMl1bMl0gPSBSXzFbMV1bMV07CisgICAgcy0+cm90YXRlX21h dFsyXVszXSA9IFJfMVsxXVsyXTsKKyAgICBzLT5yb3RhdGVfbWF0WzNdWzFdID0gUl8xWzJdWzBd OworICAgIHMtPnJvdGF0ZV9tYXRbM11bMl0gPSBSXzFbMl1bMV07CisgICAgcy0+cm90YXRlX21h dFszXVszXSA9IFJfMVsyXVsyXTsKKworICAgIFJfbG0xWzBdWzBdID0gUl8xWzBdWzBdOworICAg IFJfbG0xWzBdWzFdID0gUl8xWzBdWzFdOworICAgIFJfbG0xWzBdWzJdID0gUl8xWzBdWzJdOwor ICAgIFJfbG0xWzFdWzBdID0gUl8xWzFdWzBdOworICAgIFJfbG0xWzFdWzFdID0gUl8xWzFdWzFd OworICAgIFJfbG0xWzFdWzJdID0gUl8xWzFdWzJdOworICAgIFJfbG0xWzJdWzBdID0gUl8xWzJd WzBdOworICAgIFJfbG0xWzJdWzFdID0gUl8xWzJdWzFdOworICAgIFJfbG0xWzJdWzJdID0gUl8x WzJdWzJdOworCisgICAgZm9yIChpbnQgbCA9IDI7IGwgPD0gcy0+b3JkZXI7IGwrKykgeworICAg ICAgICBkb3VibGUgUl9sWzIgKiBNQVhfT1JERVIgKyAxXVsyICogTUFYX09SREVSICsgMV0gPSB7 ezAufX07CisKKyAgICAgICAgZm9yIChpbnQgbSA9IC1sOyBtIDw9IGw7IG0rKykgeworICAgICAg ICAgICAgZm9yIChpbnQgbiA9IC1sOyBuIDw9IGw7IG4rKykgeworICAgICAgICAgICAgICAgIGlu dCBkID0gKG0gPT0gMCkgPyAxIDogMDsKKyAgICAgICAgICAgICAgICBkb3VibGUgZGVub20gPSBG RkFCUyhuKSA9PSBsID8gKDIgKiBsKSAqICgyICogbCAtIDEpIDogbCAqIGwgLSBuICogbjsKKyAg ICAgICAgICAgICAgICBkb3VibGUgdSA9IHNxcnQoKGwgKiBsIC0gbSAqIG0pIC8gZGVub20pOwor ICAgICAgICAgICAgICAgIGRvdWJsZSB2ID0gc3FydCgoMS4gKyBkKSAqIChsICsgRkZBQlMobSkg LSAxLikgKiAobCArIEZGQUJTKG0pKSAvIGRlbm9tKSAqICgxLiAtIDIuICogZCkgKiAwLjU7Cisg ICAgICAgICAgICAgICAgZG91YmxlIHcgPSBzcXJ0KChsIC0gRkZBQlMobSkgLSAxLikqKGwgLSBG RkFCUyhtKSkgLyBkZW5vbSkgKiAoMS4gLSBkKSAqIC0wLjU7CisKKyAgICAgICAgICAgICAgICBp ZiAodSkKKyAgICAgICAgICAgICAgICAgICAgdSAqPSBVKGwsIG0sIG4sIFJfMSwgUl9sbTEpOwor ICAgICAgICAgICAgICAgIGlmICh2KQorICAgICAgICAgICAgICAgICAgICB2ICo9IFYobCwgbSwg biwgUl8xLCBSX2xtMSk7CisgICAgICAgICAgICAgICAgaWYgKHcpCisgICAgICAgICAgICAgICAg ICAgIHcgKj0gVyhsLCBtLCBuLCBSXzEsIFJfbG0xKTsKKworICAgICAgICAgICAgICAgIFJfbFtt ICsgbF1bbiArIGxdID0gdSArIHYgKyB3OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyICogbCArIDE7IGkrKykgeworICAgICAgICAgICAg Zm9yIChpbnQgaiA9IDA7IGogPCAyICogbCArIDE7IGorKykKKyAgICAgICAgICAgICAgICBzLT5y b3RhdGVfbWF0W2wgKiBsICsgaV1bbCAqIGwgKyBqXSA9IFJfbFtpXVtqXTsKKyAgICAgICAgfQor CisgICAgICAgIG1lbWNweShSX2xtMSwgUl9sLCBzaXplb2YoUl9sKSk7CisgICAgfQorCisgICAg YXZfbG9nKGN0eCwgQVZfTE9HX0RFQlVHLCAicm90YXRpb24gbWF0cml4OlxuIik7CisgICAgZm9y IChpbnQgaSA9IDA7IGkgPCBTUVIocy0+b3JkZXIgKyAxKTsgaSsrKSB7CisgICAgICAgIGZvciAo aW50IGogPSAwOyBqIDwgU1FSKHMtPm9yZGVyICsgMSk7IGorKykgeworICAgICAgICAgICAgaWYg KGZhYnMocy0+cm90YXRlX21hdFtpXVtqXSkgPCAxZS02ZikKKyAgICAgICAgICAgICAgICBzLT5y b3RhdGVfbWF0W2ldW2pdID0gMC47CisgICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfREVC VUcsICJcdCVnIiwgcy0+cm90YXRlX21hdFtpXVtqXSk7CisgICAgICAgIH0KKyAgICAgICAgYXZf bG9nKGN0eCwgQVZfTE9HX0RFQlVHLCAiXG4iKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGNh bGNfbWlycm9yX21hdChBbWJpc29uaWNDb250ZXh0ICpzKQoreworICAgIGZvciAoaW50IGkgPSAw OyBpIDwgcy0+bWF4X2NoYW5uZWxzOyBpKyspIHsKKyAgICAgICAgZG91YmxlIGdhaW4gPSAxLjsK KyAgICAgICAgaW50IGxldmVsLCBvcmRlcjsKKworICAgICAgICBhY25fdG9fbGV2ZWxfb3JkZXIo aSwgJmxldmVsLCAmb3JkZXIpOworCisgICAgICAgIGlmIChpID09IDAgfHwgKCEoKGxldmVsICsg b3JkZXIpICYgMSkpKSB7CisgICAgICAgICAgICBnYWluICo9IHMtPmdhaW5bRVZFTl1bRF9aXTsK KworICAgICAgICAgICAgaWYgKHMtPmludmVydFtEX1pdICYgMikKKyAgICAgICAgICAgICAgICBn YWluICo9IC0xLjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgobGV2ZWwgKyBvcmRlcikgJiAx KSB7CisgICAgICAgICAgICBnYWluICo9IHMtPmdhaW5bT0REXVtEX1pdOworCisgICAgICAgICAg ICBpZiAocy0+aW52ZXJ0W0RfWl0gJiAxKQorICAgICAgICAgICAgICAgIGdhaW4gKj0gLTEuOwor ICAgICAgICB9CisKKyAgICAgICAgaWYgKG9yZGVyID49IDApIHsKKyAgICAgICAgICAgIGdhaW4g Kj0gcy0+Z2FpbltFVkVOXVtEX1ldOworCisgICAgICAgICAgICBpZiAocy0+aW52ZXJ0W0RfWV0g JiAyKQorICAgICAgICAgICAgICAgIGdhaW4gKj0gLTEuOworICAgICAgICB9CisKKyAgICAgICAg aWYgKG9yZGVyIDwgMCkgeworICAgICAgICAgICAgZ2FpbiAqPSBzLT5nYWluW09ERF1bRF9ZXTsK KworICAgICAgICAgICAgaWYgKHMtPmludmVydFtEX1ldICYgMSkKKyAgICAgICAgICAgICAgICBn YWluICo9IC0xLjsKKyAgICAgICAgfQorCisKKyAgICAgICAgaWYgKCgob3JkZXIgPCAwKSAmJiAo b3JkZXIgJiAxKSkgfHwgKChvcmRlciA+PSAwKSAmJiAhKG9yZGVyICYgMSkpICkgeworICAgICAg ICAgICAgZ2FpbiAqPSBzLT5nYWluW0VWRU5dW0RfWF07CisKKyAgICAgICAgICAgIGlmIChzLT5p bnZlcnRbRF9YXSAmIDIpCisgICAgICAgICAgICAgICAgZ2FpbiAqPSAtMS47CisgICAgICAgIH0K KworICAgICAgICBpZiAoKChvcmRlciA8IDApICYmICEob3JkZXIgJiAxKSkgfHwgKChvcmRlciA+ PSAwKSAmJiAob3JkZXIgJiAxKSkpIHsKKyAgICAgICAgICAgIGdhaW4gKj0gcy0+Z2FpbltPRERd W0RfWF07CisKKyAgICAgICAgICAgIGlmIChzLT5pbnZlcnRbRF9YXSAmIDEpCisgICAgICAgICAg ICAgICAgZ2FpbiAqPSAtMS47CisgICAgICAgIH0KKworICAgICAgICBpZiAobGV2ZWwgPT0gb3Jk ZXIgfHwgbGV2ZWwgPT0gLW9yZGVyKSB7CisgICAgICAgICAgICBnYWluICo9IHMtPmdhaW5bMF1b RF9DXTsKKworICAgICAgICAgICAgaWYgKHMtPmludmVydFtEX0NdKQorICAgICAgICAgICAgICAg IGdhaW4gKj0gLTEuOworICAgICAgICB9CisKKyAgICAgICAgcy0+bWlycm9yX21hdFtpXSA9IGdh aW47CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBtdWx0aXBseV9tYXQxNihkb3VibGUgb3V0WzE2 XVsxNl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkb3VibGUgYVsxNl1bMTZd LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZG91YmxlIGJbMTZdWzE2XSwgaW50 IHgpCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB4OyBpKyspIHsKKyAgICAgICAgZm9yIChp bnQgaiA9IDA7IGogPCB4OyBqKyspIHsKKyAgICAgICAgICAgIGRvdWJsZSBzdW0gPSAwLjsKKwor ICAgICAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCB4OyBrKyspCisgICAgICAgICAgICAgICAg c3VtICs9IGFbaV1ba10gKiBiW2tdW2pdOworCisgICAgICAgICAgICBvdXRbaV1bal0gPSBzdW07 CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIG11bHRpcGx5X21hdHgoZG91Ymxl IG91dFsxNl1bMTZdLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkb3VibGUgYVsx Nl1bMTZdLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkb3VibGUgYls0XVs0XSkK K3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgeworICAgICAgICBmb3IgKGludCBq ID0gMDsgaiA8IDQ7IGorKykgeworICAgICAgICAgICAgZG91YmxlIHN1bSA9IDAuOworCisgICAg ICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IDQ7IGsrKykKKyAgICAgICAgICAgICAgICBzdW0g Kz0gYVtpXVtrXSAqIGJba11bal07CisKKyAgICAgICAgICAgIG91dFtpXVtqXSA9IHN1bTsKKyAg ICAgICAgfQorICAgIH0KK30KKworc3RhdGljIHZvaWQgbXVsdGlwbHlfbWF0NChkb3VibGUgb3V0 WzRdWzRdLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkb3VibGUgYVs0XVs0XSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZG91YmxlIGJbNF1bNF0pCit7CisgICAg Zm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspIHsKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGog PCA0OyBqKyspIHsKKyAgICAgICAgICAgIGRvdWJsZSBzdW0gPSAwLjsKKworICAgICAgICAgICAg Zm9yIChpbnQgayA9IDA7IGsgPCA0OyBrKyspCisgICAgICAgICAgICAgICAgc3VtICs9IGFbaV1b a10gKiBiW2tdW2pdOworCisgICAgICAgICAgICBvdXRbaV1bal0gPSBzdW07CisgICAgICAgIH0K KyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGRvbWluYW5jZV9tYXQoZG91YmxlIGQsIGludCBpbmRl eCwgZG91YmxlIG1bNF1bNF0pCit7CisgICAgZG91YmxlIGcwLCBnMSwgaywga3I7CisKKyAgICBr ID0gZGIyYShkKTsKKyAgICBrciA9IDEuIC8gazsKKworICAgIGcwID0gKGsgKyBrcikgKiAwLjU7 CisgICAgZzEgPSAoayAtIGtyKSAvIE1fU1FSVDI7CisKKyAgICBtW0FfV11bQV9XXSAgICAgPSBn MDsKKyAgICBtW0FfV11baW5kZXhdICAgPSBnMSAqIDAuNTsKKyAgICBtW2luZGV4XVtBX1ddICAg PSBnMTsKKyAgICBtW2luZGV4XVtpbmRleF0gPSBnMDsKK30KKworc3RhdGljIHZvaWQgZGlyZWN0 X21hdChkb3VibGUgYW5nbGUsIGludCBpbmRleCwgZG91YmxlIG1bNF1bNF0pCit7CisgICAgZG91 YmxlIGcwLCBnMTsKKworICAgIGcwID0gc3FydCgxLiArIHNpbigoTV9QSS8xODAuKSAqIGFuZ2xl KSk7CisgICAgZzEgPSBzcXJ0KDEuIC0gc2luKChNX1BJLzE4MC4pICogYW5nbGUpKTsKKworICAg IGlmIChpbmRleCA9PSAwKQorICAgICAgICBGRlNXQVAoZG91YmxlLCBnMCwgZzEpOworCisgICAg Zm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspCisgICAgICAgIG1baV1baV0gPSBpbmRleCA9PSBp ID8gZzEgOiBnMDsKK30KKworc3RhdGljIHZvaWQgem9vbV9tYXQoZG91YmxlIGFuZ2xlLCBpbnQg aW5kZXgsIGRvdWJsZSBtWzRdWzRdKQoreworICAgIGRvdWJsZSBnMCwgZzE7CisKKyAgICBhbmds ZSA9IGFuZ2xlICogKE1fUEkgLyAxODAuKTsKKworICAgIGcwID0gc2luKGFuZ2xlKTsKKyAgICBn MSA9IGNvcyhhbmdsZSk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgeworICAg ICAgICBpZiAoaSA9PSAwKSB7CisgICAgICAgICAgICBtW2ldW2ldID0gMS47CisgICAgICAgIH0g ZWxzZSBpZiAoaSA9PSBpbmRleCkgeworICAgICAgICAgICAgbVtpXVtpXSA9IDEuOworICAgICAg ICAgICAgbVtBX1ddW2ldID0gZzAgLyBNX1NRUlQyOworICAgICAgICAgICAgbVtpXVtBX1ddID0g ZzAgKiBNX1NRUlQyOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbVtpXVtpXSA9IGcx OworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBmb2N1c19tYXQoZG91YmxlIGFu Z2xlLCBpbnQgaW5kZXgsIGRvdWJsZSBtWzRdWzRdKQoreworICAgIGRvdWJsZSBnMCwgZzEsIGcy OworCisgICAgYW5nbGUgPSBhbmdsZSAqIChNX1BJIC8gMTgwLik7CisKKyAgICBnMCA9IDEuIC8g KDEuICsgc2luKGZhYnMoYW5nbGUpKSk7CisgICAgZzEgPSBNX1NRUlQyICogc2luKGFuZ2xlKSAq IGcwOworICAgIGcyID0gY29zKGFuZ2xlKSAqIGcwOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkg PCA0OyBpKyspIHsKKyAgICAgICAgaWYgKGkgPT0gMCkgeworICAgICAgICAgICAgbVtpXVtpXSA9 IGcwOworICAgICAgICB9IGVsc2UgaWYgKGkgPT0gaW5kZXgpIHsKKyAgICAgICAgICAgIG1baV1b aV0gPSBnMDsKKyAgICAgICAgICAgIG1bQV9XXVtpXSA9IGcxIC8gMi47CisgICAgICAgICAgICBt W2ldW0FfV10gPSBnMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1baV1baV0gPSBn MjsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIHZvaWQgcHVzaF9tYXQoZG91YmxlIGFu Z2xlLCBpbnQgaW5kZXgsIGRvdWJsZSBtWzRdWzRdKQoreworICAgIGRvdWJsZSBnMCwgZzE7CisK KyAgICBhbmdsZSA9IGFuZ2xlICogKE1fUEkgLyAxODAuKTsKKworICAgIGcwID0gTV9TUVJUMiAq IHNpbihhbmdsZSkgKiBzaW4oZmFicyhhbmdsZSkpOworICAgIGcxID0gU1FSKGNvcyhhbmdsZSkp OworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspIHsKKyAgICAgICAgaWYgKGkgPT0g MCkgeworICAgICAgICAgICAgbVtpXVtpXSA9IDEuOworICAgICAgICB9IGVsc2UgaWYgKGkgPT0g aW5kZXgpIHsKKyAgICAgICAgICAgIG1baV1baV0gPSBnMTsKKyAgICAgICAgICAgIG1baV1bQV9X XSA9IGcwOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbVtpXVtpXSA9IGcxOworICAg ICAgICB9CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBwcmVzc19tYXQoZG91YmxlIGFuZ2xlLCBp bnQgaW5kZXgsIGRvdWJsZSBtWzRdWzRdKQoreworICAgIGRvdWJsZSBnMCwgZzEsIGcyOworCisg ICAgYW5nbGUgPSBhbmdsZSAqIChNX1BJIC8gMTgwLik7CisKKyAgICBnMCA9IE1fU1FSVDIgKiBz aW4oYW5nbGUpICogc2luKGZhYnMoYW5nbGUpKTsKKyAgICBnMiA9IGNvcyhhbmdsZSk7CisgICAg ZzEgPSBTUVIoZzIpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspIHsKKyAgICAg ICAgaWYgKGkgPT0gMCkgeworICAgICAgICAgICAgbVtpXVtpXSA9IDEuOworICAgICAgICB9IGVs c2UgaWYgKGkgPT0gaW5kZXgpIHsKKyAgICAgICAgICAgIG1baV1baV0gPSBnMTsKKyAgICAgICAg ICAgIG1baV1bQV9XXSA9IGcwOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbVtpXVtp XSA9IGcyOworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgY29uc3QgZG91YmxlIGlfbWF0 WzRdWzRdID0KK3sKKyAgICB7IDEsIDAsIDAsIDAgfSwKKyAgICB7IDAsIDEsIDAsIDAgfSwKKyAg ICB7IDAsIDAsIDEsIDAgfSwKKyAgICB7IDAsIDAsIDAsIDEgfSwKK307CisKK3N0YXRpYyB2b2lk IGNhbGNfcHJlc3NfbWF0KEFtYmlzb25pY0NvbnRleHQgKnMpCit7CisgICAgZG91YmxlIHhfbWF0 WzRdWzRdID0geyAwIH07CisgICAgZG91YmxlIHlfbWF0WzRdWzRdID0geyAwIH07CisgICAgZG91 YmxlIHpfbWF0WzRdWzRdID0geyAwIH07CisgICAgZG91YmxlIG9fbWF0WzRdWzRdOworCisgICAg cHJlc3NfbWF0KHMtPnByZXNzW0FfWF0sIEFfWCwgeF9tYXQpOworICAgIHByZXNzX21hdChzLT5w cmVzc1tBX1ldLCBBX1ksIHlfbWF0KTsKKyAgICBwcmVzc19tYXQocy0+cHJlc3NbQV9aXSwgQV9a LCB6X21hdCk7CisKKyAgICBtdWx0aXBseV9tYXQ0KG9fbWF0LCB4X21hdCwgeV9tYXQpOworICAg IG11bHRpcGx5X21hdDQocy0+cHJlc3NfbWF0LCBvX21hdCwgel9tYXQpOworfQorCitzdGF0aWMg dm9pZCBjYWxjX3B1c2hfbWF0KEFtYmlzb25pY0NvbnRleHQgKnMpCit7CisgICAgZG91YmxlIHhf bWF0WzRdWzRdID0geyAwIH07CisgICAgZG91YmxlIHlfbWF0WzRdWzRdID0geyAwIH07CisgICAg ZG91YmxlIHpfbWF0WzRdWzRdID0geyAwIH07CisgICAgZG91YmxlIG9fbWF0WzRdWzRdOworCisg ICAgcHVzaF9tYXQocy0+cHVzaFtBX1hdLCBBX1gsIHhfbWF0KTsKKyAgICBwdXNoX21hdChzLT5w dXNoW0FfWV0sIEFfWSwgeV9tYXQpOworICAgIHB1c2hfbWF0KHMtPnB1c2hbQV9aXSwgQV9aLCB6 X21hdCk7CisKKyAgICBtdWx0aXBseV9tYXQ0KG9fbWF0LCB4X21hdCwgeV9tYXQpOworICAgIG11 bHRpcGx5X21hdDQocy0+cHVzaF9tYXQsIG9fbWF0LCB6X21hdCk7Cit9CisKK3N0YXRpYyB2b2lk IGNhbGNfZG9taW5hbmNlX21hdChBbWJpc29uaWNDb250ZXh0ICpzKQoreworICAgIGRvdWJsZSB4 X21hdFs0XVs0XTsKKyAgICBkb3VibGUgeV9tYXRbNF1bNF07CisgICAgZG91YmxlIHpfbWF0WzRd WzRdOworICAgIGRvdWJsZSBvX21hdFs0XVs0XTsKKworICAgIG1lbWNweSh4X21hdCwgaV9tYXQs IHNpemVvZihpX21hdCkpOworICAgIG1lbWNweSh5X21hdCwgaV9tYXQsIHNpemVvZihpX21hdCkp OworICAgIG1lbWNweSh6X21hdCwgaV9tYXQsIHNpemVvZihpX21hdCkpOworCisgICAgZG9taW5h bmNlX21hdChzLT5kb21pbmFuY2VbQV9YXSwgQV9YLCB4X21hdCk7CisgICAgZG9taW5hbmNlX21h dChzLT5kb21pbmFuY2VbQV9ZXSwgQV9ZLCB5X21hdCk7CisgICAgZG9taW5hbmNlX21hdChzLT5k b21pbmFuY2VbQV9aXSwgQV9aLCB6X21hdCk7CisKKyAgICBtdWx0aXBseV9tYXQ0KG9fbWF0LCB4 X21hdCwgeV9tYXQpOworICAgIG11bHRpcGx5X21hdDQocy0+ZG9taW5hbmNlX21hdCwgb19tYXQs IHpfbWF0KTsKK30KKworc3RhdGljIHZvaWQgY2FsY19kaXJlY3Rpb25fbWF0KEFtYmlzb25pY0Nv bnRleHQgKnMpCit7CisgICAgZG91YmxlIHdfbWF0WzRdWzRdID0geyAwIH07CisgICAgZG91Ymxl IHhfbWF0WzRdWzRdID0geyAwIH07CisgICAgZG91YmxlIHlfbWF0WzRdWzRdID0geyAwIH07Cisg ICAgZG91YmxlIHpfbWF0WzRdWzRdID0geyAwIH07CisgICAgZG91YmxlIHRfbWF0WzRdWzRdOwor CisgICAgZGlyZWN0X21hdChzLT5kaXJlY3Rpb25bQV9XXSwgQV9XLCB3X21hdCk7CisgICAgZGly ZWN0X21hdChzLT5kaXJlY3Rpb25bQV9YXSwgQV9YLCB4X21hdCk7CisgICAgZGlyZWN0X21hdChz LT5kaXJlY3Rpb25bQV9ZXSwgQV9ZLCB5X21hdCk7CisgICAgZGlyZWN0X21hdChzLT5kaXJlY3Rp b25bQV9aXSwgQV9aLCB6X21hdCk7CisKKyAgICBtdWx0aXBseV9tYXQ0KHRfbWF0LCB3X21hdCwg eF9tYXQpOworICAgIG11bHRpcGx5X21hdDQod19tYXQsIHRfbWF0LCB5X21hdCk7CisgICAgbXVs dGlwbHlfbWF0NChzLT5kaXJlY3Rpb25fbWF0LCB3X21hdCwgel9tYXQpOworfQorCitzdGF0aWMg dm9pZCBjYWxjX3pvb21fbWF0KEFtYmlzb25pY0NvbnRleHQgKnMpCit7CisgICAgZG91YmxlIHhf bWF0WzRdWzRdID0geyAwIH07CisgICAgZG91YmxlIHlfbWF0WzRdWzRdID0geyAwIH07CisgICAg ZG91YmxlIHpfbWF0WzRdWzRdID0geyAwIH07CisgICAgZG91YmxlIHRfbWF0WzRdWzRdOworCisg ICAgem9vbV9tYXQocy0+em9vbVtBX1hdLCBBX1gsIHhfbWF0KTsKKyAgICB6b29tX21hdChzLT56 b29tW0FfWV0sIEFfWSwgeV9tYXQpOworICAgIHpvb21fbWF0KHMtPnpvb21bQV9aXSwgQV9aLCB6 X21hdCk7CisKKyAgICBtdWx0aXBseV9tYXQ0KHRfbWF0LCB4X21hdCwgeV9tYXQpOworICAgIG11 bHRpcGx5X21hdDQocy0+em9vbV9tYXQsIHRfbWF0LCB6X21hdCk7Cit9CisKK3N0YXRpYyB2b2lk IGNhbGNfZm9jdXNfbWF0KEFtYmlzb25pY0NvbnRleHQgKnMpCit7CisgICAgZG91YmxlIHhfbWF0 WzRdWzRdID0geyAwIH07CisgICAgZG91YmxlIHlfbWF0WzRdWzRdID0geyAwIH07CisgICAgZG91 YmxlIHpfbWF0WzRdWzRdID0geyAwIH07CisgICAgZG91YmxlIHRfbWF0WzRdWzRdOworCisgICAg Zm9jdXNfbWF0KHMtPmZvY3VzW0FfWF0sIEFfWCwgeF9tYXQpOworICAgIGZvY3VzX21hdChzLT5m b2N1c1tBX1ldLCBBX1ksIHlfbWF0KTsKKyAgICBmb2N1c19tYXQocy0+Zm9jdXNbQV9aXSwgQV9a LCB6X21hdCk7CisKKyAgICBtdWx0aXBseV9tYXQ0KHRfbWF0LCB4X21hdCwgeV9tYXQpOworICAg IG11bHRpcGx5X21hdDQocy0+Zm9jdXNfbWF0LCB0X21hdCwgel9tYXQpOworfQorCitzdGF0aWMg dm9pZCBjYWxjX3RyYW5zZm9ybV9tYXQoQW1iaXNvbmljQ29udGV4dCAqcykKK3sKKyAgICBjb25z dCBpbnQgaW5wdXRzID0gYW1iaXNvbmljX3RhYltzLT5sYXlvdXRdLmlucHV0czsKKyAgICBkb3Vi bGUgdHRfbWF0WzE2XVsxNl0gPSB7IDAgfTsKKyAgICBkb3VibGUgb19tYXRbMTZdWzE2XSA9IHsg MCB9OworICAgIGRvdWJsZSB0X21hdFs0XVs0XTsKKyAgICBkb3VibGUgcl9tYXRbNF1bNF07CisK KyAgICBmb3IgKGludCBpID0gMDsgaSA8IGlucHV0czsgaSsrKQorICAgICAgICB0dF9tYXRbaV1b aV0gPSBzLT5taXJyb3JfbWF0W2ldOworCisgICAgbXVsdGlwbHlfbWF0NCh0X21hdCwgcy0+ZG9t aW5hbmNlX21hdCwgcy0+ZGlyZWN0aW9uX21hdCk7CisgICAgbXVsdGlwbHlfbWF0NChyX21hdCwg dF9tYXQsIHMtPnpvb21fbWF0KTsKKyAgICBtdWx0aXBseV9tYXQ0KHRfbWF0LCByX21hdCwgcy0+ Zm9jdXNfbWF0KTsKKyAgICBtdWx0aXBseV9tYXQ0KHJfbWF0LCB0X21hdCwgcy0+cHVzaF9tYXQp OworICAgIG11bHRpcGx5X21hdDQodF9tYXQsIHJfbWF0LCBzLT5wcmVzc19tYXQpOworCisgICAg bXVsdGlwbHlfbWF0eChvX21hdCwgdHRfbWF0LCB0X21hdCk7CisKKyAgICBtdWx0aXBseV9tYXQx NihzLT50cmFuc2Zvcm1fbWF0LCBzLT5yb3RhdGVfbWF0LCBvX21hdCwgaW5wdXRzKTsKK30KKwor c3RhdGljIHZvaWQgbmVhcl9maWVsZChBbWJpc29uaWNDb250ZXh0ICpzLCBBVkZyYW1lICpmcmFt ZSwgaW50IG91dCwgaW50IGFkZCkKK3sKKyAgICBmb3IgKGludCBjaCA9IDEgLSBvdXQ7IGNoIDwg ZnJhbWUtPmNoX2xheW91dC5uYl9jaGFubmVsczsgY2grKykgeworICAgICAgICBpbnQgbiwgbTsK KworICAgICAgICBhY25fdG9fbGV2ZWxfb3JkZXIoY2gsICZuLCAmbSk7CisKKyAgICAgICAgaWYg KCFzLT5uZl9wcm9jZXNzW24gLSAxXSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIHMt Pm5mX3Byb2Nlc3NbbiAtIDFdKCZzLT5uZltvdXRdW2NoXSwgZnJhbWUsIGNoLCBhZGQsIDEuKTsK KyAgICB9Cit9CisKKyNkZWZpbmUgREVQVEggMzIKKyNpbmNsdWRlICJhbWJpc29uaWNfdGVtcGxh dGUuYyIKKworI3VuZGVmIERFUFRICisjZGVmaW5lIERFUFRIIDY0CisjaW5jbHVkZSAiYW1iaXNv bmljX3RlbXBsYXRlLmMiCisKK3N0YXRpYyBkb3VibGUgc3BlZWRfb2Zfc291bmQoZG91YmxlIHRl bXApCit7CisgICAgcmV0dXJuIDEuODUzMjUgKiAoNjQzLjk1ICogc3FydCgoKHRlbXAgKyAyNzMu MTUpIC8gMjczLjE1KSkpICogMTAwMC4wIC8gKDYwLiAqIDYwLik7Cit9CisKK3N0YXRpYyB2b2lk IG5maWVsZDFfaW5pdChOZWFyRmllbGQgKm5mLCBkb3VibGUgcmFkaXVzLAorICAgICAgICAgICAg ICAgICAgICAgICAgIGRvdWJsZSBzcGVlZCwgZG91YmxlIHJhdGUsCisgICAgICAgICAgICAgICAg ICAgICAgICAgZG91YmxlIGdhaW4pCit7CisgICAgZG91YmxlIHcgPSAwLjUgKiBzcGVlZCAvIChy YWRpdXMgKiByYXRlKTsKKworICAgIG5mLT5kWzBdID0gMS4gLyAoMS4gKyB3KTsKKyAgICBuZi0+ ZFsxXSA9ICgyLiAqIHcpICogbmYtPmRbMF07Cit9CisKK3N0YXRpYyB2b2lkIG5lYXJfZmllbGRf aW5pdChBbWJpc29uaWNDb250ZXh0ICpzLCBpbnQgb3V0LAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGRvdWJsZSBzcGVlZCwgZG91YmxlIHJhdGUsIGRvdWJsZSBnYWluKQoreworICAgIGZv ciAoaW50IGNoID0gMSAtIG91dDsgY2ggPCBzLT5tYXhfY2hhbm5lbHM7IGNoKyspIHsKKyAgICAg ICAgaW50IG4sIG07CisKKyAgICAgICAgYWNuX3RvX2xldmVsX29yZGVyKGNoLCAmbiwgJm0pOwor CisgICAgICAgIGlmICghcy0+bmZfaW5pdFtuIC0gMV0pCisgICAgICAgICAgICBicmVhazsKKwor ICAgICAgICBzLT5uZl9pbml0W24gLSAxXSgmcy0+bmZbb3V0XVtjaF0sIDEuLCBzcGVlZCwgcmF0 ZSwgZ2Fpbik7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBjYWxjX2xldmVsX3RhYihBbWJpc29u aWNDb250ZXh0ICpzLCBpbnQgbGF5b3V0KQoreworICAgIGRvdWJsZSBtYXhfZGlzdGFuY2UgPSAw LjsKKworICAgIGZvciAoaW50IHNwa3IgPSAwOyBzcGtyIDwgYW1iaXNvbmljX3RhYltzLT5sYXlv dXRdLnNwZWFrZXJzOyBzcGtyKyspIHsKKyAgICAgICAgY29uc3QgZG91YmxlIHNwa3JfZGlzdGFu Y2UgPSBhbWJpc29uaWNfdGFiW3MtPmxheW91dF0uc3BlYWtlcnNfZGlzdGFuY2Vbc3Brcl07CisK KyAgICAgICAgaWYgKHNwa3JfZGlzdGFuY2UgPiBtYXhfZGlzdGFuY2UpCisgICAgICAgICAgICBt YXhfZGlzdGFuY2UgPSBzcGtyX2Rpc3RhbmNlOworICAgIH0KKworICAgIGZvciAoaW50IHNwa3Ig PSAwOyBzcGtyIDwgYW1iaXNvbmljX3RhYltzLT5sYXlvdXRdLnNwZWFrZXJzOyBzcGtyKyspIHsK KyAgICAgICAgY29uc3QgZG91YmxlIHNjYWxlID0gcy0+bGV2ZWwgPyBhbWJpc29uaWNfdGFiW3Mt PmxheW91dF0uc3BlYWtlcnNfZGlzdGFuY2Vbc3Brcl0gLyBtYXhfZGlzdGFuY2UgOiAxLjsKKwor ICAgICAgICBzLT5sZXZlbF90YWJbc3Brcl0gPSBzY2FsZTsKKyAgICB9Cit9CisKK3N0YXRpYyB2 b2lkIGNhbGNfcGdhaW5zX3RhYihBbWJpc29uaWNDb250ZXh0ICpzLCBpbnQgdHlwZSkKK3sKKyAg ICBjb25zdCBpbnQgb3JkZXIgPSBzLT5vcmRlcjsKKworICAgIGlmICghdHlwZSkgeworICAgICAg ICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgb3JkZXIgKyAxOyBsZXZlbCsrKQorICAgICAg ICAgICAgcy0+cGdhaW5zWzBdW2xldmVsXSA9IHMtPnBnYWluc1sxXVtsZXZlbF0gPSAxLjA7Cisg ICAgfSBlbHNlIGlmICh0eXBlID09IDEgfHwgdHlwZSA9PSAyKSB7CisgICAgICAgIGNvbnN0IGlu dCBjb21wb25lbnRzID0gdHlwZSA9PSAxID8gMiAqIG9yZGVyICsgMSA6IFNRUihvcmRlciArIDEp OworICAgICAgICBjb25zdCBpbnQgc3BlYWtlcnMgPSBhbWJpc29uaWNfdGFiW3MtPmxheW91dF0u c3BlYWtlcnM7CisgICAgICAgIGRvdWJsZSBFX2dhaW4gPSAwOworICAgICAgICBkb3VibGUgZywg ZzIgPSAwLjsKKworICAgICAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgb3JkZXIgKyAx OyBsZXZlbCsrKSB7CisgICAgICAgICAgICBjb25zdCBkb3VibGUgZiA9IHR5cGUgPT0gMSA/IDEg KyAobGV2ZWwgPiAwKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg MiAqIFNRUihsZXZlbCkgKyAxOworICAgICAgICAgICAgY29uc3QgZG91YmxlIGUgPSB0eXBlID09 IDEgPyBnYWluc18yZFtvcmRlcl1bbGV2ZWxdOgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBnYWluc18zZFtvcmRlcl1bbGV2ZWxdOworICAgICAgICAgICAgRV9nYWlu ICs9IFNRUihlKSAqIGY7CisgICAgICAgIH0KKworICAgICAgICBpZiAocy0+cGd0eXBlID09IFBU X0VORVJHWSkgeworICAgICAgICAgICAgZzIgPSBzcGVha2VycyAvIEVfZ2FpbjsKKyAgICAgICAg fSBlbHNlIGlmIChzLT5wZ3R5cGUgPT0gUFRfUk1TKSB7CisgICAgICAgICAgICBnMiA9IGNvbXBv bmVudHMgLyBFX2dhaW47CisgICAgICAgIH0gZWxzZSBpZiAocy0+cGd0eXBlID09IFBUX0FNUCkg eworICAgICAgICAgICAgZzIgPSAxLjsKKyAgICAgICAgfQorCisgICAgICAgIGcgPSBzcXJ0KGcy KTsKKworICAgICAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgb3JkZXIgKyAxOyBsZXZl bCsrKSB7CisgICAgICAgICAgICBjb25zdCBkb3VibGUgZSA9IHR5cGUgPT0gMSA/IGdhaW5zXzJk W29yZGVyXVtsZXZlbF06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGdhaW5zXzNkW29yZGVyXVtsZXZlbF07CisgICAgICAgICAgICBzLT5wZ2FpbnNbMF1bbGV2ZWxd ID0gMS4wOworICAgICAgICAgICAgcy0+cGdhaW5zWzFdW2xldmVsXSA9IGcgKiBlOworICAgICAg ICB9CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBjYWxjX2dhaW5zX3RhYihBVkZpbHRlckNvbnRl eHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEFtYmlzb25pY0NvbnRleHQgKnMs IGRvdWJsZSB4b3Zlcl9yYXRpbykKK3sKKyAgICBjb25zdCBpbnQgaW5wdXRzID0gYW1iaXNvbmlj X3RhYltzLT5sYXlvdXRdLmlucHV0czsKKyAgICBjb25zdCBkb3VibGUgeG92ZXJfZ2FpbiA9IGRi MmEoeG92ZXJfcmF0aW8pOworCisgICAgZm9yIChpbnQgbGV2ZWwgPSAwLCBjaCA9IDA7IGxldmVs IDwgcy0+b3JkZXIgKyAxOyBsZXZlbCsrKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg MSArIGxldmVsICogMjsgaSsrLCBjaCsrKSB7CisgICAgICAgICAgICBjb25zdCBkb3VibGUgbGZf Z2FpbiA9IHMtPnBnYWluc1swXVtsZXZlbF07CisgICAgICAgICAgICBjb25zdCBkb3VibGUgaGZf Z2FpbiA9IHMtPnBnYWluc1sxXVtsZXZlbF07CisKKyAgICAgICAgICAgIHMtPmdhaW5zX3RhYlsw XVtjaF0gPSBsZl9nYWluIC8geG92ZXJfZ2FpbjsKKyAgICAgICAgICAgIHMtPmdhaW5zX3RhYlsx XVtjaF0gPSBoZl9nYWluICogeG92ZXJfZ2FpbjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGF2 X2xvZyhjdHgsIEFWX0xPR19ERUJVRywgImdhaW5zIHRhYjpcbiIpOworICAgIGZvciAoaW50IGNo ID0gMDsgY2ggPCBpbnB1dHM7IGNoKyspCisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19ERUJV RywgIlx0JWciLCBzLT5nYWluc190YWJbMF1bY2hdKTsKKyAgICBhdl9sb2coY3R4LCBBVl9MT0df REVCVUcsICJcbiIpOworICAgIGZvciAoaW50IGNoID0gMDsgY2ggPCBpbnB1dHM7IGNoKyspCisg ICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19ERUJVRywgIlx0JWciLCBzLT5nYWluc190YWJbMV1b Y2hdKTsKKyAgICBhdl9sb2coY3R4LCBBVl9MT0dfREVCVUcsICJcbiIpOworfQorCitzdGF0aWMg dm9pZCB4b3Zlcl9pbml0X2lucHV0KFhvdmVyICp4b3ZlciwgZG91YmxlIGZyZXEsIGRvdWJsZSBy YXRlLCBpbnQgaGYpCit7CisgICAgZG91YmxlIGsgPSB0YW4oTV9QSSAqIGZyZXEgLyByYXRlKTsK KyAgICBkb3VibGUgazIgPSBrICogazsKKyAgICBkb3VibGUgZCA9IGsyICsgMi4gKiBrICsgMS47 CisKKyAgICBpZiAoaGYpIHsKKyAgICAgICAgeG92ZXItPmJbMF0gPSAtMS4gLyBkOworICAgICAg ICB4b3Zlci0+YlsxXSA9ICAyLiAvIGQ7CisgICAgICAgIHhvdmVyLT5iWzJdID0gLTEuIC8gZDsK KyAgICB9IGVsc2UgeworICAgICAgICB4b3Zlci0+YlswXSA9IGsyIC8gZDsKKyAgICAgICAgeG92 ZXItPmJbMV0gPSAyLiAqIGsyIC8gZDsKKyAgICAgICAgeG92ZXItPmJbMl0gPSBrMiAvIGQ7Cisg ICAgfQorCisgICAgeG92ZXItPmFbMF0gPSAxLjsKKyAgICB4b3Zlci0+YVsxXSA9IC0yICogKGsy IC0gMS4pIC8gZDsKKyAgICB4b3Zlci0+YVsyXSA9IC0oazIgLSAyICogayArIDEuKSAvIGQ7Cit9 CisKK3N0YXRpYyB2b2lkIHhvdmVyX2luaXQoQW1iaXNvbmljQ29udGV4dCAqcywgZG91YmxlIGZy ZXEsIGRvdWJsZSByYXRlLCBpbnQgY2hhbm5lbHMpCit7CisgICAgZm9yIChpbnQgY2ggPSAwOyBj aCA8IGNoYW5uZWxzOyBjaCsrKSB7CisgICAgICAgIHhvdmVyX2luaXRfaW5wdXQoJnMtPnhvdmVy WzBdW2NoXSwgZnJlcSwgcmF0ZSwgMCk7CisgICAgICAgIHhvdmVyX2luaXRfaW5wdXQoJnMtPnhv dmVyWzFdW2NoXSwgZnJlcSwgcmF0ZSwgMSk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBjYWxj X2ZhY3Rvcihkb3VibGUgKmZhY3RvcnMsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5w dXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGEsIGRvdWJsZSBlLAorICAgICAg ICAgICAgICAgICAgICAgICAgaW50IG0pCit7CisgICAgY29uc3QgZG91YmxlIGNvc19hID0gY29z KGEpOworICAgIGNvbnN0IGRvdWJsZSBzaW5fYSA9IHNpbihhKTsKKyAgICBjb25zdCBkb3VibGUg Y29zX2UgPSBjb3MoZSk7CisgICAgY29uc3QgZG91YmxlIHNpbl9lID0gc2luKGUpOworICAgIGNv bnN0IGRvdWJsZSBzcXJ0MyA9IHNxcnQoMy4pOworCisgICAgZmFjdG9yc1tBX1ddID0gMS47CisK KyAgICBpZiAoaW5wdXRzIDw9IDEpCisgICAgICAgIHJldHVybjsKKworICAgIGZhY3RvcnNbQV9Z XSA9IHNpbl9hICogY29zX2U7CisgICAgZmFjdG9yc1tBX1pdID0gc2luX2UgKiBtOworICAgIGZh Y3RvcnNbQV9YXSA9IGNvc19hICogY29zX2U7CisKKyAgICBpZiAoaW5wdXRzIDw9IDQpCisgICAg ICAgIHJldHVybjsKKworICAgIGZhY3RvcnNbQV9WXSA9IHNxcnQzICogc2luX2EgKiBTUVIoY29z X2UpICogY29zX2E7CisgICAgZmFjdG9yc1tBX1RdID0gMC4yNSAqIHNxcnQzICogKGNvcygyLiAq IGUgLSBhKSAtIGNvcygyLiAqIGUgKyBhKSk7CisgICAgZmFjdG9yc1tBX1JdID0gKDMuLzIuKSAq IFNRUihzaW5fZSkgLSAwLjU7CisgICAgZmFjdG9yc1tBX1NdID0gMC4yNSAqIHNxcnQzICogKHNp bigyLiAqIGUgLSBhKSArIHNpbigyLiAqIGUgKyBhKSk7CisgICAgZmFjdG9yc1tBX1VdID0gMC41 ICogc3FydDMgKiBTUVIoY29zX2UpKmNvcygyLiAqIGEpOworCisgICAgaWYgKGlucHV0cyA8PSA5 KQorICAgICAgICByZXR1cm47CisKKyAgICBmYWN0b3JzW0FfUV0gPSAwLjI1ICogc3FydCgxMC4p ICogKC00LiAqIFNRUihzaW5fYSkgKyAzLikgKiBzaW5fYSAqIFNRUihjb3NfZSkgKiBjb3NfZTsK KyAgICBmYWN0b3JzW0FfT10gPSBzcXJ0KDE1LikgKiBzaW5fZSAqIHNpbl9hICogU1FSKGNvc19l KSAqIGNvc19hOworICAgIGZhY3RvcnNbQV9NXSA9IDAuMjUgKiBzcXJ0KDYuKSAqICg1LiAqIFNR UihzaW5fZSkgLSAxLikgKiBzaW5fYSAqIGNvc19lOworICAgIGZhY3RvcnNbQV9LXSA9IDAuNSAq ICg1KlNRUihzaW5fZSkgLSAzKSpzaW5fZTsKKyAgICBmYWN0b3JzW0FfTF0gPSAwLjI1ICogc3Fy dCg2LikgKiAoNS4gKiBTUVIoc2luX2UpIC0gMS4pICogY29zX2UgKiBjb3NfYTsKKyAgICBmYWN0 b3JzW0FfTl0gPSAwLjUgKiBzcXJ0KDE1LikgKiBzaW5fZSAqIFNRUihjb3NfZSkgKiBjb3MoMi4g KiBhKTsKKyAgICBmYWN0b3JzW0FfUF0gPSAwLjI1ICogc3FydCgxMC4pKigtNC4gKiBTUVIoc2lu X2EpICsgMS4pICogU1FSKGNvc19lKSAqIGNvc19lICogY29zX2E7Cit9CisKK3N0YXRpYyB2b2lk IGNhbGNfZmFjdG9ycyhBVkZpbHRlckNvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICBBbWJpc29uaWNDb250ZXh0ICpzKQoreworICAgIGNvbnN0IGludCBzcGVha2VycyA9IGFt Ymlzb25pY190YWJbcy0+bGF5b3V0XS5zcGVha2VyczsKKyAgICBjb25zdCBkb3VibGUgKmVsZXZh dGlvbiA9IGFtYmlzb25pY190YWJbcy0+bGF5b3V0XS5zcGVha2Vyc19lbGV2YXRpb247CisgICAg Y29uc3QgZG91YmxlICphemltdXRoID0gYW1iaXNvbmljX3RhYltzLT5sYXlvdXRdLnNwZWFrZXJz X2F6aW11dGg7CisgICAgY29uc3QgaW50IGlucHV0cyA9IGFtYmlzb25pY190YWJbcy0+bGF5b3V0 XS5pbnB1dHM7CisKKyAgICBpZiAoZWxldmF0aW9uKSB7CisgICAgICAgIGZvciAoaW50IGNoID0g MDsgY2ggPCBzcGVha2VyczsgY2grKykKKyAgICAgICAgICAgIGNhbGNfZmFjdG9yKHMtPmRlY29k ZV9tYXRbY2hdLCBpbnB1dHMsCisgICAgICAgICAgICAgICAgICAgICAgICAoTV9QSSAvIDE4MC4p ICogYXppbXV0aFtjaF0gKiAtMS4sCisgICAgICAgICAgICAgICAgICAgICAgICAoTV9QSSAvIDE4 MC4pICogZWxldmF0aW9uW2NoXSwgMSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZm9yIChpbnQg Y2ggPSAwOyBjaCA8IHNwZWFrZXJzOyBjaCsrKQorICAgICAgICAgICAgY2FsY19mYWN0b3Iocy0+ ZGVjb2RlX21hdFtjaF0sIGlucHV0cywKKyAgICAgICAgICAgICAgICAgICAgICAgIChNX1BJIC8g MTgwLikgKiBhemltdXRoW2NoXSAqIC0xLiwKKyAgICAgICAgICAgICAgICAgICAgICAgIDAuLCAw KTsKKyAgICB9CisKKyAgICBhdl9sb2coY3R4LCBBVl9MT0dfREVCVUcsICJmYWN0b3JzIG1hdHJp eDpcbiIpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3BlYWtlcnM7IGkrKykgeworICAgICAg ICBmb3IgKGludCBqID0gMDsgaiA8IGlucHV0czsgaisrKQorICAgICAgICAgICAgYXZfbG9nKGN0 eCwgQVZfTE9HX0RFQlVHLCAiXHQlZyIsIHMtPmRlY29kZV9tYXRbaV1bal0pOworICAgICAgICBh dl9sb2coY3R4LCBBVl9MT0dfREVCVUcsICJcbiIpOworICAgIH0KK30KKworc3RhdGljIGludCBj b25maWdfb3V0cHV0KEFWRmlsdGVyTGluayAqb3V0bGluaykKK3sKKyAgICBBVkZpbHRlckNvbnRl eHQgKmN0eCA9IG91dGxpbmstPnNyYzsKKyAgICBBbWJpc29uaWNDb250ZXh0ICpzID0gY3R4LT5w cml2OworICAgIGNvbnN0IGludCB0eXBlID0gYW1iaXNvbmljX3RhYltzLT5sYXlvdXRdLnR5cGU7 CisgICAgY29uc3QgaW50IGlucHV0cyA9IGFtYmlzb25pY190YWJbcy0+bGF5b3V0XS5pbnB1dHM7 CisgICAgY29uc3QgaW50IHNwZWFrZXJzID0gYW1iaXNvbmljX3RhYltzLT5sYXlvdXRdLnNwZWFr ZXJzOworICAgIGNvbnN0IGRvdWJsZSBtYXRjaGluZyA9IHMtPm1hdGNoaW5nOworICAgIGRvdWJs ZSB3X21lYW4gPSAwLjsKKworICAgIHMtPm9yZGVyID0gYW1iaXNvbmljX3RhYltzLT5sYXlvdXRd Lm9yZGVyOworICAgIHMtPm1heF9jaGFubmVscyA9IFNRUihzLT5vcmRlciArIDEpOworCisgICAg aWYgKHMtPm5lYXJfZmllbGQgPT0gTkZfQVVUTykKKyAgICAgICAgcy0+bmVhcl9maWVsZCA9IGFt Ymlzb25pY190YWJbcy0+bGF5b3V0XS5uZWFyX2ZpZWxkOworICAgIGlmIChzLT54b3Zlcl9mcmVx IDwgMCkKKyAgICAgICAgcy0+eG92ZXJfZnJlcSA9IGFtYmlzb25pY190YWJbcy0+bGF5b3V0XS54 b3ZlcjsKKworICAgIGNhbGNfZmFjdG9ycyhjdHgsIHMpOworCisgICAgbWVtc2V0KHMtPnYsIDAs IHNpemVvZihzLT52KSk7CisgICAgbWVtc2V0KHMtPncsIDAsIHNpemVvZihzLT53KSk7CisKKyAg ICBtZW1jcHkocy0+dSwgcy0+ZGVjb2RlX21hdCwgc2l6ZW9mKHMtPnUpKTsKKyAgICBzdmRjbXAo Y3R4LCBzLT51LCBzcGVha2VycywgaW5wdXRzLCBzLT53LCBzLT52KTsKKworICAgIGZvciAoaW50 IHggPSAwOyB4IDwgaW5wdXRzOyB4KyspIHsKKyAgICAgICAgcy0+d1t4XSA9IHMtPndbeF0gPiAx ZS05ID8gMS4gLyBzLT53W3hdIDogMC5mOworICAgICAgICB3X21lYW4gKz0gcy0+d1t4XTsKKyAg ICB9CisKKyAgICB3X21lYW4gLz0gaW5wdXRzOworICAgIGZvciAoaW50IHggPSAwOyB4IDwgaW5w dXRzOyB4KyspCisgICAgICAgIHMtPndbeF0gPSBzLT53W3hdICogKDEuIC0gbWF0Y2hpbmcpICsg bWF0Y2hpbmcgKiB3X21lYW47CisKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGlucHV0czsgeSsr KSB7CisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgaW5wdXRzOyB4KyspCisgICAgICAgICAg ICBzLT52W3ldW3hdICo9IHMtPndbeF07CisgICAgfQorCisgICAgZm9yIChpbnQgeSA9IDA7IHkg PCBzcGVha2VyczsgeSsrKSB7CisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgaW5wdXRzOyB4 KyspIHsKKyAgICAgICAgICAgIGRvdWJsZSBzdW0gPSAwLjsKKworICAgICAgICAgICAgZm9yIChp bnQgeiA9IDA7IHogPCBpbnB1dHM7IHorKykKKyAgICAgICAgICAgICAgICBzdW0gKz0gcy0+dlt4 XVt6XSAqIHMtPnVbeV1bel07CisgICAgICAgICAgICBzLT5kZWNvZGVfbWF0W3ldW3hdID0gc3Vt OworICAgICAgICB9CisgICAgfQorCisgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0RFQlVHLCAiZGVj b2RlIG1hdHJpeDpcbiIpOworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgc3BlYWtlcnM7IHkrKykg eworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGlucHV0czsgeCsrKQorICAgICAgICAgICAg YXZfbG9nKGN0eCwgQVZfTE9HX0RFQlVHLCAiXHQlZyIsIHMtPmRlY29kZV9tYXRbeV1beF0pOwor ICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfREVCVUcsICJcbiIpOworICAgIH0KKworICAgIGNh bGNfbm9ybV9tYXRyaXgocyk7CisgICAgY2FsY19zbjNkX3NjYWxpbmcocyk7CisgICAgY2FsY19u M2Rfc2NhbGluZyhzKTsKKyAgICBjYWxjX2Z1bWFfc2NhbGluZyhzKTsKKworICAgIGNhbGNfYWNu X3NlcXVlbmNlKHMpOworICAgIGNhbGNfZnVtYV9zZXF1ZW5jZShzKTsKKyAgICBjYWxjX3NpZF9z ZXF1ZW5jZShzKTsKKworICAgIGNhbGNfY2hfbWFwKHMpOworCisgICAgbmVhcl9maWVsZF9pbml0 KHMsIDAsIHNwZWVkX29mX3NvdW5kKHMtPnRlbXApLCBvdXRsaW5rLT5zYW1wbGVfcmF0ZSwgMS4p OworICAgIG5lYXJfZmllbGRfaW5pdChzLCAxLCBzcGVlZF9vZl9zb3VuZChzLT50ZW1wKSwgb3V0 bGluay0+c2FtcGxlX3JhdGUsIDEuKTsKKworICAgIGNhbGNfcm90YXRpb25fbWF0KGN0eCwgcywg cy0+eWF3LCBzLT5waXRjaCwgcy0+cm9sbCk7CisgICAgY2FsY19taXJyb3JfbWF0KHMpOworCisg ICAgY2FsY19kb21pbmFuY2VfbWF0KHMpOworICAgIGNhbGNfZGlyZWN0aW9uX21hdChzKTsKKyAg ICBjYWxjX3pvb21fbWF0KHMpOworICAgIGNhbGNfZm9jdXNfbWF0KHMpOworICAgIGNhbGNfcHVz aF9tYXQocyk7CisgICAgY2FsY19wcmVzc19tYXQocyk7CisKKyAgICBjYWxjX2xldmVsX3RhYihz LCBzLT5sYXlvdXQpOworICAgIGNhbGNfcGdhaW5zX3RhYihzLCB0eXBlKTsKKyAgICBjYWxjX2dh aW5zX3RhYihjdHgsIHMsIHMtPnhvdmVyX3JhdGlvKTsKKyAgICB4b3Zlcl9pbml0KHMsIHMtPnhv dmVyX2ZyZXEsIG91dGxpbmstPnNhbXBsZV9yYXRlLCBzLT5tYXhfY2hhbm5lbHMpOworCisgICAg c3dpdGNoIChzLT5wcmVjaXNpb24pIHsKKyAgICBjYXNlIFBfQVVUTzoKKyAgICAgICAgcy0+bmZf cHJvY2Vzc1swXSA9IG91dGxpbmstPmZvcm1hdCA9PSBBVl9TQU1QTEVfRk1UX0ZMVFAgPyBuZmll bGQxX3Byb2Nlc3NfZmxvYXQgOiBuZmllbGQxX3Byb2Nlc3NfZG91YmxlOworICAgICAgICBzLT5w cm9jZXNzID0gb3V0bGluay0+Zm9ybWF0ID09IEFWX1NBTVBMRV9GTVRfRkxUUCA/IHByb2Nlc3Nf ZmxvYXQgOiBwcm9jZXNzX2RvdWJsZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQX1NJTkdM RToKKyAgICAgICAgcy0+bmZfcHJvY2Vzc1swXSA9IG5maWVsZDFfcHJvY2Vzc19mbG9hdDsKKyAg ICAgICAgcy0+cHJvY2VzcyA9IHByb2Nlc3NfZmxvYXQ7CisgICAgICAgIGJyZWFrOworICAgIGNh c2UgUF9ET1VCTEU6CisgICAgICAgIHMtPm5mX3Byb2Nlc3NbMF0gPSBuZmllbGQxX3Byb2Nlc3Nf ZG91YmxlOworICAgICAgICBzLT5wcm9jZXNzID0gcHJvY2Vzc19kb3VibGU7CisgICAgICAgIGJy ZWFrOworICAgIGRlZmF1bHQ6IGF2X2Fzc2VydDAoMCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBpbnQgZmlsdGVyX2ZyYW1lKEFWRmlsdGVyTGluayAqaW5saW5rLCBBVkZy YW1lICppbikKK3sKKyAgICBBVkZpbHRlckNvbnRleHQgKmN0eCA9IGlubGluay0+ZHN0OworICAg IEFtYmlzb25pY0NvbnRleHQgKnMgPSBjdHgtPnByaXY7CisgICAgQVZGaWx0ZXJMaW5rICpvdXRs aW5rID0gY3R4LT5vdXRwdXRzWzBdOworICAgIEFWRnJhbWUgKm91dDsKKworICAgIGlmICghcy0+ cmZyYW1lIHx8IHMtPnJmcmFtZS0+bmJfc2FtcGxlcyA8IGluLT5uYl9zYW1wbGVzKSB7CisgICAg ICAgIGF2X2ZyYW1lX2ZyZWUoJnMtPnNmcmFtZSk7CisgICAgICAgIGF2X2ZyYW1lX2ZyZWUoJnMt PnJmcmFtZSk7CisgICAgICAgIGF2X2ZyYW1lX2ZyZWUoJnMtPmZyYW1lMik7CisgICAgICAgIHMt PnNmcmFtZSA9IGZmX2dldF9hdWRpb19idWZmZXIoaW5saW5rLCBpbi0+bmJfc2FtcGxlcyk7Cisg ICAgICAgIHMtPnJmcmFtZSA9IGZmX2dldF9hdWRpb19idWZmZXIoaW5saW5rLCBpbi0+bmJfc2Ft cGxlcyk7CisgICAgICAgIHMtPmZyYW1lMiA9IGZmX2dldF9hdWRpb19idWZmZXIoaW5saW5rLCBp bi0+bmJfc2FtcGxlcyk7CisgICAgICAgIGlmICghcy0+c2ZyYW1lIHx8ICFzLT5yZnJhbWUgfHwg IXMtPmZyYW1lMikgeworICAgICAgICAgICAgYXZfZnJhbWVfZnJlZSgmcy0+c2ZyYW1lKTsKKyAg ICAgICAgICAgIGF2X2ZyYW1lX2ZyZWUoJnMtPnJmcmFtZSk7CisgICAgICAgICAgICBhdl9mcmFt ZV9mcmVlKCZzLT5mcmFtZTIpOworICAgICAgICAgICAgYXZfZnJhbWVfZnJlZSgmaW4pOworICAg ICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKyAgICAgICAgfQorICAgIH0KKworICAg IG91dCA9IGZmX2dldF9hdWRpb19idWZmZXIob3V0bGluaywgaW4tPm5iX3NhbXBsZXMpOworICAg IGlmICghb3V0KSB7CisgICAgICAgIGF2X2ZyYW1lX2ZyZWUoJmluKTsKKyAgICAgICAgcmV0dXJu IEFWRVJST1IoRU5PTUVNKTsKKyAgICB9CisgICAgYXZfZnJhbWVfY29weV9wcm9wcyhvdXQsIGlu KTsKKworICAgIHMtPnByb2Nlc3MoY3R4LCBpbiwgb3V0KTsKKworICAgIGF2X2ZyYW1lX2ZyZWUo JmluKTsKKyAgICByZXR1cm4gZmZfZmlsdGVyX2ZyYW1lKG91dGxpbmssIG91dCk7CisKK30KKwor c3RhdGljIGF2X2NvbGQgaW50IGluaXQoQVZGaWx0ZXJDb250ZXh0ICpjdHgpCit7CisgICAgQW1i aXNvbmljQ29udGV4dCAqcyA9IGN0eC0+cHJpdjsKKworICAgIHMtPm5mX2luaXRbMF0gPSBuZmll bGQxX2luaXQ7CisKKyAgICBzLT5mZHNwID0gYXZwcml2X2Zsb2F0X2RzcF9hbGxvYygwKTsKKyAg ICBpZiAoIXMtPmZkc3ApCisgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisKKyAgICBy ZXR1cm4gMDsKK30KKworc3RhdGljIGF2X2NvbGQgdm9pZCB1bmluaXQoQVZGaWx0ZXJDb250ZXh0 ICpjdHgpCit7CisgICAgQW1iaXNvbmljQ29udGV4dCAqcyA9IGN0eC0+cHJpdjsKKworICAgIGF2 X2ZyZWVwKCZzLT5mZHNwKTsKKyAgICBhdl9mcmFtZV9mcmVlKCZzLT5zZnJhbWUpOworICAgIGF2 X2ZyYW1lX2ZyZWUoJnMtPnJmcmFtZSk7CisgICAgYXZfZnJhbWVfZnJlZSgmcy0+ZnJhbWUyKTsK K30KKworc3RhdGljIGNvbnN0IEFWRmlsdGVyUGFkIGlucHV0c1tdID0geworICAgIHsKKyAgICAg ICAgLm5hbWUgICAgICAgICAgID0gImRlZmF1bHQiLAorICAgICAgICAudHlwZSAgICAgICAgICAg PSBBVk1FRElBX1RZUEVfQVVESU8sCisgICAgICAgIC5maWx0ZXJfZnJhbWUgICA9IGZpbHRlcl9m cmFtZSwKKyAgICB9LAorfTsKK3N0YXRpYyBjb25zdCBBVkZpbHRlclBhZCBvdXRwdXRzW10gPSB7 CisgICAgeworICAgICAgICAubmFtZSAgICAgICAgID0gImRlZmF1bHQiLAorICAgICAgICAudHlw ZSAgICAgICAgID0gQVZNRURJQV9UWVBFX0FVRElPLAorICAgICAgICAuY29uZmlnX3Byb3BzID0g Y29uZmlnX291dHB1dCwKKyAgICB9LAorfTsKKworc3RhdGljIGludCBwcm9jZXNzX2NvbW1hbmQo QVZGaWx0ZXJDb250ZXh0ICpjdHgsIGNvbnN0IGNoYXIgKmNtZCwgY29uc3QgY2hhciAqYXJncywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnJlcywgaW50IHJlc19sZW4sIGludCBm bGFncykKK3sKKyAgICBBbWJpc29uaWNDb250ZXh0ICpzID0gY3R4LT5wcml2OworICAgIGNvbnN0 IGRvdWJsZSB5YXcgPSBzLT55YXcsIHBpdGNoID0gcy0+cGl0Y2gsIHJvbGwgPSBzLT5yb2xsOwor ICAgIGRvdWJsZSBnYWluWzJdW05CX0RUWVBFU107CisgICAgaW50IGludmVydFtOQl9EVFlQRVNd OworICAgIGRvdWJsZSBkb21pbmFuY2VbNF07CisgICAgZG91YmxlIGRpcmVjdGlvbls0XTsKKyAg ICBkb3VibGUgem9vbVs0XTsKKyAgICBkb3VibGUgZm9jdXNbNF07CisgICAgZG91YmxlIHB1c2hb NF07CisgICAgZG91YmxlIHByZXNzWzRdOworICAgIGludCByZXQ7CisKKyAgICBtZW1jcHkoaW52 ZXJ0LCBzLT5pbnZlcnQsIHNpemVvZihpbnZlcnQpKTsKKyAgICBtZW1jcHkoZ2Fpbiwgcy0+Z2Fp biwgc2l6ZW9mKGdhaW4pKTsKKyAgICBtZW1jcHkoZG9taW5hbmNlLCBzLT5kb21pbmFuY2UsIHNp emVvZihkb21pbmFuY2UpKTsKKyAgICBtZW1jcHkoZGlyZWN0aW9uLCBzLT5kaXJlY3Rpb24sIHNp emVvZihkaXJlY3Rpb24pKTsKKyAgICBtZW1jcHkoem9vbSwgcy0+em9vbSwgc2l6ZW9mKHpvb20p KTsKKyAgICBtZW1jcHkoZm9jdXMsIHMtPmZvY3VzLCBzaXplb2YoZm9jdXMpKTsKKyAgICBtZW1j cHkocHVzaCwgcy0+cHVzaCwgc2l6ZW9mKHB1c2gpKTsKKyAgICBtZW1jcHkocHJlc3MsIHMtPnBy ZXNzLCBzaXplb2YocHJlc3MpKTsKKworICAgIHJldCA9IGZmX2ZpbHRlcl9wcm9jZXNzX2NvbW1h bmQoY3R4LCBjbWQsIGFyZ3MsIHJlcywgcmVzX2xlbiwgZmxhZ3MpOworICAgIGlmIChyZXQgPCAw KQorICAgICAgICByZXR1cm4gcmV0OworCisgICAgaWYgKHlhdyAhPSBzLT55YXcgfHwgcGl0Y2gg IT0gcy0+cGl0Y2ggfHwgcm9sbCAhPSBzLT5yb2xsKQorICAgICAgICBjYWxjX3JvdGF0aW9uX21h dChjdHgsIHMsIHMtPnlhdywgcy0+cGl0Y2gsIHMtPnJvbGwpOworCisgICAgaWYgKG1lbWNtcChn YWluLCBzLT5nYWluLCBzaXplb2YoZ2FpbikpIHx8CisgICAgICAgIG1lbWNtcChpbnZlcnQsIHMt PmludmVydCwgc2l6ZW9mKGludmVydCkpKQorICAgICAgICBjYWxjX21pcnJvcl9tYXQocyk7CisK KyAgICBpZiAobWVtY21wKGRvbWluYW5jZSwgcy0+ZG9taW5hbmNlLCBzaXplb2YoZG9taW5hbmNl KSkpCisgICAgICAgIGNhbGNfZG9taW5hbmNlX21hdChzKTsKKworICAgIGlmIChtZW1jbXAoZGly ZWN0aW9uLCBzLT5kaXJlY3Rpb24sIHNpemVvZihkaXJlY3Rpb24pKSkKKyAgICAgICAgY2FsY19k aXJlY3Rpb25fbWF0KHMpOworCisgICAgaWYgKG1lbWNtcCh6b29tLCBzLT56b29tLCBzaXplb2Yo em9vbSkpKQorICAgICAgICBjYWxjX3pvb21fbWF0KHMpOworCisgICAgaWYgKG1lbWNtcChmb2N1 cywgcy0+Zm9jdXMsIHNpemVvZihmb2N1cykpKQorICAgICAgICBjYWxjX2ZvY3VzX21hdChzKTsK KworICAgIGlmIChtZW1jbXAocHVzaCwgcy0+cHVzaCwgc2l6ZW9mKHB1c2gpKSkKKyAgICAgICAg Y2FsY19wdXNoX21hdChzKTsKKworICAgIGlmIChtZW1jbXAocHJlc3MsIHMtPnByZXNzLCBzaXpl b2YocHJlc3MpKSkKKyAgICAgICAgY2FsY19wcmVzc19tYXQocyk7CisKKyAgICByZXR1cm4gMDsK K30KKworQVZGSUxURVJfREVGSU5FX0NMQVNTKGFtYmlzb25pYyk7CisKK2NvbnN0IEFWRmlsdGVy IGZmX2FmX2FtYmlzb25pYyA9IHsKKyAgICAubmFtZSAgICAgICAgICAgID0gImFtYmlzb25pYyIs CisgICAgLmRlc2NyaXB0aW9uICAgICA9IE5VTExfSUZfQ09ORklHX1NNQUxMKCJBbWJpc29uaWMg ZGVjb2RlciIpLAorICAgIC5wcml2X3NpemUgICAgICAgPSBzaXplb2YoQW1iaXNvbmljQ29udGV4 dCksCisgICAgLnByaXZfY2xhc3MgICAgICA9ICZhbWJpc29uaWNfY2xhc3MsCisgICAgLmluaXQg ICAgICAgICAgICA9IGluaXQsCisgICAgLnVuaW5pdCAgICAgICAgICA9IHVuaW5pdCwKKyAgICBG SUxURVJfUVVFUllfRlVOQyhxdWVyeV9mb3JtYXRzKSwKKyAgICBGSUxURVJfSU5QVVRTKGlucHV0 cyksCisgICAgRklMVEVSX09VVFBVVFMob3V0cHV0cyksCisgICAgLnByb2Nlc3NfY29tbWFuZCA9 IHByb2Nlc3NfY29tbWFuZCwKK307CmRpZmYgLS1naXQgYS9saWJhdmZpbHRlci9hbGxmaWx0ZXJz LmMgYi9saWJhdmZpbHRlci9hbGxmaWx0ZXJzLmMKaW5kZXggYWE0OTcwM2M2ZS4uMDlhZDljOTEx YSAxMDA2NDQKLS0tIGEvbGliYXZmaWx0ZXIvYWxsZmlsdGVycy5jCisrKyBiL2xpYmF2ZmlsdGVy L2FsbGZpbHRlcnMuYwpAQCAtNTcsNiArNTcsNyBAQCBleHRlcm4gY29uc3QgQVZGaWx0ZXIgZmZf YWZfYWxhdGVuY3k7CiBleHRlcm4gY29uc3QgQVZGaWx0ZXIgZmZfYWZfYWxpbWl0ZXI7CiBleHRl cm4gY29uc3QgQVZGaWx0ZXIgZmZfYWZfYWxscGFzczsKIGV4dGVybiBjb25zdCBBVkZpbHRlciBm Zl9hZl9hbG9vcDsKK2V4dGVybiBjb25zdCBBVkZpbHRlciBmZl9hZl9hbWJpc29uaWM7CiBleHRl cm4gY29uc3QgQVZGaWx0ZXIgZmZfYWZfYW1lcmdlOwogZXh0ZXJuIGNvbnN0IEFWRmlsdGVyIGZm X2FmX2FtZXRhZGF0YTsKIGV4dGVybiBjb25zdCBBVkZpbHRlciBmZl9hZl9hbWl4OwpkaWZmIC0t Z2l0IGEvbGliYXZmaWx0ZXIvYW1iaXNvbmljX3RlbXBsYXRlLmMgYi9saWJhdmZpbHRlci9hbWJp c29uaWNfdGVtcGxhdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4w MmMzZWQ2NjYyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYXZmaWx0ZXIvYW1iaXNvbmljX3RlbXBs YXRlLmMKQEAgLTAsMCArMSwyMjYgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1w ZWcuCisgKgorICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl ciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwg b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1wZWcgaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBp ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1 MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNB CisgKi8KKworI2luY2x1ZGUgImF2ZmlsdGVyLmgiCisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKyNp bmNsdWRlICJhdWRpby5oIgorCisjdW5kZWYgZnR5cGUKKyN1bmRlZiBTQU1QTEVfRk9STUFUCisj aWYgREVQVEggPT0gMzIKKyNkZWZpbmUgU0FNUExFX0ZPUk1BVCBmbG9hdAorI2RlZmluZSBmdHlw ZSBmbG9hdAorI2Vsc2UKKyNkZWZpbmUgU0FNUExFX0ZPUk1BVCBkb3VibGUKKyNkZWZpbmUgZnR5 cGUgZG91YmxlCisjZW5kaWYKKworI2RlZmluZSBmbjMoYSxiKSAgIGEjI18jI2IKKyNkZWZpbmUg Zm4yKGEsYikgICBmbjMoYSxiKQorI2RlZmluZSBmbihhKSAgICAgIGZuMihhLCBTQU1QTEVfRk9S TUFUKQorCitzdGF0aWMgdm9pZCBmbihzY2FsZSkoQW1iaXNvbmljQ29udGV4dCAqcywKKyAgICAg ICAgICAgICAgICAgICAgICBBVkZyYW1lICppbiwgQVZGcmFtZSAqb3V0LAorICAgICAgICAgICAg ICAgICAgICAgIGRvdWJsZSBzY2FsZVtNQVhfQ0hBTk5FTFNdLAorICAgICAgICAgICAgICAgICAg ICAgIGludCBuYl9zYW1wbGVzLCBpbnQgbmJfY2hhbm5lbHMsIGludCAqc2VxX21hcCkKK3sKKyAg ICBmb3IgKGludCBjaCA9IDA7IGNoIDwgbmJfY2hhbm5lbHM7IGNoKyspIHsKKyAgICAgICAgY29u c3QgZnR5cGUgKnNyYyA9IChjb25zdCBmdHlwZSAqKWluLT5leHRlbmRlZF9kYXRhW2NoXTsKKyAg ICAgICAgZnR5cGUgKmRzdCA9IChmdHlwZSAqKW91dC0+ZXh0ZW5kZWRfZGF0YVtjaF07CisgICAg ICAgIGZ0eXBlIG11bCA9IHNjYWxlW3NlcV9tYXBbY2hdXTsKKworI2lmIERFUFRIID09IDMyCisg ICAgICAgIHMtPmZkc3AtPnZlY3Rvcl9mbXVsX3NjYWxhcihkc3QsIHNyYywgbXVsLCBGRkFMSUdO KG5iX3NhbXBsZXMsIDE2KSk7CisjZWxzZQorICAgICAgICBzLT5mZHNwLT52ZWN0b3JfZG11bF9z Y2FsYXIoZHN0LCBzcmMsIG11bCwgRkZBTElHTihuYl9zYW1wbGVzLCAxNikpOworI2VuZGlmCisg ICAgfQorfQorCitzdGF0aWMgdm9pZCBmbih0cmFuc2Zvcm0pKEFtYmlzb25pY0NvbnRleHQgKnMs CisgICAgICAgICAgICAgICAgICAgICAgICAgIEFWRnJhbWUgKmluLCBBVkZyYW1lICpvdXQsCisg ICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSB0cmFuc2Zvcm1fbWF0W01BWF9DSEFOTkVM U11bTUFYX0NIQU5ORUxTXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5iX3NhbXBs ZXMsIGludCBuYl9jaGFubmVscywgaW50ICpzZXFfbWFwKQoreworICAgIGZvciAoaW50IGNoID0g MDsgY2ggPCBuYl9jaGFubmVsczsgY2grKykgeworICAgICAgICBjb25zdCBmdHlwZSAqc3JjID0g KGNvbnN0IGZ0eXBlICopaW4tPmV4dGVuZGVkX2RhdGFbMF07CisgICAgICAgIGZ0eXBlICpkc3Qg PSAoZnR5cGUgKilvdXQtPmV4dGVuZGVkX2RhdGFbY2hdOworICAgICAgICBmdHlwZSBtdWwgPSB0 cmFuc2Zvcm1fbWF0W3NlcV9tYXBbY2hdXVtzZXFfbWFwWzBdXTsKKworI2lmIERFUFRIID09IDMy CisgICAgICAgIHMtPmZkc3AtPnZlY3Rvcl9mbXVsX3NjYWxhcihkc3QsIHNyYywgbXVsLCBGRkFM SUdOKG5iX3NhbXBsZXMsIDE2KSk7CisjZWxzZQorICAgICAgICBzLT5mZHNwLT52ZWN0b3JfZG11 bF9zY2FsYXIoZHN0LCBzcmMsIG11bCwgRkZBTElHTihuYl9zYW1wbGVzLCAxNikpOworI2VuZGlm CisgICAgICAgIGZvciAoaW50IGNoMiA9IDE7IGNoMiA8IG5iX2NoYW5uZWxzOyBjaDIrKykgewor ICAgICAgICAgICAgY29uc3QgZnR5cGUgKnNyYyA9IChjb25zdCBmdHlwZSAqKWluLT5leHRlbmRl ZF9kYXRhW2NoMl07CisgICAgICAgICAgICBmdHlwZSBtdWwgPSB0cmFuc2Zvcm1fbWF0W3NlcV9t YXBbY2hdXVtzZXFfbWFwW2NoMl1dOworCisjaWYgREVQVEggPT0gMzIKKyAgICAgICAgICAgIHMt PmZkc3AtPnZlY3Rvcl9mbWFjX3NjYWxhcihkc3QsIHNyYywgbXVsLCBGRkFMSUdOKG5iX3NhbXBs ZXMsIDE2KSk7CisjZWxzZQorICAgICAgICAgICAgcy0+ZmRzcC0+dmVjdG9yX2RtYWNfc2NhbGFy KGRzdCwgc3JjLCBtdWwsIEZGQUxJR04obmJfc2FtcGxlcywgMTYpKTsKKyNlbmRpZgorICAgICAg ICB9CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBmbihtdWx0aXBseSkoQW1iaXNvbmljQ29udGV4 dCAqcywKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkb3VibGUgZGVjb2RlX21hdHJp eFtNQVhfQ0hBTk5FTFNdW01BWF9DSEFOTkVMU10sCisgICAgICAgICAgICAgICAgICAgICAgICAg aW50IGlucHV0cywgaW50IG91dHB1dHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpz ZXFfbWFwLCBjb25zdCBkb3VibGUgKmdhaW5zX3RhYiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgbmJfY2hhbm5lbHMsIGludCBtYXhfY2hhbm5lbHMsCisgICAgICAgICAgICAgICAgICAg ICAgICAgQVZGcmFtZSAqaW4sIEFWRnJhbWUgKm91dCkKK3sKKyAgICBmb3IgKGludCBjaCA9IDA7 IGNoIDwgb3V0cHV0czsgY2grKykgeworICAgICAgICBmdHlwZSAqZHN0ID0gKGZ0eXBlICopb3V0 LT5leHRlbmRlZF9kYXRhW2NoXTsKKworICAgICAgICBmb3IgKGludCBjaDIgPSAwOyBjaDIgPCBG Rk1JTjMobmJfY2hhbm5lbHMsIG1heF9jaGFubmVscywgaW5wdXRzKTsgY2gyKyspIHsKKyAgICAg ICAgICAgIGNvbnN0IGludCBpbmRleCA9IEZGTUlOKHNlcV9tYXBbY2gyXSwgbmJfY2hhbm5lbHMg LSAxKTsKKyAgICAgICAgICAgIGNvbnN0IGZ0eXBlICpzcmMgPSAoY29uc3QgZnR5cGUgKilpbi0+ ZXh0ZW5kZWRfZGF0YVtpbmRleF07CisgICAgICAgICAgICBjb25zdCBmdHlwZSBnYWluID0gZ2Fp bnNfdGFiID8gZ2FpbnNfdGFiW2NoMl0gOiAxLmY7CisgICAgICAgICAgICBjb25zdCBmdHlwZSBt dWwgPSBkZWNvZGVfbWF0cml4W2NoXVtjaDJdICogZ2FpbjsKKworI2lmIERFUFRIID09IDMyCisg ICAgICAgICAgICBzLT5mZHNwLT52ZWN0b3JfZm1hY19zY2FsYXIoZHN0LCBzcmMsIG11bCwgRkZB TElHTihpbi0+bmJfc2FtcGxlcywgMTYpKTsKKyNlbHNlCisgICAgICAgICAgICBzLT5mZHNwLT52 ZWN0b3JfZG1hY19zY2FsYXIoZHN0LCBzcmMsIG11bCwgRkZBTElHTihpbi0+bmJfc2FtcGxlcywg MTYpKTsKKyNlbmRpZgorICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBmbihuZmll bGQxX3Byb2Nlc3MpKE5lYXJGaWVsZCAqbmYsIEFWRnJhbWUgKmZyYW1lLCBpbnQgY2gsIGludCBh ZGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBnYWluKQoreworICAg IGZ0eXBlICpkc3QgPSAoZnR5cGUgKilmcmFtZS0+ZXh0ZW5kZWRfZGF0YVtjaF07CisgICAgZnR5 cGUgejAsIGQwLCBkMTsKKworICAgIHowID0gbmYtPnpbMF07CisgICAgZDAgPSBuZi0+ZFswXSAq IGdhaW47CisgICAgZDEgPSBuZi0+ZFsxXTsKKworICAgIGZvciAoaW50IG4gPSAwOyBuIDwgZnJh bWUtPm5iX3NhbXBsZXM7IG4rKykgeworICAgICAgICBmdHlwZSB4ID0gZHN0W25dICogZDAgLSBk MSAqIHowOworICAgICAgICBkc3Rbbl0gPSB4ICsgKGFkZCA/IGRzdFtuXSA6IDAuZik7CisgICAg ICAgIHowICs9IHg7CisgICAgfQorCisgICAgbmYtPnpbMF0gPSB6MDsKK30KKworc3RhdGljIHZv aWQgZm4oeG92ZXJfcHJvY2VzcykoWG92ZXIgKnhvdmVyLCBjb25zdCBmdHlwZSAqc3JjLCBmdHlw ZSAqZHN0LCBpbnQgbmJfc2FtcGxlcykKK3sKKyAgICBmdHlwZSBiMCA9IHhvdmVyLT5iWzBdOwor ICAgIGZ0eXBlIGIxID0geG92ZXItPmJbMV07CisgICAgZnR5cGUgYjIgPSB4b3Zlci0+YlsyXTsK KyAgICBmdHlwZSBhMSA9IHhvdmVyLT5hWzFdOworICAgIGZ0eXBlIGEyID0geG92ZXItPmFbMl07 CisgICAgZnR5cGUgdzAgPSB4b3Zlci0+d1swXTsKKyAgICBmdHlwZSB3MSA9IHhvdmVyLT53WzFd OworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYl9zYW1wbGVzOyBpKyspIHsKKyAgICAgICAg ZnR5cGUgaW4gPSBzcmNbaV07CisgICAgICAgIGZ0eXBlIG91dCA9IGIwICogaW4gKyB3MDsKKwor ICAgICAgICB3MCA9IGIxICogaW4gKyB3MSArIGExICogb3V0OworICAgICAgICB3MSA9IGIyICog aW4gKyBhMiAqIG91dDsKKworICAgICAgICBkc3RbaV0gPSBvdXQ7CisgICAgfQorCisgICAgeG92 ZXItPndbMF0gPSB3MDsKKyAgICB4b3Zlci0+d1sxXSA9IHcxOworfQorCitzdGF0aWMgdm9pZCBm bih4b3ZlcikoQW1iaXNvbmljQ29udGV4dCAqcywKKyAgICAgICAgICAgICAgICAgICAgICBBVkZy YW1lICppbiwgQVZGcmFtZSAqbGYsIEFWRnJhbWUgKmhmKQoreworICAgIGZvciAoaW50IGNoID0g MDsgY2ggPCBpbi0+Y2hfbGF5b3V0Lm5iX2NoYW5uZWxzOyBjaCsrKSB7CisgICAgICAgIGZuKHhv dmVyX3Byb2Nlc3MpKCZzLT54b3ZlclswXVtjaF0sCisgICAgICAgICAgICAgICAgICAgICAgICAg IChjb25zdCBmdHlwZSAqKWluLT5leHRlbmRlZF9kYXRhW2NoXSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgKGZ0eXBlICopbGYtPmV4dGVuZGVkX2RhdGFbY2hdLCBpbi0+bmJfc2FtcGxlcyk7 CisKKyAgICAgICAgZm4oeG92ZXJfcHJvY2VzcykoJnMtPnhvdmVyWzFdW2NoXSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgKGNvbnN0IGZ0eXBlICopaW4tPmV4dGVuZGVkX2RhdGFbY2hdLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAoZnR5cGUgKiloZi0+ZXh0ZW5kZWRfZGF0YVtjaF0s IGluLT5uYl9zYW1wbGVzKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGZuKGxldmVsKShBbWJp c29uaWNDb250ZXh0ICpzLAorICAgICAgICAgICAgICAgICAgICAgIEFWRnJhbWUgKm91dCwgZG91 YmxlIGxldmVsX3RhYltNQVhfQ0hBTk5FTFNdLAorICAgICAgICAgICAgICAgICAgICAgIGludCBu Yl9zYW1wbGVzLCBpbnQgbmJfY2hhbm5lbHMpCit7CisgICAgZm9yIChpbnQgY2ggPSAwOyBjaCA8 IG5iX2NoYW5uZWxzOyBjaCsrKSB7CisgICAgICAgIGZ0eXBlICpkc3QgPSAoZnR5cGUgKilvdXQt PmV4dGVuZGVkX2RhdGFbY2hdOworICAgICAgICBjb25zdCBmdHlwZSBtdWwgPSBsZXZlbF90YWJb Y2hdOworCisjaWYgREVQVEggPT0gMzIKKyAgICAgICAgcy0+ZmRzcC0+dmVjdG9yX2ZtdWxfc2Nh bGFyKGRzdCwgZHN0LCBtdWwsIEZGQUxJR04obmJfc2FtcGxlcywgMTYpKTsKKyNlbHNlCisgICAg ICAgIHMtPmZkc3AtPnZlY3Rvcl9kbXVsX3NjYWxhcihkc3QsIGRzdCwgbXVsLCBGRkFMSUdOKG5i X3NhbXBsZXMsIDE2KSk7CisjZW5kaWYKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGZuKHByb2Nl c3MpKEFWRmlsdGVyQ29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgQVZGcmFt ZSAqaW4sIEFWRnJhbWUgKm91dCkKK3sKKyAgICBBbWJpc29uaWNDb250ZXh0ICpzID0gY3R4LT5w cml2OworCisgICAgZm4oc2NhbGUpKHMsIGluLCBzLT5zZnJhbWUsIHMtPm5vcm1fdGFiW3MtPnNj YWxpbmdfbm9ybV0sCisgICAgICAgICAgICAgIGluLT5uYl9zYW1wbGVzLCBGRk1JTihpbi0+Y2hf bGF5b3V0Lm5iX2NoYW5uZWxzLCBzLT5tYXhfY2hhbm5lbHMpLAorICAgICAgICAgICAgICBzLT5z ZXFfbWFwKTsKKworICAgIGNhbGNfdHJhbnNmb3JtX21hdChzKTsKKworICAgIGZuKHRyYW5zZm9y bSkocywgcy0+c2ZyYW1lLCBzLT5yZnJhbWUsIHMtPnRyYW5zZm9ybV9tYXQsCisgICAgICAgICAg ICAgICAgICBpbi0+bmJfc2FtcGxlcywgRkZNSU4oaW4tPmNoX2xheW91dC5uYl9jaGFubmVscywg cy0+bWF4X2NoYW5uZWxzKSwKKyAgICAgICAgICAgICAgICAgIHMtPnNlcV9tYXApOworCisgICAg aWYgKHMtPm5lYXJfZmllbGQgPT0gTkZfSU4pCisgICAgICAgIG5lYXJfZmllbGQocywgcy0+cmZy YW1lLCAwLCAwKTsKKworICAgIGlmIChzLT54b3Zlcl9mcmVxID4gMC4pIHsKKyAgICAgICAgZm4o eG92ZXIpKHMsIHMtPnJmcmFtZSwgcy0+ZnJhbWUyLCBzLT5yZnJhbWUpOworCisgICAgICAgIGZu KG11bHRpcGx5KShzLCBzLT5kZWNvZGVfbWF0LAorICAgICAgICAgICAgICAgICAgICAgYW1iaXNv bmljX3RhYltzLT5sYXlvdXRdLmlucHV0cywKKyAgICAgICAgICAgICAgICAgICAgIGFtYmlzb25p Y190YWJbcy0+bGF5b3V0XS5zcGVha2VycywKKyAgICAgICAgICAgICAgICAgICAgIHMtPnNlcV9t YXAsCisgICAgICAgICAgICAgICAgICAgICBzLT5nYWluc190YWJbMF0sCisgICAgICAgICAgICAg ICAgICAgICBpbi0+Y2hfbGF5b3V0Lm5iX2NoYW5uZWxzLAorICAgICAgICAgICAgICAgICAgICAg cy0+bWF4X2NoYW5uZWxzLAorICAgICAgICAgICAgICAgICAgICAgcy0+ZnJhbWUyLCBvdXQpOwor ICAgIH0KKworICAgIGZuKG11bHRpcGx5KShzLCBzLT5kZWNvZGVfbWF0LAorICAgICAgICAgICAg ICAgICBhbWJpc29uaWNfdGFiW3MtPmxheW91dF0uaW5wdXRzLAorICAgICAgICAgICAgICAgICBh bWJpc29uaWNfdGFiW3MtPmxheW91dF0uc3BlYWtlcnMsCisgICAgICAgICAgICAgICAgIHMtPnNl cV9tYXAsCisgICAgICAgICAgICAgICAgIHMtPnhvdmVyX2ZyZXEgPiAwLiA/IHMtPmdhaW5zX3Rh YlsxXSA6IE5VTEwsCisgICAgICAgICAgICAgICAgIGluLT5jaF9sYXlvdXQubmJfY2hhbm5lbHMs CisgICAgICAgICAgICAgICAgIHMtPm1heF9jaGFubmVscywKKyAgICAgICAgICAgICAgICAgcy0+ cmZyYW1lLCBvdXQpOworCisgICAgaWYgKHMtPm5lYXJfZmllbGQgPT0gTkZfT1VUKQorICAgICAg ICBuZWFyX2ZpZWxkKHMsIG91dCwgMSwgMSk7CisKKyAgICBmbihsZXZlbCkocywgb3V0LCBzLT5s ZXZlbF90YWIsCisgICAgICAgICAgICAgIG91dC0+bmJfc2FtcGxlcywgb3V0LT5jaF9sYXlvdXQu bmJfY2hhbm5lbHMpOworfQotLSAKMi40Mi4xCgo= --000000000000a59aa5060a8423ba 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". --000000000000a59aa5060a8423ba--