<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>210309</bug_id>
          
          <creation_ts>2020-04-09 16:09:42 -0700</creation_ts>
          <short_desc>[YARR] Allow for Unicode named capture group identifiers in non-Unicode regular expressions</short_desc>
          <delta_ts>2020-04-13 12:19:50 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Saboff">msaboff</reporter>
          <assigned_to name="Michael Saboff">msaboff</assigned_to>
          <cc>ashvayka</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>ross.kirsling</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1639944</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2020-04-09 16:09:42 -0700</bug_when>
    <thetext>During the March/April 2020 TC-39 meeting, it was agreed that named capture group identifiers can contain unicode escape characters even for non-unicode flagged regular expressions.  This change is part of the EcmaScript 2020 draft standard that was approved by TC-39 at the same meeting and should be ratified by the Ecma General Assembly in June 2020.

The current 2019 standard allows the following constructs for named capture group identifiers with non-BMP codepoints
    let regex1a = /(?&lt;𝒜&gt;A)/u;
    let regex1b = /(?&lt;\u{1d49c}&gt;A)/u;
    let regex1c = /(?&lt;\ud835\udc9c&gt;A)/u;
    let regex2a = /(?&lt;𝒜&gt;A)/;  // no u flag 
But didn’t allow non-BMP unicode escapes in named capture group identifiers for non unicode regex’s
    let regex2b = /(?&lt;\u{1d49c}&gt;A)/;
    let regex2c = /(?&lt;\ud835\udc9c&gt;A)/;

JavaScriptCore has a bug where it doesn’t even allow regex2a.

This is to track fixing the JSC bug for regex2a, and adding the two other non-unicode forms to bring JSC into compliance with the 2020 standard.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1639945</commentid>
    <comment_count>1</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2020-04-09 16:10:01 -0700</bug_when>
    <thetext>&lt;rdar://problem/61547384&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1639956</commentid>
    <comment_count>2</comment_count>
      <attachid>396024</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2020-04-09 16:30:40 -0700</bug_when>
    <thetext>Created attachment 396024
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640032</commentid>
    <comment_count>3</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2020-04-09 21:52:47 -0700</bug_when>
    <thetext>Seems like a good informal review opportunity for Alexey. ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640122</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-04-10 04:18:09 -0700</bug_when>
    <thetext>(In reply to Ross Kirsling from comment #3)
&gt; Seems like a good informal review opportunity for Alexey. ;)

Thank you, Ross, I appreciate it.

