<?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>64132</bug_id>
          
          <creation_ts>2011-07-07 16:26:06 -0700</creation_ts>
          <short_desc>Implement WebVTT Cue Text Parsing rules and DOM construction for WebVTT elements</short_desc>
          <delta_ts>2011-08-29 13:47:26 -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>Media</component>
          <version>528+ (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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>65884</dependson>
          <blocked>62882</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Anna Cavender">annacc</reporter>
          <assigned_to name="Anna Cavender">annacc</assigned_to>
          <cc>abarth</cc>
    
    <cc>cevans</cc>
    
    <cc>eoconnor</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>eric</cc>
    
    <cc>jeffrey+webkit</cc>
    
    <cc>silviapfeiffer1</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>433776</commentid>
    <comment_count>0</comment_count>
    <who name="Anna Cavender">annacc</who>
    <bug_when>2011-07-07 16:26:06 -0700</bug_when>
    <thetext>WebVTT Cue Text Parsing rules : http://www.whatwg.org/specs/web-apps/current-work/multipage/the-iframe-element.html#webvtt-cue-text-parsing-rules
WebVTT Cue Text DOM construction rules : http://www.whatwg.org/specs/web-apps/current-work/multipage/the-iframe-element.html#webvtt-cue-text-dom-construction-rules

Thanks to WebKit, we get some of these for free:
WebVTT Italics Objects (&lt;i&gt;&lt;/i&gt;)
WebVTT Bold Objects (&lt;b&gt;&lt;/b&gt;)
WebVTT Underline Objects (&lt;u&gt;&lt;/u&gt;)
WebVTT Ruby Objects (&lt;ruby&gt;&lt;/ruby&gt;)
WebVTT Ruby Text Objects (&lt;rt&gt;&lt;/rt&gt;)

But there are some we will need to implement:
WebVTT Class Objects (&lt;c&gt;&lt;/c&gt;)
WebVTT Voice Objects (&lt;v&gt;&lt;/v&gt;)
WebVTT Leaf Node Objects
WebVTT Text Objects
WebVTT Timestamp Objects (&lt;[time]&gt;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448337</commentid>
    <comment_count>1</comment_count>
      <attachid>103308</attachid>
    <who name="Anna Cavender">annacc</who>
    <bug_when>2011-08-08 16:01:01 -0700</bug_when>
    <thetext>Created attachment 103308
first pass at WebVTT cue text parser/tokenizer</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448694</commentid>
    <comment_count>2</comment_count>
      <attachid>103376</attachid>
    <who name="Anna Cavender">annacc</who>
    <bug_when>2011-08-09 11:25:53 -0700</bug_when>
    <thetext>Created attachment 103376
adding classes and title found during parsing to fragment tree</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448697</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-09 11:29:24 -0700</bug_when>
    <thetext>Attachment 103376 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/W...&quot; exit_code: 1

Source/WebCore/platform/track/WebVTTTokenizer.cpp:86:  Non-label code inside switch statements should be indented.  [whitespace/indent] [4]
Total errors found: 1 in 15 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448737</commentid>
    <comment_count>4</comment_count>
      <attachid>103376</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-08-09 12:41:49 -0700</bug_when>
    <thetext>Comment on attachment 103376
adding classes and title found during parsing to fragment tree

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

This looks great, but I&apos;d like to see another round.  There seems to be a bunch of AtomicString/String confusion.  AtomicStrings are strings where we&apos;ve hashed the contents of the string in a giant hash table to use the same storage as other instances of the same string.  They&apos;re useful when comparing strings for equality (because you can just compare their addresses) and when you want lots of common strings to share the same storage.  The trade-off is that they&apos;re slower to construct (because you need to hash their contents).

&gt; Source/WebCore/platform/track/WebVTTParser.cpp:232
&gt; +        switch (m_token.type()) {
&gt; +        case WebVTTTokenTypes::Character:

I&apos;d put this switch statement into its own function to keep the loop small and tight.  For HTML and XML, we put this function into it&apos;s own class, but that&apos;s probably not necessary here.

&gt; Source/WebCore/platform/track/WebVTTParser.cpp:234
&gt; +            AtomicString content(m_token.characters().data(), m_token.characters().size());

Why AtomicString?  String is probably more appropriate if you&apos;re going to just put this in a Text node.

&gt; Source/WebCore/platform/track/WebVTTParser.cpp:240
&gt; +        case WebVTTTokenTypes::StartTag:
&gt; +            {

These { braces aren&apos;t in the correct style.  These two lines should be merged and the trailing } should be aligned with the &quot;c&quot; in case.

&gt; Source/WebCore/platform/track/WebVTTParser.cpp:248
&gt; +            else if (AtomicString(m_token.name().data()) == &quot;c&quot;)

Why bother to malloc a string if it&apos;s just one character long?  You can just compare the length and the value of the character.  Also, what happened to the length?

&gt; Source/WebCore/platform/track/WebVTTParser.cpp:271
&gt; +             if (tokenTagName == iTag
&gt; +                || tokenTagName == bTag
&gt; +                || tokenTagName == uTag
&gt; +                || tokenTagName == rubyTag
&gt; +                || tokenTagName == rtTag
&gt; +                || AtomicString(m_token.name().data()) == &quot;c&quot;
&gt; +                || AtomicString(m_token.name().data()) == &quot;v&quot;)

Rather than copy/pasting this code, I would create a free inline function.

&gt; Source/WebCore/platform/track/WebVTTParser.cpp:276
&gt; +            unsigned position = 0;

You sure this shouldn&apos;t be size_t ?

&gt; Source/WebCore/platform/track/WebVTTParser.cpp:279
&gt; +                m_currentNode-&gt;parserAddChild(ProcessingInstruction::create(document, &quot;timestamp&quot;, AtomicString(m_token.characters().data(), m_token.characters().size())));

AtomicString should probably be String again.

&gt; Source/WebCore/platform/track/WebVTTTokenizer.cpp:82
&gt; +    UChar cc = m_inputStreamPreprocessor.nextInputCharacter();

I presume the spec says to do the same preprocessing that we do for HTML (e.g., \r\n collapsing, etc).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448766</commentid>
    <comment_count>5</comment_count>
      <attachid>103376</attachid>
    <who name="Vicki Pfau">jeffrey+webkit</who>
    <bug_when>2011-08-09 13:46:19 -0700</bug_when>
    <thetext>Comment on attachment 103376
adding classes and title found during parsing to fragment tree

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

&gt; Source/WebCore/platform/track/WebVTTToken.h:130
&gt; +    String m_annotation;
&gt; +    String m_classes;
&gt; +    String m_currentBuffer;

These probably shouldn&apos;t be Strings. When you append a single character to a string, as you do in this tokenizer, it resizes (and therefore memcpys) the string. Since it does this in a loop, the loop becomes very inefficient. The reason that the other tokenizers use a Vector of UChars is because Vectors are more optimized for small resizes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448878</commentid>
    <comment_count>6</comment_count>
      <attachid>103376</attachid>
    <who name="Anna Cavender">annacc</who>
    <bug_when>2011-08-09 16:26:58 -0700</bug_when>
    <thetext>Comment on attachment 103376
adding classes and title found during parsing to fragment tree

Thanks for the fast response, Adam!  And thank you for the explanation too.

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

&gt;&gt; Source/WebCore/platform/track/WebVTTParser.cpp:232
&gt;&gt; +        case WebVTTTokenTypes::Character:
&gt; 
&gt; I&apos;d put this switch statement into its own function to keep the loop small and tight.  For HTML and XML, we put this function into it&apos;s own class, but that&apos;s probably not necessary here.

Done.

&gt;&gt; Source/WebCore/platform/track/WebVTTParser.cpp:234
&gt;&gt; +            AtomicString content(m_token.characters().data(), m_token.characters().size());
&gt; 
&gt; Why AtomicString?  String is probably more appropriate if you&apos;re going to just put this in a Text node.

Done.

&gt;&gt; Source/WebCore/platform/track/WebVTTParser.cpp:240
&gt;&gt; +            {
&gt; 
&gt; These { braces aren&apos;t in the correct style.  These two lines should be merged and the trailing } should be aligned with the &quot;c&quot; in case.

Done.

&gt;&gt; Source/WebCore/platform/track/WebVTTParser.cpp:248
&gt;&gt; +            else if (AtomicString(m_token.name().data()) == &quot;c&quot;)
&gt; 
&gt; Why bother to malloc a string if it&apos;s just one character long?  You can just compare the length and the value of the character.  Also, what happened to the length?

Done.  Good point.

&gt;&gt; Source/WebCore/platform/track/WebVTTParser.cpp:271
&gt;&gt; +                || AtomicString(m_token.name().data()) == &quot;v&quot;)
&gt; 
&gt; Rather than copy/pasting this code, I would create a free inline function.

Done.  Nice.

&gt;&gt; Source/WebCore/platform/track/WebVTTParser.cpp:276
&gt;&gt; +            unsigned position = 0;
&gt; 
&gt; You sure this shouldn&apos;t be size_t ?

collectTimeStamp takes an unsigned, but I wrote that function too, so I&apos;m open to suggestions :).

&gt;&gt; Source/WebCore/platform/track/WebVTTParser.cpp:279
&gt;&gt; +                m_currentNode-&gt;parserAddChild(ProcessingInstruction::create(document, &quot;timestamp&quot;, AtomicString(m_token.characters().data(), m_token.characters().size())));
&gt; 
&gt; AtomicString should probably be String again.

Done.

&gt;&gt; Source/WebCore/platform/track/WebVTTToken.h:130
&gt;&gt; +    String m_currentBuffer;
&gt; 
&gt; These probably shouldn&apos;t be Strings. When you append a single character to a string, as you do in this tokenizer, it resizes (and therefore memcpys) the string. Since it does this in a loop, the loop becomes very inefficient. The reason that the other tokenizers use a Vector of UChars is because Vectors are more optimized for small resizes.

Done.  Changed to UChar Vectors.  Thanks for the explanation.

&gt;&gt; Source/WebCore/platform/track/WebVTTTokenizer.cpp:82
&gt;&gt; +    UChar cc = m_inputStreamPreprocessor.nextInputCharacter();
&gt; 
&gt; I presume the spec says to do the same preprocessing that we do for HTML (e.g., \r\n collapsing, etc).

Hmm.  It doesn&apos;t say that specifically, but using the existing preprocessor made sense to me.

&gt;&gt; Source/WebCore/platform/track/WebVTTTokenizer.cpp:86
&gt;&gt; +    WEBVTT_BEGIN_STATE(DataState) {
&gt; 
&gt; Non-label code inside switch statements should be indented.  [whitespace/indent] [4]

Funny, these are labels, but the style checker can&apos;t tell that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448879</commentid>
    <comment_count>7</comment_count>
      <attachid>103415</attachid>
    <who name="Anna Cavender">annacc</who>
    <bug_when>2011-08-09 16:27:37 -0700</bug_when>
    <thetext>Created attachment 103415
addressing Adam&apos;s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>449539</commentid>
    <comment_count>8</comment_count>
      <attachid>103415</attachid>
    <who name="Vicki Pfau">jeffrey+webkit</who>
    <bug_when>2011-08-10 18:11:22 -0700</bug_when>
    <thetext>Comment on attachment 103415
addressing Adam&apos;s comments

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

&gt; Source/WebCore/platform/track/WebVTTToken.h:97
&gt; +    Vector&lt;UChar, 32&gt; classes()

This should be const Vector&lt;UChar, 32&gt;&amp; classes() const, or const DataVector&amp; classes() const (see below) to avoid copying

&gt; Source/WebCore/platform/track/WebVTTToken.h:115
&gt; +    Vector&lt;UChar, 32&gt; annotation()

This should be const Vector&lt;UChar, 32&gt;&amp; annotation() const, or const DataVector&amp; annotation() const (see below) to avoid copying

&gt; Source/WebCore/platform/track/WebVTTToken.h:129
&gt; +    Vector&lt;UChar, 32&gt; m_annotation;
&gt; +    Vector&lt;UChar, 32&gt; m_classes;

If these are about the same length as a tag name or an attribute name, this is what the MarkupTokenBase::DataVector type (which is just a typedef&apos;d Vector) is for, so it might make sense to use those here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456279</commentid>
    <comment_count>9</comment_count>
      <attachid>103415</attachid>
    <who name="Anna Cavender">annacc</who>
    <bug_when>2011-08-24 11:59:51 -0700</bug_when>
    <thetext>Comment on attachment 103415
addressing Adam&apos;s comments

Thanks Jeffrey.

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

&gt;&gt; Source/WebCore/platform/track/WebVTTToken.h:97
&gt;&gt; +    Vector&lt;UChar, 32&gt; classes()
&gt; 
&gt; This should be const Vector&lt;UChar, 32&gt;&amp; classes() const, or const DataVector&amp; classes() const (see below) to avoid copying

Done.

&gt;&gt; Source/WebCore/platform/track/WebVTTToken.h:115
&gt;&gt; +    Vector&lt;UChar, 32&gt; annotation()
&gt; 
&gt; This should be const Vector&lt;UChar, 32&gt;&amp; annotation() const, or const DataVector&amp; annotation() const (see below) to avoid copying

Done.

&gt;&gt; Source/WebCore/platform/track/WebVTTToken.h:129
&gt;&gt; +    Vector&lt;UChar, 32&gt; m_classes;
&gt; 
&gt; If these are about the same length as a tag name or an attribute name, this is what the MarkupTokenBase::DataVector type (which is just a typedef&apos;d Vector) is for, so it might make sense to use those here.

Good idea, thanks.  Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456282</commentid>
    <comment_count>10</comment_count>
      <attachid>105034</attachid>
    <who name="Anna Cavender">annacc</who>
    <bug_when>2011-08-24 12:00:10 -0700</bug_when>
    <thetext>Created attachment 105034
using DataVector typedef and fixing a few bugs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456285</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-24 12:02:59 -0700</bug_when>
    <thetext>Attachment 105034 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/W...&quot; exit_code: 1

Source/WebCore/platform/track/WebVTTTokenizer.cpp:86:  Non-label code inside switch statements should be indented.  [whitespace/indent] [4]
Total errors found: 1 in 15 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458393</commentid>
    <comment_count>12</comment_count>
      <attachid>105513</attachid>
    <who name="Anna Cavender">annacc</who>
    <bug_when>2011-08-29 13:04:09 -0700</bug_when>
    <thetext>Created attachment 105513
updating to ToT</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458397</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-29 13:07:27 -0700</bug_when>
    <thetext>Attachment 105513 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/W...&quot; exit_code: 1

Source/WebCore/platform/track/WebVTTTokenizer.cpp:86:  Non-label code inside switch statements should be indented.  [whitespace/indent] [4]
Total errors found: 1 in 15 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458402</commentid>
    <comment_count>14</comment_count>
      <attachid>105513</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-08-29 13:14:43 -0700</bug_when>
    <thetext>Comment on attachment 105513
updating to ToT

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

&gt; Source/WebCore/platform/track/WebVTTParser.cpp:355
&gt; +    default:
&gt; +        break;

Generally we skip the default case in WebKit so the compiler tells us if we forgot any cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458430</commentid>
    <comment_count>15</comment_count>
      <attachid>105513</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-29 13:47:20 -0700</bug_when>
    <thetext>Comment on attachment 105513
updating to ToT

Clearing flags on attachment: 105513

Committed r94011: &lt;http://trac.webkit.org/changeset/94011&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458431</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-29 13:47:26 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103308</attachid>
            <date>2011-08-08 16:01:01 -0700</date>
            <delta_ts>2011-08-09 11:25:49 -0700</delta_ts>
            <desc>first pass at WebVTT cue text parser/tokenizer</desc>
            <filename>bug-64132-20110808160100.patch</filename>
            <type>text/plain</type>
            <size>34560</size>
            <attacher name="Anna Cavender">annacc</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTI1NDQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggNGI4M2Fk
YTMwZTY4MzA0ZjY1YjViOWIzOTg2ODJkMDIyYzUwMGE4MC4uYmJkMTAxMWRlZjlmODk1ODQyZjM3
MzNkNTFhODgxNDE5YzQxYmUwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTE5OTksNiArMTk5
OSw3IEBAIElGIChFTkFCTEVfVklERU9fVFJBQ0spCiAgICAgICAgIGxvYWRlci9DdWVMb2FkZXIu
Y3BwCiAgICAgICAgIHBsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlci5jcHAKICAgICAgICAgcGxhdGZv
cm0vdHJhY2svV2ViVlRUUGFyc2VyLmNwcAorICAgICAgICBwbGF0Zm9ybS90cmFjay9XZWJWVFRU
b2tlbml6ZXIuY3BwCiAgICAgKQogRU5ESUYoKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzgxMTNmYTJiNTNm
NmQ3Y2M5Mzc4MjdlNmE3ODkxYTcwMWMxYzZlYy4uZWJiNDZmYzdjYzA2YTNjNzY5MmI5MzZhOTc5
YjAyNjE4NmY2Y2EwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDExLTA4LTA4ICBB
bm5hIENhdmVuZGVyICA8YW5uYWNjQGNocm9taXVtLm9yZz4KKworICAgICAgICBJbXBsZW1lbnQg
V2ViVlRUIEN1ZSBUZXh0IFBhcnNpbmcgcnVsZXMgYW5kIERPTSBjb25zdHJ1Y3Rpb24KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY0MTMyCisgICAgICAg
IAorICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOZXcgdGVz
dHMgd2lsbCBsaXZlIGluIG1lZGlhL3RyYWNrIGFuZCBhcmUgY29taW5nIHNvb24gKHNlZSBidWcg
NjU4ODQpLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZp
bGUubGlzdC5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5w
cm86CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIGh0bWwvVGV4dFRyYWNrQ3VlLmNwcDoKKyAgICAgICAgKiBodG1sL1RleHRUcmFja0N1ZS5o
OgorICAgICAgICAqIHBsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlci5jcHA6CisgICAgICAgICogcGxh
dGZvcm0vdHJhY2svQ3VlUGFyc2VyLmg6CisgICAgICAgICogcGxhdGZvcm0vdHJhY2svV2ViVlRU
UGFyc2VyLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS90cmFjay9XZWJWVFRQYXJzZXIuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS90cmFjay9XZWJWVFRUb2tlbi5oOiBBZGRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS90cmFjay9XZWJWVFRUb2tlbml6ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS90cmFjay9XZWJWVFRUb2tlbml6ZXIuaDogQWRkZWQuCisKIDIwMTEtMDgtMDUgIE5vZWwg
R29yZG9uICA8bm9lbC5nb3Jkb25AZ21haWwuY29tPgogCiAgICAgICAgIFtDaHJvbWl1bV0gUmVt
b3ZlIEhhbHRhYmxlUGx1Z2luIHJlZmVyZW5jZXMgZnJvbSBneXAgcHJvamVjdCBmaWxlcwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJD
b3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggODg5YTAxZmVkZWE0YWVhZGM0NDc0YjEyOGZi
ZDNjNTJlMDNmZmFmNi4uNmFmYmMwZDkyYWY2Y2RlNTM0NDU4Y2IyODgwMGQ3MmMxY2Y4ZDhhMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC0yODYyLDYgKzI4NjIsOSBAQCB3ZWJj
b3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL0N1ZVBhcnNl
clByaXZhdGUuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svV2ViVlRUUGFyc2Vy
LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svV2ViVlRUUGFyc2VyLmggXAor
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL1dlYlZUVFRva2VuLmggXAorCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RyYWNrL1dlYlZUVFRva2VuaXplci5oIFwKKwlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90cmFjay9XZWJWVFRUb2tlbml6ZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9UcmVlU2hhcmVkLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTFN0cmlu
Zy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VVUlELmNwcCBcCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
aW5kZXggMzlhOTY1NDNiODIyMmMxNzgxODJkM2IyM2ZjZWNjNTNlZjAxMzJjZS4uZTEzNzYwOGRj
NTQ1NTA0Njg0OGM3ZWE1ZGIyNGNiMGZmNDZjOGJkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtNDQz
MSw2ICs0NDMxLDkgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS90cmFjay9DdWVQYXJzZXJQcml2
YXRlLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL3RyYWNrL1dlYlZUVFBhcnNlci5jcHAnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL3RyYWNrL1dlYlZUVFBhcnNlci5oJywKKyAgICAgICAgICAg
ICdwbGF0Zm9ybS90cmFjay9XZWJWVFRUb2tlbi5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS90
cmFjay9XZWJWVFRUb2tlbml6ZXIuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS90cmFjay9X
ZWJWVFRUb2tlbml6ZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vd2luL0JTdHJpbmcuY3Bw
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS93aW4vQlN0cmluZy5oJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS93aW4vQml0bWFwSW5mby5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5wcm8gYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCAyZjE1MzkyYTMw
MGY0YzBlOGU3ZThlODJlYmM5MTQxN2Y0ZmE2NmQ5Li44NzMwMzc5YzQzMWVhZTQ0N2YyN2E1ZjZk
MDEwNDMzZjk5YjRhZGU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtMjExOSw3ICsyMTE5LDkgQEAgSEVB
REVSUyArPSBcCiAgICAgcGxhdGZvcm0vVGltZXIuaCBcCiAgICAgcGxhdGZvcm0vdHJhY2svQ3Vl
UGFyc2VyLmggXAogICAgIHBsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlclByaXZhdGUuaCBcCisgICAg
cGxhdGZvcm0vdHJhY2svV2ViVlRUVG9rZW4uaCBcCiAgICAgcGxhdGZvcm0vdHJhY2svV2ViVlRU
UGFyc2VyLmggXAorICAgIHBsYXRmb3JtL3RyYWNrL1dlYlZUVFRva2VuaXplci5oIFwKICAgICBw
bGF0Zm9ybS9XaWRnZXQuaCBcCiAgICAgcGxhdGZvcm0vUGxhdGZvcm1TdHJhdGVnaWVzLmggXAog
ICAgIHBsYXRmb3JtL0xvY2FsaXplZFN0cmluZ3MuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggODdmYjcyY2FlZmYxMmM1NTc4
OWNjNmJmNzYwZjQzMDUyM2NjNDQ4Yi4uZDY4YjIxMzk2YTI3MWIyMTY5MjljMGU0YTU4MjJkMjU5
MWZjYjRkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagpAQCAtNDA4MSw2ICs0MDgxLDggQEAKIAkJQUJEREZFNzkwQTVDNkU3MDAwQTNF
MTFEIC8qIFJlbmRlck1lbnVMaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEFCRERGRTczMEE1QzZFNkYwMEEzRTExRCAvKiBSZW5kZXJNZW51TGlz
dC5jcHAgKi87IH07CiAJCUFCRERGRTdBMEE1QzZFNzAwMEEzRTExRCAvKiBSZW5kZXJNZW51TGlz
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUJEREZF
NzQwQTVDNkU3MDAwQTNFMTFEIC8qIFJlbmRlck1lbnVMaXN0LmggKi87IH07CiAJCUFEREYxQUQ3
MTI1N0NEOUEwMDAzQTc1OSAvKiBSZW5kZXJTVkdQYXRoLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRERGMUFENTEyNTdDRDlBMDAwM0E3NTkgLyogUmVu
ZGVyU1ZHUGF0aC5oICovOyB9OworCQlCMTBCQTIwNzEzRjA1QzZFMDBCQzFDMjYgLyogV2ViVlRU
VG9rZW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIx
MEJBMjA2MTNGMDVDNkUwMEJDMUMyNiAvKiBXZWJWVFRUb2tlbi5oICovOyB9OworCQlCMTBCQTIw
QjEzRjA1QzhDMDBCQzFDMjYgLyogV2ViVlRUVG9rZW5pemVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMTBCQTIwQTEzRjA1QzhDMDBCQzFDMjYgLyog
V2ViVlRUVG9rZW5pemVyLmggKi87IH07CiAJCUIxNDM1M0Q1MTM4RUE4RUQwMEQ1MzI3NiAvKiBN
ZWRpYVN0cmVhbUxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQjE0MzUzRDExMzhFQThFRDAwRDUzMjc2IC8qIE1lZGlhU3RyZWFtTGlzdC5jcHAg
Ki87IH07CiAJCUIxNDM1M0Q2MTM4RUE4RUQwMEQ1MzI3NiAvKiBNZWRpYVN0cmVhbUxpc3QuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIxNDM1M0QyMTM4
RUE4RUQwMEQ1MzI3NiAvKiBNZWRpYVN0cmVhbUxpc3QuaCAqLzsgfTsKIAkJQjE0MzUzRjgxMzhF
QTk1QjAwRDUzMjc2IC8qIEpTTWVkaWFTdHJlYW1MaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIxNDM1M0Y2MTM4RUE5NUIwMEQ1MzI3NiAvKiBK
U01lZGlhU3RyZWFtTGlzdC5jcHAgKi87IH07CkBAIC0xMDU5Niw2ICsxMDU5OCw4IEBACiAJCUFC
RERGRTc0MEE1QzZFNzAwMEEzRTExRCAvKiBSZW5kZXJNZW51TGlzdC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyTWVudUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQURERjFBRDQxMjU3Q0Q5QTAwMDNBNzU5IC8qIFJlbmRlclNWR1BhdGguY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU1ZHUGF0aC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFEREYxQUQ1MTI1N0NEOUEwMDAzQTc1OSAv
KiBSZW5kZXJTVkdQYXRoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRl
clNWR1BhdGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjEwQkEyMDYxM0YwNUM2
RTAwQkMxQzI2IC8qIFdlYlZUVFRva2VuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IFdlYlZUVFRva2VuLmg7IHBhdGggPSBwbGF0Zm9ybS90cmFjay9XZWJWVFRUb2tlbi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCMTBCQTIwQTEzRjA1QzhDMDBCQzFDMjYgLyog
V2ViVlRUVG9rZW5pemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYlZU
VFRva2VuaXplci5oOyBwYXRoID0gcGxhdGZvcm0vdHJhY2svV2ViVlRUVG9rZW5pemVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIxNDM1M0QxMTM4RUE4RUQwMEQ1MzI3NiAvKiBN
ZWRpYVN0cmVhbUxpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
TWVkaWFTdHJlYW1MaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjE0MzUz
RDIxMzhFQThFRDAwRDUzMjc2IC8qIE1lZGlhU3RyZWFtTGlzdC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBNZWRpYVN0cmVhbUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQjE0MzUzRDMxMzhFQThFRDAwRDUzMjc2IC8qIE1lZGlhU3RyZWFtTGlzdC5pZGwg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTWVkaWFTdHJlYW1MaXN0LmlkbDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTEyOTIwLDYgKzEyOTI0LDggQEAKIAkJCWlzYSA9IFBCWEdyb3Vw
OwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJNjVDOTdBRjIwOEVBOTA4ODAwQUNEMjczIC8qIGNvbmZp
Zy5oICovLAorCQkJCUIxMEJBMjBBMTNGMDVDOEMwMEJDMUMyNiAvKiBXZWJWVFRUb2tlbml6ZXIu
aCAqLywKKwkJCQlCMTBCQTIwNjEzRjA1QzZFMDBCQzFDMjYgLyogV2ViVlRUVG9rZW4uaCAqLywK
IAkJCQlFREVDOTgwMjBBRUQ3RTE3MDA1OTEzN0YgLyogV2ViQ29yZVByZWZpeC5oICovLAogCQkJ
CTkzMDcwNjEzMDlFMENBODIwMEIxN0ZFNCAvKiBEZXJpdmVkU291cmNlcy5tYWtlICovLAogCQkJ
CTkzRjE5QjE5MDgyNDVFNTkwMDFFOUFCQyAvKiBJbmZvLnBsaXN0ICovLApAQCAtMjMzNDcsNiAr
MjMzNTMsOCBAQAogCQkJCUIxQUQ0RTdDMTNBMTJBNzIwMDg0NkIyNyAvKiBDdWVQYXJzZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCUIxQUQ0RTdEMTNBMTJBNzIwMDg0NkIyNyAvKiBDdWVQYXJzZXJQ
cml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1RDIxQTgwMzEzRUNFNURGMDBCQjcwNjQgLyog
V2ViVlRUUGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQlCMTBCQTIwNzEzRjA1QzZFMDBCQzFD
MjYgLyogV2ViVlRUVG9rZW4uaCBpbiBIZWFkZXJzICovLAorCQkJCUIxMEJBMjBCMTNGMDVDOEMw
MEJDMUMyNiAvKiBXZWJWVFRUb2tlbml6ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1
bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9UZXh0VHJhY2tDdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9UZXh0VHJhY2tDdWUuY3BwCmluZGV4IGQ5NDVjMDczMzM5MTJjZDdlNzgxZGU4NzVkNGEzNzMz
NmJhNTAxZGMuLjk3N2RhMzVhOTFhMzliMzdiODVlNTMyNDkwZjY2YTIxNzdmNDQyNjcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dFRyYWNrQ3VlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL1RleHRUcmFja0N1ZS5jcHAKQEAgLTQxLDggKzQxLDkgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1UZXh0VHJhY2tDdWU6OlRleHRUcmFja0N1ZShjb25zdCBTdHJpbmcm
IGlkLCBkb3VibGUgc3RhcnQsIGRvdWJsZSBlbmQsIGNvbnN0IFN0cmluZyYgY29udGVudCwgY29u
c3QgU3RyaW5nJiBzZXR0aW5ncywgYm9vbCBwYXVzZU9uRXhpdCkKLSAgICA6IG1faWQoaWQpCitU
ZXh0VHJhY2tDdWU6OlRleHRUcmFja0N1ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
LCBjb25zdCBTdHJpbmcmIGlkLCBkb3VibGUgc3RhcnQsIGRvdWJsZSBlbmQsIGNvbnN0IFN0cmlu
ZyYgY29udGVudCwgY29uc3QgU3RyaW5nJiBzZXR0aW5ncywgYm9vbCBwYXVzZU9uRXhpdCkKKyAg
ICA6IEFjdGl2ZURPTU9iamVjdChjb250ZXh0LCB0aGlzKQorICAgICwgbV9pZChpZCkKICAgICAs
IG1fc3RhcnRUaW1lKHN0YXJ0KQogICAgICwgbV9lbmRUaW1lKGVuZCkKICAgICAsIG1fY29udGVu
dChjb250ZW50KQpAQCAtMTI3LDggKzEyOCwxMiBAQCBTdHJpbmcgVGV4dFRyYWNrQ3VlOjpnZXRD
dWVBc1NvdXJjZSgpCiAKIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gVGV4dFRyYWNrQ3Vl
OjpnZXRDdWVBc0hUTUwoKQogewotICAgIC8vIEZJWE1FKDYyODgzKTogSW1wbGVtZW50LgotICAg
IHJldHVybiBEb2N1bWVudEZyYWdtZW50OjpjcmVhdGUoMCk7CisgICAgcmV0dXJuIG1fZG9jdW1l
bnRGcmFnbWVudDsKK30KKwordm9pZCBUZXh0VHJhY2tDdWU6OnNldEN1ZUhUTUwoUGFzc1JlZlB0
cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCkKK3sKKyAgICBtX2RvY3VtZW50RnJhZ21lbnQg
PSBmcmFnbWVudDsKIH0KIAogYm9vbCBUZXh0VHJhY2tDdWU6OmlzQWN0aXZlKCkKQEAgLTE0Miw2
ICsxNDcsMTEgQEAgdm9pZCBUZXh0VHJhY2tDdWU6OnNldElzQWN0aXZlKGJvb2wgYWN0aXZlKQog
ICAgIG1faXNBY3RpdmUgPSBhY3RpdmU7CiB9CiAKK1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIFRl
eHRUcmFja0N1ZTo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IEFjdGl2ZURPTU9iamVjdDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworfQorCiB2b2lkIFRl
eHRUcmFja0N1ZTo6cGFyc2VTZXR0aW5ncyhjb25zdCBTdHJpbmcmIGlucHV0KQogewogICAgIC8v
IDQuOC4xMC4xMy4zIFBhcnNlIHRoZSBXZWJWVFQgc2V0dGluZ3MuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL1RleHRUcmFja0N1ZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0
VHJhY2tDdWUuaAppbmRleCBhMmQxMjFjZWYxMDQ3MzA1MmQ3NTViZTA5NzBkNjgxZGRkOWRiZDFm
Li5hYzIzMjE0NDI5NzJjOWQ5OGFkYjhmMDNkMDI4ZWM2NjhlMjJmMGRhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL1RleHRUcmFja0N1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvVGV4dFRyYWNrQ3VlLmgKQEAgLTMzLDYgKzMzLDcgQEAKIAogI2lmIEVOQUJMRShWSURFT19U
UkFDSykKIAorI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgogI2luY2x1ZGUgIlRleHRUcmFj
ay5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KQEAgLTQwLDEzICs0MSwxNCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBE
b2N1bWVudEZyYWdtZW50OworY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIGNsYXNzIFRl
eHRUcmFjazsKIAotY2xhc3MgVGV4dFRyYWNrQ3VlIDogcHVibGljIFJlZkNvdW50ZWQ8VGV4dFRy
YWNrQ3VlPiB7CitjbGFzcyBUZXh0VHJhY2tDdWUgOiBwdWJsaWMgUmVmQ291bnRlZDxUZXh0VHJh
Y2tDdWU+LCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFz
c1JlZlB0cjxUZXh0VHJhY2tDdWU+IGNyZWF0ZShjb25zdCBTdHJpbmcmIGlkLCBkb3VibGUgc3Rh
cnQsIGRvdWJsZSBlbmQsIGNvbnN0IFN0cmluZyYgY29udGVudCwgY29uc3QgU3RyaW5nJiBzZXR0
aW5ncywgYm9vbCBwYXVzZU9uRXhpdCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0VHJhY2tD
dWU+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcm
IGlkLCBkb3VibGUgc3RhcnQsIGRvdWJsZSBlbmQsIGNvbnN0IFN0cmluZyYgY29udGVudCwgY29u
c3QgU3RyaW5nJiBzZXR0aW5ncywgYm9vbCBwYXVzZU9uRXhpdCkKICAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgVGV4dFRyYWNrQ3VlKGlkLCBzdGFydCwgZW5kLCBjb250ZW50LCBz
ZXR0aW5ncywgcGF1c2VPbkV4aXQpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0
VHJhY2tDdWUoY29udGV4dCwgaWQsIHN0YXJ0LCBlbmQsIGNvbnRlbnQsIHNldHRpbmdzLCBwYXVz
ZU9uRXhpdCkpOwogICAgIH0KICAgICAKICAgICBlbnVtIERpcmVjdGlvbiB7IEhvcml6b250YWws
IFZlcnRpY2FsR3Jvd2luZ0xlZnQsIFZlcnRpY2FsR3Jvd2luZ1JpZ2h0IH07CkBAIC03MSwxMiAr
NzMsMTUgQEAgcHVibGljOgogCiAgICAgU3RyaW5nIGdldEN1ZUFzU291cmNlKCk7CiAgICAgUGFz
c1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBnZXRDdWVBc0hUTUwoKTsKKyAgICB2b2lkIHNldEN1
ZUhUTUwoUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50Pik7CiAKICAgICBib29sIGlzQWN0aXZl
KCk7CiAgICAgdm9pZCBzZXRJc0FjdGl2ZShib29sKTsKKyAgICAKKyAgICB2aXJ0dWFsIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsKIAogcHJp
dmF0ZToKLSAgICBUZXh0VHJhY2tDdWUoY29uc3QgU3RyaW5nJiBpZCwgZG91YmxlIHN0YXJ0LCBk
b3VibGUgZW5kLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGNvbnN0IFN0cmluZyYgc2V0dGluZ3Ms
IGJvb2wgcGF1c2VPbkV4aXQpOworICAgIFRleHRUcmFja0N1ZShTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgY29uc3QgU3RyaW5nJiBpZCwgZG91YmxlIHN0YXJ0LCBkb3VibGUgZW5kLCBjb25zdCBT
dHJpbmcmIGNvbnRlbnQsIGNvbnN0IFN0cmluZyYgc2V0dGluZ3MsIGJvb2wgcGF1c2VPbkV4aXQp
OwogCiAgICAgdm9pZCBwYXJzZVNldHRpbmdzKGNvbnN0IFN0cmluZyYpOwogICAgIApAQCAtOTMs
NiArOTgsNyBAQCBwcml2YXRlOgogICAgIGludCBtX3RleHRQb3NpdGlvbjsKICAgICBpbnQgbV9j
dWVTaXplOwogICAgIEFsaWdubWVudCBtX2N1ZUFsaWdubWVudDsKKyAgICBSZWZQdHI8RG9jdW1l
bnRGcmFnbWVudD4gbV9kb2N1bWVudEZyYWdtZW50OwogCiAgICAgYm9vbCBtX2lzQWN0aXZlOwog
fTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9DdWVQYXJzZXIuY3BwCmluZGV4IDRh
Njg2OWJhOWRiNDcxYzQ2NGZjNDBkYjQwYzgyMTBjZTk2NGQyMzMuLjQ5MDQ3YzEyMGQyOTVkY2Iz
ODM5MmFkNjllMjM5ZGQzYzBiOTJjNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RyYWNrL0N1ZVBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJh
Y2svQ3VlUGFyc2VyLmNwcApAQCAtNjEsNiArNjEsNyBAQCB2b2lkIEN1ZVBhcnNlcjo6bG9hZChj
b25zdCBTdHJpbmcmIHVybCwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgQ3VlUGFy
cwogICAgIG9wdGlvbnMuY3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5ID0gQWxsb3dDcm9zc09yaWdp
blJlcXVlc3RzOwogCiAgICAgbV9jbGllbnQgPSBjbGllbnQ7CisgICAgbV9zY3JpcHRFeGVjdXRp
b25Db250ZXh0ID0gY29udGV4dDsKIAogICAgIG1fbG9hZGVyID0gVGhyZWFkYWJsZUxvYWRlcjo6
Y3JlYXRlKGNvbnRleHQsIHRoaXMsIHJlcXVlc3QsIG9wdGlvbnMpOwogfQpAQCAtMTEwLDcgKzEx
MSw3IEBAIHZvaWQgQ3VlUGFyc2VyOjpuZXdDdWVzUGFyc2VkKCkKIHZvaWQgQ3VlUGFyc2VyOjpj
cmVhdGVXZWJWVFRQYXJzZXIoKQogewogICAgIGlmICghbV9wcml2YXRlKSB7Ci0gICAgICAgIG1f
cHJpdmF0ZSA9IFdlYlZUVFBhcnNlcjo6Y3JlYXRlKHRoaXMpOworICAgICAgICBtX3ByaXZhdGUg
PSBXZWJWVFRQYXJzZXI6OmNyZWF0ZSh0aGlzLCBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwog
ICAgICAgICBtX2NsaWVudC0+dHJhY2tMb2FkU3RhcnRlZCgpOwogICAgIH0KIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyLmgKaW5kZXggN2M2YzYzMTc0ZTU3ODM2OTYw
NmVkYTI1ZjQ4YWQ1NDk4ZDA4NWYwOC4uNzgxZjA1ODBiZWRjMDY4ZmZhMDQ2MmVmY2JkMWFmM2Y2
NTkzZDc0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svQ3VlUGFy
c2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyLmgKQEAg
LTY5LDYgKzY5LDkgQEAgcHVibGljOgogICAgIHZvaWQgZmV0Y2hQYXJzZWRDdWVzKFZlY3RvcjxS
ZWZQdHI8VGV4dFRyYWNrQ3VlPiA+Jik7CiAgICAgdm9pZCBuZXdDdWVzUGFyc2VkKCk7CiAKK3By
b3RlY3RlZDoKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBtX3NjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ7CisKIHByaXZhdGU6CiAgICAgdm9pZCBjcmVhdGVXZWJWVFRQYXJzZXIoKTsKICAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL1dlYlZUVFBhcnNlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9XZWJWVFRQYXJzZXIuY3BwCmluZGV4IGYy
NjQ0MzQ2MmRjMzRhN2NhZmI2MTIzNzhiNjYwZjY4YjQ5N2UyYzYuLjVkZjQ5MDYyYzc1OTE5ZGVj
OTJlZmRkOTE4OTEwYzZhOWE3YjU3MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RyYWNrL1dlYlZUVFBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dHJhY2svV2ViVlRUUGFyc2VyLmNwcApAQCAtMzQsMTAgKzM0LDE3IEBACiAKICNpbmNsdWRlICJX
ZWJWVFRQYXJzZXIuaCIKIAorI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRN
TE5hbWVzLmgiCisjaW5jbHVkZSAiUHJvY2Vzc2luZ0luc3RydWN0aW9uLmgiCisjaW5jbHVkZSAi
U2VnbWVudGVkU3RyaW5nLmgiCisjaW5jbHVkZSAiVGV4dC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3VzaW5nIG5hbWVzcGFjZSBI
VE1MTmFtZXM7CisKIGJvb2wgV2ViVlRUUGFyc2VyOjpoYXNSZXF1aXJlZEZpbGVJZGVudGlmaWVy
KGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICAvLyBBIFdlYlZUVCBm
aWxlIGlkZW50aWZpZXIgY29uc2lzdHMgb2YgYW4gb3B0aW9uYWwgQk9NIGNoYXJhY3RlciwKQEAg
LTc4LDggKzg1LDEwIEBAIFN0cmluZyBXZWJWVFRQYXJzZXI6OmNvbGxlY3RXb3JkKGNvbnN0IFN0
cmluZyYgaW5wdXQsIHVuc2lnbmVkKiBwb3NpdGlvbikKICAgICByZXR1cm4gc3RyaW5nLnRvU3Ry
aW5nKCk7CiB9CiAKLVdlYlZUVFBhcnNlcjo6V2ViVlRUUGFyc2VyKEN1ZVBhcnNlclByaXZhdGVD
bGllbnQqIGNsaWVudCkKLSAgICA6IG1fc3RhdGUoSW5pdGlhbCkKK1dlYlZUVFBhcnNlcjo6V2Vi
VlRUUGFyc2VyKEN1ZVBhcnNlclByaXZhdGVDbGllbnQqIGNsaWVudCwgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCkKKyAgICA6IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dChjb250ZXh0
KQorICAgICwgbV9zdGF0ZShJbml0aWFsKQorICAgICwgbV90b2tlbml6ZXIoV2ViVlRUVG9rZW5p
emVyOjpjcmVhdGUoKSkKIHsKICAgICBtX2NsaWVudCA9IGNsaWVudDsKIH0KQEAgLTIwNCwxMCAr
MjEzLDc1IEBAIFdlYlZUVFBhcnNlcjo6UGFyc2VTdGF0ZSBXZWJWVFRQYXJzZXI6Omlnbm9yZUJh
ZEN1ZShjb25zdCBTdHJpbmcmIGxpbmUpCiAKIHZvaWQgV2ViVlRUUGFyc2VyOjpwcm9jZXNzQ3Vl
VGV4dCgpCiB7Ci0gICAgLy8gNTEgLSBDdWUgdGV4dCBwcm9jZXNzaW5nIGJhc2VkIG9uIFdlYlZU
VCBjdWUgdGV4dCBwYXJzaW5nIHJ1bGVzIGFuZCBXZWJWVFQgY3VlIHRleHQgRE9NIGNvbnN0cnVj
dGlvbiBydWxlcy4KLSAgICAvLyBGSVhNRSg2NDEzMik6IFByb2Nlc3MgdGhlIGN1ZSB0ZXh0IGFz
IHBlciB0aGUgY3VlIHRleHQgcGFyc2luZyBydWxlcy4gCi0gICAgLy8gICAgIFNvdXJjZTogaHR0
cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2Uv
dGhlLWlmcmFtZS1lbGVtZW50Lmh0bWwjd2VidnR0LWN1ZS10ZXh0LXBhcnNpbmctcnVsZXMKLSAg
ICBSZWZQdHI8VGV4dFRyYWNrQ3VlPiBjdWUgPSBUZXh0VHJhY2tDdWU6OmNyZWF0ZShtX2N1cnJl
bnRJZCwgbV9jdXJyZW50U3RhcnRUaW1lLCBtX2N1cnJlbnRFbmRUaW1lLCBtX2N1cnJlbnRDb250
ZW50LnRvU3RyaW5nKCksIG1fY3VycmVudFNldHRpbmdzLCBmYWxzZSk7CisgICAgLy8gNTEgLSBD
dWUgdGV4dCBwcm9jZXNzaW5nIGJhc2VkIG9uCisgICAgLy8gNC44LjEwLjEzLjQgV2ViVlRUIGN1
ZSB0ZXh0IHBhcnNpbmcgcnVsZXMgYW5kCisgICAgLy8gNC44LjEwLjEzLjUgV2ViVlRUIGN1ZSB0
ZXh0IERPTSBjb25zdHJ1Y3Rpb24gcnVsZXMuCisgICAgQVNTRVJUKG1fc2NyaXB0RXhlY3V0aW9u
Q29udGV4dC0+aXNEb2N1bWVudCgpKTsKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNf
Y2FzdDxEb2N1bWVudCo+KG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CisKKyAgICBtX2F0dGFj
aG1lbnRSb290ID0gRG9jdW1lbnRGcmFnbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBtX2N1
cnJlbnROb2RlID0gbV9hdHRhY2htZW50Um9vdDsKKyAgICAgICAgCisgICAgU2VnbWVudGVkU3Ry
aW5nIGNvbnRlbnQobV9jdXJyZW50Q29udGVudC50b1N0cmluZygpKTsKKyAgICB3aGlsZSAobV90
b2tlbml6ZXItPm5leHRUb2tlbihjb250ZW50LCBtX3Rva2VuKSkgeworCisgICAgICAgIEF0b21p
Y1N0cmluZyB0b2tlblRhZ05hbWUobV90b2tlbi5uYW1lKCkuZGF0YSgpLCBtX3Rva2VuLm5hbWUo
KS5zaXplKCkpOworICAgICAgICBRdWFsaWZpZWROYW1lIHRhZ05hbWUobnVsbEF0b20sIHRva2Vu
VGFnTmFtZSwgbnVsbEF0b20pOworICAgICAgICAKKyAgICAgICAgc3dpdGNoIChtX3Rva2VuLnR5
cGUoKSkgeworICAgICAgICBjYXNlIFdlYlZUVFRva2VuVHlwZXM6OkNoYXJhY3RlcjoKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgIEF0b21pY1N0cmluZyBjb250ZW50KG1fdG9rZW4uY2hhcmFj
dGVycygpLmRhdGEoKSwgbV90b2tlbi5jaGFyYWN0ZXJzKCkuc2l6ZSgpKTsKKyAgICAgICAgICAg
IFJlZlB0cjxUZXh0PiBjaGlsZCA9IFRleHQ6OmNyZWF0ZShkb2N1bWVudCwgY29udGVudCk7Cisg
ICAgICAgICAgICBtX2N1cnJlbnROb2RlLT5wYXJzZXJBZGRDaGlsZChjaGlsZCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSBXZWJWVFRUb2tlblR5cGVz
OjpTdGFydFRhZzoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIFJlZlB0cjxIVE1MRWxlbWVu
dD4gY2hpbGQ7CisgICAgICAgICAgICBpZiAodG9rZW5UYWdOYW1lID09IGlUYWcKKyAgICAgICAg
ICAgICAgICB8fCB0b2tlblRhZ05hbWUgPT0gYlRhZworICAgICAgICAgICAgICAgIHx8IHRva2Vu
VGFnTmFtZSA9PSB1VGFnCisgICAgICAgICAgICAgICAgfHwgdG9rZW5UYWdOYW1lID09IHJ1YnlU
YWcKKyAgICAgICAgICAgICAgICB8fCB0b2tlblRhZ05hbWUgPT0gcnRUYWcpCisgICAgICAgICAg
ICAgICAgY2hpbGQgPSBIVE1MRWxlbWVudDo6Y3JlYXRlKHRhZ05hbWUsIGRvY3VtZW50KTsKKyAg
ICAgICAgICAgIGVsc2UgaWYgKEF0b21pY1N0cmluZyhtX3Rva2VuLm5hbWUoKS5kYXRhKCkpID09
ICJjIikKKyAgICAgICAgICAgICAgICBjaGlsZCA9IEhUTUxFbGVtZW50OjpjcmVhdGUoc3BhblRh
ZywgZG9jdW1lbnQpOworICAgICAgICAgICAgZWxzZSBpZiAoQXRvbWljU3RyaW5nKG1fdG9rZW4u
bmFtZSgpLmRhdGEoKSkgPT0gInYiKQorICAgICAgICAgICAgICAgIGNoaWxkID0gSFRNTEVsZW1l
bnQ6OmNyZWF0ZShxVGFnLCBkb2N1bWVudCk7CisgICAgICAgICAgICBpZiAoY2hpbGQpIHsKKyAg
ICAgICAgICAgICAgICBtX2N1cnJlbnROb2RlLT5wYXJzZXJBZGRDaGlsZChjaGlsZCk7CisgICAg
ICAgICAgICAgICAgbV9jdXJyZW50Tm9kZSA9IGNoaWxkOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIGNhc2UgV2ViVlRUVG9rZW5UeXBl
czo6RW5kVGFnOgorICAgICAgICAgICAgIGlmICh0b2tlblRhZ05hbWUgPT0gaVRhZworICAgICAg
ICAgICAgICAgIHx8IHRva2VuVGFnTmFtZSA9PSBiVGFnCisgICAgICAgICAgICAgICAgfHwgdG9r
ZW5UYWdOYW1lID09IHVUYWcKKyAgICAgICAgICAgICAgICB8fCB0b2tlblRhZ05hbWUgPT0gcnVi
eVRhZworICAgICAgICAgICAgICAgIHx8IHRva2VuVGFnTmFtZSA9PSBydFRhZworICAgICAgICAg
ICAgICAgIHx8IEF0b21pY1N0cmluZyhtX3Rva2VuLm5hbWUoKS5kYXRhKCkpID09ICJjIgorICAg
ICAgICAgICAgICAgIHx8IEF0b21pY1N0cmluZyhtX3Rva2VuLm5hbWUoKS5kYXRhKCkpID09ICJ2
IikKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnROb2RlID0gbV9jdXJyZW50Tm9kZS0+cGFyZW50
Tm9kZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2ViVlRUVG9rZW5UeXBl
czo6VGltZXN0YW1wVGFnOgorICAgICAgICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQgcG9z
aXRpb24gPSAwOworICAgICAgICAgICAgZG91YmxlIHRpbWUgPSBjb2xsZWN0VGltZVN0YW1wKG1f
dG9rZW4uY2hhcmFjdGVycygpLmRhdGEoKSwgJnBvc2l0aW9uKTsKKyAgICAgICAgICAgIGlmICh0
aW1lICE9IG1hbGZvcm1lZFRpbWUpCisgICAgICAgICAgICAgICAgbV9jdXJyZW50Tm9kZS0+cGFy
c2VyQWRkQ2hpbGQoUHJvY2Vzc2luZ0luc3RydWN0aW9uOjpjcmVhdGUoZG9jdW1lbnQsICJ0aW1l
c3RhbXAiLCBBdG9taWNTdHJpbmcobV90b2tlbi5jaGFyYWN0ZXJzKCkuZGF0YSgpLCBtX3Rva2Vu
LmNoYXJhY3RlcnMoKS5zaXplKCkpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBtX3Rva2VuLmNsZWFyKCk7CisgICAgfQorICAgIAorICAgIFJlZlB0cjxU
ZXh0VHJhY2tDdWU+IGN1ZSA9IFRleHRUcmFja0N1ZTo6Y3JlYXRlKG1fc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCwgbV9jdXJyZW50SWQsIG1fY3VycmVudFN0YXJ0VGltZSwgbV9jdXJyZW50RW5kVGlt
ZSwgbV9jdXJyZW50Q29udGVudC50b1N0cmluZygpLCBtX2N1cnJlbnRTZXR0aW5ncywgZmFsc2Up
OworICAgIGN1ZS0+c2V0Q3VlSFRNTChtX2F0dGFjaG1lbnRSb290KTsKICAgICBtX2N1ZWxpc3Qu
YXBwZW5kKGN1ZSk7CiAgICAgbV9jbGllbnQtPm5ld0N1ZXNQYXJzZWQoKTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL1dlYlZUVFBhcnNlci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svV2ViVlRUUGFyc2VyLmgKaW5kZXggYTY5MzUyYzBkODc5
MjIzNDM0MDRlNmYxZTA5N2I1OTA4M2FiOTVkOS4uNjE3YzFlODZkZDhhMzhmODMxYmMzYzViMTRj
MTYyYTdmMGRjOTZkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2sv
V2ViVlRUUGFyc2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svV2ViVlRU
UGFyc2VyLmgKQEAgLTM0LDYgKzM0LDkgQEAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAKICNp
bmNsdWRlICJDdWVQYXJzZXJQcml2YXRlLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNs
dWRlICJEb2N1bWVudEZyYWdtZW50LmgiCisjaW5jbHVkZSAiV2ViVlRUVG9rZW5pemVyLmgiCiAj
aW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWls
ZGVyLmg+CiAKQEAgLTQ5LDkgKzUyLDkgQEAgcHVibGljOgogICAgIAogICAgIGVudW0gUGFyc2VT
dGF0ZSB7IEluaXRpYWwsIEhlYWRlciwgSWQsIFRpbWluZ3NBbmRTZXR0aW5ncywgQ3VlVGV4dCwg
QmFkQ3VlIH07CiAKLSAgICBzdGF0aWMgUGFzc093blB0cjxXZWJWVFRQYXJzZXI+IGNyZWF0ZShD
dWVQYXJzZXJQcml2YXRlQ2xpZW50KiBjbGllbnQpCisgICAgc3RhdGljIFBhc3NPd25QdHI8V2Vi
VlRUUGFyc2VyPiBjcmVhdGUoQ3VlUGFyc2VyUHJpdmF0ZUNsaWVudCogY2xpZW50LCBTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBXZWJWVFRQYXJzZXIoY2xpZW50KSk7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcg
V2ViVlRUUGFyc2VyKGNsaWVudCwgY29udGV4dCkpOwogICAgIH0KICAgICAKICAgICBzdGF0aWMg
Ym9vbCBoYXNSZXF1aXJlZEZpbGVJZGVudGlmaWVyKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVk
IGxlbmd0aCk7CkBAIC02OSw4ICs3Miw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcGFy
c2VCeXRlcyhjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpOwogCiBwcm90ZWN0ZWQ6
Ci0gICAgV2ViVlRUUGFyc2VyKEN1ZVBhcnNlclByaXZhdGVDbGllbnQqKTsKKyAgICBXZWJWVFRQ
YXJzZXIoQ3VlUGFyc2VyUHJpdmF0ZUNsaWVudCosIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsK
ICAgICAKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQ7CiAgICAgUGFyc2VTdGF0ZSBtX3N0YXRlOwogCiBwcml2YXRlOgpAQCAtOTEsMTAgKzk1LDE2
IEBAIHByaXZhdGU6CiAgICAgZG91YmxlIG1fY3VycmVudEVuZFRpbWU7CiAgICAgU3RyaW5nQnVp
bGRlciBtX2N1cnJlbnRDb250ZW50OwogICAgIFN0cmluZyBtX2N1cnJlbnRTZXR0aW5nczsKKyAg
ICAKKyAgICBXZWJWVFRUb2tlbiBtX3Rva2VuOworICAgIE93blB0cjxXZWJWVFRUb2tlbml6ZXI+
IG1fdG9rZW5pemVyOwogCiAgICAgQ3VlUGFyc2VyUHJpdmF0ZUNsaWVudCogbV9jbGllbnQ7CiAK
ICAgICBWZWN0b3I8UmVmUHRyPFRleHRUcmFja0N1ZT4gPiBtX2N1ZWxpc3Q7CisgICAgCisgICAg
UmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IG1fYXR0YWNobWVudFJvb3Q7CisgICAgUmVmUHRyPENv
bnRhaW5lck5vZGU+IG1fY3VycmVudE5vZGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9XZWJWVFRUb2tlbi5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svV2ViVlRUVG9rZW4uaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5mY2MxMzIyNGJlOWFmZGE0OTM4ZTJhZjVkZGJlMjA5MGM5N2E3ZjAxCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svV2ViVlRUVG9rZW4uaApAQCAtMCww
ICsxLDEyMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIFdlYlZUVFRva2VuX2gKKyNkZWZpbmUgV2ViVlRUVG9rZW5faAor
CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorCisjaW5jbHVkZSAiTWFya3VwVG9rZW5CYXNlLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV2ViVlRUVG9rZW5UeXBlcyB7CitwdWJs
aWM6CisgICAgZW51bSBUeXBlIHsKKyAgICAgICAgVW5pbml0aWFsaXplZCwKKyAgICAgICAgQ2hh
cmFjdGVyLAorICAgICAgICBTdGFydFRhZywKKyAgICAgICAgRW5kVGFnLAorICAgICAgICBUaW1l
c3RhbXBUYWcsCisgICAgICAgIEVuZE9mRmlsZSwKKyAgICB9OworfTsKKworY2xhc3MgV2ViVlRU
VG9rZW4gOiBwdWJsaWMgTWFya3VwVG9rZW5CYXNlPFdlYlZUVFRva2VuVHlwZXM+IHsKK3B1Ymxp
YzoKKyAgICB2b2lkIGFwcGVuZFRvTmFtZShVQ2hhciBjaGFyYWN0ZXIpCisgICAgeworICAgICAg
ICBBU1NFUlQobV90eXBlID09IFdlYlZUVFRva2VuVHlwZXM6OlN0YXJ0VGFnIHx8IG1fdHlwZSA9
PSBXZWJWVFRUb2tlblR5cGVzOjpFbmRUYWcpOworICAgICAgICBNYXJrdXBUb2tlbkJhc2U8V2Vi
VlRUVG9rZW5UeXBlcz46OmFwcGVuZFRvTmFtZShjaGFyYWN0ZXIpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGJlZ2luVGltZXN0YW1wVGFnKFVDaGFyIGNoYXJhY3RlcikKKyAgICB7CisgICAgICAg
IEFTU0VSVChjaGFyYWN0ZXIpOworICAgICAgICBBU1NFUlQobV90eXBlID09IFR5cGU6OlVuaW5p
dGlhbGl6ZWQpOworICAgICAgICBtX3R5cGUgPSBUeXBlOjpUaW1lc3RhbXBUYWc7CisgICAgICAg
IG1fc2VsZkNsb3NpbmcgPSB0cnVlOworCisgICAgICAgIG1fZGF0YS5hcHBlbmQoY2hhcmFjdGVy
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhcHBlbmRUb1RpbWVzdGFtcChVQ2hhciBjaGFyYWN0
ZXIpCisgICAgeworICAgICAgICBBU1NFUlQoY2hhcmFjdGVyKTsKKyAgICAgICAgQVNTRVJUKG1f
dHlwZSA9PSBUeXBlOjpUaW1lc3RhbXBUYWcpOworICAgICAgICBtX2RhdGEuYXBwZW5kKGNoYXJh
Y3Rlcik7CisgICAgfQorICAgIAorICAgIHZvaWQgYXBwZW5kVG9DbGFzcyhVQ2hhciBjaGFyYWN0
ZXIpCisgICAgeworICAgICAgICBhcHBlbmRUb1N0YXJ0VHlwZShjaGFyYWN0ZXIpOworICAgIH0K
KworICAgIHZvaWQgYXBwZW5kVG9Bbm5vdGF0aW9uKFVDaGFyIGNoYXJhY3RlcikKKyAgICB7Cisg
ICAgICAgIGFwcGVuZFRvU3RhcnRUeXBlKGNoYXJhY3Rlcik7CisgICAgfQorCisgICAgdm9pZCBh
ZGROZXdDbGFzcygpCisgICAgeworICAgICAgICBBU1NFUlQobV90eXBlID09IFR5cGU6OlN0YXJ0
VGFnKTsKKyAgICAgICAgbV9jbGFzc2VzLmFwcGVuZChtX2N1cnJlbnRCdWZmZXIpOworICAgICAg
ICBtX2N1cnJlbnRCdWZmZXIgPSBlbXB0eVN0cmluZygpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGFkZE5ld0Fubm90YXRpb24oKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBUeXBl
OjpTdGFydFRhZyk7CisgICAgICAgIG1fYW5ub3RhdGlvbi5hcHBlbmQobV9jdXJyZW50QnVmZmVy
KTsKKyAgICAgICAgbV9jdXJyZW50QnVmZmVyID0gZW1wdHlTdHJpbmcoKTsKKyAgICB9CisgICAg
CisgICAgY29uc3QgRGF0YVZlY3RvciYgbmFtZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NF
UlQobV90eXBlID09IEhUTUxUb2tlblR5cGVzOjpTdGFydFRhZyB8fCBtX3R5cGUgPT0gSFRNTFRv
a2VuVHlwZXM6OkVuZFRhZyk7CisgICAgICAgIHJldHVybiBNYXJrdXBUb2tlbkJhc2U8V2ViVlRU
VG9rZW5UeXBlcz46Om5hbWUoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBhcHBlbmRU
b1N0YXJ0VHlwZShVQ2hhciBjaGFyYWN0ZXIpCisgICAgeworICAgICAgICBBU1NFUlQoY2hhcmFj
dGVyKTsKKyAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBUeXBlOjpTdGFydFRhZyk7CisgICAgICAg
IG1fY3VycmVudEJ1ZmZlci5hcHBlbmQoY2hhcmFjdGVyKTsKKyAgICB9CisKKyAgICBWZWN0b3I8
U3RyaW5nPiBtX2Fubm90YXRpb247CisgICAgVmVjdG9yPFN0cmluZz4gbV9jbGFzc2VzOworICAg
IFN0cmluZyBtX2N1cnJlbnRCdWZmZXI7Cit9OworCit9CisKKyNlbmRpZgorI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9XZWJWVFRUb2tlbml6ZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svV2ViVlRUVG9rZW5pemVyLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi44ZDhkYjI3MTczNDI5OTNhZGZmYmM4ZGUzZjVlMmM3OGRmZTRmZWUwCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svV2ViVlRUVG9rZW5pemVy
LmNwcApAQCAtMCwwICsxLDIyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUo
VklERU9fVFJBQ0spCisKKyNpbmNsdWRlICJXZWJWVFRUb2tlbml6ZXIuaCIKKworI2luY2x1ZGUg
Ik1hcmt1cFRva2VuaXplcklubGluZU1ldGhvZHMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CisjZGVmaW5lIFdFQlZUVF9CRUdJTl9TVEFURShzdGF0ZU5hbWUpIEJFR0lOX1NUQVRFKFdlYlZU
VFRva2VuaXplclN0YXRlLCBzdGF0ZU5hbWUpCisjZGVmaW5lIFdFQlZUVF9BRFZBTkNFX1RPKHN0
YXRlTmFtZSkgQURWQU5DRV9UTyhXZWJWVFRUb2tlbml6ZXJTdGF0ZSwgc3RhdGVOYW1lKQorCitX
ZWJWVFRUb2tlbml6ZXI6OldlYlZUVFRva2VuaXplcigpCit7CisgICAgcmVzZXQoKTsKK30KKwor
dGVtcGxhdGU8PgoraW5saW5lIGJvb2wgTWFya3VwVG9rZW5pemVyQmFzZTxXZWJWVFRUb2tlbiwg
V2ViVlRUVG9rZW5pemVyU3RhdGU+OjpzaG91bGRTa2lwTnVsbENoYXJhY3RlcnMoKSBjb25zdAor
eworICAgIHJldHVybiB0cnVlOworfQorCitpbmxpbmUgYm9vbCB2ZWN0b3JFcXVhbHNTdHJpbmco
Y29uc3QgVmVjdG9yPFVDaGFyLCAzMj4mIHZlY3RvciwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCit7
CisgICAgaWYgKHZlY3Rvci5zaXplKCkgIT0gc3RyaW5nLmxlbmd0aCgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgY29uc3QgVUNoYXIqIHN0cmluZ0RhdGEgPSBzdHJpbmcuY2hhcmFjdGVy
cygpOworICAgIGNvbnN0IFVDaGFyKiB2ZWN0b3JEYXRhID0gdmVjdG9yLmRhdGEoKTsKKyAgICBy
ZXR1cm4gIW1lbWNtcChzdHJpbmdEYXRhLCB2ZWN0b3JEYXRhLCB2ZWN0b3Iuc2l6ZSgpICogc2l6
ZW9mKFVDaGFyKSk7Cit9CisKK3ZvaWQgV2ViVlRUVG9rZW5pemVyOjpyZXNldCgpCit7CisgICAg
bV9zdGF0ZSA9IFdlYlZUVFRva2VuaXplclN0YXRlOjpEYXRhU3RhdGU7CisgICAgbV90b2tlbiA9
IDA7CisgICAgbV9saW5lTnVtYmVyID0gMDsKKyAgICBtX2J1ZmZlci5jbGVhcigpOworfQorICAg
IAorYm9vbCBXZWJWVFRUb2tlbml6ZXI6Om5leHRUb2tlbihTZWdtZW50ZWRTdHJpbmcmIHNvdXJj
ZSwgV2ViVlRUVG9rZW4mIHRva2VuKQoreworICAgIC8vIElmIHdlIGhhdmUgYSB0b2tlbiBpbiBw
cm9ncmVzcywgdGhlbiB3ZSdyZSBzdXBwb3NlZCB0byBiZSBjYWxsZWQgYmFjaworICAgIC8vIHdp
dGggdGhlIHNhbWUgdG9rZW4gc28gd2UgY2FuIGZpbmlzaCBpdC4KKyAgICBBU1NFUlQoIW1fdG9r
ZW4gfHwgbV90b2tlbiA9PSAmdG9rZW4gfHwgdG9rZW4udHlwZSgpID09IFdlYlZUVFRva2VuVHlw
ZXM6OlVuaW5pdGlhbGl6ZWQpOworICAgIG1fdG9rZW4gPSAmdG9rZW47CisKKyAgICBpZiAoc291
cmNlLmlzRW1wdHkoKSB8fCAhbV9pbnB1dFN0cmVhbVByZXByb2Nlc3Nvci5wZWVrKHNvdXJjZSwg
bV9saW5lTnVtYmVyKSkKKyAgICAgICAgcmV0dXJuIGhhdmVCdWZmZXJlZENoYXJhY3RlclRva2Vu
KCk7CisKKyAgICBVQ2hhciBjYyA9IG1faW5wdXRTdHJlYW1QcmVwcm9jZXNzb3IubmV4dElucHV0
Q2hhcmFjdGVyKCk7CisKKyAgICAvLyA0LjguMTAuMTMuNCBXZWJWVFQgY3VlIHRleHQgdG9rZW5p
emVyCisgICAgc3dpdGNoIChtX3N0YXRlKSB7CisgICAgV0VCVlRUX0JFR0lOX1NUQVRFKERhdGFT
dGF0ZSkgeworICAgICAgICBpZiAoY2MgPT0gJyYnKSB7CisgICAgICAgICAgICBtX2J1ZmZlci5h
cHBlbmQoY2MpOworICAgICAgICAgICAgV0VCVlRUX0FEVkFOQ0VfVE8oRXNjYXBlU3RhdGUpOwor
ICAgICAgICB9IGVsc2UgaWYgKGNjID09ICc8JykgeworICAgICAgICAgICAgaWYgKHZlY3RvckVx
dWFsc1N0cmluZyhtX3Rva2VuLT5jaGFyYWN0ZXJzKCksIGVtcHR5U3RyaW5nKCkpKQorICAgICAg
ICAgICAgICAgIFdFQlZUVF9BRFZBTkNFX1RPKFRhZ1N0YXRlKTsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICByZXR1cm4gZW1pdEFuZFJlc3VtZUluKHNvdXJjZSwgV2ViVlRUVG9r
ZW5pemVyU3RhdGU6OlRhZ1N0YXRlKTsKKyAgICAgICAgfSBlbHNlIGlmIChjYyA9PSBJbnB1dFN0
cmVhbVByZXByb2Nlc3Nvcjo6ZW5kT2ZGaWxlTWFya2VyKQorICAgICAgICAgICAgcmV0dXJuIGVt
aXRFbmRPZkZpbGUoc291cmNlKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBidWZmZXJD
aGFyYWN0ZXIoY2MpOworICAgICAgICAgICAgV0VCVlRUX0FEVkFOQ0VfVE8oRGF0YVN0YXRlKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICBFTkRfU1RBVEUoKQorCisgICAgV0VCVlRUX0JFR0lOX1NU
QVRFKEVzY2FwZVN0YXRlKSB7CisgICAgICAgIGlmIChjYyA9PSAnOycpIHsKKyAgICAgICAgICAg
IGlmICh2ZWN0b3JFcXVhbHNTdHJpbmcobV9idWZmZXIsICImYW1wIikpCisgICAgICAgICAgICAg
ICAgYnVmZmVyQ2hhcmFjdGVyKCcmJyk7CisgICAgICAgICAgICBlbHNlIGlmICh2ZWN0b3JFcXVh
bHNTdHJpbmcobV9idWZmZXIsICImbHQiKSkKKyAgICAgICAgICAgICAgICBidWZmZXJDaGFyYWN0
ZXIoJzwnKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHZlY3RvckVxdWFsc1N0cmluZyhtX2J1ZmZl
ciwgIiZndCIpKQorICAgICAgICAgICAgICAgIGJ1ZmZlckNoYXJhY3RlcignPicpOworICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgbV9idWZmZXIuYXBwZW5kKGNjKTsKKyAgICAg
ICAgICAgICAgICBtX3Rva2VuLT5hcHBlbmRUb0NoYXJhY3RlcihtX2J1ZmZlcik7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBXRUJWVFRfQURWQU5DRV9UTyhEYXRhU3RhdGUpOworICAgICAg
ICB9IGVsc2UgaWYgKGlzQVNDSUlBbHBoYW51bWVyaWMoY2MpKSB7CisgICAgICAgICAgICBtX2J1
ZmZlci5hcHBlbmQoY2MpOworICAgICAgICAgICAgV0VCVlRUX0FEVkFOQ0VfVE8oRXNjYXBlU3Rh
dGUpOworICAgICAgICB9IGVsc2UgaWYgKGNjID09IElucHV0U3RyZWFtUHJlcHJvY2Vzc29yOjpl
bmRPZkZpbGVNYXJrZXIpIHsKKyAgICAgICAgICAgIG1fdG9rZW4tPmFwcGVuZFRvQ2hhcmFjdGVy
KG1fYnVmZmVyKTsKKyAgICAgICAgICAgIHJldHVybiBlbWl0RW5kT2ZGaWxlKHNvdXJjZSk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX3Rva2VuLT5hcHBlbmRUb0NoYXJhY3Rlciht
X2J1ZmZlcik7CisgICAgICAgICAgICBXRUJWVFRfQURWQU5DRV9UTyhEYXRhU3RhdGUpOworICAg
ICAgICB9CisgICAgfQorICAgIEVORF9TVEFURSgpCisgICAgCisgICAgV0VCVlRUX0JFR0lOX1NU
QVRFKFRhZ1N0YXRlKSB7CisgICAgICAgIGlmIChpc1Rva2VuaXplcldoaXRlc3BhY2UoY2MpKQor
ICAgICAgICAgICAgV0VCVlRUX0FEVkFOQ0VfVE8oU3RhcnRUYWdBbm5vdGF0aW9uU3RhdGUpOwor
ICAgICAgICBlbHNlIGlmIChjYyA9PSAnLicpCisgICAgICAgICAgICBXRUJWVFRfQURWQU5DRV9U
TyhTdGFydFRhZ0NsYXNzU3RhdGUpOworICAgICAgICBlbHNlIGlmIChjYyA9PSAnLycpIHsKKyAg
ICAgICAgICAgIFdFQlZUVF9BRFZBTkNFX1RPKEVuZFRhZ09wZW5TdGF0ZSk7CisgICAgICAgIH0g
ZWxzZSBpZiAoV1RGOjppc0FTQ0lJRGlnaXQoY2MpKSB7CisgICAgICAgICAgICBtX3Rva2VuLT5i
ZWdpblRpbWVzdGFtcFRhZyhjYyk7CisgICAgICAgICAgICBXRUJWVFRfQURWQU5DRV9UTyhUaW1l
c3RhbXBUYWdTdGF0ZSk7CisgICAgICAgIH0gZWxzZSBpZiAoY2MgPT0gJz4nIHx8IGNjID09IElu
cHV0U3RyZWFtUHJlcHJvY2Vzc29yOjplbmRPZkZpbGVNYXJrZXIpIHsKKyAgICAgICAgICAgIG1f
dG9rZW4tPmJlZ2luU3RhcnRUYWcoJ1wwJyk7CisgICAgICAgICAgICByZXR1cm4gZW1pdEFuZFJl
c3VtZUluKHNvdXJjZSwgV2ViVlRUVG9rZW5pemVyU3RhdGU6OkRhdGFTdGF0ZSk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBtX3Rva2VuLT5iZWdpblN0YXJ0VGFnKGNjKTsKKyAgICAg
ICAgICAgIFdFQlZUVF9BRFZBTkNFX1RPKFN0YXJ0VGFnU3RhdGUpOworICAgICAgICB9CisgICAg
fQorICAgIEVORF9TVEFURSgpCisKKyAgICBXRUJWVFRfQkVHSU5fU1RBVEUoU3RhcnRUYWdTdGF0
ZSkgeworICAgICAgICBpZiAoaXNUb2tlbml6ZXJXaGl0ZXNwYWNlKGNjKSkKKyAgICAgICAgICAg
IFdFQlZUVF9BRFZBTkNFX1RPKFN0YXJ0VGFnQW5ub3RhdGlvblN0YXRlKTsKKyAgICAgICAgZWxz
ZSBpZiAoY2MgPT0gJy4nKQorICAgICAgICAgICAgV0VCVlRUX0FEVkFOQ0VfVE8oU3RhcnRUYWdD
bGFzc1N0YXRlKTsKKyAgICAgICAgZWxzZSBpZiAoY2MgPT0gJz4nIHx8IGNjID09IElucHV0U3Ry
ZWFtUHJlcHJvY2Vzc29yOjplbmRPZkZpbGVNYXJrZXIpCisgICAgICAgICAgICByZXR1cm4gZW1p
dEFuZFJlc3VtZUluKHNvdXJjZSwgV2ViVlRUVG9rZW5pemVyU3RhdGU6OkRhdGFTdGF0ZSk7Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgbV90b2tlbi0+YXBwZW5kVG9OYW1lKGNjKTsKKyAg
ICAgICAgICAgIFdFQlZUVF9BRFZBTkNFX1RPKFN0YXJ0VGFnU3RhdGUpOworICAgICAgICB9Cisg
ICAgfQorICAgIEVORF9TVEFURSgpCisKKyAgICBXRUJWVFRfQkVHSU5fU1RBVEUoU3RhcnRUYWdD
bGFzc1N0YXRlKSB7CisgICAgICAgIGlmIChpc1Rva2VuaXplcldoaXRlc3BhY2UoY2MpKSB7Cisg
ICAgICAgICAgICBtX3Rva2VuLT5hZGROZXdDbGFzcygpOworICAgICAgICAgICAgV0VCVlRUX0FE
VkFOQ0VfVE8oU3RhcnRUYWdBbm5vdGF0aW9uU3RhdGUpOworICAgICAgICB9IGVsc2UgaWYgKGNj
ID09ICcuJykgeworICAgICAgICAgICAgbV90b2tlbi0+YWRkTmV3Q2xhc3MoKTsKKyAgICAgICAg
ICAgIFdFQlZUVF9BRFZBTkNFX1RPKFN0YXJ0VGFnQ2xhc3NTdGF0ZSk7CisgICAgICAgIH0gZWxz
ZSBpZiAoY2MgPT0gJz4nIHx8IGNjID09IElucHV0U3RyZWFtUHJlcHJvY2Vzc29yOjplbmRPZkZp
bGVNYXJrZXIpIHsKKyAgICAgICAgICAgIG1fdG9rZW4tPmFkZE5ld0NsYXNzKCk7CisgICAgICAg
ICAgICByZXR1cm4gZW1pdEFuZFJlc3VtZUluKHNvdXJjZSwgV2ViVlRUVG9rZW5pemVyU3RhdGU6
OkRhdGFTdGF0ZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX3Rva2VuLT5hcHBl
bmRUb0NsYXNzKGNjKTsKKyAgICAgICAgICAgIFdFQlZUVF9BRFZBTkNFX1RPKFN0YXJ0VGFnQ2xh
c3NTdGF0ZSk7CisgICAgICAgIH0KKworICAgIH0KKyAgICBFTkRfU1RBVEUoKQorCisgICAgV0VC
VlRUX0JFR0lOX1NUQVRFKFN0YXJ0VGFnQW5ub3RhdGlvblN0YXRlKSB7CisgICAgICAgIGlmIChj
YyA9PSAnPicgfHwgY2MgPT0gSW5wdXRTdHJlYW1QcmVwcm9jZXNzb3I6OmVuZE9mRmlsZU1hcmtl
cikgeworICAgICAgICAgICAgbV90b2tlbi0+YWRkTmV3QW5ub3RhdGlvbigpOworICAgICAgICAg
ICAgcmV0dXJuIGVtaXRBbmRSZXN1bWVJbihzb3VyY2UsIFdlYlZUVFRva2VuaXplclN0YXRlOjpE
YXRhU3RhdGUpOworICAgICAgICB9CisgICAgICAgIG1fdG9rZW4tPmFwcGVuZFRvQW5ub3RhdGlv
bihjYyk7CisgICAgICAgIFdFQlZUVF9BRFZBTkNFX1RPKFN0YXJ0VGFnQW5ub3RhdGlvblN0YXRl
KTsKKyAgICB9CisgICAgRU5EX1NUQVRFKCkKKyAgICAKKyAgICBXRUJWVFRfQkVHSU5fU1RBVEUo
RW5kVGFnT3BlblN0YXRlKSB7CisgICAgICAgIGlmIChjYyA9PSAnPicgfHwgY2MgPT0gSW5wdXRT
dHJlYW1QcmVwcm9jZXNzb3I6OmVuZE9mRmlsZU1hcmtlcikgeworICAgICAgICAgICAgbV90b2tl
bi0+YmVnaW5FbmRUYWcoJ1wwJyk7CisgICAgICAgICAgICByZXR1cm4gZW1pdEFuZFJlc3VtZUlu
KHNvdXJjZSwgV2ViVlRUVG9rZW5pemVyU3RhdGU6OkRhdGFTdGF0ZSk7CisgICAgICAgIH0KKyAg
ICAgICAgbV90b2tlbi0+YmVnaW5FbmRUYWcoY2MpOworICAgICAgICBXRUJWVFRfQURWQU5DRV9U
TyhFbmRUYWdTdGF0ZSk7CisgICAgfQorICAgIEVORF9TVEFURSgpCisKKyAgICBXRUJWVFRfQkVH
SU5fU1RBVEUoRW5kVGFnU3RhdGUpIHsKKyAgICAgICAgaWYgKGNjID09ICc+JyB8fCBjYyA9PSBJ
bnB1dFN0cmVhbVByZXByb2Nlc3Nvcjo6ZW5kT2ZGaWxlTWFya2VyKQorICAgICAgICAgICAgcmV0
dXJuIGVtaXRBbmRSZXN1bWVJbihzb3VyY2UsIFdlYlZUVFRva2VuaXplclN0YXRlOjpEYXRhU3Rh
dGUpOworICAgICAgICBtX3Rva2VuLT5hcHBlbmRUb05hbWUoY2MpOworICAgICAgICBXRUJWVFRf
QURWQU5DRV9UTyhFbmRUYWdTdGF0ZSk7CisgICAgfQorICAgIEVORF9TVEFURSgpCisKKyAgICBX
RUJWVFRfQkVHSU5fU1RBVEUoVGltZXN0YW1wVGFnU3RhdGUpIHsKKyAgICAgICAgaWYgKGNjID09
ICc+JyB8fCBjYyA9PSBJbnB1dFN0cmVhbVByZXByb2Nlc3Nvcjo6ZW5kT2ZGaWxlTWFya2VyKQor
ICAgICAgICAgICAgcmV0dXJuIGVtaXRBbmRSZXN1bWVJbihzb3VyY2UsIFdlYlZUVFRva2VuaXpl
clN0YXRlOjpEYXRhU3RhdGUpOworICAgICAgICBtX3Rva2VuLT5hcHBlbmRUb1RpbWVzdGFtcChj
Yyk7CisgICAgICAgIFdFQlZUVF9BRFZBTkNFX1RPKFRpbWVzdGFtcFRhZ1N0YXRlKTsKKyAgICB9
CisgICAgRU5EX1NUQVRFKCkKKworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIHJldHVybiBmYWxzZTsKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RyYWNrL1dlYlZUVFRva2VuaXplci5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdHJhY2svV2ViVlRUVG9rZW5pemVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTZkNDVmN2ZmN2Vi
ZjM3Zjc1YWI3MDI3YWE4N2ZiNjI1NDkzYTU3OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RyYWNrL1dlYlZUVFRva2VuaXplci5oCkBAIC0wLDAgKzEsNzYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBXZWJWVFRUb2tlbml6ZXJfaAorI2RlZmluZSBXZWJWVFRUb2tlbml6ZXJfaAorCisj
aWYgRU5BQkxFKFZJREVPX1RSQUNLKQorCisjaW5jbHVkZSAiTWFya3VwVG9rZW5pemVyQmFzZS5o
IgorI2luY2x1ZGUgIlNlZ21lbnRlZFN0cmluZy5oIgorI2luY2x1ZGUgIldlYlZUVFRva2VuLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV2ViVlRUVG9rZW5pemVyU3RhdGUgewor
cHVibGljOgorICAgIGVudW0gU3RhdGUgeworICAgICAgICBEYXRhU3RhdGUsCisgICAgICAgIEVz
Y2FwZVN0YXRlLAorICAgICAgICBUYWdTdGF0ZSwKKyAgICAgICAgU3RhcnRUYWdTdGF0ZSwKKyAg
ICAgICAgU3RhcnRUYWdDbGFzc1N0YXRlLAorICAgICAgICBTdGFydFRhZ0Fubm90YXRpb25TdGF0
ZSwKKyAgICAgICAgRW5kVGFnU3RhdGUsCisgICAgICAgIEVuZFRhZ09wZW5TdGF0ZSwKKyAgICAg
ICAgVGltZXN0YW1wVGFnU3RhdGUsCisgICAgfTsKK307CisKK2NsYXNzIFdlYlZUVFRva2VuaXpl
ciA6IE1hcmt1cFRva2VuaXplckJhc2U8V2ViVlRUVG9rZW4sIFdlYlZUVFRva2VuaXplclN0YXRl
PiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV2ViVlRUVG9rZW5pemVyKTsKKyAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxXZWJW
VFRUb2tlbml6ZXI+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBXZWJWVFRUb2tlbml6
ZXIpOyB9CisKKyAgICB2b2lkIHJlc2V0KCk7CisgICAgCisgICAgYm9vbCBuZXh0VG9rZW4oU2Vn
bWVudGVkU3RyaW5nJiwgV2ViVlRUVG9rZW4mKTsKKworcHJpdmF0ZToKKyAgICBXZWJWVFRUb2tl
bml6ZXIoKTsKKyAgICAKKyAgICBWZWN0b3I8VUNoYXIsIDMyPiBtX2J1ZmZlcjsKK307CisKK30K
KworI2VuZGlmCisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103376</attachid>
            <date>2011-08-09 11:25:53 -0700</date>
            <delta_ts>2011-08-09 16:27:32 -0700</delta_ts>
            <desc>adding classes and title found during parsing to fragment tree</desc>
            <filename>bug-64132-20110809112552.patch</filename>
            <type>text/plain</type>
            <size>35018</size>
            <attacher name="Anna Cavender">annacc</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTI2OTEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggZTM1YmU0
YWM2YTQyY2JlM2NhYmJhM2VlZWFjNThkOWQ3ZWU5ZjI0Yy4uMDI4ZTNmMGE4MGZjNGVjNDZmZDRk
YTNkYWY0MWU2NGYzMTViYTM5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTIwMDAsNiArMjAw
MCw3IEBAIElGIChFTkFCTEVfVklERU9fVFJBQ0spCiAgICAgICAgIGxvYWRlci9DdWVMb2FkZXIu
Y3BwCiAgICAgICAgIHBsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlci5jcHAKICAgICAgICAgcGxhdGZv
cm0vdHJhY2svV2ViVlRUUGFyc2VyLmNwcAorICAgICAgICBwbGF0Zm9ybS90cmFjay9XZWJWVFRU
b2tlbml6ZXIuY3BwCiAgICAgKQogRU5ESUYoKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTA5YmY4ZDcwYjUy
NmY4ZWQxYzJkNGQzN2U1YTRhYTk0NmUwN2E2Zi4uZGRhODQ3ZmMzMWQ0YzkwYTMzMTYxNGYyNmVh
ODE5MDE0MGM2ZmQxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDExLTA4LTA5ICBB
bm5hIENhdmVuZGVyICA8YW5uYWNjQGNocm9taXVtLm9yZz4KKworICAgICAgICBJbXBsZW1lbnQg
V2ViVlRUIEN1ZSBUZXh0IFBhcnNpbmcgcnVsZXMgYW5kIERPTSBjb25zdHJ1Y3Rpb24KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY0MTMyCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmV3IHRlc3RzIHdpbGwg
bGl2ZSBpbiBtZWRpYS90cmFjayBhbmQgYXJlIGNvbWluZyBzb29uIChzZWUgYnVnIDY1ODg0KS4K
KworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3Qu
YW06CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAg
ICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBodG1s
L1RleHRUcmFja0N1ZS5jcHA6CisgICAgICAgICogaHRtbC9UZXh0VHJhY2tDdWUuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS90cmFjay9DdWVQYXJzZXIuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL3Ry
YWNrL0N1ZVBhcnNlci5oOgorICAgICAgICAqIHBsYXRmb3JtL3RyYWNrL1dlYlZUVFBhcnNlci5j
cHA6CisgICAgICAgICogcGxhdGZvcm0vdHJhY2svV2ViVlRUUGFyc2VyLmg6CisgICAgICAgICog
cGxhdGZvcm0vdHJhY2svV2ViVlRUVG9rZW4uaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0v
dHJhY2svV2ViVlRUVG9rZW5pemVyLmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vdHJh
Y2svV2ViVlRUVG9rZW5pemVyLmg6IEFkZGVkLgorICAgCiAyMDExLTA4LTA5ICBOYXRlIENoYXBp
biAgPGphcGhldEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmVtb3ZlIHJlY2VpdmVkQ2FuY2Vs
bGF0aW9uKCkgZnJvbSBTdWJyZXNvdXJjZUxvYWRlckNsaWVudC4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmls
ZS5saXN0LmFtCmluZGV4IGYzY2JjM2VmN2Y3NjUwODJhNzUzNmQyN2U5M2U0MDhmMzViZjllZGYu
LjljYzUzY2RiN2JjOTE0ZTBhM2QxMTlhOGJiOTg5ZGE3YzRkYWZlZWQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05V
bWFrZWZpbGUubGlzdC5hbQpAQCAtMjg2MSw2ICsyODYxLDkgQEAgd2ViY29yZV9zb3VyY2VzICs9
IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9DdWVQYXJzZXJQcml2YXRlLmggXAog
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL1dlYlZUVFBhcnNlci5jcHAgXAogCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL1dlYlZUVFBhcnNlci5oIFwKKwlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90cmFjay9XZWJWVFRUb2tlbi5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS90cmFjay9XZWJWVFRUb2tlbml6ZXIuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJh
Y2svV2ViVlRUVG9rZW5pemVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVHJlZVNo
YXJlZC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkxTdHJpbmcuaCBcCiAJU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vVVVJRC5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDZlNGNmYjg0
MTQzYzk0YjQ2MGZhZTUwMWZiOThmZmExMWQyMDkwNmQuLmU3ZWVlYTlkYjEzMmViM2FlZTE2OWEx
NjBjODE4NmIxNThlZmEyM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTQ0MjYsNiArNDQyNiw5IEBA
CiAgICAgICAgICAgICAncGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyUHJpdmF0ZS5oJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS90cmFjay9XZWJWVFRQYXJzZXIuY3BwJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS90cmFjay9XZWJWVFRQYXJzZXIuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vdHJh
Y2svV2ViVlRUVG9rZW4uaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vdHJhY2svV2ViVlRUVG9r
ZW5pemVyLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vdHJhY2svV2ViVlRUVG9rZW5pemVy
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL3dpbi9CU3RyaW5nLmNwcCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vd2luL0JTdHJpbmcuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vd2luL0Jp
dG1hcEluZm8uY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggZGVhMWE1NjBhMjUzZmY4M2IwZWVhNWVm
ZGI1YTE3OTE0MjA1YmQ0MC4uYjRiZjg2MWFiZTM3YjZlZTljNGI0NTkxMzc5YTE5NTJiZTM1YmZi
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5wcm8KQEAgLTIxMTgsNiArMjExOCw4IEBAIEhFQURFUlMgKz0gXAogICAg
IHBsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlci5oIFwKICAgICBwbGF0Zm9ybS90cmFjay9DdWVQYXJz
ZXJQcml2YXRlLmggXAogICAgIHBsYXRmb3JtL3RyYWNrL1dlYlZUVFBhcnNlci5oIFwKKyAgICBw
bGF0Zm9ybS90cmFjay9XZWJWVFRUb2tlbi5oIFwKKyAgICBwbGF0Zm9ybS90cmFjay9XZWJWVFRU
b2tlbml6ZXIuaCBcCiAgICAgcGxhdGZvcm0vV2lkZ2V0LmggXAogICAgIHBsYXRmb3JtL1BsYXRm
b3JtU3RyYXRlZ2llcy5oIFwKICAgICBwbGF0Zm9ybS9Mb2NhbGl6ZWRTdHJpbmdzLmggXApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4
IDdiZTc2OWI5Yzk0YTE5ZmFlZGI1MzFkOWE5ZjUzYmIxMmMzYTU3ZmYuLjhkMDRkNjgzYjk1Zjhm
NDNkNmY4NmU2OTExZDU2NTk0OWYyMGI3NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTQwODAsNiArNDA4MCw4IEBACiAJCUFC
RERGRTc5MEE1QzZFNzAwMEEzRTExRCAvKiBSZW5kZXJNZW51TGlzdC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQkRERkU3MzBBNUM2RTZGMDBBM0Ux
MUQgLyogUmVuZGVyTWVudUxpc3QuY3BwICovOyB9OwogCQlBQkRERkU3QTBBNUM2RTcwMDBBM0Ux
MUQgLyogUmVuZGVyTWVudUxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEFCRERGRTc0MEE1QzZFNzAwMEEzRTExRCAvKiBSZW5kZXJNZW51TGlzdC5o
ICovOyB9OwogCQlBRERGMUFENzEyNTdDRDlBMDAwM0E3NTkgLyogUmVuZGVyU1ZHUGF0aC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQURERjFBRDUxMjU3
Q0Q5QTAwMDNBNzU5IC8qIFJlbmRlclNWR1BhdGguaCAqLzsgfTsKKwkJQjEwQkEyMDcxM0YwNUM2
RTAwQkMxQzI2IC8qIFdlYlZUVFRva2VuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCMTBCQTIwNjEzRjA1QzZFMDBCQzFDMjYgLyogV2ViVlRUVG9rZW4u
aCAqLzsgfTsKKwkJQjEwQkEyMEIxM0YwNUM4QzAwQkMxQzI2IC8qIFdlYlZUVFRva2VuaXplci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjEwQkEyMEEx
M0YwNUM4QzAwQkMxQzI2IC8qIFdlYlZUVFRva2VuaXplci5oICovOyB9OwogCQlCMTQzNTNENTEz
OEVBOEVEMDBENTMyNzYgLyogTWVkaWFTdHJlYW1MaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIxNDM1M0QxMTM4RUE4RUQwMEQ1MzI3NiAvKiBN
ZWRpYVN0cmVhbUxpc3QuY3BwICovOyB9OwogCQlCMTQzNTNENjEzOEVBOEVEMDBENTMyNzYgLyog
TWVkaWFTdHJlYW1MaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCMTQzNTNEMjEzOEVBOEVEMDBENTMyNzYgLyogTWVkaWFTdHJlYW1MaXN0LmggKi87
IH07CiAJCUIxNDM1M0Y4MTM4RUE5NUIwMEQ1MzI3NiAvKiBKU01lZGlhU3RyZWFtTGlzdC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMTQzNTNGNjEz
OEVBOTVCMDBENTMyNzYgLyogSlNNZWRpYVN0cmVhbUxpc3QuY3BwICovOyB9OwpAQCAtMTA1OTcs
NiArMTA1OTksOCBAQAogCQlBQkRERkU3NDBBNUM2RTcwMDBBM0UxMUQgLyogUmVuZGVyTWVudUxp
c3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlck1lbnVMaXN0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFEREYxQUQ0MTI1N0NEOUEwMDAzQTc1OSAv
KiBSZW5kZXJTVkdQYXRoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFJlbmRlclNWR1BhdGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBRERGMUFE
NTEyNTdDRDlBMDAwM0E3NTkgLyogUmVuZGVyU1ZHUGF0aC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdQYXRoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUIxMEJBMjA2MTNGMDVDNkUwMEJDMUMyNiAvKiBXZWJWVFRUb2tlbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJWVFRUb2tlbi5oOyBwYXRoID0gcGxhdGZvcm0vdHJh
Y2svV2ViVlRUVG9rZW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjEwQkEyMEEx
M0YwNUM4QzAwQkMxQzI2IC8qIFdlYlZUVFRva2VuaXplci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBXZWJWVFRUb2tlbml6ZXIuaDsgcGF0aCA9IHBsYXRmb3JtL3RyYWNrL1dl
YlZUVFRva2VuaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMTQzNTNEMTEz
OEVBOEVEMDBENTMyNzYgLyogTWVkaWFTdHJlYW1MaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlhU3RyZWFtTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUIxNDM1M0QyMTM4RUE4RUQwMEQ1MzI3NiAvKiBNZWRpYVN0cmVhbUxpc3Qu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFTdHJlYW1MaXN0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIxNDM1M0QzMTM4RUE4RUQwMEQ1MzI3NiAvKiBN
ZWRpYVN0cmVhbUxpc3QuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IE1lZGlhU3RyZWFtTGlz
dC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjkyNCw2ICsxMjkyOCw4IEBA
CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCTY1Qzk3QUYyMDhFQTkw
ODgwMEFDRDI3MyAvKiBjb25maWcuaCAqLywKKwkJCQlCMTBCQTIwQTEzRjA1QzhDMDBCQzFDMjYg
LyogV2ViVlRUVG9rZW5pemVyLmggKi8sCisJCQkJQjEwQkEyMDYxM0YwNUM2RTAwQkMxQzI2IC8q
IFdlYlZUVFRva2VuLmggKi8sCiAJCQkJRURFQzk4MDIwQUVEN0UxNzAwNTkxMzdGIC8qIFdlYkNv
cmVQcmVmaXguaCAqLywKIAkJCQk5MzA3MDYxMzA5RTBDQTgyMDBCMTdGRTQgLyogRGVyaXZlZFNv
dXJjZXMubWFrZSAqLywKIAkJCQk5M0YxOUIxOTA4MjQ1RTU5MDAxRTlBQkMgLyogSW5mby5wbGlz
dCAqLywKQEAgLTIzMzUzLDYgKzIzMzU5LDggQEAKIAkJCQk5NzdFMkUwRjEyRjBGQzlDMDBDMTMz
NzkgLyogWFNTQXVkaXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQ1MzczNTMxMzdCNjUxODAw
MDA4RENFIC8qIFplcm9Qb2xlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1OURFNzkwNjEzRjE2QzhD
MDAwN0ZDREYgLyogSmF2YU1ldGhvZEpTQy5oIGluIEhlYWRlcnMgKi8sCisJCQkJQjEwQkEyMDcx
M0YwNUM2RTAwQkMxQzI2IC8qIFdlYlZUVFRva2VuLmggaW4gSGVhZGVycyAqLywKKwkJCQlCMTBC
QTIwQjEzRjA1QzhDMDBCQzFDMjYgLyogV2ViVlRUVG9rZW5pemVyLmggaW4gSGVhZGVycyAqLywK
IAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dFRyYWNrQ3VlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvVGV4dFRyYWNrQ3VlLmNwcAppbmRleCBkOTQ1YzA3MzMzOTEyY2Q3ZTc4
MWRlODc1ZDRhMzczMzZiYTUwMWRjLi45NzdkYTM1YTkxYTM5YjM3Yjg1ZTUzMjQ5MGY2NmEyMTc3
ZjQ0MjY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRUcmFja0N1ZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0VHJhY2tDdWUuY3BwCkBAIC00MSw4ICs0MSw5
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotVGV4dFRyYWNrQ3VlOjpUZXh0VHJhY2tDdWUo
Y29uc3QgU3RyaW5nJiBpZCwgZG91YmxlIHN0YXJ0LCBkb3VibGUgZW5kLCBjb25zdCBTdHJpbmcm
IGNvbnRlbnQsIGNvbnN0IFN0cmluZyYgc2V0dGluZ3MsIGJvb2wgcGF1c2VPbkV4aXQpCi0gICAg
OiBtX2lkKGlkKQorVGV4dFRyYWNrQ3VlOjpUZXh0VHJhY2tDdWUoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBpZCwgZG91YmxlIHN0YXJ0LCBkb3VibGUgZW5k
LCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGNvbnN0IFN0cmluZyYgc2V0dGluZ3MsIGJvb2wgcGF1
c2VPbkV4aXQpCisgICAgOiBBY3RpdmVET01PYmplY3QoY29udGV4dCwgdGhpcykKKyAgICAsIG1f
aWQoaWQpCiAgICAgLCBtX3N0YXJ0VGltZShzdGFydCkKICAgICAsIG1fZW5kVGltZShlbmQpCiAg
ICAgLCBtX2NvbnRlbnQoY29udGVudCkKQEAgLTEyNyw4ICsxMjgsMTIgQEAgU3RyaW5nIFRleHRU
cmFja0N1ZTo6Z2V0Q3VlQXNTb3VyY2UoKQogCiBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+
IFRleHRUcmFja0N1ZTo6Z2V0Q3VlQXNIVE1MKCkKIHsKLSAgICAvLyBGSVhNRSg2Mjg4Myk6IElt
cGxlbWVudC4KLSAgICByZXR1cm4gRG9jdW1lbnRGcmFnbWVudDo6Y3JlYXRlKDApOworICAgIHJl
dHVybiBtX2RvY3VtZW50RnJhZ21lbnQ7Cit9CisKK3ZvaWQgVGV4dFRyYWNrQ3VlOjpzZXRDdWVI
VE1MKFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQpCit7CisgICAgbV9kb2N1
bWVudEZyYWdtZW50ID0gZnJhZ21lbnQ7CiB9CiAKIGJvb2wgVGV4dFRyYWNrQ3VlOjppc0FjdGl2
ZSgpCkBAIC0xNDIsNiArMTQ3LDExIEBAIHZvaWQgVGV4dFRyYWNrQ3VlOjpzZXRJc0FjdGl2ZShi
b29sIGFjdGl2ZSkKICAgICBtX2lzQWN0aXZlID0gYWN0aXZlOwogfQogCitTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBUZXh0VHJhY2tDdWU6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdAor
eworICAgIHJldHVybiBBY3RpdmVET01PYmplY3Q6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsK
K30KKwogdm9pZCBUZXh0VHJhY2tDdWU6OnBhcnNlU2V0dGluZ3MoY29uc3QgU3RyaW5nJiBpbnB1
dCkKIHsKICAgICAvLyA0LjguMTAuMTMuMyBQYXJzZSB0aGUgV2ViVlRUIHNldHRpbmdzLgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0VHJhY2tDdWUuaCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvVGV4dFRyYWNrQ3VlLmgKaW5kZXggYTJkMTIxY2VmMTA0NzMwNTJkNzU1YmUwOTcw
ZDY4MWRkZDlkYmQxZi4uYWMyMzIxNDQyOTcyYzlkOThhZGI4ZjAzZDAyOGVjNjY4ZTIyZjBkYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0VHJhY2tDdWUuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL1RleHRUcmFja0N1ZS5oCkBAIC0zMyw2ICszMyw3IEBACiAKICNpZiBF
TkFCTEUoVklERU9fVFJBQ0spCiAKKyNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKICNpbmNs
dWRlICJUZXh0VHJhY2suaCIKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CkBAIC00MCwxMyArNDEsMTQgQEAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgRG9jdW1lbnRGcmFnbWVudDsKK2NsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQ7CiBjbGFzcyBUZXh0VHJhY2s7CiAKLWNsYXNzIFRleHRUcmFja0N1ZSA6IHB1YmxpYyBSZWZD
b3VudGVkPFRleHRUcmFja0N1ZT4geworY2xhc3MgVGV4dFRyYWNrQ3VlIDogcHVibGljIFJlZkNv
dW50ZWQ8VGV4dFRyYWNrQ3VlPiwgcHVibGljIEFjdGl2ZURPTU9iamVjdCB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBp
ZCwgZG91YmxlIHN0YXJ0LCBkb3VibGUgZW5kLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGNvbnN0
IFN0cmluZyYgc2V0dGluZ3MsIGJvb2wgcGF1c2VPbkV4aXQpCisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8VGV4dFRyYWNrQ3VlPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
Y29uc3QgU3RyaW5nJiBpZCwgZG91YmxlIHN0YXJ0LCBkb3VibGUgZW5kLCBjb25zdCBTdHJpbmcm
IGNvbnRlbnQsIGNvbnN0IFN0cmluZyYgc2V0dGluZ3MsIGJvb2wgcGF1c2VPbkV4aXQpCiAgICAg
ewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHRUcmFja0N1ZShpZCwgc3RhcnQsIGVu
ZCwgY29udGVudCwgc2V0dGluZ3MsIHBhdXNlT25FeGl0KSk7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgVGV4dFRyYWNrQ3VlKGNvbnRleHQsIGlkLCBzdGFydCwgZW5kLCBjb250ZW50LCBz
ZXR0aW5ncywgcGF1c2VPbkV4aXQpKTsKICAgICB9CiAgICAgCiAgICAgZW51bSBEaXJlY3Rpb24g
eyBIb3Jpem9udGFsLCBWZXJ0aWNhbEdyb3dpbmdMZWZ0LCBWZXJ0aWNhbEdyb3dpbmdSaWdodCB9
OwpAQCAtNzEsMTIgKzczLDE1IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBnZXRDdWVBc1NvdXJj
ZSgpOwogICAgIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZ2V0Q3VlQXNIVE1MKCk7Cisg
ICAgdm9pZCBzZXRDdWVIVE1MKFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4pOwogCiAgICAg
Ym9vbCBpc0FjdGl2ZSgpOwogICAgIHZvaWQgc2V0SXNBY3RpdmUoYm9vbCk7CisgICAgCisgICAg
dmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkg
Y29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgVGV4dFRyYWNrQ3VlKGNvbnN0IFN0cmluZyYgaWQsIGRv
dWJsZSBzdGFydCwgZG91YmxlIGVuZCwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBjb25zdCBTdHJp
bmcmIHNldHRpbmdzLCBib29sIHBhdXNlT25FeGl0KTsKKyAgICBUZXh0VHJhY2tDdWUoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgaWQsIGRvdWJsZSBzdGFydCwgZG91Ymxl
IGVuZCwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBjb25zdCBTdHJpbmcmIHNldHRpbmdzLCBib29s
IHBhdXNlT25FeGl0KTsKIAogICAgIHZvaWQgcGFyc2VTZXR0aW5ncyhjb25zdCBTdHJpbmcmKTsK
ICAgICAKQEAgLTkzLDYgKzk4LDcgQEAgcHJpdmF0ZToKICAgICBpbnQgbV90ZXh0UG9zaXRpb247
CiAgICAgaW50IG1fY3VlU2l6ZTsKICAgICBBbGlnbm1lbnQgbV9jdWVBbGlnbm1lbnQ7CisgICAg
UmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IG1fZG9jdW1lbnRGcmFnbWVudDsKIAogICAgIGJvb2wg
bV9pc0FjdGl2ZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFj
ay9DdWVQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svQ3VlUGFyc2Vy
LmNwcAppbmRleCA0YTY4NjliYTlkYjQ3MWM0NjRmYzQwZGI0MGM4MjEwY2U5NjRkMjMzLi40OTA0
N2MxMjBkMjk1ZGNiMzgzOTJhZDY5ZTIzOWRkM2MwYjkyYzc1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90cmFjay9DdWVQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlci5jcHAKQEAgLTYxLDYgKzYxLDcgQEAgdm9pZCBDdWVQ
YXJzZXI6OmxvYWQoY29uc3QgU3RyaW5nJiB1cmwsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQsIEN1ZVBhcnMKICAgICBvcHRpb25zLmNyb3NzT3JpZ2luUmVxdWVzdFBvbGljeSA9IEFs
bG93Q3Jvc3NPcmlnaW5SZXF1ZXN0czsKIAogICAgIG1fY2xpZW50ID0gY2xpZW50OworICAgIG1f
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IGNvbnRleHQ7CiAKICAgICBtX2xvYWRlciA9IFRocmVh
ZGFibGVMb2FkZXI6OmNyZWF0ZShjb250ZXh0LCB0aGlzLCByZXF1ZXN0LCBvcHRpb25zKTsKIH0K
QEAgLTExMCw3ICsxMTEsNyBAQCB2b2lkIEN1ZVBhcnNlcjo6bmV3Q3Vlc1BhcnNlZCgpCiB2b2lk
IEN1ZVBhcnNlcjo6Y3JlYXRlV2ViVlRUUGFyc2VyKCkKIHsKICAgICBpZiAoIW1fcHJpdmF0ZSkg
ewotICAgICAgICBtX3ByaXZhdGUgPSBXZWJWVFRQYXJzZXI6OmNyZWF0ZSh0aGlzKTsKKyAgICAg
ICAgbV9wcml2YXRlID0gV2ViVlRUUGFyc2VyOjpjcmVhdGUodGhpcywgbV9zY3JpcHRFeGVjdXRp
b25Db250ZXh0KTsKICAgICAgICAgbV9jbGllbnQtPnRyYWNrTG9hZFN0YXJ0ZWQoKTsKICAgICB9
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9DdWVQYXJzZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlci5oCmluZGV4IDdjNmM2
MzE3NGU1NzgzNjk2MDZlZGEyNWY0OGFkNTQ5OGQwODVmMDguLjc4MWYwNTgwYmVkYzA2OGZmYTA0
NjJlZmNiZDFhZjNmNjU5M2Q3NDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RyYWNrL0N1ZVBhcnNlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL0N1
ZVBhcnNlci5oCkBAIC02OSw2ICs2OSw5IEBAIHB1YmxpYzoKICAgICB2b2lkIGZldGNoUGFyc2Vk
Q3VlcyhWZWN0b3I8UmVmUHRyPFRleHRUcmFja0N1ZT4gPiYpOwogICAgIHZvaWQgbmV3Q3Vlc1Bh
cnNlZCgpOwogCitwcm90ZWN0ZWQ6CisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogbV9zY3Jp
cHRFeGVjdXRpb25Db250ZXh0OworCiBwcml2YXRlOgogICAgIHZvaWQgY3JlYXRlV2ViVlRUUGFy
c2VyKCk7CiAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9XZWJW
VFRQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svV2ViVlRUUGFyc2Vy
LmNwcAppbmRleCBmMjY0NDM0NjJkYzM0YTdjYWZiNjEyMzc4YjY2MGY2OGI0OTdlMmM2Li5kY2I1
Yzc5ZGVhY2U1MGI3NGFjYTMzNmJjZDY5ZTAxZWQwMTRjOWI2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90cmFjay9XZWJWVFRQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RyYWNrL1dlYlZUVFBhcnNlci5jcHAKQEAgLTM0LDEwICszNCwxNyBAQAog
CiAjaW5jbHVkZSAiV2ViVlRUUGFyc2VyLmgiCiAKKyNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgor
I2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIlByb2Nlc3NpbmdJbnN0cnVjdGlvbi5o
IgorI2luY2x1ZGUgIlNlZ21lbnRlZFN0cmluZy5oIgorI2luY2x1ZGUgIlRleHQuaCIKICNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCit1c2lu
ZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCiBib29sIFdlYlZUVFBhcnNlcjo6aGFzUmVxdWlyZWRG
aWxlSWRlbnRpZmllcihjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAg
Ly8gQSBXZWJWVFQgZmlsZSBpZGVudGlmaWVyIGNvbnNpc3RzIG9mIGFuIG9wdGlvbmFsIEJPTSBj
aGFyYWN0ZXIsCkBAIC03OCw4ICs4NSwxMCBAQCBTdHJpbmcgV2ViVlRUUGFyc2VyOjpjb2xsZWN0
V29yZChjb25zdCBTdHJpbmcmIGlucHV0LCB1bnNpZ25lZCogcG9zaXRpb24pCiAgICAgcmV0dXJu
IHN0cmluZy50b1N0cmluZygpOwogfQogCi1XZWJWVFRQYXJzZXI6OldlYlZUVFBhcnNlcihDdWVQ
YXJzZXJQcml2YXRlQ2xpZW50KiBjbGllbnQpCi0gICAgOiBtX3N0YXRlKEluaXRpYWwpCitXZWJW
VFRQYXJzZXI6OldlYlZUVFBhcnNlcihDdWVQYXJzZXJQcml2YXRlQ2xpZW50KiBjbGllbnQsIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCisgICAgOiBtX3NjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoY29udGV4dCkKKyAgICAsIG1fc3RhdGUoSW5pdGlhbCkKKyAgICAsIG1fdG9rZW5pemVy
KFdlYlZUVFRva2VuaXplcjo6Y3JlYXRlKCkpCiB7CiAgICAgbV9jbGllbnQgPSBjbGllbnQ7CiB9
CkBAIC0yMDQsMTAgKzIxMyw4MSBAQCBXZWJWVFRQYXJzZXI6OlBhcnNlU3RhdGUgV2ViVlRUUGFy
c2VyOjppZ25vcmVCYWRDdWUoY29uc3QgU3RyaW5nJiBsaW5lKQogCiB2b2lkIFdlYlZUVFBhcnNl
cjo6cHJvY2Vzc0N1ZVRleHQoKQogewotICAgIC8vIDUxIC0gQ3VlIHRleHQgcHJvY2Vzc2luZyBi
YXNlZCBvbiBXZWJWVFQgY3VlIHRleHQgcGFyc2luZyBydWxlcyBhbmQgV2ViVlRUIGN1ZSB0ZXh0
IERPTSBjb25zdHJ1Y3Rpb24gcnVsZXMuCi0gICAgLy8gRklYTUUoNjQxMzIpOiBQcm9jZXNzIHRo
ZSBjdWUgdGV4dCBhcyBwZXIgdGhlIGN1ZSB0ZXh0IHBhcnNpbmcgcnVsZXMuIAotICAgIC8vICAg
ICBTb3VyY2U6IGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdv
cmsvbXVsdGlwYWdlL3RoZS1pZnJhbWUtZWxlbWVudC5odG1sI3dlYnZ0dC1jdWUtdGV4dC1wYXJz
aW5nLXJ1bGVzCi0gICAgUmVmUHRyPFRleHRUcmFja0N1ZT4gY3VlID0gVGV4dFRyYWNrQ3VlOjpj
cmVhdGUobV9jdXJyZW50SWQsIG1fY3VycmVudFN0YXJ0VGltZSwgbV9jdXJyZW50RW5kVGltZSwg
bV9jdXJyZW50Q29udGVudC50b1N0cmluZygpLCBtX2N1cnJlbnRTZXR0aW5ncywgZmFsc2UpOwor
ICAgIC8vIDUxIC0gQ3VlIHRleHQgcHJvY2Vzc2luZyBiYXNlZCBvbgorICAgIC8vIDQuOC4xMC4x
My40IFdlYlZUVCBjdWUgdGV4dCBwYXJzaW5nIHJ1bGVzIGFuZAorICAgIC8vIDQuOC4xMC4xMy41
IFdlYlZUVCBjdWUgdGV4dCBET00gY29uc3RydWN0aW9uIHJ1bGVzLgorICAgIEFTU0VSVChtX3Nj
cmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzRG9jdW1lbnQoKSk7CisgICAgRG9jdW1lbnQqIGRvY3Vt
ZW50ID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwor
CisgICAgbV9hdHRhY2htZW50Um9vdCA9IERvY3VtZW50RnJhZ21lbnQ6OmNyZWF0ZShkb2N1bWVu
dCk7CisgICAgbV9jdXJyZW50Tm9kZSA9IG1fYXR0YWNobWVudFJvb3Q7CisgICAgICAgIAorICAg
IFNlZ21lbnRlZFN0cmluZyBjb250ZW50KG1fY3VycmVudENvbnRlbnQudG9TdHJpbmcoKSk7Cisg
ICAgd2hpbGUgKG1fdG9rZW5pemVyLT5uZXh0VG9rZW4oY29udGVudCwgbV90b2tlbikpIHsKKwor
ICAgICAgICBBdG9taWNTdHJpbmcgdG9rZW5UYWdOYW1lKG1fdG9rZW4ubmFtZSgpLmRhdGEoKSwg
bV90b2tlbi5uYW1lKCkuc2l6ZSgpKTsKKyAgICAgICAgUXVhbGlmaWVkTmFtZSB0YWdOYW1lKG51
bGxBdG9tLCB0b2tlblRhZ05hbWUsIHhodG1sTmFtZXNwYWNlVVJJKTsKKyAgICAgICAgCisgICAg
ICAgIHN3aXRjaCAobV90b2tlbi50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBXZWJWVFRUb2tlblR5
cGVzOjpDaGFyYWN0ZXI6CisgICAgICAgICAgICB7CisgICAgICAgICAgICBBdG9taWNTdHJpbmcg
Y29udGVudChtX3Rva2VuLmNoYXJhY3RlcnMoKS5kYXRhKCksIG1fdG9rZW4uY2hhcmFjdGVycygp
LnNpemUoKSk7CisgICAgICAgICAgICBSZWZQdHI8VGV4dD4gY2hpbGQgPSBUZXh0OjpjcmVhdGUo
ZG9jdW1lbnQsIGNvbnRlbnQpOworICAgICAgICAgICAgbV9jdXJyZW50Tm9kZS0+cGFyc2VyQWRk
Q2hpbGQoY2hpbGQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
IGNhc2UgV2ViVlRUVG9rZW5UeXBlczo6U3RhcnRUYWc6CisgICAgICAgICAgICB7CisgICAgICAg
ICAgICBSZWZQdHI8SFRNTEVsZW1lbnQ+IGNoaWxkOworICAgICAgICAgICAgaWYgKHRva2VuVGFn
TmFtZSA9PSBpVGFnCisgICAgICAgICAgICAgICAgfHwgdG9rZW5UYWdOYW1lID09IGJUYWcKKyAg
ICAgICAgICAgICAgICB8fCB0b2tlblRhZ05hbWUgPT0gdVRhZworICAgICAgICAgICAgICAgIHx8
IHRva2VuVGFnTmFtZSA9PSBydWJ5VGFnCisgICAgICAgICAgICAgICAgfHwgdG9rZW5UYWdOYW1l
ID09IHJ0VGFnKQorICAgICAgICAgICAgICAgIGNoaWxkID0gSFRNTEVsZW1lbnQ6OmNyZWF0ZSh0
YWdOYW1lLCBkb2N1bWVudCk7CisgICAgICAgICAgICBlbHNlIGlmIChBdG9taWNTdHJpbmcobV90
b2tlbi5uYW1lKCkuZGF0YSgpKSA9PSAiYyIpCisgICAgICAgICAgICAgICAgY2hpbGQgPSBIVE1M
RWxlbWVudDo6Y3JlYXRlKHNwYW5UYWcsIGRvY3VtZW50KTsKKyAgICAgICAgICAgIGVsc2UgaWYg
KEF0b21pY1N0cmluZyhtX3Rva2VuLm5hbWUoKS5kYXRhKCkpID09ICJ2IikgeworICAgICAgICAg
ICAgICAgIGNoaWxkID0gSFRNTEVsZW1lbnQ6OmNyZWF0ZShxVGFnLCBkb2N1bWVudCk7CisgICAg
ICAgICAgICAgICAgY2hpbGQtPnNldEF0dHJpYnV0ZSh0aXRsZUF0dHIsIG1fdG9rZW4uYW5ub3Rh
dGlvbigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGNoaWxkKSB7CisgICAg
ICAgICAgICAgICAgUmVmUHRyPE5hbWVkTm9kZU1hcD4gYXR0cmlidXRlTWFwID0gTmFtZWROb2Rl
TWFwOjpjcmVhdGUoY2hpbGQuZ2V0KCkpOworICAgICAgICAgICAgICAgIGF0dHJpYnV0ZU1hcC0+
c2V0Q2xhc3MobV90b2tlbi5jbGFzc2VzKCkpOworICAgICAgICAgICAgICAgIGNoaWxkLT5zZXRB
dHRyaWJ1dGVNYXAoYXR0cmlidXRlTWFwLCBGcmFnbWVudFNjcmlwdGluZ05vdEFsbG93ZWQpOwor
ICAgICAgICAgICAgICAgIG1fY3VycmVudE5vZGUtPnBhcnNlckFkZENoaWxkKGNoaWxkKTsKKyAg
ICAgICAgICAgICAgICBtX2N1cnJlbnROb2RlID0gY2hpbGQ7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSBXZWJWVFRUb2tlblR5
cGVzOjpFbmRUYWc6CisgICAgICAgICAgICAgaWYgKHRva2VuVGFnTmFtZSA9PSBpVGFnCisgICAg
ICAgICAgICAgICAgfHwgdG9rZW5UYWdOYW1lID09IGJUYWcKKyAgICAgICAgICAgICAgICB8fCB0
b2tlblRhZ05hbWUgPT0gdVRhZworICAgICAgICAgICAgICAgIHx8IHRva2VuVGFnTmFtZSA9PSBy
dWJ5VGFnCisgICAgICAgICAgICAgICAgfHwgdG9rZW5UYWdOYW1lID09IHJ0VGFnCisgICAgICAg
ICAgICAgICAgfHwgQXRvbWljU3RyaW5nKG1fdG9rZW4ubmFtZSgpLmRhdGEoKSkgPT0gImMiCisg
ICAgICAgICAgICAgICAgfHwgQXRvbWljU3RyaW5nKG1fdG9rZW4ubmFtZSgpLmRhdGEoKSkgPT0g
InYiKQorICAgICAgICAgICAgICAgIG1fY3VycmVudE5vZGUgPSBtX2N1cnJlbnROb2RlLT5wYXJl
bnROb2RlKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXZWJWVFRUb2tlblR5
cGVzOjpUaW1lc3RhbXBUYWc6CisgICAgICAgICAgICB7CisgICAgICAgICAgICB1bnNpZ25lZCBw
b3NpdGlvbiA9IDA7CisgICAgICAgICAgICBkb3VibGUgdGltZSA9IGNvbGxlY3RUaW1lU3RhbXAo
bV90b2tlbi5jaGFyYWN0ZXJzKCkuZGF0YSgpLCAmcG9zaXRpb24pOworICAgICAgICAgICAgaWYg
KHRpbWUgIT0gbWFsZm9ybWVkVGltZSkKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnROb2RlLT5w
YXJzZXJBZGRDaGlsZChQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OmNyZWF0ZShkb2N1bWVudCwgInRp
bWVzdGFtcCIsIEF0b21pY1N0cmluZyhtX3Rva2VuLmNoYXJhY3RlcnMoKS5kYXRhKCksIG1fdG9r
ZW4uY2hhcmFjdGVycygpLnNpemUoKSkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIG1fdG9rZW4uY2xlYXIoKTsKKyAgICB9CisgICAgCisgICAgUmVmUHRy
PFRleHRUcmFja0N1ZT4gY3VlID0gVGV4dFRyYWNrQ3VlOjpjcmVhdGUobV9zY3JpcHRFeGVjdXRp
b25Db250ZXh0LCBtX2N1cnJlbnRJZCwgbV9jdXJyZW50U3RhcnRUaW1lLCBtX2N1cnJlbnRFbmRU
aW1lLCBtX2N1cnJlbnRDb250ZW50LnRvU3RyaW5nKCksIG1fY3VycmVudFNldHRpbmdzLCBmYWxz
ZSk7CisgICAgY3VlLT5zZXRDdWVIVE1MKG1fYXR0YWNobWVudFJvb3QpOwogICAgIG1fY3VlbGlz
dC5hcHBlbmQoY3VlKTsKICAgICBtX2NsaWVudC0+bmV3Q3Vlc1BhcnNlZCgpOwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svV2ViVlRUUGFyc2VyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9XZWJWVFRQYXJzZXIuaAppbmRleCBhNjkzNTJjMGQ4
NzkyMjM0MzQwNGU2ZjFlMDk3YjU5MDgzYWI5NWQ5Li45ZjU3MWJkMzIyNzIzOWI4YTk5Y2E2Yzc1
OTFmMzc1MjQzOGI4OWUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFj
ay9XZWJWVFRQYXJzZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9XZWJW
VFRQYXJzZXIuaApAQCAtMzQsNiArMzQsOSBAQAogI2lmIEVOQUJMRShWSURFT19UUkFDSykKIAog
I2luY2x1ZGUgIkN1ZVBhcnNlclByaXZhdGUuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2lu
Y2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKKyNpbmNsdWRlICJXZWJWVFRUb2tlbml6ZXIuaCIK
ICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1
aWxkZXIuaD4KIApAQCAtNDksOSArNTIsOSBAQCBwdWJsaWM6CiAgICAgCiAgICAgZW51bSBQYXJz
ZVN0YXRlIHsgSW5pdGlhbCwgSGVhZGVyLCBJZCwgVGltaW5nc0FuZFNldHRpbmdzLCBDdWVUZXh0
LCBCYWRDdWUgfTsKIAotICAgIHN0YXRpYyBQYXNzT3duUHRyPFdlYlZUVFBhcnNlcj4gY3JlYXRl
KEN1ZVBhcnNlclByaXZhdGVDbGllbnQqIGNsaWVudCkKKyAgICBzdGF0aWMgUGFzc093blB0cjxX
ZWJWVFRQYXJzZXI+IGNyZWF0ZShDdWVQYXJzZXJQcml2YXRlQ2xpZW50KiBjbGllbnQsIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRQ
dHIobmV3IFdlYlZUVFBhcnNlcihjbGllbnQpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5l
dyBXZWJWVFRQYXJzZXIoY2xpZW50LCBjb250ZXh0KSk7CiAgICAgfQogICAgIAogICAgIHN0YXRp
YyBib29sIGhhc1JlcXVpcmVkRmlsZUlkZW50aWZpZXIoY29uc3QgY2hhciogZGF0YSwgdW5zaWdu
ZWQgbGVuZ3RoKTsKQEAgLTY5LDggKzcyLDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBw
YXJzZUJ5dGVzKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCk7CiAKIHByb3RlY3Rl
ZDoKLSAgICBXZWJWVFRQYXJzZXIoQ3VlUGFyc2VyUHJpdmF0ZUNsaWVudCopOworICAgIFdlYlZU
VFBhcnNlcihDdWVQYXJzZXJQcml2YXRlQ2xpZW50KiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCop
OwogICAgIAorICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIG1fc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dDsKICAgICBQYXJzZVN0YXRlIG1fc3RhdGU7CiAKIHByaXZhdGU6CkBAIC05MSw2ICs5NSwx
MiBAQCBwcml2YXRlOgogICAgIGRvdWJsZSBtX2N1cnJlbnRFbmRUaW1lOwogICAgIFN0cmluZ0J1
aWxkZXIgbV9jdXJyZW50Q29udGVudDsKICAgICBTdHJpbmcgbV9jdXJyZW50U2V0dGluZ3M7Cisg
ICAgCisgICAgV2ViVlRUVG9rZW4gbV90b2tlbjsKKyAgICBPd25QdHI8V2ViVlRUVG9rZW5pemVy
PiBtX3Rva2VuaXplcjsKKworICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBtX2F0dGFjaG1l
bnRSb290OworICAgIFJlZlB0cjxDb250YWluZXJOb2RlPiBtX2N1cnJlbnROb2RlOwogCiAgICAg
Q3VlUGFyc2VyUHJpdmF0ZUNsaWVudCogbV9jbGllbnQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RyYWNrL1dlYlZUVFRva2VuLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90cmFjay9XZWJWVFRUb2tlbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE3ZjdiMWY0MmU3MDdiYWEwMWE2
ZDhjMmIyY2I1MzQyNTFhOWU0M2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90cmFjay9XZWJWVFRUb2tlbi5oCkBAIC0wLDAgKzEsMTM2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmli
dXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2Vi
VlRUVG9rZW5faAorI2RlZmluZSBXZWJWVFRUb2tlbl9oCisKKyNpZiBFTkFCTEUoVklERU9fVFJB
Q0spCisKKyNpbmNsdWRlICJNYXJrdXBUb2tlbkJhc2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBXZWJWVFRUb2tlblR5cGVzIHsKK3B1YmxpYzoKKyAgICBlbnVtIFR5cGUgewor
ICAgICAgICBVbmluaXRpYWxpemVkLAorICAgICAgICBDaGFyYWN0ZXIsCisgICAgICAgIFN0YXJ0
VGFnLAorICAgICAgICBFbmRUYWcsCisgICAgICAgIFRpbWVzdGFtcFRhZywKKyAgICAgICAgRW5k
T2ZGaWxlLAorICAgIH07Cit9OworCitjbGFzcyBXZWJWVFRUb2tlbiA6IHB1YmxpYyBNYXJrdXBU
b2tlbkJhc2U8V2ViVlRUVG9rZW5UeXBlcz4geworcHVibGljOgorICAgIHZvaWQgYXBwZW5kVG9O
YW1lKFVDaGFyIGNoYXJhY3RlcikKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gV2Vi
VlRUVG9rZW5UeXBlczo6U3RhcnRUYWcgfHwgbV90eXBlID09IFdlYlZUVFRva2VuVHlwZXM6OkVu
ZFRhZyk7CisgICAgICAgIE1hcmt1cFRva2VuQmFzZTxXZWJWVFRUb2tlblR5cGVzPjo6YXBwZW5k
VG9OYW1lKGNoYXJhY3Rlcik7CisgICAgfQorICAgIAorICAgIGNvbnN0IERhdGFWZWN0b3ImIG5h
bWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBXZWJWVFRUb2tlblR5
cGVzOjpTdGFydFRhZyB8fCBtX3R5cGUgPT0gV2ViVlRUVG9rZW5UeXBlczo6RW5kVGFnKTsKKyAg
ICAgICAgcmV0dXJuIE1hcmt1cFRva2VuQmFzZTxXZWJWVFRUb2tlblR5cGVzPjo6bmFtZSgpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGJlZ2luVGltZXN0YW1wVGFnKFVDaGFyIGNoYXJhY3RlcikK
KyAgICB7CisgICAgICAgIEFTU0VSVChjaGFyYWN0ZXIpOworICAgICAgICBBU1NFUlQobV90eXBl
ID09IFR5cGU6OlVuaW5pdGlhbGl6ZWQpOworICAgICAgICBtX3R5cGUgPSBUeXBlOjpUaW1lc3Rh
bXBUYWc7CisgICAgICAgIG1fc2VsZkNsb3NpbmcgPSB0cnVlOworCisgICAgICAgIG1fZGF0YS5h
cHBlbmQoY2hhcmFjdGVyKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhcHBlbmRUb1RpbWVzdGFt
cChVQ2hhciBjaGFyYWN0ZXIpCisgICAgeworICAgICAgICBBU1NFUlQoY2hhcmFjdGVyKTsKKyAg
ICAgICAgQVNTRVJUKG1fdHlwZSA9PSBUeXBlOjpUaW1lc3RhbXBUYWcpOworICAgICAgICBtX2Rh
dGEuYXBwZW5kKGNoYXJhY3Rlcik7CisgICAgfQorICAgIAorICAgIHZvaWQgYXBwZW5kVG9DbGFz
cyhVQ2hhciBjaGFyYWN0ZXIpCisgICAgeworICAgICAgICBhcHBlbmRUb1N0YXJ0VHlwZShjaGFy
YWN0ZXIpOworICAgIH0KKworICAgIHZvaWQgYWRkTmV3Q2xhc3MoKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKG1fdHlwZSA9PSBUeXBlOjpTdGFydFRhZyk7CisgICAgICAgIGlmIChtX2NsYXNzZXMg
IT0gZW1wdHlTdHJpbmcoKSkKKyAgICAgICAgICAgIG1fY2xhc3Nlcy5hcHBlbmQoJyAnKTsKKyAg
ICAgICAgbV9jbGFzc2VzLmFwcGVuZChtX2N1cnJlbnRCdWZmZXIpOworICAgICAgICBtX2N1cnJl
bnRCdWZmZXIgPSBlbXB0eVN0cmluZygpOworICAgIH0KKyAgICAKKyAgICBTdHJpbmcgY2xhc3Nl
cygpCisgICAgeworICAgICAgICByZXR1cm4gbV9jbGFzc2VzOworICAgIH0KKworICAgIHZvaWQg
YXBwZW5kVG9Bbm5vdGF0aW9uKFVDaGFyIGNoYXJhY3RlcikKKyAgICB7CisgICAgICAgIGFwcGVu
ZFRvU3RhcnRUeXBlKGNoYXJhY3Rlcik7CisgICAgfQorICAgICAgICAKKyAgICB2b2lkIGFkZE5l
d0Fubm90YXRpb24oKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBUeXBlOjpTdGFy
dFRhZyk7CisgICAgICAgIG1fYW5ub3RhdGlvbiA9IGVtcHR5U3RyaW5nKCk7CisgICAgICAgIG1f
YW5ub3RhdGlvbi5hcHBlbmQobV9jdXJyZW50QnVmZmVyKTsKKyAgICAgICAgbV9jdXJyZW50QnVm
ZmVyID0gZW1wdHlTdHJpbmcoKTsKKyAgICB9CisgICAgCisgICAgU3RyaW5nIGFubm90YXRpb24o
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYW5ub3RhdGlvbjsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgdm9pZCBhcHBlbmRUb1N0YXJ0VHlwZShVQ2hhciBjaGFyYWN0ZXIpCisgICAgeworICAg
ICAgICBBU1NFUlQoY2hhcmFjdGVyKTsKKyAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBUeXBlOjpT
dGFydFRhZyk7CisgICAgICAgIG1fY3VycmVudEJ1ZmZlci5hcHBlbmQoY2hhcmFjdGVyKTsKKyAg
ICB9CisKKyAgICBTdHJpbmcgbV9hbm5vdGF0aW9uOworICAgIFN0cmluZyBtX2NsYXNzZXM7Cisg
ICAgU3RyaW5nIG1fY3VycmVudEJ1ZmZlcjsKK307CisKK30KKworI2VuZGlmCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL1dlYlZUVFRva2VuaXplci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9XZWJWVFRUb2tlbml6ZXIuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjhkOGRiMjcxNzM0Mjk5M2FkZmZiYzhkZTNmNWUyYzc4ZGZlNGZlZTAKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9XZWJWVFRUb2tlbml6
ZXIuY3BwCkBAIC0wLDAgKzEsMjI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2ds
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJM
RShWSURFT19UUkFDSykKKworI2luY2x1ZGUgIldlYlZUVFRva2VuaXplci5oIgorCisjaW5jbHVk
ZSAiTWFya3VwVG9rZW5pemVySW5saW5lTWV0aG9kcy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKKyNkZWZpbmUgV0VCVlRUX0JFR0lOX1NUQVRFKHN0YXRlTmFtZSkgQkVHSU5fU1RBVEUoV2Vi
VlRUVG9rZW5pemVyU3RhdGUsIHN0YXRlTmFtZSkKKyNkZWZpbmUgV0VCVlRUX0FEVkFOQ0VfVE8o
c3RhdGVOYW1lKSBBRFZBTkNFX1RPKFdlYlZUVFRva2VuaXplclN0YXRlLCBzdGF0ZU5hbWUpCisK
K1dlYlZUVFRva2VuaXplcjo6V2ViVlRUVG9rZW5pemVyKCkKK3sKKyAgICByZXNldCgpOworfQor
Cit0ZW1wbGF0ZTw+CitpbmxpbmUgYm9vbCBNYXJrdXBUb2tlbml6ZXJCYXNlPFdlYlZUVFRva2Vu
LCBXZWJWVFRUb2tlbml6ZXJTdGF0ZT46OnNob3VsZFNraXBOdWxsQ2hhcmFjdGVycygpIGNvbnN0
Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2lubGluZSBib29sIHZlY3RvckVxdWFsc1N0cmlu
Zyhjb25zdCBWZWN0b3I8VUNoYXIsIDMyPiYgdmVjdG9yLCBjb25zdCBTdHJpbmcmIHN0cmluZykK
K3sKKyAgICBpZiAodmVjdG9yLnNpemUoKSAhPSBzdHJpbmcubGVuZ3RoKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBjb25zdCBVQ2hhciogc3RyaW5nRGF0YSA9IHN0cmluZy5jaGFyYWN0
ZXJzKCk7CisgICAgY29uc3QgVUNoYXIqIHZlY3RvckRhdGEgPSB2ZWN0b3IuZGF0YSgpOworICAg
IHJldHVybiAhbWVtY21wKHN0cmluZ0RhdGEsIHZlY3RvckRhdGEsIHZlY3Rvci5zaXplKCkgKiBz
aXplb2YoVUNoYXIpKTsKK30KKwordm9pZCBXZWJWVFRUb2tlbml6ZXI6OnJlc2V0KCkKK3sKKyAg
ICBtX3N0YXRlID0gV2ViVlRUVG9rZW5pemVyU3RhdGU6OkRhdGFTdGF0ZTsKKyAgICBtX3Rva2Vu
ID0gMDsKKyAgICBtX2xpbmVOdW1iZXIgPSAwOworICAgIG1fYnVmZmVyLmNsZWFyKCk7Cit9Cisg
ICAgCitib29sIFdlYlZUVFRva2VuaXplcjo6bmV4dFRva2VuKFNlZ21lbnRlZFN0cmluZyYgc291
cmNlLCBXZWJWVFRUb2tlbiYgdG9rZW4pCit7CisgICAgLy8gSWYgd2UgaGF2ZSBhIHRva2VuIGlu
IHByb2dyZXNzLCB0aGVuIHdlJ3JlIHN1cHBvc2VkIHRvIGJlIGNhbGxlZCBiYWNrCisgICAgLy8g
d2l0aCB0aGUgc2FtZSB0b2tlbiBzbyB3ZSBjYW4gZmluaXNoIGl0LgorICAgIEFTU0VSVCghbV90
b2tlbiB8fCBtX3Rva2VuID09ICZ0b2tlbiB8fCB0b2tlbi50eXBlKCkgPT0gV2ViVlRUVG9rZW5U
eXBlczo6VW5pbml0aWFsaXplZCk7CisgICAgbV90b2tlbiA9ICZ0b2tlbjsKKworICAgIGlmIChz
b3VyY2UuaXNFbXB0eSgpIHx8ICFtX2lucHV0U3RyZWFtUHJlcHJvY2Vzc29yLnBlZWsoc291cmNl
LCBtX2xpbmVOdW1iZXIpKQorICAgICAgICByZXR1cm4gaGF2ZUJ1ZmZlcmVkQ2hhcmFjdGVyVG9r
ZW4oKTsKKworICAgIFVDaGFyIGNjID0gbV9pbnB1dFN0cmVhbVByZXByb2Nlc3Nvci5uZXh0SW5w
dXRDaGFyYWN0ZXIoKTsKKworICAgIC8vIDQuOC4xMC4xMy40IFdlYlZUVCBjdWUgdGV4dCB0b2tl
bml6ZXIKKyAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICBXRUJWVFRfQkVHSU5fU1RBVEUoRGF0
YVN0YXRlKSB7CisgICAgICAgIGlmIChjYyA9PSAnJicpIHsKKyAgICAgICAgICAgIG1fYnVmZmVy
LmFwcGVuZChjYyk7CisgICAgICAgICAgICBXRUJWVFRfQURWQU5DRV9UTyhFc2NhcGVTdGF0ZSk7
CisgICAgICAgIH0gZWxzZSBpZiAoY2MgPT0gJzwnKSB7CisgICAgICAgICAgICBpZiAodmVjdG9y
RXF1YWxzU3RyaW5nKG1fdG9rZW4tPmNoYXJhY3RlcnMoKSwgZW1wdHlTdHJpbmcoKSkpCisgICAg
ICAgICAgICAgICAgV0VCVlRUX0FEVkFOQ0VfVE8oVGFnU3RhdGUpOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIHJldHVybiBlbWl0QW5kUmVzdW1lSW4oc291cmNlLCBXZWJWVFRU
b2tlbml6ZXJTdGF0ZTo6VGFnU3RhdGUpOworICAgICAgICB9IGVsc2UgaWYgKGNjID09IElucHV0
U3RyZWFtUHJlcHJvY2Vzc29yOjplbmRPZkZpbGVNYXJrZXIpCisgICAgICAgICAgICByZXR1cm4g
ZW1pdEVuZE9mRmlsZShzb3VyY2UpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGJ1ZmZl
ckNoYXJhY3RlcihjYyk7CisgICAgICAgICAgICBXRUJWVFRfQURWQU5DRV9UTyhEYXRhU3RhdGUp
OworICAgICAgICB9CisgICAgfQorICAgIEVORF9TVEFURSgpCisKKyAgICBXRUJWVFRfQkVHSU5f
U1RBVEUoRXNjYXBlU3RhdGUpIHsKKyAgICAgICAgaWYgKGNjID09ICc7JykgeworICAgICAgICAg
ICAgaWYgKHZlY3RvckVxdWFsc1N0cmluZyhtX2J1ZmZlciwgIiZhbXAiKSkKKyAgICAgICAgICAg
ICAgICBidWZmZXJDaGFyYWN0ZXIoJyYnKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHZlY3RvckVx
dWFsc1N0cmluZyhtX2J1ZmZlciwgIiZsdCIpKQorICAgICAgICAgICAgICAgIGJ1ZmZlckNoYXJh
Y3RlcignPCcpOworICAgICAgICAgICAgZWxzZSBpZiAodmVjdG9yRXF1YWxzU3RyaW5nKG1fYnVm
ZmVyLCAiJmd0IikpCisgICAgICAgICAgICAgICAgYnVmZmVyQ2hhcmFjdGVyKCc+Jyk7CisgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBtX2J1ZmZlci5hcHBlbmQoY2MpOworICAg
ICAgICAgICAgICAgIG1fdG9rZW4tPmFwcGVuZFRvQ2hhcmFjdGVyKG1fYnVmZmVyKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIFdFQlZUVF9BRFZBTkNFX1RPKERhdGFTdGF0ZSk7CisgICAg
ICAgIH0gZWxzZSBpZiAoaXNBU0NJSUFscGhhbnVtZXJpYyhjYykpIHsKKyAgICAgICAgICAgIG1f
YnVmZmVyLmFwcGVuZChjYyk7CisgICAgICAgICAgICBXRUJWVFRfQURWQU5DRV9UTyhFc2NhcGVT
dGF0ZSk7CisgICAgICAgIH0gZWxzZSBpZiAoY2MgPT0gSW5wdXRTdHJlYW1QcmVwcm9jZXNzb3I6
OmVuZE9mRmlsZU1hcmtlcikgeworICAgICAgICAgICAgbV90b2tlbi0+YXBwZW5kVG9DaGFyYWN0
ZXIobV9idWZmZXIpOworICAgICAgICAgICAgcmV0dXJuIGVtaXRFbmRPZkZpbGUoc291cmNlKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fdG9rZW4tPmFwcGVuZFRvQ2hhcmFjdGVy
KG1fYnVmZmVyKTsKKyAgICAgICAgICAgIFdFQlZUVF9BRFZBTkNFX1RPKERhdGFTdGF0ZSk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgRU5EX1NUQVRFKCkKKyAgICAKKyAgICBXRUJWVFRfQkVHSU5f
U1RBVEUoVGFnU3RhdGUpIHsKKyAgICAgICAgaWYgKGlzVG9rZW5pemVyV2hpdGVzcGFjZShjYykp
CisgICAgICAgICAgICBXRUJWVFRfQURWQU5DRV9UTyhTdGFydFRhZ0Fubm90YXRpb25TdGF0ZSk7
CisgICAgICAgIGVsc2UgaWYgKGNjID09ICcuJykKKyAgICAgICAgICAgIFdFQlZUVF9BRFZBTkNF
X1RPKFN0YXJ0VGFnQ2xhc3NTdGF0ZSk7CisgICAgICAgIGVsc2UgaWYgKGNjID09ICcvJykgewor
ICAgICAgICAgICAgV0VCVlRUX0FEVkFOQ0VfVE8oRW5kVGFnT3BlblN0YXRlKTsKKyAgICAgICAg
fSBlbHNlIGlmIChXVEY6OmlzQVNDSUlEaWdpdChjYykpIHsKKyAgICAgICAgICAgIG1fdG9rZW4t
PmJlZ2luVGltZXN0YW1wVGFnKGNjKTsKKyAgICAgICAgICAgIFdFQlZUVF9BRFZBTkNFX1RPKFRp
bWVzdGFtcFRhZ1N0YXRlKTsKKyAgICAgICAgfSBlbHNlIGlmIChjYyA9PSAnPicgfHwgY2MgPT0g
SW5wdXRTdHJlYW1QcmVwcm9jZXNzb3I6OmVuZE9mRmlsZU1hcmtlcikgeworICAgICAgICAgICAg
bV90b2tlbi0+YmVnaW5TdGFydFRhZygnXDAnKTsKKyAgICAgICAgICAgIHJldHVybiBlbWl0QW5k
UmVzdW1lSW4oc291cmNlLCBXZWJWVFRUb2tlbml6ZXJTdGF0ZTo6RGF0YVN0YXRlKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fdG9rZW4tPmJlZ2luU3RhcnRUYWcoY2MpOworICAg
ICAgICAgICAgV0VCVlRUX0FEVkFOQ0VfVE8oU3RhcnRUYWdTdGF0ZSk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgRU5EX1NUQVRFKCkKKworICAgIFdFQlZUVF9CRUdJTl9TVEFURShTdGFydFRhZ1N0
YXRlKSB7CisgICAgICAgIGlmIChpc1Rva2VuaXplcldoaXRlc3BhY2UoY2MpKQorICAgICAgICAg
ICAgV0VCVlRUX0FEVkFOQ0VfVE8oU3RhcnRUYWdBbm5vdGF0aW9uU3RhdGUpOworICAgICAgICBl
bHNlIGlmIChjYyA9PSAnLicpCisgICAgICAgICAgICBXRUJWVFRfQURWQU5DRV9UTyhTdGFydFRh
Z0NsYXNzU3RhdGUpOworICAgICAgICBlbHNlIGlmIChjYyA9PSAnPicgfHwgY2MgPT0gSW5wdXRT
dHJlYW1QcmVwcm9jZXNzb3I6OmVuZE9mRmlsZU1hcmtlcikKKyAgICAgICAgICAgIHJldHVybiBl
bWl0QW5kUmVzdW1lSW4oc291cmNlLCBXZWJWVFRUb2tlbml6ZXJTdGF0ZTo6RGF0YVN0YXRlKTsK
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtX3Rva2VuLT5hcHBlbmRUb05hbWUoY2MpOwor
ICAgICAgICAgICAgV0VCVlRUX0FEVkFOQ0VfVE8oU3RhcnRUYWdTdGF0ZSk7CisgICAgICAgIH0K
KyAgICB9CisgICAgRU5EX1NUQVRFKCkKKworICAgIFdFQlZUVF9CRUdJTl9TVEFURShTdGFydFRh
Z0NsYXNzU3RhdGUpIHsKKyAgICAgICAgaWYgKGlzVG9rZW5pemVyV2hpdGVzcGFjZShjYykpIHsK
KyAgICAgICAgICAgIG1fdG9rZW4tPmFkZE5ld0NsYXNzKCk7CisgICAgICAgICAgICBXRUJWVFRf
QURWQU5DRV9UTyhTdGFydFRhZ0Fubm90YXRpb25TdGF0ZSk7CisgICAgICAgIH0gZWxzZSBpZiAo
Y2MgPT0gJy4nKSB7CisgICAgICAgICAgICBtX3Rva2VuLT5hZGROZXdDbGFzcygpOworICAgICAg
ICAgICAgV0VCVlRUX0FEVkFOQ0VfVE8oU3RhcnRUYWdDbGFzc1N0YXRlKTsKKyAgICAgICAgfSBl
bHNlIGlmIChjYyA9PSAnPicgfHwgY2MgPT0gSW5wdXRTdHJlYW1QcmVwcm9jZXNzb3I6OmVuZE9m
RmlsZU1hcmtlcikgeworICAgICAgICAgICAgbV90b2tlbi0+YWRkTmV3Q2xhc3MoKTsKKyAgICAg
ICAgICAgIHJldHVybiBlbWl0QW5kUmVzdW1lSW4oc291cmNlLCBXZWJWVFRUb2tlbml6ZXJTdGF0
ZTo6RGF0YVN0YXRlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fdG9rZW4tPmFw
cGVuZFRvQ2xhc3MoY2MpOworICAgICAgICAgICAgV0VCVlRUX0FEVkFOQ0VfVE8oU3RhcnRUYWdD
bGFzc1N0YXRlKTsKKyAgICAgICAgfQorCisgICAgfQorICAgIEVORF9TVEFURSgpCisKKyAgICBX
RUJWVFRfQkVHSU5fU1RBVEUoU3RhcnRUYWdBbm5vdGF0aW9uU3RhdGUpIHsKKyAgICAgICAgaWYg
KGNjID09ICc+JyB8fCBjYyA9PSBJbnB1dFN0cmVhbVByZXByb2Nlc3Nvcjo6ZW5kT2ZGaWxlTWFy
a2VyKSB7CisgICAgICAgICAgICBtX3Rva2VuLT5hZGROZXdBbm5vdGF0aW9uKCk7CisgICAgICAg
ICAgICByZXR1cm4gZW1pdEFuZFJlc3VtZUluKHNvdXJjZSwgV2ViVlRUVG9rZW5pemVyU3RhdGU6
OkRhdGFTdGF0ZSk7CisgICAgICAgIH0KKyAgICAgICAgbV90b2tlbi0+YXBwZW5kVG9Bbm5vdGF0
aW9uKGNjKTsKKyAgICAgICAgV0VCVlRUX0FEVkFOQ0VfVE8oU3RhcnRUYWdBbm5vdGF0aW9uU3Rh
dGUpOworICAgIH0KKyAgICBFTkRfU1RBVEUoKQorICAgIAorICAgIFdFQlZUVF9CRUdJTl9TVEFU
RShFbmRUYWdPcGVuU3RhdGUpIHsKKyAgICAgICAgaWYgKGNjID09ICc+JyB8fCBjYyA9PSBJbnB1
dFN0cmVhbVByZXByb2Nlc3Nvcjo6ZW5kT2ZGaWxlTWFya2VyKSB7CisgICAgICAgICAgICBtX3Rv
a2VuLT5iZWdpbkVuZFRhZygnXDAnKTsKKyAgICAgICAgICAgIHJldHVybiBlbWl0QW5kUmVzdW1l
SW4oc291cmNlLCBXZWJWVFRUb2tlbml6ZXJTdGF0ZTo6RGF0YVN0YXRlKTsKKyAgICAgICAgfQor
ICAgICAgICBtX3Rva2VuLT5iZWdpbkVuZFRhZyhjYyk7CisgICAgICAgIFdFQlZUVF9BRFZBTkNF
X1RPKEVuZFRhZ1N0YXRlKTsKKyAgICB9CisgICAgRU5EX1NUQVRFKCkKKworICAgIFdFQlZUVF9C
RUdJTl9TVEFURShFbmRUYWdTdGF0ZSkgeworICAgICAgICBpZiAoY2MgPT0gJz4nIHx8IGNjID09
IElucHV0U3RyZWFtUHJlcHJvY2Vzc29yOjplbmRPZkZpbGVNYXJrZXIpCisgICAgICAgICAgICBy
ZXR1cm4gZW1pdEFuZFJlc3VtZUluKHNvdXJjZSwgV2ViVlRUVG9rZW5pemVyU3RhdGU6OkRhdGFT
dGF0ZSk7CisgICAgICAgIG1fdG9rZW4tPmFwcGVuZFRvTmFtZShjYyk7CisgICAgICAgIFdFQlZU
VF9BRFZBTkNFX1RPKEVuZFRhZ1N0YXRlKTsKKyAgICB9CisgICAgRU5EX1NUQVRFKCkKKworICAg
IFdFQlZUVF9CRUdJTl9TVEFURShUaW1lc3RhbXBUYWdTdGF0ZSkgeworICAgICAgICBpZiAoY2Mg
PT0gJz4nIHx8IGNjID09IElucHV0U3RyZWFtUHJlcHJvY2Vzc29yOjplbmRPZkZpbGVNYXJrZXIp
CisgICAgICAgICAgICByZXR1cm4gZW1pdEFuZFJlc3VtZUluKHNvdXJjZSwgV2ViVlRUVG9rZW5p
emVyU3RhdGU6OkRhdGFTdGF0ZSk7CisgICAgICAgIG1fdG9rZW4tPmFwcGVuZFRvVGltZXN0YW1w
KGNjKTsKKyAgICAgICAgV0VCVlRUX0FEVkFOQ0VfVE8oVGltZXN0YW1wVGFnU3RhdGUpOworICAg
IH0KKyAgICBFTkRfU1RBVEUoKQorCisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svV2ViVlRUVG9rZW5pemVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90cmFjay9XZWJWVFRUb2tlbml6ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNmQ0NWY3ZmY3
ZWJmMzdmNzVhYjcwMjdhYTg3ZmI2MjU0OTNhNTc4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svV2ViVlRUVG9rZW5pemVyLmgKQEAgLTAsMCArMSw3NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIFdlYlZUVFRva2VuaXplcl9oCisjZGVmaW5lIFdlYlZUVFRva2VuaXplcl9oCisK
KyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisKKyNpbmNsdWRlICJNYXJrdXBUb2tlbml6ZXJCYXNl
LmgiCisjaW5jbHVkZSAiU2VnbWVudGVkU3RyaW5nLmgiCisjaW5jbHVkZSAiV2ViVlRUVG9rZW4u
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBXZWJWVFRUb2tlbml6ZXJTdGF0ZSB7
CitwdWJsaWM6CisgICAgZW51bSBTdGF0ZSB7CisgICAgICAgIERhdGFTdGF0ZSwKKyAgICAgICAg
RXNjYXBlU3RhdGUsCisgICAgICAgIFRhZ1N0YXRlLAorICAgICAgICBTdGFydFRhZ1N0YXRlLAor
ICAgICAgICBTdGFydFRhZ0NsYXNzU3RhdGUsCisgICAgICAgIFN0YXJ0VGFnQW5ub3RhdGlvblN0
YXRlLAorICAgICAgICBFbmRUYWdTdGF0ZSwKKyAgICAgICAgRW5kVGFnT3BlblN0YXRlLAorICAg
ICAgICBUaW1lc3RhbXBUYWdTdGF0ZSwKKyAgICB9OworfTsKKworY2xhc3MgV2ViVlRUVG9rZW5p
emVyIDogTWFya3VwVG9rZW5pemVyQmFzZTxXZWJWVFRUb2tlbiwgV2ViVlRUVG9rZW5pemVyU3Rh
dGU+IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXZWJWVFRUb2tlbml6ZXIpOworICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPFdl
YlZUVFRva2VuaXplcj4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IFdlYlZUVFRva2Vu
aXplcik7IH0KKworICAgIHZvaWQgcmVzZXQoKTsKKyAgICAKKyAgICBib29sIG5leHRUb2tlbihT
ZWdtZW50ZWRTdHJpbmcmLCBXZWJWVFRUb2tlbiYpOworCitwcml2YXRlOgorICAgIFdlYlZUVFRv
a2VuaXplcigpOworICAgIAorICAgIFZlY3RvcjxVQ2hhciwgMzI+IG1fYnVmZmVyOworfTsKKwor
fQorCisjZW5kaWYKKyNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103415</attachid>
            <date>2011-08-09 16:27:37 -0700</date>
            <delta_ts>2011-08-24 12:00:05 -0700</delta_ts>
            <desc>addressing Adam&apos;s comments</desc>
            <filename>bug-64132-20110809162736.patch</filename>
            <type>text/plain</type>
            <size>35769</size>
            <attacher name="Anna Cavender">annacc</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTI2OTEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggZTM1YmU0
YWM2YTQyY2JlM2NhYmJhM2VlZWFjNThkOWQ3ZWU5ZjI0Yy4uMDI4ZTNmMGE4MGZjNGVjNDZmZDRk
YTNkYWY0MWU2NGYzMTViYTM5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTIwMDAsNiArMjAw
MCw3IEBAIElGIChFTkFCTEVfVklERU9fVFJBQ0spCiAgICAgICAgIGxvYWRlci9DdWVMb2FkZXIu
Y3BwCiAgICAgICAgIHBsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlci5jcHAKICAgICAgICAgcGxhdGZv
cm0vdHJhY2svV2ViVlRUUGFyc2VyLmNwcAorICAgICAgICBwbGF0Zm9ybS90cmFjay9XZWJWVFRU
b2tlbml6ZXIuY3BwCiAgICAgKQogRU5ESUYoKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTA5YmY4ZDcwYjUy
NmY4ZWQxYzJkNGQzN2U1YTRhYTk0NmUwN2E2Zi4uMDAzN2I4YzQyNTdlZjc2NDhmMGExNDVjNjBi
Y2JhYjZkOTYwMDM4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDExLTA4LTA5ICBB
bm5hIENhdmVuZGVyICA8YW5uYWNjQGNocm9taXVtLm9yZz4KKworICAgICAgICBJbXBsZW1lbnQg
V2ViVlRUIEN1ZSBUZXh0IFBhcnNpbmcgcnVsZXMgYW5kIERPTSBjb25zdHJ1Y3Rpb24KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY0MTMyCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmV3IHRlc3RzIHdpbGwg
bGl2ZSBpbiBtZWRpYS90cmFjayBhbmQgYXJlIGNvbWluZyBzb29uIChzZWUgYnVnIDY1ODg0KS4K
KworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3Qu
YW06CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAg
ICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBodG1s
L1RleHRUcmFja0N1ZS5jcHA6CisgICAgICAgICogaHRtbC9UZXh0VHJhY2tDdWUuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS90cmFjay9DdWVQYXJzZXIuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL3Ry
YWNrL0N1ZVBhcnNlci5oOgorICAgICAgICAqIHBsYXRmb3JtL3RyYWNrL1dlYlZUVFBhcnNlci5j
cHA6CisgICAgICAgICogcGxhdGZvcm0vdHJhY2svV2ViVlRUUGFyc2VyLmg6CisgICAgICAgICog
cGxhdGZvcm0vdHJhY2svV2ViVlRUVG9rZW4uaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0v
dHJhY2svV2ViVlRUVG9rZW5pemVyLmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vdHJh
Y2svV2ViVlRUVG9rZW5pemVyLmg6IEFkZGVkLgorCiAyMDExLTA4LTA5ICBOYXRlIENoYXBpbiAg
PGphcGhldEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmVtb3ZlIHJlY2VpdmVkQ2FuY2VsbGF0
aW9uKCkgZnJvbSBTdWJyZXNvdXJjZUxvYWRlckNsaWVudC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5s
aXN0LmFtCmluZGV4IGYzY2JjM2VmN2Y3NjUwODJhNzUzNmQyN2U5M2U0MDhmMzViZjllZGYuLjlj
YzUzY2RiN2JjOTE0ZTBhM2QxMTlhOGJiOTg5ZGE3YzRkYWZlZWQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFr
ZWZpbGUubGlzdC5hbQpAQCAtMjg2MSw2ICsyODYxLDkgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwK
IAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9DdWVQYXJzZXJQcml2YXRlLmggXAogCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL1dlYlZUVFBhcnNlci5jcHAgXAogCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RyYWNrL1dlYlZUVFBhcnNlci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90cmFjay9XZWJWVFRUb2tlbi5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
cmFjay9XZWJWVFRUb2tlbml6ZXIuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2sv
V2ViVlRUVG9rZW5pemVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVHJlZVNoYXJl
ZC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkxTdHJpbmcuaCBcCiAJU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vVVVJRC5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDZlNGNmYjg0MTQz
Yzk0YjQ2MGZhZTUwMWZiOThmZmExMWQyMDkwNmQuLmU3ZWVlYTlkYjEzMmViM2FlZTE2OWExNjBj
ODE4NmIxNThlZmEyM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTQ0MjYsNiArNDQyNiw5IEBACiAg
ICAgICAgICAgICAncGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyUHJpdmF0ZS5oJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS90cmFjay9XZWJWVFRQYXJzZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS90cmFjay9XZWJWVFRQYXJzZXIuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vdHJhY2sv
V2ViVlRUVG9rZW4uaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vdHJhY2svV2ViVlRUVG9rZW5p
emVyLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vdHJhY2svV2ViVlRUVG9rZW5pemVyLmgn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL3dpbi9CU3RyaW5nLmNwcCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vd2luL0JTdHJpbmcuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vd2luL0JpdG1h
cEluZm8uY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggZGVhMWE1NjBhMjUzZmY4M2IwZWVhNWVmZGI1
YTE3OTE0MjA1YmQ0MC4uYjRiZjg2MWFiZTM3YjZlZTljNGI0NTkxMzc5YTE5NTJiZTM1YmZiMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5wcm8KQEAgLTIxMTgsNiArMjExOCw4IEBAIEhFQURFUlMgKz0gXAogICAgIHBs
YXRmb3JtL3RyYWNrL0N1ZVBhcnNlci5oIFwKICAgICBwbGF0Zm9ybS90cmFjay9DdWVQYXJzZXJQ
cml2YXRlLmggXAogICAgIHBsYXRmb3JtL3RyYWNrL1dlYlZUVFBhcnNlci5oIFwKKyAgICBwbGF0
Zm9ybS90cmFjay9XZWJWVFRUb2tlbi5oIFwKKyAgICBwbGF0Zm9ybS90cmFjay9XZWJWVFRUb2tl
bml6ZXIuaCBcCiAgICAgcGxhdGZvcm0vV2lkZ2V0LmggXAogICAgIHBsYXRmb3JtL1BsYXRmb3Jt
U3RyYXRlZ2llcy5oIFwKICAgICBwbGF0Zm9ybS9Mb2NhbGl6ZWRTdHJpbmdzLmggXApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDdi
ZTc2OWI5Yzk0YTE5ZmFlZGI1MzFkOWE5ZjUzYmIxMmMzYTU3ZmYuLjhkMDRkNjgzYjk1ZjhmNDNk
NmY4NmU2OTExZDU2NTk0OWYyMGI3NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTQwODAsNiArNDA4MCw4IEBACiAJCUFCRERG
RTc5MEE1QzZFNzAwMEEzRTExRCAvKiBSZW5kZXJNZW51TGlzdC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQkRERkU3MzBBNUM2RTZGMDBBM0UxMUQg
LyogUmVuZGVyTWVudUxpc3QuY3BwICovOyB9OwogCQlBQkRERkU3QTBBNUM2RTcwMDBBM0UxMUQg
LyogUmVuZGVyTWVudUxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEFCRERGRTc0MEE1QzZFNzAwMEEzRTExRCAvKiBSZW5kZXJNZW51TGlzdC5oICov
OyB9OwogCQlBRERGMUFENzEyNTdDRDlBMDAwM0E3NTkgLyogUmVuZGVyU1ZHUGF0aC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQURERjFBRDUxMjU3Q0Q5
QTAwMDNBNzU5IC8qIFJlbmRlclNWR1BhdGguaCAqLzsgfTsKKwkJQjEwQkEyMDcxM0YwNUM2RTAw
QkMxQzI2IC8qIFdlYlZUVFRva2VuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCMTBCQTIwNjEzRjA1QzZFMDBCQzFDMjYgLyogV2ViVlRUVG9rZW4uaCAq
LzsgfTsKKwkJQjEwQkEyMEIxM0YwNUM4QzAwQkMxQzI2IC8qIFdlYlZUVFRva2VuaXplci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjEwQkEyMEExM0Yw
NUM4QzAwQkMxQzI2IC8qIFdlYlZUVFRva2VuaXplci5oICovOyB9OwogCQlCMTQzNTNENTEzOEVB
OEVEMDBENTMyNzYgLyogTWVkaWFTdHJlYW1MaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIxNDM1M0QxMTM4RUE4RUQwMEQ1MzI3NiAvKiBNZWRp
YVN0cmVhbUxpc3QuY3BwICovOyB9OwogCQlCMTQzNTNENjEzOEVBOEVEMDBENTMyNzYgLyogTWVk
aWFTdHJlYW1MaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCMTQzNTNEMjEzOEVBOEVEMDBENTMyNzYgLyogTWVkaWFTdHJlYW1MaXN0LmggKi87IH07
CiAJCUIxNDM1M0Y4MTM4RUE5NUIwMEQ1MzI3NiAvKiBKU01lZGlhU3RyZWFtTGlzdC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMTQzNTNGNjEzOEVB
OTVCMDBENTMyNzYgLyogSlNNZWRpYVN0cmVhbUxpc3QuY3BwICovOyB9OwpAQCAtMTA1OTcsNiAr
MTA1OTksOCBAQAogCQlBQkRERkU3NDBBNUM2RTcwMDBBM0UxMUQgLyogUmVuZGVyTWVudUxpc3Qu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlck1lbnVMaXN0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFEREYxQUQ0MTI1N0NEOUEwMDAzQTc1OSAvKiBS
ZW5kZXJTVkdQYXRoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJl
bmRlclNWR1BhdGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBRERGMUFENTEy
NTdDRDlBMDAwM0E3NTkgLyogUmVuZGVyU1ZHUGF0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBSZW5kZXJTVkdQYXRoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUIxMEJBMjA2MTNGMDVDNkUwMEJDMUMyNiAvKiBXZWJWVFRUb2tlbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJWVFRUb2tlbi5oOyBwYXRoID0gcGxhdGZvcm0vdHJhY2sv
V2ViVlRUVG9rZW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjEwQkEyMEExM0Yw
NUM4QzAwQkMxQzI2IC8qIFdlYlZUVFRva2VuaXplci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBXZWJWVFRUb2tlbml6ZXIuaDsgcGF0aCA9IHBsYXRmb3JtL3RyYWNrL1dlYlZU
VFRva2VuaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMTQzNTNEMTEzOEVB
OEVEMDBENTMyNzYgLyogTWVkaWFTdHJlYW1MaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IE1lZGlhU3RyZWFtTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUIxNDM1M0QyMTM4RUE4RUQwMEQ1MzI3NiAvKiBNZWRpYVN0cmVhbUxpc3QuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFTdHJlYW1MaXN0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIxNDM1M0QzMTM4RUE4RUQwMEQ1MzI3NiAvKiBNZWRp
YVN0cmVhbUxpc3QuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IE1lZGlhU3RyZWFtTGlzdC5p
ZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjkyNCw2ICsxMjkyOCw4IEBACiAJ
CQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCTY1Qzk3QUYyMDhFQTkwODgw
MEFDRDI3MyAvKiBjb25maWcuaCAqLywKKwkJCQlCMTBCQTIwQTEzRjA1QzhDMDBCQzFDMjYgLyog
V2ViVlRUVG9rZW5pemVyLmggKi8sCisJCQkJQjEwQkEyMDYxM0YwNUM2RTAwQkMxQzI2IC8qIFdl
YlZUVFRva2VuLmggKi8sCiAJCQkJRURFQzk4MDIwQUVEN0UxNzAwNTkxMzdGIC8qIFdlYkNvcmVQ
cmVmaXguaCAqLywKIAkJCQk5MzA3MDYxMzA5RTBDQTgyMDBCMTdGRTQgLyogRGVyaXZlZFNvdXJj
ZXMubWFrZSAqLywKIAkJCQk5M0YxOUIxOTA4MjQ1RTU5MDAxRTlBQkMgLyogSW5mby5wbGlzdCAq
LywKQEAgLTIzMzUzLDYgKzIzMzU5LDggQEAKIAkJCQk5NzdFMkUwRjEyRjBGQzlDMDBDMTMzNzkg
LyogWFNTQXVkaXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQ1MzczNTMxMzdCNjUxODAwMDA4
RENFIC8qIFplcm9Qb2xlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1OURFNzkwNjEzRjE2QzhDMDAw
N0ZDREYgLyogSmF2YU1ldGhvZEpTQy5oIGluIEhlYWRlcnMgKi8sCisJCQkJQjEwQkEyMDcxM0Yw
NUM2RTAwQkMxQzI2IC8qIFdlYlZUVFRva2VuLmggaW4gSGVhZGVycyAqLywKKwkJCQlCMTBCQTIw
QjEzRjA1QzhDMDBCQzFDMjYgLyogV2ViVlRUVG9rZW5pemVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dFRyYWNrQ3VlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvVGV4dFRyYWNrQ3VlLmNwcAppbmRleCBkOTQ1YzA3MzMzOTEyY2Q3ZTc4MWRl
ODc1ZDRhMzczMzZiYTUwMWRjLi45NzdkYTM1YTkxYTM5YjM3Yjg1ZTUzMjQ5MGY2NmEyMTc3ZjQ0
MjY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRUcmFja0N1ZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0VHJhY2tDdWUuY3BwCkBAIC00MSw4ICs0MSw5IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotVGV4dFRyYWNrQ3VlOjpUZXh0VHJhY2tDdWUoY29u
c3QgU3RyaW5nJiBpZCwgZG91YmxlIHN0YXJ0LCBkb3VibGUgZW5kLCBjb25zdCBTdHJpbmcmIGNv
bnRlbnQsIGNvbnN0IFN0cmluZyYgc2V0dGluZ3MsIGJvb2wgcGF1c2VPbkV4aXQpCi0gICAgOiBt
X2lkKGlkKQorVGV4dFRyYWNrQ3VlOjpUZXh0VHJhY2tDdWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBpZCwgZG91YmxlIHN0YXJ0LCBkb3VibGUgZW5kLCBj
b25zdCBTdHJpbmcmIGNvbnRlbnQsIGNvbnN0IFN0cmluZyYgc2V0dGluZ3MsIGJvb2wgcGF1c2VP
bkV4aXQpCisgICAgOiBBY3RpdmVET01PYmplY3QoY29udGV4dCwgdGhpcykKKyAgICAsIG1faWQo
aWQpCiAgICAgLCBtX3N0YXJ0VGltZShzdGFydCkKICAgICAsIG1fZW5kVGltZShlbmQpCiAgICAg
LCBtX2NvbnRlbnQoY29udGVudCkKQEAgLTEyNyw4ICsxMjgsMTIgQEAgU3RyaW5nIFRleHRUcmFj
a0N1ZTo6Z2V0Q3VlQXNTb3VyY2UoKQogCiBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IFRl
eHRUcmFja0N1ZTo6Z2V0Q3VlQXNIVE1MKCkKIHsKLSAgICAvLyBGSVhNRSg2Mjg4Myk6IEltcGxl
bWVudC4KLSAgICByZXR1cm4gRG9jdW1lbnRGcmFnbWVudDo6Y3JlYXRlKDApOworICAgIHJldHVy
biBtX2RvY3VtZW50RnJhZ21lbnQ7Cit9CisKK3ZvaWQgVGV4dFRyYWNrQ3VlOjpzZXRDdWVIVE1M
KFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQpCit7CisgICAgbV9kb2N1bWVu
dEZyYWdtZW50ID0gZnJhZ21lbnQ7CiB9CiAKIGJvb2wgVGV4dFRyYWNrQ3VlOjppc0FjdGl2ZSgp
CkBAIC0xNDIsNiArMTQ3LDExIEBAIHZvaWQgVGV4dFRyYWNrQ3VlOjpzZXRJc0FjdGl2ZShib29s
IGFjdGl2ZSkKICAgICBtX2lzQWN0aXZlID0gYWN0aXZlOwogfQogCitTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBUZXh0VHJhY2tDdWU6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdAorewor
ICAgIHJldHVybiBBY3RpdmVET01PYmplY3Q6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKK30K
Kwogdm9pZCBUZXh0VHJhY2tDdWU6OnBhcnNlU2V0dGluZ3MoY29uc3QgU3RyaW5nJiBpbnB1dCkK
IHsKICAgICAvLyA0LjguMTAuMTMuMyBQYXJzZSB0aGUgV2ViVlRUIHNldHRpbmdzLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0VHJhY2tDdWUuaCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvVGV4dFRyYWNrQ3VlLmgKaW5kZXggYTJkMTIxY2VmMTA0NzMwNTJkNzU1YmUwOTcwZDY4
MWRkZDlkYmQxZi4uYWMyMzIxNDQyOTcyYzlkOThhZGI4ZjAzZDAyOGVjNjY4ZTIyZjBkYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0VHJhY2tDdWUuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL1RleHRUcmFja0N1ZS5oCkBAIC0zMyw2ICszMyw3IEBACiAKICNpZiBFTkFC
TEUoVklERU9fVFJBQ0spCiAKKyNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKICNpbmNsdWRl
ICJUZXh0VHJhY2suaCIKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CkBAIC00MCwxMyArNDEsMTQgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgRG9jdW1lbnRGcmFnbWVudDsKK2NsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7
CiBjbGFzcyBUZXh0VHJhY2s7CiAKLWNsYXNzIFRleHRUcmFja0N1ZSA6IHB1YmxpYyBSZWZDb3Vu
dGVkPFRleHRUcmFja0N1ZT4geworY2xhc3MgVGV4dFRyYWNrQ3VlIDogcHVibGljIFJlZkNvdW50
ZWQ8VGV4dFRyYWNrQ3VlPiwgcHVibGljIEFjdGl2ZURPTU9iamVjdCB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBpZCwg
ZG91YmxlIHN0YXJ0LCBkb3VibGUgZW5kLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGNvbnN0IFN0
cmluZyYgc2V0dGluZ3MsIGJvb2wgcGF1c2VPbkV4aXQpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8
VGV4dFRyYWNrQ3VlPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29u
c3QgU3RyaW5nJiBpZCwgZG91YmxlIHN0YXJ0LCBkb3VibGUgZW5kLCBjb25zdCBTdHJpbmcmIGNv
bnRlbnQsIGNvbnN0IFN0cmluZyYgc2V0dGluZ3MsIGJvb2wgcGF1c2VPbkV4aXQpCiAgICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHRUcmFja0N1ZShpZCwgc3RhcnQsIGVuZCwg
Y29udGVudCwgc2V0dGluZ3MsIHBhdXNlT25FeGl0KSk7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgVGV4dFRyYWNrQ3VlKGNvbnRleHQsIGlkLCBzdGFydCwgZW5kLCBjb250ZW50LCBzZXR0
aW5ncywgcGF1c2VPbkV4aXQpKTsKICAgICB9CiAgICAgCiAgICAgZW51bSBEaXJlY3Rpb24geyBI
b3Jpem9udGFsLCBWZXJ0aWNhbEdyb3dpbmdMZWZ0LCBWZXJ0aWNhbEdyb3dpbmdSaWdodCB9OwpA
QCAtNzEsMTIgKzczLDE1IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBnZXRDdWVBc1NvdXJjZSgp
OwogICAgIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZ2V0Q3VlQXNIVE1MKCk7CisgICAg
dm9pZCBzZXRDdWVIVE1MKFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4pOwogCiAgICAgYm9v
bCBpc0FjdGl2ZSgpOwogICAgIHZvaWQgc2V0SXNBY3RpdmUoYm9vbCk7CisgICAgCisgICAgdmly
dHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29u
c3Q7CiAKIHByaXZhdGU6Ci0gICAgVGV4dFRyYWNrQ3VlKGNvbnN0IFN0cmluZyYgaWQsIGRvdWJs
ZSBzdGFydCwgZG91YmxlIGVuZCwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBjb25zdCBTdHJpbmcm
IHNldHRpbmdzLCBib29sIHBhdXNlT25FeGl0KTsKKyAgICBUZXh0VHJhY2tDdWUoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgaWQsIGRvdWJsZSBzdGFydCwgZG91YmxlIGVu
ZCwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBjb25zdCBTdHJpbmcmIHNldHRpbmdzLCBib29sIHBh
dXNlT25FeGl0KTsKIAogICAgIHZvaWQgcGFyc2VTZXR0aW5ncyhjb25zdCBTdHJpbmcmKTsKICAg
ICAKQEAgLTkzLDYgKzk4LDcgQEAgcHJpdmF0ZToKICAgICBpbnQgbV90ZXh0UG9zaXRpb247CiAg
ICAgaW50IG1fY3VlU2l6ZTsKICAgICBBbGlnbm1lbnQgbV9jdWVBbGlnbm1lbnQ7CisgICAgUmVm
UHRyPERvY3VtZW50RnJhZ21lbnQ+IG1fZG9jdW1lbnRGcmFnbWVudDsKIAogICAgIGJvb2wgbV9p
c0FjdGl2ZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9D
dWVQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyLmNw
cAppbmRleCA0YTY4NjliYTlkYjQ3MWM0NjRmYzQwZGI0MGM4MjEwY2U5NjRkMjMzLi40OTA0N2Mx
MjBkMjk1ZGNiMzgzOTJhZDY5ZTIzOWRkM2MwYjkyYzc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90cmFjay9DdWVQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RyYWNrL0N1ZVBhcnNlci5jcHAKQEAgLTYxLDYgKzYxLDcgQEAgdm9pZCBDdWVQYXJz
ZXI6OmxvYWQoY29uc3QgU3RyaW5nJiB1cmwsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsIEN1ZVBhcnMKICAgICBvcHRpb25zLmNyb3NzT3JpZ2luUmVxdWVzdFBvbGljeSA9IEFsbG93
Q3Jvc3NPcmlnaW5SZXF1ZXN0czsKIAogICAgIG1fY2xpZW50ID0gY2xpZW50OworICAgIG1fc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCA9IGNvbnRleHQ7CiAKICAgICBtX2xvYWRlciA9IFRocmVhZGFi
bGVMb2FkZXI6OmNyZWF0ZShjb250ZXh0LCB0aGlzLCByZXF1ZXN0LCBvcHRpb25zKTsKIH0KQEAg
LTExMCw3ICsxMTEsNyBAQCB2b2lkIEN1ZVBhcnNlcjo6bmV3Q3Vlc1BhcnNlZCgpCiB2b2lkIEN1
ZVBhcnNlcjo6Y3JlYXRlV2ViVlRUUGFyc2VyKCkKIHsKICAgICBpZiAoIW1fcHJpdmF0ZSkgewot
ICAgICAgICBtX3ByaXZhdGUgPSBXZWJWVFRQYXJzZXI6OmNyZWF0ZSh0aGlzKTsKKyAgICAgICAg
bV9wcml2YXRlID0gV2ViVlRUUGFyc2VyOjpjcmVhdGUodGhpcywgbV9zY3JpcHRFeGVjdXRpb25D
b250ZXh0KTsKICAgICAgICAgbV9jbGllbnQtPnRyYWNrTG9hZFN0YXJ0ZWQoKTsKICAgICB9CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9DdWVQYXJzZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlci5oCmluZGV4IDdjNmM2MzE3
NGU1NzgzNjk2MDZlZGEyNWY0OGFkNTQ5OGQwODVmMDguLjc4MWYwNTgwYmVkYzA2OGZmYTA0NjJl
ZmNiZDFhZjNmNjU5M2Q3NDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Ry
YWNrL0N1ZVBhcnNlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL0N1ZVBh
cnNlci5oCkBAIC02OSw2ICs2OSw5IEBAIHB1YmxpYzoKICAgICB2b2lkIGZldGNoUGFyc2VkQ3Vl
cyhWZWN0b3I8UmVmUHRyPFRleHRUcmFja0N1ZT4gPiYpOwogICAgIHZvaWQgbmV3Q3Vlc1BhcnNl
ZCgpOwogCitwcm90ZWN0ZWQ6CisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogbV9zY3JpcHRF
eGVjdXRpb25Db250ZXh0OworCiBwcml2YXRlOgogICAgIHZvaWQgY3JlYXRlV2ViVlRUUGFyc2Vy
KCk7CiAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9XZWJWVFRQ
YXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svV2ViVlRUUGFyc2VyLmNw
cAppbmRleCBmMjY0NDM0NjJkYzM0YTdjYWZiNjEyMzc4YjY2MGY2OGI0OTdlMmM2Li45YTNmZTVi
Y2QzMzU1MzQ1M2I1YTIyNzExZTM3YTUxOTE5ZTYxMmUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90cmFjay9XZWJWVFRQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RyYWNrL1dlYlZUVFBhcnNlci5jcHAKQEAgLTM0LDYgKzM0LDEwIEBACiAKICNp
bmNsdWRlICJXZWJWVFRQYXJzZXIuaCIKIAorI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCisjaW5j
bHVkZSAiUHJvY2Vzc2luZ0luc3RydWN0aW9uLmgiCisjaW5jbHVkZSAiU2VnbWVudGVkU3RyaW5n
LmgiCisjaW5jbHVkZSAiVGV4dC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC03OCw4ICs4MiwxMCBAQCBTdHJpbmcgV2ViVlRUUGFy
c2VyOjpjb2xsZWN0V29yZChjb25zdCBTdHJpbmcmIGlucHV0LCB1bnNpZ25lZCogcG9zaXRpb24p
CiAgICAgcmV0dXJuIHN0cmluZy50b1N0cmluZygpOwogfQogCi1XZWJWVFRQYXJzZXI6OldlYlZU
VFBhcnNlcihDdWVQYXJzZXJQcml2YXRlQ2xpZW50KiBjbGllbnQpCi0gICAgOiBtX3N0YXRlKElu
aXRpYWwpCitXZWJWVFRQYXJzZXI6OldlYlZUVFBhcnNlcihDdWVQYXJzZXJQcml2YXRlQ2xpZW50
KiBjbGllbnQsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCisgICAgOiBtX3Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQoY29udGV4dCkKKyAgICAsIG1fc3RhdGUoSW5pdGlhbCkKKyAgICAs
IG1fdG9rZW5pemVyKFdlYlZUVFRva2VuaXplcjo6Y3JlYXRlKCkpCiB7CiAgICAgbV9jbGllbnQg
PSBjbGllbnQ7CiB9CkBAIC0yMDQsMTAgKzIxMCwyMSBAQCBXZWJWVFRQYXJzZXI6OlBhcnNlU3Rh
dGUgV2ViVlRUUGFyc2VyOjppZ25vcmVCYWRDdWUoY29uc3QgU3RyaW5nJiBsaW5lKQogCiB2b2lk
IFdlYlZUVFBhcnNlcjo6cHJvY2Vzc0N1ZVRleHQoKQogewotICAgIC8vIDUxIC0gQ3VlIHRleHQg
cHJvY2Vzc2luZyBiYXNlZCBvbiBXZWJWVFQgY3VlIHRleHQgcGFyc2luZyBydWxlcyBhbmQgV2Vi
VlRUIGN1ZSB0ZXh0IERPTSBjb25zdHJ1Y3Rpb24gcnVsZXMuCi0gICAgLy8gRklYTUUoNjQxMzIp
OiBQcm9jZXNzIHRoZSBjdWUgdGV4dCBhcyBwZXIgdGhlIGN1ZSB0ZXh0IHBhcnNpbmcgcnVsZXMu
IAotICAgIC8vICAgICBTb3VyY2U6IGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBw
cy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3RoZS1pZnJhbWUtZWxlbWVudC5odG1sI3dlYnZ0dC1j
dWUtdGV4dC1wYXJzaW5nLXJ1bGVzCi0gICAgUmVmUHRyPFRleHRUcmFja0N1ZT4gY3VlID0gVGV4
dFRyYWNrQ3VlOjpjcmVhdGUobV9jdXJyZW50SWQsIG1fY3VycmVudFN0YXJ0VGltZSwgbV9jdXJy
ZW50RW5kVGltZSwgbV9jdXJyZW50Q29udGVudC50b1N0cmluZygpLCBtX2N1cnJlbnRTZXR0aW5n
cywgZmFsc2UpOworICAgIC8vIDUxIC0gQ3VlIHRleHQgcHJvY2Vzc2luZyBiYXNlZCBvbgorICAg
IC8vIDQuOC4xMC4xMy40IFdlYlZUVCBjdWUgdGV4dCBwYXJzaW5nIHJ1bGVzIGFuZAorICAgIC8v
IDQuOC4xMC4xMy41IFdlYlZUVCBjdWUgdGV4dCBET00gY29uc3RydWN0aW9uIHJ1bGVzLgorICAg
IEFTU0VSVChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzRG9jdW1lbnQoKSk7CisgICAgRG9j
dW1lbnQqIGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihtX3NjcmlwdEV4ZWN1dGlv
bkNvbnRleHQpOworCisgICAgbV9hdHRhY2htZW50Um9vdCA9IERvY3VtZW50RnJhZ21lbnQ6OmNy
ZWF0ZShkb2N1bWVudCk7CisgICAgbV9jdXJyZW50Tm9kZSA9IG1fYXR0YWNobWVudFJvb3Q7Cisg
ICAgICAgIAorICAgIFNlZ21lbnRlZFN0cmluZyBjb250ZW50KG1fY3VycmVudENvbnRlbnQudG9T
dHJpbmcoKSk7CisgICAgd2hpbGUgKG1fdG9rZW5pemVyLT5uZXh0VG9rZW4oY29udGVudCwgbV90
b2tlbikpCisgICAgICAgIGNvbnN0cnVjdFRyZWVGcm9tVG9rZW4oZG9jdW1lbnQpOworICAgIAor
ICAgIFJlZlB0cjxUZXh0VHJhY2tDdWU+IGN1ZSA9IFRleHRUcmFja0N1ZTo6Y3JlYXRlKG1fc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCwgbV9jdXJyZW50SWQsIG1fY3VycmVudFN0YXJ0VGltZSwgbV9j
dXJyZW50RW5kVGltZSwgbV9jdXJyZW50Q29udGVudC50b1N0cmluZygpLCBtX2N1cnJlbnRTZXR0
aW5ncywgZmFsc2UpOworICAgIGN1ZS0+c2V0Q3VlSFRNTChtX2F0dGFjaG1lbnRSb290KTsKICAg
ICBtX2N1ZWxpc3QuYXBwZW5kKGN1ZSk7CiAgICAgbV9jbGllbnQtPm5ld0N1ZXNQYXJzZWQoKTsK
IH0KQEAgLTI4MSw2ICsyOTgsNTcgQEAgZG91YmxlIFdlYlZUVFBhcnNlcjo6Y29sbGVjdFRpbWVT
dGFtcChjb25zdCBTdHJpbmcmIGxpbmUsIHVuc2lnbmVkKiBwb3NpdGlvbikKICAgICByZXR1cm4g
KHZhbHVlMSAqIHNlY29uZHNQZXJIb3VyKSArICh2YWx1ZTIgKiBzZWNvbmRzUGVyTWludXRlKSAr
IHZhbHVlMyArICgoZG91YmxlKXZhbHVlNCAvIDEwMDApOwogfQogCit2b2lkIFdlYlZUVFBhcnNl
cjo6Y29uc3RydWN0VHJlZUZyb21Ub2tlbihEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgQXRv
bWljU3RyaW5nIHRva2VuVGFnTmFtZShtX3Rva2VuLm5hbWUoKS5kYXRhKCksIG1fdG9rZW4ubmFt
ZSgpLnNpemUoKSk7CisgICAgUXVhbGlmaWVkTmFtZSB0YWdOYW1lKG51bGxBdG9tLCB0b2tlblRh
Z05hbWUsIHhodG1sTmFtZXNwYWNlVVJJKTsKKworICAgIHN3aXRjaCAobV90b2tlbi50eXBlKCkp
IHsKKyAgICBjYXNlIFdlYlZUVFRva2VuVHlwZXM6OkNoYXJhY3RlcjogeworICAgICAgICBTdHJp
bmcgY29udGVudChtX3Rva2VuLmNoYXJhY3RlcnMoKS5kYXRhKCksIG1fdG9rZW4uY2hhcmFjdGVy
cygpLnNpemUoKSk7CisgICAgICAgIFJlZlB0cjxUZXh0PiBjaGlsZCA9IFRleHQ6OmNyZWF0ZShk
b2N1bWVudCwgY29udGVudCk7CisgICAgICAgIG1fY3VycmVudE5vZGUtPnBhcnNlckFkZENoaWxk
KGNoaWxkKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgV2ViVlRUVG9rZW5UeXBl
czo6U3RhcnRUYWc6IHsKKyAgICAgICAgUmVmUHRyPEhUTUxFbGVtZW50PiBjaGlsZDsKKyAgICAg
ICAgaWYgKGlzUmVjb2duaXplZFRhZyh0b2tlblRhZ05hbWUpKQorICAgICAgICAgICAgY2hpbGQg
PSBIVE1MRWxlbWVudDo6Y3JlYXRlKHRhZ05hbWUsIGRvY3VtZW50KTsKKyAgICAgICAgZWxzZSBp
ZiAobV90b2tlbi5uYW1lKCkuc2l6ZSgpID09IDEgJiYgbV90b2tlbi5uYW1lKClbMF0gPT0gJ2Mn
KQorICAgICAgICAgICAgY2hpbGQgPSBIVE1MRWxlbWVudDo6Y3JlYXRlKHNwYW5UYWcsIGRvY3Vt
ZW50KTsKKyAgICAgICAgZWxzZSBpZiAobV90b2tlbi5uYW1lKCkuc2l6ZSgpID09IDEgJiYgbV90
b2tlbi5uYW1lKClbMF0gPT0gJ3YnKSB7CisgICAgICAgICAgICBjaGlsZCA9IEhUTUxFbGVtZW50
OjpjcmVhdGUocVRhZywgZG9jdW1lbnQpOworICAgICAgICAgICAgY2hpbGQtPnNldEF0dHJpYnV0
ZSh0aXRsZUF0dHIsIG1fdG9rZW4uYW5ub3RhdGlvbigpLmRhdGEoKSk7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoY2hpbGQpIHsKKyAgICAgICAgICAgIFJlZlB0cjxOYW1lZE5vZGVNYXA+IGF0
dHJpYnV0ZU1hcCA9IE5hbWVkTm9kZU1hcDo6Y3JlYXRlKGNoaWxkLmdldCgpKTsKKyAgICAgICAg
ICAgIGF0dHJpYnV0ZU1hcC0+c2V0Q2xhc3MobV90b2tlbi5jbGFzc2VzKCkuZGF0YSgpKTsKKyAg
ICAgICAgICAgIGNoaWxkLT5zZXRBdHRyaWJ1dGVNYXAoYXR0cmlidXRlTWFwLCBGcmFnbWVudFNj
cmlwdGluZ05vdEFsbG93ZWQpOworICAgICAgICAgICAgbV9jdXJyZW50Tm9kZS0+cGFyc2VyQWRk
Q2hpbGQoY2hpbGQpOworICAgICAgICAgICAgbV9jdXJyZW50Tm9kZSA9IGNoaWxkOworICAgICAg
ICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFdlYlZUVFRva2VuVHlwZXM6OkVu
ZFRhZzoKKyAgICAgICAgaWYgKGlzUmVjb2duaXplZFRhZyh0b2tlblRhZ05hbWUpCisgICAgICAg
ICAgICB8fCBtX3Rva2VuLm5hbWUoKS5zaXplKCkgPT0gMSAmJiBtX3Rva2VuLm5hbWUoKVswXSA9
PSAnYycKKyAgICAgICAgICAgIHx8IG1fdG9rZW4ubmFtZSgpLnNpemUoKSA9PSAxICYmIG1fdG9r
ZW4ubmFtZSgpWzBdID09ICd2JykKKyAgICAgICAgICAgIG1fY3VycmVudE5vZGUgPSBtX2N1cnJl
bnROb2RlLT5wYXJlbnROb2RlKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV2ViVlRUVG9r
ZW5UeXBlczo6VGltZXN0YW1wVGFnOiB7CisgICAgICAgIHVuc2lnbmVkIHBvc2l0aW9uID0gMDsK
KyAgICAgICAgZG91YmxlIHRpbWUgPSBjb2xsZWN0VGltZVN0YW1wKG1fdG9rZW4uY2hhcmFjdGVy
cygpLmRhdGEoKSwgJnBvc2l0aW9uKTsKKyAgICAgICAgaWYgKHRpbWUgIT0gbWFsZm9ybWVkVGlt
ZSkKKyAgICAgICAgICAgIG1fY3VycmVudE5vZGUtPnBhcnNlckFkZENoaWxkKFByb2Nlc3NpbmdJ
bnN0cnVjdGlvbjo6Y3JlYXRlKGRvY3VtZW50LCAidGltZXN0YW1wIiwgU3RyaW5nKG1fdG9rZW4u
Y2hhcmFjdGVycygpLmRhdGEoKSwgbV90b2tlbi5jaGFyYWN0ZXJzKCkuc2l6ZSgpKSkpOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIG1fdG9rZW4uY2xlYXIoKTsKK30KKwogdm9pZCBXZWJWVFRQYXJzZXI6OnNraXBXaGl0ZVNw
YWNlKGNvbnN0IFN0cmluZyYgbGluZSwgdW5zaWduZWQqIHBvc2l0aW9uKQogewogICAgIHdoaWxl
ICgqcG9zaXRpb24gPCBsaW5lLmxlbmd0aCgpICYmIGlzQVNwYWNlKGxpbmVbKnBvc2l0aW9uXSkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9XZWJWVFRQYXJzZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL1dlYlZUVFBhcnNlci5oCmluZGV4IGE2
OTM1MmMwZDg3OTIyMzQzNDA0ZTZmMWUwOTdiNTkwODNhYjk1ZDkuLjAyYmQ4YjdjYWQyZWExNDZl
ZGYzN2Y1NjAwODE5ODVlODU4Mzg0MWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RyYWNrL1dlYlZUVFBhcnNlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Ry
YWNrL1dlYlZUVFBhcnNlci5oCkBAIC0zNCwxMSArMzQsMTcgQEAKICNpZiBFTkFCTEUoVklERU9f
VFJBQ0spCiAKICNpbmNsdWRlICJDdWVQYXJzZXJQcml2YXRlLmgiCisjaW5jbHVkZSAiRG9jdW1l
bnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVz
LmgiCisjaW5jbHVkZSAiV2ViVlRUVG9rZW5pemVyLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25Q
dHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKKwogc3RhdGljIGNvbnN0IGlu
dCBzZWNvbmRzUGVySG91ciA9IDM2MDA7CiBzdGF0aWMgY29uc3QgaW50IHNlY29uZHNQZXJNaW51
dGUgPSA2MDsKIHN0YXRpYyBjb25zdCBkb3VibGUgbWFsZm9ybWVkVGltZSA9IC0xOwpAQCAtNDks
MTMgKzU1LDIyIEBAIHB1YmxpYzoKICAgICAKICAgICBlbnVtIFBhcnNlU3RhdGUgeyBJbml0aWFs
LCBIZWFkZXIsIElkLCBUaW1pbmdzQW5kU2V0dGluZ3MsIEN1ZVRleHQsIEJhZEN1ZSB9OwogCi0g
ICAgc3RhdGljIFBhc3NPd25QdHI8V2ViVlRUUGFyc2VyPiBjcmVhdGUoQ3VlUGFyc2VyUHJpdmF0
ZUNsaWVudCogY2xpZW50KQorICAgIHN0YXRpYyBQYXNzT3duUHRyPFdlYlZUVFBhcnNlcj4gY3Jl
YXRlKEN1ZVBhcnNlclByaXZhdGVDbGllbnQqIGNsaWVudCwgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgV2ViVlRUUGFy
c2VyKGNsaWVudCkpOworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFdlYlZUVFBhcnNlcihj
bGllbnQsIGNvbnRleHQpKTsKICAgICB9CiAgICAgCiAgICAgc3RhdGljIGJvb2wgaGFzUmVxdWly
ZWRGaWxlSWRlbnRpZmllcihjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpOwogCisg
ICAgc3RhdGljIGlubGluZSBib29sIGlzUmVjb2duaXplZFRhZyhjb25zdCBBdG9taWNTdHJpbmcm
IHRhZ05hbWUpCisgICAgeworICAgICAgICByZXR1cm4gdGFnTmFtZSA9PSBpVGFnCisgICAgICAg
ICAgICB8fCB0YWdOYW1lID09IGJUYWcKKyAgICAgICAgICAgIHx8IHRhZ05hbWUgPT0gdVRhZwor
ICAgICAgICAgICAgfHwgdGFnTmFtZSA9PSBydWJ5VGFnCisgICAgICAgICAgICB8fCB0YWdOYW1l
ID09IHJ0VGFnOworICAgIH0KKwogICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0FTcGFjZShjaGFy
IGMpCiAgICAgewogICAgICAgICAvLyBXZWJWVFQgc3BhY2UgY2hhcmFjdGVycyBhcmUgVSswMDIw
IFNQQUNFLCBVKzAwMDkgQ0hBUkFDVEVSIFRBQlVMQVRJT04gKHRhYiksIFUrMDAwQSBMSU5FIEZF
RUQgKExGKSwgVSswMDBDIEZPUk0gRkVFRCAoRkYpLCBhbmQgVSswMDBEIENBUlJJQUdFIFJFVFVS
TiAgICAoQ1IpLgpAQCAtNjksOCArODQsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHBh
cnNlQnl0ZXMoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKTsKIAogcHJvdGVjdGVk
OgotICAgIFdlYlZUVFBhcnNlcihDdWVQYXJzZXJQcml2YXRlQ2xpZW50Kik7CisgICAgV2ViVlRU
UGFyc2VyKEN1ZVBhcnNlclByaXZhdGVDbGllbnQqLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7
CiAgICAgCisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogbV9zY3JpcHRFeGVjdXRpb25Db250
ZXh0OwogICAgIFBhcnNlU3RhdGUgbV9zdGF0ZTsKIAogcHJpdmF0ZToKQEAgLTg1LDEyICsxMDEs
MjAgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNraXBXaGl0ZVNwYWNlKGNvbnN0IFN0cmluZyYsIHVu
c2lnbmVkKik7CiAgICAgc3RhdGljIHZvaWQgc2tpcExpbmVUZXJtaW5hdG9yKGNvbnN0IGNoYXIq
IGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQqKTsKICAgICBzdGF0aWMgU3RyaW5nIGNv
bGxlY3ROZXh0TGluZShjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVk
Kik7CisgICAgCisgICAgdm9pZCBjb25zdHJ1Y3RUcmVlRnJvbVRva2VuKERvY3VtZW50Kik7CiAK
ICAgICBTdHJpbmcgbV9jdXJyZW50SWQ7CiAgICAgZG91YmxlIG1fY3VycmVudFN0YXJ0VGltZTsK
ICAgICBkb3VibGUgbV9jdXJyZW50RW5kVGltZTsKICAgICBTdHJpbmdCdWlsZGVyIG1fY3VycmVu
dENvbnRlbnQ7CiAgICAgU3RyaW5nIG1fY3VycmVudFNldHRpbmdzOworICAgIAorICAgIFdlYlZU
VFRva2VuIG1fdG9rZW47CisgICAgT3duUHRyPFdlYlZUVFRva2VuaXplcj4gbV90b2tlbml6ZXI7
CisKKyAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gbV9hdHRhY2htZW50Um9vdDsKKyAgICBS
ZWZQdHI8Q29udGFpbmVyTm9kZT4gbV9jdXJyZW50Tm9kZTsKIAogICAgIEN1ZVBhcnNlclByaXZh
dGVDbGllbnQqIG1fY2xpZW50OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS90cmFjay9XZWJWVFRUb2tlbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svV2Vi
VlRUVG9rZW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NjlhYTg0NDFmNTI5OThlNGU4YzQxYjhlZTU2ZjkxMjM5
NGI0Yzk2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2sv
V2ViVlRUVG9rZW4uaApAQCAtMCwwICsxLDEzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlZUVFRva2VuX2gKKyNk
ZWZpbmUgV2ViVlRUVG9rZW5faAorCisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorCisjaW5jbHVk
ZSAiTWFya3VwVG9rZW5CYXNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV2Vi
VlRUVG9rZW5UeXBlcyB7CitwdWJsaWM6CisgICAgZW51bSBUeXBlIHsKKyAgICAgICAgVW5pbml0
aWFsaXplZCwKKyAgICAgICAgQ2hhcmFjdGVyLAorICAgICAgICBTdGFydFRhZywKKyAgICAgICAg
RW5kVGFnLAorICAgICAgICBUaW1lc3RhbXBUYWcsCisgICAgICAgIEVuZE9mRmlsZSwKKyAgICB9
OworfTsKKworY2xhc3MgV2ViVlRUVG9rZW4gOiBwdWJsaWMgTWFya3VwVG9rZW5CYXNlPFdlYlZU
VFRva2VuVHlwZXM+IHsKK3B1YmxpYzoKKyAgICB2b2lkIGFwcGVuZFRvTmFtZShVQ2hhciBjaGFy
YWN0ZXIpCisgICAgeworICAgICAgICBBU1NFUlQobV90eXBlID09IFdlYlZUVFRva2VuVHlwZXM6
OlN0YXJ0VGFnIHx8IG1fdHlwZSA9PSBXZWJWVFRUb2tlblR5cGVzOjpFbmRUYWcpOworICAgICAg
ICBNYXJrdXBUb2tlbkJhc2U8V2ViVlRUVG9rZW5UeXBlcz46OmFwcGVuZFRvTmFtZShjaGFyYWN0
ZXIpOworICAgIH0KKyAgICAKKyAgICBjb25zdCBEYXRhVmVjdG9yJiBuYW1lKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gV2ViVlRUVG9rZW5UeXBlczo6U3RhcnRUYWcg
fHwgbV90eXBlID09IFdlYlZUVFRva2VuVHlwZXM6OkVuZFRhZyk7CisgICAgICAgIHJldHVybiBN
YXJrdXBUb2tlbkJhc2U8V2ViVlRUVG9rZW5UeXBlcz46Om5hbWUoKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBiZWdpblRpbWVzdGFtcFRhZyhVQ2hhciBjaGFyYWN0ZXIpCisgICAgeworICAgICAg
ICBBU1NFUlQoY2hhcmFjdGVyKTsKKyAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBUeXBlOjpVbmlu
aXRpYWxpemVkKTsKKyAgICAgICAgbV90eXBlID0gVHlwZTo6VGltZXN0YW1wVGFnOworICAgICAg
ICBtX3NlbGZDbG9zaW5nID0gdHJ1ZTsKKworICAgICAgICBtX2RhdGEuYXBwZW5kKGNoYXJhY3Rl
cik7CisgICAgfQorICAgIAorICAgIHZvaWQgYXBwZW5kVG9UaW1lc3RhbXAoVUNoYXIgY2hhcmFj
dGVyKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGNoYXJhY3Rlcik7CisgICAgICAgIEFTU0VSVCht
X3R5cGUgPT0gVHlwZTo6VGltZXN0YW1wVGFnKTsKKyAgICAgICAgbV9kYXRhLmFwcGVuZChjaGFy
YWN0ZXIpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGFwcGVuZFRvQ2xhc3MoVUNoYXIgY2hhcmFj
dGVyKQorICAgIHsKKyAgICAgICAgYXBwZW5kVG9TdGFydFR5cGUoY2hhcmFjdGVyKTsKKyAgICB9
CisKKyAgICB2b2lkIGFkZE5ld0NsYXNzKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3R5cGUg
PT0gVHlwZTo6U3RhcnRUYWcpOworICAgICAgICBpZiAobV9jbGFzc2VzLmlzRW1wdHkoKSkKKyAg
ICAgICAgICAgIG1fY2xhc3Nlcy5hcHBlbmQoJyAnKTsKKyAgICAgICAgbV9jbGFzc2VzLmFwcGVu
ZChtX2N1cnJlbnRCdWZmZXIpOworICAgICAgICBtX2N1cnJlbnRCdWZmZXIuY2xlYXIoKTsKKyAg
ICB9CisgICAgCisgICAgVmVjdG9yPFVDaGFyLCAzMj4gY2xhc3NlcygpCisgICAgeworICAgICAg
ICByZXR1cm4gbV9jbGFzc2VzOworICAgIH0KKworICAgIHZvaWQgYXBwZW5kVG9Bbm5vdGF0aW9u
KFVDaGFyIGNoYXJhY3RlcikKKyAgICB7CisgICAgICAgIGFwcGVuZFRvU3RhcnRUeXBlKGNoYXJh
Y3Rlcik7CisgICAgfQorICAgICAgICAKKyAgICB2b2lkIGFkZE5ld0Fubm90YXRpb24oKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBUeXBlOjpTdGFydFRhZyk7CisgICAgICAgIG1f
YW5ub3RhdGlvbi5jbGVhcigpOworICAgICAgICBtX2Fubm90YXRpb24uYXBwZW5kKG1fY3VycmVu
dEJ1ZmZlcik7CisgICAgICAgIG1fY3VycmVudEJ1ZmZlci5jbGVhcigpOworICAgIH0KKyAgICAK
KyAgICBWZWN0b3I8VUNoYXIsIDMyPiBhbm5vdGF0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVy
biBtX2Fubm90YXRpb247CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgYXBwZW5kVG9TdGFy
dFR5cGUoVUNoYXIgY2hhcmFjdGVyKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGNoYXJhY3Rlcik7
CisgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gVHlwZTo6U3RhcnRUYWcpOworICAgICAgICBtX2N1
cnJlbnRCdWZmZXIuYXBwZW5kKGNoYXJhY3Rlcik7CisgICAgfQorCisgICAgVmVjdG9yPFVDaGFy
LCAzMj4gbV9hbm5vdGF0aW9uOworICAgIFZlY3RvcjxVQ2hhciwgMzI+IG1fY2xhc3NlczsKKyAg
ICBWZWN0b3I8VUNoYXIsIDMyPiBtX2N1cnJlbnRCdWZmZXI7Cit9OworCit9CisKKyNlbmRpZgor
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9XZWJWVFRU
b2tlbml6ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svV2ViVlRUVG9rZW5p
emVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi44ZDhkYjI3MTczNDI5OTNhZGZmYmM4ZGUzZjVlMmM3OGRmZTRm
ZWUwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svV2Vi
VlRUVG9rZW5pemVyLmNwcApAQCAtMCwwICsxLDIyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisKKyNpbmNsdWRlICJXZWJWVFRUb2tlbml6ZXIuaCIK
KworI2luY2x1ZGUgIk1hcmt1cFRva2VuaXplcklubGluZU1ldGhvZHMuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCisjZGVmaW5lIFdFQlZUVF9CRUdJTl9TVEFURShzdGF0ZU5hbWUpIEJFR0lO
X1NUQVRFKFdlYlZUVFRva2VuaXplclN0YXRlLCBzdGF0ZU5hbWUpCisjZGVmaW5lIFdFQlZUVF9B
RFZBTkNFX1RPKHN0YXRlTmFtZSkgQURWQU5DRV9UTyhXZWJWVFRUb2tlbml6ZXJTdGF0ZSwgc3Rh
dGVOYW1lKQorCitXZWJWVFRUb2tlbml6ZXI6OldlYlZUVFRva2VuaXplcigpCit7CisgICAgcmVz
ZXQoKTsKK30KKwordGVtcGxhdGU8PgoraW5saW5lIGJvb2wgTWFya3VwVG9rZW5pemVyQmFzZTxX
ZWJWVFRUb2tlbiwgV2ViVlRUVG9rZW5pemVyU3RhdGU+OjpzaG91bGRTa2lwTnVsbENoYXJhY3Rl
cnMoKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCitpbmxpbmUgYm9vbCB2ZWN0b3JF
cXVhbHNTdHJpbmcoY29uc3QgVmVjdG9yPFVDaGFyLCAzMj4mIHZlY3RvciwgY29uc3QgU3RyaW5n
JiBzdHJpbmcpCit7CisgICAgaWYgKHZlY3Rvci5zaXplKCkgIT0gc3RyaW5nLmxlbmd0aCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY29uc3QgVUNoYXIqIHN0cmluZ0RhdGEgPSBzdHJp
bmcuY2hhcmFjdGVycygpOworICAgIGNvbnN0IFVDaGFyKiB2ZWN0b3JEYXRhID0gdmVjdG9yLmRh
dGEoKTsKKyAgICByZXR1cm4gIW1lbWNtcChzdHJpbmdEYXRhLCB2ZWN0b3JEYXRhLCB2ZWN0b3Iu
c2l6ZSgpICogc2l6ZW9mKFVDaGFyKSk7Cit9CisKK3ZvaWQgV2ViVlRUVG9rZW5pemVyOjpyZXNl
dCgpCit7CisgICAgbV9zdGF0ZSA9IFdlYlZUVFRva2VuaXplclN0YXRlOjpEYXRhU3RhdGU7Cisg
ICAgbV90b2tlbiA9IDA7CisgICAgbV9saW5lTnVtYmVyID0gMDsKKyAgICBtX2J1ZmZlci5jbGVh
cigpOworfQorICAgIAorYm9vbCBXZWJWVFRUb2tlbml6ZXI6Om5leHRUb2tlbihTZWdtZW50ZWRT
dHJpbmcmIHNvdXJjZSwgV2ViVlRUVG9rZW4mIHRva2VuKQoreworICAgIC8vIElmIHdlIGhhdmUg
YSB0b2tlbiBpbiBwcm9ncmVzcywgdGhlbiB3ZSdyZSBzdXBwb3NlZCB0byBiZSBjYWxsZWQgYmFj
aworICAgIC8vIHdpdGggdGhlIHNhbWUgdG9rZW4gc28gd2UgY2FuIGZpbmlzaCBpdC4KKyAgICBB
U1NFUlQoIW1fdG9rZW4gfHwgbV90b2tlbiA9PSAmdG9rZW4gfHwgdG9rZW4udHlwZSgpID09IFdl
YlZUVFRva2VuVHlwZXM6OlVuaW5pdGlhbGl6ZWQpOworICAgIG1fdG9rZW4gPSAmdG9rZW47CisK
KyAgICBpZiAoc291cmNlLmlzRW1wdHkoKSB8fCAhbV9pbnB1dFN0cmVhbVByZXByb2Nlc3Nvci5w
ZWVrKHNvdXJjZSwgbV9saW5lTnVtYmVyKSkKKyAgICAgICAgcmV0dXJuIGhhdmVCdWZmZXJlZENo
YXJhY3RlclRva2VuKCk7CisKKyAgICBVQ2hhciBjYyA9IG1faW5wdXRTdHJlYW1QcmVwcm9jZXNz
b3IubmV4dElucHV0Q2hhcmFjdGVyKCk7CisKKyAgICAvLyA0LjguMTAuMTMuNCBXZWJWVFQgY3Vl
IHRleHQgdG9rZW5pemVyCisgICAgc3dpdGNoIChtX3N0YXRlKSB7CisgICAgV0VCVlRUX0JFR0lO
X1NUQVRFKERhdGFTdGF0ZSkgeworICAgICAgICBpZiAoY2MgPT0gJyYnKSB7CisgICAgICAgICAg
ICBtX2J1ZmZlci5hcHBlbmQoY2MpOworICAgICAgICAgICAgV0VCVlRUX0FEVkFOQ0VfVE8oRXNj
YXBlU3RhdGUpOworICAgICAgICB9IGVsc2UgaWYgKGNjID09ICc8JykgeworICAgICAgICAgICAg
aWYgKHZlY3RvckVxdWFsc1N0cmluZyhtX3Rva2VuLT5jaGFyYWN0ZXJzKCksIGVtcHR5U3RyaW5n
KCkpKQorICAgICAgICAgICAgICAgIFdFQlZUVF9BRFZBTkNFX1RPKFRhZ1N0YXRlKTsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gZW1pdEFuZFJlc3VtZUluKHNvdXJj
ZSwgV2ViVlRUVG9rZW5pemVyU3RhdGU6OlRhZ1N0YXRlKTsKKyAgICAgICAgfSBlbHNlIGlmIChj
YyA9PSBJbnB1dFN0cmVhbVByZXByb2Nlc3Nvcjo6ZW5kT2ZGaWxlTWFya2VyKQorICAgICAgICAg
ICAgcmV0dXJuIGVtaXRFbmRPZkZpbGUoc291cmNlKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBidWZmZXJDaGFyYWN0ZXIoY2MpOworICAgICAgICAgICAgV0VCVlRUX0FEVkFOQ0VfVE8o
RGF0YVN0YXRlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBFTkRfU1RBVEUoKQorCisgICAgV0VC
VlRUX0JFR0lOX1NUQVRFKEVzY2FwZVN0YXRlKSB7CisgICAgICAgIGlmIChjYyA9PSAnOycpIHsK
KyAgICAgICAgICAgIGlmICh2ZWN0b3JFcXVhbHNTdHJpbmcobV9idWZmZXIsICImYW1wIikpCisg
ICAgICAgICAgICAgICAgYnVmZmVyQ2hhcmFjdGVyKCcmJyk7CisgICAgICAgICAgICBlbHNlIGlm
ICh2ZWN0b3JFcXVhbHNTdHJpbmcobV9idWZmZXIsICImbHQiKSkKKyAgICAgICAgICAgICAgICBi
dWZmZXJDaGFyYWN0ZXIoJzwnKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHZlY3RvckVxdWFsc1N0
cmluZyhtX2J1ZmZlciwgIiZndCIpKQorICAgICAgICAgICAgICAgIGJ1ZmZlckNoYXJhY3Rlcign
PicpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgbV9idWZmZXIuYXBwZW5k
KGNjKTsKKyAgICAgICAgICAgICAgICBtX3Rva2VuLT5hcHBlbmRUb0NoYXJhY3RlcihtX2J1ZmZl
cik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBXRUJWVFRfQURWQU5DRV9UTyhEYXRhU3Rh
dGUpOworICAgICAgICB9IGVsc2UgaWYgKGlzQVNDSUlBbHBoYW51bWVyaWMoY2MpKSB7CisgICAg
ICAgICAgICBtX2J1ZmZlci5hcHBlbmQoY2MpOworICAgICAgICAgICAgV0VCVlRUX0FEVkFOQ0Vf
VE8oRXNjYXBlU3RhdGUpOworICAgICAgICB9IGVsc2UgaWYgKGNjID09IElucHV0U3RyZWFtUHJl
cHJvY2Vzc29yOjplbmRPZkZpbGVNYXJrZXIpIHsKKyAgICAgICAgICAgIG1fdG9rZW4tPmFwcGVu
ZFRvQ2hhcmFjdGVyKG1fYnVmZmVyKTsKKyAgICAgICAgICAgIHJldHVybiBlbWl0RW5kT2ZGaWxl
KHNvdXJjZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX3Rva2VuLT5hcHBlbmRU
b0NoYXJhY3RlcihtX2J1ZmZlcik7CisgICAgICAgICAgICBXRUJWVFRfQURWQU5DRV9UTyhEYXRh
U3RhdGUpOworICAgICAgICB9CisgICAgfQorICAgIEVORF9TVEFURSgpCisgICAgCisgICAgV0VC
VlRUX0JFR0lOX1NUQVRFKFRhZ1N0YXRlKSB7CisgICAgICAgIGlmIChpc1Rva2VuaXplcldoaXRl
c3BhY2UoY2MpKQorICAgICAgICAgICAgV0VCVlRUX0FEVkFOQ0VfVE8oU3RhcnRUYWdBbm5vdGF0
aW9uU3RhdGUpOworICAgICAgICBlbHNlIGlmIChjYyA9PSAnLicpCisgICAgICAgICAgICBXRUJW
VFRfQURWQU5DRV9UTyhTdGFydFRhZ0NsYXNzU3RhdGUpOworICAgICAgICBlbHNlIGlmIChjYyA9
PSAnLycpIHsKKyAgICAgICAgICAgIFdFQlZUVF9BRFZBTkNFX1RPKEVuZFRhZ09wZW5TdGF0ZSk7
CisgICAgICAgIH0gZWxzZSBpZiAoV1RGOjppc0FTQ0lJRGlnaXQoY2MpKSB7CisgICAgICAgICAg
ICBtX3Rva2VuLT5iZWdpblRpbWVzdGFtcFRhZyhjYyk7CisgICAgICAgICAgICBXRUJWVFRfQURW
QU5DRV9UTyhUaW1lc3RhbXBUYWdTdGF0ZSk7CisgICAgICAgIH0gZWxzZSBpZiAoY2MgPT0gJz4n
IHx8IGNjID09IElucHV0U3RyZWFtUHJlcHJvY2Vzc29yOjplbmRPZkZpbGVNYXJrZXIpIHsKKyAg
ICAgICAgICAgIG1fdG9rZW4tPmJlZ2luU3RhcnRUYWcoJ1wwJyk7CisgICAgICAgICAgICByZXR1
cm4gZW1pdEFuZFJlc3VtZUluKHNvdXJjZSwgV2ViVlRUVG9rZW5pemVyU3RhdGU6OkRhdGFTdGF0
ZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX3Rva2VuLT5iZWdpblN0YXJ0VGFn
KGNjKTsKKyAgICAgICAgICAgIFdFQlZUVF9BRFZBTkNFX1RPKFN0YXJ0VGFnU3RhdGUpOworICAg
ICAgICB9CisgICAgfQorICAgIEVORF9TVEFURSgpCisKKyAgICBXRUJWVFRfQkVHSU5fU1RBVEUo
U3RhcnRUYWdTdGF0ZSkgeworICAgICAgICBpZiAoaXNUb2tlbml6ZXJXaGl0ZXNwYWNlKGNjKSkK
KyAgICAgICAgICAgIFdFQlZUVF9BRFZBTkNFX1RPKFN0YXJ0VGFnQW5ub3RhdGlvblN0YXRlKTsK
KyAgICAgICAgZWxzZSBpZiAoY2MgPT0gJy4nKQorICAgICAgICAgICAgV0VCVlRUX0FEVkFOQ0Vf
VE8oU3RhcnRUYWdDbGFzc1N0YXRlKTsKKyAgICAgICAgZWxzZSBpZiAoY2MgPT0gJz4nIHx8IGNj
ID09IElucHV0U3RyZWFtUHJlcHJvY2Vzc29yOjplbmRPZkZpbGVNYXJrZXIpCisgICAgICAgICAg
ICByZXR1cm4gZW1pdEFuZFJlc3VtZUluKHNvdXJjZSwgV2ViVlRUVG9rZW5pemVyU3RhdGU6OkRh
dGFTdGF0ZSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbV90b2tlbi0+YXBwZW5kVG9O
YW1lKGNjKTsKKyAgICAgICAgICAgIFdFQlZUVF9BRFZBTkNFX1RPKFN0YXJ0VGFnU3RhdGUpOwor
ICAgICAgICB9CisgICAgfQorICAgIEVORF9TVEFURSgpCisKKyAgICBXRUJWVFRfQkVHSU5fU1RB
VEUoU3RhcnRUYWdDbGFzc1N0YXRlKSB7CisgICAgICAgIGlmIChpc1Rva2VuaXplcldoaXRlc3Bh
Y2UoY2MpKSB7CisgICAgICAgICAgICBtX3Rva2VuLT5hZGROZXdDbGFzcygpOworICAgICAgICAg
ICAgV0VCVlRUX0FEVkFOQ0VfVE8oU3RhcnRUYWdBbm5vdGF0aW9uU3RhdGUpOworICAgICAgICB9
IGVsc2UgaWYgKGNjID09ICcuJykgeworICAgICAgICAgICAgbV90b2tlbi0+YWRkTmV3Q2xhc3Mo
KTsKKyAgICAgICAgICAgIFdFQlZUVF9BRFZBTkNFX1RPKFN0YXJ0VGFnQ2xhc3NTdGF0ZSk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoY2MgPT0gJz4nIHx8IGNjID09IElucHV0U3RyZWFtUHJlcHJvY2Vz
c29yOjplbmRPZkZpbGVNYXJrZXIpIHsKKyAgICAgICAgICAgIG1fdG9rZW4tPmFkZE5ld0NsYXNz
KCk7CisgICAgICAgICAgICByZXR1cm4gZW1pdEFuZFJlc3VtZUluKHNvdXJjZSwgV2ViVlRUVG9r
ZW5pemVyU3RhdGU6OkRhdGFTdGF0ZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBt
X3Rva2VuLT5hcHBlbmRUb0NsYXNzKGNjKTsKKyAgICAgICAgICAgIFdFQlZUVF9BRFZBTkNFX1RP
KFN0YXJ0VGFnQ2xhc3NTdGF0ZSk7CisgICAgICAgIH0KKworICAgIH0KKyAgICBFTkRfU1RBVEUo
KQorCisgICAgV0VCVlRUX0JFR0lOX1NUQVRFKFN0YXJ0VGFnQW5ub3RhdGlvblN0YXRlKSB7Cisg
ICAgICAgIGlmIChjYyA9PSAnPicgfHwgY2MgPT0gSW5wdXRTdHJlYW1QcmVwcm9jZXNzb3I6OmVu
ZE9mRmlsZU1hcmtlcikgeworICAgICAgICAgICAgbV90b2tlbi0+YWRkTmV3QW5ub3RhdGlvbigp
OworICAgICAgICAgICAgcmV0dXJuIGVtaXRBbmRSZXN1bWVJbihzb3VyY2UsIFdlYlZUVFRva2Vu
aXplclN0YXRlOjpEYXRhU3RhdGUpOworICAgICAgICB9CisgICAgICAgIG1fdG9rZW4tPmFwcGVu
ZFRvQW5ub3RhdGlvbihjYyk7CisgICAgICAgIFdFQlZUVF9BRFZBTkNFX1RPKFN0YXJ0VGFnQW5u
b3RhdGlvblN0YXRlKTsKKyAgICB9CisgICAgRU5EX1NUQVRFKCkKKyAgICAKKyAgICBXRUJWVFRf
QkVHSU5fU1RBVEUoRW5kVGFnT3BlblN0YXRlKSB7CisgICAgICAgIGlmIChjYyA9PSAnPicgfHwg
Y2MgPT0gSW5wdXRTdHJlYW1QcmVwcm9jZXNzb3I6OmVuZE9mRmlsZU1hcmtlcikgeworICAgICAg
ICAgICAgbV90b2tlbi0+YmVnaW5FbmRUYWcoJ1wwJyk7CisgICAgICAgICAgICByZXR1cm4gZW1p
dEFuZFJlc3VtZUluKHNvdXJjZSwgV2ViVlRUVG9rZW5pemVyU3RhdGU6OkRhdGFTdGF0ZSk7Cisg
ICAgICAgIH0KKyAgICAgICAgbV90b2tlbi0+YmVnaW5FbmRUYWcoY2MpOworICAgICAgICBXRUJW
VFRfQURWQU5DRV9UTyhFbmRUYWdTdGF0ZSk7CisgICAgfQorICAgIEVORF9TVEFURSgpCisKKyAg
ICBXRUJWVFRfQkVHSU5fU1RBVEUoRW5kVGFnU3RhdGUpIHsKKyAgICAgICAgaWYgKGNjID09ICc+
JyB8fCBjYyA9PSBJbnB1dFN0cmVhbVByZXByb2Nlc3Nvcjo6ZW5kT2ZGaWxlTWFya2VyKQorICAg
ICAgICAgICAgcmV0dXJuIGVtaXRBbmRSZXN1bWVJbihzb3VyY2UsIFdlYlZUVFRva2VuaXplclN0
YXRlOjpEYXRhU3RhdGUpOworICAgICAgICBtX3Rva2VuLT5hcHBlbmRUb05hbWUoY2MpOworICAg
ICAgICBXRUJWVFRfQURWQU5DRV9UTyhFbmRUYWdTdGF0ZSk7CisgICAgfQorICAgIEVORF9TVEFU
RSgpCisKKyAgICBXRUJWVFRfQkVHSU5fU1RBVEUoVGltZXN0YW1wVGFnU3RhdGUpIHsKKyAgICAg
ICAgaWYgKGNjID09ICc+JyB8fCBjYyA9PSBJbnB1dFN0cmVhbVByZXByb2Nlc3Nvcjo6ZW5kT2ZG
aWxlTWFya2VyKQorICAgICAgICAgICAgcmV0dXJuIGVtaXRBbmRSZXN1bWVJbihzb3VyY2UsIFdl
YlZUVFRva2VuaXplclN0YXRlOjpEYXRhU3RhdGUpOworICAgICAgICBtX3Rva2VuLT5hcHBlbmRU
b1RpbWVzdGFtcChjYyk7CisgICAgICAgIFdFQlZUVF9BRFZBTkNFX1RPKFRpbWVzdGFtcFRhZ1N0
YXRlKTsKKyAgICB9CisgICAgRU5EX1NUQVRFKCkKKworICAgIH0KKworICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL1dlYlZUVFRva2VuaXplci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svV2ViVlRUVG9rZW5pemVyLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZTZkNDVmN2ZmN2ViZjM3Zjc1YWI3MDI3YWE4N2ZiNjI1NDkzYTU3OAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL1dlYlZUVFRva2VuaXplci5oCkBAIC0w
LDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBXZWJWVFRUb2tlbml6ZXJfaAorI2RlZmluZSBXZWJWVFRUb2tl
bml6ZXJfaAorCisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorCisjaW5jbHVkZSAiTWFya3VwVG9r
ZW5pemVyQmFzZS5oIgorI2luY2x1ZGUgIlNlZ21lbnRlZFN0cmluZy5oIgorI2luY2x1ZGUgIldl
YlZUVFRva2VuLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV2ViVlRUVG9rZW5p
emVyU3RhdGUgeworcHVibGljOgorICAgIGVudW0gU3RhdGUgeworICAgICAgICBEYXRhU3RhdGUs
CisgICAgICAgIEVzY2FwZVN0YXRlLAorICAgICAgICBUYWdTdGF0ZSwKKyAgICAgICAgU3RhcnRU
YWdTdGF0ZSwKKyAgICAgICAgU3RhcnRUYWdDbGFzc1N0YXRlLAorICAgICAgICBTdGFydFRhZ0Fu
bm90YXRpb25TdGF0ZSwKKyAgICAgICAgRW5kVGFnU3RhdGUsCisgICAgICAgIEVuZFRhZ09wZW5T
dGF0ZSwKKyAgICAgICAgVGltZXN0YW1wVGFnU3RhdGUsCisgICAgfTsKK307CisKK2NsYXNzIFdl
YlZUVFRva2VuaXplciA6IE1hcmt1cFRva2VuaXplckJhc2U8V2ViVlRUVG9rZW4sIFdlYlZUVFRv
a2VuaXplclN0YXRlPiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV2ViVlRUVG9rZW5pemVy
KTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFz
c093blB0cjxXZWJWVFRUb2tlbml6ZXI+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBX
ZWJWVFRUb2tlbml6ZXIpOyB9CisKKyAgICB2b2lkIHJlc2V0KCk7CisgICAgCisgICAgYm9vbCBu
ZXh0VG9rZW4oU2VnbWVudGVkU3RyaW5nJiwgV2ViVlRUVG9rZW4mKTsKKworcHJpdmF0ZToKKyAg
ICBXZWJWVFRUb2tlbml6ZXIoKTsKKyAgICAKKyAgICBWZWN0b3I8VUNoYXIsIDMyPiBtX2J1ZmZl
cjsKK307CisKK30KKworI2VuZGlmCisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105034</attachid>
            <date>2011-08-24 12:00:10 -0700</date>
            <delta_ts>2011-08-29 13:04:05 -0700</delta_ts>
            <desc>using DataVector typedef and fixing a few bugs</desc>
            <filename>bug-64132-20110824120009.patch</filename>
            <type>text/plain</type>
            <size>38616</size>
            <attacher name="Anna Cavender">annacc</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTM3MTAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggNzlmNTlh
Y2JiMTMwNTkwNjBlMGViYzYwN2I4ODVjNDgwNGY2ODNmMS4uYWE2YTEwZGJjNDZlZWExZWI1MjEy
NjYzNTkxZjk0NDFiMjBkZDJhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTIwMjcsNiArMjAy
Nyw3IEBAIElGIChFTkFCTEVfVklERU9fVFJBQ0spCiAgICAgICAgIGxvYWRlci9DdWVMb2FkZXIu
Y3BwCiAgICAgICAgIHBsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlci5jcHAKICAgICAgICAgcGxhdGZv
cm0vdHJhY2svV2ViVlRUUGFyc2VyLmNwcAorICAgICAgICBwbGF0Zm9ybS90cmFjay9XZWJWVFRU
b2tlbml6ZXIuY3BwCiAgICAgKQogRU5ESUYoKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTM0ZGUyZGZjNDNm
YTNkYjBjMWEyMWE5ZjhlNGEzMGY4OWMzNzFkZi4uYWU5YTRhNmQ1NmFhNjI3NzRjM2QwNjUwNGIz
MGM1MThjOWIyMDc4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDExLTA4LTI0ICBB
bm5hIENhdmVuZGVyICA8YW5uYWNjQGNocm9taXVtLm9yZz4KKworICAgICAgICBJbXBsZW1lbnQg
V2ViVlRUIEN1ZSBUZXh0IFBhcnNpbmcgcnVsZXMgYW5kIERPTSBjb25zdHJ1Y3Rpb24KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY0MTMyCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmV3IHRlc3RzIHdpbGwg
bGl2ZSBpbiBtZWRpYS90cmFjayBhbmQgYXJlIGNvbWluZyBzb29uIChzZWUgYnVnIDY1ODg0KS4K
KworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3Qu
YW06CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAg
ICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBodG1s
L1RleHRUcmFja0N1ZS5jcHA6CisgICAgICAgICogaHRtbC9UZXh0VHJhY2tDdWUuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS90cmFjay9DdWVQYXJzZXIuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL3Ry
YWNrL0N1ZVBhcnNlci5oOgorICAgICAgICAqIHBsYXRmb3JtL3RyYWNrL1dlYlZUVFBhcnNlci5j
cHA6CisgICAgICAgICogcGxhdGZvcm0vdHJhY2svV2ViVlRUUGFyc2VyLmg6CisgICAgICAgICog
cGxhdGZvcm0vdHJhY2svV2ViVlRUVG9rZW4uaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0v
dHJhY2svV2ViVlRUVG9rZW5pemVyLmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vdHJh
Y2svV2ViVlRUVG9rZW5pemVyLmg6IEFkZGVkLgorCiAyMDExLTA4LTIzICBEYXZpZCBMZXZpbiAg
PGxldmluQGNocm9taXVtLm9yZz4KIAogICAgICAgICBNZXNzYWdlRXZlbnQucG9ydHMgc2hvdWxk
bid0IGV2ZXIgYmUgbnVsbC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDNhYzI1
MjU0YzM2NzlmNjFlN2EyMjk0YmEzNGNkNzlhNTNkNWFiZTcuLjAzMmM1NjgxZjhmMzM1M2M0MDBm
NWNjNTNjZTk1MmFkNTk5YzZhYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAt
Mjg3MCw2ICsyODcwLDkgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90cmFjay9DdWVQYXJzZXJQcml2YXRlLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RyYWNrL1dlYlZUVFBhcnNlci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Ry
YWNrL1dlYlZUVFBhcnNlci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9XZWJW
VFRUb2tlbi5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9XZWJWVFRUb2tlbml6
ZXIuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svV2ViVlRUVG9rZW5pemVyLmNw
cCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVHJlZVNoYXJlZC5oIFwKIAlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9VUkxTdHJpbmcuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVVJ
RC5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDk3MzQ2YzU0MWZjMDRhOGE4ZmFmYWZiYTg2ZmYz
ZTA2MjM3YTFjMmUuLjFkYWVmYTYxYjA4MmIxMzlmZGMxNDdmZWZhMjljNmZiMmNkMWMxZTMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkKQEAgLTQzODgsNiArNDM4OCw5IEBACiAgICAgICAgICAgICAncGxhdGZv
cm0vdHJhY2svQ3VlUGFyc2VyUHJpdmF0ZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS90cmFj
ay9XZWJWVFRQYXJzZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS90cmFjay9XZWJWVFRQ
YXJzZXIuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vdHJhY2svV2ViVlRUVG9rZW4uaCcsCisg
ICAgICAgICAgICAncGxhdGZvcm0vdHJhY2svV2ViVlRUVG9rZW5pemVyLmNwcCcsCisgICAgICAg
ICAgICAncGxhdGZvcm0vdHJhY2svV2ViVlRUVG9rZW5pemVyLmgnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL3dpbi9CU3RyaW5nLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vd2luL0JTdHJp
bmcuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vd2luL0JpdG1hcEluZm8uY3BwJywKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5wcm8KaW5kZXggYTk0YzI1MjRlYjc5NzAwNGVmNjgxYzNjMjQzODQwYWUwODMwNGNhNS4uYmYw
OTk4MmQxYjA2NmMxODY1N2FiYjdhYzE1MjQ3MzAwNTIyMmE5MyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAg
LTIxMTksNiArMjExOSw4IEBAIEhFQURFUlMgKz0gXAogICAgIHBsYXRmb3JtL3RyYWNrL0N1ZVBh
cnNlci5oIFwKICAgICBwbGF0Zm9ybS90cmFjay9DdWVQYXJzZXJQcml2YXRlLmggXAogICAgIHBs
YXRmb3JtL3RyYWNrL1dlYlZUVFBhcnNlci5oIFwKKyAgICBwbGF0Zm9ybS90cmFjay9XZWJWVFRU
b2tlbi5oIFwKKyAgICBwbGF0Zm9ybS90cmFjay9XZWJWVFRUb2tlbml6ZXIuaCBcCiAgICAgcGxh
dGZvcm0vV2lkZ2V0LmggXAogICAgIHBsYXRmb3JtL1BsYXRmb3JtU3RyYXRlZ2llcy5oIFwKICAg
ICBwbGF0Zm9ybS9Mb2NhbGl6ZWRTdHJpbmdzLmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDI0NzRkNTFiZjFjYzY3NDUyNWQ1
MGIxNjk3MmUzZWVmNjI5NWEyYmQuLjBiMjEzOGJiMTVhY2MyMTViYjljNDZjOTA1MzM5MjU4MzBl
YWY5ODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKQEAgLTQwODIsNiArNDA4Miw5IEBACiAJCUFCRERGRTc5MEE1QzZFNzAwMEEzRTEx
RCAvKiBSZW5kZXJNZW51TGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBQkRERkU3MzBBNUM2RTZGMDBBM0UxMUQgLyogUmVuZGVyTWVudUxpc3Qu
Y3BwICovOyB9OwogCQlBQkRERkU3QTBBNUM2RTcwMDBBM0UxMUQgLyogUmVuZGVyTWVudUxpc3Qu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFCRERGRTc0
MEE1QzZFNzAwMEEzRTExRCAvKiBSZW5kZXJNZW51TGlzdC5oICovOyB9OwogCQlBRERGMUFENzEy
NTdDRDlBMDAwM0E3NTkgLyogUmVuZGVyU1ZHUGF0aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQURERjFBRDUxMjU3Q0Q5QTAwMDNBNzU5IC8qIFJlbmRl
clNWR1BhdGguaCAqLzsgfTsKKwkJQjEwQjE2QTYxNDA1NzEzMDAwQkMxQzI2IC8qIFdlYlZUVFRv
a2VuaXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCMTBCMTZBMzE0MDU3MTMwMDBCQzFDMjYgLyogV2ViVlRUVG9rZW5pemVyLmNwcCAqLzsgfTsK
KwkJQjEwQjE2QTcxNDA1NzEzMDAwQkMxQzI2IC8qIFdlYlZUVFRva2VuLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMTBCMTZBNDE0MDU3MTMwMDBCQzFD
MjYgLyogV2ViVlRUVG9rZW4uaCAqLzsgfTsKKwkJQjEwQjE2QTgxNDA1NzEzMDAwQkMxQzI2IC8q
IFdlYlZUVFRva2VuaXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQjEwQjE2QTUxNDA1NzEzMDAwQkMxQzI2IC8qIFdlYlZUVFRva2VuaXplci5oICov
OyB9OwogCQlCMTQzNTNENTEzOEVBOEVEMDBENTMyNzYgLyogTWVkaWFTdHJlYW1MaXN0LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIxNDM1M0QxMTM4
RUE4RUQwMEQ1MzI3NiAvKiBNZWRpYVN0cmVhbUxpc3QuY3BwICovOyB9OwogCQlCMTQzNTNENjEz
OEVBOEVEMDBENTMyNzYgLyogTWVkaWFTdHJlYW1MaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMTQzNTNEMjEzOEVBOEVEMDBENTMyNzYgLyogTWVk
aWFTdHJlYW1MaXN0LmggKi87IH07CiAJCUIxNDM1M0Y4MTM4RUE5NUIwMEQ1MzI3NiAvKiBKU01l
ZGlhU3RyZWFtTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCMTQzNTNGNjEzOEVBOTVCMDBENTMyNzYgLyogSlNNZWRpYVN0cmVhbUxpc3QuY3Bw
ICovOyB9OwpAQCAtMTA2MTIsNiArMTA2MTUsOSBAQAogCQlBQkRERkU3NDBBNUM2RTcwMDBBM0Ux
MUQgLyogUmVuZGVyTWVudUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFJlbmRlck1lbnVMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFEREYxQUQ0
MTI1N0NEOUEwMDAzQTc1OSAvKiBSZW5kZXJTVkdQYXRoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR1BhdGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBRERGMUFENTEyNTdDRDlBMDAwM0E3NTkgLyogUmVuZGVyU1ZHUGF0aC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdQYXRoLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUIxMEIxNkEzMTQwNTcxMzAwMEJDMUMyNiAvKiBXZWJWVFRU
b2tlbml6ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViVlRU
VG9rZW5pemVyLmNwcDsgcGF0aCA9IHBsYXRmb3JtL3RyYWNrL1dlYlZUVFRva2VuaXplci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUIxMEIxNkE0MTQwNTcxMzAwMEJDMUMyNiAv
KiBXZWJWVFRUb2tlbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJWVFRU
b2tlbi5oOyBwYXRoID0gcGxhdGZvcm0vdHJhY2svV2ViVlRUVG9rZW4uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQjEwQjE2QTUxNDA1NzEzMDAwQkMxQzI2IC8qIFdlYlZUVFRva2Vu
aXplci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJWVFRUb2tlbml6ZXIu
aDsgcGF0aCA9IHBsYXRmb3JtL3RyYWNrL1dlYlZUVFRva2VuaXplci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlCMTQzNTNEMTEzOEVBOEVEMDBENTMyNzYgLyogTWVkaWFTdHJlYW1M
aXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlhU3RyZWFt
TGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIxNDM1M0QyMTM4RUE4RUQw
MEQ1MzI3NiAvKiBNZWRpYVN0cmVhbUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTWVkaWFTdHJlYW1MaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIx
NDM1M0QzMTM4RUE4RUQwMEQ1MzI3NiAvKiBNZWRpYVN0cmVhbUxpc3QuaWRsICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgcGF0aCA9IE1lZGlhU3RyZWFtTGlzdC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xMjk1Miw2ICsxMjk1OCw5IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQk2NUM5N0FG
MjA4RUE5MDg4MDBBQ0QyNzMgLyogY29uZmlnLmggKi8sCiAJCQkJRURFQzk4MDIwQUVEN0UxNzAw
NTkxMzdGIC8qIFdlYkNvcmVQcmVmaXguaCAqLywKKwkJCQlCMTBCMTZBMzE0MDU3MTMwMDBCQzFD
MjYgLyogV2ViVlRUVG9rZW5pemVyLmNwcCAqLywKKwkJCQlCMTBCMTZBNDE0MDU3MTMwMDBCQzFD
MjYgLyogV2ViVlRUVG9rZW4uaCAqLywKKwkJCQlCMTBCMTZBNTE0MDU3MTMwMDBCQzFDMjYgLyog
V2ViVlRUVG9rZW5pemVyLmggKi8sCiAJCQkJOTMwNzA2MTMwOUUwQ0E4MjAwQjE3RkU0IC8qIERl
cml2ZWRTb3VyY2VzLm1ha2UgKi8sCiAJCQkJOTNGMTlCMTkwODI0NUU1OTAwMUU5QUJDIC8qIElu
Zm8ucGxpc3QgKi8sCiAJCQkJMjlBODEyMDQwRkJCOUI0MTAwNTEwMjkzIC8qIGFjY2Vzc2liaWxp
dHkgKi8sCkBAIC0yMzM5OCw2ICsyMzQwNyw4IEBACiAJCQkJRkQyM0ExMjYxM0Y1RkE1OTAwRjY3
MDAxIC8qIEpTTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlERjlBRkQ3MjEzRkMzMUQ4MDAxNUZFQjcgLyogTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uT2JqQy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM1MDBGMzIxM0ZERTNCRTAwOTlFQzI0IC8q
IE5TU2Nyb2xsZXJJbXBEZXRhaWxzLmggaW4gSGVhZGVycyAqLywKKwkJCQlCMTBCMTZBNzE0MDU3
MTMwMDBCQzFDMjYgLyogV2ViVlRUVG9rZW4uaCBpbiBIZWFkZXJzICovLAorCQkJCUIxMEIxNkE4
MTQwNTcxMzAwMEJDMUMyNiAvKiBXZWJWVFRUb2tlbml6ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
KTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAt
MjYyMDIsNiArMjYyMTMsNyBAQAogCQkJCUZEMjNBMTI1MTNGNUZBNTkwMEY2NzAwMSAvKiBKU01l
ZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTE0MTRC
NTEzQTBGMDUwMDAxOTk5NkMgLyogV2ViS2l0Rm9udEZhbWlseU5hbWVzLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCURGOUFGRDczMTNGQzMxRDgwMDE1RkVCNyAvKiBNZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb25PYmpDLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJQjEwQjE2QTYxNDA1NzEzMDAw
QkMxQzI2IC8qIFdlYlZUVFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQly
dW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dFRyYWNrQ3VlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvVGV4dFRyYWNrQ3VlLmNwcAppbmRleCBkOTQ1YzA3MzMzOTEyY2Q3ZTc4MWRlODc1ZDRhMzcz
MzZiYTUwMWRjLi5kMGJiZTU4NzJmMmY5ZTNiOGNiYmRkNWE4MjhlNjdkMzUyMDY5OTE5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRUcmFja0N1ZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9UZXh0VHJhY2tDdWUuY3BwCkBAIC00MSw4ICs0MSw5IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotVGV4dFRyYWNrQ3VlOjpUZXh0VHJhY2tDdWUoY29uc3QgU3RyaW5n
JiBpZCwgZG91YmxlIHN0YXJ0LCBkb3VibGUgZW5kLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGNv
bnN0IFN0cmluZyYgc2V0dGluZ3MsIGJvb2wgcGF1c2VPbkV4aXQpCi0gICAgOiBtX2lkKGlkKQor
VGV4dFRyYWNrQ3VlOjpUZXh0VHJhY2tDdWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgY29uc3QgU3RyaW5nJiBpZCwgZG91YmxlIHN0YXJ0LCBkb3VibGUgZW5kLCBjb25zdCBTdHJp
bmcmIGNvbnRlbnQsIGNvbnN0IFN0cmluZyYgc2V0dGluZ3MsIGJvb2wgcGF1c2VPbkV4aXQpCisg
ICAgOiBBY3RpdmVET01PYmplY3QoY29udGV4dCwgdGhpcykKKyAgICAsIG1faWQoaWQpCiAgICAg
LCBtX3N0YXJ0VGltZShzdGFydCkKICAgICAsIG1fZW5kVGltZShlbmQpCiAgICAgLCBtX2NvbnRl
bnQoY29udGVudCkKQEAgLTEyNyw4ICsxMjgsMTIgQEAgU3RyaW5nIFRleHRUcmFja0N1ZTo6Z2V0
Q3VlQXNTb3VyY2UoKQogCiBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IFRleHRUcmFja0N1
ZTo6Z2V0Q3VlQXNIVE1MKCkKIHsKLSAgICAvLyBGSVhNRSg2Mjg4Myk6IEltcGxlbWVudC4KLSAg
ICByZXR1cm4gRG9jdW1lbnRGcmFnbWVudDo6Y3JlYXRlKDApOworICAgIHJldHVybiBtX2RvY3Vt
ZW50RnJhZ21lbnQ7Cit9CisKK3ZvaWQgVGV4dFRyYWNrQ3VlOjpzZXRDdWVIVE1MKFBhc3NSZWZQ
dHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQpCit7CisgICAgbV9kb2N1bWVudEZyYWdtZW50
ID0gZnJhZ21lbnQ7CiB9CiAKIGJvb2wgVGV4dFRyYWNrQ3VlOjppc0FjdGl2ZSgpCkBAIC0xNDIs
MTIgKzE0NywyMSBAQCB2b2lkIFRleHRUcmFja0N1ZTo6c2V0SXNBY3RpdmUoYm9vbCBhY3RpdmUp
CiAgICAgbV9pc0FjdGl2ZSA9IGFjdGl2ZTsKIH0KIAorU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
VGV4dFRyYWNrQ3VlOjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gQWN0aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Cit9CisKIHZvaWQg
VGV4dFRyYWNrQ3VlOjpwYXJzZVNldHRpbmdzKGNvbnN0IFN0cmluZyYgaW5wdXQpCiB7CiAgICAg
Ly8gNC44LjEwLjEzLjMgUGFyc2UgdGhlIFdlYlZUVCBzZXR0aW5ncy4KICAgICAvLyAxIC0gSW5p
dGlhbCBzZXR1cC4KICAgICB1bnNpZ25lZCBwb3NpdGlvbiA9IDA7CiAgICAgd2hpbGUgKHBvc2l0
aW9uIDwgaW5wdXQubGVuZ3RoKCkpIHsKKyAgICAgICAgLy8gRGlzY2FyZCBhbnkgc3BhY2UgY2hh
cmFjdGVycyBiZXR3ZWVuIG9yIGFmdGVyIHNldHRpbmdzIChub3QgaW4gdGhlIHNwZWMsIGJ1dCB3
ZSB0aGluayBpdCBzaG91bGQgYmUpLgorICAgICAgICB3aGlsZSAocG9zaXRpb24gPCBpbnB1dC5s
ZW5ndGgoKSAmJiBXZWJWVFRQYXJzZXI6OmlzQVNwYWNlKGlucHV0W3Bvc2l0aW9uXSkpCisgICAg
ICAgICAgICBwb3NpdGlvbisrOworCiAgICAgICAgIC8vIDItNCBTZXR0aW5ncyAtIGdldCB0aGUg
bmV4dCBjaGFyYWN0ZXIgcmVwcmVzZW50aW5nIGEgc2V0dGluZ3MuCiAgICAgICAgIGNoYXIgc2V0
dGluZyA9IGlucHV0W3Bvc2l0aW9uKytdOwogICAgICAgICBpZiAocG9zaXRpb24gPj0gaW5wdXQu
bGVuZ3RoKCkpCkBAIC0yODUsOSArMjk5LDYgQEAgdm9pZCBUZXh0VHJhY2tDdWU6OnBhcnNlU2V0
dGluZ3MoY29uc3QgU3RyaW5nJiBpbnB1dCkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAKLSAgICAgICAgLy8gRGlzY2FyZCBhbnkgcmVtYWluaW5nIHNwYWNlIGNoYXJhY3RlcnMgYmV0
d2VlbiBvciBhZnRlciBzZXR0aW5ncyAobm90IGluIHRoZSBzcGVjLCBidXQgd2UgdGhpbmsgaXQg
c2hvdWxkIGJlKS4KLSAgICAgICAgd2hpbGUgKHBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoKCkgJiYg
V2ViVlRUUGFyc2VyOjppc0FTcGFjZShpbnB1dFtwb3NpdGlvbl0pKQotICAgICAgICAgICAgcG9z
aXRpb24rKzsKICAgICAgICAgY29udGludWU7CiAKIE90aGVyd2lzZToKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvVGV4dFRyYWNrQ3VlLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1Rl
eHRUcmFja0N1ZS5oCmluZGV4IGEyZDEyMWNlZjEwNDczMDUyZDc1NWJlMDk3MGQ2ODFkZGQ5ZGJk
MWYuLmFjMjMyMTQ0Mjk3MmM5ZDk4YWRiOGYwM2QwMjhlYzY2OGUyMmYwZGEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dFRyYWNrQ3VlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9UZXh0VHJhY2tDdWUuaApAQCAtMzMsNiArMzMsNyBAQAogCiAjaWYgRU5BQkxFKFZJREVP
X1RSQUNLKQogCisjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCiAjaW5jbHVkZSAiVGV4dFRy
YWNrLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgpAQCAtNDAsMTMgKzQxLDE0IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IERvY3VtZW50RnJhZ21lbnQ7CitjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogY2xhc3Mg
VGV4dFRyYWNrOwogCi1jbGFzcyBUZXh0VHJhY2tDdWUgOiBwdWJsaWMgUmVmQ291bnRlZDxUZXh0
VHJhY2tDdWU+IHsKK2NsYXNzIFRleHRUcmFja0N1ZSA6IHB1YmxpYyBSZWZDb3VudGVkPFRleHRU
cmFja0N1ZT4sIHB1YmxpYyBBY3RpdmVET01PYmplY3QgewogcHVibGljOgotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFRleHRUcmFja0N1ZT4gY3JlYXRlKGNvbnN0IFN0cmluZyYgaWQsIGRvdWJsZSBz
dGFydCwgZG91YmxlIGVuZCwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBjb25zdCBTdHJpbmcmIHNl
dHRpbmdzLCBib29sIHBhdXNlT25FeGl0KQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHRUcmFj
a0N1ZT4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmlu
ZyYgaWQsIGRvdWJsZSBzdGFydCwgZG91YmxlIGVuZCwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBj
b25zdCBTdHJpbmcmIHNldHRpbmdzLCBib29sIHBhdXNlT25FeGl0KQogICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0VHJhY2tDdWUoaWQsIHN0YXJ0LCBlbmQsIGNvbnRlbnQs
IHNldHRpbmdzLCBwYXVzZU9uRXhpdCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRl
eHRUcmFja0N1ZShjb250ZXh0LCBpZCwgc3RhcnQsIGVuZCwgY29udGVudCwgc2V0dGluZ3MsIHBh
dXNlT25FeGl0KSk7CiAgICAgfQogICAgIAogICAgIGVudW0gRGlyZWN0aW9uIHsgSG9yaXpvbnRh
bCwgVmVydGljYWxHcm93aW5nTGVmdCwgVmVydGljYWxHcm93aW5nUmlnaHQgfTsKQEAgLTcxLDEy
ICs3MywxNSBAQCBwdWJsaWM6CiAKICAgICBTdHJpbmcgZ2V0Q3VlQXNTb3VyY2UoKTsKICAgICBQ
YXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGdldEN1ZUFzSFRNTCgpOworICAgIHZvaWQgc2V0
Q3VlSFRNTChQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+KTsKIAogICAgIGJvb2wgaXNBY3Rp
dmUoKTsKICAgICB2b2lkIHNldElzQWN0aXZlKGJvb2wpOworICAgIAorICAgIHZpcnR1YWwgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0OwogCiBw
cml2YXRlOgotICAgIFRleHRUcmFja0N1ZShjb25zdCBTdHJpbmcmIGlkLCBkb3VibGUgc3RhcnQs
IGRvdWJsZSBlbmQsIGNvbnN0IFN0cmluZyYgY29udGVudCwgY29uc3QgU3RyaW5nJiBzZXR0aW5n
cywgYm9vbCBwYXVzZU9uRXhpdCk7CisgICAgVGV4dFRyYWNrQ3VlKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBjb25zdCBTdHJpbmcmIGlkLCBkb3VibGUgc3RhcnQsIGRvdWJsZSBlbmQsIGNvbnN0
IFN0cmluZyYgY29udGVudCwgY29uc3QgU3RyaW5nJiBzZXR0aW5ncywgYm9vbCBwYXVzZU9uRXhp
dCk7CiAKICAgICB2b2lkIHBhcnNlU2V0dGluZ3MoY29uc3QgU3RyaW5nJik7CiAgICAgCkBAIC05
Myw2ICs5OCw3IEBAIHByaXZhdGU6CiAgICAgaW50IG1fdGV4dFBvc2l0aW9uOwogICAgIGludCBt
X2N1ZVNpemU7CiAgICAgQWxpZ25tZW50IG1fY3VlQWxpZ25tZW50OworICAgIFJlZlB0cjxEb2N1
bWVudEZyYWdtZW50PiBtX2RvY3VtZW50RnJhZ21lbnQ7CiAKICAgICBib29sIG1faXNBY3RpdmU7
CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svQ3VlUGFyc2Vy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlci5jcHAKaW5kZXgg
NGE2ODY5YmE5ZGI0NzFjNDY0ZmM0MGRiNDBjODIxMGNlOTY0ZDIzMy4uNDkwNDdjMTIwZDI5NWRj
YjM4MzkyYWQ2OWUyMzlkZDNjMGI5MmM3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdHJhY2svQ3VlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
cmFjay9DdWVQYXJzZXIuY3BwCkBAIC02MSw2ICs2MSw3IEBAIHZvaWQgQ3VlUGFyc2VyOjpsb2Fk
KGNvbnN0IFN0cmluZyYgdXJsLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBDdWVQ
YXJzCiAgICAgb3B0aW9ucy5jcm9zc09yaWdpblJlcXVlc3RQb2xpY3kgPSBBbGxvd0Nyb3NzT3Jp
Z2luUmVxdWVzdHM7CiAKICAgICBtX2NsaWVudCA9IGNsaWVudDsKKyAgICBtX3NjcmlwdEV4ZWN1
dGlvbkNvbnRleHQgPSBjb250ZXh0OwogCiAgICAgbV9sb2FkZXIgPSBUaHJlYWRhYmxlTG9hZGVy
OjpjcmVhdGUoY29udGV4dCwgdGhpcywgcmVxdWVzdCwgb3B0aW9ucyk7CiB9CkBAIC0xMTAsNyAr
MTExLDcgQEAgdm9pZCBDdWVQYXJzZXI6Om5ld0N1ZXNQYXJzZWQoKQogdm9pZCBDdWVQYXJzZXI6
OmNyZWF0ZVdlYlZUVFBhcnNlcigpCiB7CiAgICAgaWYgKCFtX3ByaXZhdGUpIHsKLSAgICAgICAg
bV9wcml2YXRlID0gV2ViVlRUUGFyc2VyOjpjcmVhdGUodGhpcyk7CisgICAgICAgIG1fcHJpdmF0
ZSA9IFdlYlZUVFBhcnNlcjo6Y3JlYXRlKHRoaXMsIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7
CiAgICAgICAgIG1fY2xpZW50LT50cmFja0xvYWRTdGFydGVkKCk7CiAgICAgfQogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90cmFjay9DdWVQYXJzZXIuaAppbmRleCA3YzZjNjMxNzRlNTc4MzY5
NjA2ZWRhMjVmNDhhZDU0OThkMDg1ZjA4Li43ODFmMDU4MGJlZGMwNjhmZmEwNDYyZWZjYmQxYWYz
ZjY1OTNkNzQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9DdWVQ
YXJzZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9DdWVQYXJzZXIuaApA
QCAtNjksNiArNjksOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBmZXRjaFBhcnNlZEN1ZXMoVmVjdG9y
PFJlZlB0cjxUZXh0VHJhY2tDdWU+ID4mKTsKICAgICB2b2lkIG5ld0N1ZXNQYXJzZWQoKTsKIAor
cHJvdGVjdGVkOgorICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIG1fc2NyaXB0RXhlY3V0aW9u
Q29udGV4dDsKKwogcHJpdmF0ZToKICAgICB2b2lkIGNyZWF0ZVdlYlZUVFBhcnNlcigpOwogIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svV2ViVlRUUGFyc2VyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL1dlYlZUVFBhcnNlci5jcHAKaW5kZXgg
ZjI2NDQzNDYyZGMzNGE3Y2FmYjYxMjM3OGI2NjBmNjhiNDk3ZTJjNi4uOTk2NDZmY2FmMjJmMWIz
NzQ4NTVkZDg4ZTVlNjBkNzMwZWRiMjZhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdHJhY2svV2ViVlRUUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS90cmFjay9XZWJWVFRQYXJzZXIuY3BwCkBAIC0zNCw2ICszNCwxMCBAQAogCiAjaW5jbHVkZSAi
V2ViVlRUUGFyc2VyLmgiCiAKKyNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgorI2luY2x1ZGUgIlBy
b2Nlc3NpbmdJbnN0cnVjdGlvbi5oIgorI2luY2x1ZGUgIlNlZ21lbnRlZFN0cmluZy5oIgorI2lu
Y2x1ZGUgIlRleHQuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpAQCAtNzgsOCArODIsMTAgQEAgU3RyaW5nIFdlYlZUVFBhcnNlcjo6Y29s
bGVjdFdvcmQoY29uc3QgU3RyaW5nJiBpbnB1dCwgdW5zaWduZWQqIHBvc2l0aW9uKQogICAgIHJl
dHVybiBzdHJpbmcudG9TdHJpbmcoKTsKIH0KIAotV2ViVlRUUGFyc2VyOjpXZWJWVFRQYXJzZXIo
Q3VlUGFyc2VyUHJpdmF0ZUNsaWVudCogY2xpZW50KQotICAgIDogbV9zdGF0ZShJbml0aWFsKQor
V2ViVlRUUGFyc2VyOjpXZWJWVFRQYXJzZXIoQ3VlUGFyc2VyUHJpdmF0ZUNsaWVudCogY2xpZW50
LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQorICAgIDogbV9zY3JpcHRFeGVjdXRp
b25Db250ZXh0KGNvbnRleHQpCisgICAgLCBtX3N0YXRlKEluaXRpYWwpCisgICAgLCBtX3Rva2Vu
aXplcihXZWJWVFRUb2tlbml6ZXI6OmNyZWF0ZSgpKQogewogICAgIG1fY2xpZW50ID0gY2xpZW50
OwogfQpAQCAtMjA0LDEwICsyMTAsMjYgQEAgV2ViVlRUUGFyc2VyOjpQYXJzZVN0YXRlIFdlYlZU
VFBhcnNlcjo6aWdub3JlQmFkQ3VlKGNvbnN0IFN0cmluZyYgbGluZSkKIAogdm9pZCBXZWJWVFRQ
YXJzZXI6OnByb2Nlc3NDdWVUZXh0KCkKIHsKLSAgICAvLyA1MSAtIEN1ZSB0ZXh0IHByb2Nlc3Np
bmcgYmFzZWQgb24gV2ViVlRUIGN1ZSB0ZXh0IHBhcnNpbmcgcnVsZXMgYW5kIFdlYlZUVCBjdWUg
dGV4dCBET00gY29uc3RydWN0aW9uIHJ1bGVzLgotICAgIC8vIEZJWE1FKDY0MTMyKTogUHJvY2Vz
cyB0aGUgY3VlIHRleHQgYXMgcGVyIHRoZSBjdWUgdGV4dCBwYXJzaW5nIHJ1bGVzLiAKLSAgICAv
LyAgICAgU291cmNlOiBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVu
dC13b3JrL211bHRpcGFnZS90aGUtaWZyYW1lLWVsZW1lbnQuaHRtbCN3ZWJ2dHQtY3VlLXRleHQt
cGFyc2luZy1ydWxlcwotICAgIFJlZlB0cjxUZXh0VHJhY2tDdWU+IGN1ZSA9IFRleHRUcmFja0N1
ZTo6Y3JlYXRlKG1fY3VycmVudElkLCBtX2N1cnJlbnRTdGFydFRpbWUsIG1fY3VycmVudEVuZFRp
bWUsIG1fY3VycmVudENvbnRlbnQudG9TdHJpbmcoKSwgbV9jdXJyZW50U2V0dGluZ3MsIGZhbHNl
KTsKKyAgICAvLyA1MSAtIEN1ZSB0ZXh0IHByb2Nlc3NpbmcgYmFzZWQgb24KKyAgICAvLyA0Ljgu
MTAuMTMuNCBXZWJWVFQgY3VlIHRleHQgcGFyc2luZyBydWxlcyBhbmQKKyAgICAvLyA0LjguMTAu
MTMuNSBXZWJWVFQgY3VlIHRleHQgRE9NIGNvbnN0cnVjdGlvbiBydWxlcy4KKyAgICBpZiAobV9j
dXJyZW50Q29udGVudC5sZW5ndGgoKSA8PSAwKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NF
UlQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0RvY3VtZW50KCkpOworICAgIERvY3VtZW50
KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0PERvY3VtZW50Kj4obV9zY3JpcHRFeGVjdXRpb25Db250
ZXh0KTsKKworICAgIG1fYXR0YWNobWVudFJvb3QgPSBEb2N1bWVudEZyYWdtZW50OjpjcmVhdGUo
ZG9jdW1lbnQpOworICAgIG1fY3VycmVudE5vZGUgPSBtX2F0dGFjaG1lbnRSb290OworICAgIG1f
dG9rZW5pemVyLT5yZXNldCgpOworICAgIG1fdG9rZW4uY2xlYXIoKTsKKworICAgIFNlZ21lbnRl
ZFN0cmluZyBjb250ZW50KG1fY3VycmVudENvbnRlbnQudG9TdHJpbmcoKSk7CisgICAgd2hpbGUg
KG1fdG9rZW5pemVyLT5uZXh0VG9rZW4oY29udGVudCwgbV90b2tlbikpCisgICAgICAgIGNvbnN0
cnVjdFRyZWVGcm9tVG9rZW4oZG9jdW1lbnQpOworICAgIAorICAgIFJlZlB0cjxUZXh0VHJhY2tD
dWU+IGN1ZSA9IFRleHRUcmFja0N1ZTo6Y3JlYXRlKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwg
bV9jdXJyZW50SWQsIG1fY3VycmVudFN0YXJ0VGltZSwgbV9jdXJyZW50RW5kVGltZSwgbV9jdXJy
ZW50Q29udGVudC50b1N0cmluZygpLCBtX2N1cnJlbnRTZXR0aW5ncywgZmFsc2UpOworICAgIGN1
ZS0+c2V0Q3VlSFRNTChtX2F0dGFjaG1lbnRSb290KTsKICAgICBtX2N1ZWxpc3QuYXBwZW5kKGN1
ZSk7CiAgICAgbV9jbGllbnQtPm5ld0N1ZXNQYXJzZWQoKTsKIH0KQEAgLTI4MSw2ICszMDMsNjAg
QEAgZG91YmxlIFdlYlZUVFBhcnNlcjo6Y29sbGVjdFRpbWVTdGFtcChjb25zdCBTdHJpbmcmIGxp
bmUsIHVuc2lnbmVkKiBwb3NpdGlvbikKICAgICByZXR1cm4gKHZhbHVlMSAqIHNlY29uZHNQZXJI
b3VyKSArICh2YWx1ZTIgKiBzZWNvbmRzUGVyTWludXRlKSArIHZhbHVlMyArICgoZG91YmxlKXZh
bHVlNCAvIDEwMDApOwogfQogCit2b2lkIFdlYlZUVFBhcnNlcjo6Y29uc3RydWN0VHJlZUZyb21U
b2tlbihEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgQXRvbWljU3RyaW5nIHRva2VuVGFnTmFt
ZShtX3Rva2VuLm5hbWUoKS5kYXRhKCksIG1fdG9rZW4ubmFtZSgpLnNpemUoKSk7CisgICAgUXVh
bGlmaWVkTmFtZSB0YWdOYW1lKG51bGxBdG9tLCB0b2tlblRhZ05hbWUsIHhodG1sTmFtZXNwYWNl
VVJJKTsKKworICAgIHN3aXRjaCAobV90b2tlbi50eXBlKCkpIHsKKyAgICBjYXNlIFdlYlZUVFRv
a2VuVHlwZXM6OkNoYXJhY3RlcjogeworICAgICAgICBTdHJpbmcgY29udGVudChtX3Rva2VuLmNo
YXJhY3RlcnMoKS5kYXRhKCksIG1fdG9rZW4uY2hhcmFjdGVycygpLnNpemUoKSk7CisgICAgICAg
IFJlZlB0cjxUZXh0PiBjaGlsZCA9IFRleHQ6OmNyZWF0ZShkb2N1bWVudCwgY29udGVudCk7Cisg
ICAgICAgIG1fY3VycmVudE5vZGUtPnBhcnNlckFkZENoaWxkKGNoaWxkKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIGNhc2UgV2ViVlRUVG9rZW5UeXBlczo6U3RhcnRUYWc6IHsKKyAgICAg
ICAgUmVmUHRyPEhUTUxFbGVtZW50PiBjaGlsZDsKKyAgICAgICAgaWYgKGlzUmVjb2duaXplZFRh
Zyh0b2tlblRhZ05hbWUpKQorICAgICAgICAgICAgY2hpbGQgPSBIVE1MRWxlbWVudDo6Y3JlYXRl
KHRhZ05hbWUsIGRvY3VtZW50KTsKKyAgICAgICAgZWxzZSBpZiAobV90b2tlbi5uYW1lKCkuc2l6
ZSgpID09IDEgJiYgbV90b2tlbi5uYW1lKClbMF0gPT0gJ2MnKQorICAgICAgICAgICAgY2hpbGQg
PSBIVE1MRWxlbWVudDo6Y3JlYXRlKHNwYW5UYWcsIGRvY3VtZW50KTsKKyAgICAgICAgZWxzZSBp
ZiAobV90b2tlbi5uYW1lKCkuc2l6ZSgpID09IDEgJiYgbV90b2tlbi5uYW1lKClbMF0gPT0gJ3Yn
KQorICAgICAgICAgICAgY2hpbGQgPSBIVE1MRWxlbWVudDo6Y3JlYXRlKHFUYWcsIGRvY3VtZW50
KTsKKworICAgICAgICBpZiAoY2hpbGQpIHsKKyAgICAgICAgICAgIGlmIChtX3Rva2VuLmNsYXNz
ZXMoKS5zaXplKCkgPiAwKSB7CisgICAgICAgICAgICAgICAgUmVmUHRyPE5hbWVkTm9kZU1hcD4g
YXR0cmlidXRlTWFwID0gTmFtZWROb2RlTWFwOjpjcmVhdGUoKTsKKyAgICAgICAgICAgICAgICBh
dHRyaWJ1dGVNYXAtPmFkZEF0dHJpYnV0ZShBdHRyaWJ1dGU6OmNyZWF0ZU1hcHBlZChjbGFzc0F0
dHIsIEF0b21pY1N0cmluZyhtX3Rva2VuLmNsYXNzZXMoKS5kYXRhKCksIG1fdG9rZW4uY2xhc3Nl
cygpLnNpemUoKSkpKTsKKyAgICAgICAgICAgICAgICBjaGlsZC0+c2V0QXR0cmlidXRlTWFwKGF0
dHJpYnV0ZU1hcC5yZWxlYXNlKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNo
aWxkLT5oYXNUYWdOYW1lKHFUYWcpKQorICAgICAgICAgICAgICAgIGNoaWxkLT5zZXRBdHRyaWJ1
dGUodGl0bGVBdHRyLCBTdHJpbmcobV90b2tlbi5hbm5vdGF0aW9uKCkuZGF0YSgpLCBtX3Rva2Vu
LmFubm90YXRpb24oKS5zaXplKCkpKTsKKyAgICAgICAgICAgIG1fY3VycmVudE5vZGUtPnBhcnNl
ckFkZENoaWxkKGNoaWxkKTsKKyAgICAgICAgICAgIG1fY3VycmVudE5vZGUgPSBjaGlsZDsKKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBXZWJWVFRUb2tlblR5cGVz
OjpFbmRUYWc6CisgICAgICAgIGlmIChpc1JlY29nbml6ZWRUYWcodG9rZW5UYWdOYW1lKQorICAg
ICAgICAgICAgfHwgbV90b2tlbi5uYW1lKCkuc2l6ZSgpID09IDEgJiYgbV90b2tlbi5uYW1lKClb
MF0gPT0gJ2MnCisgICAgICAgICAgICB8fCBtX3Rva2VuLm5hbWUoKS5zaXplKCkgPT0gMSAmJiBt
X3Rva2VuLm5hbWUoKVswXSA9PSAndicpCisgICAgICAgICAgICBpZiAobV9jdXJyZW50Tm9kZS0+
cGFyZW50Tm9kZSgpKQorICAgICAgICAgICAgICAgIG1fY3VycmVudE5vZGUgPSBtX2N1cnJlbnRO
b2RlLT5wYXJlbnROb2RlKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV2ViVlRUVG9rZW5U
eXBlczo6VGltZXN0YW1wVGFnOiB7CisgICAgICAgIHVuc2lnbmVkIHBvc2l0aW9uID0gMDsKKyAg
ICAgICAgZG91YmxlIHRpbWUgPSBjb2xsZWN0VGltZVN0YW1wKG1fdG9rZW4uY2hhcmFjdGVycygp
LmRhdGEoKSwgJnBvc2l0aW9uKTsKKyAgICAgICAgaWYgKHRpbWUgIT0gbWFsZm9ybWVkVGltZSkK
KyAgICAgICAgICAgIG1fY3VycmVudE5vZGUtPnBhcnNlckFkZENoaWxkKFByb2Nlc3NpbmdJbnN0
cnVjdGlvbjo6Y3JlYXRlKGRvY3VtZW50LCAidGltZXN0YW1wIiwgU3RyaW5nKG1fdG9rZW4uY2hh
cmFjdGVycygpLmRhdGEoKSwgbV90b2tlbi5jaGFyYWN0ZXJzKCkuc2l6ZSgpKSkpOworICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IG1fdG9rZW4uY2xlYXIoKTsKK30KKwogdm9pZCBXZWJWVFRQYXJzZXI6OnNraXBXaGl0ZVNwYWNl
KGNvbnN0IFN0cmluZyYgbGluZSwgdW5zaWduZWQqIHBvc2l0aW9uKQogewogICAgIHdoaWxlICgq
cG9zaXRpb24gPCBsaW5lLmxlbmd0aCgpICYmIGlzQVNwYWNlKGxpbmVbKnBvc2l0aW9uXSkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9XZWJWVFRQYXJzZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL1dlYlZUVFBhcnNlci5oCmluZGV4IGE2OTM1
MmMwZDg3OTIyMzQzNDA0ZTZmMWUwOTdiNTkwODNhYjk1ZDkuLjAyYmQ4YjdjYWQyZWExNDZlZGYz
N2Y1NjAwODE5ODVlODU4Mzg0MWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RyYWNrL1dlYlZUVFBhcnNlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNr
L1dlYlZUVFBhcnNlci5oCkBAIC0zNCwxMSArMzQsMTcgQEAKICNpZiBFTkFCTEUoVklERU9fVFJB
Q0spCiAKICNpbmNsdWRlICJDdWVQYXJzZXJQcml2YXRlLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQu
aCIKKyNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgi
CisjaW5jbHVkZSAiV2ViVlRUVG9rZW5pemVyLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKKwogc3RhdGljIGNvbnN0IGludCBz
ZWNvbmRzUGVySG91ciA9IDM2MDA7CiBzdGF0aWMgY29uc3QgaW50IHNlY29uZHNQZXJNaW51dGUg
PSA2MDsKIHN0YXRpYyBjb25zdCBkb3VibGUgbWFsZm9ybWVkVGltZSA9IC0xOwpAQCAtNDksMTMg
KzU1LDIyIEBAIHB1YmxpYzoKICAgICAKICAgICBlbnVtIFBhcnNlU3RhdGUgeyBJbml0aWFsLCBI
ZWFkZXIsIElkLCBUaW1pbmdzQW5kU2V0dGluZ3MsIEN1ZVRleHQsIEJhZEN1ZSB9OwogCi0gICAg
c3RhdGljIFBhc3NPd25QdHI8V2ViVlRUUGFyc2VyPiBjcmVhdGUoQ3VlUGFyc2VyUHJpdmF0ZUNs
aWVudCogY2xpZW50KQorICAgIHN0YXRpYyBQYXNzT3duUHRyPFdlYlZUVFBhcnNlcj4gY3JlYXRl
KEN1ZVBhcnNlclByaXZhdGVDbGllbnQqIGNsaWVudCwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgV2ViVlRUUGFyc2Vy
KGNsaWVudCkpOworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFdlYlZUVFBhcnNlcihjbGll
bnQsIGNvbnRleHQpKTsKICAgICB9CiAgICAgCiAgICAgc3RhdGljIGJvb2wgaGFzUmVxdWlyZWRG
aWxlSWRlbnRpZmllcihjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpOwogCisgICAg
c3RhdGljIGlubGluZSBib29sIGlzUmVjb2duaXplZFRhZyhjb25zdCBBdG9taWNTdHJpbmcmIHRh
Z05hbWUpCisgICAgeworICAgICAgICByZXR1cm4gdGFnTmFtZSA9PSBpVGFnCisgICAgICAgICAg
ICB8fCB0YWdOYW1lID09IGJUYWcKKyAgICAgICAgICAgIHx8IHRhZ05hbWUgPT0gdVRhZworICAg
ICAgICAgICAgfHwgdGFnTmFtZSA9PSBydWJ5VGFnCisgICAgICAgICAgICB8fCB0YWdOYW1lID09
IHJ0VGFnOworICAgIH0KKwogICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0FTcGFjZShjaGFyIGMp
CiAgICAgewogICAgICAgICAvLyBXZWJWVFQgc3BhY2UgY2hhcmFjdGVycyBhcmUgVSswMDIwIFNQ
QUNFLCBVKzAwMDkgQ0hBUkFDVEVSIFRBQlVMQVRJT04gKHRhYiksIFUrMDAwQSBMSU5FIEZFRUQg
KExGKSwgVSswMDBDIEZPUk0gRkVFRCAoRkYpLCBhbmQgVSswMDBEIENBUlJJQUdFIFJFVFVSTiAg
ICAoQ1IpLgpAQCAtNjksOCArODQsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHBhcnNl
Qnl0ZXMoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKTsKIAogcHJvdGVjdGVkOgot
ICAgIFdlYlZUVFBhcnNlcihDdWVQYXJzZXJQcml2YXRlQ2xpZW50Kik7CisgICAgV2ViVlRUUGFy
c2VyKEN1ZVBhcnNlclByaXZhdGVDbGllbnQqLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CiAg
ICAgCisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0
OwogICAgIFBhcnNlU3RhdGUgbV9zdGF0ZTsKIAogcHJpdmF0ZToKQEAgLTg1LDEyICsxMDEsMjAg
QEAgcHJpdmF0ZToKICAgICB2b2lkIHNraXBXaGl0ZVNwYWNlKGNvbnN0IFN0cmluZyYsIHVuc2ln
bmVkKik7CiAgICAgc3RhdGljIHZvaWQgc2tpcExpbmVUZXJtaW5hdG9yKGNvbnN0IGNoYXIqIGRh
dGEsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQqKTsKICAgICBzdGF0aWMgU3RyaW5nIGNvbGxl
Y3ROZXh0TGluZShjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkKik7
CisgICAgCisgICAgdm9pZCBjb25zdHJ1Y3RUcmVlRnJvbVRva2VuKERvY3VtZW50Kik7CiAKICAg
ICBTdHJpbmcgbV9jdXJyZW50SWQ7CiAgICAgZG91YmxlIG1fY3VycmVudFN0YXJ0VGltZTsKICAg
ICBkb3VibGUgbV9jdXJyZW50RW5kVGltZTsKICAgICBTdHJpbmdCdWlsZGVyIG1fY3VycmVudENv
bnRlbnQ7CiAgICAgU3RyaW5nIG1fY3VycmVudFNldHRpbmdzOworICAgIAorICAgIFdlYlZUVFRv
a2VuIG1fdG9rZW47CisgICAgT3duUHRyPFdlYlZUVFRva2VuaXplcj4gbV90b2tlbml6ZXI7CisK
KyAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gbV9hdHRhY2htZW50Um9vdDsKKyAgICBSZWZQ
dHI8Q29udGFpbmVyTm9kZT4gbV9jdXJyZW50Tm9kZTsKIAogICAgIEN1ZVBhcnNlclByaXZhdGVD
bGllbnQqIG1fY2xpZW50OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
cmFjay9XZWJWVFRUb2tlbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svV2ViVlRU
VG9rZW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi41ODY4ZmNlYjNiYjE5NmEzM2ZjNmRlMmE5MzIwYjQzMjZiZDdk
MWEwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svV2Vi
VlRUVG9rZW4uaApAQCAtMCwwICsxLDE1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBH
b29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlZUVFRva2VuX2gKKyNkZWZp
bmUgV2ViVlRUVG9rZW5faAorCisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorCisjaW5jbHVkZSAi
TWFya3VwVG9rZW5CYXNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV2ViVlRU
VG9rZW5UeXBlcyB7CitwdWJsaWM6CisgICAgZW51bSBUeXBlIHsKKyAgICAgICAgVW5pbml0aWFs
aXplZCwKKyAgICAgICAgQ2hhcmFjdGVyLAorICAgICAgICBTdGFydFRhZywKKyAgICAgICAgRW5k
VGFnLAorICAgICAgICBUaW1lc3RhbXBUYWcsCisgICAgICAgIEVuZE9mRmlsZSwKKyAgICB9Owor
fTsKKworY2xhc3MgV2ViVlRUVG9rZW4gOiBwdWJsaWMgTWFya3VwVG9rZW5CYXNlPFdlYlZUVFRv
a2VuVHlwZXM+IHsKK3B1YmxpYzoKKyAgICB2b2lkIGFwcGVuZFRvTmFtZShVQ2hhciBjaGFyYWN0
ZXIpCisgICAgeworICAgICAgICBBU1NFUlQobV90eXBlID09IFdlYlZUVFRva2VuVHlwZXM6OlN0
YXJ0VGFnIHx8IG1fdHlwZSA9PSBXZWJWVFRUb2tlblR5cGVzOjpFbmRUYWcpOworICAgICAgICBN
YXJrdXBUb2tlbkJhc2U8V2ViVlRUVG9rZW5UeXBlcz46OmFwcGVuZFRvTmFtZShjaGFyYWN0ZXIp
OworICAgIH0KKyAgICAKKyAgICBjb25zdCBEYXRhVmVjdG9yJiBuYW1lKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBNYXJrdXBUb2tlbkJhc2U8V2ViVlRUVG9rZW5UeXBlcz46Om5hbWUo
KTsKKyAgICB9CisgICAgCisgICAgY29uc3QgRGF0YVZlY3RvciYgY2hhcmFjdGVycygpIGNvbnN0
CisgICAgeworICAgICAgICBBU1NFUlQobV90eXBlID09IFR5cGU6OkNoYXJhY3RlciB8fCBtX3R5
cGUgPT0gVHlwZTo6VGltZXN0YW1wVGFnKTsKKyAgICAgICAgcmV0dXJuIG1fZGF0YTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBiZWdpbkVtcHR5U3RhcnRUYWcoKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKG1fdHlwZSA9PSBUeXBlOjpVbmluaXRpYWxpemVkKTsKKyAgICAgICAgbV90eXBlID0gVHlw
ZTo6U3RhcnRUYWc7CisgICAgICAgIG1fY3VycmVudEF0dHJpYnV0ZSA9IDA7CisgICAgICAgIG1f
YXR0cmlidXRlcy5jbGVhcigpOworICAgICAgICBtX2RhdGEuY2xlYXIoKTsKKyAgICB9CisgCisg
ICAgdm9pZCBiZWdpblRpbWVzdGFtcFRhZyhVQ2hhciBjaGFyYWN0ZXIpCisgICAgeworICAgICAg
ICBBU1NFUlQoY2hhcmFjdGVyKTsKKyAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBUeXBlOjpVbmlu
aXRpYWxpemVkKTsKKyAgICAgICAgbV90eXBlID0gVHlwZTo6VGltZXN0YW1wVGFnOworICAgICAg
ICBtX3NlbGZDbG9zaW5nID0gdHJ1ZTsKKyAgICAgICAgbV9kYXRhLmFwcGVuZChjaGFyYWN0ZXIp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGFwcGVuZFRvVGltZXN0YW1wKFVDaGFyIGNoYXJhY3Rl
cikKKyAgICB7CisgICAgICAgIEFTU0VSVChjaGFyYWN0ZXIpOworICAgICAgICBBU1NFUlQobV90
eXBlID09IFR5cGU6OlRpbWVzdGFtcFRhZyk7CisgICAgICAgIG1fZGF0YS5hcHBlbmQoY2hhcmFj
dGVyKTsKKyAgICB9CisKKyAgICB2b2lkIGFwcGVuZFRvQ2xhc3MoVUNoYXIgY2hhcmFjdGVyKQor
ICAgIHsKKyAgICAgICAgYXBwZW5kVG9TdGFydFR5cGUoY2hhcmFjdGVyKTsKKyAgICB9CisKKyAg
ICB2b2lkIGFkZE5ld0NsYXNzKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gVHlw
ZTo6U3RhcnRUYWcpOworICAgICAgICBpZiAoIW1fY2xhc3Nlcy5pc0VtcHR5KCkpCisgICAgICAg
ICAgICBtX2NsYXNzZXMuYXBwZW5kKCcgJyk7CisgICAgICAgIG1fY2xhc3Nlcy5hcHBlbmQobV9j
dXJyZW50QnVmZmVyKTsKKyAgICAgICAgbV9jdXJyZW50QnVmZmVyLmNsZWFyKCk7CisgICAgfQor
ICAgIAorICAgIGNvbnN0IERhdGFWZWN0b3ImIGNsYXNzZXMoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fY2xhc3NlczsKKyAgICB9CisKKyAgICB2b2lkIGFwcGVuZFRvQW5ub3RhdGlv
bihVQ2hhciBjaGFyYWN0ZXIpCisgICAgeworICAgICAgICBhcHBlbmRUb1N0YXJ0VHlwZShjaGFy
YWN0ZXIpOworICAgIH0KKyAgICAgICAgCisgICAgdm9pZCBhZGROZXdBbm5vdGF0aW9uKCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gVHlwZTo6U3RhcnRUYWcpOworICAgICAgICBt
X2Fubm90YXRpb24uY2xlYXIoKTsKKyAgICAgICAgbV9hbm5vdGF0aW9uLmFwcGVuZChtX2N1cnJl
bnRCdWZmZXIpOworICAgICAgICBtX2N1cnJlbnRCdWZmZXIuY2xlYXIoKTsKKyAgICB9CisgICAg
CisgICAgY29uc3QgRGF0YVZlY3RvciYgYW5ub3RhdGlvbigpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV9hbm5vdGF0aW9uOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNsZWFyKCkKKyAg
ICB7CisgICAgICAgIG1fYW5ub3RhdGlvbi5jbGVhcigpOworICAgICAgICBtX2NsYXNzZXMuY2xl
YXIoKTsKKyAgICAgICAgbV9jdXJyZW50QnVmZmVyLmNsZWFyKCk7CisgICAgICAgIE1hcmt1cFRv
a2VuQmFzZTxXZWJWVFRUb2tlblR5cGVzPjo6Y2xlYXIoKTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgdm9pZCBhcHBlbmRUb1N0YXJ0VHlwZShVQ2hhciBjaGFyYWN0ZXIpCisgICAgeworICAgICAg
ICBBU1NFUlQoY2hhcmFjdGVyKTsKKyAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBUeXBlOjpTdGFy
dFRhZyk7CisgICAgICAgIG1fY3VycmVudEJ1ZmZlci5hcHBlbmQoY2hhcmFjdGVyKTsKKyAgICB9
CisKKyAgICBEYXRhVmVjdG9yIG1fYW5ub3RhdGlvbjsKKyAgICBEYXRhVmVjdG9yIG1fY2xhc3Nl
czsKKyAgICBEYXRhVmVjdG9yIG1fY3VycmVudEJ1ZmZlcjsKK307CisKK30KKworI2VuZGlmCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL1dlYlZUVFRv
a2VuaXplci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9XZWJWVFRUb2tlbml6
ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjk0NjE4YWI2MzkwM2MxYzMyMTk5NzUwNTAwY2FjMWMzZmI4NDU2
ODcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9XZWJW
VFRUb2tlbml6ZXIuY3BwCkBAIC0wLDAgKzEsMjMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKwor
I2lmIEVOQUJMRShWSURFT19UUkFDSykKKworI2luY2x1ZGUgIldlYlZUVFRva2VuaXplci5oIgor
CisjaW5jbHVkZSAiTWFya3VwVG9rZW5pemVySW5saW5lTWV0aG9kcy5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKKyNkZWZpbmUgV0VCVlRUX0JFR0lOX1NUQVRFKHN0YXRlTmFtZSkgQkVHSU5f
U1RBVEUoV2ViVlRUVG9rZW5pemVyU3RhdGUsIHN0YXRlTmFtZSkKKyNkZWZpbmUgV0VCVlRUX0FE
VkFOQ0VfVE8oc3RhdGVOYW1lKSBBRFZBTkNFX1RPKFdlYlZUVFRva2VuaXplclN0YXRlLCBzdGF0
ZU5hbWUpCisKK1dlYlZUVFRva2VuaXplcjo6V2ViVlRUVG9rZW5pemVyKCkKK3sKKyAgICByZXNl
dCgpOworfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgYm9vbCBNYXJrdXBUb2tlbml6ZXJCYXNlPFdl
YlZUVFRva2VuLCBXZWJWVFRUb2tlbml6ZXJTdGF0ZT46OnNob3VsZFNraXBOdWxsQ2hhcmFjdGVy
cygpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2lubGluZSBib29sIHZlY3RvckVx
dWFsc1N0cmluZyhjb25zdCBWZWN0b3I8VUNoYXIsIDMyPiYgdmVjdG9yLCBjb25zdCBTdHJpbmcm
IHN0cmluZykKK3sKKyAgICBpZiAodmVjdG9yLnNpemUoKSAhPSBzdHJpbmcubGVuZ3RoKCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjb25zdCBVQ2hhciogc3RyaW5nRGF0YSA9IHN0cmlu
Zy5jaGFyYWN0ZXJzKCk7CisgICAgY29uc3QgVUNoYXIqIHZlY3RvckRhdGEgPSB2ZWN0b3IuZGF0
YSgpOworICAgIHJldHVybiAhbWVtY21wKHN0cmluZ0RhdGEsIHZlY3RvckRhdGEsIHZlY3Rvci5z
aXplKCkgKiBzaXplb2YoVUNoYXIpKTsKK30KKwordm9pZCBXZWJWVFRUb2tlbml6ZXI6OnJlc2V0
KCkKK3sKKyAgICBtX3N0YXRlID0gV2ViVlRUVG9rZW5pemVyU3RhdGU6OkRhdGFTdGF0ZTsKKyAg
ICBtX3Rva2VuID0gMDsKKyAgICBtX2xpbmVOdW1iZXIgPSAwOworICAgIG1fYnVmZmVyLmNsZWFy
KCk7Cit9CisgICAgCitib29sIFdlYlZUVFRva2VuaXplcjo6bmV4dFRva2VuKFNlZ21lbnRlZFN0
cmluZyYgc291cmNlLCBXZWJWVFRUb2tlbiYgdG9rZW4pCit7CisgICAgLy8gSWYgd2UgaGF2ZSBh
IHRva2VuIGluIHByb2dyZXNzLCB0aGVuIHdlJ3JlIHN1cHBvc2VkIHRvIGJlIGNhbGxlZCBiYWNr
CisgICAgLy8gd2l0aCB0aGUgc2FtZSB0b2tlbiBzbyB3ZSBjYW4gZmluaXNoIGl0LgorICAgIEFT
U0VSVCghbV90b2tlbiB8fCBtX3Rva2VuID09ICZ0b2tlbiB8fCB0b2tlbi50eXBlKCkgPT0gV2Vi
VlRUVG9rZW5UeXBlczo6VW5pbml0aWFsaXplZCk7CisgICAgbV90b2tlbiA9ICZ0b2tlbjsKKwor
ICAgIGlmIChzb3VyY2UuaXNFbXB0eSgpIHx8ICFtX2lucHV0U3RyZWFtUHJlcHJvY2Vzc29yLnBl
ZWsoc291cmNlLCBtX2xpbmVOdW1iZXIpKQorICAgICAgICByZXR1cm4gaGF2ZUJ1ZmZlcmVkQ2hh
cmFjdGVyVG9rZW4oKTsKKworICAgIFVDaGFyIGNjID0gbV9pbnB1dFN0cmVhbVByZXByb2Nlc3Nv
ci5uZXh0SW5wdXRDaGFyYWN0ZXIoKTsKKworICAgIC8vIDQuOC4xMC4xMy40IFdlYlZUVCBjdWUg
dGV4dCB0b2tlbml6ZXIKKyAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICBXRUJWVFRfQkVHSU5f
U1RBVEUoRGF0YVN0YXRlKSB7CisgICAgICAgIGlmIChjYyA9PSAnJicpIHsKKyAgICAgICAgICAg
IG1fYnVmZmVyLmFwcGVuZChjYyk7CisgICAgICAgICAgICBXRUJWVFRfQURWQU5DRV9UTyhFc2Nh
cGVTdGF0ZSk7CisgICAgICAgIH0gZWxzZSBpZiAoY2MgPT0gJzwnKSB7CisgICAgICAgICAgICBp
ZiAobV90b2tlbi0+dHlwZSgpID09IFdlYlZUVFRva2VuVHlwZXM6OlVuaW5pdGlhbGl6ZWQKKyAg
ICAgICAgICAgICAgICB8fCB2ZWN0b3JFcXVhbHNTdHJpbmcobV90b2tlbi0+Y2hhcmFjdGVycygp
LCBlbXB0eVN0cmluZygpKSkKKyAgICAgICAgICAgICAgICBXRUJWVFRfQURWQU5DRV9UTyhUYWdT
dGF0ZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIGVtaXRBbmRS
ZXN1bWVJbihzb3VyY2UsIFdlYlZUVFRva2VuaXplclN0YXRlOjpUYWdTdGF0ZSk7CisgICAgICAg
IH0gZWxzZSBpZiAoY2MgPT0gSW5wdXRTdHJlYW1QcmVwcm9jZXNzb3I6OmVuZE9mRmlsZU1hcmtl
cikKKyAgICAgICAgICAgIHJldHVybiBlbWl0RW5kT2ZGaWxlKHNvdXJjZSk7CisgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgYnVmZmVyQ2hhcmFjdGVyKGNjKTsKKyAgICAgICAgICAgIFdFQlZU
VF9BRFZBTkNFX1RPKERhdGFTdGF0ZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgRU5EX1NUQVRF
KCkKKworICAgIFdFQlZUVF9CRUdJTl9TVEFURShFc2NhcGVTdGF0ZSkgeworICAgICAgICBpZiAo
Y2MgPT0gJzsnKSB7CisgICAgICAgICAgICBpZiAodmVjdG9yRXF1YWxzU3RyaW5nKG1fYnVmZmVy
LCAiJmFtcCIpKQorICAgICAgICAgICAgICAgIGJ1ZmZlckNoYXJhY3RlcignJicpOworICAgICAg
ICAgICAgZWxzZSBpZiAodmVjdG9yRXF1YWxzU3RyaW5nKG1fYnVmZmVyLCAiJmx0IikpCisgICAg
ICAgICAgICAgICAgYnVmZmVyQ2hhcmFjdGVyKCc8Jyk7CisgICAgICAgICAgICBlbHNlIGlmICh2
ZWN0b3JFcXVhbHNTdHJpbmcobV9idWZmZXIsICImZ3QiKSkKKyAgICAgICAgICAgICAgICBidWZm
ZXJDaGFyYWN0ZXIoJz4nKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIG1f
YnVmZmVyLmFwcGVuZChjYyk7CisgICAgICAgICAgICAgICAgbV90b2tlbi0+YXBwZW5kVG9DaGFy
YWN0ZXIobV9idWZmZXIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9idWZmZXIuY2xl
YXIoKTsKKyAgICAgICAgICAgIFdFQlZUVF9BRFZBTkNFX1RPKERhdGFTdGF0ZSk7CisgICAgICAg
IH0gZWxzZSBpZiAoaXNBU0NJSUFscGhhbnVtZXJpYyhjYykpIHsKKyAgICAgICAgICAgIG1fYnVm
ZmVyLmFwcGVuZChjYyk7CisgICAgICAgICAgICBXRUJWVFRfQURWQU5DRV9UTyhFc2NhcGVTdGF0
ZSk7CisgICAgICAgIH0gZWxzZSBpZiAoY2MgPT0gSW5wdXRTdHJlYW1QcmVwcm9jZXNzb3I6OmVu
ZE9mRmlsZU1hcmtlcikgeworICAgICAgICAgICAgbV90b2tlbi0+YXBwZW5kVG9DaGFyYWN0ZXIo
bV9idWZmZXIpOworICAgICAgICAgICAgcmV0dXJuIGVtaXRFbmRPZkZpbGUoc291cmNlKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICghdmVjdG9yRXF1YWxzU3RyaW5nKG1fYnVm
ZmVyLCAiJiIpKQorICAgICAgICAgICAgICAgIG1fdG9rZW4tPmFwcGVuZFRvQ2hhcmFjdGVyKG1f
YnVmZmVyKTsKKyAgICAgICAgICAgIG1fYnVmZmVyLmNsZWFyKCk7CisgICAgICAgICAgICBXRUJW
VFRfQURWQU5DRV9UTyhEYXRhU3RhdGUpOworICAgICAgICB9CisgICAgfQorICAgIEVORF9TVEFU
RSgpCisKKyAgICBXRUJWVFRfQkVHSU5fU1RBVEUoVGFnU3RhdGUpIHsKKyAgICAgICAgaWYgKGlz
VG9rZW5pemVyV2hpdGVzcGFjZShjYykpIHsKKyAgICAgICAgICAgIG1fdG9rZW4tPmJlZ2luRW1w
dHlTdGFydFRhZygpOworICAgICAgICAgICAgV0VCVlRUX0FEVkFOQ0VfVE8oU3RhcnRUYWdBbm5v
dGF0aW9uU3RhdGUpOworICAgICAgICB9IGVsc2UgaWYgKGNjID09ICcuJykgeworICAgICAgICAg
ICAgbV90b2tlbi0+YmVnaW5FbXB0eVN0YXJ0VGFnKCk7CisgICAgICAgICAgICBXRUJWVFRfQURW
QU5DRV9UTyhTdGFydFRhZ0NsYXNzU3RhdGUpOworICAgICAgICB9IGVsc2UgaWYgKGNjID09ICcv
JykgeworICAgICAgICAgICAgV0VCVlRUX0FEVkFOQ0VfVE8oRW5kVGFnT3BlblN0YXRlKTsKKyAg
ICAgICAgfSBlbHNlIGlmIChXVEY6OmlzQVNDSUlEaWdpdChjYykpIHsKKyAgICAgICAgICAgIG1f
dG9rZW4tPmJlZ2luVGltZXN0YW1wVGFnKGNjKTsKKyAgICAgICAgICAgIFdFQlZUVF9BRFZBTkNF
X1RPKFRpbWVzdGFtcFRhZ1N0YXRlKTsKKyAgICAgICAgfSBlbHNlIGlmIChjYyA9PSAnPicgfHwg
Y2MgPT0gSW5wdXRTdHJlYW1QcmVwcm9jZXNzb3I6OmVuZE9mRmlsZU1hcmtlcikgeworICAgICAg
ICAgICAgbV90b2tlbi0+YmVnaW5FbXB0eVN0YXJ0VGFnKCk7CisgICAgICAgICAgICByZXR1cm4g
ZW1pdEFuZFJlc3VtZUluKHNvdXJjZSwgV2ViVlRUVG9rZW5pemVyU3RhdGU6OkRhdGFTdGF0ZSk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX3Rva2VuLT5iZWdpblN0YXJ0VGFnKGNj
KTsKKyAgICAgICAgICAgIFdFQlZUVF9BRFZBTkNFX1RPKFN0YXJ0VGFnU3RhdGUpOworICAgICAg
ICB9CisgICAgfQorICAgIEVORF9TVEFURSgpCisKKyAgICBXRUJWVFRfQkVHSU5fU1RBVEUoU3Rh
cnRUYWdTdGF0ZSkgeworICAgICAgICBpZiAoaXNUb2tlbml6ZXJXaGl0ZXNwYWNlKGNjKSkKKyAg
ICAgICAgICAgIFdFQlZUVF9BRFZBTkNFX1RPKFN0YXJ0VGFnQW5ub3RhdGlvblN0YXRlKTsKKyAg
ICAgICAgZWxzZSBpZiAoY2MgPT0gJy4nKQorICAgICAgICAgICAgV0VCVlRUX0FEVkFOQ0VfVE8o
U3RhcnRUYWdDbGFzc1N0YXRlKTsKKyAgICAgICAgZWxzZSBpZiAoY2MgPT0gJz4nIHx8IGNjID09
IElucHV0U3RyZWFtUHJlcHJvY2Vzc29yOjplbmRPZkZpbGVNYXJrZXIpCisgICAgICAgICAgICBy
ZXR1cm4gZW1pdEFuZFJlc3VtZUluKHNvdXJjZSwgV2ViVlRUVG9rZW5pemVyU3RhdGU6OkRhdGFT
dGF0ZSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbV90b2tlbi0+YXBwZW5kVG9OYW1l
KGNjKTsKKyAgICAgICAgICAgIFdFQlZUVF9BRFZBTkNFX1RPKFN0YXJ0VGFnU3RhdGUpOworICAg
ICAgICB9CisgICAgfQorICAgIEVORF9TVEFURSgpCisKKyAgICBXRUJWVFRfQkVHSU5fU1RBVEUo
U3RhcnRUYWdDbGFzc1N0YXRlKSB7CisgICAgICAgIGlmIChpc1Rva2VuaXplcldoaXRlc3BhY2Uo
Y2MpKSB7CisgICAgICAgICAgICBtX3Rva2VuLT5hZGROZXdDbGFzcygpOworICAgICAgICAgICAg
V0VCVlRUX0FEVkFOQ0VfVE8oU3RhcnRUYWdBbm5vdGF0aW9uU3RhdGUpOworICAgICAgICB9IGVs
c2UgaWYgKGNjID09ICcuJykgeworICAgICAgICAgICAgbV90b2tlbi0+YWRkTmV3Q2xhc3MoKTsK
KyAgICAgICAgICAgIFdFQlZUVF9BRFZBTkNFX1RPKFN0YXJ0VGFnQ2xhc3NTdGF0ZSk7CisgICAg
ICAgIH0gZWxzZSBpZiAoY2MgPT0gJz4nIHx8IGNjID09IElucHV0U3RyZWFtUHJlcHJvY2Vzc29y
OjplbmRPZkZpbGVNYXJrZXIpIHsKKyAgICAgICAgICAgIG1fdG9rZW4tPmFkZE5ld0NsYXNzKCk7
CisgICAgICAgICAgICByZXR1cm4gZW1pdEFuZFJlc3VtZUluKHNvdXJjZSwgV2ViVlRUVG9rZW5p
emVyU3RhdGU6OkRhdGFTdGF0ZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX3Rv
a2VuLT5hcHBlbmRUb0NsYXNzKGNjKTsKKyAgICAgICAgICAgIFdFQlZUVF9BRFZBTkNFX1RPKFN0
YXJ0VGFnQ2xhc3NTdGF0ZSk7CisgICAgICAgIH0KKworICAgIH0KKyAgICBFTkRfU1RBVEUoKQor
CisgICAgV0VCVlRUX0JFR0lOX1NUQVRFKFN0YXJ0VGFnQW5ub3RhdGlvblN0YXRlKSB7CisgICAg
ICAgIGlmIChjYyA9PSAnPicgfHwgY2MgPT0gSW5wdXRTdHJlYW1QcmVwcm9jZXNzb3I6OmVuZE9m
RmlsZU1hcmtlcikgeworICAgICAgICAgICAgbV90b2tlbi0+YWRkTmV3QW5ub3RhdGlvbigpOwor
ICAgICAgICAgICAgcmV0dXJuIGVtaXRBbmRSZXN1bWVJbihzb3VyY2UsIFdlYlZUVFRva2VuaXpl
clN0YXRlOjpEYXRhU3RhdGUpOworICAgICAgICB9CisgICAgICAgIG1fdG9rZW4tPmFwcGVuZFRv
QW5ub3RhdGlvbihjYyk7CisgICAgICAgIFdFQlZUVF9BRFZBTkNFX1RPKFN0YXJ0VGFnQW5ub3Rh
dGlvblN0YXRlKTsKKyAgICB9CisgICAgRU5EX1NUQVRFKCkKKyAgICAKKyAgICBXRUJWVFRfQkVH
SU5fU1RBVEUoRW5kVGFnT3BlblN0YXRlKSB7CisgICAgICAgIGlmIChjYyA9PSAnPicgfHwgY2Mg
PT0gSW5wdXRTdHJlYW1QcmVwcm9jZXNzb3I6OmVuZE9mRmlsZU1hcmtlcikgeworICAgICAgICAg
ICAgbV90b2tlbi0+YmVnaW5FbmRUYWcoJ1wwJyk7CisgICAgICAgICAgICByZXR1cm4gZW1pdEFu
ZFJlc3VtZUluKHNvdXJjZSwgV2ViVlRUVG9rZW5pemVyU3RhdGU6OkRhdGFTdGF0ZSk7CisgICAg
ICAgIH0KKyAgICAgICAgbV90b2tlbi0+YmVnaW5FbmRUYWcoY2MpOworICAgICAgICBXRUJWVFRf
QURWQU5DRV9UTyhFbmRUYWdTdGF0ZSk7CisgICAgfQorICAgIEVORF9TVEFURSgpCisKKyAgICBX
RUJWVFRfQkVHSU5fU1RBVEUoRW5kVGFnU3RhdGUpIHsKKyAgICAgICAgaWYgKGNjID09ICc+JyB8
fCBjYyA9PSBJbnB1dFN0cmVhbVByZXByb2Nlc3Nvcjo6ZW5kT2ZGaWxlTWFya2VyKQorICAgICAg
ICAgICAgcmV0dXJuIGVtaXRBbmRSZXN1bWVJbihzb3VyY2UsIFdlYlZUVFRva2VuaXplclN0YXRl
OjpEYXRhU3RhdGUpOworICAgICAgICBtX3Rva2VuLT5hcHBlbmRUb05hbWUoY2MpOworICAgICAg
ICBXRUJWVFRfQURWQU5DRV9UTyhFbmRUYWdTdGF0ZSk7CisgICAgfQorICAgIEVORF9TVEFURSgp
CisKKyAgICBXRUJWVFRfQkVHSU5fU1RBVEUoVGltZXN0YW1wVGFnU3RhdGUpIHsKKyAgICAgICAg
aWYgKGNjID09ICc+JyB8fCBjYyA9PSBJbnB1dFN0cmVhbVByZXByb2Nlc3Nvcjo6ZW5kT2ZGaWxl
TWFya2VyKQorICAgICAgICAgICAgcmV0dXJuIGVtaXRBbmRSZXN1bWVJbihzb3VyY2UsIFdlYlZU
VFRva2VuaXplclN0YXRlOjpEYXRhU3RhdGUpOworICAgICAgICBtX3Rva2VuLT5hcHBlbmRUb1Rp
bWVzdGFtcChjYyk7CisgICAgICAgIFdFQlZUVF9BRFZBTkNFX1RPKFRpbWVzdGFtcFRhZ1N0YXRl
KTsKKyAgICB9CisgICAgRU5EX1NUQVRFKCkKKworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL1dlYlZUVFRva2VuaXplci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svV2ViVlRUVG9rZW5pemVyLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTZk
NDVmN2ZmN2ViZjM3Zjc1YWI3MDI3YWE4N2ZiNjI1NDkzYTU3OAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL1dlYlZUVFRva2VuaXplci5oCkBAIC0wLDAg
KzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBXZWJWVFRUb2tlbml6ZXJfaAorI2RlZmluZSBXZWJWVFRUb2tlbml6
ZXJfaAorCisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorCisjaW5jbHVkZSAiTWFya3VwVG9rZW5p
emVyQmFzZS5oIgorI2luY2x1ZGUgIlNlZ21lbnRlZFN0cmluZy5oIgorI2luY2x1ZGUgIldlYlZU
VFRva2VuLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV2ViVlRUVG9rZW5pemVy
U3RhdGUgeworcHVibGljOgorICAgIGVudW0gU3RhdGUgeworICAgICAgICBEYXRhU3RhdGUsCisg
ICAgICAgIEVzY2FwZVN0YXRlLAorICAgICAgICBUYWdTdGF0ZSwKKyAgICAgICAgU3RhcnRUYWdT
dGF0ZSwKKyAgICAgICAgU3RhcnRUYWdDbGFzc1N0YXRlLAorICAgICAgICBTdGFydFRhZ0Fubm90
YXRpb25TdGF0ZSwKKyAgICAgICAgRW5kVGFnU3RhdGUsCisgICAgICAgIEVuZFRhZ09wZW5TdGF0
ZSwKKyAgICAgICAgVGltZXN0YW1wVGFnU3RhdGUsCisgICAgfTsKK307CisKK2NsYXNzIFdlYlZU
VFRva2VuaXplciA6IE1hcmt1cFRva2VuaXplckJhc2U8V2ViVlRUVG9rZW4sIFdlYlZUVFRva2Vu
aXplclN0YXRlPiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV2ViVlRUVG9rZW5pemVyKTsK
KyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093
blB0cjxXZWJWVFRUb2tlbml6ZXI+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBXZWJW
VFRUb2tlbml6ZXIpOyB9CisKKyAgICB2b2lkIHJlc2V0KCk7CisgICAgCisgICAgYm9vbCBuZXh0
VG9rZW4oU2VnbWVudGVkU3RyaW5nJiwgV2ViVlRUVG9rZW4mKTsKKworcHJpdmF0ZToKKyAgICBX
ZWJWVFRUb2tlbml6ZXIoKTsKKyAgICAKKyAgICBWZWN0b3I8VUNoYXIsIDMyPiBtX2J1ZmZlcjsK
K307CisKK30KKworI2VuZGlmCisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105513</attachid>
            <date>2011-08-29 13:04:09 -0700</date>
            <delta_ts>2011-08-29 13:47:20 -0700</delta_ts>
            <desc>updating to ToT</desc>
            <filename>bug-64132-20110829130408.patch</filename>
            <type>text/plain</type>
            <size>38607</size>
            <attacher name="Anna Cavender">annacc</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTQwMDQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggNDlkYmJk
ODY3NzExNDgxNjQzMzY0NTM0YjVjNWExMDRhMDBjNWY0OC4uNTQ1ZGY2ZThkZDYxYzU0MmQwM2Yx
MGQ5YWE1OWU0YTRiOWNhMThjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTIwMzksNiArMjAz
OSw3IEBAIElGIChFTkFCTEVfVklERU9fVFJBQ0spCiAgICAgICAgIGxvYWRlci9DdWVMb2FkZXIu
Y3BwCiAgICAgICAgIHBsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlci5jcHAKICAgICAgICAgcGxhdGZv
cm0vdHJhY2svV2ViVlRUUGFyc2VyLmNwcAorICAgICAgICBwbGF0Zm9ybS90cmFjay9XZWJWVFRU
b2tlbml6ZXIuY3BwCiAgICAgKQogRU5ESUYoKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjI5Zjc4Y2FhYzc3
ZjQzYzAwM2E2OTJjYWE1MmVhYjc4OTc4ZGE4NC4uMjA2MGUyYTE0ZDcyYTRlNDYwNzc0NzViNGQ3
ODEyNDNiMGVkODVmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDExLTA4LTI5ICBB
bm5hIENhdmVuZGVyICA8YW5uYWNjQGNocm9taXVtLm9yZz4KKworICAgICAgICBJbXBsZW1lbnQg
V2ViVlRUIEN1ZSBUZXh0IFBhcnNpbmcgcnVsZXMgYW5kIERPTSBjb25zdHJ1Y3Rpb24KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY0MTMyCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdHMgaW4gbWVkaWEv
dHJhY2ssIHBhcnRpY3VsYXJseSB0cmFjay13ZWJ2dHQtdGNbMDIyIC0gMDI4XSouCisKKyAgICAg
ICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAg
ICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaHRtbC9UZXh0VHJh
Y2tDdWUuY3BwOgorICAgICAgICAqIGh0bWwvVGV4dFRyYWNrQ3VlLmg6CisgICAgICAgICogcGxh
dGZvcm0vdHJhY2svQ3VlUGFyc2VyLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS90cmFjay9DdWVQ
YXJzZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS90cmFjay9XZWJWVFRQYXJzZXIuY3BwOgorICAg
ICAgICAqIHBsYXRmb3JtL3RyYWNrL1dlYlZUVFBhcnNlci5oOgorICAgICAgICAqIHBsYXRmb3Jt
L3RyYWNrL1dlYlZUVFRva2VuLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL3RyYWNrL1dl
YlZUVFRva2VuaXplci5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL3RyYWNrL1dlYlZU
VFRva2VuaXplci5oOiBBZGRlZC4KKwogMjAxMS0wOC0yOSAgTmF0ZSBDaGFwaW4gIDxqYXBoZXRA
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFBsdW1iIFJlc291cmNlTG9hZGVyT3B0aW9ucyBvdXQg
dG8gQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RSZXNvdXJjZSgpLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1h
a2VmaWxlLmxpc3QuYW0KaW5kZXggZjIwOTExZmY3ZDhmYTAxYmUyZWNjZGE0MWY0YzhmNzlhZTA0
YzlkNC4uOGUwZTFjMWRiMjRjNDIyMTFmZTIxZWUyOGNlYWI2NjhhY2VkM2I4OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC0yODc1LDYgKzI4NzUsOSBAQCB3ZWJjb3JlX3NvdXJj
ZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlclByaXZhdGUu
aCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svV2ViVlRUUGFyc2VyLmNwcCBcCiAJ
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svV2ViVlRUUGFyc2VyLmggXAorCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RyYWNrL1dlYlZUVFRva2VuLmggXAorCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RyYWNrL1dlYlZUVFRva2VuaXplci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS90cmFjay9XZWJWVFRUb2tlbml6ZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9U
cmVlU2hhcmVkLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTFN0cmluZy5oIFwKIAlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VVUlELmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggYzA2
Y2U0YjYzMmViNTJlMmViNjE0NTMxYmI2ZmI4ZjUwMzY3ODY1MC4uOTEwYTg2ZGVhYjFjMTUyMTI4
NDczNTQ0OGU0Y2Q5NzRkM2FiM2FhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtNDM5NCw2ICs0Mzk0
LDkgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS90cmFjay9DdWVQYXJzZXJQcml2YXRlLmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL3RyYWNrL1dlYlZUVFBhcnNlci5jcHAnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL3RyYWNrL1dlYlZUVFBhcnNlci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9y
bS90cmFjay9XZWJWVFRUb2tlbi5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS90cmFjay9XZWJW
VFRUb2tlbml6ZXIuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS90cmFjay9XZWJWVFRUb2tl
bml6ZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vd2luL0JTdHJpbmcuY3BwJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS93aW4vQlN0cmluZy5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS93
aW4vQml0bWFwSW5mby5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5w
cm8gYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCA4YjZjOTA2MzU5MGUyN2NmNDQ3
YmRhNmZiOGI0YTI0MGQ4NjU2YjFhLi40NzNmZmQzNjA4ZmY1MmRhZWU0NzE2MzczMzg0ZmMwN2Uy
ZTZmYmVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtMjEyMSw2ICsyMTIxLDggQEAgSEVBREVSUyArPSBc
CiAgICAgcGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyLmggXAogICAgIHBsYXRmb3JtL3RyYWNrL0N1
ZVBhcnNlclByaXZhdGUuaCBcCiAgICAgcGxhdGZvcm0vdHJhY2svV2ViVlRUUGFyc2VyLmggXAor
ICAgIHBsYXRmb3JtL3RyYWNrL1dlYlZUVFRva2VuLmggXAorICAgIHBsYXRmb3JtL3RyYWNrL1dl
YlZUVFRva2VuaXplci5oIFwKICAgICBwbGF0Zm9ybS9XaWRnZXQuaCBcCiAgICAgcGxhdGZvcm0v
UGxhdGZvcm1TdHJhdGVnaWVzLmggXAogICAgIHBsYXRmb3JtL0xvY2FsaXplZFN0cmluZ3MuaCBc
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggMjMxZWU5MTMyZWVhNWRjNzEyYWQ2ODJiZDg0MGFhMWZiNGY4NzU0OS4uY2FmZThhYWIy
ODE0NDJiYTMzOTU3MDk4YTRkZmE1MzA1YmRkYmNiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDA5MCw2ICs0MDkwLDkgQEAK
IAkJQUJEREZFNzkwQTVDNkU3MDAwQTNFMTFEIC8qIFJlbmRlck1lbnVMaXN0LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFCRERGRTczMEE1QzZFNkYw
MEEzRTExRCAvKiBSZW5kZXJNZW51TGlzdC5jcHAgKi87IH07CiAJCUFCRERGRTdBMEE1QzZFNzAw
MEEzRTExRCAvKiBSZW5kZXJNZW51TGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQUJEREZFNzQwQTVDNkU3MDAwQTNFMTFEIC8qIFJlbmRlck1lbnVM
aXN0LmggKi87IH07CiAJCUFEREYxQUQ3MTI1N0NEOUEwMDAzQTc1OSAvKiBSZW5kZXJTVkdQYXRo
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRERGMUFE
NTEyNTdDRDlBMDAwM0E3NTkgLyogUmVuZGVyU1ZHUGF0aC5oICovOyB9OworCQlCMTBCNjk4MDE0
MEMxNzQwMDBCQzFDMjYgLyogV2ViVlRUVG9rZW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIxMEI2OTdEMTQwQzE3NDAwMEJDMUMyNiAvKiBXZWJWVFRU
b2tlbi5oICovOyB9OworCQlCMTBCNjk4MTE0MEMxNzQwMDBCQzFDMjYgLyogV2ViVlRUVG9rZW5p
emVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIx
MEI2OTdFMTQwQzE3NDAwMEJDMUMyNiAvKiBXZWJWVFRUb2tlbml6ZXIuY3BwICovOyB9OworCQlC
MTBCNjk4MjE0MEMxNzQwMDBCQzFDMjYgLyogV2ViVlRUVG9rZW5pemVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMTBCNjk3RjE0MEMxNzQwMDBCQzFD
MjYgLyogV2ViVlRUVG9rZW5pemVyLmggKi87IH07CiAJCUIxNDM1M0Q1MTM4RUE4RUQwMEQ1MzI3
NiAvKiBNZWRpYVN0cmVhbUxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQjE0MzUzRDExMzhFQThFRDAwRDUzMjc2IC8qIE1lZGlhU3RyZWFtTGlz
dC5jcHAgKi87IH07CiAJCUIxNDM1M0Q2MTM4RUE4RUQwMEQ1MzI3NiAvKiBNZWRpYVN0cmVhbUxp
c3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIxNDM1
M0QyMTM4RUE4RUQwMEQ1MzI3NiAvKiBNZWRpYVN0cmVhbUxpc3QuaCAqLzsgfTsKIAkJQjE0MzUz
RjgxMzhFQTk1QjAwRDUzMjc2IC8qIEpTTWVkaWFTdHJlYW1MaXN0LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIxNDM1M0Y2MTM4RUE5NUIwMEQ1MzI3
NiAvKiBKU01lZGlhU3RyZWFtTGlzdC5jcHAgKi87IH07CkBAIC0xMDYzMiw2ICsxMDYzNSw5IEBA
CiAJCUFCRERGRTc0MEE1QzZFNzAwMEEzRTExRCAvKiBSZW5kZXJNZW51TGlzdC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyTWVudUxpc3QuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQURERjFBRDQxMjU3Q0Q5QTAwMDNBNzU5IC8qIFJlbmRlclNWR1Bh
dGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU1ZHUGF0
aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFEREYxQUQ1MTI1N0NEOUEwMDAz
QTc1OSAvKiBSZW5kZXJTVkdQYXRoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFJlbmRlclNWR1BhdGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjEwQjY5N0Qx
NDBDMTc0MDAwQkMxQzI2IC8qIFdlYlZUVFRva2VuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IFdlYlZUVFRva2VuLmg7IHBhdGggPSBwbGF0Zm9ybS90cmFjay9XZWJWVFRUb2tl
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCMTBCNjk3RTE0MEMxNzQwMDBCQzFD
MjYgLyogV2ViVlRUVG9rZW5pemVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IFdlYlZUVFRva2VuaXplci5jcHA7IHBhdGggPSBwbGF0Zm9ybS90cmFjay9XZWJWVFRU
b2tlbml6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCMTBCNjk3RjE0MEMx
NzQwMDBCQzFDMjYgLyogV2ViVlRUVG9rZW5pemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IFdlYlZUVFRva2VuaXplci5oOyBwYXRoID0gcGxhdGZvcm0vdHJhY2svV2ViVlRU
VG9rZW5pemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIxNDM1M0QxMTM4RUE4
RUQwMEQ1MzI3NiAvKiBNZWRpYVN0cmVhbUxpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gTWVkaWFTdHJlYW1MaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQjE0MzUzRDIxMzhFQThFRDAwRDUzMjc2IC8qIE1lZGlhU3RyZWFtTGlzdC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVN0cmVhbUxpc3QuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjE0MzUzRDMxMzhFQThFRDAwRDUzMjc2IC8qIE1lZGlh
U3RyZWFtTGlzdC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTWVkaWFTdHJlYW1MaXN0Lmlk
bDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyOTc1LDYgKzEyOTgxLDkgQEAKIAkJ
CWNoaWxkcmVuID0gKAogCQkJCTY1Qzk3QUYyMDhFQTkwODgwMEFDRDI3MyAvKiBjb25maWcuaCAq
LywKIAkJCQlFREVDOTgwMjBBRUQ3RTE3MDA1OTEzN0YgLyogV2ViQ29yZVByZWZpeC5oICovLAor
CQkJCUIxMEI2OTdEMTQwQzE3NDAwMEJDMUMyNiAvKiBXZWJWVFRUb2tlbi5oICovLAorCQkJCUIx
MEI2OTdFMTQwQzE3NDAwMEJDMUMyNiAvKiBXZWJWVFRUb2tlbml6ZXIuY3BwICovLAorCQkJCUIx
MEI2OTdGMTQwQzE3NDAwMEJDMUMyNiAvKiBXZWJWVFRUb2tlbml6ZXIuaCAqLywKIAkJCQk5MzA3
MDYxMzA5RTBDQTgyMDBCMTdGRTQgLyogRGVyaXZlZFNvdXJjZXMubWFrZSAqLywKIAkJCQk5M0Yx
OUIxOTA4MjQ1RTU5MDAxRTlBQkMgLyogSW5mby5wbGlzdCAqLywKIAkJCQkyOUE4MTIwNDBGQkI5
QjQxMDA1MTAyOTMgLyogYWNjZXNzaWJpbGl0eSAqLywKQEAgLTIzNDM5LDYgKzIzNDQ4LDggQEAK
IAkJCQk5MzUwMEYzMjEzRkRFM0JFMDA5OUVDMjQgLyogTlNTY3JvbGxlckltcERldGFpbHMuaCBp
biBIZWFkZXJzICovLAogCQkJCUQwQTNBNzMxMTQwNUEzOTgwMEZCOEVEMyAvKiBSZXNvdXJjZUxv
YWRlck9wdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRTQzODk3MTQwQjAwNTEwMDVFNDM3
RSAvKiBFdmVudENvbnN0cnVjdG9ycy5oIGluIEhlYWRlcnMgKi8sCisJCQkJQjEwQjY5ODAxNDBD
MTc0MDAwQkMxQzI2IC8qIFdlYlZUVFRva2VuLmggaW4gSGVhZGVycyAqLywKKwkJCQlCMTBCNjk4
MjE0MEMxNzQwMDBCQzFDMjYgLyogV2ViVlRUVG9rZW5pemVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAg
LTI2MjQ4LDYgKzI2MjU5LDcgQEAKIAkJCQkxQTE0MTRCNTEzQTBGMDUwMDAxOTk5NkMgLyogV2Vi
S2l0Rm9udEZhbWlseU5hbWVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCURGOUFGRDczMTNGQzMx
RDgwMDE1RkVCNyAvKiBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJQkNFNDM4OUExNDBCMDA3MzAwNUU0MzdFIC8qIEpTRXZlbnRDb25zdHJ1
Y3RvcnMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQjEwQjY5ODExNDBDMTc0MDAwQkMxQzI2IC8q
IFdlYlZUVFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9y
RGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvVGV4dFRyYWNrQ3VlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dFRy
YWNrQ3VlLmNwcAppbmRleCBkOTQ1YzA3MzMzOTEyY2Q3ZTc4MWRlODc1ZDRhMzczMzZiYTUwMWRj
Li5kMGJiZTU4NzJmMmY5ZTNiOGNiYmRkNWE4MjhlNjdkMzUyMDY5OTE5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL1RleHRUcmFja0N1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9UZXh0VHJhY2tDdWUuY3BwCkBAIC00MSw4ICs0MSw5IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotVGV4dFRyYWNrQ3VlOjpUZXh0VHJhY2tDdWUoY29uc3QgU3RyaW5nJiBpZCwgZG91
YmxlIHN0YXJ0LCBkb3VibGUgZW5kLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGNvbnN0IFN0cmlu
ZyYgc2V0dGluZ3MsIGJvb2wgcGF1c2VPbkV4aXQpCi0gICAgOiBtX2lkKGlkKQorVGV4dFRyYWNr
Q3VlOjpUZXh0VHJhY2tDdWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3Qg
U3RyaW5nJiBpZCwgZG91YmxlIHN0YXJ0LCBkb3VibGUgZW5kLCBjb25zdCBTdHJpbmcmIGNvbnRl
bnQsIGNvbnN0IFN0cmluZyYgc2V0dGluZ3MsIGJvb2wgcGF1c2VPbkV4aXQpCisgICAgOiBBY3Rp
dmVET01PYmplY3QoY29udGV4dCwgdGhpcykKKyAgICAsIG1faWQoaWQpCiAgICAgLCBtX3N0YXJ0
VGltZShzdGFydCkKICAgICAsIG1fZW5kVGltZShlbmQpCiAgICAgLCBtX2NvbnRlbnQoY29udGVu
dCkKQEAgLTEyNyw4ICsxMjgsMTIgQEAgU3RyaW5nIFRleHRUcmFja0N1ZTo6Z2V0Q3VlQXNTb3Vy
Y2UoKQogCiBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IFRleHRUcmFja0N1ZTo6Z2V0Q3Vl
QXNIVE1MKCkKIHsKLSAgICAvLyBGSVhNRSg2Mjg4Myk6IEltcGxlbWVudC4KLSAgICByZXR1cm4g
RG9jdW1lbnRGcmFnbWVudDo6Y3JlYXRlKDApOworICAgIHJldHVybiBtX2RvY3VtZW50RnJhZ21l
bnQ7Cit9CisKK3ZvaWQgVGV4dFRyYWNrQ3VlOjpzZXRDdWVIVE1MKFBhc3NSZWZQdHI8RG9jdW1l
bnRGcmFnbWVudD4gZnJhZ21lbnQpCit7CisgICAgbV9kb2N1bWVudEZyYWdtZW50ID0gZnJhZ21l
bnQ7CiB9CiAKIGJvb2wgVGV4dFRyYWNrQ3VlOjppc0FjdGl2ZSgpCkBAIC0xNDIsMTIgKzE0Nywy
MSBAQCB2b2lkIFRleHRUcmFja0N1ZTo6c2V0SXNBY3RpdmUoYm9vbCBhY3RpdmUpCiAgICAgbV9p
c0FjdGl2ZSA9IGFjdGl2ZTsKIH0KIAorU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogVGV4dFRyYWNr
Q3VlOjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gQWN0aXZl
RE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Cit9CisKIHZvaWQgVGV4dFRyYWNr
Q3VlOjpwYXJzZVNldHRpbmdzKGNvbnN0IFN0cmluZyYgaW5wdXQpCiB7CiAgICAgLy8gNC44LjEw
LjEzLjMgUGFyc2UgdGhlIFdlYlZUVCBzZXR0aW5ncy4KICAgICAvLyAxIC0gSW5pdGlhbCBzZXR1
cC4KICAgICB1bnNpZ25lZCBwb3NpdGlvbiA9IDA7CiAgICAgd2hpbGUgKHBvc2l0aW9uIDwgaW5w
dXQubGVuZ3RoKCkpIHsKKyAgICAgICAgLy8gRGlzY2FyZCBhbnkgc3BhY2UgY2hhcmFjdGVycyBi
ZXR3ZWVuIG9yIGFmdGVyIHNldHRpbmdzIChub3QgaW4gdGhlIHNwZWMsIGJ1dCB3ZSB0aGluayBp
dCBzaG91bGQgYmUpLgorICAgICAgICB3aGlsZSAocG9zaXRpb24gPCBpbnB1dC5sZW5ndGgoKSAm
JiBXZWJWVFRQYXJzZXI6OmlzQVNwYWNlKGlucHV0W3Bvc2l0aW9uXSkpCisgICAgICAgICAgICBw
b3NpdGlvbisrOworCiAgICAgICAgIC8vIDItNCBTZXR0aW5ncyAtIGdldCB0aGUgbmV4dCBjaGFy
YWN0ZXIgcmVwcmVzZW50aW5nIGEgc2V0dGluZ3MuCiAgICAgICAgIGNoYXIgc2V0dGluZyA9IGlu
cHV0W3Bvc2l0aW9uKytdOwogICAgICAgICBpZiAocG9zaXRpb24gPj0gaW5wdXQubGVuZ3RoKCkp
CkBAIC0yODUsOSArMjk5LDYgQEAgdm9pZCBUZXh0VHJhY2tDdWU6OnBhcnNlU2V0dGluZ3MoY29u
c3QgU3RyaW5nJiBpbnB1dCkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAg
ICAgLy8gRGlzY2FyZCBhbnkgcmVtYWluaW5nIHNwYWNlIGNoYXJhY3RlcnMgYmV0d2VlbiBvciBh
ZnRlciBzZXR0aW5ncyAobm90IGluIHRoZSBzcGVjLCBidXQgd2UgdGhpbmsgaXQgc2hvdWxkIGJl
KS4KLSAgICAgICAgd2hpbGUgKHBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoKCkgJiYgV2ViVlRUUGFy
c2VyOjppc0FTcGFjZShpbnB1dFtwb3NpdGlvbl0pKQotICAgICAgICAgICAgcG9zaXRpb24rKzsK
ICAgICAgICAgY29udGludWU7CiAKIE90aGVyd2lzZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvVGV4dFRyYWNrQ3VlLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRUcmFja0N1
ZS5oCmluZGV4IGEyZDEyMWNlZjEwNDczMDUyZDc1NWJlMDk3MGQ2ODFkZGQ5ZGJkMWYuLmFjMjMy
MTQ0Mjk3MmM5ZDk4YWRiOGYwM2QwMjhlYzY2OGUyMmYwZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvVGV4dFRyYWNrQ3VlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0
VHJhY2tDdWUuaApAQCAtMzMsNiArMzMsNyBAQAogCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQog
CisjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCiAjaW5jbHVkZSAiVGV4dFRyYWNrLmgiCiAj
aW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgpA
QCAtNDAsMTMgKzQxLDE0IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIERvY3VtZW50
RnJhZ21lbnQ7CitjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogY2xhc3MgVGV4dFRyYWNr
OwogCi1jbGFzcyBUZXh0VHJhY2tDdWUgOiBwdWJsaWMgUmVmQ291bnRlZDxUZXh0VHJhY2tDdWU+
IHsKK2NsYXNzIFRleHRUcmFja0N1ZSA6IHB1YmxpYyBSZWZDb3VudGVkPFRleHRUcmFja0N1ZT4s
IHB1YmxpYyBBY3RpdmVET01PYmplY3QgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFRleHRUcmFja0N1ZT4gY3JlYXRlKGNvbnN0IFN0cmluZyYgaWQsIGRvdWJsZSBzdGFydCwgZG91
YmxlIGVuZCwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBjb25zdCBTdHJpbmcmIHNldHRpbmdzLCBi
b29sIHBhdXNlT25FeGl0KQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHRUcmFja0N1ZT4gY3Jl
YXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgaWQsIGRv
dWJsZSBzdGFydCwgZG91YmxlIGVuZCwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBjb25zdCBTdHJp
bmcmIHNldHRpbmdzLCBib29sIHBhdXNlT25FeGl0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBUZXh0VHJhY2tDdWUoaWQsIHN0YXJ0LCBlbmQsIGNvbnRlbnQsIHNldHRpbmdz
LCBwYXVzZU9uRXhpdCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHRUcmFja0N1
ZShjb250ZXh0LCBpZCwgc3RhcnQsIGVuZCwgY29udGVudCwgc2V0dGluZ3MsIHBhdXNlT25FeGl0
KSk7CiAgICAgfQogICAgIAogICAgIGVudW0gRGlyZWN0aW9uIHsgSG9yaXpvbnRhbCwgVmVydGlj
YWxHcm93aW5nTGVmdCwgVmVydGljYWxHcm93aW5nUmlnaHQgfTsKQEAgLTcxLDEyICs3MywxNSBA
QCBwdWJsaWM6CiAKICAgICBTdHJpbmcgZ2V0Q3VlQXNTb3VyY2UoKTsKICAgICBQYXNzUmVmUHRy
PERvY3VtZW50RnJhZ21lbnQ+IGdldEN1ZUFzSFRNTCgpOworICAgIHZvaWQgc2V0Q3VlSFRNTChQ
YXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+KTsKIAogICAgIGJvb2wgaXNBY3RpdmUoKTsKICAg
ICB2b2lkIHNldElzQWN0aXZlKGJvb2wpOworICAgIAorICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0OwogCiBwcml2YXRlOgot
ICAgIFRleHRUcmFja0N1ZShjb25zdCBTdHJpbmcmIGlkLCBkb3VibGUgc3RhcnQsIGRvdWJsZSBl
bmQsIGNvbnN0IFN0cmluZyYgY29udGVudCwgY29uc3QgU3RyaW5nJiBzZXR0aW5ncywgYm9vbCBw
YXVzZU9uRXhpdCk7CisgICAgVGV4dFRyYWNrQ3VlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBj
b25zdCBTdHJpbmcmIGlkLCBkb3VibGUgc3RhcnQsIGRvdWJsZSBlbmQsIGNvbnN0IFN0cmluZyYg
Y29udGVudCwgY29uc3QgU3RyaW5nJiBzZXR0aW5ncywgYm9vbCBwYXVzZU9uRXhpdCk7CiAKICAg
ICB2b2lkIHBhcnNlU2V0dGluZ3MoY29uc3QgU3RyaW5nJik7CiAgICAgCkBAIC05Myw2ICs5OCw3
IEBAIHByaXZhdGU6CiAgICAgaW50IG1fdGV4dFBvc2l0aW9uOwogICAgIGludCBtX2N1ZVNpemU7
CiAgICAgQWxpZ25tZW50IG1fY3VlQWxpZ25tZW50OworICAgIFJlZlB0cjxEb2N1bWVudEZyYWdt
ZW50PiBtX2RvY3VtZW50RnJhZ21lbnQ7CiAKICAgICBib29sIG1faXNBY3RpdmU7CiB9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlci5jcHAKaW5kZXggYWFkMWZiYzgz
NDBkOTNhZTJjZDUzMjRjMDUyMWFjMTAwYjdlNTYxOS4uODFkNWM4NzFhYjJiZDhiZDllZmRkMDMw
MzE5ZjhlYTIwNWY4NGFlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJh
Y2svQ3VlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9DdWVQ
YXJzZXIuY3BwCkBAIC02MSw2ICs2MSw3IEBAIHZvaWQgQ3VlUGFyc2VyOjpsb2FkKGNvbnN0IFN0
cmluZyYgdXJsLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBDdWVQYXJzCiAgICAg
b3B0aW9ucy5jcm9zc09yaWdpblJlcXVlc3RQb2xpY3kgPSBBbGxvd0Nyb3NzT3JpZ2luUmVxdWVz
dHM7CiAKICAgICBtX2NsaWVudCA9IGNsaWVudDsKKyAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQgPSBjb250ZXh0OwogCiAgICAgbV9sb2FkZXIgPSBUaHJlYWRhYmxlTG9hZGVyOjpjcmVhdGUo
Y29udGV4dCwgdGhpcywgcmVxdWVzdCwgb3B0aW9ucyk7CiB9CkBAIC0xMTAsNyArMTExLDcgQEAg
dm9pZCBDdWVQYXJzZXI6Om5ld0N1ZXNQYXJzZWQoKQogdm9pZCBDdWVQYXJzZXI6OmNyZWF0ZVdl
YlZUVFBhcnNlcigpCiB7CiAgICAgaWYgKCFtX3ByaXZhdGUpIHsKLSAgICAgICAgbV9wcml2YXRl
ID0gV2ViVlRUUGFyc2VyOjpjcmVhdGUodGhpcyk7CisgICAgICAgIG1fcHJpdmF0ZSA9IFdlYlZU
VFBhcnNlcjo6Y3JlYXRlKHRoaXMsIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CiAgICAgICAg
IG1fY2xpZW50LT50cmFja0xvYWRTdGFydGVkKCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90cmFjay9DdWVQYXJzZXIuaAppbmRleCA3YzZjNjMxNzRlNTc4MzY5NjA2ZWRhMjVm
NDhhZDU0OThkMDg1ZjA4Li43ODFmMDU4MGJlZGMwNjhmZmEwNDYyZWZjYmQxYWYzZjY1OTNkNzQz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9DdWVQYXJzZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9DdWVQYXJzZXIuaApAQCAtNjksNiAr
NjksOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBmZXRjaFBhcnNlZEN1ZXMoVmVjdG9yPFJlZlB0cjxU
ZXh0VHJhY2tDdWU+ID4mKTsKICAgICB2b2lkIG5ld0N1ZXNQYXJzZWQoKTsKIAorcHJvdGVjdGVk
OgorICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dDsK
KwogcHJpdmF0ZToKICAgICB2b2lkIGNyZWF0ZVdlYlZUVFBhcnNlcigpOwogIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svV2ViVlRUUGFyc2VyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL1dlYlZUVFBhcnNlci5jcHAKaW5kZXggZjI2NDQzNDYy
ZGMzNGE3Y2FmYjYxMjM3OGI2NjBmNjhiNDk3ZTJjNi4uOTk2NDZmY2FmMjJmMWIzNzQ4NTVkZDg4
ZTVlNjBkNzMwZWRiMjZhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJh
Y2svV2ViVlRUUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9X
ZWJWVFRQYXJzZXIuY3BwCkBAIC0zNCw2ICszNCwxMCBAQAogCiAjaW5jbHVkZSAiV2ViVlRUUGFy
c2VyLmgiCiAKKyNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgorI2luY2x1ZGUgIlByb2Nlc3NpbmdJ
bnN0cnVjdGlvbi5oIgorI2luY2x1ZGUgIlNlZ21lbnRlZFN0cmluZy5oIgorI2luY2x1ZGUgIlRl
eHQuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpAQCAtNzgsOCArODIsMTAgQEAgU3RyaW5nIFdlYlZUVFBhcnNlcjo6Y29sbGVjdFdvcmQo
Y29uc3QgU3RyaW5nJiBpbnB1dCwgdW5zaWduZWQqIHBvc2l0aW9uKQogICAgIHJldHVybiBzdHJp
bmcudG9TdHJpbmcoKTsKIH0KIAotV2ViVlRUUGFyc2VyOjpXZWJWVFRQYXJzZXIoQ3VlUGFyc2Vy
UHJpdmF0ZUNsaWVudCogY2xpZW50KQotICAgIDogbV9zdGF0ZShJbml0aWFsKQorV2ViVlRUUGFy
c2VyOjpXZWJWVFRQYXJzZXIoQ3VlUGFyc2VyUHJpdmF0ZUNsaWVudCogY2xpZW50LCBTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQorICAgIDogbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0
KGNvbnRleHQpCisgICAgLCBtX3N0YXRlKEluaXRpYWwpCisgICAgLCBtX3Rva2VuaXplcihXZWJW
VFRUb2tlbml6ZXI6OmNyZWF0ZSgpKQogewogICAgIG1fY2xpZW50ID0gY2xpZW50OwogfQpAQCAt
MjA0LDEwICsyMTAsMjYgQEAgV2ViVlRUUGFyc2VyOjpQYXJzZVN0YXRlIFdlYlZUVFBhcnNlcjo6
aWdub3JlQmFkQ3VlKGNvbnN0IFN0cmluZyYgbGluZSkKIAogdm9pZCBXZWJWVFRQYXJzZXI6OnBy
b2Nlc3NDdWVUZXh0KCkKIHsKLSAgICAvLyA1MSAtIEN1ZSB0ZXh0IHByb2Nlc3NpbmcgYmFzZWQg
b24gV2ViVlRUIGN1ZSB0ZXh0IHBhcnNpbmcgcnVsZXMgYW5kIFdlYlZUVCBjdWUgdGV4dCBET00g
Y29uc3RydWN0aW9uIHJ1bGVzLgotICAgIC8vIEZJWE1FKDY0MTMyKTogUHJvY2VzcyB0aGUgY3Vl
IHRleHQgYXMgcGVyIHRoZSBjdWUgdGV4dCBwYXJzaW5nIHJ1bGVzLiAKLSAgICAvLyAgICAgU291
cmNlOiBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211
bHRpcGFnZS90aGUtaWZyYW1lLWVsZW1lbnQuaHRtbCN3ZWJ2dHQtY3VlLXRleHQtcGFyc2luZy1y
dWxlcwotICAgIFJlZlB0cjxUZXh0VHJhY2tDdWU+IGN1ZSA9IFRleHRUcmFja0N1ZTo6Y3JlYXRl
KG1fY3VycmVudElkLCBtX2N1cnJlbnRTdGFydFRpbWUsIG1fY3VycmVudEVuZFRpbWUsIG1fY3Vy
cmVudENvbnRlbnQudG9TdHJpbmcoKSwgbV9jdXJyZW50U2V0dGluZ3MsIGZhbHNlKTsKKyAgICAv
LyA1MSAtIEN1ZSB0ZXh0IHByb2Nlc3NpbmcgYmFzZWQgb24KKyAgICAvLyA0LjguMTAuMTMuNCBX
ZWJWVFQgY3VlIHRleHQgcGFyc2luZyBydWxlcyBhbmQKKyAgICAvLyA0LjguMTAuMTMuNSBXZWJW
VFQgY3VlIHRleHQgRE9NIGNvbnN0cnVjdGlvbiBydWxlcy4KKyAgICBpZiAobV9jdXJyZW50Q29u
dGVudC5sZW5ndGgoKSA8PSAwKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV9zY3Jp
cHRFeGVjdXRpb25Db250ZXh0LT5pc0RvY3VtZW50KCkpOworICAgIERvY3VtZW50KiBkb2N1bWVu
dCA9IHN0YXRpY19jYXN0PERvY3VtZW50Kj4obV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKKwor
ICAgIG1fYXR0YWNobWVudFJvb3QgPSBEb2N1bWVudEZyYWdtZW50OjpjcmVhdGUoZG9jdW1lbnQp
OworICAgIG1fY3VycmVudE5vZGUgPSBtX2F0dGFjaG1lbnRSb290OworICAgIG1fdG9rZW5pemVy
LT5yZXNldCgpOworICAgIG1fdG9rZW4uY2xlYXIoKTsKKworICAgIFNlZ21lbnRlZFN0cmluZyBj
b250ZW50KG1fY3VycmVudENvbnRlbnQudG9TdHJpbmcoKSk7CisgICAgd2hpbGUgKG1fdG9rZW5p
emVyLT5uZXh0VG9rZW4oY29udGVudCwgbV90b2tlbikpCisgICAgICAgIGNvbnN0cnVjdFRyZWVG
cm9tVG9rZW4oZG9jdW1lbnQpOworICAgIAorICAgIFJlZlB0cjxUZXh0VHJhY2tDdWU+IGN1ZSA9
IFRleHRUcmFja0N1ZTo6Y3JlYXRlKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgbV9jdXJyZW50
SWQsIG1fY3VycmVudFN0YXJ0VGltZSwgbV9jdXJyZW50RW5kVGltZSwgbV9jdXJyZW50Q29udGVu
dC50b1N0cmluZygpLCBtX2N1cnJlbnRTZXR0aW5ncywgZmFsc2UpOworICAgIGN1ZS0+c2V0Q3Vl
SFRNTChtX2F0dGFjaG1lbnRSb290KTsKICAgICBtX2N1ZWxpc3QuYXBwZW5kKGN1ZSk7CiAgICAg
bV9jbGllbnQtPm5ld0N1ZXNQYXJzZWQoKTsKIH0KQEAgLTI4MSw2ICszMDMsNjAgQEAgZG91Ymxl
IFdlYlZUVFBhcnNlcjo6Y29sbGVjdFRpbWVTdGFtcChjb25zdCBTdHJpbmcmIGxpbmUsIHVuc2ln
bmVkKiBwb3NpdGlvbikKICAgICByZXR1cm4gKHZhbHVlMSAqIHNlY29uZHNQZXJIb3VyKSArICh2
YWx1ZTIgKiBzZWNvbmRzUGVyTWludXRlKSArIHZhbHVlMyArICgoZG91YmxlKXZhbHVlNCAvIDEw
MDApOwogfQogCit2b2lkIFdlYlZUVFBhcnNlcjo6Y29uc3RydWN0VHJlZUZyb21Ub2tlbihEb2N1
bWVudCogZG9jdW1lbnQpCit7CisgICAgQXRvbWljU3RyaW5nIHRva2VuVGFnTmFtZShtX3Rva2Vu
Lm5hbWUoKS5kYXRhKCksIG1fdG9rZW4ubmFtZSgpLnNpemUoKSk7CisgICAgUXVhbGlmaWVkTmFt
ZSB0YWdOYW1lKG51bGxBdG9tLCB0b2tlblRhZ05hbWUsIHhodG1sTmFtZXNwYWNlVVJJKTsKKwor
ICAgIHN3aXRjaCAobV90b2tlbi50eXBlKCkpIHsKKyAgICBjYXNlIFdlYlZUVFRva2VuVHlwZXM6
OkNoYXJhY3RlcjogeworICAgICAgICBTdHJpbmcgY29udGVudChtX3Rva2VuLmNoYXJhY3RlcnMo
KS5kYXRhKCksIG1fdG9rZW4uY2hhcmFjdGVycygpLnNpemUoKSk7CisgICAgICAgIFJlZlB0cjxU
ZXh0PiBjaGlsZCA9IFRleHQ6OmNyZWF0ZShkb2N1bWVudCwgY29udGVudCk7CisgICAgICAgIG1f
Y3VycmVudE5vZGUtPnBhcnNlckFkZENoaWxkKGNoaWxkKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIGNhc2UgV2ViVlRUVG9rZW5UeXBlczo6U3RhcnRUYWc6IHsKKyAgICAgICAgUmVmUHRy
PEhUTUxFbGVtZW50PiBjaGlsZDsKKyAgICAgICAgaWYgKGlzUmVjb2duaXplZFRhZyh0b2tlblRh
Z05hbWUpKQorICAgICAgICAgICAgY2hpbGQgPSBIVE1MRWxlbWVudDo6Y3JlYXRlKHRhZ05hbWUs
IGRvY3VtZW50KTsKKyAgICAgICAgZWxzZSBpZiAobV90b2tlbi5uYW1lKCkuc2l6ZSgpID09IDEg
JiYgbV90b2tlbi5uYW1lKClbMF0gPT0gJ2MnKQorICAgICAgICAgICAgY2hpbGQgPSBIVE1MRWxl
bWVudDo6Y3JlYXRlKHNwYW5UYWcsIGRvY3VtZW50KTsKKyAgICAgICAgZWxzZSBpZiAobV90b2tl
bi5uYW1lKCkuc2l6ZSgpID09IDEgJiYgbV90b2tlbi5uYW1lKClbMF0gPT0gJ3YnKQorICAgICAg
ICAgICAgY2hpbGQgPSBIVE1MRWxlbWVudDo6Y3JlYXRlKHFUYWcsIGRvY3VtZW50KTsKKworICAg
ICAgICBpZiAoY2hpbGQpIHsKKyAgICAgICAgICAgIGlmIChtX3Rva2VuLmNsYXNzZXMoKS5zaXpl
KCkgPiAwKSB7CisgICAgICAgICAgICAgICAgUmVmUHRyPE5hbWVkTm9kZU1hcD4gYXR0cmlidXRl
TWFwID0gTmFtZWROb2RlTWFwOjpjcmVhdGUoKTsKKyAgICAgICAgICAgICAgICBhdHRyaWJ1dGVN
YXAtPmFkZEF0dHJpYnV0ZShBdHRyaWJ1dGU6OmNyZWF0ZU1hcHBlZChjbGFzc0F0dHIsIEF0b21p
Y1N0cmluZyhtX3Rva2VuLmNsYXNzZXMoKS5kYXRhKCksIG1fdG9rZW4uY2xhc3NlcygpLnNpemUo
KSkpKTsKKyAgICAgICAgICAgICAgICBjaGlsZC0+c2V0QXR0cmlidXRlTWFwKGF0dHJpYnV0ZU1h
cC5yZWxlYXNlKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNoaWxkLT5oYXNU
YWdOYW1lKHFUYWcpKQorICAgICAgICAgICAgICAgIGNoaWxkLT5zZXRBdHRyaWJ1dGUodGl0bGVB
dHRyLCBTdHJpbmcobV90b2tlbi5hbm5vdGF0aW9uKCkuZGF0YSgpLCBtX3Rva2VuLmFubm90YXRp
b24oKS5zaXplKCkpKTsKKyAgICAgICAgICAgIG1fY3VycmVudE5vZGUtPnBhcnNlckFkZENoaWxk
KGNoaWxkKTsKKyAgICAgICAgICAgIG1fY3VycmVudE5vZGUgPSBjaGlsZDsKKyAgICAgICAgfQor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBXZWJWVFRUb2tlblR5cGVzOjpFbmRUYWc6
CisgICAgICAgIGlmIChpc1JlY29nbml6ZWRUYWcodG9rZW5UYWdOYW1lKQorICAgICAgICAgICAg
fHwgbV90b2tlbi5uYW1lKCkuc2l6ZSgpID09IDEgJiYgbV90b2tlbi5uYW1lKClbMF0gPT0gJ2Mn
CisgICAgICAgICAgICB8fCBtX3Rva2VuLm5hbWUoKS5zaXplKCkgPT0gMSAmJiBtX3Rva2VuLm5h
bWUoKVswXSA9PSAndicpCisgICAgICAgICAgICBpZiAobV9jdXJyZW50Tm9kZS0+cGFyZW50Tm9k
ZSgpKQorICAgICAgICAgICAgICAgIG1fY3VycmVudE5vZGUgPSBtX2N1cnJlbnROb2RlLT5wYXJl
bnROb2RlKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV2ViVlRUVG9rZW5UeXBlczo6VGlt
ZXN0YW1wVGFnOiB7CisgICAgICAgIHVuc2lnbmVkIHBvc2l0aW9uID0gMDsKKyAgICAgICAgZG91
YmxlIHRpbWUgPSBjb2xsZWN0VGltZVN0YW1wKG1fdG9rZW4uY2hhcmFjdGVycygpLmRhdGEoKSwg
JnBvc2l0aW9uKTsKKyAgICAgICAgaWYgKHRpbWUgIT0gbWFsZm9ybWVkVGltZSkKKyAgICAgICAg
ICAgIG1fY3VycmVudE5vZGUtPnBhcnNlckFkZENoaWxkKFByb2Nlc3NpbmdJbnN0cnVjdGlvbjo6
Y3JlYXRlKGRvY3VtZW50LCAidGltZXN0YW1wIiwgU3RyaW5nKG1fdG9rZW4uY2hhcmFjdGVycygp
LmRhdGEoKSwgbV90b2tlbi5jaGFyYWN0ZXJzKCkuc2l6ZSgpKSkpOworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIG1fdG9rZW4u
Y2xlYXIoKTsKK30KKwogdm9pZCBXZWJWVFRQYXJzZXI6OnNraXBXaGl0ZVNwYWNlKGNvbnN0IFN0
cmluZyYgbGluZSwgdW5zaWduZWQqIHBvc2l0aW9uKQogewogICAgIHdoaWxlICgqcG9zaXRpb24g
PCBsaW5lLmxlbmd0aCgpICYmIGlzQVNwYWNlKGxpbmVbKnBvc2l0aW9uXSkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9XZWJWVFRQYXJzZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RyYWNrL1dlYlZUVFBhcnNlci5oCmluZGV4IGE2OTM1MmMwZDg3OTIy
MzQzNDA0ZTZmMWUwOTdiNTkwODNhYjk1ZDkuLjAyYmQ4YjdjYWQyZWExNDZlZGYzN2Y1NjAwODE5
ODVlODU4Mzg0MWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL1dl
YlZUVFBhcnNlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL1dlYlZUVFBh
cnNlci5oCkBAIC0zNCwxMSArMzQsMTcgQEAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAKICNp
bmNsdWRlICJDdWVQYXJzZXJQcml2YXRlLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNs
dWRlICJEb2N1bWVudEZyYWdtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVk
ZSAiV2ViVlRUVG9rZW5pemVyLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAor
dXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKKwogc3RhdGljIGNvbnN0IGludCBzZWNvbmRzUGVy
SG91ciA9IDM2MDA7CiBzdGF0aWMgY29uc3QgaW50IHNlY29uZHNQZXJNaW51dGUgPSA2MDsKIHN0
YXRpYyBjb25zdCBkb3VibGUgbWFsZm9ybWVkVGltZSA9IC0xOwpAQCAtNDksMTMgKzU1LDIyIEBA
IHB1YmxpYzoKICAgICAKICAgICBlbnVtIFBhcnNlU3RhdGUgeyBJbml0aWFsLCBIZWFkZXIsIElk
LCBUaW1pbmdzQW5kU2V0dGluZ3MsIEN1ZVRleHQsIEJhZEN1ZSB9OwogCi0gICAgc3RhdGljIFBh
c3NPd25QdHI8V2ViVlRUUGFyc2VyPiBjcmVhdGUoQ3VlUGFyc2VyUHJpdmF0ZUNsaWVudCogY2xp
ZW50KQorICAgIHN0YXRpYyBQYXNzT3duUHRyPFdlYlZUVFBhcnNlcj4gY3JlYXRlKEN1ZVBhcnNl
clByaXZhdGVDbGllbnQqIGNsaWVudCwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgV2ViVlRUUGFyc2VyKGNsaWVudCkp
OworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFdlYlZUVFBhcnNlcihjbGllbnQsIGNvbnRl
eHQpKTsKICAgICB9CiAgICAgCiAgICAgc3RhdGljIGJvb2wgaGFzUmVxdWlyZWRGaWxlSWRlbnRp
Zmllcihjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpOwogCisgICAgc3RhdGljIGlu
bGluZSBib29sIGlzUmVjb2duaXplZFRhZyhjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUpCisg
ICAgeworICAgICAgICByZXR1cm4gdGFnTmFtZSA9PSBpVGFnCisgICAgICAgICAgICB8fCB0YWdO
YW1lID09IGJUYWcKKyAgICAgICAgICAgIHx8IHRhZ05hbWUgPT0gdVRhZworICAgICAgICAgICAg
fHwgdGFnTmFtZSA9PSBydWJ5VGFnCisgICAgICAgICAgICB8fCB0YWdOYW1lID09IHJ0VGFnOwor
ICAgIH0KKwogICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0FTcGFjZShjaGFyIGMpCiAgICAgewog
ICAgICAgICAvLyBXZWJWVFQgc3BhY2UgY2hhcmFjdGVycyBhcmUgVSswMDIwIFNQQUNFLCBVKzAw
MDkgQ0hBUkFDVEVSIFRBQlVMQVRJT04gKHRhYiksIFUrMDAwQSBMSU5FIEZFRUQgKExGKSwgVSsw
MDBDIEZPUk0gRkVFRCAoRkYpLCBhbmQgVSswMDBEIENBUlJJQUdFIFJFVFVSTiAgICAoQ1IpLgpA
QCAtNjksOCArODQsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlQnl0ZXMoY29u
c3QgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKTsKIAogcHJvdGVjdGVkOgotICAgIFdlYlZU
VFBhcnNlcihDdWVQYXJzZXJQcml2YXRlQ2xpZW50Kik7CisgICAgV2ViVlRUUGFyc2VyKEN1ZVBh
cnNlclByaXZhdGVDbGllbnQqLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CiAgICAgCisgICAg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0OwogICAgIFBh
cnNlU3RhdGUgbV9zdGF0ZTsKIAogcHJpdmF0ZToKQEAgLTg1LDEyICsxMDEsMjAgQEAgcHJpdmF0
ZToKICAgICB2b2lkIHNraXBXaGl0ZVNwYWNlKGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkKik7CiAg
ICAgc3RhdGljIHZvaWQgc2tpcExpbmVUZXJtaW5hdG9yKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2ln
bmVkIGxlbmd0aCwgdW5zaWduZWQqKTsKICAgICBzdGF0aWMgU3RyaW5nIGNvbGxlY3ROZXh0TGlu
ZShjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkKik7CisgICAgCisg
ICAgdm9pZCBjb25zdHJ1Y3RUcmVlRnJvbVRva2VuKERvY3VtZW50Kik7CiAKICAgICBTdHJpbmcg
bV9jdXJyZW50SWQ7CiAgICAgZG91YmxlIG1fY3VycmVudFN0YXJ0VGltZTsKICAgICBkb3VibGUg
bV9jdXJyZW50RW5kVGltZTsKICAgICBTdHJpbmdCdWlsZGVyIG1fY3VycmVudENvbnRlbnQ7CiAg
ICAgU3RyaW5nIG1fY3VycmVudFNldHRpbmdzOworICAgIAorICAgIFdlYlZUVFRva2VuIG1fdG9r
ZW47CisgICAgT3duUHRyPFdlYlZUVFRva2VuaXplcj4gbV90b2tlbml6ZXI7CisKKyAgICBSZWZQ
dHI8RG9jdW1lbnRGcmFnbWVudD4gbV9hdHRhY2htZW50Um9vdDsKKyAgICBSZWZQdHI8Q29udGFp
bmVyTm9kZT4gbV9jdXJyZW50Tm9kZTsKIAogICAgIEN1ZVBhcnNlclByaXZhdGVDbGllbnQqIG1f
Y2xpZW50OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9XZWJW
VFRUb2tlbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svV2ViVlRUVG9rZW4uaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi41ODY4ZmNlYjNiYjE5NmEzM2ZjNmRlMmE5MzIwYjQzMjZiZDdkMWEwCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svV2ViVlRUVG9rZW4u
aApAQCAtMCwwICsxLDE1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlZUVFRva2VuX2gKKyNkZWZpbmUgV2ViVlRU
VG9rZW5faAorCisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorCisjaW5jbHVkZSAiTWFya3VwVG9r
ZW5CYXNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV2ViVlRUVG9rZW5UeXBl
cyB7CitwdWJsaWM6CisgICAgZW51bSBUeXBlIHsKKyAgICAgICAgVW5pbml0aWFsaXplZCwKKyAg
ICAgICAgQ2hhcmFjdGVyLAorICAgICAgICBTdGFydFRhZywKKyAgICAgICAgRW5kVGFnLAorICAg
ICAgICBUaW1lc3RhbXBUYWcsCisgICAgICAgIEVuZE9mRmlsZSwKKyAgICB9OworfTsKKworY2xh
c3MgV2ViVlRUVG9rZW4gOiBwdWJsaWMgTWFya3VwVG9rZW5CYXNlPFdlYlZUVFRva2VuVHlwZXM+
IHsKK3B1YmxpYzoKKyAgICB2b2lkIGFwcGVuZFRvTmFtZShVQ2hhciBjaGFyYWN0ZXIpCisgICAg
eworICAgICAgICBBU1NFUlQobV90eXBlID09IFdlYlZUVFRva2VuVHlwZXM6OlN0YXJ0VGFnIHx8
IG1fdHlwZSA9PSBXZWJWVFRUb2tlblR5cGVzOjpFbmRUYWcpOworICAgICAgICBNYXJrdXBUb2tl
bkJhc2U8V2ViVlRUVG9rZW5UeXBlcz46OmFwcGVuZFRvTmFtZShjaGFyYWN0ZXIpOworICAgIH0K
KyAgICAKKyAgICBjb25zdCBEYXRhVmVjdG9yJiBuYW1lKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBNYXJrdXBUb2tlbkJhc2U8V2ViVlRUVG9rZW5UeXBlcz46Om5hbWUoKTsKKyAgICB9
CisgICAgCisgICAgY29uc3QgRGF0YVZlY3RvciYgY2hhcmFjdGVycygpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQobV90eXBlID09IFR5cGU6OkNoYXJhY3RlciB8fCBtX3R5cGUgPT0gVHlw
ZTo6VGltZXN0YW1wVGFnKTsKKyAgICAgICAgcmV0dXJuIG1fZGF0YTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBiZWdpbkVtcHR5U3RhcnRUYWcoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdHlw
ZSA9PSBUeXBlOjpVbmluaXRpYWxpemVkKTsKKyAgICAgICAgbV90eXBlID0gVHlwZTo6U3RhcnRU
YWc7CisgICAgICAgIG1fY3VycmVudEF0dHJpYnV0ZSA9IDA7CisgICAgICAgIG1fYXR0cmlidXRl
cy5jbGVhcigpOworICAgICAgICBtX2RhdGEuY2xlYXIoKTsKKyAgICB9CisgCisgICAgdm9pZCBi
ZWdpblRpbWVzdGFtcFRhZyhVQ2hhciBjaGFyYWN0ZXIpCisgICAgeworICAgICAgICBBU1NFUlQo
Y2hhcmFjdGVyKTsKKyAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBUeXBlOjpVbmluaXRpYWxpemVk
KTsKKyAgICAgICAgbV90eXBlID0gVHlwZTo6VGltZXN0YW1wVGFnOworICAgICAgICBtX3NlbGZD
bG9zaW5nID0gdHJ1ZTsKKyAgICAgICAgbV9kYXRhLmFwcGVuZChjaGFyYWN0ZXIpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIGFwcGVuZFRvVGltZXN0YW1wKFVDaGFyIGNoYXJhY3RlcikKKyAgICB7
CisgICAgICAgIEFTU0VSVChjaGFyYWN0ZXIpOworICAgICAgICBBU1NFUlQobV90eXBlID09IFR5
cGU6OlRpbWVzdGFtcFRhZyk7CisgICAgICAgIG1fZGF0YS5hcHBlbmQoY2hhcmFjdGVyKTsKKyAg
ICB9CisKKyAgICB2b2lkIGFwcGVuZFRvQ2xhc3MoVUNoYXIgY2hhcmFjdGVyKQorICAgIHsKKyAg
ICAgICAgYXBwZW5kVG9TdGFydFR5cGUoY2hhcmFjdGVyKTsKKyAgICB9CisKKyAgICB2b2lkIGFk
ZE5ld0NsYXNzKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gVHlwZTo6U3RhcnRU
YWcpOworICAgICAgICBpZiAoIW1fY2xhc3Nlcy5pc0VtcHR5KCkpCisgICAgICAgICAgICBtX2Ns
YXNzZXMuYXBwZW5kKCcgJyk7CisgICAgICAgIG1fY2xhc3Nlcy5hcHBlbmQobV9jdXJyZW50QnVm
ZmVyKTsKKyAgICAgICAgbV9jdXJyZW50QnVmZmVyLmNsZWFyKCk7CisgICAgfQorICAgIAorICAg
IGNvbnN0IERhdGFWZWN0b3ImIGNsYXNzZXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fY2xhc3NlczsKKyAgICB9CisKKyAgICB2b2lkIGFwcGVuZFRvQW5ub3RhdGlvbihVQ2hhciBj
aGFyYWN0ZXIpCisgICAgeworICAgICAgICBhcHBlbmRUb1N0YXJ0VHlwZShjaGFyYWN0ZXIpOwor
ICAgIH0KKyAgICAgICAgCisgICAgdm9pZCBhZGROZXdBbm5vdGF0aW9uKCkKKyAgICB7CisgICAg
ICAgIEFTU0VSVChtX3R5cGUgPT0gVHlwZTo6U3RhcnRUYWcpOworICAgICAgICBtX2Fubm90YXRp
b24uY2xlYXIoKTsKKyAgICAgICAgbV9hbm5vdGF0aW9uLmFwcGVuZChtX2N1cnJlbnRCdWZmZXIp
OworICAgICAgICBtX2N1cnJlbnRCdWZmZXIuY2xlYXIoKTsKKyAgICB9CisgICAgCisgICAgY29u
c3QgRGF0YVZlY3RvciYgYW5ub3RhdGlvbigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
bV9hbm5vdGF0aW9uOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNsZWFyKCkKKyAgICB7CisgICAg
ICAgIG1fYW5ub3RhdGlvbi5jbGVhcigpOworICAgICAgICBtX2NsYXNzZXMuY2xlYXIoKTsKKyAg
ICAgICAgbV9jdXJyZW50QnVmZmVyLmNsZWFyKCk7CisgICAgICAgIE1hcmt1cFRva2VuQmFzZTxX
ZWJWVFRUb2tlblR5cGVzPjo6Y2xlYXIoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBh
cHBlbmRUb1N0YXJ0VHlwZShVQ2hhciBjaGFyYWN0ZXIpCisgICAgeworICAgICAgICBBU1NFUlQo
Y2hhcmFjdGVyKTsKKyAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBUeXBlOjpTdGFydFRhZyk7Cisg
ICAgICAgIG1fY3VycmVudEJ1ZmZlci5hcHBlbmQoY2hhcmFjdGVyKTsKKyAgICB9CisKKyAgICBE
YXRhVmVjdG9yIG1fYW5ub3RhdGlvbjsKKyAgICBEYXRhVmVjdG9yIG1fY2xhc3NlczsKKyAgICBE
YXRhVmVjdG9yIG1fY3VycmVudEJ1ZmZlcjsKK307CisKK30KKworI2VuZGlmCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL1dlYlZUVFRva2VuaXplci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9XZWJWVFRUb2tlbml6ZXIuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjk0NjE4YWI2MzkwM2MxYzMyMTk5NzUwNTAwY2FjMWMzZmI4NDU2ODcKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9XZWJWVFRUb2tlbml6
ZXIuY3BwCkBAIC0wLDAgKzEsMjMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2ds
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJM
RShWSURFT19UUkFDSykKKworI2luY2x1ZGUgIldlYlZUVFRva2VuaXplci5oIgorCisjaW5jbHVk
ZSAiTWFya3VwVG9rZW5pemVySW5saW5lTWV0aG9kcy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKKyNkZWZpbmUgV0VCVlRUX0JFR0lOX1NUQVRFKHN0YXRlTmFtZSkgQkVHSU5fU1RBVEUoV2Vi
VlRUVG9rZW5pemVyU3RhdGUsIHN0YXRlTmFtZSkKKyNkZWZpbmUgV0VCVlRUX0FEVkFOQ0VfVE8o
c3RhdGVOYW1lKSBBRFZBTkNFX1RPKFdlYlZUVFRva2VuaXplclN0YXRlLCBzdGF0ZU5hbWUpCisK
K1dlYlZUVFRva2VuaXplcjo6V2ViVlRUVG9rZW5pemVyKCkKK3sKKyAgICByZXNldCgpOworfQor
Cit0ZW1wbGF0ZTw+CitpbmxpbmUgYm9vbCBNYXJrdXBUb2tlbml6ZXJCYXNlPFdlYlZUVFRva2Vu
LCBXZWJWVFRUb2tlbml6ZXJTdGF0ZT46OnNob3VsZFNraXBOdWxsQ2hhcmFjdGVycygpIGNvbnN0
Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2lubGluZSBib29sIHZlY3RvckVxdWFsc1N0cmlu
Zyhjb25zdCBWZWN0b3I8VUNoYXIsIDMyPiYgdmVjdG9yLCBjb25zdCBTdHJpbmcmIHN0cmluZykK
K3sKKyAgICBpZiAodmVjdG9yLnNpemUoKSAhPSBzdHJpbmcubGVuZ3RoKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBjb25zdCBVQ2hhciogc3RyaW5nRGF0YSA9IHN0cmluZy5jaGFyYWN0
ZXJzKCk7CisgICAgY29uc3QgVUNoYXIqIHZlY3RvckRhdGEgPSB2ZWN0b3IuZGF0YSgpOworICAg
IHJldHVybiAhbWVtY21wKHN0cmluZ0RhdGEsIHZlY3RvckRhdGEsIHZlY3Rvci5zaXplKCkgKiBz
aXplb2YoVUNoYXIpKTsKK30KKwordm9pZCBXZWJWVFRUb2tlbml6ZXI6OnJlc2V0KCkKK3sKKyAg
ICBtX3N0YXRlID0gV2ViVlRUVG9rZW5pemVyU3RhdGU6OkRhdGFTdGF0ZTsKKyAgICBtX3Rva2Vu
ID0gMDsKKyAgICBtX2xpbmVOdW1iZXIgPSAwOworICAgIG1fYnVmZmVyLmNsZWFyKCk7Cit9Cisg
ICAgCitib29sIFdlYlZUVFRva2VuaXplcjo6bmV4dFRva2VuKFNlZ21lbnRlZFN0cmluZyYgc291
cmNlLCBXZWJWVFRUb2tlbiYgdG9rZW4pCit7CisgICAgLy8gSWYgd2UgaGF2ZSBhIHRva2VuIGlu
IHByb2dyZXNzLCB0aGVuIHdlJ3JlIHN1cHBvc2VkIHRvIGJlIGNhbGxlZCBiYWNrCisgICAgLy8g
d2l0aCB0aGUgc2FtZSB0b2tlbiBzbyB3ZSBjYW4gZmluaXNoIGl0LgorICAgIEFTU0VSVCghbV90
b2tlbiB8fCBtX3Rva2VuID09ICZ0b2tlbiB8fCB0b2tlbi50eXBlKCkgPT0gV2ViVlRUVG9rZW5U
eXBlczo6VW5pbml0aWFsaXplZCk7CisgICAgbV90b2tlbiA9ICZ0b2tlbjsKKworICAgIGlmIChz
b3VyY2UuaXNFbXB0eSgpIHx8ICFtX2lucHV0U3RyZWFtUHJlcHJvY2Vzc29yLnBlZWsoc291cmNl
LCBtX2xpbmVOdW1iZXIpKQorICAgICAgICByZXR1cm4gaGF2ZUJ1ZmZlcmVkQ2hhcmFjdGVyVG9r
ZW4oKTsKKworICAgIFVDaGFyIGNjID0gbV9pbnB1dFN0cmVhbVByZXByb2Nlc3Nvci5uZXh0SW5w
dXRDaGFyYWN0ZXIoKTsKKworICAgIC8vIDQuOC4xMC4xMy40IFdlYlZUVCBjdWUgdGV4dCB0b2tl
bml6ZXIKKyAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICBXRUJWVFRfQkVHSU5fU1RBVEUoRGF0
YVN0YXRlKSB7CisgICAgICAgIGlmIChjYyA9PSAnJicpIHsKKyAgICAgICAgICAgIG1fYnVmZmVy
LmFwcGVuZChjYyk7CisgICAgICAgICAgICBXRUJWVFRfQURWQU5DRV9UTyhFc2NhcGVTdGF0ZSk7
CisgICAgICAgIH0gZWxzZSBpZiAoY2MgPT0gJzwnKSB7CisgICAgICAgICAgICBpZiAobV90b2tl
bi0+dHlwZSgpID09IFdlYlZUVFRva2VuVHlwZXM6OlVuaW5pdGlhbGl6ZWQKKyAgICAgICAgICAg
ICAgICB8fCB2ZWN0b3JFcXVhbHNTdHJpbmcobV90b2tlbi0+Y2hhcmFjdGVycygpLCBlbXB0eVN0
cmluZygpKSkKKyAgICAgICAgICAgICAgICBXRUJWVFRfQURWQU5DRV9UTyhUYWdTdGF0ZSk7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIGVtaXRBbmRSZXN1bWVJbihz
b3VyY2UsIFdlYlZUVFRva2VuaXplclN0YXRlOjpUYWdTdGF0ZSk7CisgICAgICAgIH0gZWxzZSBp
ZiAoY2MgPT0gSW5wdXRTdHJlYW1QcmVwcm9jZXNzb3I6OmVuZE9mRmlsZU1hcmtlcikKKyAgICAg
ICAgICAgIHJldHVybiBlbWl0RW5kT2ZGaWxlKHNvdXJjZSk7CisgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgYnVmZmVyQ2hhcmFjdGVyKGNjKTsKKyAgICAgICAgICAgIFdFQlZUVF9BRFZBTkNF
X1RPKERhdGFTdGF0ZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgRU5EX1NUQVRFKCkKKworICAg
IFdFQlZUVF9CRUdJTl9TVEFURShFc2NhcGVTdGF0ZSkgeworICAgICAgICBpZiAoY2MgPT0gJzsn
KSB7CisgICAgICAgICAgICBpZiAodmVjdG9yRXF1YWxzU3RyaW5nKG1fYnVmZmVyLCAiJmFtcCIp
KQorICAgICAgICAgICAgICAgIGJ1ZmZlckNoYXJhY3RlcignJicpOworICAgICAgICAgICAgZWxz
ZSBpZiAodmVjdG9yRXF1YWxzU3RyaW5nKG1fYnVmZmVyLCAiJmx0IikpCisgICAgICAgICAgICAg
ICAgYnVmZmVyQ2hhcmFjdGVyKCc8Jyk7CisgICAgICAgICAgICBlbHNlIGlmICh2ZWN0b3JFcXVh
bHNTdHJpbmcobV9idWZmZXIsICImZ3QiKSkKKyAgICAgICAgICAgICAgICBidWZmZXJDaGFyYWN0
ZXIoJz4nKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIG1fYnVmZmVyLmFw
cGVuZChjYyk7CisgICAgICAgICAgICAgICAgbV90b2tlbi0+YXBwZW5kVG9DaGFyYWN0ZXIobV9i
dWZmZXIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9idWZmZXIuY2xlYXIoKTsKKyAg
ICAgICAgICAgIFdFQlZUVF9BRFZBTkNFX1RPKERhdGFTdGF0ZSk7CisgICAgICAgIH0gZWxzZSBp
ZiAoaXNBU0NJSUFscGhhbnVtZXJpYyhjYykpIHsKKyAgICAgICAgICAgIG1fYnVmZmVyLmFwcGVu
ZChjYyk7CisgICAgICAgICAgICBXRUJWVFRfQURWQU5DRV9UTyhFc2NhcGVTdGF0ZSk7CisgICAg
ICAgIH0gZWxzZSBpZiAoY2MgPT0gSW5wdXRTdHJlYW1QcmVwcm9jZXNzb3I6OmVuZE9mRmlsZU1h
cmtlcikgeworICAgICAgICAgICAgbV90b2tlbi0+YXBwZW5kVG9DaGFyYWN0ZXIobV9idWZmZXIp
OworICAgICAgICAgICAgcmV0dXJuIGVtaXRFbmRPZkZpbGUoc291cmNlKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIGlmICghdmVjdG9yRXF1YWxzU3RyaW5nKG1fYnVmZmVyLCAiJiIp
KQorICAgICAgICAgICAgICAgIG1fdG9rZW4tPmFwcGVuZFRvQ2hhcmFjdGVyKG1fYnVmZmVyKTsK
KyAgICAgICAgICAgIG1fYnVmZmVyLmNsZWFyKCk7CisgICAgICAgICAgICBXRUJWVFRfQURWQU5D
RV9UTyhEYXRhU3RhdGUpOworICAgICAgICB9CisgICAgfQorICAgIEVORF9TVEFURSgpCisKKyAg
ICBXRUJWVFRfQkVHSU5fU1RBVEUoVGFnU3RhdGUpIHsKKyAgICAgICAgaWYgKGlzVG9rZW5pemVy
V2hpdGVzcGFjZShjYykpIHsKKyAgICAgICAgICAgIG1fdG9rZW4tPmJlZ2luRW1wdHlTdGFydFRh
ZygpOworICAgICAgICAgICAgV0VCVlRUX0FEVkFOQ0VfVE8oU3RhcnRUYWdBbm5vdGF0aW9uU3Rh
dGUpOworICAgICAgICB9IGVsc2UgaWYgKGNjID09ICcuJykgeworICAgICAgICAgICAgbV90b2tl
bi0+YmVnaW5FbXB0eVN0YXJ0VGFnKCk7CisgICAgICAgICAgICBXRUJWVFRfQURWQU5DRV9UTyhT
dGFydFRhZ0NsYXNzU3RhdGUpOworICAgICAgICB9IGVsc2UgaWYgKGNjID09ICcvJykgeworICAg
ICAgICAgICAgV0VCVlRUX0FEVkFOQ0VfVE8oRW5kVGFnT3BlblN0YXRlKTsKKyAgICAgICAgfSBl
bHNlIGlmIChXVEY6OmlzQVNDSUlEaWdpdChjYykpIHsKKyAgICAgICAgICAgIG1fdG9rZW4tPmJl
Z2luVGltZXN0YW1wVGFnKGNjKTsKKyAgICAgICAgICAgIFdFQlZUVF9BRFZBTkNFX1RPKFRpbWVz
dGFtcFRhZ1N0YXRlKTsKKyAgICAgICAgfSBlbHNlIGlmIChjYyA9PSAnPicgfHwgY2MgPT0gSW5w
dXRTdHJlYW1QcmVwcm9jZXNzb3I6OmVuZE9mRmlsZU1hcmtlcikgeworICAgICAgICAgICAgbV90
b2tlbi0+YmVnaW5FbXB0eVN0YXJ0VGFnKCk7CisgICAgICAgICAgICByZXR1cm4gZW1pdEFuZFJl
c3VtZUluKHNvdXJjZSwgV2ViVlRUVG9rZW5pemVyU3RhdGU6OkRhdGFTdGF0ZSk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBtX3Rva2VuLT5iZWdpblN0YXJ0VGFnKGNjKTsKKyAgICAg
ICAgICAgIFdFQlZUVF9BRFZBTkNFX1RPKFN0YXJ0VGFnU3RhdGUpOworICAgICAgICB9CisgICAg
fQorICAgIEVORF9TVEFURSgpCisKKyAgICBXRUJWVFRfQkVHSU5fU1RBVEUoU3RhcnRUYWdTdGF0
ZSkgeworICAgICAgICBpZiAoaXNUb2tlbml6ZXJXaGl0ZXNwYWNlKGNjKSkKKyAgICAgICAgICAg
IFdFQlZUVF9BRFZBTkNFX1RPKFN0YXJ0VGFnQW5ub3RhdGlvblN0YXRlKTsKKyAgICAgICAgZWxz
ZSBpZiAoY2MgPT0gJy4nKQorICAgICAgICAgICAgV0VCVlRUX0FEVkFOQ0VfVE8oU3RhcnRUYWdD
bGFzc1N0YXRlKTsKKyAgICAgICAgZWxzZSBpZiAoY2MgPT0gJz4nIHx8IGNjID09IElucHV0U3Ry
ZWFtUHJlcHJvY2Vzc29yOjplbmRPZkZpbGVNYXJrZXIpCisgICAgICAgICAgICByZXR1cm4gZW1p
dEFuZFJlc3VtZUluKHNvdXJjZSwgV2ViVlRUVG9rZW5pemVyU3RhdGU6OkRhdGFTdGF0ZSk7Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgbV90b2tlbi0+YXBwZW5kVG9OYW1lKGNjKTsKKyAg
ICAgICAgICAgIFdFQlZUVF9BRFZBTkNFX1RPKFN0YXJ0VGFnU3RhdGUpOworICAgICAgICB9Cisg
ICAgfQorICAgIEVORF9TVEFURSgpCisKKyAgICBXRUJWVFRfQkVHSU5fU1RBVEUoU3RhcnRUYWdD
bGFzc1N0YXRlKSB7CisgICAgICAgIGlmIChpc1Rva2VuaXplcldoaXRlc3BhY2UoY2MpKSB7Cisg
ICAgICAgICAgICBtX3Rva2VuLT5hZGROZXdDbGFzcygpOworICAgICAgICAgICAgV0VCVlRUX0FE
VkFOQ0VfVE8oU3RhcnRUYWdBbm5vdGF0aW9uU3RhdGUpOworICAgICAgICB9IGVsc2UgaWYgKGNj
ID09ICcuJykgeworICAgICAgICAgICAgbV90b2tlbi0+YWRkTmV3Q2xhc3MoKTsKKyAgICAgICAg
ICAgIFdFQlZUVF9BRFZBTkNFX1RPKFN0YXJ0VGFnQ2xhc3NTdGF0ZSk7CisgICAgICAgIH0gZWxz
ZSBpZiAoY2MgPT0gJz4nIHx8IGNjID09IElucHV0U3RyZWFtUHJlcHJvY2Vzc29yOjplbmRPZkZp
bGVNYXJrZXIpIHsKKyAgICAgICAgICAgIG1fdG9rZW4tPmFkZE5ld0NsYXNzKCk7CisgICAgICAg
ICAgICByZXR1cm4gZW1pdEFuZFJlc3VtZUluKHNvdXJjZSwgV2ViVlRUVG9rZW5pemVyU3RhdGU6
OkRhdGFTdGF0ZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX3Rva2VuLT5hcHBl
bmRUb0NsYXNzKGNjKTsKKyAgICAgICAgICAgIFdFQlZUVF9BRFZBTkNFX1RPKFN0YXJ0VGFnQ2xh
c3NTdGF0ZSk7CisgICAgICAgIH0KKworICAgIH0KKyAgICBFTkRfU1RBVEUoKQorCisgICAgV0VC
VlRUX0JFR0lOX1NUQVRFKFN0YXJ0VGFnQW5ub3RhdGlvblN0YXRlKSB7CisgICAgICAgIGlmIChj
YyA9PSAnPicgfHwgY2MgPT0gSW5wdXRTdHJlYW1QcmVwcm9jZXNzb3I6OmVuZE9mRmlsZU1hcmtl
cikgeworICAgICAgICAgICAgbV90b2tlbi0+YWRkTmV3QW5ub3RhdGlvbigpOworICAgICAgICAg
ICAgcmV0dXJuIGVtaXRBbmRSZXN1bWVJbihzb3VyY2UsIFdlYlZUVFRva2VuaXplclN0YXRlOjpE
YXRhU3RhdGUpOworICAgICAgICB9CisgICAgICAgIG1fdG9rZW4tPmFwcGVuZFRvQW5ub3RhdGlv
bihjYyk7CisgICAgICAgIFdFQlZUVF9BRFZBTkNFX1RPKFN0YXJ0VGFnQW5ub3RhdGlvblN0YXRl
KTsKKyAgICB9CisgICAgRU5EX1NUQVRFKCkKKyAgICAKKyAgICBXRUJWVFRfQkVHSU5fU1RBVEUo
RW5kVGFnT3BlblN0YXRlKSB7CisgICAgICAgIGlmIChjYyA9PSAnPicgfHwgY2MgPT0gSW5wdXRT
dHJlYW1QcmVwcm9jZXNzb3I6OmVuZE9mRmlsZU1hcmtlcikgeworICAgICAgICAgICAgbV90b2tl
bi0+YmVnaW5FbmRUYWcoJ1wwJyk7CisgICAgICAgICAgICByZXR1cm4gZW1pdEFuZFJlc3VtZUlu
KHNvdXJjZSwgV2ViVlRUVG9rZW5pemVyU3RhdGU6OkRhdGFTdGF0ZSk7CisgICAgICAgIH0KKyAg
ICAgICAgbV90b2tlbi0+YmVnaW5FbmRUYWcoY2MpOworICAgICAgICBXRUJWVFRfQURWQU5DRV9U
TyhFbmRUYWdTdGF0ZSk7CisgICAgfQorICAgIEVORF9TVEFURSgpCisKKyAgICBXRUJWVFRfQkVH
SU5fU1RBVEUoRW5kVGFnU3RhdGUpIHsKKyAgICAgICAgaWYgKGNjID09ICc+JyB8fCBjYyA9PSBJ
bnB1dFN0cmVhbVByZXByb2Nlc3Nvcjo6ZW5kT2ZGaWxlTWFya2VyKQorICAgICAgICAgICAgcmV0
dXJuIGVtaXRBbmRSZXN1bWVJbihzb3VyY2UsIFdlYlZUVFRva2VuaXplclN0YXRlOjpEYXRhU3Rh
dGUpOworICAgICAgICBtX3Rva2VuLT5hcHBlbmRUb05hbWUoY2MpOworICAgICAgICBXRUJWVFRf
QURWQU5DRV9UTyhFbmRUYWdTdGF0ZSk7CisgICAgfQorICAgIEVORF9TVEFURSgpCisKKyAgICBX
RUJWVFRfQkVHSU5fU1RBVEUoVGltZXN0YW1wVGFnU3RhdGUpIHsKKyAgICAgICAgaWYgKGNjID09
ICc+JyB8fCBjYyA9PSBJbnB1dFN0cmVhbVByZXByb2Nlc3Nvcjo6ZW5kT2ZGaWxlTWFya2VyKQor
ICAgICAgICAgICAgcmV0dXJuIGVtaXRBbmRSZXN1bWVJbihzb3VyY2UsIFdlYlZUVFRva2VuaXpl
clN0YXRlOjpEYXRhU3RhdGUpOworICAgICAgICBtX3Rva2VuLT5hcHBlbmRUb1RpbWVzdGFtcChj
Yyk7CisgICAgICAgIFdFQlZUVF9BRFZBTkNFX1RPKFRpbWVzdGFtcFRhZ1N0YXRlKTsKKyAgICB9
CisgICAgRU5EX1NUQVRFKCkKKworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIHJldHVybiBmYWxzZTsKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RyYWNrL1dlYlZUVFRva2VuaXplci5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdHJhY2svV2ViVlRUVG9rZW5pemVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTZkNDVmN2ZmN2Vi
ZjM3Zjc1YWI3MDI3YWE4N2ZiNjI1NDkzYTU3OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RyYWNrL1dlYlZUVFRva2VuaXplci5oCkBAIC0wLDAgKzEsNzYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBXZWJWVFRUb2tlbml6ZXJfaAorI2RlZmluZSBXZWJWVFRUb2tlbml6ZXJfaAorCisj
aWYgRU5BQkxFKFZJREVPX1RSQUNLKQorCisjaW5jbHVkZSAiTWFya3VwVG9rZW5pemVyQmFzZS5o
IgorI2luY2x1ZGUgIlNlZ21lbnRlZFN0cmluZy5oIgorI2luY2x1ZGUgIldlYlZUVFRva2VuLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV2ViVlRUVG9rZW5pemVyU3RhdGUgewor
cHVibGljOgorICAgIGVudW0gU3RhdGUgeworICAgICAgICBEYXRhU3RhdGUsCisgICAgICAgIEVz
Y2FwZVN0YXRlLAorICAgICAgICBUYWdTdGF0ZSwKKyAgICAgICAgU3RhcnRUYWdTdGF0ZSwKKyAg
ICAgICAgU3RhcnRUYWdDbGFzc1N0YXRlLAorICAgICAgICBTdGFydFRhZ0Fubm90YXRpb25TdGF0
ZSwKKyAgICAgICAgRW5kVGFnU3RhdGUsCisgICAgICAgIEVuZFRhZ09wZW5TdGF0ZSwKKyAgICAg
ICAgVGltZXN0YW1wVGFnU3RhdGUsCisgICAgfTsKK307CisKK2NsYXNzIFdlYlZUVFRva2VuaXpl
ciA6IE1hcmt1cFRva2VuaXplckJhc2U8V2ViVlRUVG9rZW4sIFdlYlZUVFRva2VuaXplclN0YXRl
PiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV2ViVlRUVG9rZW5pemVyKTsKKyAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxXZWJW
VFRUb2tlbml6ZXI+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBXZWJWVFRUb2tlbml6
ZXIpOyB9CisKKyAgICB2b2lkIHJlc2V0KCk7CisgICAgCisgICAgYm9vbCBuZXh0VG9rZW4oU2Vn
bWVudGVkU3RyaW5nJiwgV2ViVlRUVG9rZW4mKTsKKworcHJpdmF0ZToKKyAgICBXZWJWVFRUb2tl
bml6ZXIoKTsKKyAgICAKKyAgICBWZWN0b3I8VUNoYXIsIDMyPiBtX2J1ZmZlcjsKK307CisKK30K
KworI2VuZGlmCisjZW5kaWYK
</data>

          </attachment>
      

    </bug>

</bugzilla>