From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jonathan Leech-Pepin Subject: Re: Export to Texinfo Date: Tue, 31 Jul 2012 17:03:58 -0400 Message-ID: References: <87y5meaib9.fsf@gmail.com> <87a9yupn0c.fsf@gmail.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=f46d043c08e25deb2004c6268408 Return-path: Received: from eggs.gnu.org ([208.118.235.92]:39945) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SwJbm-00028D-KJ for emacs-orgmode@gnu.org; Tue, 31 Jul 2012 17:04:04 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1SwJbk-0000wf-TP for emacs-orgmode@gnu.org; Tue, 31 Jul 2012 17:04:02 -0400 Received: from mail-we0-f169.google.com ([74.125.82.169]:57453) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SwJbk-0000wU-42 for emacs-orgmode@gnu.org; Tue, 31 Jul 2012 17:04:00 -0400 Received: by weys10 with SMTP id s10so5255793wey.0 for ; Tue, 31 Jul 2012 14:03:58 -0700 (PDT) In-Reply-To: <87a9yupn0c.fsf@gmail.com> List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: Org Mode Mailing List Cc: =?ISO-8859-1?Q?Fran=E7ois_Pinard?= , Nicolas Goaziou --f46d043c08e25deb2004c6268408 Content-Type: text/plain; charset=ISO-8859-1 Hello, I've done some further work on the org-e-texinfo exporter and have gotten it to a point where it should be usable with only a few shortcomings. Features: - The copying section is created from the first headline containing the property :copying:. Headlines with this property will not be exported except in the @copying block. - Indexes will be created using unnumbered headings from headlines containing an :index: property. If the property has a value corresponding to a texinfo index ("cp" "fn" "ky" "pg" "tp" "vr") it will be generated using @printindex. Otherwise only the text will be exported and index printing will only be done if explicitly indicated. - The following export-snippets are recognized by the exporter: info, e-info and e-texinfo. - Header arguments can be added using ~#+TEXINFO_HEADER~ - Info directory information is provided by: #+TEXINFO_DIR_CATEGORY (e.g: "Emacs") #+TEXINFO_DIR_TITLE (e.g: "Org Mode Guide: (orgguide)") #+TEXINFO_DIR_DESC (e.g: "Abbreviated Org-mode Manual") - The info filename is determined by ~#+TEXINFO_FILENAME~, or by appending .info to the .org filename. - Additional title and author information (beyond a single line) can be included using #+SUBTITLE and #+SUBAUTHOR respectively. - The menu and detailed menu in the TOP node, as well as the in-node menus of child nodes are generated on export. Descriptions of the nodes are defined in the :DESCRIPTION: property of the headlines. - Tables are exported to @multitable. Column widths are either defined by the widest cell in each column (a string of ~a~ is generated equal to that length), or by a string of fractions in #+attr_texinfo (e.g: ~#+attr_texinfo :columns "0.33 0.33 0.33"~) I have left in an option for #+TEXINFO_CLASS even though only a single one is defined by default. Removing it would require reworking certain portions of the code at the moment, leaving it in allows for changes if an alternate structure is desired. It still has issues with the following: - Table.el tables will not be exported. - Only a single type of two-column table can currently be created, ~@table~. - Two-column tables are restricted to a single "indicating" command, defined by ~org-e-texinfo-def-table-markup~. I'm not sure how to get around these limitations since they are created from description lists (which do not recognize #+attr lines). - Links will export either as @ref{} or @uref{}. Manually creating @pxref{} and @xref{} links is possible within export snippets. I'm not certain where I would need to check to determine the context to select between the three choices. @xref and @pxref are preferred in some cases, however @ref does provide the necessary features in Info output. Also attached is a transcription of orgguide.texi to orgguide.org for use with the e-texinfo exporter. It is not exactly identical and likely has a few places that could be better transcribed into org from .texi, however it does demonstrate the resultant output when exporting. Prior to exporting the following must be evaluated: (add-to-list 'org-export-snippet-translation-alist '("info" . "e-texinfo")) (setq org-e-texinfo-def-table-markup "@kbd") Regards, Jon On 20 July 2012 09:42, Nicolas Goaziou wrote: > Jonathan Leech-Pepin writes: > >> Can I define the export-snippet using: >> >> (add-to-list 'org-export-snippet-translation-alist >> '("e-info" . "e-texinfo")) >> >> Or should that be left up to the discretion of the user? > > This is an user-oriented variable (customizable). > > Though, you have full control over which export snippets you accept. In > the following example, you accept both @@info:...@@ and @@texinfo:...@@ > snippets: > > (defun org-e-latex-export-snippet (export-snippet contents info) > "Blah..." > (when (memq (org-export-snippet-backend export-snippet) '(info texinfo)) > (org-element-property :value export-snippet))) > > Just specify it in package's documentation. --f46d043c08e25deb2004c6268408 Content-Type: application/octet-stream; name="org-e-texinfo.el" Content-Disposition: attachment; filename="org-e-texinfo.el" Content-Transfer-Encoding: base64 X-Attachment-Id: f_h5bgnvsr2 Ozs7IG9yZy1lLXRleGluZm8uZWwgLS0tIFRleGluZm8gQmFjay1FbmQgRm9yIE9yZyBFeHBvcnQg RW5naW5lCgo7OyBBdXRob3I6IEpvbmF0aGFuIExlZWNoLVBlcGluIDxqb25hdGhhbi5sZWVjaHBl cGluIGF0IGdtYWlsIGRvdCBjb20+Cjs7IEtleXdvcmRzOiBvdXRsaW5lcywgaHlwZXJtZWRpYSwg Y2FsZW5kYXIsIHdwCgo7OyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo7OyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQo7OyB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgo7 OyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgoKOzsgVGhpcyBwcm9ncmFtIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCjs7IGJ1dCBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m Cjs7IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUKOzsgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K Cjs7IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlCjs7IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0 dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgoKOzs7IENvbW1lbnRhcnk6Cjs7Cjs7IFRoaXMg bGlicmFyeSBpbXBsZW1lbnRzIGEgVGV4aW5mbyBiYWNrLWVuZCBmb3IgT3JnIGdlbmVyaWMKOzsg ZXhwb3J0ZXIuCjs7Cjs7IFRvIHRlc3QgaXQsIHJ1bgo7Owo7OyAgIE0tOiAob3JnLWV4cG9ydC10 by1idWZmZXIgJ2UtdGV4aW5mbyAiKlRlc3QgZS10ZXhpbmZvKiIpIFJFVAo7Owo7OyBpbiBhbiBv cmctbW9kZSBidWZmZXIgdGhlbiBzd2l0Y2ggdG8gdGhlIGJ1ZmZlciB0byBzZWUgdGhlIFRleGlu Zm8KOzsgZXhwb3J0LiAgU2VlIGNvbnRyaWIvbGlzcC9vcmctZXhwb3J0LmVsIGZvciBtb3JlIGRl dGFpbHMgb24gaG93Cjs7IHRoaXMgZXhwb3J0ZXIgd29ya3MuCjs7Cjs7IEl0IGludHJvZHVjZXMg ZWlnaHQgbmV3IGJ1ZmZlciBrZXl3b3JkczogIlRFWElORk9fQ0xBU1MiLAo7OyAiVEVYSU5GT19G SUxFTkFNRSIsICJURVhJTkZPX0hFQURFUiIsICJURVhJTkZPX0RJUl9DQVRFR09SWSIsCjs7ICJU RVhJTkZPX0RJUl9USVRMRSIsICJURVhJTkZPX0RJUl9ERVNDIiAiU1VCVElUTEUiIGFuZCAiU1VC QVVUSE9SIi4KOzsKOzsgVG8gaW5jbHVkZSBpbmxpbmUgY29kZSBzbmlwcGV0cyAoZm9yIGV4YW1w bGUgZm9yIGdlbmVyYXRpbmcgQGtiZHt9Cjs7IGFuZCBAa2V5e30gY29tbWFuZHMpLCB0aGUgZm9s bG93aW5nIGV4cG9ydC1zbmlwcGV0IGtleXMgYXJlCjs7IGFjY2VwdGVkOgo7OyAKOzsgICAgIGlu Zm8KOzsgICAgIGUtaW5mbwo7OyAgICAgZS10ZXhpbmZvCjs7Cjs7IFlvdSBjYW4gYWRkIHRoZW0g Zm9yIGV4cG9ydCBzbmlwcGV0cyB2aWEgYW55IG9mIHRoZSBiZWxvdzoKOzsKOzsgICAgKGFkZC10 by1saXN0ICdvcmctZXhwb3J0LXNuaXBwZXQtdHJhbnNsYXRpb24tYWxpc3QKOzsgICAgICAgICAg ICAgICAgICcoImUtaW5mbyIgLiAiZS10ZXhpbmZvIikpCjs7ICAgIChhZGQtdG8tbGlzdCAnb3Jn LWV4cG9ydC1zbmlwcGV0LXRyYW5zbGF0aW9uLWFsaXN0Cjs7ICAgICAgICAgICAgICAgICAnKCJl LXRleGluZm8iIC4gImUtdGV4aW5mbyIpKQo7OyAgICAoYWRkLXRvLWxpc3QgJ29yZy1leHBvcnQt c25pcHBldC10cmFuc2xhdGlvbi1hbGlzdAo7OyAgICAgICAgICAgICAgICAgJygiaW5mbyIgLiAi ZS10ZXhpbmZvIikpCjs7IAoKCjs7OyBDb2RlOgoKKGV2YWwtd2hlbi1jb21waWxlIChyZXF1aXJl ICdjbCkpCihyZXF1aXJlICdvcmctZXhwb3J0KQoKKGRlZnZhciBvcmd0YmwtZXhwLXJlZ2V4cCkK CgwKOzs7IERlZmluZSBCYWNrLUVuZAoKKGRlZnZhciBvcmctZS10ZXhpbmZvLXRyYW5zbGF0ZS1h bGlzdAogICcoKGJhYmVsLWNhbGwgLiBvcmctZS10ZXhpbmZvLWJhYmVsLWNhbGwpCiAgICAoYm9s ZCAuIG9yZy1lLXRleGluZm8tYm9sZCkKICAgIChjZW50ZXItYmxvY2sgLiBvcmctZS10ZXhpbmZv LWNlbnRlci1ibG9jaykKICAgIChjbG9jayAuIG9yZy1lLXRleGluZm8tY2xvY2spCiAgICAoY29k ZSAuIG9yZy1lLXRleGluZm8tY29kZSkKICAgIChjb21tZW50IC4gb3JnLWUtdGV4aW5mby1jb21t ZW50KQogICAgKGNvbW1lbnQtYmxvY2sgLiBvcmctZS10ZXhpbmZvLWNvbW1lbnQtYmxvY2spCiAg ICAoZHJhd2VyIC4gb3JnLWUtdGV4aW5mby1kcmF3ZXIpCiAgICAoZHluYW1pYy1ibG9jayAuIG9y Zy1lLXRleGluZm8tZHluYW1pYy1ibG9jaykKICAgIChlbnRpdHkgLiBvcmctZS10ZXhpbmZvLWVu dGl0eSkKICAgIChleGFtcGxlLWJsb2NrIC4gb3JnLWUtdGV4aW5mby1leGFtcGxlLWJsb2NrKQog ICAgKGV4cG9ydC1ibG9jayAuIG9yZy1lLXRleGluZm8tZXhwb3J0LWJsb2NrKQogICAgKGV4cG9y dC1zbmlwcGV0IC4gb3JnLWUtdGV4aW5mby1leHBvcnQtc25pcHBldCkKICAgIChmaXhlZC13aWR0 aCAuIG9yZy1lLXRleGluZm8tZml4ZWQtd2lkdGgpCiAgICAoZm9vdG5vdGUtZGVmaW5pdGlvbiAu IG9yZy1lLXRleGluZm8tZm9vdG5vdGUtZGVmaW5pdGlvbikKICAgIChmb290bm90ZS1yZWZlcmVu Y2UgLiBvcmctZS10ZXhpbmZvLWZvb3Rub3RlLXJlZmVyZW5jZSkKICAgIChoZWFkbGluZSAuIG9y Zy1lLXRleGluZm8taGVhZGxpbmUpCiAgICAoaG9yaXpvbnRhbC1ydWxlIC4gb3JnLWUtdGV4aW5m by1ob3Jpem9udGFsLXJ1bGUpCiAgICAoaW5saW5lLWJhYmVsLWNhbGwgLiBvcmctZS10ZXhpbmZv LWlubGluZS1iYWJlbC1jYWxsKQogICAgKGlubGluZS1zcmMtYmxvY2sgLiBvcmctZS10ZXhpbmZv LWlubGluZS1zcmMtYmxvY2spCiAgICAoaW5saW5ldGFzayAuIG9yZy1lLXRleGluZm8taW5saW5l dGFzaykKICAgIChpdGFsaWMgLiBvcmctZS10ZXhpbmZvLWl0YWxpYykKICAgIChpdGVtIC4gb3Jn LWUtdGV4aW5mby1pdGVtKQogICAgKGtleXdvcmQgLiBvcmctZS10ZXhpbmZvLWtleXdvcmQpCiAg ICAobGF0ZXgtZW52aXJvbm1lbnQgLiBvcmctZS10ZXhpbmZvLWxhdGV4LWVudmlyb25tZW50KQog ICAgKGxhdGV4LWZyYWdtZW50IC4gb3JnLWUtdGV4aW5mby1sYXRleC1mcmFnbWVudCkKICAgIChs aW5lLWJyZWFrIC4gb3JnLWUtdGV4aW5mby1saW5lLWJyZWFrKQogICAgKGxpbmsgLiBvcmctZS10 ZXhpbmZvLWxpbmspCiAgICAobWFjcm8gLiBvcmctZS10ZXhpbmZvLW1hY3JvKQogICAgKHBhcmFn cmFwaCAuIG9yZy1lLXRleGluZm8tcGFyYWdyYXBoKQogICAgKHBsYWluLWxpc3QgLiBvcmctZS10 ZXhpbmZvLXBsYWluLWxpc3QpCiAgICAocGxhaW4tdGV4dCAuIG9yZy1lLXRleGluZm8tcGxhaW4t dGV4dCkKICAgIChwbGFubmluZyAuIG9yZy1lLXRleGluZm8tcGxhbm5pbmcpCiAgICAocHJvcGVy dHktZHJhd2VyIC4gb3JnLWUtdGV4aW5mby1wcm9wZXJ0eS1kcmF3ZXIpCiAgICAocXVvdGUtYmxv Y2sgLiBvcmctZS10ZXhpbmZvLXF1b3RlLWJsb2NrKQogICAgKHF1b3RlLXNlY3Rpb24gLiBvcmct ZS10ZXhpbmZvLXF1b3RlLXNlY3Rpb24pCiAgICAocmFkaW8tdGFyZ2V0IC4gb3JnLWUtdGV4aW5m by1yYWRpby10YXJnZXQpCiAgICAoc2VjdGlvbiAuIG9yZy1lLXRleGluZm8tc2VjdGlvbikKICAg IChzcGVjaWFsLWJsb2NrIC4gb3JnLWUtdGV4aW5mby1zcGVjaWFsLWJsb2NrKQogICAgKHNyYy1i bG9jayAuIG9yZy1lLXRleGluZm8tc3JjLWJsb2NrKQogICAgKHN0YXRpc3RpY3MtY29va2llIC4g b3JnLWUtdGV4aW5mby1zdGF0aXN0aWNzLWNvb2tpZSkKICAgIChzdHJpa2UtdGhyb3VnaCAuIG9y Zy1lLXRleGluZm8tc3RyaWtlLXRocm91Z2gpCiAgICAoc3Vic2NyaXB0IC4gb3JnLWUtdGV4aW5m by1zdWJzY3JpcHQpCiAgICAoc3VwZXJzY3JpcHQgLiBvcmctZS10ZXhpbmZvLXN1cGVyc2NyaXB0 KQogICAgKHRhYmxlIC4gb3JnLWUtdGV4aW5mby10YWJsZSkKICAgICh0YWJsZS1jZWxsIC4gb3Jn LWUtdGV4aW5mby10YWJsZS1jZWxsKQogICAgKHRhYmxlLXJvdyAuIG9yZy1lLXRleGluZm8tdGFi bGUtcm93KQogICAgKHRhcmdldCAuIG9yZy1lLXRleGluZm8tdGFyZ2V0KQogICAgKHRlbXBsYXRl IC4gb3JnLWUtdGV4aW5mby10ZW1wbGF0ZSkKICAgICh0aW1lc3RhbXAgLiBvcmctZS10ZXhpbmZv LXRpbWVzdGFtcCkKICAgICh1bmRlcmxpbmUgLiBvcmctZS10ZXhpbmZvLXVuZGVybGluZSkKICAg ICh2ZXJiYXRpbSAuIG9yZy1lLXRleGluZm8tdmVyYmF0aW0pCiAgICAodmVyc2UtYmxvY2sgLiBv cmctZS10ZXhpbmZvLXZlcnNlLWJsb2NrKSkKICAiQWxpc3QgYmV0d2VlbiBlbGVtZW50IG9yIG9i amVjdCB0eXBlcyBhbmQgdHJhbnNsYXRvcnMuIikKCihkZWZjb25zdCBvcmctZS10ZXhpbmZvLW9w dGlvbnMtYWxpc3QKICAnKCg6dGV4aW5mby1maWxlbmFtZSAiVEVYSU5GT19GSUxFTkFNRSIgbmls IG9yZy1lLXRleGluZm8tZmlsZW5hbWUgdCkKICAgICg6dGV4aW5mby1jbGFzcyAiVEVYSU5GT19D TEFTUyIgbmlsIG9yZy1lLXRleGluZm8tZGVmYXVsdC1jbGFzcyB0KQogICAgKDp0ZXhpbmZvLWhl YWRlciAiVEVYSU5GT19IRUFERVIiIG5pbCBuaWwgbmV3bGluZSkKICAgICg6c3VidGl0bGUgIlNV QlRJVExFIiBuaWwgbmlsIG5ld2xpbmUpCiAgICAoOnN1YmF1dGhvciAiU1VCQVVUSE9SIiBuaWwg bmlsIG5ld2xpbmUpCiAgICAoOnRleGluZm8tZGlyY2F0ICJURVhJTkZPX0RJUl9DQVRFR09SWSIg bmlsIG5pbCB0KQogICAgKDp0ZXhpbmZvLWRpcnRpdGxlICJURVhJTkZPX0RJUl9USVRMRSIgbmls IG5pbCB0KQogICAgKDp0ZXhpbmZvLWRpcmRlc2MgIlRFWElORk9fRElSX0RFU0MiIG5pbCBuaWwg dCkpCiAgIkFsaXN0IGJldHdlZW4gVGV4aW5mbyBleHBvcnQgcHJvcGVydGllcyBhbmQgd2F5cyB0 byBzZXQgdGhlbS4KU2VlIGBvcmctZXhwb3J0LW9wdGlvbnMtYWxpc3QnIGZvciBtb3JlIGluZm9y bWF0aW9uIG9uIHRoZQpzdHJ1Y3R1cmUgb2YgdGhlIHZhbHVlcy4KClNVQkFVVEhPUiBhbmQgU1VC VElUTEUgYXJlIGZvciB0aGUgaW5jbHVzaW9uIG9mIGFkZGl0aW9uYWwgYXV0aG9yCmFuZCB0aXRs ZSBpbmZvcm1hdGlvbiBiZXlvbmQgdGhlIGluaXRpYWwgdmFyaWFibGUuIikKCihkZWZjb25zdCBv cmctZS10ZXhpbmZvLWZpbHRlcnMtYWxpc3QKICAnKCg6ZmlsdGVyLWhlYWRsaW5lIC4gb3JnLWUt dGV4aW5mby1maWx0ZXItc2VjdGlvbi1ibGFuay1saW5lcykKICAgICg6ZmlsdGVyLXNlY3Rpb24g LiBvcmctZS10ZXhpbmZvLWZpbHRlci1zZWN0aW9uLWJsYW5rLWxpbmVzKSkKICAiQWxpc3QgYmV0 d2VlbiBmaWx0ZXJzIGtleXdvcmRzIGFuZCBiYWNrLWVuZCBzcGVjaWZpYyBmaWx0ZXJzLgogIFNl ZSBgb3JnLWV4cG9ydC1maWx0ZXJzLWFsaXN0JyBmb3IgbW9yZSBpbmZvcm1hdGlvbiIpCgoKDAo7 OzsgSW50ZXJuYWwgVmFyaWFibGVzCgo7OyBBZGQgVEVYSU5GTyB0byB0aGUgbGlzdCBvZiBhdmFp bGFibGUgb2YgYXZhaWxhYmxlIGV4cG9ydCBibG9ja3MuCihhZGQtdG8tbGlzdCAnb3JnLWVsZW1l bnQtYmxvY2stbmFtZS1hbGlzdAoJICAgICAnKCJURVhJTkZPIiAuIG9yZy1lbGVtZW50LWV4cG9y dC1ibG9jay1wYXJzZXIpKQoMCjs7OyBVc2VyIENvbmZpZ3VyYWJsZSBWYXJpYWJsZXMKCihkZWZn cm91cCBvcmctZXhwb3J0LWUtdGV4aW5mbyBuaWwKICAiT3B0aW9ucyBmb3IgZXhwb3J0aW5nIE9y ZyBtb2RlIGZpbGVzIHRvIFRleGluZm8uIgogIDp0YWcgIk9yZyBFeHBvcnQgVGV4aW5mbyIKICA6 Z3JvdXAgJ29yZy1leHBvcnQpCgoKOzs7OyBQcmVhbWJsZQoKKGRlZmN1c3RvbSBvcmctZS10ZXhp bmZvLWZpbGVuYW1lIG5pbAogICJEZWZhdWx0IGZpbGVuYW1lIGZvciB0ZXhpbmZvIG91dHB1dC4i CiAgOmdyb3VwICdvcmctZXhwb3J0LWUtdGV4aW5mbwogIDp0eXBlICcoc3RyaW5nIDp0YWcgIkV4 cG9ydCBGaWxlbmFtZSIpKQoKKGRlZmN1c3RvbSBvcmctZS10ZXhpbmZvLWRlZmF1bHQtY2xhc3Mg ImluZm8iCiAgIlRoZSBkZWZhdWx0IFRleGluZm8gY2xhc3MuIgogIDpncm91cCAnb3JnLWV4cG9y dC1lLXRleGluZm8KICA6dHlwZSAnKHN0cmluZyA6dGFnICJUZXhpbmZvIGNsYXNzIikpCgooZGVm Y3VzdG9tIG9yZy1lLXRleGluZm8tY2xhc3NlcwogICcoKCJpbmZvIgogICAgICJcXGlucHV0IHRl eGluZm8gICAgQGMgLSotIHRleGluZm8gLSotIgogICAgICgiQGNoYXB0ZXIgJXMiIC4gIkB1bm51 bWJlcmVkICVzIikKICAgICAoIkBzZWN0aW9uICVzIiAuICJAdW5udW1iZXJlZHNlYyAlcyIpCiAg ICAgKCJAc3Vic2VjdGlvbiAlcyIgLiAiQHVubnVtYmVyZWRzdWJzZWMgJXMiKQogICAgICgiQHN1 YnN1YnNlY3Rpb24gJXMiIC4gIkB1bm51bWJlcmVkc3Vic3Vic2VjICVzIikpKQogICJBbGlzdCBv ZiBUZXhpbmZvIGNsYXNzZXMgYW5kIGFzc29jaWF0ZWQgaGVhZGVyIGFuZCBzdHJ1Y3R1cmUuCklm ICMrVGV4aW5mb19DTEFTUyBpcyBzZXQgaW4gdGhlIGJ1ZmZlciwgdXNlIGl0cyB2YWx1ZSBhbmQg dGhlCmFzc29jaWF0ZWQgaW5mb3JtYXRpb24uICBIZXJlIGlzIHRoZSBzdHJ1Y3R1cmUgb2YgZWFj aCBjZWxsOgoKICBcKGNsYXNzLW5hbWUKICAgIGhlYWRlci1zdHJpbmcKICAgIFwobnVtYmVyZWQt c2VjdGlvbiAuIHVubnVtYmVyZWQtc2VjdGlvblwpCiAgICAuLi5cKQoKVGhlIHNlY3Rpb25pbmcg c3RydWN0dXJlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKVGhlIHNlY3Rpb25pbmcgc3RydWN0 dXJlIG9mIHRoZSBjbGFzcyBpcyBnaXZlbiBieSB0aGUgZWxlbWVudHMKZm9sbG93aW5nIHRoZSBo ZWFkZXIgc3RyaW5nLiAgRm9yIGVhY2ggc2VjdGlvbmluZyBsZXZlbCwgYSBudW1iZXIKb2Ygc3Ry aW5ncyBpcyBzcGVjaWZpZWQuICBBICVzIGZvcm1hdHRlciBpcyBtYW5kYXRvcnkgaW4gZWFjaApz ZWN0aW9uIHN0cmluZyBhbmQgd2lsbCBiZSByZXBsYWNlZCBieSB0aGUgdGl0bGUgb2YgdGhlIHNl Y3Rpb24uCgpJbnN0ZWFkIG9mIGEgbGlzdCBvZiBzZWN0aW9uaW5nIGNvbW1hbmRzLCB5b3UgY2Fu IGFsc28gc3BlY2lmeQphIGZ1bmN0aW9uIG5hbWUuICBUaGF0IGZ1bmN0aW9uIHdpbGwgYmUgY2Fs bGVkIHdpdGggdHdvCnBhcmFtZXRlcnMsIHRoZSBcKHJlZHVjZWQpIGxldmVsIG9mIHRoZSBoZWFk bGluZSwgYW5kIGEgcHJlZGljYXRlCm5vbi1uaWwgd2hlbiB0aGUgaGVhZGxpbmUgc2hvdWxkIGJl IG51bWJlcmVkLiAgSXQgbXVzdCByZXR1cm4KYSBmb3JtYXQgc3RyaW5nIGluIHdoaWNoIHRoZSBz ZWN0aW9uIHRpdGxlIHdpbGwgYmUgYWRkZWQuIgogIDpncm91cCAnb3JnLWV4cG9ydC1lLXRleGlu Zm8KICA6dHlwZSAnKHJlcGVhdAoJICAobGlzdCAoc3RyaW5nIDp0YWcgIlRleGluZm8gY2xhc3Mi KQoJCShzdHJpbmcgOnRhZyAiVGV4aW5mbyBoZWFkZXIiKQoJCShyZXBlYXQgOnRhZyAiTGV2ZWxz IiA6aW5saW5lIHQKCQkJKGNob2ljZQoJCQkgKGNvbnMgOnRhZyAiSGVhZGluZyIKCQkJICAgICAg IChzdHJpbmcgOnRhZyAiICBudW1iZXJlZCIpCgkJCSAgICAgICAoc3RyaW5nIDp0YWcgInVubnVt YmVyZWQiKSkKCQkJIChmdW5jdGlvbiA6dGFnICJIb29rIGNvbXB1dGluZyBzZWN0aW9uaW5nIikp KSkpKQoKCjs7OzsgSGVhZGxpbmUKCihkZWZjdXN0b20gb3JnLWUtdGV4aW5mby1mb3JtYXQtaGVh ZGxpbmUtZnVuY3Rpb24gbmlsCiAgIkZ1bmN0aW9uIHRvIGZvcm1hdCBoZWFkbGluZSB0ZXh0LgoK VGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3aXRoIDUgYXJndW1lbnRzOgpUT0RPICAgICAg dGhlIHRvZG8ga2V5d29yZCAoc3RyaW5nIG9yIG5pbCkuClRPRE8tVFlQRSB0aGUgdHlwZSBvZiB0 b2RvIChzeW1ib2w6IGB0b2RvJywgYGRvbmUnLCBuaWwpClBSSU9SSVRZICB0aGUgcHJpb3JpdHkg b2YgdGhlIGhlYWRsaW5lIChpbnRlZ2VyIG9yIG5pbCkKVEVYVCAgICAgIHRoZSBtYWluIGhlYWRs aW5lIHRleHQgKHN0cmluZykuClRBR1MgICAgICB0aGUgdGFncyBhcyBhIGxpc3Qgb2Ygc3RyaW5n cyAobGlzdCBvZiBzdHJpbmdzIG9yIG5pbCkuCgpUaGUgZnVuY3Rpb24gcmVzdWx0IHdpbGwgYmUg dXNlZCBpbiB0aGUgc2VjdGlvbiBmb3JtYXQgc3RyaW5nLgoKQXMgYW4gZXhhbXBsZSwgb25lIGNv dWxkIHNldCB0aGUgdmFyaWFibGUgdG8gdGhlIGZvbGxvd2luZywgaW4Kb3JkZXIgdG8gcmVwcm9k dWNlIHRoZSBkZWZhdWx0IHNldC11cDoKClwoZGVmdW4gb3JnLWUtdGV4aW5mby1mb3JtYXQtaGVh ZGxpbmUgKHRvZG8gdG9kby10eXBlIHByaW9yaXR5IHRleHQgdGFncykKICBcIkRlZmF1bHQgZm9y bWF0IGZ1bmN0aW9uIGZvciBhbiBoZWFkbGluZS5cIgogIFwoY29uY2F0ICh3aGVuIHRvZG8KICAg ICAgICAgICAgXChmb3JtYXQgXCJcXFxcdGV4dGJme1xcXFx0ZXh0c2N7XFxcXHRleHRzZnslc319 fSBcIiB0b2RvKSkKCSAgXCh3aGVuIHByaW9yaXR5CiAgICAgICAgICAgIFwoZm9ybWF0IFwiXFxc XGZyYW1lYm94e1xcXFwjJWN9IFwiIHByaW9yaXR5KSkKCSAgdGV4dAoJICBcKHdoZW4gdGFncwog ICAgICAgICAgICBcKGZvcm1hdCBcIlxcXFxoZmlsbHt9XFxcXHRleHRzY3slc31cIgogICAgICAg ICAgICAgIFwobWFwY29uY2F0ICdpZGVudGl0eSB0YWdzIFwiOlwiKSkpKSIKICA6Z3JvdXAgJ29y Zy1leHBvcnQtZS10ZXhpbmZvCiAgOnR5cGUgJ2Z1bmN0aW9uKQoKCjs7OzsgRm9vdG5vdGVzCjs7 Cjs7IEZvb3Rub3RlcyBhcmUgaW5zZXJ0ZWQgZGlyZWN0bHkKCjs7OzsgVGltZXN0YW1wcwoKKGRl ZmN1c3RvbSBvcmctZS10ZXhpbmZvLWFjdGl2ZS10aW1lc3RhbXAtZm9ybWF0ICJAZW1waHslc30i CiAgIkEgcHJpbnRmIGZvcm1hdCBzdHJpbmcgdG8gYmUgYXBwbGllZCB0byBhY3RpdmUgdGltZXN0 YW1wcy4iCiAgOmdyb3VwICdvcmctZXhwb3J0LWUtdGV4aW5mbwogIDp0eXBlICdzdHJpbmcpCgoo ZGVmY3VzdG9tIG9yZy1lLXRleGluZm8taW5hY3RpdmUtdGltZXN0YW1wLWZvcm1hdCAiQGVtcGh7 JXN9IgogICJBIHByaW50ZiBmb3JtYXQgc3RyaW5nIHRvIGJlIGFwcGxpZWQgdG8gaW5hY3RpdmUg dGltZXN0YW1wcy4iCiAgOmdyb3VwICdvcmctZXhwb3J0LWUtdGV4aW5mbwogIDp0eXBlICdzdHJp bmcpCgooZGVmY3VzdG9tIG9yZy1lLXRleGluZm8tZGlhcnktdGltZXN0YW1wLWZvcm1hdCAiQGVt cGh7JXN9IgogICJBIHByaW50ZiBmb3JtYXQgc3RyaW5nIHRvIGJlIGFwcGxpZWQgdG8gZGlhcnkg dGltZXN0YW1wcy4iCiAgOmdyb3VwICdvcmctZXhwb3J0LWUtdGV4aW5mbwogIDp0eXBlICdzdHJp bmcpCgo7Ozs7IExpbmtzCgooZGVmY3VzdG9tIG9yZy1lLXRleGluZm8tbGluay13aXRoLXVua25v d24tcGF0aC1mb3JtYXQgIkBpbmRpY2F0ZXVybHslc30iCiAgIkZvcm1hdCBzdHJpbmcgZm9yIGxp bmtzIHdpdGggdW5rbm93biBwYXRoIHR5cGUuIgogIDpncm91cCAnb3JnLWV4cG9ydC1lLXRleGlu Zm8KICA6dHlwZSAnc3RyaW5nKQoKCjs7OzsgVGFibGVzCgooZGVmY3VzdG9tIG9yZy1lLXRleGlu Zm8tdGFibGVzLXZlcmJhdGltIG5pbAogICJXaGVuIG5vbi1uaWwsIHRhYmxlcyBhcmUgZXhwb3J0 ZWQgdmVyYmF0aW0uIgogIDpncm91cCAnb3JnLWV4cG9ydC1lLXRleGluZm8KICA6dHlwZSAnYm9v bGVhbikKCihkZWZjdXN0b20gb3JnLWUtdGV4aW5mby10YWJsZS1zY2llbnRpZmljLW5vdGF0aW9u ICIlc1xcLCglcykiCiAgIkZvcm1hdCBzdHJpbmcgdG8gZGlzcGxheSBudW1iZXJzIGluIHNjaWVu dGlmaWMgbm90YXRpb24uClRoZSBmb3JtYXQgc2hvdWxkIGhhdmUgXCIlc1wiIHR3aWNlLCBmb3Ig bWFudGlzc2EgYW5kIGV4cG9uZW50ClwoaS5lLiBcIiVzXFxcXHRpbWVzMTBeeyVzfVwiKS4KCldo ZW4gbmlsLCBubyB0cmFuc2Zvcm1hdGlvbiBpcyBtYWRlLiIKICA6Z3JvdXAgJ29yZy1leHBvcnQt ZS10ZXhpbmZvCiAgOnR5cGUgJyhjaG9pY2UKCSAgKHN0cmluZyA6dGFnICJGb3JtYXQgc3RyaW5n IikKCSAgKGNvbnN0IDp0YWcgIk5vIGZvcm1hdHRpbmciKSkpCgooZGVmY3VzdG9tIG9yZy1lLXRl eGluZm8tZGVmLXRhYmxlLW1hcmt1cCAiQHNhbXAiCiAgIkRlZmF1bHQgc2V0dGluZyBmb3IgQHRh YmxlIGVudmlyb25tZW50cy4iKQoKOzs7OyBUZXh0IG1hcmt1cAoKKGRlZmN1c3RvbSBvcmctZS10 ZXhpbmZvLXRleHQtbWFya3VwLWFsaXN0ICcoKGJvbGQgLiAiQHN0cm9uZ3slc30iKQoJCQkJCSAg IChjb2RlIC4gY29kZSkKCQkJCQkgICAoaXRhbGljIC4gIkBlbXBoeyVzfSIpCgkJCQkJICAgKHZl cmJhdGltIC4gdmVyYikKCQkJCQkgICAoY29tbWVudCAuICJAYyAlcyIpKQogICJBbGlzdCBvZiBU ZXhpbmZvIGV4cHJlc3Npb25zIHRvIGNvbnZlcnQgdGV4dCBtYXJrdXAuCgpUaGUga2V5IG11c3Qg YmUgYSBzeW1ib2wgYW1vbmcgYGJvbGQnLCBgaXRhbGljJyBhbmQgYGNvbW1lbnQnLgpUaGUgdmFs dWUgaXMgYSBmb3JtYXR0aW5nIHN0cmluZyB0byB3cmFwIGZvbnRpZmllZCB0ZXh0IHdpdGguCgpW YWx1ZSBjYW4gYWxzbyBiZSBzZXQgdG8gdGhlIGZvbGxvd2luZyBzeW1ib2xzOiBgdmVyYicgYW5k CmBjb2RlJy4gIEZvciB0aGUgZm9ybWVyLCBPcmcgd2lsbCB1c2UgXCJAdmVyYlwiIHRvCmNyZWF0 ZSBhIGZvcm1hdCBzdHJpbmcgYW5kIHNlbGVjdCBhIGRlbGltaXRlciBjaGFyYWN0ZXIgdGhhdApp c24ndCBpbiB0aGUgc3RyaW5nLiAgRm9yIHRoZSBsYXR0ZXIsIE9yZyB3aWxsIHVzZSBcIkBjb2Rl XCIKdG8gdHlwZXNldCBhbmQgdHJ5IHRvIHByb3RlY3Qgc3BlY2lhbCBjaGFyYWN0ZXJzLgoKSWYg bm8gYXNzb2NpYXRpb24gY2FuIGJlIGZvdW5kIGZvciBhIGdpdmVuIG1hcmt1cCwgdGV4dCB3aWxs IGJlCnJldHVybmVkIGFzLWlzLiIKICA6Z3JvdXAgJ29yZy1leHBvcnQtZS10ZXhpbmZvCiAgOnR5 cGUgJ2FsaXN0CiAgOm9wdGlvbnMgJyhib2xkIGNvZGUgaXRhbGljIHZlcmJhdGltIGNvbW1lbnQp KQoKCjs7OzsgRHJhd2VycwoKKGRlZmN1c3RvbSBvcmctZS10ZXhpbmZvLWZvcm1hdC1kcmF3ZXIt ZnVuY3Rpb24gbmlsCiAgIkZ1bmN0aW9uIGNhbGxlZCB0byBmb3JtYXQgYSBkcmF3ZXIgaW4gVGV4 aW5mbyBjb2RlLgoKVGhlIGZ1bmN0aW9uIG11c3QgYWNjZXB0IHR3byBwYXJhbWV0ZXJzOgogIE5B TUUgICAgICB0aGUgZHJhd2VyIG5hbWUsIGxpa2UgXCJMT0dCT09LXCIKICBDT05URU5UUyAgdGhl IGNvbnRlbnRzIG9mIHRoZSBkcmF3ZXIuCgpUaGUgZnVuY3Rpb24gc2hvdWxkIHJldHVybiB0aGUg c3RyaW5nIHRvIGJlIGV4cG9ydGVkLgoKRm9yIGV4YW1wbGUsIHRoZSB2YXJpYWJsZSBjb3VsZCBi ZSBzZXQgdG8gdGhlIGZvbGxvd2luZyBmdW5jdGlvbgppbiBvcmRlciB0byBtaW1pYyBkZWZhdWx0 IGJlaGF2aW91cjoKClwoZGVmdW4gb3JnLWUtdGV4aW5mby1mb3JtYXQtZHJhd2VyLWRlZmF1bHQg XChuYW1lIGNvbnRlbnRzXCkKICBcIkZvcm1hdCBhIGRyYXdlciBlbGVtZW50IGZvciBUZXhpbmZv IGV4cG9ydC5cIgogIGNvbnRlbnRzXCkiCiAgOmdyb3VwICdvcmctZXhwb3J0LWUtdGV4aW5mbwog IDp0eXBlICdmdW5jdGlvbikKCgo7Ozs7IElubGluZXRhc2tzCgooZGVmY3VzdG9tIG9yZy1lLXRl eGluZm8tZm9ybWF0LWlubGluZXRhc2stZnVuY3Rpb24gbmlsCiAgIkZ1bmN0aW9uIGNhbGxlZCB0 byBmb3JtYXQgYW4gaW5saW5ldGFzayBpbiBUZXhpbmZvIGNvZGUuCgpUaGUgZnVuY3Rpb24gbXVz dCBhY2NlcHQgc2l4IHBhcmFtZXRlcnM6CiAgVE9ETyAgICAgIHRoZSB0b2RvIGtleXdvcmQsIGFz IGEgc3RyaW5nCiAgVE9ETy1UWVBFIHRoZSB0b2RvIHR5cGUsIGEgc3ltYm9sIGFtb25nIGB0b2Rv JywgYGRvbmUnIGFuZCBuaWwuCiAgUFJJT1JJVFkgIHRoZSBpbmxpbmV0YXNrIHByaW9yaXR5LCBh cyBhIHN0cmluZwogIE5BTUUgICAgICB0aGUgaW5saW5ldGFzayBuYW1lLCBhcyBhIHN0cmluZy4K ICBUQUdTICAgICAgdGhlIGlubGluZXRhc2sgdGFncywgYXMgYSBsaXN0IG9mIHN0cmluZ3MuCiAg Q09OVEVOVFMgIHRoZSBjb250ZW50cyBvZiB0aGUgaW5saW5ldGFzaywgYXMgYSBzdHJpbmcuCgpU aGUgZnVuY3Rpb24gc2hvdWxkIHJldHVybiB0aGUgc3RyaW5nIHRvIGJlIGV4cG9ydGVkLgoKRm9y IGV4YW1wbGUsIHRoZSB2YXJpYWJsZSBjb3VsZCBiZSBzZXQgdG8gdGhlIGZvbGxvd2luZyBmdW5j dGlvbgppbiBvcmRlciB0byBtaW1pYyBkZWZhdWx0IGJlaGF2aW91cjoKClwoZGVmdW4gb3JnLWUt dGV4aW5mby1mb3JtYXQtaW5saW5ldGFzayBcKHRvZG8gdHlwZSBwcmlvcml0eSBuYW1lIHRhZ3Mg Y29udGVudHNcKQpcIkZvcm1hdCBhbiBpbmxpbmUgdGFzayBlbGVtZW50IGZvciBUZXhpbmZvIGV4 cG9ydC5cIgogIFwobGV0ICgoZnVsbC10aXRsZQoJIFwoY29uY2F0CgkgIFwod2hlbiB0b2RvCiAg ICAgICAgICAgIFwoZm9ybWF0IFwiQHN0cm9uZ3slc30gXCIgdG9kbykpCgkgIFwod2hlbiBwcmlv cml0eSAoZm9ybWF0IFwiIyVjIFwiIHByaW9yaXR5KSkKCSAgdGl0bGUKCSAgXCh3aGVuIHRhZ3MK ICAgICAgICAgICAgXChmb3JtYXQgXCI6JXM6XCIKICAgICAgICAgICAgICAgICAgICBcKG1hcGNv bmNhdCAnaWRlbnRpdHkgdGFncyBcIjpcIikpKSkpCiAgICBcKGZvcm1hdCAoY29uY2F0IFwiQGNl bnRlciAlc1xuXG5cIgoJCSAgICBcIiVzXCIKICAgICAgICAgICAgICAgICAgICBcIlxuXCIpKQoJ ICAgIGZ1bGwtdGl0bGUgY29udGVudHMpKSIKICA6Z3JvdXAgJ29yZy1leHBvcnQtZS10ZXhpbmZv CiAgOnR5cGUgJ2Z1bmN0aW9uKQoKCjs7OzsgU3JjIGJsb2Nrcwo7Owo7OyBTcmMgQmxvY2tzIGFy ZSBleGFtcGxlIGJsb2NrcywgZXhjZXB0IGZvciBMSVNQCgo7Ozs7IFBsYWluIHRleHQKCihkZWZj dXN0b20gb3JnLWUtdGV4aW5mby1xdW90ZXMKICAnKCgicXVvdGVzIgogICAgICgiXFwoXFxzLVxc fFtbKF1cXHxeXFwpXCIiIC4gImBgIikKICAgICAoIlxcKFxcUy1cXClcIiIgLiAiJyciKQogICAg ICgiXFwoXFxzLVxcfChcXHxeXFwpJyIgLiAiYCIpKSkKICAiQWxpc3QgZm9yIHF1b3RlcyB0byB1 c2Ugd2hlbiBjb252ZXJ0aW5nIGVuZ2xpc2ggZG91YmxlLXF1b3Rlcy4KClRoZSBDQVIgb2YgZWFj aCBpdGVtIGluIHRoaXMgYWxpc3QgaXMgdGhlIGxhbmd1YWdlIGNvZGUuClRoZSBDRFIgb2YgZWFj aCBpdGVtIGluIHRoaXMgYWxpc3QgaXMgYSBsaXN0IG9mIHRocmVlIENPTlM6Ci0gdGhlIGZpcnN0 IENPTlMgZGVmaW5lcyB0aGUgb3BlbmluZyBxdW90ZTsKLSB0aGUgc2Vjb25kIENPTlMgZGVmaW5l cyB0aGUgY2xvc2luZyBxdW90ZTsKLSB0aGUgbGFzdCBDT05TIGRlZmluZXMgc2luZ2xlIHF1b3Rl cy4KCkZvciBlYWNoIGl0ZW0gaW4gYSBDT05TLCB0aGUgZmlyc3Qgc3RyaW5nIGlzIGEgcmVnZXhw CmZvciBhbGxvd2VkIGNoYXJhY3RlcnMgYmVmb3JlL2FmdGVyIHRoZSBxdW90ZSwgdGhlIHNlY29u ZApzdHJpbmcgZGVmaW5lcyB0aGUgcmVwbGFjZW1lbnQgc3RyaW5nIGZvciB0aGlzIHF1b3RlLiIK ICA6Z3JvdXAgJ29yZy1leHBvcnQtZS10ZXhpbmZvCiAgOnR5cGUgJyhsaXN0CgkgIChjb25zIDp0 YWcgIk9wZW5pbmcgcXVvdGUiCgkJKHN0cmluZyA6dGFnICJSZWdleHAgZm9yIGNoYXIgYmVmb3Jl IikKCQkoc3RyaW5nIDp0YWcgIlJlcGxhY2VtZW50IHF1b3RlICAgICAiKSkKCSAgKGNvbnMgOnRh ZyAiQ2xvc2luZyBxdW90ZSIKCQkoc3RyaW5nIDp0YWcgIlJlZ2V4cCBmb3IgY2hhciBhZnRlciAi KQoJCShzdHJpbmcgOnRhZyAiUmVwbGFjZW1lbnQgcXVvdGUgICAgICIpKQoJICAoY29ucyA6dGFn ICJTaW5nbGUgcXVvdGUiCgkJKHN0cmluZyA6dGFnICJSZWdleHAgZm9yIGNoYXIgYmVmb3JlIikK CQkoc3RyaW5nIDp0YWcgIlJlcGxhY2VtZW50IHF1b3RlICAgICAiKSkpKQoKCjs7OzsgQ29tcGls YXRpb24KCihkZWZjdXN0b20gb3JnLWUtdGV4aW5mby1pbmZvLXByb2Nlc3MKICAnKCJtYWtlaW5m byAlZiIpCiAgIkNvbW1hbmRzIHRvIHByb2Nlc3MgYSB0ZXhpbmZvIGZpbGUgdG8gYW4gSU5GTyBm aWxlLgpUaGlzIGlzIGxpc3Qgb2Ygc3RyaW5ncywgZWFjaCBvZiB0aGVtIHdpbGwgYmUgZ2l2ZW4g dG8gdGhlIHNoZWxsCmFzIGEgY29tbWFuZC4gICVmIGluIHRoZSBjb21tYW5kIHdpbGwgYmUgcmVw bGFjZWQgYnkgdGhlIGZ1bGwKZmlsZSBuYW1lLCAlYiBieSB0aGUgZmlsZSBiYXNlIG5hbWUgXChp LmUgd2l0aG91dCBleHRlbnNpb24pIGFuZAolbyBieSB0aGUgYmFzZSBkaXJlY3Rvcnkgb2YgdGhl IGZpbGUuIgogIDpncm91cCAnb3JnLWV4cG9ydC10ZXhpbmZvCiAgOnR5cGUgJyhyZXBlYXQgOnRh ZyAiU2hlbGwgY29tbWFuZCBzZXF1ZW5jZSIKCQkgKHN0cmluZyA6dGFnICJTaGVsbCBjb21tYW5k IikpKQoKDAo7OzsgSW50ZXJuYWwgRnVuY3Rpb25zCgooZGVmdW4gb3JnLWUtdGV4aW5mby1maWx0 ZXItc2VjdGlvbi1ibGFuay1saW5lcyAoaGVhZGxpbmUgYmFjay1lbmQgaW5mbykKICAiRmlsdGVy IGNvbnRyb2xsaW5nIG51bWJlciBvZiBibGFuayBsaW5lcyBhZnRlciBhIHNlY3Rpb24uIgogIChp ZiAobm90IChlcSBiYWNrLWVuZCAnZS10ZXhpbmZvKSkgaGVhZGxpbmUKICAgIChsZXQgKChibGFu a3MgKG1ha2Utc3RyaW5nIDIgP1xuKSkpCiAgICAgIChyZXBsYWNlLXJlZ2V4cC1pbi1zdHJpbmcg IlxuXFwoPzpcblsgXHRdKlxcKSpcXCciIGJsYW5rcyBoZWFkbGluZSkpKSkKCihkZWZ1biBvcmct ZS10ZXhpbmZvLS1maW5kLWNvcHlpbmcgKGluZm8pCiAgIlJldHJpZXZlIHRoZSBoZWFkbGluZSBp ZGVudGlmaWVkIGJ5IHRoZSBwcm9wZXJ0eSA6Y29weWluZzouCgpJTkZPIGlzIHRoZSBwbGlzdCBj b250YWluaW5nIHRoZSBleHBvcnQgb3B0aW9ucyBhbmQgdHJlZS4gIEl0IGlzCnVzZWQgdG8gZmlu ZCBhbmQgZXh0cmFjdCB0aGUgc2luZ2xlIGRlc2lyZWQgaGVhZGxpbmUuICBUaGlzCmNhbm5vdCBi ZSB0cmVhdGVkIGFzIGEgc3RhbmRhcmQgaGVhZGxpbmUgc2luY2UgaXQgbXVzdCBiZQppbnNlcnRl ZCBpbiBhIHNwZWNpZmljIGxvY2F0aW9uLiIKICAobGV0IChjb3B5aW5nKQogICAgKG9yZy1lbGVt ZW50LW1hcCAocGxpc3QtZ2V0IGluZm8gOnBhcnNlLXRyZWUpICdoZWFkbGluZQoJCSAgICAgKGxh bWJkYSAoY29weSkKCQkgICAgICAgKHdoZW4gKG9yZy1lbGVtZW50LXByb3BlcnR5IDpjb3B5aW5n IGNvcHkpCgkJCSAocHVzaCBjb3B5IGNvcHlpbmcpKSkgaW5mbyAndCkKICAgIDs7IFJldHJpZXZl IHRoZSBzaW5nbGUgZW50cnkKICAgIChjYXIgY29weWluZykpKQoKKGRlZnVuIG9yZy1lLXRleGlu Zm8tLWZpbmQtdmVyYi1zZXBhcmF0b3IgKHMpCiAgIlJldHVybiBhIGNoYXJhY3RlciBub3QgdXNl ZCBpbiBzdHJpbmcgUy4KVGhpcyBpcyB1c2VkIHRvIGNob29zZSBhIHNlcGFyYXRvciBmb3IgY29u c3RydWN0cyBsaWtlIFxcdmVyYi4iCiAgKGxldCAoKGxsICJ+LC4vPzsnOlwifCFAIyVeJi1fPSth YmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaPD4oKVtd e30iKSkKICAgIChsb29wIGZvciBjIGFjcm9zcyBsbAoJICB3aGVuIChub3QgKHN0cmluZy1tYXRj aCAocmVnZXhwLXF1b3RlIChjaGFyLXRvLXN0cmluZyBjKSkgcykpCgkgIHJldHVybiAoY2hhci10 by1zdHJpbmcgYykpKSkKCihkZWZ1biBvcmctZS10ZXhpbmZvLS1tYWtlLW9wdGlvbi1zdHJpbmcg KG9wdGlvbnMpCiAgIlJldHVybiBhIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmcgb2Yga2V5d29yZHMg YW5kIHZhbHVlcy4KT1BUSU9OUyBpcyBhbiBhbGlzdCB3aGVyZSB0aGUga2V5IGlzIHRoZSBvcHRp b25zIGtleXdvcmQgYXMKYSBzdHJpbmcsIGFuZCB0aGUgdmFsdWUgYSBsaXN0IGNvbnRhaW5pbmcg dGhlIGtleXdvcmQgdmFsdWUsIG9yCm5pbC4iCiAgKG1hcGNvbmNhdCAobGFtYmRhIChwYWlyKQoJ ICAgICAgIChjb25jYXQgKGZpcnN0IHBhaXIpCgkJICAgICAgICh3aGVuICg+IChsZW5ndGggKHNl Y29uZCBwYWlyKSkgMCkKCQkJIChjb25jYXQgIj0iIChzZWNvbmQgcGFpcikpKSkpCgkgICAgIG9w dGlvbnMKCSAgICAgIiwiKSkKCihkZWZ1biBvcmctZS10ZXhpbmZvLS1xdW90YXRpb24tbWFya3Mg KHRleHQgaW5mbykKICAiRXhwb3J0IHF1b3RhdGlvbiBtYXJrcyB1c2luZyBgIGFuZCAnIGFzIHRo ZSBtYXJrZXJzLgpURVhUIGlzIGEgc3RyaW5nIGNvbnRhaW5pbmcgcXVvdGF0aW9uIG1hcmtzIHRv IGJlIHJlcGxhY2VkLiAgSU5GTwppcyBhIHBsaXN0IHVzZWQgYXMgYSBjb21tdW5pY2F0aW9uIGNo YW5uZWwuIgogIChtYXBjIChsYW1iZGEobCkKCSAgKGxldCAoKHN0YXJ0IDApKQoJICAgICh3aGls ZSAoc2V0cSBzdGFydCAoc3RyaW5nLW1hdGNoIChjYXIgbCkgdGV4dCBzdGFydCkpCgkgICAgICAo bGV0ICgobmV3LXF1b3RlIChjb25jYXQgKG1hdGNoLXN0cmluZyAxIHRleHQpIChjZHIgbCkpKSkK CQkoc2V0cSB0ZXh0IChyZXBsYWNlLW1hdGNoIG5ldy1xdW90ZSAgdCB0IHRleHQpKSkpKSkKCShj ZHIgb3JnLWUtdGV4aW5mby1xdW90ZXMpKQogIHRleHQpCgooZGVmdW4gb3JnLWUtdGV4aW5mby0t dGV4dC1tYXJrdXAgKHRleHQgbWFya3VwKQogICJGb3JtYXQgVEVYVCBkZXBlbmRpbmcgb24gTUFS S1VQIHRleHQgbWFya3VwLgpTZWUgYG9yZy1lLXRleGluZm8tdGV4dC1tYXJrdXAtYWxpc3QnIGZv ciBkZXRhaWxzLiIKICAobGV0ICgoZm10IChjZHIgKGFzc3EgbWFya3VwIG9yZy1lLXRleGluZm8t dGV4dC1tYXJrdXAtYWxpc3QpKSkpCiAgICAoY29uZAogICAgIDs7IE5vIGZvcm1hdCBzdHJpbmc6 IFJldHVybiByYXcgdGV4dC4KICAgICAoKG5vdCBmbXQpIHRleHQpCiAgICAgKChlcSAndmVyYiBm bXQpCiAgICAgIChsZXQgKChzZXBhcmF0b3IgKG9yZy1lLXRleGluZm8tLWZpbmQtdmVyYi1zZXBh cmF0b3IgdGV4dCkpKQoJKGNvbmNhdCAiQHZlcmJ7IiBzZXBhcmF0b3IgdGV4dCBzZXBhcmF0b3Ig In0iKSkpCiAgICAgKChlcSAnY29kZSBmbXQpCiAgICAgIChsZXQgKChzdGFydCAwKQoJICAgIChy dG4gIiIpCgkgICAgY2hhcikKCSh3aGlsZSAoc3RyaW5nLW1hdGNoICJbQHt9XSIgdGV4dCkKCSAg KHNldHEgY2hhciAobWF0Y2gtc3RyaW5nIDAgdGV4dCkpCgkgIChpZiAoPiAobWF0Y2gtYmVnaW5u aW5nIDApIDApCgkgICAgICAoc2V0cSBydG4gKGNvbmNhdCBydG4gKHN1YnN0cmluZyB0ZXh0IDAg KG1hdGNoLWJlZ2lubmluZyAwKSkpKSkKCSAgKHNldHEgdGV4dCAoc3Vic3RyaW5nIHRleHQgKDEr IChtYXRjaC1iZWdpbm5pbmcgMCkpKSkKCSAgKHNldHEgY2hhciAoY29uY2F0ICJAIiBjaGFyKQoJ CXJ0biAoY29uY2F0IHJ0biBjaGFyKSkpCgkoc2V0cSB0ZXh0IChjb25jYXQgcnRuIHRleHQpCgkg ICAgICBmbXQgIkBjb2RleyVzfSIpCgkoZm9ybWF0IGZtdCB0ZXh0KSkpCiAgICAgOzsgRWxzZSB1 c2UgZm9ybWF0IHN0cmluZy4KICAgICAodCAoZm9ybWF0IGZtdCB0ZXh0KSkpKSkKCjs7OzsgTWVu dSBjcmVhdGlvbgoKKGRlZnVuIG9yZy1lLXRleGluZm8tLWJ1aWxkLW1lbnUgKHRyZWUgbGV2ZWwg aW5mbyAmb3B0aW9uYWwgZGV0YWlsZWQpCiAgIkNyZWF0ZSB0aGUgQG1lbnUvQGVuZCBtZW51IGlu Zm9ybWF0aW9uIGZyb20gVFJFRSBhdCBoZWFkbGluZQpsZXZlbCBMRVZFTC4KClRSRUUgY29udGFp bnMgdGhlIHBhcnNlLXRyZWUgdG8gd29yayB3aXRoLCBlaXRoZXIgb2YgdGhlIGVudGlyZQpkb2N1 bWVudCBvciBvZiBhIHNwZWNpZmljIHBhcmVudCBoZWFkbGluZS4gIExFVkVMIGluZGljYXRlcyB3 aGF0CmxldmVsIG9mIGhlYWRsaW5lcyB0byBsb29rIGF0IHdoZW4gZ2VuZXJhdGluZyB0aGUgbWVu dS4gIElORk8gaXMKYSBwbGlzdCBjb250YWluaW5nIGNvbnRleHR1YWwgaW5mb3JtYXRpb24uCgpE ZXRhaWxlZCBkZXRlcm1pbmVzIHdoZXRoZXIgdG8gYnVpbGQgYSBzaW5nbGUgbGV2ZWwgb2YgbWVu dSwgb3IKcmVjdXJzZSBpbnRvIGFsbCBjaGlsZHJlbiBhcyB3ZWxsLiIKICAobGV0ICgobWVudSAo b3JnLWUtdGV4aW5mby0tZ2VuZXJhdGUtbWVudS1saXN0IHRyZWUgbGV2ZWwgaW5mbykpCglvdXRw dXQgdGV4dC1tZW51KQogICAgKGNvbmQKICAgICAoZGV0YWlsZWQKICAgICAgOzsgTG9vcGluZyBp cyBkb25lIHdpdGhpbiB0aGUgbWVudSBnZW5lcmF0aW9uLgogICAgICAoc2V0cSB0ZXh0LW1lbnUg KG9yZy1lLXRleGluZm8tLWdlbmVyYXRlLWRldGFpbGVkIG1lbnUgbGV2ZWwgaW5mbykpKQogICAg ICh0CiAgICAgIChzZXRxIHRleHQtbWVudSAob3JnLWUtdGV4aW5mby0tZ2VuZXJhdGUtbWVudS1p dGVtcyBtZW51IGluZm8pKSkpCiAgICAod2hlbiB0ZXh0LW1lbnUKICAgICAgKHNldHEgb3V0cHV0 IChvcmctZS10ZXhpbmZvLS1mb3JtYXQtbWVudSB0ZXh0LW1lbnUpKQogICAgICAobWFwY29uY2F0 ICdpZGVudGl0eSBvdXRwdXQgIlxuIikpKSkKCihkZWZ1biBvcmctZS10ZXhpbmZvLS1nZW5lcmF0 ZS1kZXRhaWxlZCAobWVudSBsZXZlbCBpbmZvKQogICJHZW5lcmF0ZSBhIGRldGFpbGVkIGxpc3Rp bmcgb2YgYWxsIHN1YmhlYWRpbmdzIHdpdGhpbiBNRU5VIHN0YXJ0aW5nIGF0IExFVkVMLgoKTUVO VSBpcyB0aGUgcGFyc2UtdHJlZSB0byB3b3JrIHdpdGguICBMRVZFTCBpcyB0aGUgc3RhcnRpbmcg bGV2ZWwKZm9yIHRoZSBtZW51IGhlYWRsaW5lcyBhbmQgZnJvbSB3aGljaCByZWN1cnNpb24gb2Nj dXJzLiAgSU5GTyBpcwphIHBsaXN0IGNvbnRhaW5pbmcgY29udGV4dHVhbCBpbmZvcm1hdGlvbi4i CiAgKGxldCAoKG1heC1kZXB0aCAocGxpc3QtZ2V0IGluZm8gOmhlYWRsaW5lLWxldmVscykpKQog ICAgKHdoZW4gKD4gbWF4LWRlcHRoIGxldmVsKQogICAgICAobG9vcCBmb3IgaGVhZGxpbmUgaW4g bWVudSBhcHBlbmQKCSAgICAobGV0KiAoKHRpdGxlIChvcmctZS10ZXhpbmZvLS1tZW51LWhlYWRs aW5lcyBoZWFkbGluZSBpbmZvKSkKCQkgICA7OyBDcmVhdGUgbGlzdCBvZiBtZW51IGVudHJpZXMg Zm9yIHRoZSBuZXh0IGxldmVsCgkJICAgKHN1Ymxpc3QgKG9yZy1lLXRleGluZm8tLWdlbmVyYXRl LW1lbnUtbGlzdAoJCQkgICAgIGhlYWRsaW5lICgxKyBsZXZlbCkgaW5mbykpCgkJICAgOzsgR2Vu ZXJhdGUgdGhlIG1lbnUgaXRlbXMgZm9yIHRoYXQgbGV2ZWwuICBJZgoJCSAgIDs7IHRoZXJlIGFy ZSBub25lIG9taXQgdGhhdCBoZWFkaW5nIGNvbXBsZXRlbHksCgkJICAgOzsgb3RoZXJ3aXNlIGpv aW4gdGhlIHRpdGxlIHRvIGl0J3MgcmVsYXRlZCBlbnRyaWVzLgoJCSAgIChzdWJtZW51IChpZiAo b3JnLWUtdGV4aW5mby0tZ2VuZXJhdGUtbWVudS1pdGVtcyBzdWJsaXN0IGluZm8pCgkJCQkoYXBw ZW5kIChsaXN0IHRpdGxlKQoJCQkJCShvcmctZS10ZXhpbmZvLS1nZW5lcmF0ZS1tZW51LWl0ZW1z IHN1Ymxpc3QgaW5mbykpCgkJCSAgICAgICduaWwpKQoJCSAgIDs7IFN0YXJ0IHRoZSBwcm9jZXNz IG92ZXIgdGhlIG5leHQgbGV2ZWwgZG93bi4KCQkgICAocmVjdXJzaW9uIChvcmctZS10ZXhpbmZv LS1nZW5lcmF0ZS1kZXRhaWxlZCBzdWJsaXN0ICgxKyBsZXZlbCkgaW5mbykpKQoJICAgICAgKHNl dHEgcmVjdXJzaW9uIChhcHBlbmQgc3VibWVudSByZWN1cnNpb24pKQoJICAgICAgcmVjdXJzaW9u KSkpKSkKCihkZWZ1biBvcmctZS10ZXhpbmZvLS1nZW5lcmF0ZS1tZW51LWxpc3QgKHRyZWUgbGV2 ZWwgaW5mbykKICAiR2VuZXJhdGUgdGhlIGxpc3Qgb2YgaGVhZGxpbmVzIHRoYXQgYXJlIHdpdGhp biBhIGdpdmVuIGxldmVsCm9mIHRoZSB0cmVlIGZvciBmdXJ0aGVyIGZvcm1hdHRpbmcuCgpUUkVF IGlzIHRoZSBwYXJzZS10cmVlIGNvbnRhaW5pbmcgdGhlIGhlYWRsaW5lcy4gIExFVkVMIGlzIHRo ZQpoZWFkbGluZSBsZXZlbCB0byBnZW5lcmF0ZSBhIGxpc3Qgb2YuICBJTkZPIGlzIGEgcGxpc3Qg aG9sZGluZwpjb250ZXh0dWFsIGluZm9ybWF0aW9uLiIKICAobGV0IChzZXEpCiAgICAob3JnLWVs ZW1lbnQtbWFwCiAgICAgdHJlZSAnaGVhZGxpbmUKICAgICAobGFtYmRhIChoZWFkKQogICAgICAg KHdoZW4gKG9yZy1lbGVtZW50LXByb3BlcnR5IDpsZXZlbCBoZWFkKQoJIChpZiAoYW5kIChlcSBs ZXZlbCAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmxldmVsIGhlYWQpKQoJCSAgOzsgRG8gbm90IHRh a2Ugbm90ZSBvZiBmb290bm90ZXMgb3IgY29weWluZyBoZWFkbGluZXMKCQkgIChub3QgKG9yZy1l bGVtZW50LXByb3BlcnR5IDpjb3B5aW5nIGhlYWQpKQoJCSAgKG5vdCAob3JnLWVsZW1lbnQtcHJv cGVydHkgOmZvb3Rub3RlLXNlY3Rpb24tcCBoZWFkKSkpCgkgICAgIChwdXNoIGhlYWQgc2VxKSkp KSkKICAgIDs7IFJldHVybiB0aGUgbGlzdCBvZiBoZWFkbGluZXMgKHJldmVyc2UgdG8gaGF2ZSBp biBhY3R1YWwgb3JkZXIpCiAgICAocmV2ZXJzZSBzZXEpKSkKCihkZWZ1biBvcmctZS10ZXhpbmZv LS1nZW5lcmF0ZS1tZW51LWl0ZW1zIChpdGVtcyBpbmZvKQogICJHZW5lcmF0ZSBhIGxpc3Qgb2Yg aGVhZGxpbmUgaW5mb3JtYXRpb24gZnJvbSB0aGUgbGlzdGluZyBJVEVNUy4KCklURU1TIGlzIGEg bGlzdCBvZiB0aGUgaGVhZGxpbmVzIHRvIGJlIGNvbnZlcnRlZCBpbnRvIGVudHJpZXMuCklORk8g aXMgYSBwbGlzdCBjb250YWluaW5nIGNvbnRleHR1YWwgaW5mb3JtYXRpb24uCgpSZXR1cm5zIGEg bGlzdCBjb250YWluaW5nIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gZnJvbSBlYWNoCmhlYWRs aW5lOiBsZW5ndGgsIHRpdGxlLCBkZXNjcmlwdGlvbi4gIFRoaXMgaXMgdXNlZCB0byBmb3JtYXQg dGhlCm1lbnUgdXNpbmcgYG9yZy1lLXRleGluZm8tLWZvcm1hdC1tZW51Jy4iCiAgKGxvb3AgZm9y IGhlYWRsaW5lIGluIGl0ZW1zIGNvbGxlY3QKCShsZXQqICgodGl0bGUgKG9yZy1leHBvcnQtZGF0 YQoJCSAgICAgICAob3JnLWVsZW1lbnQtcHJvcGVydHkgOnRpdGxlIGhlYWRsaW5lKSBpbmZvKSkK CSAgICAgICAoZGVzY3IgKG9yZy1leHBvcnQtZGF0YQoJCSAgICAgICAob3JnLWVsZW1lbnQtcHJv cGVydHkgOmRlc2NyaXB0aW9uIGhlYWRsaW5lKSBpbmZvKSkKCSAgICAgICAobGVuIChsZW5ndGgg dGl0bGUpKQoJICAgICAgIChvdXRwdXQgKGxpc3QgbGVuIHRpdGxlIGRlc2NyKSkpCgkgIG91dHB1 dCkpKQoKKGRlZnVuIG9yZy1lLXRleGluZm8tLW1lbnUtaGVhZGxpbmVzIChoZWFkbGluZSBpbmZv KQogICJSZXRyaWV2ZSB0aGUgdGl0bGUgZnJvbSBIRUFETElORS4KCklORk8gaXMgYSBwbGlzdCBo b2xkaW5nIGNvbnRleHR1YWwgaW5mb3JtYXRpb24uCgpSZXR1cm4gdGhlIGhlYWRsaW5lIGFzIGEg bGlzdCBvZiAobGVuZ3RoIHRpdGxlIGRlc2NyaXB0aW9uKSB3aXRoCmxlbmd0aCBvZiAtMSBhbmQg bmlsIGRlc2NyaXB0aW9uLiAgVGhpcyBpcyB1c2VkIGluCmBvcmctZS10ZXhpbmZvLS1mb3JtYXQt bWVudScgdG8gaWRlbnRpZnkgaGVhZGxpbmVzIGFzIG9wcG9zZWQgdG8KZW50cmllcy4iCiAgKGxl dCAoKHRpdGxlIChvcmctZXhwb3J0LWRhdGEKCQkob3JnLWVsZW1lbnQtcHJvcGVydHkgOnRpdGxl IGhlYWRsaW5lKSBpbmZvKSkpCiAgICAobGlzdCAtMSB0aXRsZSAnbmlsKSkpCgooZGVmdW4gb3Jn LWUtdGV4aW5mby0tZm9ybWF0LW1lbnUgKHRleHQtbWVudSkKICAiRm9ybWF0IHRoZSBURVhULU1F TlUgaXRlbXMgdG8gYmUgcHJvcGVybHkgcHJpbnRlZCBpbiB0aGUgbWVudS4KCkVhY2ggZW50cnkg aW4gdGhlIG1lbnUgc2hvdWxkIGJlIHByb3ZpZGVkIGFzIChsZW5ndGggdGl0bGUKZGVzY3JpcHRp b24pLgoKSGVhZGxpbmVzIGluIHRoZSBkZXRhaWxlZCBtZW51IGFyZSBnaXZlbiBsZW5ndGggLTEg dG8gZW5zdXJlIHRoZXkKYXJlIG5ldmVyIGNvbmZ1c2VkIHdpdGggb3RoZXIgZW50cmllcy4gIFRo ZXkgYWxzbyBoYXZlIG5vCmRlc2NyaXB0aW9uLgoKT3RoZXIgbWVudSBpdGVtcyBhcmUgb3V0cHV0 IGFzOgogICAgVGl0bGU6OiAgICAgZGVzY3JpcHRpb24KCldpdGggdGhlIHNwYWNpbmcgYmV0d2Vl biA6OiBhbmQgZGVzY3JpcHRpb24gYmFzZWQgb24gdGhlIGxlbmd0aApvZiB0aGUgbG9uZ2VzdCBt ZW51IGVudHJ5LiIKCiAgKGxldCogKChsZW5ndGhzIChtYXBjYXIgJ2NhciB0ZXh0LW1lbnUpKQog ICAgICAgICAobWF4LWxlbmd0aCAoYXBwbHkgJ21heCBsZW5ndGhzKSkKCSBvdXRwdXQpCiAgICAo c2V0cSBvdXRwdXQKICAgICAgICAgIChtYXBjYXIgKGxhbWJkYSAobmFtZSkKICAgICAgICAgICAg ICAgICAgICAobGV0KiAoKHRpdGxlIChudGggMSBuYW1lKSkKICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGRlc2MgKG50aCAyIG5hbWUpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAobGVu Z3RoIChudGggMCBuYW1lKSkpCiAgICAgICAgICAgICAgICAgICAgICAoaWYgKD4gbGVuZ3RoIC0x KQogICAgICAgICAgICAgICAgICAgICAgICAgIChjb25jYXQgIiogIiB0aXRsZSAiOjogIgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1ha2Utc3RyaW5nCgkJCQkgICAoLSAoKyAz IG1heC1sZW5ndGgpIGxlbmd0aCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA/XHMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaWYgZGVz YwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25jYXQgZGVzYykpKQog ICAgICAgICAgICAgICAgICAgICAgICAoY29uY2F0ICJcbiIgdGl0bGUgIlxuIikpKSkKCQkgIHRl eHQtbWVudSkpCiAgICBvdXRwdXQpKQoKCgo7OzsgVGVtcGxhdGUKCihkZWZ1biBvcmctZS10ZXhp bmZvLXRlbXBsYXRlIChjb250ZW50cyBpbmZvKQogICJSZXR1cm4gY29tcGxldGUgZG9jdW1lbnQg c3RyaW5nIGFmdGVyIFRleGluZm8gY29udmVyc2lvbi4KQ09OVEVOVFMgaXMgdGhlIHRyYW5zY29k ZWQgY29udGVudHMgc3RyaW5nLiAgSU5GTyBpcyBhIHBsaXN0CmhvbGRpbmcgZXhwb3J0IG9wdGlv bnMuIgogIChsZXQqICgodGl0bGUgKG9yZy1leHBvcnQtZGF0YSAocGxpc3QtZ2V0IGluZm8gOnRp dGxlKSBpbmZvKSkKCSAoaW5mby1maWxlbmFtZSAob3IgKHBsaXN0LWdldCBpbmZvIDp0ZXhpbmZv LWZpbGVuYW1lKQoJCQkgICAgKGZpbGUtbmFtZS1ub25kaXJlY3RvcnkKCQkJICAgICAob3JnLWV4 cG9ydC1vdXRwdXQtZmlsZS1uYW1lICIuaW5mbyIpKSkpCgkgKGF1dGhvciAob3JnLWV4cG9ydC1k YXRhIChwbGlzdC1nZXQgaW5mbyA6YXV0aG9yKSBpbmZvKSkKCSAodGV4aW5mby1oZWFkZXIgKHBs aXN0LWdldCBpbmZvIDp0ZXhpbmZvLWhlYWRlcikpCgkgKHN1YnRpdGxlIChwbGlzdC1nZXQgaW5m byA6c3VidGl0bGUpKQoJIChzdWJhdXRob3IgKHBsaXN0LWdldCBpbmZvIDpzdWJhdXRob3IpKQoJ IChjbGFzcyAocGxpc3QtZ2V0IGluZm8gOnRleGluZm8tY2xhc3MpKQoJIChoZWFkZXIgKG50aCAx IChhc3NvYyBjbGFzcyBvcmctZS10ZXhpbmZvLWNsYXNzZXMpKSkKCSAoY29weWluZyAob3JnLWUt dGV4aW5mby0tZmluZC1jb3B5aW5nIGluZm8pKQoJIChkaXJjYXQgKHBsaXN0LWdldCBpbmZvIDp0 ZXhpbmZvLWRpcmNhdCkpCgkgKGRpcnRpdGxlIChwbGlzdC1nZXQgaW5mbyA6dGV4aW5mby1kaXJ0 aXRsZSkpCgkgKGRpcmRlc2MgKHBsaXN0LWdldCBpbmZvIDp0ZXhpbmZvLWRpcmRlc2MpKQoJIDs7 IFNwYWNpbmcgdG8gYWxpZ24gZGVzY3JpcHRpb24gKGNvbHVtbiAzMiAtIDMgZm9yIGAqICcgYW5k CgkgOzsgYC4nIGluIHRleHQuCgkgKGRpcnNwYWNpbmcgKC0gMjkgKGxlbmd0aCBkaXJ0aXRsZSkp KSkKICAgIChjb25jYXQKICAgICA7OyBIZWFkZXIKICAgICBoZWFkZXIgIlxuIgogICAgICJAYyAl KipzdGFydCBvZiBoZWFkZXJcbiIKICAgICA7OyBGaWxlbmFtZSBhbmQgVGl0bGUKICAgICAiQHNl dGZpbGVuYW1lICIgaW5mby1maWxlbmFtZSAiXG4iCiAgICAgIkBzZXR0aXRsZSAiIHRpdGxlICJc biIKICAgICAiXG5cbiIKICAgICAiQGMgVmVyc2lvbiBhbmQgQ29udGFjdCBJbmZvXG4iCiAgICAg IkBzZXQgQVVUSE9SICIgYXV0aG9yICJcbiIKCiAgICAgOzsgQWRkaXRpb25hbCBIZWFkZXIgT3B0 aW9ucyBzZXQgYnkgYCMrVEVYSU5GT19IRUFERVIKICAgICAoaWYgdGV4aW5mby1oZWFkZXIKCSAo Y29uY2F0ICJcbiIKCQkgdGV4aW5mby1oZWFkZXIKCQkgIlxuIikpCiAgICAgCiAgICAgIkBjICUq KmVuZCBvZiBoZWFkZXJcbiIKICAgICAiQGZpbmFsb3V0XG4iCiAgICAgIlxuXG4iCgogICAgIDs7 IENvcHlpbmcKICAgICAiQGNvcHlpbmdcbiIKICAgICA7OyBPbmx5IGV4cG9ydCB0aGUgY29udGVu dCBvZiB0aGUgaGVhZGxpbmUsIGRvIG5vdCBuZWVkIHRoZQogICAgIDs7IGluaXRpYWwgaGVhZGxp bmUuCiAgICAgKG9yZy1leHBvcnQtZGF0YSAobnRoIDIgY29weWluZykgaW5mbykKICAgICAiQGVu ZCBjb3B5aW5nXG4iCiAgICAgIlxuXG4iCgogICAgIDs7IEluZm8gZGlyZWN0b3J5IGluZm9ybWF0 aW9uCiAgICAgOzsgT25seSBzdXBwbHkgaWYgYm90aCB0aXRsZSBhbmQgY2F0ZWdvcnkgYXJlIHBy b3ZpZGVkCiAgICAgKGlmIChhbmQgZGlyY2F0IGRpcnRpdGxlKQoJIChjb25jYXQgIkBkaXJjYXRl Z29yeSAiIGRpcmNhdCAiXG4iCgkJICJAZGlyZW50cnlcbiIKCQkgIiogIiBkaXJ0aXRsZSAiLiIK CQkgKG1ha2Utc3RyaW5nIGRpcnNwYWNpbmcgP1xzKQoJCSBkaXJkZXNjICJcbiIKCQkgIkBlbmQg ZGlyZW50cnlcbiIpKQogICAgICJcblxuIgoKICAgICA7OyBUaXRsZQogICAgICJAdGl0bGVwYWdl XG4iCiAgICAgIkB0aXRsZSAiIHRpdGxlICJcblxuIgogICAgIChpZiBzdWJ0aXRsZQoJIChjb25j YXQgIkBzdWJ0aXRsZSAiIHN1YnRpdGxlICJcbiIpKQogICAgICJAYXV0aG9yICIgYXV0aG9yICJc biIKICAgICAoaWYgc3ViYXV0aG9yCgkgKGNvbmNhdCBzdWJhdXRob3IgIlxuIikpCiAgICAgIlxu IgogICAgICJAYyBUaGUgZm9sbG93aW5nIHR3byBjb21tYW5kcyBzdGFydCB0aGUgY29weXJpZ2h0 IHBhZ2UuXG4iCiAgICAgIkBwYWdlXG4iCiAgICAgIkB2c2tpcCAwcHQgcGx1cyAxZmlsbGxcbiIK ICAgICAiQGluc2VydGNvcHlpbmdcbiIKICAgICAiQGVuZCB0aXRsZXBhZ2VcblxuIgogICAgICJA YyBPdXRwdXQgdGhlIHRhYmxlIG9mIGNvbnRlbnRzIGF0IHRoZSBiZWdpbm5pbmcuXG4iCiAgICAg IkBjb250ZW50c1xuXG4iCgogICAgIDs7IENvbmZpZ3VyZSBUb3AgTm9kZSB3aGVuIG5vdCBmb3Ig VGV4CiAgICAgIkBpZm5vdHRleFxuIgogICAgICJAbm9kZSBUb3BcbiIKICAgICAiQHRvcCAiIHRp dGxlICIgTWFudWFsXG4iCiAgICAgIkBpbnNlcnRjb3B5aW5nXG4iCiAgICAgIkBlbmQgaWZub3R0 ZXhcblxuIgogICAgIAogICAgIDs7IE1lbnUKICAgICAiQG1lbnVcbiIKICAgICAob3JnLWUtdGV4 aW5mby1tYWtlLW1lbnUgaW5mbyAnbWFpbikKICAgICAiXG5cbiIKICAgICA7OyBEZXRhaWxlZCBN ZW51CiAgICAgIkBkZXRhaWxtZW51XG4iCiAgICAgIiAtLS0gVGhlIERldGFpbGVkIE5vZGUgTGlz dGluZyAtLS1cbiIKICAgICAob3JnLWUtdGV4aW5mby1tYWtlLW1lbnUgaW5mbyAnZGV0YWlsZWQp CiAgICAgIlxuXG4iCiAgICAgIkBlbmQgZGV0YWlsbWVudVxuIgogICAgICJAZW5kIG1lbnVcbiIK ICAgICAiXG5cbiIKICAgICAKICAgICA7OyBEb2N1bWVudCdzIGJvZHkuCiAgICAgY29udGVudHMK ICAgICAiXG4iCiAgICAgOzsgQ3JlYXRvci4KICAgICAobGV0ICgoY3JlYXRvci1pbmZvIChwbGlz dC1nZXQgaW5mbyA6d2l0aC1jcmVhdG9yKSkpCiAgICAgICAoY29uZAoJKChub3QgY3JlYXRvci1p bmZvKSAiIikKCSgoZXEgY3JlYXRvci1pbmZvICdjb21tZW50KQoJIChmb3JtYXQgIkBjICVzXG4i IChwbGlzdC1nZXQgaW5mbyA6Y3JlYXRvcikpKQoJKHQgKGNvbmNhdCAocGxpc3QtZ2V0IGluZm8g OmNyZWF0b3IpICJcbiIpKSkpCiAgICAgOzsgRG9jdW1lbnQgZW5kLgogICAgICJcbkBieWUiKSkp CgoKDAo7OzsgVHJhbnNjb2RlIEZ1bmN0aW9ucwoKOzs7OyBCYWJlbCBDYWxsCjs7Cjs7IEJhYmVs IENhbGxzIGFyZSBpZ25vcmVkLgoKCjs7OzsgQm9sZAoKKGRlZnVuIG9yZy1lLXRleGluZm8tYm9s ZCAoYm9sZCBjb250ZW50cyBpbmZvKQogICJUcmFuc2NvZGUgQk9MRCBmcm9tIE9yZyB0byBUZXhp bmZvLgpDT05URU5UUyBpcyB0aGUgdGV4dCB3aXRoIGJvbGQgbWFya3VwLiAgSU5GTyBpcyBhIHBs aXN0IGhvbGRpbmcKY29udGV4dHVhbCBpbmZvcm1hdGlvbi4iCiAgKG9yZy1lLXRleGluZm8tLXRl eHQtbWFya3VwIGNvbnRlbnRzICdib2xkKSkKCgo7Ozs7IENlbnRlciBCbG9jawo7Owo7OyBDZW50 ZXIgYmxvY2tzIGFyZSBpZ25vcmVkCgoKOzs7OyBDbG9jawoKKGRlZnVuIG9yZy1lLXRleGluZm8t Y2xvY2sgKGNsb2NrIGNvbnRlbnRzIGluZm8pCiAgIlRyYW5zY29kZSBhIENMT0NLIGVsZW1lbnQg ZnJvbSBPcmcgdG8gVGV4aW5mby4KQ09OVEVOVFMgaXMgbmlsLiAgSU5GTyBpcyBhIHBsaXN0IGhv bGRpbmcgY29udGV4dHVhbAppbmZvcm1hdGlvbi4iCiAgKGNvbmNhdAogICAiQG5vaW5kZW50Igog ICAoZm9ybWF0ICJAc3Ryb25neyVzfSAiIG9yZy1jbG9jay1zdHJpbmcpCiAgIChmb3JtYXQgb3Jn LWUtdGV4aW5mby1pbmFjdGl2ZS10aW1lc3RhbXAtZm9ybWF0CgkgICAoY29uY2F0IChvcmctdHJh bnNsYXRlLXRpbWUgKG9yZy1lbGVtZW50LXByb3BlcnR5IDp2YWx1ZSBjbG9jaykpCgkJICAgKGxl dCAoKHRpbWUgKG9yZy1lbGVtZW50LXByb3BlcnR5IDp0aW1lIGNsb2NrKSkpCgkJICAgICAoYW5k IHRpbWUgKGZvcm1hdCAiICglcykiIHRpbWUpKSkpKQogICAiQCoiKSkKCgo7Ozs7IENvZGUKCihk ZWZ1biBvcmctZS10ZXhpbmZvLWNvZGUgKGNvZGUgY29udGVudHMgaW5mbykKICAiVHJhbnNjb2Rl IGEgQ09ERSBvYmplY3QgZnJvbSBPcmcgdG8gVGV4aW5mby4KQ09OVEVOVFMgaXMgbmlsLiAgSU5G TyBpcyBhIHBsaXN0IHVzZWQgYXMgYSBjb21tdW5pY2F0aW9uCmNoYW5uZWwuIgogIChvcmctZS10 ZXhpbmZvLS10ZXh0LW1hcmt1cCAob3JnLWVsZW1lbnQtcHJvcGVydHkgOnZhbHVlIGNvZGUpICdj b2RlKSkKCjs7OzsgQ29tbWVudAoKKGRlZnVuIG9yZy1lLXRleGluZm8tY29tbWVudCAoY29tbWVu dCBjb250ZW50cyBpbmZvKQogICJUcmFuc2NvZGUgYSBDT01NRU5UIG9iamVjdCBmcm9tIE9yZyB0 byBUZXhpbmZvLgpDT05URU5UUyBpcyB0aGUgdGV4dCBpbiB0aGUgY29tbWVudC4gIElORk8gaXMg YSBwbGlzdCBob2xkaW5nCmNvbnRleHR1YWwgaW5mb3JtYXRpb24uIgogIChvcmctZS10ZXhpbmZv LS10ZXh0LW1hcmt1cCAob3JnLWVsZW1lbnQtcHJvcGVydHkgOnZhbHVlIGNvbW1lbnQpICdjb21t ZW50KSkKCjs7OzsgQ29tbWVudCBCbG9jawoKKGRlZnVuIG9yZy1lLXRleGluZm8tY29tbWVudC1i bG9jayAoY29tbWVudC1ibG9jayBjb250ZW50cyBpbmZvKQogICJUcmFuc2NvZGUgYSBDT01NRU5U LUJMT0NLIG9iamVjdCBmcm9tIE9yZyB0byBUZXhpbmZvLgpDT05URU5UUyBpcyB0aGUgdGV4dCB3 aXRoaW4gdGhlIGJsb2NrLiAgSU5GTyBpcyBhIHBsaXN0IGhvbGRpbmcKY29udGV4dHVhbCBpbmZv cm1hdGlvbi4iCiAgKGZvcm1hdCAiQGlnbm9yZVxuJXNAZW5kIGlnbm9yZSIgKG9yZy1lbGVtZW50 LXByb3BlcnR5IDp2YWx1ZSBjb21tZW50LWJsb2NrKSkpCgo7Ozs7IERyYXdlcgoKKGRlZnVuIG9y Zy1lLXRleGluZm8tZHJhd2VyIChkcmF3ZXIgY29udGVudHMgaW5mbykKICAiVHJhbnNjb2RlIGEg RFJBV0VSIGVsZW1lbnQgZnJvbSBPcmcgdG8gVGV4aW5mby4KQ09OVEVOVFMgaG9sZHMgdGhlIGNv bnRlbnRzIG9mIHRoZSBibG9jay4gIElORk8gaXMgYSBwbGlzdApob2xkaW5nIGNvbnRleHR1YWwg aW5mb3JtYXRpb24uIgogIChsZXQqICgobmFtZSAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmRyYXdl ci1uYW1lIGRyYXdlcikpCgkgKG91dHB1dCAoaWYgKGZ1bmN0aW9ucCBvcmctZS10ZXhpbmZvLWZv cm1hdC1kcmF3ZXItZnVuY3Rpb24pCgkJICAgICAoZnVuY2FsbCBvcmctZS10ZXhpbmZvLWZvcm1h dC1kcmF3ZXItZnVuY3Rpb24KCQkJICAgICAgbmFtZSBjb250ZW50cykKCQkgICA7OyBJZiB0aGVy ZSdzIG5vIHVzZXIgZGVmaW5lZCBmdW5jdGlvbjogc2ltcGx5CgkJICAgOzsgZGlzcGxheSBjb250 ZW50cyBvZiB0aGUgZHJhd2VyLgoJCSAgIGNvbnRlbnRzKSkpCiAgICBvdXRwdXQpKQoKCjs7Ozsg RHluYW1pYyBCbG9jawoKKGRlZnVuIG9yZy1lLXRleGluZm8tZHluYW1pYy1ibG9jayAoZHluYW1p Yy1ibG9jayBjb250ZW50cyBpbmZvKQogICJUcmFuc2NvZGUgYSBEWU5BTUlDLUJMT0NLIGVsZW1l bnQgZnJvbSBPcmcgdG8gVGV4aW5mby4KQ09OVEVOVFMgaG9sZHMgdGhlIGNvbnRlbnRzIG9mIHRo ZSBibG9jay4gIElORk8gaXMgYSBwbGlzdApob2xkaW5nIGNvbnRleHR1YWwgaW5mb3JtYXRpb24u ICBTZWUgYG9yZy1leHBvcnQtZGF0YScuIgogIGNvbnRlbnRzKQoKCjs7OzsgRW50aXR5CgooZGVm dW4gb3JnLWUtdGV4aW5mby1lbnRpdHkgKGVudGl0eSBjb250ZW50cyBpbmZvKQogICJUcmFuc2Nv ZGUgYW4gRU5USVRZIG9iamVjdCBmcm9tIE9yZyB0byBUZXhpbmZvLgpDT05URU5UUyBhcmUgdGhl IGRlZmluaXRpb24gaXRzZWxmLiAgSU5GTyBpcyBhIHBsaXN0IGhvbGRpbmcKY29udGV4dHVhbCBp bmZvcm1hdGlvbi4iCiAgKGxldCAoKGVudCAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmxhdGV4IGVu dGl0eSkpKQogICAgKGlmIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6bGF0ZXgtbWF0aC1wIGVudGl0 eSkgKGZvcm1hdCAiQG1hdGh7JXN9IiBlbnQpIGVudCkpKQoKCjs7OzsgRXhhbXBsZSBCbG9jawoK KGRlZnVuIG9yZy1lLXRleGluZm8tZXhhbXBsZS1ibG9jayAoZXhhbXBsZS1ibG9jayBjb250ZW50 cyBpbmZvKQogICJUcmFuc2NvZGUgYW4gRVhBTVBMRS1CTE9DSyBlbGVtZW50IGZyb20gT3JnIHRv IFRleGluZm8uCkNPTlRFTlRTIGlzIG5pbC4gIElORk8gaXMgYSBwbGlzdCBob2xkaW5nIGNvbnRl eHR1YWwKaW5mb3JtYXRpb24uIgogIChmb3JtYXQgIkB2ZXJiYXRpbVxuJXNAZW5kIHZlcmJhdGlt IgoJICAob3JnLWV4cG9ydC1mb3JtYXQtY29kZS1kZWZhdWx0IGV4YW1wbGUtYmxvY2sgaW5mbykp KQoKCjs7OzsgRXhwb3J0IEJsb2NrCgooZGVmdW4gb3JnLWUtdGV4aW5mby1leHBvcnQtYmxvY2sg KGV4cG9ydC1ibG9jayBjb250ZW50cyBpbmZvKQogICJUcmFuc2NvZGUgYSBFWFBPUlQtQkxPQ0sg ZWxlbWVudCBmcm9tIE9yZyB0byBUZXhpbmZvLgpDT05URU5UUyBpcyBuaWwuICBJTkZPIGlzIGEg cGxpc3QgaG9sZGluZyBjb250ZXh0dWFsIGluZm9ybWF0aW9uLiIKICAod2hlbiAoc3RyaW5nPSAo b3JnLWVsZW1lbnQtcHJvcGVydHkgOnR5cGUgZXhwb3J0LWJsb2NrKSAiVEVYSU5GTyIpCiAgICAo b3JnLXJlbW92ZS1pbmRlbnRhdGlvbiAob3JnLWVsZW1lbnQtcHJvcGVydHkgOnZhbHVlIGV4cG9y dC1ibG9jaykpKSkKCgo7Ozs7IEV4cG9ydCBTbmlwcGV0CgooZGVmdW4gb3JnLWUtdGV4aW5mby1l eHBvcnQtc25pcHBldCAoZXhwb3J0LXNuaXBwZXQgY29udGVudHMgaW5mbykKICAiVHJhbnNjb2Rl IGEgRVhQT1JULVNOSVBQRVQgb2JqZWN0IGZyb20gT3JnIHRvIFRleGluZm8uCkNPTlRFTlRTIGlz IG5pbC4gIElORk8gaXMgYSBwbGlzdCBob2xkaW5nIGNvbnRleHR1YWwgaW5mb3JtYXRpb24uIgog ICh3aGVuIChlcSAob3JnLWV4cG9ydC1zbmlwcGV0LWJhY2tlbmQgZXhwb3J0LXNuaXBwZXQpICdl LXRleGluZm8pCiAgICAob3JnLWVsZW1lbnQtcHJvcGVydHkgOnZhbHVlIGV4cG9ydC1zbmlwcGV0 KSkpCgoKOzs7OyBGaXhlZCBXaWR0aAoKKGRlZnVuIG9yZy1lLXRleGluZm8tZml4ZWQtd2lkdGgg KGZpeGVkLXdpZHRoIGNvbnRlbnRzIGluZm8pCiAgIlRyYW5zY29kZSBhIEZJWEVELVdJRFRIIGVs ZW1lbnQgZnJvbSBPcmcgdG8gVGV4aW5mby4KQ09OVEVOVFMgaXMgbmlsLiAgSU5GTyBpcyBhIHBs aXN0IGhvbGRpbmcgY29udGV4dHVhbCBpbmZvcm1hdGlvbi4iCiAgKGZvcm1hdCAiQGV4YW1wbGVc biVzXG5AZW5kIGV4YW1wbGUiCgkgIChvcmctcmVtb3ZlLWluZGVudGF0aW9uCgkgICAob3JnLWVs ZW1lbnQtcHJvcGVydHkgOnZhbHVlIGZpeGVkLXdpZHRoKSkpKQoKCjs7OzsgRm9vdG5vdGUgRGVm aW5pdGlvbgo7Owo7OyBGb290bm90ZSBEZWZpbml0aW9ucyBhcmUgaWdub3JlZC4KCgo7Ozs7IEZv b3Rub3RlIFJlZmVyZW5jZQo7OwoKKGRlZnVuIG9yZy1lLXRleGluZm8tZm9vdG5vdGUtcmVmZXJl bmNlIChmb290bm90ZSBjb250ZW50cyBpbmZvKQogICJDcmVhdGUgYSBmb290bm90ZSByZWZlcmVu Y2UgZm9yIEZPT1ROT1RFLgoKRk9PVE5PVEUgaXMgdGhlIGZvb3Rub3RlIHRvIGRlZmluZS4gIENP TlRFTlRTIGlzIG5pbC4gIElORk8gaXMgYQpwbGlzdCBob2xkaW5nIGNvbnRleHR1YWwgaW5mb3Jt YXRpb24uIgogIChsZXQgKChkZWYgKG9yZy1leHBvcnQtZ2V0LWZvb3Rub3RlLWRlZmluaXRpb24g Zm9vdG5vdGUgaW5mbykpKQogICAgKGZvcm1hdCAiQGZvb3Rub3RleyVzfSIKCSAgICAob3JnLXRy aW0gKG9yZy1leHBvcnQtZGF0YSBkZWYgaW5mbykpKSkpCgo7Ozs7IEhlYWRsaW5lCgooZGVmdW4g b3JnLWUtdGV4aW5mby1oZWFkbGluZSAoaGVhZGxpbmUgY29udGVudHMgaW5mbykKICAiVHJhbnNj b2RlIGFuIEhFQURMSU5FIGVsZW1lbnQgZnJvbSBPcmcgdG8gVGV4aW5mby4KQ09OVEVOVFMgaG9s ZHMgdGhlIGNvbnRlbnRzIG9mIHRoZSBoZWFkbGluZS4gIElORk8gaXMgYSBwbGlzdApob2xkaW5n IGNvbnRleHR1YWwgaW5mb3JtYXRpb24uIgogIChsZXQqICgoY2xhc3MgKHBsaXN0LWdldCBpbmZv IDp0ZXhpbmZvLWNsYXNzKSkKCSAobGV2ZWwgKG9yZy1leHBvcnQtZ2V0LXJlbGF0aXZlLWxldmVs IGhlYWRsaW5lIGluZm8pKQoJIChudW1iZXJlZHAgKG9yZy1leHBvcnQtbnVtYmVyZWQtaGVhZGxp bmUtcCBoZWFkbGluZSBpbmZvKSkKCSAoY2xhc3Mtc2VjdGlvbm5pbmcgKGFzc29jIGNsYXNzIG9y Zy1lLXRleGluZm8tY2xhc3NlcykpCgkgOzsgRmluZCB0aGUgaW5kZXggdHlwZSwgaWYgYW55Cgkg KGluZGV4IChvcmctZWxlbWVudC1wcm9wZXJ0eSA6aW5kZXggaGVhZGxpbmUpKQoJIDs7IENyZWF0 ZSBub2RlIGluZm8sIHRvIGluc2VydCBpdCBiZWZvcmUgc2VjdGlvbiBmb3JtYXR0aW5nLgoJIChu b2RlIChmb3JtYXQgIkBub2RlICVzXG4iCgkJICAgICAgIChvcmctZXhwb3J0LWRhdGEKCQkJKG9y Zy1lbGVtZW50LXByb3BlcnR5IDp0aXRsZSBoZWFkbGluZSkgaW5mbykpKQoJIDs7IE1lbnVzIG11 c3QgYmUgZ2VuZXJhdGVkIHdpdGggZmlyc3QgY2hpbGQsIG90aGVyd2lzZSB0aGV5CgkgOzsgd2ls bCBub3QgbmVzdCBwcm9wZXJseQoJIChtZW51IChsZXQqICgoZmlyc3QgKG9yZy1leHBvcnQtZmly c3Qtc2libGluZy1wIGhlYWRsaW5lIGluZm8pKQoJCSAgICAgIChwYXJlbnQgKG9yZy1leHBvcnQt Z2V0LXBhcmVudC1oZWFkbGluZSBoZWFkbGluZSkpCgkJICAgICAgKHRpdGxlIChvcmctZXhwb3J0 LWRhdGEKCQkJICAgICAgKG9yZy1lbGVtZW50LXByb3BlcnR5IDp0aXRsZSBwYXJlbnQpIGluZm8p KQoJCSAgICAgIGhlYWRpbmcgbGlzdGluZwoJCSAgICAgICh0cmVlIChwbGlzdC1nZXQgaW5mbyA6 cGFyc2UtdHJlZSkpKQoJCSAoaWYgZmlyc3QKCQkgICAgIChvcmctZWxlbWVudC1tYXAKCQkgICAg ICAocGxpc3QtZ2V0IGluZm8gOnBhcnNlLXRyZWUpICdoZWFkbGluZQoJCSAgICAgIChsYW1iZGEg KHJlZikKCQkJKGlmIChtZW1iZXIgdGl0bGUgKG9yZy1lbGVtZW50LXByb3BlcnR5IDp0aXRsZSBy ZWYpKQoJCQkgICAgKHB1c2ggcmVmIGhlYWRpbmcpKSkKCQkgICAgICBpbmZvICd0KSkKCQkgKHNl dHEgbGlzdGluZyAob3JnLWUtdGV4aW5mby0tYnVpbGQtbWVudQoJCQkJKGNhciBoZWFkaW5nKSBs ZXZlbCBpbmZvKSkKCSAJIChpZiBsaXN0aW5nCgkgCSAgICAgKHNldHEgbGlzdGluZyAoZm9ybWF0 CgkJCQkgICAgIlxuQG1lbnVcbiVzXG5AZW5kIG1lbnVcblxuIiBsaXN0aW5nKSkKCSAJICAgJ25p bCkpKQoJIDs7IFNlY3Rpb24gZm9ybWF0dGluZyB3aWxsIHNldCB0d28gcGxhY2Vob2xkZXJzOiBv bmUgZm9yIHRoZQoJIDs7IHRpdGxlIGFuZCB0aGUgb3RoZXIgZm9yIHRoZSBjb250ZW50cy4KCSAo c2VjdGlvbi1mbXQKCSAgKGxldCAoKHNlYyAoaWYgKGFuZCAoc3ltYm9scCAobnRoIDIgY2xhc3Mt c2VjdGlvbm5pbmcpKQoJCQkgICAgICAoZmJvdW5kcCAobnRoIDIgY2xhc3Mtc2VjdGlvbm5pbmcp KSkKCQkJIChmdW5jYWxsIChudGggMiBjbGFzcy1zZWN0aW9ubmluZykgbGV2ZWwgbnVtYmVyZWRw KQoJCSAgICAgICAobnRoICgxKyBsZXZlbCkgY2xhc3Mtc2VjdGlvbm5pbmcpKSkpCgkgICAgKGNv bmQKCSAgICAgOzsgTm8gc2VjdGlvbiBhdmFpbGFibGUgZm9yIHRoYXQgTEVWRUwuCgkgICAgICgo bm90IHNlYykgbmlsKQoJICAgICA7OyBTZWN0aW9uIGZvcm1hdCBkaXJlY3RseSByZXR1cm5lZCBi eSBhIGZ1bmN0aW9uLgoJICAgICAoKHN0cmluZ3Agc2VjKSBzZWMpCgkgICAgIDs7IChudW1iZXJl ZC1zZWN0aW9uIC4gdW5udW1iZXJlZC1zZWN0aW9uKQoJICAgICAoKG5vdCAoY29uc3AgKGNkciBz ZWMpKSkKCSAgICAgIDs7IElmIGFuIGluZGV4LCBhbHdheXMgdW5udW1iZXJlZAoJICAgICAgKGlm IGluZGV4CgkJICAoY29uY2F0IG1lbnUgbm9kZSAoY2RyIHNlYykgIlxuJXMiKQoJCTs7IE90aGVy d2lzZSBudW1iZXIgYXMgbmVlZGVkLgoJCShjb25jYXQgbWVudSBub2RlCgkJCShmdW5jYWxsCgkJ CSAoaWYgbnVtYmVyZWRwICMnY2FyICMnY2RyKSBzZWMpICJcbiVzIikpKSkpKQoJICh0ZXh0IChv cmctZXhwb3J0LWRhdGEKCQkob3JnLWVsZW1lbnQtcHJvcGVydHkgOnRpdGxlIGhlYWRsaW5lKSBp bmZvKSkKCSAodG9kbwoJICAoYW5kIChwbGlzdC1nZXQgaW5mbyA6d2l0aC10b2RvLWtleXdvcmRz KQoJICAgICAgIChsZXQgKCh0b2RvIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6dG9kby1rZXl3b3Jk IGhlYWRsaW5lKSkpCgkJIChhbmQgdG9kbyAob3JnLWV4cG9ydC1kYXRhIHRvZG8gaW5mbykpKSkp CgkgKHRvZG8tdHlwZSAoYW5kIHRvZG8gKG9yZy1lbGVtZW50LXByb3BlcnR5IDp0b2RvLXR5cGUg aGVhZGxpbmUpKSkKCSAodGFncyAoYW5kIChwbGlzdC1nZXQgaW5mbyA6d2l0aC10YWdzKQoJCSAg ICAob3JnLWV4cG9ydC1nZXQtdGFncyBoZWFkbGluZSBpbmZvKSkpCgkgKHByaW9yaXR5IChhbmQg KHBsaXN0LWdldCBpbmZvIDp3aXRoLXByaW9yaXR5KQoJCQkob3JnLWVsZW1lbnQtcHJvcGVydHkg OnByaW9yaXR5IGhlYWRsaW5lKSkpCgkgOzsgQ3JlYXRlIHRoZSBoZWFkbGluZSB0ZXh0IGFsb25n IHdpdGggYSBuby10YWcgdmVyc2lvbi4gIFRoZQoJIDs7IGxhdHRlciBpcyByZXF1aXJlZCB0byBy ZW1vdmUgdGFncyBmcm9tIHRhYmxlIG9mIGNvbnRlbnRzLgoJIChmdWxsLXRleHQgKGlmIChmdW5j dGlvbnAgb3JnLWUtdGV4aW5mby1mb3JtYXQtaGVhZGxpbmUtZnVuY3Rpb24pCgkJCTs7IFVzZXIt ZGVmaW5lZCBmb3JtYXR0aW5nIGZ1bmN0aW9uLgoJCQkoZnVuY2FsbCBvcmctZS10ZXhpbmZvLWZv cm1hdC1oZWFkbGluZS1mdW5jdGlvbgoJCQkJIHRvZG8gdG9kby10eXBlIHByaW9yaXR5IHRleHQg dGFncykKCQkgICAgICA7OyBEZWZhdWx0IGZvcm1hdHRpbmcuCgkJICAgICAgKGNvbmNhdAoJCSAg ICAgICAod2hlbiB0b2RvCgkJCSAoZm9ybWF0ICJAc3Ryb25neyVzfSAiIHRvZG8pKQoJCSAgICAg ICAod2hlbiBwcmlvcml0eSAoZm9ybWF0ICJAZW1waHsjJXN9ICIgcHJpb3JpdHkpKQoJCSAgICAg ICB0ZXh0CgkJICAgICAgICh3aGVuIHRhZ3MKCQkJIChmb3JtYXQgIjolczoiCgkJCQkgKG1hcGNv bmNhdCAnaWRlbnRpdHkgdGFncyAiOiIpKSkpKSkKCSAoZnVsbC10ZXh0LW5vLXRhZwoJICAoaWYg KGZ1bmN0aW9ucCBvcmctZS10ZXhpbmZvLWZvcm1hdC1oZWFkbGluZS1mdW5jdGlvbikKCSAgICAg IDs7IFVzZXItZGVmaW5lZCBmb3JtYXR0aW5nIGZ1bmN0aW9uLgoJICAgICAgKGZ1bmNhbGwgb3Jn LWUtdGV4aW5mby1mb3JtYXQtaGVhZGxpbmUtZnVuY3Rpb24KCQkgICAgICAgdG9kbyB0b2RvLXR5 cGUgcHJpb3JpdHkgdGV4dCBuaWwpCgkgICAgOzsgRGVmYXVsdCBmb3JtYXR0aW5nLgoJICAgIChj b25jYXQKCSAgICAgKHdoZW4gdG9kbyAoZm9ybWF0ICJAc3Ryb25neyVzfSAiIHRvZG8pKQoJICAg ICAod2hlbiBwcmlvcml0eSAoZm9ybWF0ICJAZW1waHsjJWN9ICIgcHJpb3JpdHkpKQoJICAgICB0 ZXh0KSkpCgkgKHByZS1ibGFua3MKCSAgKG1ha2Utc3RyaW5nIChvcmctZWxlbWVudC1wcm9wZXJ0 eSA6cHJlLWJsYW5rIGhlYWRsaW5lKSAxMCkpKQogICAgKGNvbmQKICAgICA7OyBDYXNlIDE6IFRo aXMgaXMgYSBmb290bm90ZSBzZWN0aW9uOiBpZ25vcmUgaXQuCiAgICAgKChvcmctZWxlbWVudC1w cm9wZXJ0eSA6Zm9vdG5vdGUtc2VjdGlvbi1wIGhlYWRsaW5lKSBuaWwpCiAgICAgOzsgQ2FzZSAy OiBUaGlzIGlzIHRoZSBgY29weWluZycgc2VjdGlvbjogaWdub3JlIGl0CiAgICAgOzsgICAgICAg ICBUaGlzIGlzIHVzZWQgZWxzZXdoZXJlLgogICAgICgob3JnLWVsZW1lbnQtcHJvcGVydHkgOmNv cHlpbmcgaGVhZGxpbmUpIG5pbCkKICAgICA7OyBDYXNlIDM6IEFuIGluZGV4LiAgSWYgaXQgbWF0 Y2hlcyBvbmUgb2YgdGhlIGtub3duIGluZGV4ZXMsCiAgICAgOzsgICAgICAgICBwcmludCBpdCBh cyBzdWNoIGZvbGxvd2luZyB0aGUgY29udGVudHMsIG90aGVyd2lzZQogICAgIDs7ICAgICAgICAg cHJpbnQgdGhlIGNvbnRlbnRzIGFuZCBsZWF2ZSB0aGUgaW5kZXggdXAgdG8gdGhlIHVzZXIuCiAg ICAgKGluZGV4CiAgICAgIChmb3JtYXQKICAgICAgIHNlY3Rpb24tZm10IGZ1bGwtdGV4dAogICAg ICAgKGNvbmNhdCBwcmUtYmxhbmtzIGNvbnRlbnRzICJcbiIgCgkgICAgICAgKGlmIChtZW1iZXIg aW5kZXggJygiY3AiICJmbiIgImt5IiAicGciICJ0cCIgInZyIikpCgkJICAgKGNvbmNhdCAiQHBy aW50aW5kZXggIiBpbmRleCkpKSkpCiAgICAgOzsgQ2FzZSA0OiBUaGlzIGlzIGEgZGVlcCBzdWIt dHJlZTogZXhwb3J0IGl0IGFzIGEgbGlzdCBpdGVtLgogICAgIDs7ICAgICAgICAgQWxzbyBleHBv cnQgYXMgaXRlbXMgaGVhZGxpbmVzIGZvciB3aGljaCBubyBzZWN0aW9uCiAgICAgOzsgICAgICAg ICBmb3JtYXQgaGFzIGJlZW4gZm91bmQuCiAgICAgKChvciAobm90IHNlY3Rpb24tZm10KSAob3Jn LWV4cG9ydC1sb3ctbGV2ZWwtcCBoZWFkbGluZSBpbmZvKSkKICAgICAgOzsgQnVpbGQgdGhlIHJl YWwgY29udGVudHMgb2YgdGhlIHN1Yi10cmVlLgogICAgICAobGV0ICgobG93LWxldmVsLWJvZHkK CSAgICAgKGNvbmNhdAoJICAgICAgOzsgSWYgdGhlIGhlYWRsaW5lIGlzIHRoZSBmaXJzdCBzaWJs aW5nLCBzdGFydCBhIGxpc3QuCgkgICAgICAod2hlbiAob3JnLWV4cG9ydC1maXJzdC1zaWJsaW5n LXAgaGVhZGxpbmUpCgkJKGZvcm1hdCAiQCVzXG4iIChpZiBudW1iZXJlZHAgJ2VudW1lcmF0ZSAn aXRlbWl6ZSkpKQoJICAgICAgOzsgSXRlbWl6ZSBoZWFkbGluZQoJICAgICAgIkBpdGVtXG4iIGZ1 bGwtdGV4dCAiXG4iIHByZS1ibGFua3MgY29udGVudHMpKSkKCTs7IElmIGhlYWRsaW5lIGlzIG5v dCB0aGUgbGFzdCBzaWJsaW5nIHNpbXBseSByZXR1cm4KCTs7IExPVy1MRVZFTC1CT0RZLiAgT3Ro ZXJ3aXNlLCBhbHNvIGNsb3NlIHRoZSBsaXN0LCBiZWZvcmUgYW55Cgk7OyBibGFuayBsaW5lLgoJ KGlmIChub3QgKG9yZy1leHBvcnQtbGFzdC1zaWJsaW5nLXAgaGVhZGxpbmUpKSBsb3ctbGV2ZWwt Ym9keQoJICAocmVwbGFjZS1yZWdleHAtaW4tc3RyaW5nCgkgICAiWyBcdFxuXSpcXCciCgkgICAo Zm9ybWF0ICJcbkBlbmQgJXMiIChpZiBudW1iZXJlZHAgJ2VudW1lcmF0ZSAnaXRlbWl6ZSkpCgkg ICBsb3ctbGV2ZWwtYm9keSkpKSkKICAgICA7OyBDYXNlIDU6IFN0YW5kYXJkIGhlYWRsaW5lLiAg RXhwb3J0IGl0IGFzIGEgc2VjdGlvbi4KICAgICAodAogICAgICAoY29uZAogICAgICAgKChub3Qg KGFuZCB0YWdzIChlcSAocGxpc3QtZ2V0IGluZm8gOndpdGgtdGFncykgJ25vdC1pbi10b2MpKSkK CTs7IFJlZ3VsYXIgc2VjdGlvbi4gIFVzZSBzcGVjaWZpZWQgZm9ybWF0IHN0cmluZy4KCShmb3Jt YXQgKHJlcGxhY2UtcmVnZXhwLWluLXN0cmluZyAiJV0iICIlJV0iIHNlY3Rpb24tZm10KSBmdWxs LXRleHQKCQkoY29uY2F0IHByZS1ibGFua3MgY29udGVudHMpKSkKICAgICAgICgoc3RyaW5nLW1h dGNoICJcXGBAXFwoLio/XFwpeyIgc2VjdGlvbi1mbXQpCgk7OyBJZiB0YWdzIHNob3VsZCBiZSBy ZW1vdmVkIGZyb20gdGFibGUgb2YgY29udGVudHMsIGluc2VydAoJOzsgdGl0bGUgd2l0aG91dCB0 YWdzIGFzIGFuIGFsdGVybmF0aXZlIGhlYWRpbmcgaW4gc2VjdGlvbmluZwoJOzsgY29tbWFuZC4K CShmb3JtYXQgKHJlcGxhY2UtbWF0Y2ggKGNvbmNhdCAobWF0Y2gtc3RyaW5nIDEgc2VjdGlvbi1m bXQpICJbJXNdIikKCQkJICAgICAgIG5pbCBuaWwgc2VjdGlvbi1mbXQgMSkKCQk7OyBSZXBsYWNl IHNxdWFyZSBicmFja2V0cyB3aXRoIHBhcmVudGhlc2lzIHNpbmNlCgkJOzsgc3F1YXJlIGJyYWNr ZXRzIGFyZSBub3Qgc3VwcG9ydGVkIGluIG9wdGlvbmFsCgkJOzsgYXJndW1lbnRzLgoJCShyZXBs YWNlLXJlZ2V4cC1pbi1zdHJpbmcKCQkgIlxcWyIgIigiCgkJIChyZXBsYWNlLXJlZ2V4cC1pbi1z dHJpbmcKCQkgICJcXF0iICIpIgoJCSAgZnVsbC10ZXh0LW5vLXRhZykpCgkJZnVsbC10ZXh0CgkJ KGNvbmNhdCBwcmUtYmxhbmtzIGNvbnRlbnRzKSkpCiAgICAgICAodAoJOzsgSW1wb3NzaWJsZSB0 byBhZGQgYW4gYWx0ZXJuYXRpdmUgaGVhZGluZy4gIEZhbGxiYWNrIHRvCgk7OyByZWd1bGFyIHNl Y3Rpb25pbmcgZm9ybWF0IHN0cmluZy4KCShmb3JtYXQgKHJlcGxhY2UtcmVnZXhwLWluLXN0cmlu ZyAiJV0iICIlJV0iIHNlY3Rpb24tZm10KSBmdWxsLXRleHQKCQkoY29uY2F0IHByZS1ibGFua3Mg Y29udGVudHMpKSkpKSkpKQoKCjs7OzsgSG9yaXpvbnRhbCBSdWxlCjs7Cjs7IEhvcml6b250YWwg cnVsZXMgYXJlIGlnbm9yZWQKCjs7OzsgSW5saW5lIEJhYmVsIENhbGwKOzsKOzsgSW5saW5lIEJh YmVsIENhbGxzIGFyZSBpZ25vcmVkLgoKCjs7OzsgSW5saW5lIFNyYyBCbG9jawoKKGRlZnVuIG9y Zy1lLXRleGluZm8taW5saW5lLXNyYy1ibG9jayAoaW5saW5lLXNyYy1ibG9jayBjb250ZW50cyBp bmZvKQogICJUcmFuc2NvZGUgYW4gSU5MSU5FLVNSQy1CTE9DSyBlbGVtZW50IGZyb20gT3JnIHRv IFRleGluZm8uCkNPTlRFTlRTIGhvbGRzIHRoZSBjb250ZW50cyBvZiB0aGUgaXRlbS4gIElORk8g aXMgYSBwbGlzdCBob2xkaW5nCmNvbnRleHR1YWwgaW5mb3JtYXRpb24uIgogIChsZXQqICgoY29k ZSAob3JnLWVsZW1lbnQtcHJvcGVydHkgOnZhbHVlIGlubGluZS1zcmMtYmxvY2spKQoJIChzZXBh cmF0b3IgKG9yZy1lLXRleGluZm8tLWZpbmQtdmVyYi1zZXBhcmF0b3IgY29kZSkpKQogICAgKGNv bmNhdCAiQHZlcmJ7IiBzZXBhcmF0b3IgY29kZSBzZXBhcmF0b3IgIn0iKSkpCgoKOzs7OyBJbmxp bmV0YXNrCgooZGVmdW4gb3JnLWUtdGV4aW5mby1pbmxpbmV0YXNrIChpbmxpbmV0YXNrIGNvbnRl bnRzIGluZm8pCiAgIlRyYW5zY29kZSBhbiBJTkxJTkVUQVNLIGVsZW1lbnQgZnJvbSBPcmcgdG8g VGV4aW5mby4KQ09OVEVOVFMgaG9sZHMgdGhlIGNvbnRlbnRzIG9mIHRoZSBibG9jay4gIElORk8g aXMgYSBwbGlzdApob2xkaW5nIGNvbnRleHR1YWwgaW5mb3JtYXRpb24uIgogIChsZXQgKCh0aXRs ZSAob3JnLWV4cG9ydC1kYXRhIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6dGl0bGUgaW5saW5ldGFz aykgaW5mbykpCgkodG9kbyAoYW5kIChwbGlzdC1nZXQgaW5mbyA6d2l0aC10b2RvLWtleXdvcmRz KQoJCSAgIChsZXQgKCh0b2RvIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6dG9kby1rZXl3b3JkIGlu bGluZXRhc2spKSkKCQkgICAgIChhbmQgdG9kbyAob3JnLWV4cG9ydC1kYXRhIHRvZG8gaW5mbykp KSkpCgkodG9kby10eXBlIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6dG9kby10eXBlIGlubGluZXRh c2spKQoJKHRhZ3MgKGFuZCAocGxpc3QtZ2V0IGluZm8gOndpdGgtdGFncykKCQkgICAob3JnLWV4 cG9ydC1nZXQtdGFncyBpbmxpbmV0YXNrIGluZm8pKSkKCShwcmlvcml0eSAoYW5kIChwbGlzdC1n ZXQgaW5mbyA6d2l0aC1wcmlvcml0eSkKCQkgICAgICAgKG9yZy1lbGVtZW50LXByb3BlcnR5IDpw cmlvcml0eSBpbmxpbmV0YXNrKSkpKQogICAgOzsgSWYgYG9yZy1lLXRleGluZm8tZm9ybWF0LWlu bGluZXRhc2stZnVuY3Rpb24nIGlzIHByb3ZpZGVkLCBjYWxsIGl0CiAgICA7OyB3aXRoIGFwcHJv cHJpYXRlIGFyZ3VtZW50cy4KICAgIChpZiAoZnVuY3Rpb25wIG9yZy1lLXRleGluZm8tZm9ybWF0 LWlubGluZXRhc2stZnVuY3Rpb24pCgkoZnVuY2FsbCBvcmctZS10ZXhpbmZvLWZvcm1hdC1pbmxp bmV0YXNrLWZ1bmN0aW9uCgkJIHRvZG8gdG9kby10eXBlIHByaW9yaXR5IHRpdGxlIHRhZ3MgY29u dGVudHMpCiAgICAgIDs7IE90aGVyd2lzZSwgdXNlIGEgZGVmYXVsdCB0ZW1wbGF0ZS4KICAgICAg KGxldCAoKGZ1bGwtdGl0bGUKCSAgICAgKGNvbmNhdAoJICAgICAgKHdoZW4gdG9kbyAoZm9ybWF0 ICJAc3Ryb25neyVzfSAiIHRvZG8pKQoJICAgICAgKHdoZW4gcHJpb3JpdHkgKGZvcm1hdCAiIyVj ICIgcHJpb3JpdHkpKQoJICAgICAgdGl0bGUKCSAgICAgICh3aGVuIHRhZ3MgKGZvcm1hdCAiOiVz OiIKCQkJCSAobWFwY29uY2F0ICdpZGVudGl0eSB0YWdzICI6IikpKSkpKQoJKGZvcm1hdCAoY29u Y2F0ICJAY2VudGVyICVzXG5cbiIKCQkJIiVzIgoJCQkiXG4iKQoJCWZ1bGwtdGl0bGUgY29udGVu dHMpKSkpKQoKCjs7OzsgSXRhbGljCgooZGVmdW4gb3JnLWUtdGV4aW5mby1pdGFsaWMgKGl0YWxp YyBjb250ZW50cyBpbmZvKQogICJUcmFuc2NvZGUgSVRBTElDIGZyb20gT3JnIHRvIFRleGluZm8u CkNPTlRFTlRTIGlzIHRoZSB0ZXh0IHdpdGggaXRhbGljIG1hcmt1cC4gIElORk8gaXMgYSBwbGlz dCBob2xkaW5nCmNvbnRleHR1YWwgaW5mb3JtYXRpb24uIgogIChvcmctZS10ZXhpbmZvLS10ZXh0 LW1hcmt1cCBjb250ZW50cyAnaXRhbGljKSkKCjs7OzsgSXRlbQoKKGRlZnVuIG9yZy1lLXRleGlu Zm8taXRlbSAoaXRlbSBjb250ZW50cyBpbmZvKQogICJUcmFuc2NvZGUgYW4gSVRFTSBlbGVtZW50 IGZyb20gT3JnIHRvIFRleGluZm8uCkNPTlRFTlRTIGhvbGRzIHRoZSBjb250ZW50cyBvZiB0aGUg aXRlbS4gIElORk8gaXMgYSBwbGlzdCBob2xkaW5nCmNvbnRleHR1YWwgaW5mb3JtYXRpb24uIgog IChsZXQqICgodGFnIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6dGFnIGl0ZW0pKQoJIChkZXNjIChv cmctZXhwb3J0LWRhdGEgdGFnIGluZm8pKSkKICAgKGNvbmNhdCAiXG5AaXRlbSAiIChpZiB0YWcg ZGVzYykgIlxuIgoJICAgKG9yZy10cmltIGNvbnRlbnRzKSAiXG4iKSkpCgoKOzs7OyBLZXl3b3Jk CgooZGVmdW4gb3JnLWUtdGV4aW5mby1rZXl3b3JkIChrZXl3b3JkIGNvbnRlbnRzIGluZm8pCiAg IlRyYW5zY29kZSBhIEtFWVdPUkQgZWxlbWVudCBmcm9tIE9yZyB0byBUZXhpbmZvLgpDT05URU5U UyBpcyBuaWwuICBJTkZPIGlzIGEgcGxpc3QgaG9sZGluZyBjb250ZXh0dWFsIGluZm9ybWF0aW9u LiIKICAobGV0ICgoa2V5IChvcmctZWxlbWVudC1wcm9wZXJ0eSA6a2V5IGtleXdvcmQpKQoJKHZh bHVlIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6dmFsdWUga2V5d29yZCkpKQogICAgKGNvbmQKICAg ICAoKHN0cmluZz0ga2V5ICJURVhJTkZPIikgdmFsdWUpCiAgICAgKChzdHJpbmc9IGtleSAiQ0lO REVYIikgKGZvcm1hdCAiQGNpbmRleCAlcyIgdmFsdWUpKQogICAgICgoc3RyaW5nPSBrZXkgIkZJ TkRFWCIpIChmb3JtYXQgIkBmaW5kZXggJXMiIHZhbHVlKSkKICAgICAoKHN0cmluZz0ga2V5ICJL SU5ERVgiKSAoZm9ybWF0ICJAa2luZGV4ICVzIiB2YWx1ZSkpCiAgICAgKChzdHJpbmc9IGtleSAi UElOREVYIikgKGZvcm1hdCAiQHBpbmRleCAlcyIgdmFsdWUpKQogICAgICgoc3RyaW5nPSBrZXkg IlRJTkRFWCIpIChmb3JtYXQgIkB0aW5kZXggJXMiIHZhbHVlKSkKICAgICAoKHN0cmluZz0ga2V5 ICJWSU5ERVgiKSAoZm9ybWF0ICJAdmluZGV4ICVzIiB2YWx1ZSkpCiAgICAgKSkpCgoKOzs7OyBM YXRleCBFbnZpcm9ubWVudAo7Owo7OyBMYXRleCBlbnZpcm9ubWVudHMgYXJlIGlnbm9yZWQKCgo7 Ozs7IExhdGV4IEZyYWdtZW50Cjs7Cjs7IExhdGV4IGZyYWdtZW50cyBhcmUgaWdub3JlZC4KCgo7 Ozs7IExpbmUgQnJlYWsKCihkZWZ1biBvcmctZS10ZXhpbmZvLWxpbmUtYnJlYWsgKGxpbmUtYnJl YWsgY29udGVudHMgaW5mbykKICAiVHJhbnNjb2RlIGEgTElORS1CUkVBSyBvYmplY3QgZnJvbSBP cmcgdG8gVGV4aW5mby4KQ09OVEVOVFMgaXMgbmlsLiAgSU5GTyBpcyBhIHBsaXN0IGhvbGRpbmcg Y29udGV4dHVhbCBpbmZvcm1hdGlvbi4iCiAgIkAqIikKCgo7Ozs7IExpbmsKCihkZWZ1biBvcmct ZS10ZXhpbmZvLWxpbmsgKGxpbmsgZGVzYyBpbmZvKQogICJUcmFuc2NvZGUgYSBMSU5LIG9iamVj dCBmcm9tIE9yZyB0byBUZXhpbmZvLgoKREVTQyBpcyB0aGUgZGVzY3JpcHRpb24gcGFydCBvZiB0 aGUgbGluaywgb3IgdGhlIGVtcHR5IHN0cmluZy4KSU5GTyBpcyBhIHBsaXN0IGhvbGRpbmcgY29u dGV4dHVhbCBpbmZvcm1hdGlvbi4gIFNlZQpgb3JnLWV4cG9ydC1kYXRhJy4iCiAgKGxldCogKCh0 eXBlIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6dHlwZSBsaW5rKSkKCSAocmF3LXBhdGggKG9yZy1l bGVtZW50LXByb3BlcnR5IDpwYXRoIGxpbmspKQoJIDs7IEVuc3VyZSBERVNDIHJlYWxseSBleGlz dHMsIG9yIHNldCBpdCB0byBuaWwuCgkgKGRlc2MgKGFuZCAobm90IChzdHJpbmc9IGRlc2MgIiIp KSBkZXNjKSkKCSAocGF0aCAoY29uZAoJCSgobWVtYmVyIHR5cGUgJygiaHR0cCIgImh0dHBzIiAi ZnRwIikpCgkJIChjb25jYXQgdHlwZSAiOiIgcmF3LXBhdGgpKQoJCSgoc3RyaW5nPSB0eXBlICJm aWxlIikKCQkgKHdoZW4gKHN0cmluZy1tYXRjaCAiXFwoLitcXCk6Oi4rIiByYXctcGF0aCkKCQkg ICAoc2V0cSByYXctcGF0aCAobWF0Y2gtc3RyaW5nIDEgcmF3LXBhdGgpKSkKCQkgKGlmIChmaWxl LW5hbWUtYWJzb2x1dGUtcCByYXctcGF0aCkKCQkgICAgIChjb25jYXQgImZpbGU6Ly8iIChleHBh bmQtZmlsZS1uYW1lIHJhdy1wYXRoKSkKCQkgICAoY29uY2F0ICJmaWxlOi8vIiByYXctcGF0aCkp KQoJCSh0IHJhdy1wYXRoKSkpCgkgKGVtYWlsIChpZiAoc3RyaW5nPSB0eXBlICJtYWlsdG8iKQoJ CSAgICAobGV0ICgodGV4dCAocmVwbGFjZS1yZWdleHAtaW4tc3RyaW5nCgkJCQkgIkAiICJAQCIg cmF3LXBhdGgpKSkKCQkgICAgIChjb25jYXQgdGV4dCAoaWYgZGVzYyAoY29uY2F0ICIsIiBkZXNj KSkpKSkpCgkgcHJvdG9jb2wpCiAgICAoY29uZAogICAgIDs7IExpbmtzIHBvaW50aW5nIHRvIGFu IGhlYWRsaW5lOiBGaW5kIGRlc3RpbmF0aW9uIGFuZCBidWlsZAogICAgIDs7IGFwcHJvcHJpYXRl IHJlZmVyZW5jaW5nIGNvbW1hbmQuCiAgICAgKChtZW1iZXIgdHlwZSAnKCJjdXN0b20taWQiICJp ZCIpKQogICAgICAobGV0ICgoZGVzdGluYXRpb24gKG9yZy1leHBvcnQtcmVzb2x2ZS1pZC1saW5r IGxpbmsgaW5mbykpKQoJKGNhc2UgKG9yZy1lbGVtZW50LXR5cGUgZGVzdGluYXRpb24pCgkgIDs7 IElkIGxpbmsgcG9pbnRzIHRvIGFuIGV4dGVybmFsIGZpbGUuCgkgIChwbGFpbi10ZXh0CgkgICAo aWYgZGVzYyAoZm9ybWF0ICJAdXJlZntmaWxlOi8vJXMsJXN9IiBkZXN0aW5hdGlvbiBkZXNjKQoJ ICAgICAoZm9ybWF0ICJAdXJlZntmaWxlOi8vJXN9IiBkZXN0aW5hdGlvbikpKQoJICA7OyBMSU5L IHBvaW50cyB0byBhbiBoZWFkbGluZS4gIFVzZSB0aGUgaGVhZGxpbmUgYXMgdGhlIE5PREUgdGFy Z2V0CgkgIChoZWFkbGluZQoJICAgKGZvcm1hdCAiQHJlZnslc30iCgkJICAgKG9yZy1leHBvcnQt ZGF0YQoJCSAgICAob3JnLWVsZW1lbnQtcHJvcGVydHkgOnRpdGxlIGRlc3RpbmF0aW9uKSBpbmZv KSkpCgkgIChvdGhlcndpc2UKCSAgIChsZXQgKChwYXRoIChvcmctZXhwb3J0LXNvbGlkaWZ5LWxp bmstdGV4dCBwYXRoKSkpCgkgICAgIChpZiAobm90IGRlc2MpIChmb3JtYXQgIkByZWZ7JXN9IiBw YXRoKQoJICAgICAgIChmb3JtYXQgIkByZWZ7JXMsLCVzfSIgcGF0aCBkZXNjKSkpKSkpKQogICAg ICgobWVtYmVyIHR5cGUgJygiZnV6enkiKSkKICAgICAgKGxldCAoKGRlc3RpbmF0aW9uIChvcmct ZXhwb3J0LXJlc29sdmUtZnV6enktbGluayBsaW5rIGluZm8pKSkKCShjYXNlIChvcmctZWxlbWVu dC10eXBlIGRlc3RpbmF0aW9uKQoJICA7OyBJZCBsaW5rIHBvaW50cyB0byBhbiBleHRlcm5hbCBm aWxlLgoJICAocGxhaW4tdGV4dAoJICAgKGlmIGRlc2MgKGZvcm1hdCAiQHVyZWZ7ZmlsZTovLyVz LCVzfSIgZGVzdGluYXRpb24gZGVzYykKCSAgICAgKGZvcm1hdCAiQHVyZWZ7ZmlsZTovLyVzfSIg ZGVzdGluYXRpb24pKSkKCSAgOzsgTElOSyBwb2ludHMgdG8gYW4gaGVhZGxpbmUuICBVc2UgdGhl IGhlYWRsaW5lIGFzIHRoZSBOT0RFIHRhcmdldAoJICAoaGVhZGxpbmUKCSAgIChmb3JtYXQgIkBy ZWZ7JXN9IgoJCSAgIChvcmctZXhwb3J0LWRhdGEKCQkgICAgKG9yZy1lbGVtZW50LXByb3BlcnR5 IDp0aXRsZSBkZXN0aW5hdGlvbikgaW5mbykpKQoJICAob3RoZXJ3aXNlCgkgICAobGV0ICgocGF0 aCAob3JnLWV4cG9ydC1zb2xpZGlmeS1saW5rLXRleHQgcGF0aCkpKQoJICAgICAoaWYgKG5vdCBk ZXNjKSAoZm9ybWF0ICJAcmVmeyVzfSIgcGF0aCkKCSAgICAgICAoZm9ybWF0ICJAcmVmeyVzLCwl c30iIHBhdGggZGVzYykpKSkpKSkKICAgICA7OyBTcGVjaWFsIGNhc2UgZm9yIGVtYWlsIGFkZHJl c3NlcwogICAgIChlbWFpbAogICAgICAoZm9ybWF0ICJAZW1haWx7JXN9IiBlbWFpbCkpCiAgICAg OzsgRXh0ZXJuYWwgbGluayB3aXRoIGEgZGVzY3JpcHRpb24gcGFydC4KICAgICAoKGFuZCBwYXRo IGRlc2MpIChmb3JtYXQgIkB1cmVmeyVzLCVzfSIgcGF0aCBkZXNjKSkKICAgICA7OyBFeHRlcm5h bCBsaW5rIHdpdGhvdXQgYSBkZXNjcmlwdGlvbiBwYXJ0LgogICAgIChwYXRoIChmb3JtYXQgIkB1 cmVmeyVzfSIgcGF0aCkpCiAgICAgOzsgTm8gcGF0aCwgb25seSBkZXNjcmlwdGlvbi4gIFRyeSB0 byBkbyBzb21ldGhpbmcgdXNlZnVsLgogICAgICh0IChmb3JtYXQgb3JnLWUtdGV4aW5mby1saW5r LXdpdGgtdW5rbm93bi1wYXRoLWZvcm1hdCBkZXNjKSkpKSkKCgo7Ozs7IE1hY3JvCgooZGVmdW4g b3JnLWUtdGV4aW5mby1tYWNybyAobWFjcm8gY29udGVudHMgaW5mbykKICAiVHJhbnNjb2RlIGEg TUFDUk8gZWxlbWVudCBmcm9tIE9yZyB0byBUZXhpbmZvLgpDT05URU5UUyBpcyBuaWwuICBJTkZP IGlzIGEgcGxpc3QgaG9sZGluZyBjb250ZXh0dWFsIGluZm9ybWF0aW9uLiIKICA7OyBVc2UgYXZh aWxhYmxlIHRvb2xzLgogIChvcmctZXhwb3J0LWV4cGFuZC1tYWNybyBtYWNybyBpbmZvKSkKCgo7 Ozs7IE1lbnUKCihkZWZ1biBvcmctZS10ZXhpbmZvLW1ha2UtbWVudSAoaW5mbyBsZXZlbCkKICAi Q3JlYXRlIHRoZSBtZW51IGZvciBpbmNsdXNpb24gaW4gdGhlIHRleGlmbyBkb2N1bWVudC4KCklO Rk8gaXMgdGhlIHBhcnNlZCBidWZmZXIgdGhhdCBjb250YWlucyB0aGUgaGVhZGxpbmVzLiAgTEVW RUwKZGV0ZXJtaW5lcyB3aGV0aGVyIHRvIG1ha2UgdGhlIG1haW4gbWVudSwgb3IgdGhlIGRldGFp bGVkIG1lbnUuCgpUaGlzIGlzIG9ubHkgdXNlZCBmb3IgZ2VuZXJhdGluZyB0aGUgcHJpbWFyeSBt ZW51LiAgSW4tTm9kZSBtZW51cwphcmUgZ2VuZXJhdGVkIGRpcmVjdGx5LiIKICAobGV0KiAoKHBh cnNlIChwbGlzdC1nZXQgaW5mbyA6cGFyc2UtdHJlZSkpCgkgOzsgVG9wIGRldGVybWluZXMgbGV2 ZWwgdG8gYnVpbGQgbWVudSBmcm9tLCBpdCBmaW5kcyB0aGUKCSA7OyBsZXZlbCBvZiB0aGUgZmly c3QgaGVhZGxpbmUgaW4gdGhlIGV4cG9ydC4KCSAodG9wIChvcmctZWxlbWVudC1tYXAKCSAgICAg ICBwYXJzZSAnaGVhZGxpbmUKCSAgICAgICAobGFtYmRhIChoZWFkbGluZSkKCQkgKG9yZy1lbGVt ZW50LXByb3BlcnR5IDpsZXZlbCBoZWFkbGluZSkpIGluZm8gJ3QpKSkKICAgIChjb25kCiAgICAg OzsgR2VuZXJhdGUgdGhlIG1haW4gbWVudQogICAgICgoZXEgbGV2ZWwgJ21haW4pCiAgICAgIChv cmctZS10ZXhpbmZvLS1idWlsZC1tZW51IHBhcnNlIHRvcCBpbmZvKSkKICAgICA7OyBHZW5lcmF0 ZSB0aGUgZGV0YWlsZWQgKHJlY3Vyc2l2ZSkgbWVudQogICAgICgoZXEgbGV2ZWwgJ2RldGFpbGVk KQogICAgICA7OyBSZXF1aXJlcyByZWN1cnNpb24KICAgICAgOzsob3JnLWUtdGV4aW5mby0tYnVp bGQtZGV0YWlsZWQtbWVudSBwYXJzZSB0b3AgaW5mbykKICAgICAgKG9yIChvcmctZS10ZXhpbmZv LS1idWlsZC1tZW51IHBhcnNlIHRvcCBpbmZvICdkZXRhaWxlZCkKCSAgImRldGFpbGVkIikpCiAg ICAgOzsgT3RoZXJ3aXNlIGRvIG5vdGhpbmcKICAgICAodCkpKSkKCgo7Ozs7IFBhcmFncmFwaAoK KGRlZnVuIG9yZy1lLXRleGluZm8tcGFyYWdyYXBoIChwYXJhZ3JhcGggY29udGVudHMgaW5mbykK ICAiVHJhbnNjb2RlIGEgUEFSQUdSQVBIIGVsZW1lbnQgZnJvbSBPcmcgdG8gVGV4aW5mby4KQ09O VEVOVFMgaXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBwYXJhZ3JhcGgsIGFzIGEgc3RyaW5nLiAgSU5G TyBpcwp0aGUgcGxpc3QgdXNlZCBhcyBhIGNvbW11bmljYXRpb24gY2hhbm5lbC4iCiAgY29udGVu dHMpCgoKOzs7OyBQbGFpbiBMaXN0CgooZGVmdW4gb3JnLWUtdGV4aW5mby1wbGFpbi1saXN0IChw bGFpbi1saXN0IGNvbnRlbnRzIGluZm8pCiAgIlRyYW5zY29kZSBhIFBMQUlOLUxJU1QgZWxlbWVu dCBmcm9tIE9yZyB0byBUZXhpbmZvLgpDT05URU5UUyBpcyB0aGUgY29udGVudHMgb2YgdGhlIGxp c3QuICBJTkZPIGlzIGEgcGxpc3QgaG9sZGluZwpjb250ZXh0dWFsIGluZm9ybWF0aW9uLiIKICAo bGV0KiAoKHR5cGUgKG9yZy1lbGVtZW50LXByb3BlcnR5IDp0eXBlIHBsYWluLWxpc3QpKQoJIChs aXN0LXR5cGUgKGNvbmQKCQkgICAgICgoZXEgdHlwZSAnb3JkZXJlZCkgImVudW1lcmF0ZSIpCgkJ ICAgICAoKGVxIHR5cGUgJ3Vub3JkZXJlZCkgIml0ZW1pemUiKQoJCSAgICAgKChlcSB0eXBlICdk ZXNjcmlwdGl2ZSkgInRhYmxlIikpKSkKICAgIChmb3JtYXQgIkAlcyVzXG5AZW5kICVzIgoJICAg IChpZiAoZXEgdHlwZSAnZGVzY3JpcHRpdmUpCgkJKGNvbmNhdCBsaXN0LXR5cGUgIiAiIG9yZy1l LXRleGluZm8tZGVmLXRhYmxlLW1hcmt1cCkKCSAgICAgbGlzdC10eXBlKQoJICAgIGNvbnRlbnRz CgkgICAgbGlzdC10eXBlKSkpCgoKOzs7OyBQbGFpbiBUZXh0CgooZGVmdW4gb3JnLWUtdGV4aW5m by1wbGFpbi10ZXh0ICh0ZXh0IGluZm8pCiAgIlRyYW5zY29kZSBhIFRFWFQgc3RyaW5nIGZyb20g T3JnIHRvIFRleGluZm8uClRFWFQgaXMgdGhlIHN0cmluZyB0byB0cmFuc2NvZGUuICBJTkZPIGlz IGEgcGxpc3QgaG9sZGluZwpjb250ZXh0dWFsIGluZm9ybWF0aW9uLiIKICA7OyBQcm90ZWN0IEAg eyBhbmQgfS4KICAod2hpbGUgKHN0cmluZy1tYXRjaCAiXFwoW15cXF1cXHxeXFwpXFwoW0B7fV1c XCkiIHRleHQpCiAgICAoc2V0cSB0ZXh0CgkgIChyZXBsYWNlLW1hdGNoIChmb3JtYXQgIlxcJXMi IChtYXRjaC1zdHJpbmcgMiB0ZXh0KSkgbmlsIHQgdGV4dCAyKSkpCiAgOzsgTGFUZVggaW50byBA TGFUZVh7fSBhbmQgVGVYIGludG8gQFRlWHt9CiAgKGxldCAoKGNhc2UtZm9sZC1zZWFyY2ggbmls KQoJKHN0YXJ0IDApKQogICAgKHdoaWxlIChzdHJpbmctbWF0Y2ggIlxcKFxcKD86TGFcXCk/VGVY XFwpIiB0ZXh0IHN0YXJ0KQogICAgICAoc2V0cSB0ZXh0IChyZXBsYWNlLW1hdGNoCgkJICAoZm9y bWF0ICJAJXN7fSIgKG1hdGNoLXN0cmluZyAxIHRleHQpKSBuaWwgdCB0ZXh0KQoJICAgIHN0YXJ0 IChtYXRjaC1lbmQgMCkpKSkKICA7OyBIYW5kbGUgcXVvdGF0aW9uIG1hcmtzCiAgKHNldHEgdGV4 dCAob3JnLWUtdGV4aW5mby0tcXVvdGF0aW9uLW1hcmtzIHRleHQgaW5mbykpCiAgOzsgQ29udmVy dCBzcGVjaWFsIHN0cmluZ3MuCiAgKHdoZW4gKHBsaXN0LWdldCBpbmZvIDp3aXRoLXNwZWNpYWwt c3RyaW5ncykKICAgICh3aGlsZSAoc3RyaW5nLW1hdGNoIChyZWdleHAtcXVvdGUgIi4uLiIpIHRl eHQpCiAgICAgIChzZXRxIHRleHQgKHJlcGxhY2UtbWF0Y2ggIkBkb3Rze30iIG5pbCB0IHRleHQp KSkpCiAgOzsgSGFuZGxlIGJyZWFrIHByZXNlcnZhdGlvbiBpZiByZXF1aXJlZC4KICAod2hlbiAo cGxpc3QtZ2V0IGluZm8gOnByZXNlcnZlLWJyZWFrcykKICAgIChzZXRxIHRleHQgKHJlcGxhY2Ut cmVnZXhwLWluLXN0cmluZyAiXFwoXFxcXFxcXFxcXCk/WyBcdF0qXG4iICIgQCpcbiIKCQkJCQkg dGV4dCkpKQogIDs7IFJldHVybiB2YWx1ZS4KICB0ZXh0KQoKCjs7OzsgUGxhbm5pbmcKCihkZWZ1 biBvcmctZS10ZXhpbmZvLXBsYW5uaW5nIChwbGFubmluZyBjb250ZW50cyBpbmZvKQogICJUcmFu c2NvZGUgYSBQTEFOTklORyBlbGVtZW50IGZyb20gT3JnIHRvIFRleGluZm8uCkNPTlRFTlRTIGlz IG5pbC4gIElORk8gaXMgYSBwbGlzdCBob2xkaW5nIGNvbnRleHR1YWwKaW5mb3JtYXRpb24uIgog IChjb25jYXQKICAgIkBub2luZGVudCIKICAgKG1hcGNvbmNhdAogICAgJ2lkZW50aXR5CiAgICAo ZGVscSBuaWwKCSAgKGxpc3QKCSAgIChsZXQgKChjbG9zZWQgKG9yZy1lbGVtZW50LXByb3BlcnR5 IDpjbG9zZWQgcGxhbm5pbmcpKSkKCSAgICAgKHdoZW4gY2xvc2VkCgkgICAgICAgKGNvbmNhdAoJ CShmb3JtYXQgIkBzdHJvbmclc30gIiBvcmctY2xvc2VkLXN0cmluZykKCQkoZm9ybWF0IG9yZy1l LXRleGluZm8taW5hY3RpdmUtdGltZXN0YW1wLWZvcm1hdAoJCQkob3JnLXRyYW5zbGF0ZS10aW1l IGNsb3NlZCkpKSkpCgkgICAobGV0ICgoZGVhZGxpbmUgKG9yZy1lbGVtZW50LXByb3BlcnR5IDpk ZWFkbGluZSBwbGFubmluZykpKQoJICAgICAod2hlbiBkZWFkbGluZQoJICAgICAgIChjb25jYXQK CQkoZm9ybWF0ICJAc3Ryb25neyVzfSAiIG9yZy1kZWFkbGluZS1zdHJpbmcpCgkJKGZvcm1hdCBv cmctZS10ZXhpbmZvLWFjdGl2ZS10aW1lc3RhbXAtZm9ybWF0CgkJCShvcmctdHJhbnNsYXRlLXRp bWUgZGVhZGxpbmUpKSkpKQoJICAgKGxldCAoKHNjaGVkdWxlZCAob3JnLWVsZW1lbnQtcHJvcGVy dHkgOnNjaGVkdWxlZCBwbGFubmluZykpKQoJICAgICAod2hlbiBzY2hlZHVsZWQKCSAgICAgICAo Y29uY2F0CgkJKGZvcm1hdCAiQHN0cm9uZ3slc30gIiBvcmctc2NoZWR1bGVkLXN0cmluZykKCQko Zm9ybWF0IG9yZy1lLXRleGluZm8tYWN0aXZlLXRpbWVzdGFtcC1mb3JtYXQKCQkJKG9yZy10cmFu c2xhdGUtdGltZSBzY2hlZHVsZWQpKSkpKSkpCiAgICAiICIpCiAgICJAKiIpKQoKCjs7OzsgUHJv cGVydHkgRHJhd2VyCgooZGVmdW4gb3JnLWUtdGV4aW5mby1wcm9wZXJ0eS1kcmF3ZXIgKHByb3Bl cnR5LWRyYXdlciBjb250ZW50cyBpbmZvKQogICJUcmFuc2NvZGUgYSBQUk9QRVJUWS1EUkFXRVIg ZWxlbWVudCBmcm9tIE9yZyB0byBUZXhpbmZvLgpDT05URU5UUyBpcyBuaWwuICBJTkZPIGlzIGEg cGxpc3QgaG9sZGluZyBjb250ZXh0dWFsCmluZm9ybWF0aW9uLiIKICA7OyBUaGUgcHJvcGVydHkg ZHJhd2VyIGlzbid0IGV4cG9ydGVkIGJ1dCB3ZSB3YW50IHNlcGFyYXRpbmcgYmxhbmsKICA7OyBs aW5lcyBub25ldGhlbGVzcy4KICAiIikKCgo7Ozs7IFF1b3RlIEJsb2NrCgooZGVmdW4gb3JnLWUt dGV4aW5mby1xdW90ZS1ibG9jayAocXVvdGUtYmxvY2sgY29udGVudHMgaW5mbykKICAiVHJhbnNj b2RlIGEgUVVPVEUtQkxPQ0sgZWxlbWVudCBmcm9tIE9yZyB0byBUZXhpbmZvLgpDT05URU5UUyBo b2xkcyB0aGUgY29udGVudHMgb2YgdGhlIGJsb2NrLiAgSU5GTyBpcyBhIHBsaXN0CmhvbGRpbmcg Y29udGV4dHVhbCBpbmZvcm1hdGlvbi4iCiAgCiAgKGxldCogKCh0aXRsZSAob3JnLWVsZW1lbnQt cHJvcGVydHkgOm5hbWUgcXVvdGUtYmxvY2spKQoJIChzdGFydC1xdW90ZSAoY29uY2F0ICJAcXVv dGF0aW9uIgoKCQkJICAgICAgKGlmIHRpdGxlCgkJCQkgKGZvcm1hdCAiICVzIiB0aXRsZSkpKSkp CiAgICAKICAgIChmb3JtYXQgIiVzXG4lc0BlbmQgcXVvdGF0aW9uIiBzdGFydC1xdW90ZSBjb250 ZW50cykpKQoKCjs7OzsgUXVvdGUgU2VjdGlvbgoKKGRlZnVuIG9yZy1lLXRleGluZm8tcXVvdGUt c2VjdGlvbiAocXVvdGUtc2VjdGlvbiBjb250ZW50cyBpbmZvKQogICJUcmFuc2NvZGUgYSBRVU9U RS1TRUNUSU9OIGVsZW1lbnQgZnJvbSBPcmcgdG8gVGV4aW5mby4KQ09OVEVOVFMgaXMgbmlsLiAg SU5GTyBpcyBhIHBsaXN0IGhvbGRpbmcgY29udGV4dHVhbCBpbmZvcm1hdGlvbi4iCiAgKGxldCAo KHZhbHVlIChvcmctcmVtb3ZlLWluZGVudGF0aW9uCgkJKG9yZy1lbGVtZW50LXByb3BlcnR5IDp2 YWx1ZSBxdW90ZS1zZWN0aW9uKSkpKQogICAgKHdoZW4gdmFsdWUgKGZvcm1hdCAiQHZlcmJhdGlt XG4lc0BlbmQgdmVyYmF0aW0iIHZhbHVlKSkpKQoKCjs7OzsgUmFkaW8gVGFyZ2V0CgooZGVmdW4g b3JnLWUtdGV4aW5mby1yYWRpby10YXJnZXQgKHJhZGlvLXRhcmdldCB0ZXh0IGluZm8pCiAgIlRy YW5zY29kZSBhIFJBRElPLVRBUkdFVCBvYmplY3QgZnJvbSBPcmcgdG8gVGV4aW5mby4KVEVYVCBp cyB0aGUgdGV4dCBvZiB0aGUgdGFyZ2V0LiAgSU5GTyBpcyBhIHBsaXN0IGhvbGRpbmcKY29udGV4 dHVhbCBpbmZvcm1hdGlvbi4iCiAgKGZvcm1hdCAiQGFuY2hvcnslc30lcyIKCSAgKG9yZy1leHBv cnQtc29saWRpZnktbGluay10ZXh0CgkgICAob3JnLWVsZW1lbnQtcHJvcGVydHkgOnZhbHVlIHJh ZGlvLXRhcmdldCkpCgkgIHRleHQpKQoKCjs7OzsgU2VjdGlvbgoKKGRlZnVuIG9yZy1lLXRleGlu Zm8tc2VjdGlvbiAoc2VjdGlvbiBjb250ZW50cyBpbmZvKQogICJUcmFuc2NvZGUgYSBTRUNUSU9O IGVsZW1lbnQgZnJvbSBPcmcgdG8gVGV4aW5mby4KQ09OVEVOVFMgaG9sZHMgdGhlIGNvbnRlbnRz IG9mIHRoZSBzZWN0aW9uLiAgSU5GTyBpcyBhIHBsaXN0CmhvbGRpbmcgY29udGV4dHVhbCBpbmZv cm1hdGlvbi4iCiAgY29udGVudHMpCgoKOzs7OyBTcGVjaWFsIEJsb2NrCjs7Cjs7IEFyZSBpZ25v cmVkIGF0IHRoZSBtb21lbnQKCjs7OzsgU3JjIEJsb2NrCgooZGVmdW4gb3JnLWUtdGV4aW5mby1z cmMtYmxvY2sgKHNyYy1ibG9jayBjb250ZW50cyBpbmZvKQogICJUcmFuc2NvZGUgYSBTUkMtQkxP Q0sgZWxlbWVudCBmcm9tIE9yZyB0byBUZXhpbmZvLgpDT05URU5UUyBob2xkcyB0aGUgY29udGVu dHMgb2YgdGhlIGl0ZW0uICBJTkZPIGlzIGEgcGxpc3QgaG9sZGluZwpjb250ZXh0dWFsIGluZm9y bWF0aW9uLiIKICAobGV0KiAoKGxhbmcgKG9yZy1lbGVtZW50LXByb3BlcnR5IDpsYW5ndWFnZSBz cmMtYmxvY2spKQoJIChsaXNwLXAgKHN0cmluZy1tYXRjaC1wICJsaXNwIiBsYW5nKSkpCiAgICAo Y29uZAogICAgIDs7IENhc2UgMS4gIExpc3AgQmxvY2sKICAgICAobGlzcC1wCiAgICAgIChmb3Jt YXQgIkBsaXNwXG4lc1xuQGVuZCBsaXNwIgoJICAgICAgKG9yZy1leHBvcnQtZm9ybWF0LWNvZGUt ZGVmYXVsdCBzcmMtYmxvY2sgaW5mbykpKQogICAgIDs7IENhc2UgMi4gIE90aGVyIGJsb2Nrcwog ICAgICh0CiAgICAgIChmb3JtYXQgIkBleGFtcGxlXG4lc1xuQGVuZCBleGFtcGxlIgoJICAgICAg KG9yZy1leHBvcnQtZm9ybWF0LWNvZGUtZGVmYXVsdCBzcmMtYmxvY2sgaW5mbykpKSkpKQoKCjs7 OzsgU3RhdGlzdGljcyBDb29raWUKCihkZWZ1biBvcmctZS10ZXhpbmZvLXN0YXRpc3RpY3MtY29v a2llIChzdGF0aXN0aWNzLWNvb2tpZSBjb250ZW50cyBpbmZvKQogICJUcmFuc2NvZGUgYSBTVEFU SVNUSUNTLUNPT0tJRSBvYmplY3QgZnJvbSBPcmcgdG8gVGV4aW5mby4KQ09OVEVOVFMgaXMgbmls LiAgSU5GTyBpcyBhIHBsaXN0IGhvbGRpbmcgY29udGV4dHVhbCBpbmZvcm1hdGlvbi4iCiAgKG9y Zy1lbGVtZW50LXByb3BlcnR5IDp2YWx1ZSBzdGF0aXN0aWNzLWNvb2tpZSkpCgoKOzs7OyBTdHJp a2UtVGhyb3VnaAo7Owo7OyBTdHJpa2V0aHJvdWdoIGlzIGlnbm9yZWQKCgo7Ozs7IFN1YnNjcmlw dAoKKGRlZnVuIG9yZy1lLXRleGluZm8tc3Vic2NyaXB0IChzdWJzY3JpcHQgY29udGVudHMgaW5m bykKICAiVHJhbnNjb2RlIGEgU1VCU0NSSVBUIG9iamVjdCBmcm9tIE9yZyB0byBUZXhpbmZvLgpD T05URU5UUyBpcyB0aGUgY29udGVudHMgb2YgdGhlIG9iamVjdC4gIElORk8gaXMgYSBwbGlzdCBo b2xkaW5nCmNvbnRleHR1YWwgaW5mb3JtYXRpb24uIgogIChmb3JtYXQgIkBtYXRoe18lc30iIGNv bnRlbnRzKSkKCgo7Ozs7IFN1cGVyc2NyaXB0CgooZGVmdW4gb3JnLWUtdGV4aW5mby1zdXBlcnNj cmlwdCAoc3VwZXJzY3JpcHQgY29udGVudHMgaW5mbykKICAiVHJhbnNjb2RlIGEgU1VQRVJTQ1JJ UFQgb2JqZWN0IGZyb20gT3JnIHRvIFRleGluZm8uCkNPTlRFTlRTIGlzIHRoZSBjb250ZW50cyBv ZiB0aGUgb2JqZWN0LiAgSU5GTyBpcyBhIHBsaXN0IGhvbGRpbmcKY29udGV4dHVhbCBpbmZvcm1h dGlvbi4iCiAgKGZvcm1hdCAiQG1hdGh7XiVzfSIgY29udGVudHMpKQoKCjs7OzsgVGFibGUKOzsK OzsgYG9yZy1lLXRleGluZm8tdGFibGUnIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgdGFibGUgdHJh bnNjb2RpbmcuICBJdAo7OyB0YWtlcyBjYXJlIG9mIHRhYmxlcyB3aXRoIGEgInZlcmJhdGltIiBh dHRyaWJ1dGUuICBPdGhlcndpc2UsIGl0Cjs7IGRlbGVnYXRlcyB0aGUgam9iIHRvIGVpdGhlciBg b3JnLWUtdGV4aW5mby10YWJsZS0tdGFibGUuZWwtdGFibGUnIG9yCjs7IGBvcmctZS10ZXhpbmZv LXRhYmxlLS1vcmctdGFibGUnIGZ1bmN0aW9ucywgZGVwZW5kaW5nIG9mIHRoZSB0eXBlIG9mCjs7 IHRoZSB0YWJsZS4KOzsKOzsgYG9yZy1lLXRleGluZm8tdGFibGUtLWFsaWduLXN0cmluZycgaXMg YSBzdWJyb3V0aW5lIHVzZWQgdG8gYnVpbGQKOzsgYWxpZ25tZW50IHN0cmluZyBmb3IgT3JnIHRh Ymxlcy4KCihkZWZ1biBvcmctZS10ZXhpbmZvLXRhYmxlICh0YWJsZSBjb250ZW50cyBpbmZvKQog ICJUcmFuc2NvZGUgYSBUQUJMRSBlbGVtZW50IGZyb20gT3JnIHRvIFRleGluZm8uCkNPTlRFTlRT IGlzIHRoZSBjb250ZW50cyBvZiB0aGUgdGFibGUuICBJTkZPIGlzIGEgcGxpc3QgaG9sZGluZwpj b250ZXh0dWFsIGluZm9ybWF0aW9uLiIKICAoY29uZAogICA7OyBDYXNlIDE6IHZlcmJhdGltIHRh YmxlLgogICAoKG9yIG9yZy1lLXRleGluZm8tdGFibGVzLXZlcmJhdGltCgkobGV0ICgoYXR0ciAo bWFwY29uY2F0ICdpZGVudGl0eQoJCQkgICAgICAgKG9yZy1lbGVtZW50LXByb3BlcnR5IDphdHRy X2xhdGV4IHRhYmxlKQoJCQkgICAgICAgIiAiKSkpCgkgIChhbmQgYXR0ciAoc3RyaW5nLW1hdGNo ICJcXDx2ZXJiYXRpbVxcPiIgYXR0cikpKSkKICAgIChmb3JtYXQgIkB2ZXJiYXRpbSBcbiVzXG5A ZW5kIHZlcmJhdGltIgoJICAgIDs7IFJlLWNyZWF0ZSB0YWJsZSwgd2l0aG91dCBhZmZpbGlhdGVk IGtleXdvcmRzLgoJICAgIChvcmctdHJpbQoJICAgICAob3JnLWVsZW1lbnQtaW50ZXJwcmV0LWRh dGEKCSAgICAgIGAodGFibGUgbmlsICxAKG9yZy1lbGVtZW50LWNvbnRlbnRzIHRhYmxlKSkpKSkp CiAgIDs7IENhc2UgMjogdGFibGUuZWwgdGFibGUuICBDb252ZXJ0IGl0IHVzaW5nIGFwcHJvcHJp YXRlIHRvb2xzLgogICAoKGVxIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6dHlwZSB0YWJsZSkgJ3Rh YmxlLmVsKQogICAgKG9yZy1lLXRleGluZm8tdGFibGUtLXRhYmxlLmVsLXRhYmxlIHRhYmxlIGNv bnRlbnRzIGluZm8pKQogICA7OyBDYXNlIDM6IFN0YW5kYXJkIHRhYmxlLgogICAodCAob3JnLWUt dGV4aW5mby10YWJsZS0tb3JnLXRhYmxlIHRhYmxlIGNvbnRlbnRzIGluZm8pKSkpCgooZGVmdW4g b3JnLWUtdGV4aW5mby10YWJsZS1jb2x1bW4td2lkdGhzICh0YWJsZSBpbmZvKQogICJEZXRlcm1p bmUgdGhlIGxhcmdlc3QgdGFibGUgY2VsbCBpbiBlYWNoIGNvbHVtbiB0byBwcm9jZXNzIGFsaWdu bWVudC4KClRBQkxFIGlzIHRoZSB0YWJsZSBlbGVtZW50IHRvIHRyYW5zY29kZS4gIElORk8gaXMg YSBwbGlzdCB1c2VkIGFzCmEgY29tbXVuaWNhdGlvbiBjaGFubmVsLiIKICAobGV0KiAoKHJvd3Mg KG9yZy1lbGVtZW50LW1hcCB0YWJsZSAndGFibGUtcm93ICdpZGVudGl0eSBpbmZvKSkKCSAoY29s bGVjdGVkIChsb29wIGZvciByb3cgaW4gcm93cyBjb2xsZWN0CgkJCSAgKG9yZy1lbGVtZW50LW1h cAoJCQkgICByb3cgJ3RhYmxlLWNlbGwgJ2lkZW50aXR5IGluZm8pKSkKCSAobnVtYmVyLWNlbGxz IChsZW5ndGggKGNhciBjb2xsZWN0ZWQpKSkKCSBjZWxscyBjb3VudHMpCiAgICAobG9vcCBmb3Ig cm93IGluIGNvbGxlY3RlZCBkbwoJICAocHVzaCAobWFwY2FyIChsYW1iZGEgKHJlZikKCQkgICAg IChsZXQqICgoc3RhcnQgKG9yZy1lbGVtZW50LXByb3BlcnR5IDpjb250ZW50cy1iZWdpbiByZWYp KQoJCQkgICAgKGVuZCAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmNvbnRlbnRzLWVuZCByZWYpKQoJ CQkgICAgKGxlbmd0aCAoLSBlbmQgc3RhcnQpKSkKCQkgICAgICAgbGVuZ3RoKSkgcm93KSBjZWxs cykpCiAgICAoc2V0cSBjZWxscyAocmVtb3ZlLWlmICMnbnVsbCBjZWxscykpCiAgICAocHVzaCAo bG9vcCBmb3IgY291bnQgZnJvbSAwIHRvICgtIG51bWJlci1jZWxscyAxKSBjb2xsZWN0CgkJICAg KGxvb3AgZm9yIGl0ZW0gaW4gY2VsbHMgY29sbGVjdAoJCQkgKG50aCBjb3VudCBpdGVtKSkpIGNv dW50cykKICAgIChtYXBjb25jYXQgJyhsYW1iZGEgKHNpemUpCgkJICAobWFrZS1zdHJpbmcgc2l6 ZSA/YSkpIChtYXBjYXIgKGxhbWJkYSAocmVmKQoJCQkJICAgKGFwcGx5ICdtYXggYCxAcmVmKSkg KGNhciBjb3VudHMpKQoJICAgICAgICJ9IHsiKQogICkpCgooZGVmdW4gb3JnLWUtdGV4aW5mby10 YWJsZS0tb3JnLXRhYmxlICh0YWJsZSBjb250ZW50cyBpbmZvKQogICJSZXR1cm4gYXBwcm9wcmlh dGUgVGV4aW5mbyBjb2RlIGZvciBhbiBPcmcgdGFibGUuCgpUQUJMRSBpcyB0aGUgdGFibGUgdHlw ZSBlbGVtZW50IHRvIHRyYW5zY29kZS4gIENPTlRFTlRTIGlzIGl0cwpjb250ZW50cywgYXMgYSBz dHJpbmcuICBJTkZPIGlzIGEgcGxpc3QgdXNlZCBhcyBhIGNvbW11bmljYXRpb24KY2hhbm5lbC4K ClRoaXMgZnVuY3Rpb24gYXNzdW1lcyBUQUJMRSBoYXMgYG9yZycgYXMgaXRzIGA6dHlwZScgYXR0 cmlidXRlLiIKICAobGV0KiAoKGF0dHIgKG9yZy1leHBvcnQtcmVhZC1hdHRyaWJ1dGUgOmF0dHJf dGV4aW5mbyB0YWJsZSkpCgkgKGNvbC13aWR0aCAocGxpc3QtZ2V0IGF0dHIgOmNvbHVtbnMpKQoJ IChjb2x1bW5zIChpZiBjb2wtd2lkdGgKCQkgICAgICAoZm9ybWF0ICJAY29sdW1uZnJhY3Rpb25z ICVzIgoJCQkgICAgICBjb2wtd2lkdGgpCgkJICAgIChmb3JtYXQgInslc30iCgkJCSAgICAob3Jn LWUtdGV4aW5mby10YWJsZS1jb2x1bW4td2lkdGhzCgkJCSAgICAgdGFibGUgaW5mbykpKSkpCiAg ICA7OyBQcmVwYXJlIHRoZSBmaW5hbCBmb3JtYXQgc3RyaW5nIGZvciB0aGUgdGFibGUuCiAgICAo Y29uZAogICAgIDs7IExvbmd0YWJsZS4KICAgICA7OyBPdGhlcnMuCiAgICAgKHQgKGNvbmNhdAoJ IChmb3JtYXQgIkBtdWx0aXRhYmxlICVzXG4lc0BlbmQgbXVsdGl0YWJsZSIKCQkgY29sdW1ucwoJ CSBjb250ZW50cykpKSkpKQoKKGRlZnVuIG9yZy1lLXRleGluZm8tdGFibGUtLXRhYmxlLmVsLXRh YmxlICh0YWJsZSBjb250ZW50cyBpbmZvKQogICJSZXR1cm5zIG5vdGhpbmcuCgpSYXRoZXIgdGhh biByZXR1cm4gYW4gaW52YWxpZCB0YWJsZSwgbm90aGluZyBpcyByZXR1cm5lZC4iCiAgJ25pbCkK Cgo7Ozs7IFRhYmxlIENlbGwKCihkZWZ1biBvcmctZS10ZXhpbmZvLXRhYmxlLWNlbGwgKHRhYmxl LWNlbGwgY29udGVudHMgaW5mbykKICAiVHJhbnNjb2RlIGEgVEFCTEUtQ0VMTCBlbGVtZW50IGZy b20gT3JnIHRvIFRleGluZm8uCkNPTlRFTlRTIGlzIHRoZSBjZWxsIGNvbnRlbnRzLiAgSU5GTyBp cyBhIHBsaXN0IHVzZWQgYXMKYSBjb21tdW5pY2F0aW9uIGNoYW5uZWwuIgogIChjb25jYXQgKGlm IChhbmQgY29udGVudHMKCQkgICBvcmctZS10ZXhpbmZvLXRhYmxlLXNjaWVudGlmaWMtbm90YXRp b24KCQkgICAoc3RyaW5nLW1hdGNoIG9yZ3RibC1leHAtcmVnZXhwIGNvbnRlbnRzKSkKCSAgICAg IDs7IFVzZSBhcHByb3ByaWF0ZSBmb3JtYXQgc3RyaW5nIGZvciBzY2llbnRpZmljCgkgICAgICA7 OyBub3RhdGlvbi4KCSAgICAgIChmb3JtYXQgb3JnLWUtdGV4aW5mby10YWJsZS1zY2llbnRpZmlj LW5vdGF0aW9uCgkJICAgICAgKG1hdGNoLXN0cmluZyAxIGNvbnRlbnRzKQoJCSAgICAgIChtYXRj aC1zdHJpbmcgMiBjb250ZW50cykpCgkgICAgY29udGVudHMpCgkgICh3aGVuIChvcmctZXhwb3J0 LWdldC1uZXh0LWVsZW1lbnQgdGFibGUtY2VsbCkgIlxuQHRhYiAiKSkpCgoKOzs7OyBUYWJsZSBS b3cKCihkZWZ1biBvcmctZS10ZXhpbmZvLXRhYmxlLXJvdyAodGFibGUtcm93IGNvbnRlbnRzIGlu Zm8pCiAgIlRyYW5zY29kZSBhIFRBQkxFLVJPVyBlbGVtZW50IGZyb20gT3JnIHRvIFRleGluZm8u CkNPTlRFTlRTIGlzIHRoZSBjb250ZW50cyBvZiB0aGUgcm93LiAgSU5GTyBpcyBhIHBsaXN0IHVz ZWQgYXMKYSBjb21tdW5pY2F0aW9uIGNoYW5uZWwuIgogIDs7IFJ1bGVzIGFyZSBpZ25vcmVkIHNp bmNlIHRhYmxlIHNlcGFyYXRvcnMgYXJlIGRlZHVjZWQgZnJvbQogIDs7IGJvcmRlcnMgb2YgdGhl IGN1cnJlbnQgcm93LgogICh3aGVuIChlcSAob3JnLWVsZW1lbnQtcHJvcGVydHkgOnR5cGUgdGFi bGUtcm93KSAnc3RhbmRhcmQpIAogICAgKGNvbmNhdCAiQGl0ZW0gIiBjb250ZW50cyAiXG4iKSkp CgoKOzs7OyBUYXJnZXQKCihkZWZ1biBvcmctZS10ZXhpbmZvLXRhcmdldCAodGFyZ2V0IGNvbnRl bnRzIGluZm8pCiAgIlRyYW5zY29kZSBhIFRBUkdFVCBvYmplY3QgZnJvbSBPcmcgdG8gVGV4aW5m by4KQ09OVEVOVFMgaXMgbmlsLiAgSU5GTyBpcyBhIHBsaXN0IGhvbGRpbmcgY29udGV4dHVhbApp bmZvcm1hdGlvbi4iCiAgKGZvcm1hdCAiQGFuY2hvcnslc30iCgkgIChvcmctZXhwb3J0LXNvbGlk aWZ5LWxpbmstdGV4dCAob3JnLWVsZW1lbnQtcHJvcGVydHkgOnZhbHVlIHRhcmdldCkpKSkKCgo7 Ozs7IFRpbWVzdGFtcAoKKGRlZnVuIG9yZy1lLXRleGluZm8tdGltZXN0YW1wICh0aW1lc3RhbXAg Y29udGVudHMgaW5mbykKICAiVHJhbnNjb2RlIGEgVElNRVNUQU1QIG9iamVjdCBmcm9tIE9yZyB0 byBUZXhpbmZvLgpDT05URU5UUyBpcyBuaWwuICBJTkZPIGlzIGEgcGxpc3QgaG9sZGluZyBjb250 ZXh0dWFsCmluZm9ybWF0aW9uLiIKICAobGV0ICgodmFsdWUgKG9yZy10cmFuc2xhdGUtdGltZSAo b3JnLWVsZW1lbnQtcHJvcGVydHkgOnZhbHVlIHRpbWVzdGFtcCkpKQoJKHR5cGUgKG9yZy1lbGVt ZW50LXByb3BlcnR5IDp0eXBlIHRpbWVzdGFtcCkpKQogICAgKGNvbmQgKChtZW1xIHR5cGUgJyhh Y3RpdmUgYWN0aXZlLXJhbmdlKSkKCSAgIChmb3JtYXQgb3JnLWUtdGV4aW5mby1hY3RpdmUtdGlt ZXN0YW1wLWZvcm1hdCB2YWx1ZSkpCgkgICgobWVtcSB0eXBlICcoaW5hY3RpdmUgaW5hY3RpdmUt cmFuZ2UpKQoJICAgKGZvcm1hdCBvcmctZS10ZXhpbmZvLWluYWN0aXZlLXRpbWVzdGFtcC1mb3Jt YXQgdmFsdWUpKQoJICAodCAoZm9ybWF0IG9yZy1lLXRleGluZm8tZGlhcnktdGltZXN0YW1wLWZv cm1hdCB2YWx1ZSkpKSkpCgoKOzs7OyBVbmRlcmxpbmUKOzsKOzsgVW5kZXJsaW5lIGlzIGlnbm9y ZWQKCgo7Ozs7IFZlcmJhdGltCgooZGVmdW4gb3JnLWUtdGV4aW5mby12ZXJiYXRpbSAodmVyYmF0 aW0gY29udGVudHMgaW5mbykKICAiVHJhbnNjb2RlIGEgVkVSQkFUSU0gb2JqZWN0IGZyb20gT3Jn IHRvIFRleGluZm8uCkNPTlRFTlRTIGlzIG5pbC4gIElORk8gaXMgYSBwbGlzdCB1c2VkIGFzIGEg Y29tbXVuaWNhdGlvbgpjaGFubmVsLiIKICAob3JnLWUtdGV4aW5mby0tdGV4dC1tYXJrdXAgKG9y Zy1lbGVtZW50LXByb3BlcnR5IDp2YWx1ZSB2ZXJiYXRpbSkgJ3ZlcmJhdGltKSkKCgo7Ozs7IFZl cnNlIEJsb2NrCgooZGVmdW4gb3JnLWUtdGV4aW5mby12ZXJzZS1ibG9jayAodmVyc2UtYmxvY2sg Y29udGVudHMgaW5mbykKICAiVHJhbnNjb2RlIGEgVkVSU0UtQkxPQ0sgZWxlbWVudCBmcm9tIE9y ZyB0byBUZXhpbmZvLgpDT05URU5UUyBpcyB2ZXJzZSBibG9jayBjb250ZW50cy4gSU5GTyBpcyBh IHBsaXN0IGhvbGRpbmcKY29udGV4dHVhbCBpbmZvcm1hdGlvbi4iCiAgOzsgSW4gYSB2ZXJzZSBl bnZpcm9ubWVudCwgYWRkIGEgbGluZSBicmVhayB0byBlYWNoIG5ld2xpbmUKICA7OyBjaGFyYWN0 ZXIgYW5kIGNoYW5nZSBlYWNoIHdoaXRlIHNwYWNlIGF0IGJlZ2lubmluZyBvZiBhIGxpbmUKICA7 OyBpbnRvIGEgc3BhY2Ugb2YgMSBlbS4gIEFsc28gY2hhbmdlIGVhY2ggYmxhbmsgbGluZSB3aXRo CiAgOzsgYSB2ZXJ0aWNhbCBzcGFjZSBvZiAxIGVtLgogIChwcm9nbgogICAgKHNldHEgY29udGVu dHMgKHJlcGxhY2UtcmVnZXhwLWluLXN0cmluZwoJCSAgICAiXiAqXFxcXFxcXFwkIiAiXFxcXHZz cGFjZSp7MWVtfSIKCQkgICAgKHJlcGxhY2UtcmVnZXhwLWluLXN0cmluZwoJCSAgICAgIlxcKFxc XFxcXFxcXFwpP1sgXHRdKlxuIiAiIFxcXFxcXFxcXG4iIGNvbnRlbnRzKSkpCiAgICAod2hpbGUg KHN0cmluZy1tYXRjaCAiXlsgXHRdKyIgY29udGVudHMpCiAgICAgIChsZXQgKChuZXctc3RyIChm b3JtYXQgIlxcaHNwYWNlKnslZGVtfSIKCQkJICAgICAobGVuZ3RoIChtYXRjaC1zdHJpbmcgMCBj b250ZW50cykpKSkpCgkoc2V0cSBjb250ZW50cyAocmVwbGFjZS1tYXRjaCBuZXctc3RyIG5pbCB0 IGNvbnRlbnRzKSkpKQogICAgKGZvcm1hdCAiXFxiZWdpbnt2ZXJzZX1cbiVzXFxlbmR7dmVyc2V9 IiBjb250ZW50cykpKQoKCgwKOzs7IEludGVyYWN0aXZlIGZ1bmN0aW9ucwoKKGRlZnVuIG9yZy1l LXRleGluZm8tZXhwb3J0LXRvLXRleGluZm8KICAoJm9wdGlvbmFsIHN1YnRyZWVwIHZpc2libGUt b25seSBib2R5LW9ubHkgZXh0LXBsaXN0IHB1Yi1kaXIpCiAgIkV4cG9ydCBjdXJyZW50IGJ1ZmZl ciB0byBhIFRleGluZm8gZmlsZS4KCklmIG5hcnJvd2luZyBpcyBhY3RpdmUgaW4gdGhlIGN1cnJl bnQgYnVmZmVyLCBvbmx5IGV4cG9ydCBpdHMKbmFycm93ZWQgcGFydC4KCklmIGEgcmVnaW9uIGlz IGFjdGl2ZSwgZXhwb3J0IHRoYXQgcmVnaW9uLgoKV2hlbiBvcHRpb25hbCBhcmd1bWVudCBTVUJU UkVFUCBpcyBub24tbmlsLCBleHBvcnQgdGhlIHN1Yi10cmVlCmF0IHBvaW50LCBleHRyYWN0aW5n IGluZm9ybWF0aW9uIGZyb20gdGhlIGhlYWRsaW5lIHByb3BlcnRpZXMKZmlyc3QuCgpXaGVuIG9w dGlvbmFsIGFyZ3VtZW50IFZJU0lCTEUtT05MWSBpcyBub24tbmlsLCBkb24ndCBleHBvcnQKY29u dGVudHMgb2YgaGlkZGVuIGVsZW1lbnRzLgoKV2hlbiBvcHRpb25hbCBhcmd1bWVudCBCT0RZLU9O TFkgaXMgbm9uLW5pbCwgb25seSB3cml0ZSBjb2RlCmJldHdlZW4gXCJcXGJlZ2lue2RvY3VtZW50 fVwiIGFuZCBcIlxcZW5ke2RvY3VtZW50fVwiLgoKRVhULVBMSVNULCB3aGVuIHByb3ZpZGVkLCBp cyBhIHByb3BlcnR5IGxpc3Qgd2l0aCBleHRlcm5hbApwYXJhbWV0ZXJzIG92ZXJyaWRpbmcgT3Jn IGRlZmF1bHQgc2V0dGluZ3MsIGJ1dCBzdGlsbCBpbmZlcmlvciB0bwpmaWxlLWxvY2FsIHNldHRp bmdzLgoKV2hlbiBvcHRpb25hbCBhcmd1bWVudCBQVUItRElSIGlzIHNldCwgdXNlIGl0IGFzIHRo ZSBwdWJsaXNoaW5nCmRpcmVjdG9yeS4KClJldHVybiBvdXRwdXQgZmlsZSdzIG5hbWUuIgogIChp bnRlcmFjdGl2ZSkKICAobGV0ICgob3V0ZmlsZSAob3JnLWV4cG9ydC1vdXRwdXQtZmlsZS1uYW1l ICIudGV4aSIgc3VidHJlZXAgcHViLWRpcikpKQogICAgKG9yZy1leHBvcnQtdG8tZmlsZQogICAg ICdlLXRleGluZm8gb3V0ZmlsZSBzdWJ0cmVlcCB2aXNpYmxlLW9ubHkgYm9keS1vbmx5IGV4dC1w bGlzdCkpKQoKKGRlZnVuIG9yZy1lLXRleGluZm8tZXhwb3J0LXRvLWluZm8KICAoJm9wdGlvbmFs IHN1YnRyZWVwIHZpc2libGUtb25seSBib2R5LW9ubHkgZXh0LXBsaXN0IHB1Yi1kaXIpCiAgIkV4 cG9ydCBjdXJyZW50IGJ1ZmZlciB0byBUZXhpbmZvIHRoZW4gcHJvY2VzcyB0aHJvdWdoIHRvIElO Rk8uCgpJZiBuYXJyb3dpbmcgaXMgYWN0aXZlIGluIHRoZSBjdXJyZW50IGJ1ZmZlciwgb25seSBl eHBvcnQgaXRzCm5hcnJvd2VkIHBhcnQuCgpJZiBhIHJlZ2lvbiBpcyBhY3RpdmUsIGV4cG9ydCB0 aGF0IHJlZ2lvbi4KCldoZW4gb3B0aW9uYWwgYXJndW1lbnQgU1VCVFJFRVAgaXMgbm9uLW5pbCwg ZXhwb3J0IHRoZSBzdWItdHJlZQphdCBwb2ludCwgZXh0cmFjdGluZyBpbmZvcm1hdGlvbiBmcm9t IHRoZSBoZWFkbGluZSBwcm9wZXJ0aWVzCmZpcnN0LgoKV2hlbiBvcHRpb25hbCBhcmd1bWVudCBW SVNJQkxFLU9OTFkgaXMgbm9uLW5pbCwgZG9uJ3QgZXhwb3J0CmNvbnRlbnRzIG9mIGhpZGRlbiBl bGVtZW50cy4KCldoZW4gb3B0aW9uYWwgYXJndW1lbnQgQk9EWS1PTkxZIGlzIG5vbi1uaWwsIG9u bHkgd3JpdGUgY29kZQpiZXR3ZWVuIFwiXFxiZWdpbntkb2N1bWVudH1cIiBhbmQgXCJcXGVuZHtk b2N1bWVudH1cIi4KCkVYVC1QTElTVCwgd2hlbiBwcm92aWRlZCwgaXMgYSBwcm9wZXJ0eSBsaXN0 IHdpdGggZXh0ZXJuYWwKcGFyYW1ldGVycyBvdmVycmlkaW5nIE9yZyBkZWZhdWx0IHNldHRpbmdz LCBidXQgc3RpbGwgaW5mZXJpb3IgdG8KZmlsZS1sb2NhbCBzZXR0aW5ncy4KCldoZW4gb3B0aW9u YWwgYXJndW1lbnQgUFVCLURJUiBpcyBzZXQsIHVzZSBpdCBhcyB0aGUgcHVibGlzaGluZwpkaXJl Y3RvcnkuCgpSZXR1cm4gSU5GTyBmaWxlJ3MgbmFtZS4iCiAgKGludGVyYWN0aXZlKQogIChvcmct ZS10ZXhpbmZvLWNvbXBpbGUKICAgKG9yZy1lLXRleGluZm8tZXhwb3J0LXRvLXRleGluZm8KICAg IHN1YnRyZWVwIHZpc2libGUtb25seSBib2R5LW9ubHkgZXh0LXBsaXN0IHB1Yi1kaXIpKSkKCihk ZWZ1biBvcmctZS10ZXhpbmZvLWNvbXBpbGUgKHRleGlmaWxlKQogICJDb21waWxlIGEgdGV4aW5m byBmaWxlLgoKVEVYSUZJTEUgaXMgdGhlIG5hbWUgb2YgdGhlIGZpbGUgYmVpbmcgY29tcGlsZWQu ICBQcm9jZXNzaW5nIGlzCmRvbmUgdGhyb3VnaCB0aGUgY29tbWFuZCBzcGVjaWZpZWQgaW4gYG9y Zy1lLXRleGluZm8taW5mby1wcm9jZXNzJy4KClJldHVybiBJTkZPIGZpbGUgbmFtZSBvciBhbiBl cnJvciBpZiBpdCBjb3VsZG4ndCBiZSBwcm9kdWNlZC4iCiAgKGxldCogKCh3Y29uZmlnIChjdXJy ZW50LXdpbmRvdy1jb25maWd1cmF0aW9uKSkKCSAodGV4aWZpbGUgKGZpbGUtdHJ1ZW5hbWUgdGV4 aWZpbGUpKQoJIChiYXNlIChmaWxlLW5hbWUtc2Fucy1leHRlbnNpb24gdGV4aWZpbGUpKQoJIGVy cm9ycykKICAgIChtZXNzYWdlIChmb3JtYXQgIlByb2Nlc3NpbmcgVGV4aW5mbyBmaWxlICVzIC4u LiIgdGV4aWZpbGUpKQogICAgKHVud2luZC1wcm90ZWN0CgkocHJvZ24KCSAgKGNvbmQKCSAgIDs7 IEEgZnVuY3Rpb24gaXMgcHJvdmlkZWQ6IEFwcGx5IGl0LgoJICAgKChmdW5jdGlvbnAgb3JnLWUt dGV4aW5mby1pbmZvLXByb2Nlc3MpCgkgICAgKGZ1bmNhbGwgb3JnLWUtdGV4aW5mby1pbmZvLXBy b2Nlc3MgKHNoZWxsLXF1b3RlLWFyZ3VtZW50IHRleGlmaWxlKSkpCgkgICA7OyBBIGxpc3QgaXMg cHJvdmlkZWQ6IFJlcGxhY2UgJWIsICVmIGFuZCAlbyB3aXRoIGFwcHJvcHJpYXRlCgkgICA7OyB2 YWx1ZXMgaW4gZWFjaCBjb21tYW5kIGJlZm9yZSBhcHBseWluZyBpdC4gIE91dHB1dCBpcwoJICAg OzsgcmVkaXJlY3RlZCB0byAiKk9yZyBJTkZPIFRleGluZm8gT3V0cHV0KiIgYnVmZmVyLgoJICAg KChjb25zcCBvcmctZS10ZXhpbmZvLWluZm8tcHJvY2VzcykKCSAgICAobGV0KiAoKG91dC1kaXIg KG9yIChmaWxlLW5hbWUtZGlyZWN0b3J5IHRleGlmaWxlKSAiLi8iKSkKCQkgICAob3V0YnVmIChn ZXQtYnVmZmVyLWNyZWF0ZSAiKk9yZyBJbmZvIFRleGluZm8gT3V0cHV0KiIpKSkKCSAgICAgICht YXBjCgkgICAgICAgKGxhbWJkYSAoY29tbWFuZCkKCQkgKHNoZWxsLWNvbW1hbmQKCQkgIChyZXBs YWNlLXJlZ2V4cC1pbi1zdHJpbmcKCQkgICAiJWIiIChzaGVsbC1xdW90ZS1hcmd1bWVudCBiYXNl KQoJCSAgIChyZXBsYWNlLXJlZ2V4cC1pbi1zdHJpbmcKCQkgICAgIiVmIiAoc2hlbGwtcXVvdGUt YXJndW1lbnQgdGV4aWZpbGUpCgkJICAgIChyZXBsYWNlLXJlZ2V4cC1pbi1zdHJpbmcKCQkgICAg ICIlbyIgKHNoZWxsLXF1b3RlLWFyZ3VtZW50IG91dC1kaXIpIGNvbW1hbmQgdCB0KSB0IHQpIHQg dCkKCQkgIG91dGJ1ZikpCgkgICAgICAgb3JnLWUtdGV4aW5mby1pbmZvLXByb2Nlc3MpCgkgICAg ICA7OyBDb2xsZWN0IHN0YW5kYXJkIGVycm9ycyBmcm9tIG91dHB1dCBidWZmZXIuCgkgICAgICAo c2V0cSBlcnJvcnMgKG9yZy1lLXRleGluZm8tY29sbGVjdC1lcnJvcnMgb3V0YnVmKSkpKQoJICAg KHQgKGVycm9yICJObyB2YWxpZCBjb21tYW5kIHRvIHByb2Nlc3MgdG8gSW5mbyIpKSkKCSAgKGxl dCAoKGluZm9maWxlIChjb25jYXQgYmFzZSAiLmluZm8iKSkpCgkgICAgOzsgQ2hlY2sgZm9yIHBy b2Nlc3MgZmFpbHVyZS4gIFByb3ZpZGUgY29sbGVjdGVkIGVycm9ycyBpZgoJICAgIDs7IHBvc3Np YmxlLgoJICAgIChpZiAobm90IChmaWxlLWV4aXN0cy1wIGluZm9maWxlKSkKCQkoZXJyb3IgKGNv bmNhdCAoZm9ybWF0ICJJTkZPIGZpbGUgJXMgd2Fzbid0IHByb2R1Y2VkIiBpbmZvZmlsZSkKCQkJ ICAgICAgICh3aGVuIGVycm9ycyAoY29uY2F0ICI6ICIgZXJyb3JzKSkpKQoJICAgICAgOzsgRWxz ZSByZW1vdmUgbG9nIGZpbGVzLCB3aGVuIHNwZWNpZmllZCwgYW5kIHNpZ25hbCBlbmQgb2YKCSAg ICAgIDs7IHByb2Nlc3MgdG8gdXNlciwgYWxvbmcgd2l0aCBhbnkgZXJyb3IgZW5jb3VudGVyZWQu CgkgICAgICAobWVzc2FnZSAoY29uY2F0ICJQcm9jZXNzIGNvbXBsZXRlZCIKCQkJICAgICAgIChp ZiAobm90IGVycm9ycykgIi4iCgkJCQkgKGNvbmNhdCAiIHdpdGggZXJyb3JzOiAiIGVycm9ycykp KSkpCgkgICAgOzsgUmV0dXJuIG91dHB1dCBmaWxlIG5hbWUuCgkgICAgaW5mb2ZpbGUpKQogICAg ICAoc2V0LXdpbmRvdy1jb25maWd1cmF0aW9uIHdjb25maWcpKSkpCgooZGVmdW4gb3JnLWUtdGV4 aW5mby1jb2xsZWN0LWVycm9ycyAoYnVmZmVyKQogICJDb2xsZWN0IHNvbWUga2luZCBvZiBlcnJv cnMgZnJvbSBcInBkZmxhdGV4XCIgY29tbWFuZCBvdXRwdXQuCgpCVUZGRVIgaXMgdGhlIGJ1ZmZl ciBjb250YWluaW5nIG91dHB1dC4KClJldHVybiBjb2xsZWN0ZWQgZXJyb3IgdHlwZXMgYXMgYSBz dHJpbmcsIG9yIG5pbCBpZiB0aGVyZSB3YXMKbm9uZS4iCiAgKHdpdGgtY3VycmVudC1idWZmZXIg YnVmZmVyCiAgICAoc2F2ZS1leGN1cnNpb24KICAgICAgKGdvdG8tY2hhciAocG9pbnQtbWF4KSkK ICAgICAgOzsgRmluZCBmaW5hbCAibWFrZWluZm8iIHJ1bi4KICAgICAgKHdoZW4gKHJlLXNlYXJj aC1iYWNrd2FyZCAiXm1ha2VpbmZvIChHTlUgdGV4aW5mbykiIG5pbCB0KQoJKGxldCAoKGNhc2Ut Zm9sZC1zZWFyY2ggdCkKCSAgICAgIChlcnJvcnMgIiIpKQoJICAod2hlbiAoc2F2ZS1leGN1cnNp b24KCQkgIChyZS1zZWFyY2gtZm9yd2FyZCAicGVyaGFwcyBpbmNvcnJlY3Qgc2VjdGlvbmluZz8i IG5pbCB0KSkKCSAgICAoc2V0cSBlcnJvcnMgKGNvbmNhdCBlcnJvcnMgIiBbaW5jb3JyZWN0IHNl Y3Rpb25ubmddIikpKQoJICAod2hlbiAoc2F2ZS1leGN1cnNpb24KCQkgIChyZS1zZWFyY2gtZm9y d2FyZCAibWlzc2luZyBjbG9zZSBicmFjZSIgbmlsIHQpKQoJICAgIChzZXRxIGVycm9ycyAoY29u Y2F0IGVycm9ycyAiIFtzeW50YXggZXJyb3JdIikpKQoJICAod2hlbiAoc2F2ZS1leGN1cnNpb24K CQkgIChyZS1zZWFyY2gtZm9yd2FyZCAiVW5rbm93biBjb21tYW5kIiBuaWwgdCkpCgkgICAgKHNl dHEgZXJyb3JzIChjb25jYXQgZXJyb3JzICIgW3VuZGVmaW5lZCBAY29tbWFuZF0iKSkpCgkgICh3 aGVuIChzYXZlLWV4Y3Vyc2lvbgoJCSAgKHJlLXNlYXJjaC1mb3J3YXJkICJObyBtYXRjaGluZyBA ZW5kIiBuaWwgdCkpCgkgICAgKHNldHEgZXJyb3JzIChjb25jYXQgZXJyb3JzICIgW2Jsb2NrIGlu Y29tcGxldGVdIikpKQoJICAod2hlbiAoc2F2ZS1leGN1cnNpb24KCQkgIChyZS1zZWFyY2gtZm9y d2FyZCAicmVxdWlyZXMgYSBzZWN0aW9uaW5nIiBuaWwgdCkpCgkgICAgKHNldHEgZXJyb3JzIChj b25jYXQgZXJyb3JzICIgW2ludmFsaWQgc2VjdGlvbiBjb21tYW5kXSIpKSkKCSAgKHdoZW4gKHNh dmUtZXhjdXJzaW9uCgkJICAocmUtc2VhcmNoLWZvcndhcmQgIlt1bmV4cGVjdGVkXSIgbmlsIHQp KQoJICAgIChzZXRxIGVycm9ycyAoY29uY2F0IGVycm9ycyAiIFt1bmV4cGVjdGVkIGVycm9yXSIp KSkKCSAgKGFuZCAob3JnLXN0cmluZy1udy1wIGVycm9ycykgKG9yZy10cmltIGVycm9ycykpKSkp KSkKCgoocHJvdmlkZSAnb3JnLWUtdGV4aW5mbykKOzs7IG9yZy1lLXRleGluZm8uZWwgZW5kcyBo ZXJlCg== --f46d043c08e25deb2004c6268408 Content-Type: application/octet-stream; name="orgguide.org" Content-Disposition: attachment; filename="orgguide.org" Content-Transfer-Encoding: base64 X-Attachment-Id: f_h5bgpfta2 IytUSVRMRTogVGhlIGNvbXBhY3QgT3JnLU1vZGUgR3VpZGUKIytBVVRIT1I6IENhcnN0ZW4gRG9t aW5pYwoKIyMgQ2hhbmdlIFRPRE8gbGlzdCB0byBhbGxvdyBmb3IgVE9ETyBpbiBoZWFkbGluZQoj K1RPRE86IEZJWE1FKGYpCgojK1RFWElORk9fRklMRU5BTUU6IG9yZ2d1aWRlLmluZm8KCiMgIytU RVhJTkZPX0hFQURFUjogQGluY2x1ZGUgb3JnLXZlcnNpb24uaW5jCiMrVEVYSU5GT19IRUFERVI6 IEBjIFVzZSBwcm9wZXIgcXVvdGUgYW5kIGJhY2t0aWNrIGZvciBjb2RlIHNlY3Rpb25zIGluIFBE RiBvdXRwdXQKIytURVhJTkZPX0hFQURFUjogQGMgQ2YuIFRleGluZm8gbWFudWFsIDE0LjIKIytU RVhJTkZPX0hFQURFUjogQHNldCB0eGljb2RlcXVvdGV1bmRpcmVjdGVkCiMrVEVYSU5GT19IRUFE RVI6IEBzZXQgdHhpY29kZXF1b3RlYmFja3RpY2sKIytURVhJTkZPX0hFQURFUjogQGMgVmVyc2lv biBhbmQgQ29udGFjdCBJbmZvCiMrVEVYSU5GT19IRUFERVI6IEBzZXQgTUFJTlRBSU5FUlNJVEUg QHVyZWZ7aHR0cDovL29yZ21vZGUub3JnLG1haW50YWluZXJzIHdlYnBhZ2V9CiMrVEVYSU5GT19I RUFERVI6IEBzZXQgTUFJTlRBSU5FUiBDYXJzdGVuIERvbWluaWsKIytURVhJTkZPX0hFQURFUjog QHNldCBNQUlOVEFJTkVSRU1BSUwgQGVtYWlse2NhcnN0ZW4gYXQgb3JnbW9kZSBkb3Qgb3JnfQoj K1RFWElORk9fSEVBREVSOiBAc2V0IE1BSU5UQUlORVJDT05UQUNUIEB1cmVme21haWx0bzpjYXJz dGVuIGF0IG9yZ21vZGUgZG90IG9yZyxjb250YWN0IHRoZSBtYWludGFpbmVyfQoKIytURVhJTkZP X0RJUl9DQVRFR09SWTogRW1hY3MKIytURVhJTkZPX0RJUl9USVRMRTogT3JnIE1vZGUgR3VpZGU6 IChvcmdndWlkZSkKIytURVhJTkZPX0RJUl9ERVNDOiBBYmJyZXZpYXRlZCBPcmctbW9kZSBNYW51 YWwKCgoqIENvcHlpbmcKOlBST1BFUlRJRVM6Cjpjb3B5aW5nOiB0CjpFTkQ6CgpDb3B5cmlnaHQg QEBpbmZvOkBjb3B5cmlnaHR7fUBAIDIwMTAtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24K CiMrQkVHSU5fUVVPVEUKUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUg YW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50CnVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZy ZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgphbnkgbGF0ZXIgdmVyc2lv biBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCBubwpJbnZh cmlhbnQgU2VjdGlvbnMsIHdpdGggdGhlIEZyb250LUNvdmVyIHRleHRzIGJlaW5nICJBIEdOVSBN YW51YWwsIgphbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBhcyBpbiAoYSkgYmVsb3cuICBB IGNvcHkgb2YgdGhlIGxpY2Vuc2UKaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQg IkdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZS4iCgooYSkgVGhlIEZTRidzIEJhY2stQ292 ZXIgVGV4dCBpczogIllvdSBoYXZlIHRoZSBmcmVlZG9tIHRvIGNvcHkgYW5kCm1vZGlmeSB0aGlz IEdOVSBtYW51YWwuICBCdXlpbmcgY29waWVzIGZyb20gdGhlIEZTRiBzdXBwb3J0cyBpdCBpbgpk ZXZlbG9waW5nIEdOVSBhbmQgcHJvbW90aW5nIHNvZnR3YXJlIGZyZWVkb20uIgoKVGhpcyBkb2N1 bWVudCBpcyBwYXJ0IG9mIGEgY29sbGVjdGlvbiBkaXN0cmlidXRlZCB1bmRlciB0aGUgR05VIEZy ZWUKRG9jdW1lbnRhdGlvbiBMaWNlbnNlLiAgSWYgeW91IHdhbnQgdG8gZGlzdHJpYnV0ZSB0aGlz IGRvY3VtZW50CnNlcGFyYXRlbHkgZnJvbSB0aGUgY29sbGVjdGlvbiwgeW91IGNhbiBkbyBzbyBi eSBhZGRpbmcgYSBjb3B5IG9mIHRoZQpsaWNlbnNlIHRvIHRoZSBkb2N1bWVudCwgYXMgZGVzY3Jp YmVkIGluIHNlY3Rpb24gNiBvZiB0aGUgbGljZW5zZS4KIytFTkRfUVVPVEUKCiogSW50cm9kdWN0 aW9uCjpQUk9QRVJUSUVTOgo6REVTQ1JJUFRJT046IEdldHRpbmcgc3RhcnRlZAo6RU5EOgoKKiog UHJlZmFjZQo6UFJPUEVSVElFUzoKOkRFU0NSSVBUSU9OOiBXZWxjb21lCjpFTkQ6CgpPcmcgaXMg YSBtb2RlIGZvciBrZWVwaW5nIG5vdGVzLCBtYWludGFpbmluZyBUT0RPIGxpc3RzLCBhbmQgZG9p bmcKcHJvamVjdCBwbGFubmluZyB3aXRoIGEgZmFzdCBhbmQgZWZmZWN0aXZlIHBsYWluLXRleHQg c3lzdGVtLiAgSXQgaXMKYWxzbyBhbiBhdXRob3JpbmcgYW5kIHB1Ymxpc2hpbmcgc3lzdGVtLgoK VGhpcyBkb2N1bWVudCBpcyBhIG11Y2ggY29tcHJlc3NlZCBkZXJpdmF0aXZlIG9mIHRoZSBbW2h0 dHA6Ly9vcmdtb2RlLm9yZy9pbmRleC5odG1sI3NlYy00XzFdW2NvbXByZWhlbnNpdmUKT3JnLW1v ZGUgbWFudWFsXV0uICBJdCBjb250YWlucyBhbGwgYmFzaWMgZmVhdHVyZXMgYW5kIGNvbW1hbmRz LCBhbG9uZwp3aXRoIGltcG9ydGFudCBoaW50cyBmb3IgY3VzdG9taXphdGlvbi4gIEl0IGlzIGlu dGVuZGVkIGZvciBiZWdpbm5lcnMKd2hvIHdvdWxkIHNoeSBiYWNrIGZyb20gYSAyMDAgcGFnZSBt YW51YWwgYmVjYXVzZSBvZiBzaGVlciBzaXplLgoKKiogSW5zdGFsbGF0aW9uCjpQUk9QRVJUSUVT Ogo6REVTQ1JJUFRJT046IEhvdyB0byBpbnN0YWxsIGEgZG93bmxvYWRlZCB2ZXJzaW9uIG9mIE9y Zwo6RU5EOgoKKkltcG9ydGFudCo6IElmIHlvdSBhcmUgdXNpbmcgYSB2ZXJzaW9uIG9mIE9yZyB0 aGF0IGlzIHBhcnQgb2YgdGhlCkVtYWNzIGRpc3RyaWJ1dGlvbiBvciBhbiBYRW1hY3MgcGFja2Fn ZSwgcGxlYXNlIHNraXAgdGhpcyBzZWN0aW9uIGFuZApnbyBkaXJlY3RseSB0byBbW0FjdGl2YXRp b25dXS4KCklmIHlvdSBoYXZlIGRvd25sb2FkZWQgT3JnIGZyb20gdGhlIFdlYiwgZWl0aGVyIGFz IGEgZGlzdHJpYnV0aW9uCkBAaW5mbzpAZmlsZXsuemlwfUBAIG9yIEBAaW5mbzpAZmlsZXsudGFy fUBAIGZpbGUsIG9yIGFzIGEgR2l0IGFyY2hpdmUsCml0IGlzIGJlc3QgdG8gcnVuIGl0IGRpcmVj dGx5IGZyb20gdGhlIGRpc3RyaWJ1dGlvbiBkaXJlY3RvcnkuICBZb3UKbmVlZCB0byBhZGQgdGhl IEBAaW5mbzpAZmlsZXtsaXNwfUBAIHN1YmRpcmVjdG9yaWVzIHRvIHRoZSBFbWFjcyBsb2FkCnBh dGguICBUbyBkbyB0aGlzLCBhZGQgdGhlIGZvbGxvd2luZyBsaW5lIHRvIEBAaW5mbzpAZmlsZXsu ZW1hY3N9QEA6CgojK2JlZ2luX3NyYyBlbWFjcy1saXNwCiAgKHNldHEgbG9hZC1wYXRoIChjb25z ICJ+L3BhdGgvdG8vb3JnZGlyL2xpc3AiIGxvYWQtcGF0aCkpCiAgKHNldHEgbG9hZC1wYXRoIChj b25zICJ+L3BhdGgvdG8vb3JnZGlyL2NvbnRyaWIvbGlzcCIgbG9hZC1wYXRoKSkKIytlbmRfc3Jj CgpAQGluZm86QG5vaW5kZW50QEAgRm9yIHNwZWVkIHlvdSBzaG91bGQgYnl0ZS1jb21waWxlIHRo ZSBMaXNwIGZpbGVzCndpdGggdGhlIHNoZWxsIGNvbW1hbmQ6CgojK2JlZ2luX3NyYyBzaGVsbApt YWtlCiMrZW5kX3NyYwoKVGhlbiBhZGQgdGhlIGZvbGxvd2luZyBsaW5lIHRvIEBAaW5mbzpAZmls ZXsuZW1hY3N9QEAuICBJdCBpcyBuZWVkZWQgc28gdGhhdApFbWFjcyBjYW4gYXV0b2xvYWQgZnVu Y3Rpb25zIHRoYXQgYXJlIGxvY2F0ZWQgaW4gZmlsZXMgbm90IGltbWVkaWF0ZWx5CmxvYWRlZCB3 aGVuIE9yZy1tb2RlIHN0YXJ0cy4KIytiZWdpbl9zcmMgZW1hY3MtbGlzcAoocmVxdWlyZSAnb3Jn LWluc3RhbGwpCiMrZW5kX3NyYwoKKiogQWN0aXZhdGlvbgo6UFJPUEVSVElFUzoKOkRFU0NSSVBU SU9OOiBIb3cgdG8gYWN0aXZhdGUgT3JnIGZvciBjZXJ0YWluIGJ1ZmZlcnMKOkVORDoKCkFkZCB0 aGUgZm9sbG93aW5nIGxpbmVzIHRvIHlvdXIgQEBpbmZvOkBmaWxley5lbWFjc31AQCBmaWxlLiAg VGhlIGxhc3QKdGhyZWUgbGluZXMgZGVmaW5lIC9nbG9iYWwvIGtleXMgZm9yIHNvbWUgY29tbWFu ZHMgLS0tIHBsZWFzZSBjaG9vc2UKc3VpdGFibGUga2V5cyB5b3Vyc2VsZi4KCiMrYmVnaW5fc3Jj IGVtYWNzLWxpc3AKOzsgVGhlIGZvbGxvd2luZyBsaW5lcyBhcmUgYWx3YXlzIG5lZWRlZC4gIENo b29zZSB5b3VyIG93biBrZXlzLgooYWRkLXRvLWxpc3QgJ2F1dG8tbW9kZS1hbGlzdCAnKCJcXC5v cmdcXCciIC4gb3JnLW1vZGUpKQooYWRkLWhvb2sgJ29yZy1tb2RlLWhvb2sgJ3R1cm4tb24tZm9u dC1sb2NrKSA7IG5vdCBuZWVkZWQgd2hlbiBnbG9iYWwtZm9udC1sb2NrLW1vZGUgaXMgb24KKGds b2JhbC1zZXQta2V5ICJcQy1jbCIgJ29yZy1zdG9yZS1saW5rKQooZ2xvYmFsLXNldC1rZXkgIlxD LWNhIiAnb3JnLWFnZW5kYSkKKGdsb2JhbC1zZXQta2V5ICJcQy1jYiIgJ29yZy1pc3dpdGNoYikK IytlbmRfc3JjCgpXaXRoIHRoaXMgc2V0dXAsIGFsbCBmaWxlcyB3aXRoIGV4dGVuc2lvbiBAQGlu Zm86QHNhbXB7Lm9yZ31AQCB3aWxsIGJlCnB1dCBpbnRvIE9yZyBtb2RlLgoqKiBGZWVkYmFjawo6 UFJPUEVSVElFUzoKOkRFU0NSSVBUSU9OOiBCdWcgcmVwb3J0cywgaWRlYXMsIHBhdGNoZXMgZXRj Lgo6RU5EOgoKSWYgeW91IGZpbmQgcHJvYmxlbXMgd2l0aCBPcmcsIG9yIGlmIHlvdSBoYXZlIHF1 ZXN0aW9ucywgcmVtYXJrcywgb3IKaWRlYXMgYWJvdXQgaXQsIHBsZWFzZSBtYWlsIHRvIHRoZSBP cmcgbWFpbGluZyBsaXN0CltbbWFpbHRvOmVtYWNzLW9yZ21vZGVAZ251Lm9yZ11dLiAgRm9yIGlu Zm9ybWF0aW9uIG9uIGhvdyB0byBzdWJtaXQgYnVnIHJlcG9ydHMsCnNlZSB0aGUgbWFpbiBtYW51 YWwuCiogRG9jdW1lbnQgU3RydWN0dXJlCjpQUk9QRVJUSUVTOgo6REVTQ1JJUFRJT046IEEgdHJl ZSB3b3JrcyBsaWtlIHlvdXIgYnJhaW4KOkVORDoKCk9yZyBpcyBiYXNlZCBvbiBPdXRsaW5lIG1v ZGUgYW5kIHByb3ZpZGVzIGZsZXhpYmxlIGNvbW1hbmRzIHRvCmVkaXQgdGhlIHN0cnVjdHVyZSBv ZiB0aGUgZG9jdW1lbnQuCgoqKiBPdXRsaW5lcwo6UFJPUEVSVElFUzoKOkRFU0NSSVBUSU9OOiBP cmcgaXMgYmFzZWQgb24gT3V0bGluZSBtb2RlCjpFTkQ6CgpPcmcgaXMgaW1wbGVtZW50ZWQgb24g dG9wIG9mIE91dGxpbmUgbW9kZS4gIE91dGxpbmVzIGFsbG93IGEgZG9jdW1lbnQKdG8gYmUgb3Jn YW5pemVkIGluIGEgaGllcmFyY2hpY2FsIHN0cnVjdHVyZSwgd2hpY2ggKGF0IGxlYXN0IGZvciBt ZSkKaXMgdGhlIGJlc3QgcmVwcmVzZW50YXRpb24gb2Ygbm90ZXMgYW5kIHRob3VnaHRzLiAgQW4g b3ZlcnZpZXcgb2YgdGhpcwpzdHJ1Y3R1cmUgaXMgYWNoaWV2ZWQgYnkgZm9sZGluZyAoaGlkaW5n KSBsYXJnZSBwYXJ0cyBvZiB0aGUgZG9jdW1lbnQKdG8gc2hvdyBvbmx5IHRoZSBnZW5lcmFsIGRv Y3VtZW50IHN0cnVjdHVyZSBhbmQgdGhlIHBhcnRzIGN1cnJlbnRseQpiZWluZyB3b3JrZWQgb24u ICBPcmcgZ3JlYXRseSBzaW1wbGlmaWVzIHRoZSB1c2Ugb2Ygb3V0bGluZXMgYnkKY29tcHJlc3Np bmcgdGhlIGVudGlyZSBzaG93L2hpZGUgZnVuY3Rpb25hbGl0eSBpbnRvIGEgc2luZ2xlIGNvbW1h bmQsCkBAaW5mbzpAY29tbWFuZHtvcmctY3ljbGV9QEAsIHdoaWNoIGlzIGJvdW5kIHRvIHRoZSBA QGluZm86QGtleXtUQUJ9QEAKa2V5LgoKKiogSGVhZGxpbmVzCjpQUk9QRVJUSUVTOgo6REVTQ1JJ UFRJT046IEhvdyB0byB0eXBlc2V0IE9yZyB0cmVlIGhlYWRsaW5lcwo6RU5EOgoKSGVhZGxpbmVz IGRlZmluZSB0aGUgc3RydWN0dXJlIG9mIGFuIG91dGxpbmUgdHJlZS4gIFRoZSBoZWFkbGluZXMg aW4KT3JnIHN0YXJ0IHdpdGggb25lIG9yIG1vcmUgc3RhcnMsIG9uIHRoZSBsZWZ0IG1hcmdpbltm bjoxXS4gIEZvcgpleGFtcGxlOgoKIytiZWdpbl9zcmMgb3JnCiAgLCogVG9wIGxldmVsIGhlYWRs aW5lCiAgLCoqIFNlY29uZCBsZXZlbAogICwqKiogM3JkIGxldmVsCiAgLCAgICBzb21lIHRleHQK ICAsKioqIDNyZCBsZXZlbAogICwgICAgbW9yZSB0ZXh0CiAgCiAgLCogQW5vdGhlciB0b3AgbGV2 ZWwgaGVhZGxpbmUKIytlbmRfc3JjCgpAQGluZm86QG5vaW5kZW50QEAgU29tZSBwZW9wbGUgZmlu ZCB0aGUgbWFueSBzdGFycyB0b28gbm9pc3kgYW5kIHdvdWxkCnByZWZlciBhbiBvdXRsaW5lIHRo YXQgaGFzIHdoaXRlc3BhY2UgZm9sbG93ZWQgYnkgYSBzaW5nbGUgc3RhciBhcwpoZWFkbGluZSBz dGFydGVycy4gIFtbQ2xlYW4gdmlld11dLCBkZXNjcmliZXMgYSBzZXR1cCB0byByZWFsaXplIHRo aXMuCgoqKiBWaXNpYmlsaXR5IGN5Y2xpbmcKOlBST1BFUlRJRVM6CjpERVNDUklQVElPTjogU2hv dyBhbmQgaGlkZSwgbXVjaCBzaW1wbGlmaWVkCjpFTkQ6CgpPdXRsaW5lcyBtYWtlIGl0IHBvc3Np YmxlIHRvIGhpZGUgcGFydHMgb2YgdGhlIHRleHQgaW4gdGhlIGJ1ZmZlci4KT3JnIHVzZXMganVz dCB0d28gY29tbWFuZHMsIGJvdW5kIHRvIEBAaW5mbzpAa2V5e1RBQn1AQCBhbmQKQEBpbmZvOkBr YmR7Uy1Aa2V5e1RBQn1AQH0gdG8gY2hhbmdlIHRoZSB2aXNpYmlsaXR5IGluIHRoZSBidWZmZXIu CgoKLSBAQGluZm86QGtleXtUQUJ9QEAgOjogL1N1YnRyZWUgY3ljbGluZy86IFJvdGF0ZSBjdXJy ZW50IHN1YnRyZWUgYW1vbmcgdGhlIHN0YXRlcwoKICAgICAjK2JlZ2luX2V4YW1wbGUKICAgICAg ICwtPiBGT0xERUQgLT4gQ0hJTERSRU4gLT4gU1VCVFJFRSAtLS4KICAgICAgICctLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLScKICAgICAjK2VuZF9leGFtcGxlCgogICAgIFdoZW4g Y2FsbGVkIHdpdGggYSBwcmVmaXggYXJndW1lbnQgKEBAaW5mbzpAa2Jke0MtdSBAa2V5e1RBQn19 QEApIG9yIHdpdGgKICAgICB0aGUgc2hpZnQga2V5LCBnbG9iYWwgY3ljbGluZyBpcyBpbnZva2Vk LgoKLSBTLUBAaW5mbzpAa2V5e1RBQn1AQCBAQGluZm86QHJ7YW5kfUBAIEMtdSBAQGluZm86QGtl eXtUQUJ9QEAgOjogL0dsb2JhbAogICAgIGN5Y2xpbmcvOiBSb3RhdGUgdGhlIGVudGlyZSBidWZm ZXIgYW1vbmcgdGhlIHN0YXRlcwoKICAgICAjK2JlZ2luX2V4YW1wbGUKICAgICAgICwtPiBPVkVS VklFVyAtPiBDT05URU5UUyAtPiBTSE9XIEFMTCAtLS4KICAgICAgICctLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLScKICAgICAjK2VuZF9leGFtcGxlCgotIEMtdSBDLXUgQy11 IEBAaW5mbzpAa2V5e1RBQn1AQCA6OiBTaG93IGFsbCwgaW5jbHVkaW5nIGRyYXdlcnMuCgpXaGVu IEVtYWNzIGZpcnN0IHZpc2l0cyBhbiBPcmcgZmlsZSwgdGhlIGdsb2JhbCBzdGF0ZSBpcyBzZXQg dG8KT1ZFUlZJRVcsIGkuZS46IG9ubHkgdGhlIHRvcCBsZXZlbCBoZWFkbGluZXMgYXJlIHZpc2li bGUuICBUaGlzIGNhbiBiZQpjb25maWd1cmVkIHRocm91Z2ggdGhlIHZhcmlhYmxlIH5vcmctc3Rh cnR1cC1mb2xkZWR+LCBvciBvbiBhCnBlci1maWxlIGJhc2lzIGJ5IGFkZGluZyBhIHN0YXJ0dXAg a2V5d29yZCB+b3ZlcnZpZXd+LCB+Y29udGVudH4sCn5zaG93YWxsfiwgbGlrZSB0aGlzOgoKIyti ZWdpbl9zcmMgb3JnCiAgLCMrU1RBUlRVUDogY29udGVudAojK2VuZF9zcmMKCioqIE1vdGlvbgo6 UFJPUEVSVElFUzoKOkRFU0NSSVBUSU9OOiBKdW1waW5nIHRvIG90aGVyIGhlYWRsaW5lcwo6RU5E OgpUaGUgZm9sbG93aW5nIGNvbW1hbmRzIGp1bXAgdG8gb3RoZXIgaGVhZGxpbmVzIGluIHRoZSBi dWZmZXIuCgotIEMtYyBDLW4gOjogTmV4dCBoZWFkaW5nLgotIEMtYyBDLXAgOjogUHJldmlvdXMg aGVhZGluZy4KLSBDLWMgQy1mIDo6IE5leHQgaGVhZGluZyBzYW1lIGxldmVsLgotIEMtYyBDLWIg OjogUHJldmlvdXMgaGVhZGluZyBzYW1lIGxldmVsLgotIEMtYyBDLXUgOjogQmFja3dhcmQgdG8g aGlnaGVyIGxldmVsIGhlYWRpbmcuCgoqKiBTdHJ1Y3R1cmUgZWRpdGluZwo6UFJPUEVSVElFUzoK OkRFU0NSSVBUSU9OOiBDaGFuZ2luZyBzZXF1ZW5jZSBhbmQgbGV2ZWwgb2YgaGVhZGxpbmVzCjpF TkQ6CgotIE0tQEBpbmZvOkBrZXl7UkVUfUBACkluc2VydCBuZXcgaGVhZGluZyB3aXRoIHNhbWUg bGV2ZWwgYXMgY3VycmVudC4gIElmIHRoZSBjdXJzb3IgaXMgaW4gYSBwbGFpbgpsaXN0IGl0ZW0s IGEgbmV3IGl0ZW0gaXMgY3JlYXRlZCAoW1tQbGFpbiBsaXN0c11dKS4gIFdoZW4gdGhpcyBjb21t YW5kIGlzCnVzZWQgaW4gdGhlIG1pZGRsZSBvZiBhIGxpbmUsIHRoZSBsaW5lIGlzIHNwbGl0IGFu ZCB0aGUgcmVzdCBvZiB0aGUgbGluZQpiZWNvbWVzIHRoZSBuZXcgaGVhZGxpbmVbZm46Ml0uCi0g TS1TLUBAaW5mbzpAa2V5e1JFVH1AQCA6OiBJbnNlcnQgbmV3IFRPRE8gZW50cnkgd2l0aCBzYW1l IGxldmVsIGFzCiAgICAgY3VycmVudCBoZWFkaW5nLgotIEBAaW5mbzpAa2V5e1RBQn1AQCBpbiBu ZXcsIGVtcHR5IGVudHJ5IDo6IEluIGEgbmV3IGVudHJ5IHdpdGggbm8gdGV4dAogICAgIHlldCwg QEBpbmZvOkBrZXl7VEFCfUBAIHdpbGwgY3ljbGUgdGhyb3VnaCByZWFzb25hYmxlIGxldmVscy4K LSBNLUBAaW5mbzpAa2V5e2xlZnR9QHJ7L31Aa2V5e3JpZ2h0fUBAIDo6IFByb21vdGUvZGVtb3Rl IGN1cnJlbnQKICAgICBoZWFkaW5nIGJ5IG9uZSBsZXZlbC4KLSBNLVMtQEBpbmZvOkBrZXl7bGVm dH1AcnsvfUBrZXl7cmlnaHR9QEAgOjogUHJvbW90ZS9kZW1vdGUgdGhlCiAgICAgY3VycmVudCBz dWJ0cmVlIGJ5IG9uZSBsZXZlbC4KLSBNLVMtQEBpbmZvOkBrZXl7dXB9QHJ7L31Aa2V5e2Rvd259 QEAgOjogTW92ZSBzdWJ0cmVlIHVwL2Rvd24KICAgICAoc3dhcCB3aXRoIHByZXZpb3VzL25leHQg c3VidHJlZSBvZiBzYW1lIGxldmVsKS4KLSBDLWMgQy13IDo6IFJlZmlsZSBlbnRyeSBvciByZWdp b24gdG8gYSBkaWZmZXJlbnQgbG9jYXRpb24uICBbW1JlZmlsaW5nJTIwbm90ZXNdW1JlZmlsaW5n IG5vdGVzXV0uCi0gQy14IG4gcy93IDo6IE5hcnJvdyBidWZmZXIgdG8gY3VycmVudCBzdWJ0cmVl IC8gd2lkZW4gaXQgYWdhaW4KCldoZW4gdGhlcmUgaXMgYW4gYWN0aXZlIHJlZ2lvbiAoVHJhbnNp ZW50IE1hcmsgbW9kZSksIHByb21vdGlvbiBhbmQKZGVtb3Rpb24gd29yayBvbiBhbGwgaGVhZGxp bmVzIGluIHRoZSByZWdpb24uCgoqKiBTcGFyc2UgdHJlZXMKOlBST1BFUlRJRVM6CjpERVNDUklQ VElPTjogTWF0Y2hlcyBlbWJlZGRlZCBpbiBjb250ZXh0CjpFTkQ6CgpBbiBpbXBvcnRhbnQgZmVh dHVyZSBvZiBPcmcgbW9kZSBpcyB0aGUgYWJpbGl0eSB0byBjb25zdHJ1Y3QgL3NwYXJzZQp0cmVl cy8gZm9yIHNlbGVjdGVkIGluZm9ybWF0aW9uIGluIGFuIG91dGxpbmUgdHJlZSwgc28gdGhhdCB0 aGUgZW50aXJlCmRvY3VtZW50IGlzIGZvbGRlZCBhcyBtdWNoIGFzIHBvc3NpYmxlLCBidXQgdGhl IHNlbGVjdGVkIGluZm9ybWF0aW9uCmlzIG1hZGUgdmlzaWJsZSBhbG9uZyB3aXRoIHRoZSBoZWFk bGluZSBzdHJ1Y3R1cmUgYWJvdmUKaXRbZm46MTJdLiAgSnVzdCB0cnkgaXQgb3V0IGFuZCB5b3Ug d2lsbCBzZWUKaW1tZWRpYXRlbHkgaG93IGl0IHdvcmtzLgoKT3JnIG1vZGUgY29udGFpbnMgc2V2 ZXJhbCBjb21tYW5kcyBjcmVhdGluZyBzdWNoIHRyZWVzLCBhbGwgdGhlc2UKY29tbWFuZHMgY2Fu IGJlIGFjY2Vzc2VkIHRocm91Z2ggYSBkaXNwYXRjaGVyOgoKLSBDLWMgLyA6OiBUaGlzIHByb21w dHMgZm9yIGFuIGV4dHJhIGtleSB0byBzZWxlY3QgYSBzcGFyc2UtdHJlZQogICAgICAgICAgIGNy ZWF0aW5nIGNvbW1hbmQuCi0gQy1jIC8gciA6OiBPY2N1ci4gIFByb21wdHMgZm9yIGEgcmVnZXhw IGFuZCBzaG93cyBhIHNwYXJzZSB0cmVlIHdpdGgKICAgICAgICAgICAgIGFsbCBtYXRjaGVzLiAg RWFjaCBtYXRjaCBpcyBhbHNvIGhpZ2hsaWdodGVkOyB0aGUKICAgICAgICAgICAgIGhpZ2hsaWdo dHMgZGlzYXBwZWFyIGJ5IHByZXNzaW5nIEBAaW5mbzpAa2Jke0MtYyBDLWN9QEAuCgpUaGUgb3Ro ZXIgc3BhcnNlIHRyZWUgY29tbWFuZHMgc2VsZWN0IGhlYWRpbmdzIGJhc2VkIG9uIFRPRE8ga2V5 d29yZHMsCnRhZ3MsIG9yIHByb3BlcnRpZXMgYW5kIHdpbGwgYmUgZGlzY3Vzc2VkIGxhdGVyIGlu IHRoaXMgbWFudWFsLgoKKiogUGxhaW4gbGlzdHMKOlBST1BFUlRJRVM6CjpERVNDUklQVElPTjog QWRkaXRpb25hbCBzdHJ1Y3R1cmUgd2l0aGluIGFuIGVudHJ5CjpFTkQ6CgpXaXRoaW4gYW4gZW50 cnkgb2YgdGhlIG91dGxpbmUgdHJlZSwgaGFuZC1mb3JtYXR0ZWQgbGlzdHMgY2FuIHByb3ZpZGUK YWRkaXRpb25hbCBzdHJ1Y3R1cmUuICBUaGV5IGFsc28gcHJvdmlkZSBhIHdheSB0byBjcmVhdGUg bGlzdHMgb2YKY2hlY2tib3hlcyAoW1tDaGVja2JveGVzXV0pLiAgT3JnIHN1cHBvcnRzIGVkaXRp bmcgc3VjaCBsaXN0cywKYW5kIHRoZSBIVE1MIGV4cG9ydGVyIChbW0V4cG9ydGluZ11dKSBwYXJz ZXMgYW5kIGZvcm1hdHMgdGhlbS4KCk9yZyBrbm93cyBvcmRlcmVkIGxpc3RzLCB1bm9yZGVyZWQg bGlzdHMsIGFuZCBkZXNjcmlwdGlvbiBsaXN0cy4KLSAvVW5vcmRlcmVkLyBsaXN0IGl0ZW1zIHN0 YXJ0IHdpdGggQEBpbmZvOkBzYW1wey19QEAsCiAgQEBpbmZvOkBzYW1weyt9QEAsIG9yIEBAaW5m bzpAc2FtcHsqfUBAIGFzIGJ1bGxldHMuCi0gL09yZGVyZWQvIGxpc3QgaXRlbXMgc3RhcnQgd2l0 aCBAQGluZm86QHNhbXB7MS59QEAgb3IKICBAQGluZm86QHNhbXB7MSl9QEAuCi0gL0Rlc2NyaXB0 aW9uLyBsaXN0IHVzZSAnOjonIHRvIHNlcGFyYXRlIHRoZQogICAgIC90ZXJtLyBmcm9tIHRoZSBk ZXNjcmlwdGlvbi4KCkl0ZW1zIGJlbG9uZ2luZyB0byB0aGUgc2FtZSBsaXN0IG11c3QgaGF2ZSB0 aGUgc2FtZSBpbmRlbnRhdGlvbiBvbiB0aGUgZmlyc3QKbGluZS4gIEFuIGl0ZW0gZW5kcyBiZWZv cmUgdGhlIG5leHQgbGluZSB0aGF0IGlzIGluZGVudGVkIGxpa2UgaXRzCmJ1bGxldC9udW1iZXIs IG9yIGxlc3MuICBBIGxpc3QgZW5kcyB3aGVuIGFsbCBpdGVtcyBhcmUgY2xvc2VkLCBvciBiZWZv cmUgdHdvCmJsYW5rIGxpbmVzLiAgQW4gZXhhbXBsZToKCiMrYmVnaW5fc3JjIG9yZwogICwqKiBM b3JkIG9mIHRoZSBSaW5ncwogICwgICBNeSBmYXZvcml0ZSBzY2VuZXMgYXJlIChpbiB0aGlzIG9y ZGVyKQogICwgICAxLiBUaGUgYXR0YWNrIG9mIHRoZSBSb2hpcnJpbQogICwgICAyLiBFb3d5bidz IGZpZ2h0IHdpdGggdGhlIHdpdGNoIGtpbmcKICAsICAgICAgKyB0aGlzIHdhcyBhbHJlYWR5IG15 IGZhdm9yaXRlIHNjZW5lIGluIHRoZSBib29rCiAgLCAgICAgICsgSSByZWFsbHkgbGlrZSBNaXJh bmRhIE90dG8uCiAgLCAgIEltcG9ydGFudCBhY3RvcnMgaW4gdGhpcyBmaWxtIGFyZToKICAsICAg LSBFbGlqYWggV29vZCA6OiBIZSBwbGF5cyBGcm9kbwogICwgICAtIFNlYW4gQXVzdGluIDo6IEhl IHBsYXlzIFNhbSwgRnJvZG8ncyBmcmllbmQuCiMrZW5kX3NyYwoKClRoZSBmb2xsb3dpbmcgY29t bWFuZHMgYWN0IG9uIGl0ZW1zIHdoZW4gdGhlIGN1cnNvciBpcyBpbiB0aGUgZmlyc3QgbGluZSBv ZgphbiBpdGVtICh0aGUgbGluZSB3aXRoIHRoZSBidWxsZXQgb3IgbnVtYmVyKS4KCi0gQEBpbmZv OkBrZXl7VEFCfUBAIDo6IEl0ZW1zIGNhbiBiZSBmb2xkZWQganVzdCBsaWtlIGhlYWRsaW5lIGxl dmVscy4KLSBNLUBAaW5mbzpAa2V5e1JFVH1AQCA6OiBJbnNlcnQgbmV3IGl0ZW0gYXQgY3VycmVu dCBsZXZlbC4gIFdpdGggYQogICAgIHByZWZpeCBhcmd1bWVudCwgZm9yY2UgYSBuZXcgaGVhZGlu ZyAoW1tTdHJ1Y3R1cmUgZWRpdGluZ11dKS4KLSBNLVMtQEBpbmZvOkBrZXl7UkVUfUBAIDo6IElu c2VydCBhIG5ldyBpdGVtIHdpdGggYSBjaGVja2JveAogICAgIChbW0NoZWNrYm94ZXNdXSkuCi0g TS1TLUBAaW5mbzpAa2V5e3VwfUByey99QGtleXtkb3dufUBAIDo6IE1vdmUgdGhlIGl0ZW0gaW5j bHVkaW5nCiAgICAgc3ViaXRlbXMgdXAvZG93biAoc3dhcCB3aXRoIHByZXZpb3VzL25leHQgaXRl bSBvZiBzYW1lCiAgICAgaW5kZW50YXRpb24pLiAgSWYgdGhlIGxpc3QgaXMgb3JkZXJlZCwgcmVu dW1iZXJpbmcgaXMgYXV0b21hdGljLgotIE0tQEBpbmZvOkBrZXl7bGVmdH1AcnsvfU0tQGtleXty aWdodH1AQCA6OiBEZWNyZWFzZS9pbmNyZWFzZSB0aGUKICAgICBpbmRlbnRhdGlvbiBvZiBhbiBp dGVtLCBsZWF2aW5nIGNoaWxkcmVuIGFsb25lLgotIE0tUy1AQGluZm86QGtleXtsZWZ0fUByey99 QGtleXtyaWdodH1AQCA6OiBEZWNyZWFzZS9pbmNyZWFzZSB0aGUKICAgICBpbmRlbnRhdGlvbiBv ZiB0aGUgaXRlbSwgaW5jbHVkaW5nIHN1Yml0ZW1zLgotIEMtYyBDLWMgOjogSWYgdGhlcmUgaXMg YSBjaGVja2JveCAoW1tDaGVja2JveGVzXV0pIGluIHRoZSBpdGVtCiAgICAgICAgICAgICBsaW5l LCB0b2dnbGUgdGhlIHN0YXRlIG9mIHRoZSBjaGVja2JveC4gIEFsc28gdmVyaWZ5CiAgICAgICAg ICAgICBidWxsZXRzIGFuZCBpbmRlbnRhdGlvbiBjb25zaXN0ZW5jeSBpbiB0aGUgd2hvbGUgbGlz dC4KLSBDLWMgLSA6OiBDeWNsZSB0aGUgZW50aXJlIGxpc3QgbGV2ZWwgdGhyb3VnaCB0aGUgZGlm ZmVyZW50CiAgICAgICAgICAgaXRlbWl6ZS9lbnVtZXJhdGUgYnVsbGV0cyAoQEBpbmZvOkBzYW1w ey19QEAsCiAgICAgICAgICAgQEBpbmZvOkBzYW1weyt9QEAsIEBAaW5mbzpAc2FtcHsqfUBALCBA QGluZm86QHNhbXB7MS59QEAsCiAgICAgICAgICAgQEBpbmZvOkBzYW1wezEpfUBAKS4KCioqIEZv b3Rub3RlCjpQUk9QRVJUSUVTOgo6REVTQ1JJUFRJT046IEhvdyBmb290bm90ZXMgYXJlIGRlZmlu ZWQgaW4gT3JnJ3Mgc3ludGF4CjpFTkQ6CgpBIGZvb3Rub3RlIGlzIGRlZmluZWQgaW4gYSBwYXJh Z3JhcGggdGhhdCBpcyBzdGFydGVkIGJ5IGEgZm9vdG5vdGUgbWFya2VyIGluCnNxdWFyZSBicmFj a2V0cyBpbiBjb2x1bW4gMCwgbm8gaW5kZW50YXRpb24gYWxsb3dlZC4gIFRoZSBmb290bm90ZSBy ZWZlcmVuY2UKaXMgc2ltcGx5IHRoZSBtYXJrZXIgaW4gc3F1YXJlIGJyYWNrZXRzLCBpbnNpZGUg dGV4dC4gIEZvciBleGFtcGxlOgoKIytiZWdpbl9zcmMgb3JnCiAgLFRoZSBPcmcgaG9tZXBhZ2Vb Zm46MV0gbm93IGxvb2tzIGEgbG90IGJldHRlciB0aGFuIGl0IHVzZWQgdG8uCiAgLC4uLgogICxb Zm46MV0gVGhlIGxpbmsgaXM6IGh0dHA6Ly9vcmdtb2RlLm9yZwojK2VuZF9zcmMKCkBAaW5mbzpA bm9pbmRlbnRAQCBUaGUgZm9sbG93aW5nIGNvbW1hbmRzIGhhbmRsZSBmb290bm90ZXM6CgotIEMt YyBDLXggZiA6OiBUaGUgZm9vdG5vdGUgYWN0aW9uIGNvbW1hbmQuICBXaGVuIHRoZSBjdXJzb3Ig aXMgb24gYQogICAgICAgICAgICAgICBmb290bm90ZSByZWZlcmVuY2UsIGp1bXAgdG8gdGhlIGRl ZmluaXRpb24uICBXaGVuIGl0IGlzCiAgICAgICAgICAgICAgIGF0IGEgZGVmaW5pdGlvbiwganVt cCB0byB0aGUgKGZpcnN0KSByZWZlcmVuY2UuCiAgICAgICAgICAgICAgIE90aGVyd2lzZSwgY3Jl YXRlIGEgbmV3IGZvb3Rub3RlLiAgV2hlbiB0aGlzIGNvbW1hbmQgaXMKICAgICAgICAgICAgICAg Y2FsbGVkIHdpdGggYSBwcmVmaXggYXJndW1lbnQsIGEgbWVudSBvZiBhZGRpdGlvbmFsCiAgICAg ICAgICAgICAgIG9wdGlvbnMgaW5jbHVkaW5nIHJlbnVtYmVyaW5nIGlzIG9mZmVyZWQuCgotIEMt YyBDLWMgOjogSnVtcCBiZXR3ZWVuIGRlZmluaXRpb24gYW5kIHJlZmVyZW5jZS4KCkBAaW5mbzpA bm9pbmRlbnRAQCAqRnVydGhlciBSZWFkaW5nKlxcCltbaHR0cDovL29yZ21vZGUub3JnL21hbnVh bC9Eb2N1bWVudC1TdHJ1Y3R1cmUuaHRtbCNEb2N1bWVudC1TdHJ1Y3R1cmVdW0NoYXB0ZXIgMiBv ZiB0aGUgbWFudWFsXV1cXApbW2h0dHA6Ly9zYWNoYWNodWEuY29tL3dwLzIwMDgvMDEvb3V0bGlu aW5nLXlvdXItbm90ZXMtd2l0aC1vcmcvXVtTYWNoYSBDaHVhJ3MgdHV0b3JpYWxdXQoKKiBUYWJs ZXMKOlBST1BFUlRJRVM6CjpERVNDUklQVElPTjogUHVyZSBtYWdpYyBmb3IgcXVpY2sgZm9ybWF0 dGluZwo6RU5EOgoKCk9yZyBjb21lcyB3aXRoIGEgZmFzdCBhbmQgaW50dWl0aXZlIHRhYmxlIGVk aXRvci4gIFNwcmVhZHNoZWV0LWxpa2UKY2FsY3VsYXRpb25zIGFyZSBzdXBwb3J0ZWQgaW4gY29u bmVjdGlvbiB3aXRoIHRoZSBFbWFjcwpAQGluZm86QGZpbGV7Y2FsY31AQCBwYWNrYWdlCiMrQkVH SU5fVEVYSU5GTwpAaWZpbmZvCihAcHhyZWZ7VG9wLENhbGMsLENhbGMsR251IEVtYWNzIENhbGN1 bGF0b3IgTWFudWFsfSkuCkBlbmQgaWZpbmZvCkBpZm5vdGluZm8KKHNlZSB0aGUgRW1hY3MgQ2Fs Y3VsYXRvciBtYW51YWwgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIEVtYWNzCmNhbGN1 bGF0b3IpLgpAZW5kIGlmbm90aW5mbwojK0VORF9URVhJTkZPCgpPcmcgbWFrZXMgaXQgZWFzeSB0 byBmb3JtYXQgdGFibGVzIGluIHBsYWluIEFTQ0lJLiAgQW55IGxpbmUgd2l0aApAQGluZm86QHNh bXB7fH1AQCBhcyB0aGUgZmlyc3Qgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyIGlzIGNvbnNpZGVy ZWQKcGFydCBvZiBhIHRhYmxlLiAgQEBpbmZvOkBzYW1we3x9QEAgaXMgYWxzbyB0aGUgY29sdW1u IHNlcGFyYXRvci4gIEEKdGFibGUgbWlnaHQgbG9vayBsaWtlIHRoaXM6CgojK2JlZ2luX3NyYyBv cmcKICAsfCBOYW1lICB8IFBob25lIHwgQWdlIHwKICAsfC0tLS0tLS0rLS0tLS0tLSstLS0tLXwK ICAsfCBQZXRlciB8ICAxMjM0IHwgIDE3IHwKICAsfCBBbm5hICB8ICA0MzIxIHwgIDI1IHwKIytl bmRfc3JjCgpBIHRhYmxlIGlzIHJlLWFsaWduZWQgYXV0b21hdGljYWxseSBlYWNoIHRpbWUgeW91 IHByZXNzCkBAaW5mbzpAa2V5e1RBQn1AQCBvciBAQGluZm86QGtleXtSRVR9QEAgb3IgQEBpbmZv OkBrYmR7Qy1jIEMtY31AQAppbnNpZGUgdGhlIHRhYmxlLiAgQEBpbmZvOkBrZXl7VEFCfUBAIGFs c28gbW92ZXMgdG8gdGhlIG5leHQgZmllbGQKKEBAaW5mbzpAa2V5e1JFVH1AQCB0byB0aGUgbmV4 dCByb3cpIGFuZCBjcmVhdGVzIG5ldyB0YWJsZSByb3dzIGF0IHRoZQplbmQgb2YgdGhlIHRhYmxl IG9yIGJlZm9yZSBob3Jpem9udGFsIGxpbmVzLiAgVGhlIGluZGVudGF0aW9uIG9mIHRoZQp0YWJs ZSBpcyBzZXQgYnkgdGhlIGZpcnN0IGxpbmUuICBBbnkgbGluZSBzdGFydGluZyB3aXRoCkBAaW5m bzpAc2FtcHt8LX1AQCBpcyBjb25zaWRlcmVkIGFzIGEgaG9yaXpvbnRhbCBzZXBhcmF0b3IgbGlu ZSBhbmQKd2lsbCBiZSBleHBhbmRlZCBvbiB0aGUgbmV4dCByZS1hbGlnbiB0byBzcGFuIHRoZSB3 aG9sZSB0YWJsZSB3aWR0aC4KU28sIHRvIGNyZWF0ZSB0aGUgYWJvdmUgdGFibGUsIHlvdSB3b3Vs ZCBvbmx5IHR5cGUKCiMrYmVnaW5fc3JjIG9yZwogICx8TmFtZXxQaG9uZXxBZ2V8CiAgLHwtCiMr ZW5kX3NyYwoKQG5vaW5kZW50IGFuZCB0aGVuIHByZXNzIEBAaW5mbzpAa2V5e1RBQn1AQCB0byBh bGlnbiB0aGUgdGFibGUgYW5kIHN0YXJ0IGZpbGxpbmcgaW4KZmllbGRzLiAgRXZlbiBmYXN0ZXIg d291bGQgYmUgdG8gdHlwZSBAQGluZm86QGNvZGV7fE5hbWV8UGhvbmV8QWdlfUBAIGZvbGxvd2Vk IGJ5CkBAaW5mbzpAa2Jke0MtYyBAa2V5e1JFVH1AQH0uCgpXaGVuIHR5cGluZyB0ZXh0IGludG8g YSBmaWVsZCwgT3JnIHRyZWF0cyBAQGluZm86QGtleXtERUx9QEAsCkBAaW5mbzpAa2V5e0JhY2tz cGFjZX1AQCwgYW5kIGFsbCBjaGFyYWN0ZXIga2V5cyBpbiBhIHNwZWNpYWwgd2F5LCBzbyB0aGF0 Cmluc2VydGluZyBhbmQgZGVsZXRpbmcgYXZvaWRzIHNoaWZ0aW5nIG90aGVyIGZpZWxkcy4gIEFs c28sIHdoZW4KdHlwaW5nIEBAaW5mbzpAZW1waHtpbW1lZGlhdGVseSBhZnRlciB0aGUgY3Vyc29y IHdhcyBtb3ZlZCBpbnRvIGEgbmV3IGZpZWxkCndpdGggQGtiZHtAa2V5e1RBQn19LCBAa2Jke1Mt QGtleXtUQUJ9fSBvciBAa2Jke0BrZXl7UkVUfX19QEAsIHRoZQpmaWVsZCBpcyBhdXRvbWF0aWNh bGx5IG1hZGUgYmxhbmsuCgpAQGluZm86QHN1YnN1YmhlYWRpbmcgQ3JlYXRpb24gYW5kIGNvbnZl cnNpb25AQAotIEMtYyB8IDo6IENvbnZlcnQgdGhlIGFjdGl2ZSByZWdpb24gdG8gdGFibGUuICBJ ZiBldmVyeSBsaW5lIGNvbnRhaW5zCiAgICAgICAgICAgYXQgbGVhc3Qgb25lIFRBQiBjaGFyYWN0 ZXIsIHRoZSBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgdGhlCiAgICAgICAgICAgbWF0ZXJpYWwgaXMg dGFiIHNlcGFyYXRlZC4gIElmIGV2ZXJ5IGxpbmUgY29udGFpbnMgYSBjb21tYSwKICAgICAgICAg ICBjb21tYS1zZXBhcmF0ZWQgdmFsdWVzIChDU1YpIGFyZSBhc3N1bWVkLiAgSWYgbm90LCBsaW5l cwogICAgICAgICAgIGFyZSBzcGxpdCBhdCB3aGl0ZXNwYWNlIGludG8gZmllbGRzLgoKICAgICAg ICAgICBJZiB0aGVyZSBpcyBubyBhY3RpdmUgcmVnaW9uLCB0aGlzIGNvbW1hbmQgY3JlYXRlcyBh biBlbXB0eQogICAgICAgICAgIE9yZyB0YWJsZS4gIEJ1dCBpdCdzIGVhc2llciBqdXN0IHRvIHN0 YXJ0IHR5cGluZywgbGlrZQogICAgICAgICAgIEBAaW5mbzpAa2Jke3xOYW1lfFBob25lfEFnZSBD LWMgQGtleXtSRVR9fUBALgoKQEBpbmZvOkBzdWJzdWJoZWFkaW5nIFJlLWFsaWduaW5nIGFuZCBm aWVsZCBtb3Rpb25AQAotIEMtYyBDLWMgOjogUmUtYWxpZ24gdGhlIHRhYmxlIHdpdGhvdXQgbW92 aW5nIHRoZSBjdXJzb3IuCi0gQEBpbmZvOkBrZXl7VEFCfUBAIDo6IFJlLWFsaWduIHRoZSB0YWJs ZSwgbW92ZSB0byB0aGUgbmV4dCBmaWVsZC4KICAgICBDcmVhdGVzIGEgbmV3IHJvdyBpZiBuZWNl c3NhcnkuCi0gUy1AQGluZm86QGtleXtUQUJ9QEAgOjogUmUtYWxpZ24sIG1vdmUgdG8gcHJldmlv dXMgZmllbGQuCi0gQEBpbmZvOkBrZXl7UkVUfUBAIDo6IFJlLWFsaWduIHRoZSB0YWJsZSBhbmQg bW92ZSBkb3duIHRvIG5leHQgcm93LgogICAgIENyZWF0ZXMgYSBuZXcgcm93IGlmIG5lY2Vzc2Fy eS4KCkBAaW5mbzpAc3Vic3ViaGVhZGluZyBDb2x1bW4gYW5kIHJvdyBlZGl0aW5nQEAKLSBNLUBA aW5mbzpAa2V5e2xlZnR9QEAgOjogQEBpbmZvOkBpdGVteCBNLUBrZXl7cmlnaHR9QEAgCiAgICAg ICAgICAgICAgICAgICAgICAgICAgIE1vdmUgdGhlIGN1cnJlbnQgY29sdW1uIGxlZnQvcmlnaHQu Ci0gTS1TLUBAaW5mbzpAa2V5e2xlZnR9QEAgOjogS2lsbCB0aGUgY3VycmVudCBjb2x1bW4uCi0g TS1TLUBAaW5mbzpAa2V5e3JpZ2h0fUBAIDo6IEluc2VydCBhIG5ldyBjb2x1bW4gdG8gdGhlIGxl ZnQgb2YgdGhlIGN1cnNvcgogICAgIHBvc2l0aW9uLgotIE0tQEBpbmZvOkBrZXl7dXB9QEAgOjog QEBpbmZvOkBpdGVteCBNLUBrZXl7ZG93bn1AQAogICAgICAgICAgICAgICAgTW92ZSB0aGUgY3Vy cmVudCByb3cgdXAvZG93bi4KLSBNLVMtQEBpbmZvOkBrZXl7dXB9QEAgOjogS2lsbCB0aGUgY3Vy cmVudCByb3cgb3IgaG9yaXpvbnRhbCBsaW5lLgotIE0tUy1AQGluZm86QGtleXtkb3dufUBAIDo6 IEluc2VydCBhIG5ldyByb3cgYWJvdmUgdGhlIGN1cnJlbnQgcm93LgogICAgIFdpdGggYSBwcmVm aXggYXJndW1lbnQsIHRoZSBsaW5lIGlzIGNyZWF0ZWQgYmVsb3cgdGhlIGN1cnJlbnQKICAgICBv bmUuCi0gQy1jIC0gOjogSW5zZXJ0IGEgaG9yaXpvbnRhbCBsaW5lIGJlbG93IGN1cnJlbnQgcm93 LiAgV2l0aCBhIHByZWZpeAogICAgICAgICAgIGFyZ3VtZW50LCB0aGUgbGluZSBpcyBjcmVhdGVk IGFib3ZlIHRoZSBjdXJyZW50IGxpbmUuCi0gQy1jIEBAaW5mbzpAa2V5e1JFVH1AQCA6OiBJbnNl cnQgYSBob3Jpem9udGFsIGxpbmUgYmVsb3cgY3VycmVudAogICAgIHJvdywgYW5kIG1vdmUgdGhl IGN1cnNvciBpbnRvIHRoZSByb3cgYmVsb3cgdGhhdCBsaW5lLgotIEMtYyBeIDo6IFNvcnQgdGhl IHRhYmxlIGxpbmVzIGluIHRoZSByZWdpb24uICBUaGUgcG9zaXRpb24gb2YgcG9pbnQKICAgICAg ICAgICBpbmRpY2F0ZXMgdGhlIGNvbHVtbiB0byBiZSB1c2VkIGZvciBzb3J0aW5nLCBhbmQgdGhl IHJhbmdlCiAgICAgICAgICAgb2YgbGluZXMgaXMgdGhlIHJhbmdlIGJldHdlZW4gdGhlIG5lYXJl c3QgaG9yaXpvbnRhbAogICAgICAgICAgIHNlcGFyYXRvciBsaW5lcywgb3IgdGhlIGVudGlyZSB0 YWJsZS4KCkBAaW5mbzpAbm9pbmRlbnRAQCAqRnVydGhlciBSZWFkaW5nKlxcCltbaHR0cDovL29y Z21vZGUub3JnL21hbnVhbC9UYWJsZXMuaHRtbCNUYWJsZXNdW0NoYXB0ZXIgMyBvZiB0aGUgbWFu dWFsXV1cXApbW2h0dHA6Ly9vcmdtb2RlLm9yZy93b3JnL29yZy10dXRvcmlhbHMvdGFibGVzLnBo cF1bQmFzdGllbidzIHRhYmxlIHR1dG9yaWFsXV1cXApbW3todHRwOi8vb3JnbW9kZS5vcmcvd29y Zy9vcmctdHV0b3JpYWxzL29yZy1zcHJlYWRzaGVldC1pbnRyby5waHBdW0Jhc3RpZW4ncyBzcHJl YWRzaGVldCB0dXRvcmlhbF1dXFwKW1todHRwOi8vb3JnbW9kZS5vcmcvd29yZy9vcmctdHV0b3Jp YWxzL29yZy1wbG90LnBocF1bRXJpYydzIHBsb3R0aW5nIHR1dG9yaWFsXV0KCiogSHlwZXJsaW5r cwo6UFJPUEVSVElFUzoKOkRFU0NSSVBUSU9OOiBOb3RlcyBpbiBjb250ZXh0CjpFTkQ6CgpMaWtl IEhUTUwsIE9yZyBwcm92aWRlcyBsaW5rcyBpbnNpZGUgYSBmaWxlLCBleHRlcm5hbCBsaW5rcyB0 byBvdGhlcgpmaWxlcywgVXNlbmV0IGFydGljbGVzLCBlbWFpbHMsIGFuZCBtdWNoIG1vcmUuCgoq KiBMaW5rIGZvcm1hdAo6UFJPUEVSVElFUzoKOkRFU0NSSVBUSU9OOiBIb3cgbGlua3MgaW4gT3Jn IGFyZSBmb3JtYXR0ZWQKOkVORDoKCk9yZyB3aWxsIHJlY29nbml6ZSBwbGFpbiBVUkwtbGlrZSBs aW5rcyBhbmQgYWN0aXZhdGUgdGhlbSBhcyBjbGlja2FibGUKbGlua3MuICBUaGUgZ2VuZXJhbCBs aW5rIGZvcm1hdCwgaG93ZXZlciwgbG9va3MgbGlrZSB0aGlzOgoKIytiZWdpbl9zcmMgb3JnCltb bGlua11bZGVzY3JpcHRpb25dXSAgICAgICBAcntvciBhbHRlcm5hdGl2ZWx5fSAgICAgICAgICAg W1tsaW5rXV0KIytlbmRfc3JjCgpAQGluZm86QG5vaW5kZW50IE9uY2VAQCBhIGxpbmsgaW4gdGhl IGJ1ZmZlciBpcyBjb21wbGV0ZSAoYWxsIGJyYWNrZXRzCnByZXNlbnQpLCBPcmcgd2lsbCBjaGFu Z2UgdGhlIGRpc3BsYXkgc28gdGhhdApAQGluZm86QHNhbXB7ZGVzY3JpcHRpb259QEAgaXMgZGlz cGxheWVkIGluc3RlYWQgb2YKQEBpbmZvOkBzYW1we1tbbGlua11bZGVzY3JpcHRpb25dXX1AQCBh bmQgQEBpbmZvOkBzYW1we2xpbmt9QEAgaXMgZGlzcGxheWVkCmluc3RlYWQgb2YgQEBpbmZvOkBz YW1we1tbbGlua11dfUBALiAgVG8gZWRpdCB0aGUgaW52aXNpYmxlCkBAaW5mbzpAc2FtcHtsaW5r fUBAIHBhcnQsIHVzZSBAQGluZm86QGtiZHtDLWMgQy1sfUBAIHdpdGggdGhlIGN1cnNvcgpvbiB0 aGUgbGluay4KCioqIEludGVybmFsIGxpbmtzCjpQUk9QRVJUSUVTOgo6REVTQ1JJUFRJT046IExp bmtzIHRvIG90aGVyIHBsYWNlcyBpbiB0aGUgY3VycmVudCBmaWxlCjpFTkQ6CgpJZiB0aGUgbGlu ayBkb2VzIG5vdCBsb29rIGxpa2UgYSBVUkwsIGl0IGlzIGNvbnNpZGVyZWQgdG8gYmUgaW50ZXJu YWwKaW4gdGhlIGN1cnJlbnQgZmlsZS4gIFRoZSBtb3N0IGltcG9ydGFudCBjYXNlIGlzIGEgbGlu ayBsaWtlCkBAaW5mbzpAc2FtcHtbWyNteS1jdXN0b20taWRdXX1AQCB3aGljaCB3aWxsIGxpbmsg dG8gdGhlIGVudHJ5IHdpdGggdGhlCkBAaW5mbzpAY29kZXtDVVNUT01fSUR9QEAgcHJvcGVydHkg QEBpbmZvOkBzYW1we215LWN1c3RvbS1pZH1AQC4KCkxpbmtzIHN1Y2ggYXMgQEBpbmZvOkBzYW1w e1tbTXkgVGFyZ2V0XV19QEAgb3IgQEBpbmZvOkBzYW1we1tbTXkgVGFyZ2V0XVtGaW5kIG15CnRh cmdldF1dfUBAIGxlYWQgdG8gYSB0ZXh0IHNlYXJjaCBpbiB0aGUgY3VycmVudCBmaWxlIGZvciB0 aGUKY29ycmVzcG9uZGluZyB0YXJnZXQgd2hpY2ggbG9va3MgbGlrZSBAQGluZm86QHNhbXB7PDxN eSBUYXJnZXQ+Pn1AQC4KCioqIEV4dGVybmFsIGxpbmtzCjpQUk9QRVJUSUVTOgo6REVTQ1JJUFRJ T046IFVSTC1saWtlIGxpbmtzIHRvIHRoZSB3b3JsZAo6RU5EOgoKT3JnIHN1cHBvcnRzIGxpbmtz IHRvIGZpbGVzLCB3ZWJzaXRlcywgVXNlbmV0IGFuZCBlbWFpbCBtZXNzYWdlcywgQkJEQgpkYXRh YmFzZSBlbnRyaWVzIGFuZCBsaW5rcyB0byBib3RoIElSQyBjb252ZXJzYXRpb25zIGFuZCB0aGVp ciBsb2dzLgpFeHRlcm5hbCBsaW5rcyBhcmUgVVJMLWxpa2UgbG9jYXRvcnMuICBUaGV5IHN0YXJ0 IHdpdGggYSBzaG9ydAppZGVudGlmeWluZyBzdHJpbmcgZm9sbG93ZWQgYnkgYSBjb2xvbi4gIFRo ZXJlIGNhbiBiZSBubyBzcGFjZSBhZnRlcgp0aGUgY29sb24uICBIZXJlIGFyZSBzb21lIGV4YW1w bGVzOgoKOiBodHRwOi8vd3d3LmFzdHJvLnV2YS5ubC9+ZG9taW5payAgICAgICAgICBAcntvbiB0 aGUgd2VifQo6IGZpbGU6L2hvbWUvZG9taW5pay9pbWFnZXMvanVwaXRlci5qcGcgICAgIEBye2Zp bGUsIGFic29sdXRlIHBhdGh9CjogL2hvbWUvZG9taW5pay9pbWFnZXMvanVwaXRlci5qcGcgICAg ICAgICAgQHJ7c2FtZSBhcyBhYm92ZX0KOiBmaWxlOnBhcGVycy9sYXN0LnBkZiAgICAgICAgICAg ICAgICAgICAgICBAcntmaWxlLCByZWxhdGl2ZSBwYXRofQo6IGZpbGU6cHJvamVjdHMub3JnICAg ICAgICAgICAgICAgICAgICAgICAgIEBye2Fub3RoZXIgT3JnIGZpbGV9CjogZG9jdmlldzpwYXBl cnMvbGFzdC5wZGY6Ok5OTiAgICAgICAgICAgICAgQHJ7b3BlbiBmaWxlIGluIGRvYy12aWV3IG1v ZGUgYXQgcGFnZSBOTk59CjogaWQ6Qjc0MjNGNEQtMkU4QS00NzFCLTg4MTAtQzQwRjA3NDcxN0U5 ICAgQHJ7TGluayB0byBoZWFkaW5nIGJ5IElEfQo6IG5ld3M6Y29tcC5lbWFjcyAgICAgICAgICAg ICAgICAgICAgICAgICAgIEBye1VzZW5ldCBsaW5rfQo6IG1haWx0bzphZGVudEBAZ2FsYXh5Lm5l dCAgICAgICAgICAgICAgICAgICBAcntNYWlsIGxpbmt9Cjogdm06Zm9sZGVyICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgQHJ7Vk0gZm9sZGVyIGxpbmt9Cjogdm06Zm9sZGVyI2lkICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgQHJ7Vk0gbWVzc2FnZSBsaW5rfQo6IHdsOmZvbGRl ciNpZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBye1dBTkRFUkxVU1QgbWVzc2FnZSBs aW5rfQo6IG1oZTpmb2xkZXIjaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBye01ILUUg bWVzc2FnZSBsaW5rfQo6IHJtYWlsOmZvbGRlciNpZCAgICAgICAgICAgICAgICAgICAgICAgICAg IEBye1JNQUlMIG1lc3NhZ2UgbGlua30KOiBnbnVzOmdyb3VwI2lkICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBAcntHbnVzIGFydGljbGUgbGlua30KOiBiYmRiOlIuKlN0YWxsbWFuICAgICAg ICAgICAgICAgICAgICAgICAgICBAcntCQkRCIGxpbmsgKHdpdGggcmVnZXhwKX0KOiBpcmM6L2ly Yy5jb20vI2VtYWNzL2JvYiAgICAgICAgICAgICAgICAgICBAcntJUkMgbGlua30KOiBpbmZvOm9y ZzpFeHRlcm5hbCUyMGxpbmtzICAgICAgICAgICAgICAgICBAcntJbmZvIG5vZGUgbGluayAod2l0 aCBlbmNvZGVkIHNwYWNlKX0KCkEgbGluayBzaG91bGQgYmUgZW5jbG9zZWQgaW4gZG91YmxlIGJy YWNrZXRzIGFuZCBtYXkgY29udGFpbiBhCmRlc2NyaXB0aXZlIHRleHQgdG8gYmUgZGlzcGxheWVk IGluc3RlYWQgb2YgdGhlIFVSTCAoW1tMaW5rIGZvcm1hdF1dKSwKZm9yIGV4YW1wbGU6CgojK2Jl Z2luX3NyYyBvcmcKW1todHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvZW1hY3MvXVtHTlUgRW1h Y3NdXQojK2VuZF9zcmMKCkBAaW5mbzpAbm9pbmRlbnQgSWZAQCB0aGUgZGVzY3JpcHRpb24gaXMg YSBmaWxlIG5hbWUgb3IgVVJMIHRoYXQKcG9pbnRzIHRvIGFuIGltYWdlLCBIVE1MIGV4cG9ydCAo W1tIVE1MIGV4cG9ydF1dKSB3aWxsIGlubGluZSB0aGUKaW1hZ2UgYXMgYSBjbGlja2FibGUgYnV0 dG9uLiAgSWYgdGhlcmUgaXMgbm8gZGVzY3JpcHRpb24gYXQgYWxsIGFuZAp0aGUgbGluayBwb2lu dHMgdG8gYW4gaW1hZ2UsIHRoYXQgaW1hZ2Ugd2lsbCBiZSBpbmxpbmVkIGludG8gdGhlCmV4cG9y dGVkIEhUTUwgZmlsZS4KCioqIEhhbmRsaW5nIGxpbmtzCjpQUk9QRVJUSUVTOgo6REVTQ1JJUFRJ T046IENyZWF0aW5nLCBpbnNlcnRpbmcgYW5kIGZvbGxvd2luZwo6RU5EOgoKT3JnIHByb3ZpZGVz IG1ldGhvZHMgdG8gY3JlYXRlIGEgbGluayBpbiB0aGUgY29ycmVjdCBzeW50YXgsIHRvCmluc2Vy dCBpdCBpbnRvIGFuIE9yZyBmaWxlLCBhbmQgdG8gZm9sbG93IHRoZSBsaW5rLgoKLSBDLWMgbCA6 OiBTdG9yZSBhIGxpbmsgdG8gdGhlIGN1cnJlbnQgbG9jYXRpb24uICBUaGlzIGlzIGEgL2dsb2Jh bC8KICAgICAgICAgICBjb21tYW5kICh5b3UgbXVzdCBjcmVhdGUgdGhlIGtleSBiaW5kaW5nIHlv dXJzZWxmKSB3aGljaAogICAgICAgICAgIGNhbiBiZSB1c2VkIGluIGFueSBidWZmZXIgdG8gY3Jl YXRlIGEgbGluay4gIFRoZSBsaW5rIHdpbGwKICAgICAgICAgICBiZSBzdG9yZWQgZm9yIGxhdGVy IGluc2VydGlvbiBpbnRvIGFuIE9yZyBidWZmZXIgKHNlZQogICAgICAgICAgIGJlbG93KS4KLSBD LWMgQy1sIDo6IEluc2VydCBhIGxpbmsuICBUaGlzIHByb21wdHMgZm9yIGEgbGluayB0byBiZSBp bnNlcnRlZAogICAgICAgICAgICAgaW50byB0aGUgYnVmZmVyLiAgWW91IGNhbiBqdXN0IHR5cGUg YSBsaW5rLCBvciB1c2UKICAgICAgICAgICAgIGhpc3Rvcnkga2V5cyBAQGluZm86QGtleXt1cH1A QCBhbmQgQEBpbmZvOkBrZXl7ZG93bn1AQCB0bwogICAgICAgICAgICAgYWNjZXNzIHN0b3JlZCBs aW5rcy4gIFlvdSB3aWxsIGJlIHByb21wdGVkIGZvciB0aGUKICAgICAgICAgICAgIGRlc2NyaXB0 aW9uIHBhcnQgb2YgdGhlIGxpbmsuIFdoZW4gY2FsbGVkIHdpdGggYQogICAgICAgICAgICAgQEBp bmZvOkBrYmR7Qy11fUBAIHByZWZpeCBhcmd1bWVudCwgZmlsZSBuYW1lIGNvbXBsZXRpb24KICAg ICAgICAgICAgIGlzIHVzZWQgdG8gbGluayB0byBhIGZpbGUuCi0gQy1jIEMtbCBAQGluZm86QHJ7 KHdpdGggY3Vyc29yIG9uIGV4aXN0aW5nIGxpbmspfUBAIDo6IFdoZW4gdGhlCiAgICAgY3Vyc29y IGlzIG9uIGFuIGV4aXN0aW5nIGxpbmssIEBAaW5mbzpAa2Jke0MtYyBDLWx9QEAgYWxsb3dzIHlv dQogICAgIHRvIGVkaXQgdGhlIGxpbmsgYW5kIGRlc2NyaXB0aW9uIHBhcnRzIG9mIHRoZSBsaW5r LgotIEMtYyBDLW8gQEBpbmZvOkBye29yfUBAIG1vdXNlLTEgQEBpbmZvOkBye29yfUBAIG1vdXNl LTIgOjogT3BlbiBsaW5rCiAgICAgYXQgcG9pbnQuCi0gQy1jICYgOjogSnVtcCBiYWNrIHRvIGEg cmVjb3JkZWQgcG9zaXRpb24uICBBIHBvc2l0aW9uIGlzIHJlY29yZGVkCiAgICAgICAgICAgYnkg dGhlIGNvbW1hbmRzIGZvbGxvd2luZyBpbnRlcm5hbCBsaW5rcywgYW5kIGJ5CiAgICAgICAgICAg QEBpbmZvOkBrYmR7Qy1jICV9QEAuICBVc2luZyB0aGlzIGNvbW1hbmQgc2V2ZXJhbCB0aW1lcyBp bgogICAgICAgICAgIGRpcmVjdCBzdWNjZXNzaW9uIG1vdmVzIHRocm91Z2ggYSByaW5nIG9mIHBy ZXZpb3VzbHkKICAgICAgICAgICByZWNvcmRlZCBwb3NpdGlvbnMuCgoqKiBUYXJnZXRlZCBsaW5r cwo6UFJPUEVSVElFUzoKOkRFU0NSSVBUSU9OOiBQb2ludCBhdCBhIGxvY2F0aW9uIGluIGEgZmls ZQo6RU5EOgoKRmlsZSBsaW5rcyBjYW4gY29udGFpbiBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHRv IG1ha2UgRW1hY3MganVtcCB0byBhCnBhcnRpY3VsYXIgbG9jYXRpb24gaW4gdGhlIGZpbGUgd2hl biBmb2xsb3dpbmcgYSBsaW5rLiAgVGhpcyBjYW4gYmUgYQpsaW5lIG51bWJlciBvciBhIHNlYXJj aCBvcHRpb24gYWZ0ZXIgYSBkb3VibGUgY29sb24uCgpIZXJlIGlzIHRoZSBzeW50YXggb2YgdGhl IGRpZmZlcmVudCB3YXlzIHRvIGF0dGFjaCBhIHNlYXJjaCB0byBhIGZpbGUKbGluaywgdG9nZXRo ZXIgd2l0aCBhbiBleHBsYW5hdGlvbjoKCjogW1tmaWxlOn4vY29kZS9tYWluLmM6OjI1NV1dICAg ICAgICAgICAgICAgICBAcntGaW5kIGxpbmUgMjU1fQo6IFtbZmlsZTp+L3h4Lm9yZzo6TXkgVGFy Z2V0XV0gICAgICAgICAgICAgICAgQHJ7RmluZCBAc2FtcHs8PE15IFRhcmdldD4+fX0KOiBbW2Zp bGU6fi94eC5vcmc6OiNteS1jdXN0b20taWRdXSAgICAgICAgICAgIEBye0ZpbmQgZW50cnkgd2l0 aCBjdXN0b20gaWR9CgpAQGluZm86QG5vaW5kZW50QEAgKkZ1cnRoZXIgUmVhZGluZyoKW1todHRw Oi8vb3JnbW9kZS5vcmcvbWFudWFsL0h5cGVybGlua3MuaHRtbCNIeXBlcmxpbmtzXVtDaGFwdGVy IDQgb2YgdGhlIG1hbnVhbF1dCgoqIFRPRE8gSXRlbXMKOlBST1BFUlRJRVM6CjpERVNDUklQVElP TjogRXZlcnkgdHJlZSBicmFuY2ggY2FuIGJlIGEgVE9ETyBpdGVtCjpFTkQ6CgpPcmcgbW9kZSBk b2VzIG5vdCBtYWludGFpbiBUT0RPIGxpc3RzIGFzIHNlcGFyYXRlIGRvY3VtZW50c1tmbjozXS4K SW5zdGVhZCwgVE9ETyBpdGVtcyBhcmUgYW4gaW50ZWdyYWwgcGFydCBvZiB0aGUgbm90ZXMgZmls ZSwgYmVjYXVzZQpUT0RPIGl0ZW1zIHVzdWFsbHkgY29tZSB1cCB3aGlsZSB0YWtpbmcgbm90ZXMh ICBXaXRoIE9yZyBtb2RlLCBzaW1wbHkKbWFyayBhbnkgZW50cnkgaW4gYSB0cmVlIGFzIGJlaW5n IGEgVE9ETyBpdGVtLiAgSW4gdGhpcyB3YXksCmluZm9ybWF0aW9uIGlzIG5vdCBkdXBsaWNhdGVk LCBhbmQgdGhlIGVudGlyZSBjb250ZXh0IGZyb20gd2hpY2ggdGhlClRPRE8gaXRlbSBlbWVyZ2Vk IGlzIGFsd2F5cyBwcmVzZW50LgoKT2YgY291cnNlLCB0aGlzIHRlY2huaXF1ZSBmb3IgbWFuYWdp bmcgVE9ETyBpdGVtcyBzY2F0dGVycyB0aGVtCnRocm91Z2hvdXQgeW91ciBub3RlcyBmaWxlLiAg T3JnIG1vZGUgY29tcGVuc2F0ZXMgZm9yIHRoaXMgYnkKcHJvdmlkaW5nIG1ldGhvZHMgdG8gZ2l2 ZSB5b3UgYW4gb3ZlcnZpZXcgb2YgYWxsIHRoZSB0aGluZ3MgdGhhdCB5b3UKaGF2ZSB0byBkby4K CioqIFVzaW5nIFRPRE8gc3RhdGVzCjpQUk9QRVJUSUVTOgo6REVTQ1JJUFRJT046IFNldHRpbmcg YW5kIHN3aXRjaGluZyBzdGF0ZXMKOkVORDoKCkFueSBoZWFkbGluZSBiZWNvbWVzIGEgVE9ETyBp dGVtIHdoZW4gaXQgc3RhcnRzIHdpdGggdGhlIHdvcmQKQEBpbmZvOkBzYW1we1RPRE99QEAsIGZv ciBleGFtcGxlOgoKIytiZWdpbl9zcmMgb3JnCiAgLCoqKiBUT0RPIFdyaXRlIGxldHRlciB0byBT YW0gRm9ydHVuZQojK2VuZF9zcmMKCkBAaW5mbzpAbm9pbmRlbnQKVGhlQEAgbW9zdCBpbXBvcnRh bnQgY29tbWFuZHMgdG8gd29yayB3aXRoIFRPRE8gZW50cmllcyBhcmU6CgotIEMtYyBDLXQgOjog Um90YXRlIHRoZSBUT0RPIHN0YXRlIG9mIHRoZSBjdXJyZW50IGl0ZW0gYW1vbmcKCiAgICAgICAg ICAgICAjK2JlZ2luX2V4YW1wbGUKICAgICAgICAgICAgICAgLC0+ICh1bm1hcmtlZCkgLT4gVE9E TyAtPiBET05FIC0tLgogICAgICAgICAgICAgICAnLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0nCiAgICAgICAgICAgICAjK2VuZF9leGFtcGxlCgogICAgICAgICAgICAgVGhlIHNhbWUg cm90YXRpb24gY2FuIGFsc28gYmUgZG9uZSBgYHJlbW90ZWx5JycgZnJvbSB0aGUKICAgICAgICAg ICAgIHRpbWVsaW5lIGFuZCBhZ2VuZGEgYnVmZmVycyB3aXRoIHRoZSBAQGluZm86QGtiZHt0fUBA CiAgICAgICAgICAgICBjb21tYW5kIGtleSAoW1tBZ2VuZGEgY29tbWFuZHNdXSkuCgotIFMtQEBp bmZvOkBrZXl7cmlnaHR9QHJ7L31Aa2V5e2xlZnR9QEAgOjogU2VsZWN0IHRoZQogICAgIGZvbGxv d2luZy9wcmVjZWRpbmcgVE9ETyBzdGF0ZSwgc2ltaWxhciB0byBjeWNsaW5nLgotIEMtYyAvIHQg OjogVmlldyBUT0RPIGl0ZW1zIGluIGEgL3NwYXJzZSB0cmVlLyAoW1tTcGFyc2UgdHJlZXNdXSku ICBGb2xkcwogICAgICAgICAgICAgdGhlIGJ1ZmZlciwgYnV0IHNob3dzIGFsbCBUT0RPIGl0ZW1z IGFuZCB0aGUgaGVhZGluZ3MKICAgICAgICAgICAgIGhpZXJhcmNoeSBhYm92ZSB0aGVtLgotIEMt YyBhIHQgOjogU2hvdyB0aGUgZ2xvYmFsIFRPRE8gbGlzdC4gIENvbGxlY3RzIHRoZSBUT0RPIGl0 ZW1zIGZyb20KICAgICAgICAgICAgIGFsbCBhZ2VuZGEgZmlsZXMgKFtbQWdlbmRhIFZpZXdzXV0p IGludG8gYSBzaW5nbGUgYnVmZmVyLgogICAgICAgICAgICAgW1tHbG9iYWwgVE9ETyBsaXN0XV0s IGZvciBtb3JlIGluZm9ybWF0aW9uLgotIFMtTS1AQGluZm86QGtleXtSRVR9QEAgOjogSW5zZXJ0 IGEgbmV3IFRPRE8gZW50cnkgYmVsb3cgdGhlIGN1cnJlbnQKICAgICBvbmUuCgpAQGluZm86QG5v aW5kZW50QEAgQ2hhbmdpbmcgYSBUT0RPIHN0YXRlIGNhbiBhbHNvIHRyaWdnZXIgdGFnIGNoYW5n ZXMuClNlZSB0aGUgZG9jc3RyaW5nIG9mIHRoZSBvcHRpb24gfm9yZy10b2RvLXN0YXRlLXRhZ3Mt dHJpZ2dlcnN+IGZvcgpkZXRhaWxzLgoKKiogTXVsdGktc3RhdGUgd29ya2Zsb3dzCjpQUk9QRVJU SUVTOgo6REVTQ1JJUFRJT046IE1vcmUgdGhhbiBqdXN0IG9uL29mZgo6RU5EOgoKWW91IGNhbiB1 c2UgVE9ETyBrZXl3b3JkcyB0byBpbmRpY2F0ZSBkaWZmZXJlbnQgL3NlcXVlbnRpYWwvCnN0YXRl cyBpbiB0aGUgcHJvY2VzcyBvZiB3b3JraW5nIG9uIGFuIGl0ZW0sIGZvciBleGFtcGxlOgoKIyti ZWdpbl9zcmMgZW1hY3MtbGlzcAogIChzZXRxIG9yZy10b2RvLWtleXdvcmRzCiAgICAnKChzZXF1 ZW5jZSAiVE9ETyIgIkZFRURCQUNLIiAiVkVSSUZZIiAifCIgIkRPTkUiICJERUxFR0FURUQiKSkp CiMrZW5kX3NyYwoKVGhlIHZlcnRpY2FsIGJhciBzZXBhcmF0ZXMgdGhlIFRPRE8ga2V5d29yZHMg KHN0YXRlcyB0aGF0IC9uZWVkCmFjdGlvbi8pIGZyb20gdGhlIERPTkUgc3RhdGVzICh3aGljaCBu ZWVkIC9ubyBmdXJ0aGVyIGFjdGlvbi8pLiAgSWYKeW91IGRvbid0IHByb3ZpZGUgdGhlIHNlcGFy YXRvciBiYXIsIHRoZSBsYXN0IHN0YXRlIGlzIHVzZWQgYXMgdGhlCkRPTkUgc3RhdGUuICBXaXRo IHRoaXMgc2V0dXAsIHRoZSBjb21tYW5kIEBAaW5mbzpAa2Jke0MtYyBDLXR9QEAgd2lsbApjeWNs ZSBhbiBlbnRyeSBmcm9tIFRPRE8gdG8gRkVFREJBQ0ssIHRoZW4gdG8gVkVSSUZZLCBhbmQgZmlu YWxseSB0bwpET05FIGFuZCBERUxFR0FURUQuCgpTb21ldGltZXMgeW91IG1heSB3YW50IHRvIHVz ZSBkaWZmZXJlbnQgc2V0cyBvZiBUT0RPIGtleXdvcmRzIGluCnBhcmFsbGVsLiAgRm9yIGV4YW1w bGUsIHlvdSBtYXkgd2FudCB0byBoYXZlIHRoZSBiYXNpYyB+VE9ET34vfkRPTkV+LApidXQgYWxz byBhIHdvcmtmbG93IGZvciBidWcgZml4aW5nLCBhbmQgYSBzZXBhcmF0ZSBzdGF0ZSBpbmRpY2F0 aW5nCnRoYXQgYW4gaXRlbSBoYXMgYmVlbiBjYW5jZWxlZCAoc28gaXQgaXMgbm90IERPTkUsIGJ1 dCBhbHNvIGRvZXMgbm90CnJlcXVpcmUgYWN0aW9uKS4gIFlvdXIgc2V0dXAgd291bGQgdGhlbiBs b29rIGxpa2UgdGhpczoKCiMrYmVnaW5fc3JjIGVtYWNzLWxpc3AKICAoc2V0cSBvcmctdG9kby1r ZXl3b3JkcwogICAgICAgICcoKHNlcXVlbmNlICJUT0RPKHQpIiAifCIgIkRPTkUoZCkiKQogICAg ICAgICAgKHNlcXVlbmNlICJSRVBPUlQocikiICJCVUcoYikiICJLTk9XTkNBVVNFKGspIiAifCIg IkZJWEVEKGYpIikKICAgICAgICAgIChzZXF1ZW5jZSAifCIgIkNBTkNFTEVEKGMpIikpKQojK2Vu ZF9zcmMKClRoZSBrZXl3b3JkcyBzaG91bGQgYWxsIGJlIGRpZmZlcmVudCwgdGhpcyBoZWxwcyBP cmcgbW9kZSB0byBrZWVwCnRyYWNrIG9mIHdoaWNoIHN1YnNlcXVlbmNlIHNob3VsZCBiZSB1c2Vk IGZvciBhIGdpdmVuIGVudHJ5LiAgVGhlCmV4YW1wbGUgYWxzbyBzaG93cyBob3cgdG8gZGVmaW5l IGtleXMgZm9yIGZhc3QgYWNjZXNzIG9mIGEgcGFydGljdWxhcgpzdGF0ZSwgYnkgYWRkaW5nIGEg bGV0dGVyIGluIHBhcmVudGhlc2lzIGFmdGVyIGVhY2gga2V5d29yZCAtIHlvdSB3aWxsCmJlIHBy b21wdGVkIGZvciB0aGUga2V5IGFmdGVyIEBAaW5mbzpAa2Jke0MtYyBDLXR9QEAuCgpUbyBkZWZp bmUgVE9ETyBrZXl3b3JkcyB0aGF0IGFyZSB2YWxpZCBvbmx5IGluIGEgc2luZ2xlIGZpbGUsIHVz ZSB0aGUKZm9sbG93aW5nIHRleHQgYW55d2hlcmUgaW4gdGhlIGZpbGUuCgojK2JlZ2luX3NyYyBv cmcKICAsIytUT0RPOiBUT0RPKHQpIHwgRE9ORShkKQogICwjK1RPRE86IFJFUE9SVChyKSBCVUco YikgS05PV05DQVVTRShrKSB8IEZJWEVEKGYpCiAgLCMrVE9ETzogfCBDQU5DRUxFRChjKQojK2Vu ZF9zcmMKCkFmdGVyIGNoYW5naW5nIG9uZSBvZiB0aGVzZSBsaW5lcywgdXNlIEBAaW5mbzpAa2Jk e0MtYyBDLWN9QEAgd2l0aCB0aGUKY3Vyc29yIHN0aWxsIGluIHRoZSBsaW5lIHRvIG1ha2UgdGhl IGNoYW5nZXMga25vd24gdG8gT3JnIG1vZGUuCgoqKiBQcm9ncmVzcyBsb2dnaW5nCjpQUk9QRVJU SUVTOgo6REVTQ1JJUFRJT046IERhdGVzIGFuZCBub3RlcyBmb3IgcHJvZ3Jlc3MKOkVORDoKCk9y ZyBtb2RlIGNhbiBhdXRvbWF0aWNhbGx5IHJlY29yZCBhIHRpbWVzdGFtcCBhbmQgcG9zc2libHkg YSBub3RlIHdoZW4KeW91IG1hcmsgYSBUT0RPIGl0ZW0gYXMgRE9ORSwgb3IgZXZlbiBlYWNoIHRp bWUgeW91IGNoYW5nZSB0aGUgc3RhdGUKb2YgYSBUT0RPIGl0ZW0uICBUaGlzIHN5c3RlbSBpcyBo aWdobHkgY29uZmlndXJhYmxlLCBzZXR0aW5ncyBjYW4gYmUKb24gYSBwZXIta2V5d29yZCBiYXNp cyBhbmQgY2FuIGJlIGxvY2FsaXplZCB0byBhIGZpbGUgb3IgZXZlbiBhCnN1YnRyZWUuICBGb3Ig aW5mb3JtYXRpb24gb24gaG93IHRvIGNsb2NrIHdvcmtpbmcgdGltZSBmb3IgYSB0YXNrLCBzZWUK W1tDbG9ja2luZyB3b3JrIHRpbWVdXS4KCioqKiBDbG9zaW5nIGl0ZW1zCjpQUk9QRVJUSUVTOgo6 REVTQ1JJUFRJT046IFdoZW4gd2FzIHRoaXMgZW50cnkgbWFya2VkIERPTkU/CjpFTkQ6CgpUaGUg bW9zdCBiYXNpYyBsb2dnaW5nIGlzIHRvIGtlZXAgdHJhY2sgb2YgL3doZW4vIGEgY2VydGFpbiBU T0RPIGl0ZW0Kd2FzIGZpbmlzaGVkLiAgVGhpcyBpcyBhY2hpZXZlZCB3aXRoW2ZuOjRdLgoKIyti ZWdpbl9zcmMgZW1hY3MtbGlzcAogIChzZXRxIG9yZy1sb2ctZG9uZSAndGltZSkKIytlbmRfc3Jj CgpAQGluZm86QG5vaW5kZW50QEAgVGhlbiBlYWNoIHRpbWUgeW91IHR1cm4gYW4gZW50cnkgZnJv bSBhIFRPRE8KKG5vdC1kb25lKSBzdGF0ZSBpbnRvIGFueSBvZiB0aGUgRE9ORSBzdGF0ZXMsIGEg bGluZQpAQGluZm86QHNhbXB7Q0xPU0VEOiBbdGltZXN0YW1wXX1AQCB3aWxsIGJlIGluc2VydGVk IGp1c3QgYWZ0ZXIgdGhlCmhlYWRsaW5lLiAgSWYgeW91IHdhbnQgdG8gcmVjb3JkIGEgbm90ZSBh bG9uZyB3aXRoIHRoZSB0aW1lc3RhbXAsCnVzZVtmbjo1XQoKIytiZWdpbl9zcmMgZW1hY3MtbGlz cAogIChzZXRxIG9yZy1sb2ctZG9uZSAnbm90ZSkKIytlbmRfc3JjCgpAQGluZm86QG5vaW5kZW50 IFlvdUBAIHdpbGwgdGhlbiBiZSBwcm9tcHRlZCBmb3IgYSBub3RlLCBhbmQgdGhhdCBub3RlCndp bGwgYmUgc3RvcmVkIGJlbG93IHRoZSBlbnRyeSB3aXRoIGEgQEBpbmZvOkBzYW1we0Nsb3Npbmcg Tm90ZX1AQApoZWFkaW5nLgoKKioqIFRyYWNraW5nIFRPRE8gc3RhdGUgY2hhbmdlcwo6UFJPUEVS VElFUzoKOkRFU0NSSVBUSU9OOiAgV2hlbiBkaWQgdGhlIHN0YXR1cyBjaGFuZ2U/CjpFTkQ6CgpZ b3UgbWlnaHQgd2FudCB0byBrZWVwIHRyYWNrIG9mIFRPRE8gc3RhdGUgY2hhbmdlcy4gIFlvdSBj YW4gZWl0aGVyIHJlY29yZApqdXN0IGEgdGltZXN0YW1wLCBvciBhIHRpbWUtc3RhbXBlZCBub3Rl IGZvciBhIGNoYW5nZS4gIFRoZXNlIHJlY29yZHMgd2lsbCBiZQppbnNlcnRlZCBhZnRlciB0aGUg aGVhZGxpbmUgYXMgYW4gaXRlbWl6ZWQgbGlzdC4gIFdoZW4gdGFraW5nIGEgbG90IG9mIG5vdGVz LAp5b3UgbWlnaHQgd2FudCB0byBnZXQgdGhlIG5vdGVzIG91dCBvZiB0aGUgd2F5IGludG8gYSBk cmF3ZXIuICBDdXN0b21pemUgdGhlCnZhcmlhYmxlIH5vcmctbG9nLWludG8tZHJhd2VyfiB0byBn ZXQgdGhpcyBiZWhhdmlvci4KCkZvciBzdGF0ZSBsb2dnaW5nLCBPcmcgbW9kZSBleHBlY3RzIGNv bmZpZ3VyYXRpb24gb24gYSBwZXIta2V5d29yZCBiYXNpcy4KVGhpcyBpcyBhY2hpZXZlZCBieSBh ZGRpbmcgc3BlY2lhbCBtYXJrZXJzIEBAaW5mbzpAc2FtcHshfUBAIChmb3IgYSB0aW1lc3RhbXAp IGFuZApAQGluZm86QHNhbXB7QEB9QEAgKGZvciBhIG5vdGUpIGluIHBhcmVudGhlc2VzIGFmdGVy IGVhY2gga2V5d29yZC4gIEZvciBleGFtcGxlOgojK2JlZ2luX3NyYyBvcmcKICAsIytUT0RPOiBU T0RPKHQpIFdBSVQod0BALyEpIHwgRE9ORShkISkgQ0FOQ0VMRUQoY0BAKQojK2VuZF9zcmMKQEBp bmZvOkBub2luZGVudEBAIHdpbGwgZGVmaW5lIFRPRE8ga2V5d29yZHMgYW5kIGZhc3QgYWNjZXNz IGtleXMsIGFuZAphbHNvIHJlcXVlc3QgdGhhdCBhIHRpbWUgaXMgcmVjb3JkZWQgd2hlbiB0aGUg ZW50cnkgaXMgc2V0IHRvIERPTkUsCmFuZCB0aGF0IGEgbm90ZSBpcyByZWNvcmRlZCB3aGVuIHN3 aXRjaGluZyB0byBXQUlUIG9yIENBTkNFTEVELiAgVGhlCnNhbWUgc3ludGF4IHdvcmtzIGFsc28g d2hlbiBzZXR0aW5nIH5vcmctdG9kby1rZXl3b3Jkc34uCgoqKiBQcmlvcml0aWVzCjpQUk9QRVJU SUVTOgo6REVTQ1JJUFRJT046IFNvbWUgdGhpbmdzIGFyZSBtb3JlIGltcG9ydGFudCB0aGFuIG90 aGVycwo6RU5EOgoKSWYgeW91IHVzZSBPcmcgbW9kZSBleHRlbnNpdmVseSwgeW91IG1heSBlbmQg dXAgd2l0aCBlbm91Z2ggVE9ETyBpdGVtcwp0aGF0IGl0IHN0YXJ0cyB0byBtYWtlIHNlbnNlIHRv IHByaW9yaXRpemUgdGhlbS4gIFByaW9yaXRpemluZyBjYW4gYmUKZG9uZSBieSBwbGFjaW5nIGEg L3ByaW9yaXR5IGNvb2tpZS8gaW50byB0aGUgaGVhZGxpbmUgb2YgYSBUT0RPIGl0ZW0sCmxpa2Ug dGhpcwoKIytiZWdpbl9zcmMgb3JnCiAgLCoqKiBUT0RPIFsjQV0gV3JpdGUgbGV0dGVyIHRvIFNh bSBGb3J0dW5lCiMrZW5kX3NyYwoKQEBpbmZvOkBub2luZGVudEBAIE9yZyBtb2RlIHN1cHBvcnRz IHRocmVlIHByaW9yaXRpZXM6CkBAaW5mbzpAc2FtcHtBfUBALCBAQGluZm86QHNhbXB7Qn1AQCwg YW5kIEBAaW5mbzpAc2FtcHtDfUBALgpAQGluZm86QHNhbXB7QX1AQCBpcyB0aGUgaGlnaGVzdCwg QEBpbmZvOkBzYW1we0J9QEAgdGhlIGRlZmF1bHQgaWYKbm9uZSBpcyBnaXZlbi4gIFByaW9yaXRp ZXMgbWFrZSBhIGRpZmZlcmVuY2Ugb25seSBpbiB0aGUgYWdlbmRhLgoKLSBAQGluZm86QGtiZHtD LWMgLH1AQCA6OiBTZXQgdGhlIHByaW9yaXR5IG9mIHRoZSBjdXJyZW50IGhlYWRsaW5lLgogICAg IFByZXNzIEBAaW5mbzpAc2FtcHtBfUBALCBAQGluZm86QHNhbXB7Qn1AQCBvciBAQGluZm86QHNh bXB7Q31AQAogICAgIHRvIHNlbGVjdCBhIHByaW9yaXR5LCBvciBAQGluZm86QGtleXtTUEN9QEAg dG8gcmVtb3ZlIHRoZSBjb29raWUuCi0gUy1AQGluZm86QGtleXt1cH1AQCA6OiBAQGluZm86QGl0 ZW14IFMtQGtleXtkb3dufUBACiAgICAgSW5jcmVhc2UvZGVjcmVhc2UgcHJpb3JpdHkgb2YgY3Vy cmVudCBoZWFkbGluZQoKKiogQnJlYWtpbmcgZG93biB0YXNrcwo6UFJPUEVSVElFUzoKOkRFU0NS SVBUSU9OOiBTcGxpdHRpbmcgYSB0YXNrIGludG8gbWFuYWdlYWJsZSBwaWVjZXMKOkVORDoKCkl0 IGlzIG9mdGVuIGFkdmlzYWJsZSB0byBicmVhayBkb3duIGxhcmdlIHRhc2tzIGludG8gc21hbGxl ciwgbWFuYWdlYWJsZQpzdWJ0YXNrcy4gIFlvdSBjYW4gZG8gdGhpcyBieSBjcmVhdGluZyBhbiBv dXRsaW5lIHRyZWUgYmVsb3cgYSBUT0RPIGl0ZW0sCndpdGggZGV0YWlsZWQgc3VidGFza3Mgb24g dGhlIHRyZWUuICBUbyBrZWVwIHRoZSBvdmVydmlldyBvdmVyIHRoZSBmcmFjdGlvbgpvZiBzdWJ0 YXNrcyB0aGF0IGFyZSBhbHJlYWR5IGNvbXBsZXRlZCwgaW5zZXJ0IGVpdGhlciBAQGluZm86QHNh bXB7Wy9dfUBAIG9yCkBAaW5mbzpAc2FtcHtbJV19QEAgYW55d2hlcmUgaW4gdGhlIGhlYWRsaW5l LiAgVGhlc2UgY29va2llcyB3aWxsIGJlIHVwZGF0ZWQgZWFjaCB0aW1lCnRoZSBUT0RPIHN0YXR1 cyBvZiBhIGNoaWxkIGNoYW5nZXMsIG9yIHdoZW4gcHJlc3NpbmcgQEBpbmZvOkBrYmR7Qy1jIEMt Y31AQCBvbiB0aGUKY29va2llLiAgRm9yIGV4YW1wbGU6CgojK2JlZ2luX3NyYyBvcmcKICAsKiBP cmdhbml6ZSBQYXJ0eSBbMzMlXQogICwqKiBUT0RPIENhbGwgcGVvcGxlIFsxLzJdCiAgLCoqKiBU T0RPIFBldGVyCiAgLCoqKiBET05FIFNhcmFoCiAgLCoqIFRPRE8gQnV5IGZvb2QKICAsKiogRE9O RSBUYWxrIHRvIG5laWdoYm9yCiMrZW5kX3NyYwoqKiBDaGVja2JveGVzCjpQUk9QRVJUSUVTOgo6 REVTQ1JJUFRJT046IFRpY2stb2ZmIGxpc3RzCjpFTkQ6CgpFdmVyeSBpdGVtIGluIGEgcGxhaW4g bGlzdCAoW1tQbGFpbiBsaXN0c11dKSBjYW4gYmUgbWFkZSBpbnRvIGEgY2hlY2tib3gKYnkgc3Rh cnRpbmcgaXQgd2l0aCB0aGUgc3RyaW5nIEBAaW5mbzpAc2FtcHtbIF19QEAuICBDaGVja2JveGVz IGFyZQpub3QgaW5jbHVkZWQgaW50byB0aGUgZ2xvYmFsIFRPRE8gbGlzdCwgc28gdGhleSBhcmUg b2Z0ZW4gZ3JlYXQgdG8Kc3BsaXQgYSB0YXNrIGludG8gYSBudW1iZXIgb2Ygc2ltcGxlIHN0ZXBz LiAgCkhlcmUgaXMgYW4gZXhhbXBsZSBvZiBhIGNoZWNrYm94IGxpc3QuCgojK2JlZ2luX3NyYyBv cmcKICAsKiBUT0RPIE9yZ2FuaXplIHBhcnR5IFsxLzNdCiAgLCAgLSBbLV0gY2FsbCBwZW9wbGUg WzEvMl0KICAsICAgIC0gWyBdIFBldGVyCiAgLCAgICAtIFtYXSBTYXJhaAogICwgIC0gW1hdIG9y ZGVyIGZvb2QKICAsICAtIFsgXSB0aGluayBhYm91dCB3aGF0IG11c2ljIHRvIHBsYXkKIytlbmRf c3JjCgpDaGVja2JveGVzIHdvcmsgaGllcmFyY2hpY2FsbHksIHNvIGlmIGEgY2hlY2tib3ggaXRl bSBoYXMgY2hpbGRyZW4gdGhhdAphcmUgY2hlY2tib3hlcywgdG9nZ2xpbmcgb25lIG9mIHRoZSBj aGlsZHJlbiBjaGVja2JveGVzIHdpbGwgbWFrZSB0aGUKcGFyZW50IGNoZWNrYm94IHJlZmxlY3Qg aWYgbm9uZSwgc29tZSwgb3IgYWxsIG9mIHRoZSBjaGlsZHJlbiBhcmUKY2hlY2tlZC4KCkBAaW5m bzpAbm9pbmRlbnRAQCBUaGUgZm9sbG93aW5nIGNvbW1hbmRzIHdvcmsgd2l0aCBjaGVja2JveGVz OgoKLSBDLWMgQy1jIDo6IFRvZ2dsZSBjaGVja2JveCBzdGF0dXMgb3IgKHdpdGggcHJlZml4IGFy ZykgY2hlY2tib3gKICAgICAgICAgICAgIHByZXNlbmNlIGF0IHBvaW50LgotIE0tUy1AQGluZm86 QGtleXtSRVR9QEAgOjogSW5zZXJ0IGEgbmV3IGl0ZW0gd2l0aCBhIGNoZWNrYm94LiAgVGhpcwog ICAgIHdvcmtzIG9ubHkgaWYgdGhlIGN1cnNvciBpcyBhbHJlYWR5IGluIGEgcGxhaW4gbGlzdCBp dGVtIChbW1BsYWluIGxpc3RzXV0pLgoKQEBpbmZvOkBub2luZGVudEBAICpGdXJ0aGVyIFJlYWRp bmcqXFwKW1todHRwOi8vb3JnbW9kZS5vcmcvbWFudWFsL1RPRE8tSXRlbXMuaHRtbCNUT0RPLUl0 ZW1zXVtDaGFwdGVyIDUgb2YgdGhlIG1hbnVhbF1dXFwKW1todHRwOi8vb3JnbW9kZS5vcmcvd29y Zy9vcmctdHV0b3JpYWxzL29yZ3R1dG9yaWFsX2R0by5waHBdW0RhdmlkIE8nVG9vbGUncyBpbnRy b2R1Y3RvcnkgdHV0b3JpYWxdXVxcCltbaHR0cDovL21lbWJlcnMub3B0dXNuZXQuY29tLmF1L35j aGFybGVzNTcvR1REL2d0ZF93b3JrZmxvdy5odG1sXVtDaGFybGVzIENhdmUncyBHVEQgc2V0dXBd XQoKKiBUYWdzCjpQUk9QRVJUSUVTOgo6REVTQ1JJUFRJT046IFRhZ2dpbmcgaGVhZGxpbmVzIGFu ZCBtYXRjaGluZyBzZXRzIG9mIHRhZ3MKOkVORDoKCkFuIGV4Y2VsbGVudCB3YXkgdG8gaW1wbGVt ZW50IGxhYmVscyBhbmQgY29udGV4dHMgZm9yCmNyb3NzLWNvcnJlbGF0aW5nIGluZm9ybWF0aW9u IGlzIHRvIGFzc2lnbiAvdGFncy8gdG8gaGVhZGxpbmVzLiAgT3JnCm1vZGUgaGFzIGV4dGVuc2l2 ZSBzdXBwb3J0IGZvciB0YWdzLgoKRXZlcnkgaGVhZGxpbmUgY2FuIGNvbnRhaW4gYSBsaXN0IG9m IHRhZ3M7IHRoZXkgb2NjdXIgYXQgdGhlIGVuZCBvZgp0aGUgaGVhZGxpbmUuICBUYWdzIGFyZSBu b3JtYWwgd29yZHMgY29udGFpbmluZyBsZXR0ZXJzLCBudW1iZXJzLApAQGluZm86QHNhbXB7X31A QCwgYW5kIEBAaW5mbzpAc2FtcHtAQH1AQC4gIFRhZ3MgbXVzdCBiZSBwcmVjZWRlZCBhbmQKZm9s bG93ZWQgYnkgYSBzaW5nbGUgY29sb24sIGUuZy4sIEBAaW5mbzpAc2FtcHs6d29yazp9QEAuICBT ZXZlcmFsCnRhZ3MgY2FuIGJlIHNwZWNpZmllZCwgYXMgaW4gQEBpbmZvOkBzYW1wezp3b3JrOnVy Z2VudDp9QEAuICBUYWdzIHdpbGwKYnkgZGVmYXVsdCBiZSBpbiBib2xkIGZhY2Ugd2l0aCB0aGUg c2FtZSBjb2xvciBhcyB0aGUgaGVhZGxpbmUuCgoqKiBUYWcgaW5oZXJpdGFuY2UKOlBST1BFUlRJ RVM6CjpERVNDUklQVElPTjogVGFncyB1c2UgdGhlIHRyZWUgc3RydWN0dXJlIG9mIHRoZSBvdXRs aW5lCjpFTkQ6CgovVGFncy8gbWFrZSB1c2Ugb2YgdGhlIGhpZXJhcmNoaWNhbCBzdHJ1Y3R1cmUg b2Ygb3V0bGluZSB0cmVlcy4gIElmIGEKaGVhZGluZyBoYXMgYSBjZXJ0YWluIHRhZywgYWxsIHN1 YmhlYWRpbmdzIHdpbGwgaW5oZXJpdCB0aGUgdGFnIGFzCndlbGwuICBGb3IgZXhhbXBsZSwgaW4g dGhlIGxpc3QKCiMrYmVnaW5fc3JjIG9yZwogICwqIE1lZXRpbmcgd2l0aCB0aGUgRnJlbmNoIGdy b3VwICAgICAgOndvcms6CiAgLCoqIFN1bW1hcnkgYnkgRnJhbmsgICAgICAgICAgICAgICAgICA6 Ym9zczpub3RlczoKICAsKioqIFRPRE8gUHJlcGFyZSBzbGlkZXMgZm9yIGhpbSAgICAgIDphY3Rp b246CiMrZW5kX3NyYwoKQEBpbmZvOkBub2luZGVudEBACnRoZSBmaW5hbCBoZWFkaW5nIHdpbGwg aGF2ZSB0aGUgdGFncyBAQGluZm86QHNhbXB7Ondvcms6fUBALCBAQGluZm86QHNhbXB7OmJvc3M6 fUBALApAQGluZm86QHNhbXB7Om5vdGVzOn1AQCwgYW5kIEBAaW5mbzpAc2FtcHs6YWN0aW9uOn1A QCBldmVuIHRob3VnaCB0aGUgZmluYWwgaGVhZGluZyBpcyBub3QKZXhwbGljaXRseSBtYXJrZWQg d2l0aCB0aG9zZSB0YWdzLiAgWW91IGNhbiBhbHNvIHNldCB0YWdzIHRoYXQgYWxsIGVudHJpZXMg aW4KYSBmaWxlIHNob3VsZCBpbmhlcml0IGp1c3QgYXMgaWYgdGhlc2UgdGFncyB3ZXJlIGRlZmlu ZWQgaW4gYSBoeXBvdGhldGljYWwKbGV2ZWwgemVybyB0aGF0IHN1cnJvdW5kcyB0aGUgZW50aXJl IGZpbGUuICBVc2UgYSBsaW5lIGxpa2UgdGhpc1tmbjo2XToKCiMrYmVnaW5fc3JjIG9yZwogICwj K0ZJTEVUQUdTOiA6UGV0ZXI6Qm9zczpTZWNyZXQ6CiMrZW5kX3NyYwoKKiogU2V0dGluZyB0YWdz CjpQUk9QRVJUSUVTOgo6REVTQ1JJUFRJT046IEhvdyB0byBhc3NpZ24gdGFncyB0byBhIGhlYWRs aW5lCjpFTkQ6CgpUYWdzIGNhbiBzaW1wbHkgYmUgdHlwZWQgaW50byB0aGUgYnVmZmVyIGF0IHRo ZSBlbmQgb2YgYSBoZWFkbGluZS4KQWZ0ZXIgYSBjb2xvbiwgQEBpbmZvOkBrYmR7TS1Aa2V5e1RB Qn19QEAgb2ZmZXJzIGNvbXBsZXRpb24gb24gdGFncy4KVGhlcmUgaXMgYWxzbyBhIHNwZWNpYWwg Y29tbWFuZCBmb3IgaW5zZXJ0aW5nIHRhZ3M6CgotIEMtYyBDLXEgOjogRW50ZXIgbmV3IHRhZ3Mg Zm9yIHRoZSBjdXJyZW50IGhlYWRsaW5lLiAgT3JnIG1vZGUgd2lsbAogICAgICAgICAgICAgZWl0 aGVyIG9mZmVyIGNvbXBsZXRpb24gb3IgYSBzcGVjaWFsIHNpbmdsZS1rZXkgaW50ZXJmYWNlCiAg ICAgICAgICAgICBmb3Igc2V0dGluZyB0YWdzLCBzZWUgYmVsb3cuICBBZnRlciBwcmVzc2luZwog ICAgICAgICAgICAgQEBpbmZvOkBrZXl7UkVUfUBALCB0aGUgdGFncyB3aWxsIGJlIGluc2VydGVk IGFuZCBhbGlnbmVkCiAgICAgICAgICAgICB0byB+b3JnLXRhZ3MtY29sdW1ufi4gIFdoZW4gY2Fs bGVkIHdpdGggYQogICAgICAgICAgICAgQEBpbmZvOkBrYmR7Qy11fUBAIHByZWZpeCwgYWxsIHRh Z3MgaW4gdGhlIGN1cnJlbnQgYnVmZmVyCiAgICAgICAgICAgICB3aWxsIGJlIGFsaWduZWQgdG8g dGhhdCBjb2x1bW4sIGp1c3QgdG8gbWFrZSB0aGluZ3MgbG9vawogICAgICAgICAgICAgbmljZS4K LSBDLWMgQy1jIDo6IFdoZW4gdGhlIGN1cnNvciBpcyBpbiBhIGhlYWRsaW5lLCB0aGlzIGRvZXMg dGhlIHNhbWUgYXMKICAgICAgICAgICAgIEBAaW5mbzpAa2Jke0MtYyBDLXF9QEAuCgpPcmcgd2ls bCBzdXBwb3J0IHRhZyBpbnNlcnRpb24gYmFzZWQgb24gYSAvbGlzdCBvZiB0YWdzLy4gIEJ5IGRl ZmF1bHQKdGhpcyBsaXN0IGlzIGNvbnN0cnVjdGVkIGR5bmFtaWNhbGx5LCBjb250YWluaW5nIGFs bCB0YWdzIGN1cnJlbnRseQp1c2VkIGluIHRoZSBidWZmZXIuICBZb3UgbWF5IGFsc28gZ2xvYmFs bHkgc3BlY2lmeSBhIGhhcmQgbGlzdCBvZiB0YWdzCndpdGggdGhlIHZhcmlhYmxlIH5vcmctdGFn LWFsaXN0fi4gIEZpbmFsbHkgeW91IGNhbiBzZXQgdGhlIGRlZmF1bHQKdGFncyBmb3IgYSBnaXZl biBmaWxlIHdpdGggbGluZXMgbGlrZQoKQHNtYWxsZXhhbXBsZQojK1RBR1M6IEBAd29yayBAQGhv bWUgQEB0ZW5uaXNjbHViCiMrVEFHUzogbGFwdG9wIGNhciBwYyBzYWlsYm9hdApAZW5kIHNtYWxs ZXhhbXBsZQoKQnkgZGVmYXVsdCBPcmcgbW9kZSB1c2VzIHRoZSBzdGFuZGFyZCBtaW5pYnVmZmVy IGNvbXBsZXRpb24gZmFjaWxpdGllcwpmb3IgZW50ZXJpbmcgdGFncy4gIEhvd2V2ZXIsIGl0IGFs c28gaW1wbGVtZW50cyBhbm90aGVyLCBxdWlja2VyLCB0YWcKc2VsZWN0aW9uIG1ldGhvZCBjYWxs ZWQgL2Zhc3QgdGFnIHNlbGVjdGlvbi8uICBUaGlzIGFsbG93cyB5b3UgdG8Kc2VsZWN0IGFuZCBk ZXNlbGVjdCB0YWdzIHdpdGgganVzdCBhIHNpbmdsZSBrZXkgcHJlc3MuICBGb3IgdGhpcyB0bwp3 b3JrIHdlbGwgeW91IHNob3VsZCBhc3NpZ24gdW5pcXVlIGxldHRlcnMgdG8gbW9zdCBvZiB5b3Vy IGNvbW1vbmx5CnVzZWQgdGFncy4gIFlvdSBjYW4gZG8gdGhpcyBnbG9iYWxseSBieSBjb25maWd1 cmluZyB0aGUgdmFyaWFibGUKfm9yZy10YWctYWxpc3R+IGluIHlvdXIgQEBpbmZvOkBmaWxley5l bWFjc31AQCBmaWxlLiAgRm9yIGV4YW1wbGUsIHlvdQptYXkgZmluZCB0aGUgbmVlZCB0byB0YWcg bWFueSBpdGVtcyBpbiBkaWZmZXJlbnQgZmlsZXMgd2l0aApAQGluZm86QHNhbXB7OkBAaG9tZTp9 QEAuICBJbiB0aGlzIGNhc2UgeW91IGNhbiBzZXQgc29tZXRoaW5nIGxpa2U6CgojK2JlZ2luX3Ny YyBlbWFjcy1saXNwCihzZXRxIG9yZy10YWctYWxpc3QgJygoIkBAd29yayIgLiA/dykgKCJAQGhv bWUiIC4gP2gpICgibGFwdG9wIiAuID9sKSkpCiMrZW5kX3NyYwoKQEBpbmZvOkBub2luZGVudEBA IElmIHRoZSB0YWcgaXMgb25seSByZWxldmFudCB0byB0aGUgZmlsZSB5b3UgYXJlCndvcmtpbmcg b24sIHRoZW4geW91IGNhbiBpbnN0ZWFkIHNldCB0aGUgVEFHUyBvcHRpb24gbGluZSBhczoKCiMr YmVnaW5fc3JjIG9yZwogICwjK1RBR1M6IEBAd29yayh3KSAgQEBob21lKGgpICBAQHRlbm5pc2Ns dWIodCkgIGxhcHRvcChsKSAgcGMocCkKIytlbmRfc3JjCgoqKiBUYWcgc2VhcmNoZXMKOlBST1BF UlRJRVM6CjpERVNDUklQVElPTjogU2VhcmNoaW5nIGZvciBjb21iaW5hdGlvbnMgb2YgdGFncwo6 RU5EOgoKT25jZSBhIHN5c3RlbSBvZiB0YWdzIGhhcyBiZWVuIHNldCB1cCwgaXQgY2FuIGJlIHVz ZWQgdG8gY29sbGVjdCByZWxhdGVkCmluZm9ybWF0aW9uIGludG8gc3BlY2lhbCBsaXN0cy4KCi0g Qy1jIFwgOjogQEBpbmZvOkBpdGVteCBDLWMgLyBtQEAgCiAgICAgICAgICAgQ3JlYXRlIGEgc3Bh cnNlIHRyZWUgd2l0aCBhbGwgaGVhZGxpbmVzIG1hdGNoaW5nIGEgdGFncwogICAgICAgICAgIHNl YXJjaC4gIFdpdGggYSBAQGluZm86QGtiZHtDLXV9QEAgcHJlZml4IGFyZ3VtZW50LCBpZ25vcmUK ICAgICAgICAgICBoZWFkbGluZXMgdGhhdCBhcmUgbm90IGEgVE9ETyBsaW5lLgoKLSBDLWMgYSBt IDo6IENyZWF0ZSBhIGdsb2JhbCBsaXN0IG9mIHRhZyBtYXRjaGVzIGZyb20gYWxsIGFnZW5kYQog ICAgICAgICAgICAgZmlsZXMuIFtbTWF0Y2hpbmcgdGFncyBhbmQgcHJvcGVydGllc11dLgotIEMt YyBhIE0gOjogQ3JlYXRlIGEgZ2xvYmFsIGxpc3Qgb2YgdGFnIG1hdGNoZXMgZnJvbSBhbGwgYWdl bmRhCiAgICAgICAgICAgICBmaWxlcywgYnV0IGNoZWNrIG9ubHkgVE9ETyBpdGVtcyBhbmQgZm9y Y2UgY2hlY2tpbmcKICAgICAgICAgICAgIHN1Yml0ZW1zIChzZWUgdmFyaWFibGUgfm9yZy10YWdz LW1hdGNoLWxpc3Qtc3VibGV2ZWxzfikuCgpUaGVzZSBjb21tYW5kcyBhbGwgcHJvbXB0IGZvciBh IG1hdGNoIHN0cmluZyB3aGljaCBhbGxvd3MgYmFzaWMKQm9vbGVhbiBsb2dpYyBsaWtlIEBAaW5m bzpAc2FtcHsrYm9zcyt1cmdlbnQtcHJvamVjdDF9QEAsIHRvIGZpbmQKZW50cmllcyB3aXRoIHRh Z3MgQEBpbmZvOkBzYW1we2Jvc3N9QEAgYW5kIEBAaW5mbzpAc2FtcHt1cmdlbnR9QEAsIGJ1dApu b3QgQEBpbmZvOkBzYW1we3Byb2plY3QxfUBALCBvciBAQGluZm86QHNhbXB7S2F0aHl8U2FsbHl9 QEAgdG8gZmluZAplbnRyaWVzIHdoaWNoIGFyZSB0YWdnZWQsIGxpa2UgQEBpbmZvOkBzYW1we0th dGh5fUBAIG9yCkBAaW5mbzpAc2FtcHtTYWxseX1AQC4gIFRoZSBmdWxsIHN5bnRheCBvZiB0aGUg c2VhcmNoIHN0cmluZyBpcyByaWNoCmFuZCBhbGxvd3MgYWxzbyBtYXRjaGluZyBhZ2FpbnN0IFRP RE8ga2V5d29yZHMsIGVudHJ5IGxldmVscyBhbmQKcHJvcGVydGllcy4gIEZvciBhIGNvbXBsZXRl IGRlc2NyaXB0aW9uIHdpdGggbWFueSBleGFtcGxlcywgc2VlCltbTWF0Y2hpbmcgdGFncyBhbmQg cHJvcGVydGllc11dLgoKQEBpbmZvOkBub2luZGVudEBAICpGdXJ0aGVyIFJlYWRpbmcqXFwKW1to dHRwOi8vb3JnbW9kZS5vcmcvbWFudWFsL1RhZ3MuaHRtbCNUYWdzXVtDaGFwdGVyIDYgb2YgdGhl IG1hbnVhbF1dXFwKW1todHRwOi8vc2FjaGFjaHVhLmNvbS93cC8yMDA4LzAxL3RhZ2dpbmctaW4t b3JnLXBsdXMtYm9udXMtY29kZS1mb3ItdGltZWNsb2Nrcy1hbmQtdGFncy9dW1NhY2hhIENodWEn cyBhcnRpY2xlIGFib3V0IHRhZ2dpbmcgaW4gT3JnLW1vZGVdXQoKKiBQcm9wZXJ0aWVzCjpQUk9Q RVJUSUVTOgo6REVTQ1JJUFRJT046IFByb3BlcnRpZXMKOkVORDoKClByb3BlcnRpZXMgYXJlIGtl eS12YWx1ZSBwYWlycyBhc3NvY2lhdGVzIHdpdGggYW5kIGVudHJ5LiAgVGhleSBsaXZlCmluIGEg c3BlY2lhbCBkcmF3ZXIgd2l0aCB0aGUgbmFtZSB+UFJPUEVSVElFU34uICBFYWNoIHByb3BlcnR5 IGlzCnNwZWNpZmllZCBvbiBhIHNpbmdsZSBsaW5lLCB3aXRoIHRoZSBrZXkgKHN1cnJvdW5kZWQg YnkgY29sb25zKSBmaXJzdCwKYW5kIHRoZSB2YWx1ZSBhZnRlciBpdDoKCiMrYmVnaW5fc3JjIG9y ZwogICwqIENEIGNvbGxlY3Rpb24KICAsKiogQ2xhc3NpYwogICwqKiogR29sZGJlcmcgVmFyaWF0 aW9ucwogICwgICAgOlBST1BFUlRJRVM6CiAgLCAgICA6VGl0bGU6ICAgICBHb2xkYmVyZyBWYXJp YXRpb25zCiAgLCAgICA6Q29tcG9zZXI6ICBKLlMuIEJhY2gKICAsICAgIDpQdWJsaXNoZXI6IERl dXRzY2hlIEdyYW1tb3Bob24KICAsICAgIDpORGlza3M6ICAgIDEKICAsICAgIDpFTkQ6CiMrZW5k X3NyYwoKWW91IG1heSBkZWZpbmUgdGhlIGFsbG93ZWQgdmFsdWVzIGZvciBhIHBhcnRpY3VsYXIg cHJvcGVydHkKQEBpbmZvOkBzYW1wezpYeXo6fUBAIGJ5IHNldHRpbmcgYSBwcm9wZXJ0eSBAQGlu Zm86QHNhbXB7Olh5el9BTEw6fUBALgpUaGlzIHNwZWNpYWwgcHJvcGVydHkgaXMgQEBpbmZvOkBl bXBoe2luaGVyaXRlZH1AQCwgc28gaWYgeW91IHNldCBpdAppbiBhIGxldmVsIDEgZW50cnksIGl0 IHdpbGwgYXBwbHkgdG8gdGhlIGVudGlyZSB0cmVlLiAgV2hlbiBhbGxvd2VkCnZhbHVlcyBhcmUg ZGVmaW5lZCwgc2V0dGluZyB0aGUgY29ycmVzcG9uZGluZyBwcm9wZXJ0eSBiZWNvbWVzIGVhc2ll cgphbmQgaXMgbGVzcyBwcm9uZSB0byB0eXBpbmcgZXJyb3JzLiAgRm9yIHRoZSBleGFtcGxlIHdp dGggdGhlIENECmNvbGxlY3Rpb24sIHdlIGNhbiBwcmVkZWZpbmUgcHVibGlzaGVycyBhbmQgdGhl IG51bWJlciBvZiBkaXNrcyBpbiBhCmJveCBsaWtlIHRoaXM6CgojK2JlZ2luX3NyYyBvcmcKICAs KiBDRCBjb2xsZWN0aW9uCiAgLCAgOlBST1BFUlRJRVM6CiAgLCAgOk5EaXNrc19BTEw6ICAxIDIg MyA0CiAgLCAgOlB1Ymxpc2hlcl9BTEw6ICJEZXV0c2NoZSBHcmFtbW9waG9uIiBQaGlsaXBzIEVN SQogICwgIDpFTkQ6CiMrZW5kX3NyYwpvciBnbG9iYWxseSB1c2luZyB+b3JnLWdsb2JhbC1wcm9w ZXJ0aWVzfiwgb3IgZmlsZS13aWRlIGxpa2UgdGhpczoKIytiZWdpbl9zcmMgb3JnCiAgLCMrUFJP UEVSVFk6IE5EaXNrc19BTEwgMSAyIDMgNAojK2VuZF9zcmMKCi0gQy1jIEMteCBwIDo6IFNldCBh IHByb3BlcnR5LiAgVGhpcyBwcm9tcHRzIGZvciBhIHByb3BlcnR5IG5hbWUgYW5kIGEKICAgICAg ICAgICAgICAgdmFsdWUuCi0gQy1jIEMtYyBkIDo6IFJlbW92ZSBhIHByb3BlcnR5IGZyb20gdGhl IGN1cnJlbnQgZW50cnkuCgpUbyBjcmVhdGUgc3BhcnNlIHRyZWVzIGFuZCBzcGVjaWFsIGxpc3Rz IHdpdGggc2VsZWN0aW9uIGJhc2VkIG9uCnByb3BlcnRpZXMsIHRoZSBzYW1lIGNvbW1hbmRzIGFy ZSB1c2VkIGFzIGZvciB0YWcgc2VhcmNoZXMgKFtbVGFnJTIwc2VhcmNoZXNdW1RhZyBzZWFyY2hl c11dKS4KVGhlIHN5bnRheCBmb3IgdGhlIHNlYXJjaCBzdHJpbmcgaXMgZGVzY3JpYmVkIGluIFtb TWF0Y2hpbmclMjB0YWdzJTIwYW5kJTIwcHJvcGVydGllc11bTWF0Y2hpbmcgdGFncyBhbmQgcHJv cGVydGllc11dLgoKQEBpbmZvOkBub2luZGVudEBAICpGdXJ0aGVyIFJlYWRpbmcqXFwKW1todHRw Oi8vb3JnbW9kZS5vcmcvbWFudWFsL1Byb3BlcnRpZXMtYW5kLUNvbHVtbnMuaHRtbCNQcm9wZXJ0 aWVzLWFuZC1Db2x1bW5zXVtDaGFwdGVyIDcgb2YgdGhlIG1hbnVhbF1dXFwKW1todHRwOi8vb3Jn bW9kZS5vcmcvd29yZy9vcmctdHV0b3JpYWxzL29yZy1jb2x1bW4tdmlldy10dXRvcmlhbC5waHBd W0Jhc3RpZW4gR3VlcnJ5J3MgY29sdW1uIHZpZXcgdHV0b3JpYWxdXQoKKiBEYXRlcyBhbmQgVGlt ZXMKOlBST1BFUlRJRVM6CjpERVNDUklQVElPTjogTWFraW5nIGl0ZW1zIHVzZWZ1bCBmb3IgcGxh bm5pbmcKOkVORDoKClRvIGFzc2lzdCBwcm9qZWN0IHBsYW5uaW5nLCBUT0RPIGl0ZW1zIGNhbiBi ZSBsYWJlbGVkIHdpdGggYSBkYXRlIGFuZC9vcgphIHRpbWUuICBUaGUgc3BlY2lhbGx5IGZvcm1h dHRlZCBzdHJpbmcgY2FycnlpbmcgdGhlIGRhdGUgYW5kIHRpbWUKaW5mb3JtYXRpb24gaXMgY2Fs bGVkIGEgL3RpbWVzdGFtcC8gaW4gT3JnIG1vZGUuCgoqKiBUaW1lc3RhbXBzCjpQUk9QRVJUSUVT Ogo6REVTQ1JJUFRJT046IEFzc2lnbmluZyBhIHRpbWUgdG8gYSB0cmVlIGVudHJ5CjpFTkQ6CgpB IHRpbWVzdGFtcCBpcyBhIHNwZWNpZmljYXRpb24gb2YgYSBkYXRlIChwb3NzaWJseSB3aXRoIGEg dGltZSBvciBhCnJhbmdlIG9mIHRpbWVzKSBpbiBhIHNwZWNpYWwgZm9ybWF0LCBlaXRoZXIgQEBp bmZvOkBzYW1wezwyMDAzLTA5LTE2ClR1ZT59QEAgb3IgQEBpbmZvOkBzYW1wezwyMDAzLTA5LTE2 IFR1ZSAwOTozOT59QEAgb3IKQEBpbmZvOkBzYW1wezwyMDAzLTA5LTE2IFR1ZSAxMjowMC0xMjoz MD59QEAuICBBIHRpbWVzdGFtcCBjYW4gYXBwZWFyCmFueXdoZXJlIGluIHRoZSBoZWFkbGluZSBv ciBib2R5IG9mIGFuIE9yZyB0cmVlIGVudHJ5LiAgSXRzIHByZXNlbmNlCmNhdXNlcyBlbnRyaWVz IHRvIGJlIHNob3duIG9uIHNwZWNpZmljIGRhdGVzIGluIHRoZSBhZ2VuZGEKKFtbV2Vla2x5L2Rh aWx5IGFnZW5kYV1dKS4gIFdlIGRpc3Rpbmd1aXNoOgoKQEBpbmZvOkBub2luZGVudEBAICpQbGFp biB0aW1lc3RhbXA7IEV2ZW50OyBBcHBvaW50bWVudCpcXApBIHNpbXBsZSB0aW1lc3RhbXAganVz dCBhc3NpZ25zIGEgZGF0ZS90aW1lIHRvIGFuIGl0ZW0uICBUaGlzIGlzIGp1c3QKbGlrZSB3cml0 aW5nIGRvd24gYW4gYXBwb2ludG1lbnQgb3IgZXZlbnQgaW4gYSBwYXBlciBhZ2VuZGEuCgojK2Jl Z2luX3NyYyBvcmcKICAsKiBNZWV0IFBldGVyIGF0IHRoZSBtb3ZpZXMKICAsICA8MjAwNi0xMS0w MSBXZWQgMTk6MTU+CiAgLCogRGlzY3Vzc2lvbiBvbiBjbGltYXRlIGNoYW5nZQogICwgIDwyMDA2 LTExLTAyIFRodSAyMDowMC0yMjowMD4KIytlbmRfc3JjCgpAQGluZm86QG5vaW5kZW50QEAgKlRp bWVzdGFtcCB3aXRoIHJlcGVhdGVyIGludGVydmFsKlxcCkEgdGltZXN0YW1wIG1heSBjb250YWlu IGEgL3JlcGVhdGVyIGludGVydmFsLywgaW5kaWNhdGluZyB0aGF0IGl0CmFwcGxpZXMgbm90IG9u bHkgb24gdGhlIGdpdmVuIGRhdGUsIGJ1dCBhZ2FpbiBhbmQgYWdhaW4gYWZ0ZXIgYQpjZXJ0YWlu IGludGVydmFsIG9mIE4gZGF5cyAoZCksIHdlZWtzICh3KSwgbW9udGhzIChtKSwgb3IgeWVhcnMg KHkpLgpUaGUgZm9sbG93aW5nIHdpbGwgc2hvdyB1cCBpbiB0aGUgYWdlbmRhIGV2ZXJ5IFdlZG5l c2RheToKIytiZWdpbl9zcmMgb3JnCiAgLCogUGljayB1cCBTYW0gYXQgc2Nob29sCiAgLCAgPDIw MDctMDUtMTYgV2VkIDEyOjMwICsxdz4KIytlbmRfc3JjCgpAQGluZm86QG5vaW5kZW50QEAgKkRp YXJ5LXN0eWxlIHNleHAgZW50cmllcypcXApGb3IgbW9yZSBjb21wbGV4IGRhdGUgc3BlY2lmaWNh dGlvbnMsIE9yZyBtb2RlIHN1cHBvcnRzIHVzaW5nIHRoZQpzcGVjaWFsIHNleHAgZGlhcnkgZW50 cmllcyBpbXBsZW1lbnRlZCBpbiB0aGUgRW1hY3MgY2FsZW5kYXIvZGlhcnkKcGFja2FnZS4gIEZv ciBleGFtcGxlCiMrYmVnaW5fc3JjIG9yZwogICwqIFRoZSBuZXJkIG1lZXRpbmcgb24gZXZlcnkg Mm5kIFRodXJzZGF5IG9mIHRoZSBtb250aAogICwgIDwlJShkaWFyeS1mbG9hdCB0IDQgMik+CiMr ZW5kX3NyYwoKQEBpbmZvOkBub2luZGVudEBAICpUaW1lL0RhdGUgcmFuZ2UqXFwKVHdvIHRpbWVz dGFtcHMgY29ubmVjdGVkIGJ5IEBAaW5mbzpAc2FtcHstLX1AQCBkZW5vdGUgYSByYW5nZS4KIyti ZWdpbl9zcmMgb3JnCiAgLCoqIE1lZXRpbmcgaW4gQW1zdGVyZGFtCiAgLCAgIDwyMDA0LTA4LTIz IE1vbj4tLTwyMDA0LTA4LTI2IFRodT4KIytlbmRfc3JjCgpAQGluZm86QG5vaW5kZW50QEAgKklu YWN0aXZlIHRpbWVzdGFtcCpcXApKdXN0IGxpa2UgYSBwbGFpbiB0aW1lc3RhbXAsIGJ1dCB3aXRo IHNxdWFyZSBicmFja2V0cyBpbnN0ZWFkIG9mCmFuZ3VsYXIgb25lcy4gIFRoZXNlIHRpbWVzdGFt cHMgYXJlIGluYWN0aXZlIGluIHRoZSBzZW5zZSB0aGF0IHRoZXkgZG8KL25vdC8gdHJpZ2dlciBh biBlbnRyeSB0byBzaG93IHVwIGluIHRoZSBhZ2VuZGEuCgojK2JlZ2luX3NyYyBvcmcKICAsKiBH aWxsaWFuIGNvbWVzIGxhdGUgZm9yIHRoZSBmaWZ0aCB0aW1lCiAgLCAgWzIwMDYtMTEtMDEgV2Vk XQojK2VuZF9zcmMKCioqIENyZWF0aW5nIHRpbWVzdGFtcHMKOlBST1BFUlRJRVM6CjpERVNDUklQ VElPTjogQ29tbWFuZHMgd2hpY2ggaW5zZXJ0IHRpbWVzdGFtcHMKOkVORDoKCkZvciBPcmcgbW9k ZSB0byByZWNvZ25pemUgdGltZXN0YW1wcywgdGhleSBuZWVkIHRvIGJlIGluIHRoZSBzcGVjaWZp Ywpmb3JtYXQuICBBbGwgY29tbWFuZHMgbGlzdGVkIGJlbG93IHByb2R1Y2UgdGltZXN0YW1wcyBp biB0aGUgY29ycmVjdApmb3JtYXQuCgotIEMtYyAuIDo6IFByb21wdCBmb3IgYSBkYXRlIGFuZCBp bnNlcnQgYSBjb3JyZXNwb25kaW5nIHRpbWVzdGFtcC4KICAgICAgICAgICBXaGVuIHRoZSBjdXJz b3IgaXMgYXQgYW4gZXhpc3RpbmcgdGltZXN0YW1wIGluIHRoZSBidWZmZXIsCiAgICAgICAgICAg dGhlIGNvbW1hbmQgaXMgdXNlZCB0byBtb2RpZnkgdGhpcyB0aW1lc3RhbXAgaW5zdGVhZCBvZgog ICAgICAgICAgIGluc2VydGluZyBhIG5ldyBvbmUuICBXaGVuIHRoaXMgY29tbWFuZCBpcyB1c2Vk IHR3aWNlIGluCiAgICAgICAgICAgc3VjY2Vzc2lvbiwgYSB0aW1lIHJhbmdlIGlzIGluc2VydGVk LiAgV2l0aCBhIHByZWZpeCwgYWxzbwogICAgICAgICAgIGFkZCB0aGUgY3VycmVudCB0aW1lLgot IEMtYyAhIDo6IExpa2UgQEBpbmZvOkBrYmR7Qy1jIC59QEAsIGJ1dCBpbnNlcnQgYW4gaW5hY3Rp dmUgdGltZXN0YW1wCiAgICAgICAgICAgdGhhdCB3aWxsIG5vdCBjYXVzZSBhbiBhZ2VuZGEgZW50 cnkuCi0gUy1AQGluZm86QGtleXtsZWZ0fUByey99QGtleXtyaWdodH1AQCA6OiBDaGFuZ2UgZGF0 ZSBhdCBjdXJzb3IgYnkKICAgICBvbmUgZGF5LgotIFMtQEBpbmZvOkBrZXl7dXB9QHJ7L31Aa2V5 e2Rvd259QEAgOjogQ2hhbmdlIHRoZSBpdGVtIHVuZGVyIHRoZQogICAgIGN1cnNvciBpbiBhIHRp bWVzdGFtcC4gIFRoZSBjdXJzb3IgY2FuIGJlIG9uIGEgeWVhciwgbW9udGgsIGRheSwKICAgICBo b3VyIG9yIG1pbnV0ZS4gIFdoZW4gdGhlIHRpbWVzdGFtcCBjb250YWlucyBhIHRpbWUgcmFuZ2Ug bGlrZQogICAgIEBAaW5mbzpAc2FtcHsxNTozMC0xNjozMH1AQCwgbW9kaWZ5aW5nIHRoZSBmaXJz dCB0aW1lIHdpbGwgYWxzbwogICAgIHNoaWZ0IHRoZSBzZWNvbmQsIHNoaWZ0aW5nIHRoZSB0aW1l IGJsb2NrIHdpdGggY29uc3RhbnQgbGVuZ3RoLgogICAgIFRvIGNoYW5nZSB0aGUgbGVuZ3RoLCBt b2RpZnkgdGhlIHNlY29uZCB0aW1lLgoKV2hlbiBPcmcgbW9kZSBwcm9tcHRzIGZvciBhIGRhdGUv dGltZSwgaXQgd2lsbCBhY2NlcHQgYW55IHN0cmluZyBjb250YWluaW5nCnNvbWUgZGF0ZSBhbmQv b3IgdGltZSBpbmZvcm1hdGlvbiwgYW5kIGludGVsbGlnZW50bHkgaW50ZXJwcmV0IHRoZSBzdHJp bmcsCmRlcml2aW5nIGRlZmF1bHRzIGZvciB1bnNwZWNpZmllZCBpbmZvcm1hdGlvbiBmcm9tIHRo ZSBjdXJyZW50IGRhdGUgYW5kIHRpbWUuCllvdSBjYW4gYWxzbyBzZWxlY3QgYSBkYXRlIGluIHRo ZSBwb3AtdXAgY2FsZW5kYXIuICBTZWUgdGhlIG1hbnVhbCBmb3IgbW9yZQppbmZvcm1hdGlvbiBv biBob3cgZXhhY3RseSB0aGUgZGF0ZS90aW1lIHByb21wdCB3b3Jrcy4KCioqIERlYWRsaW5lcyBh bmQgc2NoZWR1bGluZwo6UFJPUEVSVElFUzoKOkRFU0NSSVBUSU9OOiBQbGFubmluZyB5b3VyIHdv cmsKOkVORDoKCkEgdGltZXN0YW1wIG1heSBiZSBwcmVjZWRlZCBieSBzcGVjaWFsIGtleXdvcmRz IHRvIGZhY2lsaXRhdGUgcGxhbm5pbmc6CgpAQGluZm86QG5vaW5kZW50QEAgKkRFQURMSU5FKlwK TWVhbmluZzogdGhlIHRhc2sgKG1vc3QgbGlrZWx5IGEgVE9ETyBpdGVtLCB0aG91Z2ggbm90IG5l Y2Vzc2FyaWx5KSBpcyBzdXBwb3NlZAp0byBiZSBmaW5pc2hlZCBvbiB0aGF0IGRhdGUuCgotIEMt YyBDLWQgOjogSW5zZXJ0IEBAaW5mbzpAc2FtcHtERUFETElORX1AQCBrZXl3b3JkIGFsb25nIHdp dGggYQogICAgICAgICAgICAgc3RhbXAsIGluIHRoZSBsaW5lIGZvbGxvd2luZyB0aGUgaGVhZGxp bmUuCgpPbiB0aGUgZGVhZGxpbmUgZGF0ZSwgdGhlIHRhc2sgd2lsbCBiZSBsaXN0ZWQgaW4gdGhl IGFnZW5kYS4gIEluCmFkZGl0aW9uLCB0aGUgYWdlbmRhIGZvciAvdG9kYXkvIHdpbGwgY2Fycnkg YSB3YXJuaW5nIGFib3V0IHRoZQphcHByb2FjaGluZyBvciBtaXNzZWQgZGVhZGxpbmUsIHN0YXJ0 aW5nIH5vcmctZGVhZGxpbmUtd2FybmluZy1kYXlzfgpiZWZvcmUgdGhlIGR1ZSBkYXRlLCBhbmQg Y29udGludWluZyB1bnRpbCB0aGUgZW50cnkgaXMgbWFya2VkIERPTkUuCkFuIGV4YW1wbGU6Cgoj K2JlZ2luX3NyYyBvcmcKICAsKioqIFRPRE8gd3JpdGUgYXJ0aWNsZSBhYm91dCB0aGUgRWFydGgg Zm9yIHRoZSBHdWlkZQogICwgICAgVGhlIGVkaXRvciBpbiBjaGFyZ2UgaXMgW1tiYmRiOkZvcmQg UHJlZmVjdF1dCiAgLCAgICBERUFETElORTogPDIwMDQtMDItMjkgU3VuPgojK2VuZF9zcmMKCkBA aW5mbzpAbm9pbmRlbnRAQCAqU0NIRURVTEVEKlxcCk1lYW5pbmc6IHlvdSBhcmUgL3BsYW5uaW5n IHRvIHN0YXJ0IHdvcmtpbmcvIG9uIHRoYXQgdGFzayBvbiB0aGUgZ2l2ZW4KZGF0ZVtmbjo3XS4K Ci0gQy1jIEMtcyA6OiBJbnNlcnQgQEBpbmZvOkBzYW1we1NDSEVEVUxFRH1AQCBrZXl3b3JkIGFs b25nIHdpdGggYQogICAgICAgICAgICAgc3RhbXAsIGluIHRoZSBsaW5lIGZvbGxvd2luZyB0aGUg aGVhZGxpbmUuCgpUaGUgaGVhZGxpbmUgd2lsbCBiZSBsaXN0ZWQgdW5kZXIgdGhlIGdpdmVuIGRh dGVbZm46OF0uICBJbiBhZGRpdGlvbiwgYSByZW1pbmRlciB0aGF0CnRoZSBzY2hlZHVsZWQgZGF0 ZSBoYXMgcGFzc2VkIHdpbGwgYmUgcHJlc2VudCBpbiB0aGUgY29tcGlsYXRpb24gZm9yCi90b2Rh eS8sIHVudGlsIHRoZSBlbnRyeSBpcyBtYXJrZWQgRE9ORS4gIEkuZS46IHRoZSB0YXNrIHdpbGwK YXV0b21hdGljYWxseSBiZSBmb3J3YXJkZWQgdW50aWwgY29tcGxldGVkLgoKIytiZWdpbl9zcmMg b3JnCiAgLCoqKiBUT0RPIENhbGwgVHJpbGxpYW4gZm9yIGEgZGF0ZSBvbiBOZXcgWWVhcnMgRXZl LgogICwgICAgU0NIRURVTEVEOiA8MjAwNC0xMi0yNSBTYXQ+CiMrZW5kX3NyYwoKU29tZSB0YXNr cyBuZWVkIHRvIGJlIHJlcGVhdGVkIGFnYWluIGFuZCBhZ2Fpbi4gIE9yZyBtb2RlIGhlbHBzIHRv Cm9yZ2FuaXplIHN1Y2ggdGFza3MgdXNpbmcgYSBzby1jYWxsZWQgcmVwZWF0ZXIgaW4gYSBERUFE TElORSwKU0NIRURVTEVELCBvciBwbGFpbiB0aW1lc3RhbXAuICBJbiB0aGUgZm9sbG93aW5nIGV4 YW1wbGUKIytiZWdpbl9zcmMgb3JnCiAgLCoqIFRPRE8gUGF5IHRoZSByZW50CiAgLCAgIERFQURM SU5FOiA8MjAwNS0xMC0wMSBTYXQgKzFtPgojK2VuZF9zcmMKQEBpbmZvOkBub2luZGVudEBAIHRo ZSB+KzFtfiBpcyBhIHJlcGVhdGVyOyB0aGUgaW50ZW5kZWQKaW50ZXJwcmV0YXRpb24gaXMgdGhh dCB0aGUgdGFzayBoYXMgYSBkZWFkbGluZSBvbiA8MjAwNS0xMC0wMT4gYW5kCnJlcGVhdHMgaXRz ZWxmIGV2ZXJ5IChvbmUpIG1vbnRoIHN0YXJ0aW5nIGZyb20gdGhhdCB0aW1lLgoKKiogQ2xvY2tp bmcgd29yayB0aW1lCjpQUk9QRVJUSUVTOgo6REVTQ1JJUFRJT046IFRyYWNraW5nIGhvdyBsb25n IHlvdSBzcGVuZCBvbiBhIHRhc2sKOkVORDoKCk9yZyBtb2RlIGFsbG93cyB5b3UgdG8gY2xvY2sg dGhlIHRpbWUgeW91IHNwZW5kIG9uIHNwZWNpZmljIHRhc2tzIGluIGEKcHJvamVjdC4KCi0gQy1j IEMteCBDLWkgOjogU3RhcnQgdGhlIGNsb2NrIG9uIHRoZSBjdXJyZW50IGl0ZW0gKGNsb2NrLWlu KS4gIFRoaXMKICAgICAgICAgICAgICAgICBpbnNlcnRzIHRoZSBDTE9DSyBrZXl3b3JkIHRvZ2V0 aGVyIHdpdGggYSB0aW1lc3RhbXAuCiAgICAgICAgICAgICAgICAgV2hlbiBjYWxsZWQgd2l0aCBh IEBAaW5mbzpAa2Jke0MtdX1AQCBwcmVmaXgKICAgICAgICAgICAgICAgICBhcmd1bWVudCwgc2Vs ZWN0IHRoZSB0YXNrIGZyb20gYSBsaXN0IG9mIHJlY2VudGx5CiAgICAgICAgICAgICAgICAgY2xv Y2tlZCB0YXNrcy4KLSBDLWMgQy14IEMtbyA6OiBTdG9wIHRoZSBjbG9jayAoY2xvY2stb3V0KS4g IFRoaXMgaW5zZXJ0cyBhbm90aGVyCiAgICAgICAgICAgICAgICAgdGltZXN0YW1wIGF0IHRoZSBz YW1lIGxvY2F0aW9uIHdoZXJlIHRoZSBjbG9jayB3YXMKICAgICAgICAgICAgICAgICBsYXN0IHN0 YXJ0ZWQuICBJdCBhbHNvIGRpcmVjdGx5IGNvbXB1dGVzIHRoZQogICAgICAgICAgICAgICAgIHJl c3VsdGluZyB0aW1lIGluIGluc2VydHMgaXQgYWZ0ZXIgdGhlIHRpbWUgcmFuZ2UgYXMKICAgICAg ICAgICAgICAgICBAQGluZm86QHNhbXB7PT4gSEg6TU19QEAuCi0gQy1jIEMteCBDLWUgOjogVXBk YXRlIHRoZSBlZmZvcnQgZXN0aW1hdGUgZm9yIHRoZSBjdXJyZW50IGNsb2NrCiAgICAgICAgICAg ICAgICAgdGFzay4KLSBDLWMgQy14IEMteCA6OiBDYW5jZWwgdGhlIGN1cnJlbnQgY2xvY2suICBU aGlzIGlzIHVzZWZ1bCBpZiBhIGNsb2NrCiAgICAgICAgICAgICAgICAgd2FzIHN0YXJ0ZWQgYnkg bWlzdGFrZSwgb3IgaWYgeW91IGVuZGVkIHVwIHdvcmtpbmcgb24KICAgICAgICAgICAgICAgICBz b21ldGhpbmcgZWxzZS4KLSBDLWMgQy14IEMtaiA6OiBKdW1wIHRvIHRoZSBlbnRyeSB0aGF0IGNv bnRhaW5zIHRoZSBjdXJyZW50bHkgcnVubmluZwogICAgICAgICAgICAgICAgIGNsb2NrLiAgV2l0 aCBhIEBAaW5mbzpAa2Jke0MtdX1AQCBwcmVmaXggYXJnLCBzZWxlY3QKICAgICAgICAgICAgICAg ICB0aGUgdGFyZ2V0IHRhc2sgZnJvbSBhIGxpc3Qgb2YgcmVjZW50bHkgY2xvY2tlZAogICAgICAg ICAgICAgICAgIHRhc2tzLgotIEMtYyBDLXggQy1yIDo6IEluc2VydCBhIGR5bmFtaWMgYmxvY2sg Y29udGFpbmluZyBhIGNsb2NrIHJlcG9ydCBhcwogICAgICAgICAgICAgICAgIGFuIE9yZy1tb2Rl IHRhYmxlIGludG8gdGhlIGN1cnJlbnQgZmlsZS4gIFdoZW4gdGhlCiAgICAgICAgICAgICAgICAg Y3Vyc29yIGlzIGF0IGFuIGV4aXN0aW5nIGNsb2NrIHRhYmxlLCBqdXN0IHVwZGF0ZSBpdC4KCiAg ICAgICAgICAgICAgICAgIytiZWdpbl9zcmMgb3JnCiAgICAgICAgICAgICAgICAgICAsIytCRUdJ TjogY2xvY2t0YWJsZSA6bWF4bGV2ZWwgMiA6ZW1waGFzaXplIG5pbCA6c2NvcGUgZmlsZQogICAg ICAgICAgICAgICAgICAgLCMrRU5EOiBjbG9ja3RhYmxlCiAgICAgICAgICAgICAgICAgIytlbmRf c3JjCiAgICAgICAgICAgICAgICAgQEBpbmZvOkBub2luZGVudEBAIEZvciBkZXRhaWxzIGFib3V0 IGhvdyB0byBjdXN0b21pemUKICAgICAgICAgICAgICAgICB0aGlzIHZpZXcsIHNlZSBbW2h0dHA6 Ly9vcmdtb2RlLm9yZy9tYW51YWwvQ2xvY2tpbmctd29yay10aW1lLmh0bWwjQ2xvY2tpbmctd29y ay10aW1lXVt0aGUgbWFudWFsXV0uCi0gQy1jIEMtYyA6OiBVcGRhdGUgZHluYW1pYyBibG9jayBh dCBwb2ludC4gIFRoZSBjdXJzb3IgbmVlZHMgdG8gYmUgaW4KICAgICAgICAgICAgIHRoZSB+IytC RUdJTn4gbGluZSBvZiB0aGUgZHluYW1pYyBibG9jay4KClRoZSBAQGluZm86QGtiZHtsfUBAIGtl eSBtYXkgYmUgdXNlZCBpbiB0aGUgdGltZWxpbmUgKFtbVGltZWxpbmVdXSkgYW5kIGluCnRoZSBh Z2VuZGEgKFtbV2Vla2x5L2RhaWx5IGFnZW5kYV1dKSB0byBzaG93IHdoaWNoIHRhc2tzIGhhdmUg YmVlbiB3b3JrZWQKb24gb3IgY2xvc2VkIGR1cmluZyBhIGRheS4KCkBAaW5mbzpAbm9pbmRlbnRA QCAqRnVydGhlciBSZWFkaW5nKlxcCltbaHR0cDovL29yZ21vZGUub3JnL21hbnVhbC9EYXRlcy1h bmQtVGltZXMuaHRtbCNEYXRlcy1hbmQtVGltZXNdW0NoYXB0ZXIgOCBvZiB0aGUgbWFudWFsXV1c XApbW2h0dHA6Ly9tZW1iZXJzLm9wdHVzbmV0LmNvbS5hdS9+Y2hhcmxlczU3L0dURC9vcmdfZGF0 ZXMvXVtDaGFybGVzIENhdmUncyBEYXRlIGFuZCBUaW1lIHR1dG9yaWFsXV1cXApbW2h0dHA6Ly9k b2Mubm9yYW5nLmNhL29yZy1tb2RlLmh0bWwjQ2xvY2tpbmddW0Jlcm50IEhhbnNlbidzIGNsb2Nr aW5nIHdvcmtmbG93XV0KCiogQ2FwdHVyZSAtIFJlZmlsZSAtIEFyY2hpdmUKOlBST1BFUlRJRVM6 CjpERVNDUklQVElPTjogVGhlIGlucyBhbmQgb3V0cyBmb3IgcHJvamVjdHMKOkVORDoKCkFuIGlt cG9ydGFudCBwYXJ0IG9mIGFueSBvcmdhbml6YXRpb24gc3lzdGVtIGlzIHRoZSBhYmlsaXR5IHRv IHF1aWNrbHkKY2FwdHVyZSBuZXcgaWRlYXMgYW5kIHRhc2tzLCBhbmQgdG8gYXNzb2NpYXRlIHJl ZmVyZW5jZSBtYXRlcmlhbCB3aXRoCnRoZW0uICBPcmcgZGVmaW5lcyBhIGNhcHR1cmUgcHJvY2Vz cyB0byBjcmVhdGUgdGFza3MuICBJdCBzdG9yZXMgZmlsZXMKcmVsYXRlZCB0byBhIHRhc2sgKC9h dHRhY2htZW50cy8pIGluIGEgc3BlY2lhbCBkaXJlY3RvcnkuICBPbmNlIGluIHRoZQpzeXN0ZW0s IHRhc2tzIGFuZCBwcm9qZWN0cyBuZWVkIHRvIGJlIG1vdmVkIGFyb3VuZC4gIE1vdmluZyBjb21w bGV0ZWQKcHJvamVjdCB0cmVlcyB0byBhbiBhcmNoaXZlIGZpbGUga2VlcHMgdGhlIHN5c3RlbSBj b21wYWN0IGFuZCBmYXN0LgoKKiogQ2FwdHVyZQo6UFJPUEVSVElFUzoKOkRFU0NSSVBUSU9OOiAK OkVORDoKCk9yZydzIG1ldGhvZCBmb3IgY2FwdHVyaW5nIG5ldyBpdGVtcyBpcyBoZWF2aWx5IGlu c3BpcmVkIGJ5IEpvaG4KV2llZ2xleSBleGNlbGxlbnQgcmVtZW1iZXIgcGFja2FnZS4gIEl0IGxl dHMgeW91IHN0b3JlIHF1aWNrIG5vdGVzCndpdGggbGl0dGxlIGludGVycnVwdGlvbiBvZiB5b3Vy IHdvcmsgZmxvdy4gIE9yZyBsZXRzIHlvdSBkZWZpbmUKdGVtcGxhdGVzIGZvciBuZXcgZW50cmll cyBhbmQgYXNzb2NpYXRlIHRoZW0gd2l0aCBkaWZmZXJlbnQgdGFyZ2V0cwpmb3Igc3RvcmluZyBu b3Rlcy4KCioqKiBTZXR0aW5nIHVwIGEgY2FwdHVyZSBsb2NhdGlvbgo6UFJPUEVSVElFUzoKOkRF U0NSSVBUSU9OOiAgIFdoZXJlIG5vdGVzIHdpbGwgYmUgc3RvcmVkCjpFTkQ6CgpUaGUgZm9sbG93 aW5nIGN1c3RvbWl6YXRpb24gc2V0cyBhIGRlZmF1bHQgdGFyZ2V0W2ZuOjldIGZpbGUgZm9yCm5v dGVzLCBhbmQgZGVmaW5lcyBhIGdsb2JhbCBrZXlbZm46MTBdIGZvciBjYXB0dXJpbmcgbmV3IHN0 dWZmLgoKIytiZWdpbl9zcmMgZW1hY3MtbGlzcAogIChzZXRxIG9yZy1kZWZhdWx0LW5vdGVzLWZp bGUgKGNvbmNhdCBvcmctZGlyZWN0b3J5ICIvbm90ZXMub3JnIikpCiAgKGRlZmluZS1rZXkgZ2xv YmFsLW1hcCAiXEMtY2MiICdvcmctY2FwdHVyZSkKIytlbmRfc3JjCgoqKiogVXNpbmcgY2FwdHVy ZQo6UFJPUEVSVElFUzoKOkRFU0NSSVBUSU9OOiBDb21tYW5kcyB0byBpbnZva2UgYW5kIHRlcm1p bmF0ZSBjYXB0dXJlCjpFTkQ6CgotIEMtYyBjIDo6IFN0YXJ0IGEgY2FwdHVyZSBwcm9jZXNzLiAg WW91IHdpbGwgYmUgcGxhY2VkIGludG8gYQogICAgICAgICAgIG5hcnJvd2VkIGluZGlyZWN0IGJ1 ZmZlciB0byBlZGl0IHRoZSBpdGVtLgotIEMtYyBDLWMgOjogT25jZSB5b3UgYXJlIGRvbmUgZW50 ZXJpbmcgaW5mb3JtYXRpb24gaW50byB0aGUgY2FwdHVyZQogICAgICAgICAgICAgYnVmZmVyLCBA QGluZm86QGtiZHtDLWMgQy1jfUBAIHdpbGwgcmV0dXJuIHlvdSB0byB0aGUKICAgICAgICAgICAg IHdpbmRvdyBjb25maWd1cmF0aW9uIGJlZm9yZSB0aGUgY2FwdHVyZSBwcm9jZXNzLCBzbyB0aGF0 CiAgICAgICAgICAgICB5b3UgY2FuIHJlc3VtZSB5b3VyIHdvcmsgd2l0aG91dCBmdXJ0aGVyIGRp c3RyYWN0aW9uLgotIEMtYyBDLXcgOjogRmluYWxpemUgYnkgbW92aW5nIHRoZSBlbnRyeSB0byBh IHJlZmlsZSBsb2NhdGlvbgogICAgICAgICAgICAgKFtbUmVmaWxpbmcgbm90ZXNdXSkuCi0gQy1j IEMtayA6OiBBYm9ydCB0aGUgY2FwdHVyZSBwcm9jZXNzIGFuZCByZXR1cm4gdG8gdGhlIHByZXZp b3VzCiAgICAgICAgICAgICBzdGF0ZS4KCioqKiBDYXB0dXJlIHRlbXBsYXRlcwo6UFJPUEVSVElF UzoKOkRFU0NSSVBUSU9OOiBEZWZpbmUgdGhlIG91dGxpbmUgb2YgZGlmZmVyZW50IG5vdGUgdHlw ZXMKOkVORDoKCllvdSBjYW4gdXNlIHRlbXBsYXRlcyB0byBnZW5lcmF0ZSBkaWZmZXJlbnQgdHlw ZXMgb2YgY2FwdHVyZSBub3RlcywKYW5kIHRvIHN0b3JlIHRoZW0gaW4gZGlmZmVyZW50IHBsYWNl cy4gIEZvciBleGFtcGxlLCBpZiB5b3Ugd291bGQgbGlrZQp0byBzdG9yZSBuZXcgdGFza3MgdW5k ZXIgYSBoZWFkaW5nIEBAaW5mbzpAc2FtcHtUYXNrc31AQCBpbiBmaWxlCkBAaW5mbzpAZmlsZXtU T0RPLm9yZ31AQCwgYW5kIGpvdXJuYWwgZW50cmllcyBpbiBhIGRhdGUgdHJlZSBpbgpAQGluZm86 QGZpbGV7am91cm5hbC5vcmd9QEAgeW91IGNvdWxkIHVzZToKCiMrYmVnaW5fc3JjIGVtYWNzLWxp c3AKICAoc2V0cSBvcmctY2FwdHVyZS10ZW1wbGF0ZXMKICAgJygoInQiICJUb2RvIiBlbnRyeSAo ZmlsZStoZWFkbGluZSAifi9vcmcvZ3RkLm9yZyIgIlRhc2tzIikKICAgICAgICAgICIqIFRPRE8g JT9cbiAgJWlcbiAgJWEiKQogICAgICgiaiIgIkpvdXJuYWwiIGVudHJ5IChmaWxlK2RhdGV0cmVl ICJ+L29yZy9qb3VybmFsLm9yZyIpCiAgICAgICAgICAiKiAlP1xuRW50ZXJlZCBvbiAlVVxuICAl aVxuICAlYSIpKSkKIytlbmRfc3JjCgpAQGluZm86QG5vaW5kZW50QEAgSW4gdGhlc2UgZW50cmll cywgdGhlIGZpcnN0IHN0cmluZyBpcyB0aGUga2V5IHRvCnJlYWNoIHRoZSB0ZW1wbGF0ZSwgdGhl IHNlY29uZCBpcyBhIHNob3J0IGRlc2NyaXB0aW9uLiAgVGhlbiBmb2xsb3dzCnRoZSB0eXBlIG9m IHRoZSBlbnRyeSBhbmQgYSBkZWZpbml0aW9uIG9mIHRoZSB0YXJnZXQgbG9jYXRpb24gZm9yCnN0 b3JpbmcgdGhlIG5vdGUuICBGaW5hbGx5LCB0aGUgdGVtcGxhdGUgaXRzZWxmLCBhIHN0cmluZyB3 aXRoCiUtZXNjYXBlcyB0byBmaWxsIGluIGluZm9ybWF0aW9uIGJhc2VkIG9uIHRpbWUgYW5kIGNv bnRleHQuCgpXaGVuIHlvdSBjYWxsIEBAaW5mbzpAa2Jke00teCBvcmctY2FwdHVyZX1AQCwgT3Jn IHdpbGwgcHJvbXB0IGZvciBhCmtleSB0byBzZWxlY3QgdGhlIHRlbXBsYXRlIChpZiB5b3UgaGF2 ZSBtb3JlIHRoYW4gb25lIHRlbXBsYXRlKSBhbmQKdGhlbiBwcmVwYXJlIHRoZSBidWZmZXIgbGlr ZQojK2JlZ2luX3NyYyBvcmcKICAsKiBUT0RPCiAgLCAgW1tmaWxlOkB2YXJ7bGluayB0byB3aGVy ZSB5b3Ugd2VyZSB3aGVuIGluaXRpYXRpbmcgY2FwdHVyZX1dXQojK2VuZF9zcmMKCkBAaW5mbzpA bm9pbmRlbnRAQCBEdXJpbmcgZXhwYW5zaW9uIG9mIHRoZSB0ZW1wbGF0ZSwgc3BlY2lhbApAQGlu Zm86QGtiZHslfUBALWVzY2FwZXNbZm46MTFdIGFsbG93IGR5bmFtaWMgaW5zZXJ0aW9uIG9mIGNv bnRlbnQuCkhlcmUgaXMgYSBzbWFsbCBzZWxlY3Rpb24gb2YgdGhlIHBvc3NpYmlsaXRpZXMsIGNv bnN1bHQgdGhlIG1hbnVhbCBmb3IKbW9yZS4KCjogJWEgICAgICAgICAgQHJ7YW5ub3RhdGlvbiwg bm9ybWFsbHkgdGhlIGxpbmsgY3JlYXRlZCB3aXRoIEBjb2Rle29yZy1zdG9yZS1saW5rfX0KOiAl aSAgICAgICAgICBAcntpbml0aWFsIGNvbnRlbnQsIHRoZSByZWdpb24gd2hlbiByZW1lbWJlciBp cyBjYWxsZWQgd2l0aCBDLXUufQo6ICV0ICAgICAgICAgIEBye3RpbWVzdGFtcCwgZGF0ZSBvbmx5 fQo6ICVUICAgICAgICAgIEBye3RpbWVzdGFtcCB3aXRoIGRhdGUgYW5kIHRpbWV9CjogJXUsICVV ICAgICAgQHJ7bGlrZSB0aGUgYWJvdmUsIGJ1dCBpbmFjdGl2ZSB0aW1lc3RhbXBzfQoKKiogUmVm aWxpbmcgbm90ZXMKOlBST1BFUlRJRVM6CjpERVNDUklQVElPTjogTW92aW5nIGEgdHJlZSBmcm9t IG9uZSBwbGFjZSB0byBhbm90aGVyCjpFTkQ6CldoZW4gcmV2aWV3aW5nIHRoZSBjYXB0dXJlZCBk YXRhLCB5b3UgbWF5IHdhbnQgdG8gcmVmaWxlIHNvbWUgb2YgdGhlIGVudHJpZXMKaW50byBhIGRp ZmZlcmVudCBsaXN0LCBmb3IgZXhhbXBsZSBpbnRvIGEgcHJvamVjdC4gIEN1dHRpbmcsIGZpbmRp bmcgdGhlCnJpZ2h0IGxvY2F0aW9uLCBhbmQgdGhlbiBwYXN0aW5nIHRoZSBub3RlIGlzIGN1bWJl cnNvbWUuICBUbyBzaW1wbGlmeSB0aGlzCnByb2Nlc3MsIHlvdSBjYW4gdXNlIHRoZSBmb2xsb3dp bmcgc3BlY2lhbCBjb21tYW5kOgoKLSBDLWMgQy13IDo6IFJlZmlsZSB0aGUgZW50cnkgb3IgcmVn aW9uIGF0IHBvaW50LiAgVGhpcyBjb21tYW5kIG9mZmVycwogICAgICAgICAgICAgcG9zc2libGUg bG9jYXRpb25zIGZvciByZWZpbGluZyB0aGUgZW50cnkgYW5kIGxldHMgeW91CiAgICAgICAgICAg ICBzZWxlY3Qgb25lIHdpdGggY29tcGxldGlvbi4gIFRoZSBpdGVtIChvciBhbGwgaXRlbXMgaW4K ICAgICAgICAgICAgIHRoZSByZWdpb24pIGlzIGZpbGVkIGJlbG93IHRoZSB0YXJnZXQgaGVhZGlu ZyBhcyBhCiAgICAgICAgICAgICBzdWJpdGVtLlxcIAogICAgICAgICAgICAgQnkgZGVmYXVsdCwg YWxsIGxldmVsIDEgaGVhZGxpbmVzIGluIHRoZSBjdXJyZW50IGJ1ZmZlcgogICAgICAgICAgICAg YXJlIGNvbnNpZGVyZWQgdG8gYmUgdGFyZ2V0cywgYnV0IHlvdSBjYW4gaGF2ZSBtb3JlCiAgICAg ICAgICAgICBjb21wbGV4IGRlZmluaXRpb25zIGFjcm9zcyBhIG51bWJlciBvZiBmaWxlcy4gU2Vl IHRoZQogICAgICAgICAgICAgdmFyaWFibGUgfm9yZy1yZWZpbGUtdGFyZ2V0c34gZm9yIGRldGFp bHMuCi0gQy11IEMtYyBDLXcgOjogVXNlIHRoZSByZWZpbGUgaW50ZXJmYWNlIHRvIGp1bXAgdG8g YSBoZWFkaW5nLgotIEMtdSBDLXUgQy1jIEMtdyA6OiBKdW1wIHRvIHRoZSBsb2NhdGlvbiB3aGVy ZSB+b3JnLXJlZmlsZX4gbGFzdAogICAgIG1vdmVkIGEgdHJlZSB0by4KCioqIEFyY2hpdmluZwo6 UFJPUEVSVElFUzoKOkRFU0NSSVBUSU9OOiBXaGF0IHRvIGRvIHdpdGggZmluaXNoZWQgcHJvamVj dHMKOkVORDoKCldoZW4gYSBwcm9qZWN0IHJlcHJlc2VudGVkIGJ5IGEgKHN1Yil0cmVlIGlzIGZp bmlzaGVkLCB5b3UgbWF5IHdhbnQgdG8KbW92ZSB0aGUgdHJlZSBvdXQgb2YgdGhlIHdheSBhbmQg dG8gc3RvcCBpdCBmcm9tIGNvbnRyaWJ1dGluZyB0byB0aGUKYWdlbmRhLiAgQXJjaGl2aW5nIGlz IGltcG9ydGFudCB0byBrZWVwIHlvdXIgd29ya2luZyBmaWxlcyBjb21wYWN0IGFuZApnbG9iYWwg c2VhcmNoZXMgbGlrZSB0aGUgY29uc3RydWN0aW9uIG9mIGFnZW5kYSB2aWV3cyBmYXN0LiAgVGhl IG1vc3QKY29tbW9uIGFyY2hpdmluZyBhY3Rpb24gaXMgdG8gbW92ZSBhIHByb2plY3QgdHJlZSB0 byBhbm90aGVyIGZpbGUsIHRoZQphcmNoaXZlIGZpbGUuCgotIEMtYyBDLXggQy1hIDo6IEFyY2hp dmUgdGhlIGN1cnJlbnQgZW50cnkgdXNpbmcgdGhlIGNvbW1hbmQgc3BlY2lmaWVkCiAgICAgICAg ICAgICAgICAgaW4gdGhlIHZhcmlhYmxlIH5vcmctYXJjaGl2ZS1kZWZhdWx0LWNvbW1hbmR+Lgot IEMtYyBDLXggQy1zQEBpbmZvOkAgQHJ7b3Igc2hvcnR9IEBAQCBDLWMgJCA6OiBBcmNoaXZlIHRo ZSBzdWJ0cmVlIHN0YXJ0aW5nIGF0CiAgICAgdGhlIGN1cnNvciBwb3NpdGlvbiB0byB0aGUgbG9j YXRpb24gZ2l2ZW4gYnkKICAgICB+b3JnLWFyY2hpdmUtbG9jYXRpb25+LgoKVGhlIGRlZmF1bHQg YXJjaGl2ZSBsb2NhdGlvbiBpcyBhIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZQpj dXJyZW50IGZpbGUsIHdpdGggdGhlIG5hbWUgZGVyaXZlZCBieSBhcHBlbmRpbmcKQEBpbmZvOkBm aWxle19hcmNoaXZlfUBAIHRvIHRoZSBjdXJyZW50IGZpbGUgbmFtZS4gIEZvciBpbmZvcm1hdGlv bgphbmQgZXhhbXBsZXMgb24gaG93IHRvIGNoYW5nZSB0aGlzLCBzZWUgdGhlIGRvY3VtZW50YXRp b24gc3RyaW5nIG9mCnRoZSB2YXJpYWJsZSB+b3JnLWFyY2hpdmUtbG9jYXRpb25+LiAgVGhlcmUg aXMgYWxzbyBhbiBpbi1idWZmZXIKb3B0aW9uIGZvciBzZXR0aW5nIHRoaXMgdmFyaWFibGUsIGZv ciBleGFtcGxlCgojK2JlZ2luX3NyYyBvcmcKICAsIytBUkNISVZFOiAlc19kb25lOjoKIytlbmRf c3JjCgpAQGluZm86QG5vaW5kZW50QEAgKkZ1cnRoZXIgUmVhZGluZypcXApbW2h0dHA6Ly9vcmdt b2RlLm9yZy9tYW51YWwvQ2FwdHVyZS1fMDAyZC1SZWZpbGUtXzAwMmQtQXJjaGl2ZS5odG1sI0Nh cHR1cmUtXzAwMmQtUmVmaWxlLV8wMDJkLUFyY2hpdmVdW0NoYXB0ZXIgOSBvZiB0aGUgbWFudWFs XV1cXApbW2h0dHA6Ly9tZW1iZXJzLm9wdHVzbmV0LmNvbS5hdS9+Y2hhcmxlczU3L0dURC9yZW1l bWJlci5odG1sXVtDaGFybGVzIENhdmUncyByZW1lbWJlciB0dXRvcmlhbF1dXFwKW1todHRwOi8v b3JnbW9kZS5vcmcvd29yZy9vcmctdHV0b3JpYWxzL29yZy1wcm90b2NvbC1jdXN0b20taGFuZGxl ci5waHBdW1NlYmFzdGlhbiBSb3NlJ3MgdHV0b3JpYWwgZm9yIGNhcHR1cmluZyBmcm9tIGEgd2Vi IGJyb3dzZXJdXQoKKiBBZ2VuZGEgVmlld3MKOlBST1BFUlRJRVM6CjpERVNDUklQVElPTjogQ29s bGVjdGluZyBpbmZvcm1hdGlvbiBpbnRvIHZpZXdzCjpFTkQ6CgpEdWUgdG8gdGhlIHdheSBPcmcg d29ya3MsIFRPRE8gaXRlbXMsIHRpbWUtc3RhbXBlZCBpdGVtcywgYW5kIHRhZ2dlZApoZWFkbGlu ZXMgY2FuIGJlIHNjYXR0ZXJlZCB0aHJvdWdob3V0IGEgZmlsZSBvciBldmVuIGEgbnVtYmVyIG9m CmZpbGVzLiAgVG8gZ2V0IGFuIG92ZXJ2aWV3IG9mIG9wZW4gYWN0aW9uIGl0ZW1zLCBvciBvZiBl dmVudHMgdGhhdCBhcmUKaW1wb3J0YW50IGZvciBhIHBhcnRpY3VsYXIgZGF0ZSwgdGhpcyBpbmZv cm1hdGlvbiBtdXN0IGJlIGNvbGxlY3RlZCwKc29ydGVkIGFuZCBkaXNwbGF5ZWQgaW4gYW4gb3Jn YW5pemVkIHdheS4gIFRoZXJlIGFyZSBzZXZlcmFsIGRpZmZlcmVudAp2aWV3cywgc2VlIGJlbG93 LgoKVGhlIGV4dHJhY3RlZCBpbmZvcm1hdGlvbiBpcyBkaXNwbGF5ZWQgaW4gYSBzcGVjaWFsIC9h Z2VuZGEgYnVmZmVyLy4KVGhpcyBidWZmZXIgaXMgcmVhZC1vbmx5LCBidXQgcHJvdmlkZXMgY29t bWFuZHMgdG8gdmlzaXQgdGhlCmNvcnJlc3BvbmRpbmcgbG9jYXRpb25zIGluIHRoZSBvcmlnaW5h bCBPcmcgZmlsZXMsIGFuZCBldmVuIHRvIGVkaXQKdGhlc2UgZmlsZXMgcmVtb3RlbHkuICBSZW1v dGUgZWRpdGluZyBmcm9tIHRoZSBhZ2VuZGEgYnVmZmVyIG1lYW5zLApmb3IgZXhhbXBsZSwgdGhh dCB5b3UgY2FuIGNoYW5nZSB0aGUgZGF0ZXMgb2YgZGVhZGxpbmVzIGFuZAphcHBvaW50bWVudHMg ZnJvbSB0aGUgYWdlbmRhIGJ1ZmZlci4gIFRoZSBjb21tYW5kcyBhdmFpbGFibGUgaW4gdGhlCkFn ZW5kYSBidWZmZXIgYXJlIGxpc3RlZCBpbiBbW0FnZW5kYSBjb21tYW5kc11dLgoKKiogQWdlbmRh IGZpbGVzCjpQUk9QRVJUSUVTOgo6REVTQ1JJUFRJT046IEZpbGVzIGJlaW5nIHNlYXJjaGVkIGZv ciBhZ2VuZGEgaW5mb3JtYXRpb24KOkVORDoKClRoZSBpbmZvcm1hdGlvbiB0byBiZSBzaG93biBp cyBub3JtYWxseSBjb2xsZWN0ZWQgZnJvbSBhbGwgL2FnZW5kYQpmaWxlcy8sIHRoZSBmaWxlcyBs aXN0ZWQgaW4gdGhlIHZhcmlhYmxlIH5vcmctYWdlbmRhLWZpbGVzfi4KCi0gQy1jIFsgOjogQWRk IGN1cnJlbnQgZmlsZSB0byB0aGUgbGlzdCBvZiBhZ2VuZGEgZmlsZXMuICBUaGUgZmlsZSBpcwog ICAgICAgICAgIGFkZGVkIHRvIHRoZSBmcm9udCBvZiB0aGUgbGlzdC4gIElmIGl0IHdhcyBhbHJl YWR5IGluIHRoZQogICAgICAgICAgIGxpc3QsIGl0IGlzIG1vdmVkIHRvIHRoZSBmcm9udC4gIFdp dGggYSBwcmVmaXggYXJndW1lbnQsCiAgICAgICAgICAgZmlsZSBpcyBhZGRlZC9tb3ZlZCB0byB0 aGUgZW5kLgotIEMtYyBdIDo6IFJlbW92ZSBjdXJyZW50IGZpbGUgZnJvbSB0aGUgbGlzdCBvZiBh Z2VuZGEgZmlsZXMuCi0gQy0sIDo6IEN5Y2xlIHRocm91Z2ggYWdlbmRhIGZpbGUgbGlzdCwgdmlz aXRpbmcgb25lIGZpbGUgYWZ0ZXIgdGhlCiAgICAgICAgIG90aGVyLgoKKiogQWdlbmRhIGRpc3Bh dGNoZXIKOlBST1BFUlRJRVM6CjpERVNDUklQVElPTjogS2V5Ym9hcmQgYWNjZXNzIHRvIGFnZW5k YSB2aWV3cwo6RU5EOgoKVGhlIHZpZXdzIGFyZSBjcmVhdGVkIHRocm91Z2ggYSBkaXNwYXRjaGVy LCB3aGljaCBzaG91bGQgYmUgYm91bmQgdG8gYQpnbG9iYWwga2V5LS0tZm9yIGV4YW1wbGUgQEBp bmZvOkBrYmR7Qy1jIGF9QEAgKFtbSW5zdGFsbGF0aW9uXV0pLiAgQWZ0ZXIKcHJlc3NpbmcgQEBp bmZvOkBrYmR7Qy1jIGF9QEAsIGFuIGFkZGl0aW9uYWwgbGV0dGVyIGlzIHJlcXVpcmVkIHRvIGV4 ZWN1dGUgYQpjb21tYW5kOgoKLSBhIDo6IFRoZSBjYWxlbmRhci1saWtlIGFnZW5kYSAoW1tXZWVr bHkvZGFpbHkgYWdlbmRhXV0pLgoKLSB0IEBAaW5mbzpAcnsvfUBAIFQgOjogQSBsaXN0IG9mIGFs bCBUT0RPIGl0ZW1zIChbW0dsb2JhbCBUT0RPIGxpc3RdXSkuCgotIG0gQEBpbmZvOkByey99QEAg TSA6OiBBIGxpc3Qgb2YgaGVhZGxpbmVzIG1hdGNoaW5nIGEgVEFHUyBleHByZXNzaW9uCiAgICAg KFtbTWF0Y2hpbmcgdGFncyBhbmQgcHJvcGVydGllc11dKS4KCi0gTCA6OiBUaGUgdGltZWxpbmUg dmlldyBmb3IgdGhlIGN1cnJlbnQgYnVmZmVyIChbW1RpbWVsaW5lXV0pLgoKLSBzIDo6IEEgbGlz dCBvZiBlbnRyaWVzIHNlbGVjdGVkIGJ5IGEgYm9vbGVhbiBleHByZXNzaW9uIG9mIGtleXdvcmRz CiAgICAgICBhbmQvb3IgcmVndWxhciBleHByZXNzaW9ucyB0aGF0IG11c3Qgb3IgbXVzdCBub3Qg b2NjdXIgaW4gdGhlCiAgICAgICBlbnRyeS4KCioqIEJ1aWx0LWluIGFnZW5kYSB2aWV3cwo6UFJP UEVSVElFUzoKOkRFU0NSSVBUSU9OOiBXaGF0IGlzIGF2YWlsYWJsZSBvdXQgb2YgdGhlIGJveD8K OkVORDoKKioqIFdlZWtseS9kYWlseSBhZ2VuZGEKOlBST1BFUlRJRVM6CjpERVNDUklQVElPTjog VGhlIGNhbGVuZGFyIHBhZ2Ugd2l0aCBjdXJyZW50IHRhc2tzCjpFTkQ6CgpUaGUgcHVycG9zZSBv ZiB0aGUgd2Vla2x5L2RhaWx5IC9hZ2VuZGEvIGlzIHRvIGFjdCBsaWtlIGEgcGFnZSBvZiBhCnBh cGVyIGFnZW5kYSwgc2hvd2luZyBhbGwgdGhlIHRhc2tzIGZvciB0aGUgY3VycmVudCB3ZWVrIG9y IGRheS4KCi0gQy1jIGEgYSA6OiBDb21waWxlIGFuIGFnZW5kYSBmb3IgdGhlIGN1cnJlbnQgd2Vl ayBmcm9tIGEgbGlzdCBvZiBPcmcKICAgICAgICAgICAgIGZpbGVzLiAgVGhlIGFnZW5kYSBzaG93 cyB0aGUgZW50cmllcyBmb3IgZWFjaCBkYXkuCgpFbWFjcyBjb250YWlucyB0aGUgY2FsZW5kYXIg YW5kIGRpYXJ5IGJ5IEVkd2FyZCBNLiBSZWluZ29sZC4gIE9yZy1tb2RlCnVuZGVyc3RhbmRzIHRo ZSBzeW50YXggb2YgdGhlIGRpYXJ5IGFuZCBhbGxvd3MgeW91IHRvIHVzZSBkaWFyeSBzZXhwCmVu dHJpZXMgZGlyZWN0bHkgaW4gT3JnIGZpbGVzOgoKIytiZWdpbl9zcmMgb3JnCiAgLCogQmlydGhk YXlzIGFuZCBzaW1pbGFyIHN0dWZmCiAgLCMrQ0FURUdPUlk6IEhvbGlkYXkKICAsJSUob3JnLWNh bGVuZGFyLWhvbGlkYXkpICAgOyBzcGVjaWFsIGZ1bmN0aW9uIGZvciBob2xpZGF5IG5hbWVzCiAg LCMrQ0FURUdPUlk6IEFubgogICwlJShkaWFyeS1hbm5pdmVyc2FyeSAgNSAxNCAxOTU2KUBmb290 bm90ZXtOb3RlIHRoYXQgdGhlIG9yZGVyIG9mIHRoZSBhcmd1bWVudHMgKG1vbnRoLCBkYXksIHll YXIpIGRlcGVuZHMgb24gdGhlIHNldHRpbmcgb2YgQGNvZGV7Y2FsZW5kYXItZGF0ZS1zdHlsZX0u fUFydGh1ciBEZW50IGlzICVkIHllYXJzIG9sZAogICwlJShkaWFyeS1hbm5pdmVyc2FyeSAxMCAg MiAxODY5KSBNYWhhdG1hIEdhbmRoaSB3b3VsZCBiZSAlZCB5ZWFycyBvbGQKIytlbmRfc3JjCgpP cmcgY2FuIGludGVyYWN0IHdpdGggRW1hY3MgYXBwb2ludG1lbnRzIG5vdGlmaWNhdGlvbiBmYWNp bGl0eS4gIFRvIGFkZCBhbGwKdGhlIGFwcG9pbnRtZW50cyBvZiB5b3VyIGFnZW5kYSBmaWxlcywg dXNlIHRoZSBjb21tYW5kCn5vcmctYWdlbmRhLXRvLWFwcHR+LiAgU2VlIHRoZSBkb2NzdHJpbmcg Zm9yIGRldGFpbHMuCgoqKiogR2xvYmFsIFRPRE8gbGlzdAo6UFJPUEVSVElFUzoKOkRFU0NSSVBU SU9OOiBBbGwgdW5maW5pc2hlZCBhY3Rpb24gaXRlbXMKOkVORDoKClRoZSBnbG9iYWwgVE9ETyBs aXN0IGNvbnRhaW5zIGFsbCB1bmZpbmlzaGVkIFRPRE8gaXRlbXMgZm9ybWF0dGVkIGFuZApjb2xs ZWN0ZWQgaW50byBhIHNpbmdsZSBwbGFjZS4gIFJlbW90ZSBlZGl0aW5nIG9mIFRPRE8gaXRlbXMg bGV0cyB5b3UKY2FuIGNoYW5nZSB0aGUgc3RhdGUgb2YgYSBUT0RPIGVudHJ5IHdpdGggYSBzaW5n bGUga2V5IHByZXNzLiAgVGhlIGNvbW1hbmRzCmF2YWlsYWJsZSBpbiB0aGUgVE9ETyBsaXN0IGFy ZSBkZXNjcmliZWQgaW4gW1tBZ2VuZGEgY29tbWFuZHNdXS4KCi0gQy1jIGEgdCA6OiBTaG93IHRo ZSBnbG9iYWwgVE9ETyBsaXN0LiAgVGhpcyBjb2xsZWN0cyB0aGUgVE9ETyBpdGVtcwogICAgICAg ICAgICAgZnJvbSBhbGwgYWdlbmRhIGZpbGVzIChbW0FnZW5kYSBWaWV3c11dKSBpbnRvIGEgc2lu Z2xlCiAgICAgICAgICAgICBidWZmZXIuCi0gQy1jIGEgVCA6OiBMaWtlIHRoZSBhYm92ZSwgYnV0 IGFsbG93cyBzZWxlY3Rpb24gb2YgYSBzcGVjaWZpYyBUT0RPCiAgICAgICAgICAgICBrZXl3b3Jk LgoKKioqIE1hdGNoaW5nIHRhZ3MgYW5kIHByb3BlcnRpZXMKOlBST1BFUlRJRVM6CjpERVNDUklQ VElPTjogICBTdHJ1Y3R1cmVkIGluZm9ybWF0aW9uIHdpdGggZmluZS10dW5lZCBzZWFyY2gKOkVO RDoKCklmIGhlYWRsaW5lcyBpbiB0aGUgYWdlbmRhIGZpbGVzIGFyZSBtYXJrZWQgd2l0aCAvdGFn cy8gKFtbVGFnc11dKSwgb3IKaGF2ZSBwcm9wZXJ0aWVzIChbW1Byb3BlcnRpZXNdXSksIHlvdSBj YW4gc2VsZWN0IGhlYWRsaW5lcyBiYXNlZCBvbiB0aGlzCm1ldGFkYXRhIGFuZCBjb2xsZWN0IHRo ZW0gaW50byBhbiBhZ2VuZGEgYnVmZmVyLiAgVGhlIG1hdGNoIHN5bnRheApkZXNjcmliZWQgaGVy ZSBhbHNvIGFwcGxpZXMgd2hlbiBjcmVhdGluZyBzcGFyc2UgdHJlZXMgd2l0aApAQGluZm86QGti ZHtDLWMgLyBtfUBALiAgVGhlIGNvbW1hbmRzIGF2YWlsYWJsZSBpbiB0aGUgdGFncyBsaXN0IGFy ZQpkZXNjcmliZWQgaW4gW1tBZ2VuZGEgY29tbWFuZHNdXS4KCi0gQy1jIGEgbSA6OiBQcm9kdWNl IGEgbGlzdCBvZiBhbGwgaGVhZGxpbmVzIHRoYXQgbWF0Y2ggYSBnaXZlbiBzZXQgb2YKICAgICAg ICAgICAgIHRhZ3MuICBUaGUgY29tbWFuZCBwcm9tcHRzIGZvciBhIHNlbGVjdGlvbiBjcml0ZXJp b24sCiAgICAgICAgICAgICB3aGljaCBpcyBhIGJvb2xlYW4gbG9naWMgZXhwcmVzc2lvbiB3aXRo IHRhZ3MsIGxpa2UKICAgICAgICAgICAgIEBAaW5mbzpAc2FtcHsrd29yayt1cmdlbnQtd2l0aGJv c3N9QEAgb3IKICAgICAgICAgICAgIEBAaW5mbzpAc2FtcHt3b3JrfGhvbWV9QEAgKFtbVGFnc11d KS4gIElmIHlvdSBvZnRlbiBuZWVkIGEKICAgICAgICAgICAgIHNwZWNpZmljIHNlYXJjaCwgZGVm aW5lIGEgY3VzdG9tIGNvbW1hbmQgZm9yIGl0IChbW0FnZW5kYSUyMGRpc3BhdGNoZXJdW0FnZW5k YSBkaXNwYXRjaGVyXV0pLgotIEMtYyBhIE0gOjogTGlrZSBAQGluZm86QGtiZHtDLWMgYSBtfUBA LCBidXQgb25seSBzZWxlY3QgaGVhZGxpbmVzCiAgICAgICAgICAgICB0aGF0IGFyZSBhbHNvIFRP RE8gaXRlbXMuCgpAQGluZm86QHN1YnN1YmhlYWRpbmcgTWF0Y2ggc3ludGF4QEAKCkEgc2VhcmNo IHN0cmluZyBjYW4gdXNlIEJvb2xlYW4gb3BlcmF0b3JzIEBAaW5mbzpAc2FtcHsmfUBAIGZvciBB TkQKYW5kIEBAaW5mbzpAc2FtcHt8fUBAIGZvciBPUi4gIEBAaW5mbzpAc2FtcHsmfUBAIGJpbmRz IG1vcmUgc3Ryb25nbHkKdGhhbiBAQGluZm86QHNhbXB7fH1AQC4gIFBhcmVudGhlc2VzIGFyZSBj dXJyZW50bHkgbm90IGltcGxlbWVudGVkLgpFYWNoIGVsZW1lbnQgaW4gdGhlIHNlYXJjaCBpcyBl aXRoZXIgYSB0YWcsIGEgcmVndWxhciBleHByZXNzaW9uCm1hdGNoaW5nIHRhZ3MsIG9yIGFuIGV4 cHJlc3Npb24gbGlrZSB+UFJPUEVSVFkgT1BFUkFUT1IgVkFMVUV+IHdpdGggYQpjb21wYXJpc29u IG9wZXJhdG9yLCBhY2Nlc3NpbmcgYSBwcm9wZXJ0eSB2YWx1ZS4gIEVhY2ggZWxlbWVudCBtYXkg YmUKcHJlY2VkZWQgYnkgQEBpbmZvOkBzYW1wey19QEAsIHRvIHNlbGVjdCBhZ2FpbnN0IGl0LCBh bmQKQEBpbmZvOkBzYW1weyt9QEAgaXMgc3ludGFjdGljIHN1Z2FyIGZvciBwb3NpdGl2ZSBzZWxl Y3Rpb24uICBUaGUgQU5ECm9wZXJhdG9yIEBAaW5mbzpAc2FtcHsmfUBAIGlzIG9wdGlvbmFsIHdo ZW4gQEBpbmZvOkBzYW1weyt9QEAgb3IKQEBpbmZvOkBzYW1wey19QEAgaXMgcHJlc2VudC4gIEhl cmUgYXJlIHNvbWUgZXhhbXBsZXMsIHVzaW5nIG9ubHkKdGFncy4KCi0gK3dvcmstYm9zcyA6OiBT ZWxlY3QgaGVhZGxpbmVzIHRhZ2dlZCBAQGluZm86QHNhbXB7Ondvcms6fUBALCBidXQKICAgICAg ICAgICAgICAgIGRpc2NhcmQgdGhvc2UgYWxzbyB0YWdnZWQgQEBpbmZvOkBzYW1wezpib3NzOn1A QC4KLSB3b3JrfGxhcHRvcCA6OiBTZWxlY3RzIGxpbmVzIHRhZ2dlZCBAQGluZm86QHNhbXB7Ondv cms6fUBAIG9yCiAgICAgICAgICAgICAgICAgQEBpbmZvOkBzYW1wezpsYXB0b3A6fUBALgotIHdv cmt8bGFwdG9wK25pZ2h0IDo6IExpa2UgYmVmb3JlLCBidXQgcmVxdWlyZSB0aGUKICAgICBAQGlu Zm86QHNhbXB7OmxhcHRvcDp9QEAgbGluZXMgdG8gYmUgdGFnZ2VkIGFsc28KICAgICBAQGluZm86 QHNhbXB7Om5pZ2h0On1AQC4KCllvdSBtYXkgYWxzbyB0ZXN0IGZvciBwcm9wZXJ0aWVzIGF0IHRo ZSBzYW1lCnRpbWUgYXMgbWF0Y2hpbmcgdGFncywgc2VlIHRoZSBtYW51YWwgZm9yIG1vcmUgaW5m b3JtYXRpb24uCgoqKiogVGltZWxpbmUKOlBST1BFUlRJRVM6CjpERVNDUklQVElPTjogVGltZS1z b3J0ZWQgdmlldyBmb3Igc2luZ2xlIGZpbGUKOkVORDoKClRoZSB0aW1lbGluZSBzdW1tYXJpemVz IGFsbCB0aW1lLXN0YW1wZWQgaXRlbXMgZnJvbSBhIHNpbmdsZSBPcmcgbW9kZQpmaWxlIGluIGEg L3RpbWUtc29ydGVkIHZpZXcvLiAgVGhlIG1haW4gcHVycG9zZSBvZiB0aGlzIGNvbW1hbmQgaXMK dG8gZ2l2ZSBhbiBvdmVydmlldyBvdmVyIGV2ZW50cyBpbiBhIHByb2plY3QuCgotIEMtYyBhIEwg OjogU2hvdyBhIHRpbWUtc29ydGVkIHZpZXcgb2YgdGhlIE9yZyBmaWxlLCB3aXRoIGFsbAogICAg ICAgICAgICAgdGltZS1zdGFtcGVkIGl0ZW1zLiBXaGVuIGNhbGxlZCB3aXRoIGEgQEBpbmZvOkBr YmR7Qy11fUBACiAgICAgICAgICAgICBwcmVmaXgsIGFsbCB1bmZpbmlzaGVkIFRPRE8gZW50cmll cyAoc2NoZWR1bGVkIG9yIG5vdCkKICAgICAgICAgICAgIGFyZSBhbHNvIGxpc3RlZCB1bmRlciB0 aGUgY3VycmVudCBkYXRlLgoKKioqIFNlYXJjaCB2aWV3CjpQUk9QRVJUSUVTOgo6REVTQ1JJUFRJ T046IEZpbmQgZW50cmllcyBieSBzZWFyY2hpbmcgZm9yIHRleHQKOkVORDoKClRoaXMgYWdlbmRh IHZpZXcgaXMgYSBnZW5lcmFsIHRleHQgc2VhcmNoIGZhY2lsaXR5IGZvciBPcmcgbW9kZSBlbnRy aWVzLgpJdCBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIHRvIGZpbmQgbm90ZXMuCgotIEMtYyBhIHMg OjogVGhpcyBpcyBhIHNwZWNpYWwgc2VhcmNoIHRoYXQgbGV0cyB5b3Ugc2VsZWN0IGVudHJpZXMg YnkKICAgICAgICAgICAgIG1hdGNoaW5nIGEgc3Vic3RyaW5nIG9yIHNwZWNpZmljIHdvcmRzIHVz aW5nIGEgYm9vbGVhbgogICAgICAgICAgICAgbG9naWMuCgpGb3IgZXhhbXBsZSwgdGhlIHNlYXJj aCBzdHJpbmcgQEBpbmZvOkBzYW1we2NvbXB1dGVyIGVxdWlwbWVudH1AQCB3aWxsIGZpbmQgZW50 cmllcwp0aGF0IGNvbnRhaW4gQEBpbmZvOkBzYW1we2NvbXB1dGVyIGVxdWlwbWVudH1AQCBhcyBh IHN1YnN0cmluZy4gClNlYXJjaCB2aWV3IGNhbiBhbHNvIHNlYXJjaCBmb3Igc3BlY2lmaWMga2V5 d29yZHMgaW4gdGhlIGVudHJ5LCB1c2luZyBCb29sZWFuCmxvZ2ljLiAgVGhlIHNlYXJjaCBzdHJp bmcgQEBpbmZvOkBzYW1weytjb21wdXRlciArd2lmaSAtZXRoZXJuZXQgLUB7OFwuMTFbYmddQH19 QEAKd2lsbCBzZWFyY2ggZm9yIG5vdGUgZW50cmllcyB0aGF0IGNvbnRhaW4gdGhlIGtleXdvcmRz IH5jb21wdXRlcn4KYW5kIH53aWZpfiwgYnV0IG5vdCB0aGUga2V5d29yZCB+ZXRoZXJuZXR+LCBh bmQgd2hpY2ggYXJlIGFsc28Kbm90IG1hdGNoZWQgYnkgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB+ OFwuMTFbYmddfiwgbWVhbmluZyB0bwpleGNsdWRlIGJvdGggOC4xMWIgYW5kIDguMTFnLiAKCk5v dGUgdGhhdCBpbiBhZGRpdGlvbiB0byB0aGUgYWdlbmRhIGZpbGVzLCB0aGlzIGNvbW1hbmQgd2ls bCBhbHNvIHNlYXJjaAp0aGUgZmlsZXMgbGlzdGVkIGluIH5vcmctYWdlbmRhLXRleHQtc2VhcmNo LWV4dHJhLWZpbGVzfi4KCioqIEFnZW5kYSBjb21tYW5kcwo6UFJPUEVSVElFUzoKOkRFU0NSSVBU SU9OOiBSZW1vdGUgZWRpdGluZyBvZiBPcmcgdHJlZXMKOkVORDoKCkVudHJpZXMgaW4gdGhlIGFn ZW5kYSBidWZmZXIgYXJlIGxpbmtlZCBiYWNrIHRvIHRoZSBPcmcgZmlsZSBvciBkaWFyeQpmaWxl IHdoZXJlIHRoZXkgb3JpZ2luYXRlLiAgQ29tbWFuZHMgYXJlIHByb3ZpZGVkIHRvIHNob3cgYW5k IGp1bXAgdG8gdGhlCm9yaWdpbmFsIGVudHJ5IGxvY2F0aW9uLCBhbmQgdG8gZWRpdCB0aGUgT3Jn IGZpbGVzICJyZW1vdGVseSIgZnJvbQp0aGUgYWdlbmRhIGJ1ZmZlci4gIFRoaXMgaXMganVzdCBh IHNlbGVjdGlvbiBvZiB0aGUgbWFueSBjb21tYW5kcywgZXhwbG9yZQp0aGUgfkFnZW5kYX4gbWVu dSBhbmQgdGhlIG1hbnVhbCBmb3IgYSBjb21wbGV0ZSBsaXN0LgoKQEBpbmZvOkBzdWJzdWJoZWFk aW5nIE1vdGlvbkBACi0gbiA6OiBOZXh0IGxpbmUgKHNhbWUgYXMgQEBpbmZvOkBrZXl7dXB9QEAg YW5kIEBAaW5mbzpAa2Jke0MtcH1AQCkuCi0gcCA6OiBQcmV2aW91cyBsaW5lIChzYW1lIGFzIEBA aW5mbzpAa2V5e2Rvd259QEAgYW5kCiAgICAgICBAQGluZm86QGtiZHtDLW59QEApLgoKQEBpbmZv OkBzdWJzdWJoZWFkaW5nIFZpZXcvR28gdG8gT3JnIGZpbGVAQAotIG1vdXNlLTMgOjogQEBpbmZv OkBpdGVteCBAa2V5e1NQQ31AQCAKICAgICAgICAgICAgIERpc3BsYXkgdGhlIG9yaWdpbmFsIGxv Y2F0aW9uIG9mIHRoZSBpdGVtIGluIGFub3RoZXIKICAgICAgICAgICAgIHdpbmRvdy4gIFdpdGgg cHJlZml4IGFyZywgbWFrZSBzdXJlIHRoYXQgdGhlIGVudGlyZSBlbnRyeQogICAgICAgICAgICAg aXMgbWFkZSB2aXNpYmxlIGluIHRoZSBvdXRsaW5lLCBub3Qgb25seSB0aGUgaGVhZGluZy4KICAg ICAgICAgICAgICMgCiAgICAgICAgICAgICBAQGluZm86QGl0ZW14IEBrZXl7VEFCfUBACiAgICAg ICAgICAgICBHbyB0byB0aGUgb3JpZ2luYWwgbG9jYXRpb24gb2YgdGhlIGl0ZW0gaW4gYW5vdGhl cgogICAgICAgICAgICAgd2luZG93LiAgVW5kZXIgRW1hY3MgMjIsIEBAaW5mbzpAa2Jke21vdXNl LTF9QEAgd2lsbCBhbHNvCiAgICAgICAgICAgICB3b3JrIGZvciB0aGlzLgogICAgICAgICAgICAg IyAKICAgICAgICAgICAgIEBAaW5mbzpAaXRlbXggQGtleXtSRVR9QEAKICAgICAgICAgICAgIEdv IHRvIHRoZSBvcmlnaW5hbCBsb2NhdGlvbiBvZiB0aGUgaXRlbSBhbmQgZGVsZXRlIG90aGVyCiAg ICAgICAgICAgICB3aW5kb3dzLgoKQEBpbmZvOkBzdWJzdWJoZWFkaW5nIENoYW5nZSBkaXNwbGF5 QEAKLSBvIDo6IERlbGV0ZSBvdGhlciB3aW5kb3dzLgotIGQgQEBpbmZvOkByey99QEAgdyA6OiBT d2l0Y2ggdG8gZGF5L3dlZWsgdmlldy4KLSBmIEBAaW5mbzpAcnthbmR9QEAgYiA6OiBHbyBmb3J3 YXJkL2JhY2t3YXJkIGluIHRpbWUgdG8gZGlzcGxheSB0aGUKICAgICBmb2xsb3dpbmcgfm9yZy1h Z2VuZGEtY3VycmVudC1zcGFufiBkYXlzLiAgRm9yIGV4YW1wbGUsIGlmIHRoZQogICAgIGRpc3Bs YXkgY292ZXJzIGEgd2Vlaywgc3dpdGNoIHRvIHRoZSBmb2xsb3dpbmcvcHJldmlvdXMgd2Vlay4K LSAuIDo6IEdvIHRvIHRvZGF5LgotIGogOjogUHJvbXB0IGZvciBhIGRhdGUgYW5kIGdvIHRoZXJl LgotIHYgbCBAQGluZm86QHJ7b3Igc2hvcnR9QEAgbCA6OiBUb2dnbGUgTG9nYm9vayBtb2RlLiAg SW4gTG9nYm9vawogICAgIG1vZGUsIGVudHJpZXMgdGhhdCB3ZXJlIG1hcmtlZCBET05FIHdoaWxl IGxvZ2dpbmcgd2FzIG9uCiAgICAgKHZhcmlhYmxlIH5vcmctbG9nLWRvbmV+KSBhcmUgc2hvd24g aW4gdGhlIGFnZW5kYSwgYXMgYXJlCiAgICAgZW50cmllcyB0aGF0IGhhdmUgYmVlbiBjbG9ja2Vk IG9uIHRoYXQgZGF5LiAgV2hlbiBjYWxsZWQgd2l0aCBhCiAgICAgQEBpbmZvOkBrYmR7Qy11fUBA IHByZWZpeCwgc2hvdyBhbGwgcG9zc2libGUgbG9nYm9vayBlbnRyaWVzLCBpbmNsdWRpbmcKICAg ICBzdGF0ZSBjaGFuZ2VzLgotIHIgQEBpbmZvOkBye29yfUBAIGcgOjogUmVjcmVhdGUgdGhlIGFn ZW5kYSBidWZmZXIsIHRvIHJlZmxlY3QgdGhlCiAgICAgY2hhbmdlcy4KLSBzIDo6IFNhdmUgYWxs IE9yZyBidWZmZXJzIGluIHRoZSBjdXJyZW50IEVtYWNzIHNlc3Npb24sIGFuZCBhbHNvIHRoZQog ICAgICAgbG9jYXRpb25zIG9mIElEcy4KCkBAaW5mbzpAc3Vic3ViaGVhZGluZyBTZWNvbmRhcnkg ZmlsdGVyaW5nIGFuZCBxdWVyeSBlZGl0aW5nQEAKLSAvIDo6IEZpbHRlciB0aGUgY3VycmVudCBh Z2VuZGEgdmlldyB3aXRoIHJlc3BlY3QgdG8gYSB0YWcuICBZb3UgYXJlCiAgICAgICBwcm9tcHRl ZCBmb3IgYSBsZXR0ZXIgdG8gc2VsZWN0IGEgdGFnLiAgUHJlc3MgQEBpbmZvOkBzYW1wey19QEAg Zmlyc3QgdG8KICAgICAgIHNlbGVjdCBhZ2FpbnN0IHRoZSB0YWcuCi0gXCA6OiBOYXJyb3cgdGhl IGN1cnJlbnQgYWdlbmRhIGZpbHRlciBieSBhbiBhZGRpdGlvbmFsIGNvbmRpdGlvbi4KCkBAaW5m bzpAc3Vic3ViaGVhZGluZyBSZW1vdGUgZWRpdGluZyAoc2VlIHRoZSBtYW51YWwgZm9yIG1hbnkg bW9yZSBjb21tYW5kcylAQAotIDAtOSA6OiBEaWdpdCBhcmd1bWVudC4KLSB0IDo6IENoYW5nZSB0 aGUgVE9ETyBzdGF0ZSBvZiB0aGUgaXRlbSwgaW4gdGhlIGFnZW5kYSBhbmQgaW4gdGhlIG9yZwog ICAgICAgZmlsZS4KLSBDLWsgOjogRGVsZXRlIHRoZSBjdXJyZW50IGFnZW5kYSBpdGVtIGFsb25n IHdpdGggdGhlIGVudGlyZSBzdWJ0cmVlCiAgICAgICAgIGJlbG9uZ2luZyB0byBpdCBpbiB0aGUg b3JpZ2luYWwgT3JnIGZpbGUuCi0gQy1jIEMtdyA6OiBSZWZpbGUgdGhlIGVudHJ5IGF0IHBvaW50 LgotIEMtYyBDLXggQy1hIEBAaW5mbzpAcntvciBzaG9ydH1AQCBhIDo6IEFyY2hpdmUgdGhlIHN1 YnRyZWUKICAgICBjb3JyZXNwb25kaW5nIHRvIHRoZSBlbnRyeSBhdCBwb2ludCB1c2luZyB0aGUg ZGVmYXVsdCBhcmNoaXZpbmcKICAgICBjb21tYW5kIHNldCBpbiB+b3JnLWFyY2hpdmUtZGVmYXVs dC1jb21tYW5kfi4KLSBDLWMgQy14IEMtcyBAQGluZm86QHJ7b3Igc2hvcnR9QEAgJCA6OiBBcmNo aXZlIHRoZSBzdWJ0cmVlCiAgICAgY29ycmVzcG9uZGluZyB0byB0aGUgY3VycmVudCBoZWFkbGlu ZS4KLSBDLWMgQy1zIDo6IFNjaGVkdWxlIHRoaXMgaXRlbSwgd2l0aCBwcmVmaXggYXJnIHJlbW92 ZSB0aGUgc2NoZWR1bGluZwogICAgICAgICAgICAgdGltZXN0YW1wCi0gQy1jIEMtZCA6OiBTZXQg YSBkZWFkbGluZSBmb3IgdGhpcyBpdGVtLCB3aXRoIHByZWZpeCBhcmcgcmVtb3ZlIHRoZQogICAg ICAgICAgICAgZGVhZGxpbmUuCi0gUy1AQGluZm86QGtleXtyaWdodH0gQHJ7YW5kfSBTLUBrZXl7 bGVmdH1AQCA6OiBDaGFuZ2UgdGhlIHRpbWVzdGFtcAogICAgIGFzc29jaWF0ZWQgd2l0aCB0aGUg Y3VycmVudCBsaW5lIGJ5IG9uZSBkYXkuCi0gSSA6OiBTdGFydCB0aGUgY2xvY2sgb24gdGhlIGN1 cnJlbnQgaXRlbS4KLSBPIC8gWCA6OiBTdG9wL2NhbmNlbCB0aGUgcHJldmlvdXNseSBzdGFydGVk IGNsb2NrLgotIEogOjogSnVtcCB0byB0aGUgcnVubmluZyBjbG9jayBpbiBhbm90aGVyIHdpbmRv dy4KCioqIEN1c3RvbSBhZ2VuZGEgdmlld3MKOlBST1BFUlRJRVM6CjpERVNDUklQVElPTjogRGVm aW5pbmcgc3BlY2lhbCBzZWFyY2hlcyBhbmQgdmlld3MKOkVORDoKClRoZSBtYWluIGFwcGxpY2F0 aW9uIG9mIGN1c3RvbSBzZWFyY2hlcyBpcyB0aGUgZGVmaW5pdGlvbiBvZiBrZXlib2FyZApzaG9y dGN1dHMgZm9yIGZyZXF1ZW50bHkgdXNlZCBzZWFyY2hlcywgZWl0aGVyIGNyZWF0aW5nIGFuIGFn ZW5kYQpidWZmZXIsIG9yIGEgc3BhcnNlIHRyZWUgKHRoZSBsYXR0ZXIgY292ZXJpbmcgb2YgY291 cnNlIG9ubHkgdGhlCmN1cnJlbnQgYnVmZmVyKS4KQ3VzdG9tIGNvbW1hbmRzIGFyZSBjb25maWd1 cmVkIGluIHRoZSB2YXJpYWJsZQp+b3JnLWFnZW5kYS1jdXN0b20tY29tbWFuZHN+LiAgWW91IGNh biBjdXN0b21pemUgdGhpcyB2YXJpYWJsZSwgZm9yCmV4YW1wbGUgYnkgcHJlc3NpbmcgQEBpbmZv OkBrYmR7Qy1jIGEgQ31AQC4gIFlvdSBjYW4gYWxzbyBkaXJlY3RseSBzZXQKaXQgd2l0aCBFbWFj cyBMaXNwIGluIEBAaW5mbzpAZmlsZXsuZW1hY3N9QEAuICBUaGUgZm9sbG93aW5nIGV4YW1wbGUK Y29udGFpbnMgYWxsIHZhbGlkIHNlYXJjaCB0eXBlczoKCiMrYmVnaW5fc3JjIGVtYWNzLWxpc3AK KHNldHEgb3JnLWFnZW5kYS1jdXN0b20tY29tbWFuZHMKICAgICAgJygoInciIHRvZG8gIldBSVRJ TkciKQogICAgICAgICgidSIgdGFncyAiK2Jvc3MtdXJnZW50IikKICAgICAgICAoInYiIHRhZ3Mt dG9kbyAiK2Jvc3MtdXJnZW50IikpKQojK2VuZF9zcmMKCkBAaW5mbzpAbm9pbmRlbnRAQCBUaGUg aW5pdGlhbCBzdHJpbmcgaW4gZWFjaCBlbnRyeSBkZWZpbmVzIHRoZSBrZXlzCnlvdSBoYXZlIHRv IHByZXNzIGFmdGVyIHRoZSBkaXNwYXRjaGVyIGNvbW1hbmQgQEBpbmZvOkBrYmR7Qy1jIGF9QEAg aW4Kb3JkZXIgdG8gYWNjZXNzIHRoZSBjb21tYW5kLiAgVXN1YWxseSB0aGlzIHdpbGwgYmUganVz dCBhIHNpbmdsZQpjaGFyYWN0ZXIuICBUaGUgc2Vjb25kIHBhcmFtZXRlciBpcyB0aGUgc2VhcmNo IHR5cGUsIGZvbGxvd2VkIGJ5IHRoZQpzdHJpbmcgb3IgcmVndWxhciBleHByZXNzaW9uIHRvIGJl IHVzZWQgZm9yIHRoZSBtYXRjaGluZy4gIFRoZSBleGFtcGxlCmFib3ZlIHdpbGwgdGhlcmVmb3Jl IGRlZmluZToKCi0gQy1jIGEgdyA6OiBhcyBhIGdsb2JhbCBzZWFyY2ggZm9yIFRPRE8gZW50cmll cyB3aXRoCiAgICAgICAgICAgICBAQGluZm86QHNhbXB7V0FJVElOR31AQCBhcyB0aGUgVE9ETyBr ZXl3b3JkCi0gQy1jIGEgdSA6OiBhcyBhIGdsb2JhbCB0YWdzIHNlYXJjaCBmb3IgaGVhZGxpbmVz IG1hcmtlZAogICAgICAgICAgICAgQEBpbmZvOkBzYW1wezpib3NzOn1AQCBidXQgbm90IEBAaW5m bzpAc2FtcHs6dXJnZW50On1AQAotIEMtYyBhIHYgOjogYXMgdGhlIHNhbWUgc2VhcmNoIGFzIEBA aW5mbzpAa2Jke0MtYyBhIHV9QEAsIGJ1dAogICAgICAgICAgICAgbGltaXRpbmcgdGhlIHNlYXJj aCB0byBoZWFkbGluZXMgdGhhdCBhcmUgYWxzbyBUT0RPIGl0ZW1zCgpAQGluZm86QG5vaW5kZW50 QEAgKkZ1cnRoZXIgUmVhZGluZypcXApbW2h0dHA6Ly9vcmdtb2RlLm9yZy9tYW51YWwvQWdlbmRh LVZpZXdzLmh0bWwjQWdlbmRhLVZpZXdzXVtDaGFwdGVyIDEwIG9mIHRoZSBtYW51YWxdXVxcCltb aHR0cDovL29yZ21vZGUub3JnL3dvcmcvb3JnLXR1dG9yaWFscy9vcmctY3VzdG9tLWFnZW5kYS1j b21tYW5kcy5waHBdW01hdCBMdW5kaW4ncyB0dXRvcmlhbCBhYm91dCBjdXN0b20gYWdlbmRhIGNv bW1hbmRzXV1cXApbW2h0dHA6Ly93d3cubmV3YXJ0aXNhbnMuY29tLzIwMDcvMDgvdXNpbmctb3Jn LW1vZGUtYXMtYS1kYXktcGxhbm5lci5odG1sXVtKb2huIFdpZWdsZXkncyBzZXR1cF1dCgoqIE1h cmt1cAo6UFJPUEVSVElFUzoKOkRFU0NSSVBUSU9OOiBQcmVwYXJlIHRleHQgZm9yIHJpY2ggZXhw b3J0CjpFTkQ6CgpXaGVuIGV4cG9ydGluZyBPcmctbW9kZSBkb2N1bWVudHMsIHRoZSBleHBvcnRl ciB0cmllcyB0byByZWZsZWN0IHRoZQpzdHJ1Y3R1cmUgb2YgdGhlIGRvY3VtZW50IGFzIGFjY3Vy YXRlbHkgYXMgcG9zc2libGUgaW4gdGhlIGJhY2tlbmQuICBTaW5jZQpleHBvcnQgdGFyZ2V0cyBs aWtlIEhUTUwsIExhVGVYLCBvciBEb2NCb29rIGFsbG93IG11Y2ggcmljaGVyIGZvcm1hdHRpbmcs Ck9yZyBtb2RlIGhhcyBydWxlcyBvbiBob3cgdG8gcHJlcGFyZSB0ZXh0IGZvciByaWNoIGV4cG9y dC4gIFRoaXMgc2VjdGlvbgpzdW1tYXJpemVzIHRoZSBtYXJrdXAgcnVsZXMgdXNlZCBpbiBhbiBP cmctbW9kZSBidWZmZXIuCgoqKiBTdHJ1Y3R1cmFsIG1hcmt1cCBlbGVtZW50cwo6UFJPUEVSVElF UzoKOkRFU0NSSVBUSU9OOiBUaGUgYmFzaWMgc3RydWN0dXJlIGFzIHNlZW4gYnkgdGhlIGV4cG9y dGVyCjpFTkQ6CgoqKiogRG9jdW1lbnQgdGl0bGUKOlBST1BFUlRJRVM6CjpERVNDUklQVElPTjog V2hlcmUgdGhlIHRpdGxlIGlzIHRha2VuIGZyb20KOkVORDoKCkBAaW5mbzpAbm9pbmRlbnRAQCBU aGUgdGl0bGUgb2YgdGhlIGV4cG9ydGVkIGRvY3VtZW50IGlzIHRha2VuIGZyb20KdGhlIHNwZWNp YWwgbGluZQoKIytiZWdpbl9zcmMgb3JnCiAgLCMrVElUTEU6IFRoaXMgaXMgdGhlIHRpdGxlIG9m IHRoZSBkb2N1bWVudAojK2VuZF9zcmMKCioqKiBIZWFkaW5ncyBhbmQgc2VjdGlvbnMKOlBST1BF UlRJRVM6CjpERVNDUklQVElPTjogVGhlIGRvY3VtZW50IHN0cnVjdHVyZSBhcyBzZWVuIGJ5IHRo ZSBleHBvcnRlcgo6RU5EOgoKVGhlIG91dGxpbmUgc3RydWN0dXJlIG9mIHRoZSBkb2N1bWVudCBh cyBkZXNjcmliZWQgaW4gW1tEb2N1bWVudCUyMFN0cnVjdHVyZV1bRG9jdW1lbnQgU3RydWN0dXJl XV0sCmZvcm1zIHRoZSBiYXNpcyBmb3IgZGVmaW5pbmcgc2VjdGlvbnMgb2YgdGhlIGV4cG9ydGVk IGRvY3VtZW50LgpIb3dldmVyLCBzaW5jZSB0aGUgb3V0bGluZSBzdHJ1Y3R1cmUgaXMgYWxzbyB1 c2VkIGZvciAoZm9yIGV4YW1wbGUpCmxpc3RzIG9mIHRhc2tzLCBvbmx5IHRoZSBmaXJzdCB0aHJl ZSBvdXRsaW5lIGxldmVscyB3aWxsIGJlIHVzZWQgYXMKaGVhZGluZ3MuICBEZWVwZXIgbGV2ZWxz IHdpbGwgYmVjb21lIGl0ZW1pemVkIGxpc3RzLiAgWW91IGNhbiBjaGFuZ2UKdGhlIGxvY2F0aW9u IG9mIHRoaXMgc3dpdGNoIGdsb2JhbGx5IGJ5IHNldHRpbmcgdGhlIHZhcmlhYmxlCn5vcmctZXhw b3J0LWhlYWRsaW5lLWxldmVsc34sIG9yIG9uIGEgcGVyLWZpbGUgYmFzaXMgd2l0aCBhIGxpbmUK CiMrYmVnaW5fc3JjIG9yZwogICwjK09QVElPTlM6IEg6NAojK2VuZF9zcmMKCioqKiBUYWJsZSBv ZiBjb250ZW50cwo6UFJPUEVSVElFUzoKOkRFU0NSSVBUSU9OOiBUaGUgaWYgYW5kIHdoZXJlIG9m IHRoZSB0YWJsZSBvZiBjb250ZW50cwo6RU5EOgoKVGhlIHRhYmxlIG9mIGNvbnRlbnRzIGlzIG5v cm1hbGx5IGluc2VydGVkIGRpcmVjdGx5IGJlZm9yZSB0aGUgZmlyc3QgaGVhZGxpbmUKb2YgdGhl IGZpbGUuCgojK2JlZ2luX3NyYyBvcmcKICAsIytPUFRJT05TOiB0b2M6MiAgICAgICAgICAob25s eSB0byB0d28gbGV2ZWxzIGluIFRPQykKICAsIytPUFRJT05TOiB0b2M6bmlsICAgICAgICAobm8g VE9DIGF0IGFsbCkKIytlbmRfc3JjIAoKKioqIFBhcmFncmFwaHMKOlBST1BFUlRJRVM6CjpERVND UklQVElPTjogUGFyYWdyYXBocwo6RU5EOgoKUGFyYWdyYXBocyBhcmUgc2VwYXJhdGVkIGJ5IGF0 IGxlYXN0IG9uZSBlbXB0eSBsaW5lLiAgSWYgeW91IG5lZWQgdG8gZW5mb3JjZQphIGxpbmUgYnJl YWsgd2l0aGluIGEgcGFyYWdyYXBoLCB1c2UgQEBpbmZvOkBzYW1we1xcfUBAIGF0IHRoZSBlbmQg b2YgYSBsaW5lLgoKVG8ga2VlcCB0aGUgbGluZSBicmVha3MgaW4gYSByZWdpb24sIGJ1dCBvdGhl cndpc2UgdXNlIG5vcm1hbCBmb3JtYXR0aW5nLCB5b3UKY2FuIHVzZSB0aGlzIGNvbnN0cnVjdCwg d2hpY2ggY2FuIGFsc28gYmUgdXNlZCB0byBmb3JtYXQgcG9ldHJ5LgoKIytiZWdpbl9zcmMgb3Jn CiAgLCMrQkVHSU5fVkVSU0UKICAsIEdyZWF0IGNsb3VkcyBvdmVyaGVhZAogICwgVGlueSBibGFj ayBiaXJkcyByaXNlIGFuZCBmYWxsCiAgLCBTbm93IGNvdmVycyBFbWFjcwogIAogICwgICAgIC0t IEFsZXhTY2hyb2VkZXIKICAsIytFTkRfVkVSU0UKIytlbmRfc3JjCgpXaGVuIHF1b3RpbmcgYSBw YXNzYWdlIGZyb20gYW5vdGhlciBkb2N1bWVudCwgaXQgaXMgY3VzdG9tYXJ5IHRvIGZvcm1hdCB0 aGlzCmFzIGEgcGFyYWdyYXBoIHRoYXQgaXMgaW5kZW50ZWQgb24gYm90aCB0aGUgbGVmdCBhbmQg dGhlIHJpZ2h0IG1hcmdpbi4gIFlvdQpjYW4gaW5jbHVkZSBxdW90YXRpb25zIGluIE9yZy1tb2Rl IGRvY3VtZW50cyBsaWtlIHRoaXM6CgojK2JlZ2luX3NyYyBvcmcKICAsIytCRUdJTl9RVU9URQog ICxFdmVyeXRoaW5nIHNob3VsZCBiZSBtYWRlIGFzIHNpbXBsZSBhcyBwb3NzaWJsZSwKICAsYnV0 IG5vdCBhbnkgc2ltcGxlciAtLSBBbGJlcnQgRWluc3RlaW4KICAsIytFTkRfUVVPVEUKIytlbmRf c3JjCgpJZiB5b3Ugd291bGQgbGlrZSB0byBjZW50ZXIgc29tZSB0ZXh0LCBkbyBpdCBsaWtlIHRo aXM6CiMrYmVnaW5fc3JjIG9yZwogICwjK0JFR0lOX0NFTlRFUgogICxFdmVyeXRoaW5nIHNob3Vs ZCBiZSBtYWRlIGFzIHNpbXBsZSBhcyBwb3NzaWJsZSwgXFwKICAsYnV0IG5vdCBhbnkgc2ltcGxl cgogICwjK0VORF9DRU5URVIKIytlbmRfc3JjCgoqKiogRW1waGFzaXMgYW5kIG1vbm9zcGFjZQo6 UFJPUEVSVElFUzoKOkRFU0NSSVBUSU9OOiBCb2xkLCBpdGFsaWMsIGV0Yy4KOkVORDoKCllvdSBj YW4gbWFrZSB3b3JkcyBAQGluZm86QGJ7KmJvbGQqfUBALCBAQGluZm86QGl7L2l0YWxpYy99QEAs Cl91bmRlcmxpbmVkXywgQEBpbmZvOkBjb2Rlez1jb2RlPX1AQCBhbmQgQEBpbmZvOkBjb2Rle352 ZXJiYXRpbX59QEAsCmFuZCwgaWYgeW91IG11c3QsIEBAaW5mbzpAc2FtcHsrc3RyaWtlLXRocm91 Z2grfUBALiAgVGV4dCBpbiB0aGUgY29kZQphbmQgdmVyYmF0aW0gc3RyaW5nIGlzIG5vdCBwcm9j ZXNzZWQgZm9yIE9yZy1tb2RlIHNwZWNpZmljIHN5bnRheCwgaXQKaXMgZXhwb3J0ZWQgdmVyYmF0 aW0uICBUbyBpbnNlcnQgYSBob3Jpem9udGFsIHJ1bGVzLCB1c2UgYSBsaW5lCmNvbnNpc3Rpbmcg b2Ygb25seSBkYXNoZXMsIGFuZCBhdCBsZWFzdCA1IG9mIHRoZW0uCgoqKiogQ29tbWVudCBsaW5l cwo6UFJPUEVSVElFUzoKOkRFU0NSSVBUSU9OOiBXaGF0IHdpbGwgKm5vdCogYmUgZXhwb3J0ZWQK OkVORDoKCkxpbmVzIHN0YXJ0aW5nIHdpdGggQEBpbmZvOkBzYW1weyN9QEAgaW4gY29sdW1uIHpl cm8gYXJlIHRyZWF0ZWQgYXMKY29tbWVudHMgYW5kIHdpbGwgbmV2ZXIgYmUgZXhwb3J0ZWQuICBJ ZiB5b3Ugd2FudCBhbiBpbmRlbnRlZCBsaW5lIHRvCmJlIHRyZWF0ZWQgYXMgYSBjb21tZW50LCBz dGFydCBpdCB3aXRoIEBAaW5mbzpAc2FtcHsjKyB9QEAuICBBbHNvCmVudGlyZSBzdWJ0cmVlcyBz dGFydGluZyB3aXRoIHRoZSB3b3JkIEBAaW5mbzpAc2FtcHtDT01NRU5UfUBAIHdpbGwKbmV2ZXIg YmUgZXhwb3J0ZWQuICBGaW5hbGx5LCByZWdpb25zIHN1cnJvdW5kZWQgYnkKQEBpbmZvOkBzYW1w eyMrQkVHSU5fQ09NTUVOVH1AQCAuLi4gQEBpbmZvOkBzYW1weyMrRU5EX0NPTU1FTlR9QEAgd2ls bApub3QgYmUgZXhwb3J0ZWQuCgotIEMtYyA7IDo6IFRvZ2dsZSB0aGUgQ09NTUVOVCBrZXl3b3Jk IGF0IHRoZSBiZWdpbm5pbmcgb2YgYW4gZW50cnkuCgoqKiBJbWFnZXMgYW5kIHRhYmxlcwo6UFJP UEVSVElFUzoKOkRFU0NSSVBUSU9OOiBUYWJsZXMgYW5kIEltYWdlcyB3aWxsIGJlIGluY2x1ZGVk CjpFTkQ6CgpGb3IgT3JnIG1vZGUgdGFibGVzLCB0aGUgbGluZXMgYmVmb3JlIHRoZSBmaXJzdCBo b3Jpem9udGFsIHNlcGFyYXRvciBsaW5lCndpbGwgYmVjb21lIHRhYmxlIGhlYWRlciBsaW5lcy4g IFlvdSBjYW4gdXNlIHRoZSBmb2xsb3dpbmcgbGluZXMgc29tZXdoZXJlCmJlZm9yZSB0aGUgdGFi bGUgdG8gYXNzaWduIGEgY2FwdGlvbiBhbmQgYSBsYWJlbCBmb3IgY3Jvc3MgcmVmZXJlbmNlcywg YW5kIGluCnRoZSB0ZXh0IHlvdSBjYW4gcmVmZXIgdG8gdGhlIG9iamVjdCB3aXRoIH5ccmVme3Rh YjpiYXNpYy1kYXRhfX46CgojK2JlZ2luX3NyYyBvcmcKICAsIytDQVBUSU9OOiBUaGlzIGlzIHRo ZSBjYXB0aW9uIGZvciB0aGUgbmV4dCB0YWJsZSAob3IgbGluaykKICAsIytMQUJFTDogICB0Ymw6 YmFzaWMtZGF0YQogICwgICB8IC4uLiB8IC4uLnwKICAsICAgfC0tLS0tfC0tLS18CiMrZW5kX3Ny YwoKU29tZSBiYWNrZW5kcyAoSFRNTCwgTGFUZVgsIGFuZCBEb2NCb29rKSBhbGxvdyB5b3UgdG8g ZGlyZWN0bHkgaW5jbHVkZQppbWFnZXMgaW50byB0aGUgZXhwb3J0ZWQgZG9jdW1lbnQuICBPcmcg ZG9lcyB0aGlzLCBpZiBhIGxpbmsgdG8gYW4gaW1hZ2UKZmlsZXMgZG9lcyBub3QgaGF2ZSBhIGRl c2NyaXB0aW9uIHBhcnQsIGZvciBleGFtcGxlIH5bWy4vaW1nL2EuanBnXV1+LgpJZiB5b3Ugd2lz aCB0byBkZWZpbmUgYSBjYXB0aW9uIGZvciB0aGUgaW1hZ2UgYW5kIG1heWJlIGEgbGFiZWwgZm9y IGludGVybmFsCmNyb3NzIHJlZmVyZW5jZXMsIHlvdSBzdXJlIHRoYXQgdGhlIGxpbmsgaXMgb24g YSBsaW5lIGJ5IGl0c2VsZiBwcmVjZWRlIGl0CndpdGg6CgojK2JlZ2luX3NyYyBvcmcKICAsIytD QVBUSU9OOiBUaGlzIGlzIHRoZSBjYXB0aW9uIGZvciB0aGUgbmV4dCBmaWd1cmUgbGluayAob3Ig dGFibGUpCiAgLCMrTEFCRUw6ICAgZmlnOlNFRC1IUjQwNDkKICAsW1suL2ltZy9hLmpwZ11dCiMr ZW5kX3NyYwoKWW91IG1heSBhbHNvIGRlZmluZSBhZGRpdGlvbmFsIGF0dHJpYnV0ZXMgZm9yIHRo ZSBmaWd1cmUuICBBcyB0aGlzIGlzCmJhY2tlbmQtc3BlY2lmaWMsIHNlZSB0aGUgc2VjdGlvbnMg YWJvdXQgdGhlIGluZGl2aWR1YWwgYmFja2VuZHMgZm9yIG1vcmUKaW5mb3JtYXRpb24uCgoqKiBM aXRlcmFsIGV4YW1wbGVzCjpQUk9QRVJUSUVTOgo6REVTQ1JJUFRJT046IFNvdXJjZSBjb2RlIGV4 YW1wbGVzIHdpdGggc3BlY2lhbCBmb3JtYXR0aW5nCjpFTkQ6CgpZb3UgY2FuIGluY2x1ZGUgbGl0 ZXJhbCBleGFtcGxlcyB0aGF0IHNob3VsZCBub3QgYmUgc3ViamVjdGVkIHRvCm1hcmt1cC4gIFN1 Y2ggZXhhbXBsZXMgd2lsbCBiZSB0eXBlc2V0IGluIG1vbm9zcGFjZSwgc28gdGhpcyBpcyB3ZWxs IHN1aXRlZApmb3Igc291cmNlIGNvZGUgYW5kIHNpbWlsYXIgZXhhbXBsZXMuCgojK2JlZ2luX3Ny YyBvcmcKICAsIytCRUdJTl9FWEFNUExFCiAgLFNvbWUgZXhhbXBsZSBmcm9tIGEgdGV4dCBmaWxl LgogICwjK0VORF9FWEFNUExFCiMrZW5kX3NyYwoKRm9yIHNpbXBsaWNpdHkgd2hlbiB1c2luZyBz bWFsbCBleGFtcGxlcywgeW91IGNhbiBhbHNvIHN0YXJ0IHRoZSBleGFtcGxlCmxpbmVzIHdpdGgg YSBjb2xvbiBmb2xsb3dlZCBieSBhIHNwYWNlLiAgVGhlcmUgbWF5IGFsc28gYmUgYWRkaXRpb25h bAp3aGl0ZXNwYWNlIGJlZm9yZSB0aGUgY29sb246CgojK2JlZ2luX3NyYyBvcmcKICAsSGVyZSBp cyBhbiBleGFtcGxlCiAgLCAgIDogU29tZSBleGFtcGxlIGZyb20gYSB0ZXh0IGZpbGUuCiMrZW5k X3NyYwoKRm9yIHNvdXJjZSBjb2RlIGZyb20gYSBwcm9ncmFtbWluZyBsYW5ndWFnZSwgb3IgYW55 IG90aGVyIHRleHQKdGhhdCBjYW4gYmUgbWFya2VkIHVwIGJ5IGZvbnQtbG9jayBpbiBFbWFjcywg eW91IGNhbiBhc2sgZm9yIGl0IHRvCmxvb2sgbGlrZSB0aGUgZm9udGlmaWVkIEVtYWNzIGJ1ZmZl cgoKIytiZWdpbl9leGFtcGxlCiAgLCMrQkVHSU5fU1JDIGVtYWNzLWxpc3AKICAoZGVmdW4gb3Jn LXhvciAoYSBiKQogICAgICJFeGNsdXNpdmUgb3IuIgogICAgIChpZiBhIChub3QgYikgYikpCiAg LCMrRU5EX1NSQwojK2VuZF9leGFtcGxlCgpUbyBlZGl0IHRoZSBleGFtcGxlIGluIGEgc3BlY2lh bCBidWZmZXIgc3VwcG9ydGluZyB0aGlzIGxhbmd1YWdlLCB1c2UKQEBpbmZvOkBrYmR7Qy1jICd9 QEAgdG8gYm90aCBlbnRlciBhbmQgbGVhdmUgdGhlIGVkaXRpbmcgYnVmZmVyLgoKKiogSW5jbHVk ZSBmaWxlcwo6UFJPUEVSVElFUzoKOkRFU0NSSVBUSU9OOiBJbmNsdWRlIGFkZGl0aW9uYWwgZmls ZXMgaW50byBhIGRvY3VtZW50CjpFTkQ6CgpEdXJpbmcgZXhwb3J0LCB5b3UgY2FuIGluY2x1ZGUg dGhlIGNvbnRlbnQgb2YgYW5vdGhlciBmaWxlLiAgRm9yIGV4YW1wbGUsIHRvCmluY2x1ZGUgeW91 ciBAQGluZm86QGZpbGV7LmVtYWNzfUBAIGZpbGUsIHlvdSBjb3VsZCB1c2U6CgojK2JlZ2luX3Ny YyBvcmcKICAsIytJTkNMVURFOiAifi8uZW1hY3MiIHNyYyBlbWFjcy1saXNwCiMrZW5kX3NyYwpA QGluZm86QG5vaW5kZW50QEAgVGhlIG9wdGlvbmFsIHNlY29uZCBhbmQgdGhpcmQgcGFyYW1ldGVy IGFyZSB0aGUKbWFya3VwIChlLmcuQEBpbmZvOkA6IEBzYW1we3F1b3RlfUBALCBAQGluZm86QHNh bXB7ZXhhbXBsZX1AQCwgb3IKQEBpbmZvOkBzYW1we3NyY31AQCksIGFuZCwgaWYgdGhlIG1hcmt1 cCBpcyBAQGluZm86QHNhbXB7c3JjfUBALCB0aGUKbGFuZ3VhZ2UgZm9yIGZvcm1hdHRpbmcgdGhl IGNvbnRlbnRzLiAgVGhlIG1hcmt1cCBpcyBvcHRpb25hbCwgaWYgaXQKaXMgbm90IGdpdmVuLCB0 aGUgdGV4dCB3aWxsIGJlIGFzc3VtZWQgdG8gYmUgaW4gT3JnIG1vZGUgZm9ybWF0IGFuZAp3aWxs IGJlIHByb2Nlc3NlZCBub3JtYWxseS4gQEBpbmZvOkBrYmR7Qy1jICd9QEAgd2lsbCB2aXNpdCB0 aGUKaW5jbHVkZWQgZmlsZS4KCioqIEVtYmVkZGVkIExhVGVYCjpQUk9QRVJUSUVTOgo6REVTQ1JJ UFRJT046IExhVGVYIGNhbiBiZSBmcmVlbHkgdXNlZCBpbnNpZGUgT3JnIGRvY3VtZW50cwo6RU5E OgoKRm9yIHNjaWVudGlmaWMgbm90ZXMgd2hpY2ggbmVlZCB0byBiZSBhYmxlIHRvIGNvbnRhaW4g bWF0aGVtYXRpY2FsCnN5bWJvbHMgYW5kIHRoZSBvY2Nhc2lvbmFsIGZvcm11bGEsIE9yZy1tb2Rl IHN1cHBvcnRzIGVtYmVkZGluZyBMYVRlWApjb2RlIGludG8gaXRzIGZpbGVzLiAgWW91IGNhbiBk aXJlY3RseSB1c2UgVGVYLWxpa2UgbWFjcm9zIGZvciBzcGVjaWFsCnN5bWJvbHMsIGVudGVyIGZv cm11bGFzIGFuZCBlbnRpcmUgTGFUZVggZW52aXJvbm1lbnRzLgoKIytiZWdpbl9zcmMgb3JnCiAg LEFuZ2xlcyBhcmUgd3JpdHRlbiBhcyBHcmVlayBsZXR0ZXJzIFxhbHBoYSwgXGJldGEgYW5kIFxn YW1tYS4gIFRoZSBtYXNzIGlmCiAgLHRoZSBzdW4gaXMgTV9zdW4gPSAxLjk4OSB4IDEwXjMwIGtn LiAgVGhlIHJhZGl1cyBvZiB0aGUgc3VuIGlzIFJfQHtzdW5AfSA9CiAgLDYuOTYgeCAxMF44IG0u ICBJZiAkYV4yPWIkIGFuZCAkYj0yJCwgdGhlbiB0aGUgc29sdXRpb24gbXVzdCBiZSBlaXRoZXIK ICAsJGE9K1xzcXJ0QHsyQH0kIG9yICRhPS1cc3FydEB7MkB9JC4KICAKICAsXGJlZ2luQHtlcXVh dGlvbkB9CiAgLHg9XHNxcnRAe2JAfQogICxcZW5kQHtlcXVhdGlvbkB9CiMrZW5kX3NyYwoKQEBp bmZvOkBub2luZGVudEBAIFdpdGggW1todHRwOi8vb3JnbW9kZS5vcmcvbWFudWFsL0xhVGVYLWZy YWdtZW50cy5odG1sI0xhVGVYLWZyYWdtZW50c11bc3BlY2lhbCBzZXR1cF1dLCBMYVRlWCBzbmlw cGV0cyB3aWxsIGJlIGluY2x1ZGVkIGFzIGltYWdlcyB3aGVuIGV4cG9ydGluZyB0byBIVE1MLgoK QEBpbmZvOkBub2luZGVudEBAICpGdXJ0aGVyIFJlYWRpbmcqXFwKW1todHRwOi8vb3JnbW9kZS5v cmcvbWFudWFsL01hcmt1cC5odG1sI01hcmt1cF1bQ2hhcHRlciAxMSBvZiB0aGUgbWFudWFsXV0K CiogRXhwb3J0aW5nCjpQUk9QRVJUSUVTOgo6REVTQ1JJUFRJT046IFNoYXJpbmcgYW5kIHB1Ymxp c2hpbmcgb2Ygbm90ZXMKOkVORDoKCk9yZy1tb2RlIGRvY3VtZW50cyBjYW4gYmUgZXhwb3J0ZWQg aW50byBhIHZhcmlldHkgb2Ygb3RoZXIgZm9ybWF0czogQVNDSUkKZXhwb3J0IGZvciBpbmNsdXNp b24gaW50byBlbWFpbHMsIEhUTUwgdG8gcHVibGlzaCBvbiB0aGUgd2ViLCBMYVRlWC9QREYKZm9y IGJlYXV0aWZ1bCBwcmludGVkIGRvY3VtZW50cyBhbmQgRG9jQm9vayB0byBlbnRlciB0aGUgd29y bGQgb2YgbWFueSBvdGhlcgpmb3JtYXRzIHVzaW5nIERvY0Jvb2sgdG9vbHMuICBUaGVyZSBpcyBh bHNvIGV4cG9ydCB0byBpQ2FsZW5kYXIgZm9ybWF0IHNvCnRoYXQgcGxhbm5pbmcgaW5mb3JtYXRp b24gY2FuIGJlIGluY29ycG9yYXRlZCBpbnRvIGRlc2t0b3AgY2FsZW5kYXJzLgoKKiogRXhwb3J0 IG9wdGlvbnMKOlBST1BFUlRJRVM6CjpERVNDUklQVElPTjogUGVyLWZpbGUgZXhwb3J0IHNldHRp bmdzCjpFTkQ6CgpUaGUgZXhwb3J0ZXIgcmVjb2duaXplcyBzcGVjaWFsIGxpbmVzIGluIHRoZSBi dWZmZXIgd2hpY2ggcHJvdmlkZQphZGRpdGlvbmFsIGluZm9ybWF0aW9uLiAgVGhlc2UgbGluZXMg bWF5IGJlIHB1dCBhbnl3aGVyZSBpbiB0aGUgZmlsZS4KVGhlIHdob2xlIHNldCBvZiBsaW5lcyBj YW4gYmUgaW5zZXJ0ZWQgaW50byB0aGUgYnVmZmVyIHdpdGgKQEBpbmZvOkBrYmR7Qy1jIEMtZSB0 fUBALgoKLSBDLWMgQy1lIHQgOjogSW5zZXJ0IHRlbXBsYXRlIHdpdGggZXhwb3J0IG9wdGlvbnMs IHNlZSBleGFtcGxlIGJlbG93LgoKOiAjK1RJVExFOiAgICAgICB0aGUgdGl0bGUgdG8gYmUgc2hv d24gKGRlZmF1bHQgaXMgdGhlIGJ1ZmZlciBuYW1lKQo6ICMrQVVUSE9SOiAgICAgIHRoZSBhdXRo b3IgKGRlZmF1bHQgdGFrZW4gZnJvbSBAY29kZXt1c2VyLWZ1bGwtbmFtZX0pCjogIytEQVRFOiAg ICAgICAgYSBkYXRlLCBmaXhlZCwgb2YgYSBmb3JtYXQgc3RyaW5nIGZvciBAY29kZXtmb3JtYXQt dGltZS1zdHJpbmd9CjogIytFTUFJTDogICAgICAgaGlzL2hlciBlbWFpbCBhZGRyZXNzIChkZWZh dWx0IGZyb20gQGNvZGV7dXNlci1tYWlsLWFkZHJlc3N9KQo6ICMrREVTQ1JJUFRJT046IHRoZSBw YWdlIGRlc2NyaXB0aW9uLCBlLmcuQDogZm9yIHRoZSBYSFRNTCBtZXRhIHRhZwo6ICMrS0VZV09S RFM6ICAgIHRoZSBwYWdlIGtleXdvcmRzLCBlLmcuQDogZm9yIHRoZSBYSFRNTCBtZXRhIHRhZwo6 ICMrTEFOR1VBR0U6ICAgIGxhbmd1YWdlIGZvciBIVE1MLCBlLmcuQDogQHNhbXB7ZW59IChAY29k ZXtvcmctZXhwb3J0LWRlZmF1bHQtbGFuZ3VhZ2V9KQo6ICMrVEVYVDogICAgICAgIFNvbWUgZGVz Y3JpcHRpdmUgdGV4dCB0byBiZSBpbnNlcnRlZCBhdCB0aGUgYmVnaW5uaW5nLgo6ICMrVEVYVDog ICAgICAgIFNldmVyYWwgbGluZXMgbWF5IGJlIGdpdmVuLgo6ICMrT1BUSU9OUzogICAgIEg6MiBu dW06dCB0b2M6dCBcbjpuaWwgQEA6dCA6OnQgfDp0IF46dCBmOnQgVGVYOnQgLi4uCjogIytMSU5L X1VQOiAgICAgdGhlIGBgdXAnJyBsaW5rIG9mIGFuIGV4cG9ydGVkIHBhZ2UKOiAjK0xJTktfSE9N RTogICB0aGUgYGBob21lJycgbGluayBvZiBhbiBleHBvcnRlZCBwYWdlCjogIytMQVRFWF9IRUFE RVI6IGV4dHJhIGxpbmUocykgZm9yIHRoZSBATGFUZVh7fSBoZWFkZXIsIGxpa2UgXHVzZXBhY2th Z2VAe3h5ekB9CgoqKiBUaGUgZXhwb3J0IGRpc3BhdGNoZXIKOlBST1BFUlRJRVM6CjpERVNDUklQ VElPTjogSG93IHRvIGFjY2VzcyBleHBvcnRlciBjb21tYW5kcwo6RU5EOgoKQWxsIGV4cG9ydCBj b21tYW5kcyBjYW4gYmUgcmVhY2hlZCB1c2luZyB0aGUgZXhwb3J0IGRpc3BhdGNoZXIsIHdoaWNo CmlzIGEgcHJlZml4IGtleSB0aGF0IHByb21wdHMgZm9yIGFuIGFkZGl0aW9uYWwga2V5IHNwZWNp ZnlpbmcgdGhlCmNvbW1hbmQuICBOb3JtYWxseSB0aGUgZW50aXJlIGZpbGUgaXMgZXhwb3J0ZWQs IGJ1dCBpZiB0aGVyZSBpcyBhbgphY3RpdmUgcmVnaW9uIHRoYXQgY29udGFpbnMgb25lIG91dGxp bmUgdHJlZSwgdGhlIGZpcnN0IGhlYWRpbmcgaXMKdXNlZCBhcyBkb2N1bWVudCB0aXRsZSBhbmQg dGhlIHN1YnRyZWVzIGFyZSBleHBvcnRlZC4KCi0gQy1jIEMtZSA6OiBEaXNwYXRjaGVyIGZvciBl eHBvcnQgYW5kIHB1Ymxpc2hpbmcgY29tbWFuZHMuCgoqKiBBU0NJSS9MYXRpbi0xL1VURi04IGV4 cG9ydAo6UFJPUEVSVElFUzoKOkRFU0NSSVBUSU9OOiBFeHBvcnRpbmcgdG8gZmxhdCBmaWxlcyB3 aXRoIGVuY29kaW5nCjpFTkQ6CgpBU0NJSSBleHBvcnQgcHJvZHVjZXMgYSBzaW1wbGUgYW5kIHZl cnkgcmVhZGFibGUgdmVyc2lvbiBvZiBhbgpPcmctbW9kZSBmaWxlLCBjb250YWluaW5nIG9ubHkg cGxhaW4gQVNDSUkuICBMYXRpbi0xIGFuZCBVVEYtOCBleHBvcnQKYXVnbWVudCB0aGUgZmlsZSB3 aXRoIHNwZWNpYWwgY2hhcmFjdGVycyBhbmQgc3ltYm9scyBhdmFpbGFibGUgaW4KdGhlc2UgZW5j b2RpbmdzLgoKLSBDLWMgQy1lIGEgOjogRXhwb3J0IGFzIEFTQ0lJIGZpbGUuCi0gQy1jIEMtZSBu IEBAaW5mbzpAIEAgQHJ7YW5kfSBAIEBAQCBDLWMgQy1lIE4gOjogTGlrZSB0aGUgYWJvdmUKICAg ICBjb21tYW5kcywgYnV0IHVzZSBMYXRpbi0xIGVuY29kaW5nLgotIEMtYyBDLWUgdSBAQGluZm86 QCBAIEBye2FuZH0gQCBAQEAgQy1jIEMtZSBVIDo6IExpa2UgdGhlIGFib3ZlCiAgICAgY29tbWFu ZHMsIGJ1dCB1c2UgVVRGLTggZW5jb2RpbmcuCgoqKiBIVE1MIGV4cG9ydAo6UFJPUEVSVElFUzoK OkRFU0NSSVBUSU9OOiBFeHBvcnRpbmcgdG8gSFRNTAo6RU5EOgoKLSBDLWMgQy1lIGggOjogRXhw b3J0IGFzIEhUTUwgZmlsZSBAQGluZm86QGZpbGV7bXlmaWxlLmh0bWx9QEAuCi0gQy1jIEMtZSBi IDo6IEV4cG9ydCBhcyBIVE1MIGZpbGUgYW5kIGltbWVkaWF0ZWx5IG9wZW4gaXQgd2l0aCBhCiAg ICAgICAgICAgICAgIGJyb3dzZXIuCgpUbyBpbnNlcnQgSFRNTCB0aGF0IHNob3VsZCBiZSBjb3Bp ZWQgdmVyYmF0aW0gdG8gdGhlIGV4cG9ydGVkIGZpbGUgdXNlCmVpdGhlcgoKIytiZWdpbl9zcmMg b3JnCiMrSFRNTDogTGl0ZXJhbCBIVE1MIGNvZGUgZm9yIGV4cG9ydAojK2VuZF9zcmMKQEBpbmZv OkBub2luZGVudEBAIG9yCiMrYmVnaW5fc3JjIG9yZwojK0JFR0lOX0hUTUwKQWxsIGxpbmVzIGJl dHdlZW4gdGhlc2UgbWFya2VycyBhcmUgZXhwb3J0ZWQgbGl0ZXJhbGx5CiMrRU5EX0hUTUwKIytl bmRfc3JjCgoqKiBMYVRlWCBhbmQgUERGIGV4cG9ydAo6UFJPUEVSVElFUzoKOkRFU0NSSVBUSU9O OiBFeHBvcnRpbmcgdG8gTGFUZVgsIGFuZCBwcm9jZXNzaW5nIHRvIFBERgo6RU5EOgoKLSBDLWMg Qy1lIGwgOjogRXhwb3J0IGFzIExhVGVYIGZpbGUgQEBpbmZvOkBmaWxle215ZmlsZS50ZXh9QEAu Ci0gQy1jIEMtZSBwIDo6IEV4cG9ydCBhcyBMYVRlWCBhbmQgdGhlbiBwcm9jZXNzIHRvIFBERi4K LSBDLWMgQy1lIGQgOjogRXhwb3J0IGFzIExhVGVYIGFuZCB0aGVuIHByb2Nlc3MgdG8gUERGLCB0 aGVuIG9wZW4gdGhlCiAgICAgICAgICAgICAgIHJlc3VsdGluZyBQREYgZmlsZS4KCkJ5IGRlZmF1 bHQsIHRoZSBMYVRlWCBvdXRwdXQgdXNlcyB0aGUgY2xhc3MgfmFydGljbGV+LiAgWW91IGNhbgpj aGFuZ2UgdGhpcyBieSBhZGRpbmcgYW4gb3B0aW9uIGxpa2UgfiMrTGFUZVhfQ0xBU1M6IG15Y2xh c3N+IGluIHlvdXIKZmlsZS4gIFRoZSBjbGFzcyBtdXN0IGJlIGxpc3RlZCBpbiB+b3JnLWV4cG9y dC1sYXRleC1jbGFzc2Vzfi4KCkVtYmVkZGVkIExhVGVYIGFzIGRlc2NyaWJlZCBpbiBbW0VtYmVk ZGVkIExhVGVYXV0sIHdpbGwgYmUgY29ycmVjdGx5Cmluc2VydGVkIGludG8gdGhlIExhVGVYIGZp bGUuICBTaW1pbGFybHkgdG8gdGhlIEhUTUwgZXhwb3J0ZXIsIHlvdSBjYW4gdXNlCn4jK0xhVGVY On4gYW5kIH4jK0JFR0lOX0xhVGVYIC4uLiAjK0VORF9MYVRlWH4gY29uc3RydWN0IHRvIGFkZAp2 ZXJiYXRpbSBMYVRlWCBjb2RlLgoKKiogRG9jQm9vayBleHBvcnQKOlBST1BFUlRJRVM6CjpERVND UklQVElPTjogRXhwb3J0aW5nIHRvIERvY0Jvb2sKOkVORDoKCi0gQy1jIEMtZSBEIDo6IEV4cG9y dCBhcyBEb2NCb29rIGZpbGUuCgpTaW1pbGFybHkgdG8gdGhlIEhUTUwgZXhwb3J0ZXIsIHlvdSBj YW4gdXNlIH4jK0RPQ0JPT0s6fiBhbmQKfiMrQkVHSU5fRE9DQk9PSyAuLi4gIytFTkRfRE9DQk9P S34gY29uc3RydWN0IHRvIGFkZCB2ZXJiYXRpbSBMYVRlWApjb2RlLgoKKiogaUNhbGVuZGFyIGV4 cG9ydAo6UFJPUEVSVElFUzoKOkRFU0NSSVBUSU9OOiAKOkVORDoKCi0gQy1jIEMtZSBpIDo6IENy ZWF0ZSBpQ2FsZW5kYXIgZW50cmllcyBmb3IgdGhlIGN1cnJlbnQgZmlsZSBpbiBhCiAgICAgICAg ICAgICAgIEBAaW5mbzpAZmlsZXsuaWNzfUBAIGZpbGUuCi0gQy1jIEMtZSBjIDo6IENyZWF0ZSBh IHNpbmdsZSBsYXJnZSBpQ2FsZW5kYXIgZmlsZSBmcm9tIGFsbCBmaWxlcyBpbgogICAgICAgICAg ICAgICB+b3JnLWFnZW5kYS1maWxlc34gYW5kIHdyaXRlIGl0IHRvIHRoZSBmaWxlIGdpdmVuCiAg ICAgICAgICAgICAgIGJ5IH5vcmctY29tYmluZWQtYWdlbmRhLWljYWxlbmRhci1maWxlfi4KCkBA aW5mbzpAbm9pbmRlbnRAQCAqRnVydGhlciBSZWFkaW5nKlxcCltbaHR0cDovL29yZ21vZGUub3Jn L21hbnVhbC9FeHBvcnRpbmcuaHRtbCNFeHBvcnRpbmddW0NoYXB0ZXIgMTIgb2YgdGhlIG1hbnVh bF1dXFwKW1todHRwOi8vb3JnbW9kZS5vcmcvd29yZy9vcmctdHV0b3JpYWxzL2ltYWdlcy1hbmQt eGh0bWwtZXhwb3J0LnBocF1bU2ViYXN0aWFuIFJvc2UncyBpbWFnZSBoYW5kbGluZyB0dXRvcmlh bF1dXFwKW1todHRwOi8vb3JnbW9kZS5vcmcvd29yZy9vcmctdHV0b3JpYWxzL29yZy1sYXRleC1l eHBvcnQucGhwXVtUaG9tYXMgRHllJ3MgTGFUZVggZXhwb3J0IHR1dG9yaWFsXV1cXApbW2h0dHA6 Ly9vcmdtb2RlLm9yZy93b3JnL29yZy10dXRvcmlhbHMvb3JnLWJlYW1lci90dXRvcmlhbC5waHBd W0VyaWMgRnJhZ2EncyBCRUFNRVIgcHJlc2VudGF0aW9uIHR1dG9yaWFsXV0KCiogUHVibGlzaGlu Zwo6UFJPUEVSVElFUzoKOkRFU0NSSVBUSU9OOiBDcmVhdGUgYSB3ZWIgc2l0ZSBvZiBsaW5rZWQg T3JnIGZpbGVzCjpFTkQ6CgoKT3JnIGluY2x1ZGVzIGEgcHVibGlzaGluZyBtYW5hZ2VtZW50IHN5 c3RlbSB0aGF0IGFsbG93cyB5b3UgdG8gY29uZmlndXJlCmF1dG9tYXRpYyBIVE1MIGNvbnZlcnNp b24gb2YgL3Byb2plY3RzLyBjb21wb3NlZCBvZiBpbnRlcmxpbmtlZCBvcmcKZmlsZXMuICBZb3Ug Y2FuIGFsc28gY29uZmlndXJlIE9yZyB0byBhdXRvbWF0aWNhbGx5IHVwbG9hZCB5b3VyIGV4cG9y dGVkIEhUTUwKcGFnZXMgYW5kIHJlbGF0ZWQgYXR0YWNobWVudHMsIHN1Y2ggYXMgaW1hZ2VzIGFu ZCBzb3VyY2UgY29kZSBmaWxlcywgdG8gYSB3ZWIKc2VydmVyLiAgRm9yIGRldGFpbGVkIGluc3Ry dWN0aW9ucyBhYm91dCBzZXR1cCwgc2VlIHRoZSBtYW51YWwuCgpIZXJlIGlzIGFuIGV4YW1wbGU6 CgojK2JlZ2luX3NyYyBlbWFjcy1saXNwCiAgKHNldHEgb3JnLXB1Ymxpc2gtcHJvamVjdC1hbGlz dAogICAgICAgICcoKCJvcmciCiAgICAgICAgICAgOmJhc2UtZGlyZWN0b3J5ICJ+L29yZy8iCiAg ICAgICAgICAgOnB1Ymxpc2hpbmctZGlyZWN0b3J5ICJ+L3B1YmxpY19odG1sIgogICAgICAgICAg IDpzZWN0aW9uLW51bWJlcnMgbmlsCiAgICAgICAgICAgOnRhYmxlLW9mLWNvbnRlbnRzIG5pbAog ICAgICAgICAgIDpzdHlsZSAiPGxpbmsgcmVsPVwic3R5bGVzaGVldFwiCiAgICAgICAgICAgICAg ICAgIGhyZWY9XCIuLi9vdGhlci9teXN0eWxlLmNzc1wiCiAgICAgICAgICAgICAgICAgIHR5cGU9 XCJ0ZXh0L2Nzc1wiLz4iKSkpCiMrZW5kX3NyYwoKLSBDLWMgQy1lIEMgOjogUHJvbXB0IGZvciBh IHNwZWNpZmljIHByb2plY3QgYW5kIHB1Ymxpc2ggYWxsIGZpbGVzCiAgICAgICAgICAgICAgIHRo YXQgYmVsb25nIHRvIGl0LgotIEMtYyBDLWUgUCA6OiBQdWJsaXNoIHRoZSBwcm9qZWN0IGNvbnRh aW5pbmcgdGhlIGN1cnJlbnQgZmlsZS4KLSBDLWMgQy1lIEYgOjogUHVibGlzaCBvbmx5IHRoZSBj dXJyZW50IGZpbGUuCi0gQy1jIEMtZSBFIDo6IFB1Ymxpc2ggZXZlcnkgcHJvamVjdC4KCk9yZyB1 c2VzIHRpbWVzdGFtcHMgdG8gdHJhY2sgd2hlbiBhIGZpbGUgaGFzIGNoYW5nZWQuICBUaGUgYWJv dmUgZnVuY3Rpb25zCm5vcm1hbGx5IG9ubHkgcHVibGlzaCBjaGFuZ2VkIGZpbGVzLiAgWW91IGNh biBvdmVycmlkZSB0aGlzIGFuZCBmb3JjZQpwdWJsaXNoaW5nIG9mIGFsbCBmaWxlcyBieSBnaXZp bmcgYSBwcmVmaXggYXJndW1lbnQgdG8gYW55IG9mIHRoZSBjb21tYW5kcwphYm92ZS4KCkBAaW5m bzpAbm9pbmRlbnRAQCAqRnVydGhlciBSZWFkaW5nKgpbW2h0dHA6Ly9vcmdtb2RlLm9yZy9tYW51 YWwvUHVibGlzaGluZy5odG1sI1B1Ymxpc2hpbmddW0NoYXB0ZXIgMTMgb2YgdGhlIG1hbnVhbF1d XFwKW1todHRwOi8vb3JnbW9kZS5vcmcvd29yZy9vcmctdHV0b3JpYWxzL29yZy1wdWJsaXNoLWh0 bWwtdHV0b3JpYWwucGhwXVtTZWJhc3RpYW4gUm9zZSdzIHB1Ymxpc2hpbmcgdHV0b3JpYWxdXVxc CltbaHR0cDovL29yZ21vZGUub3JnL3dvcmcvb3JnLXR1dG9yaWFscy9vcmctamVreWxsLnBocF1b SWFuIEJhcnRvbidzIEpla3lsbC9ibG9nZ2luZyBzZXR1cF1dCgoqIFdvcmtpbmcgV2l0aCBTb3Vy Y2UgQ29kZQo6UFJPUEVSVElFUzoKOkRFU0NSSVBUSU9OOiBTb3VyY2UgY29kZSBzbmlwcGV0cyBl bWJlZGRlZCBpbiBPcmcKOkVORDoKCk9yZy1tb2RlIHByb3ZpZGVzIGEgbnVtYmVyIG9mIGZlYXR1 cmVzIGZvciB3b3JraW5nIHdpdGggc291cmNlIGNvZGUsCmluY2x1ZGluZyBlZGl0aW5nIG9mIGNv ZGUgYmxvY2tzIGluIHRoZWlyIG5hdGl2ZSBtYWpvci1tb2RlLApldmFsdWF0aW9uIG9mIGNvZGUg YmxvY2tzLCB0YW5nbGluZyBvZiBjb2RlIGJsb2NrcywgYW5kIGV4cG9ydGluZyBjb2RlCmJsb2Nr cyBhbmQgdGhlaXIgcmVzdWx0cyBpbiBzZXZlcmFsIGZvcm1hdHMuCgpAQGluZm86QHN1YmhlYWRp bmcgU3RydWN0dXJlIG9mIENvZGUgQmxvY2tzQEAKVGhlIHN0cnVjdHVyZSBvZiBjb2RlIGJsb2Nr cyBpcyBhcyBmb2xsb3dzOgoKOiAjK05BTUU6IDxuYW1lPgo6ICMrQkVHSU5fU1JDIDxsYW5ndWFn ZT4gPHN3aXRjaGVzPiA8aGVhZGVyIGFyZ3VtZW50cz4KOiAgIDxib2R5Pgo6ICMrRU5EX1NSQwoK CldoZXJlIH48bmFtZT5+IGlzIGEgc3RyaW5nIHVzZWQgdG8gbmFtZSB0aGUgY29kZSBibG9jaywg fjxsYW5ndWFnZT5+CnNwZWNpZmllcyB0aGUgbGFuZ3VhZ2Ugb2YgdGhlIGNvZGUgYmxvY2sgKGUu Zy46IH5lbWFjcy1saXNwfiwgfnNoZWxsfiwKflJ+LCB+cHl0aG9ufiwgZXRjLi4uKSwgfjxzd2l0 Y2hlcz5+IGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wgZXhwb3J0IG9mCnRoZSBjb2RlIGJsb2NrLCB+ PGhlYWRlciBhcmd1bWVudHM+fiBjYW4gYmUgdXNlZCB0byBjb250cm9sIG1hbnkKYXNwZWN0cyBv ZiBjb2RlIGJsb2NrIGJlaGF2aW9yIGFzIGRlbW9uc3RyYXRlZCBiZWxvdywgYW5kIH48Ym9keT5+ CmNvbnRhaW5zIHRoZSBhY3R1YWwgc291cmNlIGNvZGUuCgpAQGluZm86QHN1YmhlYWRpbmcgRWRp dGluZyBzb3VyY2UgY29kZUBAClVzZSBAQGluZm86QGtiZHtDLWMgJ31AQCB0byBlZGl0IHRoZSBj dXJyZW50IGNvZGUgYmxvY2suICBUaGlzIGJyaW5ncwp1cCBhIGxhbmd1YWdlIG1ham9yLW1vZGUg ZWRpdCBidWZmZXIgY29udGFpbmluZyB0aGUgYm9keSBvZiB0aGUgY29kZQpibG9jay4gIFNhdmlu ZyB0aGlzIGJ1ZmZlciB3aWxsIHdyaXRlIHRoZSBuZXcgY29udGVudHMgYmFjayB0byB0aGUgT3Jn CmJ1ZmZlci4gIFVzZSBAQGluZm86QGtiZHtDLWMgJ31AQCBhZ2FpbiB0byBleGl0IHRoZSBlZGl0 IGJ1ZmZlci4KCkBAaW5mbzpAc3ViaGVhZGluZyBFdmFsdWF0aW5nIGNvZGUgYmxvY2tzQEAKVXNl IEBAaW5mbzpAa2Jke0MtYyBDLWN9QEAgdG8gZXZhbHVhdGUgdGhlIGN1cnJlbnQgY29kZSBibG9j ayBhbmQKaW5zZXJ0IGl0cyByZXN1bHRzIGluIHRoZSBPcmctbW9kZSBidWZmZXIuICBCeSBkZWZh dWx0LCBldmFsdWF0aW9uIGlzCm9ubHkgdHVybmVkIG9uIGZvciB+ZW1hY3MtbGlzcH4gY29kZSBi bG9ja3MsIGhvd2V2ZXIgc3VwcG9ydCBleGlzdHMKZm9yIGV2YWx1YXRpbmcgYmxvY2tzIGluIG1h bnkgbGFuZ3VhZ2VzLiAgRm9yIGEgY29tcGxldGUgbGlzdCBvZgpzdXBwb3J0ZWQgbGFuZ3VhZ2Vz IHNlZSB0aGUgbWFudWFsLiAgVGhlIGZvbGxvd2luZyBzaG93cyBhIGNvZGUgYmxvY2sKYW5kIGl0 cyByZXN1bHRzLgoKOiAjK0JFR0lOX1NSQyBlbWFjcy1saXNwCjogICAoKyAxIDIgMyA0KQo6ICMr RU5EX1NSQwo6ICAKOiAjK1JFU1VMVFM6CjogOiAxMAoKQEBpbmZvOkBzdWJoZWFkaW5nIEV4dHJh Y3Rpbmcgc291cmNlIGNvZGVAQApVc2UgQEBpbmZvOkBrYmR7Qy1jIEMtdiB0fUBAIHRvIGNyZWF0 ZSBwdXJlIHNvdXJjZSBjb2RlIGZpbGVzIGJ5CmV4dHJhY3RpbmcgY29kZSBmcm9tIHNvdXJjZSBi bG9ja3MgaW4gdGhlIGN1cnJlbnQgYnVmZmVyLiAgVGhpcyBpcwpyZWZlcnJlZCB0byBhcyAidGFu Z2xpbmciLS0tYSB0ZXJtIGFkb3B0ZWQgZnJvbSB0aGUgbGl0ZXJhdGUKcHJvZ3JhbW1pbmcgY29t bXVuaXR5LiAgRHVyaW5nICJ0YW5nbGluZyIgb2YgY29kZSBibG9ja3MgdGhlaXIgYm9kaWVzCmFy ZSBleHBhbmRlZCB1c2luZyB+b3JnLWJhYmVsLWV4cGFuZC1zcmMtYmxvY2t+IHdoaWNoIGNhbiBl eHBhbmQgYm90aAp2YXJpYWJsZSBhbmQgIm5vd2ViIiBzdHlsZSByZWZlcmVuY2VzLiAgSW4gb3Jk ZXIgdG8gdGFuZ2xlIGEgY29kZQpibG9jayBpdCBtdXN0IGhhdmUgYSB+OnRhbmdsZX4gaGVhZGVy IGFyZ3VtZW50LCBzZWUgdGhlIG1hbnVhbCBmb3IKZGV0YWlscy4KCkBAaW5mbzpAc3ViaGVhZGlu ZyBMaWJyYXJ5IG9mIEJhYmVsQEAKVXNlIEBAaW5mbzpAa2Jke0MtYyBDLXYgbH1AQCB0byBsb2Fk IHRoZSBjb2RlIGJsb2NrcyBmcm9tIGFuIE9yZy1tb2RlCmZpbGVzIGludG8gdGhlICJMaWJyYXJ5 IG9mIEJhYmVsIiwgdGhlc2UgYmxvY2tzIGNhbiB0aGVuIGJlIGV2YWx1YXRlZApmcm9tIGFueSBP cmctbW9kZSBidWZmZXIuICBBIGNvbGxlY3Rpb24gb2YgZ2VuZXJhbGx5IHVzZWZ1bCBjb2RlCmJs b2NrcyBpcyBkaXN0cmlidXRlZCB3aXRoIE9yZy1tb2RlIGluIH5jb250cmliL2xpYnJhcnktb2Yt YmFiZWwub3Jnfi4KCkBAaW5mbzpAc3ViaGVhZGluZyBIZWFkZXIgQXJndW1lbnRzQEAKTWFueSBh c3BlY3RzIG9mIHRoZSBldmFsdWF0aW9uIGFuZCBleHBvcnQgb2YgY29kZSBibG9ja3MgYXJlCmNv bnRyb2xsZWQgdGhyb3VnaCBoZWFkZXIgYXJndW1lbnRzLiAgVGhlc2UgY2FuIGJlIHNwZWNpZmll ZCBnbG9iYWxseSwKYXQgdGhlIGZpbGUgbGV2ZWwsIGF0IHRoZSBvdXRsaW5lIHN1YnRyZWUgbGV2 ZWwsIGFuZCBhdCB0aGUgaW5kaXZpZHVhbApjb2RlIGJsb2NrIGxldmVsLiAgVGhlIGZvbGxvd2lu ZyBkZXNjcmliZXMgc29tZSBvZiB0aGUgaGVhZGVyCmFyZ3VtZW50cy4KCi0gfjp2YXJ+IDo6IFRo ZSB+OnZhcn4gaGVhZGVyIGFyZ3VtZW50IGlzIHVzZWQgdG8gcGFzcyBhcmd1bWVudHMgdG8KICAg ICAgICAgICAgY29kZSBibG9ja3MuICBUaGUgdmFsdWVzIHBhc3NlZCB0byBhcmd1bWVudHMgY2Fu IGJlCiAgICAgICAgICAgIGxpdGVyYWwgdmFsdWVzLCB2YWx1ZXMgZnJvbSBvcmctbW9kZSB0YWJs ZXMgYW5kIGxpdGVyYWwKICAgICAgICAgICAgZXhhbXBsZSBibG9ja3MsIG9yIHRoZSByZXN1bHRz IG9mIG90aGVyIG5hbWVkIGNvZGUgYmxvY2tzLgotIH46cmVzdWx0c34gOjogVGhlIH46cmVzdWx0 c34gaGVhZGVyIGFyZ3VtZW50IGNvbnRyb2xzIHRoZQogICAgICAgICAgICAgICAgL2NvbGxlY3Rp b24vLCAvdHlwZS8sIGFuZCAvaGFuZGxpbmcvIG9mIGNvZGUgYmxvY2sKICAgICAgICAgICAgICAg IHJlc3VsdHMuICBWYWx1ZXMgb2Ygfm91dHB1dH4gb3IgfnZhbHVlfiAodGhlIGRlZmF1bHQpCiAg ICAgICAgICAgICAgICBzcGVjaWZ5IGhvdyByZXN1bHRzIGFyZSBjb2xsZWN0ZWQgZnJvbSBhIGNv ZGUgYmxvY2sncwogICAgICAgICAgICAgICAgZXZhbHVhdGlvbi4gIFZhbHVlcyBvZiB+dmVjdG9y fiwgfnNjYWxhcn4gfmZpbGV+IH5yYXd+CiAgICAgICAgICAgICAgICB+aHRtbH4gfmxhdGV4fiBh bmQgfmNvZGV+IHNwZWNpZnkgdGhlIHR5cGUgb2YgdGhlCiAgICAgICAgICAgICAgICByZXN1bHRz IG9mIHRoZSBjb2RlIGJsb2NrIHdoaWNoIGRpY3RhdGVzIGhvdyB0aGV5IHdpbGwKICAgICAgICAg ICAgICAgIGJlIGluY29ycG9yYXRlZCBpbnRvIHRoZSBPcmctbW9kZSBidWZmZXIuICBWYWx1ZXMg b2YKICAgICAgICAgICAgICAgIH5zaWxlbnR+LCB+cmVwbGFjZX4sIH5wcmVwZW5kfiwgYW5kIH5h cHBlbmR+IHNwZWNpZnkKICAgICAgICAgICAgICAgIGhhbmRsaW5nIG9mIGNvZGUgYmxvY2sgcmVz dWx0cywgc3BlY2lmaWNhbGx5IGlmIGFuZAogICAgICAgICAgICAgICAgaG93IHRoZSByZXN1bHRz IHNob3VsZCBiZSBpbnNlcnRlZCBpbnRvIHRoZSBPcmctbW9kZQogICAgICAgICAgICAgICAgYnVm ZmVyLgotIH46c2Vzc2lvbn4gOjogQSBoZWFkZXIgYXJndW1lbnQgb2YgfjpzZXNzaW9ufiB3aWxs IGNhdXNlIHRoZSBjb2RlCiAgICAgICAgICAgICAgICBibG9jayB0byBiZSBldmFsdWF0ZWQgaW4g YSBwZXJzaXN0ZW50IGludGVyYWN0aXZlCiAgICAgICAgICAgICAgICBpbmZlcmlvciBwcm9jZXNz IGluIEVtYWNzLiAgVGhpcyBhbGxvd3MgZm9yIHBlcnNpc3RpbmcKICAgICAgICAgICAgICAgIHN0 YXRlIGJldHdlZW4gY29kZSBibG9jayBldmFsdWF0aW9ucywgYW5kIGZvciBtYW51YWwKICAgICAg ICAgICAgICAgIGluc3BlY3Rpb24gb2YgdGhlIHJlc3VsdHMgb2YgZXZhbHVhdGlvbi4KLSB+OmV4 cG9ydHN+IDo6IEFueSBjb21iaW5hdGlvbiBvZiB0aGUgL2NvZGUvIG9yIHRoZSAvcmVzdWx0cy8g b2YgYQogICAgICAgICAgICAgICAgYmxvY2sgY2FuIGJlIHJldGFpbmVkIG9uIGV4cG9ydCwgdGhp cyBpcyBzcGVjaWZpZWQgYnkKICAgICAgICAgICAgICAgIHNldHRpbmcgdGhlIH46cmVzdWx0c34g aGVhZGVyIGFyZ3VtZW50IHRvIH5jb2RlfgogICAgICAgICAgICAgICAgfnJlc3VsdHN+IH5ub25l fiBvciB+Ym90aH4uCi0gfjp0YW5nbGV+IDo6IEEgaGVhZGVyIGFyZ3VtZW50IG9mIH46dGFuZ2xl IHllc34gd2lsbCBjYXVzZSBhIGNvZGUKICAgICAgICAgICAgICAgYmxvY2sncyBjb250ZW50cyB0 byBiZSB0YW5nbGVkIHRvIGEgZmlsZSBuYW1lZCBhZnRlcgogICAgICAgICAgICAgICB0aGUgZmls ZW5hbWUgb2YgdGhlIE9yZy1tb2RlIGJ1ZmZlci4gIEFuIGFsdGVybmF0ZSBmaWxlCiAgICAgICAg ICAgICAgIG5hbWUgY2FuIGJlIHNwZWNpZmllZCB3aXRoIH46dGFuZ2xlIGZpbGVuYW1lfi4KLSB+ OmNhY2hlfiA6OiBBIGhlYWRlciBhcmd1bWVudCBvZiB+OmNhY2hlIHllc34gd2lsbCBjYXVzZSBh c3NvY2lhdGUgYQogICAgICAgICAgICAgIGhhc2ggb2YgdGhlIGV4cGFuZGVkIGNvZGUgYmxvY2sg d2l0aCB0aGUgcmVzdWx0cywKICAgICAgICAgICAgICBlbnN1cmluZyB0aGF0IGNvZGUgYmxvY2tz IGFyZSBvbmx5IHJlLXJ1biB3aGVuIHRoZWlyCiAgICAgICAgICAgICAgaW5wdXRzIGhhdmUgY2hh bmdlZC4KLSB+Om5vd2VifiA6OiBBIGhlYWRlciBhcmd1bWVudCBvZiB+Om5vd2ViIHllc34gd2ls bCBleHBhbmQgIm5vd2ViIgogICAgICAgICAgICAgIHN0eWxlIHJlZmVyZW5jZXMgb24gZXZhbHVh dGlvbiBhbmQgdGFuZ2xpbmcuCi0gfjpmaWxlfiA6OiBDb2RlIGJsb2NrcyB3aGljaCBvdXRwdXQg cmVzdWx0cyB0byBmaWxlcyAoZS5nLjogZ3JhcGhzLAogICAgICAgICAgICAgZGlhZ3JhbXMgYW5k IGZpZ3VyZXMpIGNhbiBhY2NlcHQgYSB+OmZpbGUgZmlsZW5hbWV+CiAgICAgICAgICAgICBoZWFk ZXIgYXJndW1lbnQgaW4gd2hpY2ggY2FzZSB0aGUgcmVzdWx0cyBhcmUgc2F2ZWQgdG8KICAgICAg ICAgICAgIHRoZSBuYW1lZCBmaWxlLCBhbmQgYSBsaW5rIHRvIHRoZSBmaWxlIGlzIGluc2VydGVk IGludG8KICAgICAgICAgICAgIHRoZSBPcmctbW9kZSBidWZmZXIuCgpAQGluZm86QG5vaW5kZW50 QEAgKkZ1cnRoZXIgUmVhZGluZypcXApbW2h0dHA6Ly9vcmdtb2RlLm9yZy9tYW51YWwvTGl0ZXJh bC1leGFtcGxlcy5odG1sI0xpdGVyYWwtZXhhbXBsZXNdW0NoYXB0ZXIgMTEuMyBvZiB0aGUgbWFu dWFsXV1cXApbW2h0dHA6Ly9vcmdtb2RlLm9yZy93b3JnL29yZy1jb250cmliL2JhYmVsL2luZGV4 LnBocF1bVGhlIEJhYmVsIHNpdGUgb24gV29yZ11dCgoqIE1pc2NlbGxhbmVvdXMKOlBST1BFUlRJ RVM6CjpERVNDUklQVElPTjogQWxsIHRoZSByZXN0IHdoaWNoIGRpZCBub3QgZml0IGVsc2V3aGVy ZQo6RU5EOgoKKiogQ29tcGxldGlvbgo6UFJPUEVSVElFUzoKOkRFU0NSSVBUSU9OOiBNLVRBQiBr bm93cyB3aGF0IHlvdSBuZWVkCjpFTkQ6CgpPcmcgc3VwcG9ydHMgaW4tYnVmZmVyIGNvbXBsZXRp b24gd2l0aCBAQGluZm86QGtiZHtNLUBrZXl7VEFCfX1AQC4gIFRoaXMgdHlwZSBvZgpjb21wbGV0 aW9uIGRvZXMgbm90IG1ha2UgdXNlIG9mIHRoZSBtaW5pYnVmZmVyLiAgWW91IHNpbXBseSB0eXBl IGEgZmV3CmxldHRlcnMgaW50byB0aGUgYnVmZmVyIGFuZCB1c2UgdGhlIGtleSB0byBjb21wbGV0 ZSB0ZXh0IHJpZ2h0IHRoZXJlLiAgRm9yCmV4YW1wbGUsIHRoaXMgY29tbWFuZCB3aWxsIGNvbXBs ZXRlIFRlWCBzeW1ib2xzIGFmdGVyIEBAaW5mbzpAc2FtcHtcfUBALCBUT0RPCmtleXdvcmRzIGF0 IHRoZSBiZWdpbm5pbmcgb2YgYSBoZWFkbGluZSwgYW5kIHRhZ3MgYWZ0ZXIgQEBpbmZvOkBzYW1w ezp9QEAgaW4gYQpoZWFkbGluZS4KCioqIENsZWFuIHZpZXcKOlBST1BFUlRJRVM6CjpERVNDUklQ VElPTjogR2V0dGluZyByaWQgb2YgbGVhZGluZyBzdGFycyBpbiB0aGUgb3V0bGluZQo6RU5EOgoK U29tZSBwZW9wbGUgZmluZCBpdCBub2lzeSBhbmQgZGlzdHJhY3RpbmcgdGhhdCB0aGUgT3JnIGhl YWRsaW5lcyBzdGFydCB3aXRoIGEKcG90ZW50aWFsbHkgbGFyZ2UgbnVtYmVyIG9mIHN0YXJzLCBh bmQgdGhhdCB0ZXh0IGJlbG93IHRoZSBoZWFkbGluZXMgaXMgbm90CmluZGVudGVkLiAgV2hpbGUg dGhpcyBpcyBubyBwcm9ibGVtIHdoZW4gd3JpdGluZyBhIC9ib29rLWxpa2UvIGRvY3VtZW50Cndo ZXJlIHRoZSBvdXRsaW5lIGhlYWRpbmdzIGFyZSByZWFsbHkgc2VjdGlvbiBoZWFkaW5ncywgaW4g YSBtb3JlCi9saXN0LW9yaWVudGVkLyBvdXRsaW5lLCBpbmRlbnRlZCBzdHJ1Y3R1cmUgaXMgYSBs b3QgY2xlYW5lcjoKCjogKiBUb3AgbGV2ZWwgaGVhZGxpbmUgICAgICAgICAgICAgfCAgICAqIFRv cCBsZXZlbCBoZWFkbGluZQo6ICoqIFNlY29uZCBsZXZlbCAgICAgICAgICAgICAgICAgIHwgICAg ICAqIFNlY29uZCBsZXZlbAo6ICoqKiAzcmQgbGV2ZWwgICAgICAgICAgICAgICAgICAgIHwgICAg ICAgICogM3JkIGxldmVsCjogc29tZSB0ZXh0ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAg ICAgICBzb21lIHRleHQKOiAqKiogM3JkIGxldmVsICAgICAgICAgICAgICAgICAgICB8ICAgICAg ICAqIDNyZCBsZXZlbAo6IG1vcmUgdGV4dCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAg ICAgbW9yZSB0ZXh0CjogKiBBbm90aGVyIHRvcCBsZXZlbCBoZWFkbGluZSAgICAgfCAgICAqIEFu b3RoZXIgdG9wIGxldmVsIGhlYWRsaW5lCgpAQGluZm86QG5vaW5kZW50QEAgSWYgeW91IGFyZSB1 c2luZyBhdCBsZWFzdCBFbWFjcyAyMy4xLjUwLjMgYW5kCnZlcnNpb24gNi4yOSBvZiBPcmcsIHRo aXMga2luZCBvZiB2aWV3IGNhbiBiZSBhY2hpZXZlZCBkeW5hbWljYWxseSBhdApkaXNwbGF5IHRp bWUgdXNpbmcgfm9yZy1pbmRlbnQtbW9kZX4sIHdoaWNoIHdpbGwgcHJlcGVuZAppbnRhbmdpYmxl IHNwYWNlIHRvIGVhY2ggbGluZS4gIFlvdSBjYW4gdHVybiBvbiB+b3JnLWluZGVudC1tb2Rlfgpm b3IgYWxsIGZpbGVzIGJ5IGN1c3RvbWl6aW5nIHRoZSB2YXJpYWJsZSB+b3JnLXN0YXJ0dXAtaW5k ZW50ZWR+LApvciB5b3UgY2FuIHR1cm4gaXQgb24gZm9yIGluZGl2aWR1YWwgZmlsZXMgdXNpbmcK CiMrYmVnaW5fc3JjIG9yZwogICwjK1NUQVJUVVA6IGluZGVudAojK2VuZF9zcmMKCklmIHlvdSB3 YW50IGEgc2ltaWxhciBlZmZlY3QgaW4gZWFybGllciB2ZXJzaW9uIG9mIEVtYWNzIGFuZC9vciBP cmcsCm9yIGlmIHlvdSB3YW50IHRoZSBpbmRlbnRhdGlvbiB0byBiZSBoYXJkIHNwYWNlIGNoYXJh Y3RlcnMgc28gdGhhdCB0aGUKcGxhaW4gdGV4dCBmaWxlIGxvb2tzIGFzIHNpbWlsYXIgYXMgcG9z c2libGUgdG8gdGhlIEVtYWNzIGRpc3BsYXksIE9yZwpzdXBwb3J0cyB5b3UgYnkgaGVscGluZyB0 byBpbmRlbnQgKHdpdGggQEBpbmZvOkBrZXl7VEFCfUBAKSB0ZXh0IGJlbG93CmVhY2ggaGVhZGxp bmUsIGJ5IGhpZGluZyBsZWFkaW5nIHN0YXJzLCBhbmQgYnkgb25seSB1c2luZyBsZXZlbHMgMSwg MywKZXRjIHRvIGdldCB0d28gY2hhcmFjdGVycyBpbmRlbnRhdGlvbiBmb3IgZWFjaCBsZXZlbC4g IFRvIGdldCB0aGlzCnN1cHBvcnQgaW4gYSBmaWxlLCB1c2UKCiMrYmVnaW5fc3JjIG9yZwogICwj K1NUQVJUVVA6IGhpZGVzdGFycyBvZGQKIytlbmRfc3JjCgoqKiBNb2JpbGVPcmcKOlBST1BFUlRJ RVM6CjpERVNDUklQVElPTjogT3JnLW1vZGUgb24gdGhlIGlQaG9uZQo6RU5EOgoKL01vYmlsZU9y Zy8gaXMgdGhlIG5hbWUgb2YgdGhlIG1vYmlsZSBjb21wYW5pb24gYXBwIGZvciBPcmcgbW9kZSwg Y3VycmVudGx5CmF2YWlsYWJsZSBmb3IgaU9TIGFuZCBmb3IgQW5kcm9pZC4gIC9Nb2JpbGVPcmcv IG9mZmVycyBvZmZsaW5lIHZpZXdpbmcgYW5kCmNhcHR1cmUgc3VwcG9ydCBmb3IgYW4gT3JnIG1v ZGUgc3lzdGVtIHJvb3RlZCBvbiBhICJyZWFsIiBjb21wdXRlci4gIEl0CmRvZXMgYWxzbyBhbGxv dyB5b3UgdG8gcmVjb3JkIGNoYW5nZXMgdG8gZXhpc3RpbmcgZW50cmllcy4KClRoZSBbW2h0dHA6 Ly9tb2JpbGVvcmcubmNvZ25pLnRvL11baU9TIGltcGxlbWVudGF0aW9uXV0gZm9yIHRoZQovaVBo b25lL2lQb2QgVG91Y2gvaVBhZC8gc2VyaWVzIG9mIGRldmljZXMsIHdhcyBkZXZlbG9wZWQgYnkg UmljaGFyZApNb3JlbGFuZC4gQW5kcm9pZCB1c2VycyBzaG91bGQgY2hlY2sgb3V0IFtbaHR0cDov L3dpa2kuZ2l0aHViLmNvbS9tYXRidXJ0L21vYmlsZW9yZy1hbmRyb2lkL11bTW9iaWxlT3JnIEFu ZHJvaWRdXSBieSBNYXR0CkpvbmVzLiAgVGhlIHR3byBpbXBsZW1lbnRhdGlvbnMgYXJlIG5vdCBp ZGVudGljYWwgYnV0IG9mZmVyIHNpbWlsYXIKZmVhdHVyZXMuCgpAQGluZm86QG5vaW5kZW50QEAg KkZ1cnRoZXIgUmVhZGluZypcXApbW2h0dHA6Ly9vcmdtb2RlLm9yZy9tYW51YWwvTWlzY2VsbGFu ZW91cy5odG1sI01pc2NlbGxhbmVvdXNdW0NoYXB0ZXIgMTUgb2YgdGhlIG1hbnVhbF1dXFwKW1to dHRwOi8vb3JnbW9kZS5vcmcvbWFudWFsL01vYmlsZU9yZy5odG1sI01vYmlsZU9yZ11bQXBwZW5k aXggQiBvZiB0aGUgbWFudWFsXV1cXApbW2h0dHA6Ly9vcmdtb2RlLm9yZy9vcmdjYXJkLnBkZl1b S2V5IHJlZmVyZW5jZSBjYXJkXV0KCiogRm9vdG5vdGVzCjpQUk9QRVJUSUVTOgo6REVTQ1JJUFRJ T046IEhvdyBmb290bm90ZXMgYXJlIGRlZmluZWQgaW4gT3JnJ3Mgc3ludGF4CjpFTkQ6CgpbZm46 MV0gU2VlIHRoZSB2YXJpYWJsZSB+b3JnLXNwZWNpYWwtY3RybC1hL2V+IHRvIGNvbmZpZ3VyZSBz cGVjaWFsCmJlaGF2aW9yIG9mIEBAaW5mbzpAa2Jke0MtYX1AQCBhbmQgQEBpbmZvOkBrYmR7Qy1l fUBAIGluIGhlYWRsaW5lcy4KCltmbjoyXSBJZiB5b3UgZG8gbm90IHdhbnQgdGhlIGxpbmUgdG8g YmUgc3BsaXQsIGN1c3RvbWl6ZSB0aGUgdmFyaWFibGUKfm9yZy1NLVJFVC1tYXktc3BsaXQtbGlu ZX4uCgpbZm46M10gT2YgY291cnNlLCB5b3UgY2FuIG1ha2UgYSBkb2N1bWVudCB0aGF0IGNvbnRh aW5zIG9ubHkgbG9uZwpsaXN0cyBvZiBUT0RPIGl0ZW1zLCBidXQgdGhpcyBpcyBub3QgcmVxdWly ZWQuCgpbZm46NF0gVGhlIGNvcnJlc3BvbmRpbmcgaW4tYnVmZmVyIHNldHRpbmcgaXM6IH4jK1NU QVJUVVA6IGxvZ2RvbmV+CgpbZm46NV0gVGhlIGNvcnJlc3BvbmRpbmcgaW4tYnVmZmVyIHNldHRp bmcgaXM6IH4jK1NUQVJUVVA6CmxvZ25vdGVkb25lfgoKW2ZuOjZdIEFzIHdpdGggYWxsIHRoZXNl IGluLWJ1ZmZlciBzZXR0aW5ncywgcHJlc3NpbmcgQEBpbmZvOkBrYmR7Qy1jCkMtY31AQCBhY3Rp dmF0ZXMgYW55IGNoYW5nZXMgaW4gdGhlIGxpbmUuCgpbZm46N10gVGhpcyBpcyBxdWl0ZSBkaWZm ZXJlbnQgZnJvbSB3aGF0IGlzIG5vcm1hbGx5IHVuZGVyc3Rvb2QgYnkKL3NjaGVkdWxpbmcgYSBt ZWV0aW5nLywgd2hpY2ggaXMgZG9uZSBpbiBPcmctbW9kZSBieSBqdXN0IGluc2VydGluZyBhCnRp bWUgc3RhbXAgd2l0aG91dCBrZXl3b3JkLgoKW2ZuOjhdIEl0IHdpbGwgc3RpbGwgYmUgbGlzdGVk IG9uIHRoYXQgZGF0ZSBhZnRlciBpdCBoYXMgYmVlbiBtYXJrZWQKRE9ORS4gIElmIHlvdSBkb24n dCBsaWtlIHRoaXMsIHNldCB0aGUgdmFyaWFibGUKfm9yZy1hZ2VuZGEtc2tpcC1zY2hlZHVsZWQt aWYtZG9uZX4uCgpbZm46OV0gVXNpbmcgY2FwdHVyZSB0ZW1wbGF0ZXMsIHlvdSBjYW4gZGVmaW5l IG1vcmUgZmluZS1ncmFpbmVkCmNhcHR1cmUgbG9jYXRpb25zLCBzZWUgW1tDYXB0dXJlIHRlbXBs YXRlc11dLgoKW2ZuOjEwXSBQbGVhc2Ugc2VsZWN0IHlvdXIgb3duIGtleSwgQEBpbmZvOkBrYmR7 Qy1jIGN9QEAgaXMgb25seSBhIHN1Z2dlc3Rpb24uCgpbZm46MTFdIElmIHlvdSBuZWVkIG9uZSBv ZiB0aGVzZSBzZXF1ZW5jZXMgbGl0ZXJhbGx5LCBlc2NhcGUgdGhlCkBAaW5mbzpAa2JkeyV9QEAg d2l0aCBhIGJhY2tzbGFzaC4KCltmbjoxMl0gU2VlIGFsc28gdGhlIHZhcmlhYmxlcyB+b3JnLXNo b3ctaGllcmFyY2h5LWFib3ZlfiwKfm9yZy1zaG93LWZvbGxvd2luZy1oZWFkaW5nfiwgfm9yZy1z aG93LXNpYmxpbmdzfiwgYW5kCn5vcmctc2hvdy1lbnRyeS1iZWxvd34gZm9yIGRldGFpbGVkIGNv bnRyb2wgb24gaG93IG11Y2ggY29udGV4dCBpcwpzaG93biBhcm91bmQgZWFjaCBtYXRjaC4K --f46d043c08e25deb2004c6268408--