From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: "Daniel Engeler" Newsgroups: gmane.emacs.devel Subject: Re: Contribution: Serial port access Date: Thu, 12 Jun 2008 22:06:50 +0200 Message-ID: References: <73E47418-2ADD-4682-91CB-D3F0C94B1662@gmail.com> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_19594_2948954.1213301210405" X-Trace: ger.gmane.org 1213337175 32243 80.91.229.12 (13 Jun 2008 06:06:15 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Fri, 13 Jun 2008 06:06:15 +0000 (UTC) To: emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Fri Jun 13 08:06:59 2008 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.50) id 1K72QB-0001qK-Pf for ged-emacs-devel@m.gmane.org; Fri, 13 Jun 2008 08:06:58 +0200 Original-Received: from localhost ([127.0.0.1]:50237 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1K72PM-0002zA-6K for ged-emacs-devel@m.gmane.org; Fri, 13 Jun 2008 02:05:08 -0400 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1K6t4S-0004g9-6K for emacs-devel@gnu.org; Thu, 12 Jun 2008 16:06:56 -0400 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1K6t4Q-0004eb-F5 for emacs-devel@gnu.org; Thu, 12 Jun 2008 16:06:55 -0400 Original-Received: from [199.232.76.173] (port=46066 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1K6t4Q-0004eT-Bb for emacs-devel@gnu.org; Thu, 12 Jun 2008 16:06:54 -0400 Original-Received: from an-out-0708.google.com ([209.85.132.250]:36905) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1K6t4O-0001N4-Pt for emacs-devel@gnu.org; Thu, 12 Jun 2008 16:06:54 -0400 Original-Received: by an-out-0708.google.com with SMTP id c38so730372ana.84 for ; Thu, 12 Jun 2008 13:06:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:message-id:date:from:to :subject:in-reply-to:mime-version:content-type:references; bh=zqsoZOCAcE54ljI+Pb+5itcYuGlbBm9hOjL8HScQRro=; b=Ls4hsJk7ZR2qnN8HQuSGeB3e8t4NTVA7VCVuiIZsDI1h7ujvNfh8Dw8sgEQitEbMVP 6slbrFw0aPNBpTncpFQ2Y0Zauw4BPT3kN0u6vqxVb+/mPCT5b1QStNMeas/8UBY/UcrH 6UFuu2h2NF/+Xqltp1K5JMvvXobC8uCebLNu0= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:to:subject:in-reply-to:mime-version :content-type:references; b=S3qgKBfjZtpAeIlv8groGVYabam99vMkA2la5/cJE4llKLt15anFKmjCIWUuIHLqIM OyiHjoXCCZziCJlIls4ig0vD/nhN0papiTVH5fj2pbDXccfoRD3icduF/qq5xzzMXrQo 8bJ6w0tVEwJSmYG1s/1j8txF31/b0J0g+d1yA= Original-Received: by 10.100.110.15 with SMTP id i15mr2756734anc.97.1213301210429; Thu, 12 Jun 2008 13:06:50 -0700 (PDT) Original-Received: by 10.100.37.9 with HTTP; Thu, 12 Jun 2008 13:06:50 -0700 (PDT) In-Reply-To: X-detected-kernel: by monty-python.gnu.org: Linux 2.6 (newer, 2) X-Mailman-Approved-At: Fri, 13 Jun 2008 02:05:00 -0400 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:99063 Archived-At: ------=_Part_19594_2948954.1213301210405 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline On Thu, Jun 12, 2008 at 6:08 AM, Glenn Morris wrote: > Since there aren't any, please can you provide ChangeLog entries, and > preferably a NEWS entry, so that this can get installed? See the > existing files for the format. I hope everything is fine now. I couldn't test the new diff because the OS X build fails, but the code hasn't changed except for line numbers and the added ChangeLog, NEWS, and AUTHORS. Regards, Daniel ------=_Part_19594_2948954.1213301210405 Content-Type: application/octet-stream; name=engeler-serial-3.diff Content-Transfer-Encoding: base64 X-Attachment-Id: f_fhds3qty0 Content-Disposition: attachment; filename=engeler-serial-3.diff SW5kZXg6IGRvYy9lbWFjcy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL3NvdXJjZXMv ZW1hY3MvZW1hY3MvZG9jL2VtYWNzL0NoYW5nZUxvZyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4x MDAKZGlmZiAtYyAtcCAtcjEuMTAwIENoYW5nZUxvZwoqKiogZG9jL2VtYWNzL0NoYW5nZUxvZwkx MCBKdW4gMjAwOCAxNjo1MDowMCAtMDAwMAkxLjEwMAotLS0gZG9jL2VtYWNzL0NoYW5nZUxvZwkx MiBKdW4gMjAwOCAxOTo1MzoxNiAtMDAwMAoqKioqKioqKioqKioqKioKKioqIDEsMyAqKioqCi0t LSAxLDggLS0tLQorIDIwMDgtMDYtMTIgIERhbmllbCBFbmdlbGVyICA8ZW5nZWxlckBnbWFpbC5j b20+CisgCisgCSogbWlzYy50ZXhpOiBBZGQgZG9jdW1lbnRhdGlvbiBhYm91dCBzZXJpYWwgcG9y dCBhY2Nlc3MuCisgCSogZW1hY3MudGV4aTogTGlrZXdpc2UuCisgCiAgMjAwOC0wNi0wNSAgTWls ZXMgQmFkZXIgIDxtaWxlc0BnbnUub3JnPgogIAogIAkqIGRpc3BsYXkudGV4aSAoVGVtcG9yYXJ5 IEZhY2UgQ2hhbmdlcyk6IFVwZGF0ZSB0byByZWZsZWN0IGZ1bmN0aW9uCkluZGV4OiBkb2MvZW1h Y3MvZW1hY3MudGV4aQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvc291cmNlcy9lbWFjcy9lbWFjcy9k b2MvZW1hY3MvZW1hY3MudGV4aSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMApkaWZmIC1jIC1w IC1yMS4xMCBlbWFjcy50ZXhpCioqKiBkb2MvZW1hY3MvZW1hY3MudGV4aQkxNSBNYXkgMjAwOCAx NzozODozNiAtMDAwMAkxLjEwCi0tLSBkb2MvZW1hY3MvZW1hY3MudGV4aQkxMiBKdW4gMjAwOCAx OTo1MzoxOSAtMDAwMAoqKioqKioqKioqKioqKiogUnVubmluZyBTaGVsbCBDb21tYW5kcyBmcm9t IEVtYWNzCioqKiA4NjQsODY5ICoqKioKLS0tIDg2NCw4NzAgLS0tLQogICogVGVybSBNb2RlOjog ICAgICAgICAgIFNwZWNpYWwgRW1hY3MgY29tbWFuZHMgdXNlZCBpbiBUZXJtIG1vZGUuCiAgKiBQ YWdpbmcgaW4gVGVybTo6ICAgICAgUGFnaW5nIGluIHRoZSB0ZXJtaW5hbCBlbXVsYXRvci4KICAq IFJlbW90ZSBIb3N0OjoJCUNvbm5lY3RpbmcgdG8gYW5vdGhlciBjb21wdXRlci4KKyAqIFNlcmlh bCBUZXJtaW5hbDo6ICAgICBDb25uZWN0aW5nIHRvIGEgc2VyaWFsIHBvcnQuCiAgCiAgVXNpbmcg RW1hY3MgYXMgYSBTZXJ2ZXIKICAKSW5kZXg6IGRvYy9lbWFjcy9taXNjLnRleGkKPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQpSQ1MgZmlsZTogL3NvdXJjZXMvZW1hY3MvZW1hY3MvZG9jL2VtYWNzL21pc2MudGV4aSx2CnJl dHJpZXZpbmcgcmV2aXNpb24gMS41CmRpZmYgLWMgLXAgLXIxLjUgbWlzYy50ZXhpCioqKiBkb2Mv ZW1hY3MvbWlzYy50ZXhpCTIyIEphbiAyMDA4IDIzOjUzOjMyIC0wMDAwCTEuNQotLS0gZG9jL2Vt YWNzL21pc2MudGV4aQkxMiBKdW4gMjAwOCAxOTo1MzoyMiAtMDAwMAoqKioqKioqKioqKioqKiog RXNoZWxsOiBUaGUgRW1hY3MgU2hlbGx9LgoqKiogMzUwLDM1NSAqKioqCi0tLSAzNTAsMzU2IC0t LS0KICAqIFRlcm0gTW9kZTo6ICAgICAgICAgICAgICBTcGVjaWFsIEVtYWNzIGNvbW1hbmRzIHVz ZWQgaW4gVGVybSBtb2RlLgogICogUGFnaW5nIGluIFRlcm06OiAgICAgICAgIFBhZ2luZyBpbiB0 aGUgdGVybWluYWwgZW11bGF0b3IuCiAgKiBSZW1vdGUgSG9zdDo6ICAgICAgICAgICAgQ29ubmVj dGluZyB0byBhbm90aGVyIGNvbXB1dGVyLgorICogU2VyaWFsIFRlcm1pbmFsOjogICAgICAgIENv bm5lY3RpbmcgdG8gYSBzZXJpYWwgcG9ydC4KICBAZW5kIG1lbnUKICAKICBAbm9kZSBTaW5nbGUg U2hlbGwKKioqKioqKioqKioqKioqIGhhbmRsZXMgZWFjaCBvbmUgYXBwcm9wcmlhdGVseSwgY2hh bmdpbmcKKioqIDEwNzYsMTA4MiAqKioqCiAgYXBwZWFyYW5jZSBvZiB0aGUgd2luZG93IG1hdGNo ZXMgd2hhdCBpdCB3b3VsZCBiZSBvbiBhIHJlYWwgdGVybWluYWwuCiAgWW91IGNhbiBhY3R1YWxs eSBydW4gRW1hY3MgaW5zaWRlIGFuIEVtYWNzIFRlcm0gd2luZG93LgogIAohICAgIFRoZSBmaWxl IG5hbWUgdXNlZCB0byBsb2FkIHRoZSBzdWJzaGVsbCBpcyBkZXRlcm1pbmVkIHRoZSBzYW1lIHdh eQogIGFzIGZvciBTaGVsbCBtb2RlLiAgVG8gbWFrZSBtdWx0aXBsZSB0ZXJtaW5hbCBlbXVsYXRv cnMsIHJlbmFtZSB0aGUKICBidWZmZXIgQHNhbXB7KnRlcm1pbmFsKn0gdG8gc29tZXRoaW5nIGRp ZmZlcmVudCB1c2luZyBAa2Jke00teAogIHJlbmFtZS11bmlxdWVseX0sIGp1c3QgYXMgd2l0aCBT aGVsbCBtb2RlLgotLS0gMTA3NywxMDg2IC0tLS0KICBhcHBlYXJhbmNlIG9mIHRoZSB3aW5kb3cg bWF0Y2hlcyB3aGF0IGl0IHdvdWxkIGJlIG9uIGEgcmVhbCB0ZXJtaW5hbC4KICBZb3UgY2FuIGFj dHVhbGx5IHJ1biBFbWFjcyBpbnNpZGUgYW4gRW1hY3MgVGVybSB3aW5kb3cuCiAgCiEgICBZb3Ug Y2FuIHVzZSBUZXJtIG1vZGUgdG8gY29tbXVuaWNhdGUgd2l0aCBhIGRldmljZSBjb25uZWN0ZWQg dG8gYQohIHNlcmlhbCBwb3J0IG9mIHlvdXIgY29tcHV0ZXIsIHNlZSBAcmVme1NlcmlhbCBUZXJt aW5hbH0uCiEgCiEgICBUaGUgZmlsZSBuYW1lIHVzZWQgdG8gbG9hZCB0aGUgc3Vic2hlbGwgaXMg ZGV0ZXJtaW5lZCB0aGUgc2FtZSB3YXkKICBhcyBmb3IgU2hlbGwgbW9kZS4gIFRvIG1ha2UgbXVs dGlwbGUgdGVybWluYWwgZW11bGF0b3JzLCByZW5hbWUgdGhlCiAgYnVmZmVyIEBzYW1weyp0ZXJt aW5hbCp9IHRvIHNvbWV0aGluZyBkaWZmZXJlbnQgdXNpbmcgQGtiZHtNLXgKICByZW5hbWUtdW5p cXVlbHl9LCBqdXN0IGFzIHdpdGggU2hlbGwgbW9kZS4KKioqKioqKioqKioqKioqIG9mZiBkaXJl Y3RvcnkgdHJhY2tpbmcuCioqKiAxMjMyLDEyMzcgKioqKgotLS0gMTIzNiwxMjY4IC0tLS0KICAK ICBAZW5kIGlnbm9yZQogIAorIEBub2RlIFNlcmlhbCBUZXJtaW5hbAorIEBzdWJzZWN0aW9uIFNl cmlhbCBUZXJtaW5hbAorIEBjaW5kZXggdGVybWluYWwsIHNlcmlhbAorIEBmaW5kZXggc2VyaWFs LXRlcm0KKyAKKyAgIElmIHlvdSBoYXZlIGEgZGV2aWNlIGNvbm5lY3RlZCB0byBhIHNlcmlhbCBw b3J0IG9mIHlvdXIgY29tcHV0ZXIsCisgeW91IGNhbiB1c2UgRW1hY3MgdG8gY29tbXVuaWNhdGUg d2l0aCBpdC4gIEBrYmR7TS14IHNlcmlhbC10ZXJtfSB3aWxsCisgYXNrIHlvdSBmb3IgYSBzZXJp YWwgcG9ydCBuYW1lIGFuZCBzcGVlZCBhbmQgd2lsbCB0aGVuIG9wZW4gYSBuZXcKKyB3aW5kb3cg aW4gQHJlZntUZXJtIE1vZGV9LgorIAorICAgVGhlIHNwZWVkIG9mIHRoZSBzZXJpYWwgcG9ydCBp cyBtZWFzdXJlZCBpbiBiaXRzIHBlciBzZWNvbmQuICBUaGUKKyBtb3N0IGNvbW1vbiBzcGVlZCBp cyA5NjAwIGJpdHMgcGVyIHNlY29uZC4gIFlvdSBjYW4gY2hhbmdlIHRoZSBzcGVlZAorIGludGVy YWN0aXZlbHkgYnkgY2xpY2tpbmcgb24gdGhlIG1vZGUgbGluZS4KKyAKKyAgIEEgc2VyaWFsIHBv cnQgY2FuIGJlIGNvbmZpZ3VyZWQgZXZlbiBtb3JlIGJ5IGNsaWNraW5nIG9uIGBgOE4xJycgaW4K KyB0aGUgbW9kZSBsaW5lLiAgQnkgZGVmYXVsdCwgYSBzZXJpYWwgcG9ydCBpcyBjb25maWd1cmVk IGFzIGBgOE4xJycsCisgd2hpY2ggbWVhbnMgdGhhdCBlYWNoIGJ5dGUgY29uc2lzdHMgb2YgOCBk YXRhIGJpdHMsIE5vIHBhcml0eSBjaGVjaworIGJpdCwgYW5kIDEgc3RvcGJpdC4KKyAKKyAgIFdo ZW4geW91IGhhdmUgb3BlbmVkIHRoZSBzZXJpYWwgcG9ydCBjb25uZWN0aW9uLCB5b3Ugd2lsbCBz ZWUgb3V0cHV0CisgZnJvbSB0aGUgZGV2aWNlIGluIHRoZSB3aW5kb3cuICBBbHNvLCB3aGF0IHlv dSB0eXBlIGluIHRoZSB3aW5kb3cgaXMKKyBzZW50IHRvIHRoZSBkZXZpY2UuCisgCisgICBJZiB0 aGUgc3BlZWQgb3IgdGhlIGNvbmZpZ3VyYXRpb24gaXMgd3JvbmcsIHlvdSBjYW5ub3QgY29tbXVu aWNhdGUKKyB3aXRoIHlvdXIgZGV2aWNlIGFuZCB3aWxsIHByb2JhYmx5IG9ubHkgc2VlIGdhcmJh Z2Ugb3V0cHV0IGluIHRoZQorIHdpbmRvdy4KKyAKICBAbm9kZSBFbWFjcyBTZXJ2ZXIsIFByaW50 aW5nLCBTaGVsbCwgVG9wCiAgQHNlY3Rpb24gVXNpbmcgRW1hY3MgYXMgYSBTZXJ2ZXIKICBAcGlu ZGV4IGVtYWNzY2xpZW50CkluZGV4OiBkb2MvbGlzcHJlZi9DaGFuZ2VMb2cKPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS Q1MgZmlsZTogL3NvdXJjZXMvZW1hY3MvZW1hY3MvZG9jL2xpc3ByZWYvQ2hhbmdlTG9nLHYKcmV0 cmlldmluZyByZXZpc2lvbiAxLjYzCmRpZmYgLWMgLXAgLXIxLjYzIENoYW5nZUxvZwoqKiogZG9j L2xpc3ByZWYvQ2hhbmdlTG9nCTEwIEp1biAyMDA4IDE2OjUwOjAyIC0wMDAwCTEuNjMKLS0tIGRv Yy9saXNwcmVmL0NoYW5nZUxvZwkxMiBKdW4gMjAwOCAxOTo1MzoyNyAtMDAwMAoqKioqKioqKioq KioqKioKKioqIDEsMyAqKioqCi0tLSAxLDkgLS0tLQorIDIwMDgtMDYtMTIgIERhbmllbCBFbmdl bGVyICA8ZW5nZWxlckBnbWFpbC5jb20+CisgCisgCSogcHJvY2Vzc2VzLnRleGk6IEFkZCBkb2N1 bWVudGF0aW9uIGFib3V0IHNlcmlhbCBwb3J0IGFjY2Vzcy4KKyAJKiBpbnRlcm5hbHMudGV4aTog TGlrZXdpc2UuCisgCSogZWxpc3AudGV4aTogTGlrZXdpc2UuCisgCiAgMjAwOC0wNi0wNSAgTWls ZXMgQmFkZXIgIDxtaWxlc0BnbnUub3JnPgogIAogIAkqIGRpc3BsYXkudGV4aSAoRGlzcGxheWlu ZyBGYWNlcyk6IFVwZGF0ZSB0byByZWZsZWN0IGZ1bmN0aW9uCkluZGV4OiBkb2MvbGlzcHJlZi9l bGlzcC50ZXhpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9zb3VyY2VzL2VtYWNzL2VtYWNzL2RvYy9s aXNwcmVmL2VsaXNwLnRleGksdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNgpkaWZmIC1jIC1wIC1y MS42IGVsaXNwLnRleGkKKioqIGRvYy9saXNwcmVmL2VsaXNwLnRleGkJMTMgTWFyIDIwMDggMDM6 MTU6MzkgLTAwMDAJMS42Ci0tLSBkb2MvbGlzcHJlZi9lbGlzcC50ZXhpCTEyIEp1biAyMDA4IDE5 OjUzOjI5IC0wMDAwCioqKioqKioqKioqKioqKiBQcm9jZXNzZXMKKioqIDExOTUsMTIwMCAqKioq Ci0tLSAxMTk1LDEyMDEgLS0tLQogICogTG93LUxldmVsIE5ldHdvcms6OiAgICAgICBMb3dlci1s ZXZlbCBidXQgbW9yZSBnZW5lcmFsIGZ1bmN0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdG8gY3JlYXRlIGNvbm5lY3Rpb25zIGFuZCBzZXJ2ZXJzLgogICogTWlzYyBOZXR3b3Jr OjogICAgICAgICAgICBBZGRpdGlvbmFsIHJlbGV2YW50IGZ1bmN0aW9ucyBmb3IgbmV0d29yayBj b25uZWN0aW9ucy4KKyAqIFNlcmlhbCBQb3J0czo6ICAgICAgICAgICAgQ29tbXVuaWNhdGluZyB3 aXRoIHNlcmlhbCBwb3J0cy4KICAqIEJ5dGUgUGFja2luZzo6ICAgICAgICAgICAgVXNpbmcgYmlu ZGF0IHRvIHBhY2sgYW5kIHVucGFjayBiaW5hcnkgZGF0YS4KICAKICBSZWNlaXZpbmcgT3V0cHV0 IGZyb20gUHJvY2Vzc2VzCkluZGV4OiBkb2MvbGlzcHJlZi9pbnRlcm5hbHMudGV4aQo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09ClJDUyBmaWxlOiAvc291cmNlcy9lbWFjcy9lbWFjcy9kb2MvbGlzcHJlZi9pbnRlcm5hbHMu dGV4aSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zCmRpZmYgLWMgLXAgLXIxLjMgaW50ZXJuYWxz LnRleGkKKioqIGRvYy9saXNwcmVmL2ludGVybmFscy50ZXhpCTggSmFuIDIwMDggMjA6NDU6NDYg LTAwMDAJMS4zCi0tLSBkb2MvbGlzcHJlZi9pbnRlcm5hbHMudGV4aQkxMiBKdW4gMjAwOCAxOTo1 MzozMSAtMDAwMAoqKioqKioqKioqKioqKiogQSBzdHJpbmcsIHRoZSBuYW1lIG9mIHRoZSBwcm9j ZXNzLgoqKiogMTQzMywxNDM5ICoqKioKICAKICBAaXRlbSBjb21tYW5kCiAgQSBsaXN0IGNvbnRh aW5pbmcgdGhlIGNvbW1hbmQgYXJndW1lbnRzIHRoYXQgd2VyZSB1c2VkIHRvIHN0YXJ0IHRoaXMK ISBwcm9jZXNzLgogIAogIEBpdGVtIGZpbHRlcgogIEEgZnVuY3Rpb24gdXNlZCB0byBhY2NlcHQg b3V0cHV0IGZyb20gdGhlIHByb2Nlc3MgaW5zdGVhZCBvZiBhIGJ1ZmZlciwKLS0tIDE0MzMsMTQ0 MCAtLS0tCiAgCiAgQGl0ZW0gY29tbWFuZAogIEEgbGlzdCBjb250YWluaW5nIHRoZSBjb21tYW5k IGFyZ3VtZW50cyB0aGF0IHdlcmUgdXNlZCB0byBzdGFydCB0aGlzCiEgcHJvY2Vzcy4gIEZvciBh IG5ldHdvcmsgb3Igc2VyaWFsIHByb2Nlc3MsIGl0IGlzIEBjb2Rle25pbH0gaWYgdGhlCiEgcHJv Y2VzcyBpcyBydW5uaW5nIG9yIEBjb2Rle3R9IGlmIHRoZSBwcm9jZXNzIGlzIHN0b3BwZWQuCiAg CiAgQGl0ZW0gZmlsdGVyCiAgQSBmdW5jdGlvbiB1c2VkIHRvIGFjY2VwdCBvdXRwdXQgZnJvbSB0 aGUgcHJvY2VzcyBpbnN0ZWFkIG9mIGEgYnVmZmVyLAoqKioqKioqKioqKioqKiogVGhlIGFzc29j aWF0ZWQgYnVmZmVyIG9mIHRoZSBwcm9jZXNzLgoqKiogMTQ0OSwxNDU2ICoqKioKICBBbiBpbnRl Z2VyLCB0aGUgb3BlcmF0aW5nIHN5c3RlbSdzIHByb2Nlc3MgQGFjcm9ueW17SUR9LgogIAogIEBp dGVtIGNoaWxkcAogIEEgZmxhZywgbm9uLUBjb2Rle25pbH0gaWYgdGhpcyBpcyByZWFsbHkgYSBj aGlsZCBwcm9jZXNzLgohIEl0IGlzIEBjb2Rle25pbH0gZm9yIGEgbmV0d29yayBjb25uZWN0aW9u LgogIAogIEBpdGVtIG1hcmsKICBBIG1hcmtlciBpbmRpY2F0aW5nIHRoZSBwb3NpdGlvbiBvZiB0 aGUgZW5kIG9mIHRoZSBsYXN0IG91dHB1dCBmcm9tIHRoaXMKLS0tIDE0NTAsMTQ1OCAtLS0tCiAg QW4gaW50ZWdlciwgdGhlIG9wZXJhdGluZyBzeXN0ZW0ncyBwcm9jZXNzIEBhY3Jvbnlte0lEfS4K ICAKICBAaXRlbSBjaGlsZHAKKyAKICBBIGZsYWcsIG5vbi1AY29kZXtuaWx9IGlmIHRoaXMgaXMg cmVhbGx5IGEgY2hpbGQgcHJvY2Vzcy4KISBJdCBpcyBAY29kZXtuaWx9IGZvciBhIG5ldHdvcmsg b3Igc2VyaWFsIGNvbm5lY3Rpb24uCiAgCiAgQGl0ZW0gbWFyawogIEEgbWFya2VyIGluZGljYXRp bmcgdGhlIHBvc2l0aW9uIG9mIHRoZSBlbmQgb2YgdGhlIGxhc3Qgb3V0cHV0IGZyb20gdGhpcwoq KioqKioqKioqKioqKiogU2l6ZSBvZiBjYXJyeW92ZXIgaW4gZW5jb2RpbmcuCioqKiAxNTE1LDE1 MjAgKioqKgotLS0gMTUxNywxNTI3IC0tLS0KICBAaXRlbSBpbmhlcml0X2NvZGluZ19zeXN0ZW1f ZmxhZwogIEZsYWcgdG8gc2V0IEBjb2Rle2NvZGluZy1zeXN0ZW19IG9mIHRoZSBwcm9jZXNzIGJ1 ZmZlciBmcm9tIHRoZQogIGNvZGluZyBzeXN0ZW0gdXNlZCB0byBkZWNvZGUgcHJvY2VzcyBvdXRw dXQuCisgCisgQGl0ZW0gdHlwZQorIFN5bWJvbCBpbmRpY2F0aW5nIHRoZSB0eXBlIG9mIHByb2Nl c3M6IEBjb2Rle3JlYWx9LCBAY29kZXtuZXR3b3JrfSwKKyBAY29kZXtzZXJpYWx9CisgCiAgQGVu ZCB0YWJsZQogIAogIEBpZ25vcmUKSW5kZXg6IGRvYy9saXNwcmVmL3Byb2Nlc3Nlcy50ZXhpCj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KUkNTIGZpbGU6IC9zb3VyY2VzL2VtYWNzL2VtYWNzL2RvYy9saXNwcmVmL3Byb2Nl c3Nlcy50ZXhpLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjUKZGlmZiAtYyAtcCAtcjEuNSBwcm9j ZXNzZXMudGV4aQoqKiogZG9jL2xpc3ByZWYvcHJvY2Vzc2VzLnRleGkJMjUgTWFyIDIwMDggMTc6 NTA6MDYgLTAwMDAJMS41Ci0tLSBkb2MvbGlzcHJlZi9wcm9jZXNzZXMudGV4aQkxMiBKdW4gMjAw OCAxOTo1MzozNSAtMDAwMAoqKioqKioqKioqKioqKiogVGhpcyBmdW5jdGlvbiByZXR1cm5zIEBj b2Rle3R9IGlmIEB2YXJ7bwoqKiogNTMsNTggKioqKgotLS0gNTMsNTkgLS0tLQogICogTG93LUxl dmVsIE5ldHdvcms6OiAgICAgICAgTG93ZXItbGV2ZWwgYnV0IG1vcmUgZ2VuZXJhbCBmdW5jdGlv bgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBjcmVhdGUgY29ubmVjdGlvbnMg YW5kIHNlcnZlcnMuCiAgKiBNaXNjIE5ldHdvcms6OiAgICAgICAgICAgICBBZGRpdGlvbmFsIHJl bGV2YW50IGZ1bmN0aW9ucyBmb3IgbmV0d29yayBjb25uZWN0aW9ucy4KKyAqIFNlcmlhbCBQb3J0 czo6ICAgICAgICAgICAgIENvbW11bmljYXRpbmcgd2l0aCBzZXJpYWwgcG9ydHMuCiAgKiBCeXRl IFBhY2tpbmc6OiAgICAgICAgICAgICBVc2luZyBiaW5kYXQgdG8gcGFjayBhbmQgdW5wYWNrIGJp bmFyeSBkYXRhLgogIEBlbmQgbWVudQogIAoqKioqKioqKioqKioqKiogd2VyZSBnaXZlbiB0byB0 aGUgcHJvZ3JhbS4KKioqIDY3Niw2ODEgKioqKgotLS0gNjc3LDcyNSAtLS0tCiAgQGVuZCBzbWFs bGV4YW1wbGUKICBAZW5kIGRlZnVuCiAgCisgQGRlZnVuIHByb2Nlc3MtY29udGFjdCBwcm9jZXNz ICZvcHRpb25hbCBrZXkKKyAKKyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgaW5mb3JtYXRpb24gYWJv dXQgaG93IGEgbmV0d29yayBvciBzZXJpYWwKKyBwcm9jZXNzIHdhcyBzZXQgdXAuICBGb3IgYSBu ZXR3b3JrIHByb2Nlc3MsIHdoZW4gQHZhcntrZXl9IGlzCisgQGNvZGV7bmlsfSwgaXQgcmV0dXJu cyBAY29kZXsoQHZhcntob3N0bmFtZX0gQHZhcntzZXJ2aWNlfSl9IHdoaWNoCisgc3BlY2lmaWVz IHdoYXQgeW91IGNvbm5lY3RlZCB0by4gIEZvciBhIHNlcmlhbCBwcm9jZXNzLCB3aGVuIEB2YXJ7 a2V5fQorIGlzIEBjb2Rle25pbH0sIGl0IHJldHVybnMgQGNvZGV7KEB2YXJ7cG9ydH0gQHZhcntz cGVlZH0pfS4gIEZvciBhbgorIG9yZGluYXJ5IGNoaWxkIHByb2Nlc3MsIHRoaXMgZnVuY3Rpb24g YWx3YXlzIHJldHVybnMgQGNvZGV7dH0uCisgCisgSWYgQHZhcntrZXl9IGlzIEBjb2Rle3R9LCB0 aGUgdmFsdWUgaXMgdGhlIGNvbXBsZXRlIHN0YXR1cyBpbmZvcm1hdGlvbgorIGZvciB0aGUgY29u bmVjdGlvbiwgc2VydmVyLCBvciBzZXJpYWwgcG9ydDsgdGhhdCBpcywgdGhlIGxpc3Qgb2YKKyBr ZXl3b3JkcyBhbmQgdmFsdWVzIHNwZWNpZmllZCBpbiBAY29kZXttYWtlLW5ldHdvcmstcHJvY2Vz c30gb3IKKyBAY29kZXttYWtlLXNlcmlhbC1wcm9jZXNzfSwgZXhjZXB0IHRoYXQgc29tZSBvZiB0 aGUgdmFsdWVzIHJlcHJlc2VudAorIHRoZSBjdXJyZW50IHN0YXR1cyBpbnN0ZWFkIG9mIHdoYXQg eW91IHNwZWNpZmllZC4KKyAKKyBGb3IgYSBuZXR3b3JrIHByb2Nlc3M6CisgCisgQHRhYmxlIEBj b2RlCisgQGl0ZW0gOmJ1ZmZlcgorIFRoZSBhc3NvY2lhdGVkIHZhbHVlIGlzIHRoZSBwcm9jZXNz IGJ1ZmZlci4KKyBAaXRlbSA6ZmlsdGVyCisgVGhlIGFzc29jaWF0ZWQgdmFsdWUgaXMgdGhlIHBy b2Nlc3MgZmlsdGVyIGZ1bmN0aW9uLgorIEBpdGVtIDpzZW50aW5lbAorIFRoZSBhc3NvY2lhdGVk IHZhbHVlIGlzIHRoZSBwcm9jZXNzIHNlbnRpbmVsIGZ1bmN0aW9uLgorIEBpdGVtIDpyZW1vdGUK KyBJbiBhIGNvbm5lY3Rpb24sIHRoZSBhZGRyZXNzIGluIGludGVybmFsIGZvcm1hdCBvZiB0aGUg cmVtb3RlIHBlZXIuCisgQGl0ZW0gOmxvY2FsCisgVGhlIGxvY2FsIGFkZHJlc3MsIGluIGludGVy bmFsIGZvcm1hdC4KKyBAaXRlbSA6c2VydmljZQorIEluIGEgc2VydmVyLCBpZiB5b3Ugc3BlY2lm aWVkIEBjb2Rle3R9IGZvciBAdmFye3NlcnZpY2V9LAorIHRoaXMgdmFsdWUgaXMgdGhlIGFjdHVh bCBwb3J0IG51bWJlci4KKyBAZW5kIHRhYmxlCisgCisgQGNvZGV7OmxvY2FsfSBhbmQgQGNvZGV7 OnJlbW90ZX0gYXJlIGluY2x1ZGVkIGV2ZW4gaWYgdGhleSB3ZXJlIG5vdAorIHNwZWNpZmllZCBl eHBsaWNpdGx5IGluIEBjb2Rle21ha2UtbmV0d29yay1wcm9jZXNzfS4KKyAKKyBGb3IgYSBzZXJp YWwgcHJvY2Vzcywgc2VlIEBjb2Rle21ha2Utc2VyaWFsLXByb2Nlc3N9IGFuZAorIEBjb2Rle3Nl cmlhbC1wcm9jZXNzLWNvbmZpZ3VyZX0gZm9yIGEgbGlzdCBvZiBrZXlzLgorIAorIElmIEB2YXJ7 a2V5fSBpcyBhIGtleXdvcmQsIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSB2YWx1ZSBjb3JyZXNw b25kaW5nCisgdG8gdGhhdCBrZXl3b3JkLgorIEBlbmQgZGVmdW4KKyAKICBAZGVmdW4gcHJvY2Vz cy1pZCBwcm9jZXNzCiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBAYWNyb255bXtQSUR9IG9m IEB2YXJ7cHJvY2Vzc30uICBUaGlzIGlzIGFuCiAgaW50ZWdlciB0aGF0IGRpc3Rpbmd1aXNoZXMg dGhlIHByb2Nlc3MgQHZhcntwcm9jZXNzfSBmcm9tIGFsbCBvdGhlcgoqKioqKioqKioqKioqKiog Rm9yIGEgbmV0d29yayBjb25uZWN0aW9uLCBAY29kZXtwcm9jZXNzLQoqKiogNzQyLDc0NyAqKioq Ci0tLSA3ODYsNzk3IC0tLS0KICBjbG9zZWQgdGhlIGNvbm5lY3Rpb24sIG9yIEVtYWNzIGRpZCBA Y29kZXtkZWxldGUtcHJvY2Vzc30uCiAgQGVuZCBkZWZ1bgogIAorIEBkZWZ1biBwcm9jZXNzLXR5 cGUgcHJvY2VzcworIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgc3ltYm9sIEBjb2Rle25ldHdv cmt9IGZvciBhIG5ldHdvcmsKKyBjb25uZWN0aW9uIG9yIHNlcnZlciwgQGNvZGV7c2VyaWFsfSBm b3IgYSBzZXJpYWwgcG9ydCBjb25uZWN0aW9uLCBvcgorIEBjb2Rle3JlYWx9IGZvciBhIHJlYWwg c3VicHJvY2Vzcy4KKyBAZW5kIGRlZnVuCisgCiAgQGRlZnVuIHByb2Nlc3MtZXhpdC1zdGF0dXMg cHJvY2VzcwogIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgZXhpdCBzdGF0dXMgb2YgQHZhcntw cm9jZXNzfSBvciB0aGUgc2lnbmFsCiAgbnVtYmVyIHRoYXQga2lsbGVkIGl0LiAgKFVzZSB0aGUg cmVzdWx0IG9mIEBjb2Rle3Byb2Nlc3Mtc3RhdHVzfSB0bwoqKioqKioqKioqKioqKiogc2VydmVy IHByb2Nlc3MsIG9yIEBjb2Rlezp0eXBlICdkYXRhZ3JhbQoqKiogMTU5MywxNjAzICoqKioKICBj b25uZWN0aW9uLiAgQHhyZWZ7TG93LUxldmVsIE5ldHdvcmt9LCBmb3IgZGV0YWlscy4gIFlvdSBj YW4gYWxzbyB1c2UKICB0aGUgQGNvZGV7b3Blbi1uZXR3b3JrLXN0cmVhbX0gZnVuY3Rpb24gZGVz Y3JpYmVkIGJlbG93LgogIAohICAgWW91IGNhbiBkaXN0aW5ndWlzaCBwcm9jZXNzIG9iamVjdHMg cmVwcmVzZW50aW5nIG5ldHdvcmsgY29ubmVjdGlvbnMKISBhbmQgc2VydmVycyBmcm9tIHRob3Nl IHJlcHJlc2VudGluZyBzdWJwcm9jZXNzZXMgd2l0aCB0aGUKISBAY29kZXtwcm9jZXNzLXN0YXR1 c30gZnVuY3Rpb24uICBUaGUgcG9zc2libGUgc3RhdHVzIHZhbHVlcyBmb3IKISBuZXR3b3JrIGNv bm5lY3Rpb25zIGFyZSBAY29kZXtvcGVufSwgQGNvZGV7Y2xvc2VkfSwgQGNvZGV7Y29ubmVjdH0s CiEgYW5kIEBjb2Rle2ZhaWxlZH0uICBGb3IgYSBuZXR3b3JrIHNlcnZlciwgdGhlIHN0YXR1cyBp cyBhbHdheXMKICBAY29kZXtsaXN0ZW59LiAgTm9uZSBvZiB0aG9zZSB2YWx1ZXMgaXMgcG9zc2li bGUgZm9yIGEgcmVhbAogIHN1YnByb2Nlc3MuICBAeHJlZntQcm9jZXNzIEluZm9ybWF0aW9ufS4K ICAKLS0tIDE2NDMsMTY1NiAtLS0tCiAgY29ubmVjdGlvbi4gIEB4cmVme0xvdy1MZXZlbCBOZXR3 b3JrfSwgZm9yIGRldGFpbHMuICBZb3UgY2FuIGFsc28gdXNlCiAgdGhlIEBjb2Rle29wZW4tbmV0 d29yay1zdHJlYW19IGZ1bmN0aW9uIGRlc2NyaWJlZCBiZWxvdy4KICAKISAgIFRvIGRpc3Rpbmd1 aXNoIHRoZSBkaWZmZXJlbnQgdHlwZXMgb2YgcHJvY2Vzc2VzLCB0aGUKISBAY29kZXtwcm9jZXNz LXR5cGV9IGZ1bmN0aW9uIHJldHVybnMgdGhlIHN5bWJvbCBAY29kZXtuZXR3b3JrfSBmb3IgYQoh IG5ldHdvcmsgY29ubmVjdGlvbiBvciBzZXJ2ZXIsIEBjb2Rle3NlcmlhbH0gZm9yIGEgc2VyaWFs IHBvcnQKISBjb25uZWN0aW9uLCBvciBAY29kZXtyZWFsfSBmb3IgYSByZWFsIHN1YnByb2Nlc3Mu CiEgCiEgICBUaGUgQGNvZGV7cHJvY2Vzcy1zdGF0dXN9IGZ1bmN0aW9uIHJldHVybnMgQGNvZGV7 b3Blbn0sCiEgQGNvZGV7Y2xvc2VkfSwgQGNvZGV7Y29ubmVjdH0sIGFuZCBAY29kZXtmYWlsZWR9 IGZvciBuZXR3b3JrCiEgY29ubmVjdGlvbnMuICBGb3IgYSBuZXR3b3JrIHNlcnZlciwgdGhlIHN0 YXR1cyBpcyBhbHdheXMKICBAY29kZXtsaXN0ZW59LiAgTm9uZSBvZiB0aG9zZSB2YWx1ZXMgaXMg cG9zc2libGUgZm9yIGEgcmVhbAogIHN1YnByb2Nlc3MuICBAeHJlZntQcm9jZXNzIEluZm9ybWF0 aW9ufS4KICAKKioqKioqKioqKioqKioqIFRoZSBhcmd1bWVudHMgQHZhcntob3N0fSBhbmQgQHZh cntzZXJ2aWMKKioqIDE2MzEsMTY3MiAqKioqCiAgYSBkZWZpbmVkIG5ldHdvcmsgc2VydmljZSAo YSBzdHJpbmcpIG9yIGEgcG9ydCBudW1iZXIgKGFuIGludGVnZXIpLgogIEBlbmQgZGVmdW4KICAK LSBAZGVmdW4gcHJvY2Vzcy1jb250YWN0IHByb2Nlc3MgJm9wdGlvbmFsIGtleQotIFRoaXMgZnVu Y3Rpb24gcmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCBob3cgYSBuZXR3b3JrIHByb2Nlc3Mgd2Fz IHNldAotIHVwLiAgRm9yIGEgY29ubmVjdGlvbiwgd2hlbiBAdmFye2tleX0gaXMgQGNvZGV7bmls fSwgaXQgcmV0dXJucwotIEBjb2RleyhAdmFye2hvc3RuYW1lfSBAdmFye3NlcnZpY2V9KX0gd2hp Y2ggc3BlY2lmaWVzIHdoYXQgeW91Ci0gY29ubmVjdGVkIHRvLgotIAotIElmIEB2YXJ7a2V5fSBp cyBAY29kZXt0fSwgdGhlIHZhbHVlIGlzIHRoZSBjb21wbGV0ZSBzdGF0dXMgaW5mb3JtYXRpb24K LSBmb3IgdGhlIGNvbm5lY3Rpb24gb3Igc2VydmVyOyB0aGF0IGlzLCB0aGUgbGlzdCBvZiBrZXl3 b3JkcyBhbmQgdmFsdWVzCi0gc3BlY2lmaWVkIGluIEBjb2Rle21ha2UtbmV0d29yay1wcm9jZXNz fSwgZXhjZXB0IHRoYXQgc29tZSBvZiB0aGUKLSB2YWx1ZXMgcmVwcmVzZW50IHRoZSBjdXJyZW50 IHN0YXR1cyBpbnN0ZWFkIG9mIHdoYXQgeW91IHNwZWNpZmllZDoKLSAKLSBAdGFibGUgQGNvZGUK LSBAaXRlbSA6YnVmZmVyCi0gVGhlIGFzc29jaWF0ZWQgdmFsdWUgaXMgdGhlIHByb2Nlc3MgYnVm ZmVyLgotIEBpdGVtIDpmaWx0ZXIKLSBUaGUgYXNzb2NpYXRlZCB2YWx1ZSBpcyB0aGUgcHJvY2Vz cyBmaWx0ZXIgZnVuY3Rpb24uCi0gQGl0ZW0gOnNlbnRpbmVsCi0gVGhlIGFzc29jaWF0ZWQgdmFs dWUgaXMgdGhlIHByb2Nlc3Mgc2VudGluZWwgZnVuY3Rpb24uCi0gQGl0ZW0gOnJlbW90ZQotIElu IGEgY29ubmVjdGlvbiwgdGhlIGFkZHJlc3MgaW4gaW50ZXJuYWwgZm9ybWF0IG9mIHRoZSByZW1v dGUgcGVlci4KLSBAaXRlbSA6bG9jYWwKLSBUaGUgbG9jYWwgYWRkcmVzcywgaW4gaW50ZXJuYWwg Zm9ybWF0LgotIEBpdGVtIDpzZXJ2aWNlCi0gSW4gYSBzZXJ2ZXIsIGlmIHlvdSBzcGVjaWZpZWQg QGNvZGV7dH0gZm9yIEB2YXJ7c2VydmljZX0sCi0gdGhpcyB2YWx1ZSBpcyB0aGUgYWN0dWFsIHBv cnQgbnVtYmVyLgotIEBlbmQgdGFibGUKLSAKLSBAY29kZXs6bG9jYWx9IGFuZCBAY29kZXs6cmVt b3RlfSBhcmUgaW5jbHVkZWQgZXZlbiBpZiB0aGV5IHdlcmUgbm90Ci0gc3BlY2lmaWVkIGV4cGxp Y2l0bHkgaW4gQGNvZGV7bWFrZS1uZXR3b3JrLXByb2Nlc3N9LgotIAotIElmIEB2YXJ7a2V5fSBp cyBhIGtleXdvcmQsIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSB2YWx1ZSBjb3JyZXNwb25kaW5n Ci0gdG8gdGhhdCBrZXl3b3JkLgotIAotIEZvciBhbiBvcmRpbmFyeSBjaGlsZCBwcm9jZXNzLCB0 aGlzIGZ1bmN0aW9uIGFsd2F5cyByZXR1cm5zIEBjb2Rle3R9LgotIEBlbmQgZGVmdW4KLSAKICBA bm9kZSBOZXR3b3JrIFNlcnZlcnMKICBAc2VjdGlvbiBOZXR3b3JrIFNlcnZlcnMKICBAY2luZGV4 IG5ldHdvcmsgc2VydmVycwotLS0gMTY4NCwxNjg5IC0tLS0KKioqKioqKioqKioqKioqIElmIHRo ZSB2ZWN0b3IgZG9lcyBub3QgaW5jbHVkZSB0aGUgcG9ydCAKKioqIDIwOTksMjEwNCAqKioqCi0t LSAyMTE2LDIzMDcgLS0tLQogIEBjb2RlezpAdmFye3B9fSBzdWZmaXguCiAgQGVuZCBkZWZ1bgog IAorIEBub2RlIFNlcmlhbCBQb3J0cworIEBzZWN0aW9uIENvbW11bmljYXRpbmcgd2l0aCBTZXJp YWwgUG9ydHMKKyBAY2luZGV4IEBmaWxley9kZXYvdHR5fQorIEBjaW5kZXggQGZpbGV7Q09NMX0K KyAKKyAgIEVtYWNzIGNhbiBjb21tdW5pY2F0ZSB3aXRoIHNlcmlhbCBwb3J0cy4gIEZvciBpbnRl cmFjdGl2ZSB1c2UsCisgQGtiZHtNLXggc2VyaWFsLXRlcm19IG9wZW5zIGEgdGVybWluYWwgd2lu ZG93LiAgSW4gYSBMaXNwIHByb2dyYW0sCisgQGNvZGV7bWFrZS1zZXJpYWwtcHJvY2Vzc30gY3Jl YXRlcyBhIHByb2Nlc3Mgb2JqZWN0LgorIAorICAgVGhlIHNlcmlhbCBwb3J0IGNhbiBiZSBjb25m aWd1cmVkIGF0IHJ1bi10aW1lLCB3aXRob3V0IGhhdmluZyB0bworIGNsb3NlIGFuZCByZS1vcGVu IGl0LiAgVGhlIGZ1bmN0aW9uIEBjb2Rle3NlcmlhbC1wcm9jZXNzLWNvbmZpZ3VyZX0KKyBsZXRz IHlvdSBjaGFuZ2UgdGhlIHNwZWVkLCBieXRlc2l6ZSwgYW5kIG90aGVyIHBhcmFtZXRlcnMuICBJ biBhCisgdGVybWluYWwgd2luZG93IGNyZWF0ZWQgYnkgQGNvZGV7c2VyaWFsLXRlcm19LCB5b3Ug Y2FuIGNsaWNrIG9uIHRoZQorIG1vZGUgbGluZSBmb3IgY29uZmlndXJhdGlvbi4KKyAKKyAgIEEg c2VyaWFsIGNvbm5lY3Rpb24gaXMgcmVwcmVzZW50ZWQgYnkgYSBwcm9jZXNzIG9iamVjdCB3aGlj aCBjYW4gYmUKKyB1c2VkIHNpbWlsYXIgdG8gYSBzdWJwcm9jZXNzIG9yIG5ldHdvcmsgcHJvY2Vz cy4gIFlvdSBjYW4gc2VuZCBhbmQKKyByZWNlaXZlIGRhdGEgYW5kIGNvbmZpZ3VyZSB0aGUgc2Vy aWFsIHBvcnQuICBBIHNlcmlhbCBwcm9jZXNzIG9iamVjdAorIGhhcyBubyBwcm9jZXNzIElELCBh bmQgeW91IGNhbid0IHNlbmQgc2lnbmFscyB0byBpdC4KKyBAY29kZXtkZWxldGUtcHJvY2Vzc30g b24gdGhlIHByb2Nlc3Mgb2JqZWN0IG9yIEBjb2Rle2tpbGwtYnVmZmVyfSBvbgorIHRoZSBwcm9j ZXNzIGJ1ZmZlciBjbG9zZSB0aGUgY29ubmVjdGlvbiwgYnV0IHRoaXMgZG9lcyBub3QgYWZmZWN0 IHRoZQorIGRldmljZSBjb25uZWN0ZWQgdG8gdGhlIHNlcmlhbCBwb3J0LgorIAorICAgVGhlIGZ1 bmN0aW9uIEBjb2Rle3Byb2Nlc3MtdHlwZX0gcmV0dXJucyB0aGUgc3ltYm9sIEBjb2Rle3Nlcmlh bH0KKyBmb3IgYSBwcm9jZXNzIG9iamVjdCByZXByZXNlbnRpbmcgYSBzZXJpYWwgcG9ydC4KKyAK KyAgIFNlcmlhbCBwb3J0cyBhcmUgYXZhaWxhYmxlIG9uIEdOVS9MaW51eCwgVW5peCwgYW5kIFdp bmRvd3Mgc3lzdGVtcy4KKyAKKyBAZGVmdW4gc2VyaWFsLXRlcm0gcG9ydCBzcGVlZAorIFN0YXJ0 IGEgdGVybWluYWwtZW11bGF0b3IgZm9yIGEgc2VyaWFsIHBvcnQgaW4gYSBuZXcgYnVmZmVyLgor IEB2YXJ7cG9ydH0gaXMgdGhlIHBhdGggb3IgbmFtZSBvZiB0aGUgc2VyaWFsIHBvcnQuICBGb3Ig ZXhhbXBsZSwgdGhpcworIGNvdWxkIGJlIEBmaWxley9kZXYvdHR5UzB9IG9uIFVuaXguICBPbiBX aW5kb3dzLCB0aGlzIGNvdWxkIGJlCisgQGZpbGV7Q09NMX0sIG9yIEBmaWxle1xcLlxDT00xMH0g KGRvdWJsZSB0aGUgYmFja3NsYXNoZXMgaW4gc3RyaW5ncykuCisgCisgQHZhcntzcGVlZH0gaXMg dGhlIHNwZWVkIG9mIHRoZSBzZXJpYWwgcG9ydCBpbiBiaXRzIHBlciBzZWNvbmQuICA5NjAwCisg aXMgYSBjb21tb24gdmFsdWUuICBUaGUgYnVmZmVyIGlzIGluIFRlcm0gbW9kZTsgc2VlIEBjb2Rl e3Rlcm0tbW9kZX0KKyBmb3IgdGhlIGNvbW1hbmRzIHRvIHVzZSBpbiB0aGF0IGJ1ZmZlci4gIFlv dSBjYW4gY2hhbmdlIHRoZSBzcGVlZCBhbmQKKyB0aGUgY29uZmlndXJhdGlvbiBpbiB0aGUgbW9k ZSBsaW5lIG1lbnUuICBAZW5kIGRlZnVuCisgCisgQGRlZnVuIG1ha2Utc2VyaWFsLXByb2Nlc3Mg JnJlc3QgYXJncworIEBjb2Rle21ha2Utc2VyaWFsLXByb2Nlc3N9IGNyZWF0ZXMgYSBwcm9jZXNz IGFuZCBhIGJ1ZmZlci4gIEFyZ3VtZW50cworIGFyZSBzcGVjaWZpZWQgYXMga2V5d29yZC9hcmd1 bWVudCBwYWlycy4gIFRoZSBmb2xsb3dpbmcgYXJndW1lbnRzIGFyZQorIGRlZmluZWQ6CisgCisg QHRhYmxlIEBjb2RlCisgQGl0ZW0gOnBvcnQgcG9ydAorIEB2YXJ7cG9ydH0gKG1hbmRhdG9yeSkg aXMgdGhlIHBhdGggb3IgbmFtZSBvZiB0aGUgc2VyaWFsIHBvcnQuCisgRm9yIGV4YW1wbGUsIHRo aXMgY291bGQgYmUgQGZpbGV7L2Rldi90dHlTMH0gb24gVW5peC4gIE9uIFdpbmRvd3MsCisgdGhp cyBjb3VsZCBiZSBAZmlsZXtDT00xfSwgb3IgQGZpbGV7XFwuXENPTTEwfSBmb3IgcG9ydHMgaGln aGVyIHRoYW4KKyBAZmlsZXtDT005fSAoZG91YmxlIHRoZSBiYWNrc2xhc2hlcyBpbiBzdHJpbmdz KS4KKyAKKyBAaXRlbSA6c3BlZWQgc3BlZWQKKyBAdmFye3NwZWVkfSAobWFuZGF0b3J5KSBpcyBo YW5kbGVkIGJ5IEBjb2Rle3NlcmlhbC1wcm9jZXNzLWNvbmZpZ3VyZX0sCisgd2hpY2ggaXMgY2Fs bGVkIGJ5IEBjb2Rle21ha2Utc2VyaWFsLXByb2Nlc3N9LgorIAorIEBpdGVtIDpuYW1lIG5hbWUK KyBAdmFye25hbWV9IGlzIHRoZSBuYW1lIG9mIHRoZSBwcm9jZXNzLiAgSWYgQHZhcntuYW1lfSBp cyBub3QgZ2l2ZW4sIHRoZQorIHZhbHVlIG9mIEB2YXJ7cG9ydH0gaXMgdXNlZC4KKyAKKyBAaXRl bSA6YnVmZmVyIGJ1ZmZlcgorIEB2YXJ7YnVmZmVyfSBpcyB0aGUgYnVmZmVyIChvciBidWZmZXIt bmFtZSkgdG8gYXNzb2NpYXRlIHdpdGggdGhlCisgcHJvY2Vzcy4gIFByb2Nlc3Mgb3V0cHV0IGdv ZXMgYXQgdGhlIGVuZCBvZiB0aGF0IGJ1ZmZlciwgdW5sZXNzIHlvdQorIHNwZWNpZnkgYW4gb3V0 cHV0IHN0cmVhbSBvciBmaWx0ZXIgZnVuY3Rpb24gdG8gaGFuZGxlIHRoZSBvdXRwdXQuICBJZgor IEB2YXJ7YnVmZmVyfSBpcyBub3QgZ2l2ZW4sIHRoZSB2YWx1ZSBvZiBAdmFye25hbWV9IGlzIHVz ZWQuCisgCisgQGl0ZW0gOmNvZGluZyBjb2RpbmcKKyBJZiBAdmFye2NvZGluZ30gaXMgYSBzeW1i b2wsIGl0IHNwZWNpZmllcyB0aGUgY29kaW5nIHN5c3RlbSB1c2VkIGZvcgorIGJvdGggcmVhZGlu ZyBhbmQgd3JpdGluZyBmb3IgdGhpcyBwcm9jZXNzLiAgSWYgQHZhcntjb2Rpbmd9IGlzIGEgY29u cworIEBjb2RleyhkZWNvZGluZyAuIGVuY29kaW5nKX0sIEB2YXJ7ZGVjb2Rpbmd9IGlzIHVzZWQg Zm9yIHJlYWRpbmcsIGFuZAorIEB2YXJ7ZW5jb2Rpbmd9IGlzIHVzZWQgZm9yIHdyaXRpbmcuCisg CisgQGl0ZW0gOm5vcXVlcnkgYm9vbAorIFdoZW4gZXhpdGluZyBFbWFjcywgcXVlcnkgdGhlIHVz ZXIgaWYgQHZhcntib29sfSBpcyBAY29kZXtuaWx9IGFuZCB0aGUKKyBwcm9jZXNzIGlzIHJ1bm5p bmcuICBJZiBAdmFye2Jvb2x9IGlzIG5vdCBnaXZlbiwgcXVlcnkgYmVmb3JlIGV4aXRpbmcuCisg CisgQGl0ZW0gOnN0b3AgYm9vbAorIFN0YXJ0IHByb2Nlc3MgaW4gdGhlIEBjb2Rle3N0b3BwZWR9 IHN0YXRlIGlmIEB2YXJ7Ym9vbH0gaXMKKyBub24tQGNvZGV7bmlsfS4gIEluIHRoZSBzdG9wcGVk IHN0YXRlLCBhIHNlcmlhbCBwcm9jZXNzIGRvZXMgbm90CisgYWNjZXB0IGluY29taW5nIGRhdGEs IGJ1dCB5b3UgY2FuIHNlbmQgb3V0Z29pbmcgZGF0YS4gIFRoZSBzdG9wcGVkCisgc3RhdGUgaXMg Y2xlYXJlZCBieSBAY29kZXtjb250aW51ZS1wcm9jZXNzfSBhbmQgc2V0IGJ5CisgQGNvZGV7c3Rv cC1wcm9jZXNzfS4KKyAKKyBAaXRlbSA6ZmlsdGVyIGZpbHRlcgorIEluc3RhbGwgQHZhcntmaWx0 ZXJ9IGFzIHRoZSBwcm9jZXNzIGZpbHRlci4KKyAKKyBAaXRlbSA6c2VudGluZWwgc2VudGluZWwK KyBJbnN0YWxsIEB2YXJ7c2VudGluZWx9IGFzIHRoZSBwcm9jZXNzIHNlbnRpbmVsLgorIAorIEBp dGVtIDpwbGlzdCBwbGlzdAorIEluc3RhbGwgQHZhcntwbGlzdH0gYXMgdGhlIGluaXRpYWwgcGxp c3Qgb2YgdGhlIHByb2Nlc3MuCisgCisgQGl0ZW0gOnNwZWVkCisgQGl0ZW14IDpieXRlc2l6ZQor IEBpdGVteCA6cGFyaXR5CisgQGl0ZW14IDpzdG9wYml0cworIEBpdGVteCA6Zmxvd2NvbnRyb2wK KyBUaGVzZSBhcmd1bWVudHMgYXJlIGhhbmRsZWQgYnkgQGNvZGV7c2VyaWFsLXByb2Nlc3MtY29u ZmlndXJlfSwgd2hpY2gKKyBpcyBjYWxsZWQgYnkgQGNvZGV7bWFrZS1zZXJpYWwtcHJvY2Vzc30u CisgQGVuZCB0YWJsZQorIAorIFRoZSBvcmlnaW5hbCBhcmd1bWVudCBsaXN0LCBwb3NzaWJseSBt b2RpZmllZCBieSBsYXRlciBjb25maWd1cmF0aW9uLAorIGlzIGF2YWlsYWJsZSB2aWEgdGhlIGZ1 bmN0aW9uIEBjb2Rle3Byb2Nlc3MtY29udGFjdH0uCisgCisgRXhhbXBsZXM6CisgCisgQGV4YW1w bGUKKyAobWFrZS1zZXJpYWwtcHJvY2VzcyA6cG9ydCAiL2Rldi90dHlTMCIgOnNwZWVkIDk2MDAp CisgCisgKG1ha2Utc2VyaWFsLXByb2Nlc3MgOnBvcnQgIkNPTTEiIDpzcGVlZCAxMTUyMDAgOnN0 b3BiaXRzIDIpCisgCisgKG1ha2Utc2VyaWFsLXByb2Nlc3MgOnBvcnQgIlxcXFwuXFxDT00xMyIg OnNwZWVkIDEyMDAgOmJ5dGVzaXplIDcgOnBhcml0eSAnb2RkKQorIAorIChtYWtlLXNlcmlhbC1w cm9jZXNzIDpwb3J0ICIvZGV2L3R0eS5CbHVlQ29uc29sZS1TUFAtMSIgOnNwZWVkIG5pbCkKKyBA ZW5kIGV4YW1wbGUKKyBAZW5kIGRlZnVuCisgCisgQGRlZnVuIHNlcmlhbC1wcm9jZXNzLWNvbmZp Z3VyZSAmcmVzdCBhcmdzCisgQGNpbmRleCBiYXVkCisgQGNpbmRleCBieXRlc2l6ZQorIEBjaW5k ZXggcGFyaXR5CisgQGNpbmRleCBzdG9wYml0cworIEBjaW5kZXggZmxvd2NvbnRyb2wKKyAKKyBD b25maWd1cmUgYSBzZXJpYWwgcG9ydC4gIEFyZ3VtZW50cyBhcmUgc3BlY2lmaWVkIGFzIGtleXdv cmQvYXJndW1lbnQKKyBwYWlycy4gIEF0dHJpYnV0ZXMgdGhhdCBhcmUgbm90IGdpdmVuIGFyZSBy ZS1pbml0aWFsaXplZCBmcm9tIHRoZQorIHByb2Nlc3MncyBjdXJyZW50IGNvbmZpZ3VyYXRpb24g KGF2YWlsYWJsZSB2aWEgdGhlIGZ1bmN0aW9uCisgQGNvZGV7cHJvY2Vzcy1jb250YWN0fSkgb3Ig c2V0IHRvIHJlYXNvbmFibGUgZGVmYXVsdCB2YWx1ZXMuICBUaGUKKyBmb2xsb3dpbmcgYXJndW1l bnRzIGFyZSBkZWZpbmVkOgorIAorIEB0YWJsZSBAY29kZQorIEBpdGVtIDpwcm9jZXNzIHByb2Nl c3MKKyBAaXRlbXggOm5hbWUgbmFtZQorIEBpdGVteCA6YnVmZmVyIGJ1ZmZlcgorIEBpdGVteCA6 cG9ydCBwb3J0CisgQW55IG9mIHRoZXNlIGFyZ3VtZW50cyBjYW4gYmUgZ2l2ZW4gdG8gaWRlbnRp ZnkgdGhlIHByb2Nlc3MgdGhhdCBpcyB0bworIGJlIGNvbmZpZ3VyZWQuICBJZiBub25lIG9mIHRo ZXNlIGFyZ3VtZW50cyBpcyBnaXZlbiwgdGhlIGN1cnJlbnQKKyBidWZmZXIncyBwcm9jZXNzIGlz IHVzZWQuCisgCisgQGl0ZW0gOnNwZWVkIEB2YXJ7c3BlZWR9CisgQHZhcntzcGVlZH0gaXMgdGhl IHNwZWVkIG9mIHRoZSBzZXJpYWwgcG9ydCBpbiBiaXRzIHBlciBzZWNvbmQsIGFsc28KKyBjYWxs ZWQgYmF1ZCByYXRlLiAgQW55IHZhbHVlIGNhbiBiZSBnaXZlbiBmb3IgQHZhcntzcGVlZH0sIGJ1 dCBtb3N0Cisgc2VyaWFsIHBvcnRzIHdvcmsgb25seSBhdCBhIGZldyBkZWZpbmVkIHZhbHVlcyBi ZXR3ZWVuIDEyMDAgYW5kCisgMTE1MjAwLCB3aXRoIDk2MDAgYmVpbmcgdGhlIG1vc3QgY29tbW9u IHZhbHVlLiAgSWYgQHZhcntzcGVlZH0gaXMKKyBAY29kZXtuaWx9LCB0aGUgc2VyaWFsIHBvcnQg aXMgbm90IGNvbmZpZ3VyZWQgYW55IGZ1cnRoZXIsIGkuZS4sIGFsbAorIG90aGVyIGFyZ3VtZW50 cyBhcmUgaWdub3JlZC4gIFRoaXMgbWF5IGJlIHVzZWZ1bCBmb3Igc3BlY2lhbCBzZXJpYWwKKyBw b3J0cyBzdWNoIGFzIEJsdWV0b290aC10by1zZXJpYWwgY29udmVydGVycyB3aGljaCBjYW4gb25s eSBiZQorIGNvbmZpZ3VyZWQgdGhyb3VnaCBBVCBjb21tYW5kcy4gIEEgdmFsdWUgb2YgQGNvZGV7 bmlsfSBmb3IgQHZhcntzcGVlZH0KKyBjYW4gYmUgdXNlZCBvbmx5IHdoZW4gcGFzc2VkIHRocm91 Z2ggQGNvZGV7bWFrZS1zZXJpYWwtcHJvY2Vzc30gb3IKKyBAY29kZXtzZXJpYWwtdGVybX0uCisg CisgQGl0ZW0gOmJ5dGVzaXplIEB2YXJ7Ynl0ZXNpemV9CisgQHZhcntieXRlc2l6ZX0gaXMgdGhl IG51bWJlciBvZiBiaXRzIHBlciBieXRlLCB3aGljaCBjYW4gYmUgNyBvciA4LgorIElmIEB2YXJ7 Ynl0ZXNpemV9IGlzIG5vdCBnaXZlbiBvciBAY29kZXtuaWx9LCBhIHZhbHVlIG9mIDggaXMgdXNl ZC4KKyAKKyBAaXRlbSA6cGFyaXR5IEB2YXJ7cGFyaXR5fQorIEB2YXJ7cGFyaXR5fSBjYW4gYmUg QGNvZGV7bmlsfSAoZG9uJ3QgdXNlIHBhcml0eSksIHRoZSBzeW1ib2wKKyBAY29kZXtvZGR9ICh1 c2Ugb2RkIHBhcml0eSksIG9yIHRoZSBzeW1ib2wgQGNvZGV7ZXZlbn0gKHVzZSBldmVuCisgcGFy aXR5KS4gIElmIEB2YXJ7cGFyaXR5fSBpcyBub3QgZ2l2ZW4sIG5vIHBhcml0eSBpcyB1c2VkLgor IAorIEBpdGVtIDpzdG9wYml0cyBAdmFye3N0b3BiaXRzfQorIEB2YXJ7c3RvcGJpdHN9IGlzIHRo ZSBudW1iZXIgb2Ygc3RvcGJpdHMgdXNlZCB0byB0ZXJtaW5hdGUgYSBieXRlCisgdHJhbnNtaXNz aW9uLiAgQHZhcntzdG9wYml0c30gY2FuIGJlIDEgb3IgMi4gIElmIEB2YXJ7c3RvcGJpdHN9IGlz IG5vdAorIGdpdmVuIG9yIEBjb2Rle25pbH0sIDEgc3RvcGJpdCBpcyB1c2VkLgorIAorIEBpdGVt IDpmbG93Y29udHJvbCBAdmFye2Zsb3djb250cm9sfQorIEB2YXJ7Zmxvd2NvbnRyb2x9IGRldGVy bWluZXMgdGhlIHR5cGUgb2YgZmxvd2NvbnRyb2wgdG8gYmUgdXNlZCwgd2hpY2gKKyBpcyBlaXRo ZXIgQGNvZGV7bmlsfSAoZG9uJ3QgdXNlIGZsb3djb250cm9sKSwgdGhlIHN5bWJvbCBAY29kZXto d30KKyAodXNlIFJUUy9DVFMgaGFyZHdhcmUgZmxvd2NvbnRyb2wpLCBvciB0aGUgc3ltYm9sIEBj b2Rle3N3fSAodXNlCisgWE9OL1hPRkYgc29mdHdhcmUgZmxvd2NvbnRyb2wpLiAgSWYgQHZhcntm bG93Y29udHJvbH0gaXMgbm90IGdpdmVuLCBubworIGZsb3djb250cm9sIGlzIHVzZWQuCisgQGVu ZCB0YWJsZQorIAorIEBjb2Rle3NlcmlhbC1wcm9jZXNzLWNvbmZpZ3VyZX0gaXMgY2FsbGVkIGJ5 IEBjb2Rle21ha2Utc2VyaWFsLXByb2Nlc3N9IGZvciB0aGUKKyBpbml0aWFsIGNvbmZpZ3VyYXRp b24gb2YgdGhlIHNlcmlhbCBwb3J0LgorIAorIEV4YW1wbGVzOgorIAorIEBleGFtcGxlCisgKHNl cmlhbC1wcm9jZXNzLWNvbmZpZ3VyZSA6cHJvY2VzcyAiL2Rldi90dHlTMCIgOnNwZWVkIDEyMDAp CisgCisgKHNlcmlhbC1wcm9jZXNzLWNvbmZpZ3VyZSA6YnVmZmVyICJDT00xIiA6c3RvcGJpdHMg MSA6cGFyaXR5ICdvZGQgOmZsb3djb250cm9sICdodykKKyAKKyAoc2VyaWFsLXByb2Nlc3MtY29u ZmlndXJlIDpwb3J0ICJcXFxcLlxcQ09NMTMiIDpieXRlc2l6ZSA3KQorIEBlbmQgZXhhbXBsZQor IEBlbmQgZGVmdW4KKyAKICBAbm9kZSBCeXRlIFBhY2tpbmcKICBAc2VjdGlvbiBQYWNraW5nIGFu ZCBVbnBhY2tpbmcgQnl0ZSBBcnJheXMKICBAY2luZGV4IGJ5dGUgcGFja2luZyBhbmQgdW5wYWNr aW5nCkluZGV4OiBldGMvQVVUSE9SUwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvc291cmNlcy9lbWFj cy9lbWFjcy9ldGMvQVVUSE9SUyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42CmRpZmYgLWMgLXAg LXIxLjYgQVVUSE9SUwoqKiogZXRjL0FVVEhPUlMJNSBBcHIgMjAwOCAyMzowMToyMSAtMDAwMAkx LjYKLS0tIGV0Yy9BVVRIT1JTCTEyIEp1biAyMDA4IDE5OjUzOjM3IC0wMDAwCioqKioqKioqKioq KioqKiBhbmQgY2hhbmdlZCB4dGVybS5lbCB0ZXJtLmVsIGhpZGVzaG93LmVsCioqKiA0MzUsNDQw ICoqKioKLS0tIDQzNSw0NDQgLS0tLQogIAogIERhbmllbCBCcm9ja21hbjogY2hhbmdlZCBjdXMt c3RhcnQuZWwgZm9ybWF0LXNwZWMuZWwgaWJ1ZmZlci5lbCByY2lyYy5lbAogIAorIERhbmllbCBF bmdlbGVyOiBDaGFuZ2VkIHByb2Nlc3MuYyBwcm9jZXNzLmggdzMyLmMgdzMyLmggc3lzZGVwLmMK KyAgIHRlcm0uZWwgZW1hY3MudGV4aSBtaXNjLnRleGkgZWxpc3AudGV4aSBpbnRlcm5hbHMudGV4 aQorICAgcHJvY2Vzc2VzLnRleGkKKyAKICBEYW5pZWwgTGFsaWJlcnRlOiB3cm90ZSBjbC1zcGVj cy5lbCBjdXN0LXByaW50LmVsIGVkZWJ1Zy5lbCBoaWRlaWYuZWwKICAgIGlzZWFyY2guZWwKICBh bmQgY2hhbmdlZCBtbGNvbnZlcnQuZWwgZXZhbC1yZWdpb24uZWwKSW5kZXg6IGV0Yy9ORVdTCj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KUkNTIGZpbGU6IC9zb3VyY2VzL2VtYWNzL2VtYWNzL2V0Yy9ORVdTLHYKcmV0cmll dmluZyByZXZpc2lvbiAxLjE3NjMKZGlmZiAtYyAtcCAtcjEuMTc2MyBORVdTCioqKiBldGMvTkVX UwkxMSBKdW4gMjAwOCAxODowNjo1MyAtMDAwMAkxLjE3NjMKLS0tIGV0Yy9ORVdTCTEyIEp1biAy MDA4IDE5OjUzOjM5IC0wMDAwCioqKioqKioqKioqKioqKiBkZWZhdWx0IHRvb2xraXQsIGJ1dCB5 b3UgY2FuIHVzZSAtLXdpdGgtCioqKiA2NCw2OSAqKioqCi0tLSA2NCw3NSAtLS0tCiAgDAogICog Q2hhbmdlcyBpbiBFbWFjcyAyMy4xCiAgCisgKiogRW1hY3Mgbm93IHN1cHBvcnRzIHNlcmlhbCBw b3J0IGFjY2VzcyBvbiBHTlUvTGludXgsIFVuaXgsIGFuZAorIFdpbmRvd3MuIGBzZXJpYWwtdGVy bScgc3RhcnRzIGFuIGludGVyYWN0aXZlIHRlcm1pbmFsLAorIGBtYWtlLXNlcmlhbC1wcm9jZXNz JyBhbmQgYHNlcmlhbC1wcm9jZXNzLWNvbmZpZ3VyZScgcHJvdmlkZSBhIExpc3AKKyBpbnRlcmZh Y2UuIFRoZSBzZXJpYWwgcG9ydCBjYW4gYmUgY29uZmlndXJlZCBhdCBydW50aW1lIHdpdGggdGhl CisgbW9kZS1saW5lIG1vdXNlIG1lbnUuCisgCiAgKiogQXByb3BvcwogICoqKiBgYXByb3Bvcy1s aWJyYXJ5JyBkZXNjcmliZXMgdGhlIGVsZW1lbnRzIGRlZmluZWQgaW4gYSBnaXZlbiBsaWJyYXJ5 LgogICoqKiBTZXQgYGFwcm9wb3MtY29tcGFjdC1sYXlvdXQnIGlzIHlvdSB3YW50IGEgbW9yZSBj b21wYWN0IChidXQgd2lkZXIpIGxheW91dC4KSW5kZXg6IGxpc3AvQ2hhbmdlTG9nCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KUkNTIGZpbGU6IC9zb3VyY2VzL2VtYWNzL2VtYWNzL2xpc3AvQ2hhbmdlTG9nLHYKcmV0cmll dmluZyByZXZpc2lvbiAxLjEzOTU5CmRpZmYgLWMgLXAgLXIxLjEzOTU5IENoYW5nZUxvZwoqKiog bGlzcC9DaGFuZ2VMb2cJMTIgSnVuIDIwMDggMTc6Mjc6NDUgLTAwMDAJMS4xMzk1OQotLS0gbGlz cC9DaGFuZ2VMb2cJMTIgSnVuIDIwMDggMTk6NTM6NDkgLTAwMDAKKioqKioqKioqKioqKioqCioq KiAxLDMgKioqKgotLS0gMSwxOCAtLS0tCisgMjAwOC0wNi0xMiAgRGFuaWVsIEVuZ2VsZXIgIDxl bmdlbGVyQGdtYWlsLmNvbT4KKyAKKyAJVGhlc2UgY2hhbmdlcyBhZGQgc2VyaWFsIHBvcnQgYWNj ZXNzLgorIAorIAkqIHRlcm0uZWw6ICh0ZXJtLXVwZGF0ZS1tb2RlLWxpbmUpOiBNb2RpZmllZC4K KyAJKHNlcmlhbC1wb3J0LWlzLWZpbGUtcCwgc2VyaWFsLW5pY2Utc3BlZWQtaGlzdG9yeSkKKyAJ KHNlcmlhbC1uby1zcGVlZCwgc2VyaWFsLW1vZGUtbGluZS1zcGVlZC1tZW51KQorIAkoc2VyaWFs LW1vZGUtbGluZS1jb25maWctbWVudSk6IE5ldyB2YXJpYWJsZXMgYW5kIGNvbnN0YW50cy4KKyAJ KHNlcmlhbC1uYW1lLWhpc3RvcnksIHNlcmlhbC1zcGVlZC1oaXN0b3J5KQorIAkoc2VyaWFsLXN1 cHBvcnRlZC1vci1iYXJmLCBzZXJpYWwtcmVhZC1uYW1lLCBzZXJpYWwtcmVhZC1zcGVlZCkKKyAJ KHNlcmlhbC10ZXJtLCBzZXJpYWwtc3BlZWQsIHNlcmlhbC1tb2RlLWxpbmUtc3BlZWQtbWVudS0x KQorIAkoc2VyaWFsLW1vZGUtbGluZS1zcGVlZC1tZW51LCBzZXJpYWwtdXBkYXRlLXNwZWVkLW1l bnUpCisgCShzZXJpYWwtbW9kZS1saW5lLWNvbmZpZy1tZW51LTEsIHNlcmlhbC1tb2RlLWxpbmUt Y29uZmlnLW1lbnUpCisgCShzZXJpYWwtdXBkYXRlLWNvbmZpZy1tZW51KTogTmV3IGZ1bmN0aW9u cy4KKyAKICAyMDA4LTA2LTEyICBDaG9uZyBZaWRvbmcgIDxjeWRAc3R1cGlkY2hpY2tlbi5jb20+ CiAgCiAgCSogbG9uZ2xpbmVzLmVsIChsb25nbGluZXMtc2VhcmNoLWZvcndhcmQpCkluZGV4OiBs aXNwL3Rlcm0uZWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL3NvdXJjZXMvZW1hY3MvZW1hY3MvbGlz cC90ZXJtLmVsLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEwMwpkaWZmIC1jIC1wIC1yMS4xMDMg dGVybS5lbAoqKiogbGlzcC90ZXJtLmVsCTEyIEp1biAyMDA4IDAzOjU2OjE3IC0wMDAwCTEuMTAz Ci0tLSBsaXNwL3Rlcm0uZWwJMTIgSnVuIDIwMDggMTk6NTM6NTUgLTAwMDAKKioqKioqKioqKioq KioqIHlvdSB0eXBlIFxcW3Rlcm0tc2VuZC1pbnB1dF0gd2hpY2ggc2VuZHMKKioqIDEyNzcsMTI5 NCAqKioqCiAgICAgICh0ZXJtLXVwZGF0ZS1tb2RlLWxpbmUpKSkKICAKICAoZGVmdW4gdGVybS11 cGRhdGUtbW9kZS1saW5lICgpCiEgICAoc2V0cSBtb2RlLWxpbmUtcHJvY2VzcwohIAkoaWYgKHRl cm0taW4tY2hhci1tb2RlKQohIAkgICAgKGlmICh0ZXJtLXBhZ2VyLWVuYWJsZWQpICcoIjogY2hh ciBwYWdlICVzIikgJygiOiBjaGFyICVzIikpCiEgCSAgKGlmICh0ZXJtLXBhZ2VyLWVuYWJsZWQp ICcoIjogbGluZSBwYWdlICVzIikgJygiOiBsaW5lICVzIikpKSkKICAgIChmb3JjZS1tb2RlLWxp bmUtdXBkYXRlKSkKICAKICAoZGVmdW4gdGVybS1jaGVjay1wcm9jIChidWZmZXIpCiEgICAiVHJ1 ZSBpZiB0aGVyZSBpcyBhIHByb2Nlc3MgYXNzb2NpYXRlZCB3L2J1ZmZlciBCVUZGRVIsIGFuZAoh IGl0IGlzIGFsaXZlIChzdGF0dXMgUlVOIG9yIFNUT1ApLiAgQlVGRkVSIGNhbiBiZSBlaXRoZXIg YSBidWZmZXIgb3IgdGhlCiEgbmFtZSBvZiBvbmUuIgogICAgKGxldCAoKHByb2MgKGdldC1idWZm ZXItcHJvY2VzcyBidWZmZXIpKSkKISAgICAgKGFuZCBwcm9jIChtZW1xIChwcm9jZXNzLXN0YXR1 cyBwcm9jKSAnKHJ1biBzdG9wKSkpKSkKICAKICA7OzsjIyNhdXRvbG9hZAogIChkZWZ1biBtYWtl LXRlcm0gKG5hbWUgcHJvZ3JhbSAmb3B0aW9uYWwgc3RhcnRmaWxlICZyZXN0IHN3aXRjaGVzKQot LS0gMTI3NywxMzE4IC0tLS0KICAgICAgKHRlcm0tdXBkYXRlLW1vZGUtbGluZSkpKQogIAogIChk ZWZ1biB0ZXJtLXVwZGF0ZS1tb2RlLWxpbmUgKCkKISAgIChsZXQgKCh0ZXJtLW1vZGUgKGlmICh0 ZXJtLWluLWNoYXItbW9kZSkgImNoYXIiICJsaW5lIikpCiEgICAgICAgICAodGVybS1wYWdlICh3 aGVuICh0ZXJtLXBhZ2VyLWVuYWJsZWQpICIgcGFnZSIpKQohICAgICAgICAgKHNlcmlhbC1pdGVt LXNwZWVkKQohICAgICAgICAgKHNlcmlhbC1pdGVtLWNvbmZpZykKISAgICAgICAgICh0ZW1wKQoh ICAgICAgICAgKHByb2MgKGdldC1idWZmZXItcHJvY2VzcyAoY3VycmVudC1idWZmZXIpKSkpCiEg ICAgICh3aGVuIChhbmQgKHRlcm0tY2hlY2stcHJvYyAoY3VycmVudC1idWZmZXIpKQohICAgICAg ICAgICAgICAgIChlcXVhbCAocHJvY2Vzcy10eXBlIG5pbCkgJ3NlcmlhbCkpCiEgICAgICAgKGxl dCAoKHRlbXAgKHNlcmlhbC1zcGVlZCkpKQohICAgICAgICAgKHNldHEgc2VyaWFsLWl0ZW0tc3Bl ZWQKISAgICAgICAgICAgICBgKDpwcm9wZXJ0aXplCiEgICAgICAgICAgICAgICAsKG9yIChhbmQg dGVtcCAoZm9ybWF0ICIgJWQiIHRlbXApKSAiIikKISAgICAgICAgICAgICAgIGhlbHAtZWNobyAi bW91c2UtMTogQ2hhbmdlIHRoZSBzcGVlZCBvZiB0aGUgc2VyaWFsIHBvcnQiCiEgICAgICAgICAg ICAgICBtb3VzZS1mYWNlIG1vZGUtbGluZS1oaWdobGlnaHQKISAgICAgICAgICAgICAgIGxvY2Fs LW1hcCAoa2V5bWFwIChtb2RlLWxpbmUga2V5bWFwCiEgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoZG93bi1tb3VzZS0xIC4gc2VyaWFsLW1vZGUtbGluZS1zcGVlZC1tZW51LTEpKSkp KSkKISAgICAgICAobGV0ICgodGVtcCAocHJvY2Vzcy1jb250YWN0IHByb2MgOnN1bW1hcnkpKSkK ISAgICAgICAgIChzZXRxIHNlcmlhbC1pdGVtLWNvbmZpZwohICAgICAgICAgICAgICAgYCg6cHJv cGVydGl6ZQohICAgICAgICAgICAgICAgICAsKG9yIChhbmQgdGVtcCAoZm9ybWF0ICIgJXMiIHRl bXApKSAiIikKISAgICAgICAgICAgICAgICAgaGVscC1lY2hvICJtb3VzZS0xOiBDaGFuZ2UgdGhl IGNvbmZpZ3VyYXRpb24gb2YgdGhlIHNlcmlhbCBwb3J0IgohICAgICAgICAgICAgICAgICBtb3Vz ZS1mYWNlIG1vZGUtbGluZS1oaWdobGlnaHQKISAgICAgICAgICAgICAgICAgbG9jYWwtbWFwIChr ZXltYXAgKG1vZGUtbGluZSBrZXltYXAKISAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZG93 bi1tb3VzZS0xIC4gc2VyaWFsLW1vZGUtbGluZS1jb25maWctbWVudS0xKSkpKSkpKQohICAgICAo c2V0cSBtb2RlLWxpbmUtcHJvY2VzcwohICAgICAgICAgICAobGlzdCAiOiAiIHRlcm0tbW9kZSB0 ZXJtLXBhZ2UKISAgICAgICAgICAgICAgICAgc2VyaWFsLWl0ZW0tc3BlZWQKISAgICAgICAgICAg ICAgICAgc2VyaWFsLWl0ZW0tY29uZmlnCiEgICAgICAgICAgICAgICAgICIgJXMiKSkpCiAgICAo Zm9yY2UtbW9kZS1saW5lLXVwZGF0ZSkpCiAgCiAgKGRlZnVuIHRlcm0tY2hlY2stcHJvYyAoYnVm ZmVyKQohICAgIlRydWUgaWYgdGhlcmUgaXMgYSBwcm9jZXNzIGFzc29jaWF0ZWQgdy9idWZmZXIg QlVGRkVSLCBhbmQgaXQKISBpcyBhbGl2ZS4gIEJVRkZFUiBjYW4gYmUgZWl0aGVyIGEgYnVmZmVy IG9yIHRoZSBuYW1lIG9mIG9uZS4iCiAgICAobGV0ICgocHJvYyAoZ2V0LWJ1ZmZlci1wcm9jZXNz IGJ1ZmZlcikpKQohICAgICAoYW5kIHByb2MgKG1lbXEgKHByb2Nlc3Mtc3RhdHVzIHByb2MpICco cnVuIHN0b3Agb3BlbiBsaXN0ZW4gY29ubmVjdCkpKSkpCiAgCiAgOzs7IyMjYXV0b2xvYWQKICAo ZGVmdW4gbWFrZS10ZXJtIChuYW1lIHByb2dyYW0gJm9wdGlvbmFsIHN0YXJ0ZmlsZSAmcmVzdCBz d2l0Y2hlcykKKioqKioqKioqKioqKioqIHRoZSBwcm9jZXNzLiAgQW55IG1vcmUgYXJncyBhcmUg YXJndW1lbnQKKioqIDQyMDUsNDIxMCAqKioqCi0tLSA0MjI5LDQ0NjYgLS0tLQogICAgKHN3aXRj aC10by1idWZmZXIgdGVybS1hbnNpLWJ1ZmZlci1uYW1lKSkKICAKICAMCisgOzs7IFNlcmlhbCB0 ZXJtaW5hbHMKKyA7OzsgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKGRlZnVuIHNlcmlhbC1wb3J0LWlz LWZpbGUtcCAoKQorICAgIkd1ZXNzIHdoZXRoZXIgc2VyaWFsIHBvcnRzIGFyZSBmaWxlcyBvbiB0 aGlzIHN5c3RlbS4KKyBSZXR1cm4gdCBpZiB0aGlzIGlzIGEgVW5peC1iYXNlZCBzeXN0ZW0sIHdo ZXJlIHNlcmlhbCBwb3J0cyBhcmUKKyBmaWxlcywgc3VjaCBhcyAvZGV2L3R0eVMwLgorIFJldHVy biBuaWwgaWYgdGhpcyBpcyBXaW5kb3dzIG9yIERPUywgd2hlcmUgc2VyaWFsIHBvcnRzIGhhdmUK KyBzcGVjaWFsIGlkZW50aWZpZXJzIHN1Y2ggYXMgQ09NMS4iCisgICAobm90IChtZW1iZXIgc3lz dGVtLXR5cGUgKGxpc3QgJ3dpbmRvd3MtbnQgJ2N5Z3dpbiAnbXMtZG9zKSkpKQorIAorIChkZWZ2 YXIgc2VyaWFsLW5hbWUtaGlzdG9yeQorICAgKGlmIChzZXJpYWwtcG9ydC1pcy1maWxlLXApCisg ICAgICAgKG9yICh3aGVuIChmaWxlLWV4aXN0cy1wICIvZGV2L3R0eXMwIikgKGxpc3QgIi9kZXYv dHR5czAiKSkKKyAgICAgICAgICAgKHdoZW4gKGZpbGUtZXhpc3RzLXAgIi9kZXYvdHR5UzAiKSAo bGlzdCAiL2Rldi90dHlTMCIpKSkKKyAgICAgKGxpc3QgIkNPTTEiKSkKKyAgICJIaXN0b3J5IG9m IHNlcmlhbCBwb3J0cyB1c2VkIGJ5IGBzZXJpYWwtcmVhZC1uYW1lJy4iKQorIAorIChkZWZ2YXIg c2VyaWFsLXNwZWVkLWhpc3RvcnkKKyAgIDs7IEluaXRpYWxpc2VkIHdpdGggcmVhc29uYWJsZSB2 YWx1ZXMgZm9yIG5ld2JpZXMuCisgICAobGlzdCAiOTYwMCIgOzsgR2l2ZW4gdHdpY2UgYmVjYXVz ZSA5NjAwIGIvcyBpcyB0aGUgbW9zdCBjb21tb24gc3BlZWQKKyAgICAgICAgICIxMjAwIiAiMjQw MCIgIjQ4MDAiICI5NjAwIiAiMTQ0MDAiICIxOTIwMCIKKyAgICAgICAgICIyODgwMCIgIjM4NDAw IiAiNTc2MDAiICIxMTUyMDAiKQorICAgIkhpc3Rvcnkgb2Ygc2VyaWFsIHBvcnQgc3BlZWRzIHVz ZWQgYnkgYHNlcmlhbC1yZWFkLXNwZWVkJy4iKQorIAorIChkZWZ1biBzZXJpYWwtbmljZS1zcGVl ZC1oaXN0b3J5ICgpCisgICAiUmV0dXJuIGBzZXJpYWwtc3BlZWQtaGlzdG9yeScgY2xlYW5lZCB1 cCBmb3IgYSBtb3VzZS1tZW51LiIKKyAgIChsZXQgKCh4KSAoeSkpCisgICAgIChzZXRxIHgKKyAg ICAgICAgICAoc29ydAorICAgICAgICAgICAoY29weS1zZXF1ZW5jZSBzZXJpYWwtc3BlZWQtaGlz dG9yeSkKKyAgICAgICAgICAgJyhsYW1iZGEgKGEgYikgKHdoZW4gKGFuZCAoc3RyaW5ncCBhKSAo c3RyaW5ncCBiKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPiAoc3RyaW5nLXRvLW51 bWJlciBhKSAoc3RyaW5nLXRvLW51bWJlciBiKSkpKSkpCisgICAgIChkb2xpc3QgKGkgeCkgKHdo ZW4gKG5vdCAoZXF1YWwgaSAoY2FyIHkpKSkgKHB1c2ggaSB5KSkpCisgICAgIHkpKQorIAorIChk ZWZjb25zdCBzZXJpYWwtbm8tc3BlZWQgIm5pbCIKKyAgICJTdHJpbmcgZm9yIGBzZXJpYWwtcmVh ZC1zcGVlZCcgZm9yIHNwZWNpYWwgc2VyaWFsIHBvcnRzLgorIElmIGBzZXJpYWwtcmVhZC1zcGVl ZCcgcmVhZHMgdGhpcyBzdHJpbmcgZnJvbSB0aGUgdXNlciwgaXQKKyByZXR1cm5zIG5pbCwgd2hp Y2ggaXMgcmVjb2duaXplZCBieSBgc2VyaWFsLXByb2Nlc3MtY29uZmlndXJlJworIGZvciBzcGVj aWFsIHNlcmlhbCBwb3J0cyB0aGF0IGNhbm5vdCBiZSBjb25maWd1cmVkLiIpCisgCisgKGRlZnVu IHNlcmlhbC1zdXBwb3J0ZWQtb3ItYmFyZiAoKQorICAgIlNpZ25hbCBhbiBlcnJvciBpZiBzZXJp YWwgcHJvY2Vzc2VzIGFyZSBub3Qgc3VwcG9ydGVkIgorICAgKHVubGVzcyAoZmJvdW5kcCAnbWFr ZS1zZXJpYWwtcHJvY2VzcykKKyAgICAgKGVycm9yICJTZXJpYWwgcHJvY2Vzc2VzIGFyZSBub3Qg c3VwcG9ydGVkIG9uIHRoaXMgc3lzdGVtIikpKQorIAorIChkZWZ1biBzZXJpYWwtcmVhZC1uYW1l ICgpCisgICAiUmVhZCBhIHNlcmlhbCBwb3J0IG5hbWUgZnJvbSB0aGUgdXNlci4KKyBUcnkgdG8g YmUgbmljZSBieSBwcm92aWRpbmcgdXNlZnVsIGRlZmF1bHRzIGFuZCBoaXN0b3J5LgorIE9uIFdp bmRvd3MsIHByZXBlbmQgXFwuXCB0byB0aGUgcG9ydCBuYW1lIHVubGVzcyBpdCBhbHJlYWR5Cisg Y29udGFpbnMgYSBiYWNrc2xhc2guICBUaGlzIGhhbmRsZXMgdGhlIGxlZ2FjeSBwb3J0cyBDT00x LUNPTTkgYXMKKyB3ZWxsIGFzIHRoZSBuZXdlciBwb3J0cyBDT00xMCBhbmQgaGlnaGVyLiIKKyAg IChzZXJpYWwtc3VwcG9ydGVkLW9yLWJhcmYpCisgICAobGV0KiAoKGZpbGUtbmFtZS1oaXN0b3J5 IHNlcmlhbC1uYW1lLWhpc3RvcnkpCisgICAgICAgICAgKGggKGNhciBmaWxlLW5hbWUtaGlzdG9y eSkpCisgICAgICAgICAgKHggKGlmIChzZXJpYWwtcG9ydC1pcy1maWxlLXApCisgICAgICAgICAg ICAgICAgIChyZWFkLWZpbGUtbmFtZQorICAgICAgICAgICAgICAgICAgOzsgYHByb21wdCc6IFRo ZSBtb3N0IHJlY2VudGx5IHVzZWQgcG9ydCBpcyBwcm92aWRlZCBhcworICAgICAgICAgICAgICAg ICAgOzsgdGhlIGRlZmF1bHQgdmFsdWUsIHdoaWNoIGlzIHVzZWQgd2hlbiB0aGUgdXNlcgorICAg ICAgICAgICAgICAgICAgOzsgc2ltcGx5IHByZXNzZXMgcmV0dXJuLgorICAgICAgICAgICAgICAg ICAgKGlmIChzdHJpbmdwIGgpIChmb3JtYXQgIlNlcmlhbCBwb3J0IChkZWZhdWx0ICVzKTogIiBo KQorICAgICAgICAgICAgICAgICAgICAiU2VyaWFsIHBvcnQ6ICIpCisgICAgICAgICAgICAgICAg ICA7OyBgZGlyZWN0b3J5JzogTW9zdCBzeXN0ZW1zIGhhdmUgdGhlaXIgc2VyaWFsIHBvcnRzCisg ICAgICAgICAgICAgICAgICA7OyBpbiB0aGUgc2FtZSBkaXJlY3RvcnksIHNvIHN0YXJ0IGluIHRo ZSBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgIDs7IG9mIHRoZSBtb3N0IHJlY2VudGx5IHVz ZWQgcG9ydCwgb3IgaW4gYSByZWFzb25hYmxlCisgICAgICAgICAgICAgICAgICA7OyBkZWZhdWx0 IGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgIChvciAoYW5kIGggKGZpbGUtbmFtZS1kaXJl Y3RvcnkgaCkpCisgICAgICAgICAgICAgICAgICAgICAgKGFuZCAoZmlsZS1leGlzdHMtcCAiL2Rl di8iKSAiL2Rldi8iKQorICAgICAgICAgICAgICAgICAgICAgIChhbmQgKGZpbGUtZXhpc3RzLXAg Ii8iKSAiLyIpKQorICAgICAgICAgICAgICAgICAgOzsgYGRlZmF1bHQnOiBUaGlzIGNhdXNlcyAo cmVhZC1maWxlLW5hbWUpIHRvIHJldHVybgorICAgICAgICAgICAgICAgICAgOzsgdGhlIGVtcHR5 IHN0cmluZyBpZiBoZSB1c2VyIHNpbXBseSBwcmVzc2VzIHJldHVybi4KKyAgICAgICAgICAgICAg ICAgIDs7IFVzaW5nIG5pbCBoZXJlIG1heSByZXN1bHQgaW4gYSBkZWZhdWx0IGRpcmVjdG9yeQor ICAgICAgICAgICAgICAgICAgOzsgb2YgdGhlIGN1cnJlbnQgYnVmZmVyLCB3aGljaCBpcyBub3Qg dXNlZnVsIGZvcgorICAgICAgICAgICAgICAgICAgOzsgc2VyaWFsIHBvcnQuCisgICAgICAgICAg ICAgICAgICAiIikKKyAgICAgICAgICAgICAgIChyZWFkLWZyb20tbWluaWJ1ZmZlcgorICAgICAg ICAgICAgICAgIChpZiAoc3RyaW5ncCBoKSAoZm9ybWF0ICJTZXJpYWwgcG9ydCAoZGVmYXVsdCAl cyk6ICIgaCkKKyAgICAgICAgICAgICAgICAgICJTZXJpYWwgcG9ydDogIikKKyAgICAgICAgICAg ICAgICBuaWwgbmlsIG5pbCAnKGZpbGUtbmFtZS1oaXN0b3J5IC4gMSkgbmlsIG5pbCkpKSkKKyAg ICAgKGlmIChvciAobnVsbCB4KSAoYW5kIChzdHJpbmdwIHgpICh6ZXJvcCAobGVuZ3RoIHgpKSkp CisgICAgICAgICAoc2V0cSB4IGgpCisgICAgICAgKHNldHEgc2VyaWFsLW5hbWUtaGlzdG9yeSBm aWxlLW5hbWUtaGlzdG9yeSkpCisgICAgICh3aGVuIChvciAobnVsbCB4KSAoYW5kIChzdHJpbmdw IHgpICh6ZXJvcCAobGVuZ3RoIHgpKSkpCisgICAgICAgKGVycm9yICJObyBzZXJpYWwgcG9ydCBz ZWxlY3RlZCIpKQorICAgICAod2hlbiAoYW5kIChub3QgKHNlcmlhbC1wb3J0LWlzLWZpbGUtcCkp CisgICAgICAgICAgICAgICAgKG5vdCAoc3RyaW5nLW1hdGNoICJcXFxcIiB4KSkpCisgICAgICAg KHNldCAneCAoY29uY2F0ICJcXFxcLlxcIiB4KSkpCisgICAgIHgpKQorIAorIChkZWZ1biBzZXJp YWwtcmVhZC1zcGVlZCAoKQorICAgIlJlYWQgYSBzZXJpYWwgcG9ydCBzcGVlZCAoaW4gYml0cyBw ZXIgc2Vjb25kKSBmcm9tIHRoZSB1c2VyLgorIFRyeSB0byBiZSBuaWNlIGJ5IHByb3ZpZGluZyB1 c2VmdWwgZGVmYXVsdHMgYW5kIGhpc3RvcnkuIgorICAgKHNlcmlhbC1zdXBwb3J0ZWQtb3ItYmFy ZikKKyAgIChsZXQqICgoaGlzdG9yeSBzZXJpYWwtc3BlZWQtaGlzdG9yeSkKKyAgICAgICAgICAo aCAoY2FyIGhpc3RvcnkpKQorICAgICAgICAgICh4IChyZWFkLWZyb20tbWluaWJ1ZmZlcgorICAg ICAgICAgICAgICAoY29uZCAoKHN0cmluZz0gaCBzZXJpYWwtbm8tc3BlZWQpCisgICAgICAgICAg ICAgICAgICAgICAiU3BlZWQgKGRlZmF1bHQgbmlsID0gc2V0IGJ5IHBvcnQpOiAiKQorICAgICAg ICAgICAgICAgICAgICAoaAorICAgICAgICAgICAgICAgICAgICAgKGZvcm1hdCAiU3BlZWQgKGRl ZmF1bHQgJXMgYi9zKTogIiBoKSkKKyAgICAgICAgICAgICAgICAgICAgKHQKKyAJCSAgICAoZm9y bWF0ICJTcGVlZCAoYi9zKTogIikpKQorICAgICAgICAgICAgICBuaWwgbmlsIG5pbCAnKGhpc3Rv cnkgLiAxKSBuaWwgbmlsKSkpCisgICAgICh3aGVuIChvciAobnVsbCB4KSAoYW5kIChzdHJpbmdw IHgpICh6ZXJvcCAobGVuZ3RoIHgpKSkpCisgICAgICAgKHNldHEgeCBoKSkKKyAgICAgKHdoZW4g KG9yIChudWxsIHgpIChub3QgKHN0cmluZ3AgeCkpICh6ZXJvcCAobGVuZ3RoIHgpKSkKKyAgICAg ICAoZXJyb3IgIkludmFsaWQgc3BlZWQiKSkKKyAgICAgKGlmIChzdHJpbmc9IHggc2VyaWFsLW5v LXNwZWVkKQorICAgICAgICAgKHNldHEgeCBuaWwpCisgICAgICAgKHNldHEgeCAoc3RyaW5nLXRv LW51bWJlciB4KSkKKyAgICAgICAod2hlbiAob3IgKG51bGwgeCkgKG5vdCAoaW50ZWdlcnAgeCkp ICg8PSB4IDApKQorICAgICAgICAgKGVycm9yICJJbnZhbGlkIHNwZWVkIikpKQorICAgICAoc2V0 cSBzZXJpYWwtc3BlZWQtaGlzdG9yeSBoaXN0b3J5KQorICAgICB4KSkKKyAKKyA7OzsjIyNhdXRv bG9hZAorIChkZWZ1biBzZXJpYWwtdGVybSAocG9ydCBzcGVlZCkKKyAgICJTdGFydCBhIHRlcm1p bmFsLWVtdWxhdG9yIGZvciBhIHNlcmlhbCBwb3J0IGluIGEgbmV3IGJ1ZmZlci4KKyBQT1JUIGlz IHRoZSBwYXRoIG9yIG5hbWUgb2YgdGhlIHNlcmlhbCBwb3J0LiAgRm9yIGV4YW1wbGUsIHRoaXMK KyBjb3VsZCBiZSBcIi9kZXYvdHR5UzBcIiBvbiBVbml4LiAgT24gV2luZG93cywgdGhpcyBjb3Vs ZCBiZQorIFwiQ09NMVwiIG9yIFwiXFxcXC5cXENPTTEwXCIuCisgU1BFRUQgaXMgdGhlIHNwZWVk IG9mIHRoZSBzZXJpYWwgcG9ydCBpbiBiaXRzIHBlciBzZWNvbmQuICA5NjAwCisgaXMgYSBjb21t b24gdmFsdWUuICBTUEVFRCBjYW4gYmUgbmlsLCBzZWUKKyBgc2VyaWFsLXByb2Nlc3MtY29uZmln dXJlJyBmb3IgZGV0YWlscy4KKyBUaGUgYnVmZmVyIGlzIGluIFRlcm0gbW9kZTsgc2VlIGB0ZXJt LW1vZGUnIGZvciB0aGUgY29tbWFuZHMgdG8KKyB1c2UgaW4gdGhhdCBidWZmZXIuCisgXFw8dGVy bS1yYXctbWFwPlR5cGUgXFxbc3dpdGNoLXRvLWJ1ZmZlcl0gdG8gc3dpdGNoIHRvIGFub3RoZXIg YnVmZmVyLiIKKyAgIChpbnRlcmFjdGl2ZSAobGlzdCAoc2VyaWFsLXJlYWQtbmFtZSkgKHNlcmlh bC1yZWFkLXNwZWVkKSkpCisgICAoc2VyaWFsLXN1cHBvcnRlZC1vci1iYXJmKQorICAgKGxldCog KChwcm9jZXNzIChtYWtlLXNlcmlhbC1wcm9jZXNzCisgICAgICAgICAgICAgICAgICAgIDpwb3J0 IHBvcnQKKyAgICAgICAgICAgICAgICAgICAgOnNwZWVkIHNwZWVkCisgICAgICAgICAgICAgICAg ICAgIDpjb2RpbmcgJ25vLWNvbnZlcnNpb24KKyAgICAgICAgICAgICAgICAgICAgOm5vcXVlcnkg dCkpCisgICAgICAgICAgKGJ1ZmZlciAocHJvY2Vzcy1idWZmZXIgcHJvY2VzcykpKQorICAgICAo c2F2ZS1leGN1cnNpb24KKyAgICAgICAoc2V0LWJ1ZmZlciBidWZmZXIpCisgICAgICAgKHRlcm0t bW9kZSkKKyAgICAgICAodGVybS1jaGFyLW1vZGUpCisgICAgICAgKGdvdG8tY2hhciAocG9pbnQt bWF4KSkKKyAgICAgICAoc2V0LW1hcmtlciAocHJvY2Vzcy1tYXJrIHByb2Nlc3MpIChwb2ludCkp CisgICAgICAgKHNldC1wcm9jZXNzLWZpbHRlciBwcm9jZXNzICd0ZXJtLWVtdWxhdGUtdGVybWlu YWwpCisgICAgICAgKHNldC1wcm9jZXNzLXNlbnRpbmVsIHByb2Nlc3MgJ3Rlcm0tc2VudGluZWwp KQorICAgICAoc3dpdGNoLXRvLWJ1ZmZlciBidWZmZXIpCisgICAgIGJ1ZmZlcikpCisgCisgKGRl ZnZhciBzZXJpYWwtbW9kZS1saW5lLXNwZWVkLW1lbnUgbmlsKQorIChkZWZ2YXIgc2VyaWFsLW1v ZGUtbGluZS1jb25maWctbWVudSBuaWwpCisgCisgKGRlZnVuIHNlcmlhbC1zcGVlZCAoKQorICAg IlJldHVybiB0aGUgc3BlZWQgb2YgdGhlIHNlcmlhbCBwb3J0IG9mIHRoZSBjdXJyZW50IGJ1ZmZl cidzIHByb2Nlc3MuCisgVGhlIHJldHVybiB2YWx1ZSBtYXkgYmUgbmlsIGZvciBhIHNwZWNpYWwg c2VyaWFsIHBvcnQuIgorICAgKHByb2Nlc3MtY29udGFjdCAoZ2V0LWJ1ZmZlci1wcm9jZXNzIChj dXJyZW50LWJ1ZmZlcikpIDpzcGVlZCkpCisgCisgKGRlZnVuIHNlcmlhbC1tb2RlLWxpbmUtc3Bl ZWQtbWVudS0xIChldmVudCkKKyAgIChpbnRlcmFjdGl2ZSAiZSIpCisgICAoc2F2ZS1zZWxlY3Rl ZC13aW5kb3cKKyAgICAgKHNlbGVjdC13aW5kb3cgKHBvc24td2luZG93IChldmVudC1zdGFydCBl dmVudCkpKQorICAgICAoc2VyaWFsLXVwZGF0ZS1zcGVlZC1tZW51KQorICAgICAobGV0KiAoKHNl bGVjdGlvbiAoc2VyaWFsLW1vZGUtbGluZS1zcGVlZC1tZW51IGV2ZW50KSkKKyAJICAgKGJpbmRp bmcgKGFuZCBzZWxlY3Rpb24gKGxvb2t1cC1rZXkgc2VyaWFsLW1vZGUtbGluZS1zcGVlZC1tZW51 CisgCQkJCQkgICAgICAgKHZlY3RvciAoY2FyIHNlbGVjdGlvbikpKSkpKQorICAgICAgICh3aGVu IGJpbmRpbmcgKGNhbGwtaW50ZXJhY3RpdmVseSBiaW5kaW5nKSkpKSkKKyAKKyAoZGVmdW4gc2Vy aWFsLW1vZGUtbGluZS1zcGVlZC1tZW51IChldmVudCkKKyAgICh4LXBvcHVwLW1lbnUgZXZlbnQg c2VyaWFsLW1vZGUtbGluZS1zcGVlZC1tZW51KSkKKyAKKyAoZGVmdW4gc2VyaWFsLXVwZGF0ZS1z cGVlZC1tZW51ICgpCisgICAoc2V0cSBzZXJpYWwtbW9kZS1saW5lLXNwZWVkLW1lbnUgKG1ha2Ut c3BhcnNlLWtleW1hcCAiU3BlZWQgKGIvcykiKSkKKyAgIChkZWZpbmUta2V5IHNlcmlhbC1tb2Rl LWxpbmUtc3BlZWQtbWVudSBbc2VyaWFsLW1vZGUtbGluZS1zcGVlZC1tZW51LW90aGVyXQorICAg ICAnKG1lbnUtaXRlbSAiT3RoZXIuLi4iCisgICAgICAgICAgICAgICAgIChsYW1iZGEgKGV2ZW50 KSAoaW50ZXJhY3RpdmUgImUiKQorICAgICAgICAgICAgICAgICAgIChsZXQgKChzcGVlZCAoc2Vy aWFsLXJlYWQtc3BlZWQpKSkKKyAgICAgICAgICAgICAgICAgICAgIChzZXJpYWwtcHJvY2Vzcy1j b25maWd1cmUgOnNwZWVkIHNwZWVkKQorICAgICAgICAgICAgICAgICAgICAgKHRlcm0tdXBkYXRl LW1vZGUtbGluZSkKKyAgICAgICAgICAgICAgICAgICAgIChtZXNzYWdlICJTcGVlZCBzZXQgdG8g JWQgYi9zIiBzcGVlZCkpKSkpCisgICAoZG9saXN0IChzdHIgKHNlcmlhbC1uaWNlLXNwZWVkLWhp c3RvcnkpKQorICAgICAobGV0ICgobnVtIChvciAoYW5kIChzdHJpbmdwIHN0cikgKHN0cmluZy10 by1udW1iZXIgc3RyKSkgMCkpKQorICAgICAgIChkZWZpbmUta2V5CisgICAgICAgICBzZXJpYWwt bW9kZS1saW5lLXNwZWVkLW1lbnUKKyAgICAgICAgICh2ZWN0b3IgKG1ha2Utc3ltYm9sIChmb3Jt YXQgInNlcmlhbC1tb2RlLWxpbmUtc3BlZWQtbWVudS0lcyIgc3RyKSkpCisgICAgICAgICBgKG1l bnUtaXRlbQorICAgICAgICAgICAsc3RyCisgICAgICAgICAgIChsYW1iZGEgKGV2ZW50KSAoaW50 ZXJhY3RpdmUgImUiKQorICAgICAgICAgICAgIChzZXJpYWwtcHJvY2Vzcy1jb25maWd1cmUgOnNw ZWVkICxudW0pCisgICAgICAgICAgICAgKHRlcm0tdXBkYXRlLW1vZGUtbGluZSkKKyAgICAgICAg ICAgICAobWVzc2FnZSAiU3BlZWQgc2V0IHRvICVkIGIvcyIgLG51bSkpCisgICAgICAgICAgIDpi dXR0b24gKDp0b2dnbGUgLiAoPSAoc2VyaWFsLXNwZWVkKSAsbnVtKSkpKSkpKQorIAorIChkZWZ1 biBzZXJpYWwtbW9kZS1saW5lLWNvbmZpZy1tZW51LTEgKGV2ZW50KQorICAgKGludGVyYWN0aXZl ICJlIikKKyAgIChzYXZlLXNlbGVjdGVkLXdpbmRvdworICAgICAoc2VsZWN0LXdpbmRvdyAocG9z bi13aW5kb3cgKGV2ZW50LXN0YXJ0IGV2ZW50KSkpCisgICAgIChzZXJpYWwtdXBkYXRlLWNvbmZp Zy1tZW51KQorICAgICAobGV0KiAoKHNlbGVjdGlvbiAoc2VyaWFsLW1vZGUtbGluZS1jb25maWct bWVudSBldmVudCkpCisgICAgICAgICAgICAoYmluZGluZyAoYW5kIHNlbGVjdGlvbiAobG9va3Vw LWtleSBzZXJpYWwtbW9kZS1saW5lLWNvbmZpZy1tZW51CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIChjYXIgc2VsZWN0aW9uKSkpKSkpCisg ICAgICAgKHdoZW4gYmluZGluZyAoY2FsbC1pbnRlcmFjdGl2ZWx5IGJpbmRpbmcpKSkpKQorIAor IChkZWZ1biBzZXJpYWwtbW9kZS1saW5lLWNvbmZpZy1tZW51IChldmVudCkKKyAgICh4LXBvcHVw LW1lbnUgZXZlbnQgc2VyaWFsLW1vZGUtbGluZS1jb25maWctbWVudSkpCisgCisgKGRlZnVuIHNl cmlhbC11cGRhdGUtY29uZmlnLW1lbnUgKCkKKyAgIChzZXRxIHNlcmlhbC1tb2RlLWxpbmUtY29u ZmlnLW1lbnUgKG1ha2Utc3BhcnNlLWtleW1hcCAiQ29uZmlndXJhdGlvbiIpKQorICAgKGxldCAo KGNvbmZpZyAocHJvY2Vzcy1jb250YWN0CisgICAgICAgICAgICAgICAgICAoZ2V0LWJ1ZmZlci1w cm9jZXNzIChjdXJyZW50LWJ1ZmZlcikpIHQpKQorICAgICAgICAgKHkpCisgICAgICAgICAoc3Ry KSkKKyAgICAgKGRvbGlzdCAoeSAnKCg6Zmxvd2NvbnRyb2wgaHcgICAiSGFyZHdhcmUgZmxvd2Nv bnRyb2wgKFJUUy9DVFMpIikKKyAgICAgICAgICAgICAgICAgICg6Zmxvd2NvbnRyb2wgc3cgICAi U29mdHdhcmUgZmxvd2NvbnRyb2wgKFhPTi9YT0ZGKSIpCisgICAgICAgICAgICAgICAgICAoOmZs b3djb250cm9sIG5pbCAgIk5vIGZsb3djb250cm9sIikKKyAgICAgICAgICAgICAgICAgICg6c3Rv cGJpdHMgICAgMiAgICAiMiBzdG9wYml0cyIpCisgICAgICAgICAgICAgICAgICAoOnN0b3BiaXRz ICAgIDEgICAgIjEgc3RvcGJpdCIpCisgICAgICAgICAgICAgICAgICAoOnBhcml0eSAgICAgIG9k ZCAgIk9kZCBwYXJpdHkiKQorICAgICAgICAgICAgICAgICAgKDpwYXJpdHkgICAgICBldmVuICJF dmVuIHBhcml0eSIpCisgICAgICAgICAgICAgICAgICAoOnBhcml0eSAgICAgIG5pbCAgIk5vIHBh cml0eSIpCisgICAgICAgICAgICAgICAgICAoOmJ5dGVzaXplICAgIDcgICAgIjcgYml0cyBwZXIg Ynl0ZSIpCisgICAgICAgICAgICAgICAgICAoOmJ5dGVzaXplICAgIDggICAgIjggYml0cyBwZXIg Ynl0ZSIpKSkKKyAgICAgICAoZGVmaW5lLWtleSBzZXJpYWwtbW9kZS1saW5lLWNvbmZpZy1tZW51 CisgICAgICAgICAodmVjdG9yIChtYWtlLXN5bWJvbCAoZm9ybWF0ICIlcy0lcyIgKG50aCAwIHkp IChudGggMSB5KSkpKQorICAgICAgICAgYChtZW51LWl0ZW0KKyAgICAgICAgICAgLChudGggMiB5 KQorICAgICAgICAgICAobGFtYmRhIChldmVudCkgKGludGVyYWN0aXZlICJlIikKKyAgICAgICAg ICAgICAoc2VyaWFsLXByb2Nlc3MtY29uZmlndXJlICwobnRoIDAgeSkgJywobnRoIDEgeSkpCisg ICAgICAgICAgICAgKHRlcm0tdXBkYXRlLW1vZGUtbGluZSkKKyAgICAgICAgICAgICAobWVzc2Fn ZSAiJXMiICwobnRoIDIgeSkpKQorICAgICAgICAgICA7OyBVc2UgOnRvZ2dsZSBpbnN0ZWFkIG9m IDpyYWRpbyBiZWNhdXNlIGEgbm9uLXN0YW5kYXJkIHBvcnQKKyAgICAgICAgICAgOzsgY29uZmln dXJhdGlvbiBtYXkgbm90IG1hdGNoIGFueSBtZW51IGl0ZW1zLgorICAgICAgICAgICA6YnV0dG9u ICg6dG9nZ2xlIC4gLChlcXVhbCAocGxpc3QtZ2V0IGNvbmZpZyAobnRoIDAgeSkpCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChudGggMSB5KSkpKSkpKSkKKyAKKyAMCiAg Ozs7IENvbnZlcnRpbmcgcHJvY2VzcyBtb2RlcyB0byB1c2UgdGVybSBtb2RlCiAgOzs7ID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQogIDs7OyBSZW5hbWluZyB2YXJpYWJsZXMKSW5kZXg6IHNyYy9DaGFuZ2VM b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQpSQ1MgZmlsZTogL3NvdXJjZXMvZW1hY3MvZW1hY3Mvc3JjL0NoYW5nZUxv Zyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42NTUxCmRpZmYgLWMgLXAgLXIxLjY1NTEgQ2hhbmdl TG9nCioqKiBzcmMvQ2hhbmdlTG9nCTEyIEp1biAyMDA4IDE1OjI4OjMyIC0wMDAwCTEuNjU1MQot LS0gc3JjL0NoYW5nZUxvZwkxMiBKdW4gMjAwOCAxOTo1NDowNyAtMDAwMAoqKioqKioqKioqKioq KioKKioqIDEsMyAqKioqCi0tLSAxLDI1IC0tLS0KKyAyMDA4LTA2LTEyICBEYW5pZWwgRW5nZWxl ciAgPGVuZ2VsZXJAZ21haWwuY29tPgorIAorIAlUaGVzZSBjaGFuZ2VzIGFkZCBzZXJpYWwgcG9y dCBhY2Nlc3MuCisgCisgCSogcHJvY2Vzcy5jOiBBZGQgSEFWRV9TRVJJQUwuCisgCShGZGVsZXRl X3Byb2Nlc3MsIEZwcm9jZXNzX3N0YXR1cywgRnNldF9wcm9jZXNzX2J1ZmZlcikKKyAJKEZzZXRf cHJvY2Vzc19maWx0ZXIsIEZzZXRfcHJvY2Vzc19zZW50aW5lbCwgRnByb2Nlc3NfY29udGFjdCkK KyAJKGxpc3RfcHJvY2Vzc2VzXzEsIHNlbGVjdF93cmFwcGVyLCBGc3RvcF9wcm9jZXNzKQorIAko RmNvbnRpbnVlX3Byb2Nlc3MsIEZwcm9jZXNzX3NlbmRfZW9mLCBraWxsX2J1ZmZlcl9wcm9jZXNz ZXMpCisgCShzdGF0dXNfbm90aWZ5KTogTW9kaWZ5IHRvIGhhbmRsZSBzZXJpYWwgcHJvY2Vzc2Vz LgorIAlbSEFWRV9TRVJJQUxdIChGc2VyaWFsX3Byb2Nlc3NfY29uZmlndXJlKQorIAlbSEFWRV9T RVJJQUxdIChtYWtlX3NlcmlhbF9wcm9jZXNzX3Vud2luZCwgRm1ha2Vfc2VyaWFsX3Byb2Nlc3Mp OgorIAlOZXcgZnVuY3Rpb25zLgorIAkqIHByb2Nlc3MuaCAoc3RydWN0IExpc3BfUHJvY2Vzcyk6 IEFkZCBgdHlwZScuCisgCSogc3lzZGVwLmMgW0hBVkVfVEVSTUlPU10gKHNlcmlhbF9vcGVuLCBz ZXJpYWxfY29uZmlndXJlKTogTmV3CisgCWZ1bmN0aW9ucy4KKyAJKiB3MzIuYyAoX3N5c19yZWFk X2FoZWFkLCBzeXNfcmVhZCwgc3lzX3dyaXRlKTogTW9kaWZ5IHRvIGhhbmRsZQorIAlzZXJpYWwg cG9ydHMuCisgCShzZXJpYWxfb3Blbiwgc2VyaWFsX2NvbmZpZ3VyZSkgTmV3IGZ1bmN0aW9ucy4K KyAJKiB3MzIuaDogQWRkIEZJTEVfU0VSSUFMLgorIAkoc3RydWN0IF9jaGlsZF9wcm9jZXNzKTog QWRkIG92bF9yZWFkLCBvdmxfd3JpdGUuCisgCiAgMjAwOC0wNi0xMiAgQ2hvbmcgWWlkb25nICA8 Y3lkQHN0dXBpZGNoaWNrZW4uY29tPgogIAogIAkqIHhmbnMuYyAoRnhfc2VsZWN0X2ZvbnQpOiBS ZW5hbWUgZnJvbSB4LWZvbnQtZGlhbG9nLgpJbmRleDogc3JjL3Byb2Nlc3MuYwo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 ClJDUyBmaWxlOiAvc291cmNlcy9lbWFjcy9lbWFjcy9zcmMvcHJvY2Vzcy5jLHYKcmV0cmlldmlu ZyByZXZpc2lvbiAxLjU0MwpkaWZmIC1jIC1wIC1yMS41NDMgcHJvY2Vzcy5jCioqKiBzcmMvcHJv Y2Vzcy5jCTI5IE1heSAyMDA4IDE2OjU0OjUzIC0wMDAwCTEuNTQzCi0tLSBzcmMvcHJvY2Vzcy5j CTEyIEp1biAyMDA4IDE5OjU0OjEzIC0wMDAwCioqKioqKioqKioqKioqKiBMaXNwX09iamVjdCBR cHJvY2Vzc3A7CioqKiAxMzYsMTQ0ICoqKioKLS0tIDEzNiwxNDggLS0tLQogIExpc3BfT2JqZWN0 IFFydW4sIFFzdG9wLCBRc2lnbmFsOwogIExpc3BfT2JqZWN0IFFvcGVuLCBRY2xvc2VkLCBRY29u bmVjdCwgUWZhaWxlZCwgUWxpc3RlbjsKICBMaXNwX09iamVjdCBRbG9jYWwsIFFpcHY0LCBRZGF0 YWdyYW07CisgTGlzcF9PYmplY3QgUXJlYWwsIFFuZXR3b3JrLCBRc2VyaWFsOwogICNpZmRlZiBB Rl9JTkVUNgogIExpc3BfT2JqZWN0IFFpcHY2OwogICNlbmRpZgorIExpc3BfT2JqZWN0IFFDcG9y dCwgUUNzcGVlZCwgUUNwcm9jZXNzOworIExpc3BfT2JqZWN0IFFDYnl0ZXNpemUsIFFDc3RvcGJp dHMsIFFDcGFyaXR5LCBRb2RkLCBRZXZlbjsKKyBMaXNwX09iamVjdCBRQ2Zsb3djb250cm9sLCBR aHcsIFFzdywgUUNzdW1tYXJ5OwogIExpc3BfT2JqZWN0IFFDbmFtZSwgUUNidWZmZXIsIFFDaG9z dCwgUUNzZXJ2aWNlLCBRQ3R5cGU7CiAgTGlzcF9PYmplY3QgUUNsb2NhbCwgUUNyZW1vdGUsIFFD Y29kaW5nOwogIExpc3BfT2JqZWN0IFFDc2VydmVyLCBRQ25vd2FpdCwgUUNub3F1ZXJ5LCBRQ3N0 b3A7CioqKioqKioqKioqKioqKiBleHRlcm4gTGlzcF9PYmplY3QgUUNmYW1pbHk7CioqKiAxNTUs MTY5ICoqKioKICAvKiBRQ2ZpbHRlciBpcyBkZWZpbmVkIGluIGtleWJvYXJkLmMuICAqLwogIGV4 dGVybiBMaXNwX09iamVjdCBRQ2ZpbHRlcjsKICAKLSAvKiBhIHByb2Nlc3Mgb2JqZWN0IGlzIGEg bmV0d29yayBjb25uZWN0aW9uIHdoZW4gaXRzIGNoaWxkcCBmaWVsZCBpcyBuZWl0aGVyCi0gICAg UXQgbm9yIFFuaWwgYnV0IGlzIGluc3RlYWQgYSBwcm9wZXJ0eSBsaXN0IChLRVkgVkFMIC4uLiku ICAqLwotIAogICNpZmRlZiBIQVZFX1NPQ0tFVFMKISAjZGVmaW5lIE5FVENPTk5fUChwKSAoQ09O U1AgKFhQUk9DRVNTIChwKS0+Y2hpbGRwKSkKISAjZGVmaW5lIE5FVENPTk4xX1AocCkgKENPTlNQ ICgocCktPmNoaWxkcCkpCiAgI2Vsc2UKICAjZGVmaW5lIE5FVENPTk5fUChwKSAwCiAgI2RlZmlu ZSBORVRDT05OMV9QKHApIDAKICAjZW5kaWYgLyogSEFWRV9TT0NLRVRTICovCiAgCiAgLyogRGVm aW5lIGZpcnN0IGRlc2NyaXB0b3IgbnVtYmVyIGF2YWlsYWJsZSBmb3Igc3VicHJvY2Vzc2VzLiAg Ki8KLS0tIDE1OSwxNzQgLS0tLQogIC8qIFFDZmlsdGVyIGlzIGRlZmluZWQgaW4ga2V5Ym9hcmQu Yy4gICovCiAgZXh0ZXJuIExpc3BfT2JqZWN0IFFDZmlsdGVyOwogIAogICNpZmRlZiBIQVZFX1NP Q0tFVFMKISAjZGVmaW5lIE5FVENPTk5fUChwKSAoRVEgKFhQUk9DRVNTIChwKS0+dHlwZSwgUW5l dHdvcmspKQohICNkZWZpbmUgTkVUQ09OTjFfUChwKSAoRVEgKChwKS0+dHlwZSwgUW5ldHdvcmsp KQohICNkZWZpbmUgU0VSSUFMQ09OTl9QKHApIChFUSAoWFBST0NFU1MgKHApLT50eXBlLCBRc2Vy aWFsKSkKISAjZGVmaW5lIFNFUklBTENPTk4xX1AocCkgKEVRICgocCktPnR5cGUsIFFzZXJpYWwp KQogICNlbHNlCiAgI2RlZmluZSBORVRDT05OX1AocCkgMAogICNkZWZpbmUgTkVUQ09OTjFfUChw KSAwCisgI2RlZmluZSBTRVJJQUxDT05OX1AocCkgMAorICNkZWZpbmUgU0VSSUFMQ09OTjFfUChw KSAwCiAgI2VuZGlmIC8qIEhBVkVfU09DS0VUUyAqLwogIAogIC8qIERlZmluZSBmaXJzdCBkZXNj cmlwdG9yIG51bWJlciBhdmFpbGFibGUgZm9yIHN1YnByb2Nlc3Nlcy4gICovCioqKioqKioqKioq KioqKiBleHRlcm4gTGlzcF9PYmplY3QgUUNmaWx0ZXI7CioqKiAxODYsMTkxICoqKioKLS0tIDE5 MSwyMDcgLS0tLQogIAogIGV4dGVybiBjaGFyICpnZXRfb3BlcmF0aW5nX3N5c3RlbV9yZWxlYXNl ICgpOwogIAorIC8qIFNlcmlhbCBwcm9jZXNzZXMgcmVxdWlyZSB0ZXJtaW9zIG9yIFdpbmRvd3Mu ICAqLworICNpZiBkZWZpbmVkIChIQVZFX1RFUk1JT1MpIHx8IGRlZmluZWQgKFdJTkRPV1NOVCkK KyAjZGVmaW5lIEhBVkVfU0VSSUFMCisgI2VuZGlmCisgCisgI2lmZGVmIEhBVkVfU0VSSUFMCisg LyogRnJvbSBzeXNkZXAuYyBvciB3MzIuYyAgKi8KKyBleHRlcm4gaW50IHNlcmlhbF9vcGVuIChj aGFyICpwb3J0KTsKKyBleHRlcm4gdm9pZCBzZXJpYWxfY29uZmlndXJlIChzdHJ1Y3QgTGlzcF9Q cm9jZXNzICpwLCBMaXNwX09iamVjdCBjb250YWN0KTsKKyAjZW5kaWYKKyAKICAjaWZuZGVmIFVT RV9DUlRfRExMCiAgZXh0ZXJuIGludCBlcnJubzsKICAjZW5kaWYKKioqKioqKioqKioqKioqIG5p bCwgaW5kaWNhdGluZyB0aGUgY3VycmVudCBidWZmZXIncyBwcm8KKioqIDc4NCw3OTAgKioqKgog ICAgcCA9IFhQUk9DRVNTIChwcm9jZXNzKTsKICAKICAgIHAtPnJhd19zdGF0dXNfbmV3ID0gMDsK ISAgIGlmIChORVRDT05OMV9QIChwKSkKICAgICAgewogICAgICAgIHAtPnN0YXR1cyA9IEZjb25z IChRZXhpdCwgRmNvbnMgKG1ha2VfbnVtYmVyICgwKSwgUW5pbCkpOwogICAgICAgIHAtPnRpY2sg PSArK3Byb2Nlc3NfdGljazsKLS0tIDgwMCw4MDYgLS0tLQogICAgcCA9IFhQUk9DRVNTIChwcm9j ZXNzKTsKICAKICAgIHAtPnJhd19zdGF0dXNfbmV3ID0gMDsKISAgIGlmIChORVRDT05OMV9QIChw KSB8fCBTRVJJQUxDT05OMV9QIChwKSkKICAgICAgewogICAgICAgIHAtPnN0YXR1cyA9IEZjb25z IChRZXhpdCwgRmNvbnMgKG1ha2VfbnVtYmVyICgwKSwgUW5pbCkpOwogICAgICAgIHAtPnRpY2sg PSArK3Byb2Nlc3NfdGljazsKKioqKioqKioqKioqKioqIG5pbCwgaW5kaWNhdGluZyB0aGUgY3Vy cmVudCBidWZmZXIncyBwcm8KKioqIDg2MSw4NjcgKioqKgogICAgc3RhdHVzID0gcC0+c3RhdHVz OwogICAgaWYgKENPTlNQIChzdGF0dXMpKQogICAgICBzdGF0dXMgPSBYQ0FSIChzdGF0dXMpOwoh ICAgaWYgKE5FVENPTk4xX1AgKHApKQogICAgICB7CiAgICAgICAgaWYgKEVRIChzdGF0dXMsIFFl eGl0KSkKICAJc3RhdHVzID0gUWNsb3NlZDsKLS0tIDg3Nyw4ODMgLS0tLQogICAgc3RhdHVzID0g cC0+c3RhdHVzOwogICAgaWYgKENPTlNQIChzdGF0dXMpKQogICAgICBzdGF0dXMgPSBYQ0FSIChz dGF0dXMpOwohICAgaWYgKE5FVENPTk4xX1AgKHApIHx8IFNFUklBTENPTk4xX1AgKHApKQogICAg ICB7CiAgICAgICAgaWYgKEVRIChzdGF0dXMsIFFleGl0KSkKICAJc3RhdHVzID0gUWNsb3NlZDsK KioqKioqKioqKioqKioqIERFRlVOICgicHJvY2Vzcy1jb21tYW5kIiwgRnByb2Nlc3NfY29tbWEK KioqIDkxOSw5MjUgKioqKgogICAgICAgICBkb2M6IC8qIFJldHVybiB0aGUgY29tbWFuZCB0aGF0 IHdhcyBleGVjdXRlZCB0byBzdGFydCBQUk9DRVNTLgogIFRoaXMgaXMgYSBsaXN0IG9mIHN0cmlu Z3MsIHRoZSBmaXJzdCBzdHJpbmcgYmVpbmcgdGhlIHByb2dyYW0gZXhlY3V0ZWQKICBhbmQgdGhl IHJlc3Qgb2YgdGhlIHN0cmluZ3MgYmVpbmcgdGhlIGFyZ3VtZW50cyBnaXZlbiB0byBpdC4KISBG b3IgYSBub24tY2hpbGQgY2hhbm5lbCwgdGhpcyBpcyBuaWwuICAqLykKICAgICAgIChwcm9jZXNz KQogICAgICAgcmVnaXN0ZXIgTGlzcF9PYmplY3QgcHJvY2VzczsKICB7Ci0tLSA5MzUsOTQyIC0t LS0KICAgICAgICAgZG9jOiAvKiBSZXR1cm4gdGhlIGNvbW1hbmQgdGhhdCB3YXMgZXhlY3V0ZWQg dG8gc3RhcnQgUFJPQ0VTUy4KICBUaGlzIGlzIGEgbGlzdCBvZiBzdHJpbmdzLCB0aGUgZmlyc3Qg c3RyaW5nIGJlaW5nIHRoZSBwcm9ncmFtIGV4ZWN1dGVkCiAgYW5kIHRoZSByZXN0IG9mIHRoZSBz dHJpbmdzIGJlaW5nIHRoZSBhcmd1bWVudHMgZ2l2ZW4gdG8gaXQuCiEgRm9yIGEgbmV0d29yayBv ciBzZXJpYWwgcHJvY2VzcywgdGhpcyBpcyBuaWwgKHByb2Nlc3MgaXMgcnVubmluZykgb3IgdAoh IFwocHJvY2VzcyBpcyBzdG9wcGVkKS4gICovKQogICAgICAgKHByb2Nlc3MpCiAgICAgICByZWdp c3RlciBMaXNwX09iamVjdCBwcm9jZXNzOwogIHsKKioqKioqKioqKioqKioqIERFRlVOICgic2V0 LXByb2Nlc3MtYnVmZmVyIiwgRnNldF9wcm9jZXMKKioqIDk1MSw5NTcgKioqKgogICAgICBDSEVD S19CVUZGRVIgKGJ1ZmZlcik7CiAgICBwID0gWFBST0NFU1MgKHByb2Nlc3MpOwogICAgcC0+YnVm ZmVyID0gYnVmZmVyOwohICAgaWYgKE5FVENPTk4xX1AgKHApKQogICAgICBwLT5jaGlsZHAgPSBG cGxpc3RfcHV0IChwLT5jaGlsZHAsIFFDYnVmZmVyLCBidWZmZXIpOwogICAgc2V0dXBfcHJvY2Vz c19jb2Rpbmdfc3lzdGVtcyAocHJvY2Vzcyk7CiAgICByZXR1cm4gYnVmZmVyOwotLS0gOTY4LDk3 NCAtLS0tCiAgICAgIENIRUNLX0JVRkZFUiAoYnVmZmVyKTsKICAgIHAgPSBYUFJPQ0VTUyAocHJv Y2Vzcyk7CiAgICBwLT5idWZmZXIgPSBidWZmZXI7CiEgICBpZiAoTkVUQ09OTjFfUCAocCkgfHwg U0VSSUFMQ09OTjFfUCAocCkpCiAgICAgIHAtPmNoaWxkcCA9IEZwbGlzdF9wdXQgKHAtPmNoaWxk cCwgUUNidWZmZXIsIGJ1ZmZlcik7CiAgICBzZXR1cF9wcm9jZXNzX2NvZGluZ19zeXN0ZW1zIChw cm9jZXNzKTsKICAgIHJldHVybiBidWZmZXI7CioqKioqKioqKioqKioqKiBUaGUgc3RyaW5nIGFy Z3VtZW50IGlzIG5vcm1hbGx5IGEgbXVsdGliCioqKiAxMDE4LDEwMjQgKioqKgogIAkgIEZEX0NM UiAocC0+aW5mZCwgJm5vbl9rZXlib2FyZF93YWl0X21hc2spOwogIAl9CiAgICAgICAgZWxzZSBp ZiAoRVEgKHAtPmZpbHRlciwgUXQpCiEgCSAgICAgICAmJiAhRVEgKHAtPmNvbW1hbmQsIFF0KSkg LyogTmV0d29yayBwcm9jZXNzIG5vdCBzdG9wcGVkLiAqLwogIAl7CiAgCSAgRkRfU0VUIChwLT5p bmZkLCAmaW5wdXRfd2FpdF9tYXNrKTsKICAJICBGRF9TRVQgKHAtPmluZmQsICZub25fa2V5Ym9h cmRfd2FpdF9tYXNrKTsKLS0tIDEwMzUsMTA0MiAtLS0tCiAgCSAgRkRfQ0xSIChwLT5pbmZkLCAm bm9uX2tleWJvYXJkX3dhaXRfbWFzayk7CiAgCX0KICAgICAgICBlbHNlIGlmIChFUSAocC0+Zmls dGVyLCBRdCkKISAJICAgICAgIC8qIE5ldHdvcmsgb3Igc2VyaWFsIHByb2Nlc3Mgbm90IHN0b3Bw ZWQ6ICAqLwohIAkgICAgICAgJiYgIUVRIChwLT5jb21tYW5kLCBRdCkpCiAgCXsKICAJICBGRF9T RVQgKHAtPmluZmQsICZpbnB1dF93YWl0X21hc2spOwogIAkgIEZEX1NFVCAocC0+aW5mZCwgJm5v bl9rZXlib2FyZF93YWl0X21hc2spOwoqKioqKioqKioqKioqKiogVGhlIHN0cmluZyBhcmd1bWVu dCBpcyBub3JtYWxseSBhIG11bHRpYgoqKiogMTAyNiwxMDMyICoqKioKICAgICAgfQogIAogICAg cC0+ZmlsdGVyID0gZmlsdGVyOwohICAgaWYgKE5FVENPTk4xX1AgKHApKQogICAgICBwLT5jaGls ZHAgPSBGcGxpc3RfcHV0IChwLT5jaGlsZHAsIFFDZmlsdGVyLCBmaWx0ZXIpOwogICAgc2V0dXBf cHJvY2Vzc19jb2Rpbmdfc3lzdGVtcyAocHJvY2Vzcyk7CiAgICByZXR1cm4gZmlsdGVyOwotLS0g MTA0NCwxMDUwIC0tLS0KICAgICAgfQogIAogICAgcC0+ZmlsdGVyID0gZmlsdGVyOwohICAgaWYg KE5FVENPTk4xX1AgKHApIHx8IFNFUklBTENPTk4xX1AgKHApKQogICAgICBwLT5jaGlsZHAgPSBG cGxpc3RfcHV0IChwLT5jaGlsZHAsIFFDZmlsdGVyLCBmaWx0ZXIpOwogICAgc2V0dXBfcHJvY2Vz c19jb2Rpbmdfc3lzdGVtcyAocHJvY2Vzcyk7CiAgICByZXR1cm4gZmlsdGVyOwoqKioqKioqKioq KioqKiogSXQgZ2V0cyB0d28gYXJndW1lbnRzOiB0aGUgcHJvY2VzcywgYW5kIAoqKiogMTA1Nywx MDYzICoqKioKICAgIHAgPSBYUFJPQ0VTUyAocHJvY2Vzcyk7CiAgCiAgICBwLT5zZW50aW5lbCA9 IHNlbnRpbmVsOwohICAgaWYgKE5FVENPTk4xX1AgKHApKQogICAgICBwLT5jaGlsZHAgPSBGcGxp c3RfcHV0IChwLT5jaGlsZHAsIFFDc2VudGluZWwsIHNlbnRpbmVsKTsKICAgIHJldHVybiBzZW50 aW5lbDsKICB9Ci0tLSAxMDc1LDEwODEgLS0tLQogICAgcCA9IFhQUk9DRVNTIChwcm9jZXNzKTsK ICAKICAgIHAtPnNlbnRpbmVsID0gc2VudGluZWw7CiEgICBpZiAoTkVUQ09OTjFfUCAocCkgfHwg U0VSSUFMQ09OTjFfUCAocCkpCiAgICAgIHAtPmNoaWxkcCA9IEZwbGlzdF9wdXQgKHAtPmNoaWxk cCwgUUNzZW50aW5lbCwgc2VudGluZWwpOwogICAgcmV0dXJuIHNlbnRpbmVsOwogIH0KKioqKioq KioqKioqKioqIExpc3BfT2JqZWN0IEZwcm9jZXNzX2RhdGFncmFtX2FkZHJlc3MgKCkKKioqIDEx NjIsMTE3MiAqKioqCiAgREVGVU4gKCJwcm9jZXNzLWNvbnRhY3QiLCBGcHJvY2Vzc19jb250YWN0 LCBTcHJvY2Vzc19jb250YWN0LAogICAgICAgICAxLCAyLCAwLAogICAgICAgICBkb2M6IC8qIFJl dHVybiB0aGUgY29udGFjdCBpbmZvIG9mIFBST0NFU1M7IHQgZm9yIGEgcmVhbCBjaGlsZC4KISBG b3IgYSBuZXQgY29ubmVjdGlvbiwgdGhlIHZhbHVlIGRlcGVuZHMgb24gdGhlIG9wdGlvbmFsIEtF WSBhcmcuCiEgSWYgS0VZIGlzIG5pbCwgdmFsdWUgaXMgYSBjb25zIGNlbGwgb2YgdGhlIGZvcm0g KEhPU1QgU0VSVklDRSksCiEgaWYgS0VZIGlzIHQsIHRoZSBjb21wbGV0ZSBjb250YWN0IGluZm9y bWF0aW9uIGZvciB0aGUgY29ubmVjdGlvbiBpcwohIHJldHVybmVkLCBlbHNlIHRoZSBzcGVjaWZp YyB2YWx1ZSBmb3IgdGhlIGtleXdvcmQgS0VZIGlzIHJldHVybmVkLgohIFNlZSBgbWFrZS1uZXR3 b3JrLXByb2Nlc3MnIGZvciBhIGxpc3Qgb2Yga2V5d29yZHMuICAqLykKICAgICAgIChwcm9jZXNz LCBrZXkpCiAgICAgICByZWdpc3RlciBMaXNwX09iamVjdCBwcm9jZXNzLCBrZXk7CiAgewotLS0g MTE4MCwxMTkyIC0tLS0KICBERUZVTiAoInByb2Nlc3MtY29udGFjdCIsIEZwcm9jZXNzX2NvbnRh Y3QsIFNwcm9jZXNzX2NvbnRhY3QsCiAgICAgICAgIDEsIDIsIDAsCiAgICAgICAgIGRvYzogLyog UmV0dXJuIHRoZSBjb250YWN0IGluZm8gb2YgUFJPQ0VTUzsgdCBmb3IgYSByZWFsIGNoaWxkLgoh IEZvciBhIG5ldHdvcmsgb3Igc2VyaWFsIGNvbm5lY3Rpb24sIHRoZSB2YWx1ZSBkZXBlbmRzIG9u IHRoZSBvcHRpb25hbAohIEtFWSBhcmcuICBJZiBLRVkgaXMgbmlsLCB2YWx1ZSBpcyBhIGNvbnMg Y2VsbCBvZiB0aGUgZm9ybSAoSE9TVAohIFNFUlZJQ0UpIGZvciBhIG5ldHdvcmsgY29ubmVjdGlv biBvciAoUE9SVCBTUEVFRCkgZm9yIGEgc2VyaWFsCiEgY29ubmVjdGlvbi4gIElmIEtFWSBpcyB0 LCB0aGUgY29tcGxldGUgY29udGFjdCBpbmZvcm1hdGlvbiBmb3IgdGhlCiEgY29ubmVjdGlvbiBp cyByZXR1cm5lZCwgZWxzZSB0aGUgc3BlY2lmaWMgdmFsdWUgZm9yIHRoZSBrZXl3b3JkIEtFWSBp cwohIHJldHVybmVkLiAgU2VlIGBtYWtlLW5ldHdvcmstcHJvY2Vzcycgb3IgYG1ha2Utc2VyaWFs LXByb2Nlc3MnIGZvciBhCiEgbGlzdCBvZiBrZXl3b3Jkcy4gICovKQogICAgICAgKHByb2Nlc3Ms IGtleSkKICAgICAgIHJlZ2lzdGVyIExpc3BfT2JqZWN0IHByb2Nlc3MsIGtleTsKICB7CioqKioq KioqKioqKioqKiBTZWUgYG1ha2UtbmV0d29yay1wcm9jZXNzJyBmb3IgYSBsaXN0IG9mCioqKiAx MTgyLDExOTIgKioqKgogIAkJCSAgRnByb2Nlc3NfZGF0YWdyYW1fYWRkcmVzcyAocHJvY2Vzcykp OwogICNlbmRpZgogIAohICAgaWYgKCFORVRDT05OX1AgKHByb2Nlc3MpIHx8IEVRIChrZXksIFF0 KSkKICAgICAgcmV0dXJuIGNvbnRhY3Q7CiEgICBpZiAoTklMUCAoa2V5KSkKICAgICAgcmV0dXJu IEZjb25zIChGcGxpc3RfZ2V0IChjb250YWN0LCBRQ2hvc3QpLAogIAkJICBGY29ucyAoRnBsaXN0 X2dldCAoY29udGFjdCwgUUNzZXJ2aWNlKSwgUW5pbCkpOwogICAgcmV0dXJuIEZwbGlzdF9nZXQg KGNvbnRhY3QsIGtleSk7CiAgfQogIAotLS0gMTIwMiwxMjE1IC0tLS0KICAJCQkgIEZwcm9jZXNz X2RhdGFncmFtX2FkZHJlc3MgKHByb2Nlc3MpKTsKICAjZW5kaWYKICAKISAgIGlmICgoIU5FVENP Tk5fUCAocHJvY2VzcykgJiYgIVNFUklBTENPTk5fUCAocHJvY2VzcykpIHx8IEVRIChrZXksIFF0 KSkKICAgICAgcmV0dXJuIGNvbnRhY3Q7CiEgICBpZiAoTklMUCAoa2V5KSAmJiBORVRDT05OX1Ag KHByb2Nlc3MpKQogICAgICByZXR1cm4gRmNvbnMgKEZwbGlzdF9nZXQgKGNvbnRhY3QsIFFDaG9z dCksCiAgCQkgIEZjb25zIChGcGxpc3RfZ2V0IChjb250YWN0LCBRQ3NlcnZpY2UpLCBRbmlsKSk7 CisgICBpZiAoTklMUCAoa2V5KSAmJiBTRVJJQUxDT05OX1AgKHByb2Nlc3MpKQorICAgICByZXR1 cm4gRmNvbnMgKEZwbGlzdF9nZXQgKGNvbnRhY3QsIFFDcG9ydCksCisgCQkgIEZjb25zIChGcGxp c3RfZ2V0IChjb250YWN0LCBRQ3NwZWVkKSwgUW5pbCkpOwogICAgcmV0dXJuIEZwbGlzdF9nZXQg KGNvbnRhY3QsIGtleSk7CiAgfQogIAoqKioqKioqKioqKioqKiogYSBzb2NrZXQgY29ubmVjdGlv bi4gICovKQoqKiogMTIyNSwxMjMwICoqKioKLS0tIDEyNDgsMTI2NiAtLS0tCiAgICByZXR1cm4g WFBST0NFU1MgKHByb2Nlc3MpLT50eXBlOwogIH0KICAjZW5kaWYKKyAgIAorIERFRlVOICgicHJv Y2Vzcy10eXBlIiwgRnByb2Nlc3NfdHlwZSwgU3Byb2Nlc3NfdHlwZSwgMSwgMSwgMCwKKyAgICAg ICAgZG9jOiAvKiBSZXR1cm4gdGhlIGNvbm5lY3Rpb24gdHlwZSBvZiBQUk9DRVNTLgorIFRoZSB2 YWx1ZSBpcyBlaXRoZXIgdGhlIHN5bWJvbCBgcmVhbCcsIGBuZXR3b3JrJywgb3IgYHNlcmlhbCcu CisgUFJPQ0VTUyBtYXkgYmUgYSBwcm9jZXNzLCBhIGJ1ZmZlciwgdGhlIG5hbWUgb2YgYSBwcm9j ZXNzIG9yIGJ1ZmZlciwgb3IKKyBuaWwsIGluZGljYXRpbmcgdGhlIGN1cnJlbnQgYnVmZmVyJ3Mg cHJvY2Vzcy4gICovKQorICAgICAgKHByb2Nlc3MpCisgICAgICBMaXNwX09iamVjdCBwcm9jZXNz OworIHsKKyAgIExpc3BfT2JqZWN0IHByb2M7CisgICBwcm9jID0gZ2V0X3Byb2Nlc3MgKHByb2Nl c3MpOworICAgcmV0dXJuIFhQUk9DRVNTIChwcm9jKS0+dHlwZTsKKyB9CiAgCiAgI2lmZGVmIEhB VkVfU09DS0VUUwogIERFRlVOICgiZm9ybWF0LW5ldHdvcmstYWRkcmVzcyIsIEZmb3JtYXRfbmV0 d29ya19hZGRyZXNzLCBTZm9ybWF0X25ldHdvcmtfYWRkcmVzcywKKioqKioqKioqKioqKioqIGxp c3RfcHJvY2Vzc2VzXzEgKHF1ZXJ5X29ubHkpCioqKiAxMzI1LDEzMzEgKioqKgogIAogICAgICAg IHByb2MgPSBGY2RyIChYQ0FSICh0YWlsKSk7CiAgICAgICAgcCA9IFhQUk9DRVNTIChwcm9jKTsK ISAgICAgICBpZiAoTklMUCAocC0+Y2hpbGRwKSkKICAJY29udGludWU7CiAgICAgICAgaWYgKCFO SUxQIChxdWVyeV9vbmx5KSAmJiBwLT5raWxsX3dpdGhvdXRfcXVlcnkpCiAgCWNvbnRpbnVlOwot LS0gMTM2MSwxMzY3IC0tLS0KICAKICAgICAgICBwcm9jID0gRmNkciAoWENBUiAodGFpbCkpOwog ICAgICAgIHAgPSBYUFJPQ0VTUyAocHJvYyk7CiEgICAgICAgaWYgKE5JTFAgKHAtPnR5cGUpKQog IAljb250aW51ZTsKICAgICAgICBpZiAoIU5JTFAgKHF1ZXJ5X29ubHkpICYmIHAtPmtpbGxfd2l0 aG91dF9xdWVyeSkKICAJY29udGludWU7CioqKioqKioqKioqKioqKiBsaXN0X3Byb2Nlc3Nlc18x IChxdWVyeV9vbmx5KQoqKiogMTM5MywxMzk5ICoqKioKICAKICAgICAgICBwcm9jID0gRmNkciAo WENBUiAodGFpbCkpOwogICAgICAgIHAgPSBYUFJPQ0VTUyAocHJvYyk7CiEgICAgICAgaWYgKE5J TFAgKHAtPmNoaWxkcCkpCiAgCWNvbnRpbnVlOwogICAgICAgIGlmICghTklMUCAocXVlcnlfb25s eSkgJiYgcC0+a2lsbF93aXRob3V0X3F1ZXJ5KQogIAljb250aW51ZTsKLS0tIDE0MjksMTQzNSAt LS0tCiAgCiAgICAgICAgcHJvYyA9IEZjZHIgKFhDQVIgKHRhaWwpKTsKICAgICAgICBwID0gWFBS T0NFU1MgKHByb2MpOwohICAgICAgIGlmIChOSUxQIChwLT50eXBlKSkKICAJY29udGludWU7CiAg ICAgICAgaWYgKCFOSUxQIChxdWVyeV9vbmx5KSAmJiBwLT5raWxsX3dpdGhvdXRfcXVlcnkpCiAg CWNvbnRpbnVlOwoqKioqKioqKioqKioqKiogbGlzdF9wcm9jZXNzZXNfMSAocXVlcnlfb25seSkK KioqIDE0MTgsMTQyNCAqKioqCiAgI2VuZGlmCiAgCSAgICBGcHJpbmMgKHN5bWJvbCwgUW5pbCk7 CiAgCX0KISAgICAgICBlbHNlIGlmIChORVRDT05OMV9QIChwKSkKICAJewogIAkgIGlmIChFUSAo c3ltYm9sLCBRZXhpdCkpCiAgCSAgICB3cml0ZV9zdHJpbmcgKCJjbG9zZWQiLCAtMSk7Ci0tLSAx NDU0LDE0NjAgLS0tLQogICNlbmRpZgogIAkgICAgRnByaW5jIChzeW1ib2wsIFFuaWwpOwogIAl9 CiEgICAgICAgZWxzZSBpZiAoTkVUQ09OTjFfUCAocCkgfHwgU0VSSUFMQ09OTjFfUCAocCkpCiAg CXsKICAJICBpZiAoRVEgKHN5bWJvbCwgUWV4aXQpKQogIAkgICAgd3JpdGVfc3RyaW5nICgiY2xv c2VkIiwgLTEpOwoqKioqKioqKioqKioqKiogbGlzdF9wcm9jZXNzZXNfMSAocXVlcnlfb25seSkK KioqIDE0MjksMTQzNCAqKioqCi0tLSAxNDY1LDE0NzQgLS0tLQogIAkgIGVsc2UKICAJICAgIEZw cmluYyAoc3ltYm9sLCBRbmlsKTsKICAJfQorICAgICAgIGVsc2UgaWYgKFNFUklBTENPTk4xX1Ag KHApKQorIAl7CisgCSAgd3JpdGVfc3RyaW5nICgicnVubmluZyIsIC0xKTsKKyAJfQogICAgICAg IGVsc2UKICAJRnByaW5jIChzeW1ib2wsIFFuaWwpOwogIAoqKioqKioqKioqKioqKiogbGlzdF9w cm9jZXNzZXNfMSAocXVlcnlfb25seSkKKioqIDE0OTMsMTQ5OCAqKioqCi0tLSAxNTMzLDE1NTQg LS0tLQogIAkJICAgKFNUUklOR1AgKGhvc3QpID8gKGNoYXIgKilTREFUQSAoaG9zdCkgOiAiPyIp KTsKICAJICBpbnNlcnRfc3RyaW5nICh0ZW1idWYpOwogICAgICAgICAgfQorICAgICAgIGVsc2Ug aWYgKFNFUklBTENPTk4xX1AgKHApKQorIAl7CisgCSAgTGlzcF9PYmplY3QgcG9ydCA9IEZwbGlz dF9nZXQgKHAtPmNoaWxkcCwgUUNwb3J0KTsKKyAJICBMaXNwX09iamVjdCBzcGVlZCA9IEZwbGlz dF9nZXQgKHAtPmNoaWxkcCwgUUNzcGVlZCk7CisgCSAgaW5zZXJ0X3N0cmluZyAoIihzZXJpYWwg cG9ydCAiKTsKKyAJICBpZiAoU1RSSU5HUCAocG9ydCkpCisgCSAgICBpbnNlcnRfc3RyaW5nIChT REFUQSAocG9ydCkpOworIAkgIGVsc2UKKyAJICAgIGluc2VydF9zdHJpbmcgKCI/Iik7CisgCSAg aWYgKElOVEVHRVJQIChzcGVlZCkpCisgCSAgICB7CisgCSAgICAgIHNwcmludGYgKHRlbWJ1Ziwg IiBhdCAlZCBiL3MiLCBYSU5UIChzcGVlZCkpOworIAkgICAgICBpbnNlcnRfc3RyaW5nICh0ZW1i dWYpOworIAkgICAgfQorIAkgIGluc2VydF9zdHJpbmcgKCIpXG4iKTsKKyAJfQogICAgICAgIGVs c2UKICAJewogIAkgIHRlbSA9IHAtPmNvbW1hbmQ7CioqKioqKioqKioqKioqKiB1c2FnZTogKHN0 YXJ0LXByb2Nlc3MgTkFNRSBCVUZGRVIgUFJPR1JBCioqKiAxNjE5LDE2MjQgKioqKgotLS0gMTY3 NSwxNjgxIC0tLS0KICAKICAgIFhQUk9DRVNTIChwcm9jKS0+Y2hpbGRwID0gUXQ7CiAgICBYUFJP Q0VTUyAocHJvYyktPnBsaXN0ID0gUW5pbDsKKyAgIFhQUk9DRVNTIChwcm9jKS0+dHlwZSA9IFFy ZWFsOwogICAgWFBST0NFU1MgKHByb2MpLT5idWZmZXIgPSBidWZmZXI7CiAgICBYUFJPQ0VTUyAo cHJvYyktPnNlbnRpbmVsID0gUW5pbDsKICAgIFhQUk9DRVNTIChwcm9jKS0+ZmlsdGVyID0gUW5p bDsKKioqKioqKioqKioqKioqIHVud2luZF9yZXF1ZXN0X3NpZ2lvIChkdW1teSkKKioqIDI2NTYs MjY2MSAqKioqCi0tLSAyNzEzLDMwMjQgLS0tLQogIH0KICAjZW5kaWYKICAKKyAjaWZkZWYgSEFW RV9TRVJJQUwKKyBERUZVTiAoInNlcmlhbC1wcm9jZXNzLWNvbmZpZ3VyZSIsCisgICAgICAgIEZz ZXJpYWxfcHJvY2Vzc19jb25maWd1cmUsCisgICAgICAgIFNzZXJpYWxfcHJvY2Vzc19jb25maWd1 cmUsCisgICAgICAgIDAsIE1BTlksIDAsCisgICAgICAgIGRvYzogLyogQ29uZmlndXJlIHNwZWVk LCBieXRlc2l6ZSwgZXRjLiBvZiBhIHNlcmlhbCBwcm9jZXNzLgorIAorIEFyZ3VtZW50cyBhcmUg c3BlY2lmaWVkIGFzIGtleXdvcmQvYXJndW1lbnQgcGFpcnMuICBBdHRyaWJ1dGVzIHRoYXQKKyBh cmUgbm90IGdpdmVuIGFyZSByZS1pbml0aWFsaXplZCBmcm9tIHRoZSBwcm9jZXNzJ3MgY3VycmVu dAorIGNvbmZpZ3VyYXRpb24gKGF2YWlsYWJsZSB2aWEgdGhlIGZ1bmN0aW9uIGBwcm9jZXNzLWNv bnRhY3QnKSBvciBzZXQgdG8KKyByZWFzb25hYmxlIGRlZmF1bHQgdmFsdWVzLiAgVGhlIGZvbGxv d2luZyBhcmd1bWVudHMgYXJlIGRlZmluZWQ6CisgCisgOnByb2Nlc3MgUFJPQ0VTUworIDpuYW1l IE5BTUUKKyA6YnVmZmVyIEJVRkZFUgorIDpwb3J0IFBPUlQKKyAtLSBBbnkgb2YgdGhlc2UgYXJn dW1lbnRzIGNhbiBiZSBnaXZlbiB0byBpZGVudGlmeSB0aGUgcHJvY2VzcyB0aGF0IGlzCisgdG8g YmUgY29uZmlndXJlZC4gIElmIG5vbmUgb2YgdGhlc2UgYXJndW1lbnRzIGlzIGdpdmVuLCB0aGUg Y3VycmVudAorIGJ1ZmZlcidzIHByb2Nlc3MgaXMgdXNlZC4KKyAKKyA6c3BlZWQgU1BFRUQgLS0g U1BFRUQgaXMgdGhlIHNwZWVkIG9mIHRoZSBzZXJpYWwgcG9ydCBpbiBiaXRzIHBlcgorIHNlY29u ZCwgYWxzbyBjYWxsZWQgYmF1ZCByYXRlLiAgQW55IHZhbHVlIGNhbiBiZSBnaXZlbiBmb3IgU1BF RUQsIGJ1dAorIG1vc3Qgc2VyaWFsIHBvcnRzIHdvcmsgb25seSBhdCBhIGZldyBkZWZpbmVkIHZh bHVlcyBiZXR3ZWVuIDEyMDAgYW5kCisgMTE1MjAwLCB3aXRoIDk2MDAgYmVpbmcgdGhlIG1vc3Qg Y29tbW9uIHZhbHVlLiAgSWYgU1BFRUQgaXMgbmlsLCB0aGUKKyBzZXJpYWwgcG9ydCBpcyBub3Qg Y29uZmlndXJlZCBhbnkgZnVydGhlciwgaS5lLiwgYWxsIG90aGVyIGFyZ3VtZW50cworIGFyZSBp Z25vcmVkLiAgVGhpcyBtYXkgYmUgdXNlZnVsIGZvciBzcGVjaWFsIHNlcmlhbCBwb3J0cyBzdWNo IGFzCisgQmx1ZXRvb3RoLXRvLXNlcmlhbCBjb252ZXJ0ZXJzIHdoaWNoIGNhbiBvbmx5IGJlIGNv bmZpZ3VyZWQgdGhyb3VnaCBBVAorIGNvbW1hbmRzLiAgQSB2YWx1ZSBvZiBuaWwgZm9yIFNQRUVE IGNhbiBiZSB1c2VkIG9ubHkgd2hlbiBwYXNzZWQKKyB0aHJvdWdoIGBtYWtlLXNlcmlhbC1wcm9j ZXNzJyBvciBgc2VyaWFsLXRlcm0nLgorIAorIDpieXRlc2l6ZSBCWVRFU0laRSAtLSBCWVRFU0la RSBpcyB0aGUgbnVtYmVyIG9mIGJpdHMgcGVyIGJ5dGUsIHdoaWNoCisgY2FuIGJlIDcgb3IgOC4g IElmIEJZVEVTSVpFIGlzIG5vdCBnaXZlbiBvciBuaWwsIGEgdmFsdWUgb2YgOCBpcyB1c2VkLgor IAorIDpwYXJpdHkgUEFSSVRZIC0tIFBBUklUWSBjYW4gYmUgbmlsIChkb24ndCB1c2UgcGFyaXR5 KSwgdGhlIHN5bWJvbAorIGBvZGQnICh1c2Ugb2RkIHBhcml0eSksIG9yIHRoZSBzeW1ib2wgYGV2 ZW4nICh1c2UgZXZlbiBwYXJpdHkpLiAgSWYKKyBQQVJJVFkgaXMgbm90IGdpdmVuLCBubyBwYXJp dHkgaXMgdXNlZC4KKyAKKyA6c3RvcGJpdHMgU1RPUEJJVFMgLS0gU1RPUEJJVFMgaXMgdGhlIG51 bWJlciBvZiBzdG9wYml0cyB1c2VkIHRvCisgdGVybWluYXRlIGEgYnl0ZSB0cmFuc21pc3Npb24u ICBTVE9QQklUUyBjYW4gYmUgMSBvciAyLiAgSWYgU1RPUEJJVFMKKyBpcyBub3QgZ2l2ZW4gb3Ig bmlsLCAxIHN0b3BiaXQgaXMgdXNlZC4KKyAKKyA6Zmxvd2NvbnRyb2wgRkxPV0NPTlRST0wgLS0g RkxPV0NPTlRST0wgZGV0ZXJtaW5lcyB0aGUgdHlwZSBvZgorIGZsb3djb250cm9sIHRvIGJlIHVz ZWQsIHdoaWNoIGlzIGVpdGhlciBuaWwgKGRvbid0IHVzZSBmbG93Y29udHJvbCksCisgdGhlIHN5 bWJvbCBgaHcnICh1c2UgUlRTL0NUUyBoYXJkd2FyZSBmbG93Y29udHJvbCksIG9yIHRoZSBzeW1i b2wgYHN3JworIFwodXNlIFhPTi9YT0ZGIHNvZnR3YXJlIGZsb3djb250cm9sKS4gIElmIEZMT1dD T05UUk9MIGlzIG5vdCBnaXZlbiwgbm8KKyBmbG93Y29udHJvbCBpcyB1c2VkLgorIAorIGBzZXJp YWwtcHJvY2Vzcy1jb25maWd1cmUnIGlzIGNhbGxlZCBieSBgbWFrZS1zZXJpYWwtcHJvY2Vzcycg Zm9yIHRoZQorIGluaXRpYWwgY29uZmlndXJhdGlvbiBvZiB0aGUgc2VyaWFsIHBvcnQuCisgCisg RXhhbXBsZXM6CisgCisgXChzZXJpYWwtcHJvY2Vzcy1jb25maWd1cmUgOnByb2Nlc3MgIi9kZXYv dHR5UzAiIDpzcGVlZCAxMjAwKQorIAorIFwoc2VyaWFsLXByb2Nlc3MtY29uZmlndXJlCisgICAg IDpidWZmZXIgIkNPTTEiIDpzdG9wYml0cyAxIDpwYXJpdHkgJ29kZCA6Zmxvd2NvbnRyb2wgJ2h3 KQorIAorIFwoc2VyaWFsLXByb2Nlc3MtY29uZmlndXJlIDpwb3J0ICJcXFxcLlxcQ09NMTMiIDpi eXRlc2l6ZSA3KQorIAorIHVzYWdlOiAoc2VyaWFsLXByb2Nlc3MtY29uZmlndXJlICZyZXN0IEFS R1MpICAqLykKKyAgICAgIChuYXJncywgYXJncykKKyAgICAgIGludCBuYXJnczsKKyAgICAgIExp c3BfT2JqZWN0ICphcmdzOworIHsKKyAgIHN0cnVjdCBMaXNwX1Byb2Nlc3MgKnA7CisgICBMaXNw X09iamVjdCBjb250YWN0ID0gUW5pbDsKKyAgIExpc3BfT2JqZWN0IHByb2MgPSBRbmlsOworICAg c3RydWN0IGdjcHJvIGdjcHJvMTsKKyAKKyAgIGNvbnRhY3QgPSBGbGlzdCAobmFyZ3MsIGFyZ3Mp OworICAgR0NQUk8xIChjb250YWN0KTsKKyAKKyAgIHByb2MgPSBGcGxpc3RfZ2V0IChjb250YWN0 LCBRQ3Byb2Nlc3MpOworICAgaWYgKE5JTFAgKHByb2MpKQorICAgICBwcm9jID0gRnBsaXN0X2dl dCAoY29udGFjdCwgUUNuYW1lKTsKKyAgIGlmIChOSUxQIChwcm9jKSkKKyAgICAgcHJvYyA9IEZw bGlzdF9nZXQgKGNvbnRhY3QsIFFDYnVmZmVyKTsKKyAgIGlmIChOSUxQIChwcm9jKSkKKyAgICAg cHJvYyA9IEZwbGlzdF9nZXQgKGNvbnRhY3QsIFFDcG9ydCk7CisgICBwcm9jID0gZ2V0X3Byb2Nl c3MgKHByb2MpOworICAgcCA9IFhQUk9DRVNTIChwcm9jKTsKKyAgIGlmIChwLT50eXBlICE9IFFz ZXJpYWwpCisgICAgIGVycm9yICgiTm90IGEgc2VyaWFsIHByb2Nlc3MiKTsKKyAKKyAgIGlmIChO SUxQIChGcGxpc3RfZ2V0IChwLT5jaGlsZHAsIFFDc3BlZWQpKSkKKyAgICAgeworICAgICAgIFVO R0NQUk87CisgICAgICAgcmV0dXJuIFFuaWw7CisgICAgIH0KKyAKKyAgIHNlcmlhbF9jb25maWd1 cmUgKHAsIGNvbnRhY3QpOworIAorICAgVU5HQ1BSTzsKKyAgIHJldHVybiBRbmlsOworIH0KKyAj ZW5kaWYgLyogSEFWRV9TRVJJQUwgICovCisgCisgI2lmZGVmIEhBVkVfU0VSSUFMCisgLyogVXNl ZCBieSBtYWtlLXNlcmlhbC1wcm9jZXNzIHRvIHJlY292ZXIgZnJvbSBlcnJvcnMuICAqLworIExp c3BfT2JqZWN0IG1ha2Vfc2VyaWFsX3Byb2Nlc3NfdW53aW5kIChMaXNwX09iamVjdCBwcm9jKQor IHsKKyAgIGlmICghUFJPQ0VTU1AgKHByb2MpKQorICAgICBhYm9ydCAoKTsKKyAgIHJlbW92ZV9w cm9jZXNzIChwcm9jKTsKKyAgIHJldHVybiBRbmlsOworIH0KKyAjZW5kaWYgLyogSEFWRV9TRVJJ QUwgICovCisgCisgI2lmZGVmIEhBVkVfU0VSSUFMCisgREVGVU4gKCJtYWtlLXNlcmlhbC1wcm9j ZXNzIiwgRm1ha2Vfc2VyaWFsX3Byb2Nlc3MsIFNtYWtlX3NlcmlhbF9wcm9jZXNzLAorICAgICAg ICAwLCBNQU5ZLCAwLAorICAgICAgICBkb2M6IC8qIENyZWF0ZSBhbmQgcmV0dXJuIGEgc2VyaWFs IHBvcnQgcHJvY2Vzcy4KKyAKKyBJbiBFbWFjcywgc2VyaWFsIHBvcnQgY29ubmVjdGlvbnMgYXJl IHJlcHJlc2VudGVkIGJ5IHByb2Nlc3Mgb2JqZWN0cywKKyBzbyBpbnB1dCBhbmQgb3V0cHV0IHdv cmsgYXMgZm9yIHN1YnByb2Nlc3NlcywgYW5kIGBkZWxldGUtcHJvY2VzcycKKyBjbG9zZXMgYSBz ZXJpYWwgcG9ydCBjb25uZWN0aW9uLiAgSG93ZXZlciwgYSBzZXJpYWwgcHJvY2VzcyBoYXMgbm8K KyBwcm9jZXNzIGlkLCBpdCBjYW5ub3QgYmUgc2lnbmFsZWQsIGFuZCB0aGUgc3RhdHVzIGNvZGVz IGFyZSBkaWZmZXJlbnQKKyBmcm9tIG5vcm1hbCBwcm9jZXNzZXMuCisgCisgYG1ha2Utc2VyaWFs LXByb2Nlc3MnIGNyZWF0ZXMgYSBwcm9jZXNzIGFuZCBhIGJ1ZmZlciwgb24gd2hpY2ggeW91Cisg cHJvYmFibHkgd2FudCB0byB1c2UgYHByb2Nlc3Mtc2VuZC1zdHJpbmcnLiAgVHJ5IFxcW3Nlcmlh bC10ZXJtXSBmb3IKKyBhbiBpbnRlcmFjdGl2ZSB0ZXJtaW5hbC4gIFNlZSBiZWxvdyBmb3IgZXhh bXBsZXMuCisgCisgQXJndW1lbnRzIGFyZSBzcGVjaWZpZWQgYXMga2V5d29yZC9hcmd1bWVudCBw YWlycy4gIFRoZSBmb2xsb3dpbmcKKyBhcmd1bWVudHMgYXJlIGRlZmluZWQ6CisgCisgOnBvcnQg UE9SVCAtLSAobWFuZGF0b3J5KSBQT1JUIGlzIHRoZSBwYXRoIG9yIG5hbWUgb2YgdGhlIHNlcmlh bCBwb3J0LgorIEZvciBleGFtcGxlLCB0aGlzIGNvdWxkIGJlICIvZGV2L3R0eVMwIiBvbiBVbml4 LiAgT24gV2luZG93cywgdGhpcworIGNvdWxkIGJlICJDT00xIiwgb3IgIlxcXFwuXFxDT00xMCIg Zm9yIHBvcnRzIGhpZ2hlciB0aGFuIENPTTkgKGRvdWJsZQorIHRoZSBiYWNrc2xhc2hlcyBpbiBz dHJpbmdzKS4KKyAKKyA6c3BlZWQgU1BFRUQgLS0gKG1hbmRhdG9yeSkgaXMgaGFuZGxlZCBieSBg c2VyaWFsLXByb2Nlc3MtY29uZmlndXJlJywKKyB3aGljaCBpcyBjYWxsZWQgYnkgYG1ha2Utc2Vy aWFsLXByb2Nlc3MnLgorIAorIDpuYW1lIE5BTUUgLS0gTkFNRSBpcyB0aGUgbmFtZSBvZiB0aGUg cHJvY2Vzcy4gIElmIE5BTUUgaXMgbm90IGdpdmVuLAorIHRoZSB2YWx1ZSBvZiBQT1JUIGlzIHVz ZWQuCisgCisgOmJ1ZmZlciBCVUZGRVIgLS0gQlVGRkVSIGlzIHRoZSBidWZmZXIgKG9yIGJ1ZmZl ci1uYW1lKSB0byBhc3NvY2lhdGUKKyB3aXRoIHRoZSBwcm9jZXNzLiAgUHJvY2VzcyBvdXRwdXQg Z29lcyBhdCB0aGUgZW5kIG9mIHRoYXQgYnVmZmVyLAorIHVubGVzcyB5b3Ugc3BlY2lmeSBhbiBv dXRwdXQgc3RyZWFtIG9yIGZpbHRlciBmdW5jdGlvbiB0byBoYW5kbGUgdGhlCisgb3V0cHV0LiAg SWYgQlVGRkVSIGlzIG5vdCBnaXZlbiwgdGhlIHZhbHVlIG9mIE5BTUUgaXMgdXNlZC4KKyAKKyA6 Y29kaW5nIENPRElORyAtLSBJZiBDT0RJTkcgaXMgYSBzeW1ib2wsIGl0IHNwZWNpZmllcyB0aGUg Y29kaW5nCisgc3lzdGVtIHVzZWQgZm9yIGJvdGggcmVhZGluZyBhbmQgd3JpdGluZyBmb3IgdGhp cyBwcm9jZXNzLiAgSWYgQ09ESU5HCisgaXMgYSBjb25zIChERUNPRElORyAuIEVOQ09ESU5HKSwg REVDT0RJTkcgaXMgdXNlZCBmb3IgcmVhZGluZywgYW5kCisgRU5DT0RJTkcgaXMgdXNlZCBmb3Ig d3JpdGluZy4KKyAKKyA6bm9xdWVyeSBCT09MIC0tIFdoZW4gZXhpdGluZyBFbWFjcywgcXVlcnkg dGhlIHVzZXIgaWYgQk9PTCBpcyBuaWwgYW5kCisgdGhlIHByb2Nlc3MgaXMgcnVubmluZy4gIElm IEJPT0wgaXMgbm90IGdpdmVuLCBxdWVyeSBiZWZvcmUgZXhpdGluZy4KKyAKKyA6c3RvcCBCT09M IC0tIFN0YXJ0IHByb2Nlc3MgaW4gdGhlIGBzdG9wcGVkJyBzdGF0ZSBpZiBCT09MIGlzIG5vbi1u aWwuCisgSW4gdGhlIHN0b3BwZWQgc3RhdGUsIGEgc2VyaWFsIHByb2Nlc3MgZG9lcyBub3QgYWNj ZXB0IGluY29taW5nIGRhdGEsCisgYnV0IHlvdSBjYW4gc2VuZCBvdXRnb2luZyBkYXRhLiAgVGhl IHN0b3BwZWQgc3RhdGUgaXMgY2xlYXJlZCBieQorIGBjb250aW51ZS1wcm9jZXNzJyBhbmQgc2V0 IGJ5IGBzdG9wLXByb2Nlc3MnLgorIAorIDpmaWx0ZXIgRklMVEVSIC0tIEluc3RhbGwgRklMVEVS IGFzIHRoZSBwcm9jZXNzIGZpbHRlci4KKyAKKyA6c2VudGluZWwgU0VOVElORUwgLS0gSW5zdGFs bCBTRU5USU5FTCBhcyB0aGUgcHJvY2VzcyBzZW50aW5lbC4KKyAKKyA6cGxpc3QgUExJU1QgLS0g SW5zdGFsbCBQTElTVCBhcyB0aGUgaW5pdGlhbCBwbGlzdCBvZiB0aGUgcHJvY2Vzcy4KKyAKKyA6 c3BlZWQKKyA6Ynl0ZXNpemUKKyA6cGFyaXR5CisgOnN0b3BiaXRzCisgOmZsb3djb250cm9sCisg LS0gVGhlc2UgYXJndW1lbnRzIGFyZSBoYW5kbGVkIGJ5IGBzZXJpYWwtcHJvY2Vzcy1jb25maWd1 cmUnLCB3aGljaCBpcworIGNhbGxlZCBieSBgbWFrZS1zZXJpYWwtcHJvY2VzcycuCisgCisgVGhl IG9yaWdpbmFsIGFyZ3VtZW50IGxpc3QsIHBvc3NpYmx5IG1vZGlmaWVkIGJ5IGxhdGVyIGNvbmZp Z3VyYXRpb24sCisgaXMgYXZhaWxhYmxlIHZpYSB0aGUgZnVuY3Rpb24gYHByb2Nlc3MtY29udGFj dCcuCisgCisgRXhhbXBsZXM6CisgCisgXChtYWtlLXNlcmlhbC1wcm9jZXNzIDpwb3J0ICIvZGV2 L3R0eVMwIiA6c3BlZWQgOTYwMCkKKyAKKyBcKG1ha2Utc2VyaWFsLXByb2Nlc3MgOnBvcnQgIkNP TTEiIDpzcGVlZCAxMTUyMDAgOnN0b3BiaXRzIDIpCisgCisgXChtYWtlLXNlcmlhbC1wcm9jZXNz IDpwb3J0ICJcXFxcLlxcQ09NMTMiIDpzcGVlZCAxMjAwIDpieXRlc2l6ZSA3IDpwYXJpdHkgJ29k ZCkKKyAKKyBcKG1ha2Utc2VyaWFsLXByb2Nlc3MgOnBvcnQgIi9kZXYvdHR5LkJsdWVDb25zb2xl LVNQUC0xIiA6c3BlZWQgbmlsKQorIAorIHVzYWdlOiAgKG1ha2Utc2VyaWFsLXByb2Nlc3MgJnJl c3QgQVJHUykgICovKQorICAgICAgKG5hcmdzLCBhcmdzKQorICAgICAgaW50IG5hcmdzOworICAg ICAgTGlzcF9PYmplY3QgKmFyZ3M7CisgeworICAgaW50IGZkID0gLTE7CisgICBMaXNwX09iamVj dCBwcm9jLCBjb250YWN0LCBwb3J0OworICAgc3RydWN0IExpc3BfUHJvY2VzcyAqcDsKKyAgIHN0 cnVjdCBnY3BybyBnY3BybzE7CisgICBMaXNwX09iamVjdCBuYW1lLCBidWZmZXI7CisgICBMaXNw X09iamVjdCB0ZW0sIHZhbDsKKyAgIGludCBzcGVjcGRsX2NvdW50ID0gLTE7CisgCisgICBpZiAo bmFyZ3MgPT0gMCkKKyAgICAgcmV0dXJuIFFuaWw7CisgCisgICBjb250YWN0ID0gRmxpc3QgKG5h cmdzLCBhcmdzKTsKKyAgIEdDUFJPMSAoY29udGFjdCk7CisgCisgICBwb3J0ID0gRnBsaXN0X2dl dCAoY29udGFjdCwgUUNwb3J0KTsKKyAgIGlmIChOSUxQIChwb3J0KSkKKyAgICAgZXJyb3IgKCJO byBwb3J0IHNwZWNpZmllZCIpOworICAgQ0hFQ0tfU1RSSU5HIChwb3J0KTsKKyAKKyAgIGlmIChO SUxQIChGcGxpc3RfbWVtYmVyIChjb250YWN0LCBRQ3NwZWVkKSkpCisgICAgIGVycm9yICgiOnNw ZWVkIG5vdCBzcGVjaWZpZWQiKTsKKyAgIGlmICghTklMUCAoRnBsaXN0X2dldCAoY29udGFjdCwg UUNzcGVlZCkpKQorICAgICBDSEVDS19OVU1CRVIgKEZwbGlzdF9nZXQgKGNvbnRhY3QsIFFDc3Bl ZWQpKTsKKyAKKyAgIG5hbWUgPSBGcGxpc3RfZ2V0IChjb250YWN0LCBRQ25hbWUpOworICAgaWYg KE5JTFAgKG5hbWUpKQorICAgICBuYW1lID0gcG9ydDsKKyAgIENIRUNLX1NUUklORyAobmFtZSk7 CisgICBwcm9jID0gbWFrZV9wcm9jZXNzIChuYW1lKTsKKyAgIHNwZWNwZGxfY291bnQgPSBTUEVD UERMX0lOREVYICgpOworICAgcmVjb3JkX3Vud2luZF9wcm90ZWN0IChtYWtlX3NlcmlhbF9wcm9j ZXNzX3Vud2luZCwgcHJvYyk7CisgICBwID0gWFBST0NFU1MgKHByb2MpOworIAorICAgZmQgPSBz ZXJpYWxfb3BlbiAoKGNoYXIqKSBTREFUQSAocG9ydCkpOworICAgcC0+aW5mZCA9IGZkOworICAg cC0+b3V0ZmQgPSBmZDsKKyAgIGlmIChmZCA+IG1heF9wcm9jZXNzX2Rlc2MpCisgICAgIG1heF9w cm9jZXNzX2Rlc2MgPSBmZDsKKyAgIGNoYW5fcHJvY2Vzc1tmZF0gPSBwcm9jOworIAorICAgYnVm ZmVyID0gRnBsaXN0X2dldCAoY29udGFjdCwgUUNidWZmZXIpOworICAgaWYgKE5JTFAgKGJ1ZmZl cikpCisgICAgIGJ1ZmZlciA9IG5hbWU7CisgICBidWZmZXIgPSBGZ2V0X2J1ZmZlcl9jcmVhdGUg KGJ1ZmZlcik7CisgICBwLT5idWZmZXIgPSBidWZmZXI7CisgCisgICBwLT5jaGlsZHAgPSBjb250 YWN0OworICAgcC0+cGxpc3QgPSBGY29weV9zZXF1ZW5jZSAoRnBsaXN0X2dldCAoY29udGFjdCwg UUNwbGlzdCkpOworICAgcC0+dHlwZSA9IFFzZXJpYWw7CisgICBwLT5zZW50aW5lbCA9IEZwbGlz dF9nZXQgKGNvbnRhY3QsIFFDc2VudGluZWwpOworICAgcC0+ZmlsdGVyID0gRnBsaXN0X2dldCAo Y29udGFjdCwgUUNmaWx0ZXIpOworICAgcC0+bG9nID0gUW5pbDsKKyAgIGlmICh0ZW0gPSBGcGxp c3RfZ2V0IChjb250YWN0LCBRQ25vcXVlcnkpLCAhTklMUCAodGVtKSkKKyAgICAgcC0+a2lsbF93 aXRob3V0X3F1ZXJ5ID0gMTsKKyAgIGlmICh0ZW0gPSBGcGxpc3RfZ2V0IChjb250YWN0LCBRQ3N0 b3ApLCAhTklMUCAodGVtKSkKKyAgICAgcC0+Y29tbWFuZCA9IFF0OworICAgcC0+cHR5X2ZsYWcg PSAwOworIAorICAgaWYgKCFFUSAocC0+Y29tbWFuZCwgUXQpKQorICAgICB7CisgICAgICAgRkRf U0VUIChmZCwgJmlucHV0X3dhaXRfbWFzayk7CisgICAgICAgRkRfU0VUIChmZCwgJm5vbl9rZXli b2FyZF93YWl0X21hc2spOworICAgICB9CisgCisgICBpZiAoQlVGRkVSUCAoYnVmZmVyKSkKKyAg ICAgeworICAgICAgIHNldF9tYXJrZXJfYm90aCAocC0+bWFyaywgYnVmZmVyLAorIAkJICAgICAg IEJVRl9aViAoWEJVRkZFUiAoYnVmZmVyKSksCisgCQkgICAgICAgQlVGX1pWX0JZVEUgKFhCVUZG RVIgKGJ1ZmZlcikpKTsKKyAgICAgfQorIAorICAgdGVtID0gRnBsaXN0X21lbWJlciAoY29udGFj dCwgUUNjb2RpbmcpOworICAgaWYgKCFOSUxQICh0ZW0pICYmICghQ09OU1AgKHRlbSkgfHwgIUNP TlNQIChYQ0RSICh0ZW0pKSkpCisgICAgIHRlbSA9IFFuaWw7CisgCisgICB2YWwgPSBRbmlsOwor ICAgaWYgKCFOSUxQICh0ZW0pKQorICAgICB7CisgICAgICAgdmFsID0gWENBUiAoWENEUiAodGVt KSk7CisgICAgICAgaWYgKENPTlNQICh2YWwpKQorIAl2YWwgPSBYQ0FSICh2YWwpOworICAgICB9 CisgICBlbHNlIGlmICghTklMUCAoVmNvZGluZ19zeXN0ZW1fZm9yX3JlYWQpKQorICAgICB2YWwg PSBWY29kaW5nX3N5c3RlbV9mb3JfcmVhZDsKKyAgIGVsc2UgaWYgKCghTklMUCAoYnVmZmVyKSAm JiBOSUxQIChYQlVGRkVSIChidWZmZXIpLT5lbmFibGVfbXVsdGlieXRlX2NoYXJhY3RlcnMpKQor IAkgICB8fCAoTklMUCAoYnVmZmVyKSAmJiBOSUxQIChidWZmZXJfZGVmYXVsdHMuZW5hYmxlX211 bHRpYnl0ZV9jaGFyYWN0ZXJzKSkpCisgICAgIHZhbCA9IFFuaWw7CisgICBwLT5kZWNvZGVfY29k aW5nX3N5c3RlbSA9IHZhbDsKKyAKKyAgIHZhbCA9IFFuaWw7CisgICBpZiAoIU5JTFAgKHRlbSkp CisgICAgIHsKKyAgICAgICB2YWwgPSBYQ0FSIChYQ0RSICh0ZW0pKTsKKyAgICAgICBpZiAoQ09O U1AgKHZhbCkpCisgCXZhbCA9IFhDRFIgKHZhbCk7CisgICAgIH0KKyAgIGVsc2UgaWYgKCFOSUxQ IChWY29kaW5nX3N5c3RlbV9mb3Jfd3JpdGUpKQorICAgICB2YWwgPSBWY29kaW5nX3N5c3RlbV9m b3Jfd3JpdGU7CisgICBlbHNlIGlmICgoIU5JTFAgKGJ1ZmZlcikgJiYgTklMUCAoWEJVRkZFUiAo YnVmZmVyKS0+ZW5hYmxlX211bHRpYnl0ZV9jaGFyYWN0ZXJzKSkKKyAJICAgfHwgKE5JTFAgKGJ1 ZmZlcikgJiYgTklMUCAoYnVmZmVyX2RlZmF1bHRzLmVuYWJsZV9tdWx0aWJ5dGVfY2hhcmFjdGVy cykpKQorICAgICB2YWwgPSBRbmlsOworICAgcC0+ZW5jb2RlX2NvZGluZ19zeXN0ZW0gPSB2YWw7 CisgCisgICBzZXR1cF9wcm9jZXNzX2NvZGluZ19zeXN0ZW1zIChwcm9jKTsKKyAgIHAtPmRlY29k aW5nX2J1ZiA9IG1ha2VfdW5pbml0X3N0cmluZyAoMCk7CisgICBwLT5kZWNvZGluZ19jYXJyeW92 ZXIgPSAwOworICAgcC0+ZW5jb2RpbmdfYnVmID0gbWFrZV91bmluaXRfc3RyaW5nICgwKTsKKyAg IHAtPmluaGVyaXRfY29kaW5nX3N5c3RlbV9mbGFnCisgICAgID0gISghTklMUCAodGVtKSB8fCBO SUxQIChidWZmZXIpIHx8ICFpbmhlcml0X3Byb2Nlc3NfY29kaW5nX3N5c3RlbSk7CisgCisgICBG c2VyaWFsX3Byb2Nlc3NfY29uZmlndXJlKG5hcmdzLCBhcmdzKTsKKyAKKyAgIHNwZWNwZGxfcHRy ID0gc3BlY3BkbCArIHNwZWNwZGxfY291bnQ7CisgCisgICBVTkdDUFJPOworICAgcmV0dXJuIHBy b2M7CisgfQorICNlbmRpZiAvKiBIQVZFX1NFUklBTCAgKi8KKyAKICAvKiBDcmVhdGUgYSBuZXR3 b3JrIHN0cmVhbS9kYXRhZ3JhbSBjbGllbnQvc2VydmVyIHByb2Nlc3MuICBUcmVhdGVkCiAgICAg ZXhhY3RseSBsaWtlIGEgbm9ybWFsIHByb2Nlc3Mgd2hlbiByZWFkaW5nIGFuZCB3cml0aW5nLiAg UHJpbWFyeQogICAgIGRpZmZlcmVuY2VzIGFyZSBpbiBzdGF0dXMgZGlzcGxheSBhbmQgcHJvY2Vz cyBkZWxldGlvbi4gIEEgbmV0d29yawoqKioqKioqKioqKioqKiogdXNhZ2U6IChtYWtlLW5ldHdv cmstcHJvY2VzcyAmcmVzdCBBUkdTKQoqKiogMzM5NSwzNDAwICoqKioKLS0tIDM3NTgsMzc2NCAt LS0tCiAgCiAgICBwLT5jaGlsZHAgPSBjb250YWN0OwogICAgcC0+cGxpc3QgPSBGY29weV9zZXF1 ZW5jZSAoRnBsaXN0X2dldCAoY29udGFjdCwgUUNwbGlzdCkpOworICAgcC0+dHlwZSA9IFFuZXR3 b3JrOwogIAogICAgcC0+YnVmZmVyID0gYnVmZmVyOwogICAgcC0+c2VudGluZWwgPSBzZW50aW5l bDsKKioqKioqKioqKioqKioqIHNlcnZlcl9hY2NlcHRfY29ubmVjdGlvbiAoc2VydmVyLCBjaGFu bmUKKioqIDQxMTMsNDExOCAqKioqCi0tLSA0NDc3LDQ0ODMgLS0tLQogIAogICAgcC0+Y2hpbGRw ID0gY29udGFjdDsKICAgIHAtPnBsaXN0ID0gRmNvcHlfc2VxdWVuY2UgKHBzLT5wbGlzdCk7Cisg ICBwLT50eXBlID0gUW5ldHdvcms7CiAgCiAgICBwLT5idWZmZXIgPSBidWZmZXI7CiAgICBwLT5z ZW50aW5lbCA9IHBzLT5zZW50aW5lbDsKKioqKioqKioqKioqKioqIHdhaXRfcmVhZGluZ19wcm9j ZXNzX291dHB1dCAodGltZV9saW1pdCwKKioqIDQ4MTEsNDgxNyAqKioqCiAgCQkgYXZhaWxhYmxl IG5vdyBhbmQgYSBjbG9zZWQgcGlwZS4KICAJCSBXaXRoIGx1Y2ssIGEgY2xvc2VkIHBpcGUgd2ls bCBiZSBhY2NvbXBhbmllZCBieQogIAkJIHN1YnByb2Nlc3MgdGVybWluYXRpb24gYW5kIFNJR0NI TEQuICAqLwohIAkgICAgICBlbHNlIGlmIChucmVhZCA9PSAwICYmICFORVRDT05OX1AgKHByb2Mp KQogIAkJOwogICNlbmRpZiAvKiBPX05ERUxBWSAqLwogICNlbmRpZiAvKiBPX05PTkJMT0NLICov Ci0tLSA1MTc2LDUxODIgLS0tLQogIAkJIGF2YWlsYWJsZSBub3cgYW5kIGEgY2xvc2VkIHBpcGUu CiAgCQkgV2l0aCBsdWNrLCBhIGNsb3NlZCBwaXBlIHdpbGwgYmUgYWNjb21wYW5pZWQgYnkKICAJ CSBzdWJwcm9jZXNzIHRlcm1pbmF0aW9uIGFuZCBTSUdDSExELiAgKi8KISAJICAgICAgZWxzZSBp ZiAobnJlYWQgPT0gMCAmJiAhTkVUQ09OTl9QIChwcm9jKSAmJiAhU0VSSUFMQ09OTl9QIChwcm9j KSkKICAJCTsKICAjZW5kaWYgLyogT19OREVMQVkgKi8KICAjZW5kaWYgLyogT19OT05CTE9DSyAq LwoqKioqKioqKioqKioqKiogd2FpdF9yZWFkaW5nX3Byb2Nlc3Nfb3V0cHV0ICh0aW1lX2xpbWl0 LAoqKiogNDgzOSw0ODQ1ICoqKioKICAJICAgICAgLyogSWYgd2UgY2FuIGRldGVjdCBwcm9jZXNz IHRlcm1pbmF0aW9uLCBkb24ndCBjb25zaWRlciB0aGUgcHJvY2VzcwogIAkJIGdvbmUganVzdCBi ZWNhdXNlIGl0cyBwaXBlIGlzIGNsb3NlZC4gICovCiAgI2lmZGVmIFNJR0NITEQKISAJICAgICAg ZWxzZSBpZiAobnJlYWQgPT0gMCAmJiAhTkVUQ09OTl9QIChwcm9jKSkKICAJCTsKICAjZW5kaWYK ICAJICAgICAgZWxzZQotLS0gNTIwNCw1MjEwIC0tLS0KICAJICAgICAgLyogSWYgd2UgY2FuIGRl dGVjdCBwcm9jZXNzIHRlcm1pbmF0aW9uLCBkb24ndCBjb25zaWRlciB0aGUgcHJvY2VzcwogIAkJ IGdvbmUganVzdCBiZWNhdXNlIGl0cyBwaXBlIGlzIGNsb3NlZC4gICovCiAgI2lmZGVmIFNJR0NI TEQKISAJICAgICAgZWxzZSBpZiAobnJlYWQgPT0gMCAmJiAhTkVUQ09OTl9QIChwcm9jKSAmJiAh U0VSSUFMQ09OTl9QIChwcm9jKSkKICAJCTsKICAjZW5kaWYKICAJICAgICAgZWxzZQoqKioqKioq KioqKioqKiogc2VuZF9wcm9jZXNzIChwcm9jLCBidWYsIGxlbiwgb2JqZWN0KQoqKiogNTYyOCw1 NjM0ICoqKioKICAJICAgICAgdGhpcyAtPSBydjsKICAJICAgIH0KICAKISAJICAvKiBJZiB3ZSBz ZW50IGp1c3QgcGFydCBvZiB0aGUgc3RyaW5nLCBwdXQgaW4gYW4gRU9GCiAgCSAgICAgdG8gZm9y Y2UgaXQgdGhyb3VnaCwgYmVmb3JlIHdlIHNlbmQgdGhlIHJlc3QuICAqLwogIAkgIGlmIChsZW4g PiAwKQogIAkgICAgRnByb2Nlc3Nfc2VuZF9lb2YgKHByb2MpOwotLS0gNTk5Myw1OTk5IC0tLS0K ICAJICAgICAgdGhpcyAtPSBydjsKICAJICAgIH0KICAKISAJICAvKiBJZiB3ZSBzZW50IGp1c3Qg cGFydCBvZiB0aGUgc3RyaW5nLCBwdXQgaW4gYW4gRU9GIChDLWQpCiAgCSAgICAgdG8gZm9yY2Ug aXQgdGhyb3VnaCwgYmVmb3JlIHdlIHNlbmQgdGhlIHJlc3QuICAqLwogIAkgIGlmIChsZW4gPiAw KQogIAkgICAgRnByb2Nlc3Nfc2VuZF9lb2YgKHByb2MpOwoqKioqKioqKioqKioqKiogcmV0dXJu IHQgdW5jb25kaXRpb25hbGx5LiAgKi8pCioqKiA1NzQ4LDU3NTQgKioqKgogICAgcHJvYyA9IGdl dF9wcm9jZXNzIChwcm9jZXNzKTsKICAgIHAgPSBYUFJPQ0VTUyAocHJvYyk7CiAgCiEgICBpZiAo IUVRIChwLT5jaGlsZHAsIFF0KSkKICAgICAgZXJyb3IgKCJQcm9jZXNzICVzIGlzIG5vdCBhIHN1 YnByb2Nlc3MiLAogIAkgICBTREFUQSAocC0+bmFtZSkpOwogICAgaWYgKHAtPmluZmQgPCAwKQot LS0gNjExMyw2MTE5IC0tLS0KICAgIHByb2MgPSBnZXRfcHJvY2VzcyAocHJvY2Vzcyk7CiAgICBw ID0gWFBST0NFU1MgKHByb2MpOwogIAohICAgaWYgKCFFUSAocC0+dHlwZSwgUXJlYWwpKQogICAg ICBlcnJvciAoIlByb2Nlc3MgJXMgaXMgbm90IGEgc3VicHJvY2VzcyIsCiAgCSAgIFNEQVRBIChw LT5uYW1lKSk7CiAgICBpZiAocC0+aW5mZCA8IDApCioqKioqKioqKioqKioqKiBwcm9jZXNzX3Nl bmRfc2lnbmFsIChwcm9jZXNzLCBzaWdubywgY3VyCioqKiA1NzkxLDU3OTcgKioqKgogICAgcHJv YyA9IGdldF9wcm9jZXNzIChwcm9jZXNzKTsKICAgIHAgPSBYUFJPQ0VTUyAocHJvYyk7CiAgCiEg ICBpZiAoIUVRIChwLT5jaGlsZHAsIFF0KSkKICAgICAgZXJyb3IgKCJQcm9jZXNzICVzIGlzIG5v dCBhIHN1YnByb2Nlc3MiLAogIAkgICBTREFUQSAocC0+bmFtZSkpOwogICAgaWYgKHAtPmluZmQg PCAwKQotLS0gNjE1Niw2MTYyIC0tLS0KICAgIHByb2MgPSBnZXRfcHJvY2VzcyAocHJvY2Vzcyk7 CiAgICBwID0gWFBST0NFU1MgKHByb2MpOwogIAohICAgaWYgKCFFUSAocC0+dHlwZSwgUXJlYWwp KQogICAgICBlcnJvciAoIlByb2Nlc3MgJXMgaXMgbm90IGEgc3VicHJvY2VzcyIsCiAgCSAgIFNE QVRBIChwLT5uYW1lKSk7CiAgICBpZiAocC0+aW5mZCA8IDApCioqKioqKioqKioqKioqKiBTZWUg ZnVuY3Rpb24gYGludGVycnVwdC1wcm9jZXNzJyBmb3IgbW9yCioqKiA2MDQwLDYwNTEgKioqKgog IERFRlVOICgic3RvcC1wcm9jZXNzIiwgRnN0b3BfcHJvY2VzcywgU3N0b3BfcHJvY2VzcywgMCwg MiwgMCwKICAgICAgICAgZG9jOiAvKiBTdG9wIHByb2Nlc3MgUFJPQ0VTUy4gIE1heSBiZSBwcm9j ZXNzIG9yIG5hbWUgb2Ygb25lLgogIFNlZSBmdW5jdGlvbiBgaW50ZXJydXB0LXByb2Nlc3MnIGZv ciBtb3JlIGRldGFpbHMgb24gdXNhZ2UuCiEgSWYgUFJPQ0VTUyBpcyBhIG5ldHdvcmsgcHJvY2Vz cywgaW5oaWJpdCBoYW5kbGluZyBvZiBpbmNvbWluZyB0cmFmZmljLiAgKi8pCiAgICAgICAocHJv Y2VzcywgY3VycmVudF9ncm91cCkKICAgICAgIExpc3BfT2JqZWN0IHByb2Nlc3MsIGN1cnJlbnRf Z3JvdXA7CiAgewogICNpZmRlZiBIQVZFX1NPQ0tFVFMKISAgIGlmIChQUk9DRVNTUCAocHJvY2Vz cykgJiYgTkVUQ09OTl9QIChwcm9jZXNzKSkKICAgICAgewogICAgICAgIHN0cnVjdCBMaXNwX1By b2Nlc3MgKnA7CiAgCi0tLSA2NDA1LDY0MTcgLS0tLQogIERFRlVOICgic3RvcC1wcm9jZXNzIiwg RnN0b3BfcHJvY2VzcywgU3N0b3BfcHJvY2VzcywgMCwgMiwgMCwKICAgICAgICAgZG9jOiAvKiBT dG9wIHByb2Nlc3MgUFJPQ0VTUy4gIE1heSBiZSBwcm9jZXNzIG9yIG5hbWUgb2Ygb25lLgogIFNl ZSBmdW5jdGlvbiBgaW50ZXJydXB0LXByb2Nlc3MnIGZvciBtb3JlIGRldGFpbHMgb24gdXNhZ2Uu CiEgSWYgUFJPQ0VTUyBpcyBhIG5ldHdvcmsgb3Igc2VyaWFsIHByb2Nlc3MsIGluaGliaXQgaGFu ZGxpbmcgb2YgaW5jb21pbmcKISB0cmFmZmljLiAgKi8pCiAgICAgICAocHJvY2VzcywgY3VycmVu dF9ncm91cCkKICAgICAgIExpc3BfT2JqZWN0IHByb2Nlc3MsIGN1cnJlbnRfZ3JvdXA7CiAgewog ICNpZmRlZiBIQVZFX1NPQ0tFVFMKISAgIGlmIChQUk9DRVNTUCAocHJvY2VzcykgJiYgKE5FVENP Tk5fUCAocHJvY2VzcykgfHwgU0VSSUFMQ09OTl9QIChwcm9jZXNzKSkpCiAgICAgIHsKICAgICAg ICBzdHJ1Y3QgTGlzcF9Qcm9jZXNzICpwOwogIAoqKioqKioqKioqKioqKiogSWYgUFJPQ0VTUyBp cyBhIG5ldHdvcmsgcHJvY2VzcywgaW5oaWJpdAoqKiogNjA3MSw2MDgyICoqKioKICBERUZVTiAo ImNvbnRpbnVlLXByb2Nlc3MiLCBGY29udGludWVfcHJvY2VzcywgU2NvbnRpbnVlX3Byb2Nlc3Ms IDAsIDIsIDAsCiAgICAgICAgIGRvYzogLyogQ29udGludWUgcHJvY2VzcyBQUk9DRVNTLiAgTWF5 IGJlIHByb2Nlc3Mgb3IgbmFtZSBvZiBvbmUuCiAgU2VlIGZ1bmN0aW9uIGBpbnRlcnJ1cHQtcHJv Y2VzcycgZm9yIG1vcmUgZGV0YWlscyBvbiB1c2FnZS4KISBJZiBQUk9DRVNTIGlzIGEgbmV0d29y ayBwcm9jZXNzLCByZXN1bWUgaGFuZGxpbmcgb2YgaW5jb21pbmcgdHJhZmZpYy4gICovKQogICAg ICAgKHByb2Nlc3MsIGN1cnJlbnRfZ3JvdXApCiAgICAgICBMaXNwX09iamVjdCBwcm9jZXNzLCBj dXJyZW50X2dyb3VwOwogIHsKICAjaWZkZWYgSEFWRV9TT0NLRVRTCiEgICBpZiAoUFJPQ0VTU1Ag KHByb2Nlc3MpICYmIE5FVENPTk5fUCAocHJvY2VzcykpCiAgICAgIHsKICAgICAgICBzdHJ1Y3Qg TGlzcF9Qcm9jZXNzICpwOwogIAotLS0gNjQzNyw2NDQ5IC0tLS0KICBERUZVTiAoImNvbnRpbnVl LXByb2Nlc3MiLCBGY29udGludWVfcHJvY2VzcywgU2NvbnRpbnVlX3Byb2Nlc3MsIDAsIDIsIDAs CiAgICAgICAgIGRvYzogLyogQ29udGludWUgcHJvY2VzcyBQUk9DRVNTLiAgTWF5IGJlIHByb2Nl c3Mgb3IgbmFtZSBvZiBvbmUuCiAgU2VlIGZ1bmN0aW9uIGBpbnRlcnJ1cHQtcHJvY2VzcycgZm9y IG1vcmUgZGV0YWlscyBvbiB1c2FnZS4KISBJZiBQUk9DRVNTIGlzIGEgbmV0d29yayBvciBzZXJp YWwgcHJvY2VzcywgcmVzdW1lIGhhbmRsaW5nIG9mIGluY29taW5nCiEgdHJhZmZpYy4gICovKQog ICAgICAgKHByb2Nlc3MsIGN1cnJlbnRfZ3JvdXApCiAgICAgICBMaXNwX09iamVjdCBwcm9jZXNz LCBjdXJyZW50X2dyb3VwOwogIHsKICAjaWZkZWYgSEFWRV9TT0NLRVRTCiEgICBpZiAoUFJPQ0VT U1AgKHByb2Nlc3MpICYmIChORVRDT05OX1AgKHByb2Nlc3MpIHx8IFNFUklBTENPTk5fUCAocHJv Y2VzcykpKQogICAgICB7CiAgICAgICAgc3RydWN0IExpc3BfUHJvY2VzcyAqcDsKICAKKioqKioq KioqKioqKioqIElmIFBST0NFU1MgaXMgYSBuZXR3b3JrIHByb2Nlc3MsIHJlc3VtZSAKKioqIDYw ODcsNjA5MiAqKioqCi0tLSA2NDU0LDY0NjYgLS0tLQogIAl7CiAgCSAgRkRfU0VUIChwLT5pbmZk LCAmaW5wdXRfd2FpdF9tYXNrKTsKICAJICBGRF9TRVQgKHAtPmluZmQsICZub25fa2V5Ym9hcmRf d2FpdF9tYXNrKTsKKyAjaWZkZWYgV0lORE9XU05UCisgCSAgaWYgKGZkX2luZm9bIHAtPmluZmQg XS5mbGFncyAmIEZJTEVfU0VSSUFMKQorIAkgICAgUHVyZ2VDb21tIChmZF9pbmZvWyBwLT5pbmZk IF0uaG5kLCBQVVJHRV9SWEFCT1JUIHwgUFVSR0VfUlhDTEVBUik7CisgI2VuZGlmCisgI2lmZGVm IEhBVkVfVEVSTUlPUworIAkgIHRjZmx1c2ggKHAtPmluZmQsIFRDSUZMVVNIKTsKKyAjZW5kaWYK ICAJfQogICAgICAgIHAtPmNvbW1hbmQgPSBRbmlsOwogICAgICAgIHJldHVybiBwcm9jZXNzOwoq KioqKioqKioqKioqKiogUFJPQ0VTUyBtYXkgYmUgYSBwcm9jZXNzLCBhIGJ1ZmZlciwgdGhlIAoq KiogNjI3Miw2Mjc4ICoqKioKICBuaWwsIGluZGljYXRpbmcgdGhlIGN1cnJlbnQgYnVmZmVyJ3Mg cHJvY2Vzcy4KICBJZiBQUk9DRVNTIGlzIGEgbmV0d29yayBjb25uZWN0aW9uLCBvciBpcyBhIHBy b2Nlc3MgY29tbXVuaWNhdGluZwogIHRocm91Z2ggYSBwaXBlIChhcyBvcHBvc2VkIHRvIGEgcHR5 KSwgdGhlbiB5b3UgY2Fubm90IHNlbmQgYW55IG1vcmUKISB0ZXh0IHRvIFBST0NFU1MgYWZ0ZXIg eW91IGNhbGwgdGhpcyBmdW5jdGlvbi4gICovKQogICAgICAgKHByb2Nlc3MpCiAgICAgICBMaXNw X09iamVjdCBwcm9jZXNzOwogIHsKLS0tIDY2NDYsNjY1NCAtLS0tCiAgbmlsLCBpbmRpY2F0aW5n IHRoZSBjdXJyZW50IGJ1ZmZlcidzIHByb2Nlc3MuCiAgSWYgUFJPQ0VTUyBpcyBhIG5ldHdvcmsg Y29ubmVjdGlvbiwgb3IgaXMgYSBwcm9jZXNzIGNvbW11bmljYXRpbmcKICB0aHJvdWdoIGEgcGlw ZSAoYXMgb3Bwb3NlZCB0byBhIHB0eSksIHRoZW4geW91IGNhbm5vdCBzZW5kIGFueSBtb3JlCiEg dGV4dCB0byBQUk9DRVNTIGFmdGVyIHlvdSBjYWxsIHRoaXMgZnVuY3Rpb24uCiEgSWYgUFJPQ0VT UyBpcyBhIHNlcmlhbCBwcm9jZXNzLCB3YWl0IHVudGlsIGFsbCBvdXRwdXQgd3JpdHRlbiB0byB0 aGUKISBwcm9jZXNzIGhhcyBiZWVuIHRyYW5zbWl0dGVkIHRvIHRoZSBzZXJpYWwgcG9ydC4gICov KQogICAgICAgKHByb2Nlc3MpCiAgICAgICBMaXNwX09iamVjdCBwcm9jZXNzOwogIHsKKioqKioq KioqKioqKioqIHRleHQgdG8gUFJPQ0VTUyBhZnRlciB5b3UgY2FsbCB0aGlzIGZ1bmMKKioqIDYz MDIsNjMwNyAqKioqCi0tLSA2Njc4LDY2OTEgLS0tLQogICNlbHNlCiAgICBpZiAoWFBST0NFU1Mg KHByb2MpLT5wdHlfZmxhZykKICAgICAgc2VuZF9wcm9jZXNzIChwcm9jLCAiXDAwNCIsIDEsIFFu aWwpOworICAgZWxzZSBpZiAoWFBST0NFU1MgKHByb2MpLT50eXBlID09IFFzZXJpYWwpCisgICAg IHsKKyAjaWZkZWYgSEFWRV9URVJNSU9TCisgICAgICAgaWYgKHRjZHJhaW4gKFhQUk9DRVNTIChw cm9jKS0+b3V0ZmQpICE9IDApCisgCWVycm9yICgidGNkcmFpbigpIGZhaWxlZDogJXMiLCBlbWFj c19zdHJlcnJvciAoZXJybm8pKTsKKyAjZW5kaWYKKyAgICAgICAvKiBEbyBub3RoaW5nIG9uIFdp bmRvd3MgYmVjYXVzZSB3cml0ZXMgYXJlIGJsb2NraW5nLiAgKi8KKyAgICAgfQogICAgZWxzZQog ICAgICB7CiAgICAgICAgaW50IG9sZF9vdXRmZCwgbmV3X291dGZkOwoqKioqKioqKioqKioqKiog dGV4dCB0byBQUk9DRVNTIGFmdGVyIHlvdSBjYWxsIHRoaXMgZnVuYwoqKiogNjMxMSw2MzE3ICoq KioKICAJIGZvciBjb21tdW5pY2F0aW9uIHdpdGggdGhlIHN1YnByb2Nlc3MsIGNhbGwgc2h1dGRv d24gdG8gY2F1c2UgRU9GLgogIAkgKEluIHNvbWUgb2xkIHN5c3RlbSwgc2h1dGRvd24gdG8gc29j a2V0cGFpciBkb2Vzbid0IHdvcmsuCiAgCSBUaGVuIHdlIGp1c3QgY2FuJ3Qgd2luLikgICovCiEg ICAgICAgaWYgKFhQUk9DRVNTIChwcm9jKS0+cGlkID09IDAKICAJICB8fCBYUFJPQ0VTUyAocHJv YyktPm91dGZkID09IFhQUk9DRVNTIChwcm9jKS0+aW5mZCkKICAJc2h1dGRvd24gKFhQUk9DRVNT IChwcm9jKS0+b3V0ZmQsIDEpOwogICAgICAgIC8qIEluIGNhc2Ugb2Ygc29ja2V0cGFpciwgb3V0 ZmQgPT0gaW5mZCwgc28gZG9uJ3QgY2xvc2UgaXQuICAqLwotLS0gNjY5NSw2NzAxIC0tLS0KICAJ IGZvciBjb21tdW5pY2F0aW9uIHdpdGggdGhlIHN1YnByb2Nlc3MsIGNhbGwgc2h1dGRvd24gdG8g Y2F1c2UgRU9GLgogIAkgKEluIHNvbWUgb2xkIHN5c3RlbSwgc2h1dGRvd24gdG8gc29ja2V0cGFp ciBkb2Vzbid0IHdvcmsuCiAgCSBUaGVuIHdlIGp1c3QgY2FuJ3Qgd2luLikgICovCiEgICAgICAg aWYgKFhQUk9DRVNTIChwcm9jKS0+dHlwZSA9PSBRbmV0d29yawogIAkgIHx8IFhQUk9DRVNTIChw cm9jKS0+b3V0ZmQgPT0gWFBST0NFU1MgKHByb2MpLT5pbmZkKQogIAlzaHV0ZG93biAoWFBST0NF U1MgKHByb2MpLT5vdXRmZCwgMSk7CiAgICAgICAgLyogSW4gY2FzZSBvZiBzb2NrZXRwYWlyLCBv dXRmZCA9PSBpbmZkLCBzbyBkb24ndCBjbG9zZSBpdC4gICovCioqKioqKioqKioqKioqKiBraWxs X2J1ZmZlcl9wcm9jZXNzZXMgKGJ1ZmZlcikKKioqIDYzNTUsNjM2MSAqKioqCiAgICAgICAgaWYg KFBST0NFU1NQIChwcm9jKQogIAkgICYmIChOSUxQIChidWZmZXIpIHx8IEVRIChYUFJPQ0VTUyAo cHJvYyktPmJ1ZmZlciwgYnVmZmVyKSkpCiAgCXsKISAJICBpZiAoTkVUQ09OTl9QIChwcm9jKSkK ICAJICAgIEZkZWxldGVfcHJvY2VzcyAocHJvYyk7CiAgCSAgZWxzZSBpZiAoWFBST0NFU1MgKHBy b2MpLT5pbmZkID49IDApCiAgCSAgICBwcm9jZXNzX3NlbmRfc2lnbmFsIChwcm9jLCBTSUdIVVAs IFFuaWwsIDEpOwotLS0gNjczOSw2NzQ1IC0tLS0KICAgICAgICBpZiAoUFJPQ0VTU1AgKHByb2Mp CiAgCSAgJiYgKE5JTFAgKGJ1ZmZlcikgfHwgRVEgKFhQUk9DRVNTIChwcm9jKS0+YnVmZmVyLCBi dWZmZXIpKSkKICAJewohIAkgIGlmIChORVRDT05OX1AgKHByb2MpIHx8IFNFUklBTENPTk5fUCAo cHJvYykpCiAgCSAgICBGZGVsZXRlX3Byb2Nlc3MgKHByb2MpOwogIAkgIGVsc2UgaWYgKFhQUk9D RVNTIChwcm9jKS0+aW5mZCA+PSAwKQogIAkgICAgcHJvY2Vzc19zZW5kX3NpZ25hbCAocHJvYywg U0lHSFVQLCBRbmlsLCAxKTsKKioqKioqKioqKioqKioqIHNpZ2NobGRfaGFuZGxlciAoc2lnbm8p CioqKiA2NDY0LDY0NzAgKioqKgogIAl7CiAgCSAgcHJvYyA9IFhDRFIgKFhDQVIgKHRhaWwpKTsK ICAJICBwID0gWFBST0NFU1MgKHByb2MpOwohIAkgIGlmIChFUSAocC0+Y2hpbGRwLCBRdCkgJiYg cC0+cGlkID09IHBpZCkKICAJICAgIGJyZWFrOwogIAkgIHAgPSAwOwogIAl9Ci0tLSA2ODQ4LDY4 NTQgLS0tLQogIAl7CiAgCSAgcHJvYyA9IFhDRFIgKFhDQVIgKHRhaWwpKTsKICAJICBwID0gWFBS T0NFU1MgKHByb2MpOwohIAkgIGlmIChFUSAocC0+dHlwZSwgUXJlYWwpICYmIHAtPnBpZCA9PSBw aWQpCiAgCSAgICBicmVhazsKICAJICBwID0gMDsKICAJfQoqKioqKioqKioqKioqKiogc3RhdHVz X25vdGlmeSAoZGVsZXRpbmdfcHJvY2VzcykKKioqIDY2ODYsNjY5MiAqKioqCiAgCSAgd2hpbGUg KCEgRVEgKHAtPmZpbHRlciwgUXQpCiAgCQkgJiYgISBFUSAocC0+c3RhdHVzLCBRY29ubmVjdCkK ICAJCSAmJiAhIEVRIChwLT5zdGF0dXMsIFFsaXN0ZW4pCiEgCQkgJiYgISBFUSAocC0+Y29tbWFu ZCwgUXQpICAvKiBOZXR3b3JrIHByb2Nlc3Mgbm90IHN0b3BwZWQuICAqLwogIAkJICYmIHAtPmlu ZmQgPj0gMAogIAkJICYmIHAgIT0gZGVsZXRpbmdfcHJvY2VzcwogIAkJICYmIHJlYWRfcHJvY2Vz c19vdXRwdXQgKHByb2MsIHAtPmluZmQpID4gMCk7Ci0tLSA3MDcwLDcwNzcgLS0tLQogIAkgIHdo aWxlICghIEVRIChwLT5maWx0ZXIsIFF0KQogIAkJICYmICEgRVEgKHAtPnN0YXR1cywgUWNvbm5l Y3QpCiAgCQkgJiYgISBFUSAocC0+c3RhdHVzLCBRbGlzdGVuKQohIAkJIC8qIE5ldHdvcmsgb3Ig c2VyaWFsIHByb2Nlc3Mgbm90IHN0b3BwZWQ6ICAqLwohIAkJICYmICEgRVEgKHAtPmNvbW1hbmQs IFF0KQogIAkJICYmIHAtPmluZmQgPj0gMAogIAkJICYmIHAgIT0gZGVsZXRpbmdfcHJvY2Vzcwog IAkJICYmIHJlYWRfcHJvY2Vzc19vdXRwdXQgKHByb2MsIHAtPmluZmQpID4gMCk7CioqKioqKioq KioqKioqKiBzeW1zX29mX3Byb2Nlc3MgKCkKKioqIDcwNzMsNzA3OCAqKioqCi0tLSA3NDU4LDc0 OTYgLS0tLQogICAgUWRhdGFncmFtID0gaW50ZXJuICgiZGF0YWdyYW0iKTsKICAgIHN0YXRpY3By byAoJlFkYXRhZ3JhbSk7CiAgCisgICBRQ3BvcnQgPSBpbnRlcm4gKCI6cG9ydCIpOworICAgc3Rh dGljcHJvICgmUUNwb3J0KTsKKyAgIFFDc3BlZWQgPSBpbnRlcm4gKCI6c3BlZWQiKTsKKyAgIHN0 YXRpY3BybyAoJlFDc3BlZWQpOworICAgUUNwcm9jZXNzID0gaW50ZXJuICgiOnByb2Nlc3MiKTsK KyAgIHN0YXRpY3BybyAoJlFDcHJvY2Vzcyk7CisgCisgICBRQ2J5dGVzaXplID0gaW50ZXJuICgi OmJ5dGVzaXplIik7CisgICBzdGF0aWNwcm8gKCZRQ2J5dGVzaXplKTsKKyAgIFFDc3RvcGJpdHMg PSBpbnRlcm4gKCI6c3RvcGJpdHMiKTsKKyAgIHN0YXRpY3BybyAoJlFDc3RvcGJpdHMpOworICAg UUNwYXJpdHkgPSBpbnRlcm4gKCI6cGFyaXR5Iik7CisgICBzdGF0aWNwcm8gKCZRQ3Bhcml0eSk7 CisgICBRb2RkID0gaW50ZXJuICgib2RkIik7CisgICBzdGF0aWNwcm8gKCZRb2RkKTsKKyAgIFFl dmVuID0gaW50ZXJuICgiZXZlbiIpOworICAgc3RhdGljcHJvICgmUWV2ZW4pOworICAgUUNmbG93 Y29udHJvbCA9IGludGVybiAoIjpmbG93Y29udHJvbCIpOworICAgc3RhdGljcHJvICgmUUNmbG93 Y29udHJvbCk7CisgICBRaHcgPSBpbnRlcm4gKCJodyIpOworICAgc3RhdGljcHJvICgmUWh3KTsK KyAgIFFzdyA9IGludGVybiAoInN3Iik7CisgICBzdGF0aWNwcm8gKCZRc3cpOworICAgUUNzdW1t YXJ5ID0gaW50ZXJuICgiOnN1bW1hcnkiKTsKKyAgIHN0YXRpY3BybyAoJlFDc3VtbWFyeSk7Cisg CisgICBRcmVhbCA9IGludGVybiAoInJlYWwiKTsKKyAgIHN0YXRpY3BybyAoJlFyZWFsKTsKKyAg IFFuZXR3b3JrID0gaW50ZXJuICgibmV0d29yayIpOworICAgc3RhdGljcHJvICgmUW5ldHdvcmsp OworICAgUXNlcmlhbCA9IGludGVybiAoInNlcmlhbCIpOworICAgc3RhdGljcHJvICgmUXNlcmlh bCk7CisgCiAgICBRQ25hbWUgPSBpbnRlcm4gKCI6bmFtZSIpOwogICAgc3RhdGljcHJvICgmUUNu YW1lKTsKICAgIFFDYnVmZmVyID0gaW50ZXJuICgiOmJ1ZmZlciIpOwoqKioqKioqKioqKioqKiog VGhlIHZhcmlhYmxlIHRha2VzIGVmZmVjdCB3aGVuIGBzdGFydC1wcgoqKiogNzE3MCw3MTc1ICoq KioKLS0tIDc1ODgsNzU5NyAtLS0tCiAgICBkZWZzdWJyICgmU2xpc3RfcHJvY2Vzc2VzKTsKICAg IGRlZnN1YnIgKCZTcHJvY2Vzc19saXN0KTsKICAgIGRlZnN1YnIgKCZTc3RhcnRfcHJvY2Vzcyk7 CisgI2lmZGVmIEhBVkVfU0VSSUFMCisgICBkZWZzdWJyICgmU3NlcmlhbF9wcm9jZXNzX2NvbmZp Z3VyZSk7CisgICBkZWZzdWJyICgmU21ha2Vfc2VyaWFsX3Byb2Nlc3MpOworICNlbmRpZiAvKiBI QVZFX1NFUklBTCAgKi8KICAjaWZkZWYgSEFWRV9TT0NLRVRTCiAgICBkZWZzdWJyICgmU3NldF9u ZXR3b3JrX3Byb2Nlc3Nfb3B0aW9uKTsKICAgIGRlZnN1YnIgKCZTbWFrZV9uZXR3b3JrX3Byb2Nl c3MpOwoqKioqKioqKioqKioqKiogVGhlIHZhcmlhYmxlIHRha2VzIGVmZmVjdCB3aGVuIGBzdGFy dC1wcgoqKiogNzE5OSw3MjA1ICoqKioKICAgIGRlZnN1YnIgKCZTcHJvY2Vzc19zZW5kX2VvZik7 CiAgICBkZWZzdWJyICgmU3NpZ25hbF9wcm9jZXNzKTsKICAgIGRlZnN1YnIgKCZTd2FpdGluZ19m b3JfdXNlcl9pbnB1dF9wKTsKISAvKiAgZGVmc3ViciAoJlNwcm9jZXNzX2Nvbm5lY3Rpb24pOyAq LwogICAgZGVmc3ViciAoJlNzZXRfcHJvY2Vzc19jb2Rpbmdfc3lzdGVtKTsKICAgIGRlZnN1YnIg KCZTcHJvY2Vzc19jb2Rpbmdfc3lzdGVtKTsKICAgIGRlZnN1YnIgKCZTc2V0X3Byb2Nlc3NfZmls dGVyX211bHRpYnl0ZSk7Ci0tLSA3NjIxLDc2MjcgLS0tLQogICAgZGVmc3ViciAoJlNwcm9jZXNz X3NlbmRfZW9mKTsKICAgIGRlZnN1YnIgKCZTc2lnbmFsX3Byb2Nlc3MpOwogICAgZGVmc3ViciAo JlN3YWl0aW5nX2Zvcl91c2VyX2lucHV0X3ApOwohICAgZGVmc3ViciAoJlNwcm9jZXNzX3R5cGUp OwogICAgZGVmc3ViciAoJlNzZXRfcHJvY2Vzc19jb2Rpbmdfc3lzdGVtKTsKICAgIGRlZnN1YnIg KCZTcHJvY2Vzc19jb2Rpbmdfc3lzdGVtKTsKICAgIGRlZnN1YnIgKCZTc2V0X3Byb2Nlc3NfZmls dGVyX211bHRpYnl0ZSk7CkluZGV4OiBzcmMvcHJvY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6 IC9zb3VyY2VzL2VtYWNzL2VtYWNzL3NyYy9wcm9jZXNzLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9u IDEuNDQKZGlmZiAtYyAtcCAtcjEuNDQgcHJvY2Vzcy5oCioqKiBzcmMvcHJvY2Vzcy5oCTE1IE1h eSAyMDA4IDAzOjI1OjA1IC0wMDAwCTEuNDQKLS0tIHNyYy9wcm9jZXNzLmgJMTIgSnVuIDIwMDgg MTk6NTQ6MTMgLTAwMDAKKioqKioqKioqKioqKioqIHN0cnVjdCBMaXNwX1Byb2Nlc3MKKioqIDUx LDYxICoqKioKICAgICAgTGlzcF9PYmplY3QgbG9nOwogICAgICAvKiBCdWZmZXIgdGhhdCBvdXRw dXQgaXMgZ29pbmcgdG8gKi8KICAgICAgTGlzcF9PYmplY3QgYnVmZmVyOwohICAgICAvKiB0IGlm IHRoaXMgaXMgYSByZWFsIGNoaWxkIHByb2Nlc3MuCiEgICAgICAgIEZvciBhIG5ldCBjb25uZWN0 aW9uLCBpdCBpcyBhIHBsaXN0IGJhc2VkIG9uIHRoZSBhcmd1bWVudHMgdG8gbWFrZS1uZXR3b3Jr LXByb2Nlc3MuICAqLwogICAgICBMaXNwX09iamVjdCBjaGlsZHA7CiAgICAgIC8qIFBsaXN0IGZv ciBwcm9ncmFtcyB0byBrZWVwIHBlci1wcm9jZXNzIHN0YXRlIGluZm9ybWF0aW9uLCBwYXJhbWV0 ZXJzLCBldGMuICAqLwogICAgICBMaXNwX09iamVjdCBwbGlzdDsKICAgICAgLyogTWFya2VyIHNl dCB0byBlbmQgb2YgbGFzdCBidWZmZXItaW5zZXJ0ZWQgb3V0cHV0IGZyb20gdGhpcyBwcm9jZXNz ICovCiAgICAgIExpc3BfT2JqZWN0IG1hcms7CiAgICAgIC8qIFN5bWJvbCBpbmRpY2F0aW5nIHN0 YXR1cyBvZiBwcm9jZXNzLgotLS0gNTEsNjQgLS0tLQogICAgICBMaXNwX09iamVjdCBsb2c7CiAg ICAgIC8qIEJ1ZmZlciB0aGF0IG91dHB1dCBpcyBnb2luZyB0byAqLwogICAgICBMaXNwX09iamVj dCBidWZmZXI7CiEgICAgIC8qIHQgaWYgdGhpcyBpcyBhIHJlYWwgY2hpbGQgcHJvY2Vzcy4gIEZv ciBhIG5ldHdvcmsgb3Igc2VyaWFsCiEgICAgICAgIGNvbm5lY3Rpb24sIGl0IGlzIGEgcGxpc3Qg YmFzZWQgb24gdGhlIGFyZ3VtZW50cyB0bwohICAgICAgICBtYWtlLW5ldHdvcmstcHJvY2VzcyBv ciBtYWtlLXNlcmlhbC1wcm9jZXNzLiAgKi8KICAgICAgTGlzcF9PYmplY3QgY2hpbGRwOwogICAg ICAvKiBQbGlzdCBmb3IgcHJvZ3JhbXMgdG8ga2VlcCBwZXItcHJvY2VzcyBzdGF0ZSBpbmZvcm1h dGlvbiwgcGFyYW1ldGVycywgZXRjLiAgKi8KICAgICAgTGlzcF9PYmplY3QgcGxpc3Q7CisgICAg IC8qIFN5bWJvbCBpbmRpY2F0aW5nIHRoZSB0eXBlIG9mIHByb2Nlc3M6IHJlYWwsIG5ldHdvcmss IHNlcmlhbCAgKi8KKyAgICAgTGlzcF9PYmplY3QgdHlwZTsKICAgICAgLyogTWFya2VyIHNldCB0 byBlbmQgb2YgbGFzdCBidWZmZXItaW5zZXJ0ZWQgb3V0cHV0IGZyb20gdGhpcyBwcm9jZXNzICov CiAgICAgIExpc3BfT2JqZWN0IG1hcms7CiAgICAgIC8qIFN5bWJvbCBpbmRpY2F0aW5nIHN0YXR1 cyBvZiBwcm9jZXNzLgoqKioqKioqKioqKioqKiogc3RydWN0IExpc3BfUHJvY2VzcwoqKiogNzgs ODQgKioqKgogIAogICAgICAvKiBOdW1iZXIgb2YgdGhpcyBwcm9jZXNzLgogICAgICAgICBhbGxv Y2F0ZV9wcm9jZXNzIGFzc3VtZXMgdGhpcyBpcyB0aGUgZmlyc3Qgbm9uLUxpc3BfT2JqZWN0IGZp ZWxkLgohICAgICAgICBBIHZhbHVlIDAgaXMgdXNlZCBmb3IgcHNldWRvLXByb2Nlc3NlcyBzdWNo IGFzIG5ldHdvcmsgY29ubmVjdGlvbnMuICAqLwogICAgICBwaWRfdCBwaWQ7CiAgICAgIC8qIERl c2NyaXB0b3IgYnkgd2hpY2ggd2UgcmVhZCBmcm9tIHRoaXMgcHJvY2VzcyAqLwogICAgICBpbnQg aW5mZDsKLS0tIDgxLDg4IC0tLS0KICAKICAgICAgLyogTnVtYmVyIG9mIHRoaXMgcHJvY2Vzcy4K ICAgICAgICAgYWxsb2NhdGVfcHJvY2VzcyBhc3N1bWVzIHRoaXMgaXMgdGhlIGZpcnN0IG5vbi1M aXNwX09iamVjdCBmaWVsZC4KISAgICAgICAgQSB2YWx1ZSAwIGlzIHVzZWQgZm9yIHBzZXVkby1w cm9jZXNzZXMgc3VjaCBhcyBuZXR3b3JrIG9yIHNlcmlhbAohICAgICAgICBjb25uZWN0aW9ucy4g ICovCiAgICAgIHBpZF90IHBpZDsKICAgICAgLyogRGVzY3JpcHRvciBieSB3aGljaCB3ZSByZWFk IGZyb20gdGhpcyBwcm9jZXNzICovCiAgICAgIGludCBpbmZkOwpJbmRleDogc3JjL3N5c2RlcC5j Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KUkNTIGZpbGU6IC9zb3VyY2VzL2VtYWNzL2VtYWNzL3NyYy9zeXNkZXAuYyx2 CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yOTgKZGlmZiAtYyAtcCAtcjEuMjk4IHN5c2RlcC5jCioq KiBzcmMvc3lzZGVwLmMJMTcgTWF5IDIwMDggMjA6MDY6NDIgLTAwMDAJMS4yOTgKLS0tIHNyYy9z eXNkZXAuYwkxMiBKdW4gMjAwOCAxOTo1NDoxNyAtMDAwMAoqKioqKioqKioqKioqKiogZXh0ZXJu IGludCBxdWl0X2NoYXI7CioqKiAxNjYsMTcxICoqKioKLS0tIDE2NiwxNzYgLS0tLQogICNpbmNs dWRlICJwcm9jZXNzLmgiCiAgI2luY2x1ZGUgImNtLmgiICAvKiBmb3IgcmVzZXRfc3lzX21vZGVz ICovCiAgCisgLyogRm9yIHNlcmlhbF9jb25maWd1cmUoKSBhbmQgc2VyaWFsX29wZW4oKSAgKi8K KyBleHRlcm4gTGlzcF9PYmplY3QgUUNwb3J0LCBRQ3NwZWVkLCBRQ3Byb2Nlc3M7CisgZXh0ZXJu IExpc3BfT2JqZWN0IFFDYnl0ZXNpemUsIFFDc3RvcGJpdHMsIFFDcGFyaXR5LCBRb2RkLCBRZXZl bjsKKyBleHRlcm4gTGlzcF9PYmplY3QgUUNmbG93Y29udHJvbCwgUWh3LCBRc3csIFFDc3VtbWFy eTsKKyAKICAjaWZkZWYgV0lORE9XU05UCiAgI2luY2x1ZGUgPGRpcmVjdC5oPgogIC8qIEluIHBy b2Nlc3MuaCB3aGljaCBjb25mbGljdHMgd2l0aCB0aGUgbG9jYWwgY29weS4gICovCioqKioqKioq KioqKioqKiBzdHJzaWduYWwgKGNvZGUpCioqKiA1Mzc5LDUzODQgKioqKgotLS0gNTM4NCw1NTgz IC0tLS0KICAgIHJldHVybiBzaWduYW1lOwogIH0KICAjZW5kaWYgLyogSEFWRV9TVFJTSUdOQUwg Ki8KKyAMCisgI2lmZGVmIEhBVkVfVEVSTUlPUworIC8qIEZvciBtYWtlLXNlcmlhbC1wcm9jZXNz ICAqLworIGludCBzZXJpYWxfb3BlbiAoY2hhciAqcG9ydCkKKyB7CisgICBpbnQgZmQgPSAtMTsK KyAKKyAgIGZkID0gZW1hY3Nfb3BlbiAoKGNoYXIqKSBwb3J0LAorIAkJICAgT19SRFdSCisgI2lm ZGVmIE9fTk9OQkxPQ0sKKyAJCSAgIHwgT19OT05CTE9DSworICNlbHNlCisgCQkgICB8IE9fTkRF TEFZCisgI2VuZGlmCisgI2lmZGVmIE9fTk9DVFRZCisgCQkgICB8IE9fTk9DVFRZCisgI2VuZGlm CisgCQkgICAsIDApOworICAgaWYgKGZkIDwgMCkKKyAgICAgeworICAgICAgIGVycm9yICgiQ291 bGQgbm90IG9wZW4gJXM6ICVzIiwKKyAJICAgICBwb3J0LCBlbWFjc19zdHJlcnJvciAoZXJybm8p KTsKKyAgICAgfQorICNpZmRlZiBUSU9DRVhDTAorICAgaW9jdGwgKGZkLCBUSU9DRVhDTCwgKGNo YXIgKikgMCk7CisgI2VuZGlmCisgCisgICByZXR1cm4gZmQ7CisgfQorICNlbmRpZiAvKiBURVJN SU9TICAqLworIAorICNpZmRlZiBIQVZFX1RFUk1JT1MKKyAvKiBGb3Igc2VyaWFsLXByb2Nlc3Mt Y29uZmlndXJlICAqLworIHZvaWQKKyBzZXJpYWxfY29uZmlndXJlIChzdHJ1Y3QgTGlzcF9Qcm9j ZXNzICpwLAorIAkJICAgICAgTGlzcF9PYmplY3QgY29udGFjdCkKKyB7CisgICBMaXNwX09iamVj dCBjaGlsZHAyID0gUW5pbDsKKyAgIExpc3BfT2JqZWN0IHRlbSA9IFFuaWw7CisgICBzdHJ1Y3Qg dGVybWlvcyBhdHRyOworICAgaW50IGVyciA9IC0xOworICAgY2hhciBzdW1tYXJ5WzRdID0gIj8/ PyI7IC8qIFRoaXMgdXN1YWxseSBiZWNvbWVzICI4TjEiLiAgKi8KKyAKKyAgIGNoaWxkcDIgPSBG Y29weV9zZXF1ZW5jZSAocC0+Y2hpbGRwKTsKKyAKKyAgIC8qIFJlYWQgcG9ydCBhdHRyaWJ1dGVz IGFuZCBwcmVwYXJlIGRlZmF1bHQgY29uZmlndXJhdGlvbi4gICovCisgICBlcnIgPSB0Y2dldGF0 dHIgKHAtPm91dGZkLCAmYXR0cik7CisgICBpZiAoZXJyICE9IDApCisgICAgIGVycm9yICgidGNn ZXRhdHRyKCkgZmFpbGVkOiAlcyIsIGVtYWNzX3N0cmVycm9yIChlcnJubykpOworICAgY2ZtYWtl cmF3ICgmYXR0cik7CisgI2lmIGRlZmluZWQgKENMT0NBTCkKKyAgIGF0dHIuY19jZmxhZyB8PSBD TE9DQUw7CisgI2VuZGlmCisgI2lmIGRlZmluZWQgKENSRUFEKQorICAgYXR0ci5jX2NmbGFnIHwg Q1JFQUQ7CisgI2VuZGlmCisgCisgICAvKiBDb25maWd1cmUgc3BlZWQuICAqLworICAgaWYgKCFO SUxQIChGcGxpc3RfbWVtYmVyIChjb250YWN0LCBRQ3NwZWVkKSkpCisgICAgIHRlbSA9IEZwbGlz dF9nZXQgKGNvbnRhY3QsIFFDc3BlZWQpOworICAgZWxzZQorICAgICB0ZW0gPSBGcGxpc3RfZ2V0 IChwLT5jaGlsZHAsIFFDc3BlZWQpOworICAgQ0hFQ0tfTlVNQkVSICh0ZW0pOworICAgZXJyID0g Y2ZzZXRzcGVlZCAoJmF0dHIsIFhJTlQgKHRlbSkpOworICAgaWYgKGVyciAhPSAwKQorICAgICBl cnJvciAoImNmc2V0c3BlZWQoJWQpIGZhaWxlZDogJXMiLCBYSU5UICh0ZW0pLCBlbWFjc19zdHJl cnJvciAoZXJybm8pKTsKKyAgIGNoaWxkcDIgPSBGcGxpc3RfcHV0IChjaGlsZHAyLCBRQ3NwZWVk LCB0ZW0pOworIAorICAgLyogQ29uZmlndXJlIGJ5dGVzaXplLiAgKi8KKyAgIGlmICghTklMUCAo RnBsaXN0X21lbWJlciAoY29udGFjdCwgUUNieXRlc2l6ZSkpKQorICAgICB0ZW0gPSBGcGxpc3Rf Z2V0IChjb250YWN0LCBRQ2J5dGVzaXplKTsKKyAgIGVsc2UKKyAgICAgdGVtID0gRnBsaXN0X2dl dCAocC0+Y2hpbGRwLCBRQ2J5dGVzaXplKTsKKyAgIGlmIChOSUxQICh0ZW0pKQorICAgICB0ZW0g PSBtYWtlX251bWJlciAoOCk7CisgICBDSEVDS19OVU1CRVIgKHRlbSk7CisgICBpZiAoWElOVCAo dGVtKSAhPSA3ICYmIFhJTlQgKHRlbSkgIT0gOCkKKyAgICAgZXJyb3IgKCI6Ynl0ZXNpemUgbXVz dCBiZSBuaWwgKDgpLCA3LCBvciA4Iik7CisgICBzdW1tYXJ5WzBdID0gWElOVCh0ZW0pICsgJzAn OworICNpZiBkZWZpbmVkIChDU0laRSkgJiYgZGVmaW5lZCAoQ1M3KSAmJiBkZWZpbmVkIChDUzgp CisgICBhdHRyLmNfY2ZsYWcgJj0gfkNTSVpFOworICAgYXR0ci5jX2NmbGFnIHw9ICgoWElOVCAo dGVtKSA9PSA3KSA/IENTNyA6IENTOCk7CisgI2Vsc2UKKyAgIC8qIERvbid0IGVycm9yIG9uIGJ5 dGVzaXplIDgsIHdoaWNoIHNob3VsZCBiZSBzZXQgYnkgY2ZtYWtlcmF3KCkuICAqLworICAgaWYg KFhJTlQgKHRlbSkgIT0gOCkKKyAgICAgZXJyb3IgKCJCeXRlc2l6ZSBjYW5ub3QgYmUgY2hhbmdl ZCIpOworICNlbmRpZgorICAgY2hpbGRwMiA9IEZwbGlzdF9wdXQgKGNoaWxkcDIsIFFDYnl0ZXNp emUsIHRlbSk7CisgCisgICAvKiBDb25maWd1cmUgcGFyaXR5LiAgKi8KKyAgIGlmICghTklMUCAo RnBsaXN0X21lbWJlciAoY29udGFjdCwgUUNwYXJpdHkpKSkKKyAgICAgdGVtID0gRnBsaXN0X2dl dCAoY29udGFjdCwgUUNwYXJpdHkpOworICAgZWxzZQorICAgICB0ZW0gPSBGcGxpc3RfZ2V0IChw LT5jaGlsZHAsIFFDcGFyaXR5KTsKKyAgIGlmICghTklMUCAodGVtKSAmJiAhRVEgKHRlbSwgUWV2 ZW4pICYmICFFUSAodGVtLCBRb2RkKSkKKyAgICAgZXJyb3IgKCI6cGFyaXR5IG11c3QgYmUgbmls IChubyBwYXJpdHkpLCBgZXZlbicsIG9yIGBvZGQnIik7CisgI2lmIGRlZmluZWQgKFBBUkVOQikg JiYgZGVmaW5lZCAoUEFST0REKSAmJiBkZWZpbmVkIChJR05QQVIpICYmIGRlZmluZWQgKElOUENL KQorICAgYXR0ci5jX2NmbGFnICY9IH4oUEFSRU5CIHwgUEFST0REKTsKKyAgIGF0dHIuY19pZmxh ZyAmPSB+KElHTlBBUiB8IElOUENLKTsKKyAgIGlmIChOSUxQICh0ZW0pKQorICAgICB7CisgICAg ICAgc3VtbWFyeVsxXSA9ICdOJzsKKyAgICAgfQorICAgZWxzZSBpZiAoRVEgKHRlbSwgUWV2ZW4p KQorICAgICB7CisgICAgICAgc3VtbWFyeVsxXSA9ICdFJzsKKyAgICAgICBhdHRyLmNfY2ZsYWcg fD0gUEFSRU5COworICAgICAgIGF0dHIuY19pZmxhZyB8PSAoSUdOUEFSIHwgSU5QQ0spOworICAg ICB9CisgICBlbHNlIGlmIChFUSAodGVtLCBRb2RkKSkKKyAgICAgeworICAgICAgIHN1bW1hcnlb MV0gPSAnTyc7CisgICAgICAgYXR0ci5jX2NmbGFnIHw9IChQQVJFTkIgfCBQQVJPREQpOworICAg ICAgIGF0dHIuY19pZmxhZyB8PSAoSUdOUEFSIHwgSU5QQ0spOworICAgICB9CisgI2Vsc2UKKyAg IC8qIERvbid0IGVycm9yIG9uIG5vIHBhcml0eSwgd2hpY2ggc2hvdWxkIGJlIHNldCBieSBjZm1h a2VyYXcoKS4gICovCisgICBpZiAoIU5JTFAgKHRlbSkpCisgICAgIGVycm9yICgiUGFyaXR5IGNh bm5vdCBiZSBjb25maWd1cmVkIik7CisgI2VuZGlmCisgICBjaGlsZHAyID0gRnBsaXN0X3B1dCAo Y2hpbGRwMiwgUUNwYXJpdHksIHRlbSk7CisgCisgICAvKiBDb25maWd1cmUgc3RvcGJpdHMuICAq LworICAgaWYgKCFOSUxQIChGcGxpc3RfbWVtYmVyIChjb250YWN0LCBRQ3N0b3BiaXRzKSkpCisg ICAgIHRlbSA9IEZwbGlzdF9nZXQgKGNvbnRhY3QsIFFDc3RvcGJpdHMpOworICAgZWxzZQorICAg ICB0ZW0gPSBGcGxpc3RfZ2V0IChwLT5jaGlsZHAsIFFDc3RvcGJpdHMpOworICAgaWYgKE5JTFAg KHRlbSkpCisgICAgIHRlbSA9IG1ha2VfbnVtYmVyICgxKTsKKyAgIENIRUNLX05VTUJFUiAodGVt KTsKKyAgIGlmIChYSU5UICh0ZW0pICE9IDEgJiYgWElOVCAodGVtKSAhPSAyKQorICAgICBlcnJv ciAoIjpzdG9wYml0cyBtdXN0IGJlIG5pbCAoMSBzdG9wYml0KSwgMSwgb3IgMiIpOworICAgc3Vt bWFyeVsyXSA9IFhJTlQgKHRlbSkgKyAnMCc7CisgI2lmIGRlZmluZWQgKENTVE9QQikKKyAgIGF0 dHIuY19jZmxhZyAmPSB+Q1NUT1BCOworICAgaWYgKFhJTlQgKHRlbSkgPT0gMikKKyAgICAgYXR0 ci5jX2NmbGFnIHw9IENTVE9QQjsKKyAjZWxzZQorICAgLyogRG9uJ3QgZXJyb3Igb24gMSBzdG9w Yml0LCB3aGljaCBzaG91bGQgYmUgc2V0IGJ5IGNmbWFrZXJhdygpLiAgKi8KKyAgIGlmIChYSU5U ICh0ZW0pICE9IDEpCisgICAgIGVycm9yICgiU3RvcGJpdHMgY2Fubm90IGJlIGNvbmZpZ3VyZWQi KTsKKyAjZW5kaWYKKyAgIGNoaWxkcDIgPSBGcGxpc3RfcHV0IChjaGlsZHAyLCBRQ3N0b3BiaXRz LCB0ZW0pOworIAorICAgLyogQ29uZmlndXJlIGZsb3djb250cm9sLiAgKi8KKyAgIGlmICghTklM UCAoRnBsaXN0X21lbWJlciAoY29udGFjdCwgUUNmbG93Y29udHJvbCkpKQorICAgICB0ZW0gPSBG cGxpc3RfZ2V0IChjb250YWN0LCBRQ2Zsb3djb250cm9sKTsKKyAgIGVsc2UKKyAgICAgdGVtID0g RnBsaXN0X2dldCAocC0+Y2hpbGRwLCBRQ2Zsb3djb250cm9sKTsKKyAgIGlmICghTklMUCAodGVt KSAmJiAhRVEgKHRlbSwgUWh3KSAmJiAhRVEgKHRlbSwgUXN3KSkKKyAgICAgZXJyb3IgKCI6Zmxv d2NvbnRyb2wgbXVzdCBiZSBuaWwgKG5vIGZsb3djb250cm9sKSwgYGh3Jywgb3IgYHN3JyIpOwor ICNpZiBkZWZpbmVkIChDUlRTQ1RTKQorICAgYXR0ci5jX2NmbGFnICY9IH5DUlRTQ1RTOworICNl bmRpZgorICNpZiBkZWZpbmVkIChDTkVXX1JUU0NUUykKKyAgIGF0dHIuY19jZmxhZyAmPSB+Q05F V19SVFNDVFM7CisgI2VuZGlmCisgI2lmIGRlZmluZWQgKElYT04pICYmIGRlZmluZWQgKElYT0ZG KQorICAgYXR0ci5jX2lmbGFnICY9IH4oSVhPTiB8IElYT0ZGKTsKKyAjZW5kaWYKKyAgIGlmIChO SUxQICh0ZW0pKQorICAgICB7CisgICAgICAgLyogQWxyZWFkeSBjb25maWd1cmVkLiAgKi8KKyAg ICAgfQorICAgZWxzZSBpZiAoRVEgKHRlbSwgUWh3KSkKKyAgICAgeworICNpZiBkZWZpbmVkIChD UlRTQ1RTKQorICAgICAgIGF0dHIuY19jZmxhZyB8PSBDUlRTQ1RTOworICNlbGlmIGRlZmluZWQg KENORVdfUlRTQ1RTKQorICAgICAgIGF0dHIuY19jZmxhZyB8PSBDTkVXX1JUU0NUUzsKKyAjZWxz ZQorICAgICAgIGVycm9yICgiSGFyZHdhcmUgZmxvd2NvbnRyb2wgKFJUUy9DVFMpIG5vdCBzdXBw b3J0ZWQiKTsKKyAjZW5kaWYKKyAgICAgfQorICAgZWxzZSBpZiAoRVEgKHRlbSwgUXN3KSkKKyAg ICAgeworICNpZiBkZWZpbmVkIChJWE9OKSAmJiBkZWZpbmVkIChJWE9GRikKKyAgICAgICBhdHRy LmNfaWZsYWcgfD0gKElYT04gfCBJWE9GRik7CisgI2Vsc2UKKyAgICAgICBlcnJvciAoIlNvZnR3 YXJlIGZsb3djb250cm9sIChYT04vWE9GRikgbm90IHN1cHBvcnRlZCIpOworICNlbmRpZgorICAg ICB9CisgICBjaGlsZHAyID0gRnBsaXN0X3B1dCAoY2hpbGRwMiwgUUNmbG93Y29udHJvbCwgdGVt KTsKKyAKKyAgIC8qIEFjdGl2YXRlIGNvbmZpZ3VyYXRpb24uICAqLworICAgZXJyID0gdGNzZXRh dHRyIChwLT5vdXRmZCwgVENTQU5PVywgJmF0dHIpOworICAgaWYgKGVyciAhPSAwKQorICAgICBl cnJvciAoInRjc2V0YXR0cigpIGZhaWxlZDogJXMiLCBlbWFjc19zdHJlcnJvciAoZXJybm8pKTsK KyAKKyAgIGNoaWxkcDIgPSBGcGxpc3RfcHV0IChjaGlsZHAyLCBRQ3N1bW1hcnksIGJ1aWxkX3N0 cmluZyAoc3VtbWFyeSkpOworICAgcC0+Y2hpbGRwID0gY2hpbGRwMjsKKyAKKyB9CisgI2VuZGlm IC8qIFRFUk1JT1MgICovCiAgCiAgLyogYXJjaC10YWc6IGVkYjQzNTg5LTRlMDktNDU0NC1iMzI1 LTk3OGI1YjEyMWRjZgogICAgIChkbyBub3QgY2hhbmdlIHRoaXMgY29tbWVudCkgKi8KSW5kZXg6 IHNyYy93MzIuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvc291cmNlcy9lbWFjcy9lbWFjcy9zcmMv dzMyLmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTQzCmRpZmYgLWMgLXAgLXIxLjE0MyB3MzIu YwoqKiogc3JjL3czMi5jCTIgSnVuIDIwMDggMDY6MDk6MTYgLTAwMDAJMS4xNDMKLS0tIHNyYy93 MzIuYwkxMiBKdW4gMjAwOCAxOTo1NDoyMiAtMDAwMAoqKioqKioqKioqKioqKiogYWxvbmcgd2l0 aCBHTlUgRW1hY3MuICBJZiBub3QsIHNlZSA8aHR0cAoqKiogMTAyLDEwNyAqKioqCi0tLSAxMDIs MTE0IC0tLS0KICAjaW5jbHVkZSAic3lzdGltZS5oIgogICNpbmNsdWRlICJkaXNwZXh0ZXJuLmgi CQkvKiBmb3IgeHN0cmNhc2VjbXAgKi8KICAKKyAvKiBGb3Igc2VyaWFsX2NvbmZpZ3VyZSgpIGFu ZCBzZXJpYWxfb3BlbigpICAqLworICNpbmNsdWRlICJwcm9jZXNzLmgiCisgLyogRnJvbSBwcm9j ZXNzLmMgICovCisgZXh0ZXJuIExpc3BfT2JqZWN0IFFDcG9ydCwgUUNzcGVlZCwgUUNwcm9jZXNz OworIGV4dGVybiBMaXNwX09iamVjdCBRQ2J5dGVzaXplLCBRQ3N0b3BiaXRzLCBRQ3Bhcml0eSwg UW9kZCwgUWV2ZW47CisgZXh0ZXJuIExpc3BfT2JqZWN0IFFDZmxvd2NvbnRyb2wsIFFodywgUXN3 LCBRQ3N1bW1hcnk7CisgCiAgdHlwZWRlZiBIUkVTVUxUIChXSU5BUEkgKiBTaEdldEZvbGRlclBh dGhfZm4pCiAgICAoSU4gSFdORCwgSU4gaW50LCBJTiBIQU5ETEUsIElOIERXT1JELCBPVVQgY2hh ciAqKTsKICAKKioqKioqKioqKioqKioqIF9zeXNfcmVhZF9haGVhZCAoaW50IGZkKQoqKiogNDA2 Myw0MDcyICoqKioKICAgIGlmIChjcCA9PSBOVUxMIHx8IGNwLT5mZCAhPSBmZCB8fCBjcC0+c3Rh dHVzICE9IFNUQVRVU19SRUFEX1JFQURZKQogICAgICByZXR1cm4gU1RBVFVTX1JFQURfRVJST1I7 CiAgCiEgICBpZiAoKGZkX2luZm9bZmRdLmZsYWdzICYgKEZJTEVfUElQRSB8IEZJTEVfU09DS0VU KSkgPT0gMAogICAgICAgIHx8IChmZF9pbmZvW2ZkXS5mbGFncyAmIEZJTEVfUkVBRCkgPT0gMCkK ICAgICAgewohICAgICAgIERlYlByaW50ICgoIl9zeXNfcmVhZF9haGVhZDogaW50ZXJuYWwgZXJy b3I6IGZkICVkIGlzIG5vdCBhIHBpcGUgb3Igc29ja2V0IVxuIiwgZmQpKTsKICAgICAgICBhYm9y dCAoKTsKICAgICAgfQogIAotLS0gNDA3MCw0MDc5IC0tLS0KICAgIGlmIChjcCA9PSBOVUxMIHx8 IGNwLT5mZCAhPSBmZCB8fCBjcC0+c3RhdHVzICE9IFNUQVRVU19SRUFEX1JFQURZKQogICAgICBy ZXR1cm4gU1RBVFVTX1JFQURfRVJST1I7CiAgCiEgICBpZiAoKGZkX2luZm9bZmRdLmZsYWdzICYg KEZJTEVfUElQRSB8IEZJTEVfU0VSSUFMIHwgRklMRV9TT0NLRVQpKSA9PSAwCiAgICAgICAgfHwg KGZkX2luZm9bZmRdLmZsYWdzICYgRklMRV9SRUFEKSA9PSAwKQogICAgICB7CiEgICAgICAgRGVi UHJpbnQgKCgiX3N5c19yZWFkX2FoZWFkOiBpbnRlcm5hbCBlcnJvcjogZmQgJWQgaXMgbm90IGEg cGlwZSwgc2VyaWFsIHBvcnQsIG9yIHNvY2tldCFcbiIsIGZkKSk7CiAgICAgICAgYWJvcnQgKCk7 CiAgICAgIH0KICAKKioqKioqKioqKioqKioqIF9zeXNfcmVhZF9haGVhZCAoaW50IGZkKQoqKiog NDA4MCw0MDg2ICoqKioKICAJIHJlcG9ydGluZyB0aGF0IGlucHV0IGlzIGF2YWlsYWJsZTsgd2Ug bmVlZCB0aGlzIGJlY2F1c2UgV2luZG93cyA5NQogIAkgY29ubmVjdHMgRE9TIHByb2dyYW1zIHRv IHBpcGVzIGJ5IG1ha2luZyB0aGUgcGlwZSBhcHBlYXIgdG8gYmUKICAJIHRoZSBub3JtYWwgY29u c29sZSBzdGRvdXQgLSBhcyBhIHJlc3VsdCBtb3N0IERPUyBwcm9ncmFtcyB3aWxsCiEgCSB3cml0 ZSB0byBzdGRvdXQgd2l0aG91dCBidWZmZXJpbmcsIGllLiAgb25lIGNoYXJhY3RlciBhdCBhCiAg CSB0aW1lLiAgRXZlbiBzb21lIFczMiBwcm9ncmFtcyBkbyB0aGlzIC0gImRpciIgaW4gYSBjb21t YW5kCiAgCSBzaGVsbCBvbiBOVCBpcyB2ZXJ5IHNsb3cgaWYgd2UgZG9uJ3QgZG8gdGhpcy4gKi8K ICAgICAgICBpZiAocmMgPiAwKQotLS0gNDA4Nyw0MDkzIC0tLS0KICAJIHJlcG9ydGluZyB0aGF0 IGlucHV0IGlzIGF2YWlsYWJsZTsgd2UgbmVlZCB0aGlzIGJlY2F1c2UgV2luZG93cyA5NQogIAkg Y29ubmVjdHMgRE9TIHByb2dyYW1zIHRvIHBpcGVzIGJ5IG1ha2luZyB0aGUgcGlwZSBhcHBlYXIg dG8gYmUKICAJIHRoZSBub3JtYWwgY29uc29sZSBzdGRvdXQgLSBhcyBhIHJlc3VsdCBtb3N0IERP UyBwcm9ncmFtcyB3aWxsCiEgCSB3cml0ZSB0byBzdGRvdXQgd2l0aG91dCBidWZmZXJpbmcsIGll LiBvbmUgY2hhcmFjdGVyIGF0IGEKICAJIHRpbWUuICBFdmVuIHNvbWUgVzMyIHByb2dyYW1zIGRv IHRoaXMgLSAiZGlyIiBpbiBhIGNvbW1hbmQKICAJIHNoZWxsIG9uIE5UIGlzIHZlcnkgc2xvdyBp ZiB3ZSBkb24ndCBkbyB0aGlzLiAqLwogICAgICAgIGlmIChyYyA+IDApCioqKioqKioqKioqKioq KiBfc3lzX3JlYWRfYWhlYWQgKGludCBmZCkKKioqIDQwOTYsNDEwMSAqKioqCi0tLSA0MTAzLDQx MzEgLS0tLQogIAkgICAgICBTbGVlcCAoMCk7CiAgCX0KICAgICAgfQorICAgZWxzZSBpZiAoZmRf aW5mb1tmZF0uZmxhZ3MgJiBGSUxFX1NFUklBTCkKKyAgICAgeworICAgICAgIEhBTkRMRSBobmQg PSBmZF9pbmZvW2ZkXS5obmQ7CisgICAgICAgT1ZFUkxBUFBFRCAqb3ZsID0gJmZkX2luZm9bZmRd LmNwLT5vdmxfcmVhZDsKKyAgICAgICBDT01NVElNRU9VVFMgY3Q7CisgCisgICAgICAgLyogQ29u ZmlndXJlIHRpbWVvdXRzIGZvciBibG9ja2luZyByZWFkLiAgKi8KKyAgICAgICBpZiAoIUdldENv bW1UaW1lb3V0cyAoaG5kLCAmY3QpKQorIAlyZXR1cm4gU1RBVFVTX1JFQURfRVJST1I7CisgICAg ICAgY3QuUmVhZEludGVydmFsVGltZW91dAkJPSAwOworICAgICAgIGN0LlJlYWRUb3RhbFRpbWVv dXRNdWx0aXBsaWVyCT0gMDsKKyAgICAgICBjdC5SZWFkVG90YWxUaW1lb3V0Q29uc3RhbnQJPSAw OworICAgICAgIGlmICghU2V0Q29tbVRpbWVvdXRzIChobmQsICZjdCkpCisgCXJldHVybiBTVEFU VVNfUkVBRF9FUlJPUjsKKyAKKyAgICAgICBpZiAoIVJlYWRGaWxlIChobmQsICZjcC0+Y2hyLCBz aXplb2YgKGNoYXIpLCAoRFdPUkQqKSAmcmMsIG92bCkpCisgCXsKKyAJICBpZiAoR2V0TGFzdEVy cm9yICgpICE9IEVSUk9SX0lPX1BFTkRJTkcpCisgCSAgICByZXR1cm4gU1RBVFVTX1JFQURfRVJS T1I7CisgCSAgaWYgKCFHZXRPdmVybGFwcGVkUmVzdWx0IChobmQsIG92bCwgKERXT1JEKikgJnJj LCBUUlVFKSkKKyAJICAgIHJldHVybiBTVEFUVVNfUkVBRF9FUlJPUjsKKyAJfQorICAgICB9CiAg I2lmZGVmIEhBVkVfU09DS0VUUwogICAgZWxzZSBpZiAoZmRfaW5mb1tmZF0uZmxhZ3MgJiBGSUxF X1NPQ0tFVCkKICAgICAgewoqKioqKioqKioqKioqKiogc3lzX3JlYWQgKGludCBmZCwgY2hhciAq IGJ1ZmZlciwgdW5zaWduZQoqKiogNDE2Nyw0MTczICoqKioKICAgICAgICByZXR1cm4gLTE7CiAg ICAgIH0KICAKISAgIGlmIChmZCA8IE1BWERFU0MgJiYgZmRfaW5mb1tmZF0uZmxhZ3MgJiAoRklM RV9QSVBFIHwgRklMRV9TT0NLRVQpKQogICAgICB7CiAgICAgICAgY2hpbGRfcHJvY2VzcyAqY3Ag PSBmZF9pbmZvW2ZkXS5jcDsKICAKLS0tIDQxOTcsNDIwMyAtLS0tCiAgICAgICAgcmV0dXJuIC0x OwogICAgICB9CiAgCiEgICBpZiAoZmQgPCBNQVhERVNDICYmIGZkX2luZm9bZmRdLmZsYWdzICYg KEZJTEVfUElQRSB8IEZJTEVfU09DS0VUIHwgRklMRV9TRVJJQUwpKQogICAgICB7CiAgICAgICAg Y2hpbGRfcHJvY2VzcyAqY3AgPSBmZF9pbmZvW2ZkXS5jcDsKICAKKioqKioqKioqKioqKioqIHN5 c19yZWFkIChpbnQgZmQsIGNoYXIgKiBidWZmZXIsIHVuc2lnbmUKKioqIDQyMzgsNDI0MyAqKioq Ci0tLSA0MjY4LDQzMTkgLS0tLQogIAkgICAgICBpZiAodG9fcmVhZCA+IDApCiAgCQluY2hhcnMg Kz0gX3JlYWQgKGZkLCBidWZmZXIsIHRvX3JlYWQpOwogIAkgICAgfQorIAkgIGVsc2UgaWYgKGZk X2luZm9bZmRdLmZsYWdzICYgRklMRV9TRVJJQUwpCisgCSAgICB7CisgCSAgICAgIEhBTkRMRSBo bmQgPSBmZF9pbmZvW2ZkXS5obmQ7CisgCSAgICAgIE9WRVJMQVBQRUQgKm92bCA9ICZmZF9pbmZv W2ZkXS5jcC0+b3ZsX3JlYWQ7CisgCSAgICAgIERXT1JEIGVyciA9IDA7CisgCSAgICAgIGludCBy YyA9IDA7CisgCSAgICAgIENPTU1USU1FT1VUUyBjdDsKKyAKKyAJICAgICAgaWYgKGNvdW50ID4g MCkKKyAJCXsKKyAJCSAgLyogQ29uZmlndXJlIHRpbWVvdXRzIGZvciBub24tYmxvY2tpbmcgcmVh ZC4gICovCisgCQkgIGlmICghR2V0Q29tbVRpbWVvdXRzIChobmQsICZjdCkpCisgCQkgICAgewor IAkJICAgICAgZXJybm8gPSBFSU87CisgCQkgICAgICByZXR1cm4gLTE7CisgCQkgICAgfQorIAkJ ICBjdC5SZWFkSW50ZXJ2YWxUaW1lb3V0CSA9IE1BWERXT1JEOworIAkJICBjdC5SZWFkVG90YWxU aW1lb3V0TXVsdGlwbGllcgkgPSAwOworIAkJICBjdC5SZWFkVG90YWxUaW1lb3V0Q29uc3RhbnQJ ID0gMDsKKyAJCSAgaWYgKCFTZXRDb21tVGltZW91dHMgKGhuZCwgJmN0KSkKKyAJCSAgICB7Cisg CQkgICAgICBlcnJubyA9IEVJTzsKKyAJCSAgICAgIHJldHVybiAtMTsKKyAJCSAgICB9CisgCisg CQkgIGlmICghUmVzZXRFdmVudCAob3ZsLT5oRXZlbnQpKQorIAkJICAgIHsKKyAJCSAgICAgIGVy cm5vID0gRUlPOworIAkJICAgICAgcmV0dXJuIC0xOworIAkJICAgIH0KKyAJCSAgaWYgKCFSZWFk RmlsZSAoaG5kLCBidWZmZXIsIGNvdW50LCAoRFdPUkQqKSAmcmMsIG92bCkpCisgCQkgICAgewor IAkJICAgICAgaWYgKEdldExhc3RFcnJvciAoKSAhPSBFUlJPUl9JT19QRU5ESU5HKQorIAkJCXsK KyAJCQkgIGVycm5vID0gRUlPOworIAkJCSAgcmV0dXJuIC0xOworIAkJCX0KKyAJCSAgICAgIGlm ICghR2V0T3ZlcmxhcHBlZFJlc3VsdCAoaG5kLCBvdmwsIChEV09SRCopICZyYywgVFJVRSkpCisg CQkJeworIAkJCSAgZXJybm8gPSBFSU87CisgCQkJICByZXR1cm4gLTE7CisgCQkJfQorIAkJICAg IH0KKyAJCSAgbmNoYXJzICs9IHJjOworIAkJfQorIAkgICAgfQogICNpZmRlZiBIQVZFX1NPQ0tF VFMKICAJICBlbHNlIC8qIEZJTEVfU09DS0VUICovCiAgCSAgICB7CioqKioqKioqKioqKioqKiBz eXNfcmVhZCAoaW50IGZkLCBjaGFyICogYnVmZmVyLCB1bnNpZ25lCioqKiA0Mjk5LDQzMDQgKioq KgotLS0gNDM3NSw0MzgzIC0tLS0KICAgIHJldHVybiBuY2hhcnM7CiAgfQogIAorIC8qIEZyb20g dzMyeGZucy5jICovCisgZXh0ZXJuIEhBTkRMRSBpbnRlcnJ1cHRfaGFuZGxlOworIAogIC8qIEZv ciBub3csIGRvbid0IGJvdGhlciB3aXRoIGEgbm9uLWJsb2NraW5nIG1vZGUgKi8KICBpbnQKICBz eXNfd3JpdGUgKGludCBmZCwgY29uc3Qgdm9pZCAqIGJ1ZmZlciwgdW5zaWduZWQgaW50IGNvdW50 KQoqKioqKioqKioqKioqKiogc3lzX3dyaXRlIChpbnQgZmQsIGNvbnN0IHZvaWQgKiBidWZmZXIs IAoqKiogNDMxMSw0MzE3ICoqKioKICAgICAgICByZXR1cm4gLTE7CiAgICAgIH0KICAKISAgIGlm IChmZCA8IE1BWERFU0MgJiYgZmRfaW5mb1tmZF0uZmxhZ3MgJiAoRklMRV9QSVBFIHwgRklMRV9T T0NLRVQpKQogICAgICB7CiAgICAgICAgaWYgKChmZF9pbmZvW2ZkXS5mbGFncyAmIEZJTEVfV1JJ VEUpID09IDApCiAgCXsKLS0tIDQzOTAsNDM5NiAtLS0tCiAgICAgICAgcmV0dXJuIC0xOwogICAg ICB9CiAgCiEgICBpZiAoZmQgPCBNQVhERVNDICYmIGZkX2luZm9bZmRdLmZsYWdzICYgKEZJTEVf UElQRSB8IEZJTEVfU09DS0VUIHwgRklMRV9TRVJJQUwpKQogICAgICB7CiAgICAgICAgaWYgKChm ZF9pbmZvW2ZkXS5mbGFncyAmIEZJTEVfV1JJVEUpID09IDApCiAgCXsKKioqKioqKioqKioqKioq IHN5c193cml0ZSAoaW50IGZkLCBjb25zdCB2b2lkICogYnVmZmVyLCAKKioqIDQzNTIsNDM1NyAq KioqCi0tLSA0NDMxLDQ0NzIgLS0tLQogIAl9CiAgICAgIH0KICAKKyAgIGlmIChmZCA8IE1BWERF U0MgJiYgZmRfaW5mb1tmZF0uZmxhZ3MgJiBGSUxFX1NFUklBTCkKKyAgICAgeworICAgICAgIEhB TkRMRSBobmQgPSAoSEFORExFKSBfZ2V0X29zZmhhbmRsZSAoZmQpOworICAgICAgIE9WRVJMQVBQ RUQgKm92bCA9ICZmZF9pbmZvW2ZkXS5jcC0+b3ZsX3dyaXRlOworICAgICAgIEhBTkRMRSB3YWl0 X2huZFsyXSA9IHsgaW50ZXJydXB0X2hhbmRsZSwgb3ZsLT5oRXZlbnQgfTsKKyAgICAgICBEV09S RCBhY3RpdmUgPSAwOworIAorICAgICAgIGlmICghV3JpdGVGaWxlIChobmQsIGJ1ZmZlciwgY291 bnQsIChEV09SRCopICZuY2hhcnMsIG92bCkpCisgCXsKKyAJICBpZiAoR2V0TGFzdEVycm9yICgp ICE9IEVSUk9SX0lPX1BFTkRJTkcpCisgCSAgICB7CisgCSAgICAgIGVycm5vID0gRUlPOworIAkg ICAgICByZXR1cm4gLTE7CisgCSAgICB9CisgCSAgaWYgKGRldGVjdF9pbnB1dF9wZW5kaW5nICgp KQorIAkgICAgYWN0aXZlID0gTXNnV2FpdEZvck11bHRpcGxlT2JqZWN0cyAoMiwgd2FpdF9obmQs IEZBTFNFLCBJTkZJTklURSwKKyAJCQkJCQlRU19BTExJTlBVVCk7CisgCSAgZWxzZQorIAkgICAg YWN0aXZlID0gV2FpdEZvck11bHRpcGxlT2JqZWN0cyAoMiwgd2FpdF9obmQsIEZBTFNFLCBJTkZJ TklURSk7CisgCSAgaWYgKGFjdGl2ZSA9PSBXQUlUX09CSkVDVF8wKQorIAkgICAgeyAvKiBVc2Vy IHByZXNzZWQgQy1nLCBjYW5jZWwgd3JpdGUsIHRoZW4gbGVhdmUuICBEb24ndCBib3RoZXIKKyAJ CSBjbGVhbmluZyB1cCBhcyB3ZSBtYXkgb25seSBnZXQgc3R1Y2sgaW4gYnVnZ3kgZHJpdmVycy4g ICovCisgCSAgICAgIFB1cmdlQ29tbSAoaG5kLCBQVVJHRV9UWEFCT1JUIHwgUFVSR0VfVFhDTEVB Uik7CisgCSAgICAgIENhbmNlbElvIChobmQpOworIAkgICAgICBlcnJubyA9IEVJTzsKKyAJICAg ICAgcmV0dXJuIC0xOworIAkgICAgfQorIAkgIGlmIChhY3RpdmUgPT0gV0FJVF9PQkpFQ1RfMCAr IDEKKyAJICAgICAgJiYgIUdldE92ZXJsYXBwZWRSZXN1bHQgKGhuZCwgb3ZsLCAoRFdPUkQqKSAm bmNoYXJzLCBUUlVFKSkKKyAJICAgIHsKKyAJICAgICAgZXJybm8gPSBFSU87CisgCSAgICAgIHJl dHVybiAtMTsKKyAJICAgIH0KKyAJfQorICAgICB9CisgICBlbHNlCiAgI2lmZGVmIEhBVkVfU09D S0VUUwogICAgaWYgKGZkIDwgTUFYREVTQyAmJiBmZF9pbmZvW2ZkXS5mbGFncyAmIEZJTEVfU09D S0VUKQogICAgICB7CioqKioqKioqKioqKioqKiBnbG9iYWxzX29mX3czMiAoKQoqKiogNDYxMiw0 NjE3ICoqKioKLS0tIDQ3MjcsNDkyMiAtLS0tCiAgICBzdHJjcHkgKGRmbHRfZ3JvdXBfbmFtZSwg Ik5vbmUiKTsKICB9CiAgCisgLyogRm9yIG1ha2Utc2VyaWFsLXByb2Nlc3MgICovCisgaW50IHNl cmlhbF9vcGVuIChjaGFyICpwb3J0KQorIHsKKyAgIEhBTkRMRSBobmQ7CisgICBjaGlsZF9wcm9j ZXNzICpjcDsKKyAgIGludCBmZCA9IC0xOworIAorICAgaG5kID0gQ3JlYXRlRmlsZSAocG9ydCwg R0VORVJJQ19SRUFEIHwgR0VORVJJQ19XUklURSwgMCwgMCwKKyAJCSAgICBPUEVOX0VYSVNUSU5H LCBGSUxFX0ZMQUdfT1ZFUkxBUFBFRCwgMCk7CisgICBpZiAoaG5kID09IElOVkFMSURfSEFORExF X1ZBTFVFKQorICAgICBlcnJvciAoIkNvdWxkIG5vdCBvcGVuICVzIiwgcG9ydCk7CisgICBmZCA9 IChpbnQpIF9vcGVuX29zZmhhbmRsZSAoKGludCkgaG5kLCAwKTsKKyAgIGlmIChmZCA9PSAtMSkK KyAgICAgZXJyb3IgKCJDb3VsZCBub3Qgb3BlbiAlcyIsIHBvcnQpOworIAorICAgY3AgPSBuZXdf Y2hpbGQgKCk7CisgICBpZiAoIWNwKQorICAgICBlcnJvciAoIkNvdWxkIG5vdCBjcmVhdGUgY2hp bGQgcHJvY2VzcyIpOworICAgY3AtPmZkID0gZmQ7CisgICBjcC0+c3RhdHVzID0gU1RBVFVTX1JF QURfQUNLTk9XTEVER0VEOworICAgZmRfaW5mb1sgZmQgXS5obmQgPSBobmQ7CisgICBmZF9pbmZv WyBmZCBdLmZsYWdzIHw9CisgICAgIEZJTEVfUkVBRCB8IEZJTEVfV1JJVEUgfCBGSUxFX0JJTkFS WSB8IEZJTEVfU0VSSUFMOworICAgaWYgKGZkX2luZm9bIGZkIF0uY3AgIT0gTlVMTCkKKyAgICAg eworICAgICAgIGVycm9yICgiZmRfaW5mb1tmZCA9ICVkXSBpcyBhbHJlYWR5IGluIHVzZSIsIGZk KTsKKyAgICAgfQorICAgZmRfaW5mb1sgZmQgXS5jcCA9IGNwOworICAgY3AtPm92bF9yZWFkLmhF dmVudCA9IENyZWF0ZUV2ZW50IChOVUxMLCBUUlVFLCBGQUxTRSwgTlVMTCk7CisgICBpZiAoY3At Pm92bF9yZWFkLmhFdmVudCA9PSBOVUxMKQorICAgICAgIGVycm9yICgiQ291bGQgbm90IGNyZWF0 ZSByZWFkIGV2ZW50Iik7CisgICBjcC0+b3ZsX3dyaXRlLmhFdmVudCA9IENyZWF0ZUV2ZW50IChO VUxMLCBUUlVFLCBGQUxTRSwgTlVMTCk7CisgICBpZiAoY3AtPm92bF93cml0ZS5oRXZlbnQgPT0g TlVMTCkKKyAgICAgICBlcnJvciAoIkNvdWxkIG5vdCBjcmVhdGUgd3JpdGUgZXZlbnQiKTsKKyAK KyAgIHJldHVybiBmZDsKKyB9CisgCisgLyogRm9yIHNlcmlhbC1wcm9jZXNzLWNvbmZpZ3VyZSAg Ki8KKyB2b2lkCisgc2VyaWFsX2NvbmZpZ3VyZSAoc3RydWN0IExpc3BfUHJvY2VzcyAqcCwKKyAJ CSAgICAgIExpc3BfT2JqZWN0IGNvbnRhY3QpCisgeworICAgTGlzcF9PYmplY3QgY2hpbGRwMiA9 IFFuaWw7CisgICBMaXNwX09iamVjdCB0ZW0gPSBRbmlsOworICAgSEFORExFIGhuZDsKKyAgIERD QiBkY2I7CisgICBDT01NVElNRU9VVFMgY3Q7CisgICBjaGFyIHN1bW1hcnlbNF0gPSAiPz8/Ijsg LyogVGhpcyB1c3VhbGx5IGJlY29tZXMgIjhOMSIuICAqLworIAorICAgaWYgKChmZF9pbmZvWyBw LT5vdXRmZCBdLmZsYWdzICYgRklMRV9TRVJJQUwpID09IDApCisgICAgIGVycm9yICgiTm90IGEg c2VyaWFsIHByb2Nlc3MiKTsKKyAgIGhuZCA9IGZkX2luZm9bIHAtPm91dGZkIF0uaG5kOworIAor ICAgY2hpbGRwMiA9IEZjb3B5X3NlcXVlbmNlIChwLT5jaGlsZHApOworIAorICAgLyogSW5pdGlh bGl6ZSB0aW1lb3V0cyBmb3IgYmxvY2tpbmcgcmVhZCBhbmQgYmxvY2tpbmcgd3JpdGUuICAqLwor ICAgaWYgKCFHZXRDb21tVGltZW91dHMgKGhuZCwgJmN0KSkKKyAgICAgZXJyb3IgKCJHZXRDb21t VGltZW91dHMoKSBmYWlsZWQiKTsKKyAgIGN0LlJlYWRJbnRlcnZhbFRpbWVvdXQJID0gMDsKKyAg IGN0LlJlYWRUb3RhbFRpbWVvdXRNdWx0aXBsaWVyCSA9IDA7CisgICBjdC5SZWFkVG90YWxUaW1l b3V0Q29uc3RhbnQJID0gMDsKKyAgIGN0LldyaXRlVG90YWxUaW1lb3V0TXVsdGlwbGllciA9IDA7 CisgICBjdC5Xcml0ZVRvdGFsVGltZW91dENvbnN0YW50CSA9IDA7CisgICBpZiAoIVNldENvbW1U aW1lb3V0cyAoaG5kLCAmY3QpKQorICAgICBlcnJvciAoIlNldENvbW1UaW1lb3V0cygpIGZhaWxl ZCIpOworICAgLyogUmVhZCBwb3J0IGF0dHJpYnV0ZXMgYW5kIHByZXBhcmUgZGVmYXVsdCBjb25m aWd1cmF0aW9uLiAgKi8KKyAgIG1lbXNldCAoJmRjYiwgMCwgc2l6ZW9mIChkY2IpKTsKKyAgIGRj Yi5EQ0JsZW5ndGggPSBzaXplb2YgKERDQik7CisgICBpZiAoIUdldENvbW1TdGF0ZSAoaG5kLCAm ZGNiKSkKKyAgICAgZXJyb3IgKCJHZXRDb21tU3RhdGUoKSBmYWlsZWQiKTsKKyAgIGRjYi5mQmlu YXJ5CSAgICA9IFRSVUU7CisgICBkY2IuZk51bGwJICAgID0gRkFMU0U7CisgICBkY2IuZkFib3J0 T25FcnJvciA9IEZBTFNFOworICAgLyogZGNiLlhvbkxpbSBhbmQgZGNiLlhvZmZMaW0gYXJlIHNl dCBieSBHZXRDb21tU3RhdGUoKSAqLworICAgZGNiLkVycm9yQ2hhcgkgICAgPSAwOworICAgZGNi LkVvZkNoYXIJICAgID0gMDsKKyAgIGRjYi5FdnRDaGFyICAgICAgID0gMDsKKyAKKyAgIC8qIENv bmZpZ3VyZSBzcGVlZC4gICovCisgICBpZiAoIU5JTFAgKEZwbGlzdF9tZW1iZXIgKGNvbnRhY3Qs IFFDc3BlZWQpKSkKKyAgICAgdGVtID0gRnBsaXN0X2dldCAoY29udGFjdCwgUUNzcGVlZCk7Cisg ICBlbHNlCisgICAgIHRlbSA9IEZwbGlzdF9nZXQgKHAtPmNoaWxkcCwgUUNzcGVlZCk7CisgICBD SEVDS19OVU1CRVIgKHRlbSk7CisgICBkY2IuQmF1ZFJhdGUgPSBYSU5UICh0ZW0pOworICAgY2hp bGRwMiA9IEZwbGlzdF9wdXQgKGNoaWxkcDIsIFFDc3BlZWQsIHRlbSk7CisgCisgICAvKiBDb25m aWd1cmUgYnl0ZXNpemUuICAqLworICAgaWYgKCFOSUxQIChGcGxpc3RfbWVtYmVyIChjb250YWN0 LCBRQ2J5dGVzaXplKSkpCisgICAgIHRlbSA9IEZwbGlzdF9nZXQgKGNvbnRhY3QsIFFDYnl0ZXNp emUpOworICAgZWxzZQorICAgICB0ZW0gPSBGcGxpc3RfZ2V0IChwLT5jaGlsZHAsIFFDYnl0ZXNp emUpOworICAgaWYgKE5JTFAgKHRlbSkpCisgICAgIHRlbSA9IG1ha2VfbnVtYmVyICg4KTsKKyAg IENIRUNLX05VTUJFUiAodGVtKTsKKyAgIGlmIChYSU5UICh0ZW0pICE9IDcgJiYgWElOVCAodGVt KSAhPSA4KQorICAgICBlcnJvciAoIjpieXRlc2l6ZSBtdXN0IGJlIG5pbCAoOCksIDcsIG9yIDgi KTsKKyAgIGRjYi5CeXRlU2l6ZSA9IFhJTlQgKHRlbSk7CisgICBzdW1tYXJ5WzBdID0gWElOVCAo dGVtKSArICcwJzsKKyAgIGNoaWxkcDIgPSBGcGxpc3RfcHV0IChjaGlsZHAyLCBRQ2J5dGVzaXpl LCB0ZW0pOworIAorICAgLyogQ29uZmlndXJlIHBhcml0eS4gICovCisgICBpZiAoIU5JTFAgKEZw bGlzdF9tZW1iZXIgKGNvbnRhY3QsIFFDcGFyaXR5KSkpCisgICAgIHRlbSA9IEZwbGlzdF9nZXQg KGNvbnRhY3QsIFFDcGFyaXR5KTsKKyAgIGVsc2UKKyAgICAgdGVtID0gRnBsaXN0X2dldCAocC0+ Y2hpbGRwLCBRQ3Bhcml0eSk7CisgICBpZiAoIU5JTFAgKHRlbSkgJiYgIUVRICh0ZW0sIFFldmVu KSAmJiAhRVEgKHRlbSwgUW9kZCkpCisgICAgIGVycm9yICgiOnBhcml0eSBtdXN0IGJlIG5pbCAo bm8gcGFyaXR5KSwgYGV2ZW4nLCBvciBgb2RkJyIpOworICAgZGNiLmZQYXJpdHkgPSBGQUxTRTsK KyAgIGRjYi5QYXJpdHkgPSBOT1BBUklUWTsKKyAgIGRjYi5mRXJyb3JDaGFyID0gRkFMU0U7Cisg ICBpZiAoTklMUCAodGVtKSkKKyAgICAgeworICAgICAgIHN1bW1hcnlbMV0gPSAnTic7CisgICAg IH0KKyAgIGVsc2UgaWYgKEVRICh0ZW0sIFFldmVuKSkKKyAgICAgeworICAgICAgIHN1bW1hcnlb MV0gPSAnRSc7CisgICAgICAgZGNiLmZQYXJpdHkgPSBUUlVFOworICAgICAgIGRjYi5QYXJpdHkg PSBFVkVOUEFSSVRZOworICAgICAgIGRjYi5mRXJyb3JDaGFyID0gVFJVRTsKKyAgICAgfQorICAg ZWxzZSBpZiAoRVEgKHRlbSwgUW9kZCkpCisgICAgIHsKKyAgICAgICBzdW1tYXJ5WzFdID0gJ08n OworICAgICAgIGRjYi5mUGFyaXR5ID0gVFJVRTsKKyAgICAgICBkY2IuUGFyaXR5ID0gT0REUEFS SVRZOworICAgICAgIGRjYi5mRXJyb3JDaGFyID0gVFJVRTsKKyAgICAgfQorICAgY2hpbGRwMiA9 IEZwbGlzdF9wdXQgKGNoaWxkcDIsIFFDcGFyaXR5LCB0ZW0pOworIAorICAgLyogQ29uZmlndXJl IHN0b3BiaXRzLiAgKi8KKyAgIGlmICghTklMUCAoRnBsaXN0X21lbWJlciAoY29udGFjdCwgUUNz dG9wYml0cykpKQorICAgICB0ZW0gPSBGcGxpc3RfZ2V0IChjb250YWN0LCBRQ3N0b3BiaXRzKTsK KyAgIGVsc2UKKyAgICAgdGVtID0gRnBsaXN0X2dldCAocC0+Y2hpbGRwLCBRQ3N0b3BiaXRzKTsK KyAgIGlmIChOSUxQICh0ZW0pKQorICAgICB0ZW0gPSBtYWtlX251bWJlciAoMSk7CisgICBDSEVD S19OVU1CRVIgKHRlbSk7CisgICBpZiAoWElOVCAodGVtKSAhPSAxICYmIFhJTlQgKHRlbSkgIT0g MikKKyAgICAgZXJyb3IgKCI6c3RvcGJpdHMgbXVzdCBiZSBuaWwgKDEgc3RvcGJpdCksIDEsIG9y IDIiKTsKKyAgIHN1bW1hcnlbMl0gPSBYSU5UICh0ZW0pICsgJzAnOworICAgaWYgKFhJTlQgKHRl bSkgPT0gMSkKKyAgICAgZGNiLlN0b3BCaXRzID0gT05FU1RPUEJJVDsKKyAgIGVsc2UgaWYgKFhJ TlQgKHRlbSkgPT0gMikKKyAgICAgZGNiLlN0b3BCaXRzID0gVFdPU1RPUEJJVFM7CisgICBjaGls ZHAyID0gRnBsaXN0X3B1dCAoY2hpbGRwMiwgUUNzdG9wYml0cywgdGVtKTsKKyAKKyAgIC8qIENv bmZpZ3VyZSBmbG93Y29udHJvbC4gICovCisgICBpZiAoIU5JTFAgKEZwbGlzdF9tZW1iZXIgKGNv bnRhY3QsIFFDZmxvd2NvbnRyb2wpKSkKKyAgICAgdGVtID0gRnBsaXN0X2dldCAoY29udGFjdCwg UUNmbG93Y29udHJvbCk7CisgICBlbHNlCisgICAgIHRlbSA9IEZwbGlzdF9nZXQgKHAtPmNoaWxk cCwgUUNmbG93Y29udHJvbCk7CisgICBpZiAoIU5JTFAgKHRlbSkgJiYgIUVRICh0ZW0sIFFodykg JiYgIUVRICh0ZW0sIFFzdykpCisgICAgIGVycm9yICgiOmZsb3djb250cm9sIG11c3QgYmUgbmls IChubyBmbG93Y29udHJvbCksIGBodycsIG9yIGBzdyciKTsKKyAgIGRjYi5mT3V0eEN0c0Zsb3cJ PSBGQUxTRTsKKyAgIGRjYi5mT3V0eERzckZsb3cJPSBGQUxTRTsKKyAgIGRjYi5mRHRyQ29udHJv bAk9IERUUl9DT05UUk9MX0RJU0FCTEU7CisgICBkY2IuZkRzclNlbnNpdGl2aXR5CT0gRkFMU0U7 CisgICBkY2IuZlRYQ29udGludWVPblhvZmYJPSBGQUxTRTsKKyAgIGRjYi5mT3V0WAkJPSBGQUxT RTsKKyAgIGRjYi5mSW5YCQk9IEZBTFNFOworICAgZGNiLmZSdHNDb250cm9sCT0gUlRTX0NPTlRS T0xfRElTQUJMRTsKKyAgIGRjYi5Yb25DaGFyCQk9IDE3OyAvKiBDb250cm9sLVEgICovCisgICBk Y2IuWG9mZkNoYXIJCT0gMTk7IC8qIENvbnRyb2wtUyAgKi8KKyAgIGlmIChOSUxQICh0ZW0pKQor ICAgICB7CisgICAgICAgLyogQWxyZWFkeSBjb25maWd1cmVkLiAgKi8KKyAgICAgfQorICAgZWxz ZSBpZiAoRVEgKHRlbSwgUWh3KSkKKyAgICAgeworICAgICAgIGRjYi5mUnRzQ29udHJvbCA9IFJU U19DT05UUk9MX0hBTkRTSEFLRTsKKyAgICAgICBkY2IuZk91dHhDdHNGbG93ID0gVFJVRTsKKyAg ICAgfQorICAgZWxzZSBpZiAoRVEgKHRlbSwgUXN3KSkKKyAgICAgeworICAgICAgIGRjYi5mT3V0 WCA9IFRSVUU7CisgICAgICAgZGNiLmZJblggPSBUUlVFOworICAgICB9CisgICBjaGlsZHAyID0g RnBsaXN0X3B1dCAoY2hpbGRwMiwgUUNmbG93Y29udHJvbCwgdGVtKTsKKyAKKyAgIC8qIEFjdGl2 YXRlIGNvbmZpZ3VyYXRpb24uICAqLworICAgaWYgKCFTZXRDb21tU3RhdGUgKGhuZCwgJmRjYikp CisgICAgIGVycm9yICgiU2V0Q29tbVN0YXRlKCkgZmFpbGVkIik7CisgCisgICBjaGlsZHAyID0g RnBsaXN0X3B1dCAoY2hpbGRwMiwgUUNzdW1tYXJ5LCBidWlsZF9zdHJpbmcgKHN1bW1hcnkpKTsK KyAgIHAtPmNoaWxkcCA9IGNoaWxkcDI7CisgfQorIAogIC8qIGVuZCBvZiB3MzIuYyAqLwogIAog IC8qIGFyY2gtdGFnOiA5MDQ0MmRkMy0zN2JlLTQ4MmItYjI3Mi1hYzc1MmUzMDQ5ZjEKSW5kZXg6 IHNyYy93MzIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvc291cmNlcy9lbWFjcy9lbWFjcy9zcmMv dzMyLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjYKZGlmZiAtYyAtcCAtcjEuMjYgdzMyLmgK KioqIHNyYy93MzIuaAkxNSBNYXkgMjAwOCAwMzoyNToxMSAtMDAwMAkxLjI2Ci0tLSBzcmMvdzMy LmgJMTIgSnVuIDIwMDggMTk6NTQ6MjIgLTAwMDAKKioqKioqKioqKioqKioqIHR5cGVkZWYgc3Ry dWN0IF9jaGlsZF9wcm9jZXNzCioqKiA3Miw3NyAqKioqCi0tLSA3Miw3OSAtLS0tCiAgICBQUk9D RVNTX0lORk9STUFUSU9OICAgcHJvY2luZm87CiAgICB2b2xhdGlsZSBpbnQgICAgICAgICAgc3Rh dHVzOwogICAgY2hhciAgICAgICAgICAgICAgICAgIGNocjsKKyAgIE9WRVJMQVBQRUQgICAgICAg ICAgICBvdmxfcmVhZDsKKyAgIE9WRVJMQVBQRUQgICAgICAgICAgICBvdmxfd3JpdGU7CiAgfSBj aGlsZF9wcm9jZXNzOwogIAogICNkZWZpbmUgTUFYREVTQyBGRF9TRVRTSVpFCioqKioqKioqKioq KioqKiBleHRlcm4gZmlsZWRlc2MgZmRfaW5mbyBbIE1BWERFU0MgXTsKKioqIDk5LDEwNCAqKioq Ci0tLSAxMDEsMTA3IC0tLS0KICAjZGVmaW5lIEZJTEVfUElQRSAgICAgICAgICAgICAgIDB4MDEw MAogICNkZWZpbmUgRklMRV9TT0NLRVQgICAgICAgICAgICAgMHgwMjAwCiAgI2RlZmluZSBGSUxF X05ERUxBWSAgICAgICAgICAgICAweDA0MDAKKyAjZGVmaW5lIEZJTEVfU0VSSUFMICAgICAgICAg ICAgIDB4MDgwMAogIAogIGV4dGVybiBjaGlsZF9wcm9jZXNzICogbmV3X2NoaWxkICh2b2lkKTsK ICBleHRlcm4gdm9pZCBkZWxldGVfY2hpbGQgKGNoaWxkX3Byb2Nlc3MgKmNwKTsK ------=_Part_19594_2948954.1213301210405--