<?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>224412</bug_id>
          
          <creation_ts>2021-04-10 20:46:29 -0700</creation_ts>
          <short_desc>WebProcessPool should store Vector&lt;Ref&lt;WebProcessProxy&gt;&gt; instead of Vector&lt;RefPtr&gt;</short_desc>
          <delta_ts>2022-02-25 09:44:41 -0800</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>jer.noble</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1749061</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-04-10 20:46:29 -0700</bug_when>
    <thetext>WebProcessPool should store Vector&lt;Ref&lt;WebProcessProxy&gt;&gt; instead of Vector&lt;RefPtr&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1749062</commentid>
    <comment_count>1</comment_count>
      <attachid>425698</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-04-10 20:47:25 -0700</bug_when>
    <thetext>Created attachment 425698
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1749064</commentid>
    <comment_count>2</comment_count>
      <attachid>425698</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-04-10 21:23:07 -0700</bug_when>
    <thetext>Comment on attachment 425698
Patch

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

R=me with nits

&gt; Source/WebKit/UIProcess/WebProcessPool.cpp:513
&gt; +    Vector&lt;Ref&lt;WebProcessProxy&gt;&gt; processes = m_processes;

Auto ?

&gt; Source/WebKit/UIProcess/WebProcessPool.cpp:904
&gt; +    Vector&lt;Ref&lt;WebProcessProxy&gt;&gt; processes = m_processes;

Auto?

&gt; Source/WebKit/UIProcess/WebProcessPool.cpp:1503
&gt; +    Vector&lt;Ref&lt;WebProcessProxy&gt;&gt; processes = m_processes;

Auto?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1749072</commentid>
    <comment_count>3</comment_count>
      <attachid>425700</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-04-10 23:10:25 -0700</bug_when>
    <thetext>Created attachment 425700
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1749073</commentid>
    <comment_count>4</comment_count>
      <attachid>425700</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-04-10 23:15:34 -0700</bug_when>
    <thetext>Comment on attachment 425700
Patch

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

&gt; Source/WebCore/ChangeLog:11
&gt; +        Remove the Ref comparators for Ref&lt;SharedBuffer&gt; which were only used in tests.

This isn&apos;t true.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1749878</commentid>
    <comment_count>5</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-04-13 14:54:43 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #2)
&gt; &gt; Source/WebKit/UIProcess/WebProcessPool.cpp:1503
&gt; &gt; +    Vector&lt;Ref&lt;WebProcessProxy&gt;&gt; processes = m_processes;
&gt; 
&gt; Auto?

I feel like it&apos;s important to have the type explicit here to indicate that we are copying the Vector&lt;Ref&gt; instead of making a reference or something that wouldn&apos;t.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1749880</commentid>
    <comment_count>6</comment_count>
      <attachid>425918</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-04-13 14:54:50 -0700</bug_when>
    <thetext>Created attachment 425918
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1749908</commentid>
    <comment_count>7</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-04-13 15:48:17 -0700</bug_when>
    <thetext>Committed r275916 (236480@main): &lt;https://commits.webkit.org/236480@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 425918.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1749909</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-04-13 15:49:31 -0700</bug_when>
    <thetext>&lt;rdar://problem/76614575&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1749929</commentid>
    <comment_count>9</comment_count>
      <attachid>425918</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-04-13 16:36:54 -0700</bug_when>
    <thetext>Comment on attachment 425918
Patch

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

&gt; Source/WTF/wtf/Ref.h:326
&gt; +template&lt;typename T, typename U, typename V, typename W&gt;
&gt; +inline bool operator==(const Ref&lt;T, U&gt;&amp; a, const Ref&lt;V, W&gt;&amp; b)
&gt; +{
&gt; +    return a.ptr() == b.ptr();
&gt; +}
&gt; +
&gt; +template&lt;typename T, typename U, typename V&gt;
&gt; +inline bool operator==(const Ref&lt;T, U&gt;&amp; a, V&amp; b)
&gt; +{
&gt; +    return a.ptr() == &amp;b;
&gt; +}
&gt; +
&gt; +template&lt;typename T, typename U, typename V&gt;
&gt; +inline bool operator==(T&amp; a, const Ref&lt;U, V&gt;&amp; b)
&gt; +{
&gt; +    return &amp;a == b.ptr();
&gt; +}
&gt; +
&gt; +template&lt;typename T, typename U, typename V, typename W&gt;
&gt; +inline bool operator!=(const Ref&lt;T, U&gt;&amp; a, const Ref&lt;V, W&gt;&amp; b)
&gt; +{
&gt; +    return a.ptr() != b.ptr();
&gt; +}
&gt; +
&gt; +template&lt;typename T, typename U, typename V&gt;
&gt; +inline bool operator!=(const Ref&lt;T, U&gt;&amp; a, V&amp; b)
&gt; +{
&gt; +    return a.ptr() != &amp;b;
&gt; +}
&gt; +
&gt; +template&lt;typename T, typename U, typename V&gt;
&gt; +inline bool operator!=(T&amp; a, const Ref&lt;U, V&gt;&amp; b)
&gt; +{
&gt; +    return &amp;a != b.ptr();
&gt; +}

When originally creating Ref&lt;&gt; we intentionally omitted these function templates, because comparing two references with == compares the *values*, not the pointers. So we thought it was ambiguous whether a == b should be a.ptr() == b.ptr() or a.get() == b.get(), which are different.

