<?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>150022</bug_id>
          
          <creation_ts>2015-10-11 21:47:35 -0700</creation_ts>
          <short_desc>Add helper function for checking pointer equivalency and use it</short_desc>
          <delta_ts>2015-10-13 17:15:36 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>andersca</cc>
    
    <cc>ap</cc>
    
    <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>dstockwell</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mitz</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1132279</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-10-11 21:47:35 -0700</bug_when>
    <thetext>Add helper funtion for checking pointer equivalency and use it</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132280</commentid>
    <comment_count>1</comment_count>
      <attachid>262877</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-10-11 21:57:25 -0700</bug_when>
    <thetext>Created attachment 262877
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132281</commentid>
    <comment_count>2</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-10-11 21:58:21 -0700</bug_when>
    <thetext>Not sure if RefPtr.h is the best place for bool areEquivalent(const T* a, const T* b), and it would be nice to have a unique_ptr version. Where to put it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132283</commentid>
    <comment_count>3</comment_count>
      <attachid>262877</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-10-11 23:17:51 -0700</bug_when>
    <thetext>Comment on attachment 262877
Patch

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

&gt; Source/WTF/ChangeLog:3
&gt; +        Add helper funtion for checking pointer equivalency and use it

Where does this use of the word &quot;equivalency&quot; originate from? I&apos;m not familiar with it, and it looks quite misleading to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132311</commentid>
    <comment_count>4</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-10-12 08:14:40 -0700</bug_when>
    <thetext>It was used in the style code quite a bit:
-        &amp;&amp; shadowDataEquivalent(o)
-        &amp;&amp; willChangeDataEquivalent(o)
-        &amp;&amp; reflectionDataEquivalent(o)
-        &amp;&amp; animationDataEquivalent(o)
-        &amp;&amp; transitionDataEquivalent(o)
+        &amp;&amp; areEquivalent(m_counterDirectives.get(), o.m_counterDirectives.get())
+        &amp;&amp; areEquivalent(m_boxShadow.get(), o.m_boxShadow.get())
+        &amp;&amp; areEquivalent(m_willChange, o.m_willChange)
+        &amp;&amp; areEquivalent(m_boxReflect, o.m_boxReflect)
+        &amp;&amp; areEquivalent(m_animations.get(), o.m_animations.get())
+        &amp;&amp; areEquivalent(m_transitions.get(), o.m_transitions.get())</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132576</commentid>
    <comment_count>5</comment_count>
      <attachid>262877</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-10-12 16:59:52 -0700</bug_when>
    <thetext>Comment on attachment 262877
Patch

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

&gt; Source/WTF/wtf/RefPtr.h:223
&gt; +template&lt;typename T&gt; inline bool areEquivalent(const T* a, const T* b)
&gt; +{ 
&gt; +    return a == b || (a &amp;&amp; b &amp;&amp; *a == *b);
&gt; +}

Should just implement this for all types instead of just pointers:

    template&lt;typename T&gt; inline bool areEquivalent(const T&amp; a, const T&amp; b)
    { 
        return a == b || (a &amp;&amp; b &amp;&amp; *a == *b);
    }

Then you don’t need a RefPtr overload. I suggest putting this somewhere in the WebCore tree instead of in WTF and naming it something more like isPointedToDataEqual.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132579</commentid>
    <comment_count>6</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-10-12 17:03:52 -0700</bug_when>
    <thetext>I&apos;m not sure I can handle that singular use of data :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132617</commentid>
    <comment_count>7</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-10-12 18:11:28 -0700</bug_when>
    <thetext>We like arePointingToEqualData().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132692</commentid>
    <comment_count>8</comment_count>
      <attachid>262971</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-10-12 22:12:05 -0700</bug_when>
    <thetext>Created attachment 262971
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132693</commentid>
    <comment_count>9</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-10-12 22:13:00 -0700</bug_when>
    <thetext>I put it in WTF because there&apos;s place in WebCore for shared, non-platform-specific utilities, and we may want to use it in JSC or WebKit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132702</commentid>
    <comment_count>10</comment_count>
      <attachid>262973</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-10-12 22:56:11 -0700</bug_when>
    <thetext>Created attachment 262973
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132779</commentid>
    <comment_count>11</comment_count>
      <attachid>262973</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-10-13 09:27:12 -0700</bug_when>
    <thetext>Comment on attachment 262973
Patch

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

&gt; Source/WebCore/rendering/style/FillLayer.cpp:157
&gt; +    return arePointingToEqualData(m_image.get(), o.m_image.get()) &amp;&amp; m_xPosition == o.m_xPosition &amp;&amp; m_yPosition == o.m_yPosition

I believe there is no need for the .get() here since arePointingToEqualData works on smart pointers too, not just raw pointers.

&gt; Source/WebCore/rendering/style/RenderStyle.cpp:559
&gt; -        if (rareNonInheritedData-&gt;m_grid.get() != other.rareNonInheritedData-&gt;m_grid.get()
&gt; -            || rareNonInheritedData-&gt;m_gridItem.get() != other.rareNonInheritedData-&gt;m_gridItem.get())
&gt; +        if (rareNonInheritedData-&gt;m_grid != other.rareNonInheritedData-&gt;m_grid
&gt; +            || rareNonInheritedData-&gt;m_gridItem != other.rareNonInheritedData-&gt;m_gridItem)

Too bad we don’t have test cases for this bug fix.

&gt; Source/WebCore/rendering/style/RenderStyle.cpp:943
&gt; +    if (arePointingToEqualData(rareNonInheritedData-&gt;m_willChange.get(), willChangeData.get()))

I believe there is no need for the .get() here since arePointingToEqualData works on smart pointers too, not just raw pointers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132781</commentid>
    <comment_count>12</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-10-13 09:34:32 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; Comment on attachment 262973 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=262973&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/style/FillLayer.cpp:157
&gt; &gt; +    return arePointingToEqualData(m_image.get(), o.m_image.get()) &amp;&amp; m_xPosition == o.m_xPosition &amp;&amp; m_yPosition == o.m_yPosition
&gt; 
&gt; I believe there is no need for the .get() here since arePointingToEqualData
&gt; works on smart pointers too, not just raw pointers.

I&apos;ll fix.

&gt; &gt; Source/WebCore/rendering/style/RenderStyle.cpp:559
&gt; &gt; -        if (rareNonInheritedData-&gt;m_grid.get() != other.rareNonInheritedData-&gt;m_grid.get()
&gt; &gt; -            || rareNonInheritedData-&gt;m_gridItem.get() != other.rareNonInheritedData-&gt;m_gridItem.get())
&gt; &gt; +        if (rareNonInheritedData-&gt;m_grid != other.rareNonInheritedData-&gt;m_grid
&gt; &gt; +            || rareNonInheritedData-&gt;m_gridItem != other.rareNonInheritedData-&gt;m_gridItem)
&gt; 
&gt; Too bad we don’t have test cases for this bug fix.

Yes!

&gt; &gt; Source/WebCore/rendering/style/RenderStyle.cpp:943
&gt; &gt; +    if (arePointingToEqualData(rareNonInheritedData-&gt;m_willChange.get(), willChangeData.get()))
&gt; 
&gt; I believe there is no need for the .get() here since arePointingToEqualData
&gt; works on smart pointers too, not just raw pointers.

These are different types (PassRefPtr vs RefPtr), so the .get() are needed to turn both into raw pointers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132987</commentid>
    <comment_count>13</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-10-13 17:15:36 -0700</bug_when>
    <thetext>https://trac.webkit.org/r191017</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262877</attachid>
            <date>2015-10-11 21:57:25 -0700</date>
            <delta_ts>2015-10-12 22:12:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150022-20151011215650.patch</filename>
            <type>text/plain</type>
            <size>31927</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkwODQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGVmNjEyNzViMWZjMDc4NjJiZDM1MTUz