(In reply to Michael Saboff from comment #0)
&gt; JavaScriptCore has a bug where it doesn’t even allow regex2a.

It is also part of recent change: please see https://github.com/tc39/ecma262/pull/1869#issuecomment-607742063.
V8 doesn’t allow regex2a as well, which is covered by JSTests/test262/test/language/literals/regexp/named-groups/invalid-non-id-continue-groupspecifier.js.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640123</commentid>
    <comment_count>5</comment_count>
      <attachid>396024</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-04-10 04:36:46 -0700</bug_when>
    <thetext>Comment on attachment 396024
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=396024&amp;action=review

LGTM, a pure joy to informally review.

&gt; JSTests/ChangeLog:8
&gt; +        New test.

We might want to skip failing &amp; no longer correct tests as test262 wasn&apos;t updated for recent spec change:
- test/language/literals/regexp/named-groups/invalid-u-escape-in-groupspecifier-2.js
- test/language/literals/regexp/named-groups/invalid-non-id-start-groupspecifier-6.js
- test/language/literals/regexp/named-groups/invalid-non-id-start-groupspecifier-3.js
- test/language/literals/regexp/named-groups/invalid-u-escape-in-groupspecifier.js
- test/language/literals/regexp/named-groups/invalid-non-id-continue-groupspecifier.js

&gt; JSTests/stress/regexp-named-capture-groups.js:16
&gt; +    shouldBe(String(error), &quot;SyntaxError: Invalid regular expression: invalid group specifier name&quot;);

I really like error message check, and the whole test is crafted with love.
Michael, would you object if I export this file to test262 with your &amp; Apple Inc. credentials?

&gt; Source/JavaScriptCore/ChangeLog:8
&gt; +        Update YARR pattern processing to allow for non-BMP unicode identifier characters in named capture groups.

Should we include spec PR link? https://github.com/tc39/ecma262/pull/1869

&gt; Source/JavaScriptCore/yarr/YarrParser.h:543
&gt; +        if (U16_IS_LEAD(ch) &amp;&amp; unicodePatternOrIdentifierName &amp;&amp; (patternRemaining() &gt; 0)) {

Since we are changing this line, we can use `!atEndOfPattern()` equivalent instead of `(patternRemaining() &gt; 0)`.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640128</commentid>
    <comment_count>6</comment_count>
      <attachid>396024</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-04-10 05:49:34 -0700</bug_when>
    <thetext>Comment on attachment 396024
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=396024&amp;action=review

&gt; Source/JavaScriptCore/yarr/YarrParser.h:537
&gt; +    template&lt;UnicodeEscapeContext context&gt;

consumePossibleSurrogatePair() having notion of UnicodeEscapeContext does&apos;t feel right to me.
Surrogate pairs are consumed by many productions, not only character escapes &amp; identifiers.
`bool inIdentifierName` seems to be a better fit (like we have `bool inCharacterClass`).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640252</commentid>
    <comment_count>7</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2020-04-10 10:28:26 -0700</bug_when>
    <thetext>(In reply to Alexey Shvayka from comment #5)
&gt; Comment on attachment 396024 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=396024&amp;action=review
&gt; 
&gt; LGTM, a pure joy to informally review.

Thank you for taking a look.

&gt; &gt; JSTests/ChangeLog:8
&gt; &gt; +        New test.
&gt; 
&gt; We might want to skip failing &amp; no longer correct tests as test262 wasn&apos;t updated for recent spec change:
&gt; - test/language/literals/regexp/named-groups/invalid-u-escape-in-groupspecifier-2.js
&gt; - test/language/literals/regexp/named-groups/invalid-non-id-start-groupspecifier-6.js
&gt; - test/language/literals/regexp/named-groups/invalid-non-id-start-groupspecifier-3.js
&gt; - test/language/literals/regexp/named-groups/invalid-u-escape-in-groupspecifier.js
&gt; - test/language/literals/regexp/named-groups/invalid-non-id-continue-groupspecifier.js

I updated JSTests/test262/expectations.yaml for the now failing tests.

&gt; &gt; JSTests/stress/regexp-named-capture-groups.js:16
&gt; &gt; +    shouldBe(String(error), &quot;SyntaxError: Invalid regular expression: invalid group specifier name&quot;);
&gt; 
&gt; I really like error message check, and the whole test is crafted with love.
&gt; Michael, would you object if I export this file to test262 with your &amp; Apple Inc. credentials?

Fine by me.

&gt; &gt; Source/JavaScriptCore/ChangeLog:8
&gt; &gt; +        Update YARR pattern processing to allow for non-BMP unicode identifier characters in named capture groups.
&gt; 
&gt; Should we include spec PR link? https://github.com/tc39/ecma262/pull/1869
&gt; 
&gt; &gt; Source/JavaScriptCore/yarr/YarrParser.h:543
&gt; &gt; +        if (U16_IS_LEAD(ch) &amp;&amp; unicodePatternOrIdentifierName &amp;&amp; (patternRemaining() &gt; 0)) {
&gt; 
&gt; Since we are changing this line, we can use `!atEndOfPattern()` equivalent
&gt; instead of `(patternRemaining() &gt; 0)`.

Done.

&gt; &gt; Source/JavaScriptCore/yarr/YarrParser.h:537
&gt; &gt; +    template&lt;UnicodeEscapeContext context&gt;
&gt; 
&gt; 
&gt; consumePossibleSurrogatePair() having notion of UnicodeEscapeContext does&apos;t feel right to me.
&gt; Surrogate pairs are consumed by many productions, not only character escapes &amp; identifiers.
&gt; `bool inIdentifierName` seems to be a better fit (like we have `bool inCharacterClass`).

In the two other places that consumePossibleSurrogatePair() is used, one is for individual characters and the other as part of a character class parsing, it seems appropriate to use UnicodeEscapeContext::CharacterEscape.  The character class parsing uses characters as ends of a range or as individual to include in the class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640258</commentid>
    <comment_count>8</comment_count>
      <attachid>396102</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2020-04-10 10:42:46 -0700</bug_when>
    <thetext>Created attachment 396102
Patch with updates from review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640262</commentid>
    <comment_count>9</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-04-10 10:55:43 -0700</bug_when>
    <thetext>(In reply to Michael Saboff from comment #7)
&gt; In the two other places that consumePossibleSurrogatePair() is used, one is
&gt; for individual characters and the other as part of a character class
&gt; parsing, it seems appropriate to use UnicodeEscapeContext::CharacterEscape. 

I might be putting a little different meaning into UnicodeEscapeContext: for me, it reads as &quot;parent production of Unicode escape we are currently parsing&quot;, making it a bit awkward to use in `default` cases of parseTokens() and parseCharacterClass() as they don&apos;t parse any escape.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640265</commentid>
    <comment_count>10</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-04-10 11:02:38 -0700</bug_when>
    <thetext>If I&apos;d seen just the signature of consumePossibleSurrogatePair():

  template&lt;UnicodeEscapeContext context&gt;
  UChar32 consumePossibleSurrogatePair()

I would have assume that it parses \uLEAD\uTRAIL escapes since it has UnicodeEscapeContext as a parameter, and not literal astral pair.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640271</commentid>
    <comment_count>11</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2020-04-10 11:16:14 -0700</bug_when>
    <thetext>(In reply to Alexey Shvayka from comment #9)
&gt; (In reply to Michael Saboff from comment #7)
&gt; &gt; In the two other places that consumePossibleSurrogatePair() is used, one is
&gt; &gt; for individual characters and the other as part of a character class
&gt; &gt; parsing, it seems appropriate to use UnicodeEscapeContext::CharacterEscape. 
&gt; 
&gt; I might be putting a little different meaning into UnicodeEscapeContext: for
&gt; me, it reads as &quot;parent production of Unicode escape we are currently
&gt; parsing&quot;, making it a bit awkward to use in `default` cases of parseTokens()
&gt; and parseCharacterClass() as they don&apos;t parse any escape.

If we renamed consumePossibleSurrogatePair() to consumePossibleSurrogatePairOrCharacter() would that make things a little clearer?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640285</commentid>
    <comment_count>12</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-04-10 11:35:49 -0700</bug_when>
    <thetext>(In reply to Michael Saboff from comment #11)
&gt; If we renamed consumePossibleSurrogatePair() to
&gt; consumePossibleSurrogatePairOrCharacter() would that make things a little
&gt; clearer?

Sorry, please disregard comment #10, consumePossibleSurrogatePair() is a good name and it surely needs Unicode escape context.

I am not a huge fan of boolean parameters (https://ariya.io/2011/08/hall-of-api-shame-boolean-trap) myself, yet passing UnicodeEscapeContext::CharacterEscape in 2 call sites that are irrelevant to \unicode escapes is a bit misleading IMO. What if we pass UnicodeEscapeContext::None from those?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640416</commentid>
    <comment_count>13</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2020-04-10 16:34:24 -0700</bug_when>
    <thetext>(In reply to Alexey Shvayka from comment #12)
&gt; (In reply to Michael Saboff from comment #11)
&gt; &gt; If we renamed consumePossibleSurrogatePair() to
&gt; &gt; consumePossibleSurrogatePairOrCharacter() would that make things a little
&gt; &gt; clearer?
&gt; 
&gt; Sorry, please disregard comment #10, consumePossibleSurrogatePair() is a good name and it surely needs Unicode escape context.
&gt; 
&gt; I am not a huge fan of boolean parameters (https://ariya.io/2011/08/hall-of-api-shame-boolean-trap) myself, yet passing UnicodeEscapeContext::CharacterEscape in 2 call sites that are irrelevant to \unicode escapes is a bit misleading IMO. What if we pass UnicodeEscapeContext::None from those?

How about we rename the enum UnicodeEscapeContext to UnicodeParseContext with the two values PatternCodePoint and GroupName?  Then we use UnicodeParseContext::PatternCodePoint and UnicodeParseContext::GroupName.  Both of these values make sense in the current and new usage and are closer to the ECMAScript spec.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640422</commentid>
    <comment_count>14</comment_count>
      <attachid>396135</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2020-04-10 16:42:53 -0700</bug_when>
    <thetext>Created attachment 396135
Patch with suggested naming changes and additional named back reference testing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640555</commentid>
    <comment_count>15</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-04-11 09:53:28 -0700</bug_when>
    <thetext>(In reply to Michael Saboff from comment #14)
&gt; Created attachment 396135 [details]
&gt; Patch with suggested naming changes and additional named back reference
&gt; testing

Looks perfect, thank you for taking time to address the feedback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1641029</commentid>
    <comment_count>16</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2020-04-13 12:19:50 -0700</bug_when>
    <thetext>Committed r260033: &lt;https://trac.webkit.org/changeset/260033&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>396024</attachid>
            <date>2020-04-09 16:30:40 -0700</date>
            <delta_ts>2020-04-10 10:42:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>210309.patch</filename>
            <type>text/plain</type>
            <size>13262</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNTk4MzQpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE2IEBACisyMDIwLTA0LTA5ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBw
bGUuY29tPgorCisgICAgICAgIFtZQVJSXSBBbGxvdyBmb3IgVW5pY29kZSBuYW1lZCBjYXB0dXJl
IGdyb3VwIGlkZW50aWZpZXJzIGluIG5vbi1Vbmljb2RlIHJlZ3VsYXIgZXhwcmVzc2lvbnMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDMwOQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5ldyB0ZXN0Lgor
CisgICAgICAgICogc3RyZXNzL3JlZ2V4cC1uYW1lZC1jYXB0dXJlLWdyb3Vwcy5qczogQWRkZWQu
CisgICAgICAgIChzaG91bGRCZSk6CisgICAgICAgIChzaG91bGRUaHJvd0ludmFsaWRHcm91cFNw
ZWNpZmllck5hbWUpOgorCiAyMDIwLTA0LTA5ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBs
ZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgc2tpcCBKU1Rlc3RzL3N0cmVzcy9pbnRsLWNh
bm9uaWNhbGl6ZS1sb2NhbGUtbGlzdC1lcnJvci1vb20uanMgaWYgbWVtb3J5TGltaXRlZApJbmRl
eDogSlNUZXN0cy9zdHJlc3MvcmVnZXhwLW5hbWVkLWNhcHR1cmUtZ3JvdXBzLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEpTVGVzdHMvc3RyZXNzL3JlZ2V4cC1uYW1lZC1jYXB0dXJlLWdyb3Vwcy5qcwkobm9u
ZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3N0cmVzcy9yZWdleHAtbmFtZWQtY2FwdHVyZS1ncm91cHMu
anMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjYgQEAKKworZnVuY3Rpb24gc2hvdWxkQmUo
YWN0dWFsLCBleHBlY3RlZCkgeworICAgIGlmIChhY3R1YWwgIT09IGV4cGVjdGVkICYmICEoYWN0
dWFsICE9PSBudWxsICYmIHR5cGVvZihleHBlY3RlZCkgPT09ICJzdHJpbmciICYmIGFjdHVhbC50
b1N0cmluZygpID09IGV4cGVjdGVkKSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdleHBlY3Rl
ZDogJyArIGV4cGVjdGVkICsgJywgYmFkIHZhbHVlOiAnICsgYWN0dWFsKTsKK30KKworZnVuY3Rp
b24gc2hvdWxkVGhyb3dJbnZhbGlkR3JvdXBTcGVjaWZpZXJOYW1lKGZ1bmMpIHsKKyAgICB2YXIg
ZXJyb3IgPSBudWxsOworICAgIHRyeSB7CisgICAgICAgIGZ1bmMoKTsKKyAgICB9IGNhdGNoIChl
KSB7CisgICAgICAgIGVycm9yID0gZTsKKyAgICB9CisgICAgaWYgKCFlcnJvcikKKyAgICAgICAg
dGhyb3cgbmV3IEVycm9yKCdub3QgdGhyb3duJyk7CisgICAgc2hvdWxkQmUoU3RyaW5nKGVycm9y
KSwgIlN5bnRheEVycm9yOiBJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbjogaW52YWxpZCBncm91
cCBzcGVjaWZpZXIgbmFtZSIpOworfQorCisvKgorIFZhbGlkIElEX1N0YXJ0IC8gSURfQ29udGlu
dWUgVW5pY29kZSBjaGFyYWN0ZXJzCisKKyDwnZGTICBcdXsxZDQ1M30gIFx1ZDgzNSBcdWRjNTMK
KyDwnZGcICBcdXsxZDQ1Y30gIFx1ZDgzNSBcdWRjNWMKKyDwnZGlICBcdXtpZDQ2NX0gIFx1ZDgz
NSBcdWRjNjUKKworIPCdk5MgIFx1ezFkNGQzfSAgXHVkODM1IFx1ZGNkMworIPCdk7ggIFx1ezFk
NGY4fSAgXHVkODM1IFx1ZGNmOAorIPCdk7AgIFx1ezFkNGYwfSAgXHVkODM1IFx1ZGNmMAorCisg
8J2TkSAgXHV7MWQ0ZDF9ICBcdWQ4MzUgXHVkY2QxCisg8J2TuyAgXHV7MWQ0ZmJ9ICBcdWQ4MzUg
XHVkY2ZiCisg8J2TuCAgXHV7MWQ0Zjh9ICBcdWQ4MzUgXHVkY2Y4Cisg8J2UgCAgXHV7MWQ1MDB9
ICBcdWQ4MzUgXHVkZDAwCisg8J2TtyAgXHV7MWQ0Zjd9ICBcdWQ4MzUgXHVkY2Y3CisKKyDwnZaw
ICBcdXsxZDViMH0gIFx1ZDgzNSBcdWRkYjAKKyDwnZahICBcdXsxZDVhMX0gIFx1ZDgzNSBcdWRk
YTEKKyDwnZalICBcdXsxZDVhNX0gIFx1ZDgzNSBcdWRkYTUKKworIChmb3gpIOeLuCAgXHV7NzJm
OH0gIFx1NzJmOAorIChkb2cpIOeLlyAgXHV7NzJkN30gIFx1NzJkNyAgCisKKyBWYWxpZCBJRF9D
b250aW51ZSBVbmljb2RlIGNoYXJhY3RlcnMgKENhbid0IGJlIGZpcnN0IGlkZW50aWZpZXIgY2hh
cmFjdGVyLikKKworIPCdn5ogIFx1ezFkN2RhfSAgXHVkODM1IFx1ZGZkYQorCitJbnZhbGlkIElE
X1N0YXJ0IC8gSURfQ29udGludWUKKworIChmb3ggZmFjZSBlbW9qaSkg8J+miiAgXHV7MWY5OGF9
ICBcdWQ4M2UgXHVkZDhhCisgKGRvZyBlbW9qaSkgIPCfkJUgIFx1ezFmNDE1fSAgXHVkODNkIFx1
ZGMxNQorKi8KKwordmFyIHN0cmluZyA9ICJUaGUgcXVpY2sgYnJvd24gZm94IGp1bXBlZCBvdmVy
IHRoZSBsYXp5IGRvZydzIGJhY2siOworCitsZXQgbWF0Y2ggPSBudWxsOworCisvLyBUcnkgdmFs
aWQgbmFtZXMKKworLy8gVW5pY29kZSBSZWdFeHAncworc2hvdWxkQmUoc3RyaW5nLm1hdGNoKC8o
PzxhbmltYWw+Zm94fGRvZykvdSkuZ3JvdXBzLmFuaW1hbCwgImZveCIpOworc2hvdWxkQmUoc3Ry
aW5nLm1hdGNoKC8oPzx0aGUyPnRoZSkvdSkuZ3JvdXBzLnRoZTIsICJ0aGUiKTsKKworbWF0Y2gg
PSBzdHJpbmcubWF0Y2goLyg/PPCdkZPwnZGc8J2RpT5mb3gpLiooPzzwnZOT8J2TuPCdk7A+ZG9n
KS91KTsKK3Nob3VsZEJlKG1hdGNoLmdyb3Vwcy7wnZGT8J2RnPCdkaUsICJmb3giKTsKK3Nob3Vs
ZEJlKG1hdGNoLmdyb3Vwcy7wnZOT8J2TuPCdk7AsICJkb2ciKTsKK3Nob3VsZEJlKG1hdGNoWzFd
LCAiZm94Iik7CitzaG91bGRCZShtYXRjaFsyXSwgImRvZyIpOworCittYXRjaCA9IHN0cmluZy5t
YXRjaCgvKD8854u4PmZveCkuKig/POeLlz5kb2cpL3UpOworc2hvdWxkQmUobWF0Y2guZ3JvdXBz
LueLuCwgImZveCIpOworc2hvdWxkQmUobWF0Y2guZ3JvdXBzLueLlywgImRvZyIpOworc2hvdWxk
QmUobWF0Y2hbMV0sICJmb3giKTsKK3Nob3VsZEJlKG1hdGNoWzJdLCAiZG9nIik7CisKK3Nob3Vs
ZEJlKHN0cmluZy5tYXRjaCgvKD888J2TkfCdk7vwnZO48J2UgPCdk7c+YnJvd24pL3UpLmdyb3Vw
cy7wnZOR8J2Tu/Cdk7jwnZSA8J2TtywgImJyb3duIik7CitzaG91bGRCZShzdHJpbmcubWF0Y2go
Lyg/PPCdk5HwnZO78J2TuPCdlIDwnZO3PmJyb3duKS91KS5ncm91cHMuXHV7MWQ0ZDF9XHV7MWQ0
ZmJ9XHV7MWQ0Zjh9XHV7MWQ1MDB9XHV7MWQ0Zjd9LCAiYnJvd24iKTsKK3Nob3VsZEJlKHN0cmlu
Zy5tYXRjaCgvKD88XHV7MWQ0ZDF9XHV7MWQ0ZmJ9XHV7MWQ0Zjh9XHV7MWQ1MDB9XHV7MWQ0Zjd9
PmJyb3duKS91KS5ncm91cHMu8J2TkfCdk7vwnZO48J2UgPCdk7csICJicm93biIpOworc2hvdWxk
QmUoc3RyaW5nLm1hdGNoKC8oPzxcdXsxZDRkMX1cdXsxZDRmYn1cdXsxZDRmOH1cdXsxZDUwMH1c
dXsxZDRmN30+YnJvd24pL3UpLmdyb3Vwcy5cdXsxZDRkMX1cdXsxZDRmYn1cdXsxZDRmOH1cdXsx
ZDUwMH1cdXsxZDRmN30sICJicm93biIpOworc2hvdWxkQmUoc3RyaW5nLm1hdGNoKC8oPzxcdWQ4
MzVcdWRjZDFcdWQ4MzVcdWRjZmJcdWQ4MzVcdWRjZjhcdWQ4MzVcdWRkMDBcdWQ4MzVcdWRjZjc+
YnJvd24pL3UpLmdyb3Vwcy7wnZOR8J2Tu/Cdk7jwnZSA8J2TtywgImJyb3duIik7CitzaG91bGRC
ZShzdHJpbmcubWF0Y2goLyg/PFx1ZDgzNVx1ZGNkMVx1ZDgzNVx1ZGNmYlx1ZDgzNVx1ZGNmOFx1
ZDgzNVx1ZGQwMFx1ZDgzNVx1ZGNmNz5icm93bikvdSkuZ3JvdXBzLlx1ezFkNGQxfVx1ezFkNGZi
fVx1ezFkNGY4fVx1ezFkNTAwfVx1ezFkNGY3fSwgImJyb3duIik7CisKK3Nob3VsZEJlKHN0cmlu
Zy5tYXRjaCgvKD888J2WsPCdlqHwnZalPnFcdypcV1x3KlxXXHcqKS91KS5ncm91cHMu8J2WsPCd
lqHwnZalLCAicXVpY2sgYnJvd24gZm94Iik7CitzaG91bGRCZShzdHJpbmcubWF0Y2goLyg/PPCd
lrDwnZahXHV7MWQ1YTV9PnFcdypcV1x3KlxXXHcqKS91KS5ncm91cHMu8J2WsPCdlqHwnZalLCAi
cXVpY2sgYnJvd24gZm94Iik7CitzaG91bGRCZShzdHJpbmcubWF0Y2goLyg/PPCdlrBcdXsxZDVh
MX3wnZalPnFcdypcV1x3KlxXXHcqKS91KS5ncm91cHMu8J2WsPCdlqHwnZalLCAicXVpY2sgYnJv
d24gZm94Iik7CitzaG91bGRCZShzdHJpbmcubWF0Y2goLyg/PPCdlrBcdXsxZDVhMX1cdXsxZDVh
NX0+cVx3KlxXXHcqXFdcdyopL3UpLmdyb3Vwcy7wnZaw8J2WofCdlqUsICJxdWljayBicm93biBm
b3giKTsKK3Nob3VsZEJlKHN0cmluZy5tYXRjaCgvKD88XHV7MWQ1YjB98J2WofCdlqU+cVx3KlxX
XHcqXFdcdyopL3UpLmdyb3Vwcy7wnZaw8J2WofCdlqUsICJxdWljayBicm93biBmb3giKTsKK3No
b3VsZEJlKHN0cmluZy5tYXRjaCgvKD88XHV7MWQ1YjB98J2WoVx1ezFkNWE1fT5xXHcqXFdcdypc
V1x3KikvdSkuZ3JvdXBzLvCdlrDwnZah8J2WpSwgInF1aWNrIGJyb3duIGZveCIpOworc2hvdWxk
QmUoc3RyaW5nLm1hdGNoKC8oPzxcdXsxZDViMH1cdXsxZDVhMX3wnZalPnFcdypcV1x3KlxXXHcq
KS91KS5ncm91cHMu8J2WsPCdlqHwnZalLCAicXVpY2sgYnJvd24gZm94Iik7CitzaG91bGRCZShz
dHJpbmcubWF0Y2goLyg/PFx1ezFkNWIwfVx1ezFkNWExfVx1ezFkNWE1fT5xXHcqXFdcdypcV1x3
KikvdSkuZ3JvdXBzLvCdlrDwnZah8J2WpSwgInF1aWNrIGJyb3duIGZveCIpOworCitzaG91bGRC
ZShzdHJpbmcubWF0Y2goLyg/PHRoZfCdn5o+dGhlKS91KS5ncm91cHMudGhl8J2fmiwgInRoZSIp
Oworc2hvdWxkQmUoc3RyaW5nLm1hdGNoKC8oPzx0aGVcdXsxZDdkYX0+dGhlKS91KS5ncm91cHMu
dGhl8J2fmiwgInRoZSIpOworc2hvdWxkQmUoc3RyaW5nLm1hdGNoKC8oPzx0aGVcdWQ4MzVcdWRm
ZGE+dGhlKS91KS5ncm91cHMudGhl8J2fmiwgInRoZSIpOworCisvLyBOb24tdW5pY29kZSBSZWdF
eHAncworc2hvdWxkQmUoc3RyaW5nLm1hdGNoKC8oPzxhbmltYWw+Zm94fGRvZykvKS5ncm91cHMu
YW5pbWFsLCAiZm94Iik7CisKK21hdGNoID0gc3RyaW5nLm1hdGNoKC8oPzzwnZGT8J2RnPCdkaU+
Zm94KS4qKD888J2Tk/Cdk7jwnZOwPmRvZykvKTsKK3Nob3VsZEJlKG1hdGNoLmdyb3Vwcy7wnZGT
8J2RnPCdkaUsICJmb3giKTsKK3Nob3VsZEJlKG1hdGNoLmdyb3Vwcy7wnZOT8J2TuPCdk7AsICJk
b2ciKTsKK3Nob3VsZEJlKG1hdGNoWzFdLCAiZm94Iik7CitzaG91bGRCZShtYXRjaFsyXSwgImRv
ZyIpOworCittYXRjaCA9IHN0cmluZy5tYXRjaCgvKD8854u4PmZveCkuKig/POeLlz5kb2cpLyk7
CitzaG91bGRCZShtYXRjaC5ncm91cHMu54u4LCAiZm94Iik7CitzaG91bGRCZShtYXRjaC5ncm91
cHMu54uXLCAiZG9nIik7CitzaG91bGRCZShtYXRjaFsxXSwgImZveCIpOworc2hvdWxkQmUobWF0
Y2hbMl0sICJkb2ciKTsKKworc2hvdWxkQmUoc3RyaW5nLm1hdGNoKC8oPzzwnZOR8J2Tu/Cdk7jw
nZSA8J2Ttz5icm93bikvKS5ncm91cHMu8J2TkfCdk7vwnZO48J2UgPCdk7csICJicm93biIpOwor
c2hvdWxkQmUoc3RyaW5nLm1hdGNoKC8oPzzwnZOR8J2Tu/Cdk7jwnZSA8J2Ttz5icm93bikvKS5n
cm91cHMuXHV7MWQ0ZDF9XHV7MWQ0ZmJ9XHV7MWQ0Zjh9XHV7MWQ1MDB9XHV7MWQ0Zjd9LCAiYnJv
d24iKTsKK3Nob3VsZEJlKHN0cmluZy5tYXRjaCgvKD88XHV7MWQ0ZDF9XHV7MWQ0ZmJ9XHV7MWQ0
Zjh9XHV7MWQ1MDB9XHV7MWQ0Zjd9PmJyb3duKS8pLmdyb3Vwcy7wnZOR8J2Tu/Cdk7jwnZSA8J2T
tywgImJyb3duIik7CitzaG91bGRCZShzdHJpbmcubWF0Y2goLyg/PFx1ezFkNGQxfVx1ezFkNGZi
fVx1ezFkNGY4fVx1ezFkNTAwfVx1ezFkNGY3fT5icm93bikvKS5ncm91cHMuXHV7MWQ0ZDF9XHV7
MWQ0ZmJ9XHV7MWQ0Zjh9XHV7MWQ1MDB9XHV7MWQ0Zjd9LCAiYnJvd24iKTsKK3Nob3VsZEJlKHN0
cmluZy5tYXRjaCgvKD88XHVkODM1XHVkY2QxXHVkODM1XHVkY2ZiXHVkODM1XHVkY2Y4XHVkODM1
XHVkZDAwXHVkODM1XHVkY2Y3PmJyb3duKS8pLmdyb3Vwcy7wnZOR8J2Tu/Cdk7jwnZSA8J2Ttywg
ImJyb3duIik7CitzaG91bGRCZShzdHJpbmcubWF0Y2goLyg/PFx1ZDgzNVx1ZGNkMVx1ZDgzNVx1
ZGNmYlx1ZDgzNVx1ZGNmOFx1ZDgzNVx1ZGQwMFx1ZDgzNVx1ZGNmNz5icm93bikvKS5ncm91cHMu
XHV7MWQ0ZDF9XHV7MWQ0ZmJ9XHV7MWQ0Zjh9XHV7MWQ1MDB9XHV7MWQ0Zjd9LCAiYnJvd24iKTsK
Kworc2hvdWxkQmUoc3RyaW5nLm1hdGNoKC8oPzzwnZaw8J2WofCdlqU+cVx3KlxXXHcqXFdcdyop
LykuZ3JvdXBzLvCdlrDwnZah8J2WpSwgInF1aWNrIGJyb3duIGZveCIpOworc2hvdWxkQmUoc3Ry
aW5nLm1hdGNoKC8oPzzwnZaw8J2WoVx1ezFkNWE1fT5xXHcqXFdcdypcV1x3KikvKS5ncm91cHMu
8J2WsPCdlqHwnZalLCAicXVpY2sgYnJvd24gZm94Iik7CitzaG91bGRCZShzdHJpbmcubWF0Y2go
Lyg/PPCdlrBcdXsxZDVhMX3wnZalPnFcdypcV1x3KlxXXHcqKS8pLmdyb3Vwcy7wnZaw8J2WofCd
lqUsICJxdWljayBicm93biBmb3giKTsKK3Nob3VsZEJlKHN0cmluZy5tYXRjaCgvKD888J2WsFx1
ezFkNWExfVx1ezFkNWE1fT5xXHcqXFdcdypcV1x3KikvKS5ncm91cHMu8J2WsPCdlqHwnZalLCAi
cXVpY2sgYnJvd24gZm94Iik7CitzaG91bGRCZShzdHJpbmcubWF0Y2goLyg/PFx1ezFkNWIwffCd
lqHwnZalPnFcdypcV1x3KlxXXHcqKS8pLmdyb3Vwcy7wnZaw8J2WofCdlqUsICJxdWljayBicm93
biBmb3giKTsKK3Nob3VsZEJlKHN0cmluZy5tYXRjaCgvKD88XHV7MWQ1YjB98J2WoVx1ezFkNWE1
fT5xXHcqXFdcdypcV1x3KikvKS5ncm91cHMu8J2WsPCdlqHwnZalLCAicXVpY2sgYnJvd24gZm94
Iik7CitzaG91bGRCZShzdHJpbmcubWF0Y2goLyg/PFx1ezFkNWIwfVx1ezFkNWExffCdlqU+cVx3
KlxXXHcqXFdcdyopLykuZ3JvdXBzLvCdlrDwnZah8J2WpSwgInF1aWNrIGJyb3duIGZveCIpOwor
c2hvdWxkQmUoc3RyaW5nLm1hdGNoKC8oPzxcdXsxZDViMH1cdXsxZDVhMX1cdXsxZDVhNX0+cVx3
KlxXXHcqXFdcdyopLykuZ3JvdXBzLvCdlrDwnZah8J2WpSwgInF1aWNrIGJyb3duIGZveCIpOwor
CitzaG91bGRCZShzdHJpbmcubWF0Y2goLyg/PHRoZfCdn5o+dGhlKS8pLmdyb3Vwcy50aGXwnZ+a
LCAidGhlIik7CitzaG91bGRCZShzdHJpbmcubWF0Y2goLyg/PHRoZVx1ezFkN2RhfT50aGUpLyku
Z3JvdXBzLnRoZfCdn5osICJ0aGUiKTsKK3Nob3VsZEJlKHN0cmluZy5tYXRjaCgvKD88dGhlXHVk
ODM1XHVkZmRhPnRoZSkvKS5ncm91cHMudGhl8J2fmiwgInRoZSIpOworCisvLyBJbnZhbGlkIGlk
ZW50aWZpZXJzCisKK3Nob3VsZFRocm93SW52YWxpZEdyb3VwU3BlY2lmaWVyTmFtZShmdW5jdGlv
bigpIHsKKyAgICByZXR1cm4gbmV3IFJlZ0V4cCgiKD888J+mij5mb3gpIik7Cit9KTsKKworc2hv
dWxkVGhyb3dJbnZhbGlkR3JvdXBTcGVjaWZpZXJOYW1lKGZ1bmN0aW9uKCkgeworICAgIHJldHVy
biBuZXcgUmVnRXhwKCIoPzxcdXsxZjk4YX0+Zm94KSIpOworfSk7CisKK3Nob3VsZFRocm93SW52
YWxpZEdyb3VwU3BlY2lmaWVyTmFtZShmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gbmV3IFJlZ0V4
cCgiKD88XHVkODNlXHVkZDhhPmZveCkiKTsKK30pOworCitzaG91bGRUaHJvd0ludmFsaWRHcm91
cFNwZWNpZmllck5hbWUoZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIG5ldyBSZWdFeHAoIig/PPCf
kJU+ZG9nKSIpOworfSk7CisKK3Nob3VsZFRocm93SW52YWxpZEdyb3VwU3BlY2lmaWVyTmFtZShm
dW5jdGlvbigpIHsKKyAgICByZXR1cm4gbmV3IFJlZ0V4cCgiKD88XHV7MWY0MTV9PmRvZykiKTsK
K30pOworCitzaG91bGRUaHJvd0ludmFsaWRHcm91cFNwZWNpZmllck5hbWUoZnVuY3Rpb24oKSB7
CisgICAgcmV0dXJuIG5ldyBSZWdFeHAoIig/PFx1ZDgzZCBcdWRjMTU+ZG9nKSIpOworfSk7CisK
K3Nob3VsZFRocm93SW52YWxpZEdyb3VwU3BlY2lmaWVyTmFtZShmdW5jdGlvbigpIHsKKyAgICBy
ZXR1cm4gbmV3IFJlZ0V4cCgiKD888J2fmnRoZT50aGUpIik7Cit9KTsKKworc2hvdWxkVGhyb3dJ
bnZhbGlkR3JvdXBTcGVjaWZpZXJOYW1lKGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBuZXcgUmVn
RXhwKCIoPzxcdXsxZDdkYX10aGU+dGhlKSIpOworfSk7CisKK3Nob3VsZFRocm93SW52YWxpZEdy
b3VwU3BlY2lmaWVyTmFtZShmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gbmV3IFJlZ0V4cCgiKD88
XHVkODM1XHVkZmRhdGhlPnRoZSkiKTsKK30pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNTk4MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIwMjAtMDQtMDkgIE1pY2hhZWwgU2Fib2Zm
ICA8bXNhYm9mZkBhcHBsZS5jb20+CisKKyAgICAgICAgW1lBUlJdIEFsbG93IGZvciBVbmljb2Rl
IG5hbWVkIGNhcHR1cmUgZ3JvdXAgaWRlbnRpZmllcnMgaW4gbm9uLVVuaWNvZGUgcmVndWxhciBl
eHByZXNzaW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjEwMzA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVXBkYXRlIFlBUlIgcGF0dGVybiBwcm9jZXNzaW5nIHRvIGFsbG93IGZvciBub24tQk1QIHVu
aWNvZGUgaWRlbnRpZmllciBjaGFyYWN0ZXJzIGluIG5hbWVkIGNhcHR1cmUgZ3JvdXBzLgorCisg
ICAgICAgIFVwZGF0ZWQgdHJ5Q29uc3VtZVVuaWNvZGVFc2NhcGUoKSB0byBhbGxvdyBmb3IgdW5p
Y29kZSBlc2NhcGVzIGluIG5vbi11bmljb2RlIGZsYWdnZWQgcmVnZXgncy4KKyAgICAgICAgQWRk
ZWQgdGhlIHNhbWUgc3VwcG9ydCB0byBjb25zdW1lUG9zc2libGVTdXJyb2dhdGVQYWlyKCkuCisK
KyAgICAgICAgKiB5YXJyL1lhcnJQYXJzZXIuaDoKKyAgICAgICAgKEpTQzo6WWFycjo6UGFyc2Vy
Ojpjb25zdW1lUG9zc2libGVTdXJyb2dhdGVQYWlyKToKKyAgICAgICAgKEpTQzo6WWFycjo6UGFy
c2VyOjpwYXJzZUNoYXJhY3RlckNsYXNzKToKKyAgICAgICAgKEpTQzo6WWFycjo6UGFyc2VyOjpw
YXJzZVRva2Vucyk6CisgICAgICAgIChKU0M6OllhcnI6OlBhcnNlcjo6dHJ5Q29uc3VtZVVuaWNv
ZGVFc2NhcGUpOgorICAgICAgICAoSlNDOjpZYXJyOjpQYXJzZXI6OnRyeUNvbnN1bWVJZGVudGlm
aWVyQ2hhcmFjdGVyKToKKwogMjAyMC0wNC0wOSAgQWxleGV5IFNodmF5a2EgIDxzaHZhaWthbGVz
aEBnbWFpbC5jb20+CiAKICAgICAgICAgUHJveHlPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KCkg
c2hvdWxkIGNvbmRpdGlvbmFsbHkgdGhyb3cgb24gZmFsc3kgdHJhcCByZXN1bHQKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJQYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJyUGFyc2VyLmgJKHJldmlzaW9uIDI1OTgzNCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJQYXJzZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtNDQsNiArNDQsOCBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlPGNsYXNzIEZyaWVuZERlbGVn
YXRlPgogICAgIGZyaWVuZCBFcnJvckNvZGUgcGFyc2UoRnJpZW5kRGVsZWdhdGUmLCBjb25zdCBT
dHJpbmcmIHBhdHRlcm4sIGJvb2wgaXNVbmljb2RlLCB1bnNpZ25lZCBiYWNrUmVmZXJlbmNlTGlt
aXQsIGJvb2wgaXNOYW1lZEZvcndhcmRSZWZlcmVuY2VBbGxvd2VkKTsKIAorICAgIGVudW0gY2xh
c3MgVW5pY29kZUVzY2FwZUNvbnRleHQgOiB1aW50OF90IHsgQ2hhcmFjdGVyRXNjYXBlLCBJZGVu
dGlmaWVyTmFtZSB9OworCiAgICAgLyoKICAgICAgKiBDaGFyYWN0ZXJDbGFzc1BhcnNlckRlbGVn
YXRlOgogICAgICAqCkBAIC01MzIsMTAgKzUzNCwxMyBAQCBwcml2YXRlOgogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTxVbmljb2RlRXNjYXBlQ29udGV4dCBjb250
ZXh0PgogICAgIFVDaGFyMzIgY29uc3VtZVBvc3NpYmxlU3Vycm9nYXRlUGFpcigpCiAgICAgewor
ICAgICAgICBib29sIHVuaWNvZGVQYXR0ZXJuT3JJZGVudGlmaWVyTmFtZSA9IG1faXNVbmljb2Rl
IHx8IGNvbnRleHQgPT0gVW5pY29kZUVzY2FwZUNvbnRleHQ6OklkZW50aWZpZXJOYW1lOworCiAg
ICAgICAgIFVDaGFyMzIgY2ggPSBjb25zdW1lKCk7Ci0gICAgICAgIGlmIChVMTZfSVNfTEVBRChj
aCkgJiYgbV9pc1VuaWNvZGUgJiYgKHBhdHRlcm5SZW1haW5pbmcoKSA+IDApKSB7CisgICAgICAg
IGlmIChVMTZfSVNfTEVBRChjaCkgJiYgdW5pY29kZVBhdHRlcm5PcklkZW50aWZpZXJOYW1lICYm
IChwYXR0ZXJuUmVtYWluaW5nKCkgPiAwKSkgewogICAgICAgICAgICAgUGFyc2VTdGF0ZSBzdGF0
ZSA9IHNhdmVTdGF0ZSgpOwogCiAgICAgICAgICAgICBVQ2hhcjMyIHN1cnJvZ2F0ZTIgPSBjb25z
dW1lKCk7CkBAIC01OTEsNyArNTk2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBicmVh
azsKIAogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBjaGFyYWN0ZXJDbGFz
c0NvbnN0cnVjdG9yLmF0b21QYXR0ZXJuQ2hhcmFjdGVyKGNvbnN1bWVQb3NzaWJsZVN1cnJvZ2F0
ZVBhaXIoKSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgY2hhcmFjdGVyQ2xhc3NDb25zdHJ1Y3Rv
ci5hdG9tUGF0dGVybkNoYXJhY3Rlcihjb25zdW1lUG9zc2libGVTdXJyb2dhdGVQYWlyPFVuaWNv
ZGVFc2NhcGVDb250ZXh0OjpDaGFyYWN0ZXJFc2NhcGU+KCksIHRydWUpOwogICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICBpZiAoaGFzRXJyb3IobV9lcnJvckNvZGUpKQpAQCAtODMzLDcgKzgz
OCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICAgICAgbV9kZWxlZ2F0ZS5hdG9tUGF0dGVybkNoYXJhY3Rlcihjb25zdW1lUG9z
c2libGVTdXJyb2dhdGVQYWlyKCkpOworICAgICAgICAgICAgICAgIG1fZGVsZWdhdGUuYXRvbVBh
dHRlcm5DaGFyYWN0ZXIoY29uc3VtZVBvc3NpYmxlU3Vycm9nYXRlUGFpcjxVbmljb2RlRXNjYXBl
Q29udGV4dDo6Q2hhcmFjdGVyRXNjYXBlPigpKTsKICAgICAgICAgICAgICAgICBsYXN0VG9rZW5X
YXNBbkF0b20gPSB0cnVlOwogICAgICAgICAgICAgfQogCkBAIC05NzcsMjAgKzk4MiwyMCBAQCBw
cml2YXRlOgogICAgICAgICByZXR1cm4gcGVlaygpIC0gJzAnOwogICAgIH0KIAotICAgIGVudW0g
Y2xhc3MgVW5pY29kZUVzY2FwZUNvbnRleHQgOiB1aW50OF90IHsgQ2hhcmFjdGVyRXNjYXBlLCBJ
ZGVudGlmaWVyTmFtZSB9OwotCiAgICAgdGVtcGxhdGU8VW5pY29kZUVzY2FwZUNvbnRleHQgY29u
dGV4dD4KICAgICBpbnQgdHJ5Q29uc3VtZVVuaWNvZGVFc2NhcGUoKQogICAgIHsKICAgICAgICAg
QVNTRVJUKCFoYXNFcnJvcihtX2Vycm9yQ29kZSkpOwogCisgICAgICAgIGJvb2wgdW5pY29kZVBh
dHRlcm5PcklkZW50aWZpZXJOYW1lID0gbV9pc1VuaWNvZGUgfHwgY29udGV4dCA9PSBVbmljb2Rl
RXNjYXBlQ29udGV4dDo6SWRlbnRpZmllck5hbWU7CisKICAgICAgICAgaWYgKCF0cnlDb25zdW1l
KCd1JykgfHwgYXRFbmRPZlBhdHRlcm4oKSkgewotICAgICAgICAgICAgaWYgKG1faXNVbmljb2Rl
IHx8IGNvbnRleHQgPT0gVW5pY29kZUVzY2FwZUNvbnRleHQ6OklkZW50aWZpZXJOYW1lKQorICAg
ICAgICAgICAgaWYgKHVuaWNvZGVQYXR0ZXJuT3JJZGVudGlmaWVyTmFtZSkKICAgICAgICAgICAg
ICAgICBtX2Vycm9yQ29kZSA9IEVycm9yQ29kZTo6SW52YWxpZFVuaWNvZGVFc2NhcGU7CiAgICAg
ICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobV9pc1VuaWNvZGUg
JiYgdHJ5Q29uc3VtZSgneycpKSB7CisgICAgICAgIGlmICh1bmljb2RlUGF0dGVybk9ySWRlbnRp
Zmllck5hbWUgJiYgdHJ5Q29uc3VtZSgneycpKSB7CiAgICAgICAgICAgICBpbnQgY29kZVBvaW50
ID0gMDsKICAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgICBpZiAoYXRFbmRPZlBhdHRl
cm4oKSB8fCAhaXNBU0NJSUhleERpZ2l0KHBlZWsoKSkpIHsKQEAgLTEwMTYsMTMgKzEwMjEsMTMg
QEAgcHJpdmF0ZToKIAogICAgICAgICBpbnQgY29kZVVuaXQgPSB0cnlDb25zdW1lSGV4KDQpOwog
ICAgICAgICBpZiAoY29kZVVuaXQgPT0gLTEpIHsKLSAgICAgICAgICAgIGlmIChtX2lzVW5pY29k
ZSB8fCBjb250ZXh0ID09IFVuaWNvZGVFc2NhcGVDb250ZXh0OjpJZGVudGlmaWVyTmFtZSkKKyAg
ICAgICAgICAgIGlmICh1bmljb2RlUGF0dGVybk9ySWRlbnRpZmllck5hbWUpCiAgICAgICAgICAg
ICAgICAgbV9lcnJvckNvZGUgPSBFcnJvckNvZGU6OkludmFsaWRVbmljb2RlRXNjYXBlOwogICAg
ICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAKICAgICAgICAgLy8gSWYgd2UgaGF2ZSB0
aGUgZmlyc3Qgb2YgYSBzdXJyb2dhdGUgcGFpciwgbG9vayBmb3IgdGhlIHNlY29uZC4KLSAgICAg
ICAgaWYgKFUxNl9JU19MRUFEKGNvZGVVbml0KSAmJiBtX2lzVW5pY29kZSAmJiBwYXR0ZXJuUmVt
YWluaW5nKCkgPj0gNiAmJiBwZWVrKCkgPT0gJ1xcJykgeworICAgICAgICBpZiAoVTE2X0lTX0xF
QUQoY29kZVVuaXQpICYmIHVuaWNvZGVQYXR0ZXJuT3JJZGVudGlmaWVyTmFtZSAmJiBwYXR0ZXJu
UmVtYWluaW5nKCkgPj0gNiAmJiBwZWVrKCkgPT0gJ1xcJykgewogICAgICAgICAgICAgUGFyc2VT
dGF0ZSBzdGF0ZSA9IHNhdmVTdGF0ZSgpOwogICAgICAgICAgICAgY29uc3VtZSgpOwogCkBAIC0x
MDQzLDcgKzEwNDgsNyBAQCBwcml2YXRlOgogICAgICAgICBpZiAodHJ5Q29uc3VtZSgnXFwnKSkK
ICAgICAgICAgICAgIHJldHVybiB0cnlDb25zdW1lVW5pY29kZUVzY2FwZTxVbmljb2RlRXNjYXBl
Q29udGV4dDo6SWRlbnRpZmllck5hbWU+KCk7CiAKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVQb3Nz
aWJsZVN1cnJvZ2F0ZVBhaXIoKTsKKyAgICAgICAgcmV0dXJuIGNvbnN1bWVQb3NzaWJsZVN1cnJv
Z2F0ZVBhaXI8VW5pY29kZUVzY2FwZUNvbnRleHQ6OklkZW50aWZpZXJOYW1lPigpOwogICAgIH0K
IAogICAgIGJvb2wgaXNJZGVudGlmaWVyU3RhcnQoaW50IGNoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>396102</attachid>
            <date>2020-04-10 10:42:46 -0700</date>
            <delta_ts>2020-04-10 16:42:53 -0700</delta_ts>
            <desc>Patch with updates from review</desc>
            <filename>210309-2.patch</filename>
            <type>text/plain</type>
            <size>15192</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNTk4ODApCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE2IEBACisyMDIwLTA0LTEwICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBw
bGUuY29tPgorCisgICAgICAgIFtZQVJSXSBBbGxvdyBmb3IgVW5pY29kZSBuYW1lZCBjYXB0dXJl
IGdyb3VwIGlkZW50aWZpZXJzIGluIG5vbi1Vbmljb2RlIHJlZ3VsYXIgZXhwcmVzc2lvbnMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDMwOQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3RyZXNzL3Jl
Z2V4cC1uYW1lZC1jYXB0dXJlLWdyb3Vwcy5qczogTmV3IHRlc3QgYWRkZWQuCisgICAgICAgIChz
aG91bGRCZSk6CisgICAgICAgIChzaG91bGRUaHJvd0ludmFsaWRHcm91cFNwZWNpZmllck5hbWUp
OgorICAgICAgICAqIHRlc3QyNjIvZXhwZWN0YXRpb25zLnlhbWw6IFVwZGF0ZWQgZm9yIG5vdyBm
YWlsaW5nIHRlc3RzLgorICAgICAgICBXaGVuIHRlc3QyNjIgZ2V0cyB1cGRhdGVkIGZvciB0aGlz
IGNoYW5nZSwgdGhpcyBjYW4gYmUgcmV2ZXJ0ZWQuCisKIDIwMjAtMDQtMDkgIFl1c3VrZSBTdXp1
a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBNb2R1bGVFbnZpcm9ubWVu
dCBkbyBub3QgaGF2ZSBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudCBhcyBpdHMgdXBwZXIgc2Nv
cGUKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL3JlZ2V4cC1uYW1lZC1jYXB0dXJlLWdyb3Vwcy5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9yZWdleHAtbmFtZWQtY2FwdHVyZS1ncm91cHMu
anMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9zdHJlc3MvcmVnZXhwLW5hbWVkLWNhcHR1cmUt
Z3JvdXBzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTY2IEBACisKK2Z1bmN0aW9uIHNo
b3VsZEJlKGFjdHVhbCwgZXhwZWN0ZWQpIHsKKyAgICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZCAm
JiAhKGFjdHVhbCAhPT0gbnVsbCAmJiB0eXBlb2YoZXhwZWN0ZWQpID09PSAic3RyaW5nIiAmJiBh
Y3R1YWwudG9TdHJpbmcoKSA9PSBleHBlY3RlZCkpCisgICAgICAgIHRocm93IG5ldyBFcnJvcign
ZXhwZWN0ZWQ6ICcgKyBleHBlY3RlZCArICcsIGJhZCB2YWx1ZTogJyArIGFjdHVhbCk7Cit9CisK
K2Z1bmN0aW9uIHNob3VsZFRocm93SW52YWxpZEdyb3VwU3BlY2lmaWVyTmFtZShmdW5jKSB7Cisg
ICAgdmFyIGVycm9yID0gbnVsbDsKKyAgICB0cnkgeworICAgICAgICBmdW5jKCk7CisgICAgfSBj
YXRjaCAoZSkgeworICAgICAgICBlcnJvciA9IGU7CisgICAgfQorICAgIGlmICghZXJyb3IpCisg
ICAgICAgIHRocm93IG5ldyBFcnJvcignbm90IHRocm93bicpOworICAgIHNob3VsZEJlKFN0cmlu
ZyhlcnJvciksICJTeW50YXhFcnJvcjogSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb246IGludmFs
aWQgZ3JvdXAgc3BlY2lmaWVyIG5hbWUiKTsKK30KKworLyoKKyBWYWxpZCBJRF9TdGFydCAvIElE
X0NvbnRpbnVlIFVuaWNvZGUgY2hhcmFjdGVycworCisg8J2RkyAgXHV7MWQ0NTN9ICBcdWQ4MzUg
XHVkYzUzCisg8J2RnCAgXHV7MWQ0NWN9ICBcdWQ4MzUgXHVkYzVjCisg8J2RpSAgXHV7aWQ0NjV9
ICBcdWQ4MzUgXHVkYzY1CisKKyDwnZOTICBcdXsxZDRkM30gIFx1ZDgzNSBcdWRjZDMKKyDwnZO4
ICBcdXsxZDRmOH0gIFx1ZDgzNSBcdWRjZjgKKyDwnZOwICBcdXsxZDRmMH0gIFx1ZDgzNSBcdWRj
ZjAKKworIPCdk5EgIFx1ezFkNGQxfSAgXHVkODM1IFx1ZGNkMQorIPCdk7sgIFx1ezFkNGZifSAg
XHVkODM1IFx1ZGNmYgorIPCdk7ggIFx1ezFkNGY4fSAgXHVkODM1IFx1ZGNmOAorIPCdlIAgIFx1
ezFkNTAwfSAgXHVkODM1IFx1ZGQwMAorIPCdk7cgIFx1ezFkNGY3fSAgXHVkODM1IFx1ZGNmNwor
Cisg8J2WsCAgXHV7MWQ1YjB9ICBcdWQ4MzUgXHVkZGIwCisg8J2WoSAgXHV7MWQ1YTF9ICBcdWQ4
MzUgXHVkZGExCisg8J2WpSAgXHV7MWQ1YTV9ICBcdWQ4MzUgXHVkZGE1CisKKyAoZm94KSDni7gg
IFx1ezcyZjh9ICBcdTcyZjgKKyAoZG9nKSDni5cgIFx1ezcyZDd9ICBcdTcyZDcgIAorCisgVmFs
aWQgSURfQ29udGludWUgVW5pY29kZSBjaGFyYWN0ZXJzIChDYW4ndCBiZSBmaXJzdCBpZGVudGlm
aWVyIGNoYXJhY3Rlci4pCisKKyDwnZ+aICBcdXsxZDdkYX0gIFx1ZDgzNSBcdWRmZGEKKworSW52
YWxpZCBJRF9TdGFydCAvIElEX0NvbnRpbnVlCisKKyAoZm94IGZhY2UgZW1vamkpIPCfpoogIFx1
ezFmOThhfSAgXHVkODNlIFx1ZGQ4YQorIChkb2cgZW1vamkpICDwn5CVICBcdXsxZjQxNX0gIFx1
ZDgzZCBcdWRjMTUKKyovCisKK3ZhciBzdHJpbmcgPSAiVGhlIHF1aWNrIGJyb3duIGZveCBqdW1w
ZWQgb3ZlciB0aGUgbGF6eSBkb2cncyBiYWNrIjsKKworbGV0IG1hdGNoID0gbnVsbDsKKworLy8g
VHJ5IHZhbGlkIG5hbWVzCisKKy8vIFVuaWNvZGUgUmVnRXhwJ3MKK3Nob3VsZEJlKHN0cmluZy5t
YXRjaCgvKD88YW5pbWFsPmZveHxkb2cpL3UpLmdyb3Vwcy5hbmltYWwsICJmb3giKTsKK3Nob3Vs
ZEJlKHN0cmluZy5tYXRjaCgvKD88dGhlMj50aGUpL3UpLmdyb3Vwcy50aGUyLCAidGhlIik7CisK
K21hdGNoID0gc3RyaW5nLm1hdGNoKC8oPzzwnZGT8J2RnPCdkaU+Zm94KS4qKD888J2Tk/Cdk7jw
nZOwPmRvZykvdSk7CitzaG91bGRCZShtYXRjaC5ncm91cHMu8J2Rk/CdkZzwnZGlLCAiZm94Iik7
CitzaG91bGRCZShtYXRjaC5ncm91cHMu8J2Tk/Cdk7jwnZOwLCAiZG9nIik7CitzaG91bGRCZSht
YXRjaFsxXSwgImZveCIpOworc2hvdWxkQmUobWF0Y2hbMl0sICJkb2ciKTsKKworbWF0Y2ggPSBz
dHJpbmcubWF0Y2goLyg/POeLuD5mb3gpLiooPzzni5c+ZG9nKS91KTsKK3Nob3VsZEJlKG1hdGNo
Lmdyb3Vwcy7ni7gsICJmb3giKTsKK3Nob3VsZEJlKG1hdGNoLmdyb3Vwcy7ni5csICJkb2ciKTsK
K3Nob3VsZEJlKG1hdGNoWzFdLCAiZm94Iik7CitzaG91bGRCZShtYXRjaFsyXSwgImRvZyIpOwor
CitzaG91bGRCZShzdHJpbmcubWF0Y2goLyg/PPCdk5HwnZO78J2TuPCdlIDwnZO3PmJyb3duKS91
KS5ncm91cHMu8J2TkfCdk7vwnZO48J2UgPCdk7csICJicm93biIpOworc2hvdWxkQmUoc3RyaW5n
Lm1hdGNoKC8oPzzwnZOR8J2Tu/Cdk7jwnZSA8J2Ttz5icm93bikvdSkuZ3JvdXBzLlx1ezFkNGQx
fVx1ezFkNGZifVx1ezFkNGY4fVx1ezFkNTAwfVx1ezFkNGY3fSwgImJyb3duIik7CitzaG91bGRC
ZShzdHJpbmcubWF0Y2goLyg/PFx1ezFkNGQxfVx1ezFkNGZifVx1ezFkNGY4fVx1ezFkNTAwfVx1
ezFkNGY3fT5icm93bikvdSkuZ3JvdXBzLvCdk5HwnZO78J2TuPCdlIDwnZO3LCAiYnJvd24iKTsK
K3Nob3VsZEJlKHN0cmluZy5tYXRjaCgvKD88XHV7MWQ0ZDF9XHV7MWQ0ZmJ9XHV7MWQ0Zjh9XHV7
MWQ1MDB9XHV7MWQ0Zjd9PmJyb3duKS91KS5ncm91cHMuXHV7MWQ0ZDF9XHV7MWQ0ZmJ9XHV7MWQ0
Zjh9XHV7MWQ1MDB9XHV7MWQ0Zjd9LCAiYnJvd24iKTsKK3Nob3VsZEJlKHN0cmluZy5tYXRjaCgv
KD88XHVkODM1XHVkY2QxXHVkODM1XHVkY2ZiXHVkODM1XHVkY2Y4XHVkODM1XHVkZDAwXHVkODM1
XHVkY2Y3PmJyb3duKS91KS5ncm91cHMu8J2TkfCdk7vwnZO48J2UgPCdk7csICJicm93biIpOwor
c2hvdWxkQmUoc3RyaW5nLm1hdGNoKC8oPzxcdWQ4MzVcdWRjZDFcdWQ4MzVcdWRjZmJcdWQ4MzVc
dWRjZjhcdWQ4MzVcdWRkMDBcdWQ4MzVcdWRjZjc+YnJvd24pL3UpLmdyb3Vwcy5cdXsxZDRkMX1c
dXsxZDRmYn1cdXsxZDRmOH1cdXsxZDUwMH1cdXsxZDRmN30sICJicm93biIpOworCitzaG91bGRC
ZShzdHJpbmcubWF0Y2goLyg/PPCdlrDwnZah8J2WpT5xXHcqXFdcdypcV1x3KikvdSkuZ3JvdXBz
LvCdlrDwnZah8J2WpSwgInF1aWNrIGJyb3duIGZveCIpOworc2hvdWxkQmUoc3RyaW5nLm1hdGNo
KC8oPzzwnZaw8J2WoVx1ezFkNWE1fT5xXHcqXFdcdypcV1x3KikvdSkuZ3JvdXBzLvCdlrDwnZah
8J2WpSwgInF1aWNrIGJyb3duIGZveCIpOworc2hvdWxkQmUoc3RyaW5nLm1hdGNoKC8oPzzwnZaw
XHV7MWQ1YTF98J2WpT5xXHcqXFdcdypcV1x3KikvdSkuZ3JvdXBzLvCdlrDwnZah8J2WpSwgInF1
aWNrIGJyb3duIGZveCIpOworc2hvdWxkQmUoc3RyaW5nLm1hdGNoKC8oPzzwnZawXHV7MWQ1YTF9
XHV7MWQ1YTV9PnFcdypcV1x3KlxXXHcqKS91KS5ncm91cHMu8J2WsPCdlqHwnZalLCAicXVpY2sg
YnJvd24gZm94Iik7CitzaG91bGRCZShzdHJpbmcubWF0Y2goLyg/PFx1ezFkNWIwffCdlqHwnZal
PnFcdypcV1x3KlxXXHcqKS91KS5ncm91cHMu8J2WsPCdlqHwnZalLCAicXVpY2sgYnJvd24gZm94
Iik7CitzaG91bGRCZShzdHJpbmcubWF0Y2goLyg/PFx1ezFkNWIwffCdlqFcdXsxZDVhNX0+cVx3
KlxXXHcqXFdcdyopL3UpLmdyb3Vwcy7wnZaw8J2WofCdlqUsICJxdWljayBicm93biBmb3giKTsK
K3Nob3VsZEJlKHN0cmluZy5tYXRjaCgvKD88XHV7MWQ1YjB9XHV7MWQ1YTF98J2WpT5xXHcqXFdc
dypcV1x3KikvdSkuZ3JvdXBzLvCdlrDwnZah8J2WpSwgInF1aWNrIGJyb3duIGZveCIpOworc2hv
dWxkQmUoc3RyaW5nLm1hdGNoKC8oPzxcdXsxZDViMH1cdXsxZDVhMX1cdXsxZDVhNX0+cVx3KlxX
XHcqXFdcdyopL3UpLmdyb3Vwcy7wnZaw8J2WofCdlqUsICJxdWljayBicm93biBmb3giKTsKKwor
c2hvdWxkQmUoc3RyaW5nLm1hdGNoKC8oPzx0aGXwnZ+aPnRoZSkvdSkuZ3JvdXBzLnRoZfCdn5os
ICJ0aGUiKTsKK3Nob3VsZEJlKHN0cmluZy5tYXRjaCgvKD88dGhlXHV7MWQ3ZGF9PnRoZSkvdSku
Z3JvdXBzLnRoZfCdn5osICJ0aGUiKTsKK3Nob3VsZEJlKHN0cmluZy5tYXRjaCgvKD88dGhlXHVk
ODM1XHVkZmRhPnRoZSkvdSkuZ3JvdXBzLnRoZfCdn5osICJ0aGUiKTsKKworLy8gTm9uLXVuaWNv
ZGUgUmVnRXhwJ3MKK3Nob3VsZEJlKHN0cmluZy5tYXRjaCgvKD88YW5pbWFsPmZveHxkb2cpLyku
Z3JvdXBzLmFuaW1hbCwgImZveCIpOworCittYXRjaCA9IHN0cmluZy5tYXRjaCgvKD888J2Rk/Cd
kZzwnZGlPmZveCkuKig/PPCdk5PwnZO48J2TsD5kb2cpLyk7CitzaG91bGRCZShtYXRjaC5ncm91
cHMu8J2Rk/CdkZzwnZGlLCAiZm94Iik7CitzaG91bGRCZShtYXRjaC5ncm91cHMu8J2Tk/Cdk7jw
nZOwLCAiZG9nIik7CitzaG91bGRCZShtYXRjaFsxXSwgImZveCIpOworc2hvdWxkQmUobWF0Y2hb
Ml0sICJkb2ciKTsKKworbWF0Y2ggPSBzdHJpbmcubWF0Y2goLyg/POeLuD5mb3gpLiooPzzni5c+
ZG9nKS8pOworc2hvdWxkQmUobWF0Y2guZ3JvdXBzLueLuCwgImZveCIpOworc2hvdWxkQmUobWF0
Y2guZ3JvdXBzLueLlywgImRvZyIpOworc2hvdWxkQmUobWF0Y2hbMV0sICJmb3giKTsKK3Nob3Vs
ZEJlKG1hdGNoWzJdLCAiZG9nIik7CisKK3Nob3VsZEJlKHN0cmluZy5tYXRjaCgvKD888J2TkfCd
k7vwnZO48J2UgPCdk7c+YnJvd24pLykuZ3JvdXBzLvCdk5HwnZO78J2TuPCdlIDwnZO3LCAiYnJv
d24iKTsKK3Nob3VsZEJlKHN0cmluZy5tYXRjaCgvKD888J2TkfCdk7vwnZO48J2UgPCdk7c+YnJv
d24pLykuZ3JvdXBzLlx1ezFkNGQxfVx1ezFkNGZifVx1ezFkNGY4fVx1ezFkNTAwfVx1ezFkNGY3
fSwgImJyb3duIik7CitzaG91bGRCZShzdHJpbmcubWF0Y2goLyg/PFx1ezFkNGQxfVx1ezFkNGZi
fVx1ezFkNGY4fVx1ezFkNTAwfVx1ezFkNGY3fT5icm93bikvKS5ncm91cHMu8J2TkfCdk7vwnZO4
8J2UgPCdk7csICJicm93biIpOworc2hvdWxkQmUoc3RyaW5nLm1hdGNoKC8oPzxcdXsxZDRkMX1c
dXsxZDRmYn1cdXsxZDRmOH1cdXsxZDUwMH1cdXsxZDRmN30+YnJvd24pLykuZ3JvdXBzLlx1ezFk
NGQxfVx1ezFkNGZifVx1ezFkNGY4fVx1ezFkNTAwfVx1ezFkNGY3fSwgImJyb3duIik7CitzaG91
bGRCZShzdHJpbmcubWF0Y2goLyg/PFx1ZDgzNVx1ZGNkMVx1ZDgzNVx1ZGNmYlx1ZDgzNVx1ZGNm
OFx1ZDgzNVx1ZGQwMFx1ZDgzNVx1ZGNmNz5icm93bikvKS5ncm91cHMu8J2TkfCdk7vwnZO48J2U
gPCdk7csICJicm93biIpOworc2hvdWxkQmUoc3RyaW5nLm1hdGNoKC8oPzxcdWQ4MzVcdWRjZDFc
dWQ4MzVcdWRjZmJcdWQ4MzVcdWRjZjhcdWQ4MzVcdWRkMDBcdWQ4MzVcdWRjZjc+YnJvd24pLyku
Z3JvdXBzLlx1ezFkNGQxfVx1ezFkNGZifVx1ezFkNGY4fVx1ezFkNTAwfVx1ezFkNGY3fSwgImJy
b3duIik7CisKK3Nob3VsZEJlKHN0cmluZy5tYXRjaCgvKD888J2WsPCdlqHwnZalPnFcdypcV1x3
KlxXXHcqKS8pLmdyb3Vwcy7wnZaw8J2WofCdlqUsICJxdWljayBicm93biBmb3giKTsKK3Nob3Vs
ZEJlKHN0cmluZy5tYXRjaCgvKD888J2WsPCdlqFcdXsxZDVhNX0+cVx3KlxXXHcqXFdcdyopLyku
Z3JvdXBzLvCdlrDwnZah8J2WpSwgInF1aWNrIGJyb3duIGZveCIpOworc2hvdWxkQmUoc3RyaW5n
Lm1hdGNoKC8oPzzwnZawXHV7MWQ1YTF98J2WpT5xXHcqXFdcdypcV1x3KikvKS5ncm91cHMu8J2W
sPCdlqHwnZalLCAicXVpY2sgYnJvd24gZm94Iik7CitzaG91bGRCZShzdHJpbmcubWF0Y2goLyg/
PPCdlrBcdXsxZDVhMX1cdXsxZDVhNX0+cVx3KlxXXHcqXFdcdyopLykuZ3JvdXBzLvCdlrDwnZah
8J2WpSwgInF1aWNrIGJyb3duIGZveCIpOworc2hvdWxkQmUoc3RyaW5nLm1hdGNoKC8oPzxcdXsx
ZDViMH3wnZah8J2WpT5xXHcqXFdcdypcV1x3KikvKS5ncm91cHMu8J2WsPCdlqHwnZalLCAicXVp
Y2sgYnJvd24gZm94Iik7CitzaG91bGRCZShzdHJpbmcubWF0Y2goLyg/PFx1ezFkNWIwffCdlqFc
dXsxZDVhNX0+cVx3KlxXXHcqXFdcdyopLykuZ3JvdXBzLvCdlrDwnZah8J2WpSwgInF1aWNrIGJy
b3duIGZveCIpOworc2hvdWxkQmUoc3RyaW5nLm1hdGNoKC8oPzxcdXsxZDViMH1cdXsxZDVhMX3w
nZalPnFcdypcV1x3KlxXXHcqKS8pLmdyb3Vwcy7wnZaw8J2WofCdlqUsICJxdWljayBicm93biBm
b3giKTsKK3Nob3VsZEJlKHN0cmluZy5tYXRjaCgvKD88XHV7MWQ1YjB9XHV7MWQ1YTF9XHV7MWQ1
YTV9PnFcdypcV1x3KlxXXHcqKS8pLmdyb3Vwcy7wnZaw8J2WofCdlqUsICJxdWljayBicm93biBm
b3giKTsKKworc2hvdWxkQmUoc3RyaW5nLm1hdGNoKC8oPzx0aGXwnZ+aPnRoZSkvKS5ncm91cHMu
dGhl8J2fmiwgInRoZSIpOworc2hvdWxkQmUoc3RyaW5nLm1hdGNoKC8oPzx0aGVcdXsxZDdkYX0+
dGhlKS8pLmdyb3Vwcy50aGXwnZ+aLCAidGhlIik7CitzaG91bGRCZShzdHJpbmcubWF0Y2goLyg/
PHRoZVx1ZDgzNVx1ZGZkYT50aGUpLykuZ3JvdXBzLnRoZfCdn5osICJ0aGUiKTsKKworLy8gSW52
YWxpZCBpZGVudGlmaWVycworCitzaG91bGRUaHJvd0ludmFsaWRHcm91cFNwZWNpZmllck5hbWUo
ZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIG5ldyBSZWdFeHAoIig/PPCfpoo+Zm94KSIpOworfSk7
CisKK3Nob3VsZFRocm93SW52YWxpZEdyb3VwU3BlY2lmaWVyTmFtZShmdW5jdGlvbigpIHsKKyAg
ICByZXR1cm4gbmV3IFJlZ0V4cCgiKD88XHV7MWY5OGF9PmZveCkiKTsKK30pOworCitzaG91bGRU
aHJvd0ludmFsaWRHcm91cFNwZWNpZmllck5hbWUoZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIG5l
dyBSZWdFeHAoIig/PFx1ZDgzZVx1ZGQ4YT5mb3gpIik7Cit9KTsKKworc2hvdWxkVGhyb3dJbnZh
bGlkR3JvdXBTcGVjaWZpZXJOYW1lKGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBuZXcgUmVnRXhw
KCIoPzzwn5CVPmRvZykiKTsKK30pOworCitzaG91bGRUaHJvd0ludmFsaWRHcm91cFNwZWNpZmll
ck5hbWUoZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIG5ldyBSZWdFeHAoIig/PFx1ezFmNDE1fT5k
b2cpIik7Cit9KTsKKworc2hvdWxkVGhyb3dJbnZhbGlkR3JvdXBTcGVjaWZpZXJOYW1lKGZ1bmN0
aW9uKCkgeworICAgIHJldHVybiBuZXcgUmVnRXhwKCIoPzxcdWQ4M2QgXHVkYzE1PmRvZykiKTsK
K30pOworCitzaG91bGRUaHJvd0ludmFsaWRHcm91cFNwZWNpZmllck5hbWUoZnVuY3Rpb24oKSB7
CisgICAgcmV0dXJuIG5ldyBSZWdFeHAoIig/PPCdn5p0aGU+dGhlKSIpOworfSk7CisKK3Nob3Vs
ZFRocm93SW52YWxpZEdyb3VwU3BlY2lmaWVyTmFtZShmdW5jdGlvbigpIHsKKyAgICByZXR1cm4g
bmV3IFJlZ0V4cCgiKD88XHV7MWQ3ZGF9dGhlPnRoZSkiKTsKK30pOworCitzaG91bGRUaHJvd0lu
dmFsaWRHcm91cFNwZWNpZmllck5hbWUoZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIG5ldyBSZWdF
eHAoIig/PFx1ZDgzNVx1ZGZkYXRoZT50aGUpIik7Cit9KTsKSW5kZXg6IEpTVGVzdHMvdGVzdDI2
Mi9leHBlY3RhdGlvbnMueWFtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3Rlc3QyNjIvZXhwZWN0
YXRpb25zLnlhbWwJKHJldmlzaW9uIDI1OTg4MCkKKysrIEpTVGVzdHMvdGVzdDI2Mi9leHBlY3Rh
dGlvbnMueWFtbAkod29ya2luZyBjb3B5KQpAQCAtMzI1Nyw2ICszMjU3LDIxIEBAIHRlc3QvbGFu
Z3VhZ2UvaWRlbnRpZmllcnMvc3RhcnQtdW5pY29kZS0KIHRlc3QvbGFuZ3VhZ2UvaWRlbnRpZmll
cnMvc3RhcnQtdW5pY29kZS0xMy4wLjAuanM6CiAgIGRlZmF1bHQ6ICJTeW50YXhFcnJvcjogSW52
YWxpZCBjaGFyYWN0ZXIgJ1xcdTA4YmUnIgogICBzdHJpY3QgbW9kZTogIlN5bnRheEVycm9yOiBJ
bnZhbGlkIGNoYXJhY3RlciAnXFx1MDhiZSciCit0ZXN0L2xhbmd1YWdlL2xpdGVyYWxzL3JlZ2V4
cC9uYW1lZC1ncm91cHMvaW52YWxpZC1ub24taWQtY29udGludWUtZ3JvdXBzcGVjaWZpZXIuanM6
CisgIGRlZmF1bHQ6ICdUZXN0MjYyOiBUaGlzIHN0YXRlbWVudCBzaG91bGQgbm90IGJlIGV2YWx1
YXRlZC4nCisgIHN0cmljdCBtb2RlOiAnVGVzdDI2MjogVGhpcyBzdGF0ZW1lbnQgc2hvdWxkIG5v
dCBiZSBldmFsdWF0ZWQuJwordGVzdC9sYW5ndWFnZS9saXRlcmFscy9yZWdleHAvbmFtZWQtZ3Jv
dXBzL2ludmFsaWQtbm9uLWlkLXN0YXJ0LWdyb3Vwc3BlY2lmaWVyLTMuanM6CisgIGRlZmF1bHQ6
ICdUZXN0MjYyOiBUaGlzIHN0YXRlbWVudCBzaG91bGQgbm90IGJlIGV2YWx1YXRlZC4nCisgIHN0
cmljdCBtb2RlOiAnVGVzdDI2MjogVGhpcyBzdGF0ZW1lbnQgc2hvdWxkIG5vdCBiZSBldmFsdWF0
ZWQuJwordGVzdC9sYW5ndWFnZS9saXRlcmFscy9yZWdleHAvbmFtZWQtZ3JvdXBzL2ludmFsaWQt
bm9uLWlkLXN0YXJ0LWdyb3Vwc3BlY2lmaWVyLTYuanM6CisgIGRlZmF1bHQ6ICdUZXN0MjYyOiBU
aGlzIHN0YXRlbWVudCBzaG91bGQgbm90IGJlIGV2YWx1YXRlZC4nCisgIHN0cmljdCBtb2RlOiAn
VGVzdDI2MjogVGhpcyBzdGF0ZW1lbnQgc2hvdWxkIG5vdCBiZSBldmFsdWF0ZWQuJwordGVzdC9s
YW5ndWFnZS9saXRlcmFscy9yZWdleHAvbmFtZWQtZ3JvdXBzL2ludmFsaWQtdS1lc2NhcGUtaW4t
Z3JvdXBzcGVjaWZpZXItMi5qczoKKyAgZGVmYXVsdDogJ1Rlc3QyNjI6IFRoaXMgc3RhdGVtZW50
IHNob3VsZCBub3QgYmUgZXZhbHVhdGVkLicKKyAgc3RyaWN0IG1vZGU6ICdUZXN0MjYyOiBUaGlz
IHN0YXRlbWVudCBzaG91bGQgbm90IGJlIGV2YWx1YXRlZC4nCit0ZXN0L2xhbmd1YWdlL2xpdGVy
YWxzL3JlZ2V4cC9uYW1lZC1ncm91cHMvaW52YWxpZC11LWVzY2FwZS1pbi1ncm91cHNwZWNpZmll
ci5qczoKKyAgZGVmYXVsdDogJ1Rlc3QyNjI6IFRoaXMgc3RhdGVtZW50IHNob3VsZCBub3QgYmUg
ZXZhbHVhdGVkLicKKyAgc3RyaWN0IG1vZGU6ICdUZXN0MjYyOiBUaGlzIHN0YXRlbWVudCBzaG91
bGQgbm90IGJlIGV2YWx1YXRlZC4nCiB0ZXN0L2xhbmd1YWdlL2xpdGVyYWxzL3JlZ2V4cC91LWFz
dHJhbC1jaGFyLWNsYXNzLWludmVydC5qczoKICAgZGVmYXVsdDogJ1Rlc3QyNjJFcnJvcjogRXhw
ZWN0ZWQgU2FtZVZhbHVlKMKr77+9wrssIMKrbnVsbMK7KSB0byBiZSB0cnVlJwogICBzdHJpY3Qg
bW9kZTogJ1Rlc3QyNjJFcnJvcjogRXhwZWN0ZWQgU2FtZVZhbHVlKMKr77+9wrssIMKrbnVsbMK7
KSB0byBiZSB0cnVlJwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNTk4
ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xICsxLDIzIEBACisyMDIwLTA0LTEwICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUu
Y29tPgorCisgICAgICAgIFtZQVJSXSBBbGxvdyBmb3IgVW5pY29kZSBuYW1lZCBjYXB0dXJlIGdy
b3VwIGlkZW50aWZpZXJzIGluIG5vbi1Vbmljb2RlIHJlZ3VsYXIgZXhwcmVzc2lvbnMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDMwOQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZSBZQVJSIHBh
dHRlcm4gcHJvY2Vzc2luZyB0byBhbGxvdyBmb3Igbm9uLUJNUCB1bmljb2RlIGlkZW50aWZpZXIg
Y2hhcmFjdGVycyBpbiBuYW1lZCBjYXB0dXJlIGdyb3Vwcy4KKworICAgICAgICBUaGlzIGNoYW5n
ZSB3YXMgZGlzY3Vzc2VkIGFuZCBhcHByb3ZlZCBhdCB0aGUgTWFyY2gvQXByaWwgMjAyMCBUQy0z
OSBtZWV0aW5nLgorICAgICAgICBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvZWNtYTI2Mi9w
dWxsLzE4NjkgZm9yIHRoZSBkaXNjdXNzaW9uIGFuZCBjaGFuZ2UuCisKKyAgICAgICAgVXBkYXRl
ZCB0cnlDb25zdW1lVW5pY29kZUVzY2FwZSgpIHRvIGFsbG93IGZvciB1bmljb2RlIGVzY2FwZXMg
aW4gbm9uLXVuaWNvZGUgZmxhZ2dlZCByZWdleCdzLgorICAgICAgICBBZGRlZCB0aGUgc2FtZSBz
dXBwb3J0IHRvIGNvbnN1bWVQb3NzaWJsZVN1cnJvZ2F0ZVBhaXIoKS4KKworICAgICAgICAqIHlh
cnIvWWFyclBhcnNlci5oOgorICAgICAgICAoSlNDOjpZYXJyOjpQYXJzZXI6OmNvbnN1bWVQb3Nz
aWJsZVN1cnJvZ2F0ZVBhaXIpOgorICAgICAgICAoSlNDOjpZYXJyOjpQYXJzZXI6OnBhcnNlQ2hh
cmFjdGVyQ2xhc3MpOgorICAgICAgICAoSlNDOjpZYXJyOjpQYXJzZXI6OnBhcnNlVG9rZW5zKToK
KyAgICAgICAgKEpTQzo6WWFycjo6UGFyc2VyOjp0cnlDb25zdW1lVW5pY29kZUVzY2FwZSk6Cisg
ICAgICAgIChKU0M6OllhcnI6OlBhcnNlcjo6dHJ5Q29uc3VtZUlkZW50aWZpZXJDaGFyYWN0ZXIp
OgorCiA9PSBSb2xsZWQgb3ZlciB0byBDaGFuZ2VMb2ctMjAyMC0wNC0xMCA9PQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyclBhcnNlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJQYXJzZXIuaAkocmV2aXNpb24gMjU5ODgwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyclBhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC00NCw2ICs0NCw4IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8Y2xhc3MgRnJpZW5kRGVsZWdh
dGU+CiAgICAgZnJpZW5kIEVycm9yQ29kZSBwYXJzZShGcmllbmREZWxlZ2F0ZSYsIGNvbnN0IFN0
cmluZyYgcGF0dGVybiwgYm9vbCBpc1VuaWNvZGUsIHVuc2lnbmVkIGJhY2tSZWZlcmVuY2VMaW1p
dCwgYm9vbCBpc05hbWVkRm9yd2FyZFJlZmVyZW5jZUFsbG93ZWQpOwogCisgICAgZW51bSBjbGFz
cyBVbmljb2RlRXNjYXBlQ29udGV4dCA6IHVpbnQ4X3QgeyBDaGFyYWN0ZXJFc2NhcGUsIElkZW50
aWZpZXJOYW1lIH07CisKICAgICAvKgogICAgICAqIENoYXJhY3RlckNsYXNzUGFyc2VyRGVsZWdh
dGU6CiAgICAgICoKQEAgLTUzMiwxMCArNTM0LDEzIEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KIAorICAgIHRlbXBsYXRlPFVuaWNvZGVFc2NhcGVDb250ZXh0IGNvbnRl
eHQ+CiAgICAgVUNoYXIzMiBjb25zdW1lUG9zc2libGVTdXJyb2dhdGVQYWlyKCkKICAgICB7Cisg
ICAgICAgIGJvb2wgdW5pY29kZVBhdHRlcm5PcklkZW50aWZpZXJOYW1lID0gbV9pc1VuaWNvZGUg
fHwgY29udGV4dCA9PSBVbmljb2RlRXNjYXBlQ29udGV4dDo6SWRlbnRpZmllck5hbWU7CisKICAg
ICAgICAgVUNoYXIzMiBjaCA9IGNvbnN1bWUoKTsKLSAgICAgICAgaWYgKFUxNl9JU19MRUFEKGNo
KSAmJiBtX2lzVW5pY29kZSAmJiAocGF0dGVyblJlbWFpbmluZygpID4gMCkpIHsKKyAgICAgICAg
aWYgKFUxNl9JU19MRUFEKGNoKSAmJiB1bmljb2RlUGF0dGVybk9ySWRlbnRpZmllck5hbWUgJiYg
IWF0RW5kT2ZQYXR0ZXJuKCkpIHsKICAgICAgICAgICAgIFBhcnNlU3RhdGUgc3RhdGUgPSBzYXZl
U3RhdGUoKTsKIAogICAgICAgICAgICAgVUNoYXIzMiBzdXJyb2dhdGUyID0gY29uc3VtZSgpOwpA
QCAtNTkxLDcgKzU5Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAg
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgY2hhcmFjdGVyQ2xhc3NDb25zdHJ1
Y3Rvci5hdG9tUGF0dGVybkNoYXJhY3Rlcihjb25zdW1lUG9zc2libGVTdXJyb2dhdGVQYWlyKCks
IHRydWUpOworICAgICAgICAgICAgICAgIGNoYXJhY3RlckNsYXNzQ29uc3RydWN0b3IuYXRvbVBh
dHRlcm5DaGFyYWN0ZXIoY29uc3VtZVBvc3NpYmxlU3Vycm9nYXRlUGFpcjxVbmljb2RlRXNjYXBl
Q29udGV4dDo6Q2hhcmFjdGVyRXNjYXBlPigpLCB0cnVlKTsKICAgICAgICAgICAgIH0KIAogICAg
ICAgICAgICAgaWYgKGhhc0Vycm9yKG1fZXJyb3JDb2RlKSkKQEAgLTgzMyw3ICs4MzgsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgICAgIG1fZGVsZWdhdGUuYXRvbVBhdHRlcm5DaGFyYWN0ZXIoY29uc3VtZVBvc3NpYmxlU3Vy
cm9nYXRlUGFpcigpKTsKKyAgICAgICAgICAgICAgICBtX2RlbGVnYXRlLmF0b21QYXR0ZXJuQ2hh
cmFjdGVyKGNvbnN1bWVQb3NzaWJsZVN1cnJvZ2F0ZVBhaXI8VW5pY29kZUVzY2FwZUNvbnRleHQ6
OkNoYXJhY3RlckVzY2FwZT4oKSk7CiAgICAgICAgICAgICAgICAgbGFzdFRva2VuV2FzQW5BdG9t
ID0gdHJ1ZTsKICAgICAgICAgICAgIH0KIApAQCAtOTc3LDIwICs5ODIsMjAgQEAgcHJpdmF0ZToK
ICAgICAgICAgcmV0dXJuIHBlZWsoKSAtICcwJzsKICAgICB9CiAKLSAgICBlbnVtIGNsYXNzIFVu
aWNvZGVFc2NhcGVDb250ZXh0IDogdWludDhfdCB7IENoYXJhY3RlckVzY2FwZSwgSWRlbnRpZmll
ck5hbWUgfTsKLQogICAgIHRlbXBsYXRlPFVuaWNvZGVFc2NhcGVDb250ZXh0IGNvbnRleHQ+CiAg
ICAgaW50IHRyeUNvbnN1bWVVbmljb2RlRXNjYXBlKCkKICAgICB7CiAgICAgICAgIEFTU0VSVCgh
aGFzRXJyb3IobV9lcnJvckNvZGUpKTsKIAorICAgICAgICBib29sIHVuaWNvZGVQYXR0ZXJuT3JJ
ZGVudGlmaWVyTmFtZSA9IG1faXNVbmljb2RlIHx8IGNvbnRleHQgPT0gVW5pY29kZUVzY2FwZUNv
bnRleHQ6OklkZW50aWZpZXJOYW1lOworCiAgICAgICAgIGlmICghdHJ5Q29uc3VtZSgndScpIHx8
IGF0RW5kT2ZQYXR0ZXJuKCkpIHsKLSAgICAgICAgICAgIGlmIChtX2lzVW5pY29kZSB8fCBjb250
ZXh0ID09IFVuaWNvZGVFc2NhcGVDb250ZXh0OjpJZGVudGlmaWVyTmFtZSkKKyAgICAgICAgICAg
IGlmICh1bmljb2RlUGF0dGVybk9ySWRlbnRpZmllck5hbWUpCiAgICAgICAgICAgICAgICAgbV9l
cnJvckNvZGUgPSBFcnJvckNvZGU6OkludmFsaWRVbmljb2RlRXNjYXBlOwogICAgICAgICAgICAg
cmV0dXJuIC0xOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG1faXNVbmljb2RlICYmIHRyeUNv
bnN1bWUoJ3snKSkgeworICAgICAgICBpZiAodW5pY29kZVBhdHRlcm5PcklkZW50aWZpZXJOYW1l
ICYmIHRyeUNvbnN1bWUoJ3snKSkgewogICAgICAgICAgICAgaW50IGNvZGVQb2ludCA9IDA7CiAg
ICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICAgaWYgKGF0RW5kT2ZQYXR0ZXJuKCkgfHwg
IWlzQVNDSUlIZXhEaWdpdChwZWVrKCkpKSB7CkBAIC0xMDE2LDEzICsxMDIxLDEzIEBAIHByaXZh
dGU6CiAKICAgICAgICAgaW50IGNvZGVVbml0ID0gdHJ5Q29uc3VtZUhleCg0KTsKICAgICAgICAg
aWYgKGNvZGVVbml0ID09IC0xKSB7Ci0gICAgICAgICAgICBpZiAobV9pc1VuaWNvZGUgfHwgY29u
dGV4dCA9PSBVbmljb2RlRXNjYXBlQ29udGV4dDo6SWRlbnRpZmllck5hbWUpCisgICAgICAgICAg
ICBpZiAodW5pY29kZVBhdHRlcm5PcklkZW50aWZpZXJOYW1lKQogICAgICAgICAgICAgICAgIG1f
ZXJyb3JDb2RlID0gRXJyb3JDb2RlOjpJbnZhbGlkVW5pY29kZUVzY2FwZTsKICAgICAgICAgICAg
IHJldHVybiAtMTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIElmIHdlIGhhdmUgdGhlIGZpcnN0
IG9mIGEgc3Vycm9nYXRlIHBhaXIsIGxvb2sgZm9yIHRoZSBzZWNvbmQuCi0gICAgICAgIGlmIChV
MTZfSVNfTEVBRChjb2RlVW5pdCkgJiYgbV9pc1VuaWNvZGUgJiYgcGF0dGVyblJlbWFpbmluZygp
ID49IDYgJiYgcGVlaygpID09ICdcXCcpIHsKKyAgICAgICAgaWYgKFUxNl9JU19MRUFEKGNvZGVV
bml0KSAmJiB1bmljb2RlUGF0dGVybk9ySWRlbnRpZmllck5hbWUgJiYgcGF0dGVyblJlbWFpbmlu
ZygpID49IDYgJiYgcGVlaygpID09ICdcXCcpIHsKICAgICAgICAgICAgIFBhcnNlU3RhdGUgc3Rh
dGUgPSBzYXZlU3RhdGUoKTsKICAgICAgICAgICAgIGNvbnN1bWUoKTsKIApAQCAtMTA0Myw3ICsx
MDQ4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKHRyeUNvbnN1bWUoJ1xcJykpCiAgICAgICAg
ICAgICByZXR1cm4gdHJ5Q29uc3VtZVVuaWNvZGVFc2NhcGU8VW5pY29kZUVzY2FwZUNvbnRleHQ6
OklkZW50aWZpZXJOYW1lPigpOwogCi0gICAgICAgIHJldHVybiBjb25zdW1lUG9zc2libGVTdXJy
b2dhdGVQYWlyKCk7CisgICAgICAgIHJldHVybiBjb25zdW1lUG9zc2libGVTdXJyb2dhdGVQYWly
PFVuaWNvZGVFc2NhcGVDb250ZXh0OjpJZGVudGlmaWVyTmFtZT4oKTsKICAgICB9CiAKICAgICBi
b29sIGlzSWRlbnRpZmllclN0YXJ0KGludCBjaCkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>396135</attachid>
            <date>2020-04-10 16:42:53 -0700</date>
            <delta_ts>2020-04-11 13:05:34 -0700</delta_ts>
            <desc>Patch with suggested naming changes and additional named back reference testing</desc>
            <filename>210309-3.patch</filename>
            <type>text/plain</type>
            <size>16935</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNTk5MTEpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE2IEBACisyMDIwLTA0LTEwICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBw
bGUuY29tPgorCisgICAgICAgIFtZQVJSXSBBbGxvdyBmb3IgVW5pY29kZSBuYW1lZCBjYXB0dXJl
IGdyb3VwIGlkZW50aWZpZXJzIGluIG5vbi1Vbmljb2RlIHJlZ3VsYXIgZXhwcmVzc2lvbnMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDMwOQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3RyZXNzL3Jl
Z2V4cC1uYW1lZC1jYXB0dXJlLWdyb3Vwcy5qczogTmV3IHRlc3QgYWRkZWQuCisgICAgICAgIChz
aG91bGRCZSk6CisgICAgICAgIChzaG91bGRUaHJvd0ludmFsaWRHcm91cFNwZWNpZmllck5hbWUp
OgorICAgICAgICAqIHRlc3QyNjIvZXhwZWN0YXRpb25zLnlhbWw6IFVwZGF0ZWQgZm9yIG5vdyBm
YWlsaW5nIHRlc3RzLgorICAgICAgICBXaGVuIHRlc3QyNjIgZ2V0cyB1cGRhdGVkIGZvciB0aGlz
IGNoYW5nZSwgdGhpcyBjYW4gYmUgcmV2ZXJ0ZWQuCisKIDIwMjAtMDQtMTAgIFJvc3MgS2lyc2xp
bmcgIDxyb3NzLmtpcnNsaW5nQHNvbnkuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQgZ2FyZGVu
aW5nIGZvciBKU1Rlc3RzL3N0cmVzcy4gUmVtb3ZlIHNraXBzIHRoYXQgd2VyZSBmb3Jnb3R0ZW4g
aW4gcjI1OTY1OC4KSW5kZXg6IEpTVGVzdHMvc3RyZXNzL3JlZ2V4cC1uYW1lZC1jYXB0dXJlLWdy
b3Vwcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9yZWdleHAtbmFtZWQtY2FwdHVy
ZS1ncm91cHMuanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9zdHJlc3MvcmVnZXhwLW5hbWVk
LWNhcHR1cmUtZ3JvdXBzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjAzIEBACisKK2Z1
bmN0aW9uIHNob3VsZEJlKGFjdHVhbCwgZXhwZWN0ZWQpIHsKKyAgICBpZiAoYWN0dWFsICE9PSBl
eHBlY3RlZCAmJiAhKGFjdHVhbCAhPT0gbnVsbCAmJiB0eXBlb2YoZXhwZWN0ZWQpID09PSAic3Ry
aW5nIiAmJiBhY3R1YWwudG9TdHJpbmcoKSA9PSBleHBlY3RlZCkpCisgICAgICAgIHRocm93IG5l
dyBFcnJvcignZXhwZWN0ZWQ6ICcgKyBleHBlY3RlZCArICcsIGJhZCB2YWx1ZTogJyArIGFjdHVh
bCk7Cit9CisKK2Z1bmN0aW9uIHNob3VsZFRocm93SW52YWxpZEdyb3VwU3BlY2lmaWVyTmFtZShm
dW5jKSB7CisgICAgdmFyIGVycm9yID0gbnVsbDsKKyAgICB0cnkgeworICAgICAgICBmdW5jKCk7
CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICBlcnJvciA9IGU7CisgICAgfQorICAgIGlmICgh
ZXJyb3IpCisgICAgICAgIHRocm93IG5ldyBFcnJvcignbm90IHRocm93bicpOworICAgIHNob3Vs
ZEJlKFN0cmluZyhlcnJvciksICJTeW50YXhFcnJvcjogSW52YWxpZCByZWd1bGFyIGV4cHJlc3Np
b246IGludmFsaWQgZ3JvdXAgc3BlY2lmaWVyIG5hbWUiKTsKK30KKworLyoKKyBWYWxpZCBJRF9T
dGFydCAvIElEX0NvbnRpbnVlIFVuaWNvZGUgY2hhcmFjdGVycworCisg8J2RkyAgXHV7MWQ0NTN9
ICBcdWQ4MzUgXHVkYzUzCisg8J2RnCAgXHV7MWQ0NWN9ICBcdWQ4MzUgXHVkYzVjCisg8J2RpSAg
XHV7aWQ0NjV9ICBcdWQ4MzUgXHVkYzY1CisKKyDwnZOTICBcdXsxZDRkM30gIFx1ZDgzNSBcdWRj
ZDMKKyDwnZO4ICBcdXsxZDRmOH0gIFx1ZDgzNSBcdWRjZjgKKyDwnZOwICBcdXsxZDRmMH0gIFx1
ZDgzNSBcdWRjZjAKKworIPCdk5EgIFx1ezFkNGQxfSAgXHVkODM1IFx1ZGNkMQorIPCdk7sgIFx1
ezFkNGZifSAgXHVkODM1IFx1ZGNmYgorIPCdk7ggIFx1ezFkNGY4fSAgXHVkODM1IFx1ZGNmOAor
IPCdlIAgIFx1ezFkNTAwfSAgXHVkODM1IFx1ZGQwMAorIPCdk7cgIFx1ezFkNGY3fSAgXHVkODM1
IFx1ZGNmNworCisg8J2WsCAgXHV7MWQ1YjB9ICBcdWQ4MzUgXHVkZGIwCisg8J2WoSAgXHV7MWQ1
YTF9ICBcdWQ4MzUgXHVkZGExCisg8J2WpSAgXHV7MWQ1YTV9ICBcdWQ4MzUgXHVkZGE1CisKKyAo
Zm94KSDni7ggIFx1ezcyZjh9ICBcdTcyZjgKKyAoZG9nKSDni5cgIFx1ezcyZDd9ICBcdTcyZDcg
IAorCisgVmFsaWQgSURfQ29udGludWUgVW5pY29kZSBjaGFyYWN0ZXJzIChDYW4ndCBiZSBmaXJz
dCBpZGVudGlmaWVyIGNoYXJhY3Rlci4pCisKKyDwnZ+aICBcdXsxZDdkYX0gIFx1ZDgzNSBcdWRm
ZGEKKworSW52YWxpZCBJRF9TdGFydCAvIElEX0NvbnRpbnVlCisKKyAoZm94IGZhY2UgZW1vamkp
IPCfpoogIFx1ezFmOThhfSAgXHVkODNlIFx1ZGQ4YQorIChkb2cgZW1vamkpICDwn5CVICBcdXsx
ZjQxNX0gIFx1ZDgzZCBcdWRjMTUKKyovCisKK3ZhciBzdHJpbmcgPSAiVGhlIHF1aWNrIGJyb3du
IGZveCBqdW1wZWQgb3ZlciB0aGUgbGF6eSBkb2cncyBiYWNrIjsKK3ZhciBzdHJpbmcyID0gIkl0
IGlzIGEgZG9nIGVhdCBkb2cgd29ybGQuIjsKKworbGV0IG1hdGNoID0gbnVsbDsKKworLy8gVHJ5
IHZhbGlkIG5hbWVzCisKKy8vIFVuaWNvZGUgUmVnRXhwJ3MKK3Nob3VsZEJlKHN0cmluZy5tYXRj
aCgvKD88YW5pbWFsPmZveHxkb2cpL3UpLmdyb3Vwcy5hbmltYWwsICJmb3giKTsKK3Nob3VsZEJl
KHN0cmluZy5tYXRjaCgvKD88dGhlMj50aGUpL3UpLmdyb3Vwcy50aGUyLCAidGhlIik7CisKK21h
dGNoID0gc3RyaW5nLm1hdGNoKC8oPzzwnZGT8J2RnPCdkaU+Zm94KS4qKD888J2Tk/Cdk7jwnZOw
PmRvZykvdSk7CitzaG91bGRCZShtYXRjaC5ncm91cHMu8J2Rk/CdkZzwnZGlLCAiZm94Iik7Citz
aG91bGRCZShtYXRjaC5ncm91cHMu8J2Tk/Cdk7jwnZOwLCAiZG9nIik7CitzaG91bGRCZShtYXRj
aFsxXSwgImZveCIpOworc2hvdWxkQmUobWF0Y2hbMl0sICJkb2ciKTsKKworbWF0Y2ggPSBzdHJp
bmcubWF0Y2goLyg/POeLuD5mb3gpLiooPzzni5c+ZG9nKS91KTsKK3Nob3VsZEJlKG1hdGNoLmdy
b3Vwcy7ni7gsICJmb3giKTsKK3Nob3VsZEJlKG1hdGNoLmdyb3Vwcy7ni5csICJkb2ciKTsKK3No
b3VsZEJlKG1hdGNoWzFdLCAiZm94Iik7CitzaG91bGRCZShtYXRjaFsyXSwgImRvZyIpOworCitz
aG91bGRCZShzdHJpbmcubWF0Y2goLyg/PPCdk5HwnZO78J2TuPCdlIDwnZO3PmJyb3duKS91KS5n
cm91cHMu8J2TkfCdk7vwnZO48J2UgPCdk7csICJicm93biIpOworc2hvdWxkQmUoc3RyaW5nLm1h
dGNoKC8oPzzwnZOR8J2Tu/Cdk7jwnZSA8J2Ttz5icm93bikvdSkuZ3JvdXBzLlx1ezFkNGQxfVx1
ezFkNGZifVx1ezFkNGY4fVx1ezFkNTAwfVx1ezFkNGY3fSwgImJyb3duIik7CitzaG91bGRCZShz
dHJpbmcubWF0Y2goLyg/PFx1ezFkNGQxfVx1ezFkNGZifVx1ezFkNGY4fVx1ezFkNTAwfVx1ezFk
NGY3fT5icm93bikvdSkuZ3JvdXBzLvCdk5HwnZO78J2TuPCdlIDwnZO3LCAiYnJvd24iKTsKK3No
b3VsZEJlKHN0cmluZy5tYXRjaCgvKD88XHV7MWQ0ZDF9XHV7MWQ0ZmJ9XHV7MWQ0Zjh9XHV7MWQ1
MDB9XHV7MWQ0Zjd9PmJyb3duKS91KS5ncm91cHMuXHV7MWQ0ZDF9XHV7MWQ0ZmJ9XHV7MWQ0Zjh9
XHV7MWQ1MDB9XHV7MWQ0Zjd9LCAiYnJvd24iKTsKK3Nob3VsZEJlKHN0cmluZy5tYXRjaCgvKD88
XHVkODM1XHVkY2QxXHVkODM1XHVkY2ZiXHVkODM1XHVkY2Y4XHVkODM1XHVkZDAwXHVkODM1XHVk
Y2Y3PmJyb3duKS91KS5ncm91cHMu8J2TkfCdk7vwnZO48J2UgPCdk7csICJicm93biIpOworc2hv
dWxkQmUoc3RyaW5nLm1hdGNoKC8oPzxcdWQ4MzVcdWRjZDFcdWQ4MzVcdWRjZmJcdWQ4MzVcdWRj
ZjhcdWQ4MzVcdWRkMDBcdWQ4MzVcdWRjZjc+YnJvd24pL3UpLmdyb3Vwcy5cdXsxZDRkMX1cdXsx
ZDRmYn1cdXsxZDRmOH1cdXsxZDUwMH1cdXsxZDRmN30sICJicm93biIpOworCitzaG91bGRCZShz
dHJpbmcubWF0Y2goLyg/PPCdlrDwnZah8J2WpT5xXHcqXFdcdypcV1x3KikvdSkuZ3JvdXBzLvCd
lrDwnZah8J2WpSwgInF1aWNrIGJyb3duIGZveCIpOworc2hvdWxkQmUoc3RyaW5nLm1hdGNoKC8o
PzzwnZaw8J2WoVx1ezFkNWE1fT5xXHcqXFdcdypcV1x3KikvdSkuZ3JvdXBzLvCdlrDwnZah8J2W
pSwgInF1aWNrIGJyb3duIGZveCIpOworc2hvdWxkQmUoc3RyaW5nLm1hdGNoKC8oPzzwnZawXHV7
MWQ1YTF98J2WpT5xXHcqXFdcdypcV1x3KikvdSkuZ3JvdXBzLvCdlrDwnZah8J2WpSwgInF1aWNr
IGJyb3duIGZveCIpOworc2hvdWxkQmUoc3RyaW5nLm1hdGNoKC8oPzzwnZawXHV7MWQ1YTF9XHV7
MWQ1YTV9PnFcdypcV1x3KlxXXHcqKS91KS5ncm91cHMu8J2WsPCdlqHwnZalLCAicXVpY2sgYnJv
d24gZm94Iik7CitzaG91bGRCZShzdHJpbmcubWF0Y2goLyg/PFx1ezFkNWIwffCdlqHwnZalPnFc
dypcV1x3KlxXXHcqKS91KS5ncm91cHMu8J2WsPCdlqHwnZalLCAicXVpY2sgYnJvd24gZm94Iik7
CitzaG91bGRCZShzdHJpbmcubWF0Y2goLyg/PFx1ezFkNWIwffCdlqFcdXsxZDVhNX0+cVx3KlxX
XHcqXFdcdyopL3UpLmdyb3Vwcy7wnZaw8J2WofCdlqUsICJxdWljayBicm93biBmb3giKTsKK3No
b3VsZEJlKHN0cmluZy5tYXRjaCgvKD88XHV7MWQ1YjB9XHV7MWQ1YTF98J2WpT5xXHcqXFdcdypc
V1x3KikvdSkuZ3JvdXBzLvCdlrDwnZah8J2WpSwgInF1aWNrIGJyb3duIGZveCIpOworc2hvdWxk
QmUoc3RyaW5nLm1hdGNoKC8oPzxcdXsxZDViMH1cdXsxZDVhMX1cdXsxZDVhNX0+cVx3KlxXXHcq
XFdcdyopL3UpLmdyb3Vwcy7wnZaw8J2WofCdlqUsICJxdWljayBicm93biBmb3giKTsKKworc2hv
dWxkQmUoc3RyaW5nLm1hdGNoKC8oPzx0aGXwnZ+aPnRoZSkvdSkuZ3JvdXBzLnRoZfCdn5osICJ0
aGUiKTsKK3Nob3VsZEJlKHN0cmluZy5tYXRjaCgvKD88dGhlXHV7MWQ3ZGF9PnRoZSkvdSkuZ3Jv
dXBzLnRoZfCdn5osICJ0aGUiKTsKK3Nob3VsZEJlKHN0cmluZy5tYXRjaCgvKD88dGhlXHVkODM1
XHVkZmRhPnRoZSkvdSkuZ3JvdXBzLnRoZfCdn5osICJ0aGUiKTsKKworbWF0Y2ggPSBzdHJpbmcy
Lm1hdGNoKC8oPzxkb2c+ZG9nKSguKj8pKFxrPGRvZz4pL3UpOworc2hvdWxkQmUobWF0Y2guZ3Jv
dXBzLmRvZywgImRvZyIpOworc2hvdWxkQmUobWF0Y2hbMV0sICJkb2ciKTsKK3Nob3VsZEJlKG1h
dGNoWzJdLCAiIGVhdCAiKTsKK3Nob3VsZEJlKG1hdGNoWzNdLCAiZG9nIik7CisKK21hdGNoID0g
c3RyaW5nMi5tYXRjaCgvKD888J2Tk/Cdk7jwnZOwPmRvZykoLio/KShcazzwnZOT8J2TuPCdk7A+
KS91KTsKK3Nob3VsZEJlKG1hdGNoLmdyb3Vwcy7wnZOT8J2TuPCdk7AsICJkb2ciKTsKK3Nob3Vs
ZEJlKG1hdGNoWzFdLCAiZG9nIik7CitzaG91bGRCZShtYXRjaFsyXSwgIiBlYXQgIik7CitzaG91
bGRCZShtYXRjaFszXSwgImRvZyIpOworCittYXRjaCA9IHN0cmluZzIubWF0Y2goLyg/POeLlz5k
b2cpKC4qPykoXGs854uXPikvdSk7CitzaG91bGRCZShtYXRjaC5ncm91cHMu54uXLCAiZG9nIik7
CitzaG91bGRCZShtYXRjaFsxXSwgImRvZyIpOworc2hvdWxkQmUobWF0Y2hbMl0sICIgZWF0ICIp
Oworc2hvdWxkQmUobWF0Y2hbM10sICJkb2ciKTsKKworLy8gTm9uLXVuaWNvZGUgUmVnRXhwJ3MK
K3Nob3VsZEJlKHN0cmluZy5tYXRjaCgvKD88YW5pbWFsPmZveHxkb2cpLykuZ3JvdXBzLmFuaW1h
bCwgImZveCIpOworCittYXRjaCA9IHN0cmluZy5tYXRjaCgvKD888J2Rk/CdkZzwnZGlPmZveCku
Kig/PPCdk5PwnZO48J2TsD5kb2cpLyk7CitzaG91bGRCZShtYXRjaC5ncm91cHMu8J2Rk/CdkZzw
nZGlLCAiZm94Iik7CitzaG91bGRCZShtYXRjaC5ncm91cHMu8J2Tk/Cdk7jwnZOwLCAiZG9nIik7
CitzaG91bGRCZShtYXRjaFsxXSwgImZveCIpOworc2hvdWxkQmUobWF0Y2hbMl0sICJkb2ciKTsK
KworbWF0Y2ggPSBzdHJpbmcubWF0Y2goLyg/POeLuD5mb3gpLiooPzzni5c+ZG9nKS8pOworc2hv
dWxkQmUobWF0Y2guZ3JvdXBzLueLuCwgImZveCIpOworc2hvdWxkQmUobWF0Y2guZ3JvdXBzLueL
lywgImRvZyIpOworc2hvdWxkQmUobWF0Y2hbMV0sICJmb3giKTsKK3Nob3VsZEJlKG1hdGNoWzJd
LCAiZG9nIik7CisKK3Nob3VsZEJlKHN0cmluZy5tYXRjaCgvKD888J2TkfCdk7vwnZO48J2UgPCd
k7c+YnJvd24pLykuZ3JvdXBzLvCdk5HwnZO78J2TuPCdlIDwnZO3LCAiYnJvd24iKTsKK3Nob3Vs
ZEJlKHN0cmluZy5tYXRjaCgvKD888J2TkfCdk7vwnZO48J2UgPCdk7c+YnJvd24pLykuZ3JvdXBz
Llx1ezFkNGQxfVx1ezFkNGZifVx1ezFkNGY4fVx1ezFkNTAwfVx1ezFkNGY3fSwgImJyb3duIik7
CitzaG91bGRCZShzdHJpbmcubWF0Y2goLyg/PFx1ezFkNGQxfVx1ezFkNGZifVx1ezFkNGY4fVx1
ezFkNTAwfVx1ezFkNGY3fT5icm93bikvKS5ncm91cHMu8J2TkfCdk7vwnZO48J2UgPCdk7csICJi
cm93biIpOworc2hvdWxkQmUoc3RyaW5nLm1hdGNoKC8oPzxcdXsxZDRkMX1cdXsxZDRmYn1cdXsx
ZDRmOH1cdXsxZDUwMH1cdXsxZDRmN30+YnJvd24pLykuZ3JvdXBzLlx1ezFkNGQxfVx1ezFkNGZi
fVx1ezFkNGY4fVx1ezFkNTAwfVx1ezFkNGY3fSwgImJyb3duIik7CitzaG91bGRCZShzdHJpbmcu
bWF0Y2goLyg/PFx1ZDgzNVx1ZGNkMVx1ZDgzNVx1ZGNmYlx1ZDgzNVx1ZGNmOFx1ZDgzNVx1ZGQw
MFx1ZDgzNVx1ZGNmNz5icm93bikvKS5ncm91cHMu8J2TkfCdk7vwnZO48J2UgPCdk7csICJicm93
biIpOworc2hvdWxkQmUoc3RyaW5nLm1hdGNoKC8oPzxcdWQ4MzVcdWRjZDFcdWQ4MzVcdWRjZmJc
dWQ4MzVcdWRjZjhcdWQ4MzVcdWRkMDBcdWQ4MzVcdWRjZjc+YnJvd24pLykuZ3JvdXBzLlx1ezFk
NGQxfVx1ezFkNGZifVx1ezFkNGY4fVx1ezFkNTAwfVx1ezFkNGY3fSwgImJyb3duIik7CisKK3No
b3VsZEJlKHN0cmluZy5tYXRjaCgvKD888J2WsPCdlqHwnZalPnFcdypcV1x3KlxXXHcqKS8pLmdy
b3Vwcy7wnZaw8J2WofCdlqUsICJxdWljayBicm93biBmb3giKTsKK3Nob3VsZEJlKHN0cmluZy5t
YXRjaCgvKD888J2WsPCdlqFcdXsxZDVhNX0+cVx3KlxXXHcqXFdcdyopLykuZ3JvdXBzLvCdlrDw
nZah8J2WpSwgInF1aWNrIGJyb3duIGZveCIpOworc2hvdWxkQmUoc3RyaW5nLm1hdGNoKC8oPzzw
nZawXHV7MWQ1YTF98J2WpT5xXHcqXFdcdypcV1x3KikvKS5ncm91cHMu8J2WsPCdlqHwnZalLCAi
cXVpY2sgYnJvd24gZm94Iik7CitzaG91bGRCZShzdHJpbmcubWF0Y2goLyg/PPCdlrBcdXsxZDVh
MX1cdXsxZDVhNX0+cVx3KlxXXHcqXFdcdyopLykuZ3JvdXBzLvCdlrDwnZah8J2WpSwgInF1aWNr
IGJyb3duIGZveCIpOworc2hvdWxkQmUoc3RyaW5nLm1hdGNoKC8oPzxcdXsxZDViMH3wnZah8J2W
pT5xXHcqXFdcdypcV1x3KikvKS5ncm91cHMu8J2WsPCdlqHwnZalLCAicXVpY2sgYnJvd24gZm94
Iik7CitzaG91bGRCZShzdHJpbmcubWF0Y2goLyg/PFx1ezFkNWIwffCdlqFcdXsxZDVhNX0+cVx3
KlxXXHcqXFdcdyopLykuZ3JvdXBzLvCdlrDwnZah8J2WpSwgInF1aWNrIGJyb3duIGZveCIpOwor
c2hvdWxkQmUoc3RyaW5nLm1hdGNoKC8oPzxcdXsxZDViMH1cdXsxZDVhMX3wnZalPnFcdypcV1x3
KlxXXHcqKS8pLmdyb3Vwcy7wnZaw8J2WofCdlqUsICJxdWljayBicm93biBmb3giKTsKK3Nob3Vs
ZEJlKHN0cmluZy5tYXRjaCgvKD88XHV7MWQ1YjB9XHV7MWQ1YTF9XHV7MWQ1YTV9PnFcdypcV1x3
KlxXXHcqKS8pLmdyb3Vwcy7wnZaw8J2WofCdlqUsICJxdWljayBicm93biBmb3giKTsKKworc2hv
dWxkQmUoc3RyaW5nLm1hdGNoKC8oPzx0aGXwnZ+aPnRoZSkvKS5ncm91cHMudGhl8J2fmiwgInRo
ZSIpOworc2hvdWxkQmUoc3RyaW5nLm1hdGNoKC8oPzx0aGVcdXsxZDdkYX0+dGhlKS8pLmdyb3Vw
cy50aGXwnZ+aLCAidGhlIik7CitzaG91bGRCZShzdHJpbmcubWF0Y2goLyg/PHRoZVx1ZDgzNVx1
ZGZkYT50aGUpLykuZ3JvdXBzLnRoZfCdn5osICJ0aGUiKTsKKworbWF0Y2ggPSBzdHJpbmcyLm1h
dGNoKC8oPzxkb2c+ZG9nKSguKj8pKFxrPGRvZz4pLyk7CitzaG91bGRCZShtYXRjaC5ncm91cHMu
ZG9nLCAiZG9nIik7CitzaG91bGRCZShtYXRjaFsxXSwgImRvZyIpOworc2hvdWxkQmUobWF0Y2hb
Ml0sICIgZWF0ICIpOworc2hvdWxkQmUobWF0Y2hbM10sICJkb2ciKTsKKworbWF0Y2ggPSBzdHJp
bmcyLm1hdGNoKC8oPzzwnZOT8J2TuPCdk7A+ZG9nKSguKj8pKFxrPPCdk5PwnZO48J2TsD4pLyk7
CitzaG91bGRCZShtYXRjaC5ncm91cHMu8J2Tk/Cdk7jwnZOwLCAiZG9nIik7CitzaG91bGRCZSht
YXRjaFsxXSwgImRvZyIpOworc2hvdWxkQmUobWF0Y2hbMl0sICIgZWF0ICIpOworc2hvdWxkQmUo
bWF0Y2hbM10sICJkb2ciKTsKKworbWF0Y2ggPSBzdHJpbmcyLm1hdGNoKC8oPzzni5c+ZG9nKSgu
Kj8pKFxrPOeLlz4pLyk7CitzaG91bGRCZShtYXRjaC5ncm91cHMu54uXLCAiZG9nIik7CitzaG91
bGRCZShtYXRjaFsxXSwgImRvZyIpOworc2hvdWxkQmUobWF0Y2hbMl0sICIgZWF0ICIpOworc2hv
dWxkQmUobWF0Y2hbM10sICJkb2ciKTsKKworLy8gSW52YWxpZCBpZGVudGlmaWVycworCitzaG91
bGRUaHJvd0ludmFsaWRHcm91cFNwZWNpZmllck5hbWUoZnVuY3Rpb24oKSB7CisgICAgcmV0dXJu
IG5ldyBSZWdFeHAoIig/PPCfpoo+Zm94KSIpOworfSk7CisKK3Nob3VsZFRocm93SW52YWxpZEdy
b3VwU3BlY2lmaWVyTmFtZShmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gbmV3IFJlZ0V4cCgiKD88
XHV7MWY5OGF9PmZveCkiKTsKK30pOworCitzaG91bGRUaHJvd0ludmFsaWRHcm91cFNwZWNpZmll
ck5hbWUoZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIG5ldyBSZWdFeHAoIig/PFx1ZDgzZVx1ZGQ4
YT5mb3gpIik7Cit9KTsKKworc2hvdWxkVGhyb3dJbnZhbGlkR3JvdXBTcGVjaWZpZXJOYW1lKGZ1
bmN0aW9uKCkgeworICAgIHJldHVybiBuZXcgUmVnRXhwKCIoPzzwn5CVPmRvZykiKTsKK30pOwor
CitzaG91bGRUaHJvd0ludmFsaWRHcm91cFNwZWNpZmllck5hbWUoZnVuY3Rpb24oKSB7CisgICAg
cmV0dXJuIG5ldyBSZWdFeHAoIig/PFx1ezFmNDE1fT5kb2cpIik7Cit9KTsKKworc2hvdWxkVGhy
b3dJbnZhbGlkR3JvdXBTcGVjaWZpZXJOYW1lKGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBuZXcg
UmVnRXhwKCIoPzxcdWQ4M2QgXHVkYzE1PmRvZykiKTsKK30pOworCitzaG91bGRUaHJvd0ludmFs
aWRHcm91cFNwZWNpZmllck5hbWUoZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIG5ldyBSZWdFeHAo
Iig/PPCdn5p0aGU+dGhlKSIpOworfSk7CisKK3Nob3VsZFRocm93SW52YWxpZEdyb3VwU3BlY2lm
aWVyTmFtZShmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gbmV3IFJlZ0V4cCgiKD88XHV7MWQ3ZGF9
dGhlPnRoZSkiKTsKK30pOworCitzaG91bGRUaHJvd0ludmFsaWRHcm91cFNwZWNpZmllck5hbWUo
ZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIG5ldyBSZWdFeHAoIig/PFx1ZDgzNVx1ZGZkYXRoZT50
aGUpIik7Cit9KTsKSW5kZXg6IEpTVGVzdHMvdGVzdDI2Mi9leHBlY3RhdGlvbnMueWFtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKU1Rlc3RzL3Rlc3QyNjIvZXhwZWN0YXRpb25zLnlhbWwJKHJldmlzaW9uIDI1
OTkxMSkKKysrIEpTVGVzdHMvdGVzdDI2Mi9leHBlY3RhdGlvbnMueWFtbAkod29ya2luZyBjb3B5
KQpAQCAtMzI1Nyw2ICszMjU3LDIxIEBAIHRlc3QvbGFuZ3VhZ2UvaWRlbnRpZmllcnMvc3RhcnQt
dW5pY29kZS0KIHRlc3QvbGFuZ3VhZ2UvaWRlbnRpZmllcnMvc3RhcnQtdW5pY29kZS0xMy4wLjAu
anM6CiAgIGRlZmF1bHQ6ICJTeW50YXhFcnJvcjogSW52YWxpZCBjaGFyYWN0ZXIgJ1xcdTA4YmUn
IgogICBzdHJpY3QgbW9kZTogIlN5bnRheEVycm9yOiBJbnZhbGlkIGNoYXJhY3RlciAnXFx1MDhi
ZSciCit0ZXN0L2xhbmd1YWdlL2xpdGVyYWxzL3JlZ2V4cC9uYW1lZC1ncm91cHMvaW52YWxpZC1u
b24taWQtY29udGludWUtZ3JvdXBzcGVjaWZpZXIuanM6CisgIGRlZmF1bHQ6ICdUZXN0MjYyOiBU
aGlzIHN0YXRlbWVudCBzaG91bGQgbm90IGJlIGV2YWx1YXRlZC4nCisgIHN0cmljdCBtb2RlOiAn
VGVzdDI2MjogVGhpcyBzdGF0ZW1lbnQgc2hvdWxkIG5vdCBiZSBldmFsdWF0ZWQuJwordGVzdC9s
YW5ndWFnZS9saXRlcmFscy9yZWdleHAvbmFtZWQtZ3JvdXBzL2ludmFsaWQtbm9uLWlkLXN0YXJ0
LWdyb3Vwc3BlY2lmaWVyLTMuanM6CisgIGRlZmF1bHQ6ICdUZXN0MjYyOiBUaGlzIHN0YXRlbWVu
dCBzaG91bGQgbm90IGJlIGV2YWx1YXRlZC4nCisgIHN0cmljdCBtb2RlOiAnVGVzdDI2MjogVGhp
cyBzdGF0ZW1lbnQgc2hvdWxkIG5vdCBiZSBldmFsdWF0ZWQuJwordGVzdC9sYW5ndWFnZS9saXRl
cmFscy9yZWdleHAvbmFtZWQtZ3JvdXBzL2ludmFsaWQtbm9uLWlkLXN0YXJ0LWdyb3Vwc3BlY2lm
aWVyLTYuanM6CisgIGRlZmF1bHQ6ICdUZXN0MjYyOiBUaGlzIHN0YXRlbWVudCBzaG91bGQgbm90
IGJlIGV2YWx1YXRlZC4nCisgIHN0cmljdCBtb2RlOiAnVGVzdDI2MjogVGhpcyBzdGF0ZW1lbnQg
c2hvdWxkIG5vdCBiZSBldmFsdWF0ZWQuJwordGVzdC9sYW5ndWFnZS9saXRlcmFscy9yZWdleHAv
bmFtZWQtZ3JvdXBzL2ludmFsaWQtdS1lc2NhcGUtaW4tZ3JvdXBzcGVjaWZpZXItMi5qczoKKyAg
ZGVmYXVsdDogJ1Rlc3QyNjI6IFRoaXMgc3RhdGVtZW50IHNob3VsZCBub3QgYmUgZXZhbHVhdGVk
LicKKyAgc3RyaWN0IG1vZGU6ICdUZXN0MjYyOiBUaGlzIHN0YXRlbWVudCBzaG91bGQgbm90IGJl
IGV2YWx1YXRlZC4nCit0ZXN0L2xhbmd1YWdlL2xpdGVyYWxzL3JlZ2V4cC9uYW1lZC1ncm91cHMv
aW52YWxpZC11LWVzY2FwZS1pbi1ncm91cHNwZWNpZmllci5qczoKKyAgZGVmYXVsdDogJ1Rlc3Qy
NjI6IFRoaXMgc3RhdGVtZW50IHNob3VsZCBub3QgYmUgZXZhbHVhdGVkLicKKyAgc3RyaWN0IG1v
ZGU6ICdUZXN0MjYyOiBUaGlzIHN0YXRlbWVudCBzaG91bGQgbm90IGJlIGV2YWx1YXRlZC4nCiB0
ZXN0L2xhbmd1YWdlL2xpdGVyYWxzL3JlZ2V4cC91LWFzdHJhbC1jaGFyLWNsYXNzLWludmVydC5q
czoKICAgZGVmYXVsdDogJ1Rlc3QyNjJFcnJvcjogRXhwZWN0ZWQgU2FtZVZhbHVlKMKr77+9wrss
IMKrbnVsbMK7KSB0byBiZSB0cnVlJwogICBzdHJpY3QgbW9kZTogJ1Rlc3QyNjJFcnJvcjogRXhw
ZWN0ZWQgU2FtZVZhbHVlKMKr77+9wrssIMKrbnVsbMK7KSB0byBiZSB0cnVlJwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNTk5MTEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjUgQEAKKzIwMjAtMDQt
MTAgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CisKKyAgICAgICAgW1lBUlJd
IEFsbG93IGZvciBVbmljb2RlIG5hbWVkIGNhcHR1cmUgZ3JvdXAgaWRlbnRpZmllcnMgaW4gbm9u
LVVuaWNvZGUgcmVndWxhciBleHByZXNzaW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwMzA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlIFlBUlIgcGF0dGVybiBwcm9jZXNzaW5nIHRvIGFs
bG93IGZvciBub24tQk1QIHVuaWNvZGUgaWRlbnRpZmllciBjaGFyYWN0ZXJzIGluIG5hbWVkIGNh
cHR1cmUgZ3JvdXBzLgorCisgICAgICAgIFRoaXMgY2hhbmdlIHdhcyBkaXNjdXNzZWQgYW5kIGFw
cHJvdmVkIGF0IHRoZSBNYXJjaC9BcHJpbCAyMDIwIFRDLTM5IG1lZXRpbmcuCisgICAgICAgIFNl
ZSBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9lY21hMjYyL3B1bGwvMTg2OSBmb3IgdGhlIGRpc2N1
c3Npb24gYW5kIGNoYW5nZS4KKworICAgICAgICBVcGRhdGVkIHRyeUNvbnN1bWVVbmljb2RlRXNj
YXBlKCkgdG8gYWxsb3cgZm9yIHVuaWNvZGUgZXNjYXBlcyBpbiBub24tdW5pY29kZSBmbGFnZ2Vk
IHJlZ2V4J3MuCisgICAgICAgIEFkZGVkIHRoZSBzYW1lIHN1cHBvcnQgdG8gY29uc3VtZVBvc3Np
YmxlU3Vycm9nYXRlUGFpcigpLgorCisgICAgICAgICogeWFyci9ZYXJyUGFyc2VyLmg6CisgICAg
ICAgIChKU0M6OllhcnI6OlBhcnNlcjo6Y29uc3VtZVBvc3NpYmxlU3Vycm9nYXRlUGFpcik6Cisg
ICAgICAgIChKU0M6OllhcnI6OlBhcnNlcjo6cGFyc2VDaGFyYWN0ZXJDbGFzcyk6CisgICAgICAg
IChKU0M6OllhcnI6OlBhcnNlcjo6cGFyc2VUb2tlbnMpOgorICAgICAgICAoSlNDOjpZYXJyOjpQ
YXJzZXI6OnRyeUNvbnN1bWVVbmljb2RlRXNjYXBlKToKKyAgICAgICAgKEpTQzo6WWFycjo6UGFy
c2VyOjp0cnlDb25zdW1lSWRlbnRpZmllckNoYXJhY3Rlcik6CisKIDIwMjAtMDQtMTAgIERldmlu
IFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgogCiAgICAgICAgIFRoZSByaHMgaW4gYFJlYWRN
b2RpZnlSZXNvbHZlTm9kZWAgc2hvdWxkIGJlIGV2YWx1YXRlZCBiZWZvcmUgdGhyb3dpbmcgYW4g
ZXhjZXB0aW9uIGlmIHRoZSBsaHMgaXMgcmVhZC1vbmx5CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUveWFyci9ZYXJyUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3lhcnIvWWFyclBhcnNlci5oCShyZXZpc2lvbiAyNTk5MTEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUveWFyci9ZYXJyUGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDgg
QEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTxjbGFzcyBGcmllbmREZWxlZ2F0ZT4KICAgICBmcmll
bmQgRXJyb3JDb2RlIHBhcnNlKEZyaWVuZERlbGVnYXRlJiwgY29uc3QgU3RyaW5nJiBwYXR0ZXJu
LCBib29sIGlzVW5pY29kZSwgdW5zaWduZWQgYmFja1JlZmVyZW5jZUxpbWl0LCBib29sIGlzTmFt
ZWRGb3J3YXJkUmVmZXJlbmNlQWxsb3dlZCk7CiAKKyAgICBlbnVtIGNsYXNzIFVuaWNvZGVQYXJz
ZUNvbnRleHQgOiB1aW50OF90IHsgUGF0dGVybkNvZGVQb2ludCwgR3JvdXBOYW1lIH07CisKICAg
ICAvKgogICAgICAqIENoYXJhY3RlckNsYXNzUGFyc2VyRGVsZWdhdGU6CiAgICAgICoKQEAgLTUw
NSw3ICs1MDcsNyBAQCBwcml2YXRlOgogCiAgICAgICAgIC8vIFVuaWNvZGVFc2NhcGUKICAgICAg
ICAgY2FzZSAndSc6IHsKLSAgICAgICAgICAgIGludCBjb2RlUG9pbnQgPSB0cnlDb25zdW1lVW5p
Y29kZUVzY2FwZTxVbmljb2RlRXNjYXBlQ29udGV4dDo6Q2hhcmFjdGVyRXNjYXBlPigpOworICAg
ICAgICAgICAgaW50IGNvZGVQb2ludCA9IHRyeUNvbnN1bWVVbmljb2RlRXNjYXBlPFVuaWNvZGVQ
YXJzZUNvbnRleHQ6OlBhdHRlcm5Db2RlUG9pbnQ+KCk7CiAgICAgICAgICAgICBpZiAoaGFzRXJy
b3IobV9lcnJvckNvZGUpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogCkBAIC01MzIsMTAgKzUz
NCwxMyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKKyAgICB0ZW1w
bGF0ZTxVbmljb2RlUGFyc2VDb250ZXh0IGNvbnRleHQ+CiAgICAgVUNoYXIzMiBjb25zdW1lUG9z
c2libGVTdXJyb2dhdGVQYWlyKCkKICAgICB7CisgICAgICAgIGJvb2wgdW5pY29kZVBhdHRlcm5P
ckdyb3VwTmFtZSA9IG1faXNVbmljb2RlIHx8IGNvbnRleHQgPT0gVW5pY29kZVBhcnNlQ29udGV4
dDo6R3JvdXBOYW1lOworCiAgICAgICAgIFVDaGFyMzIgY2ggPSBjb25zdW1lKCk7Ci0gICAgICAg
IGlmIChVMTZfSVNfTEVBRChjaCkgJiYgbV9pc1VuaWNvZGUgJiYgKHBhdHRlcm5SZW1haW5pbmco
KSA+IDApKSB7CisgICAgICAgIGlmIChVMTZfSVNfTEVBRChjaCkgJiYgdW5pY29kZVBhdHRlcm5P
ckdyb3VwTmFtZSAmJiAhYXRFbmRPZlBhdHRlcm4oKSkgewogICAgICAgICAgICAgUGFyc2VTdGF0
ZSBzdGF0ZSA9IHNhdmVTdGF0ZSgpOwogCiAgICAgICAgICAgICBVQ2hhcjMyIHN1cnJvZ2F0ZTIg
PSBjb25zdW1lKCk7CkBAIC01OTEsNyArNTk2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICBicmVhazsKIAogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBjaGFyYWN0
ZXJDbGFzc0NvbnN0cnVjdG9yLmF0b21QYXR0ZXJuQ2hhcmFjdGVyKGNvbnN1bWVQb3NzaWJsZVN1
cnJvZ2F0ZVBhaXIoKSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgY2hhcmFjdGVyQ2xhc3NDb25z
dHJ1Y3Rvci5hdG9tUGF0dGVybkNoYXJhY3Rlcihjb25zdW1lUG9zc2libGVTdXJyb2dhdGVQYWly
PFVuaWNvZGVQYXJzZUNvbnRleHQ6OlBhdHRlcm5Db2RlUG9pbnQ+KCksIHRydWUpOwogICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICBpZiAoaGFzRXJyb3IobV9lcnJvckNvZGUpKQpAQCAtODMz
LDcgKzgzOCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgbV9kZWxlZ2F0ZS5hdG9tUGF0dGVybkNoYXJhY3Rlcihjb25z
dW1lUG9zc2libGVTdXJyb2dhdGVQYWlyKCkpOworICAgICAgICAgICAgICAgIG1fZGVsZWdhdGUu
YXRvbVBhdHRlcm5DaGFyYWN0ZXIoY29uc3VtZVBvc3NpYmxlU3Vycm9nYXRlUGFpcjxVbmljb2Rl
UGFyc2VDb250ZXh0OjpQYXR0ZXJuQ29kZVBvaW50PigpKTsKICAgICAgICAgICAgICAgICBsYXN0
VG9rZW5XYXNBbkF0b20gPSB0cnVlOwogICAgICAgICAgICAgfQogCkBAIC05NzcsMjAgKzk4Miwy
MCBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gcGVlaygpIC0gJzAnOwogICAgIH0KIAotICAg
IGVudW0gY2xhc3MgVW5pY29kZUVzY2FwZUNvbnRleHQgOiB1aW50OF90IHsgQ2hhcmFjdGVyRXNj
YXBlLCBJZGVudGlmaWVyTmFtZSB9OwotCi0gICAgdGVtcGxhdGU8VW5pY29kZUVzY2FwZUNvbnRl
eHQgY29udGV4dD4KKyAgICB0ZW1wbGF0ZTxVbmljb2RlUGFyc2VDb250ZXh0IGNvbnRleHQ+CiAg
ICAgaW50IHRyeUNvbnN1bWVVbmljb2RlRXNjYXBlKCkKICAgICB7CiAgICAgICAgIEFTU0VSVCgh
aGFzRXJyb3IobV9lcnJvckNvZGUpKTsKIAorICAgICAgICBib29sIHVuaWNvZGVQYXR0ZXJuT3JH
cm91cE5hbWUgPSBtX2lzVW5pY29kZSB8fCBjb250ZXh0ID09IFVuaWNvZGVQYXJzZUNvbnRleHQ6
Okdyb3VwTmFtZTsKKwogICAgICAgICBpZiAoIXRyeUNvbnN1bWUoJ3UnKSB8fCBhdEVuZE9mUGF0
dGVybigpKSB7Ci0gICAgICAgICAgICBpZiAobV9pc1VuaWNvZGUgfHwgY29udGV4dCA9PSBVbmlj
b2RlRXNjYXBlQ29udGV4dDo6SWRlbnRpZmllck5hbWUpCisgICAgICAgICAgICBpZiAodW5pY29k
ZVBhdHRlcm5Pckdyb3VwTmFtZSkKICAgICAgICAgICAgICAgICBtX2Vycm9yQ29kZSA9IEVycm9y
Q29kZTo6SW52YWxpZFVuaWNvZGVFc2NhcGU7CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAg
ICAgIH0KIAotICAgICAgICBpZiAobV9pc1VuaWNvZGUgJiYgdHJ5Q29uc3VtZSgneycpKSB7Cisg
ICAgICAgIGlmICh1bmljb2RlUGF0dGVybk9yR3JvdXBOYW1lICYmIHRyeUNvbnN1bWUoJ3snKSkg
ewogICAgICAgICAgICAgaW50IGNvZGVQb2ludCA9IDA7CiAgICAgICAgICAgICBkbyB7CiAgICAg
ICAgICAgICAgICAgaWYgKGF0RW5kT2ZQYXR0ZXJuKCkgfHwgIWlzQVNDSUlIZXhEaWdpdChwZWVr
KCkpKSB7CkBAIC0xMDE2LDEzICsxMDIxLDEzIEBAIHByaXZhdGU6CiAKICAgICAgICAgaW50IGNv
ZGVVbml0ID0gdHJ5Q29uc3VtZUhleCg0KTsKICAgICAgICAgaWYgKGNvZGVVbml0ID09IC0xKSB7
Ci0gICAgICAgICAgICBpZiAobV9pc1VuaWNvZGUgfHwgY29udGV4dCA9PSBVbmljb2RlRXNjYXBl
Q29udGV4dDo6SWRlbnRpZmllck5hbWUpCisgICAgICAgICAgICBpZiAodW5pY29kZVBhdHRlcm5P
ckdyb3VwTmFtZSkKICAgICAgICAgICAgICAgICBtX2Vycm9yQ29kZSA9IEVycm9yQ29kZTo6SW52
YWxpZFVuaWNvZGVFc2NhcGU7CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KIAog
ICAgICAgICAvLyBJZiB3ZSBoYXZlIHRoZSBmaXJzdCBvZiBhIHN1cnJvZ2F0ZSBwYWlyLCBsb29r
IGZvciB0aGUgc2Vjb25kLgotICAgICAgICBpZiAoVTE2X0lTX0xFQUQoY29kZVVuaXQpICYmIG1f
aXNVbmljb2RlICYmIHBhdHRlcm5SZW1haW5pbmcoKSA+PSA2ICYmIHBlZWsoKSA9PSAnXFwnKSB7
CisgICAgICAgIGlmIChVMTZfSVNfTEVBRChjb2RlVW5pdCkgJiYgdW5pY29kZVBhdHRlcm5Pckdy
b3VwTmFtZSAmJiBwYXR0ZXJuUmVtYWluaW5nKCkgPj0gNiAmJiBwZWVrKCkgPT0gJ1xcJykgewog
ICAgICAgICAgICAgUGFyc2VTdGF0ZSBzdGF0ZSA9IHNhdmVTdGF0ZSgpOwogICAgICAgICAgICAg
Y29uc3VtZSgpOwogCkBAIC0xMDQxLDkgKzEwNDYsOSBAQCBwcml2YXRlOgogICAgIGludCB0cnlD
b25zdW1lSWRlbnRpZmllckNoYXJhY3RlcigpCiAgICAgewogICAgICAgICBpZiAodHJ5Q29uc3Vt
ZSgnXFwnKSkKLSAgICAgICAgICAgIHJldHVybiB0cnlDb25zdW1lVW5pY29kZUVzY2FwZTxVbmlj
b2RlRXNjYXBlQ29udGV4dDo6SWRlbnRpZmllck5hbWU+KCk7CisgICAgICAgICAgICByZXR1cm4g
dHJ5Q29uc3VtZVVuaWNvZGVFc2NhcGU8VW5pY29kZVBhcnNlQ29udGV4dDo6R3JvdXBOYW1lPigp
OwogCi0gICAgICAgIHJldHVybiBjb25zdW1lUG9zc2libGVTdXJyb2dhdGVQYWlyKCk7CisgICAg
ICAgIHJldHVybiBjb25zdW1lUG9zc2libGVTdXJyb2dhdGVQYWlyPFVuaWNvZGVQYXJzZUNvbnRl
eHQ6Okdyb3VwTmFtZT4oKTsKICAgICB9CiAKICAgICBib29sIGlzSWRlbnRpZmllclN0YXJ0KGlu
dCBjaCkK
</data>
<flag name="review"
          id="411583"
          type_id="1"
          status="+"
          setter="ross.kirsling"
    />
          </attachment>
      

    </bug>

</bugzilla>