From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 9875 invoked by alias); 16 Aug 2011 06:36:29 -0000 Received: (qmail 8911 invoked by uid 22791); 16 Aug 2011 06:36:23 -0000 X-SWARE-Spam-Status: No, hits=-2.3 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,TW_BJ,TW_RG,T_TO_NO_BRKTS_FREEMAIL X-Spam-Check-By: sourceware.org Received: from mail-yw0-f41.google.com (HELO mail-yw0-f41.google.com) (209.85.213.41) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 16 Aug 2011 06:36:04 +0000 Received: by ywm13 with SMTP id 13so3021706ywm.0 for ; Mon, 15 Aug 2011 23:36:03 -0700 (PDT) MIME-Version: 1.0 Received: by 10.236.175.102 with SMTP id y66mr15022491yhl.28.1313476563220; Mon, 15 Aug 2011 23:36:03 -0700 (PDT) Received: by 10.236.34.193 with HTTP; Mon, 15 Aug 2011 23:36:03 -0700 (PDT) Date: Tue, 16 Aug 2011 06:36:00 -0000 Message-ID: Subject: [patch] PR python/10807 API for macros. From: Matt Rice To: gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary=20cf30563ed9f8b90e04aa999794 X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2011-08/txt/msg00321.txt.bz2 --20cf30563ed9f8b90e04aa999794 Content-Type: text/plain; charset=ISO-8859-1 Content-length: 1652 In the gdb.Macro class, I didn't used methods instead of attributes, because the values are lazily computed/can return different objects if called multiple times, thus attributes seemed weird, even though I think the Macro methods are fairly attribute like. so if anyone has any opinion here on attributes vs methods. contains one unrelated change, to stpy_dealloc which seemed to leak. its missing macro expansion, user defined macros, a sal/scoped version of the macros() method and whatever else anyone can think of, will save that for another time. 2011-08-15 Matt Rice PR python/10807 * NEWS: Mention new macro api. * Makefile.in: Add py-macro.c. * python/py-macro.c: New file. * python/py-objfile.c (objfpy_symtab): New function. (objfile_getset): Add symtab attribute. * python/py-symtab.c (add_macro_to_list, stpy_macros, salpy_macro_named): New functions. (stpy_dealloc): Free the PyObject. (symtab_object_methods): Add macros method. (sal_object_methods): Add macro_named method. * python/py-symtab.h: New File: (symtab_to_symtab_object): Make public. * python/python.h: Add gdb_initialize_macros. * python/python.c: Call gdb_initialize_macros. 2011-08-15 Matt Rice * gdb.python/py-macro.c: New file. * gdb.python/py-macro.exp: Ditto. 2011-08-15 Matt Rice * gdb.texinfo (Macros In Python): New section. (Symbols In Python): Add macro_named, and macros methods. (Objfiles In Python): Add symtab attribute. --20cf30563ed9f8b90e04aa999794 Content-Type: text/x-patch; charset=US-ASCII; name="foo.diff" Content-Disposition: attachment; filename="foo.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_greg1mbh0 Content-length: 43961 ZGlmZiAtLWdpdCBhL2dkYi9NYWtlZmlsZS5pbiBiL2dkYi9NYWtlZmlsZS5p bgppbmRleCBiZDAwNjQ0Li43MTM4OWE2IDEwMDY0NAotLS0gYS9nZGIvTWFr ZWZpbGUuaW4KKysrIGIvZ2RiL01ha2VmaWxlLmluCkBAIC0yODksNiArMjg5 LDcgQEAgU1VCRElSX1BZVEhPTl9PQlMgPSBcCiAJcHktaW5mZXJpb3IubyBc CiAJcHktaW5mdGhyZWFkLm8gXAogCXB5LWxhenktc3RyaW5nLm8gXAorCXB5 LW1hY3JvLm8gXAogCXB5LW9iamZpbGUubyBcCiAJcHktcGFyYW0ubyBcCiAJ cHktcHJldHR5cHJpbnQubyBcCkBAIC0zMTksNiArMzIwLDcgQEAgU1VCRElS X1BZVEhPTl9TUkNTID0gXAogCXB5dGhvbi9weS1pbmZlcmlvci5jIFwKIAlw eXRob24vcHktaW5mdGhyZWFkLmMgXAogCXB5dGhvbi9weS1sYXp5LXN0cmlu Zy5jIFwKKwlweXRob24vcHktbWFjcm8uYyBcCiAJcHl0aG9uL3B5LW9iamZp bGUuYyBcCiAJcHl0aG9uL3B5LXBhcmFtLmMgXAogCXB5dGhvbi9weS1wcmV0 dHlwcmludC5jIFwKQEAgLTIxMTAsNiArMjExMiwxMCBAQCBweS1sYXp5LXN0 cmluZy5vOiAkKHNyY2RpcikvcHl0aG9uL3B5LWxhenktc3RyaW5nLmMKIAkk KENPTVBJTEUpICQoUFlUSE9OX0NGTEFHUykgJChzcmNkaXIpL3B5dGhvbi9w eS1sYXp5LXN0cmluZy5jCiAJJChQT1NUQ09NUElMRSkKIAorcHktbWFjcm8u bzogJChzcmNkaXIpL3B5dGhvbi9weS1tYWNyby5jCisJJChDT01QSUxFKSAk KFBZVEhPTl9DRkxBR1MpICQoc3JjZGlyKS9weXRob24vcHktbWFjcm8uYwor CSQoUE9TVENPTVBJTEUpCisKIHB5LW9iamZpbGUubzogJChzcmNkaXIpL3B5 dGhvbi9weS1vYmpmaWxlLmMKIAkkKENPTVBJTEUpICQoUFlUSE9OX0NGTEFH UykgJChzcmNkaXIpL3B5dGhvbi9weS1vYmpmaWxlLmMKIAkkKFBPU1RDT01Q SUxFKQpkaWZmIC0tZ2l0IGEvZ2RiL05FV1MgYi9nZGIvTkVXUwppbmRleCAw ODllNmNlLi5hNmMyZDExIDEwMDY0NAotLS0gYS9nZGIvTkVXUworKysgYi9n ZGIvTkVXUwpAQCAtMzAsNiArMzAsMTMgQEAKIAogICAqKiBTeW1ib2xzIG5v dyBwcm92aWRlIHRoZSAidHlwZSIgYXR0cmlidXRlLCB0aGUgdHlwZSBvZiB0 aGUgc3ltYm9sLgogCisgICoqIE9iamZpbGVzIG5vdyBwcm92aWRlIGEgInN5 bXRhYiIgYXR0cmlidXRlLgorCisgICoqIFRoZSBNYWNybyBvYmplY3QgaXMg bm93IGF2YWlsYWJsZSBmb3IgcmVwcmVzZW50aW5nIHByZXByb2Nlc3NvciBt YWNyb3MuCisgICAgIFRoZSBmb2xsb3dpbmcgb2JqZWN0cyBub3cgaGF2ZSBt ZXRob2RzIGZvciBtYWNybyBsb29rdXAuCisgICAgIC0gU3ltdGFiX2FuZF9s aW5lIG5vdyBoYXMgYSAibWFjcm9fbmFtZWQiIG1ldGhvZAorICAgICAtIFN5 bXRhYiBub3cgaGFzIGEgIm1hY3JvcyIgbWV0aG9kLgorCiAqIGxpYnRocmVh ZC1kYi1zZWFyY2gtcGF0aCBub3cgc3VwcG9ydHMgdHdvIHNwZWNpYWwgdmFs dWVzOiAkc2RpciBhbmQgJHBkaXIuCiAgICRzZGlyIHNwZWNpZmllcyB0aGUg ZGVmYXVsdCBzeXN0ZW0gbG9jYXRpb25zIG9mIHNoYXJlZCBsaWJyYXJpZXMu CiAgICRwZGlyIHNwZWNpZmllcyB0aGUgZGlyZWN0b3J5IHdoZXJlIHRoZSBs aWJwdGhyZWFkIHVzZWQgYnkgdGhlIGFwcGxpY2F0aW9uCmRpZmYgLS1naXQg YS9nZGIvZG9jL2dkYi50ZXhpbmZvIGIvZ2RiL2RvYy9nZGIudGV4aW5mbwpp bmRleCBiNDc3Y2YzLi5kYjc0ZTY3IDEwMDY0NAotLS0gYS9nZGIvZG9jL2dk Yi50ZXhpbmZvCisrKyBiL2dkYi9kb2MvZ2RiLnRleGluZm8KQEAgLTIwOTU1 LDYgKzIwOTU1LDcgQEAgc2l0dWF0aW9uLCBhIFB5dGhvbiBAY29kZXtLZXli b2FyZEludGVycnVwdH0gZXhjZXB0aW9uIGlzIHRocm93bi4KICogQmxvY2tz IEluIFB5dGhvbjo6ICAgICAgICAgICAgQWNjZXNzaW5nIGZyYW1lIGJsb2Nr cyBmcm9tIFB5dGhvbi4KICogU3ltYm9scyBJbiBQeXRob246OiAgICAgICAg ICAgUHl0aG9uIHJlcHJlc2VudGF0aW9uIG9mIHN5bWJvbHMuCiAqIFN5bWJv bCBUYWJsZXMgSW4gUHl0aG9uOjogICAgIFB5dGhvbiByZXByZXNlbnRhdGlv biBvZiBzeW1ib2wgdGFibGVzLgorKiBNYWNyb3MgSW4gUHl0aG9uOjogICAg ICAgICAgICBQeXRob24gcmVwcmVzZW50YXRpb24gb2YgcHJlcHJvY2Vzc29y IG1hY3Jvcy4KICogTGF6eSBTdHJpbmdzIEluIFB5dGhvbjo6ICAgICAgUHl0 aG9uIHJlcHJlc2VudGF0aW9uIG9mIGxhenkgc3RyaW5ncy4KICogQnJlYWtw b2ludHMgSW4gUHl0aG9uOjogICAgICAgTWFuaXB1bGF0aW5nIGJyZWFrcG9p bnRzIHVzaW5nIFB5dGhvbi4KIEBlbmQgbWVudQpAQCAtMjI5NDUsNiArMjI5 NDYsMTAgQEAgd2hpY2ggaXMgdXNlZCB0byBmb3JtYXQgdGhlIHZhbHVlLiAg QHhyZWZ7UHJldHR5IFByaW50aW5nIEFQSX0sIGZvciBtb3JlCiBpbmZvcm1h dGlvbi4KIEBlbmQgZGVmaXZhcgogCitAZGVmaXZhciBPYmpmaWxlIHN5bXRh YgorVGhlIG9iamZpbGUncyBzeW1ib2wgdGFibGUgcmVwcmVzZW50ZWQgYXMg YSBAY29kZXtnZGIuU3ltdGFifSBvYmplY3QuCitAZW5kIGRlZml2YXIKKwog QSBAY29kZXtnZGIuT2JqZmlsZX0gb2JqZWN0IGhhcyB0aGUgZm9sbG93aW5n IG1ldGhvZHM6CiAKIEBkZWZtZXRob2QgT2JqZmlsZSBpc192YWxpZApAQCAt MjM0MTUsNiArMjM0MjAsMTEgQEAgZXhpc3QgaW4gQHZhbHVle0dEQk59IGFu eSBsb25nZXIuICBBbGwgb3RoZXIKIEBjb2Rle2dkYi5TeW10YWJfYW5kX2xp bmV9IG1ldGhvZHMgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24gaWYgaXQgaXMK IGludmFsaWQgYXQgdGhlIHRpbWUgdGhlIG1ldGhvZCBpcyBjYWxsZWQuCiBA ZW5kIGRlZm1ldGhvZAorCitAZGVmbWV0aG9kIFN5bXRhYl9hbmRfbGluZSBt YWNyb19uYW1lZCBAcntbfW5hbWVAcntdfQorUmV0dXJucyBhIEBjb2Rle2dk Yi5NYWNyb30gb2JqZWN0LCBmb3IgdGhlIG1hY3JvCit3aXRoIHRoZSBnaXZl biBuYW1lLgorQGVuZCBkZWZtZXRob2QKIEBlbmQgdGFibGUKIAogQSBAY29k ZXtnZGIuU3ltdGFifSBvYmplY3QgaGFzIHRoZSBmb2xsb3dpbmcgYXR0cmli dXRlczoKQEAgLTIzNDQ0LDggKzIzNDU0LDQ4IEBAIGlmIGl0IGlzIGludmFs aWQgYXQgdGhlIHRpbWUgdGhlIG1ldGhvZCBpcyBjYWxsZWQuCiBAZGVmbWV0 aG9kIFN5bXRhYiBmdWxsbmFtZQogUmV0dXJuIHRoZSBzeW1ib2wgdGFibGUn cyBzb3VyY2UgYWJzb2x1dGUgZmlsZSBuYW1lLgogQGVuZCBkZWZtZXRob2QK KworQGRlZm1ldGhvZCBTeW10YWIgbWFjcm9zCitSZXR1cm4gYWxsIG9mIHRo ZSBtYWNyb3MgY29udGFpbmVkIGluIHRoZSBzeW1ib2wgdGFibGUuCitAZW5k IGRlZm1ldGhvZAogQGVuZCB0YWJsZQogCisKK0Bub2RlIE1hY3JvcyBJbiBQ eXRob24KK0BzdWJzdWJzZWN0aW9uIFB5dGhvbiByZXByZXNlbnRhdGlvbiBv ZiBwcmVwcm9jZXNzb3IgbWFjcm9zLgorCitAY2luZGV4IG1hY3JvcyBpbiBw eXRob24KK0B0aW5kZXggZ2RiLm1hY3JvCisKK1B5dGhvbiBjb2RlIGNhbiBx dWVyeSBpbmZvcm1hdGlvbiBhYm91dCBwcmVwcm9jZXNzb3IgbWFjcm9zIHVz aW5nIHRoZQorQGNvZGV7Z2RiLm1hY3JvfSBjbGFzcy4gIEZvciBvYnRhaW5p bmcgYSBAY29kZXtnZGIubWFjcm99IG9iamVjdCBzZWUKK0B4cmVme1N5bWJv bCBUYWJsZXMgSW4gUHl0aG9ufS4KKworQGRlZm1ldGhvZCBNYWNybyBuYW1l CitSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBtYWNyby4KK0BlbmQgZGVmbWV0 aG9kCisKK0BkZWZtZXRob2QgTWFjcm8gZGVmaW5pdGlvbgorUmV0dXJucyBh IHN0cmluZyB3aXRoIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBtYWNyby4KK0Bl bmQgZGVmbWV0aG9kCisKK0BkZWZtZXRob2QgTWFjcm8gaXNfZnVuY3Rpb25f bGlrZQorUmV0dXJucyBAY29kZXt0cnVlfSBJZiB0aGUgbWFjcm8gaXMgZnVu Y3Rpb24gbGlrZS4KK0BlbmQgZGVmbWV0aG9kCisKK0BkZWZtZXRob2QgTWFj cm8gYXJndgorUmV0dXJucyBhIGxpc3Qgb2YgdGhlIG1hY3JvcyBhcmd1bWVu dHMgaWYgdGhlIG1hY3JvIGlzIGZ1bmN0aW9uIGxpa2UuCitJZiB0aGUgbWFj cm8gaXMgbm90IGZ1bmN0aW9uIGxpa2UsIHJldHVybnMgQGNvZGV7Tm9uZX0K K0BlbmQgZGVmbWV0aG9kCisKK0BkZWZtZXRob2QgTWFjcm8gaW5jbHVkZV90 cmFpbAorUmV0dXJucyBhIGxpc3Qgb2YgdHVwbGVzIGNvbnRhaW5pbmcgdGhl IGZpbGVuYW1lcywgYW5kIGxpbmUgbnVtYmVycworb2YgaGVhZGVyIGFuZCBz b3VyY2UgZmlsZXMgdGhhdCBjb3JyZXNwb25kIHRvIHRoZSBpbmNsdWRlIGRp cmVjdGl2ZXMKK2FuZCBmaWxlIGxvY2F0aW9uIHRoYXQgY2F1c2VkIHRoZSBt YWNybyB0byBiZSBkZWZpbmVkLgorVGhlIGxpc3QgaXMgc29ydGVkIHN0YXJ0 aW5nIHdpdGggdGhlIHBsYWNlIG9mIGRlZmluaXRpb24sCithbmQgZW5kaW5n IHdpdGggdGhlIGZpcnN0IGluY2x1ZGUgZGlyZWN0aXZlLgorQGVuZCBkZWZt ZXRob2QKKwogQG5vZGUgQnJlYWtwb2ludHMgSW4gUHl0aG9uCiBAc3Vic3Vi c2VjdGlvbiBNYW5pcHVsYXRpbmcgYnJlYWtwb2ludHMgdXNpbmcgUHl0aG9u CiAKZGlmZiAtLWdpdCBhL2dkYi9weXRob24vcHktbWFjcm8uYyBiL2dkYi9w eXRob24vcHktbWFjcm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi40YjJmMzg1Ci0tLSAvZGV2L251bGwKKysrIGIvZ2RiL3B5dGhv bi9weS1tYWNyby5jCkBAIC0wLDAgKzEsNDYzIEBACisvKiBQeXRob24gaW50 ZXJmYWNlIHRvIG1hY3Jvcy4KKworICAgQ29weXJpZ2h0IChDKSAyMDExIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIGZpbGUg aXMgcGFydCBvZiBHREIuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGlj ZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp b24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQg QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElm IG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICov CisKKyNpbmNsdWRlICJkZWZzLmgiCisjaW5jbHVkZSAicHl0aG9uLWludGVy bmFsLmgiCisjaW5jbHVkZSAibWFjcm90YWIuaCIKKyNpbmNsdWRlICJtYWNy b2V4cC5oIgorI2luY2x1ZGUgIm1hY3Jvc2NvcGUuaCIKKyNpbmNsdWRlICJj aGFyc2V0LmgiCisKK3R5cGVkZWYgc3RydWN0Cit7CisgIFB5T2JqZWN0X0hF QUQ7CisgIGNvbnN0IGNoYXIgKm5hbWU7CisgIHN0cnVjdCBtYWNyb19zb3Vy Y2VfZmlsZSAqc3JjX2ZpbGU7CisgIGludCBzcmNfbGluZTsKK30gbWFjcm9f b2JqZWN0OworCitzdGF0aWMgUHlUeXBlT2JqZWN0IG1hY3JvX29iamVjdF90 eXBlOworCitzdGF0aWMgUHlPYmplY3QgKgorZGVmaW5pdGlvbl90b19weSAo c3RydWN0IG1hY3JvX2RlZmluaXRpb24gKm1hY3JvKQoreworICBpZiAobWFj cm8tPnJlcGxhY2VtZW50KQorICAgIHJldHVybiBQeVN0cmluZ19Gcm9tU3Ry aW5nIChtYWNyby0+cmVwbGFjZW1lbnQpOworICBlbHNlCisgICAgUHlfUkVU VVJOX05PTkU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitpc19mdW5jdGlv bl9saWtlX3RvX3B5IChzdHJ1Y3QgbWFjcm9fZGVmaW5pdGlvbiAqbWFjcm8p Cit7CisgIGlmIChtYWNyby0+a2luZCA9PSBtYWNyb19mdW5jdGlvbl9saWtl KQorICAgIFB5X1JFVFVSTl9UUlVFOworICBlbHNlCisgICAgUHlfUkVUVVJO X0ZBTFNFOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorYXJndl90b19weSAo c3RydWN0IG1hY3JvX2RlZmluaXRpb24gKm1hY3JvKQoreworICBQeU9iamVj dCAqcmV0ID0gTlVMTDsKKworICBpZiAobWFjcm8tPmtpbmQgPT0gbWFjcm9f ZnVuY3Rpb25fbGlrZSkKKyAgICB7CisgICAgICBQeV9zc2l6ZV90IGk7Cisg ICAgICBQeU9iamVjdCAqcmV0ID0gUHlMaXN0X05ldyAobWFjcm8tPmFyZ2Mp OworCisgICAgICBpZiAocmV0ID09IE5VTEwpCisJcmV0dXJuIE5VTEw7CisK KyAgICAgIGZvciAoaSA9IDA7IGkgPCBtYWNyby0+YXJnYzsgaSsrKQorICAg ICAgICB7CisJICBQeU9iamVjdCAqaXRlbSA9IFB5U3RyaW5nX0Zyb21TdHJp bmcgKG1hY3JvLT5hcmd2W2ldKTsKKworCSAgaWYgKCFpdGVtKQorCSAgICBn b3RvIGVycl9yZXQ7CisKKwkgIGlmIChQeUxpc3RfU2V0SXRlbSAocmV0LCBp LCBpdGVtKSAhPSAwKQorICAgICAgICAgICAgZ290byBlcnJfcmV0OworICAg ICAgICB9CisKKyAgICAgIHJldHVybiByZXQ7CisgICAgfQorCisgIFB5X1JF VFVSTl9OT05FOworCisgIGVycl9yZXQ6CisgICAgUHlfWERFQ1JFRiAocmV0 KTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworCitzdGF0aWMgUHlPYmplY3Qg KgoraW5jbHVkZV90cmFpbF90b19weShzdHJ1Y3QgbWFjcm9fZGVmaW5pdGlv biAqbWFjcm8sCisJCSAgIGNvbnN0IGNoYXIgKm5hbWUsCisJCSAgIHN0cnVj dCBtYWNyb19zb3VyY2VfZmlsZSAqc3JjX2ZpbGUsCisJCSAgIGludCBzcmNf bGluZSkKK3sKKyAgUHlPYmplY3QgKnR1cGxlID0gUHlUdXBsZV9OZXcgKDIp OworICBQeU9iamVjdCAqcmVzdWx0ID0gUHlMaXN0X05ldyAoMCk7CisgIFB5 T2JqZWN0ICp0bXA7CisgIHN0cnVjdCBtYWNyb19zb3VyY2VfZmlsZSAqZmls ZTsKKyAgaW50IGxpbmU7CisKKyAgaWYgKCF0dXBsZSB8fCAhcmVzdWx0KQor ICAgIGdvdG8gZXJyX2V4aXQ7CisKKyAgZmlsZSA9IG1hY3JvX2RlZmluaXRp b25fbG9jYXRpb24gKHNyY19maWxlLCBzcmNfbGluZSwgbmFtZSwgJmxpbmUp OworICBpZiAoIWZpbGUpCisgICAgZ290byBlcnJfZXhpdDsKKworICB0bXAg PSBQeVN0cmluZ19Gcm9tU3RyaW5nIChmaWxlLT5maWxlbmFtZSk7CisgIGlm ICghdG1wKQorICAgIGdvdG8gZXJyX2V4aXQ7CisgIFB5VHVwbGVfU2V0SXRl bSAodHVwbGUsIDAsIHRtcCk7CisKKyAgdG1wID0gUHlJbnRfRnJvbUxvbmcg KGxpbmUpOworICBpZiAoIXRtcCkKKyAgICBnb3RvIGVycl9leGl0OworICBp ZiAoUHlUdXBsZV9TZXRJdGVtICh0dXBsZSwgMSwgdG1wKSAhPSAwKQorICAg IGdvdG8gZXJyX2V4aXQ7CisgIGlmIChQeUxpc3RfQXBwZW5kIChyZXN1bHQs IHR1cGxlKSAhPSAwKQorICAgIGdvdG8gZXJyX2V4aXQ7CisgIFB5X0RFQ1JF RiAodHVwbGUpOworCisgIHdoaWxlIChmaWxlLT5pbmNsdWRlZF9ieSkKKyAg ICB7CisgICAgICB0dXBsZSA9IFB5VHVwbGVfTmV3ICgyKTsKKworICAgICAg aWYgKCF0dXBsZSkKKyAgICAgICAgZ290byBlcnJfZXhpdDsKKworICAgICAg dG1wID0gUHlTdHJpbmdfRnJvbVN0cmluZyAoZmlsZS0+aW5jbHVkZWRfYnkt PmZpbGVuYW1lKTsKKyAgICAgIGlmICghdG1wKQorICAgICAgICBnb3RvIGVy cl9leGl0OworICAgICAgaWYgKFB5VHVwbGVfU2V0SXRlbSAodHVwbGUsIDAs IHRtcCkgIT0gMCkKKyAgICAgICAgZ290byBlcnJfZXhpdDsKKworICAgICAg dG1wID0gUHlJbnRfRnJvbUxvbmcgKGZpbGUtPmluY2x1ZGVkX2F0X2xpbmUp OworICAgICAgaWYgKCF0bXApCisgICAgICAgIGdvdG8gZXJyX2V4aXQ7Cisg ICAgICBpZiAoUHlUdXBsZV9TZXRJdGVtICh0dXBsZSwgMSwgdG1wKSAhPSAw KQorICAgICAgICBnb3RvIGVycl9leGl0OworCisgICAgICBpZiAoUHlMaXN0 X0FwcGVuZCAocmVzdWx0LCB0dXBsZSkgIT0gMCkKKwlnb3RvIGVycl9leGl0 OworICAgICAgUHlfREVDUkVGICh0dXBsZSk7CisKKyAgICAgIGZpbGUgPSBm aWxlLT5pbmNsdWRlZF9ieTsKKyAgICB9CisKKyAgcmV0dXJuIHJlc3VsdDsK KworICBlcnJfZXhpdDoKKyAgICBQeV9YREVDUkVGICh0dXBsZSk7CisgICAg UHlfREVDUkVGIChyZXN1bHQpOworICAgIHJldHVybiBOVUxMOworfQorCisv KiBDcmVhdGUgYSBuZXcgbWFjcm8gKGdkYi5NYWNybykgb2JqZWN0IHRoYXQg ZW5jYXBzdWxhdGVzIHRoZQorICAgbWFjcm9fZGVmaW5pdGlvbiBzdHJ1Y3R1 cmUgZnJvbSBHREIuICAqLworUHlPYmplY3QgKgorbWFjcm9weV9vYmplY3Rf Y3JlYXRlIChzdHJ1Y3QgbWFjcm9fZGVmaW5pdGlvbiAqbWFjcm8sCisJCSAg ICAgICBjb25zdCBjaGFyICpuYW1lLAorCQkgICAgICAgc3RydWN0IG1hY3Jv X3NvdXJjZV9maWxlICptcywKKwkJICAgICAgIGludCBsaW5lKQoreworICBt YWNyb19vYmplY3QgKm1hY3JvX29iajsKKworICBtYWNyb19vYmogPSBQeU9i amVjdF9OZXcgKG1hY3JvX29iamVjdCwgJm1hY3JvX29iamVjdF90eXBlKTsK KyAgaWYgKG1hY3JvX29iaikKKyAgICB7CisgICAgICAvKiBTYXZlIGVub3Vn aCB0byBsb29rdXAgdGhlIG1hY3JvIGFnYWluIGluIHRoZSBtZXRob2RzLgor CSBUaGVuIGRvIGEgbG9va3VwIGFuZCBsYXppbHkgY29weSB0aGluZ3MgaW50 byBQeU9iamVjdHMuCisgICAgICAgICBDb25zZWN1dGl2ZSBsb29rdXBzIHNo b3VsZCBiZSBPSywgYmVjYXVzZSBvZiB0aGUgc3BsYXkgdHJlZS4KKyAgICAg ICAgIFdlIGNhbm5vdCBzYXZlIGEgbWFjcm8gZGVmaW5pdGlvbiBkdWUgdG8g aW5jb25zaXN0ZW50IG1lbW9yeQorCSBtYW5hZ2VtZW50LiAgV2UgcmVseSBv biB0aGUgZmFjdCB0aGF0IHRoZSBtYWNyb19zb3VyY2VfZmlsZQorICAgICAg ICAgaXMgbm90IHJlbGVhc2VkIHVudGlsIGV4aXQuCisKKwkgSXQgc2VlbXMg d2UgbWF5IG5lZWQgdG8gbW92ZSB0byB1c2luZyBhICdtYWNyb19zY29wZScK KwkgaWYgd2Ugd2FudCBhIHB5dGhvbiBhcGkgZm9yIHVzZXItZGVmaW5lZCBt YWNyb3MuICovCisgICAgICBtYWNyb19vYmotPnNyY19maWxlID0gbXM7Cisg ICAgICBtYWNyb19vYmotPnNyY19saW5lID0gbGluZTsKKyAgICAgIG1hY3Jv X29iai0+bmFtZSA9IHhzdHJkdXAgKG5hbWUpOworICAgIH0KKworICByZXR1 cm4gKFB5T2JqZWN0ICopIG1hY3JvX29iajsKK30KKworc3RhdGljIHZvaWQK K21hY3JvcHlfZGVhbGxvYyAoUHlPYmplY3QgKm9iaikKK3sKKyAgbWFjcm9f b2JqZWN0ICptYWNyb19vYmogPSAobWFjcm9fb2JqZWN0ICopIG9iajsKKwor ICB4ZnJlZSAoKHZvaWQgKikgbWFjcm9fb2JqLT5uYW1lKTsKKyAgb2JqLT5v Yl90eXBlLT50cF9mcmVlIChvYmopOworfQorCitzdGF0aWMgUHlPYmplY3Qg KgorbWFjcm9weV9uYW1lX21ldGhvZCAoUHlPYmplY3QgKnNlbGYsIFB5T2Jq ZWN0ICphcmdzKQoreworICBtYWNyb19vYmplY3QgKm1lID0gKG1hY3JvX29i amVjdCAqKSBzZWxmOworCisgIHJldHVybiBQeVN0cmluZ19EZWNvZGUgKG1l LT5uYW1lLCBzdHJsZW4gKG1lLT5uYW1lKSwgaG9zdF9jaGFyc2V0ICgpLCBO VUxMKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK21hY3JvcHlfZGVmaW5p dGlvbl9tZXRob2QgKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykK K3sKKyAgbWFjcm9fb2JqZWN0ICptZSA9IChtYWNyb19vYmplY3QgKikgc2Vs ZjsKKyAgc3RydWN0IG1hY3JvX2RlZmluaXRpb24gKm1hY3JvOworCisgIG1h Y3JvID0gbWFjcm9fbG9va3VwX2RlZmluaXRpb24gKG1lLT5zcmNfZmlsZSwg bWUtPnNyY19saW5lLCBtZS0+bmFtZSk7CisgIHJldHVybiBkZWZpbml0aW9u X3RvX3B5IChtYWNybyk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCittYWNy b3B5X2lzX2Z1bmN0aW9uX2xpa2VfbWV0aG9kIChQeU9iamVjdCAqc2VsZiwg UHlPYmplY3QgKmFyZ3MpCit7CisgIG1hY3JvX29iamVjdCAqbWUgPSAobWFj cm9fb2JqZWN0ICopIHNlbGY7CisgIHN0cnVjdCBtYWNyb19kZWZpbml0aW9u ICptYWNybzsKKworICBtYWNybyA9IG1hY3JvX2xvb2t1cF9kZWZpbml0aW9u IChtZS0+c3JjX2ZpbGUsIG1lLT5zcmNfbGluZSwgbWUtPm5hbWUpOworICBy ZXR1cm4gaXNfZnVuY3Rpb25fbGlrZV90b19weSAobWFjcm8pOworfQorCitz dGF0aWMgUHlPYmplY3QgKgorbWFjcm9weV9hcmd2X21ldGhvZCAoUHlPYmpl Y3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICBtYWNyb19vYmplY3Qg Km1lID0gKG1hY3JvX29iamVjdCAqKSBzZWxmOworICBzdHJ1Y3QgbWFjcm9f ZGVmaW5pdGlvbiAqbWFjcm87CisKKyAgbWFjcm8gPSBtYWNyb19sb29rdXBf ZGVmaW5pdGlvbiAobWUtPnNyY19maWxlLCBtZS0+c3JjX2xpbmUsIG1lLT5u YW1lKTsKKyAgcmV0dXJuIGFyZ3ZfdG9fcHkgKG1hY3JvKTsKK30KKworc3Rh dGljIFB5T2JqZWN0ICoKK21hY3JvcHlfaW5jbHVkZV90cmFpbF9tZXRob2Qg KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgbWFjcm9f b2JqZWN0ICptZSA9IChtYWNyb19vYmplY3QgKikgc2VsZjsKKyAgc3RydWN0 IG1hY3JvX2RlZmluaXRpb24gKm1hY3JvOworCisgIG1hY3JvID0gbWFjcm9f bG9va3VwX2RlZmluaXRpb24gKG1lLT5zcmNfZmlsZSwgbWUtPnNyY19saW5l LCBtZS0+bmFtZSk7CisgIHJldHVybiBpbmNsdWRlX3RyYWlsX3RvX3B5ICht YWNybywgbWUtPm5hbWUsIG1lLT5zcmNfZmlsZSwgbWUtPnNyY19saW5lKTsK K30KKworc3RhdGljIGludAorY29uY2F0X2NoYXJzIChQeU9iamVjdCAqKnJl c3VsdCwgY29uc3QgY2hhciAqc3R1ZmYpCit7CisgIFB5T2JqZWN0ICp0bXAg PSBQeVN0cmluZ19Gcm9tU3RyaW5nIChzdHVmZik7CisKKyAgaWYgKCF0bXAp CisgICAgcmV0dXJuIC0xOworCisgIFB5U3RyaW5nX0NvbmNhdEFuZERlbCAo cmVzdWx0LCB0bXApOworICBpZiAoKnJlc3VsdCA9PSBOVUxMKQorICAgIHJl dHVybiAtMTsKKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorY29u Y2F0X3B5X29iaiAoUHlPYmplY3QgKipyZXN1bHQsIFB5T2JqZWN0ICpzdHVm ZikKK3sKKyAgUHlPYmplY3QgKnRtcCA9IFB5T2JqZWN0X1N0ciAoc3R1ZmYp OworCisgIGlmICghdG1wKQorICAgIHJldHVybiAtMTsKKworICBQeVN0cmlu Z19Db25jYXRBbmREZWwgKHJlc3VsdCwgdG1wKTsKKyAgaWYgKCpyZXN1bHQg PT0gTlVMTCkKKyAgICByZXR1cm4gLTE7CisKKyAgcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBQeU9iamVjdCAqCittYWNyb3B5X3N0ciAoUHlPYmplY3QgKnNl bGYpCit7CisgIFB5T2JqZWN0ICpyZXN1bHQgPSBQeVN0cmluZ19Gcm9tU3Ry aW5nICgiPGdkYi5NYWNybyAiKTsKKyAgbWFjcm9fb2JqZWN0ICptZSA9ICht YWNyb19vYmplY3QgKikgc2VsZjsKKyAgc3RydWN0IG1hY3JvX2RlZmluaXRp b24gKm1hY3JvOworICBQeU9iamVjdCAqYXJndiA9IG1hY3JvcHlfYXJndl9t ZXRob2QgKHNlbGYsIFB5X05vbmUpOworICBQeU9iamVjdCAqZGVmaW5pdGlv biA9IG1hY3JvcHlfZGVmaW5pdGlvbl9tZXRob2QgKHNlbGYsIFB5X05vbmUp OworICBQeU9iamVjdCAqaW5jbHVkZV90cmFpbCA9IG1hY3JvcHlfaW5jbHVk ZV90cmFpbF9tZXRob2QgKHNlbGYsIFB5X05vbmUpOworICBQeU9iamVjdCAq aXNfZnVuY3Rpb25fbGlrZSA9IG1hY3JvcHlfaXNfZnVuY3Rpb25fbGlrZV9t ZXRob2QgKHNlbGYsIFB5X05vbmUpOworICBQeU9iamVjdCAqbmFtZSA9IFB5 U3RyaW5nX0Zyb21TdHJpbmcgKG1lLT5uYW1lKTsKKworICBpZiAoIWRlZmlu aXRpb24gfHwgIWlzX2Z1bmN0aW9uX2xpa2UgfHwgIWFyZ3YKKyAgICAgIHx8 ICFpbmNsdWRlX3RyYWlsIHx8ICFuYW1lIHx8ICFyZXN1bHQpCisgICAgZ290 byBlcnJfcmV0OworCisgIGlmIChjb25jYXRfcHlfb2JqICgmcmVzdWx0LCBu YW1lKSAhPSAwKQorICAgIGdvdG8gZXJyX3JldDsKKworICBpZiAoaXNfZnVu Y3Rpb25fbGlrZSA9PSBQeV9UcnVlKQorICAgIHsKKyAgICAgIFB5X3NzaXpl X3Qgc3ogPSBQeUxpc3RfU2l6ZSAoYXJndik7CisgICAgICBQeV9zc2l6ZV90 IGk7CisKKyAgICAgIGlmIChjb25jYXRfY2hhcnMgKCZyZXN1bHQsICIoIikg IT0gMCkKKyAgICAgICAgZ290byBlcnJfcmV0OworCisgICAgICBmb3IgKGkg PSAwOyBpIDwgc3o7IGkrKykKKyAgICAgICAgeworCQkJCSAgICAgIC8qIGJv cnJvd2VkICovCisJICBpZiAoY29uY2F0X3B5X29iaiAoJnJlc3VsdCwgUHlM aXN0X0dldEl0ZW0gKGFyZ3YsIGkpKSAhPSAwKQorCSAgICBnb3RvIGVycl9y ZXQ7CisKKwkgIGlmIChpIDwgc3ogLSAxKQorICAgICAgICAgICAgaWYgKGNv bmNhdF9jaGFycyAoJnJlc3VsdCwgIiwgIikgIT0gMCkKKwkgICAgICBnb3Rv IGVycl9yZXQ7CisgICAgICAgIH0KKworICAgICAgaWYgKGNvbmNhdF9jaGFy cyAoJnJlc3VsdCwgIikiKSAhPSAwKQorCWdvdG8gZXJyX3JldDsKKyAgICB9 CisKKyAgaWYgKGRlZmluaXRpb24gIT0gUHlfTm9uZSAmJiBQeVN0cmluZ19T aXplIChkZWZpbml0aW9uKSkKKyAgICB7CisgICAgICBpZiAoY29uY2F0X2No YXJzICgmcmVzdWx0LCAiPSIpICE9IDApCisgICAgICAgIGdvdG8gZXJyX3Jl dDsKKworICAgICAgaWYgKGNvbmNhdF9weV9vYmogKCZyZXN1bHQsIGRlZmlu aXRpb24pICE9IDApCisJZ290byBlcnJfcmV0OworICAgIH0KKworICBpZiAo Y29uY2F0X2NoYXJzICgmcmVzdWx0LCAiICIpICE9IDApCisgICAgZ290byBl cnJfcmV0OworICBpZiAoY29uY2F0X2NoYXJzICgmcmVzdWx0LCAiaW5jbHVk ZV90cmFpbD0iKSAhPSAwKQorICAgIGdvdG8gZXJyX3JldDsKKyAgaWYgKGNv bmNhdF9weV9vYmogKCZyZXN1bHQsIGluY2x1ZGVfdHJhaWwpICE9IDApCisg ICAgZ290byBlcnJfcmV0OworCisgIGlmIChjb25jYXRfY2hhcnMgKCZyZXN1 bHQsICI+IikgIT0gMCkKKyAgICBnb3RvIGVycl9yZXQ7CisKKyAgZ290byBu b3JtYWxfcmV0OworCisgIGVycl9yZXQ6CisgICAgUHlfWERFQ1JFRiAocmVz dWx0KTsKKyAgICByZXN1bHQgPSBOVUxMOworICAgIC8qIGZhbGwtdGhyb3Vn aCAqLworICBub3JtYWxfcmV0OgorICAgIFB5X1hERUNSRUYgKGFyZ3YpOwor ICAgIFB5X1hERUNSRUYgKGRlZmluaXRpb24pOworICAgIFB5X1hERUNSRUYg KGluY2x1ZGVfdHJhaWwpOworICAgIFB5X1hERUNSRUYgKGlzX2Z1bmN0aW9u X2xpa2UpOworICAgIFB5X1hERUNSRUYgKG5hbWUpOworICAgIHJldHVybiBy ZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQKK21hY3JvcHlfY29tcGFyZSAoUHlP YmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvMikKK3sKKyAgUHlPYmplY3QgKm15 X3N0ciA9IG1hY3JvcHlfc3RyIChzZWxmKTsKKyAgaW50IHJlc3VsdDsKKwor ICBpZiAoIW15X3N0cikKKyAgICByZXR1cm4gLTE7CisKKyAgaWYgKFB5T2Jq ZWN0X1R5cGVDaGVjayAobzIsICZtYWNyb19vYmplY3RfdHlwZSkpCisgICAg eworICAgICAgUHlPYmplY3QgKm90aGVyX3N0ciA9IG1hY3JvcHlfc3RyIChv Mik7CisKKyAgICAgIGlmIChvdGhlcl9zdHIpCisgICAgICAgIHJlc3VsdCA9 IFB5T2JqZWN0X0NvbXBhcmUgKG15X3N0ciwgb3RoZXJfc3RyKTsKKyAgICAg IGVsc2UKKwlyZXN1bHQgPSAtMTsKKworICAgICAgUHlfREVDUkVGIChteV9z dHIpOworICAgICAgUHlfWERFQ1JFRiAob3RoZXJfc3RyKTsKKyAgICAgIHJl dHVybiByZXN1bHQ7CisgICAgfQorCisgIHJlc3VsdCA9IFB5T2JqZWN0X0Nv bXBhcmUgKG15X3N0ciwgbzIpOworCisgIFB5X0RFQ1JFRiAobXlfc3RyKTsK KyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGxvbmcKK21hY3JvcHlf aGFzaChQeU9iamVjdCAqbykKK3sKKyAgbG9uZyByZXN1bHQ7CisgIFB5T2Jq ZWN0ICpteV9zdHIgPSBtYWNyb3B5X3N0ciAobyk7CisKKyAgaWYgKCFteV9z dHIpCisgICAgcmV0dXJuIC0xOworCisgIHJlc3VsdCA9IFB5T2JqZWN0X0hh c2ggKG15X3N0cik7CisgIFB5X0RFQ1JFRiAobXlfc3RyKTsKKyAgcmV0dXJu IHJlc3VsdDsKK30KKwordm9pZAorZ2RicHlfaW5pdGlhbGl6ZV9tYWNyb3Mg KHZvaWQpCit7CisgIG1hY3JvX29iamVjdF90eXBlLnRwX25ldyA9IFB5VHlw ZV9HZW5lcmljTmV3OworCisgIGlmIChQeVR5cGVfUmVhZHkgKCZtYWNyb19v YmplY3RfdHlwZSkgPCAwKQorICAgIHJldHVybjsKKworICBQeV9JTkNSRUYg KCZtYWNyb19vYmplY3RfdHlwZSk7CisgIFB5TW9kdWxlX0FkZE9iamVjdCAo Z2RiX21vZHVsZSwgIk1hY3JvIiwKKwkJICAgICAgKFB5T2JqZWN0ICopICZt YWNyb19vYmplY3RfdHlwZSk7Cit9CisKK3N0YXRpYyBQeUdldFNldERlZiBt YWNyb19vYmplY3RfZ2V0c2V0W10gPSB7CisgIHtOVUxMfSAgLyogU2VudGlu ZWwgKi8KK307CisKK3N0YXRpYyBQeU1ldGhvZERlZiBtYWNyb19vYmplY3Rf bWV0aG9kc1tdID0geworICB7ICJhcmd2IiwgbWFjcm9weV9hcmd2X21ldGhv ZCwgTUVUSF9OT0FSR1MsCisgICAgImFyZ3YgKCkgLT4gTGlzdC5cblwKK1Jl dHVybiBhIGxpc3QgY29udGFpbmluZyB0aGUgbmFtZXMgb2YgdGhlIGFyZ3Vt ZW50cyBmb3IgYSBmdW5jdGlvbiBsaWtlIFwKK21hY3JvLiIgfSwKKyAgeyAi ZGVmaW5pdGlvbiIsIG1hY3JvcHlfZGVmaW5pdGlvbl9tZXRob2QsIE1FVEhf Tk9BUkdTLAorICAgICJkZWZpbml0aW9uICgpIC0+IFN0cmluZy5cblwKK1Jl dHVybiB0aGUgbWFjcm8ncyBkZWZpbml0aW9uLiIgfSwKKyAgeyAiaW5jbHVk ZV90cmFpbCIsIG1hY3JvcHlfaW5jbHVkZV90cmFpbF9tZXRob2QsIE1FVEhf Tk9BUkdTLAorICAgICJpbmNsdWRlX3RyYWlsICgpIC0+IExpc3QuXG5cCitS ZXR1cm4gYSBsaXN0IGNvbnRhaW5pbmcgdHVwbGVzIHdpdGggdGhlIGZpbGVu YW1lIGFuZCBsaW5lIG51bWJlciBkZXNjcmliaW5nIFwKK2hvdyBhbmQgd2hl cmUgdGhpcyBtYWNybyBjYW1lIHRvIGJlIGRlZmluZWQuIiB9LAorICB7ICJp c19mdW5jdGlvbl9saWtlIiwgbWFjcm9weV9pc19mdW5jdGlvbl9saWtlX21l dGhvZCwgTUVUSF9OT0FSR1MsCisgICAgImlzX2Z1bmN0aW9uX2xpa2UgKCkg LT4gQm9vbC5cblwKK1JldHVybiBUcnVlIGlmIHRoZSBtYWNybyBpcyBmdW5j dGlvbiBsaWtlLCBGYWxzZSBvdGhlcndpc2UuIiB9LAorICB7ICJuYW1lIiwg bWFjcm9weV9uYW1lX21ldGhvZCwgTUVUSF9OT0FSR1MsCisgICAgIm5hbWUg KCkgLT4gU3RyaW5nLlxuXAorUmV0dXJuIHRoZSBtYWNybydzIG5hbWUuIiB9 LAorICB7TlVMTH0gIC8qIFNlbnRpbmVsICovCit9OworCitzdGF0aWMgUHlU eXBlT2JqZWN0IG1hY3JvX29iamVjdF90eXBlID0geworICBQeU9iamVjdF9I RUFEX0lOSVQgKE5VTEwpCisgIDAsCQkJCSAgLypvYl9zaXplKi8KKyAgImdk Yi5NYWNybyIsCQkJICAvKnRwX25hbWUqLworICBzaXplb2YgKG1hY3JvX29i amVjdCksCSAgLyp0cF9iYXNpY3NpemUqLworICAwLAkJCQkgIC8qdHBfaXRl bXNpemUqLworICBtYWNyb3B5X2RlYWxsb2MsCQkgIC8qdHBfZGVhbGxvYyov CisgIDAsCQkJCSAgLyp0cF9wcmludCovCisgIDAsCQkJCSAgLyp0cF9nZXRh dHRyKi8KKyAgMCwJCQkJICAvKnRwX3NldGF0dHIqLworICBtYWNyb3B5X2Nv bXBhcmUsCQkgIC8qdHBfY29tcGFyZSovCisgIDAsCQkJCSAgLyp0cF9yZXBy Ki8KKyAgMCwJCQkJICAvKnRwX2FzX251bWJlciovCisgIDAsCQkJCSAgLyp0 cF9hc19zZXF1ZW5jZSovCisgIDAsCQkJCSAgLyp0cF9hc19tYXBwaW5nKi8K KyAgbWFjcm9weV9oYXNoLAkJCSAgLyp0cF9oYXNoICovCisgIDAsCQkJCSAg Lyp0cF9jYWxsKi8KKyAgbWFjcm9weV9zdHIsCQkJICAvKnRwX3N0ciovCisg IDAsCQkJCSAgLyp0cF9nZXRhdHRybyovCisgIDAsCQkJCSAgLyp0cF9zZXRh dHRybyovCisgIDAsCQkJCSAgLyp0cF9hc19idWZmZXIqLworICBQeV9UUEZM QUdTX0RFRkFVTFQsCQkgIC8qdHBfZmxhZ3MqLworICAiR0RCIG1hY3JvIG9i amVjdCIsCQkgIC8qdHBfZG9jICovCisgIDAsCQkJCSAgLyp0cF90cmF2ZXJz ZSAqLworICAwLAkJCQkgIC8qdHBfY2xlYXIgKi8KKyAgMCwJCQkJICAvKnRw X3JpY2hjb21wYXJlICovCisgIDAsCQkJCSAgLyp0cF93ZWFrbGlzdG9mZnNl dCAqLworICAwLAkJCQkgIC8qdHBfaXRlciAqLworICAwLAkJCQkgIC8qdHBf aXRlcm5leHQgKi8KKyAgbWFjcm9fb2JqZWN0X21ldGhvZHMsCQkgIC8qdHBf bWV0aG9kcyAqLworICAwLAkJCQkgIC8qdHBfbWVtYmVycyAqLworICBtYWNy b19vYmplY3RfZ2V0c2V0LAkJICAvKnRwX2dldHNldCAqLworfTsKZGlmZiAt LWdpdCBhL2dkYi9weXRob24vcHktb2JqZmlsZS5jIGIvZ2RiL3B5dGhvbi9w eS1vYmpmaWxlLmMKaW5kZXggZjk4MjFmNS4uMjY5NzIxOCAxMDA2NDQKLS0t IGEvZ2RiL3B5dGhvbi9weS1vYmpmaWxlLmMKKysrIGIvZ2RiL3B5dGhvbi9w eS1vYmpmaWxlLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJjaGFy c2V0LmgiCiAjaW5jbHVkZSAib2JqZmlsZXMuaCIKICNpbmNsdWRlICJsYW5n dWFnZS5oIgorI2luY2x1ZGUgInB5LXN5bXRhYi5oIgogCiB0eXBlZGVmIHN0 cnVjdAogewpAQCAtMTE4LDYgKzExOSwxNyBAQCBvYmpmcHlfc2V0X3ByaW50 ZXJzIChQeU9iamVjdCAqbywgUHlPYmplY3QgKnZhbHVlLCB2b2lkICppZ25v cmUpCiAgIHJldHVybiAwOwogfQogCitzdGF0aWMgUHlPYmplY3QgKgorb2Jq ZnB5X3N5bXRhYiAoUHlPYmplY3QgKnNlbGYsIHZvaWQgKmlnbm9yZSkKK3sK KyAgb2JqZmlsZV9vYmplY3QgKm9iaiA9IChvYmpmaWxlX29iamVjdCAqKSBz ZWxmOworCisgIGlmICghIG9iai0+b2JqZmlsZSkKKyAgICByZXR1cm4gUHlf Tm9uZTsKKworICByZXR1cm4gc3ltdGFiX3RvX3N5bXRhYl9vYmplY3QgKG9i ai0+b2JqZmlsZS0+c3ltdGFicyk7Cit9CisKIC8qIEltcGxlbWVudGF0aW9u IG9mIGdkYi5PYmpmaWxlLmlzX3ZhbGlkIChzZWxmKSAtPiBCb29sZWFuLgog ICAgUmV0dXJucyBUcnVlIGlmIHRoaXMgb2JqZWN0IGZpbGUgc3RpbGwgZXhp c3RzIGluIEdEQi4gICovCiAKQEAgLTIxMCw2ICsyMjIsOCBAQCBzdGF0aWMg UHlHZXRTZXREZWYgb2JqZmlsZV9nZXRzZXRbXSA9CiAgICAgIlRoZSBvYmpm aWxlJ3MgZmlsZW5hbWUsIG9yIE5vbmUuIiwgTlVMTCB9LAogICB7ICJwcmV0 dHlfcHJpbnRlcnMiLCBvYmpmcHlfZ2V0X3ByaW50ZXJzLCBvYmpmcHlfc2V0 X3ByaW50ZXJzLAogICAgICJQcmV0dHkgcHJpbnRlcnMuIiwgTlVMTCB9LAor ICB7ICJzeW10YWIiLCBvYmpmcHlfc3ltdGFiLCBOVUxMLAorICAgICJUaGUg b2JqZmlsZSdzIHN5bXRhYiwgb3IgTm9uZS4iLCBOVUxMIH0sCiAgIHsgTlVM TCB9CiB9OwogCmRpZmYgLS1naXQgYS9nZGIvcHl0aG9uL3B5LXN5bXRhYi5j IGIvZ2RiL3B5dGhvbi9weS1zeW10YWIuYwppbmRleCAxMDdjZGVjLi4wMzNh MjFkIDEwMDY0NAotLS0gYS9nZGIvcHl0aG9uL3B5LXN5bXRhYi5jCisrKyBi L2dkYi9weXRob24vcHktc3ltdGFiLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNp bmNsdWRlICJzeW10YWIuaCIKICNpbmNsdWRlICJzb3VyY2UuaCIKICNpbmNs dWRlICJweXRob24taW50ZXJuYWwuaCIKKyNpbmNsdWRlICJweS1tYWNyby5o IgogI2luY2x1ZGUgIm9iamZpbGVzLmgiCiAKIHR5cGVkZWYgc3RydWN0IHN0 cHlfc3ltdGFiX29iamVjdCB7CkBAIC0xMzgsNiArMTM5LDY2IEBAIHN0cHlf ZnVsbG5hbWUgKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKICAg UHlfUkVUVVJOX05PTkU7CiB9CiAKK3N0cnVjdCBtYWNyb191c2VyX2RhdGEg eworICBQeU9iamVjdCAqbGlzdDsKKyAgaW50IGVycm9yczsKK307CisKK3N0 YXRpYyB2b2lkIGFkZF9tYWNyb190b19saXN0IChjb25zdCBjaGFyICpuYW1l LAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBtYWNyb19kZWZpbml0aW9uICpk ZWZpbml0aW9uLAorCQkJICAgICAgIHN0cnVjdCBtYWNyb19zb3VyY2VfZmls ZSAqc291cmNlLAorCQkJICAgICAgIGludCBsaW5lLAorCQkJICAgICAgIHZv aWQgKnVzZXJfZGF0YSkKK3sKKyAgc3RydWN0IG1hY3JvX3VzZXJfZGF0YSAq bXVkID0gdXNlcl9kYXRhOworICBQeU9iamVjdCAqdG1wOworCisgIGlmICgh IFB5T2JqZWN0X1R5cGVDaGVjayAobXVkLT5saXN0LCAmUHlMaXN0X1R5cGUp KQorICAgIGdvdG8gZXJyX2V4aXQ7CisKKyAgaWYgKG11ZC0+ZXJyb3JzICE9 IDApCisgICAgZ290byBlcnJfZXhpdDsKKworICB0bXAgPSBtYWNyb3B5X29i amVjdF9jcmVhdGUgKGRlZmluaXRpb24sIG5hbWUsIHNvdXJjZSwgbGluZSk7 CisgIGlmICh0bXApCisgICAgeworICAgICAgaWYgKFB5TGlzdF9BcHBlbmQg KG11ZC0+bGlzdCwgdG1wKSAhPSAwKQorCWdvdG8gZXJyX2V4aXQ7CisgICAg ICBQeV9ERUNSRUYgKHRtcCk7CisgICAgICByZXR1cm47CisgICAgfQorCisg IGVycl9leGl0OgorICAgIG11ZC0+ZXJyb3JzID0gMTsKKyAgICByZXR1cm47 Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitzdHB5X21hY3JvcyAoUHlPYmpl Y3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICBzdHJ1Y3Qgc3ltdGFi ICpzdCA9IHN5bXRhYl9vYmplY3RfdG9fc3ltdGFiIChzZWxmKTsKKyAgc3Ry dWN0IG1hY3JvX3VzZXJfZGF0YSBtdWQ7CisgIFB5T2JqZWN0ICpyZXN1bHQ7 CisKKyAgU1RQWV9SRVFVSVJFX1ZBTElEIChzZWxmLCBzdCk7CisKKyAgcmVz dWx0ID0gUHlMaXN0X05ldyAoMCk7CisgIGlmIChyZXN1bHQgPT0gTlVMTCkK KyAgICByZXR1cm4gTlVMTDsKKworICBtdWQubGlzdCA9IHJlc3VsdDsKKyAg bXVkLmVycm9ycyA9IDA7CisgIG1hY3JvX2Zvcl9lYWNoIChzdC0+bWFjcm9f dGFibGUsIGFkZF9tYWNyb190b19saXN0LCAmbXVkKTsKKworICBpZiAobXVk LmVycm9ycyAhPSAwKQorICAgIHsKKyAgICAgIFB5X0RFQ1JFRiAocmVzdWx0 KTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICByZXR1cm4gcmVz dWx0OworfQorCiAvKiBJbXBsZW1lbnRhdGlvbiBvZiBnZGIuU3ltdGFiLmlz X3ZhbGlkIChzZWxmKSAtPiBCb29sZWFuLgogICAgUmV0dXJucyBUcnVlIGlm IHRoaXMgU3ltYm9sIHRhYmxlIHN0aWxsIGV4aXN0cyBpbiBHREIuICAqLwog CkBAIC0xOTEsNiArMjUyLDcgQEAgc3RweV9kZWFsbG9jIChQeU9iamVjdCAq b2JqKQogICBpZiAoc3ltdGFiLT5uZXh0KQogICAgIHN5bXRhYi0+bmV4dC0+ cHJldiA9IHN5bXRhYi0+cHJldjsKICAgc3ltdGFiLT5zeW10YWIgPSBOVUxM OworICBvYmotPm9iX3R5cGUtPnRwX2ZyZWUgKG9iaik7CiB9CiAKIApAQCAt MjQyLDYgKzMwNCwzOSBAQCBzYWxweV9pc192YWxpZCAoUHlPYmplY3QgKnNl bGYsIFB5T2JqZWN0ICphcmdzKQogICBQeV9SRVRVUk5fVFJVRTsKIH0KIAor c3RhdGljIFB5T2JqZWN0ICoKK3NhbHB5X21hY3JvX25hbWVkIChQeU9iamVj dCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgIHN0cnVjdCBzeW10YWJf YW5kX2xpbmUgKnNhbDsKKyAgc3RydWN0IG1hY3JvX3Njb3BlICptczsKKyAg c3RydWN0IG1hY3JvX2RlZmluaXRpb24gKm1kZWY7CisgIGNoYXIgKm1hY3Jv X25hbWU7CisgIHN0cnVjdCBjbGVhbnVwICpjbGVhbnVwX2NoYWluOworICBQ eU9iamVjdCAqcmVzdWx0OworCisgIGlmICghUHlBcmdfUGFyc2VUdXBsZSAo YXJncywgInMiLCAmbWFjcm9fbmFtZSkpCisgICAgcmV0dXJuIE5VTEw7CisK KyAgU0FMUFlfUkVRVUlSRV9WQUxJRCAoc2VsZiwgc2FsKTsKKworICBtcyA9 IHNhbF9tYWNyb19zY29wZSAoKnNhbCk7CisgIGNsZWFudXBfY2hhaW4gPSBt YWtlX2NsZWFudXAgKGZyZWVfY3VycmVudF9jb250ZW50cywgJm1zKTsKKyAg aWYgKG1zID09IE5VTEwpCisgICAgZ290byBub25lX2V4aXQ7CisKKyAgbWRl ZiA9IG1hY3JvX2xvb2t1cF9kZWZpbml0aW9uIChtcy0+ZmlsZSwgbXMtPmxp bmUsIG1hY3JvX25hbWUpOworICBpZiAobWRlZiA9PSBOVUxMKQorICAgIGdv dG8gbm9uZV9leGl0OworCisgIHJlc3VsdCA9IG1hY3JvcHlfb2JqZWN0X2Ny ZWF0ZSAobWRlZiwgbWFjcm9fbmFtZSwgbXMtPmZpbGUsIG1zLT5saW5lKTsK KyAgZG9fY2xlYW51cHMgKGNsZWFudXBfY2hhaW4pOworICByZXR1cm4gcmVz dWx0OworCisgIG5vbmVfZXhpdDoKKyAgICBkb19jbGVhbnVwcyAoY2xlYW51 cF9jaGFpbik7CisgICAgcmV0dXJuIFB5X05vbmU7Cit9CisKIHN0YXRpYyB2 b2lkCiBzYWxweV9kZWFsbG9jIChQeU9iamVjdCAqc2VsZikKIHsKQEAgLTQ3 Nyw2ICs1NzIsOSBAQCBSZXR1cm4gdHJ1ZSBpZiB0aGlzIHN5bWJvbCB0YWJs ZSBpcyB2YWxpZCwgZmFsc2UgaWYgbm90LiIgfSwKICAgeyAiZnVsbG5hbWUi LCBzdHB5X2Z1bGxuYW1lLCBNRVRIX05PQVJHUywKICAgICAiZnVsbG5hbWUg KCkgLT4gU3RyaW5nLlxuXAogUmV0dXJuIHRoZSBzeW10YWIncyBmdWxsIHNv dXJjZSBmaWxlbmFtZS4iIH0sCisgIHsgIm1hY3JvcyIsIHN0cHlfbWFjcm9z LCBNRVRIX05PQVJHUywKKyAgICAibWFjcm9zICgpIC0+IExpc3QuXG5cCitS ZXR1cm4gYSBsaXN0IG9mIG1hY3JvcyBpbiB0aGUgc3ltdGFiLiIgfSwKICAg e05VTEx9ICAvKiBTZW50aW5lbCAqLwogfTsKIApAQCAtNTI2LDYgKzYyNCwx MCBAQCBzdGF0aWMgUHlNZXRob2REZWYgc2FsX29iamVjdF9tZXRob2RzW10g PSB7CiAgIHsgImlzX3ZhbGlkIiwgc2FscHlfaXNfdmFsaWQsIE1FVEhfTk9B UkdTLAogICAgICJpc192YWxpZCAoKSAtPiBCb29sZWFuLlxuXAogUmV0dXJu IHRydWUgaWYgdGhpcyBzeW1ib2wgdGFibGUgYW5kIGxpbmUgaXMgdmFsaWQs IGZhbHNlIGlmIG5vdC4iIH0sCisgIHsgIm1hY3JvX25hbWVkIiwgc2FscHlf bWFjcm9fbmFtZWQsIE1FVEhfVkFSQVJHUywKKyAgICAibWFjcm9fbmFtZWQg KG5hbWUpIC0+IE1hY3JvLlxuXAorUmV0dXJuIHRoZSBtYWNybyBvYmplY3Qg Zm9yIHRoZSBnaXZlbiBuYW1lLCBcCitvciBOb25lIGlmIHRoZSBtYWNybyBj YW5ub3QgYmUgZm91bmQuIiB9LAogICB7TlVMTH0gIC8qIFNlbnRpbmVsICov CiB9OwogCmRpZmYgLS1naXQgYS9nZGIvcHl0aG9uL3B5LXN5bXRhYi5oIGIv Z2RiL3B5dGhvbi9weS1zeW10YWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi45MTFhMDUxCi0tLSAvZGV2L251bGwKKysrIGIvZ2Ri L3B5dGhvbi9weS1zeW10YWIuaApAQCAtMCwwICsxLDcgQEAKKyNpZm5kZWYg R0RCX1BZX1NZTVRBQl9ICisjZGVmaW5lIEdEQl9QWV9TWU1UQUJfSAorCitQ eU9iamVjdCAqCitzeW10YWJfdG9fc3ltdGFiX29iamVjdCAoc3RydWN0IHN5 bXRhYiAqc3ltdGFiKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9nZGIvcHl0 aG9uL3B5dGhvbi1pbnRlcm5hbC5oIGIvZ2RiL3B5dGhvbi9weXRob24taW50 ZXJuYWwuaAppbmRleCA5OTZiMjNiLi41MzI1NTJhIDEwMDY0NAotLS0gYS9n ZGIvcHl0aG9uL3B5dGhvbi1pbnRlcm5hbC5oCisrKyBiL2dkYi9weXRob24v cHl0aG9uLWludGVybmFsLmgKQEAgLTIxMSw2ICsyMTEsNyBAQCB2b2lkIGdk YnB5X2luaXRpYWxpemVfYnJlYWtwb2ludF9ldmVudCAodm9pZCk7CiB2b2lk IGdkYnB5X2luaXRpYWxpemVfY29udGludWVfZXZlbnQgKHZvaWQpOwogdm9p ZCBnZGJweV9pbml0aWFsaXplX2V4aXRlZF9ldmVudCAodm9pZCk7CiB2b2lk IGdkYnB5X2luaXRpYWxpemVfdGhyZWFkX2V2ZW50ICh2b2lkKTsKK3ZvaWQg Z2RicHlfaW5pdGlhbGl6ZV9tYWNyb3MgKHZvaWQpOwogCiBzdHJ1Y3QgY2xl YW51cCAqbWFrZV9jbGVhbnVwX3B5X2RlY3JlZiAoUHlPYmplY3QgKnB5KTsK IApkaWZmIC0tZ2l0IGEvZ2RiL3B5dGhvbi9weXRob24uYyBiL2dkYi9weXRo b24vcHl0aG9uLmMKaW5kZXggMDNlZGNlOS4uMDkyYjM1NCAxMDA2NDQKLS0t IGEvZ2RiL3B5dGhvbi9weXRob24uYworKysgYi9nZGIvcHl0aG9uL3B5dGhv bi5jCkBAIC0xMTk4LDYgKzExOTgsNyBAQCBFbmFibGVzIG9yIGRpc2FibGVz IHByaW50aW5nIG9mIFB5dGhvbiBzdGFjayB0cmFjZXMuIiksCiAgIGdkYnB5 X2luaXRpYWxpemVfbGF6eV9zdHJpbmcgKCk7CiAgIGdkYnB5X2luaXRpYWxp emVfdGhyZWFkICgpOwogICBnZGJweV9pbml0aWFsaXplX2luZmVyaW9yICgp OworICBnZGJweV9pbml0aWFsaXplX21hY3JvcyAoKTsKICAgZ2RicHlfaW5p dGlhbGl6ZV9ldmVudHMgKCk7CiAKICAgZ2RicHlfaW5pdGlhbGl6ZV9ldmVu dHJlZ2lzdHJ5ICgpOwpkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIu cHl0aG9uL3B5LW1hY3JvLmMgYi9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24v cHktbWFjcm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw Li44YWMxMGUwCi0tLSAvZGV2L251bGwKKysrIGIvZ2RiL3Rlc3RzdWl0ZS9n ZGIucHl0aG9uL3B5LW1hY3JvLmMKQEAgLTAsMCArMSw3MiBAQAorI2lmZGVm IERFRl9NQUNST1MKKworICAjaWZkZWYgT05FCisgICAgI2lmZGVmIEZPTwor ICAgICN1bmRlZiBGT08KKyAgICAjZW5kaWYKKworICAjZGVmaW5lIEZPTyAi aGVsbG8iCisgICNlbHNlCisgICAgI3VuZGVmIEZPTworICAjZW5kaWYKKwor CisgICNpZmRlZiBUV08KKyAgICAjaWZkZWYgRk9PCisgICAgI3VuZGVmIEZP TworICAgICNlbmRpZgorICAjZGVmaW5lIEZPTyAiICIKKyAgI2VuZGlmCisK KyAgI2lmZGVmIFRIUkVFCisgICAgI2lmZGVmIEZPTworICAgICN1bmRlZiBG T08KKyAgICAjZW5kaWYKKyAgI2RlZmluZSBGT08oYSxiKQorICAjZW5kaWYK KworICAjaWZkZWYgRk9VUgorICAgICNpZmRlZiBGT08KKyAgICAjdW5kZWYg Rk9PCisgICAgI2VuZGlmCisgICAgI2RlZmluZSBGT08oYSkgZm9vID0gYQor ICAjZW5kaWYKKyNlbHNlCisKK2ludCBtYWluIChpbnQgYXJnYywgY29uc3Qg Y2hhciAqKmFyZ3YpCit7CisgIGNoYXIgKmZvbzsKKworICAjZGVmaW5lIERF Rl9NQUNST1MKKyAgI2RlZmluZSBPTkUKKyAgI2luY2x1ZGUgInB5LW1hY3Jv LmMiCisgIGZvbyA9IEZPTzsKKworICAjZGVmaW5lIFRXTworICAjaW5jbHVk ZSAicHktbWFjcm8uYyIKKyAgZm9vID0gRk9POworCisgICNkZWZpbmUgVEhS RUUKKyAgI2luY2x1ZGUgInB5LW1hY3JvLmMiCisgIGZvbyA9ICJ3b3JsZCJG T08oMCwxKTsKKworICAjdW5kZWYgVEhSRUUKKyAgI2luY2x1ZGUgInB5LW1h Y3JvLmMiCisgIGZvbyA9IEZPTzsKKworICAjdW5kZWYgVFdPCisgICNpbmNs dWRlICJweS1tYWNyby5jIgorICBmb28gPSBGT087CisKKyAgI3VuZGVmIE9O RQorICAjaW5jbHVkZSAicHktbWFjcm8uYyIKKyAgZm9vID0gKGNoYXIgKikw OworCisgICNkZWZpbmUgRk9VUgorICAjaW5jbHVkZSAicHktbWFjcm8uYyIK KyAgRk9PICgidGhlIGVuZC4iKTsKKworICByZXR1cm4gMDsKK30KKyNlbmRp ZgorCmRpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHkt bWFjcm8uZXhwIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LW1hY3Jv LmV4cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2Jh YmI2Ci0tLSAvZGV2L251bGwKKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0 aG9uL3B5LW1hY3JvLmV4cApAQCAtMCwwICsxLDI4OCBAQAorIyBDb3B5cmln aHQgKEMpIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisK KyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJs aXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0 aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIg b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFt IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0 aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUu b3JnL2xpY2Vuc2VzLz4uCisKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl IEdEQiB0ZXN0c3VpdGUuICBJdCB0ZXN0cyB0aGUgbWVjaGFuaXNtCisjIGV4 cG9zaW5nIG1hY3JvcyB0byBQeXRob24uCisKK2lmICR0cmFjZWxldmVsIHRo ZW4geworICAgIHN0cmFjZSAkdHJhY2VsZXZlbAorfQorCitsb2FkX2xpYiBn ZGItcHl0aG9uLmV4cAorCitzZXQgdGVzdGZpbGUgInB5LW1hY3JvIgorc2V0 IHNyY2ZpbGUgJHt0ZXN0ZmlsZX0uYworc2V0IGJpbmZpbGUgJHtvYmpkaXJ9 LyR7c3ViZGlyfS8ke3Rlc3RmaWxlfQorZ2V0X2NvbXBpbGVyX2luZm8gJHti aW5maWxlfQoraWYgW3Rlc3RfY29tcGlsZXJfaW5mbyBnY2MqXSB7CisgICAg bGFwcGVuZCBvcHRpb25zIGFkZGl0aW9uYWxfZmxhZ3M9LWczCit9IGVsc2Ug eworICB1bnRlc3RlZCAke3Rlc3RmaWxlfS5leHAKKyAgcmV0dXJuIC0xCit9 CisKK2lmIHsgW3ByZXBhcmVfZm9yX3Rlc3RpbmcgJHt0ZXN0ZmlsZX0uZXhw ICR7dGVzdGZpbGV9ICR7c3JjZmlsZX0gJG9wdGlvbnNdIH0geworICAgIHVu dGVzdGVkICR7dGVzdGZpbGV9LmV4cAorICAgIHJldHVybiAtMQorfQorCisj IFN0YXJ0IHdpdGggYSBmcmVzaCBnZGIuCitnZGJfZXhpdAorZ2RiX3N0YXJ0 CitnZGJfcmVpbml0aWFsaXplX2RpciAkc3JjZGlyLyRzdWJkaXIKK2dkYl9s b2FkICR7YmluZmlsZX0KKworIyBTa2lwIGFsbCB0ZXN0cyBpZiBQeXRob24g c2NyaXB0aW5nIGlzIG5vdCBlbmFibGVkLgoraWYgeyBbc2tpcF9weXRob25f dGVzdHNdIH0geyBjb250aW51ZSB9CisKK2dkYl9weV90ZXN0X211bHRpcGxl ICJzZXR1cCBtYWNybyB0ZXN0IG9iamVjdHMiIFwKKyAgInB5dGhvbiIgIiIg XAorICAiZGVmIGZpbmRfb2JqZmlsZSgpOiIgIiIgXAorICAiICBmb3Igb2Jq ZmlsZSBpbiBnZGIub2JqZmlsZXMoKToiICIiIFwKKyAgIiAgICBpZiBvYmpm aWxlLmZpbGVuYW1lID09IFwiJGJpbmZpbGVcIjoiICIiIFwKKyAgIiAgICAg IHByaW50IG9iamZpbGUuZmlsZW5hbWUiICIiIFwKKyAgIiAgICAgIHJldHVy biBvYmpmaWxlIiAiIiBcCisgICJkZWYgaGVyZV9tYWNybyhuYW1lKToiICIi IFwKKyAgIiAgcmV0dXJuIGdkYi5kZWNvZGVfbGluZShcIipcJHBjXCIpXFsx XF1cWzBcXS5tYWNyb19uYW1lZChuYW1lKSIgIiIgXAorICAibWFjcm9zID0g bGlzdCgpIiAiIiBcCisgICJlbmQiICIiCisKK2dkYl90ZXN0ICJweXRob24g b2JqZmlsZSA9IGZpbmRfb2JqZmlsZSgpIiAiJGJpbmZpbGUiICJmb3VuZCBv YmpmaWxlIgorZ2RiX3Rlc3QgInB5dGhvbiBvYmpmaWxlLnN5bXRhYi5tYWNy b3MoKSIgXAorCSAiU3ltYm9sIFRhYmxlIGlzIGludmFsaWQuKiIgInN5bXRh YiBpcyBpbnZhbGlkIgorCitpZiAhW3J1bnRvX21haW5dIHsKKyAgICB1bnRl c3RlZCAke3Rlc3RmaWxlfS5leHAKKyAgICByZXR1cm4gLTEKK30KKworZ2Ri X3B5X3Rlc3Rfc2lsZW50X2NtZCAicHl0aG9uIG0gPSBvYmpmaWxlLnN5bXRh Yi5tYWNyb3MoKSIgImdldCBhbGwgbWFjcm9zIiAxCisKK2dkYl9weV90ZXN0 X3NpbGVudF9jbWQgInB5dGhvbiBpbmNsdWRlX2d1YXJkID0gaGVyZV9tYWNy byhcIkRFRl9NQUNST1NcIikiIFwKKwkJICAgICAgICJnZXQgZ3VhcmQgbWFj cm8gIzEiIFwKKwkJICAgICAgIDEKKworZ2RiX3Rlc3QgInB5dGhvbiBwcmlu dCBpbmNsdWRlX2d1YXJkLm5hbWUoKSA9PSBcIkRFRl9NQUNST1NcIiIgXAor CSAiVHJ1ZSIgXAorCSAiZ3VhcmQgbmFtZSIKKworZ2RiX3Rlc3QgInB5dGhv biBwcmludCBpbmNsdWRlX2d1YXJkLmlzX2Z1bmN0aW9uX2xpa2UoKSA9PSBG YWxzZSIgXAorCSAiVHJ1ZSIgXAorCSAiZ3VhcmQgaXNudCBmdW5jdGlvbiBs aWtlIgorCitnZGJfdGVzdCAicHl0aG9uIHByaW50IGluY2x1ZGVfZ3VhcmQu YXJndigpID09IE5vbmUiIFwKKwkgIlRydWUiIFwKKwkgImd1YXJkIGhhcyBu byBhcmdzIgorCitnZGJfdGVzdCAicHl0aG9uIHByaW50ICdmb28nICsgaW5j bHVkZV9ndWFyZC5kZWZpbml0aW9uKCkgKyAnYmFyJyIgXAorCSAiZm9vYmFy IiBcCisJICJndWFyZCBkZWZpbml0aW9uIGlzIGVtcHR5IgorCitnZGJfdGVz dCAicHl0aG9uIHByaW50IGluY2x1ZGVfZ3VhcmQuaW5jbHVkZV90cmFpbCgp XFswXF1cWzBcXSIgXAorCSAiJHNyY2ZpbGUuKiIgXAorCSAiZ3VhcmQgdHJh aWwgaGFzIHNyY2ZpbGUiCisKKyM8Z2RiLk1hY3JvIGluY2x1ZGVfdHJhaWw9 WygnLi9nZGIucHl0aG9uL3B5LW1hY3JvLmMnLCA4KSwgKCcuL2dkYi5weXRo b24vcHktbWFjcm8uYycsIDQzKV0gRk9PPSJoZWxsbyI+DQorZ2RiX3Rlc3Qg InB5dGhvbiBwcmludCBpbmNsdWRlX2d1YXJkIiBcCisiPGdkYlwuTWFjcm8g REVGX01BQ1JPUyBpbmNsdWRlX3RyYWlsPVxcXFtcXFwoJyRzcmNkaXIvJHN1 YmRpci8kc3JjZmlsZScsIFxbMC05XF0rXFxcKS4qXFxcXT4iIFwKKyJndWFy ZCBzdHJpbmcgcmVwIgorCitnZGJfcHlfdGVzdF9zaWxlbnRfY21kICJweXRo b24gbWFjcm9zLmFwcGVuZChpbmNsdWRlX2d1YXJkKSIgXAorCQkgICAgICAg ImFkZCB0byBtYWNyb3MgbGlzdCIgXAorCQkgICAgICAgMAorCitnZGJfcHlf dGVzdF9zaWxlbnRfY21kICJweXRob24gZm9vID0gaGVyZV9tYWNybyhcIkZP T1wiKSIgXAorCQkgICAgICAgImdldCBGT08gbWFjcm8gIzEiIFwKKwkJICAg ICAgIDEKKworZ2RiX3Rlc3QgInB5dGhvbiBwcmludCBmb28ubmFtZSgpIiBc CisJICJGT08iIFwKKwkgIkZPTyBtYWNybyAjMSBuYW1lIgorCitnZGJfdGVz dCAicHl0aG9uIHByaW50IGZvby5pc19mdW5jdGlvbl9saWtlKCkiIFwKKwkg IkZhbHNlIiBcCisJICJGT08gbWFjcm8gIzEgaXNudCBmdW5jdGlvbiBsaWtl IgorCitnZGJfdGVzdCAicHl0aG9uIHByaW50IGZvby5hcmd2KCkiIFwKKwkg Ik5vbmUiIFwKKwkgIkZPTyBtYWNybyAjMSBoYXMgbm8gYXJncyIKKworZ2Ri X3Rlc3QgInB5dGhvbiBwcmludCBmb28uZGVmaW5pdGlvbigpIiBcCisJICJc ImhlbGxvXCIiIFwKKwkgIkZPTyBtYWNybyAjMSBkZWZpbml0aW9uIGlzIFwi aGVsbG9cIiIKKworZ2RiX3Rlc3QgInB5dGhvbiBwcmludCBpbmNsdWRlX2d1 YXJkLmluY2x1ZGVfdHJhaWwoKVxbMFxdXFswXF0iIFwKKwkgIiRzcmNmaWxl LioiIFwKKwkgIkZPTyBtYWNybyAjMSBoYXMgc3JjZmlsZSIKKworZ2RiX3Rl c3QgInB5dGhvbiBwcmludCBmb28iIFwKKyI8Z2RiXC5NYWNybyBGT089XCJo ZWxsb1wiIGluY2x1ZGVfdHJhaWw9XFxcW1xcXCgnJHNyY2Rpci8kc3ViZGly LyRzcmNmaWxlJywgXFswLTlcXStcXFwpLipcXFxdPiIgXAorIkZPTyBtYWNy byAjMSBzdHJpbmcgcmVwIgorCitnZGJfcHlfdGVzdF9zaWxlbnRfY21kICJw eXRob24gbWFjcm9zLmFwcGVuZChmb28pIiBcCisJCSAgICAgICAiYWRkIHRv IG1hY3JvcyBsaXN0IiBcCisJCSAgICAgICAwCisKK2dkYl90ZXN0ICJuZXh0 IiAiIiAiIgorZ2RiX3B5X3Rlc3Rfc2lsZW50X2NtZCAicHl0aG9uIGZvbyA9 IGhlcmVfbWFjcm8oXCJGT09cIikiIFwKKwkJICAgICAgICJnZXQgRk9PIG1h Y3JvICMyIiBcCisJCSAgICAgICAxCisKK2dkYl90ZXN0ICJweXRob24gcHJp bnQgZm9vLm5hbWUoKSIgXAorCSAiRk9PIiBcCisJICJGT08gbWFjcm8gIzIg bmFtZSIKKworZ2RiX3Rlc3QgInB5dGhvbiBwcmludCBmb28uaXNfZnVuY3Rp b25fbGlrZSgpIiBcCisJICJGYWxzZSIgXAorCSAiRk9PIG1hY3JvICMyIGlz bnQgZnVuY3Rpb24gbGlrZSIKKworZ2RiX3Rlc3QgInB5dGhvbiBwcmludCBm b28uYXJndigpIiBcCisJICJOb25lIiBcCisJICJGT08gbWFjcm8gIzIgaGFz IG5vIGFyZ3MiCisKK2dkYl90ZXN0ICJweXRob24gcHJpbnQgZm9vLmRlZmlu aXRpb24oKSIgXAorCSAiXCIgXCIiIFwKKwkgIkZPTyBtYWNybyAjMiBkZWZp bml0aW9uIGlzIFwiIFwiIgorCitnZGJfdGVzdCAicHl0aG9uIHByaW50IGZv by5pbmNsdWRlX3RyYWlsKClcWzBcXVxbMFxdIiBcCisJICIkc3JjZmlsZS4q IiBcCisJICJGT08gbWFjcm8gIzIgaGFzIHNyY2ZpbGUiCisKK2dkYl90ZXN0 ICJweXRob24gcHJpbnQgZm9vIiBcCisiPGdkYlwuTWFjcm8gRk9PPVwiIFwi IGluY2x1ZGVfdHJhaWw9XFxcW1xcXCgnJHNyY2Rpci8kc3ViZGlyLyRzcmNm aWxlJywgXFswLTlcXStcXFwpLipcXFxdPiIgXAorIkZPTyBtYWNybyAjMiBz dHJpbmcgcmVwIgorCitnZGJfcHlfdGVzdF9zaWxlbnRfY21kICJweXRob24g bWFjcm9zLmFwcGVuZChmb28pIiBcCisJCSAgICAgICAiYWRkIHRvIG1hY3Jv cyBsaXN0IiBcCisJCSAgICAgICAwCisKK2dkYl90ZXN0ICJuZXh0IiAiIiAi IgorZ2RiX3B5X3Rlc3Rfc2lsZW50X2NtZCAicHl0aG9uIGZvbyA9IGhlcmVf bWFjcm8oXCJGT09cIikiIFwKKwkJICAgICAgICJnZXQgRk9PIG1hY3JvICMz IiBcCisJCSAgICAgICAxCitnZGJfdGVzdCAicHl0aG9uIHByaW50IGZvby5u YW1lKCkiIFwKKwkgIkZPTyIgXAorCSAiRk9PIG1hY3JvICMzIG5hbWUiCisK K2dkYl90ZXN0ICJweXRob24gcHJpbnQgZm9vLmlzX2Z1bmN0aW9uX2xpa2Uo KSIgXAorCSAiVHJ1ZSIgXAorCSAiRk9PIG1hY3JvICMzIGlzIGZ1bmN0aW9u IGxpa2UiCisKK2dkYl90ZXN0ICJweXRob24gcHJpbnQgZm9vLmFyZ3YoKSIg XAorCSAiXFxcWydhJywgJ2InXFxcXSIgXAorCSAiRk9PIG1hY3JvICMzIGhh cyBhcmdzIgorCitnZGJfdGVzdCAicHl0aG9uIHByaW50ICdmb28nICsgZm9v LmRlZmluaXRpb24oKSArICdiYXInIiBcCisJICJmb29iYXIiIFwKKwkgIkZP TyBtYWNybyAjMyBkZWZpbml0aW9uIGlzIGVtcHR5IgorCitnZGJfdGVzdCAi cHl0aG9uIHByaW50IGluY2x1ZGVfZ3VhcmQuaW5jbHVkZV90cmFpbCgpXFsw XF1cWzBcXSIgXAorCSAiJHNyY2ZpbGUuKiIgXAorCSAiRk9PIG1hY3JvICMz IGhhcyBzcmNmaWxlIgorCitnZGJfdGVzdCAicHl0aG9uIHByaW50IGZvbyIg XAorIjxnZGJcLk1hY3JvIEZPT1xcXChhLCBiXFxcKSBpbmNsdWRlX3RyYWls PVxcXFtcXFwoJyRzcmNkaXIvJHN1YmRpci8kc3JjZmlsZScsIFxbMC05XF0r XFxcKS4qXFxcXT4iIFwKKyJGT08gbWFjcm8gIzMgc3RyaW5nIHJlcCIKKwor Z2RiX3B5X3Rlc3Rfc2lsZW50X2NtZCAicHl0aG9uIG1hY3Jvcy5hcHBlbmQo Zm9vKSIgXAorCQkgICAgICAgImFkZCB0byBtYWNyb3MgbGlzdCIgXAorCQkg ICAgICAgMAorZ2RiX3Rlc3QgIm5leHQiICIiICIiCitnZGJfdGVzdCAibmV4 dCIgIiIgIiIKK2dkYl90ZXN0ICJuZXh0IiAiIiAiIgorZ2RiX3B5X3Rlc3Rf c2lsZW50X2NtZCAicHl0aG9uIGZvbyA9IGhlcmVfbWFjcm8oXCJGT09cIiki IFwKKwkJICAgICAgICJnZXQgRk9PIG1hY3JvICM0IiBcCisJCSAgICAgICAx CitnZGJfdGVzdCAicHl0aG9uIHByaW50IGZvbyIgXAorCSAiTm9uZSIgXAor CSAidGhlcmUgaXMgbm8gRm9vIG1hY3JvICM0IgorCitnZGJfdGVzdCAibmV4 dCIgIiIgIiIKK2dkYl9weV90ZXN0X3NpbGVudF9jbWQgInB5dGhvbiBmb28g PSBoZXJlX21hY3JvKFwiRk9PXCIpIiBcCisJCSAgICAgICAiZ2V0IEZPTyBt YWNybyAjNSIgXAorCQkgICAgICAgMQorCitnZGJfdGVzdCAicHl0aG9uIHBy aW50IGZvby5uYW1lKCkiIFwKKwkgIiIgXAorCSAiRk9PIG1hY3JvICM1IG5h bWUiCisKK2dkYl90ZXN0ICJweXRob24gcHJpbnQgZm9vLmlzX2Z1bmN0aW9u X2xpa2UoKSIgXAorCSAiVHJ1ZSIgXAorCSAiRk9PIG1hY3JvICM1IGlzIGZ1 bmN0aW9uIGxpa2UiCisKK2dkYl90ZXN0ICJweXRob24gcHJpbnQgZm9vLmFy Z3YoKSIgXAorCSAiXFxcWydhJ1xcXF0iIFwKKwkgIkZPTyBtYWNybyAjNSBo YXMgYXJncyIKKworZ2RiX3Rlc3QgInB5dGhvbiBwcmludCBmb28uZGVmaW5p dGlvbigpIiBcCisJICJmb28gPSBhIiBcCisJICJGT08gbWFjcm8gIzUgZGVm aW5pdGlvbiBvayIKKworZ2RiX3Rlc3QgInB5dGhvbiBwcmludCBpbmNsdWRl X2d1YXJkLmluY2x1ZGVfdHJhaWwoKVxbMFxdXFswXF0iIFwKKwkgIiRzcmNm aWxlLioiIFwKKwkgIkZPTyBtYWNybyAjNSBoYXMgc3JjZmlsZSIKKworZ2Ri X3Rlc3QgInB5dGhvbiBwcmludCBmb28iIFwKKyI8Z2RiXC5NYWNybyBGT09c XFwoYVxcXCk9Zm9vID0gYSBpbmNsdWRlX3RyYWlsPVxcXFtcXFwoJyRzcmNk aXIvJHN1YmRpci8kc3JjZmlsZScsIFxbMC05XF0rXFxcKS4qXFxcXT4iIFwK KyJGT08gbWFjcm8gIzUgc3RyaW5nIHJlcCIKK2dkYl9weV90ZXN0X3NpbGVu dF9jbWQgInB5dGhvbiBtYWNyb3MuYXBwZW5kKGZvbykiIFwKKwkJICAgICAg ICJhZGQgdG8gbWFjcm9zIGxpc3QiIFwKKwkJICAgICAgIDAKKworIyB0aGlz IGNvdWxkIGZpbmQgc29tZSByZWYgY291bnQgYnVncyBpZiB0aGV5IHdlcmUg dG8gaGFwcGVuIGZvciBhIHNpbmdsZXRvbi4KK2dkYl9weV90ZXN0X211bHRp cGxlICJydW4gbWFjcm9zIGEgY291cGxlIG9mIHRpbWVzIiBcCisgICJweXRo b24iICIiIFwKKyAgImMgPSAwIiAiIiBcCisgICJ3aGlsZSBjID4gMzoiICIi IFwKKyAgIiAgYyA9IGMgKyAxIiAiIiBcCisgICIgIGZvciBtYWNybyBpbiBv YmpmaWxlLnN5bXRhYi5tYWNyb3MoKToiICIiIFwKKyAgIiAgICBtYWNyby5u YW1lKCkiICIiIFwKKyAgIiAgICBtYWNyby5pc19mdW5jdGlvbl9saWtlKCki ICIiIFwKKyAgIiAgICBtYWNyby5hcmd2KCkiICIiIFwKKyAgIiAgICBtYWNy by5pbmNsdWRlX3BhdGgoKSIgIiIgXAorICAiICAgIG1hY3JvLmRlZmluaXRp b24oKSIgIiIgXAorICAiICAgIHN0cihtYWNybykiICIiIFwKKyAgIiAgICBo YXNoKG1hY3JvKSIgIiIgXAorICAiZW5kIiAiIgorCitnZGJfcHlfdGVzdF9t dWx0aXBsZSAiZmluZCBzZWxlY3RlZCBtYWNyb3MgaW4gdGhlIGJpZyBsaXN0 IG9mIG1hY3JvcyIgXAorICAicHl0aG9uIiAiIiBcCisgICJzZXQxID0gc2V0 KG9iamZpbGUuc3ltdGFiLm1hY3JvcygpKSIgIiIgXAorICAic2V0MiA9IHNl dChtYWNyb3MpIiAiIiBcCisgICJpbnRlcnNlY3QgPSAoc2V0MSAmIHNldDIp IiAiIiBcCisgICJzZXQzID0gc2V0KGZpbHRlcihsYW1iZGEoeCk6IHgubmFt ZSgpID09IFwiRk9PXCIsIG9iamZpbGUuc3ltdGFiLm1hY3JvcygpKSkiICIi IFwKKyAgImludGVyc2VjdDIgPSAoc2V0MyAmIHNldDIpIiAiIiBcCisgICJw cmludCBcInNldDJcIiwgbWFwKGxhbWJkYSh4KTogeC5uYW1lKCksIHNldDIp IiAiIiBcCisgICJwcmludCBcInNldDNcIiwgbWFwKGxhbWJkYSh4KTogeC5u YW1lKCksIHNldDMpIiAiIiBcCisgICJwcmludCBcImludGVyc2VjdFwiLCBt YXAobGFtYmRhKHgpOiB4Lm5hbWUoKSwgaW50ZXJzZWN0KSIgIiIgXAorICAi cHJpbnQgXCJpbnRlcnNlY3QyXCIsIG1hcChsYW1iZGEoeCk6IHgubmFtZSgp LCBpbnRlcnNlY3QyKSIgIiIgXAorICAicHJpbnQgXCJzZXQyIC0gaW50ZXJz ZWN0XCIsIG1hcChsYW1iZGEoeCk6IHgubmFtZSgpLCBzZXQyIC0gaW50ZXJz ZWN0KSIgIiIgXAorICAicHJpbnQgXCJpbnRlcnNlY3QgLSBzZXQyXCIsIG1h cChsYW1iZGEoeCk6IHgubmFtZSgpLCBpbnRlcnNlY3QgLSBzZXQyKSIgIiIg XAorICAicHJpbnQgXCJzZXQyIC0gaW50ZXJzZWN0MlwiLCBtYXAobGFtYmRh KHgpOiB4Lm5hbWUoKSwgc2V0MiAtIGludGVyc2VjdDIpIiAiIiBcCisgICJw cmludCBcImludGVyc2VjdDIgLSBzZXQyXCIsIG1hcChsYW1iZGEoeCk6IHgu bmFtZSgpLCBpbnRlcnNlY3QyIC0gc2V0MikiICIiIFwKKyAgImVuZCIgIiIK KworZ2RiX3Rlc3QgInB5dGhvbiBwcmludCBsZW4oc2V0MikiICI1IiAibWFj cm8gc2V0IGxlbmd0aCA1IgorZ2RiX3Rlc3QgInB5dGhvbiBwcmludCBsZW4o c2V0MSkgPiBsZW4oc2V0MikiICJUcnVlIiAiYWxsIG1hY3JvcyBpcyBsb25n ZXIuIgorZ2RiX3Rlc3QgInB5dGhvbiBwcmludCBzZXQxID49IHNldDIiICJU cnVlIiAibWFjcm8gc2V0MiBpcyBhIHN1YnNldCIKK2dkYl90ZXN0ICJweXRo b24gcHJpbnQgbGVuKGludGVyc2VjdCAtIHNldDIpLCBsZW4oc2V0MiAtIGlu dGVyc2VjdCkiIFwKKwkgIjAgMCIgXAorCSAibWFjcm8gc2V0IGludGVyc2Vj dGlvbiBlcXVhbGl0eSIKK2dkYl90ZXN0ICJweXRob24gcHJpbnQgbGVuKGlu dGVyc2VjdDIgLSBzZXQyKSIgXAorCSAiMCIgXAorCSAibWFjcm8gc2V0IGlu dGVyc2VjdGlvbiBlcXVhbGl0eSAyIgorZ2RiX3Rlc3QgInB5dGhvbiBwcmlu dCBsZW4oc2V0MiAtIGludGVyc2VjdDIpLCAoc2V0MiAtIGludGVyc2VjdDIp LnBvcCgpIiBcCisJICIxIDxnZGIuTWFjcm8gREVGX01BQ1JPUy4qPiIgXAor CSAibWFjcm8gc2V0IGludGVyc2VjdGlvbiAzIgo= --20cf30563ed9f8b90e04aa999794--