From mboxrd@z Thu Jan 1 00:00:00 1970 From: Federico Beffa Subject: Re: hackage importer Date: Fri, 3 Apr 2015 15:01:24 +0200 Message-ID: References: <87k2yiqqaw.fsf@gnu.org> <871tkbdhwc.fsf@gnu.org> <871tk7ykfj.fsf@gnu.org> <87zj6t9tq5.fsf@gnu.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=089e01494318b52a4b0512d18b54 Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:46353) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Ye1E3-0003sQ-Vz for guix-devel@gnu.org; Fri, 03 Apr 2015 09:01:36 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Ye1Dz-00040p-AU for guix-devel@gnu.org; Fri, 03 Apr 2015 09:01:31 -0400 In-Reply-To: <87zj6t9tq5.fsf@gnu.org> List-Id: "Development of GNU Guix and the GNU System distribution." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-devel-bounces+gcggd-guix-devel=m.gmane.org@gnu.org Sender: guix-devel-bounces+gcggd-guix-devel=m.gmane.org@gnu.org To: =?UTF-8?Q?Ludovic_Court=C3=A8s?= Cc: Guix-devel --089e01494318b52a4b0512d18b54 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable On Tue, Mar 31, 2015 at 3:33 PM, Ludovic Court=C3=A8s wrote: > Nice. TABs and odd indentation probably make good additional test cases > to have in tests/cabal.scm. I've added these test cases as suggested. > I think it=E2=80=99s a matter of separating concerns. In my mind there a= re > three distinct layers: > > 1. Cabal parsing (what I call =E2=80=98read-cabal=E2=80=99, because it= =E2=80=99s the > equivalent of =E2=80=98read=E2=80=99); > > 2. Cabal evaluation/instantiation for a certain set of flags, OS, > etc. (what I call =E2=80=98eval-cabal=E2=80=99 because it=E2=80=99s = the equivalent of > =E2=80=98eval=E2=80=99); > > 3. Conversion of Cabal packages of Guix package sexps. > > My concern was about making sure these three phases were clearly visible > in the code. Tu put it differently, #1 and #2 would conceptually be > part of a Cabal parsing/evaluation library, while #3 would be the only > Guix-specific part. OK, now I see what you had in mind. Thanks for the explanation! My intention wasn't to make an "universal" Cabal parser for two reasons: (i) I've not found any full, formal description of the file format. I could in principle deduce it from the Haskell code, but I'm just starting to learn Haskell. (ii) I don't see any use of Cabal files in the Scheme world, but maybe I'm just blind :-) For these reasons my target was to understand the minimum necessary to produce a Guix package. In spite of this, I think, I ended up handling most of it. What's still missing is parsing of block structured (with braces) files. > Anyway, I=E2=80=99ve probably used enough of your time by now. :-) > If this discussion gives you ideas on how to structure the code, that is > fine, but otherwise we can probably go with the architecture you > propose. > > How does that sound? I think that restructuring the code as you suggest requires quite a bit of effort. At this point in time I'm not ready to invest the required time. If one day I will decide to work on improving the code to make it handle block structured files, that may be the right moment to reorganize it. Please find attached updated patches with added documentation, two more tests, and an option to disable the inclusion of dependencies only requited by the test-suite of the package. 'read-cabal' now takes a port and 'strip-cabal' was renamed as suggested and made local to the former. If parsing fails now an exception of type '&message' is raised with a meaningful message. Regards, Fede --089e01494318b52a4b0512d18b54 Content-Type: text/x-diff; charset=UTF-8; name="0001-import-Add-hackage-importer.patch" Content-Disposition: attachment; filename="0001-import-Add-hackage-importer.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_i81kqzow0 RnJvbSA2MzNiZmI1YWY1N2Y3MDdkZWExMmFiNzQ3MTMzMTgyZDA4NTk1MWZmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBGZWRlcmljbyBCZWZmYSA8YmVmZmFAZmJlbmdpbmVlcmluZy5j aD4KRGF0ZTogU2F0LCA3IE1hciAyMDE1IDE3OjIzOjE0ICswMTAwClN1YmplY3Q6IFtQQVRDSCAw MS8yOV0gaW1wb3J0OiBBZGQgaGFja2FnZSBpbXBvcnRlci4KCiogZ3VpeC9zY3JpcHRzL2ltcG9y dC5zY20gKGltcG9ydGVycyk6IEFkZCBoYWNrYWdlLgoqIGd1aXgvc2NyaXB0cy9pbXBvcnQvaGFj a2FnZS5zY206IE5ldyBmaWxlLgoqIHBvL2d1aXgvUE9URklMRVMuaW46IEFkZCBndWl4L3Njcmlw dHMvaW1wb3J0LnNjbS4KKiBkb2MvZ3VpeC50ZXhpOiBBZGQgc2VjdGlvbiBvbiAnaGFja2FnZScg aW1wb3J0ZXIuCi0tLQogZG9jL2d1aXgudGV4aSAgICAgICAgICAgICAgICAgICB8ICAyOSArKysr KysrKysrKwogZ3VpeC9zY3JpcHRzL2ltcG9ydC5zY20gICAgICAgICB8ICAgMiArLQogZ3VpeC9z Y3JpcHRzL2ltcG9ydC9oYWNrYWdlLnNjbSB8IDEwNiArKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrCiBwby9ndWl4L1BPVEZJTEVTLmluICAgICAgICAgICAgIHwgICAxICsK IDQgZmlsZXMgY2hhbmdlZCwgMTM3IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBndWl4L3NjcmlwdHMvaW1wb3J0L2hhY2thZ2Uuc2NtCgpkaWZmIC0tZ2l0 IGEvZG9jL2d1aXgudGV4aSBiL2RvYy9ndWl4LnRleGkKaW5kZXggNTQ5ZGE4MC4uOGM5MGIyZCAx MDA2NDQKLS0tIGEvZG9jL2d1aXgudGV4aQorKysgYi9kb2MvZ3VpeC50ZXhpCkBAIC0zMTQwLDYg KzMxNDAsMzUgQEAgYm91bmQgdG8gdGhlIEBjb2Rle2xpYnJlb2ZmaWNlfSB0b3AtbGV2ZWwgYXR0 cmlidXRlKToKIEBleGFtcGxlCiBndWl4IGltcG9ydCBuaXggfi9wYXRoL3RvL25peHBrZ3MgbGli cmVvZmZpY2UKIEBlbmQgZXhhbXBsZQorCitAaXRlbSBoYWNrYWdlCitAY2luZGV4IGhhY2thZ2UK K0ltcG9ydCBtZXRhLWRhdGEgZnJvbSBIYXNrZWxsIGNvbW11bml0eSdzIGNlbnRyYWwgcGFja2Fn ZSBhcmNoaXZlCitAdXJlZntodHRwczovL2hhY2thZ2UuaGFza2VsbC5vcmcvLCBIYWNrYWdlfS4g IEluZm9ybWF0aW9uIGlzIHRha2VuIGZyb20KK0NhYmFsIGZpbGVzIGFuZCBpbmNsdWRlcyBhbGwg dGhlIHJlbGV2YW50IGluZm9ybWF0aW9uLCBpbmNsdWRpbmcgcGFja2FnZQorZGVwZW5kZW5jaWVz LgorCitTcGVjaWZpYyBjb21tYW5kLWxpbmUgb3B0aW9ucyBhcmU6CisKK0B0YWJsZSBAY29kZQor QGl0ZW0gLS1uby10ZXN0LWRlcGVuZGVuY2llcworQGl0ZW14IC10CitEbyBub3QgaW5jbHVkZSBk ZXBlbmRlbmNpZXMgb25seSByZXF1aXJlZCB0byBydW4gdGhlIHRlc3Qgc3VpdGUuCitAZW5kIHRh YmxlCisKK1RoZSBjb21tYW5kIGJlbG93IGltcG9ydHMgbWV0YS1kYXRhIGZvciBsYXRlc3QgdmVy c2lvbiBvZiB0aGUKK0Bjb2Rle0hUVFB9IEhhc2tlbGwgcGFja2FnZSB3aXRob3V0IGluY2x1ZGlu ZyB0ZXN0IGRlcGVuZGVuY2llczoKKworQGV4YW1wbGUKK2d1aXggaW1wb3J0IGhhY2thZ2UgLXQg SFRUUAorQGVuZCBleGFtcGxlCisKK0Egc3BlY2lmaWMgcGFja2FnZSB2ZXJzaW9uIG1heSBvcHRp b25hbGx5IGJlIHNwZWNpZmllZCBieSBmb2xsb3dpbmcgdGhlCitwYWNrYWdlIG5hbWUgYnkgYSBo eXBoZW4gYW5kIGEgdmVyc2lvbiBudW1iZXIgYXMgaW4gdGhlIGZvbGxvd2luZyBleGFtcGxlOgor CitAZXhhbXBsZQorZ3VpeCBpbXBvcnQgaGFja2FnZSBtdGwtMi4xLjMuMQorQGVuZCBleGFtcGxl CiBAZW5kIHRhYmxlCiAKIFRoZSBzdHJ1Y3R1cmUgb2YgdGhlIEBjb21tYW5ke2d1aXggaW1wb3J0 fSBjb2RlIGlzIG1vZHVsYXIuICBJdCB3b3VsZCBiZQpkaWZmIC0tZ2l0IGEvZ3VpeC9zY3JpcHRz L2ltcG9ydC5zY20gYi9ndWl4L3NjcmlwdHMvaW1wb3J0LnNjbQppbmRleCA3ZTc1YzEwLi4wNmI0 YzE3IDEwMDY0NAotLS0gYS9ndWl4L3NjcmlwdHMvaW1wb3J0LnNjbQorKysgYi9ndWl4L3Njcmlw dHMvaW1wb3J0LnNjbQpAQCAtNzMsNyArNzMsNyBAQCByYXRoZXIgdGhhbiBcXG4uIgogOzs7IEVu dHJ5IHBvaW50LgogOzs7CiAKLShkZWZpbmUgaW1wb3J0ZXJzICcoImdudSIgIm5peCIgInB5cGki ICJjcGFuIikpCisoZGVmaW5lIGltcG9ydGVycyAnKCJnbnUiICJuaXgiICJweXBpIiAiY3BhbiIg ImhhY2thZ2UiKSkKIAogKGRlZmluZSAocmVzb2x2ZS1pbXBvcnRlciBuYW1lKQogICAobGV0ICgo bW9kdWxlIChyZXNvbHZlLWludGVyZmFjZQpkaWZmIC0tZ2l0IGEvZ3VpeC9zY3JpcHRzL2ltcG9y dC9oYWNrYWdlLnNjbSBiL2d1aXgvc2NyaXB0cy9pbXBvcnQvaGFja2FnZS5zY20KbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdjMThjZAotLS0gL2Rldi9udWxsCisrKyBiL2d1 aXgvc2NyaXB0cy9pbXBvcnQvaGFja2FnZS5zY20KQEAgLTAsMCArMSwxMDYgQEAKKzs7OyBHTlUg R3VpeCAtLS0gRnVuY3Rpb25hbCBwYWNrYWdlIG1hbmFnZW1lbnQgZm9yIEdOVQorOzs7IENvcHly aWdodCDCqSAyMDE1IEZlZGVyaWNvIEJlZmZhIDxiZWZmYUBmYmVuZ2luZWVyaW5nLmNoPgorOzs7 Cis7OzsgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIEd1aXguCis7OzsKKzs7OyBHTlUgR3VpeCBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0 Cis7OzsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBh cyBwdWJsaXNoZWQgYnkKKzs7OyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIg dmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQKKzs7OyB5b3VyIG9wdGlvbikgYW55IGxh dGVyIHZlcnNpb24uCis7OzsKKzs7OyBHTlUgR3VpeCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKzs7OyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCis7OzsgTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorOzs7IEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCis7OzsKKzs7OyBZb3Ugc2hv dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZQorOzs7IGFsb25nIHdpdGggR05VIEd1aXguICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUu b3JnL2xpY2Vuc2VzLz4uCisKKyhkZWZpbmUtbW9kdWxlIChndWl4IHNjcmlwdHMgaW1wb3J0IGhh Y2thZ2UpCisgICM6dXNlLW1vZHVsZSAoZ3VpeCB1aSkKKyAgIzp1c2UtbW9kdWxlIChndWl4IHV0 aWxzKQorICAjOnVzZS1tb2R1bGUgKGd1aXggaW1wb3J0IGhhY2thZ2UpCisgICM6dXNlLW1vZHVs ZSAoZ3VpeCBzY3JpcHRzIGltcG9ydCkKKyAgIzp1c2UtbW9kdWxlIChzcmZpIHNyZmktMSkKKyAg Izp1c2UtbW9kdWxlIChzcmZpIHNyZmktMTEpCisgICM6dXNlLW1vZHVsZSAoc3JmaSBzcmZpLTM3 KQorICAjOnVzZS1tb2R1bGUgKGljZS05IG1hdGNoKQorICAjOnVzZS1tb2R1bGUgKGljZS05IGZv cm1hdCkKKyAgIzpleHBvcnQgKGd1aXgtaW1wb3J0LWhhY2thZ2UpKQorCisMCis7OzsKKzs7OyBD b21tYW5kLWxpbmUgb3B0aW9ucy4KKzs7OworCisoZGVmaW5lICVkZWZhdWx0LW9wdGlvbnMKKyAg JygoaW5jbHVkZS10ZXN0LWRlcGVuZGVuY2llcz8gLiAjdCkpKQorCisoZGVmaW5lIChzaG93LWhl bHApCisgIChkaXNwbGF5IChfICJVc2FnZTogZ3VpeCBpbXBvcnQgaGFja2FnZSBQQUNLQUdFLU5B TUUKK0ltcG9ydCBhbmQgY29udmVydCB0aGUgSGFja2FnZSBwYWNrYWdlIGZvciBQQUNLQUdFLU5B TUUuICBJZiBQQUNLQUdFLU5BTUUKK2luY2x1ZGVzIGEgc3VmZml4IGNvbnN0aXR1dGVkIGJ5IGEg ZGFzaCBmb2xsb3dlZCBieSBhIG51bWVyaWNhbCB2ZXJzaW9uIChhcwordXNlZCB3aXRoIEd1aXgg cGFja2FnZXMpLCB0aGVuIGEgZGVmaW5pdGlvbiBmb3IgdGhlIHNwZWNpZmllZCB2ZXJzaW9uIG9m IHRoZQorcGFja2FnZSB3aWxsIGJlIGdlbmVyYXRlZC4gIElmIG5vIHZlcnNpb24gc3VmZml4IGlz IHBlY2lmaWVkLCB0aGVuIHRoZQorZ2VuZXJhdGVkIHBhY2thZ2UgZGVmaW5pdGlvbiB3aWxsIGNv cnJlc3BvbmQgdG8gdGhlIGxhdGVzdCBhdmFpbGFibGUKK3ZlcnNpb24uXG4iKSkKKyAgKGRpc3Bs YXkgKF8gIgorICAtaCwgLS1oZWxwICAgICAgICAgICAgICAgICAgIGRpc3BsYXkgdGhpcyBoZWxw IGFuZCBleGl0IikpCisgIChkaXNwbGF5IChfICIKKyAgLXQsIC0tbm8tdGVzdC1kZXBlbmRlbmNp ZXMgICBkb24ndCBpbmNsdWRlIHRlc3Qgb25seSBkZXBlbmRlbmNpZXMiKSkKKyAgKGRpc3BsYXkg KF8gIgorICAtViwgLS12ZXJzaW9uICAgICAgICAgICAgICAgIGRpc3BsYXkgdmVyc2lvbiBpbmZv cm1hdGlvbiBhbmQgZXhpdCIpKQorICAobmV3bGluZSkKKyAgKHNob3ctYnVnLXJlcG9ydC1pbmZv cm1hdGlvbikpCisKKyhkZWZpbmUgJW9wdGlvbnMKKyAgOzsgU3BlY2lmaWNhdGlvbiBvZiB0aGUg Y29tbWFuZC1saW5lIG9wdGlvbnMuCisgIChjb25zKiAob3B0aW9uICcoI1xoICJoZWxwIikgI2Yg I2YKKyAgICAgICAgICAgICAgICAgKGxhbWJkYSBhcmdzCisgICAgICAgICAgICAgICAgICAgKHNo b3ctaGVscCkKKyAgICAgICAgICAgICAgICAgICAoZXhpdCAwKSkpCisgICAgICAgICAob3B0aW9u ICcoI1xWICJ2ZXJzaW9uIikgI2YgI2YKKyAgICAgICAgICAgICAgICAgKGxhbWJkYSBhcmdzCisg ICAgICAgICAgICAgICAgICAgKHNob3ctdmVyc2lvbi1hbmQtZXhpdCAiZ3VpeCBpbXBvcnQgaGFj a2FnZSIpKSkKKyAgICAgICAgIChvcHRpb24gJygjXHQgIm5vLXRlc3QtZGVwZW5kZW5jaWVzIikg I2YgI2YKKyAgICAgICAgICAgICAgICAgKGxhbWJkYSAob3B0IG5hbWUgYXJnIHJlc3VsdCkKKyAg ICAgICAgICAgICAgICAgICAoYWxpc3QtY29ucyAnaW5jbHVkZS10ZXN0LWRlcGVuZGVuY2llcz8g I2YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYWxpc3QtZGVsZXRlICdpbmNsdWRl LXRlc3QtZGVwZW5kZW5jaWVzPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcmVzdWx0KSkpKQorICAgICAgICAgJXN0YW5kYXJkLWltcG9ydC1vcHRpb25zKSkK KworDAorOzs7Cis7OzsgRW50cnkgcG9pbnQuCis7OzsKKworKGRlZmluZSAoZ3VpeC1pbXBvcnQt aGFja2FnZSAuIGFyZ3MpCisgIChkZWZpbmUgKHBhcnNlLW9wdGlvbnMpCisgICAgOzsgUmV0dXJu IHRoZSBhbGlzdCBvZiBvcHRpb24gdmFsdWVzLgorICAgIChhcmdzLWZvbGQqIGFyZ3MgJW9wdGlv bnMKKyAgICAgICAgICAgICAgICAobGFtYmRhIChvcHQgbmFtZSBhcmcgcmVzdWx0KQorICAgICAg ICAgICAgICAgICAgKGxlYXZlIChfICJ+QTogdW5yZWNvZ25pemVkIG9wdGlvbn4lIikgbmFtZSkp CisgICAgICAgICAgICAgICAgKGxhbWJkYSAoYXJnIHJlc3VsdCkKKyAgICAgICAgICAgICAgICAg IChhbGlzdC1jb25zICdhcmd1bWVudCBhcmcgcmVzdWx0KSkKKyAgICAgICAgICAgICAgICAlZGVm YXVsdC1vcHRpb25zKSkKKworICAobGV0KiAoKG9wdHMgKHBhcnNlLW9wdGlvbnMpKQorICAgICAg ICAgKGFyZ3MgKGZpbHRlci1tYXAgKG1hdGNoLWxhbWJkYQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICgoJ2FyZ3VtZW50IC4gdmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfICNmKSkKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIChyZXZlcnNlIG9wdHMpKSkpCisgICAgKG1hdGNoIGFyZ3MKKyAgICAg ICgocGFja2FnZS1uYW1lKQorICAgICAgIChsZXQgKChzZXhwIChoYWNrYWdlLT5ndWl4LXBhY2th Z2UKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZS1uYW1lCisgICAgICAgICAgICAgICAgICAg ICM6aW5jbHVkZS10ZXN0LWRlcGVuZGVuY2llcz8KKyAgICAgICAgICAgICAgICAgICAgKGFzc29j LXJlZiBvcHRzICdpbmNsdWRlLXRlc3QtZGVwZW5kZW5jaWVzPykpKSkKKyAgICAgICAgICh1bmxl c3Mgc2V4cAorICAgICAgICAgICAobGVhdmUgKF8gImZhaWxlZCB0byBkb3dubG9hZCBjYWJhbCBm aWxlIGZvciBwYWNrYWdlICd+YSd+JSIpCisgICAgICAgICAgICAgICAgICBwYWNrYWdlLW5hbWUp KQorICAgICAgICAgc2V4cCkpCisgICAgICAoKCkKKyAgICAgICAobGVhdmUgKF8gInRvbyBmZXcg YXJndW1lbnRzfiUiKSkpCisgICAgICAoKG1hbnkgLi4uKQorICAgICAgIChsZWF2ZSAoXyAidG9v IG1hbnkgYXJndW1lbnRzfiUiKSkpKSkpCmRpZmYgLS1naXQgYS9wby9ndWl4L1BPVEZJTEVTLmlu IGIvcG8vZ3VpeC9QT1RGSUxFUy5pbgppbmRleCA2MTlmNmY5Li40Yjc5Mzg1IDEwMDY0NAotLS0g YS9wby9ndWl4L1BPVEZJTEVTLmluCisrKyBiL3BvL2d1aXgvUE9URklMRVMuaW4KQEAgLTgsNiAr OCw3IEBAIGd1aXgvc2NyaXB0cy9kb3dubG9hZC5zY20KIGd1aXgvc2NyaXB0cy9wYWNrYWdlLnNj bQogZ3VpeC9zY3JpcHRzL2djLnNjbQogZ3VpeC9zY3JpcHRzL2hhc2guc2NtCitndWl4L3Njcmlw dHMvaW1wb3J0LnNjbQogZ3VpeC9zY3JpcHRzL3B1bGwuc2NtCiBndWl4L3NjcmlwdHMvc3Vic3Rp dHV0ZS1iaW5hcnkuc2NtCiBndWl4L3NjcmlwdHMvYXV0aGVudGljYXRlLnNjbQotLSAKMi4yLjEK Cg== --089e01494318b52a4b0512d18b54 Content-Type: text/x-diff; charset=UTF-8; name="0002-import-Add-hackage-importer.patch" Content-Disposition: attachment; filename="0002-import-Add-hackage-importer.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_i81kr7hb1 RnJvbSBlZmI4YTA5Y2UzYWVlODVlZjczMjA2YmUyOTU3ZWY2YzRlMzM2MGEyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBGZWRlcmljbyBCZWZmYSA8YmVmZmFAZmJlbmdpbmVlcmluZy5j aD4KRGF0ZTogU3VuLCA4IE1hciAyMDE1IDA3OjQ4OjM4ICswMTAwClN1YmplY3Q6IFtQQVRDSCAw Mi8yOV0gaW1wb3J0OiBBZGQgaGFja2FnZSBpbXBvcnRlci4KCiogZ3VpeC9pbXBvcnQvaGFja2Fn ZS5zY206IE5ldyBmaWxlLgoqIHRlc3RzL2hhY2thZ2Uuc2NtOiBOZXcgZmlsZS4KLS0tCiBndWl4 L2ltcG9ydC9oYWNrYWdlLnNjbSB8IDc2NyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysKIHRlc3RzL2hhY2thZ2Uuc2NtICAgICAgIHwgMTM0ICsrKysrKysr KwogMiBmaWxlcyBjaGFuZ2VkLCA5MDEgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0 IGd1aXgvaW1wb3J0L2hhY2thZ2Uuc2NtCiBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMvaGFja2Fn ZS5zY20KCmRpZmYgLS1naXQgYS9ndWl4L2ltcG9ydC9oYWNrYWdlLnNjbSBiL2d1aXgvaW1wb3J0 L2hhY2thZ2Uuc2NtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMjc4MDMK LS0tIC9kZXYvbnVsbAorKysgYi9ndWl4L2ltcG9ydC9oYWNrYWdlLnNjbQpAQCAtMCwwICsxLDc2 NyBAQAorOzs7IEdOVSBHdWl4IC0tLSBGdW5jdGlvbmFsIHBhY2thZ2UgbWFuYWdlbWVudCBmb3Ig R05VCis7OzsgQ29weXJpZ2h0IMKpIDIwMTUgRmVkZXJpY28gQmVmZmEgPGJlZmZhQGZiZW5naW5l ZXJpbmcuY2g+Cis7OzsKKzs7OyBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgR3VpeC4KKzs7Owor Ozs7IEdOVSBHdWl4IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vciBtb2RpZnkgaXQKKzs7OyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorOzs7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdAorOzs7IHlvdXIg b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKzs7OworOzs7IEdOVSBHdWl4IGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorOzs7IFdJVEhPVVQg QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKzs7OyBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlCis7OzsgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKzs7 OworOzs7IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlCis7OzsgYWxvbmcgd2l0aCBHTlUgR3VpeC4gIElmIG5vdCwgc2VlIDxo dHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworKGRlZmluZS1tb2R1bGUgKGd1aXggaW1w b3J0IGhhY2thZ2UpCisgICM6dXNlLW1vZHVsZSAoaWNlLTkgbWF0Y2gpCisgICM6dXNlLW1vZHVs ZSAoaWNlLTkgcmVnZXgpCisgICM6dXNlLW1vZHVsZSAoaWNlLTkgcmRlbGltKQorICAjOnVzZS1t b2R1bGUgKGljZS05IHJlY2VpdmUpCisgICM6dXNlLW1vZHVsZSAoaWNlLTkgcHJldHR5LXByaW50 KQorICAjOnVzZS1tb2R1bGUgKHNyZmkgc3JmaS0yNikKKyAgIzp1c2UtbW9kdWxlIChzcmZpIHNy ZmktMzQpCisgICM6dXNlLW1vZHVsZSAoc3JmaSBzcmZpLTM1KQorICAjOnVzZS1tb2R1bGUgKHNy Zmkgc3JmaS0xMSkKKyAgIzp1c2UtbW9kdWxlIChzcmZpIHNyZmktMSkKKyAgIzp1c2UtbW9kdWxl ICgoZ3VpeCBkb3dubG9hZCkgIzpzZWxlY3QgKGRvd25sb2FkLXRvLXN0b3JlKSkKKyAgIzp1c2Ut bW9kdWxlICgoZ3VpeCB1dGlscykgIzpzZWxlY3QgKHBhY2thZ2UtbmFtZS0+bmFtZSt2ZXJzaW9u KSkKKyAgIzp1c2UtbW9kdWxlIChndWl4IGltcG9ydCB1dGlscykKKyAgIzp1c2UtbW9kdWxlIChn dWl4IHN0b3JlKQorICAjOnVzZS1tb2R1bGUgKGd1aXggaGFzaCkKKyAgIzp1c2UtbW9kdWxlIChn dWl4IGJhc2UzMikKKyAgIzp1c2UtbW9kdWxlICgoZ3VpeCB1dGlscykgIzpzZWxlY3QgKGNhbGwt d2l0aC10ZW1wb3Jhcnktb3V0cHV0LWZpbGUpKQorICAjOmV4cG9ydCAoaGFja2FnZS0+Z3VpeC1w YWNrYWdlKSkKKworOzsgUGFydCAxOgorOzsKKzs7IEZ1bmN0aW9ucyB1c2VkIHRvIHJlYWQgYSBD YWJhbCBmaWxlLgorCisoZGVmaW5lIGdoYy1zdGFuZGFyZC1saWJyYXJpZXMKKyAgOzsgTGlzdCBv ZiBsaWJyYXJpZXMgZGlzdHJpYnV0ZWQgd2l0aCBnaGMgKDcuOC40KS4gV2UgaW5jbHVkZSBHSEMg aXRzZWxmIGFzCisgIDs7IHNvbWUgcGFja2FnZXMgbGlzdCBpdC4KKyAgJygiZ2hjIgorICAgICJo YXNrZWxsOTgiCisgICAgImhvb3BsIgorICAgICJiYXNlIgorICAgICJ0cmFuc2Zvcm1lcnMiCisg ICAgImRlZXBzZXEiCisgICAgImFycmF5IgorICAgICJiaW5hcnkiCisgICAgImJ5dGVzdHJpbmci CisgICAgImNvbnRhaW5lcnMiCisgICAgInRpbWUiCisgICAgImNhYmFsIgorICAgICJiaW4tcGFj a2FnZS1kYiIKKyAgICAiZ2hjLXByaW0iCisgICAgImludGVnZXItZ21wIgorICAgICJpbnRlZ2Vy LXNpbXBsZSIKKyAgICAid2luMzIiCisgICAgInRlbXBsYXRlLWhhc2tlbGwiCisgICAgInByb2Nl c3MiCisgICAgImhhc2tlbGluZSIKKyAgICAidGVybWluZm8iCisgICAgImRpcmVjdG9yeSIKKyAg ICAiZmlsZXBhdGgiCisgICAgIm9sZC1sb2NhbGUiCisgICAgInVuaXgiCisgICAgIm9sZC10aW1l IgorICAgICJwcmV0dHkiCisgICAgInhodG1sIgorICAgICJocGMiKSkKKworKGRlZmluZSBwYWNr YWdlLW5hbWUtcHJlZml4ICJnaGMtIikKKworKGRlZmluZSBrZXktdmFsdWUtcngKKyAgOzsgUmVn dWxhciBleHByZXNzaW9uIG1hdGNoaW5nICJrZXk6IHZhbHVlIgorICAobWFrZS1yZWdleHAgIihb YS16QS1aMC05LV0rKTpbIFx0XSooXFx3Py4qKSQiKSkKKworKGRlZmluZSBzZWN0aW9ucy1yeAor ICA7OyBSZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2hpbmcgYSBzZWN0aW9uICJoZWFkIHN1Yi1oZWFk IC4uLiIKKyAgKG1ha2UtcmVnZXhwICIoW2EtekEtWjAtOVxcKFxcKS1dKykiKSkKKworKGRlZmlu ZSBjb21tZW50LXJ4CisgIDs7IFJlZ2V4cCBtYXRjaGluZyBDYWJhbCBjb21tZW50IGxpbmVzLgor ICAobWFrZS1yZWdleHAgIl4gKi0tIikpCisKKyhkZWZpbmUgKGhhcy1rZXk/IGxpbmUpCisgICJD aGVjayBpZiBMSU5FIGluY2x1ZGVzIGEga2V5LiIKKyAgKHJlZ2V4cC1leGVjIGtleS12YWx1ZS1y eCBsaW5lKSkKKworKGRlZmluZSAoY29tbWVudC1saW5lPyBsaW5lKQorICAiQ2hlY2sgaWYgTElO RSBpcyBhIGNvbW1lbnQgbGluZS4iCisgIChyZWdleHAtZXhlYyBjb21tZW50LXJ4IGxpbmUpKQor CisoZGVmaW5lIChsaW5lLWluZGVudGF0aW9uK3Jlc3QgbGluZSkKKyAgIlJldHVybnMgdHdvIHJl c3VsdHM6IFRoZSBudW1iZXIgb2YgaW5kZW50YXRpb24gc3BhY2VzIGFuZCB0aGUgcmVzdCBvZiB0 aGUKK2xpbmUgKHdpdGhvdXQgaW5kZW50YXRpb24pLiIKKyAgKGxldCBsb29wICgobGluZS1sc3Qg KHN0cmluZy0+bGlzdCBsaW5lKSkKKyAgICAgICAgICAgICAoY291bnQgMCkpCisgICAgOzsgU29t ZXRpbWVzIHZhbHVlcyBhcmUgc3ByZWFkIG92ZXIgbXVsdGlwbGUgbGluZXMgYW5kIG5ldyBsaW5l cyBzdGFydAorICAgIDs7IHdpdGggYSBjb21tYSAnLCcgd2l0aCB0aGUgd3JvbmcgaW5kZW50YXRp b24uICBTZWUgZS5nLiBoYWRkb2NrLWFwaS4KKyAgICAoaWYgKG9yIChudWxsPyBsaW5lLWxzdCkK KyAgICAgICAgICAgIChub3QgKG9yCisgICAgICAgICAgICAgICAgICAoZXF2PyAoZmlyc3QgbGlu ZS1sc3QpICNcc3BhY2UpCisgICAgICAgICAgICAgICAgICAoZXF2PyAoZmlyc3QgbGluZS1sc3Qp ICNcLCkgOyBzZWUsIGUuZy4sIGhhZGRvY2stYXBpLmNhYmFsCisgICAgICAgICAgICAgICAgICAo ZXF2PyAoZmlyc3QgbGluZS1sc3QpICNcdGFiKSkpKQorICAgICAgICAodmFsdWVzIGNvdW50IChs aXN0LT5zdHJpbmcgbGluZS1sc3QpKQorICAgICAgICAobG9vcCAoY2RyIGxpbmUtbHN0KSAoKyBj b3VudCAxKSkpKSkKKworKGRlZmluZSAobXVsdGktbGluZS12YWx1ZSBsaW5lcyBzZWVkKQorICAi RnVuY3Rpb24gdG8gcmVhZCBhIHZhbHVlIHNwbGl0IGFjcm9zcyBtdWx0aXBsZSBsaW5lcy4gTElO RVMgYXJlIHRoZQorcmVtYWluaW5nIGlucHV0IGxpbmVzIHRvIGJlIHJlYWQuIFNFRUQgaXMgdGhl IHZhbHVlIHJlYWQgb24gdGhlIHNhbWUgbGluZSBhcwordGhlIGtleS4gIFJldHVybiB0d28gdmFs dWVzOiBBIGxpc3Qgd2l0aCB2YWx1ZXMgYW5kIHRoZSByZW1haW5pbmcgbGluZXMgdG8gYmUKK3By b2Nlc3NlZC4iCisgIChkZWZpbmUgKG11bHRpLWxpbmUtdmFsdWUtd2l0aC1taW4taW5kZW50IGxp bmVzIHNlZWQgbWluLWluZGVudCkKKyAgICAoaWYgKG51bGw/IGxpbmVzKQorICAgICAgICAodmFs dWVzICcoKSAnKCkpCisgICAgICAgIChsZXQtdmFsdWVzICgoKGN1cnJlbnQtaW5kZW50IHZhbHVl KSAobGluZS1pbmRlbnRhdGlvbityZXN0IChmaXJzdCBsaW5lcykpKQorICAgICAgICAgICAgICAg ICAgICAgKChuZXh0LWxpbmUtaW5kZW50IG5leHQtbGluZS12YWx1ZSkKKyAgICAgICAgICAgICAg ICAgICAgICAoaWYgKG51bGw/IChjZHIgbGluZXMpKQorICAgICAgICAgICAgICAgICAgICAgICAg ICAodmFsdWVzICNmICIiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZS1pbmRlbnRh dGlvbityZXN0IChzZWNvbmQgbGluZXMpKSkpKQorICAgICAgICAgIChpZiAob3IgKG5vdCBuZXh0 LWxpbmUtaW5kZW50KSAoPCBuZXh0LWxpbmUtaW5kZW50IG1pbi1pbmRlbnQpCisgICAgICAgICAg ICAgICAgICAocmVnZXhwLWV4ZWMgY29uZGl0aW9uLXJ4IG5leHQtbGluZS12YWx1ZSkpCisgICAg ICAgICAgICAgICh2YWx1ZXMgKHJldmVyc2UgKGNvbnMgdmFsdWUgc2VlZCkpIChjZHIgbGluZXMp KQorICAgICAgICAgICAgICAobXVsdGktbGluZS12YWx1ZS13aXRoLW1pbi1pbmRlbnQgKGNkciBs aW5lcykgKGNvbnMgdmFsdWUgc2VlZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG1pbi1pbmRlbnQpKSkpKQorCisgIChsZXQtdmFsdWVzICgoKGN1cnJl bnQtaW5kZW50IHZhbHVlKSAobGluZS1pbmRlbnRhdGlvbityZXN0IChmaXJzdCBsaW5lcykpKSkK KyAgICAobXVsdGktbGluZS12YWx1ZS13aXRoLW1pbi1pbmRlbnQgbGluZXMgc2VlZCBjdXJyZW50 LWluZGVudCkpKQorCisoZGVmaW5lIChyZWFkLWNhYmFsIHBvcnQpCisgICJQYXJzZXMgYSBDYWJh bCBmaWxlIGZyb20gUE9SVC4gIFJldHVybiBhIGxpc3Qgb2YgbGlzdCBwYWlyczoKKworKCgoaGVh ZDEgc3ViLWhlYWQxIC4uLiBrZXkxKSAodmFsdWUpKQorICgoaGVhZDIgc3ViLWhlYWQyIC4uLiBr ZXkyKSAodmFsdWUyKSkKKyAuLi4pLgorCitXZSB0cnkgZG8gZGVkdWNlIHRoZSBDYWJhbCBmb3Jt YXQgZnJvbSB0aGUgZm9sbG93aW5nIGRvY3VtZW50OgoraHR0cHM6Ly93d3cuaGFza2VsbC5vcmcv Y2FiYWwvdXNlcnMtZ3VpZGUvZGV2ZWxvcGluZy1wYWNrYWdlcy5odG1sIAorCitLZXlzIGFyZSBj YXNlLWluc2Vuc2l0aXZlLiAgV2UgdGhlcmVmb3JlIGxvd2VyY2FzZSB0aGVtLiAgVmFsdWVzIGFy ZQorY2FzZS1zZW5zaXRpdmUuICBDdXJyZW50bHkgb25seSBpbmRlbnRhdGlvbi1zdHJ1Y3R1cmVk IGZpbGVzIGFyZSBwYXJzZWQuCitCcmFjZXMgc3RydWN0dXJlZCBmaWxlcyBhcmUgbm90IGhhbmRs ZWQuIiA7IiA8LSBtYWtlIGVtYWNzIGhhcHB5LgorICAoZGVmaW5lIChyZWFkLWFuZC10cmltLWxp bmUgcG9ydCkKKyAgICAobGV0ICgobGluZSAocmVhZC1saW5lIHBvcnQpKSkKKyAgICAgIChpZiAo c3RyaW5nPyBsaW5lKQorICAgICAgICAgIChzdHJpbmctdHJpbS1ib3RoIGxpbmUgI1xyZXR1cm4p CisgICAgICAgICAgbGluZSkpKQorCisgIChkZWZpbmUgKHN0cmlwLWluc2lnbmlmaWNhbnQtbGlu ZXMgcG9ydCkKKyAgICAobGV0IGxvb3AgKChsaW5lIChyZWFkLWFuZC10cmltLWxpbmUgcG9ydCkp CisgICAgICAgICAgICAgICAocmVzdWx0ICcoKSkpCisgICAgICAoY29uZAorICAgICAgICgoZW9m LW9iamVjdD8gbGluZSkKKyAgICAgICAgKHJldmVyc2UgcmVzdWx0KSkKKyAgICAgICAoKG9yIChz dHJpbmctbnVsbD8gbGluZSkgKGNvbW1lbnQtbGluZT8gbGluZSkpCisgICAgICAgIChsb29wIChy ZWFkLWFuZC10cmltLWxpbmUgcG9ydCkgcmVzdWx0KSkKKyAgICAgICAoZWxzZQorICAgICAgICAo bG9vcCAocmVhZC1hbmQtdHJpbS1saW5lIHBvcnQpIChjb25zIGxpbmUgcmVzdWx0KSkpKSkpCisK KyAgKGxldCBsb29wCisgICAgICAoKGxpbmVzIChzdHJpcC1pbnNpZ25pZmljYW50LWxpbmVzIHBv cnQpKQorICAgICAgIChpbmRlbnRzICAnKCkpIDsgb25seSBpbmNsdWRlcyBpbmRlbnRzIGF0IHN0 YXJ0IG9mIHNlY3Rpb24gaGVhZHMuCisgICAgICAgKHNlY3Rpb25zICcoKSkKKyAgICAgICAocmVz dWx0ICcoKSkpCisgICAgKGxldC12YWx1ZXMKKyAgICAgICAgKCgoY3VycmVudC1pbmRlbnQgbGlu ZSkKKyAgICAgICAgICAoaWYgKG51bGw/IGxpbmVzKQorICAgICAgICAgICAgICAodmFsdWVzIDAg IiIpCisgICAgICAgICAgICAgIChsaW5lLWluZGVudGF0aW9uK3Jlc3QgKGZpcnN0IGxpbmVzKSkp KQorICAgICAgICAgKChuZXh0LWxpbmUtaW5kZW50IG5leHQtbGluZSkKKyAgICAgICAgICAoaWYg KG9yIChudWxsPyBsaW5lcykgKG51bGw/IChjZHIgbGluZXMpKSkKKyAgICAgICAgICAgICAgKHZh bHVlcyAwICIiKQorICAgICAgICAgICAgICAobGluZS1pbmRlbnRhdGlvbityZXN0IChzZWNvbmQg bGluZXMpKSkpKQorICAgICAgKGlmIChudWxsPyBsaW5lcykKKyAgICAgICAgICAocmV2ZXJzZSBy ZXN1bHQpCisgICAgICAgICAgKGxldCAoKHJ4LXJlc3VsdCAoaGFzLWtleT8gbGluZSkpKQorICAg ICAgICAgICAgKGNvbmQKKyAgICAgICAgICAgICAocngtcmVzdWx0CisgICAgICAgICAgICAgIChs ZXQgKChrZXkgKHN0cmluZy1kb3duY2FzZSAobWF0Y2g6c3Vic3RyaW5nIHJ4LXJlc3VsdCAxKSkp CisgICAgICAgICAgICAgICAgICAgICh2YWx1ZSAobWF0Y2g6c3Vic3RyaW5nIHJ4LXJlc3VsdCAy KSkpCisgICAgICAgICAgICAgICAgKGNvbmQKKyAgICAgICAgICAgICAgICAgOzsgU2ltcGxlIHNp bmdsZSBsaW5lICJrZXk6IHZhbHVlIi4KKyAgICAgICAgICAgICAgICAgKCg9IG5leHQtbGluZS1p bmRlbnQgY3VycmVudC1pbmRlbnQpCisgICAgICAgICAgICAgICAgICAobG9vcCAoY2RyIGxpbmVz KSBpbmRlbnRzIHNlY3Rpb25zCisgICAgICAgICAgICAgICAgICAgICAgICAoY29ucworICAgICAg ICAgICAgICAgICAgICAgICAgIChsaXN0IChyZXZlcnNlIChjb25zIGtleSBzZWN0aW9ucykpIChs aXN0IHZhbHVlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQpKSkKKyAgICAgICAg ICAgICAgICAgOzsgTXVsdGkgbGluZSAia2V5OiB2YWx1ZVxuIHZhbHVlIGNvbnQuLi4iLgorICAg ICAgICAgICAgICAgICAoKD4gbmV4dC1saW5lLWluZGVudCBjdXJyZW50LWluZGVudCkKKyAgICAg ICAgICAgICAgICAgIChsZXQqLXZhbHVlcyAoKCh2YWx1ZS1sc3QgbGluZXMpCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAobXVsdGktbGluZS12YWx1ZSAoY2RyIGxpbmVzKQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlmIChzdHJp bmctbnVsbD8gdmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJygpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYCgsdmFsdWUpKSkpKQorICAgICAgICAgICAgICAgICAgICA7OyBt dWx0aS1saW5lLXZhbHVlIHJldHVybnMgdG8gdGhlIGZpcnN0IGxpbmUgYWZ0ZXIgdGhlCisgICAg ICAgICAgICAgICAgICAgIDs7IG11bHRpLXZhbHVlLgorICAgICAgICAgICAgICAgICAgICAobG9v cCBsaW5lcyBpbmRlbnRzIHNlY3Rpb25zCisgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25z CisgICAgICAgICAgICAgICAgICAgICAgICAgICAobGlzdCAocmV2ZXJzZSAoY29ucyBrZXkgc2Vj dGlvbnMpKSB2YWx1ZS1sc3QpCisgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQpKSkp CisgICAgICAgICAgICAgICAgIDs7IFNlY3Rpb24gZW5kZWQuCisgICAgICAgICAgICAgICAgIChl bHNlCisgICAgICAgICAgICAgICAgICA7OyBJbmRlbnRhdGlvbiBpcyByZWR1Y2VkLiBDaGVjayBi eSBob3cgbWFueSBsZXZlbHMuCisgICAgICAgICAgICAgICAgICAobGV0KiAoKGlkeCAoYW5kPT4g KGxpc3QtaW5kZXgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxhbWJk YSAoeCkgKD0gbmV4dC1saW5lLWluZGVudCB4KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW5kZW50cykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoY3V0ICsgPD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KGlmIChoYXMta2V5PyBuZXh0LWxpbmUpIDEgMCkpKSkKKyAgICAgICAgICAgICAgICAgICAgICAg ICAoc2VjCisgICAgICAgICAgICAgICAgICAgICAgICAgIChpZiBpZHgKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChkcm9wIHNlY3Rpb25zIGlkeCkKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChyYWlzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25kaXRp b24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCZtZXNzYWdlCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAobWVzc2FnZSAidW5hYmxlIHRvIHBhcnNlIENhYmFsIGZp bGUiKSkpKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgKGluZCAoZHJvcCBpbmRlbnRzIGlk eCkpKQorICAgICAgICAgICAgICAgICAgICAobG9vcCAoY2RyIGxpbmVzKSBpbmQgc2VjCisgICAg ICAgICAgICAgICAgICAgICAgICAgIChjb25zIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg KGxpc3QgKHJldmVyc2UgKGNvbnMga2V5IHNlY3Rpb25zKSkgKGxpc3QgdmFsdWUpKQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0KSkpKSkpKQorICAgICAgICAgICAgIDs7IFN0YXJ0 IG9mIGEgbmV3IHNlY3Rpb24uCisgICAgICAgICAgICAgKChvciAobnVsbD8gaW5kZW50cykKKyAg ICAgICAgICAgICAgICAgICg+IGN1cnJlbnQtaW5kZW50IChmaXJzdCBpbmRlbnRzKSkpCisgICAg ICAgICAgICAgIChsb29wIChjZHIgbGluZXMpIChjb25zIGN1cnJlbnQtaW5kZW50IGluZGVudHMp CisgICAgICAgICAgICAgICAgICAgIChjb25zIChzdHJpbmctZG93bmNhc2UgbGluZSkgc2VjdGlv bnMpIHJlc3VsdCkpCisgICAgICAgICAgICAgKGVsc2UKKyAgICAgICAgICAgICAgKGxvb3AgKGNk ciBsaW5lcykgaW5kZW50cworICAgICAgICAgICAgICAgICAgICAoY29ucyAoc3RyaW5nLWRvd25j YXNlIGxpbmUpIChjZHIgc2VjdGlvbnMpKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQpKSkp KSkpKQorCisoZGVmaW5lIGNvbmRpdGlvbi1yeAorICA7OyBSZWdleHAgZm9yIGNvbmRpdGlvbmFs cy4KKyAgKG1ha2UtcmVnZXhwICJeaWYgKyguKikkIikpCisKKyhkZWZpbmUgKHNwbGl0LXNlY3Rp b24gc2VjdGlvbikKKyAgIlNwbGl0IFNFQ1RJT04gaW4gaW5kaXZpZHVhbCB3b3JkcyB3aXRoIGV4 Y2VwdGlvbiBmb3IgdGhlIHByZWRpY2F0ZSBvZiBhbgorJ2lmJyBjb25kaXRpb25hbC4iCisgIChs ZXQgKChyeC1yZXN1bHQgKHJlZ2V4cC1leGVjIGNvbmRpdGlvbi1yeCBzZWN0aW9uKSkpCisgICAg KGlmIHJ4LXJlc3VsdAorICAgICAgICBgKCJpZiIgLChtYXRjaDpzdWJzdHJpbmcgcngtcmVzdWx0 IDEpKQorICAgICAgICAobWFwIG1hdGNoOnN1YnN0cmluZyAobGlzdC1tYXRjaGVzIHNlY3Rpb25z LXJ4IHNlY3Rpb24pKSkpKQorCisoZGVmaW5lIChqb2luLXNlY3Rpb25zIHNlYzEgc2VjMikKKyAg KGZvbGQtcmlnaHQgY29ucyBzZWMyIHNlYzEpKQorCisoZGVmaW5lIChwcmUtcHJvY2Vzcy1rZXlz IGtleSkKKyAgKG1hdGNoIGtleQorICAgICgoKSAnKCkpCisgICAgKChzZWMxIHJlc3QgLi4uKQor ICAgICAoam9pbi1zZWN0aW9ucyAoc3BsaXQtc2VjdGlvbiBzZWMxKSAocHJlLXByb2Nlc3Mta2V5 cyByZXN0KSkpKSkKKworKGRlZmluZSAocHJlLXByb2Nlc3MtZW50cnkta2V5cyBlbnRyeSkKKyAg KG1hdGNoIGVudHJ5CisgICAgKChrZXkgdmFsdWUpCisgICAgIChsaXN0IChwcmUtcHJvY2Vzcy1r ZXlzIGtleSkgdmFsdWUpKQorICAgICgoKSAnKCkpKSkKKworKGRlZmluZSAocHJlLXByb2Nlc3Mt ZW50cmllcy1rZXlzIGVudHJpZXMpCisgICJFTlRSSUVTIGlzIGEgbGlzdCBvZiBsaXN0IHBhaXJz LCBhIGtleXMgbGlzdCBhbmQgYSB2YWx1bGVzIGxpc3QsIGFzCitwcm9kdWNlZCBieSAncmVhZC1j YWJhbCcuICBTcGxpdCBlYWNoIGVsZW1lbnQgb2YgdGhlIGtleXMgbGlzdCBpbnRvIGluZGl2aWR1 YWwKK3dvcmRzLiAgVGhpcyBwcmUtcHJvY2Vzc2luZyBpcyB1c2VkIHRvIHJlYWQgZmxhZ3MuIgor ICAobWF0Y2ggZW50cmllcworICAgICgoZW50cnkgcmVzdCAuLi4pCisgICAgIChjb25zIChwcmUt cHJvY2Vzcy1lbnRyeS1rZXlzIGVudHJ5KQorICAgICAgICAgICAocHJlLXByb2Nlc3MtZW50cmll cy1rZXlzIHJlc3QpKSkKKyAgICAoKCkKKyAgICAgJygpKSkpCisKKyhkZWZpbmUgKGdldC1mbGFn cyBwcmUtcHJvY2Vzc2VkLWVudHJpZXMpCisgICJQUkUtUFJPQ0VTU0VELUVOVFJJRVMgaXMgYSBs aXN0IG9mIGxpc3QgcGFpcnMsIGEga2V5cyBsaXN0IGFuZCBhIHZhbHVlcworbGlzdCwgYXMgcHJv ZHVjZWQgYnkgJ3JlYWQtY2FiYWwnIGFuZCBwcmUtcHJvY2Vzc2VkIGJ5CisncHJlLXByb2Nlc3Mt ZW50cmllcy1rZXlzJy4gIFJldHVybiBhIGxpc3Qgb2YgcGFpcnMgd2l0aCB0aGUgbmFtZSBvZiBm bGFncyBhbmQKK3RoZWlyIGRlZmF1bHQgdmFsdWUgKG9uZSBvZiBcIkZhbHNlXCIgb3IgXCJUcnVl XCIpIGFzIHNwZWNpZmllZCBpbiB0aGUgQ2FiYWwgZmlsZToKKworKChcImZsYWcxLW5hbWVcIiAu IFwiRmFsc2Utb3ItVHJ1ZVwiKSAuLi4pLiIgOyIgPC0gbWFrZSBlbWFjcyBoYXBweQorICAobWF0 Y2ggcHJlLXByb2Nlc3NlZC1lbnRyaWVzCisgICAgKCgpICcoKSkKKyAgICAoKCgoImZsYWciIGZs YWctbmFtZSAiZGVmYXVsdCIpIChmbGFnLXZhbCkpIHJlc3QgLi4uKQorICAgICAoY29ucyAoY29u cyBmbGFnLW5hbWUgIGZsYWctdmFsKQorICAgICAgICAgICAoZ2V0LWZsYWdzIHJlc3QpKSkKKyAg ICAoKGVudHJ5IHJlc3QgLi4uICkKKyAgICAgKGdldC1mbGFncyByZXN0KSkKKyAgICAoXyAjZikp KQorCis7OyBQYXJ0IDI6Cis7OworOzsgRnVuY3Rpb25zIHRvIHJlYWQgaW5mb3JtYXRpb24gZnJv bSB0aGUgQ2FiYWwgb2JqZWN0IGNyZWF0ZWQgYnkgJ3JlYWQtY2FiYWwnCis7OyBhbmQgY29udmVy dCBDYWJhbCBmb3JtYXQgZGVwZW5kZW5jaWVzIGNvbmRpdGlvbmFscyBpbnRvIGVxdWl2YWxlbnQK Kzs7IFMtZXhwcmVzc2lvbnMuCisKKyhkZWZpbmUgdGVzdHMtcngKKyAgOzsgQ2FiYWwgdGVzdCBr ZXl3b3JkcworICAobWFrZS1yZWdleHAgIihvc3xhcmNofGZsYWd8aW1wbCkgKlxcKChbIGEtekEt WjAtOV8uPD49LV0rKVxcKSIpKQorCisoZGVmaW5lIHBhcmVucy1yeAorICA7OyBQYXJlbnRoZXNl cyB3aXRoaW4gY29uZGl0aW9ucworICAobWFrZS1yZWdleHAgIlxcKCguKylcXCkiKSkKKworKGRl ZmluZSBvci1yeAorICA7OyBPUiBvcGVyYXRvciBpbiBjb25kaXRpb25zCisgIChtYWtlLXJlZ2V4 cCAiICtcXHxcXHwgKyIpKQorCisoZGVmaW5lIGFuZC1yeAorICA7OyBBTkQgb3BlcmF0b3IgaW4g Y29uZGl0aW9ucworICAobWFrZS1yZWdleHAgIiArJiYgKyIpKQorCisoZGVmaW5lIG5vdC1yeAor ICA7OyBOT1Qgb3BlcmF0b3IgaW4gY29uZGl0aW9ucworICAobWFrZS1yZWdleHAgIl4hLisiKSkK KworKGRlZmluZSAoYmktb3AtYXJncyBzdHIgbWF0Y2gtbHN0KQorICAiUmV0dXJuIGEgbGlzdCB3 aXRoIHRoZSBhcmd1bWVudHMgb2YgKGxvZ2ljKSBiaWFucnkgb3BlcmF0b3JzLiAgTUFUQ0gtTFNU CitpcyB0aGUgcmVzdWx0IG9mICdsaXN0LW1hdGNoJyBhZ2FpbnN0IGEgYmluYXJ5IG9wZXJhdG9y IHJlZ2V4cCBvbiBTVFIuIgorICAobGV0ICgob3BlcmF0b3JzIChsZW5ndGggbWF0Y2gtbHN0KSkp CisgICAgKG1hcCAobGFtYmRhIChmcm9tIHRvKQorICAgICAgICAgICAoc3Vic3RyaW5nIHN0ciBm cm9tIHRvKSkKKyAgICAgICAgIChjb25zIDAgKG1hcCBtYXRjaDplbmQgbWF0Y2gtbHN0KSkKKyAg ICAgICAgIChhcHBlbmQgKG1hcCBtYXRjaDpzdGFydCBtYXRjaC1sc3QpIChsaXN0IChzdHJpbmct bGVuZ3RoIHN0cikpKSkpKQorCisoZGVmaW5lIChiaS1vcC0+c2V4cC1saWtlIGJpLW9wIGFyZ3Mp CisgICJCSS1PUCBpcyBhIHN0cmluZyB3aXRoIHRoZSBuYW1lIG9mIGEgU2NoZW1lIG9wZXJhdG9y IHdoaWNoIGluIGEgQ2FiYWwgZmlsZQoraXMgcmVwcmVzZW50ZWQgYnkgYSBiaW5hcnkgb3BlcmF0 b3IuICBBUkdTIGFyZSB0aGUgYXJndW1lbnRzIG9mIHNhaWQgb3BlcmF0b3IuCitSZXR1cm4gYSBz dHJpbmcgcmVwcmVzZW50aW5nIGFuIFMtZXhwcmVzc2lvbiBvZiB0aGUgb3BlcmF0b3IgYXBwbGll ZCB0byBpdHMKK2FyZ3VtZW50cy4iCisgIChpZiAoPSAobGVuZ3RoIGFyZ3MpIDEpCisgICAgICAo Zmlyc3QgYXJncykKKyAgICAgIChzdHJpbmctYXBwZW5kICIoIiBiaS1vcAorICAgICAgICAgICAg ICAgICAgICAgKGZvbGQgKGxhbWJkYSAoYXJnIHNlZWQpIChzdHJpbmctYXBwZW5kIHNlZWQgIiAi IGFyZykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiBhcmdzKSAiKSIpKSkKKworKGRl ZmluZSAobm90LT5zZXhwLWxpa2UgYXJnKQorICAiSWYgdGhlIHN0cmluZyBBUkcgaXMgcHJlZml4 ZWQgYnkgYSBDYWJhbCBuZWdhdGlvbiBvcGVyYXRvciwgY29udmVydCBpdCB0bworYW4gZXF1aXZh bGVudCBTY2hlbWUgUy1leHByZXNzaW9uIHN0cmluZy4iCisgIChpZiAocmVnZXhwLWV4ZWMgbm90 LXJ4IGFyZykKKyAgICAgIChzdHJpbmctYXBwZW5kICIobm90ICIKKyAgICAgICAgICAgICAgICAg ICAgIChzdWJzdHJpbmcgYXJnIDEgKHN0cmluZy1sZW5ndGggYXJnKSkKKyAgICAgICAgICAgICAg ICAgICAgICIpIikKKyAgICAgIGFyZykpCisKKyhkZWZpbmUgKHBhcmVucy1sZXNzLWNvbmQtPnNl eHAtbGlrZSBjb25kaXRpb25hbCkKKyAgIkNvbnZlcnQgYSBDYWJhbCBDT05ESVRJT05BTCBzdHJp bmcgaW50byBhIHN0cmluZyB3aXRoIGVxdWl2YWxlbnQgU2NoZW1lCitzeW50YXguICBUaGlzIHBy b2NlZHVyZSBhY2NlcHRzIG9ubHkgc2ltcGxlIGNvbmRpdGlvbmFscyB3aXRob3V0IHBhcmVudGhl c2VzLiIKKyAgOzsgVGhlIG91dGhlciBvcGVyYXRpb24gaXMgdGhlIG9uZSB3aXRoIHRoZSBsb3dl c3QgcHJpb3JpdHk6IE9SCisgIChiaS1vcC0+c2V4cC1saWtlCisgICAib3IiCisgICA7OyBlYWNo IE9SIGFyZ3VtZW50IG1heSBiZSBhbiBBTkQgb3BlcmF0aW9uCisgICAobWFwIChsYW1iZGEgKG9y LWFyZykKKyAgICAgICAgICAobGV0ICgobS1sc3QgKGxpc3QtbWF0Y2hlcyBhbmQtcnggb3ItYXJn KSkpCisgICAgICAgICAgICA7OyBpcyB0aGVyZSBhbiBBTkQgb3BlcmF0aW9uPworICAgICAgICAg ICAgKGlmICg+IChsZW5ndGggbS1sc3QpIDApCisgICAgICAgICAgICAgICAgKGJpLW9wLT5zZXhw LWxpa2UKKyAgICAgICAgICAgICAgICAgImFuZCIKKyAgICAgICAgICAgICAgICAgOzsgZXhwYW5k IE5PVCBvcGVyYXRvcnMgd2hlbiB0aGVyZSBhcmUgQU5EcworICAgICAgICAgICAgICAgICAobWFw IG5vdC0+c2V4cC1saWtlIChiaS1vcC1hcmdzIG9yLWFyZyBtLWxzdCkpKQorICAgICAgICAgICAg ICAgIDs7IC4uLiBhbmQgd2hlbiB0aGVyZSBhcmVuJ3QuCisgICAgICAgICAgICAgICAgKG5vdC0+ c2V4cC1saWtlIG9yLWFyZykpKSkKKyAgICAgICAgOzsgbGlzdCBvZiBPUiBhcmd1bWVudHMKKyAg ICAgICAgKGJpLW9wLWFyZ3MgY29uZGl0aW9uYWwgKGxpc3QtbWF0Y2hlcyBvci1yeCBjb25kaXRp b25hbCkpKSkpCisKKyhkZWZpbmUgdGVzdC1rZXl3b3JkLW9ybmFtZW50ICJfXyIpCisKKyhkZWZp bmUgKGNvbmRpdGlvbmFsLT5zZXhwLWxpa2UgY29uZGl0aW9uYWwpCisgICJDb252ZXJ0IGEgQ2Fi YWwgQ09ORElUSU9OQUwgc3RyaW5nIGludG8gYSBzdHJpbmcgd2l0aCBlcXVpdmFsZW50IFNjaGVt ZQorc3ludGF4LiIKKyAgOzsgRmlyc3Qgd2Ugc3Vic3RpdHV0ZSBURVNULUtFWVdPUkQtT1JOQU1F TlQgZm9yIHBhcmVudGhlc2VzIGFyb3VuZCB0ZXN0cworICA7OyBrZXl3b3JkcyBzbyB0aGF0IHBh cmVudGhlc2VzIGFyZSBvbmx5IHVzZWQgdG8gc2V0IHByZWNlZGVuY2VzLiBUaGlzCisgIDs7IHN1 YnN0YW50aWFsbHkgc2ltcGxpZnkgcGFyc2luZy4KKyAgKGxldCAoKGNvbmRpdGlvbmFsCisgICAg ICAgICAocmVnZXhwLXN1YnN0aXR1dGUvZ2xvYmFsICNmIHRlc3RzLXJ4IGNvbmRpdGlvbmFsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwcmUgMSB0ZXN0LWtleXdvcmQtb3Ju YW1lbnQgMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0LWtleXdvcmQt b3JuYW1lbnQgJ3Bvc3QpKSkKKyAgICAobGV0IGxvb3AgKChzdWItY29uZCBjb25kaXRpb25hbCkp CisgICAgICAobGV0ICgocngtcmVzdWx0IChyZWdleHAtZXhlYyBwYXJlbnMtcnggc3ViLWNvbmQp KSkKKyAgICAgICAgKGNvbmQKKyAgICAgICAgIChyeC1yZXN1bHQKKyAgICAgICAgICAocGFyZW5z LWxlc3MtY29uZC0+c2V4cC1saWtlCisgICAgICAgICAgIChzdHJpbmctYXBwZW5kCisgICAgICAg ICAgICAobWF0Y2g6cHJlZml4IHJ4LXJlc3VsdCkKKyAgICAgICAgICAgIChsb29wIChtYXRjaDpz dWJzdHJpbmcgcngtcmVzdWx0IDEpKQorICAgICAgICAgICAgKG1hdGNoOnN1ZmZpeCByeC1yZXN1 bHQpKSkpCisgICAgICAgICAoZWxzZQorICAgICAgICAgIChwYXJlbnMtbGVzcy1jb25kLT5zZXhw LWxpa2Ugc3ViLWNvbmQpKSkpKSkpCisKKyhkZWZpbmUgKGV2YWwtZmxhZ3Mgc2V4cC1saWtlLWNv bmQgZmxhZ3MpCisgICJTRVhQLUxJS0UtQ09ORCBpcyBhIHN0cmluZyByZXByZXNlbnRpbmcgYW4g Uy1leHByZXNzaW9uIGNvbmRpdGlvbmFsLiAgRkxBR1MKK2lzIGEgbGlzdCBvZiBmbGFnIG5hbWUg YW5kIHZhbHVlIHBhaXJzIGFzIHByb2R1Y2VkIGJ5ICdnZXQtZmxhZ3MnLiAgU3Vic3RpdHV0ZQor XCIjdFwiIG9yIFwiI2ZcIiBhY2NvcmRpbmcgdG8gdGhlIHZhbHVlIG9mIGZsYWdzLiAoRGVmYXVs dCB0byBcIlRydWVcIikuIgorICAoZm9sZC1yaWdodAorICAgKGxhbWJkYSAoZmxhZyBzZXhwKQor ICAgICAobWF0Y2ggZmxhZworICAgICAgICgobmFtZSAuIHZhbHVlKQorICAgICAgICAobGV0ICgo cnggKG1ha2UtcmVnZXhwCisgICAgICAgICAgICAgICAgICAgKHN0cmluZy1hcHBlbmQgImZsYWci IHRlc3Qta2V5d29yZC1vcm5hbWVudCBuYW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdGVzdC1rZXl3b3JkLW9ybmFtZW50KSkpKQorICAgICAgICAgIChyZWdleHAtc3Vic3Rp dHV0ZS9nbG9iYWwKKyAgICAgICAgICAgI2Ygcnggc2V4cAorICAgICAgICAgICAncHJlIChpZiAo c3RyaW5nLWNpPSB2YWx1ZSAiRmFsc2UiKSAiI2YiICIjdCIpICdwb3N0KSkpCisgICAgICAgKF8g c2V4cCkpKQorICAgc2V4cC1saWtlLWNvbmQKKyAgIChjb25zICcoIlthLXpBLVowLTlfLV0rIiAu ICJUcnVlIikgZmxhZ3MpKSkKKworKGRlZmluZSAoZXZhbC10ZXN0cy0+c2V4cCBzZXhwLWxpa2Ut Y29uZCkKKyAgIkluIHRoZSBzdHJpbmcgU0VYUC1MSUtFLUNPTkQgc3Vic3RpdHV0ZSB0ZXN0IGtl eXdvcmRzIFwib3MoLi4uKVwiIGFuZAorXCJhcmNoKC4uLilcIiB3aXRoIGVxdWl2YWxlbnQgU2No ZW1lIGNoZWNrcy4gIFJldHJ1biBhbiBTLWV4cHJlc3Npb24uIgorICAod2l0aC1pbnB1dC1mcm9t LXN0cmluZyAKKyAgICAgIChmb2xkLXJpZ2h0CisgICAgICAgKGxhbWJkYSAodGVzdCBzZXhwKQor ICAgICAgICAgKG1hdGNoIHRlc3QKKyAgICAgICAgICAgKCh0eXBlIHByZS1tYXRjaCBwb3N0LW1h dGNoKQorICAgICAgICAgICAgKGxldCAoKHJ4IChtYWtlLXJlZ2V4cAorICAgICAgICAgICAgICAg ICAgICAgICAoc3RyaW5nLWFwcGVuZCB0eXBlIHRlc3Qta2V5d29yZC1vcm5hbWVudCAiKFxcdysp IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0LWtleXdvcmQtb3Ju YW1lbnQpKSkpCisgICAgICAgICAgICAgIChyZWdleHAtc3Vic3RpdHV0ZS9nbG9iYWwKKyAgICAg ICAgICAgICAgICNmIHJ4IHNleHAKKyAgICAgICAgICAgICAgICdwcmUgcHJlLW1hdGNoIDIgcG9z dC1tYXRjaCAncG9zdCkpKQorICAgICAgICAgICAoXyBzZXhwKSkpCisgICAgICAgc2V4cC1saWtl LWNvbmQKKyAgICAgICA7OyAoJWN1cnJlbnQtc3lzdGVtKSByZXR1cm5zLCBlLmcuLCAieDg2XzY0 LWxpbnV4IiBvciAiaTY4Ni1saW51eCIuCisgICAgICAgJygoIihvc3xhcmNoKSIgIihzdHJpbmct bWF0Y2ggXCIiICJcIiAoJWN1cnJlbnQtc3lzdGVtKSkiKSkpCisgICAgcmVhZCkpCisKKyhkZWZp bmUgKGV2YWwtaW1wbCBzZXhwLWxpa2UtY29uZCkKKyAgIkNoZWNrIGZvciB0aGUgQ2FiYWwgdGVz dCBcImltcGwoLi4uKVwiIGluIHRoZSBzdHJpbmcgU0VYUC1MSUtFLUNPTkQuCitBc3N1bWUgdGhl IG1vZHVsZSBkZWNsYXJpbmcgdGhlIGdlbmVyYXRlZCBwYWNrYWdlIGluY2x1ZGVzIGEgbG9jYWwg dmFyaWFibGUKK2NhbGxlZCBcImhhc2tlbGwtaW1wbGVtZW50YXRpb25cIiB3aXRoIGEgc3RyaW5n IHZhbHVlIG9mIHRoZSBmb3JtIE5BTUUtVkVSU0lPTgorYWdhaW5zdCB3aGljaCB3ZSBjb21wYXJl LiIKKyAgKHdpdGgtb3V0cHV0LXRvLXN0cmluZworICAgIChsYW1iZGEgKCkKKyAgICAgICh3cml0 ZQorICAgICAgICh3aXRoLWlucHV0LWZyb20tc3RyaW5nIAorICAgICAgICAgICAoZm9sZC1yaWdo dAorICAgICAgICAgICAgKGxhbWJkYSAodGVzdCBzZXhwKQorICAgICAgICAgICAgICAobWF0Y2gg dGVzdAorICAgICAgICAgICAgICAgICgocHJlLW1hdGNoIHBvc3QtbWF0Y2gpCisgICAgICAgICAg ICAgICAgIChsZXQgKChyeC13aXRoLXZlcnNpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICht YWtlLXJlZ2V4cAorICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctYXBwZW5kCisgICAg ICAgICAgICAgICAgICAgICAgICAgICJpbXBsIiB0ZXN0LWtleXdvcmQtb3JuYW1lbnQKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIihbYS16QS1aMC05Xy1dKykgKihbPD49XSspICooWzAtOS5d KykgKiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdC1rZXl3b3JkLW9ybmFtZW50KSkp CisgICAgICAgICAgICAgICAgICAgICAgIChyeC13aXRob3V0LXZlcnNpb24KKyAgICAgICAgICAg ICAgICAgICAgICAgIChtYWtlLXJlZ2V4cAorICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJp bmctYXBwZW5kICJpbXBsIiB0ZXN0LWtleXdvcmQtb3JuYW1lbnQgIihcXHcrKSIKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0LWtleXdvcmQtb3JuYW1lbnQpKSkp CisgICAgICAgICAgICAgICAgICAgKGlmIChyZWdleHAtZXhlYyByeC13aXRoLXZlcnNpb24gc2V4 cCkKKyAgICAgICAgICAgICAgICAgICAgICAgKHJlZ2V4cC1zdWJzdGl0dXRlL2dsb2JhbAorICAg ICAgICAgICAgICAgICAgICAgICAgI2Ygcngtd2l0aC12ZXJzaW9uIHNleHAKKyAgICAgICAgICAg ICAgICAgICAgICAgICdwcmUgcHJlLW1hdGNoIDIgIiAiIHBvc3QtbWF0Y2ggIiBcIiIgMSAiLSIg MyAiXCIpIiAncG9zdCkKKyAgICAgICAgICAgICAgICAgICAgICAgKHJlZ2V4cC1zdWJzdGl0dXRl L2dsb2JhbAorICAgICAgICAgICAgICAgICAgICAgICAgI2Ygcngtd2l0aG91dC12ZXJzaW9uIHNl eHAKKyAgICAgICAgICAgICAgICAgICAgICAgICdwcmUgcHJlLW1hdGNoICItbWF0Y2ggXCIiIDEg IlwiICIgcG9zdC1tYXRjaCAiKSIgJ3Bvc3QpKSkpCisgICAgICAgICAgICAgICAgKF8gc2V4cCkp KQorICAgICAgICAgICAgc2V4cC1saWtlLWNvbmQKKyAgICAgICAgICAgICcoKCIoc3RyaW5nIiAi aGFza2VsbC1pbXBsZW1lbnRhdGlvbiIpKSkKKyAgICAgICAgIHJlYWQpKSkpKQorCisoZGVmaW5l IChldmFsLWNhYmFsLWtleXdvcmRzIHNleHAtbGlrZS1jb25kIGZsYWdzKQorICAoKGNvbXBvc2Ug ZXZhbC10ZXN0cy0+c2V4cCBldmFsLWltcGwgKGN1dCBldmFsLWZsYWdzIDw+IGZsYWdzKSkKKyAg IHNleHAtbGlrZS1jb25kKSkKKworKGRlZmluZSAoa2V5LT52YWx1ZXMgbWV0YSBrZXkpCisgICJN RVRBIGlzIHRoZSByZXByZXNlbnRhdGlvbiBvZiBhIENhYmFsIGZpbGUgYXMgcHJvZHVjZWQgYnkg J3JlYWQtY2FiYWwnLgorUmV0dXJuIHRoZSBsaXN0IG9mIHZhbHVlcyBhc3NvY2lhdGVkIHdpdGgg YSBzcGVjaWZpYyBLRVkgKGEgc3RyaW5nKS4iCisgIChtYXRjaCBtZXRhCisgICAgKCgpICcoKSkK KyAgICAoKCgoKD8gKGxhbWJkYSh4KSAoZXF1YWw/IHgga2V5KSkpKSB2KSByIC4uLikKKyAgICAg dikKKyAgICAoKChrIHYpIHIgLi4uKQorICAgICAoa2V5LT52YWx1ZXMgKGNkciBtZXRhKSBrZXkp KQorICAgIChfICJrZXkgTm90IGZvdW50IikpKQorCisoZGVmaW5lIChrZXktc3RhcnQtZW5kLT5l bnRyaWVzIG1ldGEga2V5LXN0YXJ0LXJ4IGtleS1lbmQtcngpCisgICJNRVRBIGlzIHRoZSByZXBy ZXNlbnRhdGlvbiBvZiBhIENhYmFsIGZpbGUgYXMgcHJvZHVjZWQgYnkgJ3JlYWQtY2FiYWwnLgor UmV0dXJuIGFsbCBlbnRyaWVzIHdob3NlIGtleXMgbGlzdCBzdGFydHMgd2l0aCBLRVktU1RBUlQg YW5kIGVuZHMgd2l0aAorS0VZLUVORC4iCisgIChsZXQgKChwcmVkCisgICAgICAgICAobGFtYmRh ICh4KQorICAgICAgICAgICAoYW5kIChyZWdleHAtZXhlYyBrZXktc3RhcnQtcnggKGZpcnN0IHgp KQorICAgICAgICAgICAgICAgIChyZWdleHAtZXhlYyBrZXktZW5kLXJ4IChsYXN0IHgpKSkpKSkK KyAgICAgICAgICAgOzsgKGVxdWFsPyAobGlzdCBrZXktc3RhcnQga2V5LWVuZCkgKGxpc3QgKGZp cnN0IHgpIChsYXN0IHgpKSkpKSkKKyAgICAobWF0Y2ggbWV0YQorICAgICAgKCgpICcoKSkKKyAg ICAgICgoKCg/IHByZWQgaykgdikgciAuLi4pCisgICAgICAgKGNvbnMgYCgsayAsdikKKyAgICAg ICAgICAgICAoa2V5LXN0YXJ0LWVuZC0+ZW50cmllcyAoY2RyIG1ldGEpIGtleS1zdGFydC1yeCBr ZXktZW5kLXJ4KSkpCisgICAgICAoKChrIHYpIHIgLi4uKQorICAgICAgIChrZXktc3RhcnQtZW5k LT5lbnRyaWVzIChjZHIgbWV0YSkga2V5LXN0YXJ0LXJ4IGtleS1lbmQtcngpKQorICAgICAgKF8g ImtleSBOb3QgZm91bnQiKSkpKQorCisoZGVmaW5lIGVsc2UtcngKKyAgKG1ha2UtcmVnZXhwICJe ZWxzZSQiKSkKKworKGRlZmluZSAoY291bnQtaWYtZWxzZSByeC1yZXN1bHQtbHMpCisgIChhcHBs eSArIChtYXAgKGxhbWJkYSAobSkgKGlmIG0gMSAwKSkgcngtcmVzdWx0LWxzKSkpCisKKyhkZWZp bmUgKGFuYWx5emUtZW50cnktY29uZCBlbnRyeSkKKyAgKGxldCogKChrZXlzIChmaXJzdCBlbnRy eSkpCisgICAgICAgICAodmFscyAoc2Vjb25kIGVudHJ5KSkKKyAgICAgICAgIChyeC1jb25kLXJl c3VsdAorICAgICAgICAgIChtYXAgKGN1dCByZWdleHAtZXhlYyBjb25kaXRpb24tcnggPD4pIGtl eXMpKQorICAgICAgICAgKHJ4LWVsc2UtcmVzdWx0CisgICAgICAgICAgKG1hcCAoY3V0IHJlZ2V4 cC1leGVjIGVsc2UtcnggPD4pIGtleXMpKQorICAgICAgICAgKGNvbmQtbm8gKGNvdW50LWlmLWVs c2UgcngtY29uZC1yZXN1bHQpKQorICAgICAgICAgKGVsc2Utbm8gKGNvdW50LWlmLWVsc2Ugcngt ZWxzZS1yZXN1bHQpKQorICAgICAgICAgKGNvbmQtaWR4IChsaXN0LWluZGV4IChsYW1iZGEgKHJ4 KSAoaWYgcnggI3QgI2YpKSByeC1jb25kLXJlc3VsdCkpCisgICAgICAgICAoZWxzZS1pZHggKGxp c3QtaW5kZXggKGxhbWJkYSAocngpIChpZiByeCAjdCAjZikpIHJ4LWVsc2UtcmVzdWx0KSkKKyAg ICAgICAgIChrZXktY29uZAorICAgICAgICAgICAgICAoY29uZAorICAgICAgICAgICAgICAgKChv ciAoYW5kIGNvbmQtaWR4IGVsc2UtaWR4ICg8IGNvbmQtaWR4IGVsc2UtaWR4KSkKKyAgICAgICAg ICAgICAgICAgICAgKGFuZCBjb25kLWlkeCAobm90IGVsc2UtaWR4KSkpCisgICAgICAgICAgICAg ICAgKG1hdGNoOnN1YnN0cmluZworICAgICAgICAgICAgICAgICAocmVjZWl2ZSAoaGVhZCB0YWls KQorICAgICAgICAgICAgICAgICAgICAgKHNwbGl0LWF0IHJ4LWNvbmQtcmVzdWx0IGNvbmQtaWR4 KSAoZmlyc3QgdGFpbCkpKSkKKyAgICAgICAgICAgICAgICgob3IgKGFuZCBjb25kLWlkeCBlbHNl LWlkeCAoPiBjb25kLWlkeCBlbHNlLWlkeCkpCisgICAgICAgICAgICAgICAgICAgIChhbmQgKG5v dCBjb25kLWlkeCkgZWxzZS1pZHgpKQorICAgICAgICAgICAgICAgIChtYXRjaDpzdWJzdHJpbmcK KyAgICAgICAgICAgICAgICAgKHJlY2VpdmUgKGhlYWQgdGFpbCkKKyAgICAgICAgICAgICAgICAg ICAgIChzcGxpdC1hdCByeC1lbHNlLXJlc3VsdCBlbHNlLWlkeCkgKGZpcnN0IHRhaWwpKSkpCisg ICAgICAgICAgICAgICAoZWxzZQorICAgICAgICAgICAgICAgICIiKSkpKQorICAgICh2YWx1ZXMg a2V5cyB2YWxzIHJ4LWNvbmQtcmVzdWx0CisgICAgICAgICAgICByeC1lbHNlLXJlc3VsdCBjb25k LW5vIGVsc2Utbm8ga2V5LWNvbmQpKSkKKworKGRlZmluZSAocmVtb3ZlLWNvbmQgZW50cnkgY29u ZCkKKyAgKG1hdGNoIGVudHJ5CisgICAgKChrIHYpCisgICAgIChsaXN0IChjZHIgKG1lbWJlciBj b25kIGspKSB2KSkpKQorCisoZGVmaW5lIChncm91cC1hbmQtcmVkdWNlLWxldmVsIGVudHJpZXMg Z3JvdXAgZ3JvdXAtY29uZCkKKyAgKGxldCBsb29wCisgICAgICAoKHRydWUtZ3JvdXAgZ3JvdXAp CisgICAgICAgKGZhbHNlLWdyb3VwICcoKSkKKyAgICAgICAoZW50cmllcyBlbnRyaWVzKSkKKyAg ICAoaWYgKG51bGw/IGVudHJpZXMpCisgICAgICAgICh2YWx1ZXMgKHJldmVyc2UgdHJ1ZS1ncm91 cCkgKHJldmVyc2UgZmFsc2UtZ3JvdXApIGVudHJpZXMpCisgICAgICAgIChsZXQqLXZhbHVlcyAo KChlbnRyeSkgKGZpcnN0IGVudHJpZXMpKQorICAgICAgICAgICAgICAgICAgICAgICgoa2V5cyB2 YWxzIHJ4LWNvbmQtcmVzdWx0IHJ4LWVsc2UtcmVzdWx0CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbmQtbm8gZWxzZS1ubyBrZXktY29uZCkKKyAgICAgICAgICAgICAgICAgICAgICAg KGFuYWx5emUtZW50cnktY29uZCBlbnRyeSkpKQorICAgICAgICAgIChjb25kCisgICAgICAgICAg ICgoYW5kICg+PSAoKyBjb25kLW5vIGVsc2Utbm8pIDEpIChzdHJpbmc9IGdyb3VwLWNvbmQga2V5 LWNvbmQpKQorICAgICAgICAgICAgKGxvb3AgKGNvbnMgKHJlbW92ZS1jb25kIGVudHJ5IGdyb3Vw LWNvbmQpIHRydWUtZ3JvdXApIGZhbHNlLWdyb3VwCisgICAgICAgICAgICAgICAgICAoY2RyIGVu dHJpZXMpKSkKKyAgICAgICAgICAgKChhbmQgKD49ICgrIGNvbmQtbm8gZWxzZS1ubykgMSkgKHN0 cmluZz0ga2V5LWNvbmQgImVsc2UiKSkKKyAgICAgICAgICAgIChsb29wIHRydWUtZ3JvdXAgKGNv bnMgKHJlbW92ZS1jb25kIGVudHJ5ICJlbHNlIikgZmFsc2UtZ3JvdXApCisgICAgICAgICAgICAg ICAgICAoY2RyIGVudHJpZXMpKSkKKyAgICAgICAgICAgKGVsc2UKKyAgICAgICAgICAgICh2YWx1 ZXMgKHJldmVyc2UgdHJ1ZS1ncm91cCkgKHJldmVyc2UgZmFsc2UtZ3JvdXApIGVudHJpZXMpKSkp KSkpCisKKyhkZWZpbmUgZGVwZW5kZW5jaWVzLXJ4CisgIChtYWtlLXJlZ2V4cCAiKFthLXpBLVow LTlfLV0rKSAqW14sXSosPyIpKQorCisoZGVmaW5lIChoYWNrYWdlLW5hbWUtPnBhY2thZ2UtbmFt ZSBuYW1lKQorICAoaWYgKHN0cmluZy1wcmVmaXg/IHBhY2thZ2UtbmFtZS1wcmVmaXggbmFtZSkK KyAgICAgIChzdHJpbmctZG93bmNhc2UgbmFtZSkKKyAgICAgIChzdHJpbmctYXBwZW5kIHBhY2th Z2UtbmFtZS1wcmVmaXggKHN0cmluZy1kb3duY2FzZSBuYW1lKSkpKQorCisoZGVmaW5lIChzcGxp dC1hbmQtZmlsdGVyLWRlcGVuZGVuY2llcyBscyBuYW1lcy10by1maWx0ZXIpCisgICJTcGxpdCB0 aGUgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgZGVwZW5kZW5jaWVzIExTIGNvbWluZyBmcm9tIHRo ZSBDYWJhbAorZmlsZSwgZmlsdGVyIHBhY2thZ2VzIGluY2x1ZGVkIGluIE5BTUVTLVRPLUZJTFRF UiBhbmQgcmV0dXJuIGEgbGlzdCB3aXRoCitpbnB1dHMgc3VpdGFibGUgZm9yIHRoZSBHdWl4IHBh Y2thZ2UuICBDdXJyZW50bHkgdGhlIHZlcnNpb24gaW5mb3JtYXRpb24gaXMKK2Rpc2NhcmRlZC4i CisgIChkZWZpbmUgKHNwbGl0LWF0LWNvbW1hLWFuZC1maWx0ZXIgZCkKKyAgICAoZm9sZAorICAg ICAobGFtYmRhIChtIHNlZWQpCisgICAgICAgKGxldCogKChuYW1lIChzdHJpbmctZG93bmNhc2Ug KG1hdGNoOnN1YnN0cmluZyBtIDEpKSkKKyAgICAgICAgICAgICAgKHBrZy1uYW1lIChoYWNrYWdl LW5hbWUtPnBhY2thZ2UtbmFtZSBuYW1lKSkpCisgICAgICAgICAoaWYgKG1lbWJlciBuYW1lIG5h bWVzLXRvLWZpbHRlcikKKyAgICAgICAgICAgICBzZWVkCisgICAgICAgICAgICAgKGNvbnMgKGxp c3QgcGtnLW5hbWUgKGxpc3QgJ3VucXVvdGUgKHN0cmluZy0+c3ltYm9sIHBrZy1uYW1lKSkpCisg ICAgICAgICAgICAgICAgICAgc2VlZCkpKSkKKyAgICAgJygpCisgICAgIChsaXN0LW1hdGNoZXMg ZGVwZW5kZW5jaWVzLXJ4IGQpKSkKKyAgICAKKyAgKGZvbGQgKGxhbWJkYSAoZCBwKSAoYXBwZW5k IChzcGxpdC1hdC1jb21tYS1hbmQtZmlsdGVyIGQpIHApKSAnKCkgIGxzKSkKKworKGRlZmluZSog KGRlcGVuZGVuY2llcy1jb25kLT5zZXhwIG1ldGEgIzprZXkgKGluY2x1ZGUtdGVzdC1kZXBlbmRl bmNpZXM/ICN0KSkKKyAgIk1FVEEgaXMgdGhlIHJlcHJlc2VudGF0aW9uIG9mIGEgQ2FiYWwgZmls ZSBhcyBwcm9kdWNlZCBieSAncmVhZC1jYWJhbCcuCitSZXR1cm4gYW4gUy1leHByZXNzaW9uIGNv bnRhaW5pbmcgdGhlIGxpc3Qgb2YgZGVwZW5kZW5jaWVzIGFzIGV4cGVjdGVkIGJ5IHRoZQorJ2lu cHV0cycgZmllbGQgb2YgYSBwYWNrYWdlLiAgVGhlIGdlbmVyYXRlZCBTLWV4cHJlc3Npb25zIG1h eSBpbmNsdWRlCitjb25kaXRpb25hbHMgYXMgZGVmaW5lZCBpbiB0aGUgY2FiYWwgZmlsZS4gIER1 cmluZyB0aGlzIHByb2Nlc3Mgd2UgZGlzY2FyZCB0aGUKK3ZlcnNpb24gaW5mb3JtYXRpb24gb2Yg dGhlIHBhY2thZ2VzLiIKKyAgKGRlZmluZSAodGFrZS1kZXBlbmRlbmNpZXMgbWV0YSkKKyAgICAo bGV0ICgoa2V5LXN0YXJ0LWV4ZSAobWFrZS1yZWdleHAgImV4ZWN1dGFibGUiKSkKKyAgICAgICAg ICAoa2V5LXN0YXJ0LWxpYiAobWFrZS1yZWdleHAgImxpYnJhcnkiKSkKKyAgICAgICAgICAoa2V5 LXN0YXJ0LXRlc3RzIChtYWtlLXJlZ2V4cCAidGVzdC1zdWl0ZSIpKQorICAgICAgICAgIChrZXkt ZW5kIChtYWtlLXJlZ2V4cCAiYnVpbGQtZGVwZW5kcyIpKSkKKyAgICAgIChhcHBlbmQKKyAgICAg ICAoa2V5LXN0YXJ0LWVuZC0+ZW50cmllcyBtZXRhIGtleS1zdGFydC1leGUga2V5LWVuZCkKKyAg ICAgICAoa2V5LXN0YXJ0LWVuZC0+ZW50cmllcyBtZXRhIGtleS1zdGFydC1saWIga2V5LWVuZCkK KyAgICAgICAoaWYgaW5jbHVkZS10ZXN0LWRlcGVuZGVuY2llcz8KKyAgICAgICAgICAgKGtleS1z dGFydC1lbmQtPmVudHJpZXMgbWV0YSBrZXktc3RhcnQtdGVzdHMga2V5LWVuZCkKKyAgICAgICAg ICAgJygpKSkpKQorCisgIChsZXQgKChmbGFncyAoZ2V0LWZsYWdzIChwcmUtcHJvY2Vzcy1lbnRy aWVzLWtleXMgbWV0YSkpKQorICAgICAgICAoYXVnbWVudGVkLWdoYy1zdGQtbGlicyAoYXBwZW5k IChrZXktPnZhbHVlcyBtZXRhICJuYW1lIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBnaGMtc3RhbmRhcmQtbGlicmFyaWVzKSkpCisgICAgKGRlbGV0ZS1kdXBsaWNh dGVzCisgICAgIChsZXQgbG9vcCAoKGVudHJpZXMgKHRha2UtZGVwZW5kZW5jaWVzIG1ldGEpKQor ICAgICAgICAgICAgICAgIChyZXN1bHQgJygpKSkKKyAgICAgICAoaWYgKG51bGw/IGVudHJpZXMp CisgICAgICAgICAgIChyZXZlcnNlIHJlc3VsdCkKKyAgICAgICAgICAgKGxldCotdmFsdWVzICgo KGVudHJ5KSAoZmlyc3QgZW50cmllcykpCisgICAgICAgICAgICAgICAgICAgICAgICAgKChrZXlz IHZhbHMgcngtY29uZC1yZXN1bHQgcngtZWxzZS1yZXN1bHQKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uZC1ubyBlbHNlLW5vIGtleS1jb25kKQorICAgICAgICAgICAgICAgICAg ICAgICAgICAoYW5hbHl6ZS1lbnRyeS1jb25kIGVudHJ5KSkpCisgICAgICAgICAgICAgKGNvbmQK KyAgICAgICAgICAgICAgKCg9ICgrIGNvbmQtbm8gZWxzZS1ubykgMCkKKyAgICAgICAgICAgICAg IChsb29wIChjZHIgZW50cmllcykKKyAgICAgICAgICAgICAgICAgICAgIChhcHBlbmQKKyAgICAg ICAgICAgICAgICAgICAgICAoc3BsaXQtYW5kLWZpbHRlci1kZXBlbmRlbmNpZXMgdmFscworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWdtZW50 ZWQtZ2hjLXN0ZC1saWJzKQorICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCkpKQorICAgICAg ICAgICAgICAoZWxzZQorICAgICAgICAgICAgICAgKGxldC12YWx1ZXMgKCgodHJ1ZS1ncm91cCBm YWxzZS1ncm91cCBlbnRyaWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ3JvdXAt YW5kLXJlZHVjZS1sZXZlbCBlbnRyaWVzICcoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBrZXktY29uZCkpCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKChjb25kLWZpbmFsKSAoZXZhbC1jYWJhbC1rZXl3b3JkcworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25kaXRpb25hbC0+c2V4cC1saWtlCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsYXN0IChzcGxpdC1z ZWN0aW9uIGtleS1jb25kKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZmxhZ3MpKSkKKyAgICAgICAgICAgICAgICAgKGxvb3AgZW50cmllcworICAgICAgICAg ICAgICAgICAgICAgICAoY29uZAorICAgICAgICAgICAgICAgICAgICAgICAgKChvciAoZXE/IGNv bmQtZmluYWwgI3QpIChlcXVhbD8gY29uZC1maW5hbCAnKG5vdCAjZikpKQorICAgICAgICAgICAg ICAgICAgICAgICAgIChhcHBlbmQgKGxvb3AgdHJ1ZS1ncm91cCAnKCkpIHJlc3VsdCkpCisgICAg ICAgICAgICAgICAgICAgICAgICAoKG9yIChlcT8gY29uZC1maW5hbCAjZikgKGVxdWFsPyBjb25k LWZpbmFsICcobm90ICN0KSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgKGFwcGVuZCAobG9v cCBmYWxzZS1ncm91cCAnKCkpIHJlc3VsdCkpCisgICAgICAgICAgICAgICAgICAgICAgICAoZWxz ZQorICAgICAgICAgICAgICAgICAgICAgICAgIChsZXQgKCh0cnVlLWdyb3VwLXJlc3VsdCAobG9v cCB0cnVlLWdyb3VwICcoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZhbHNl LWdyb3VwLXJlc3VsdCAobG9vcCBmYWxzZS1ncm91cCAnKCkpKSkKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIChjb25kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChhbmQgKG51bGw/ IHRydWUtZ3JvdXAtcmVzdWx0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChu dWxsPyBmYWxzZS1ncm91cC1yZXN1bHQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy ZXN1bHQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChudWxsPyBmYWxzZS1ncm91cC1y ZXN1bHQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zIGAodW5xdW90ZS1zcGxp Y2luZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh3aGVuICxjb25kLWZp bmFsICx0cnVlLWdyb3VwLXJlc3VsdCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHJlc3VsdCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChudWxsPyB0cnVlLWdy b3VwLXJlc3VsdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnMgYCh1bnF1b3Rl LXNwbGljaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVubGVzcyAs Y29uZC1maW5hbCAsZmFsc2UtZ3JvdXAtcmVzdWx0KSkKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcmVzdWx0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZWxzZQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29ucyBgKHVucXVvdGUtc3BsaWNpbmcKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaWYgLGNvbmQtZmluYWwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLHRydWUtZ3JvdXAtcmVzdWx0Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICxmYWxzZS1ncm91cC1yZXN1 bHQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQpKSkpKSkpKSkp KSkpKSkpCisKKzs7IFBhcnQgMzoKKzs7Cis7OyBSZXRyaXZlIHRoZSBkZXNpcmVkIHBhY2thZ2Ug YW5kIGl0cyBDYWJhbCBmaWxlIGZyb20KKzs7IGh0dHA6Ly9oYWNrYWdlLmhhc2tlbGwub3JnIGFu ZCBjb25zdHJ1Y3QgdGhlIEd1aXggcGFja2FnZSBTLWV4cHJlc3Npb24uCisKKyhkZWZpbmUgKGhh Y2thZ2UtZmV0Y2ggbmFtZS12ZXJzaW9uKQorICAiUmV0dXJuIHRoZSBDYWJhbCBmaWxlIGZvciB0 aGUgcGFja2FnZSBOQU1FLVZFUlNJT04sIG9yICNmIG9uIGZhaWx1cmUuICBJZgordGhlIHZlcnNp b24gcGFydCBpcyBvbWl0dGVkIGZyb20gdGhlIHBhY2thZ2UgbmFtZSwgdGhlbiByZXR1cm4gdGhl IGxhdGVzdAordmVyc2lvbi4iCisgIChsZXQqLXZhbHVlcyAoKChuYW1lIHZlcnNpb24pIChwYWNr YWdlLW5hbWUtPm5hbWUrdmVyc2lvbiBuYW1lLXZlcnNpb24pKQorICAgICAgICAgICAgICAgICgo dXJsKQorICAgICAgICAgICAgICAgICAoaWYgdmVyc2lvbgorICAgICAgICAgICAgICAgICAgICAg KHN0cmluZy1hcHBlbmQgImh0dHA6Ly9oYWNrYWdlLmhhc2tlbGwub3JnL3BhY2thZ2UvIgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSAiLSIgdmVyc2lvbiAiLyIgbmFt ZSAiLmNhYmFsIikKKyAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctYXBwZW5kICJodHRwOi8v aGFja2FnZS5oYXNrZWxsLm9yZy9wYWNrYWdlLyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG5hbWUgIi8iIG5hbWUgIi5jYWJhbCIpKSkpCisgICAgKGNhbGwtd2l0aC10ZW1w b3Jhcnktb3V0cHV0LWZpbGUKKyAgICAgKGxhbWJkYSAodGVtcCBwb3J0KQorICAgICAgIChhbmQg KHVybC1mZXRjaCB1cmwgdGVtcCkKKyAgICAgICAgICAgIChjYWxsLXdpdGgtaW5wdXQtZmlsZSB0 ZW1wIHJlYWQtY2FiYWwpKSkpKSkKKworKGRlZmluZSBzdHJpbmctPmxpY2Vuc2UKKyAgOzsgTGlz dCBvZiB2YWxpZCB2YWx1ZXMgZnJvbQorICA7OyBodHRwczovL3d3dy5oYXNrZWxsLm9yZworICA7 OyAvY2FiYWwvcmVsZWFzZS9jYWJhbC1sYXRlc3QvZG9jL0FQSS9DYWJhbC9EaXN0cmlidXRpb24t TGljZW5zZS5odG1sLgorICAobWF0Y2gtbGFtYmRhCisgICAoIkdQTC0yIiAnZ3BsMikKKyAgICgi R1BMLTMiICdncGwzKQorICAgKCJHUEwiICInZ3BsPz8iKQorICAgKCJBR1BMLTMiICdhZ3BsMykK KyAgICgiQUdQTCIgIidhZ3BsPz8iKQorICAgKCJMR1BMLTIuMSIgJ2xncGwyLjEpCisgICAoIkxH UEwtMyIgJ2xncGwzKQorICAgKCJMR1BMIiAiJ2xncGw/PyIpCisgICAoIkJTRDIiICdic2QtMikK KyAgICgiQlNEMyIgJ2JzZC0zKQorICAgKCJNSVQiICdleHBhdCkKKyAgICgiSVNDIiAnaXNjKQor ICAgKCJNUEwiICdtcGwyLjApCisgICAoIkFwYWNoZS0yLjAiICdhc2wyLjApCisgICAoKHgpIChz dHJpbmctPmxpY2Vuc2UgeCkpCisgICAoKGxzdCAuLi4pIGAobGlzdCAsQChtYXAgc3RyaW5nLT5s aWNlbnNlIGxzdCkpKQorICAgKF8gI2YpKSkKKworKGRlZmluZSogKGhhY2thZ2UtbW9kdWxlLT5z ZXhwIG1ldGEgIzprZXkgKGluY2x1ZGUtdGVzdC1kZXBlbmRlbmNpZXM/ICN0KSkKKyAgIlJldHVy biB0aGUgYHBhY2thZ2UnIFMtZXhwcmVzc2lvbiBmb3IgYSBDYWJhbCBwYWNrYWdlLiAgTUVUQSBp cyB0aGUKK3JlcHJlc2VudGF0aW9uIG9mIGEgQ2FiYWwgZmlsZSBhcyBwcm9kdWNlZCBieSAncmVh ZC1jYWJhbCcuIgorCisgIChkZWZpbmUgbmFtZQorICAgIChmaXJzdCAoa2V5LT52YWx1ZXMgbWV0 YSAibmFtZSIpKSkKKworICAoZGVmaW5lIHZlcnNpb24KKyAgICAoZmlyc3QgKGtleS0+dmFsdWVz IG1ldGEgInZlcnNpb24iKSkpCisgIAorICAoZGVmaW5lIGRlc2NyaXB0aW9uCisgICAgKGxldCot dmFsdWVzICgoKGRlc2NyaXB0aW9uKSAoa2V5LT52YWx1ZXMgbWV0YSAiZGVzY3JpcHRpb24iKSkK KyAgICAgICAgICAgICAgICAgICgobGluZXMgbGFzdCkKKyAgICAgICAgICAgICAgICAgICAoc3Bs aXQtYXQgZGVzY3JpcHRpb24gKC0gKGxlbmd0aCBkZXNjcmlwdGlvbikgMSkpKSkKKyAgICAgIChm b2xkLXJpZ2h0IChsYW1iZGEgKGxpbmUgc2VlZCkgKHN0cmluZy1hcHBlbmQgbGluZSAiXG4iIHNl ZWQpKQorICAgICAgICAgICAgICAgICAgKGZpcnN0IGxhc3QpIGxpbmVzKSkpCisgIAorICAoZGVm aW5lIHNvdXJjZS11cmwKKyAgICAoc3RyaW5nLWFwcGVuZCAiaHR0cDovL2hhY2thZ2UuaGFza2Vs bC5vcmcvcGFja2FnZS8iIG5hbWUKKyAgICAgICAgICAgICAgICAgICAiLyIgbmFtZSAiLSIgdmVy c2lvbiAiLnRhci5neiIpKQorCisgIDs7IFNldmVyYWwgcGFja2FnZXMgZG8gbm90IGhhdmUgYW4g b2ZmaWNpYWwgaG9tZS1wYWdlIG90aGVyIHRoYW4gb24gSGFja2FnZS4KKyAgKGRlZmluZSBob21l LXBhZ2UKKyAgICAobGV0ICgoaG9tZS1wYWdlLWVudHJ5IChrZXktPnZhbHVlcyBtZXRhICJob21l cGFnZSIpKSkKKyAgICAgIChpZiAobnVsbD8gaG9tZS1wYWdlLWVudHJ5KQorICAgICAgICAgIChz dHJpbmctYXBwZW5kICJodHRwOi8vaGFja2FnZS5oYXNrZWxsLm9yZy9wYWNrYWdlLyIgbmFtZSkK KyAgICAgICAgICAoZmlyc3QgaG9tZS1wYWdlLWVudHJ5KSkpKQorICAKKyAgKGRlZmluZSAobWF5 YmUtaW5wdXRzIGlucHV0LXR5cGUgaW5wdXRzKQorICAgIChtYXRjaCBpbnB1dHMKKyAgICAgICgo KQorICAgICAgICcoKSkKKyAgICAgICgoaW5wdXRzIC4uLikKKyAgICAgICAobGlzdCAobGlzdCBp bnB1dC10eXBlCisgICAgICAgICAgICAgICAgICAgKGxpc3QgJ3F1YXNpcXVvdGUgaW5wdXRzKSkp KSkpCisgIAorICAobGV0ICgodGFyYmFsbCAod2l0aC1zdG9yZSBzdG9yZQorICAgICAgICAgICAg ICAgICAgIChkb3dubG9hZC10by1zdG9yZSBzdG9yZSBzb3VyY2UtdXJsKSkpKQorICAgIGAocGFj a2FnZQorICAgICAgIChuYW1lICwoaGFja2FnZS1uYW1lLT5wYWNrYWdlLW5hbWUgbmFtZSkpCisg ICAgICAgKHZlcnNpb24gLHZlcnNpb24pCisgICAgICAgKHNvdXJjZSAob3JpZ2luCisgICAgICAg ICAgICAgICAgIChtZXRob2QgdXJsLWZldGNoKQorICAgICAgICAgICAgICAgICAodXJpIChzdHJp bmctYXBwZW5kICxAKGZhY3Rvcml6ZS11cmkgc291cmNlLXVybCB2ZXJzaW9uKSkpCisgICAgICAg ICAgICAgICAgIChzaGEyNTYKKyAgICAgICAgICAgICAgICAgIChiYXNlMzIKKyAgICAgICAgICAg ICAgICAgICAsKGlmIHRhcmJhbGwKKyAgICAgICAgICAgICAgICAgICAgICAgIChieXRldmVjdG9y LT5uaXgtYmFzZTMyLXN0cmluZyAoZmlsZS1zaGEyNTYgdGFyYmFsbCkpCisgICAgICAgICAgICAg ICAgICAgICAgICAiZmFpbGVkIHRvIGRvd25sb2FkIHRhciBhcmNoaXZlIikpKSkpCisgICAgICAg KGJ1aWxkLXN5c3RlbSBoYXNrZWxsLWJ1aWxkLXN5c3RlbSkKKyAgICAgICAsQChtYXliZS1pbnB1 dHMgJ2lucHV0cworICAgICAgICAgICAgICAgICAgICAgICAoZGVwZW5kZW5jaWVzLWNvbmQtPnNl eHAgbWV0YQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IzppbmNsdWRlLXRlc3QtZGVwZW5kZW5jaWVzPworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZS10ZXN0LWRlcGVuZGVuY2llcz8pKQorICAgICAg IChob21lLXBhZ2UgLGhvbWUtcGFnZSkKKyAgICAgICAoc3lub3BzaXMgLEAoa2V5LT52YWx1ZXMg bWV0YSAic3lub3BzaXMiKSkKKyAgICAgICAoZGVzY3JpcHRpb24gLGRlc2NyaXB0aW9uKQorICAg ICAgIChsaWNlbnNlICwoc3RyaW5nLT5saWNlbnNlIChrZXktPnZhbHVlcyBtZXRhICJsaWNlbnNl IikpKSkpKQorCisoZGVmaW5lKiAoaGFja2FnZS0+Z3VpeC1wYWNrYWdlIG1vZHVsZS1uYW1lCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICM6a2V5IChpbmNsdWRlLXRlc3QtZGVwZW5k ZW5jaWVzPyAjdCkpCisgICJGZXRjaCB0aGUgQ2FiYWwgZmlsZSBmb3IgUEFDS0FHRS1OQU1FIGZy b20gaGFja2FnZS5oYXNrZWxsLm9yZywgYW5kIHJldHVybgordGhlIGBwYWNrYWdlJyBTLWV4cHJl c3Npb24gY29ycmVzcG9uZGluZyB0byB0aGF0IHBhY2thZ2UsIG9yICNmIG9uIGZhaWx1cmUuIgor ICAobGV0ICgobW9kdWxlLW1ldGEgKGhhY2thZ2UtZmV0Y2ggbW9kdWxlLW5hbWUpKSkKKyAgICAo YW5kPT4gbW9kdWxlLW1ldGEgKGN1dCBoYWNrYWdlLW1vZHVsZS0+c2V4cCA8PgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICM6aW5jbHVkZS10ZXN0LWRlcGVuZGVuY2llcz8KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbmNsdWRlLXRlc3QtZGVwZW5kZW5jaWVzPykpKSkKKworOzs7 IGNhYmFsLnNjbSBlbmRzIGhlcmUKZGlmZiAtLWdpdCBhL3Rlc3RzL2hhY2thZ2Uuc2NtIGIvdGVz dHMvaGFja2FnZS5zY20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNiODU0 YwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2hhY2thZ2Uuc2NtCkBAIC0wLDAgKzEsMTM0IEBA Cis7OzsgR05VIEd1aXggLS0tIEZ1bmN0aW9uYWwgcGFja2FnZSBtYW5hZ2VtZW50IGZvciBHTlUK Kzs7OyBDb3B5cmlnaHQgwqkgMjAxNSBGZWRlcmljbyBCZWZmYSA8YmVmZmFAZmJlbmdpbmVlcmlu Zy5jaD4KKzs7OworOzs7IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBHdWl4LgorOzs7Cis7Ozsg R05VIEd1aXggaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeSBpdAorOzs7IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cis7OzsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0Cis7OzsgeW91ciBvcHRp b24pIGFueSBsYXRlciB2ZXJzaW9uLgorOzs7Cis7OzsgR05VIEd1aXggaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Cis7OzsgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorOzs7IE1FUkNI QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUK Kzs7OyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorOzs7Cis7 OzsgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UKKzs7OyBhbG9uZyB3aXRoIEdOVSBHdWl4LiAgSWYgbm90LCBzZWUgPGh0dHA6 Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisoZGVmaW5lLW1vZHVsZSAodGVzdC1oYWNrYWdl KQorICAjOnVzZS1tb2R1bGUgKGd1aXggaW1wb3J0IGhhY2thZ2UpCisgICM6dXNlLW1vZHVsZSAo Z3VpeCB0ZXN0cykKKyAgIzp1c2UtbW9kdWxlIChzcmZpIHNyZmktNjQpCisgICM6dXNlLW1vZHVs ZSAoaWNlLTkgbWF0Y2gpKQorCisoZGVmaW5lIHRlc3QtY2FiYWwtMQorICAibmFtZTogZm9vCit2 ZXJzaW9uOiAxLjAuMAoraG9tZXBhZ2U6IGh0dHA6Ly90ZXN0Lm9yZworc3lub3BzaXM6IHN5bm9w c2lzCitkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24KK2xpY2Vuc2U6IEJTRDMKK2V4ZWN1dGFibGUg Y2FiYWwKKyAgYnVpbGQtZGVwZW5kczoKKyAgICBIVFRQICAgICAgID49IDQwMDAuMi41ICYmIDwg NDAwMC4zLAorICAgIG10bCAgICAgICAgPj0gMi4wICAgICAgJiYgPCAzCisiKQorCis7OyBVc2Ug VEFCcyB0byBpbmRlbnQgbGluZXMgYW5kIHRvIHNlcGFyYXRlIGtleXMgZnJvbSB2YWx1ZS4KKyhk ZWZpbmUgdGVzdC1jYWJhbC0yCisgICJuYW1lOglmb28KK3ZlcnNpb246CTEuMC4wCitob21lcGFn ZToJaHR0cDovL3Rlc3Qub3JnCitzeW5vcHNpczoJc3lub3BzaXMKK2Rlc2NyaXB0aW9uOglkZXNj cmlwdGlvbgorbGljZW5zZToJQlNEMworZXhlY3V0YWJsZSBjYWJhbAorCWJ1aWxkLWRlcGVuZHM6 CUhUVFAgICAgICAgPj0gNDAwMC4yLjUgJiYgPCA0MDAwLjMsCisJCW10bCAgICAgICAgPj0gMi4w ICAgICAgJiYgPCAzCisiKQorCis7OyBVc2UgaW5kZW50YXRpb24gd2l0aCBjb21tYSBhcyBmb3Vu ZCwgZS5nLiwgaW4gJ2hhZGRvY2stYXBpJy4KKyhkZWZpbmUgdGVzdC1jYWJhbC0zCisgICJuYW1l OiBmb28KK3ZlcnNpb246IDEuMC4wCitob21lcGFnZTogaHR0cDovL3Rlc3Qub3JnCitzeW5vcHNp czogc3lub3BzaXMKK2Rlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbgorbGljZW5zZTogQlNEMworZXhl Y3V0YWJsZSBjYWJhbAorICAgIGJ1aWxkLWRlcGVuZHM6CisgICAgICAgIEhUVFAgICAgICAgPj0g NDAwMC4yLjUgJiYgPCA0MDAwLjMKKyAgICAgICwgbXRsICAgICAgICA+PSAyLjAgICAgICAmJiA8 IDMKKyIpCisKKyhkZWZpbmUgdGVzdC1jb25kLTEKKyAgIihvcyhkYXJ3aW4pIHx8ICEoZmxhZyhk ZWJ1ZykpKSAmJiBmbGFnKGNpcHMpIikKKworKGRlZmluZSByZWFkLWNhYmFsCisgIChAQCAoZ3Vp eCBpbXBvcnQgaGFja2FnZSkgcmVhZC1jYWJhbCkpCisKKyhkZWZpbmUgZXZhbC1jYWJhbC1rZXl3 b3JkcworICAoQEAgKGd1aXggaW1wb3J0IGhhY2thZ2UpIGV2YWwtY2FiYWwta2V5d29yZHMpKQor CisoZGVmaW5lIGNvbmRpdGlvbmFsLT5zZXhwLWxpa2UKKyAgKEBAIChndWl4IGltcG9ydCBoYWNr YWdlKSBjb25kaXRpb25hbC0+c2V4cC1saWtlKSkKKworKHRlc3QtYmVnaW4gImhhY2thZ2UiKQor CisoZGVmaW5lIChldmFsLXRlc3Qtd2l0aC1jYWJhbCB0ZXN0LWNhYmFsKQorICAobW9jaworICAg KChndWl4IGltcG9ydCBoYWNrYWdlKSBoYWNrYWdlLWZldGNoCisgICAgKGxhbWJkYSAobmFtZS12 ZXJzaW9uKQorICAgICAgKGNhbGwtd2l0aC1pbnB1dC1zdHJpbmcgdGVzdC1jYWJhbAorICAgICAg ICByZWFkLWNhYmFsKSkpCisgICAobWF0Y2ggKGhhY2thZ2UtPmd1aXgtcGFja2FnZSAiZm9vIikK KyAgICAgKCgncGFja2FnZQorICAgICAgICAoJ25hbWUgImdoYy1mb28iKQorICAgICAgICAoJ3Zl cnNpb24gIjEuMC4wIikKKyAgICAgICAgKCdzb3VyY2UKKyAgICAgICAgICgnb3JpZ2luCisgICAg ICAgICAgICgnbWV0aG9kICd1cmwtZmV0Y2gpCisgICAgICAgICAgICgndXJpICgnc3RyaW5nLWFw cGVuZAorICAgICAgICAgICAgICAgICAgImh0dHA6Ly9oYWNrYWdlLmhhc2tlbGwub3JnL3BhY2th Z2UvZm9vL2Zvby0iCisgICAgICAgICAgICAgICAgICAndmVyc2lvbgorICAgICAgICAgICAgICAg ICAgIi50YXIuZ3oiKSkKKyAgICAgICAgICAgKCdzaGEyNTYKKyAgICAgICAgICAgICgnYmFzZTMy CisgICAgICAgICAgICAgKD8gc3RyaW5nPyBoYXNoKSkpKSkKKyAgICAgICAgKCdidWlsZC1zeXN0 ZW0gJ2hhc2tlbGwtYnVpbGQtc3lzdGVtKQorICAgICAgICAoJ2lucHV0cworICAgICAgICAgKCdx dWFzaXF1b3RlCisgICAgICAgICAgKCgiZ2hjLWh0dHAiICgndW5xdW90ZSAnZ2hjLWh0dHApKQor ICAgICAgICAgICAoImdoYy1tdGwiICgndW5xdW90ZSAnZ2hjLW10bCkpKSkpCisgICAgICAgICgn aG9tZS1wYWdlICJodHRwOi8vdGVzdC5vcmciKQorICAgICAgICAoJ3N5bm9wc2lzICg/IHN0cmlu Zz8pKQorICAgICAgICAoJ2Rlc2NyaXB0aW9uICg/IHN0cmluZz8pKQorICAgICAgICAoJ2xpY2Vu c2UgJ2JzZC0zKSkKKyAgICAgICN0KQorICAgICAoeAorICAgICAgKHBrICdmYWlsIHggI2YpKSkp KQorCisodGVzdC1hc3NlcnQgImhhY2thZ2UtPmd1aXgtcGFja2FnZSB0ZXN0IDEiCisgIChldmFs LXRlc3Qtd2l0aC1jYWJhbCB0ZXN0LWNhYmFsLTEpKQorCisodGVzdC1hc3NlcnQgImhhY2thZ2Ut Pmd1aXgtcGFja2FnZSB0ZXN0IDIiCisgIChldmFsLXRlc3Qtd2l0aC1jYWJhbCB0ZXN0LWNhYmFs LTIpKQorCisodGVzdC1hc3NlcnQgImhhY2thZ2UtPmd1aXgtcGFja2FnZSB0ZXN0IDMiCisgIChl dmFsLXRlc3Qtd2l0aC1jYWJhbCB0ZXN0LWNhYmFsLTMpKQorCisodGVzdC1hc3NlcnQgImNvbmRp dGlvbmFsLT5zZXhwLWxpa2UiCisgIChtYXRjaAorICAgIChldmFsLWNhYmFsLWtleXdvcmRzCisg ICAgIChjb25kaXRpb25hbC0+c2V4cC1saWtlIHRlc3QtY29uZC0xKQorICAgICAnKCgiZGVidWci IC4gIkZhbHNlIikpKQorICAgICgoJ2FuZCAoJ29yICgnc3RyaW5nLW1hdGNoICJkYXJ3aW4iICgn JWN1cnJlbnQtc3lzdGVtKSkgKCdub3QgJyNmKSkgJyN0KQorICAgICAjdCkKKyAgICAoeAorICAg ICAocGsgJ2ZhaWwgeCAjZikpKSkKKworKHRlc3QtZW5kICJoYWNrYWdlIikKKworDAorKGV4aXQg KD0gKHRlc3QtcnVubmVyLWZhaWwtY291bnQgKHRlc3QtcnVubmVyLWN1cnJlbnQpKSAwKSkKLS0g CjIuMi4xCgo= --089e01494318b52a4b0512d18b54--