From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 21618 invoked by alias); 14 Feb 2017 12:30:16 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: X-Seq: 40542 Received: (qmail 15359 invoked from network); 14 Feb 2017 12:30:16 -0000 X-Qmail-Scanner-Diagnostics: from new1-smtp.messagingengine.com by f.primenet.com.au (envelope-from , uid 7791) with qmail-scanner-2.11 (clamdscan: 0.99.2/21882. spamassassin: 3.4.1. Clear:RC:0(66.111.4.221):SA:0(-0.4/5.0):. Processed in 2.246868 secs); 14 Feb 2017 12:30:16 -0000 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-0.4 required=5.0 tests=FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,SPF_PASS,T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.1 X-Envelope-From: psprint2@fastmail.com X-Qmail-Scanner-Mime-Attachments: | X-Qmail-Scanner-Zip-Files: | Received-SPF: pass (ns1.primenet.com.au: SPF record at spf.messagingengine.com designates 66.111.4.221 as permitted sender) DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=fastmail.com; h= content-transfer-encoding:content-type:date:from:message-id :mime-version:subject:to:x-me-sender:x-me-sender:x-sasl-enc; s= mesmtp; bh=yGV63Efc6/GUuT272zOEs+YUqQE=; b=5xtjBWCeQoFBmG//V7lmA 9r55heHmZfi136hnfkuQ/YWsBlKl+3zV8L+hFIARLWavA/5V0TxjPFAgDjEq0WF4 KEJUPPjOIz9Gm6V6Lw2V2T3VbQwn/SjL+PneTJ+yl8OI9LUd74rfdUehWzYixkd0 27ZOzuFTPMHHXfFok3D3Vo= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d= messagingengine.com; h=content-transfer-encoding:content-type :date:from:message-id:mime-version:subject:to:x-me-sender :x-me-sender:x-sasl-enc; s=smtpout; bh=yGV63Efc6/GUuT272zOEs+YUq QE=; b=QKtBZUzCRLuPeW8rfveK1keXiVLMO6XmPIhqzrTSkdNhJXwoeqBBKRWEz DOeg0EUf2sHL/xvLtGqFB5E1VmHwRnAsiogL/DK7bEMDa0Cym8YOXIA8g9H0lQym cUIpbt5Jli5ezMSRH07EkiftPb1Uke6MQ33FJqbMb15kkQRvhk= X-ME-Sender: Message-Id: <1487074831.317363.880495280.04595B08@webmail.messagingengine.com> From: Sebastian Gniazdowski To: zsh-workers@zsh.org MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: multipart/mixed; boundary="_----------=_14870748313173630" X-Mailer: MessagingEngine.com Webmail Interface - ajax-5653d111 Date: Tue, 14 Feb 2017 04:20:31 -0800 Subject: [PATCH] db/gdbm rewrite --_----------=_14870748313173630 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Hello, gdbm module has specific design: =E2=80=93 hashtable is always empty =E2=80=93 getnode() returns heap-arena allocated (hcalloc) Param each time = a key is referenced =E2=80=93 the Param is PM_SCALAR, but it has u.hash set =E2=80=93 this is t= o pass aroud GDBM_FILE in u.hash.tmpdata =E2=80=93 the Param interfaces to database, never creates u.str (it cannot, would overwrite u.hash), returns GDBM internal strings I've rewritten the module: =E2=80=93 hashtable is filled normally, initially with ~PM_UPTODATE =E2=80=93 Param "dereference" detects ~PM_UPTODATE, uses database, sets u.s= tr, sets PM_UPTODATE =E2=80=93 GDBM_FILE is passed around in gsu_scalar extension: struct gsu_scalar_ext { struct gsu_scalar std; GDBM_FILE dbf; }; =E2=80=93 normal ztrdup() strings are returned from Param This way there is no subtle memory leak when doing: while (( 1 )); do val=3Dtied_param[key]; done Tested this and top values were 100 MiB and rising. Created also extensive tests (following V10private.ztst), doing things like +=3D( ), unset on not existing (in Zsh) key, but existing in database, scoping. I develop this as pluggable module psprint/zgdbm, here I submit a few days of work. I might further expand and submit to upstream, but what's there now is a finished work, confirmed by complete testing. Sending as patch and alternatively 2 separate files. PS. Maybe this: #define PM_UPTODATE (1<<19) /* Parameter has up-to-date data (e.g. loaded from DB) */ could be moved to zsh.h. It can be fairly common for every frontend-like module to use parameters that are not "up to date". --=20 Sebastian Gniazdowski psprint2@fastmail.com --_----------=_14870748313173630 Content-Disposition: attachment; filename="db_gdbm_rewrite.diff" Content-Id: <1487074635.317033.ae583a38c0a5025846fe5c3be7e6231f9831f615.6FDE75FF@content.messagingengine.com> Content-Transfer-Encoding: base64 Content-Type: text/plain; name="db_gdbm_rewrite.diff" ZGlmZiAtLWdpdCBhL1NyYy9Nb2R1bGVzL2RiX2dkYm0uYyBiL1NyYy9Nb2R1 bGVzL2RiX2dkYm0uYwppbmRleCAzMTBlMzI5Li5lYjgzZTdkIDEwMDY0NAot LS0gYS9TcmMvTW9kdWxlcy9kYl9nZGJtLmMKKysrIGIvU3JjL01vZHVsZXMv ZGJfZ2RibS5jCkBAIC02LDYgKzYsOSBAQAogICogQ29weXJpZ2h0IChjKSAy MDA4IENsaW50IEFkYW1zCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK KyAqIE1vZGlmaWNhdGlvbnMgY29weXJpZ2h0IChjKSAyMDE3IFNlYmFzdGlh biBHbmlhemRvd3NraQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCiAg KiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCB3aXRob3V0IHdyaXR0 ZW4gYWdyZWVtZW50IGFuZCB3aXRob3V0CiAgKiBsaWNlbnNlIG9yIHJveWFs dHkgZmVlcywgdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRl IHRoaXMKICAqIHNvZnR3YXJlIGFuZCB0byBkaXN0cmlidXRlIG1vZGlmaWVk IHZlcnNpb25zIG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQpAQCAtMzEsNiAr MzQsMTIgQEAKICNpbmNsdWRlICJkYl9nZGJtLm1kaCIKICNpbmNsdWRlICJk Yl9nZGJtLnBybyIKIAorI2lmbmRlZiBQTV9VUFRPREFURQorI2RlZmluZSBQ TV9VUFRPREFURSAgICAgKDE8PDE5KSAvKiBQYXJhbWV0ZXIgaGFzIHVwLXRv LWRhdGUgZGF0YSAoZS5nLiBsb2FkZWQgZnJvbSBEQikgKi8KKyNlbmRpZgor CitzdGF0aWMgUGFyYW0gY3JlYXRlaGFzaCggY2hhciAqbmFtZSwgaW50IGZs YWdzICk7CisKIC8qCiAgKiBNYWtlIHN1cmUgd2UgaGF2ZSBhbGwgdGhlIGJp dHMgSSdtIHVzaW5nIGZvciBtZW1vcnkgbWFwcGluZywgb3RoZXJ3aXNlCiAg KiBJIGRvbid0IGtub3cgd2hhdCBJJ20gZG9pbmcuCkBAIC00MSw4ICs1MCwz MyBAQAogCiBzdGF0aWMgY2hhciAqYmFja3R5cGUgPSAiZGIvZ2RibSI7CiAK LXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ3N1X3NjYWxhciBnZGJtX2dzdSA9Ci17 IGdkYm1nZXRmbiwgZ2RibXNldGZuLCBnZGJtdW5zZXRmbiB9OworLyoKKyAq IExvbmdlciBHU1Ugc3RydWN0dXJlLCB0byBjYXJyeSBHREJNX0ZJTEUgb2Yg b3duaW5nCisgKiBkYXRhYmFzZS4gRXZlcnkgcGFyYW1ldGVyIChoYXNoIHZh bHVlKSByZWNlaXZlcyBHU1UKKyAqIHBvaW50ZXIgYW5kIHRodXMgYWxzbyBy ZWNlaXZlcyBHREJNX0ZJTEUgLSB0aGlzIHdheQorICogcGFyYW1ldGVycyBj YW4gYWNjZXNzIHByb3BlciBkYXRhYmFzZS4KKyAqCisgKiBNYWluIEhhc2hU YWJsZSBwYXJhbWV0ZXIgaGFzIHRoZSBzYW1lIGluc3RhbmNlIG9mCisgKiB0 aGUgY3VzdG9tIEdTVSBzdHJ1Y3QgaW4gdS5oYXNoLT50bXBkYXRhIGZpZWxk LgorICogV2hlbiBkYXRhYmFzZSBpcyBjbG9zZWQsIGBkYmZgIGZpZWxkIGlz IHNldCB0byBOVUxMCisgKiBhbmQgaGFzaCB2YWx1ZXMga25vdyB0byBub3Qg YWNjZXNzIGRhdGFiYXNlIHdoZW4KKyAqIGJlaW5nIHVuc2V0ICh0b3RhbCBw dXJnZSBhdCB6dW50aWUpLgorICoKKyAqIFdoZW4gZGF0YWJhc2UgY2xvc2lu ZyBpcyBlbmRlZCwgY3VzdG9tIEdTVSBzdHJ1Y3QKKyAqIGlzIGZyZWVkLiBP bmx5IG5ldyB6dGllIGNyZWF0ZXMgbmV3IGN1c3RvbSBHU1UKKyAqIHN0cnVj dCBpbnN0YW5jZS4KKyAqLworCitzdHJ1Y3QgZ3N1X3NjYWxhcl9leHQgewor ICAgIHN0cnVjdCBnc3Vfc2NhbGFyIHN0ZDsKKyAgICBHREJNX0ZJTEUgZGJm OworfTsKKworLyogU291cmNlIHN0cnVjdHVyZSAtIHdpbGwgYmUgY29waWVk IHRvIGFsbG9jYXRlZCBvbmUsCisgKiB3aXRoIGBkYmZgIGZpbGxlZC4gYGRi ZmAgYWxsb2NhdGlvbiA8LT4gZ3N1IGFsbG9jYXRpb24uICovCitzdGF0aWMg Y29uc3Qgc3RydWN0IGdzdV9zY2FsYXJfZXh0IGdkYm1fZ3N1X2V4dCA9Cit7 IHsgZ2RibWdldGZuLCBnZGJtc2V0Zm4sIGdkYm11bnNldGZuIH0sIDAgfTsK KwogLyoqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBnc3VfaGFzaCBnZGJtX2hh c2hfZ3N1ID0KIHsgaGFzaGdldGZuLCBnZGJtaGFzaHNldGZuLCBnZGJtaGFz aHVuc2V0Zm4gfTsKQEAgLTc3LDggKzExMSw3IEBAIGJpbl96dGllKGNoYXIg Km5hbSwgY2hhciAqKmFyZ3MsIE9wdGlvbnMgb3BzLCBVTlVTRUQoaW50IGZ1 bmMpKQogICAgIH0KIAogICAgIC8qIEhlcmUgc2hvdWxkIGJlIGEgbG9va3Vw IG9mIHRoZSBiYWNrZW5kIHR5cGUgYWdhaW5zdAotICAgICAqIGEgcmVnaXN0 cnkuCi0gICAgICovCisgICAgICogYSByZWdpc3RyeSwgaWYgZ2VuZXJhbSBE QiBtZWNoYW5pc20gaXMgdG8gYmUgYWRkZWQgKi8KICAgICBpZiAoc3RyY21w KE9QVF9BUkcob3BzLCAnZCcpLCBiYWNrdHlwZSkgIT0gMCkgewogICAgICAg ICB6d2Fybm5hbShuYW0sICJ1bnN1cHBvcnRlZCBiYWNrZW5kIHR5cGUgYCVz JyIsIE9QVF9BUkcob3BzLCAnZCcpKTsKIAlyZXR1cm4gMTsKQEAgLTkyLDcg KzEyNSw4IEBAIGJpbl96dGllKGNoYXIgKm5hbSwgY2hhciAqKmFyZ3MsIE9w dGlvbnMgb3BzLCBVTlVTRUQoaW50IGZ1bmMpKQogCS8qCiAJICogVW5zZXQg YW55IGV4aXN0aW5nIHBhcmFtZXRlci4gIE5vdGUgdGhlcmUncyBubyBpbXBs aWNpdAogCSAqICJsb2NhbCIgaGVyZSwgYnV0IGlmIHRoZSBleGlzdGluZyBw YXJhbWV0ZXIgaXMgbG9jYWwKLQkgKiB0aGF0IHdpbGwgYmUgcmVmbGVjdGVk IGluIHRoZSBuZXcgb25lLgorCSAqIHRoZW4gbmV3IHBhcmFtZXRlciB3aWxs IGJlIGFsc28gbG9jYWwgd2l0aG91dCBmb2xsb3dpbmcKKyAgICAgICAgICog dW5zZXQuCiAJICoKIAkgKiBXZSBuZWVkIHRvIGRvIHRoaXMgYmVmb3JlIGF0 dGVtcHRpbmcgdG8gb3BlbiB0aGUgREIKIAkgKiBpbiBjYXNlIHRoaXMgdmFy aWFibGUgaXMgYWxyZWFkeSB0aWVkIHRvIGEgREIuCkBAIC0xMDcsMTQgKzE0 MSwxMyBAQCBiaW5fenRpZShjaGFyICpuYW0sIGNoYXIgKiphcmdzLCBPcHRp b25zIG9wcywgVU5VU0VEKGludCBmdW5jKSkKIAogICAgIGRiZiA9IGdkYm1f b3BlbihyZXNvdXJjZV9uYW1lLCAwLCByZWFkX3dyaXRlLCAwNjY2LCAwKTsK ICAgICBpZihkYmYpCi0JYWRkbW9kdWxlZmQoZ2RibV9mZGVzYyhkYmYpLCBG RFRfSU5URVJOQUwpOworCWFkZG1vZHVsZWZkKGdkYm1fZmRlc2MoZGJmKSwg RkRUX01PRFVMRSk7CiAgICAgZWxzZSB7CiAJendhcm5uYW0obmFtLCAiZXJy b3Igb3BlbmluZyBkYXRhYmFzZSBmaWxlICVzIiwgcmVzb3VyY2VfbmFtZSk7 CiAJcmV0dXJuIDE7CiAgICAgfQogCi0gICAgaWYgKCEodGllZF9wYXJhbSA9 IGNyZWF0ZXNwZWNpYWxoYXNoKHBtbmFtZSwgJmdldGdkYm1ub2RlLCAmc2Nh bmdkYm1rZXlzLAotCQkJCQkgcG1mbGFncykpKSB7CisgICAgaWYgKCEodGll ZF9wYXJhbSA9IGNyZWF0ZWhhc2gocG1uYW1lLCBwbWZsYWdzKSkpIHsKICAg ICAgICAgendhcm5uYW0obmFtLCAiY2Fubm90IGNyZWF0ZSB0aGUgcmVxdWVz dGVkIHBhcmFtZXRlciAlcyIsIHBtbmFtZSk7CiAJZmR0YWJsZVtnZGJtX2Zk ZXNjKGRiZildID0gRkRUX1VOVVNFRDsKIAlnZGJtX2Nsb3NlKGRiZik7CkBA IC0xMjIsNyArMTU1LDE1IEBAIGJpbl96dGllKGNoYXIgKm5hbSwgY2hhciAq KmFyZ3MsIE9wdGlvbnMgb3BzLCBVTlVTRUQoaW50IGZ1bmMpKQogICAgIH0K IAogICAgIHRpZWRfcGFyYW0tPmdzdS5oID0gJmdkYm1faGFzaF9nc3U7Ci0g ICAgdGllZF9wYXJhbS0+dS5oYXNoLT50bXBkYXRhID0gKHZvaWQgKilkYmY7 CisKKyAgICAvKiBBbGxvY2F0ZSBwYXJhbWV0ZXIgc3ViLWdzdSwgZmlsbCBk YmYgZmllbGQuIAorICAgICAqIGRiZiBhbGxvY2F0aW9uIGlzIDEgdG8gMSBh Y2NvbXBhbmllZCBieQorICAgICAqIGdzdV9zY2FsYXJfZXh0IGFsbG9jYXRp b24uICovCisKKyAgICBzdHJ1Y3QgZ3N1X3NjYWxhcl9leHQgKmRiZl9jYXJy aWVyID0gKHN0cnVjdCBnc3Vfc2NhbGFyX2V4dCAqKSB6YWxsb2Moc2l6ZW9m KHN0cnVjdCBnc3Vfc2NhbGFyX2V4dCkpOworICAgIGRiZl9jYXJyaWVyLT5z dGQgPSBnZGJtX2dzdV9leHQuc3RkOworICAgIGRiZl9jYXJyaWVyLT5kYmYg PSBkYmY7CisgICAgdGllZF9wYXJhbS0+dS5oYXNoLT50bXBkYXRhID0gKHZv aWQgKilkYmZfY2FycmllcjsKIAogICAgIHJldHVybiAwOwogfQpAQCAtMTYx LDYgKzIwMiwxOCBAQCBiaW5fenVudGllKGNoYXIgKm5hbSwgY2hhciAqKmFy Z3MsIE9wdGlvbnMgb3BzLCBVTlVTRUQoaW50IGZ1bmMpKQogICAgIHJldHVy biByZXQ7CiB9CiAKKy8qCisgKiBUaGUgcGFyYW0gaXMgYWN0dWFsIHBhcmFt IGluIGhhc2gg4oCTwqBhbHdheXMsIGJlY2F1c2UKKyAqIGdldGdkYm1ub2Rl IGNyZWF0ZXMgZXZlcnkgbmV3IGtleSBzZWVuLiBIb3dldmVyLCBpdAorICog bWlnaHQgYmUgbm90IFBNX1VQVE9EQVRFIC0gd2hpY2ggbWVhbnMgdGhhdCBk YXRhYmFzZQorICogd2Fzbid0IHlldCBxdWVyaWVkLgorICoKKyAqIEl0IHdp bGwgYmUgbGVmdCBpbiB0aGlzIHN0YXRlIGlmIGRhdGFiYXNlIGRvZXNuJ3QK KyAqIGNvbnRhaW4gc3VjaCBrZXkuIFRoYXQgbWlnaHQgYmUgYSBkcmF3YmFj aywgbWF5YmUKKyAqIHNldHRpbmcgdG8gZW1wdHkgdmFsdWUgaGFzIHNlbnNl LCBhcyBubyBvdGhlciB3cml0ZXIKKyAqIGNhbiBleGlzdC4gVGhpcyB3b3Vs ZCByZW1vdmUgc3VidGxlIGhjYWxsb2MoMSkgbGVhay4KKyAqLworCiAvKiov CiBzdGF0aWMgY2hhciAqCiBnZGJtZ2V0Zm4oUGFyYW0gcG0pCkBAIC0xNjks MTggKzIyMiw0MyBAQCBnZGJtZ2V0Zm4oUGFyYW0gcG0pCiAgICAgaW50IHJl dDsKICAgICBHREJNX0ZJTEUgZGJmOwogCisgICAgLyogS2V5IGFscmVhZHkg cmV0cmlldmVkPyBUaGVyZSBpcyBubyBzZW5zZSBvZiBhc2tpbmcgdGhlCisg ICAgICogZGF0YWJhc2UgYWdhaW4sIGJlY2F1c2U6CisgICAgICogLSB0aGVy ZSBjYW4gYmUgb25seSBtdWx0aXBsZSByZWFkZXJzCisgICAgICogLSBzbywg bm8gd3JpdGVyICsgcmVhZGVyIHVzZSBpcyBhbGxvd2VkCisgICAgICoKKyAg ICAgKiBUaHVzOgorICAgICAqIC0gaWYgd2UgYXJlIHdyaXRlcnMsIHdlIGZv ciBzdXJlIGhhdmUgbmV3ZXN0IGNvcHkgb2YgZGF0YQorICAgICAqIC0gaWYg d2UgYXJlIHJlYWRlcnMsIHdlIGZvciBzdXJlIGhhdmUgbmV3ZXN0IGNvcHkg b2YgZGF0YQorICAgICAqLworICAgIGlmICggcG0tPm5vZGUuZmxhZ3MgJiBQ TV9VUFRPREFURSApIHsKKyAgICAgICAgcmV0dXJuIHBtLT51LnN0ciA/IHBt LT51LnN0ciA6IChjaGFyICopIGhjYWxsb2MoMSk7CisgICAgfQorCiAgICAg a2V5LmRwdHIgPSBwbS0+bm9kZS5uYW07CiAgICAga2V5LmRzaXplID0gc3Ry bGVuKGtleS5kcHRyKTsKIAotICAgIGRiZiA9IChHREJNX0ZJTEUpKHBtLT51 Lmhhc2gtPnRtcGRhdGEpOwotICAgIHJldCA9IGdkYm1fZXhpc3RzKGRiZiwg a2V5KTsKLSAgICBpZihyZXQpIHsKKyAgICBkYmYgPSAoKHN0cnVjdCBnc3Vf c2NhbGFyX2V4dCAqKXBtLT5nc3UucyktPmRiZjsKKworICAgIGlmKChyZXQg PSBnZGJtX2V4aXN0cyhkYmYsIGtleSkpKSB7CisgICAgICAgIC8qIFdlIGhh dmUgZGF0YSDigJMgc3RvcmUgaXQsIHJldHVybiBpdCAqLworICAgICAgICBw bS0+bm9kZS5mbGFncyB8PSBQTV9VUFRPREFURTsKKwogICAgICAgICBjb250 ZW50ID0gZ2RibV9mZXRjaChkYmYsIGtleSk7Ci0gICAgfSBlbHNlIHsKLSAg ICAgICAgY29udGVudC5kcHRyID0gZHVwc3RyaW5nKCIiKTsKKworICAgICAg ICAvKiBFbnN1cmUgdGhlcmUncyBubyBsZWFrICovCisgICAgICAgIGlmIChw bS0+dS5zdHIpIHsKKyAgICAgICAgICAgIHpzZnJlZShwbS0+dS5zdHIpOwor ICAgICAgICB9CisKKyAgICAgICAgcG0tPnUuc3RyID0genRyZHVwcGZ4KCBj b250ZW50LmRwdHIsIGNvbnRlbnQuZHNpemUgKTsKKworICAgICAgICAvKiBD YW4gcmV0dXJuIHBvaW50ZXIsIGNvcnJlY3RseSBzYXZlZCBpbnNpZGUgaGFz aCAqLworICAgICAgICByZXR1cm4gcG0tPnUuc3RyOwogICAgIH0KIAotICAg IHJldHVybiBjb250ZW50LmRwdHI7CisgICAgLyogQ2FuIHRoaXMgYmUgIiIg PyAqLworICAgIHJldHVybiAoY2hhciAqKSBoY2FsbG9jKDEpOwogfQogCiAv KiovCkBAIC0xOTAsNDcgKzI2OCw4MSBAQCBnZGJtc2V0Zm4oUGFyYW0gcG0s IGNoYXIgKnZhbCkKICAgICBkYXR1bSBrZXksIGNvbnRlbnQ7CiAgICAgR0RC TV9GSUxFIGRiZjsKIAorICAgIC8qIFNldCBpcyBkb25lIG9uIHBhcmFtZXRl ciBhbmQgb24gZGF0YWJhc2UuCisgICAgICogU2VlIHRoZSBhbGxvd2VkIHdv cmtlcnMgLyByZWFkZXJzIGNvbW1lbnQKKyAgICAgKiBhdCBnZGJtZ2V0Zm4o KSAqLworCisgICAgLyogUGFyYW1ldGVyICovCisgICAgaWYgKHBtLT51LnN0 cikgeworICAgICAgICB6c2ZyZWUocG0tPnUuc3RyKTsKKyAgICAgICAgcG0t PnUuc3RyID0gTlVMTDsKKyAgICAgICAgcG0tPm5vZGUuZmxhZ3MgJj0gfihQ TV9VUFRPREFURSk7CisgICAgfQorCisgICAgaWYgKHZhbCkgeworICAgICAg ICBwbS0+dS5zdHIgPSB6dHJkdXAodmFsKTsKKyAgICAgICAgcG0tPm5vZGUu ZmxhZ3MgfD0gUE1fVVBUT0RBVEU7CisgICAgfQorCisgICAgLyogRGF0YWJh c2UgKi8KICAgICBrZXkuZHB0ciA9IHBtLT5ub2RlLm5hbTsKICAgICBrZXku ZHNpemUgPSBzdHJsZW4oa2V5LmRwdHIpOwotICAgIGNvbnRlbnQuZHB0ciA9 IHZhbDsKLSAgICBjb250ZW50LmRzaXplID0gc3RybGVuKGNvbnRlbnQuZHB0 cik7Ci0KLSAgICBkYmYgPSAoR0RCTV9GSUxFKShwbS0+dS5oYXNoLT50bXBk YXRhKTsKLSAgICAodm9pZClnZGJtX3N0b3JlKGRiZiwga2V5LCBjb250ZW50 LCBHREJNX1JFUExBQ0UpOworICAgIGRiZiA9ICgoc3RydWN0IGdzdV9zY2Fs YXJfZXh0ICopcG0tPmdzdS5zKS0+ZGJmOworCisgICAgaWYgKHZhbCkgewor ICAgICAgICBpZiAoZGJmKSB7CisgICAgICAgICAgICBjb250ZW50LmRwdHIg PSB2YWw7CisgICAgICAgICAgICBjb250ZW50LmRzaXplID0gc3RybGVuKGNv bnRlbnQuZHB0cik7CisgICAgICAgICAgICAodm9pZClnZGJtX3N0b3JlKGRi Ziwga2V5LCBjb250ZW50LCBHREJNX1JFUExBQ0UpOworICAgICAgICB9Cisg ICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGRiZikgeworICAgICAgICAgICAg KHZvaWQpZ2RibV9kZWxldGUoZGJmLCBrZXkpOworICAgICAgICB9CisgICAg fQogfQogCiAvKiovCiBzdGF0aWMgdm9pZAogZ2RibXVuc2V0Zm4oUGFyYW0g cG0sIFVOVVNFRChpbnQgdW0pKQogewotICAgIGRhdHVtIGtleTsKLSAgICBH REJNX0ZJTEUgZGJmOwotCi0gICAga2V5LmRwdHIgPSBwbS0+bm9kZS5uYW07 Ci0gICAga2V5LmRzaXplID0gc3RybGVuKGtleS5kcHRyKTsKLQotICAgIGRi ZiA9IChHREJNX0ZJTEUpKHBtLT51Lmhhc2gtPnRtcGRhdGEpOwotICAgICh2 b2lkKWdkYm1fZGVsZXRlKGRiZiwga2V5KTsKKyAgICAvKiBTZXQgd2l0aCBO VUxMICovCisgICAgZ2RibXNldGZuKHBtLCBOVUxMKTsKIH0KIAogLyoqLwog c3RhdGljIEhhc2hOb2RlCiBnZXRnZGJtbm9kZShIYXNoVGFibGUgaHQsIGNv bnN0IGNoYXIgKm5hbWUpCiB7Ci0gICAgaW50IGxlbjsKLSAgICBjaGFyICpu YW1ldTsKLSAgICBQYXJhbSBwbSA9IE5VTEw7Ci0KLSAgICBuYW1ldSA9IGR1 cHN0cmluZyhuYW1lKTsKLSAgICB1bm1ldGFmeShuYW1ldSwgJmxlbik7Ci0K LSAgICBwbSA9IChQYXJhbSkgaGNhbGxvYyhzaXplb2Yoc3RydWN0IHBhcmFt KSk7Ci0gICAgcG0tPm5vZGUubmFtID0gbmFtZXU7Ci0gICAgcG0tPm5vZGUu ZmxhZ3MgPSBQTV9TQ0FMQVI7Ci0gICAgcG0tPmdzdS5zID0gJmdkYm1fZ3N1 OwotICAgIHBtLT51Lmhhc2ggPSBodDsKKyAgICBIYXNoTm9kZSBobiA9IGdl dGhhc2hub2RlMiggaHQsIG5hbWUgKTsKKyAgICBQYXJhbSB2YWxfcG0gPSAo UGFyYW0pIGhuOworCisgICAgLyogRW50cnkgZm9yIGtleSBkb2Vzbid0IGV4 aXN0PyBDcmVhdGUgaXQgbm93LAorICAgICAqIGl0IHdpbGwgYmUgaW50ZXJm YWNpbmcgYmV0d2VlbiB0aGUgZGF0YWJhc2UKKyAgICAgKiBhbmQgWnNoIC0g dGhyb3VnaCBzcGVjaWFsIGdkYm1fZ3N1LiBTbywgYW55CisgICAgICogc2Vl biBrZXkgcmVzdWx0cyBpbiBuZXcgaW50ZXJmYWNpbmcgcGFyYW1ldGVyLgor ICAgICAqCisgICAgICogUHJldmlvdXMgY29kZSB3YXMgcmV0dXJuaW5nIGhl YXAgYXJlbmEgUGFyYW0KKyAgICAgKiB0aGF0IHdhc24ndCBhY3R1YWxseSBh ZGRlZCB0byB0aGUgaGFzaC4gSXQgd2FzCisgICAgICogcGxhaW5seSBuYW1l IC8gZGF0YWJhc2Uta2V5IGhvbGRlci4gSGVyZSB3ZQorICAgICAqIGFkZCB0 aGUgUGFyYW0gdG8gaXRzIGhhc2gsIGl0IGlzIG5vdCBQTV9VUFRPREFURS4K KyAgICAgKiBJdCB3aWxsIGJlIGxvYWRlZCBmcm9tIGRhdGFiYXNlICphbmQg ZmlsbGVkKgorICAgICAqIG9yIGxlZnQgaW4gdGhhdCBzdGF0ZSBpZiB0aGUg ZGF0YWJhc2UgZG9lc24ndAorICAgICAqIGNvbnRhaW4gaXQuCisgICAgICoK KyAgICAgKiBObyBoZWFwIGFyZW5hIG1lbW9yeSBpcyB1c2VkLCBtZW1vcnkg dXNhZ2UgaXMKKyAgICAgKiBub3cgbGltaXRlZCAtIGJ5IG51bWJlciBvZiBk aXN0aW5jdCBrZXlzIHNlZW4sCisgICAgICogbm90IGJ5IG51bWJlciBvZiBr ZXkgKnVzZXMqLgorICAgICAqICovCisKKyAgICBpZiAoICEgdmFsX3BtICkg eworICAgICAgICB2YWxfcG0gPSAoUGFyYW0pIHpzaGNhbGxvYyggc2l6ZW9m ICgqdmFsX3BtKSApOworICAgICAgICB2YWxfcG0tPm5vZGUuZmxhZ3MgPSBQ TV9TQ0FMQVIgfCBQTV9IQVNIRUxFTTsgLyogbm8gUE1fVVBUT0RBVEUgKi8K KyAgICAgICAgdmFsX3BtLT5nc3UucyA9IChHc3VTY2FsYXIpIGh0LT50bXBk YXRhOworICAgICAgICBodC0+YWRkbm9kZSggaHQsIHp0cmR1cCggbmFtZSAp LCB2YWxfcG0gKTsgLy8gc2V0cyBwbS0+bm9kZS5uYW0KKyAgICB9CiAKLSAg ICByZXR1cm4gJnBtLT5ub2RlOworICAgIHJldHVybiAoSGFzaE5vZGUpIHZh bF9wbTsKIH0KIAogLyoqLwpAQCAtMjM5LDI5ICszNTEsMzMgQEAgc2Nhbmdk Ym1rZXlzKEhhc2hUYWJsZSBodCwgU2NhbkZ1bmMgZnVuYywgaW50IGZsYWdz KQogewogICAgIFBhcmFtIHBtID0gTlVMTDsKICAgICBkYXR1bSBrZXksIGNv bnRlbnQ7Ci0gICAgR0RCTV9GSUxFIGRiZiA9IChHREJNX0ZJTEUpKGh0LT50 bXBkYXRhKTsKLQotICAgIHBtID0gKFBhcmFtKSBoY2FsbG9jKHNpemVvZihz dHJ1Y3QgcGFyYW0pKTsKLQotICAgIHBtLT5ub2RlLmZsYWdzID0gUE1fU0NB TEFSOwotICAgIHBtLT5nc3UucyA9ICZudWxsc2V0c2NhbGFyX2dzdTsKKyAg ICBHREJNX0ZJTEUgZGJmID0gKChzdHJ1Y3QgZ3N1X3NjYWxhcl9leHQgKilo dC0+dG1wZGF0YSktPmRiZjsKIAorICAgIC8qIEl0ZXJhdGUga2V5cyBhZGRp bmcgdGhlbSB0byBoYXNoLCBzbworICAgICAqIHdlIGhhdmUgUGFyYW0gdG8g dXNlIGluIGBmdW5jYCAqLwogICAgIGtleSA9IGdkYm1fZmlyc3RrZXkoZGJm KTsKIAogICAgIHdoaWxlKGtleS5kcHRyKSB7Ci0JY29udGVudCA9IGdkYm1f ZmV0Y2goZGJmLCBrZXkpOwotCi0JcG0tPm5vZGUubmFtID0ga2V5LmRwdHI7 Ci0JcG0tPnUuc3RyID0gY29udGVudC5kcHRyOwotCXBtLT5nc3UucyA9ICZu dWxsc2V0c2NhbGFyX2dzdTsKKyAgICAgICAgLyogVGhpcyByZXR1cm5zIGRh dGFiYXNlLWludGVyZmFjaW5nIFBhcmFtLAorICAgICAgICAgKiBpdCB3aWxs IHJldHVybiB1LnN0ciBvciBmaXJzdCBmZXRjaCBkYXRhCisgICAgICAgICAq IGlmIG5vdCBQTV9VUFRPREFURSAobmV3bHkgY3JlYXRlZCkgKi8KKyAgICAg ICAgY2hhciAqemtleSA9IHp0cmR1cHBmeChrZXkuZHB0ciwga2V5LmRzaXpl KTsKKyAgICAgICAgSGFzaE5vZGUgaG4gPSBnZXRnZGJtbm9kZShodCwgemtl eSk7CisgICAgICAgIHpzZnJlZSggemtleSApOwogCi0JZnVuYygmcG0tPm5v ZGUsIGZsYWdzKTsKKwlmdW5jKGhuLCBmbGFncyk7CiAKKyAgICAgICAgLyog SXRlcmF0ZSAtIG5vIHByb2JsZW0gYXMgaW50ZXJmYWNpbmcgUGFyYW0KKyAg ICAgICAgICogd2lsbCBkbyBhdCBtb3N0IG9ubHkgZmV0Y2hlcywgbm90IHN0 b3JlcyAqLwogICAgICAgICBrZXkgPSBnZGJtX25leHRrZXkoZGJmLCBrZXkp OwogICAgIH0KIAogfQogCisvKgorICogUmVwbGFjZSBkYXRhYmFzZSB3aXRo IG5ldyBoYXNoCisgKi8KKwogLyoqLwogc3RhdGljIHZvaWQKIGdkYm1oYXNo c2V0Zm4oUGFyYW0gcG0sIEhhc2hUYWJsZSBodCkKQEAgLTI3NCw3ICszOTAs NyBAQCBnZGJtaGFzaHNldGZuKFBhcmFtIHBtLCBIYXNoVGFibGUgaHQpCiAg ICAgaWYgKCFwbS0+dS5oYXNoIHx8IHBtLT51Lmhhc2ggPT0gaHQpCiAJcmV0 dXJuOwogCi0gICAgaWYgKCEoZGJmID0gKEdEQk1fRklMRSkocG0tPnUuaGFz aC0+dG1wZGF0YSkpKQorICAgIGlmICghKGRiZiA9ICgoc3RydWN0IGdzdV9z Y2FsYXJfZXh0ICopcG0tPnUuaGFzaC0+dG1wZGF0YSktPmRiZikpCiAJcmV0 dXJuOwogCiAgICAga2V5ID0gZ2RibV9maXJzdGtleShkYmYpOwpAQCAtMjky LDYgKzQwOCw5IEBAIGdkYm1oYXNoc2V0Zm4oUGFyYW0gcG0sIEhhc2hUYWJs ZSBodCkKICAgICBpZiAoIWh0KQogCXJldHVybjsKIAorICAgICAvKiBQdXQg bmV3IHN0cmluZ3MgaW50byBkYXRhYmFzZSwgd2FpdGluZworICAgICAgKiBm b3IgdGhlaXIgaW50ZXJmYWNpbmctUGFyYW1zIHRvIGJlIGNyZWF0ZWQgKi8K KwogICAgIGZvciAoaSA9IDA7IGkgPCBodC0+aHNpemU7IGkrKykKIAlmb3Ig KGhuID0gaHQtPm5vZGVzW2ldOyBobjsgaG4gPSBobi0+bmV4dCkgewogCSAg ICBzdHJ1Y3QgdmFsdWUgdjsKQEAgLTMxOSwxNSArNDM4LDE2IEBAIGdkYm1o YXNoc2V0Zm4oUGFyYW0gcG0sIEhhc2hUYWJsZSBodCkKIHN0YXRpYyB2b2lk CiBnZGJtdW50aWUoUGFyYW0gcG0pCiB7Ci0gICAgR0RCTV9GSUxFIGRiZiA9 IChHREJNX0ZJTEUpKHBtLT51Lmhhc2gtPnRtcGRhdGEpOworICAgIEdEQk1f RklMRSBkYmYgPSAoKHN0cnVjdCBnc3Vfc2NhbGFyX2V4dCAqKXBtLT51Lmhh c2gtPnRtcGRhdGEpLT5kYmY7CiAgICAgSGFzaFRhYmxlIGh0ID0gcG0tPnUu aGFzaDsKIAogICAgIGlmIChkYmYpIHsgLyogcGFyYW5vaWEgKi8KIAlmZHRh YmxlW2dkYm1fZmRlc2MoZGJmKV0gPSBGRFRfVU5VU0VEOwotCWdkYm1fY2xv c2UoZGJmKTsKLSAgICB9CisgICAgICAgIGdkYm1fY2xvc2UoZGJmKTsKIAot ICAgIGh0LT50bXBkYXRhID0gTlVMTDsKKyAgICAgICAgLyogTGV0IGhhc2gg ZmllbGRzIGtub3cgdGhlcmUncyBubyBiYWNrZW5kICovCisgICAgICAgICgo c3RydWN0IGdzdV9zY2FsYXJfZXh0ICopaHQtPnRtcGRhdGEpLT5kYmYgPSBO VUxMOworICAgIH0KIAogICAgIC8qIGZvciBjb21wbGV0ZW5lc3MgLi4uIGNy ZWF0ZXNwZWNpYWxoYXNoKCkgc2hvdWxkIGhhdmUgYW4gaW52ZXJzZSAqLwog ICAgIGh0LT5nZXRub2RlID0gaHQtPmdldG5vZGUyID0gZ2V0aGFzaG5vZGUy OwpAQCAtMzQyLDggKzQ2MiwxOSBAQCBzdGF0aWMgdm9pZAogZ2RibWhhc2h1 bnNldGZuKFBhcmFtIHBtLCBVTlVTRUQoaW50IGV4cCkpCiB7CiAgICAgZ2Ri bXVudGllKHBtKTsKLSAgICAvKiBoYXNoIHRhYmxlIGlzIG5vdyBub3JtYWws IHNvIHByb2NlZWQgbm9ybWFsbHkuLi4gKi8KKworICAgIC8qIFJlbWVtYmVy IGN1c3RvbSBHU1Ugc3RydWN0dXJlIGFzc2lnbmVkIHRvCisgICAgICogdS5o YXNoLT50bXBkYXRhIGJlZm9yZSBoYXNoIGdldHMgZGVsZXRlZCAqLworICAg IHZvaWQgKiBnc3VfZXh0ID0gcG0tPnUuaGFzaC0+dG1wZGF0YTsKKworICAg IC8qIFVzZXMgbm9ybWFsIHVuc2V0dGVyLiBXaWxsIGRlbGV0ZSBhbGwgb3du ZWQKKyAgICAgKiBwYXJhbWV0ZXJzIGFuZCBhbHNvIGhhc2h0YWJsZS4gKi8K ICAgICBwbS0+Z3N1LmgtPnNldGZuKHBtLCBOVUxMKTsKKworICAgIC8qIERv bid0IG5lZWQgY3VzdG9tIEdTVSBzdHJ1Y3R1cmUgd2l0aCBpdHMKKyAgICAg KiBHREJNX0ZJTEUgcG9pbnRlciBhbnltb3JlICovCisgICAgemZyZWUoIGdz dV9leHQsIHNpemVvZihzdHJ1Y3QgZ3N1X3NjYWxhcl9leHQpKTsKKwogICAg IHBtLT5ub2RlLmZsYWdzIHw9IFBNX1VOU0VUOwogfQogCkBAIC00MDEsMyAr NTMyLDMwIEBAIGZpbmlzaF8oVU5VU0VEKE1vZHVsZSBtKSkKIHsKICAgICBy ZXR1cm4gMDsKIH0KKworc3RhdGljIFBhcmFtIGNyZWF0ZWhhc2goIGNoYXIg Km5hbWUsIGludCBmbGFncyApIHsKKyAgICBQYXJhbSBwbTsKKyAgICBIYXNo VGFibGUgaHQ7CisKKyAgICBwbSA9IGNyZWF0ZXBhcmFtKG5hbWUsIFBNX1NQ RUNJQUwgfCBQTV9IQVNIRUQpOworICAgIGlmICghcG0pIHsKKyAgICAgICAg cmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKHBtLT5vbGQpCisJcG0t PmxldmVsID0gbG9jYWxsZXZlbDsKKworICAgIC8qIFRoaXMgY3JlYXRlcyBz dGFuZGFyZCBoYXNoLiAqLworICAgIGh0ID0gcG0tPnUuaGFzaCA9IG5ld3Bh cmFtdGFibGUoMzIsIG5hbWUpOworICAgIGlmICghcG0tPnUuaGFzaCkgewor ICAgICAgICBwYXJhbXRhYi0+cmVtb3Zlbm9kZShwYXJhbXRhYiwgbmFtZSk7 CisgICAgICAgIHBhcmFtdGFiLT5mcmVlbm9kZSgmcG0tPm5vZGUpOworICAg ICAgICB6d2Fybm5hbShuYW1lLCAiT3V0IG9mIG1lbW9yeSB3aGVuIGFsbG9j YXRpbmcgaGFzaCIpOworICAgIH0KKworICAgIC8qIFRoZXNlIHByb3ZpZGUg c3BlY2lhbCBmZWF0dXJlcyAqLworICAgIGh0LT5nZXRub2RlID0gaHQtPmdl dG5vZGUyID0gZ2V0Z2RibW5vZGU7CisgICAgaHQtPnNjYW50YWIgPSBzY2Fu Z2RibWtleXM7CisKKyAgICByZXR1cm4gcG07Cit9CmRpZmYgLS1naXQgYS9U ZXN0L1YxMWRiX2dkYm0uenRzdCBiL1Rlc3QvVjExZGJfZ2RibS56dHN0Cm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjZWE1NWYKLS0t IC9kZXYvbnVsbAorKysgYi9UZXN0L1YxMWRiX2dkYm0uenRzdApAQCAtMCww ICsxLDIxNSBAQAorIyBUZXN0cyBmb3IgdGhlIHpzaC9wYXJhbS9wcml2YXRl IG1vZHVsZQorCislcHJlcAorCisgI21vZHVsZV9wYXRoKz0oIH4vZ2l0aHVi L3pnZGJtL21vZHVsZS9TcmMgKQorICNtb2RuYW1lPSJwc3ByaW50L3pnZGJt IgorIG1vZG5hbWU9InpzaC9kYi9nZGJtIgorIGRiZmlsZT1kYi5nZGJtCisg aWYgISB6bW9kbG9hZCAkbW9kbmFtZSA7IHRoZW4KKyAgIFpUU1RfdW5pbXBs ZW1lbnRlZD0iY2FuJ3QgbG9hZCAkbW9kbmFtZSBtb2R1bGUgZm9yIHRlc3Rp bmciCisgZmkKKyBybSAtZiBkYi5nZGJtCisKKyV0ZXN0CisKKyAoem1vZGxv YWQgLXUgJG1vZG5hbWUgJiYgem1vZGxvYWQgJG1vZG5hbWUpCiswOnVubG9h ZCBhbmQgcmVsb2FkIHRoZSBtb2R1bGUgd2l0aG91dCBjcmFzaGluZworCisg enRpZSAtZCBkYi9nZGJtIC1mICRkYmZpbGUgZGJhc2UKKyB6dW50aWUgZGJh c2UKKzA6Y3JlYXRlIHRoZSBkYXRhYmFzZQorCisgenRpZSAtciAtZCBkYi9n ZGJtIC1mICRkYmZpbGUgZGJhc2UKKyB6dW50aWUgLXUgZGJhc2UKKzA6b3Bl biB0aGUgZGF0YWJhc2UgcmVhZC1vbmx5CisKKyB6dGllIC1kIGRiL2dkYm0g LWYgJGRiZmlsZSBkYmFzZQorIGRiYXNlW3Rlc3RrZXldPXRlc3RkYXRhCisg enVudGllIGRiYXNlCisgenRpZSAtciAtZCBkYi9nZGJtIC1mICRkYmZpbGUg ZGJhc2UKKyBlY2hvICRkYmFzZVt0ZXN0a2V5XQorIHp1bnRpZSAtdSBkYmFz ZQorMDpzdG9yZSBrZXkgaW4gZGF0YWJhc2UKKz50ZXN0ZGF0YQorCisgenRp ZSAtZCBkYi9nZGJtIC1mICRkYmZpbGUgZGJhc2UyCisgdW5zZXQgJ2RiYXNl Mlt0ZXN0a2V5XScKKyB6dW50aWUgZGJhc2UyCisgenRpZSAtZCBkYi9nZGJt IC1mICRkYmZpbGUgZGJhc2UKKyBlY2hvICRkYmFzZVt0ZXN0a2V5XQorIHp1 bnRpZSBkYmFzZQorMDpyZW1vdmUga2V5IGZyb20gZGF0YWJhc2UgKGRpZmZl cmVudCB2YXJpYWJsZXMpCis+CisKKyB6dGllIC1kIGRiL2dkYm0gLWYgJGRi ZmlsZSBkYmFzZQorIGRiYXNlW3Rlc3RrZXldPXRlc3RkYXRhCisgenVudGll IGRiYXNlCisgenRpZSAtciAtZCBkYi9nZGJtIC1mICRkYmZpbGUgZGJhc2UK KyBlY2hvICRkYmFzZVt0ZXN0a2V5XQorIHp1bnRpZSAtdSBkYmFzZQorIHp0 aWUgLWQgZGIvZ2RibSAtZiAkZGJmaWxlIGRiYXNlCisgdW5zZXQgJ2RiYXNl W3Rlc3RrZXldJworIHp1bnRpZSBkYmFzZQorIHp0aWUgLXIgLWQgZGIvZ2Ri bSAtZiAkZGJmaWxlIGRiYXNlCisgZWNobyAkZGJhc2VbdGVzdGtleV0KKyB6 dW50aWUgLXUgZGJhc2UKKzA6c3RvcmUgJiByZW1vdmUga2V5IGZyb20gZGF0 YWJhc2UgKHRoZSBzYW1lIHZhcmlhYmxlcykKKz50ZXN0ZGF0YQorPgorCisg enRpZSAtZCBkYi9nZGJtIC1mICRkYmZpbGUgZGJhc2UKKyBkYmFzZVt0ZXN0 a2V5XT10ZXN0ZGF0YQorIGRiYXNlW3Rlc3RrZXkyXT0kZGJhc2VbdGVzdGtl eV0KKyBkYmFzZVt0ZXN0a2V5M109JGRiYXNlW3Rlc3RrZXldeCRkYmFzZVt0 ZXN0a2V5Ml0KKyB6dW50aWUgZGJhc2UKKyB6dGllIC1kIGRiL2dkYm0gLWYg JGRiZmlsZSBkYmFzZQorIGVjaG8gJGRiYXNlW3Rlc3RrZXldCisgZWNobyAk ZGJhc2VbdGVzdGtleTJdCisgZWNobyAkZGJhc2VbdGVzdGtleTNdCisgenVu dGllIGRiYXNlCiswOnN0b3JlIDIga2V5cyBmZXRjaGluZyAxc3QKKz50ZXN0 ZGF0YQorPnRlc3RkYXRhCis+dGVzdGRhdGF4dGVzdGRhdGEKKworIHp0aWUg LWQgZGIvZ2RibSAtZiAkZGJmaWxlIGRiYXNlCisgdmFsPSRkYmFzZVt0ZXN0 a2V5Ml0KKyB1bnNldCAnZGJhc2VbdGVzdGtleTJdJworIGVjaG8gJHZhbAor IHp1bnRpZSBkYmFzZQorMDp1bnNldCBrZXkgdGhhdCB3YXMgZmV0Y2hlZAor PnRlc3RkYXRhCisKKyB6dGllIC1yIC1kIGRiL2dkYm0gLWYgJGRiZmlsZSBk YmFzZQorIHByaW50IC1ybCAtLSAiJHsoa3YpZGJhc2VbQF19IgorIHp1bnRp ZSAtdSBkYmFzZQorMDpzY2FuIHJlYWQtb25seSB0aWVkIGhhc2gKKz50ZXN0 a2V5Cis+dGVzdGRhdGEKKz50ZXN0a2V5MworPnRlc3RkYXRheHRlc3RkYXRh CisKKyB6dGllIC1kIGRiL2dkYm0gLWYgJGRiZmlsZSBkYmFzZQorIGxvY2Fs IC1hIGFycgorIGFycj0oICIkeyhrdilkYmFzZVtAXX0iICkKKyBwcmludCAt cmwgLS0gIiR7YXJyW0BdfSIKKyB6dW50aWUgZGJhc2UKKzA6ZGlmZmVyZW50 IHNjYW4sIGFsc28gcmVhZC13cml0ZSBtb2RlCis+dGVzdGtleQorPnRlc3Rk YXRhCis+dGVzdGtleTMKKz50ZXN0ZGF0YXh0ZXN0ZGF0YQorCisgenRpZSAt ZCBkYi9nZGJtIC1mICRkYmZpbGUgZGJhc2UKKyBkYmFzZT0oIGEgYiBjIGQg KQorIHp1bnRpZSBkYmFzZQorIHp0aWUgLWQgZGIvZ2RibSAtZiAkZGJmaWxl IGRiYXNlCisgcHJpbnQgLXJsIC0tICIkeyhrdilkYmFzZVtAXX0iCisgenVu dGllIGRiYXNlCiswOnJlcGxhY2UgaGFzaCAvIGRhdGFiYXNlLCBzY2FuCis+ YworPmQKKz5hCis+YgorCisgenRpZSAtZCBkYi9nZGJtIC1mICRkYmZpbGUg ZGJhc2UKKyBsb2NhbCAtYSBhcnIKKyBhcnI9KCAiJHtkYmFzZVtAXX0iICkK KyBwcmludCAtcmwgLS0gIiR7YXJyW0BdfSIKKyB6dW50aWUgZGJhc2UKKzA6 c2NhbiB3aXRoIG5vIChrdikKKz5kCis+YgorCisgenRpZSAtZCBkYi9nZGJt IC1mICRkYmZpbGUgZGJhc2UKKyBwcmludCAtcmwgLS0gIiR7KGspZGJhc2Vb QF19IgorIHp1bnRpZSBkYmFzZQorMDpzY2FuIHdpdGgga2V5cyBvbmx5IChr KQorPmMKKz5hCisKKyB6dGllIC1kIGRiL2dkYm0gLWYgJGRiZmlsZSBkYmFz ZQorIHByaW50IC1ybCAtLSAiJHsodilkYmFzZVtAXX0iCisgenVudGllIGRi YXNlCiswOnNjYW4gd2l0aCBrZXlzIG9ubHkgZXhwbGljaXQgKHYpCis+ZAor PmIKKworIHJtIC1mICRkYmZpbGUKKyB6dGllIC1yIC1kIGRiL2dkYm0gLWYg JGRiZmlsZSBkYmFzZSAyPi9kZXYvbnVsbAorMTpyZWFkLW9ubHkgb3BlbiBu b24tZXhpc3RlbnQgZGF0YWJhc2UKKworIHp0aWUgLWQgZGIvZ2RibSAtZiAk ZGJmaWxlIGRiYXNlCisgZGJhc2UrPSggYSBiICkKKyBlY2hvICRkYmFzZVth XQorIHp1bnRpZSBkYmFzZQorIHp0aWUgLXIgLWQgZGIvZ2RibSAtZiAkZGJm aWxlIGRiYXNlCisgZWNobyAkZGJhc2VbYV0KKyBwcmludCAtcmwgLS0gIiR7 KGt2KWRiYXNlW0BdfSIKKyB6dW50aWUgLXUgZGJhc2UKKyB6dGllIC1kIGRi L2dkYm0gLWYgJGRiZmlsZSBkYmFzZQorIGRiYXNlKz0oIGMgZCApCisgZWNo byAkZGJhc2VbYV0KKyBlY2hvICRkYmFzZVtjXQorIHByaW50IC1ybCAtLSAi JHsoa3YpZGJhc2VbQF19IgorIHp1bnRpZSBkYmFzZQorIHp0aWUgLXIgLWQg ZGIvZ2RibSAtZiAkZGJmaWxlIGRiYXNlCisgZWNobyAkZGJhc2VbYV0KKyBl Y2hvICRkYmFzZVtjXQorIHByaW50IC1ybCAtLSAiJHsoa3YpZGJhc2VbQF19 IgorIHp1bnRpZSAtdSBkYmFzZQorMDpBcHBlbmQgd2l0aCArPSggKSwgYWxz byB3aXRoIGV4aXN0aW5nIGRhdGEsIGFsc28gKGt2KSBzY2FuCis+YgorPmIK Kz5hCis+YgorPmIKKz5kCis+YworPmQKKz5hCis+YgorPmIKKz5kCis+Ywor PmQKKz5hCis+YgorCisgenRpZSAtZCBkYi9nZGJtIC1mICRkYmZpbGUgZGJh c2UKKyBlY2hvICR7KHQpZGJhc2V9CisgenVudGllIGRiYXNlCiswOlR5cGUg b2YgdGllZCBwYXJhbWV0ZXIKKz5hc3NvY2lhdGlvbi1zcGVjaWFsCisKKyB0 eXBlc2V0IC1nYSBkYmFzZQorIHp0aWUgLWQgZGIvZ2RibSAtZiAkZGJmaWxl IGRiYXNlCisgZWNobyAkeyh0KWRiYXNlfQorIHp1bnRpZSBkYmFzZQorMDpU eXBlIG9mIHRpZWQgcGFyYW1ldGVyLCB3aXRoIHByZWNlZGluZyB1bnNldAor PmFzc29jaWF0aW9uLXNwZWNpYWwKKworIGxvY2FsIC1hIGRiYXNlCisgenRp ZSAtZCBkYi9nZGJtIC1mICRkYmZpbGUgZGJhc2UKKyBlY2hvICR7KHQpZGJh c2V9CisgenVudGllIGRiYXNlCiswOlR5cGUgb2YgdGllZCBwYXJhbWV0ZXIs IHdpdGggbG9jYWwgcGFyYW1ldGVyIGFscmVhZHkgZXhpc3RpbmcKKz5hc3Nv Y2lhdGlvbi1sb2NhbC1zcGVjaWFsCisKKyBsb2NhbCAtYSBkYmFzZQorIGRi YXNlPSggZnJvbWFycmF5ICkKKyAoKSB7CisgICAgIGxvY2FsIC1hIGRiYXNl CisgICAgIHp0aWUgLWQgZGIvZ2RibSAtZiAkZGJmaWxlIGRiYXNlCisgICAg IGVjaG8gJHsodClkYmFzZX0KKyAgICAgenVudGllIGRiYXNlCisgfQorIGVj aG8gJGRiYXNlWzFdCisgenRpZSAtZCBkYi9nZGJtIC1mICRkYmZpbGUgZGJh c2UyCisgZWNobyAiQ2FuIGNvbm5lY3QsIHNvIHVudGllIGhhcHBlbmVkOiIg JGRiYXNlMlthXQorIHp1bnRpZSBkYmFzZTIKKzA6VGVzdCBvZiBhdXRvbWF0 aWMgdW50aWUgKHVzZSBvZiBsb2NhbCBzY29wZSkgYW5kIG9mIHNjb3BpbmcK Kz5hc3NvY2lhdGlvbi1sb2NhbC1zcGVjaWFsCis+ZnJvbWFycmF5Cis+Q2Fu IGNvbm5lY3QsIHNvIHVudGllIGhhcHBlbmVkOiBiCg== --_----------=_14870748313173630 Content-Disposition: attachment; filename="V11db_gdbm.ztst.txt" Content-Id: <1487074713.317162.44bf7ee5b1042d521bb914ce740960d6796b0db8.28A698F6@content.messagingengine.com> Content-Transfer-Encoding: base64 Content-Type: text/plain; name="V11db_gdbm.ztst.txt" IyBUZXN0cyBmb3IgdGhlIHpzaC9wYXJhbS9wcml2YXRlIG1vZHVsZQoKJXBy ZXAKCiAjbW9kdWxlX3BhdGgrPSggfi9naXRodWIvemdkYm0vbW9kdWxlL1Ny YyApCiAjbW9kbmFtZT0icHNwcmludC96Z2RibSIKIG1vZG5hbWU9InpzaC9k Yi9nZGJtIgogZGJmaWxlPWRiLmdkYm0KIGlmICEgem1vZGxvYWQgJG1vZG5h bWUgOyB0aGVuCiAgIFpUU1RfdW5pbXBsZW1lbnRlZD0iY2FuJ3QgbG9hZCAk bW9kbmFtZSBtb2R1bGUgZm9yIHRlc3RpbmciCiBmaQogcm0gLWYgZGIuZ2Ri bQoKJXRlc3QKCiAoem1vZGxvYWQgLXUgJG1vZG5hbWUgJiYgem1vZGxvYWQg JG1vZG5hbWUpCjA6dW5sb2FkIGFuZCByZWxvYWQgdGhlIG1vZHVsZSB3aXRo b3V0IGNyYXNoaW5nCgogenRpZSAtZCBkYi9nZGJtIC1mICRkYmZpbGUgZGJh c2UKIHp1bnRpZSBkYmFzZQowOmNyZWF0ZSB0aGUgZGF0YWJhc2UKCiB6dGll IC1yIC1kIGRiL2dkYm0gLWYgJGRiZmlsZSBkYmFzZQogenVudGllIC11IGRi YXNlCjA6b3BlbiB0aGUgZGF0YWJhc2UgcmVhZC1vbmx5CgogenRpZSAtZCBk Yi9nZGJtIC1mICRkYmZpbGUgZGJhc2UKIGRiYXNlW3Rlc3RrZXldPXRlc3Rk YXRhCiB6dW50aWUgZGJhc2UKIHp0aWUgLXIgLWQgZGIvZ2RibSAtZiAkZGJm aWxlIGRiYXNlCiBlY2hvICRkYmFzZVt0ZXN0a2V5XQogenVudGllIC11IGRi YXNlCjA6c3RvcmUga2V5IGluIGRhdGFiYXNlCj50ZXN0ZGF0YQoKIHp0aWUg LWQgZGIvZ2RibSAtZiAkZGJmaWxlIGRiYXNlMgogdW5zZXQgJ2RiYXNlMlt0 ZXN0a2V5XScKIHp1bnRpZSBkYmFzZTIKIHp0aWUgLWQgZGIvZ2RibSAtZiAk ZGJmaWxlIGRiYXNlCiBlY2hvICRkYmFzZVt0ZXN0a2V5XQogenVudGllIGRi YXNlCjA6cmVtb3ZlIGtleSBmcm9tIGRhdGFiYXNlIChkaWZmZXJlbnQgdmFy aWFibGVzKQo+CgogenRpZSAtZCBkYi9nZGJtIC1mICRkYmZpbGUgZGJhc2UK IGRiYXNlW3Rlc3RrZXldPXRlc3RkYXRhCiB6dW50aWUgZGJhc2UKIHp0aWUg LXIgLWQgZGIvZ2RibSAtZiAkZGJmaWxlIGRiYXNlCiBlY2hvICRkYmFzZVt0 ZXN0a2V5XQogenVudGllIC11IGRiYXNlCiB6dGllIC1kIGRiL2dkYm0gLWYg JGRiZmlsZSBkYmFzZQogdW5zZXQgJ2RiYXNlW3Rlc3RrZXldJwogenVudGll IGRiYXNlCiB6dGllIC1yIC1kIGRiL2dkYm0gLWYgJGRiZmlsZSBkYmFzZQog ZWNobyAkZGJhc2VbdGVzdGtleV0KIHp1bnRpZSAtdSBkYmFzZQowOnN0b3Jl ICYgcmVtb3ZlIGtleSBmcm9tIGRhdGFiYXNlICh0aGUgc2FtZSB2YXJpYWJs ZXMpCj50ZXN0ZGF0YQo+CgogenRpZSAtZCBkYi9nZGJtIC1mICRkYmZpbGUg ZGJhc2UKIGRiYXNlW3Rlc3RrZXldPXRlc3RkYXRhCiBkYmFzZVt0ZXN0a2V5 Ml09JGRiYXNlW3Rlc3RrZXldCiBkYmFzZVt0ZXN0a2V5M109JGRiYXNlW3Rl c3RrZXldeCRkYmFzZVt0ZXN0a2V5Ml0KIHp1bnRpZSBkYmFzZQogenRpZSAt ZCBkYi9nZGJtIC1mICRkYmZpbGUgZGJhc2UKIGVjaG8gJGRiYXNlW3Rlc3Rr ZXldCiBlY2hvICRkYmFzZVt0ZXN0a2V5Ml0KIGVjaG8gJGRiYXNlW3Rlc3Rr ZXkzXQogenVudGllIGRiYXNlCjA6c3RvcmUgMiBrZXlzIGZldGNoaW5nIDFz dAo+dGVzdGRhdGEKPnRlc3RkYXRhCj50ZXN0ZGF0YXh0ZXN0ZGF0YQoKIHp0 aWUgLWQgZGIvZ2RibSAtZiAkZGJmaWxlIGRiYXNlCiB2YWw9JGRiYXNlW3Rl c3RrZXkyXQogdW5zZXQgJ2RiYXNlW3Rlc3RrZXkyXScKIGVjaG8gJHZhbAog enVudGllIGRiYXNlCjA6dW5zZXQga2V5IHRoYXQgd2FzIGZldGNoZWQKPnRl c3RkYXRhCgogenRpZSAtciAtZCBkYi9nZGJtIC1mICRkYmZpbGUgZGJhc2UK IHByaW50IC1ybCAtLSAiJHsoa3YpZGJhc2VbQF19IgogenVudGllIC11IGRi YXNlCjA6c2NhbiByZWFkLW9ubHkgdGllZCBoYXNoCj50ZXN0a2V5Cj50ZXN0 ZGF0YQo+dGVzdGtleTMKPnRlc3RkYXRheHRlc3RkYXRhCgogenRpZSAtZCBk Yi9nZGJtIC1mICRkYmZpbGUgZGJhc2UKIGxvY2FsIC1hIGFycgogYXJyPSgg IiR7KGt2KWRiYXNlW0BdfSIgKQogcHJpbnQgLXJsIC0tICIke2FycltAXX0i CiB6dW50aWUgZGJhc2UKMDpkaWZmZXJlbnQgc2NhbiwgYWxzbyByZWFkLXdy aXRlIG1vZGUKPnRlc3RrZXkKPnRlc3RkYXRhCj50ZXN0a2V5Mwo+dGVzdGRh dGF4dGVzdGRhdGEKCiB6dGllIC1kIGRiL2dkYm0gLWYgJGRiZmlsZSBkYmFz ZQogZGJhc2U9KCBhIGIgYyBkICkKIHp1bnRpZSBkYmFzZQogenRpZSAtZCBk Yi9nZGJtIC1mICRkYmZpbGUgZGJhc2UKIHByaW50IC1ybCAtLSAiJHsoa3Yp ZGJhc2VbQF19IgogenVudGllIGRiYXNlCjA6cmVwbGFjZSBoYXNoIC8gZGF0 YWJhc2UsIHNjYW4KPmMKPmQKPmEKPmIKCiB6dGllIC1kIGRiL2dkYm0gLWYg JGRiZmlsZSBkYmFzZQogbG9jYWwgLWEgYXJyCiBhcnI9KCAiJHtkYmFzZVtA XX0iICkKIHByaW50IC1ybCAtLSAiJHthcnJbQF19IgogenVudGllIGRiYXNl CjA6c2NhbiB3aXRoIG5vIChrdikKPmQKPmIKCiB6dGllIC1kIGRiL2dkYm0g LWYgJGRiZmlsZSBkYmFzZQogcHJpbnQgLXJsIC0tICIkeyhrKWRiYXNlW0Bd fSIKIHp1bnRpZSBkYmFzZQowOnNjYW4gd2l0aCBrZXlzIG9ubHkgKGspCj5j Cj5hCgogenRpZSAtZCBkYi9nZGJtIC1mICRkYmZpbGUgZGJhc2UKIHByaW50 IC1ybCAtLSAiJHsodilkYmFzZVtAXX0iCiB6dW50aWUgZGJhc2UKMDpzY2Fu IHdpdGgga2V5cyBvbmx5IGV4cGxpY2l0ICh2KQo+ZAo+YgoKIHJtIC1mICRk YmZpbGUKIHp0aWUgLXIgLWQgZGIvZ2RibSAtZiAkZGJmaWxlIGRiYXNlIDI+ L2Rldi9udWxsCjE6cmVhZC1vbmx5IG9wZW4gbm9uLWV4aXN0ZW50IGRhdGFi YXNlCgogenRpZSAtZCBkYi9nZGJtIC1mICRkYmZpbGUgZGJhc2UKIGRiYXNl Kz0oIGEgYiApCiBlY2hvICRkYmFzZVthXQogenVudGllIGRiYXNlCiB6dGll IC1yIC1kIGRiL2dkYm0gLWYgJGRiZmlsZSBkYmFzZQogZWNobyAkZGJhc2Vb YV0KIHByaW50IC1ybCAtLSAiJHsoa3YpZGJhc2VbQF19IgogenVudGllIC11 IGRiYXNlCiB6dGllIC1kIGRiL2dkYm0gLWYgJGRiZmlsZSBkYmFzZQogZGJh c2UrPSggYyBkICkKIGVjaG8gJGRiYXNlW2FdCiBlY2hvICRkYmFzZVtjXQog cHJpbnQgLXJsIC0tICIkeyhrdilkYmFzZVtAXX0iCiB6dW50aWUgZGJhc2UK IHp0aWUgLXIgLWQgZGIvZ2RibSAtZiAkZGJmaWxlIGRiYXNlCiBlY2hvICRk YmFzZVthXQogZWNobyAkZGJhc2VbY10KIHByaW50IC1ybCAtLSAiJHsoa3Yp ZGJhc2VbQF19IgogenVudGllIC11IGRiYXNlCjA6QXBwZW5kIHdpdGggKz0o ICksIGFsc28gd2l0aCBleGlzdGluZyBkYXRhLCBhbHNvIChrdikgc2Nhbgo+ Ygo+Ygo+YQo+Ygo+Ygo+ZAo+Ywo+ZAo+YQo+Ygo+Ygo+ZAo+Ywo+ZAo+YQo+ YgoKIHp0aWUgLWQgZGIvZ2RibSAtZiAkZGJmaWxlIGRiYXNlCiBlY2hvICR7 KHQpZGJhc2V9CiB6dW50aWUgZGJhc2UKMDpUeXBlIG9mIHRpZWQgcGFyYW1l dGVyCj5hc3NvY2lhdGlvbi1zcGVjaWFsCgogdHlwZXNldCAtZ2EgZGJhc2UK IHp0aWUgLWQgZGIvZ2RibSAtZiAkZGJmaWxlIGRiYXNlCiBlY2hvICR7KHQp ZGJhc2V9CiB6dW50aWUgZGJhc2UKMDpUeXBlIG9mIHRpZWQgcGFyYW1ldGVy LCB3aXRoIHByZWNlZGluZyB1bnNldAo+YXNzb2NpYXRpb24tc3BlY2lhbAoK IGxvY2FsIC1hIGRiYXNlCiB6dGllIC1kIGRiL2dkYm0gLWYgJGRiZmlsZSBk YmFzZQogZWNobyAkeyh0KWRiYXNlfQogenVudGllIGRiYXNlCjA6VHlwZSBv ZiB0aWVkIHBhcmFtZXRlciwgd2l0aCBsb2NhbCBwYXJhbWV0ZXIgYWxyZWFk eSBleGlzdGluZwo+YXNzb2NpYXRpb24tbG9jYWwtc3BlY2lhbAoKIGxvY2Fs IC1hIGRiYXNlCiBkYmFzZT0oIGZyb21hcnJheSApCiAoKSB7CiAgICAgbG9j YWwgLWEgZGJhc2UKICAgICB6dGllIC1kIGRiL2dkYm0gLWYgJGRiZmlsZSBk YmFzZQogICAgIGVjaG8gJHsodClkYmFzZX0KICAgICB6dW50aWUgZGJhc2UK IH0KIGVjaG8gJGRiYXNlWzFdCiB6dGllIC1kIGRiL2dkYm0gLWYgJGRiZmls ZSBkYmFzZTIKIGVjaG8gIkNhbiBjb25uZWN0LCBzbyB1bnRpZSBoYXBwZW5l ZDoiICRkYmFzZTJbYV0KIHp1bnRpZSBkYmFzZTIKMDpUZXN0IG9mIGF1dG9t YXRpYyB1bnRpZSAodXNlIG9mIGxvY2FsIHNjb3BlKSBhbmQgb2Ygc2NvcGlu Zwo+YXNzb2NpYXRpb24tbG9jYWwtc3BlY2lhbAo+ZnJvbWFycmF5Cj5DYW4g Y29ubmVjdCwgc28gdW50aWUgaGFwcGVuZWQ6IGIK --_----------=_14870748313173630 Content-Disposition: attachment; filename="db_gdbm.c.txt" Content-Id: <1487074754.317242.edd524420c5590ae60e28a523d2bc394825d2adb.5D1B9988@content.messagingengine.com> Content-Transfer-Encoding: base64 Content-Type: text/plain; name="db_gdbm.c.txt" LyoKICogZGJfZ2RibS5jIC0gYmluZGluZ3MgZm9yIGdkYm0KICoKICogVGhp cyBmaWxlIGlzIHBhcnQgb2YgenNoLCB0aGUgWiBzaGVsbC4KICoKICogQ29w eXJpZ2h0IChjKSAyMDA4IENsaW50IEFkYW1zCiAqIEFsbCByaWdodHMgcmVz ZXJ2ZWQuCiAqCiAqIE1vZGlmaWNhdGlvbnMgY29weXJpZ2h0IChjKSAyMDE3 IFNlYmFzdGlhbiBHbmlhemRvd3NraQogKiBBbGwgcmlnaHRzIHJlc2VydmVk LgogKgogKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCB3aXRob3V0 IHdyaXR0ZW4gYWdyZWVtZW50IGFuZCB3aXRob3V0CiAqIGxpY2Vuc2Ugb3Ig cm95YWx0eSBmZWVzLCB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3Ry aWJ1dGUgdGhpcwogKiBzb2Z0d2FyZSBhbmQgdG8gZGlzdHJpYnV0ZSBtb2Rp ZmllZCB2ZXJzaW9ucyBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKICogcHVy cG9zZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGlj ZSBhbmQgdGhlIGZvbGxvd2luZwogKiB0d28gcGFyYWdyYXBocyBhcHBlYXIg aW4gYWxsIGNvcGllcyBvZiB0aGlzIHNvZnR3YXJlLgogKgogKiBJbiBubyBl dmVudCBzaGFsbCBDbGludCBBZGFtcyBvciB0aGUgWnNoIERldmVsb3BtZW50 CiAqIEdyb3VwIGJlIGxpYWJsZSB0byBhbnkgcGFydHkgZm9yIGRpcmVjdCwg aW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwsIG9yCiAqIGNvbnNlcXVl bnRpYWwgZGFtYWdlcyBhcmlzaW5nIG91dCBvZiB0aGUgdXNlIG9mIHRoaXMg c29mdHdhcmUgYW5kIGl0cwogKiBkb2N1bWVudGF0aW9uLCBldmVuIGlmIFBl dGVyIFN0ZXBoZW5zb24sIFN2ZW4gV2lzY2hub3dza3kgYW5kIHRoZSBac2gK ICogRGV2ZWxvcG1lbnQgR3JvdXAgaGF2ZSBiZWVuIGFkdmlzZWQgb2YgdGhl IHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlLgogKgogKiBDbGludCBBZGFt cyBhbmQgdGhlIFpzaCBEZXZlbG9wbWVudCBHcm91cAogKiBzcGVjaWZpY2Fs bHkgZGlzY2xhaW0gYW55IHdhcnJhbnRpZXMsIGluY2x1ZGluZywgYnV0IG5v dCBsaW1pdGVkIHRvLCB0aGUKICogaW1wbGllZCB3YXJyYW50aWVzIG9mIG1l cmNoYW50YWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1 cnBvc2UuCiAqIFRoZSBzb2Z0d2FyZSBwcm92aWRlZCBoZXJldW5kZXIgaXMg b24gYW4gImFzIGlzIiBiYXNpcywgYW5kIFBldGVyCiAqIFN0ZXBoZW5zb24s IFN2ZW4gV2lzY2hub3dza3kgYW5kIHRoZSBac2ggRGV2ZWxvcG1lbnQgR3Jv dXAgaGF2ZSBubwogKiBvYmxpZ2F0aW9uIHRvIHByb3ZpZGUgbWFpbnRlbmFu Y2UsIHN1cHBvcnQsIHVwZGF0ZXMsIGVuaGFuY2VtZW50cywgb3IKICogbW9k aWZpY2F0aW9ucy4KICoKICovCgojaW5jbHVkZSAiZGJfZ2RibS5tZGgiCiNp bmNsdWRlICJkYl9nZGJtLnBybyIKCiNpZm5kZWYgUE1fVVBUT0RBVEUKI2Rl ZmluZSBQTV9VUFRPREFURSAgICAgKDE8PDE5KSAvKiBQYXJhbWV0ZXIgaGFz IHVwLXRvLWRhdGUgZGF0YSAoZS5nLiBsb2FkZWQgZnJvbSBEQikgKi8KI2Vu ZGlmCgpzdGF0aWMgUGFyYW0gY3JlYXRlaGFzaCggY2hhciAqbmFtZSwgaW50 IGZsYWdzICk7CgovKgogKiBNYWtlIHN1cmUgd2UgaGF2ZSBhbGwgdGhlIGJp dHMgSSdtIHVzaW5nIGZvciBtZW1vcnkgbWFwcGluZywgb3RoZXJ3aXNlCiAq IEkgZG9uJ3Qga25vdyB3aGF0IEknbSBkb2luZy4KICovCiNpZiBkZWZpbmVk KEhBVkVfR0RCTV9IKSAmJiBkZWZpbmVkKEhBVkVfR0RCTV9PUEVOKQoKI2lu Y2x1ZGUgPGdkYm0uaD4KCnN0YXRpYyBjaGFyICpiYWNrdHlwZSA9ICJkYi9n ZGJtIjsKCi8qCiAqIExvbmdlciBHU1Ugc3RydWN0dXJlLCB0byBjYXJyeSBH REJNX0ZJTEUgb2Ygb3duaW5nCiAqIGRhdGFiYXNlLiBFdmVyeSBwYXJhbWV0 ZXIgKGhhc2ggdmFsdWUpIHJlY2VpdmVzIEdTVQogKiBwb2ludGVyIGFuZCB0 aHVzIGFsc28gcmVjZWl2ZXMgR0RCTV9GSUxFIC0gdGhpcyB3YXkKICogcGFy YW1ldGVycyBjYW4gYWNjZXNzIHByb3BlciBkYXRhYmFzZS4KICoKICogTWFp biBIYXNoVGFibGUgcGFyYW1ldGVyIGhhcyB0aGUgc2FtZSBpbnN0YW5jZSBv ZgogKiB0aGUgY3VzdG9tIEdTVSBzdHJ1Y3QgaW4gdS5oYXNoLT50bXBkYXRh IGZpZWxkLgogKiBXaGVuIGRhdGFiYXNlIGlzIGNsb3NlZCwgYGRiZmAgZmll bGQgaXMgc2V0IHRvIE5VTEwKICogYW5kIGhhc2ggdmFsdWVzIGtub3cgdG8g bm90IGFjY2VzcyBkYXRhYmFzZSB3aGVuCiAqIGJlaW5nIHVuc2V0ICh0b3Rh bCBwdXJnZSBhdCB6dW50aWUpLgogKgogKiBXaGVuIGRhdGFiYXNlIGNsb3Np bmcgaXMgZW5kZWQsIGN1c3RvbSBHU1Ugc3RydWN0CiAqIGlzIGZyZWVkLiBP bmx5IG5ldyB6dGllIGNyZWF0ZXMgbmV3IGN1c3RvbSBHU1UKICogc3RydWN0 IGluc3RhbmNlLgogKi8KCnN0cnVjdCBnc3Vfc2NhbGFyX2V4dCB7CiAgICBz dHJ1Y3QgZ3N1X3NjYWxhciBzdGQ7CiAgICBHREJNX0ZJTEUgZGJmOwp9OwoK LyogU291cmNlIHN0cnVjdHVyZSAtIHdpbGwgYmUgY29waWVkIHRvIGFsbG9j YXRlZCBvbmUsCiAqIHdpdGggYGRiZmAgZmlsbGVkLiBgZGJmYCBhbGxvY2F0 aW9uIDwtPiBnc3UgYWxsb2NhdGlvbi4gKi8Kc3RhdGljIGNvbnN0IHN0cnVj dCBnc3Vfc2NhbGFyX2V4dCBnZGJtX2dzdV9leHQgPQp7IHsgZ2RibWdldGZu LCBnZGJtc2V0Zm4sIGdkYm11bnNldGZuIH0sIDAgfTsKCi8qKi8Kc3RhdGlj IGNvbnN0IHN0cnVjdCBnc3VfaGFzaCBnZGJtX2hhc2hfZ3N1ID0KeyBoYXNo Z2V0Zm4sIGdkYm1oYXNoc2V0Zm4sIGdkYm1oYXNodW5zZXRmbiB9OwoKc3Rh dGljIHN0cnVjdCBidWlsdGluIGJpbnRhYltdID0gewogICAgQlVJTFRJTigi enRpZSIsIDAsIGJpbl96dGllLCAxLCAtMSwgMCwgImQ6ZjpyIiwgTlVMTCks CiAgICBCVUlMVElOKCJ6dW50aWUiLCAwLCBiaW5fenVudGllLCAxLCAtMSwg MCwgInUiLCBOVUxMKSwKfTsKCi8qKi8Kc3RhdGljIGludApiaW5fenRpZShj aGFyICpuYW0sIGNoYXIgKiphcmdzLCBPcHRpb25zIG9wcywgVU5VU0VEKGlu dCBmdW5jKSkKewogICAgY2hhciAqcmVzb3VyY2VfbmFtZSwgKnBtbmFtZTsK ICAgIEdEQk1fRklMRSBkYmYgPSBOVUxMOwogICAgaW50IHJlYWRfd3JpdGUg PSBHREJNX1NZTkMsIHBtZmxhZ3MgPSBQTV9SRU1PVkFCTEU7CiAgICBQYXJh bSB0aWVkX3BhcmFtOwoKICAgIGlmKCFPUFRfSVNTRVQob3BzLCdkJykpIHsK ICAgICAgICB6d2Fybm5hbShuYW0sICJ5b3UgbXVzdCBwYXNzIGAtZCAlcyci LCBiYWNrdHlwZSk7CglyZXR1cm4gMTsKICAgIH0KICAgIGlmKCFPUFRfSVNT RVQob3BzLCdmJykpIHsKICAgICAgICB6d2Fybm5hbShuYW0sICJ5b3UgbXVz dCBwYXNzIGAtZicgd2l0aCBhIGZpbGVuYW1lIiwgTlVMTCk7CglyZXR1cm4g MTsKICAgIH0KICAgIGlmIChPUFRfSVNTRVQob3BzLCdyJykpIHsKCXJlYWRf d3JpdGUgfD0gR0RCTV9SRUFERVI7CglwbWZsYWdzIHw9IFBNX1JFQURPTkxZ OwogICAgfSBlbHNlIHsKCXJlYWRfd3JpdGUgfD0gR0RCTV9XUkNSRUFUOwog ICAgfQoKICAgIC8qIEhlcmUgc2hvdWxkIGJlIGEgbG9va3VwIG9mIHRoZSBi YWNrZW5kIHR5cGUgYWdhaW5zdAogICAgICogYSByZWdpc3RyeSwgaWYgZ2Vu ZXJhbSBEQiBtZWNoYW5pc20gaXMgdG8gYmUgYWRkZWQgKi8KICAgIGlmIChz dHJjbXAoT1BUX0FSRyhvcHMsICdkJyksIGJhY2t0eXBlKSAhPSAwKSB7CiAg ICAgICAgendhcm5uYW0obmFtLCAidW5zdXBwb3J0ZWQgYmFja2VuZCB0eXBl IGAlcyciLCBPUFRfQVJHKG9wcywgJ2QnKSk7CglyZXR1cm4gMTsKICAgIH0K CiAgICByZXNvdXJjZV9uYW1lID0gT1BUX0FSRyhvcHMsICdmJyk7CiAgICBw bW5hbWUgPSAqYXJnczsKCiAgICBpZiAoKHRpZWRfcGFyYW0gPSAoUGFyYW0p cGFyYW10YWItPmdldG5vZGUocGFyYW10YWIsIHBtbmFtZSkpICYmCgkhKHRp ZWRfcGFyYW0tPm5vZGUuZmxhZ3MgJiBQTV9VTlNFVCkpIHsKCS8qCgkgKiBV bnNldCBhbnkgZXhpc3RpbmcgcGFyYW1ldGVyLiAgTm90ZSB0aGVyZSdzIG5v IGltcGxpY2l0CgkgKiAibG9jYWwiIGhlcmUsIGJ1dCBpZiB0aGUgZXhpc3Rp bmcgcGFyYW1ldGVyIGlzIGxvY2FsCgkgKiB0aGVuIG5ldyBwYXJhbWV0ZXIg d2lsbCBiZSBhbHNvIGxvY2FsIHdpdGhvdXQgZm9sbG93aW5nCiAgICAgICAg ICogdW5zZXQuCgkgKgoJICogV2UgbmVlZCB0byBkbyB0aGlzIGJlZm9yZSBh dHRlbXB0aW5nIHRvIG9wZW4gdGhlIERCCgkgKiBpbiBjYXNlIHRoaXMgdmFy aWFibGUgaXMgYWxyZWFkeSB0aWVkIHRvIGEgREIuCgkgKgoJICogVGhpcyBj YW4gZmFpbCBpZiB0aGUgdmFyaWFibGUgaXMgcmVhZG9ubHkgb3IgcmVzdHJp Y3RlZC4KCSAqIFdlIGNvdWxkIGNhbGwgdW5zZXRwYXJhbSgpIGFuZCBjaGVj ayBlcnJmbGFnIGluc3RlYWQKCSAqIG9mIHRoZSByZXR1cm4gc3RhdHVzLgoJ ICovCglpZiAodW5zZXRwYXJhbV9wbSh0aWVkX3BhcmFtLCAwLCAxKSkKCSAg ICByZXR1cm4gMTsKICAgIH0KCiAgICBkYmYgPSBnZGJtX29wZW4ocmVzb3Vy Y2VfbmFtZSwgMCwgcmVhZF93cml0ZSwgMDY2NiwgMCk7CiAgICBpZihkYmYp CglhZGRtb2R1bGVmZChnZGJtX2ZkZXNjKGRiZiksIEZEVF9NT0RVTEUpOwog ICAgZWxzZSB7Cgl6d2Fybm5hbShuYW0sICJlcnJvciBvcGVuaW5nIGRhdGFi YXNlIGZpbGUgJXMiLCByZXNvdXJjZV9uYW1lKTsKCXJldHVybiAxOwogICAg fQoKICAgIGlmICghKHRpZWRfcGFyYW0gPSBjcmVhdGVoYXNoKHBtbmFtZSwg cG1mbGFncykpKSB7CiAgICAgICAgendhcm5uYW0obmFtLCAiY2Fubm90IGNy ZWF0ZSB0aGUgcmVxdWVzdGVkIHBhcmFtZXRlciAlcyIsIHBtbmFtZSk7Cglm ZHRhYmxlW2dkYm1fZmRlc2MoZGJmKV0gPSBGRFRfVU5VU0VEOwoJZ2RibV9j bG9zZShkYmYpOwoJcmV0dXJuIDE7CiAgICB9CgogICAgdGllZF9wYXJhbS0+ Z3N1LmggPSAmZ2RibV9oYXNoX2dzdTsKCiAgICAvKiBBbGxvY2F0ZSBwYXJh bWV0ZXIgc3ViLWdzdSwgZmlsbCBkYmYgZmllbGQuIAogICAgICogZGJmIGFs bG9jYXRpb24gaXMgMSB0byAxIGFjY29tcGFuaWVkIGJ5CiAgICAgKiBnc3Vf c2NhbGFyX2V4dCBhbGxvY2F0aW9uLiAqLwoKICAgIHN0cnVjdCBnc3Vfc2Nh bGFyX2V4dCAqZGJmX2NhcnJpZXIgPSAoc3RydWN0IGdzdV9zY2FsYXJfZXh0 ICopIHphbGxvYyhzaXplb2Yoc3RydWN0IGdzdV9zY2FsYXJfZXh0KSk7CiAg ICBkYmZfY2Fycmllci0+c3RkID0gZ2RibV9nc3VfZXh0LnN0ZDsKICAgIGRi Zl9jYXJyaWVyLT5kYmYgPSBkYmY7CiAgICB0aWVkX3BhcmFtLT51Lmhhc2gt PnRtcGRhdGEgPSAodm9pZCAqKWRiZl9jYXJyaWVyOwoKICAgIHJldHVybiAw Owp9CgovKiovCnN0YXRpYyBpbnQKYmluX3p1bnRpZShjaGFyICpuYW0sIGNo YXIgKiphcmdzLCBPcHRpb25zIG9wcywgVU5VU0VEKGludCBmdW5jKSkKewog ICAgUGFyYW0gcG07CiAgICBjaGFyICpwbW5hbWU7CiAgICBpbnQgcmV0ID0g MDsKCiAgICBmb3IgKHBtbmFtZSA9ICphcmdzOyAqYXJncysrOyBwbW5hbWUg PSAqYXJncykgewoJcG0gPSAoUGFyYW0pIHBhcmFtdGFiLT5nZXRub2RlKHBh cmFtdGFiLCBwbW5hbWUpOwoJaWYoIXBtKSB7CgkgICAgendhcm5uYW0obmFt LCAiY2Fubm90IHVudGllICVzIiwgcG1uYW1lKTsKCSAgICByZXQgPSAxOwoJ ICAgIGNvbnRpbnVlOwoJfQoJaWYgKHBtLT5nc3UuaCAhPSAmZ2RibV9oYXNo X2dzdSkgewoJICAgIHp3YXJubmFtKG5hbSwgIm5vdCBhIHRpZWQgZ2RibSBo YXNoOiAlcyIsIHBtbmFtZSk7CgkgICAgcmV0ID0gMTsKCSAgICBjb250aW51 ZTsKCX0KCglxdWV1ZV9zaWduYWxzKCk7CglpZiAoT1BUX0lTU0VUKG9wcywn dScpKQoJICAgIGdkYm11bnRpZShwbSk7CS8qIGNsZWFyIHJlYWQtb25seS1u ZXNzICovCglpZiAodW5zZXRwYXJhbV9wbShwbSwgMCwgMSkpIHsKCSAgICAv KiBhc3N1bWUgYWxyZWFkeSByZXBvcnRlZCAqLwoJICAgIHJldCA9IDE7Cgl9 Cgl1bnF1ZXVlX3NpZ25hbHMoKTsKICAgIH0KCiAgICByZXR1cm4gcmV0Owp9 CgovKgogKiBUaGUgcGFyYW0gaXMgYWN0dWFsIHBhcmFtIGluIGhhc2gg4oCT wqBhbHdheXMsIGJlY2F1c2UKICogZ2V0Z2RibW5vZGUgY3JlYXRlcyBldmVy eSBuZXcga2V5IHNlZW4uIEhvd2V2ZXIsIGl0CiAqIG1pZ2h0IGJlIG5vdCBQ TV9VUFRPREFURSAtIHdoaWNoIG1lYW5zIHRoYXQgZGF0YWJhc2UKICogd2Fz bid0IHlldCBxdWVyaWVkLgogKgogKiBJdCB3aWxsIGJlIGxlZnQgaW4gdGhp cyBzdGF0ZSBpZiBkYXRhYmFzZSBkb2Vzbid0CiAqIGNvbnRhaW4gc3VjaCBr ZXkuIFRoYXQgbWlnaHQgYmUgYSBkcmF3YmFjaywgbWF5YmUKICogc2V0dGlu ZyB0byBlbXB0eSB2YWx1ZSBoYXMgc2Vuc2UsIGFzIG5vIG90aGVyIHdyaXRl cgogKiBjYW4gZXhpc3QuIFRoaXMgd291bGQgcmVtb3ZlIHN1YnRsZSBoY2Fs bG9jKDEpIGxlYWsuCiAqLwoKLyoqLwpzdGF0aWMgY2hhciAqCmdkYm1nZXRm bihQYXJhbSBwbSkKewogICAgZGF0dW0ga2V5LCBjb250ZW50OwogICAgaW50 IHJldDsKICAgIEdEQk1fRklMRSBkYmY7CgogICAgLyogS2V5IGFscmVhZHkg cmV0cmlldmVkPyBUaGVyZSBpcyBubyBzZW5zZSBvZiBhc2tpbmcgdGhlCiAg ICAgKiBkYXRhYmFzZSBhZ2FpbiwgYmVjYXVzZToKICAgICAqIC0gdGhlcmUg Y2FuIGJlIG9ubHkgbXVsdGlwbGUgcmVhZGVycwogICAgICogLSBzbywgbm8g d3JpdGVyICsgcmVhZGVyIHVzZSBpcyBhbGxvd2VkCiAgICAgKgogICAgICog VGh1czoKICAgICAqIC0gaWYgd2UgYXJlIHdyaXRlcnMsIHdlIGZvciBzdXJl IGhhdmUgbmV3ZXN0IGNvcHkgb2YgZGF0YQogICAgICogLSBpZiB3ZSBhcmUg cmVhZGVycywgd2UgZm9yIHN1cmUgaGF2ZSBuZXdlc3QgY29weSBvZiBkYXRh CiAgICAgKi8KICAgIGlmICggcG0tPm5vZGUuZmxhZ3MgJiBQTV9VUFRPREFU RSApIHsKICAgICAgICByZXR1cm4gcG0tPnUuc3RyID8gcG0tPnUuc3RyIDog KGNoYXIgKikgaGNhbGxvYygxKTsKICAgIH0KCiAgICBrZXkuZHB0ciA9IHBt LT5ub2RlLm5hbTsKICAgIGtleS5kc2l6ZSA9IHN0cmxlbihrZXkuZHB0cik7 CgogICAgZGJmID0gKChzdHJ1Y3QgZ3N1X3NjYWxhcl9leHQgKilwbS0+Z3N1 LnMpLT5kYmY7CgogICAgaWYoKHJldCA9IGdkYm1fZXhpc3RzKGRiZiwga2V5 KSkpIHsKICAgICAgICAvKiBXZSBoYXZlIGRhdGEg4oCTIHN0b3JlIGl0LCBy ZXR1cm4gaXQgKi8KICAgICAgICBwbS0+bm9kZS5mbGFncyB8PSBQTV9VUFRP REFURTsKCiAgICAgICAgY29udGVudCA9IGdkYm1fZmV0Y2goZGJmLCBrZXkp OwoKICAgICAgICAvKiBFbnN1cmUgdGhlcmUncyBubyBsZWFrICovCiAgICAg ICAgaWYgKHBtLT51LnN0cikgewogICAgICAgICAgICB6c2ZyZWUocG0tPnUu c3RyKTsKICAgICAgICB9CgogICAgICAgIHBtLT51LnN0ciA9IHp0cmR1cHBm eCggY29udGVudC5kcHRyLCBjb250ZW50LmRzaXplICk7CgogICAgICAgIC8q IENhbiByZXR1cm4gcG9pbnRlciwgY29ycmVjdGx5IHNhdmVkIGluc2lkZSBo YXNoICovCiAgICAgICAgcmV0dXJuIHBtLT51LnN0cjsKICAgIH0KCiAgICAv KiBDYW4gdGhpcyBiZSAiIiA/ICovCiAgICByZXR1cm4gKGNoYXIgKikgaGNh bGxvYygxKTsKfQoKLyoqLwpzdGF0aWMgdm9pZApnZGJtc2V0Zm4oUGFyYW0g cG0sIGNoYXIgKnZhbCkKewogICAgZGF0dW0ga2V5LCBjb250ZW50OwogICAg R0RCTV9GSUxFIGRiZjsKCiAgICAvKiBTZXQgaXMgZG9uZSBvbiBwYXJhbWV0 ZXIgYW5kIG9uIGRhdGFiYXNlLgogICAgICogU2VlIHRoZSBhbGxvd2VkIHdv cmtlcnMgLyByZWFkZXJzIGNvbW1lbnQKICAgICAqIGF0IGdkYm1nZXRmbigp ICovCgogICAgLyogUGFyYW1ldGVyICovCiAgICBpZiAocG0tPnUuc3RyKSB7 CiAgICAgICAgenNmcmVlKHBtLT51LnN0cik7CiAgICAgICAgcG0tPnUuc3Ry ID0gTlVMTDsKICAgICAgICBwbS0+bm9kZS5mbGFncyAmPSB+KFBNX1VQVE9E QVRFKTsKICAgIH0KCiAgICBpZiAodmFsKSB7CiAgICAgICAgcG0tPnUuc3Ry ID0genRyZHVwKHZhbCk7CiAgICAgICAgcG0tPm5vZGUuZmxhZ3MgfD0gUE1f VVBUT0RBVEU7CiAgICB9CgogICAgLyogRGF0YWJhc2UgKi8KICAgIGtleS5k cHRyID0gcG0tPm5vZGUubmFtOwogICAga2V5LmRzaXplID0gc3RybGVuKGtl eS5kcHRyKTsKICAgIGRiZiA9ICgoc3RydWN0IGdzdV9zY2FsYXJfZXh0ICop cG0tPmdzdS5zKS0+ZGJmOwoKICAgIGlmICh2YWwpIHsKICAgICAgICBpZiAo ZGJmKSB7CiAgICAgICAgICAgIGNvbnRlbnQuZHB0ciA9IHZhbDsKICAgICAg ICAgICAgY29udGVudC5kc2l6ZSA9IHN0cmxlbihjb250ZW50LmRwdHIpOwog ICAgICAgICAgICAodm9pZClnZGJtX3N0b3JlKGRiZiwga2V5LCBjb250ZW50 LCBHREJNX1JFUExBQ0UpOwogICAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAg ICAgaWYgKGRiZikgewogICAgICAgICAgICAodm9pZClnZGJtX2RlbGV0ZShk YmYsIGtleSk7CiAgICAgICAgfQogICAgfQp9CgovKiovCnN0YXRpYyB2b2lk CmdkYm11bnNldGZuKFBhcmFtIHBtLCBVTlVTRUQoaW50IHVtKSkKewogICAg LyogU2V0IHdpdGggTlVMTCAqLwogICAgZ2RibXNldGZuKHBtLCBOVUxMKTsK fQoKLyoqLwpzdGF0aWMgSGFzaE5vZGUKZ2V0Z2RibW5vZGUoSGFzaFRhYmxl IGh0LCBjb25zdCBjaGFyICpuYW1lKQp7CiAgICBIYXNoTm9kZSBobiA9IGdl dGhhc2hub2RlMiggaHQsIG5hbWUgKTsKICAgIFBhcmFtIHZhbF9wbSA9IChQ YXJhbSkgaG47CgogICAgLyogRW50cnkgZm9yIGtleSBkb2Vzbid0IGV4aXN0 PyBDcmVhdGUgaXQgbm93LAogICAgICogaXQgd2lsbCBiZSBpbnRlcmZhY2lu ZyBiZXR3ZWVuIHRoZSBkYXRhYmFzZQogICAgICogYW5kIFpzaCAtIHRocm91 Z2ggc3BlY2lhbCBnZGJtX2dzdS4gU28sIGFueQogICAgICogc2VlbiBrZXkg cmVzdWx0cyBpbiBuZXcgaW50ZXJmYWNpbmcgcGFyYW1ldGVyLgogICAgICoK ICAgICAqIFByZXZpb3VzIGNvZGUgd2FzIHJldHVybmluZyBoZWFwIGFyZW5h IFBhcmFtCiAgICAgKiB0aGF0IHdhc24ndCBhY3R1YWxseSBhZGRlZCB0byB0 aGUgaGFzaC4gSXQgd2FzCiAgICAgKiBwbGFpbmx5IG5hbWUgLyBkYXRhYmFz ZS1rZXkgaG9sZGVyLiBIZXJlIHdlCiAgICAgKiBhZGQgdGhlIFBhcmFtIHRv IGl0cyBoYXNoLCBpdCBpcyBub3QgUE1fVVBUT0RBVEUuCiAgICAgKiBJdCB3 aWxsIGJlIGxvYWRlZCBmcm9tIGRhdGFiYXNlICphbmQgZmlsbGVkKgogICAg ICogb3IgbGVmdCBpbiB0aGF0IHN0YXRlIGlmIHRoZSBkYXRhYmFzZSBkb2Vz bid0CiAgICAgKiBjb250YWluIGl0LgogICAgICoKICAgICAqIE5vIGhlYXAg YXJlbmEgbWVtb3J5IGlzIHVzZWQsIG1lbW9yeSB1c2FnZSBpcwogICAgICog bm93IGxpbWl0ZWQgLSBieSBudW1iZXIgb2YgZGlzdGluY3Qga2V5cyBzZWVu LAogICAgICogbm90IGJ5IG51bWJlciBvZiBrZXkgKnVzZXMqLgogICAgICog Ki8KCiAgICBpZiAoICEgdmFsX3BtICkgewogICAgICAgIHZhbF9wbSA9IChQ YXJhbSkgenNoY2FsbG9jKCBzaXplb2YgKCp2YWxfcG0pICk7CiAgICAgICAg dmFsX3BtLT5ub2RlLmZsYWdzID0gUE1fU0NBTEFSIHwgUE1fSEFTSEVMRU07 IC8qIG5vIFBNX1VQVE9EQVRFICovCiAgICAgICAgdmFsX3BtLT5nc3UucyA9 IChHc3VTY2FsYXIpIGh0LT50bXBkYXRhOwogICAgICAgIGh0LT5hZGRub2Rl KCBodCwgenRyZHVwKCBuYW1lICksIHZhbF9wbSApOyAvLyBzZXRzIHBtLT5u b2RlLm5hbQogICAgfQoKICAgIHJldHVybiAoSGFzaE5vZGUpIHZhbF9wbTsK fQoKLyoqLwpzdGF0aWMgdm9pZApzY2FuZ2RibWtleXMoSGFzaFRhYmxlIGh0 LCBTY2FuRnVuYyBmdW5jLCBpbnQgZmxhZ3MpCnsKICAgIFBhcmFtIHBtID0g TlVMTDsKICAgIGRhdHVtIGtleSwgY29udGVudDsKICAgIEdEQk1fRklMRSBk YmYgPSAoKHN0cnVjdCBnc3Vfc2NhbGFyX2V4dCAqKWh0LT50bXBkYXRhKS0+ ZGJmOwoKICAgIC8qIEl0ZXJhdGUga2V5cyBhZGRpbmcgdGhlbSB0byBoYXNo LCBzbwogICAgICogd2UgaGF2ZSBQYXJhbSB0byB1c2UgaW4gYGZ1bmNgICov CiAgICBrZXkgPSBnZGJtX2ZpcnN0a2V5KGRiZik7CgogICAgd2hpbGUoa2V5 LmRwdHIpIHsKICAgICAgICAvKiBUaGlzIHJldHVybnMgZGF0YWJhc2UtaW50 ZXJmYWNpbmcgUGFyYW0sCiAgICAgICAgICogaXQgd2lsbCByZXR1cm4gdS5z dHIgb3IgZmlyc3QgZmV0Y2ggZGF0YQogICAgICAgICAqIGlmIG5vdCBQTV9V UFRPREFURSAobmV3bHkgY3JlYXRlZCkgKi8KICAgICAgICBjaGFyICp6a2V5 ID0genRyZHVwcGZ4KGtleS5kcHRyLCBrZXkuZHNpemUpOwogICAgICAgIEhh c2hOb2RlIGhuID0gZ2V0Z2RibW5vZGUoaHQsIHprZXkpOwogICAgICAgIHpz ZnJlZSggemtleSApOwoKCWZ1bmMoaG4sIGZsYWdzKTsKCiAgICAgICAgLyog SXRlcmF0ZSAtIG5vIHByb2JsZW0gYXMgaW50ZXJmYWNpbmcgUGFyYW0KICAg ICAgICAgKiB3aWxsIGRvIGF0IG1vc3Qgb25seSBmZXRjaGVzLCBub3Qgc3Rv cmVzICovCiAgICAgICAga2V5ID0gZ2RibV9uZXh0a2V5KGRiZiwga2V5KTsK ICAgIH0KCn0KCi8qCiAqIFJlcGxhY2UgZGF0YWJhc2Ugd2l0aCBuZXcgaGFz aAogKi8KCi8qKi8Kc3RhdGljIHZvaWQKZ2RibWhhc2hzZXRmbihQYXJhbSBw bSwgSGFzaFRhYmxlIGh0KQp7CiAgICBpbnQgaTsKICAgIEhhc2hOb2RlIGhu OwogICAgR0RCTV9GSUxFIGRiZjsKICAgIGRhdHVtIGtleSwgY29udGVudDsK CiAgICBpZiAoIXBtLT51Lmhhc2ggfHwgcG0tPnUuaGFzaCA9PSBodCkKCXJl dHVybjsKCiAgICBpZiAoIShkYmYgPSAoKHN0cnVjdCBnc3Vfc2NhbGFyX2V4 dCAqKXBtLT51Lmhhc2gtPnRtcGRhdGEpLT5kYmYpKQoJcmV0dXJuOwoKICAg IGtleSA9IGdkYm1fZmlyc3RrZXkoZGJmKTsKICAgIHdoaWxlIChrZXkuZHB0 cikgewoJcXVldWVfc2lnbmFscygpOwoJKHZvaWQpZ2RibV9kZWxldGUoZGJm LCBrZXkpOwoJZnJlZShrZXkuZHB0cik7Cgl1bnF1ZXVlX3NpZ25hbHMoKTsK CWtleSA9IGdkYm1fZmlyc3RrZXkoZGJmKTsKICAgIH0KCiAgICAvKiBqdXN0 IGRlbGV0ZWQgZXZlcnl0aGluZywgY2xlYW4gdXAgKi8KICAgICh2b2lkKWdk Ym1fcmVvcmdhbml6ZShkYmYpOwoKICAgIGlmICghaHQpCglyZXR1cm47Cgog ICAgIC8qIFB1dCBuZXcgc3RyaW5ncyBpbnRvIGRhdGFiYXNlLCB3YWl0aW5n CiAgICAgICogZm9yIHRoZWlyIGludGVyZmFjaW5nLVBhcmFtcyB0byBiZSBj cmVhdGVkICovCgogICAgZm9yIChpID0gMDsgaSA8IGh0LT5oc2l6ZTsgaSsr KQoJZm9yIChobiA9IGh0LT5ub2Rlc1tpXTsgaG47IGhuID0gaG4tPm5leHQp IHsKCSAgICBzdHJ1Y3QgdmFsdWUgdjsKCgkgICAgdi5pc2FyciA9IHYuZmxh Z3MgPSB2LnN0YXJ0ID0gMDsKCSAgICB2LmVuZCA9IC0xOwoJICAgIHYuYXJy ID0gTlVMTDsKCSAgICB2LnBtID0gKFBhcmFtKSBobjsKCgkgICAga2V5LmRw dHIgPSB2LnBtLT5ub2RlLm5hbTsKCSAgICBrZXkuZHNpemUgPSBzdHJsZW4o a2V5LmRwdHIpOwoKCSAgICBxdWV1ZV9zaWduYWxzKCk7CgoJICAgIGNvbnRl bnQuZHB0ciA9IGdldHN0cnZhbHVlKCZ2KTsKCSAgICBjb250ZW50LmRzaXpl ID0gc3RybGVuKGNvbnRlbnQuZHB0cik7CgoJICAgICh2b2lkKWdkYm1fc3Rv cmUoZGJmLCBrZXksIGNvbnRlbnQsIEdEQk1fUkVQTEFDRSk7CQoKCSAgICB1 bnF1ZXVlX3NpZ25hbHMoKTsKCX0KfQoKLyoqLwpzdGF0aWMgdm9pZApnZGJt dW50aWUoUGFyYW0gcG0pCnsKICAgIEdEQk1fRklMRSBkYmYgPSAoKHN0cnVj dCBnc3Vfc2NhbGFyX2V4dCAqKXBtLT51Lmhhc2gtPnRtcGRhdGEpLT5kYmY7 CiAgICBIYXNoVGFibGUgaHQgPSBwbS0+dS5oYXNoOwoKICAgIGlmIChkYmYp IHsgLyogcGFyYW5vaWEgKi8KCWZkdGFibGVbZ2RibV9mZGVzYyhkYmYpXSA9 IEZEVF9VTlVTRUQ7CiAgICAgICAgZ2RibV9jbG9zZShkYmYpOwoKICAgICAg ICAvKiBMZXQgaGFzaCBmaWVsZHMga25vdyB0aGVyZSdzIG5vIGJhY2tlbmQg Ki8KICAgICAgICAoKHN0cnVjdCBnc3Vfc2NhbGFyX2V4dCAqKWh0LT50bXBk YXRhKS0+ZGJmID0gTlVMTDsKICAgIH0KCiAgICAvKiBmb3IgY29tcGxldGVu ZXNzIC4uLiBjcmVhdGVzcGVjaWFsaGFzaCgpIHNob3VsZCBoYXZlIGFuIGlu dmVyc2UgKi8KICAgIGh0LT5nZXRub2RlID0gaHQtPmdldG5vZGUyID0gZ2V0 aGFzaG5vZGUyOwogICAgaHQtPnNjYW50YWIgPSBOVUxMOwoKICAgIHBtLT5u b2RlLmZsYWdzICY9IH4oUE1fU1BFQ0lBTHxQTV9SRUFET05MWSk7CiAgICBw bS0+Z3N1LmggPSAmc3RkaGFzaF9nc3U7Cn0KCi8qKi8Kc3RhdGljIHZvaWQK Z2RibWhhc2h1bnNldGZuKFBhcmFtIHBtLCBVTlVTRUQoaW50IGV4cCkpCnsK ICAgIGdkYm11bnRpZShwbSk7CgogICAgLyogUmVtZW1iZXIgY3VzdG9tIEdT VSBzdHJ1Y3R1cmUgYXNzaWduZWQgdG8KICAgICAqIHUuaGFzaC0+dG1wZGF0 YSBiZWZvcmUgaGFzaCBnZXRzIGRlbGV0ZWQgKi8KICAgIHZvaWQgKiBnc3Vf ZXh0ID0gcG0tPnUuaGFzaC0+dG1wZGF0YTsKCiAgICAvKiBVc2VzIG5vcm1h bCB1bnNldHRlci4gV2lsbCBkZWxldGUgYWxsIG93bmVkCiAgICAgKiBwYXJh bWV0ZXJzIGFuZCBhbHNvIGhhc2h0YWJsZS4gKi8KICAgIHBtLT5nc3UuaC0+ c2V0Zm4ocG0sIE5VTEwpOwoKICAgIC8qIERvbid0IG5lZWQgY3VzdG9tIEdT VSBzdHJ1Y3R1cmUgd2l0aCBpdHMKICAgICAqIEdEQk1fRklMRSBwb2ludGVy IGFueW1vcmUgKi8KICAgIHpmcmVlKCBnc3VfZXh0LCBzaXplb2Yoc3RydWN0 IGdzdV9zY2FsYXJfZXh0KSk7CgogICAgcG0tPm5vZGUuZmxhZ3MgfD0gUE1f VU5TRVQ7Cn0KCiNlbHNlCiMgZXJyb3Igbm8gZ2RibQojZW5kaWYgLyogaGF2 ZSBnZGJtICovCgpzdGF0aWMgc3RydWN0IGZlYXR1cmVzIG1vZHVsZV9mZWF0 dXJlcyA9IHsKICAgIGJpbnRhYiwgc2l6ZW9mKGJpbnRhYikvc2l6ZW9mKCpi aW50YWIpLAogICAgTlVMTCwgMCwKICAgIE5VTEwsIDAsCiAgICBOVUxMLCAw LAogICAgMAp9OwoKLyoqLwppbnQKc2V0dXBfKFVOVVNFRChNb2R1bGUgbSkp CnsKICAgIHJldHVybiAwOwp9CgovKiovCmludApmZWF0dXJlc18oTW9kdWxl IG0sIGNoYXIgKioqZmVhdHVyZXMpCnsKICAgICpmZWF0dXJlcyA9IGZlYXR1 cmVzYXJyYXkobSwgJm1vZHVsZV9mZWF0dXJlcyk7CiAgICByZXR1cm4gMDsK fQoKLyoqLwppbnQKZW5hYmxlc18oTW9kdWxlIG0sIGludCAqKmVuYWJsZXMp CnsKICAgIHJldHVybiBoYW5kbGVmZWF0dXJlcyhtLCAmbW9kdWxlX2ZlYXR1 cmVzLCBlbmFibGVzKTsKfQoKLyoqLwppbnQKYm9vdF8oVU5VU0VEKE1vZHVs ZSBtKSkKewogICAgcmV0dXJuIDA7Cn0KCi8qKi8KaW50CmNsZWFudXBfKE1v ZHVsZSBtKQp7CiAgICByZXR1cm4gc2V0ZmVhdHVyZWVuYWJsZXMobSwgJm1v ZHVsZV9mZWF0dXJlcywgTlVMTCk7Cn0KCi8qKi8KaW50CmZpbmlzaF8oVU5V U0VEKE1vZHVsZSBtKSkKewogICAgcmV0dXJuIDA7Cn0KCnN0YXRpYyBQYXJh bSBjcmVhdGVoYXNoKCBjaGFyICpuYW1lLCBpbnQgZmxhZ3MgKSB7CiAgICBQ YXJhbSBwbTsKICAgIEhhc2hUYWJsZSBodDsKCiAgICBwbSA9IGNyZWF0ZXBh cmFtKG5hbWUsIFBNX1NQRUNJQUwgfCBQTV9IQVNIRUQpOwogICAgaWYgKCFw bSkgewogICAgICAgIHJldHVybiBOVUxMOwogICAgfQoKICAgIGlmIChwbS0+ b2xkKQoJcG0tPmxldmVsID0gbG9jYWxsZXZlbDsKCiAgICAvKiBUaGlzIGNy ZWF0ZXMgc3RhbmRhcmQgaGFzaC4gKi8KICAgIGh0ID0gcG0tPnUuaGFzaCA9 IG5ld3BhcmFtdGFibGUoMzIsIG5hbWUpOwogICAgaWYgKCFwbS0+dS5oYXNo KSB7CiAgICAgICAgcGFyYW10YWItPnJlbW92ZW5vZGUocGFyYW10YWIsIG5h bWUpOwogICAgICAgIHBhcmFtdGFiLT5mcmVlbm9kZSgmcG0tPm5vZGUpOwog ICAgICAgIHp3YXJubmFtKG5hbWUsICJPdXQgb2YgbWVtb3J5IHdoZW4gYWxs b2NhdGluZyBoYXNoIik7CiAgICB9CgogICAgLyogVGhlc2UgcHJvdmlkZSBz cGVjaWFsIGZlYXR1cmVzICovCiAgICBodC0+Z2V0bm9kZSA9IGh0LT5nZXRu b2RlMiA9IGdldGdkYm1ub2RlOwogICAgaHQtPnNjYW50YWIgPSBzY2FuZ2Ri bWtleXM7CgogICAgcmV0dXJuIHBtOwp9Cg== --_----------=_14870748313173630--