Y2ZjMTMwMmM3MmU1MDU0MGYuLjc1ZmVmYWM2OTI3Zjc5NzFjOGM2MDNlZDgwMzEzNTcxYWViYzY3
Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTUtMTAtMTEgIFNpbW9uIEZyYXNlciAgPHNpbW9u
LmZyYXNlckBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIGhlbHBlciBmdW50aW9uIGZvciBjaGVj
a2luZyBwb2ludGVyIGVxdWl2YWxlbmN5IGFuZCB1c2UgaXQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDAyMgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgQWRkIGFyZUVxdWl2YWxlbnQoKSBo
ZWxwZXJzIGZvciBiYXJlIGFuZCBSZWZQdHJzLgorCisgICAgICAgICogd3RmL1JlZlB0ci5oOgor
ICAgICAgICAoV1RGOjphcmVFcXVpdmFsZW50KToKKwogMjAxNS0xMC0xMCAgRGFuIEJlcm5zdGVp
biAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFtpT1NdIFJlbW92ZSB1bm5lY2Vzc2FyeSBp
T1MgdmVyc2lvbiBjaGVja3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyYTQ2NzkxZTU3ZWU4NjMxNTdkYzg2NDA0
MTI0YmQ1MWNkNDIxMDVkLi5lY2E4OTY1NDA4MWE5Zjg2OTU1YjQwOTRlM2IxMzAzMGJmZWU0Mjg3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzAgQEAKKzIwMTUtMTAtMTEgIFNpbW9uIEZyYXNlciAg
PHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIGhlbHBlciBmdW50aW9uIGZv
ciBjaGVja2luZyBwb2ludGVyIGVxdWl2YWxlbmN5IGFuZCB1c2UgaXQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDAyMgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEEgY29tbW9uIHBhdHRlcm4gaW4gV2Vi
Q29yZSBjb2RlIGlzIHRvIGNoZWNrIGZvciBlcXVpdmFsZW5jeSBvZiB0d28gcG9pbnRlcnMsCisg
ICAgICAgIGVpdGhlciBib3RoIG51bGwsIG9yIGJvdGggbm9uLW51bGwgYW5kIHdpdGggZXF1YWwg
dmFsdWVzLiBUaGlzIHdhcyB3cml0dGVuIGluCisgICAgICAgIHNldmVyYWwgZGlmZmVyZW50IHdh
eXMgaW4gZGlmZmVyZW50IHBsYWNlcy4KKyAgICAgICAgCisgICAgICAgIEFkZCBhcmVFcXVpdmFs
ZW50KCkgaGVscGVycyBmb3IgUmVmUHRyIGFuZCBiYXJlIHBvaW50ZXJzLCBhbmQgdXNlIHRoZW0u
CisKKyAgICAgICAgVGhpcyBvYnZpYXRlcyB0aGUgbmVlZCBmb3IgU3R5bGVJbWFnZTo6aW1hZ2Vz
RXF1aXZhbGVudCgpLCBjb3VudGVyRGF0YUVxdWl2YWxlbnQoKQorICAgICAgICBldGMuCisgICAg
ICAgIAorICAgICAgICBBbHNvIGNoYW5nZSBzb21lIGNvbXBhcmlzb25zIG9mIERhdGFSZWY8PiB3
aGljaCBjaGVja2VkIHRoZSBwb2ludGVyIGFuZCB0aGVuIHRoZQorICAgICAgICB2YWx1ZXMgdG8g
dXNlIERhdGFSZWY8Pjo6b3BlcmF0b3I9PSB3aGljaCBkb2VzIHRoZSBzYW1lIHRoaW5nLiBDb21w
YXJpc29ucyBvZgorICAgICAgICBtX2dyaWQgYW5kIG1fZ3JpZEl0ZW0gb25seSBjaGVja2VkIHBv
aW50ZXIgZXF1YWxpdHksIHNvIHRoaXMgaXMgcHJvYmFibHkgYSBidWcgZml4IHRoZXJlLgorCisg
ICAgICAgICogcGFnZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwOiBpZiAoKCFh
ICYmICFiKSB8fCBhID09IGIpIGlzIHJlZHVuZGFudCBzbyBmaXgsCisgICAgICAgIGFuZCBhZGQg
Y2hlY2tzIGZvciBhIGFuZCBiIFJlbmRlclN0eWxlKiBmaXJzdC4KKyAgICAgICAgKFdlYkNvcmU6
OlByb3BlcnR5V3JhcHBlckdldHRlcjo6ZXF1YWxzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
SW1hZ2VQcm9wZXJ0eVdyYXBwZXI6OmVxdWFscyk6CisgICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0
eVdyYXBwZXJTaGFkb3c6OmVxdWFscyk6CisgICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0eVdyYXBw
ZXJNYXliZUludmFsaWRDb2xvcjo6ZXF1YWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGxMYXll
clByb3BlcnR5V3JhcHBlckdldHRlcjo6ZXF1YWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGxM
YXllclN0eWxlSW1hZ2VQcm9wZXJ0eVdyYXBwZXI6OmVxdWFscyk6CisgICAgICAgIChXZWJDb3Jl
OjpGaWxsTGF5ZXJzUHJvcGVydHlXcmFwcGVyOjplcXVhbHMpOgorICAgICAgICAoV2ViQ29yZTo6
U2hvcnRoYW5kUHJvcGVydHlXcmFwcGVyOjplcXVhbHMpOgorICAgICAgICAoV2ViQ29yZTo6UHJv
cGVydHlXcmFwcGVyRmxleDo6ZXF1YWxzKToKKyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5V3Jh
cHBlclNWR1BhaW50OjplcXVhbHMpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3Vy
Y2VSZXF1ZXN0QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjplcXVhbElnbm9yaW5nSGVhZGVy
RmllbGRzKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvRmlsbExheWVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbGxMYXllcjo6b3BlcmF0b3I9PSk6CisgICAgICAgICogcmVuZGVyaW5n
L3N0eWxlL05pbmVQaWVjZUltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5pbmVQaWVjZUlt
YWdlRGF0YTo6b3BlcmF0b3I9PSk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0
eWxlLmNwcDogU29tZSBudWxscHRyIGNsZWFudXAuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
dHlsZTo6Z2V0Q2FjaGVkUHNldWRvU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5
bGU6OmFkZENhY2hlZFBzZXVkb1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxl
OjpjaGFuZ2VBZmZlY3RzVmlzdWFsT3ZlcmZsb3cpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U3R5bGU6OmNoYW5nZVJlcXVpcmVzTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0
eWxlOjpjaGFuZ2VSZXF1aXJlc0xheWVyUmVwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTdHlsZTo6c2V0V2lsbENoYW5nZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1NWR1Jl
bmRlclN0eWxlRGVmcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoYWRvd1NWR0RhdGE6
Om9wZXJhdG9yPT0pOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9TaGFkb3dEYXRhLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0RhdGE6Om9wZXJhdG9yPT0pOgorICAgICAgICAqIHJl
bmRlcmluZy9zdHlsZS9TdHlsZUltYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUltYWdl
OjppbWFnZXNFcXVpdmFsZW50KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUv
U3R5bGVSYXJlSW5oZXJpdGVkRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJhcmVJ
bmhlcml0ZWREYXRhOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OmN1cnNvckRhdGFF
cXVpdmFsZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnF1b3Rlc0RhdGFFcXVpdmFs
ZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmFyZUluaGVyaXRlZERhdGE6
OnNoYWRvd0RhdGFFcXVpdmFsZW50KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3R5
bGUvU3R5bGVSYXJlSW5oZXJpdGVkRGF0YS5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9T
dHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmFy
ZU5vbkluaGVyaXRlZERhdGE6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVS
YXJlTm9uSW5oZXJpdGVkRGF0YTo6Y291bnRlckRhdGFFcXVpdmFsZW50KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUmFyZU5vbkluaGVyaXRlZERhdGE6OnNoYWRvd0RhdGFFcXVp
dmFsZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmFyZU5vbkluaGVyaXRl
ZERhdGE6OndpbGxDaGFuZ2VEYXRhRXF1aXZhbGVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhOjpyZWZsZWN0aW9uRGF0YUVxdWl2YWxlbnQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YTo6
YW5pbWF0aW9uRGF0YUVxdWl2YWxlbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSYXJlTm9uSW5oZXJpdGVkRGF0YTo6dHJhbnNpdGlvbkRhdGFFcXVpdmFsZW50KTogRGVsZXRl
ZC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5o
OgorCiAyMDE1LTEwLTEwICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAg
ICAgICBSZW1vdmUgSW5zZXJ0aW9uUG9pbnQgYW5kIENvbnRlbnREaXN0cmlidXRvcgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvUmVmUHRyLmggYi9Tb3VyY2UvV1RGL3d0Zi9SZWZQdHIuaApp
bmRleCA3YzgzMDVlMzhlZDcyYjQ0NzdkYTVmMmUyMjc1MDc2NGE3ODNlMjY0Li41NjI4YWFlYWJj
OWFmODAwZjZhZjQ1MjNmY2ZmZTQxNzk3MzY0YWZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi9SZWZQdHIuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9SZWZQdHIuaApAQCAtMjE3LDYgKzIxNywx
NiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgYm9vbCBvcGVyYXRv
ciE9KFQqIGEsIGNvbnN0IFJlZlB0cjxVPiYgYgogICAgIHJldHVybiBhICE9IGIuZ2V0KCk7IAog
fQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgYm9vbCBhcmVFcXVpdmFsZW50KGNvbnN0
IFQqIGEsIGNvbnN0IFQqIGIpCit7IAorICAgIHJldHVybiBhID09IGIgfHwgKGEgJiYgYiAmJiAq
YSA9PSAqYik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBib29sIGFyZUVxdWl2
YWxlbnQoY29uc3QgUmVmUHRyPFQ+JiBhLCBjb25zdCBSZWZQdHI8VD4mIGIpCit7IAorICAgIHJl
dHVybiBhcmVFcXVpdmFsZW50KGEuZ2V0KCksIGIuZ2V0KCkpOworfQorCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgUmVmUHRyPFQ+IHN0YXRpY19wb2ludGVyX2Nhc3Qo
Y29uc3QgUmVmUHRyPFU+JiBwKQogeyAKICAgICByZXR1cm4gUmVmUHRyPFQ+KHN0YXRpY19jYXN0
PFQqPihwLmdldCgpKSk7IApAQCAtMjMwLDUgKzI0MCw2IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBU
PiBzdHJ1Y3QgSXNTbWFydFB0cjxSZWZQdHI8VD4+IHsKIAogdXNpbmcgV1RGOjpSZWZQdHI7CiB1
c2luZyBXVEY6OnN0YXRpY19wb2ludGVyX2Nhc3Q7Cit1c2luZyBXVEY6OmFyZUVxdWl2YWxlbnQ7
CiAKICNlbmRpZiAvLyBXVEZfUmVmUHRyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcAppbmRleCAyOTMwMDI4YzVmNTk1
NDM3MDBkZTY3MTYyMmQ0OGUxYzA2NzAwYTk5Li43N2JmOWI0YWQ0ZGEzY2YzMDk1MjM3ZWNiYzU2
MGY0OTdiMDE3MzEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9D
U1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRp
b24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwCkBAIC00MDAsOSArNDAwLDcgQEAgcHVibGljOgog
CiAgICAgdmlydHVhbCBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVu
ZGVyU3R5bGUqIGIpIGNvbnN0CiAgICAgewotICAgICAgICAvLyBJZiB0aGUgc3R5bGUgcG9pbnRl
cnMgYXJlIHRoZSBzYW1lLCBkb24ndCBib3RoZXIgZG9pbmcgdGhlIHRlc3QuCi0gICAgICAgIC8v
IElmIGVpdGhlciBpcyBudWxsLCByZXR1cm4gZmFsc2UuIElmIGJvdGggYXJlIG51bGwsIHJldHVy
biB0cnVlLgotICAgICAgICBpZiAoKCFhICYmICFiKSB8fCBhID09IGIpCisgICAgICAgIGlmIChh
ID09IGIpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgaWYgKCFhIHx8ICFiKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTAwLDggKzQ5OCw2IEBAIHB1YmxpYzoKIAog
ICAgIHZpcnR1YWwgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRl
clN0eWxlKiBiKSBjb25zdAogICAgIHsKLSAgICAgICAvLyBJZiB0aGUgc3R5bGUgcG9pbnRlcnMg
YXJlIHRoZSBzYW1lLCBkb24ndCBib3RoZXIgZG9pbmcgdGhlIHRlc3QuCi0gICAgICAgLy8gSWYg
ZWl0aGVyIGlzIG51bGwsIHJldHVybiBmYWxzZS4gSWYgYm90aCBhcmUgbnVsbCwgcmV0dXJuIHRy
dWUuCiAgICAgICAgaWYgKGEgPT0gYikKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
aWYgKCFhIHx8ICFiKQpAQCAtNTA5LDcgKzUwNSw3IEBAIHB1YmxpYzoKIAogICAgICAgICBTdHls
ZUltYWdlKiBpbWFnZUEgPSAoYS0+Km1fZ2V0dGVyKSgpOwogICAgICAgICBTdHlsZUltYWdlKiBp
bWFnZUIgPSAoYi0+Km1fZ2V0dGVyKSgpOwotICAgICAgICByZXR1cm4gU3R5bGVJbWFnZTo6aW1h
Z2VzRXF1aXZhbGVudChpbWFnZUEsIGltYWdlQik7CisgICAgICAgIHJldHVybiBhcmVFcXVpdmFs
ZW50KGltYWdlQSwgaW1hZ2VCKTsKICAgICB9CiB9OwogCkBAIC02MzgsNiArNjM0LDExIEBAIHB1
YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNv
bnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdAogICAgIHsKKyAgICAgICAgaWYgKGEgPT0gYikKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoIWEgfHwgIWIpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisKICAgICAgICAgY29uc3QgU2hhZG93RGF0YSogc2hhZG93QSA9IChh
LT4qbV9nZXR0ZXIpKCk7CiAgICAgICAgIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvd0IgPSAoYi0+
Km1fZ2V0dGVyKSgpOwogCkBAIC03NTQsNiArNzU1LDExIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1
YWwgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBi
KSBjb25zdAogICAgIHsKKyAgICAgICAgaWYgKGEgPT0gYikKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICBpZiAoIWEgfHwgIWIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisK
ICAgICAgICAgQ29sb3IgZnJvbUNvbG9yID0gKGEtPiptX2dldHRlcikoKTsKICAgICAgICAgQ29s
b3IgdG9Db2xvciA9IChiLT4qbV9nZXR0ZXIpKCk7CiAKQEAgLTg0OCwxMSArODU0LDkgQEAgcHVi
bGljOgogCiAgICAgdmlydHVhbCBib29sIGVxdWFscyhjb25zdCBGaWxsTGF5ZXIqIGEsIGNvbnN0
IEZpbGxMYXllciogYikgY29uc3QKICAgICB7Ci0gICAgICAgLy8gSWYgdGhlIHN0eWxlIHBvaW50
ZXJzIGFyZSB0aGUgc2FtZSwgZG9uJ3QgYm90aGVyIGRvaW5nIHRoZSB0ZXN0LgotICAgICAgIC8v
IElmIGVpdGhlciBpcyBudWxsLCByZXR1cm4gZmFsc2UuIElmIGJvdGggYXJlIG51bGwsIHJldHVy
biB0cnVlLgotICAgICAgIGlmICgoIWEgJiYgIWIpIHx8IGEgPT0gYikKLSAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgaWYgKCFhIHx8ICFiKQorICAgICAgICBpZiAoYSA9PSBiKQorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICghYSB8fCAhYikKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgcmV0dXJuIChhLT4qbV9nZXR0ZXIpKCkgPT0gKGItPipt
X2dldHRlcikoKTsKICAgICB9CkBAIC05MDksOCArOTEzLDYgQEAgcHVibGljOgogCiAgICAgdmly
dHVhbCBib29sIGVxdWFscyhjb25zdCBGaWxsTGF5ZXIqIGEsIGNvbnN0IEZpbGxMYXllciogYikg
Y29uc3QKICAgICB7Ci0gICAgICAgLy8gSWYgdGhlIHN0eWxlIHBvaW50ZXJzIGFyZSB0aGUgc2Ft
ZSwgZG9uJ3QgYm90aGVyIGRvaW5nIHRoZSB0ZXN0LgotICAgICAgIC8vIElmIGVpdGhlciBpcyBu
dWxsLCByZXR1cm4gZmFsc2UuIElmIGJvdGggYXJlIG51bGwsIHJldHVybiB0cnVlLgogICAgICAg
IGlmIChhID09IGIpCiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIGlmICghYSB8fCAh
YikKQEAgLTkxOCw3ICs5MjAsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgU3R5bGVJbWFnZSogaW1h
Z2VBID0gKGEtPiptX2dldHRlcikoKTsKICAgICAgICAgU3R5bGVJbWFnZSogaW1hZ2VCID0gKGIt
PiptX2dldHRlcikoKTsKLSAgICAgICAgcmV0dXJuIFN0eWxlSW1hZ2U6OmltYWdlc0VxdWl2YWxl
bnQoaW1hZ2VBLCBpbWFnZUIpOworICAgICAgICByZXR1cm4gYXJlRXF1aXZhbGVudChpbWFnZUEs
IGltYWdlQik7CiAgICAgfQogfTsKIApAQCAtOTU3LDYgKzk1OSwxMSBAQCBwdWJsaWM6CiAKICAg
ICB2aXJ0dWFsIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJT
dHlsZSogYikgY29uc3QKICAgICB7CisgICAgICAgIGlmIChhID09IGIpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFhIHx8ICFiKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworCiAgICAgICAgIGNvbnN0IEZpbGxMYXllciogZnJvbUxheWVyID0gKGEtPiptX2xheWVy
c0dldHRlcikoKTsKICAgICAgICAgY29uc3QgRmlsbExheWVyKiB0b0xheWVyID0gKGItPiptX2xh
eWVyc0dldHRlcikoKTsKIApAQCAtMTAwNSw2ICsxMDEyLDExIEBAIHB1YmxpYzoKIAogICAgIHZp
cnR1YWwgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxl
KiBiKSBjb25zdAogICAgIHsKKyAgICAgICAgaWYgKGEgPT0gYikKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICBpZiAoIWEgfHwgIWIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKICAgICAgICAgZm9yIChhdXRvJiB3cmFwcGVyIDogbV9wcm9wZXJ0eVdyYXBwZXJzKSB7CiAg
ICAgICAgICAgICBpZiAoIXdyYXBwZXItPmVxdWFscyhhLCBiKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC0xMDM0LDkgKzEwNDYsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFs
IGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikg
Y29uc3QKICAgICB7Ci0gICAgICAgIC8vIElmIHRoZSBzdHlsZSBwb2ludGVycyBhcmUgdGhlIHNh
bWUsIGRvbid0IGJvdGhlciBkb2luZyB0aGUgdGVzdC4KLSAgICAgICAgLy8gSWYgZWl0aGVyIGlz
IG51bGwsIHJldHVybiBmYWxzZS4gSWYgYm90aCBhcmUgbnVsbCwgcmV0dXJuIHRydWUuCi0gICAg
ICAgIGlmICgoIWEgJiYgIWIpIHx8IGEgPT0gYikKKyAgICAgICAgaWYgKGEgPT0gYikKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBpZiAoIWEgfHwgIWIpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC0xMDY1LDYgKzEwNzUsMTEgQEAgcHVibGljOgogCiAgICAgdmlydHVh
bCBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIp
IGNvbnN0CiAgICAgeworICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIGlmICghYSB8fCAhYikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwog
ICAgICAgICBpZiAoKGEtPiptX3BhaW50VHlwZUdldHRlcikoKSAhPSAoYi0+Km1fcGFpbnRUeXBl
R2V0dGVyKSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcAppbmRl
eCBkNDFlYmIxMDgwMDYxZjZhZGVmYmM4MjdhYzdiYzIyOTc5MWYyMmY3Li4xNjQxMmNhZGU5NjRh
ODcyN2E3NzAxNmMzYmFkZjcyY2QzOTQ4NDE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHAKQEAgLTI4LDYgKzI4
LDcgQEAKIAogI2luY2x1ZGUgIkhUVFBIZWFkZXJOYW1lcy5oIgogI2luY2x1ZGUgIlJlc291cmNl
UmVxdWVzdC5oIgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCkBAIC01MDAsMTggKzUwMSw3IEBAIGJvb2wgZXF1YWxJZ25vcmluZ0hlYWRlckZpZWxkcyhj
b25zdCBSZXNvdXJjZVJlcXVlc3RCYXNlJiBhLCBjb25zdCBSZXNvdXJjZVJlcXVlCiAgICAgaWYg
KGEucmVxdWVzdGVyKCkgIT0gYi5yZXF1ZXN0ZXIoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgRm9ybURhdGEqIGZvcm1EYXRhQSA9IGEuaHR0cEJvZHkoKTsKLSAgICBGb3JtRGF0YSog
Zm9ybURhdGFCID0gYi5odHRwQm9keSgpOwotICAgIAotICAgIGlmICghZm9ybURhdGFBKQotICAg
ICAgICByZXR1cm4gIWZvcm1EYXRhQjsKLSAgICBpZiAoIWZvcm1EYXRhQikKLSAgICAgICAgcmV0
dXJuICFmb3JtRGF0YUE7Ci0gICAgCi0gICAgaWYgKCpmb3JtRGF0YUEgIT0gKmZvcm1EYXRhQikK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVy
biBhcmVFcXVpdmFsZW50KGEuaHR0cEJvZHkoKSwgYi5odHRwQm9keSgpKTsKIH0KIAogYm9vbCBS
ZXNvdXJjZVJlcXVlc3RCYXNlOjpjb21wYXJlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgYSwgY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiBiKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL0ZpbGxMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUv
RmlsbExheWVyLmNwcAppbmRleCAzN2RhYjU4MDZmMzMxNjQxMGJjOWQwMDFmM2U4OGFjY2Q5MWNi
NTIyLi43ZmJiNThhZmMzZjBlMTg2ZjVkYTdhZmE1MDc2ZDE3ODIzYWYxN2Y5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvRmlsbExheWVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvRmlsbExheWVyLmNwcApAQCAtMTUyLDcgKzE1Miw3
IEBAIGJvb2wgRmlsbExheWVyOjpvcGVyYXRvcj09KGNvbnN0IEZpbGxMYXllciYgbykgY29uc3QK
IHsKICAgICAvLyBXZSBkbyBub3QgY2hlY2sgdGhlICJpc1NldCIgYm9vbGVhbnMgZm9yIGVhY2gg
cHJvcGVydHksIHNpbmNlIHRob3NlIGFyZSBvbmx5IHVzZWQgZHVyaW5nIGluaXRpYWwgY29uc3Ry
dWN0aW9uCiAgICAgLy8gdG8gcHJvcGFnYXRlIHBhdHRlcm5zIGludG8gbGF5ZXJzLiBBbGwgbGF5
ZXIgY29tcGFyaXNvbnMgaGFwcGVuIGFmdGVyIHZhbHVlcyBoYXZlIGFsbCBiZWVuIGZpbGxlZCBp
biBhbnl3YXkuCi0gICAgcmV0dXJuIFN0eWxlSW1hZ2U6OmltYWdlc0VxdWl2YWxlbnQobV9pbWFn
ZS5nZXQoKSwgby5tX2ltYWdlLmdldCgpKSAmJiBtX3hQb3NpdGlvbiA9PSBvLm1feFBvc2l0aW9u
ICYmIG1feVBvc2l0aW9uID09IG8ubV95UG9zaXRpb24KKyAgICByZXR1cm4gYXJlRXF1aXZhbGVu
dChtX2ltYWdlLmdldCgpLCBvLm1faW1hZ2UuZ2V0KCkpICYmIG1feFBvc2l0aW9uID09IG8ubV94
UG9zaXRpb24gJiYgbV95UG9zaXRpb24gPT0gby5tX3lQb3NpdGlvbgogICAgICAgICAmJiBtX2Jh
Y2tncm91bmRYT3JpZ2luID09IG8ubV9iYWNrZ3JvdW5kWE9yaWdpbiAmJiBtX2JhY2tncm91bmRZ
T3JpZ2luID09IG8ubV9iYWNrZ3JvdW5kWU9yaWdpbgogICAgICAgICAmJiBtX2F0dGFjaG1lbnQg
PT0gby5tX2F0dGFjaG1lbnQgJiYgbV9jbGlwID09IG8ubV9jbGlwICYmIG1fY29tcG9zaXRlID09
IG8ubV9jb21wb3NpdGUKICAgICAgICAgJiYgbV9ibGVuZE1vZGUgPT0gby5tX2JsZW5kTW9kZSAm
JiBtX29yaWdpbiA9PSBvLm1fb3JpZ2luICYmIG1fcmVwZWF0WCA9PSBvLm1fcmVwZWF0WApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL05pbmVQaWVjZUltYWdlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9OaW5lUGllY2VJbWFnZS5jcHAKaW5k
ZXggYjEzNzRlMDhiMTA4NDM0ZGFkZTUzMmQ0ZGYxMjBkZjc3MzQxZDZkNC4uNTY3MTE5MzM1NGQ0
Y2M3MjYyNjUwZmE3NjAyMjFmZjNkMWU5YTJhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N0eWxlL05pbmVQaWVjZUltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3R5bGUvTmluZVBpZWNlSW1hZ2UuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5j
bHVkZSAiTGVuZ3RoRnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKICNpbmNs
dWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMjc4LDcgKzI3OSw3IEBAIFJlZjxOaW5lUGllY2VJbWFn
ZURhdGE+IE5pbmVQaWVjZUltYWdlRGF0YTo6Y29weSgpIGNvbnN0CiAKIGJvb2wgTmluZVBpZWNl
SW1hZ2VEYXRhOjpvcGVyYXRvcj09KGNvbnN0IE5pbmVQaWVjZUltYWdlRGF0YSYgb3RoZXIpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIFN0eWxlSW1hZ2U6OmltYWdlc0VxdWl2YWxlbnQoaW1hZ2UuZ2V0
KCksIG90aGVyLmltYWdlLmdldCgpKQorICAgIHJldHVybiBhcmVFcXVpdmFsZW50KGltYWdlLCBv
dGhlci5pbWFnZSkKICAgICAgICAgJiYgaW1hZ2VTbGljZXMgPT0gb3RoZXIuaW1hZ2VTbGljZXMK
ICAgICAgICAgJiYgZmlsbCA9PSBvdGhlci5maWxsCiAgICAgICAgICYmIGJvcmRlclNsaWNlcyA9
PSBvdGhlci5ib3JkZXJTbGljZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUv
UmVuZGVyU3R5bGUuY3BwCmluZGV4IDJiZGViMTk3YjMzYWU4NWUwZmJkZWUzMDY5YTdiOTNkOTc0
ZjlhMDguLjU3MzhjODI3YWZmNDkyZmRjMmZkNjIyZjMwYzJkZmM0ZGU4MzM4ZmYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcApAQCAtNDIsNiAr
NDIsNyBAQAogI2luY2x1ZGUgIlN0eWxlU2VsZkFsaWdubWVudERhdGEuaCIKICNpbmNsdWRlICJX
aWxsQ2hhbmdlRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDxh
bGdvcml0aG0+CiAKQEAgLTMxMCwxMCArMzExLDEwIEBAIGJvb2wgUmVuZGVyU3R5bGU6Omhhc1Vu
aXF1ZVBzZXVkb1N0eWxlKCkgY29uc3QKIFJlbmRlclN0eWxlKiBSZW5kZXJTdHlsZTo6Z2V0Q2Fj
aGVkUHNldWRvU3R5bGUoUHNldWRvSWQgcGlkKSBjb25zdAogewogICAgIGlmICghbV9jYWNoZWRQ
c2V1ZG9TdHlsZXMgfHwgIW1fY2FjaGVkUHNldWRvU3R5bGVzLT5zaXplKCkpCi0gICAgICAgIHJl
dHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGlmIChzdHlsZVR5cGUoKSAh
PSBOT1BTRVVETykgCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jYWNoZWRQc2V1ZG9TdHlsZXMtPnNpemUo
KTsgKytpKSB7CiAgICAgICAgIFJlbmRlclN0eWxlKiBwc2V1ZG9TdHlsZSA9IG1fY2FjaGVkUHNl
dWRvU3R5bGVzLT5hdChpKS5nZXQoKTsKQEAgLTMyMSwxMyArMzIyLDEzIEBAIFJlbmRlclN0eWxl
KiBSZW5kZXJTdHlsZTo6Z2V0Q2FjaGVkUHNldWRvU3R5bGUoUHNldWRvSWQgcGlkKSBjb25zdAog
ICAgICAgICAgICAgcmV0dXJuIHBzZXVkb1N0eWxlOwogICAgIH0KIAotICAgIHJldHVybiAwOwor
ICAgIHJldHVybiBudWxscHRyOwogfQogCiBSZW5kZXJTdHlsZSogUmVuZGVyU3R5bGU6OmFkZENh
Y2hlZFBzZXVkb1N0eWxlKFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHBzZXVkbykKIHsKICAgICBp
ZiAoIXBzZXVkbykKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwog
CiAgICAgQVNTRVJUKHBzZXVkby0+c3R5bGVUeXBlKCkgPiBOT1BTRVVETyk7CiAKQEAgLTQ1OSwx
MSArNDYwLDExIEBAIHN0YXRpYyBib29sIHBvc2l0aW9uQ2hhbmdlSXNNb3ZlbWVudE9ubHkoY29u
c3QgTGVuZ3RoQm94JiBhLCBjb25zdCBMZW5ndGhCb3gmIGIsCiBpbmxpbmUgYm9vbCBSZW5kZXJT
dHlsZTo6Y2hhbmdlQWZmZWN0c1Zpc3VhbE92ZXJmbG93KGNvbnN0IFJlbmRlclN0eWxlJiBvdGhl
cikgY29uc3QKIHsKICAgICBpZiAocmFyZU5vbkluaGVyaXRlZERhdGEuZ2V0KCkgIT0gb3RoZXIu
cmFyZU5vbkluaGVyaXRlZERhdGEuZ2V0KCkKLSAgICAgICAgJiYgIXJhcmVOb25Jbmhlcml0ZWRE
YXRhLT5zaGFkb3dEYXRhRXF1aXZhbGVudCgqb3RoZXIucmFyZU5vbkluaGVyaXRlZERhdGEuZ2V0
KCkpKQorICAgICAgICAmJiAhYXJlRXF1aXZhbGVudChyYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9i
b3hTaGFkb3cuZ2V0KCksIG90aGVyLnJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX2JveFNoYWRvdy5n
ZXQoKSkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgaWYgKHJhcmVJbmhlcml0ZWREYXRh
LmdldCgpICE9IG90aGVyLnJhcmVJbmhlcml0ZWREYXRhLmdldCgpCi0gICAgICAgICYmICFyYXJl
SW5oZXJpdGVkRGF0YS0+c2hhZG93RGF0YUVxdWl2YWxlbnQoKm90aGVyLnJhcmVJbmhlcml0ZWRE
YXRhLmdldCgpKSkKKyAgICAgICAgJiYgIWFyZUVxdWl2YWxlbnQocmFyZUluaGVyaXRlZERhdGEt
PnRleHRTaGFkb3cuZ2V0KCksIG90aGVyLnJhcmVJbmhlcml0ZWREYXRhLT50ZXh0U2hhZG93Lmdl
dCgpKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBpZiAoaW5oZXJpdGVkX2ZsYWdzLl90
ZXh0X2RlY29yYXRpb25zICE9IG90aGVyLmluaGVyaXRlZF9mbGFncy5fdGV4dF9kZWNvcmF0aW9u
cwpAQCAtNTIzLDEzICs1MjQsMTIgQEAgYm9vbCBSZW5kZXJTdHlsZTo6Y2hhbmdlUmVxdWlyZXNM
YXlvdXQoY29uc3QgUmVuZGVyU3R5bGUmIG90aGVyLCB1bnNpZ25lZCYgY2hhbmcKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogI2VuZGlmCiAKLSAgICAgICAgaWYgKHJhcmVOb25Jbmhlcml0ZWRE
YXRhLT5tX2RlcHJlY2F0ZWRGbGV4aWJsZUJveC5nZXQoKSAhPSBvdGhlci5yYXJlTm9uSW5oZXJp
dGVkRGF0YS0+bV9kZXByZWNhdGVkRmxleGlibGVCb3guZ2V0KCkKLSAgICAgICAgICAgICYmICpy
YXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9kZXByZWNhdGVkRmxleGlibGVCb3guZ2V0KCkgIT0gKm90
aGVyLnJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX2RlcHJlY2F0ZWRGbGV4aWJsZUJveC5nZXQoKSkK
KyAgICAgICAgaWYgKHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX2RlcHJlY2F0ZWRGbGV4aWJsZUJv
eCAhPSBvdGhlci5yYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9kZXByZWNhdGVkRmxleGlibGVCb3gp
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgICAgICBpZiAocmFyZU5vbkluaGVyaXRl
ZERhdGEtPm1fZmxleGlibGVCb3guZ2V0KCkgIT0gb3RoZXIucmFyZU5vbkluaGVyaXRlZERhdGEt
Pm1fZmxleGlibGVCb3guZ2V0KCkKLSAgICAgICAgICAgICYmICpyYXJlTm9uSW5oZXJpdGVkRGF0
YS0+bV9mbGV4aWJsZUJveC5nZXQoKSAhPSAqb3RoZXIucmFyZU5vbkluaGVyaXRlZERhdGEtPm1f
ZmxleGlibGVCb3guZ2V0KCkpCisgICAgICAgIGlmIChyYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9m
bGV4aWJsZUJveCAhPSBvdGhlci5yYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9mbGV4aWJsZUJveCkK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOworCiAgICAgICAgIGlmIChyYXJlTm9uSW5oZXJpdGVk
RGF0YS0+bV9vcmRlciAhPSBvdGhlci5yYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9vcmRlcgogICAg
ICAgICAgICAgfHwgcmFyZU5vbkluaGVyaXRlZERhdGEtPm1fYWxpZ25Db250ZW50ICE9IG90aGVy
LnJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX2FsaWduQ29udGVudAogICAgICAgICAgICAgfHwgcmFy
ZU5vbkluaGVyaXRlZERhdGEtPm1fYWxpZ25JdGVtcyAhPSBvdGhlci5yYXJlTm9uSW5oZXJpdGVk
RGF0YS0+bV9hbGlnbkl0ZW1zCkBAIC01MzksMTEgKzUzOSwxMCBAQCBib29sIFJlbmRlclN0eWxl
OjpjaGFuZ2VSZXF1aXJlc0xheW91dChjb25zdCBSZW5kZXJTdHlsZSYgb3RoZXIsIHVuc2lnbmVk
JiBjaGFuZwogICAgICAgICAgICAgfHwgcmFyZU5vbkluaGVyaXRlZERhdGEtPm1fanVzdGlmeVNl
bGYgIT0gb3RoZXIucmFyZU5vbkluaGVyaXRlZERhdGEtPm1fanVzdGlmeVNlbGYpCiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKIAotICAgICAgICBpZiAoIXJhcmVOb25Jbmhlcml0ZWREYXRhLT5y
ZWZsZWN0aW9uRGF0YUVxdWl2YWxlbnQoKm90aGVyLnJhcmVOb25Jbmhlcml0ZWREYXRhLmdldCgp
KSkKKyAgICAgICAgaWYgKCFhcmVFcXVpdmFsZW50KHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX2Jv
eFJlZmxlY3QsIG90aGVyLnJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX2JveFJlZmxlY3QpKQogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICAgICAgaWYgKHJhcmVOb25Jbmhlcml0ZWREYXRh
LT5tX211bHRpQ29sLmdldCgpICE9IG90aGVyLnJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX211bHRp
Q29sLmdldCgpCi0gICAgICAgICAgICAmJiAqcmFyZU5vbkluaGVyaXRlZERhdGEtPm1fbXVsdGlD
b2wuZ2V0KCkgIT0gKm90aGVyLnJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX211bHRpQ29sLmdldCgp
KQorICAgICAgICBpZiAocmFyZU5vbkluaGVyaXRlZERhdGEtPm1fbXVsdGlDb2wgIT0gb3RoZXIu
cmFyZU5vbkluaGVyaXRlZERhdGEtPm1fbXVsdGlDb2wpCiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKIAogICAgICAgICBpZiAocmFyZU5vbkluaGVyaXRlZERhdGEtPm1fdHJhbnNmb3JtICE9IG90
aGVyLnJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX3RyYW5zZm9ybSkgewpAQCAtNTU2LDggKzU1NSw4
IEBAIGJvb2wgUmVuZGVyU3R5bGU6OmNoYW5nZVJlcXVpcmVzTGF5b3V0KGNvbnN0IFJlbmRlclN0
eWxlJiBvdGhlciwgdW5zaWduZWQmIGNoYW5nCiAgICAgICAgIH0KIAogI2lmIEVOQUJMRShDU1Nf
R1JJRF9MQVlPVVQpCi0gICAgICAgIGlmIChyYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9ncmlkLmdl
dCgpICE9IG90aGVyLnJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX2dyaWQuZ2V0KCkKLSAgICAgICAg
ICAgIHx8IHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX2dyaWRJdGVtLmdldCgpICE9IG90aGVyLnJh
cmVOb25Jbmhlcml0ZWREYXRhLT5tX2dyaWRJdGVtLmdldCgpKQorICAgICAgICBpZiAocmFyZU5v
bkluaGVyaXRlZERhdGEtPm1fZ3JpZCAhPSBvdGhlci5yYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9n
cmlkCisgICAgICAgICAgICB8fCByYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9ncmlkSXRlbSAhPSBv
dGhlci5yYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9ncmlkSXRlbSkKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogI2VuZGlmCiAKQEAgLTU2Nyw3ICs1NjYsNyBAQCBib29sIFJlbmRlclN0eWxlOjpj
aGFuZ2VSZXF1aXJlc0xheW91dChjb25zdCBSZW5kZXJTdHlsZSYgb3RoZXIsIHVuc2lnbmVkJiBj
aGFuZwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKIAotICAgICAgICBpZiAoIXJh
cmVOb25Jbmhlcml0ZWREYXRhLT53aWxsQ2hhbmdlRGF0YUVxdWl2YWxlbnQoKm90aGVyLnJhcmVO
b25Jbmhlcml0ZWREYXRhLmdldCgpKSkgeworICAgICAgICBpZiAoIWFyZUVxdWl2YWxlbnQocmFy
ZU5vbkluaGVyaXRlZERhdGEtPm1fd2lsbENoYW5nZSwgb3RoZXIucmFyZU5vbkluaGVyaXRlZERh
dGEtPm1fd2lsbENoYW5nZSkpIHsKICAgICAgICAgICAgIGNoYW5nZWRDb250ZXh0U2Vuc2l0aXZl
UHJvcGVydGllcyB8PSBDb250ZXh0U2Vuc2l0aXZlUHJvcGVydHlXaWxsQ2hhbmdlOwogICAgICAg
ICAgICAgLy8gRG9uJ3QgcmV0dXJuOyBrZWVwIGxvb2tpbmcgZm9yIGFub3RoZXIgY2hhbmdlCiAg
ICAgICAgIH0KQEAgLTYxNiw3ICs2MTUsNyBAQCBib29sIFJlbmRlclN0eWxlOjpjaGFuZ2VSZXF1
aXJlc0xheW91dChjb25zdCBSZW5kZXJTdHlsZSYgb3RoZXIsIHVuc2lnbmVkJiBjaGFuZwogI2lm
IEVOQUJMRShBQ0NFTEVSQVRFRF9PVkVSRkxPV19TQ1JPTExJTkcpCiAgICAgICAgICAgICB8fCBy
YXJlSW5oZXJpdGVkRGF0YS0+dXNlVG91Y2hPdmVyZmxvd1Njcm9sbGluZyAhPSBvdGhlci5yYXJl
SW5oZXJpdGVkRGF0YS0+dXNlVG91Y2hPdmVyZmxvd1Njcm9sbGluZwogI2VuZGlmCi0gICAgICAg
ICAgICB8fCByYXJlSW5oZXJpdGVkRGF0YS0+bGlzdFN0eWxlSW1hZ2UgIT0gb3RoZXIucmFyZUlu
aGVyaXRlZERhdGEtPmxpc3RTdHlsZUltYWdlKQorICAgICAgICAgICAgfHwgcmFyZUluaGVyaXRl
ZERhdGEtPmxpc3RTdHlsZUltYWdlICE9IG90aGVyLnJhcmVJbmhlcml0ZWREYXRhLT5saXN0U3R5
bGVJbWFnZSkgLy8gRklYTUU6IG5lZWRzIGFyZUVxdWl2YWxlbnQoKT8KICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogCiAgICAgICAgIGlmICh0ZXh0U3Ryb2tlV2lkdGgoKSAhPSBvdGhlci50ZXh0
U3Ryb2tlV2lkdGgoKSkKQEAgLTcwMCw5ICs2OTksNyBAQCBib29sIFJlbmRlclN0eWxlOjpjaGFu
Z2VSZXF1aXJlc0xheW91dChjb25zdCBSZW5kZXJTdHlsZSYgb3RoZXIsIHVuc2lnbmVkJiBjaGFu
ZwogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIC8vIElmIHRoZSBjb3VudGVyIGRpcmVjdGl2
ZXMgY2hhbmdlLCB0cmlnZ2VyIGEgcmVsYXlvdXQgdG8gcmUtY2FsY3VsYXRlIGNvdW50ZXIgdmFs
dWVzIGFuZCByZWJ1aWxkIHRoZSBjb3VudGVyIG5vZGUgdHJlZS4KLSAgICBjb25zdCBDb3VudGVy
RGlyZWN0aXZlTWFwKiBtYXBBID0gcmFyZU5vbkluaGVyaXRlZERhdGEtPm1fY291bnRlckRpcmVj
dGl2ZXMuZ2V0KCk7Ci0gICAgY29uc3QgQ291bnRlckRpcmVjdGl2ZU1hcCogbWFwQiA9IG90aGVy
LnJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX2NvdW50ZXJEaXJlY3RpdmVzLmdldCgpOwotICAgIGlm
ICghKG1hcEEgPT0gbWFwQiB8fCAobWFwQSAmJiBtYXBCICYmICptYXBBID09ICptYXBCKSkpCisg
ICAgaWYgKCFhcmVFcXVpdmFsZW50KHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX2NvdW50ZXJEaXJl
Y3RpdmVzLmdldCgpLCBvdGhlci5yYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9jb3VudGVyRGlyZWN0
aXZlcy5nZXQoKSkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgaWYgKCh2aXNpYmlsaXR5
KCkgPT0gQ09MTEFQU0UpICE9IChvdGhlci52aXNpYmlsaXR5KCkgPT0gQ09MTEFQU0UpKQpAQCAt
NzI1LDkgKzcyMiw3IEBAIGJvb2wgUmVuZGVyU3R5bGU6OmNoYW5nZVJlcXVpcmVzTGF5b3V0KGNv
bnN0IFJlbmRlclN0eWxlJiBvdGhlciwgdW5zaWduZWQmIGNoYW5nCiAgICAgICAgIHJldHVybiB0
cnVlOwogI2VuZGlmCiAKLSAgICBjb25zdCBRdW90ZXNEYXRhKiBxdW90ZXNEYXRhQSA9IHJhcmVJ
bmhlcml0ZWREYXRhLT5xdW90ZXMuZ2V0KCk7Ci0gICAgY29uc3QgUXVvdGVzRGF0YSogcXVvdGVz
RGF0YUIgPSBvdGhlci5yYXJlSW5oZXJpdGVkRGF0YS0+cXVvdGVzLmdldCgpOwotICAgIGlmICgh
KHF1b3Rlc0RhdGFBID09IHF1b3Rlc0RhdGFCIHx8IChxdW90ZXNEYXRhQSAmJiBxdW90ZXNEYXRh
QiAmJiAqcXVvdGVzRGF0YUEgPT0gKnF1b3Rlc0RhdGFCKSkpCisgICAgaWYgKCFhcmVFcXVpdmFs
ZW50KHJhcmVJbmhlcml0ZWREYXRhLT5xdW90ZXMsIG90aGVyLnJhcmVJbmhlcml0ZWREYXRhLT5x
dW90ZXMpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGlmIChwb3NpdGlvbigpICE9IFN0
YXRpY1Bvc2l0aW9uKSB7CkBAIC03ODQsOCArNzc5LDcgQEAgYm9vbCBSZW5kZXJTdHlsZTo6Y2hh
bmdlUmVxdWlyZXNMYXllclJlcGFpbnQoY29uc3QgUmVuZGVyU3R5bGUmIG90aGVyLCB1bnNpZ25l
ZCYKICAgICAgICAgLy8gRG9uJ3QgcmV0dXJuOyBrZWVwIGxvb2tpbmcgZm9yIGFub3RoZXIgY2hh
bmdlLgogICAgIH0KIAotICAgIGlmIChyYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9maWx0ZXIuZ2V0
KCkgIT0gb3RoZXIucmFyZU5vbkluaGVyaXRlZERhdGEtPm1fZmlsdGVyLmdldCgpCi0gICAgICAg
ICYmICpyYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9maWx0ZXIuZ2V0KCkgIT0gKm90aGVyLnJhcmVO
b25Jbmhlcml0ZWREYXRhLT5tX2ZpbHRlci5nZXQoKSkgeworICAgIGlmIChyYXJlTm9uSW5oZXJp
dGVkRGF0YS0+bV9maWx0ZXIgIT0gb3RoZXIucmFyZU5vbkluaGVyaXRlZERhdGEtPm1fZmlsdGVy
KSB7CiAgICAgICAgIGNoYW5nZWRDb250ZXh0U2Vuc2l0aXZlUHJvcGVydGllcyB8PSBDb250ZXh0
U2Vuc2l0aXZlUHJvcGVydHlGaWx0ZXI7CiAgICAgICAgIC8vIERvbid0IHJldHVybjsga2VlcCBs
b29raW5nIGZvciBhbm90aGVyIGNoYW5nZS4KICAgICB9CkBAIC05NDYsOCArOTQwLDcgQEAgdm9p
ZCBSZW5kZXJTdHlsZTo6c2V0UXVvdGVzKFBhc3NSZWZQdHI8UXVvdGVzRGF0YT4gcSkKIAogdm9p
ZCBSZW5kZXJTdHlsZTo6c2V0V2lsbENoYW5nZShQYXNzUmVmUHRyPFdpbGxDaGFuZ2VEYXRhPiB3
aWxsQ2hhbmdlRGF0YSkKIHsKLSAgICBpZiAocmFyZU5vbkluaGVyaXRlZERhdGEtPm1fd2lsbENo
YW5nZSA9PSB3aWxsQ2hhbmdlRGF0YQotICAgICAgICB8fCAocmFyZU5vbkluaGVyaXRlZERhdGEt
Pm1fd2lsbENoYW5nZSAmJiB3aWxsQ2hhbmdlRGF0YSAmJiAqcmFyZU5vbkluaGVyaXRlZERhdGEt
Pm1fd2lsbENoYW5nZSA9PSAqd2lsbENoYW5nZURhdGEpKQorICAgIGlmIChhcmVFcXVpdmFsZW50
KHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX3dpbGxDaGFuZ2UuZ2V0KCksIHdpbGxDaGFuZ2VEYXRh
LmdldCgpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgcmFyZU5vbkluaGVyaXRlZERhdGEuYWNj
ZXNzKCktPm1fd2lsbENoYW5nZSA9IFdURjo6bW92ZSh3aWxsQ2hhbmdlRGF0YSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU1ZHUmVuZGVyU3R5bGVEZWZzLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TVkdSZW5kZXJTdHlsZURlZnMuY3Bw
CmluZGV4IDdkNjlkODQzYjY1YjQ5YTU3NDQ5ZjQ3MjY3Y2E3MGUwZWMyYzRiNTUuLmE1NTc3MmQ1
NmMwMDMyZTc0Njc1NDJkNzU4MjlhNzg2OWE1MDY1ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9TVkdSZW5kZXJTdHlsZURlZnMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TVkdSZW5kZXJTdHlsZURlZnMuY3BwCkBAIC0zMSw2ICsz
MSw3IEBACiAKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlNWR1JlbmRlclN0
eWxlLmgiCisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
QEAgLTIxNiwxMSArMjE3LDcgQEAgUmVmPFN0eWxlU2hhZG93U1ZHRGF0YT4gU3R5bGVTaGFkb3dT
VkdEYXRhOjpjb3B5KCkgY29uc3QKIAogYm9vbCBTdHlsZVNoYWRvd1NWR0RhdGE6Om9wZXJhdG9y
PT0oY29uc3QgU3R5bGVTaGFkb3dTVkdEYXRhJiBvdGhlcikgY29uc3QKIHsKLSAgICBpZiAoKCFz
aGFkb3cgJiYgb3RoZXIuc2hhZG93KSB8fCAoc2hhZG93ICYmICFvdGhlci5zaGFkb3cpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHNoYWRvdyAmJiBvdGhlci5zaGFkb3cgJiYgKCpz
aGFkb3cgIT0gKm90aGVyLnNoYWRvdykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1
cm4gdHJ1ZTsKKyAgICByZXR1cm4gYXJlRXF1aXZhbGVudChzaGFkb3cuZ2V0KCksIG90aGVyLnNo
YWRvdy5nZXQoKSk7CiB9CiAKIFN0eWxlUmVzb3VyY2VEYXRhOjpTdHlsZVJlc291cmNlRGF0YSgp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU2hhZG93RGF0YS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU2hhZG93RGF0YS5jcHAKaW5kZXgg
MGYzMWM2MWFjZDcwY2Q3NGY1NGM0YzE1ODk1YWQ0ZmE1OGVhMTZhZS4uYjA3ZGMzZDQ2YTFkMjM4
NmI5NWUyODY2NWZjNmMwODhjNGM4ZGRkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL1NoYWRvd0RhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9TaGFkb3dEYXRhLmNwcApAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgIlNoYWRv
d0RhdGEuaCIKIAogI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKKyNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzksOCArNDAsNyBAQCBTaGFkb3dEYXRh
OjpTaGFkb3dEYXRhKGNvbnN0IFNoYWRvd0RhdGEmIG8pCiAKIGJvb2wgU2hhZG93RGF0YTo6b3Bl
cmF0b3I9PShjb25zdCBTaGFkb3dEYXRhJiBvKSBjb25zdAogewotICAgIGlmICgobV9uZXh0ICYm
ICFvLm1fbmV4dCkgfHwgKCFtX25leHQgJiYgby5tX25leHQpCi0gICAgICAgIHx8IChtX25leHQg
JiYgby5tX25leHQgJiYgKm1fbmV4dCAhPSAqby5tX25leHQpKQorICAgIGlmICghYXJlRXF1aXZh
bGVudChtX25leHQuZ2V0KCksIG8ubV9uZXh0LmdldCgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIAogICAgIHJldHVybiBtX2xvY2F0aW9uID09IG8ubV9sb2NhdGlvbgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW1hZ2UuaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUltYWdlLmgKaW5kZXggMjM2ZjFhMjE5OWMyODNh
ZDMxZjU0M2Y5NzM5MjlkOTllNTJjNzZlZC4uMzNkMmRjMjc5ZjAwMTU1Mzc0MjY4YWY4MjcwODQ5
MTcyMGJjZjE4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0
eWxlSW1hZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVJbWFn
ZS5oCkBAIC03NCwxMSArNzQsNiBAQCBwdWJsaWM6CiAgICAgQUxXQVlTX0lOTElORSBib29sIGlz
R2VuZXJhdGVkSW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2lzR2VuZXJhdGVkSW1hZ2U7IH0KICAg
ICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNDYWNoZWRJbWFnZVNldCgpIGNvbnN0IHsgcmV0dXJuIG1f
aXNDYWNoZWRJbWFnZVNldDsgfQogICAgIAotICAgIHN0YXRpYyBib29sIGltYWdlc0VxdWl2YWxl
bnQoU3R5bGVJbWFnZSogaW1hZ2UxLCBTdHlsZUltYWdlKiBpbWFnZTIpCi0gICAgewotICAgICAg
ICByZXR1cm4gaW1hZ2UxID09IGltYWdlMiB8fCAoaW1hZ2UxICYmIGltYWdlMiAmJiAqaW1hZ2Ux
ID09ICppbWFnZTIpOwotICAgIH0KLQogcHJvdGVjdGVkOgogICAgIFN0eWxlSW1hZ2UoKQogICAg
ICAgICA6IG1faXNDYWNoZWRJbWFnZShmYWxzZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVJbmhlcml0ZWREYXRhLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVJbmhlcml0ZWREYXRhLmNwcAppbmRleCBkOWNh
MzQ5ZTg4OGE0Y2U1NzM2NzhjNWIwMThmMWMwZWI1N2FmMzEyLi5jMjZlOTlhZWU5OTUxMTlmZWZl
OWJmMDk1OGEyZWUwZDUxZjU0N2U1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3R5bGUvU3R5bGVSYXJlSW5oZXJpdGVkRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFyZUluaGVyaXRlZERhdGEuY3BwCkBAIC0zMCw2ICszMCw3
IEBACiAjaW5jbHVkZSAiU2hhZG93RGF0YS5oIgogI2luY2x1ZGUgIlN0eWxlQ3VzdG9tUHJvcGVy
dHlEYXRhLmgiCiAjaW5jbHVkZSAiU3R5bGVJbWFnZS5oIgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0yMzUsMjQgKzIzNiw2IEBAIFN0eWxlUmFy
ZUluaGVyaXRlZERhdGE6On5TdHlsZVJhcmVJbmhlcml0ZWREYXRhKCkKIHsKIH0KIAotc3RhdGlj
IGJvb2wgY3Vyc29yRGF0YUVxdWl2YWxlbnQoY29uc3QgQ3Vyc29yTGlzdCogYzEsIGNvbnN0IEN1
cnNvckxpc3QqIGMyKQotewotICAgIGlmIChjMSA9PSBjMikKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgaWYgKCghYzEgJiYgYzIpIHx8IChjMSAmJiAhYzIpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgcmV0dXJuICgqYzEgPT0gKmMyKTsKLX0KLQotc3RhdGljIGJvb2wgcXVvdGVzRGF0
YUVxdWl2YWxlbnQoY29uc3QgUXVvdGVzRGF0YSogcTEsIGNvbnN0IFF1b3Rlc0RhdGEqIHEyKQot
ewotICAgIGlmIChxMSA9PSBxMikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKCghcTEg
JiYgcTIpIHx8IChxMSAmJiAhcTIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJu
ICgqcTEgPT0gKnEyKTsKLX0KLQogYm9vbCBTdHlsZVJhcmVJbmhlcml0ZWREYXRhOjpvcGVyYXRv
cj09KGNvbnN0IFN0eWxlUmFyZUluaGVyaXRlZERhdGEmIG8pIGNvbnN0CiB7CiAgICAgcmV0dXJu
IHRleHRTdHJva2VDb2xvciA9PSBvLnRleHRTdHJva2VDb2xvcgpAQCAtMjY1LDggKzI0OCw4IEBA
IGJvb2wgU3R5bGVSYXJlSW5oZXJpdGVkRGF0YTo6b3BlcmF0b3I9PShjb25zdCBTdHlsZVJhcmVJ
bmhlcml0ZWREYXRhJiBvKSBjb25zdAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAgICAgICAg
ICYmIHRhcEhpZ2hsaWdodENvbG9yID09IG8udGFwSGlnaGxpZ2h0Q29sb3IKICNlbmRpZgotICAg
ICAgICAmJiBzaGFkb3dEYXRhRXF1aXZhbGVudChvKQotICAgICAgICAmJiBjdXJzb3JEYXRhRXF1
aXZhbGVudChjdXJzb3JEYXRhLmdldCgpLCBvLmN1cnNvckRhdGEuZ2V0KCkpCisgICAgICAgICYm
IGFyZUVxdWl2YWxlbnQodGV4dFNoYWRvdy5nZXQoKSwgby50ZXh0U2hhZG93LmdldCgpKQorICAg
ICAgICAmJiBhcmVFcXVpdmFsZW50KGN1cnNvckRhdGEuZ2V0KCksIG8uY3Vyc29yRGF0YS5nZXQo
KSkKICAgICAgICAgJiYgaW5kZW50ID09IG8uaW5kZW50CiAgICAgICAgICYmIG1fZWZmZWN0aXZl
Wm9vbSA9PSBvLm1fZWZmZWN0aXZlWm9vbQogICAgICAgICAmJiB3aWRvd3MgPT0gby53aWRvd3MK
QEAgLTMwNyw3ICsyOTAsNyBAQCBib29sIFN0eWxlUmFyZUluaGVyaXRlZERhdGE6Om9wZXJhdG9y
PT0oY29uc3QgU3R5bGVSYXJlSW5oZXJpdGVkRGF0YSYgbykgY29uc3QKICAgICAgICAgJiYgaHlw
aGVuYXRpb25TdHJpbmcgPT0gby5oeXBoZW5hdGlvblN0cmluZwogICAgICAgICAmJiBsb2NhbGUg
PT0gby5sb2NhbGUKICAgICAgICAgJiYgdGV4dEVtcGhhc2lzQ3VzdG9tTWFyayA9PSBvLnRleHRF
bXBoYXNpc0N1c3RvbU1hcmsKLSAgICAgICAgJiYgcXVvdGVzRGF0YUVxdWl2YWxlbnQocXVvdGVz
LmdldCgpLCBvLnF1b3Rlcy5nZXQoKSkKKyAgICAgICAgJiYgYXJlRXF1aXZhbGVudChxdW90ZXMs
IG8ucXVvdGVzKQogICAgICAgICAmJiBtX3RhYlNpemUgPT0gby5tX3RhYlNpemUKICAgICAgICAg
JiYgbV9saW5lR3JpZCA9PSBvLm1fbGluZUdyaWQKICNpZiBFTkFCTEUoQ1NTX0lNQUdFX09SSUVO
VEFUSU9OKQpAQCAtMzMzLDE2ICszMTYsNyBAQCBib29sIFN0eWxlUmFyZUluaGVyaXRlZERhdGE6
Om9wZXJhdG9yPT0oY29uc3QgU3R5bGVSYXJlSW5oZXJpdGVkRGF0YSYgbykgY29uc3QKICAgICAg
ICAgJiYgdHJhaWxpbmdXb3JkID09IG8udHJhaWxpbmdXb3JkCiAjZW5kaWYKICAgICAgICAgJiYg
bV9jdXN0b21Qcm9wZXJ0aWVzID09IG8ubV9jdXN0b21Qcm9wZXJ0aWVzCi0gICAgICAgICYmIFN0
eWxlSW1hZ2U6OmltYWdlc0VxdWl2YWxlbnQobGlzdFN0eWxlSW1hZ2UuZ2V0KCksIG8ubGlzdFN0
eWxlSW1hZ2UuZ2V0KCkpOwotfQotCi1ib29sIFN0eWxlUmFyZUluaGVyaXRlZERhdGE6OnNoYWRv
d0RhdGFFcXVpdmFsZW50KGNvbnN0IFN0eWxlUmFyZUluaGVyaXRlZERhdGEmIG8pIGNvbnN0Ci17
Ci0gICAgaWYgKCghdGV4dFNoYWRvdyAmJiBvLnRleHRTaGFkb3cpIHx8ICh0ZXh0U2hhZG93ICYm
ICFvLnRleHRTaGFkb3cpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHRleHRTaGFk
b3cgJiYgby50ZXh0U2hhZG93ICYmICgqdGV4dFNoYWRvdyAhPSAqby50ZXh0U2hhZG93KSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOworICAgICAgICAmJiBhcmVFcXVp
dmFsZW50KGxpc3RTdHlsZUltYWdlLCBvLmxpc3RTdHlsZUltYWdlKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L1N0eWxlUmFyZUluaGVyaXRlZERhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHls
ZS9TdHlsZVJhcmVJbmhlcml0ZWREYXRhLmgKaW5kZXggMjY1MTYxYjM2NDUyNjRhOTMyNzllN2Ri
YTMyZDdmMGQ0NTJiN2IwOS4uZWNiYjA3OWZiMDhkMWNlZjc1MWQxMjM3MTMwNzZhNjgyOTEzNjIx
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFyZUlu
aGVyaXRlZERhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVS
YXJlSW5oZXJpdGVkRGF0YS5oCkBAIC01OCw3ICs1OCw2IEBAIHB1YmxpYzoKICAgICB7CiAgICAg
ICAgIHJldHVybiAhKCp0aGlzID09IG8pOwogICAgIH0KLSAgICBib29sIHNoYWRvd0RhdGFFcXVp
dmFsZW50KGNvbnN0IFN0eWxlUmFyZUluaGVyaXRlZERhdGEmKSBjb25zdDsKIAogICAgIFJlZlB0
cjxTdHlsZUltYWdlPiBsaXN0U3R5bGVJbWFnZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEuY3BwCmlu
ZGV4IDBkNGQ4YjVjNWU4M2E5MWU1MmJlZjYzNDA2ZmZkNGU3OWU5NjdkZTAuLjljY2YwNGQ2Yzc5
ODI5MzEyOTU5YTRkM2RiMzViZDBlYTIzYjIyNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5jcHAK
QEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJTdHlsZUltYWdlLmgiCiAjaW5jbHVkZSAiU3R5
bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgIlN0eWxlU2Nyb2xsU25hcFBvaW50cy5oIgorI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0yMzMsMTIgKzIz
NCwxMiBAQCBib29sIFN0eWxlUmFyZU5vbkluaGVyaXRlZERhdGE6Om9wZXJhdG9yPT0oY29uc3Qg
U3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YSYgbykgYwogICAgICAgICAmJiBtX3Njcm9sbFNuYXBQ
b2ludHMgPT0gby5tX3Njcm9sbFNuYXBQb2ludHMKICNlbmRpZgogICAgICAgICAmJiBjb250ZW50
RGF0YUVxdWl2YWxlbnQobykKLSAgICAgICAgJiYgY291bnRlckRhdGFFcXVpdmFsZW50KG8pCi0g
ICAgICAgICYmIHNoYWRvd0RhdGFFcXVpdmFsZW50KG8pCi0gICAgICAgICYmIHdpbGxDaGFuZ2VE
YXRhRXF1aXZhbGVudChvKQotICAgICAgICAmJiByZWZsZWN0aW9uRGF0YUVxdWl2YWxlbnQobykK
LSAgICAgICAgJiYgYW5pbWF0aW9uRGF0YUVxdWl2YWxlbnQobykKLSAgICAgICAgJiYgdHJhbnNp
dGlvbkRhdGFFcXVpdmFsZW50KG8pCisgICAgICAgICYmIGFyZUVxdWl2YWxlbnQobV9jb3VudGVy
RGlyZWN0aXZlcy5nZXQoKSwgby5tX2NvdW50ZXJEaXJlY3RpdmVzLmdldCgpKQorICAgICAgICAm
JiBhcmVFcXVpdmFsZW50KG1fYm94U2hhZG93LmdldCgpLCBvLm1fYm94U2hhZG93LmdldCgpKQor
ICAgICAgICAmJiBhcmVFcXVpdmFsZW50KG1fd2lsbENoYW5nZSwgby5tX3dpbGxDaGFuZ2UpCisg
ICAgICAgICYmIGFyZUVxdWl2YWxlbnQobV9ib3hSZWZsZWN0LCBvLm1fYm94UmVmbGVjdCkKKyAg
ICAgICAgJiYgYXJlRXF1aXZhbGVudChtX2FuaW1hdGlvbnMuZ2V0KCksIG8ubV9hbmltYXRpb25z
LmdldCgpKQorICAgICAgICAmJiBhcmVFcXVpdmFsZW50KG1fdHJhbnNpdGlvbnMuZ2V0KCksIG8u
bV90cmFuc2l0aW9ucy5nZXQoKSkKICAgICAgICAgJiYgbV9tYXNrID09IG8ubV9tYXNrCiAgICAg
ICAgICYmIG1fbWFza0JveEltYWdlID09IG8ubV9tYXNrQm94SW1hZ2UKICAgICAgICAgJiYgbV9w
YWdlU2l6ZSA9PSBvLm1fcGFnZVNpemUKQEAgLTMwNSw2NCArMzA2LDYgQEAgYm9vbCBTdHlsZVJh
cmVOb25Jbmhlcml0ZWREYXRhOjpjb250ZW50RGF0YUVxdWl2YWxlbnQoY29uc3QgU3R5bGVSYXJl
Tm9uSW5oZXJpdGUKICAgICByZXR1cm4gIWEgJiYgIWI7CiB9CiAKLWJvb2wgU3R5bGVSYXJlTm9u
SW5oZXJpdGVkRGF0YTo6Y291bnRlckRhdGFFcXVpdmFsZW50KGNvbnN0IFN0eWxlUmFyZU5vbklu
aGVyaXRlZERhdGEmIG8pIGNvbnN0Ci17Ci0gICAgaWYgKG1fY291bnRlckRpcmVjdGl2ZXMuZ2V0
KCkgPT0gby5tX2NvdW50ZXJEaXJlY3RpdmVzLmdldCgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgCi0gICAgaWYgKG1fY291bnRlckRpcmVjdGl2ZXMgJiYgby5tX2NvdW50ZXJEaXJl
Y3RpdmVzICYmICptX2NvdW50ZXJEaXJlY3RpdmVzID09ICpvLm1fY291bnRlckRpcmVjdGl2ZXMp
Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFN0
eWxlUmFyZU5vbkluaGVyaXRlZERhdGE6OnNoYWRvd0RhdGFFcXVpdmFsZW50KGNvbnN0IFN0eWxl
UmFyZU5vbkluaGVyaXRlZERhdGEmIG8pIGNvbnN0Ci17Ci0gICAgaWYgKCghbV9ib3hTaGFkb3cg
JiYgby5tX2JveFNoYWRvdykgfHwgKG1fYm94U2hhZG93ICYmICFvLm1fYm94U2hhZG93KSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtX2JveFNoYWRvdyAmJiBvLm1fYm94U2hhZG93
ICYmICgqbV9ib3hTaGFkb3cgIT0gKm8ubV9ib3hTaGFkb3cpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0
YTo6d2lsbENoYW5nZURhdGFFcXVpdmFsZW50KGNvbnN0IFN0eWxlUmFyZU5vbkluaGVyaXRlZERh
dGEmIG8pIGNvbnN0Ci17Ci0gICAgaWYgKG1fd2lsbENoYW5nZSAhPSBvLm1fd2lsbENoYW5nZSkg
ewotICAgICAgICBpZiAoIW1fd2lsbENoYW5nZSB8fCAhby5tX3dpbGxDaGFuZ2UpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiAqbV93aWxsQ2hhbmdlID09ICpvLm1f
d2lsbENoYW5nZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgU3R5bGVSYXJl
Tm9uSW5oZXJpdGVkRGF0YTo6cmVmbGVjdGlvbkRhdGFFcXVpdmFsZW50KGNvbnN0IFN0eWxlUmFy
ZU5vbkluaGVyaXRlZERhdGEmIG8pIGNvbnN0Ci17Ci0gICAgaWYgKG1fYm94UmVmbGVjdCAhPSBv
Lm1fYm94UmVmbGVjdCkgewotICAgICAgICBpZiAoIW1fYm94UmVmbGVjdCB8fCAhby5tX2JveFJl
ZmxlY3QpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiAqbV9ib3hS
ZWZsZWN0ID09ICpvLm1fYm94UmVmbGVjdDsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWJvb2wgU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YTo6YW5pbWF0aW9uRGF0YUVxdWl2YWxlbnQo
Y29uc3QgU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YSYgbykgY29uc3QKLXsKLSAgICBpZiAoKCFt
X2FuaW1hdGlvbnMgJiYgby5tX2FuaW1hdGlvbnMpIHx8IChtX2FuaW1hdGlvbnMgJiYgIW8ubV9h
bmltYXRpb25zKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtX2FuaW1hdGlvbnMg
JiYgby5tX2FuaW1hdGlvbnMgJiYgKCptX2FuaW1hdGlvbnMgIT0gKm8ubV9hbmltYXRpb25zKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFN0eWxl
UmFyZU5vbkluaGVyaXRlZERhdGE6OnRyYW5zaXRpb25EYXRhRXF1aXZhbGVudChjb25zdCBTdHls
ZVJhcmVOb25Jbmhlcml0ZWREYXRhJiBvKSBjb25zdAotewotICAgIGlmICgoIW1fdHJhbnNpdGlv
bnMgJiYgby5tX3RyYW5zaXRpb25zKSB8fCAobV90cmFuc2l0aW9ucyAmJiAhby5tX3RyYW5zaXRp
b25zKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtX3RyYW5zaXRpb25zICYmIG8u
bV90cmFuc2l0aW9ucyAmJiAoKm1fdHJhbnNpdGlvbnMgIT0gKm8ubV90cmFuc2l0aW9ucykpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogYm9vbCBTdHlsZVJh
cmVOb25Jbmhlcml0ZWREYXRhOjpoYXNGaWx0ZXJzKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9m
aWx0ZXIuZ2V0KCkgJiYgIW1fZmlsdGVyLT5tX29wZXJhdGlvbnMuaXNFbXB0eSgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFyZU5vbkluaGVyaXRl
ZERhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVOb25Jbmhl
cml0ZWREYXRhLmgKaW5kZXggZjYxNzUyZGE5YzU3YjMyYzM0ZWNjODIwNGU3ZGU5NGIxMTJkNzE3
NS4uN2FkOTc2M2FhZjA0YmY2ODQ5Zjk2MTg1YjM5ODViNmUwMGY3NzkwMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJlTm9uSW5oZXJp
dGVkRGF0YS5oCkBAIC05MiwxMiArOTIsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IFN0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEmIG8pIGNvbnN0IHsgcmV0dXJuICEoKnRo
aXMgPT0gbyk7IH0KIAogICAgIGJvb2wgY29udGVudERhdGFFcXVpdmFsZW50KGNvbnN0IFN0eWxl
UmFyZU5vbkluaGVyaXRlZERhdGEmKSBjb25zdDsKLSAgICBib29sIGNvdW50ZXJEYXRhRXF1aXZh
bGVudChjb25zdCBTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhJikgY29uc3Q7Ci0gICAgYm9vbCBz
aGFkb3dEYXRhRXF1aXZhbGVudChjb25zdCBTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhJikgY29u
c3Q7Ci0gICAgYm9vbCB3aWxsQ2hhbmdlRGF0YUVxdWl2YWxlbnQoY29uc3QgU3R5bGVSYXJlTm9u
SW5oZXJpdGVkRGF0YSYpIGNvbnN0OwotICAgIGJvb2wgcmVmbGVjdGlvbkRhdGFFcXVpdmFsZW50
KGNvbnN0IFN0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEmKSBjb25zdDsKLSAgICBib29sIGFuaW1h
dGlvbkRhdGFFcXVpdmFsZW50KGNvbnN0IFN0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEmKSBjb25z
dDsKLSAgICBib29sIHRyYW5zaXRpb25EYXRhRXF1aXZhbGVudChjb25zdCBTdHlsZVJhcmVOb25J
bmhlcml0ZWREYXRhJikgY29uc3Q7CisKICAgICBib29sIGhhc0ZpbHRlcnMoKSBjb25zdDsKICNp
ZiBFTkFCTEUoRklMVEVSU19MRVZFTF8yKQogICAgIGJvb2wgaGFzQmFja2Ryb3BGaWx0ZXJzKCkg
Y29uc3Q7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262971</attachid>
            <date>2015-10-12 22:12:05 -0700</date>
            <delta_ts>2015-10-12 22:56:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150022-20151012221129.patch</filename>
            <type>text/plain</type>
            <size>37095</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkwODQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGVmNjEyNzViMWZjMDc4NjJiZDM1MTUz
