From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 29952 invoked by alias); 2 Jan 2012 05:01:28 -0000 Received: (qmail 29944 invoked by uid 22791); 2 Jan 2012 05:01:24 -0000 X-SWARE-Spam-Status: No, hits=-2.8 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,RCVD_IN_DNSWL_LOW,RP_MATCHES_RCVD,TW_BJ,TW_YP X-Spam-Check-By: sourceware.org Received: from mail-qy0-f169.google.com (HELO mail-qy0-f169.google.com) (209.85.216.169) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 02 Jan 2012 05:00:58 +0000 Received: by qcsd17 with SMTP id d17so10463628qcs.0 for ; Sun, 01 Jan 2012 21:00:56 -0800 (PST) Received: by 10.229.78.141 with SMTP id l13mr17373436qck.120.1325480455742; Sun, 01 Jan 2012 21:00:55 -0800 (PST) MIME-Version: 1.0 Received: by 10.229.78.141 with SMTP id l13mr17373432qck.120.1325480455594; Sun, 01 Jan 2012 21:00:55 -0800 (PST) Received: by 10.224.72.210 with HTTP; Sun, 1 Jan 2012 21:00:55 -0800 (PST) Date: Mon, 02 Jan 2012 05:01:00 -0000 Message-ID: Subject: [RFC] A new command 'grep' From: Siva Chandra To: gdb-patches@sourceware.org X-System-Of-Record: true Content-Type: multipart/mixed; boundary=002354470b5cb6629004b584774e 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: 2012-01/txt/msg00018.txt.bz2 --002354470b5cb6629004b584774e Content-Type: text/plain; charset=ISO-8859-1 Content-length: 2163 Hi all, Attached is a patch which implements a 'grep' command using the GDB Python API. The idea behind the 'grep' command is as follows. We often have deep data structures and are probably interested in some one particular field or value embedded somewhere deep in that data structure. For such cases, instead of typing the complete expression for the field, we can use the 'grep' command to lookup the field or value of interest. A simple example is as follows: struct SimpleStruct { int int_val; double double_val; }; struct SimpleStruct ss; ss.int_val = 10; ss.double_val = 1.11; Examples of grepping for fields: (gdb) grep int ss ss.int_val = (int) 10 (gdb) grep dou ss ss.double_val = (double) 1.11 Examples of grepping for values: (gdb) grep 10 ss ss.int_val = (int) 10 (gdb) grep "1\\." ss ss.double_val = (double) 1.11 In general, one can grep for any matching regular expression in any valid expression. Few points to note: 1. To restrict searches to values or fields, one can use the sub commands 'grep value' or 'grep field' respectively. 2. The value grep looks for matches in scalar and string values only. 3. The search goes as deep as the data structure of the expression with one exception; It does not grep through union values unless it finds a field selector for that union value. A field selector is a user defined class with a specific interface which helps the grep command select the appropriate field of the union to grep through. The patch includes a field selector, which selects all fields, as an example. Thanks, Siva Chandra 2012-01-02 Siva Chandra New command 'grep' which helps to grep through field names and values of expressions in scope. * data-directory/Makefile.in: Add gdb/command/grep.py * python/lib/gdb/command/grep.py: Implemention of the 'grep' command using the GDB Python API. * testsuite/gdb.python/Makefile.in: Add py-grep to EXECUTABLES * testsuite/gdb.python/py-grep.c: C program used for testing the new 'grep' command. * testsuite/gdb-python/py-grep.exp: Tests for the new 'grep' command. --002354470b5cb6629004b584774e Content-Type: text/plain; charset=US-ASCII; name="grep_command_patch_v1.txt" Content-Disposition: attachment; filename="grep_command_patch_v1.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gwx0sj9k0 Content-length: 33148 ZGlmZiAtcnVwTiBzcmMvZ2RiL2RhdGEtZGlyZWN0b3J5L01ha2VmaWxlLmlu IHNyY19ncmVwL2dkYi9kYXRhLWRpcmVjdG9yeS9NYWtlZmlsZS5pbgotLS0g c3JjL2dkYi9kYXRhLWRpcmVjdG9yeS9NYWtlZmlsZS5pbgkyMDExLTA4LTE3 IDE2OjExOjIwLjAwMDAwMDAwMCArMDUzMAorKysgc3JjX2dyZXAvZ2RiL2Rh dGEtZGlyZWN0b3J5L01ha2VmaWxlLmluCTIwMTEtMTItMTEgMTc6Mzg6NDAu ODUxNzY2NDY3ICswNTMwCkBAIC01OCw3ICs1OCw4IEBAIFBZVEhPTl9GSUxF UyA9IFwKIAlnZGIvcHJvbXB0LnB5IFwKIAlnZGIvY29tbWFuZC9fX2luaXRf Xy5weSBcCiAJZ2RiL2NvbW1hbmQvcHJldHR5X3ByaW50ZXJzLnB5IFwKLQln ZGIvY29tbWFuZC9wcm9tcHQucHkKKwlnZGIvY29tbWFuZC9wcm9tcHQucHkg XAorCWdkYi9jb21tYW5kL2dyZXAucHkKIAogRkxBR1NfVE9fUEFTUyA9IFwK IAkicHJlZml4PSQocHJlZml4KSIgXApkaWZmIC1ydXBOIHNyYy9nZGIvcHl0 aG9uL2xpYi9nZGIvY29tbWFuZC9ncmVwLnB5IHNyY19ncmVwL2dkYi9weXRo b24vbGliL2dkYi9jb21tYW5kL2dyZXAucHkKLS0tIHNyYy9nZGIvcHl0aG9u L2xpYi9nZGIvY29tbWFuZC9ncmVwLnB5CTE5NzAtMDEtMDEgMDU6MzA6MDAu MDAwMDAwMDAwICswNTMwCisrKyBzcmNfZ3JlcC9nZGIvcHl0aG9uL2xpYi9n ZGIvY29tbWFuZC9ncmVwLnB5CTIwMTItMDEtMDIgMTA6MjA6MDcuNTY1OTM2 OTI2ICswNTMwCkBAIC0wLDAgKzEsNDMwIEBACisjIEdEQiAnZ3JlcCcgY29t bWFuZC4KKyMgQ29weXJpZ2h0IChDKSAyMDEyIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cisj IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2Us IG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisj CisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor IyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSBy ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUg PGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisiIiJJbXBsZW1l bnRhdGlvbiBvZiB0aGUgR0RCICdncmVwJyBjb21tYW5kIHVzaW5nIHRoZSBH REIgUHl0aG9uIEFQSSIiIgorCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBk ZXF1ZQoraW1wb3J0IGdkYgoraW1wb3J0IHJlCisKK2NsYXNzIEdyZXBCYXNl KG9iamVjdCk6CisgICAgIiIiQSBiYXNlIGNsYXNzIGZvciBjbGFzc2VzIHdo aWNoIGNhbiBncmVwIHRocm91Z2ggdmFsdWVzIG9mIGEgcGFydGljdWxhcgor ICAgIHR5cGUuIFNlZSBiZWxvdyBmb3IgaW1wbGVtZW50YXRpb24gb2YgdGhl IGRpZmZlcmVudCBzdWIgY2xhc3Nlcy4KKyAgICAiIiIKKworICAgIGRlZiBn cmVwKHNlbGYsIHJlZ2V4LCBuYW1lLCBwYXRoLCB2YWx1ZSwgZ3JlcF9maWVs ZCwgZ3JlcF92YWx1ZSk6CisgICAgICAgICIiIlRoZSBtZXRob2Qgd2hpY2gg c2hvdWxkIHBlcmZvcm0gdGhlIGFjdHVhbCBncmVwIGFjdGlvbi4KKyAgICAg ICAgVGhlIHN1YiBjbGFzc2VzIHNob3VsZCBvdmVycmlkZSB0aGlzIG1ldGhv ZCB0byByZWZsZWN0IHRoZSB0eXBlIHNwZWNmaWMKKyAgICAgICAgZ3JlcCBv cGVyYXRpb24uCisKKyAgICAgICAgQXJndW1lbnRzOgorICAgICAgICAgICAg cmVnZXg6IFRoZSByZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggbmFtZXMu CisgICAgICAgICAgICBuYW1lOiBUaGUgbmFtZSB3aGljaCBoYXMgdG8gYmUg bWF0Y2hlZCB3aXRoIHRoZSByZWd1bGFyIGV4cHJlc3Npb24uCisgICAgICAg ICAgICBwYXRoOiBUaGUgcGF0aCAoYXMgaW4gdGhlIGV4cHJlc3Npb24pIHRv IHRoZSBjdXJyZW50IHZhbHVlLgorICAgICAgICAgICAgdmFsdWU6IFRoZSB2 YWx1ZSB0byBiZSBncmVwcGVkLgorICAgICAgICAgICAgZ3JlcF9maWVsZDog QSBib29sZWFuIHZhbHVlIHRvIGluZGljYXRlIHdoZXRoZXIgdGhlIGZpZWxk IG5hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZCBiZSBtYXRj aGVkIG9yIG5vdC4KKyAgICAgICAgICAgIGdyZXBfdmFsdWU6IEEgYm9vbGVh biB2YWx1ZSB0byBpbmRpY2F0ZSB3aGV0aGVyIHRoZSB2YWx1ZSBzaG91bGQg YmUKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZWQgb3Igbm90Lgor ICAgICAgICAiIiIKKyAgICAgICAgcHJpbnQgIkNhbm5vdCB5ZXQgZ3JlcCB0 aHJvdWdoIHZhbHVlcyBvZiB0eXBlICVzLiIgJSBzdHIodmFsdWUudHlwZSkK KworCitjbGFzcyBHcmVwU2NhbGFyKEdyZXBCYXNlKToKKyAgICAiIiJBIGNs YXNzIHRvIGdyZXAgdGhyb3VnaCB2YWx1ZXMgd2hpY2ggYXJlIG9mIGEgc2Nh bGFyIHR5cGUuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZ3JlcF9j b21tYW5kKToKKyAgICAgICAgIiIiCisgICAgICAgIEFyZ3VtZW50czoKKyAg ICAgICAgICAgIGdyZXBfY29tbWFuZDogVGhlIGNvbW1hbmQgb2JqZWN0IHdo aWNoIHdhbnRzIHRvIGRvIHRoZSBncmVwCisgICAgICAgICAgICAgICAgICAg ICAgICAgIG9wZXJhdGlvbi4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYu X2dyZXBfY29tbWFuZCA9IGdyZXBfY29tbWFuZAorCisgICAgZGVmIGdyZXAo c2VsZiwgcmVnZXgsIG5hbWUsIHBhdGgsIHZhbHVlLCBncmVwX2ZpZWxkLCBn cmVwX3ZhbHVlKToKKyAgICAgICAgIiIiIFRoZSBtZXRob2Qgd2hpY2ggZ3Jl cHMgdGhyb3VnaCB2YWx1ZXMgd2hpY2ggYXJlIG9mIGEgc2NhbGFyIHR5cGUu CisgICAgICAgIFNlZSBHcmVwQmFzZS5ncmVwIGZvciBtb3JlIGluZm9ybWF0 aW9uLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgKChncmVwX2ZpZWxkIGFu ZCByZS5zZWFyY2gocmVnZXgsIG5hbWUpKSBvcgorICAgICAgICAgICAgKGdy ZXBfdmFsdWUgYW5kIHJlLnNlYXJjaChyZWdleCwgc3RyKHZhbHVlKSkpKToK KyAgICAgICAgICAgIHByaW50ICIlcyA9ICglcykgJXMiICUgKHBhdGgsIHN0 cih2YWx1ZS50eXBlKSwgc3RyKHZhbHVlKSkKKworCitjbGFzcyBHcmVwUG9p bnRlcihHcmVwQmFzZSk6CisgICAgIiIiQSBjbGFzcyB0byBncmVwIHRocm91 Z2ggdmFsdWVzIHdoaWNoIGFyZSBvZiBhIHBvaW50ZXIgdHlwZS4iIiIKKwor ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBncmVwX2NvbW1hbmQpOgorICAgICAg ICAiIiIKKyAgICAgICAgQXJndW1lbnRzOgorICAgICAgICAgICAgZ3JlcF9j b21tYW5kOiBUaGUgY29tbWFuZCBvYmplY3Qgd2hpY2ggd2FudHMgdG8gZG8g dGhlIGdyZXAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9u LgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fZ3JlcF9jb21tYW5kID0g Z3JlcF9jb21tYW5kCisKKyAgICBkZWYgZ3JlcChzZWxmLCByZWdleCwgbmFt ZSwgcGF0aCwgdmFsdWUsIGdyZXBfZmllbGQsIGdyZXBfdmFsdWUpOgorICAg ICAgICAiIiIgVGhlIG1ldGhvZCB3aGljaCBncmVwcyB0aHJvdWdoIHZhbHVl cyB3aGljaCBhcmUgb2YgYSBwb2ludGVyIHR5cGUuCisgICAgICAgIFNlZSBH cmVwQmFzZS5ncmVwIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAi IiIKKyAgICAgICAgaWYgc3RyKHZhbHVlLnR5cGUudGFyZ2V0KCkudW5xdWFs aWZpZWQoKSkgPT0gImNoYXIiOgorICAgICAgICAgICAgdHJ5OgorICAgICAg ICAgICAgICAgIHN0cl92YWwgPSB2YWx1ZS5zdHJpbmcoKQorICAgICAgICAg ICAgICAgIGlmICgoZ3JlcF9maWVsZCBhbmQgcmUuc2VhcmNoKHJlZ2V4LCBu YW1lKSkgb3IKKyAgICAgICAgICAgICAgICAgICAgKGdyZXBfdmFsdWUgYW5k IHJlLnNlYXJjaChyZWdleCwgc3RyX3ZhbCkpKToKKyAgICAgICAgICAgICAg ICAgICAgcHJpbnQgIiVzID0gKCVzKSBcIiVzXCIiICUgKHBhdGgsIHN0cih2 YWx1ZS50eXBlKSwgc3RyX3ZhbCkKKyAgICAgICAgICAgICAgICAgICAgcmV0 dXJuCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgcGFz cworCisgICAgICAgIGlmIGdyZXBfZmllbGQgYW5kIHJlLnNlYXJjaChyZWdl eCwgbmFtZSk6CisgICAgICAgICAgICBwcmludCAiJXMgPSAoJXMpICVzIiAl IChwYXRoLCBzdHIodmFsdWUudHlwZSksIHN0cih2YWx1ZSkpCisKKyAgICAg ICAgZGVyZWZfdmFsdWUgPSBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAg ICAgIGRlcmVmX3ZhbHVlID0gdmFsdWUuZGVyZWZlcmVuY2UoKQorICAgICAg ICAgICAgc3RyKGRlcmVmX3ZhbHVlKQorICAgICAgICBleGNlcHQgUnVudGlt ZUVycm9yOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5f Z3JlcF9jb21tYW5kLmdyZXAoCisgICAgICAgICAgICByZWdleCwgbmFtZSwg IigqJXMpIiAlIHBhdGgsIGRlcmVmX3ZhbHVlLCBncmVwX2ZpZWxkLCBncmVw X3ZhbHVlKQorCisKK2NsYXNzIEdyZXBBcnJheShHcmVwQmFzZSk6CisgICAg IiIiQSBjbGFzcyB0byBncmVwIHRocm91Z2ggdmFsdWVzIHdoaWNoIGFyZSBv ZiBhbiBhcnJheSB0eXBlLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYs IGdyZXBfY29tbWFuZCk6CisgICAgICAgICIiIgorICAgICAgICBBcmd1bWVu dHM6CisgICAgICAgICAgICBncmVwX2NvbW1hbmQ6IFRoZSBjb21tYW5kIG9i amVjdCB3aGljaCB3YW50cyB0byBkbyB0aGUgZ3JlcAorICAgICAgICAgICAg ICAgICAgICAgICAgICBvcGVyYXRpb24uCisgICAgICAgICIiIgorICAgICAg ICBzZWxmLl9ncmVwX2NvbW1hbmQgPSBncmVwX2NvbW1hbmQKKworICAgIGRl ZiBncmVwKHNlbGYsIHJlZ2V4LCBuYW1lLCBwYXRoLCB2YWx1ZSwgZ3JlcF9m aWVsZCwgZ3JlcF92YWx1ZSk6CisgICAgICAgICIiIiBUaGUgbWV0aG9kIHdo aWNoIGdyZXBzIHRocm91Z2ggdmFsdWVzIHdoaWNoIGFyZSBvZiBhbiBhcnJh eSB0eXBlLgorICAgICAgICBTZWUgR3JlcEJhc2UuZ3JlcCBmb3IgbW9yZSBp bmZvcm1hdGlvbi4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIGdyZXBfZmll bGQgYW5kIHJlLnNlYXJjaChyZWdleCwgbmFtZSk6CisgICAgICAgICAgICBw cmludCAoIiVzID0gPGFycmF5IG9mIGVsZW1lbnRzIG9mIHR5cGUgJyVzJz4i ICUKKyAgICAgICAgICAgICAgICAgICAocGF0aCwgc3RyKHZhbHVlLnR5cGUu dGFyZ2V0KCkpKSkKKworICAgICAgICBpZiBncmVwX3ZhbHVlOgorICAgICAg ICAgICAgYXJyYXlfcmFuZ2UgPSB2YWx1ZS50eXBlLnJhbmdlKCkKKyAgICAg ICAgICAgIGZvciBpbmRleCBpbiByYW5nZShhcnJheV9yYW5nZVswXSwgYXJy YXlfcmFuZ2VbMV0gKyAxKToKKyAgICAgICAgICAgICAgICBzZWxmLl9ncmVw X2NvbW1hbmQuZ3JlcChyZWdleCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBuYW1lLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICIlc1slZF0iICUgKHBhdGgsIGluZGV4KSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1 ZVtpbmRleF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgVHJ1ZSkKKworCitjbGFzcyBHcmVwU3RydWN0KEdyZXBCYXNl KToKKyAgICAiIiJBIGNsYXNzIHRvIGdyZXAgdGhyb3VnaCB2YWx1ZXMgd2hp Y2ggYXJlIG9mIGEgc3RydWN0IHR5cGUuIiIiCisKKyAgICBkZWYgX19pbml0 X18oc2VsZiwgZ3JlcF9jb21tYW5kKToKKyAgICAgICAgIiIiCisgICAgICAg IEFyZ3VtZW50czoKKyAgICAgICAgICAgIGdyZXBfY29tbWFuZDogVGhlIGNv bW1hbmQgb2JqZWN0IHdoaWNoIHdhbnRzIHRvIGRvIHRoZSBncmVwCisgICAg ICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbi4KKyAgICAgICAgIiIi CisgICAgICAgIHNlbGYuX2dyZXBfY29tbWFuZCA9IGdyZXBfY29tbWFuZAor CisgICAgZGVmIGdyZXAoc2VsZiwgcmVnZXgsIG5hbWUsIHBhdGgsIHZhbHVl LCBncmVwX2ZpZWxkLCBncmVwX3ZhbHVlKToKKyAgICAgICAgIiIiIFRoZSBt ZXRob2Qgd2hpY2ggZ3JlcHMgdGhyb3VnaCB2YWx1ZXMgd2hpY2ggYXJlIG9m IGEgc3RydWN0IHR5cGUuCisgICAgICAgIFNlZSBHcmVwQmFzZS5ncmVwIGZv ciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAiIiIKKyAgICAgICAgaWYg Z3JlcF9maWVsZCBhbmQgcmUuc2VhcmNoKHJlZ2V4LCBuYW1lKToKKyAgICAg ICAgICAgIHByaW50ICIlcyA9IDx2YWx1ZSBvZiB0eXBlICclcyc+IiAlIChw YXRoLCBzdHIodmFsdWUudHlwZSkpCisKKyAgICAgICAgZm9yIGZpZWxkIGlu IHZhbHVlLnR5cGUuZmllbGRzKCk6CisgICAgICAgICAgICBzZWxmLl9ncmVw X2NvbW1hbmQuZ3JlcChyZWdleCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGZpZWxkLm5hbWUsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiJXMuJXMiICUgKHBhdGgsIGZpZWxkLm5hbWUp LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVb ZmllbGQubmFtZV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBncmVwX2ZpZWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZ3JlcF92YWx1ZSkKKworCitjbGFzcyBHcmVwVW5pb24oR3Jl cEJhc2UpOgorICAgICIiIkEgY2xhc3MgdG8gZ3JlcCB0aHJvdWdoIHZhbHVl cyB3aGljaCBhcmUgb2YgYSB1bmlvbiB0eXBlLiIiIgorCisgICAgZGVmIF9f aW5pdF9fKHNlbGYsIGdyZXBfY29tbWFuZCk6CisgICAgICAgICIiIgorICAg ICAgICBBcmd1bWVudHM6CisgICAgICAgICAgICBncmVwX2NvbW1hbmQ6IFRo ZSBjb21tYW5kIG9iamVjdCB3aGljaCB3YW50cyB0byBkbyB0aGUgZ3JlcAor ICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24uCisgICAgICAg ICIiIgorICAgICAgICBzZWxmLl9ncmVwX2NvbW1hbmQgPSBncmVwX2NvbW1h bmQKKyAgICAgICAgc2VsZi5fZmllbGRfc2VsZWN0b3JfbGlzdCA9IFsgXQor CisgICAgZGVmIHJlZ2lzdGVyX2ZpZWxkX3NlbGVjdG9yKHNlbGYsIHNlbGVj dG9yKToKKyAgICAgICAgIiIiTWV0aG9kIHdpdGggd2hpY2ggb25lIGNhbiBy ZWdpc3RlciBhIGZpZWxkIHNlbGVjdG9yLgorCisgICAgICAgIEFyZ3VtZW50 czoKKyAgICAgICAgICAgIHNlbGVjdG9yOiBUaGUgZmllbGQgc2VsZWN0b3Iu IEl0IHNob3VsZCBzdXBwb3J0IGEgbWV0aG9kIHdpdGggdGhlCisgICAgICAg ICAgICAgICAgICAgICAgZm9sbG93aW5nIHNpZ25hdHVyZToKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgZ2V0X2ZpZWxkX25hbWVfbWF0Y2hlcih2YWx1 ZSkKKyAgICAgICAgICAgICAgICAgICAgICBUaGUgYXJndW1lbnQgJ3ZhbHVl JyBpcyB0aGUgdW5pb24gdmFsdWUgd2hpY2ggaGFzIHRvIGJlCisgICAgICAg ICAgICAgICAgICAgICAgZ3JlcHBlZC4gVGhlIG1ldGhvZCBzaG91bGQgcmV0 dXJuIGEgcmVndWxhciBleHByZXNzaW9uCisgICAgICAgICAgICAgICAgICAg ICAgd2l0aCB3aGljaCB0aGUgZmllbGQgbmFtZXMgb2YgdGhlIHVuaW9uIGFy ZSBtYXRjaGVkLiBUaGUKKyAgICAgICAgICAgICAgICAgICAgICBncmVwIG1l dGhvZCBncmVwcyB0aHJvdWdoIGEgZmllbGQgb2YgdGhlIHVuaW9uIG9ubHkg aWYKKyAgICAgICAgICAgICAgICAgICAgICB0aGVyZSBpcyBhIG1hdGNoLgor ICAgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUgY2xhc3MgQWxsRmllbGRz U2VsZWN0b3IgYmVsb3cgYXMgYW4gZXhhbXBsZS4KKyAgICAgICAgIiIiCisg ICAgICAgIHNlbGYuX2ZpZWxkX3NlbGVjdG9yX2xpc3QuYXBwZW5kKHNlbGVj dG9yKQorCisgICAgZGVmIGdyZXAoc2VsZiwgcmVnZXgsIG5hbWUsIHBhdGgs IHZhbHVlLCBncmVwX2ZpZWxkLCBncmVwX3ZhbHVlKToKKyAgICAgICAgIiIi IFRoZSBtZXRob2Qgd2hpY2ggZ3JlcHMgdGhyb3VnaCB2YWx1ZXMgd2hpY2gg YXJlIG9mIGEgdW5pb24gdHlwZS4KKyAgICAgICAgU2VlIEdyZXBCYXNlLmdy ZXAgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICIiIgorICAgICAg ICBpZiBncmVwX2ZpZWxkIGFuZCByZS5zZWFyY2gocmVnZXgsIG5hbWUpOgor ICAgICAgICAgICAgcHJpbnQgIiVzID0gPHZhbHVlIG9mIHR5cGUgJyVzJz4i ICUgKHBhdGgsIHN0cih2YWx1ZS50eXBlKSkKKworICAgICAgICBmb3IgZmll bGRfc2VsZWN0b3IgaW4gc2VsZi5fZmllbGRfc2VsZWN0b3JfbGlzdDoKKyAg ICAgICAgICAgIGZpZWxkX21hdGNoZXIgPSBmaWVsZF9zZWxlY3Rvci5nZXRf ZmllbGRfbmFtZV9tYXRjaGVyKHZhbHVlKQorICAgICAgICAgICAgaWYgZmll bGRfbWF0Y2hlcjoKKyAgICAgICAgICAgICAgICBmb3IgZmllbGQgaW4gdmFs dWUudHlwZS5maWVsZHMoKToKKyAgICAgICAgICAgICAgICAgICAgaWYgcmUu c2VhcmNoKGZpZWxkX21hdGNoZXIsIGZpZWxkLm5hbWUpOgorICAgICAgICAg ICAgICAgICAgICAgICAgc2VsZi5fZ3JlcF9jb21tYW5kLmdyZXAocmVnZXgs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBmaWVsZC5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIiVzLiVzIiAlIChwYXRoLCBmaWVsZC5u YW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHZhbHVlW2ZpZWxkLm5hbWVdLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JlcF9maWVsZCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGdyZXBfdmFsdWUpCisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAg ICAgICAgICAgICAgICAKK2NsYXNzIEdyZXBUeXBlZGVmKEdyZXBCYXNlKToK KyAgICAiIiJBIGNsYXNzIHRvIGdyZXAgdGhyb3VnaCB2YWx1ZXMgd2hpY2gg YXJlIG9mIGEgdHlwZWRlZiB0eXBlLiIiIgorCisgICAgZGVmIF9faW5pdF9f KHNlbGYsIGdyZXBfY29tbWFuZCk6CisgICAgICAgICIiIgorICAgICAgICBB cmd1bWVudHM6CisgICAgICAgICAgICBncmVwX2NvbW1hbmQ6IFRoZSBjb21t YW5kIG9iamVjdCB3aGljaCB3YW50cyB0byBkbyB0aGUgZ3JlcAorICAgICAg ICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24uCisgICAgICAgICIiIgor ICAgICAgICBzZWxmLl9ncmVwX2NvbW1hbmQgPSBncmVwX2NvbW1hbmQKKwor ICAgIGRlZiBncmVwKHNlbGYsIHJlZ2V4LCBuYW1lLCBwYXRoLCB2YWx1ZSwg Z3JlcF9maWVsZCwgZ3JlcF92YWx1ZSk6CisgICAgICAgICIiIiBUaGUgbWV0 aG9kIHdoaWNoIGdyZXBzIHRocm91Z2ggdmFsdWVzIHdoaWNoIGFyZSBvZiBh IHR5cGRlZiB0eXBlLgorICAgICAgICBTZWUgR3JlcEJhc2UuZ3JlcCBmb3Ig bW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgIiIiCisgICAgICAgIGJhc2Vf dHlwZV92YWx1ZSA9IHZhbHVlLmNhc3QodmFsdWUudHlwZS5zdHJpcF90eXBl ZGVmcygpKQorICAgICAgICBzZWxmLl9ncmVwX2NvbW1hbmQuZ3JlcCgKKyAg ICAgICAgICAgIHJlZ2V4LCBuYW1lLCBwYXRoLCBiYXNlX3R5cGVfdmFsdWUs IGdyZXBfZmllbGQsIGdyZXBfdmFsdWUpCisKKworY2xhc3MgR3JlcFV0aWxz KG9iamVjdCk6CisgICAgIiIiQSBjbGFzcyBvZiB1dGlsaXRpZXMgZm9yIGlt cGxlbWVudGluZyAnZ3JlcCcgYW5kIGl0J3Mgc3ViIGNvbW1hbmRzLiIiIgor CisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBwYXJzZV9hcmdfc3RyKGFy Z19zdHIpOgorICAgICAgICAiIiJBIGZ1bmN0aW9uIHRvIGhlbHAgcGFyc2Ug dGhlIGFyZ3VtZW50cyB0byAnZ3JlcCcgYW5kIGl0cyBzdWIKKyAgICAgICAg Y29tbWFuZHMuCisKKyAgICAgICAgQXJndW1lbnRzOgorICAgICAgICAgICAg YXJnX3N0cjogVGhlIGFyZ3VtZW50IHN0cmluZyBhcyBwYXNzZWQgdG8gdGhl ICdncmVwJyBvciBpdHMgc3ViCisgICAgICAgICAgICAgICAgICAgICBjb21t YW5kcy4KKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgQSAzLXR1 cGxlIG9mIHRoZSBmb3JtIChyZWdleCwgZXhwciwgdmFsdWUpIHdoZXJlIAor ICAgICAgICAgICAgICBpLiByZWdleCBpcyB0aGUgcmVndWxhciBleHByZXNz aW9uIHBhc3NlZCB0byB0aGUgY29tbWFuZCwKKyAgICAgICAgICAgICBpaS4g ZXhwciBpcyB0aGUgZXhwcmVzc2lvbiB3aG9zZSB2YWx1ZSBoYXMgdG8gYmUg J2dyZXBwZWQnIHdpdGggdGhlCisgICAgICAgICAgICAgICAgIHJlZ2V4LAor ICAgICAgICAgICAgaWlpLiB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhlIGV4 cHJlc3Npb24uCisKKyAgICAgICAgUmFpc2VzOgorICAgICAgICAgICAgZ2Ri LkdkYkVycm9yIGlmIGluc3VmZmljaWVudCBhcmd1bWVudHMgYXJlIHByb3Zp ZGVkIGluIHRoZSBhcmd1bWVudAorICAgICAgICAgICAgc3RyaW5nLCBvciBp ZiB0aGUgZXhwcmVzc2lvbiBnaXZlbiBpbiB0aGUgYXJndW1lbnQgc3RyaW5n IGRvZXMgbm90CisgICAgICAgICAgICBldmFsdWF0ZSB0byBhbnkgdmFsdWUg aW4gdGhlIGN1cnJlbnQgY29udGV4dC4KKyAgICAgICAgIiIiCisgICAgICAg IGFyZ3MgPSBnZGIuc3RyaW5nX3RvX2FyZ3YoYXJnX3N0cikKKyAgICAgICAg aWYgbGVuKGFyZ3MpIDwgMjoKKyAgICAgICAgICAgIHJhaXNlIGdkYi5HZGJF cnJvcigKKyAgICAgICAgICAgICAgICAiRVJST1I6ICdncmVwJyBhbmQgaXRz IHN1YiBjb21tYW5kcyBuZWVkIHR3byBhcmd1bWVudHMuIikKKworICAgICAg ICByZWdleCA9IGFyZ3NbMF0KKyAgICAgICAgZXhwciA9ICIiCisgICAgICAg IGZvciBpIGluIHJhbmdlKDEsIGxlbihhcmdzKSAtIDEpOgorICAgICAgICAg ICAgZXhwciArPSBhcmdzW2ldICsgIiAiCisgICAgICAgIGV4cHIgKz0gYXJn c1tsZW4oYXJncykgLSAxXQorCisgICAgICAgIHZhbHVlID0gTm9uZQorICAg ICAgICB0cnk6CisgICAgICAgICAgICB2YWx1ZSA9IGdkYi5wYXJzZV9hbmRf ZXZhbChleHByKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICByYWlz ZSBnZGIuR2RiRXJyb3IoCisgICAgICAgICAgICAgICAgIkVSUk9SOiAnJXMn IGRvZXMgbm90IGV2YWx1YXRlIHRvIGFueSB2YWx1ZSBpbiB0aGUgY3VycmVu dCAiCisgICAgICAgICAgICAgICAgImNvbnRleHQuIiAlIGV4cHIpCisKKyAg ICAgICAgcmV0dXJuIChyZWdleCwgZXhwciwgdmFsdWUpCisgICAgICAgICAK KworY2xhc3MgR3JlcENvbW1hbmQoZ2RiLkNvbW1hbmQpOgorICAgICIiIkNv bW1hbmQgdG8gJ2dyZXAnIGZvciBmaWVsZCBuYW1lcyBhbmQgdmFsdWVzIGlu IGV4cHJlc3Npb25zLgorCisgICAgVXNhZ2U6IGdyZXAgW09QVElPTl0gUkVH RVggRVhQUgorCisgICAgT1BUSU9OIC0gQW4gb3B0aW9uYWwgYXJndW1lbnQg d2hpY2ggY2FuIGJlIGVpdGhlciAnZmllbGQnIG9yICd2YWx1ZScuCisgICAg SWYgaXQgaXMgJ3ZhbHVlJywgdGhlbiBvbmx5IHZhbHVlcyBhcmUgbWF0Y2hl ZCB3aXRoIHRoZSBSRUdFWC4gSWYgaXQKKyAgICBpcyAnZmllbGQnLCB0aGVu IG9ubHkgZmllbGQgbmFtZXMgYXJlIG1hdGNoZWQgd2l0aCB0aGUgUkVHRVgu CisgICAgICAgICAgCisgICAgUkVHRVggLSBBIHJlZ3VsYXIgZXhwcmVzc2lv biBpbiBkb3VibGUgcXVvdGVzIGlmIGl0IGNvbnRhaW5zIHNwYWNlcy4KKyAg ICBFWFBSIC0gQSB2YWxpZCBleHByZXNzaW9uIGluIHRoZSBjdXJyZW50IHNj b3BlLgorCisgICAgVGhlIGNvbW1hbmQgbG9va3MgZm9yIHZhbHVlcyAob2Yg c2NhbGFyLCBlbnVtIGFuZCBzdHJpbmcgdHlwZXMpIGFuZCBmaWVsZAorICAg IG5hbWVzIG1hdGNoaW5nIHdpdGggdGhlIFJFR0VYLiBJdCBzY2FucyB0aHJv dWdoIHRoZSB2YWx1ZSBvZiBFWFBSIHRvcC1kb3duCisgICAgdG8gbG9vayBm b3IgbWF0Y2hlcy4gIlRvcC1kb3duIiBoZXJlIG1lYW5zIHN0YXJ0aW5nIGZy b20gdGhlIEVYUFIgaXRzZWxmLCB0bworICAgIHRoZSBuYW1lcyBhbmQgdmFs dWVzIG9mIHRoZSBmaWVsZHMgKGlmIGFueSkgb2YgdGhlIHR5cGUgb2YgdGhl IEVYUFIgdmFsdWUsCisgICAgYW5kIHJpZ2h0IGRvd24gdG8gdGhlIGxlYWYg c2NhbGFyIGZpZWxkIG5hbWVzIGFuZCB2YWx1ZXMgb2YgdGhlc2UgZmllbGRz LgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAg ICBzdXBlcihHcmVwQ29tbWFuZCwgc2VsZikuX19pbml0X18obmFtZSA9ICJn cmVwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbW1hbmRfY2xhc3MgPSBnZGIuQ09NTUFORF9EQVRBLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4ID0g VHJ1ZSkKKyAgICAgICAgc2VsZi5pbml0X2VudigpCisKKyAgICBkZWYgaW5p dF9lbnYoc2VsZik6CisgICAgICAgICIiIkluaXRpYWxpemVzIHRoZSBpbnRl cm5hbCBlbnZpcm9ubWVudCBvZiB0aGUgY29tbWFuZC4iIiIKKyAgICAgICAg c2VsZi5fdHlwZV90b19ncmVwZXJfbWFwID0gc2VsZi5fZ2V0X3R5cGVfdG9f Z3JlcGVyX21hcCgpCisgICAgICAgIHNlbGYuX2Jmc19xdWV1ZSA9IGRlcXVl KFsgXSkKKyAgICAgICAKKyAgICBkZWYgcmVnaXN0ZXJfdW5pb25fZmllbGRf c2VsZWN0b3Ioc2VsZiwgZmllbGRfc2VsZWN0b3IpOgorICAgICAgICAiIiJS ZWdpc3RlcnMgYSBmaWVsZCBzZWxlY3RvciB3aXRoIHRoZSB1bmlvbiBncmVw cGVyLgorICAgICAgICBTZWUgR3JlcFVuaW9uLnJlZ2lzdGVyX2ZpZWxkX3Nl bGVjdG9yIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAiIiIKKyAg ICAgICAgc2VsZi5fdHlwZV90b19ncmVwZXJfbWFwW2dkYi5UWVBFX0NPREVf VU5JT05dLnJlZ2lzdGVyX2ZpZWxkX3NlbGVjdG9yKAorICAgICAgICAgICAg ZmllbGRfc2VsZWN0b3IpIAorCisgICAgZGVmIF9nZXRfdHlwZV90b19ncmVw ZXJfbWFwKHNlbGYpOgorICAgICAgICAiIiJBbiBpbnRlcm5hbCBtZXRob2Qg d2hpY2ggcmV0dXJucyB0eXBlIGNvZGUgdG8gZ3JlcHBlciBtYXAuIiIiCisg ICAgICAgIHJldHVybiB7CisgICAgICAgICAgICBnZGIuVFlQRV9DT0RFX1BU UiA6IEdyZXBQb2ludGVyKHNlbGYpLAorICAgICAgICAgICAgZ2RiLlRZUEVf Q09ERV9BUlJBWSA6IEdyZXBBcnJheShzZWxmKSwKKyAgICAgICAgICAgIGdk Yi5UWVBFX0NPREVfU1RSVUNUIDogR3JlcFN0cnVjdChzZWxmKSwKKyAgICAg ICAgICAgIGdkYi5UWVBFX0NPREVfVU5JT04gOiBHcmVwVW5pb24oc2VsZiks CisgICAgICAgICAgICBnZGIuVFlQRV9DT0RFX0VOVU0gOiBHcmVwU2NhbGFy KHNlbGYpLAorICAgICAgICAgICAgZ2RiLlRZUEVfQ09ERV9JTlQgOiBHcmVw U2NhbGFyKHNlbGYpLAorICAgICAgICAgICAgZ2RiLlRZUEVfQ09ERV9GTFQg OiBHcmVwU2NhbGFyKHNlbGYpLAorICAgICAgICAgICAgZ2RiLlRZUEVfQ09E RV9DSEFSIDogR3JlcFNjYWxhcihzZWxmKSwKKyAgICAgICAgICAgIGdkYi5U WVBFX0NPREVfQk9PTCA6IEdyZXBTY2FsYXIoc2VsZiksCisgICAgICAgICAg ICBnZGIuVFlQRV9DT0RFX1RZUEVERUYgOiBHcmVwVHlwZWRlZihzZWxmKQor ICAgICAgICB9CisKKyAgICBkZWYgZ3JlcChzZWxmLCByZWdleCwgbmFtZSwg cGF0aCwgdmFsdWUsIGdyZXBfZmllbGQsIGdyZXBfdmFsdWUpOgorICAgICAg ICAiIiJUaGUgZnVuY3Rpb24gdG8gcmVxdWVzdCB0aGUgJ2dyZXAnIGZvciBh IHZhbHVlIG9yIGEgZmllbGQuCisgICAgCisgICAgICAgIE5PVEU6IE9uZSBz aG91bGQgaW52b2tlIHRoZSAnc3RhcnQnIGZ1bmN0aW9uIHRvIGJlZ2luZyB0 aGUgc2VhcmNoLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fYmZzX3F1 ZXVlLmFwcGVuZCgKKyAgICAgICAgICAgIChyZWdleCwgbmFtZSwgcGF0aCwg dmFsdWUsIGdyZXBfZmllbGQsIGdyZXBfdmFsdWUpKQorCisgICAgZGVmIHN0 YXJ0KHNlbGYpOgorICAgICAgICAiIiJUaGUgZnVuY3Rpb24gd2hpY2ggc3Rh cnRzIHRoZSBzZWFyY2ggb25jZSBhICdncmVwJyBoYXMgYmVlbiByZXF1ZXN0 ZWQuCisKKyAgICAgICAgSXQgZG9lcyBzb21ldGhpbmcgdXNlZnVsIGlmIGlu dm9rZWQgb25seSBhZnRlciBtYWtpbmcgYSByZXF1ZXN0IHdpdGggdGhlCisg ICAgICAgICdncmVwJyBmdW5jdGlvbi4KKyAgICAgICAgIiIiCisgICAgICAg IHdoaWxlIGxlbihzZWxmLl9iZnNfcXVldWUpID4gMDoKKyAgICAgICAgICAg IChyZWdleCwgbmFtZSwgcGF0aCwgdmFsdWUsIGdyZXBfZmllbGQsIGdyZXBf dmFsdWUpID0gKAorICAgICAgICAgICAgICAgIHNlbGYuX2Jmc19xdWV1ZVsw XSkKKworICAgICAgICAgICAgdHlwZV9jb2RlID0gdmFsdWUudHlwZS5jb2Rl CisgICAgICAgICAgICBpZiB0eXBlX2NvZGUgaW4gc2VsZi5fdHlwZV90b19n cmVwZXJfbWFwOgorICAgICAgICAgICAgICAgIGdyZXBlciA9IHNlbGYuX3R5 cGVfdG9fZ3JlcGVyX21hcFt0eXBlX2NvZGVdCisgICAgICAgICAgICAgICAg Z3JlcGVyLmdyZXAocmVnZXgsIG5hbWUsIHBhdGgsIHZhbHVlLCBncmVwX2Zp ZWxkLCBncmVwX3ZhbHVlKQorCisgICAgICAgICAgICBzZWxmLl9iZnNfcXVl dWUucG9wbGVmdCgpCisKKyAgICBkZWYgaW52b2tlKHNlbGYsIGFyZ19zdHIs IGZyb21fdHR5KToKKyAgICAgICAgKHJlZ2V4LCBleHByLCB2YWx1ZSkgPSBH cmVwVXRpbHMucGFyc2VfYXJnX3N0cihhcmdfc3RyKQorICAgICAgICBzZWxm LmdyZXAocmVnZXgsIGV4cHIsIGV4cHIsIHZhbHVlLCBUcnVlLCBUcnVlKQor ICAgICAgICBzZWxmLnN0YXJ0KCkKKworCitjbGFzcyBHcmVwRmllbGRDb21t YW5kKEdyZXBDb21tYW5kKToKKyAgICAiIiJDb21tYW5kIHRvICdncmVwJyBm b3IgZmllbGQgbmFtZXMgaW4gZXhwcmVzc2lvbnMuCisKKyAgICBVc2FnZTog Z3JlcCBmaWVsZCBSRUdFWCBFWFBSCisKKyAgICBSRUdFWCBpcyBhIHJlZ3Vs YXIgZXhwcmVzc2lvbiBpbiBkb3VibGUgcXVvdGVzIGlmIGl0IGNvbnRhaW5z IHNwYWNlcy4KKyAgICBFWFBSIGlzIGEgdmFsaWQgZXhwcmVzc2lvbiBpbiB0 aGUgY3VycmVudCBzY29wZS4KKworICAgIFRoZSBjb21tYW5kIGxvb2tzIGZv ciBmaWVsZCBuYW1lcyBtYXRjaGluZyB3aXRoIHRoZSBSRUdFWC4gSXQgc2Nh bnMgdGhyb3VnaAorICAgIHRoZSB2YWx1ZSBvZiBFWFBSIHRvcC1kb3duIHRv IGxvb2sgZm9yIG1hdGNoZXMuICJUb3AtZG93biIgaGVyZSBtZWFucworICAg IHN0YXJ0aW5nIGZyb20gdGhlIEVYUFIgaXRzZWxmLCB0byB0aGUgbmFtZXMg b2YgdGhlIGZpZWxkcyAoaWYgYW55KSBvZiB0aGUKKyAgICB0eXBlIG9mIHRo ZSBFWFBSIHZhbHVlLCBhbmQgcmlnaHQgZG93biB0byB0aGUgbGVhZiBzY2Fs YXIgZmllbGQgbmFtZXMgb2YKKyAgICB0aGVzZSBmaWVsZHMuCisgICAgIiIi CisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHN1cGVyKEdy ZXBDb21tYW5kLCBzZWxmKS5fX2luaXRfXyhuYW1lID0gImdyZXAgZmllbGQi LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29tbWFuZF9jbGFzcyA9IGdkYi5DT01NQU5EX0RBVEEpCisgICAgICAgIHNl bGYuaW5pdF9lbnYoKQorCisgICAgZGVmIGludm9rZShzZWxmLCBhcmdfc3Ry LCBmcm9tX3R0eSk6CisgICAgICAgIChyZWdleCwgZXhwciwgdmFsdWUpID0g R3JlcFV0aWxzLnBhcnNlX2FyZ19zdHIoYXJnX3N0cikKKyAgICAgICAgc2Vs Zi5ncmVwKHJlZ2V4LCBleHByLCBleHByLCB2YWx1ZSwgVHJ1ZSwgRmFsc2Up CisgICAgICAgIHNlbGYuc3RhcnQoKQorCisKK2NsYXNzIEdyZXBWYWx1ZUNv bW1hbmQoR3JlcENvbW1hbmQpOgorICAgICIiIkNvbW1hbmQgdG8gJ2dyZXAn IGZvciBmaWVsZCB2YWx1ZXMgaW4gZXhwcmVzc2lvbnMuCisKKyAgICBVc2Fn ZTogZ3JlcCB2YWx1ZSBSRUdFWCBFWFBSCisKKyAgICBSRUdFWCBpcyBhIHJl Z3VsYXIgZXhwcmVzc2lvbiBpbiBkb3VibGUgcXVvdGVzIGlmIGl0IGNvbnRh aW5zIHNwYWNlcy4KKyAgICBFWFBSIGlzIGEgdmFsaWQgZXhwcmVzc2lvbiBp biB0aGUgY3VycmVudCBzY29wZS4KKworICAgIFRoZSBjb21tYW5kIGxvb2tz IGZvciB2YWx1ZXMgKG9mIHNjYWxhciwgZW51bSBhbmQgc3RyaW5nIGZpZWxk cykgbWF0Y2hpbmcKKyAgICB3aXRoIHRoZSBSRUdFWC4gSXQgc2NhbnMgdGhy b3VnaCB0aGUgdmFsdWUgb2YgRVhQUiB0b3AtZG93bgorICAgIHRvIGxvb2sg Zm9yIG1hdGNoZXMuICJUb3AtZG93biIgaGVyZSBtZWFucyBzdGFydGluZyBm cm9tIHRoZSBFWFBSIGl0c2VsZiwgdG8KKyAgICB0aGUgdmFsdWVzIG9mIHRo ZSBmaWVsZHMgKGlmIGFueSkgb2YgdGhlIHR5cGUgb2YgdGhlIEVYUFIgdmFs dWUsIGFuZCByaWdodAorICAgIGRvd24gdG8gdGhlIHZhbHVlcyBvZiB0aGUg bGVhZiBzY2FsYXIgZmllbGRzIG9mIHRoZXNlIGZpZWxkcy4KKyAgICAiIiIK KworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc3VwZXIoR3Jl cENvbW1hbmQsIHNlbGYpLl9faW5pdF9fKG5hbWUgPSAiZ3JlcCB2YWx1ZSIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b21tYW5kX2NsYXNzID0gZ2RiLkNPTU1BTkRfREFUQSkKKyAgICAgICAgc2Vs Zi5pbml0X2VudigpCisKKyAgICBkZWYgaW52b2tlKHNlbGYsIGFyZ19zdHIs IGZyb21fdHR5KToKKyAgICAgICAgKHJlZ2V4LCBleHByLCB2YWx1ZSkgPSBH cmVwVXRpbHMucGFyc2VfYXJnX3N0cihhcmdfc3RyKQorICAgICAgICBzZWxm LmdyZXAocmVnZXgsIGV4cHIsIGV4cHIsIHZhbHVlLCBGYWxzZSwgVHJ1ZSkK KyAgICAgICAgc2VsZi5zdGFydCgpCisKKworZ2MgPSBHcmVwQ29tbWFuZCgp CitnZmMgPSBHcmVwRmllbGRDb21tYW5kKCkKK2d2YyA9IEdyZXBWYWx1ZUNv bW1hbmQoKQorCitjbGFzcyBBbGxGaWVsZHNTZWxlY3RvcihvYmplY3QpOgor ICAgICIiIkEgdW5pb24gZmllbGQgc2VsZWN0b3Igd2hpY2ggc2VsZWN0cyBh bGwgZmllbGRzLgorICAgIEl0IGlzIGRlZmluZWQgaGVyZSBhcyBhbiBleGFt cGxlIGFuZCBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KKworICAgIFNlZSBHcmVw VW5pb24ucmVnaXN0ZXJfZmllbGRfc2VsZWN0b3IgZm9yIG1vcmUgaW5mb3Jt YXRpb24uCisgICAgIiIiCisKKyAgICBkZWYgZ2V0X2ZpZWxkX25hbWVfbWF0 Y2hlcihzZWxmLCB2YWx1ZSk6CisgICAgICAgICIiIlJldHVybnMgYW4gYWxs IG1hdGNoaW5nIHJlZ3VsYXIgZXhwcmVzc2lvbi4iIiIKKyAgICAgICAgcmV0 dXJuICIuKiIKKworZGVmIHJlZ2lzdGVyX3VuaW9uX2ZpZWxkX3NlbGVjdG9y KGZpZWxkX3NlbGVjdG9yKToKKyAgICBnYy5yZWdpc3Rlcl91bmlvbl9maWVs ZF9zZWxlY3RvcihmaWVsZF9zZWxlY3RvcikKKyAgICBnZmMucmVnaXN0ZXJf dW5pb25fZmllbGRfc2VsZWN0b3IoZmllbGRfc2VsZWN0b3IpCisgICAgZ3Zj LnJlZ2lzdGVyX3VuaW9uX2ZpZWxkX3NlbGVjdG9yKGZpZWxkX3NlbGVjdG9y KQpkaWZmIC1ydXBOIHNyYy9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vTWFr ZWZpbGUuaW4gc3JjX2dyZXAvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL01h a2VmaWxlLmluCi0tLSBzcmMvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL01h a2VmaWxlLmluCTIwMTEtMDUtMTYgMTk6MjY6NDAuMDAwMDAwMDAwICswNTMw CisrKyBzcmNfZ3JlcC9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vTWFrZWZp bGUuaW4JMjAxMS0xMi0xMSAxNzo0MDowNi4zNDE3OTQ2MzAgKzA1MzAKQEAg LTQsNyArNCw4IEBAIHNyY2RpciA9IEBzcmNkaXJACiBFWEVDVVRBQkxFUyA9 IHB5LXR5cGUgcHktdmFsdWUgcHktcHJldHR5cHJpbnQgcHktdGVtcGxhdGUg cHktYmxvY2sgXAogCXB5LXN5bWJvbCBweS1taSBweS1icmVha3BvaW50IHB5 LWluZmVyaW9yIHB5LWluZnRocmVhZCBcCiAJcHktc2hhcmVkIHB5dGhvbiBs aWItdHlwZXMgcHktZXZlbnRzIHB5LWV2dGhyZWFkcyBweS1mcmFtZSBcCi0J cHktbWkgcHktcHAtbWFpbnQgcHktcHJvZ3NwYWNlIHB5LXNlY3Rpb24tc2Ny aXB0IHB5LW9iamZpbGUKKwlweS1taSBweS1wcC1tYWludCBweS1wcm9nc3Bh Y2UgcHktc2VjdGlvbi1zY3JpcHQgcHktb2JqZmlsZSBcCisJcHktZ3JlcAog CiBNSVNDRUxMQU5FT1VTID0gcHktc2hhcmVkLXNsLnNsCiAKZGlmZiAtcnVw TiBzcmMvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWdyZXAuYyBzcmNf Z3JlcC9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktZ3JlcC5jCi0tLSBz cmMvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWdyZXAuYwkxOTcwLTAx LTAxIDA1OjMwOjAwLjAwMDAwMDAwMCArMDUzMAorKysgc3JjX2dyZXAvZ2Ri L3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWdyZXAuYwkyMDExLTEyLTMxIDEx OjI5OjU4LjM0MjA0NzcyOSArMDUzMApAQCAtMCwwICsxLDc5IEBACisvKiBU aGlzIHRlc3RjYXNlIGlzIHBhcnQgb2YgR0RCLCB0aGUgR05VIGRlYnVnZ2Vy LgorCisgICBDb3B5cmlnaHQgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBv cgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKwor ICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor ICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZl IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBz ZWUgIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyovCisKK3N0 cnVjdCBTaW1wbGVTdHJ1Y3QKK3sKKyAgaW50IGludF92YWw7CisgIGRvdWJs ZSBkb3VibGVfdmFsOworfTsKKworc3RydWN0IENvbXBsZXhTdHJ1Y3RfMQor eworICBzdHJ1Y3QgU2ltcGxlU3RydWN0IHNzOworICBjaGFyKiBzdHJfdmFs OworfTsKKworc3RydWN0IENvbXBsZXhTdHJ1Y3RfMgoreworICBzdHJ1Y3Qg Q29tcGxleFN0cnVjdF8xIGNzMTsKKyAgaW50IGludF9hcnJheVsxMF07Cisg IGludCogaW50X3B0cjsKK307CisKK3VuaW9uIFVuaW9uT2ZTdHJ1Y3RzCit7 CisgIHN0cnVjdCBTaW1wbGVTdHJ1Y3Qgc3M7CisgIHN0cnVjdCBDb21wbGV4 U3RydWN0XzEgY3MxOworICBzdHJ1Y3QgQ29tcGxleFN0cnVjdF8yIGNzMjsK K307CisKK3R5cGVkZWYgdW5pb24gVW5pb25PZlN0cnVjdHMgVGhlVHlwZTsK KworaW50CittYWluICh2b2lkKQoreworICBpbnQgaTsKKyAgY2hhciogc3Ry X3ZhbCA9ICJJIGFtIGEgc3RyaW5nIjsKKyAgY2hhciBjaGFyX2FycmF5W10g PQorICAgIHsgJ24nLCAnbycsICd0JywgJyAnICwgJ2EnICwgJyAnLCAncycs ICd0JywgJ3InLCAnaScsICduJywgJ2cnIH07CisKKyAgY2hhciogcHRyX3Rv X2NoYXJfYXJyYXkgPSBjaGFyX2FycmF5OworCisgIHN0cnVjdCBTaW1wbGVT dHJ1Y3Qgc3M7CisgIHNzLmludF92YWwgPSAxMDsKKyAgc3MuZG91YmxlX3Zh bCA9IDEuMTE7CisKKyAgc3RydWN0IENvbXBsZXhTdHJ1Y3RfMSBjczE7Cisg IGNzMS5zcyA9IHNzOworICBjczEuc3RyX3ZhbCA9ICJlbWJlZGRlZCBzdHJp bmcgdmFsdWUiOworCisgIHN0cnVjdCBDb21wbGV4U3RydWN0XzIgY3MyOwor ICBjczIuY3MxID0gY3MxOworICBjczIuaW50X3B0ciA9ICZpOworICBmb3Ig KGkgPSAwOyBpIDwgMTA7IGkrKykKKyAgICB7CisgICAgICBjczIuaW50X2Fy cmF5W2ldID0gaTsKKyAgICB9CisKKyAgdW5pb24gVW5pb25PZlN0cnVjdHMg dXM7CisgIHVzLmNzMiA9IGNzMjsKKworICBUaGVUeXBlKiB0dCA9ICZ1czsK KworICByZXR1cm4gMDsgLyogQnJlYWsgaGVyZS4gKi8KK30KZGlmZiAtcnVw TiBzcmMvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWdyZXAuZXhwIHNy Y19ncmVwL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1ncmVwLmV4cAot LS0gc3JjL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1ncmVwLmV4cAkx OTcwLTAxLTAxIDA1OjMwOjAwLjAwMDAwMDAwMCArMDUzMAorKysgc3JjX2dy ZXAvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWdyZXAuZXhwCTIwMTEt MTItMzEgMTE6MzA6MTkuNzgyMDUwMTA3ICswNTMwCkBAIC0wLDAgKzEsODUg QEAKKyMgQ29weXJpZ2h0IChDKSAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9y CisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisj IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNl aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl CisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0 dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIFRoaXMgZmlsZSBp cyBwYXJ0IG9mIHRoZSBHREIgdGVzdHN1aXRlLiAgSXQgdGVzdHMgdGhlIGNv bW1hbmQgJ2dyZXAnCisjIHdoaWNoIGlzIGltcGxlbWVudGVkIHVzaW5nIHRo ZSBHREItUHl0aG9uIEFQSS4KKworbG9hZF9saWIgZ2RiLXB5dGhvbi5leHAK Kworc2V0IHRlc3RmaWxlICJweS1ncmVwIgorc2V0IHNyY2ZpbGUgJHt0ZXN0 ZmlsZX0uYworc2V0IGJpbmZpbGUgJHtvYmpkaXJ9LyR7c3ViZGlyfS8ke3Rl c3RmaWxlfQoraWYgeyBbcHJlcGFyZV9mb3JfdGVzdGluZyAke3Rlc3RmaWxl fS5leHAgJHt0ZXN0ZmlsZX0gJHtzcmNmaWxlfV0gfSB7CisgICAgcmV0dXJu IC0xCit9CisKKyMgU2tpcCBhbGwgdGVzdHMgaWYgUHl0aG9uIHNjcmlwdGlu ZyBpcyBub3QgZW5hYmxlZC4KK2lmIHsgW3NraXBfcHl0aG9uX3Rlc3RzXSB9 IHsgY29udGludWUgfQorCitpZiAhW3J1bnRvX21haW5dIHsKKyAgIHJldHVy biAtMQorfQorCitnZGJfYnJlYWtwb2ludCBbZ2RiX2dldF9saW5lX251bWJl ciAiQnJlYWsgaGVyZS4iXQorZ2RiX2NvbnRpbnVlX3RvX2JyZWFrcG9pbnQg IkJyZWFrIGhlcmUiICIuKkJyZWFrIGhlcmUuKiIKKworZ2RiX3Rlc3QgInB5 dGhvbiBnZGIuY29tbWFuZC5ncmVwLnJlZ2lzdGVyX3VuaW9uX2ZpZWxkX3Nl bGVjdG9yKGdkYi5jb21tYW5kLmdyZXAuQWxsRmllbGRzU2VsZWN0b3IoKSki ICIiCisKK2dkYl90ZXN0ICJncmVwIGkgaSIgImkgPSBcXChpbnRcXCkgMTAi CisKK2dkYl90ZXN0ICJncmVwIHN0ciBzdHJfdmFsIiAic3RyX3ZhbCA9IFxc KGNoYXIgXFwqXFwpIFwiSSBhbSBhIHN0cmluZ1wiIgorCitnZGJfdGVzdCAi Z3JlcCBzIGNoYXJfYXJyYXkiICJjaGFyX2FycmF5XFxcWzZcXFxdID0gXFwo Y2hhclxcKSAxMTUgJ3MnIgorCitnZGJfdGVzdCAiZ3JlcCBub3QgcHRyX3Rv X2NoYXJfYXJyYXkiICJwdHJfdG9fY2hhcl9hcnJheSA9IFxcKGNoYXIgXFwq XFwpIFwibm90IGEgc3RyaW5nXCIiCisKK3NldCBzc19pbnQgInNzXFwuaW50 X3ZhbCA9IFxcKGludFxcKSAxMCIKK3NldCBzc19kb3VibGUgInNzXFwuZG91 YmxlX3ZhbCA9IFxcKGRvdWJsZVxcKSAxXFwuMS4qIgorZ2RiX3Rlc3QgImdy ZXAgXCJ2YWxcIiBzcyIgIigoJHNzX2ludFxbXFxuXFxyXF0qKXwoJHNzX2Rv dWJsZVxbXFxuXFxyXF0qKSkrIgorCitnZGJfdGVzdCAiZ3JlcCB2YWx1ZSBc Il4xMCRcIiBzcyIgIiRzc19pbnQiCisKK3NldCBjczFfc3NfaW50ICJjczFc XC4kc3NfaW50Igorc2V0IGNzMV9zc19kb3VibGUgImNzMVxcLiRzc19kb3Vi bGUiCitzZXQgY3MxX3N0ciAiY3MxXFwuc3RyX3ZhbCA9IFxcKGNoYXIgXFwq XFwpIFwiZW1iZWRkZWQgc3RyaW5nIHZhbHVlXCIiCitnZGJfdGVzdCAiZ3Jl cCBmaWVsZCB2YWwgY3MxIiAiKCgkY3MxX3NzX2ludFxbXFxuXFxyXF0qKXwo JGNzMV9zc19kb3VibGVcW1xcblxcclxdKil8KCRjczFfc3RyXFtcXG5cXHJc XSopKSsiCitnZGJfdGVzdCAiZ3JlcCB2YWx1ZSB2YWwgY3MxIiAiJGNzMV9z dHIiCisKK3NldCBjczJfY3MxX3NzX2ludCAiY3MyXFwuJGNzMV9zc19pbnQi CitzZXQgY3MyX2ludF9wdHIgIlxcKlxcKGNzMlxcLmludF9wdHJcXCkgPSBc XChpbnRcXCkgMTAiCitnZGJfdGVzdCAiZ3JlcCBcIl4xMCRcIiBjczIiICIo KCRjczJfY3MxX3NzX2ludFxbXFxuXFxyXF0qKXwoJGNzMl9pbnRfcHRyXFtc XG5cXHJcXSopKSsiCitnZGJfdGVzdCAiZ3JlcCBcIl45JFwiIGNzMiIgImNz MlxcLmludF9hcnJheVxcXFs5XFxcXSA9IFxcKGludFxcKSA5IgorCitzZXQg dXNfdmFsMSAidXNcXC4kc3NfaW50Igorc2V0IHVzX3ZhbDIgInVzXFwuJHNz X2RvdWJsZSIKK3NldCB1c192YWwzICJ1c1xcLiRjczFfc3RyIgorc2V0IHVz X3ZhbDQgInVzXFwuJGNzMV9zc19pbnQiCitzZXQgdXNfdmFsNSAidXNcXC4k Y3MxX3NzX2RvdWJsZSIKK3NldCB1c192YWw2ICJ1c1xcLmNzMlxcLiRjczFf c3RyIgorc2V0IHVzX3ZhbDcgInVzXFwuY3MyXFwuJGNzMV9zc19pbnQiCitz ZXQgdXNfdmFsOCAidXNcXC5jczJcXC4kY3MxX3NzX2RvdWJsZSIKK2dkYl90 ZXN0ICJncmVwIGZpZWxkIHZhbCB1cyIgIigoJHVzX3ZhbDFcW1xcblxcclxd Kil8KCR1c192YWwyXFtcXG5cXHJcXSopfCgkdXNfdmFsM1xbXFxuXFxyXF0q KXwoJHVzX3ZhbDRcW1xcblxcclxdKil8KCR1c192YWw1XFtcXG5cXHJcXSop fCgkdXNfdmFsNlxbXFxuXFxyXF0qKXwoJHVzX3ZhbDdcW1xcblxcclxdKil8 KCR1c192YWw4XFtcXG5cXHJcXSopKSsiCitnZGJfdGVzdCAiZ3JlcCB2YWx1 ZSB2YWwgdXMiICIoKCR1c192YWwzXFtcXG5cXHJcXSopfCgkdXNfdmFsNlxb XFxuXFxyXF0qKSkrIgorCitzZXQgdHRfdmFsMSAiXFwoXFwqdHRcXClcXC4k c3NfaW50Igorc2V0IHR0X3ZhbDIgIlxcKFxcKnR0XFwpXFwuJHNzX2RvdWJs ZSIKK3NldCB0dF92YWwzICJcXChcXCp0dFxcKVxcLiRjczFfc3RyIgorc2V0 IHR0X3ZhbDQgIlxcKFxcKnR0XFwpXFwuJGNzMV9zc19pbnQiCitzZXQgdHRf dmFsNSAiXFwoXFwqdHRcXClcXC4kY3MxX3NzX2RvdWJsZSIKK3NldCB0dF92 YWw2ICJcXChcXCp0dFxcKVxcLmNzMlxcLiRjczFfc3RyIgorc2V0IHR0X3Zh bDcgIlxcKFxcKnR0XFwpXFwuY3MyXFwuJGNzMV9zc19pbnQiCitzZXQgdHRf dmFsOCAiXFwoXFwqdHRcXClcXC5jczJcXC4kY3MxX3NzX2RvdWJsZSIKK2dk Yl90ZXN0ICJncmVwIGZpZWxkIHZhbCB0dCIgIigoJHR0X3ZhbDFcW1xcblxc clxdKil8KCR0dF92YWwyXFtcXG5cXHJcXSopfCgkdHRfdmFsM1xbXFxuXFxy XF0qKXwoJHR0X3ZhbDRcW1xcblxcclxdKil8KCR0dF92YWw1XFtcXG5cXHJc XSopfCgkdHRfdmFsNlxbXFxuXFxyXF0qKXwoJHR0X3ZhbDdcW1xcblxcclxd Kil8KCR0dF92YWw4XFtcXG5cXHJcXSopKSsiCitnZGJfdGVzdCAiZ3JlcCB2 YWx1ZSB2YWwgdHQiICIoKCR0dF92YWwzXFtcXG5cXHJcXSopfCgkdHRfdmFs NlxbXFxuXFxyXF0qKSkrIgo= --002354470b5cb6629004b584774e--