<?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>79871</bug_id>
          
          <creation_ts>2012-02-28 22:17:52 -0800</creation_ts>
          <short_desc>[BlackBerry] Upstream LayerWebKitThread and its derived classes</short_desc>
          <delta_ts>2012-03-03 19:05:21 -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>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>Other</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>73119</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Robin Cao">robin.webkit</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>arvid2.nilsson</cc>
    
    <cc>charles.wei</cc>
    
    <cc>leo.yang</cc>
    
    <cc>rwlbuis</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>567374</commentid>
    <comment_count>0</comment_count>
    <who name="Robin Cao">robin.webkit</who>
    <bug_when>2012-02-28 22:17:52 -0800</bug_when>
    <thetext>LayerWebKitThread is the BlackBerry implementation of PlatformLayer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567527</commentid>
    <comment_count>1</comment_count>
      <attachid>129422</attachid>
    <who name="Robin Cao">robin.webkit</who>
    <bug_when>2012-02-29 02:14:29 -0800</bug_when>
    <thetext>Created attachment 129422
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567727</commentid>
    <comment_count>2</comment_count>
      <attachid>129422</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2012-02-29 10:46:47 -0800</bug_when>
    <thetext>Comment on attachment 129422
patch

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

Looks good, still some things to improve.

&gt; Source/WebCore/platform/graphics/blackberry/LayerData.h:156
&gt; +    bool includeVisibility()

Could be made const.

&gt; Source/WebCore/platform/graphics/blackberry/LayerData.h:192
&gt; +    LayerProgramShader m_layerProgramShader;

Could move this one so all the bools can become a bitfield, saving some mem. Not sure how often LayerData is created though.

&gt; Source/WebCore/platform/graphics/blackberry/LayerWebKitThread.cpp:426
&gt; +    return m_superlayer;

Why not inline this one?

&gt; Source/WebCore/platform/graphics/blackberry/LayerWebKitThread.h:47
&gt; +#include &lt;wtf/text/StringHash.h&gt;

Are all of these included needed?

&gt; Source/WebCore/platform/graphics/blackberry/LayerWebKitThread.h:156
&gt; +    bool isDrawable() { return m_isDrawable; }

const

&gt; Source/WebCore/platform/graphics/blackberry/PluginLayerWebKitThread.cpp:79
&gt; +    m_pluginView-&gt;updateBuffer(IntRect(IntPoint(0, 0), m_pluginView-&gt;size()));

IntPoint::zero

&gt; Source/WebCore/platform/graphics/blackberry/VideoLayerWebKitThread.cpp:58
&gt; +        // clear hole punch rect

Not a sentence.

&gt; Source/WebCore/platform/graphics/blackberry/VideoLayerWebKitThread.cpp:90
&gt; +    setHolePunchRect(IntRect(0, 0, m_bounds.width(), m_bounds.height()));

Probably more efficient to do IntRect(IntPoint::zero(), m_bounds);

&gt; Source/WebCore/platform/graphics/blackberry/VideoLayerWebKitThread.cpp:94
&gt; +    if (frameView)

Can be combined.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568368</commentid>
    <comment_count>3</comment_count>
    <who name="Robin Cao">robin.webkit</who>
    <bug_when>2012-02-29 23:14:27 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 129422 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=129422&amp;action=review
&gt; 
&gt; Looks good, still some things to improve.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/blackberry/LayerData.h:156
&gt; &gt; +    bool includeVisibility()
&gt; 
&gt; Could be made const.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/blackberry/LayerData.h:192
&gt; &gt; +    LayerProgramShader m_layerProgramShader;
&gt; 
&gt; Could move this one so all the bools can become a bitfield, saving some mem. Not sure how often LayerData is created though.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/blackberry/LayerWebKitThread.cpp:426
&gt; &gt; +    return m_superlayer;
&gt; 
&gt; Why not inline this one?
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/blackberry/LayerWebKitThread.h:47
&gt; &gt; +#include &lt;wtf/text/StringHash.h&gt;
&gt; 
&gt; Are all of these included needed?
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/blackberry/LayerWebKitThread.h:156
&gt; &gt; +    bool isDrawable() { return m_isDrawable; }
&gt; 
&gt; const
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/blackberry/PluginLayerWebKitThread.cpp:79
&gt; &gt; +    m_pluginView-&gt;updateBuffer(IntRect(IntPoint(0, 0), m_pluginView-&gt;size()));
&gt; 
&gt; IntPoint::zero
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/blackberry/VideoLayerWebKitThread.cpp:58
&gt; &gt; +        // clear hole punch rect
&gt; 
&gt; Not a sentence.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/blackberry/VideoLayerWebKitThread.cpp:90
&gt; &gt; +    setHolePunchRect(IntRect(0, 0, m_bounds.width(), m_bounds.height()));
&gt; 
&gt; Probably more efficient to do IntRect(IntPoint::zero(), m_bounds);
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/blackberry/VideoLayerWebKitThread.cpp:94
&gt; &gt; +    if (frameView)
&gt; 
&gt; Can be combined.

Thanks for the review, I&apos;ll address all your comments above in a revised patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568377</commentid>
    <comment_count>4</comment_count>
      <attachid>129638</attachid>
    <who name="Robin Cao">robin.webkit</who>
    <bug_when>2012-02-29 23:25:47 -0800</bug_when>
    <thetext>Created attachment 129638
patch v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570197</commentid>
    <comment_count>5</comment_count>
      <attachid>129638</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-03 19:05:16 -0800</bug_when>
    <thetext>Comment on attachment 129638
patch v2

Clearing flags on attachment: 129638

Committed r109668: &lt;http://trac.webkit.org/changeset/109668&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570198</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-03 19:05:21 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129422</attachid>
            <date>2012-02-29 02:14:29 -0800</date>
            <delta_ts>2012-02-29 23:25:36 -0800</delta_ts>
            <desc>patch</desc>
            <filename>bug-79871-20120229181424.patch</filename>
            <type>text/plain</type>
            <size>56468</size>
            <attacher name="Robin Cao">robin.webkit</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA5MjAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTRmMWIxNTZiNjQyZDc5
NDViNjc0OWM0NDJlOTg3YWVmMjdlYmIyZS4uMTM2NGY3MWIzYjAzMTRjMTE4NTk5YWZlOGY2YTNm
YjY4OGJmNjA1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1NiBAQAorMjAxMi0wMi0yOSAgUm9i
aW4gQ2FvICA8cm9iaW4uY2FvQHRvcmNobW9iaWxlLmNvbS5jbj4KKworICAgICAgICBbQmxhY2tC
ZXJyeV0gVXBzdHJlYW0gTGF5ZXJXZWJLaXRUaHJlYWQgYW5kIGl0cyBkZXJpdmVkIGNsYXNzZXMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc5ODcxCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW5pdGlhbCB1
cHN0cmVhbSwgbm8gbmV3IHRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYmxh
Y2tiZXJyeS9DYW52YXNMYXllcldlYktpdFRocmVhZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNMYXllcldlYktpdFRocmVhZDo6Q2FudmFz
TGF5ZXJXZWJLaXRUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzTGF5ZXJXZWJLaXRU
aHJlYWQ6On5DYW52YXNMYXllcldlYktpdFRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52
YXNMYXllcldlYktpdFRocmVhZDo6c2V0Q2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZh
c0xheWVyV2ViS2l0VGhyZWFkOjpzZXROZWVkc0Rpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzTGF5ZXJXZWJLaXRUaHJlYWQ6OnVwZGF0ZVRleHR1cmVDb250ZW50c0lmTmVlZGVkKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0NhbnZhc0xheWVyV2ViS2l0
VGhyZWFkLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDYW52YXNMYXll
cldlYktpdFRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNMYXllcldlYktpdFRocmVh
ZDo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVy
RGF0YS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoTGF5ZXJEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyRGF0YTo6TGF5ZXJEYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyRGF0YTo6fkxheWVyRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckRhdGE6
OmFuY2hvclBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyRGF0YTo6YW5jaG9yUG9pbnRa
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyRGF0YTo6YmFja2dyb3VuZENvbG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyRGF0YTo6Ym9yZGVyQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJEYXRhOjpib3JkZXJXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckRhdGE6OmJv
dW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckRhdGE6OmRvdWJsZVNpZGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyRGF0YTo6ZnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJE
YXRhOjptYXNrc1RvQm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyRGF0YTo6b3BhY2l0
eSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckRhdGE6Om9wYXF1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpMYXllckRhdGE6OnBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyRGF0YTo6
c3VibGF5ZXJUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJEYXRhOjp0cmFuc2Zv
cm0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJEYXRhOjpwcmVzZXJ2ZXMzRCk6CisgICAgICAg
IChXZWJDb3JlOjpMYXllckRhdGE6OmdldFRleHR1cmVJRCk6CisgICAgICAgIChXZWJDb3JlOjpM
YXllckRhdGE6OnNldFRleHR1cmVJRCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckRhdGE6Om5l
ZWRzVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckRhdGE6OmxheWVyUHJvZ3JhbVNo
YWRlcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllckRhdGE6OmlzRml4ZWRQb3NpdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllckRhdGE6Omhhc0ZpeGVkQ29udGFpbmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyRGF0YTo6aGFzRml4ZWRBbmNlc3RvckluRE9NVHJlZSk6CisgICAgICAg
IChXZWJDb3JlOjpMYXllckRhdGE6OnBsdWdpblZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJEYXRhOjpob2xlUHVuY2hSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyRGF0YTo6aGFz
SG9sZVB1bmNoUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckRhdGE6Om1lZGlhUGxheWVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyRGF0YTo6Y2FudmFzKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyRGF0YTo6cmVwbGljYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyRGF0YTo6
bGF5ZXJUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyRGF0YTo6aW5jbHVkZVZpc2liaWxp
dHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJXZWJLaXRU
aHJlYWQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJXZWJLaXRUaHJlYWQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllcldlYktp
dFRocmVhZDo6TGF5ZXJXZWJLaXRUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJXZWJL
aXRUaHJlYWQ6On5MYXllcldlYktpdFRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllcldl
YktpdFRocmVhZDo6cGFpbnRDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllcldlYktp
dFRocmVhZDo6Y29udGVudHNWaXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyV2ViS2l0
VGhyZWFkOjpjcmVhdGVGcm9udEJ1ZmZlckxvY2spOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJX
ZWJLaXRUaHJlYWQ6OnVwZGF0ZVRleHR1cmVDb250ZW50c0lmTmVlZGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyV2ViS2l0VGhyZWFkOjpzZXRDb250ZW50cyk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllcldlYktpdFRocmVhZDo6c2V0RHJhd2FibGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJXZWJLaXRUaHJlYWQ6OnNldE5lZWRzQ29tbWl0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
V2ViS2l0VGhyZWFkOjpub3RpZnlBbmltYXRpb25TdGFydGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyV2ViS2l0VGhyZWFkOjpjb21taXRPbldlYktpdFRocmVhZCk6CisgICAgICAgIChXZWJD
b3JlOjpMYXllcldlYktpdFRocmVhZDo6c3RhcnRBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyV2ViS2l0VGhyZWFkOjp1cGRhdGVUZXh0dXJlQ29udGVudHMpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJXZWJLaXRUaHJlYWQ6OmNvbW1pdE9uQ29tcG9zaXRpbmdUaHJlYWQpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJXZWJLaXRUaHJlYWQ6OmFkZFN1YmxheWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyV2ViS2l0VGhyZWFkOjppbnNlcnRTdWJsYXllcik6CisgICAgICAg
IChXZWJDb3JlOjpMYXllcldlYktpdFRocmVhZDo6cmVtb3ZlRnJvbVN1cGVybGF5ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJXZWJLaXRUaHJlYWQ6OnJlbW92ZVN1YmxheWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyV2ViS2l0VGhyZWFkOjpyZXBsYWNlU3VibGF5ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJXZWJLaXRUaHJlYWQ6OmluZGV4T2ZTdWJsYXllcik6CisgICAgICAg
IChXZWJDb3JlOjpMYXllcldlYktpdFRocmVhZDo6c2V0Qm91bmRzKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyV2ViS2l0VGhyZWFkOjpzZXRGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
cldlYktpdFRocmVhZDo6cm9vdExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyV2ViS2l0
VGhyZWFkOjpyZW1vdmVBbGxTdWJsYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJXZWJL
aXRUaHJlYWQ6OnNldFN1YmxheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllcldlYktpdFRo
cmVhZDo6c3VwZXJsYXllcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllcldlYktpdFRocmVhZDo6
c2V0TmVlZHNEaXNwbGF5SW5SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyV2ViS2l0VGhy
ZWFkOjpzZXROZWVkc0Rpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJXZWJLaXRUaHJl
YWQ6OnVwZGF0ZUxheWVySGllcmFyY2h5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyV2ViS2l0
VGhyZWFkOjpzZXRJc01hc2spOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVy
cnkvTGF5ZXJXZWJLaXRUaHJlYWQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKExheWVyV2ViS2l0VGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyV2ViS2l0VGhy
ZWFkOjpzZXRBbmNob3JQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllcldlYktpdFRocmVh
ZDo6c2V0QW5jaG9yUG9pbnRaKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyV2ViS2l0VGhyZWFk
OjpzZXRCYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJXZWJLaXRUaHJl
YWQ6OnNldEJvcmRlckNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyV2ViS2l0VGhyZWFk
OjpzZXRCb3JkZXJXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllcldlYktpdFRocmVhZDo6
c2V0RG91YmxlU2lkZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJXZWJLaXRUaHJlYWQ6OnNl
dE1hc2tzVG9Cb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJXZWJLaXRUaHJlYWQ6OnNl
dE1hc2tMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllcldlYktpdFRocmVhZDo6bWFza0xh
eWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyV2ViS2l0VGhyZWFkOjpzZXRSZXBsaWNhTGF5
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJXZWJLaXRUaHJlYWQ6OnJlcGxpY2FMYXllcik6
CisgICAgICAgIChXZWJDb3JlOjpMYXllcldlYktpdFRocmVhZDo6c2V0TmVlZHNEaXNwbGF5T25C
b3VuZHNDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJXZWJLaXRUaHJlYWQ6OnNldE9w
YWNpdHkpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJXZWJLaXRUaHJlYWQ6OnNldE9wYXF1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpMYXllcldlYktpdFRocmVhZDo6c2V0UG9zaXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJXZWJLaXRUaHJlYWQ6OmdldFN1YmxheWVycyk6CisgICAgICAg
IChXZWJDb3JlOjpMYXllcldlYktpdFRocmVhZDo6c2V0U3VibGF5ZXJUcmFuc2Zvcm0pOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJXZWJLaXRUaHJlYWQ6OnNldFRyYW5zZm9ybSk6CisgICAgICAg
IChXZWJDb3JlOjpMYXllcldlYktpdFRocmVhZDo6c2V0UHJlc2VydmVzM0QpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJXZWJLaXRUaHJlYWQ6OnNldEZpeGVkUG9zaXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJXZWJLaXRUaHJlYWQ6OnNldEhhc0ZpeGVkQ29udGFpbmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyV2ViS2l0VGhyZWFkOjpzZXRIYXNGaXhlZEFuY2VzdG9ySW5ET01U
cmVlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyV2ViS2l0VGhyZWFkOjpjb250ZW50cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllcldlYktpdFRocmVhZDo6c2V0T3duZXIpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJXZWJLaXRUaHJlYWQ6OmRyYXdzQ29udGVudCk6CisgICAgICAgIChXZWJD
b3JlOjpMYXllcldlYktpdFRocmVhZDo6bGF5ZXJDb21wb3NpdGluZ1RocmVhZCk6CisgICAgICAg
IChXZWJDb3JlOjpMYXllcldlYktpdFRocmVhZDo6c2V0QWJzb2x1dGVPZmZzZXQpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJXZWJLaXRUaHJlYWQ6OmNvbnRlbnRzU2NhbGUpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJXZWJLaXRUaHJlYWQ6OnNldFJ1bm5pbmdBbmltYXRpb25zKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyV2ViS2l0VGhyZWFkOjpzZXRTdXNwZW5kZWRBbmltYXRpb25zKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyV2ViS2l0VGhyZWFkOjpzZXROZWVkc1RleHR1cmUpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJXZWJLaXRUaHJlYWQ6OnNldExheWVyUHJvZ3JhbVNoYWRl
cik6CisgICAgICAgIChXZWJDb3JlOjpMYXllcldlYktpdFRocmVhZDo6aXNEcmF3YWJsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllcldlYktpdFRocmVhZDo6Ym91bmRzQ2hhbmdlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllcldlYktpdFRocmVhZDo6c2V0U3VwZXJsYXllcik6CisgICAgICAg
IChXZWJDb3JlOjpMYXllcldlYktpdFRocmVhZDo6bnVtU3VibGF5ZXJzKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L1BsdWdpbkxheWVyV2ViS2l0VGhyZWFkLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkxheWVy
V2ViS2l0VGhyZWFkOjpQbHVnaW5MYXllcldlYktpdFRocmVhZCk6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5MYXllcldlYktpdFRocmVhZDo6flBsdWdpbkxheWVyV2ViS2l0VGhyZWFkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpbkxheWVyV2ViS2l0VGhyZWFkOjpzZXRQbHVnaW5WaWV3KToK
KyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkxheWVyV2ViS2l0VGhyZWFkOjpzZXRIb2xlUHVuY2hS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkxheWVyV2ViS2l0VGhyZWFkOjpzZXROZWVk
c0Rpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luTGF5ZXJXZWJLaXRUaHJlYWQ6OnVw
ZGF0ZVRleHR1cmVDb250ZW50c0lmTmVlZGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9ibGFja2JlcnJ5L1BsdWdpbkxheWVyV2ViS2l0VGhyZWFkLmg6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChQbHVnaW5MYXllcldlYktpdFRocmVhZCk6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5MYXllcldlYktpdFRocmVhZDo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L1ZpZGVvTGF5ZXJXZWJLaXRUaHJlYWQuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9MYXllcldlYktp
dFRocmVhZDo6VmlkZW9MYXllcldlYktpdFRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpWaWRl
b0xheWVyV2ViS2l0VGhyZWFkOjp+VmlkZW9MYXllcldlYktpdFRocmVhZCk6CisgICAgICAgIChX
ZWJDb3JlOjpWaWRlb0xheWVyV2ViS2l0VGhyZWFkOjpzZXRNZWRpYVBsYXllcik6CisgICAgICAg
IChXZWJDb3JlOjpWaWRlb0xheWVyV2ViS2l0VGhyZWFkOjpzZXRIb2xlUHVuY2hSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJXZWJLaXRUaHJlYWQ6OnNldE5lZWRzRGlzcGxheSk6
CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0xheWVyV2ViS2l0VGhyZWFkOjpib3VuZHNDaGFuZ2Vk
KToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJXZWJLaXRUaHJlYWQ6OnVwZGF0ZVRleHR1
cmVDb250ZW50c0lmTmVlZGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2Jl
cnJ5L1ZpZGVvTGF5ZXJXZWJLaXRUaHJlYWQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFZpZGVvTGF5ZXJXZWJLaXRUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Vmlk
ZW9MYXllcldlYktpdFRocmVhZDo6Y3JlYXRlKToKKwogMjAxMi0wMi0yOCAgQXJrbyBTYWhhICA8
YXJrb0Btb3Rvcm9sYS5jb20+CiAKICAgICAgICAgTWljcm9kYXRhOiBJbXBsZW1lbnQgSFRNTFBy
b3BlcnRpZXNDb2xsZWN0aW9uIGNvbGxlY3Rpb24ubmFtZWRJdGVtKCkuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0NhbnZhc0xheWVyV2Vi
S2l0VGhyZWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVy
cnkvQ2FudmFzTGF5ZXJXZWJLaXRUaHJlYWQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRkMjAzMjY3OTBiNTFl
MzU2YmQ1MzBhNzhmZDhiOTI5NmRhNTk4OTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0NhbnZhc0xheWVyV2ViS2l0VGhyZWFk
LmNwcApAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSwg
MjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjEx
MC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2FudmFz
TGF5ZXJXZWJLaXRUaHJlYWQuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykg
JiYgRU5BQkxFKFNLSUFfR1BVX0NBTlZBUykKKworI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50
LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgorCisjaW5jbHVkZSA8QmxhY2tC
ZXJyeVBsYXRmb3JtR3JhcGhpY3MuaD4KKyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKyNpbmNsdWRl
IDxHckdMVGV4dHVyZS5oPgorI2luY2x1ZGUgPFNrR3B1RGV2aWNlLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworQ2FudmFzTGF5ZXJXZWJLaXRUaHJlYWQ6OkNhbnZhc0xheWVyV2ViS2l0VGhy
ZWFkKEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMpCisgICAgOiBMYXllcldlYktpdFRocmVhZChM
YXllciwgMCkKK3sKKyAgICBzZXRDYW52YXMoY2FudmFzKTsKK30KKworQ2FudmFzTGF5ZXJXZWJL
aXRUaHJlYWQ6On5DYW52YXNMYXllcldlYktpdFRocmVhZCgpCit7CisgICAgaWYgKG1fdGV4SUQp
IHsKKyAgICAgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjptYWtlU2hhcmVkUmVz
b3VyY2VDb250ZXh0Q3VycmVudChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkdMRVMy
KTsKKyAgICAgICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmbV90ZXhJRCk7CisgICAgfQorfQorCit2
b2lkIENhbnZhc0xheWVyV2ViS2l0VGhyZWFkOjpzZXRDYW52YXMoSFRNTENhbnZhc0VsZW1lbnQq
IGNhbnZhcykKK3sKKyAgICBtX2NhbnZhcyA9IGNhbnZhczsKKyAgICBzZXROZWVkc1RleHR1cmUo
aXNEcmF3YWJsZSgpICYmIGNhbnZhcyk7CisgICAgc2V0TGF5ZXJQcm9ncmFtU2hhZGVyKExheWVy
UHJvZ3JhbVNoYWRlclJHQkEpOworICAgIHNldE5lZWRzRGlzcGxheSgpOworfQorCit2b2lkIENh
bnZhc0xheWVyV2ViS2l0VGhyZWFkOjpzZXROZWVkc0Rpc3BsYXkoKQoreworICAgIG1fbmVlZHNE
aXNwbGF5ID0gdHJ1ZTsKKyAgICBzZXROZWVkc0NvbW1pdCgpOworfQorCit2b2lkIENhbnZhc0xh
eWVyV2ViS2l0VGhyZWFkOjp1cGRhdGVUZXh0dXJlQ29udGVudHNJZk5lZWRlZCgpCit7CisgICAg
aWYgKCFtX25lZWRzRGlzcGxheSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9uZWVkc0Rpc3Bs
YXkgPSBmYWxzZTsKKworICAgIGlmICghbV9jYW52YXMgfHwgIW1fY2FudmFzLT5kcmF3aW5nQ29u
dGV4dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBTa0dwdURldmljZSogZ3B1RGV2aWNlID0g
c3RhdGljX2Nhc3Q8U2tHcHVEZXZpY2UqPihtX2NhbnZhcy0+ZHJhd2luZ0NvbnRleHQoKS0+cGxh
dGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5nZXREZXZpY2UoKSk7CisgICAgZ3B1RGV2aWNlLT5t
YWtlUmVuZGVyVGFyZ2V0Q3VycmVudCgpOworICAgIC8vIFdlIGtub3cgdGhpcyBpcyBhIEdyR0xU
ZXh0dXJlCisgICAgaWYgKEdyR0xUZXh0dXJlKiBkZXZpY2VUZXh0dXJlID0gKEdyR0xUZXh0dXJl
KilncHVEZXZpY2UtPmFjY2Vzc1RleHR1cmUoKSkgeworICAgICAgICBtX3RleFdpZHRoID0gZGV2
aWNlVGV4dHVyZS0+YWxsb2NXaWR0aCgpOworICAgICAgICBtX3RleEhlaWdodCA9IGRldmljZVRl
eHR1cmUtPmFsbG9jSGVpZ2h0KCk7CisgICAgfQorCisgICAgR0xpbnQgcHJldmlvdXNUZXh0dXJl
OworICAgIGdsR2V0SW50ZWdlcnYoR0xfVEVYVFVSRV9CSU5ESU5HXzJELCAmcHJldmlvdXNUZXh0
dXJlKTsKKworICAgIGlmICghbV90ZXhJRCkgeworICAgICAgICBnbEdlblRleHR1cmVzKDEsICZt
X3RleElEKTsKKyAgICAgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleElEKTsK
KyAgICAgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJ
TFRFUiwgR0xfTElORUFSKTsKKyAgICAgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQs
IEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICAgICAgZ2xUZXhQYXJhbWV0
ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsK
KyAgICAgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9U
LCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICAgICAgZ2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQs
IDAsIEdMX1JHQkEsIG1fY2FudmFzLT53aWR0aCgpLCBtX2NhbnZhcy0+aGVpZ2h0KCksIDAsIEdM
X1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDApOworCisgICAgICAgIGNyZWF0ZUZyb250QnVmZmVy
TG9jaygpOworICAgIH0KKworICAgIHB0aHJlYWRfbXV0ZXhfbG9jayhtX2Zyb250QnVmZmVyTG9j
ayk7CisgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleElEKTsKKyAgICBnbENv
cHlUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIEdMX1JHQkEsIDAsIDAsIG1fdGV4V2lkdGgs
IG1fdGV4SGVpZ2h0LCAwKTsKKyAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHByZXZp
b3VzVGV4dHVyZSk7CisgICAgcHRocmVhZF9tdXRleF91bmxvY2sobV9mcm9udEJ1ZmZlckxvY2sp
OworfQorCit9CisKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIEVO
QUJMRShTS0lBX0dQVV9DQU5WQVMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ibGFja2JlcnJ5L0NhbnZhc0xheWVyV2ViS2l0VGhyZWFkLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0NhbnZhc0xheWVyV2ViS2l0VGhy
ZWFkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uOWE3MzFjZTgyNDBkMzdlMDJiYTQwYzBhOTY4YTE5ZTA4YjZiMThh
NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Js
YWNrYmVycnkvQ2FudmFzTGF5ZXJXZWJLaXRUaHJlYWQuaApAQCAtMCwwICsxLDU1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExLCAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1p
dGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhl
IEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpZm5kZWYg
Q2FudmFzTGF5ZXJXZWJLaXRUaHJlYWRfaAorI2RlZmluZSBDYW52YXNMYXllcldlYktpdFRocmVh
ZF9oCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIEVOQUJMRShTS0lBX0dQ
VV9DQU5WQVMpCisKKyNpbmNsdWRlICJMYXllcldlYktpdFRocmVhZC5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEhUTUxDYW52YXNFbGVtZW50OworCitjbGFzcyBDYW52YXNMYXll
cldlYktpdFRocmVhZCA6IHB1YmxpYyBMYXllcldlYktpdFRocmVhZCB7CitwdWJsaWM6CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8Q2FudmFzTGF5ZXJXZWJLaXRUaHJlYWQ+IGNyZWF0ZShIVE1MQ2Fu
dmFzRWxlbWVudCogY2FudmFzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBD
YW52YXNMYXllcldlYktpdFRocmVhZChjYW52YXMpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5D
YW52YXNMYXllcldlYktpdFRocmVhZCgpOworCisgICAgdm9pZCBzZXRDYW52YXMoSFRNTENhbnZh
c0VsZW1lbnQqKTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKTsKKworcHJv
dGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUZXh0dXJlQ29udGVudHNJZk5lZWRlZCgp
OworCitwcml2YXRlOgorICAgIENhbnZhc0xheWVyV2ViS2l0VGhyZWFkKEhUTUxDYW52YXNFbGVt
ZW50Kik7CisgICAgYm9vbCBtX25lZWRzRGlzcGxheTsKK307CisKK30KKworI2VuZGlmIC8vIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgRU5BQkxFKFNLSUFfR1BVX0NBTlZBUykKKwor
I2VuZGlmIC8vIENhbnZhc0xheWVyV2ViS2l0VGhyZWFkX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJEYXRhLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyRGF0YS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjQzNzc0MWQ4NjFkMDQ5ZGFkMjNlNTE1OGMzMzkwZmVkZWIzMTc3MDkKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVy
RGF0YS5oCkBAIC0wLDAgKzEsMjMxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDEx
LCAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaWZu
ZGVmIExheWVyRGF0YV9oCisjZGVmaW5lIExheWVyRGF0YV9oCisKKyNpbmNsdWRlICJDb2xvci5o
IgorI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNs
dWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiTGF5ZXJBbmltYXRpb24uaCIKKyNpbmNsdWRlICJQ
bGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBIVE1MQ2FudmFzRWxlbWVudDsKK2NsYXNz
IFBsdWdpblZpZXc7CisjaWYgRU5BQkxFKFZJREVPKQorY2xhc3MgTWVkaWFQbGF5ZXI7CisjZW5k
aWYKKworY2xhc3MgTGF5ZXJEYXRhIHsKK3B1YmxpYzoKKyAgICBlbnVtIExheWVyVHlwZSB7IExh
eWVyLCBUcmFuc2Zvcm1MYXllciwgV2ViR0xMYXllciB9OworICAgIGVudW0gRmlsdGVyVHlwZSB7
IExpbmVhciwgTmVhcmVzdCwgVHJpbGluZWFyLCBMYW5jem9zIH07CisgICAgZW51bSBMYXllclBy
b2dyYW1TaGFkZXIgeyBMYXllclByb2dyYW1TaGFkZXJSR0JBID0gMCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIExheWVyUHJvZ3JhbVNoYWRlckJHUkEsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBOdW1iZXJPZkxheWVyUHJvZ3JhbVNoYWRlcnMgfTsKKworICAgIExheWVy
RGF0YShMYXllclR5cGUgdHlwZSkKKyAgICAgICAgOiBtX2xheWVyVHlwZSh0eXBlKQorICAgICAg
ICAsIG1fYW5jaG9yUG9pbnQoMC41LCAwLjUpCisgICAgICAgICwgbV9iYWNrZ3JvdW5kQ29sb3Io
MCwgMCwgMCwgMCkKKyAgICAgICAgLCBtX2JvcmRlckNvbG9yKDAsIDAsIDAsIDApCisgICAgICAg
ICwgbV9vcGFjaXR5KDEuMCkKKyAgICAgICAgLCBtX2FuY2hvclBvaW50WigwLjApCisgICAgICAg
ICwgbV9ib3JkZXJXaWR0aCgwLjApCisgICAgICAgICwgbV9kb3VibGVTaWRlZCh0cnVlKQorICAg
ICAgICAsIG1fbWFza3NUb0JvdW5kcyhmYWxzZSkKKyAgICAgICAgLCBtX29wYXF1ZSh0cnVlKQor
ICAgICAgICAsIG1fcHJlc2VydmVzM0QoZmFsc2UpCisgICAgICAgICwgbV9uZWVkc0Rpc3BsYXlP
bkJvdW5kc0NoYW5nZShmYWxzZSkKKyAgICAgICAgLCBtX2xheWVyUHJvZ3JhbVNoYWRlcihMYXll
clByb2dyYW1TaGFkZXJCR1JBKQorICAgICAgICAsIG1fbmVlZHNUZXh0dXJlKGZhbHNlKQorICAg
ICAgICAsIG1faXNGaXhlZFBvc2l0aW9uKGZhbHNlKQorICAgICAgICAsIG1faGFzRml4ZWRDb250
YWluZXIoZmFsc2UpCisgICAgICAgICwgbV9oYXNGaXhlZEFuY2VzdG9ySW5ET01UcmVlKGZhbHNl
KQorICAgICAgICAsIG1fcGx1Z2luVmlldygwKQorI2lmIEVOQUJMRShWSURFTykKKyAgICAgICAg
LCBtX21lZGlhUGxheWVyKDApCisjZW5kaWYKKyAgICAgICAgLCBtX3RleElEKDApCisgICAgICAg
ICwgbV90ZXhXaWR0aCgwKQorICAgICAgICAsIG1fdGV4SGVpZ2h0KDApCisgICAgICAgICwgbV9j
YW52YXMoMCkKKyAgICAgICAgLCBtX2Zyb250QnVmZmVyTG9jaygwKQorICAgICAgICAsIG1fc3Vz
cGVuZFRpbWUoMCkKKyAgICAgICAgLCBtX2lzVmlzaWJsZSh0cnVlKQorICAgIHsKKyAgICB9CisK
KyAgICB2aXJ0dWFsIH5MYXllckRhdGEoKQorICAgIHsKKyAgICB9CisKKyAgICBGbG9hdFBvaW50
IGFuY2hvclBvaW50KCkgY29uc3QgeyByZXR1cm4gbV9hbmNob3JQb2ludDsgfQorCisgICAgZmxv
YXQgYW5jaG9yUG9pbnRaKCkgY29uc3QgeyByZXR1cm4gbV9hbmNob3JQb2ludFo7IH0KKworICAg
IENvbG9yIGJhY2tncm91bmRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2dyb3VuZENvbG9y
OyB9CisKKyAgICBDb2xvciBib3JkZXJDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fYm9yZGVyQ29s
b3I7IH0KKworICAgIGZsb2F0IGJvcmRlcldpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9ib3JkZXJX
aWR0aDsgfQorCisgICAgSW50U2l6ZSBib3VuZHMoKSBjb25zdCB7IHJldHVybiBtX2JvdW5kczsg
fQorCisgICAgYm9vbCBkb3VibGVTaWRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZG91YmxlU2lkZWQ7
IH0KKworICAgIEZsb2F0UmVjdCBmcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWU7IH0KKwor
ICAgIGJvb2wgbWFza3NUb0JvdW5kcygpIGNvbnN0IHsgcmV0dXJuIG1fbWFza3NUb0JvdW5kczsg
fQorCisgICAgZmxvYXQgb3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhY2l0eTsgfQorCisg
ICAgYm9vbCBvcGFxdWUoKSBjb25zdCB7IHJldHVybiBtX29wYXF1ZTsgfQorCisgICAgRmxvYXRQ
b2ludCBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KKworICAgIC8vIFRo
aXMgaXMgY3VycmVudGx5IG9ubHkgdXNlZCBmb3IgcGVyc3BlY3RpdmUgdHJhbnNmb3JtLCBzZWUg
R3JhcGhpY3NMYXllcjo6c2V0Q2hpbGRyZW5UcmFuc2Zvcm0oKQorICAgIGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiBzdWJsYXllclRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fc3VibGF5
ZXJUcmFuc2Zvcm07IH0KKworICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zv
cm0oKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybTsgfQorCisgICAgYm9vbCBwcmVzZXJ2ZXMz
RCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJlc2VydmVzM0Q7IH0KKworICAgIHVuc2lnbmVkIGludCBn
ZXRUZXh0dXJlSUQoKSBjb25zdCB7IHJldHVybiBtX3RleElEOyB9CisgICAgdm9pZCBzZXRUZXh0
dXJlSUQodW5zaWduZWQgaW50IHZhbHVlKSB7IG1fdGV4SUQgPSB2YWx1ZTsgfQorCisgICAgYm9v
bCBuZWVkc1RleHR1cmUoKSBjb25zdCB7IHJldHVybiBtX2xheWVyVHlwZSA9PSBXZWJHTExheWVy
ID8gdHJ1ZSA6IG1fbmVlZHNUZXh0dXJlOyB9CisKKyAgICBMYXllclByb2dyYW1TaGFkZXIgbGF5
ZXJQcm9ncmFtU2hhZGVyKCkgY29uc3QgeyByZXR1cm4gbV9sYXllclByb2dyYW1TaGFkZXI7IH0K
KworICAgIGJvb2wgaXNGaXhlZFBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9pc0ZpeGVkUG9z
aXRpb247IH0KKyAgICBib29sIGhhc0ZpeGVkQ29udGFpbmVyKCkgY29uc3QgeyByZXR1cm4gbV9o
YXNGaXhlZENvbnRhaW5lcjsgfQorICAgIGJvb2wgaGFzRml4ZWRBbmNlc3RvckluRE9NVHJlZSgp
IGNvbnN0IHsgcmV0dXJuIG1faGFzRml4ZWRBbmNlc3RvckluRE9NVHJlZTsgfQorCisgICAgUGx1
Z2luVmlldyogcGx1Z2luVmlldygpIGNvbnN0IHsgcmV0dXJuIG1fcGx1Z2luVmlldzsgfQorCisg
ICAgSW50UmVjdCBob2xlUHVuY2hSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9ob2xlUHVuY2hSZWN0
OyB9CisgICAgYm9vbCBoYXNIb2xlUHVuY2hSZWN0KCkgY29uc3QgeyByZXR1cm4gIW1faG9sZVB1
bmNoUmVjdC5pc0VtcHR5KCk7IH0KKworI2lmIEVOQUJMRShWSURFTykKKyAgICBNZWRpYVBsYXll
ciogbWVkaWFQbGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX21lZGlhUGxheWVyOyB9CisjZW5kaWYK
KworICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMoKSBjb25zdCB7IHJldHVybiBtX2NhbnZh
czsgfQorCisgICAgdm9pZCByZXBsaWNhdGUoTGF5ZXJEYXRhICp0bykgY29uc3QgeyAqdG8gPSAq
dGhpczsgfQorCisgICAgTGF5ZXJUeXBlIGxheWVyVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5
ZXJUeXBlOyB9CisKKyAgICBib29sIGluY2x1ZGVWaXNpYmlsaXR5KCkKKyAgICB7CisgICAgICAg
IGlmIChwbHVnaW5WaWV3KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworI2lmIEVOQUJM
RShWSURFTykKKyAgICAgICAgaWYgKG1lZGlhUGxheWVyKCkpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyNlbmRpZgorCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKK3Byb3RlY3Rl
ZDoKKyAgICBMYXllclR5cGUgbV9sYXllclR5cGU7CisKKyAgICBJbnRTaXplIG1fYm91bmRzOwor
ICAgIEZsb2F0UG9pbnQgbV9wb3NpdGlvbjsKKyAgICBGbG9hdFBvaW50IG1fYW5jaG9yUG9pbnQ7
CisgICAgQ29sb3IgbV9iYWNrZ3JvdW5kQ29sb3I7CisgICAgQ29sb3IgbV9ib3JkZXJDb2xvcjsK
KworICAgIEZsb2F0UmVjdCBtX2ZyYW1lOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fdHJh
bnNmb3JtOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fc3VibGF5ZXJUcmFuc2Zvcm07CisK
KyAgICBmbG9hdCBtX29wYWNpdHk7CisgICAgZmxvYXQgbV9hbmNob3JQb2ludFo7CisgICAgZmxv
YXQgbV9ib3JkZXJXaWR0aDsKKworICAgIGJvb2wgbV9kb3VibGVTaWRlZDsKKyAgICBib29sIG1f
bWFza3NUb0JvdW5kczsKKyAgICBib29sIG1fb3BhcXVlOworICAgIGJvb2wgbV9wcmVzZXJ2ZXMz
RDsKKyAgICBib29sIG1fbmVlZHNEaXNwbGF5T25Cb3VuZHNDaGFuZ2U7CisKKyAgICBMYXllclBy
b2dyYW1TaGFkZXIgbV9sYXllclByb2dyYW1TaGFkZXI7CisgICAgYm9vbCBtX25lZWRzVGV4dHVy
ZTsKKyAgICBib29sIG1faXNGaXhlZFBvc2l0aW9uOworICAgIGJvb2wgbV9oYXNGaXhlZENvbnRh
aW5lcjsKKyAgICBib29sIG1faGFzRml4ZWRBbmNlc3RvckluRE9NVHJlZTsKKworICAgIFBsdWdp
blZpZXcqIG1fcGx1Z2luVmlldzsKKyNpZiBFTkFCTEUoVklERU8pCisgICAgTWVkaWFQbGF5ZXIq
IG1fbWVkaWFQbGF5ZXI7CisgICAgSW50UmVjdCBtX2hvbGVQdW5jaENsaXBSZWN0OworI2VuZGlm
CisgICAgSW50UmVjdCBtX2hvbGVQdW5jaFJlY3Q7CisKKyAgICB1bnNpZ25lZCBpbnQgbV90ZXhJ
RDsKKyAgICB1bnNpZ25lZCBpbnQgbV90ZXhXaWR0aDsKKyAgICB1bnNpZ25lZCBpbnQgbV90ZXhI
ZWlnaHQ7CisKKyAgICBIVE1MQ2FudmFzRWxlbWVudCogbV9jYW52YXM7CisKKyAgICBwdGhyZWFk
X211dGV4X3QqIG1fZnJvbnRCdWZmZXJMb2NrOworCisgICAgVmVjdG9yPFJlZlB0cjxMYXllckFu
aW1hdGlvbj4gPiBtX3J1bm5pbmdBbmltYXRpb25zOworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJB
bmltYXRpb24+ID4gbV9zdXNwZW5kZWRBbmltYXRpb25zOworICAgIGRvdWJsZSBtX3N1c3BlbmRU
aW1lOworCisgICAgLy8gVGhlIGZvbGxvd2luZyBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgbWVkaWEg
KHZpZGVvKSBhbmQgcGx1Z2luIGxheWVycy4KKyAgICBib29sIG1faXNWaXNpYmxlOworCisgICAg
Ly8gQ0FVVElPTjogYWxsIHRoZSBkYXRhIG1lbWJlcnMgYXJlIGNvcGllZCBmcm9tIG9uZSBpbnN0
YW5jZSB0byBhbm90aGVyCisgICAgLy8gaS5lLiBmcm9tIG9uZSB0aHJlYWQgdG8gYW5vdGhlciBp
biB0aGUgcmVwbGljYXRlIG1ldGhvZC4KKyAgICAvLyBCZXdhcmUgb2YgYWRkaW5nIGFueSBtZW1i
ZXIgZGF0YSBlLmcuIG9mIHR5cGUgU3RyaW5nIHdob3NlIGRlZmF1bHQKKyAgICAvLyBhc3NpZ25t
ZW50IG9wZXJhdG9yIGRvZXNuJ3QgYmVoYXZlIHByb3Blcmx5IGlmIHRoZSB0d28gU3RyaW5nIGlu
c3RhbmNlcworICAgIC8vIGFyZSBvd25lZCBieSBkaWZmZXJlbnQgdGhyZWFkcy4KK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKKworI2VuZGlmIC8vIExheWVyRGF0YV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyV2ViS2l0VGhyZWFkLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJXZWJLaXRUaHJl
YWQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjc3MDI0OTU2MjYyNTY2MTE5YmM5ZDE1Y2JiNTk3ODZlYmFmMmRj
NjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9i
bGFja2JlcnJ5L0xheWVyV2ViS2l0VGhyZWFkLmNwcApAQCAtMCwwICsxLDQ2MSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSwgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRl
ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIkxheWVyV2ViS2l0VGhyZWFkLmgiCisKKyNp
bmNsdWRlICJJbnN0cnVtZW50ZWRQbGF0Zm9ybUNhbnZhcy5oIgorI2luY2x1ZGUgIkxheWVyQ29t
cG9zaXRpbmdUaHJlYWQuaCIKKyNpbmNsdWRlICJMYXllck1lc3NhZ2UuaCIKKyNpbmNsdWRlICJQ
bGF0Zm9ybUNvbnRleHRTa2lhLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCisj
aW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKworI2luY2x1ZGUgPEJsYWNrQmVycnlQ
bGF0Zm9ybUdyYXBoaWNzLmg+CisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworUGFzc1JlZlB0cjxMYXll
cldlYktpdFRocmVhZD4gTGF5ZXJXZWJLaXRUaHJlYWQ6OmNyZWF0ZShMYXllclR5cGUgdHlwZSwg
R3JhcGhpY3NMYXllckJsYWNrQmVycnkqIG93bmVyKQoreworICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgTGF5ZXJXZWJLaXRUaHJlYWQodHlwZSwgb3duZXIpKTsKK30KKworTGF5ZXJXZWJLaXRUaHJl
YWQ6OkxheWVyV2ViS2l0VGhyZWFkKExheWVyVHlwZSB0eXBlLCBHcmFwaGljc0xheWVyQmxhY2tC
ZXJyeSogb3duZXIpCisgICAgOiBMYXllckRhdGEodHlwZSkKKyAgICAsIG1fb3duZXIob3duZXIp
CisgICAgLCBtX3N1cGVybGF5ZXIoMCkKKyAgICAsIG1fY29udGVudHMoMCkKKyAgICAsIG1faXNE
cmF3YWJsZShmYWxzZSkKKyAgICAsIG1faXNNYXNrKGZhbHNlKQorICAgICwgbV9zY2FsZSgxLjAp
Cit7CisgICAgbV90aWxlciA9IExheWVyVGlsZXI6OmNyZWF0ZSh0aGlzKTsKKyAgICBtX2xheWVy
Q29tcG9zaXRpbmdUaHJlYWQgPSBMYXllckNvbXBvc2l0aW5nVGhyZWFkOjpjcmVhdGUodHlwZSwg
bV90aWxlcik7Cit9CisKK0xheWVyV2ViS2l0VGhyZWFkOjp+TGF5ZXJXZWJLaXRUaHJlYWQoKQor
eworICAgIG1fbGF5ZXJDb21wb3NpdGluZ1RocmVhZC0+Y2xlYXJBbmltYXRpb25zKCk7CisKKyAg
ICBpZiAobV9mcm9udEJ1ZmZlckxvY2spCisgICAgICAgIHB0aHJlYWRfbXV0ZXhfZGVzdHJveSht
X2Zyb250QnVmZmVyTG9jayk7CisKKyAgICBtX3RpbGVyLT5sYXllcldlYktpdFRocmVhZERlc3Ry
b3llZCgpOworCisgICAgLy8gT3VyIHN1cGVybGF5ZXIgc2hvdWxkIGJlIGhvbGRpbmcgYSByZWZl
cmVuY2UgdG8gdXMgc28gdGhlcmUgc2hvdWxkIGJlIG5vCisgICAgLy8gd2F5IGZvciB1cyB0byBi
ZSBkZXN0cm95ZWQgd2hpbGUgd2Ugc3RpbGwgaGF2ZSBhIHN1cGVybGF5ZXIuCisgICAgQVNTRVJU
KCFzdXBlcmxheWVyKCkpOworCisgICAgLy8gUmVtb3ZlIHRoZSBzdXBlcmxheWVyIHJlZmVyZW5j
ZSBmcm9tIGFsbCBzdWJsYXllcnMuCisgICAgcmVtb3ZlQWxsU3VibGF5ZXJzKCk7Cit9CisKK1Nr
Qml0bWFwIExheWVyV2ViS2l0VGhyZWFkOjpwYWludENvbnRlbnRzKGNvbnN0IEludFJlY3QmIGNv
bnRlbnRzUmVjdCwgZG91YmxlIHNjYWxlLCBib29sKiBpc1NvbGlkQ29sb3IsIENvbG9yKiBjb2xv
cikKK3sKKyAgICAvLyBEb24ndCB0cnkgdG8gYWxsb2NhdGUgaW1hZ2UgZGF0YSBiaWdnZXIgdGhh
biB0aGlzLiBUaGlzIHNob3VsZCBiZSBiaWcKKyAgICAvLyBlbm91Z2ggdG8gYWNjb21vZGF0ZSBh
IGh1Z2UgaVNjcm9sbCB1c2UgY2FzZS4KKyAgICAvLyBGSVhNRTogVGhpcyBpcyBhIGhhY2sgdG8g
d29yayBhcm91bmQgYSBjcmFzaCBidWcgb24gbWFwcy5iaW5nLmNvbSB3aGVyZQorICAgIC8vIGEg
KHZpc3VhbGx5IGVtcHR5KSBsYXllciBiZWNvbWVzIHRvbyBiaWcuCisgICAgc3RhdGljIGNvbnN0
IGludCBtYXhpbXVtQml0bWFwU2l6ZUluQnl0ZXMgPSA0MCAqIDEwMjQgKiAxMDI0OworICAgIHN0
YXRpYyBjb25zdCBpbnQgYnl0ZXNQZXJQaXhlbCA9IDQ7CisKKyAgICBpZiAoaXNTb2xpZENvbG9y
KQorICAgICAgICAqaXNTb2xpZENvbG9yID0gZmFsc2U7CisKKyAgICBpZiAoY29udGVudHNSZWN0
LndpZHRoKCkgKiBjb250ZW50c1JlY3QuaGVpZ2h0KCkgKiBieXRlc1BlclBpeGVsID4gbWF4aW11
bUJpdG1hcFNpemVJbkJ5dGVzKQorICAgICAgICByZXR1cm4gU2tCaXRtYXAoKTsKKworICAgIFNr
Qml0bWFwIGJpdG1hcDsKKworICAgIC8vIEtlZXAgdGhlIGNhbnZhcyBhbGl2ZSB1bnRpbCB3ZSdy
ZSBkb25lIGV4dHJhY3RpbmcgaXRzIHBpeGVscworICAgIE93blB0cjxJbnN0cnVtZW50ZWRQbGF0
Zm9ybUNhbnZhcz4gY2FudmFzOworCisgICAgaWYgKGRyYXdzQ29udGVudCgpKSB7IC8vIExheWVy
IGNvbnRlbnRzIG11c3QgYmUgZHJhd24gaW50byBhIGNhbnZhcy4KKyAgICAgICAgSW50UmVjdCB1
bnRyYW5zZm9ybWVkQ29udGVudHNSZWN0ID0gY29udGVudHNSZWN0OworCisgICAgICAgIGNhbnZh
cyA9IGFkb3B0UHRyKG5ldyBJbnN0cnVtZW50ZWRQbGF0Zm9ybUNhbnZhcyhjb250ZW50c1JlY3Qu
d2lkdGgoKSwgY29udGVudHNSZWN0LmhlaWdodCgpLCBmYWxzZSwgMCkpOworICAgICAgICBQbGF0
Zm9ybUNvbnRleHRTa2lhIHNraWFDb250ZXh0KGNhbnZhcy5nZXQoKSk7CisKKyAgICAgICAgR3Jh
cGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dCgmc2tpYUNvbnRleHQpOworICAgICAgICBncmFw
aGljc0NvbnRleHQudHJhbnNsYXRlKC1jb250ZW50c1JlY3QueCgpLCAtY29udGVudHNSZWN0Lnko
KSk7CisKKyAgICAgICAgaWYgKHNjYWxlICE9IDEuMCkgeworICAgICAgICAgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggbWF0cml4OworICAgICAgICAgICAgbWF0cml4LnNjYWxlKDEuMCAvIHNjYWxl
KTsKKyAgICAgICAgICAgIHVudHJhbnNmb3JtZWRDb250ZW50c1JlY3QgPSBtYXRyaXgubWFwUmVj
dChjb250ZW50c1JlY3QpOworCisgICAgICAgICAgICAvLyBXZSBleHRyYWN0IGZyb20gdGhlIGNv
bnRlbnRzUmVjdCBidXQgZHJhdyBhIHNsaWdodGx5IGxhcmdlciByZWdpb24gdGhhbgorICAgICAg
ICAgICAgLy8gd2Ugd2VyZSB0b2xkIHRvLCBpbiBvcmRlciB0byBhdm9pZCBwaXhlbHMgYmVpbmcg
cmVuZGVyZWQgb25seSBwYXJ0aWFsbHkuCisgICAgICAgICAgICBjb25zdCBpbnQgYXRMZWFzdE9u
ZURldmljZVBpeGVsID0gc3RhdGljX2Nhc3Q8aW50PihjZWlsZigxLjAgLyBzY2FsZSkpOworICAg
ICAgICAgICAgdW50cmFuc2Zvcm1lZENvbnRlbnRzUmVjdC5pbmZsYXRlKGF0TGVhc3RPbmVEZXZp
Y2VQaXhlbCk7CisKKyAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zY2FsZShGbG9hdFNpemUo
c2NhbGUsIHNjYWxlKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBSZW5kZXJMYXllckJhY2tp
bmcgZG9lc24ndCBhbHdheXMgY2xpcCwgc28gd2UgbmVlZCB0byBkbyB0aGlzIGJ5IG91cnNlbHZl
cy4KKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LmNsaXAodW50cmFuc2Zvcm1lZENvbnRlbnRzUmVj
dCk7CisgICAgICAgIG1fb3duZXItPnBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKGdyYXBoaWNz
Q29udGV4dCwgdW50cmFuc2Zvcm1lZENvbnRlbnRzUmVjdCk7CisKKyAgICAgICAgYml0bWFwID0g
Y2FudmFzLT5nZXREZXZpY2UoKS0+YWNjZXNzQml0bWFwKGZhbHNlKTsKKyAgICAgICAgaWYgKGlz
U29saWRDb2xvcikgeworICAgICAgICAgICAgKmlzU29saWRDb2xvciA9IGNhbnZhcy0+aXNTb2xp
ZENvbG9yKCk7CisgICAgICAgICAgICBpZiAoY29sb3IpCisgICAgICAgICAgICAgICAgKmNvbG9y
ID0gY2FudmFzLT5zb2xpZENvbG9yKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBBU1NFUlQo
IWJpdG1hcC5pc051bGwoKSk7CisKKyAgICAvLyBGSVhNRTogZG8gd2UgbmVlZCB0byBzdXBwb3J0
IG1vcmUgaW1hZ2UgY29uZmlndXJhdGlvbnM/CisgICAgQVNTRVJUKGJpdG1hcC5jb25maWcoKSA9
PSBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcpOworICAgIGlmIChiaXRtYXAuY29uZmlnKCkg
IT0gU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnKQorICAgICAgICByZXR1cm4gU2tCaXRtYXAo
KTsKKworICAgIHJldHVybiBiaXRtYXA7Cit9CisKK2Jvb2wgTGF5ZXJXZWJLaXRUaHJlYWQ6OmNv
bnRlbnRzVmlzaWJsZShjb25zdCBJbnRSZWN0JiBjb250ZW50c1JlY3QpIGNvbnN0Cit7CisgICAg
aWYgKCFtX293bmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gbV9vd25l
ci0+Y29udGVudHNWaXNpYmxlKGNvbnRlbnRzUmVjdCk7Cit9CisKK3ZvaWQgTGF5ZXJXZWJLaXRU
aHJlYWQ6OmNyZWF0ZUZyb250QnVmZmVyTG9jaygpCit7CisgICAgcHRocmVhZF9tdXRleGF0dHJf
dCBtdXRleEF0dHJpYnV0ZXM7CisgICAgcHRocmVhZF9tdXRleGF0dHJfaW5pdCgmbXV0ZXhBdHRy
aWJ1dGVzKTsKKyAgICBtX2Zyb250QnVmZmVyTG9jayA9IG5ldyBwdGhyZWFkX211dGV4X3Q7Cisg
ICAgcHRocmVhZF9tdXRleF9pbml0KG1fZnJvbnRCdWZmZXJMb2NrLCAmbXV0ZXhBdHRyaWJ1dGVz
KTsKK30KKwordm9pZCBMYXllcldlYktpdFRocmVhZDo6dXBkYXRlVGV4dHVyZUNvbnRlbnRzSWZO
ZWVkZWQoKQoreworICAgIG1fdGlsZXItPnVwZGF0ZVRleHR1cmVDb250ZW50c0lmTmVlZGVkKG1f
aXNNYXNrID8gMS4wIDogY29udGVudHNTY2FsZSgpKTsKK30KKwordm9pZCBMYXllcldlYktpdFRo
cmVhZDo6c2V0Q29udGVudHMoSW1hZ2UqIGNvbnRlbnRzKQoreworICAgIC8vIENoZWNrIGlmIHRo
ZSBpbWFnZSBoYXMgY2hhbmdlZC4KKyAgICBpZiAobV9jb250ZW50cyA9PSBjb250ZW50cykKKyAg
ICAgICAgcmV0dXJuOworICAgIG1fY29udGVudHMgPSBjb250ZW50czsKKyAgICBzZXROZWVkc1Rl
eHR1cmUobV9pc0RyYXdhYmxlICYmICh0aGlzLT5jb250ZW50cygpIHx8IGRyYXdzQ29udGVudCgp
IHx8IHBsdWdpblZpZXcoKSkpOworCisgICAgaWYgKG1fY29udGVudHMpCisgICAgICAgIHNldE5l
ZWRzRGlzcGxheSgpOworICAgIGVsc2UKKyAgICAgICAgc2V0TmVlZHNDb21taXQoKTsKK30KKwor
dm9pZCBMYXllcldlYktpdFRocmVhZDo6c2V0RHJhd2FibGUoYm9vbCBpc0RyYXdhYmxlKQorewor
ICAgIGlmIChtX2lzRHJhd2FibGUgPT0gaXNEcmF3YWJsZSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9pc0RyYXdhYmxlID0gaXNEcmF3YWJsZTsKKworICAgIHNldE5lZWRzVGV4dHVyZShtX2lz
RHJhd2FibGUgJiYgKGRyYXdzQ29udGVudCgpIHx8IGNvbnRlbnRzKCkgfHwgcGx1Z2luVmlldygp
IHx8IG1lZGlhUGxheWVyKCkgfHwgY2FudmFzKCkpKTsKKyAgICBzZXROZWVkc0NvbW1pdCgpOwor
fQorCit2b2lkIExheWVyV2ViS2l0VGhyZWFkOjpzZXROZWVkc0NvbW1pdCgpCit7CisgICAgLy8g
Q2FsbCBub3RpZnlTeW5jUmVxdWlyZWQoKSwgd2hpY2ggaW4gdGhpcyBpbXBsZW1lbnRhdGlvbiBw
bHVtYnMgdGhyb3VnaCB0bworICAgIC8vIGNhbGwgc2NoZWR1bGVSb290TGF5ZXJDb21taXQoKSBv
biB0aGUgV2ViVmlldywgd2hpY2ggd2lsbCBjYXVzZSB1cyB0byBjb21taXQKKyAgICAvLyBjaGFu
Z2VzIGRvbmUgb24gdGhlIFdlYktpdCB0aHJlYWQgZm9yIGRpc3BsYXkgb24gdGhlIENvbXBvc2l0
aW5nIHRocmVhZC4KKyAgICBpZiAobV9vd25lcikKKyAgICAgICAgbV9vd25lci0+bm90aWZ5U3lu
Y1JlcXVpcmVkKCk7Cit9CisKK3ZvaWQgTGF5ZXJXZWJLaXRUaHJlYWQ6Om5vdGlmeUFuaW1hdGlv
blN0YXJ0ZWQoZG91YmxlIHRpbWUpCit7CisgICAgaWYgKG1fb3duZXIpCisgICAgICAgIG1fb3du
ZXItPm5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQodGltZSk7Cit9CisKK3ZvaWQgTGF5ZXJXZWJLaXRU
aHJlYWQ6OmNvbW1pdE9uV2ViS2l0VGhyZWFkKGRvdWJsZSBzY2FsZSkKK3sKKyAgICAvLyBVcGRh
dGluZyB0ZXh0dXJlIGNvbnRlbnRzIHJlcXVpcmUgdGhlIGxhdGVzdCB2aXNpYmlsaXR5IGluZm8u
CisgICAgdXBkYXRlVGV4dHVyZUNvbnRlbnRzKHNjYWxlKTsKKworICAgIC8vIE1ha2Ugc3VyZSBh
bGwgYW5pbWF0aW9ucyBhcmUgc3RhcnRlZCBhdCB0aGUgc2FtZSB0aW1lCisgICAgLy8gdG8gYXZv
aWQgc2hvd2luZyBhbmltYXRpb25zIG91dC1vZi1zeW5jLgorICAgIC8vIERvIHRoaXMgYWZ0ZXIg
dXBkYXRpbmcgdGV4dHVyZSBjb250ZW50cywgYmVjYXVzZSB0aGF0IGNhbiBiZSBhIHNsb3cKKyAg
ICAvLyBvcGVyYXRpb24uCisgICAgc3RhcnRBbmltYXRpb25zKGN1cnJlbnRUaW1lKCkpOworfQor
Cit2b2lkIExheWVyV2ViS2l0VGhyZWFkOjpzdGFydEFuaW1hdGlvbnMoZG91YmxlIHRpbWUpCit7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3J1bm5pbmdBbmltYXRpb25zLnNpemUoKTsg
KytpKSB7CisgICAgICAgIGlmICghbV9ydW5uaW5nQW5pbWF0aW9uc1tpXS0+c3RhcnRUaW1lKCkp
IHsKKyAgICAgICAgICAgIG1fcnVubmluZ0FuaW1hdGlvbnNbaV0tPnNldFN0YXJ0VGltZSh0aW1l
KTsKKyAgICAgICAgICAgIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQodGltZSk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBzaXplX3QgbGlzdFNpemUgPSBtX3N1YmxheWVycy5zaXplKCk7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0U2l6ZTsgaSsrKQorICAgICAgICBtX3N1YmxheWVy
c1tpXS0+c3RhcnRBbmltYXRpb25zKHRpbWUpOworfQorCit2b2lkIExheWVyV2ViS2l0VGhyZWFk
Ojp1cGRhdGVUZXh0dXJlQ29udGVudHMoZG91YmxlIHNjYWxlKQoreworICAgIGlmIChtX3NjYWxl
ICE9IHNjYWxlKSB7CisgICAgICAgIG1fc2NhbGUgPSBzY2FsZTsKKworICAgICAgICAvLyBPbmx5
IHdlYiBjb250ZW50IGNhbiByZWRyYXcgYXQgdGhlIG5ldyBzY2FsZS4KKyAgICAgICAgLy8gQ2Fu
dmFzLCBpbWFnZXMsIHZpZGVvIGV0YyBjYW4ndC4KKyAgICAgICAgaWYgKGRyYXdzQ29udGVudCgp
KQorICAgICAgICAgICAgc2V0TmVlZHNEaXNwbGF5KCk7CisgICAgfQorCisgICAgdXBkYXRlVGV4
dHVyZUNvbnRlbnRzSWZOZWVkZWQoKTsKKworICAgIGlmIChpbmNsdWRlVmlzaWJpbGl0eSgpKSB7
CisgICAgICAgIC8vIFRoZSBSZW5kZXJMYXllckJhY2tpbmcgY2FzdCBsb29rcyB1bnNhZmUgZ2l2
ZW4gdGhhdCB0aGVyZSBhcmUgdHdvIGNsYXNzZXMKKyAgICAgICAgLy8gZGVyaXZlZCBmcm9tIEdy
YXBoaWNzTGF5ZXJDbGllbnQgYnV0IHRoaXMgY29kZSBpcyBvbmx5IHJlYWNoYWJsZSBmb3IKKyAg
ICAgICAgLy8gdGhpbmdzIHRoYXQgcHJvZHVjZSBSZW5kZXJMYXllckJhY2tpbmcgZGVyaXZhdGl2
ZXM7IGkuZS4sIHBsdWdpbnMgYW5kIG1lZGlhLgorICAgICAgICBSZW5kZXJMYXllciogcmVuZGVy
TGF5ZXIoc3RhdGljX2Nhc3Q8UmVuZGVyTGF5ZXJCYWNraW5nKj4obV9vd25lci0+Y2xpZW50KCkp
LT5vd25pbmdMYXllcigpKTsKKyAgICAgICAgYm9vbCBpc1Zpc2libGUocmVuZGVyTGF5ZXItPmhh
c1Zpc2libGVDb250ZW50KCkgfHwgcmVuZGVyTGF5ZXItPmhhc1Zpc2libGVEZXNjZW5kYW50KCkp
OworICAgICAgICBpZiAobV9pc1Zpc2libGUgIT0gaXNWaXNpYmxlKSB7CisgICAgICAgICAgICBt
X2lzVmlzaWJsZSA9IGlzVmlzaWJsZTsKKyAgICAgICAgICAgIHNldE5lZWRzQ29tbWl0KCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBzaXplX3QgbGlzdFNpemUgPSBtX3N1YmxheWVycy5zaXpl
KCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0U2l6ZTsgaSsrKQorICAgICAgICBt
X3N1YmxheWVyc1tpXS0+dXBkYXRlVGV4dHVyZUNvbnRlbnRzKHNjYWxlKTsKKworICAgIGlmICht
YXNrTGF5ZXIoKSkKKyAgICAgICAgbWFza0xheWVyKCktPnVwZGF0ZVRleHR1cmVDb250ZW50cyhz
Y2FsZSk7CisKKyAgICBpZiAocmVwbGljYUxheWVyKCkpCisgICAgICAgIHJlcGxpY2FMYXllcigp
LT51cGRhdGVUZXh0dXJlQ29udGVudHMoc2NhbGUpOworfQorCit2b2lkIExheWVyV2ViS2l0VGhy
ZWFkOjpjb21taXRPbkNvbXBvc2l0aW5nVGhyZWFkKCkKK3sKKyAgICBGbG9hdFBvaW50IG9sZFBv
c2l0aW9uID0gbV9wb3NpdGlvbjsKKyAgICBtX3Bvc2l0aW9uICs9IG1fYWJzb2x1dGVPZmZzZXQ7
CisgICAgLy8gQ29weSB0aGUgYmFzZSB2YXJpYWJsZXMgZnJvbSB0aGlzIG9iamVjdCBpbnRvIG1f
bGF5ZXJDb21wb3NpdGluZ1RocmVhZAorICAgIHJlcGxpY2F0ZShtX2xheWVyQ29tcG9zaXRpbmdU
aHJlYWQuZ2V0KCkpOworICAgIG1fcG9zaXRpb24gPSBvbGRQb3NpdGlvbjsKKyAgICB1cGRhdGVM
YXllckhpZXJhcmNoeSgpOworICAgIG1fdGlsZXItPmNvbW1pdFBlbmRpbmdUZXh0dXJlVXBsb2Fk
cygpOworCisgICAgc2l6ZV90IGxpc3RTaXplID0gbV9zdWJsYXllcnMuc2l6ZSgpOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdFNpemU7IGkrKykKKyAgICAgICAgbV9zdWJsYXllcnNb
aV0tPmNvbW1pdE9uQ29tcG9zaXRpbmdUaHJlYWQoKTsKKworICAgIGlmIChtYXNrTGF5ZXIoKSkg
eworICAgICAgICBtYXNrTGF5ZXIoKS0+Y29tbWl0T25Db21wb3NpdGluZ1RocmVhZCgpOworICAg
ICAgICBsYXllckNvbXBvc2l0aW5nVGhyZWFkKCktPnNldE1hc2tMYXllcihtYXNrTGF5ZXIoKS0+
bGF5ZXJDb21wb3NpdGluZ1RocmVhZCgpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbGF5ZXJDb21w
b3NpdGluZ1RocmVhZCgpLT5zZXRNYXNrTGF5ZXIoMCk7CisKKyAgICBpZiAocmVwbGljYUxheWVy
KCkpIHsKKyAgICAgICAgcmVwbGljYUxheWVyKCktPmNvbW1pdE9uQ29tcG9zaXRpbmdUaHJlYWQo
KTsKKyAgICAgICAgbGF5ZXJDb21wb3NpdGluZ1RocmVhZCgpLT5zZXRSZXBsaWNhTGF5ZXIocmVw
bGljYUxheWVyKCktPmxheWVyQ29tcG9zaXRpbmdUaHJlYWQoKSk7CisgICAgfSBlbHNlCisgICAg
ICAgIGxheWVyQ29tcG9zaXRpbmdUaHJlYWQoKS0+c2V0UmVwbGljYUxheWVyKDApOworfQorCit2
b2lkIExheWVyV2ViS2l0VGhyZWFkOjphZGRTdWJsYXllcihQYXNzUmVmUHRyPExheWVyV2ViS2l0
VGhyZWFkPiBzdWJsYXllcikKK3sKKyAgICBpbnNlcnRTdWJsYXllcihzdWJsYXllciwgbnVtU3Vi
bGF5ZXJzKCkpOworfQorCit2b2lkIExheWVyV2ViS2l0VGhyZWFkOjppbnNlcnRTdWJsYXllcihQ
YXNzUmVmUHRyPExheWVyV2ViS2l0VGhyZWFkPiBzdWJsYXllciwgc2l6ZV90IGluZGV4KQorewor
ICAgIGluZGV4ID0gbWluKGluZGV4LCBtX3N1YmxheWVycy5zaXplKCkpOworICAgIHN1YmxheWVy
LT5yZW1vdmVGcm9tU3VwZXJsYXllcigpOworICAgIHN1YmxheWVyLT5zZXRTdXBlcmxheWVyKHRo
aXMpOworICAgIG1fc3VibGF5ZXJzLmluc2VydChpbmRleCwgc3VibGF5ZXIpOworCisgICAgc2V0
TmVlZHNDb21taXQoKTsKK30KKwordm9pZCBMYXllcldlYktpdFRocmVhZDo6cmVtb3ZlRnJvbVN1
cGVybGF5ZXIoKQoreworICAgIGlmIChtX3N1cGVybGF5ZXIpCisgICAgICAgIG1fc3VwZXJsYXll
ci0+cmVtb3ZlU3VibGF5ZXIodGhpcyk7Cit9CisKK3ZvaWQgTGF5ZXJXZWJLaXRUaHJlYWQ6OnJl
bW92ZVN1YmxheWVyKExheWVyV2ViS2l0VGhyZWFkKiBzdWJsYXllcikKK3sKKyAgICBpbnQgZm91
bmRJbmRleCA9IGluZGV4T2ZTdWJsYXllcihzdWJsYXllcik7CisgICAgaWYgKGZvdW5kSW5kZXgg
PT0gLTEpCisgICAgICAgIHJldHVybjsKKworICAgIHN1YmxheWVyLT5zZXRTdXBlcmxheWVyKDAp
OworICAgIG1fc3VibGF5ZXJzLnJlbW92ZShmb3VuZEluZGV4KTsKKworICAgIHNldE5lZWRzQ29t
bWl0KCk7Cit9CisKK3ZvaWQgTGF5ZXJXZWJLaXRUaHJlYWQ6OnJlcGxhY2VTdWJsYXllcihMYXll
cldlYktpdFRocmVhZCogcmVmZXJlbmNlLCBQYXNzUmVmUHRyPExheWVyV2ViS2l0VGhyZWFkPiBu
ZXdMYXllcikKK3sKKyAgICBBU1NFUlRfQVJHKHJlZmVyZW5jZSwgcmVmZXJlbmNlKTsKKyAgICBB
U1NFUlRfQVJHKHJlZmVyZW5jZSwgcmVmZXJlbmNlLT5zdXBlcmxheWVyKCkgPT0gdGhpcyk7CisK
KyAgICBpZiAocmVmZXJlbmNlID09IG5ld0xheWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBp
bnQgcmVmZXJlbmNlSW5kZXggPSBpbmRleE9mU3VibGF5ZXIocmVmZXJlbmNlKTsKKyAgICBpZiAo
cmVmZXJlbmNlSW5kZXggPT0gLTEpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICByZWZlcmVuY2UtPnJlbW92ZUZyb21TdXBlcmxh
eWVyKCk7CisKKyAgICBpZiAobmV3TGF5ZXIpIHsKKyAgICAgICAgbmV3TGF5ZXItPnJlbW92ZUZy
b21TdXBlcmxheWVyKCk7CisgICAgICAgIGluc2VydFN1YmxheWVyKG5ld0xheWVyLCByZWZlcmVu
Y2VJbmRleCk7CisgICAgfQorfQorCitpbnQgTGF5ZXJXZWJLaXRUaHJlYWQ6OmluZGV4T2ZTdWJs
YXllcihjb25zdCBMYXllcldlYktpdFRocmVhZCogcmVmZXJlbmNlKQoreworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9zdWJsYXllcnMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgaWYgKG1f
c3VibGF5ZXJzW2ldID09IHJlZmVyZW5jZSkKKyAgICAgICAgICAgIHJldHVybiBpOworICAgIH0K
KyAgICByZXR1cm4gLTE7Cit9CisKK3ZvaWQgTGF5ZXJXZWJLaXRUaHJlYWQ6OnNldEJvdW5kcyhj
b25zdCBJbnRTaXplJiBzaXplKQoreworICAgIGlmIChtX2JvdW5kcyA9PSBzaXplKQorICAgICAg
ICByZXR1cm47CisKKyAgICBib29sIGZpcnN0UmVzaXplID0gIW1fYm91bmRzLndpZHRoKCkgJiYg
IW1fYm91bmRzLmhlaWdodCgpICYmIHNpemUud2lkdGgoKSAmJiBzaXplLmhlaWdodCgpOworCisg
ICAgbV9ib3VuZHMgPSBzaXplOworCisgICAgYm91bmRzQ2hhbmdlZCgpOworCisgICAgaWYgKGZp
cnN0UmVzaXplKQorICAgICAgICBzZXROZWVkc0Rpc3BsYXkoKTsKKyAgICBlbHNlCisgICAgICAg
IHNldE5lZWRzQ29tbWl0KCk7Cit9CisKK3ZvaWQgTGF5ZXJXZWJLaXRUaHJlYWQ6OnNldEZyYW1l
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAocmVjdCA9PSBtX2ZyYW1lKQorICAg
ICAgcmV0dXJuOworCisgICAgbV9mcmFtZSA9IHJlY3Q7CisgICAgc2V0TmVlZHNEaXNwbGF5KCk7
Cit9CisKK2NvbnN0IExheWVyV2ViS2l0VGhyZWFkKiBMYXllcldlYktpdFRocmVhZDo6cm9vdExh
eWVyKCkgY29uc3QKK3sKKyAgICBjb25zdCBMYXllcldlYktpdFRocmVhZCogbGF5ZXIgPSB0aGlz
OworICAgIExheWVyV2ViS2l0VGhyZWFkKiBzdXBlcmxheWVyID0gbGF5ZXItPnN1cGVybGF5ZXIo
KTsKKworICAgIHdoaWxlIChzdXBlcmxheWVyKSB7CisgICAgICAgIGxheWVyID0gc3VwZXJsYXll
cjsKKyAgICAgICAgc3VwZXJsYXllciA9IHN1cGVybGF5ZXItPnN1cGVybGF5ZXIoKTsKKyAgICB9
CisgICAgcmV0dXJuIGxheWVyOworfQorCit2b2lkIExheWVyV2ViS2l0VGhyZWFkOjpyZW1vdmVB
bGxTdWJsYXllcnMoKQoreworICAgIHdoaWxlIChtX3N1YmxheWVycy5zaXplKCkpIHsKKyAgICAg
ICAgUmVmUHRyPExheWVyV2ViS2l0VGhyZWFkPiBsYXllciA9IG1fc3VibGF5ZXJzWzBdLmdldCgp
OworICAgICAgICBBU1NFUlQobGF5ZXItPnN1cGVybGF5ZXIoKSk7CisgICAgICAgIGxheWVyLT5y
ZW1vdmVGcm9tU3VwZXJsYXllcigpOworICAgIH0KKyAgICBzZXROZWVkc0NvbW1pdCgpOworfQor
Cit2b2lkIExheWVyV2ViS2l0VGhyZWFkOjpzZXRTdWJsYXllcnMoY29uc3QgVmVjdG9yPFJlZlB0
cjxMYXllcldlYktpdFRocmVhZD4gPiYgc3VibGF5ZXJzKQoreworICAgIGlmIChzdWJsYXllcnMg
PT0gbV9zdWJsYXllcnMpCisgICAgICAgIHJldHVybjsKKworICAgIHJlbW92ZUFsbFN1YmxheWVy
cygpOworICAgIHNpemVfdCBsaXN0U2l6ZSA9IHN1YmxheWVycy5zaXplKCk7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBsaXN0U2l6ZTsgaSsrKQorICAgICAgICBhZGRTdWJsYXllcihzdWJs
YXllcnNbaV0pOworfQorCitMYXllcldlYktpdFRocmVhZCogTGF5ZXJXZWJLaXRUaHJlYWQ6OnN1
cGVybGF5ZXIoKSBjb25zdAoreworICAgIHJldHVybiBtX3N1cGVybGF5ZXI7Cit9CisKK3ZvaWQg
TGF5ZXJXZWJLaXRUaHJlYWQ6OnNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBGbG9hdFJlY3Qm
IGRpcnR5UmVjdCkKK3sKKyAgICBtX3RpbGVyLT5zZXROZWVkc0Rpc3BsYXkoZGlydHlSZWN0KTsK
KyAgICBzZXROZWVkc0NvbW1pdCgpOyAvLyBGSVhNRTogUmVwbGFjZSB0aGlzIHdpdGggYSBtb3Jl
IHRhcmdldGVkIG1lc3NhZ2UgZm9yIGRpcnR5IHJlY3QgaGFuZGxpbmcgd2l0aCBwbHVnaW4gY29u
dGVudD8KK30KKwordm9pZCBMYXllcldlYktpdFRocmVhZDo6c2V0TmVlZHNEaXNwbGF5KCkKK3sK
KyAgICBtX3RpbGVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKKyAgICBzZXROZWVkc0NvbW1pdCgpOyAv
LyBGSVhNRTogUmVwbGFjZSB0aGlzIHdpdGggYSBtb3JlIHRhcmdldGVkIG1lc3NhZ2UgZm9yIGRp
cnR5IHJlY3QgaGFuZGxpbmcgd2l0aCBwbHVnaW4gY29udGVudD8KK30KKwordm9pZCBMYXllcldl
YktpdFRocmVhZDo6dXBkYXRlTGF5ZXJIaWVyYXJjaHkoKQoreworICAgIG1fbGF5ZXJDb21wb3Np
dGluZ1RocmVhZC0+c2V0U3VwZXJsYXllcihzdXBlcmxheWVyKCkgPyBzdXBlcmxheWVyKCktPm1f
bGF5ZXJDb21wb3NpdGluZ1RocmVhZC5nZXQoKSA6IDApOworCisgICAgVmVjdG9yPFJlZlB0cjxM
YXllckNvbXBvc2l0aW5nVGhyZWFkPiA+IHN1YmxheWVyczsKKyAgICBzaXplX3QgbGlzdFNpemUg
PSBtX3N1YmxheWVycy5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0U2l6
ZTsgaSsrKQorICAgICAgICBzdWJsYXllcnMuYXBwZW5kKG1fc3VibGF5ZXJzW2ldLT5tX2xheWVy
Q29tcG9zaXRpbmdUaHJlYWQuZ2V0KCkpOworICAgIG1fbGF5ZXJDb21wb3NpdGluZ1RocmVhZC0+
c2V0U3VibGF5ZXJzKHN1YmxheWVycyk7Cit9CisKK3ZvaWQgTGF5ZXJXZWJLaXRUaHJlYWQ6OnNl
dElzTWFzayhib29sIGlzTWFzaykKK3sKKyAgICBtX2lzTWFzayA9IGlzTWFzazsKKyAgICBpZiAo
aXNNYXNrKQorICAgICAgICBtX3RpbGVyLT5kaXNhYmxlVGlsaW5nKHRydWUpOworfQorCit9CisK
KyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyV2ViS2l0VGhyZWFk
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyV2Vi
S2l0VGhyZWFkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWI3MGE3YmNlYWEzMTRiYzFlYTlkMDYxMmYzMWEzYjQ3
ZTkzZWM4OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2JsYWNrYmVycnkvTGF5ZXJXZWJLaXRUaHJlYWQuaApAQCAtMCwwICsxLDIwMiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSwgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGlt
aXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKworI2lmbmRlZiBMYXllcldlYktpdFRocmVhZF9oCisjZGVm
aW5lIExheWVyV2ViS2l0VGhyZWFkX2gKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5
ZXJCbGFja0JlcnJ5LmgiCisjaW5jbHVkZSAiTGF5ZXJEYXRhLmgiCisjaW5jbHVkZSAiTGF5ZXJU
aWxlci5oIgorCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorCitjbGFzcyBTa0JpdG1hcDsK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBMYXllckNvbXBvc2l0aW5nVGhyZWFkOwor
CitjbGFzcyBMYXllcldlYktpdFRocmVhZCA6IHB1YmxpYyBSZWZDb3VudGVkPExheWVyV2ViS2l0
VGhyZWFkPiwgcHVibGljIExheWVyRGF0YSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8TGF5ZXJXZWJLaXRUaHJlYWQ+IGNyZWF0ZShMYXllclR5cGUsIEdyYXBoaWNzTGF5ZXJCbGFj
a0JlcnJ5KiBvd25lciA9IDApOworCisgICAgdmlydHVhbCB+TGF5ZXJXZWJLaXRUaHJlYWQoKTsK
KworICAgIHZvaWQgYWRkU3VibGF5ZXIoUGFzc1JlZlB0cjxMYXllcldlYktpdFRocmVhZD4pOwor
ICAgIHZvaWQgaW5zZXJ0U3VibGF5ZXIoUGFzc1JlZlB0cjxMYXllcldlYktpdFRocmVhZD4sIHNp
emVfdCBpbmRleCk7CisgICAgdm9pZCByZXBsYWNlU3VibGF5ZXIoTGF5ZXJXZWJLaXRUaHJlYWQq
IHJlZmVyZW5jZSwgUGFzc1JlZlB0cjxMYXllcldlYktpdFRocmVhZD4gbmV3TGF5ZXIpOworICAg
IHZvaWQgcmVtb3ZlRnJvbVN1cGVybGF5ZXIoKTsKKworICAgIHZvaWQgc2V0QW5jaG9yUG9pbnQo
Y29uc3QgRmxvYXRQb2ludCYgYW5jaG9yUG9pbnQpIHsgbV9hbmNob3JQb2ludCA9IGFuY2hvclBv
aW50OyBzZXROZWVkc0NvbW1pdCgpOyB9CisKKyAgICB2b2lkIHNldEFuY2hvclBvaW50WihmbG9h
dCBhbmNob3JQb2ludFopIHsgbV9hbmNob3JQb2ludFogPSBhbmNob3JQb2ludFo7IHNldE5lZWRz
Q29tbWl0KCk7IH0KKworICAgIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJiBj
b2xvcikgeyBtX2JhY2tncm91bmRDb2xvciA9IGNvbG9yOyBzZXROZWVkc0NvbW1pdCgpOyB9CisK
KyAgICB2b2lkIHNldEJvcmRlckNvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikgeyBtX2JvcmRlckNv
bG9yID0gY29sb3I7IHNldE5lZWRzQ29tbWl0KCk7IH0KKworICAgIHZvaWQgc2V0Qm9yZGVyV2lk
dGgoZmxvYXQgd2lkdGgpIHsgbV9ib3JkZXJXaWR0aCA9IHdpZHRoOyBzZXROZWVkc0NvbW1pdCgp
OyB9CisKKyAgICB2b2lkIHNldEJvdW5kcyhjb25zdCBJbnRTaXplJik7CisKKyAgICB2b2lkIHNl
dERvdWJsZVNpZGVkKGJvb2wgZG91YmxlU2lkZWQpIHsgbV9kb3VibGVTaWRlZCA9IGRvdWJsZVNp
ZGVkOyBzZXROZWVkc0NvbW1pdCgpOyB9CisKKyAgICB2b2lkIHNldEZyYW1lKGNvbnN0IEZsb2F0
UmVjdCYpOworCisgICAgdm9pZCBzZXRNYXNrc1RvQm91bmRzKGJvb2wgbWFza3NUb0JvdW5kcykg
eyBtX21hc2tzVG9Cb3VuZHMgPSBtYXNrc1RvQm91bmRzOyB9CisKKyAgICB2b2lkIHNldE1hc2tM
YXllcihMYXllcldlYktpdFRocmVhZCogbWFza0xheWVyKSB7IG1fbWFza0xheWVyID0gbWFza0xh
eWVyOyB9CisgICAgTGF5ZXJXZWJLaXRUaHJlYWQqIG1hc2tMYXllcigpIGNvbnN0IHsgcmV0dXJu
IG1fbWFza0xheWVyLmdldCgpOyB9CisgICAgdm9pZCBzZXRJc01hc2soYm9vbCk7CisKKyAgICB2
b2lkIHNldFJlcGxpY2FMYXllcihMYXllcldlYktpdFRocmVhZCogbGF5ZXIpIHsgbV9yZXBsaWNh
TGF5ZXIgPSBsYXllcjsgfQorICAgIExheWVyV2ViS2l0VGhyZWFkKiByZXBsaWNhTGF5ZXIoKSB7
IHJldHVybiBtX3JlcGxpY2FMYXllci5nZXQoKTsgfQorCisgICAgLy8gRklYTUU6IE1vdmUgdG8g
YSBuZXcgc3ViY2xhc3MsIENvbnRlbnRMYXllcldlYktpdFRocmVhZC4gVGhpcyBpcyBvbmx5IHVz
ZWQgZm9yIGxheWVycyB0aGF0IGRyYXcgY29udGVudAorICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5
SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYgZGlydHlSZWN0KTsKKworICAgIHZpcnR1YWwgdm9pZCBz
ZXROZWVkc0Rpc3BsYXkoKTsKKworICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5T25Cb3VuZHNDaGFu
Z2UoYm9vbCBuZWVkc0Rpc3BsYXkpIHsgbV9uZWVkc0Rpc3BsYXlPbkJvdW5kc0NoYW5nZSA9IG5l
ZWRzRGlzcGxheTsgfQorCisgICAgdm9pZCBzZXRPcGFjaXR5KGZsb2F0IG9wYWNpdHkpIHsgbV9v
cGFjaXR5ID0gb3BhY2l0eTsgc2V0TmVlZHNDb21taXQoKTsgfQorCisgICAgdm9pZCBzZXRPcGFx
dWUoYm9vbCBvcGFxdWUpIHsgbV9vcGFxdWUgPSBvcGFxdWU7IHNldE5lZWRzQ29tbWl0KCk7IH0K
KworICAgIHZvaWQgc2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24pIHsgbV9w
b3NpdGlvbiA9IHBvc2l0aW9uOyBzZXROZWVkc0NvbW1pdCgpOyB9CisKKyAgICBjb25zdCBMYXll
cldlYktpdFRocmVhZCogcm9vdExheWVyKCkgY29uc3Q7CisKKyAgICB2b2lkIHJlbW92ZUFsbFN1
YmxheWVycygpOworCisgICAgdm9pZCBzZXRTdWJsYXllcnMoY29uc3QgVmVjdG9yPFJlZlB0cjxM
YXllcldlYktpdFRocmVhZD4gPiYpOworCisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllcldl
YktpdFRocmVhZD4gPiYgZ2V0U3VibGF5ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9zdWJsYXllcnM7
IH0KKworICAgIHZvaWQgc2V0U3VibGF5ZXJUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIHRyYW5zZm9ybSkgeyBtX3N1YmxheWVyVHJhbnNmb3JtID0gdHJhbnNmb3JtOyBzZXRO
ZWVkc0NvbW1pdCgpOyB9CisKKyAgICBMYXllcldlYktpdFRocmVhZCogc3VwZXJsYXllcigpIGNv
bnN0OworCisgICAgdm9pZCBzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IHRyYW5zZm9ybSkgeyBtX3RyYW5zZm9ybSA9IHRyYW5zZm9ybTsgc2V0TmVlZHNDb21taXQoKTsg
fQorCisgICAgdm9pZCBzZXRQcmVzZXJ2ZXMzRChib29sIHByZXNlcnZlczNEKSB7IG1fcHJlc2Vy
dmVzM0QgPSBwcmVzZXJ2ZXMzRDsgc2V0TmVlZHNDb21taXQoKTsgfQorCisgICAgdm9pZCBzZXRG
aXhlZFBvc2l0aW9uKGJvb2wgZml4ZWQpIHsgbV9pc0ZpeGVkUG9zaXRpb24gPSBmaXhlZDsgc2V0
TmVlZHNDb21taXQoKTsgfQorICAgIHZvaWQgc2V0SGFzRml4ZWRDb250YWluZXIoYm9vbCBmaXhl
ZCkgeyBtX2hhc0ZpeGVkQ29udGFpbmVyID0gZml4ZWQ7IHNldE5lZWRzQ29tbWl0KCk7IH0KKyAg
ICB2b2lkIHNldEhhc0ZpeGVkQW5jZXN0b3JJbkRPTVRyZWUoYm9vbCBmaXhlZCkgeyBtX2hhc0Zp
eGVkQW5jZXN0b3JJbkRPTVRyZWUgPSBmaXhlZDsgc2V0TmVlZHNDb21taXQoKTsgfQorCisgICAg
dm9pZCBzZXRDb250ZW50cyhJbWFnZSopOworICAgIEltYWdlKiBjb250ZW50cygpIGNvbnN0IHsg
cmV0dXJuIG1fY29udGVudHMuZ2V0KCk7IH0KKworICAgIHZvaWQgc2V0T3duZXIoR3JhcGhpY3NM
YXllckJsYWNrQmVycnkqIG93bmVyKSB7IG1fb3duZXIgPSBvd25lcjsgfQorCisgICAgYm9vbCBk
cmF3c0NvbnRlbnQoKSBjb25zdCB7IHJldHVybiBtX293bmVyICYmIG1fb3duZXItPmRyYXdzQ29u
dGVudCgpOyB9CisgICAgdm9pZCBzZXREcmF3YWJsZShib29sKTsKKworICAgIHZvaWQgY29tbWl0
T25XZWJLaXRUaHJlYWQoZG91YmxlIHNjYWxlKTsKKyAgICB2b2lkIGNvbW1pdE9uQ29tcG9zaXRp
bmdUaHJlYWQoKTsKKyAgICBMYXllckNvbXBvc2l0aW5nVGhyZWFkKiBsYXllckNvbXBvc2l0aW5n
VGhyZWFkKCkgY29uc3QgeyByZXR1cm4gbV9sYXllckNvbXBvc2l0aW5nVGhyZWFkLmdldCgpOyB9
CisKKyAgICAvLyBPbmx5IHVzZWQgd2hlbiB0aGlzIGxheWVyIGlzIHRoZSByb290IGxheWVyIG9m
IGEgZnJhbWUuCisgICAgdm9pZCBzZXRBYnNvbHV0ZU9mZnNldChjb25zdCBGbG9hdFNpemUmIG9m
ZnNldCkgeyBtX2Fic29sdXRlT2Zmc2V0ID0gb2Zmc2V0OyB9CisKKyAgICBkb3VibGUgY29udGVu
dHNTY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2NhbGU7IH0KKworICAgIFNrQml0bWFwIHBhaW50
Q29udGVudHMoY29uc3QgSW50UmVjdCYgdHJhbnNmb3JtZWRDb250ZW50c1JlY3QsIGRvdWJsZSBz
Y2FsZSwgYm9vbCogaXNTb2xpZENvbG9yID0gMCwgQ29sb3IqID0gMCk7CisgICAgYm9vbCBjb250
ZW50c1Zpc2libGUoY29uc3QgSW50UmVjdCYgY29udGVudHNSZWN0KSBjb25zdDsKKworICAgIHZv
aWQgc2V0TmVlZHNDb21taXQoKTsKKyAgICB2b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoZG91
YmxlIHRpbWUpOworCisgICAgdm9pZCBzZXRSdW5uaW5nQW5pbWF0aW9ucyhjb25zdCBWZWN0b3I8
UmVmUHRyPExheWVyQW5pbWF0aW9uPiA+JiBhbmltYXRpb25zKSB7IG1fcnVubmluZ0FuaW1hdGlv
bnMgPSBhbmltYXRpb25zOyBzZXROZWVkc0NvbW1pdCgpOyB9CisgICAgdm9pZCBzZXRTdXNwZW5k
ZWRBbmltYXRpb25zKGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJBbmltYXRpb24+ID4mIGFuaW1h
dGlvbnMpIHsgbV9zdXNwZW5kZWRBbmltYXRpb25zID0gYW5pbWF0aW9uczsgc2V0TmVlZHNDb21t
aXQoKTsgfQorCitwcm90ZWN0ZWQ6CisgICAgTGF5ZXJXZWJLaXRUaHJlYWQoTGF5ZXJUeXBlLCBH
cmFwaGljc0xheWVyQmxhY2tCZXJyeSogb3duZXIpOworCisgICAgdm9pZCBzZXROZWVkc1RleHR1
cmUoYm9vbCBuZWVkc1RleHR1cmUpIHsgbV9uZWVkc1RleHR1cmUgPSBuZWVkc1RleHR1cmU7IH0K
KyAgICB2b2lkIHNldExheWVyUHJvZ3JhbVNoYWRlcihMYXllckRhdGE6OkxheWVyUHJvZ3JhbVNo
YWRlciBzaGFkZXIpIHsgbV9sYXllclByb2dyYW1TaGFkZXIgPSBzaGFkZXI7IH0KKyAgICB2b2lk
IGNyZWF0ZUZyb250QnVmZmVyTG9jaygpOworICAgIGJvb2wgaXNEcmF3YWJsZSgpIHsgcmV0dXJu
IG1faXNEcmF3YWJsZTsgfQorCisgICAgdm9pZCBzdGFydEFuaW1hdGlvbnMoZG91YmxlIHRpbWUp
OworICAgIHZvaWQgdXBkYXRlVmlzaWJpbGl0eSgpOworICAgIHZvaWQgdXBkYXRlVGV4dHVyZUNv
bnRlbnRzKGRvdWJsZSBzY2FsZSk7CisKKyAgICB2aXJ0dWFsIHZvaWQgYm91bmRzQ2hhbmdlZCgp
IHsgfQorICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUZXh0dXJlQ29udGVudHNJZk5lZWRlZCgpOwor
Citwcml2YXRlOgorICAgIHZvaWQgdXBkYXRlTGF5ZXJIaWVyYXJjaHkoKTsKKworICAgIHZvaWQg
c2V0U3VwZXJsYXllcihMYXllcldlYktpdFRocmVhZCogc3VwZXJsYXllcikgeyBtX3N1cGVybGF5
ZXIgPSBzdXBlcmxheWVyOyB9CisKKyAgICBzaXplX3QgbnVtU3VibGF5ZXJzKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX3N1YmxheWVycy5zaXplKCk7CisgICAgfQorCisgICAgLy8g
UmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIHN1YmxheWVyIG9yIC0xIGlmIG5vdCBmb3VuZC4KKyAg
ICBpbnQgaW5kZXhPZlN1YmxheWVyKGNvbnN0IExheWVyV2ViS2l0VGhyZWFkKik7CisKKyAgICAv
LyBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBmcm9tIHJlbW92ZUZyb21TdXBlcmxheWVyLgor
ICAgIHZvaWQgcmVtb3ZlU3VibGF5ZXIoTGF5ZXJXZWJLaXRUaHJlYWQqKTsKKworICAgIEdyYXBo
aWNzTGF5ZXJCbGFja0JlcnJ5KiBtX293bmVyOworCisgICAgVmVjdG9yPFJlZlB0cjxMYXllcldl
YktpdFRocmVhZD4gPiBtX3N1YmxheWVyczsKKyAgICBMYXllcldlYktpdFRocmVhZCogbV9zdXBl
cmxheWVyOworICAgIFJlZlB0cjxMYXllcldlYktpdFRocmVhZD4gbV9tYXNrTGF5ZXI7CisgICAg
UmVmUHRyPExheWVyV2ViS2l0VGhyZWFkPiBtX3JlcGxpY2FMYXllcjsKKworICAgIFJlZlB0cjxJ
bWFnZT4gbV9jb250ZW50czsKKworICAgIFJlZlB0cjxMYXllckNvbXBvc2l0aW5nVGhyZWFkPiBt
X2xheWVyQ29tcG9zaXRpbmdUaHJlYWQ7CisgICAgUmVmUHRyPExheWVyVGlsZXI+IG1fdGlsZXI7
CisgICAgYm9vbCBtX2lzRHJhd2FibGU7CisgICAgYm9vbCBtX2lzTWFzazsKKyAgICBGbG9hdFNp
emUgbV9hYnNvbHV0ZU9mZnNldDsKKyAgICBkb3VibGUgbV9zY2FsZTsgLy8gU2NhbGUgYXBwbGll
cyBvbmx5IHRvIGNvbnRlbnQgbGF5ZXJzCit9OworCit9CisKKyNlbmRpZiAvLyBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9QbHVnaW5MYXllcldlYktpdFRocmVhZC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L1BsdWdpbkxheWVy
V2ViS2l0VGhyZWFkLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYjhkYzBiMDdhOGIwMzQ5MzMwYmE1OTg3MDY1
MWNhNjBhNmViNjIwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYmxhY2tiZXJyeS9QbHVnaW5MYXllcldlYktpdFRocmVhZC5jcHAKQEAgLTAsMCAr
MSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSwgMjAxMiBSZXNlYXJjaCBJ
biBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3Qs
IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGx1Z2luTGF5ZXJXZWJLaXRUaHJl
YWQuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIkxh
eWVyQ29tcG9zaXRpbmdUaHJlYWQuaCIKKyNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworUGx1Z2luTGF5ZXJXZWJLaXRUaHJlYWQ6OlBsdWdpbkxheWVyV2Vi
S2l0VGhyZWFkKFBsdWdpblZpZXcqIHBsdWdpblZpZXcpCisgICAgOiBMYXllcldlYktpdFRocmVh
ZChMYXllciwgMCkKKyAgICAsIG1fbmVlZHNEaXNwbGF5KGZhbHNlKQoreworICAgIHNldFBsdWdp
blZpZXcocGx1Z2luVmlldyk7Cit9CisKK1BsdWdpbkxheWVyV2ViS2l0VGhyZWFkOjp+UGx1Z2lu
TGF5ZXJXZWJLaXRUaHJlYWQoKQoreworfQorCit2b2lkIFBsdWdpbkxheWVyV2ViS2l0VGhyZWFk
OjpzZXRQbHVnaW5WaWV3KFBsdWdpblZpZXcqIHBsdWdpblZpZXcpCit7CisgICAgbV9wbHVnaW5W
aWV3ID0gcGx1Z2luVmlldzsKKyAgICBzZXROZWVkc1RleHR1cmUoaXNEcmF3YWJsZSgpICYmIHBs
dWdpblZpZXcpOworICAgIHNldExheWVyUHJvZ3JhbVNoYWRlcihMYXllclByb2dyYW1TaGFkZXJS
R0JBKTsKKworICAgIGlmIChtX3BsdWdpblZpZXcpCisgICAgICAgIHNldE5lZWRzRGlzcGxheSgp
OworICAgIGVsc2UgeworICAgICAgICAvLyBXZSBjYW4ndCBhZmZvcmQgdG8gd2FpdCB1bnRpbCB0
aGUgbmV4dCBjb21taXQKKyAgICAgICAgLy8gdG8gc2V0IHRoZSBtX3BsdWdpblZpZXcgdG8gMCBp
biB0aGUgaW1wbCwgYmVjYXVzZSBpdCBpcworICAgICAgICAvLyBhYm91dCB0byBiZSBkZXN0cm95
ZWQuCisgICAgICAgIGxheWVyQ29tcG9zaXRpbmdUaHJlYWQoKS0+c2V0UGx1Z2luVmlldygwKTsK
KyAgICAgICAgc2V0TmVlZHNDb21taXQoKTsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luTGF5ZXJX
ZWJLaXRUaHJlYWQ6OnNldEhvbGVQdW5jaFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAg
ICBtX2hvbGVQdW5jaFJlY3QgPSByZWN0OworICAgIHNldE5lZWRzQ29tbWl0KCk7Cit9CisKK3Zv
aWQgUGx1Z2luTGF5ZXJXZWJLaXRUaHJlYWQ6OnNldE5lZWRzRGlzcGxheSgpCit7CisgICAgbV9u
ZWVkc0Rpc3BsYXkgPSB0cnVlOworICAgIHNldE5lZWRzQ29tbWl0KCk7Cit9CisKK3ZvaWQgUGx1
Z2luTGF5ZXJXZWJLaXRUaHJlYWQ6OnVwZGF0ZVRleHR1cmVDb250ZW50c0lmTmVlZGVkKCkKK3sK
KyAgICBpZiAoIW1fbmVlZHNEaXNwbGF5KQorICAgICAgICByZXR1cm47CisKKyAgICBtX25lZWRz
RGlzcGxheSA9IGZhbHNlOworCisgICAgaWYgKCFtX3BsdWdpblZpZXcpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fcGx1Z2luVmlldy0+dXBkYXRlQnVmZmVyKEludFJlY3QoSW50UG9pbnQoMCwg
MCksIG1fcGx1Z2luVmlldy0+c2l6ZSgpKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvUGx1Z2luTGF5ZXJXZWJL
aXRUaHJlYWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkv
UGx1Z2luTGF5ZXJXZWJLaXRUaHJlYWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44N2I5YzgzMWY3OTcwNmQyNzA3
YmYwODYxNzFmOGUzNmE0ZjkyMzFjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9QbHVnaW5MYXllcldlYktpdFRocmVhZC5oCkBA
IC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEsIDIwMTIgUmVz
ZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAg
VVNBCisgKi8KKworI2lmbmRlZiBQbHVnaW5MYXllcldlYktpdFRocmVhZF9oCisjZGVmaW5lIFBs
dWdpbkxheWVyV2ViS2l0VGhyZWFkX2gKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKKworI2luY2x1ZGUgIkxheWVyV2ViS2l0VGhyZWFkLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgUGx1Z2luVmlldzsKKworY2xhc3MgUGx1Z2luTGF5ZXJXZWJLaXRUaHJlYWQg
OiBwdWJsaWMgTGF5ZXJXZWJLaXRUaHJlYWQgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFBsdWdpbkxheWVyV2ViS2l0VGhyZWFkPiBjcmVhdGUoUGx1Z2luVmlldyogcGx1Z2luVmll
dykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUGx1Z2luTGF5ZXJXZWJLaXRU
aHJlYWQocGx1Z2luVmlldykpOworICAgIH0KKworICAgIHZpcnR1YWwgflBsdWdpbkxheWVyV2Vi
S2l0VGhyZWFkKCk7CisKKyAgICB2b2lkIHNldFBsdWdpblZpZXcoUGx1Z2luVmlldyopOworICAg
IHZvaWQgc2V0SG9sZVB1bmNoUmVjdChjb25zdCBJbnRSZWN0Jik7CisKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0TmVlZHNEaXNwbGF5KCk7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlVGV4dHVyZUNvbnRlbnRzSWZOZWVkZWQoKTsKKworcHJpdmF0ZToKKyAgICBQbHVnaW5MYXll
cldlYktpdFRocmVhZChQbHVnaW5WaWV3Kik7CisgICAgYm9vbCBtX25lZWRzRGlzcGxheTsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKKworI2VuZGlmIC8vIFBsdWdpbkxheWVyV2ViS2l0VGhyZWFkX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvVmlkZW9M
YXllcldlYktpdFRocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9i
bGFja2JlcnJ5L1ZpZGVvTGF5ZXJXZWJLaXRUaHJlYWQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYzZjZmNzA5
OWIxNDViMmYwZGY4ODYxYTc4YjAwNTY0ODM1MGJlZjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L1ZpZGVvTGF5ZXJXZWJLaXRU
aHJlYWQuY3BwCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAy
MDExLCAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEg
IDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgRU5BQkxFKFZJREVPKQorI2luY2x1ZGUgIlZpZGVv
TGF5ZXJXZWJLaXRUaHJlYWQuaCIKKworI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUg
IkxheWVyQ29tcG9zaXRpbmdUaHJlYWQuaCIKKyNpbmNsdWRlICJNZWRpYVBsYXllci5oIgorCisj
aW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtTG9nLmg+CisKKyNkZWZpbmUgREVCVUdfVklERU9f
Q0xJUFBJTkcgMAorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1ZpZGVvTGF5ZXJXZWJLaXRUaHJl
YWQ6OlZpZGVvTGF5ZXJXZWJLaXRUaHJlYWQoTWVkaWFQbGF5ZXIqIG1lZGlhUGxheWVyKQorICAg
IDogTGF5ZXJXZWJLaXRUaHJlYWQoTGF5ZXIsIDApCit7CisgICAgc2V0TWVkaWFQbGF5ZXIobWVk
aWFQbGF5ZXIpOworfQorCitWaWRlb0xheWVyV2ViS2l0VGhyZWFkOjp+VmlkZW9MYXllcldlYktp
dFRocmVhZCgpCit7Cit9CisKK3ZvaWQgVmlkZW9MYXllcldlYktpdFRocmVhZDo6c2V0TWVkaWFQ
bGF5ZXIoTWVkaWFQbGF5ZXIqIG1lZGlhUGxheWVyKQoreworICAgIG1fbWVkaWFQbGF5ZXIgPSBt
ZWRpYVBsYXllcjsKKworICAgIC8vIFRoaXMgaXMgYSBiaXQgb2YgYSBtaXNub21lciwgc2luY2Ug
d2UgZG9uJ3QgbmVlZCBhbiBhY3R1YWwgR0wgdGV4dHVyZS4KKyAgICAvLyBIb3dldmVyLCB0aGUg
TGF5ZXJSZW5kZXJlciB3aWxsIG9ubHkgcHJvY2VzcyBsYXllcnMgdGhhdCAibmVlZCB0ZXh0dXJl
cyIKKyAgICBzZXROZWVkc1RleHR1cmUoaXNEcmF3YWJsZSgpICYmIChjb250ZW50cygpIHx8IGRy
YXdzQ29udGVudCgpIHx8IHRoaXMtPm1lZGlhUGxheWVyKCkpKTsKKworICAgIGlmICghbV9tZWRp
YVBsYXllcikgeworICAgICAgICAvLyBXZSBjYW4ndCBhZmZvcmQgdG8gd2FpdCB1bnRpbCB0aGUg
bmV4dCBjb21taXQKKyAgICAgICAgLy8gdG8gc2V0IHRoZSBtX21lZGlhUGxheWVyIHRvIDAgaW4g
dGhlIGltcGwsIGJlY2F1c2UgaXQgaXMKKyAgICAgICAgLy8gYWJvdXQgdG8gYmUgZGVzdHJveWVk
LgorICAgICAgICBsYXllckNvbXBvc2l0aW5nVGhyZWFkKCktPnNldE1lZGlhUGxheWVyKDApOwor
CisgICAgICAgIC8vIGNsZWFyIGhvbGUgcHVuY2ggcmVjdAorICAgICAgICBzZXRIb2xlUHVuY2hS
ZWN0KEludFJlY3QoKSk7CisgICAgfQorCisgICAgc2V0TmVlZHNDb21taXQoKTsKK30KKwordm9p
ZCBWaWRlb0xheWVyV2ViS2l0VGhyZWFkOjpzZXRIb2xlUHVuY2hSZWN0KGNvbnN0IEludFJlY3Qm
IHJlY3QpCit7CisgICAgbV9ob2xlUHVuY2hSZWN0ID0gcmVjdDsKKyNpZiBERUJVR19WSURFT19D
TElQUElORworICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpsb2coQmxhY2tCZXJyeTo6UGxhdGZv
cm06OkxvZ0xldmVsSW5mbywgIlZpZGVvTGF5ZXJXZWJLaXRUaHJlYWQgbV9ob2xlUHVuY2hSZWN0
PSh4PSVkLHk9JWQsd2lkdGg9JWQsaGVpZ2h0PSVkKS4iLCBtX2hvbGVQdW5jaFJlY3QueCgpLCBt
X2hvbGVQdW5jaFJlY3QueSgpLCBtX2hvbGVQdW5jaFJlY3Qud2lkdGgoKSwgbV9ob2xlUHVuY2hS
ZWN0LmhlaWdodCgpKTsKKyNlbmRpZgorICAgIHNldE5lZWRzQ29tbWl0KCk7Cit9CisKK3ZvaWQg
VmlkZW9MYXllcldlYktpdFRocmVhZDo6c2V0TmVlZHNEaXNwbGF5KCkKK3sKKyAgICAvLyBXZSBk
b24ndCByZWFsbHkgbmVlZCBkaXNwbGF5IHBlciBzZSwgYnV0IHNvbWUgY29kZSBtYXkgZGVwZW5k
IG9uCisgICAgLy8gc2V0TmVlZHNEaXNwbGF5KCkgdG8gY2FsbCBzZXROZWVkc0NvbW1pdCgpCisg
ICAgc2V0TmVlZHNDb21taXQoKTsKK30KKwordm9pZCBWaWRlb0xheWVyV2ViS2l0VGhyZWFkOjpi
b3VuZHNDaGFuZ2VkKCkKK3sKKyAgICBpZiAoIW1lZGlhUGxheWVyKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIC8vIEZvciB2aWRlbyBsYXllcnMsIHRoZSBlbnRpcmUgbGF5ZXIgc2hvdWxkIGJl
IGhvbGUgcHVuY2hlZAorICAgIC8vIEhvbGUgcHVuY2ggcmVjdGFuZ2xlIHNpemUgaXMgZXF1YWwg
dG8gdGhlIHNpemUgb2YgdGhpcyBsYXllci4KKyAgICAvLyBOb3RlIHRoYXQgYWx0aG91Z2ggd2Ug
a25vdyB0aGUgKnNpemUqIG9mIHRoaXMgbGF5ZXIsIHdlIHdvbid0IGtub3cgdGhlIHBvc2l0aW9u
IG9mIHRoaXMgbGF5ZXIKKyAgICAvLyB1bnRpbCB0aGUgTGF5ZXJDb21wb3NpdGluZ1RocmVhZDo6
c2V0RHJhd1RyYW5zZm9ybSBtZXRob2QgaXMgY2FsbGVkIGZyb20gdGhlIExheWVyUmVuZGVyZXIu
CisgICAgc2V0SG9sZVB1bmNoUmVjdChJbnRSZWN0KDAsIDAsIG1fYm91bmRzLndpZHRoKCksIG1f
Ym91bmRzLmhlaWdodCgpKSk7CisKKyAgICAvLyBBbHNvIHNldCBhIGNsaXBwaW5nIHJlY3Rhbmds
ZSBmb3IgdGhpcyBob2xlIHB1bmNoIHJlY3RhbmdsZS4KKyAgICBGcmFtZVZpZXcqIGZyYW1lVmll
dyA9IG1lZGlhUGxheWVyKCktPmZyYW1lVmlldygpOworICAgIGlmIChmcmFtZVZpZXcpCisgICAg
ICAgIG1faG9sZVB1bmNoQ2xpcFJlY3QgPSBmcmFtZVZpZXctPndpbmRvd0NsaXBSZWN0KCk7Cisg
ICAgZWxzZQorICAgICAgICBtX2hvbGVQdW5jaENsaXBSZWN0ID0gaG9sZVB1bmNoUmVjdCgpOwor
CisjaWYgREVCVUdfVklERU9fQ0xJUFBJTkcKKyAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6bG9n
KEJsYWNrQmVycnk6OlBsYXRmb3JtOjpMb2dMZXZlbEluZm8sICJWaWRlb0xheWVyV2ViS2l0VGhy
ZWFkIG1faG9sZVB1bmNoQ2xpcFJlY3Q9KHg9JWQseT0lZCx3aWR0aD0lZCxoZWlnaHQ9JWQpLiIs
IG1faG9sZVB1bmNoQ2xpcFJlY3QueCgpLCBtX2hvbGVQdW5jaENsaXBSZWN0LnkoKSwgbV9ob2xl
UHVuY2hDbGlwUmVjdC53aWR0aCgpLCBtX2hvbGVQdW5jaENsaXBSZWN0LmhlaWdodCgpKTsKKyNl
bmRpZgorfQorCit2b2lkIFZpZGVvTGF5ZXJXZWJLaXRUaHJlYWQ6OnVwZGF0ZVRleHR1cmVDb250
ZW50c0lmTmVlZGVkKCkKK3sKKyAgICAvLyBUaGVyZSBhcmUgbm8gdGV4dHVyZSBjb250ZW50cywg
dmlkZW8gaXMgc2hvd24gaW4gYSBzcGVjaWFsIHNjcmVlbiB3aW5kb3cKKyAgICAvLyBiZWhpbmQg
dGhlIHdlYiBwYWdlLgorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIEVOQUJMRShWSURFTykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvVmlkZW9MYXllcldl
YktpdFRocmVhZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJy
eS9WaWRlb0xheWVyV2ViS2l0VGhyZWFkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTY0NzMyYTliODkyMjVlZGM0
MjcxMjhjMWQ0MGZiZWQzZDhkZDY0ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvVmlkZW9MYXllcldlYktpdFRocmVhZC5oCkBA
IC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEsIDIwMTIgUmVz
ZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAg
VVNBCisgKi8KKworI2lmbmRlZiBWaWRlb0xheWVyV2ViS2l0VGhyZWFkX2gKKyNkZWZpbmUgVmlk
ZW9MYXllcldlYktpdFRocmVhZF9oCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
ICYmIEVOQUJMRShWSURFTykKKworI2luY2x1ZGUgIkxheWVyV2ViS2l0VGhyZWFkLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTWVkaWFQbGF5ZXI7CisKK2NsYXNzIFZpZGVvTGF5
ZXJXZWJLaXRUaHJlYWQgOiBwdWJsaWMgTGF5ZXJXZWJLaXRUaHJlYWQgeworcHVibGljOgorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFZpZGVvTGF5ZXJXZWJLaXRUaHJlYWQ+IGNyZWF0ZShNZWRpYVBs
YXllciogbWVkaWFQbGF5ZXIpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFZp
ZGVvTGF5ZXJXZWJLaXRUaHJlYWQobWVkaWFQbGF5ZXIpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IH5WaWRlb0xheWVyV2ViS2l0VGhyZWFkKCk7CisKKyAgICB2b2lkIHNldE1lZGlhUGxheWVyKE1l
ZGlhUGxheWVyKik7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7CisKK3By
b3RlY3RlZDoKKyAgICB2b2lkIHNldEhvbGVQdW5jaFJlY3QoY29uc3QgSW50UmVjdCYpOworCisg
ICAgdmlydHVhbCB2b2lkIGJvdW5kc0NoYW5nZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRl
VGV4dHVyZUNvbnRlbnRzSWZOZWVkZWQoKTsKKworcHJpdmF0ZToKKyAgICBWaWRlb0xheWVyV2Vi
S2l0VGhyZWFkKE1lZGlhUGxheWVyKik7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIEVOQUJMRShWSURFTykK
KworI2VuZGlmIC8vIFZpZGVvTGF5ZXJXZWJLaXRUaHJlYWRfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129638</attachid>
            <date>2012-02-29 23:25:47 -0800</date>
            <delta_ts>2012-03-03 19:05:16 -0800</delta_ts>
            <desc>patch v2</desc>
            <filename>bug-79871-20120301152542.patch</filename>
            <type>text/plain</type>
            <size>56412</size>
            <attacher name="Robin Cao">robin.webkit</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA5MzAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmJjMWIzZmZmMjZjZTY2
ZjM1YTA0YzgyNThiZThlMzZjMWQyYWM3OS4uNjUyOWNkMWE4ZGNkODhjZWFlZWRmYjc1NDVkN2Qy
YjJiMDIyM2EwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1NiBAQAorMjAxMi0wMi0yOSAgUm9i
aW4gQ2FvICA8cm9iaW4uY2FvQHRvcmNobW9iaWxlLmNvbS5jbj4KKworICAgICAgICBbQmxhY2tC
ZXJyeV0gVXBzdHJlYW0gTGF5ZXJXZWJLaXRUaHJlYWQgYW5kIGl0cyBkZXJpdmVkIGNsYXNzZXMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc5ODcxCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW5pdGlhbCB1
cHN0cmVhbSwgbm8gbmV3IHRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYmxh
Y2tiZXJyeS9DYW52YXNMYXllcldlYktpdFRocmVhZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNMYXllcldlYktpdFRocmVhZDo6Q2FudmFz
TGF5ZXJXZWJLaXRUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzTGF5ZXJXZWJLaXRU
aHJlYWQ6On5DYW52YXNMYXllcldlYktpdFRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52
YXNMYXllcldlYktpdFRocmVhZDo6c2V0Q2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZh
c0xheWVyV2ViS2l0VGhyZWFkOjpzZXROZWVkc0Rpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzTGF5ZXJXZWJLaXRUaHJlYWQ6OnVwZGF0ZVRleHR1cmVDb250ZW50c0lmTmVlZGVkKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0NhbnZhc0xheWVyV2ViS2l0
VGhyZWFkLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDYW52YXNMYXll
cldlYktpdFRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNMYXllcldlYktpdFRocmVh
ZDo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVy
RGF0YS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoTGF5ZXJEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyRGF0YTo6TGF5ZXJEYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyRGF0YTo6fkxheWVyRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckRhdGE6
OmFuY2hvclBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyRGF0YTo6YW5jaG9yUG9pbnRa
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyRGF0YTo6YmFja2dyb3VuZENvbG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyRGF0YTo6Ym9yZGVyQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJEYXRhOjpib3JkZXJXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckRhdGE6OmJv
dW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckRhdGE6OmRvdWJsZVNpZGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyRGF0YTo6ZnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJE
YXRhOjptYXNrc1RvQm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyRGF0YTo6b3BhY2l0
eSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckRhdGE6Om9wYXF1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpMYXllckRhdGE6OnBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyRGF0YTo6
c3VibGF5ZXJUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJEYXRhOjp0cmFuc2Zv
cm0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJEYXRhOjpwcmVzZXJ2ZXMzRCk6CisgICAgICAg
IChXZWJDb3JlOjpMYXllckRhdGE6OmdldFRleHR1cmVJRCk6CisgICAgICAgIChXZWJDb3JlOjpM
YXllckRhdGE6OnNldFRleHR1cmVJRCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckRhdGE6Om5l
ZWRzVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckRhdGE6OmxheWVyUHJvZ3JhbVNo
YWRlcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllckRhdGE6OmlzRml4ZWRQb3NpdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllckRhdGE6Omhhc0ZpeGVkQ29udGFpbmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyRGF0YTo6aGFzRml4ZWRBbmNlc3RvckluRE9NVHJlZSk6CisgICAgICAg
IChXZWJDb3JlOjpMYXllckRhdGE6OnBsdWdpblZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJEYXRhOjpob2xlUHVuY2hSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyRGF0YTo6aGFz
SG9sZVB1bmNoUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckRhdGE6Om1lZGlhUGxheWVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyRGF0YTo6Y2FudmFzKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyRGF0YTo6cmVwbGljYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyRGF0YTo6
bGF5ZXJUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyRGF0YTo6aW5jbHVkZVZpc2liaWxp
dHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJXZWJLaXRU
aHJlYWQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJXZWJLaXRUaHJlYWQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllcldlYktp
dFRocmVhZDo6TGF5ZXJXZWJLaXRUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJXZWJL
aXRUaHJlYWQ6On5MYXllcldlYktpdFRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllcldl
YktpdFRocmVhZDo6cGFpbnRDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllcldlYktp
dFRocmVhZDo6Y29udGVudHNWaXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyV2ViS2l0
VGhyZWFkOjpjcmVhdGVGcm9udEJ1ZmZlckxvY2spOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJX
ZWJLaXRUaHJlYWQ6OnVwZGF0ZVRleHR1cmVDb250ZW50c0lmTmVlZGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyV2ViS2l0VGhyZWFkOjpzZXRDb250ZW50cyk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllcldlYktpdFRocmVhZDo6c2V0RHJhd2FibGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJXZWJLaXRUaHJlYWQ6OnNldE5lZWRzQ29tbWl0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
V2ViS2l0VGhyZWFkOjpub3RpZnlBbmltYXRpb25TdGFydGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyV2ViS2l0VGhyZWFkOjpjb21taXRPbldlYktpdFRocmVhZCk6CisgICAgICAgIChXZWJD
b3JlOjpMYXllcldlYktpdFRocmVhZDo6c3RhcnRBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyV2ViS2l0VGhyZWFkOjp1cGRhdGVUZXh0dXJlQ29udGVudHMpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJXZWJLaXRUaHJlYWQ6OmNvbW1pdE9uQ29tcG9zaXRpbmdUaHJlYWQpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJXZWJLaXRUaHJlYWQ6OmFkZFN1YmxheWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyV2ViS2l0VGhyZWFkOjppbnNlcnRTdWJsYXllcik6CisgICAgICAg
IChXZWJDb3JlOjpMYXllcldlYktpdFRocmVhZDo6cmVtb3ZlRnJvbVN1cGVybGF5ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJXZWJLaXRUaHJlYWQ6OnJlbW92ZVN1YmxheWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyV2ViS2l0VGhyZWFkOjpyZXBsYWNlU3VibGF5ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJXZWJLaXRUaHJlYWQ6OmluZGV4T2ZTdWJsYXllcik6CisgICAgICAg
IChXZWJDb3JlOjpMYXllcldlYktpdFRocmVhZDo6c2V0Qm91bmRzKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyV2ViS2l0VGhyZWFkOjpzZXRGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
cldlYktpdFRocmVhZDo6cm9vdExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyV2ViS2l0
VGhyZWFkOjpyZW1vdmVBbGxTdWJsYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJXZWJL
aXRUaHJlYWQ6OnNldFN1YmxheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllcldlYktpdFRo
cmVhZDo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyV2Vi
S2l0VGhyZWFkOjpzZXROZWVkc0Rpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJXZWJL
aXRUaHJlYWQ6OnVwZGF0ZUxheWVySGllcmFyY2h5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
V2ViS2l0VGhyZWFkOjpzZXRJc01hc2spOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Js
YWNrYmVycnkvTGF5ZXJXZWJLaXRUaHJlYWQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKExheWVyV2ViS2l0VGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyV2Vi
S2l0VGhyZWFkOjpzZXRBbmNob3JQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllcldlYktp
dFRocmVhZDo6c2V0QW5jaG9yUG9pbnRaKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyV2ViS2l0
VGhyZWFkOjpzZXRCYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJXZWJL
aXRUaHJlYWQ6OnNldEJvcmRlckNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyV2ViS2l0
VGhyZWFkOjpzZXRCb3JkZXJXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllcldlYktpdFRo
cmVhZDo6c2V0RG91YmxlU2lkZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJXZWJLaXRUaHJl
YWQ6OnNldE1hc2tzVG9Cb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJXZWJLaXRUaHJl
YWQ6OnNldE1hc2tMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllcldlYktpdFRocmVhZDo6
bWFza0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyV2ViS2l0VGhyZWFkOjpzZXRSZXBs
aWNhTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJXZWJLaXRUaHJlYWQ6OnJlcGxpY2FM
YXllcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllcldlYktpdFRocmVhZDo6c2V0TmVlZHNEaXNw
bGF5T25Cb3VuZHNDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJXZWJLaXRUaHJlYWQ6
OnNldE9wYWNpdHkpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJXZWJLaXRUaHJlYWQ6OnNldE9w
YXF1ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllcldlYktpdFRocmVhZDo6c2V0UG9zaXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJXZWJLaXRUaHJlYWQ6OmdldFN1YmxheWVycyk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllcldlYktpdFRocmVhZDo6c2V0U3VibGF5ZXJUcmFuc2Zvcm0p
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJXZWJLaXRUaHJlYWQ6OnN1cGVybGF5ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJXZWJLaXRUaHJlYWQ6OnNldFRyYW5zZm9ybSk6CisgICAgICAg
IChXZWJDb3JlOjpMYXllcldlYktpdFRocmVhZDo6c2V0UHJlc2VydmVzM0QpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJXZWJLaXRUaHJlYWQ6OnNldEZpeGVkUG9zaXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJXZWJLaXRUaHJlYWQ6OnNldEhhc0ZpeGVkQ29udGFpbmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyV2ViS2l0VGhyZWFkOjpzZXRIYXNGaXhlZEFuY2VzdG9ySW5ET01U
cmVlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyV2ViS2l0VGhyZWFkOjpjb250ZW50cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllcldlYktpdFRocmVhZDo6c2V0T3duZXIpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJXZWJLaXRUaHJlYWQ6OmRyYXdzQ29udGVudCk6CisgICAgICAgIChXZWJD
b3JlOjpMYXllcldlYktpdFRocmVhZDo6bGF5ZXJDb21wb3NpdGluZ1RocmVhZCk6CisgICAgICAg
IChXZWJDb3JlOjpMYXllcldlYktpdFRocmVhZDo6c2V0QWJzb2x1dGVPZmZzZXQpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJXZWJLaXRUaHJlYWQ6OmNvbnRlbnRzU2NhbGUpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJXZWJLaXRUaHJlYWQ6OnNldFJ1bm5pbmdBbmltYXRpb25zKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyV2ViS2l0VGhyZWFkOjpzZXRTdXNwZW5kZWRBbmltYXRpb25zKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyV2ViS2l0VGhyZWFkOjpzZXROZWVkc1RleHR1cmUpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJXZWJLaXRUaHJlYWQ6OnNldExheWVyUHJvZ3JhbVNoYWRl
cik6CisgICAgICAgIChXZWJDb3JlOjpMYXllcldlYktpdFRocmVhZDo6aXNEcmF3YWJsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllcldlYktpdFRocmVhZDo6Ym91bmRzQ2hhbmdlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllcldlYktpdFRocmVhZDo6c2V0U3VwZXJsYXllcik6CisgICAgICAg
IChXZWJDb3JlOjpMYXllcldlYktpdFRocmVhZDo6bnVtU3VibGF5ZXJzKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L1BsdWdpbkxheWVyV2ViS2l0VGhyZWFkLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkxheWVy
V2ViS2l0VGhyZWFkOjpQbHVnaW5MYXllcldlYktpdFRocmVhZCk6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5MYXllcldlYktpdFRocmVhZDo6flBsdWdpbkxheWVyV2ViS2l0VGhyZWFkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpbkxheWVyV2ViS2l0VGhyZWFkOjpzZXRQbHVnaW5WaWV3KToK
KyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkxheWVyV2ViS2l0VGhyZWFkOjpzZXRIb2xlUHVuY2hS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkxheWVyV2ViS2l0VGhyZWFkOjpzZXROZWVk
c0Rpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luTGF5ZXJXZWJLaXRUaHJlYWQ6OnVw
ZGF0ZVRleHR1cmVDb250ZW50c0lmTmVlZGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9ibGFja2JlcnJ5L1BsdWdpbkxheWVyV2ViS2l0VGhyZWFkLmg6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChQbHVnaW5MYXllcldlYktpdFRocmVhZCk6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5MYXllcldlYktpdFRocmVhZDo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L1ZpZGVvTGF5ZXJXZWJLaXRUaHJlYWQuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9MYXllcldlYktp
dFRocmVhZDo6VmlkZW9MYXllcldlYktpdFRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpWaWRl
b0xheWVyV2ViS2l0VGhyZWFkOjp+VmlkZW9MYXllcldlYktpdFRocmVhZCk6CisgICAgICAgIChX
ZWJDb3JlOjpWaWRlb0xheWVyV2ViS2l0VGhyZWFkOjpzZXRNZWRpYVBsYXllcik6CisgICAgICAg
IChXZWJDb3JlOjpWaWRlb0xheWVyV2ViS2l0VGhyZWFkOjpzZXRIb2xlUHVuY2hSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJXZWJLaXRUaHJlYWQ6OnNldE5lZWRzRGlzcGxheSk6
CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0xheWVyV2ViS2l0VGhyZWFkOjpib3VuZHNDaGFuZ2Vk
KToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJXZWJLaXRUaHJlYWQ6OnVwZGF0ZVRleHR1
cmVDb250ZW50c0lmTmVlZGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2Jl
cnJ5L1ZpZGVvTGF5ZXJXZWJLaXRUaHJlYWQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFZpZGVvTGF5ZXJXZWJLaXRUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Vmlk
ZW9MYXllcldlYktpdFRocmVhZDo6Y3JlYXRlKToKKwogMjAxMi0wMi0yOSAgSmFzb24gTGl1ICA8
amFzb24ubGl1QHRvcmNobW9iaWxlLmNvbS5jbj4KIAogICAgICAgICBbQmxhY2tCZXJyeV1NYWtl
IGFib3V0OmNhY2hlIGZlYXR1cmUgYXZhaWxhYmxlIGluIHJlbGVhc2UgdmVyc2lvbi4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvQ2FudmFz
TGF5ZXJXZWJLaXRUaHJlYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YmxhY2tiZXJyeS9DYW52YXNMYXllcldlYktpdFRocmVhZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGQyMDMy
Njc5MGI1MWUzNTZiZDUzMGE3OGZkOGI5Mjk2ZGE1OTg5MwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvQ2FudmFzTGF5ZXJXZWJL
aXRUaHJlYWQuY3BwCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
LCAyMDExLCAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rvbiwg
TUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJDYW52YXNMYXllcldlYktpdFRocmVhZC5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKSAmJiBFTkFCTEUoU0tJQV9HUFVfQ0FOVkFTKQorCisjaW5jbHVkZSAiSFRNTENhbnZh
c0VsZW1lbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCisKKyNpbmNsdWRl
IDxCbGFja0JlcnJ5UGxhdGZvcm1HcmFwaGljcy5oPgorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgor
I2luY2x1ZGUgPEdyR0xUZXh0dXJlLmg+CisjaW5jbHVkZSA8U2tHcHVEZXZpY2UuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitDYW52YXNMYXllcldlYktpdFRocmVhZDo6Q2FudmFzTGF5ZXJX
ZWJLaXRUaHJlYWQoSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcykKKyAgICA6IExheWVyV2ViS2l0
VGhyZWFkKExheWVyLCAwKQoreworICAgIHNldENhbnZhcyhjYW52YXMpOworfQorCitDYW52YXNM
YXllcldlYktpdFRocmVhZDo6fkNhbnZhc0xheWVyV2ViS2l0VGhyZWFkKCkKK3sKKyAgICBpZiAo
bV90ZXhJRCkgeworICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6Om1ha2VT
aGFyZWRSZXNvdXJjZUNvbnRleHRDdXJyZW50KEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGlj
czo6R0xFUzIpOworICAgICAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZtX3RleElEKTsKKyAgICB9
Cit9CisKK3ZvaWQgQ2FudmFzTGF5ZXJXZWJLaXRUaHJlYWQ6OnNldENhbnZhcyhIVE1MQ2FudmFz
RWxlbWVudCogY2FudmFzKQoreworICAgIG1fY2FudmFzID0gY2FudmFzOworICAgIHNldE5lZWRz
VGV4dHVyZShpc0RyYXdhYmxlKCkgJiYgY2FudmFzKTsKKyAgICBzZXRMYXllclByb2dyYW1TaGFk
ZXIoTGF5ZXJQcm9ncmFtU2hhZGVyUkdCQSk7CisgICAgc2V0TmVlZHNEaXNwbGF5KCk7Cit9CisK
K3ZvaWQgQ2FudmFzTGF5ZXJXZWJLaXRUaHJlYWQ6OnNldE5lZWRzRGlzcGxheSgpCit7CisgICAg
bV9uZWVkc0Rpc3BsYXkgPSB0cnVlOworICAgIHNldE5lZWRzQ29tbWl0KCk7Cit9CisKK3ZvaWQg
Q2FudmFzTGF5ZXJXZWJLaXRUaHJlYWQ6OnVwZGF0ZVRleHR1cmVDb250ZW50c0lmTmVlZGVkKCkK
K3sKKyAgICBpZiAoIW1fbmVlZHNEaXNwbGF5KQorICAgICAgICByZXR1cm47CisKKyAgICBtX25l
ZWRzRGlzcGxheSA9IGZhbHNlOworCisgICAgaWYgKCFtX2NhbnZhcyB8fCAhbV9jYW52YXMtPmRy
YXdpbmdDb250ZXh0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFNrR3B1RGV2aWNlKiBncHVE
ZXZpY2UgPSBzdGF0aWNfY2FzdDxTa0dwdURldmljZSo+KG1fY2FudmFzLT5kcmF3aW5nQ29udGV4
dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmdldERldmljZSgpKTsKKyAgICBncHVE
ZXZpY2UtPm1ha2VSZW5kZXJUYXJnZXRDdXJyZW50KCk7CisgICAgLy8gV2Uga25vdyB0aGlzIGlz
IGEgR3JHTFRleHR1cmUKKyAgICBpZiAoR3JHTFRleHR1cmUqIGRldmljZVRleHR1cmUgPSAoR3JH
TFRleHR1cmUqKWdwdURldmljZS0+YWNjZXNzVGV4dHVyZSgpKSB7CisgICAgICAgIG1fdGV4V2lk
dGggPSBkZXZpY2VUZXh0dXJlLT5hbGxvY1dpZHRoKCk7CisgICAgICAgIG1fdGV4SGVpZ2h0ID0g
ZGV2aWNlVGV4dHVyZS0+YWxsb2NIZWlnaHQoKTsKKyAgICB9CisKKyAgICBHTGludCBwcmV2aW91
c1RleHR1cmU7CisgICAgZ2xHZXRJbnRlZ2VydihHTF9URVhUVVJFX0JJTkRJTkdfMkQsICZwcmV2
aW91c1RleHR1cmUpOworCisgICAgaWYgKCFtX3RleElEKSB7CisgICAgICAgIGdsR2VuVGV4dHVy
ZXMoMSwgJm1fdGV4SUQpOworICAgICAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1f
dGV4SUQpOworICAgICAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVS
RV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOworICAgICAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVY
VFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOworICAgICAgICBnbFRl
eFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RP
X0VER0UpOworICAgICAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVS
RV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOworICAgICAgICBnbFRleEltYWdlMkQoR0xfVEVY
VFVSRV8yRCwgMCwgR0xfUkdCQSwgbV9jYW52YXMtPndpZHRoKCksIG1fY2FudmFzLT5oZWlnaHQo
KSwgMCwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMCk7CisKKyAgICAgICAgY3JlYXRlRnJv
bnRCdWZmZXJMb2NrKCk7CisgICAgfQorCisgICAgcHRocmVhZF9tdXRleF9sb2NrKG1fZnJvbnRC
dWZmZXJMb2NrKTsKKyAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fdGV4SUQpOwor
ICAgIGdsQ29weVRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgR0xfUkdCQSwgMCwgMCwgbV90
ZXhXaWR0aCwgbV90ZXhIZWlnaHQsIDApOworICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8y
RCwgcHJldmlvdXNUZXh0dXJlKTsKKyAgICBwdGhyZWFkX211dGV4X3VubG9jayhtX2Zyb250QnVm
ZmVyTG9jayk7Cit9CisKK30KKworI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykgJiYgRU5BQkxFKFNLSUFfR1BVX0NBTlZBUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvQ2FudmFzTGF5ZXJXZWJLaXRUaHJlYWQuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvQ2FudmFzTGF5ZXJX
ZWJLaXRUaHJlYWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YTczMWNlODI0MGQzN2UwMmJhNDBjMGE5NjhhMTll
MDhiNmIxOGE1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYmxhY2tiZXJyeS9DYW52YXNMYXllcldlYktpdFRocmVhZC5oCkBAIC0wLDAgKzEsNTUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEsIDIwMTIgUmVzZWFyY2ggSW4gTW90
aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0
ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKwor
I2lmbmRlZiBDYW52YXNMYXllcldlYktpdFRocmVhZF9oCisjZGVmaW5lIENhbnZhc0xheWVyV2Vi
S2l0VGhyZWFkX2gKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgRU5BQkxF
KFNLSUFfR1BVX0NBTlZBUykKKworI2luY2x1ZGUgIkxheWVyV2ViS2l0VGhyZWFkLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSFRNTENhbnZhc0VsZW1lbnQ7CisKK2NsYXNzIENh
bnZhc0xheWVyV2ViS2l0VGhyZWFkIDogcHVibGljIExheWVyV2ViS2l0VGhyZWFkIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXNMYXllcldlYktpdFRocmVhZD4gY3JlYXRl
KEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IENhbnZhc0xheWVyV2ViS2l0VGhyZWFkKGNhbnZhcykpOworICAgIH0KKworICAgIHZp
cnR1YWwgfkNhbnZhc0xheWVyV2ViS2l0VGhyZWFkKCk7CisKKyAgICB2b2lkIHNldENhbnZhcyhI
VE1MQ2FudmFzRWxlbWVudCopOworCisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheSgp
OworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHR1cmVDb250ZW50c0lm
TmVlZGVkKCk7CisKK3ByaXZhdGU6CisgICAgQ2FudmFzTGF5ZXJXZWJLaXRUaHJlYWQoSFRNTENh
bnZhc0VsZW1lbnQqKTsKKyAgICBib29sIG1fbmVlZHNEaXNwbGF5OworfTsKKworfQorCisjZW5k
aWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBFTkFCTEUoU0tJQV9HUFVfQ0FO
VkFTKQorCisjZW5kaWYgLy8gQ2FudmFzTGF5ZXJXZWJLaXRUaHJlYWRfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckRhdGEuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJEYXRhLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNTc3NDZmYTY0NmZiNGQ2NDJhYmExODlkYWY2MjJkMDAwMTg0OGZhMwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVy
cnkvTGF5ZXJEYXRhLmgKQEAgLTAsMCArMSwyMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAsIDIwMTEsIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisKKyNpZm5kZWYgTGF5ZXJEYXRhX2gKKyNkZWZpbmUgTGF5ZXJEYXRhX2gKKworI2luY2x1ZGUg
IkNvbG9yLmgiCisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5o
IgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJMYXllckFuaW1hdGlvbi5oIgorI2lu
Y2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXgu
aCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEhUTUxDYW52YXNFbGVtZW50
OworY2xhc3MgUGx1Z2luVmlldzsKKyNpZiBFTkFCTEUoVklERU8pCitjbGFzcyBNZWRpYVBsYXll
cjsKKyNlbmRpZgorCitjbGFzcyBMYXllckRhdGEgeworcHVibGljOgorICAgIGVudW0gTGF5ZXJU
eXBlIHsgTGF5ZXIsIFRyYW5zZm9ybUxheWVyLCBXZWJHTExheWVyIH07CisgICAgZW51bSBGaWx0
ZXJUeXBlIHsgTGluZWFyLCBOZWFyZXN0LCBUcmlsaW5lYXIsIExhbmN6b3MgfTsKKyAgICBlbnVt
IExheWVyUHJvZ3JhbVNoYWRlciB7IExheWVyUHJvZ3JhbVNoYWRlclJHQkEgPSAwLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgTGF5ZXJQcm9ncmFtU2hhZGVyQkdSQSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIE51bWJlck9mTGF5ZXJQcm9ncmFtU2hhZGVycyB9OworCisg
ICAgTGF5ZXJEYXRhKExheWVyVHlwZSB0eXBlKQorICAgICAgICA6IG1fbGF5ZXJUeXBlKHR5cGUp
CisgICAgICAgICwgbV9hbmNob3JQb2ludCgwLjUsIDAuNSkKKyAgICAgICAgLCBtX2JhY2tncm91
bmRDb2xvcigwLCAwLCAwLCAwKQorICAgICAgICAsIG1fYm9yZGVyQ29sb3IoMCwgMCwgMCwgMCkK
KyAgICAgICAgLCBtX29wYWNpdHkoMS4wKQorICAgICAgICAsIG1fYW5jaG9yUG9pbnRaKDAuMCkK
KyAgICAgICAgLCBtX2JvcmRlcldpZHRoKDAuMCkKKyAgICAgICAgLCBtX2xheWVyUHJvZ3JhbVNo
YWRlcihMYXllclByb2dyYW1TaGFkZXJCR1JBKQorICAgICAgICAsIG1fcGx1Z2luVmlldygwKQor
I2lmIEVOQUJMRShWSURFTykKKyAgICAgICAgLCBtX21lZGlhUGxheWVyKDApCisjZW5kaWYKKyAg
ICAgICAgLCBtX3RleElEKDApCisgICAgICAgICwgbV90ZXhXaWR0aCgwKQorICAgICAgICAsIG1f
dGV4SGVpZ2h0KDApCisgICAgICAgICwgbV9jYW52YXMoMCkKKyAgICAgICAgLCBtX2Zyb250QnVm
ZmVyTG9jaygwKQorICAgICAgICAsIG1fc3VzcGVuZFRpbWUoMCkKKyAgICAgICAgLCBtX2RvdWJs
ZVNpZGVkKHRydWUpCisgICAgICAgICwgbV9tYXNrc1RvQm91bmRzKGZhbHNlKQorICAgICAgICAs
IG1fb3BhcXVlKHRydWUpCisgICAgICAgICwgbV9wcmVzZXJ2ZXMzRChmYWxzZSkKKyAgICAgICAg
LCBtX25lZWRzRGlzcGxheU9uQm91bmRzQ2hhbmdlKGZhbHNlKQorICAgICAgICAsIG1fbmVlZHNU
ZXh0dXJlKGZhbHNlKQorICAgICAgICAsIG1faXNGaXhlZFBvc2l0aW9uKGZhbHNlKQorICAgICAg
ICAsIG1faGFzRml4ZWRDb250YWluZXIoZmFsc2UpCisgICAgICAgICwgbV9oYXNGaXhlZEFuY2Vz
dG9ySW5ET01UcmVlKGZhbHNlKQorICAgICAgICAsIG1faXNWaXNpYmxlKHRydWUpCisgICAgewor
ICAgIH0KKworICAgIHZpcnR1YWwgfkxheWVyRGF0YSgpCisgICAgeworICAgIH0KKworICAgIEZs
b2F0UG9pbnQgYW5jaG9yUG9pbnQoKSBjb25zdCB7IHJldHVybiBtX2FuY2hvclBvaW50OyB9CisK
KyAgICBmbG9hdCBhbmNob3JQb2ludFooKSBjb25zdCB7IHJldHVybiBtX2FuY2hvclBvaW50Wjsg
fQorCisgICAgQ29sb3IgYmFja2dyb3VuZENvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZ3Jv
dW5kQ29sb3I7IH0KKworICAgIENvbG9yIGJvcmRlckNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9i
b3JkZXJDb2xvcjsgfQorCisgICAgZmxvYXQgYm9yZGVyV2lkdGgoKSBjb25zdCB7IHJldHVybiBt
X2JvcmRlcldpZHRoOyB9CisKKyAgICBJbnRTaXplIGJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIG1f
Ym91bmRzOyB9CisKKyAgICBib29sIGRvdWJsZVNpZGVkKCkgY29uc3QgeyByZXR1cm4gbV9kb3Vi
bGVTaWRlZDsgfQorCisgICAgRmxvYXRSZWN0IGZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9mcmFt
ZTsgfQorCisgICAgYm9vbCBtYXNrc1RvQm91bmRzKCkgY29uc3QgeyByZXR1cm4gbV9tYXNrc1Rv
Qm91bmRzOyB9CisKKyAgICBmbG9hdCBvcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9vcGFjaXR5
OyB9CisKKyAgICBib29sIG9wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhcXVlOyB9CisKKyAg
ICBGbG9hdFBvaW50IHBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQorCisg
ICAgLy8gVGhpcyBpcyBjdXJyZW50bHkgb25seSB1c2VkIGZvciBwZXJzcGVjdGl2ZSB0cmFuc2Zv
cm0sIHNlZSBHcmFwaGljc0xheWVyOjpzZXRDaGlsZHJlblRyYW5zZm9ybSgpCisgICAgY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIHN1YmxheWVyVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4g
bV9zdWJsYXllclRyYW5zZm9ybTsgfQorCisgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IHRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtOyB9CisKKyAgICBib29sIHBy
ZXNlcnZlczNEKCkgY29uc3QgeyByZXR1cm4gbV9wcmVzZXJ2ZXMzRDsgfQorCisgICAgdW5zaWdu
ZWQgZ2V0VGV4dHVyZUlEKCkgY29uc3QgeyByZXR1cm4gbV90ZXhJRDsgfQorICAgIHZvaWQgc2V0
VGV4dHVyZUlEKHVuc2lnbmVkIGludCB2YWx1ZSkgeyBtX3RleElEID0gdmFsdWU7IH0KKworICAg
IGJvb2wgbmVlZHNUZXh0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9sYXllclR5cGUgPT0gV2ViR0xM
YXllciA/IHRydWUgOiBtX25lZWRzVGV4dHVyZTsgfQorCisgICAgTGF5ZXJQcm9ncmFtU2hhZGVy
IGxheWVyUHJvZ3JhbVNoYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJQcm9ncmFtU2hhZGVy
OyB9CisKKyAgICBib29sIGlzRml4ZWRQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faXNGaXhl
ZFBvc2l0aW9uOyB9CisgICAgYm9vbCBoYXNGaXhlZENvbnRhaW5lcigpIGNvbnN0IHsgcmV0dXJu
IG1faGFzRml4ZWRDb250YWluZXI7IH0KKyAgICBib29sIGhhc0ZpeGVkQW5jZXN0b3JJbkRPTVRy
ZWUoKSBjb25zdCB7IHJldHVybiBtX2hhc0ZpeGVkQW5jZXN0b3JJbkRPTVRyZWU7IH0KKworICAg
IFBsdWdpblZpZXcqIHBsdWdpblZpZXcoKSBjb25zdCB7IHJldHVybiBtX3BsdWdpblZpZXc7IH0K
KworICAgIEludFJlY3QgaG9sZVB1bmNoUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1faG9sZVB1bmNo
UmVjdDsgfQorICAgIGJvb2wgaGFzSG9sZVB1bmNoUmVjdCgpIGNvbnN0IHsgcmV0dXJuICFtX2hv
bGVQdW5jaFJlY3QuaXNFbXB0eSgpOyB9CisKKyNpZiBFTkFCTEUoVklERU8pCisgICAgTWVkaWFQ
bGF5ZXIqIG1lZGlhUGxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9tZWRpYVBsYXllcjsgfQorI2Vu
ZGlmCisKKyAgICBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzKCkgY29uc3QgeyByZXR1cm4gbV9j
YW52YXM7IH0KKworICAgIHZvaWQgcmVwbGljYXRlKExheWVyRGF0YSAqdG8pIGNvbnN0IHsgKnRv
ID0gKnRoaXM7IH0KKworICAgIExheWVyVHlwZSBsYXllclR5cGUoKSBjb25zdCB7IHJldHVybiBt
X2xheWVyVHlwZTsgfQorCisgICAgYm9vbCBpbmNsdWRlVmlzaWJpbGl0eSgpIGNvbnN0CisgICAg
eworICAgICAgICBpZiAocGx1Z2luVmlldygpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisK
KyNpZiBFTkFCTEUoVklERU8pCisgICAgICAgIGlmIChtZWRpYVBsYXllcigpKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisjZW5kaWYKKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
Citwcm90ZWN0ZWQ6CisgICAgTGF5ZXJUeXBlIG1fbGF5ZXJUeXBlOworCisgICAgSW50U2l6ZSBt
X2JvdW5kczsKKyAgICBGbG9hdFBvaW50IG1fcG9zaXRpb247CisgICAgRmxvYXRQb2ludCBtX2Fu
Y2hvclBvaW50OworICAgIENvbG9yIG1fYmFja2dyb3VuZENvbG9yOworICAgIENvbG9yIG1fYm9y
ZGVyQ29sb3I7CisKKyAgICBGbG9hdFJlY3QgbV9mcmFtZTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBtX3RyYW5zZm9ybTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3N1YmxheWVyVHJh
bnNmb3JtOworCisgICAgZmxvYXQgbV9vcGFjaXR5OworICAgIGZsb2F0IG1fYW5jaG9yUG9pbnRa
OworICAgIGZsb2F0IG1fYm9yZGVyV2lkdGg7CisKKyAgICBMYXllclByb2dyYW1TaGFkZXIgbV9s
YXllclByb2dyYW1TaGFkZXI7CisKKyAgICBQbHVnaW5WaWV3KiBtX3BsdWdpblZpZXc7CisjaWYg
RU5BQkxFKFZJREVPKQorICAgIE1lZGlhUGxheWVyKiBtX21lZGlhUGxheWVyOworICAgIEludFJl
Y3QgbV9ob2xlUHVuY2hDbGlwUmVjdDsKKyNlbmRpZgorICAgIEludFJlY3QgbV9ob2xlUHVuY2hS
ZWN0OworCisgICAgdW5zaWduZWQgbV90ZXhJRDsKKyAgICB1bnNpZ25lZCBtX3RleFdpZHRoOwor
ICAgIHVuc2lnbmVkIG1fdGV4SGVpZ2h0OworCisgICAgSFRNTENhbnZhc0VsZW1lbnQqIG1fY2Fu
dmFzOworCisgICAgcHRocmVhZF9tdXRleF90KiBtX2Zyb250QnVmZmVyTG9jazsKKworICAgIFZl
Y3RvcjxSZWZQdHI8TGF5ZXJBbmltYXRpb24+ID4gbV9ydW5uaW5nQW5pbWF0aW9uczsKKyAgICBW
ZWN0b3I8UmVmUHRyPExheWVyQW5pbWF0aW9uPiA+IG1fc3VzcGVuZGVkQW5pbWF0aW9uczsKKyAg
ICBkb3VibGUgbV9zdXNwZW5kVGltZTsKKworICAgIHVuc2lnbmVkIG1fZG91YmxlU2lkZWQgOiAx
OworICAgIHVuc2lnbmVkIG1fbWFza3NUb0JvdW5kcyA6IDE7CisgICAgdW5zaWduZWQgbV9vcGFx
dWUgOiAxOworICAgIHVuc2lnbmVkIG1fcHJlc2VydmVzM0QgOiAxOworICAgIHVuc2lnbmVkIG1f
bmVlZHNEaXNwbGF5T25Cb3VuZHNDaGFuZ2UgOiAxOworCisgICAgdW5zaWduZWQgbV9uZWVkc1Rl
eHR1cmUgOiAxOworICAgIHVuc2lnbmVkIG1faXNGaXhlZFBvc2l0aW9uIDogMTsKKyAgICB1bnNp
Z25lZCBtX2hhc0ZpeGVkQ29udGFpbmVyIDogMTsKKyAgICB1bnNpZ25lZCBtX2hhc0ZpeGVkQW5j
ZXN0b3JJbkRPTVRyZWUgOiAxOworCisgICAgLy8gVGhlIGZvbGxvd2luZyBpcyBvbmx5IGF2YWls
YWJsZSBmb3IgbWVkaWEgKHZpZGVvKSBhbmQgcGx1Z2luIGxheWVycy4KKyAgICB1bnNpZ25lZCBt
X2lzVmlzaWJsZSA6IDE7CisKKyAgICAvLyBDQVVUSU9OOiBhbGwgdGhlIGRhdGEgbWVtYmVycyBh
cmUgY29waWVkIGZyb20gb25lIGluc3RhbmNlIHRvIGFub3RoZXIKKyAgICAvLyBpLmUuIGZyb20g
b25lIHRocmVhZCB0byBhbm90aGVyIGluIHRoZSByZXBsaWNhdGUgbWV0aG9kLgorICAgIC8vIEJl
d2FyZSBvZiBhZGRpbmcgYW55IG1lbWJlciBkYXRhIGUuZy4gb2YgdHlwZSBTdHJpbmcgd2hvc2Ug
ZGVmYXVsdAorICAgIC8vIGFzc2lnbm1lbnQgb3BlcmF0b3IgZG9lc24ndCBiZWhhdmUgcHJvcGVy
bHkgaWYgdGhlIHR3byBTdHJpbmcgaW5zdGFuY2VzCisgICAgLy8gYXJlIG93bmVkIGJ5IGRpZmZl
cmVudCB0aHJlYWRzLgorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjZW5kaWYgLy8gTGF5ZXJEYXRhX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5
ZXJXZWJLaXRUaHJlYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxh
Y2tiZXJyeS9MYXllcldlYktpdFRocmVhZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmNhZGYzNTlkMGNjYjJh
NjEwMjVmMWQ5MDc1ZDg1NzZlNWEzMGEwYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJXZWJLaXRUaHJlYWQuY3BwCkBA
IC0wLDAgKzEsNDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExLCAyMDEyIFJl
c2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiTGF5
ZXJXZWJLaXRUaHJlYWQuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1
ZGUgIkluc3RydW1lbnRlZFBsYXRmb3JtQ2FudmFzLmgiCisjaW5jbHVkZSAiTGF5ZXJDb21wb3Np
dGluZ1RocmVhZC5oIgorI2luY2x1ZGUgIkxheWVyTWVzc2FnZS5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtQ29udGV4dFNraWEuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKKyNpbmNs
dWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorCisjaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRm
b3JtR3JhcGhpY3MuaD4KKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCitQYXNzUmVmUHRyPExheWVyV2Vi
S2l0VGhyZWFkPiBMYXllcldlYktpdFRocmVhZDo6Y3JlYXRlKExheWVyVHlwZSB0eXBlLCBHcmFw
aGljc0xheWVyQmxhY2tCZXJyeSogb3duZXIpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBM
YXllcldlYktpdFRocmVhZCh0eXBlLCBvd25lcikpOworfQorCitMYXllcldlYktpdFRocmVhZDo6
TGF5ZXJXZWJLaXRUaHJlYWQoTGF5ZXJUeXBlIHR5cGUsIEdyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5
KiBvd25lcikKKyAgICA6IExheWVyRGF0YSh0eXBlKQorICAgICwgbV9vd25lcihvd25lcikKKyAg
ICAsIG1fc3VwZXJsYXllcigwKQorICAgICwgbV9jb250ZW50cygwKQorICAgICwgbV9zY2FsZSgx
LjApCisgICAgLCBtX2lzRHJhd2FibGUoZmFsc2UpCisgICAgLCBtX2lzTWFzayhmYWxzZSkKK3sK
KyAgICBtX3RpbGVyID0gTGF5ZXJUaWxlcjo6Y3JlYXRlKHRoaXMpOworICAgIG1fbGF5ZXJDb21w
b3NpdGluZ1RocmVhZCA9IExheWVyQ29tcG9zaXRpbmdUaHJlYWQ6OmNyZWF0ZSh0eXBlLCBtX3Rp
bGVyKTsKK30KKworTGF5ZXJXZWJLaXRUaHJlYWQ6On5MYXllcldlYktpdFRocmVhZCgpCit7Cisg
ICAgbV9sYXllckNvbXBvc2l0aW5nVGhyZWFkLT5jbGVhckFuaW1hdGlvbnMoKTsKKworICAgIGlm
IChtX2Zyb250QnVmZmVyTG9jaykKKyAgICAgICAgcHRocmVhZF9tdXRleF9kZXN0cm95KG1fZnJv
bnRCdWZmZXJMb2NrKTsKKworICAgIG1fdGlsZXItPmxheWVyV2ViS2l0VGhyZWFkRGVzdHJveWVk
KCk7CisKKyAgICAvLyBPdXIgc3VwZXJsYXllciBzaG91bGQgYmUgaG9sZGluZyBhIHJlZmVyZW5j
ZSB0byB1cyBzbyB0aGVyZSBzaG91bGQgYmUgbm8KKyAgICAvLyB3YXkgZm9yIHVzIHRvIGJlIGRl
c3Ryb3llZCB3aGlsZSB3ZSBzdGlsbCBoYXZlIGEgc3VwZXJsYXllci4KKyAgICBBU1NFUlQoIXN1
cGVybGF5ZXIoKSk7CisKKyAgICAvLyBSZW1vdmUgdGhlIHN1cGVybGF5ZXIgcmVmZXJlbmNlIGZy
b20gYWxsIHN1YmxheWVycy4KKyAgICByZW1vdmVBbGxTdWJsYXllcnMoKTsKK30KKworU2tCaXRt
YXAgTGF5ZXJXZWJLaXRUaHJlYWQ6OnBhaW50Q29udGVudHMoY29uc3QgSW50UmVjdCYgY29udGVu
dHNSZWN0LCBkb3VibGUgc2NhbGUsIGJvb2wqIGlzU29saWRDb2xvciwgQ29sb3IqIGNvbG9yKQor
eworICAgIC8vIERvbid0IHRyeSB0byBhbGxvY2F0ZSBpbWFnZSBkYXRhIGJpZ2dlciB0aGFuIHRo
aXMuIFRoaXMgc2hvdWxkIGJlIGJpZworICAgIC8vIGVub3VnaCB0byBhY2NvbW9kYXRlIGEgaHVn
ZSBpU2Nyb2xsIHVzZSBjYXNlLgorICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgaGFjayB0byB3b3Jr
IGFyb3VuZCBhIGNyYXNoIGJ1ZyBvbiBtYXBzLmJpbmcuY29tIHdoZXJlCisgICAgLy8gYSAodmlz
dWFsbHkgZW1wdHkpIGxheWVyIGJlY29tZXMgdG9vIGJpZy4KKyAgICBzdGF0aWMgY29uc3QgaW50
IG1heGltdW1CaXRtYXBTaXplSW5CeXRlcyA9IDQwICogMTAyNCAqIDEwMjQ7CisgICAgc3RhdGlj
IGNvbnN0IGludCBieXRlc1BlclBpeGVsID0gNDsKKworICAgIGlmIChpc1NvbGlkQ29sb3IpCisg
ICAgICAgICppc1NvbGlkQ29sb3IgPSBmYWxzZTsKKworICAgIGlmIChjb250ZW50c1JlY3Qud2lk
dGgoKSAqIGNvbnRlbnRzUmVjdC5oZWlnaHQoKSAqIGJ5dGVzUGVyUGl4ZWwgPiBtYXhpbXVtQml0
bWFwU2l6ZUluQnl0ZXMpCisgICAgICAgIHJldHVybiBTa0JpdG1hcCgpOworCisgICAgU2tCaXRt
YXAgYml0bWFwOworCisgICAgLy8gS2VlcCB0aGUgY2FudmFzIGFsaXZlIHVudGlsIHdlJ3JlIGRv
bmUgZXh0cmFjdGluZyBpdHMgcGl4ZWxzCisgICAgT3duUHRyPEluc3RydW1lbnRlZFBsYXRmb3Jt
Q2FudmFzPiBjYW52YXM7CisKKyAgICBpZiAoZHJhd3NDb250ZW50KCkpIHsgLy8gTGF5ZXIgY29u
dGVudHMgbXVzdCBiZSBkcmF3biBpbnRvIGEgY2FudmFzLgorICAgICAgICBJbnRSZWN0IHVudHJh
bnNmb3JtZWRDb250ZW50c1JlY3QgPSBjb250ZW50c1JlY3Q7CisKKyAgICAgICAgY2FudmFzID0g
YWRvcHRQdHIobmV3IEluc3RydW1lbnRlZFBsYXRmb3JtQ2FudmFzKGNvbnRlbnRzUmVjdC53aWR0
aCgpLCBjb250ZW50c1JlY3QuaGVpZ2h0KCksIGZhbHNlLCAwKSk7CisgICAgICAgIFBsYXRmb3Jt
Q29udGV4dFNraWEgc2tpYUNvbnRleHQoY2FudmFzLmdldCgpKTsKKworICAgICAgICBHcmFwaGlj
c0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KCZza2lhQ29udGV4dCk7CisgICAgICAgIGdyYXBoaWNz
Q29udGV4dC50cmFuc2xhdGUoLWNvbnRlbnRzUmVjdC54KCksIC1jb250ZW50c1JlY3QueSgpKTsK
KworICAgICAgICBpZiAoc2NhbGUgIT0gMS4wKSB7CisgICAgICAgICAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBtYXRyaXg7CisgICAgICAgICAgICBtYXRyaXguc2NhbGUoMS4wIC8gc2NhbGUpOwor
ICAgICAgICAgICAgdW50cmFuc2Zvcm1lZENvbnRlbnRzUmVjdCA9IG1hdHJpeC5tYXBSZWN0KGNv
bnRlbnRzUmVjdCk7CisKKyAgICAgICAgICAgIC8vIFdlIGV4dHJhY3QgZnJvbSB0aGUgY29udGVu
dHNSZWN0IGJ1dCBkcmF3IGEgc2xpZ2h0bHkgbGFyZ2VyIHJlZ2lvbiB0aGFuCisgICAgICAgICAg
ICAvLyB3ZSB3ZXJlIHRvbGQgdG8sIGluIG9yZGVyIHRvIGF2b2lkIHBpeGVscyBiZWluZyByZW5k
ZXJlZCBvbmx5IHBhcnRpYWxseS4KKyAgICAgICAgICAgIGNvbnN0IGludCBhdExlYXN0T25lRGV2
aWNlUGl4ZWwgPSBzdGF0aWNfY2FzdDxpbnQ+KGNlaWxmKDEuMCAvIHNjYWxlKSk7CisgICAgICAg
ICAgICB1bnRyYW5zZm9ybWVkQ29udGVudHNSZWN0LmluZmxhdGUoYXRMZWFzdE9uZURldmljZVBp
eGVsKTsKKworICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNjYWxlKEZsb2F0U2l6ZShzY2Fs
ZSwgc2NhbGUpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFJlbmRlckxheWVyQmFja2luZyBk
b2Vzbid0IGFsd2F5cyBjbGlwLCBzbyB3ZSBuZWVkIHRvIGRvIHRoaXMgYnkgb3Vyc2VsdmVzLgor
ICAgICAgICBncmFwaGljc0NvbnRleHQuY2xpcCh1bnRyYW5zZm9ybWVkQ29udGVudHNSZWN0KTsK
KyAgICAgICAgbV9vd25lci0+cGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMoZ3JhcGhpY3NDb250
ZXh0LCB1bnRyYW5zZm9ybWVkQ29udGVudHNSZWN0KTsKKworICAgICAgICBiaXRtYXAgPSBjYW52
YXMtPmdldERldmljZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2UpOworICAgICAgICBpZiAoaXNTb2xp
ZENvbG9yKSB7CisgICAgICAgICAgICAqaXNTb2xpZENvbG9yID0gY2FudmFzLT5pc1NvbGlkQ29s
b3IoKTsKKyAgICAgICAgICAgIGlmIChjb2xvcikKKyAgICAgICAgICAgICAgICAqY29sb3IgPSBj
YW52YXMtPnNvbGlkQ29sb3IoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEFTU0VSVCghYml0
bWFwLmlzTnVsbCgpKTsKKworICAgIC8vIEZJWE1FOiBkbyB3ZSBuZWVkIHRvIHN1cHBvcnQgbW9y
ZSBpbWFnZSBjb25maWd1cmF0aW9ucz8KKyAgICBBU1NFUlQoYml0bWFwLmNvbmZpZygpID09IFNr
Qml0bWFwOjprQVJHQl84ODg4X0NvbmZpZyk7CisgICAgaWYgKGJpdG1hcC5jb25maWcoKSAhPSBT
a0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcpCisgICAgICAgIHJldHVybiBTa0JpdG1hcCgpOwor
CisgICAgcmV0dXJuIGJpdG1hcDsKK30KKworYm9vbCBMYXllcldlYktpdFRocmVhZDo6Y29udGVu
dHNWaXNpYmxlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRzUmVjdCkgY29uc3QKK3sKKyAgICBpZiAo
IW1fb3duZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBtX293bmVyLT5j
b250ZW50c1Zpc2libGUoY29udGVudHNSZWN0KTsKK30KKwordm9pZCBMYXllcldlYktpdFRocmVh
ZDo6Y3JlYXRlRnJvbnRCdWZmZXJMb2NrKCkKK3sKKyAgICBwdGhyZWFkX211dGV4YXR0cl90IG11
dGV4QXR0cmlidXRlczsKKyAgICBwdGhyZWFkX211dGV4YXR0cl9pbml0KCZtdXRleEF0dHJpYnV0
ZXMpOworICAgIG1fZnJvbnRCdWZmZXJMb2NrID0gbmV3IHB0aHJlYWRfbXV0ZXhfdDsKKyAgICBw
dGhyZWFkX211dGV4X2luaXQobV9mcm9udEJ1ZmZlckxvY2ssICZtdXRleEF0dHJpYnV0ZXMpOwor
fQorCit2b2lkIExheWVyV2ViS2l0VGhyZWFkOjp1cGRhdGVUZXh0dXJlQ29udGVudHNJZk5lZWRl
ZCgpCit7CisgICAgbV90aWxlci0+dXBkYXRlVGV4dHVyZUNvbnRlbnRzSWZOZWVkZWQobV9pc01h
c2sgPyAxLjAgOiBjb250ZW50c1NjYWxlKCkpOworfQorCit2b2lkIExheWVyV2ViS2l0VGhyZWFk
OjpzZXRDb250ZW50cyhJbWFnZSogY29udGVudHMpCit7CisgICAgLy8gQ2hlY2sgaWYgdGhlIGlt
YWdlIGhhcyBjaGFuZ2VkLgorICAgIGlmIChtX2NvbnRlbnRzID09IGNvbnRlbnRzKQorICAgICAg
ICByZXR1cm47CisgICAgbV9jb250ZW50cyA9IGNvbnRlbnRzOworICAgIHNldE5lZWRzVGV4dHVy
ZShtX2lzRHJhd2FibGUgJiYgKHRoaXMtPmNvbnRlbnRzKCkgfHwgZHJhd3NDb250ZW50KCkgfHwg
cGx1Z2luVmlldygpKSk7CisKKyAgICBpZiAobV9jb250ZW50cykKKyAgICAgICAgc2V0TmVlZHNE
aXNwbGF5KCk7CisgICAgZWxzZQorICAgICAgICBzZXROZWVkc0NvbW1pdCgpOworfQorCit2b2lk
IExheWVyV2ViS2l0VGhyZWFkOjpzZXREcmF3YWJsZShib29sIGlzRHJhd2FibGUpCit7CisgICAg
aWYgKG1faXNEcmF3YWJsZSA9PSBpc0RyYXdhYmxlKQorICAgICAgICByZXR1cm47CisKKyAgICBt
X2lzRHJhd2FibGUgPSBpc0RyYXdhYmxlOworCisgICAgc2V0TmVlZHNUZXh0dXJlKG1faXNEcmF3
YWJsZSAmJiAoZHJhd3NDb250ZW50KCkgfHwgY29udGVudHMoKSB8fCBwbHVnaW5WaWV3KCkgfHwg
bWVkaWFQbGF5ZXIoKSB8fCBjYW52YXMoKSkpOworICAgIHNldE5lZWRzQ29tbWl0KCk7Cit9CisK
K3ZvaWQgTGF5ZXJXZWJLaXRUaHJlYWQ6OnNldE5lZWRzQ29tbWl0KCkKK3sKKyAgICAvLyBDYWxs
IG5vdGlmeVN5bmNSZXF1aXJlZCgpLCB3aGljaCBpbiB0aGlzIGltcGxlbWVudGF0aW9uIHBsdW1i
cyB0aHJvdWdoIHRvCisgICAgLy8gY2FsbCBzY2hlZHVsZVJvb3RMYXllckNvbW1pdCgpIG9uIHRo
ZSBXZWJWaWV3LCB3aGljaCB3aWxsIGNhdXNlIHVzIHRvIGNvbW1pdAorICAgIC8vIGNoYW5nZXMg
ZG9uZSBvbiB0aGUgV2ViS2l0IHRocmVhZCBmb3IgZGlzcGxheSBvbiB0aGUgQ29tcG9zaXRpbmcg
dGhyZWFkLgorICAgIGlmIChtX293bmVyKQorICAgICAgICBtX293bmVyLT5ub3RpZnlTeW5jUmVx
dWlyZWQoKTsKK30KKwordm9pZCBMYXllcldlYktpdFRocmVhZDo6bm90aWZ5QW5pbWF0aW9uU3Rh
cnRlZChkb3VibGUgdGltZSkKK3sKKyAgICBpZiAobV9vd25lcikKKyAgICAgICAgbV9vd25lci0+
bm90aWZ5QW5pbWF0aW9uU3RhcnRlZCh0aW1lKTsKK30KKwordm9pZCBMYXllcldlYktpdFRocmVh
ZDo6Y29tbWl0T25XZWJLaXRUaHJlYWQoZG91YmxlIHNjYWxlKQoreworICAgIC8vIFVwZGF0aW5n
IHRleHR1cmUgY29udGVudHMgcmVxdWlyZSB0aGUgbGF0ZXN0IHZpc2liaWxpdHkgaW5mby4KKyAg
ICB1cGRhdGVUZXh0dXJlQ29udGVudHMoc2NhbGUpOworCisgICAgLy8gTWFrZSBzdXJlIGFsbCBh
bmltYXRpb25zIGFyZSBzdGFydGVkIGF0IHRoZSBzYW1lIHRpbWUKKyAgICAvLyB0byBhdm9pZCBz
aG93aW5nIGFuaW1hdGlvbnMgb3V0LW9mLXN5bmMuCisgICAgLy8gRG8gdGhpcyBhZnRlciB1cGRh
dGluZyB0ZXh0dXJlIGNvbnRlbnRzLCBiZWNhdXNlIHRoYXQgY2FuIGJlIGEgc2xvdworICAgIC8v
IG9wZXJhdGlvbi4KKyAgICBzdGFydEFuaW1hdGlvbnMoY3VycmVudFRpbWUoKSk7Cit9CisKK3Zv
aWQgTGF5ZXJXZWJLaXRUaHJlYWQ6OnN0YXJ0QW5pbWF0aW9ucyhkb3VibGUgdGltZSkKK3sKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcnVubmluZ0FuaW1hdGlvbnMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgaWYgKCFtX3J1bm5pbmdBbmltYXRpb25zW2ldLT5zdGFydFRpbWUoKSkgewor
ICAgICAgICAgICAgbV9ydW5uaW5nQW5pbWF0aW9uc1tpXS0+c2V0U3RhcnRUaW1lKHRpbWUpOwor
ICAgICAgICAgICAgbm90aWZ5QW5pbWF0aW9uU3RhcnRlZCh0aW1lKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHNpemVfdCBsaXN0U2l6ZSA9IG1fc3VibGF5ZXJzLnNpemUoKTsKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGxpc3RTaXplOyBpKyspCisgICAgICAgIG1fc3VibGF5ZXJzW2ld
LT5zdGFydEFuaW1hdGlvbnModGltZSk7Cit9CisKK3ZvaWQgTGF5ZXJXZWJLaXRUaHJlYWQ6OnVw
ZGF0ZVRleHR1cmVDb250ZW50cyhkb3VibGUgc2NhbGUpCit7CisgICAgaWYgKG1fc2NhbGUgIT0g
c2NhbGUpIHsKKyAgICAgICAgbV9zY2FsZSA9IHNjYWxlOworCisgICAgICAgIC8vIE9ubHkgd2Vi
IGNvbnRlbnQgY2FuIHJlZHJhdyBhdCB0aGUgbmV3IHNjYWxlLgorICAgICAgICAvLyBDYW52YXMs
IGltYWdlcywgdmlkZW8gZXRjIGNhbid0LgorICAgICAgICBpZiAoZHJhd3NDb250ZW50KCkpCisg
ICAgICAgICAgICBzZXROZWVkc0Rpc3BsYXkoKTsKKyAgICB9CisKKyAgICB1cGRhdGVUZXh0dXJl
Q29udGVudHNJZk5lZWRlZCgpOworCisgICAgaWYgKGluY2x1ZGVWaXNpYmlsaXR5KCkpIHsKKyAg
ICAgICAgLy8gVGhlIFJlbmRlckxheWVyQmFja2luZyBjYXN0IGxvb2tzIHVuc2FmZSBnaXZlbiB0
aGF0IHRoZXJlIGFyZSB0d28gY2xhc3NlcworICAgICAgICAvLyBkZXJpdmVkIGZyb20gR3JhcGhp
Y3NMYXllckNsaWVudCBidXQgdGhpcyBjb2RlIGlzIG9ubHkgcmVhY2hhYmxlIGZvcgorICAgICAg
ICAvLyB0aGluZ3MgdGhhdCBwcm9kdWNlIFJlbmRlckxheWVyQmFja2luZyBkZXJpdmF0aXZlczsg
aS5lLiwgcGx1Z2lucyBhbmQgbWVkaWEuCisgICAgICAgIFJlbmRlckxheWVyKiByZW5kZXJMYXll
cihzdGF0aWNfY2FzdDxSZW5kZXJMYXllckJhY2tpbmcqPihtX293bmVyLT5jbGllbnQoKSktPm93
bmluZ0xheWVyKCkpOworICAgICAgICBib29sIGlzVmlzaWJsZShyZW5kZXJMYXllci0+aGFzVmlz
aWJsZUNvbnRlbnQoKSB8fCByZW5kZXJMYXllci0+aGFzVmlzaWJsZURlc2NlbmRhbnQoKSk7Cisg
ICAgICAgIGlmIChtX2lzVmlzaWJsZSAhPSBpc1Zpc2libGUpIHsKKyAgICAgICAgICAgIG1faXNW
aXNpYmxlID0gaXNWaXNpYmxlOworICAgICAgICAgICAgc2V0TmVlZHNDb21taXQoKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHNpemVfdCBsaXN0U2l6ZSA9IG1fc3VibGF5ZXJzLnNpemUoKTsK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3RTaXplOyBpKyspCisgICAgICAgIG1fc3Vi
bGF5ZXJzW2ldLT51cGRhdGVUZXh0dXJlQ29udGVudHMoc2NhbGUpOworCisgICAgaWYgKG1hc2tM
YXllcigpKQorICAgICAgICBtYXNrTGF5ZXIoKS0+dXBkYXRlVGV4dHVyZUNvbnRlbnRzKHNjYWxl
KTsKKworICAgIGlmIChyZXBsaWNhTGF5ZXIoKSkKKyAgICAgICAgcmVwbGljYUxheWVyKCktPnVw
ZGF0ZVRleHR1cmVDb250ZW50cyhzY2FsZSk7Cit9CisKK3ZvaWQgTGF5ZXJXZWJLaXRUaHJlYWQ6
OmNvbW1pdE9uQ29tcG9zaXRpbmdUaHJlYWQoKQoreworICAgIEZsb2F0UG9pbnQgb2xkUG9zaXRp
b24gPSBtX3Bvc2l0aW9uOworICAgIG1fcG9zaXRpb24gKz0gbV9hYnNvbHV0ZU9mZnNldDsKKyAg
ICAvLyBDb3B5IHRoZSBiYXNlIHZhcmlhYmxlcyBmcm9tIHRoaXMgb2JqZWN0IGludG8gbV9sYXll
ckNvbXBvc2l0aW5nVGhyZWFkCisgICAgcmVwbGljYXRlKG1fbGF5ZXJDb21wb3NpdGluZ1RocmVh
ZC5nZXQoKSk7CisgICAgbV9wb3NpdGlvbiA9IG9sZFBvc2l0aW9uOworICAgIHVwZGF0ZUxheWVy
SGllcmFyY2h5KCk7CisgICAgbV90aWxlci0+Y29tbWl0UGVuZGluZ1RleHR1cmVVcGxvYWRzKCk7
CisKKyAgICBzaXplX3QgbGlzdFNpemUgPSBtX3N1YmxheWVycy5zaXplKCk7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBsaXN0U2l6ZTsgaSsrKQorICAgICAgICBtX3N1YmxheWVyc1tpXS0+
Y29tbWl0T25Db21wb3NpdGluZ1RocmVhZCgpOworCisgICAgaWYgKG1hc2tMYXllcigpKSB7Cisg
ICAgICAgIG1hc2tMYXllcigpLT5jb21taXRPbkNvbXBvc2l0aW5nVGhyZWFkKCk7CisgICAgICAg
IGxheWVyQ29tcG9zaXRpbmdUaHJlYWQoKS0+c2V0TWFza0xheWVyKG1hc2tMYXllcigpLT5sYXll
ckNvbXBvc2l0aW5nVGhyZWFkKCkpOworICAgIH0gZWxzZQorICAgICAgICBsYXllckNvbXBvc2l0
aW5nVGhyZWFkKCktPnNldE1hc2tMYXllcigwKTsKKworICAgIGlmIChyZXBsaWNhTGF5ZXIoKSkg
eworICAgICAgICByZXBsaWNhTGF5ZXIoKS0+Y29tbWl0T25Db21wb3NpdGluZ1RocmVhZCgpOwor
ICAgICAgICBsYXllckNvbXBvc2l0aW5nVGhyZWFkKCktPnNldFJlcGxpY2FMYXllcihyZXBsaWNh
TGF5ZXIoKS0+bGF5ZXJDb21wb3NpdGluZ1RocmVhZCgpKTsKKyAgICB9IGVsc2UKKyAgICAgICAg
bGF5ZXJDb21wb3NpdGluZ1RocmVhZCgpLT5zZXRSZXBsaWNhTGF5ZXIoMCk7Cit9CisKK3ZvaWQg
TGF5ZXJXZWJLaXRUaHJlYWQ6OmFkZFN1YmxheWVyKFBhc3NSZWZQdHI8TGF5ZXJXZWJLaXRUaHJl
YWQ+IHN1YmxheWVyKQoreworICAgIGluc2VydFN1YmxheWVyKHN1YmxheWVyLCBudW1TdWJsYXll
cnMoKSk7Cit9CisKK3ZvaWQgTGF5ZXJXZWJLaXRUaHJlYWQ6Omluc2VydFN1YmxheWVyKFBhc3NS
ZWZQdHI8TGF5ZXJXZWJLaXRUaHJlYWQ+IHN1YmxheWVyLCBzaXplX3QgaW5kZXgpCit7CisgICAg
aW5kZXggPSBtaW4oaW5kZXgsIG1fc3VibGF5ZXJzLnNpemUoKSk7CisgICAgc3VibGF5ZXItPnJl
bW92ZUZyb21TdXBlcmxheWVyKCk7CisgICAgc3VibGF5ZXItPnNldFN1cGVybGF5ZXIodGhpcyk7
CisgICAgbV9zdWJsYXllcnMuaW5zZXJ0KGluZGV4LCBzdWJsYXllcik7CisKKyAgICBzZXROZWVk
c0NvbW1pdCgpOworfQorCit2b2lkIExheWVyV2ViS2l0VGhyZWFkOjpyZW1vdmVGcm9tU3VwZXJs
YXllcigpCit7CisgICAgaWYgKG1fc3VwZXJsYXllcikKKyAgICAgICAgbV9zdXBlcmxheWVyLT5y
ZW1vdmVTdWJsYXllcih0aGlzKTsKK30KKwordm9pZCBMYXllcldlYktpdFRocmVhZDo6cmVtb3Zl
U3VibGF5ZXIoTGF5ZXJXZWJLaXRUaHJlYWQqIHN1YmxheWVyKQoreworICAgIGludCBmb3VuZElu
ZGV4ID0gaW5kZXhPZlN1YmxheWVyKHN1YmxheWVyKTsKKyAgICBpZiAoZm91bmRJbmRleCA9PSAt
MSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc3VibGF5ZXItPnNldFN1cGVybGF5ZXIoMCk7Cisg
ICAgbV9zdWJsYXllcnMucmVtb3ZlKGZvdW5kSW5kZXgpOworCisgICAgc2V0TmVlZHNDb21taXQo
KTsKK30KKwordm9pZCBMYXllcldlYktpdFRocmVhZDo6cmVwbGFjZVN1YmxheWVyKExheWVyV2Vi
S2l0VGhyZWFkKiByZWZlcmVuY2UsIFBhc3NSZWZQdHI8TGF5ZXJXZWJLaXRUaHJlYWQ+IG5ld0xh
eWVyKQoreworICAgIEFTU0VSVF9BUkcocmVmZXJlbmNlLCByZWZlcmVuY2UpOworICAgIEFTU0VS
VF9BUkcocmVmZXJlbmNlLCByZWZlcmVuY2UtPnN1cGVybGF5ZXIoKSA9PSB0aGlzKTsKKworICAg
IGlmIChyZWZlcmVuY2UgPT0gbmV3TGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIGludCBy
ZWZlcmVuY2VJbmRleCA9IGluZGV4T2ZTdWJsYXllcihyZWZlcmVuY2UpOworICAgIGlmIChyZWZl
cmVuY2VJbmRleCA9PSAtMSkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIHJlZmVyZW5jZS0+cmVtb3ZlRnJvbVN1cGVybGF5ZXIo
KTsKKworICAgIGlmIChuZXdMYXllcikgeworICAgICAgICBuZXdMYXllci0+cmVtb3ZlRnJvbVN1
cGVybGF5ZXIoKTsKKyAgICAgICAgaW5zZXJ0U3VibGF5ZXIobmV3TGF5ZXIsIHJlZmVyZW5jZUlu
ZGV4KTsKKyAgICB9Cit9CisKK2ludCBMYXllcldlYktpdFRocmVhZDo6aW5kZXhPZlN1YmxheWVy
KGNvbnN0IExheWVyV2ViS2l0VGhyZWFkKiByZWZlcmVuY2UpCit7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX3N1YmxheWVycy5zaXplKCk7IGkrKykgeworICAgICAgICBpZiAobV9zdWJs
YXllcnNbaV0gPT0gcmVmZXJlbmNlKQorICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgfQorICAg
IHJldHVybiAtMTsKK30KKwordm9pZCBMYXllcldlYktpdFRocmVhZDo6c2V0Qm91bmRzKGNvbnN0
IEludFNpemUmIHNpemUpCit7CisgICAgaWYgKG1fYm91bmRzID09IHNpemUpCisgICAgICAgIHJl
dHVybjsKKworICAgIGJvb2wgZmlyc3RSZXNpemUgPSAhbV9ib3VuZHMud2lkdGgoKSAmJiAhbV9i
b3VuZHMuaGVpZ2h0KCkgJiYgc2l6ZS53aWR0aCgpICYmIHNpemUuaGVpZ2h0KCk7CisKKyAgICBt
X2JvdW5kcyA9IHNpemU7CisKKyAgICBib3VuZHNDaGFuZ2VkKCk7CisKKyAgICBpZiAoZmlyc3RS
ZXNpemUpCisgICAgICAgIHNldE5lZWRzRGlzcGxheSgpOworICAgIGVsc2UKKyAgICAgICAgc2V0
TmVlZHNDb21taXQoKTsKK30KKwordm9pZCBMYXllcldlYktpdFRocmVhZDo6c2V0RnJhbWUoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIGlmIChyZWN0ID09IG1fZnJhbWUpCisgICAgICBy
ZXR1cm47CisKKyAgICBtX2ZyYW1lID0gcmVjdDsKKyAgICBzZXROZWVkc0Rpc3BsYXkoKTsKK30K
KworY29uc3QgTGF5ZXJXZWJLaXRUaHJlYWQqIExheWVyV2ViS2l0VGhyZWFkOjpyb290TGF5ZXIo
KSBjb25zdAoreworICAgIGNvbnN0IExheWVyV2ViS2l0VGhyZWFkKiBsYXllciA9IHRoaXM7Cisg
ICAgTGF5ZXJXZWJLaXRUaHJlYWQqIHN1cGVybGF5ZXIgPSBsYXllci0+c3VwZXJsYXllcigpOwor
CisgICAgd2hpbGUgKHN1cGVybGF5ZXIpIHsKKyAgICAgICAgbGF5ZXIgPSBzdXBlcmxheWVyOwor
ICAgICAgICBzdXBlcmxheWVyID0gc3VwZXJsYXllci0+c3VwZXJsYXllcigpOworICAgIH0KKyAg
ICByZXR1cm4gbGF5ZXI7Cit9CisKK3ZvaWQgTGF5ZXJXZWJLaXRUaHJlYWQ6OnJlbW92ZUFsbFN1
YmxheWVycygpCit7CisgICAgd2hpbGUgKG1fc3VibGF5ZXJzLnNpemUoKSkgeworICAgICAgICBS
ZWZQdHI8TGF5ZXJXZWJLaXRUaHJlYWQ+IGxheWVyID0gbV9zdWJsYXllcnNbMF0uZ2V0KCk7Cisg
ICAgICAgIEFTU0VSVChsYXllci0+c3VwZXJsYXllcigpKTsKKyAgICAgICAgbGF5ZXItPnJlbW92
ZUZyb21TdXBlcmxheWVyKCk7CisgICAgfQorICAgIHNldE5lZWRzQ29tbWl0KCk7Cit9CisKK3Zv
aWQgTGF5ZXJXZWJLaXRUaHJlYWQ6OnNldFN1YmxheWVycyhjb25zdCBWZWN0b3I8UmVmUHRyPExh
eWVyV2ViS2l0VGhyZWFkPiA+JiBzdWJsYXllcnMpCit7CisgICAgaWYgKHN1YmxheWVycyA9PSBt
X3N1YmxheWVycykKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVtb3ZlQWxsU3VibGF5ZXJzKCk7
CisgICAgc2l6ZV90IGxpc3RTaXplID0gc3VibGF5ZXJzLnNpemUoKTsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGxpc3RTaXplOyBpKyspCisgICAgICAgIGFkZFN1YmxheWVyKHN1YmxheWVy
c1tpXSk7Cit9CisKK3ZvaWQgTGF5ZXJXZWJLaXRUaHJlYWQ6OnNldE5lZWRzRGlzcGxheUluUmVj
dChjb25zdCBGbG9hdFJlY3QmIGRpcnR5UmVjdCkKK3sKKyAgICBtX3RpbGVyLT5zZXROZWVkc0Rp
c3BsYXkoZGlydHlSZWN0KTsKKyAgICBzZXROZWVkc0NvbW1pdCgpOyAvLyBGSVhNRTogUmVwbGFj
ZSB0aGlzIHdpdGggYSBtb3JlIHRhcmdldGVkIG1lc3NhZ2UgZm9yIGRpcnR5IHJlY3QgaGFuZGxp
bmcgd2l0aCBwbHVnaW4gY29udGVudD8KK30KKwordm9pZCBMYXllcldlYktpdFRocmVhZDo6c2V0
TmVlZHNEaXNwbGF5KCkKK3sKKyAgICBtX3RpbGVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKKyAgICBz
ZXROZWVkc0NvbW1pdCgpOyAvLyBGSVhNRTogUmVwbGFjZSB0aGlzIHdpdGggYSBtb3JlIHRhcmdl
dGVkIG1lc3NhZ2UgZm9yIGRpcnR5IHJlY3QgaGFuZGxpbmcgd2l0aCBwbHVnaW4gY29udGVudD8K
K30KKwordm9pZCBMYXllcldlYktpdFRocmVhZDo6dXBkYXRlTGF5ZXJIaWVyYXJjaHkoKQorewor
ICAgIG1fbGF5ZXJDb21wb3NpdGluZ1RocmVhZC0+c2V0U3VwZXJsYXllcihzdXBlcmxheWVyKCkg
PyBzdXBlcmxheWVyKCktPm1fbGF5ZXJDb21wb3NpdGluZ1RocmVhZC5nZXQoKSA6IDApOworCisg
ICAgVmVjdG9yPFJlZlB0cjxMYXllckNvbXBvc2l0aW5nVGhyZWFkPiA+IHN1YmxheWVyczsKKyAg
ICBzaXplX3QgbGlzdFNpemUgPSBtX3N1YmxheWVycy5zaXplKCk7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBsaXN0U2l6ZTsgaSsrKQorICAgICAgICBzdWJsYXllcnMuYXBwZW5kKG1fc3Vi
bGF5ZXJzW2ldLT5tX2xheWVyQ29tcG9zaXRpbmdUaHJlYWQuZ2V0KCkpOworICAgIG1fbGF5ZXJD
b21wb3NpdGluZ1RocmVhZC0+c2V0U3VibGF5ZXJzKHN1YmxheWVycyk7Cit9CisKK3ZvaWQgTGF5
ZXJXZWJLaXRUaHJlYWQ6OnNldElzTWFzayhib29sIGlzTWFzaykKK3sKKyAgICBtX2lzTWFzayA9
IGlzTWFzazsKKyAgICBpZiAoaXNNYXNrKQorICAgICAgICBtX3RpbGVyLT5kaXNhYmxlVGlsaW5n
KHRydWUpOworfQorCit9CisKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5
L0xheWVyV2ViS2l0VGhyZWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9i
bGFja2JlcnJ5L0xheWVyV2ViS2l0VGhyZWFkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjRjNzQ0MWNkZDkyOGU3
N2JiZWM1MzQwY2JmMGMyNzRhMTU0Y2VmZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJXZWJLaXRUaHJlYWQuaApAQCAt
MCwwICsxLDIwMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSwgMjAxMiBSZXNl
YXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24u
CisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2lmbmRlZiBMYXllcldl
YktpdFRocmVhZF9oCisjZGVmaW5lIExheWVyV2ViS2l0VGhyZWFkX2gKKworI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5
LmgiCisjaW5jbHVkZSAiTGF5ZXJEYXRhLmgiCisjaW5jbHVkZSAiTGF5ZXJUaWxlci5oIgorCisj
aW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK2NsYXNz
IFNrQml0bWFwOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIExheWVyQ29tcG9zaXRp
bmdUaHJlYWQ7CisKK2NsYXNzIExheWVyV2ViS2l0VGhyZWFkIDogcHVibGljIFJlZkNvdW50ZWQ8
TGF5ZXJXZWJLaXRUaHJlYWQ+LCBwdWJsaWMgTGF5ZXJEYXRhIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxMYXllcldlYktpdFRocmVhZD4gY3JlYXRlKExheWVyVHlwZSwgR3JhcGhp
Y3NMYXllckJsYWNrQmVycnkqIG93bmVyID0gMCk7CisKKyAgICB2aXJ0dWFsIH5MYXllcldlYktp
dFRocmVhZCgpOworCisgICAgdm9pZCBhZGRTdWJsYXllcihQYXNzUmVmUHRyPExheWVyV2ViS2l0
VGhyZWFkPik7CisgICAgdm9pZCBpbnNlcnRTdWJsYXllcihQYXNzUmVmUHRyPExheWVyV2ViS2l0
VGhyZWFkPiwgc2l6ZV90IGluZGV4KTsKKyAgICB2b2lkIHJlcGxhY2VTdWJsYXllcihMYXllcldl
YktpdFRocmVhZCogcmVmZXJlbmNlLCBQYXNzUmVmUHRyPExheWVyV2ViS2l0VGhyZWFkPiBuZXdM
YXllcik7CisgICAgdm9pZCByZW1vdmVGcm9tU3VwZXJsYXllcigpOworCisgICAgdm9pZCBzZXRB
bmNob3JQb2ludChjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCkgeyBtX2FuY2hvclBvaW50
ID0gYW5jaG9yUG9pbnQ7IHNldE5lZWRzQ29tbWl0KCk7IH0KKworICAgIHZvaWQgc2V0QW5jaG9y
UG9pbnRaKGZsb2F0IGFuY2hvclBvaW50WikgeyBtX2FuY2hvclBvaW50WiA9IGFuY2hvclBvaW50
Wjsgc2V0TmVlZHNDb21taXQoKTsgfQorCisgICAgdm9pZCBzZXRCYWNrZ3JvdW5kQ29sb3IoY29u
c3QgQ29sb3ImIGNvbG9yKSB7IG1fYmFja2dyb3VuZENvbG9yID0gY29sb3I7IHNldE5lZWRzQ29t
bWl0KCk7IH0KKworICAgIHZvaWQgc2V0Qm9yZGVyQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKSB7
IG1fYm9yZGVyQ29sb3IgPSBjb2xvcjsgc2V0TmVlZHNDb21taXQoKTsgfQorCisgICAgdm9pZCBz
ZXRCb3JkZXJXaWR0aChmbG9hdCB3aWR0aCkgeyBtX2JvcmRlcldpZHRoID0gd2lkdGg7IHNldE5l
ZWRzQ29tbWl0KCk7IH0KKworICAgIHZvaWQgc2V0Qm91bmRzKGNvbnN0IEludFNpemUmKTsKKwor
ICAgIHZvaWQgc2V0RG91YmxlU2lkZWQoYm9vbCBkb3VibGVTaWRlZCkgeyBtX2RvdWJsZVNpZGVk
ID0gZG91YmxlU2lkZWQ7IHNldE5lZWRzQ29tbWl0KCk7IH0KKworICAgIHZvaWQgc2V0RnJhbWUo
Y29uc3QgRmxvYXRSZWN0Jik7CisKKyAgICB2b2lkIHNldE1hc2tzVG9Cb3VuZHMoYm9vbCBtYXNr
c1RvQm91bmRzKSB7IG1fbWFza3NUb0JvdW5kcyA9IG1hc2tzVG9Cb3VuZHM7IH0KKworICAgIHZv
aWQgc2V0TWFza0xheWVyKExheWVyV2ViS2l0VGhyZWFkKiBtYXNrTGF5ZXIpIHsgbV9tYXNrTGF5
ZXIgPSBtYXNrTGF5ZXI7IH0KKyAgICBMYXllcldlYktpdFRocmVhZCogbWFza0xheWVyKCkgY29u
c3QgeyByZXR1cm4gbV9tYXNrTGF5ZXIuZ2V0KCk7IH0KKyAgICB2b2lkIHNldElzTWFzayhib29s
KTsKKworICAgIHZvaWQgc2V0UmVwbGljYUxheWVyKExheWVyV2ViS2l0VGhyZWFkKiBsYXllcikg
eyBtX3JlcGxpY2FMYXllciA9IGxheWVyOyB9CisgICAgTGF5ZXJXZWJLaXRUaHJlYWQqIHJlcGxp
Y2FMYXllcigpIHsgcmV0dXJuIG1fcmVwbGljYUxheWVyLmdldCgpOyB9CisKKyAgICAvLyBGSVhN
RTogTW92ZSB0byBhIG5ldyBzdWJjbGFzcywgQ29udGVudExheWVyV2ViS2l0VGhyZWFkLiBUaGlz
IGlzIG9ubHkgdXNlZCBmb3IgbGF5ZXJzIHRoYXQgZHJhdyBjb250ZW50CisgICAgdm9pZCBzZXRO
ZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgRmxvYXRSZWN0JiBkaXJ0eVJlY3QpOworCisgICAgdmly
dHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheSgpOworCisgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXlP
bkJvdW5kc0NoYW5nZShib29sIG5lZWRzRGlzcGxheSkgeyBtX25lZWRzRGlzcGxheU9uQm91bmRz
Q2hhbmdlID0gbmVlZHNEaXNwbGF5OyB9CisKKyAgICB2b2lkIHNldE9wYWNpdHkoZmxvYXQgb3Bh
Y2l0eSkgeyBtX29wYWNpdHkgPSBvcGFjaXR5OyBzZXROZWVkc0NvbW1pdCgpOyB9CisKKyAgICB2
b2lkIHNldE9wYXF1ZShib29sIG9wYXF1ZSkgeyBtX29wYXF1ZSA9IG9wYXF1ZTsgc2V0TmVlZHND
b21taXQoKTsgfQorCisgICAgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBwb3Np
dGlvbikgeyBtX3Bvc2l0aW9uID0gcG9zaXRpb247IHNldE5lZWRzQ29tbWl0KCk7IH0KKworICAg
IGNvbnN0IExheWVyV2ViS2l0VGhyZWFkKiByb290TGF5ZXIoKSBjb25zdDsKKworICAgIHZvaWQg
cmVtb3ZlQWxsU3VibGF5ZXJzKCk7CisKKyAgICB2b2lkIHNldFN1YmxheWVycyhjb25zdCBWZWN0
b3I8UmVmUHRyPExheWVyV2ViS2l0VGhyZWFkPiA+Jik7CisKKyAgICBjb25zdCBWZWN0b3I8UmVm
UHRyPExheWVyV2ViS2l0VGhyZWFkPiA+JiBnZXRTdWJsYXllcnMoKSBjb25zdCB7IHJldHVybiBt
X3N1YmxheWVyczsgfQorCisgICAgdm9pZCBzZXRTdWJsYXllclRyYW5zZm9ybShjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKSB7IG1fc3VibGF5ZXJUcmFuc2Zvcm0gPSB0cmFu
c2Zvcm07IHNldE5lZWRzQ29tbWl0KCk7IH0KKworICAgIExheWVyV2ViS2l0VGhyZWFkKiBzdXBl
cmxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9zdXBlcmxheWVyOyB9CisKKyAgICB2b2lkIHNldFRy
YW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKSB7IG1fdHJhbnNm
b3JtID0gdHJhbnNmb3JtOyBzZXROZWVkc0NvbW1pdCgpOyB9CisKKyAgICB2b2lkIHNldFByZXNl
cnZlczNEKGJvb2wgcHJlc2VydmVzM0QpIHsgbV9wcmVzZXJ2ZXMzRCA9IHByZXNlcnZlczNEOyBz
ZXROZWVkc0NvbW1pdCgpOyB9CisKKyAgICB2b2lkIHNldEZpeGVkUG9zaXRpb24oYm9vbCBmaXhl
ZCkgeyBtX2lzRml4ZWRQb3NpdGlvbiA9IGZpeGVkOyBzZXROZWVkc0NvbW1pdCgpOyB9CisgICAg
dm9pZCBzZXRIYXNGaXhlZENvbnRhaW5lcihib29sIGZpeGVkKSB7IG1faGFzRml4ZWRDb250YWlu
ZXIgPSBmaXhlZDsgc2V0TmVlZHNDb21taXQoKTsgfQorICAgIHZvaWQgc2V0SGFzRml4ZWRBbmNl
c3RvckluRE9NVHJlZShib29sIGZpeGVkKSB7IG1faGFzRml4ZWRBbmNlc3RvckluRE9NVHJlZSA9
IGZpeGVkOyBzZXROZWVkc0NvbW1pdCgpOyB9CisKKyAgICB2b2lkIHNldENvbnRlbnRzKEltYWdl
Kik7CisgICAgSW1hZ2UqIGNvbnRlbnRzKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50cy5nZXQo
KTsgfQorCisgICAgdm9pZCBzZXRPd25lcihHcmFwaGljc0xheWVyQmxhY2tCZXJyeSogb3duZXIp
IHsgbV9vd25lciA9IG93bmVyOyB9CisKKyAgICBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0IHsg
cmV0dXJuIG1fb3duZXIgJiYgbV9vd25lci0+ZHJhd3NDb250ZW50KCk7IH0KKyAgICB2b2lkIHNl
dERyYXdhYmxlKGJvb2wpOworCisgICAgdm9pZCBjb21taXRPbldlYktpdFRocmVhZChkb3VibGUg
c2NhbGUpOworICAgIHZvaWQgY29tbWl0T25Db21wb3NpdGluZ1RocmVhZCgpOworICAgIExheWVy
Q29tcG9zaXRpbmdUaHJlYWQqIGxheWVyQ29tcG9zaXRpbmdUaHJlYWQoKSBjb25zdCB7IHJldHVy
biBtX2xheWVyQ29tcG9zaXRpbmdUaHJlYWQuZ2V0KCk7IH0KKworICAgIC8vIE9ubHkgdXNlZCB3
aGVuIHRoaXMgbGF5ZXIgaXMgdGhlIHJvb3QgbGF5ZXIgb2YgYSBmcmFtZS4KKyAgICB2b2lkIHNl
dEFic29sdXRlT2Zmc2V0KGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0KSB7IG1fYWJzb2x1dGVPZmZz
ZXQgPSBvZmZzZXQ7IH0KKworICAgIGRvdWJsZSBjb250ZW50c1NjYWxlKCkgY29uc3QgeyByZXR1
cm4gbV9zY2FsZTsgfQorCisgICAgU2tCaXRtYXAgcGFpbnRDb250ZW50cyhjb25zdCBJbnRSZWN0
JiB0cmFuc2Zvcm1lZENvbnRlbnRzUmVjdCwgZG91YmxlIHNjYWxlLCBib29sKiBpc1NvbGlkQ29s
b3IgPSAwLCBDb2xvciogPSAwKTsKKyAgICBib29sIGNvbnRlbnRzVmlzaWJsZShjb25zdCBJbnRS
ZWN0JiBjb250ZW50c1JlY3QpIGNvbnN0OworCisgICAgdm9pZCBzZXROZWVkc0NvbW1pdCgpOwor
ICAgIHZvaWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRlZChkb3VibGUgdGltZSk7CisKKyAgICB2b2lk
IHNldFJ1bm5pbmdBbmltYXRpb25zKGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJBbmltYXRpb24+
ID4mIGFuaW1hdGlvbnMpIHsgbV9ydW5uaW5nQW5pbWF0aW9ucyA9IGFuaW1hdGlvbnM7IHNldE5l
ZWRzQ29tbWl0KCk7IH0KKyAgICB2b2lkIHNldFN1c3BlbmRlZEFuaW1hdGlvbnMoY29uc3QgVmVj
dG9yPFJlZlB0cjxMYXllckFuaW1hdGlvbj4gPiYgYW5pbWF0aW9ucykgeyBtX3N1c3BlbmRlZEFu
aW1hdGlvbnMgPSBhbmltYXRpb25zOyBzZXROZWVkc0NvbW1pdCgpOyB9CisKK3Byb3RlY3RlZDoK
KyAgICBMYXllcldlYktpdFRocmVhZChMYXllclR5cGUsIEdyYXBoaWNzTGF5ZXJCbGFja0JlcnJ5
KiBvd25lcik7CisKKyAgICB2b2lkIHNldE5lZWRzVGV4dHVyZShib29sIG5lZWRzVGV4dHVyZSkg
eyBtX25lZWRzVGV4dHVyZSA9IG5lZWRzVGV4dHVyZTsgfQorICAgIHZvaWQgc2V0TGF5ZXJQcm9n
cmFtU2hhZGVyKExheWVyRGF0YTo6TGF5ZXJQcm9ncmFtU2hhZGVyIHNoYWRlcikgeyBtX2xheWVy
UHJvZ3JhbVNoYWRlciA9IHNoYWRlcjsgfQorICAgIHZvaWQgY3JlYXRlRnJvbnRCdWZmZXJMb2Nr
KCk7CisgICAgYm9vbCBpc0RyYXdhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9pc0RyYXdhYmxlOyB9
CisKKyAgICB2b2lkIHN0YXJ0QW5pbWF0aW9ucyhkb3VibGUgdGltZSk7CisgICAgdm9pZCB1cGRh
dGVWaXNpYmlsaXR5KCk7CisgICAgdm9pZCB1cGRhdGVUZXh0dXJlQ29udGVudHMoZG91YmxlIHNj
YWxlKTsKKworICAgIHZpcnR1YWwgdm9pZCBib3VuZHNDaGFuZ2VkKCkgeyB9CisgICAgdmlydHVh
bCB2b2lkIHVwZGF0ZVRleHR1cmVDb250ZW50c0lmTmVlZGVkKCk7CisKK3ByaXZhdGU6CisgICAg
dm9pZCB1cGRhdGVMYXllckhpZXJhcmNoeSgpOworCisgICAgdm9pZCBzZXRTdXBlcmxheWVyKExh
eWVyV2ViS2l0VGhyZWFkKiBzdXBlcmxheWVyKSB7IG1fc3VwZXJsYXllciA9IHN1cGVybGF5ZXI7
IH0KKworICAgIHNpemVfdCBudW1TdWJsYXllcnMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fc3VibGF5ZXJzLnNpemUoKTsKKyAgICB9CisKKyAgICAvLyBSZXR1cm5zIHRoZSBpbmRl
eCBvZiB0aGUgc3VibGF5ZXIgb3IgLTEgaWYgbm90IGZvdW5kLgorICAgIGludCBpbmRleE9mU3Vi
bGF5ZXIoY29uc3QgTGF5ZXJXZWJLaXRUaHJlYWQqKTsKKworICAgIC8vIFRoaXMgc2hvdWxkIG9u
bHkgYmUgY2FsbGVkIGZyb20gcmVtb3ZlRnJvbVN1cGVybGF5ZXIuCisgICAgdm9pZCByZW1vdmVT
dWJsYXllcihMYXllcldlYktpdFRocmVhZCopOworCisgICAgR3JhcGhpY3NMYXllckJsYWNrQmVy
cnkqIG1fb3duZXI7CisKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyV2ViS2l0VGhyZWFkPiA+IG1f
c3VibGF5ZXJzOworICAgIExheWVyV2ViS2l0VGhyZWFkKiBtX3N1cGVybGF5ZXI7CisgICAgUmVm
UHRyPExheWVyV2ViS2l0VGhyZWFkPiBtX21hc2tMYXllcjsKKyAgICBSZWZQdHI8TGF5ZXJXZWJL
aXRUaHJlYWQ+IG1fcmVwbGljYUxheWVyOworCisgICAgUmVmUHRyPEltYWdlPiBtX2NvbnRlbnRz
OworCisgICAgUmVmUHRyPExheWVyQ29tcG9zaXRpbmdUaHJlYWQ+IG1fbGF5ZXJDb21wb3NpdGlu
Z1RocmVhZDsKKyAgICBSZWZQdHI8TGF5ZXJUaWxlcj4gbV90aWxlcjsKKyAgICBGbG9hdFNpemUg
bV9hYnNvbHV0ZU9mZnNldDsKKyAgICBkb3VibGUgbV9zY2FsZTsgLy8gU2NhbGUgYXBwbGllcyBv
bmx5IHRvIGNvbnRlbnQgbGF5ZXJzCisgICAgYm9vbCBtX2lzRHJhd2FibGU7CisgICAgYm9vbCBt
X2lzTWFzazsKK307CisKK30KKworI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ibGFja2JlcnJ5L1BsdWdpbkxheWVyV2ViS2l0VGhyZWFkLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvUGx1Z2luTGF5ZXJXZWJLaXRUaHJlYWQuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmMyMjI1NGNiNzM0Y2Q5OGE2MDdlZjZlM2Q5YTZhZDMzZDkwYWI2ZDcKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2Jl
cnJ5L1BsdWdpbkxheWVyV2ViS2l0VGhyZWFkLmNwcApAQCAtMCwwICsxLDg0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEwLCAyMDExLCAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVk
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy
ZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5MYXllcldlYktpdFRocmVhZC5oIgorCisjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiTGF5ZXJDb21wb3NpdGluZ1Ro
cmVhZC5oIgorI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitQbHVnaW5MYXllcldlYktpdFRocmVhZDo6UGx1Z2luTGF5ZXJXZWJLaXRUaHJlYWQoUGx1Z2lu
VmlldyogcGx1Z2luVmlldykKKyAgICA6IExheWVyV2ViS2l0VGhyZWFkKExheWVyLCAwKQorICAg
ICwgbV9uZWVkc0Rpc3BsYXkoZmFsc2UpCit7CisgICAgc2V0UGx1Z2luVmlldyhwbHVnaW5WaWV3
KTsKK30KKworUGx1Z2luTGF5ZXJXZWJLaXRUaHJlYWQ6On5QbHVnaW5MYXllcldlYktpdFRocmVh
ZCgpCit7Cit9CisKK3ZvaWQgUGx1Z2luTGF5ZXJXZWJLaXRUaHJlYWQ6OnNldFBsdWdpblZpZXco
UGx1Z2luVmlldyogcGx1Z2luVmlldykKK3sKKyAgICBtX3BsdWdpblZpZXcgPSBwbHVnaW5WaWV3
OworICAgIHNldE5lZWRzVGV4dHVyZShpc0RyYXdhYmxlKCkgJiYgcGx1Z2luVmlldyk7CisgICAg
c2V0TGF5ZXJQcm9ncmFtU2hhZGVyKExheWVyUHJvZ3JhbVNoYWRlclJHQkEpOworCisgICAgaWYg
KG1fcGx1Z2luVmlldykKKyAgICAgICAgc2V0TmVlZHNEaXNwbGF5KCk7CisgICAgZWxzZSB7Cisg
ICAgICAgIC8vIFdlIGNhbid0IGFmZm9yZCB0byB3YWl0IHVudGlsIHRoZSBuZXh0IGNvbW1pdAor
ICAgICAgICAvLyB0byBzZXQgdGhlIG1fcGx1Z2luVmlldyB0byAwIGluIHRoZSBpbXBsLCBiZWNh
dXNlIGl0IGlzCisgICAgICAgIC8vIGFib3V0IHRvIGJlIGRlc3Ryb3llZC4KKyAgICAgICAgbGF5
ZXJDb21wb3NpdGluZ1RocmVhZCgpLT5zZXRQbHVnaW5WaWV3KDApOworICAgICAgICBzZXROZWVk
c0NvbW1pdCgpOworICAgIH0KK30KKwordm9pZCBQbHVnaW5MYXllcldlYktpdFRocmVhZDo6c2V0
SG9sZVB1bmNoUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIG1faG9sZVB1bmNoUmVj
dCA9IHJlY3Q7CisgICAgc2V0TmVlZHNDb21taXQoKTsKK30KKwordm9pZCBQbHVnaW5MYXllcldl
YktpdFRocmVhZDo6c2V0TmVlZHNEaXNwbGF5KCkKK3sKKyAgICBtX25lZWRzRGlzcGxheSA9IHRy
dWU7CisgICAgc2V0TmVlZHNDb21taXQoKTsKK30KKwordm9pZCBQbHVnaW5MYXllcldlYktpdFRo
cmVhZDo6dXBkYXRlVGV4dHVyZUNvbnRlbnRzSWZOZWVkZWQoKQoreworICAgIGlmICghbV9uZWVk
c0Rpc3BsYXkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbmVlZHNEaXNwbGF5ID0gZmFsc2U7
CisKKyAgICBpZiAoIW1fcGx1Z2luVmlldykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9wbHVn
aW5WaWV3LT51cGRhdGVCdWZmZXIoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBtX3BsdWdpblZp
ZXctPnNpemUoKSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L1BsdWdpbkxheWVyV2ViS2l0VGhyZWFkLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L1BsdWdpbkxheWVyV2Vi
S2l0VGhyZWFkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODdiOWM4MzFmNzk3MDZkMjcwN2JmMDg2MTcxZjhlMzZh
NGY5MjMxYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2JsYWNrYmVycnkvUGx1Z2luTGF5ZXJXZWJLaXRUaHJlYWQuaApAQCAtMCwwICsxLDU2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExLCAyMDEyIFJlc2VhcmNoIEluIE1vdGlv
biBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUg
dG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNp
Zm5kZWYgUGx1Z2luTGF5ZXJXZWJLaXRUaHJlYWRfaAorI2RlZmluZSBQbHVnaW5MYXllcldlYktp
dFRocmVhZF9oCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRl
ICJMYXllcldlYktpdFRocmVhZC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFBs
dWdpblZpZXc7CisKK2NsYXNzIFBsdWdpbkxheWVyV2ViS2l0VGhyZWFkIDogcHVibGljIExheWVy
V2ViS2l0VGhyZWFkIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxQbHVnaW5MYXll
cldlYktpdFRocmVhZD4gY3JlYXRlKFBsdWdpblZpZXcqIHBsdWdpblZpZXcpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBsdWdpbkxheWVyV2ViS2l0VGhyZWFkKHBsdWdpblZp
ZXcpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5QbHVnaW5MYXllcldlYktpdFRocmVhZCgpOwor
CisgICAgdm9pZCBzZXRQbHVnaW5WaWV3KFBsdWdpblZpZXcqKTsKKyAgICB2b2lkIHNldEhvbGVQ
dW5jaFJlY3QoY29uc3QgSW50UmVjdCYpOworCisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlz
cGxheSgpOworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHR1cmVDb250
ZW50c0lmTmVlZGVkKCk7CisKK3ByaXZhdGU6CisgICAgUGx1Z2luTGF5ZXJXZWJLaXRUaHJlYWQo
UGx1Z2luVmlldyopOworICAgIGJvb2wgbV9uZWVkc0Rpc3BsYXk7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisK
KyNlbmRpZiAvLyBQbHVnaW5MYXllcldlYktpdFRocmVhZF9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L1ZpZGVvTGF5ZXJXZWJLaXRUaHJl
YWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9WaWRl
b0xheWVyV2ViS2l0VGhyZWFkLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NDkyODcxZDIwNDY3ZDUzNDVlZmE0
ZjMzYzAyZTI1OWE2MTQzNWVjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9WaWRlb0xheWVyV2ViS2l0VGhyZWFkLmNwcApAQCAt
MCwwICsxLDExMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSwgMjAxMiBSZXNl
YXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBp
ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBV
U0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpICYmIEVOQUJMRShWSURFTykKKyNpbmNsdWRlICJWaWRlb0xheWVyV2ViS2l0VGhy
ZWFkLmgiCisKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJMYXllckNvbXBvc2l0
aW5nVGhyZWFkLmgiCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIKKworI2luY2x1ZGUgPEJsYWNr
QmVycnlQbGF0Zm9ybUxvZy5oPgorCisjZGVmaW5lIERFQlVHX1ZJREVPX0NMSVBQSU5HIDAKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitWaWRlb0xheWVyV2ViS2l0VGhyZWFkOjpWaWRlb0xheWVy
V2ViS2l0VGhyZWFkKE1lZGlhUGxheWVyKiBtZWRpYVBsYXllcikKKyAgICA6IExheWVyV2ViS2l0
VGhyZWFkKExheWVyLCAwKQoreworICAgIHNldE1lZGlhUGxheWVyKG1lZGlhUGxheWVyKTsKK30K
KworVmlkZW9MYXllcldlYktpdFRocmVhZDo6flZpZGVvTGF5ZXJXZWJLaXRUaHJlYWQoKQorewor
fQorCit2b2lkIFZpZGVvTGF5ZXJXZWJLaXRUaHJlYWQ6OnNldE1lZGlhUGxheWVyKE1lZGlhUGxh
eWVyKiBtZWRpYVBsYXllcikKK3sKKyAgICBtX21lZGlhUGxheWVyID0gbWVkaWFQbGF5ZXI7CisK
KyAgICAvLyBUaGlzIGlzIGEgYml0IG9mIGEgbWlzbm9tZXIsIHNpbmNlIHdlIGRvbid0IG5lZWQg
YW4gYWN0dWFsIEdMIHRleHR1cmUuCisgICAgLy8gSG93ZXZlciwgdGhlIExheWVyUmVuZGVyZXIg
d2lsbCBvbmx5IHByb2Nlc3MgbGF5ZXJzIHRoYXQgIm5lZWQgdGV4dHVyZXMiCisgICAgc2V0TmVl
ZHNUZXh0dXJlKGlzRHJhd2FibGUoKSAmJiAoY29udGVudHMoKSB8fCBkcmF3c0NvbnRlbnQoKSB8
fCB0aGlzLT5tZWRpYVBsYXllcigpKSk7CisKKyAgICBpZiAoIW1fbWVkaWFQbGF5ZXIpIHsKKyAg
ICAgICAgLy8gV2UgY2FuJ3QgYWZmb3JkIHRvIHdhaXQgdW50aWwgdGhlIG5leHQgY29tbWl0IHRv
IHNldCB0aGUgbV9tZWRpYVBsYXllcgorICAgICAgICAvLyB0byAwIGluIHRoZSBpbXBsLCBiZWNh
dXNlIGl0IGlzIGFib3V0IHRvIGJlIGRlc3Ryb3llZC4KKyAgICAgICAgbGF5ZXJDb21wb3NpdGlu
Z1RocmVhZCgpLT5zZXRNZWRpYVBsYXllcigwKTsKKworICAgICAgICAvLyBDbGVhciBob2xlIHB1
bmNoIHJlY3QuCisgICAgICAgIHNldEhvbGVQdW5jaFJlY3QoSW50UmVjdCgpKTsKKyAgICB9CisK
KyAgICBzZXROZWVkc0NvbW1pdCgpOworfQorCit2b2lkIFZpZGVvTGF5ZXJXZWJLaXRUaHJlYWQ6
OnNldEhvbGVQdW5jaFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBtX2hvbGVQdW5j
aFJlY3QgPSByZWN0OworI2lmIERFQlVHX1ZJREVPX0NMSVBQSU5HCisgICAgQmxhY2tCZXJyeTo6
UGxhdGZvcm06OmxvZyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TG9nTGV2ZWxJbmZvLCAiVmlkZW9M
YXllcldlYktpdFRocmVhZCBtX2hvbGVQdW5jaFJlY3Q9KHg9JWQseT0lZCx3aWR0aD0lZCxoZWln
aHQ9JWQpLiIsIG1faG9sZVB1bmNoUmVjdC54KCksIG1faG9sZVB1bmNoUmVjdC55KCksIG1faG9s
ZVB1bmNoUmVjdC53aWR0aCgpLCBtX2hvbGVQdW5jaFJlY3QuaGVpZ2h0KCkpOworI2VuZGlmCisg
ICAgc2V0TmVlZHNDb21taXQoKTsKK30KKwordm9pZCBWaWRlb0xheWVyV2ViS2l0VGhyZWFkOjpz
ZXROZWVkc0Rpc3BsYXkoKQoreworICAgIC8vIFdlIGRvbid0IHJlYWxseSBuZWVkIGRpc3BsYXkg
cGVyIHNlLCBidXQgc29tZSBjb2RlIG1heSBkZXBlbmQgb24KKyAgICAvLyBzZXROZWVkc0Rpc3Bs
YXkoKSB0byBjYWxsIHNldE5lZWRzQ29tbWl0KCkKKyAgICBzZXROZWVkc0NvbW1pdCgpOworfQor
Cit2b2lkIFZpZGVvTGF5ZXJXZWJLaXRUaHJlYWQ6OmJvdW5kc0NoYW5nZWQoKQoreworICAgIGlm
ICghbWVkaWFQbGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRm9yIHZpZGVvIGxh
eWVycywgdGhlIGVudGlyZSBsYXllciBzaG91bGQgYmUgaG9sZSBwdW5jaGVkCisgICAgLy8gSG9s
ZSBwdW5jaCByZWN0YW5nbGUgc2l6ZSBpcyBlcXVhbCB0byB0aGUgc2l6ZSBvZiB0aGlzIGxheWVy
LgorICAgIC8vIE5vdGUgdGhhdCBhbHRob3VnaCB3ZSBrbm93IHRoZSAqc2l6ZSogb2YgdGhpcyBs
YXllciwgd2Ugd29uJ3Qga25vdyB0aGUgcG9zaXRpb24gb2YgdGhpcyBsYXllcgorICAgIC8vIHVu
dGlsIHRoZSBMYXllckNvbXBvc2l0aW5nVGhyZWFkOjpzZXREcmF3VHJhbnNmb3JtIG1ldGhvZCBp
cyBjYWxsZWQgZnJvbSB0aGUgTGF5ZXJSZW5kZXJlci4KKyAgICBzZXRIb2xlUHVuY2hSZWN0KElu
dFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgbV9ib3VuZHMpKTsKKworICAgIC8vIEFsc28gc2V0IGEg
Y2xpcHBpbmcgcmVjdGFuZ2xlIGZvciB0aGlzIGhvbGUgcHVuY2ggcmVjdGFuZ2xlLgorICAgIGlm
IChGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1lZGlhUGxheWVyKCktPmZyYW1lVmlldygpKQorICAg
ICAgICBtX2hvbGVQdW5jaENsaXBSZWN0ID0gZnJhbWVWaWV3LT53aW5kb3dDbGlwUmVjdCgpOwor
ICAgIGVsc2UKKyAgICAgICAgbV9ob2xlUHVuY2hDbGlwUmVjdCA9IGhvbGVQdW5jaFJlY3QoKTsK
KworI2lmIERFQlVHX1ZJREVPX0NMSVBQSU5HCisgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06Omxv
ZyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TG9nTGV2ZWxJbmZvLCAiVmlkZW9MYXllcldlYktpdFRo
cmVhZCBtX2hvbGVQdW5jaENsaXBSZWN0PSh4PSVkLHk9JWQsd2lkdGg9JWQsaGVpZ2h0PSVkKS4i
LCBtX2hvbGVQdW5jaENsaXBSZWN0LngoKSwgbV9ob2xlUHVuY2hDbGlwUmVjdC55KCksIG1faG9s
ZVB1bmNoQ2xpcFJlY3Qud2lkdGgoKSwgbV9ob2xlUHVuY2hDbGlwUmVjdC5oZWlnaHQoKSk7Cisj
ZW5kaWYKK30KKwordm9pZCBWaWRlb0xheWVyV2ViS2l0VGhyZWFkOjp1cGRhdGVUZXh0dXJlQ29u
dGVudHNJZk5lZWRlZCgpCit7CisgICAgLy8gVGhlcmUgYXJlIG5vIHRleHR1cmUgY29udGVudHMs
IHZpZGVvIGlzIHNob3duIGluIGEgc3BlY2lhbCBzY3JlZW4gd2luZG93CisgICAgLy8gYmVoaW5k
IHRoZSB3ZWIgcGFnZS4KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBFTkFCTEUoVklERU8pCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L1ZpZGVvTGF5ZXJX
ZWJLaXRUaHJlYWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVy
cnkvVmlkZW9MYXllcldlYktpdFRocmVhZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU2NDczMmE5Yjg5MjI1ZWRj
NDI3MTI4YzFkNDBmYmVkM2Q4ZGQ2NGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L1ZpZGVvTGF5ZXJXZWJLaXRUaHJlYWQuaApA
QCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExLCAyMDEyIFJl
c2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEg
IFVTQQorICovCisKKyNpZm5kZWYgVmlkZW9MYXllcldlYktpdFRocmVhZF9oCisjZGVmaW5lIFZp
ZGVvTGF5ZXJXZWJLaXRUaHJlYWRfaAorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KSAmJiBFTkFCTEUoVklERU8pCisKKyNpbmNsdWRlICJMYXllcldlYktpdFRocmVhZC5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIE1lZGlhUGxheWVyOworCitjbGFzcyBWaWRlb0xh
eWVyV2ViS2l0VGhyZWFkIDogcHVibGljIExheWVyV2ViS2l0VGhyZWFkIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxWaWRlb0xheWVyV2ViS2l0VGhyZWFkPiBjcmVhdGUoTWVkaWFQ
bGF5ZXIqIG1lZGlhUGxheWVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBW
aWRlb0xheWVyV2ViS2l0VGhyZWFkKG1lZGlhUGxheWVyKSk7CisgICAgfQorCisgICAgdmlydHVh
bCB+VmlkZW9MYXllcldlYktpdFRocmVhZCgpOworCisgICAgdm9pZCBzZXRNZWRpYVBsYXllcihN
ZWRpYVBsYXllciopOworCisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheSgpOworCitw
cm90ZWN0ZWQ6CisgICAgdm9pZCBzZXRIb2xlUHVuY2hSZWN0KGNvbnN0IEludFJlY3QmKTsKKwor
ICAgIHZpcnR1YWwgdm9pZCBib3VuZHNDaGFuZ2VkKCk7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0
ZVRleHR1cmVDb250ZW50c0lmTmVlZGVkKCk7CisKK3ByaXZhdGU6CisgICAgVmlkZW9MYXllcldl
YktpdFRocmVhZChNZWRpYVBsYXllciopOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBFTkFCTEUoVklERU8p
CisKKyNlbmRpZiAvLyBWaWRlb0xheWVyV2ViS2l0VGhyZWFkX2gK
</data>

          </attachment>
      

    </bug>

</bugzilla>