Y2ZjMTMwMmM3MmU1MDU0MGYuLjg3MzFkMTgxZGU2OTlkZTc4OTdlNjViMTE2YTRkNDE5YmU2YTBm
MWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTUtMTAtMTIgIFNpbW9uIEZyYXNlciAgPHNpbW9u
LmZyYXNlckBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIGhlbHBlciBmdW50aW9uIGZvciBjaGVj
a2luZyBwb2ludGVyIGVxdWl2YWxlbmN5IGFuZCB1c2UgaXQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDAyMgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgQWRkIFBvaW50ZXJDb21wYXJpc29u
Lmggd2hpY2ggY29udGFpbnMgdGhlIHRlbXBsYXRlZCBwb2ludGVyIGNvbXBhcmlzb24KKyAgICAg
ICAgZnVuY3Rpb24uCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiB3dGYvUG9pbnRlckNvbXBhcmlzb24uaDogQWRkZWQuCisgICAgICAgIChXVEY6
OmFyZVBvaW50aW5nVG9FcXVhbERhdGEpOgorCiAyMDE1LTEwLTEwICBEYW4gQmVybnN0ZWluICA8
bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgW2lPU10gUmVtb3ZlIHVubmVjZXNzYXJ5IGlPUyB2
ZXJzaW9uIGNoZWNrcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDJhNDY3OTFlNTdlZTg2MzE1N2RjODY0MDQxMjRi
ZDUxY2Q0MjEwNWQuLjdmNzJhOTc1NDhmNDc0N2M2MTBjOTc4MDU3OTQ2OGVjY2EzZTA0MzUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKQEAgLTEsMyArMSw3MCBAQAorMjAxNS0xMC0xMiAgU2ltb24gRnJhc2VyICA8c2lt
b24uZnJhc2VyQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgaGVscGVyIGZ1bnRpb24gZm9yIGNo
ZWNraW5nIHBvaW50ZXIgZXF1aXZhbGVuY3kgYW5kIHVzZSBpdAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwMDIyCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQSBjb21tb24gcGF0dGVybiBpbiBXZWJDb3Jl
IGNvZGUgaXMgdG8gY2hlY2sgZm9yIGVxdWl2YWxlbmN5IG9mIHR3byBwb2ludGVycywKKyAgICAg
ICAgZWl0aGVyIGJvdGggbnVsbCwgb3IgYm90aCBub24tbnVsbCBhbmQgd2l0aCBlcXVhbCB2YWx1
ZXMuIFRoaXMgd2FzIHdyaXR0ZW4gaW4KKyAgICAgICAgc2V2ZXJhbCBkaWZmZXJlbnQgd2F5cyBp
biBkaWZmZXJlbnQgcGxhY2VzLgorICAgICAgICAKKyAgICAgICAgQWRkIGFyZVBvaW50aW5nVG9F
cXVhbERhdGEoKSB0byBzdGFuZGFyZGl6ZSB0aGlzIHBhdHRlcm4uCisKKyAgICAgICAgVGhpcyBv
YnZpYXRlcyB0aGUgbmVlZCBmb3IgU3R5bGVJbWFnZTo6aW1hZ2VzRXF1aXZhbGVudCgpLCBjb3Vu
dGVyRGF0YUVxdWl2YWxlbnQoKQorICAgICAgICBldGMuCisgICAgICAgIAorICAgICAgICBBbHNv
IGNoYW5nZSBzb21lIGNvbXBhcmlzb25zIG9mIERhdGFSZWY8PiB3aGljaCBjaGVja2VkIHRoZSBw
b2ludGVyIGFuZCB0aGVuIHRoZQorICAgICAgICB2YWx1ZXMgdG8gdXNlIERhdGFSZWY8Pjo6b3Bl
cmF0b3I9PSB3aGljaCBkb2VzIHRoZSBzYW1lIHRoaW5nLiBDb21wYXJpc29ucyBvZgorICAgICAg
ICBtX2dyaWQgYW5kIG1fZ3JpZEl0ZW0gb25seSBjaGVja2VkIHBvaW50ZXIgZXF1YWxpdHksIHNv
IHRoaXMgaXMgcHJvYmFibHkgYSBidWcgZml4IHRoZXJlLgorCisgICAgICAgICogcGFnZS9hbmlt
YXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwOiBpZiAoKCFhICYmICFiKSB8fCBhID09IGIp
IGlzIHJlZHVuZGFudCBzbyBmaXgsCisgICAgICAgIGFuZCBhZGQgY2hlY2tzIGZvciBhIGFuZCBi
IFJlbmRlclN0eWxlKiBmaXJzdC4KKyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5V3JhcHBlckdl
dHRlcjo6ZXF1YWxzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlSW1hZ2VQcm9wZXJ0eVdyYXBw
ZXI6OmVxdWFscyk6CisgICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0eVdyYXBwZXJTaGFkb3c6OmVx
dWFscyk6CisgICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0eVdyYXBwZXJNYXliZUludmFsaWRDb2xv
cjo6ZXF1YWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGxMYXllclByb3BlcnR5V3JhcHBlckdl
dHRlcjo6ZXF1YWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGxMYXllclN0eWxlSW1hZ2VQcm9w
ZXJ0eVdyYXBwZXI6OmVxdWFscyk6CisgICAgICAgIChXZWJDb3JlOjpGaWxsTGF5ZXJzUHJvcGVy
dHlXcmFwcGVyOjplcXVhbHMpOgorICAgICAgICAoV2ViQ29yZTo6U2hvcnRoYW5kUHJvcGVydHlX
cmFwcGVyOjplcXVhbHMpOgorICAgICAgICAoV2ViQ29yZTo6UHJvcGVydHlXcmFwcGVyRmxleDo6
ZXF1YWxzKToKKyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5V3JhcHBlclNWR1BhaW50OjplcXVh
bHMpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjplcXVhbElnbm9yaW5nSGVhZGVyRmllbGRzKToKKyAgICAgICAg
KiByZW5kZXJpbmcvc3R5bGUvRmlsbExheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGxM
YXllcjo6b3BlcmF0b3I9PSk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL05pbmVQaWVjZUlt
YWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5pbmVQaWVjZUltYWdlRGF0YTo6b3BlcmF0b3I9
PSk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcDogU29tZSBudWxs
cHRyIGNsZWFudXAuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6Z2V0Q2FjaGVkUHNl
dWRvU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OmFkZENhY2hlZFBzZXVk
b1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpjaGFuZ2VBZmZlY3RzVmlz
dWFsT3ZlcmZsb3cpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OmNoYW5nZVJlcXVp
cmVzTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpjaGFuZ2VSZXF1aXJl
c0xheWVyUmVwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6c2V0V2lsbENo
YW5nZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1NWR1JlbmRlclN0eWxlRGVmcy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoYWRvd1NWR0RhdGE6Om9wZXJhdG9yPT0pOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdHlsZS9TaGFkb3dEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNoYWRvd0RhdGE6Om9wZXJhdG9yPT0pOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9TdHls
ZUltYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUltYWdlOjppbWFnZXNFcXVpdmFsZW50
KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJlSW5oZXJpdGVk
RGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJhcmVJbmhlcml0ZWREYXRhOjpvcGVy
YXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OmN1cnNvckRhdGFFcXVpdmFsZW50KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OnF1b3Rlc0RhdGFFcXVpdmFsZW50KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUmFyZUluaGVyaXRlZERhdGE6OnNoYWRvd0RhdGFFcXVpdmFs
ZW50KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJlSW5oZXJp
dGVkRGF0YS5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVOb25Jbmhlcml0
ZWREYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmFyZU5vbkluaGVyaXRlZERhdGE6
Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0
YTo6Y291bnRlckRhdGFFcXVpdmFsZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmFyZU5vbkluaGVyaXRlZERhdGE6OnNoYWRvd0RhdGFFcXVpdmFsZW50KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmFyZU5vbkluaGVyaXRlZERhdGE6OndpbGxDaGFuZ2VE
YXRhRXF1aXZhbGVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJhcmVOb25J
bmhlcml0ZWREYXRhOjpyZWZsZWN0aW9uRGF0YUVxdWl2YWxlbnQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YTo6YW5pbWF0aW9uRGF0YUVxdWl2
YWxlbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSYXJlTm9uSW5oZXJpdGVk
RGF0YTo6dHJhbnNpdGlvbkRhdGFFcXVpdmFsZW50KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5k
ZXJpbmcvc3R5bGUvU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5oOgorCiAyMDE1LTEwLTEwICBB
bnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgSW5zZXJ0
aW9uUG9pbnQgYW5kIENvbnRlbnREaXN0cmlidXRvcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9X
VEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKaW5kZXggMzM2MDYyZTM1MGI5OGEwYjRjN2M3NWI2NWNhNGI5NGZlZGNj
MzI5MS4uYTkzYWNkZTExMzMxMzRkYmMxMTczMDRjOWVkYmJiOGFmN2NlOGE5YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2Uv
V1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC01MSw2ICs1MSw3IEBACiAJCTBG
RUIzRENGMUJCNUQ2ODQwMDlEN0FBRCAvKiBTaGFyZWRUYXNrLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVCM0RDRTFCQjVENjg0MDA5RDdBQUQgLyog
U2hhcmVkVGFzay5oICovOyB9OwogCQkwRkVCM0REMTFCQjczNjZCMDA5RDdBQUQgLyogUGFyYWxs
ZWxWZWN0b3JJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZFQjNERDAxQkI3MzY2QjAwOUQ3QUFEIC8qIFBhcmFsbGVsVmVjdG9ySXRlcmF0
b3IuaCAqLzsgfTsKIAkJMEZFRDY3QjYxQjIyRDREODAwNjZDRTE1IC8qIFRpbnlQdHJTZXQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUQ2N0I1MUIy
MkQ0RDgwMDY2Q0UxNSAvKiBUaW55UHRyU2V0LmggKi87IH07CisJCTBGRjg2MDk1MUJDQ0JENzQw
MDQ1MTI3RiAvKiBQb2ludGVyQ29tcGFyaXNvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGODYwOTQxQkNDQkQ3NDAwNDUxMjdGIC8qIFBvaW50ZXJD
b21wYXJpc29uLmggKi87IH07CiAJCTBGRkYxOURDMUJCMzM0RUIwMDg4NkQ5MSAvKiBQYXJhbGxl
bEhlbHBlclBvb2wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZGRjE5REExQkIzMzRFQjAwODg2RDkxIC8qIFBhcmFsbGVsSGVscGVyUG9vbC5jcHAg
Ki87IH07CiAJCTBGRkYxOUREMUJCMzM0RUIwMDg4NkQ5MSAvKiBQYXJhbGxlbEhlbHBlclBvb2wu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkYxOURC
MUJCMzM0RUIwMDg4NkQ5MSAvKiBQYXJhbGxlbEhlbHBlclBvb2wuaCAqLzsgfTsKIAkJMTQwMjJG
NDExOEY1QzNGQzAwN0ZGMEVCIC8qIGxpYmJtYWxsb2MuYSBpbiBGcmFtZXdvcmtzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MDIyRjQwMThGNUMzRkMwMDdGRjBFQiAvKiBs
aWJibWFsbG9jLmEgKi87IH07CkBAIC0zNDQsNiArMzQ1LDcgQEAKIAkJMEZFQjNEQ0UxQkI1RDY4
NDAwOUQ3QUFEIC8qIFNoYXJlZFRhc2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU2hhcmVkVGFzay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVCM0REMDFC
QjczNjZCMDA5RDdBQUQgLyogUGFyYWxsZWxWZWN0b3JJdGVyYXRvci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBQYXJhbGxlbFZlY3Rvckl0ZXJhdG9yLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGRUQ2N0I1MUIyMkQ0RDgwMDY2Q0UxNSAvKiBUaW55UHRyU2V0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRpbnlQdHJTZXQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGODYwOTQxQkNDQkQ3NDAwNDUxMjdGIC8qIFBvaW50
ZXJDb21wYXJpc29uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvaW50ZXJD
b21wYXJpc29uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRkYxOURBMUJCMzM0
RUIwMDg4NkQ5MSAvKiBQYXJhbGxlbEhlbHBlclBvb2wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUGFyYWxsZWxIZWxwZXJQb29sLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZGRjE5REIxQkIzMzRFQjAwODg2RDkxIC8qIFBhcmFsbGVsSGVscGVy
UG9vbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXJhbGxlbEhlbHBlclBv
b2wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQwMjJGNDAxOEY1QzNGQzAwN0ZG
MEVCIC8qIGxpYmJtYWxsb2MuYSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IGFyY2hpdmUuYXI7IHBhdGggPSBsaWJibWFsbG9jLmE7IHNvdXJjZVRyZWUg
PSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CkBAIC04MzcsNiArODM5LDcgQEAKIAkJCQkwRjgyNEE2
NTFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5oICovLAogCQkJCUE4QTQ3MkVEMTUxQTgy
NUIwMDQxMjNGRiAvKiBQYXNzUmVmUHRyLmggKi8sCiAJCQkJQTg3NkRCRDcxNTE4MTZFNTAwREFE
Qjk1IC8qIFBsYXRmb3JtLmggKi8sCisJCQkJMEZGODYwOTQxQkNDQkQ3NDAwNDUxMjdGIC8qIFBv
aW50ZXJDb21wYXJpc29uLmggKi8sCiAJCQkJMEY5RDMzNUQxNjVEQkE3MzAwNUFEMzg3IC8qIFBy
aW50U3RyZWFtLmNwcCAqLywKIAkJCQkwRjlEMzM1RTE2NURCQTczMDA1QUQzODcgLyogUHJpbnRT
dHJlYW0uaCAqLywKIAkJCQkwRkM0NDg4MjE2RkU5RkUxMDA4NDRCRTkgLyogUHJvY2Vzc0lELmgg
Ki8sCkBAIC0xMjA4LDYgKzEyMTEsNyBAQAogCQkJCUE4QTQ3NDIwMTUxQTgyNUIwMDQxMjNGRiAv
KiBTZW50aW5lbExpbmtlZExpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDIyMTUxQTgy
NUIwMDQxMjNGRiAvKiBTSEExLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQyMzE1MUE4MjVC
MDA0MTIzRkYgLyogU2ltcGxlU3RhdHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRjg2MDk1MUJD
Q0JENzQwMDQ1MTI3RiAvKiBQb2ludGVyQ29tcGFyaXNvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QThBNDc0MjQxNTFBODI1QjAwNDEyM0ZGIC8qIFNpbmdseUxpbmtlZExpc3QuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE3NDg3NDUzMTdBMEJEQUUwMEZBMDRDQiAvKiBTaXhDaGFyYWN0ZXJIYXNoLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQyNjE1MUE4MjVCMDA0MTIzRkYgLyogU3BlY3RydW0u
aCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUG9pbnRlckNvbXBh
cmlzb24uaCBiL1NvdXJjZS9XVEYvd3RmL1BvaW50ZXJDb21wYXJpc29uLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZmU2NDI5N2RmOWFmNThiNmNmYzJmZmNjNTRkYWM3OGVjYjFjYmE4NgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XVEYvd3RmL1BvaW50ZXJDb21wYXJpc29uLmgKQEAgLTAsMCArMSw0MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgV1RGX1BvaW50ZXJDb21wYXJpc29uX2gKKyNkZWZpbmUgV1RG
X1BvaW50ZXJDb21wYXJpc29uX2gKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IGlubGluZSBib29sIGFyZVBvaW50aW5nVG9FcXVhbERhdGEoY29uc3QgVCYgYSwgY29u
c3QgVCYgYikKK3sgCisgICAgcmV0dXJuIGEgPT0gYiB8fCAoYSAmJiBiICYmICphID09ICpiKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6YXJlUG9pbnRpbmdUb0VxdWFs
RGF0YTsKKworI2VuZGlmIC8vIFdURl9Qb2ludGVyQ29tcGFyaXNvbl9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAKaW5k
ZXggMjkzMDAyOGM1ZjU5NTQzNzAwZGU2NzE2MjJkNDhlMWMwNjcwMGE5OS4uMGE4NmY5YWE2NWIz
YzBiY2YxNjdjYmQyYjlhNTU0NWRhOWQ1ZjhlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcApAQCAtNTQsNiArNTQs
NyBAQAogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2lu
Y2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9Qb2ludGVyQ29tcGFyaXNv
bi5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTQwMCw5ICs0MDEsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgZXF1YWxzKGNv
bnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3QKICAgICB7Ci0g
ICAgICAgIC8vIElmIHRoZSBzdHlsZSBwb2ludGVycyBhcmUgdGhlIHNhbWUsIGRvbid0IGJvdGhl
ciBkb2luZyB0aGUgdGVzdC4KLSAgICAgICAgLy8gSWYgZWl0aGVyIGlzIG51bGwsIHJldHVybiBm
YWxzZS4gSWYgYm90aCBhcmUgbnVsbCwgcmV0dXJuIHRydWUuCi0gICAgICAgIGlmICgoIWEgJiYg
IWIpIHx8IGEgPT0gYikKKyAgICAgICAgaWYgKGEgPT0gYikKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICBpZiAoIWEgfHwgIWIpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBA
IC01MDAsOCArNDk5LDYgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIGVxdWFscyhjb25z
dCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0CiAgICAgewotICAg
ICAgIC8vIElmIHRoZSBzdHlsZSBwb2ludGVycyBhcmUgdGhlIHNhbWUsIGRvbid0IGJvdGhlciBk
b2luZyB0aGUgdGVzdC4KLSAgICAgICAvLyBJZiBlaXRoZXIgaXMgbnVsbCwgcmV0dXJuIGZhbHNl
LiBJZiBib3RoIGFyZSBudWxsLCByZXR1cm4gdHJ1ZS4KICAgICAgICBpZiAoYSA9PSBiKQogICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICBpZiAoIWEgfHwgIWIpCkBAIC01MDksNyArNTA2
LDcgQEAgcHVibGljOgogCiAgICAgICAgIFN0eWxlSW1hZ2UqIGltYWdlQSA9IChhLT4qbV9nZXR0
ZXIpKCk7CiAgICAgICAgIFN0eWxlSW1hZ2UqIGltYWdlQiA9IChiLT4qbV9nZXR0ZXIpKCk7Ci0g
ICAgICAgIHJldHVybiBTdHlsZUltYWdlOjppbWFnZXNFcXVpdmFsZW50KGltYWdlQSwgaW1hZ2VC
KTsKKyAgICAgICAgcmV0dXJuIGFyZVBvaW50aW5nVG9FcXVhbERhdGEoaW1hZ2VBLCBpbWFnZUIp
OwogICAgIH0KIH07CiAKQEAgLTYzOCw2ICs2MzUsMTEgQEAgcHVibGljOgogCiAgICAgdmlydHVh
bCBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIp
IGNvbnN0CiAgICAgeworICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIGlmICghYSB8fCAhYikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwog
ICAgICAgICBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3dBID0gKGEtPiptX2dldHRlcikoKTsKICAg
ICAgICAgY29uc3QgU2hhZG93RGF0YSogc2hhZG93QiA9IChiLT4qbV9nZXR0ZXIpKCk7CiAKQEAg
LTc1NCw2ICs3NTYsMTEgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIGVxdWFscyhjb25z
dCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0CiAgICAgeworICAg
ICAgICBpZiAoYSA9PSBiKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICgh
YSB8fCAhYikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgICAgICBDb2xvciBmcm9t
Q29sb3IgPSAoYS0+Km1fZ2V0dGVyKSgpOwogICAgICAgICBDb2xvciB0b0NvbG9yID0gKGItPipt
X2dldHRlcikoKTsKIApAQCAtODQ4LDExICs4NTUsOSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFs
IGJvb2wgZXF1YWxzKGNvbnN0IEZpbGxMYXllciogYSwgY29uc3QgRmlsbExheWVyKiBiKSBjb25z
dAogICAgIHsKLSAgICAgICAvLyBJZiB0aGUgc3R5bGUgcG9pbnRlcnMgYXJlIHRoZSBzYW1lLCBk
b24ndCBib3RoZXIgZG9pbmcgdGhlIHRlc3QuCi0gICAgICAgLy8gSWYgZWl0aGVyIGlzIG51bGws
IHJldHVybiBmYWxzZS4gSWYgYm90aCBhcmUgbnVsbCwgcmV0dXJuIHRydWUuCi0gICAgICAgaWYg
KCghYSAmJiAhYikgfHwgYSA9PSBiKQotICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICBp
ZiAoIWEgfHwgIWIpCisgICAgICAgIGlmIChhID09IGIpCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgaWYgKCFhIHx8ICFiKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICByZXR1cm4gKGEtPiptX2dldHRlcikoKSA9PSAoYi0+Km1fZ2V0dGVyKSgpOwogICAgIH0K
QEAgLTkwOSw4ICs5MTQsNiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgZXF1YWxzKGNv
bnN0IEZpbGxMYXllciogYSwgY29uc3QgRmlsbExheWVyKiBiKSBjb25zdAogICAgIHsKLSAgICAg
ICAvLyBJZiB0aGUgc3R5bGUgcG9pbnRlcnMgYXJlIHRoZSBzYW1lLCBkb24ndCBib3RoZXIgZG9p
bmcgdGhlIHRlc3QuCi0gICAgICAgLy8gSWYgZWl0aGVyIGlzIG51bGwsIHJldHVybiBmYWxzZS4g
SWYgYm90aCBhcmUgbnVsbCwgcmV0dXJuIHRydWUuCiAgICAgICAgaWYgKGEgPT0gYikKICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgaWYgKCFhIHx8ICFiKQpAQCAtOTE4LDcgKzkyMSw3
IEBAIHB1YmxpYzoKIAogICAgICAgICBTdHlsZUltYWdlKiBpbWFnZUEgPSAoYS0+Km1fZ2V0dGVy
KSgpOwogICAgICAgICBTdHlsZUltYWdlKiBpbWFnZUIgPSAoYi0+Km1fZ2V0dGVyKSgpOwotICAg
ICAgICByZXR1cm4gU3R5bGVJbWFnZTo6aW1hZ2VzRXF1aXZhbGVudChpbWFnZUEsIGltYWdlQik7
CisgICAgICAgIHJldHVybiBhcmVQb2ludGluZ1RvRXF1YWxEYXRhKGltYWdlQSwgaW1hZ2VCKTsK
ICAgICB9CiB9OwogCkBAIC05NTcsNiArOTYwLDExIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwg
Ym9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBj
b25zdAogICAgIHsKKyAgICAgICAgaWYgKGEgPT0gYikKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICBpZiAoIWEgfHwgIWIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKICAg
ICAgICAgY29uc3QgRmlsbExheWVyKiBmcm9tTGF5ZXIgPSAoYS0+Km1fbGF5ZXJzR2V0dGVyKSgp
OwogICAgICAgICBjb25zdCBGaWxsTGF5ZXIqIHRvTGF5ZXIgPSAoYi0+Km1fbGF5ZXJzR2V0dGVy
KSgpOwogCkBAIC0xMDA1LDYgKzEwMTMsMTEgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29s
IGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0
CiAgICAgeworICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIGlmICghYSB8fCAhYikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgICAg
ICBmb3IgKGF1dG8mIHdyYXBwZXIgOiBtX3Byb3BlcnR5V3JhcHBlcnMpIHsKICAgICAgICAgICAg
IGlmICghd3JhcHBlci0+ZXF1YWxzKGEsIGIpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKQEAgLTEwMzQsOSArMTA0Nyw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBlcXVh
bHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdAogICAg
IHsKLSAgICAgICAgLy8gSWYgdGhlIHN0eWxlIHBvaW50ZXJzIGFyZSB0aGUgc2FtZSwgZG9uJ3Qg
Ym90aGVyIGRvaW5nIHRoZSB0ZXN0LgotICAgICAgICAvLyBJZiBlaXRoZXIgaXMgbnVsbCwgcmV0
dXJuIGZhbHNlLiBJZiBib3RoIGFyZSBudWxsLCByZXR1cm4gdHJ1ZS4KLSAgICAgICAgaWYgKCgh
YSAmJiAhYikgfHwgYSA9PSBiKQorICAgICAgICBpZiAoYSA9PSBiKQogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgIGlmICghYSB8fCAhYikKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKQEAgLTEwNjUsNiArMTA3NiwxMSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgZXF1
YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3QKICAg
ICB7CisgICAgICAgIGlmIChhID09IGIpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgaWYgKCFhIHx8ICFiKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgICAgIGlm
ICgoYS0+Km1fcGFpbnRUeXBlR2V0dGVyKSgpICE9IChiLT4qbV9wYWludFR5cGVHZXR0ZXIpKCkp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwCmluZGV4IGQ0MWViYjEw
ODAwNjFmNmFkZWZiYzgyN2FjN2JjMjI5NzkxZjIyZjcuLjAwNTk3ZWRkZGJmMjFkZDNmNmU5NTBm
MTFkZDA1YWVkMWNlNDJjOTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcApAQCAtMjgsNiArMjgsNyBAQAogCiAj
aW5jbHVkZSAiSFRUUEhlYWRlck5hbWVzLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0Lmgi
CisjaW5jbHVkZSA8d3RmL1BvaW50ZXJDb21wYXJpc29uLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtNTAwLDE4ICs1MDEsNyBAQCBib29sIGVxdWFsSWdub3JpbmdIZWFkZXJGaWVsZHMo
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0QmFzZSYgYSwgY29uc3QgUmVzb3VyY2VSZXF1ZQogICAgIGlm
IChhLnJlcXVlc3RlcigpICE9IGIucmVxdWVzdGVyKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIEZvcm1EYXRhKiBmb3JtRGF0YUEgPSBhLmh0dHBCb2R5KCk7Ci0gICAgRm9ybURhdGEq
IGZvcm1EYXRhQiA9IGIuaHR0cEJvZHkoKTsKLSAgICAKLSAgICBpZiAoIWZvcm1EYXRhQSkKLSAg
ICAgICAgcmV0dXJuICFmb3JtRGF0YUI7Ci0gICAgaWYgKCFmb3JtRGF0YUIpCi0gICAgICAgIHJl
dHVybiAhZm9ybURhdGFBOwotICAgIAotICAgIGlmICgqZm9ybURhdGFBICE9ICpmb3JtRGF0YUIp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1
cm4gYXJlUG9pbnRpbmdUb0VxdWFsRGF0YShhLmh0dHBCb2R5KCksIGIuaHR0cEJvZHkoKSk7CiB9
CiAKIGJvb2wgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6Y29tcGFyZShjb25zdCBSZXNvdXJjZVJlcXVl
c3QmIGEsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgYikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9GaWxsTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL0ZpbGxMYXllci5jcHAKaW5kZXggMzdkYWI1ODA2ZjMzMTY0MTBiYzlkMDAxZjNl
ODhhY2NkOTFjYjUyMi4uNDUyNGIwMDY0ZTg0MmFhNjJkNmVlMWQwMWIxNmVmMjFhZmVhOGFmZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0ZpbGxMYXllci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0ZpbGxMYXllci5jcHAKQEAgLTIy
LDYgKzIyLDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGaWxsTGF5ZXIuaCIK
IAorI2luY2x1ZGUgPHd0Zi9Qb2ludGVyQ29tcGFyaXNvbi5oPgorCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIHN0cnVjdCBTYW1lU2l6ZUFzRmlsbExheWVyIHsKQEAgLTE1Miw3ICsxNTQsNyBAQCBi
b29sIEZpbGxMYXllcjo6b3BlcmF0b3I9PShjb25zdCBGaWxsTGF5ZXImIG8pIGNvbnN0CiB7CiAg
ICAgLy8gV2UgZG8gbm90IGNoZWNrIHRoZSAiaXNTZXQiIGJvb2xlYW5zIGZvciBlYWNoIHByb3Bl
cnR5LCBzaW5jZSB0aG9zZSBhcmUgb25seSB1c2VkIGR1cmluZyBpbml0aWFsIGNvbnN0cnVjdGlv
bgogICAgIC8vIHRvIHByb3BhZ2F0ZSBwYXR0ZXJucyBpbnRvIGxheWVycy4gQWxsIGxheWVyIGNv
bXBhcmlzb25zIGhhcHBlbiBhZnRlciB2YWx1ZXMgaGF2ZSBhbGwgYmVlbiBmaWxsZWQgaW4gYW55
d2F5LgotICAgIHJldHVybiBTdHlsZUltYWdlOjppbWFnZXNFcXVpdmFsZW50KG1faW1hZ2UuZ2V0
KCksIG8ubV9pbWFnZS5nZXQoKSkgJiYgbV94UG9zaXRpb24gPT0gby5tX3hQb3NpdGlvbiAmJiBt
X3lQb3NpdGlvbiA9PSBvLm1feVBvc2l0aW9uCisgICAgcmV0dXJuIGFyZVBvaW50aW5nVG9FcXVh
bERhdGEobV9pbWFnZS5nZXQoKSwgby5tX2ltYWdlLmdldCgpKSAmJiBtX3hQb3NpdGlvbiA9PSBv
Lm1feFBvc2l0aW9uICYmIG1feVBvc2l0aW9uID09IG8ubV95UG9zaXRpb24KICAgICAgICAgJiYg
bV9iYWNrZ3JvdW5kWE9yaWdpbiA9PSBvLm1fYmFja2dyb3VuZFhPcmlnaW4gJiYgbV9iYWNrZ3Jv
dW5kWU9yaWdpbiA9PSBvLm1fYmFja2dyb3VuZFlPcmlnaW4KICAgICAgICAgJiYgbV9hdHRhY2ht
ZW50ID09IG8ubV9hdHRhY2htZW50ICYmIG1fY2xpcCA9PSBvLm1fY2xpcCAmJiBtX2NvbXBvc2l0
ZSA9PSBvLm1fY29tcG9zaXRlCiAgICAgICAgICYmIG1fYmxlbmRNb2RlID09IG8ubV9ibGVuZE1v
ZGUgJiYgbV9vcmlnaW4gPT0gby5tX29yaWdpbiAmJiBtX3JlcGVhdFggPT0gby5tX3JlcGVhdFgK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9OaW5lUGllY2VJbWFn
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvTmluZVBpZWNlSW1hZ2UuY3Bw
CmluZGV4IGIxMzc0ZTA4YjEwODQzNGRhZGU1MzJkNGRmMTIwZGY3NzM0MWQ2ZDQuLjY3MmUxNWI0
ODI2NWY5YTA3MjcxN2ZhMGZmZGU3NmJkZjAyNDExMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9OaW5lUGllY2VJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N0eWxlL05pbmVQaWVjZUltYWdlLmNwcApAQCAtMjgsNiArMjgsNyBAQAog
I2luY2x1ZGUgIkxlbmd0aEZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAj
aW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1BvaW50ZXJDb21w
YXJpc29uLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMjc4LDcgKzI3OSw3IEBAIFJl
ZjxOaW5lUGllY2VJbWFnZURhdGE+IE5pbmVQaWVjZUltYWdlRGF0YTo6Y29weSgpIGNvbnN0CiAK
IGJvb2wgTmluZVBpZWNlSW1hZ2VEYXRhOjpvcGVyYXRvcj09KGNvbnN0IE5pbmVQaWVjZUltYWdl
RGF0YSYgb3RoZXIpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFN0eWxlSW1hZ2U6OmltYWdlc0VxdWl2
YWxlbnQoaW1hZ2UuZ2V0KCksIG90aGVyLmltYWdlLmdldCgpKQorICAgIHJldHVybiBhcmVQb2lu
dGluZ1RvRXF1YWxEYXRhKGltYWdlLCBvdGhlci5pbWFnZSkKICAgICAgICAgJiYgaW1hZ2VTbGlj
ZXMgPT0gb3RoZXIuaW1hZ2VTbGljZXMKICAgICAgICAgJiYgZmlsbCA9PSBvdGhlci5maWxsCiAg
ICAgICAgICYmIGJvcmRlclNsaWNlcyA9PSBvdGhlci5ib3JkZXJTbGljZXMKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCmluZGV4IDJiZGViMTk3YjMz
YWU4NWUwZmJkZWUzMDY5YTdiOTNkOTc0ZjlhMDguLjcyZDIxYjk4YTM4ZTFjMTNmYTBkNTc2ZDVh
YzI0MzdhMzY2Zjk3NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHls
ZS9SZW5kZXJTdHlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1Jl
bmRlclN0eWxlLmNwcApAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgIlN0eWxlU2VsZkFsaWdu
bWVudERhdGEuaCIKICNpbmNsdWRlICJXaWxsQ2hhbmdlRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9N
YXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1BvaW50ZXJDb21wYXJpc29uLmg+CiAjaW5jbHVk
ZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPGFsZ29yaXRobT4KIApAQCAtMzEwLDEw
ICszMTEsMTAgQEAgYm9vbCBSZW5kZXJTdHlsZTo6aGFzVW5pcXVlUHNldWRvU3R5bGUoKSBjb25z
dAogUmVuZGVyU3R5bGUqIFJlbmRlclN0eWxlOjpnZXRDYWNoZWRQc2V1ZG9TdHlsZShQc2V1ZG9J
ZCBwaWQpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2NhY2hlZFBzZXVkb1N0eWxlcyB8fCAhbV9jYWNo
ZWRQc2V1ZG9TdHlsZXMtPnNpemUoKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVy
biBudWxscHRyOwogCiAgICAgaWYgKHN0eWxlVHlwZSgpICE9IE5PUFNFVURPKSAKLSAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtX2NhY2hlZFBzZXVkb1N0eWxlcy0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAgUmVu
ZGVyU3R5bGUqIHBzZXVkb1N0eWxlID0gbV9jYWNoZWRQc2V1ZG9TdHlsZXMtPmF0KGkpLmdldCgp
OwpAQCAtMzIxLDEzICszMjIsMTMgQEAgUmVuZGVyU3R5bGUqIFJlbmRlclN0eWxlOjpnZXRDYWNo
ZWRQc2V1ZG9TdHlsZShQc2V1ZG9JZCBwaWQpIGNvbnN0CiAgICAgICAgICAgICByZXR1cm4gcHNl
dWRvU3R5bGU7CiAgICAgfQogCi0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9
CiAKIFJlbmRlclN0eWxlKiBSZW5kZXJTdHlsZTo6YWRkQ2FjaGVkUHNldWRvU3R5bGUoUGFzc1Jl
ZlB0cjxSZW5kZXJTdHlsZT4gcHNldWRvKQogewogICAgIGlmICghcHNldWRvKQotICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBBU1NFUlQocHNldWRvLT5z
dHlsZVR5cGUoKSA+IE5PUFNFVURPKTsKIApAQCAtNDU5LDExICs0NjAsMTEgQEAgc3RhdGljIGJv
b2wgcG9zaXRpb25DaGFuZ2VJc01vdmVtZW50T25seShjb25zdCBMZW5ndGhCb3gmIGEsIGNvbnN0
IExlbmd0aEJveCYgYiwKIGlubGluZSBib29sIFJlbmRlclN0eWxlOjpjaGFuZ2VBZmZlY3RzVmlz
dWFsT3ZlcmZsb3coY29uc3QgUmVuZGVyU3R5bGUmIG90aGVyKSBjb25zdAogewogICAgIGlmIChy
YXJlTm9uSW5oZXJpdGVkRGF0YS5nZXQoKSAhPSBvdGhlci5yYXJlTm9uSW5oZXJpdGVkRGF0YS5n
ZXQoKQotICAgICAgICAmJiAhcmFyZU5vbkluaGVyaXRlZERhdGEtPnNoYWRvd0RhdGFFcXVpdmFs
ZW50KCpvdGhlci5yYXJlTm9uSW5oZXJpdGVkRGF0YS5nZXQoKSkpCisgICAgICAgICYmICFhcmVQ
b2ludGluZ1RvRXF1YWxEYXRhKHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX2JveFNoYWRvdywgb3Ro
ZXIucmFyZU5vbkluaGVyaXRlZERhdGEtPm1fYm94U2hhZG93KSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKICAgICBpZiAocmFyZUluaGVyaXRlZERhdGEuZ2V0KCkgIT0gb3RoZXIucmFyZUluaGVy
aXRlZERhdGEuZ2V0KCkKLSAgICAgICAgJiYgIXJhcmVJbmhlcml0ZWREYXRhLT5zaGFkb3dEYXRh
RXF1aXZhbGVudCgqb3RoZXIucmFyZUluaGVyaXRlZERhdGEuZ2V0KCkpKQorICAgICAgICAmJiAh
YXJlUG9pbnRpbmdUb0VxdWFsRGF0YShyYXJlSW5oZXJpdGVkRGF0YS0+dGV4dFNoYWRvdywgb3Ro
ZXIucmFyZUluaGVyaXRlZERhdGEtPnRleHRTaGFkb3cpKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
IAogICAgIGlmIChpbmhlcml0ZWRfZmxhZ3MuX3RleHRfZGVjb3JhdGlvbnMgIT0gb3RoZXIuaW5o
ZXJpdGVkX2ZsYWdzLl90ZXh0X2RlY29yYXRpb25zCkBAIC01MjMsMTMgKzUyNCwxMiBAQCBib29s
IFJlbmRlclN0eWxlOjpjaGFuZ2VSZXF1aXJlc0xheW91dChjb25zdCBSZW5kZXJTdHlsZSYgb3Ro
ZXIsIHVuc2lnbmVkJiBjaGFuZwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKIAot
ICAgICAgICBpZiAocmFyZU5vbkluaGVyaXRlZERhdGEtPm1fZGVwcmVjYXRlZEZsZXhpYmxlQm94
LmdldCgpICE9IG90aGVyLnJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX2RlcHJlY2F0ZWRGbGV4aWJs
ZUJveC5nZXQoKQotICAgICAgICAgICAgJiYgKnJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX2RlcHJl
Y2F0ZWRGbGV4aWJsZUJveC5nZXQoKSAhPSAqb3RoZXIucmFyZU5vbkluaGVyaXRlZERhdGEtPm1f
ZGVwcmVjYXRlZEZsZXhpYmxlQm94LmdldCgpKQorICAgICAgICBpZiAocmFyZU5vbkluaGVyaXRl
ZERhdGEtPm1fZGVwcmVjYXRlZEZsZXhpYmxlQm94ICE9IG90aGVyLnJhcmVOb25Jbmhlcml0ZWRE
YXRhLT5tX2RlcHJlY2F0ZWRGbGV4aWJsZUJveCkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
Ci0gICAgICAgIGlmIChyYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9mbGV4aWJsZUJveC5nZXQoKSAh
PSBvdGhlci5yYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9mbGV4aWJsZUJveC5nZXQoKQotICAgICAg
ICAgICAgJiYgKnJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX2ZsZXhpYmxlQm94LmdldCgpICE9ICpv
dGhlci5yYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9mbGV4aWJsZUJveC5nZXQoKSkKKyAgICAgICAg
aWYgKHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX2ZsZXhpYmxlQm94ICE9IG90aGVyLnJhcmVOb25J
bmhlcml0ZWREYXRhLT5tX2ZsZXhpYmxlQm94KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CisK
ICAgICAgICAgaWYgKHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX29yZGVyICE9IG90aGVyLnJhcmVO
b25Jbmhlcml0ZWREYXRhLT5tX29yZGVyCiAgICAgICAgICAgICB8fCByYXJlTm9uSW5oZXJpdGVk
RGF0YS0+bV9hbGlnbkNvbnRlbnQgIT0gb3RoZXIucmFyZU5vbkluaGVyaXRlZERhdGEtPm1fYWxp
Z25Db250ZW50CiAgICAgICAgICAgICB8fCByYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9hbGlnbkl0
ZW1zICE9IG90aGVyLnJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX2FsaWduSXRlbXMKQEAgLTUzOSwx
MSArNTM5LDEwIEBAIGJvb2wgUmVuZGVyU3R5bGU6OmNoYW5nZVJlcXVpcmVzTGF5b3V0KGNvbnN0
IFJlbmRlclN0eWxlJiBvdGhlciwgdW5zaWduZWQmIGNoYW5nCiAgICAgICAgICAgICB8fCByYXJl
Tm9uSW5oZXJpdGVkRGF0YS0+bV9qdXN0aWZ5U2VsZiAhPSBvdGhlci5yYXJlTm9uSW5oZXJpdGVk
RGF0YS0+bV9qdXN0aWZ5U2VsZikKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgICAg
IGlmICghcmFyZU5vbkluaGVyaXRlZERhdGEtPnJlZmxlY3Rpb25EYXRhRXF1aXZhbGVudCgqb3Ro
ZXIucmFyZU5vbkluaGVyaXRlZERhdGEuZ2V0KCkpKQorICAgICAgICBpZiAoIWFyZVBvaW50aW5n
VG9FcXVhbERhdGEocmFyZU5vbkluaGVyaXRlZERhdGEtPm1fYm94UmVmbGVjdCwgb3RoZXIucmFy
ZU5vbkluaGVyaXRlZERhdGEtPm1fYm94UmVmbGVjdCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKIAotICAgICAgICBpZiAocmFyZU5vbkluaGVyaXRlZERhdGEtPm1fbXVsdGlDb2wuZ2V0KCkg
IT0gb3RoZXIucmFyZU5vbkluaGVyaXRlZERhdGEtPm1fbXVsdGlDb2wuZ2V0KCkKLSAgICAgICAg
ICAgICYmICpyYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9tdWx0aUNvbC5nZXQoKSAhPSAqb3RoZXIu
cmFyZU5vbkluaGVyaXRlZERhdGEtPm1fbXVsdGlDb2wuZ2V0KCkpCisgICAgICAgIGlmIChyYXJl
Tm9uSW5oZXJpdGVkRGF0YS0+bV9tdWx0aUNvbCAhPSBvdGhlci5yYXJlTm9uSW5oZXJpdGVkRGF0
YS0+bV9tdWx0aUNvbCkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgICAgIGlmIChy
YXJlTm9uSW5oZXJpdGVkRGF0YS0+bV90cmFuc2Zvcm0gIT0gb3RoZXIucmFyZU5vbkluaGVyaXRl
ZERhdGEtPm1fdHJhbnNmb3JtKSB7CkBAIC01NTYsOCArNTU1LDggQEAgYm9vbCBSZW5kZXJTdHls
ZTo6Y2hhbmdlUmVxdWlyZXNMYXlvdXQoY29uc3QgUmVuZGVyU3R5bGUmIG90aGVyLCB1bnNpZ25l
ZCYgY2hhbmcKICAgICAgICAgfQogCiAjaWYgRU5BQkxFKENTU19HUklEX0xBWU9VVCkKLSAgICAg
ICAgaWYgKHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX2dyaWQuZ2V0KCkgIT0gb3RoZXIucmFyZU5v
bkluaGVyaXRlZERhdGEtPm1fZ3JpZC5nZXQoKQotICAgICAgICAgICAgfHwgcmFyZU5vbkluaGVy
aXRlZERhdGEtPm1fZ3JpZEl0ZW0uZ2V0KCkgIT0gb3RoZXIucmFyZU5vbkluaGVyaXRlZERhdGEt
Pm1fZ3JpZEl0ZW0uZ2V0KCkpCisgICAgICAgIGlmIChyYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9n
cmlkICE9IG90aGVyLnJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX2dyaWQKKyAgICAgICAgICAgIHx8
IHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX2dyaWRJdGVtICE9IG90aGVyLnJhcmVOb25Jbmhlcml0
ZWREYXRhLT5tX2dyaWRJdGVtKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKIApA
QCAtNTY3LDcgKzU2Niw3IEBAIGJvb2wgUmVuZGVyU3R5bGU6OmNoYW5nZVJlcXVpcmVzTGF5b3V0
KGNvbnN0IFJlbmRlclN0eWxlJiBvdGhlciwgdW5zaWduZWQmIGNoYW5nCiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICNlbmRpZgogCi0gICAgICAgIGlmICghcmFyZU5vbkluaGVyaXRlZERhdGEt
PndpbGxDaGFuZ2VEYXRhRXF1aXZhbGVudCgqb3RoZXIucmFyZU5vbkluaGVyaXRlZERhdGEuZ2V0
KCkpKSB7CisgICAgICAgIGlmICghYXJlUG9pbnRpbmdUb0VxdWFsRGF0YShyYXJlTm9uSW5oZXJp
dGVkRGF0YS0+bV93aWxsQ2hhbmdlLCBvdGhlci5yYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV93aWxs
Q2hhbmdlKSkgewogICAgICAgICAgICAgY2hhbmdlZENvbnRleHRTZW5zaXRpdmVQcm9wZXJ0aWVz
IHw9IENvbnRleHRTZW5zaXRpdmVQcm9wZXJ0eVdpbGxDaGFuZ2U7CiAgICAgICAgICAgICAvLyBE
b24ndCByZXR1cm47IGtlZXAgbG9va2luZyBmb3IgYW5vdGhlciBjaGFuZ2UKICAgICAgICAgfQpA
QCAtNjE2LDcgKzYxNSw3IEBAIGJvb2wgUmVuZGVyU3R5bGU6OmNoYW5nZVJlcXVpcmVzTGF5b3V0
KGNvbnN0IFJlbmRlclN0eWxlJiBvdGhlciwgdW5zaWduZWQmIGNoYW5nCiAjaWYgRU5BQkxFKEFD
Q0VMRVJBVEVEX09WRVJGTE9XX1NDUk9MTElORykKICAgICAgICAgICAgIHx8IHJhcmVJbmhlcml0
ZWREYXRhLT51c2VUb3VjaE92ZXJmbG93U2Nyb2xsaW5nICE9IG90aGVyLnJhcmVJbmhlcml0ZWRE
YXRhLT51c2VUb3VjaE92ZXJmbG93U2Nyb2xsaW5nCiAjZW5kaWYKLSAgICAgICAgICAgIHx8IHJh
cmVJbmhlcml0ZWREYXRhLT5saXN0U3R5bGVJbWFnZSAhPSBvdGhlci5yYXJlSW5oZXJpdGVkRGF0
YS0+bGlzdFN0eWxlSW1hZ2UpCisgICAgICAgICAgICB8fCByYXJlSW5oZXJpdGVkRGF0YS0+bGlz
dFN0eWxlSW1hZ2UgIT0gb3RoZXIucmFyZUluaGVyaXRlZERhdGEtPmxpc3RTdHlsZUltYWdlKSAv
LyBGSVhNRTogbmVlZHMgYXJlUG9pbnRpbmdUb0VxdWFsRGF0YSgpPwogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAKICAgICAgICAgaWYgKHRleHRTdHJva2VXaWR0aCgpICE9IG90aGVyLnRleHRT
dHJva2VXaWR0aCgpKQpAQCAtNzAwLDkgKzY5OSw3IEBAIGJvb2wgUmVuZGVyU3R5bGU6OmNoYW5n
ZVJlcXVpcmVzTGF5b3V0KGNvbnN0IFJlbmRlclN0eWxlJiBvdGhlciwgdW5zaWduZWQmIGNoYW5n
CiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gSWYgdGhlIGNvdW50ZXIgZGlyZWN0aXZl
cyBjaGFuZ2UsIHRyaWdnZXIgYSByZWxheW91dCB0byByZS1jYWxjdWxhdGUgY291bnRlciB2YWx1
ZXMgYW5kIHJlYnVpbGQgdGhlIGNvdW50ZXIgbm9kZSB0cmVlLgotICAgIGNvbnN0IENvdW50ZXJE
aXJlY3RpdmVNYXAqIG1hcEEgPSByYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9jb3VudGVyRGlyZWN0
aXZlcy5nZXQoKTsKLSAgICBjb25zdCBDb3VudGVyRGlyZWN0aXZlTWFwKiBtYXBCID0gb3RoZXIu
cmFyZU5vbkluaGVyaXRlZERhdGEtPm1fY291bnRlckRpcmVjdGl2ZXMuZ2V0KCk7Ci0gICAgaWYg
KCEobWFwQSA9PSBtYXBCIHx8IChtYXBBICYmIG1hcEIgJiYgKm1hcEEgPT0gKm1hcEIpKSkKKyAg
ICBpZiAoIWFyZVBvaW50aW5nVG9FcXVhbERhdGEocmFyZU5vbkluaGVyaXRlZERhdGEtPm1fY291
bnRlckRpcmVjdGl2ZXMsIG90aGVyLnJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX2NvdW50ZXJEaXJl
Y3RpdmVzKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBpZiAoKHZpc2liaWxpdHkoKSA9
PSBDT0xMQVBTRSkgIT0gKG90aGVyLnZpc2liaWxpdHkoKSA9PSBDT0xMQVBTRSkpCkBAIC03MjUs
OSArNzIyLDcgQEAgYm9vbCBSZW5kZXJTdHlsZTo6Y2hhbmdlUmVxdWlyZXNMYXlvdXQoY29uc3Qg
UmVuZGVyU3R5bGUmIG90aGVyLCB1bnNpZ25lZCYgY2hhbmcKICAgICAgICAgcmV0dXJuIHRydWU7
CiAjZW5kaWYKIAotICAgIGNvbnN0IFF1b3Rlc0RhdGEqIHF1b3Rlc0RhdGFBID0gcmFyZUluaGVy
aXRlZERhdGEtPnF1b3Rlcy5nZXQoKTsKLSAgICBjb25zdCBRdW90ZXNEYXRhKiBxdW90ZXNEYXRh
QiA9IG90aGVyLnJhcmVJbmhlcml0ZWREYXRhLT5xdW90ZXMuZ2V0KCk7Ci0gICAgaWYgKCEocXVv
dGVzRGF0YUEgPT0gcXVvdGVzRGF0YUIgfHwgKHF1b3Rlc0RhdGFBICYmIHF1b3Rlc0RhdGFCICYm
ICpxdW90ZXNEYXRhQSA9PSAqcXVvdGVzRGF0YUIpKSkKKyAgICBpZiAoIWFyZVBvaW50aW5nVG9F
cXVhbERhdGEocmFyZUluaGVyaXRlZERhdGEtPnF1b3Rlcywgb3RoZXIucmFyZUluaGVyaXRlZERh
dGEtPnF1b3RlcykpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgaWYgKHBvc2l0aW9uKCkg
IT0gU3RhdGljUG9zaXRpb24pIHsKQEAgLTc4NCw4ICs3NzksNyBAQCBib29sIFJlbmRlclN0eWxl
OjpjaGFuZ2VSZXF1aXJlc0xheWVyUmVwYWludChjb25zdCBSZW5kZXJTdHlsZSYgb3RoZXIsIHVu
c2lnbmVkJgogICAgICAgICAvLyBEb24ndCByZXR1cm47IGtlZXAgbG9va2luZyBmb3IgYW5vdGhl
ciBjaGFuZ2UuCiAgICAgfQogCi0gICAgaWYgKHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX2ZpbHRl
ci5nZXQoKSAhPSBvdGhlci5yYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9maWx0ZXIuZ2V0KCkKLSAg
ICAgICAgJiYgKnJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX2ZpbHRlci5nZXQoKSAhPSAqb3RoZXIu
cmFyZU5vbkluaGVyaXRlZERhdGEtPm1fZmlsdGVyLmdldCgpKSB7CisgICAgaWYgKHJhcmVOb25J
bmhlcml0ZWREYXRhLT5tX2ZpbHRlciAhPSBvdGhlci5yYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9m
aWx0ZXIpIHsKICAgICAgICAgY2hhbmdlZENvbnRleHRTZW5zaXRpdmVQcm9wZXJ0aWVzIHw9IENv
bnRleHRTZW5zaXRpdmVQcm9wZXJ0eUZpbHRlcjsKICAgICAgICAgLy8gRG9uJ3QgcmV0dXJuOyBr
ZWVwIGxvb2tpbmcgZm9yIGFub3RoZXIgY2hhbmdlLgogICAgIH0KQEAgLTk0Niw4ICs5NDAsNyBA
QCB2b2lkIFJlbmRlclN0eWxlOjpzZXRRdW90ZXMoUGFzc1JlZlB0cjxRdW90ZXNEYXRhPiBxKQog
CiB2b2lkIFJlbmRlclN0eWxlOjpzZXRXaWxsQ2hhbmdlKFBhc3NSZWZQdHI8V2lsbENoYW5nZURh
dGE+IHdpbGxDaGFuZ2VEYXRhKQogewotICAgIGlmIChyYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV93
aWxsQ2hhbmdlID09IHdpbGxDaGFuZ2VEYXRhCi0gICAgICAgIHx8IChyYXJlTm9uSW5oZXJpdGVk
RGF0YS0+bV93aWxsQ2hhbmdlICYmIHdpbGxDaGFuZ2VEYXRhICYmICpyYXJlTm9uSW5oZXJpdGVk
RGF0YS0+bV93aWxsQ2hhbmdlID09ICp3aWxsQ2hhbmdlRGF0YSkpCisgICAgaWYgKGFyZVBvaW50
aW5nVG9FcXVhbERhdGEocmFyZU5vbkluaGVyaXRlZERhdGEtPm1fd2lsbENoYW5nZS5nZXQoKSwg
d2lsbENoYW5nZURhdGEuZ2V0KCkpKQogICAgICAgICByZXR1cm47CiAKICAgICByYXJlTm9uSW5o
ZXJpdGVkRGF0YS5hY2Nlc3MoKS0+bV93aWxsQ2hhbmdlID0gV1RGOjptb3ZlKHdpbGxDaGFuZ2VE
YXRhKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TVkdSZW5k
ZXJTdHlsZURlZnMuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NWR1JlbmRl
clN0eWxlRGVmcy5jcHAKaW5kZXggN2Q2OWQ4NDNiNjViNDlhNTc0NDlmNDcyNjdjYTcwZTBlYzJj
NGI1NS4uMjBkZWQ4YjhiYzBiNGVkNzRjMzZiOTFjMmJmODQ1N2U4YzhjOTQ1YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NWR1JlbmRlclN0eWxlRGVmcy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NWR1JlbmRlclN0eWxlRGVmcy5j
cHAKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVk
ZSAiU1ZHUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlIDx3dGYvUG9pbnRlckNvbXBhcmlzb24uaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0yMTYsMTEgKzIxNyw3IEBAIFJlZjxTdHlsZVNo
YWRvd1NWR0RhdGE+IFN0eWxlU2hhZG93U1ZHRGF0YTo6Y29weSgpIGNvbnN0CiAKIGJvb2wgU3R5
bGVTaGFkb3dTVkdEYXRhOjpvcGVyYXRvcj09KGNvbnN0IFN0eWxlU2hhZG93U1ZHRGF0YSYgb3Ro
ZXIpIGNvbnN0CiB7Ci0gICAgaWYgKCghc2hhZG93ICYmIG90aGVyLnNoYWRvdykgfHwgKHNoYWRv
dyAmJiAhb3RoZXIuc2hhZG93KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChzaGFk
b3cgJiYgb3RoZXIuc2hhZG93ICYmICgqc2hhZG93ICE9ICpvdGhlci5zaGFkb3cpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGFyZVBvaW50aW5n
VG9FcXVhbERhdGEoc2hhZG93LCBvdGhlci5zaGFkb3cpOwogfQogCiBTdHlsZVJlc291cmNlRGF0
YTo6U3R5bGVSZXNvdXJjZURhdGEoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL1NoYWRvd0RhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L1NoYWRvd0RhdGEuY3BwCmluZGV4IDBmMzFjNjFhY2Q3MGNkNzRmNTRjNGMxNTg5NWFkNGZhNThl
YTE2YWUuLjRlNWNiOTBmMDRmYTExZWIzMmJmYzY4ZDA1N2IwNjk4ZjA4MDE4ZDMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TaGFkb3dEYXRhLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU2hhZG93RGF0YS5jcHAKQEAgLTIzLDYgKzIz
LDcgQEAKICNpbmNsdWRlICJTaGFkb3dEYXRhLmgiCiAKICNpbmNsdWRlICJMYXlvdXRSZWN0Lmgi
CisjaW5jbHVkZSA8d3RmL1BvaW50ZXJDb21wYXJpc29uLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtMzksOCArNDAsNyBAQCBTaGFkb3dEYXRhOjpTaGFkb3dEYXRhKGNvbnN0IFNoYWRv
d0RhdGEmIG8pCiAKIGJvb2wgU2hhZG93RGF0YTo6b3BlcmF0b3I9PShjb25zdCBTaGFkb3dEYXRh
JiBvKSBjb25zdAogewotICAgIGlmICgobV9uZXh0ICYmICFvLm1fbmV4dCkgfHwgKCFtX25leHQg
JiYgby5tX25leHQpCi0gICAgICAgIHx8IChtX25leHQgJiYgby5tX25leHQgJiYgKm1fbmV4dCAh
PSAqby5tX25leHQpKQorICAgIGlmICghYXJlUG9pbnRpbmdUb0VxdWFsRGF0YShtX25leHQsIG8u
bV9uZXh0KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIHJldHVybiBtX2xvY2F0
aW9uID09IG8ubV9sb2NhdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N0eWxlL1N0eWxlSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHls
ZUltYWdlLmgKaW5kZXggMjM2ZjFhMjE5OWMyODNhZDMxZjU0M2Y5NzM5MjlkOTllNTJjNzZlZC4u
MzNkMmRjMjc5ZjAwMTU1Mzc0MjY4YWY4MjcwODQ5MTcyMGJjZjE4ZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW1hZ2UuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVJbWFnZS5oCkBAIC03NCwxMSArNzQsNiBAQCBwdWJs
aWM6CiAgICAgQUxXQVlTX0lOTElORSBib29sIGlzR2VuZXJhdGVkSW1hZ2UoKSBjb25zdCB7IHJl
dHVybiBtX2lzR2VuZXJhdGVkSW1hZ2U7IH0KICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNDYWNo
ZWRJbWFnZVNldCgpIGNvbnN0IHsgcmV0dXJuIG1faXNDYWNoZWRJbWFnZVNldDsgfQogICAgIAot
ICAgIHN0YXRpYyBib29sIGltYWdlc0VxdWl2YWxlbnQoU3R5bGVJbWFnZSogaW1hZ2UxLCBTdHls
ZUltYWdlKiBpbWFnZTIpCi0gICAgewotICAgICAgICByZXR1cm4gaW1hZ2UxID09IGltYWdlMiB8
fCAoaW1hZ2UxICYmIGltYWdlMiAmJiAqaW1hZ2UxID09ICppbWFnZTIpOwotICAgIH0KLQogcHJv
dGVjdGVkOgogICAgIFN0eWxlSW1hZ2UoKQogICAgICAgICA6IG1faXNDYWNoZWRJbWFnZShmYWxz
ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVJ
bmhlcml0ZWREYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVJh
cmVJbmhlcml0ZWREYXRhLmNwcAppbmRleCBkOWNhMzQ5ZTg4OGE0Y2U1NzM2NzhjNWIwMThmMWMw
ZWI1N2FmMzEyLi40MzA2ZjYwNGQ0ODI4N2I3ZTgyYWRjZWU0ZTI3ZTY3YzM4MGIxMzljIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJlSW5oZXJpdGVk
RGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFyZUlu
aGVyaXRlZERhdGEuY3BwCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiU2hhZG93RGF0YS5o
IgogI2luY2x1ZGUgIlN0eWxlQ3VzdG9tUHJvcGVydHlEYXRhLmgiCiAjaW5jbHVkZSAiU3R5bGVJ
bWFnZS5oIgorI2luY2x1ZGUgPHd0Zi9Qb2ludGVyQ29tcGFyaXNvbi5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKQEAgLTIzNSwyNCArMjM2LDYgQEAgU3R5bGVSYXJlSW5oZXJpdGVkRGF0YTo6
flN0eWxlUmFyZUluaGVyaXRlZERhdGEoKQogewogfQogCi1zdGF0aWMgYm9vbCBjdXJzb3JEYXRh
RXF1aXZhbGVudChjb25zdCBDdXJzb3JMaXN0KiBjMSwgY29uc3QgQ3Vyc29yTGlzdCogYzIpCi17
Ci0gICAgaWYgKGMxID09IGMyKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAoKCFjMSAm
JiBjMikgfHwgKGMxICYmICFjMikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4g
KCpjMSA9PSAqYzIpOwotfQotCi1zdGF0aWMgYm9vbCBxdW90ZXNEYXRhRXF1aXZhbGVudChjb25z
dCBRdW90ZXNEYXRhKiBxMSwgY29uc3QgUXVvdGVzRGF0YSogcTIpCi17Ci0gICAgaWYgKHExID09
IHEyKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAoKCFxMSAmJiBxMikgfHwgKHExICYm
ICFxMikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gKCpxMSA9PSAqcTIpOwot
fQotCiBib29sIFN0eWxlUmFyZUluaGVyaXRlZERhdGE6Om9wZXJhdG9yPT0oY29uc3QgU3R5bGVS
YXJlSW5oZXJpdGVkRGF0YSYgbykgY29uc3QKIHsKICAgICByZXR1cm4gdGV4dFN0cm9rZUNvbG9y
ID09IG8udGV4dFN0cm9rZUNvbG9yCkBAIC0yNjUsOCArMjQ4LDggQEAgYm9vbCBTdHlsZVJhcmVJ
bmhlcml0ZWREYXRhOjpvcGVyYXRvcj09KGNvbnN0IFN0eWxlUmFyZUluaGVyaXRlZERhdGEmIG8p
IGNvbnN0CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICAgICAgICAgJiYgdGFwSGlnaGxpZ2h0
Q29sb3IgPT0gby50YXBIaWdobGlnaHRDb2xvcgogI2VuZGlmCi0gICAgICAgICYmIHNoYWRvd0Rh
dGFFcXVpdmFsZW50KG8pCi0gICAgICAgICYmIGN1cnNvckRhdGFFcXVpdmFsZW50KGN1cnNvckRh
dGEuZ2V0KCksIG8uY3Vyc29yRGF0YS5nZXQoKSkKKyAgICAgICAgJiYgYXJlUG9pbnRpbmdUb0Vx
dWFsRGF0YSh0ZXh0U2hhZG93LCBvLnRleHRTaGFkb3cpCisgICAgICAgICYmIGFyZVBvaW50aW5n
VG9FcXVhbERhdGEoY3Vyc29yRGF0YSwgby5jdXJzb3JEYXRhKQogICAgICAgICAmJiBpbmRlbnQg
PT0gby5pbmRlbnQKICAgICAgICAgJiYgbV9lZmZlY3RpdmVab29tID09IG8ubV9lZmZlY3RpdmVa
b29tCiAgICAgICAgICYmIHdpZG93cyA9PSBvLndpZG93cwpAQCAtMzA3LDcgKzI5MCw3IEBAIGJv
b2wgU3R5bGVSYXJlSW5oZXJpdGVkRGF0YTo6b3BlcmF0b3I9PShjb25zdCBTdHlsZVJhcmVJbmhl
cml0ZWREYXRhJiBvKSBjb25zdAogICAgICAgICAmJiBoeXBoZW5hdGlvblN0cmluZyA9PSBvLmh5
cGhlbmF0aW9uU3RyaW5nCiAgICAgICAgICYmIGxvY2FsZSA9PSBvLmxvY2FsZQogICAgICAgICAm
JiB0ZXh0RW1waGFzaXNDdXN0b21NYXJrID09IG8udGV4dEVtcGhhc2lzQ3VzdG9tTWFyawotICAg
ICAgICAmJiBxdW90ZXNEYXRhRXF1aXZhbGVudChxdW90ZXMuZ2V0KCksIG8ucXVvdGVzLmdldCgp
KQorICAgICAgICAmJiBhcmVQb2ludGluZ1RvRXF1YWxEYXRhKHF1b3Rlcywgby5xdW90ZXMpCiAg
ICAgICAgICYmIG1fdGFiU2l6ZSA9PSBvLm1fdGFiU2l6ZQogICAgICAgICAmJiBtX2xpbmVHcmlk
ID09IG8ubV9saW5lR3JpZAogI2lmIEVOQUJMRShDU1NfSU1BR0VfT1JJRU5UQVRJT04pCkBAIC0z
MzMsMTYgKzMxNiw3IEBAIGJvb2wgU3R5bGVSYXJlSW5oZXJpdGVkRGF0YTo6b3BlcmF0b3I9PShj
b25zdCBTdHlsZVJhcmVJbmhlcml0ZWREYXRhJiBvKSBjb25zdAogICAgICAgICAmJiB0cmFpbGlu
Z1dvcmQgPT0gby50cmFpbGluZ1dvcmQKICNlbmRpZgogICAgICAgICAmJiBtX2N1c3RvbVByb3Bl
cnRpZXMgPT0gby5tX2N1c3RvbVByb3BlcnRpZXMKLSAgICAgICAgJiYgU3R5bGVJbWFnZTo6aW1h
Z2VzRXF1aXZhbGVudChsaXN0U3R5bGVJbWFnZS5nZXQoKSwgby5saXN0U3R5bGVJbWFnZS5nZXQo
KSk7Ci19Ci0KLWJvb2wgU3R5bGVSYXJlSW5oZXJpdGVkRGF0YTo6c2hhZG93RGF0YUVxdWl2YWxl
bnQoY29uc3QgU3R5bGVSYXJlSW5oZXJpdGVkRGF0YSYgbykgY29uc3QKLXsKLSAgICBpZiAoKCF0
ZXh0U2hhZG93ICYmIG8udGV4dFNoYWRvdykgfHwgKHRleHRTaGFkb3cgJiYgIW8udGV4dFNoYWRv
dykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAodGV4dFNoYWRvdyAmJiBvLnRleHRT
aGFkb3cgJiYgKCp0ZXh0U2hhZG93ICE9ICpvLnRleHRTaGFkb3cpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgICAgICYmIGFyZVBvaW50aW5nVG9FcXVhbERh
dGEobGlzdFN0eWxlSW1hZ2UsIG8ubGlzdFN0eWxlSW1hZ2UpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5
bGVSYXJlSW5oZXJpdGVkRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0
eWxlUmFyZUluaGVyaXRlZERhdGEuaAppbmRleCAyNjUxNjFiMzY0NTI2NGE5MzI3OWU3ZGJhMzJk
N2YwZDQ1MmI3YjA5Li5lY2JiMDc5ZmIwOGQxY2VmNzUxZDEyMzcxMzA3NmE2ODI5MTM2MjExIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJlSW5oZXJp
dGVkRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVJ
bmhlcml0ZWREYXRhLmgKQEAgLTU4LDcgKzU4LDYgQEAgcHVibGljOgogICAgIHsKICAgICAgICAg
cmV0dXJuICEoKnRoaXMgPT0gbyk7CiAgICAgfQotICAgIGJvb2wgc2hhZG93RGF0YUVxdWl2YWxl
bnQoY29uc3QgU3R5bGVSYXJlSW5oZXJpdGVkRGF0YSYpIGNvbnN0OwogCiAgICAgUmVmUHRyPFN0
eWxlSW1hZ2U+IGxpc3RTdHlsZUltYWdlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5jcHAKaW5kZXgg
MGQ0ZDhiNWM1ZTgzYTkxZTUyYmVmNjM0MDZmZmQ0ZTc5ZTk2N2RlMC4uYmYwNDQ3ZDVjNTM2MjBm
OGRiNzY5YWQ1ZjMxZTA4MTkyNjY2ODY4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL1N0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhLmNwcApAQCAt
MzEsNiArMzEsOCBAQAogI2luY2x1ZGUgIlN0eWxlSW1hZ2UuaCIKICNpbmNsdWRlICJTdHlsZVJl
c29sdmVyLmgiCiAjaW5jbHVkZSAiU3R5bGVTY3JvbGxTbmFwUG9pbnRzLmgiCisjaW5jbHVkZSA8
d3RmL1BvaW50ZXJDb21wYXJpc29uLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKQEAgLTIzMywxMiArMjM1LDEyIEBAIGJvb2wgU3R5bGVSYXJlTm9u
SW5oZXJpdGVkRGF0YTo6b3BlcmF0b3I9PShjb25zdCBTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRh
JiBvKSBjCiAgICAgICAgICYmIG1fc2Nyb2xsU25hcFBvaW50cyA9PSBvLm1fc2Nyb2xsU25hcFBv
aW50cwogI2VuZGlmCiAgICAgICAgICYmIGNvbnRlbnREYXRhRXF1aXZhbGVudChvKQotICAgICAg
ICAmJiBjb3VudGVyRGF0YUVxdWl2YWxlbnQobykKLSAgICAgICAgJiYgc2hhZG93RGF0YUVxdWl2
YWxlbnQobykKLSAgICAgICAgJiYgd2lsbENoYW5nZURhdGFFcXVpdmFsZW50KG8pCi0gICAgICAg
ICYmIHJlZmxlY3Rpb25EYXRhRXF1aXZhbGVudChvKQotICAgICAgICAmJiBhbmltYXRpb25EYXRh
RXF1aXZhbGVudChvKQotICAgICAgICAmJiB0cmFuc2l0aW9uRGF0YUVxdWl2YWxlbnQobykKKyAg
ICAgICAgJiYgYXJlUG9pbnRpbmdUb0VxdWFsRGF0YShtX2NvdW50ZXJEaXJlY3RpdmVzLCBvLm1f
Y291bnRlckRpcmVjdGl2ZXMpCisgICAgICAgICYmIGFyZVBvaW50aW5nVG9FcXVhbERhdGEobV9i
b3hTaGFkb3csIG8ubV9ib3hTaGFkb3cpCisgICAgICAgICYmIGFyZVBvaW50aW5nVG9FcXVhbERh
dGEobV93aWxsQ2hhbmdlLCBvLm1fd2lsbENoYW5nZSkKKyAgICAgICAgJiYgYXJlUG9pbnRpbmdU
b0VxdWFsRGF0YShtX2JveFJlZmxlY3QsIG8ubV9ib3hSZWZsZWN0KQorICAgICAgICAmJiBhcmVQ
b2ludGluZ1RvRXF1YWxEYXRhKG1fYW5pbWF0aW9ucywgby5tX2FuaW1hdGlvbnMpCisgICAgICAg
ICYmIGFyZVBvaW50aW5nVG9FcXVhbERhdGEobV90cmFuc2l0aW9ucywgby5tX3RyYW5zaXRpb25z
KQogICAgICAgICAmJiBtX21hc2sgPT0gby5tX21hc2sKICAgICAgICAgJiYgbV9tYXNrQm94SW1h
Z2UgPT0gby5tX21hc2tCb3hJbWFnZQogICAgICAgICAmJiBtX3BhZ2VTaXplID09IG8ubV9wYWdl
U2l6ZQpAQCAtMzA1LDY0ICszMDcsNiBAQCBib29sIFN0eWxlUmFyZU5vbkluaGVyaXRlZERhdGE6
OmNvbnRlbnREYXRhRXF1aXZhbGVudChjb25zdCBTdHlsZVJhcmVOb25Jbmhlcml0ZQogICAgIHJl
dHVybiAhYSAmJiAhYjsKIH0KIAotYm9vbCBTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhOjpjb3Vu
dGVyRGF0YUVxdWl2YWxlbnQoY29uc3QgU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YSYgbykgY29u
c3QKLXsKLSAgICBpZiAobV9jb3VudGVyRGlyZWN0aXZlcy5nZXQoKSA9PSBvLm1fY291bnRlckRp
cmVjdGl2ZXMuZ2V0KCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAKLSAgICBpZiAo
bV9jb3VudGVyRGlyZWN0aXZlcyAmJiBvLm1fY291bnRlckRpcmVjdGl2ZXMgJiYgKm1fY291bnRl
ckRpcmVjdGl2ZXMgPT0gKm8ubV9jb3VudGVyRGlyZWN0aXZlcykKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgU3R5bGVSYXJlTm9uSW5oZXJpdGVk
RGF0YTo6c2hhZG93RGF0YUVxdWl2YWxlbnQoY29uc3QgU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0
YSYgbykgY29uc3QKLXsKLSAgICBpZiAoKCFtX2JveFNoYWRvdyAmJiBvLm1fYm94U2hhZG93KSB8
fCAobV9ib3hTaGFkb3cgJiYgIW8ubV9ib3hTaGFkb3cpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgaWYgKG1fYm94U2hhZG93ICYmIG8ubV9ib3hTaGFkb3cgJiYgKCptX2JveFNoYWRvdyAh
PSAqby5tX2JveFNoYWRvdykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotYm9vbCBTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhOjp3aWxsQ2hhbmdlRGF0YUVx
dWl2YWxlbnQoY29uc3QgU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YSYgbykgY29uc3QKLXsKLSAg
ICBpZiAobV93aWxsQ2hhbmdlICE9IG8ubV93aWxsQ2hhbmdlKSB7Ci0gICAgICAgIGlmICghbV93
aWxsQ2hhbmdlIHx8ICFvLm1fd2lsbENoYW5nZSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgcmV0dXJuICptX3dpbGxDaGFuZ2UgPT0gKm8ubV93aWxsQ2hhbmdlOwotICAgIH0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhOjpy
ZWZsZWN0aW9uRGF0YUVxdWl2YWxlbnQoY29uc3QgU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YSYg
bykgY29uc3QKLXsKLSAgICBpZiAobV9ib3hSZWZsZWN0ICE9IG8ubV9ib3hSZWZsZWN0KSB7Ci0g
ICAgICAgIGlmICghbV9ib3hSZWZsZWN0IHx8ICFvLm1fYm94UmVmbGVjdCkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuICptX2JveFJlZmxlY3QgPT0gKm8ubV9ib3hS
ZWZsZWN0OwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBTdHlsZVJhcmVOb25J
bmhlcml0ZWREYXRhOjphbmltYXRpb25EYXRhRXF1aXZhbGVudChjb25zdCBTdHlsZVJhcmVOb25J
bmhlcml0ZWREYXRhJiBvKSBjb25zdAotewotICAgIGlmICgoIW1fYW5pbWF0aW9ucyAmJiBvLm1f
YW5pbWF0aW9ucykgfHwgKG1fYW5pbWF0aW9ucyAmJiAhby5tX2FuaW1hdGlvbnMpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1fYW5pbWF0aW9ucyAmJiBvLm1fYW5pbWF0aW9ucyAm
JiAoKm1fYW5pbWF0aW9ucyAhPSAqby5tX2FuaW1hdGlvbnMpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0
YTo6dHJhbnNpdGlvbkRhdGFFcXVpdmFsZW50KGNvbnN0IFN0eWxlUmFyZU5vbkluaGVyaXRlZERh
dGEmIG8pIGNvbnN0Ci17Ci0gICAgaWYgKCghbV90cmFuc2l0aW9ucyAmJiBvLm1fdHJhbnNpdGlv
bnMpIHx8IChtX3RyYW5zaXRpb25zICYmICFvLm1fdHJhbnNpdGlvbnMpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgaWYgKG1fdHJhbnNpdGlvbnMgJiYgby5tX3RyYW5zaXRpb25zICYmICgq
bV90cmFuc2l0aW9ucyAhPSAqby5tX3RyYW5zaXRpb25zKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIHJldHVybiB0cnVlOwotfQotCiBib29sIFN0eWxlUmFyZU5vbkluaGVyaXRlZERhdGE6
Omhhc0ZpbHRlcnMoKSBjb25zdAogewogICAgIHJldHVybiBtX2ZpbHRlci5nZXQoKSAmJiAhbV9m
aWx0ZXItPm1fb3BlcmF0aW9ucy5pc0VtcHR5KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5oIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEuaAppbmRleCBm
NjE3NTJkYTljNTdiMzJjMzRlY2M4MjA0ZTdkZTk0YjExMmQ3MTc1Li43YWQ5NzYzYWFmMDRiZjY4
NDlmOTYxODViMzk4NWI2ZTAwZjc3OTAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhLmgKQEAgLTkyLDEy
ICs5Miw3IEBAIHB1YmxpYzoKICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgU3R5bGVSYXJlTm9u
SW5oZXJpdGVkRGF0YSYgbykgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvKTsgfQogCiAgICAg
Ym9vbCBjb250ZW50RGF0YUVxdWl2YWxlbnQoY29uc3QgU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0
YSYpIGNvbnN0OwotICAgIGJvb2wgY291bnRlckRhdGFFcXVpdmFsZW50KGNvbnN0IFN0eWxlUmFy
ZU5vbkluaGVyaXRlZERhdGEmKSBjb25zdDsKLSAgICBib29sIHNoYWRvd0RhdGFFcXVpdmFsZW50
KGNvbnN0IFN0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEmKSBjb25zdDsKLSAgICBib29sIHdpbGxD
aGFuZ2VEYXRhRXF1aXZhbGVudChjb25zdCBTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhJikgY29u
c3Q7Ci0gICAgYm9vbCByZWZsZWN0aW9uRGF0YUVxdWl2YWxlbnQoY29uc3QgU3R5bGVSYXJlTm9u
SW5oZXJpdGVkRGF0YSYpIGNvbnN0OwotICAgIGJvb2wgYW5pbWF0aW9uRGF0YUVxdWl2YWxlbnQo
Y29uc3QgU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YSYpIGNvbnN0OwotICAgIGJvb2wgdHJhbnNp
dGlvbkRhdGFFcXVpdmFsZW50KGNvbnN0IFN0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEmKSBjb25z
dDsKKwogICAgIGJvb2wgaGFzRmlsdGVycygpIGNvbnN0OwogI2lmIEVOQUJMRShGSUxURVJTX0xF
VkVMXzIpCiAgICAgYm9vbCBoYXNCYWNrZHJvcEZpbHRlcnMoKSBjb25zdDsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262973</attachid>
            <date>2015-10-12 22:56:11 -0700</date>
            <delta_ts>2015-10-13 09:27:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150022-20151012225534.patch</filename>
            <type>text/plain</type>
            <size>38638</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkwOTI1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGFjNzQ0NTY3MzFkOTIyNDMwNzMyNDlh
