From owner-freebsd-mips@freebsd.org Fri Jul 10 15:31:26 2015 Return-Path: Delivered-To: freebsd-mips@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 3AA7B997037 for ; Fri, 10 Jul 2015 15:31:26 +0000 (UTC) (envelope-from m.vale@live.com.au) Received: from COL004-OMC4S8.hotmail.com (col004-omc4s8.hotmail.com [65.55.34.210]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (Client CN "*.outlook.com", Issuer "MSIT Machine Auth CA 2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id B64DB15BE for ; Fri, 10 Jul 2015 15:31:25 +0000 (UTC) (envelope-from m.vale@live.com.au) Received: from COL130-W6 ([65.55.34.200]) by COL004-OMC4S8.hotmail.com over TLS secured channel with Microsoft SMTPSVC(7.5.7601.23008); Fri, 10 Jul 2015 08:31:24 -0700 X-TMN: [jJlQji6BR/1JyszKDSiBu/gDU4rflw43] X-Originating-Email: [m.vale@live.com.au] Message-ID: Content-Type: multipart/mixed; boundary="_d99f99c4-0dc8-4bf3-9846-12fbb4c2aec4_" From: Michael Vale To: "freebsd-mips@freebsd.org" Subject: Cross Ports - working - find attached bsd.port.mk Date: Sat, 11 Jul 2015 02:01:24 +1030 Importance: Normal MIME-Version: 1.0 X-OriginalArrivalTime: 10 Jul 2015 15:31:24.0968 (UTC) FILETIME=[7B3F6280:01D0BB25] X-Mailman-Approved-At: Fri, 10 Jul 2015 15:49:39 +0000 X-Content-Filtered-By: Mailman/MimeDel 2.1.20 X-BeenThere: freebsd-mips@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: Porting FreeBSD to MIPS List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jul 2015 15:31:26 -0000 --_d99f99c4-0dc8-4bf3-9846-12fbb4c2aec4_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Okay=2C So=2C I'm submitting my work on cross ports. Here's what works and what doesn't work Clang support is there but GNU configure tries to append -march=3Dmips32r2 = to the command which causes the compiler check to fail. GCC support is there=2C except when a GNU configure script tries to link -l= gcc_s - apparently Adrian and bapt were meant to have fixed this in -head= =2C but I updated and still had the problem. So an example of the ports I've tried and worked are: sysutils/busyboxsecurity/dropbear Now when running bmake X_BUILD_FOR=3Dmips on dropbear=2C it fails "installi= ng" files into the stage. But if you run bmake again without X_BUILD_FOR= =3Dmips it "installs" those files into stage and one can continue along wit= h bmake install. It is assumed that one has built a world with freebsd-wifi-build. An example of running a bmake is SRCDIR=3D/home/masked/work/src bmake X_BUILD_FOR=3Dmips = --_d99f99c4-0dc8-4bf3-9846-12fbb4c2aec4_ Content-Type: application/octet-stream Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="bsd.port.mk" Iy0qLSB0YWItd2lkdGg6IDQ7IC0qLQojIGV4OnRzPTQKIwojICRGcmVlQlNEOiBoZWFkL01rL2Jz ZC5wb3J0Lm1rIDM5MTI5NSAyMDE1LTA3LTA0IDA4OjU2OjU0WiBiYXB0ICQKIwkkTmV0QlNEOiAk CiMKIwlic2QucG9ydC5tayAtIDk0MDgyMCBKb3JkYW4gSy4gSHViYmFyZC4KIwlUaGlzIGZpbGUg aXMgaW4gdGhlIHB1YmxpYyBkb21haW4uCiMKIyBQbGVhc2UgdmlldyBtZSB3aXRoIDQgY29sdW1u IHRhYnMhCgojIFRoaXMgaXMgdGhlIG1hc3RlciBmaWxlIGZvciB0aGUgbW9zdCBjb21tb24gZWxl bWVudHMgdG8gYWxsIHBvcnQKIyBNYWtlZmlsZSBpbiB0aGUgcG9ydHMgc3lzdGVtLiAgRm9yIGEg bW9yZSBnZW5lcmFsIG92ZXJ2aWV3IG9mIGl0cwojIHVzZSBhbmQgaW1wb3J0YW5jZSwgc2VlIHRo ZSBQb3J0ZXIncyBIYW5kYm9vay4KCiMgVGhlcmUgYXJlIHR3byBkaWZmZXJlbnQgdHlwZXMgb2Yg Im1haW50YWluZXJzIiBpbiB0aGUgcG9ydHMgZnJhbWV3b3JrLgojIFRoZSBtYWludGFpbmVyIGFs aWFzIG9mIHRoZSBic2QucG9ydC5tayBmaWxlIGlzIGxpc3RlZCBiZWxvdyBpbiB0aGUKIyBGcmVl QlNEX01BSU5UQUlORVIgZW50cnkuICBZb3Ugc2hvdWxkIGNvbnN1bHQgdGhlbSBpZiB5b3UgaGF2 ZSBhbnkKIyBxdWVzdGlvbnMvc3VnZ2VzdGlvbnMgcmVnYXJkaW5nIHRoaXMgZmlsZS4KIwojIERP IE5PVCBDT01NSVQgQ0hBTkdFUyBUTyBUSElTIEZJTEUgQlkgWU9VUlNFTEYsIEVWRU4gSUYgWU9V IERJRCBOT1QgR0VUCiMgQSBSRVNQT05TRSBGUk9NIFRIRSBNQUlOVEFJTkVSKFMpIFdJVEhJTiBB IFJFQVNPTkFCTEUgVElNRUZSQU1FISBBTEwKIyBVTkFVVEhPUklTRUQgQ0hBTkdFUyBXSUxMIEJF IFVOQ09ORElUSU9OQUxMWSBSRVZFUlRFRCEKCkZyZWVCU0RfTUFJTlRBSU5FUj0JcG9ydG1nckBG cmVlQlNELm9yZwoKIyBGb3IgZWFjaCBwb3J0LCB0aGUgTUFJTlRBSU5FUiB2YXJpYWJsZSBpcyB3 aGF0IHlvdSBzaG91bGQgY29uc3VsdCBmb3IKIyBjb250YWN0IGluZm9ybWF0aW9uIG9uIHRoZSBw ZXJzb24ocykgdG8gY29udGFjdCBpZiB5b3UgaGF2ZSBxdWVzdGlvbnMvCiMgc3VnZ2VzdGlvbnMg YWJvdXQgdGhhdCBzcGVjaWZpYyBwb3J0LiAgQnkgZGVmYXVsdCAoaWYgbm8gTUFJTlRBSU5FUgoj IGlzIGxpc3RlZCksIGEgcG9ydCBpcyBtYWludGFpbmVkIGJ5IHRoZSBzdWJzY3JpYmVycyBvZiB0 aGUgcG9ydHNARnJlZUJTRC5vcmcKIyBtYWlsaW5nIGxpc3QsIGFuZCBhbnkgY29ycmVzcG9uZGVu Y2Ugc2hvdWxkIGJlIGRpcmVjdGVkIHRoZXJlLgojCiMgTUFJTlRBSU5FUgktIFRoZSBlLW1haWwg YWRkcmVzcyBvZiB0aGUgY29udGFjdCBwZXJzb24gZm9yIHRoaXMgcG9ydC4KIwkJCQkgIERlZmF1 bHQ6IHBvcnRzQEZyZWVCU0Qub3JnCiMKIyBUaGVzZSBhcmUgbWV0YS12YXJpYWJsZXMgdGhhdCBh cmUgYXV0b21hdGljYWxseSBzZXQgdG8gdGhlIHN5c3RlbQojIHlvdSBhcmUgcnVubmluZyBvbi4g IFRoZXNlIGFyZSBwcm92aWRlZCBpbiBjYXNlIHlvdSBuZWVkIHRvIHRha2UKIyBkaWZmZXJlbnQg YWN0aW9ucyBmb3IgZGlmZmVyZW50IHZhbHVlcy4KIwojIEFSQ0gJCQktIFRoZSBhcmNoaXRlY3R1 cmUgb2YgdGhlIHRhcmdldCBtYWNoaW5lLCBzdWNoIGFzIHdvdWxkIGJlCiMJCQkJICByZXR1cm5l ZCBieSAidW5hbWUgLXAiLgojIE9QU1lTCQkJLSBQb3J0YWJpbGl0eSBjbGF1c2UuICBUaGlzIGlz IHRoZSBvcGVyYXRpbmcgc3lzdGVtIHRoZQojCQkJCSAgbWFrZWZpbGUgaXMgYmVpbmcgdXNlZCBv bi4gIEF1dG9tYXRpY2FsbHkgc2V0IHRvCiMJCQkJICAiRnJlZUJTRCwiICJOZXRCU0QsIiBvciAi T3BlbkJTRCIgYXMgYXBwcm9wcmlhdGUuCiMgT1NSRUwJCQktIFRoZSByZWxlYXNlIHZlcnNpb24g KG51bWVyaWMpIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtLgojIE9TVkVSU0lPTgkJLSBUaGUgdmFs dWUgb2YgX19GcmVlQlNEX3ZlcnNpb24uCiMKIyBUaGlzIGlzIHRoZSBiZWdpbm5pbmcgb2YgdGhl IGxpc3Qgb2YgYWxsIHZhcmlhYmxlcyB0aGF0IG5lZWQgdG8gYmUKIyBkZWZpbmVkIGluIGEgcG9y dCwgbGlzdGVkIGluIG9yZGVyIHRoYXQgdGhleSBzaG91bGQgYmUgaW5jbHVkZWQKIyB0byBmaXQg aW4gd2l0aCBleGlzdGluZyBjb252ZW50aW9ucy4gIChFeGNlcHRpb246IE1BSU5UQUlORVIgYWN0 dWFsbHkKIyBzaG91bGQgYXBwZWFyIGFmdGVyIEVYVFJBQ1RfT05MWSBhbmQgYmVmb3JlIE1BU1RF Ul9TSVRFX0JBQ0tVUCkuCiMKIyBUaGVzZSB2YXJpYWJsZXMgYXJlIHVzZWQgdG8gaWRlbnRpZnkg eW91ciBwb3J0LgojCiMgUE9SVE5BTUUJCS0gTmFtZSBvZiBzb2Z0d2FyZS4gIE1hbmRhdG9yeS4K IyBQT1JUVkVSU0lPTgktIFZlcnNpb24gb2Ygc29mdHdhcmUuICBNYW5kYXRvcnkgd2hlbiBubyBE SVNUVkVSU0lPTiBpcyBnaXZlbi4KIyBQT1JUUkVWSVNJT04JLSBWZXJzaW9uIG9mIHBvcnQuICBP cHRpb25hbC4gIENvbW1vbmx5IHVzZWQgdG8gaW5kaWNhdGUKIwkJCQkgIHRoYXQgYW4gdXBkYXRl IGhhcyBoYXBwZW5lZCB0aGF0IGFmZmVjdHMgdGhlIHBvcnQKIwkJCQkgIGZyYW1ld29yayBpdHNl bGYsIGJ1dCBub3QgdGhlIGRpc3RyaWJ1dGVkIHNvZnR3YXJlCiMJCQkJICAoZS5nLiwgbG9jYWwg cGF0Y2hlcyBvciBNYWtlZmlsZSBjaGFuZ2VzKS4KIyBQT1JURVBPQ0gJCS0gT3B0aW9uYWwuICBJ biBjZXJ0YWluIG9kZCBjYXNlcywgdGhlIFBPUlRSRVZJU0lPTiBsb2dpYwojCQkJCSAgY2FuIGJl IGZvb2xlZCBieSBwb3J0cyB0aGF0IGFwcGVhciB0byBnbyBiYWNrd2FyZHMKIwkJCQkgIG51bWVy aWNhbGx5IChlLmcuIGlmIHBvcnQtMC4zIGlzIG5ld2VyIHRoYW4gcG9ydC0xOTk4KS4KIwkJCQkg IEluIHRoaXMgY2FzZSwgaW5jcmVtZW50aW5nIFBPUlRFUE9DSCBmb3JjZXMgdGhlIHJldmlzaW9u LgojCQkJCSAgRGVmYXVsdDogMCAobm8gZWZmZWN0KS4KIyBQS0dOQU1FCQktIEFsd2F5cyBkZWZp bmVkIGFzCiMJCQkJICAke1BLR05BTUVQUkVGSVh9JHtQT1JUTkFNRX0ke1BLR05BTUVTVUZGSVh9 LSR7UE9SVFZFUlNJT059LgojCQkJCSAgRG8gbm90IGRlZmluZSB0aGlzIGluIHlvdXIgTWFrZWZp bGUuCiMgUEtHTkFNRVBSRUZJWAktIFByZWZpeCB0byBzcGVjaWZ5IHRoYXQgcG9ydCBpcyBsYW5n dWFnZS1zcGVjaWZpYywgZXRjLgojCQkJCSAgT3B0aW9uYWwuCiMgUEtHTkFNRVNVRkZJWAktIFN1 ZmZpeCB0byBzcGVjaWZ5IGNvbXBpbGF0aW9uIG9wdGlvbnMgb3IgYSB2ZXJzaW9uCiMJCQkJICBk ZXNpZ25hdG9yIChpbiBjYXNlIHRoZXJlIGFyZSBkaWZmZXJlbnQgdmVyc2lvbnMgb2YKIwkJCQkg IG9uZSBwb3J0IGFzIGlzIHRoZSBjYXNlIGZvciBUY2wpLgojCQkJCSAgT3B0aW9uYWwuCiMgUEtH VkVSU0lPTgktIEFsd2F5cyBkZWZpbmVkIGFzICR7UE9SVFZFUlNJT059LgojCQkJCSAgRG8gbm90 IGRlZmluZSB0aGlzIGluIHlvdXIgTWFrZWZpbGUuCiMgVU5JUVVFTkFNRQktIEEgbmFtZSBmb3Ig eW91ciBwb3J0IHRoYXQgaXMgZ2xvYmFsbHkgdW5pcXVlLiAgQnkgZGVmYXVsdCwKIwkJCQkgIHRo aXMgaXMgc2V0IHRvICR7TEFURVNUX0xJTkt9IHdoZW4gTEFURVNUX0xJTksgaXMgc2V0LAojCQkJ CSAgYW5kIHRvICR7UEtHTkFNRVBSRUZJWH0ke1BPUlROQU1FfSBvdGhlcndpc2UuCiMgRElTVFZF UlNJT04JLSBWZW5kb3IgdmVyc2lvbiBvZiB0aGUgZGlzdHJpYnV0aW9uLgojCQkJCSAgRGVmYXVs dDogJHtQT1JUVkVSU0lPTn0KIyBESVNUTkFNRQkJLSBOYW1lIG9mIHBvcnQgb3IgZGlzdHJpYnV0 aW9uIHVzZWQgaW4gZ2VuZXJhdGluZwojCQkJCSAgV1JLU1JDIGFuZCBESVNURklMRVMgYmVsb3cu CiMJCQkJICBEZWZhdWx0OgojCQkJCSAgJHtQT1JUTkFNRX0tJHtESVNUVkVSU0lPTlBSRUZJWH0k e0RJU1RWRVJTSU9OfSR7RElTVFZFUlNJT05TVUZGSVh9CiMgQ0FURUdPUklFUwktIEEgbGlzdCBv ZiBkZXNjcmlwdGl2ZSBjYXRlZ29yaWVzIGludG8gd2hpY2ggdGhpcyBwb3J0IGZhbGxzLgojCQkJ CSAgTWFuZGF0b3J5LgojCiMgVGhlc2UgdmFyaWFibGUgZGVzY3JpYmUgaG93IHRvIGZldGNoIGZp bGVzIHJlcXVpcmVkIGZvciBidWlsZGluZyB0aGUgcG9ydC4KIwojIERJU1RGSUxFUwkJLSBOYW1l KHMpIG9mIGFyY2hpdmUgZmlsZShzKSBjb250YWluaW5nIGRpc3RyaWJ1dGlvbi4KIwkJCQkgIFNl dCB0aGlzIHRvIGFuIGVtcHR5IHN0cmluZyBpZiB0aGUgcG9ydCBkb2Vzbid0IHJlcXVpcmUgaXQu CiMJCQkJICBEZWZhdWx0OiAke0RJU1ROQU1FfSR7RVhUUkFDVF9TVUZYfQojIEVYVFJBQ1RfU1VG WAktIFN1ZmZpeCBmb3IgYXJjaGl2ZSBuYW1lcwojCQkJCSAgWW91IG5ldmVyIGhhdmUgdG8gc2V0 IGJvdGggRElTVEZJTEVTIGFuZCBFWFRSQUNUX1NVRlguCiMJCQkJICBEZWZhdWx0OiAudGFyLmJ6 MiBpZiBVU0VTPXRhcjpiemlwMiBpcyBzZXQsIC50YXIueHogaWYKIwkJCQkgIFVTRVM9dGFyOnh6 IFVTRV9YWiBpcyBzZXQsIC50YXIuZ3ogb3RoZXJ3aXNlKS4KIyBNQVNURVJfU0lURVMJLSBQcmlt YXJ5IGxvY2F0aW9uKHMpIGZvciBkaXN0cmlidXRpb24gZmlsZXMgaWYgbm90IGZvdW5kCiMJCQkJ ICBsb2NhbGx5LiAgU2VlIGJzZC5zaXRlcy5tayBmb3IgY29tbW9uIGNob2ljZXMgZm9yCiMJCQkJ ICBNQVNURVJfU0lURVMuCiMgTUFTVEVSX1NJVEVfU1VCRElSCiMJCQkJLSBTdWJkaXJlY3Rvcnkg b2YgTUFTVEVSX1NJVEVTLiBXaWxsIHNvbWV0aW1lcyBuZWVkIHRvIGJlCiMJCQkJICBzZXQgdG8g JHtQT1JUTkFNRX0gZm9yIChlLmcuKSBNQVNURVJfU0lURV9TT1VSQ0VGT1JHRS4KIwkJCQkgIE9u bHkgZ3VhcmFudGVlZCB0byB3b3JrIGZvciBjaG9pY2VzIG9mICR7TUFTVEVSX1NJVEVTfQojCQkJ CSAgZGVmaW5lZCBpbiBic2Quc2l0ZXMubWsuCiMJCQkJICBEZWZhdWx0OiBub3Qgc2V0LgojIFBB VENIRklMRVMJLSBOYW1lKHMpIG9mIGFkZGl0aW9uYWwgZmlsZXMgdGhhdCBjb250YWluIGRpc3Ry aWJ1dGlvbgojCQkJCSAgcGF0Y2hlcy4gTWFrZSB3aWxsIGxvb2sgZm9yIHRoZW0gYXQgUEFUQ0hf U0lURVMgKHNlZSBiZWxvdykuCiMJCQkJICBUaGV5IHdpbGwgYXV0b21hdGljYWxseSBiZSB1bmNv bXByZXNzZWQgYmVmb3JlIHBhdGNoaW5nIGlmCiMJCQkJICB0aGUgbmFtZXMgZW5kIHdpdGggIi5n eiIsICIuYnoyIiBvciAiLloiLgojCQkJCSAgRm9yIGVhY2ggZmlsZSB5b3UgY2FuIG9wdGlvbmFs bHkgc3BlY2lmeSBhIHN0cmlwCiMJCQkJICBmbGFnIG9mIHBhdGNoKDEpIGFmdGVyIGEgY29sb24g aWYgaXQgaGFzIGEgZGlmZmVyZW50CiMJCQkJICBiYXNlIGRpcmVjdG9yeSwgZS5nLiAiZmlsZTEg ZmlsZTI6LXAxIGZpbGUzIi4KIwkJCQkgIFlvdSBjYW4gYWxzbyB1c2UgYSA6Z3JvdXAgYXQgdGhl IGVuZCBmb3IgbWF0Y2hpbmcgdXAgdG8KIwkJCQkgIGRpc3QgZmlsZSBncm91cHMuIFNlZSBQb3J0 ZXJzIEhhbmRib29rIGZvciBtb3JlIGluZm9ybWF0aW9uLgojCQkJCSAgU3ludGF4OiBQQVRDSEZJ TEVTPSBwYXRjaFs6LXBYXVs6Z3JvdXBdCiMJCQkJICBEZWZhdWx0OiBub3Qgc2V0LgojIFBBVENI X1NJVEVTCS0gUHJpbWFyeSBsb2NhdGlvbihzKSBmb3IgZGlzdHJpYnV0aW9uIHBhdGNoIGZpbGVz CiMJCQkJICBpZiBub3QgZm91bmQgbG9jYWxseS4KIyBESVNUX1NVQkRJUgktIFN1ZmZpeCB0byAk e0RJU1RESVJ9LiAgSWYgc2V0LCBhbGwgJHtESVNURklMRVN9IGFuZAojCQkJCSAgJHtQQVRDSEZJ TEVTfSB3aWxsIGJlIHB1dCBpbiB0aGlzIHN1YmRpcmVjdG9yeSBvZgojCQkJCSAgJHtESVNURElS fSAoc2VlIGJlbG93KS4gIEFsc28gdGhleSB3aWxsIGJlIGZldGNoZWQgaW4gdGhpcwojCQkJCSAg c3ViZGlyZWN0b3J5IGZyb20gRnJlZUJTRCBtaXJyb3Igc2l0ZXMuCiMgQUxMRklMRVMJCS0gQWxs IG9mICR7RElTVEZJTEVTfSBhbmQgJHtQQVRDSEZJTEVTfS4KIyBOT0ZFVENIRklMRVMJLSBJZiBz ZXQsIGRvbid0IGRvd25sb2FkIHRoZXNlIGZpbGVzIGZyb20gdGhlICR7TUFTVEVSX1NJVEVTfQoj CQkJCSAgb3IgJHtNQVNURVJfU0lURV9CQUNLVVB9IChidXQgZG8gZnJvbQojCQkJCSAgJHtNQVNU RVJfU0lURV9PVkVSUklERX0pCiMgRVhUUkFDVF9PTkxZCS0gSWYgc2V0LCBhIHN1YnNldCBvZiAk e0RJU1RGSUxFU30geW91IHdhbnQgdG8KIwkJCQkgIGFjdHVhbGx5IGV4dHJhY3QuCiMgQUxXQVlT X0tFRVBfRElTVEZJTEVTCiMJCQkJLSBJZiBzZXQsIHRoZSBwYWNrYWdlIGJ1aWxkaW5nIGNsdXN0 ZXIgd2lsbCBzYXZlIHRoZSBkaXN0ZmlsZXMKIwkJCQkgIGFsb25nIHdpdGggdGhlIHBhY2thZ2Vz LiBUaGlzIG1heSBiZSByZXF1aXJlZCB0byBjb21wbHkgd2l0aAojCQkJCSAgc29tZSBsaWNlbnNl cywgZS5nLiBHUEwgaW4gc29tZSBjYXNlcy4KIwkJCQkgIERlZmF1bHQ6IG5vdCBzZXQuCiMKIyAo Tk9URTogYnkgY29udmVudGlvbiwgdGhlIE1BSU5UQUlORVIgZW50cnkgKHNlZSBhYm92ZSkgc2hv dWxkIGdvIGhlcmUuKQojCiMgVGhlc2UgdmFyaWFibGVzIGFyZSB0eXBpY2FsbHkgc2V0IGluIC9l dGMvbWFrZS5jb25mIHRvIGluZGljYXRlCiMgdGhlIHVzZXIncyBwcmVmZXJyZWQgbG9jYXRpb24g dG8gZmV0Y2ggZmlsZXMgZnJvbS4gIFlvdSBzaG91bGQKIyByYXJlbHkgbmVlZCB0byBzZXQgdGhl c2UuCiMKIyBNQVNURVJfU0lURV9CQUNLVVAKIwkJCQktIEJhY2t1cCBsb2NhdGlvbihzKSBmb3Ig ZGlzdHJpYnV0aW9uIGZpbGVzIGFuZCBwYXRjaAojCQkJCSAgZmlsZXMgaWYgbm90IGZvdW5kIGxv Y2FsbHkgYW5kICR7TUFTVEVSX1NJVEVTfS8ke1BBVENIX1NJVEVTfQojCQkJCSAgRGVmYXVsdDoK IwkJCQkgIGh0dHA6Ly9kaXN0Y2FjaGUuRnJlZUJTRC5vcmcvcG9ydHMtZGlzdGZpbGVzLyR7RElT VF9TVUJESVJ9LwojIE1BU1RFUl9TSVRFX09WRVJSSURFCiMJCQkJLSBJZiBzZXQsIHByZXBlbmQg dGhlIE1BU1RFUl9TSVRFUyBzZXR0aW5nIHdpdGggdGhpcyB2YWx1ZS4KIyBNQVNURVJfU0lURV9G UkVFQlNECiMJCQkJLSBJZiBzZXQsIHByZXBlbmQgJHtNQVNURVJfU0lURV9CQUNLVVB9IGluIE1B U1RFUl9TSVRFUy4KIwojIFNldCB0aGVzZSBpZiB5b3VyIHBvcnQgc2hvdWxkIG5vdCBiZSBidWls dCB1bmRlciBjZXJ0YWluIGNpcmN1bXN0YW5jZXMuCiMgVGhlc2UgYXJlIHN0cmluZyB2YXJpYWJs ZXM7IHlvdSBzaG91bGQgc2V0IHRoZW0gdG8gdGhlIHJlYXNvbiB3aHkKIyB0aGV5IGFyZSBuZWNl c3NhcnkuCiMKIyBSRVNUUklDVEVECS0gUHJldmVudCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRpc3Rm aWxlcyBhbmQgcGFja2FnZXMgdG8KIwkJCQkgIHRoZSBGVFAgc2l0ZXMgb3Igb24gQ0RST00gKGUu Zy4gZm9yYmlkZGVuIGJ5IGxpY2Vuc2UKIwkJCQkgIGNvbnNpZGVyYXRpb25zKS4KIyBOT19DRFJP TQkJLSBQYWNrYWdlcyBhbmQgZGlzdGZpbGVzIG1heSBub3QgZ28gb24gQ0RST00gKGUuZy4gbXVz dAojCQkJCSAgbm90IGJlIHJlLXNvbGQpIGJ1dCBjYW4gZ28gb24gRlRQIHNpdGVzLgojIE5PX1BB Q0tBR0UJLSBQb3J0IHNob3VsZCBub3QgYmUgcGFja2FnZWQgZm9yIGZ0cCBzaXRlcyBvciBDRFJP TXMsCiMJCQkJICBidXQgZGlzdGZpbGVzIGNhbiBiZSBwdXQgb24gZnRwIHNpdGVzIGFuZCBDRFJP TXMuCiMgRk9SQklEREVOCQktIFBhY2thZ2UgYnVpbGQgc2hvdWxkIG5vdCBiZSBhdHRlbXB0ZWQg YmVjYXVzZSBvZgojCQkJCSAgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLgojIExFR0FMX1RFWFQJ LSBQb3J0IGhhcyBsZWdhbCBpc3N1ZXMgKGUuZy4sIHNwZWNpYWwgcGVybWlzc2lvbiB0byBkaXN0 cmlidXRlLCBsYWNrcyBhIGxpY2Vuc2UpLgojIExFR0FMX1BBQ0tBR0UgLSBQb3J0IGhhcyBubyBs ZWdhbCBpc3N1ZXMgYnV0IGRlZmluZXMgTk9fUEFDS0FHRQojIElHTk9SRQkJLSBQYWNrYWdlIGJ1 aWxkIHNob3VsZCBiZSBza2lwcGVkIGVudGlyZWx5IChlLmcuCiMJCQkJICBiZWNhdXNlIG9mIHNl cmlvdXMgdW5maXhhYmxlIHByb2JsZW1zIGluIHRoZSBidWlsZCwKIwkJCQkgIGJlY2F1c2UgaXQg Y2Fubm90IGJlIG1hbnVhbGx5IGZldGNoZWQsIGV0YykuICBFcnJvcgojCQkJCSAgbG9ncyB3aWxs IG5vdCBhcHBlYXIgb24gcG9pbnR5aGF0LCBzbyB0aGlzIHNob3VsZCBiZQojCQkJCSAgdXNlZCBz cGFyaW5nbHkuCiMgQlJPS0VOCQktIFBvcnQgaXMgYmVsaWV2ZWQgdG8gYmUgYnJva2VuLiAgUGFj a2FnZSBidWlsZHMgY2FuCiMgCQkJCSAgc3RpbGwgYmUgYXR0ZW1wdGVkIHVzaW5nIFRSWUJST0tF TiB0byB0ZXN0IHRoaXMKIwkJCQkgIGFzc3VtcHRpb24uCiMgQlJPS0VOXyR7QVJDSH0gLSBQb3J0 IGlzIGJlbGlldmVkIHRvIGJlIGJyb2tlbiBvbiAke0FSQ0h9LiBQYWNrYWdlIGJ1aWxkcwojCQkJ CSAgY2FuIHN0aWxsIGJlIGF0dGVtcHRlZCB1c2luZyBUUllCUk9LRU4gdG8KIwkJCQkgIHRlc3Qg dGhpcyBhc3N1bXB0aW9uLgojIEJST0tFTl8ke09QU1lTfSAtIFBvcnQgaXMgYmVsaWV2ZWQgdG8g YmUgYnJva2VuIG9uICR7T1BTWVN9LiBQYWNrYWdlIGJ1aWxkcwojCQkJCSAgY2FuIHN0aWxsIGJl IGF0dGVtcHRlZCB1c2luZyBUUllCUk9LRU4gdG8KIwkJCQkgIHRlc3QgdGhpcyBhc3N1bXB0aW9u LgojIEJST0tFTl8ke09QU1lTfV8ke09TUkVMOlJ9IC0gIFBvcnQgaXMgYmVsaWV2ZWQgdG8gYmUg YnJva2VuIG9uIGEgc2luZ2xlCiMJCQkJICByZWxlYXNlIG9mICR7T1BTWVN9LCBlLmcgQlJPS0VO X0ZyZWVCU0RfOAojCQkJCSAgd291bGQgYWZmZWN0IGFsbCBwb2ludCByZWxlYXNlcyBvZiBGcmVl QlNEIDgKIwkJCQkgIHVubGVzcyBUUllCUk9LRU4gaXMgYWxzbyBzZXQuCiMgQlJPS0VOXyR7T1BT WVN9XyR7T1NSRUw6Un1fJHtBUkNIfSAtICBQb3J0IGlzIGJlbGlldmVkIHRvIGJlIGJyb2tlbiBv biBhCiMJCQkJICBzaW5nbGUgcmVsZWFzZSBvZiAke09QU1lTfSBhbmQgc3BlY2lmaWMgYXJjaGl0 ZWN0dXJlLAojCQkJCSAgZS5nIEJST0tFTl9GcmVlQlNEXzhfaTM4NiB3b3VsZCBhZmZlY3QgYWxs IHBvaW50CiMJCQkJICByZWxlYXNlcyBvZiBGcmVlQlNEIDggaW4gaTM4NgojCQkJCSAgdW5sZXNz IFRSWUJST0tFTiBpcyBhbHNvIHNldC4KIyBERVBSRUNBVEVECS0gUG9ydCBpcyBkZXByZWNhdGVk IHRvIGluc3RhbGwuIEFkdmlzb3J5IG9ubHkuCiMgRVhQSVJBVElPTl9EQVRFCiMJCQkJLSBJZiBE RVBSRUNBVEVEIGlzIHNldCwgZGV0ZXJtaW5lcyBhIGRhdGUgd2hlbgojCQkJCSAgdGhlIHBvcnQg aXMgcGxhbmVkIHRvIHJlbW92ZS4gVGhlIGRhdGUgZm9ybWF0IGlzCiMJCQkJICBJU08gODYwMSAo WVlZWS1NTS1ERCkuCiMKIyBESVNBQkxFX1ZVTE5FUkFCSUxJVElFUwojCQkJCS0gSWYgc2V0LCBk byBub3QgY2hlY2sgaWYgdGhlIHBvcnQgaXMgbGlzdGVkIGluIHRoZQojCQkJCSAgdnVsbmVyYWJp bGl0aWVzIGRhdGFiYXNlLgojCiMgSW4gYWRkaXRpb24gdG8gUkVTVFJJQ1RFRCBvciBOT19DRFJP TSwgaWYgb25seSBhIHN1YnNldCBvZiBkaXN0ZmlsZXMKIyBvciBwYXRjaGZpbGVzIGhhdmUgcmVk aXN0cmlidXRpb24gcmVzdHJpY3Rpb25zLCBzZXQgdGhlIGZvbGxvd2luZwojIHRvIHRoZSBsaXN0 IG9mIHN1Y2ggZmlsZXMuCiMKIyBSRVNUUklDVEVEX0ZJTEVTCiMJCQkJLSBMaXN0IG9mIGZpbGVz IHRoYXQgY2Fubm90IGJlIHJlZGlzdHJpYnV0ZWQuCiMJCQkJICBEZWZhdWx0OiAiJHtESVNURklM RVN9ICR7UEFUQ0hGSUxFU30iIGlmIFJFU1RSSUNURUQKIwkJCQkgIG9yIE5PX0NEUk9NIGlzIHNl dCwgZW1wdHkgb3RoZXJ3aXNlLgojCiMgVGhlc2UgdmFyaWFibGVzIGFyZSBib29sZWFucywgc28g eW91IGRvbid0IG5lZWQgdG8gc2V0IHRoZW0gdG8gdGhlIHJlYXNvbi4KIwojIElTX0lOVEVSQUNU SVZFCiMJCQkJLSBTZXQgdGhpcyBpZiB5b3VyIHBvcnQgbmVlZHMgdG8gaW50ZXJhY3Qgd2l0aCB0 aGUgdXNlcgojCQkJCSAgZHVyaW5nIGFueSBzdGVwIGluIGEgcGFja2FnZSBidWlsZC4gIFVzZXIg Y2FuIHRoZW4gZGVjaWRlCiMJCQkJICB0byBza2lwIHRoaXMgcG9ydCBieSBzZXR0aW5nICR7QkFU Q0h9LCBvciBjb21waWxpbmcgb25seQojCQkJCSAgdGhlIGludGVyYWN0aXZlIHBvcnRzIGJ5IHNl dHRpbmcgJHtJTlRFUkFDVElWRX0uCiMJCQkJICBEZWZhdWx0OiBub3Qgc2V0LgojIFVTRV9TVUJN QUtFCS0gU2V0IHRoaXMgaWYgeW91IHdhbnQgdGhhdCBlYWNoIG9mIHRoZSBwb3J0J3MgbWFpbiA3 IHRhcmdldHMKIwkJCQkgIChleHRyYWN0LCBwYXRjaCwgY29uZmlndXJlLCBidWlsZCwgc3RhZ2Us IGluc3RhbGwgYW5kCiMJCQkJICBwYWNrYWdlKSB0byBiZSBleGVjdXRlZCBpbiBhIHNlcGFyYXRl IG1ha2UoMSkgcHJvY2Vzcy4KIwkJCQkgIFVzZWZ1bCB3aGVuIG9uZSBvZiB0aGUgc3RhZ2VzIG5l ZWRzIHRvIGluZmx1ZW5jZSBtYWtlKDEpCiMJCQkJICB2YXJpYWJsZXMgb2YgdGhlIGxhdGVyIHN0 YWdlcyB1c2luZyAke1dSS0RJUn0vTWFrZWZpbGUuaW5jCiMJCQkJICBnZW5lcmF0ZWQgb24gdGhl IGZseS4KIwkJCQkgIERlZmF1bHQ6IG5vdCBzZXQuCiMKIyBOT19BUkNICQkJLSBTZXQgdGhpcyBp ZiBwb3J0IGlzIGFyY2hpdGVjdHVyZSBuZXV0cmFsLgojCiMgU2V0IHRoZXNlIGlmIHlvdXIgcG9y dCBvbmx5IG1ha2VzIHNlbnNlIHRvIGNlcnRhaW4gYXJjaGl0ZWN0dXJlcy4KIyBUaGV5IGFyZSBs aXN0cyBjb250YWluaW5nIG5hbWVzIGZvciB0aGVtIChlLmcuLCAiYW1kNjQgaTM4NiIpLgojIChE ZWZhdWx0czogbm90IHNldC4pCiMKIyBPTkxZX0ZPUl9BUkNIUwojCQkJCS0gT25seSBidWlsZCBw b3J0cyBpZiAke0FSQ0h9IG1hdGNoZXMgb25lIG9mIHRoZXNlLgojIE5PVF9GT1JfQVJDSFMJLSBP bmx5IGJ1aWxkIHBvcnRzIGlmICR7QVJDSH0gZG9lc24ndCBtYXRjaCBvbmUgb2YgdGhlc2UuCiMg T05MWV9GT1JfQVJDSFNfUkVBU09OCiMgT05MWV9GT1JfQVJDSFNfUkVBU09OXyR7QVJDSH0KIwkJ CQktIFJlYXNvbiB3aHkgaXQncyBvbmx5IGZvciAke09OTFlfRk9SX0FSQ0hTfXMKIyBOT1RfRk9S X0FSQ0hTX1JFQVNPTgojIE5PVF9GT1JfQVJDSFNfUkVBU09OXyR7QVJDSH0KIwkJCQktIFJlYXNv biB3aHkgaXQncyBub3QgZm9yICR7Tk9UX0ZPUl9BUkNIU31zCiMgSUEzMl9CSU5BUllfUE9SVAoj CQkJCS0gU2V0IHRoaXMgaW5zdGVhZCBvZiBPTkxZX0ZPUl9BUkNIUyBpZiB0aGUgZ2l2ZW4gcG9y dAojCQkJCSAgZmV0Y2hlcyBhbmQgaW5zdGFsbHMgY29tcGlsZWQgaTM4NiBiaW5hcmllcy4KIwoj IERlcGVuZGVuY3kgY2hlY2tpbmcuICBVc2UgdGhlc2UgaWYgeW91ciBwb3J0IHJlcXVpcmVzIGFu b3RoZXIgcG9ydAojIG5vdCBpbiB0aGUgbGlzdCBiZWxvdy4gIChEZWZhdWx0OiBlbXB0eS4pCiMK IyBFWFRSQUNUX0RFUEVORFMKIwkJCQktIEEgbGlzdCBvZiAicGF0aDpkaXJbOnRhcmdldF0iIHR1 cGxlcyBvZiBvdGhlciBwb3J0cyB0aGlzCiMJCQkJICBwYWNrYWdlIGRlcGVuZHMgb24gaW4gdGhl ICJleHRyYWN0IiBzdGFnZS4gICJwYXRoIiBpcwojCQkJCSAgdGhlIG5hbWUgb2YgYSBmaWxlIGlm IGl0IHN0YXJ0cyB3aXRoIGEgc2xhc2ggKC8pLCBhbgojCQkJCSAgZXhlY3V0YWJsZSBvdGhlcndp c2UuICBtYWtlIHdpbGwgdGVzdCBmb3IgdGhlIGV4aXN0ZW5jZQojCQkJCSAgKGlmIGl0IGlzIGEg ZnVsbCBwYXRobmFtZSkgb3Igc2VhcmNoIGZvciBpdCBpbiB5b3VyCiMJCQkJICAkUEFUSCAoaWYg aXQgaXMgYW4gZXhlY3V0YWJsZSkgYW5kIGdvIGludG8gImRpciIgdG8gZG8KIwkJCQkgIGEgIm1h a2UgYWxsIGluc3RhbGwiIGlmIGl0J3Mgbm90IGZvdW5kLiAgSWYgdGhlIHRoaXJkCiMJCQkJICBm aWVsZCAoInRhcmdldCIpIGV4aXN0cywgaXQgd2lsbCBiZSB1c2VkIGluc3RlYWQgb2YKIwkJCQkg ICR7REVQRU5EU19UQVJHRVR9LiAgVGhlIGZpcnN0IGZpZWxkIGFsc28gc3VwcG9ydHMgYQojCQkJ CSAgcGFja2FnZSBuYW1lIHdpdGggYSB2ZXJzaW9uIHJhbmdlLCBpbiB0aGUgZm9ybSBwYWNrYWdl Pj0xLjIKIwkJCQkgIGlmIGEgcGFydGljdWxhciB2ZXJzaW9uIGlzIGRlc2lyZWQuCiMgUEFUQ0hf REVQRU5EUwktIEEgbGlzdCBvZiAicGF0aDpkaXJbOnRhcmdldF0iIHR1cGxlcyBvZiBvdGhlciBw b3J0cyB0aGlzCiMJCQkJICBwYWNrYWdlIGRlcGVuZHMgb24gaW4gdGhlICJwYXRjaCIgc3RhZ2Uu ICAicGF0aCIgaXMgdGhlCiMJCQkJICBuYW1lIG9mIGEgZmlsZSBpZiBpdCBzdGFydHMgd2l0aCBh IHNsYXNoICgvKSwgYW4KIwkJCQkgIGV4ZWN1dGFibGUgb3RoZXJ3aXNlLiAgbWFrZSB3aWxsIHRl c3QgZm9yIHRoZSBleGlzdGVuY2UKIwkJCQkgIChpZiBpdCBpcyBhIGZ1bGwgcGF0aG5hbWUpIG9y IHNlYXJjaCBmb3IgaXQgaW4geW91cgojCQkJCSAgJFBBVEggKGlmIGl0IGlzIGFuIGV4ZWN1dGFi bGUpIGFuZCBnbyBpbnRvICJkaXIiIHRvIGRvCiMJCQkJICBhICJtYWtlIGFsbCBpbnN0YWxsIiBp ZiBpdCdzIG5vdCBmb3VuZC4gIElmIHRoZSB0aGlyZAojCQkJCSAgZmllbGQgKCJ0YXJnZXQiKSBl eGlzdHMsIGl0IHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mCiMJCQkJICAke0RFUEVORFNfVEFSR0VU fS4gIFRoZSBmaXJzdCBmaWVsZCBhbHNvIHN1cHBvcnRzIGEKIwkJCQkgIHBhY2thZ2UgbmFtZSB3 aXRoIGEgdmVyc2lvbiByYW5nZSwgaW4gdGhlIGZvcm0gcGFja2FnZT49MS4yCiMJCQkJICBpZiBh IHBhcnRpY3VsYXIgdmVyc2lvbiBpcyBkZXNpcmVkLgojIEZFVENIX0RFUEVORFMJLSBBIGxpc3Qg b2YgInBhdGg6ZGlyWzp0YXJnZXRdIiB0dXBsZXMgb2Ygb3RoZXIgcG9ydHMgdGhpcwojCQkJCSAg cGFja2FnZSBkZXBlbmRzIGluIHRoZSAiZmV0Y2giIHN0YWdlLiAgInBhdGgiIGlzIHRoZQojCQkJ CSAgbmFtZSBvZiBhIGZpbGUgaWYgaXQgc3RhcnRzIHdpdGggYSBzbGFzaCAoLyksIGFuCiMJCQkJ ICBleGVjdXRhYmxlIG90aGVyd2lzZS4gIG1ha2Ugd2lsbCB0ZXN0IGZvciB0aGUKIwkJCQkgIGV4 aXN0ZW5jZSAoaWYgaXQgaXMgYSBmdWxsIHBhdGhuYW1lKSBvciBzZWFyY2ggZm9yCiMJCQkJICBp dCBpbiB5b3VyICRQQVRIIChpZiBpdCBpcyBhbiBleGVjdXRhYmxlKSBhbmQgZ28KIwkJCQkgIGlu dG8gImRpciIgdG8gZG8gYSAibWFrZSBhbGwgaW5zdGFsbCIgaWYgaXQncyBub3QKIwkJCQkgIGZv dW5kLiAgSWYgdGhlIHRoaXJkIGZpZWxkICgidGFyZ2V0IikgZXhpc3RzLCBpdCB3aWxsCiMJCQkJ ICBiZSB1c2VkIGluc3RlYWQgb2YgJHtERVBFTkRTX1RBUkdFVH0uICBUaGUgZmlyc3QgZmllbGQK IwkJCQkgIGFsc28gc3VwcG9ydHMgYSBwYWNrYWdlIG5hbWUgd2l0aCBhIHZlcnNpb24gcmFuZ2Us IGluCiMJCQkJICB0aGUgZm9ybSBwYWNrYWdlPj0xLjIgaWYgYSBwYXJ0aWN1bGFyIHZlcnNpb24g aXMgZGVzaXJlZC4KIyBCVUlMRF9ERVBFTkRTCS0gQSBsaXN0IG9mICJwYXRoOmRpcls6dGFyZ2V0 XSIgdHVwbGVzIG9mIG90aGVyIHBvcnRzIHRoaXMKIwkJCQkgIHBhY2thZ2UgZGVwZW5kcyB0byBi dWlsZCAoYmV0d2VlbiB0aGUgImV4dHJhY3QiIGFuZAojCQkJCSAgImJ1aWxkIiBzdGFnZXMsIGlu Y2x1c2l2ZSkuICBUaGUgdGVzdCBkb25lIHRvCiMJCQkJICBkZXRlcm1pbmUgdGhlIGV4aXN0ZW5j ZSBvZiB0aGUgZGVwZW5kZW5jeSBpcyB0aGUKIwkJCQkgIHNhbWUgYXMgRkVUQ0hfREVQRU5EUy4g IElmIHRoZSB0aGlyZCBmaWVsZCAoInRhcmdldCIpCiMJCQkJICBleGlzdHMsIGl0IHdpbGwgYmUg dXNlZCBpbnN0ZWFkIG9mICR7REVQRU5EU19UQVJHRVR9LgojIFJVTl9ERVBFTkRTCS0gQSBsaXN0 IG9mICJwYXRoOmRpcls6dGFyZ2V0XSIgdHVwbGVzIG9mIG90aGVyIHBvcnRzIHRoaXMKIwkJCQkg IHBhY2thZ2UgZGVwZW5kcyB0byBydW4uICBUaGUgdGVzdCBkb25lIHRvIGRldGVybWluZQojCQkJ CSAgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgZGVwZW5kZW5jeSBpcyB0aGUgc2FtZSBhcwojCQkJCSAg RkVUQ0hfREVQRU5EUy4gIFRoaXMgd2lsbCBiZSBjaGVja2VkIGR1cmluZyB0aGUKIwkJCQkgICJp bnN0YWxsIiBzdGFnZSBhbmQgdGhlIG5hbWUgb2YgdGhlIGRlcGVuZGVuY3kgd2lsbAojCQkJCSAg YmUgcHV0IGludG8gdGhlIHBhY2thZ2UgYXMgd2VsbC4gIElmIHRoZSB0aGlyZCBmaWVsZAojCQkJ CSAgKCJ0YXJnZXQiKSBleGlzdHMsIGl0IHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mCiMJCQkJICAk e0RFUEVORFNfVEFSR0VUfS4gIFRoZSBmaXJzdCBmaWVsZCBhbHNvIHN1cHBvcnRzIGEKIwkJCQkg IHBhY2thZ2UgbmFtZSB3aXRoIGEgdmVyc2lvbiByYW5nZSwgaW4gdGhlIGZvcm0gcGFja2FnZT49 MS4yCiMJCQkJICBpZiBhIHBhcnRpY3VsYXIgdmVyc2lvbiBpcyBkZXNpcmVkLgojIExJQl9ERVBF TkRTCS0gQSBsaXN0IG9mICJsaWI6ZGlyWzp0YXJnZXRdIiB0dXBsZXMgb2Ygb3RoZXIgcG9ydHMg dGhpcwojCQkJCSAgcGFja2FnZSBkZXBlbmRzIG9uLiAgImxpYiIgaXMgdGhlIG5hbWUgb2YgYSBz aGFyZWQgbGlicmFyeS4KIwkJCQkgIG1ha2Ugd2lsbCB1c2UgImxkY29uZmlnIC1yIiB0byBzZWFy Y2ggZm9yIHRoZSBsaWJyYXJ5LgojCQkJCSAgbGliIGNhbiBjb250YWluIGV4dGVuZGVkIHJlZ3Vs YXIgZXhwcmVzc2lvbnMuCiMgREVQRU5EU19UQVJHRVQKIwkJCQktIFRoZSBkZWZhdWx0IHRhcmdl dCB0byBleGVjdXRlIHdoZW4gYSBwb3J0IGlzIGNhbGxpbmcgYQojCQkJCSAgZGVwZW5kZW5jeS4K IwkJCQkgIERlZmF1bHQ6IGluc3RhbGwKIwojIFRoZXNlIHZhcmlhYmxlcyBjb250cm9sIG9wdGlv bnMgYWJvdXQgaG93IGEgcG9ydCBnZXRzIGJ1aWx0IGFuZC9vcgojIGFyZSBzaG9ydGhhbmQgbm90 YXRpb25zIGZvciBjb21tb24gc2V0cyBvZiBkZXBlbmRlbmNpZXMuCiMgVXNlIHRoZXNlIGlmIHlv dXIgcG9ydCB1c2VzIHNvbWUgb2YgdGhlIGNvbW1vbiBzb2Z0d2FyZSBwYWNrYWdlcy4gQnkKIyBj b252ZW50aW9uIHRoZXNlIHNob3VsZCBiZSBzZXQgdG8gJ3llcycsIGFsdGhvdWdoIHRoZXkgb25s eSBuZWVkIHRvIGJlCiMgZGVmaW5lZC4gRGVmYXVsdHM6IG5vdCBzZXQsIHVubGVzcyBleHBsaWNp dGx5IGluZGljYXRlZCBiZWxvdy4KIwojIE5vdGU6IHRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIHRo ZSBVU0VfKiBhbmQgV0FOVF8qIHZhcmlhYmxlcywgYW5kIHRoZQojIFdJVEhfKiBhbmQgV0lUSE9V VF8qIHZhcmlhYmxlcywgYXJlIHRoYXQgdGhlIGZvcm1lciBhcmUgcmVzdHJpY3RlZCB0bwojIHVz YWdlIGluc2lkZSB0aGUgcG9ydHMgZnJhbWV3b3JrLCBhbmQgdGhlIGxhdHRlciBhcmUgcmVzZXJ2 ZWQgZm9yIHVzZXItCiMgc2V0dGFibGUgb3B0aW9ucy4gIChTZXR0aW5nIFVTRV8qIGluIC9ldGMv bWFrZS5jb25mIGlzIGFsd2F5cyB3cm9uZykuCiMKIyBXSVRIX0RFQlVHICAgICAgICAgICAgLSBJ ZiBzZXQsIGRlYnVnZ2luZyBmbGFncyBhcmUgYWRkZWQgdG8gQ0ZMQUdTIGFuZCB0aGUKIyAgICAg ICAgICAgICAgICAgICAgICAgICBiaW5hcmllcyBkb24ndCBnZXQgc3RyaXBwZWQgYnkgSU5TVEFM TF9QUk9HUkFNIG9yCiMgICAgICAgICAgICAgICAgICAgICAgICAgSU5TVEFMTF9MSUIuIEJlc2lk ZXMsIGluZGl2aWR1YWwgcG9ydHMgbWlnaHQKIyAgICAgICAgICAgICAgICAgICAgICAgICBhZGQg dGhlaXIgc3BlY2lmaWMgdG8gcHJvZHVjZSBiaW5hcmllcyBmb3IgZGVidWdnaW5nCiMgICAgICAg ICAgICAgICAgICAgICAgICAgcHVycG9zZXMuIFlvdSBjYW4gb3ZlcnJpZGUgdGhlIGRlYnVnIGZs YWdzIHRoYXQgYXJlCiMgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc2VkIHRvIHRoZSBjb21w aWxlciBieSBzZXR0aW5nIERFQlVHX0ZMQUdTLiBJdCBpcwojICAgICAgICAgICAgICAgICAgICAg ICAgIHNldCB0byAiLWciIGF0IGRlZmF1bHQuCiMKIyBXSVRIX0RFQlVHX1BPUlRTCQktIEEgbGlz dCBvZiBvcmlnaW5zIGZvciB3aGljaCBXSVRIX0RFQlVHIHdpbGwgYmUgc2V0CiMKIyBXSVRIT1VU X1NTUAktIERpc2FibGUgU1NQLgojCiMgU1NQX0NGTEFHUwktIERlZmF1bHRzIHRvIC1mc3RhY2st cHJvdGVjdG9yLiBUaGlzIHZhbHVlCiMJCQkJICBpcyBhZGRlZCB0byBDRkxBR1MgYW5kIHRoZSBu ZWNlc3NhcnkgZmxhZ3MKIwkJCQkgIGFyZSBhZGRlZCB0byBMREZMQUdTLiBOb3RlIHRoYXQgU1NQ X1VOU0FGRQojCQkJCSAgY2FuIGJlIHVzZWQgaW4gTWFrZWZpbGVzIGJ5IHBvcnQgbWFpbnRhaW5l cnMKIwkJCQkgIGlmIGEgcG9ydCBicmVha3Mgd2l0aCBpdCAoaXQgc2hvdWxkIGJlCiMJCQkJICBl eHRyZW1lbHkgcmFyZSkuCiMKIyBVU0VfR0NDCQktIElmIHNldCwgdGhpcyBwb3J0IHJlcXVpcmVz IHRoaXMgdmVyc2lvbiBvZiBnY2MsIGVpdGhlciBpbgojCQkJCSAgdGhlIHN5c3RlbSBvciBpbnN0 YWxsZWQgZnJvbSBhIHBvcnQuCiMgVVNFX0NTVEQJCS0gT3ZlcnJpZGUgdGhlIGRlZmF1bHQgQyBs YW5ndWFnZSBzdGFuZGFyZCAoZ251ODksIGdudTk5KQojIFVTRV9DWFhTVEQJICBPdmVycmlkZSB0 aGUgZGVmYXVsdCBDKysgbGFuZ3VhZ2Ugc3RhbmRhcmQKIyBVU0VfQklOVVRJTFMJLSBVc2UgYmlu dXRpbHMgc3VpdGUgZnJvbSBwb3J0IGluc3RlYWQgb2YgdGhlIHZlcnNpb24gaW4gYmFzZS4KIyBD RkxBR1NfJHtBUkNIfSAgQXBwZW5kIHRoZSBjZmxhZ3MgdG8gQ0ZMQUdTIG9ubHkgb24gdGhlIHNw ZWNpZmllZCBhcmNoaXRlY3R1cmUKIyBDWFhGTEFHU18ke0FSQ0h9CiMJCQkJIEFwcGVuZCB0aGUg Y3h4ZmxhZ3MgdG8gQ1hYRkxBR1Mgb25seSBvbiB0aGUgc3BlY2lmaWVkIGFyY2hpdGVjdHVyZQoj IwojIFVTRV9HSE9TVFNDUklQVAojCQkJCS0gSWYgc2V0LCB0aGlzIHBvcnQgbmVlZHMgZ2hvc3Rz Y3JpcHQgdG8gYm90aAojCQkJCSAgYnVpbGQgYW5kIHJ1bi4gIElmIGEgbnVtYmVyIGlzIHNwZWNp ZmllZCwKIwkJCQkgIHRoZSBzcGVjaWZpZWQgdmVyc2lvbiB3aWxsIGJlIHVzZWQuCiMJCQkJICBU aGUgdmFsaWQgdmFsdWUgaXMgJzcnLCAnOCcsIG9yICc5JyBpbiB0aGF0IGNhc2UuCiMgVVNFX0dI T1NUU0NSSVBUX0JVSUxECiMJCQkJLSBJZiBzZXQsIHRoaXMgcG9ydCBuZWVkcyBnaG9zdHNjcmlw dCB0byBidWlsZC4KIyBVU0VfR0hPU1RTQ1JJUFRfUlVOCiMJCQkJLSBJZiBzZXQsIHRoaXMgcG9y dCBuZWVkcyBnaG9zdHNjcmlwdCB0byBydW4uCiMgR0hPU1RTQ1JJUFRfUE9SVAojCQkJCS0gVGhl IHBvcnQgdGhhdCBwcm92aWRlcyBwb3N0c2NyaXB0IGZ1bmN0aW9uYWxpdHkuCiMJCQkJICBTb21l IGluc3RhbGxhdGlvbnMgbWF5IHdpc2ggdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQKIwkJCQkgIHRv IHNwZWNpZnkgYSB2ZXJzaW9uIHdpdGhvdXQgWDExIGFuZC9vciBsb2NhbGl6ZWQKIwkJCQkgIHZl cnNpb25zIGZvciB0aGVpciBuYXRpb25hbGl0eS4KIwkJCQkgIERlZmF1bHQ6IHByaW50L2dob3N0 c2NyaXB0OQojIFdJVEhfR0hPU1RTQ1JJUFRfVkVSCiMJCQkJLSBJZiBzZXQsIHRoZSBzcGVjaWZp ZWQgdmVyc2lvbiBvZiBnaG9zdHNjcmlwdCB3aWxsIGJlCiMJCQkJICB1c2VkLiAgVGhlIHZhbGlk IHZhbHVlIGlzICI3IiwgIjgiLCBvciAiOSIuICBOb3RlIHRoYXQKIwkJCQkgIHRoaXMgaXMgZm9y IHVzZXJzLCBub3QgZm9yIHBvcnQgbWFpbnRhaW5lcnMuICBUaGlzCiMJCQkJICBzaG91bGQgbm90 IGJlIHVzZWQgaW4gTWFrZWZpbGUuCiMjCiMgVVNFX0dMCQktIEEgbGlzdCBvZiBNZXNhIG9yIEdM IHJlbGF0ZWQgZGVwZW5kZW5jaWVzIG5lZWRlZCBieSB0aGUgcG9ydC4KIwkJCQkgIFN1cHBvcnRl ZCBjb21wb25lbnRzIGFyZTogZWdsLCBnbGVzdjIsIGdsdXQsIGdsdSwgZ2x3LCBhbmQgZ2wuCiMJ CQkJICBJZiBzZXQgdG8gInllcyIsIHRoaXMgaXMgZXF1aXZhbGVudCB0byAiZ2x1Ii4gTm90ZSB0 aGF0CiMJCQkJICBnbGV3IGFuZCBnbHV0IGRlcGVuZCBvbiBnbHUsIGdsdyBhbmQgZ2x1IGRlcGVu ZCBvbiBnbC4KIyMKIyBVU0VfU0RMCQktIElmIHNldCwgdGhpcyBwb3J0IHVzZXMgdGhlIHNkbCBs aWJyYXJpZXMuCiMJCQkJICBTZWUgYnNkLnNkbC5tayBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KIyMK IyBVU0VfT1BFTlNTTAktIElmIHNldCwgdGhpcyBwb3J0IHJlbGllcyBvbiB0aGUgT3BlblNTTCBw YWNrYWdlLgojIwojIFVTRV9PUEVOTERBUAktIElmIHNldCwgdGhpcyBwb3J0IHVzZXMgdGhlIE9w ZW5MREFQIGxpYnJhcmllcy4KIwkJCQkgIEltcGxpZXM6IFdBTlRfT1BFTkxEQVBfVkVSPz0yNAoj IFdBTlRfT1BFTkxEQVBfVkVSCiMJCQkJLSBMZWdhbCB2YWx1ZXMgYXJlOiAyMywgMjQKIwkJCQkg IElmIHNldCB0byBhbiB1bmtub3duIHZhbHVlLCB0aGUgcG9ydCBpcyBtYXJrZWQgQlJPS0VOLgoj IFdBTlRfT1BFTkxEQVBfU0FTTAojCQkJCS0gSWYgc2V0LCB0aGUgc3lzdGVtIHNob3VsZCB1c2Ug T3BlbkxEQVAgbGlicmFyaWVzCiMJCQkJICB3aXRoIFNBU0wgc3VwcG9ydC4KIyMKIyBVU0VfQVVU T1RPT0xTCS0gSWYgc2V0LCB0aGlzIHBvcnQgdXNlcyB2YXJpb3VzIEdOVSBhdXRvdG9vbHMKIwkJ CQkgIChsaWJ0b29sLCBhdXRvY29uZiwgYXV0b2hlYWRlciwgYXV0b21ha2UgZXQgYWwuKQojCQkJ CSAgU2VlIGJzZC5hdXRvdG9vbHMubWsgZm9yIG1vcmUgZGV0YWlscy4KIyMKIyBVU0VfRlBDCQkt IElmIHNldCwgdGhpcyBwb3J0IHJlbGllcyBvbiB0aGUgRnJlZSBQYXNjYWwgbGFuZ3VhZ2UuCiMg CQkJCSAgSW1wbGllcyBpbmNsdXNpb24gb2YgYnNkLmZwYy5tay4gIChBbHNvIHNlZQojCQkJCSAg dGhhdCBmaWxlIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIFdBTlRfRlBDXyopLgojIFVTRV9KQVZB CQktIElmIHNldCwgdGhpcyBwb3J0IHJlbGllcyBvbiB0aGUgSmF2YSBsYW5ndWFnZS4KIwkJCQkg IEltcGxpZXMgaW5jbHVzaW9uIG9mIGJzZC5qYXZhLm1rLiAgKEFsc28gc2VlCiMJCQkJICB0aGF0 IGZpbGUgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gVVNFX0pBVkFfKikuCiMgVVNFX09DQU1MCQkt IElmIHNldCwgdGhpcyBwb3J0IHJlbGllcyBvbiB0aGUgT0NhbWwgbGFuZ3VhZ2UuCiMJCQkJICBJ bXBsaWVzIGluY2x1c2lvbiBvZiBic2Qub2NhbWwubWsuICAoQWxzbyBzZWUKIwkJCQkgIHRoYXQg ZmlsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBVU0VfT0NBTUwqKS4KIyBVU0VfUlVCWQkJLSBJ ZiBzZXQsIHRoaXMgcG9ydCByZWxpZXMgb24gdGhlIFJ1YnkgbGFuZ3VhZ2UuCiMJCQkJICBJbXBs aWVzIGluY2x1c2lvbiBvZiBic2QucnVieS5tay4gIChBbHNvIHNlZQojCQkJCSAgdGhhdCBmaWxl IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIFVTRV9SVUJZXyopLgojIwojIFVTRV9HRUNLTwkJLSBJ ZiBzZXQsIHRoaXMgcG9ydCB1c2VzIHRoZSBHZWNrby9Nb3ppbGxhIHByb2R1Y3QuCiMJCQkJICBT ZWUgYnNkLmdlY2tvLm1rIGZvciBtb3JlIGRldGFpbHMuCiMjCiMgVVNFX0dOT01FCQktIEEgbGlz dCBvZiB0aGUgR25vbWUgZGVwZW5kZW5jaWVzIHRoZSBwb3J0IGhhcyAoZS5nLiwKIwkJCQkgIGds aWIxMiwgZ3RrMTIpLiAgSW1wbGllcyB0aGF0IHRoZSBwb3J0IG5lZWRzIEdub21lLgojCQkJCSAg SW1wbGllcyBpbmNsdXNpb24gb2YgYnNkLmdub21lLm1rLiAgU2VlIGJzZC5nbm9tZS5tawojCQkJ CSAgb3IgaHR0cDovL3d3dy5GcmVlQlNELm9yZy9nbm9tZS9kb2NzL3BvcnRpbmcuaHRtbAojCQkJ CSAgZm9yIG1vcmUgZGV0YWlscy4KIyMKIyBVU0VfTUFURQkJLSBBIGxpc3Qgb2YgdGhlIE1BVEUg ZGVwZW5kZW5jaWVzIHRoZSBwb3J0IGhhcy4gSW1wbGllcwojCQkJCSAgdGhhdCB0aGUgcG9ydCBu ZWVkcyBNQVRFLiBJbXBsaWVzIGluY2x1c2lvbiBvZgojCQkJCSAgYnNkLm1hdGUubWsuIFNlZSBi c2QubWF0ZS5tayBmb3IgbW9yZSBkZXRhaWxzLgojIwojIFVTRV9XWAkJLSBJZiBzZXQsIHRoaXMg cG9ydCB1c2VzIHRoZSBXeFdpZGdldHMgbGlicmFyeSBhbmQgcmVsYXRlZAojCQkJCSAgY29tcG9u ZW50cy4gU2VlIGJzZC53eC5tayBmb3IgbW9yZSBkZXRhaWxzLgojIwojIFVTRV9LREU0CQktIEEg bGlzdCBvZiB0aGUgS0RFIDQgZGVwZW5kZW5jaWVzIHRoZSBwb3J0IGhhcyAoZS5nLiwKIwkJCQkg IGtkZWxpYnMsIGtkZWJhc2UpLiAgSW1wbGllcyB0aGF0IHRoZSBwb3J0IG5lZWRzIEtERS4KIwkJ CQkgIEltcGxpZXMgaW5jbHVzaW9uIG9mIGJzZC5rZGU0Lm1rLiAgU2VlIGJzZC5rZGU0Lm1rCiMJ CQkJICBmb3IgbW9yZSBkZXRhaWxzLgojCiMgVVNFX1FUNAkJLSBBIGxpc3Qgb2YgdGhlIFF0IDQg ZGVwZW5kZW5jaWVzIHRoZSBwb3J0IGhhcyAoZS5nLAojCQkJCSAgY29yZWxpYiwgd2Via2l0KS4g IEltcGxpZXMgdGhhdCB0aGUgcG9ydCBuZWVkcyBRdC4KIwkJCQkgIEltcGxpZXMgdGhlIGluY2x1 c2lvbiBvZiBic2QucXQubWsuICBTZWUgYnNkLnF0Lm1rCiMJCQkJICBmb3IgbW9yZSBkZXRhaWxz LgojCiMgVVNFX1FUNQkJLSBBIGxpc3Qgb2YgdGhlIFF0IDUgZGVwZW5kZW5jaWVzIHRoZSBwb3J0 IGhhcyAoZS5nLAojCQkJCSAgY29yZSwgd2Via2l0KS4gIEltcGxpZXMgdGhhdCB0aGUgcG9ydCBu ZWVkcyBRdC4KIwkJCQkgIEltcGxpZXMgdGhlIGluY2x1c2lvbiBvZiBic2QucXQubWsuICBTZWUg YnNkLnF0Lm1rCiMJCQkJICBmb3IgbW9yZSBkZXRhaWxzLgojCiMgVVNFX0xJTlVYCQktIFNldCB0 byB5ZXMgdG8gc2F5IHRoZSBwb3J0IG5lZWRzIHRoZSBkZWZhdWx0IGxpbnV4IGJhc2UgcG9ydC4K IwkJCQkgIFNldCB0byB2YWx1ZSA8WD4sIGlmIHRoZSBwb3J0IG5lZWRzIGVtdWxhdG9ycy9saW51 eF9iYXNlLTxYPi4KIwkJCQkgIEltcGxpZXMgYXBwcm9wcmlhdGUgc2V0dGluZ3MgZm9yIFNUUklQ IGFuZCBTVFJJUF9DTUQuCiMgVVNFX0xJTlVYX1BSRUZJWAojCQkJCS0gY29udHJvbHMgdGhlIGFj dGlvbiBvZiBQUkVGSVggKHNlZSBhYm92ZSkuIE9ubHkgdXNlIHRoaXMKIwkJCQkgIGlmIHRoZSBw b3J0IGlzIGEgbGludXggaW5mcmFzdHJ1Y3R1cmUgcG9ydCAoZS5nLiBjb250YWlucyBsaWJzCiMJ CQkJICBvciBhIHNvdW5kIHNlcnZlciB3aGljaCBzdXBwb3J0cyB0aGUgRnJlZUJTRCBuYXRpdmUg b25lKSwKIwkJCQkgIHVzZSB0aGUgZGVmYXVsdCBvciB0aGUgWDExIHByZWZpeCBpZiBpdCdzIGEg bGVhZiBwb3J0CiMJCQkJICAoZS5nLiBhIGdhbWUgb3IgcHJvZ3JhbSkuCiMJCQkJICBJbXBsaWVz IE5PX01UUkVFPXllcywgYW5kLCBpZiBVU0VfTERDT05GSUcgaXMgZGVmaW5lZDoKIwkJCQkgICAg LSBVU0VfTElOVVg9eWVzCiMJCQkJICAgIC0gYXBwcm9wcmlhdGUgaW52b2NhdGlvbiBvZiB0aGUg TGludXggbGRjb25maWcKIyBVU0VfTElOVVhfUlBNCS0gU2V0IHRvIHllcyB0byBwdWxsIGluIHZh cmlhYmxlcyBhbmQgdGFyZ2V0cyB1c2VmdWwgdG8gTGludXgKIwkJCQkgIFJQTSBwb3J0cy4KIwkJ CQkgIEltcGxpZXMgaW5jbHVzaW9uIG9mIGJzZC5saW51eC1ycG0ubWsuCiMKIyBMSU5VWF9PU1JF TEVBU0UJLSBDb250YWlucyB0aGUgdmFsdWUgb2YgY29tcGF0LmxpbnV4Lm9zcmVsZWFzZSBzeXNj dGwuCiMJCQkJICBXaWxsIGJlIHVzZWQgdG8gZGlzdGluZ3Vpc2ggd2hpY2ggbGludXgKIwkJCQkg IGluZnJhc3RydWN0dXJlIHBvcnRzIHNob3VsZCBiZSB1c2VkLgojCQkJCSAgVmFsaWQgdmFsdWVz OiAyLjYuMTYuCiMKIyBPVkVSUklERV9MSU5VWF9CQVNFX1BPUlQKIwkJCQktIFRoaXMgc3BlY2lm aWVzIHRoZSBkZWZhdWx0IGxpbnV4IGJhc2UgdG8gdXNlLCBmb3IgdmFsaWQKIwkJCQkgIHZhbHVl cyBoYXZlIGEgbG9vayBhdCB0aGUgZGVzY3JpcHRpb24gb2YgVVNFX0xJTlVYLiBUaGlzIGlzCiMJ CQkJICBhbiB1c2VyLW9ubHkgdmFyaWFibGUuIERvbid0IHVzZSBpdCBpbiBhbnkgcG9ydCwgaXQn cyBtZWFudAojCQkJCSAgdG8gYmUgdXNlZCBpbiBtYWtlLmNvbmYuCiMKIyBMSU5VWF9CQVNFX1BP UlQKIwkJCQktIFRoaXMgaXMgYSByZWFkLW9ubHkgdmFyaWFibGUsIGl0IGdldHMgc2V0IHRvIGEg dmFsdWUgd2hpY2ggaXMKIwkJCQkgIHVzYWJsZSBpbiAqX0RFUEVORFMgKGUuZy4gQlVJTERfREVQ RU5EUz0ke0xJTlVYX0JBU0VfUE9SVH0pLgojCQkJCSAgSXQgaG9ub3JzIFVTRV9MSU5VWD1mb28g YW5kIE9WRVJSSURFX0xJTlVYX0JBU0VfUE9SVC4KIyMKIyBVU0VfWE9SRwkJCS0gU2V0IHRvIGEg bGlzdCBvZiBYLm9yZyBtb2R1bGUgZGVwZW5kZW5jaWVzLgojCQkJCSAgSW1wbGllcyBpbmNsdXNp b24gb2YgYnNkLnhvcmcubWsuCiMjCiMgVVNFX1RFWAkJCS0gQSBsaXN0IG9mIHRoZSBUZVggZGVw ZW5kZW5jaWVzIHRoZSBwb3J0IGhhcy4KIwojIwojIFVTRV9SQ19TVUJSCS0gSWYgc2V0LCB0aGUg cG9ydHMgc3RhcnR1cC9zaHV0ZG93biBzY3JpcHQgdXNlcyB0aGUgY29tbW9uCiMJCQkJICByb3V0 aW5lcyBmb3VuZCBpbiAvZXRjL3JjLnN1YnIuCiMJCQkJICBJZiB0aGlzIGlzIHNldCB0byBhIGxp c3Qgb2YgZmlsZXMsIHRoZXNlIGZpbGVzIHdpbGwgYmUKIwkJCQkgIGF1dG9tYXRpY2FsbHkgYWRk ZWQgdG8gJHtTVUJfRklMRVN9LCBzb21lICUlVkFSJSUncyB3aWxsCiMJCQkJICBhdXRvbWF0aWNh bGx5IGJlIGV4cGFuZGVkLCB0aGV5IHdpbGwgYmUgaW5zdGFsbGVkIGluCiMJCQkJICAke1BSRUZJ WH0vZXRjL3JjLmQgaWYgJHtQUkVGSVh9IGlzIG5vdCAvdXNyLCBvdGhlcndpc2UgdGhleQojCQkJ CSAgd2lsbCBiZSBpbnN0YWxsZWQgaW4gL2V0Yy9yYy5kLyBhbmQgYWRkZWQgdG8gdGhlIHBhY2tp bmcgbGlzdC4KIyMKIyBVU0VfQVBBQ0hFCS0gSWYgc2V0LCB0aGlzIHBvcnQgcmVsaWVzIG9uIGFu IGFwYWNoZSB3ZWJzZXJ2ZXIuCiMKIyBDb25mbGljdCBjaGVja2luZy4gIFVzZSBpZiB5b3VyIHBv cnQgY2Fubm90IGJlIGluc3RhbGxlZCBhdCB0aGUgc2FtZSB0aW1lIGFzCiMgYW5vdGhlciBwYWNr YWdlLgojCiMgQ09ORkxJQ1RTCQktIEEgbGlzdCBvZiBwYWNrYWdlIG5hbWUgcGF0dGVybnMgdGhh dCB0aGUgcG9ydCBjb25mbGljdHMKIwkJCQkgIHdpdGgsIHNlcGFyYXRlZCBieSBibGFua3MuICBU aGUgbmFtZXMgbWF5IGluY2x1ZGUgc2hlbGwKIwkJCQkgIHBhdHRlcm4gbWV0YS1jaGFyYWN0ZXJz ICIqIiwgIj8iLCAiWyIsICJdIiwgYW5kICIhIi4KIwkJCQkgIEV4YW1wbGU6IGFwYWNoZSotMS4y KiBhcGFjaGUqLTEuMy5bMDEyMzQ1XSBhcGFjaGUtKitzc2xfKgojCiMgQ09ORkxJQ1RTX0JVSUxE CiMJCQkJLSBDaGVjayBjb25mbGljdCBwcmlvciB0byB0aGUgYnVpbGQuCiMKIyBDT05GTElDVFNf SU5TVEFMTAojCQkJCS0gQ2hlY2sgY29uZmxpY3QgcHJpb3IgdG8gdGhlIGluc3RhbGxhdGlvbiBz dGFnZS4KIwojIFZhcmlvdXMgZGlyZWN0b3J5IGRlZmluaXRpb25zIGFuZCB2YXJpYWJsZXMgdG8g Y29udHJvbCB0aGVtLgojIFlvdSByYXJlbHkgbmVlZCB0byByZWRlZmluZSBhbnkgb2YgdGhlc2Ug ZXhjZXB0IFdSS1NSQyBhbmQgTk9fV1JLU1VCRElSLgojCiMgTE9DQUxCQVNFCQktIFdoZXJlIHBv cnRzIGluc3RhbGwgdGhpbmdzLgojCQkJCSAgRGVmYXVsdDogL3Vzci9sb2NhbAojIExJTlVYQkFT RQkJLSBXaGVyZSBMaW51eCBwb3J0cyBpbnN0YWxsIHRoaW5ncy4KIwkJCQkgIERlZmF1bHQ6IC9j b21wYXQvbGludXgKIyBQUkVGSVgJCS0gV2hlcmUgKnRoaXMqIHBvcnQgaW5zdGFsbHMgaXRzIGZp bGVzLgojCQkJCSAgRGVmYXVsdDogJHtMSU5VWEJBU0V9IGlmIFVTRV9MSU5VWF9QUkVGSVggaXMg c2V0LAojCQkJCSAgb3RoZXJ3aXNlICR7TE9DQUxCQVNFfQojCiMgSUdOT1JFX1BBVEhfQ0hFQ0tT CiMJCQkJLSBUaGVyZSBhcmUgc29tZSBzYW5pdHkgY2hlY2tzIGFnYWluc3QgUFJFRklYLgojCQkJ CSAgWW91IGNhbiBkaXNhYmxlIHRoZXNlIGNoZWNrcyB3aXRoIGRlZmluaW5nCiMJCQkJICB0aGlz IHZhcmlhYmxlLCBidXQgdGhpcyBpcyBub3QgcmVjb21tZW5kZWQhCiMJCQkJICBPbmx5IGRvIHRo aXMgaWYgeW91IHJlYWxseSBrbm93IHdoYXQgeW91IGFyZQojCQkJCSAgZG9pbmcuICBUaGVzZSBz YW5pdHkgY2hlY2tzIGFyZSB0aGUgZm9sbG93aW5nOgojCQkJCSAgICAtIFBSRUZJWCBoYXMgdG8g YmUgYW4gYWJzb2x1dGUgcGF0aC4KIwkJCQkgICAgLSBQUkVGSVggY2FuJ3QgaGF2ZSBhIHRyYWls aW5nIHNsYXNoLgojCiMgQlVORExFX0xJQlMJICBUZWFjaCBwa2coOCkgdG8gbm90IGF1dG9tYXRp Y2FsbHkgYWRkIGFsbCBzaGFyZWQgbGlicmFyaWVzCiMgCQkJCSAgaW5zdGFsbGVkIGJ5IGEgcG9y dCBhcyBzaGFyZWQgbGlicmFyaWVzICJwcm92aWRlZCIgZm9yCiMJCQkJICBvdGhlciBwYWNrYWdl cyAoaS5lLiwgZG8gbm90IGV4cG9zZSB0aGVtIGluIHRoZSBzb2x2ZXIpLgojCQkJCSAgVGhpcyBo YXMgdG8gYmUgdXNlZCBmb3IgcG9ydHMgdGhhdCBidW5kbGUgdGhpcmQgcGFydHkKIwkJCQkgIGxp YnJhcmllcyBmb3IgaW50ZXJuYWwgdXNhZ2UuCiMgTUFTVEVSRElSCQktIFdoZXJlIHRoZSBwb3J0 IGZpbmRzIHBhdGNoZXMsIHBhY2thZ2UgZmlsZXMsIGV0Yy4gIERlZmluZQojCQkJCSAgdGhpcyBp cyB5b3UgaGF2ZSB0d28gb3IgbW9yZSBwb3J0cyB0aGF0IHNoYXJlIG1vc3Qgb2YgdGhlCiMJCQkJ ICBmaWxlcy4KIwkJCQkgIERlZmF1bHQ6ICR7LkNVUkRJUn0KIyBQT1JUU0RJUgkJLSBUaGUgcm9v dCBvZiB0aGUgcG9ydHMgdHJlZS4KIwkJCQkgIERlZmF1bHQ6IC91c3IvcG9ydHMKIyBESVNURElS CQktIFdoZXJlIHRvIHNlYXJjaCBmb3IgYW5kIHN0b3JlIGNvcGllcyBvZiBvcmlnaW5hbCBzb3Vy Y2VzCiMJCQkJICBEZWZhdWx0OiAke1BPUlRTRElSfS9kaXN0ZmlsZXMKIyBQQUNLQUdFUwkJLSBB IHRvcCBsZXZlbCBkaXJlY3Rvcnkgd2hlcmUgYWxsIHBhY2thZ2VzIGdvIChyYXRoZXIgdGhhbgoj CQkJCSAgZ29pbmcgbG9jYWxseSB0byBlYWNoIHBvcnQpLgojCQkJCSAgRGVmYXVsdDogJHtQT1JU U0RJUn0vcGFja2FnZXMKIyBXUktESVJQUkVGSVgJLSBUaGUgcGxhY2UgdG8gcm9vdCB0aGUgdGVt cG9yYXJ5IHdvcmtpbmcgZGlyZWN0b3J5CiMJCQkJICBoaWVyYXJjaHkuCiMJCQkJICBEZWZhdWx0 OiBub25lCiMgV1JLRElSCQktIEEgdGVtcG9yYXJ5IHdvcmtpbmcgZGlyZWN0b3J5IHRoYXQgZ2V0 cyAqY2xvYmJlcmVkKiBvbiBjbGVhbgojCQkJCSAgRGVmYXVsdDogJHtXUktESVJQUkVGSVh9JHsu Q1VSRElSfS93b3JrCiMgV1JLU1JDCQktIEEgc3ViZGlyZWN0b3J5IG9mICR7V1JLRElSfSB3aGVy ZSB0aGUgZGlzdHJpYnV0aW9uIGFjdHVhbGx5CiMJCQkJICB1bnBhY2tzIHRvLgojCQkJCSAgRGVm YXVsdDogJHtXUktESVJ9LyR7RElTVE5BTUV9IHVubGVzcyBOT19XUktTVUJESVIgaXMgc2V0LAoj CQkJCSAgaW4gd2hpY2ggY2FzZSBzaW1wbHkgJHtXUktESVJ9CiMgV1JLU1JDX1NVQkRJUgktIEEg c3ViZGlyZWN0b3J5IG9mICR7V1JLU1JDfSB3aGVyZSB0aGUgZGlzdHJpYnV0aW9uIGFjdHVhbGx5 CiMJCQkJICBidWlsZHMgaW4uCiMJCQkJICBEZWZhdWx0OiBub3Qgc2V0CiMgTk9fV1JLU1VCRElS CS0gQXNzdW1lIHBvcnQgdW5wYWNrcyBkaXJlY3RseSBpbnRvICR7V1JLRElSfS4KIyBQQVRDSERJ UgkJLSBBIGRpcmVjdG9yeSBjb250YWluaW5nIGFueSBhZGRpdGlvbmFsIHBhdGNoZXMgeW91IG1h ZGUKIwkJCQkgIHRvIHBvcnQgdGhpcyBzb2Z0d2FyZSB0byBGcmVlQlNELgojCQkJCSAgRGVmYXVs dDogJHtNQVNURVJESVJ9L2ZpbGVzCiMgU0NSSVBURElSCQktIEEgZGlyZWN0b3J5IGNvbnRhaW5p bmcgYW55IGF1eGlsaWFyeSBzY3JpcHRzCiMJCQkJICBEZWZhdWx0OiAke01BU1RFUkRJUn0vc2Ny aXB0cwojIEZJTEVTRElSCQktIEEgZGlyZWN0b3J5IGNvbnRhaW5pbmcgYW55IG1pc2NlbGxhbmVv dXMgYWRkaXRpb25hbCBmaWxlcy4KIwkJCQkgIERlZmF1bHQ6ICR7TUFTVEVSRElSfS9maWxlcwoj IFBLR0RJUgkJLSBBIGRpcmVjdG9yeSBjb250YWluaW5nIGFueSBwYWNrYWdlIGNyZWF0aW9uIGZp bGVzLgojCQkJCSAgRGVmYXVsdDogJHtNQVNURVJESVJ9CiMgU1JDX0JBU0UJCS0gVGhlIHJvb3Qg b2YgdGhlIHNyYyB0cmVlLiAgKFNvbWUgcG9ydHMgcmVxdWlyZSB0aGlzIHRvIGdldAojCQkJCSAg a2VybmVsIHNvdXJjZXMpLiAgRGVmYXVsdDogL3Vzci9zcmMKIyBVSURfRklMRVMJCS0gQSBsaXN0 IG9mIGZpbGVzIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgcmVnaXN0ZXJlZCBVSURzLgoj IAkJCQkgIE5vdGUgdGhhdCBmaWxlcyBoYXZlIGRlY3JlYXNpbmcgcHJpb3JpdHkuCiMgR0lEX0ZJ TEVTCQktIEEgbGlzdCBvZiBmaWxlcyBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHJlZ2lz dGVyZWQgR0lEcy4KIyAJCQkJICBOb3RlIHRoYXQgZmlsZXMgaGF2ZSBkZWNyZWFzaW5nIHByaW9y aXR5LgojCiMgVmFyaWFibGVzIHRoYXQgc2VydmUgYXMgY29udmVuaWVudCAiYWxpYXNlcyIgZm9y IHlvdXIgKi1pbnN0YWxsIHRhcmdldHMuCiMgVXNlIHRoZXNlIGxpa2U6ICIke0lOU1RBTExfUFJP R1JBTX0gJHtXUktTUkN9L3Byb2cgJHtQUkVGSVh9L2JpbiIuCiMKIyBJTlNUQUxMX1BST0dSQU0K IwkJCQktIEEgY29tbWFuZCB0byBpbnN0YWxsIGJpbmFyeSBleGVjdXRhYmxlcy4gIChCeQojCQkJ CSAgZGVmYXVsdCwgYWxzbyBzdHJpcHMgdGhlbSwgdW5sZXNzICR7U1RSSVB9IGlzCiMJCQkJICBv dmVycmlkZGVuIHRvIGJlIHRoZSBlbXB0eSBzdHJpbmcpLgojIElOU1RBTExfS0xECS0gQXMgSU5T VEFMTF9QUk9HUkFNLCBidXQgd2l0aG91dCB0aGUgU1RSSVAuCiMgSU5TVEFMTF9MSUIJLSBBcyBJ TlNUQUxMX0RBVEEsIGJ1dCBhbHNvIHN0cmlwcyB0aGUgZmlsZS4KIyBJTlNUQUxMX1NDUklQVAoj CQkJCS0gQSBjb21tYW5kIHRvIGluc3RhbGwgZXhlY3V0YWJsZSBzY3JpcHRzLgojIElOU1RBTExf REFUQQktIEEgY29tbWFuZCB0byBpbnN0YWxsIHNoYXJhYmxlIGRhdGEuCiMgSU5TVEFMTF9NQU4J LSBBIGNvbW1hbmQgdG8gaW5zdGFsbCBtYW5wYWdlcy4KIyBDT1BZVFJFRV9CSU4KIyBDT1BZVFJF RV9TSEFSRQojCQkJCS0gU2ltaWxpYXIgdG8gSU5TVEFMTF9QUk9HUkFNIGFuZCBJTlNUQUxMX0RB VEEgY29tbWFuZHMgYnV0CiMJCQkJICB3b3JraW5nIG9uIHdob2xlIHRyZWVzIG9mIGRpcmVjdG9y aWVzLCB0YWtlcyAzIGFyZ3VtZW50cywKIwkJCQkgIGxhc3Qgb25lIGlzIGZpbmQoMSkgYXJndW1l bnRzIGFuZCBvcHRpb25hbC4KIwkJCQkgIEV4YW1wbGUgdXNlOiAKIwkJCQkgIGNkICR7V1JLU1JD fS9kb2MgJiYgJHtDT1BZVFJFRV9TSEFSRX0gLiAke0RPQ1NESVJ9ICIhIC1uYW1lICpcLmJhayIK IwojCQkJCSAgSW5zdGFsbHMgYWxsIGRpcmVjdG9yaWVzIGFuZCBmaWxlcyBmcm9tICR7V1JLU1JD fS9kb2MKIwkJCQkgIHRvICR7RE9DU0RJUn0gZXhjZXB0IHNlZCBiYWNrdXAgZmlsZXMuCiMKIyBN QU5QUkVGSVgJCS0gVGhlIGRpcmVjdG9yeSBwcmVmaXggZm9yICR7TUFOPHNlY3Q+fSBhbmQgJHtN TElOS1N9LgojCQkJCSAgRGVmYXVsdDogJHtQUkVGSVh9CiMgTUFOPHNlY3Q+UFJFRklYCiMJCQkJ LSBJZiBtYW51YWwgcGFnZXMgb2Ygc29tZSBzZWN0aW9ucyBpbnN0YWxsIGluIGRpZmZlcmVudAoj CQkJCSAgbG9jYXRpb25zIHRoYW4gb3RoZXJzLCB1c2UgdGhlc2UuCiMJCQkJICBEZWZhdWx0OiAk e01BTlBSRUZJWH0KIwojIFNldCB0aGUgZm9sbG93aW5nIHRvIHNwZWNpZnkgYWxsIC5pbmZvIGZp bGVzIHlvdXIgcG9ydCBpbnN0YWxscy4KIwojIElORk8JCQktIEEgbGlzdCBvZiAuaW5mbyBmaWxl cyAob21pdHRpbmcgdGhlIHRyYWlsaW5nICIuaW5mbyIpOwojCQkJCSAgb25seSBvbmUgZW50cnkg cGVyIGRvY3VtZW50ISBUaGVzZSBmaWxlcyBhcmUgbGlzdGVkIGluCiMJCQkJICB0aGUgcGF0aCBy ZWxhdGl2ZSB0byAke0lORk9fUEFUSH0uCiMgSU5GT19QQVRICQktIFBhdGgsIHdoZXJlIGFsbCAu aW5mbyBmaWxlcyB3aWxsIGJlIGluc3RhbGxlZCBieSB5b3VyCiMJCQkJICBwb3J0LCByZWxhdGl2 ZSB0byAke1BSRUZJWH0KIwkJCQkgIERlZmF1bHQ6ICJzaGFyZS9pbmZvIiBpZiAke1BSRUZJWH0g aXMgZXF1YWwgdG8gL3VzcgojCQkJCSAgYW5kICJpbmZvIiBvdGhlcndpc2UuCiMKIyBTZXQgdGhl IGZvbGxvd2luZyB0byBzcGVjaWZ5IGFsbCBkb2N1bWVudGF0aW9uIHlvdXIgcG9ydCBpbnN0YWxs cyBpbnRvCiMgJHtET0NTRElSfQojCiMgUE9SVERPQ1MJCS0gQSBsaXN0IG9mIGZpbGVzIGFuZCBk aXJlY3RvcmllcyByZWxhdGl2ZSB0byBET0NTRElSLgojCQkJCSAgU2hlbGwgZ2xvYiBwYXR0ZXJu cyBjYW4gYmUgdXNlZCwgZGlyZWN0b3JpZXMgaW5jbHVkZQojCQkJCSAgdGhlIGVudGlyZSBzdWJ0 cmVlIG9mIGNvbnRhaW5lZCBmaWxlcyBhbmQgZGlyZWN0b3JpZXMuCiMJCQkJICBTaG91bGQgbm90 IGJlIHNldCB3aGVuIG5vIGRvY3VtZW50YXRpb24gZmlsZXMgYXJlCiMJCQkJICBpbnN0YWxsZWQu CiMJCQkJICBVc2VmdWwgZm9yIGR5bmFtaWNhbGx5IGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uLgoj CiMgU2V0IHRoZSBmb2xsb3dpbmcgdG8gc3BlY2lmeSBhbGwgZG9jdW1lbnRhdGlvbiB5b3VyIHBv cnQgaW5zdGFsbHMgaW50bwojICR7RVhBTVBMRVNESVJ9CiMKIyBQT1JURVhBTVBMRVMJCS0gQSBs aXN0IG9mIGZpbGVzIGFuZCBkaXJlY3RvcmllcyByZWxhdGl2ZSB0byBFWEFNUExFU0RJUi4KIwkJ CQkgIFNoZWxsIGdsb2IgcGF0dGVybnMgY2FuIGJlIHVzZWQsIGRpcmVjdG9yaWVzIGluY2x1ZGUK IwkJCQkgIHRoZSBlbnRpcmUgc3VidHJlZSBvZiBjb250YWluZWQgZmlsZXMgYW5kIGRpcmVjdG9y aWVzLgojCQkJCSAgU2hvdWxkIG5vdCBiZSBzZXQgd2hlbiBubyBleGFtcGxlcyBmaWxlcyBhcmUK IwkJCQkgIGluc3RhbGxlZC4KIwkJCQkgIFVzZWZ1bCBmb3IgZHluYW1pY2FsbHkgZ2VuZXJhdGVk IGV4YW1wbGVzLgojCiMgU2V0IHRoZSBmb2xsb3dpbmcgdG8gc3BlY2lmeSBhbGwgZmlsZXMgYW5k IGRpcmVjdG9yaWVzIHlvdXIgcG9ydCBpbnN0YWxscyBpbnRvCiMgJHtEQVRBRElSfQojCiMgUE9S VERBVEEJCS0gQSBsaXN0IG9mIGZpbGVzIGFuZCBkaXJlY3RvcmllcyByZWxhdGl2ZSB0byBEQVRB RElSLgojCQkJCSAgU2hlbGwgZ2xvYiBwYXR0ZXJucyBjYW4gYmUgdXNlZCwgZGlyZWN0b3JpZXMg aW5jbHVkZQojCQkJCSAgdGhlIGVudGlyZSBzdWJ0cmVlIG9mIGNvbnRhaW5lZCBmaWxlcyBhbmQg ZGlyZWN0b3JpZXMuCiMJCQkJICBTaG91bGQgbm90IGJlIHNldCB3aGVuIG5vIGRhdGEgZmlsZXMg YXJlCiMJCQkJICBpbnN0YWxsZWQuCiMJCQkJICBVc2VmdWwgZm9yIGR5bmFtaWNhbGx5IGdlbmVy YXRlZCBkYXRhIGZpbGVzLgojCiMgRGVmYXVsdCB0YXJnZXRzIGFuZCB0aGVpciBiZWhhdmlvcnM6 CiMKIyBmZXRjaAkJCS0gUmV0cmlldmVzIG1pc3NpbmcgJHtESVNURklMRVN9IGFuZCAke1BBVENI RklMRVN9IGZvciB0aGlzCiMJCQkJICBwb3J0LgojIGZldGNoLWxpc3QJLSBTaG93IGxpc3Qgb2Yg Y29tbWFuZHMgdG8gcmV0cmlldmUgbWlzc2luZyAke0RJU1RGSUxFU30gYW5kCiMJCQkJICAke1BB VENIRklMRVN9IGZvciB0aGlzIHBvcnQuCiMgZmV0Y2gtcmVjdXJzaXZlCiMJCQkJLSBSZXRyaWV2 ZXMgbWlzc2luZyAke0RJU1RGSUxFU30gYW5kICR7UEFUQ0hGSUxFU30gZm9yIHRoaXMKIwkJCQkg IHBvcnQgYW5kIGRlcGVuZGVuY2llcy4KIyBmZXRjaC1yZWN1cnNpdmUtbGlzdAojCQkJCS0gU2hv dyBsaXN0IG9mIGNvbW1hbmRzIHRvIHJldHJpZXZlIG1pc3NpbmcgJHtESVNURklMRVN9IGFuZAoj CQkJCSAgJHtQQVRDSEZJTEVTfSBmb3IgdGhpcyBwb3J0IGFuZCBkZXBlbmRlbmNpZXMuCiMgZmV0 Y2gtcmVxdWlyZWQKIwkJCQktIFJldHJpZXZlcyBtaXNzaW5nICR7RElTVEZJTEVTfSBhbmQgJHtQ QVRDSEZJTEVTfSBmb3IgdGhpcwojCQkJCSAgcG9ydCBhbmQgZGVwZW5kZW5jaWVzLgojIGZldGNo LXJlcXVpcmVkLWxpc3QKIwkJCQktIFNob3cgbGlzdCBvZiBjb21tYW5kcyB0byByZXRyaWV2ZSBt aXNzaW5nICR7RElTVEZJTEVTfSBhbmQKIwkJCQkgICR7UEFUQ0hGSUxFU30gZm9yIHRoaXMgcG9y dCBhbmQgZGVwZW5kZW5jaWVzLgojIGZldGNoLXVybC1saXN0CiMJCQkJLSBTaG93IGxpc3Qgb2Yg VVJMUyB0byByZXRyaWV2ZSBtaXNzaW5nICR7RElTVEZJTEVTfSBhbmQKIwkJCQkgICR7UEFUQ0hG SUxFU30gZm9yIHRoaXMgcG9ydC4KIyBmZXRjaC11cmxhbGwtbGlzdAojCQkJCS0gU2hvdyBsaXN0 IG9mIFVSTFMgdG8gcmV0cmlldmUgJHtESVNURklMRVN9IGFuZAojCQkJCSAgJHtQQVRDSEZJTEVT fSBmb3IgdGhpcyBwb3J0LgojCiMgYWxsLWRlcGVuZHMtbGlzdAojCQkJCS0gU2hvdyBhbGwgZGly ZWN0b3JpZXMgd2hpY2ggYXJlIGRlcGVuZGVuY2llcwojCQkJCSAgZm9yIHRoaXMgcG9ydC4KIyBi dWlsZC1kZXBlbmRzLWxpc3QKIwkJCQktIFNob3cgYWxsIGRpcmVjdG9yaWVzIHdoaWNoIGFyZSBi dWlsZC1kZXBlbmRlbmNpZXMKIwkJCQkgIGZvciB0aGlzIHBvcnQuCiMgcGFja2FnZS1kZXBlbmRz LWxpc3QKIwkJCQktIFNob3cgYWxsIGRpcmVjdG9yaWVzIHdoaWNoIGFyZSBwYWNrYWdlLWRlcGVu ZGVuY2llcwojCQkJCSAgZm9yIHRoaXMgcG9ydC4gVGhpcyBpcyBiYXNlZCB1cG9uIHRoZSBkZXBl bmRlbmN5CiMJCQkJICB0cmVlIGFzIHJlY29yZGVkIGluIHRoZSBNYWtlZmlsZXMgb2YgdGhlIHBv cnRzCiMJCQkJICBjb2xsZWN0aW9uLCBub3QgYXMgcmVjb3JkZWQgaW4gdGhlIGN1cnJlbnRseQoj CQkJCSAgaW5zdGFsbGVkIHBvcnRzLgojIGFjdHVhbC1wYWNrYWdlLWRlcGVuZHMKIwkJCQktIExp a2UgcGFja2FnZS1kZXBlbmRzLWxpc3QgYnV0IHdpdGggdGhlIGRpZmZlcmVuY2UKIwkJCQkgIHRo YXQgdGhlIGRlcGVuZGVuY2llcyBvZiB0aGUgY3VycmVudGx5IGluc3RhbGxlZAojCQkJCSAgcG9y dHMgYXJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgZGVwZW5kZW5jaWVzIGFzCiMJCQkJICByZWNvcmRl ZCBpbiB0aGUgcG9ydHMgY29sbGVjdGlvbi4KIyBydW4tZGVwZW5kcy1saXN0CiMJCQkJLSBTaG93 IGFsbCBkaXJlY3RvcmllcyB3aGljaCBhcmUgcnVuLWRlcGVuZGVuY2llcwojCQkJCSAgZm9yIHRo aXMgcG9ydC4KIwojIGV4dHJhY3QJCS0gVW5wYWNrcyAke0RJU1RGSUxFU30gaW50byAke1dSS0RJ Un0uCiMgcGF0Y2gJCQktIEFwcGx5IGFueSBwcm92aWRlZCBwYXRjaGVzIHRvIHRoZSBzb3VyY2Uu CiMgY29uZmlndXJlCQktIFJ1bnMgZWl0aGVyIEdOVSBjb25maWd1cmUsIG9uZSBvciBtb3JlIGxv Y2FsIGNvbmZpZ3VyZQojCQkJCSAgc2NyaXB0cyBvciBub3RoaW5nLCBkZXBlbmRpbmcgb24gd2hh dCdzIGF2YWlsYWJsZS4KIyBidWlsZAkJCS0gQWN0dWFsbHkgY29tcGlsZSB0aGUgc291cmNlcy4K IyBpbnN0YWxsCQktIEluc3RhbGwgdGhlIHJlc3VsdHMgb2YgYSBidWlsZC4KIyByZWluc3RhbGwJ CS0gSW5zdGFsbCB0aGUgcmVzdWx0cyBvZiBhIGJ1aWxkLCBpZ25vcmluZyAiYWxyZWFkeSBpbnN0 YWxsZWQiCiMJCQkJICBmbGFnLgojIGRlaW5zdGFsbAkJLSBSZW1vdmUgdGhlIGluc3RhbGxhdGlv bi4KIyBkZWluc3RhbGwtYWxsCS0gUmVtb3ZlIGFsbCBpbnN0YWxsYXRpb25zIHdpdGggdGhlIHNh bWUgUEtHT1JJR0lOLgojIHBhY2thZ2UJCS0gQ3JlYXRlIGEgcGFja2FnZSBmcm9tIGFuIF9pbnN0 YWxsZWRfIHBvcnQuCiMgcGFja2FnZS1yZWN1cnNpdmUKIwkJCQktIENyZWF0ZSBhIHBhY2thZ2Ug Zm9yIGEgcG9ydCBhbmQgX2FsbF8gb2YgaXRzIGRlcGVuZGVuY2llcy4KIyBkZXNjcmliZQkJLSBU cnkgdG8gZ2VuZXJhdGUgYSBvbmUtbGluZSBkZXNjcmlwdGlvbiBmb3IgZWFjaCBwb3J0IGZvcgoj CQkJCSAgdXNlIGluIElOREVYIGZpbGVzIGFuZCB0aGUgbGlrZS4KIyBjaGVjay1wbGlzdAkJLSBD aGVja3MgZm9yIGZpbGVzIG1pc3NpbmcgZnJvbSB0aGUgcGxpc3QsIGFuZCBmaWxlcyBpbiB0aGUg cGxpc3QKIwkJCQkgIHRoYXQgYXJlIG5vdCBpbnN0YWxsZWQgYnkgdGhlIHBvcnQuCiMgY2hlY2st c2FuaXR5CQktIFBlcmZvcm0gc29tZSBiYXNpYyBjaGVja3Mgb2YgdGhlIHBvcnQgbGF5b3V0Lgoj IGNoZWNrcGF0Y2gJLSBEbyBhICJwYXRjaCAtQyIgaW5zdGVhZCBvZiBhICJwYXRjaCIuICBOb3Rl IHRoYXQgaXQgbWF5CiMJCQkJICBnaXZlIGluY29ycmVjdCByZXN1bHRzIGlmIG11bHRpcGxlIHBh dGNoZXMgZGVhbCB3aXRoCiMJCQkJICB0aGUgc2FtZSBmaWxlLgojIGNoZWNrc3VtCQktIFVzZSBk aXN0aW5mbyB0byBlbnN1cmUgdGhhdCB5b3VyIGRpc3RmaWxlcyBhcmUgdmFsaWQuCiMgY2hlY2tz dW0tcmVjdXJzaXZlCiMJCQkJLSBSdW4gY2hlY2tzdW0gaW4gdGhpcyBwb3J0IGFuZCBhbGwgZGVw ZW5kZW5jaWVzLgojIG1ha2VzdW0JCS0gR2VuZXJhdGUgZGlzdGluZm8gKG9ubHkgZG8gdGhpcyBm b3IgeW91ciBvd24gcG9ydHMhKS4KIyBjbGVhbgkJCS0gUmVtb3ZlICR7V1JLRElSfSBhbmQgb3Ro ZXIgdGVtcG9yYXJ5IGZpbGVzIHVzZWQgZm9yIGJ1aWxkaW5nLgojIGNsZWFuLWRlcGVuZHMJLSBE byBhICJtYWtlIGNsZWFuIiBmb3IgYWxsIGRlcGVuZGVuY2llcy4KIyBjb25maWcJCS0gQ29uZmln dXJlIG9wdGlvbnMgZm9yIHRoaXMgcG9ydCAodXNpbmcgJHtESUFMT0d9KS4KIwkJCQkgIEF1dG9t YXRpY2FsbHkgcnVuIHByaW9yIHRvIGV4dHJhY3QsIHBhdGNoLCBjb25maWd1cmUsIGJ1aWxkLAoj CQkJCSAgaW5zdGFsbCwgYW5kIHBhY2thZ2UuCiMgY29uZmlnLXJlY3Vyc2l2ZQojCQkJCS0gQ29u ZmlndXJlIG9wdGlvbnMgZm9yIHRoaXMgcG9ydCBmb3IgYSBwb3J0IGFuZCBhbGwgaXRzCiMJCQkJ ICBkZXBlbmRlbmNpZXMuCiMgc2hvd2NvbmZpZwktIERpc3BsYXkgb3B0aW9ucyBjb25maWcgZm9y IHRoaXMgcG9ydC4KIyBzaG93Y29uZmlnLXJlY3Vyc2l2ZQojCQkJCS0gRGlzcGxheSBvcHRpb25z IGNvbmZpZyBmb3IgdGhpcyBwb3J0IGFuZCBhbGwgaXRzCiMJCQkJICBkZXBlbmRlbmNpZXMuCiMg cm1jb25maWcJCS0gUmVtb3ZlIHRoZSBvcHRpb25zIGNvbmZpZyBmb3IgdGhpcyBwb3J0LgojIHJt Y29uZmlnLXJlY3Vyc2l2ZQojCQkJCS0gUmVtb3ZlIHRoZSBvcHRpb25zIGNvbmZpZyBmb3IgdGhp cyBwb3J0IGFuZCBhbGwgaXRzCiMJCQkJICBkZXBlbmRlbmNpZXMuCiMKIyBEZWZhdWx0IHNlcXVl bmNlIGZvciAiYWxsIiBpczoKIwojCQljaGVjay1zYW5pdHkgZmV0Y2ggY2hlY2tzdW0gZXh0cmFj dCBwYXRjaCBjb25maWd1cmUgYnVpbGQKIwojIFBsZWFzZSByZWFkIHRoZSBjb21tZW50cyBpbiB0 aGUgdGFyZ2V0cyBzZWN0aW9uIGJlbG93OyB5b3UKIyBzaG91bGQgYmUgYWJsZSB0byB1c2UgdGhl IHByZS0qIG9yIHBvc3QtKiB0YXJnZXRzL3NjcmlwdHMKIyAod2hpY2ggYXJlIGF2YWlsYWJsZSBm b3IgZXZlcnkgc3RhZ2UgZXhjZXB0IGNoZWNrc3VtKSBvcgojIG92ZXJyaWRlIHRoZSBkby0qIHRh cmdldHMgdG8gZG8gcHJldHR5IG11Y2ggYW55dGhpbmcgeW91IHdhbnQuCiMKIyBORVZFUiBvdmVy cmlkZSB0aGUgInJlZ3VsYXIiIHRhcmdldHMgdW5sZXNzIHlvdSB3YW50IHRvIG9wZW4KIyBhIG1h am9yIGNhbiBvZiB3b3Jtcy4KIwojIFNldCB0aGVzZSB2YXJpYWJsZXMgaWYgeW91ciBwb3J0IGRv ZXNuJ3QgbmVlZCBzb21lIG9mIHRoZSBzdGVwcy4KIyBOb3RlIHRoYXQgdGhlcmUgYXJlIG5vIE5P X1BBVENIIG9yIE5PX0NPTkZJR1VSRSB2YXJpYWJsZXMgYmVjYXVzZQojIHRob3NlIHN0ZXBzIGFy ZSBlbXB0eSBieSBkZWZhdWx0LiAgTk9fRVhUUkFDVCBpcyBub3QgYWxsb3dlZCBhbnltb3JlCiMg c2luY2Ugd2UgbmVlZCB0byBhdCBsZWFzdCBjcmVhdGUgJHtXUktESVJ9LiAgQWxzbywgTk9fQ0hF Q0tTVU0gaXMgYSB1c2VyCiMgdmFyaWFibGUgYW5kIGlzIG5vdCB0byBiZSBzZXQgaW4gYSBwb3J0 J3MgTWFrZWZpbGUuICBTZWUgYWJvdmUgZm9yIE5PX1BBQ0tBR0UuCiMKIyBOT19CVUlMRAkJLSBV c2UgYSBkdW1teSAoZG8tbm90aGluZykgYnVpbGQgdGFyZ2V0LgojIE5PX0lOU1RBTEwJLSBVc2Ug YSBkdW1teSAoZG8tbm90aGluZykgaW5zdGFsbCB0YXJnZXQuCiMKIyBIZXJlIGFyZSBzb21lIHZh cmlhYmxlcyB1c2VkIGluIHZhcmlvdXMgc3RhZ2VzLgojCiMgRm9yIG9wdGlvbnMgc2VlIGJzZC5v cHRpb25zLm1rCiMKIyBGb3IgZmV0Y2g6CiMKIyBGRVRDSF9CSU5BUlkJLSBQYXRoIHRvIGZ0cC9o dHRwIGZldGNoIGNvbW1hbmQgaWYgbm90IGluICRQQVRILgojCQkJCSAgRGVmYXVsdDogIi91c3Iv YmluL2ZldGNoIgojIEZFVENIX0FSR1MJLSBBcmd1bWVudHMgdG8gZnRwL2h0dHAgZmV0Y2ggY29t bWFuZC4KIwkJCQkgIERlZmF1bHQ6ICItRnByIgojIEZFVENIX0NNRAkJLSBmdHAvaHR0cCBmZXRj aCBjb21tYW5kLgojCQkJCSAgRGVmYXVsdDogJHtGRVRDSF9CSU5BUll9ICR7RkVUQ0hfQVJHU30K IyBGRVRDSF9CRUZPUkVfQVJHUwojCQkJCS0gQXJndW1lbnRzIHRvICR7RkVUQ0hfQ01EfSBiZWZv cmUgZmlsZW5hbWUuCiMJCQkJICBEZWZhdWx0OiBub25lCiMgRkVUQ0hfQUZURVJfQVJHUwojCQkJ CS0gQXJndW1lbnRzIHRvICR7RkVUQ0hfQ01EfSBmb2xsb3dpbmcgZmlsZW5hbWUuCiMJCQkJICBE ZWZhdWx0OiBub25lCiMgRkVUQ0hfRU5WCQktIEVudmlyb25tZW50IHRvIHBhc3MgdG8gJHtGRVRD SF9DTUR9LgojCQkJCSAgRGVmYXVsdDogbm9uZQojIEZFVENIX1JFR0VUCS0gVGltZXMgdG8gcmV0 cnkgZmV0Y2hpbmcgb2YgZmlsZXMgb24gY2hlY2tzdW0gZXJyb3JzLgojCQkJCSAgRGVmYXVsdDog MQojIENMRUFOX0ZFVENIX0VOVgojCQkJCS0gRGlzYWJsZSBwYWNrYWdlIGRlcGVuZGVuY3kgaW4g ZmV0Y2ggdGFyZ2V0IGZvciBtYXNzCiMJCQkJICBmZXRjaGluZy4gIFVzZXIgc2V0dGFibGUuCiMK IyBGb3IgZXh0cmFjdDoKIwojIEVYVFJBQ1RfQ01ECS0gQ29tbWFuZCBmb3IgZXh0cmFjdGluZyBh cmNoaXZlCiMJCQkJICBEZWZhdWx0OiAke1RBUn0KIyBFWFRSQUNUX0JFRk9SRV9BUkdTCiMJCQkJ LSBBcmd1bWVudHMgdG8gJHtFWFRSQUNUX0NNRH0gYmVmb3JlIGZpbGVuYW1lLgojCQkJCSAgRGVm YXVsdDogIi14ZiIKIyBFWFRSQUNUX0FGVEVSX0FSR1MKIwkJCQktIEFyZ3VtZW50cyB0byAke0VY VFJBQ1RfQ01EfSBmb2xsb3dpbmcgZmlsZW5hbWUuCiMJCQkJICBEZWZhdWx0OiAiLS1uby1zYW1l LW93bmVyIC0tbm8tc2FtZS1wZXJtaXNzaW9ucyIKIyBGb3IgcGF0Y2g6CiMKIyBFWFRSQV9QQVRD SEVTCS0gRGVmaW5lIHRoaXMgdmFyaWFibGUgaWYgeW91IGhhdmUgcGF0Y2hlcyBub3QgaW4KIwkJ CQkgICR7UEFUQ0hESVJ9LiAgVGhpcyB1c3VhbGx5IGhhcHBlbnMgd2hlbiB5b3UgbmVlZCB0bwoj CQkJCSAgZG8gc29tZSBwcmUtcHJvY2Vzc2luZyBiZWZvcmUgc29tZSBkaXN0cmlidXRpb24KIwkJ CQkgIHBhdGNoZXMgY2FuIGJlIGFwcGxpZWQuICBJbiB0aGF0IGNhc2UsIGZldGNoIHRoZW0gYXMK IwkJCQkgIGV4dHJhIGRpc3RmaWxlcywgcHV0IHRoZSBwcm9jZXNzZWQgcmVzdWx0cyBpbgojCQkJ CSAgJHtXUktESVJ9LCB0aGVuIHBvaW50IEVYVFJBX1BBVENIRVMgdG8gdGhlbS4KIwkJCQkgIFRo ZSBwYXRjaGVzIHNwZWNpZmllZCBieSB0aGlzIHZhcmlhYmxlIHdpbGwgYmUKIwkJCQkgIGFwcGxp ZWQgYWZ0ZXIgdGhlIG5vcm1hbCBkaXN0cmlidXRpb24gcGF0Y2hlcyBidXQKIwkJCQkgIGJlZm9y ZSB0aG9zZSBpbiAke1BBVENIRElSfS4KIyBQQVRDSF9XUktTUkMJLSBEaXJlY3RvcnkgdG8gYXBw bHkgcGF0Y2hlcyBpbi4KIwkJCQkgIERlZmF1bHQ6ICR7V1JLU1JDfQojCiMgRm9yIGNvbmZpZ3Vy ZToKIwojIEhBU19DT05GSUdVUkUJLSBJZiBzZXQsIHRoaXMgcG9ydCBoYXMgaXRzIG93biBjb25m aWd1cmUgc2NyaXB0LiAgVGhlCiMJCQkJICBjb25maWd1cmUgc3RhZ2Ugd2lsbCBub3QgZG8gYW55 dGhpbmcgaWYgdGhpcyBpcyBub3Qgc2V0LgojIEdOVV9DT05GSUdVUkUJLSBJZiBzZXQsIHlvdSBh cmUgdXNpbmcgR05VIGNvbmZpZ3VyZSAob3B0aW9uYWwpLiAgSW1wbGllcwojCQkJCSAgSEFTX0NP TkZJR1VSRS4KIyBDT05GSUdVUkVfV1JLU1JDCiMJCQkJLSBEaXJlY3RvcnkgdG8gcnVuIGNvbmZp Z3VyZSBpbi4KIwkJCQkgIERlZmF1bHQ6ICR7V1JLU1JDfQojIENPTkZJR1VSRV9TQ1JJUFQKIwkJ CQktIE5hbWUgb2YgY29uZmlndXJlIHNjcmlwdCwgcmVsYXRpdmUgdG8gJHtDT05GSUdVUkVfV1JL U1JDfS4KIwkJCQkgIERlZmF1bHQ6ICJNYWtlZmlsZS5QTCIgaWYgVVNFUz1wZXJsNSBhbmQgVVNF X1BFUkw1PWNvbmZpZ3VyZQojCQkJCSAgYXJlIHNldCwgImNvbmZpZ3VyZSIgb3RoZXJ3aXNlLgoj IENPTkZJR1VSRV9UQVJHRVQKIwkJCQktIFRoZSBuYW1lIG9mIHRhcmdldCB0byBjYWxsIHdoZW4g R05VX0NPTkZJR1VSRSBpcwojCQkJCSAgZGVmaW5lZC4KIwkJCQkgIERlZmF1bHQ6ICR7QVJDSH0t cG9ydGJsZC0ke09QU1lTOnRsfSR7T1NSRUx9CiMgR05VX0NPTkZJR1VSRV9QUkVGSVgKIwkJCQkt IFRoZSBkaXJlY3RvcnkgcGFzc2VkIGFzIHByZWZpeCB0byB0aGUgY29uZmlndXJlIHNjcmlwdCBp ZgojCQkJCSAgR05VX0NPTkZJR1VSRSBpcyBzZXQuCiMJCQkJICBEZWZhdWx0OiAke1BSRUZJWH0K IyBDT05GSUdVUkVfQVJHUwojCQkJCS0gUGFzcyB0aGVzZSBhcmdzIHRvIGNvbmZpZ3VyZSBpZiAk e0hBU19DT05GSUdVUkV9IGlzIHNldC4KIwkJCQkgIERlZmF1bHQ6ICItLXByZWZpeD0ke0dOVV9D T05GSUdVUkVfUFJFRklYfQojCQkJCSAgLS1pbmZvZGlyPSR7UFJFRklYfS8ke0lORk9fUEFUSH0g LS1sb2NhbHN0YXRlZGlyPS92YXIKIwkJCQkgIC0tbWFuZGlyPSR7TUFOUFJFRklYfS9tYW4gLS1i dWlsZD0ke0NPTkZJR1VSRV9UQVJHRVR9IiBpZgojCQkJCSAgR05VX0NPTkZJR1VSRSBpcyBzZXQs ICJDQz0ke0NDfSBDRkxBR1M9JHtDRkxBR1N9CiMJCQkJICBQUkVGSVg9JHtQUkVGSVh9IElOU1RB TExQUklWTElCPSR7UFJFRklYfS9saWIKIwkJCQkgIElOU1RBTExBUkNITElCPSR7UFJFRklYfS9s aWIiIGlmIFVTRVM9cGVybDUgYW5kCiMJCQkJICBVU0VfUEVSTDU9Y29uZmlndXJlIGFyZSBzZXQs IGVtcHR5IG90aGVyd2lzZS4KIyBDT05GSUdVUkVfRU5WCS0gUGFzcyB0aGVzZSBlbnYgKHNoZWxs LWxpa2UpIHRvIGNvbmZpZ3VyZSBpZgojCQkJCSAgJHtIQVNfQ09ORklHVVJFfSBpcyBzZXQuCiMg Q09ORklHVVJFX0xPRwktIFRoZSBuYW1lIG9mIGNvbmZpZ3VyZSBsb2cgZmlsZS4gSXQgd2lsbCBi ZSBwcmludGVkIHRvCiMJCQkJICB0aGUgc2NyZWVuIGlmIGNvbmZpZ3VyZSBmYWlscy4KIwkJCQkg IERlZmF1bHQ6IGNvbmZpZy5sb2cKIyBDT05GSUdVUkVfRkFJTF9NRVNTQUdFCiMJCQkJLSBBIG1l c3NhZ2UgZGlzcGxheWVkIHRvIHVzZXJzIHdoZW4gY29uZmlndXJlCiMJCQkJICBmYWlscyAobm90 ZTogdGhpcyBhc3N1bWVzIHRoZSBkby1jb25maWd1cmUKIwkJCQkgIHRhcmdldCBoYXMgbm90IGJl ZW4gb3ZlcndyaXR0ZW4pLiAgVGhpcyBtZXNzYWdlCiMJCQkJICB3aWxsIGJlIHBhc3NlZCB0aHJv dWdoIC91c3IvYmluL2ZtdCBiZWZvcmUKIwkJCQkgIGJlaW5nIHNob3duIHRvIHRoZSB1c2VyLgoj CiMgV0lUSE9VVF9GQlNEMTBfRklYCQkgIERpc2FibGUgRnJlZUJTRCAxMC4wIGF1dG90b29scyB3 b3JrYXJvdW5kLgojCiMgRm9yIGJ1aWxkIGFuZCBpbnN0YWxsOgojCiMgTUFLRUZJTEUJCS0gTmFt ZSBvZiB0aGUgbWFrZWZpbGUuCiMJCQkJICBEZWZhdWx0OiBNYWtlZmlsZQojIEFMTF9UQVJHRVQJ LSBEZWZhdWx0IHRhcmdldCBmb3Igc3ViLW1ha2UgaW4gYnVpbGQgc3RhZ2UuCiMJCQkJICBEZWZh dWx0OiBhbGwKIyBCVUlMRF9XUktTUkMJLSBEaXJlY3RvcnkgdG8gZG8gYnVpbGQgaW4gKGRlZmF1 bHQ6ICR7V1JLU1JDfSkuCiMgTUFLRV9FTlYJCS0gQWRkaXRpb25hbCBlbnZpcm9ubWVudCB2YXJz IHBhc3NlZCB0byBzdWItbWFrZSBpbiBidWlsZAojCQkJCSAgYW5kIGluc3RhbGwgc3RhZ2VzLgoj CQkJCSAgRGVmYXVsdDogc2VlIGJlbG93CiMgTUFLRV9BUkdTCQktIEFueSBleHRyYSBhcmd1bWVu dHMgdG8gc3ViLW1ha2UgaW4gYnVpbGQgYW5kIGluc3RhbGwgc3RhZ2VzLgojCQkJCSAgRGVmYXVs dDogbm9uZQojIwojIE1BS0VfSk9CU19VTlNBRkUKIwkJCQktIERpc2FsbG93IG11bHRpcGxlIGpv YnMgZXZlbiB3aGVuIHVzZXIgc2V0IGEgZ2xvYmFsIG92ZXJyaWRlLgojCQkJCSAgVG8gYmUgdXNl ZCB3aXRoIGtub3duIGJhZCBwb3J0cy4KIyBESVNBQkxFX01BS0VfSk9CUwojCQkJCS0gU2V0IHRv IGRpc2FibGUgdGhlIG11bHRpcGxlIGpvYnMgZmVhdHVyZS4gIFVzZXIgc2V0dGFibGUuCiMgTUFL RV9KT0JTX05VTUJFUgojCQkJCS0gT3ZlcnJpZGUgdGhlIG51bWJlciBvZiBtYWtlIGpvYnMgdG8g YmUgdXNlZC4gIFVzZXIgc2V0dGFibGUuCiMgTUFLRV9KT0JTX05VTUJFUl9MSU1JVAojCQkJCS0g U2V0IGEgbGltaXQgZm9yIG1heGltdW0gbnVtYmVyIG9mIG1ha2Ugam9icyBhbGxvd2VkIHRvIGJl CiMJCQkJICB1c2VkLgojIyBjYWNjaGUKIwojIFdJVEhfQ0NBQ0hFX0JVSUxECiMgCQkJCS0gRW5h YmxlIENDQUNIRSBzdXBwb3J0IChkZXZlbC9jY2FjaGUpLiAgVXNlciBzZXR0YWJsZS4KIyBDQ0FD SEVfRElSCiMgCQkJCS0gV2hpY2ggZGlyZWN0b3J5IHRvIHVzZSBmb3IgY2NhY2hlIChkZWZhdWx0 OiAkSE9NRS8uY2NhY2hlKQojIE5PX0NDQUNIRQojCQkJCS0gRGlzYWJsZSBDQ0FDSEUgc3VwcG9y dCBmb3IgZXhhbXBsZSBmb3IgY2VydGFpbiBwb3J0cyBpZgojCQkJCSAgQ0NBQ0hFIGlzIGVuYWJs ZWQuICBVc2VyIHNldHRhYmxlLgojCiMgRm9yIGluc3RhbGw6CiMKIyBJTlNUQUxMX1RBUkdFVAoj CQkJCS0gRGVmYXVsdCB0YXJnZXQgZm9yIHN1Yi1tYWtlIGluIGluc3RhbGwgc3RhZ2UuCiMJCQkJ ICBEZWZhdWx0OiBpbnN0YWxsCiMgSU5TVEFMTF9XUktTUkMKIwkJCQktIERpcmVjdG9yeSB0byBp bnN0YWxsIGZyb20KIwkJCQkgIERlZmF1bHQ6ICR7V1JLU1JDfQojIE5PX01UUkVFCQktIElmIHNl dCwgd2lsbCBub3QgaW52b2tlIG10cmVlIGZyb20gYnNkLnBvcnQubWsgZnJvbQojCQkJCSAgdGhl ICJpbnN0YWxsIiB0YXJnZXQuCiMgTVRSRUVfRklMRQktIFRoZSBuYW1lIG9mIHRoZSBtdHJlZSBm aWxlLgojCQkJCSAgRGVmYXVsdDogJHtQT1JUU0RJUn0vVGVtcGxhdGVzL0JTRC5sb2NhbC5kaXN0 IG9yCiMJCQkJICAvZXRjL210cmVlL0JTRC51c3IuZGlzdCBpZiAke1BSRUZJWH0gPT0gIi91c3Ii LgojIFBMSVNUX0RJUlMJLSBEaXJlY3RvcmllcyB0byBiZSBhZGRlZCB0byBwYWNraW5nIGxpc3QK IyBQTElTVF9GSUxFUwktIEZpbGVzIGFuZCBzeW1ib2xpYyBsaW5rcyB0byBiZSBhZGRlZCB0byBw YWNraW5nIGxpc3QKIwojIFBMSVNUCQkJLSBOYW1lIG9mIHRoZSBgcGFja2luZyBsaXN0JyBmaWxl LgojCQkJCSAgQ2hhbmdlIHRoaXMgdG8gJHtXUktESVJ9L1BMSVNUIG9yIHNvbWV0aGluZyBpZiB5 b3UKIwkJCQkgIG5lZWQgdG8gd3JpdGUgdG8gaXQuICAoSXQgaXMgbm90IGEgZ29vZCBpZGVhIGZv ciBhIHBvcnQKIwkJCQkgIHRvIHdyaXRlIHRvIGFueSBmaWxlIG91dHNpZGUgJHtXUktESVJ9IGR1 cmluZyBhIG5vcm1hbAojCQkJCSAgYnVpbGQuKQojCQkJCSAgRGVmYXVsdDogJHtQS0dESVJ9L3Br Zy1wbGlzdAojIFRNUFBMSVNUCQktIE5hbWUgb2YgdGhlIGBwYWNraW5nIGxpc3QnIGZpbGUgYWZ0 ZXIgcHJvY2Vzc2luZwojCQkJCSAgRGVmYXVsdDogJHtXUktESVJ9Ly5QTElTVC5ta3RtcAojIFBM SVNUX1NVQgkJLSBMaXN0IG9mICJ2YXJpYWJsZT12YWx1ZSIgcGFpciBmb3Igc3Vic3RpdHV0aW9u IGluICR7UExJU1R9CiMJCQkJICBEZWZhdWx0OiBzZWUgYmVsb3cKIwojIFNVQl9GSUxFUwkJLSBG aWxlcyB0aGF0IHNob3VsZCBiZSBwYXNzZWQgdGhyb3VnaCBzZWQgYW5kIHJlZGlyZWN0ZWQgdG8K IwkJCQkgICR7V1JLRElSfS4KIwkJCQktIEZvciBlYWNoIGZpbGUgc3BlY2lmaWVkIGluIFNVQl9G SUxFUywgdGhlcmUgbXVzdCBiZSBhCiMJCQkJICBjb3JyZXNwb25kaW5nIGZpbGUgaW4gJHtGSUxF U0RJUn0gd2hvc2Ugc3VmZml4IGlzICIuaW4iLiBGb3IKIwkJCQkgIGluc3RhbmNlLCBpZiB0aGUg TWFrZWZpbGUgc3BlY2lmaWVzICJTVUJfRklMRVM9IHBrZy1tZXNzYWdlIgojCQkJCSAgdGhlbiB0 aGVyZSBtdXN0IGJlIGEgZmlsZSBjYWxsZWQgcGtnLW1lc3NhZ2UuaW4gaW4KIwkJCQkgICR7RklM RVNESVJ9LgojCQkJCS0gVGhlIHN1YnN0aXR1dGlvbiBwcm9jZXNzIGlzIHRoZSBzYW1lIGFzIFBM SVNUX0ZJTEVTLCBhcwojCQkJCSAgZGVzY3JpYmVkIGJlbG93IGV4Y2VwdCB0aGF0IGFueSBsaW5l IGJlZ2lubmluZyB3aXRoIEBjb21tZW50CiMJCQkJICBpcyBkZWxldGVkLgojIFNVQl9MSVNUCQkt IExpc3Qgb2YgInZhcmlhYmxlPXZhbHVlIiBwYWlyIGZvciBzdWJzdGl0dXRpb24gaW4gJHtTVUJf RklMRVN9CiMJCQkJICBTb21lIHBhaXJzIGFyZSBhZGRlZCBieSBkZWZhdWx0OiBlZy4gUFJFRklY PSR7UFJFRklYfQojCiMgVVNFX0xEQ09ORklHICAtIElmIHNldCB0byAieWVzIiwgdGhpcyBhZGRz ICR7UFJFRklYfS9saWIgdG8gdGhlIGxpc3Qgb2YKIwkJCQkgIGRpcmVjdG9yaWVzIHRvIGJlIHNl YXJjaGVkIGZvciBzaGFyZWQgbGlicmFyaWVzLgojCQkJCSAgT3RoZXJ3aXNlLCB0aGlzIGlzIGEg bGlzdCBvZiBkaXJlY3RvcmllcyB0byBiZSBhZGRlZCB0byB0aGF0CiMJCQkJICBsaXN0LiBUaGUg ZGlyZWN0b3J5IG5hbWVzIGFyZSB3cml0dGVuIHRvCiMJCQkJICAke0xPQ0FMQkFTRX0vbGliZGF0 YS9sZGNvbmZpZy8ke1VOSVFVRU5BTUV9IHdoaWNoIGlzIHRoZW4KIwkJCQkgIHVzZWQgYnkgdGhl IGxkY29uZmlnIHN0YXJ0dXAgc2NyaXB0LgojCQkJCSAgVGhpcyBtZWNoYW5pc20gcmVwbGFjZXMg bGRjb25maWcgc2NyaXB0cyBpbnN0YWxsZWQgYnkgc29tZQojCQkJCSAgcG9ydHMsIG9mdGVuIHVu ZGVyIHN1Y2ggbmFtZXMgYXMgMDAwLiR7VU5RVUVOQU1FfS5zaC4KIwkJCQkgIElmIFVTRV9MSU5V WF9QUkVGSVggaXMgZGVmaW5lZCwgdGhlIExpbnV4IHZlcnNpb24gb2YKIwkJCQkgIGxkY29uZmln IHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSBuYXRpdmUgRnJlZUJTRAojCQkJCSAgdmVyc2lv biwgYW5kIHRoZSBkaXJlY3RvcnkgbGlzdCBnaXZlbiB3aWxsIGJlIGlnbm9yZWQuCiMgVVNFX0xE Q09ORklHMzIKIyAJCQkJLSBTYW1lIGFzIFVTRV9MRENPTkZJRyBidXQgdGhlIHRhcmdldCBmaWxl IGlzCiMgCQkJCSAgJHtMT0NBTEJBU0V9L2xpYmRhdGEvbGRjb25maWczMi8ke1VOSVFVRU5BTUV9 IGluc3RlYWQuCiMgCQkJCSAgTm90ZTogdGhhdCBzaG91bGQgb25seSBiZSB1c2VkIG9uIDY0LWJp dCBhcmNoaXRlY3R1cmVzLgojCiMgRE9DU0RJUgkJLSBOYW1lIG9mIHRoZSBkaXJlY3RvcnkgdG8g aW5zdGFsbCB0aGUgcGFja2FnZXMgZG9jcyBpbi4KIwkJCQkgIERlZmF1bHQ6ICR7UFJFRklYfS9z aGFyZS9kb2MvJHtQT1JUTkFNRX0KIyBET0NTRElSX1JFTAktIFRoZSBET0NTRElSIHJlbGF0aXZl IHRvICR7UFJFRklYfQojIEVYQU1QTEVTRElSCS0gTmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRvIGlu c3RhbGwgdGhlIHBhY2thZ2VzIGV4YW1wbGVzIGluLgojCQkJCSAgRGVmYXVsdDogJHtQUkVGSVh9 L3NoYXJlL2V4YW1wbGVzLyR7UE9SVE5BTUV9CiMgRVhBTVBMRVNESVJfUkVMCiMJCQkJLSBUaGUg RVhBTVBMRVNESVIgcmVsYXRpdmUgdG8gJHtQUkVGSVh9CiMgREFUQURJUgkJLSBOYW1lIG9mIHRo ZSBkaXJlY3RvcnkgdG8gaW5zdGFsbCB0aGUgcGFja2FnZXMgc2hhcmVkIGRhdGEgaW4uCiMJCQkJ ICBEZWZhdWx0OiAke1BSRUZJWH0vc2hhcmUvJHtQT1JUTkFNRX0KIyBEQVRBRElSX1JFTAktIFRo ZSBEQVRBRElSIHJlbGF0aXZlIHRvICR7UFJFRklYfQojCiMgV1dXRElSCQktIE5hbWUgb2YgdGhl IGRpcmVjdG9yeSB0byBpbnN0YWxsIHRoZSBwYWNrYWdlcyB3d3cgZGF0YSBpbi4KIwkJCQkgIERl ZmF1bHQ6ICR7UFJFRklYfS93d3cvJHtQT1JUTkFNRX0KIyBXV1dESVJfUkVMCS0gVGhlIFdXV0RJ UiByZWxhdGl2ZSB0byAke1BSRUZJWH0KIwojIFVTRVJTCQkJLSBMaXN0IG9mIHVzZXJzIHRvIGNy ZWF0ZSBhdCBpbnN0YWxsIHRpbWUuIEVhY2ggbG9naW4gbXVzdAojIAkJCQkgIGhhdmUgYSBjb3Jy ZXNwb25kaW5nIGVudHJ5IGluICR7VUlEX0ZJTEVTfS4KIyBHUk9VUFMJCS0gTGlzdCBvZiBncm91 cHMgdG8gY3JlYXRlIGF0IGluc3RhbGwgdGltZS4gRWFjaCBncm91cCBtdXN0CiMgCQkJCSAgaGF2 ZSBhIGNvcnJlc3BvbmRpbmcgZW50cnkgaW4gJHtHSURfRklMRVN9LgojCiMgREVTS1RPUERJUgkt IE5hbWUgb2YgdGhlIGRpcmVjdG9yeSB0byBpbnN0YWxsICR7REVTS1RPUF9FTlRSSUVTfSBpbi4K IwkJCQkgIERlZmF1bHQ6ICR7UFJFRklYfS9zaGFyZS9hcHBsaWNhdGlvbnMKIyBERVNLVE9QX0VO VFJJRVMKIwkJCQktIExpc3Qgb2YgZGVza3RvcCBlbnRyeSBmaWxlcyB0byBnZW5lcmF0ZSBhbmQg aW5zdGFsbCBpbgojCQkJCSAgJHtERVNLVE9QRElSfS4gVGhlIGZvcm1hdCBpcwojCQkJCSAgIk5h bWUiICJDb21tZW50IiAiSWNvbiIgIkV4ZWMiICJDYXRlZ29yaWVzIiBTdGFydHVwTm90aWZ5CiMJ CQkJICBSdWxlczoKIwkJCQkJKiBPbmx5IGFkZCBkZXNrdG9wIGVudHJpZXMgZm9yIGFwcGxpY2F0 aW9ucyB3aGljaCBkbyBub3QKIwkJCQkJICByZXF1aXJlIGEgdGVybWluYWwgKGllLiBYIGFwcGxp Y2F0aW9ucykuCiMJCQkJCSogSWYgdGhlIHVwc3RyZWFtIGRpc3RyaWJ1dGlvbiBhbHJlYWR5IGlu c3RhbGxzIC5kZXNrdG9wCiMJCQkJCSAgZmlsZXMsIHlvdSBkbyBub3QgbmVlZCB0byB1c2UgdGhp cy4KIwkJCQkJKiBJZiB5b3UgcmVxdWlyZSBhIG1vcmUgZWxhYm9yYXRlIC5kZXNrdG9wIGZpbGUg dGhhbiB0aGlzCiMJCQkJCSAgdmFyaWFibGUgcGVybWl0cywgd3JpdGUgaXQgeW91cnNlbGYgYW5k IGluc3RhbGwgaXQKIwkJCQkJICBpbiAke0RFU0tUT1BESVJ9LgojCQkJCSAgTm90ZXM6CiMJCQkJ CSogQ29tbWVudCwgSWNvbiBhbmQgU3RhcnR1cE5vdGlmeSBtYXkgYmUgZW1wdHkKIwkJCQkJICBz dHJpbmdzICgiIikuIENhdGVnb3JpZXMgbWF5IGJlIGFuIGVtcHR5IHN0cmluZyBpbiBzb21lCiMJ CQkJCSAgY2FzZXMgKHNlZSBiZWxvdykuIFRoZSBvdGhlciBmaWVsZHMgYXJlIG1hbmRhdG9yeS4K IwkJCQkJKiBJZiBDb21tZW50IGlzIGFuIGVtcHR5IHN0cmluZywgcG9ydCAke0NPTU1FTlR9IHdp bGwgYmUKIwkJCQkJICB1c2VkLgojCQkJCQkqIElmIHNldCwgSWNvbiBtdXN0IGJlIGVpdGhlciBh YnNvbHV0ZSBwYXRoICh1c3VhbGx5CiMJCQkJCSAgJHtQUkVGSVh9L3NoYXJlL3BpeG1hcHMvJHtQ T1JUTkFNRX0ucG5nKSBvciBpY29uIG5hbWUKIwkJCQkJICB3aXRob3V0IGV4dGVuc2lvbiBpZiBp bnN0YWxsZWQgaWNvbnMgZm9sbG93IEljb24gVGhlbWUKIwkJCQkJICBTcGVjaWZpY2F0aW9uLgoj CQkJCQkqIElmIENhdGVnb3JpZXMgaXMgYW4gZW1wdHkgc3RyaW5nLCBic2QucG9ydC5tayB3aWxs IHRyeQojCQkJCQkgIHRvIGRlZHVjZSBhIGRlZmF1bHQgdmFsdWUgdXNpbmcgdGhlIENBVEVHT1JJ RVMgdmFyaWFibGUuCiMJCQkJCSAgSWYgdGhlIGRlZHVjdGlvbiBmYWlscywgeW91IHdpbGwgaGF2 ZSB0byBzZXQgQ2F0ZWdvcmllcwojCQkJCQkgIG1hbnVhbGx5LiBZb3Ugc2hvdWxkIGNoZWNrIHRo ZSBnZW5lcmF0ZWQgdmFsdWUgdXNpbmcKIwkJCQkJICAibWFrZSBkZXNrdG9wLWNhdGVnb3JpZXMi LCBhbmQgb3ZlcnJpZGUgaXQgaWYgbmVjZXNzYXJ5LgojCQkJCQkqIEV4ZWMgd2lsbCBhbHNvIGJl IHVzZWQgdG8gbmFtZSB0aGUgLmRlc2t0b3AgZmlsZS4KIwkJCQkJKiBTdGFydHVwTm90aWZ5IG1h eSBiZSB0cnVlLCBmYWxzZSBvciBlbXB0eSAoc2VlIERlc2t0b3AKIwkJCQkJICBFbnRyeSBTcGVj aWZpY2F0aW9uIGZvciBkZXRhaWxzKS4KIwkJCQkJKiBUaGUgZmlsZXMgd2lsbCBiZSBhdXRvbWF0 aWNhbGx5IGFkZGVkIHRvICR7UExJU1R9LgojCQkJCSAgRXhhbXBsZToKIwkJCQkJIlggV2luZG93 IEluZm9ybWF0aW9uIiBcCiMJCQkJCSJHZXQgaW5mb3JtYXRpb24gYWJvdXQgWCB3aW5kb3dzIiBc CiMJCQkJCSIke1BSRUZJWH0vc2hhcmUvcGl4bWFwcy93aW5pbmZvLnBuZyIgXAojCQkJCQkiJHtQ UkVGSVh9L2Jpbi93aW5pbmZvIiBcCiMJCQkJCSJTeXN0ZW07IiBcCiMJCQkJCSIiCiMJCQkJICBT ZWUgaHR0cDovL3N0YW5kYXJkcy5mcmVlZGVza3RvcC5vcmcvZGVza3RvcC1lbnRyeS1zcGVjL2Rl c2t0b3AtZW50cnktc3BlYy1sYXRlc3QuaHRtbAojCQkJCSAgZm9yIGFuIGV4cGxhbmF0aW9uIG9m IHRoZSBmaWVsZHMuIElmIHlvdSBuZWVkIHRvIGNyZWF0ZSBtb3JlCiMJCQkJICB0aGFuIG9uZSBm aWxlLCBqdXN0IGNoYWluIHRoZW0gaW50byBhIHNpbmdsZSB2YXJpYWJsZS4KIwojIE5vdGUgdGhh dCB0aGUgaW5zdGFsbCB0YXJnZXQgd2lsbCBhdXRvbWF0aWNhbGx5IGFkZCBtYW5wYWdlcyAoc2Vl CiMgYWJvdmUpIGFuZCBhbHNvIHN1YnN0aXR1dGUgc3BlY2lhbCBzZXF1ZW5jZXMgb2YgY2hhcmFj dGVycyAoZGVsaW1pdGVkCiMgYnkgIiUlIikgYXMgZGVmaW5lZCBpbiBQTElTVF9TVUIgdG8gZ2Vu ZXJhdGUgJHtUTVBQTElTVH0uICBGb3IKIyBpbnN0YW5jZSwgIk9TUkVMPSR7T1NSRUx9IiBpbiBQ TElTVF9TVUIgY2F1c2VzIGFsbCBvY2N1cnJlbmNlcyBvZgojICIlJU9TUkVMJSUiIGluICR7UExJ U1R9IHRvIGJlIHN1YnN0aXR1dGVkIGJ5IHRoZSB2YWx1ZSBvZiBPU1JFTC4KIyAke1RNUFBMSVNU fSBpcyBnZW5lcmF0ZWQgYmVmb3JlIHRoZSBkby1pbnN0YWxsIHN0YWdlLiAgSWYgeW91IGFyZQoj IGdlbmVyYXRpbmcgdGhlIHBhY2tpbmcgbGlzdCBvbi10aGUtZmx5LCBtYWtlIHN1cmUgaXQncyBn ZW5lcmF0ZWQgYmVmb3JlCiMgZG8taW5zdGFsbCBpcyBjYWxsZWQhCiMKIyBGb3IgcGFja2FnZToK IwojIExBVEVTVF9MSU5LCS0gSW5zdGFsbCB0aGUgIkxhdGVzdCIgbGluayBmb3IgdGhlIHBhY2th Z2UgYXMgX19fLiAgRGVmaW5lCiMJCQkJICB0aGlzIGlmIHRoZSAiTGF0ZXN0IiBsaW5rIG5hbWUg d2lsbCBiZSBpbmNvcnJlY3RseSBkZXRlcm1pbmVkLgojCiMgVGhpcyBpcyB1c2VkIGluIGFsbCBz dGFnZXM6CiMKIyBTQ1JJUFRTX0VOVgktIEFkZGl0aW9uYWwgZW52aXJvbm1lbnQgdmFycyBwYXNz ZWQgdG8gc2NyaXB0cyBpbgojCQkJCSAgJHtTQ1JJUFRESVJ9IGV4ZWN1dGVkIGJ5IGJzZC5wb3J0 Lm1rLgojCQkJCSAgRGVmYXVsdDogc2VlIGJlbG93CiMKIyBGaW5hbGx5LCB2YXJpYWJsZXMgdG8g Y2hhbmdlIGlmIHlvdSB3YW50IGEgc3BlY2lhbCBiZWhhdmlvci4gIFRoZXNlCiMgYXJlIGZvciBk ZWJ1Z2dpbmcgcHVycG9zZXMuICBEb24ndCBzZXQgdGhlbSBpbiB5b3VyIE1ha2VmaWxlLgojCiMg RUNIT19NU0cJCS0gVXNlZCB0byBwcmludCBhbGwgdGhlICc9PT0+JyBzdHlsZSBwcm9tcHRzIC0g b3ZlcnJpZGUgdGhpcwojCQkJCSAgdG8gdHVybiB0aGVtIG9mZi4KIwkJCQkgIERlZmF1bHQ6ICR7 RUNIT19DTUR9CiMgUEFUQ0hfREVCVUcJLSBJZiBzZXQsIHByaW50IG91dCBtb3JlIGluZm9ybWF0 aW9uIGFib3V0IHRoZSBwYXRjaGVzIGFzCiMJCQkJICBpdCBhdHRlbXB0cyB0byBhcHBseSB0aGVt LgojIFBLR19EQkRJUgkJLSBXaGVyZSBwYWNrYWdlIGluc3RhbGxhdGlvbiBpcyByZWNvcmRlZDsg dGhpcyBkaXJlY3RvcnkKIwkJCQkgIG11c3Qgbm90IGNvbnRhaW4gYW55dGhpbmcgZWxzZS4KIwkJ CQkgIERlZmF1bHQ6IC92YXIvZGIvcGtnCiMgUE9SVF9EQkRJUgktIFdoZXJlIHBvcnQgY29uZmln dXJhdGlvbiBvcHRpb25zIGFyZSByZWNvcmRlZC4KIwkJCQkgIERlZmF1bHQ6IC92YXIvZGIvcG9y dHMKIyBOT19QS0dfUkVHSVNURVIKIwkJCQktIERvbid0IHJlZ2lzdGVyIGEgcG9ydCBpbnN0YWxs YXRpb24gYXMgYSBwYWNrYWdlLgojIEZPUkNFX1BLR19SRUdJU1RFUgojCQkJCS0gSWYgc2V0LCBp dCB3aWxsIG92ZXJ3cml0ZSBhbnkgZXhpc3RpbmcgcGFja2FnZQojCQkJCSAgcmVnaXN0cmF0aW9u IGluZm9ybWF0aW9uIGluICR7UEtHX0RCRElSfS8ke1BLR05BTUV9LgojIE5PX0RFUEVORFMJLSBE b24ndCB2ZXJpZnkgYnVpbGQgb2YgZGVwZW5kZW5jaWVzLgojIFNUUklDVF9ERVBFTkRTCiMJCQkJ LSBWZXJpZnkgZGVwZW5kZW5jaWVzIGJ1dCBjb25zaWRlciBtaXNzaW5nIGRlcGVuZGVuY2llcyBh cwojCQkJCSAgZmF0YWwuCiMgQ0hFQ0tTVU1fQUxHT1JJVEhNUwojCQkJCS0gRGlmZmVyZW50IGNo ZWNrc3VtIGFsZ29yaXRobXMgdG8gY2hlY2sgZm9yIHZlcmlmeWluZyB0aGUKIwkJCQkgIGludGVn cml0eSBvZiB0aGUgZGlzdGZpbGVzLiBUaGUgYWJzZW5jZSBvZiB0aGUgYWxnb3JpdGhtCiMJCQkJ ICBpbiBkaXN0aW5mbyBkb2Vzbid0IG1ha2UgaXQgZmFpbC4KIwkJCQkgIERlZmF1bHQ6IHNoYTI1 NgojIE5PX0NIRUNLU1VNCS0gRG9uJ3QgdmVyaWZ5IHRoZSBjaGVja3N1bS4gIFR5cGljYWxseSB1 c2VkIHdoZW4KIwkJCQkgIHdoZW4geW91IG5vdGljZWQgdGhlIGRpc3RmaWxlIHlvdSBqdXN0IGZl dGNoZWQgaGFzCiMJCQkJICBhIGRpZmZlcmVudCBjaGVja3N1bSBhbmQgeW91IGludGVuZCB0byB2 ZXJpZnkgaWYKIwkJCQkgIHRoZSBwb3J0IHN0aWxsIHdvcmtzIHdpdGggaXQuCiMgVVNFX1BBQ0tB R0VfREVQRU5EUwojCQkJCS0gVHJ5IHRvIGluc3RhbGwgZGVwZW5kZW5jaWVzIGZyb20gZXhpc3Rp bmcgcGFja2FnZXMgaW5zdGVhZAojCQkJCSAgb2YgYnVpbGRpbmcgdGhlIHBvcnQgZnJvbSBzY3Jh dGNoLiBGYWxsYmFjayBvbiBzb3VyY2UKIwkJCQkgIGlmIGFuIGV4aXN0aW5nIHBhY2thZ2UgaXMg bm90IHByZXNlbnQuCiMgVVNFX1BBQ0tBR0VfREVQRU5EU19PTkxZCiMJCQkJLSBMaWtlIFVTRV9Q QUNLQUdFX0RFUEVORFMsIGJ1dCBkbyBub3QgZmFsbGJhY2sgb24gc291cmNlLgojIElOU1RBTExf QVNfVVNFUgojCQkJCS0gRGVmaW5lIHRoaXMgdG8gaW5zdGFsbCBhcyB0aGUgY3VycmVudCB1c2Vy LCBpbnRlbmRlZAojCQkJCSAgZm9yIHN5c3RlbXMgd2hlcmUgeW91IGhhdmUgbm8gcm9vdCBhY2Nl c3MuCiMgRElTQUJMRV9TSVpFCS0gRG8gbm90IGNoZWNrIHRoZSBzaXplIG9mIGEgZGlzdGZpbGUg ZXZlbiBpZiB0aGUgU0laRSBmaWVsZAojCQkJCSAgaGFzIGJlZW4gc3BlY2lmaWVkIGluIGRpc3Rp bmZvLiAgVGhpcyBpcyB1c2VmdWwKIwkJCQkgIHdoZW4gdXNpbmcgYW4gYWx0ZXJuYXRlIEZFVENI X0NNRC4KIwojIEVuZCBvZiB0aGUgbGlzdCBvZiBhbGwgdmFyaWFibGVzIHRoYXQgbmVlZCB0byBi ZSBkZWZpbmVkIGluIGEgcG9ydC4KIyBNb3N0IHBvcnQgYXV0aG9ycyBzaG91bGQgbm90IG5lZWQg dG8gdW5kZXJzdGFuZCBhbnl0aGluZyBhZnRlciB0aGlzIHBvaW50LgojCgojIFRoZXNlIG5lZWQg dG8gYmUgYWJzb2x1dGUgc2luY2Ugd2UgZG9uJ3Qga25vdyBob3cgZGVlcCBpbiB0aGUgcG9ydHMK IyB0cmVlIHdlIGFyZSBhbmQgdGh1cyBjYW4ndCBnbyByZWxhdGl2ZS4gIFRoZXkgY2FuLCBvZiBj b3Vyc2UsIGJlIG92ZXJyaWRkZW4KIyBieSBpbmRpdmlkdWFsIE1ha2VmaWxlcyBvciBsb2NhbCBz eXN0ZW0gbWFrZSBjb25maWd1cmF0aW9uLgpQT1JUU0RJUj89CQkvdXNyL3BvcnRzCkxPQ0FMQkFT RT89CQkvdXNyL2xvY2FsCkxJTlVYQkFTRT89CQkvY29tcGF0L2xpbnV4CkRJU1RESVI/PQkJJHtQ T1JUU0RJUn0vZGlzdGZpbGVzCl9ESVNURElSPz0JCSR7RElTVERJUn0vJHtESVNUX1NVQkRJUn0K SU5ERVhESVI/PQkJJHtQT1JUU0RJUn0KU1JDX0JBU0U/PQkJL3Vzci9zcmMKVVNFU0RJUj89CQkk e1BPUlRTRElSfS9Nay9Vc2VzClNDUklQVFNESVI/PQkke1BPUlRTRElSfS9Nay9TY3JpcHRzCkxJ Ql9ESVJTPz0JCS9saWIgL3Vzci9saWIgJHtMT0NBTEJBU0V9L2xpYgpTVEFHRURJUj89CSR7V1JL RElSfS9zdGFnZQpOT1RQSE9OWT89Ck1JTklNQUxfUEtHX1ZFUlNJT049CTEuMy44CgojIG1ha2Ug c3VyZSBibWFrZSB0cmVhdHMgLVYgYXMgZXhwZWN0ZWQKLk1BS0UuRVhQQU5EX1ZBUklBQkxFUz0g eWVzCgouaW5jbHVkZSAiJHtQT1JUU0RJUn0vTWsvYnNkLmNvbW1hbmRzLm1rIgoKLmlmIGRlZmlu ZWQoWF9CVUlMRF9GT1IpCi5pZiAhZGVmaW5lZCguUEFSU0VESVIpCklHTk9SRT0JQ3Jvc3MgYnVp bGRpbmcgY2FuIG9ubHkgYmUgZG9uZSB3aGVuIHVzaW5nIGJtYWtlKDEpIGFzIG1ha2UoMSkKLmVu ZGlmCi5pZiAhZGVmaW5lZChBUkNIKQpBUkNIPQkJJHtYX0JVSUxEX0ZPUn0KLmVuZGlmCiMgRG8g bm90IGRlZmluZSBDUFAgb24gcHVycG9zZQouaWYgIWRlZmluZWQoSE9TVENDKQpIT1NUQ0M6PQkk e0NDfQpIT1NUQ1hYOj0JJHtDWFh9Ci5lbmRpZgoKU1lTUk9PVD0JJHtTUkNESVJ9Ly4uL3Jvb3Qv JHtBUkNIfS8KCk5NPQkJJHtBUkNIfS1mcmVlYnNkLW5tClNUUklQX0NNRD0JJHtBUkNIfS1mcmVl YnNkLXN0cmlwCiMgb25seSBibWFrZSBzdXBwb3J0IHRoZSBiZWxvdwpTVFJJUEJJTj0JJHtTVFJJ UF9DTUR9Ci5leHBvcnQuZW52IFNUUklQQklOCgouZW5kaWYKCgojCiMgREVTVERJUiBzZWN0aW9u IHRvIHN0YXJ0IGEgY2hyb290ZWQgcHJvY2VzcyBpZiBpbnZva2VkIHdpdGggREVTVERJUiBzZXQK IwoKLmlmIGRlZmluZWQoREVTVERJUikgJiYgIWVtcHR5KERFU1RESVIpICYmICFkZWZpbmVkKENI Uk9PVEVEKSAmJiBcCgkhZGVmaW5lZChCRUZPUkVQT1JUTUspICYmICFkZWZpbmVkKElOT1BUSU9O U01LKQoKLmluY2x1ZGUgIiR7UE9SVFNESVJ9L01rL2JzZC5kZXN0ZGlyLm1rIgoKLmVsc2UKCiMg TG9vayBmb3IgZmlsZXMgbmFtZWQgIioub3JpZyIgdW5kZXIgJHtQQVRDSF9XUktTUkN9IGFuZCAo cmUtKWdlbmVyYXRlCiMgJHtQQVRDSERJUn0vcGF0Y2gtKiBmaWxlcyBmcm9tIHRoZW0uICBCeSBw b3B1bGFyIGRlbWFuZCwgd2UgY3VycmVudGx5CiMgdXNlICdfJyAodW5kZXJzY29yZSkgdG8gcmVw bGFjZSBwYXRoIHNlcGFyYXRvcnMgaW4gcGF0Y2ggZmlsZSBuYW1lcy4KIwojIElmIGEgZmlsZSBu YW1lIGhhcHBlbnMgdG8gY29udGFpbiBjaGFyYWN0ZXIgd2hpY2ggaXMgYWxzbyBhIHNlcGFyYXRv cgojIHJlcGxhY2VtZW50IGNoYXJhY3RlciwgaXQgd2lsbCBiZSBkb3VibGVkIGluIHRoZSByZXN1 bHRpbmcgcGF0Y2ggbmFtZS4KIwojIFRvIG1pbmltaXplIGdyYXR1aXRvdXMgcGF0Y2ggcmVuYW1l cywgbmV3bHkgZ2VuZXJhdGVkIHBhdGNoZXMgd2lsbCBiZQojIHdyaXR0ZW4gdW5kZXIgZXhpc3Rp bmcgZmlsZSBuYW1lcyB3aGVuIHRoZXkgdXNlIGFueSBvZiB0aGUgcHJldmlvdXNseQojIGNvbW1v biBwYXRoIHNlcGFyYXRvcnMgKFstK19dKSBvciBsZWdhY3kgZG91YmxlIHVuZGVyc2NvcmUgKF9f KS4KCi5pZiAhdGFyZ2V0KG1ha2VwYXRjaCkKUEFUQ0hfUEFUSF9TRVBBUkFUT1I9CV8KbWFrZXBh dGNoOgoJQCR7TUtESVJ9ICR7UEFUQ0hESVJ9CglAKGNkICR7UEFUQ0hfV1JLU1JDfTsgXAoJCWZv ciBmIGluIGAke0ZJTkR9IC1zIC4gLXR5cGUgZiAtbmFtZSAnKi5vcmlnJ2A7IGRvIFwKCQkJT1JJ Rz0kJHtmIy4vfTsgXAoJCQlORVc9JCR7T1JJRyUub3JpZ307IFwKCQkJY21wIC1zICQke09SSUd9 ICQke05FV30gJiYgY29udGludWU7IFwKCQkJISBmb3IgX2xwcyBpbiBgJHtFQ0hPfSBfIC0gKyB8 ICR7U0VEfSAtZSBcCgkJCQknc3wke1BBVENIX1BBVEhfU0VQQVJBVE9SfXxfX3wnYDsgZG8gXAoJ CQkJCVBBVENIPWAke0VDSE99ICQke05FV30gfCAke1NFRH0gLWUgInN8L3wkJHtfbHBzfXxnImA7 IFwKCQkJCQl0ZXN0IC1mICIke1BBVENIRElSfS9wYXRjaC0kJHtQQVRDSH0iICYmIGJyZWFrOyBc CgkJCWRvbmUgfHwgJHtFQ0hPfSAkJHtfU0VFTn0gfCAke0dSRVB9IC1xIC8kJHtQQVRDSH0gJiYg eyBcCgkJCQlQQVRDSD1gJHtFQ0hPfSAkJHtORVd9IHwgJHtTRUR9IC1lIFwKCQkJCQknc3wke1BB VENIX1BBVEhfU0VQQVJBVE9SfXwmJnxnJyAtZSBcCgkJCQkJJ3N8L3wke1BBVENIX1BBVEhfU0VQ QVJBVE9SfXxnJ2A7IFwKCQkJCV9TRUVOPSQke19TRUVOfS8kJHtQQVRDSH07IFwKCQkJfTsgXAoJ CQlPVVQ9JHtQQVRDSERJUn0vcGF0Y2gtJCR7UEFUQ0h9OyBcCgkJCSR7RUNIT30gJHtESUZGfSAt dWRwICQke09SSUd9ICQke05FV30gJz4nICQke09VVH07IFwKCQkJVFo9VVRDICR7RElGRn0gLXVk cCAkJHtPUklHfSAkJHtORVd9IHwgJHtTRUR9IC1lIFwKCQkJCScvXi0tLS9zfFwuWzAtOV0qICsw MDAwJCR8IFVUQ3wnIC1lIFwKCQkJCScvXisrKy9zfFwoW1s6Ymxhbms6XV1bLTAtOTouK10qXCkq JCR8fCcgXAoJCQkJCT4gJCR7T1VUfSB8fCAke1RSVUV9OyBcCgkJZG9uZSBcCgkpCi5lbmRpZgoK CiMgU3RhcnQgb2Ygb3B0aW9ucyBzZWN0aW9uCi5pZiBkZWZpbmVkKElOT1BUSU9OU01LKSB8fCAo ICFkZWZpbmVkKFVTRU9QVElPTlNNSykgJiYgIWRlZmluZWQoQUZURVJQT1JUTUspICkKCgojIEdl dCB0aGUgZGVmYXVsdCBtYWludGFpbmVyCk1BSU5UQUlORVI/PQlwb3J0c0BGcmVlQlNELm9yZwoK IyBHZXQgdGhlIGFyY2hpdGVjdHVyZQouaWYgIWRlZmluZWQoQVJDSCkKQVJDSCE9CSR7VU5BTUV9 IC1wCi5lbmRpZgoKIyBHZXQgdGhlIG9wZXJhdGluZyBzeXN0ZW0gdHlwZQouaWYgIWRlZmluZWQo T1BTWVMpCk9QU1lTIT0JJHtVTkFNRX0gLXMKLmVuZGlmCgpVTkFNRVIhPSR7VU5BTUV9IC1yCgoj IEdldCB0aGUgb3BlcmF0aW5nIHN5c3RlbSByZXZpc2lvbgpPU1JFTD89CSR7VU5BTUVSOkMvLS4q Ly99CgojIEdldCBfX0ZyZWVCU0RfdmVyc2lvbgouaWYgIWRlZmluZWQoT1NWRVJTSU9OKQouaWYg ZXhpc3RzKC91c3IvaW5jbHVkZS9zeXMvcGFyYW0uaCkKT1NWRVJTSU9OIT0JJHtBV0t9ICcvXlwj ZGVmaW5lW1s6Ymxhbms6XV1fX0ZyZWVCU0RfdmVyc2lvbi8ge3ByaW50ICQkM30nIDwgL3Vzci9p bmNsdWRlL3N5cy9wYXJhbS5oCi5lbGlmIGV4aXN0cygke1NSQ19CQVNFfS9zeXMvc3lzL3BhcmFt LmgpCk9TVkVSU0lPTiE9CSR7QVdLfSAnL15cI2RlZmluZVtbOmJsYW5rOl1dX19GcmVlQlNEX3Zl cnNpb24vIHtwcmludCAkJDN9JyA8ICR7U1JDX0JBU0V9L3N5cy9zeXMvcGFyYW0uaAouZWxzZQou ZXJyb3IgVW5hYmxlIHRvIGRldGVybWluZSBPUyB2ZXJzaW9uLiAgRWl0aGVyIGRlZmluZSBPU1ZF UlNJT04sIGluc3RhbGwgL3Vzci9pbmNsdWRlL3N5cy9wYXJhbS5oIG9yIGRlZmluZSBTUkNfQkFT RS4KLmVuZGlmCi5lbmRpZgoKIyBDb252ZXJ0IE9TVkVSU0lPTiB0byBtYWpvciByZWxlYXNlIG51 bWJlcgpfT1NWRVJTSU9OX01BSk9SPQkke09TVkVSU0lPTjpDLyhbMC05XT9bMC05XSkoWzAtOV1b MC05XSlbMC05XXszfS9cMS99CiMgU2FuaXR5IGNoZWNrcyBmb3IgY2hyb290L2phaWwgYnVpbGRp bmcuCiMgU2tpcCBpZiBPU1ZFUlNJT04gc3BlY2lmaWVkIG9uIGNtZGxpbmUgZm9yIHRlc3Rpbmcu IE9ubHkgd29ya3MgZm9yIGJtYWtlLgouaWYgIWRlZmluZWQoLk1BS0VPVkVSUklERVMpIHx8ICEk ey5NQUtFT1ZFUlJJREVTOk1PU1ZFUlNJT059Ci5pZiAke19PU1ZFUlNJT05fTUFKT1J9ICE9ICR7 VU5BTUVSOlJ9Ci5lcnJvciBVTkFNRV9yICgke1VOQU1FUn0pIGFuZCBPU1ZFUlNJT04gKCR7T1NW RVJTSU9OfSkgZG8gbm90IGFncmVlIG9uIG1ham9yIHZlcnNpb24gbnVtYmVyLgouZWxpZiAke19P U1ZFUlNJT05fTUFKT1J9ICE9ICR7T1NSRUw6Un0KLmVycm9yIE9TUkVMICgke09TUkVMfSkgYW5k IE9TVkVSU0lPTiAoJHtPU1ZFUlNJT059KSBkbyBub3QgYWdyZWUgb24gbWFqb3IgdmVyc2lvbiBu dW1iZXIuCi5lbmRpZgouZW5kaWYKCiMgT25seSBkZWZpbmUgdG9vbHMgaGVyZSAoZm9yIHRyYW5z aXRpb24gcGVyaW9kIHdpdGggYmV0d2VlbiBwa2cgdG9vbHMpCi5pbmNsdWRlICIke1BPUlRTRElS fS9Nay9ic2QuY29tbWFuZHMubWsiCgouaWYgZXhpc3RzKCR7UEtHX0JJTn0pCi5pZiAhZGVmaW5l ZChfUEtHX1ZFUlNJT04pCl9QS0dfVkVSU0lPTiE9CSR7UEtHX0JJTn0gLXYKLmVuZGlmCl9QS0df U1RBVFVTIT0JJHtQS0dfQklOfSB2ZXJzaW9uIC10ICR7X1BLR19WRVJTSU9OOkMvLS4qLy9nfSAk e01JTklNQUxfUEtHX1ZFUlNJT059Ci5pZiAke19QS0dfU1RBVFVTfSA9PSAiPCIKSUdOT1JFPQkJ cGtnKDgpIG11c3QgYmUgdmVyc2lvbiAke01JTklNQUxfUEtHX1ZFUlNJT059IG9yIGdyZWF0ZXIs IGJ1dCB5b3UgaGF2ZSAke19QS0dfVkVSU0lPTn0uIFlvdSBtdXN0IHVwZ3JhZGUgdGhlICR7UEtH X09SSUdJTn0gcG9ydCBmaXJzdAouZW5kaWYKLmVuZGlmCgpNQVNURVJESVI/PQkkey5DVVJESVJ9 CgouaWYgJHtNQVNURVJESVJ9ICE9ICR7LkNVUkRJUn0KU0xBVkVfUE9SVD89CXllcwpNQVNURVJf UE9SVD89JHtNQVNURVJESVI6Qy9bXlwvXStcL1wuXC5cLy8vOkMvW15cL10rXC9cLlwuXC8vLzpD L14uKlwvKFteXC9dK1wvW15cL10rKSQvXFwxL30KLmVsc2UKU0xBVkVfUE9SVD89CW5vCk1BU1RF Ul9QT1JUPz0KLmVuZGlmCgojIElmIHRoZXkgZXhpc3QsIGluY2x1ZGUgTWFrZWZpbGUuaW5jLCB0 aGVuIGFyY2hpdGVjdHVyZS9vcGVyYXRpbmcKIyBzeXN0ZW0gc3BlY2lmaWMgTWFrZWZpbGVzLCB0 aGVuIGxvY2FsIE1ha2VmaWxlLmxvY2FsLgoKLmlmICR7TUFTVEVSRElSfSAhPSAkey5DVVJESVJ9 ICYmIGV4aXN0cygkey5DVVJESVJ9Ly4uL01ha2VmaWxlLmluYykKLmluY2x1ZGUgIiR7LkNVUkRJ Un0vLi4vTWFrZWZpbGUuaW5jIgpVU0VfU1VCTUFLRT0JeWVzCi5lbmRpZgoKLmlmIGV4aXN0cygk e01BU1RFUkRJUn0vLi4vTWFrZWZpbGUuaW5jKQouaW5jbHVkZSAiJHtNQVNURVJESVJ9Ly4uL01h a2VmaWxlLmluYyIKVVNFX1NVQk1BS0U9CXllcwouZW5kaWYKCi5pZiBleGlzdHMoJHtNQVNURVJE SVJ9L01ha2VmaWxlLiR7QVJDSH0tJHtPUFNZU30pCi5pbmNsdWRlICIke01BU1RFUkRJUn0vTWFr ZWZpbGUuJHtBUkNIfS0ke09QU1lTfSIKVVNFX1NVQk1BS0U9CXllcwouZWxpZiBleGlzdHMoJHtN QVNURVJESVJ9L01ha2VmaWxlLiR7T1BTWVN9KQouaW5jbHVkZSAiJHtNQVNURVJESVJ9L01ha2Vm aWxlLiR7T1BTWVN9IgpVU0VfU1VCTUFLRT0JeWVzCi5lbGlmIGV4aXN0cygke01BU1RFUkRJUn0v TWFrZWZpbGUuJHtBUkNIfSkKLmluY2x1ZGUgIiR7TUFTVEVSRElSfS9NYWtlZmlsZS4ke0FSQ0h9 IgpVU0VfU1VCTUFLRT0JeWVzCi5lbmRpZgoKLmlmIGV4aXN0cygke01BU1RFUkRJUn0vTWFrZWZp bGUubG9jYWwpCi5pbmNsdWRlICIke01BU1RFUkRJUn0vTWFrZWZpbGUubG9jYWwiClVTRV9TVUJN QUtFPQl5ZXMKLmVuZGlmCgouZm9yIF9DQVRFR09SWSBpbiAke0NBVEVHT1JJRVN9ClBLR0NBVEVH T1JZPz0JJHtfQ0FURUdPUll9Ci5lbmRmb3IKX1BPUlRESVJOQU1FPQkkey5DVVJESVI6VH0KUE9S VERJUk5BTUU/PQkke19QT1JURElSTkFNRX0KUEtHT1JJR0lOPz0JCSR7UEtHQ0FURUdPUll9LyR7 UE9SVERJUk5BTUV9CgojIHdoZXJlICdtYWtlIGNvbmZpZycgcmVjb3JkcyB1c2VyIGNvbmZpZ3Vy YXRpb24gb3B0aW9ucwpQT1JUX0RCRElSPz0JL3Zhci9kYi9wb3J0cwoKVUlEX0ZJTEVTPz0JJHtQ T1JUU0RJUn0vVUlEcwpHSURfRklMRVM/PQkke1BPUlRTRElSfS9HSURzClVJRF9PRkZTRVQ/PQkw CkdJRF9PRkZTRVQ/PQkwCgojIHByZWRlZmluZWQgYWNjb3VudHMgZnJvbSBzcmMvZXRjL21hc3Rl ci5wYXNzd2QKIyBhbHBoYSBudW1lcmljIHNvcnQgb3JkZXIKVVNFUlNfQkxBQ0tMSVNUPQlfZGhj cCBfcGZsb2dkIGF1ZGl0ZGlzdGQgYmluIGJpbmQgZGFlbW9uIGdhbWVzIGhhc3Qga21lbSBtYWls bnVsbCBtYW4gbmV3cyBub2JvZHkgb3BlcmF0b3IgcG9wIHByb3h5IHJvb3Qgc21tc3Agc3NoZCB0 b29yIHR0eSB1dWNwIHd3dwoKTERDT05GSUdfRElSPQlsaWJkYXRhL2xkY29uZmlnCkxEQ09ORklH MzJfRElSPQlsaWJkYXRhL2xkY29uZmlnMzIKCi5pZiBkZWZpbmVkKExBVEVTVF9MSU5LKQpVTklR VUVOQU1FPz0JJHtMQVRFU1RfTElOS30KLmVsc2UKVU5JUVVFTkFNRT89CSR7UEtHTkFNRVBSRUZJ WH0ke1BPUlROQU1FfQouZW5kaWYKCi5lbmRpZgoKIyBBdCBsZWFzdCBLREUgbmVlZHMgVE1QRElS IGZvciB0aGUgcGFja2FnZSBidWlsZGluZywKIyBzbyB3ZSdyZSBzZXR0aW5nIGl0IHRvIHRoZSBr bm93biBkZWZhdWx0IHZhbHVlLgouaWYgZGVmaW5lZChQQUNLQUdFX0JVSUxESU5HKQpUTVBESVI/ PQkvdG1wCi5lbmRpZiAjIGRlZmluZWQoUEFDS0FHRV9CVUlMRElORykKCi5pZiBkZWZpbmVkKFdJ VEhfREVCVUdfUE9SVFMpCi5pZiAke1dJVEhfREVCVUdfUE9SVFM6TSR7UEtHT1JJR0lOfX0KV0lU SF9ERUJVRz0JeWVzCi5lbmRpZgouZW5kaWYKCi5pbmNsdWRlICIke1BPUlRTRElSfS9Nay9ic2Qu b3B0aW9ucy5tayIKCiMgU3RhcnQgb2YgcHJlLW1ha2VmaWxlIHNlY3Rpb24uCi5pZiAhZGVmaW5l ZChBRlRFUlBPUlRNSykgJiYgIWRlZmluZWQoSU5PUFRJT05TTUspCgouaWYgZGVmaW5lZChQT1JU TkFNRSkKLmluY2x1ZGUgIiR7UE9SVFNESVJ9L01rL2JzZC5zYW5pdHkubWsiCi5lbmRpZgoKX1BS RU1LSU5DTFVERUQ9CXllcwoKLmlmIGRlZmluZWQoUE9SVFZFUlNJT04pCi5pZiAke1BPUlRWRVJT SU9OOk0qWy1fLF0qfXggIT0geApJR05PUkU9CQkJUE9SVFZFUlNJT04gJHtQT1JUVkVSU0lPTn0g bWF5IG5vdCBjb250YWluICctJyAnXycgb3IgJywnCi5lbmRpZgpESVNUVkVSU0lPTj89CSR7UE9S VFZFUlNJT046Uy86Lzo6L2d9Ci5lbGlmIGRlZmluZWQoRElTVFZFUlNJT04pClBPUlRWRVJTSU9O PQkke0RJU1RWRVJTSU9OOnRsOkMvKFthLXpdKVthLXpdKy9cMS9nOkMvKFswLTldKShbYS16XSkv XDEuXDIvZzpDLzooLikvXDEvZzpDL1teYS16MC05K10rLy4vZ30KLmVuZGlmCgpQT1JUUkVWSVNJ T04/PQkwCi5pZiAke1BPUlRSRVZJU0lPTn0gIT0gMApfU1VGMT0JXyR7UE9SVFJFVklTSU9OfQou ZW5kaWYKClBPUlRFUE9DSD89CQkwCi5pZiAke1BPUlRFUE9DSH0gIT0gMApfU1VGMj0JLCR7UE9S VEVQT0NIfQouZW5kaWYKClBLR1ZFUlNJT049CSR7UE9SVFZFUlNJT046Qy9bLV8sXS8uL2d9JHtf U1VGMX0ke19TVUYyfQpQS0dOQU1FPQkke1BLR05BTUVQUkVGSVh9JHtQT1JUTkFNRX0ke1BLR05B TUVTVUZGSVh9LSR7UEtHVkVSU0lPTn0KRElTVFZFUlNJT05GVUxMPQkke0RJU1RWRVJTSU9OUFJF RklYfSR7RElTVFZFUlNJT046Qy86KC4pL1wxL2d9JHtESVNUVkVSU0lPTlNVRkZJWH0KLmlmIGRl ZmluZWQoVVNFX0dJVEhVQikgJiYgZW1wdHkoTUFTVEVSX1NJVEVTOk1HSEMpICYmIGVtcHR5KERJ U1ROQU1FKSAmJiBlbXB0eShVU0VfR0lUSFVCOk1ub2RlZmF1bHQpCl9HSVRIVUJfTVVTVF9TRVRf RElTVE5BTUU9CQl5ZXMKLmVsc2UKRElTVE5BTUU/PQkke1BPUlROQU1FfS0ke0RJU1RWRVJTSU9O RlVMTH0KLmVuZGlmCgpJTkRFWEZJTEU/PQkJSU5ERVgtJHtPU1ZFUlNJT046Qy8oWzAtOV0qKVsw LTldezV9L1wxL30KCkRPQ1NESVI/PQkJJHtQUkVGSVh9L3NoYXJlL2RvYy8ke1BPUlROQU1FfQpF WEFNUExFU0RJUj89CQkke1BSRUZJWH0vc2hhcmUvZXhhbXBsZXMvJHtQT1JUTkFNRX0KREFUQURJ Uj89CQkke1BSRUZJWH0vc2hhcmUvJHtQT1JUTkFNRX0KV1dXRElSPz0JCSR7UFJFRklYfS93d3cv JHtQT1JUTkFNRX0KRVRDRElSPz0JCSR7UFJFRklYfS9ldGMvJHtQT1JUTkFNRX0KCi5pZiBkZWZp bmVkKFVTRV9MSU5VWF9SUE0pCi5pbmNsdWRlICIke1BPUlRTRElSfS9Nay9ic2QubGludXgtcnBt Lm1rIgouZW5kaWYKCi5pZiBkZWZpbmVkKFVTRV9MSU5VWF9BUFBTKQouaW5jbHVkZSAiJHtQT1JU U0RJUn0vTWsvYnNkLmxpbnV4LWFwcHMubWsiCi5lbmRpZgoKLmlmIGRlZmluZWQoVVNFX1hPUkcp IHx8IGRlZmluZWQoWE9SR19DQVQpCi5pbmNsdWRlICIke1BPUlRTRElSfS9Nay9ic2QueG9yZy5t ayIKLmVuZGlmCgpQQUNLQUdFUz89CQkke1BPUlRTRElSfS9wYWNrYWdlcwpURU1QTEFURVM/PQkJ JHtQT1JUU0RJUn0vVGVtcGxhdGVzCktFWVdPUkRTPz0JCSR7UE9SVFNESVJ9L0tleXdvcmRzCgpQ QVRDSERJUj89CQkke01BU1RFUkRJUn0vZmlsZXMKRklMRVNESVI/PQkJJHtNQVNURVJESVJ9L2Zp bGVzClNDUklQVERJUj89CQkke01BU1RFUkRJUn0vc2NyaXB0cwpQS0dESVI/PQkJJHtNQVNURVJE SVJ9CgouaWYgZGVmaW5lZChVU0VfTElOVVhfUFJFRklYKQpQUkVGSVg6PQkJJHtMSU5VWEJBU0V9 Ck5PX01UUkVFPQkJeWVzCi5lbHNlClBSRUZJWD89CQkke0xPQ0FMQkFTRX0KLmVuZGlmCgouaWYg ZGVmaW5lZChVU0VfTElOVVhfUFJFRklYKQpMRENPTkZJR19DTUQ/PQkJCSR7TElOVVhCQVNFfS9z YmluL2xkY29uZmlnIC1yICR7TElOVVhCQVNFfQouZW5kaWYKClBLR0NPTVBBVERJUj89CQkke0xP Q0FMQkFTRX0vbGliL2NvbXBhdC9wa2cKCi5pZiBkZWZpbmVkKFVTRV9MT0NBTF9NSykKLmluY2x1 ZGUgIiR7UE9SVFNESVJ9L01rL2JzZC5sb2NhbC5tayIKLmVuZGlmCgouaWYgZGVmaW5lZChVU0Vf T1BFTlNTTCkKLmluY2x1ZGUgIiR7UE9SVFNESVJ9L01rL2JzZC5vcGVuc3NsLm1rIgouZW5kaWYK Ci5pZiBkZWZpbmVkKFVTRV9FTUFDUykKLmluY2x1ZGUgIiR7UE9SVFNESVJ9L01rL2JzZC5lbWFj cy5tayIKLmVuZGlmCgouaWYgZGVmaW5lZChVU0VfUEhQKQouaW5jbHVkZSAiJHtQT1JUU0RJUn0v TWsvYnNkLnBocC5tayIKLmVuZGlmCgouaWYgZGVmaW5lZChVU0VfRlBDKSB8fCBkZWZpbmVkKFdB TlRfRlBDX0JBU0UpIHx8IGRlZmluZWQoV0FOVF9GUENfQUxMKQouaW5jbHVkZSAiJHtQT1JUU0RJ Un0vTWsvYnNkLmZwYy5tayIKLmVuZGlmCgouaWYgZGVmaW5lZChVU0VfSkFWQSkKLmluY2x1ZGUg IiR7UE9SVFNESVJ9L01rL2JzZC5qYXZhLm1rIgouZW5kaWYKCi5pZiBkZWZpbmVkKFVTRV9SVUJZ KSB8fCBkZWZpbmVkKFVTRV9MSUJSVUJZKQouaW5jbHVkZSAiJHtQT1JUU0RJUn0vTWsvYnNkLnJ1 YnkubWsiCi5lbmRpZgoKLmlmIGRlZmluZWQoVVNFX09DQU1MKQouaW5jbHVkZSAiJHtQT1JUU0RJ Un0vTWsvYnNkLm9jYW1sLm1rIgouZW5kaWYKCi5pZiBkZWZpbmVkKFVTRV9BUEFDSEUpIHx8IGRl ZmluZWQoVVNFX0FQQUNIRV9CVUlMRCkgfHwgZGVmaW5lZChVU0VfQVBBQ0hFX1JVTikKLmluY2x1 ZGUgIiR7UE9SVFNESVJ9L01rL2JzZC5hcGFjaGUubWsiCi5lbmRpZgoKLmlmIGRlZmluZWQoVVNF X1FUNCkgfHwgZGVmaW5lZChVU0VfUVQ1KQouaW5jbHVkZSAiJHtQT1JUU0RJUn0vTWsvYnNkLnF0 Lm1rIgouZW5kaWYKCi5pZiBkZWZpbmVkKFVTRV9URVgpCi5pbmNsdWRlICIke1BPUlRTRElSfS9N ay9ic2QudGV4Lm1rIgouZW5kaWYKCi5pZiBkZWZpbmVkKFVTRV9HRUNLTykKLmluY2x1ZGUgIiR7 UE9SVFNESVJ9L01rL2JzZC5nZWNrby5tayIKLmVuZGlmCgouaWYgZGVmaW5lZChXQU5UX0dOT01F KSB8fCBkZWZpbmVkKFVTRV9HTk9NRSkgfHwgZGVmaW5lZChJTlNUQUxMU19JQ09OUykKLmluY2x1 ZGUgIiR7UE9SVFNESVJ9L01rL2JzZC5nbm9tZS5tayIKLmVuZGlmCgouaWYgZGVmaW5lZChVU0Vf TUFURSkKLmluY2x1ZGUgIiR7UE9SVFNESVJ9L01rL2JzZC5tYXRlLm1rIgouZW5kaWYKCi5pZiBk ZWZpbmVkKFdBTlRfV1gpIHx8IGRlZmluZWQoVVNFX1dYKSB8fCBkZWZpbmVkKFVTRV9XWF9OT1Qp Ci5pbmNsdWRlICIke1BPUlRTRElSfS9Nay9ic2Qud3gubWsiCi5lbmRpZgoKLmlmIGRlZmluZWQo V0FOVF9HU1RSRUFNRVIpIHx8IGRlZmluZWQoVVNFX0dTVFJFQU1FUikgfHwgZGVmaW5lZChVU0Vf R1NUUkVBTUVSMSkKLmluY2x1ZGUgIiR7UE9SVFNESVJ9L01rL2JzZC5nc3RyZWFtZXIubWsiCi5l bmRpZgoKLmlmIGRlZmluZWQoVVNFX1NETCkgfHwgZGVmaW5lZChXQU5UX1NETCkKLmluY2x1ZGUg IiR7UE9SVFNESVJ9L01rL2JzZC5zZGwubWsiCi5lbmRpZgoKLmlmIGRlZmluZWQoVVNFX0tERTQp IHx8IGRlZmluZWQoS0RFNF9CVUlMREVOVikKLmluY2x1ZGUgIiR7UE9SVFNESVJ9L01rL2JzZC5r ZGU0Lm1rIgouZW5kaWYKCi5pZiAhZGVmaW5lZChVSUQpClVJRCE9CSR7SUR9IC11Ci5lbmRpZgoK REVTVERJUk5BTUU/PQlERVNURElSCgojIExvYWRpbmcgZmVhdHVyZXMKLmZvciBmIGluICR7VVNF U30KX2Y6PQkJJHtmOkMvXDouKi8vfQouaWYgIWRlZmluZWQoJHtfZn1fQVJHUykKJHtfZn1fQVJH Uzo9CSR7ZjpDL15bXlw6XSooXDp8XCQpLy86Uy8sLyAvZ30KLmVuZGlmCi5lbmRmb3IKLmZvciBm IGluICR7VVNFU30KLmluY2x1ZGUgIiR7VVNFU0RJUn0vJHtmOkMvXDouKi8vfS5tayIKLmVuZGZv cgoKRVhUUkFDVF9TVUZYPz0JCQkudGFyLmd6CgojIFlvdSBjYW4gZm9yY2Ugc2tpcHBpbmcgdGhl c2UgdGVzdCBieSBkZWZpbmluZyBJR05PUkVfUEFUSF9DSEVDS1MKLmlmICFkZWZpbmVkKElHTk9S RV9QQVRIX0NIRUNLUykKLmlmICEgJHtQUkVGSVg6TS8qfQouQkVHSU46CglAJHtFQ0hPX01TR30g IlBSRUZJWCBtdXN0IGJlIGRlZmluZWQgYXMgYW4gYWJzb2x1dGUgcGF0aCBzbyB0aGF0IHdoZW4g J21ha2UnIgoJQCR7RUNIT19NU0d9ICJpcyBpbnZva2VkIGluIHRoZSB3b3JrIGFyZWEgUFJFRklY IHBvaW50cyB0byB0aGUgcmlnaHQgcGxhY2UuIgoJQCR7RkFMU0V9Ci5lbmRpZgouZW5kaWYKCiMg T3duZXIgYW5kIGdyb3VwIG9mIHRoZSBXV1cgdXNlcgpXV1dPV04/PQl3d3cKV1dXR1JQPz0Jd3d3 CgojIEtlZXAgUEtHTkdfT1JJR0lOL1dJVEhfUEtHTkcgZm9yIGNvbXBhdCB3aXRoIHNjcmlwdHMg d2hpY2ggYXJlIGxvb2tpbmcgZm9yIGl0ClBLR19PUklHSU4/PQlwb3J0cy1tZ210L3BrZwpQS0dO R19PUklHSU49CSR7UEtHX09SSUdJTn0KV0lUSF9QS0dORz89CXllcwpXSVRIX1BLRz89CSR7V0lU SF9QS0dOR30KCi5lbmRpZgojIEVuZCBvZiBwcmUtbWFrZWZpbGUgc2VjdGlvbi4KCiMgU3RhcnQg b2YgcG9zdC1tYWtlZmlsZSBzZWN0aW9uLgouaWYgIWRlZmluZWQoQkVGT1JFUE9SVE1LKSAmJiAh ZGVmaW5lZChJTk9QVElPTlNNSykKCi5pZiBkZWZpbmVkKF9QT1NUTUtJTkNMVURFRCkKREVWX0VS Uk9SKz0JIiR7UEtHTkFNRX06IE1ha2VmaWxlIGVycm9yOiB5b3UgY2Fubm90IGluY2x1ZGUgYnNk LnBvcnRbLnBvc3RdLm1rIHR3aWNlIgoJQCR7RkFMU0V9Ci5lbmRpZgoKX1BPU1RNS0lOQ0xVREVE PQl5ZXMKCi5pZiBkZWZpbmVkKEJVTkRMRV9MSUJTKQpQS0dfTk9URVMrPQlub19wcm92aWRlX3No bGliClBLR19OT1RFX25vX3Byb3ZpZGVfc2hsaWI9CXllcwouZW5kaWYKClBLR19FTlYrPQkJUE9S VFNESVI9JHtQT1JUU0RJUn0KQ09ORklHVVJFX0VOVis9CVhER19EQVRBX0hPTUU9JHtXUktESVJ9 IFwKCQkJCVhER19DT05GSUdfSE9NRT0ke1dSS0RJUn0gXAoJCQkJSE9NRT0ke1dSS0RJUn0KTUFL RV9FTlYrPQkJWERHX0RBVEFfSE9NRT0ke1dSS0RJUn0gXAoJCQkJWERHX0NPTkZJR19IT01FPSR7 V1JLRElSfSBcCgkJCQlIT01FPSR7V1JLRElSfQojIFJlc3BlY3QgVE1QRElSIHBhc3NlZCB2aWEg bWFrZS5jb25mIG9yIHNpbWlsYXIgYW5kIHBhc3MgaXQgZG93bgojIHRvIGNvbmZpZ3VyZSBhbmQg bWFrZS4KLmlmIGRlZmluZWQoVE1QRElSKQpNQUtFX0VOVis9CQlUTVBESVI9IiR7VE1QRElSfSIK Q09ORklHVVJFX0VOVis9CVRNUERJUj0iJHtUTVBESVJ9IgouZW5kaWYgIyBkZWZpbmVkKFRNUERJ UikKClFBX0VOVis9CQlTVEFHRURJUj0ke1NUQUdFRElSfSBcCgkJCQlQUkVGSVg9JHtQUkVGSVh9 IFwKCQkJCUxJTlVYQkFTRT0ke0xJTlVYQkFTRX0gXAoJCQkJTE9DQUxCQVNFPSR7TE9DQUxCQVNF fSBcCgkJCQkiU1RSSVA9JHtTVFJJUH0iIFwKCQkJCVRNUFBMSVNUPSR7VE1QUExJU1R9Ci5pZiAh ZW1wdHkoVVNFUzpNZGVza3RvcC1maWxlLXV0aWxzKQpRQV9FTlYrPQkJVVNFU0RFU0tUT1BGSUxF VVRJTFM9eWVzCi5lbmRpZgouaWYgIWVtcHR5KFVTRVM6TWxpYnRvb2wqKQpRQV9FTlYrPQkJVVNF U0xJQlRPT0w9eWVzCi5lbmRpZgouaWYgIWVtcHR5KFVTRVM6TXNoYXJlZC1taW1lLWluZm8pClFB X0VOVis9CQlVU0VTU0hBUkVETUlNRUlORk89eWVzCi5lbmRpZgoKQ09fRU5WKz0JCVNUQUdFRElS PSR7U1RBR0VESVJ9IFwKCQkJCVBSRUZJWD0ke1BSRUZJWH0gXAoJCQkJTE9DQUxCQVNFPSR7TE9D QUxCQVNFfSBcCgkJCQlXUktESVI9JHtXUktESVJ9IFwKCQkJCVdSS1NSQz0ke1dSS1NSQ30gXAoJ CQkJTVRSRUVfRklMRT0ke01UUkVFX0ZJTEV9IFwKCQkJCVRNUFBMSVNUPSR7VE1QUExJU1R9IFwK CQkJCVNDUklQVFNESVI9JHtTQ1JJUFRTRElSfSBcCgkJCQlQTElTVF9TVUJfU0VEPSIke1BMSVNU X1NVQl9TRUR9IiBcCgkJCQlQT1JUX09QVElPTlM9IiR7UE9SVF9PUFRJT05TfSIgXAoJCQkJUE9S VFNESVI9IiR7UE9SVFNESVJ9IgoKLmlmIGRlZmluZWQoWF9CVUlMRF9GT1IpCi5pZiAke0NDfSA9 PSBnY2MKQ09ORklHVVJFX1RBUkdFVD0JJHtBUkNIfS1wb3J0YmxkLSR7T1BTWVM6dGx9JHtPU1JF TH0KQ0M9CQkJJHtDT05GSUdVUkVfVEFSR0VUfS1nY2MKQ1hYPQkJCSR7QVJDSH0tcG9ydGJsZC0k e09QU1lTOnRsfSR7T1NSRUx9LWcrKwpCVUlMRF9ERVBFTkRTKz0JCSR7Q09ORklHVVJFX1RBUkdF VH0tZ2NjOiR7UE9SVFNESVJ9L2RldmVsLyR7QVJDSH0tZ2NjCiAgICAgICAgCQlAaWYgWyAhIC1o IC91c3IvbG9jYWwvYmluL21pcHMtcG9ydGJsZC1mcmVlYnNkMTEuMC1hciAgXTsgdGhlbiBcCgkJ CSAgIGxuIC1zZiAvdXNyL2xvY2FsL2Jpbi9taXBzLWZyZWVic2QtYXIgL3Vzci9sb2NhbC9iaW4v bWlwcy1wb3J0YmxkLWZyZWVic2QxMS4wLWFyIDsgXAoJCQlmaSA7CgkJCWlmIFsgISAtaCAvdXNy L2xvY2FsL2Jpbi9taXBzLXBvcnRibGQtZnJlZWJzZDExLjAtbm0gIF07IHRoZW4gXAoJCQkgICBs biAtc2YgL3Vzci9sb2NhbC9iaW4vbWlwcy1mcmVlYnNkLW5tIC91c3IvbG9jYWwvYmluL21pcHMt cG9ydGJsZC1mcmVlYnNkMTEuMC1ubSA7IFwKCQkJZmkgOwoJCQlpZiBbICEgLWggL3Vzci9sb2Nh bC9iaW4vbWlwcy1wb3J0YmxkLWZyZWVic2QxMS4wLXJhbmxpYiAgXTsgdGhlbiBcCgkJCSAgIGxu IC1zZiAvdXNyL2xvY2FsL2Jpbi9taXBzLWZyZWVic2QtcmFubGliIC91c3IvbG9jYWwvYmluL21p cHMtcG9ydGJsZC1mcmVlYnNkMTEuMC1yYW5saWIgOyBcCgkJCWZpIDsKCQkJaWYgWyAhIC1oIC91 c3IvbG9jYWwvYmluL21pcHMtcG9ydGJsZC1mcmVlYnNkMTEuMC1zdHJpcCAgXTsgdGhlbiBcCgkJ CSAgIGxuIC1zZiAvdXNyL2xvY2FsL2Jpbi9taXBzLWZyZWVic2Qtc3RyaXAgL3Vzci9sb2NhbC9i aW4vbWlwcy1wb3J0YmxkLWZyZWVic2QxMS4wLXN0cmlwIDsgXAoJCQlmaQoKLmVuZGlmCi5pZiAk e0NDfSA9PSBjYyB8fCAke0NDfSA9PSBjbGFuZwpDT05GSUdVUkVfVEFSR0VUPSAgICAgICAke0FS Q0h9LXBvcnRibGQtJHtPUFNZUzp0bH0ke09TUkVMfQpDRkxBR1MrPQkJLS10YXJnZXQ9JHtDT05G SUdVUkVfVEFSR0VUfQouZW5kaWYKClBLR19FTlYrPQkJQUJJX0ZJTEU9JHtTWVNST09UfS91c3Iv bGliL2NydDEubwpOTT0JCQkke05NfQpMRD0JCQkke0NPTkZJR1VSRV9UQVJHRVR9LWdjYy1sZApB Uj0JCQkke0NPTkZJR1VSRV9UQVJHRVR9LWdjYy1hcgpSQU5MSUI9CQkJJHtDT05GSUdVUkVfVEFS R0VUfS1nY2MtcmFubGliCklOQ1M9CQkJLUkke1NSQ0RJUn0vLi4vcm9vdC8ke0FSQ0h9L3Vzci9p bmNsdWRlCkNST1NTX0NPTVBJTEU9CQkke0FSQ0h9LXBvcnRibGQtZnJlZWJzZCR7T1NfUkVMfQpT WVNST09UPQkJJHtTUkNESVJ9Ly4uL3Jvb3QvJHtBUkNIfQpDRkxBR1MrPQkJLS1zeXNyb290PSR7 U1lTUk9PVH0gJHtDUFVfQVJHU30gJHtJTkNTfSAtTwpDWFhGTEFHUys9CQktLXN5c3Jvb3Q9JHtT WVNST09UfSAke0NQVV9BUkdTfSAke0lOQ1N9IC1PCkxERkxBR1MrPQkJLS1zeXNyb290PSR7U1lT Uk9PVH0KU1RSSVBCSU49CQkke1NUUklQfQpQS0dfQ09ORklHX1NZU1JPT1RfRElSPQkiJHtTWVNS T09UfSIKQ09ORklHVVJFX0VOVis9CQlQS0dfQ09ORklHX1NZU1JPT1RfRElSPSIke1NZU1JPT1R9 IgouZW5kaWYKCldSS0RJUj89CQkke1dSS0RJUlBSRUZJWH0key5DVVJESVJ9L3dvcmsKLmlmICFk ZWZpbmVkKElHTk9SRV9NQVNURVJfU0lURV9HSVRIVUIpICYmIGRlZmluZWQoVVNFX0dJVEhVQikK V1JLU1JDPz0JCSR7V1JLRElSfS8ke0dIX1BST0pFQ1R9LSR7R0hfVEFHTkFNRV9FWFRSQUNUfQou ZW5kaWYKLmlmIGRlZmluZWQoTk9fV1JLU1VCRElSKQpXUktTUkM/PQkJJHtXUktESVJ9Ci5lbHNl CldSS1NSQz89CQkke1dSS0RJUn0vJHtESVNUTkFNRX0KLmVuZGlmCi5pZiBkZWZpbmVkKFdSS1NS Q19TVUJESVIpCldSS1NSQzo9CQkke1dSS1NSQ30vJHtXUktTUkNfU1VCRElSfQouZW5kaWYKClBB VENIX1dSS1NSQz89CSR7V1JLU1JDfQpDT05GSUdVUkVfV1JLU1JDPz0JJHtXUktTUkN9CkJVSUxE X1dSS1NSQz89CSR7V1JLU1JDfQpJTlNUQUxMX1dSS1NSQz89JHtXUktTUkN9CgpQTElTVF9TVUIr PQlPU1JFTD0ke09TUkVMfSBQUkVGSVg9JUQgTE9DQUxCQVNFPSR7TE9DQUxCQVNFfSBcCgkJCVJF U0VUUFJFRklYPSR7UFJFRklYfQpTVUJfTElTVCs9CVBSRUZJWD0ke1BSRUZJWH0gTE9DQUxCQVNF PSR7TE9DQUxCQVNFfSBcCgkJREFUQURJUj0ke0RBVEFESVJ9IERPQ1NESVI9JHtET0NTRElSfSBF WEFNUExFU0RJUj0ke0VYQU1QTEVTRElSfSBcCgkJV1dXRElSPSR7V1dXRElSfSBFVENESVI9JHtF VENESVJ9CiMgVGhpcyBpcyB1c2VkIGZvciBjaGVjay1zdGFnZWRpci5zaCBhbmQgY2hlY2tfbGVm dG92ZXIuc2ggdG8gcmVwbGFjZQojIGRpcmVjdG9yaWVzL2ZpbGVzIHdpdGggUExJU1RfU1VCICUl S0VZUyUlLgojICBSZW1vdmUgVkFSUyB0aGF0IGFyZSB0b28gZ2VuZXJpYwojICBSZW1vdmUgZW1w dHkgdmFsdWVzCiMgIFJlbW92ZSBAY29tbWVudCB2YWx1ZXMKIyAgUmVtb3ZlIHF1b3RlcwojICBS ZXBsYWNlIC4gd2l0aCBcLiBmb3IgbGF0ZXIgc2VkKDEpIHVzYWdlClBMSVNUX1NVQl9TRURfTUlO Pz0JMgpQTElTVF9TVUJfU0VEPz0gJHtQTElTVF9TVUI6Qy8uKj0uezEsJHtQTElTVF9TVUJfU0VE X01JTn19JC8vZzpORVhUUkFDVF9TVUZYPSo6Tk9TUkVMPSo6TkxJQjMyRElSPSo6TlBSRUZJWD0q Ok5MT0NBTEJBU0U9KjpOUkVTRVRQUkVGSVg9KjpOKj0iIjpOKj0iQGNvbW1lbnQqOkMvKFtePV0q KT0iPyhbXiJdKikiPy9zIVwyISUlXDElJSFnOy9nOkMvXC4vXFwuL2d9CgojIGtsdWRnZSB0byBz dHJpcCB0cmFpbGluZyB3aGl0ZXNwYWNlIGZyb20gQ0ZMQUdTOwojIHN1Yi1jb25maWd1cmUgd2ls bCBub3QgIyBzdXJ2aXZlIGRvdWJsZSBzcGFjZQpDRkxBR1M6PQkke0NGTEFHUzpDLyAkLy99Cgou aWYgZGVmaW5lZChXSVRIT1VUX0NQVV9DRkxBR1MpCi5pZiBkZWZpbmVkKF9DUFVDRkxBR1MpCi5p ZiAhZW1wdHkoX0NQVUNGTEFHUykKQ0ZMQUdTOj0JJHtDRkxBR1M6Qy8ke19DUFVDRkxBR1N9Ly99 Ci5lbmRpZgouZW5kaWYKLmVuZGlmCgojIFJlc2V0IHZhbHVlIGZyb20gYnNkLm93bi5tay4KLmlm IGRlZmluZWQoV0lUSF9ERUJVRykgJiYgIWRlZmluZWQoV0lUSE9VVF9ERUJVRykKLmlmICFkZWZp bmVkKElOU1RBTExfU1RSSVBQRUQpClNUUklQPQkjbm9uZQpNQUtFX0VOVis9CURPTlRTVFJJUD15 ZXMKU1RSSVBfQ01EPQkke1RSVUV9Ci5lbmRpZgpERUJVR19GTEFHUz89CS1nCkNGTEFHUzo9CQkk e0NGTEFHUzpOLU8qOk4tZm5vLXN0cmljdCp9ICR7REVCVUdfRkxBR1N9Ci5pZiBkZWZpbmVkKElO U1RBTExfVEFSR0VUKQpJTlNUQUxMX1RBUkdFVDo9CSR7SU5TVEFMTF9UQVJHRVQ6Uy9eaW5zdGFs bC1zdHJpcCQvaW5zdGFsbC9nfQouZW5kaWYKLmVuZGlmCgouaWYgIWRlZmluZWQoV0lUSE9VVF9T U1ApCi5pbmNsdWRlICIke1BPUlRTRElSfS9Nay9ic2Quc3NwLm1rIgouZW5kaWYKCiMgWFhYIFBJ RSBzdXBwb3J0IHRvIGJlIGFkZGVkIGhlcmUKTUFLRV9FTlYrPQlOT19QSUU9eWVzCgouaWYgZGVm aW5lZChOT1BPUlRET0NTKQpQTElTVF9TVUIrPQkJUE9SVERPQ1M9IkBjb21tZW50ICIKLmVsc2UK UExJU1RfU1VCKz0JCVBPUlRET0NTPSIiCi5lbmRpZgoKLmlmIGRlZmluZWQoTk9QT1JURVhBTVBM RVMpClBMSVNUX1NVQis9CSAgICAgICAgUE9SVEVYQU1QTEVTPSJAY29tbWVudCAiCi5lbHNlClBM SVNUX1NVQis9CSAgICAgICAgUE9SVEVYQU1QTEVTPSIiCi5lbmRpZgoKQ09ORklHVVJFX1NIRUxM Pz0JJHtTSH0KTUFLRV9TSEVMTD89CSR7U0h9CgpDT05GSUdVUkVfRU5WKz0JU0hFTEw9JHtDT05G SUdVUkVfU0hFTEx9IENPTkZJR19TSEVMTD0ke0NPTkZJR1VSRV9TSEVMTH0KTUFLRV9FTlYrPQkJ U0hFTEw9JHtNQUtFX1NIRUxMfSBOT19MSU5UPVlFUwoKLmlmIGRlZmluZWQoUEFUQ0hGSUxFUykg JiYgJHtQQVRDSEZJTEVTOk0qLnppcH0KUEFUQ0hfREVQRU5EUys9CQkke0xPQ0FMQkFTRX0vYmlu L3VuemlwOiR7UE9SVFNESVJ9L2FyY2hpdmVycy91bnppcAouZW5kaWYKCiMgQ2hlY2sgdGhlIGNv bXBhdGliaWxpdHkgbGF5ZXIgZm9yIGFtZDY0L2lhNjQKCi5pZiAke0FSQ0h9ID09ICJhbWQ2NCIg fHwgJHtBUkNIfSA9PSJpYTY0IgouaWYgZXhpc3RzKC91c3IvbGliMzIpCkhBVkVfQ09NUEFUX0lB MzJfTElCUz89ICBZRVMKLmVuZGlmCi5pZiAhZGVmaW5lZChIQVZFX0NPTVBBVF9JQTMyX0tFUk4p CkhBVkVfQ09NUEFUX0lBMzJfS0VSTiE9IGlmICR7U1lTQ1RMfSAtbiBjb21wYXQuaWEzMi5tYXh2 bWVtID4vZGV2L251bGwgMj4mMTsgdGhlbiBlY2hvIFlFUzsgZmk7IGVjaG8KLmlmIGVtcHR5KEhB VkVfQ09NUEFUX0lBMzJfS0VSTikKLnVuZGVmIEhBVkVfQ09NUEFUX0lBMzJfS0VSTgouZW5kaWYK LmVuZGlmCi5lbmRpZgoKLmlmIGRlZmluZWQoSUEzMl9CSU5BUllfUE9SVCkgJiYgJHtBUkNIfSAh PSAiaTM4NiIKLmlmICR7QVJDSH0gPT0gImFtZDY0IiB8fCAke0FSQ0h9ID09ICJpYTY0IgouaWYg IWRlZmluZWQoSEFWRV9DT01QQVRfSUEzMl9LRVJOKQpJR05PUkU9CQlyZXF1aXJlcyBhIGtlcm5l bCB3aXRoIGNvbXBpbGVkLWluIElBMzIgY29tcGF0aWJpbGl0eQouZWxpZiAhZGVmaW5lZChIQVZF X0NPTVBBVF9JQTMyX0xJQlMpCklHTk9SRT0JCXJlcXVpcmVzIDMyLWJpdCBsaWJyYXJpZXMgaW5z dGFsbGVkIHVuZGVyIC91c3IvbGliMzIKLmVuZGlmCl9MRENPTkZJR19GTEFHUz0tMzIKTElCMzJE SVI9CWxpYjMyCi5lbHNlCklHTk9SRT0JCXJlcXVpcmVzIGkzODYgKG9yIGNvbXBhdGlibGUpIHBs YXRmb3JtIHRvIHJ1bgouZW5kaWYKLmVsc2UKTElCMzJESVI9CWxpYgouZW5kaWYKUExJU1RfU1VC Kz0JTElCMzJESVI9JHtMSUIzMkRJUn0KCi5pZiAke1dJVEhfUEtHfSA9PSBkZXZlbApQS0dfT1JJ R0lOPQkJcG9ydHMtbWdtdC9wa2ctZGV2ZWwKLmVuZGlmCgouaWYgIWRlZmluZWQoUEtHX0RFUEVO RFMpICYmICFkZWZpbmVkKENMRUFOX0ZFVENIX0VOVikKUEtHX0RFUEVORFMrPQkke0xPQ0FMQkFT RX0vc2Jpbi9wa2c6JHtQT1JUU0RJUn0vJHtQS0dfT1JJR0lOfQouZW5kaWYKCi5pZiBkZWZpbmVk KFVTRV9HQ0MpCi5pbmNsdWRlICIke1BPUlRTRElSfS9Nay9ic2QuZ2NjLm1rIgouZW5kaWYKCi5p ZiBkZWZpbmVkKFVTRV9CSU5VVElMUykgJiYgIWRlZmluZWQoRElTQUJMRV9CSU5VVElMUykKQlVJ TERfREVQRU5EUys9CSR7TE9DQUxCQVNFfS9iaW4vYXM6JHtQT1JUU0RJUn0vZGV2ZWwvYmludXRp bHMKQklOVVRJTFM/PQlBRERSMkxJTkUgQVIgQVMgQ1BQRklMVCBHUFJPRiBMRCBOTSBPQkpDT1BZ IE9CSkRVTVAgUkFOTElCIFwKCVJFQURFTEYgU0laRSBTVFJJTkdTCkJJTlVUSUxTX05PX01BS0Vf RU5WPz0KLiBmb3IgYiBpbiAke0JJTlVUSUxTfQoke2J9PQkke0xPQ0FMQkFTRX0vYmluLyR7YjpD L1BQLysrLzp0bH0KLiAgaWYgZGVmaW5lZChHTlVfQ09ORklHVVJFKSB8fCBkZWZpbmVkKEJJTlVU SUxTX0NPTkZJR1VSRSkKQ09ORklHVVJFX0VOVis9CSR7Yn09IiR7JHtifX0iCi4gIGVuZGlmCi4g IGlmICR7QklOVVRJTFNfTk9fTUFLRV9FTlY6TSR7Yn19ID09ICIiCk1BS0VfRU5WKz0JJHtifT0i JHske2J9fSIKLiAgZW5kaWYKLiBlbmRmb3IKLmVuZGlmCgouaWYgZGVmaW5lZChVU0VfT1BFTkxE QVApIHx8IGRlZmluZWQoV0FOVF9PUEVOTERBUF9WRVIpCi5pbmNsdWRlICIke1BPUlRTRElSfS9N ay9ic2QubGRhcC5tayIKLmVuZGlmCgouaWYgZGVmaW5lZChVU0VfUkNfU1VCUikgJiYgJHtVU0Vf UkNfU1VCUjp0dX0gIT0gIllFUyIKU1VCX0ZJTEVTKz0JJHtVU0VfUkNfU1VCUn0KLmVuZGlmCgou aWYgZGVmaW5lZChVU0VfUkNPUkRFUikKU1VCX0ZJTEVTKz0JJHtVU0VfUkNPUkRFUn0KLmVuZGlm CgouaWYgZGVmaW5lZChVU0VfTERDT05GSUcpICYmICR7VVNFX0xEQ09ORklHOnRsfSA9PSAieWVz IgpVU0VfTERDT05GSUc9CSR7UFJFRklYfS9saWIKLmVuZGlmCi5pZiBkZWZpbmVkKFVTRV9MRENP TkZJRzMyKSAmJiAke1VTRV9MRENPTkZJRzMyOnRsfSA9PSAieWVzIgpJR05PUkU9CQkJaGFzIFVT RV9MRENPTkZJRzMyIHNldCB0byB5ZXMsIHdoaWNoIGlzIG5vdCBjb3JyZWN0Ci5lbmRpZgoKLmlm IGRlZmluZWQoVVNFX0xJTlVYX1BSRUZJWCkgJiYgZGVmaW5lZChVU0VfTERDT05GSUcpCiMgd2Ug bmVlZCAke0xJTlVYQkFTRX0vc2Jpbi9sZGNvbmZpZwpVU0VfTElOVVg/PQl5ZXMKLmVuZGlmCgou aWYgZGVmaW5lZChVU0VfTElOVVgpCgouICBpZiAhZGVmaW5lZChMSU5VWF9PU1JFTEVBU0UpCkxJ TlVYX09TUkVMRUFTRSE9CSR7RUNIT19DTUR9IGAke1NZU0NUTH0gLW4gY29tcGF0LmxpbnV4Lm9z cmVsZWFzZSAyPi9kZXYvbnVsbGAKLiAgZW5kaWYKCiMgaW5zdGFsbCgxKSBhbHNvIGRvZXMgYSBi cmFuZGVsZiBvbiBzdHJpcCwgc28gZG9uJ3Qgc3RyaXAgd2l0aCBGcmVlQlNEIHRvb2xzLgpTVFJJ UD0KLglpZiBleGlzdHMoJHtMSU5VWEJBU0V9L3Vzci9iaW4vc3RyaXApClNUUklQX0NNRD0JJHtM SU5VWEJBU0V9L3Vzci9iaW4vc3RyaXAKLgllbHNlClNUUklQX0NNRD0JJHtUUlVFfQouCWVuZGlm CgojIEFsbG93IHRoZSB1c2VyIHRvIHNwZWNpZnkgYW5vdGhlciBsaW51eF9iYXNlIHZlcnNpb24u Ci4JaWYgZGVmaW5lZChPVkVSUklERV9MSU5VWF9CQVNFX1BPUlQpCi4JCWlmICR7VVNFX0xJTlVY OnRsfSA9PSB5ZXMKVVNFX0xJTlVYPQkke09WRVJSSURFX0xJTlVYX0JBU0VfUE9SVH0KLgkJZW5k aWYKLgllbmRpZgoKIyBOT1RFOiB3aGVuIHlvdSB1cGRhdGUgdGhlIGRlZmF1bHQgbGludXhfYmFz ZSB2ZXJzaW9uIChjYXNlICJ5ZXMiKSwKIyBkb24ndCBmb3JnZXQgdG8gdXBkYXRlIHRoZSBIYW5k Ym9vayEKCi4JaWYgZXhpc3RzKCR7UE9SVFNESVJ9L2VtdWxhdG9ycy9saW51eF9iYXNlLSR7VVNF X0xJTlVYfSkKTElOVVhfQkFTRV9QT1JUPQkke0xJTlVYQkFTRX0vYmluL3NoOiR7UE9SVFNESVJ9 L2VtdWxhdG9ycy9saW51eF9iYXNlLSR7VVNFX0xJTlVYfQouCWVsc2UKLgkJaWYgJHtVU0VfTElO VVg6dGx9ID09ICJ5ZXMiClVTRV9MSU5VWD0JYzYKTElOVVhfQkFTRV9QT1JUPQkke0xJTlVYQkFT RX0vZXRjL3JlZGhhdC1yZWxlYXNlOiR7UE9SVFNESVJ9L2VtdWxhdG9ycy9saW51eF9iYXNlLWM2 Ci4JCWVsc2UKSUdOT1JFPQkJY2Fubm90IGJlIGJ1aWx0OiB0aGVyZSBpcyBubyBlbXVsYXRvcnMv bGludXhfYmFzZS0ke1VTRV9MSU5VWH0sIHBlcmhhcHMgd3JvbmcgdXNlIG9mIFVTRV9MSU5VWCBv ciBPVkVSUklERV9MSU5VWF9CQVNFX1BPUlQKLgkJZW5kaWYKLgllbmRpZgoKUlVOX0RFUEVORFMr PQkke0xJTlVYX0JBU0VfUE9SVH0KLmVuZGlmCgpQS0dfSUdOT1JFX0RFUEVORFM/PQkJJ3RoaXNf cG9ydF9kb2VzX25vdF9leGlzdCcKCl9HTF9nYm1fTElCX0RFUEVORFM9CQlsaWJnYm0uc286JHtQ T1JUU0RJUn0vZ3JhcGhpY3MvZ2JtCl9HTF9nbGVzdjJfQlVJTERfREVQRU5EUz0JCWxpYmdsZXN2 Mj4wOiR7UE9SVFNESVJ9L2dyYXBoaWNzL2xpYmdsZXN2MgpfR0xfZ2xlc3YyX1JVTl9ERVBFTkRT PQkJbGliZ2xlc3YyPjA6JHtQT1JUU0RJUn0vZ3JhcGhpY3MvbGliZ2xlc3YyCl9HTF9lZ2xfQlVJ TERfREVQRU5EUz0JCWxpYkVHTD4wOiR7UE9SVFNESVJ9L2dyYXBoaWNzL2xpYkVHTApfR0xfZWds X1JVTl9ERVBFTkRTPQkJbGliRUdMPjA6JHtQT1JUU0RJUn0vZ3JhcGhpY3MvbGliRUdMCl9HTF9n bF9CVUlMRF9ERVBFTkRTPQkJbGliR0w+MDoke1BPUlRTRElSfS9ncmFwaGljcy9saWJHTApfR0xf Z2xfUlVOX0RFUEVORFM9CQlsaWJHTD4wOiR7UE9SVFNESVJ9L2dyYXBoaWNzL2xpYkdMCl9HTF9n bF9VU0VfWE9SRz0JCWdscHJvdG8gZHJpMnByb3RvCl9HTF9nbGV3X0xJQl9ERVBFTkRTPQkJbGli R0xFVy5zbzoke1BPUlRTRElSfS9ncmFwaGljcy9nbGV3Cl9HTF9nbHVfTElCX0RFUEVORFM9CQls aWJHTFUuc286JHtQT1JUU0RJUn0vZ3JhcGhpY3MvbGliR0xVCl9HTF9nbHVfVVNFX1hPUkc9CQln bHByb3RvIGRyaTJwcm90bwpfR0xfZ2x3X0xJQl9ERVBFTkRTPQkJbGliR0x3LnNvOiR7UE9SVFNE SVJ9L2dyYXBoaWNzL2xpYkdMdwpfR0xfZ2x1dF9MSUJfREVQRU5EUz0JCWxpYmdsdXQuc286JHtQ T1JUU0RJUn0vZ3JhcGhpY3MvZnJlZWdsdXQKCi5pZiBkZWZpbmVkKFVTRV9HTCkKLiBpZiAke1VT RV9HTDp0bH0gPT0gInllcyIKVVNFX0dMPQkJZ2x1Ci4gZW5kaWYKLiBmb3IgX2NvbXBvbmVudCBp biAke1VTRV9HTH0KLiAgaWYgIWRlZmluZWQoX0dMXyR7X2NvbXBvbmVudH1fTElCX0RFUEVORFMp ICYmIFwKCQkhZGVmaW5lZChfR0xfJHtfY29tcG9uZW50fV9SVU5fREVQRU5EUykKSUdOT1JFPQkJ dXNlcyB1bmtub3duIEdMIGNvbXBvbmVudAouICBlbHNlClVTRV9YT1JHKz0JJHtfR0xfJHtfY29t cG9uZW50fV9VU0VfWE9SR30KQlVJTERfREVQRU5EUys9CSR7X0dMXyR7X2NvbXBvbmVudH1fQlVJ TERfREVQRU5EU30KTElCX0RFUEVORFMrPQkke19HTF8ke19jb21wb25lbnR9X0xJQl9ERVBFTkRT fQpSVU5fREVQRU5EUys9CSR7X0dMXyR7X2NvbXBvbmVudH1fUlVOX0RFUEVORFN9Ci4gIGVuZGlm Ci4gZW5kZm9yCi5lbmRpZgoKLmlmIGRlZmluZWQoX0RFU1RESVJfVklBX0VOVikKTUFLRV9FTlYr PQkke0RFU1RESVJOQU1FfT0ke1NUQUdFRElSfQouZWxzZQpNQUtFX0FSR1MrPQkke0RFU1RESVJO QU1FfT0ke1NUQUdFRElSfQouZW5kaWYKCi5pZiBkZWZpbmVkKE5PX1BSRUZJWF9STURJUikKQ09f RU5WKz0JTk9fUFJFRklYX1JNRElSPTEKLmVsc2UKQ09fRU5WKz0JTk9fUFJFRklYX1JNRElSPTAK LmVuZGlmCgoKTUVUQURJUj0JCSR7V1JLRElSfS8ubWV0YWRpcgpNQU5JRkVTVEY9CQkke01FVEFE SVJ9LytNQU5JRkVTVAoKUEtHUFJFSU5TVEFMTD89CQkke1BLR0RJUn0vcGtnLXByZS1pbnN0YWxs ClBLR1BPU1RJTlNUQUxMPz0JJHtQS0dESVJ9L3BrZy1wb3N0LWluc3RhbGwKUEtHUFJFREVJTlNU QUxMPz0JJHtQS0dESVJ9L3BrZy1wcmUtZGVpbnN0YWxsClBLR1BPU1RERUlOU1RBTEw/PQkke1BL R0RJUn0vcGtnLXBvc3QtZGVpbnN0YWxsClBLR1BSRVVQR1JBREU/PQkJJHtQS0dESVJ9L3BrZy1w cmUtdXBncmFkZQpQS0dQT1NUVVBHUkFERT89CSR7UEtHRElSfS9wa2ctcG9zdC11cGdyYWRlClBL R1VQR1JBREU/PQkJJHtQS0dESVJ9L3BrZy11cGdyYWRlCgpfRk9SQ0VfUE9TVF9QQVRURVJOUz0J cm1kaXIga2xkeHJlZiBta2ZvbnRzY2FsZSBta2ZvbnRkaXIgZmMtY2FjaGUgXAoJCQkJCQlmb250 cy5kaXIgZm9udHMuc2NhbGUgZ3RrLXVwZGF0ZS1pY29uLWNhY2hlIFwKCQkJCQkJZ2lvLXF1ZXJ5 bW9kdWxlcyBcCgkJCQkJCWd0ay1xdWVyeS1pbW1vZHVsZXMgXAoJCQkJCQlsZGNvbmZpZyBcCgkJ CQkJCWxvYWQtb2N0YXZlLXBrZyBcCgkJCQkJCW9jYW1sZmluZCBcCgkJCQkJCXVwZGF0ZS1kZXNr dG9wLWRhdGFiYXNlIHVwZGF0ZS1taW1lLWRhdGFiYXNlIFwKCQkJCQkJZ2RrLXBpeGJ1Zi1xdWVy eS1sb2FkZXJzIGNhdGFsb2cucG9ydHMgXAoJCQkJCQlnbGliLWNvbXBpbGUtc2NoZW1hcyBcCgkJ CQkJCWNjYWNoZS11cGRhdGUtbGlua3MKCi5pZiBkZWZpbmVkKFVTRV9MT0NBTF9NSykKLmluY2x1 ZGUgIiR7UE9SVFNESVJ9L01rL2JzZC5sb2NhbC5tayIKLmVuZGlmCgouaWYgZGVmaW5lZChVU0Vf WE9SRykgfHwgZGVmaW5lZChYT1JHX0NBVCkKLmluY2x1ZGUgIiR7UE9SVFNESVJ9L01rL2JzZC54 b3JnLm1rIgouZW5kaWYKCi5pZiBkZWZpbmVkKFVTRV9NWVNRTCkgfHwgZGVmaW5lZChXQU5UX01Z U1FMX1ZFUikgfHwgXAoJZGVmaW5lZChVU0VfQkRCKSB8fCBkZWZpbmVkKFVTRV9TUUxJVEUpIHx8 IGRlZmluZWQoVVNFX0ZJUkVCSVJEKQouaW5jbHVkZSAiJHtQT1JUU0RJUn0vTWsvYnNkLmRhdGFi YXNlLm1rIgouZW5kaWYKCi5pZiBkZWZpbmVkKFdBTlRfR1NUUkVBTUVSKSB8fCBkZWZpbmVkKFVT RV9HU1RSRUFNRVIpIHx8IGRlZmluZWQoVVNFX0dTVFJFQU1FUjEpCi5pbmNsdWRlICIke1BPUlRT RElSfS9Nay9ic2QuZ3N0cmVhbWVyLm1rIgouZW5kaWYKCi5pZiBkZWZpbmVkKFVTRV9KQVZBKQou aW5jbHVkZSAiJHtQT1JUU0RJUn0vTWsvYnNkLmphdmEubWsiCi5lbmRpZgoKLmlmIGRlZmluZWQo VVNFX09DQU1MKQouaW5jbHVkZSAiJHtQT1JUU0RJUn0vTWsvYnNkLm9jYW1sLm1rIgouZW5kaWYK Ci5pZiBkZWZpbmVkKFVTRV9MSU5VWF9SUE0pCi5pbmNsdWRlICIke1BPUlRTRElSfS9Nay9ic2Qu bGludXgtcnBtLm1rIgouZW5kaWYKCi5pZiBkZWZpbmVkKFVTRV9MSU5VWF9BUFBTKQouaW5jbHVk ZSAiJHtQT1JUU0RJUn0vTWsvYnNkLmxpbnV4LWFwcHMubWsiCi5lbmRpZgoKLmlmIGRlZmluZWQo VVNFX1FUNCkgfHwgZGVmaW5lZChVU0VfUVQ1KQouaW5jbHVkZSAiJHtQT1JUU0RJUn0vTWsvYnNk LnF0Lm1rIgouZW5kaWYKCi5pZiBkZWZpbmVkKFVTRV9TREwpIHx8IGRlZmluZWQoV0FOVF9TREwp Ci5pbmNsdWRlICIke1BPUlRTRElSfS9Nay9ic2Quc2RsLm1rIgouZW5kaWYKCi5pZiBkZWZpbmVk KFVTRV9QSFApCi5pbmNsdWRlICIke1BPUlRTRElSfS9Nay9ic2QucGhwLm1rIgouZW5kaWYKCi5p ZiBkZWZpbmVkKFVTRV9XWCkgfHwgZGVmaW5lZChVU0VfV1hfTk9UKQouaW5jbHVkZSAiJHtQT1JU U0RJUn0vTWsvYnNkLnd4Lm1rIgouZW5kaWYKCi5pZiBkZWZpbmVkKFVTRV9BUEFDSEUpIHx8IGRl ZmluZWQoVVNFX0FQQUNIRV9CVUlMRCkgfHwgZGVmaW5lZChVU0VfQVBBQ0hFX1JVTikKLmluY2x1 ZGUgIiR7UE9SVFNESVJ9L01rL2JzZC5hcGFjaGUubWsiCi5lbmRpZgoKLmlmIGRlZmluZWQoVVNF X0FVVE9UT09MUykKLmluY2x1ZGUgIiR7UE9SVFNESVJ9L01rL2JzZC5hdXRvdG9vbHMubWsiCi5l bmRpZgoKLmlmIGRlZmluZWQoVVNFX0ZQQykgfHwgZGVmaW5lZChXQU5UX0ZQQ19CQVNFKSB8fCBk ZWZpbmVkKFdBTlRfRlBDX0FMTCkKLmluY2x1ZGUgIiR7UE9SVFNESVJ9L01rL2JzZC5mcGMubWsi Ci5lbmRpZgoKLmlmIGRlZmluZWQoVVNFX0dFQ0tPKQouaW5jbHVkZSAiJHtQT1JUU0RJUn0vTWsv YnNkLmdlY2tvLm1rIgouZW5kaWYKCi5pZiBkZWZpbmVkKFdBTlRfR05PTUUpIHx8IGRlZmluZWQo VVNFX0dOT01FKQouaW5jbHVkZSAiJHtQT1JUU0RJUn0vTWsvYnNkLmdub21lLm1rIgouZW5kaWYK Ci5pZiBkZWZpbmVkKFVTRV9NQVRFKQouaW5jbHVkZSAiJHtQT1JUU0RJUn0vTWsvYnNkLm1hdGUu bWsiCi5lbmRpZgoKLmlmIGRlZmluZWQoVVNFX0tERTQpCi5pbmNsdWRlICIke1BPUlRTRElSfS9N ay9ic2Qua2RlNC5tayIKLmVuZGlmCgouaWYgZXhpc3RzKCR7UE9SVFNESVJ9L01ha2VmaWxlLmlu YykKLmluY2x1ZGUgIiR7UE9SVFNESVJ9L01ha2VmaWxlLmluYyIKVVNFX1NVQk1BS0U9CXllcwou ZW5kaWYKCiMgTG9hZGluZyBmZWF0dXJlcwouZm9yIGYgaW4gJHtfVVNFU19QT1NUfQpfZjo9CQkk e2Y6Qy9cOi4qLy99Ci5pZiAhZGVmaW5lZCgke19mfV9BUkdTKQoke19mfV9BUkdTOj0JJHtmOkMv XlteXDpdKihcOnxcJCkvLzpTLywvIC9nfQouZW5kaWYKLmVuZGZvcgouZm9yIGYgaW4gJHtfVVNF U19QT1NUfQouaW5jbHVkZSAiJHtVU0VTRElSfS8ke2Y6Qy9cOi4qLy99Lm1rIgouZW5kZm9yCgou aWYgZGVmaW5lZChVU0VfWE9SRykKIyBBZGQgZXhwbGljaXQgWCBvcHRpb25zIHRvIGF2b2lkIHBy b2JsZW1zIHdpdGggZmFsc2UgcG9zaXRpdmVzIGluIGNvbmZpZ3VyZQouaWYgZGVmaW5lZChHTlVf Q09ORklHVVJFKQpDT05GSUdVUkVfQVJHUys9LS14LWxpYnJhcmllcz0ke0xPQ0FMQkFTRX0vbGli IC0teC1pbmNsdWRlcz0ke0xPQ0FMQkFTRX0vaW5jbHVkZQouZW5kaWYKLmVuZGlmCgojIFNldCB0 aGUgZGVmYXVsdCBmb3IgdGhlIGluc3RhbGxhdGlvbiBvZiBQb3N0c2NyaXB0KFRNKS0KIyBjb21w YXRpYmxlIGZ1bmN0aW9uYWxpdHkuCi5pZiAhZGVmaW5lZChVU0VfR0hPU1RTQ1JJUFQpCi4JaWYg ZGVmaW5lZChVU0VfR0hPU1RTQ1JJUFRfQlVJTEQpCl9VU0VfR0hPU1RTQ1JJUFQ9CSR7VVNFX0dI T1NUU0NSSVBUX0JVSUxEfQouCWVsaWYgZGVmaW5lZChVU0VfR0hPU1RTQ1JJUFRfUlVOKQpfVVNF X0dIT1NUU0NSSVBUPQkke1VTRV9HSE9TVFNDUklQVF9SVU59Ci4JZW5kaWYKLmVsc2UKX1VTRV9H SE9TVFNDUklQVD0JJHtVU0VfR0hPU1RTQ1JJUFR9Ci5lbmRpZgoKLmlmIGRlZmluZWQoV0lUSF9H SE9TVFNDUklQVF9WRVIpICYmICFlbXB0eShXSVRIX0dIT1NUU0NSSVBUX1ZFUjpNWzc4OV0pCl9V U0VfR0hPU1RTQ1JJUFRfREVGQVVMVF9WRVI9CSR7V0lUSF9HSE9TVFNDUklQVF9WRVJ9Ci5lbHNl Cl9VU0VfR0hPU1RTQ1JJUFRfREVGQVVMVF9WRVI9CTkKLmVuZGlmCgouaWYgZGVmaW5lZChfVVNF X0dIT1NUU0NSSVBUKQouCWlmICFkZWZpbmVkKFdJVEhPVVRfWDExKQpfVVNFX0dIT1NUU0NSSVBU X1BLR05BTUVfU1VGRklYPQouCWVsc2UKX1VTRV9HSE9TVFNDUklQVF9QS0dOQU1FX1NVRkZJWD0t bm94MTEKLgllbmRpZgouCWlmICFlbXB0eShfVVNFX0dIT1NUU0NSSVBUOk1bNzg5XSkKX1VTRV9H SE9TVFNDUklQVF9WRVI9JHtfVVNFX0dIT1NUU0NSSVBUOk1bNzg5XX0KLgllbHNlCl9VU0VfR0hP U1RTQ1JJUFRfVkVSPSR7X1VTRV9HSE9TVFNDUklQVF9ERUZBVUxUX1ZFUn0KLgllbmRpZgouZWxz ZQpfVVNFX0dIT1NUU0NSSVBUX1ZFUj0ke19VU0VfR0hPU1RTQ1JJUFRfREVGQVVMVF9WRVJ9Ci5l bmRpZgoKIyBTYW5pdHkgY2hlY2sKLmlmIGRlZmluZWQoX1VTRV9HSE9TVFNDUklQVCkgJiYgZGVm aW5lZChXSVRIX0dIT1NUU0NSSVBUX1ZFUikKLglpZiBlbXB0eShXSVRIX0dIT1NUU0NSSVBUX1ZF UjpNWzc4OV0pCi4JCWVycm9yIFlvdSBzZXQgYW4gaW52YWxpZCB2YWx1ZSAiJHtXSVRIX0dIT1NU U0NSSVBUX1ZFUn0iIGluIFdJVEhfR0hPU1RTQ1JJUFRfVkVSLiAgQWJvcnQuCi4JZWxpZiAke19V U0VfR0hPU1RTQ1JJUFRfVkVSfSAhPSAke1dJVEhfR0hPU1RTQ1JJUFRfVkVSfQouCQllcnJvciBZ b3Ugc2V0IFdJVEhfR0hPU1RTQ1JJUFRfVkVSIGFzICR7V0lUSF9HSE9TVFNDUklQVF9WRVJ9IGJ1 dCAke1BLR05BTUV9IHJlcXVpcmVzIHByaW50L2dob3N0c2NyaXB0JHtfVVNFX0dIT1NUU0NSSVBU X1ZFUn0uICBBYm9ydC4KLgllbmRpZgouZW5kaWYKCkdIT1NUU0NSSVBUX1BPUlQ/PQlwcmludC9n aG9zdHNjcmlwdCR7X1VTRV9HSE9TVFNDUklQVF9WRVJ9JHtfVVNFX0dIT1NUU0NSSVBUX1BLR05B TUVfU1VGRklYfQoKIyBTZXQgdXAgdGhlIGdob3N0c2NyaXB0IGRlcGVuZGVuY2llcy4KLmlmIGRl ZmluZWQoVVNFX0dIT1NUU0NSSVBUKSB8fCBkZWZpbmVkKFVTRV9HSE9TVFNDUklQVF9CVUlMRCkK QlVJTERfREVQRU5EUys9CWdzOiR7UE9SVFNESVJ9LyR7R0hPU1RTQ1JJUFRfUE9SVH0KLmVuZGlm Ci5pZiBkZWZpbmVkKFVTRV9HSE9TVFNDUklQVCkgfHwgZGVmaW5lZChVU0VfR0hPU1RTQ1JJUFRf UlVOKQpSVU5fREVQRU5EUys9CWdzOiR7UE9SVFNESVJ9LyR7R0hPU1RTQ1JJUFRfUE9SVH0KLmVu ZGlmCgojIE1hY3JvIGZvciBkb2luZyBpbi1wbGFjZSBmaWxlIGVkaXRpbmcgdXNpbmcgcmVnZXhw cwpSRUlOUExBQ0VfQVJHUz89CS1pLmJhawpSRUlOUExBQ0VfQ01EPz0JJHtTRUR9ICR7UkVJTlBM QUNFX0FSR1N9CgojIE5hbWVzIG9mIGNvb2tpZXMgdXNlZCB0byBza2lwIGFscmVhZHkgY29tcGxl dGVkIHN0YWdlcwpFWFRSQUNUX0NPT0tJRT89CSR7V1JLRElSfS8uZXh0cmFjdF9kb25lLiR7UE9S VE5BTUV9LiR7UFJFRklYOlMvXC8vXy9nfQpDT05GSUdVUkVfQ09PS0lFPz0JJHtXUktESVJ9Ly5j b25maWd1cmVfZG9uZS4ke1BPUlROQU1FfS4ke1BSRUZJWDpTL1wvL18vZ30KSU5TVEFMTF9DT09L SUU/PQkke1dSS0RJUn0vLmluc3RhbGxfZG9uZS4ke1BPUlROQU1FfS4ke1BSRUZJWDpTL1wvL18v Z30KQlVJTERfQ09PS0lFPz0JCSR7V1JLRElSfS8uYnVpbGRfZG9uZS4ke1BPUlROQU1FfS4ke1BS RUZJWDpTL1wvL18vZ30KUEFUQ0hfQ09PS0lFPz0JCSR7V1JLRElSfS8ucGF0Y2hfZG9uZS4ke1BP UlROQU1FfS4ke1BSRUZJWDpTL1wvL18vZ30KUEFDS0FHRV9DT09LSUU/PQkke1dSS0RJUn0vLnBh Y2thZ2VfZG9uZS4ke1BPUlROQU1FfS4ke1BSRUZJWDpTL1wvL18vZ30KU1RBR0VfQ09PS0lFPz0J CSR7V1JLRElSfS8uc3RhZ2VfZG9uZS4ke1BPUlROQU1FfS4ke1BSRUZJWDpTL1wvL18vZ30KCiMg SG93IHRvIGRvIG5vdGhpbmcuICBPdmVycmlkZSBpZiB5b3UsIGZvciBzb21lIHN0cmFuZ2UgcmVh c29uLCB3b3VsZCByYXRoZXIKIyBkbyBzb21ldGhpbmcuCkRPX05BREE/PQkJJHtUUlVFfQoKIyBV c2UgdGhpcyBhcyB0aGUgZmlyc3Qgb3BlcmFuZCB0byBhbHdheXMgYnVpbGQgZGVwZW5kZW5jeS4K Tk9ORVhJU1RFTlQ/PQkvbm9uZXhpc3RlbnQKCkNIRUNLU1VNX0FMR09SSVRITVM/PSBzaGEyNTYK CkRJU1RJTkZPX0ZJTEU/PQkJJHtNQVNURVJESVJ9L2Rpc3RpbmZvCgpNQUtFX0ZMQUdTPz0JLWYK TUFLRUZJTEU/PQkJTWFrZWZpbGUKTUFLRV9DTUQ/PQkJJHtCU0RNQUtFfQpNQUtFX0VOVis9CQlQ UkVGSVg9JHtQUkVGSVh9IFwKCQkJTE9DQUxCQVNFPSR7TE9DQUxCQVNFfSBcCgkJCUxJQkRJUj0i JHtMSUJESVJ9IiBcCgkJCUNDPSIke0NDfSIgQ0ZMQUdTPSIke0NGTEFHU30iIFwKCQkJQ1BQPSIk e0NQUH0iIENQUEZMQUdTPSIke0NQUEZMQUdTfSIgXAoJCQlMREZMQUdTPSIke0xERkxBR1N9IiBM SUJTPSIke0xJQlN9IiBcCgkJCUNYWD0iJHtDWFh9IiBDWFhGTEFHUz0iJHtDWFhGTEFHU30iIFwK CQkJTUFOUFJFRklYPSIke01BTlBSRUZJWH0iCgojIEFkZCAtZm5vLXN0cmljdC1hbGlhc2luZyB0 byBDRkxBR1Mgd2l0aCBvcHRpbWl6YXRpb24gbGV2ZWwgLU8yIG9yIGhpZ2hlci4KIyBnY2MgNC54 IGVuYWJsZSBzdHJpY3QgYWxpYXNpbmcgb3B0aW1pemF0aW9uIHdpdGggLU8yIHdoaWNoIGlzIGtu b3duIHRvIGJyZWFrCiMgYSBsb3Qgb2YgcG9ydHMuCi5pZiAhZGVmaW5lZChXSVRIT1VUX05PX1NU UklDVF9BTElBU0lORykKLmlmICR7Q0N9ICE9ICJpY2MiCi5pZiBlbXB0eShDRkxBR1M6TS1mbm8t c3RyaWN0LWFsaWFzaW5nKQpDRkxBR1MrPSAgICAgICAtZm5vLXN0cmljdC1hbGlhc2luZwouZW5k aWYKLmVuZGlmCi5lbmRpZgoKLmZvciBsYW5nIGluIEMgQ1hYCi5pZiBkZWZpbmVkKFVTRV8ke2xh bmd9U1REKQoke2xhbmd9RkxBR1M6PQkkeyR7bGFuZ31GTEFHUzpOLXN0ZD0qfSAtc3RkPSR7VVNF XyR7bGFuZ31TVER9Ci5lbmRpZgoKLmlmIGRlZmluZWQoJHtsYW5nfUZMQUdTXyR7QVJDSH0pCiR7 bGFuZ31GTEFHUys9CSR7JHtsYW5nfUZMQUdTXyR7QVJDSH19Ci5lbmRpZgouZW5kZm9yCgojIE11 bHRpcGxlIG1ha2Ugam9icyBzdXBwb3J0Ci5pZiBkZWZpbmVkKERJU0FCTEVfTUFLRV9KT0JTKSB8 fCBkZWZpbmVkKE1BS0VfSk9CU19VTlNBRkUpCl9NQUtFX0pPQlM/PQkJIwpNQUtFX0pPQlNfTlVN QkVSPQkxCi5lbHNlCi5pZiBkZWZpbmVkKE1BS0VfSk9CU19OVU1CRVIpCl9NQUtFX0pPQlNfTlVN QkVSOj0JJHtNQUtFX0pPQlNfTlVNQkVSfQouZWxzZQpfTUFLRV9KT0JTX05VTUJFUiE9CSR7U1lT Q1RMfSAtbiBrZXJuLnNtcC5jcHVzCi5lbmRpZgouaWYgZGVmaW5lZChNQUtFX0pPQlNfTlVNQkVS X0xJTUlUKSAmJiAoICR7TUFLRV9KT0JTX05VTUJFUl9MSU1JVH0gPCAke19NQUtFX0pPQlNfTlVN QkVSfSApCk1BS0VfSk9CU19OVU1CRVI9CSR7TUFLRV9KT0JTX05VTUJFUl9MSU1JVH0KLmVsc2UK TUFLRV9KT0JTX05VTUJFUj0JJHtfTUFLRV9KT0JTX05VTUJFUn0KLmVuZGlmCl9NQUtFX0pPQlM/ PQkJLWoke01BS0VfSk9CU19OVU1CRVJ9CkJVSUxEX0ZBSUxfTUVTU0FHRSs9CVRyeSB0byBzZXQg TUFLRV9KT0JTX1VOU0FGRT15ZXMgYW5kIHJlYnVpbGQgYmVmb3JlIHJlcG9ydGluZyB0aGUgZmFp bHVyZSB0byB0aGUgbWFpbnRhaW5lci4KLmVuZGlmCgouaW5jbHVkZSAiJHtQT1JUU0RJUn0vTWsv YnNkLmNjYWNoZS5tayIKCkZFVENIX0VOVj89CQlTU0xfTk9fVkVSSUZZX1BFRVI9MSBTU0xfTk9f VkVSSUZZX0hPU1ROQU1FPTEKRkVUQ0hfQklOQVJZPz0JL3Vzci9iaW4vZmV0Y2gKRkVUQ0hfQVJH Uz89CS1GcHIKRkVUQ0hfUkVHRVQ/PQkxCi5pZiAhZGVmaW5lZChESVNBQkxFX1NJWkUpCkZFVENI X0JFRk9SRV9BUkdTKz0JJCR7Q0tTSVpFOistUyAkJENLU0laRX0KLmVuZGlmCkZFVENIX0NNRD89 CQkke0ZFVENIX0JJTkFSWX0gJHtGRVRDSF9BUkdTfQoKLmlmIGRlZmluZWQoUkFORE9NSVpFX01B U1RFUl9TSVRFUykKLmlmIGV4aXN0cygvdXNyL2dhbWVzL3JhbmRvbSkKUkFORE9NX0NNRD89CS91 c3IvZ2FtZXMvcmFuZG9tClJBTkRPTV9BUkdTPz0JIi13IC1mIC0iCl9SQU5ET01JWkVfU0lURVM9 CSIgfCR7UkFORE9NX0NNRH0gJHtSQU5ET01fQVJHU30iCi5lbmRpZgouZW5kaWYKClRPVUNIPz0J CQkvdXNyL2Jpbi90b3VjaApUT1VDSF9GTEFHUz89CS1mCgpESVNUT1JJRz89CS5iYWsub3JpZwpQ QVRDSD89CQkJL3Vzci9iaW4vcGF0Y2gKUEFUQ0hfU1RSSVA/PQktcDAKUEFUQ0hfRElTVF9TVFJJ UD89CS1wMAouaWYgZGVmaW5lZChQQVRDSF9ERUJVRykKUEFUQ0hfREVCVUdfVE1QPQl5ZXMKUEFU Q0hfQVJHUz89CS1kICR7UEFUQ0hfV1JLU1JDfSAtRSAke1BBVENIX1NUUklQfQpQQVRDSF9ESVNU X0FSR1M/PQktLXN1ZmZpeCAke0RJU1RPUklHfSAtZCAke1BBVENIX1dSS1NSQ30gLUUgJHtQQVRD SF9ESVNUX1NUUklQfQouZWxzZQpQQVRDSF9ERUJVR19UTVA9CW5vClBBVENIX0FSR1M/PQktZCAk e1BBVENIX1dSS1NSQ30gLS1mb3J3YXJkIC0tcXVpZXQgLUUgJHtQQVRDSF9TVFJJUH0KUEFUQ0hf RElTVF9BUkdTPz0JLS1zdWZmaXggJHtESVNUT1JJR30gLWQgJHtQQVRDSF9XUktTUkN9IC0tZm9y d2FyZCAtLXF1aWV0IC1FICR7UEFUQ0hfRElTVF9TVFJJUH0KLmVuZGlmCi5pZiAhZGVmaW5lZChR VUlFVCkKUEFUQ0hfU0lMRU5UPQkJUEFUQ0hfU0lMRU5UPXllcwouZW5kaWYKLmlmIGRlZmluZWQo QkFUQ0gpClBBVENIX0FSR1MrPQkJLS1iYXRjaApQQVRDSF9ESVNUX0FSR1MrPQktLWJhdGNoCi5l bmRpZgoKIyBQcmV2ZW50IGJyZWFrYWdlIHdpdGggVkVSU0lPTl9DT05UUk9MPW51bWJlcmVkClBB VENIX0FSR1MrPQktViBzaW1wbGUKCi5pZiBkZWZpbmVkKFBBVENIX0NIRUNLX09OTFkpClBBVENI X0FSR1MrPQktQwpQQVRDSF9ESVNUX0FSR1MrPQktQwouZW5kaWYKCi5pZiAke1BBVENIfSA9PSAi L3Vzci9iaW4vcGF0Y2giClBBVENIX0FSR1MrPQktLXN1ZmZpeCAub3JpZwpQQVRDSF9ESVNUX0FS R1MrPQktLXN1ZmZpeCAub3JpZwouZW5kaWYKClRBUj89CS91c3IvYmluL3RhcgoKIyBFWFRSQUNU X1NVRlggaXMgZGVmaW5lZCBpbiAucHJlLm1rIHNlY3Rpb24KRVhUUkFDVF9DTUQ/PQkke1RBUn0K RVhUUkFDVF9CRUZPUkVfQVJHUz89CS14ZgpFWFRSQUNUX0FGVEVSX0FSR1M/PQktLW5vLXNhbWUt b3duZXIgLS1uby1zYW1lLXBlcm1pc3Npb25zCgojIEZpZ3VyZSBvdXQgd2hlcmUgdGhlIGxvY2Fs IG10cmVlIGZpbGUgaXMKLmlmICFkZWZpbmVkKE1UUkVFX0ZJTEUpICYmICFkZWZpbmVkKE5PX01U UkVFKQouaWYgJHtQUkVGSVh9ID09IC91c3IKTVRSRUVfRklMRT0JL2V0Yy9tdHJlZS9CU0QudXNy LmRpc3QKLmVsc2UKTVRSRUVfRklMRT0JJHtQT1JUU0RJUn0vVGVtcGxhdGVzL0JTRC5sb2NhbC5k aXN0Ci5lbmRpZgpNVFJFRV9GSUxFX0RFRkFVTFQ9eWVzCi5lbmRpZgpNVFJFRV9DTUQ/PQkvdXNy L3NiaW4vbXRyZWUKTVRSRUVfQVJHUz89CS1VICR7TVRSRUVfRk9MTE9XU19TWU1MSU5LU30gLWYg JHtNVFJFRV9GSUxFfSAtZCAtZSAtcAoKX1NIQVJFTU9ERT89CTA2NDQKCiMgQSBmZXcgYWxpYXNl cyBmb3IgKi1pbnN0YWxsIHRhcmdldHMKSU5TVEFMTF9QUk9HUkFNPQkke0lOU1RBTEx9ICR7Q09Q WX0gJHtTVFJJUH0gLW0gJHtCSU5NT0RFfQpJTlNUQUxMX0tMRD0JJHtJTlNUQUxMfSAke0NPUFl9 IC1tICR7QklOTU9ERX0KSU5TVEFMTF9MSUI9CSR7SU5TVEFMTH0gJHtDT1BZfSAke1NUUklQfSAt bSAke1NIQVJFTU9ERX0KSU5TVEFMTF9TQ1JJUFQ9CSR7SU5TVEFMTH0gJHtDT1BZfSAtbSAke0JJ Tk1PREV9CklOU1RBTExfREFUQT0JJHtJTlNUQUxMfSAke0NPUFl9IC1tICR7X1NIQVJFTU9ERX0K SU5TVEFMTF9NQU49CSR7SU5TVEFMTH0gJHtDT1BZfSAtbSAke01BTk1PREV9CgpJTlNUQUxMX01B Q1JPUz0JQlNEX0lOU1RBTExfUFJPR1JBTT0iJHtJTlNUQUxMX1BST0dSQU19IiBcCgkJCUJTRF9J TlNUQUxMX0xJQj0iJHtJTlNUQUxMX0xJQn0iIFwKCQkJQlNEX0lOU1RBTExfU0NSSVBUPSIke0lO U1RBTExfU0NSSVBUfSIgXAoJCQlCU0RfSU5TVEFMTF9EQVRBPSIke0lOU1RBTExfREFUQX0iIFwK CQkJQlNEX0lOU1RBTExfTUFOPSIke0lOU1RBTExfTUFOfSIKTUFLRV9FTlYrPQkke0lOU1RBTExf TUFDUk9TfQpTQ1JJUFRTX0VOVis9CSR7SU5TVEFMTF9NQUNST1N9CgojIE1hY3JvIGZvciBjb3B5 aW5nIGVudGlyZSBkaXJlY3RvcnkgdHJlZSB3aXRoIGNvcnJlY3QgcGVybWlzc2lvbnMKQ09QWVRS RUVfQklOPQkke1NIfSAtYyAnKCR7RklORH0gLWQgJCQwICQkMiB8ICR7Q1BJT30gLWR1bXBsICQk MSA+L2Rldi9udWxsIFwKCQkJCQkyPiYxKSAmJiBcCgkJCQkJJHtGSU5EfSAtZCAkJDAgJCQyIC10 eXBlIGQgLWV4ZWMgY2htb2QgNzU1ICQkMS97fSBcOyAmJiBcCgkJCQkJJHtGSU5EfSAtZCAkJDAg JCQyIC10eXBlIGYgLWV4ZWMgY2htb2QgJHtCSU5NT0RFfSAkJDEve30gXDsnIC0tCkNPUFlUUkVF X1NIQVJFPQkke1NIfSAtYyAnKCR7RklORH0gLWQgJCQwICQkMiB8ICR7Q1BJT30gLWR1bXBsICQk MSA+L2Rldi9udWxsIFwKCQkJCQkyPiYxKSAmJiBcCgkJCQkJJHtGSU5EfSAtZCAkJDAgJCQyIC10 eXBlIGQgLWV4ZWMgY2htb2QgNzU1ICQkMS97fSBcOyAmJiBcCgkJCQkJJHtGSU5EfSAtZCAkJDAg JCQyIC10eXBlIGYgLWV4ZWMgY2htb2QgJHtTSEFSRU1PREV9ICQkMS97fSBcOycgLS0KCiMgVGhl IHVzZXIgY2FuIG92ZXJyaWRlIHRoZSBOT19QQUNLQUdFIGJ5IHNwZWNpZnlpbmcgdGhpcyBmcm9t CiMgdGhlIG1ha2UgY29tbWFuZCBsaW5lCi5pZiBkZWZpbmVkKEZPUkNFX1BBQ0tBR0UpCi51bmRl ZiBOT19QQUNLQUdFCi5lbmRpZgoKREVTQ1I/PQkJCSR7UEtHRElSfS9wa2ctZGVzY3IKUExJU1Q/ PQkJCSR7UEtHRElSfS9wa2ctcGxpc3QKUEtHSEVMUD89CQkke1BLR0RJUn0vcGtnLWhlbHAKUEtH SU5TVEFMTD89CSR7UEtHRElSfS9wa2ctaW5zdGFsbApQS0dERUlOU1RBTEw/PQkke1BLR0RJUn0v cGtnLWRlaW5zdGFsbApQS0dSRVE/PQkJJHtQS0dESVJ9L3BrZy1yZXEKUEtHTUVTU0FHRT89CSR7 UEtHRElSfS9wa2ctbWVzc2FnZQoKVE1QUExJU1Q/PQkke1dSS0RJUn0vLlBMSVNULm1rdG1wClRN UFBMSVNUX1NPUlQ/PQkke1dSS0RJUn0vLlBMSVNULm1rdG1wLnNvcnRlZApUTVBHVUNNRD89CSR7 V1JLRElSfS8uUExJU1QuZ3VjbWQKCi5pZiBkZWZpbmVkKFBLR19OT0NPTVBSRVNTKQpQS0dfU1VG WD89CQkudGFyCi5lbHNlClBLR19TVUZYPz0JCS50eHoKLmVuZGlmCiMgd2hlcmUgcGtnX2FkZCBy ZWNvcmRzIGl0cyBkaXJ0eSBkZWVkcy4KUEtHX0RCRElSPz0JCS92YXIvZGIvcGtnCgpBTExfVEFS R0VUPz0JCWFsbApJTlNUQUxMX1RBUkdFVD89CWluc3RhbGwKSU5TVEFMTF9UQVJHRVQrPQkke0xB VEVfSU5TVEFMTF9BUkdTfQoKIyBJbnRlZ3JhdGUgd2l0aCB0aGUgbGljZW5zZSBhdWRpdGluZyBm cmFtZXdvcmsKLmlmICFkZWZpbmVkIChESVNBQkxFX0xJQ0VOU0VTKQouaW5jbHVkZSAiJHtQT1JU U0RJUn0vTWsvYnNkLmxpY2Vuc2VzLm1rIgouZW5kaWYKCiMgUG9wdWxhciBtYXN0ZXIgc2l0ZXMK LmluY2x1ZGUgIiR7UE9SVFNESVJ9L01rL2JzZC5zaXRlcy5tayIKCiMgRW1wdHkgZGVjbGFyYXRp b24gdG8gYXZvaWQgInZhcmlhYmxlIE1BU1RFUl9TSVRFUyByZWN1cnNpdmUiIGVycm9yCk1BU1RF Ul9TSVRFUz89ClBBVENIX1NJVEVTPz0KX01BU1RFUl9TSVRFU19ERUZBVUxUPz0KX1BBVENIX1NJ VEVTX0RFRkFVTFQ/PQoKIyBGZWVkIGludGVybmFsIF97TUFTVEVSLFBBVENIfV9TSVRFU19uIHdo ZXJlIG4gaXMgYSBncm91cCBkZXNpZ25hdGlvbgojIGFzIHBlciBncm91cGluZyBydWxlcyAoOnNv bWV0aGluZykKIyBPcmdhbml6ZSBfe01BU1RFUixQQVRDSH1fU0lURVNfe0RFRkFVTFQsW14vOl0r fSBhY2NvcmRpbmcgdG8gZ3JvdXBpbmcKIyBydWxlcyAoOnNvbWV0aGluZykKLmZvciBfUyBpbiAk e01BU1RFUl9TSVRFU30KX1NfVEVNUD0JJHtfUzpTL14ke19TOkNALz86W14vOl0rJEAvQH0vLzpT L146Ly99Ci4JaWYgIWVtcHR5KF9TX1RFTVApCi4JCWZvciBfZ3JvdXAgaW4gJHtfU19URU1QOlMv LC8gL2d9Cl9HX1RFTVA9CSR7X2dyb3VwfQouCQkJaWYgJHtfR19URU1QfSA9PSBhbGwgfHwgJHtf R19URU1QfSA9PSBBTEwgfHwgJHtfR19URU1QfSA9PSBkZWZhdWx0CmNoZWNrLW1ha2V2YXJzOjoK CQkJCUAke0VDSE9fTVNHfSAiTWFrZWZpbGUgZXJyb3I6IHRoZSB3b3JkcyBhbGwsIEFMTCBhbmQg ZGVmYXVsdCBhcmUgcmVzZXJ2ZWQgYW5kIGNhbm5vdCBiZSIKCQkJCUAke0VDSE9fTVNHfSAidXNl ZCBpbiBncm91cCBkZWZpbml0aW9ucy4gUGxlYXNlIGZpeCB5b3VyIE1BU1RFUl9TSVRFUyIKCQkJ CUAke0ZBTFNFfQouCQkJZW5kaWYKX01BU1RFUl9TSVRFU18ke19ncm91cH0rPQkke19TOkNAXigu Ki8pOlteLzpdKyRAXDFAfQouCQllbmRmb3IKLgllbHNlCl9NQVNURVJfU0lURVNfREVGQVVMVCs9 CSR7X1M6Q0BeKC4qLyk6W14vOl0rJEBcMUB9Ci4JZW5kaWYKLmVuZGZvcgouZm9yIF9TIGluICR7 UEFUQ0hfU0lURVN9Cl9TX1RFTVA9CSR7X1M6Uy9eJHtfUzpDQC86W14vOl0rJEAvQH0vLzpTL146 Ly99Ci4JaWYgIWVtcHR5KF9TX1RFTVApCi4JCWZvciBfZ3JvdXAgaW4gJHtfU19URU1QOlMvLC8g L2d9Cl9HX1RFTVA9CSR7X2dyb3VwfQouCQkJaWYgJHtfR19URU1QfSA9PSBhbGwgfHwgJHtfR19U RU1QfSA9PSBBTEwgfHwgJHtfR19URU1QfSA9PSBkZWZhdWx0CmNoZWNrLW1ha2V2YXJzOjoKCQkJ CUAke0VDSE9fTVNHfSAiVGhlIHdvcmRzIGFsbCwgQUxMIGFuZCBkZWZhdWx0IGFyZSByZXNlcnZl ZCBhbmQgY2Fubm90IGJlIgoJCQkJQCR7RUNIT19NU0d9ICJ1c2VkIGluIGdyb3VwIGRlZmluaXRp b25zLiBQbGVhc2UgZml4IHlvdXIgUEFUQ0hfU0lURVMiCgkJCQlAJHtGQUxTRX0KLgkJCWVuZGlm Cl9QQVRDSF9TSVRFU18ke19ncm91cH0rPQkke19TOkNAXiguKi8pOlteLzpdKyRAXDFAfQouCQll bmRmb3IKLgllbHNlCl9QQVRDSF9TSVRFU19ERUZBVUxUKz0JJHtfUzpDQF4oLiovKTpbXi86XSsk QFwxQH0KLgllbmRpZgouZW5kZm9yCgojIEZlZWQgaW50ZXJuYWwgX3tNQVNURVIsUEFUQ0h9X1NJ VEVfU1VCRElSX24gd2hlcmUgbiBpcyBhIGdyb3VwIGRlc2lnbmF0aW9uCiMgYXMgcGVyIGdyb3Vw aW5nIHJ1bGVzICg6c29tZXRoaW5nKQojIE9yZ2FuaXplIF97TUFTVEVSLFBBVENIfV9TSVRFX1NV QkRJUl97REVGQVVMVCxbXi86XSt9IGFjY29yZGluZyB0byBncm91cGluZwojIHJ1bGVzICg6c29t ZXRoaW5nKQouZm9yIF9TIGluICR7TUFTVEVSX1NJVEVfU1VCRElSfQpfU19URU1QPQkke19TOlMv XiR7X1M6Q0AvOlteLzpdKyRAL0B9Ly86Uy9eOi8vfQouCWlmICFlbXB0eShfU19URU1QKQouCQlm b3IgX2dyb3VwIGluICR7X1NfVEVNUDpTLywvIC9nfQpfR19URU1QPQkke19ncm91cH0KLgkJCWlm ICR7X0dfVEVNUH0gPT0gYWxsIHx8ICR7X0dfVEVNUH0gPT0gQUxMIHx8ICR7X0dfVEVNUH0gPT0g ZGVmYXVsdApjaGVjay1tYWtldmFyczo6CgkJCQlAJHtFQ0hPX01TR30gIk1ha2VmaWxlIGVycm9y OiB0aGUgd29yZHMgYWxsLCBBTEwgYW5kIGRlZmF1bHQgYXJlIHJlc2VydmVkIGFuZCBjYW5ub3Qg YmUiCgkJCQlAJHtFQ0hPX01TR30gInVzZWQgaW4gZ3JvdXAgZGVmaW5pdGlvbnMuIFBsZWFzZSBm aXggeW91ciBNQVNURVJfU0lURV9TVUJESVIiCgkJCQlAJHtGQUxTRX0KLgkJCWVuZGlmCi4JCQlp ZiBkZWZpbmVkKF9NQVNURVJfU0lURVNfJHtfZ3JvdXB9KQpfTUFTVEVSX1NJVEVfU1VCRElSXyR7 X2dyb3VwfSs9ICR7X1M6Q0BeKC4qKS86W14vOl0rJEBcMUB9Ci4JCQllbmRpZgouCQllbmRmb3IK LgllbHNlCi4JCWlmIGRlZmluZWQoX01BU1RFUl9TSVRFU19ERUZBVUxUKQpfTUFTVEVSX1NJVEVf U1VCRElSX0RFRkFVTFQrPQkke19TOkNAXiguKikvOlteLzpdKyRAXDFAfQouCQllbmRpZgouCWVu ZGlmCi5lbmRmb3IKLmZvciBfUyBpbiAke1BBVENIX1NJVEVfU1VCRElSfQpfU19URU1QPQkke19T OlMvXiR7X1M6Q0AvOlteLzpdKyRAL0B9Ly86Uy9eOi8vfQouCWlmICFlbXB0eShfU19URU1QKQou CQlmb3IgX2dyb3VwIGluICR7X1NfVEVNUDpTLywvIC9nfQpfR19URU1QPQkke19ncm91cH0KLgkJ CWlmICR7X0dfVEVNUH0gPT0gYWxsIHx8ICR7X0dfVEVNUH0gPT0gQUxMIHx8ICR7X0dfVEVNUH0g PT0gZGVmYXVsdApjaGVjay1tYWtldmFyczo6CgkJCQlAJHtFQ0hPX01TR30gIk1ha2VmaWxlIGVy cm9yOiB0aGUgd29yZHMgYWxsLCBBTEwgYW5kIGRlZmF1bHQgYXJlIHJlc2VydmVkIGFuZCBjYW5u b3QgYmUiCgkJCQlAJHtFQ0hPX01TR30gInVzZWQgaW4gZ3JvdXAgZGVmaW5pdGlvbnMuIFBsZWFz ZSBmaXggeW91ciBQQVRDSF9TSVRFX1NVQkRJUiIKCQkJCUAke0ZBTFNFfQouCQkJZW5kaWYKLgkJ CWlmIGRlZmluZWQoX1BBVENIX1NJVEVTXyR7X2dyb3VwfSkKX1BBVENIX1NJVEVfU1VCRElSXyR7 X2dyb3VwfSs9ICR7X1M6Q0BeKC4qKS86W14vOl0rJEBcMUB9Ci4JCQllbmRpZgouCQllbmRmb3IK LgllbHNlCi4JCWlmIGRlZmluZWQoX1BBVENIX1NJVEVTX0RFRkFVTFQpCl9QQVRDSF9TSVRFX1NV QkRJUl9ERUZBVUxUKz0JJHtfUzpDQF4oLiopLzpbXi86XSskQFwxQH0KLgkJZW5kaWYKLgllbmRp ZgouZW5kZm9yCgojIFN1YnN0aXR1dGUgc3ViZGlyZWN0b3J5IG5hbWVzCiMgWFhYIHNpbXBsZXIv ZmFzdGVyIHNvbHV0aW9uIGJ1dCBub3QgdGhlIGJlc3Qgc3BhY2Ugd2lzZSwgc3VnZ2VzdGlvbnMg cGxlYXNlCi5mb3IgX1MgaW4gJHtNQVNURVJfU0lURVN9Cl9TX1RFTVA9CSR7X1M6Uy9eJHtfUzpD QC86W14vOl0rJEAvQH0vLzpTL146Ly99Ci4JaWYgIWVtcHR5KF9TX1RFTVApCi4JCWZvciBfZ3Jv dXAgaW4gJHtfU19URU1QOlMvLC8gL2d9Ci4JCQlpZiAhZGVmaW5lZChfTUFTVEVSX1NJVEVfU1VC RElSXyR7X2dyb3VwfSkKTUFTVEVSX1NJVEVTX1RNUD0JJHtfTUFTVEVSX1NJVEVTXyR7X2dyb3Vw fTpTXiVTVUJESVIlL15efQouCQkJZWxzZQpfU19URU1QX1RFTVA9CQkke19NQVNURVJfU0lURVNf JHtfZ3JvdXB9Ok0qJVNVQkRJUiUvKn0KLgkJCQlpZiBlbXB0eShfU19URU1QX1RFTVApCk1BU1RF Ul9TSVRFU19UTVA9CSR7X01BU1RFUl9TSVRFU18ke19ncm91cH19Ci4JCQkJZWxzZQpNQVNURVJf U0lURVNfVE1QPQouCQkJCQlmb3Igc2l0ZSBpbiAke19NQVNURVJfU0lURVNfJHtfZ3JvdXB9fQpf U19URU1QX1RFTVA9CSR7c2l0ZTpNKiVTVUJESVIlLyp9Ci4JCQkJCQlpZiBlbXB0eShfU19URU1Q X1RFTVApCk1BU1RFUl9TSVRFU19UTVArPQkke3NpdGV9Ci4JCQkJCQllbHNlCi4JCQkJCQkJZm9y IGRpciBpbiAke19NQVNURVJfU0lURV9TVUJESVJfJHtfZ3JvdXB9fQpNQVNURVJfU0lURVNfVE1Q Kz0JJHtzaXRlOlNeJVNVQkRJUiVeXCR7ZGlyfV59Ci4JCQkJCQkJZW5kZm9yCi4JCQkJCQllbmRp ZgouCQkJCQllbmRmb3IKLgkJCQllbmRpZgouCQkJZW5kaWYKX01BU1RFUl9TSVRFU18ke19ncm91 cH06PQkke01BU1RFUl9TSVRFU19UTVB9Ci4JCWVuZGZvcgouCWVuZGlmCi5lbmRmb3IKLmlmIGRl ZmluZWQoX01BU1RFUl9TSVRFX1NVQkRJUl9ERUZBVUxUKQpfU19URU1QPQkke19NQVNURVJfU0lU RVNfREVGQVVMVDpNKiVTVUJESVIlLyp9Ci4JaWYgZW1wdHkoX1NfVEVNUCkKTUFTVEVSX1NJVEVT X1RNUD0JJHtfTUFTVEVSX1NJVEVTX0RFRkFVTFR9Ci4JZWxzZQpNQVNURVJfU0lURVNfVE1QPQou CQlmb3Igc2l0ZSBpbiAke19NQVNURVJfU0lURVNfREVGQVVMVH0KX1NfVEVNUF9URU1QPQkJJHtz aXRlOk0qJVNVQkRJUiUvKn0KLgkJCWlmIGVtcHR5KF9TX1RFTVBfVEVNUCkKTUFTVEVSX1NJVEVT X1RNUCs9CSR7c2l0ZX0KLgkJCWVsc2UKLgkJCQlmb3IgZGlyIGluICR7X01BU1RFUl9TSVRFX1NV QkRJUl9ERUZBVUxUfQpNQVNURVJfU0lURVNfVE1QKz0JJHtzaXRlOlNeJVNVQkRJUiVeXCR7ZGly fV59Ci4JCQkJZW5kZm9yCi4JCQllbmRpZgouCQllbmRmb3IKLgllbmRpZgouZWxzZQpNQVNURVJf U0lURVNfVE1QPQkke19NQVNURVJfU0lURVNfREVGQVVMVDpTXiVTVUJESVIlL15efQouZW5kaWYK X01BU1RFUl9TSVRFU19ERUZBVUxUOj0JJHtNQVNURVJfU0lURVNfVE1QfQpNQVNURVJfU0lURVNf VE1QPQouZm9yIF9TIGluICR7UEFUQ0hfU0lURVN9Cl9TX1RFTVA9CSR7X1M6Uy9eJHtfUzpDQC86 W14vOl0rJEAvQH0vLzpTL146Ly99Ci4JaWYgIWVtcHR5KF9TX1RFTVApCi4JCWZvciBfZ3JvdXAg aW4gJHtfU19URU1QOlMvLC8gL2d9Ci4JCQlpZiAhZGVmaW5lZChfUEFUQ0hfU0lURV9TVUJESVJf JHtfZ3JvdXB9KQpQQVRDSF9TSVRFU19UTVA9CSR7X1BBVENIX1NJVEVTXyR7X2dyb3VwfTpTXiVT VUJESVIlL15efQouCQkJZWxzZQpfU19URU1QX1RFTVA9CQkke19QQVRDSF9TSVRFU18ke19ncm91 cH06TSolU1VCRElSJS8qfQouCQkJCWlmIGVtcHR5KF9TX1RFTVBfVEVNUCkKUEFUQ0hfU0lURVNf VE1QPQkke19QQVRDSF9TSVRFU18ke19ncm91cH19Ci4JCQkJZWxzZQpQQVRDSF9TSVRFU19UTVA9 Ci4JCQkJCWZvciBzaXRlIGluICR7X1BBVENIX1NJVEVTXyR7X2dyb3VwfX0KX1NfVEVNUF9URU1Q PQkke3NpdGU6TSolU1VCRElSJS8qfQouCQkJCQkJaWYgZW1wdHkoX1NfVEVNUF9URU1QKQpQQVRD SF9TSVRFU19UTVArPQkke3NpdGV9Ci4JCQkJCQllbHNlCi4JCQkJCQkJZm9yIGRpciBpbiAke19Q QVRDSF9TSVRFX1NVQkRJUl8ke19ncm91cH19ClBBVENIX1NJVEVTX1RNUCs9CSR7c2l0ZTpTXiVT VUJESVIlXlwke2Rpcn1efQouCQkJCQkJCWVuZGZvcgouCQkJCQkJZW5kaWYKLgkJCQkJZW5kZm9y Ci4JCQkJZW5kaWYKLgkJCWVuZGlmCl9QQVRDSF9TSVRFU18ke19ncm91cH06PQkke1BBVENIX1NJ VEVTX1RNUH0KLgkJZW5kZm9yCi4JZW5kaWYKLmVuZGZvcgouaWYgZGVmaW5lZChfUEFUQ0hfU0lU RV9TVUJESVJfREVGQVVMVCkKX1NfVEVNUD0JJHtfUEFUQ0hfU0lURVNfREVGQVVMVDpNKiVTVUJE SVIlLyp9Ci4JaWYgZW1wdHkoX1NfVEVNUCkKUEFUQ0hfU0lURVNfVE1QPQkke19QQVRDSF9TSVRF U19ERUZBVUxUfQouCWVsc2UKUEFUQ0hfU0lURVNfVE1QPQouCQlmb3Igc2l0ZSBpbiAke19QQVRD SF9TSVRFU19ERUZBVUxUfQpfU19URU1QX1RFTVA9CQkke3NpdGU6TSolU1VCRElSJS8qfQouCQkJ aWYgZW1wdHkoX1NfVEVNUF9URU1QKQpQQVRDSF9TSVRFU19UTVArPQkke3NpdGV9Ci4JCQllbHNl Ci4JCQkJZm9yIGRpciBpbiAke19QQVRDSF9TSVRFX1NVQkRJUl9ERUZBVUxUfQpQQVRDSF9TSVRF U19UTVArPQkke3NpdGU6U14lU1VCRElSJV5cJHtkaXJ9Xn0KLgkJCQllbmRmb3IKLgkJCWVuZGlm Ci4JCWVuZGZvcgouCWVuZGlmCi5lbHNlClBBVENIX1NJVEVTX1RNUD0JJHtfUEFUQ0hfU0lURVNf REVGQVVMVDpTXiVTVUJESVIlL15efQouZW5kaWYKX1BBVENIX1NJVEVTX0RFRkFVTFQ6PQkke1BB VENIX1NJVEVTX1RNUH0KUEFUQ0hfU0lURVNfVE1QPQoKIyBUaGUgcHJpbWFyeSBiYWNrdXAgc2l0 ZS4KTUFTVEVSX1NJVEVfQkFDS1VQPz0JXAoJaHR0cDovL2Rpc3RjYWNoZS5GcmVlQlNELm9yZy9w b3J0cy1kaXN0ZmlsZXMvJHtESVNUX1NVQkRJUn0vCk1BU1RFUl9TSVRFX0JBQ0tVUDo9CSR7TUFT VEVSX1NJVEVfQkFDS1VQOlNeXCR7RElTVF9TVUJESVJ9L15efQoKIyBJZiB0aGUgdXNlciBoYXMg TUFTVEVSX1NJVEVfRlJFRUJTRCBzZXQsIGdvIHRvIHRoZSBGcmVlQlNEIHJlcG9zaXRvcnkKIyBm b3IgZXZlcnl0aGluZywgYnV0IGRvbid0IHNlYXJjaCBpdCB0d2ljZSBieSBhcHBlbmRpbmcgaXQg dG8gdGhlIGVuZC4KLmlmIGRlZmluZWQoTUFTVEVSX1NJVEVfRlJFRUJTRCkKX01BU1RFUl9TSVRF X09WRVJSSURFOj0JJHtNQVNURVJfU0lURV9CQUNLVVB9Cl9NQVNURVJfU0lURV9CQUNLVVA6PQkj IGVtcHR5Ci5lbHNlCl9NQVNURVJfU0lURV9PVkVSUklERT0JJHtNQVNURVJfU0lURV9PVkVSUklE RX0KX01BU1RFUl9TSVRFX0JBQ0tVUD0JJHtNQVNURVJfU0lURV9CQUNLVVB9Ci5lbmRpZgoKTk9G RVRDSEZJTEVTPz0KCiMgT3JnYW5pemUgRElTVEZJTEVTLCBQQVRDSEZJTEVTLCBfTUFTVEVSX1NJ VEVTX0FMTCwgX1BBVENIX1NJVEVTX0FMTAojIGFjY29yZGluZyB0byBncm91cGluZyBydWxlcyAo OnNvbWV0aGluZykKRElTVEZJTEVTPz0JCSR7RElTVE5BTUV9JHtFWFRSQUNUX1NVRlh9Cl9NQVNU RVJfU0lURVNfQUxMPQkke19NQVNURVJfU0lURVNfREVGQVVMVH0KX1BBVENIX1NJVEVTX0FMTD0J JHtfUEFUQ0hfU0lURVNfREVGQVVMVH0KX0dfVEVNUD0JREVGQVVMVAouZm9yIF9EIGluICR7RElT VEZJTEVTfQpfRF9URU1QPQkke19EOlMvXiR7X0Q6Qy86W146XSskLy99Ly99Ci4JaWYgIWVtcHR5 KF9EX1RFTVApCi4JCWZvciBfZ3JvdXAgaW4gJHtfRF9URU1QOlMvXjovLzpTLywvIC9nfQouCQkJ aWYgIWRlZmluZWQoX01BU1RFUl9TSVRFU18ke19ncm91cH0pCl9HX1RFTVBfVEVNUD0JJHtfR19U RU1QOk0vJHtfZ3JvdXB9L30KLgkJCQlpZiBlbXB0eShfR19URU1QX1RFTVApCl9HX1RFTVArPQkk e19ncm91cH0KX01BU1RFUl9TSVRFU19BTEwrPQkke19NQVNURVJfU0lURVNfJHtfZ3JvdXB9fQou CQkJCWVuZGlmCi4JCQllbmRpZgouCQllbmRmb3IKX0RJU1RGSUxFUys9CSR7X0Q6Qy86W146XSsk Ly99Ci4JZWxzZQpfRElTVEZJTEVTKz0JJHtfRH0KLgllbmRpZgouZW5kZm9yCl9HX1RFTVA9CURF RkFVTFQKLmZvciBfUCBpbiAke1BBVENIRklMRVN9Cl9QX1RFTVA9CSR7X1A6Qy86W14tOl1bXjpd KiQvL30KX1BfZ3JvdXBzPQkke19QOlMvXiR7X1A6Qy86W146XSskLy99Ly86Uy9eOi8vfQpfUF9m aWxlPQkke19QX1RFTVA6Qy86LVteOl0rJC8vfQpfUF9zdHJpcD0JJHtfUF9URU1QOlMvXiR7X1Bf VEVNUDpDLzotW146XSokLy99Ly86Uy9eOi8vfQouCWlmICFlbXB0eShfUF9ncm91cHMpCi4JCWZv ciBfZ3JvdXAgaW4gJHtfUF9ncm91cHM6Uy8sLyAvZ30KLgkJCWlmICFkZWZpbmVkKF9QQVRDSF9T SVRFU18ke19ncm91cH0pCl9HX1RFTVBfVEVNUD0JJHtfR19URU1QOk0vJHtfZ3JvdXB9L30KLgkJ CQlpZiBlbXB0eShfR19URU1QX1RFTVApCl9HX1RFTVArPQkke19ncm91cH0KX1BBVENIX1NJVEVT X0FMTCs9CSR7X1BBVENIX1NJVEVTXyR7X2dyb3VwfX0KLgkJCQllbmRpZgouCQkJZW5kaWYKLgkJ ZW5kZm9yCi4JZW5kaWYKX1BBVENIRklMRVM6PQkke19QQVRDSEZJTEVTfSAke19QX2ZpbGV9Ci4J aWYgIWVtcHR5KF9QX3N0cmlwKQpfUEFUQ0hfRElTVF9TVFJJUF9DQVNFUzo9CSR7X1BBVENIX0RJ U1RfU1RSSVBfQ0FTRVN9ICgiJHtfUF9maWxlfSIpIHByaW50ZiAlcyAiJHtfUF9zdHJpcH0iIDs7 Ci4JZW5kaWYKLmVuZGZvcgpfUF9ncm91cHM9Cl9QX2ZpbGU9Cl9QX3N0cmlwPQpfR19URU1QPQpf R19URU1QX1RFTVA9CkFMTEZJTEVTPz0JJHtfRElTVEZJTEVTfSAke19QQVRDSEZJTEVTfQoKIwoj IFNvcnQgdGhlIG1hc3RlciBzaXRlIGxpc3QgYWNjb3JkaW5nIHRvIHRoZSBwYXR0ZXJucyBpbiBN QVNURVJfU09SVAojCk1BU1RFUl9TT1JUPz0KTUFTVEVSX1NPUlRfUkVHRVg/PQpNQVNURVJfU09S VF9SRUdFWCs9CSR7TUFTVEVSX1NPUlQ6U3wufFxcLnxnOlN8Xnw6Ly9bXi9dKnw6U3wkfC98fQoK TUFTVEVSX1NPUlRfQVdLPQlCRUdJTiB7IFJTID0gIiAiOyBPUlMgPSAiICI7IElHTk9SRUNBU0Ug PSAxIDsgZ2wgPSAiJHtNQVNURVJfU09SVF9SRUdFWDpTfFxcfFxcXFx8Z30iOyB9Ci5mb3Igc3J0 IGluICR7TUFTVEVSX1NPUlRfUkVHRVh9Ck1BU1RFUl9TT1JUX0FXSys9CS8ke3NydDpTfC98XFwv fGd9LyB7IGdvb2RbIiR7c3J0OlN8XFx8XFxcXHxnfSJdID0gZ29vZFsiJHtzcnQ6U3xcXHxcXFxc fGd9Il0gIiAiICQkMCA7IG5leHQ7IH0KLmVuZGZvcgpNQVNURVJfU09SVF9BV0srPQl7IHJlc3Qg PSByZXN0ICIgIiAkJDA7IH0gRU5EIHsgbj1zcGxpdChnbCwgZ2xhKTsgZm9yKGk9MTtpPD1uO2kr KykgeyBwcmludCBnb29kW2dsYVtpXV07IH0gcHJpbnQgcmVzdDsgfQoKU09SVEVEX01BU1RFUl9T SVRFU19ERUZBVUxUX0NNRD0JY2QgJHsuQ1VSRElSfSAmJiAke01BS0V9IG1hc3Rlci1zaXRlcy1E RUZBVUxUClNPUlRFRF9QQVRDSF9TSVRFU19ERUZBVUxUX0NNRD0JCWNkICR7LkNVUkRJUn0gJiYg JHtNQUtFfSBwYXRjaC1zaXRlcy1ERUZBVUxUClNPUlRFRF9NQVNURVJfU0lURVNfQUxMX0NNRD0J Y2QgJHsuQ1VSRElSfSAmJiAke01BS0V9IG1hc3Rlci1zaXRlcy1BTEwKU09SVEVEX1BBVENIX1NJ VEVTX0FMTF9DTUQ9CWNkICR7LkNVUkRJUn0gJiYgJHtNQUtFfSBwYXRjaC1zaXRlcy1BTEwKCiMg aGFzIHNpbWlsYXIgZWZmZWN0IHRvIG9sZCB0YXJnZXRzLCBpLmUuLCBhY2Nlc3Mgb25seSB7TUFT VEVSLFBBVENIfV9TSVRFUywgbm90IHdvcmtpbmcgd2l0aCB0aGUgbmV3IF9uIHZhcmlhYmxlcwpt YXN0ZXItc2l0ZXMtREVGQVVMVDoKCUAke0VDSE9fQ01EfSAke19NQVNURVJfU0lURV9PVkVSUklE RX0gYCR7RUNIT19DTUR9ICcke19NQVNURVJfU0lURVNfREVGQVVMVH0nIHwgJHtBV0t9ICcke01B U1RFUl9TT1JUX0FXSzpTfFxcfFxcXFx8Z30nYCAke19NQVNURVJfU0lURV9CQUNLVVB9CnBhdGNo LXNpdGVzLURFRkFVTFQ6CglAJHtFQ0hPX0NNRH0gJHtfTUFTVEVSX1NJVEVfT1ZFUlJJREV9IGAk e0VDSE9fQ01EfSAnJHtfUEFUQ0hfU0lURVNfREVGQVVMVH0nIHwgJHtBV0t9ICcke01BU1RFUl9T T1JUX0FXSzpTfFxcfFxcXFx8Z30nYCAke19NQVNURVJfU0lURV9CQUNLVVB9CgojCiMgU29ydCB0 aGUgbWFzdGVyIHNpdGUgbGlzdCBhY2NvcmRpbmcgdG8gdGhlIHBhdHRlcm5zIGluIE1BU1RFUl9T T1JUCiMgYWNjb3JkaW5nIHRvIGdyb3VwaW5nIHJ1bGVzICg6c29tZXRoaW5nKQojCiMgZm9yIHVz ZSBpbiB0aGUgZmV0Y2ggdGFyZ2V0cwouZm9yIF9TIGluICR7TUFTVEVSX1NJVEVTfQpfU19URU1Q PQkke19TOlMvXiR7X1M6Q0AvOlteLzpdKyRAL0B9Ly99Ci4JaWYgIWVtcHR5KF9TX1RFTVApCi4J CWZvciBfZ3JvdXAgaW4gJHtfU19URU1QOlMvXjovLzpTLywvIC9nfQouCQkJaWYgIXRhcmdldCht YXN0ZXItc2l0ZXMtJHtfZ3JvdXB9KQpTT1JURURfTUFTVEVSX1NJVEVTXyR7X2dyb3VwfV9DTUQ9 CWNkICR7LkNVUkRJUn0gJiYgJHtNQUtFfSBtYXN0ZXItc2l0ZXMtJHtfZ3JvdXB9Cm1hc3Rlci1z aXRlcy0ke19ncm91cH06CglAJHtFQ0hPX0NNRH0gJHtfTUFTVEVSX1NJVEVfT1ZFUlJJREV9IGAk e0VDSE9fQ01EfSAnJHtfTUFTVEVSX1NJVEVTXyR7X2dyb3VwfX0nIHwgJHtBV0t9ICcke01BU1RF Ul9TT1JUX0FXSzpTfFxcfFxcXFx8Z30nYCAke19NQVNURVJfU0lURV9CQUNLVVB9Ci4JCQllbmRp ZgouCQllbmRmb3IKLgllbmRpZgouZW5kZm9yCi5mb3IgX1MgaW4gJHtQQVRDSF9TSVRFU30KX1Nf VEVNUD0JJHtfUzpTL14ke19TOkNALzpbXi86XSskQC9AfS8vfQouCWlmICFlbXB0eShfU19URU1Q KQouCQlmb3IgX2dyb3VwIGluICR7X1NfVEVNUDpTL146Ly86Uy8sLyAvZ30KLgkJCWlmICF0YXJn ZXQocGF0Y2gtc2l0ZXMtJHtfZ3JvdXB9KQpTT1JURURfUEFUQ0hfU0lURVNfJHtfZ3JvdXB9X0NN RD0JY2QgJHsuQ1VSRElSfSAmJiAke01BS0V9IHBhdGNoLXNpdGVzLSR7X2dyb3VwfQpwYXRjaC1z aXRlcy0ke19ncm91cH06CglAJHtFQ0hPX0NNRH0gJHtfTUFTVEVSX1NJVEVfT1ZFUlJJREV9IGAk e0VDSE9fQ01EfSAnJHtfUEFUQ0hfU0lURVNfJHtfZ3JvdXB9fScgfCAke0FXS30gJyR7TUFTVEVS X1NPUlRfQVdLOlN8XFx8XFxcXHxnfSdgICR7X01BU1RFUl9TSVRFX0JBQ0tVUH0KLgkJCWVuZGlm Ci4JCWVuZGZvcgouCWVuZGlmCi5lbmRmb3IKCiMKIyBIYWNrZXJ5IHRvIGVuYWJsZSBzaW1wbGUg ZmV0Y2ggdGFyZ2V0cyB3aXRoIHNldmVyYWwgZHluYW1pYyBNQVNURVJfU0lURVMKIwpfTUFTVEVS X1NJVEVTX0VOVj0JX01BU1RFUl9TSVRFU19ERUZBVUxUPSIke19NQVNURVJfU0lURVNfREVGQVVM VH0iCi5mb3IgX0YgaW4gJHtESVNURklMRVN9Cl9GX1RFTVA9CSR7X0Y6Uy9eJHtfRjpDLzpbXjpd KyQvL30vLzpTL146Ly99Ci4JaWYgIWVtcHR5KF9GX1RFTVApCi4JCWZvciBfZ3JvdXAgaW4gJHtf Rl9URU1QOlMvLC8gL2d9Ci4JCQlpZiBkZWZpbmVkKF9NQVNURVJfU0lURVNfJHtfZ3JvdXB9KQpf TUFTVEVSX1NJVEVTX0VOVis9CV9NQVNURVJfU0lURVNfJHtfZ3JvdXB9PSIke19NQVNURVJfU0lU RVNfJHtfZ3JvdXB9fSIKLgkJCWVuZGlmCi4JCWVuZGZvcgouCWVuZGlmCi5lbmRmb3IKX1BBVENI X1NJVEVTX0VOVj0JX1BBVENIX1NJVEVTX0RFRkFVTFQ9IiR7X1BBVENIX1NJVEVTX0RFRkFVTFR9 IgouZm9yIF9GIGluICR7UEFUQ0hGSUxFU30KX0ZfVEVNUD0JJHtfRjpTL14ke19GOkMvOlteLTpd W146XSokLy99Ly86Uy9eOi8vfQouCWlmICFlbXB0eShfRl9URU1QKQouCQlmb3IgX2dyb3VwIGlu ICR7X0ZfVEVNUDpTLywvIC9nfQouCQkJaWYgZGVmaW5lZChfUEFUQ0hfU0lURVNfJHtfZ3JvdXB9 KQpfUEFUQ0hfU0lURVNfRU5WKz0JX1BBVENIX1NJVEVTXyR7X2dyb3VwfT0iJHtfUEFUQ0hfU0lU RVNfJHtfZ3JvdXB9fSIKLgkJCWVuZGlmCi4JCWVuZGZvcgouCWVuZGlmCi5lbmRmb3IKCm1hc3Rl ci1zaXRlcy1BTEw6CglAJHtFQ0hPX0NNRH0gJHtfTUFTVEVSX1NJVEVfT1ZFUlJJREV9IGAke0VD SE9fQ01EfSAnJHtfTUFTVEVSX1NJVEVTX0FMTH0nIHwgJHtBV0t9ICcke01BU1RFUl9TT1JUX0FX SzpTfFxcfFxcXFx8Z30nYCAke19NQVNURVJfU0lURV9CQUNLVVB9CnBhdGNoLXNpdGVzLUFMTDoK CUAke0VDSE9fQ01EfSAke19NQVNURVJfU0lURV9PVkVSUklERX0gYCR7RUNIT19DTUR9ICcke19Q QVRDSF9TSVRFU19BTEx9JyB8ICR7QVdLfSAnJHtNQVNURVJfU09SVF9BV0s6U3xcXHxcXFxcfGd9 J2AgJHtfTUFTVEVSX1NJVEVfQkFDS1VQfQoKIyBzeW5vbnltcywgbW5lbW9uaWNzCm1hc3Rlci1z aXRlcy1hbGw6IG1hc3Rlci1zaXRlcy1BTEwKcGF0Y2gtc2l0ZXMtYWxsOiBwYXRjaC1zaXRlcy1B TEwKbWFzdGVyLXNpdGVzLWRlZmF1bHQ6IG1hc3Rlci1zaXRlcy1ERUZBVUxUCnBhdGNoLXNpdGVz LWRlZmF1bHQ6IHBhdGNoLXNpdGVzLURFRkFVTFQKCiMgY29tcGF0aWJpbGl0eSB3aXRoIG9sZCBi ZWhhdmlvcgptYXN0ZXItc2l0ZXM6IG1hc3Rlci1zaXRlcy1ERUZBVUxUCnBhdGNoLXNpdGVzOiBw YXRjaC1zaXRlcy1ERUZBVUxUCgpDS1NVTUZJTEVTPQkJJHtBTExGSUxFU30KCiMgTGlzdCBvZiBh bGwgZmlsZXMsIHdpdGggJHtESVNUX1NVQkRJUn0gaW4gZnJvbnQuICBVc2VkIGZvciBjaGVja3N1 bS4KLmlmIGRlZmluZWQoRElTVF9TVUJESVIpCi5pZiBkZWZpbmVkKENLU1VNRklMRVMpICYmICR7 Q0tTVU1GSUxFU30hPSIiCl9DS1NVTUZJTEVTPz0JJHtDS1NVTUZJTEVTOlMvXi8ke0RJU1RfU1VC RElSfVwvL30KLmVuZGlmCi5lbHNlCl9DS1NVTUZJTEVTPz0JJHtDS1NVTUZJTEVTfQouZW5kaWYK CiMgVGhpcyBpcyB3aGF0IGlzIGFjdHVhbGx5IGdvaW5nIHRvIGJlIGV4dHJhY3RlZCwgYW5kIGlz IG92ZXJyaWRhYmxlCiMgIGJ5IHVzZXIuCkVYVFJBQ1RfT05MWT89CSR7X0RJU1RGSUxFU30KCi5p ZiAhdGFyZ2V0KG1haW50YWluZXIpCm1haW50YWluZXI6CglAJHtFQ0hPX0NNRH0gIiR7TUFJTlRB SU5FUn0iCi5lbmRpZgoKLmlmICFkZWZpbmVkKENBVEVHT1JJRVMpCmNoZWNrLWNhdGVnb3JpZXM6 CglAJHtFQ0hPX01TR30gIiR7UEtHTkFNRX06IE1ha2VmaWxlIGVycm9yOiBDQVRFR09SSUVTIGlz IG1hbmRhdG9yeS4iCglAJHtGQUxTRX0KLmVsc2UKClZBTElEX0NBVEVHT1JJRVMrPSBhY2Nlc3Np YmlsaXR5IGFmdGVyc3RlcCBhcmFiaWMgYXJjaGl2ZXJzIGFzdHJvIGF1ZGlvIFwKCWJlbmNobWFy a3MgYmlvbG9neSBjYWQgY2hpbmVzZSBjb21tcyBjb252ZXJ0ZXJzIGRhdGFiYXNlcyBcCglkZXNr dXRpbHMgZGV2ZWwgZG9jcyBkbnMgZWRpdG9ycyBlbGlzcCBlbXVsYXRvcnMgZW5saWdodGVubWVu dCBmaW5hbmNlIGZyZW5jaCBmdHAgXAoJZ2FtZXMgZ2VvZ3JhcGh5IGdlcm1hbiBnbm9tZSBnbnVz dGVwIGdyYXBoaWNzIGhhbXJhZGlvIGhhc2tlbGwgaGVicmV3IGh1bmdhcmlhbiBcCglpcHY2IGly YyBqYXBhbmVzZSBqYXZhIGtkZSBrbGQga29yZWFuIGxhbmcgbGludXggbGlzcCBcCgltYWlsIG1h dGUgbWF0aCBtYm9uZSBtaXNjIG11bHRpbWVkaWEgbmV0IG5ldC1pbSBuZXQtbWdtdCBuZXQtcDJw IG5ld3MgXAoJcGFsbSBwYXJhbGxlbCBwZWFyIHBlcmw1IHBsYW45IHBvbGlzaCBwb3J0dWd1ZXNl IHBvcnRzLW1nbXQgXAoJcHJpbnQgcHl0aG9uIHJ1YnkgcnVieWdlbXMgcnVzc2lhbiBcCglzY2hl bWUgc2NpZW5jZSBzZWN1cml0eSBzaGVsbHMgc3BhbmlzaCBzeXN1dGlscyBcCgl0Y2wgdGV4dHBy b2MgdGsgXAoJdWtyYWluaWFuIHZpZXRuYW1lc2Ugd2luZG93bWFrZXIgd3d3IFwKCXgxMSB4MTEt Y2xvY2tzIHgxMS1kcml2ZXJzIHgxMS1mbSB4MTEtZm9udHMgeDExLXNlcnZlcnMgeDExLXRoZW1l cyBcCgl4MTEtdG9vbGtpdHMgeDExLXdtIHhmY2Ugem9wZQoKY2hlY2stY2F0ZWdvcmllczoKLmZv ciBjYXQgaW4gJHtDQVRFR09SSUVTfQouCWlmIGVtcHR5KFZBTElEX0NBVEVHT1JJRVM6TSR7Y2F0 fSkKCQlAJHtFQ0hPX01TR30gIiR7UEtHTkFNRX06IE1ha2VmaWxlIGVycm9yOiBjYXRlZ29yeSAk e2NhdH0gbm90IGluIGxpc3Qgb2YgdmFsaWQgY2F0ZWdvcmllcy4iOyBcCgkJJHtGQUxTRX07Ci4J ZW5kaWYKLmVuZGZvcgouZW5kaWYKClBLR1JFUE9TSVRPUllTVUJESVI/PQlBbGwKUEtHUkVQT1NJ VE9SWT89CQkke1BBQ0tBR0VTfS8ke1BLR1JFUE9TSVRPUllTVUJESVJ9Ci5pZiBleGlzdHMoJHtQ QUNLQUdFU30pClBLR0ZJTEU/PQkJJHtQS0dSRVBPU0lUT1JZfS8ke1BLR05BTUV9JHtQS0dfU1VG WH0KLmVsc2UKUEtHRklMRT89CQkkey5DVVJESVJ9LyR7UEtHTkFNRX0ke1BLR19TVUZYfQouZW5k aWYKV1JLRElSX1BLR0ZJTEU9CSR7V1JLRElSfS9wa2cvJHtQS0dOQU1FfSR7UEtHX1NVRlh9Cgoj IFRoZSAibGF0ZXN0IHZlcnNpb24iIGxpbmsgLS0gJHtQS0dOQU1FfSBtaW51cyBldmVydGhpbmcg YWZ0ZXIgdGhlIGxhc3QgJy0nClBLR0xBVEVTVFJFUE9TSVRPUlk/PQkke1BBQ0tBR0VTfS9MYXRl c3QKUEtHQkFTRT89CQkJJHtQS0dOQU1FUFJFRklYfSR7UE9SVE5BTUV9JHtQS0dOQU1FU1VGRklY fQpMQVRFU1RfTElOSz89CQkke1BLR0JBU0V9ClBLR0xBVEVTVEZJTEU9CQkke1BLR0xBVEVTVFJF UE9TSVRPUll9LyR7TEFURVNUX0xJTkt9JHtQS0dfU1VGWH0KCkNPTkZJR1VSRV9TQ1JJUFQ/PQlj b25maWd1cmUKQ09ORklHVVJFX0NNRD89CQkuLyR7Q09ORklHVVJFX1NDUklQVH0KQlVJTERfQVJD SCE9CQkke1VOQU1FfSAtcApDT05GSUdVUkVfVEFSR0VUX0JVSUxEPz0JJHtCVUlMRF9BUkNIfS1w b3J0YmxkLSR7T1BTWVM6dGx9JHtPU1JFTH0KQ09ORklHVVJFX1RBUkdFVF9CVUlMRDo9CSR7Q09O RklHVVJFX1RBUkdFVF9CVUlMRDpTLy0tYnVpbGQ9Ly99CiMuaWYgZGVmaW5lZChYX0JVSUxEX0ZP UikKI0NPTkZJR1VSRV9UQVJHRVRfVEFSR0VUPz0JCSR7QVJDSH0tcG9ydGJsZC0ke09QU1lTOnRs fSR7T1NSRUx9CiNDT05GSUdVUkVfVEFSR0VUX1RBUkdFVDo9CQkke0NPTkZJR1VSRV9UQVJHRVRf VEFSR0VUOlMvLS10YXJnZXQ9Ly99CiMuZW5kaWYKQ09ORklHVVJFX0xPRz89CQljb25maWcubG9n CgojIEEgZGVmYXVsdCBtZXNzYWdlIHRvIHByaW50IGlmIGRvLWNvbmZpZ3VyZSBmYWlscy4KQ09O RklHVVJFX0ZBSUxfTUVTU0FHRT89CSJQbGVhc2UgcmVwb3J0IHRoZSBwcm9ibGVtIHRvICR7TUFJ TlRBSU5FUn0gW21haW50YWluZXJdIGFuZCBhdHRhY2ggdGhlIFwiJHtDT05GSUdVUkVfV1JLU1JD fS8ke0NPTkZJR1VSRV9MT0d9XCIgaW5jbHVkaW5nIHRoZSBvdXRwdXQgb2YgdGhlIGZhaWx1cmUg b2YgeW91ciBtYWtlIGNvbW1hbmQuIEFsc28sIGl0IG1pZ2h0IGJlIGEgZ29vZCBpZGVhIHRvIHBy b3ZpZGUgYW4gb3ZlcnZpZXcgb2YgYWxsIHBhY2thZ2VzIGluc3RhbGxlZCBvbiB5b3VyIHN5c3Rl bSAoZS5nLiBhICR7UEtHX0lORk99IC1FYSkuIgoKLmlmIGRlZmluZWQoR05VX0NPTkZJR1VSRSkK IyBNYXhpbXVtIGNvbW1hbmQgbGluZSBsZW5ndGgKLmlmICFkZWZpbmVkKENPTkZJR1VSRV9NQVhf Q01EX0xFTikKQ09ORklHVVJFX01BWF9DTURfTEVOIT0JJHtTWVNDVEx9IC1uIGtlcm4uYXJnbWF4 Ci5lbmRpZgpHTlVfQ09ORklHVVJFX1BSRUZJWD89CSR7UFJFRklYfQpHTlVfQ09ORklHVVJFX01B TlBSRUZJWD89CSR7TUFOUFJFRklYfQpDT05GSUdfU0lURT89CQkke1BPUlRTRElSfS9UZW1wbGF0 ZXMvY29uZmlnLnNpdGUKQ09ORklHVVJFX0FSR1MrPQktLXByZWZpeD0ke0dOVV9DT05GSUdVUkVf UFJFRklYfSAkJHtfTEFURV9DT05GSUdVUkVfQVJHU30KQ09ORklHVVJFX0VOVis9CQlDT05GSUdf U0lURT0ke0NPTkZJR19TSVRFfSBsdF9jdl9zeXNfbWF4X2NtZF9sZW49JHtDT05GSUdVUkVfTUFY X0NNRF9MRU59CkhBU19DT05GSUdVUkU9CQl5ZXMKClNFVF9MQVRFX0NPTkZJR1VSRV9BUkdTPSBc CiAgICAgX0xBVEVfQ09ORklHVVJFX0FSR1M9IiIgOyBcCglpZiBbIC16ICIke0NPTkZJR1VSRV9B UkdTOk0tLWxvY2Fsc3RhdGVkaXI9KjpRfSIgXSAmJiBcCgkgICAuLyR7Q09ORklHVVJFX1NDUklQ VH0gLS1oZWxwIDI+JjEgfCAke0dSRVB9IC0tIC0tbG9jYWxzdGF0ZWRpciA+IC9kZXYvbnVsbDsg dGhlbiBcCgkgICAgX0xBVEVfQ09ORklHVVJFX0FSR1M9IiQke19MQVRFX0NPTkZJR1VSRV9BUkdT fSAtLWxvY2Fsc3RhdGVkaXI9L3ZhciIgOyBcCglmaSA7IFwKCWlmIFsgISAteiAiYC4vJHtDT05G SUdVUkVfU0NSSVBUfSAtLWhlbHAgMj4mMSB8ICR7R1JFUH0gLS0gJy0tbWFuZGlyJ2AiIF07IHRo ZW4gXAoJICAgIF9MQVRFX0NPTkZJR1VSRV9BUkdTPSIkJHtfTEFURV9DT05GSUdVUkVfQVJHU30g LS1tYW5kaXI9JHtHTlVfQ09ORklHVVJFX01BTlBSRUZJWH0vbWFuIiA7IFwKCWZpIDsgXAoJaWYg WyAhIC16ICJgLi8ke0NPTkZJR1VSRV9TQ1JJUFR9IC0taGVscCAyPiYxIHwgJHtHUkVQfSAtLSAn LS1pbmZvZGlyJ2AiIF07IHRoZW4gXAoJICAgIF9MQVRFX0NPTkZJR1VSRV9BUkdTPSIkJHtfTEFU RV9DT05GSUdVUkVfQVJHU30gLS1pbmZvZGlyPSR7R05VX0NPTkZJR1VSRV9QUkVGSVh9LyR7SU5G T19QQVRIfS8ke0lORk9fU1VCRElSfSIgOyBcCglmaSA7IFwKCWlmIFsgLXogImAuLyR7Q09ORklH VVJFX1NDUklQVH0gLS12ZXJzaW9uIDI+JjEgfCAke0VHUkVQfSAtaSAnKGF1dG9jb25mLioyXC4x M3xVbnJlY29nbml6ZWQgb3B0aW9uKSdgIiBdOyB0aGVuIFwKCQlfTEFURV9DT05GSUdVUkVfQVJH Uz0iJCR7X0xBVEVfQ09ORklHVVJFX0FSR1N9IC0tYnVpbGQ9JHtDT05GSUdVUkVfVEFSR0VUX0JV SUxEfSAtLWhvc3Q9JHtDT05GSUdVUkVfVEFSR0VUfSIgOyBcCgllbHNlIFwKCQlfTEFURV9DT05G SUdVUkVfQVJHUz0iJCR7X0xBVEVfQ09ORklHVVJFX0FSR1N9ICR7Q09ORklHVVJFX1RBUkdFVH0i IDsgXAoJZmkgOwouZW5kaWYKCiMgUGFzc2VkIHRvIG1vc3Qgb2Ygc2NyaXB0IGludm9jYXRpb25z ClNDUklQVFNfRU5WKz0JQ1VSRElSPSR7TUFTVEVSRElSfSBESVNURElSPSR7RElTVERJUn0gXAoJ CSAgV1JLRElSPSR7V1JLRElSfSBXUktTUkM9JHtXUktTUkN9IFBBVENIRElSPSR7UEFUQ0hESVJ9 IFwKCQkgIFNDUklQVERJUj0ke1NDUklQVERJUn0gRklMRVNESVI9JHtGSUxFU0RJUn0gXAoJCSAg UE9SVFNESVI9JHtQT1JUU0RJUn0gUFJFRklYPSR7UFJFRklYfSBMT0NBTEJBU0U9JHtMT0NBTEJB U0V9CgouaWYgZGVmaW5lZChCQVRDSCkKU0NSSVBUU19FTlYrPQlCQVRDSD15ZXMKLmVuZGlmCgou aWYgJHtQUkVGSVh9ID09IC91c3IKTUFOUFJFRklYPz0JL3Vzci9zaGFyZQouZWxzZQpNQU5QUkVG SVg/PQkke1BSRUZJWH0KLmVuZGlmCgpNQU5ESVJTKz0JJHtNQU5QUkVGSVh9L21hbgouZm9yIHNl Y3QgaW4gMSAyIDMgNCA1IDYgNyA4IDkKTUFOJHtzZWN0fVBSRUZJWD89CSR7TUFOUFJFRklYfQou ZW5kZm9yCk1BTkxQUkVGSVg/PQkke01BTlBSRUZJWH0KTUFOTlBSRUZJWD89CSR7TUFOUFJFRklY fQoKLmlmICR7UFJFRklYfSA9PSAvdXNyCklORk9fUEFUSD89CXNoYXJlL2luZm8KLmVsc2UKSU5G T19QQVRIPz0JaW5mbwouZW5kaWYKCi5pZiBkZWZpbmVkKElORk8pClJVTl9ERVBFTkRTKz0JaW5k ZXhpbmZvOiR7UE9SVFNESVJ9L3ByaW50L2luZGV4aW5mbwoKLiBmb3IgRCBpbiAke0lORk86SH0K UkQ6PQkke0R9Ci4gIGlmICR7UkR9ICE9ICIuIgouICAgaWYgIWRlZmluZWQoSU5GT19TVUJESVIp CklORk9fU1VCRElSOj0JJHtSRH0KLiAgIGVsaWYgJHtJTkZPX1NVQkRJUn0gIT0gJHtSRH0KQlJP S0VOPQkJb25seSBvbmUgc3ViZGlyZWN0b3J5IGluIElORk8gaXMgYWxsb3dlZAouICAgZW5kaWYK LiAgZW5kaWYKLnVuZGVmIFJECi4gZW5kZm9yCi5lbmRpZgoKRE9DU0RJUl9SRUw/PQkke0RPQ1NE SVI6UyxeJHtQUkVGSVh9LywsfQpFWEFNUExFU0RJUl9SRUw/PQkke0VYQU1QTEVTRElSOlMsXiR7 UFJFRklYfS8sLH0KREFUQURJUl9SRUw/PQkke0RBVEFESVI6UyxeJHtQUkVGSVh9LywsfQpXV1dE SVJfUkVMPz0JJHtXV1dESVI6UyxeJHtQUkVGSVh9LywsfQpFVENESVJfUkVMPz0JJHtFVENESVI6 UyxeJHtQUkVGSVh9LywsfQoKUExJU1RfU1VCKz0JRE9DU0RJUj0iJHtET0NTRElSX1JFTH0iIFwK CQlFWEFNUExFU0RJUj0iJHtFWEFNUExFU0RJUl9SRUx9IiBcCgkJREFUQURJUj0iJHtEQVRBRElS X1JFTH0iIFwKCQlXV1dESVI9IiR7V1dXRElSX1JFTH0iIFwKCQlFVENESVI9IiR7RVRDRElSX1JF TH0iCgpERVNLVE9QRElSPz0JCSR7UFJFRklYfS9zaGFyZS9hcHBsaWNhdGlvbnMKCi5NQUlOOiBh bGwKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMKIyBNYW55IHdheXMgdG8gZGlzYWJsZSBhIHBvcnQuCiMKIyBJZiB3ZSdyZSBp biBCQVRDSCBtb2RlIGFuZCB0aGUgcG9ydCBpcyBpbnRlcmFjdGl2ZSwgb3Igd2UncmUKIyBpbiBp bnRlcmFjdGl2ZSBtb2RlIGFuZCB0aGUgcG9ydCBpcyBub24taW50ZXJhY3RpdmUsIHNraXAgYWxs CiMgdGhlIGltcG9ydGFudCB0YXJnZXRzLiAgVGhlIHJlYXNvbiB3ZSBoYXZlIHR3byBtb2RlcyBp cyB0aGF0CiMgb25lIG1pZ2h0IHdhbnQgdG8gbGVhdmUgYSBidWlsZCBpbiBCQVRDSCBtb2RlIHJ1 bm5pbmcKIyBvdmVybmlnaHQsIHRoZW4gY29tZSBiYWNrIGluIHRoZSBtb3JuaW5nIGFuZCBkbyBf b25seV8gdGhlCiMgaW50ZXJhY3RpdmUgb25lcyB0aGF0IHJlcXVpcmVkIHlvdXIgaW50ZXJ2ZW50 aW9uLgojCiMgSWdub3JlIHBvcnRzIHRoYXQgY2FuJ3QgYmUgcmVzb2xkIGlmIGJ1aWxkaW5nIGZv ciBhIENEUk9NLgojCiMgRG9uJ3QgYnVpbGQgYSBwb3J0IGlmIGl0J3MgcmVzdHJpY3RlZCBhbmQg d2UgZG9uJ3Qgd2FudCB0byBnZXQKIyBpbnRvIHRoYXQuCiMKIyBEb24ndCBidWlsZCBhIHBvcnQg aWYgaXQncyBicm9rZW4sIHVubGVzcyB3ZSdyZSBydW5uaW5nIGEgcGFyYWxsZWwKIyBidWlsZCAo aW4gY2FzZSBpdCdzIGZpeGVkKS4KIwojIERvbid0IGJ1aWxkIGEgcG9ydCBpZiBpdCdzIGZvcmJp ZGRlbiBmb3Igd2hhdGV2ZXIgcmVhc29uLgojCiMgRG9uJ3QgYnVpbGQgYSBwb3J0IGlmIHRoZSBz eXN0ZW0gaXMgdG9vIG9sZC4KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIyBDaGVjayB0aGUgbWFjaGluZSBhcmNoaXRlY3R1 cmVzCi5pZiBkZWZpbmVkKE9OTFlfRk9SX0FSQ0hTKQouZm9yIF9fQVJDSCBpbiAke09OTFlfRk9S X0FSQ0hTfQouaWYgJHtBUkNIOk0ke19fQVJDSH19ICE9ICIiCl9fQVJDSF9PSz89CQkxCi5lbmRp ZgouZW5kZm9yCi5lbHNlCl9fQVJDSF9PSz89CQkxCi5lbmRpZgoKLmlmIGRlZmluZWQoTk9UX0ZP Ul9BUkNIUykKLmZvciBfX05BUkNIIGluICR7Tk9UX0ZPUl9BUkNIU30KLmlmICR7QVJDSDpNJHtf X05BUkNIfX0gIT0gIiIKLnVuZGVmIF9fQVJDSF9PSwouZW5kaWYKLmVuZGZvcgouZW5kaWYKCi5p ZiAhZGVmaW5lZChfX0FSQ0hfT0spCi5pZiBkZWZpbmVkKE9OTFlfRk9SX0FSQ0hTKQpJR05PUkU9 CQlpcyBvbmx5IGZvciAke09OTFlfRk9SX0FSQ0hTfSwKLmVsc2UgIyBkZWZpbmVkKE5PVF9GT1Jf QVJDSFMpCklHTk9SRT0JCWRvZXMgbm90IHJ1biBvbiAke05PVF9GT1JfQVJDSFN9LAouZW5kaWYK SUdOT1JFKz0Jd2hpbGUgeW91IGFyZSBydW5uaW5nICR7QVJDSH0KCi5pZiBkZWZpbmVkKE9OTFlf Rk9SX0FSQ0hTX1JFQVNPTl8ke0FSQ0h9KQpJR05PUkUrPQkocmVhc29uOiAke09OTFlfRk9SX0FS Q0hTX1JFQVNPTl8ke0FSQ0h9fSkKLmVsaWYgZGVmaW5lZChPTkxZX0ZPUl9BUkNIU19SRUFTT04p CklHTk9SRSs9CShyZWFzb246ICR7T05MWV9GT1JfQVJDSFNfUkVBU09OfSkKLmVuZGlmCgouaWYg ZGVmaW5lZChOT1RfRk9SX0FSQ0hTX1JFQVNPTl8ke0FSQ0h9KQpJR05PUkUrPQkocmVhc29uOiAk e05PVF9GT1JfQVJDSFNfUkVBU09OXyR7QVJDSH19KQouZWxpZiBkZWZpbmVkKE5PVF9GT1JfQVJD SFNfUkVBU09OKQpJR05PUkUrPQkocmVhc29uOiAke05PVF9GT1JfQVJDSFNfUkVBU09OfSkKLmVu ZGlmCgouZW5kaWYKCiMgQ2hlY2sgdGhlIHVzZXIgaW50ZXJhY3Rpb24gYW5kIGxlZ2FsIGlzc3Vl cwouaWYgIWRlZmluZWQoTk9fSUdOT1JFKQouaWYgKGRlZmluZWQoSVNfSU5URVJBQ1RJVkUpICYm IGRlZmluZWQoQkFUQ0gpKQpJR05PUkU9CQlpcyBhbiBpbnRlcmFjdGl2ZSBwb3J0Ci5lbGlmICgh ZGVmaW5lZChJU19JTlRFUkFDVElWRSkgJiYgZGVmaW5lZChJTlRFUkFDVElWRSkpCklHTk9SRT0J CWlzIG5vdCBhbiBpbnRlcmFjdGl2ZSBwb3J0Ci5lbGlmIChkZWZpbmVkKE5PX0NEUk9NKSAmJiBk ZWZpbmVkKEZPUl9DRFJPTSkpCklHTk9SRT0JCW1heSBub3QgYmUgcGxhY2VkIG9uIGEgQ0RST006 ICR7Tk9fQ0RST019Ci5lbGlmIChkZWZpbmVkKFJFU1RSSUNURUQpICYmIGRlZmluZWQoTk9fUkVT VFJJQ1RFRCkpCklHTk9SRT0JCWlzIHJlc3RyaWN0ZWQ6ICR7UkVTVFJJQ1RFRH0KLmVsaWYgKGRl ZmluZWQoTk9fUEFDS0FHRSkgJiYgZGVmaW5lZChQQUNLQUdFX0JVSUxESU5HKSkKSUdOT1JFPQkJ bWF5IG5vdCBiZSBwYWNrYWdlZDogJHtOT19QQUNLQUdFfQouZWxpZiBkZWZpbmVkKEJST0tFTikK LmlmICFkZWZpbmVkKFRSWUJST0tFTikKSUdOT1JFPQkJaXMgbWFya2VkIGFzIGJyb2tlbjogJHtC Uk9LRU59Ci5lbmRpZgouZWxpZiBkZWZpbmVkKEJST0tFTl8ke0FSQ0h9KQouaWYgIWRlZmluZWQo VFJZQlJPS0VOKQpJR05PUkU9CQlpcyBtYXJrZWQgYXMgYnJva2VuIG9uICR7QVJDSH06ICR7QlJP S0VOXyR7QVJDSH19Ci5lbmRpZgouZWxpZiBkZWZpbmVkKEJST0tFTl8ke09QU1lTfV8ke09TUkVM OlJ9KQouaWYgIWRlZmluZWQoVFJZQlJPS0VOKQpJR05PUkU9CQlpcyBtYXJrZWQgYXMgYnJva2Vu IG9uICR7T1BTWVN9ICR7T1NSRUx9OiAke0JST0tFTl8ke09QU1lTfV8ke09TUkVMOlJ9fQouZW5k aWYKLmVsaWYgZGVmaW5lZChCUk9LRU5fJHtPUFNZU31fJHtPU1JFTDpSfV8ke0FSQ0h9KQouaWYg IWRlZmluZWQoVFJZQlJPS0VOKQpJR05PUkU9CQlpcyBtYXJrZWQgYXMgYnJva2VuIG9uICR7T1BT WVN9ICR7T1NSRUx9ICR7QVJDSH06ICR7QlJPS0VOXyR7T1BTWVN9XyR7T1NSRUw6Un1fJHtBUkNI fX0KLmVuZGlmCi5lbGlmIGRlZmluZWQoQlJPS0VOXyR7T1BTWVN9KQouaWYgIWRlZmluZWQoVFJZ QlJPS0VOKQpJR05PUkU9CQlpcyBtYXJrZWQgYXMgYnJva2VuIG9uICR7T1BTWVN9OiAke0JST0tF Tl8ke09QU1lTfX0KLmVuZGlmCi5lbGlmIGRlZmluZWQoRk9SQklEREVOKQpJR05PUkU9CQlpcyBm b3JiaWRkZW46ICR7Rk9SQklEREVOfQouZW5kaWYKCiMgRGVmaW5lIHRoZSB0ZXh0IHRvIGJlIG91 dHB1dCB0byBMRUdBTAouaWYgZGVmaW5lZChMRUdBTF9URVhUKQpMRUdBTD0gJHtMRUdBTF9URVhU fQouZWxpZiBkZWZpbmVkKFJFU1RSSUNURUQpCkxFR0FMPSAke1JFU1RSSUNURUR9Ci5lbGlmIGRl ZmluZWQoTk9fQ0RST00pCkxFR0FMPSAke05PX0NEUk9NfQouZWxpZiBkZWZpbmVkKE5PX1BBQ0tB R0UpICYmICEgZGVmaW5lZChMRUdBTF9QQUNLQUdFKQpMRUdBTD0gJHtOT19QQUNLQUdFfQouZW5k aWYKCi5pZiAoZGVmaW5lZChNQU5VQUxfUEFDS0FHRV9CVUlMRCkgJiYgZGVmaW5lZChQQUNLQUdF X0JVSUxESU5HKSkKSUdOT1JFPQkJaGFzIHRvIGJlIGJ1aWx0IG1hbnVhbGx5OiAke01BTlVBTF9Q QUNLQUdFX0JVSUxEfQpjbGVhbjoKCUAke0lHTk9SRUNNRH0KLmVuZGlmCgouaWYgZGVmaW5lZChJ R05PUkUpCi5pZiBkZWZpbmVkKElHTk9SRV9TSUxFTlQpCklHTk9SRUNNRD0JJHtET19OQURBfQou ZWxzZQpJR05PUkVDTUQ9CSR7RUNIT19NU0d9ICI9PT0+ICAke1BLR05BTUV9ICIke0lHTk9SRTpR fS47ZXhpdCAxCi5lbmRpZgoKX1RBUkdFVFM9CWNoZWNrLXNhbml0eSBmZXRjaCBjaGVja3N1bSBl eHRyYWN0IHBhdGNoIGNvbmZpZ3VyZSBhbGwgYnVpbGQgXAoJCQlpbnN0YWxsIHJlaW5zdGFsbCBw YWNrYWdlIHN0YWdlIHJlc3RhZ2UKCi5mb3IgdGFyZ2V0IGluICR7X1RBUkdFVFN9Ci5pZiAhdGFy Z2V0KCR7dGFyZ2V0fSkKJHt0YXJnZXR9OgoJQCR7SUdOT1JFQ01EfQouaWYgZGVmaW5lZChJTlNU QUxMU19ERVBFTkRTKQoJQCR7RkFMU0V9Ci5lbmRpZgouZW5kaWYKLmVuZGZvcgoKLmVuZGlmCgou ZW5kaWYKCi5pZiBkZWZpbmVkKElHTk9SRSkgfHwgZGVmaW5lZChOT19QQUNLQUdFKQppZ25vcmVs aXN0OiBwYWNrYWdlLW5hbWUKLmVsc2UKaWdub3JlbGlzdDoKCUAke0RPX05BREF9Ci5lbmRpZgoK LmlmIGRlZmluZWQoSUdOT1JFKSB8fCBkZWZpbmVkKE5PX1BBQ0tBR0UpCmlnbm9yZWxpc3QtdmVy Ym9zZToKLmlmIGRlZmluZWQoSUdOT1JFKQoJQCR7RUNIT19DTUR9ICIke1BLR05BTUV9fElHTk9S RTogIiR7SUdOT1JFOlF9Ci5lbHNlCglAJHtFQ0hPX0NNRH0gIiR7UEtHTkFNRX18Tk9fUEFDS0FH RTogIiR7Tk9fUEFDS0FHRTpRfQouZW5kaWYKLmVsc2UKaWdub3JlbGlzdC12ZXJib3NlOgoJQCR7 RE9fTkFEQX0KLmVuZGlmCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgQ2xlYW4gZGlyZWN0b3JpZXMgZm9yIGZ0cCBvciBD RFJPTS4KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIwoKLmlmICFkZWZpbmVkKExJQ0VOU0UpCgouaWYgZGVmaW5lZChSRVNUUklD VEVEKQpjbGVhbi1yZXN0cmljdGVkOglkZWxldGUtZGlzdGZpbGVzIGRlbGV0ZS1wYWNrYWdlCmNs ZWFuLXJlc3RyaWN0ZWQtbGlzdDogZGVsZXRlLWRpc3RmaWxlcy1saXN0IGRlbGV0ZS1wYWNrYWdl LWxpc3QKUkVTVFJJQ1RFRF9GSUxFUz89CSR7X0RJU1RGSUxFU30gJHtfUEFUQ0hGSUxFU30KLmVs c2UKY2xlYW4tcmVzdHJpY3RlZDoKY2xlYW4tcmVzdHJpY3RlZC1saXN0OgouZW5kaWYKCi5pZiBk ZWZpbmVkKE5PX0NEUk9NKQpjbGVhbi1mb3ItY2Ryb206CWRlbGV0ZS1kaXN0ZmlsZXMgZGVsZXRl LXBhY2thZ2UKY2xlYW4tZm9yLWNkcm9tLWxpc3Q6CWRlbGV0ZS1kaXN0ZmlsZXMtbGlzdCBkZWxl dGUtcGFja2FnZS1saXN0ClJFU1RSSUNURURfRklMRVM/PQkke19ESVNURklMRVN9ICR7X1BBVENI RklMRVN9Ci5lbHNlCmNsZWFuLWZvci1jZHJvbToKY2xlYW4tZm9yLWNkcm9tLWxpc3Q6Ci5lbmRp ZgoKLmVuZGlmICMgIWRlZmluZWQoTElDRU5TRSkKCi5pZiBkZWZpbmVkKEFMTF9IT09LKQphbGw6 CglAY2QgJHsuQ1VSRElSfSAmJiAke1NFVEVOVn0gQ1VSRElSPSR7LkNVUkRJUn0gRElTVE5BTUU9 JHtESVNUTkFNRX0gXAoJICBESVNURElSPSR7RElTVERJUn0gV1JLRElSPSR7V1JLRElSfSBXUktT UkM9JHtXUktTUkN9IFwKCSAgUEFUQ0hESVI9JHtQQVRDSERJUn0gU0NSSVBURElSPSR7U0NSSVBU RElSfSBcCgkgIEZJTEVTRElSPSR7RklMRVNESVJ9IFBPUlRTRElSPSR7UE9SVFNESVJ9IFBSRUZJ WD0ke1BSRUZJWH0gXAoJICBCVUlMRF9ERVBFTkRTPSIke0JVSUxEX0RFUEVORFN9IiBSVU5fREVQ RU5EUz0iJHtSVU5fREVQRU5EU30iIFwKCSAgQ09ORkxJQ1RTPSIke0NPTkZMSUNUU30iIFwKCSR7 QUxMX0hPT0t9Ci5lbmRpZgoKLmlmICF0YXJnZXQoYWxsKQphbGw6IHN0YWdlCi5lbmRpZgoKLmlm ICFkZWZpbmVkKERFUEVORFNfVEFSR0VUKQouaWYgZGVmaW5lZChERVBFTkRTX1BSRUNMRUFOKQpE RVBFTkRTX1RBUkdFVD0JY2xlYW4KREVQRU5EU19BUkdTPQlOT0NMRUFOREVQRU5EUz15ZXMKLmVu ZGlmCi5pZiBtYWtlKHJlaW5zdGFsbCkKREVQRU5EU19UQVJHRVQrPQlyZWluc3RhbGwKLmVsc2UK REVQRU5EU19UQVJHRVQrPQlpbnN0YWxsCi5lbmRpZgouaWYgZGVmaW5lZChERVBFTkRTX0NMRUFO KQpERVBFTkRTX1RBUkdFVCs9CWNsZWFuCkRFUEVORFNfQVJHUys9CU5PQ0xFQU5ERVBFTkRTPXll cwouZW5kaWYKLmVuZGlmCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMKIyBEbyBwcmVsaW1pbmFyeSB3b3JrIHRvIGRldGVj dCBpZiB3ZSBuZWVkIHRvIHJ1biB0aGUgY29uZmlnCiMgdGFyZ2V0IG9yIG5vdC4KIwojIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj Ci5pZiAoKCFkZWZpbmVkKE9QVElPTlNfREVGSU5FKSAmJiAhZGVmaW5lZChPUFRJT05TX1NJTkdM RSkgJiYgIWRlZmluZWQoT1BUSU9OU19NVUxUSSkpIFwKCSYmICFkZWZpbmVkKE9QVElPTlNfR1JP VVApICYmICFkZWZpbmVkKE9QVElPTlNfUkFESU8pIFwKCXx8IGRlZmluZWQoQ09ORklHX0RPTkVf JHtVTklRVUVOQU1FOnR1fSkgfHwgXAoJZGVmaW5lZChQQUNLQUdFX0JVSUxESU5HKSB8fCBkZWZp bmVkKEJBVENIKSkKX09QVElPTlNfT0s9eWVzCi5lbmRpZgoKIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFRoZSBmb2xsb3dp bmcgYXJlIHVzZWQgdG8gY3JlYXRlIGVhc3kgZHVtbXkgdGFyZ2V0cyBmb3IKIyBkaXNhYmxpbmcg c29tZSBiaXQgb2YgZGVmYXVsdCB0YXJnZXQgYmVoYXZpb3IgeW91IGRvbid0IHdhbnQuCiMgVGhl eSBzdGlsbCBjaGVjayB0byBzZWUgaWYgdGhlIHRhcmdldCBleGlzdHMsIGFuZCBpZiBzbyBkb24n dAojIGRvIGFueXRoaW5nLCBzaW5jZSB5b3UgbWlnaHQgd2FudCB0byBzZXQgdGhpcyBnbG9iYWxs eSBmb3IgYQojIGdyb3VwIG9mIHBvcnRzIGluIGEgTWFrZWZpbGUuaW5jLCBidXQgc3RpbGwgYmUg YWJsZSB0bwojIG92ZXJyaWRlIGZyb20gYW4gaW5kaXZpZHVhbCBNYWtlZmlsZS4KIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoK IyBEaXNhYmxlIGNoZWNrc3VtCi5pZiBkZWZpbmVkKE5PX0NIRUNLU1VNKSAmJiAhdGFyZ2V0KGNo ZWNrc3VtKQpjaGVja3N1bTogZmV0Y2gKCUAke0RPX05BREF9Ci5lbmRpZgoKIyBEaXNhYmxlIGJ1 aWxkCi5pZiBkZWZpbmVkKE5PX0JVSUxEKSAmJiAhdGFyZ2V0KGJ1aWxkKQpidWlsZDogY29uZmln dXJlCglAJHtUT1VDSH0gJHtUT1VDSF9GTEFHU30gJHtCVUlMRF9DT09LSUV9Ci5lbmRpZgoKIyBE aXNhYmxlIHBhY2thZ2UKLmlmIGRlZmluZWQoTk9fUEFDS0FHRSkgJiYgIXRhcmdldChwYWNrYWdl KQpwYWNrYWdlOgouaWYgZGVmaW5lZChJR05PUkVfU0lMRU5UKQoJQCR7RE9fTkFEQX0KLmVsc2UK CUAke0VDSE9fTVNHfSAiPT09PiAgJHtQS0dOQU1FfSBtYXkgbm90IGJlIHBhY2thZ2VkOiAiJHtO T19QQUNLQUdFOlF9LgouZW5kaWYKLmVuZGlmCgojIERpc2FibGUgZGVzY3JpYmUKLmlmIGRlZmlu ZWQoTk9fREVTQ1JJQkUpICYmICF0YXJnZXQoZGVzY3JpYmUpCmRlc2NyaWJlOgoJQCR7RE9fTkFE QX0KLmVuZGlmCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjCiMgTW9yZSBzdGFuZGFyZCB0YXJnZXRzIHN0YXJ0IGhlcmUuCiMK IyBUaGVzZSBhcmUgdGhlIGJvZHkgb2YgdGhlIGJ1aWxkL2luc3RhbGwgZnJhbWV3b3JrLiAgSWYg eW91IGFyZQojIG5vdCBoYXBweSB3aXRoIHRoZSBkZWZhdWx0IGFjdGlvbnMsIGFuZCB5b3UgY2Fu J3Qgc29sdmUgaXQgYnkKIyBhZGRpbmcgcHJlLSogb3IgcG9zdC0qIHRhcmdldHMvc2NyaXB0cywg b3ZlcnJpZGUgdGhlc2UuCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiMgUHJlLWV2ZXJ5dGhpbmcKCnByZS1ldmVyeXRoaW5n OjoKCUAke0RPX05BREF9CgouaWYgZGVmaW5lZChUUllCUk9LRU4pICYmIGRlZmluZWQoQlJPS0VO KQpidWlsZGFueXdheS1tZXNzYWdlOgoJQCR7RUNIT19NU0d9ICJUcnlpbmcgYnVpbGQgb2YgJHtQ S0dOQU1FfSBldmVuIHRob3VnaCBpdCBpcyBtYXJrZWQgQlJPS0VOLiIKLmVuZGlmCgpvcHRpb25z LW1lc3NhZ2U6Ci5pZiBkZWZpbmVkKEdOT01FX09QVElPTl9NU0cpICYmICghZGVmaW5lZChQQUNL QUdFX0JVSUxESU5HKSB8fCAhZGVmaW5lZChCQVRDSCkpCglAZm9yIG0gaW4gJHtHTk9NRV9PUFRJ T05fTVNHfTsgZG8gXAoJCSR7RUNIT19NU0d9ICQkbTsgXAoJZG9uZQouZWxzZQoJQCR7RE9fTkFE QX0KLmVuZGlmCi5pZiBkZWZpbmVkKF9PUFRJT05TX1JFQUQpCglAJHtFQ0hPX01TR30gIj09PT4g IEZvdW5kIHNhdmVkIGNvbmZpZ3VyYXRpb24gZm9yICR7X09QVElPTlNfUkVBRH0iCi5lbmRpZgoK JHtQS0dfREJESVJ9ICR7UFJFRklYfSAke1dSS0RJUn0gJHtXUktTUkN9OgoJQCR7TUtESVJ9ICR7 LlRBUkdFVH0KCiMgV2FybiB1c2VyIGFib3V0IGRlcHJlY2F0ZWQgcGFja2FnZXMuICBBZHZpc29y eSBvbmx5LgoKLmlmICF0YXJnZXQoY2hlY2stZGVwcmVjYXRlZCkKY2hlY2stZGVwcmVjYXRlZDoK LmlmIGRlZmluZWQoREVQUkVDQVRFRCkKCUAke0VDSE9fTVNHfSAiPT09PiAgIE5PVElDRToiCglA JHtFQ0hPX01TR30KCUAke0VDSE9fTVNHfSAiVGhpcyBwb3J0IGlzIGRlcHJlY2F0ZWQ7IHlvdSBt YXkgd2lzaCB0byByZWNvbnNpZGVyIGluc3RhbGxpbmcgaXQ6IgoJQCR7RUNIT19NU0d9CglAJHtF Q0hPX01TR30gJHtERVBSRUNBVEVEOlF9LgoJQCR7RUNIT19NU0d9Ci5pZiBkZWZpbmVkKEVYUElS QVRJT05fREFURSkKCUAke0VDSE9fTVNHfSAiSXQgaXMgc2NoZWR1bGVkIHRvIGJlIHJlbW92ZWQg b24gb3IgYWZ0ZXIgJHtFWFBJUkFUSU9OX0RBVEV9LiIKCUAke0VDSE9fTVNHfQouZW5kaWYKLmVu ZGlmCi5lbmRpZgoKIyBDaGVjayBpZiB0aGUgcG9ydCBpcyBsaXN0ZWQgaW4gdGhlIHZ1bG5lcmFi aWxpdHkgZGF0YWJhc2UKCkFVRElURklMRT89CQkke1BLR19EQkRJUn0vdnVsbi54bWwKX0VYVFJB Q1RfQVVESVRGSUxFPQkke0NBVH0gIiR7QVVESVRGSUxFfSIKCmNoZWNrLXZ1bG5lcmFibGU6Ci5p ZiAhZGVmaW5lZChESVNBQkxFX1ZVTE5FUkFCSUxJVElFUykgJiYgIWRlZmluZWQoUEFDS0FHRV9C VUlMRElORykKCUBpZiBbIC1mICIke0FVRElURklMRX0iIF07IHRoZW4gXAoJCWlmIFsgLXggIiR7 UEtHX0JJTn0iIF07IHRoZW4gXAoJCQl2bGlzdD1gJHtQS0dfQklOfSBhdWRpdCAiJHtQS0dOQU1F fSIgfHwgOmA7IFwKCQkJaWYgWyAiJCR7dmxpc3R9IiA9ICIwIHByb2JsZW0ocykgaW4gdGhlIGlu c3RhbGxlZCBwYWNrYWdlcyBmb3VuZC4iIF07IHRoZW4gXAoJCQkJdmxpc3Q9IiI7IFwKCQkJZmk7 IFwKCQllbGlmIFsgIiR7UE9SVE5BTUV9IiA9ICJwa2ciIF07IHRoZW4gXAoJCQl2bGlzdD0iIjsg XAoJCWZpOyBcCgkJaWYgWyAtbiAiJCR2bGlzdCIgXTsgdGhlbiBcCgkJCSR7RUNIT19NU0d9ICI9 PT0+ICAke1BLR05BTUV9IGhhcyBrbm93biB2dWxuZXJhYmlsaXRpZXM6IjsgXAoJCQkke0VDSE9f TVNHfSAiJCR2bGlzdCI7IFwKCQkJJHtFQ0hPX01TR30gIj0+IFBsZWFzZSB1cGRhdGUgeW91ciBw b3J0cyB0cmVlIGFuZCB0cnkgYWdhaW4uIjsgXAoJCQkke0VDSE9fTVNHfSAiPT4gTm90ZTogVnVs bmVyYWJsZSBwb3J0cyBhcmUgbWFya2VkIGFzIHN1Y2ggZXZlbiBpZiB0aGVyZSBpcyBubyB1cGRh dGUgYXZhaWxhYmxlLiI7IFwKCQkJJHtFQ0hPX01TR30gIj0+IElmIHlvdSB3aXNoIHRvIGlnbm9y ZSB0aGlzIHZ1bG5lcmFiaWxpdHkgcmVidWlsZCB3aXRoICdtYWtlIERJU0FCTEVfVlVMTkVSQUJJ TElUSUVTPXllcyciOyBcCgkJCWV4aXQgMTsgXAoJCWZpOyBcCglmaQouZW5kaWYKCiMgc2V0IGFs ZyB0byBhbnkgb2YgU0laRSwgU0hBMjU2IChvciBhbnkgb3RoZXIgY2hlY2tzdW0gYWxnb3JpdGht KToKRElTVElORk9fREFUQT89CWlmIFsgXCggLW4gIiR7RElTQUJMRV9TSVpFfSIgLWEgLW4gIiR7 Tk9fQ0hFQ0tTVU19IiBcKSAtbyAhIC1mICIke0RJU1RJTkZPX0ZJTEV9IiBdOyB0aGVuIGV4aXQ7 IGZpOyBcCglESVI9JHtESVNUX1NVQkRJUn07ICR7QVdLfSAtdiBhbGc9JCRhbGcgLXYgZmlsZT0k JHtESVI6KyQkRElSL30kJHtmaWxlfQlcCgkJJyQkMSA9PSBhbGcgJiYgJCQyID09ICIoIiBmaWxl ICIpIiB7cHJpbnQgJCQ0fScgJHtESVNUSU5GT19GSUxFfQoKIyBGZXRjaAoKLmlmICF0YXJnZXQo ZG8tZmV0Y2gpCmRvLWZldGNoOgoJQCR7TUtESVJ9ICR7X0RJU1RESVJ9CglAY2QgJHtfRElTVERJ Un07XAoJJHtfTUFTVEVSX1NJVEVTX0VOVn0gOyBcCglmb3IgX2ZpbGUgaW4gJHtESVNURklMRVN9 OyBkbyBcCgkJZmlsZT0kJHtfZmlsZSUlOip9OyBcCgkJaWYgWyAkJF9maWxlID0gJCRmaWxlIF07 IHRoZW4JXAoJCQlzZWxlY3Q9Jyc7CVwKCQllbHNlCVwKCQkJc2VsZWN0PWAke0VDSE9fQ01EfSAk JHtfZmlsZSMjKjp9IHwgJHtTRUR9IC1lICdzLywvIC9nJ2AgOwlcCgkJZmk7CVwKCQlmb3JjZV9m ZXRjaD1mYWxzZTsgXAoJCWZpbGViYXNlbmFtZT0kJHtmaWxlIyMqL307IFwKCQlmb3IgYWZpbGUg aW4gJHtGT1JDRV9GRVRDSH07IGRvIFwKCQkJYWZpbGU9JCR7YWZpbGUjIyovfTsgXAoJCQlpZiBb ICJ4JCRhZmlsZSIgPSAieCQkZmlsZWJhc2VuYW1lIiBdOyB0aGVuIFwKCQkJCWZvcmNlX2ZldGNo PXRydWU7IFwKCQkJZmk7IFwKCQlkb25lOyBcCgkJaWYgWyAhIC1mICQkZmlsZSAtYSAhIC1mICQk ZmlsZWJhc2VuYW1lIC1vICIkJGZvcmNlX2ZldGNoIiA9ICJ0cnVlIiBdOyB0aGVuIFwKCQkJaWYg WyAtTCAkJGZpbGUgLW8gLUwgJCRmaWxlYmFzZW5hbWUgXTsgdGhlbiBcCgkJCQkke0VDSE9fTVNH fSAiPT4gJHtfRElTVERJUn0vJCRmaWxlIGlzIGEgYnJva2VuIHN5bWxpbmsuIjsgXAoJCQkJJHtF Q0hPX01TR30gIj0+IFBlcmhhcHMgYSBmaWxlc3lzdGVtIChtb3N0IGxpa2VseSBhIENEKSBpc24n dCBtb3VudGVkPyI7IFwKCQkJCSR7RUNIT19NU0d9ICI9PiBQbGVhc2UgY29ycmVjdCB0aGlzIHBy b2JsZW0gYW5kIHRyeSBhZ2Fpbi4iOyBcCgkJCQlleGl0IDE7IFwKCQkJZmk7IFwKCQkJaWYgWyAt ZiAke0RJU1RJTkZPX0ZJTEV9IC1hICJ4JHtOT19DSEVDS1NVTX0iID0gIngiIF07IHRoZW4gXAoJ CQkJX3NoYTI1NnN1bT1gYWxnPVNIQTI1NjsgJHtESVNUSU5GT19EQVRBfWA7IFwKCQkJCWlmIFsg LXogIiQkX3NoYTI1NnN1bSIgXTsgdGhlbiBcCgkJCQkJJHtFQ0hPX01TR30gIj0+ICQke0RJUjor JCRESVIvfSQkZmlsZSBpcyBub3QgaW4gJHtESVNUSU5GT19GSUxFfS4iOyBcCgkJCQkJJHtFQ0hP X01TR30gIj0+IEVpdGhlciAke0RJU1RJTkZPX0ZJTEV9IGlzIG91dCBvZiBkYXRlLCBvciI7IFwK CQkJCQkke0VDSE9fTVNHfSAiPT4gJCR7RElSOiskJERJUi99JCRmaWxlIGlzIHNwZWxsZWQgaW5j b3JyZWN0bHkuIjsgXAoJCQkJCWV4aXQgMTsgXAoJCQkJZmk7IFwKCQkJZmk7IFwKCQkJJHtFQ0hP X01TR30gIj0+ICQkZmlsZSBkb2Vzbid0IHNlZW0gdG8gZXhpc3QgaW4gJHtfRElTVERJUn0uIjsg XAoJCQlpZiBbICEgLXcgJHtfRElTVERJUn0gXTsgdGhlbiBcCgkJCSAgICR7RUNIT19NU0d9ICI9 PiAke19ESVNURElSfSBpcyBub3Qgd3JpdGFibGUgYnkgeW91OyBjYW5ub3QgZmV0Y2guIjsgXAoJ CQkgICBleGl0IDE7IFwKCQkJZmk7IFwKCQkJaWYgWyAhIC16ICIkJHNlbGVjdCIgXSA7IHRoZW4g XAoJCQkJX19NQVNURVJfU0lURVNfVE1QPSA7IFwKCQkJCWZvciBncm91cCBpbiAkJHNlbGVjdDsg ZG8gXAoJCQkJCWlmIFsgISAteiBcJCR7X01BU1RFUl9TSVRFU18kJHtncm91cH19IF0gOyB0aGVu IFwKCQkJCQkJZXZhbCBfX19NQVNURVJfU0lURVNfVE1QPSJcJCR7X01BU1RFUl9TSVRFU18kJHtn cm91cH19IiA7IFwKCQkJCQkJX19NQVNURVJfU0lURVNfVE1QPSIkJHtfX01BU1RFUl9TSVRFU19U TVB9ICQke19fX01BU1RFUl9TSVRFU19UTVB9IiA7IFwKCQkJCQlmaTsgXAoJCQkJZG9uZTsgXAoJ CQkJX19fTUFTVEVSX1NJVEVTX1RNUD0gOyBcCgkJCQlTT1JURURfTUFTVEVSX1NJVEVTX0NNRF9U TVA9IiR7RUNIT19DTUR9ICR7X01BU1RFUl9TSVRFX09WRVJSSURFfSBgJHtFQ0hPX0NNRH0gJCR7 X19NQVNURVJfU0lURVNfVE1QfSB8ICR7QVdLfSAnJHtNQVNURVJfU09SVF9BV0s6U3xcXHxcXFxc fGd9J2AgJHtfTUFTVEVSX1NJVEVfQkFDS1VQfSIgOyBcCgkJCWVsc2UgXAoJCQkJU09SVEVEX01B U1RFUl9TSVRFU19DTURfVE1QPSIke1NPUlRFRF9NQVNURVJfU0lURVNfREVGQVVMVF9DTUR9IiA7 IFwKCQkJZmk7IFwKCQkJc2l0ZXNfcmVtYWluaW5nPTA7IFwKCQkJc2l0ZXM9ImBldmFsICQkU09S VEVEX01BU1RFUl9TSVRFU19DTURfVE1QICR7X1JBTkRPTUlaRV9TSVRFU31gIjsgXAoJCQlmb3Ig c2l0ZSBpbiAkJHtzaXRlc307IGRvIFwKCQkJCXNpdGVzX3JlbWFpbmluZz0kJCgoJCR7c2l0ZXNf cmVtYWluaW5nfSArIDEpKTsgXAoJCQlkb25lOyBcCgkJCWZvciBzaXRlIGluICQke3NpdGVzfTsg ZG8gXAoJCQkJc2l0ZXNfcmVtYWluaW5nPSQkKCgkJHtzaXRlc19yZW1haW5pbmd9IC0gMSkpOyBc CgkJCSAgICAke0VDSE9fTVNHfSAiPT4gQXR0ZW1wdGluZyB0byBmZXRjaCAkJHtzaXRlfSQke2Zp bGV9IjsgXAoJCQkJQ0tTSVpFPWBhbGc9U0laRTsgJHtESVNUSU5GT19EQVRBfWA7IFwKCQkJCWNh c2UgJCR7ZmlsZX0gaW4gXAoJCQkJKi8qKQkke01LRElSfSAkJHtmaWxlJS8qfTsgXAoJCQkJCQlh cmdzPSItbyAkJHtmaWxlfSAkJHtzaXRlfSQke2ZpbGV9Ijs7IFwKCQkJCSopCQlhcmdzPSQke3Np dGV9JCR7ZmlsZX07OyBcCgkJCQllc2FjOyBcCgkJCQlpZiAke1NFVEVOVn0gJHtGRVRDSF9FTlZ9 ICR7RkVUQ0hfQ01EfSAke0ZFVENIX0JFRk9SRV9BUkdTfSAkJHthcmdzfSAke0ZFVENIX0FGVEVS X0FSR1N9OyB0aGVuIFwKCQkJCQlhY3R1YWxfc2l6ZT1gc3RhdCAtZiAleiAiJCR7ZmlsZX0iYDsg XAoJCQkJCWlmIFsgLW4gIiR7RElTQUJMRV9TSVpFfSIgXSB8fCBbIC16ICIkJHtDS1NJWkV9IiBd IHx8IFsgJCR7YWN0dWFsX3NpemV9IC1lcSAkJHtDS1NJWkV9IF07IHRoZW4gXAoJCQkJCQljb250 aW51ZSAyOyBcCgkJCQkJZWxzZSBcCgkJCQkJCSR7RUNIT19NU0d9ICI9PiBGZXRjaGVkIGZpbGUg c2l6ZSBtaXNtYXRjaCAoZXhwZWN0ZWQgJCR7Q0tTSVpFfSwgYWN0dWFsICQke2FjdHVhbF9zaXpl fSkiOyBcCgkJCQkJCWlmIFsgJCR7c2l0ZXNfcmVtYWluaW5nfSAtZ3QgMCBdOyB0aGVuIFwKCQkJ CQkJCSR7RUNIT19NU0d9ICI9PiBUcnlpbmcgbmV4dCBzaXRlIjsgXAoJCQkJCQkJJHtSTX0gLWYg JCR7ZmlsZX07IFwKCQkJCQkJZmk7IFwKCQkJCQlmaTsgXAoJCQkJZmk7IFwKCQkJZG9uZTsgXAoJ CQkke0VDSE9fTVNHfSAiPT4gQ291bGRuJ3QgZmV0Y2ggaXQgLSBwbGVhc2UgdHJ5IHRvIHJldHJp ZXZlIHRoaXMiO1wKCQkJJHtFQ0hPX01TR30gIj0+IHBvcnQgbWFudWFsbHkgaW50byAke19ESVNU RElSfSBhbmQgdHJ5IGFnYWluLiI7IFwKCQkJZXhpdCAxOyBcCgkgICAgZmk7IFwKCSBkb25lCi5p ZiBkZWZpbmVkKFBBVENIRklMRVMpCglAY2QgJHtfRElTVERJUn07XAoJJHtfUEFUQ0hfU0lURVNf RU5WfSA7IFwKCWZvciBfZmlsZSBpbiAke1BBVENIRklMRVN9OyBkbyBcCgkJZmlsZT1gJHtFQ0hP X0NNRH0gJCRfZmlsZSB8ICR7U0VEfSAtRSAtZSAncy86W14tOl1bXjpdKiQkLy8nYCA7IFwKCQlp ZiBbICQkX2ZpbGUgPSAkJGZpbGUgXTsgdGhlbglcCgkJCXNlbGVjdD0nJzsJXAoJCWVsc2UJXAoJ CQlzZWxlY3Q9YCR7RUNIT19DTUR9ICQke19maWxlIyMqOn0gfCAke1NFRH0gLWUgJ3MvLC8gL2cn YCA7CVwKCQlmaTsJXAoJCWZpbGU9YCR7RUNIT19DTUR9ICQkZmlsZSB8ICR7U0VEfSAtRSAtZSAn cy86LVteOl0rJCQvLydgIDsgXAoJCWZvcmNlX2ZldGNoPWZhbHNlOyBcCgkJZmlsZWJhc2VuYW1l PSQke2ZpbGUjIyovfTsgXAoJCWZvciBhZmlsZSBpbiAke0ZPUkNFX0ZFVENIfTsgZG8gXAoJCQlh ZmlsZT0kJHthZmlsZSMjKi99OyBcCgkJCWlmIFsgIngkJGFmaWxlIiA9ICJ4JCRmaWxlYmFzZW5h bWUiIF07IHRoZW4gXAoJCQkJZm9yY2VfZmV0Y2g9dHJ1ZTsgXAoJCQlmaTsgXAoJCWRvbmU7IFwK CQlpZiBbICEgLWYgJCRmaWxlIC1hICEgLWYgJCRmaWxlYmFzZW5hbWUgLW8gIiQkZm9yY2VfZmV0 Y2giID0gInRydWUiIF07IHRoZW4gXAoJCQlpZiBbIC1MICQkZmlsZSAtbyAtTCAkJHtmaWxlIyMq L30gXTsgdGhlbiBcCgkJCQkke0VDSE9fTVNHfSAiPT4gJHtfRElTVERJUn0vJCRmaWxlIGlzIGEg YnJva2VuIHN5bWxpbmsuIjsgXAoJCQkJJHtFQ0hPX01TR30gIj0+IFBlcmhhcHMgYSBmaWxlc3lz dGVtIChtb3N0IGxpa2VseSBhIENEKSBpc24ndCBtb3VudGVkPyI7IFwKCQkJCSR7RUNIT19NU0d9 ICI9PiBQbGVhc2UgY29ycmVjdCB0aGlzIHByb2JsZW0gYW5kIHRyeSBhZ2Fpbi4iOyBcCgkJCQll eGl0IDE7IFwKCQkJZmk7IFwKCQkJJHtFQ0hPX01TR30gIj0+ICQkZmlsZSBkb2Vzbid0IHNlZW0g dG8gZXhpc3QgaW4gJHtfRElTVERJUn0uIjsgXAoJCQlpZiBbICEgLXogIiQkc2VsZWN0IiBdIDsg dGhlbiBcCgkJCQlfX1BBVENIX1NJVEVTX1RNUD0gOyBcCgkJCQlmb3IgZ3JvdXAgaW4gJCRzZWxl Y3Q7IGRvIFwKCQkJCQlpZiBbICEgLXogXCQke19QQVRDSF9TSVRFU18kJHtncm91cH19IF0gOyB0 aGVuIFwKCQkJCQkJZXZhbCBfX19QQVRDSF9TSVRFU19UTVA9IlwkJHtfUEFUQ0hfU0lURVNfJCR7 Z3JvdXB9fSIgOyBcCgkJCQkJCV9fUEFUQ0hfU0lURVNfVE1QPSIkJHtfX1BBVENIX1NJVEVTX1RN UH0gJCR7X19fUEFUQ0hfU0lURVNfVE1QfSIgOyBcCgkJCQkJZmk7IFwKCQkJCWRvbmU7IFwKCQkJ CV9fX1BBVENIX1NJVEVTX1RNUD0gOyBcCgkJCQlTT1JURURfUEFUQ0hfU0lURVNfQ01EX1RNUD0i JHtFQ0hPX0NNRH0gJHtfTUFTVEVSX1NJVEVfT1ZFUlJJREV9IGAke0VDSE9fQ01EfSAkJHtfX1BB VENIX1NJVEVTX1RNUH0gfCAke0FXS30gJyR7TUFTVEVSX1NPUlRfQVdLOlN8XFx8XFxcXHxnfSdg ICR7X01BU1RFUl9TSVRFX0JBQ0tVUH0iIDsgXAoJCQllbHNlIFwKCQkJCVNPUlRFRF9QQVRDSF9T SVRFU19DTURfVE1QPSIke1NPUlRFRF9QQVRDSF9TSVRFU19ERUZBVUxUX0NNRH0iIDsgXAoJCQlm aTsgXAoJCQlzaXRlc19yZW1haW5pbmc9MDsgXAoJCQlzaXRlcz0iYGV2YWwgJCRTT1JURURfUEFU Q0hfU0lURVNfQ01EX1RNUGAiOyBcCgkJCWZvciBzaXRlIGluICQke3NpdGVzfTsgZG8gXAoJCQkJ c2l0ZXNfcmVtYWluaW5nPSQkKCgkJHtzaXRlc19yZW1haW5pbmd9ICsgMSkpOyBcCgkJCWRvbmU7 IFwKCQkJZm9yIHNpdGUgaW4gJCR7c2l0ZXN9OyBkbyBcCgkJCQlzaXRlc19yZW1haW5pbmc9JCQo KCQke3NpdGVzX3JlbWFpbmluZ30gLSAxKSk7IFwKCQkJICAgICR7RUNIT19NU0d9ICI9PiBBdHRl bXB0aW5nIHRvIGZldGNoICQke3NpdGV9JCR7ZmlsZX0iOyBcCgkJCQlDS1NJWkU9YGFsZz1TSVpF OyAke0RJU1RJTkZPX0RBVEF9YDsgXAoJCQkJY2FzZSAkJHtmaWxlfSBpbiBcCgkJCQkqLyopCSR7 TUtESVJ9ICQke2ZpbGUlLyp9OyBcCgkJCQkJCWFyZ3M9Ii1vICQke2ZpbGV9ICQke3NpdGV9JCR7 ZmlsZX0iOzsgXAoJCQkJKikJCWFyZ3M9JCR7c2l0ZX0kJHtmaWxlfTs7IFwKCQkJCWVzYWM7IFwK CQkJCWlmICR7U0VURU5WfSAke0ZFVENIX0VOVn0gJHtGRVRDSF9DTUR9ICR7RkVUQ0hfQkVGT1JF X0FSR1N9ICQke2FyZ3N9ICR7RkVUQ0hfQUZURVJfQVJHU307IHRoZW4gXAoJCQkJCWFjdHVhbF9z aXplPWBzdGF0IC1mICV6ICIkJHtmaWxlfSJgOyBcCgkJCQkJaWYgWyAtbiAiJHtESVNBQkxFX1NJ WkV9IiBdIHx8IFsgLXogIiQke0NLU0laRX0iIF0gfHwgWyAkJHthY3R1YWxfc2l6ZX0gLWVxICQk e0NLU0laRX0gXTsgdGhlbiBcCgkJCQkJCWNvbnRpbnVlIDI7IFwKCQkJCQllbHNlIFwKCQkJCQkJ JHtFQ0hPX01TR30gIj0+IEZldGNoZWQgZmlsZSBzaXplIG1pc21hdGNoIChleHBlY3RlZCAkJHtD S1NJWkV9LCBhY3R1YWwgJCR7YWN0dWFsX3NpemV9KSI7IFwKCQkJCQkJaWYgWyAkJHtzaXRlc19y ZW1haW5pbmd9IC1ndCAxIF07IHRoZW4gXAoJCQkJCQkJJHtFQ0hPX01TR30gIj0+IFRyeWluZyBu ZXh0IHNpdGUiOyBcCgkJCQkJCQkke1JNfSAtZiAkJHtmaWxlfTsgXAoJCQkJCQlmaTsgXAoJCQkJ CWZpOyBcCgkJCQlmaTsgXAoJCQlkb25lOyBcCgkJCSR7RUNIT19NU0d9ICI9PiBDb3VsZG4ndCBm ZXRjaCBpdCAtIHBsZWFzZSB0cnkgdG8gcmV0cmlldmUgdGhpcyI7XAoJCQkke0VDSE9fTVNHfSAi PT4gcG9ydCBtYW51YWxseSBpbnRvICR7X0RJU1RESVJ9IGFuZCB0cnkgYWdhaW4uIjsgXAoJCQll eGl0IDE7IFwKCQlmaTsgXAoJIGRvbmUKLmVuZGlmCi5lbmRpZgoKIyBFeHRyYWN0CgpjbGVhbi13 cmtkaXI6CglAJHtSTX0gLXJmICR7V1JLRElSfQoKLmlmICF0YXJnZXQoZG8tZXh0cmFjdCkKZG8t ZXh0cmFjdDoKCUBmb3IgZmlsZSBpbiAke0VYVFJBQ1RfT05MWX07IGRvIFwKCQlpZiAhIChjZCAk e1dSS0RJUn0gJiYgJHtFWFRSQUNUX0NNRH0gJHtFWFRSQUNUX0JFRk9SRV9BUkdTfSAke19ESVNU RElSfS8kJGZpbGUgJHtFWFRSQUNUX0FGVEVSX0FSR1N9KTtcCgkJdGhlbiBcCgkJCWV4aXQgMTsg XAoJCWZpOyBcCglkb25lCglAaWYgWyAke1VJRH0gPSAwIF07IHRoZW4gXAoJCSR7Q0hNT0R9IC1S IHVnLXMgJHtXUktESVJ9OyBcCgkJJHtDSE9XTn0gLVIgMDowICR7V1JLRElSfTsgXAoJZmkKLmVu ZGlmCgojIFBhdGNoCgouaWYgIXRhcmdldChkby1wYXRjaCkKZG8tcGF0Y2g6Ci5pZiBkZWZpbmVk KFBBVENIRklMRVMpCglAJHtFQ0hPX01TR30gIj09PT4gIEFwcGx5aW5nIGRpc3RyaWJ1dGlvbiBw YXRjaGVzIGZvciAke1BLR05BTUV9IgoJQChzZXQgLWU7IFwKCWNkICR7X0RJU1RESVJ9OyBcCglw YXRjaF9kaXN0X3N0cmlwICgpIHsgXAoJCWNhc2UgIiQkMSIgaW4gXAoJCSR7X1BBVENIX0RJU1Rf U1RSSVBfQ0FTRVN9IFwKCQllc2FjOyBcCgl9OyBcCglmb3IgaSBpbiAke19QQVRDSEZJTEVTfTsg ZG8gXAoJCWlmIFsgJHtQQVRDSF9ERUJVR19UTVB9ID0geWVzIF07IHRoZW4gXAoJCQkke0VDSE9f TVNHfSAiPT09PiAgIEFwcGx5aW5nIGRpc3RyaWJ1dGlvbiBwYXRjaCAkJGkiIDsgXAoJCWZpIDsg XAoJCWNhc2UgJCRpIGluIFwKCQkqLlp8Ki5neikgJHtHWkNBVH0gJCRpIDs7IFwKCQkqLmJ6Mikg JHtCWkNBVH0gJCRpIDs7IFwKCQkqLnh6KSAke1haQ0FUfSAkJGkgOzsgXAoJCSouemlwKSAke1VO WklQX05BVElWRV9DTUR9IC1wICQkaSA7OyBcCgkJKikgJHtDQVR9ICQkaSA7OyBcCgkJZXNhYyB8 ICR7UEFUQ0h9ICR7UEFUQ0hfRElTVF9BUkdTfSBgcGF0Y2hfZGlzdF9zdHJpcCAkJGlgIDsgXAoJ ZG9uZSApCi5lbmRpZgouaWYgZGVmaW5lZChFWFRSQV9QQVRDSEVTKQoJQHNldCAtZSA7IFwKCWZv ciBpIGluICR7RVhUUkFfUEFUQ0hFU307IGRvIFwKCQljYXNlICQkaSBpbiBcCgkJKjotcFswLTld KSBwYXRjaF9maWxlPSQke2klOip9IDsgcGF0Y2hfc3RyaXA9JCR7aSMjKjp9IDs7IFwKCQkqKSBw YXRjaF9maWxlPSQkaSA7OyBcCgkJZXNhYyA7IFwKCQkke0VDSE9fTVNHfSAiPT09PiAgQXBwbHlp bmcgZXh0cmEgcGF0Y2ggJCRwYXRjaF9maWxlIiA7IFwKCQljYXNlICQkcGF0Y2hfZmlsZSBpbiBc CgkJKi5afCouZ3opICR7R1pDQVR9ICQkcGF0Y2hfZmlsZSA7OyBcCgkJKi5iejIpICR7QlpDQVR9 ICQkcGF0Y2hfZmlsZSA7OyBcCgkJKi54eikgJHtYWkNBVH0gJCRwYXRjaF9maWxlIDs7IFwKCQkq LnppcCkgJHtVTlpJUF9OQVRJVkVfQ01EfSAtcCAkJHBhdGNoX2ZpbGUgOzsgXAoJCSopICR7Q0FU fSAkJHBhdGNoX2ZpbGUgOzsgXAoJCWVzYWMgfCAke1BBVENIfSAke1BBVENIX0FSR1N9ICQkcGF0 Y2hfc3RyaXAgOyBcCglkb25lCi5lbmRpZgoJQHNldCAtZSA7XAoJaWYgWyAtZCAke1BBVENIRElS fSBdOyB0aGVuIFwKCQlpZiBbICJgJHtFQ0hPX0NNRH0gJHtQQVRDSERJUn0vcGF0Y2gtKmAiICE9 ICIke1BBVENIRElSfS9wYXRjaC0qIiBdOyB0aGVuIFwKCQkJJHtFQ0hPX01TR30gIj09PT4gIEFw cGx5aW5nICR7T1BTWVN9IHBhdGNoZXMgZm9yICR7UEtHTkFNRX0iIDsgXAoJCQlQQVRDSEVTX0FQ UExJRUQ9IiIgOyBcCgkJCWZvciBpIGluICR7UEFUQ0hESVJ9L3BhdGNoLSo7IGRvIFwKCQkJCWNh c2UgJCRpIGluIFwKCQkJCQkqLm9yaWd8Ki5yZWp8Kn58Kix2KSBcCgkJCQkJCSR7RUNIT19NU0d9 ICI9PT0+ICAgSWdub3JpbmcgcGF0Y2hmaWxlICQkaSIgOyBcCgkJCQkJCTs7IFwKCQkJCQkqKSBc CgkJCQkJCWlmIFsgJHtQQVRDSF9ERUJVR19UTVB9ID0geWVzIF07IHRoZW4gXAoJCQkJCQkJJHtF Q0hPX01TR30gIj09PT4gICBBcHBseWluZyAke09QU1lTfSBwYXRjaCAkJGkiIDsgXAoJCQkJCQlm aTsgXAoJCQkJCQlpZiAke1BBVENIfSAke1BBVENIX0FSR1N9IDwgJCRpIDsgdGhlbiBcCgkJCQkJ CQlQQVRDSEVTX0FQUExJRUQ9IiQkUEFUQ0hFU19BUFBMSUVEICQkaSIgOyBcCgkJCQkJCWVsc2Ug XAoJCQkJCQkJJHtFQ0hPX01TR30gYCR7RUNIT19DTUR9ICI9PiBQYXRjaCAkJGkgZmFpbGVkIHRv IGFwcGx5IGNsZWFubHkuIiB8ICR7U0VEfSAic3wke1BBVENIRElSfS98fCJgIDsgXAoJCQkJCQkJ aWYgWyB4IiQkUEFUQ0hFU19BUFBMSUVEIiAhPSB4IiIgLWEgJHtQQVRDSF9TSUxFTlR9ICE9ICJ5 ZXMiIF07IHRoZW4gXAoJCQkJCQkJCSR7RUNIT19NU0d9IGAke0VDSE9fQ01EfSAiPT4gUGF0Y2go ZXMpICQkUEFUQ0hFU19BUFBMSUVEIGFwcGxpZWQgY2xlYW5seS4iIHwgJHtTRUR9ICJzfCR7UEFU Q0hESVJ9L3x8ZyJgIDsgXAoJCQkJCQkJZmk7IFwKCQkJCQkJCSR7RkFMU0V9IDsgXAoJCQkJCQlm aTsgXAoJCQkJCQk7OyBcCgkJCQllc2FjOyBcCgkJCWRvbmU7IFwKCQlmaTsgXAoJZmkKLmVuZGlm CgouaWYgIXRhcmdldChydW4tYXV0b3Rvb2xzLWZpeHVwKQpydW4tYXV0b3Rvb2xzLWZpeHVwOgoj IFdvcmsgYXJvdW5kIGFuIGlzc3VlIHdoZXJlIEZyZWVCU0QgMTAuMCBpcyBkZXRlY3RlZCBhcyBG cmVlQlNEIDEueC4KLmlmICR7T1NWRVJTSU9OfSA+PSAxMDAwMDAwICYmICFkZWZpbmVkKFdJVEhP VVRfRkJTRDEwX0ZJWCkKCS1AZm9yIGYgaW4gYCR7RklORH0gJHtXUktESVJ9IC10eXBlIGYgXCgg LW5hbWUgY29uZmlnLmxpYnBhdGggLW8gXAoJCS1uYW1lIGNvbmZpZy5ycGF0aCAtbyAtbmFtZSBj b25maWd1cmUgLW8gLW5hbWUgbGlidG9vbC5tNCAtbyBcCgkJLW5hbWUgbHRjb25maWcgLW8gLW5h bWUgbGlidG9vbCAtbyAtbmFtZSBhY2xvY2FsLm00IC1vIFwKCQktbmFtZSBhY2luY2x1ZGUubTQg XClgIDsgZG8gXAoJCQkke1NFRH0gLWkuZmJzZDEwYmFrIFwKCQkJCS1lICdzfGZyZWVic2QxXCop fGZyZWVic2QxLlwqKXxnJyBcCgkJCQktZSAnc3xmcmVlYnNkXFsxMlxdXCopfGZyZWVic2RbMTJd LiopfGcnIFwKCQkJCS1lICdzfGZyZWVic2RcWzEyM1xdXCopfGZyZWVic2RbMTIzXS4qKXxnJyBc CgkJCQktZSAnc3xmcmVlYnNkXFtcWzEyXF1cXVwqKXxmcmVlYnNkW1sxMl1dLiopfGcnIFwKCQkJ CS1lICdzfGZyZWVic2RcW1xbMTIzXF1cXVwqKXxmcmVlYnNkW1sxMjNdXS4qKXxnJyBcCgkJCQkJ JCR7Zn0gOyBcCgkJCWNtcCAtcyAkJHtmfS5mYnNkMTBiYWsgJCR7Zn0gfHwgXAoJCQkke0VDSE9f TVNHfSAiPT09PiAgIEZyZWVCU0QgMTAgYXV0b3Rvb2xzIGZpeCBhcHBsaWVkIHRvICQke2Z9Ijsg XAoJCQkke1RPVUNIfSAke1RPVUNIX0ZMQUdTfSAtbXIgJCR7Zn0uZmJzZDEwYmFrICQke2Z9IDsg XAoJCQkke1JNfSAtZiAkJHtmfS5mYnNkMTBiYWsgOyBcCgkJZG9uZQouZW5kaWYKLmVuZGlmCgoj IENvbmZpZ3VyZQoKLmlmICF0YXJnZXQoZG8tY29uZmlndXJlKQpkby1jb25maWd1cmU6CglAaWYg WyAtZiAke1NDUklQVERJUn0vY29uZmlndXJlIF07IHRoZW4gXAoJCWNkICR7LkNVUkRJUn0gJiYg JHtTRVRFTlZ9ICR7U0NSSVBUU19FTlZ9ICR7U0h9IFwKCQkgICR7U0NSSVBURElSfS9jb25maWd1 cmU7IFwKCWZpCi5pZiBkZWZpbmVkKEdOVV9DT05GSUdVUkUpCglAQ09ORklHX0dVRVNTX0RJUlM9 JCQoJHtGSU5EfSAke1dSS0RJUn0gLW5hbWUgY29uZmlnLmd1ZXNzIC1vIC1uYW1lIGNvbmZpZy5z dWIgXAoJCXwgJHtYQVJHU30gLW4gMSAke0RJUk5BTUV9KTsgXAoJZm9yIF9EIGluICQke0NPTkZJ R19HVUVTU19ESVJTfTsgZG8gXAoJCSR7Uk19ICQke19EfS9jb25maWcuZ3Vlc3M7IFwKCQkke0NQ fSAke1RFTVBMQVRFU30vY29uZmlnLmd1ZXNzICQke19EfS9jb25maWcuZ3Vlc3M7IFwKCQkke0NI TU9EfSBhK3J4ICQke19EfS9jb25maWcuZ3Vlc3M7IFwKCQkke1JNfSAkJHtfRH0vY29uZmlnLnN1 YjsgXAoJCSR7Q1B9ICR7VEVNUExBVEVTfS9jb25maWcuc3ViICQke19EfS9jb25maWcuc3ViOyBc CgkJJHtDSE1PRH0gYStyeCAkJHtfRH0vY29uZmlnLnN1YjsgXAoJZG9uZQouZW5kaWYKLmlmIGRl ZmluZWQoSEFTX0NPTkZJR1VSRSkKCUAoY2QgJHtDT05GSUdVUkVfV1JLU1JDfSAmJiBcCgkgICAg JHtTRVRfTEFURV9DT05GSUdVUkVfQVJHU30gXAoJCWlmICEgJHtTRVRFTlZ9IENDPSIke0NDfSIg Q1BQPSIke0NQUH0iIENYWD0iJHtDWFh9IiBcCgkgICAgQ0ZMQUdTPSIke0NGTEFHU30iIENQUEZM QUdTPSIke0NQUEZMQUdTfSIgQ1hYRkxBR1M9IiR7Q1hYRkxBR1N9IiBcCgkgICAgTERGTEFHUz0i JHtMREZMQUdTfSIgTElCUz0iJHtMSUJTfSIgXAoJICAgIElOU1RBTEw9Ii91c3IvYmluL2luc3Rh bGwgLWMiIFwKCSAgICBJTlNUQUxMX0RBVEE9IiR7SU5TVEFMTF9EQVRBfSIgXAoJICAgIElOU1RB TExfTElCPSIke0lOU1RBTExfTElCfSIgXAoJICAgIElOU1RBTExfUFJPR1JBTT0iJHtJTlNUQUxM X1BST0dSQU19IiBcCgkgICAgSU5TVEFMTF9TQ1JJUFQ9IiR7SU5TVEFMTF9TQ1JJUFR9IiBcCgkg ICAgJHtDT05GSUdVUkVfRU5WfSAke0NPTkZJR1VSRV9DTUR9ICR7Q09ORklHVVJFX0FSR1N9OyB0 aGVuIFwKCQkJICR7RUNIT19NU0d9ICI9PT0+ICBTY3JpcHQgXCIke0NPTkZJR1VSRV9TQ1JJUFR9 XCIgZmFpbGVkIHVuZXhwZWN0ZWRseS4iOyBcCgkJCSAoJHtFQ0hPX0NNRH0gJHtDT05GSUdVUkVf RkFJTF9NRVNTQUdFfSkgfCAke0ZNVH0gNzUgNzkgOyBcCgkJCSAke0ZBTFNFfTsgXAoJCWZpKQou ZW5kaWYKLmVuZGlmCgojIEJ1aWxkCiMgWFhYOiAke01BS0VfQVJHUzpOJHtERVNURElSTkFNRX09 Kn0gd291bGQgYmUgZWFzaWVyIGJ1dCBpdCBpcyBub3QgdmFsaWQgd2l0aCB0aGUgb2xkIGZtYWtl CkRPX01BS0VfQlVJTEQ/PQkke1NFVEVOVn0gJHtNQUtFX0VOVn0gJHtNQUtFX0NNRH0gJHtNQUtF X0ZMQUdTfSAke01BS0VGSUxFfSAke19NQUtFX0pPQlN9ICR7TUFLRV9BUkdTOkMsXiR7REVTVERJ Uk5BTUV9PS4qLCxnfQouaWYgIXRhcmdldChkby1idWlsZCkKZG8tYnVpbGQ6CglAKGNkICR7QlVJ TERfV1JLU1JDfTsgaWYgISAke0RPX01BS0VfQlVJTER9ICR7QUxMX1RBUkdFVH07IHRoZW4gXAoJ CWlmIFsgLW4gIiR7QlVJTERfRkFJTF9NRVNTQUdFfSIgXSA7IHRoZW4gXAoJCQkke0VDSE9fTVNH fSAiPT09PiBDb21waWxhdGlvbiBmYWlsZWQgdW5leHBlY3RlZGx5LiI7IFwKCQkJKCR7RUNIT19D TUR9ICIke0JVSUxEX0ZBSUxfTUVTU0FHRX0iKSB8ICR7Rk1UfSA3NSA3OSA7IFwKCQkJZmk7IFwK CQkke0ZBTFNFfTsgXAoJCWZpKQouZW5kaWYKCiMgQ2hlY2sgY29uZmxpY3RzCgouaWYgIXRhcmdl dChjaGVjay1jb25mbGljdHMpCmNoZWNrLWNvbmZsaWN0czogY2hlY2stYnVpbGQtY29uZmxpY3Rz IGNoZWNrLWluc3RhbGwtY29uZmxpY3RzCi5lbmRpZgoKLmlmICF0YXJnZXQoY2hlY2stYnVpbGQt Y29uZmxpY3RzKQpjaGVjay1idWlsZC1jb25mbGljdHM6Ci5pZiAoIGRlZmluZWQoQ09ORkxJQ1RT KSB8fCBkZWZpbmVkKENPTkZMSUNUU19CVUlMRCkgKSAmJiAhZGVmaW5lZChESVNBQkxFX0NPTkZM SUNUUykgJiYgIWRlZmluZWQoREVGRVJfQ09ORkxJQ1RTX0NIRUNLKQoJQGNvbmZsaWN0c193aXRo PSQkKCBcCgl7ICR7UEtHX1FVRVJZfSAtZyAiJW4tJXYgJXAgJW8iICR7Q09ORkxJQ1RTOkMvLisv JyYnL30gJHtDT05GTElDVFNfQlVJTEQ6Qy8uKy8nJicvfSAyPi9kZXYvbnVsbCB8fCA6IDsgfSBc CgkJfCB3aGlsZSByZWFkIHBrZ25hbWUgcHJmeCBvcmduOyBkbyBcCgkJaWYgWyAiLyR7UFJFRklY fSIgPSAiLyQke3ByZnh9IiAtYSAiLyR7UEtHT1JJR0lOfSIgIT0gIi8kJHtvcmdufSIgXTsgdGhl biBcCgkJCSR7RUNIT19DTUR9IC1uICIgJCR7cGtnbmFtZX0iOyBcCgkJZmk7IFwKCWRvbmUpOyBc CglpZiBbIC1uICIkJHtjb25mbGljdHNfd2l0aH0iIF07IHRoZW4gXAoJCSR7RUNIT19NU0d9OyBc CgkJJHtFQ0hPX01TR30gIj09PT4gICR7UEtHTkFNRX0gY29uZmxpY3RzIHdpdGggaW5zdGFsbGVk IHBhY2thZ2Uocyk6ICI7IFwKCQlmb3IgZW50cnkgaW4gJCR7Y29uZmxpY3RzX3dpdGh9OyBkbyBc CgkJCSR7RUNIT19NU0d9ICIgICAgICAkJHtlbnRyeX0iOyBcCgkJZG9uZTsgXAoJCSR7RUNIT19N U0d9OyBcCgkJJHtFQ0hPX01TR30gIiAgICAgIFRoZXkgd2lsbCBub3QgYnVpbGQgdG9nZXRoZXIu IjsgXAoJCSR7RUNIT19NU0d9ICIgICAgICBQbGVhc2UgcmVtb3ZlIHRoZW0gZmlyc3Qgd2l0aCBw a2cgZGVsZXRlLiI7IFwKCQlleGl0IDE7XAoJZmkKLmVuZGlmCi5lbmRpZgoKLmlmICF0YXJnZXQo aWRlbnRpZnktaW5zdGFsbC1jb25mbGljdHMpCmlkZW50aWZ5LWluc3RhbGwtY29uZmxpY3RzOgou aWYgKCBkZWZpbmVkKENPTkZMSUNUUykgfHwgZGVmaW5lZChDT05GTElDVFNfSU5TVEFMTCkgKSAm JiAhZGVmaW5lZChESVNBQkxFX0NPTkZMSUNUUykKCUBjb25mbGljdHNfd2l0aD0kJCggXAoJeyAk e1BLR19RVUVSWX0gLWcgIiVuLSV2ICVwICVvIiAke0NPTkZMSUNUUzpDLy4rLycmJy99ICR7Q09O RkxJQ1RTX0lOU1RBTEw6Qy8uKy8nJicvfSAyPi9kZXYvbnVsbCB8fCA6IDsgfSBcCgkJfCB3aGls ZSByZWFkIHBrZ25hbWUgcHJmeCBvcmduOyBkbyBcCgkJaWYgWyAiLyR7UFJFRklYfSIgPSAiLyQk e3ByZnh9IiAtYSAiLyR7UEtHT1JJR0lOfSIgIT0gIi8kJHtvcmdufSIgXTsgdGhlbiBcCgkJCSR7 RUNIT19DTUR9IC1uICIgJCR7cGtnbmFtZX0iOyBcCgkJZmk7IFwKCWRvbmUpOyBcCglpZiBbIC1u ICIkJHtjb25mbGljdHNfd2l0aH0iIF07IHRoZW4gXAoJCSR7RUNIT19NU0d9OyBcCgkJJHtFQ0hP X01TR30gIj09PT4gICR7UEtHTkFNRX0gY29uZmxpY3RzIHdpdGggaW5zdGFsbGVkIHBhY2thZ2Uo cyk6ICI7IFwKCQlmb3IgZW50cnkgaW4gJCR7Y29uZmxpY3RzX3dpdGh9OyBkbyBcCgkJCSR7RUNI T19NU0d9ICIgICAgICAkJHtlbnRyeX0iOyBcCgkJZG9uZTsgXAoJCSR7RUNIT19NU0d9OyBcCgkJ JHtFQ0hPX01TR30gIiAgICAgIFRoZXkgaW5zdGFsbCBmaWxlcyBpbnRvIHRoZSBzYW1lIHBsYWNl LiI7IFwKCQkke0VDSE9fTVNHfSAiICAgICAgWW91IG1heSB3YW50IHRvIHN0b3AgYnVpbGQgd2l0 aCBDdHJsICsgQy4iOyBcCgkJc2xlZXAgMTA7IFwKCWZpCi5lbmRpZgouZW5kaWYKCi5pZiAhdGFy Z2V0KGNoZWNrLWluc3RhbGwtY29uZmxpY3RzKQpjaGVjay1pbnN0YWxsLWNvbmZsaWN0czoKLmlm ICggZGVmaW5lZChDT05GTElDVFMpIHx8IGRlZmluZWQoQ09ORkxJQ1RTX0lOU1RBTEwpIHx8ICgg ZGVmaW5lZChDT05GTElDVFNfQlVJTEQpICYmIGRlZmluZWQoREVGRVJfQ09ORkxJQ1RTX0NIRUNL KSApICkgJiYgIWRlZmluZWQoRElTQUJMRV9DT05GTElDVFMpIAouaWYgZGVmaW5lZChERUZFUl9D T05GTElDVFNfQ0hFQ0spCglAY29uZmxpY3RzX3dpdGg9JCQoIFwKCXsgJHtQS0dfUVVFUll9IC1n ICIlbi0ldiAlcCAlbyIgJHtDT05GTElDVFM6Qy8uKy8nJicvfSAke0NPTkZMSUNUU19CVUlMRDpD Ly4rLycmJy99ICR7Q09ORkxJQ1RTX0lOU1RBTEw6Qy8uKy8nJicvfSAyPi9kZXYvbnVsbCB8fCA6 IDsgfSBcCgkgICAgICAgCXwgd2hpbGUgcmVhZCBwa2duYW1lIHByZnggb3JnbjsgZG8gXAoJCWlm IFsgIi8ke1BSRUZJWH0iID0gIi8kJHtwcmZ4fSIgLWEgIi8ke1BLR09SSUdJTn0iICE9ICIvJCR7 b3Jnbn0iIF07IHRoZW4gXAoJCQkke0VDSE9fQ01EfSAtbiAiICQke3BrZ25hbWV9IjsgXAoJCWZp OyBcCglkb25lKTsgXAoJaWYgWyAtbiAiJCR7Y29uZmxpY3RzX3dpdGh9IiBdOyB0aGVuIFwKCQkk e0VDSE9fTVNHfTsgXAoJCSR7RUNIT19NU0d9ICI9PT0+ICAke1BLR05BTUV9IGNvbmZsaWN0cyB3 aXRoIGluc3RhbGxlZCBwYWNrYWdlKHMpOiAiOyBcCgkJZm9yIGVudHJ5IGluICQke2NvbmZsaWN0 c193aXRofTsgZG8gXAoJCQkke0VDSE9fTVNHfSAiICAgICAgJCR7ZW50cnl9IjsgXAoJCWRvbmU7 IFwKCQkke0VDSE9fTVNHfTsgXAoJCSR7RUNIT19NU0d9ICIgICAgICBQbGVhc2UgcmVtb3ZlIHRo ZW0gZmlyc3Qgd2l0aCBwa2cgZGVsZXRlLiI7IFwKCQlleGl0IDE7IFwKCWZpCi5lbHNlCglAY29u ZmxpY3RzX3dpdGg9JCQoIFwKCXsgJHtQS0dfUVVFUll9IC1nICIlbi0ldiAlcCAlbyIgJHtDT05G TElDVFM6Qy8uKy8nJicvfSAke0NPTkZMSUNUU19JTlNUQUxMOkMvLisvJyYnL30gMj4vZGV2L251 bGwgfHwgOiA7IH0gXAoJICAgICAgIAl8IHdoaWxlIHJlYWQgcGtnbmFtZSBwcmZ4IG9yZ247IGRv IFwKCQlpZiBbICIvJHtQUkVGSVh9IiA9ICIvJCR7cHJmeH0iIC1hICIvJHtQS0dPUklHSU59IiAh PSAiLyQke29yZ259IiBdOyB0aGVuIFwKCQkJJHtFQ0hPX0NNRH0gLW4gIiAkJHtwa2duYW1lfSI7 IFwKCQlmaTsgXAoJZG9uZSk7IFwKCWlmIFsgLW4gIiQke2NvbmZsaWN0c193aXRofSIgXTsgdGhl biBcCgkJJHtFQ0hPX01TR307IFwKCQkke0VDSE9fTVNHfSAiPT09PiAgJHtQS0dOQU1FfSBjb25m bGljdHMgd2l0aCBpbnN0YWxsZWQgcGFja2FnZShzKTogIjsgXAoJCWZvciBlbnRyeSBpbiAkJHtj b25mbGljdHNfd2l0aH07IGRvIFwKCQkJJHtFQ0hPX01TR30gIiAgICAgICQke2VudHJ5fSI7IFwK CQlkb25lOyBcCgkJJHtFQ0hPX01TR307IFwKCQkke0VDSE9fTVNHfSAiICAgICAgVGhleSBpbnN0 YWxsIGZpbGVzIGludG8gdGhlIHNhbWUgcGxhY2UuIjsgXAoJCSR7RUNIT19NU0d9ICIgICAgICBQ bGVhc2UgcmVtb3ZlIHRoZW0gZmlyc3Qgd2l0aCBwa2cgZGVsZXRlLiI7IFwKCQlleGl0IDE7IFwK CWZpCi5lbmRpZiAjIGRlZmluZWQoREVGRVJfQ09ORkxJQ1RTX0NIRUNLKQouZW5kaWYKLmVuZGlm CgojIEluc3RhbGwKCi5pZiAhdGFyZ2V0KGRvLWluc3RhbGwpICYmICFkZWZpbmVkKE5PX0lOU1RB TEwpCmRvLWluc3RhbGw6CglAKGNkICR7SU5TVEFMTF9XUktTUkN9ICYmICR7U0VURU5WfSAke01B S0VfRU5WfSAke0ZBS0VST09UfSAke01BS0VfQ01EfSAke01BS0VfRkxBR1N9ICR7TUFLRUZJTEV9 ICR7TUFLRV9BUkdTfSAke0lOU1RBTExfVEFSR0VUfSkKLmVuZGlmCgojIFBhY2thZ2UKCi5pZiAh dGFyZ2V0KGRvLXBhY2thZ2UpClBLR19DUkVBVEVfQVJHUz0JLXIgJHtTVEFHRURJUn0gLW0gJHtN RVRBRElSfSAtcCAke1RNUFBMSVNUfQpkby1wYWNrYWdlOiBjcmVhdGUtbWFuaWZlc3QKZG8tcGFj a2FnZTogJHtUTVBQTElTVH0KCUBpZiBbIC1kICR7UEFDS0FHRVN9IF07IHRoZW4gXAoJCWlmIFsg ISAtZCAke1BLR1JFUE9TSVRPUll9IF07IHRoZW4gXAoJCQlpZiAhICR7TUtESVJ9ICR7UEtHUkVQ T1NJVE9SWX07IHRoZW4gXAoJCQkJJHtFQ0hPX01TR30gIj0+IENhbid0IGNyZWF0ZSBkaXJlY3Rv cnkgJHtQS0dSRVBPU0lUT1JZfS4iOyBcCgkJCQlleGl0IDE7IFwKCQkJZmk7IFwKCQlmaTsgXAoJ ZmkKCUBmb3IgY2F0IGluICR7Q0FURUdPUklFU307IGRvIFwKCQkke1JNfSAtZiAke1BBQ0tBR0VT fS8kJGNhdC8ke1BLR05BTUVQUkVGSVh9JHtQT1JUTkFNRX0qJHtQS0dfU1VGWH0gOyBcCglkb25l CglAJHtNS0RJUn0gJHtXUktESVJ9L3BrZwoJQGlmICR7U0VURU5WfSAke1BLR19FTlZ9IEZPUkNF X1BPU1Q9IiR7X0ZPUkNFX1BPU1RfUEFUVEVSTlN9IiAke1BLR19DUkVBVEV9ICR7UEtHX0NSRUFU RV9BUkdTfSAtZiAke1BLR19TVUZYOlMvLi8vfSAtbyAke1dSS0RJUn0vcGtnICR7UEtHTkFNRX07 IHRoZW4gXAoJCWlmIFsgLWQgJHtQS0dSRVBPU0lUT1JZfSAtYSAtdyAke1BLR1JFUE9TSVRPUll9 IF07IHRoZW4gXAoJCQkke0xOfSAtZiAke1dSS0RJUl9QS0dGSUxFfSAke1BLR0ZJTEV9IDI+L2Rl di9udWxsIFwKCQkJCXx8ICR7Q1B9IC1mICR7V1JLRElSX1BLR0ZJTEV9ICR7UEtHRklMRX07IFwK CQkJaWYgWyAiJHtQS0dPUklHSU59IiA9ICJwb3J0cy1tZ210L3BrZyIgLW8gIiR7UEtHT1JJR0lO fSIgPSAicG9ydHMtbWdtdC9wa2ctZGV2ZWwiIF07IHRoZW4gXAoJCQkJaWYgWyAhIC1kICR7UEtH TEFURVNUUkVQT1NJVE9SWX0gXTsgdGhlbiBcCgkJCQkJaWYgISAke01LRElSfSAke1BLR0xBVEVT VFJFUE9TSVRPUll9OyB0aGVuIFwKCQkJCQkJJHtFQ0hPX01TR30gIj0+IENhbid0IGNyZWF0ZSBk aXJlY3RvcnkgJHtQS0dMQVRFU1RSRVBPU0lUT1JZfS4iOyBcCgkJCQkJCWV4aXQgMTsgXAoJCQkJ CWZpOyBcCgkJCQlmaSA7IFwKCQkJCSR7TE59IC1zZiAuLi8ke1BLR1JFUE9TSVRPUllTVUJESVJ9 LyR7UEtHTkFNRX0ke1BLR19TVUZYfSAke1BLR0xBVEVTVEZJTEV9IDsgXAoJCQlmaTsgXAoJCWZp OyBcCgllbHNlIFwKCQljZCAkey5DVVJESVJ9ICYmIGV2YWwgJHtNQUtFfSBkZWxldGUtcGFja2Fn ZSA+L2Rldi9udWxsOyBcCgkJZXhpdCAxOyBcCglmaQouZW5kaWYKIyBTb21lIHN1cHBvcnQgcnVs ZXMgZm9yIGRvLXBhY2thZ2UKCi5pZiAhdGFyZ2V0KGRlbGV0ZS1wYWNrYWdlKQpkZWxldGUtcGFj a2FnZToKCUAke0VDSE9fTVNHfSAiPT09PiAgRGVsZXRpbmcgcGFja2FnZSBmb3IgJHtQS0dOQU1F fSIKIyBXaGVuIHN0YWdpbmcsIHRoZSBwYWNrYWdlIG1heSBvbmx5IGJlIGluIHRoZSB3b3JrZGly IGlmIG5vdCByb290CglAJHtSTX0gLWYgJHtQS0dGSUxFfSAke1dSS0RJUl9QS0dGSUxFfSAyPi9k ZXYvbnVsbCB8fCA6Ci5lbmRpZgoKLmlmICF0YXJnZXQoZGVsZXRlLXBhY2thZ2UtbGlzdCkKZGVs ZXRlLXBhY2thZ2UtbGlzdDoKCUAke0VDSE9fQ01EfSAiWyAtZiAke1BLR0ZJTEV9IF0gJiYgKCR7 RUNIT19DTUR9IGRlbGV0aW5nICR7UEtHRklMRX07ICR7Uk19IC1mICR7UEtHRklMRX0pIgouZW5k aWYKCiMgVXNlZCBieSBzY3JpcHRzIGFuZCB1c2VycyB0byBpbnN0YWxsIGEgcGFja2FnZSBmcm9t IGxvY2FsIHJlcG9zaXRvcnkuCiMgUG91ZHJpZXJlIC1pIHVzZXMgdGhpcywgcGxlYXNlIGtlZXAu Ci5pZiAhdGFyZ2V0KGluc3RhbGwtcGFja2FnZSkKLmlmIGRlZmluZWQoRk9SQ0VfUEtHX1JFR0lT VEVSKQpfSU5TVEFMTF9QS0dfQVJHUz0JLWYKLmVuZGlmCi5pZiBkZWZpbmVkKElOU1RBTExTX0RF UEVORFMpCl9JTlNUQUxMX1BLR19BUkdTKz0JLUEKLmVuZGlmCmluc3RhbGwtcGFja2FnZToKCUBp ZiBbIC1mICIke1dSS0RJUn0vcGtnLyR7UEtHTkFNRX0ke1BLR19TVUZYfSIgXTsgdGhlbiBcCgkg ICAgX3BrZ2ZpbGU9IiR7V1JLRElSX1BLR0ZJTEV9IjsgXAoJZWxzZSBcCgkgICAgX3BrZ2ZpbGU9 IiR7UEtHRklMRX0iOyBcCglmaTsgXAoJJHtQS0dfQUREfSAke19JTlNUQUxMX1BLR19BUkdTfSAk JHtfcGtnZmlsZX0KLmVuZGlmCgoKIyBVdGlsaXR5IHRhcmdldHMgZm9sbG93CgouaWYgIXRhcmdl dChjaGVjay1hbHJlYWR5LWluc3RhbGxlZCkKLmlmICFkZWZpbmVkKE5PX1BLR19SRUdJU1RFUikg JiYgIWRlZmluZWQoRk9SQ0VfUEtHX1JFR0lTVEVSKQpjaGVjay1hbHJlYWR5LWluc3RhbGxlZDoK CQlAJHtFQ0hPX01TR30gIj09PT4gIENoZWNraW5nIGlmICR7UEtHQkFTRX0gYWxyZWFkeSBpbnN0 YWxsZWQiOyBcCgkJcGtnbmFtZT1gJHtQS0dfSU5GT30gLXEgLU8gJHtQS0dCQVNFfWA7IFwKCQlp ZiBbIC1uICIkJHtwa2duYW1lfSIgXTsgdGhlbiBcCgkJCXY9YCR7UEtHX1ZFUlNJT059IC10ICQk e3BrZ25hbWV9ICR7UEtHTkFNRX1gOyBcCgkJCWlmIFsgIiQke3Z9IiA9ICI8IiBdOyB0aGVuIFwK CQkJCSR7RUNIT19DTUR9ICI9PT0+ICAgQW4gb2xkZXIgdmVyc2lvbiBvZiAke1BLR0JBU0V9IGlz IGFscmVhZHkgaW5zdGFsbGVkICgkJHtwa2duYW1lfSkiOyBcCgkJCWVsc2UgXAoJCQkJJHtFQ0hP X0NNRH0gIj09PT4gICAke1BLR05BTUV9IGlzIGFscmVhZHkgaW5zdGFsbGVkIjsgXAoJCQlmaTsg XAoJCQkke0VDSE9fTVNHfSAiICAgICAgWW91IG1heSB3aXNoIHRvIFxgXGBtYWtlIGRlaW5zdGFs bCcnIGFuZCBpbnN0YWxsIHRoaXMgcG9ydCBhZ2FpbiI7IFwKCQkJJHtFQ0hPX01TR30gIiAgICAg IGJ5IFxgXGBtYWtlIHJlaW5zdGFsbCcnIHRvIHVwZ3JhZGUgaXQgcHJvcGVybHkuIjsgXAoJCQkk e0VDSE9fTVNHfSAiICAgICAgSWYgeW91IHJlYWxseSB3aXNoIHRvIG92ZXJ3cml0ZSB0aGUgb2xk IHBvcnQgb2YgJHtQS0dCQVNFfSI7IFwKCQkJJHtFQ0hPX01TR30gIiAgICAgIHdpdGhvdXQgZGVs ZXRpbmcgaXQgZmlyc3QsIHNldCB0aGUgdmFyaWFibGUgXCJGT1JDRV9QS0dfUkVHSVNURVJcIiI7 IFwKCQkJJHtFQ0hPX01TR30gIiAgICAgIGluIHlvdXIgZW52aXJvbm1lbnQgb3IgdGhlIFwibWFr ZSBpbnN0YWxsXCIgY29tbWFuZCBsaW5lLiI7IFwKCQkJZXhpdCAxOyBcCgkJZmkKLmVuZGlmCi5l bmRpZgoKLmlmICF0YXJnZXQoY2hlY2stdW1hc2spCmNoZWNrLXVtYXNrOgoJQGlmIFsgYCR7U0h9 IC1jIHVtYXNrYCAhPSAwMDIyIF07IHRoZW4gXAoJCSR7RUNIT19NU0d9ICI9PT0+ICBXYXJuaW5n OiB5b3VyIHVtYXNrIGlzIFwiYCR7U0h9IC1jIHVtYXNrYCJcIi47IFwKCQkke0VDSE9fTVNHfSAi ICAgICAgSWYgdGhpcyBpcyBub3QgZGVzaXJlZCwgc2V0IGl0IHRvIGFuIGFwcHJvcHJpYXRlIHZh bHVlIjsgXAoJCSR7RUNIT19NU0d9ICIgICAgICBhbmQgaW5zdGFsbCB0aGlzIHBvcnQgYWdhaW4g YnkgXGBcYG1ha2UgcmVpbnN0YWxsJycuIjsgXAoJZmkKLmVuZGlmCgouaWYgIXRhcmdldChpbnN0 YWxsLW10cmVlKQppbnN0YWxsLW10cmVlOgoJQCR7RE9fTkFEQX0KLmVuZGlmCgouaWYgIXRhcmdl dChpbnN0YWxsLWxkY29uZmlnLWZpbGUpCmluc3RhbGwtbGRjb25maWctZmlsZToKLmlmIGRlZmlu ZWQoVVNFX0xEQ09ORklHKSB8fCBkZWZpbmVkKFVTRV9MRENPTkZJRzMyKQouaWYgZGVmaW5lZChV U0VfTERDT05GSUcpCi5pZiBkZWZpbmVkKFVTRV9MSU5VWF9QUkVGSVgpCi5lbHNlCi5pZiAke1VT RV9MRENPTkZJR30gIT0gIiR7TE9DQUxCQVNFfS9saWIiICYmICFkZWZpbmVkKElOU1RBTExfQVNf VVNFUikKCUAke0VDSE9fTVNHfSAiPT09PiAgIEluc3RhbGxpbmcgbGRjb25maWcgY29uZmlndXJh dGlvbiBmaWxlIgouaWYgZGVmaW5lZChOT19NVFJFRSkgfHwgJHtQUkVGSVh9ICE9ICR7TE9DQUxC QVNFfQoJQCR7TUtESVJ9ICR7U1RBR0VESVJ9JHtMT0NBTEJBU0V9LyR7TERDT05GSUdfRElSfQou ZW5kaWYKCUAke0VDSE9fQ01EfSAke1VTRV9MRENPTkZJR30gfCAke1RSfSAnICcgJ1xuJyBcCgkJ PiAke1NUQUdFRElSfSR7TE9DQUxCQVNFfS8ke0xEQ09ORklHX0RJUn0vJHtVTklRVUVOQU1FfQoJ QCR7RUNIT19DTUR9ICR7TE9DQUxCQVNFfS8ke0xEQ09ORklHX0RJUn0vJHtVTklRVUVOQU1FfSA+ PiAke1RNUFBMSVNUfQouZW5kaWYKLmVuZGlmCi5lbmRpZgouaWYgZGVmaW5lZChVU0VfTERDT05G SUczMikKLmlmICFkZWZpbmVkKElOU1RBTExfQVNfVVNFUikKCUAke0VDSE9fTVNHfSAiPT09PiAg IEluc3RhbGxpbmcgMzItYml0IGxkY29uZmlnIGNvbmZpZ3VyYXRpb24gZmlsZSIKLmlmIGRlZmlu ZWQoTk9fTVRSRUUpIHx8ICR7UFJFRklYfSAhPSAke0xPQ0FMQkFTRX0KCUAke01LRElSfSAke1NU QUdFRElSfSR7TE9DQUxCQVNFfS8ke0xEQ09ORklHMzJfRElSfQouZW5kaWYKCUAke0VDSE9fQ01E fSAke1VTRV9MRENPTkZJRzMyfSB8ICR7VFJ9ICcgJyAnXG4nIFwKCQk+ICR7U1RBR0VESVJ9JHtM T0NBTEJBU0V9LyR7TERDT05GSUczMl9ESVJ9LyR7VU5JUVVFTkFNRX0KCUAke0VDSE9fQ01EfSAk e0xPQ0FMQkFTRX0vJHtMRENPTkZJRzMyX0RJUn0vJHtVTklRVUVOQU1FfSA+PiAke1RNUFBMSVNU fQouZW5kaWYKLmVuZGlmCi5lbmRpZgouZW5kaWYKCi5pZiAhdGFyZ2V0KGNyZWF0ZS11c2Vycy1n cm91cHMpCi5pZiBkZWZpbmVkKEdST1VQUykgfHwgZGVmaW5lZChVU0VSUykKX1VHX09VVFBVVD0J JHtXUktESVJ9L3VzZXJzLWdyb3Vwcy5zaApQS0dQUkVJTlNUQUxMKz0JJHtfVUdfT1VUUFVUfQpj cmVhdGUtdXNlcnMtZ3JvdXBzOgouaWYgZGVmaW5lZChHUk9VUFMpCi5mb3IgX2ZpbGUgaW4gJHtH SURfRklMRVN9Ci5pZiAhZXhpc3RzKCR7X2ZpbGV9KQoJQCR7RUNIT19DTUR9ICIqKiAke19maWxl fSBkb2Vzbid0IGV4aXN0LiBFeGl0aW5nLiI7IGV4aXQgMQouZW5kaWYKLmVuZGZvcgoJQCR7Uk19 IC1mICR7X1VHX09VVFBVVH0gfHwgJHtUUlVFfQoJQCR7RUNIT19NU0d9ICI9PT0+IENyZWF0aW5n IHVzZXJzIGFuZC9vciBncm91cHMuIgoJQCR7RUNIT19DTUR9ICJlY2hvIFwiPT09PiBDcmVhdGlu ZyB1c2VycyBhbmQvb3IgZ3JvdXBzLlwiIiA+PiAke19VR19PVVRQVVR9Ci5mb3IgX2dyb3VwIGlu ICR7R1JPVVBTfQojIF9iZ3BkOio6MTMwOgoJQGlmICEgJHtHUkVQfSAtaCBeJHtfZ3JvdXB9OiAk e0dJRF9GSUxFU30gPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFwKCQkke0VDSE9fQ01EfSAiKiogQ2Fu bm90IGZpbmQgYW55IGluZm9ybWF0aW9uIGFib3V0IGdyb3VwIFxgJHtfZ3JvdXB9JyBpbiAke0dJ RF9GSUxFU30uIjsgXAoJCWV4aXQgMTsgXAoJZmkKCUBJRlM9IjoiOyAke0dSRVB9IC1oIF4ke19n cm91cH06ICR7R0lEX0ZJTEVTfSB8IGhlYWQgLW4gMSB8IHdoaWxlIHJlYWQgZ3JvdXAgZm9vIGdp ZCBtZW1iZXJzOyBkbyBcCgkJZ2lkPSQkKCgkJGdpZCske0dJRF9PRkZTRVR9KSk7IFwKCQkke0VD SE9fQ01EfSAtZSAiaWYgISAke1BXfSBncm91cHNob3cgJCRncm91cCA+L2Rldi9udWxsIDI+JjE7 IHRoZW4gXG4gXAoJCQllY2hvIFwiQ3JlYXRpbmcgZ3JvdXAgJyQkZ3JvdXAnIHdpdGggZ2lkICck JGdpZCcuXCIgXG4gXAoJCQkke1BXfSBncm91cGFkZCAkJGdyb3VwIC1nICQkZ2lkOyBlbHNlIGVj aG8gXCJVc2luZyBleGlzdGluZyBncm91cCAnJCRncm91cCcuXCJcbmZpIiA+PiAke19VR19PVVRQ VVR9OyBcCglkb25lCi5lbmRmb3IKLmVuZGlmCi5pZiBkZWZpbmVkKFVTRVJTKQouZm9yIF9maWxl IGluICR7VUlEX0ZJTEVTfQouaWYgIWV4aXN0cygke19maWxlfSkKCUAke0VDSE9fQ01EfSAiKiog JHtfZmlsZX0gZG9lc24ndCBleGlzdC4gRXhpdGluZy4iOyBleGl0IDEKLmVuZGlmCi5lbmRmb3IK LmZvciBfdXNlciBpbiAke1VTRVJTfQojIF9iZ3BkOio6MTMwOjEzMDpCR1AgRGFlbW9uOi92YXIv ZW1wdHk6L3NiaW4vbm9sb2dpbgoJQGlmICEgJHtHUkVQfSAtaCBeJHtfdXNlcn06ICR7VUlEX0ZJ TEVTfSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gXAoJCSR7RUNIT19DTUR9ICIqKiBDYW5ub3QgZmlu ZCBhbnkgaW5mb3JtYXRpb24gYWJvdXQgdXNlciBcYCR7X3VzZXJ9JyBpbiAke1VJRF9GSUxFU30u IjsgXAoJCWV4aXQgMTsgXAoJZmkKCUBJRlM9IjoiOyAke0dSRVB9IC1oIF4ke191c2VyfTogJHtV SURfRklMRVN9IHwgaGVhZCAtbiAxIHwgd2hpbGUgcmVhZCBsb2dpbiBwYXNzd2QgdWlkIGdpZCBj bGFzcyBjaGFuZ2UgZXhwaXJlIGdlY29zIGhvbWVkaXIgc2hlbGw7IGRvIFwKCQl1aWQ9JCQoKCQk dWlkKyR7VUlEX09GRlNFVH0pKTsgXAoJCWdpZD0kJCgoJCRnaWQrJHtHSURfT0ZGU0VUfSkpOyBc CgkJY2xhc3M9IiQke2NsYXNzOistTCB9JCRjbGFzcyI7IFwKCQlob21lZGlyPSQkKGVjaG8gJCRo b21lZGlyIHwgc2VkICJzfF4vdXNyL2xvY2FsfCR7UFJFRklYfXwiKTsgXAoJCSR7RUNIT19DTUR9 IC1lICJpZiAhICR7UFd9IHVzZXJzaG93ICQkbG9naW4gPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFxu IFwKCQkJZWNobyBcIkNyZWF0aW5nIHVzZXIgJyQkbG9naW4nIHdpdGggdWlkICckJHVpZCcuXCIg XG4gXAoJCQkke1BXfSB1c2VyYWRkICQkbG9naW4gLXUgJCR1aWQgLWcgJCRnaWQgJCRjbGFzcyAt YyBcIiQkZ2Vjb3NcIiAtZCAkJGhvbWVkaXIgLXMgJCRzaGVsbCBcbiBcCgkJCWVsc2UgXG5lY2hv IFwiVXNpbmcgZXhpc3RpbmcgdXNlciAnJCRsb2dpbicuXCIgXG5maSIgPj4gJHtfVUdfT1VUUFVU fTsgXAoJCWNhc2UgJCRob21lZGlyIGluIC98L25vbmV4aXN0ZW50fC92YXIvZW1wdHkpIDs7ICop ICR7RUNIT19DTUR9ICIke0lOU1RBTEx9IC1kIC1nICQkZ2lkIC1vICQkdWlkICQkaG9tZWRpciIg Pj4gJHtfVUdfT1VUUFVUfTs7IGVzYWM7IFwKCWRvbmUKLmVuZGZvcgouaWYgZGVmaW5lZChHUk9V UFMpCi5mb3IgX2dyb3VwIGluICR7R1JPVVBTfQojIG1haWw6Kjo2OnBvc3RmaXgsY2xhbWF2CglA SUZTPSI6IjsgJHtHUkVQfSAtaCBeJHtfZ3JvdXB9OiAke0dJRF9GSUxFU30gfCBoZWFkIC1uIDEg fCB3aGlsZSByZWFkIGdyb3VwIGZvbyBnaWQgbWVtYmVyczsgZG8gXAoJCWdpZD0kJCgoJCRnaWQr JHtHSURfT0ZGU0VUfSkpOyBcCgkJSUZTPSIsIjsgZm9yIF9sb2dpbiBpbiAkJG1lbWJlcnM7IGRv IFwKCQkJZm9yIF91c2VyIGluICR7VVNFUlN9OyBkbyBcCgkJCQlpZiBbICJ4JCR7X3VzZXJ9IiA9 ICJ4JCR7X2xvZ2lufSIgXTsgdGhlbiBcCgkJCQkJJHtFQ0hPX0NNRH0gLWUgImlmICEgJHtQV30g Z3JvdXBzaG93ICR7X2dyb3VwfSB8ICR7R1JFUH0gLXF3ICQke19sb2dpbn07IHRoZW4gXG4gXAoJ CQkJCQllY2hvIFwiQWRkaW5nIHVzZXIgJyQke19sb2dpbn0nIHRvIGdyb3VwICcke19ncm91cH0n LlwiIFxuIFwKCQkJCQkJJHtQV30gZ3JvdXBtb2QgJHtfZ3JvdXB9IC1tICQke19sb2dpbn0gXG5m aSIgPj4gJHtfVUdfT1VUUFVUfTsgXAoJCQkJZmk7IFwKCQkJZG9uZTsgXAoJCWRvbmU7IFwKCWRv bmUKLmVuZGZvcgouZW5kaWYKLmlmIGRlZmluZWQoVVNFUlMpCi5mb3IgX3VzZXIgaW4gJHtVU0VS U30KCUBpZiBbICEgJHtVU0VSU19CTEFDS0xJU1Q6TSR7X3VzZXJ9fSBdOyB0aGVuIFwKCQkke0VD SE9fQ01EfSAiQHVuZXhlYyBpZiAke1BXfSB1c2Vyc2hvdyAke191c2VyfSA+L2Rldi9udWxsIDI+ JjE7IHRoZW4gXAoJCWVjaG8gXCI9PT4gWW91IHNob3VsZCBtYW51YWxseSByZW1vdmUgdGhlIFxc XCIke191c2VyfVxcXCIgdXNlci4gXCI7IGZpIiA+PiAke1RNUFBMSVNUfTsgXAoJZmkKLmVuZGZv cgouZW5kaWYKLmVuZGlmCi5lbmRpZgouZW5kaWYKCi5pZiAhZGVmaW5lZChESVNBQkxFX1NFQ1VS SVRZX0NIRUNLKQouaWYgIXRhcmdldChzZWN1cml0eS1jaGVjaykKc2VjdXJpdHktY2hlY2s6ICR7 VE1QUExJU1R9CiMgU2NhbiBQTElTVCBmb3I6CiMgICAxLiAgc2V0dWdpZCBmaWxlcwojICAgMi4g IGFjY2VwdCgpL3JlY3Zmcm9tKCkgd2hpY2ggaW5kaWNhdGVzIG5ldHdvcmsgbGlzdGVuaW5nIGNh cGFiaWxpdHkKIyAgIDMuICBpbnNlY3VyZSBmdW5jdGlvbnMgKGdldHMvbWt0ZW1wL3RlbXBuYW0v W1hYWF0pCiMgICA0LiAgc3RhcnR1cCBzY3JpcHRzLCBpbiBjb25qdW5jdGlvbiB3aXRoIDIuCiMg ICA1LiAgd29ybGQtd3JpdGFibGUgZmlsZXMvZGlycwojCgktQCR7Uk19IC1mICR7V1JLRElSfS8u UExJU1Quc2V0dWlkICR7V1JLRElSfS8uUExJU1Qud3JpdGFibGUgJHtXUktESVJ9Ly5QTElTVC5v YmpkdW1wOyBcCgkke0FXS30gLXYgcHJlZml4PScke1BSRUZJWH0nICcgXAoJCW1hdGNoKCQkMCwg L15AY3dkIC8pIHsgcHJlZml4ID0gc3Vic3RyKCQkMCwgUlNUQVJUICsgUkxFTkdUSCk7IGlmIChw cmVmaXggPT0gIi8iKSBwcmVmaXg9IiI7IG5leHQ7IH0gXAoJCS9eQC8geyBuZXh0OyB9IFwKCQkv XlwvLyB7IHByaW50OyBuZXh0OyB9IFwKCQl7IHByaW50IHByZWZpeCAiLyIgJCQwOyB9IFwKCScg JHtUTVBQTElTVH0gPiAke1dSS0RJUn0vLlBMSVNULmZsYXR0ZW5lZDsgXAoJJHtUUn0gJ1xuJyAn XDAnIDwgJHtXUktESVJ9Ly5QTElTVC5mbGF0dGVuZWQgXAoJfCAke1hBUkdTfSAtMCAtSiAlICR7 RklORH0gJSAtcHJ1bmUgISAtdHlwZSBsIC10eXBlIGYgXCggLXBlcm0gLTQwMDAgLW8gLXBlcm0g LTIwMDAgXCkgXCggLXBlcm0gLTAwMTAgLW8gLXBlcm0gLTAwMDEgXCkgMj4gL2Rldi9udWxsID4g JHtXUktESVJ9Ly5QTElTVC5zZXR1aWQ7IFwKCSR7VFJ9ICdcbicgJ1wwJyA8ICR7V1JLRElSfS8u UExJU1QuZmxhdHRlbmVkIFwKCXwgJHtYQVJHU30gLTAgLUogJSAke0ZJTkR9ICUgLXBydW5lIC1w ZXJtIC0wMDAyIFwhIC10eXBlIGwgMj4gL2Rldi9udWxsID4gJHtXUktESVJ9Ly5QTElTVC53cml0 YWJsZTsgXAoJJHtUUn0gJ1xuJyAnXDAnIDwgJHtXUktESVJ9Ly5QTElTVC5mbGF0dGVuZWQgXAoJ fCAke1hBUkdTfSAtMCAtSiAlICR7RklORH0gJSAtcHJ1bmUgISAtdHlwZSBsIC10eXBlIGYgLXBy aW50MCAyPiAvZGV2L251bGwgXAoJfCAke1hBUkdTfSAtMCAtbiAxICR7T0JKRFVNUH0gLVIgMj4g L2Rldi9udWxsID4gJHtXUktESVJ9Ly5QTElTVC5vYmpkdW1wOyBcCglpZiBcCgkJISAke0FXS30g LXYgYXVkaXQ9IiQke1BPUlRTX0FVRElUfSIgLWYgJHtTQ1JJUFRTRElSfS9zZWN1cml0eS1jaGVj ay5hd2sgXAoJCSAgJHtXUktESVJ9Ly5QTElTVC5mbGF0dGVuZWQgJHtXUktESVJ9Ly5QTElTVC5v YmpkdW1wICR7V1JLRElSfS8uUExJU1Quc2V0dWlkICR7V1JLRElSfS8uUExJU1Qud3JpdGFibGU7 IFwKCXRoZW4gXAoJCXd3d19zaXRlPSQkKGNkICR7LkNVUkRJUn0gJiYgJHtNQUtFfSB3d3ctc2l0 ZSk7IFwKCSAgICBpZiBbICEgLXogIiQke3d3d19zaXRlfSIgXTsgdGhlbiBcCgkJCSR7RUNIT19N U0d9OyBcCgkJCSR7RUNIT19NU0d9ICIgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgYW5kIGNv bnRhY3QgZGV0YWlscyBhYm91dCB0aGUgc2VjdXJpdHkiOyBcCgkJCSR7RUNIT19NU0d9ICIgICAg ICBzdGF0dXMgb2YgdGhpcyBzb2Z0d2FyZSwgc2VlIHRoZSBmb2xsb3dpbmcgd2VicGFnZTogIjsg XAoJCQkke0VDSE9fTVNHfSAiJCR7d3d3X3NpdGV9IjsgXAoJCWZpOyBcCglmaQouZW5kaWYKLmVs c2UgIyBpLmUuIGRlZmluZWQoRElTQUJMRV9TRUNVUklUWV9DSEVDSykKc2VjdXJpdHktY2hlY2s6 CglAJHtFQ0hPX01TR30gIiAgICAgIFdBUk5JTkc6IFNlY3VyaXR5IGNoZWNrIGhhcyBiZWVuIGRp c2FibGVkLiIKLmVuZGlmICMgIWRlZmluZWQoRElTQUJMRV9TRUNVUklUWV9DSEVDSykKCiMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMKIyBTa2VsZXRvbiB0YXJnZXRzIHN0YXJ0IGhlcmUKIwojIFlvdSBzaG91bGRuJ3QgaGF2ZSB0 byBjaGFuZ2UgdGhlc2UuICBFaXRoZXIgYWRkIHRoZSBwcmUtKiBvcgojIHBvc3QtKiB0YXJnZXRz L3NjcmlwdHMgb3IgcmVkZWZpbmUgdGhlIGRvLSogdGFyZ2V0cy4gIFRoZXNlCiMgdGFyZ2V0cyBk b24ndCBkbyBhbnl0aGluZyBvdGhlciB0aGFuIGNoZWNraW5nIGZvciBjb29raWVzIGFuZAojIGNh bGwgdGhlIG5lY2Vzc2FyeSB0YXJnZXRzL3NjcmlwdHMuCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCmV4dHJhY3QtbWVzc2Fn ZToKCUAke0VDSE9fTVNHfSAiPT09PiAgRXh0cmFjdGluZyBmb3IgJHtQS0dOQU1FfSIKcGF0Y2gt bWVzc2FnZToKCUAke0VDSE9fTVNHfSAiPT09PiAgUGF0Y2hpbmcgZm9yICR7UEtHTkFNRX0iCmNv bmZpZ3VyZS1tZXNzYWdlOgoJQCR7RUNIT19NU0d9ICI9PT0+ICBDb25maWd1cmluZyBmb3IgJHtQ S0dOQU1FfSIKYnVpbGQtbWVzc2FnZToKCUAke0VDSE9fTVNHfSAiPT09PiAgQnVpbGRpbmcgZm9y ICR7UEtHTkFNRX0iCnN0YWdlLW1lc3NhZ2U6CglAJHtFQ0hPX01TR30gIj09PT4gIFN0YWdpbmcg Zm9yICR7UEtHTkFNRX0iCmluc3RhbGwtbWVzc2FnZToKCUAke0VDSE9fTVNHfSAiPT09PiAgSW5z dGFsbGluZyBmb3IgJHtQS0dOQU1FfSIKcGFja2FnZS1tZXNzYWdlOgoJQCR7RUNIT19NU0d9ICI9 PT0+ICBCdWlsZGluZyBwYWNrYWdlIGZvciAke1BLR05BTUV9IgoKIyBFbXB0eSBwcmUtKiBhbmQg cG9zdC0qIHRhcmdldHMKCi5mb3Igc3RhZ2UgaW4gcHJlIHBvc3QKLmZvciBuYW1lIGluIHBrZyBj aGVjay1zYW5pdHkgZmV0Y2ggZXh0cmFjdCBwYXRjaCBjb25maWd1cmUgYnVpbGQgc3RhZ2UgaW5z dGFsbCBwYWNrYWdlCgouaWYgZXhpc3RzKCR7U0NSSVBURElSfS8ke3N0YWdlfS0ke25hbWV9KQou aWYgIXRhcmdldCgke3N0YWdlfS0ke25hbWV9LXNjcmlwdCkKJHtzdGFnZX0tJHtuYW1lfS1zY3Jp cHQ6CglAIGNkICR7LkNVUkRJUn0gJiYgJHtTRVRFTlZ9ICR7U0NSSVBUU19FTlZ9ICR7U0h9IFwK CQkJJHtTQ1JJUFRESVJ9LyR7LlRBUkdFVDpTLy1zY3JpcHQkLy99Ci5lbmRpZgouZW5kaWYKCi5l bmRmb3IKLmVuZGZvcgoKLmlmICF0YXJnZXQocHJldHR5LXByaW50LXd3dy1zaXRlKQpwcmV0dHkt cHJpbnQtd3d3LXNpdGU6CglAd3d3X3NpdGU9JCQoY2QgJHsuQ1VSRElSfSAmJiAke01BS0V9IHd3 dy1zaXRlKTsgXAoJaWYgWyAtbiAiJCR7d3d3X3NpdGV9IiBdOyB0aGVuIFwKCQkke0VDSE9fTVNH fSAtbiAiIGFuZC9vciB2aXNpdCB0aGUgIjsgXAoJCSR7RUNIT19NU0d9IC1uICI8YSBocmVmPVwi JCR7d3d3X3NpdGV9XCI+d2ViIHNpdGU8L2E+IjsgXAoJCSR7RUNIT19NU0d9ICIgZm9yIGZ1cnRo ZXIgaW5mb3JtYXRpb24iOyBcCglmaQouZW5kaWYKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBTb21lIG1vcmUgdGFyZ2V0 cyBzdXBwbGllZCBmb3IgdXNlcnMnIGNvbnZlbmllbmNlCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiMgQ2hlY2twYXRjaAoj CiMgU3BlY2lhbCB0YXJnZXQgdG8gdmVyaWZ5IHBhdGNoZXMKCi5pZiAhdGFyZ2V0KGNoZWNrcGF0 Y2gpCmNoZWNrcGF0Y2g6CglAY2QgJHsuQ1VSRElSfSAmJiAke01BS0V9ICR7UEFUQ0hfU0lMRU5U fSBQQVRDSF9DSEVDS19PTkxZPXllcyAke19QQVRDSF9ERVB9ICR7X1BBVENIX1JFQUxfU0VRfQou ZW5kaWYKCiMgUmVpbnN0YWxsCiMKIyBTcGVjaWFsIHRhcmdldCB0byByZS1ydW4gaW5zdGFsbAoK LmlmICF0YXJnZXQocmVpbnN0YWxsKQpyZWluc3RhbGw6CglAJHtSTX0gLWYgJHtJTlNUQUxMX0NP T0tJRX0gJHtQQUNLQUdFX0NPT0tJRX0KCUBjZCAkey5DVVJESVJ9ICYmIERFUEVORFNfVEFSR0VU PSIke0RFUEVORFNfVEFSR0VUfSIgJHtNQUtFfSAtREZPUkNFX1BLR19SRUdJU1RFUiBpbnN0YWxs Ci5lbmRpZgoKLmlmICF0YXJnZXQocmVzdGFnZSkKcmVzdGFnZToKCUAke1JNfSAtcmYgJHtTVEFH RURJUn0gJHtTVEFHRV9DT09LSUV9ICR7SU5TVEFMTF9DT09LSUV9ICR7UEFDS0FHRV9DT09LSUV9 CglAY2QgJHsuQ1VSRElSfSAmJiAke01BS0V9IHN0YWdlCi5lbmRpZgoKIyBEZWluc3RhbGwKIwoj IFNwZWNpYWwgdGFyZ2V0IHRvIHJlbW92ZSBpbnN0YWxsYXRpb24KCi5pZiAhdGFyZ2V0KGRlaW5z dGFsbCkKZGVpbnN0YWxsOgouaWYgZGVmaW5lZChVSUQpICYmICR7VUlEfSAhPSAwICYmICFkZWZp bmVkKElOU1RBTExfQVNfVVNFUikKCUAke0VDSE9fTVNHfSAiPT09PiAgU3dpdGNoaW5nIHRvIHJv b3QgY3JlZGVudGlhbHMgZm9yICckey5UQVJHRVR9JyB0YXJnZXQiCglAY2QgJHsuQ1VSRElSfSAm JiBcCgkJJHtTVV9DTUR9ICIke01BS0V9ICR7LlRBUkdFVH0iCglAJHtFQ0hPX01TR30gIj09PT4g IFJldHVybmluZyB0byB1c2VyIGNyZWRlbnRpYWxzIgouZWxzZQoJQCR7RUNIT19NU0d9ICI9PT0+ ICBEZWluc3RhbGxpbmcgZm9yICR7UEtHQkFTRX0iCglAaWYgJHtQS0dfSU5GT30gLWUgJHtQS0dC QVNFfTsgdGhlbiBcCgkJcD1gJHtQS0dfSU5GT30gLXEgLU8gJHtQS0dCQVNFfWA7IFwKCQkke0VD SE9fTVNHfSAiPT09PiAgIERlaW5zdGFsbGluZyAkJHtwfSI7IFwKCQkke1BLR19ERUxFVEV9IC1m ICR7UEtHQkFTRX0gOyBcCgllbHNlIFwKCQkke0VDSE9fTVNHfSAiPT09PiAgICR7UEtHQkFTRX0g bm90IGluc3RhbGxlZCwgc2tpcHBpbmciOyBcCglmaQoJQCR7Uk19IC1mICR7SU5TVEFMTF9DT09L SUV9ICR7UEFDS0FHRV9DT09LSUV9Ci5lbmRpZgouZW5kaWYKCiMgRGVpbnN0YWxsLWFsbAojCiMg U3BlY2lhbCB0YXJnZXQgdG8gcmVtb3ZlIGluc3RhbGxhdGlvbiBvZiBhbGwgcG9ydHMgb2YgdGhl IHNhbWUgb3JpZ2luCgouaWYgIXRhcmdldChkZWluc3RhbGwtYWxsKQpkZWluc3RhbGwtYWxsOgou aWYgJHtVSUR9ICE9IDAgJiYgIWRlZmluZWQoSU5TVEFMTF9BU19VU0VSKQoJQCR7RUNIT19NU0d9 ICI9PT0+ICBTd2l0Y2hpbmcgdG8gcm9vdCBjcmVkZW50aWFscyBmb3IgJyR7LlRBUkdFVH0nIHRh cmdldCIKCUBjZCAkey5DVVJESVJ9ICYmIFwKCQkke1NVX0NNRH0gIiR7TUFLRX0gJHsuVEFSR0VU fSIKCUAke0VDSE9fTVNHfSAiPT09PiAgUmV0dXJuaW5nIHRvIHVzZXIgY3JlZGVudGlhbHMiCi5l bHNlCglAJHtFQ0hPX01TR30gIj09PT4gIERlaW5zdGFsbGluZyBmb3IgJHtQS0dPUklHSU59IgoJ QGRlaW5zdGFsbF9uYW1lcz1gJHtQS0dfSU5GT30gLXEgLU8gJHtQS0dPUklHSU59YDsgXAoJZm9y IG9sZHBrZ29yaWdpbiBpbiAkJCgke0dSRVB9ICJ8JHtQS0dPUklHSU59fCIgJHtQT1JUU0RJUn0v TU9WRUQgfCAke0NVVH0gLWYgMSAtZCAnfCcgfCAke1NPUlR9IC11KTsgZG8gXAoJCWRlaW5zdGFs bF9uYW1lcz0iJCR7ZGVpbnN0YWxsX25hbWVzfSAkJCgke1BLR19JTkZPfSAtcSAtTyAkJHtvbGRw a2dvcmlnaW59KSI7IFwKCWRvbmU7IFwKCWlmIFsgLW4gIiQke2RlaW5zdGFsbF9uYW1lc30iIF07 IHRoZW4gXAoJCWZvciBkIGluICQke2RlaW5zdGFsbF9uYW1lc307IGRvIFwKCQkJJHtFQ0hPX01T R30gIj09PT4gICBEZWluc3RhbGxpbmcgJCR7ZH0iOyBcCgkJCSR7UEtHX0RFTEVURX0gLWYgJCR7 ZH07IFwKCQlkb25lOyBcCgllbHNlIFwKCQkke0VDSE9fTVNHfSAiPT09PiAgICR7UEtHT1JJR0lO fSBub3QgaW5zdGFsbGVkLCBza2lwcGluZyI7IFwKCWZpOyBcCgkke1JNfSAtZiAke0lOU1RBTExf Q09PS0lFfSAke1BBQ0tBR0VfQ09PS0lFfQouZW5kaWYKLmVuZGlmCgojIENsZWFuaW5nIHVwCgou aWYgIXRhcmdldChkby1jbGVhbikKZG8tY2xlYW46CglAaWYgWyAtZCAke1dSS0RJUn0gXTsgdGhl biBcCgkJaWYgWyAtdyAke1dSS0RJUn0gXTsgdGhlbiBcCgkJCSR7Uk19IC1yZiAke1dSS0RJUn07 IFwKCQllbHNlIFwKCQkJJHtFQ0hPX01TR30gIj09PT4gICAke1dSS0RJUn0gbm90IHdyaXRhYmxl LCBza2lwcGluZyI7IFwKCQlmaTsgXAoJZmkKLmVuZGlmCgouaWYgIXRhcmdldChjbGVhbikKY2xl YW46Ci5pZiAhZGVmaW5lZChOT0NMRUFOREVQRU5EUykKCUBjZCAkey5DVVJESVJ9ICYmICR7TUFL RX0gbGltaXRlZC1jbGVhbi1kZXBlbmRzCi5lbmRpZgoJQCR7RUNIT19NU0d9ICI9PT0+ICBDbGVh bmluZyBmb3IgJHtQS0dOQU1FfSIKLmlmIHRhcmdldChwcmUtY2xlYW4pCglAY2QgJHsuQ1VSRElS fSAmJiAke01BS0V9IHByZS1jbGVhbgouZW5kaWYKCUBjZCAkey5DVVJESVJ9ICYmICR7TUFLRX0g ZG8tY2xlYW4KLmlmIHRhcmdldChwb3N0LWNsZWFuKQoJQGNkICR7LkNVUkRJUn0gJiYgJHtNQUtF fSBwb3N0LWNsZWFuCi5lbmRpZgouZW5kaWYKCi5pZiAhdGFyZ2V0KHByZS1kaXN0Y2xlYW4pCnBy ZS1kaXN0Y2xlYW46CglAJHtET19OQURBfQouZW5kaWYKCi5pZiAhdGFyZ2V0KGRpc3RjbGVhbikK ZGlzdGNsZWFuOiBwcmUtZGlzdGNsZWFuIGNsZWFuCglAY2QgJHsuQ1VSRElSfSAmJiAke01BS0V9 IGRlbGV0ZS1kaXN0ZmlsZXMgUkVTVFJJQ1RFRF9GSUxFUz0iJHtfRElTVEZJTEVTfSAke19QQVRD SEZJTEVTfSIKLmVuZGlmCgouaWYgIXRhcmdldChkZWxldGUtZGlzdGZpbGVzKQpkZWxldGUtZGlz dGZpbGVzOgoJQCR7RUNIT19NU0d9ICI9PT0+ICBEZWxldGluZyBkaXN0ZmlsZXMgZm9yICR7UEtH TkFNRX0iCglAKGlmIFsgIlgke1JFU1RSSUNURURfRklMRVN9IiAhPSAiWCIgLWEgLWQgJHtfRElT VERJUn0gXTsgdGhlbiBcCgkJY2QgJHtfRElTVERJUn07IFwKCQlmb3IgZmlsZSBpbiAke1JFU1RS SUNURURfRklMRVN9OyBkbyBcCgkJCSR7Uk19IC1mICQke2ZpbGV9OyBcCgkJCWRpcj0kJHtmaWxl JS8qfTsgXAoJCQlpZiBbICIkJHtkaXJ9IiAhPSAiJCR7ZmlsZX0iIF07IHRoZW4gXAoJCQkJJHtS TURJUn0gLXAgJCR7ZGlyfSA+L2Rldi9udWxsIDI+JjEgfHwgOjsgXAoJCQlmaTsgXAoJCWRvbmU7 IFwKCWZpKQouaWYgZGVmaW5lZChESVNUX1NVQkRJUikKCS1AJHtSTURJUn0gJHtfRElTVERJUn0g Pi9kZXYvbnVsbCAyPiYxIHx8ICR7VFJVRX0KLmVuZGlmCi5lbmRpZgoKLmlmICF0YXJnZXQoZGVs ZXRlLWRpc3RmaWxlcy1saXN0KQpkZWxldGUtZGlzdGZpbGVzLWxpc3Q6CglAJHtFQ0hPX0NNRH0g IiMgJHtQS0dOQU1FfSIKCUBpZiBbICJYJHtSRVNUUklDVEVEX0ZJTEVTfSIgIT0gIlgiIF07IHRo ZW4gXAoJCWZvciBmaWxlIGluICR7UkVTVFJJQ1RFRF9GSUxFU307IGRvIFwKCQkJJHtFQ0hPX0NN RH0gIlsgLWYgJHtfRElTVERJUn0vJCRmaWxlIF0gJiYgKCR7RUNIT19DTUR9IGRlbGV0aW5nICR7 X0RJU1RESVJ9LyQkZmlsZTsgJHtSTX0gLWYgJHtfRElTVERJUn0vJCRmaWxlKSI7IFwKCQkJZGly PSQke2ZpbGUlLyp9OyBcCgkJCWlmIFsgIiQke2Rpcn0iICE9ICIkJHtmaWxlfSIgXTsgdGhlbiBc CgkJCQkke0VDSE9fQ01EfSAiKGNkICR7X0RJU1RESVJ9ICYmICR7Uk1ESVJ9IC1wICQke2Rpcn0g Mj4vZGV2L251bGwpIjsgXAoJCQlmaTsgXAoJCWRvbmU7IFwKCWZpCi5pZiBkZWZpbmVkKERJU1Rf U1VCRElSKQoJQCR7RUNIT19DTUR9ICIke1JNRElSfSAke19ESVNURElSfSAyPi9kZXYvbnVsbCB8 fCAke1RSVUV9IgouZW5kaWYKLmVuZGlmCgojIFByaW50cyBvdXQgYSBsaXN0IG9mIGZpbGVzIHRv IGZldGNoICh1c2VmdWwgdG8gZG8gYSBiYXRjaCBmZXRjaCkKCi5pZiAhdGFyZ2V0KGZldGNoLWxp c3QpCmZldGNoLWxpc3Q6CglAJHtNS0RJUn0gJHtfRElTVERJUn0KCUAoY2QgJHtfRElTVERJUn07 IFwKCSAke19NQVNURVJfU0lURVNfRU5WfSA7IFwKCSBmb3IgX2ZpbGUgaW4gJHtESVNURklMRVN9 OyBkbyBcCgkJZmlsZT1gJHtFQ0hPX0NNRH0gJCRfZmlsZSB8ICR7U0VEfSAtRSAtZSAncy86W146 XSskJC8vJ2AgOyBcCgkJaWYgWyAkJF9maWxlID0gJCRmaWxlIF07IHRoZW4JXAoJCQlzZWxlY3Q9 Jyc7CVwKCQllbHNlCVwKCQkJc2VsZWN0PWAke0VDSE9fQ01EfSAkJHtfZmlsZSMjKjp9IHwgJHtT RUR9IC1lICdzLywvIC9nJ2AgOwlcCgkJZmk7CVwKCQlpZiBbICEgLWYgJCRmaWxlIC1hICEgLWYg JCR7ZmlsZSMjKi99IF07IHRoZW4gXAoJCQlpZiBbICEgLXogIiQkc2VsZWN0IiBdIDsgdGhlbiBc CgkJCQlfX01BU1RFUl9TSVRFU19UTVA9IDsgXAoJCQkJZm9yIGdyb3VwIGluICQkc2VsZWN0OyBk byBcCgkJCQkJaWYgWyAhIC16IFwkJHtfTUFTVEVSX1NJVEVTXyQke2dyb3VwfX0gXSA7IHRoZW4g XAoJCQkJCQlldmFsIF9fX01BU1RFUl9TSVRFU19UTVA9XCQke19NQVNURVJfU0lURVNfJCR7Z3Jv dXB9fSA7IFwKCQkJCQkJX19NQVNURVJfU0lURVNfVE1QPSIkJHtfX01BU1RFUl9TSVRFU19UTVB9 ICQke19fX01BU1RFUl9TSVRFU19UTVB9IiA7IFwKCQkJCQlmaTsgXAoJCQkJZG9uZTsgXAoJCQkJ X19fTUFTVEVSX1NJVEVTX1RNUD0gOyBcCgkJCQlTT1JURURfTUFTVEVSX1NJVEVTX0NNRF9UTVA9 IiR7RUNIT19DTUR9ICR7X01BU1RFUl9TSVRFX09WRVJSSURFfSBgJHtFQ0hPX0NNRH0gJCR7X19N QVNURVJfU0lURVNfVE1QfSB8ICR7QVdLfSAnJHtNQVNURVJfU09SVF9BV0s6U3xcXHxcXFxcfGd9 J2AgJHtfTUFTVEVSX1NJVEVfQkFDS1VQfSIgOyBcCgkJCWVsc2UgXAoJCQkJU09SVEVEX01BU1RF Ul9TSVRFU19DTURfVE1QPSIke1NPUlRFRF9NQVNURVJfU0lURVNfREVGQVVMVF9DTUR9IiA7IFwK CQkJZmk7IFwKCQkJZm9yIHNpdGUgaW4gYGV2YWwgJCRTT1JURURfTUFTVEVSX1NJVEVTX0NNRF9U TVAgJHtfUkFORE9NSVpFX1NJVEVTfWA7IGRvIFwKCQkJCWlmIFsgISAteiAiYCR7RUNIT19DTUR9 ICR7Tk9GRVRDSEZJTEVTfSB8ICR7R1JFUH0gLXcgJCR7ZmlsZX1gIiBdOyB0aGVuIFwKCQkJCQlp ZiBbIC16ICJgJHtFQ0hPX0NNRH0gJHtNQVNURVJfU0lURV9PVkVSUklERX0gfCAke0dSRVB9IC13 ICQke3NpdGV9YCIgXTsgdGhlbiBcCgkJCQkJCWNvbnRpbnVlOyBcCgkJCQkJZmk7IFwKCQkJCWZp OyBcCgkJCQlESVI9JHtESVNUX1NVQkRJUn07XAoJCQkJQ0tTSVpFPWBhbGc9U0laRTsgJHtESVNU SU5GT19EQVRBfWA7IFwKCQkJCWNhc2UgJCR7ZmlsZX0gaW4gXAoJCQkJKi8qKQlhcmdzPSItbyAk JHtmaWxlfSAkJHtzaXRlfSQke2ZpbGV9Ijs7IFwKCQkJCSopCQlhcmdzPSQke3NpdGV9JCR7Zmls ZX07OyBcCgkJCQllc2FjOyBcCgkJCQkke0VDSE9fQ01EfSAtbiAke1NFVEVOVn0gJHtGRVRDSF9F TlZ9ICR7RkVUQ0hfQ01EfSAke0ZFVENIX0JFRk9SRV9BUkdTfSAkJHthcmdzfSAiJHtGRVRDSF9B RlRFUl9BUkdTfSIgJ3x8ICcgOyBcCgkJCWRvbmU7IFwKCQkJJHtFQ0hPX0NNRH0gIiR7RUNIT19D TUR9ICQke2ZpbGV9IG5vdCBmZXRjaGVkIiA7IFwKCQlmaTsgXAoJZG9uZSkKLmlmIGRlZmluZWQo UEFUQ0hGSUxFUykKCUAoY2QgJHtfRElTVERJUn07IFwKCSAke19QQVRDSF9TSVRFU19FTlZ9IDsg XAoJIGZvciBfZmlsZSBpbiAke1BBVENIRklMRVN9OyBkbyBcCgkJZmlsZT1gJHtFQ0hPX0NNRH0g JCRfZmlsZSB8ICR7U0VEfSAtRSAtZSAncy86W14tOl1bXjpdKiQkLy8nYCA7IFwKCQlpZiBbICQk X2ZpbGUgPSAkJGZpbGUgXTsgdGhlbglcCgkJCXNlbGVjdD0nJzsJXAoJCWVsc2UJXAoJCQlzZWxl Y3Q9YCR7RUNIT19DTUR9ICQke19maWxlIyMqOn0gfCAke1NFRH0gLWUgJ3MvLC8gL2cnYCA7CVwK CQlmaTsJXAoJCWZpbGU9YCR7RUNIT19DTUR9ICQkZmlsZSB8ICR7U0VEfSAtRSAtZSAncy86LVte Ol0rJCQvLydgIDsgXAoJCWlmIFsgISAtZiAkJGZpbGUgLWEgISAtZiAkJHtmaWxlIyMqL30gXTsg dGhlbiBcCgkJCWlmIFsgISAteiAiJCRzZWxlY3QiIF0gOyB0aGVuIFwKCQkJCV9fUEFUQ0hfU0lU RVNfVE1QPSA7IFwKCQkJCWZvciBncm91cCBpbiAkJHNlbGVjdDsgZG8gXAoJCQkJCWlmIFsgISAt eiBcJCR7X1BBVENIX1NJVEVTXyQke2dyb3VwfX0gXSA7IHRoZW4gXAoJCQkJCQlldmFsIF9fX1BB VENIX1NJVEVTX1RNUD1cJCR7X1BBVENIX1NJVEVTXyQke2dyb3VwfX0gOyBcCgkJCQkJCV9fUEFU Q0hfU0lURVNfVE1QPSIkJHtfX1BBVENIX1NJVEVTX1RNUH0gJCR7X19fUEFUQ0hfU0lURVNfVE1Q fSIgOyBcCgkJCQlmaTsgXAoJCQkJZG9uZTsgXAoJCQkJX19fUEFUQ0hfU0lURVNfVE1QPSA7IFwK CQkJCVNPUlRFRF9QQVRDSF9TSVRFU19DTURfVE1QPSIke0VDSE9fQ01EfSAke19NQVNURVJfU0lU RV9PVkVSUklERX0gYCR7RUNIT19DTUR9ICQke19fUEFUQ0hfU0lURVNfVE1QfSB8ICR7QVdLfSAn JHtNQVNURVJfU09SVF9BV0s6U3xcXHxcXFxcfGd9J2AgJHtfTUFTVEVSX1NJVEVfQkFDS1VQfSIg OyBcCgkJCWVsc2UgXAoJCQkJU09SVEVEX1BBVENIX1NJVEVTX0NNRF9UTVA9IiR7U09SVEVEX1BB VENIX1NJVEVTX0RFRkFVTFRfQ01EfSIgOyBcCgkJCWZpOyBcCgkJCWZvciBzaXRlIGluIGBldmFs ICQkU09SVEVEX1BBVENIX1NJVEVTX0NNRF9UTVAgJHtfUkFORE9NSVpFX1NJVEVTfWA7IGRvIFwK CQkJCUNLU0laRT1gYWxnPVNJWkU7ICR7RElTVElORk9fREFUQX1gOyBcCgkJCQljYXNlICQke2Zp bGV9IGluIFwKCQkJCSovKikJYXJncz0iLW8gJCR7ZmlsZX0gJCR7c2l0ZX0kJHtmaWxlfSI7OyBc CgkJCQkqKQkJYXJncz0kJHtzaXRlfSQke2ZpbGV9OzsgXAoJCQkJZXNhYzsgXAoJCQkJJHtFQ0hP X0NNRH0gLW4gJHtTRVRFTlZ9ICR7RkVUQ0hfRU5WfSAke0ZFVENIX0NNRH0gJHtGRVRDSF9CRUZP UkVfQVJHU30gJCR7YXJnc30gIiR7RkVUQ0hfQUZURVJfQVJHU30iICd8fCAnIDsgXAoJCQlkb25l OyBcCgkJCSR7RUNIT19DTUR9ICIke0VDSE9fQ01EfSAkJHtmaWxlfSBub3QgZmV0Y2hlZCIgOyBc CgkJZmk7IFwKCSBkb25lKQouZW5kaWYKLmVuZGlmCgouaWYgIXRhcmdldChmZXRjaC11cmwtbGlz dC1pbnQpCmZldGNoLXVybC1saXN0LWludDoKCUAke01LRElSfSAke19ESVNURElSfQoJQChjZCAk e19ESVNURElSfTsgXAoJJHtfTUFTVEVSX1NJVEVTX0VOVn07IFwKCWZvciBfZmlsZSBpbiAke0RJ U1RGSUxFU307IGRvIFwKCQlmaWxlPWAke0VDSE9fQ01EfSAkJF9maWxlIHwgJHtTRUR9IC1FIC1l ICdzLzpbXjpdKyQkLy8nYCA7IFwKCQkJZmlsZXB0bj1gJHtFQ0hPX0NNRH0gJCRmaWxlIHwgJHtT RUR9ICdzfC98XFxcXC98ZztzL1wuL1xcXFwuL2c7cy9cKy9cXFxcKy9nO3MvXD8vXFxcXD8vZydg IDsgXAoJCWlmIFsgJCRfZmlsZSA9ICQkZmlsZSBdOyB0aGVuCVwKCQkJc2VsZWN0PScnOwlcCgkJ ZWxzZQlcCgkJCXNlbGVjdD1gJHtFQ0hPX0NNRH0gJCR7X2ZpbGUjIyo6fSB8ICR7U0VEfSAtZSAn cy8sLyAvZydgIDsJXAoJCWZpOwlcCgkJaWYgWyAhIC16ICIke0xJU1RBTEx9IiAtbyAhIC1mICQk ZmlsZSAtYSAhIC1mICQke2ZpbGUjIyovfSBdOyB0aGVuIFwKCQkJaWYgWyAhIC16ICIkJHNlbGVj dCIgXSA7IHRoZW4gXAoJCQkJX19NQVNURVJfU0lURVNfVE1QPSA7IFwKCQkJCWZvciBncm91cCBp biAkJHNlbGVjdDsgZG8gXAoJCQkJCWlmIFsgISAteiBcJCR7X01BU1RFUl9TSVRFU18kJHtncm91 cH19IF0gOyB0aGVuIFwKCQkJCQkJZXZhbCBfX19NQVNURVJfU0lURVNfVE1QPVwkJHtfTUFTVEVS X1NJVEVTXyQke2dyb3VwfX0gOyBcCgkJCQkJCV9fTUFTVEVSX1NJVEVTX1RNUD0iJCR7X19NQVNU RVJfU0lURVNfVE1QfSAkJHtfX19NQVNURVJfU0lURVNfVE1QfSIgOyBcCgkJCQkJZmkgXAoJCQkJ ZG9uZTsgXAoJCQkJX19fTUFTVEVSX1NJVEVTX1RNUD0gOyBcCgkJCQlTT1JURURfTUFTVEVSX1NJ VEVTX0NNRF9UTVA9IiR7RUNIT19DTUR9ICR7X01BU1RFUl9TSVRFX09WRVJSSURFfSBgJHtFQ0hP X0NNRH0gJCR7X19NQVNURVJfU0lURVNfVE1QfSB8ICR7QVdLfSAnJHtNQVNURVJfU09SVF9BV0s6 U3xcXHxcXFxcfGd9J2AgJHtfTUFTVEVSX1NJVEVfQkFDS1VQfSIgOyBcCgkJCWVsc2UgXAoJCQkJ U09SVEVEX01BU1RFUl9TSVRFU19DTURfVE1QPSIke1NPUlRFRF9NQVNURVJfU0lURVNfREVGQVVM VF9DTUR9IiA7IFwKCQkJZmkgOyBcCgkJCWZvciBzaXRlIGluIGBldmFsICQkU09SVEVEX01BU1RF Ul9TSVRFU19DTURfVE1QICR7X1JBTkRPTUlaRV9TSVRFU31gOyBkbyBcCgkJCQljYXNlICQke2Zp bGV9IGluIFwKCQkJCSovKikJYXJncz0iLW8gJCR7ZmlsZX0gJCR7c2l0ZX0kJHtmaWxlfSI7OyBc CgkJCQkqKQkJYXJncz0kJHtzaXRlfSQke2ZpbGV9OzsgXAoJCQkJZXNhYzsgXAoJCQkJJHtFQ0hP X0NNRH0gJCR7YXJnc30gOyBcCgkJCWRvbmU7IFwKCQlmaSBcCglkb25lKQouaWYgZGVmaW5lZChQ QVRDSEZJTEVTKQoJQChjZCAke19ESVNURElSfTsgXAoJJHtfUEFUQ0hfU0lURVNfRU5WfSA7IFwK CWZvciBfZmlsZSBpbiAke1BBVENIRklMRVN9OyBkbyBcCgkJZmlsZT1gJHtFQ0hPX0NNRH0gJCRf ZmlsZSB8ICR7U0VEfSAtRSAtZSAncy86W14tOl1bXjpdKiQkLy8nYCA7IFwKCQlpZiBbICQkX2Zp bGUgPSAkJGZpbGUgXTsgdGhlbglcCgkJCXNlbGVjdD0nJzsJXAoJCWVsc2UJXAoJCQlzZWxlY3Q9 YCR7RUNIT19DTUR9ICQke19maWxlIyMqOn0gfCAke1NFRH0gLWUgJ3MvLC8gL2cnYCA7CVwKCQlm aTsJXAoJCWZpbGU9YCR7RUNIT19DTUR9ICQkZmlsZSB8ICR7U0VEfSAtRSAtZSAncy86LVteOl0r JCQvLydgIDsgXAoJCWZpbGVwdG49YCR7RUNIT19DTUR9ICQkZmlsZSB8ICR7U0VEfSAnc3wvfFxc XFwvfGc7cy9cLi9cXFxcLi9nO3MvXCsvXFxcXCsvZztzL1w/L1xcXFw/L2cnYCA7IFwKCQlpZiBb ICEgLXogIiR7TElTVEFMTH0iIC1vICEgLWYgJCRmaWxlIC1hICEgLWYgJCR7ZmlsZSMjKi99IF07 IHRoZW4gXAoJCQlpZiBbICEgLXogIiQkc2VsZWN0IiBdIDsgdGhlbiBcCgkJCQlfX1BBVENIX1NJ VEVTX1RNUD0gOyBcCgkJCQlmb3IgZ3JvdXAgaW4gJCRzZWxlY3Q7IGRvIFwKCQkJCQlpZiBbICEg LXogXCQke19QQVRDSF9TSVRFU18kJHtncm91cH19IF0gOyB0aGVuIFwKCQkJCQkJZXZhbCBfX19Q QVRDSF9TSVRFU19UTVA9XCQke19QQVRDSF9TSVRFU18kJHtncm91cH19IDsgXAoJCQkJCQlfX1BB VENIX1NJVEVTX1RNUD0iJCR7X19QQVRDSF9TSVRFU19UTVB9ICQke19fX1BBVENIX1NJVEVTX1RN UH0iIDsgXAoJCQkJCWZpIFwKCQkJCWRvbmU7IFwKCQkJCV9fX1BBVENIX1NJVEVTX1RNUD0gOyBc CgkJCQlTT1JURURfUEFUQ0hfU0lURVNfQ01EX1RNUD0iJHtFQ0hPX0NNRH0gJHtfTUFTVEVSX1NJ VEVfT1ZFUlJJREV9IGAke0VDSE9fQ01EfSAkJHtfX1BBVENIX1NJVEVTX1RNUH0gfCAke0FXS30g JyR7TUFTVEVSX1NPUlRfQVdLOlN8XFx8XFxcXHxnfSdgICR7X01BU1RFUl9TSVRFX0JBQ0tVUH0i IDsgXAoJCQllbHNlIFwKCQkJCVNPUlRFRF9QQVRDSF9TSVRFU19DTURfVE1QPSIke1NPUlRFRF9Q QVRDSF9TSVRFU19ERUZBVUxUX0NNRH0iIDsgXAoJCQlmaSA7IFwKCQkJZm9yIHNpdGUgaW4gYGV2 YWwgJCRTT1JURURfUEFUQ0hfU0lURVNfQ01EX1RNUCAke19SQU5ET01JWkVfU0lURVN9YDsgZG8g XAoJCQkJY2FzZSAkJHtmaWxlfSBpbiBcCgkJCQkqLyopCWFyZ3M9Ii1vICQke2ZpbGV9ICQke3Np dGV9JCR7ZmlsZX0iOzsgXAoJCQkJKikJCWFyZ3M9JCR7c2l0ZX0kJHtmaWxlfTs7IFwKCQkJCWVz YWM7IFwKCQkJCSR7RUNIT19DTUR9ICQke2FyZ3N9IDsgXAoJCQlkb25lOyBcCgkJZmkgXAoJIGRv bmUpCi5lbmRpZgouZW5kaWYKCi5pZiAhdGFyZ2V0KGZldGNoLXVybGFsbC1saXN0KQpmZXRjaC11 cmxhbGwtbGlzdDoKCUBjZCAkey5DVVJESVJ9ICYmIExJU1RBTEw9eWVzICR7TUFLRX0gZmV0Y2gt dXJsLWxpc3QtaW50Ci5lbmRpZgoKLmlmICF0YXJnZXQoZmV0Y2gtdXJsLWxpc3QpCmZldGNoLXVy bC1saXN0OiBmZXRjaC11cmwtbGlzdC1pbnQKLmVuZGlmCgojIEdlbmVyYXRlcyBwYXRjaGVzLgoK dXBkYXRlLXBhdGNoZXM6CglAdG9lZGl0PWBQQVRDSF9XUktTUkM9JHtQQVRDSF9XUktTUkN9IFwK CQlQQVRDSERJUj0ke1BBVENIRElSfSBcCgkJUEFUQ0hfTElTVD0ke1BBVENIRElSfS9wYXRjaC0q IFwKCQlESUZGX0FSR1M9JHtESUZGX0FSR1N9IFwKCQlESVNUT1JJRz0ke0RJU1RPUklHfSBcCgkJ JHtTSH0gJHtQT1JUU0RJUn0vVG9vbHMvc2NyaXB0cy91cGRhdGUtcGF0Y2hlc2A7IFwKCWNhc2Ug JCR0b2VkaXQgaW4gIiIpOzsgXAoJKikgJHtFQ0hPX0NNRH0gLW4gJ2VkaXQgcGF0Y2hlczogJzsg cmVhZCBpOyBcCgljZCAke1BBVENIRElSfSAmJiAkJHtWSVNVQUw6LSQke0VESVQ6LS91c3IvYmlu L3ZpfX0gJCR0b2VkaXQ7OyBlc2FjCgojIENoZWNrc3VtbWluZyB1dGlsaXRpZXMKCmNoZWNrLWNo ZWNrc3VtLWFsZ29yaXRobXM6CglAIFwKCSR7Y2hlY2tzdW1faW5pdH0gXAoJXAoJZm9yIGFsZyBp biAke0NIRUNLU1VNX0FMR09SSVRITVM6dHV9OyBkbyBcCgkJZXZhbCBhbGdfZXhlY3V0YWJsZT1c JCQkJGFsZzsgXAoJCWlmIFsgLXogIiQkYWxnX2V4ZWN1dGFibGUiIF07IHRoZW4gXAoJCQkke0VD SE9fTVNHfSAiQ2hlY2tzdW0gYWxnb3JpdGhtICQkYWxnOiBDb3VsZG4ndCBmaW5kIHRoZSBleGVj dXRhYmxlLiI7IFwKCQkJJHtFQ0hPX01TR30gIlNldCAkJGFsZz0vcGF0aC90by8kJGFsZyBpbiAv ZXRjL21ha2UuY29uZiBhbmQgdHJ5IGFnYWluLiI7IFwKCQkJZXhpdCAxOyBcCgkJZmk7IFwKCWRv bmU7IFwKCmNoZWNrc3VtX2luaXQ9XAoJU0hBMjU2PSR7U0hBMjU2fTsKCi5pZiAhdGFyZ2V0KG1h a2VzdW0pCm1ha2VzdW06IGNoZWNrLWNoZWNrc3VtLWFsZ29yaXRobXMKCUBjZCAkey5DVVJESVJ9 ICYmICR7TUFLRX0gZmV0Y2ggTk9fQ0hFQ0tTVU09eWVzIFwKCQlESVNBQkxFX1NJWkU9eWVzCglA aWYgWyAtZiAke0RJU1RJTkZPX0ZJTEV9IF07IHRoZW4gJHtDQVR9IC9kZXYvbnVsbCA+ICR7RElT VElORk9fRklMRX07IGZpCglAKCBcCgkJY2QgJHtESVNURElSfTsgXAoJCVwKCQkke2NoZWNrc3Vt X2luaXR9IFwKCQlcCgkJZm9yIGZpbGUgaW4gJHtfQ0tTVU1GSUxFU307IGRvIFwKCQkJZm9yIGFs ZyBpbiAke0NIRUNLU1VNX0FMR09SSVRITVM6dHV9OyBkbyBcCgkJCQlldmFsIGFsZ19leGVjdXRh YmxlPVwkJCQkYWxnOyBcCgkJCQlcCgkJCQlpZiBbICQkYWxnX2V4ZWN1dGFibGUgIT0gIk5PIiBd OyB0aGVuIFwKCQkJCQkkJGFsZ19leGVjdXRhYmxlICQkZmlsZSA+PiAke0RJU1RJTkZPX0ZJTEV9 OyBcCgkJCQlmaTsgXAoJCQlkb25lOyBcCgkJCSR7RUNIT19DTUR9ICJTSVpFICgkJGZpbGUpID0g YCR7U1RBVH0gLWYgXCIlelwiICQkZmlsZWAiID4+ICR7RElTVElORk9fRklMRX07IFwKCQlkb25l IFwKCSkKLmVuZGlmCgouaWYgIXRhcmdldChjaGVja3N1bSkKY2hlY2tzdW06IGZldGNoIGNoZWNr LWNoZWNrc3VtLWFsZ29yaXRobXMKCUBzZXQgLWUgOyBcCgkke2NoZWNrc3VtX2luaXR9IFwKCWlm IFsgLWYgJHtESVNUSU5GT19GSUxFfSBdOyB0aGVuIFwKCQljZCAke0RJU1RESVJ9OyBPSz0iIjtc CgkJZm9yIGZpbGUgaW4gJHtfQ0tTVU1GSUxFU307IGRvIFwKCQkJaWdub3JlZD0idHJ1ZSI7IFwK CQkJX2ZpbGU9JCR7ZmlsZSMke0RJU1RfU1VCRElSfS8qfTsJXAoJCQlmb3IgYWxnIGluICR7Q0hF Q0tTVU1fQUxHT1JJVEhNUzp0dX07IGRvIFwKCQkJCWlnbm9yZT0iZmFsc2UiOyBcCgkJCQlldmFs IGFsZ19leGVjdXRhYmxlPVwkJCQkYWxnOyBcCgkJCQlcCgkJCQlpZiBbICQkYWxnX2V4ZWN1dGFi bGUgIT0gIk5PIiBdOyB0aGVuIFwKCQkJCQlNS1NVTT1gJCRhbGdfZXhlY3V0YWJsZSA8ICQkZmls ZWA7IFwKCQkJCQlDS1NVTT1gZmlsZT0kJF9maWxlOyAke0RJU1RJTkZPX0RBVEF9YDsgXAoJCQkJ ZWxzZSBcCgkJCQkJaWdub3JlPSJ0cnVlIjsgXAoJCQkJZmk7IFwKCQkJCVwKCQkJCWlmIFsgJCRp Z25vcmUgPSAiZmFsc2UiIC1hIC16ICIkJENLU1VNIiBdOyB0aGVuIFwKCQkJCQkke0VDSE9fTVNH fSAiPT4gTm8gJCRhbGcgY2hlY2tzdW0gcmVjb3JkZWQgZm9yICQkZmlsZS4iOyBcCgkJCQkJaWdu b3JlPSJ0cnVlIjsgXAoJCQkJZmk7IFwKCQkJCVwKCQkJCWlmIFsgJCRpZ25vcmUgPSAiZmFsc2Ui IF07IHRoZW4gXAoJCQkJCW1hdGNoPSJmYWxzZSI7IFwKCQkJCQlmb3IgY2hrc3VtIGluICQkQ0tT VU07IGRvIFwKCQkJCQkJaWYgWyAiJCRjaGtzdW0iID0gIiQkTUtTVU0iIF07IHRoZW4gXAoJCQkJ CQkJbWF0Y2g9InRydWUiOyBcCgkJCQkJCQlicmVhazsgXAoJCQkJCQlmaTsgXAoJCQkJCWRvbmU7 IFwKCQkJCQlpZiBbICQkbWF0Y2ggPSAidHJ1ZSIgXTsgdGhlbiBcCgkJCQkJCSR7RUNIT19NU0d9 ICI9PiAkJGFsZyBDaGVja3N1bSBPSyBmb3IgJCRmaWxlLiI7IFwKCQkJCQkJaWdub3JlZD0iZmFs c2UiOyBcCgkJCQkJZWxzZSBcCgkJCQkJCSR7RUNIT19NU0d9ICI9PiAkJGFsZyBDaGVja3N1bSBt aXNtYXRjaCBmb3IgJCRmaWxlLiI7IFwKCQkJCQkJcmVmZXRjaGxpc3Q9IiQkcmVmZXRjaGxpc3Qk JGZpbGUgIjsgXAoJCQkJCQlPSz0iJCR7T0s6LXJldHJ5fSI7IFwKCQkJCQkJWyAiJCR7T0t9IiA9 ICJyZXRyeSIgLWEgJHtGRVRDSF9SRUdFVH0gLWd0IDAgXSAmJiAke1JNfSAtZiAkJHtmaWxlfTsg XAoJCQkJCQlpZ25vcmVkPSJmYWxzZSI7IFwKCQkJCQlmaTsgXAoJCQkJZmk7IFwKCQkJZG9uZTsg XAoJCQlcCgkJCWlmIFsgJCRpZ25vcmVkID0gInRydWUiIF07IHRoZW4gXAoJCQkJJHtFQ0hPX01T R30gIj0+IE5vIHN1aXRhYmxlIGNoZWNrc3VtIGZvdW5kIGZvciAkJGZpbGUuIjsgXAoJCQkJT0s9 IiR7RkFMU0V9IjsgXAoJCQlmaTsgXAoJCQlcCgkJZG9uZTsgXAoJCVwKCQlpZiBbICIkJHtPSzo9 dHJ1ZX0iID0gInJldHJ5IiBdICYmIFsgJHtGRVRDSF9SRUdFVH0gLWd0IDAgXTsgdGhlbiBcCgkJ CSR7RUNIT19NU0d9ICI9PT0+ICBSZWZldGNoIGZvciAke0ZFVENIX1JFR0VUfSBtb3JlIHRpbWVz IGZpbGVzOiAkJHJlZmV0Y2hsaXN0IjsgXAoJCQlpZiAoIGNkICR7LkNVUkRJUn0gJiYgXAoJCQkg ICAgJHtNQUtFfSAkey5NQUtFRkxBR1N9IEZPUkNFX0ZFVENIPSIkJHJlZmV0Y2hsaXN0IiBGRVRD SF9SRUdFVD0iYCR7RVhQUn0gJHtGRVRDSF9SRUdFVH0gLSAxYCIgZmV0Y2gpOyB0aGVuIFwKCQkJ CSAgaWYgKCBjZCAkey5DVVJESVJ9ICYmIFwKCQkJICAgICAgICAke01BS0V9ICR7Lk1BS0VGTEFH U30gRkVUQ0hfUkVHRVQ9ImAke0VYUFJ9ICR7RkVUQ0hfUkVHRVR9IC0gMWAiIGNoZWNrc3VtICk7 IHRoZW4gXAoJCQkJICAgICAgT0s9InRydWUiOyBcCgkJCQkgIGZpOyBcCgkJCWZpOyBcCgkJZmk7 IFwKCQlcCgkJaWYgWyAiJCRPSyIgIT0gInRydWUiIC1hICR7RkVUQ0hfUkVHRVR9IC1lcSAwIF07 IHRoZW4gXAoJCQkke0VDSE9fTVNHfSAiPT09PiAgR2l2aW5nIHVwIG9uIGZldGNoaW5nIGZpbGVz OiAkJHJlZmV0Y2hsaXN0IjsgXAoJCQkke0VDSE9fTVNHfSAiTWFrZSBzdXJlIHRoZSBNYWtlZmls ZSBhbmQgZGlzdGluZm8gZmlsZSAoJHtESVNUSU5GT19GSUxFfSkiOyBcCgkJCSR7RUNIT19NU0d9 ICJhcmUgdXAgdG8gZGF0ZS4gIElmIHlvdSBhcmUgYWJzb2x1dGVseSBzdXJlIHlvdSB3YW50IHRv IG92ZXJyaWRlIHRoaXMiOyBcCgkJCSR7RUNIT19NU0d9ICJjaGVjaywgdHlwZSBcIm1ha2UgTk9f Q0hFQ0tTVU09eWVzIFtvdGhlciBhcmdzXVwiLiI7IFwKCQkJZXhpdCAxOyBcCgkJZmk7IFwKCQlp ZiBbICIkJE9LIiAhPSAidHJ1ZSIgXTsgdGhlbiBcCgkJCWV4aXQgMTsgXAoJCWZpOyBcCgllbGlm IFsgLW4gIiR7X0NLU1VNRklMRVM6TSp9IiBdOyB0aGVuIFwKCQkke0VDSE9fTVNHfSAiPT4gTm8g Y2hlY2tzdW0gZmlsZSAoJHtESVNUSU5GT19GSUxFfSkuIjsgXAoJCWV4aXQgMTsgXAoJZmkKLmVu ZGlmCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjCiMgVGhlIHNwZWNpYWwgcGFja2FnZS1idWlsZGluZyB0YXJnZXRzCiMgWW91 IHByb2JhYmx5IHdvbid0IG5lZWQgdG8gdG91Y2ggdGhlc2UKIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIyBOb2JvZHkgc2hv dWxkIHdhbnQgdG8gb3ZlcnJpZGUgdGhpcyB1bmxlc3MgUEtHTkFNRSBpcyBzaW1wbHkgYm9ndXMu CgouaWYgIXRhcmdldChwYWNrYWdlLW5hbWUpCnBhY2thZ2UtbmFtZToKCUAke0VDSE9fQ01EfSAk e1BLR05BTUV9Ci5lbmRpZgoKIyBCdWlsZCBhIHBhY2thZ2UgYnV0IGRvbid0IGNoZWNrIHRoZSBw YWNrYWdlIGNvb2tpZQoKLmlmICF0YXJnZXQocmVwYWNrYWdlKQpyZXBhY2thZ2U6IHByZS1yZXBh Y2thZ2UgcGFja2FnZQoKcHJlLXJlcGFja2FnZToKCUAke1JNfSAtZiAke1BBQ0tBR0VfQ09PS0lF fQouZW5kaWYKCiMgQnVpbGQgYSBwYWNrYWdlIGJ1dCBkb24ndCBjaGVjayB0aGUgY29va2llIGZv ciBpbnN0YWxsYXRpb24sIGFsc28gZG9uJ3QKIyBpbnN0YWxsIHBhY2thZ2UgY29va2llCgouaWYg IXRhcmdldChwYWNrYWdlLW5vaW5zdGFsbCkKcGFja2FnZS1ub2luc3RhbGw6IHBhY2thZ2UKLmVu ZGlmCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjCiMgRGVwZW5kZW5jeSBjaGVja2luZwojIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgouaWYgIXRhcmdldChk ZXBlbmRzKQpkZXBlbmRzOiBwa2ctZGVwZW5kcyBleHRyYWN0LWRlcGVuZHMgcGF0Y2gtZGVwZW5k cyBsaWItZGVwZW5kcyBmZXRjaC1kZXBlbmRzIGJ1aWxkLWRlcGVuZHMgcnVuLWRlcGVuZHMKCi5m b3IgZGVwdHlwZSBpbiBQS0cgRVhUUkFDVCBQQVRDSCBGRVRDSCBCVUlMRCBMSUIgUlVOCiR7ZGVw dHlwZTp0bH0tZGVwZW5kczoKLmlmIGRlZmluZWQoJHtkZXB0eXBlfV9ERVBFTkRTKSAmJiAhZGVm aW5lZChOT19ERVBFTkRTKQoJQCR7U0VURU5WfSBcCgkJZHBfUkFXREVQRU5EUz0iJHske2RlcHR5 cGV9X0RFUEVORFN9IiBcCgkJZHBfREVQVFlQRT0iJHtkZXB0eXBlfV9ERVBFTkRTIiBcCgkJZHBf REVQRU5EU19UQVJHRVQ9IiR7REVQRU5EU19UQVJHRVR9IiBcCgkJZHBfREVQRU5EU19QUkVDTEVB Tj0iJHtERVBFTkRTX1BSRUNMRUFOfSIgXAoJCWRwX0RFUEVORFNfQ0xFQU49IiR7REVQRU5EU19D TEVBTn0iIFwKCQlkcF9ERVBFTkRTX0FSR1M9IiR7REVQRU5EU19BUkdTfSIgXAoJCWRwX1VTRV9Q QUNLQUdFX0RFUEVORFM9IiR7VVNFX1BBQ0tBR0VfREVQRU5EU30iIFwKCQlkcF9VU0VfUEFDS0FH RV9ERVBFTkRTX09OTFk9IiR7VVNFX1BBQ0tBR0VfREVQRU5EU19PTkxZfSIgXAoJCWRwX1BLR19B REQ9IiR7UEtHX0FERH0iIFwKCQlkcF9QS0dfSU5GTz0iJHtQS0dfSU5GT30iIFwKCQlkcF9XUktE SVI9IiR7V1JLRElSfSIgXAoJCWRwX1BLR05BTUU9IiR7UEtHTkFNRX0iIFwKCQlkcF9TVFJJQ1Rf REVQRU5EUz0iJHtTVFJJQ1RfREVQRU5EU30iIFwKCQlkcF9MT0NBTEJBU0U9IiR7TE9DQUxCQVNF fSIgXAoJCWRwX0xJQl9ESVJTPSIke0xJQl9ESVJTfSIgXAoJCWRwX1NIPSIke1NIfSIgXAoJCWRw X1NDUklQVFNESVI9IiR7U0NSSVBUU0RJUn0iIFwKCQlkcF9QT1JUU0RJUj0iJHtQT1JUU0RJUn0i IFwKCQlkcF9NQUtFPSIke01BS0V9IiBcCgkJJHtTSH0gJHtTQ1JJUFRTRElSfS9kby1kZXBlbmRz LnNoCi5lbmRpZgouZW5kZm9yCgouZW5kaWYKCiMgRGVwZW5kZW5jeSBsaXN0czogYm90aCBidWls ZCBhbmQgcnVudGltZSwgcmVjdXJzaXZlLiAgUHJpbnQgb3V0IGRpcmVjdG9yeSBuYW1lcy4KCl9V TklGSUVEX0RFUEVORFM9JHtQS0dfREVQRU5EU30gJHtFWFRSQUNUX0RFUEVORFN9ICR7UEFUQ0hf REVQRU5EU30gJHtGRVRDSF9ERVBFTkRTfSAke0JVSUxEX0RFUEVORFN9ICR7TElCX0RFUEVORFN9 ICR7UlVOX0RFUEVORFN9Cl9ERVBFTkRfU1BFQ0lBTFM9CSR7X1VOSUZJRURfREVQRU5EUzpNKlw6 Klw6KjpDLF5bXjpdKjooW146XSopOi4qJCxcMSx9CgphbGwtZGVwZW5kcy1saXN0OgoJQCR7QUxM LURFUEVORFMtTElTVH0KCkFMTC1ERVBFTkRTLUxJU1Q9IFwKCSR7U0VURU5WfSBkcF9BTExERVBF TkRTPSIke19VTklGSUVEX0RFUEVORFN9IiBcCgkJCWRwX1BPUlRTRElSPSIke1BPUlRTRElSfSIg XAoJCQlkcF9NQUtFPSIke01BS0V9IiBcCgkJCWRwX1BLR05BTUU9IiR7UEtHTkFNRX0iIFwKCQkJ ZHBfU0NSSVBUU0RJUj0iJHtTQ1JJUFRTRElSfSIgXAoJCQkke1NIfSAke1NDUklQVFNESVJ9L2Fs bC1kZXBlbmRzLWxpc3Quc2gKCkNMRUFOLURFUEVORFMtTElTVD0gXAoJJHtTRVRFTlZ9IGRwX0FM TERFUEVORFM9IiR7X1VOSUZJRURfREVQRU5EU30iIFwKCQkJZHBfUE9SVFNESVI9IiR7UE9SVFNE SVJ9IiBcCgkJCWRwX01BS0U9IiR7TUFLRX0iIFwKCQkJZHBfUEtHTkFNRT0iJHtQS0dOQU1FfSIg XAoJCQlkcF9TQ1JJUFRTRElSPSIke1NDUklQVFNESVJ9IiBcCgkJCSR7U0h9ICR7U0NSSVBUU0RJ Un0vY2xlYW4tZGVwZW5kcy1saXN0LnNoCgouaWYgIXRhcmdldChjbGVhbi1kZXBlbmRzKQpjbGVh bi1kZXBlbmRzOgoJQGZvciBkaXIgaW4gJCQoJHtDTEVBTi1ERVBFTkRTLUxJU1R9IGZ1bGwpOyBk byBcCgkJKGNkICQkZGlyOyAke01BS0V9IE5PQ0xFQU5ERVBFTkRTPXllcyBjbGVhbik7IFwKCWRv bmUKLmVuZGlmCgouaWYgIXRhcmdldChsaW1pdGVkLWNsZWFuLWRlcGVuZHMpCmxpbWl0ZWQtY2xl YW4tZGVwZW5kczoKCUBmb3IgZGlyIGluICQkKCR7Q0xFQU4tREVQRU5EUy1MSVNUfSBsaW1pdGVk KTsgZG8gXAoJCShjZCAkJGRpcjsgJHtNQUtFfSBOT0NMRUFOREVQRU5EUz15ZXMgY2xlYW4pOyBc Cglkb25lCi5lbmRpZgoKLmlmICF0YXJnZXQoZGVpbnN0YWxsLWRlcGVuZHMpCmRlaW5zdGFsbC1k ZXBlbmRzOgoJQGZvciBkaXIgaW4gJCQoJHtBTEwtREVQRU5EUy1MSVNUfSk7IGRvIFwKCQkoY2Qg JCRkaXI7ICR7TUFLRX0gZGVpbnN0YWxsKTsgXAoJZG9uZQouZW5kaWYKCi5pZiAhdGFyZ2V0KGZl dGNoLXNwZWNpYWxzKQpmZXRjaC1zcGVjaWFsczoKCUAke0VDSE9fTVNHfSAiPT09PiBGZXRjaGlu ZyBhbGwgZGlzdGZpbGVzIHJlcXVpcmVkIGJ5ICR7UEtHTkFNRX0gZm9yIGJ1aWxkaW5nIgoJQGZv ciBkaXIgaW4gJHtfREVQRU5EX1NQRUNJQUxTfTsgZG8gXAoJCShjZCAkJGRpcjsgJHtNQUtFfSBm ZXRjaCk7IFwKCWRvbmUKLmVuZGlmCgouaWYgIXRhcmdldChmZXRjaC1yZWN1cnNpdmUpCmZldGNo LXJlY3Vyc2l2ZToKCUAke0VDSE9fTVNHfSAiPT09PiBGZXRjaGluZyBhbGwgZGlzdGZpbGVzIGZv ciAke1BLR05BTUV9IGFuZCBkZXBlbmRlbmNpZXMiCglAZm9yIGRpciBpbiAkey5DVVJESVJ9ICQk KCR7QUxMLURFUEVORFMtTElTVH0pOyBkbyBcCgkJKGNkICQkZGlyOyAke01BS0V9IGZldGNoKTsg XAoJZG9uZQouZW5kaWYKCi5pZiAhdGFyZ2V0KGZldGNoLXJlY3Vyc2l2ZS1saXN0KQpmZXRjaC1y ZWN1cnNpdmUtbGlzdDoKCUBmb3IgZGlyIGluICR7LkNVUkRJUn0gJCQoJHtBTEwtREVQRU5EUy1M SVNUfSk7IGRvIFwKCQkoY2QgJCRkaXI7ICR7TUFLRX0gZmV0Y2gtbGlzdCk7IFwKCWRvbmUKLmVu ZGlmCgojIFVzZWQgYnkgZmV0Y2gtcmVxdWlyZWQgYW5kIGZldGNoLXJlcXVpcmVkIGxpc3QsIHRo aXMgc2NyaXB0IGxvb2tzCiMgYXQgZWFjaCBvZiB0aGUgZGVwZW5kZW5jaWVzLiBJZiAzIGl0ZW1z IGFyZSBzcGVjaWZpZWQgaW4gdGhlIHR1cGxlLAojIHN1Y2ggYXMgZm9vOiR7UE9SVFNESVJ9L2dy YXBoaWNzL2ZvbzpleHRyYWN0LCB0aGUgZmlyc3QgaXRlbSAoZm9vKQojIGlzIGV4YW1pbmVkLiBP bmx5IGlmIGl0IGJlZ2lucyB3aXRoIGEgLyBhbmQgZG9lcyBub3QgZXhpc3Qgb24gdGhlCiMgZmls ZS1zeXN0ZW0gd2lsbCBgYG1ha2UgdGFyZycnIHByb2NlZWQuCiMgRm9yIG1vcmUgdXN1YWwgKGR1 YWwtaXRlbSkgZGVwZW5kZW5jeSB0dXBsZXMsIHRoZSBgYG1ha2UgdGFyZycnCiMgcHJvY2VlZHMs IGlmIHRoZSBleGFjdCBwYWNrYWdlLCB3aGljaCB0aGUgZGlyZWN0b3J5IFdPVUxEJ1ZFIGluc3Rh bGxlZCwKIyBpcyBub3QgeWV0IGluc3RhbGxlZC4KIyBUaGlzIGlzIHRoZSBleGFjdCBiZWhhdmlv dXIgb2YgdGhlIG9sZCBjb2RlLCBhbmQgaXQgbWF5IG5lZWQKIyByZXZpc2l0aW5nLiBGb3IgZXhh bXBsZSwgdGhlIGVudGlyZSBmaXJzdCBjYXNlIHNlZW1zIGR1YmlvdXMsIGFuZCBpbgojIHRoZSBz ZWNvbmQgY2FzZSB3ZSwgcHJvYmFibHksIHNob3VsZCBiZSBzYXRpc2ZpZWQgd2l0aCBfYW55XyAo ZWFybGllcikKIyBwYWNrYWdlLCB3aXRoIHRoZSBzYW1lIG9yaWdpbiBhcyB0aGF0IG9mIHRoZSBk aXIuCiMKIwktbWkKRkVUQ0hfTElTVD89CWZvciBpIGluICQkZGVwczsgZG8gXAoJCXByb2c9JCR7 aSUlOip9OyBkaXI9JCR7aVwjKjp9OyBcCgkJY2FzZSAkJGRpciBpbglcCgkJKjoqKSBpZiBbICQk cHJvZyAhPSAkJHtwcm9nXCMvfSAtbyAhIC1lICQkcHJvZyBdOyB0aGVuCVwKCQkJCWRpcj0kJHtk aXIlJToqfTsJXAoJCQllbHNlCVwKCQkJCWNvbnRpbnVlOwlcCgkJCWZpOzsJXAoJCSopIGlmIFsg LWQgJHtQS0dfREJESVJ9LyQkKGNkICQkZGlyOyAke01BS0V9IC1WIFBLR05BTUUpIF07IHRoZW4g XAoJCQkJY29udGludWU7CVwKCQkJZmk7OwlcCgkJZXNhYzsJXAoJCWVjaG8gY2QgJCRkaXI7IGNk ICQkZGlyOyAke01BS0V9ICQkdGFyZzsgXAoJZG9uZQoKLmlmICF0YXJnZXQoZmV0Y2gtcmVxdWly ZWQpCmZldGNoLXJlcXVpcmVkOiBmZXRjaAouaWYgZGVmaW5lZChOT19ERVBFTkRTKQoJQCR7RUNI T19NU0d9ICI9PT0+IE5PX0RFUEVORFMgaXMgc2V0LCBub3QgZmV0Y2hpbmcgYW55IG90aGVyIGRp c3RmaWxlcyBmb3IgJHtQS0dOQU1FfSIKLmVsc2UKCUAke0VDSE9fTVNHfSAiPT09PiBGZXRjaGlu ZyBhbGwgcmVxdWlyZWQgZGlzdGZpbGVzIGZvciAke1BLR05BTUV9IGFuZCBkZXBlbmRlbmNpZXMi Ci5mb3IgZGVwdHlwZSBpbiBQS0cgRVhUUkFDVCBQQVRDSCBGRVRDSCBCVUlMRCBSVU4KLmlmIGRl ZmluZWQoJHtkZXB0eXBlfV9ERVBFTkRTKQoJQHRhcmc9ZmV0Y2g7IGRlcHM9IiR7JHtkZXB0eXBl fV9ERVBFTkRTfSI7ICR7RkVUQ0hfTElTVH0KLmVuZGlmCi5lbmRmb3IKLmVuZGlmCgouZW5kaWYK Ci5pZiAhdGFyZ2V0KGZldGNoLXJlcXVpcmVkLWxpc3QpCmZldGNoLXJlcXVpcmVkLWxpc3Q6IGZl dGNoLWxpc3QKLmlmICFkZWZpbmVkKE5PX0RFUEVORFMpCi5mb3IgZGVwdHlwZSBpbiBQS0cgRVhU UkFDVCBQQVRDSCBGRVRDSCBCVUlMRCBSVU4KLmlmIGRlZmluZWQoJHtkZXB0eXBlfV9ERVBFTkRT KQoJQHRhcmc9ZmV0Y2gtbGlzdDsgZGVwcz0iJHske2RlcHR5cGV9X0RFUEVORFN9IjsgJHtGRVRD SF9MSVNUfQouZW5kaWYKLmVuZGZvcgouZW5kaWYKLmVuZGlmCgouaWYgIXRhcmdldChjaGVja3N1 bS1yZWN1cnNpdmUpCmNoZWNrc3VtLXJlY3Vyc2l2ZToKCUAke0VDSE9fTVNHfSAiPT09PiBGZXRj aGluZyBhbmQgY2hlY2tpbmcgY2hlY2tzdW1zIGZvciAke1BLR05BTUV9IGFuZCBkZXBlbmRlbmNp ZXMiCglAZm9yIGRpciBpbiAkey5DVVJESVJ9ICQkKCR7QUxMLURFUEVORFMtTElTVH0pOyBkbyBc CgkJKGNkICQkZGlyOyAke01BS0V9IGNoZWNrc3VtKTsgXAoJZG9uZQouZW5kaWYKCiMgRGVwZW5k ZW5jeSBsaXN0czogYnVpbGQgYW5kIHJ1bnRpbWUuICBQcmludCBvdXQgZGlyZWN0b3J5IG5hbWVz LgoKYnVpbGQtZGVwZW5kcy1saXN0OgouaWYgZGVmaW5lZChQS0dfREVQRU5EUykgfHwgZGVmaW5l ZChFWFRSQUNUX0RFUEVORFMpIHx8IGRlZmluZWQoUEFUQ0hfREVQRU5EUykgfHwgZGVmaW5lZChG RVRDSF9ERVBFTkRTKSB8fCBkZWZpbmVkKEJVSUxEX0RFUEVORFMpIHx8IGRlZmluZWQoTElCX0RF UEVORFMpCglAJHtCVUlMRC1ERVBFTkRTLUxJU1R9Ci5lbmRpZgoKQlVJTEQtREVQRU5EUy1MSVNU PSBcCglmb3IgZGlyIGluICQkKCR7RUNIT19DTUR9ICIke1BLR19ERVBFTkRTfSAke0VYVFJBQ1Rf REVQRU5EU30gJHtQQVRDSF9ERVBFTkRTfSAke0ZFVENIX0RFUEVORFN9ICR7QlVJTERfREVQRU5E U30gJHtMSUJfREVQRU5EU30iIHwgJHtTRUR9IC1FIC1lICdzLChbXjogXSopOihbXjogXSopKDpb XiBdKik/LFwyLGcnIC1lICd5LyAvXG4vJ3wgJHtTT1JUfSAtdSk7IGRvIFwKCQlpZiBbIC1kICQk ZGlyIF07IHRoZW4gXAoJCQkke0VDSE9fQ01EfSAkJGRpcjsgXAoJCWVsc2UgXAoJCQkke0VDSE9f TVNHfSAiJHtQS0dOQU1FfTogXCIkJGRpclwiIG5vbi1leGlzdGVudCAtLSBkZXBlbmRlbmN5IGxp c3QgaW5jb21wbGV0ZSIgPiYyOyBcCgkJZmk7IFwKCWRvbmUgfCAke1NPUlR9IC11CgpydW4tZGVw ZW5kcy1saXN0OgouaWYgZGVmaW5lZChMSUJfREVQRU5EUykgfHwgZGVmaW5lZChSVU5fREVQRU5E UykKCUAke1JVTi1ERVBFTkRTLUxJU1R9Ci5lbmRpZgoKUlVOLURFUEVORFMtTElTVD0gXAoJZm9y IGRpciBpbiAkJCgke0VDSE9fQ01EfSAiJHtfTElCX1JVTl9ERVBFTkRTOkMsLio6KFteOl0qKS4q LFwxLH0iIHwgJHtTRUR9IC1lICd5LyAvXG4vJyB8ICR7U09SVH0gLXUpOyBkbyBcCgkJaWYgWyAt ZCAkJGRpciBdOyB0aGVuIFwKCQkJJHtFQ0hPX0NNRH0gJCRkaXI7IFwKCQllbHNlIFwKCQkJJHtF Q0hPX01TR30gIiR7UEtHTkFNRX06IFwiJCRkaXJcIiBub24tZXhpc3RlbnQgLS0gZGVwZW5kZW5j eSBsaXN0IGluY29tcGxldGUiID4mMjsgXAoJCWZpOyBcCglkb25lIHwgJHtTT1JUfSAtdQoKIyBQ YWNrYWdlIChyZWN1cnNpdmUgcnVudGltZSkgZGVwZW5kZW5jeSBsaXN0LiAgUHJpbnQgb3V0IGJv dGggZGlyZWN0b3J5IG5hbWVzCiMgYW5kIHBhY2thZ2UgbmFtZXMuCgpwYWNrYWdlLWRlcGVuZHMt bGlzdDoKLmlmIGRlZmluZWQoQ0hJTERfREVQRU5EUykgfHwgZGVmaW5lZChMSUJfREVQRU5EUykg fHwgZGVmaW5lZChSVU5fREVQRU5EUykKCUAke1BBQ0tBR0UtREVQRU5EUy1MSVNUfQouZW5kaWYK Cl9MSUJfUlVOX0RFUEVORFM9CSR7TElCX0RFUEVORFN9ICR7UlVOX0RFUEVORFN9ClBBQ0tBR0Ut REVQRU5EUy1MSVNUPz0gXAoJaWYgWyAiJHtDSElMRF9ERVBFTkRTfSIgXTsgdGhlbiBcCgkJaW5z dGFsbGVkPSQkKCR7UEtHX0lORk99IC1xTyAke1BLR09SSUdJTn0gMj4vZGV2L251bGwgfHwgXAoJ CQkke1RSVUV9KTsgXAoJCWlmIFsgIiQkaW5zdGFsbGVkIiBdOyB0aGVuIFwKCQkJYnJlYWs7IFwK CQlmaTsgXAoJCWlmIFsgLXogIiQkaW5zdGFsbGVkIiBdOyB0aGVuIFwKCQkJaW5zdGFsbGVkPSIk e1BLR05BTUV9IjsgXAoJCWZpOyBcCgkJZm9yIHBrZ25hbWUgaW4gJCRpbnN0YWxsZWQ7IGRvIFwK CQkJJHtFQ0hPX0NNRH0gIiQkcGtnbmFtZSAkey5DVVJESVJ9ICR7UEtHT1JJR0lOfSI7IFwKCQlk b25lOyBcCglmaTsgXAoJY2hlY2tlZD0iJHtQQVJFTlRfQ0hFQ0tFRH0iOyBcCglmb3IgZGlyIGlu ICR7X0xJQl9SVU5fREVQRU5EUzpDLFteOl0qOihbXjpdKik6Py4qLFwxLH07IGRvIFwKCQlkaXI9 JCQoJHtSRUFMUEFUSH0gJCRkaXIpOyBcCgkJaWYgWyAtZCAkJGRpciBdOyB0aGVuIFwKCQkJY2Fz ZSAkJGNoZWNrZWQgaW4JXAoJCQkkJGRpcnwkJGRpclwgKnwqXCAkJGRpcnwqXCAkJGRpclwgKikg Y29udGludWU7OwlcCgkJCWVzYWM7CVwKCQkJY2hpbGRvdXQ9JCQoY2QgJCRkaXI7ICR7TUFLRX0g Q0hJTERfREVQRU5EUz15ZXMgUEFSRU5UX0NIRUNLRUQ9IiQkY2hlY2tlZCIgcGFja2FnZS1kZXBl bmRzLWxpc3QpOyBcCgkJCXNldCAtLSAkJGNoaWxkb3V0OyBcCgkJCWNoaWxkZGlyPSIiOyBcCgkJ CXdoaWxlIFsgJCRcIyAhPSAwIF07IGRvIFwKCQkJCWNoaWxkZGlyPSIkJGNoaWxkZGlyICQkMiI7 IFwKCQkJCSR7RUNIT19DTUR9ICIkJDEgJCQyICQkMyI7IFwKCQkJCXNoaWZ0IDM7IFwKCQkJZG9u ZTsgXAoJCQljaGVja2VkPSIkJGRpciAkJGNoaWxkZGlyICQkY2hlY2tlZCI7IFwKCQllbHNlIFwK CQkJJHtFQ0hPX01TR30gIiR7UEtHTkFNRX06IFwiJCRkaXJcIiBub24tZXhpc3RlbnQgLS0gZGVw ZW5kZW5jeSBsaXN0IGluY29tcGxldGUiID4mMjsgXAoJCWZpOyBcCglkb25lCgpBQ1RVQUwtUEFD S0FHRS1ERVBFTkRTPz0gXAoJZGVwZmlsZXM9IiIgOyBcCglmb3IgbGliIGluICR7TElCX0RFUEVO RFM6Qy9cOi4qLy99OyBkbyBcCgkJZGVwZmlsZXM9IiQkZGVwZmlsZXMgYCR7U0VURU5WfSBMSUJf RElSUz0iJHtMSUJfRElSU30iIExPQ0FMQkFTRT0iJHtMT0NBTEJBU0V9IiAke1NIfSAke1NDUklQ VFNESVJ9L2ZpbmQtbGliLnNoICQke2xpYn1gIiA7IFwKCWRvbmUgOyBcCgkke1NFVEVOVn0gUEtH X0JJTj0iJHtQS0dfQklOfSIgJHtTSH0gJHtTQ1JJUFRTRElSfS9hY3R1YWwtcGFja2FnZS1kZXBl bmRzLnNoICQke2RlcGZpbGVzfSAke1JVTl9ERVBFTkRTOkMvKC4qKVw6LiovIlwxIi99CgpjcmVh dGUtbWFuaWZlc3Q6CglAJHtNS0RJUn0gJHtNRVRBRElSfTsgXAoJKFwKCQllY2hvICJuYW1lOiBc IiR7UEtHQkFTRX1cIiIgOyBcCgkJZWNobyAidmVyc2lvbjogXCIke1BLR1ZFUlNJT059XCIiIDsg XAoJCWVjaG8gIm9yaWdpbjogJHtQS0dPUklHSU59IiA7IFwKCQllY2hvICJjb21tZW50OiA8PEVP RCIgOyBcCgkJZWNobyAke0NPTU1FTlQ6UX0gOyBcCgkJZWNobyAiRU9EIiA7IFwKCQllY2hvICJt YWludGFpbmVyOiAke01BSU5UQUlORVJ9IiA7IFwKCQllY2hvICJwcmVmaXg6ICR7UFJFRklYfSIg OyBcCgkJWyAteiAiJHtXV1d9IiBdIHx8IGVjaG8gInd3dzogJHtXV1d9IiA7IFwKCQllY2hvICJk ZXBzOiB7ICI7IFwKCQkke0FDVFVBTC1QQUNLQUdFLURFUEVORFN9IHwgJHtHUkVQfSAtdiAtRSAk e1BLR19JR05PUkVfREVQRU5EU30gfCAke1NPUlR9IC11IDsgXAoJCWVjaG8gIn0iIDsgXAoJCWVj aG8gImNhdGVnb3JpZXM6IFsgJHtDQVRFR09SSUVTOnU6Uy8kLywvfSBdIiA7IFwKCQlsPSR7TElD RU5TRV9DT01CfSA7IFwKCQlbIC1uICIke05PX0FSQ0h9IiBdICYmIGVjaG8gImFyY2ggOiBgJHtQ S0dfQklOfSBjb25maWcgYWJpIHwgdHIgJ1s6dXBwZXI6XScgJ1s6bG93ZXI6XScgfCAke0NVVH0g LWQ6IC1mMSwyYDoqIiA7IFwKCQlbIC1uICIke05PX0FSQ0h9IiBdICYmIGVjaG8gImFiaSA6IGAk e1BLR19CSU59IGNvbmZpZyBhYmkgfCAke0NVVH0gLWQ6IC1mMSwyYDoqIiA7IFwKCQllY2hvICJs aWNlbnNlbG9naWM6ICQke2w6LXNpbmdsZX0iIDsgXAoJCVsgLXogIiR7TElDRU5TRX0iIF0gfHwg ZWNobyAibGljZW5zZXM6IFsgJHtMSUNFTlNFOnU6Uy8kLywvfSBdIiA7IFwKCQlbIC16ICIke1VT RVJTfSIgXSB8fCBlY2hvICJ1c2VyczogWyAke1VTRVJTOnU6Uy8kLywvfSBdIiA7IFwKCQlbIC16 ICIke0dST1VQU30iIF0gfHwgZWNobyAiZ3JvdXBzOiBbICR7R1JPVVBTOnU6Uy8kLywvfSBdIiA7 IFwKCSkgPiAke01BTklGRVNURn0KCUAke0VDSE9fQ01EfSAtbiAib3B0aW9uczogeyIgPj4gJHtN QU5JRkVTVEZ9Ci5mb3Igb3B0IGluICR7Q09NUExFVEVfT1BUSU9OU19MSVNUfQoJQFsgLXogIiR7 UE9SVF9PUFRJT05TOk0ke29wdH19IiBdIHx8IG1hdGNoPSJvbiIgOyAke0VDSE9fTVNHfSAtbiAi ICR7b3B0fTogJCR7bWF0Y2g6LW9mZn0sIiA+PiAke01BTklGRVNURn0KLmVuZGZvcgoJQCR7RUNI T19DTUR9ICJ9IiA+PiAke01BTklGRVNURn0KLmlmIGRlZmluZWQoUEtHX05PVEVTKQoJQCR7RUNI T19DTUR9IC1uICJhbm5vdGF0aW9uczogeyIgPj4gJHtNQU5JRkVTVEZ9Ci5mb3Igbm90ZSBpbiAk e1BLR19OT1RFU30KCUAke0VDSE9fQ01EfSAtbiAnICR7bm90ZX06ICIke1BLR19OT1RFXyR7bm90 ZX06Uy8iL1wiL2d9IiwnID4+ICR7TUFOSUZFU1RGfQouZW5kZm9yCglAJHtFQ0hPX0NNRH0gIiB9 IiA+PiAke01BTklGRVNURn0KLmVuZGlmCglAWyAtZiAke1BLR0lOU1RBTEx9IF0gJiYgJHtDUH0g JHtQS0dJTlNUQUxMfSAke01FVEFESVJ9LytJTlNUQUxMOyBcCgkke1JNfSAtZiAke01FVEFESVJ9 LytQUkVfSU5TVEFMTCA7IFwKCWZvciBhIGluICR7UEtHUFJFSU5TVEFMTH07IGRvIFwKCQlbIC1m ICQkYSBdICYmICR7Q0FUfSAkJGEgPj4gJHtNRVRBRElSfS8rUFJFX0lOU1RBTEwgOyBcCglkb25l IDsgXAoJJHtSTX0gLWYgJHtNRVRBRElSfS8rUE9TVF9JTlNUQUxMIDsgXAoJZm9yIGEgaW4gJHtQ S0dQT1NUSU5TVEFMTH07IGRvIFwKCQlbIC1mICQkYSBdICYmICR7Q0FUfSAkJGEgPj4gJHtNRVRB RElSfS8rUE9TVF9JTlNUQUxMIDsgXAoJZG9uZSA7IFwKCVsgLWYgJHtQS0dERUlOU1RBTEx9IF0g JiYgJHtDUH0gJHtQS0dERUlOU1RBTEx9ICR7TUVUQURJUn0vK0RFSU5TVEFMTDsgXAoJJHtSTX0g LWYgJHtNRVRBRElSfS8rUFJFX0RFSU5TVEFMTCA7IFwKCWZvciBhIGluICR7UEtHUFJFREVJTlNU QUxMfTsgZG8gXAoJCVsgLWYgJCRhIF0gJiYgJHtDQVR9ICQkYSA+PiAke01FVEFESVJ9LytQUkVf REVJTlNUQUxMIDsgXAoJZG9uZSA7IFwKCSR7Uk19IC1mICR7TUVUQURJUn0vK1BPU1RfREVJTlNU QUxMIDsgXAoJZm9yIGEgaW4gJHtQS0dQT1NUREVJTlNUQUxMfTsgZG8gXAoJCVsgLWYgJCRhIF0g JiYgJHtDQVR9ICQkYSA+PiAke01FVEFESVJ9LytQT1NUX0RFSU5TVEFMTCA7IFwKCWRvbmUgOyBc CglbIC1mICR7UEtHUE9TVERFSU5TVEFMTH0gXSAmJiAke0NQfSAke1BLR1BPU1RERUlOU1RBTEx9 ICR7TUVUQURJUn0vK1BPU1RfREVJTlNUQUxMOyBcCglbIC1mICR7UEtHVVBHUkFERX0gXSAmJiAk e0NQfSAke1BLR1VQR1JBREV9ICR7TUVUQURJUn0vK1VQR1JBREU7IFwKCVsgLWYgJHtQS0dQUkVV UEdSQURFfSBdICYmICR7Q1B9ICR7UEtHUFJFVVBHUkFERX0gJHtNRVRBRElSfS8rUFJFX1VQR1JB REU7IFwKCVsgLWYgJHtQS0dQT1NUVVBHUkFERX0gXSAmJiAke0NQfSAke1BLR1BPU1RVUEdSQURF fSAke01FVEFESVJ9LytQT1NUX1VQR1JBREU7IFwKCSR7Q1B9ICR7REVTQ1J9ICR7TUVUQURJUn0v K0RFU0M7IFwKCVsgLWYgJHtQS0dNRVNTQUdFfSBdICYmICR7Q1B9ICR7UEtHTUVTU0FHRX0gJHtN RVRBRElSfS8rRElTUExBWSB8fCByZXR1cm4gMAoKIyBQcmludCBvdXQgcGFja2FnZSBuYW1lcy4K CnBhY2thZ2UtZGVwZW5kczoKCUAke1BBQ0tBR0UtREVQRU5EUy1MSVNUfSB8ICR7QVdLfSAne3By aW50ICQkMSI6IiQkM30nCgphY3R1YWwtcGFja2FnZS1kZXBlbmRzOgoJQCR7QUNUVUFMLVBBQ0tB R0UtREVQRU5EU30KCiMgQnVpbGQgcGFja2FnZXMgZm9yIHBvcnQgYW5kIGRlcGVuZGVuY2llcwoK cGFja2FnZS1yZWN1cnNpdmU6IHBhY2thZ2UKCUBmb3IgZGlyIGluICQkKCR7QUxMLURFUEVORFMt TElTVH0pOyBkbyBcCgkJKGNkICQkZGlyOyAke01BS0V9IHBhY2thZ2Utbm9pbnN0YWxsKTsgXAoJ ZG9uZQoKIyBTaG93IG1pc3NpbmcgZGVwZW5kZW5jaWVzCm1pc3Npbmc6CglAX29yaWdpbnM9JCQo JHtQS0dfSU5GT30gLWFvcSk7IFwKCWZvciBkaXIgaW4gJCQoJHtBTEwtREVQRU5EUy1MSVNUfSk7 IGRvIFwKCQlfb3JpZ2luPSQke2RpciMjJHtQT1JUU0RJUn0vfTsgXAoJCWlmICEgJCQoJHtFQ0hP X0NNRH0gJCR7X29yaWdpbnN9IHwgJHtHUkVQfSAtcSAkJHtfb3JpZ2lufSk7IHRoZW4gXAoJCQkk e0VDSE9fQ01EfSAkJHtfb3JpZ2lufTsgXAoJCWZpOyBcCglkb25lCgojIFNob3cgbWlzc2luZyBk ZXBlbmRlbmNpZXMgYnkgbmFtZQptaXNzaW5nLXBhY2thZ2VzOgoJQF9wYWNrYWdlcz0kJCgke1BL R19JTkZPfSAtYXEpOyBcCglmb3IgZGlyIGluICQkKCR7QUxMLURFUEVORFMtTElTVH0pOyBkbyBc CgkJX3A9JCQoY2QgJCRkaXI7ICR7TUFLRX0gLVZQS0dOQU1FKTsgXAoJCWlmICEgJCQoJHtFQ0hP X0NNRH0gJCR7X3BhY2thZ2VzfSB8ICR7R1JFUH0gLXEgJCR7X3B9KTsgdGhlbiBcCgkJCSR7RUNI T19DTUR9ICQke19wfTsgXAoJCWZpOyBcCglkb25lCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgRXZlcnl0aGluZyBhZnRl ciBoZXJlIGFyZSBpbnRlcm5hbCB0YXJnZXRzIGFuZCByZWFsbHkKIyBzaG91bGRuJ3QgYmUgdG91 Y2hlZCBieSBhbnlib2R5IGJ1dCB0aGUgcmVsZWFzZSBlbmdpbmVlcnMuCiMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiMgVGhp cyB0YXJnZXQgZ2VuZXJhdGVzIGFuIGluZGV4IGVudHJ5IHN1aXRhYmxlIGZvciBhZ2dyZWdhdGlv biBpbnRvCiMgYSBsYXJnZSBpbmRleC4gIEZvcm1hdCBpczoKIwojIGRpc3RyaWJ1dGlvbi1uYW1l fHBvcnQtcGF0aHxpbnN0YWxsYXRpb24tcHJlZml4fGNvbW1lbnR8IFwKIyAgZGVzY3JpcHRpb24t ZmlsZXxtYWludGFpbmVyfGNhdGVnb3JpZXN8ZXh0cmFjdC1kZXBlbmRzfCBcCiMgIHBhdGNoLWRl cGVuZHN8ZmV0Y2gtZGVwZW5kc3xidWlsZC1kZXBlbmRzfHJ1bi1kZXBlbmRzfHd3dyBzaXRlCiMK IyBJZiB0aGlzIGV2ZXIgY2hhbmdlcywgcG9ydG1nciBzaG91bGQgY29udGFjdCB0aGUgcG9ydHNu YXAgbWFpbnRhaW5lcgojIGZpcnN0IHRvIGF2b2lkIGdyYXR1aXRvdXMgYnJlYWthZ2UuCgouIGlm ICF0YXJnZXQoZGVzY3JpYmUpCl9FWFRSQUNUX0RFUEVORFM9JHtFWFRSQUNUX0RFUEVORFM6Qy9e W14gOl0rOihbXiA6XSspKDpbXiA6XSspPy9cMS86Tzp1fQpfUEFUQ0hfREVQRU5EUz0ke1BBVENI X0RFUEVORFM6Qy9eW14gOl0rOihbXiA6XSspKDpbXiA6XSspPy9cMS86Tzp1fQpfRkVUQ0hfREVQ RU5EUz0ke0ZFVENIX0RFUEVORFM6Qy9eW14gOl0rOihbXiA6XSspKDpbXiA6XSspPy9cMS86Tzp1 fQpfTElCX0RFUEVORFM9JHtMSUJfREVQRU5EUzpDL15bXiA6XSs6KFteIDpdKykoOlteIDpdKyk/ L1wxLzpPOnV9Cl9CVUlMRF9ERVBFTkRTPSR7QlVJTERfREVQRU5EUzpDL15bXiA6XSs6KFteIDpd KykoOlteIDpdKyk/L1wxLzpPOnV9ICR7X0xJQl9ERVBFTkRTfQpfUlVOX0RFUEVORFM9JHtSVU5f REVQRU5EUzpDL15bXiA6XSs6KFteIDpdKykoOlteIDpdKyk/L1wxLzpPOnV9ICR7X0xJQl9ERVBF TkRTfQouIGlmIGV4aXN0cygke0RFU0NSfSkKX0RFU0NSPSR7REVTQ1J9Ci4gZWxzZQpfREVTQ1I9 L2Rldi9udWxsCi4gZW5kaWYKCi4gIGlmIGRlZmluZWQoQlVJTERJTkdfSU5ERVgpICYmIGRlZmlu ZWQoSU5ERVhfUE9SVFMpCklOREVYX09VVD0ke0lOREVYX1RNUERJUn0vJHtJTkRFWEZJTEV9LmRl c2MuYWdncgouICBlbHNlCklOREVYX09VVD0vZGV2L3N0ZG91dAouICBlbmRpZgoKZGVzY3JpYmU6 CglAKCR7RUNIT19DTUR9IC1uICIke1BLR05BTUV9fCR7LkNVUkRJUn18JHtQUkVGSVh9fCI7IFwK CSR7RUNIT19DTUR9IC1uICR7Q09NTUVOVDpRfTsgXAoJJHtFQ0hPX0NNRH0gLW4gInwke19ERVND Un18JHtNQUlOVEFJTkVSfXwke0NBVEVHT1JJRVN9fCR7X0VYVFJBQ1RfREVQRU5EU318JHtfUEFU Q0hfREVQRU5EU318JHtfRkVUQ0hfREVQRU5EU318JHtfQlVJTERfREVQRU5EUzpPOnV9fCR7X1JV Tl9ERVBFTkRTOk86dX18IjsgXAoJd2hpbGUgcmVhZCBvbmUgdHdvIGRpc2NhcmQ7IGRvIFwKCQlj YXNlICIkJG9uZSIgaW4gXAoJCVdXVzopICAgY2FzZSAiJCR0d28iIGluIFwKCQkJaHR0cHM6Ly8q fGh0dHA6Ly8qfGZ0cDovLyopICR7RUNIT19DTUR9IC1uICIkJHR3byIgOzsgXAoJCQkqKSAke0VD SE9fQ01EfSAtbiAiaHR0cDovLyQkdHdvIiA7OyBcCgkJCWVzYWM7IFwKCQkJYnJlYWs7IFwKCQkJ OzsgXAoJCWVzYWM7IFwKCWRvbmUgPCAke0RFU0NSfTsgJHtFQ0hPX0NNRH0pID4+JHtJTkRFWF9P VVR9Ci4gZW5kaWYKCnd3dy1zaXRlOgouaWYgZXhpc3RzKCR7REVTQ1J9KQoJQCR7QVdLfSAnJCQx IH4gL15XV1c6LyB7cHJpbnQgJCQyfScgJHtERVNDUn0gfCAke0hFQUR9IC0xCi5lbHNlCglAJHtF Q0hPX0NNRH0KLmVuZGlmCgouaWYgIXRhcmdldChyZWFkbWVzKQpyZWFkbWVzOglyZWFkbWUKLmVu ZGlmCgouaWYgIXRhcmdldChyZWFkbWUpCnJlYWRtZToKCUAke1JNfSAtZiAkey5DVVJESVJ9L1JF QURNRS5odG1sCglAY2QgJHsuQ1VSRElSfSAmJiAke01BS0V9ICR7LkNVUkRJUn0vUkVBRE1FLmh0 bWwKLmVuZGlmCgokey5DVVJESVJ9L1JFQURNRS5odG1sOgoJQCR7RUNIT19NU0d9ICI9PT0+ICAg Q3JlYXRpbmcgUkVBRE1FLmh0bWwgZm9yICR7UEtHTkFNRX0iCglAJHtTRUR9IC1lICdzfCUlUE9S VCUlfCckJCgke0VDSE9fQ01EfSAkey5DVVJESVJ9IHwgXAoJCQkJCQkJICAke1NFRH0gLWUgJ3N8 LiovXChbXi9dKi9bXi9dKlwpJCR8XDF8JyknfGcnIFwKCQkJLWUgJ3N8JSVQS0clJXwke1BLR05B TUV9fGcnIFwKCQkJLWUgJ3N8JSVDT01NRU5UJSV8JyIkJCgke0VDSE9fQ01EfSAke0NPTU1FTlQ6 UX0pIid8JyBcCgkJCS1lICcvJSVDT01NRU5UJSUvZCcgXAoJCQktZSAnc3wlJURFU0NSJSV8JyIk JCgke0VDSE9fQ01EfSAke0RFU0NSfSB8IFwKCQkJCQkJCQkgJHtTRUR9IC1lICdzfCR7LkNVUkRJ Un0vfHwnKSInfCcgXAoJCQktZSAnc3wlJUVNQUlMJSV8JyIkJCgke0VDSE9fQ01EfSAiJHtNQUlO VEFJTkVSfSIgfCBcCgkJCQkJCQkJICR7U0VEfSAtZSAncy8oW14pXSopLy87cy8uKjwvLztzLz4u Ki8vJykiJ3xnJyBcCgkJCS1lICdzfCUlTUFJTlRBSU5FUiUlfCR7TUFJTlRBSU5FUn18ZycgXAoJ CQktZSAnc3wlJVdFQlNJVEUlJXwnIiQkKGNkICR7LkNVUkRJUn0gJiYgZXZhbCAke01BS0V9IHBy ZXR0eS1wcmludC13d3ctc2l0ZSkiJ3wnIFwKCQkJLWUgJ3N8JSVCVUlMRF9ERVBFTkRTJSV8JyIk JChjZCAkey5DVVJESVJ9ICYmIGV2YWwgJHtNQUtFfSBwcmV0dHktcHJpbnQtYnVpbGQtZGVwZW5k cy1saXN0KSInfCcgXAoJCQktZSAnc3wlJVJVTl9ERVBFTkRTJSV8JyIkJChjZCAkey5DVVJESVJ9 ICYmIGV2YWwgJHtNQUtFfSBwcmV0dHktcHJpbnQtcnVuLWRlcGVuZHMtbGlzdCkiJ3wnIFwKCQkJ LWUgJ3N8JSVUT1AlJXwnIiQkKCR7RUNIT19DTUR9ICR7Q0FURUdPUklFU30gfCBcCgkJCQkJCQkg ICAke1NFRH0gLWUgJ3N8IC4qfHwnIC1lICdzfFteL10qfC4ufGcnKSInLy4ufCcgXAoJCSR7VEVN UExBVEVTfS9SRUFETUUucG9ydCA+PiAkey5UQVJHRVR9CgojIFRoZSBmb2xsb3dpbmcgdHdvIHRh cmdldHMgcmVxdWlyZSBhbiB1cC10by1kYXRlIElOREVYIGluICR7UE9SVFNESVJ9CgpfUFJFVFRZ X1BSSU5UX0RFUEVORFNfTElTVD1cCglpZiBbICEgLXIgJHtJTkRFWERJUn0vJHtJTkRFWEZJTEV9 IF0gOyB0aGVuIFwKCQkke0VDSE9fTVNHfSAiJHsuVEFSR0VUfSByZXF1aXJlcyBhbiBJTkRFWCBm aWxlICgke0lOREVYRklMRX0pLiBQbGVhc2UgcnVuIG1ha2UgaW5kZXggb3IgbWFrZSBmZXRjaGlu ZGV4LiI7IFwKCWVsc2UgXAoJCXRhcmdldD0key5UQVJHRVQ6Qy9wcmV0dHktcHJpbnQtKC4qKS1k ZXBlbmRzLWxpc3QvXDEvfSA7IFwKCQlpZiBbICIkJHRhcmdldCIgPSAiYnVpbGQiIF0gOyB0aGVu IGZsZG51bT04IDsgZWxzZSBmbGRudW09OSA7IGZpOyBcCgkJJHtFQ0hPX01TR30gLW4gJ1RoaXMg cG9ydCByZXF1aXJlcyBwYWNrYWdlKHMpICInIDsgXAoJCSR7RUNIT19NU0d9IC1uIGAke0FXS30g LUZcfCAiXFwkJDEgfiAvXiR7UEtHTkFNRX0vIHtwcmludCBcXCQkJCR7ZmxkbnVtfTt9IiAke0lO REVYRElSfS8ke0lOREVYRklMRX1gIDsgXAoJCSR7RUNIT19NU0d9ICJcIiB0byAkJHRhcmdldC4i OyBcCglmaTsKCgouaWYgIXRhcmdldChwcmV0dHktcHJpbnQtYnVpbGQtZGVwZW5kcy1saXN0KQpw cmV0dHktcHJpbnQtYnVpbGQtZGVwZW5kcy1saXN0OgouaWYgZGVmaW5lZChQS0dfREVQRU5EUykg fHwgZGVmaW5lZChFWFRSQUNUX0RFUEVORFMpIHx8IGRlZmluZWQoUEFUQ0hfREVQRU5EUykgfHwg XAoJZGVmaW5lZChGRVRDSF9ERVBFTkRTKSB8fCBkZWZpbmVkKEJVSUxEX0RFUEVORFMpIHx8IGRl ZmluZWQoTElCX0RFUEVORFMpCglAJHtfUFJFVFRZX1BSSU5UX0RFUEVORFNfTElTVH0KLmVuZGlm Ci5lbmRpZgoKLmlmICF0YXJnZXQocHJldHR5LXByaW50LXJ1bi1kZXBlbmRzLWxpc3QpCnByZXR0 eS1wcmludC1ydW4tZGVwZW5kcy1saXN0OgouaWYgZGVmaW5lZChSVU5fREVQRU5EUykgfHwgZGVm aW5lZChMSUJfREVQRU5EUykKCUAke19QUkVUVFlfUFJJTlRfREVQRU5EU19MSVNUfQouZW5kaWYK LmVuZGlmCgpfU1VCX0xJU1RfVEVNUD0JJHtTVUJfTElTVDpTLyQvIWcvOlMvXi8gLWUgcyElJS86 Uy89LyUlIS99Ci5pZiAhdGFyZ2V0KGFwcGx5LXNsaXN0KQphcHBseS1zbGlzdDoKLmlmIGRlZmlu ZWQoU1VCX0ZJTEVTKQouZm9yIGZpbGUgaW4gJHtTVUJfRklMRVN9Ci5pZiAhZXhpc3RzKCR7RklM RVNESVJ9LyR7ZmlsZX0uaW4pCglAJHtFQ0hPX01TR30gIioqIE1pc3NpbmcgJHtGSUxFU0RJUn0v JHtmaWxlfS5pbiBmb3IgJHtQS0dOQU1FfS4iOyBleGl0IDEKLmVsc2UKCUAke1NFRH0gJHtfU1VC X0xJU1RfVEVNUH0gLWUgJy9eQGNvbW1lbnQgL2QnICR7RklMRVNESVJ9LyR7ZmlsZX0uaW4gPiAk e1dSS0RJUn0vJHtmaWxlfQouZW5kaWYKLmVuZGZvcgouZm9yIGkgaW4gcGtnLW1lc3NhZ2UgcGtn LWluc3RhbGwgcGtnLWRlaW5zdGFsbCBwa2ctcmVxCi5pZiAke1NVQl9GSUxFUzpNJHtpfSp9IT0i Igoke2k6Uy8tLy86dHV9PQkke1dSS0RJUn0vJHtTVUJfRklMRVM6TSR7aX0qfQouZW5kaWYKLmVu ZGZvcgouZW5kaWYKLmVuZGlmCgojIEdlbmVyYXRlIHBhY2tpbmcgbGlzdC4gIEFsc28gdGVzdHMg dG8gbWFrZSBzdXJlIGFsbCByZXF1aXJlZCBwYWNrYWdlCiMgZmlsZXMgZXhpc3QuCgouaWYgIXRh cmdldChnZW5lcmF0ZS1wbGlzdCkKZ2VuZXJhdGUtcGxpc3Q6ICR7V1JLRElSfQoJQCR7RUNIT19N U0d9ICI9PT0+ICAgR2VuZXJhdGluZyB0ZW1wb3JhcnkgcGFja2luZyBsaXN0IgoJQCR7TUtESVJ9 IGAke0RJUk5BTUV9ICR7VE1QUExJU1R9YAoJQGlmIFsgISAtZiAke0RFU0NSfSBdOyB0aGVuICR7 RUNIT19NU0d9ICIqKiBNaXNzaW5nIHBrZy1kZXNjciBmb3IgJHtQS0dOQU1FfS4iOyBleGl0IDE7 IGZpCglAPiR7VE1QUExJU1R9CglAZm9yIGZpbGUgaW4gJHtQTElTVF9GSUxFU307IGRvIFwKCQkk e0VDSE9fQ01EfSAkJHtmaWxlfSB8ICR7U0VEfSAke1BMSVNUX1NVQjpTLyQvIWcvOlMvXi8gLWUg cyElJS86Uy89LyUlIS99ID4+ICR7VE1QUExJU1R9OyBcCglkb25lCglAaWYgWyAtZiAke1BMSVNU fSBdOyB0aGVuIFwKCQkke1NFRH0gJHtQTElTVF9TVUI6Uy8kLyFnLzpTL14vIC1lIHMhJSUvOlMv PS8lJSEvfSAke1BMSVNUfSA+PiAke1RNUFBMSVNUfTsgXAoJZmkKCiMgS2VlcCBQTElTVF9ESVJT VFJZIGFzIGNvbXBhdGliaWxpdHkKLmZvciBkaXIgaW4gJHtQTElTVF9ESVJTfSAke1BMSVNUX0RJ UlNUUll9CglAJHtFQ0hPX0NNRH0gJHtkaXJ9IHwgJHtTRUR9ICR7UExJU1RfU1VCOlMvJC8hZy86 Uy9eLyAtZSBzISUlLzpTLz0vJSUhL30gLWUgJ3MsXixAZGlyICwnID4+ICR7VE1QUExJU1R9Ci5l bmRmb3IKCi5pZiBkZWZpbmVkKFVTRV9MSU5VWF9QUkVGSVgpCi5pZiBkZWZpbmVkKFVTRV9MRENP TkZJRykKCUAke0VDSE9fQ01EfSAiQGV4ZWMgJHtMRENPTkZJR19DTUR9IiA+PiAke1RNUFBMSVNU fQoJQCR7RUNIT19DTUR9ICJAdW5leGVjICR7TERDT05GSUdfQ01EfSIgPj4gJHtUTVBQTElTVH0K LmVuZGlmCi5lbHNlCi5pZiBkZWZpbmVkKFVTRV9MRENPTkZJRykKLmlmICFkZWZpbmVkKElOU1RB TExfQVNfVVNFUikKCUAke0VDSE9fQ01EfSAiQGV4ZWMgJHtMRENPTkZJR30gLW0gJHtVU0VfTERD T05GSUd9IiA+PiAke1RNUFBMSVNUfQoJQCR7RUNIT19DTUR9ICJAdW5leGVjICR7TERDT05GSUd9 IC1SIiA+PiAke1RNUFBMSVNUfQouZWxzZQoJQCR7RUNIT19DTUR9ICJAZXhlYyAke0xEQ09ORklH fSAtbSAke1VTRV9MRENPTkZJR30gfHwgJHtUUlVFfSIgPj4gJHtUTVBQTElTVH0KCUAke0VDSE9f Q01EfSAiQHVuZXhlYyAke0xEQ09ORklHfSAtUiB8fCAke1RSVUV9IiA+PiAke1RNUFBMSVNUfQou ZW5kaWYKLmVuZGlmCi5pZiBkZWZpbmVkKFVTRV9MRENPTkZJRzMyKQouaWYgIWRlZmluZWQoSU5T VEFMTF9BU19VU0VSKQoJQCR7RUNIT19DTUR9ICJAZXhlYyAke0xEQ09ORklHfSAtMzIgLW0gJHtV U0VfTERDT05GSUczMn0iID4+ICR7VE1QUExJU1R9CglAJHtFQ0hPX0NNRH0gIkB1bmV4ZWMgJHtM RENPTkZJR30gLTMyIC1SIiA+PiAke1RNUFBMSVNUfQouZWxzZQoJQCR7RUNIT19DTUR9ICJAZXhl YyAke0xEQ09ORklHfSAtMzIgLW0gJHtVU0VfTERDT05GSUczMn0gfHwgJHtUUlVFfSIgPj4gJHtU TVBQTElTVH0KCUAke0VDSE9fQ01EfSAiQHVuZXhlYyAke0xEQ09ORklHfSAtMzIgLVIgfHwgJHtU UlVFfSIgPj4gJHtUTVBQTElTVH0KLmVuZGlmCi5lbmRpZgouZW5kaWYKLmVuZGlmCgoke1RNUFBM SVNUfToKCUBjZCAkey5DVVJESVJ9ICYmICR7TUFLRX0gZ2VuZXJhdGUtcGxpc3QKCiR7VE1QUExJ U1RfU09SVH06ICR7VE1QUExJU1R9CglAJHtTT1JUfSAtdSAke1RNUFBMSVNUfSA+JHtUTVBQTElT VF9TT1JUfQoKLmZvciBfdHlwZSBpbiBFWEFNUExFUyBET0NTCi5pZiAhdGFyZ2V0KGFkZC1wbGlz dC0ke190eXBlOnRsfSkKLmlmIGRlZmluZWQoUE9SVCR7X3R5cGV9KSAmJiAhZGVmaW5lZChOT1BP UlQke190eXBlfSkKYWRkLXBsaXN0LSR7X3R5cGU6dGx9OgouZm9yIHggaW4gJHtQT1JUJHtfdHlw ZX19CglAaWYgJHtFQ0hPX0NNRH0gIiR7eH0ifCAke0FXS30gJyQkMSB+IC8oXCp8XHx8XFt8XF18 XD98XHt8XH18XCQkKS8geyBleGl0IDF9Oyc7IHRoZW4gXAoJCWlmIFsgISAtZSAke1NUQUdFRElS fSR7JHtfdHlwZX1ESVJ9LyR7eH0gXTsgdGhlbiBcCgkJJHtFQ0hPX0NNRH0gJHske190eXBlfURJ Un0vJHt4fSA+PiAke1RNUFBMSVNUfTsgXAoJZmk7ZmkKLmVuZGZvcgoJQCR7RklORH0gLVAgJHtQ T1JUJHtfdHlwZX06Uy9eLyR7U1RBR0VESVJ9JHske190eXBlfURJUn1cLy99ICEgLXR5cGUgZCAy Pi9kZXYvbnVsbCB8IFwKCQkke1NFRH0gLW5lICdzLF4ke1NUQUdFRElSfSwscCcgPj4gJHtUTVBQ TElTVH0KLmVuZGlmCi5lbmRpZgouZW5kZm9yCgouaWYgIXRhcmdldChhZGQtcGxpc3QtZGF0YSkK LmlmIGRlZmluZWQoUE9SVERBVEEpCmFkZC1wbGlzdC1kYXRhOgouZm9yIHggaW4gJHtQT1JUREFU QX0KCUBpZiAke0VDSE9fQ01EfSAiJHt4fSJ8ICR7QVdLfSAnJCQxIH4gLyhcKnxcfHxcW3xcXXxc P3xce3xcfXxcJCQpLyB7IGV4aXQgMX07JzsgdGhlbiBcCgkJaWYgWyAhIC1lICR7U1RBR0VESVJ9 JHtEQVRBRElSfS8ke3h9IF07IHRoZW4gXAoJCSR7RUNIT19DTUR9ICR7REFUQURJUn0vJHt4fSA+ PiAke1RNUFBMSVNUfTsgXAoJZmk7ZmkKLmVuZGZvcgoJQCR7RklORH0gLVAgJHtQT1JUREFUQTpT L14vJHtTVEFHRURJUn0ke0RBVEFESVJ9XC8vfSAhIC10eXBlIGQgMj4vZGV2L251bGwgfCBcCgkJ JHtTRUR9IC1uZSAncyxeJHtTVEFHRURJUn0sLHAnID4+ICR7VE1QUExJU1R9Ci5lbmRpZgouZW5k aWYKCi5pZiAhdGFyZ2V0KGFkZC1wbGlzdC1pbmZvKQouaWYgZGVmaW5lZChJTkZPKQphZGQtcGxp c3QtaW5mbzoKLmZvciBpIGluICR7SU5GT30KCUAke0xTfSAke1NUQUdFRElSfSR7UFJFRklYfS8k e0lORk9fUEFUSH0vJGkuaW5mbyogfCAke1NFRH0gLWUgczoke1NUQUdFRElSfTpAaW5mb1wgOmcg Pj4gJHtUTVBQTElTVH0KLmVuZGZvcgouZW5kaWYKLmVuZGlmCgojIElmIHdlJ3JlIGluc3RhbGxp bmcgaW50byBhIG5vbi1zdGFuZGFyZCBQUkVGSVgsIHdlIG5lZWQgdG8gcmVtb3ZlIHRoYXQgZGly ZWN0b3J5IGF0CiMgZGVpbnN0YWxsLXRpbWUKLmlmICF0YXJnZXQoYWRkLXBsaXN0LXBvc3QpCi5p ZiAoJHtQUkVGSVh9ICE9ICR7TE9DQUxCQVNFfSAmJiAke1BSRUZJWH0gIT0gJHtMSU5VWEJBU0V9 ICYmIFwKICAgICR7UFJFRklYfSAhPSAiL3VzciIgJiYgIWRlZmluZWQoTk9fUFJFRklYX1JNRElS KSkKYWRkLXBsaXN0LXBvc3Q6CglAJHtFQ0hPX0NNRH0gIkBkaXIgJHtQUkVGSVh9IiA+PiAke1RN UFBMSVNUfQouZW5kaWYKLmVuZGlmCgouaWYgIXRhcmdldChpbnN0YWxsLXJjLXNjcmlwdCkKLmlm IGRlZmluZWQoVVNFX1JDX1NVQlIpICYmICR7VVNFX1JDX1NVQlI6dHV9ICE9ICJZRVMiCmluc3Rh bGwtcmMtc2NyaXB0OgoJQCR7RUNIT19NU0d9ICI9PT0+IFN0YWdpbmcgcmMuZCBzdGFydHVwIHNj cmlwdChzKSIKCUBmb3IgaSBpbiAke1VTRV9SQ19TVUJSfTsgZG8gXAoJCV9wcmVmaXg9JHtQUkVG SVh9OyBcCgkJWyAiJHtQUkVGSVh9IiA9ICIvdXNyIiBdICYmIF9wcmVmaXg9IiIgOyBcCgkJJHtJ TlNUQUxMX1NDUklQVH0gJHtXUktESVJ9LyQke2l9ICR7U1RBR0VESVJ9JCR7X3ByZWZpeH0vZXRj L3JjLmQvJCR7aSUuc2h9OyBcCgkJJHtFQ0hPX0NNRH0gIiQke19wcmVmaXh9L2V0Yy9yYy5kLyQk e2klLnNofSIgPj4gJHtUTVBQTElTVH07IFwKCWRvbmUKLmVuZGlmCi5lbmRpZgoKLmlmICF0YXJn ZXQoY2hlY2stbWFuKQpjaGVjay1tYW46IHN0YWdlCglAJHtFQ0hPX01TR30gIj09PT0+IENoZWNr aW5nIG1hbiBwYWdlcyAoY2hlY2stbWFuKSIKCUBtZGlycz0gOyBcCglmb3IgZGlyIGluICR7TUFO RElSUzpTL14vJHtTVEFHRURJUn0vfSA7IGRvIFwKCQlbIC1kICQkZGlyIF0gJiYgbWRpcnM9IiQk bWRpcnMgJCRkaXIiIDtcCglkb25lIDsgXAoJZXJyPTAgOyBcCglmb3IgZGlyIGluICQkbWRpcnM7 IGRvIFwKCQlmb3IgZiBpbiAkJChmaW5kICQkZGlyIC1uYW1lICIqLmd6Iik7IGRvIFwKCQkJJHtF Q0hPX0NNRH0gIj09PT4gQ2hlY2tpbmcgJCR7ZiMjKi99IiA7IFwKCQkJZ3VuemlwIC1jICQkZiB8 IG1hbmRvYyAtVGxpbnQgLVdlcnJvciAmJiBjb250aW51ZSA7IFwKCQkJZXJyPTEgOyBcCgkJZG9u ZSA7IFwKCWRvbmUgOyBcCglleGl0ICQkZXJyCi5lbmRpZgoKIyBDb21wcmVzcyBhbGwgbWFucGFn ZSBub3QgYWxyZWFkeSBjb21wcmVzc2VkIHdoaWNoIGFyZSBub3QgaGFyZGxpbmtzCiMgRmluZCBh bGwgbWFucGFnZXMgd2hpY2ggYXJlIG5vdCBjb21wcmVzc2VkIGFuZCBhcmUgaGFkbGlua3MsIGFu ZCBvbmx5IGdldCB0aGUgbGlzdCBvZiBpbm9kZXMgY29uY2VybmVkLCBmb3IgZWFjaCBvZiB0aGVt IGNvbXByZXNzIHRoZSBmaXJzdCBvbmUgZm91bmQgYW5kIHJlY3JlYXRlIHRoZSBoYXJkbGlua3Mg Zm9yIHRoZSBvdGhlcnMKIyBGaXhlcyBhbGwgZGVhZCBzeW1saW5rcyBsZWZ0IGJ5IHRoZSBwcmV2 aW91cyByb3VuZAouaWYgIXRhcmdldChjb21wcmVzcy1tYW4pCmNvbXByZXNzLW1hbjoKCUAke0VD SE9fTVNHfSAiPT09PT4gQ29tcHJlc3NpbmcgbWFuIHBhZ2VzIChjb21wcmVzcy1tYW4pIgoJQG1k aXJzPSA7IFwKCWZvciBkaXIgaW4gJHtNQU5ESVJTOlMvXi8ke1NUQUdFRElSfS99IDsgZG8gXAoJ CVsgLWQgJCRkaXIgXSAmJiBtZGlycz0iJCRtZGlycyAkJGRpciIgO1wKCWRvbmUgOyBcCglmb3Ig ZGlyIGluICQkbWRpcnM7IGRvIFwKCQkke0ZJTkR9ICQkZGlyIC10eXBlIGYgXCEgLW5hbWUgIiou Z3oiIC1saW5rcyAxIC1leGVjICR7R1pJUF9DTUR9IHt9IFw7IDsgXAoJCSR7RklORH0gJCRkaXIg LXR5cGUgZiBcISAtbmFtZSAiKi5neiIgXCEgLWxpbmtzIDEgLWV4ZWMgJHtTVEFUfSAtZiAnJWkn IHt9IFw7IHwgXAoJCQkke1NPUlR9IC11IHwgd2hpbGUgcmVhZCBpbm9kZSA7IGRvIFwKCQkJCXVu c2V0IHJlZiA7IFwKCQkJCWZvciBmIGluICQkKCR7RklORH0gJCRkaXIgLXR5cGUgZiAtaW51bSAk JHtpbm9kZX0gLXByaW50KTsgZG8gXAoJCQkJCWlmIFsgLXogJCRyZWYgXTsgdGhlbiBcCgkJCQkJ CXJlZj0kJHtmfS5neiA7IFwKCQkJCQkJJHtHWklQX0NNRH0gJCR7Zn0gOyBcCgkJCQkJCWNvbnRp bnVlIDsgXAoJCQkJCWZpIDsgXAoJCQkJCSR7Uk19IC1mICQke2Z9IDsgXAoJCQkJCShjZCAkJHtm JS8qfTsgJHtMTn0gLWYgJCR7cmVmIyMqL30gJCR7ZiMjKi99Lmd6KSA7IFwKCQkJCWRvbmUgOyBc CgkJCWRvbmUgOyBcCgkJJHtGSU5EfSAkJGRpciAtdHlwZSBsIFwhIC1uYW1lICIqLmd6IiB8IHdo aWxlIHJlYWQgbGluayA7IGRvIFwKCQkJCSR7TE59IC1zZiAkJChyZWFkbGluayAkJGxpbmspLmd6 ICQkbGluay5neiA7XAoJCQkJJHtSTX0gLWYgJCRsaW5rIDsgXAoJCWRvbmU7IFwKCWRvbmUKLmVu ZGlmCgouaWYgIXRhcmdldChzdGFnZS1kaXIpCnN0YWdlLWRpcjoKCUAke01LRElSfSAke1NUQUdF RElSfSR7UFJFRklYfQouaWYgIWRlZmluZWQoTk9fTVRSRUUpCglAJHtNVFJFRV9DTUR9ICR7TVRS RUVfQVJHU30gJHtTVEFHRURJUn0ke1BSRUZJWH0gPiAvZGV2L251bGwKLmVuZGlmCi5lbmRpZgoK LmlmICF0YXJnZXQobWFrZXBsaXN0KQptYWtlcGxpc3Q6IHN0YWdlCglAJHtTRVRFTlZ9ICR7Q09f RU5WfSAke1NIfSAke1NDUklQVFNESVJ9L2NoZWNrLXN0YWdlZGlyLnNoIG1ha2VwbGlzdAouZW5k aWYKCi5pZiAhdGFyZ2V0KGNoZWNrLXBsaXN0KQpjaGVjay1wbGlzdDogc3RhZ2UKCUAke0VDSE9f TVNHfSAiPT09PT4gQ2hlY2tpbmcgZm9yIHBrZy1wbGlzdCBpc3N1ZXMgKGNoZWNrLXBsaXN0KSIK CUAke1NFVEVOVn0gJHtDT19FTlZ9ICR7U0h9ICR7U0NSSVBUU0RJUn0vY2hlY2stc3RhZ2VkaXIu c2ggY2hlY2twbGlzdAoJQCR7RUNIT19NU0d9ICI9PT0+IE5vIHBrZy1wbGlzdCBpc3N1ZXMgZm91 bmQgKGNoZWNrLXBsaXN0KSIKLmVuZGlmCgouaWYgIXRhcmdldChjaGVjay1vcnBoYW5zKQpjaGVj ay1vcnBoYW5zOiBjaGVjay1wbGlzdAouZW5kaWYKCi5pZiAhdGFyZ2V0KHN0YWdlLXFhKQpzdGFn ZS1xYToKCUAke0VDSE9fTVNHfSAiPT09PT4gUnVubmluZyBRL0EgdGVzdHMgKHN0YWdlLXFhKSIK CUAke1NFVEVOVn0gJHtRQV9FTlZ9ICR7U0h9ICR7U0NSSVBUU0RJUn0vcWEuc2gKLmVuZGlmCgoj IEZha2UgaW5zdGFsbGF0aW9uIG9mIHBhY2thZ2Ugc28gdGhhdCB1c2VyIGNhbiBwa2cgZGVsZXRl IGl0IGxhdGVyLgouaWYgIXRhcmdldChmYWtlLXBrZykKU1RBR0VfQVJHUz0JCS1pICR7U1RBR0VE SVJ9CgouaWYgIWRlZmluZWQoTk9fUEtHX1JFR0lTVEVSKQpmYWtlLXBrZzogY3JlYXRlLW1hbmlm ZXN0Ci5pZiBkZWZpbmVkKElOU1RBTExTX0RFUEVORFMpCglAJHtFQ0hPX01TR30gIj09PT4gICBS ZWdpc3RlcmluZyBpbnN0YWxsYXRpb24gZm9yICR7UEtHTkFNRX0gYXMgYXV0b21hdGljIgouZWxz ZQoJQCR7RUNIT19NU0d9ICI9PT0+ICAgUmVnaXN0ZXJpbmcgaW5zdGFsbGF0aW9uIGZvciAke1BL R05BTUV9IgouZW5kaWYKLmlmIGRlZmluZWQoSU5TVEFMTFNfREVQRU5EUykKCUAke1NFVEVOVn0g JHtQS0dfRU5WfSBGT1JDRV9QT1NUPSIke19GT1JDRV9QT1NUX1BBVFRFUk5TfSIgJHtQS0dfQ01E fSAtZCAke1NUQUdFX0FSR1N9IC1tICR7TUVUQURJUn0gLWYgJHtUTVBQTElTVH0KLmVsc2UKCUAk e1NFVEVOVn0gJHtQS0dfRU5WfSBGT1JDRV9QT1NUPSIke19GT1JDRV9QT1NUX1BBVFRFUk5TfSIg JHtQS0dfQ01EfSAke1NUQUdFX0FSR1N9IC1tICR7TUVUQURJUn0gLWYgJHtUTVBQTElTVH0KLmVu ZGlmCglAJHtSTX0gLXJmICR7TUVUQURJUn0KLmVuZGlmCi5lbmRpZgoKIyBEZXBlbmQgaXMgZ2Vu ZXJhbGx5IG1lYW5pbmdsZXNzIGZvciBhcmJpdHJhcnkgcG9ydHMsIGJ1dCBpZiBzb21lb25lIHdh bnRzCiMgb25lIHRoZXkgY2FuIG92ZXJyaWRlIHRoaXMuICBUaGlzIGlzIGp1c3QgdG8gY2F0Y2gg cGVvcGxlIHdobyd2ZSBnb3R0ZW4gaW50bwojIHRoZSBoYWJpdCBvZiB0eXBpbmcgYG1ha2UgZGVw ZW5kIGFsbCBpbnN0YWxsJyBhcyBhIG1hdHRlciBvZiBjb3Vyc2UuCiMgU2FtZSBnb2VzIGZvciB0 YWdzCi5mb3IgX3QgaW4gZGVwZW5kIHRhZ3MKLmlmICF0YXJnZXQoJHtfdH0pCiR7X3R9OgouZW5k aWYKLmVuZGZvcgoKLmlmICFkZWZpbmVkKE5PUFJFQ0lPVVNNQUtFVkFSUykKIyBUaGVzZSB3b24n dCBjaGFuZ2UsIHNvIHdlIGNhbiBwYXNzIHRoZW0gdGhyb3VnaCB0aGUgZW52aXJvbm1lbnQKLk1B S0VGTEFHUzogXAoJQVJDSD0iJHtBUkNIOlMvIi8iJyInIi9nOlMvXCQvXCRcJC9nOlMvXFwvXFxc XC9nfSIgXAoJT1BTWVM9IiR7T1BTWVM6Uy8iLyInIiciL2c6Uy9cJC9cJFwkL2c6Uy9cXC9cXFxc L2d9IiBcCglPU1JFTD0iJHtPU1JFTDpTLyIvIiciJyIvZzpTL1wkL1wkXCQvZzpTL1xcL1xcXFwv Z30iIFwKCU9TVkVSU0lPTj0iJHtPU1ZFUlNJT046Uy8iLyInIiciL2c6Uy9cJC9cJFwkL2c6Uy9c XC9cXFxcL2d9IiBcCglTWVNURU1WRVJTSU9OPSIke1NZU1RFTVZFUlNJT046Uy8iLyInIiciL2c6 Uy9cJC9cJFwkL2c6Uy9cXC9cXFxcL2d9IgouZW5kaWYKCi5pZiAhdGFyZ2V0KHByZS1jaGVjay1j b25maWcpCnByZS1jaGVjay1jb25maWc6Ci5mb3Igc2luZ2xlIGluICR7T1BUSU9OU19TSU5HTEV9 Ci4gIGZvciBvcHQgaW4gJHtPUFRJT05TX1NJTkdMRV8ke3NpbmdsZX19Ci4gICAgaWYgZW1wdHko QUxMX09QVElPTlM6TSR7c2luZ2xlfSkgfHwgIWVtcHR5KFBPUlRfT1BUSU9OUzpNJHtzaW5nbGV9 KQouICAgICAgaWYgIWVtcHR5KFBPUlRfT1BUSU9OUzpNJHtvcHR9KQouICAgICAgICBpZiBkZWZp bmVkKE9QVEZPVU5EKQpPUFRJT05TX1dST05HX1NJTkdMRSs9CSR7c2luZ2xlfQouICAgICAgICBl bHNlCk9QVEZPVU5EPQl0cnVlCi4gICAgICAgIGVuZGlmCi4gICAgICBlbmRpZgouICAgIGVsc2UK IyBpZiBjb25kaXRpb25hbCBhbmQgaWYgdGhlIGNvbmRpdGlvbiBpcyB1bmNoZWNrZWQsIHJlbW92 ZSBvcHQgZnJvbSB0aGUgbGlzdCBvZgojIHNldCBvcHRpb25zClBPUlRfT1BUSU9OUzo9CSR7UE9S VF9PUFRJT05TOk4ke29wdH19Ck9QVE5PQ0hFQ0s9CXRydWUKLiAgICBlbmRpZgouICBlbmRmb3IK LiAgaWYgIWRlZmluZWQoT1BURk9VTkQpICYmICFkZWZpbmVkKE9QVE5PQ0hFQ0spCk9QVElPTlNf V1JPTkdfU0lOR0xFKz0JJHtzaW5nbGV9Ci4gIGVuZGlmCi4gIHVuZGVmIE9QVEZPVU5ECi4gIHVu ZGVmIE9QVE5PQ0hFQ0sKLmVuZGZvcgoudW5kZWYgc2luZ2xlCgouZm9yIHJhZGlvIGluICR7T1BU SU9OU19SQURJT30KLiAgZm9yIG9wdCBpbiAke09QVElPTlNfUkFESU9fJHtyYWRpb319Ci4gICAg aWYgIWVtcHR5KFBPUlRfT1BUSU9OUzpNJHtvcHR9KQouICAgICAgaWYgZGVmaW5lZChPUFRGT1VO RCkKT1BUSU9OU19XUk9OR19SQURJTys9CSR7cmFkaW99Ci4gICAgICBlbHNlCk9QVEZPVU5EPQl0 cnVlCi4gICAgICBlbmRpZgouICAgIGVuZGlmCi4gIGVuZGZvcgouICB1bmRlZiBPUFRGT1VORAou ZW5kZm9yCgouZm9yIG11bHRpIGluICR7T1BUSU9OU19NVUxUSX0KLiAgZm9yIG9wdCBpbiAke09Q VElPTlNfTVVMVElfJHttdWx0aX19Ci4gICAgaWYgZW1wdHkoQUxMX09QVElPTlM6TSR7bXVsdGl9 KSB8fCAhZW1wdHkoUE9SVF9PUFRJT05TOk0ke211bHRpfSkKLiAgICAgIGlmICFlbXB0eShQT1JU X09QVElPTlM6TSR7b3B0fSkKT1BURk9VTkQ9CXRydWUKLiAgICAgIGVuZGlmCi4gICAgZWxzZQoj IGlmIGNvbmRpdGlvbmFsIGFuZCBpZiB0aGUgY29uZGl0aW9uIGlzIHVuY2hlY2tlZCwgcmVtb3Zl IG9wdCBmcm9tIHRoZSBsaXN0IG9mCiMgc2V0IG9wdGlvbnMKUE9SVF9PUFRJT05TOj0JJHtQT1JU X09QVElPTlM6TiR7b3B0fX0KT1BUTk9DSEVDSz0JdHJ1ZQouICAgIGVuZGlmCi4gIGVuZGZvcgou ICBpZiAhZGVmaW5lZChPUFRGT1VORCkgJiYgIWRlZmluZWQoT1BUTk9DSEVDSykKT1BUSU9OU19X Uk9OR19NVUxUSSs9CSR7bXVsdGl9Ci4gIGVuZGlmCi4gIHVuZGVmIE9QVEZPVU5ECi4gIHVuZGVm IE9QVE5PQ0hFQ0sKLmVuZGZvcgoudW5kZWYgbXVsdGkKLnVuZGVmIG9wdAouZW5kaWYgI3ByZS1j aGVjay1jb25maWcKCi5pZiAhdGFyZ2V0KF9jaGVjay1jb25maWcpCl9jaGVjay1jb25maWc6IHBy ZS1jaGVjay1jb25maWcKLmZvciBtdWx0aSBpbiAke09QVElPTlNfV1JPTkdfTVVMVEl9CglAJHtF Q0hPX01TR30gIj09PT0+IFlvdSBtdXN0IGNoZWNrIGF0IGxlYXN0IG9uZSBvcHRpb24gaW4gdGhl ICR7bXVsdGl9IG11bHRpIgouZW5kZm9yCi5mb3Igc2luZ2xlIGluICR7T1BUSU9OU19XUk9OR19T SU5HTEV9CglAJHtFQ0hPX01TR30gIj09PT0+IFlvdSBtdXN0IHNlbGVjdCBvbmUgYW5kIG9ubHkg b25lIG9wdGlvbiBmcm9tIHRoZSAke3NpbmdsZX0gc2luZ2xlIgouZW5kZm9yCi5mb3IgcmFkaW8g aW4gJHtPUFRJT05TX1dST05HX1JBRElPfQoJQCR7RUNIT19NU0d9ICI9PT09PiBZb3UgY2Fubm90 IHNlbGVjdCBtdWx0aXBsZSBvcHRpb25zIGZyb20gdGhlICR7cmFkaW99IHJhZGlvIgouZW5kZm9y Ci5pZiAhZW1wdHkoT1BUSU9OU19XUk9OR19NVUxUSSkgfHwgIWVtcHR5KE9QVElPTlNfV1JPTkdf U0lOR0xFKSB8fCAhZW1wdHkoT1BUSU9OU19XUk9OR19SQURJTykKX0NIRUNLX0NPTkZJR19FUlJP Uj0JdHJ1ZQouZW5kaWYKLmVuZGlmICMgX2NoZWNrLWNvbmZpZwoKLmlmICF0YXJnZXQoY2hlY2st Y29uZmlnKQpjaGVjay1jb25maWc6IF9jaGVjay1jb25maWcKLmlmICFlbXB0eShfQ0hFQ0tfQ09O RklHX0VSUk9SKQoJQCR7RkFMU0V9Ci5lbmRpZgouZW5kaWYgIyBjaGVjay1jb25maWcKCi5pZiAh dGFyZ2V0KHNhbml0eS1jb25maWcpCnNhbml0eS1jb25maWc6IF9jaGVjay1jb25maWcKLmlmICFl bXB0eShfQ0hFQ0tfQ09ORklHX0VSUk9SKQoJQGVjaG8gLW4gIkNvbmZpZyBpcyBpbnZhbGlkLiBS ZS1lZGl0PyBbWS9uXSAiOyBcCglyZWFkIGFuc3dlcjsgXAoJY2FzZSAkJGFuc3dlciBpbiBcCglb Tm5dfFtObl1bT29dKSBcCgkJZXhpdCAwOyBcCgllc2FjOyBcCgljZCAkey5DVVJESVJ9ICYmICR7 TUFLRX0gY29uZmlnCi5lbmRpZgouZW5kaWYgIyBzYW5pdHktY29uZmlnCgouaWYgIXRhcmdldChw cmUtY29uZmlnKQpwcmUtY29uZmlnOgpENFBfRU5WPQlQS0dOQU1FPSIke1BLR05BTUV9IiBcCgkJ UE9SVF9PUFRJT05TPSIke1BPUlRfT1BUSU9OU30iIFwKCQlBTExfT1BUSU9OUz0iJHtBTExfT1BU SU9OU30iIFwKCQlPUFRJT05TX01VTFRJPSIke09QVElPTlNfTVVMVEl9IiBcCgkJT1BUSU9OU19T SU5HTEU9IiR7T1BUSU9OU19TSU5HTEV9IiBcCgkJT1BUSU9OU19SQURJTz0iJHtPUFRJT05TX1JB RElPfSIgXAoJCU9QVElPTlNfR1JPVVA9IiR7T1BUSU9OU19HUk9VUH0iIFwKCQlORVdfT1BUSU9O Uz0iJHtORVdfT1BUSU9OU30iIFwKCQlESUFMT0c0UE9SVFM9IiR7RElBTE9HNFBPUlRTfSIgXAoJ CVBSRUZJWD0iJHtQUkVGSVh9IiBcCgkJTE9DQUxCQVNFPSIke0xPQ0FMQkFTRX0iIFwKCQlQT1JU U0RJUj0iJHtQT1JUU0RJUn0iIFwKCQlNQUtFPSIke01BS0V9IiBcCgkJRDRQSEVJR0hUPSIke0Q0 UEhFSUdIVH0iIFwKCQlENFBXSURUSD0iJHtENFBXSURUSH0iIFwKCQlENFBGVUxMU0NSRUVOPSIk e0Q0UEZVTExTQ1JFRU59IgouaWYgZXhpc3RzKCR7UEtHSEVMUH0pCkQ0UF9FTlYrPQlQS0dIRUxQ PSIke1BLR0hFTFB9IgouZW5kaWYKLmZvciBvcHQgaW4gJHtBTExfT1BUSU9OU30KRDRQX0VOVis9 CSAke29wdH1fREVTQz0iIiR7JHtvcHR9X0RFU0M6UX0iIgouZW5kZm9yCi5mb3Igb3R5cGUgaW4g TVVMVEkgR1JPVVAgU0lOR0xFIFJBRElPCi4gIGZvciBtIGluICR7T1BUSU9OU18ke290eXBlfX0K RDRQX0VOVis9CU9QVElPTlNfJHtvdHlwZX1fJHttfT0iJHtPUFRJT05TXyR7b3R5cGV9XyR7bX19 IiBcCgkJJHttfV9ERVNDPSIiJHske219X0RFU0M6UX0iIgouICAgIGZvciBvcHQgaW4gJHtPUFRJ T05TXyR7b3R5cGV9XyR7bX19CkQ0UF9FTlYrPQkgJHtvcHR9X0RFU0M9IiIkeyR7b3B0fV9ERVND OlF9IiIKLiAgICBlbmRmb3IKLiAgZW5kZm9yCi5lbmRmb3IKLnVuZGVmIG0KLnVuZGVmIG90eXBl Ci51bmRlZiBvcHQKLmVuZGlmICMgcHJlLWNvbmZpZwoKLmlmICF0YXJnZXQoZG8tY29uZmlnKQpk by1jb25maWc6Ci5pZiBlbXB0eShBTExfT1BUSU9OUykgJiYgZW1wdHkoT1BUSU9OU19TSU5HTEUp ICYmIGVtcHR5KE9QVElPTlNfTVVMVEkpICYmIGVtcHR5KE9QVElPTlNfUkFESU8pICYmIGVtcHR5 KE9QVElPTlNfR1JPVVApCglAJHtFQ0hPX01TR30gIj09PT4gTm8gb3B0aW9ucyB0byBjb25maWd1 cmUiCi5lbHNlCglAb3B0aW9uc2Rpcj0ke09QVElPTlNfRklMRTpIfTsgXAoJb2xkb3B0aW9uc2Rp cj0ke09QVElPTlNGSUxFOkh9OyBcCglpZiBbICR7VUlEfSAhPSAwIC1hIC16ICIke0lOU1RBTExf QVNfVVNFUn0iIC1hICEgLXcgIiR7UE9SVF9EQkRJUn0iIF0gOyB0aGVuIFwKCQkke0VDSE9fTVNH fSAiPT09PiAgU3dpdGNoaW5nIHRvIHJvb3QgY3JlZGVudGlhbHMgdG8gY3JlYXRlICQke29wdGlv bnNkaXJ9IjsgXAoJCSgke1NVX0NNRH0gIiR7U0h9IC1jIFwiaWYgWyAtZCAkJHtvbGRvcHRpb25z ZGlyfSAtYSAhIC1kICQke29wdGlvbnNkaXJ9IF07IHRoZW4gJHtNVn0gJCR7b2xkb3B0aW9uc2Rp cn0gJCR7b3B0aW9uc2Rpcn07IGVsaWYgWyAtZCAkJHtvbGRvcHRpb25zZGlyfSAtYSAtZCAkJHtv cHRpb25zZGlyfSBdOyB0aGVuICR7Uk19IC1yZiAkJHtvbGRvcHRpb25zZGlyfSA7IGZpIDsgJHtN S0RJUn0gJCR7b3B0aW9uc2Rpcn0gMj4gL2Rldi9udWxsXCIiKSB8fCBcCgkJCSgke0VDSE9fTVNH fSAiPT09PiBDYW5ub3QgY3JlYXRlICQke29wdGlvbnNkaXJ9LCBjaGVjayBwZXJtaXNzaW9ucyI7 IGV4aXQgMSk7IFwKCQkke0VDSE9fTVNHfSAiPT09PiAgUmV0dXJuaW5nIHRvIHVzZXIgY3JlZGVu dGlhbHMiIDsgXAoJZWxzZSBcCglpZiBbIC1kICQke29sZG9wdGlvbnNkaXJ9IC1hICEgLWQgJCR7 b3B0aW9uc2Rpcn0gXTsgdGhlbiBcCgkJJHtNVn0gJCR7b2xkb3B0aW9uc2Rpcn0gJCR7b3B0aW9u c2Rpcn07IFwKCWVsaWYgWyAtZCAkJHtvbGRvcHRpb25zZGlyfSAtYSAtZCAkJHtvcHRpb25zZGly fSBdOyB0aGVuIFwKCQkke1JNfSAtcmYgJCR7b2xkb3B0aW9uc2Rpcn0gOyBcCglmaSA7IFwKCSR7 TUtESVJ9ICQke29wdGlvbnNkaXJ9IDI+IC9kZXYvbnVsbCB8fCBcCgkoJHtFQ0hPX01TR30gIj09 PT4gQ2Fubm90IGNyZWF0ZSAkJHtvcHRpb25zZGlyfSwgY2hlY2sgcGVybWlzc2lvbnMiOyBleGl0 IDEpIDsgXAoJZmkKCUBUTVBPUFRJT05TRklMRT0kJChta3RlbXAgLXQgcG9ydG9wdGlvbnMpOyBc Cgl0cmFwICIke1JNfSAtZiAkJHtUTVBPUFRJT05TRklMRX07IGV4aXQgMSIgMSAyIDMgNSAxMCAx MyAxNTsgXAoJJHtTRVRFTlZ9ICR7RDRQX0VOVn0gJHtTSH0gJHtTQ1JJUFRTRElSfS9kaWFsb2c0 cG9ydHMuc2ggJCR7VE1QT1BUSU9OU0ZJTEV9IHx8IHsgXAoJCSR7Uk19IC1mICQke1RNUE9QVElP TlNGSUxFfTsgXAoJCSR7RUNIT19NU0d9ICI9PT0+IE9wdGlvbnMgdW5jaGFuZ2VkIjsgXAoJCWV4 aXQgMDsgXAoJfTsgXAoJJHtFQ0hPX0NNRH07IFwKCWlmIFsgISAtZSAkJHtUTVBPUFRJT05TRklM RX0gXTsgdGhlbiBcCgkJJHtFQ0hPX01TR30gIj09PT4gTm8gdXNlci1zcGVjaWZpZWQgb3B0aW9u cyB0byBzYXZlIGZvciAke1BLR05BTUV9IjsgXAoJCWV4aXQgMDsgXAoJZmk7IFwKCVNFTE9QVElP TlM9JCQoJHtDQVR9ICQke1RNUE9QVElPTlNGSUxFfSk7IFwKCSR7Uk19IC1mICQke1RNUE9QVElP TlNGSUxFfTsgXAoJVE1QT1BUSU9OU0ZJTEU9JCQobWt0ZW1wIC10IHBvcnRvcHRpb25zKTsgXAoJ dHJhcCAiJHtSTX0gLWYgJCR7VE1QT1BUSU9OU0ZJTEV9OyBleGl0IDEiIDEgMiAzIDUgMTAgMTMg MTU7IFwKCSR7RUNIT19DTUR9ICIjIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCBieSAnbWFr ZSBjb25maWcnLiIgPiAkJHtUTVBPUFRJT05TRklMRX07IFwKCSR7RUNIT19DTUR9ICIjIE9wdGlv bnMgZm9yICR7UEtHTkFNRX0iID4+ICQke1RNUE9QVElPTlNGSUxFfTsgXAoJJHtFQ0hPX0NNRH0g Il9PUFRJT05TX1JFQUQ9JHtQS0dOQU1FfSIgPj4gJCR7VE1QT1BUSU9OU0ZJTEV9OyBcCgkke0VD SE9fQ01EfSAiX0ZJTEVfQ09NUExFVEVfT1BUSU9OU19MSVNUPSR7Q09NUExFVEVfT1BUSU9OU19M SVNUfSIgPj4gJCR7VE1QT1BUSU9OU0ZJTEV9OyBcCglmb3IgaSBpbiAke0NPTVBMRVRFX09QVElP TlNfTElTVH07IGRvIFwKCQlpZiAke0VDSE9fQ01EfSAkJHtTRUxPUFRJT05TfSB8ICR7R1JFUH0g LXF3ICQke2l9OyB0aGVuIFwKCQkJJHtFQ0hPX0NNRH0gIk9QVElPTlNfRklMRV9TRVQrPSQke2l9 IiA+PiAkJHtUTVBPUFRJT05TRklMRX07IFwKCQllbHNlIFwKCQkJJHtFQ0hPX0NNRH0gIk9QVElP TlNfRklMRV9VTlNFVCs9JCR7aX0iID4+ICQke1RNUE9QVElPTlNGSUxFfTsgXAoJCWZpOyBcCglk b25lOyBcCglpZiBbICR7VUlEfSAhPSAwIC1hIC16ICIke0lOU1RBTExfQVNfVVNFUn0iIC1hICEg LXcgIiR7T1BUSU9OU19GSUxFOkh9IiBdOyB0aGVuIFwKCQkke0VDSE9fTVNHfSAiPT09PiAgU3dp dGNoaW5nIHRvIHJvb3QgY3JlZGVudGlhbHMgdG8gd3JpdGUgJHtPUFRJT05TX0ZJTEV9IjsgXAoJ CSR7U1VfQ01EfSAiJHtDQVR9ICQke1RNUE9QVElPTlNGSUxFfSA+ICR7T1BUSU9OU19GSUxFfSI7 IFwKCQkke0VDSE9fTVNHfSAiPT09PiAgUmV0dXJuaW5nIHRvIHVzZXIgY3JlZGVudGlhbHMiOyBc CgllbHNlIFwKCQkke0NBVH0gJCR7VE1QT1BUSU9OU0ZJTEV9ID4gJHtPUFRJT05TX0ZJTEV9OyBc CglmaTsgXAoJJHtSTX0gLWYgJCR7VE1QT1BUSU9OU0ZJTEV9CglAY2QgJHsuQ1VSRElSfSAmJiAk e01BS0V9IHNhbml0eS1jb25maWcKLmVuZGlmCi5lbmRpZiAjIGRvLWNvbmZpZwoKLmlmICF0YXJn ZXQoY29uZmlnKQouaWYgIWRlZmluZWQoTk9fRElBTE9HKQpjb25maWc6IHByZS1jb25maWcgZG8t Y29uZmlnCi5lbHNlCmNvbmZpZzoKCUAke0VDSE9fTVNHfSAiPT09PiBTa2lwcGluZyAnY29uZmln JyBhcyBOT19ESUFMT0cgaXMgZGVmaW5lZCIKLmVuZGlmCi5lbmRpZiAjIGNvbmZpZwoKLmlmICF0 YXJnZXQoY29uZmlnLXJlY3Vyc2l2ZSkKY29uZmlnLXJlY3Vyc2l2ZToKCUAke0VDSE9fTVNHfSAi PT09PiBTZXR0aW5nIHVzZXItc3BlY2lmaWVkIG9wdGlvbnMgZm9yICR7UEtHTkFNRX0gYW5kIGRl cGVuZGVuY2llcyI7CglAZm9yIGRpciBpbiAkey5DVVJESVJ9ICQkKCR7QUxMLURFUEVORFMtTElT VH0pOyBkbyBcCgkJKGNkICQkZGlyOyAke01BS0V9IGNvbmZpZy1jb25kaXRpb25hbCk7IFwKCWRv bmUKLmVuZGlmICMgY29uZmlnLXJlY3Vyc2l2ZQoKLmlmICF0YXJnZXQoY29uZmlnLWNvbmRpdGlv bmFsKQpjb25maWctY29uZGl0aW9uYWw6Ci5pZiAhZW1wdHkoTkVXX09QVElPTlMpCglAY2QgJHsu Q1VSRElSfSAmJiAke01BS0V9IGNvbmZpZzsKLmVuZGlmCi5lbmRpZiAjIGNvbmZpZy1jb25kaXRp b25hbAoKLmlmICF0YXJnZXQoc2hvd2NvbmZpZykKLmluY2x1ZGUgIiR7UE9SVFNESVJ9L01rL2Jz ZC5vcHRpb25zLmRlc2MubWsiCk1VTFRJX0VPTD0JOiB5b3UgaGF2ZSB0byBjaG9vc2UgYXQgbGVh c3Qgb25lIG9mIHRoZW0KU0lOR0xFX0VPTD0JOiB5b3UgaGF2ZSB0byBzZWxlY3QgZXhhY3RseSBv bmUgb2YgdGhlbQpSQURJT19FT0w9CTogeW91IGNhbiBvbmx5IHNlbGVjdCBub25lIG9yIG9uZSBv ZiB0aGVtCnNob3djb25maWc6IGNoZWNrLWNvbmZpZwouaWYgIWVtcHR5KENPTVBMRVRFX09QVElP TlNfTElTVCkKCUAke0VDSE9fTVNHfSAiPT09PiBUaGUgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb24g b3B0aW9ucyBhcmUgYXZhaWxhYmxlIGZvciAke1BLR05BTUV9IjoKLmZvciBvcHQgaW4gJHtBTExf T1BUSU9OU30KCUBbIC16ICIke1BPUlRfT1BUSU9OUzpNJHtvcHR9fSIgXSB8fCBtYXRjaD0ib24i IDsgJHtFQ0hPX01TR30gLW4gIiAgICAgJHtvcHR9PSQke21hdGNoOi1vZmZ9IgouICBpZiAhZW1w dHkoJHtvcHR9X0RFU0MpCglAJHtFQ0hPX01TR30gLW4gIjogIiR7JHtvcHR9X0RFU0M6UX0KLiAg ZW5kaWYKCUAke0VDSE9fTVNHfSAiIgouZW5kZm9yCgojbXVsdGkgYW5kIGNvbmRpdGlvbmFsIG11 bHRpcwouZm9yIG90eXBlIGluIE1VTFRJIEdST1VQIFNJTkdMRSBSQURJTwouICBmb3IgbSBpbiAk e09QVElPTlNfJHtvdHlwZX19Ci4gICAgaWYgZW1wdHkoJHttfV9ERVNDKQoJCUAke0VDSE9fTVNH fSAiPT09PT4gT3B0aW9ucyBhdmFpbGFibGUgZm9yIHRoZSAke290eXBlOnRsfSAke219JHske290 eXBlfV9FT0x9IgouICAgIGVsc2UKCQlAJHtFQ0hPX01TR30gIj09PT0+ICR7JHttfV9ERVNDfSR7 JHtvdHlwZX1fRU9MfSIKLiAgICBlbmRpZgouICAgIGZvciBvcHQgaW4gJHtPUFRJT05TXyR7b3R5 cGV9XyR7bX19CglAWyAteiAiJHtQT1JUX09QVElPTlM6TSR7b3B0fX0iIF0gfHwgbWF0Y2g9Im9u IiA7ICR7RUNIT19NU0d9IC1uICIgICAgICR7b3B0fT0kJHttYXRjaDotb2ZmfSIKLiAgICAgIGlm ICFlbXB0eSgke29wdH1fREVTQykKCUAke0VDSE9fTVNHfSAtbiAiOiAiJHske29wdH1fREVTQzpR fQouICAgICAgZW5kaWYKCUAke0VDSE9fTVNHfSAiIgouICAgIGVuZGZvcgouICBlbmRmb3IKLmVu ZGZvcgoKLnVuZGVmIG90eXBlCi51bmRlZiBtCi51bmRlZiBvcHQKCUAke0VDSE9fTVNHfSAiPT09 PiBVc2UgJ21ha2UgY29uZmlnJyB0byBtb2RpZnkgdGhlc2Ugc2V0dGluZ3MiCi5lbmRpZgouZW5k aWYgIyBzaG93Y29uZmlnCgouaWYgIXRhcmdldChzaG93Y29uZmlnLXJlY3Vyc2l2ZSkKc2hvd2Nv bmZpZy1yZWN1cnNpdmU6CglAJHtFQ0hPX01TR30gIj09PT4gVGhlIGZvbGxvd2luZyBjb25maWd1 cmF0aW9uIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSBmb3IgJHtQS0dOQU1FfSBhbmQgZGVwZW5kZW5j aWVzIjsKCUBmb3IgZGlyIGluICR7LkNVUkRJUn0gJCQoJHtBTEwtREVQRU5EUy1MSVNUfSk7IGRv IFwKCQkoY2QgJCRkaXI7ICR7TUFLRX0gc2hvd2NvbmZpZyk7IFwKCWRvbmUKLmVuZGlmICMgc2hv d2NvbmZpZy1yZWN1cnNpdmUKCi5pZiAhdGFyZ2V0KHJtY29uZmlnKQpybWNvbmZpZzoKLmlmIGV4 aXN0cygke09QVElPTlNGSUxFfSkKCS1AJHtFQ0hPX01TR30gIj09PT4gUmVtb3ZpbmcgdXNlci1j b25maWd1cmVkIG9wdGlvbnMgZm9yICR7UEtHTkFNRX0iOyBcCglvcHRpb25zZGlyPSR7T1BUSU9O U0ZJTEU6SH07IFwKCWlmIFsgJHtVSUR9ICE9IDAgLWEgIngke0lOU1RBTExfQVNfVVNFUn0iID0g IngiIC1hICEgLXcgIiR7T1BUSU9OU0ZJTEV9IiBdOyB0aGVuIFwKCQkke0VDSE9fTVNHfSAiPT09 PiBTd2l0Y2hpbmcgdG8gcm9vdCBjcmVkZW50aWFscyB0byByZW1vdmUgJHtPUFRJT05TRklMRX0g YW5kICQke29wdGlvbnNkaXJ9IjsgXAoJCSR7U1VfQ01EfSAiJHtSTX0gLWYgJHtPUFRJT05TRklM RX0gOyBcCgkJCSR7Uk1ESVJ9ICQke29wdGlvbnNkaXJ9IjsgXAoJCSR7RUNIT19NU0d9ICI9PT0+ IFJldHVybmluZyB0byB1c2VyIGNyZWRlbnRpYWxzIjsgXAoJZWxzZSBcCgkJJHtSTX0gLWYgJHtP UFRJT05TRklMRX07IFwKCQkke1JNRElSfSAkJHtvcHRpb25zZGlyfSAyPi9kZXYvbnVsbCB8fCBy ZXR1cm4gMDsgXAoJZmkKLmVuZGlmCi5pZiBleGlzdHMoJHtPUFRJT05TX0ZJTEV9KQoJLUAke0VD SE9fTVNHfSAiPT09PiBSZW1vdmluZyB1c2VyLWNvbmZpZ3VyZWQgb3B0aW9ucyBmb3IgJHtQS0dO QU1FfSI7IFwKCW9wdGlvbnNkaXI9JHtPUFRJT05TX0ZJTEU6SH07IFwKCWlmIFsgJHtVSUR9ICE9 IDAgLWEgIngke0lOU1RBTExfQVNfVVNFUn0iID0gIngiIC1hICEgLXcgIiR7T1BUSU9OU19GSUxF fSIgXTsgdGhlbiBcCgkJJHtFQ0hPX01TR30gIj09PT4gU3dpdGNoaW5nIHRvIHJvb3QgY3JlZGVu dGlhbHMgdG8gcmVtb3ZlICR7T1BUSU9OU19GSUxFfSBhbmQgJCR7b3B0aW9uc2Rpcn0iOyBcCgkJ JHtTVV9DTUR9ICIke1JNfSAtZiAke09QVElPTlNfRklMRX0gOyBcCgkJCSR7Uk1ESVJ9ICQke29w dGlvbnNkaXJ9IjsgXAoJCSR7RUNIT19NU0d9ICI9PT0+IFJldHVybmluZyB0byB1c2VyIGNyZWRl bnRpYWxzIjsgXAoJZWxzZSBcCgkJJHtSTX0gLWYgJHtPUFRJT05TX0ZJTEV9OyBcCgkJJHtSTURJ Un0gJCR7b3B0aW9uc2Rpcn0gMj4vZGV2L251bGwgfHwgcmV0dXJuIDA7IFwKCWZpCi5lbHNlCglA JHtFQ0hPX01TR30gIj09PT4gTm8gdXNlci1zcGVjaWZpZWQgb3B0aW9ucyBjb25maWd1cmVkIGZv ciAke1BLR05BTUV9IgouZW5kaWYKLmVuZGlmICMgcm1jb25maWcKCi5pZiAhdGFyZ2V0KHJtY29u ZmlnLXJlY3Vyc2l2ZSkKcm1jb25maWctcmVjdXJzaXZlOgoJQCR7RUNIT19NU0d9ICI9PT0+IFJl bW92aW5nIHVzZXItc3BlY2lmaWVkIG9wdGlvbnMgZm9yICR7UEtHTkFNRX0gYW5kIGRlcGVuZGVu Y2llcyI7CglAZm9yIGRpciBpbiAkey5DVVJESVJ9ICQkKCR7QUxMLURFUEVORFMtTElTVH0pOyBk byBcCgkJKGNkICQkZGlyOyAke01BS0V9IHJtY29uZmlnKTsgXAoJZG9uZQouZW5kaWYgIyBybWNv bmZpZy1yZWN1cnNpdmUKCi5pZiAhdGFyZ2V0KHByZXR0eS1wcmludC1jb25maWcpCk1VTFRJX1NU QVJUPQlbCk1VTFRJX0VORD0JXQpHUk9VUF9TVEFSVD0JWwpHUk9VUF9FTkQ9CV0KU0lOR0xFX1NU QVJUPQkoClNJTkdMRV9FTkQ9CSkKUkFESU9fU1RBUlQ9CSgKUkFESU9fRU5EPQkpCnByZXR0eS1w cmludC1jb25maWc6Ci5mb3Igb3B0IGluICR7QUxMX09QVElPTlN9CglAWyAteiAiJHtQT1JUX09Q VElPTlM6TSR7b3B0fX0iIF0gfHwgbWF0Y2g9IisiIDsgJHtFQ0hPX01TR30gLW4gIiQke21hdGNo Oi0tfSR7b3B0fSAiCi5lbmRmb3IKLmZvciBvdHlwZSBpbiBNVUxUSSBHUk9VUCBTSU5HTEUgUkFE SU8KLiAgZm9yIG0gaW4gJHtPUFRJT05TXyR7b3R5cGV9fQoJQCR7RUNIT19NU0d9IC1uICIke219 JHske290eXBlfV9TVEFSVH0gIgouICAgIGZvciBvcHQgaW4gJHtPUFRJT05TXyR7b3R5cGV9XyR7 bX19CgkJQFsgLXogIiR7UE9SVF9PUFRJT05TOk0ke29wdH19IiBdIHx8IG1hdGNoPSIrIiA7ICR7 RUNIT19NU0d9IC1uICIkJHttYXRjaDotLX0ke29wdH0gIgouICAgIGVuZGZvcgoJQCR7RUNIT19N U0d9IC1uICIkeyR7b3R5cGV9X0VORH0gIgouICBlbmRmb3IKLmVuZGZvcgoudW5kZWYgb3R5cGUK LnVuZGVmIG0KLnVuZGVmIG9wdAoJQCR7RUNIT19NU0d9ICIiCi5lbmRpZiAjIHByZXR0eS1wcmlu dC1jb25maWcKCmRlc2t0b3AtY2F0ZWdvcmllczoKCUBjYXRlZ29yaWVzPSIiOyBcCglmb3IgbmF0 aXZlX2NhdGVnb3J5IGluICR7Q0FURUdPUklFU307IGRvIFwKCQljPSIiOyBcCgkJY2FzZSAkJG5h dGl2ZV9jYXRlZ29yeSBpbiBcCgkJCWFjY2Vzc2liaWxpdHkpCWM9IlV0aWxpdHkgQWNjZXNzaWJp bGl0eSIJCTs7IFwKCQkJYXJjaGl2ZXJzKQkJYz0iVXRpbGl0eSBBcmNoaXZpbmciCQkJOzsgXAoJ CQlhc3RybykJCQljPSJFZHVjYXRpb24gU2NpZW5jZSBBc3Ryb25vbXkiCTs7IFwKCQkJYXVkaW8p CQkJYz0iQXVkaW9WaWRlbyBBdWRpbyIJCQk7OyBcCgkJCWJlbmNobWFya3MpCQljPSJTeXN0ZW0i CQkJCQkJOzsgXAoJCQliaW9sb2d5KQkJYz0iRWR1Y2F0aW9uIFNjaWVuY2UgQmlvbG9neSIJOzsg XAoJCQljYWQpCQkJYz0iR3JhcGhpY3MgRW5naW5lZXJpbmciCQk7OyBcCgkJCWNvbW1zKQkJCWM9 IlV0aWxpdHkiCQkJCQkJOzsgXAoJCQljb252ZXJ0ZXJzKQkJYz0iVXRpbGl0eSIJCQkJCQk7OyBc CgkJCWRhdGFiYXNlcykJCWM9Ik9mZmljZSBEYXRhYmFzZSIJCQkJOzsgXAoJCQlkZXNrdXRpbHMp CQljPSJVdGlsaXR5IgkJCQkJCTs7IFwKCQkJZGV2ZWwpCQkJYz0iRGV2ZWxvcG1lbnQiCQkJCQk7 OyBcCgkJCWRucykJCQljPSJOZXR3b3JrIgkJCQkJCTs7IFwKCQkJZWxpc3ApCQkJYz0iRGV2ZWxv cG1lbnQiCQkJCQk7OyBcCgkJCWVkaXRvcnMpCQljPSJVdGlsaXR5IgkJCQkJCTs7IFwKCQkJZW11 bGF0b3JzKQkJYz0iU3lzdGVtIEVtdWxhdG9yIgkJCQk7OyBcCgkJCWZpbmFuY2UpCQljPSJPZmZp Y2UgRmluYW5jZSIJCQkJOzsgXAoJCQlmdHApCQkJYz0iTmV0d29yayBGaWxlVHJhbnNmZXIiCQk7 OyBcCgkJCWdhbWVzKQkJCWM9IkdhbWUiCQkJCQkJOzsgXAoJCQlnZW9ncmFwaHkpCQljPSJFZHVj YXRpb24gU2NpZW5jZSBHZW9ncmFwaHkiCTs7IFwKCQkJZ25vbWUpCQkJYz0iR05PTUUgR1RLIgkJ CQkJOzsgXAoJCQlncmFwaGljcykJCWM9IkdyYXBoaWNzIgkJCQkJOzsgXAoJCQloYW1yYWRpbykJ CWM9IkhhbVJhZGlvIgkJCQkJOzsgXAoJCQloYXNrZWxsKQkJYz0iRGV2ZWxvcG1lbnQiCQkJCQk7 OyBcCgkJCWlyYykJCQljPSJOZXR3b3JrIElSQ0NsaWVudCIJCQk7OyBcCgkJCWphdmEpCQkJYz0i RGV2ZWxvcG1lbnQgSmF2YSIJCQk7OyBcCgkJCWtkZSkJCQljPSJLREUgUXQiCQkJCQkJOzsgXAoJ CQlsYW5nKQkJCWM9IkRldmVsb3BtZW50IgkJCQkJOzsgXAoJCQlsaXNwKQkJCWM9IkRldmVsb3Bt ZW50IgkJCQkJOzsgXAoJCQltYWlsKQkJCWM9Ik9mZmljZSBFbWFpbCIJCQkJOzsgXAoJCQltYXRl KQkJCWM9Ik1BVEUgR1RLIgkJOzsgXAoJCQltYXRoKQkJCWM9IkVkdWNhdGlvbiBTY2llbmNlIE1h dGgiCQk7OyBcCgkJCW1ib25lKQkJCWM9Ik5ldHdvcmsgQXVkaW9WaWRlbyIJCQk7OyBcCgkJCW11 bHRpbWVkaWEpCQljPSJBdWRpb1ZpZGVvIgkJCQkJOzsgXAoJCQluZXQpCQkJYz0iTmV0d29yayIJ CQkJCQk7OyBcCgkJCW5ldC1pbSkJCQljPSJOZXR3b3JrIEluc3RhbnRNZXNzYWdpbmciCTs7IFwK CQkJbmV0LW1nbXQpCQljPSJOZXR3b3JrIgkJCQkJCTs7IFwKCQkJbmV0LXAycCkJCWM9Ik5ldHdv cmsgUDJQIgkJCQkJOzsgXAoJCQluZXdzKQkJCWM9Ik5ldHdvcmsgTmV3cyIJCQkJOzsgXAoJCQlw YWxtKQkJCWM9Ik9mZmljZSBQREEiCQkJCQk7OyBcCgkJCXBhcmFsbGVsKQkJYz0iUGFyYWxsZWxD b21wdXRpbmciCQkJOzsgXAoJCQlwZWFyKQkJCWM9IkRldmVsb3BtZW50IFdlYkRldmVsb3BtZW50 Igk7OyBcCgkJCXBlcmw1KQkJCWM9IkRldmVsb3BtZW50IgkJCQkJOzsgXAoJCQlweXRob24pCQkJ Yz0iRGV2ZWxvcG1lbnQiCQkJCQk7OyBcCgkJCXJ1YnkpCQkJYz0iRGV2ZWxvcG1lbnQiCQkJCQk7 OyBcCgkJCXJ1YnlnZW1zKQkJYz0iRGV2ZWxvcG1lbnQiCQkJCQk7OyBcCgkJCXNjaGVtZSkJCQlj PSJEZXZlbG9wbWVudCIJCQkJCTs7IFwKCQkJc2NpZW5jZSkJCWM9IlNjaWVuY2UgRWR1Y2F0aW9u IgkJCTs7IFwKCQkJc2VjdXJpdHkpCQljPSJTeXN0ZW0gU2VjdXJpdHkiCQkJCTs7IFwKCQkJc2hl bGxzKQkJCWM9IlN5c3RlbSBTaGVsbCIJCQkJOzsgXAoJCQlzeXN1dGlscykJCWM9IlN5c3RlbSIJ CQkJCQk7OyBcCgkJCXRjbCp8dGsqKQkJYz0iRGV2ZWxvcG1lbnQiCQkJCQk7OyBcCgkJCXRleHRw cm9jKQkJYz0iVXRpbGl0eSBUZXh0VG9vbHMiCQkJOzsgXAoJCQl3d3cpCQkJYz0iTmV0d29yayIJ CQkJCQk7OyBcCgkJCXgxMS1jbG9ja3MpCQljPSJVdGlsaXR5IENsb2NrIgkJCQk7OyBcCgkJCXgx MS1mbSkJCQljPSJTeXN0ZW0gRmlsZU1hbmFnZXIiCQkJOzsgXAoJCQl4ZmNlKQkJCWM9IkdUSyBY RkNFIgkJCQkJOzsgXAoJCQl6b3BlKQkJCWM9IkRldmVsb3BtZW50IFdlYkRldmVsb3BtZW50Igk7 OyBcCgkJZXNhYzsgXAoJCWlmIFsgLW4gIiQkYyIgXTsgdGhlbiBcCgkJCWNhdGVnb3JpZXM9IiQk Y2F0ZWdvcmllcyAkJGMiOyBcCgkJZmk7IFwKCWRvbmU7IFwKCWlmIFsgLW4gIiQkY2F0ZWdvcmll cyIgXTsgdGhlbiBcCgkJZm9yIGMgaW4gJCRjYXRlZ29yaWVzOyBkbyAke0VDSE9fTVNHfSAiJCRj IjsgZG9uZSBcCgkJCXwgJHtTT1JUfSAtdSB8ICR7VFJ9ICdcbicgJzsnOyBcCgkJJHtFQ0hPX01T R307IFwKCWZpCgojIGh0dHA6Ly9zdGFuZGFyZHMuZnJlZWRlc2t0b3Aub3JnL21lbnUtc3BlYy9t ZW51LXNwZWMtbGF0ZXN0Lmh0bWwKREVTS1RPUF9DQVRFR09SSUVTX01BSU49CUF1ZGlvVmlkZW8g QXVkaW8gVmlkZW8gRGV2ZWxvcG1lbnQgRWR1Y2F0aW9uIFwKCUdhbWUgR3JhcGhpY3MgTmV0d29y ayBPZmZpY2UgU2NpZW5jZSBTZXR0aW5ncyBTeXN0ZW0gVXRpbGl0eQpERVNLVE9QX0NBVEVHT1JJ RVNfQURESVRJT05BTD0JQnVpbGRpbmcgRGVidWdnZXIgSURFIEdVSURlc2lnbmVyIFByb2ZpbGlu ZyBcCglSZXZpc2lvbkNvbnRyb2wgVHJhbnNsYXRpb24gQ2FsZW5kYXIgQ29udGFjdE1hbmFnZW1l bnQgRGF0YWJhc2UgXAoJRGljdGlvbmFyeSBDaGFydCBFbWFpbCBGaW5hbmNlIEZsb3dDaGFydCBQ REEgUHJvamVjdE1hbmFnZW1lbnQgXAoJUHJlc2VudGF0aW9uIFNwcmVhZHNoZWV0IFdvcmRQcm9j ZXNzb3IgMkRHcmFwaGljcyBWZWN0b3JHcmFwaGljcyBcCglSYXN0ZXJHcmFwaGljcyAzREdyYXBo aWNzIFNjYW5uaW5nIE9DUiBQaG90b2dyYXBoeSBQdWJsaXNoaW5nIFZpZXdlciBcCglUZXh0VG9v bHMgRGVza3RvcFNldHRpbmdzIEhhcmR3YXJlU2V0dGluZ3MgUHJpbnRpbmcgUGFja2FnZU1hbmFn ZXIgXAoJRGlhbHVwIEluc3RhbnRNZXNzYWdpbmcgQ2hhdCBJUkNDbGllbnQgRmVlZCBGaWxlVHJh bnNmZXIgSGFtUmFkaW8gTmV3cyBcCglQMlAgUmVtb3RlQWNjZXNzIFRlbGVwaG9ueSBUZWxlcGhv bnlUb29scyBWaWRlb0NvbmZlcmVuY2UgV2ViQnJvd3NlciBcCglXZWJEZXZlbG9wbWVudCBNaWRp IE1peGVyIFNlcXVlbmNlciBUdW5lciBUViBBdWRpb1ZpZGVvRWRpdGluZyBQbGF5ZXIgXAoJUmVj b3JkZXIgRGlzY0J1cm5pbmcgQWN0aW9uR2FtZSBBZHZlbnR1cmVHYW1lIEFyY2FkZUdhbWUgQm9h cmRHYW1lIFwKCUJsb2Nrc0dhbWUgQ2FyZEdhbWUgS2lkc0dhbWUgTG9naWNHYW1lIFJvbGVQbGF5 aW5nIFNob290ZXIgU2ltdWxhdGlvbiBcCglTcG9ydHNHYW1lIFN0cmF0ZWd5R2FtZSBBcnQgQ29u c3RydWN0aW9uIE11c2ljIExhbmd1YWdlcyBcCglBcnRpZmljaWFsSW50ZWxsaWdlbmNlIEFzdHJv bm9teSBCaW9sb2d5IENoZW1pc3RyeSBDb21wdXRlclNjaWVuY2UgXAoJRGF0YVZpc3VhbGl6YXRp b24gRWNvbm9teSBFbGVjdHJpY2l0eSBHZW9ncmFwaHkgR2VvbG9neSBHZW9zY2llbmNlIFwKCUhp c3RvcnkgSHVtYW5pdGllcyBJbWFnZVByb2Nlc3NpbmcgTGl0ZXJhdHVyZSBNYXBzIE1hdGggXAoJ TnVtZXJpY2FsQW5hbHlzaXMgTWVkaWNhbFNvZnR3YXJlIFBoeXNpY3MgUm9ib3RpY3MgU3Bpcml0 dWFsaXR5IFNwb3J0cyBcCglQYXJhbGxlbENvbXB1dGluZyBBbXVzZW1lbnQgQXJjaGl2aW5nIENv bXByZXNzaW9uIEVsZWN0cm9uaWNzIEVtdWxhdG9yIFwKCUVuZ2luZWVyaW5nIEZpbGVUb29scyBG aWxlTWFuYWdlciBUZXJtaW5hbEVtdWxhdG9yIEZpbGVzeXN0ZW0gTW9uaXRvciBcCglTZWN1cml0 eSBBY2Nlc3NpYmlsaXR5IENhbGN1bGF0b3IgQ2xvY2sgVGV4dEVkaXRvciBEb2N1bWVudGF0aW9u IEFkdWx0IFwKCUNvcmUgS0RFIEdOT01FIE1BVEUgWEZDRSBHVEsgUXQgTW90aWYgSmF2YSBDb25z b2xlT25seQpERVNLVE9QX0NBVEVHT1JJRVNfUkVTRVJWRUQ9CVNjcmVlbnNhdmVyIFRyYXlJY29u IEFwcGxldCBTaGVsbAoKVkFMSURfREVTS1RPUF9DQVRFR09SSUVTKz0JJHtERVNLVE9QX0NBVEVH T1JJRVNfTUFJTn0gXAoJJHtERVNLVE9QX0NBVEVHT1JJRVNfQURESVRJT05BTH0gXAoJJHtERVNL VE9QX0NBVEVHT1JJRVNfUkVTRVJWRUR9CgouaWYgZGVmaW5lZChERVNLVE9QX0VOVFJJRVMpCmNo ZWNrLWRlc2t0b3AtZW50cmllczoKCUBzZXQgLS0gJHtERVNLVE9QX0VOVFJJRVN9IFhYWDsgXAoJ aWYgWyBgJHtFWFBSfSBcKCAkJCMgLSAxIFwpICUgNmAgLW5lIDAgXTsgdGhlbiBcCgkJJHtFQ0hP X01TR30gIiR7UEtHTkFNRX06IE1ha2VmaWxlIGVycm9yOiB0aGUgREVTS1RPUF9FTlRSSUVTIGxp c3QgbXVzdCBjb250YWluIG9uZSBvciBtb3JlIGdyb3VwcyBvZiA2IGVsZW1lbnRzIjsgXAoJCWV4 aXQgMTsgXAoJZmk7IFwKCW51bT0xOyBcCgl3aGlsZSBbICQkIyAtZ3QgNiBdOyBkbyBcCgkJZW50 cnk9IiMkJG51bSI7IFwKCQlpZiBbIC1uICIkJDQiIF07IHRoZW4gXAoJCQllbnRyeT0iJCRlbnRy eSAoJCQ0KSI7IFwKCQllbGlmIFsgLW4gIiQkMSIgXTsgdGhlbiBcCgkJCWVudHJ5PSIkJGVudHJ5 ICgkJDEpIjsgXAoJCWZpOyBcCgkJaWYgWyAteiAiJCQxIiBdOyB0aGVuIFwKCQkJJHtFQ0hPX01T R30gIiR7UEtHTkFNRX06IE1ha2VmaWxlIGVycm9yOiBpbiBkZXNrdG9wIGVudHJ5ICQkZW50cnk6 IGZpZWxkIDEgKE5hbWUpIGlzIGVtcHR5IjsgXAoJCQlleGl0IDE7IFwKCQlmaTsgXAoJCWlmICR7 RUNIT19DTUR9ICIkJDMiIHwgJHtHUkVQfSAtaXEgJy5cKHBuZ1x8c3ZnXHx4cG1cKSQkJzsgdGhl biBcCgkJCWlmICEgJHtFQ0hPX0NNRH0gIiQkMyIgfCAke0dSRVB9IC1pcSAnXi8nOyB0aGVuIFwK CQkJCSR7RUNIT19NU0d9ICIke1BLR05BTUV9OiBNYWtlZmlsZSB3YXJuaW5nOiBpbiBkZXNrdG9w IGVudHJ5ICQkZW50cnk6IGZpZWxkIDMgKEljb24pIHNob3VsZCBiZSBlaXRoZXIgYWJzb2x1dGUg cGF0aCBvciBpY29uIG5hbWUgd2l0aG91dCBleHRlbnNpb24gaWYgaW5zdGFsbGVkIGljb25zIGZv bGxvdyBJY29uIFRoZW1lIFNwZWNpZmljYXRpb24iOyBcCgkJCWZpOyBcCgkJZmk7IFwKCQlpZiBb IC16ICIkJDQiIF07IHRoZW4gXAoJCQkke0VDSE9fTVNHfSAiJHtQS0dOQU1FfTogTWFrZWZpbGUg ZXJyb3I6IGluIGRlc2t0b3AgZW50cnkgJCRlbnRyeTogZmllbGQgNCAoRXhlYykgaXMgZW1wdHki OyBcCgkJCWV4aXQgMTsgXAoJCWZpOyBcCgkJaWYgWyAtbiAiJCQ1IiBdOyB0aGVuIFwKCQkJZm9y IGMgaW4gYCR7RUNIT19DTUR9ICIkJDUiIHwgJHtUUn0gJzsnICcgJ2A7IGRvIFwKCQkJCWlmICEg JHtFQ0hPX0NNRH0gJHtWQUxJRF9ERVNLVE9QX0NBVEVHT1JJRVN9IHwgJHtHUkVQfSAtd3EgJCRj OyB0aGVuIFwKCQkJCQkke0VDSE9fQ01EfSAiJHtQS0dOQU1FfTogTWFrZWZpbGUgd2FybmluZzog aW4gZGVza3RvcCBlbnRyeSAkJGVudHJ5OiBjYXRlZ29yeSAkJGMgaXMgbm90IGEgdmFsaWQgZGVz a3RvcCBjYXRlZ29yeSI7IFwKCQkJCWZpOyBcCgkJCWRvbmU7IFwKCQkJaWYgISAke0VDSE9fQ01E fSAiJCQ1IiB8ICR7R1JFUH0gLXEgImAke0VDSE9fQ01EfSAke0RFU0tUT1BfQ0FURUdPUklFU19N QUlOfSB8ICR7U0VEfSAtRSAncyxbWzpibGFuazpdXSssXFxcfCxnJ2AiOyB0aGVuIFwKCQkJCSR7 RUNIT19DTUR9ICIke1BLR05BTUV9OiBNYWtlZmlsZSB3YXJuaW5nOiBpbiBkZXNrdG9wIGVudHJ5 ICQkZW50cnk6IGZpZWxkIDUgKENhdGVnb3JpZXMpIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUg bWFpbiBkZXNrdG9wIGNhdGVnb3J5IChtYWtlIC1WREVTS1RPUF9DQVRFR09SSUVTX01BSU4pIjsg XAoJCQlmaTsgXAoJCQlpZiAhICR7RUNIT19DTUR9ICIkJDUiIHwgJHtHUkVQfSAtcSAnOyQkJzsg dGhlbiBcCgkJCQkke0VDSE9fTVNHfSAiJHtQS0dOQU1FfTogTWFrZWZpbGUgZXJyb3I6IGluIGRl c2t0b3AgZW50cnkgJCRlbnRyeTogZmllbGQgNSAoQ2F0ZWdvcmllcykgZG9lcyBub3QgZW5kIHdp dGggYSBzZW1pY29sb24iOyBcCgkJCQlleGl0IDE7IFwKCQkJZmk7IFwKCQllbHNlIFwKCQkJaWYg WyAteiAiYGNkICR7LkNVUkRJUn0gJiYgJHtNQUtFfSBkZXNrdG9wLWNhdGVnb3JpZXNgIiBdOyB0 aGVuIFwKCQkJCSR7RUNIT19NU0d9ICIke1BLR05BTUV9OiBNYWtlZmlsZSBlcnJvcjogaW4gZGVz a3RvcCBlbnRyeSAkJGVudHJ5OiBmaWVsZCA1IChDYXRlZ29yaWVzKSBpcyBlbXB0eSBhbmQgY291 bGQgbm90IGJlIGRlZHVjZWQgZnJvbSB0aGUgQ0FURUdPUklFUyB2YXJpYWJsZSI7IFwKCQkJCWV4 aXQgMTsgXAoJCQlmaTsgXAoJCWZpOyBcCgkJaWYgWyAieCQkNiIgIT0gInh0cnVlIiBdICYmIFsg IngkJDYiICE9ICJ4ZmFsc2UiIF0gJiYgWyAieCQkNiIgIT0gIngiIF07IHRoZW4gXAoJCQkke0VD SE9fTVNHfSAiJHtQS0dOQU1FfTogTWFrZWZpbGUgZXJyb3I6IGluIGRlc2t0b3AgZW50cnkgJCRl bnRyeTogZmllbGQgNiAoU3RhcnR1cE5vdGlmeSkgaXMgbm90IFwidHJ1ZVwiLCBcImZhbHNlXCIg b3IgXCJcIihlbXB0eSkiOyBcCgkJCWV4aXQgMTsgXAoJCWZpOyBcCgkJc2hpZnQgNjsgXAoJCW51 bT1gJHtFWFBSfSAkJG51bSArIDFgOyBcCglkb25lCi5lbmRpZgoKLmlmICF0YXJnZXQoaW5zdGFs bC1kZXNrdG9wLWVudHJpZXMpCi5pZiBkZWZpbmVkKERFU0tUT1BfRU5UUklFUykKaW5zdGFsbC1k ZXNrdG9wLWVudHJpZXM6CglAc2V0IC0tICR7REVTS1RPUF9FTlRSSUVTfSBYWFg7IFwKCXdoaWxl IFsgJCQjIC1ndCA2IF07IGRvIFwKCQlmaWxlbmFtZT0iYCR7RUNIT19DTUR9ICIkJDQiIHwgJHtT RUR9IC1lICdzLF4vLCxnO3MsWy8gXSxfLGc7cyxbXl9bOmFsbnVtOl1dLCxnJ2AuZGVza3RvcCI7 IFwKCQlwYXRobmFtZT0iJHtTVEFHRURJUn0ke0RFU0tUT1BESVJ9LyQkZmlsZW5hbWUiOyBcCgkJ Y2F0ZWdvcmllcz0iJCQ1IjsgXAoJCWlmIFsgLXogIiQkY2F0ZWdvcmllcyIgXTsgdGhlbiBcCgkJ CWNhdGVnb3JpZXM9ImBjZCAkey5DVVJESVJ9ICYmICR7TUFLRX0gZGVza3RvcC1jYXRlZ29yaWVz YCI7IFwKCQlmaTsgXAoJCSR7RUNIT19DTUR9ICIke0RFU0tUT1BESVJ9LyQkZmlsZW5hbWUiID4+ ICR7VE1QUExJU1R9OyBcCgkJJHtFQ0hPX0NNRH0gIltEZXNrdG9wIEVudHJ5XSIgPiAkJHBhdGhu YW1lOyBcCgkJJHtFQ0hPX0NNRH0gIlR5cGU9QXBwbGljYXRpb24iID4+ICQkcGF0aG5hbWU7IFwK CQkke0VDSE9fQ01EfSAiVmVyc2lvbj0xLjAiID4+ICQkcGF0aG5hbWU7IFwKCQkke0VDSE9fQ01E fSAiTmFtZT0kJDEiID4+ICQkcGF0aG5hbWU7IFwKCQljb21tZW50PSIkJDIiOyBcCgkJaWYgWyAt eiAiJCQyIiBdOyB0aGVuIFwKCQkJY29tbWVudD0iYGNkICR7LkNVUkRJUn0gJiYgJHtNQUtFfSAt VkNPTU1FTlRgIjsgXAoJCWZpOyBcCgkJJHtFQ0hPX0NNRH0gIkdlbmVyaWNOYW1lPSQkY29tbWVu dCIgPj4gJCRwYXRobmFtZTsgXAoJCSR7RUNIT19DTUR9ICJDb21tZW50PSQkY29tbWVudCIgPj4g JCRwYXRobmFtZTsgXAoJCWlmIFsgLW4gIiQkMyIgXTsgdGhlbiBcCgkJCSR7RUNIT19DTUR9ICJJ Y29uPSQkMyIgPj4gJCRwYXRobmFtZTsgXAoJCWZpOyBcCgkJJHtFQ0hPX0NNRH0gIkV4ZWM9JCQ0 IiA+PiAkJHBhdGhuYW1lOyBcCgkJJHtFQ0hPX0NNRH0gIkNhdGVnb3JpZXM9JCRjYXRlZ29yaWVz IiA+PiAkJHBhdGhuYW1lOyBcCgkJaWYgWyAtbiAiJCQ2IiBdOyB0aGVuIFwKCQkJJHtFQ0hPX0NN RH0gIlN0YXJ0dXBOb3RpZnk9JCQ2IiA+PiAkJHBhdGhuYW1lOyBcCgkJZmk7IFwKCQlzaGlmdCA2 OyBcCglkb25lCi5lbmRpZgouZW5kaWYKCi5pZiBkZWZpbmVkKFdBUk5JTkcpCldBUk5JTkdfV0FJ VD89CTEwCnNob3ctd2FybmluZ3M6CglAJHtFQ0hPX01TR30gIi8hXFwgV0FSTklORyAvIVxcIgou Zm9yIG0gaW4gJHtXQVJOSU5HfQoJQCR7RUNIT19NU0d9ICIke219IgouZW5kZm9yCglAJHtFQ0hP X01TR30KCUBzbGVlcCAke1dBUk5JTkdfV0FJVH0KLmVuZGlmCgouaWYgZGVmaW5lZChERVZFTE9Q RVIpCi5pZiBkZWZpbmVkKERFVl9XQVJOSU5HKQpERVZfV0FSTklOR19XQUlUPz0JMTAKc2hvdy1k ZXYtd2FybmluZ3M6CglAJHtFQ0hPX01TR30gIi8hXFwgJHtQS0dOQU1FfTogTWFrZWZpbGUgd2Fy bmluZ3MsIHBsZWFzZSBjb25zaWRlciBmaXhpbmcgLyFcXCIKCUAke0VDSE9fTVNHfQouZm9yIG0g aW4gJHtERVZfV0FSTklOR30KCUAke0VDSE9fTVNHfSAiJHttfSIKLmVuZGZvcgoJQCR7RUNIT19N U0d9Ci5pZiBkZWZpbmVkKERFVl9XQVJOSU5HX0ZBVEFMKQoJQCR7RkFMU0V9Ci5lbHNlCglAc2xl ZXAgJHtERVZfV0FSTklOR19XQUlUfQouZW5kaWYKLmVuZGlmCgouaWYgZGVmaW5lZChERVZfRVJS T1IpCnNob3ctZGV2LWVycm9yczoKCUAke0VDSE9fTVNHfSAiLyFcXCAke1BLR05BTUV9OiBNYWtl ZmlsZSBlcnJvcnMgLyFcXCIKCUAke0VDSE9fTVNHfQouZm9yIG0gaW4gJHtERVZfRVJST1J9CglA JHtFQ0hPX01TR30gIiR7bX0iCi5lbmRmb3IKCUAke0VDSE9fTVNHfQoJQCR7RkFMU0V9Ci5lbmRp ZgouZW5kaWYgI0RFVkVMT1BFUgoKIyBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBvcmRlciBvZiB0aGUg Zm9sbG93aW5nIHRhcmdldHMgaXMgaW1wb3J0YW50LCBhbmQKIyBzaG91bGQgbm90IGJlIG1vZGlm aWVkLgoKX1RBUkdFVFNfU1RBR0VTPQlTQU5JVFkgUEtHIEZFVENIIEVYVFJBQ1QgUEFUQ0ggQ09O RklHVVJFIEJVSUxEIElOU1RBTEwgUEFDS0FHRSBTVEFHRQoKIyBEZWZpbmUgdGhlIFNFUSBvZiBh Y3Rpb25zIHRvIHRha2Ugd2hlbiBlYWNoIHRhcmdldCBpcyByYW4sIGFuZCB3aGljaCB0YXJnZXRz CiMgaXQgZGVwZW5kcyBvbiBiZWZvcmUgcnVubmluZyBpdHMgU0VRLgoKX1NBTklUWV9TRVE9CXBv c3QtY2hyb290IHByZS1ldmVyeXRoaW5nIGNoZWNrLW1ha2VmaWxlIFwKCQkJCXNob3ctd2Fybmlu Z3Mgc2hvdy1kZXYtd2FybmluZ3Mgc2hvdy1kZXYtZXJyb3JzIFwKCQkJCWNoZWNrLWNhdGVnb3Jp ZXMgY2hlY2stbWFrZXZhcnMgY2hlY2stZGVza3RvcC1lbnRyaWVzIFwKCQkJCWNoZWNrLWRlcGVu ZHMgaWRlbnRpZnktaW5zdGFsbC1jb25mbGljdHMgY2hlY2stZGVwcmVjYXRlZCBcCgkJCQljaGVj ay12dWxuZXJhYmxlIGNoZWNrLWxpY2Vuc2UgY2hlY2stY29uZmlnIGJ1aWxkYW55d2F5LW1lc3Nh Z2UgXAoJCQkJb3B0aW9ucy1tZXNzYWdlCgpfUEtHX0RFUD0JCWNoZWNrLXNhbml0eQpfUEtHX1NF UT0JCXBrZy1kZXBlbmRzCl9GRVRDSF9ERVA9CQlwa2cKX0ZFVENIX1NFUT0JCWZldGNoLWRlcGVu ZHMgcHJlLWZldGNoICR7X09QVElPTlNfcHJlX2ZldGNofSBwcmUtZmV0Y2gtc2NyaXB0IFwKCQkJ CWRvLWZldGNoIGZldGNoLXNwZWNpYWxzIHBvc3QtZmV0Y2ggJHtfT1BUSU9OU19wb3N0X2ZldGNo fSBwb3N0LWZldGNoLXNjcmlwdApfRVhUUkFDVF9ERVA9CWZldGNoCl9FWFRSQUNUX1NFUT0JY2hl Y2stYnVpbGQtY29uZmxpY3RzIGV4dHJhY3QtbWVzc2FnZSBjaGVja3N1bSBleHRyYWN0LWRlcGVu ZHMgXAoJCQkJY2xlYW4td3JrZGlyICR7V1JLRElSfSBwcmUtZXh0cmFjdCAke19PUFRJT05TX3By ZV9leHRyYWN0fSBwcmUtZXh0cmFjdC1zY3JpcHQgZG8tZXh0cmFjdCBcCgkJCQlwb3N0LWV4dHJh Y3QgJHtfT1BUSU9OU19wb3N0X2V4dHJhY3R9IHBvc3QtZXh0cmFjdC1zY3JpcHQKX1BBVENIX0RF UD0JCWV4dHJhY3QKX1BBVENIX1NFUT0JCWFzay1saWNlbnNlIHBhdGNoLW1lc3NhZ2UgcGF0Y2gt ZGVwZW5kcyBwYXRoZml4IGRvczJ1bml4IGZpeC1zaGViYW5nIFwKCQkJCXByZS1wYXRjaCAke19P UFRJT05TX3ByZV9wYXRjaH0gXAoJCQkJcHJlLXBhdGNoLXNjcmlwdCBkby1wYXRjaCBjaGFyc2V0 Zml4LXBvc3QtcGF0Y2ggcG9zdC1wYXRjaCAke19PUFRJT05TX3Bvc3RfcGF0Y2h9IHBvc3QtcGF0 Y2gtc2NyaXB0Cl9DT05GSUdVUkVfREVQPQlwYXRjaApfQ09ORklHVVJFX1NFUT0JYnVpbGQtZGVw ZW5kcyBsaWItZGVwZW5kcyBjb25maWd1cmUtbWVzc2FnZSBcCgkJCQlwcmUtY29uZmlndXJlICR7 X09QVElPTlNfcHJlX2NvbmZpZ3VyZX0gcHJlLWNvbmZpZ3VyZS1zY3JpcHQgXAoJCQkJcnVuLWF1 dG90b29scyBkby1hdXRvcmVjb25mIHBhdGNoLWxpYnRvb2wgcnVuLWF1dG90b29scy1maXh1cCBk by1jb25maWd1cmUgXAoJCQkJcG9zdC1jb25maWd1cmUgJHtfT1BUSU9OU19wb3N0X2NvbmZpZ3Vy ZX0gcG9zdC1jb25maWd1cmUtc2NyaXB0Cl9CVUlMRF9ERVA9CQljb25maWd1cmUKX0JVSUxEX1NF UT0JCWJ1aWxkLW1lc3NhZ2UgcHJlLWJ1aWxkICR7X09QVElPTlNfcHJlX2J1aWxkfSBwcmUtYnVp bGQtc2NyaXB0IGRvLWJ1aWxkIFwKCQkJCXBvc3QtYnVpbGQgJHtfT1BUSU9OU19wb3N0X2J1aWxk fSBwb3N0LWJ1aWxkLXNjcmlwdAoKX1NUQUdFX0RFUD0JCWJ1aWxkCl9TVEFHRV9TRVE9CQlzdGFn ZS1tZXNzYWdlIHN0YWdlLWRpciBydW4tZGVwZW5kcyBsaWItZGVwZW5kcyBhcHBseS1zbGlzdCBw cmUtaW5zdGFsbCAke19PUFRJT05TX3ByZV9pbnN0YWxsfSAke19PUFRJT05TX3ByZV9zdGFnZX0g Z2VuZXJhdGUtcGxpc3QgXAoJCQkJcHJlLXN1LWluc3RhbGwKIyAke1BPU1RfUExJU1R9IG11c3Qg YmUgYWZ0ZXIgYW55dGhpbmcgdGhhdCBtb2RpZmllcyBUTVBQTElTVApfU1RBR0VfU0VRKz0JY3Jl YXRlLXVzZXJzLWdyb3VwcyBkby1pbnN0YWxsIFwKCQkJCWttb2QtcG9zdC1pbnN0YWxsIGZpeC1w ZXJsLXRoaW5ncyBcCgkJCQl3ZWJwbHVnaW4tcG9zdC1pbnN0YWxsIHBvc3QtaW5zdGFsbCAke19P UFRJT05TX3Bvc3RfaW5zdGFsbH0gcG9zdC1pbnN0YWxsLXNjcmlwdCBcCgkJCQltb3ZlLXVuaXF1 ZWZpbGVzIHBhdGNoLWxhZmlsZXMgcG9zdC1zdGFnZSAke19PUFRJT05TX3Bvc3Rfc3RhZ2V9IGNv bXByZXNzLW1hbiBcCgkJCQlpbnN0YWxsLXJjLXNjcmlwdCBpbnN0YWxsLWxkY29uZmlnLWZpbGUg aW5zdGFsbC1saWNlbnNlIFwKCQkJCWluc3RhbGwtZGVza3RvcC1lbnRyaWVzIGFkZC1wbGlzdC1p bmZvIGFkZC1wbGlzdC1kb2NzIFwKCQkJCWFkZC1wbGlzdC1leGFtcGxlcyBhZGQtcGxpc3QtZGF0 YSBhZGQtcGxpc3QtcG9zdCBcCgkJCQltb3ZlLXVuaXF1ZWZpbGVzLXBsaXN0ICR7UE9TVF9QTElT VH0KLmlmIGRlZmluZWQoREVWRUxPUEVSKQpfU1RBR0VfU0VRKz0Jc3RhZ2UtcWEKLmVuZGlmCl9J TlNUQUxMX0RFUD0Jc3RhZ2UKX0lOU1RBTExfU0VRPQlpbnN0YWxsLW1lc3NhZ2UgcnVuLWRlcGVu ZHMgbGliLWRlcGVuZHMgY2hlY2stYWxyZWFkeS1pbnN0YWxsZWQKX0lOU1RBTExfU1VTRVE9CWZh a2UtcGtnIHNlY3VyaXR5LWNoZWNrCgpfUEFDS0FHRV9ERVA9CXN0YWdlCl9QQUNLQUdFX1NFUT0J cGFja2FnZS1tZXNzYWdlIHByZS1wYWNrYWdlICR7X09QVElPTlNfcHJlX3BhY2thZ2V9IHByZS1w YWNrYWdlLXNjcmlwdCBkby1wYWNrYWdlICR7X09QVElPTlNfcG9zdF9wYWNrYWdlfSBwb3N0LXBh Y2thZ2Utc2NyaXB0CgojIEVuZm9yY2Ugb3JkZXIgZm9yIC1qTiBidWlsZHMKCi5mb3IgX3QgaW4g JHtfVEFSR0VUU19TVEFHRVN9Ci4gIGZvciBzIGluICR7XyR7X3R9X1NFUX0KLiAgICBpZiB0YXJn ZXQoJHtzfSkKLiAgICAgIGlmICEgJHtOT1RQSE9OWTpNJHtzfX0KX1BIT05ZX1RBUkdFVFMrPSAk e3N9Ci4gICAgICBlbmRpZgpfJHtfdH1fUkVBTF9TRVErPQkke3N9Ci4gICAgZW5kaWYKLiAgZW5k Zm9yCi4gIGZvciBzIGluICR7XyR7X3R9X1NVU0VRfQouICAgIGlmIHRhcmdldCgke3N9KQouICAg ICAgaWYgISAke05PVFBIT05ZOk0ke3N9fQpfUEhPTllfVEFSR0VUUys9ICR7c30KLiAgICAgICBl bmRpZgpfJHtfdH1fUkVBTF9TVVNFUSs9CSR7c30KLiAgICBlbmRpZgouICBlbmRmb3IKLk9SREVS OiAke18ke190fV9ERVB9ICR7XyR7X3R9X1JFQUxfU0VRfQouZW5kZm9yCgojIERlZmluZSBhbGwg b2YgdGhlIG1haW4gdGFyZ2V0cyB3aGljaCBkZXBlbmQgb24gYSBzZXF1ZW5jZSBvZiBvdGhlciB0 YXJnZXRzLgojIFNlZSBhYm92ZSAqX1NFUSBhbmQgKl9ERVAuIFRoZSBfREVQIHdpbGwgcnVuIGJl Zm9yZSB0aGlzIGRlZmluZWQgdGFyZ2V0IGlzCiMgcmFuLiBUaGUgX1NFUSB3aWxsIHJ1biBhcyB0 aGlzIHRhcmdldCBvbmNlIF9ERVAgaXMgc2F0aXNmaWVkLgoKLmZvciB0YXJnZXQgaW4gZXh0cmFj dCBwYXRjaCBjb25maWd1cmUgYnVpbGQgc3RhZ2UgaW5zdGFsbCBwYWNrYWdlCgojIENoZWNrIGlm IGNvbmZpZyBkaWFsb2cgbmVlZHMgdG8gc2hvdyBhbmQgZXhlY3V0ZSBpdCBpZiBuZWVkZWQuIElm IGlzIGl0IG5vdAojIG5lZWRlZCAoX09QVElPTlNfT0spLCB0aGVuIGp1c3QgZGVwZW5kIG9uIHRo ZSBjb29raWUgd2hpY2ggaXMgZGVmaW5lZCBsYXRlcgojIHRvIGRlcGVuZCBvbiB0aGUgKl9ERVAg YW5kIGV4ZWN1dGUgdGhlICpfU0VRLgojIElmIG9wdGlvbnMgYXJlIHJlcXVpcmVkLCBleGVjdXRl IGNvbmZpZy1jb25kaXRpb25hbCBhbmQgdGhlbiByZS1leGVjdXRlIHRoZQojIHRhcmdldCBub3Rp bmcgdGhhdCBjb25maWcgaXMgbm8gbG9uZ2VyIG5lZWRlZC4KLmlmICF0YXJnZXQoJHt0YXJnZXR9 KSAmJiBkZWZpbmVkKF9PUFRJT05TX09LKQpfUEhPTllfVEFSR0VUUys9ICR7dGFyZ2V0fQoke3Rh cmdldH06ICR7JHt0YXJnZXQ6dHV9X0NPT0tJRX0KLmVsaWYgIXRhcmdldCgke3RhcmdldH0pCiR7 dGFyZ2V0fTogY29uZmlnLWNvbmRpdGlvbmFsCglAY2QgJHsuQ1VSRElSfSAmJiAke01BS0V9IENP TkZJR19ET05FXyR7VU5JUVVFTkFNRTp0dX09MSAkeyR7dGFyZ2V0OnR1fV9DT09LSUV9Ci5lbGlm IHRhcmdldCgke3RhcmdldH0pICYmIGRlZmluZWQoSUdOT1JFKQouZW5kaWYKCi5pZiAhZXhpc3Rz KCR7JHt0YXJnZXQ6dHV9X0NPT0tJRX0pCgojIERlZmluZSB0aGUgcmVhbCB0YXJnZXQgYmVoYXZp b3IuIERlcGVuZCBvbiB0aGUgdGFyZ2V0J3MgKl9ERVAuIEV4ZWN1dGUKIyB0aGUgdGFyZ2V0J3Mg Kl9TRVEuIEFsc28gaGFuZGxlIHN1IGFuZCBVU0VfU1VCTUFLRSBuZWVkcy4KLmlmICR7VUlEfSAh PSAwICYmIGRlZmluZWQoXyR7dGFyZ2V0OnR1fV9SRUFMX1NVU0VRKSAmJiAhZGVmaW5lZChJTlNU QUxMX0FTX1VTRVIpCi4gIGlmIGRlZmluZWQoVVNFX1NVQk1BS0UpCiR7JHt0YXJnZXQ6dHV9X0NP T0tJRX06ICR7XyR7dGFyZ2V0OnR1fV9ERVB9CglAY2QgJHsuQ1VSRElSfSAmJiAke01BS0V9ICR7 XyR7dGFyZ2V0OnR1fV9SRUFMX1NFUX0KLiAgZWxzZSAgIyAhVVNFX1NVQk1BS0UKJHske3Rhcmdl dDp0dX1fQ09PS0lFfTogJHtfJHt0YXJnZXQ6dHV9X0RFUH0gJHtfJHt0YXJnZXQ6dHV9X1JFQUxf U0VRfQouICBlbmRpZiAjIFVTRV9TVUJNQUtFCglAJHtFQ0hPX01TR30gIj09PT4gIFN3aXRjaGlu ZyB0byByb290IGNyZWRlbnRpYWxzIGZvciAnJHt0YXJnZXR9JyB0YXJnZXQiCglAY2QgJHsuQ1VS RElSfSAmJiBcCgkJJHtTVV9DTUR9ICIke01BS0V9ICR7XyR7dGFyZ2V0OnR1fV9SRUFMX1NVU0VR fSIKCUAke0VDSE9fTVNHfSAiPT09PiAgUmV0dXJuaW5nIHRvIHVzZXIgY3JlZGVudGlhbHMiCglA JHtUT1VDSH0gJHtUT1VDSF9GTEFHU30gJHsuVEFSR0VUfQouZWxzZSAjIE5vIFNVIG5lZWRlZAou ICBpZiBkZWZpbmVkKFVTRV9TVUJNQUtFKQokeyR7dGFyZ2V0OnR1fV9DT09LSUV9OiAke18ke3Rh cmdldDp0dX1fREVQfQoJQGNkICR7LkNVUkRJUn0gJiYgXAoJCSR7TUFLRX0gJHtfJHt0YXJnZXQ6 dHV9X1JFQUxfU0VRfSAke18ke3RhcmdldDp0dX1fUkVBTF9TVVNFUX0KCUAke1RPVUNIfSAke1RP VUNIX0ZMQUdTfSAkey5UQVJHRVR9Ci4gIGVsc2UgIyAhVVNFX1NVQk1BS0UKJHske3RhcmdldDp0 dX1fQ09PS0lFfTogJHtfJHt0YXJnZXQ6dHV9X0RFUH0gJHtfJHt0YXJnZXQ6dHV9X1JFQUxfU0VR fSAke18ke3RhcmdldDp0dX1fUkVBTF9TVVNFUX0KCUAke1RPVUNIfSAke1RPVUNIX0ZMQUdTfSAk ey5UQVJHRVR9Ci4gIGVuZGlmICMgVVNFX1NVQk1BS0UKLmVuZGlmICMgU1UgbmVlZGVkCgouZWxz ZSAjIGV4aXN0cyhjb29raWUpCiR7JHt0YXJnZXQ6dHV9X0NPT0tJRX06OgoJQGlmIFsgLWUgJHsu VEFSR0VUfSBdOyB0aGVuIFwKCQkke0RPX05BREF9OyBcCgllbHNlIFwKCQljZCAkey5DVVJESVJ9 ICYmICR7TUFLRX0gJHsuVEFSR0VUfTsgXAoJZmkKLmVuZGlmICMgIWV4aXN0cyhjb29raWUpCgou ZW5kZm9yICMgZm9yZWFjaCh0YXJnZXRzKQoKLlBIT05ZOiAke19QSE9OWV9UQVJHRVRTfSBjaGVj ay1zYW5pdHkgZmV0Y2ggcGtnCgouaWYgIXRhcmdldChjaGVjay1zYW5pdHkpCmNoZWNrLXNhbml0 eTogJHtfU0FOSVRZX1JFQUxfU0VRfQouZW5kaWYKCi5pZiAhdGFyZ2V0KGZldGNoKQpmZXRjaDog JHtfRkVUQ0hfREVQfSAke19GRVRDSF9SRUFMX1NFUX0KLmVuZGlmCgouaWYgIXRhcmdldChwa2cp CnBrZzogJHtfUEtHX0RFUH0gJHtfUEtHX1JFQUxfU0VRfQouZW5kaWYKCi5lbmRpZgojIEVuZCBv ZiBwb3N0LW1ha2VmaWxlIHNlY3Rpb24uCgouZW5kaWYKIyBFbmQgb2YgdGhlIERFU1RESVIgaWYg c3RhdGVtZW50Cg== --_d99f99c4-0dc8-4bf3-9846-12fbb4c2aec4_--