I know this is handy if you think of Ref as a RefPtr that can never be null. But less logical if you think of it as a kind of reference.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1749930</commentid>
    <comment_count>10</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-04-13 16:39:18 -0700</bug_when>
    <thetext>I could see that confusion when comparing a Ref&lt;T&gt; and a T&amp;.  Do you think it&apos;s also confusing when comparing a Ref&lt;T&gt; and another Ref&lt;T&gt;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1749934</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-04-13 16:44:22 -0700</bug_when>
    <thetext>(In reply to Alex Christensen from comment #10)
&gt; Do you think
&gt; it&apos;s also confusing when comparing a Ref&lt;T&gt; and another Ref&lt;T&gt;?

I did back when we made the original call. Not sure how I feel about it now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1749935</commentid>
    <comment_count>12</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-04-13 16:46:26 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #9)
&gt; Comment on attachment 425918 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=425918&amp;action=review
&gt; 
&gt; &gt; Source/WTF/wtf/Ref.h:326
&gt; &gt; +template&lt;typename T, typename U, typename V, typename W&gt;
&gt; &gt; +inline bool operator==(const Ref&lt;T, U&gt;&amp; a, const Ref&lt;V, W&gt;&amp; b)
&gt; &gt; +{
&gt; &gt; +    return a.ptr() == b.ptr();
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +template&lt;typename T, typename U, typename V&gt;
&gt; &gt; +inline bool operator==(const Ref&lt;T, U&gt;&amp; a, V&amp; b)
&gt; &gt; +{
&gt; &gt; +    return a.ptr() == &amp;b;
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +template&lt;typename T, typename U, typename V&gt;
&gt; &gt; +inline bool operator==(T&amp; a, const Ref&lt;U, V&gt;&amp; b)
&gt; &gt; +{
&gt; &gt; +    return &amp;a == b.ptr();
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +template&lt;typename T, typename U, typename V, typename W&gt;
&gt; &gt; +inline bool operator!=(const Ref&lt;T, U&gt;&amp; a, const Ref&lt;V, W&gt;&amp; b)
&gt; &gt; +{
&gt; &gt; +    return a.ptr() != b.ptr();
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +template&lt;typename T, typename U, typename V&gt;
&gt; &gt; +inline bool operator!=(const Ref&lt;T, U&gt;&amp; a, V&amp; b)
&gt; &gt; +{
&gt; &gt; +    return a.ptr() != &amp;b;
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +template&lt;typename T, typename U, typename V&gt;
&gt; &gt; +inline bool operator!=(T&amp; a, const Ref&lt;U, V&gt;&amp; b)
&gt; &gt; +{
&gt; &gt; +    return &amp;a != b.ptr();
&gt; &gt; +}
&gt; 
&gt; When originally creating Ref&lt;&gt; we intentionally omitted these function
&gt; templates, because comparing two references with == compares the *values*,
&gt; not the pointers. So we thought it was ambiguous whether a == b should be
&gt; a.ptr() == b.ptr() or a.get() == b.get(), which are different.
&gt; 
&gt; I know this is handy if you think of Ref as a RefPtr that can never be null.
&gt; But less logical if you think of it as a kind of reference.

I think we went the way of &quot;RefPtr that cannot be null&quot; instead of &quot;kind of a reference&quot; when we made Ref&lt;&gt; copyable too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1846054</commentid>
    <comment_count>13</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2022-02-25 09:44:41 -0800</bug_when>
    <thetext>(In reply to Chris Dumez from comment #12)
&gt; (In reply to Darin Adler from comment #9)
&gt; &gt; Comment on attachment 425918 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=425918&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WTF/wtf/Ref.h:326
&gt; &gt; &gt; +template&lt;typename T, typename U, typename V, typename W&gt;
&gt; &gt; &gt; +inline bool operator==(const Ref&lt;T, U&gt;&amp; a, const Ref&lt;V, W&gt;&amp; b)
&gt; &gt; &gt; +{
&gt; &gt; &gt; +    return a.ptr() == b.ptr();
&gt; &gt; &gt; +}
&gt; &gt; &gt; +
&gt; &gt; &gt; +template&lt;typename T, typename U, typename V&gt;
&gt; &gt; &gt; +inline bool operator==(const Ref&lt;T, U&gt;&amp; a, V&amp; b)
&gt; &gt; &gt; +{
&gt; &gt; &gt; +    return a.ptr() == &amp;b;
&gt; &gt; &gt; +}
&gt; &gt; &gt; +
&gt; &gt; &gt; +template&lt;typename T, typename U, typename V&gt;
&gt; &gt; &gt; +inline bool operator==(T&amp; a, const Ref&lt;U, V&gt;&amp; b)
&gt; &gt; &gt; +{
&gt; &gt; &gt; +    return &amp;a == b.ptr();
&gt; &gt; &gt; +}
&gt; &gt; &gt; +
&gt; &gt; &gt; +template&lt;typename T, typename U, typename V, typename W&gt;
&gt; &gt; &gt; +inline bool operator!=(const Ref&lt;T, U&gt;&amp; a, const Ref&lt;V, W&gt;&amp; b)
&gt; &gt; &gt; +{
&gt; &gt; &gt; +    return a.ptr() != b.ptr();
&gt; &gt; &gt; +}
&gt; &gt; &gt; +
&gt; &gt; &gt; +template&lt;typename T, typename U, typename V&gt;
&gt; &gt; &gt; +inline bool operator!=(const Ref&lt;T, U&gt;&amp; a, V&amp; b)
&gt; &gt; &gt; +{
&gt; &gt; &gt; +    return a.ptr() != &amp;b;
&gt; &gt; &gt; +}
&gt; &gt; &gt; +
&gt; &gt; &gt; +template&lt;typename T, typename U, typename V&gt;
&gt; &gt; &gt; +inline bool operator!=(T&amp; a, const Ref&lt;U, V&gt;&amp; b)
&gt; &gt; &gt; +{
&gt; &gt; &gt; +    return &amp;a != b.ptr();
&gt; &gt; &gt; +}
&gt; &gt; 
&gt; &gt; When originally creating Ref&lt;&gt; we intentionally omitted these function
&gt; &gt; templates, because comparing two references with == compares the *values*,
&gt; &gt; not the pointers. So we thought it was ambiguous whether a == b should be
&gt; &gt; a.ptr() == b.ptr() or a.get() == b.get(), which are different.
&gt; &gt; 
&gt; &gt; I know this is handy if you think of Ref as a RefPtr that can never be null.
&gt; &gt; But less logical if you think of it as a kind of reference.
&gt; 
&gt; I think we went the way of &quot;RefPtr that cannot be null&quot; instead of &quot;kind of
&gt; a reference&quot; when we made Ref&lt;&gt; copyable too.

This actually caused a real, user facing bug. This changed the behavior of a check inside the EME code to cause a pointer-equality test rather than a content test, and that test now fails, causing key rotations to fail.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>425698</attachid>
            <date>2021-04-10 20:47:25 -0700</date>
            <delta_ts>2021-04-10 23:10:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-224412-20210410204724.patch</filename>
            <type>text/plain</type>
            <size>22028</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc1ODA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGMwZTU5ODQwMjVhZTkxMmQ5NTgzZWIz
Y2ZjMWMzNzc5NmMzZDcxODUuLjJjNjJkOTMxNzllNDJmNDZlYTk2NDA2ZWEwZTJiZTZjMzA0Mzky
NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjEtMDQtMTAgIEFsZXggQ2hyaXN0ZW5zZW4gIDxh
Y2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBXZWJQcm9jZXNzUG9vbCBzaG91bGQg
c3RvcmUgVmVjdG9yPFJlZjxXZWJQcm9jZXNzUHJveHk+PiBpbnN0ZWFkIG9mIFZlY3RvcjxSZWZQ
dHI+CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjQ0
MTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0
Zi9SZWYuaDoKKyAgICAgICAgKFdURjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXVEY6Om9wZXJh
dG9yIT0pOgorCiAyMDIxLTA0LTA5ICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgog
CiAgICAgICAgIFdURiBTb2Z0TGlua2luZyBtYWNyb3MgY2FuIGNhdXNlIGNvbGxpc2lvbnMgd2l0
aCB0aGVpciB0YXJnZXQgZnVuY3Rpb25zCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDcwYTlmYWIxZTM3OWExZDBhZGZi
Zjc0ZWJjMWJjMTRhZWRiYWFkYTUuLjM5ODMxNDAzNTJmNjZhNjlmZjdkZjBkNzBhYTAxYmQyMzJl
NGQ0MzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDAgQEAKKzIwMjEtMDQtMTAgIEFsZXggQ2hyaXN0
ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBXZWJQcm9jZXNzUG9v
bCBzaG91bGQgc3RvcmUgVmVjdG9yPFJlZjxXZWJQcm9jZXNzUHJveHk+PiBpbnN0ZWFkIG9mIFZl
Y3RvcjxSZWZQdHI+CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMjQ0MTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBObyBjaGFuZ2UgaW4gYmVoYXZpb3IsIGV4Y2VwdCBJIGFsc28gY2hhbmdlZCBhIHJhdyBw
b2ludGVyIHRvIGEgV2Vha1B0ciwgc28gd2Ugc2hvdWxkIGJlIGEgbGl0dGxlIHNhZmVyLgorCisg
ICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW06CisgICAgICAg
IChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpyZW1vdGVXZWJJbnNwZWN0b3JFbmFibGVkQ2FsbGJh
Y2spOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJOb3RpZmljYXRp
b25PYnNlcnZlcnMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUHJveHlD
b2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpjYWNoZU1lZGlhTUlN
RVR5cGVzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvVmlzaXRlZExpbmtTdG9yZS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OlZpc2l0ZWRMaW5rU3RvcmU6OnJlbW92ZUFsbCk6CisgICAgICAgIChXZWJL
aXQ6OlZpc2l0ZWRMaW5rU3RvcmU6OnNlbmRTdG9yZUhhbmRsZVRvUHJvY2Vzcyk6CisgICAgICAg
IChXZWJLaXQ6OlZpc2l0ZWRMaW5rU3RvcmU6OmRpZFVwZGF0ZVNoYXJlZFN0cmluZ0hhc2hlcyk6
CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OmdwdVByb2Nlc3NDcmFzaGVkKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUHJvY2Vzc1Bvb2w6OmVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3Jr
UHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp0cnlUYWtlUHJld2Fy
bWVkUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjppbml0aWFsaXpl
TmV3V2ViUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjplbmFibGVQ
cm9jZXNzVGVybWluYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2hv
dWxkVGVybWluYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnByb2Nlc3NE
aWRGaW5pc2hMYXVuY2hpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6ZGlz
Y29ubmVjdFByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cHJvY2Vz
c0ZvclJlZ2lzdHJhYmxlRG9tYWluKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OmNyZWF0ZVdlYlBhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6dGVybWlu
YXRlQWxsV2ViQ29udGVudFByb2Nlc3Nlcyk6CisgICAgICAgIChXZWJLaXQ6OndlYlByb2Nlc3NQ
cm94eUZyb21Db25uZWN0aW9uKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wu
aDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmRUb0FsbFByb2Nlc3Nlcyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kVG9BbGxQcm9jZXNzZXNGb3JT
ZXNzaW9uKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpkaWRGaW5pc2hMYXVuY2hpbmcpOgorCiAyMDIx
LTA0LTEwICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAg
ICAgICAgVXNlIFdlYWtIYXNoU2V0PFdlYlByb2Nlc3NQcm94eT4gaW5zdGVhZCBvZiBIYXNoU2V0
PFdlYlByb2Nlc3NQcm94eSo+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9SZWYuaCBiL1Nv
dXJjZS9XVEYvd3RmL1JlZi5oCmluZGV4IDcyNmE0ZTZkZjMzNjdjMGE2NDFiNTAzNTFhZmVkYzAw
ODczZmEwNzMuLjMwNzU1NWYzOTY5MmNjMzgyOGY1YTc4NTY2MWM4NTM5N2Q2NzQwYWMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1JlZi5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1JlZi5oCkBA
IC0yODksNiArMjg5LDQyIEBAIGlubGluZSBib29sIGlzKGNvbnN0IFJlZjxBcmdUeXBlLCBQdHJU
cmFpdHM+JiBzb3VyY2UpCiAgICAgcmV0dXJuIGlzPEV4cGVjdGVkVHlwZT4oc291cmNlLmdldCgp
KTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlw
ZW5hbWUgVz4KK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgUmVmPFQsIFU+JiBhLCBjb25z
dCBSZWY8ViwgVz4mIGIpCit7CisgICAgcmV0dXJuIGEucHRyKCkgPT0gYi5wdHIoKTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KK2lubGluZSBib29s
IG9wZXJhdG9yPT0oY29uc3QgUmVmPFQsIFU+JiBhLCBWJiBiKQoreworICAgIHJldHVybiBhLnB0
cigpID09ICZiOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFt
ZSBWPgoraW5saW5lIGJvb2wgb3BlcmF0b3I9PShUJiBhLCBjb25zdCBSZWY8VSwgVj4mIGIpCit7
CisgICAgcmV0dXJuICZhID09IGIucHRyKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IFJlZjxULCBVPiYgYSwgY29uc3QgUmVmPFYsIFc+JiBiKQoreworICAgIHJldHVybiBh
LnB0cigpICE9IGIucHRyKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUs
IHR5cGVuYW1lIFY+CitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFJlZjxULCBVPiYgYSwg
ViYgYikKK3sKKyAgICByZXR1cm4gYS5wdHIoKSAhPSAmYjsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KK2lubGluZSBib29sIG9wZXJhdG9yIT0oVCYg
YSwgY29uc3QgUmVmPFUsIFY+JiBiKQoreworICAgIHJldHVybiAmYSAhPSBiLnB0cigpOworfQor
CiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNpbmcgV1RGOjpSZWY7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQppbmRleCAyNWNl
ZWIxNDkxMjExMjJiY2E1ZTMwMzcwOGYyN2M0YmZkODRmMDY4Li4xMjkwMmIwNWRlMjE4MjJiMTEz
YmNmMWUzODM3MzA3MjQ4MmZkZjQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0KQEAgLTYwNSwxMCArNjA1LDggQEAgdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6Y29sb3JQcmVmZXJlbmNlc0RpZENoYW5nZUNhbGxiYWNrKENGTm90
aWZpY2F0aW9uQ2VudGVyUmVmIGMKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlbW90ZVdlYkluc3Bl
Y3RvckVuYWJsZWRDYWxsYmFjayhDRk5vdGlmaWNhdGlvbkNlbnRlclJlZiwgdm9pZCAqb2JzZXJ2
ZXIsIENGU3RyaW5nUmVmIG5hbWUsIGNvbnN0IHZvaWQgKiwgQ0ZEaWN0aW9uYXJ5UmVmIHVzZXJJ
bmZvKQogewogICAgIGF1dG8qIHBvb2wgPSByZWludGVycHJldF9jYXN0PFdlYlByb2Nlc3NQb29s
Kj4ob2JzZXJ2ZXIpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcG9vbC0+bV9wcm9jZXNz
ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgYXV0byBwcm9jZXNzID0gcG9vbC0+bV9wcm9jZXNz
ZXNbaV07CisgICAgZm9yIChhdXRvJiBwcm9jZXNzIDogcG9vbC0+bV9wcm9jZXNzZXMpCiAgICAg
ICAgIHByb2Nlc3MtPmVuYWJsZVJlbW90ZUluc3BlY3RvcklmTmVlZGVkKCk7Ci0gICAgfQogfQog
I2VuZGlmCiAKQEAgLTY5OCwxMSArNjk2LDExIEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lz
dGVyTm90aWZpY2F0aW9uT2JzZXJ2ZXJzKCkKICAgICBtX2FjY2Vzc2liaWxpdHlFbmFibGVkT2Jz
ZXJ2ZXIgPSBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVy
Rm9yTmFtZTooX19icmlkZ2UgaWQpa0FYU0FwcGxpY2F0aW9uQWNjZXNzaWJpbGl0eUVuYWJsZWRO
b3RpZmljYXRpb24gb2JqZWN0Om5pbCBxdWV1ZTpbTlNPcGVyYXRpb25RdWV1ZSBjdXJyZW50UXVl
dWVdIHVzaW5nQmxvY2s6XihOU05vdGlmaWNhdGlvbiAqKSB7CiAgICAgICAgIGlmICghX0FYU0Fw
cGxpY2F0aW9uQWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3Byb2Nlc3Nlcy5zaXplKCk7ICsraSkgewor
ICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3MgOiBtX3Byb2Nlc3NlcykgewogI2lmIEVOQUJMRShD
RlBSRUZTX0RJUkVDVF9NT0RFKQotICAgICAgICAgICAgbV9wcm9jZXNzZXNbaV0tPnVuYmxvY2tQ
cmVmZXJlbmNlU2VydmljZUlmTmVlZGVkKCk7CisgICAgICAgICAgICBwcm9jZXNzLT51bmJsb2Nr
UHJlZmVyZW5jZVNlcnZpY2VJZk5lZWRlZCgpOwogI2VuZGlmCi0gICAgICAgICAgICBtX3Byb2Nl
c3Nlc1tpXS0+dW5ibG9ja0FjY2Vzc2liaWxpdHlTZXJ2ZXJJZk5lZWRlZCgpOworICAgICAgICAg
ICAgcHJvY2Vzcy0+dW5ibG9ja0FjY2Vzc2liaWxpdHlTZXJ2ZXJJZk5lZWRlZCgpOwogICAgICAg
ICB9CiAgICAgfV07CiAjaWYgRU5BQkxFKENGUFJFRlNfRElSRUNUX01PREUpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUHJveHlDb2NvYS5tbSBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQcm94eUNvY29hLm1tCmlu
ZGV4IGQzMzRkZDQ0ZTA0MjdlNjc3YzEwZmUyYjQ4OTUxZTA3ZjU1NDExY2IuLjdiMTQ3M2M1ZDJl
ZGE5NDgyMjA0YWJhYjAyZDZlMGY2Y2RkM2VhNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQcm94eUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQcm94eUNvY29hLm1tCkBAIC0xNzgsNyArMTc4
LDcgQEAgdm9pZCBXZWJQcm9jZXNzUHJveHk6OmNhY2hlTWVkaWFNSU1FVHlwZXMoY29uc3QgVmVj
dG9yPFN0cmluZz4mIHR5cGVzKQogCiAgICAgbWVkaWFUeXBlQ2FjaGUoKSA9IHR5cGVzOwogICAg
IGZvciAoYXV0byYgcHJvY2VzcyA6IHByb2Nlc3NQb29sKCkucHJvY2Vzc2VzKCkpIHsKLSAgICAg
ICAgaWYgKHByb2Nlc3MgIT0gdGhpcykKKyAgICAgICAgaWYgKHByb2Nlc3MgIT0gKnRoaXMpCiAg
ICAgICAgICAgICBjYWNoZU1lZGlhTUlNRVR5cGVzSW50ZXJuYWwodHlwZXMpOwogICAgIH0KIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Zpc2l0ZWRMaW5rU3RvcmUuY3Bw
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVmlzaXRlZExpbmtTdG9yZS5jcHAKaW5kZXggNjUz
OWZjZWI5YzExMmIxOTdjY2FhYjNjZmFmMjNiZThlMmI1M2Y0Ny4uNjdmMzU1NzBjMWVkM2IzNWZl
YjQ0YTE1OWU4NWFiNDg4OTE5OGIxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvVmlzaXRlZExpbmtTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVmlz
aXRlZExpbmtTdG9yZS5jcHAKQEAgLTk1LDcgKzk1LDcgQEAgdm9pZCBWaXNpdGVkTGlua1N0b3Jl
OjpyZW1vdmVBbGwoKQogICAgIG1fbGlua0hhc2hTdG9yZS5jbGVhcigpOwogCiAgICAgZm9yIChh
dXRvJiBwcm9jZXNzIDogbV9wcm9jZXNzZXMpIHsKLSAgICAgICAgQVNTRVJUKHByb2Nlc3MucHJv
Y2Vzc1Bvb2woKS5wcm9jZXNzZXMoKS5jb250YWlucygmcHJvY2VzcykpOworICAgICAgICBBU1NF
UlQocHJvY2Vzcy5wcm9jZXNzUG9vbCgpLnByb2Nlc3NlcygpLmNvbnRhaW5zKHByb2Nlc3MpKTsK
ICAgICAgICAgcHJvY2Vzcy5zZW5kKE1lc3NhZ2VzOjpWaXNpdGVkTGlua1RhYmxlQ29udHJvbGxl
cjo6UmVtb3ZlQWxsVmlzaXRlZExpbmtzKCksIGlkZW50aWZpZXIoKSk7CiAgICAgfQogfQpAQCAt
MTEyLDcgKzExMiw3IEBAIHZvaWQgVmlzaXRlZExpbmtTdG9yZTo6YWRkVmlzaXRlZExpbmtIYXNo
RnJvbVBhZ2UoV2ViUGFnZVByb3h5SWRlbnRpZmllciBwYWdlUHJvCiAKIHZvaWQgVmlzaXRlZExp
bmtTdG9yZTo6c2VuZFN0b3JlSGFuZGxlVG9Qcm9jZXNzKFdlYlByb2Nlc3NQcm94eSYgcHJvY2Vz
cykKIHsKLSAgICBBU1NFUlQocHJvY2Vzcy5wcm9jZXNzUG9vbCgpLnByb2Nlc3NlcygpLmNvbnRh
aW5zKCZwcm9jZXNzKSk7CisgICAgQVNTRVJUKHByb2Nlc3MucHJvY2Vzc1Bvb2woKS5wcm9jZXNz
ZXMoKS5jb250YWlucyhwcm9jZXNzKSk7CiAKICAgICBTaGFyZWRNZW1vcnk6OkhhbmRsZSBoYW5k
bGU7CiAgICAgaWYgKCFtX2xpbmtIYXNoU3RvcmUuY3JlYXRlU2hhcmVkTWVtb3J5SGFuZGxlKGhh
bmRsZSkpCkBAIC0xMzgsNyArMTM4LDcgQEAgdm9pZCBWaXNpdGVkTGlua1N0b3JlOjpkaWRVcGRh
dGVTaGFyZWRTdHJpbmdIYXNoZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlNoYXJlZFMKICAgICBB
U1NFUlQoIWFkZGVkSGFzaGVzLmlzRW1wdHkoKSB8fCAhcmVtb3ZlZEhhc2hlcy5pc0VtcHR5KCkp
OwogCiAgICAgZm9yIChhdXRvJiBwcm9jZXNzIDogbV9wcm9jZXNzZXMpIHsKLSAgICAgICAgQVNT
RVJUKHByb2Nlc3MucHJvY2Vzc1Bvb2woKS5wcm9jZXNzZXMoKS5jb250YWlucygmcHJvY2Vzcykp
OworICAgICAgICBBU1NFUlQocHJvY2Vzcy5wcm9jZXNzUG9vbCgpLnByb2Nlc3NlcygpLmNvbnRh
aW5zKHByb2Nlc3MpKTsKIAogICAgICAgICBpZiAoYWRkZWRIYXNoZXMuc2l6ZSgpID4gMjAgfHwg
IXJlbW92ZWRIYXNoZXMuaXNFbXB0eSgpKQogICAgICAgICAgICAgcHJvY2Vzcy5zZW5kKE1lc3Nh
Z2VzOjpWaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlcjo6QWxsVmlzaXRlZExpbmtTdGF0ZUNoYW5n
ZWQoKSwgaWRlbnRpZmllcigpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlByb2Nlc3NQb29sLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQ
b29sLmNwcAppbmRleCAxZjM2ZTA1NmQxMDMwYjYxN2YzZDgwN2ZkNGQyNjViODhiMGQ2ZTE2Li5m
OTFkOGJmNjcwNjVkMTIzODliYzIzNWIwNTExNGMxN2QyNzViMmVhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCkBAIC01MTAsNyArNTEwLDcgQEAgdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6Z3B1UHJvY2Vzc0NyYXNoZWQoUHJvY2Vzc0lEIGlkZW50aWZpZXIpCiAg
ICAgbV9ncHVQcm9jZXNzID0gbnVsbHB0cjsKIAogICAgIG1fY2xpZW50LmdwdVByb2Nlc3NEaWRD
cmFzaCh0aGlzLCBpZGVudGlmaWVyKTsKLSAgICBWZWN0b3I8UmVmUHRyPFdlYlByb2Nlc3NQcm94
eT4+IHByb2Nlc3NlcyA9IG1fcHJvY2Vzc2VzOworICAgIFZlY3RvcjxSZWY8V2ViUHJvY2Vzc1By
b3h5Pj4gcHJvY2Vzc2VzID0gbV9wcm9jZXNzZXM7CiAgICAgZm9yIChhdXRvJiBwcm9jZXNzIDog
cHJvY2Vzc2VzKQogICAgICAgICBwcm9jZXNzLT5ncHVQcm9jZXNzQ3Jhc2hlZCgpOwogCkBAIC01
NjksMTQgKzU2OSwxNCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjplc3RhYmxpc2hXb3JrZXJDb250
ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoTmV0d29ya1BybwogCiAgICAgaWYgKCFzX3Vz
ZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpIHsKICAgICAgICAgZm9yIChhdXRvJiBwcm9j
ZXNzIDogcHJvY2Vzc1Bvb2wtPm1fcHJvY2Vzc2VzKSB7Ci0gICAgICAgICAgICBpZiAocHJvY2Vz
cyA9PSBwcm9jZXNzUG9vbC0+bV9wcmV3YXJtZWRQcm9jZXNzIHx8IHByb2Nlc3MtPmlzRHVtbXlQ
cm9jZXNzUHJveHkoKSkKKyAgICAgICAgICAgIGlmIChwcm9jZXNzLnB0cigpID09IHByb2Nlc3NQ
b29sLT5tX3ByZXdhcm1lZFByb2Nlc3MuZ2V0KCkgfHwgcHJvY2Vzcy0+aXNEdW1teVByb2Nlc3NQ
cm94eSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgaWYgKCZwcm9j
ZXNzLT53ZWJzaXRlRGF0YVN0b3JlKCkgIT0gd2Vic2l0ZURhdGFTdG9yZSkKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGlmICghcHJvY2Vzcy0+aXNNYXRjaGluZ1JlZ2lz
dHJhYmxlRG9tYWluKHJlZ2lzdHJhYmxlRG9tYWluKSkKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKIAotICAgICAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSA9IHByb2Nlc3MuZ2V0
KCk7CisgICAgICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5ID0gcHJvY2Vzcy5wdHIo
KTsKICAgICAgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPmVuYWJsZVNlcnZpY2VX
b3JrZXJzKHByb2Nlc3NQb29sLT51c2VyQ29udGVudENvbnRyb2xsZXJJZGVudGlmaWVyRm9yU2Vy
dmljZVdvcmtlcnMoKSk7CiAKICAgICAgICAgICAgIGlmIChzZXJ2aWNlV29ya2VyUHJvY2Vzc1By
b3h5LT5pc0luUHJvY2Vzc0NhY2hlKCkpIHsKQEAgLTY3MCw3ICs2NzAsNyBAQCBSZWZQdHI8V2Vi
UHJvY2Vzc1Byb3h5PiBXZWJQcm9jZXNzUG9vbDo6dHJ5VGFrZVByZXdhcm1lZFByb2Nlc3MoV2Vi
c2l0ZURhdGFTdG9yZQogICAgIC8vIFRoZXJlIGlzIHNvbWV0aW1lcyBhIGRlbGF5IHVudGlsIHdl
IGdldCBub3RpZmllZCB0aGF0IGEgcHJld2FybWVkIHByb2Nlc3MgaGFzIGJlZW4gdGVybWluYXRl
ZCAoZS5nLiBhZnRlciByZXN1bWluZwogICAgIC8vIGZyb20gc3VzcGVuc2lvbikgc28gbWFrZSBz
dXJlIHRoZSBwcm9jZXNzIGlzIHN0aWxsIHJ1bm5pbmcgaGVyZSBiZWZvcmUgZGVjaWRpbmcgdG8g
dXNlIGl0LgogICAgIGlmIChtX3ByZXdhcm1lZFByb2Nlc3MtPndhc1Rlcm1pbmF0ZWQoKSkgewot
ICAgICAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19FUlJPUihQcm9jZXNzLCAidHJ5VGFr
ZVByZXdhcm1lZFByb2Nlc3M6IE5vdCB1c2luZyBwcmV3YXJtZWQgcHJvY2VzcyBiZWNhdXNlIGl0
IGhhcyBiZWVuIHRlcm1pbmF0ZWQgKHByb2Nlc3M9JXAsIFBJRD0lZCkiLCBtX3ByZXdhcm1lZFBy
b2Nlc3MsIG1fcHJld2FybWVkUHJvY2Vzcy0+cHJvY2Vzc0lkZW50aWZpZXIoKSk7CisgICAgICAg
IFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0VSUk9SKFByb2Nlc3MsICJ0cnlUYWtlUHJld2Fy
bWVkUHJvY2VzczogTm90IHVzaW5nIHByZXdhcm1lZCBwcm9jZXNzIGJlY2F1c2UgaXQgaGFzIGJl
ZW4gdGVybWluYXRlZCAocHJvY2Vzcz0lcCwgUElEPSVkKSIsIG1fcHJld2FybWVkUHJvY2Vzcy5n
ZXQoKSwgbV9wcmV3YXJtZWRQcm9jZXNzLT5wcm9jZXNzSWRlbnRpZmllcigpKTsKICAgICAgICAg
bV9wcmV3YXJtZWRQcm9jZXNzID0gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgfQpAQCAtNjg2LDcgKzY4Niw3IEBAIFJlZlB0cjxXZWJQcm9jZXNzUHJveHk+IFdlYlByb2Nl
c3NQb29sOjp0cnlUYWtlUHJld2FybWVkUHJvY2VzcyhXZWJzaXRlRGF0YVN0b3JlCiAgICAgbV9w
cmV3YXJtZWRQcm9jZXNzLT5zZXRXZWJzaXRlRGF0YVN0b3JlKHdlYnNpdGVEYXRhU3RvcmUpOwog
ICAgIG1fcHJld2FybWVkUHJvY2Vzcy0+bWFya0lzTm9Mb25nZXJJblByZXdhcm1lZFBvb2woKTsK
IAotICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fcHJld2FybWVkUHJvY2VzcywgbnVsbHB0cik7
CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9wcmV3YXJtZWRQcm9jZXNzLCBudWxscHRyKS5n
ZXQoKTsKIH0KIAogI2lmIFBMQVRGT1JNKE1BQykKQEAgLTg3MSw3ICs4NzEsNyBAQCB2b2lkIFdl
YlByb2Nlc3NQb29sOjppbml0aWFsaXplTmV3V2ViUHJvY2VzcyhXZWJQcm9jZXNzUHJveHkmIHBy
b2Nlc3MsIFdlYnNpdGVEYQogCiAgICAgaWYgKGlzUHJld2FybWVkID09IFdlYlByb2Nlc3NQcm94
eTo6SXNQcmV3YXJtZWQ6OlllcykgewogICAgICAgICBBU1NFUlQoIW1fcHJld2FybWVkUHJvY2Vz
cyk7Ci0gICAgICAgIG1fcHJld2FybWVkUHJvY2VzcyA9ICZwcm9jZXNzOworICAgICAgICBtX3By
ZXdhcm1lZFByb2Nlc3MgPSBtYWtlV2Vha1B0cihwcm9jZXNzKTsKICAgICB9CiAKICNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKSAmJiAhUExBVEZPUk0oTUFDQ0FUQUxZU1QpCkBAIC05MDEsMTcgKzkw
MSwxNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwcmV3YXJtUHJvY2VzcygpCiB2b2lkIFdlYlBy
b2Nlc3NQb29sOjplbmFibGVQcm9jZXNzVGVybWluYXRpb24oKQogewogICAgIG1fcHJvY2Vzc1Rl
cm1pbmF0aW9uRW5hYmxlZCA9IHRydWU7Ci0gICAgLy8gRklYTUU6IG1fcHJvY2Vzc2VzIHNob3Vs
ZCBiZSBWZWN0b3I8UmVmPFdlYlByb2Nlc3NQcm94eT4+Ci0gICAgVmVjdG9yPFJlZlB0cjxXZWJQ
cm9jZXNzUHJveHk+PiBwcm9jZXNzZXMgPSBtX3Byb2Nlc3NlczsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHByb2Nlc3Nlcy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoc2hvdWxkVGVy
bWluYXRlKCpwcm9jZXNzZXNbaV0pKQotICAgICAgICAgICAgcHJvY2Vzc2VzW2ldLT50ZXJtaW5h
dGUoKTsKKyAgICBWZWN0b3I8UmVmPFdlYlByb2Nlc3NQcm94eT4+IHByb2Nlc3NlcyA9IG1fcHJv
Y2Vzc2VzOworICAgIGZvciAoYXV0byYgcHJvY2VzcyA6IHByb2Nlc3NlcykgeworICAgICAgICBp
ZiAoc2hvdWxkVGVybWluYXRlKHByb2Nlc3MpKQorICAgICAgICAgICAgcHJvY2Vzcy0+dGVybWlu
YXRlKCk7CiAgICAgfQogfQogCiBib29sIFdlYlByb2Nlc3NQb29sOjpzaG91bGRUZXJtaW5hdGUo
V2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzKQogewotICAgIEFTU0VSVChtX3Byb2Nlc3Nlcy5jb250
YWlucygmcHJvY2VzcykpOworICAgIEFTU0VSVChtX3Byb2Nlc3Nlcy5jb250YWlucyhwcm9jZXNz
KSk7CiAKICAgICBpZiAoIW1fcHJvY2Vzc1Rlcm1pbmF0aW9uRW5hYmxlZCB8fCBtX2NvbmZpZ3Vy
YXRpb24tPmFsd2F5c0tlZXBBbmRSZXVzZVN3YXBwZWRQcm9jZXNzZXMoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwpAQCAtOTE5LDcgKzkxOCw3IEBAIGJvb2wgV2ViUHJvY2Vzc1Bvb2w6OnNob3Vs
ZFRlcm1pbmF0ZShXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3MpCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnByb2Nlc3NEaWRGaW5pc2hMYXVuY2hpbmcoV2ViUHJv
Y2Vzc1Byb3h5KiBwcm9jZXNzKQordm9pZCBXZWJQcm9jZXNzUG9vbDo6cHJvY2Vzc0RpZEZpbmlz
aExhdW5jaGluZyhXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3MpCiB7CiAgICAgQVNTRVJUKG1fcHJv
Y2Vzc2VzLmNvbnRhaW5zKHByb2Nlc3MpKTsKIApAQCAtOTMzLDI0ICs5MzIsMjQgQEAgdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6cHJvY2Vzc0RpZEZpbmlzaExhdW5jaGluZyhXZWJQcm9jZXNzUHJveHkq
IHByb2Nlc3MpCiAgICAgaWYgKG1fbWVtb3J5U2FtcGxlckVuYWJsZWQpIHsKICAgICAgICAgU2Fu
ZGJveEV4dGVuc2lvbjo6SGFuZGxlIHNhbXBsZUxvZ1NhbmRib3hIYW5kbGU7ICAgICAgICAKICAg
ICAgICAgV2FsbFRpbWUgbm93ID0gV2FsbFRpbWU6Om5vdygpOwotICAgICAgICBTdHJpbmcgc2Ft
cGxlTG9nRmlsZVBhdGggPSBtYWtlU3RyaW5nKCJXZWJQcm9jZXNzIiwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQgbG9uZyBsb25nPihub3cuc2Vjb25kc1NpbmNlRXBvY2goKS5zZWNvbmRzKCkpLCAicGlk
IiwgcHJvY2Vzcy0+cHJvY2Vzc0lkZW50aWZpZXIoKSk7CisgICAgICAgIFN0cmluZyBzYW1wbGVM
b2dGaWxlUGF0aCA9IG1ha2VTdHJpbmcoIldlYlByb2Nlc3MiLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBsb25nIGxvbmc+KG5vdy5zZWNvbmRzU2luY2VFcG9jaCgpLnNlY29uZHMoKSksICJwaWQiLCBw
cm9jZXNzLnByb2Nlc3NJZGVudGlmaWVyKCkpOwogICAgICAgICBzYW1wbGVMb2dGaWxlUGF0aCA9
IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclRlbXBvcmFyeUZpbGUoc2FtcGxlTG9n
RmlsZVBhdGgsIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgc2FtcGxlTG9nU2Fu
ZGJveEhhbmRsZSk7CiAgICAgICAgIAotICAgICAgICBwcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJQcm9jZXNzOjpTdGFydE1lbW9yeVNhbXBsZXIoc2FtcGxlTG9nU2FuZGJveEhhbmRsZSwgc2Ft
cGxlTG9nRmlsZVBhdGgsIG1fbWVtb3J5U2FtcGxlckludGVydmFsKSwgMCk7CisgICAgICAgIHBy
b2Nlc3Muc2VuZChNZXNzYWdlczo6V2ViUHJvY2Vzczo6U3RhcnRNZW1vcnlTYW1wbGVyKHNhbXBs
ZUxvZ1NhbmRib3hIYW5kbGUsIHNhbXBsZUxvZ0ZpbGVQYXRoLCBtX21lbW9yeVNhbXBsZXJJbnRl
cnZhbCksIDApOwogICAgIH0KIAogICAgIGlmIChtX2NvbmZpZ3VyYXRpb24tPmZ1bGx5U3luY2hy
b25vdXNNb2RlSXNBbGxvd2VkRm9yVGVzdGluZygpKQotICAgICAgICBwcm9jZXNzLT5jb25uZWN0
aW9uKCktPmFsbG93RnVsbHlTeW5jaHJvbm91c01vZGVGb3JUZXN0aW5nKCk7CisgICAgICAgIHBy
b2Nlc3MuY29ubmVjdGlvbigpLT5hbGxvd0Z1bGx5U3luY2hyb25vdXNNb2RlRm9yVGVzdGluZygp
OwogCiAgICAgaWYgKG1fY29uZmlndXJhdGlvbi0+aWdub3JlU3luY2hyb25vdXNNZXNzYWdpbmdU
aW1lb3V0c0ZvclRlc3RpbmcoKSkKLSAgICAgICAgcHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5pZ25v
cmVUaW1lb3V0c0ZvclRlc3RpbmcoKTsKKyAgICAgICAgcHJvY2Vzcy5jb25uZWN0aW9uKCktPmln
bm9yZVRpbWVvdXRzRm9yVGVzdGluZygpOwogCi0gICAgbV9jb25uZWN0aW9uQ2xpZW50LmRpZENy
ZWF0ZUNvbm5lY3Rpb24odGhpcywgcHJvY2Vzcy0+d2ViQ29ubmVjdGlvbigpKTsKKyAgICBtX2Nv
bm5lY3Rpb25DbGllbnQuZGlkQ3JlYXRlQ29ubmVjdGlvbih0aGlzLCBwcm9jZXNzLndlYkNvbm5l
Y3Rpb24oKSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmRpc2Nvbm5lY3RQcm9jZXNzKFdl
YlByb2Nlc3NQcm94eSYgcHJvY2VzcykKIHsKLSAgICBBU1NFUlQobV9wcm9jZXNzZXMuY29udGFp
bnMoJnByb2Nlc3MpKTsKKyAgICBBU1NFUlQobV9wcm9jZXNzZXMuY29udGFpbnMocHJvY2Vzcykp
OwogCiAgICAgaWYgKG1fcHJld2FybWVkUHJvY2VzcyA9PSAmcHJvY2VzcykgewogICAgICAgICBB
U1NFUlQobV9wcmV3YXJtZWRQcm9jZXNzLT5pc1ByZXdhcm1lZCgpKTsKQEAgLTk3Myw3ICs5NzIs
NyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpkaXNjb25uZWN0UHJvY2VzcyhXZWJQcm9jZXNzUHJv
eHkmIHByb2Nlc3MpCiAKICAgICBzdGF0aWNfY2FzdDxXZWJDb250ZXh0U3VwcGxlbWVudCo+KHN1
cHBsZW1lbnQ8V2ViR2VvbG9jYXRpb25NYW5hZ2VyUHJveHk+KCkpLT5wcm9jZXNzRGlkQ2xvc2Uo
JnByb2Nlc3MpOwogCi0gICAgbV9wcm9jZXNzZXMucmVtb3ZlRmlyc3QoJnByb2Nlc3MpOworICAg
IG1fcHJvY2Vzc2VzLnJlbW92ZUZpcnN0KHByb2Nlc3MpOwogCiAjaWYgRU5BQkxFKEdBTUVQQUQp
CiAgICAgaWYgKG1fcHJvY2Vzc2VzVXNpbmdHYW1lcGFkcy5jb250YWlucyhwcm9jZXNzKSkKQEAg
LTk4NywxNCArOTg2LDE0IEBAIFJlZjxXZWJQcm9jZXNzUHJveHk+IFdlYlByb2Nlc3NQb29sOjpw
cm9jZXNzRm9yUmVnaXN0cmFibGVEb21haW4oV2Vic2l0ZURhdGFTdG9yCiB7CiAgICAgaWYgKCFy
ZWdpc3RyYWJsZURvbWFpbi5pc0VtcHR5KCkpIHsKICAgICAgICAgaWYgKGF1dG8gcHJvY2VzcyA9
IHdlYlByb2Nlc3NDYWNoZSgpLnRha2VQcm9jZXNzKHJlZ2lzdHJhYmxlRG9tYWluLCB3ZWJzaXRl
RGF0YVN0b3JlKSkgewotICAgICAgICAgICAgQVNTRVJUKG1fcHJvY2Vzc2VzLmNvbnRhaW5zKHBy
b2Nlc3MuZ2V0KCkpKTsKKyAgICAgICAgICAgIEFTU0VSVChtX3Byb2Nlc3Nlcy5jb250YWlucygq
cHJvY2VzcykpOwogICAgICAgICAgICAgcmV0dXJuIHByb2Nlc3MucmVsZWFzZU5vbk51bGwoKTsK
ICAgICAgICAgfQogCiAgICAgICAgIC8vIENoZWNrIGlmIHdlIGhhdmUgYSBzdXNwZW5kZWQgcGFn
ZSBmb3IgdGhlIGdpdmVuIHJlZ2lzdHJhYmxlIGRvbWFpbiBhbmQgdXNlIGl0cyBwcm9jZXNzIGlm
IHdlIGRvLCBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucy4KICAgICAgICAgaWYgKGF1dG8gcHJvY2Vz
cyA9IFN1c3BlbmRlZFBhZ2VQcm94eTo6ZmluZFJldXNhYmxlU3VzcGVuZGVkUGFnZVByb2Nlc3Mo
KnRoaXMsIHJlZ2lzdHJhYmxlRG9tYWluLCB3ZWJzaXRlRGF0YVN0b3JlKSkgewogICAgICAgICAg
ICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0coUHJvY2Vzc1N3YXBwaW5nLCAicHJvY2Vzc0Zv
clJlZ2lzdHJhYmxlRG9tYWluOiBVc2luZyBXZWJQcm9jZXNzIGZyb20gYSBTdXNwZW5kZWRQYWdl
IChwcm9jZXNzPSVwLCBQSUQ9JWkpIiwgcHJvY2Vzcy5nZXQoKSwgcHJvY2Vzcy0+cHJvY2Vzc0lk
ZW50aWZpZXIoKSk7Ci0gICAgICAgICAgICBBU1NFUlQobV9wcm9jZXNzZXMuY29udGFpbnMocHJv
Y2Vzcy5nZXQoKSkpOworICAgICAgICAgICAgQVNTRVJUKG1fcHJvY2Vzc2VzLmNvbnRhaW5zKCpw
cm9jZXNzKSk7CiAgICAgICAgICAgICByZXR1cm4gcHJvY2Vzcy5yZWxlYXNlTm9uTnVsbCgpOwog
ICAgICAgICB9CiAgICAgfQpAQCAtMTAwMyw3ICsxMDAyLDcgQEAgUmVmPFdlYlByb2Nlc3NQcm94
eT4gV2ViUHJvY2Vzc1Bvb2w6OnByb2Nlc3NGb3JSZWdpc3RyYWJsZURvbWFpbihXZWJzaXRlRGF0
YVN0b3IKICAgICAgICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0coUHJvY2Vzc1N3YXBwaW5n
LCAicHJvY2Vzc0ZvclJlZ2lzdHJhYmxlRG9tYWluOiBVc2luZyBwcmV3YXJtZWQgcHJvY2VzcyAo
cHJvY2Vzcz0lcCwgUElEPSVpKSIsIHByb2Nlc3MuZ2V0KCksIHByb2Nlc3MtPnByb2Nlc3NJZGVu
dGlmaWVyKCkpOwogICAgICAgICBpZiAoIXJlZ2lzdHJhYmxlRG9tYWluLmlzRW1wdHkoKSkKICAg
ICAgICAgICAgIHRyeVByZXdhcm1XaXRoRG9tYWluSW5mb3JtYXRpb24oKnByb2Nlc3MsIHJlZ2lz
dHJhYmxlRG9tYWluKTsKLSAgICAgICAgQVNTRVJUKG1fcHJvY2Vzc2VzLmNvbnRhaW5zKHByb2Nl
c3MuZ2V0KCkpKTsKKyAgICAgICAgQVNTRVJUKG1fcHJvY2Vzc2VzLmNvbnRhaW5zKCpwcm9jZXNz
KSk7CiAgICAgICAgIHJldHVybiBwcm9jZXNzLnJlbGVhc2VOb25OdWxsKCk7CiAgICAgfQogCkBA
IC0xMDE1LDcgKzEwMTQsNyBAQCBSZWY8V2ViUHJvY2Vzc1Byb3h5PiBXZWJQcm9jZXNzUG9vbDo6
cHJvY2Vzc0ZvclJlZ2lzdHJhYmxlRG9tYWluKFdlYnNpdGVEYXRhU3RvcgogI2VuZGlmCiAKICAg
ICAgICAgZm9yIChhdXRvJiBwcm9jZXNzIDogbV9wcm9jZXNzZXMpIHsKLSAgICAgICAgICAgIGlm
IChwcm9jZXNzID09IG1fcHJld2FybWVkUHJvY2VzcyB8fCBwcm9jZXNzLT5pc0R1bW15UHJvY2Vz
c1Byb3h5KCkpCisgICAgICAgICAgICBpZiAocHJvY2Vzcy5wdHIoKSA9PSBtX3ByZXdhcm1lZFBy
b2Nlc3MuZ2V0KCkgfHwgcHJvY2Vzcy0+aXNEdW1teVByb2Nlc3NQcm94eSgpKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAgICAgICAgICAg
IGlmIChwcm9jZXNzLT5pc1J1bm5pbmdTZXJ2aWNlV29ya2VycygpKQpAQCAtMTAyMyw3ICsxMDIy
LDcgQEAgUmVmPFdlYlByb2Nlc3NQcm94eT4gV2ViUHJvY2Vzc1Bvb2w6OnByb2Nlc3NGb3JSZWdp
c3RyYWJsZURvbWFpbihXZWJzaXRlRGF0YVN0b3IKICNlbmRpZgogICAgICAgICAgICAgaWYgKG11
c3RNYXRjaERhdGFTdG9yZSAmJiAmcHJvY2Vzcy0+d2Vic2l0ZURhdGFTdG9yZSgpICE9ICZ3ZWJz
aXRlRGF0YVN0b3JlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgcmV0
dXJuICpwcm9jZXNzOworICAgICAgICAgICAgcmV0dXJuIHByb2Nlc3M7CiAgICAgICAgIH0KICAg
ICB9CiAgICAgcmV0dXJuIGNyZWF0ZU5ld1dlYlByb2Nlc3MoJndlYnNpdGVEYXRhU3RvcmUpOwpA
QCAtMTA3MCw3ICsxMDY5LDcgQEAgUmVmPFdlYlBhZ2VQcm94eT4gV2ViUHJvY2Vzc1Bvb2w6OmNy
ZWF0ZVdlYlBhZ2UoUGFnZUNsaWVudCYgcGFnZUNsaWVudCwgUmVmPEFQSToKICAgICAgICAgaWYg
KCFwcm9jZXNzKSB7CiAgICAgICAgICAgICBwcm9jZXNzID0gV2ViUHJvY2Vzc1Byb3h5OjpjcmVh
dGUoKnRoaXMsIHBhZ2VDb25maWd1cmF0aW9uLT53ZWJzaXRlRGF0YVN0b3JlKCksIFdlYlByb2Nl
c3NQcm94eTo6SXNQcmV3YXJtZWQ6Ok5vLCBXZWJQcm9jZXNzUHJveHk6OlNob3VsZExhdW5jaFBy
b2Nlc3M6Ok5vKTsKICAgICAgICAgICAgIG1fZHVtbXlQcm9jZXNzUHJveGllcy5hZGQocGFnZUNv
bmZpZ3VyYXRpb24tPndlYnNpdGVEYXRhU3RvcmUoKS0+c2Vzc2lvbklEKCksIG1ha2VXZWFrUHRy
KCpwcm9jZXNzKSk7Ci0gICAgICAgICAgICBtX3Byb2Nlc3Nlcy5hcHBlbmQocHJvY2Vzcy5jb3B5
UmVmKCkpOworICAgICAgICAgICAgbV9wcm9jZXNzZXMuYXBwZW5kKCpwcm9jZXNzKTsKICAgICAg
ICAgfQogICAgIH0gZWxzZQogICAgICAgICBwcm9jZXNzID0gcHJvY2Vzc0ZvclJlZ2lzdHJhYmxl
RG9tYWluKCpwYWdlQ29uZmlndXJhdGlvbi0+d2Vic2l0ZURhdGFTdG9yZSgpLCBudWxscHRyLCB7
IH0pOwpAQCAtMTUwMSw3ICsxNTAwLDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c3RvcE1lbW9y
eVNhbXBsZXIoKQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlQWxsV2ViQ29udGVudFBy
b2Nlc3NlcygpCiB7CiAgICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfRVJST1IoUHJvY2Vz
cywgInRlcm1pbmF0ZUFsbFdlYkNvbnRlbnRQcm9jZXNzZXMiKTsKLSAgICBWZWN0b3I8UmVmUHRy
PFdlYlByb2Nlc3NQcm94eT4+IHByb2Nlc3NlcyA9IG1fcHJvY2Vzc2VzOworICAgIFZlY3RvcjxS
ZWY8V2ViUHJvY2Vzc1Byb3h5Pj4gcHJvY2Vzc2VzID0gbV9wcm9jZXNzZXM7CiAgICAgZm9yIChh
dXRvJiBwcm9jZXNzIDogcHJvY2Vzc2VzKQogICAgICAgICBwcm9jZXNzLT50ZXJtaW5hdGUoKTsK
IH0KQEAgLTE1NTgsMTEgKzE1NTcsMTEgQEAgYm9vbCBXZWJQcm9jZXNzUG9vbDo6aHR0cFBpcGVs
aW5pbmdFbmFibGVkKCkgY29uc3QKICNlbmRpZgogfQogCi1zdGF0aWMgV2ViUHJvY2Vzc1Byb3h5
KiB3ZWJQcm9jZXNzUHJveHlGcm9tQ29ubmVjdGlvbihJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rp
b24sIGNvbnN0IFZlY3RvcjxSZWZQdHI8V2ViUHJvY2Vzc1Byb3h5Pj4mIHByb2Nlc3NlcykKK3N0
YXRpYyBXZWJQcm9jZXNzUHJveHkqIHdlYlByb2Nlc3NQcm94eUZyb21Db25uZWN0aW9uKElQQzo6
Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3QgVmVjdG9yPFJlZjxXZWJQcm9jZXNzUHJveHk+
PiYgcHJvY2Vzc2VzKQogewogICAgIGZvciAoYXV0byYgcHJvY2VzcyA6IHByb2Nlc3Nlcykgewog
ICAgICAgICBpZiAocHJvY2Vzcy0+aGFzQ29ubmVjdGlvbihjb25uZWN0aW9uKSkKLSAgICAgICAg
ICAgIHJldHVybiBwcm9jZXNzLmdldCgpOworICAgICAgICAgICAgcmV0dXJuIHByb2Nlc3MucHRy
KCk7CiAgICAgfQogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAppbmRleCA0ZTlmNjY4NGNiYWIxNDk0NjE3YWY1M2MzMmMy
ZjlhMzM2OGY4MGRlLi5kYzdhMWExMzVmMGZmNzJhOWRmYzIyMDc4Yzg2NTU2ZTZiZjdhZmM5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgKQEAgLTE4Niw3ICsxODYs
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlk
ZW50aWZpZXIoY29uc3QgU3RyaW5nJik7CiAgICAgY29uc3QgU3RyaW5nJiBjdXN0b21XZWJDb250
ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIoKSB7IHJldHVybiBtX2NvbmZpZ3VyYXRpb24tPmN1
c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcigpOyB9CiAKLSAgICBjb25zdCBW
ZWN0b3I8UmVmUHRyPFdlYlByb2Nlc3NQcm94eT4+JiBwcm9jZXNzZXMoKSBjb25zdCB7IHJldHVy
biBtX3Byb2Nlc3NlczsgfQorICAgIGNvbnN0IFZlY3RvcjxSZWY8V2ViUHJvY2Vzc1Byb3h5Pj4m
IHByb2Nlc3NlcygpIGNvbnN0IHsgcmV0dXJuIG1fcHJvY2Vzc2VzOyB9CiAKICAgICAvLyBXZWJQ
cm9jZXNzUHJveHkgb2JqZWN0IHdoaWNoIGRvZXMgbm90IGhhdmUgYSBydW5uaW5nIHByb2Nlc3Mg
d2hpY2ggaXMgdXNlZCBmb3IgY29udmVuaWVuY2UsIHRvIGF2b2lkCiAgICAgLy8gbnVsbCBjaGVj
a3MgaW4gV2ViUGFnZVByb3h5LgpAQCAtMTk1LDcgKzE5NSw3IEBAIHB1YmxpYzoKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHNlbmRUb0FsbFByb2Nlc3Nlcyhjb25zdCBUJiBtZXNzYWdl
KTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHNlbmRUb0FsbFByb2Nlc3Nlc0ZvclNl
c3Npb24oY29uc3QgVCYgbWVzc2FnZSwgUEFMOjpTZXNzaW9uSUQpOwogCi0gICAgdm9pZCBwcm9j
ZXNzRGlkRmluaXNoTGF1bmNoaW5nKFdlYlByb2Nlc3NQcm94eSopOworICAgIHZvaWQgcHJvY2Vz
c0RpZEZpbmlzaExhdW5jaGluZyhXZWJQcm9jZXNzUHJveHkmKTsKIAogICAgIFdlYlByb2Nlc3ND
YWNoZSYgd2ViUHJvY2Vzc0NhY2hlKCkgeyByZXR1cm4gbV93ZWJQcm9jZXNzQ2FjaGUuZ2V0KCk7
IH0KIApAQCAtNTk2LDggKzU5Niw4IEBAIHByaXZhdGU6CiAKICAgICBJUEM6Ok1lc3NhZ2VSZWNl
aXZlck1hcCBtX21lc3NhZ2VSZWNlaXZlck1hcDsKIAotICAgIFZlY3RvcjxSZWZQdHI8V2ViUHJv
Y2Vzc1Byb3h5Pj4gbV9wcm9jZXNzZXM7Ci0gICAgV2ViUHJvY2Vzc1Byb3h5KiBtX3ByZXdhcm1l
ZFByb2Nlc3MgeyBudWxscHRyIH07CisgICAgVmVjdG9yPFJlZjxXZWJQcm9jZXNzUHJveHk+PiBt
X3Byb2Nlc3NlczsKKyAgICBXZWFrUHRyPFdlYlByb2Nlc3NQcm94eT4gbV9wcmV3YXJtZWRQcm9j
ZXNzOwogCiAgICAgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgV2Vha1B0cjxXZWJQcm9jZXNzUHJv
eHk+PiBtX2R1bW15UHJvY2Vzc1Byb3hpZXM7IC8vIExpZ2h0d2VpZ2h0IFdlYlByb2Nlc3NQcm94
eSBvYmplY3RzIHdpdGhvdXQgYmFja2luZyBwcm9jZXNzLgogCkBAIC03OTcsOSArNzk3LDcgQEAg
cHJpdmF0ZToKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5k
VG9BbGxQcm9jZXNzZXMoY29uc3QgVCYgbWVzc2FnZSkKIHsKLSAgICBzaXplX3QgcHJvY2Vzc0Nv
dW50ID0gbV9wcm9jZXNzZXMuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJv
Y2Vzc0NvdW50OyArK2kpIHsKLSAgICAgICAgV2ViUHJvY2Vzc1Byb3h5KiBwcm9jZXNzID0gbV9w
cm9jZXNzZXNbaV0uZ2V0KCk7CisgICAgZm9yIChhdXRvJiBwcm9jZXNzIDogbV9wcm9jZXNzZXMp
IHsKICAgICAgICAgaWYgKHByb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpCiAgICAgICAgICAgICBw
cm9jZXNzLT5zZW5kKFQobWVzc2FnZSksIDApOwogICAgIH0KQEAgLTgwOCw5ICs4MDYsNyBAQCB2
b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kVG9BbGxQcm9jZXNzZXMoY29uc3QgVCYgbWVzc2FnZSkK
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kVG9BbGxQcm9j
ZXNzZXNGb3JTZXNzaW9uKGNvbnN0IFQmIG1lc3NhZ2UsIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCkKIHsKLSAgICBzaXplX3QgcHJvY2Vzc0NvdW50ID0gbV9wcm9jZXNzZXMuc2l6ZSgpOwotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvY2Vzc0NvdW50OyArK2kpIHsKLSAgICAgICAgV2Vi
UHJvY2Vzc1Byb3h5KiBwcm9jZXNzID0gbV9wcm9jZXNzZXNbaV0uZ2V0KCk7CisgICAgZm9yIChh
dXRvJiBwcm9jZXNzIDogbV9wcm9jZXNzZXMpIHsKICAgICAgICAgaWYgKHByb2Nlc3MtPmNhblNl
bmRNZXNzYWdlKCkgJiYgIXByb2Nlc3MtPmlzUHJld2FybWVkKCkgJiYgcHJvY2Vzcy0+c2Vzc2lv
bklEKCkgPT0gc2Vzc2lvbklEKQogICAgICAgICAgICAgcHJvY2Vzcy0+c2VuZChUKG1lc3NhZ2Up
LCAwKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9j
ZXNzUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNw
cAppbmRleCA5NzI4MjM3MmRhYTU3ZmIyMjc4OGI0ZDczMThkMmNmNTZmNjAyMGNiLi40ODYyNzc3
MDE0NWUwNTk0NjViYTg0Y2E2M2RiM2E1NjczNTdmODE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAKQEAgLTEwMjgsNyArMTAyOCw3IEBAIHZvaWQgV2Vi
UHJvY2Vzc1Byb3h5OjpkaWRGaW5pc2hMYXVuY2hpbmcoUHJvY2Vzc0xhdW5jaGVyKiBsYXVuY2hl
ciwgSVBDOjpDb25uZWN0CiAgICAgUkVMRUFTRV9BU1NFUlQoIW1fd2ViQ29ubmVjdGlvbik7CiAg
ICAgbV93ZWJDb25uZWN0aW9uID0gV2ViQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Y3JlYXRlKHRo
aXMpOwogCi0gICAgbV9wcm9jZXNzUG9vbC0+cHJvY2Vzc0RpZEZpbmlzaExhdW5jaGluZyh0aGlz
KTsKKyAgICBtX3Byb2Nlc3NQb29sLT5wcm9jZXNzRGlkRmluaXNoTGF1bmNoaW5nKCp0aGlzKTsK
ICAgICBtX2JhY2tncm91bmRSZXNwb25zaXZlbmVzc1RpbWVyLnVwZGF0ZVN0YXRlKCk7CiAKICNp
ZiBFTkFCTEUoSVBDX1RFU1RJTkdfQVBJKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>425700</attachid>
            <date>2021-04-10 23:10:25 -0700</date>
            <delta_ts>2021-04-13 14:54:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-224412-20210410231024.patch</filename>
            <type>text/plain</type>
            <size>25801</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc1ODA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGMwZTU5ODQwMjVhZTkxMmQ5NTgzZWIz
Y2ZjMWMzNzc5NmMzZDcxODUuLjY3YWU5NWJhODdiNmE2MDAwMzY0NWI3ZDc5MDYwNjU2ZjI2YWE1
ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjEtMDQtMTAgIEFsZXggQ2hyaXN0ZW5zZW4gIDxh
Y2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBXZWJQcm9jZXNzUG9vbCBzaG91bGQg
c3RvcmUgVmVjdG9yPFJlZjxXZWJQcm9jZXNzUHJveHk+PiBpbnN0ZWFkIG9mIFZlY3RvcjxSZWZQ
dHI+CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjQ0
MTIKKworICAgICAgICBSZXZpZXdlZCBieSBDaHJpcyBEdW1lei4KKworICAgICAgICAqIHd0Zi9S
ZWYuaDoKKyAgICAgICAgKFdURjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXVEY6Om9wZXJhdG9y
IT0pOgorCiAyMDIxLTA0LTA5ICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAg
ICAgICAgIFdURiBTb2Z0TGlua2luZyBtYWNyb3MgY2FuIGNhdXNlIGNvbGxpc2lvbnMgd2l0aCB0
aGVpciB0YXJnZXQgZnVuY3Rpb25zCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTM3ZTM2YWE4MmQ5YzYxN2VkZjE5
NGJkZWQzOTliMzk5N2RhNjNmYi4uMDBiOGRiNTMzYjU2M2JhNzY4ZDA2MTU0YTZkODg0MjU4YzM5
ZDczOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDIxLTA0LTEwICBBbGV4IENocmlz
dGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgV2ViUHJvY2Vzc1Bv
b2wgc2hvdWxkIHN0b3JlIFZlY3RvcjxSZWY8V2ViUHJvY2Vzc1Byb3h5Pj4gaW5zdGVhZCBvZiBW
ZWN0b3I8UmVmUHRyPgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjI0NDEyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQ2hyaXMgRHVtZXouCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9y
PT0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3IhPSk6IERlbGV0ZWQuCisg
ICAgICAgIFJlbW92ZSB0aGUgUmVmIGNvbXBhcmF0b3JzIGZvciBSZWY8U2hhcmVkQnVmZmVyPiB3
aGljaCB3ZXJlIG9ubHkgdXNlZCBpbiB0ZXN0cy4KKwogMjAyMS0wNC0xMCAgQ2hyaXMgRHVtZXog
IDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFJlZ3Jlc3Npb24ocjI3NTY2OCkgUG90ZW50
aWFsIG51bGwgcG9pbnRlciBkZXJlZiBpbiBBdWRpb1BhcmFtOjpleHBvbmVudGlhbFJhbXBUb1Zh
bHVlQXRUaW1lKGZsb2F0LCBkb3VibGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDcwYTlmYWIxZTM3OWExZDBhZGZi
Zjc0ZWJjMWJjMTRhZWRiYWFkYTUuLmJiOThlZjUxMDRiMTQ4OGIwOTUxOTJlZTY3OTFmZDllY2M3
OGZhZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDAgQEAKKzIwMjEtMDQtMTAgIEFsZXggQ2hyaXN0
ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBXZWJQcm9jZXNzUG9v
bCBzaG91bGQgc3RvcmUgVmVjdG9yPFJlZjxXZWJQcm9jZXNzUHJveHk+PiBpbnN0ZWFkIG9mIFZl
Y3RvcjxSZWZQdHI+CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMjQ0MTIKKworICAgICAgICBSZXZpZXdlZCBieSBDaHJpcyBEdW1lei4KKworICAgICAg
ICBObyBjaGFuZ2UgaW4gYmVoYXZpb3IsIGV4Y2VwdCBJIGFsc28gY2hhbmdlZCBhIHJhdyBwb2lu
dGVyIHRvIGEgV2Vha1B0ciwgc28gd2Ugc2hvdWxkIGJlIGEgbGl0dGxlIHNhZmVyLgorCisgICAg
ICAgICogVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW06CisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpyZW1vdGVXZWJJbnNwZWN0b3JFbmFibGVkQ2FsbGJhY2sp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJOb3RpZmljYXRpb25P
YnNlcnZlcnMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUHJveHlDb2Nv
YS5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpjYWNoZU1lZGlhTUlNRVR5
cGVzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvVmlzaXRlZExpbmtTdG9yZS5jcHA6CisgICAgICAg
IChXZWJLaXQ6OlZpc2l0ZWRMaW5rU3RvcmU6OnJlbW92ZUFsbCk6CisgICAgICAgIChXZWJLaXQ6
OlZpc2l0ZWRMaW5rU3RvcmU6OnNlbmRTdG9yZUhhbmRsZVRvUHJvY2Vzcyk6CisgICAgICAgIChX
ZWJLaXQ6OlZpc2l0ZWRMaW5rU3RvcmU6OmRpZFVwZGF0ZVNoYXJlZFN0cmluZ0hhc2hlcyk6Cisg
ICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUHJvY2Vzc1Bvb2w6OmdwdVByb2Nlc3NDcmFzaGVkKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzc1Bvb2w6OmVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJv
Y2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp0cnlUYWtlUHJld2FybWVk
UHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjppbml0aWFsaXplTmV3
V2ViUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjplbmFibGVQcm9j
ZXNzVGVybWluYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2hvdWxk
VGVybWluYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnByb2Nlc3NEaWRG
aW5pc2hMYXVuY2hpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6ZGlzY29u
bmVjdFByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cHJvY2Vzc0Zv
clJlZ2lzdHJhYmxlRG9tYWluKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmNy
ZWF0ZVdlYlBhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRl
QWxsV2ViQ29udGVudFByb2Nlc3Nlcyk6CisgICAgICAgIChXZWJLaXQ6OndlYlByb2Nlc3NQcm94
eUZyb21Db25uZWN0aW9uKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaDoK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmRUb0FsbFByb2Nlc3Nlcyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kVG9BbGxQcm9jZXNzZXNGb3JTZXNz
aW9uKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpkaWRGaW5pc2hMYXVuY2hpbmcpOgorCiAyMDIxLTA0
LTEwICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgVXNlIFdlYWtIYXNoU2V0PFdlYlByb2Nlc3NQcm94eT4gaW5zdGVhZCBvZiBIYXNoU2V0PFdl
YlByb2Nlc3NQcm94eSo+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9SZWYuaCBiL1NvdXJj
ZS9XVEYvd3RmL1JlZi5oCmluZGV4IDcyNmE0ZTZkZjMzNjdjMGE2NDFiNTAzNTFhZmVkYzAwODcz
ZmEwNzMuLjMwNzU1NWYzOTY5MmNjMzgyOGY1YTc4NTY2MWM4NTM5N2Q2NzQwYWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XVEYvd3RmL1JlZi5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1JlZi5oCkBAIC0y
ODksNiArMjg5LDQyIEBAIGlubGluZSBib29sIGlzKGNvbnN0IFJlZjxBcmdUeXBlLCBQdHJUcmFp
dHM+JiBzb3VyY2UpCiAgICAgcmV0dXJuIGlzPEV4cGVjdGVkVHlwZT4oc291cmNlLmdldCgpKTsK
IH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5h
bWUgVz4KK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgUmVmPFQsIFU+JiBhLCBjb25zdCBS
ZWY8ViwgVz4mIGIpCit7CisgICAgcmV0dXJuIGEucHRyKCkgPT0gYi5wdHIoKTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KK2lubGluZSBib29sIG9w
ZXJhdG9yPT0oY29uc3QgUmVmPFQsIFU+JiBhLCBWJiBiKQoreworICAgIHJldHVybiBhLnB0cigp
ID09ICZiOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
PgoraW5saW5lIGJvb2wgb3BlcmF0b3I9PShUJiBhLCBjb25zdCBSZWY8VSwgVj4mIGIpCit7Cisg
ICAgcmV0dXJuICZhID09IGIucHRyKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IFJlZjxULCBVPiYgYSwgY29uc3QgUmVmPFYsIFc+JiBiKQoreworICAgIHJldHVybiBhLnB0
cigpICE9IGIucHRyKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5
cGVuYW1lIFY+CitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFJlZjxULCBVPiYgYSwgViYg
YikKK3sKKyAgICByZXR1cm4gYS5wdHIoKSAhPSAmYjsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KK2lubGluZSBib29sIG9wZXJhdG9yIT0oVCYgYSwg
Y29uc3QgUmVmPFUsIFY+JiBiKQoreworICAgIHJldHVybiAmYSAhPSBiLnB0cigpOworfQorCiB9
IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNpbmcgV1RGOjpSZWY7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1NoYXJlZEJ1ZmZlci5oCmluZGV4IDVlZTZkOThlZmQ0Nzc3NTMwZTYwZWI2MDhjMGI5YWE2ZTc1
NGVjYjMuLjY4YmRlNmM2OGRmMDEyMjM3MDk5MzQ0MWUyMTNlNDYzMWMzMDc3ZDUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCkBAIC0yMzAsMTYgKzIzMCw2IEBAIHByaXZh
dGU6CiAjZW5kaWYKIH07CiAKLWlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgUmVmPFNoYXJl
ZEJ1ZmZlcj4mIGxlZnQsIGNvbnN0IFNoYXJlZEJ1ZmZlciYgcmlnaHQpCi17Ci0gICAgcmV0dXJu
IGxlZnQuZ2V0KCkgPT0gcmlnaHQ7Ci19Ci0KLWlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3Qg
UmVmPFNoYXJlZEJ1ZmZlcj4mIGxlZnQsIGNvbnN0IFNoYXJlZEJ1ZmZlciYgcmlnaHQpCi17Ci0g
ICAgcmV0dXJuIGxlZnQuZ2V0KCkgIT0gcmlnaHQ7Ci19Ci0KIGNsYXNzIFdFQkNPUkVfRVhQT1JU
IFNoYXJlZEJ1ZmZlckRhdGFWaWV3IHsKIHB1YmxpYzoKICAgICBTaGFyZWRCdWZmZXJEYXRhVmll
dyhSZWY8U2hhcmVkQnVmZmVyOjpEYXRhU2VnbWVudD4mJiwgc2l6ZV90KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0gYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tCmluZGV4
IDI1Y2VlYjE0OTEyMTEyMmJjYTVlMzAzNzA4ZjI3YzRiZmQ4NGYwNjguLjEyOTAyYjA1ZGUyMTgy
MmIxMTNiY2YxZTM4MzczMDcyNDgyZmRmNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQpAQCAtNjA1LDEwICs2MDUsOCBA
QCB2b2lkIFdlYlByb2Nlc3NQb29sOjpjb2xvclByZWZlcmVuY2VzRGlkQ2hhbmdlQ2FsbGJhY2so
Q0ZOb3RpZmljYXRpb25DZW50ZXJSZWYgYwogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVtb3RlV2Vi
SW5zcGVjdG9yRW5hYmxlZENhbGxiYWNrKENGTm90aWZpY2F0aW9uQ2VudGVyUmVmLCB2b2lkICpv
YnNlcnZlciwgQ0ZTdHJpbmdSZWYgbmFtZSwgY29uc3Qgdm9pZCAqLCBDRkRpY3Rpb25hcnlSZWYg
dXNlckluZm8pCiB7CiAgICAgYXV0byogcG9vbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8V2ViUHJvY2Vz
c1Bvb2wqPihvYnNlcnZlcik7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwb29sLT5tX3By
b2Nlc3Nlcy5zaXplKCk7ICsraSkgewotICAgICAgICBhdXRvIHByb2Nlc3MgPSBwb29sLT5tX3By
b2Nlc3Nlc1tpXTsKKyAgICBmb3IgKGF1dG8mIHByb2Nlc3MgOiBwb29sLT5tX3Byb2Nlc3NlcykK
ICAgICAgICAgcHJvY2Vzcy0+ZW5hYmxlUmVtb3RlSW5zcGVjdG9ySWZOZWVkZWQoKTsKLSAgICB9
CiB9CiAjZW5kaWYKIApAQCAtNjk4LDExICs2OTYsMTEgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6
cmVnaXN0ZXJOb3RpZmljYXRpb25PYnNlcnZlcnMoKQogICAgIG1fYWNjZXNzaWJpbGl0eUVuYWJs
ZWRPYnNlcnZlciA9IFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2Jz
ZXJ2ZXJGb3JOYW1lOihfX2JyaWRnZSBpZClrQVhTQXBwbGljYXRpb25BY2Nlc3NpYmlsaXR5RW5h
YmxlZE5vdGlmaWNhdGlvbiBvYmplY3Q6bmlsIHF1ZXVlOltOU09wZXJhdGlvblF1ZXVlIGN1cnJl
bnRRdWV1ZV0gdXNpbmdCbG9jazpeKE5TTm90aWZpY2F0aW9uICopIHsKICAgICAgICAgaWYgKCFf
QVhTQXBwbGljYXRpb25BY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKQogICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcHJvY2Vzc2VzLnNpemUoKTsgKytp
KSB7CisgICAgICAgIGZvciAoYXV0byYgcHJvY2VzcyA6IG1fcHJvY2Vzc2VzKSB7CiAjaWYgRU5B
QkxFKENGUFJFRlNfRElSRUNUX01PREUpCi0gICAgICAgICAgICBtX3Byb2Nlc3Nlc1tpXS0+dW5i
bG9ja1ByZWZlcmVuY2VTZXJ2aWNlSWZOZWVkZWQoKTsKKyAgICAgICAgICAgIHByb2Nlc3MtPnVu
YmxvY2tQcmVmZXJlbmNlU2VydmljZUlmTmVlZGVkKCk7CiAjZW5kaWYKLSAgICAgICAgICAgIG1f
cHJvY2Vzc2VzW2ldLT51bmJsb2NrQWNjZXNzaWJpbGl0eVNlcnZlcklmTmVlZGVkKCk7CisgICAg
ICAgICAgICBwcm9jZXNzLT51bmJsb2NrQWNjZXNzaWJpbGl0eVNlcnZlcklmTmVlZGVkKCk7CiAg
ICAgICAgIH0KICAgICB9XTsKICNpZiBFTkFCTEUoQ0ZQUkVGU19ESVJFQ1RfTU9ERSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQcm94eUNvY29h
Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Byb3h5Q29jb2Eu
bW0KaW5kZXggZDMzNGRkNDRlMDQyN2U2NzdjMTBmZTJiNDg5NTFlMDdmNTU0MTFjYi4uN2IxNDcz
YzVkMmVkYTk0ODIyMDRhYmFiMDJkNmUwZjZjZGQzZWE2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Byb3h5Q29jb2EubW0KKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Byb3h5Q29jb2EubW0KQEAgLTE3OCw3
ICsxNzgsNyBAQCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6Y2FjaGVNZWRpYU1JTUVUeXBlcyhjb25z
dCBWZWN0b3I8U3RyaW5nPiYgdHlwZXMpCiAKICAgICBtZWRpYVR5cGVDYWNoZSgpID0gdHlwZXM7
CiAgICAgZm9yIChhdXRvJiBwcm9jZXNzIDogcHJvY2Vzc1Bvb2woKS5wcm9jZXNzZXMoKSkgewot
ICAgICAgICBpZiAocHJvY2VzcyAhPSB0aGlzKQorICAgICAgICBpZiAocHJvY2VzcyAhPSAqdGhp
cykKICAgICAgICAgICAgIGNhY2hlTWVkaWFNSU1FVHlwZXNJbnRlcm5hbCh0eXBlcyk7CiAgICAg
fQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVmlzaXRlZExpbmtTdG9y
ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9WaXNpdGVkTGlua1N0b3JlLmNwcAppbmRl
eCA2NTM5ZmNlYjljMTEyYjE5N2NjYWFiM2NmYWYyM2JlOGUyYjUzZjQ3Li42N2YzNTU3MGMxZWQz
YjM1ZmViNDRhMTU5ZTg1YWI0ODg5MTk4YjE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9WaXNpdGVkTGlua1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9WaXNpdGVkTGlua1N0b3JlLmNwcApAQCAtOTUsNyArOTUsNyBAQCB2b2lkIFZpc2l0ZWRMaW5r
U3RvcmU6OnJlbW92ZUFsbCgpCiAgICAgbV9saW5rSGFzaFN0b3JlLmNsZWFyKCk7CiAKICAgICBm
b3IgKGF1dG8mIHByb2Nlc3MgOiBtX3Byb2Nlc3NlcykgewotICAgICAgICBBU1NFUlQocHJvY2Vz
cy5wcm9jZXNzUG9vbCgpLnByb2Nlc3NlcygpLmNvbnRhaW5zKCZwcm9jZXNzKSk7CisgICAgICAg
IEFTU0VSVChwcm9jZXNzLnByb2Nlc3NQb29sKCkucHJvY2Vzc2VzKCkuY29udGFpbnMocHJvY2Vz
cykpOwogICAgICAgICBwcm9jZXNzLnNlbmQoTWVzc2FnZXM6OlZpc2l0ZWRMaW5rVGFibGVDb250
cm9sbGVyOjpSZW1vdmVBbGxWaXNpdGVkTGlua3MoKSwgaWRlbnRpZmllcigpKTsKICAgICB9CiB9
CkBAIC0xMTIsNyArMTEyLDcgQEAgdm9pZCBWaXNpdGVkTGlua1N0b3JlOjphZGRWaXNpdGVkTGlu
a0hhc2hGcm9tUGFnZShXZWJQYWdlUHJveHlJZGVudGlmaWVyIHBhZ2VQcm8KIAogdm9pZCBWaXNp
dGVkTGlua1N0b3JlOjpzZW5kU3RvcmVIYW5kbGVUb1Byb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5JiBw
cm9jZXNzKQogewotICAgIEFTU0VSVChwcm9jZXNzLnByb2Nlc3NQb29sKCkucHJvY2Vzc2VzKCku
Y29udGFpbnMoJnByb2Nlc3MpKTsKKyAgICBBU1NFUlQocHJvY2Vzcy5wcm9jZXNzUG9vbCgpLnBy
b2Nlc3NlcygpLmNvbnRhaW5zKHByb2Nlc3MpKTsKIAogICAgIFNoYXJlZE1lbW9yeTo6SGFuZGxl
IGhhbmRsZTsKICAgICBpZiAoIW1fbGlua0hhc2hTdG9yZS5jcmVhdGVTaGFyZWRNZW1vcnlIYW5k
bGUoaGFuZGxlKSkKQEAgLTEzOCw3ICsxMzgsNyBAQCB2b2lkIFZpc2l0ZWRMaW5rU3RvcmU6OmRp
ZFVwZGF0ZVNoYXJlZFN0cmluZ0hhc2hlcyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6U2hhcmVkUwog
ICAgIEFTU0VSVCghYWRkZWRIYXNoZXMuaXNFbXB0eSgpIHx8ICFyZW1vdmVkSGFzaGVzLmlzRW1w
dHkoKSk7CiAKICAgICBmb3IgKGF1dG8mIHByb2Nlc3MgOiBtX3Byb2Nlc3NlcykgewotICAgICAg
ICBBU1NFUlQocHJvY2Vzcy5wcm9jZXNzUG9vbCgpLnByb2Nlc3NlcygpLmNvbnRhaW5zKCZwcm9j
ZXNzKSk7CisgICAgICAgIEFTU0VSVChwcm9jZXNzLnByb2Nlc3NQb29sKCkucHJvY2Vzc2VzKCku
Y29udGFpbnMocHJvY2VzcykpOwogCiAgICAgICAgIGlmIChhZGRlZEhhc2hlcy5zaXplKCkgPiAy
MCB8fCAhcmVtb3ZlZEhhc2hlcy5pc0VtcHR5KCkpCiAgICAgICAgICAgICBwcm9jZXNzLnNlbmQo
TWVzc2FnZXM6OlZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyOjpBbGxWaXNpdGVkTGlua1N0YXRl
Q2hhbmdlZCgpLCBpZGVudGlmaWVyKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJv
Y2Vzc1Bvb2wuY3BwCmluZGV4IDFmMzZlMDU2ZDEwMzBiNjE3ZjNkODA3ZmQ0ZDI2NWI4OGIwZDZl
MTYuLmY5MWQ4YmY2NzA2NWQxMjM4OWJjMjM1YjA1MTE0YzE3ZDI3NWIyZWEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKQEAgLTUxMCw3ICs1MTAsNyBAQCB2
b2lkIFdlYlByb2Nlc3NQb29sOjpncHVQcm9jZXNzQ3Jhc2hlZChQcm9jZXNzSUQgaWRlbnRpZmll
cikKICAgICBtX2dwdVByb2Nlc3MgPSBudWxscHRyOwogCiAgICAgbV9jbGllbnQuZ3B1UHJvY2Vz
c0RpZENyYXNoKHRoaXMsIGlkZW50aWZpZXIpOwotICAgIFZlY3RvcjxSZWZQdHI8V2ViUHJvY2Vz
c1Byb3h5Pj4gcHJvY2Vzc2VzID0gbV9wcm9jZXNzZXM7CisgICAgVmVjdG9yPFJlZjxXZWJQcm9j
ZXNzUHJveHk+PiBwcm9jZXNzZXMgPSBtX3Byb2Nlc3NlczsKICAgICBmb3IgKGF1dG8mIHByb2Nl
c3MgOiBwcm9jZXNzZXMpCiAgICAgICAgIHByb2Nlc3MtPmdwdVByb2Nlc3NDcmFzaGVkKCk7CiAK
QEAgLTU2OSwxNCArNTY5LDE0IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmVzdGFibGlzaFdvcmtl
ckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvCiAKICAgICBpZiAo
IXNfdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykgewogICAgICAgICBmb3IgKGF1dG8m
IHByb2Nlc3MgOiBwcm9jZXNzUG9vbC0+bV9wcm9jZXNzZXMpIHsKLSAgICAgICAgICAgIGlmIChw
cm9jZXNzID09IHByb2Nlc3NQb29sLT5tX3ByZXdhcm1lZFByb2Nlc3MgfHwgcHJvY2Vzcy0+aXNE
dW1teVByb2Nlc3NQcm94eSgpKQorICAgICAgICAgICAgaWYgKHByb2Nlc3MucHRyKCkgPT0gcHJv
Y2Vzc1Bvb2wtPm1fcHJld2FybWVkUHJvY2Vzcy5nZXQoKSB8fCBwcm9jZXNzLT5pc0R1bW15UHJv
Y2Vzc1Byb3h5KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBpZiAo
JnByb2Nlc3MtPndlYnNpdGVEYXRhU3RvcmUoKSAhPSB3ZWJzaXRlRGF0YVN0b3JlKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgaWYgKCFwcm9jZXNzLT5pc01hdGNoaW5n
UmVnaXN0cmFibGVEb21haW4ocmVnaXN0cmFibGVEb21haW4pKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogCi0gICAgICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5ID0gcHJvY2Vz
cy5nZXQoKTsKKyAgICAgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkgPSBwcm9jZXNz
LnB0cigpOwogICAgICAgICAgICAgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+ZW5hYmxlU2Vy
dmljZVdvcmtlcnMocHJvY2Vzc1Bvb2wtPnVzZXJDb250ZW50Q29udHJvbGxlcklkZW50aWZpZXJG
b3JTZXJ2aWNlV29ya2VycygpKTsKIAogICAgICAgICAgICAgaWYgKHNlcnZpY2VXb3JrZXJQcm9j
ZXNzUHJveHktPmlzSW5Qcm9jZXNzQ2FjaGUoKSkgewpAQCAtNjcwLDcgKzY3MCw3IEBAIFJlZlB0
cjxXZWJQcm9jZXNzUHJveHk+IFdlYlByb2Nlc3NQb29sOjp0cnlUYWtlUHJld2FybWVkUHJvY2Vz
cyhXZWJzaXRlRGF0YVN0b3JlCiAgICAgLy8gVGhlcmUgaXMgc29tZXRpbWVzIGEgZGVsYXkgdW50
aWwgd2UgZ2V0IG5vdGlmaWVkIHRoYXQgYSBwcmV3YXJtZWQgcHJvY2VzcyBoYXMgYmVlbiB0ZXJt
aW5hdGVkIChlLmcuIGFmdGVyIHJlc3VtaW5nCiAgICAgLy8gZnJvbSBzdXNwZW5zaW9uKSBzbyBt
YWtlIHN1cmUgdGhlIHByb2Nlc3MgaXMgc3RpbGwgcnVubmluZyBoZXJlIGJlZm9yZSBkZWNpZGlu
ZyB0byB1c2UgaXQuCiAgICAgaWYgKG1fcHJld2FybWVkUHJvY2Vzcy0+d2FzVGVybWluYXRlZCgp
KSB7Ci0gICAgICAgIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0VSUk9SKFByb2Nlc3MsICJ0
cnlUYWtlUHJld2FybWVkUHJvY2VzczogTm90IHVzaW5nIHByZXdhcm1lZCBwcm9jZXNzIGJlY2F1
c2UgaXQgaGFzIGJlZW4gdGVybWluYXRlZCAocHJvY2Vzcz0lcCwgUElEPSVkKSIsIG1fcHJld2Fy
bWVkUHJvY2VzcywgbV9wcmV3YXJtZWRQcm9jZXNzLT5wcm9jZXNzSWRlbnRpZmllcigpKTsKKyAg
ICAgICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfRVJST1IoUHJvY2VzcywgInRyeVRha2VQ
cmV3YXJtZWRQcm9jZXNzOiBOb3QgdXNpbmcgcHJld2FybWVkIHByb2Nlc3MgYmVjYXVzZSBpdCBo
YXMgYmVlbiB0ZXJtaW5hdGVkIChwcm9jZXNzPSVwLCBQSUQ9JWQpIiwgbV9wcmV3YXJtZWRQcm9j
ZXNzLmdldCgpLCBtX3ByZXdhcm1lZFByb2Nlc3MtPnByb2Nlc3NJZGVudGlmaWVyKCkpOwogICAg
ICAgICBtX3ByZXdhcm1lZFByb2Nlc3MgPSBudWxscHRyOwogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICB9CkBAIC02ODYsNyArNjg2LDcgQEAgUmVmUHRyPFdlYlByb2Nlc3NQcm94eT4gV2Vi
UHJvY2Vzc1Bvb2w6OnRyeVRha2VQcmV3YXJtZWRQcm9jZXNzKFdlYnNpdGVEYXRhU3RvcmUKICAg
ICBtX3ByZXdhcm1lZFByb2Nlc3MtPnNldFdlYnNpdGVEYXRhU3RvcmUod2Vic2l0ZURhdGFTdG9y
ZSk7CiAgICAgbV9wcmV3YXJtZWRQcm9jZXNzLT5tYXJrSXNOb0xvbmdlckluUHJld2FybWVkUG9v
bCgpOwogCi0gICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9wcmV3YXJtZWRQcm9jZXNzLCBudWxs
cHRyKTsKKyAgICByZXR1cm4gc3RkOjpleGNoYW5nZShtX3ByZXdhcm1lZFByb2Nlc3MsIG51bGxw
dHIpLmdldCgpOwogfQogCiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtODcxLDcgKzg3MSw3IEBAIHZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OmluaXRpYWxpemVOZXdXZWJQcm9jZXNzKFdlYlByb2Nlc3NQcm94
eSYgcHJvY2VzcywgV2Vic2l0ZURhCiAKICAgICBpZiAoaXNQcmV3YXJtZWQgPT0gV2ViUHJvY2Vz
c1Byb3h5OjpJc1ByZXdhcm1lZDo6WWVzKSB7CiAgICAgICAgIEFTU0VSVCghbV9wcmV3YXJtZWRQ
cm9jZXNzKTsKLSAgICAgICAgbV9wcmV3YXJtZWRQcm9jZXNzID0gJnByb2Nlc3M7CisgICAgICAg
IG1fcHJld2FybWVkUHJvY2VzcyA9IG1ha2VXZWFrUHRyKHByb2Nlc3MpOwogICAgIH0KIAogI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpICYmICFQTEFURk9STShNQUNDQVRBTFlTVCkKQEAgLTkwMSwx
NyArOTAxLDE2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnByZXdhcm1Qcm9jZXNzKCkKIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OmVuYWJsZVByb2Nlc3NUZXJtaW5hdGlvbigpCiB7CiAgICAgbV9wcm9j
ZXNzVGVybWluYXRpb25FbmFibGVkID0gdHJ1ZTsKLSAgICAvLyBGSVhNRTogbV9wcm9jZXNzZXMg
c2hvdWxkIGJlIFZlY3RvcjxSZWY8V2ViUHJvY2Vzc1Byb3h5Pj4KLSAgICBWZWN0b3I8UmVmUHRy
PFdlYlByb2Nlc3NQcm94eT4+IHByb2Nlc3NlcyA9IG1fcHJvY2Vzc2VzOwotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgcHJvY2Vzc2VzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChzaG91
bGRUZXJtaW5hdGUoKnByb2Nlc3Nlc1tpXSkpCi0gICAgICAgICAgICBwcm9jZXNzZXNbaV0tPnRl
cm1pbmF0ZSgpOworICAgIFZlY3RvcjxSZWY8V2ViUHJvY2Vzc1Byb3h5Pj4gcHJvY2Vzc2VzID0g
bV9wcm9jZXNzZXM7CisgICAgZm9yIChhdXRvJiBwcm9jZXNzIDogcHJvY2Vzc2VzKSB7CisgICAg
ICAgIGlmIChzaG91bGRUZXJtaW5hdGUocHJvY2VzcykpCisgICAgICAgICAgICBwcm9jZXNzLT50
ZXJtaW5hdGUoKTsKICAgICB9CiB9CiAKIGJvb2wgV2ViUHJvY2Vzc1Bvb2w6OnNob3VsZFRlcm1p
bmF0ZShXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3MpCiB7Ci0gICAgQVNTRVJUKG1fcHJvY2Vzc2Vz
LmNvbnRhaW5zKCZwcm9jZXNzKSk7CisgICAgQVNTRVJUKG1fcHJvY2Vzc2VzLmNvbnRhaW5zKHBy
b2Nlc3MpKTsKIAogICAgIGlmICghbV9wcm9jZXNzVGVybWluYXRpb25FbmFibGVkIHx8IG1fY29u
ZmlndXJhdGlvbi0+YWx3YXlzS2VlcEFuZFJldXNlU3dhcHBlZFByb2Nlc3NlcygpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CkBAIC05MTksNyArOTE4LDcgQEAgYm9vbCBXZWJQcm9jZXNzUG9vbDo6
c2hvdWxkVGVybWluYXRlKFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcykKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotdm9pZCBXZWJQcm9jZXNzUG9vbDo6cHJvY2Vzc0RpZEZpbmlzaExhdW5jaGluZyhX
ZWJQcm9jZXNzUHJveHkqIHByb2Nlc3MpCit2b2lkIFdlYlByb2Nlc3NQb29sOjpwcm9jZXNzRGlk
RmluaXNoTGF1bmNoaW5nKFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcykKIHsKICAgICBBU1NFUlQo
bV9wcm9jZXNzZXMuY29udGFpbnMocHJvY2VzcykpOwogCkBAIC05MzMsMjQgKzkzMiwyNCBAQCB2
b2lkIFdlYlByb2Nlc3NQb29sOjpwcm9jZXNzRGlkRmluaXNoTGF1bmNoaW5nKFdlYlByb2Nlc3NQ
cm94eSogcHJvY2VzcykKICAgICBpZiAobV9tZW1vcnlTYW1wbGVyRW5hYmxlZCkgewogICAgICAg
ICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgc2FtcGxlTG9nU2FuZGJveEhhbmRsZTsgICAgICAg
IAogICAgICAgICBXYWxsVGltZSBub3cgPSBXYWxsVGltZTo6bm93KCk7Ci0gICAgICAgIFN0cmlu
ZyBzYW1wbGVMb2dGaWxlUGF0aCA9IG1ha2VTdHJpbmcoIldlYlByb2Nlc3MiLCBzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBsb25nIGxvbmc+KG5vdy5zZWNvbmRzU2luY2VFcG9jaCgpLnNlY29uZHMoKSks
ICJwaWQiLCBwcm9jZXNzLT5wcm9jZXNzSWRlbnRpZmllcigpKTsKKyAgICAgICAgU3RyaW5nIHNh
bXBsZUxvZ0ZpbGVQYXRoID0gbWFrZVN0cmluZygiV2ViUHJvY2VzcyIsIHN0YXRpY19jYXN0PHVu
c2lnbmVkIGxvbmcgbG9uZz4obm93LnNlY29uZHNTaW5jZUVwb2NoKCkuc2Vjb25kcygpKSwgInBp
ZCIsIHByb2Nlc3MucHJvY2Vzc0lkZW50aWZpZXIoKSk7CiAgICAgICAgIHNhbXBsZUxvZ0ZpbGVQ
YXRoID0gU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yVGVtcG9yYXJ5RmlsZShzYW1w
bGVMb2dGaWxlUGF0aCwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBzYW1wbGVM
b2dTYW5kYm94SGFuZGxlKTsKICAgICAgICAgCi0gICAgICAgIHByb2Nlc3MtPnNlbmQoTWVzc2Fn
ZXM6OldlYlByb2Nlc3M6OlN0YXJ0TWVtb3J5U2FtcGxlcihzYW1wbGVMb2dTYW5kYm94SGFuZGxl
LCBzYW1wbGVMb2dGaWxlUGF0aCwgbV9tZW1vcnlTYW1wbGVySW50ZXJ2YWwpLCAwKTsKKyAgICAg
ICAgcHJvY2Vzcy5zZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTdGFydE1lbW9yeVNhbXBsZXIo
c2FtcGxlTG9nU2FuZGJveEhhbmRsZSwgc2FtcGxlTG9nRmlsZVBhdGgsIG1fbWVtb3J5U2FtcGxl
ckludGVydmFsKSwgMCk7CiAgICAgfQogCiAgICAgaWYgKG1fY29uZmlndXJhdGlvbi0+ZnVsbHlT
eW5jaHJvbm91c01vZGVJc0FsbG93ZWRGb3JUZXN0aW5nKCkpCi0gICAgICAgIHByb2Nlc3MtPmNv
bm5lY3Rpb24oKS0+YWxsb3dGdWxseVN5bmNocm9ub3VzTW9kZUZvclRlc3RpbmcoKTsKKyAgICAg
ICAgcHJvY2Vzcy5jb25uZWN0aW9uKCktPmFsbG93RnVsbHlTeW5jaHJvbm91c01vZGVGb3JUZXN0
aW5nKCk7CiAKICAgICBpZiAobV9jb25maWd1cmF0aW9uLT5pZ25vcmVTeW5jaHJvbm91c01lc3Nh
Z2luZ1RpbWVvdXRzRm9yVGVzdGluZygpKQotICAgICAgICBwcm9jZXNzLT5jb25uZWN0aW9uKCkt
Pmlnbm9yZVRpbWVvdXRzRm9yVGVzdGluZygpOworICAgICAgICBwcm9jZXNzLmNvbm5lY3Rpb24o
KS0+aWdub3JlVGltZW91dHNGb3JUZXN0aW5nKCk7CiAKLSAgICBtX2Nvbm5lY3Rpb25DbGllbnQu
ZGlkQ3JlYXRlQ29ubmVjdGlvbih0aGlzLCBwcm9jZXNzLT53ZWJDb25uZWN0aW9uKCkpOworICAg
IG1fY29ubmVjdGlvbkNsaWVudC5kaWRDcmVhdGVDb25uZWN0aW9uKHRoaXMsIHByb2Nlc3Mud2Vi
Q29ubmVjdGlvbigpKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6ZGlzY29ubmVjdFByb2Nl
c3MoV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzKQogewotICAgIEFTU0VSVChtX3Byb2Nlc3Nlcy5j
b250YWlucygmcHJvY2VzcykpOworICAgIEFTU0VSVChtX3Byb2Nlc3Nlcy5jb250YWlucyhwcm9j
ZXNzKSk7CiAKICAgICBpZiAobV9wcmV3YXJtZWRQcm9jZXNzID09ICZwcm9jZXNzKSB7CiAgICAg
ICAgIEFTU0VSVChtX3ByZXdhcm1lZFByb2Nlc3MtPmlzUHJld2FybWVkKCkpOwpAQCAtOTczLDcg
Kzk3Miw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmRpc2Nvbm5lY3RQcm9jZXNzKFdlYlByb2Nl
c3NQcm94eSYgcHJvY2VzcykKIAogICAgIHN0YXRpY19jYXN0PFdlYkNvbnRleHRTdXBwbGVtZW50
Kj4oc3VwcGxlbWVudDxXZWJHZW9sb2NhdGlvbk1hbmFnZXJQcm94eT4oKSktPnByb2Nlc3NEaWRD
bG9zZSgmcHJvY2Vzcyk7CiAKLSAgICBtX3Byb2Nlc3Nlcy5yZW1vdmVGaXJzdCgmcHJvY2Vzcyk7
CisgICAgbV9wcm9jZXNzZXMucmVtb3ZlRmlyc3QocHJvY2Vzcyk7CiAKICNpZiBFTkFCTEUoR0FN
RVBBRCkKICAgICBpZiAobV9wcm9jZXNzZXNVc2luZ0dhbWVwYWRzLmNvbnRhaW5zKHByb2Nlc3Mp
KQpAQCAtOTg3LDE0ICs5ODYsMTQgQEAgUmVmPFdlYlByb2Nlc3NQcm94eT4gV2ViUHJvY2Vzc1Bv
b2w6OnByb2Nlc3NGb3JSZWdpc3RyYWJsZURvbWFpbihXZWJzaXRlRGF0YVN0b3IKIHsKICAgICBp
ZiAoIXJlZ2lzdHJhYmxlRG9tYWluLmlzRW1wdHkoKSkgewogICAgICAgICBpZiAoYXV0byBwcm9j
ZXNzID0gd2ViUHJvY2Vzc0NhY2hlKCkudGFrZVByb2Nlc3MocmVnaXN0cmFibGVEb21haW4sIHdl
YnNpdGVEYXRhU3RvcmUpKSB7Ci0gICAgICAgICAgICBBU1NFUlQobV9wcm9jZXNzZXMuY29udGFp
bnMocHJvY2Vzcy5nZXQoKSkpOworICAgICAgICAgICAgQVNTRVJUKG1fcHJvY2Vzc2VzLmNvbnRh
aW5zKCpwcm9jZXNzKSk7CiAgICAgICAgICAgICByZXR1cm4gcHJvY2Vzcy5yZWxlYXNlTm9uTnVs
bCgpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gQ2hlY2sgaWYgd2UgaGF2ZSBhIHN1c3BlbmRl
ZCBwYWdlIGZvciB0aGUgZ2l2ZW4gcmVnaXN0cmFibGUgZG9tYWluIGFuZCB1c2UgaXRzIHByb2Nl
c3MgaWYgd2UgZG8sIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLgogICAgICAgICBpZiAoYXV0byBw
cm9jZXNzID0gU3VzcGVuZGVkUGFnZVByb3h5OjpmaW5kUmV1c2FibGVTdXNwZW5kZWRQYWdlUHJv
Y2VzcygqdGhpcywgcmVnaXN0cmFibGVEb21haW4sIHdlYnNpdGVEYXRhU3RvcmUpKSB7CiAgICAg
ICAgICAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPRyhQcm9jZXNzU3dhcHBpbmcsICJwcm9j
ZXNzRm9yUmVnaXN0cmFibGVEb21haW46IFVzaW5nIFdlYlByb2Nlc3MgZnJvbSBhIFN1c3BlbmRl
ZFBhZ2UgKHByb2Nlc3M9JXAsIFBJRD0laSkiLCBwcm9jZXNzLmdldCgpLCBwcm9jZXNzLT5wcm9j
ZXNzSWRlbnRpZmllcigpKTsKLSAgICAgICAgICAgIEFTU0VSVChtX3Byb2Nlc3Nlcy5jb250YWlu
cyhwcm9jZXNzLmdldCgpKSk7CisgICAgICAgICAgICBBU1NFUlQobV9wcm9jZXNzZXMuY29udGFp
bnMoKnByb2Nlc3MpKTsKICAgICAgICAgICAgIHJldHVybiBwcm9jZXNzLnJlbGVhc2VOb25OdWxs
KCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMDAzLDcgKzEwMDIsNyBAQCBSZWY8V2ViUHJvY2Vz
c1Byb3h5PiBXZWJQcm9jZXNzUG9vbDo6cHJvY2Vzc0ZvclJlZ2lzdHJhYmxlRG9tYWluKFdlYnNp
dGVEYXRhU3RvcgogICAgICAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPRyhQcm9jZXNzU3dh
cHBpbmcsICJwcm9jZXNzRm9yUmVnaXN0cmFibGVEb21haW46IFVzaW5nIHByZXdhcm1lZCBwcm9j
ZXNzIChwcm9jZXNzPSVwLCBQSUQ9JWkpIiwgcHJvY2Vzcy5nZXQoKSwgcHJvY2Vzcy0+cHJvY2Vz
c0lkZW50aWZpZXIoKSk7CiAgICAgICAgIGlmICghcmVnaXN0cmFibGVEb21haW4uaXNFbXB0eSgp
KQogICAgICAgICAgICAgdHJ5UHJld2FybVdpdGhEb21haW5JbmZvcm1hdGlvbigqcHJvY2Vzcywg
cmVnaXN0cmFibGVEb21haW4pOwotICAgICAgICBBU1NFUlQobV9wcm9jZXNzZXMuY29udGFpbnMo
cHJvY2Vzcy5nZXQoKSkpOworICAgICAgICBBU1NFUlQobV9wcm9jZXNzZXMuY29udGFpbnMoKnBy
b2Nlc3MpKTsKICAgICAgICAgcmV0dXJuIHByb2Nlc3MucmVsZWFzZU5vbk51bGwoKTsKICAgICB9
CiAKQEAgLTEwMTUsNyArMTAxNCw3IEBAIFJlZjxXZWJQcm9jZXNzUHJveHk+IFdlYlByb2Nlc3NQ
b29sOjpwcm9jZXNzRm9yUmVnaXN0cmFibGVEb21haW4oV2Vic2l0ZURhdGFTdG9yCiAjZW5kaWYK
IAogICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3MgOiBtX3Byb2Nlc3NlcykgewotICAgICAgICAg
ICAgaWYgKHByb2Nlc3MgPT0gbV9wcmV3YXJtZWRQcm9jZXNzIHx8IHByb2Nlc3MtPmlzRHVtbXlQ
cm9jZXNzUHJveHkoKSkKKyAgICAgICAgICAgIGlmIChwcm9jZXNzLnB0cigpID09IG1fcHJld2Fy
bWVkUHJvY2Vzcy5nZXQoKSB8fCBwcm9jZXNzLT5pc0R1bW15UHJvY2Vzc1Byb3h5KCkpCiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogICAgICAg
ICAgICAgaWYgKHByb2Nlc3MtPmlzUnVubmluZ1NlcnZpY2VXb3JrZXJzKCkpCkBAIC0xMDIzLDcg
KzEwMjIsNyBAQCBSZWY8V2ViUHJvY2Vzc1Byb3h5PiBXZWJQcm9jZXNzUG9vbDo6cHJvY2Vzc0Zv
clJlZ2lzdHJhYmxlRG9tYWluKFdlYnNpdGVEYXRhU3RvcgogI2VuZGlmCiAgICAgICAgICAgICBp
ZiAobXVzdE1hdGNoRGF0YVN0b3JlICYmICZwcm9jZXNzLT53ZWJzaXRlRGF0YVN0b3JlKCkgIT0g
JndlYnNpdGVEYXRhU3RvcmUpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICByZXR1cm4gKnByb2Nlc3M7CisgICAgICAgICAgICByZXR1cm4gcHJvY2VzczsKICAgICAgICAg
fQogICAgIH0KICAgICByZXR1cm4gY3JlYXRlTmV3V2ViUHJvY2Vzcygmd2Vic2l0ZURhdGFTdG9y
ZSk7CkBAIC0xMDcwLDcgKzEwNjksNyBAQCBSZWY8V2ViUGFnZVByb3h5PiBXZWJQcm9jZXNzUG9v
bDo6Y3JlYXRlV2ViUGFnZShQYWdlQ2xpZW50JiBwYWdlQ2xpZW50LCBSZWY8QVBJOgogICAgICAg
ICBpZiAoIXByb2Nlc3MpIHsKICAgICAgICAgICAgIHByb2Nlc3MgPSBXZWJQcm9jZXNzUHJveHk6
OmNyZWF0ZSgqdGhpcywgcGFnZUNvbmZpZ3VyYXRpb24tPndlYnNpdGVEYXRhU3RvcmUoKSwgV2Vi
UHJvY2Vzc1Byb3h5OjpJc1ByZXdhcm1lZDo6Tm8sIFdlYlByb2Nlc3NQcm94eTo6U2hvdWxkTGF1
bmNoUHJvY2Vzczo6Tm8pOwogICAgICAgICAgICAgbV9kdW1teVByb2Nlc3NQcm94aWVzLmFkZChw
YWdlQ29uZmlndXJhdGlvbi0+d2Vic2l0ZURhdGFTdG9yZSgpLT5zZXNzaW9uSUQoKSwgbWFrZVdl
YWtQdHIoKnByb2Nlc3MpKTsKLSAgICAgICAgICAgIG1fcHJvY2Vzc2VzLmFwcGVuZChwcm9jZXNz
LmNvcHlSZWYoKSk7CisgICAgICAgICAgICBtX3Byb2Nlc3Nlcy5hcHBlbmQoKnByb2Nlc3MpOwog
ICAgICAgICB9CiAgICAgfSBlbHNlCiAgICAgICAgIHByb2Nlc3MgPSBwcm9jZXNzRm9yUmVnaXN0
cmFibGVEb21haW4oKnBhZ2VDb25maWd1cmF0aW9uLT53ZWJzaXRlRGF0YVN0b3JlKCksIG51bGxw
dHIsIHsgfSk7CkBAIC0xNTAxLDcgKzE1MDAsNyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzdG9w
TWVtb3J5U2FtcGxlcigpCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVBbGxXZWJDb250
ZW50UHJvY2Vzc2VzKCkKIHsKICAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19FUlJPUihQ
cm9jZXNzLCAidGVybWluYXRlQWxsV2ViQ29udGVudFByb2Nlc3NlcyIpOwotICAgIFZlY3RvcjxS
ZWZQdHI8V2ViUHJvY2Vzc1Byb3h5Pj4gcHJvY2Vzc2VzID0gbV9wcm9jZXNzZXM7CisgICAgVmVj
dG9yPFJlZjxXZWJQcm9jZXNzUHJveHk+PiBwcm9jZXNzZXMgPSBtX3Byb2Nlc3NlczsKICAgICBm
b3IgKGF1dG8mIHByb2Nlc3MgOiBwcm9jZXNzZXMpCiAgICAgICAgIHByb2Nlc3MtPnRlcm1pbmF0
ZSgpOwogfQpAQCAtMTU1OCwxMSArMTU1NywxMSBAQCBib29sIFdlYlByb2Nlc3NQb29sOjpodHRw
UGlwZWxpbmluZ0VuYWJsZWQoKSBjb25zdAogI2VuZGlmCiB9CiAKLXN0YXRpYyBXZWJQcm9jZXNz
UHJveHkqIHdlYlByb2Nlc3NQcm94eUZyb21Db25uZWN0aW9uKElQQzo6Q29ubmVjdGlvbiYgY29u
bmVjdGlvbiwgY29uc3QgVmVjdG9yPFJlZlB0cjxXZWJQcm9jZXNzUHJveHk+PiYgcHJvY2Vzc2Vz
KQorc3RhdGljIFdlYlByb2Nlc3NQcm94eSogd2ViUHJvY2Vzc1Byb3h5RnJvbUNvbm5lY3Rpb24o
SVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBWZWN0b3I8UmVmPFdlYlByb2Nlc3NQ
cm94eT4+JiBwcm9jZXNzZXMpCiB7CiAgICAgZm9yIChhdXRvJiBwcm9jZXNzIDogcHJvY2Vzc2Vz
KSB7CiAgICAgICAgIGlmIChwcm9jZXNzLT5oYXNDb25uZWN0aW9uKGNvbm5lY3Rpb24pKQotICAg
ICAgICAgICAgcmV0dXJuIHByb2Nlc3MuZ2V0KCk7CisgICAgICAgICAgICByZXR1cm4gcHJvY2Vz
cy5wdHIoKTsKICAgICB9CiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmggYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oCmluZGV4IDRlOWY2Njg0Y2JhYjE0OTQ2MTdhZjUz
YzMyYzJmOWEzMzY4ZjgwZGUuLmRjN2ExYTEzNWYwZmY3MmE5ZGZjMjIwNzhjODY1NTZlNmJmN2Fm
YzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaApAQCAtMTg2LDcg
KzE4Niw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVu
ZGxlSWRlbnRpZmllcihjb25zdCBTdHJpbmcmKTsKICAgICBjb25zdCBTdHJpbmcmIGN1c3RvbVdl
YkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcigpIHsgcmV0dXJuIG1fY29uZmlndXJhdGlv
bi0+Y3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKCk7IH0KIAotICAgIGNv
bnN0IFZlY3RvcjxSZWZQdHI8V2ViUHJvY2Vzc1Byb3h5Pj4mIHByb2Nlc3NlcygpIGNvbnN0IHsg
cmV0dXJuIG1fcHJvY2Vzc2VzOyB9CisgICAgY29uc3QgVmVjdG9yPFJlZjxXZWJQcm9jZXNzUHJv
eHk+PiYgcHJvY2Vzc2VzKCkgY29uc3QgeyByZXR1cm4gbV9wcm9jZXNzZXM7IH0KIAogICAgIC8v
IFdlYlByb2Nlc3NQcm94eSBvYmplY3Qgd2hpY2ggZG9lcyBub3QgaGF2ZSBhIHJ1bm5pbmcgcHJv
Y2VzcyB3aGljaCBpcyB1c2VkIGZvciBjb252ZW5pZW5jZSwgdG8gYXZvaWQKICAgICAvLyBudWxs
IGNoZWNrcyBpbiBXZWJQYWdlUHJveHkuCkBAIC0xOTUsNyArMTk1LDcgQEAgcHVibGljOgogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgc2VuZFRvQWxsUHJvY2Vzc2VzKGNvbnN0IFQmIG1l
c3NhZ2UpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgc2VuZFRvQWxsUHJvY2Vzc2Vz
Rm9yU2Vzc2lvbihjb25zdCBUJiBtZXNzYWdlLCBQQUw6OlNlc3Npb25JRCk7CiAKLSAgICB2b2lk
IHByb2Nlc3NEaWRGaW5pc2hMYXVuY2hpbmcoV2ViUHJvY2Vzc1Byb3h5Kik7CisgICAgdm9pZCBw
cm9jZXNzRGlkRmluaXNoTGF1bmNoaW5nKFdlYlByb2Nlc3NQcm94eSYpOwogCiAgICAgV2ViUHJv
Y2Vzc0NhY2hlJiB3ZWJQcm9jZXNzQ2FjaGUoKSB7IHJldHVybiBtX3dlYlByb2Nlc3NDYWNoZS5n
ZXQoKTsgfQogCkBAIC01OTYsOCArNTk2LDggQEAgcHJpdmF0ZToKIAogICAgIElQQzo6TWVzc2Fn
ZVJlY2VpdmVyTWFwIG1fbWVzc2FnZVJlY2VpdmVyTWFwOwogCi0gICAgVmVjdG9yPFJlZlB0cjxX
ZWJQcm9jZXNzUHJveHk+PiBtX3Byb2Nlc3NlczsKLSAgICBXZWJQcm9jZXNzUHJveHkqIG1fcHJl
d2FybWVkUHJvY2VzcyB7IG51bGxwdHIgfTsKKyAgICBWZWN0b3I8UmVmPFdlYlByb2Nlc3NQcm94
eT4+IG1fcHJvY2Vzc2VzOworICAgIFdlYWtQdHI8V2ViUHJvY2Vzc1Byb3h5PiBtX3ByZXdhcm1l
ZFByb2Nlc3M7CiAKICAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBXZWFrUHRyPFdlYlByb2Nl
c3NQcm94eT4+IG1fZHVtbXlQcm9jZXNzUHJveGllczsgLy8gTGlnaHR3ZWlnaHQgV2ViUHJvY2Vz
c1Byb3h5IG9iamVjdHMgd2l0aG91dCBiYWNraW5nIHByb2Nlc3MuCiAKQEAgLTc5Nyw5ICs3OTcs
NyBAQCBwcml2YXRlOgogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OnNlbmRUb0FsbFByb2Nlc3Nlcyhjb25zdCBUJiBtZXNzYWdlKQogewotICAgIHNpemVfdCBwcm9j
ZXNzQ291bnQgPSBtX3Byb2Nlc3Nlcy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBwcm9jZXNzQ291bnQ7ICsraSkgewotICAgICAgICBXZWJQcm9jZXNzUHJveHkqIHByb2Nlc3Mg
PSBtX3Byb2Nlc3Nlc1tpXS5nZXQoKTsKKyAgICBmb3IgKGF1dG8mIHByb2Nlc3MgOiBtX3Byb2Nl
c3NlcykgewogICAgICAgICBpZiAocHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkKICAgICAgICAg
ICAgIHByb2Nlc3MtPnNlbmQoVChtZXNzYWdlKSwgMCk7CiAgICAgfQpAQCAtODA4LDkgKzgwNiw3
IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmRUb0FsbFByb2Nlc3Nlcyhjb25zdCBUJiBtZXNz
YWdlKQogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmRUb0Fs
bFByb2Nlc3Nlc0ZvclNlc3Npb24oY29uc3QgVCYgbWVzc2FnZSwgUEFMOjpTZXNzaW9uSUQgc2Vz
c2lvbklEKQogewotICAgIHNpemVfdCBwcm9jZXNzQ291bnQgPSBtX3Byb2Nlc3Nlcy5zaXplKCk7
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcm9jZXNzQ291bnQ7ICsraSkgewotICAgICAg
ICBXZWJQcm9jZXNzUHJveHkqIHByb2Nlc3MgPSBtX3Byb2Nlc3Nlc1tpXS5nZXQoKTsKKyAgICBm
b3IgKGF1dG8mIHByb2Nlc3MgOiBtX3Byb2Nlc3NlcykgewogICAgICAgICBpZiAocHJvY2Vzcy0+
Y2FuU2VuZE1lc3NhZ2UoKSAmJiAhcHJvY2Vzcy0+aXNQcmV3YXJtZWQoKSAmJiBwcm9jZXNzLT5z
ZXNzaW9uSUQoKSA9PSBzZXNzaW9uSUQpCiAgICAgICAgICAgICBwcm9jZXNzLT5zZW5kKFQobWVz
c2FnZSksIDApOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlByb2Nlc3NQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJv
eHkuY3BwCmluZGV4IDk3MjgyMzcyZGFhNTdmYjIyNzg4YjRkNzMxOGQyY2Y1NmY2MDIwY2IuLjQ4
NjI3NzcwMTQ1ZTA1OTQ2NWJhODRjYTYzZGIzYTU2NzM1N2Y4MTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcApAQCAtMTAyOCw3ICsxMDI4LDcgQEAgdm9p
ZCBXZWJQcm9jZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jaGluZyhQcm9jZXNzTGF1bmNoZXIqIGxh
dW5jaGVyLCBJUEM6OkNvbm5lY3QKICAgICBSRUxFQVNFX0FTU0VSVCghbV93ZWJDb25uZWN0aW9u
KTsKICAgICBtX3dlYkNvbm5lY3Rpb24gPSBXZWJDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpjcmVh
dGUodGhpcyk7CiAKLSAgICBtX3Byb2Nlc3NQb29sLT5wcm9jZXNzRGlkRmluaXNoTGF1bmNoaW5n
KHRoaXMpOworICAgIG1fcHJvY2Vzc1Bvb2wtPnByb2Nlc3NEaWRGaW5pc2hMYXVuY2hpbmcoKnRo
aXMpOwogICAgIG1fYmFja2dyb3VuZFJlc3BvbnNpdmVuZXNzVGltZXIudXBkYXRlU3RhdGUoKTsK
IAogI2lmIEVOQUJMRShJUENfVEVTVElOR19BUEkpCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VM
b2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYTE4YjUzMmZjYTIwMTdiZDAxMzAzOGI1NDg5MDE1
NWI5OTBmYjk3Ni4uZDliYjliNWVhZjIyMTZmNmU0MmFlMDBhZjYxZjIzZGQyNDU0NjYyNiAxMDA2
NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE0IEBACisyMDIxLTA0LTEwICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtp
dC5vcmc+CisKKyAgICAgICAgV2ViUHJvY2Vzc1Bvb2wgc2hvdWxkIHN0b3JlIFZlY3RvcjxSZWY8
V2ViUHJvY2Vzc1Byb3h5Pj4gaW5zdGVhZCBvZiBWZWN0b3I8UmVmUHRyPgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI0NDEyCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgQ2hyaXMgRHVtZXouCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YkNvcmUvU2hhcmVkQnVmZmVyLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1RfRik6
CisgICAgICAgIFVzZSBTaGFyZWRCdWZmZXI6Om9wZXJhdG9yPT0gaW5zdGVhZCBvZiBSZWY6Om9w
ZXJhdG9yPT0KKwogMjAyMS0wNC0xMCAgQW5nZWxvcyBPaWtvbm9tb3BvdWxvcyAgPGFuZ2Vsb3NA
aWdhbGlhLmNvbT4KIAogICAgICAgICBbSlNDXSBkZXRlY3QgaW5mcmFzdHJ1Y3R1cmUgZmFpbHVy
ZSBmb3IgcmVtb3RlIHN0cmVzcyB0ZXN0cwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJDb3JlL1NoYXJlZEJ1ZmZlci5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYkNvcmUvU2hhcmVkQnVmZmVyLmNwcAppbmRleCA3OWM1ZGUyMjdkOWExNTAzNWVkNDEy
MjUyZDY0NDFiOWNjZTAxYzBjLi5iZWM3ZDExOWVhODE5YjAxOTlhODczZjAyMDc2NmQ0MTkyMDFh
YzJhIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvU2hhcmVk
QnVmZmVyLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvU2hhcmVk
QnVmZmVyLmNwcApAQCAtMjA3LDE0ICsyMDcsMTQgQEAgVEVTVF9GKFNoYXJlZEJ1ZmZlclRlc3Qs
IGlzRXF1YWxUbykKICAgICAgICAgcmV0dXJuIGJ1ZmZlcjsKICAgICB9OwogICAgIGF1dG8gYnVm
ZmVyMSA9IG1ha2VCdWZmZXIoe3snYScsICdiJywgJ2MnLCAnZCd9fSk7Ci0gICAgRVhQRUNUX0VR
KGJ1ZmZlcjEsIGJ1ZmZlcjEpOworICAgIEVYUEVDVF9FUShidWZmZXIxLmdldCgpLCBidWZmZXIx
LmdldCgpKTsKIAogICAgIGJ1ZmZlcjEtPmFwcGVuZChWZWN0b3I8Y2hhcj4oeydhJywgJ2InLCAn
YycsICdkJ30pKTsKLSAgICBFWFBFQ1RfRVEoYnVmZmVyMSwgbWFrZUJ1ZmZlcih7eydhJywgJ2In
LCAnYycsICdkJywgJ2EnLCAnYicsICdjJywgJ2QnfX0pKTsKLSAgICBFWFBFQ1RfRVEobWFrZUJ1
ZmZlcih7eydhJ30sIHsnYicsICdjJ30sIHsnZCd9fSksIG1ha2VCdWZmZXIoe3snYScsICdiJ30s
IHsnYycsICdkJ319KSk7Ci0gICAgRVhQRUNUX05FKG1ha2VCdWZmZXIoe3snYScsICdiJ319KSwg
bWFrZUJ1ZmZlcih7eydhJywgJ2InLCAnYyd9fSkpOwotICAgIEVYUEVDVF9ORShtYWtlQnVmZmVy
KHt7J2EnLCAnYid9fSksIG1ha2VCdWZmZXIoe3snYicsICdjJ319KSk7Ci0gICAgRVhQRUNUX05F
KG1ha2VCdWZmZXIoe3snYSd9LCB7J2InfX0pLCBtYWtlQnVmZmVyKHt7J2EnfSwgeydhJ319KSk7
CisgICAgRVhQRUNUX0VRKGJ1ZmZlcjEuZ2V0KCksIG1ha2VCdWZmZXIoe3snYScsICdiJywgJ2Mn
LCAnZCcsICdhJywgJ2InLCAnYycsICdkJ319KS5nZXQoKSk7CisgICAgRVhQRUNUX0VRKG1ha2VC
dWZmZXIoe3snYSd9LCB7J2InLCAnYyd9LCB7J2QnfX0pLmdldCgpLCBtYWtlQnVmZmVyKHt7J2En
LCAnYid9LCB7J2MnLCAnZCd9fSkuZ2V0KCkpOworICAgIEVYUEVDVF9ORShtYWtlQnVmZmVyKHt7
J2EnLCAnYid9fSkuZ2V0KCksIG1ha2VCdWZmZXIoe3snYScsICdiJywgJ2MnfX0pLmdldCgpKTsK
KyAgICBFWFBFQ1RfTkUobWFrZUJ1ZmZlcih7eydhJywgJ2InfX0pLmdldCgpLCBtYWtlQnVmZmVy
KHt7J2InLCAnYyd9fSkuZ2V0KCkpOworICAgIEVYUEVDVF9ORShtYWtlQnVmZmVyKHt7J2EnfSwg
eydiJ319KS5nZXQoKSwgbWFrZUJ1ZmZlcih7eydhJ30sIHsnYSd9fSkuZ2V0KCkpOwogfQogCiBU
RVNUX0YoU2hhcmVkQnVmZmVyVGVzdCwgdG9IZXhTdHJpbmcpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>425918</attachid>
            <date>2021-04-13 14:54:50 -0700</date>
            <delta_ts>2021-04-13 15:48:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-224412-20210413145450.patch</filename>
            <type>text/plain</type>
            <size>22018</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc1OTEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDkyZDZkOWM2MzM0Mjg0OTE1ZjJmNWUz
MjVhY2NiNjgwYTBjZTAxOTEuLmM3ZGI3NzA5NzkyZGQxZDY2ODdmZDAwYTExYmE5MmIwMTk4OWUx
NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjEtMDQtMTMgIEFsZXggQ2hyaXN0ZW5zZW4gIDxh
Y2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBXZWJQcm9jZXNzUG9vbCBzaG91bGQg
c3RvcmUgVmVjdG9yPFJlZjxXZWJQcm9jZXNzUHJveHk+PiBpbnN0ZWFkIG9mIFZlY3RvcjxSZWZQ
dHI+CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjQ0
MTIKKworICAgICAgICBSZXZpZXdlZCBieSBDaHJpcyBEdW1lei4KKworICAgICAgICAqIHd0Zi9S
ZWYuaDoKKyAgICAgICAgKFdURjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXVEY6Om9wZXJhdG9y
IT0pOgorCiAyMDIxLTA0LTEzICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgUmVtb3ZlIHN1cHBvcnQgZm9yIE5QQVBJIHBsdWdpbnMgaW4gV2Vi
VmlldwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwppbmRleCBkMmI3OGYzMzUzYWJjMDQ5ODU1N2RkNWIzMzQ0ODFiOGI5YzcwYzhh
Li44OTEwYjgwZjk1MDRiNTg2NjNlMTBkYjhlODA0NjE3NzhkNDQ4YjAwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAt
MSwzICsxLDQwIEBACisyMDIxLTA0LTEzICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2Vu
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgV2ViUHJvY2Vzc1Bvb2wgc2hvdWxkIHN0b3JlIFZlY3Rv
cjxSZWY8V2ViUHJvY2Vzc1Byb3h5Pj4gaW5zdGVhZCBvZiBWZWN0b3I8UmVmUHRyPgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI0NDEyCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgQ2hyaXMgRHVtZXouCisKKyAgICAgICAgTm8gY2hhbmdlIGluIGJlaGF2
aW9yLCBleGNlcHQgSSBhbHNvIGNoYW5nZWQgYSByYXcgcG9pbnRlciB0byBhIFdlYWtQdHIsIHNv
IHdlIHNob3VsZCBiZSBhIGxpdHRsZSBzYWZlci4KKworICAgICAgICAqIFVJUHJvY2Vzcy9Db2Nv
YS9XZWJQcm9jZXNzUG9vbENvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9v
bDo6cmVtb3RlV2ViSW5zcGVjdG9yRW5hYmxlZENhbGxiYWNrKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyTm90aWZpY2F0aW9uT2JzZXJ2ZXJzKToKKyAgICAgICAg
KiBVSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Byb3h5Q29jb2EubW06CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQcm94eTo6Y2FjaGVNZWRpYU1JTUVUeXBlcyk6CisgICAgICAgICogVUlQ
cm9jZXNzL1Zpc2l0ZWRMaW5rU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpWaXNpdGVkTGlu
a1N0b3JlOjpyZW1vdmVBbGwpOgorICAgICAgICAoV2ViS2l0OjpWaXNpdGVkTGlua1N0b3JlOjpz
ZW5kU3RvcmVIYW5kbGVUb1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpWaXNpdGVkTGlua1N0
b3JlOjpkaWRVcGRhdGVTaGFyZWRTdHJpbmdIYXNoZXMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJQcm9jZXNzUG9vbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpncHVQ
cm9jZXNzQ3Jhc2hlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjplc3RhYmxp
c2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQcm9jZXNzUG9vbDo6dHJ5VGFrZVByZXdhcm1lZFByb2Nlc3MpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6aW5pdGlhbGl6ZU5ld1dlYlByb2Nlc3MpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6ZW5hYmxlUHJvY2Vzc1Rlcm1pbmF0aW9uKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNob3VsZFRlcm1pbmF0ZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpwcm9jZXNzRGlkRmluaXNoTGF1bmNoaW5nKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmRpc2Nvbm5lY3RQcm9jZXNzKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnByb2Nlc3NGb3JSZWdpc3RyYWJsZURvbWFpbik6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpjcmVhdGVXZWJQYWdlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZUFsbFdlYkNvbnRlbnRQcm9jZXNz
ZXMpOgorICAgICAgICAoV2ViS2l0Ojp3ZWJQcm9jZXNzUHJveHlGcm9tQ29ubmVjdGlvbik6Cisg
ICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmg6CisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3NQb29sOjpzZW5kVG9BbGxQcm9jZXNzZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzUG9vbDo6c2VuZFRvQWxsUHJvY2Vzc2VzRm9yU2Vzc2lvbik6CisgICAgICAgICogVUlQ
cm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
cm94eTo6ZGlkRmluaXNoTGF1bmNoaW5nKToKKwogMjAyMS0wNC0xMyAgV2Vuc29uIEhzaWVoICA8
d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAogICAgICAgICBbbWFjT1NdIFJlZmFjdG9yIGxvZ2lj
IGZvciBwcmVzZW50aW5nIHRoZSBzaGFyZWQgUUxQcmV2aWV3UGFuZWwgd2hlbiByZXZlYWxpbmcg
YW4gaW1hZ2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1JlZi5oIGIvU291cmNlL1dURi93
dGYvUmVmLmgKaW5kZXggNzI2YTRlNmRmMzM2N2MwYTY0MWI1MDM1MWFmZWRjMDA4NzNmYTA3My4u
MzA3NTU1ZjM5NjkyY2MzODI4ZjVhNzg1NjYxYzg1Mzk3ZDY3NDBhYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi93dGYvUmVmLmgKKysrIGIvU291cmNlL1dURi93dGYvUmVmLmgKQEAgLTI4OSw2ICsy
ODksNDIgQEAgaW5saW5lIGJvb2wgaXMoY29uc3QgUmVmPEFyZ1R5cGUsIFB0clRyYWl0cz4mIHNv
dXJjZSkKICAgICByZXR1cm4gaXM8RXhwZWN0ZWRUeXBlPihzb3VyY2UuZ2V0KCkpOwogfQogCit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgor
aW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZWY8VCwgVT4mIGEsIGNvbnN0IFJlZjxWLCBX
PiYgYikKK3sKKyAgICByZXR1cm4gYS5wdHIoKSA9PSBiLnB0cigpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgoraW5saW5lIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBSZWY8VCwgVT4mIGEsIFYmIGIpCit7CisgICAgcmV0dXJuIGEucHRyKCkgPT0gJmI7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Citpbmxp
bmUgYm9vbCBvcGVyYXRvcj09KFQmIGEsIGNvbnN0IFJlZjxVLCBWPiYgYikKK3sKKyAgICByZXR1
cm4gJmEgPT0gYi5wdHIoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwg
dHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgUmVm
PFQsIFU+JiBhLCBjb25zdCBSZWY8ViwgVz4mIGIpCit7CisgICAgcmV0dXJuIGEucHRyKCkgIT0g
Yi5wdHIoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUg
Vj4KK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgUmVmPFQsIFU+JiBhLCBWJiBiKQorewor
ICAgIHJldHVybiBhLnB0cigpICE9ICZiOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWPgoraW5saW5lIGJvb2wgb3BlcmF0b3IhPShUJiBhLCBjb25zdCBS
ZWY8VSwgVj4mIGIpCit7CisgICAgcmV0dXJuICZhICE9IGIucHRyKCk7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdURgogCiB1c2luZyBXVEY6OlJlZjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tCmluZGV4IDI1Y2VlYjE0OTEyMTEy
MmJjYTVlMzAzNzA4ZjI3YzRiZmQ4NGYwNjguLjEyOTAyYjA1ZGUyMTgyMmIxMTNiY2YxZTM4Mzcz
MDcyNDgyZmRmNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dl
YlByb2Nlc3NQb29sQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2Ev
V2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQpAQCAtNjA1LDEwICs2MDUsOCBAQCB2b2lkIFdlYlByb2Nl
c3NQb29sOjpjb2xvclByZWZlcmVuY2VzRGlkQ2hhbmdlQ2FsbGJhY2soQ0ZOb3RpZmljYXRpb25D
ZW50ZXJSZWYgYwogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVtb3RlV2ViSW5zcGVjdG9yRW5hYmxl
ZENhbGxiYWNrKENGTm90aWZpY2F0aW9uQ2VudGVyUmVmLCB2b2lkICpvYnNlcnZlciwgQ0ZTdHJp
bmdSZWYgbmFtZSwgY29uc3Qgdm9pZCAqLCBDRkRpY3Rpb25hcnlSZWYgdXNlckluZm8pCiB7CiAg
ICAgYXV0byogcG9vbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8V2ViUHJvY2Vzc1Bvb2wqPihvYnNlcnZl
cik7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwb29sLT5tX3Byb2Nlc3Nlcy5zaXplKCk7
ICsraSkgewotICAgICAgICBhdXRvIHByb2Nlc3MgPSBwb29sLT5tX3Byb2Nlc3Nlc1tpXTsKKyAg
ICBmb3IgKGF1dG8mIHByb2Nlc3MgOiBwb29sLT5tX3Byb2Nlc3NlcykKICAgICAgICAgcHJvY2Vz
cy0+ZW5hYmxlUmVtb3RlSW5zcGVjdG9ySWZOZWVkZWQoKTsKLSAgICB9CiB9CiAjZW5kaWYKIApA
QCAtNjk4LDExICs2OTYsMTEgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJOb3RpZmlj
YXRpb25PYnNlcnZlcnMoKQogICAgIG1fYWNjZXNzaWJpbGl0eUVuYWJsZWRPYnNlcnZlciA9IFtb
TlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXJGb3JOYW1lOihf
X2JyaWRnZSBpZClrQVhTQXBwbGljYXRpb25BY2Nlc3NpYmlsaXR5RW5hYmxlZE5vdGlmaWNhdGlv
biBvYmplY3Q6bmlsIHF1ZXVlOltOU09wZXJhdGlvblF1ZXVlIGN1cnJlbnRRdWV1ZV0gdXNpbmdC
bG9jazpeKE5TTm90aWZpY2F0aW9uICopIHsKICAgICAgICAgaWYgKCFfQVhTQXBwbGljYXRpb25B
Y2Nlc3NpYmlsaXR5RW5hYmxlZCgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fcHJvY2Vzc2VzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGZv
ciAoYXV0byYgcHJvY2VzcyA6IG1fcHJvY2Vzc2VzKSB7CiAjaWYgRU5BQkxFKENGUFJFRlNfRElS
RUNUX01PREUpCi0gICAgICAgICAgICBtX3Byb2Nlc3Nlc1tpXS0+dW5ibG9ja1ByZWZlcmVuY2VT
ZXJ2aWNlSWZOZWVkZWQoKTsKKyAgICAgICAgICAgIHByb2Nlc3MtPnVuYmxvY2tQcmVmZXJlbmNl
U2VydmljZUlmTmVlZGVkKCk7CiAjZW5kaWYKLSAgICAgICAgICAgIG1fcHJvY2Vzc2VzW2ldLT51
bmJsb2NrQWNjZXNzaWJpbGl0eVNlcnZlcklmTmVlZGVkKCk7CisgICAgICAgICAgICBwcm9jZXNz
LT51bmJsb2NrQWNjZXNzaWJpbGl0eVNlcnZlcklmTmVlZGVkKCk7CiAgICAgICAgIH0KICAgICB9
XTsKICNpZiBFTkFCTEUoQ0ZQUkVGU19ESVJFQ1RfTU9ERSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQcm94eUNvY29hLm1tIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Byb3h5Q29jb2EubW0KaW5kZXggZDMzNGRk
NDRlMDQyN2U2NzdjMTBmZTJiNDg5NTFlMDdmNTU0MTFjYi4uN2IxNDczYzVkMmVkYTk0ODIyMDRh
YmFiMDJkNmUwZjZjZGQzZWE2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Q29jb2EvV2ViUHJvY2Vzc1Byb3h5Q29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQ29jb2EvV2ViUHJvY2Vzc1Byb3h5Q29jb2EubW0KQEAgLTE3OCw3ICsxNzgsNyBAQCB2b2lk
IFdlYlByb2Nlc3NQcm94eTo6Y2FjaGVNZWRpYU1JTUVUeXBlcyhjb25zdCBWZWN0b3I8U3RyaW5n
PiYgdHlwZXMpCiAKICAgICBtZWRpYVR5cGVDYWNoZSgpID0gdHlwZXM7CiAgICAgZm9yIChhdXRv
JiBwcm9jZXNzIDogcHJvY2Vzc1Bvb2woKS5wcm9jZXNzZXMoKSkgewotICAgICAgICBpZiAocHJv
Y2VzcyAhPSB0aGlzKQorICAgICAgICBpZiAocHJvY2VzcyAhPSAqdGhpcykKICAgICAgICAgICAg
IGNhY2hlTWVkaWFNSU1FVHlwZXNJbnRlcm5hbCh0eXBlcyk7CiAgICAgfQogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVmlzaXRlZExpbmtTdG9yZS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9WaXNpdGVkTGlua1N0b3JlLmNwcAppbmRleCA2NTM5ZmNlYjljMTEy
YjE5N2NjYWFiM2NmYWYyM2JlOGUyYjUzZjQ3Li42N2YzNTU3MGMxZWQzYjM1ZmViNDRhMTU5ZTg1
YWI0ODg5MTk4YjE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9WaXNpdGVk
TGlua1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9WaXNpdGVkTGlua1N0
b3JlLmNwcApAQCAtOTUsNyArOTUsNyBAQCB2b2lkIFZpc2l0ZWRMaW5rU3RvcmU6OnJlbW92ZUFs
bCgpCiAgICAgbV9saW5rSGFzaFN0b3JlLmNsZWFyKCk7CiAKICAgICBmb3IgKGF1dG8mIHByb2Nl
c3MgOiBtX3Byb2Nlc3NlcykgewotICAgICAgICBBU1NFUlQocHJvY2Vzcy5wcm9jZXNzUG9vbCgp
LnByb2Nlc3NlcygpLmNvbnRhaW5zKCZwcm9jZXNzKSk7CisgICAgICAgIEFTU0VSVChwcm9jZXNz
LnByb2Nlc3NQb29sKCkucHJvY2Vzc2VzKCkuY29udGFpbnMocHJvY2VzcykpOwogICAgICAgICBw
cm9jZXNzLnNlbmQoTWVzc2FnZXM6OlZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyOjpSZW1vdmVB
bGxWaXNpdGVkTGlua3MoKSwgaWRlbnRpZmllcigpKTsKICAgICB9CiB9CkBAIC0xMTIsNyArMTEy
LDcgQEAgdm9pZCBWaXNpdGVkTGlua1N0b3JlOjphZGRWaXNpdGVkTGlua0hhc2hGcm9tUGFnZShX
ZWJQYWdlUHJveHlJZGVudGlmaWVyIHBhZ2VQcm8KIAogdm9pZCBWaXNpdGVkTGlua1N0b3JlOjpz
ZW5kU3RvcmVIYW5kbGVUb1Byb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzKQogewotICAg
IEFTU0VSVChwcm9jZXNzLnByb2Nlc3NQb29sKCkucHJvY2Vzc2VzKCkuY29udGFpbnMoJnByb2Nl
c3MpKTsKKyAgICBBU1NFUlQocHJvY2Vzcy5wcm9jZXNzUG9vbCgpLnByb2Nlc3NlcygpLmNvbnRh
aW5zKHByb2Nlc3MpKTsKIAogICAgIFNoYXJlZE1lbW9yeTo6SGFuZGxlIGhhbmRsZTsKICAgICBp
ZiAoIW1fbGlua0hhc2hTdG9yZS5jcmVhdGVTaGFyZWRNZW1vcnlIYW5kbGUoaGFuZGxlKSkKQEAg
LTEzOCw3ICsxMzgsNyBAQCB2b2lkIFZpc2l0ZWRMaW5rU3RvcmU6OmRpZFVwZGF0ZVNoYXJlZFN0
cmluZ0hhc2hlcyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6U2hhcmVkUwogICAgIEFTU0VSVCghYWRk
ZWRIYXNoZXMuaXNFbXB0eSgpIHx8ICFyZW1vdmVkSGFzaGVzLmlzRW1wdHkoKSk7CiAKICAgICBm
b3IgKGF1dG8mIHByb2Nlc3MgOiBtX3Byb2Nlc3NlcykgewotICAgICAgICBBU1NFUlQocHJvY2Vz
cy5wcm9jZXNzUG9vbCgpLnByb2Nlc3NlcygpLmNvbnRhaW5zKCZwcm9jZXNzKSk7CisgICAgICAg
IEFTU0VSVChwcm9jZXNzLnByb2Nlc3NQb29sKCkucHJvY2Vzc2VzKCkuY29udGFpbnMocHJvY2Vz
cykpOwogCiAgICAgICAgIGlmIChhZGRlZEhhc2hlcy5zaXplKCkgPiAyMCB8fCAhcmVtb3ZlZEhh
c2hlcy5pc0VtcHR5KCkpCiAgICAgICAgICAgICBwcm9jZXNzLnNlbmQoTWVzc2FnZXM6OlZpc2l0
ZWRMaW5rVGFibGVDb250cm9sbGVyOjpBbGxWaXNpdGVkTGlua1N0YXRlQ2hhbmdlZCgpLCBpZGVu
dGlmaWVyKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vz
c1Bvb2wuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCmlu
ZGV4IDFmMzZlMDU2ZDEwMzBiNjE3ZjNkODA3ZmQ0ZDI2NWI4OGIwZDZlMTYuLmY5MWQ4YmY2NzA2
NWQxMjM4OWJjMjM1YjA1MTE0YzE3ZDI3NWIyZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQcm9jZXNzUG9vbC5jcHAKQEAgLTUxMCw3ICs1MTAsNyBAQCB2b2lkIFdlYlByb2Nlc3NQ
b29sOjpncHVQcm9jZXNzQ3Jhc2hlZChQcm9jZXNzSUQgaWRlbnRpZmllcikKICAgICBtX2dwdVBy
b2Nlc3MgPSBudWxscHRyOwogCiAgICAgbV9jbGllbnQuZ3B1UHJvY2Vzc0RpZENyYXNoKHRoaXMs
IGlkZW50aWZpZXIpOwotICAgIFZlY3RvcjxSZWZQdHI8V2ViUHJvY2Vzc1Byb3h5Pj4gcHJvY2Vz
c2VzID0gbV9wcm9jZXNzZXM7CisgICAgVmVjdG9yPFJlZjxXZWJQcm9jZXNzUHJveHk+PiBwcm9j
ZXNzZXMgPSBtX3Byb2Nlc3NlczsKICAgICBmb3IgKGF1dG8mIHByb2Nlc3MgOiBwcm9jZXNzZXMp
CiAgICAgICAgIHByb2Nlc3MtPmdwdVByb2Nlc3NDcmFzaGVkKCk7CiAKQEAgLTU2OSwxNCArNTY5
LDE0IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0
aW9uVG9OZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvCiAKICAgICBpZiAoIXNfdXNlU2VwYXJhdGVT
ZXJ2aWNlV29ya2VyUHJvY2VzcykgewogICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3MgOiBwcm9j
ZXNzUG9vbC0+bV9wcm9jZXNzZXMpIHsKLSAgICAgICAgICAgIGlmIChwcm9jZXNzID09IHByb2Nl
c3NQb29sLT5tX3ByZXdhcm1lZFByb2Nlc3MgfHwgcHJvY2Vzcy0+aXNEdW1teVByb2Nlc3NQcm94
eSgpKQorICAgICAgICAgICAgaWYgKHByb2Nlc3MucHRyKCkgPT0gcHJvY2Vzc1Bvb2wtPm1fcHJl
d2FybWVkUHJvY2Vzcy5nZXQoKSB8fCBwcm9jZXNzLT5pc0R1bW15UHJvY2Vzc1Byb3h5KCkpCiAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBpZiAoJnByb2Nlc3MtPndlYnNp
dGVEYXRhU3RvcmUoKSAhPSB3ZWJzaXRlRGF0YVN0b3JlKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgaWYgKCFwcm9jZXNzLT5pc01hdGNoaW5nUmVnaXN0cmFibGVEb21h
aW4ocmVnaXN0cmFibGVEb21haW4pKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAg
ICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5ID0gcHJvY2Vzcy5nZXQoKTsKKyAgICAg
ICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkgPSBwcm9jZXNzLnB0cigpOwogICAgICAg
ICAgICAgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+ZW5hYmxlU2VydmljZVdvcmtlcnMocHJv
Y2Vzc1Bvb2wtPnVzZXJDb250ZW50Q29udHJvbGxlcklkZW50aWZpZXJGb3JTZXJ2aWNlV29ya2Vy
cygpKTsKIAogICAgICAgICAgICAgaWYgKHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPmlzSW5Q
cm9jZXNzQ2FjaGUoKSkgewpAQCAtNjcwLDcgKzY3MCw3IEBAIFJlZlB0cjxXZWJQcm9jZXNzUHJv
eHk+IFdlYlByb2Nlc3NQb29sOjp0cnlUYWtlUHJld2FybWVkUHJvY2VzcyhXZWJzaXRlRGF0YVN0
b3JlCiAgICAgLy8gVGhlcmUgaXMgc29tZXRpbWVzIGEgZGVsYXkgdW50aWwgd2UgZ2V0IG5vdGlm
aWVkIHRoYXQgYSBwcmV3YXJtZWQgcHJvY2VzcyBoYXMgYmVlbiB0ZXJtaW5hdGVkIChlLmcuIGFm
dGVyIHJlc3VtaW5nCiAgICAgLy8gZnJvbSBzdXNwZW5zaW9uKSBzbyBtYWtlIHN1cmUgdGhlIHBy
b2Nlc3MgaXMgc3RpbGwgcnVubmluZyBoZXJlIGJlZm9yZSBkZWNpZGluZyB0byB1c2UgaXQuCiAg
ICAgaWYgKG1fcHJld2FybWVkUHJvY2Vzcy0+d2FzVGVybWluYXRlZCgpKSB7Ci0gICAgICAgIFdF
QlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0VSUk9SKFByb2Nlc3MsICJ0cnlUYWtlUHJld2FybWVk
UHJvY2VzczogTm90IHVzaW5nIHByZXdhcm1lZCBwcm9jZXNzIGJlY2F1c2UgaXQgaGFzIGJlZW4g
dGVybWluYXRlZCAocHJvY2Vzcz0lcCwgUElEPSVkKSIsIG1fcHJld2FybWVkUHJvY2VzcywgbV9w
cmV3YXJtZWRQcm9jZXNzLT5wcm9jZXNzSWRlbnRpZmllcigpKTsKKyAgICAgICAgV0VCUFJPQ0VT
U1BPT0xfUkVMRUFTRV9MT0dfRVJST1IoUHJvY2VzcywgInRyeVRha2VQcmV3YXJtZWRQcm9jZXNz
OiBOb3QgdXNpbmcgcHJld2FybWVkIHByb2Nlc3MgYmVjYXVzZSBpdCBoYXMgYmVlbiB0ZXJtaW5h
dGVkIChwcm9jZXNzPSVwLCBQSUQ9JWQpIiwgbV9wcmV3YXJtZWRQcm9jZXNzLmdldCgpLCBtX3By
ZXdhcm1lZFByb2Nlc3MtPnByb2Nlc3NJZGVudGlmaWVyKCkpOwogICAgICAgICBtX3ByZXdhcm1l
ZFByb2Nlc3MgPSBudWxscHRyOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CkBAIC02
ODYsNyArNjg2LDcgQEAgUmVmUHRyPFdlYlByb2Nlc3NQcm94eT4gV2ViUHJvY2Vzc1Bvb2w6OnRy
eVRha2VQcmV3YXJtZWRQcm9jZXNzKFdlYnNpdGVEYXRhU3RvcmUKICAgICBtX3ByZXdhcm1lZFBy
b2Nlc3MtPnNldFdlYnNpdGVEYXRhU3RvcmUod2Vic2l0ZURhdGFTdG9yZSk7CiAgICAgbV9wcmV3
YXJtZWRQcm9jZXNzLT5tYXJrSXNOb0xvbmdlckluUHJld2FybWVkUG9vbCgpOwogCi0gICAgcmV0
dXJuIHN0ZDo6ZXhjaGFuZ2UobV9wcmV3YXJtZWRQcm9jZXNzLCBudWxscHRyKTsKKyAgICByZXR1
cm4gc3RkOjpleGNoYW5nZShtX3ByZXdhcm1lZFByb2Nlc3MsIG51bGxwdHIpLmdldCgpOwogfQog
CiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtODcxLDcgKzg3MSw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OmluaXRpYWxpemVOZXdXZWJQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcywgV2Vi
c2l0ZURhCiAKICAgICBpZiAoaXNQcmV3YXJtZWQgPT0gV2ViUHJvY2Vzc1Byb3h5OjpJc1ByZXdh
cm1lZDo6WWVzKSB7CiAgICAgICAgIEFTU0VSVCghbV9wcmV3YXJtZWRQcm9jZXNzKTsKLSAgICAg
ICAgbV9wcmV3YXJtZWRQcm9jZXNzID0gJnByb2Nlc3M7CisgICAgICAgIG1fcHJld2FybWVkUHJv
Y2VzcyA9IG1ha2VXZWFrUHRyKHByb2Nlc3MpOwogICAgIH0KIAogI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpICYmICFQTEFURk9STShNQUNDQVRBTFlTVCkKQEAgLTkwMSwxNyArOTAxLDE2IEBAIHZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OnByZXdhcm1Qcm9jZXNzKCkKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OmVuYWJsZVByb2Nlc3NUZXJtaW5hdGlvbigpCiB7CiAgICAgbV9wcm9jZXNzVGVybWluYXRpb25F
bmFibGVkID0gdHJ1ZTsKLSAgICAvLyBGSVhNRTogbV9wcm9jZXNzZXMgc2hvdWxkIGJlIFZlY3Rv
cjxSZWY8V2ViUHJvY2Vzc1Byb3h5Pj4KLSAgICBWZWN0b3I8UmVmUHRyPFdlYlByb2Nlc3NQcm94
eT4+IHByb2Nlc3NlcyA9IG1fcHJvY2Vzc2VzOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
cHJvY2Vzc2VzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChzaG91bGRUZXJtaW5hdGUoKnBy
b2Nlc3Nlc1tpXSkpCi0gICAgICAgICAgICBwcm9jZXNzZXNbaV0tPnRlcm1pbmF0ZSgpOworICAg
IFZlY3RvcjxSZWY8V2ViUHJvY2Vzc1Byb3h5Pj4gcHJvY2Vzc2VzID0gbV9wcm9jZXNzZXM7Cisg
ICAgZm9yIChhdXRvJiBwcm9jZXNzIDogcHJvY2Vzc2VzKSB7CisgICAgICAgIGlmIChzaG91bGRU
ZXJtaW5hdGUocHJvY2VzcykpCisgICAgICAgICAgICBwcm9jZXNzLT50ZXJtaW5hdGUoKTsKICAg
ICB9CiB9CiAKIGJvb2wgV2ViUHJvY2Vzc1Bvb2w6OnNob3VsZFRlcm1pbmF0ZShXZWJQcm9jZXNz
UHJveHkmIHByb2Nlc3MpCiB7Ci0gICAgQVNTRVJUKG1fcHJvY2Vzc2VzLmNvbnRhaW5zKCZwcm9j
ZXNzKSk7CisgICAgQVNTRVJUKG1fcHJvY2Vzc2VzLmNvbnRhaW5zKHByb2Nlc3MpKTsKIAogICAg
IGlmICghbV9wcm9jZXNzVGVybWluYXRpb25FbmFibGVkIHx8IG1fY29uZmlndXJhdGlvbi0+YWx3
YXlzS2VlcEFuZFJldXNlU3dhcHBlZFByb2Nlc3NlcygpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CkBAIC05MTksNyArOTE4LDcgQEAgYm9vbCBXZWJQcm9jZXNzUG9vbDo6c2hvdWxkVGVybWluYXRl
KFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcykKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6cHJvY2Vzc0RpZEZpbmlzaExhdW5jaGluZyhXZWJQcm9jZXNzUHJveHkq
IHByb2Nlc3MpCit2b2lkIFdlYlByb2Nlc3NQb29sOjpwcm9jZXNzRGlkRmluaXNoTGF1bmNoaW5n
KFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcykKIHsKICAgICBBU1NFUlQobV9wcm9jZXNzZXMuY29u
dGFpbnMocHJvY2VzcykpOwogCkBAIC05MzMsMjQgKzkzMiwyNCBAQCB2b2lkIFdlYlByb2Nlc3NQ
b29sOjpwcm9jZXNzRGlkRmluaXNoTGF1bmNoaW5nKFdlYlByb2Nlc3NQcm94eSogcHJvY2VzcykK
ICAgICBpZiAobV9tZW1vcnlTYW1wbGVyRW5hYmxlZCkgewogICAgICAgICBTYW5kYm94RXh0ZW5z
aW9uOjpIYW5kbGUgc2FtcGxlTG9nU2FuZGJveEhhbmRsZTsgICAgICAgIAogICAgICAgICBXYWxs
VGltZSBub3cgPSBXYWxsVGltZTo6bm93KCk7Ci0gICAgICAgIFN0cmluZyBzYW1wbGVMb2dGaWxl
UGF0aCA9IG1ha2VTdHJpbmcoIldlYlByb2Nlc3MiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25n
IGxvbmc+KG5vdy5zZWNvbmRzU2luY2VFcG9jaCgpLnNlY29uZHMoKSksICJwaWQiLCBwcm9jZXNz
LT5wcm9jZXNzSWRlbnRpZmllcigpKTsKKyAgICAgICAgU3RyaW5nIHNhbXBsZUxvZ0ZpbGVQYXRo
ID0gbWFrZVN0cmluZygiV2ViUHJvY2VzcyIsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9u
Zz4obm93LnNlY29uZHNTaW5jZUVwb2NoKCkuc2Vjb25kcygpKSwgInBpZCIsIHByb2Nlc3MucHJv
Y2Vzc0lkZW50aWZpZXIoKSk7CiAgICAgICAgIHNhbXBsZUxvZ0ZpbGVQYXRoID0gU2FuZGJveEV4
dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yVGVtcG9yYXJ5RmlsZShzYW1wbGVMb2dGaWxlUGF0aCwg
U2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBzYW1wbGVMb2dTYW5kYm94SGFuZGxl
KTsKICAgICAgICAgCi0gICAgICAgIHByb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlByb2Nlc3M6
OlN0YXJ0TWVtb3J5U2FtcGxlcihzYW1wbGVMb2dTYW5kYm94SGFuZGxlLCBzYW1wbGVMb2dGaWxl
UGF0aCwgbV9tZW1vcnlTYW1wbGVySW50ZXJ2YWwpLCAwKTsKKyAgICAgICAgcHJvY2Vzcy5zZW5k
KE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTdGFydE1lbW9yeVNhbXBsZXIoc2FtcGxlTG9nU2FuZGJv
eEhhbmRsZSwgc2FtcGxlTG9nRmlsZVBhdGgsIG1fbWVtb3J5U2FtcGxlckludGVydmFsKSwgMCk7
CiAgICAgfQogCiAgICAgaWYgKG1fY29uZmlndXJhdGlvbi0+ZnVsbHlTeW5jaHJvbm91c01vZGVJ
c0FsbG93ZWRGb3JUZXN0aW5nKCkpCi0gICAgICAgIHByb2Nlc3MtPmNvbm5lY3Rpb24oKS0+YWxs
b3dGdWxseVN5bmNocm9ub3VzTW9kZUZvclRlc3RpbmcoKTsKKyAgICAgICAgcHJvY2Vzcy5jb25u
ZWN0aW9uKCktPmFsbG93RnVsbHlTeW5jaHJvbm91c01vZGVGb3JUZXN0aW5nKCk7CiAKICAgICBp
ZiAobV9jb25maWd1cmF0aW9uLT5pZ25vcmVTeW5jaHJvbm91c01lc3NhZ2luZ1RpbWVvdXRzRm9y
VGVzdGluZygpKQotICAgICAgICBwcm9jZXNzLT5jb25uZWN0aW9uKCktPmlnbm9yZVRpbWVvdXRz
Rm9yVGVzdGluZygpOworICAgICAgICBwcm9jZXNzLmNvbm5lY3Rpb24oKS0+aWdub3JlVGltZW91
dHNGb3JUZXN0aW5nKCk7CiAKLSAgICBtX2Nvbm5lY3Rpb25DbGllbnQuZGlkQ3JlYXRlQ29ubmVj
dGlvbih0aGlzLCBwcm9jZXNzLT53ZWJDb25uZWN0aW9uKCkpOworICAgIG1fY29ubmVjdGlvbkNs
aWVudC5kaWRDcmVhdGVDb25uZWN0aW9uKHRoaXMsIHByb2Nlc3Mud2ViQ29ubmVjdGlvbigpKTsK
IH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6ZGlzY29ubmVjdFByb2Nlc3MoV2ViUHJvY2Vzc1By
b3h5JiBwcm9jZXNzKQogewotICAgIEFTU0VSVChtX3Byb2Nlc3Nlcy5jb250YWlucygmcHJvY2Vz
cykpOworICAgIEFTU0VSVChtX3Byb2Nlc3Nlcy5jb250YWlucyhwcm9jZXNzKSk7CiAKICAgICBp
ZiAobV9wcmV3YXJtZWRQcm9jZXNzID09ICZwcm9jZXNzKSB7CiAgICAgICAgIEFTU0VSVChtX3By
ZXdhcm1lZFByb2Nlc3MtPmlzUHJld2FybWVkKCkpOwpAQCAtOTczLDcgKzk3Miw3IEBAIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OmRpc2Nvbm5lY3RQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSYgcHJvY2Vz
cykKIAogICAgIHN0YXRpY19jYXN0PFdlYkNvbnRleHRTdXBwbGVtZW50Kj4oc3VwcGxlbWVudDxX
ZWJHZW9sb2NhdGlvbk1hbmFnZXJQcm94eT4oKSktPnByb2Nlc3NEaWRDbG9zZSgmcHJvY2Vzcyk7
CiAKLSAgICBtX3Byb2Nlc3Nlcy5yZW1vdmVGaXJzdCgmcHJvY2Vzcyk7CisgICAgbV9wcm9jZXNz
ZXMucmVtb3ZlRmlyc3QocHJvY2Vzcyk7CiAKICNpZiBFTkFCTEUoR0FNRVBBRCkKICAgICBpZiAo
bV9wcm9jZXNzZXNVc2luZ0dhbWVwYWRzLmNvbnRhaW5zKHByb2Nlc3MpKQpAQCAtOTg3LDE0ICs5
ODYsMTQgQEAgUmVmPFdlYlByb2Nlc3NQcm94eT4gV2ViUHJvY2Vzc1Bvb2w6OnByb2Nlc3NGb3JS
ZWdpc3RyYWJsZURvbWFpbihXZWJzaXRlRGF0YVN0b3IKIHsKICAgICBpZiAoIXJlZ2lzdHJhYmxl
RG9tYWluLmlzRW1wdHkoKSkgewogICAgICAgICBpZiAoYXV0byBwcm9jZXNzID0gd2ViUHJvY2Vz
c0NhY2hlKCkudGFrZVByb2Nlc3MocmVnaXN0cmFibGVEb21haW4sIHdlYnNpdGVEYXRhU3RvcmUp
KSB7Ci0gICAgICAgICAgICBBU1NFUlQobV9wcm9jZXNzZXMuY29udGFpbnMocHJvY2Vzcy5nZXQo
KSkpOworICAgICAgICAgICAgQVNTRVJUKG1fcHJvY2Vzc2VzLmNvbnRhaW5zKCpwcm9jZXNzKSk7
CiAgICAgICAgICAgICByZXR1cm4gcHJvY2Vzcy5yZWxlYXNlTm9uTnVsbCgpOwogICAgICAgICB9
CiAKICAgICAgICAgLy8gQ2hlY2sgaWYgd2UgaGF2ZSBhIHN1c3BlbmRlZCBwYWdlIGZvciB0aGUg
Z2l2ZW4gcmVnaXN0cmFibGUgZG9tYWluIGFuZCB1c2UgaXRzIHByb2Nlc3MgaWYgd2UgZG8sIGZv
ciBwZXJmb3JtYW5jZSByZWFzb25zLgogICAgICAgICBpZiAoYXV0byBwcm9jZXNzID0gU3VzcGVu
ZGVkUGFnZVByb3h5OjpmaW5kUmV1c2FibGVTdXNwZW5kZWRQYWdlUHJvY2VzcygqdGhpcywgcmVn
aXN0cmFibGVEb21haW4sIHdlYnNpdGVEYXRhU3RvcmUpKSB7CiAgICAgICAgICAgICBXRUJQUk9D
RVNTUE9PTF9SRUxFQVNFX0xPRyhQcm9jZXNzU3dhcHBpbmcsICJwcm9jZXNzRm9yUmVnaXN0cmFi
bGVEb21haW46IFVzaW5nIFdlYlByb2Nlc3MgZnJvbSBhIFN1c3BlbmRlZFBhZ2UgKHByb2Nlc3M9
JXAsIFBJRD0laSkiLCBwcm9jZXNzLmdldCgpLCBwcm9jZXNzLT5wcm9jZXNzSWRlbnRpZmllcigp
KTsKLSAgICAgICAgICAgIEFTU0VSVChtX3Byb2Nlc3Nlcy5jb250YWlucyhwcm9jZXNzLmdldCgp
KSk7CisgICAgICAgICAgICBBU1NFUlQobV9wcm9jZXNzZXMuY29udGFpbnMoKnByb2Nlc3MpKTsK
ICAgICAgICAgICAgIHJldHVybiBwcm9jZXNzLnJlbGVhc2VOb25OdWxsKCk7CiAgICAgICAgIH0K
ICAgICB9CkBAIC0xMDAzLDcgKzEwMDIsNyBAQCBSZWY8V2ViUHJvY2Vzc1Byb3h5PiBXZWJQcm9j
ZXNzUG9vbDo6cHJvY2Vzc0ZvclJlZ2lzdHJhYmxlRG9tYWluKFdlYnNpdGVEYXRhU3RvcgogICAg
ICAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPRyhQcm9jZXNzU3dhcHBpbmcsICJwcm9jZXNz
Rm9yUmVnaXN0cmFibGVEb21haW46IFVzaW5nIHByZXdhcm1lZCBwcm9jZXNzIChwcm9jZXNzPSVw
LCBQSUQ9JWkpIiwgcHJvY2Vzcy5nZXQoKSwgcHJvY2Vzcy0+cHJvY2Vzc0lkZW50aWZpZXIoKSk7
CiAgICAgICAgIGlmICghcmVnaXN0cmFibGVEb21haW4uaXNFbXB0eSgpKQogICAgICAgICAgICAg
dHJ5UHJld2FybVdpdGhEb21haW5JbmZvcm1hdGlvbigqcHJvY2VzcywgcmVnaXN0cmFibGVEb21h
aW4pOwotICAgICAgICBBU1NFUlQobV9wcm9jZXNzZXMuY29udGFpbnMocHJvY2Vzcy5nZXQoKSkp
OworICAgICAgICBBU1NFUlQobV9wcm9jZXNzZXMuY29udGFpbnMoKnByb2Nlc3MpKTsKICAgICAg
ICAgcmV0dXJuIHByb2Nlc3MucmVsZWFzZU5vbk51bGwoKTsKICAgICB9CiAKQEAgLTEwMTUsNyAr
MTAxNCw3IEBAIFJlZjxXZWJQcm9jZXNzUHJveHk+IFdlYlByb2Nlc3NQb29sOjpwcm9jZXNzRm9y
UmVnaXN0cmFibGVEb21haW4oV2Vic2l0ZURhdGFTdG9yCiAjZW5kaWYKIAogICAgICAgICBmb3Ig
KGF1dG8mIHByb2Nlc3MgOiBtX3Byb2Nlc3NlcykgewotICAgICAgICAgICAgaWYgKHByb2Nlc3Mg
PT0gbV9wcmV3YXJtZWRQcm9jZXNzIHx8IHByb2Nlc3MtPmlzRHVtbXlQcm9jZXNzUHJveHkoKSkK
KyAgICAgICAgICAgIGlmIChwcm9jZXNzLnB0cigpID09IG1fcHJld2FybWVkUHJvY2Vzcy5nZXQo
KSB8fCBwcm9jZXNzLT5pc0R1bW15UHJvY2Vzc1Byb3h5KCkpCiAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogICAgICAgICAgICAgaWYgKHByb2Nl
c3MtPmlzUnVubmluZ1NlcnZpY2VXb3JrZXJzKCkpCkBAIC0xMDIzLDcgKzEwMjIsNyBAQCBSZWY8
V2ViUHJvY2Vzc1Byb3h5PiBXZWJQcm9jZXNzUG9vbDo6cHJvY2Vzc0ZvclJlZ2lzdHJhYmxlRG9t
YWluKFdlYnNpdGVEYXRhU3RvcgogI2VuZGlmCiAgICAgICAgICAgICBpZiAobXVzdE1hdGNoRGF0
YVN0b3JlICYmICZwcm9jZXNzLT53ZWJzaXRlRGF0YVN0b3JlKCkgIT0gJndlYnNpdGVEYXRhU3Rv
cmUpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICByZXR1cm4gKnByb2Nl
c3M7CisgICAgICAgICAgICByZXR1cm4gcHJvY2VzczsKICAgICAgICAgfQogICAgIH0KICAgICBy
ZXR1cm4gY3JlYXRlTmV3V2ViUHJvY2Vzcygmd2Vic2l0ZURhdGFTdG9yZSk7CkBAIC0xMDcwLDcg
KzEwNjksNyBAQCBSZWY8V2ViUGFnZVByb3h5PiBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlV2ViUGFn
ZShQYWdlQ2xpZW50JiBwYWdlQ2xpZW50LCBSZWY8QVBJOgogICAgICAgICBpZiAoIXByb2Nlc3Mp
IHsKICAgICAgICAgICAgIHByb2Nlc3MgPSBXZWJQcm9jZXNzUHJveHk6OmNyZWF0ZSgqdGhpcywg
cGFnZUNvbmZpZ3VyYXRpb24tPndlYnNpdGVEYXRhU3RvcmUoKSwgV2ViUHJvY2Vzc1Byb3h5OjpJ
c1ByZXdhcm1lZDo6Tm8sIFdlYlByb2Nlc3NQcm94eTo6U2hvdWxkTGF1bmNoUHJvY2Vzczo6Tm8p
OwogICAgICAgICAgICAgbV9kdW1teVByb2Nlc3NQcm94aWVzLmFkZChwYWdlQ29uZmlndXJhdGlv
bi0+d2Vic2l0ZURhdGFTdG9yZSgpLT5zZXNzaW9uSUQoKSwgbWFrZVdlYWtQdHIoKnByb2Nlc3Mp
KTsKLSAgICAgICAgICAgIG1fcHJvY2Vzc2VzLmFwcGVuZChwcm9jZXNzLmNvcHlSZWYoKSk7Cisg
ICAgICAgICAgICBtX3Byb2Nlc3Nlcy5hcHBlbmQoKnByb2Nlc3MpOwogICAgICAgICB9CiAgICAg
fSBlbHNlCiAgICAgICAgIHByb2Nlc3MgPSBwcm9jZXNzRm9yUmVnaXN0cmFibGVEb21haW4oKnBh
Z2VDb25maWd1cmF0aW9uLT53ZWJzaXRlRGF0YVN0b3JlKCksIG51bGxwdHIsIHsgfSk7CkBAIC0x
NTAxLDcgKzE1MDAsNyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzdG9wTWVtb3J5U2FtcGxlcigp
CiB2b2lkIFdlYlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVBbGxXZWJDb250ZW50UHJvY2Vzc2VzKCkK
IHsKICAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19FUlJPUihQcm9jZXNzLCAidGVybWlu
YXRlQWxsV2ViQ29udGVudFByb2Nlc3NlcyIpOwotICAgIFZlY3RvcjxSZWZQdHI8V2ViUHJvY2Vz
c1Byb3h5Pj4gcHJvY2Vzc2VzID0gbV9wcm9jZXNzZXM7CisgICAgVmVjdG9yPFJlZjxXZWJQcm9j
ZXNzUHJveHk+PiBwcm9jZXNzZXMgPSBtX3Byb2Nlc3NlczsKICAgICBmb3IgKGF1dG8mIHByb2Nl
c3MgOiBwcm9jZXNzZXMpCiAgICAgICAgIHByb2Nlc3MtPnRlcm1pbmF0ZSgpOwogfQpAQCAtMTU1
OCwxMSArMTU1NywxMSBAQCBib29sIFdlYlByb2Nlc3NQb29sOjpodHRwUGlwZWxpbmluZ0VuYWJs
ZWQoKSBjb25zdAogI2VuZGlmCiB9CiAKLXN0YXRpYyBXZWJQcm9jZXNzUHJveHkqIHdlYlByb2Nl
c3NQcm94eUZyb21Db25uZWN0aW9uKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3Qg
VmVjdG9yPFJlZlB0cjxXZWJQcm9jZXNzUHJveHk+PiYgcHJvY2Vzc2VzKQorc3RhdGljIFdlYlBy
b2Nlc3NQcm94eSogd2ViUHJvY2Vzc1Byb3h5RnJvbUNvbm5lY3Rpb24oSVBDOjpDb25uZWN0aW9u
JiBjb25uZWN0aW9uLCBjb25zdCBWZWN0b3I8UmVmPFdlYlByb2Nlc3NQcm94eT4+JiBwcm9jZXNz
ZXMpCiB7CiAgICAgZm9yIChhdXRvJiBwcm9jZXNzIDogcHJvY2Vzc2VzKSB7CiAgICAgICAgIGlm
IChwcm9jZXNzLT5oYXNDb25uZWN0aW9uKGNvbm5lY3Rpb24pKQotICAgICAgICAgICAgcmV0dXJu
IHByb2Nlc3MuZ2V0KCk7CisgICAgICAgICAgICByZXR1cm4gcHJvY2Vzcy5wdHIoKTsKICAgICB9
CiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQ
cm9jZXNzUG9vbC5oCmluZGV4IDRlOWY2Njg0Y2JhYjE0OTQ2MTdhZjUzYzMyYzJmOWEzMzY4Zjgw
ZGUuLmRjN2ExYTEzNWYwZmY3MmE5ZGZjMjIwNzhjODY1NTZlNmJmN2FmYzkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaApAQCAtMTg2LDcgKzE4Niw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHNldEN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcihj
b25zdCBTdHJpbmcmKTsKICAgICBjb25zdCBTdHJpbmcmIGN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNl
QnVuZGxlSWRlbnRpZmllcigpIHsgcmV0dXJuIG1fY29uZmlndXJhdGlvbi0+Y3VzdG9tV2ViQ29u
dGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKCk7IH0KIAotICAgIGNvbnN0IFZlY3RvcjxSZWZQ
dHI8V2ViUHJvY2Vzc1Byb3h5Pj4mIHByb2Nlc3NlcygpIGNvbnN0IHsgcmV0dXJuIG1fcHJvY2Vz
c2VzOyB9CisgICAgY29uc3QgVmVjdG9yPFJlZjxXZWJQcm9jZXNzUHJveHk+PiYgcHJvY2Vzc2Vz
KCkgY29uc3QgeyByZXR1cm4gbV9wcm9jZXNzZXM7IH0KIAogICAgIC8vIFdlYlByb2Nlc3NQcm94
eSBvYmplY3Qgd2hpY2ggZG9lcyBub3QgaGF2ZSBhIHJ1bm5pbmcgcHJvY2VzcyB3aGljaCBpcyB1
c2VkIGZvciBjb252ZW5pZW5jZSwgdG8gYXZvaWQKICAgICAvLyBudWxsIGNoZWNrcyBpbiBXZWJQ
YWdlUHJveHkuCkBAIC0xOTUsNyArMTk1LDcgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHZvaWQgc2VuZFRvQWxsUHJvY2Vzc2VzKGNvbnN0IFQmIG1lc3NhZ2UpOwogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgc2VuZFRvQWxsUHJvY2Vzc2VzRm9yU2Vzc2lvbihjb25z
dCBUJiBtZXNzYWdlLCBQQUw6OlNlc3Npb25JRCk7CiAKLSAgICB2b2lkIHByb2Nlc3NEaWRGaW5p
c2hMYXVuY2hpbmcoV2ViUHJvY2Vzc1Byb3h5Kik7CisgICAgdm9pZCBwcm9jZXNzRGlkRmluaXNo
TGF1bmNoaW5nKFdlYlByb2Nlc3NQcm94eSYpOwogCiAgICAgV2ViUHJvY2Vzc0NhY2hlJiB3ZWJQ
cm9jZXNzQ2FjaGUoKSB7IHJldHVybiBtX3dlYlByb2Nlc3NDYWNoZS5nZXQoKTsgfQogCkBAIC01
OTYsOCArNTk2LDggQEAgcHJpdmF0ZToKIAogICAgIElQQzo6TWVzc2FnZVJlY2VpdmVyTWFwIG1f
bWVzc2FnZVJlY2VpdmVyTWFwOwogCi0gICAgVmVjdG9yPFJlZlB0cjxXZWJQcm9jZXNzUHJveHk+
PiBtX3Byb2Nlc3NlczsKLSAgICBXZWJQcm9jZXNzUHJveHkqIG1fcHJld2FybWVkUHJvY2VzcyB7
IG51bGxwdHIgfTsKKyAgICBWZWN0b3I8UmVmPFdlYlByb2Nlc3NQcm94eT4+IG1fcHJvY2Vzc2Vz
OworICAgIFdlYWtQdHI8V2ViUHJvY2Vzc1Byb3h5PiBtX3ByZXdhcm1lZFByb2Nlc3M7CiAKICAg
ICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBXZWFrUHRyPFdlYlByb2Nlc3NQcm94eT4+IG1fZHVt
bXlQcm9jZXNzUHJveGllczsgLy8gTGlnaHR3ZWlnaHQgV2ViUHJvY2Vzc1Byb3h5IG9iamVjdHMg
d2l0aG91dCBiYWNraW5nIHByb2Nlc3MuCiAKQEAgLTc5Nyw5ICs3OTcsNyBAQCBwcml2YXRlOgog
dGVtcGxhdGU8dHlwZW5hbWUgVD4KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmRUb0FsbFByb2Nl
c3Nlcyhjb25zdCBUJiBtZXNzYWdlKQogewotICAgIHNpemVfdCBwcm9jZXNzQ291bnQgPSBtX3By
b2Nlc3Nlcy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcm9jZXNzQ291bnQ7
ICsraSkgewotICAgICAgICBXZWJQcm9jZXNzUHJveHkqIHByb2Nlc3MgPSBtX3Byb2Nlc3Nlc1tp
XS5nZXQoKTsKKyAgICBmb3IgKGF1dG8mIHByb2Nlc3MgOiBtX3Byb2Nlc3NlcykgewogICAgICAg
ICBpZiAocHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkKICAgICAgICAgICAgIHByb2Nlc3MtPnNl
bmQoVChtZXNzYWdlKSwgMCk7CiAgICAgfQpAQCAtODA4LDkgKzgwNiw3IEBAIHZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OnNlbmRUb0FsbFByb2Nlc3Nlcyhjb25zdCBUJiBtZXNzYWdlKQogdGVtcGxhdGU8
dHlwZW5hbWUgVD4KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmRUb0FsbFByb2Nlc3Nlc0ZvclNl
c3Npb24oY29uc3QgVCYgbWVzc2FnZSwgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogewotICAg
IHNpemVfdCBwcm9jZXNzQ291bnQgPSBtX3Byb2Nlc3Nlcy5zaXplKCk7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBwcm9jZXNzQ291bnQ7ICsraSkgewotICAgICAgICBXZWJQcm9jZXNzUHJv
eHkqIHByb2Nlc3MgPSBtX3Byb2Nlc3Nlc1tpXS5nZXQoKTsKKyAgICBmb3IgKGF1dG8mIHByb2Nl
c3MgOiBtX3Byb2Nlc3NlcykgewogICAgICAgICBpZiAocHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2Uo
KSAmJiAhcHJvY2Vzcy0+aXNQcmV3YXJtZWQoKSAmJiBwcm9jZXNzLT5zZXNzaW9uSUQoKSA9PSBz
ZXNzaW9uSUQpCiAgICAgICAgICAgICBwcm9jZXNzLT5zZW5kKFQobWVzc2FnZSksIDApOwogICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCmluZGV4IDk3
MjgyMzcyZGFhNTdmYjIyNzg4YjRkNzMxOGQyY2Y1NmY2MDIwY2IuLjQ4NjI3NzcwMTQ1ZTA1OTQ2
NWJhODRjYTYzZGIzYTU2NzM1N2Y4MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
UHJvY2Vzc1Byb3h5LmNwcApAQCAtMTAyOCw3ICsxMDI4LDcgQEAgdm9pZCBXZWJQcm9jZXNzUHJv
eHk6OmRpZEZpbmlzaExhdW5jaGluZyhQcm9jZXNzTGF1bmNoZXIqIGxhdW5jaGVyLCBJUEM6OkNv
bm5lY3QKICAgICBSRUxFQVNFX0FTU0VSVCghbV93ZWJDb25uZWN0aW9uKTsKICAgICBtX3dlYkNv
bm5lY3Rpb24gPSBXZWJDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpjcmVhdGUodGhpcyk7CiAKLSAg
ICBtX3Byb2Nlc3NQb29sLT5wcm9jZXNzRGlkRmluaXNoTGF1bmNoaW5nKHRoaXMpOworICAgIG1f
cHJvY2Vzc1Bvb2wtPnByb2Nlc3NEaWRGaW5pc2hMYXVuY2hpbmcoKnRoaXMpOwogICAgIG1fYmFj
a2dyb3VuZFJlc3BvbnNpdmVuZXNzVGltZXIudXBkYXRlU3RhdGUoKTsKIAogI2lmIEVOQUJMRShJ
UENfVEVTVElOR19BUEkpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>