MDQ4NTY3NGYyYzY0NDNkYTcuLjQzYWEyYWM3YjE4YmYzZTViNTAzZGMyZTI2MGExYTI4ZmZiNmFj
N2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTUtMTAtMTIgIFNpbW9uIEZyYXNlciAgPHNpbW9u
LmZyYXNlckBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIGhlbHBlciBmdW50aW9uIGZvciBjaGVj
a2luZyBwb2ludGVyIGVxdWl2YWxlbmN5IGFuZCB1c2UgaXQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDAyMgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgQWRkIFBvaW50ZXJDb21wYXJpc29u
Lmggd2hpY2ggY29udGFpbnMgdGhlIHRlbXBsYXRlZCBwb2ludGVyIGNvbXBhcmlzb24KKyAgICAg
ICAgZnVuY3Rpb24uCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiB3dGYvUG9pbnRlckNvbXBhcmlzb24uaDogQWRkZWQuCisgICAgICAgIChXVEY6
OmFyZVBvaW50aW5nVG9FcXVhbERhdGEpOgorCiAyMDE1LTEwLTEyICBBbmRyZWFzIEtsaW5nICA8
YWtsaW5nQGFwcGxlLmNvbT4KIAogICAgICAgICAiQSArIEIiIHdpdGggc3RyaW5ncyBzaG91bGRu
J3QgY29weSBpZiBBIG9yIEIgaXMgZW1wdHkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDVlZDk0ZTNiYjhhNWI3
MzdjYjUxNWFkODg3ZTc4MDE2Y2IyMDM2Zi4uNjQ0OWI1MTNiNDViZTJmOGIyMDFiYzVlZDY1NDdh
MDYxOWE3NmRmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDcyIEBACiAyMDE1LTEwLTEyICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCisgICAgICAgIEFkZCBoZWxwZXIg
ZnVudGlvbiBmb3IgY2hlY2tpbmcgcG9pbnRlciBlcXVpdmFsZW5jeSBhbmQgdXNlIGl0CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTAwMjIKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBIGNvbW1vbiBwYXR0
ZXJuIGluIFdlYkNvcmUgY29kZSBpcyB0byBjaGVjayBmb3IgZXF1aXZhbGVuY3kgb2YgdHdvIHBv
aW50ZXJzLAorICAgICAgICBlaXRoZXIgYm90aCBudWxsLCBvciBib3RoIG5vbi1udWxsIGFuZCB3
aXRoIGVxdWFsIHZhbHVlcy4gVGhpcyB3YXMgd3JpdHRlbiBpbgorICAgICAgICBzZXZlcmFsIGRp
ZmZlcmVudCB3YXlzIGluIGRpZmZlcmVudCBwbGFjZXMuCisgICAgICAgIAorICAgICAgICBBZGQg
YXJlUG9pbnRpbmdUb0VxdWFsRGF0YSgpIHRvIHN0YW5kYXJkaXplIHRoaXMgcGF0dGVybi4KKwor
ICAgICAgICBUaGlzIG9idmlhdGVzIHRoZSBuZWVkIGZvciBTdHlsZUltYWdlOjppbWFnZXNFcXVp
dmFsZW50KCksIGNvdW50ZXJEYXRhRXF1aXZhbGVudCgpCisgICAgICAgIGV0Yy4KKyAgICAgICAg
CisgICAgICAgIEFsc28gY2hhbmdlIHNvbWUgY29tcGFyaXNvbnMgb2YgRGF0YVJlZjw+IHdoaWNo
IGNoZWNrZWQgdGhlIHBvaW50ZXIgYW5kIHRoZW4gdGhlCisgICAgICAgIHZhbHVlcyB0byB1c2Ug
RGF0YVJlZjw+OjpvcGVyYXRvcj09IHdoaWNoIGRvZXMgdGhlIHNhbWUgdGhpbmcuIENvbXBhcmlz
b25zIG9mCisgICAgICAgIG1fZ3JpZCBhbmQgbV9ncmlkSXRlbSBvbmx5IGNoZWNrZWQgcG9pbnRl
ciBlcXVhbGl0eSwgc28gdGhpcyBpcyBwcm9iYWJseSBhIGJ1ZyBmaXggdGhlcmUuCisKKyAgICAg
ICAgKiBwYWdlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHA6IGlmICgoIWEgJiYg
IWIpIHx8IGEgPT0gYikgaXMgcmVkdW5kYW50IHNvIGZpeCwKKyAgICAgICAgYW5kIGFkZCBjaGVj
a3MgZm9yIGEgYW5kIGIgUmVuZGVyU3R5bGUqIGZpcnN0LgorICAgICAgICAoV2ViQ29yZTo6UHJv
cGVydHlXcmFwcGVyR2V0dGVyOjplcXVhbHMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVJbWFn
ZVByb3BlcnR5V3JhcHBlcjo6ZXF1YWxzKToKKyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5V3Jh
cHBlclNoYWRvdzo6ZXF1YWxzKToKKyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5V3JhcHBlck1h
eWJlSW52YWxpZENvbG9yOjplcXVhbHMpOgorICAgICAgICAoV2ViQ29yZTo6RmlsbExheWVyUHJv
cGVydHlXcmFwcGVyR2V0dGVyOjplcXVhbHMpOgorICAgICAgICAoV2ViQ29yZTo6RmlsbExheWVy
U3R5bGVJbWFnZVByb3BlcnR5V3JhcHBlcjo6ZXF1YWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bGxMYXllcnNQcm9wZXJ0eVdyYXBwZXI6OmVxdWFscyk6CisgICAgICAgIChXZWJDb3JlOjpTaG9y
dGhhbmRQcm9wZXJ0eVdyYXBwZXI6OmVxdWFscyk6CisgICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0
eVdyYXBwZXJGbGV4OjplcXVhbHMpOgorICAgICAgICAoV2ViQ29yZTo6UHJvcGVydHlXcmFwcGVy
U1ZHUGFpbnQ6OmVxdWFscyk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJl
cXVlc3RCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmVxdWFsSWdub3JpbmdIZWFkZXJGaWVs
ZHMpOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9GaWxsTGF5ZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RmlsbExheWVyOjpvcGVyYXRvcj09KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5
bGUvTmluZVBpZWNlSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TmluZVBpZWNlSW1hZ2VE
YXRhOjpvcGVyYXRvcj09KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUu
Y3BwOiBTb21lIG51bGxwdHIgY2xlYW51cC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxl
OjpnZXRDYWNoZWRQc2V1ZG9TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6
YWRkQ2FjaGVkUHNldWRvU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OmNo
YW5nZUFmZmVjdHNWaXN1YWxPdmVyZmxvdyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHls
ZTo6Y2hhbmdlUmVxdWlyZXNMYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6
OmNoYW5nZVJlcXVpcmVzTGF5ZXJSZXBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0
eWxlOjpzZXRXaWxsQ2hhbmdlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU1ZHUmVuZGVy
U3R5bGVEZWZzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hhZG93U1ZHRGF0YTo6b3Bl
cmF0b3I9PSk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1NoYWRvd0RhdGEuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U2hhZG93RGF0YTo6b3BlcmF0b3I9PSk6CisgICAgICAgICogcmVuZGVy
aW5nL3N0eWxlL1N0eWxlSW1hZ2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlSW1hZ2U6Omlt
YWdlc0VxdWl2YWxlbnQpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9TdHls
ZVJhcmVJbmhlcml0ZWREYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmFyZUluaGVy
aXRlZERhdGE6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6Y3Vyc29yRGF0YUVxdWl2
YWxlbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6cXVvdGVzRGF0YUVxdWl2YWxlbnQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSYXJlSW5oZXJpdGVkRGF0YTo6c2hh
ZG93RGF0YUVxdWl2YWxlbnQpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9T
dHlsZVJhcmVJbmhlcml0ZWREYXRhLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1N0eWxl
UmFyZU5vbkluaGVyaXRlZERhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSYXJlTm9u
SW5oZXJpdGVkRGF0YTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJhcmVO
b25Jbmhlcml0ZWREYXRhOjpjb3VudGVyRGF0YUVxdWl2YWxlbnQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YTo6c2hhZG93RGF0YUVxdWl2YWxl
bnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0
YTo6d2lsbENoYW5nZURhdGFFcXVpdmFsZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUmFyZU5vbkluaGVyaXRlZERhdGE6OnJlZmxlY3Rpb25EYXRhRXF1aXZhbGVudCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhOjphbmlt
YXRpb25EYXRhRXF1aXZhbGVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJh
cmVOb25Jbmhlcml0ZWREYXRhOjp0cmFuc2l0aW9uRGF0YUVxdWl2YWxlbnQpOiBEZWxldGVkLgor
ICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhLmg6CisK
KzIwMTUtMTAtMTIgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CisKICAg
ICAgICAgU3BlY3VsYXRpdmUgQ2Fpcm8gYnVpbGQgZml4ZXMgYWZ0ZXIgcjE5MDkxMC4KIAogICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwOgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJj
ZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMzM2MDYyZTM1MGI5OGEw
YjRjN2M3NWI2NWNhNGI5NGZlZGNjMzI5MS4uYTkzYWNkZTExMzMxMzRkYmMxMTczMDRjOWVkYmJi
OGFmN2NlOGE5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagorKysgYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC01MSw2ICs1MSw3IEBACiAJCTBGRUIzRENGMUJCNUQ2ODQwMDlEN0FBRCAvKiBTaGFyZWRUYXNr
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVCM0RD
RTFCQjVENjg0MDA5RDdBQUQgLyogU2hhcmVkVGFzay5oICovOyB9OwogCQkwRkVCM0REMTFCQjcz
NjZCMDA5RDdBQUQgLyogUGFyYWxsZWxWZWN0b3JJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQjNERDAxQkI3MzY2QjAwOUQ3QUFEIC8q
IFBhcmFsbGVsVmVjdG9ySXRlcmF0b3IuaCAqLzsgfTsKIAkJMEZFRDY3QjYxQjIyRDREODAwNjZD
RTE1IC8qIFRpbnlQdHJTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRUQ2N0I1MUIyMkQ0RDgwMDY2Q0UxNSAvKiBUaW55UHRyU2V0LmggKi87IH07
CisJCTBGRjg2MDk1MUJDQ0JENzQwMDQ1MTI3RiAvKiBQb2ludGVyQ29tcGFyaXNvbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGODYwOTQxQkNDQkQ3
NDAwNDUxMjdGIC8qIFBvaW50ZXJDb21wYXJpc29uLmggKi87IH07CiAJCTBGRkYxOURDMUJCMzM0
RUIwMDg4NkQ5MSAvKiBQYXJhbGxlbEhlbHBlclBvb2wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGRjE5REExQkIzMzRFQjAwODg2RDkxIC8qIFBh
cmFsbGVsSGVscGVyUG9vbC5jcHAgKi87IH07CiAJCTBGRkYxOUREMUJCMzM0RUIwMDg4NkQ5MSAv
KiBQYXJhbGxlbEhlbHBlclBvb2wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRkYxOURCMUJCMzM0RUIwMDg4NkQ5MSAvKiBQYXJhbGxlbEhlbHBlclBv
b2wuaCAqLzsgfTsKIAkJMTQwMjJGNDExOEY1QzNGQzAwN0ZGMEVCIC8qIGxpYmJtYWxsb2MuYSBp
biBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MDIyRjQw
MThGNUMzRkMwMDdGRjBFQiAvKiBsaWJibWFsbG9jLmEgKi87IH07CkBAIC0zNDQsNiArMzQ1LDcg
QEAKIAkJMEZFQjNEQ0UxQkI1RDY4NDAwOUQ3QUFEIC8qIFNoYXJlZFRhc2suaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2hhcmVkVGFzay5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRkVCM0REMDFCQjczNjZCMDA5RDdBQUQgLyogUGFyYWxsZWxWZWN0b3JJdGVy
YXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXJhbGxlbFZlY3Rvckl0
ZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUQ2N0I1MUIyMkQ0RDgw
MDY2Q0UxNSAvKiBUaW55UHRyU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFRpbnlQdHJTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGODYwOTQxQkND
QkQ3NDAwNDUxMjdGIC8qIFBvaW50ZXJDb21wYXJpc29uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFBvaW50ZXJDb21wYXJpc29uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGRkYxOURBMUJCMzM0RUIwMDg4NkQ5MSAvKiBQYXJhbGxlbEhlbHBlclBvb2wuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFyYWxsZWxIZWxwZXJQb29s
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGRjE5REIxQkIzMzRFQjAwODg2
RDkxIC8qIFBhcmFsbGVsSGVscGVyUG9vbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBQYXJhbGxlbEhlbHBlclBvb2wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MTQwMjJGNDAxOEY1QzNGQzAwN0ZGMEVCIC8qIGxpYmJtYWxsb2MuYSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGFyY2hpdmUuYXI7IHBhdGggPSBsaWJi
bWFsbG9jLmE7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CkBAIC04MzcsNiAr
ODM5LDcgQEAKIAkJCQkwRjgyNEE2NTFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5oICov
LAogCQkJCUE4QTQ3MkVEMTUxQTgyNUIwMDQxMjNGRiAvKiBQYXNzUmVmUHRyLmggKi8sCiAJCQkJ
QTg3NkRCRDcxNTE4MTZFNTAwREFEQjk1IC8qIFBsYXRmb3JtLmggKi8sCisJCQkJMEZGODYwOTQx
QkNDQkQ3NDAwNDUxMjdGIC8qIFBvaW50ZXJDb21wYXJpc29uLmggKi8sCiAJCQkJMEY5RDMzNUQx
NjVEQkE3MzAwNUFEMzg3IC8qIFByaW50U3RyZWFtLmNwcCAqLywKIAkJCQkwRjlEMzM1RTE2NURC
QTczMDA1QUQzODcgLyogUHJpbnRTdHJlYW0uaCAqLywKIAkJCQkwRkM0NDg4MjE2RkU5RkUxMDA4
NDRCRTkgLyogUHJvY2Vzc0lELmggKi8sCkBAIC0xMjA4LDYgKzEyMTEsNyBAQAogCQkJCUE4QTQ3
NDIwMTUxQTgyNUIwMDQxMjNGRiAvKiBTZW50aW5lbExpbmtlZExpc3QuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE4QTQ3NDIyMTUxQTgyNUIwMDQxMjNGRiAvKiBTSEExLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBOEE0NzQyMzE1MUE4MjVCMDA0MTIzRkYgLyogU2ltcGxlU3RhdHMuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGRjg2MDk1MUJDQ0JENzQwMDQ1MTI3RiAvKiBQb2ludGVyQ29tcGFyaXNvbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0MjQxNTFBODI1QjAwNDEyM0ZGIC8qIFNpbmdseUxp
bmtlZExpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NDg3NDUzMTdBMEJEQUUwMEZBMDRDQiAv
KiBTaXhDaGFyYWN0ZXJIYXNoLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQyNjE1MUE4MjVC
MDA0MTIzRkYgLyogU3BlY3RydW0uaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvUG9pbnRlckNvbXBhcmlzb24uaCBiL1NvdXJjZS9XVEYvd3RmL1BvaW50ZXJDb21w
YXJpc29uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZmU2NDI5N2RmOWFmNThiNmNmYzJmZmNjNTRkYWM3OGVjYjFj
YmE4NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL1BvaW50ZXJDb21wYXJpc29u
LmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV1RGX1BvaW50ZXJDb21w
YXJpc29uX2gKKyNkZWZpbmUgV1RGX1BvaW50ZXJDb21wYXJpc29uX2gKKworbmFtZXNwYWNlIFdU
RiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBib29sIGFyZVBvaW50aW5nVG9FcXVh
bERhdGEoY29uc3QgVCYgYSwgY29uc3QgVCYgYikKK3sgCisgICAgcmV0dXJuIGEgPT0gYiB8fCAo
YSAmJiBiICYmICphID09ICpiKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdU
Rjo6YXJlUG9pbnRpbmdUb0VxdWFsRGF0YTsKKworI2VuZGlmIC8vIFdURl9Qb2ludGVyQ29tcGFy
aXNvbl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9DU1NQcm9w
ZXJ0eUFuaW1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9DU1NQcm9w
ZXJ0eUFuaW1hdGlvbi5jcHAKaW5kZXggYjRlNDEwMTg4MTRmNmQ0YjYyNGJiYjBjZDU5Y2Y0MDMw
M2NiZDdjZi4uODE4ZTYyNTkxOTE5ZDI0MjNkMWMzMDUxMTUwMTcwODE3NTQwMzU4NiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0
aW9uLmNwcApAQCAtNTQsNiArNTQsNyBAQAogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUg
PHd0Zi9Qb2ludGVyQ29tcGFyaXNvbi5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQwMCw5ICs0MDEsNyBAQCBwdWJsaWM6CiAKICAgICB2
aXJ0dWFsIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHls
ZSogYikgY29uc3QKICAgICB7Ci0gICAgICAgIC8vIElmIHRoZSBzdHlsZSBwb2ludGVycyBhcmUg
dGhlIHNhbWUsIGRvbid0IGJvdGhlciBkb2luZyB0aGUgdGVzdC4KLSAgICAgICAgLy8gSWYgZWl0
aGVyIGlzIG51bGwsIHJldHVybiBmYWxzZS4gSWYgYm90aCBhcmUgbnVsbCwgcmV0dXJuIHRydWUu
Ci0gICAgICAgIGlmICgoIWEgJiYgIWIpIHx8IGEgPT0gYikKKyAgICAgICAgaWYgKGEgPT0gYikK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBpZiAoIWEgfHwgIWIpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC01MzYsOCArNTM1LDYgQEAgcHVibGljOgogCiAgICAgdmly
dHVhbCBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUq
IGIpIGNvbnN0CiAgICAgewotICAgICAgIC8vIElmIHRoZSBzdHlsZSBwb2ludGVycyBhcmUgdGhl
IHNhbWUsIGRvbid0IGJvdGhlciBkb2luZyB0aGUgdGVzdC4KLSAgICAgICAvLyBJZiBlaXRoZXIg
aXMgbnVsbCwgcmV0dXJuIGZhbHNlLiBJZiBib3RoIGFyZSBudWxsLCByZXR1cm4gdHJ1ZS4KICAg
ICAgICBpZiAoYSA9PSBiKQogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICBpZiAoIWEg
fHwgIWIpCkBAIC01NDUsNyArNTQyLDcgQEAgcHVibGljOgogCiAgICAgICAgIFN0eWxlSW1hZ2Uq
IGltYWdlQSA9IChhLT4qbV9nZXR0ZXIpKCk7CiAgICAgICAgIFN0eWxlSW1hZ2UqIGltYWdlQiA9
IChiLT4qbV9nZXR0ZXIpKCk7Ci0gICAgICAgIHJldHVybiBTdHlsZUltYWdlOjppbWFnZXNFcXVp
dmFsZW50KGltYWdlQSwgaW1hZ2VCKTsKKyAgICAgICAgcmV0dXJuIGFyZVBvaW50aW5nVG9FcXVh
bERhdGEoaW1hZ2VBLCBpbWFnZUIpOwogICAgIH0KIH07CiAKQEAgLTY3NCw2ICs2NzEsMTEgQEAg
cHVibGljOgogCiAgICAgdmlydHVhbCBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwg
Y29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0CiAgICAgeworICAgICAgICBpZiAoYSA9PSBiKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICghYSB8fCAhYikKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKwogICAgICAgICBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3dBID0g
KGEtPiptX2dldHRlcikoKTsKICAgICAgICAgY29uc3QgU2hhZG93RGF0YSogc2hhZG93QiA9IChi
LT4qbV9nZXR0ZXIpKCk7CiAKQEAgLTc5MCw2ICs3OTIsMTEgQEAgcHVibGljOgogCiAgICAgdmly
dHVhbCBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUq
IGIpIGNvbnN0CiAgICAgeworICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIGlmICghYSB8fCAhYikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KwogICAgICAgICBDb2xvciBmcm9tQ29sb3IgPSAoYS0+Km1fZ2V0dGVyKSgpOwogICAgICAgICBD
b2xvciB0b0NvbG9yID0gKGItPiptX2dldHRlcikoKTsKIApAQCAtODg0LDExICs4OTEsOSBAQCBw
dWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgZXF1YWxzKGNvbnN0IEZpbGxMYXllciogYSwgY29u
c3QgRmlsbExheWVyKiBiKSBjb25zdAogICAgIHsKLSAgICAgICAvLyBJZiB0aGUgc3R5bGUgcG9p
bnRlcnMgYXJlIHRoZSBzYW1lLCBkb24ndCBib3RoZXIgZG9pbmcgdGhlIHRlc3QuCi0gICAgICAg
Ly8gSWYgZWl0aGVyIGlzIG51bGwsIHJldHVybiBmYWxzZS4gSWYgYm90aCBhcmUgbnVsbCwgcmV0
dXJuIHRydWUuCi0gICAgICAgaWYgKCghYSAmJiAhYikgfHwgYSA9PSBiKQotICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICBpZiAoIWEgfHwgIWIpCisgICAgICAgIGlmIChhID09IGIpCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFhIHx8ICFiKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICByZXR1cm4gKGEtPiptX2dldHRlcikoKSA9PSAoYi0+
Km1fZ2V0dGVyKSgpOwogICAgIH0KQEAgLTk0NSw4ICs5NTAsNiBAQCBwdWJsaWM6CiAKICAgICB2
aXJ0dWFsIGJvb2wgZXF1YWxzKGNvbnN0IEZpbGxMYXllciogYSwgY29uc3QgRmlsbExheWVyKiBi
KSBjb25zdAogICAgIHsKLSAgICAgICAvLyBJZiB0aGUgc3R5bGUgcG9pbnRlcnMgYXJlIHRoZSBz
YW1lLCBkb24ndCBib3RoZXIgZG9pbmcgdGhlIHRlc3QuCi0gICAgICAgLy8gSWYgZWl0aGVyIGlz
IG51bGwsIHJldHVybiBmYWxzZS4gSWYgYm90aCBhcmUgbnVsbCwgcmV0dXJuIHRydWUuCiAgICAg
ICAgaWYgKGEgPT0gYikKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgaWYgKCFhIHx8
ICFiKQpAQCAtOTU0LDcgKzk1Nyw3IEBAIHB1YmxpYzoKIAogICAgICAgICBTdHlsZUltYWdlKiBp
bWFnZUEgPSAoYS0+Km1fZ2V0dGVyKSgpOwogICAgICAgICBTdHlsZUltYWdlKiBpbWFnZUIgPSAo
Yi0+Km1fZ2V0dGVyKSgpOwotICAgICAgICByZXR1cm4gU3R5bGVJbWFnZTo6aW1hZ2VzRXF1aXZh
bGVudChpbWFnZUEsIGltYWdlQik7CisgICAgICAgIHJldHVybiBhcmVQb2ludGluZ1RvRXF1YWxE
YXRhKGltYWdlQSwgaW1hZ2VCKTsKICAgICB9CiB9OwogCkBAIC05OTMsNiArOTk2LDExIEBAIHB1
YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNv
bnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdAogICAgIHsKKyAgICAgICAgaWYgKGEgPT0gYikKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoIWEgfHwgIWIpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisKICAgICAgICAgY29uc3QgRmlsbExheWVyKiBmcm9tTGF5ZXIgPSAo
YS0+Km1fbGF5ZXJzR2V0dGVyKSgpOwogICAgICAgICBjb25zdCBGaWxsTGF5ZXIqIHRvTGF5ZXIg
PSAoYi0+Km1fbGF5ZXJzR2V0dGVyKSgpOwogCkBAIC0xMDQxLDYgKzEwNDksMTEgQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3Qg
UmVuZGVyU3R5bGUqIGIpIGNvbnN0CiAgICAgeworICAgICAgICBpZiAoYSA9PSBiKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICghYSB8fCAhYikKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKwogICAgICAgICBmb3IgKGF1dG8mIHdyYXBwZXIgOiBtX3Byb3BlcnR5V3Jh
cHBlcnMpIHsKICAgICAgICAgICAgIGlmICghd3JhcHBlci0+ZXF1YWxzKGEsIGIpKQogICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEwNzAsOSArMTA4Myw3IEBAIHB1YmxpYzoKIAog
ICAgIHZpcnR1YWwgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRl
clN0eWxlKiBiKSBjb25zdAogICAgIHsKLSAgICAgICAgLy8gSWYgdGhlIHN0eWxlIHBvaW50ZXJz
IGFyZSB0aGUgc2FtZSwgZG9uJ3QgYm90aGVyIGRvaW5nIHRoZSB0ZXN0LgotICAgICAgICAvLyBJ
ZiBlaXRoZXIgaXMgbnVsbCwgcmV0dXJuIGZhbHNlLiBJZiBib3RoIGFyZSBudWxsLCByZXR1cm4g
dHJ1ZS4KLSAgICAgICAgaWYgKCghYSAmJiAhYikgfHwgYSA9PSBiKQorICAgICAgICBpZiAoYSA9
PSBiKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGlmICghYSB8fCAhYikKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTExMDEsNiArMTExMiwxMSBAQCBwdWJsaWM6CiAK
ICAgICB2aXJ0dWFsIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5k
ZXJTdHlsZSogYikgY29uc3QKICAgICB7CisgICAgICAgIGlmIChhID09IGIpCisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFhIHx8ICFiKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCiAgICAgICAgIGlmICgoYS0+Km1fcGFpbnRUeXBlR2V0dGVyKSgpICE9IChiLT4q
bV9wYWludFR5cGVHZXR0ZXIpKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFz
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJh
c2UuY3BwCmluZGV4IGQ0MWViYjEwODAwNjFmNmFkZWZiYzgyN2FjN2JjMjI5NzkxZjIyZjcuLjAw
NTk3ZWRkZGJmMjFkZDNmNmU5NTBmMTFkZDA1YWVkMWNlNDJjOTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcApA
QCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiSFRUUEhlYWRlck5hbWVzLmgiCiAjaW5jbHVk
ZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCisjaW5jbHVkZSA8d3RmL1BvaW50ZXJDb21wYXJpc29uLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTAwLDE4ICs1MDEsNyBAQCBib29sIGVxdWFs
SWdub3JpbmdIZWFkZXJGaWVsZHMoY29uc3QgUmVzb3VyY2VSZXF1ZXN0QmFzZSYgYSwgY29uc3Qg
UmVzb3VyY2VSZXF1ZQogICAgIGlmIChhLnJlcXVlc3RlcigpICE9IGIucmVxdWVzdGVyKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEZvcm1EYXRhKiBmb3JtRGF0YUEgPSBhLmh0dHBC
b2R5KCk7Ci0gICAgRm9ybURhdGEqIGZvcm1EYXRhQiA9IGIuaHR0cEJvZHkoKTsKLSAgICAKLSAg
ICBpZiAoIWZvcm1EYXRhQSkKLSAgICAgICAgcmV0dXJuICFmb3JtRGF0YUI7Ci0gICAgaWYgKCFm
b3JtRGF0YUIpCi0gICAgICAgIHJldHVybiAhZm9ybURhdGFBOwotICAgIAotICAgIGlmICgqZm9y
bURhdGFBICE9ICpmb3JtRGF0YUIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gYXJlUG9pbnRpbmdUb0VxdWFsRGF0YShhLmh0dHBCb2R5
KCksIGIuaHR0cEJvZHkoKSk7CiB9CiAKIGJvb2wgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6Y29tcGFy
ZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIGEsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgYikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9GaWxsTGF5ZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0ZpbGxMYXllci5jcHAKaW5kZXggMzdkYWI1
ODA2ZjMzMTY0MTBiYzlkMDAxZjNlODhhY2NkOTFjYjUyMi4uNDUyNGIwMDY0ZTg0MmFhNjJkNmVl
MWQwMWIxNmVmMjFhZmVhOGFmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N0eWxlL0ZpbGxMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L0ZpbGxMYXllci5jcHAKQEAgLTIyLDYgKzIyLDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJGaWxsTGF5ZXIuaCIKIAorI2luY2x1ZGUgPHd0Zi9Qb2ludGVyQ29tcGFyaXNvbi5o
PgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0cnVjdCBTYW1lU2l6ZUFzRmlsbExheWVyIHsK
QEAgLTE1Miw3ICsxNTQsNyBAQCBib29sIEZpbGxMYXllcjo6b3BlcmF0b3I9PShjb25zdCBGaWxs
TGF5ZXImIG8pIGNvbnN0CiB7CiAgICAgLy8gV2UgZG8gbm90IGNoZWNrIHRoZSAiaXNTZXQiIGJv
b2xlYW5zIGZvciBlYWNoIHByb3BlcnR5LCBzaW5jZSB0aG9zZSBhcmUgb25seSB1c2VkIGR1cmlu
ZyBpbml0aWFsIGNvbnN0cnVjdGlvbgogICAgIC8vIHRvIHByb3BhZ2F0ZSBwYXR0ZXJucyBpbnRv
IGxheWVycy4gQWxsIGxheWVyIGNvbXBhcmlzb25zIGhhcHBlbiBhZnRlciB2YWx1ZXMgaGF2ZSBh
bGwgYmVlbiBmaWxsZWQgaW4gYW55d2F5LgotICAgIHJldHVybiBTdHlsZUltYWdlOjppbWFnZXNF
cXVpdmFsZW50KG1faW1hZ2UuZ2V0KCksIG8ubV9pbWFnZS5nZXQoKSkgJiYgbV94UG9zaXRpb24g
PT0gby5tX3hQb3NpdGlvbiAmJiBtX3lQb3NpdGlvbiA9PSBvLm1feVBvc2l0aW9uCisgICAgcmV0
dXJuIGFyZVBvaW50aW5nVG9FcXVhbERhdGEobV9pbWFnZS5nZXQoKSwgby5tX2ltYWdlLmdldCgp
KSAmJiBtX3hQb3NpdGlvbiA9PSBvLm1feFBvc2l0aW9uICYmIG1feVBvc2l0aW9uID09IG8ubV95
UG9zaXRpb24KICAgICAgICAgJiYgbV9iYWNrZ3JvdW5kWE9yaWdpbiA9PSBvLm1fYmFja2dyb3Vu
ZFhPcmlnaW4gJiYgbV9iYWNrZ3JvdW5kWU9yaWdpbiA9PSBvLm1fYmFja2dyb3VuZFlPcmlnaW4K
ICAgICAgICAgJiYgbV9hdHRhY2htZW50ID09IG8ubV9hdHRhY2htZW50ICYmIG1fY2xpcCA9PSBv
Lm1fY2xpcCAmJiBtX2NvbXBvc2l0ZSA9PSBvLm1fY29tcG9zaXRlCiAgICAgICAgICYmIG1fYmxl
bmRNb2RlID09IG8ubV9ibGVuZE1vZGUgJiYgbV9vcmlnaW4gPT0gby5tX29yaWdpbiAmJiBtX3Jl
cGVhdFggPT0gby5tX3JlcGVhdFgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9OaW5lUGllY2VJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5
bGUvTmluZVBpZWNlSW1hZ2UuY3BwCmluZGV4IDE0MzRiZjdiZTQzNWIzZDRjNmJhYWJiMjQ3NmY2
OTkxZDhhNTg3NzkuLmFhMTFjZGRjOTRiZmRlNDRjYWQ3YzVhZjA4YzQ2NTFiZjU5M2JjZjUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9OaW5lUGllY2VJbWFnZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL05pbmVQaWVjZUltYWdlLmNw
cApAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkxlbmd0aEZ1bmN0aW9ucy5oIgogI2luY2x1
ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5j
bHVkZSA8d3RmL1BvaW50ZXJDb21wYXJpc29uLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApA
QCAtMjUyLDcgKzI1Myw3IEBAIFJlZjxOaW5lUGllY2VJbWFnZURhdGE+IE5pbmVQaWVjZUltYWdl
RGF0YTo6Y29weSgpIGNvbnN0CiAKIGJvb2wgTmluZVBpZWNlSW1hZ2VEYXRhOjpvcGVyYXRvcj09
KGNvbnN0IE5pbmVQaWVjZUltYWdlRGF0YSYgb3RoZXIpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFN0
eWxlSW1hZ2U6OmltYWdlc0VxdWl2YWxlbnQoaW1hZ2UuZ2V0KCksIG90aGVyLmltYWdlLmdldCgp
KQorICAgIHJldHVybiBhcmVQb2ludGluZ1RvRXF1YWxEYXRhKGltYWdlLCBvdGhlci5pbWFnZSkK
ICAgICAgICAgJiYgaW1hZ2VTbGljZXMgPT0gb3RoZXIuaW1hZ2VTbGljZXMKICAgICAgICAgJiYg
ZmlsbCA9PSBvdGhlci5maWxsCiAgICAgICAgICYmIGJvcmRlclNsaWNlcyA9PSBvdGhlci5ib3Jk
ZXJTbGljZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5k
ZXJTdHlsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUu
Y3BwCmluZGV4IDJiZGViMTk3YjMzYWU4NWUwZmJkZWUzMDY5YTdiOTNkOTc0ZjlhMDguLjcyZDIx
Yjk4YTM4ZTFjMTNmYTBkNTc2ZDVhYzI0MzdhMzY2Zjk3NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcApAQCAtNDIsNiArNDIsNyBAQAogI2lu
Y2x1ZGUgIlN0eWxlU2VsZkFsaWdubWVudERhdGEuaCIKICNpbmNsdWRlICJXaWxsQ2hhbmdlRGF0
YS5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1BvaW50ZXJD
b21wYXJpc29uLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPGFs
Z29yaXRobT4KIApAQCAtMzEwLDEwICszMTEsMTAgQEAgYm9vbCBSZW5kZXJTdHlsZTo6aGFzVW5p
cXVlUHNldWRvU3R5bGUoKSBjb25zdAogUmVuZGVyU3R5bGUqIFJlbmRlclN0eWxlOjpnZXRDYWNo
ZWRQc2V1ZG9TdHlsZShQc2V1ZG9JZCBwaWQpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2NhY2hlZFBz
ZXVkb1N0eWxlcyB8fCAhbV9jYWNoZWRQc2V1ZG9TdHlsZXMtPnNpemUoKSkKLSAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgaWYgKHN0eWxlVHlwZSgpICE9
IE5PUFNFVURPKSAKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwog
CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NhY2hlZFBzZXVkb1N0eWxlcy0+c2l6ZSgp
OyArK2kpIHsKICAgICAgICAgUmVuZGVyU3R5bGUqIHBzZXVkb1N0eWxlID0gbV9jYWNoZWRQc2V1
ZG9TdHlsZXMtPmF0KGkpLmdldCgpOwpAQCAtMzIxLDEzICszMjIsMTMgQEAgUmVuZGVyU3R5bGUq
IFJlbmRlclN0eWxlOjpnZXRDYWNoZWRQc2V1ZG9TdHlsZShQc2V1ZG9JZCBwaWQpIGNvbnN0CiAg
ICAgICAgICAgICByZXR1cm4gcHNldWRvU3R5bGU7CiAgICAgfQogCi0gICAgcmV0dXJuIDA7Cisg
ICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIFJlbmRlclN0eWxlKiBSZW5kZXJTdHlsZTo6YWRkQ2Fj
aGVkUHNldWRvU3R5bGUoUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gcHNldWRvKQogewogICAgIGlm
ICghcHNldWRvKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
ICAgICBBU1NFUlQocHNldWRvLT5zdHlsZVR5cGUoKSA+IE5PUFNFVURPKTsKIApAQCAtNDU5LDEx
ICs0NjAsMTEgQEAgc3RhdGljIGJvb2wgcG9zaXRpb25DaGFuZ2VJc01vdmVtZW50T25seShjb25z
dCBMZW5ndGhCb3gmIGEsIGNvbnN0IExlbmd0aEJveCYgYiwKIGlubGluZSBib29sIFJlbmRlclN0
eWxlOjpjaGFuZ2VBZmZlY3RzVmlzdWFsT3ZlcmZsb3coY29uc3QgUmVuZGVyU3R5bGUmIG90aGVy
KSBjb25zdAogewogICAgIGlmIChyYXJlTm9uSW5oZXJpdGVkRGF0YS5nZXQoKSAhPSBvdGhlci5y
YXJlTm9uSW5oZXJpdGVkRGF0YS5nZXQoKQotICAgICAgICAmJiAhcmFyZU5vbkluaGVyaXRlZERh
dGEtPnNoYWRvd0RhdGFFcXVpdmFsZW50KCpvdGhlci5yYXJlTm9uSW5oZXJpdGVkRGF0YS5nZXQo
KSkpCisgICAgICAgICYmICFhcmVQb2ludGluZ1RvRXF1YWxEYXRhKHJhcmVOb25Jbmhlcml0ZWRE
YXRhLT5tX2JveFNoYWRvdywgb3RoZXIucmFyZU5vbkluaGVyaXRlZERhdGEtPm1fYm94U2hhZG93
KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBpZiAocmFyZUluaGVyaXRlZERhdGEuZ2V0
KCkgIT0gb3RoZXIucmFyZUluaGVyaXRlZERhdGEuZ2V0KCkKLSAgICAgICAgJiYgIXJhcmVJbmhl
cml0ZWREYXRhLT5zaGFkb3dEYXRhRXF1aXZhbGVudCgqb3RoZXIucmFyZUluaGVyaXRlZERhdGEu
Z2V0KCkpKQorICAgICAgICAmJiAhYXJlUG9pbnRpbmdUb0VxdWFsRGF0YShyYXJlSW5oZXJpdGVk
RGF0YS0+dGV4dFNoYWRvdywgb3RoZXIucmFyZUluaGVyaXRlZERhdGEtPnRleHRTaGFkb3cpKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGlmIChpbmhlcml0ZWRfZmxhZ3MuX3RleHRfZGVj
b3JhdGlvbnMgIT0gb3RoZXIuaW5oZXJpdGVkX2ZsYWdzLl90ZXh0X2RlY29yYXRpb25zCkBAIC01
MjMsMTMgKzUyNCwxMiBAQCBib29sIFJlbmRlclN0eWxlOjpjaGFuZ2VSZXF1aXJlc0xheW91dChj
b25zdCBSZW5kZXJTdHlsZSYgb3RoZXIsIHVuc2lnbmVkJiBjaGFuZwogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAjZW5kaWYKIAotICAgICAgICBpZiAocmFyZU5vbkluaGVyaXRlZERhdGEtPm1f
ZGVwcmVjYXRlZEZsZXhpYmxlQm94LmdldCgpICE9IG90aGVyLnJhcmVOb25Jbmhlcml0ZWREYXRh
LT5tX2RlcHJlY2F0ZWRGbGV4aWJsZUJveC5nZXQoKQotICAgICAgICAgICAgJiYgKnJhcmVOb25J
bmhlcml0ZWREYXRhLT5tX2RlcHJlY2F0ZWRGbGV4aWJsZUJveC5nZXQoKSAhPSAqb3RoZXIucmFy
ZU5vbkluaGVyaXRlZERhdGEtPm1fZGVwcmVjYXRlZEZsZXhpYmxlQm94LmdldCgpKQorICAgICAg
ICBpZiAocmFyZU5vbkluaGVyaXRlZERhdGEtPm1fZGVwcmVjYXRlZEZsZXhpYmxlQm94ICE9IG90
aGVyLnJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX2RlcHJlY2F0ZWRGbGV4aWJsZUJveCkKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgICAgIGlmIChyYXJlTm9uSW5oZXJpdGVkRGF0YS0+
bV9mbGV4aWJsZUJveC5nZXQoKSAhPSBvdGhlci5yYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9mbGV4
aWJsZUJveC5nZXQoKQotICAgICAgICAgICAgJiYgKnJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX2Zs
ZXhpYmxlQm94LmdldCgpICE9ICpvdGhlci5yYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9mbGV4aWJs
ZUJveC5nZXQoKSkKKyAgICAgICAgaWYgKHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX2ZsZXhpYmxl
Qm94ICE9IG90aGVyLnJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX2ZsZXhpYmxlQm94KQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisKICAgICAgICAgaWYgKHJhcmVOb25Jbmhlcml0ZWREYXRhLT5t
X29yZGVyICE9IG90aGVyLnJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX29yZGVyCiAgICAgICAgICAg
ICB8fCByYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9hbGlnbkNvbnRlbnQgIT0gb3RoZXIucmFyZU5v
bkluaGVyaXRlZERhdGEtPm1fYWxpZ25Db250ZW50CiAgICAgICAgICAgICB8fCByYXJlTm9uSW5o
ZXJpdGVkRGF0YS0+bV9hbGlnbkl0ZW1zICE9IG90aGVyLnJhcmVOb25Jbmhlcml0ZWREYXRhLT5t
X2FsaWduSXRlbXMKQEAgLTUzOSwxMSArNTM5LDEwIEBAIGJvb2wgUmVuZGVyU3R5bGU6OmNoYW5n
ZVJlcXVpcmVzTGF5b3V0KGNvbnN0IFJlbmRlclN0eWxlJiBvdGhlciwgdW5zaWduZWQmIGNoYW5n
CiAgICAgICAgICAgICB8fCByYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9qdXN0aWZ5U2VsZiAhPSBv
dGhlci5yYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9qdXN0aWZ5U2VsZikKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogCi0gICAgICAgIGlmICghcmFyZU5vbkluaGVyaXRlZERhdGEtPnJlZmxlY3Rp
b25EYXRhRXF1aXZhbGVudCgqb3RoZXIucmFyZU5vbkluaGVyaXRlZERhdGEuZ2V0KCkpKQorICAg
ICAgICBpZiAoIWFyZVBvaW50aW5nVG9FcXVhbERhdGEocmFyZU5vbkluaGVyaXRlZERhdGEtPm1f
Ym94UmVmbGVjdCwgb3RoZXIucmFyZU5vbkluaGVyaXRlZERhdGEtPm1fYm94UmVmbGVjdCkpCiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgICAgICBpZiAocmFyZU5vbkluaGVyaXRlZERh
dGEtPm1fbXVsdGlDb2wuZ2V0KCkgIT0gb3RoZXIucmFyZU5vbkluaGVyaXRlZERhdGEtPm1fbXVs
dGlDb2wuZ2V0KCkKLSAgICAgICAgICAgICYmICpyYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9tdWx0
aUNvbC5nZXQoKSAhPSAqb3RoZXIucmFyZU5vbkluaGVyaXRlZERhdGEtPm1fbXVsdGlDb2wuZ2V0
KCkpCisgICAgICAgIGlmIChyYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9tdWx0aUNvbCAhPSBvdGhl
ci5yYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9tdWx0aUNvbCkKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogCiAgICAgICAgIGlmIChyYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV90cmFuc2Zvcm0gIT0g
b3RoZXIucmFyZU5vbkluaGVyaXRlZERhdGEtPm1fdHJhbnNmb3JtKSB7CkBAIC01NTYsOCArNTU1
LDggQEAgYm9vbCBSZW5kZXJTdHlsZTo6Y2hhbmdlUmVxdWlyZXNMYXlvdXQoY29uc3QgUmVuZGVy
U3R5bGUmIG90aGVyLCB1bnNpZ25lZCYgY2hhbmcKICAgICAgICAgfQogCiAjaWYgRU5BQkxFKENT
U19HUklEX0xBWU9VVCkKLSAgICAgICAgaWYgKHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX2dyaWQu
Z2V0KCkgIT0gb3RoZXIucmFyZU5vbkluaGVyaXRlZERhdGEtPm1fZ3JpZC5nZXQoKQotICAgICAg
ICAgICAgfHwgcmFyZU5vbkluaGVyaXRlZERhdGEtPm1fZ3JpZEl0ZW0uZ2V0KCkgIT0gb3RoZXIu
cmFyZU5vbkluaGVyaXRlZERhdGEtPm1fZ3JpZEl0ZW0uZ2V0KCkpCisgICAgICAgIGlmIChyYXJl
Tm9uSW5oZXJpdGVkRGF0YS0+bV9ncmlkICE9IG90aGVyLnJhcmVOb25Jbmhlcml0ZWREYXRhLT5t
X2dyaWQKKyAgICAgICAgICAgIHx8IHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX2dyaWRJdGVtICE9
IG90aGVyLnJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX2dyaWRJdGVtKQogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAjZW5kaWYKIApAQCAtNTY3LDcgKzU2Niw3IEBAIGJvb2wgUmVuZGVyU3R5bGU6
OmNoYW5nZVJlcXVpcmVzTGF5b3V0KGNvbnN0IFJlbmRlclN0eWxlJiBvdGhlciwgdW5zaWduZWQm
IGNoYW5nCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgogCi0gICAgICAgIGlmICgh
cmFyZU5vbkluaGVyaXRlZERhdGEtPndpbGxDaGFuZ2VEYXRhRXF1aXZhbGVudCgqb3RoZXIucmFy
ZU5vbkluaGVyaXRlZERhdGEuZ2V0KCkpKSB7CisgICAgICAgIGlmICghYXJlUG9pbnRpbmdUb0Vx
dWFsRGF0YShyYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV93aWxsQ2hhbmdlLCBvdGhlci5yYXJlTm9u
SW5oZXJpdGVkRGF0YS0+bV93aWxsQ2hhbmdlKSkgewogICAgICAgICAgICAgY2hhbmdlZENvbnRl
eHRTZW5zaXRpdmVQcm9wZXJ0aWVzIHw9IENvbnRleHRTZW5zaXRpdmVQcm9wZXJ0eVdpbGxDaGFu
Z2U7CiAgICAgICAgICAgICAvLyBEb24ndCByZXR1cm47IGtlZXAgbG9va2luZyBmb3IgYW5vdGhl
ciBjaGFuZ2UKICAgICAgICAgfQpAQCAtNjE2LDcgKzYxNSw3IEBAIGJvb2wgUmVuZGVyU3R5bGU6
OmNoYW5nZVJlcXVpcmVzTGF5b3V0KGNvbnN0IFJlbmRlclN0eWxlJiBvdGhlciwgdW5zaWduZWQm
IGNoYW5nCiAjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEX09WRVJGTE9XX1NDUk9MTElORykKICAgICAg
ICAgICAgIHx8IHJhcmVJbmhlcml0ZWREYXRhLT51c2VUb3VjaE92ZXJmbG93U2Nyb2xsaW5nICE9
IG90aGVyLnJhcmVJbmhlcml0ZWREYXRhLT51c2VUb3VjaE92ZXJmbG93U2Nyb2xsaW5nCiAjZW5k
aWYKLSAgICAgICAgICAgIHx8IHJhcmVJbmhlcml0ZWREYXRhLT5saXN0U3R5bGVJbWFnZSAhPSBv
dGhlci5yYXJlSW5oZXJpdGVkRGF0YS0+bGlzdFN0eWxlSW1hZ2UpCisgICAgICAgICAgICB8fCBy
YXJlSW5oZXJpdGVkRGF0YS0+bGlzdFN0eWxlSW1hZ2UgIT0gb3RoZXIucmFyZUluaGVyaXRlZERh
dGEtPmxpc3RTdHlsZUltYWdlKSAvLyBGSVhNRTogbmVlZHMgYXJlUG9pbnRpbmdUb0VxdWFsRGF0
YSgpPwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAgICAgaWYgKHRleHRTdHJva2VX
aWR0aCgpICE9IG90aGVyLnRleHRTdHJva2VXaWR0aCgpKQpAQCAtNzAwLDkgKzY5OSw3IEBAIGJv
b2wgUmVuZGVyU3R5bGU6OmNoYW5nZVJlcXVpcmVzTGF5b3V0KGNvbnN0IFJlbmRlclN0eWxlJiBv
dGhlciwgdW5zaWduZWQmIGNoYW5nCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gSWYg
dGhlIGNvdW50ZXIgZGlyZWN0aXZlcyBjaGFuZ2UsIHRyaWdnZXIgYSByZWxheW91dCB0byByZS1j
YWxjdWxhdGUgY291bnRlciB2YWx1ZXMgYW5kIHJlYnVpbGQgdGhlIGNvdW50ZXIgbm9kZSB0cmVl
LgotICAgIGNvbnN0IENvdW50ZXJEaXJlY3RpdmVNYXAqIG1hcEEgPSByYXJlTm9uSW5oZXJpdGVk
RGF0YS0+bV9jb3VudGVyRGlyZWN0aXZlcy5nZXQoKTsKLSAgICBjb25zdCBDb3VudGVyRGlyZWN0
aXZlTWFwKiBtYXBCID0gb3RoZXIucmFyZU5vbkluaGVyaXRlZERhdGEtPm1fY291bnRlckRpcmVj
dGl2ZXMuZ2V0KCk7Ci0gICAgaWYgKCEobWFwQSA9PSBtYXBCIHx8IChtYXBBICYmIG1hcEIgJiYg
Km1hcEEgPT0gKm1hcEIpKSkKKyAgICBpZiAoIWFyZVBvaW50aW5nVG9FcXVhbERhdGEocmFyZU5v
bkluaGVyaXRlZERhdGEtPm1fY291bnRlckRpcmVjdGl2ZXMsIG90aGVyLnJhcmVOb25Jbmhlcml0
ZWREYXRhLT5tX2NvdW50ZXJEaXJlY3RpdmVzKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAg
ICBpZiAoKHZpc2liaWxpdHkoKSA9PSBDT0xMQVBTRSkgIT0gKG90aGVyLnZpc2liaWxpdHkoKSA9
PSBDT0xMQVBTRSkpCkBAIC03MjUsOSArNzIyLDcgQEAgYm9vbCBSZW5kZXJTdHlsZTo6Y2hhbmdl
UmVxdWlyZXNMYXlvdXQoY29uc3QgUmVuZGVyU3R5bGUmIG90aGVyLCB1bnNpZ25lZCYgY2hhbmcK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKIAotICAgIGNvbnN0IFF1b3Rlc0RhdGEqIHF1
b3Rlc0RhdGFBID0gcmFyZUluaGVyaXRlZERhdGEtPnF1b3Rlcy5nZXQoKTsKLSAgICBjb25zdCBR
dW90ZXNEYXRhKiBxdW90ZXNEYXRhQiA9IG90aGVyLnJhcmVJbmhlcml0ZWREYXRhLT5xdW90ZXMu
Z2V0KCk7Ci0gICAgaWYgKCEocXVvdGVzRGF0YUEgPT0gcXVvdGVzRGF0YUIgfHwgKHF1b3Rlc0Rh
dGFBICYmIHF1b3Rlc0RhdGFCICYmICpxdW90ZXNEYXRhQSA9PSAqcXVvdGVzRGF0YUIpKSkKKyAg
ICBpZiAoIWFyZVBvaW50aW5nVG9FcXVhbERhdGEocmFyZUluaGVyaXRlZERhdGEtPnF1b3Rlcywg
b3RoZXIucmFyZUluaGVyaXRlZERhdGEtPnF1b3RlcykpCiAgICAgICAgIHJldHVybiB0cnVlOwog
CiAgICAgaWYgKHBvc2l0aW9uKCkgIT0gU3RhdGljUG9zaXRpb24pIHsKQEAgLTc4NCw4ICs3Nzks
NyBAQCBib29sIFJlbmRlclN0eWxlOjpjaGFuZ2VSZXF1aXJlc0xheWVyUmVwYWludChjb25zdCBS
ZW5kZXJTdHlsZSYgb3RoZXIsIHVuc2lnbmVkJgogICAgICAgICAvLyBEb24ndCByZXR1cm47IGtl
ZXAgbG9va2luZyBmb3IgYW5vdGhlciBjaGFuZ2UuCiAgICAgfQogCi0gICAgaWYgKHJhcmVOb25J
bmhlcml0ZWREYXRhLT5tX2ZpbHRlci5nZXQoKSAhPSBvdGhlci5yYXJlTm9uSW5oZXJpdGVkRGF0
YS0+bV9maWx0ZXIuZ2V0KCkKLSAgICAgICAgJiYgKnJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX2Zp
bHRlci5nZXQoKSAhPSAqb3RoZXIucmFyZU5vbkluaGVyaXRlZERhdGEtPm1fZmlsdGVyLmdldCgp
KSB7CisgICAgaWYgKHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX2ZpbHRlciAhPSBvdGhlci5yYXJl
Tm9uSW5oZXJpdGVkRGF0YS0+bV9maWx0ZXIpIHsKICAgICAgICAgY2hhbmdlZENvbnRleHRTZW5z
aXRpdmVQcm9wZXJ0aWVzIHw9IENvbnRleHRTZW5zaXRpdmVQcm9wZXJ0eUZpbHRlcjsKICAgICAg
ICAgLy8gRG9uJ3QgcmV0dXJuOyBrZWVwIGxvb2tpbmcgZm9yIGFub3RoZXIgY2hhbmdlLgogICAg
IH0KQEAgLTk0Niw4ICs5NDAsNyBAQCB2b2lkIFJlbmRlclN0eWxlOjpzZXRRdW90ZXMoUGFzc1Jl
ZlB0cjxRdW90ZXNEYXRhPiBxKQogCiB2b2lkIFJlbmRlclN0eWxlOjpzZXRXaWxsQ2hhbmdlKFBh
c3NSZWZQdHI8V2lsbENoYW5nZURhdGE+IHdpbGxDaGFuZ2VEYXRhKQogewotICAgIGlmIChyYXJl
Tm9uSW5oZXJpdGVkRGF0YS0+bV93aWxsQ2hhbmdlID09IHdpbGxDaGFuZ2VEYXRhCi0gICAgICAg
IHx8IChyYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV93aWxsQ2hhbmdlICYmIHdpbGxDaGFuZ2VEYXRh
ICYmICpyYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV93aWxsQ2hhbmdlID09ICp3aWxsQ2hhbmdlRGF0
YSkpCisgICAgaWYgKGFyZVBvaW50aW5nVG9FcXVhbERhdGEocmFyZU5vbkluaGVyaXRlZERhdGEt
Pm1fd2lsbENoYW5nZS5nZXQoKSwgd2lsbENoYW5nZURhdGEuZ2V0KCkpKQogICAgICAgICByZXR1
cm47CiAKICAgICByYXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+bV93aWxsQ2hhbmdlID0g
V1RGOjptb3ZlKHdpbGxDaGFuZ2VEYXRhKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdHlsZS9TVkdSZW5kZXJTdHlsZURlZnMuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL1NWR1JlbmRlclN0eWxlRGVmcy5jcHAKaW5kZXggN2Q2OWQ4NDNiNjViNDlh
NTc0NDlmNDcyNjdjYTcwZTBlYzJjNGI1NS4uMjBkZWQ4YjhiYzBiNGVkNzRjMzZiOTFjMmJmODQ1
N2U4YzhjOTQ1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NW
R1JlbmRlclN0eWxlRGVmcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L1NWR1JlbmRlclN0eWxlRGVmcy5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2luY2x1ZGUgIlJl
bmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlIDx3dGYv
UG9pbnRlckNvbXBhcmlzb24uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0yMTYsMTEg
KzIxNyw3IEBAIFJlZjxTdHlsZVNoYWRvd1NWR0RhdGE+IFN0eWxlU2hhZG93U1ZHRGF0YTo6Y29w
eSgpIGNvbnN0CiAKIGJvb2wgU3R5bGVTaGFkb3dTVkdEYXRhOjpvcGVyYXRvcj09KGNvbnN0IFN0
eWxlU2hhZG93U1ZHRGF0YSYgb3RoZXIpIGNvbnN0CiB7Ci0gICAgaWYgKCghc2hhZG93ICYmIG90
aGVyLnNoYWRvdykgfHwgKHNoYWRvdyAmJiAhb3RoZXIuc2hhZG93KSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGlmIChzaGFkb3cgJiYgb3RoZXIuc2hhZG93ICYmICgqc2hhZG93ICE9ICpv
dGhlci5zaGFkb3cpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Cisg
ICAgcmV0dXJuIGFyZVBvaW50aW5nVG9FcXVhbERhdGEoc2hhZG93LCBvdGhlci5zaGFkb3cpOwog
fQogCiBTdHlsZVJlc291cmNlRGF0YTo6U3R5bGVSZXNvdXJjZURhdGEoKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NoYWRvd0RhdGEuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NoYWRvd0RhdGEuY3BwCmluZGV4IDBmMzFjNjFhY2Q3MGNk
NzRmNTRjNGMxNTg5NWFkNGZhNThlYTE2YWUuLjRlNWNiOTBmMDRmYTExZWIzMmJmYzY4ZDA1N2Iw
Njk4ZjA4MDE4ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9T
aGFkb3dEYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU2hhZG93
RGF0YS5jcHAKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlICJTaGFkb3dEYXRhLmgiCiAKICNp
bmNsdWRlICJMYXlvdXRSZWN0LmgiCisjaW5jbHVkZSA8d3RmL1BvaW50ZXJDb21wYXJpc29uLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzksOCArNDAsNyBAQCBTaGFkb3dEYXRhOjpT
aGFkb3dEYXRhKGNvbnN0IFNoYWRvd0RhdGEmIG8pCiAKIGJvb2wgU2hhZG93RGF0YTo6b3BlcmF0
b3I9PShjb25zdCBTaGFkb3dEYXRhJiBvKSBjb25zdAogewotICAgIGlmICgobV9uZXh0ICYmICFv
Lm1fbmV4dCkgfHwgKCFtX25leHQgJiYgby5tX25leHQpCi0gICAgICAgIHx8IChtX25leHQgJiYg
by5tX25leHQgJiYgKm1fbmV4dCAhPSAqby5tX25leHQpKQorICAgIGlmICghYXJlUG9pbnRpbmdU
b0VxdWFsRGF0YShtX25leHQsIG8ubV9uZXh0KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IAogICAgIHJldHVybiBtX2xvY2F0aW9uID09IG8ubV9sb2NhdGlvbgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZS9TdHlsZUltYWdlLmgKaW5kZXggMjM2ZjFhMjE5OWMyODNhZDMxZjU0
M2Y5NzM5MjlkOTllNTJjNzZlZC4uMzNkMmRjMjc5ZjAwMTU1Mzc0MjY4YWY4MjcwODQ5MTcyMGJj
ZjE4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW1h
Z2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVJbWFnZS5oCkBA
IC03NCwxMSArNzQsNiBAQCBwdWJsaWM6CiAgICAgQUxXQVlTX0lOTElORSBib29sIGlzR2VuZXJh
dGVkSW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2lzR2VuZXJhdGVkSW1hZ2U7IH0KICAgICBBTFdB
WVNfSU5MSU5FIGJvb2wgaXNDYWNoZWRJbWFnZVNldCgpIGNvbnN0IHsgcmV0dXJuIG1faXNDYWNo
ZWRJbWFnZVNldDsgfQogICAgIAotICAgIHN0YXRpYyBib29sIGltYWdlc0VxdWl2YWxlbnQoU3R5
bGVJbWFnZSogaW1hZ2UxLCBTdHlsZUltYWdlKiBpbWFnZTIpCi0gICAgewotICAgICAgICByZXR1
cm4gaW1hZ2UxID09IGltYWdlMiB8fCAoaW1hZ2UxICYmIGltYWdlMiAmJiAqaW1hZ2UxID09ICpp
bWFnZTIpOwotICAgIH0KLQogcHJvdGVjdGVkOgogICAgIFN0eWxlSW1hZ2UoKQogICAgICAgICA6
IG1faXNDYWNoZWRJbWFnZShmYWxzZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdHlsZS9TdHlsZVJhcmVJbmhlcml0ZWREYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdHlsZS9TdHlsZVJhcmVJbmhlcml0ZWREYXRhLmNwcAppbmRleCBkOWNhMzQ5ZTg4
OGE0Y2U1NzM2NzhjNWIwMThmMWMwZWI1N2FmMzEyLi40MzA2ZjYwNGQ0ODI4N2I3ZTgyYWRjZWU0
ZTI3ZTY3YzM4MGIxMzljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5
bGUvU3R5bGVSYXJlSW5oZXJpdGVkRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL1N0eWxlUmFyZUluaGVyaXRlZERhdGEuY3BwCkBAIC0zMCw2ICszMCw3IEBACiAj
aW5jbHVkZSAiU2hhZG93RGF0YS5oIgogI2luY2x1ZGUgIlN0eWxlQ3VzdG9tUHJvcGVydHlEYXRh
LmgiCiAjaW5jbHVkZSAiU3R5bGVJbWFnZS5oIgorI2luY2x1ZGUgPHd0Zi9Qb2ludGVyQ29tcGFy
aXNvbi5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTIzNSwyNCArMjM2LDYgQEAgU3R5
bGVSYXJlSW5oZXJpdGVkRGF0YTo6flN0eWxlUmFyZUluaGVyaXRlZERhdGEoKQogewogfQogCi1z
dGF0aWMgYm9vbCBjdXJzb3JEYXRhRXF1aXZhbGVudChjb25zdCBDdXJzb3JMaXN0KiBjMSwgY29u
c3QgQ3Vyc29yTGlzdCogYzIpCi17Ci0gICAgaWYgKGMxID09IGMyKQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICBpZiAoKCFjMSAmJiBjMikgfHwgKGMxICYmICFjMikpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICByZXR1cm4gKCpjMSA9PSAqYzIpOwotfQotCi1zdGF0aWMgYm9vbCBxdW90
ZXNEYXRhRXF1aXZhbGVudChjb25zdCBRdW90ZXNEYXRhKiBxMSwgY29uc3QgUXVvdGVzRGF0YSog
cTIpCi17Ci0gICAgaWYgKHExID09IHEyKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAo
KCFxMSAmJiBxMikgfHwgKHExICYmICFxMikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBy
ZXR1cm4gKCpxMSA9PSAqcTIpOwotfQotCiBib29sIFN0eWxlUmFyZUluaGVyaXRlZERhdGE6Om9w
ZXJhdG9yPT0oY29uc3QgU3R5bGVSYXJlSW5oZXJpdGVkRGF0YSYgbykgY29uc3QKIHsKICAgICBy
ZXR1cm4gdGV4dFN0cm9rZUNvbG9yID09IG8udGV4dFN0cm9rZUNvbG9yCkBAIC0yNjUsOCArMjQ4
LDggQEAgYm9vbCBTdHlsZVJhcmVJbmhlcml0ZWREYXRhOjpvcGVyYXRvcj09KGNvbnN0IFN0eWxl
UmFyZUluaGVyaXRlZERhdGEmIG8pIGNvbnN0CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICAg
ICAgICAgJiYgdGFwSGlnaGxpZ2h0Q29sb3IgPT0gby50YXBIaWdobGlnaHRDb2xvcgogI2VuZGlm
Ci0gICAgICAgICYmIHNoYWRvd0RhdGFFcXVpdmFsZW50KG8pCi0gICAgICAgICYmIGN1cnNvckRh
dGFFcXVpdmFsZW50KGN1cnNvckRhdGEuZ2V0KCksIG8uY3Vyc29yRGF0YS5nZXQoKSkKKyAgICAg
ICAgJiYgYXJlUG9pbnRpbmdUb0VxdWFsRGF0YSh0ZXh0U2hhZG93LCBvLnRleHRTaGFkb3cpCisg
ICAgICAgICYmIGFyZVBvaW50aW5nVG9FcXVhbERhdGEoY3Vyc29yRGF0YSwgby5jdXJzb3JEYXRh
KQogICAgICAgICAmJiBpbmRlbnQgPT0gby5pbmRlbnQKICAgICAgICAgJiYgbV9lZmZlY3RpdmVa
b29tID09IG8ubV9lZmZlY3RpdmVab29tCiAgICAgICAgICYmIHdpZG93cyA9PSBvLndpZG93cwpA
QCAtMzA3LDcgKzI5MCw3IEBAIGJvb2wgU3R5bGVSYXJlSW5oZXJpdGVkRGF0YTo6b3BlcmF0b3I9
PShjb25zdCBTdHlsZVJhcmVJbmhlcml0ZWREYXRhJiBvKSBjb25zdAogICAgICAgICAmJiBoeXBo
ZW5hdGlvblN0cmluZyA9PSBvLmh5cGhlbmF0aW9uU3RyaW5nCiAgICAgICAgICYmIGxvY2FsZSA9
PSBvLmxvY2FsZQogICAgICAgICAmJiB0ZXh0RW1waGFzaXNDdXN0b21NYXJrID09IG8udGV4dEVt
cGhhc2lzQ3VzdG9tTWFyawotICAgICAgICAmJiBxdW90ZXNEYXRhRXF1aXZhbGVudChxdW90ZXMu
Z2V0KCksIG8ucXVvdGVzLmdldCgpKQorICAgICAgICAmJiBhcmVQb2ludGluZ1RvRXF1YWxEYXRh
KHF1b3Rlcywgby5xdW90ZXMpCiAgICAgICAgICYmIG1fdGFiU2l6ZSA9PSBvLm1fdGFiU2l6ZQog
ICAgICAgICAmJiBtX2xpbmVHcmlkID09IG8ubV9saW5lR3JpZAogI2lmIEVOQUJMRShDU1NfSU1B
R0VfT1JJRU5UQVRJT04pCkBAIC0zMzMsMTYgKzMxNiw3IEBAIGJvb2wgU3R5bGVSYXJlSW5oZXJp
dGVkRGF0YTo6b3BlcmF0b3I9PShjb25zdCBTdHlsZVJhcmVJbmhlcml0ZWREYXRhJiBvKSBjb25z
dAogICAgICAgICAmJiB0cmFpbGluZ1dvcmQgPT0gby50cmFpbGluZ1dvcmQKICNlbmRpZgogICAg
ICAgICAmJiBtX2N1c3RvbVByb3BlcnRpZXMgPT0gby5tX2N1c3RvbVByb3BlcnRpZXMKLSAgICAg
ICAgJiYgU3R5bGVJbWFnZTo6aW1hZ2VzRXF1aXZhbGVudChsaXN0U3R5bGVJbWFnZS5nZXQoKSwg
by5saXN0U3R5bGVJbWFnZS5nZXQoKSk7Ci19Ci0KLWJvb2wgU3R5bGVSYXJlSW5oZXJpdGVkRGF0
YTo6c2hhZG93RGF0YUVxdWl2YWxlbnQoY29uc3QgU3R5bGVSYXJlSW5oZXJpdGVkRGF0YSYgbykg
Y29uc3QKLXsKLSAgICBpZiAoKCF0ZXh0U2hhZG93ICYmIG8udGV4dFNoYWRvdykgfHwgKHRleHRT
aGFkb3cgJiYgIW8udGV4dFNoYWRvdykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAo
dGV4dFNoYWRvdyAmJiBvLnRleHRTaGFkb3cgJiYgKCp0ZXh0U2hhZG93ICE9ICpvLnRleHRTaGFk
b3cpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgICAgICYm
IGFyZVBvaW50aW5nVG9FcXVhbERhdGEobGlzdFN0eWxlSW1hZ2UsIG8ubGlzdFN0eWxlSW1hZ2Up
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJlSW5oZXJpdGVkRGF0YS5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFyZUluaGVyaXRlZERhdGEuaAppbmRleCAyNjUxNjFi
MzY0NTI2NGE5MzI3OWU3ZGJhMzJkN2YwZDQ1MmI3YjA5Li5lY2JiMDc5ZmIwOGQxY2VmNzUxZDEy
MzcxMzA3NmE2ODI5MTM2MjExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3R5bGUvU3R5bGVSYXJlSW5oZXJpdGVkRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdHlsZS9TdHlsZVJhcmVJbmhlcml0ZWREYXRhLmgKQEAgLTU4LDcgKzU4LDYgQEAgcHVi
bGljOgogICAgIHsKICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gbyk7CiAgICAgfQotICAgIGJv
b2wgc2hhZG93RGF0YUVxdWl2YWxlbnQoY29uc3QgU3R5bGVSYXJlSW5oZXJpdGVkRGF0YSYpIGNv
bnN0OwogCiAgICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGxpc3RTdHlsZUltYWdlOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJlTm9uSW5oZXJpdGVk
RGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJlTm9uSW5o
ZXJpdGVkRGF0YS5jcHAKaW5kZXggMDI3ZGQ3ZmY3N2RmY2JiZTQwYmI5MGMxZWJmZGRkZmZmMzBl
ZmMxZi4uMDlmYzkxMjhmZDZhN2EwMTE5ZTcyYzY4YmRjOGQ4M2I5YTViZDIwMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFyZU5vbkluaGVyaXRlZERh
dGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVOb25J
bmhlcml0ZWREYXRhLmNwcApAQCAtMzEsNiArMzEsOCBAQAogI2luY2x1ZGUgIlN0eWxlSW1hZ2Uu
aCIKICNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiU3R5bGVTY3JvbGxTbmFw
UG9pbnRzLmgiCisjaW5jbHVkZSA8d3RmL1BvaW50ZXJDb21wYXJpc29uLmg+CisjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTIzMywyMSArMjM1LDIx
IEBAIGJvb2wgU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YTo6b3BlcmF0b3I9PShjb25zdCBTdHls
ZVJhcmVOb25Jbmhlcml0ZWREYXRhJiBvKSBjCiAgICAgICAgICYmIG1fc2Nyb2xsU25hcFBvaW50
cyA9PSBvLm1fc2Nyb2xsU25hcFBvaW50cwogI2VuZGlmCiAgICAgICAgICYmIGNvbnRlbnREYXRh
RXF1aXZhbGVudChvKQotICAgICAgICAmJiBjb3VudGVyRGF0YUVxdWl2YWxlbnQobykKLSAgICAg
ICAgJiYgc2hhZG93RGF0YUVxdWl2YWxlbnQobykKLSAgICAgICAgJiYgd2lsbENoYW5nZURhdGFF
cXVpdmFsZW50KG8pCi0gICAgICAgICYmIHJlZmxlY3Rpb25EYXRhRXF1aXZhbGVudChvKQotICAg
ICAgICAmJiBhbmltYXRpb25EYXRhRXF1aXZhbGVudChvKQotICAgICAgICAmJiB0cmFuc2l0aW9u
RGF0YUVxdWl2YWxlbnQobykKKyAgICAgICAgJiYgYXJlUG9pbnRpbmdUb0VxdWFsRGF0YShtX2Nv
dW50ZXJEaXJlY3RpdmVzLCBvLm1fY291bnRlckRpcmVjdGl2ZXMpCisgICAgICAgICYmIGFyZVBv
aW50aW5nVG9FcXVhbERhdGEobV9ib3hTaGFkb3csIG8ubV9ib3hTaGFkb3cpCisgICAgICAgICYm
IGFyZVBvaW50aW5nVG9FcXVhbERhdGEobV93aWxsQ2hhbmdlLCBvLm1fd2lsbENoYW5nZSkKKyAg
ICAgICAgJiYgYXJlUG9pbnRpbmdUb0VxdWFsRGF0YShtX2JveFJlZmxlY3QsIG8ubV9ib3hSZWZs
ZWN0KQorICAgICAgICAmJiBhcmVQb2ludGluZ1RvRXF1YWxEYXRhKG1fYW5pbWF0aW9ucywgby5t
X2FuaW1hdGlvbnMpCisgICAgICAgICYmIGFyZVBvaW50aW5nVG9FcXVhbERhdGEobV90cmFuc2l0
aW9ucywgby5tX3RyYW5zaXRpb25zKQogICAgICAgICAmJiBtX21hc2sgPT0gby5tX21hc2sKICAg
ICAgICAgJiYgbV9tYXNrQm94SW1hZ2UgPT0gby5tX21hc2tCb3hJbWFnZQogICAgICAgICAmJiBt
X3BhZ2VTaXplID09IG8ubV9wYWdlU2l6ZQogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotICAgICAg
ICAmJiBzaGFwZU91dHNpZGVEYXRhRXF1aXZhbGVudChvKQorICAgICAgICAmJiBhcmVQb2ludGlu
Z1RvRXF1YWxEYXRhKG1fc2hhcGVPdXRzaWRlLCBvLm1fc2hhcGVPdXRzaWRlKQogICAgICAgICAm
JiBtX3NoYXBlTWFyZ2luID09IG8ubV9zaGFwZU1hcmdpbgogICAgICAgICAmJiBtX3NoYXBlSW1h
Z2VUaHJlc2hvbGQgPT0gby5tX3NoYXBlSW1hZ2VUaHJlc2hvbGQKICNlbmRpZgotICAgICAgICAm
JiBjbGlwUGF0aE9wZXJhdGlvbnNFcXVpdmFsZW50KG8pCisgICAgICAgICYmIGFyZVBvaW50aW5n
VG9FcXVhbERhdGEobV9jbGlwUGF0aCwgby5tX2NsaXBQYXRoKQogICAgICAgICAmJiBtX3RleHRE
ZWNvcmF0aW9uQ29sb3IgPT0gby5tX3RleHREZWNvcmF0aW9uQ29sb3IKICAgICAgICAgJiYgbV92
aXNpdGVkTGlua1RleHREZWNvcmF0aW9uQ29sb3IgPT0gby5tX3Zpc2l0ZWRMaW5rVGV4dERlY29y
YXRpb25Db2xvcgogICAgICAgICAmJiBtX3Zpc2l0ZWRMaW5rQmFja2dyb3VuZENvbG9yID09IG8u
bV92aXNpdGVkTGlua0JhY2tncm91bmRDb2xvcgpAQCAtMzA1LDg0ICszMDcsNiBAQCBib29sIFN0
eWxlUmFyZU5vbkluaGVyaXRlZERhdGE6OmNvbnRlbnREYXRhRXF1aXZhbGVudChjb25zdCBTdHls
ZVJhcmVOb25Jbmhlcml0ZQogICAgIHJldHVybiAhYSAmJiAhYjsKIH0KIAotYm9vbCBTdHlsZVJh
cmVOb25Jbmhlcml0ZWREYXRhOjpjb3VudGVyRGF0YUVxdWl2YWxlbnQoY29uc3QgU3R5bGVSYXJl
Tm9uSW5oZXJpdGVkRGF0YSYgbykgY29uc3QKLXsKLSAgICBpZiAobV9jb3VudGVyRGlyZWN0aXZl
cy5nZXQoKSA9PSBvLm1fY291bnRlckRpcmVjdGl2ZXMuZ2V0KCkpCi0gICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICAKLSAgICBpZiAobV9jb3VudGVyRGlyZWN0aXZlcyAmJiBvLm1fY291bnRl
ckRpcmVjdGl2ZXMgJiYgKm1fY291bnRlckRpcmVjdGl2ZXMgPT0gKm8ubV9jb3VudGVyRGlyZWN0
aXZlcykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJv
b2wgU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YTo6c2hhZG93RGF0YUVxdWl2YWxlbnQoY29uc3Qg
U3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YSYgbykgY29uc3QKLXsKLSAgICBpZiAoKCFtX2JveFNo
YWRvdyAmJiBvLm1fYm94U2hhZG93KSB8fCAobV9ib3hTaGFkb3cgJiYgIW8ubV9ib3hTaGFkb3cp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1fYm94U2hhZG93ICYmIG8ubV9ib3hT
aGFkb3cgJiYgKCptX2JveFNoYWRvdyAhPSAqby5tX2JveFNoYWRvdykpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBTdHlsZVJhcmVOb25Jbmhlcml0
ZWREYXRhOjp3aWxsQ2hhbmdlRGF0YUVxdWl2YWxlbnQoY29uc3QgU3R5bGVSYXJlTm9uSW5oZXJp
dGVkRGF0YSYgbykgY29uc3QKLXsKLSAgICBpZiAobV93aWxsQ2hhbmdlICE9IG8ubV93aWxsQ2hh
bmdlKSB7Ci0gICAgICAgIGlmICghbV93aWxsQ2hhbmdlIHx8ICFvLm1fd2lsbENoYW5nZSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuICptX3dpbGxDaGFuZ2UgPT0g
Km8ubV93aWxsQ2hhbmdlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBTdHls
ZVJhcmVOb25Jbmhlcml0ZWREYXRhOjpyZWZsZWN0aW9uRGF0YUVxdWl2YWxlbnQoY29uc3QgU3R5
bGVSYXJlTm9uSW5oZXJpdGVkRGF0YSYgbykgY29uc3QKLXsKLSAgICBpZiAobV9ib3hSZWZsZWN0
ICE9IG8ubV9ib3hSZWZsZWN0KSB7Ci0gICAgICAgIGlmICghbV9ib3hSZWZsZWN0IHx8ICFvLm1f
Ym94UmVmbGVjdCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuICpt
X2JveFJlZmxlY3QgPT0gKm8ubV9ib3hSZWZsZWN0OwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotYm9vbCBTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhOjphbmltYXRpb25EYXRhRXF1aXZh
bGVudChjb25zdCBTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhJiBvKSBjb25zdAotewotICAgIGlm
ICgoIW1fYW5pbWF0aW9ucyAmJiBvLm1fYW5pbWF0aW9ucykgfHwgKG1fYW5pbWF0aW9ucyAmJiAh
by5tX2FuaW1hdGlvbnMpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1fYW5pbWF0
aW9ucyAmJiBvLm1fYW5pbWF0aW9ucyAmJiAoKm1fYW5pbWF0aW9ucyAhPSAqby5tX2FuaW1hdGlv
bnMpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wg
U3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YTo6dHJhbnNpdGlvbkRhdGFFcXVpdmFsZW50KGNvbnN0
IFN0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEmIG8pIGNvbnN0Ci17Ci0gICAgaWYgKCghbV90cmFu
c2l0aW9ucyAmJiBvLm1fdHJhbnNpdGlvbnMpIHx8IChtX3RyYW5zaXRpb25zICYmICFvLm1fdHJh
bnNpdGlvbnMpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1fdHJhbnNpdGlvbnMg
JiYgby5tX3RyYW5zaXRpb25zICYmICgqbV90cmFuc2l0aW9ucyAhPSAqby5tX3RyYW5zaXRpb25z
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFN0
eWxlUmFyZU5vbkluaGVyaXRlZERhdGE6OmNsaXBQYXRoT3BlcmF0aW9uc0VxdWl2YWxlbnQoY29u
c3QgU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YSYgbykgY29uc3QKLXsKLSAgICBpZiAoKCFtX2Ns
aXBQYXRoICYmIG8ubV9jbGlwUGF0aCkgfHwgKG1fY2xpcFBhdGggJiYgIW8ubV9jbGlwUGF0aCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobV9jbGlwUGF0aCAmJiBvLm1fY2xpcFBh
dGggJiYgKCptX2NsaXBQYXRoICE9ICpvLm1fY2xpcFBhdGgpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLSNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLWJvb2wg
U3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YTo6c2hhcGVPdXRzaWRlRGF0YUVxdWl2YWxlbnQoY29u
c3QgU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YSYgbykgY29uc3QKLXsKLSAgICBpZiAoKCFtX3No
YXBlT3V0c2lkZSAmJiBvLm1fc2hhcGVPdXRzaWRlKSB8fCAobV9zaGFwZU91dHNpZGUgJiYgIW8u
bV9zaGFwZU91dHNpZGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1fc2hhcGVP
dXRzaWRlICYmIG8ubV9zaGFwZU91dHNpZGUgJiYgKCptX3NoYXBlT3V0c2lkZSAhPSAqby5tX3No
YXBlT3V0c2lkZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LSNlbmRpZgotCiBib29sIFN0eWxlUmFyZU5vbkluaGVyaXRlZERhdGE6Omhhc0ZpbHRlcnMoKSBj
b25zdAogewogICAgIHJldHVybiBtX2ZpbHRlci5nZXQoKSAmJiAhbV9maWx0ZXItPm1fb3BlcmF0
aW9ucy5pc0VtcHR5KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5
bGUvU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N0eWxlL1N0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEuaAppbmRleCA1ZWVhMGIwNTBhMDcwMzM3
OTI5YTQxOWVjMjY1ZmMzNTE4MmVjNzJlLi43YWQ5NzYzYWFmMDRiZjY4NDlmOTYxODViMzk4NWI2
ZTAwZjc3OTAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5
bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dHlsZS9TdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhLmgKQEAgLTkyLDE2ICs5Miw3IEBAIHB1Ymxp
YzoKICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YSYg
bykgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvKTsgfQogCiAgICAgYm9vbCBjb250ZW50RGF0
YUVxdWl2YWxlbnQoY29uc3QgU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YSYpIGNvbnN0OwotICAg
IGJvb2wgY291bnRlckRhdGFFcXVpdmFsZW50KGNvbnN0IFN0eWxlUmFyZU5vbkluaGVyaXRlZERh
dGEmKSBjb25zdDsKLSAgICBib29sIHNoYWRvd0RhdGFFcXVpdmFsZW50KGNvbnN0IFN0eWxlUmFy
ZU5vbkluaGVyaXRlZERhdGEmKSBjb25zdDsKLSAgICBib29sIHdpbGxDaGFuZ2VEYXRhRXF1aXZh
bGVudChjb25zdCBTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhJikgY29uc3Q7Ci0gICAgYm9vbCBy
ZWZsZWN0aW9uRGF0YUVxdWl2YWxlbnQoY29uc3QgU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YSYp
IGNvbnN0OwotICAgIGJvb2wgYW5pbWF0aW9uRGF0YUVxdWl2YWxlbnQoY29uc3QgU3R5bGVSYXJl
Tm9uSW5oZXJpdGVkRGF0YSYpIGNvbnN0OwotICAgIGJvb2wgdHJhbnNpdGlvbkRhdGFFcXVpdmFs
ZW50KGNvbnN0IFN0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEmKSBjb25zdDsKLSAgICBib29sIGNs
aXBQYXRoT3BlcmF0aW9uc0VxdWl2YWxlbnQoY29uc3QgU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0
YSYpIGNvbnN0OwotI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotICAgIGJvb2wgc2hhcGVPdXRzaWRl
RGF0YUVxdWl2YWxlbnQoY29uc3QgU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YSYpIGNvbnN0Owot
I2VuZGlmCisKICAgICBib29sIGhhc0ZpbHRlcnMoKSBjb25zdDsKICNpZiBFTkFCTEUoRklMVEVS
U19MRVZFTF8yKQogICAgIGJvb2wgaGFzQmFja2Ryb3BGaWx0ZXJzKCkgY29uc3Q7Cg==
</data>
<flag name="review"
          id="288164"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>