<?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>93253</bug_id>
          
          <creation_ts>2012-08-06 04:03:03 -0700</creation_ts>
          <short_desc>Web Inspector: renaming DOMNodeHighlighter to InspectorOverlay</short_desc>
          <delta_ts>2012-08-08 05:51:39 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Sergey Rogulenko">rogulenko</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rakuco</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>687981</commentid>
    <comment_count>0</comment_count>
    <who name="Sergey Rogulenko">rogulenko</who>
    <bug_when>2012-08-06 04:03:03 -0700</bug_when>
    <thetext>Renaming files DOMNodeHighlighter.(h|cpp) to InspectorOverlay.(h|cpp) and deleting string &quot;DOMNodeHighlighter&quot; everywhere.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>687984</commentid>
    <comment_count>1</comment_count>
      <attachid>156651</attachid>
    <who name="Sergey Rogulenko">rogulenko</who>
    <bug_when>2012-08-06 04:06:06 -0700</bug_when>
    <thetext>Created attachment 156651
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>688001</commentid>
    <comment_count>2</comment_count>
      <attachid>156651</attachid>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2012-08-06 04:34:55 -0700</bug_when>
    <thetext>Comment on attachment 156651
Patch

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

&gt; Source/WebCore/inspector/InspectorDOMAgent.cpp:1008
&gt; +    if (enabled)
&gt; +        m_inspectModeHighlightConfig = highlightConfigFromInspectorObject(errorString, highlightInspectorObject);

please split this into a separate change.

&gt; Source/WebCore/inspector/InspectorDOMAgent.cpp:1019
&gt; +        return PassOwnPtr&lt;HighlightConfig&gt; ();

return nullptr?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>688138</commentid>
    <comment_count>3</comment_count>
      <attachid>156694</attachid>
    <who name="Sergey Rogulenko">rogulenko</who>
    <bug_when>2012-08-06 07:58:10 -0700</bug_when>
    <thetext>Created attachment 156694
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>688154</commentid>
    <comment_count>4</comment_count>
      <attachid>156699</attachid>
    <who name="Sergey Rogulenko">rogulenko</who>
    <bug_when>2012-08-06 08:29:46 -0700</bug_when>
    <thetext>Created attachment 156699
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690217</commentid>
    <comment_count>5</comment_count>
      <attachid>156699</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-08 05:51:34 -0700</bug_when>
    <thetext>Comment on attachment 156699
Patch

Clearing flags on attachment: 156699

Committed r125025: &lt;http://trac.webkit.org/changeset/125025&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690218</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-08 05:51:39 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>156651</attachid>
            <date>2012-08-06 04:06:06 -0700</date>
            <delta_ts>2012-08-06 07:58:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-93253-20120806150541.patch</filename>
            <type>text/plain</type>
            <size>87077</size>
            <attacher name="Sergey Rogulenko">rogulenko</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0NzQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDNiMjIwZTEyNzIxMjMw
ZDc1YmViZDJiZDY5ZGJiMmNlNzJmNTkzMy4uMDA4MTBlN2I5NTNlNzM2NDEwZjg4ZDYxMzg0Zjc0
YjQ5Mzk0Y2EzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDU1IEBACiAyMDEyLTA4LTA2ICBTZXJn
ZXkgUm9ndWxlbmtvICA8cm9ndWxlbmtvQGdvb2dsZS5jb20+CiAKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogcmVuYW1pbmcgRE9NTm9kZUhpZ2hsaWdodGVyIHRvIEluc3BlY3Rvck92ZXJsYXkKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkzMjUzCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVuYW1pbmcgRE9N
Tm9kZUhpZ2hsaWdodGVyIHRvIEluc3BlY3Rvck92ZXJsYXkgd2hlcmUgbmVjZXNzYXJ5LgorCisg
ICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToK
KyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAg
KiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckFsbElu
T25lLmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6Cisg
ICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckRPTUFnZW50OjpzZXRTZWFyY2hpbmdGb3JOb2RlKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHRDb25maWdGcm9tSW5zcGVjdG9yT2Jq
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHROb2Rl
KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaDoKKyAgICAgICAgKElu
c3BlY3RvckRPTUFnZW50KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5j
cHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NTm9kZUhpZ2hsaWdo
dGVyLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6Okluc3BlY3Rvck92
ZXJsYXkpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JP
dmVybGF5OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpkcmF3
T3V0bGluZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpnZXRIaWdobGln
aHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6c2V0UGF1c2VkSW5EZWJ1
Z2dlck1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6aGlkZUhp
Z2hsaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpoaWdobGlnaHRO
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OmhpZ2hsaWdodFJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6aGlnaGxpZ2h0ZWROb2RlKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OnVwZGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpkcmF3Tm9kZUhpZ2hsaWdodCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpkcmF3UmVjdEhpZ2hsaWdodCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpkcmF3UGF1c2VkSW5EZWJ1Z2dlcik6CisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuaC4KKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoSGlnaGxpZ2h0Q29uZmlnKToKKyAgICAgICAgKFdlYkNvcmU6OkhpZ2hsaWdodDo6
c2V0Q29sb3JzKToKKyAgICAgICAgKEhpZ2hsaWdodCk6CisgICAgICAgIChJbnNwZWN0b3JPdmVy
bGF5KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OmNyZWF0ZSk6CisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVj
dG9yL1BhZ2VEZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKiBwYWdlL0dlc3R1cmVUYXBIaWdo
bGlnaHRlci5oOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKworMjAxMi0wOC0w
NiAgU2VyZ2V5IFJvZ3VsZW5rbyAgPHJvZ3VsZW5rb0Bnb29nbGUuY29tPgorCiAgICAgICAgIFdl
YiBJbnNwZWN0b3I6IGV4dHJhY3RpbmcgSGlnaGxpZ2h0SW5mbyBmcm9tIEhpZ2hsaWdodERhdGEg
aW4gRE9NTm9kZUhpZ2hsaWdodGVyCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD05MTYzMgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDI4ODFkMTRhYjYw
ZjVlNWFmOGE4ZDM2YzYxNTQ2NTNjM2ZkMzQwYzEuLjhkZWY5MTU5NDIyMTE3ZDdhNTFiMGNiYjdi
MDBiOWRmYTExYjJmNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xNTAxLDcgKzE1MDEsNiBA
QCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmNwcAog
ICAgIGluc3BlY3Rvci9Db250ZW50U2VhcmNoVXRpbHMuY3BwCiAgICAgaW5zcGVjdG9yL0RPTUVk
aXRvci5jcHAKLSAgICBpbnNwZWN0b3IvRE9NTm9kZUhpZ2hsaWdodGVyLmNwcAogICAgIGluc3Bl
Y3Rvci9ET01QYXRjaFN1cHBvcnQuY3BwCiAgICAgaW5zcGVjdG9yL0lkZW50aWZpZXJzRmFjdG9y
eS5jcHAKICAgICBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwCkBAIC0xNTMzLDYgKzE1MzIs
NyBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckluZGV4ZWRE
QkFnZW50LmNwcAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwCiAg
ICAgaW5zcGVjdG9yL0luc3BlY3Rvck1lbW9yeUFnZW50LmNwcAorICAgIGluc3BlY3Rvci9JbnNw
ZWN0b3JPdmVybGF5LmNwcAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmNw
cAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmNwcAogICAgIGluc3BlY3Rv
ci9JbnNwZWN0b3JSdW50aW1lQWdlbnQuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpp
bmRleCA1ZDg0M2U5YWM2MjU4NTk3NDgxMTlhZGI1MmVhNDVjNjA4YWZlMTliLi5mYWZlMjk3ZDAz
MzBlNWJlMWUwODNmMGU1ODlmMjlkNzI1ZDY2MjA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxp
c3QuYW0KQEAgLTI3MjIsOCArMjcyMiw2IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0NvbnRlbnRTZWFyY2hVdGlscy5oIFwKIAlTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvRE9NRWRpdG9yLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RP
TUVkaXRvci5oIFwKLQlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NTm9kZUhpZ2hsaWdodGVy
LmNwcCBcCi0JU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTU5vZGVIaWdobGlnaHRlci5oIFwK
IAlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcCBcCiAJU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSWRlbnRpZmllcnNGYWN0b3J5LmNwcCBcCkBAIC0yNzg4LDYgKzI3ODYsOCBAQCB3
ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb24uaCBcCiAJU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck1l
bW9yeUFnZW50LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck1lbW9y
eUFnZW50LmggXAorCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNw
cCBcCisJU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuaCBcCiAJU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAgXAogCVNvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuaCBcCiAJU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IDZi
N2VhMzc2MDU1ZjFlMzE5MDU1NGJhZTc4Y2IyNGZhZjA0ZWMwNWMuLmRhZWU5ODQ3Y2EwODQwODAx
YWZlMmM0OTM0NmVlM2JkMDU5YTAzYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1Rhcmdl
dC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAtNzM4LDcgKzczOCw2IEBA
IFNPVVJDRVMgKz0gXAogICAgIGluc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5jcHAgXAogICAgIGlu
c3BlY3Rvci9Db250ZW50U2VhcmNoVXRpbHMuY3BwIFwKICAgICBpbnNwZWN0b3IvRE9NRWRpdG9y
LmNwcCBcCi0gICAgaW5zcGVjdG9yL0RPTU5vZGVIaWdobGlnaHRlci5jcHAgXAogICAgIGluc3Bl
Y3Rvci9ET01QYXRjaFN1cHBvcnQuY3BwIFwKICAgICBpbnNwZWN0b3IvSWRlbnRpZmllcnNGYWN0
b3J5LmNwcCBcCiAgICAgaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmNwcCBcCkBAIC03NjcsNiAr
NzY2LDcgQEAgU09VUkNFUyArPSBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3Rvckhpc3RvcnkuY3Bw
IFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcCBcCiAgICAgaW5z
cGVjdG9yL0luc3BlY3Rvck1lbW9yeUFnZW50LmNwcCBcCisgICAgaW5zcGVjdG9yL0luc3BlY3Rv
ck92ZXJsYXkuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcCBcCiAg
ICAgaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwIFwKICAgICBpbnNwZWN0b3Iv
SW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAgXApAQCAtMTg0MSw3ICsxODQxLDYgQEAgSEVBREVS
UyArPSBcCiAgICAgaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmggXAogICAgIGluc3BlY3Rvci9D
b250ZW50U2VhcmNoVXRpbHMuaCBcCiAgICAgaW5zcGVjdG9yL0RPTUVkaXRvci5oIFwKLSAgICBp
bnNwZWN0b3IvRE9NTm9kZUhpZ2hsaWdodGVyLmggXAogICAgIGluc3BlY3Rvci9ET01QYXRjaFN1
cHBvcnQuaCBcCiAgICAgaW5zcGVjdG9yL0lkZW50aWZpZXJzRmFjdG9yeS5oIFwKICAgICBpbnNw
ZWN0b3IvSW5qZWN0ZWRTY3JpcHQuaCBcCkBAIC0xODcyLDYgKzE4NzEsNyBAQCBIRUFERVJTICs9
IFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9ySGlzdG9yeS5oIFwKICAgICBpbnNwZWN0b3IvSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uLmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JNZW1vcnlB
Z2VudC5oIFwKKyAgICBpbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5oIFwKICAgICBpbnNwZWN0
b3IvSW5zcGVjdG9yUGFnZUFnZW50LmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxl
ckFnZW50LmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmggXApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpCmluZGV4IDVjY2FlYjRiMTA0ZmExYjZhNzk4NWQ2ZGI0MTAyZTgyYThiZjU2ODQu
LmUwYzQ3YzdhYjcxM2ExNjBhNjJiODJhMTU5ZjU5ODUzZTgzNDdlNGMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKQEAgLTI4MDcsOCArMjgwNyw2IEBACiAgICAgICAgICAgICAnaW5zcGVjdG9yL0NvbnRlbnRT
ZWFyY2hVdGlscy5oJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvRE9NRWRpdG9yLmNwcCcsCiAg
ICAgICAgICAgICAnaW5zcGVjdG9yL0RPTUVkaXRvci5oJywKLSAgICAgICAgICAgICdpbnNwZWN0
b3IvRE9NTm9kZUhpZ2hsaWdodGVyLmNwcCcsCi0gICAgICAgICAgICAnaW5zcGVjdG9yL0RPTU5v
ZGVIaWdobGlnaHRlci5oJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0
LmNwcCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5oJywKICAgICAg
ICAgICAgICdpbnNwZWN0b3IvSWRlbnRpZmllcnNGYWN0b3J5LmNwcCcsCkBAIC0yODY2LDYgKzI4
NjQsOCBAQAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24u
aCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3Rvck1lbW9yeUFnZW50LmNwcCcsCiAg
ICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3Rvck1lbW9yeUFnZW50LmgnLAorICAgICAgICAg
ICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcCcsCisgICAgICAgICAgICAnaW5zcGVj
dG9yL0luc3BlY3Rvck92ZXJsYXkuaCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3Rv
clBhZ2VBZ2VudC5jcHAnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdl
bnQuaCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3Bw
JywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXgg
NTczMWE4Zjc2OTJkMTc2YzdiY2Q4ZTllMjlkYTkxNTU5NWE4ZjY0NC4uNzBkYjUzNzI4ZDU1YWRi
OThkNGE0NWVkMTNkNDQ3YzRkODgzMDBmZiAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTczODQ3LDMwICs3Mzg0Nyw2IEBACiAJCQkJPgogCQkJ
PC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxET01Ob2Rl
SGlnaGxpZ2h0ZXIuY3BwIgotCQkJCT4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJCQkJTmFt
ZT0iUmVsZWFzZXxXaW4zMiIKLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCi0JCQkJCT4K
LQkJCQkJPFRvb2wKLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJCS8+Ci0JCQkJ
PC9GaWxlQ29uZmlndXJhdGlvbj4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJCQkJTmFtZT0i
UHJvZHVjdGlvbnxXaW4zMiIKLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCi0JCQkJCT4K
LQkJCQkJPFRvb2wKLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJCS8+Ci0JCQkJ
PC9GaWxlQ29uZmlndXJhdGlvbj4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQ
YXRoPSIuLlxpbnNwZWN0b3JcRE9NTm9kZUhpZ2hsaWdodGVyLmgiCi0JCQkJPgotCQkJPC9GaWxl
PgotCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxET01QYXRjaFN1cHBv
cnQuY3BwIgogCQkJCT4KIAkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KQEAgLTc0NjQzLDYgKzc0NjE5
LDMwIEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XGluc3BlY3RvclxJbnNwZWN0b3JPdmVybGF5LmNwcCIKKwkJCQk+CisJCQkJPEZpbGVDb25maWd1
cmF0aW9uCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxk
PSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29s
IgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJPEZpbGVDb25maWd1cmF0
aW9uCisJCQkJCU5hbWU9IlByb2R1Y3Rpb258V2luMzIiCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxk
PSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29s
IgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8L0ZpbGU+CisJCQk8Rmls
ZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3Rvck92ZXJsYXkuaCIKKwkJ
CQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9y
XEluc3BlY3RvclBhZ2VBZ2VudC5jcHAiCiAJCQkJPgogCQkJCTxGaWxlQ29uZmlndXJhdGlvbgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IDcyZmIyNDUyNDFmZGQ2MGMxYjEzODZhNTU4ZmI0OWM4NmUyZmVkMTcuLjYzYTdhMzE1ZDE4
ZmY1NDQ1OTQwY2ZiYzUwNjQxZmM0NTU2Y2JjYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE0NDgsOCArMTQ0OCw2IEBACiAJ
CTRFMTk1OTJDMEEzOURBQ0MwMDIyMEZFNSAvKiBNZWRpYVF1ZXJ5RXZhbHVhdG9yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0RTE5NTkyNjBBMzlEQUND
MDAyMjBGRTUgLyogTWVkaWFRdWVyeUV2YWx1YXRvci5oICovOyB9OwogCQk0RTE5NTkyRDBBMzlE
QUNDMDAyMjBGRTUgLyogTWVkaWFRdWVyeUV4cC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0RTE5NTkyNzBBMzlEQUNDMDAyMjBGRTUgLyogTWVkaWFR
dWVyeUV4cC5jcHAgKi87IH07CiAJCTRFMTk1OTJFMEEzOURBQ0MwMDIyMEZFNSAvKiBNZWRpYVF1
ZXJ5RXhwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
RTE5NTkyODBBMzlEQUNDMDAyMjBGRTUgLyogTWVkaWFRdWVyeUV4cC5oICovOyB9OwotCQk0RjE0
NDIyODEzMzlGRDYyMDBFMEQ2RjggLyogRE9NTm9kZUhpZ2hsaWdodGVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRGMTQ0MjI2MTMzOUZENjIwMEUw
RDZGOCAvKiBET01Ob2RlSGlnaGxpZ2h0ZXIuY3BwICovOyB9OwotCQk0RjE0NDIyOTEzMzlGRDYy
MDBFMEQ2RjggLyogRE9NTm9kZUhpZ2hsaWdodGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0RjE0NDIyNzEzMzlGRDYyMDBFMEQ2RjggLyogRE9NTm9k
ZUhpZ2hsaWdodGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJNEYxNTM0REUxMUI1MzJFQzAwMjFGRDg2IC8qIEVkaXRpbmdCZWhhdmlvci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEYxNTM0REQxMUI1
MzJFQzAwMjFGRDg2IC8qIEVkaXRpbmdCZWhhdmlvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTRGMTUzNEUwMTFCNTMzMDIwMDIxRkQ4NiAvKiBF
ZGl0aW5nQmVoYXZpb3JUeXBlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNEYxNTM0REYxMUI1MzMwMjAwMjFGRDg2IC8qIEVkaXRpbmdCZWhhdmlvclR5
cGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NEYyRDIwNTQxMkVBRTdCMzAwNUMyODc0IC8qIEluc3BlY3RvckFnZW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0RjJEMjA1MjEyRUFFN0IzMDA1QzI4
NzQgLyogSW5zcGVjdG9yQWdlbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwpAQCAtMTk2Nyw2ICsxOTY1LDggQEAKIAkJN0IxRUEwQ0YxNTc2QzVCNTAw
NjAxNzdEIC8qIEpTVW5kb01hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDdCMUVBMENEMTU3NkM1QjUwMDYwMTc3RCAvKiBKU1VuZG9NYW5hZ2Vy
LmggKi87IH07CiAJCTdCOTE4NEQyMTU3NThFNDIwMDkyQUE5MyAvKiBVbmRvTWFuYWdlci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QjkxODRDRjE1
NzU4RTQyMDA5MkFBOTMgLyogVW5kb01hbmFnZXIuY3BwICovOyB9OwogCQk3QjkxODREMzE1NzU4
RTQyMDA5MkFBOTMgLyogVW5kb01hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDdCOTE4NEQwMTU3NThFNDIwMDkyQUE5MyAvKiBVbmRvTWFuYWdl
ci5oICovOyB9OworCQk3QzUyMkQ0QjE1QjQ3N0U4MDA5QjdDOTUgLyogSW5zcGVjdG9yT3Zlcmxh
eS5jcHAgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M1MjJENDkxNUI0NzdF
ODAwOUI3Qzk1IC8qIEluc3BlY3Rvck92ZXJsYXkuY3BwICovOyB9OworCQk3QzUyMkQ0QzE1QjQ3
OEIyMDA5QjdDOTUgLyogSW5zcGVjdG9yT3ZlcmxheS5oICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDdDNTIyRDRBMTVCNDc3RTgwMDlCN0M5NSAvKiBJbnNwZWN0b3JPdmVybGF5
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0Uz
M0NEMDExMjdGMzQwRDAwQkU4RjE3IC8qIFB1cmdlUHJpb3JpdHkuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdFMzNDRDAwMTI3RjM0MEQwMEJFOEYxNyAv
KiBQdXJnZVByaW9yaXR5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJN0UzN0VGMkUxMzM5MjA4ODAwQjI5MjUwIC8qIFN1YnJlc291cmNlTG9hZGVy
Q0YuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0Uz
N0VGMkQxMzM5MjA4ODAwQjI5MjUwIC8qIFN1YnJlc291cmNlTG9hZGVyQ0YuY3BwICovOyB9Owog
CQk3RTk5QUY1MTBCMTM4NDY0NjhGQjAxQTUgLyogV2luZG93Rm9jdXNBbGxvd2VkSW5kaWNhdG9y
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdFOTlB
RjUyMEIxMzg0NjQ2OEZCMDFBNSAvKiBXaW5kb3dGb2N1c0FsbG93ZWRJbmRpY2F0b3IuY3BwICov
OyB9OwpAQCAtODU3NCw4ICs4NTc0LDYgQEAKIAkJNEUxOTU5MjYwQTM5REFDQzAwMjIwRkU1IC8q
IE1lZGlhUXVlcnlFdmFsdWF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IE1lZGlhUXVlcnlFdmFsdWF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEUx
OTU5MjcwQTM5REFDQzAwMjIwRkU1IC8qIE1lZGlhUXVlcnlFeHAuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlhUXVlcnlFeHAuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk0RTE5NTkyODBBMzlEQUNDMDAyMjBGRTUgLyogTWVkaWFRdWVyeUV4
cC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFRdWVyeUV4cC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0RjE0NDIyNjEzMzlGRDYyMDBFMEQ2RjggLyog
RE9NTm9kZUhpZ2hsaWdodGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IERPTU5vZGVIaWdobGlnaHRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTRGMTQ0MjI3MTMzOUZENjIwMEUwRDZGOCAvKiBET01Ob2RlSGlnaGxpZ2h0ZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NTm9kZUhpZ2hsaWdodGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRGMTUzNEREMTFCNTMyRUMwMDIxRkQ4NiAvKiBFZGl0aW5n
QmVoYXZpb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRWRpdGluZ0JlaGF2
aW9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRGMTUzNERGMTFCNTMzMDIwMDIx
RkQ4NiAvKiBFZGl0aW5nQmVoYXZpb3JUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBFZGl0aW5nQmVoYXZpb3JUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk0RjJEMjA1MjEyRUFFN0IzMDA1QzI4NzQgLyogSW5zcGVjdG9yQWdlbnQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yQWdlbnQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTkxMzQsNiArOTEzMiw4IEBACiAJCTdCOTE4NENGMTU3NThFNDIw
MDkyQUE5MyAvKiBVbmRvTWFuYWdlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBVbmRvTWFuYWdlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdC
OTE4NEQwMTU3NThFNDIwMDkyQUE5MyAvKiBVbmRvTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBVbmRvTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3QjkxODREMTE1NzU4RTQyMDA5MkFBOTMgLyogVW5kb01hbmFnZXIuaWRsICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dDsgcGF0aCA9IFVuZG9NYW5hZ2VyLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJN0M1MjJENDkxNUI0NzdFODAwOUI3Qzk1IC8qIEluc3BlY3Rvck92ZXJsYXkuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVjdG9yT3ZlcmxheS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDNTIyRDRBMTVCNDc4QjIwMDlCN0M5NSAv
KiBJbnNwZWN0b3JPdmVybGF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElu
c3BlY3Rvck92ZXJsYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0M2MDEyODA2
MDA3OEJCNzBFMzY3QTk1IC8qIEROU1Jlc29sdmVRdWV1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBETlNSZXNvbHZlUXVldWUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3RTMzQ0QwMDEyN0YzNDBEMDBCRThGMTcgLyogUHVyZ2VQcmlvcml0eS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQdXJnZVByaW9yaXR5Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdFMzdFRjJEMTMzOTIwODgwMEIyOTI1MCAvKiBTdWJy
ZXNvdXJjZUxvYWRlckNGLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IFN1YnJlc291cmNlTG9hZGVyQ0YuY3BwOyBwYXRoID0gY2YvU3VicmVzb3VyY2VMb2FkZXJDRi5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDUzNiw4ICsxNDUzNiw2IEBACiAJ
CQkJNTkxMDJGQkExNDMyN0QzQjAwM0M5RDA0IC8qIENvbnRlbnRTZWFyY2hVdGlscy5oICovLAog
CQkJCTdBQUJBMjU3MTRCQzYxMzMwMEFBOUExMSAvKiBET01FZGl0b3IuY3BwICovLAogCQkJCTdB
QUJBMjU4MTRCQzYxMzMwMEFBOUExMSAvKiBET01FZGl0b3IuaCAqLywKLQkJCQk0RjE0NDIyNjEz
MzlGRDYyMDBFMEQ2RjggLyogRE9NTm9kZUhpZ2hsaWdodGVyLmNwcCAqLywKLQkJCQk0RjE0NDIy
NzEzMzlGRDYyMDBFMEQ2RjggLyogRE9NTm9kZUhpZ2hsaWdodGVyLmggKi8sCiAJCQkJN0E1NDg4
MTYxNEU0MzJBMTAwNkFFMDVBIC8qIERPTVBhdGNoU3VwcG9ydC5jcHAgKi8sCiAJCQkJN0E1NDg4
MTUxNEU0MzJBMTAwNkFFMDVBIC8qIERPTVBhdGNoU3VwcG9ydC5oICovLAogCQkJCTU5MTNBMjNG
MTNENDlFQkEwMEY1QjA1QyAvKiBJZGVudGlmaWVyc0ZhY3RvcnkuY3BwICovLApAQCAtMTQ2MDks
NiArMTQ2MDcsOCBAQAogCQkJCTIwRDYyOTI1MTI1MzY5MEIwMDA4MTU0MyAvKiBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb24uaCAqLywKIAkJCQk3QUE1MUREMzE0ODUwNkE5MDBBRDI3NTIgLyogSW5z
cGVjdG9yTWVtb3J5QWdlbnQuY3BwICovLAogCQkJCTdBQTUxREQ0MTQ4NTA2QTkwMEFEMjc1MiAv
KiBJbnNwZWN0b3JNZW1vcnlBZ2VudC5oICovLAorCQkJCTdDNTIyRDQ5MTVCNDc3RTgwMDlCN0M5
NSAvKiBJbnNwZWN0b3JPdmVybGF5LmNwcCAqLywKKwkJCQk3QzUyMkQ0QTE1QjQ3OEIyMDA5QjdD
OTUgLyogSW5zcGVjdG9yT3ZlcmxheS5oICovLAogCQkJCTRGNkZERDYyMTM0MURFREQwMDFGOEVF
MyAvKiBJbnNwZWN0b3JQYWdlQWdlbnQuY3BwICovLAogCQkJCTRGNkZERDYzMTM0MURFREQwMDFG
OEVFMyAvKiBJbnNwZWN0b3JQYWdlQWdlbnQuaCAqLywKIAkJCQk5RjBENkIyQzEyMUJGRUJBMDA2
QzAyODggLyogSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAgKi8sCkBAIC0yMjc0NCw3ICsyMjc0
NCw2IEBACiAJCQkJODVFNzExRDIwQUM1RDUzNTAwNTMyNzBGIC8qIERPTU5hbWVkTm9kZU1hcElu
dGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NTNCRjREQjBBQkI2QjU1MDA4NjQ3QkIgLyog
RE9NTm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODU0MDc1MjYwQUQ2QzY2NzAwNjIwQzU3IC8q
IERPTU5vZGVGaWx0ZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTRGMTQ0MjI5MTMzOUZENjIwMEUw
RDZGOCAvKiBET01Ob2RlSGlnaGxpZ2h0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1QjQ5OEZC
MEFEQjM0MDIwMDkyNUNCQiAvKiBET01Ob2RlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTg1NTI2QzM3MEFCMEExN0UwMDAzMDJFQSAvKiBET01Ob2RlSXRlcmF0b3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTg1MEI0MUMyMEFEOUU3RTcwMEE2RUQ0RiAvKiBET01Ob2RlSXRlcmF0b3JJbnRl
cm5hbC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMzYwOCw2ICsyMzYwNyw3IEBACiAJCQkJN0FDRDg4
RDQxNEMwOEJENjAwODRFREQyIC8qIEluc3BlY3RvckluZGV4ZWREQkFnZW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkyMEQ2MjkyNzEyNTM2OTBCMDAwODE1NDMgLyogSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QUE1MURENjE0ODUwNkE5MDBBRDI3NTIgLyog
SW5zcGVjdG9yTWVtb3J5QWdlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTdDNTIyRDRDMTVCNDc4
QjIwMDlCN0M5NSAvKiBJbnNwZWN0b3JPdmVybGF5LmggaW4gSGVhZGVycyAqLywKIAkJCQk0RjZG
REQ2NTEzNDFERUREMDAxRjhFRTMgLyogSW5zcGVjdG9yUGFnZUFnZW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQk5RjBENkIyRjEyMUJGRUJBMDA2QzAyODggLyogSW5zcGVjdG9yUHJvZmlsZXJBZ2Vu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODJBQjE3NzYxMjVDODI2NzAwQzUwNjlEIC8qIEluc3Bl
Y3RvclJlc291cmNlQWdlbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMjYxNjUsNyArMjYxNjUsNiBA
QAogCQkJCTg1QzdGNUMwMEFBRkI3Q0QwMDQwMTRERCAvKiBET01NdXRhdGlvbkV2ZW50Lm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJODUxOERENzkwQTlDRjMxQjAwOTFCN0E2IC8qIERPTU5hbWVkTm9k
ZU1hcC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTg1M0JGNERDMEFCQjZCNTUwMDg2NDdCQiAvKiBE
T01Ob2RlLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJNEYxNDQyMjgxMzM5RkQ2MjAwRTBENkY4IC8q
IERPTU5vZGVIaWdobGlnaHRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NTUyNkMzODBBQjBB
MTdFMDAwMzAyRUEgLyogRE9NTm9kZUl0ZXJhdG9yLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJODVB
Q0FBOEUwQTlCNzU5QzAwNjcxRTkwIC8qIERPTU5vZGVMaXN0Lm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJODVDQTk2RUIwQTk2MjRFOTAwNjkwQ0NGIC8qIERPTU5vdGF0aW9uLm1tIGluIFNvdXJjZXMg
Ki8sCkBAIC0yNjc3Miw2ICsyNjc3MSw3IEBACiAJCQkJN0FDRDg4RDMxNEMwOEJENjAwODRFREQy
IC8qIEluc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTIwRDYy
OTI2MTI1MzY5MEIwMDA4MTU0MyAvKiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJN0FBNTFERDUxNDg1MDZBOTAwQUQyNzUyIC8qIEluc3BlY3Rvck1lbW9y
eUFnZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTdDNTIyRDRCMTVCNDc3RTgwMDlCN0M5NSAv
KiBJbnNwZWN0b3JPdmVybGF5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTRGNkZERDY0MTM0MURF
REQwMDFGOEVFMyAvKiBJbnNwZWN0b3JQYWdlQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
OUYwRDZCMkUxMjFCRkVCQTAwNkMwMjg4IC8qIEluc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJODJBQjE3NzUxMjVDODI2NzAwQzUwNjlEIC8qIEluc3BlY3RvclJl
c291cmNlQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvRE9NTm9kZUhpZ2hsaWdodGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA4MTgxZGRiOTkxMTAzOTVlNmJkMDYzNjc2MzNhODI0YmViNmU5NzZlLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9ET01Ob2RlSGlnaGxpZ2h0ZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjE0ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENv
bXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SKQotCi0jaW5jbHVk
ZSAiRE9NTm9kZUhpZ2hsaWdodGVyLmgiCi0KLSNpbmNsdWRlICJFbGVtZW50LmgiCi0jaW5jbHVk
ZSAiRm9udENhY2hlLmgiCi0jaW5jbHVkZSAiRm9udEZhbWlseS5oIgotI2luY2x1ZGUgIkZyYW1l
LmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
Ci0jaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgotI2luY2x1ZGUgIkluc3BlY3RvckNsaWVudC5o
IgotI2luY2x1ZGUgIk5vZGUuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUmFuZ2Uu
aCIKLSNpbmNsdWRlICJSZW5kZXJCb3hNb2RlbE9iamVjdC5oIgotI2luY2x1ZGUgIlJlbmRlcklu
bGluZS5oIgotI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgotI2luY2x1ZGUgIlNldHRpbmdzLmgi
Ci0jaW5jbHVkZSAiU3R5bGVkRWxlbWVudC5oIgotI2luY2x1ZGUgIlRleHRSdW4uaCIKLSNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
bmFtZXNwYWNlIHsKLQotI2lmIE9TKFdJTkRPV1MpCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgZm9u
dEhlaWdodFB4ID0gMTI7Ci0jZWxpZiBPUyhNQUNfT1NfWCkgfHwgT1MoVU5JWCkKLXN0YXRpYyBj
b25zdCB1bnNpZ25lZCBmb250SGVpZ2h0UHggPSAxMTsKLSNlbmRpZgotCi1jb25zdCBzdGF0aWMg
aW50IHJlY3RJbmZsYXRlUHggPSA0OwotY29uc3Qgc3RhdGljIGludCBib3JkZXJXaWR0aFB4ID0g
MTsKLWNvbnN0IHN0YXRpYyBpbnQgdG9vbHRpcFBhZGRpbmcgPSA0OwotCi1jb25zdCBzdGF0aWMg
aW50IGFycm93VGlwT2Zmc2V0ID0gMjA7Ci1jb25zdCBzdGF0aWMgZmxvYXQgYXJyb3dIZWlnaHQg
PSA3OwotY29uc3Qgc3RhdGljIGZsb2F0IGFycm93SGFsZldpZHRoID0gNzsKLQotUGF0aCBxdWFk
VG9QYXRoKGNvbnN0IEZsb2F0UXVhZCYgcXVhZCkKLXsKLSAgICBQYXRoIHF1YWRQYXRoOwotICAg
IHF1YWRQYXRoLm1vdmVUbyhxdWFkLnAxKCkpOwotICAgIHF1YWRQYXRoLmFkZExpbmVUbyhxdWFk
LnAyKCkpOwotICAgIHF1YWRQYXRoLmFkZExpbmVUbyhxdWFkLnAzKCkpOwotICAgIHF1YWRQYXRo
LmFkZExpbmVUbyhxdWFkLnA0KCkpOwotICAgIHF1YWRQYXRoLmNsb3NlU3VicGF0aCgpOwotICAg
IHJldHVybiBxdWFkUGF0aDsKLX0KLQotdm9pZCBkcmF3T3V0bGluZWRRdWFkKEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRRdWFkJiBxdWFkLCBjb25zdCBDb2xvciYgZmlsbENv
bG9yLCBjb25zdCBDb2xvciYgb3V0bGluZUNvbG9yKQotewotICAgIHN0YXRpYyBjb25zdCBpbnQg
b3V0bGluZVRoaWNrbmVzcyA9IDI7Ci0KLSAgICBQYXRoIHF1YWRQYXRoID0gcXVhZFRvUGF0aChx
dWFkKTsKLQotICAgIC8vIENsaXAgb3V0IHRoZSBxdWFkLCB0aGVuIGRyYXcgd2l0aCBhIDJweCBz
dHJva2UgdG8gZ2V0IGEgcGl4ZWwKLSAgICAvLyBvZiBvdXRsaW5lIChiZWNhdXNlIGluZmxhdGlu
ZyBhIHF1YWQgaXMgaGFyZCkKLSAgICB7Ci0gICAgICAgIGNvbnRleHQuc2F2ZSgpOwotICAgICAg
ICBjb250ZXh0LmNsaXBPdXQocXVhZFBhdGgpOwotCi0gICAgICAgIGNvbnRleHQuc2V0U3Ryb2tl
VGhpY2tuZXNzKG91dGxpbmVUaGlja25lc3MpOwotICAgICAgICBjb250ZXh0LnNldFN0cm9rZUNv
bG9yKG91dGxpbmVDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7Ci0gICAgICAgIGNvbnRleHQu
c3Ryb2tlUGF0aChxdWFkUGF0aCk7Ci0KLSAgICAgICAgY29udGV4dC5yZXN0b3JlKCk7Ci0gICAg
fQotCi0gICAgLy8gTm93IGRvIHRoZSBmaWxsCi0gICAgY29udGV4dC5zZXRGaWxsQ29sb3IoZmls
bENvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKLSAgICBjb250ZXh0LmZpbGxQYXRoKHF1YWRQ
YXRoKTsKLX0KLQotdm9pZCBkcmF3T3V0bGluZWRRdWFkV2l0aENsaXAoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBjb25zdCBGbG9hdFF1YWQmIHF1YWQsIGNvbnN0IEZsb2F0UXVhZCYgY2xpcFF1
YWQsIGNvbnN0IENvbG9yJiBmaWxsQ29sb3IpCi17Ci0gICAgY29udGV4dC5zYXZlKCk7Ci0gICAg
UGF0aCBjbGlwUXVhZFBhdGggPSBxdWFkVG9QYXRoKGNsaXBRdWFkKTsKLSAgICBjb250ZXh0LmNs
aXBPdXQoY2xpcFF1YWRQYXRoKTsKLSAgICBkcmF3T3V0bGluZWRRdWFkKGNvbnRleHQsIHF1YWQs
IGZpbGxDb2xvciwgQ29sb3I6OnRyYW5zcGFyZW50KTsKLSAgICBjb250ZXh0LnJlc3RvcmUoKTsK
LX0KLQotdm9pZCBkcmF3SGlnaGxpZ2h0Rm9yQm94KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgRmxvYXRRdWFkJiBjb250ZW50UXVhZCwgY29uc3QgRmxvYXRRdWFkJiBwYWRkaW5nUXVh
ZCwgY29uc3QgRmxvYXRRdWFkJiBib3JkZXJRdWFkLCBjb25zdCBGbG9hdFF1YWQmIG1hcmdpblF1
YWQsIGNvbnN0IEhpZ2hsaWdodENvbmZpZyYgaGlnaGxpZ2h0Q29uZmlnKQotewotICAgIGJvb2wg
aGFzTWFyZ2luID0gaGlnaGxpZ2h0Q29uZmlnLm1hcmdpbiAhPSBDb2xvcjo6dHJhbnNwYXJlbnQ7
Ci0gICAgYm9vbCBoYXNCb3JkZXIgPSBoaWdobGlnaHRDb25maWcuYm9yZGVyICE9IENvbG9yOjp0
cmFuc3BhcmVudDsKLSAgICBib29sIGhhc1BhZGRpbmcgPSBoaWdobGlnaHRDb25maWcucGFkZGlu
ZyAhPSBDb2xvcjo6dHJhbnNwYXJlbnQ7Ci0gICAgYm9vbCBoYXNDb250ZW50ID0gaGlnaGxpZ2h0
Q29uZmlnLmNvbnRlbnQgIT0gQ29sb3I6OnRyYW5zcGFyZW50IHx8IGhpZ2hsaWdodENvbmZpZy5j
b250ZW50T3V0bGluZSAhPSBDb2xvcjo6dHJhbnNwYXJlbnQ7Ci0KLSAgICBGbG9hdFF1YWQgY2xp
cFF1YWQ7Ci0gICAgQ29sb3IgY2xpcENvbG9yOwotICAgIGlmIChoYXNNYXJnaW4gJiYgKCFoYXNC
b3JkZXIgfHwgbWFyZ2luUXVhZCAhPSBib3JkZXJRdWFkKSkgewotICAgICAgICBkcmF3T3V0bGlu
ZWRRdWFkV2l0aENsaXAoY29udGV4dCwgbWFyZ2luUXVhZCwgYm9yZGVyUXVhZCwgaGlnaGxpZ2h0
Q29uZmlnLm1hcmdpbik7Ci0gICAgICAgIGNsaXBRdWFkID0gYm9yZGVyUXVhZDsKLSAgICB9Ci0g
ICAgaWYgKGhhc0JvcmRlciAmJiAoIWhhc1BhZGRpbmcgfHwgYm9yZGVyUXVhZCAhPSBwYWRkaW5n
UXVhZCkpIHsKLSAgICAgICAgZHJhd091dGxpbmVkUXVhZFdpdGhDbGlwKGNvbnRleHQsIGJvcmRl
clF1YWQsIHBhZGRpbmdRdWFkLCBoaWdobGlnaHRDb25maWcuYm9yZGVyKTsKLSAgICAgICAgY2xp
cFF1YWQgPSBwYWRkaW5nUXVhZDsKLSAgICB9Ci0gICAgaWYgKGhhc1BhZGRpbmcgJiYgKCFoYXND
b250ZW50IHx8IHBhZGRpbmdRdWFkICE9IGNvbnRlbnRRdWFkKSkgewotICAgICAgICBkcmF3T3V0
bGluZWRRdWFkV2l0aENsaXAoY29udGV4dCwgcGFkZGluZ1F1YWQsIGNvbnRlbnRRdWFkLCBoaWdo
bGlnaHRDb25maWcucGFkZGluZyk7Ci0gICAgICAgIGNsaXBRdWFkID0gY29udGVudFF1YWQ7Ci0g
ICAgfQotICAgIGlmIChoYXNDb250ZW50KQotICAgICAgICBkcmF3T3V0bGluZWRRdWFkKGNvbnRl
eHQsIGNvbnRlbnRRdWFkLCBoaWdobGlnaHRDb25maWcuY29udGVudCwgaGlnaGxpZ2h0Q29uZmln
LmNvbnRlbnRPdXRsaW5lKTsKLX0KLQotdm9pZCBkcmF3SGlnaGxpZ2h0Rm9yU1ZHUmVuZGVyZXIo
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBWZWN0b3I8RmxvYXRRdWFkPiYgYWJzb2x1
dGVRdWFkcywgY29uc3QgSGlnaGxpZ2h0Q29uZmlnJiBoaWdobGlnaHRDb25maWcpCi17Ci0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBhYnNvbHV0ZVF1YWRzLnNpemUoKTsgKytpKQotICAgICAg
ICBkcmF3T3V0bGluZWRRdWFkKGNvbnRleHQsIGFic29sdXRlUXVhZHNbaV0sIGhpZ2hsaWdodENv
bmZpZy5jb250ZW50LCBDb2xvcjo6dHJhbnNwYXJlbnQpOwotfQotCi1pbnQgZHJhd1N1YnN0cmlu
Zyhjb25zdCBUZXh0UnVuJiBnbG9iYWxUZXh0UnVuLCBpbnQgb2Zmc2V0LCBpbnQgbGVuZ3RoLCBj
b25zdCBDb2xvciYgdGV4dENvbG9yLCBjb25zdCBGb250JiBmb250LCBHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIHRpdGxlUmVjdCkKLXsKLSAgICBjb250ZXh0LnNl
dEZpbGxDb2xvcih0ZXh0Q29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwotICAgIGNvbnRleHQu
ZHJhd1RleHQoZm9udCwgZ2xvYmFsVGV4dFJ1biwgSW50UG9pbnQodGl0bGVSZWN0LnBpeGVsU25h
cHBlZFgoKSArIHJlY3RJbmZsYXRlUHgsIHRpdGxlUmVjdC5waXhlbFNuYXBwZWRZKCkgKyBmb250
LmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCkpLCBvZmZzZXQsIG9mZnNldCArIGxlbmd0aCk7Ci0gICAg
cmV0dXJuIG9mZnNldCArIGxlbmd0aDsKLX0KLQotZmxvYXQgY2FsY3VsYXRlQXJyb3dUaXBYKGNv
bnN0IExheW91dFJlY3QmIGFuY2hvckJveCwgY29uc3QgTGF5b3V0UmVjdCYgdGl0bGVSZWN0KQot
ewotICAgIGNvbnN0IHN0YXRpYyBpbnQgYW5jaG9yVGlwT2Zmc2V0UHggPSAyOwotCi0gICAgaW50
IG1pblggPSB0aXRsZVJlY3QueCgpICsgYXJyb3dIYWxmV2lkdGg7Ci0gICAgaW50IG1heFggPSB0
aXRsZVJlY3QubWF4WCgpIC0gYXJyb3dIYWxmV2lkdGg7Ci0gICAgaW50IGFuY2hvclggPSBhbmNo
b3JCb3gueCgpOwotICAgIGludCBhbmNob3JNYXhYID0gYW5jaG9yQm94Lm1heFgoKTsKLQotICAg
IGludCB4ID0gdGl0bGVSZWN0LngoKSArIGFycm93VGlwT2Zmc2V0OyAvLyBEZWZhdWx0IHRvb2x0
aXAgcG9zaXRpb24uCi0gICAgaWYgKHggPCBhbmNob3JYKQotICAgICAgICB4ID0gYW5jaG9yWCAr
IGFuY2hvclRpcE9mZnNldFB4OwotICAgIGVsc2UgaWYgKHggPiBhbmNob3JNYXhYKQotICAgICAg
ICB4ID0gYW5jaG9yTWF4WCAtIGFuY2hvclRpcE9mZnNldFB4OwotCi0gICAgaWYgKHggPCBtaW5Y
KQotICAgICAgICB4ID0gbWluWDsKLSAgICBlbHNlIGlmICh4ID4gbWF4WCkKLSAgICAgICAgeCA9
IG1heFg7Ci0KLSAgICByZXR1cm4geDsKLX0KLQotdm9pZCBzZXRVcEZvbnREZXNjcmlwdGlvbihG
b250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgV2ViQ29yZTo6U2V0dGluZ3MqIHNldHRp
bmdzKQotewotI2RlZmluZSBUT09MVElQX0ZPTlRfRkFNSUxJRVMoc2l6ZSwgLi4uKSBcCi1zdGF0
aWMgY29uc3QgdW5zaWduZWQgdG9vbHRpcEZvbnRGYWNlU2l6ZSA9IHNpemU7XAotc3RhdGljIGNv
bnN0IEF0b21pY1N0cmluZyogdG9vbHRpcEZvbnRGYWNlW3NpemVdID0geyBfX1ZBX0FSR1NfXyB9
OwotCi0jaWYgT1MoV0lORE9XUykKLVRPT0xUSVBfRk9OVF9GQU1JTElFUygyLCBuZXcgQXRvbWlj
U3RyaW5nKCJDb25zb2xhcyIpLCBuZXcgQXRvbWljU3RyaW5nKCJMdWNpZGEgQ29uc29sZSIpKQot
I2VsaWYgT1MoTUFDX09TX1gpCi1UT09MVElQX0ZPTlRfRkFNSUxJRVMoMiwgbmV3IEF0b21pY1N0
cmluZygiTWVubG8iKSwgbmV3IEF0b21pY1N0cmluZygiTW9uYWNvIikpCi0jZWxpZiBPUyhVTklY
KQotVE9PTFRJUF9GT05UX0ZBTUlMSUVTKDEsIG5ldyBBdG9taWNTdHJpbmcoImRlamF2dSBzYW5z
IG1vbm8iKSkKLSNlbmRpZgotLy8gSW4gdGhlIGRlZmF1bHQgY2FzZSwgd2UgZ2V0IHRoZSBzZXR0
aW5ncy1wcm92aWRlZCBtb25vc3BhY2UgZm9udC4KLQotI3VuZGVmIFRPT0xUSVBfRk9OVF9GQU1J
TElFUwotCi0gICAgZm9udERlc2NyaXB0aW9uLnNldFJlbmRlcmluZ01vZGUoc2V0dGluZ3MtPmZv
bnRSZW5kZXJpbmdNb2RlKCkpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUo
Zm9udEhlaWdodFB4KTsKLQotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZml4ZWRGb250RmFtaWx5
ID0gc2V0dGluZ3MtPmZpeGVkRm9udEZhbWlseSgpOwotICAgIGlmICghZml4ZWRGb250RmFtaWx5
LmlzRW1wdHkoKSkgewotICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShG
b250RGVzY3JpcHRpb246Ok1vbm9zcGFjZUZhbWlseSk7Ci0gICAgICAgIEZvbnRGYW1pbHkqIGN1
cnJlbnRGYW1pbHkgPSAwOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG9vbHRp
cEZvbnRGYWNlU2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoIWN1cnJlbnRGYW1pbHkpIHsK
LSAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uZmlyc3RGYW1pbHkoKS5zZXRGYW1pbHko
KnRvb2x0aXBGb250RmFjZVtpXSk7Ci0gICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLmZp
cnN0RmFtaWx5KCkuYXBwZW5kRmFtaWx5KDApOwotICAgICAgICAgICAgICAgIGN1cnJlbnRGYW1p
bHkgPSAmZm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCk7Ci0gICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgIFJlZlB0cjxTaGFyZWRGb250RmFtaWx5PiBuZXdGYW1pbHkgPSBT
aGFyZWRGb250RmFtaWx5OjpjcmVhdGUoKTsKLSAgICAgICAgICAgICAgICBuZXdGYW1pbHktPnNl
dEZhbWlseSgqdG9vbHRpcEZvbnRGYWNlW2ldKTsKLSAgICAgICAgICAgICAgICBjdXJyZW50RmFt
aWx5LT5hcHBlbmRGYW1pbHkobmV3RmFtaWx5KTsKLSAgICAgICAgICAgICAgICBjdXJyZW50RmFt
aWx5ID0gbmV3RmFtaWx5LmdldCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAg
IFJlZlB0cjxTaGFyZWRGb250RmFtaWx5PiBuZXdGYW1pbHkgPSBTaGFyZWRGb250RmFtaWx5Ojpj
cmVhdGUoKTsKLSAgICAgICAgbmV3RmFtaWx5LT5zZXRGYW1pbHkoZml4ZWRGb250RmFtaWx5KTsK
LSAgICAgICAgY3VycmVudEZhbWlseS0+YXBwZW5kRmFtaWx5KG5ld0ZhbWlseSk7Ci0gICAgICAg
IGN1cnJlbnRGYW1pbHkgPSBuZXdGYW1pbHkuZ2V0KCk7Ci0gICAgfQotfQotCi12b2lkIGRyYXdF
bGVtZW50VGl0bGUoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBOb2RlKiBub2RlLCBSZW5kZXJP
YmplY3QqIHJlbmRlcmVyLCBjb25zdCBJbnRSZWN0JiBib3VuZGluZ0JveCwgY29uc3QgSW50UmVj
dCYgYW5jaG9yQm94LCBjb25zdCBGbG9hdFJlY3QmIHZpc2libGVSZWN0LCBXZWJDb3JlOjpTZXR0
aW5ncyogc2V0dGluZ3MpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChDb2xvciwgYmFja2dy
b3VuZENvbG9yLCAoMjU1LCAyNTUsIDE5NCkpOwotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ29s
b3IsIHRhZ0NvbG9yLCAoMTM2LCAxOCwgMTI4KSk7IC8vIFNhbWUgYXMgLndlYmtpdC1odG1sLXRh
Zy4KLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKENvbG9yLCBhdHRyQ29sb3IsICgyNiwgMjYsIDE2
NikpOyAvLyBTYW1lIGFzIC53ZWJraXQtaHRtbC1hdHRyaWJ1dGUtdmFsdWUuCi0gICAgREVGSU5F
X1NUQVRJQ19MT0NBTChDb2xvciwgbm9ybWFsQ29sb3IsIChDb2xvcjo6YmxhY2spKTsKLSAgICBE
RUZJTkVfU1RBVElDX0xPQ0FMKENvbG9yLCBweEFuZEJvcmRlckNvbG9yLCAoMTI4LCAxMjgsIDEy
OCkpOwotCi0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHB4U3RyaW5nLCAoInB4Iikp
OwotICAgIGNvbnN0IHN0YXRpYyBVQ2hhciB0aW1lc1VDaGFyW10gPSB7IDB4MDAyMCwgMHgwMEQ3
LCAweDAwMjAsIDAgfTsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgdGltZXNTdHJp
bmcsICh0aW1lc1VDaGFyKSk7IC8vICZ0aW1lczsgc3RyaW5nCi0KLSAgICBGb250Q2FjaGVQdXJn
ZVByZXZlbnRlciBmb250Q2FjaGVQdXJnZVByZXZlbnRlcjsKLQotICAgIEVsZW1lbnQqIGVsZW1l
bnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSk7Ci0gICAgYm9vbCBpc1hIVE1MID0gZWxl
bWVudC0+ZG9jdW1lbnQoKS0+aXNYSFRNTERvY3VtZW50KCk7Ci0gICAgU3RyaW5nQnVpbGRlciBu
b2RlVGl0bGU7Ci0gICAgbm9kZVRpdGxlLmFwcGVuZChpc1hIVE1MID8gZWxlbWVudC0+bm9kZU5h
bWUoKSA6IGVsZW1lbnQtPm5vZGVOYW1lKCkubG93ZXIoKSk7Ci0gICAgdW5zaWduZWQgdGFnTmFt
ZUxlbmd0aCA9IG5vZGVUaXRsZS5sZW5ndGgoKTsKLQotICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
aWRWYWx1ZSA9IGVsZW1lbnQtPmdldElkQXR0cmlidXRlKCk7Ci0gICAgdW5zaWduZWQgaWRTdHJp
bmdMZW5ndGggPSAwOwotICAgIFN0cmluZyBpZFN0cmluZzsKLSAgICBpZiAoIWlkVmFsdWUuaXNO
dWxsKCkgJiYgIWlkVmFsdWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG5vZGVUaXRsZS5hcHBlbmQo
IiMiKTsKLSAgICAgICAgbm9kZVRpdGxlLmFwcGVuZChpZFZhbHVlKTsKLSAgICAgICAgaWRTdHJp
bmdMZW5ndGggPSAxICsgaWRWYWx1ZS5sZW5ndGgoKTsKLSAgICB9Ci0KLSAgICBIYXNoU2V0PEF0
b21pY1N0cmluZz4gdXNlZENsYXNzTmFtZXM7Ci0gICAgdW5zaWduZWQgY2xhc3Nlc1N0cmluZ0xl
bmd0aCA9IDA7Ci0gICAgaWYgKGVsZW1lbnQtPmhhc0NsYXNzKCkgJiYgZWxlbWVudC0+aXNTdHls
ZWRFbGVtZW50KCkpIHsKLSAgICAgICAgY29uc3QgU3BhY2VTcGxpdFN0cmluZyYgY2xhc3NOYW1l
c1N0cmluZyA9IHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQqPihlbGVtZW50KS0+Y2xhc3NOYW1l
cygpOwotICAgICAgICBzaXplX3QgY2xhc3NOYW1lQ291bnQgPSBjbGFzc05hbWVzU3RyaW5nLnNp
emUoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjbGFzc05hbWVDb3VudDsgKytp
KSB7Ci0gICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGNsYXNzTmFtZSA9IGNsYXNzTmFt
ZXNTdHJpbmdbaV07Ci0gICAgICAgICAgICBpZiAodXNlZENsYXNzTmFtZXMuY29udGFpbnMoY2xh
c3NOYW1lKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHVzZWRDbGFz
c05hbWVzLmFkZChjbGFzc05hbWUpOwotICAgICAgICAgICAgbm9kZVRpdGxlLmFwcGVuZCgiLiIp
OwotICAgICAgICAgICAgbm9kZVRpdGxlLmFwcGVuZChjbGFzc05hbWUpOwotICAgICAgICAgICAg
Y2xhc3Nlc1N0cmluZ0xlbmd0aCArPSAxICsgY2xhc3NOYW1lLmxlbmd0aCgpOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIG1vZGVsT2JqZWN0ID0gcmVuZGVy
ZXItPmlzQm94TW9kZWxPYmplY3QoKSA/IHRvUmVuZGVyQm94TW9kZWxPYmplY3QocmVuZGVyZXIp
IDogMDsKLQotICAgIFN0cmluZyB3aWR0aE51bWJlclBhcnQgPSAiICIgKyBTdHJpbmc6Om51bWJl
cihtb2RlbE9iamVjdCA/IGFkanVzdEZvckFic29sdXRlWm9vbShtb2RlbE9iamVjdC0+cGl4ZWxT
bmFwcGVkT2Zmc2V0V2lkdGgoKSwgbW9kZWxPYmplY3QpIDogYm91bmRpbmdCb3gud2lkdGgoKSk7
Ci0gICAgbm9kZVRpdGxlLmFwcGVuZCh3aWR0aE51bWJlclBhcnQpOwotICAgIG5vZGVUaXRsZS5h
cHBlbmQocHhTdHJpbmcpOwotICAgIG5vZGVUaXRsZS5hcHBlbmQodGltZXNTdHJpbmcpOwotICAg
IFN0cmluZyBoZWlnaHROdW1iZXJQYXJ0ID0gU3RyaW5nOjpudW1iZXIobW9kZWxPYmplY3QgPyBh
ZGp1c3RGb3JBYnNvbHV0ZVpvb20obW9kZWxPYmplY3QtPnBpeGVsU25hcHBlZE9mZnNldEhlaWdo
dCgpLCBtb2RlbE9iamVjdCkgOiBib3VuZGluZ0JveC5oZWlnaHQoKSk7Ci0gICAgbm9kZVRpdGxl
LmFwcGVuZChoZWlnaHROdW1iZXJQYXJ0KTsKLSAgICBub2RlVGl0bGUuYXBwZW5kKHB4U3RyaW5n
KTsKLQotICAgIEZvbnREZXNjcmlwdGlvbiBkZXNjOwotICAgIHNldFVwRm9udERlc2NyaXB0aW9u
KGRlc2MsIHNldHRpbmdzKTsKLSAgICBGb250IGZvbnQgPSBGb250KGRlc2MsIDAsIDApOwotICAg
IGZvbnQudXBkYXRlKDApOwotCi0gICAgVGV4dFJ1biBub2RlVGl0bGVSdW4obm9kZVRpdGxlLnRv
U3RyaW5nKCkpOwotICAgIEludFBvaW50IHRpdGxlQmFzZVBvaW50ID0gSW50UG9pbnQoYW5jaG9y
Qm94LngoKSwgYW5jaG9yQm94Lm1heFkoKSAtIDEpOwotICAgIHRpdGxlQmFzZVBvaW50Lm1vdmUo
cmVjdEluZmxhdGVQeCwgcmVjdEluZmxhdGVQeCk7Ci0gICAgSW50UmVjdCB0aXRsZVJlY3QgPSBl
bmNsb3NpbmdJbnRSZWN0KGZvbnQuc2VsZWN0aW9uUmVjdEZvclRleHQobm9kZVRpdGxlUnVuLCB0
aXRsZUJhc2VQb2ludCwgZm9udEhlaWdodFB4KSk7Ci0gICAgdGl0bGVSZWN0LmluZmxhdGUocmVj
dEluZmxhdGVQeCk7Ci0KLSAgICAvLyBUaGUgaW5pdGlhbCBvZmZzZXRzIG5lZWRlZCB0byBjb21w
ZW5zYXRlIGZvciBhIDFweC10aGljayBib3JkZXIgc3Ryb2tlICh3aGljaCBpcyBub3QgYSBwYXJ0
IG9mIHRoZSByZWN0YW5nbGUpLgotICAgIGludCBkeCA9IC1ib3JkZXJXaWR0aFB4OwotICAgIGlu
dCBkeSA9IGJvcmRlcldpZHRoUHg7Ci0KLSAgICAvLyBJZiB0aGUgdGlwIHN0aWNrcyBiZXlvbmQg
dGhlIHJpZ2h0IG9mIHZpc2libGVSZWN0LCByaWdodC1hbGlnbiB0aGUgdGlwIHdpdGggdGhlIHNh
aWQgYm91bmRhcnkuCi0gICAgaWYgKHRpdGxlUmVjdC5tYXhYKCkgKyBkeCA+IHZpc2libGVSZWN0
Lm1heFgoKSkKLSAgICAgICAgZHggPSB2aXNpYmxlUmVjdC5tYXhYKCkgLSB0aXRsZVJlY3QubWF4
WCgpOwotCi0gICAgLy8gSWYgdGhlIHRpcCBzdGlja3MgYmV5b25kIHRoZSBsZWZ0IG9mIHZpc2li
bGVSZWN0LCBsZWZ0LWFsaWduIHRoZSB0aXAgd2l0aCB0aGUgc2FpZCBib3VuZGFyeS4KLSAgICBp
ZiAodGl0bGVSZWN0LngoKSArIGR4IDwgdmlzaWJsZVJlY3QueCgpKQotICAgICAgICBkeCA9IHZp
c2libGVSZWN0LngoKSAtIHRpdGxlUmVjdC54KCkgLSBib3JkZXJXaWR0aFB4OwotCi0gICAgLy8g
SWYgdGhlIHRpcCBzdGlja3MgYmV5b25kIHRoZSBib3R0b20gb2YgdmlzaWJsZVJlY3QsIHNob3cg
dGhlIHRpcCBhdCB0b3Agb2YgYm91bmRpbmcgYm94LgotICAgIGlmICh0aXRsZVJlY3QubWF4WSgp
ICsgZHkgPiB2aXNpYmxlUmVjdC5tYXhZKCkpIHsKLSAgICAgICAgZHkgPSBhbmNob3JCb3gueSgp
IC0gdGl0bGVSZWN0Lm1heFkoKSAtIGJvcmRlcldpZHRoUHg7Ci0gICAgICAgIC8vIElmIHRoZSB0
aXAgc3RpbGwgc3RpY2tzIGJleW9uZCB0aGUgYm90dG9tIG9mIHZpc2libGVSZWN0LCBib3R0b20t
YWxpZ24gdGhlIHRpcCB3aXRoIHRoZSBzYWlkIGJvdW5kYXJ5LgotICAgICAgICBpZiAodGl0bGVS
ZWN0Lm1heFkoKSArIGR5ID4gdmlzaWJsZVJlY3QubWF4WSgpKQotICAgICAgICAgICAgZHkgPSB2
aXNpYmxlUmVjdC5tYXhZKCkgLSB0aXRsZVJlY3QubWF4WSgpOwotICAgIH0KLQotICAgIC8vIElm
IHRoZSB0aXAgc3RpY2tzIGJleW9uZCB0aGUgdG9wIG9mIHZpc2libGVSZWN0LCBzaG93IHRoZSB0
aXAgYXQgdG9wIG9mIHZpc2libGVSZWN0LgotICAgIGlmICh0aXRsZVJlY3QueSgpICsgZHkgPCB2
aXNpYmxlUmVjdC55KCkpCi0gICAgICAgIGR5ID0gdmlzaWJsZVJlY3QueSgpIC0gdGl0bGVSZWN0
LnkoKSArIGJvcmRlcldpZHRoUHg7Ci0KLSAgICB0aXRsZVJlY3QubW92ZShkeCwgZHkpOwotCi0g
ICAgYm9vbCBpc0Fycm93QXRUb3AgPSB0aXRsZVJlY3QueSgpID4gYW5jaG9yQm94LnkoKTsKLSAg
ICB0aXRsZVJlY3QubW92ZSgwLCB0b29sdGlwUGFkZGluZyAqIChpc0Fycm93QXRUb3AgPyAxIDog
LTEpKTsKLQotICAgIHsKLSAgICAgICAgZmxvYXQgYXJyb3dUaXBYID0gY2FsY3VsYXRlQXJyb3dU
aXBYKGFuY2hvckJveCwgdGl0bGVSZWN0KTsKLSAgICAgICAgaW50IGFycm93QmFzZVkgPSBpc0Fy
cm93QXRUb3AgPyB0aXRsZVJlY3QueSgpIDogdGl0bGVSZWN0Lm1heFkoKTsKLSAgICAgICAgaW50
IGFycm93T3Bwb3NpdGVZID0gaXNBcnJvd0F0VG9wID8gdGl0bGVSZWN0Lm1heFkoKSA6IHRpdGxl
UmVjdC55KCk7Ci0KLSAgICAgICAgRmxvYXRQb2ludCBwb2ludHNbOF07Ci0gICAgICAgIHBvaW50
c1swXSA9IEZsb2F0UG9pbnQoYXJyb3dUaXBYIC0gYXJyb3dIYWxmV2lkdGgsIGFycm93QmFzZVkp
OwotICAgICAgICBwb2ludHNbMV0gPSBGbG9hdFBvaW50KGFycm93VGlwWCwgYXJyb3dCYXNlWSAr
IGFycm93SGVpZ2h0ICogKGlzQXJyb3dBdFRvcCA/IC0xIDogMSkpOwotICAgICAgICBwb2ludHNb
Ml0gPSBGbG9hdFBvaW50KGFycm93VGlwWCArIGFycm93SGFsZldpZHRoLCBhcnJvd0Jhc2VZKTsK
LSAgICAgICAgcG9pbnRzWzNdID0gRmxvYXRQb2ludCh0aXRsZVJlY3QubWF4WCgpLCBhcnJvd0Jh
c2VZKTsKLSAgICAgICAgcG9pbnRzWzRdID0gRmxvYXRQb2ludCh0aXRsZVJlY3QubWF4WCgpLCBh
cnJvd09wcG9zaXRlWSk7Ci0gICAgICAgIHBvaW50c1s1XSA9IEZsb2F0UG9pbnQodGl0bGVSZWN0
LngoKSwgYXJyb3dPcHBvc2l0ZVkpOwotICAgICAgICBwb2ludHNbNl0gPSBGbG9hdFBvaW50KHRp
dGxlUmVjdC54KCksIGFycm93QmFzZVkpOwotICAgICAgICBwb2ludHNbN10gPSBwb2ludHNbMF07
Ci0KLSAgICAgICAgUGF0aCBwYXRoOwotICAgICAgICBwYXRoLm1vdmVUbyhwb2ludHNbMF0pOwot
ICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IDg7ICsraSkKLSAgICAgICAgICAgIHBhdGguYWRk
TGluZVRvKHBvaW50c1tpXSk7Ci0KLSAgICAgICAgY29udGV4dC5zYXZlKCk7Ci0gICAgICAgIGNv
bnRleHQudHJhbnNsYXRlKDAuNWYsIDAuNWYpOwotICAgICAgICBjb250ZXh0LnNldFN0cm9rZUNv
bG9yKHB4QW5kQm9yZGVyQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwotICAgICAgICBjb250
ZXh0LnNldEZpbGxDb2xvcihiYWNrZ3JvdW5kQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwot
ICAgICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcyhib3JkZXJXaWR0aFB4KTsKLSAgICAg
ICAgY29udGV4dC5maWxsUGF0aChwYXRoKTsKLSAgICAgICAgY29udGV4dC5zdHJva2VQYXRoKHBh
dGgpOwotICAgICAgICBjb250ZXh0LnJlc3RvcmUoKTsKLSAgICB9Ci0KLSAgICBpbnQgY3VycmVu
dFBvcyA9IDA7Ci0gICAgY3VycmVudFBvcyA9IGRyYXdTdWJzdHJpbmcobm9kZVRpdGxlUnVuLCBj
dXJyZW50UG9zLCB0YWdOYW1lTGVuZ3RoLCB0YWdDb2xvciwgZm9udCwgY29udGV4dCwgdGl0bGVS
ZWN0KTsKLSAgICBpZiAoaWRTdHJpbmdMZW5ndGgpCi0gICAgICAgIGN1cnJlbnRQb3MgPSBkcmF3
U3Vic3RyaW5nKG5vZGVUaXRsZVJ1biwgY3VycmVudFBvcywgaWRTdHJpbmdMZW5ndGgsIGF0dHJD
b2xvciwgZm9udCwgY29udGV4dCwgdGl0bGVSZWN0KTsKLSAgICBpZiAoY2xhc3Nlc1N0cmluZ0xl
bmd0aCkKLSAgICAgICAgY3VycmVudFBvcyA9IGRyYXdTdWJzdHJpbmcobm9kZVRpdGxlUnVuLCBj
dXJyZW50UG9zLCBjbGFzc2VzU3RyaW5nTGVuZ3RoLCBhdHRyQ29sb3IsIGZvbnQsIGNvbnRleHQs
IHRpdGxlUmVjdCk7Ci0gICAgY3VycmVudFBvcyA9IGRyYXdTdWJzdHJpbmcobm9kZVRpdGxlUnVu
LCBjdXJyZW50UG9zLCB3aWR0aE51bWJlclBhcnQubGVuZ3RoKCksIG5vcm1hbENvbG9yLCBmb250
LCBjb250ZXh0LCB0aXRsZVJlY3QpOwotICAgIGN1cnJlbnRQb3MgPSBkcmF3U3Vic3RyaW5nKG5v
ZGVUaXRsZVJ1biwgY3VycmVudFBvcywgcHhTdHJpbmcubGVuZ3RoKCkgKyB0aW1lc1N0cmluZy5s
ZW5ndGgoKSwgcHhBbmRCb3JkZXJDb2xvciwgZm9udCwgY29udGV4dCwgdGl0bGVSZWN0KTsKLSAg
ICBjdXJyZW50UG9zID0gZHJhd1N1YnN0cmluZyhub2RlVGl0bGVSdW4sIGN1cnJlbnRQb3MsIGhl
aWdodE51bWJlclBhcnQubGVuZ3RoKCksIG5vcm1hbENvbG9yLCBmb250LCBjb250ZXh0LCB0aXRs
ZVJlY3QpOwotICAgIGRyYXdTdWJzdHJpbmcobm9kZVRpdGxlUnVuLCBjdXJyZW50UG9zLCBweFN0
cmluZy5sZW5ndGgoKSwgcHhBbmRCb3JkZXJDb2xvciwgZm9udCwgY29udGV4dCwgdGl0bGVSZWN0
KTsKLX0KLQotc3RhdGljIHZvaWQgY29udGVudHNRdWFkVG9QYWdlKGNvbnN0IEZyYW1lVmlldyog
bWFpblZpZXcsIGNvbnN0IEZyYW1lVmlldyogdmlldywgRmxvYXRRdWFkJiBxdWFkKQotewotICAg
IHF1YWQuc2V0UDEodmlldy0+Y29udGVudHNUb1Jvb3RWaWV3KHJvdW5kZWRJbnRQb2ludChxdWFk
LnAxKCkpKSk7Ci0gICAgcXVhZC5zZXRQMih2aWV3LT5jb250ZW50c1RvUm9vdFZpZXcocm91bmRl
ZEludFBvaW50KHF1YWQucDIoKSkpKTsKLSAgICBxdWFkLnNldFAzKHZpZXctPmNvbnRlbnRzVG9S
b290Vmlldyhyb3VuZGVkSW50UG9pbnQocXVhZC5wMygpKSkpOwotICAgIHF1YWQuc2V0UDQodmll
dy0+Y29udGVudHNUb1Jvb3RWaWV3KHJvdW5kZWRJbnRQb2ludChxdWFkLnA0KCkpKSk7Ci0gICAg
cXVhZCArPSBtYWluVmlldy0+c2Nyb2xsT2Zmc2V0KCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGdldE9y
RHJhd05vZGVIaWdobGlnaHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBOb2RlKiBub2RlLCBj
b25zdCBIaWdobGlnaHRDb25maWcmIGhpZ2hsaWdodENvbmZpZywgSGlnaGxpZ2h0KiBoaWdobGln
aHQpCi17Ci0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7Ci0g
ICAgRnJhbWUqIGNvbnRhaW5pbmdGcmFtZSA9IG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCk7Ci0K
LSAgICBpZiAoIXJlbmRlcmVyIHx8ICFjb250YWluaW5nRnJhbWUpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEZyYW1lVmlldyogY29udGFpbmluZ1ZpZXcgPSBjb250YWluaW5nRnJhbWUtPnZpZXco
KTsKLSAgICBGcmFtZVZpZXcqIG1haW5WaWV3ID0gY29udGFpbmluZ0ZyYW1lLT5wYWdlKCktPm1h
aW5GcmFtZSgpLT52aWV3KCk7Ci0gICAgSW50UmVjdCBib3VuZGluZ0JveCA9IHBpeGVsU25hcHBl
ZEludFJlY3QoY29udGFpbmluZ1ZpZXctPmNvbnRlbnRzVG9Sb290VmlldyhyZW5kZXJlci0+YWJz
b2x1dGVCb3VuZGluZ0JveFJlY3QoKSkpOwotICAgIGJvdW5kaW5nQm94Lm1vdmUobWFpblZpZXct
PnNjcm9sbE9mZnNldCgpKTsKLSAgICBJbnRSZWN0IHRpdGxlQW5jaG9yQm94ID0gYm91bmRpbmdC
b3g7Ci0KLSAgICBGbG9hdFJlY3QgdmlzaWJsZVJlY3QgPSBtYWluVmlldy0+dmlzaWJsZUNvbnRl
bnRSZWN0KCk7Ci0gICAgLy8gRG9uJ3QgdHJhbnNsYXRlIHRoZSBjb250ZXh0IGlmIHRoZSBmcmFt
ZSBpcyByZW5kZXJlZCBpbiBwYWdlIGNvb3JkaW5hdGVzLgotICAgIGlmIChjb250ZXh0ICYmICFt
YWluVmlldy0+ZGVsZWdhdGVzU2Nyb2xsaW5nKCkpCi0gICAgICAgIGNvbnRleHQtPnRyYW5zbGF0
ZSgtdmlzaWJsZVJlY3QueCgpLCAtdmlzaWJsZVJlY3QueSgpKTsKLQotICAgIC8vIFJlbmRlclNW
R1Jvb3Qgc2hvdWxkIGJlIGhpZ2hsaWdodGVkIHRocm91Z2ggdGhlIGlzQm94KCkgY29kZSBwYXRo
LCBhbGwgb3RoZXIgU1ZHIGVsZW1lbnRzIHNob3VsZCBqdXN0IGR1bXAgdGhlaXIgYWJzb2x1dGVR
dWFkcygpLgotI2lmIEVOQUJMRShTVkcpCi0gICAgYm9vbCBpc1NWR1JlbmRlcmVyID0gcmVuZGVy
ZXItPm5vZGUoKSAmJiByZW5kZXJlci0+bm9kZSgpLT5pc1NWR0VsZW1lbnQoKSAmJiAhcmVuZGVy
ZXItPmlzU1ZHUm9vdCgpOwotI2Vsc2UKLSAgICBib29sIGlzU1ZHUmVuZGVyZXIgPSBmYWxzZTsK
LSNlbmRpZgotCi0gICAgaWYgKGlzU1ZHUmVuZGVyZXIpIHsKLSAgICAgICAgaGlnaGxpZ2h0LT50
eXBlID0gSGlnaGxpZ2h0VHlwZVJlY3RzOwotICAgICAgICByZW5kZXJlci0+YWJzb2x1dGVRdWFk
cyhoaWdobGlnaHQtPnF1YWRzKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBoaWdo
bGlnaHQtPnF1YWRzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgY29udGVudHNRdWFkVG9QYWdl
KG1haW5WaWV3LCBjb250YWluaW5nVmlldywgaGlnaGxpZ2h0LT5xdWFkc1tpXSk7Ci0KLSAgICAg
ICAgaWYgKGNvbnRleHQpCi0gICAgICAgICAgICBkcmF3SGlnaGxpZ2h0Rm9yU1ZHUmVuZGVyZXIo
KmNvbnRleHQsIGhpZ2hsaWdodC0+cXVhZHMsIGhpZ2hsaWdodENvbmZpZyk7Ci0gICAgfSBlbHNl
IGlmIChyZW5kZXJlci0+aXNCb3goKSB8fCByZW5kZXJlci0+aXNSZW5kZXJJbmxpbmUoKSkgewot
ICAgICAgICBMYXlvdXRSZWN0IGNvbnRlbnRCb3g7Ci0gICAgICAgIExheW91dFJlY3QgcGFkZGlu
Z0JveDsKLSAgICAgICAgTGF5b3V0UmVjdCBib3JkZXJCb3g7Ci0gICAgICAgIExheW91dFJlY3Qg
bWFyZ2luQm94OwotCi0gICAgICAgIGlmIChyZW5kZXJlci0+aXNCb3goKSkgewotICAgICAgICAg
ICAgUmVuZGVyQm94KiByZW5kZXJCb3ggPSB0b1JlbmRlckJveChyZW5kZXJlcik7Ci0KLSAgICAg
ICAgICAgIC8vIFJlbmRlckJveCByZXR1cm5zIHRoZSAicHVyZSIgY29udGVudCBhcmVhIGJveCwg
ZXhjbHVzaXZlIG9mIHRoZSBzY3JvbGxiYXJzIChpZiBwcmVzZW50KSwgd2hpY2ggYWxzbyBjb3Vu
dCB0b3dhcmRzIHRoZSBjb250ZW50IGFyZWEgaW4gQ1NTLgotICAgICAgICAgICAgY29udGVudEJv
eCA9IHJlbmRlckJveC0+Y29udGVudEJveFJlY3QoKTsKLSAgICAgICAgICAgIGNvbnRlbnRCb3gu
c2V0V2lkdGgoY29udGVudEJveC53aWR0aCgpICsgcmVuZGVyQm94LT52ZXJ0aWNhbFNjcm9sbGJh
cldpZHRoKCkpOwotICAgICAgICAgICAgY29udGVudEJveC5zZXRIZWlnaHQoY29udGVudEJveC5o
ZWlnaHQoKSArIHJlbmRlckJveC0+aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCgpKTsKLQotICAg
ICAgICAgICAgcGFkZGluZ0JveCA9IExheW91dFJlY3QoY29udGVudEJveC54KCkgLSByZW5kZXJC
b3gtPnBhZGRpbmdMZWZ0KCksIGNvbnRlbnRCb3gueSgpIC0gcmVuZGVyQm94LT5wYWRkaW5nVG9w
KCksCi0gICAgICAgICAgICAgICAgICAgIGNvbnRlbnRCb3gud2lkdGgoKSArIHJlbmRlckJveC0+
cGFkZGluZ0xlZnQoKSArIHJlbmRlckJveC0+cGFkZGluZ1JpZ2h0KCksIGNvbnRlbnRCb3guaGVp
Z2h0KCkgKyByZW5kZXJCb3gtPnBhZGRpbmdUb3AoKSArIHJlbmRlckJveC0+cGFkZGluZ0JvdHRv
bSgpKTsKLSAgICAgICAgICAgIGJvcmRlckJveCA9IExheW91dFJlY3QocGFkZGluZ0JveC54KCkg
LSByZW5kZXJCb3gtPmJvcmRlckxlZnQoKSwgcGFkZGluZ0JveC55KCkgLSByZW5kZXJCb3gtPmJv
cmRlclRvcCgpLAotICAgICAgICAgICAgICAgICAgICBwYWRkaW5nQm94LndpZHRoKCkgKyByZW5k
ZXJCb3gtPmJvcmRlckxlZnQoKSArIHJlbmRlckJveC0+Ym9yZGVyUmlnaHQoKSwgcGFkZGluZ0Jv
eC5oZWlnaHQoKSArIHJlbmRlckJveC0+Ym9yZGVyVG9wKCkgKyByZW5kZXJCb3gtPmJvcmRlckJv
dHRvbSgpKTsKLSAgICAgICAgICAgIG1hcmdpbkJveCA9IExheW91dFJlY3QoYm9yZGVyQm94Lngo
KSAtIHJlbmRlckJveC0+bWFyZ2luTGVmdCgpLCBib3JkZXJCb3gueSgpIC0gcmVuZGVyQm94LT5t
YXJnaW5Ub3AoKSwKLSAgICAgICAgICAgICAgICAgICAgYm9yZGVyQm94LndpZHRoKCkgKyByZW5k
ZXJCb3gtPm1hcmdpbldpZHRoKCksIGJvcmRlckJveC5oZWlnaHQoKSArIHJlbmRlckJveC0+bWFy
Z2luSGVpZ2h0KCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgUmVuZGVySW5saW5l
KiByZW5kZXJJbmxpbmUgPSB0b1JlbmRlcklubGluZShyZW5kZXJlcik7Ci0KLSAgICAgICAgICAg
IC8vIFJlbmRlcklubGluZSdzIGJvdW5kaW5nIGJveCBpbmNsdWRlcyBwYWRkaW5ncyBhbmQgYm9y
ZGVycywgZXhjbHVkZXMgbWFyZ2lucy4KLSAgICAgICAgICAgIGJvcmRlckJveCA9IHJlbmRlcklu
bGluZS0+bGluZXNCb3VuZGluZ0JveCgpOwotICAgICAgICAgICAgcGFkZGluZ0JveCA9IExheW91
dFJlY3QoYm9yZGVyQm94LngoKSArIHJlbmRlcklubGluZS0+Ym9yZGVyTGVmdCgpLCBib3JkZXJC
b3gueSgpICsgcmVuZGVySW5saW5lLT5ib3JkZXJUb3AoKSwKLSAgICAgICAgICAgICAgICAgICAg
Ym9yZGVyQm94LndpZHRoKCkgLSByZW5kZXJJbmxpbmUtPmJvcmRlckxlZnQoKSAtIHJlbmRlcklu
bGluZS0+Ym9yZGVyUmlnaHQoKSwgYm9yZGVyQm94LmhlaWdodCgpIC0gcmVuZGVySW5saW5lLT5i
b3JkZXJUb3AoKSAtIHJlbmRlcklubGluZS0+Ym9yZGVyQm90dG9tKCkpOwotICAgICAgICAgICAg
Y29udGVudEJveCA9IExheW91dFJlY3QocGFkZGluZ0JveC54KCkgKyByZW5kZXJJbmxpbmUtPnBh
ZGRpbmdMZWZ0KCksIHBhZGRpbmdCb3gueSgpICsgcmVuZGVySW5saW5lLT5wYWRkaW5nVG9wKCks
Ci0gICAgICAgICAgICAgICAgICAgIHBhZGRpbmdCb3gud2lkdGgoKSAtIHJlbmRlcklubGluZS0+
cGFkZGluZ0xlZnQoKSAtIHJlbmRlcklubGluZS0+cGFkZGluZ1JpZ2h0KCksIHBhZGRpbmdCb3gu
aGVpZ2h0KCkgLSByZW5kZXJJbmxpbmUtPnBhZGRpbmdUb3AoKSAtIHJlbmRlcklubGluZS0+cGFk
ZGluZ0JvdHRvbSgpKTsKLSAgICAgICAgICAgIC8vIElnbm9yZSBtYXJnaW5Ub3AgYW5kIG1hcmdp
bkJvdHRvbSBmb3IgaW5saW5lcy4KLSAgICAgICAgICAgIG1hcmdpbkJveCA9IExheW91dFJlY3Qo
Ym9yZGVyQm94LngoKSAtIHJlbmRlcklubGluZS0+bWFyZ2luTGVmdCgpLCBib3JkZXJCb3gueSgp
LAotICAgICAgICAgICAgICAgICAgICBib3JkZXJCb3gud2lkdGgoKSArIHJlbmRlcklubGluZS0+
bWFyZ2luV2lkdGgoKSwgYm9yZGVyQm94LmhlaWdodCgpKTsKLSAgICAgICAgfQotCi0gICAgICAg
IEZsb2F0UXVhZCBhYnNDb250ZW50UXVhZCA9IHJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFk
KEZsb2F0UmVjdChjb250ZW50Qm94KSk7Ci0gICAgICAgIEZsb2F0UXVhZCBhYnNQYWRkaW5nUXVh
ZCA9IHJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChwYWRkaW5nQm94KSk7
Ci0gICAgICAgIEZsb2F0UXVhZCBhYnNCb3JkZXJRdWFkID0gcmVuZGVyZXItPmxvY2FsVG9BYnNv
bHV0ZVF1YWQoRmxvYXRSZWN0KGJvcmRlckJveCkpOwotICAgICAgICBGbG9hdFF1YWQgYWJzTWFy
Z2luUXVhZCA9IHJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChtYXJnaW5C
b3gpKTsKLQotICAgICAgICBjb250ZW50c1F1YWRUb1BhZ2UobWFpblZpZXcsIGNvbnRhaW5pbmdW
aWV3LCBhYnNDb250ZW50UXVhZCk7Ci0gICAgICAgIGNvbnRlbnRzUXVhZFRvUGFnZShtYWluVmll
dywgY29udGFpbmluZ1ZpZXcsIGFic1BhZGRpbmdRdWFkKTsKLSAgICAgICAgY29udGVudHNRdWFk
VG9QYWdlKG1haW5WaWV3LCBjb250YWluaW5nVmlldywgYWJzQm9yZGVyUXVhZCk7Ci0gICAgICAg
IGNvbnRlbnRzUXVhZFRvUGFnZShtYWluVmlldywgY29udGFpbmluZ1ZpZXcsIGFic01hcmdpblF1
YWQpOwotCi0gICAgICAgIHRpdGxlQW5jaG9yQm94ID0gYWJzTWFyZ2luUXVhZC5lbmNsb3NpbmdC
b3VuZGluZ0JveCgpOwotCi0gICAgICAgIGhpZ2hsaWdodC0+dHlwZSA9IEhpZ2hsaWdodFR5cGVO
b2RlOwotICAgICAgICBoaWdobGlnaHQtPnF1YWRzLmFwcGVuZChhYnNNYXJnaW5RdWFkKTsKLSAg
ICAgICAgaGlnaGxpZ2h0LT5xdWFkcy5hcHBlbmQoYWJzQm9yZGVyUXVhZCk7Ci0gICAgICAgIGhp
Z2hsaWdodC0+cXVhZHMuYXBwZW5kKGFic1BhZGRpbmdRdWFkKTsKLSAgICAgICAgaGlnaGxpZ2h0
LT5xdWFkcy5hcHBlbmQoYWJzQ29udGVudFF1YWQpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQot
ICAgICAgICAgICAgZHJhd0hpZ2hsaWdodEZvckJveCgqY29udGV4dCwgYWJzQ29udGVudFF1YWQs
IGFic1BhZGRpbmdRdWFkLCBhYnNCb3JkZXJRdWFkLCBhYnNNYXJnaW5RdWFkLCBoaWdobGlnaHRD
b25maWcpOwotICAgIH0KLQotICAgIC8vIERyYXcgbm9kZSB0aXRsZSBpZiBuZWNlc3NhcnkuCi0K
LSAgICBpZiAoIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKGNvbnRleHQgJiYgaGlnaGxpZ2h0Q29uZmlnLnNob3dJbmZvKQotICAgICAgICBkcmF3RWxl
bWVudFRpdGxlKCpjb250ZXh0LCBub2RlLCByZW5kZXJlciwgcGl4ZWxTbmFwcGVkSW50UmVjdChi
b3VuZGluZ0JveCksIHBpeGVsU25hcHBlZEludFJlY3QodGl0bGVBbmNob3JCb3gpLCB2aXNpYmxl
UmVjdCwgY29udGFpbmluZ0ZyYW1lLT5zZXR0aW5ncygpKTsKLX0KLQotc3RhdGljIHZvaWQgZ2V0
T3JEcmF3UmVjdEhpZ2hsaWdodChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFBhZ2UqIHBhZ2Us
IEludFJlY3QqIHJlY3QsIGNvbnN0IEhpZ2hsaWdodENvbmZpZyYgaGlnaGxpZ2h0Q29uZmlnLCBI
aWdobGlnaHQgKmhpZ2hsaWdodCkKLXsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEZsb2F0UmVjdCBoaWdobGlnaHRSZWN0KCpyZWN0KTsKLQotICAgIGhpZ2hsaWdodC0+
dHlwZSA9IEhpZ2hsaWdodFR5cGVSZWN0czsKLSAgICBoaWdobGlnaHQtPnF1YWRzLmFwcGVuZCho
aWdobGlnaHRSZWN0KTsKLQotICAgIGlmIChjb250ZXh0KSB7Ci0gICAgICAgIEZyYW1lVmlldyog
dmlldyA9IHBhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCk7Ci0gICAgICAgIGlmICghdmlldy0+ZGVs
ZWdhdGVzU2Nyb2xsaW5nKCkpIHsKLSAgICAgICAgICAgIEZsb2F0UmVjdCB2aXNpYmxlUmVjdCA9
IHZpZXctPnZpc2libGVDb250ZW50UmVjdCgpOwotICAgICAgICAgICAgY29udGV4dC0+dHJhbnNs
YXRlKC12aXNpYmxlUmVjdC54KCksIC12aXNpYmxlUmVjdC55KCkpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgZHJhd091dGxpbmVkUXVhZCgqY29udGV4dCwgaGlnaGxpZ2h0UmVjdCwgaGlnaGxpZ2h0
Q29uZmlnLmNvbnRlbnQsIGhpZ2hsaWdodENvbmZpZy5jb250ZW50T3V0bGluZSk7Ci0gICAgfQot
fQotCi19IC8vIGFub255bW91cyBuYW1lc3BhY2UKLQotSW5zcGVjdG9yT3ZlcmxheTo6SW5zcGVj
dG9yT3ZlcmxheShQYWdlKiBwYWdlLCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCkKLSAgICA6IG1f
cGFnZShwYWdlKQotICAgICwgbV9jbGllbnQoY2xpZW50KQotewotfQotCi12b2lkIEluc3BlY3Rv
ck92ZXJsYXk6OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBkcmF3UGF1
c2VkSW5EZWJ1Z2dlcihjb250ZXh0KTsKLSAgICBkcmF3Tm9kZUhpZ2hsaWdodChjb250ZXh0KTsK
LSAgICBkcmF3UmVjdEhpZ2hsaWdodChjb250ZXh0KTsKLX0KLQotdm9pZCBJbnNwZWN0b3JPdmVy
bGF5OjpkcmF3T3V0bGluZShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91dFJl
Y3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBGbG9hdFJlY3Qgb3V0bGluZVJl
Y3QgPSByZWN0OwotICAgIGRyYXdPdXRsaW5lZFF1YWQoY29udGV4dCwgb3V0bGluZVJlY3QsIENv
bG9yKCksIGNvbG9yKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JPdmVybGF5OjpnZXRIaWdobGlnaHQo
SGlnaGxpZ2h0KiBoaWdobGlnaHQpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2hpZ2hsaWdodE5vZGUg
JiYgIW1faGlnaGxpZ2h0UmVjdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaGlnaGxpZ2h0LT50
eXBlID0gSGlnaGxpZ2h0VHlwZVJlY3RzOwotICAgIGlmIChtX2hpZ2hsaWdodE5vZGUpIHsKLSAg
ICAgICAgaGlnaGxpZ2h0LT5zZXRDb2xvcnMobV9ub2RlSGlnaGxpZ2h0Q29uZmlnKTsKLSAgICAg
ICAgZ2V0T3JEcmF3Tm9kZUhpZ2hsaWdodCgwLCBtX2hpZ2hsaWdodE5vZGUuZ2V0KCksIG1fbm9k
ZUhpZ2hsaWdodENvbmZpZywgaGlnaGxpZ2h0KTsKLSAgICB9IGVsc2UgewotICAgICAgICBoaWdo
bGlnaHQtPnNldENvbG9ycyhtX3JlY3RIaWdobGlnaHRDb25maWcpOwotICAgICAgICBnZXRPckRy
YXdSZWN0SGlnaGxpZ2h0KDAsIG1fcGFnZSwgbV9oaWdobGlnaHRSZWN0LmdldCgpLCBtX3JlY3RI
aWdobGlnaHRDb25maWcsIGhpZ2hsaWdodCk7Ci0gICAgfQotfQotCi12b2lkIEluc3BlY3Rvck92
ZXJsYXk6OnNldFBhdXNlZEluRGVidWdnZXJNZXNzYWdlKGNvbnN0IFN0cmluZyogbWVzc2FnZSkK
LXsKLSAgICBtX3BhdXNlZEluRGVidWdnZXJNZXNzYWdlID0gbWVzc2FnZSA/ICptZXNzYWdlIDog
U3RyaW5nKCk7Ci0gICAgdXBkYXRlKCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6aGlk
ZUhpZ2hsaWdodCgpCi17Ci0gICAgbV9oaWdobGlnaHROb2RlLmNsZWFyKCk7Ci0gICAgbV9oaWdo
bGlnaHRSZWN0LmNsZWFyKCk7Ci0gICAgdXBkYXRlKCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yT3Zl
cmxheTo6aGlnaGxpZ2h0Tm9kZShOb2RlKiBub2RlLCBjb25zdCBIaWdobGlnaHRDb25maWcmIGhp
Z2hsaWdodENvbmZpZykKLXsKLSAgICBtX25vZGVIaWdobGlnaHRDb25maWcgPSBoaWdobGlnaHRD
b25maWc7Ci0gICAgbV9oaWdobGlnaHROb2RlID0gbm9kZTsKLSAgICB1cGRhdGUoKTsKLX0KLQot
dm9pZCBJbnNwZWN0b3JPdmVybGF5OjpoaWdobGlnaHRSZWN0KFBhc3NPd25QdHI8SW50UmVjdD4g
cmVjdCwgY29uc3QgSGlnaGxpZ2h0Q29uZmlnJiBoaWdobGlnaHRDb25maWcpCi17Ci0gICAgbV9y
ZWN0SGlnaGxpZ2h0Q29uZmlnID0gaGlnaGxpZ2h0Q29uZmlnOwotICAgIG1faGlnaGxpZ2h0UmVj
dCA9IHJlY3Q7Ci0gICAgdXBkYXRlKCk7Ci19Ci0KLU5vZGUqIEluc3BlY3Rvck92ZXJsYXk6Omhp
Z2hsaWdodGVkTm9kZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faGlnaGxpZ2h0Tm9kZS5nZXQo
KTsKLX0KLQotdm9pZCBJbnNwZWN0b3JPdmVybGF5Ojp1cGRhdGUoKQotewotICAgIGlmIChtX2hp
Z2hsaWdodE5vZGUgfHwgbV9oaWdobGlnaHRSZWN0IHx8ICFtX3BhdXNlZEluRGVidWdnZXJNZXNz
YWdlLmlzTnVsbCgpKQotICAgICAgICBtX2NsaWVudC0+aGlnaGxpZ2h0KCk7Ci0gICAgZWxzZQot
ICAgICAgICBtX2NsaWVudC0+aGlkZUhpZ2hsaWdodCgpOwotfQotCi12b2lkIEluc3BlY3Rvck92
ZXJsYXk6OmRyYXdOb2RlSGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLXsKLSAg
ICBpZiAoIW1faGlnaGxpZ2h0Tm9kZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSGlnaGxpZ2h0
IGhpZ2hsaWdodDsKLSAgICBnZXRPckRyYXdOb2RlSGlnaGxpZ2h0KCZjb250ZXh0LCBtX2hpZ2hs
aWdodE5vZGUuZ2V0KCksIG1fbm9kZUhpZ2hsaWdodENvbmZpZywgJmhpZ2hsaWdodCk7Ci19Ci0K
LXZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6ZHJhd1JlY3RIaWdobGlnaHQoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KQotewotICAgIGlmICghbV9oaWdobGlnaHRSZWN0KQotICAgICAgICByZXR1cm47
Ci0KLSAgICBIaWdobGlnaHQgaGlnaGxpZ2h0OwotICAgIGdldE9yRHJhd1JlY3RIaWdobGlnaHQo
JmNvbnRleHQsIG1fcGFnZSwgbV9oaWdobGlnaHRSZWN0LmdldCgpLCBtX3JlY3RIaWdobGlnaHRD
b25maWcsICZoaWdobGlnaHQpOwotfQotCi12b2lkIEluc3BlY3Rvck92ZXJsYXk6OmRyYXdQYXVz
ZWRJbkRlYnVnZ2VyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBpZiAobV9wYXVz
ZWRJbkRlYnVnZ2VyTWVzc2FnZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgREVG
SU5FX1NUQVRJQ19MT0NBTChDb2xvciwgYmFja2dyb3VuZENvbG9yLCAoMCwgMCwgMCwgMzEpKTsK
LSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKENvbG9yLCB0ZXh0QmFja2dyb3VuZENvbG9yLCAoMjU1
LCAyNTUsIDE5NCkpOwotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ29sb3IsIGJvcmRlckNvbG9y
LCAoMTI4LCAxMjgsIDEyOCkpOwotCi0gICAgRnJhbWUqIGZyYW1lID0gbV9wYWdlLT5tYWluRnJh
bWUoKTsKLSAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBmcmFtZS0+c2V0dGluZ3MoKTsKLSAgICBJ
bnRSZWN0IHZpc2libGVSZWN0ID0gSW50UmVjdChJbnRQb2ludCgpLCBmcmFtZS0+dmlldygpLT52
aXNpYmxlU2l6ZSgpKTsKLQotICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKGJhY2tncm91bmRDb2xv
ciwgQ29sb3JTcGFjZURldmljZVJHQik7Ci0gICAgY29udGV4dC5maWxsUmVjdCh2aXNpYmxlUmVj
dCk7Ci0KLSAgICBGb250RGVzY3JpcHRpb24gZGVzYzsKLSAgICBzZXRVcEZvbnREZXNjcmlwdGlv
bihkZXNjLCBzZXR0aW5ncyk7Ci0gICAgRm9udCBmb250ID0gRm9udChkZXNjLCAwLCAwKTsKLSAg
ICBmb250LnVwZGF0ZSgwKTsKLQotICAgIFRleHRSdW4gdGV4dFJ1bihtX3BhdXNlZEluRGVidWdn
ZXJNZXNzYWdlKTsKLSAgICBJbnRSZWN0IHRpdGxlUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoZm9u
dC5zZWxlY3Rpb25SZWN0Rm9yVGV4dCh0ZXh0UnVuLCBJbnRQb2ludCgpLCBmb250SGVpZ2h0UHgp
KTsKLSAgICB0aXRsZVJlY3QuaW5mbGF0ZShyZWN0SW5mbGF0ZVB4KTsKLSAgICB0aXRsZVJlY3Qu
c2V0TG9jYXRpb24oSW50UG9pbnQodmlzaWJsZVJlY3Qud2lkdGgoKSAvIDIgLSB0aXRsZVJlY3Qu
d2lkdGgoKSAvIDIsIDApKTsKLQotICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKHRleHRCYWNrZ3Jv
dW5kQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwotICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29s
b3IoYm9yZGVyQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwotICAgIGNvbnRleHQuZHJhd1Jl
Y3QodGl0bGVSZWN0KTsKLSAgICBkcmF3U3Vic3RyaW5nKHRleHRSdW4sIDAsIG1fcGF1c2VkSW5E
ZWJ1Z2dlck1lc3NhZ2UubGVuZ3RoKCksIENvbG9yOjpibGFjaywgZm9udCwgY29udGV4dCwgdGl0
bGVSZWN0KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxF
KElOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01Ob2Rl
SGlnaGxpZ2h0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0
ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWM3ZDAwYzE1NDI0OTYwNzgwZTE2
MjkzZDhiMjMwZWZjZTZiYTVlMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NTm9kZUhpZ2hsaWdodGVyLmgK
KysrIC9kZXYvbnVsbApAQCAtMSwxMjQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICog
My4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5v
ciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgRE9NTm9kZUhpZ2hsaWdo
dGVyX2gKLSNkZWZpbmUgRE9NTm9kZUhpZ2hsaWdodGVyX2gKLQotI2luY2x1ZGUgIkNvbG9yLmgi
Ci0jaW5jbHVkZSAiRmxvYXRRdWFkLmgiCi0jaW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIKLSNpbmNs
dWRlICJOb2RlLmgiCi0KLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bh
c3NPd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENvbG9yOwotY2xhc3MgR3JhcGhp
Y3NDb250ZXh0OwotY2xhc3MgSW5zcGVjdG9yQ2xpZW50OwotY2xhc3MgSW50UmVjdDsKLWNsYXNz
IE5vZGU7Ci1jbGFzcyBQYWdlOwotCi1zdHJ1Y3QgSGlnaGxpZ2h0Q29uZmlnIHsKLSAgICBDb2xv
ciBjb250ZW50OwotICAgIENvbG9yIGNvbnRlbnRPdXRsaW5lOwotICAgIENvbG9yIHBhZGRpbmc7
Ci0gICAgQ29sb3IgYm9yZGVyOwotICAgIENvbG9yIG1hcmdpbjsKLSAgICBib29sIHNob3dJbmZv
OwotfTsKLQotZW51bSBIaWdobGlnaHRUeXBlIHsKLSAgICBIaWdobGlnaHRUeXBlTm9kZSwKLSAg
ICBIaWdobGlnaHRUeXBlUmVjdHMsCi19OwotCi1zdHJ1Y3QgSGlnaGxpZ2h0IHsKLSAgICB2b2lk
IHNldENvbG9ycyhjb25zdCBIaWdobGlnaHRDb25maWcmIGhpZ2hsaWdodENvbmZpZykKLSAgICB7
Ci0gICAgICAgIGNvbnRlbnRDb2xvciA9IGhpZ2hsaWdodENvbmZpZy5jb250ZW50OwotICAgICAg
ICBwYWRkaW5nQ29sb3IgPSBoaWdobGlnaHRDb25maWcucGFkZGluZzsKLSAgICAgICAgYm9yZGVy
Q29sb3IgPSBoaWdobGlnaHRDb25maWcuYm9yZGVyOwotICAgICAgICBtYXJnaW5Db2xvciA9IGhp
Z2hsaWdodENvbmZpZy5tYXJnaW47Ci0gICAgfQotCi0gICAgQ29sb3IgY29udGVudENvbG9yOwot
ICAgIENvbG9yIHBhZGRpbmdDb2xvcjsKLSAgICBDb2xvciBib3JkZXJDb2xvcjsKLSAgICBDb2xv
ciBtYXJnaW5Db2xvcjsKLQotICAgIC8vIFdoZW4gdGhlIHR5cGUgaXMgTm9kZSwgdGhlcmUgYXJl
IDQgcXVhZHMgKG1hcmdpbiwgYm9yZGVyLCBwYWRkaW5nLCBjb250ZW50KS4KLSAgICAvLyBXaGVu
IHRoZSB0eXBlIGlzIFJlY3RzLCB0aGlzIGlzIGp1c3QgYSBsaXN0IG9mIHF1YWRzLgotICAgIEhp
Z2hsaWdodFR5cGUgdHlwZTsKLSAgICBWZWN0b3I8RmxvYXRRdWFkPiBxdWFkczsKLX07Ci0KLWNs
YXNzIEluc3BlY3Rvck92ZXJsYXkgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPElu
c3BlY3Rvck92ZXJsYXk+IGNyZWF0ZShQYWdlKiBwYWdlLCBJbnNwZWN0b3JDbGllbnQqIGNsaWVu
dCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgSW5zcGVjdG9yT3ZlcmxheShw
YWdlLCBjbGllbnQpKTsKLSAgICB9Ci0KLSAgICB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCYp
OwotICAgIHZvaWQgZHJhd091dGxpbmUoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UmVj
dCYsIGNvbnN0IENvbG9yJik7Ci0gICAgdm9pZCBnZXRIaWdobGlnaHQoSGlnaGxpZ2h0KikgY29u
c3Q7Ci0KLSAgICB2b2lkIHNldFBhdXNlZEluRGVidWdnZXJNZXNzYWdlKGNvbnN0IFN0cmluZyop
OwotCi0gICAgdm9pZCBoaWRlSGlnaGxpZ2h0KCk7Ci0gICAgdm9pZCBoaWdobGlnaHROb2RlKE5v
ZGUqLCBjb25zdCBIaWdobGlnaHRDb25maWcmKTsKLSAgICB2b2lkIGhpZ2hsaWdodFJlY3QoUGFz
c093blB0cjxJbnRSZWN0PiwgY29uc3QgSGlnaGxpZ2h0Q29uZmlnJik7Ci0KLSAgICBOb2RlKiBo
aWdobGlnaHRlZE5vZGUoKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBJbnNwZWN0b3JPdmVybGF5
KFBhZ2UqLCBJbnNwZWN0b3JDbGllbnQqKTsKLQotICAgIHZvaWQgdXBkYXRlKCk7Ci0gICAgdm9p
ZCBkcmF3Tm9kZUhpZ2hsaWdodChHcmFwaGljc0NvbnRleHQmKTsKLSAgICB2b2lkIGRyYXdSZWN0
SGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCYpOwotICAgIHZvaWQgZHJhd1BhdXNlZEluRGVidWdn
ZXIoR3JhcGhpY3NDb250ZXh0Jik7Ci0KLSAgICBQYWdlKiBtX3BhZ2U7Ci0gICAgSW5zcGVjdG9y
Q2xpZW50KiBtX2NsaWVudDsKLSAgICBTdHJpbmcgbV9wYXVzZWRJbkRlYnVnZ2VyTWVzc2FnZTsK
LSAgICBSZWZQdHI8Tm9kZT4gbV9oaWdobGlnaHROb2RlOwotICAgIEhpZ2hsaWdodENvbmZpZyBt
X25vZGVIaWdobGlnaHRDb25maWc7Ci0gICAgT3duUHRyPEludFJlY3Q+IG1faGlnaGxpZ2h0UmVj
dDsKLSAgICBIaWdobGlnaHRDb25maWcgbV9yZWN0SGlnaGxpZ2h0Q29uZmlnOwotfTsKLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0KLSNlbmRpZiAvLyBET01Ob2RlSGlnaGxpZ2h0ZXJfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFsbEluT25lLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBbGxJbk9uZS5jcHAKaW5kZXgg
NWUxYWJhMTIwOGFmYjZiOGRlODk4OWMzN2U2YjU5ZGJlZmQ4YmQzNS4uZGIzZjgyY2JlOWFiZjgy
N2E5N2FhZThjMDg0YThmZDZiMTIwOTJiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckFsbEluT25lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQWxsSW5PbmUuY3BwCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSAiQ29u
c29sZU1lc3NhZ2UuY3BwIgogI2luY2x1ZGUgIkNvbnRlbnRTZWFyY2hVdGlscy5jcHAiCiAjaW5j
bHVkZSAiRE9NRWRpdG9yLmNwcCIKLSNpbmNsdWRlICJET01Ob2RlSGlnaGxpZ2h0ZXIuY3BwIgog
I2luY2x1ZGUgIkRPTVBhdGNoU3VwcG9ydC5jcHAiCiAjaW5jbHVkZSAiSWRlbnRpZmllcnNGYWN0
b3J5LmNwcCIKICNpbmNsdWRlICJJbmplY3RlZFNjcmlwdC5jcHAiCkBAIC01Nyw2ICs1Niw3IEBA
CiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwIgogI2luY2x1ZGUgIkluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbi5jcHAiCiAjaW5jbHVkZSAiSW5zcGVjdG9yTWVtb3J5QWdlbnQu
Y3BwIgorI2luY2x1ZGUgIkluc3BlY3Rvck92ZXJsYXkuY3BwIgogI2luY2x1ZGUgIkluc3BlY3Rv
clBhZ2VBZ2VudC5jcHAiCiAjaW5jbHVkZSAiSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAiCiAj
aW5jbHVkZSAiSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAiCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXggZTI2YTFjMDRiNTk1NWQx
OWU1NDJiM2M2ZTY4Mzk2YWNlYzY0Njg0NS4uNWEwZjNiZjQzNGQ4NjBhNzZjZmEwYzlmNzVhYmVk
MGFjZGZkZDZhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
b250cm9sbGVyLmNwcApAQCAtMzQsNyArMzQsNiBAQAogCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29u
dHJvbGxlci5oIgogCi0jaW5jbHVkZSAiRE9NTm9kZUhpZ2hsaWdodGVyLmgiCiAjaW5jbHVkZSAi
RnJhbWUuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJZGVudGlm
aWVyc0ZhY3RvcnkuaCIKQEAgLTU3LDYgKzU2LDcgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JJbmRl
eGVkREJBZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgogI2lu
Y2x1ZGUgIkluc3BlY3Rvck1lbW9yeUFnZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yT3Zlcmxh
eS5oIgogI2luY2x1ZGUgIkluc3BlY3RvclBhZ2VBZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3Rv
clByb2ZpbGVyQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JSZXNvdXJjZUFnZW50LmgiCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAppbmRleCAy
MTAwYTkyNzE5M2E1MDQyMThkYzMxODg5MzZhMTJhZjhlZmY2ZTY2Li43ZmNlYzBmYTI1ZTNkZmZm
MTgwYTI3ODJiMzAzOWE1MWZlNWQ0MmI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JET01BZ2VudC5jcHAKQEAgLTQ3LDcgKzQ3LDYgQEAKICNpbmNsdWRlICJDb29r
aWUuaCIKICNpbmNsdWRlICJDb29raWVKYXIuaCIKICNpbmNsdWRlICJET01FZGl0b3IuaCIKLSNp
bmNsdWRlICJET01Ob2RlSGlnaGxpZ2h0ZXIuaCIKICNpbmNsdWRlICJET01QYXRjaFN1cHBvcnQu
aCIKICNpbmNsdWRlICJET01XaW5kb3cuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgpAQCAtNjgs
NiArNjcsNyBAQAogI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0TWFuYWdlci5oIgogI2luY2x1ZGUg
Ikluc3BlY3RvckZyb250ZW5kLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySGlzdG9yeS5oIgorI2lu
Y2x1ZGUgIkluc3BlY3Rvck92ZXJsYXkuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JQYWdlQWdlbnQu
aCIKICNpbmNsdWRlICJJbnNwZWN0b3JTdGF0ZS5oIgogI2luY2x1ZGUgIkluc3RydW1lbnRpbmdB
Z2VudHMuaCIKQEAgLTEwMDQsMjEgKzEwMDQsMjEgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6
c2V0U2VhcmNoaW5nRm9yTm9kZShFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGJvb2wgZW5hYmwK
ICAgICBpZiAobV9zZWFyY2hpbmdGb3JOb2RlID09IGVuYWJsZWQpCiAgICAgICAgIHJldHVybjsK
ICAgICBtX3NlYXJjaGluZ0Zvck5vZGUgPSBlbmFibGVkOwotICAgIGlmIChlbmFibGVkKSB7Ci0g
ICAgICAgIGlmICghaGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0KSB7Ci0gICAgICAgICAgICAqZXJy
b3JTdHJpbmcgPSAiSW50ZXJuYWwgZXJyb3I6IGhpZ2hsaWdodCBjb25maWd1cmF0aW9uIHBhcmFt
ZXRlciBpcyBtaXNzaW5nIjsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAg
ICBtX2luc3BlY3RNb2RlSGlnaGxpZ2h0Q29uZmlnID0gaGlnaGxpZ2h0Q29uZmlnRnJvbUluc3Bl
Y3Rvck9iamVjdChoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpOwotICAgIH0KKyAgICBpZiAoZW5h
YmxlZCkKKyAgICAgICAgbV9pbnNwZWN0TW9kZUhpZ2hsaWdodENvbmZpZyA9IGhpZ2hsaWdodENv
bmZpZ0Zyb21JbnNwZWN0b3JPYmplY3QoZXJyb3JTdHJpbmcsIGhpZ2hsaWdodEluc3BlY3Rvck9i
amVjdCk7CiAgICAgZWxzZSB7CiAgICAgICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgICAgICBo
aWRlSGlnaGxpZ2h0KCZlcnJvcik7CiAgICAgfQogfQogCi1QYXNzT3duUHRyPEhpZ2hsaWdodENv
bmZpZz4gSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodENvbmZpZ0Zyb21JbnNwZWN0b3JPYmpl
Y3QoSW5zcGVjdG9yT2JqZWN0KiBoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpCitQYXNzT3duUHRy
PEhpZ2hsaWdodENvbmZpZz4gSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodENvbmZpZ0Zyb21J
bnNwZWN0b3JPYmplY3QoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBJbnNwZWN0b3JPYmplY3Qq
IGhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCkKIHsKKyAgICBpZiAoIWhpZ2hsaWdodEluc3BlY3Rv
ck9iamVjdCkgeworICAgICAgICAqZXJyb3JTdHJpbmcgPSAiSW50ZXJuYWwgZXJyb3I6IGhpZ2hs
aWdodCBjb25maWd1cmF0aW9uIHBhcmFtZXRlciBpcyBtaXNzaW5nIjsKKyAgICAgICAgcmV0dXJu
IFBhc3NPd25QdHI8SGlnaGxpZ2h0Q29uZmlnPiAoKTsKKyAgICB9CisKICAgICBPd25QdHI8SGln
aGxpZ2h0Q29uZmlnPiBoaWdobGlnaHRDb25maWcgPSBhZG9wdFB0cihuZXcgSGlnaGxpZ2h0Q29u
ZmlnKCkpOwogICAgIGJvb2wgc2hvd0luZm8gPSBmYWxzZTsgLy8gRGVmYXVsdDogZmFsc2UgKGRv
IG5vdCBzaG93IGEgdG9vbHRpcCkuCiAgICAgaGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0LT5nZXRC
b29sZWFuKCJzaG93SW5mbyIsICZzaG93SW5mbyk7CkBAIC0xMDUwLDEyICsxMDUwLDkgQEAgdm9p
ZCBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0Tm9kZSgKICAgICBjb25zdCBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiYgaGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0KQogewogICAgIGlmIChOb2Rl
KiBub2RlID0gbm9kZUZvcklkKG5vZGVJZCkpIHsKLSAgICAgICAgaWYgKCFoaWdobGlnaHRJbnNw
ZWN0b3JPYmplY3QpIHsKLSAgICAgICAgICAgICplcnJvclN0cmluZyA9ICJJbnRlcm5hbCBlcnJv
cjogaGlnaGxpZ2h0IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIGlzIG1pc3NpbmciOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIE93blB0cjxIaWdobGlnaHRDb25maWc+
IGhpZ2hsaWdodENvbmZpZyA9IGhpZ2hsaWdodENvbmZpZ0Zyb21JbnNwZWN0b3JPYmplY3QoaGln
aGxpZ2h0SW5zcGVjdG9yT2JqZWN0LmdldCgpKTsKLSAgICAgICAgbV9vdmVybGF5LT5oaWdobGln
aHROb2RlKG5vZGUsICpoaWdobGlnaHRDb25maWcpOworICAgICAgICBPd25QdHI8SGlnaGxpZ2h0
Q29uZmlnPiBoaWdobGlnaHRDb25maWcgPSBoaWdobGlnaHRDb25maWdGcm9tSW5zcGVjdG9yT2Jq
ZWN0KGVycm9yU3RyaW5nLCBoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QuZ2V0KCkpOworICAgICAg
ICBpZiAoaGlnaGxpZ2h0Q29uZmlnKQorICAgICAgICAgICAgbV9vdmVybGF5LT5oaWdobGlnaHRO
b2RlKG5vZGUsICpoaWdobGlnaHRDb25maWcpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaAppbmRleCA3MzM5YzYzZGM4MDJjZDExZmI2
YmQ1NjJkY2M3MGYyMTM3MGY2M2EwLi5jNjMxZjYwZmU0ZjFkZjM1YzkxMmNkODJhNzk5ZTk3MGQz
M2RhOTYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9N
QWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQu
aApAQCAtMzAsMTIgKzMwLDEyIEBACiAjaWZuZGVmIEluc3BlY3RvckRPTUFnZW50X2gKICNkZWZp
bmUgSW5zcGVjdG9yRE9NQWdlbnRfaAogCi0jaW5jbHVkZSAiRE9NTm9kZUhpZ2hsaWdodGVyLmgi
CiAjaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKICNpbmNsdWRlICJJbmplY3RlZFNjcmlwdC5oIgog
I2luY2x1ZGUgIkluamVjdGVkU2NyaXB0TWFuYWdlci5oIgogI2luY2x1ZGUgIkluc3BlY3RvckJh
c2VBZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kLmgiCisjaW5jbHVkZSAiSW5z
cGVjdG9yT3ZlcmxheS5oIgogI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgogI2luY2x1ZGUg
IlRpbWVyLmgiCiAKQEAgLTIwMiw3ICsyMDIsNyBAQCBwcml2YXRlOgogICAgIEluc3BlY3RvckRP
TUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqLCBJbnNwZWN0b3JQYWdlQWdlbnQqLCBJbnNwZWN0
b3JTdGF0ZSosIEluamVjdGVkU2NyaXB0TWFuYWdlciosIEluc3BlY3Rvck92ZXJsYXkqKTsKIAog
ICAgIHZvaWQgc2V0U2VhcmNoaW5nRm9yTm9kZShFcnJvclN0cmluZyosIGJvb2wgZW5hYmxlZCwg
SW5zcGVjdG9yT2JqZWN0KiBoaWdobGlnaHRDb25maWcpOwotICAgIFBhc3NPd25QdHI8SGlnaGxp
Z2h0Q29uZmlnPiBoaWdobGlnaHRDb25maWdGcm9tSW5zcGVjdG9yT2JqZWN0KEluc3BlY3Rvck9i
amVjdCogaGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0KTsKKyAgICBQYXNzT3duUHRyPEhpZ2hsaWdo
dENvbmZpZz4gaGlnaGxpZ2h0Q29uZmlnRnJvbUluc3BlY3Rvck9iamVjdChFcnJvclN0cmluZyos
IEluc3BlY3Rvck9iamVjdCogaGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0KTsKIAogICAgIC8vIE5v
ZGUtcmVsYXRlZCBtZXRob2RzLgogICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8Tm9kZT4sIGlu
dD4gTm9kZVRvSWRNYXA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yT3ZlcmxheS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3Zl
cmxheS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMjFiZDBlZDQ5N2Q1NzRmZGE5NTVlOWZlODM3NGRkZWJmZTZm
NTMzYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JPdmVybGF5LmNwcApAQCAtMCwwICsxLDYxNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICog
My4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5v
ciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKwor
I2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlICJJbnNwZWN0b3JPdmVybGF5LmgiCisK
KyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiRm9udENhY2hlLmgiCisjaW5jbHVkZSAi
Rm9udEZhbWlseS5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3Lmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5o
IgorI2luY2x1ZGUgIkluc3BlY3RvckNsaWVudC5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNs
dWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUmFuZ2UuaCIKKyNpbmNsdWRlICJSZW5kZXJCb3hNb2Rl
bE9iamVjdC5oIgorI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgorI2luY2x1ZGUgIlJlbmRlck9i
amVjdC5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiU3R5bGVkRWxlbWVudC5o
IgorI2luY2x1ZGUgIlRleHRSdW4uaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVy
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIHsKKworI2lmIE9TKFdJTkRP
V1MpCitzdGF0aWMgY29uc3QgdW5zaWduZWQgZm9udEhlaWdodFB4ID0gMTI7CisjZWxpZiBPUyhN
QUNfT1NfWCkgfHwgT1MoVU5JWCkKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBmb250SGVpZ2h0UHgg
PSAxMTsKKyNlbmRpZgorCitjb25zdCBzdGF0aWMgaW50IHJlY3RJbmZsYXRlUHggPSA0OworY29u
c3Qgc3RhdGljIGludCBib3JkZXJXaWR0aFB4ID0gMTsKK2NvbnN0IHN0YXRpYyBpbnQgdG9vbHRp
cFBhZGRpbmcgPSA0OworCitjb25zdCBzdGF0aWMgaW50IGFycm93VGlwT2Zmc2V0ID0gMjA7Citj
b25zdCBzdGF0aWMgZmxvYXQgYXJyb3dIZWlnaHQgPSA3OworY29uc3Qgc3RhdGljIGZsb2F0IGFy
cm93SGFsZldpZHRoID0gNzsKKworUGF0aCBxdWFkVG9QYXRoKGNvbnN0IEZsb2F0UXVhZCYgcXVh
ZCkKK3sKKyAgICBQYXRoIHF1YWRQYXRoOworICAgIHF1YWRQYXRoLm1vdmVUbyhxdWFkLnAxKCkp
OworICAgIHF1YWRQYXRoLmFkZExpbmVUbyhxdWFkLnAyKCkpOworICAgIHF1YWRQYXRoLmFkZExp
bmVUbyhxdWFkLnAzKCkpOworICAgIHF1YWRQYXRoLmFkZExpbmVUbyhxdWFkLnA0KCkpOworICAg
IHF1YWRQYXRoLmNsb3NlU3VicGF0aCgpOworICAgIHJldHVybiBxdWFkUGF0aDsKK30KKwordm9p
ZCBkcmF3T3V0bGluZWRRdWFkKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRR
dWFkJiBxdWFkLCBjb25zdCBDb2xvciYgZmlsbENvbG9yLCBjb25zdCBDb2xvciYgb3V0bGluZUNv
bG9yKQoreworICAgIHN0YXRpYyBjb25zdCBpbnQgb3V0bGluZVRoaWNrbmVzcyA9IDI7CisKKyAg
ICBQYXRoIHF1YWRQYXRoID0gcXVhZFRvUGF0aChxdWFkKTsKKworICAgIC8vIENsaXAgb3V0IHRo
ZSBxdWFkLCB0aGVuIGRyYXcgd2l0aCBhIDJweCBzdHJva2UgdG8gZ2V0IGEgcGl4ZWwKKyAgICAv
LyBvZiBvdXRsaW5lIChiZWNhdXNlIGluZmxhdGluZyBhIHF1YWQgaXMgaGFyZCkKKyAgICB7Cisg
ICAgICAgIGNvbnRleHQuc2F2ZSgpOworICAgICAgICBjb250ZXh0LmNsaXBPdXQocXVhZFBhdGgp
OworCisgICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKG91dGxpbmVUaGlja25lc3Mp
OworICAgICAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKG91dGxpbmVDb2xvciwgQ29sb3JTcGFj
ZURldmljZVJHQik7CisgICAgICAgIGNvbnRleHQuc3Ryb2tlUGF0aChxdWFkUGF0aCk7CisKKyAg
ICAgICAgY29udGV4dC5yZXN0b3JlKCk7CisgICAgfQorCisgICAgLy8gTm93IGRvIHRoZSBmaWxs
CisgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoZmlsbENvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdC
KTsKKyAgICBjb250ZXh0LmZpbGxQYXRoKHF1YWRQYXRoKTsKK30KKwordm9pZCBkcmF3T3V0bGlu
ZWRRdWFkV2l0aENsaXAoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFF1YWQm
IHF1YWQsIGNvbnN0IEZsb2F0UXVhZCYgY2xpcFF1YWQsIGNvbnN0IENvbG9yJiBmaWxsQ29sb3Ip
Cit7CisgICAgY29udGV4dC5zYXZlKCk7CisgICAgUGF0aCBjbGlwUXVhZFBhdGggPSBxdWFkVG9Q
YXRoKGNsaXBRdWFkKTsKKyAgICBjb250ZXh0LmNsaXBPdXQoY2xpcFF1YWRQYXRoKTsKKyAgICBk
cmF3T3V0bGluZWRRdWFkKGNvbnRleHQsIHF1YWQsIGZpbGxDb2xvciwgQ29sb3I6OnRyYW5zcGFy
ZW50KTsKKyAgICBjb250ZXh0LnJlc3RvcmUoKTsKK30KKwordm9pZCBkcmF3SGlnaGxpZ2h0Rm9y
Qm94KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRRdWFkJiBjb250ZW50UXVh
ZCwgY29uc3QgRmxvYXRRdWFkJiBwYWRkaW5nUXVhZCwgY29uc3QgRmxvYXRRdWFkJiBib3JkZXJR
dWFkLCBjb25zdCBGbG9hdFF1YWQmIG1hcmdpblF1YWQsIGNvbnN0IEhpZ2hsaWdodENvbmZpZyYg
aGlnaGxpZ2h0Q29uZmlnKQoreworICAgIGJvb2wgaGFzTWFyZ2luID0gaGlnaGxpZ2h0Q29uZmln
Lm1hcmdpbiAhPSBDb2xvcjo6dHJhbnNwYXJlbnQ7CisgICAgYm9vbCBoYXNCb3JkZXIgPSBoaWdo
bGlnaHRDb25maWcuYm9yZGVyICE9IENvbG9yOjp0cmFuc3BhcmVudDsKKyAgICBib29sIGhhc1Bh
ZGRpbmcgPSBoaWdobGlnaHRDb25maWcucGFkZGluZyAhPSBDb2xvcjo6dHJhbnNwYXJlbnQ7Cisg
ICAgYm9vbCBoYXNDb250ZW50ID0gaGlnaGxpZ2h0Q29uZmlnLmNvbnRlbnQgIT0gQ29sb3I6OnRy
YW5zcGFyZW50IHx8IGhpZ2hsaWdodENvbmZpZy5jb250ZW50T3V0bGluZSAhPSBDb2xvcjo6dHJh
bnNwYXJlbnQ7CisKKyAgICBGbG9hdFF1YWQgY2xpcFF1YWQ7CisgICAgQ29sb3IgY2xpcENvbG9y
OworICAgIGlmIChoYXNNYXJnaW4gJiYgKCFoYXNCb3JkZXIgfHwgbWFyZ2luUXVhZCAhPSBib3Jk
ZXJRdWFkKSkgeworICAgICAgICBkcmF3T3V0bGluZWRRdWFkV2l0aENsaXAoY29udGV4dCwgbWFy
Z2luUXVhZCwgYm9yZGVyUXVhZCwgaGlnaGxpZ2h0Q29uZmlnLm1hcmdpbik7CisgICAgICAgIGNs
aXBRdWFkID0gYm9yZGVyUXVhZDsKKyAgICB9CisgICAgaWYgKGhhc0JvcmRlciAmJiAoIWhhc1Bh
ZGRpbmcgfHwgYm9yZGVyUXVhZCAhPSBwYWRkaW5nUXVhZCkpIHsKKyAgICAgICAgZHJhd091dGxp
bmVkUXVhZFdpdGhDbGlwKGNvbnRleHQsIGJvcmRlclF1YWQsIHBhZGRpbmdRdWFkLCBoaWdobGln
aHRDb25maWcuYm9yZGVyKTsKKyAgICAgICAgY2xpcFF1YWQgPSBwYWRkaW5nUXVhZDsKKyAgICB9
CisgICAgaWYgKGhhc1BhZGRpbmcgJiYgKCFoYXNDb250ZW50IHx8IHBhZGRpbmdRdWFkICE9IGNv
bnRlbnRRdWFkKSkgeworICAgICAgICBkcmF3T3V0bGluZWRRdWFkV2l0aENsaXAoY29udGV4dCwg
cGFkZGluZ1F1YWQsIGNvbnRlbnRRdWFkLCBoaWdobGlnaHRDb25maWcucGFkZGluZyk7CisgICAg
ICAgIGNsaXBRdWFkID0gY29udGVudFF1YWQ7CisgICAgfQorICAgIGlmIChoYXNDb250ZW50KQor
ICAgICAgICBkcmF3T3V0bGluZWRRdWFkKGNvbnRleHQsIGNvbnRlbnRRdWFkLCBoaWdobGlnaHRD
b25maWcuY29udGVudCwgaGlnaGxpZ2h0Q29uZmlnLmNvbnRlbnRPdXRsaW5lKTsKK30KKwordm9p
ZCBkcmF3SGlnaGxpZ2h0Rm9yU1ZHUmVuZGVyZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBj
b25zdCBWZWN0b3I8RmxvYXRRdWFkPiYgYWJzb2x1dGVRdWFkcywgY29uc3QgSGlnaGxpZ2h0Q29u
ZmlnJiBoaWdobGlnaHRDb25maWcpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhYnNv
bHV0ZVF1YWRzLnNpemUoKTsgKytpKQorICAgICAgICBkcmF3T3V0bGluZWRRdWFkKGNvbnRleHQs
IGFic29sdXRlUXVhZHNbaV0sIGhpZ2hsaWdodENvbmZpZy5jb250ZW50LCBDb2xvcjo6dHJhbnNw
YXJlbnQpOworfQorCitpbnQgZHJhd1N1YnN0cmluZyhjb25zdCBUZXh0UnVuJiBnbG9iYWxUZXh0
UnVuLCBpbnQgb2Zmc2V0LCBpbnQgbGVuZ3RoLCBjb25zdCBDb2xvciYgdGV4dENvbG9yLCBjb25z
dCBGb250JiBmb250LCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91dFJlY3Qm
IHRpdGxlUmVjdCkKK3sKKyAgICBjb250ZXh0LnNldEZpbGxDb2xvcih0ZXh0Q29sb3IsIENvbG9y
U3BhY2VEZXZpY2VSR0IpOworICAgIGNvbnRleHQuZHJhd1RleHQoZm9udCwgZ2xvYmFsVGV4dFJ1
biwgSW50UG9pbnQodGl0bGVSZWN0LnBpeGVsU25hcHBlZFgoKSArIHJlY3RJbmZsYXRlUHgsIHRp
dGxlUmVjdC5waXhlbFNuYXBwZWRZKCkgKyBmb250LmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCkpLCBv
ZmZzZXQsIG9mZnNldCArIGxlbmd0aCk7CisgICAgcmV0dXJuIG9mZnNldCArIGxlbmd0aDsKK30K
KworZmxvYXQgY2FsY3VsYXRlQXJyb3dUaXBYKGNvbnN0IExheW91dFJlY3QmIGFuY2hvckJveCwg
Y29uc3QgTGF5b3V0UmVjdCYgdGl0bGVSZWN0KQoreworICAgIGNvbnN0IHN0YXRpYyBpbnQgYW5j
aG9yVGlwT2Zmc2V0UHggPSAyOworCisgICAgaW50IG1pblggPSB0aXRsZVJlY3QueCgpICsgYXJy
b3dIYWxmV2lkdGg7CisgICAgaW50IG1heFggPSB0aXRsZVJlY3QubWF4WCgpIC0gYXJyb3dIYWxm
V2lkdGg7CisgICAgaW50IGFuY2hvclggPSBhbmNob3JCb3gueCgpOworICAgIGludCBhbmNob3JN
YXhYID0gYW5jaG9yQm94Lm1heFgoKTsKKworICAgIGludCB4ID0gdGl0bGVSZWN0LngoKSArIGFy
cm93VGlwT2Zmc2V0OyAvLyBEZWZhdWx0IHRvb2x0aXAgcG9zaXRpb24uCisgICAgaWYgKHggPCBh
bmNob3JYKQorICAgICAgICB4ID0gYW5jaG9yWCArIGFuY2hvclRpcE9mZnNldFB4OworICAgIGVs
c2UgaWYgKHggPiBhbmNob3JNYXhYKQorICAgICAgICB4ID0gYW5jaG9yTWF4WCAtIGFuY2hvclRp
cE9mZnNldFB4OworCisgICAgaWYgKHggPCBtaW5YKQorICAgICAgICB4ID0gbWluWDsKKyAgICBl
bHNlIGlmICh4ID4gbWF4WCkKKyAgICAgICAgeCA9IG1heFg7CisKKyAgICByZXR1cm4geDsKK30K
Kwordm9pZCBzZXRVcEZvbnREZXNjcmlwdGlvbihGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlw
dGlvbiwgV2ViQ29yZTo6U2V0dGluZ3MqIHNldHRpbmdzKQoreworI2RlZmluZSBUT09MVElQX0ZP
TlRfRkFNSUxJRVMoc2l6ZSwgLi4uKSBcCitzdGF0aWMgY29uc3QgdW5zaWduZWQgdG9vbHRpcEZv
bnRGYWNlU2l6ZSA9IHNpemU7XAorc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyogdG9vbHRpcEZv
bnRGYWNlW3NpemVdID0geyBfX1ZBX0FSR1NfXyB9OworCisjaWYgT1MoV0lORE9XUykKK1RPT0xU
SVBfRk9OVF9GQU1JTElFUygyLCBuZXcgQXRvbWljU3RyaW5nKCJDb25zb2xhcyIpLCBuZXcgQXRv
bWljU3RyaW5nKCJMdWNpZGEgQ29uc29sZSIpKQorI2VsaWYgT1MoTUFDX09TX1gpCitUT09MVElQ
X0ZPTlRfRkFNSUxJRVMoMiwgbmV3IEF0b21pY1N0cmluZygiTWVubG8iKSwgbmV3IEF0b21pY1N0
cmluZygiTW9uYWNvIikpCisjZWxpZiBPUyhVTklYKQorVE9PTFRJUF9GT05UX0ZBTUlMSUVTKDEs
IG5ldyBBdG9taWNTdHJpbmcoImRlamF2dSBzYW5zIG1vbm8iKSkKKyNlbmRpZgorLy8gSW4gdGhl
IGRlZmF1bHQgY2FzZSwgd2UgZ2V0IHRoZSBzZXR0aW5ncy1wcm92aWRlZCBtb25vc3BhY2UgZm9u
dC4KKworI3VuZGVmIFRPT0xUSVBfRk9OVF9GQU1JTElFUworCisgICAgZm9udERlc2NyaXB0aW9u
LnNldFJlbmRlcmluZ01vZGUoc2V0dGluZ3MtPmZvbnRSZW5kZXJpbmdNb2RlKCkpOworICAgIGZv
bnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoZm9udEhlaWdodFB4KTsKKworICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgZml4ZWRGb250RmFtaWx5ID0gc2V0dGluZ3MtPmZpeGVkRm9udEZhbWls
eSgpOworICAgIGlmICghZml4ZWRGb250RmFtaWx5LmlzRW1wdHkoKSkgeworICAgICAgICBmb250
RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3JpcHRpb246Ok1vbm9zcGFjZUZh
bWlseSk7CisgICAgICAgIEZvbnRGYW1pbHkqIGN1cnJlbnRGYW1pbHkgPSAwOworICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG9vbHRpcEZvbnRGYWNlU2l6ZTsgKytpKSB7CisgICAg
ICAgICAgICBpZiAoIWN1cnJlbnRGYW1pbHkpIHsKKyAgICAgICAgICAgICAgICBmb250RGVzY3Jp
cHRpb24uZmlyc3RGYW1pbHkoKS5zZXRGYW1pbHkoKnRvb2x0aXBGb250RmFjZVtpXSk7CisgICAg
ICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCkuYXBwZW5kRmFtaWx5KDAp
OworICAgICAgICAgICAgICAgIGN1cnJlbnRGYW1pbHkgPSAmZm9udERlc2NyaXB0aW9uLmZpcnN0
RmFtaWx5KCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIFJlZlB0cjxT
aGFyZWRGb250RmFtaWx5PiBuZXdGYW1pbHkgPSBTaGFyZWRGb250RmFtaWx5OjpjcmVhdGUoKTsK
KyAgICAgICAgICAgICAgICBuZXdGYW1pbHktPnNldEZhbWlseSgqdG9vbHRpcEZvbnRGYWNlW2ld
KTsKKyAgICAgICAgICAgICAgICBjdXJyZW50RmFtaWx5LT5hcHBlbmRGYW1pbHkobmV3RmFtaWx5
KTsKKyAgICAgICAgICAgICAgICBjdXJyZW50RmFtaWx5ID0gbmV3RmFtaWx5LmdldCgpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIFJlZlB0cjxTaGFyZWRGb250RmFtaWx5PiBu
ZXdGYW1pbHkgPSBTaGFyZWRGb250RmFtaWx5OjpjcmVhdGUoKTsKKyAgICAgICAgbmV3RmFtaWx5
LT5zZXRGYW1pbHkoZml4ZWRGb250RmFtaWx5KTsKKyAgICAgICAgY3VycmVudEZhbWlseS0+YXBw
ZW5kRmFtaWx5KG5ld0ZhbWlseSk7CisgICAgICAgIGN1cnJlbnRGYW1pbHkgPSBuZXdGYW1pbHku
Z2V0KCk7CisgICAgfQorfQorCit2b2lkIGRyYXdFbGVtZW50VGl0bGUoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBOb2RlKiBub2RlLCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBJbnRS
ZWN0JiBib3VuZGluZ0JveCwgY29uc3QgSW50UmVjdCYgYW5jaG9yQm94LCBjb25zdCBGbG9hdFJl
Y3QmIHZpc2libGVSZWN0LCBXZWJDb3JlOjpTZXR0aW5ncyogc2V0dGluZ3MpCit7CisgICAgREVG
SU5FX1NUQVRJQ19MT0NBTChDb2xvciwgYmFja2dyb3VuZENvbG9yLCAoMjU1LCAyNTUsIDE5NCkp
OworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ29sb3IsIHRhZ0NvbG9yLCAoMTM2LCAxOCwgMTI4
KSk7IC8vIFNhbWUgYXMgLndlYmtpdC1odG1sLXRhZy4KKyAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KENvbG9yLCBhdHRyQ29sb3IsICgyNiwgMjYsIDE2NikpOyAvLyBTYW1lIGFzIC53ZWJraXQtaHRt
bC1hdHRyaWJ1dGUtdmFsdWUuCisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChDb2xvciwgbm9ybWFs
Q29sb3IsIChDb2xvcjo6YmxhY2spKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKENvbG9yLCBw
eEFuZEJvcmRlckNvbG9yLCAoMTI4LCAxMjgsIDEyOCkpOworCisgICAgREVGSU5FX1NUQVRJQ19M
T0NBTChTdHJpbmcsIHB4U3RyaW5nLCAoInB4IikpOworICAgIGNvbnN0IHN0YXRpYyBVQ2hhciB0
aW1lc1VDaGFyW10gPSB7IDB4MDAyMCwgMHgwMEQ3LCAweDAwMjAsIDAgfTsKKyAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKFN0cmluZywgdGltZXNTdHJpbmcsICh0aW1lc1VDaGFyKSk7IC8vICZ0aW1l
czsgc3RyaW5nCisKKyAgICBGb250Q2FjaGVQdXJnZVByZXZlbnRlciBmb250Q2FjaGVQdXJnZVBy
ZXZlbnRlcjsKKworICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4o
bm9kZSk7CisgICAgYm9vbCBpc1hIVE1MID0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+aXNYSFRNTERv
Y3VtZW50KCk7CisgICAgU3RyaW5nQnVpbGRlciBub2RlVGl0bGU7CisgICAgbm9kZVRpdGxlLmFw
cGVuZChpc1hIVE1MID8gZWxlbWVudC0+bm9kZU5hbWUoKSA6IGVsZW1lbnQtPm5vZGVOYW1lKCku
bG93ZXIoKSk7CisgICAgdW5zaWduZWQgdGFnTmFtZUxlbmd0aCA9IG5vZGVUaXRsZS5sZW5ndGgo
KTsKKworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgaWRWYWx1ZSA9IGVsZW1lbnQtPmdldElkQXR0
cmlidXRlKCk7CisgICAgdW5zaWduZWQgaWRTdHJpbmdMZW5ndGggPSAwOworICAgIFN0cmluZyBp
ZFN0cmluZzsKKyAgICBpZiAoIWlkVmFsdWUuaXNOdWxsKCkgJiYgIWlkVmFsdWUuaXNFbXB0eSgp
KSB7CisgICAgICAgIG5vZGVUaXRsZS5hcHBlbmQoIiMiKTsKKyAgICAgICAgbm9kZVRpdGxlLmFw
cGVuZChpZFZhbHVlKTsKKyAgICAgICAgaWRTdHJpbmdMZW5ndGggPSAxICsgaWRWYWx1ZS5sZW5n
dGgoKTsKKyAgICB9CisKKyAgICBIYXNoU2V0PEF0b21pY1N0cmluZz4gdXNlZENsYXNzTmFtZXM7
CisgICAgdW5zaWduZWQgY2xhc3Nlc1N0cmluZ0xlbmd0aCA9IDA7CisgICAgaWYgKGVsZW1lbnQt
Pmhhc0NsYXNzKCkgJiYgZWxlbWVudC0+aXNTdHlsZWRFbGVtZW50KCkpIHsKKyAgICAgICAgY29u
c3QgU3BhY2VTcGxpdFN0cmluZyYgY2xhc3NOYW1lc1N0cmluZyA9IHN0YXRpY19jYXN0PFN0eWxl
ZEVsZW1lbnQqPihlbGVtZW50KS0+Y2xhc3NOYW1lcygpOworICAgICAgICBzaXplX3QgY2xhc3NO
YW1lQ291bnQgPSBjbGFzc05hbWVzU3RyaW5nLnNpemUoKTsKKyAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBjbGFzc05hbWVDb3VudDsgKytpKSB7CisgICAgICAgICAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIGNsYXNzTmFtZSA9IGNsYXNzTmFtZXNTdHJpbmdbaV07CisgICAgICAgICAgICBp
ZiAodXNlZENsYXNzTmFtZXMuY29udGFpbnMoY2xhc3NOYW1lKSkKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIHVzZWRDbGFzc05hbWVzLmFkZChjbGFzc05hbWUpOworICAg
ICAgICAgICAgbm9kZVRpdGxlLmFwcGVuZCgiLiIpOworICAgICAgICAgICAgbm9kZVRpdGxlLmFw
cGVuZChjbGFzc05hbWUpOworICAgICAgICAgICAgY2xhc3Nlc1N0cmluZ0xlbmd0aCArPSAxICsg
Y2xhc3NOYW1lLmxlbmd0aCgpOworICAgICAgICB9CisgICAgfQorCisgICAgUmVuZGVyQm94TW9k
ZWxPYmplY3QqIG1vZGVsT2JqZWN0ID0gcmVuZGVyZXItPmlzQm94TW9kZWxPYmplY3QoKSA/IHRv
UmVuZGVyQm94TW9kZWxPYmplY3QocmVuZGVyZXIpIDogMDsKKworICAgIFN0cmluZyB3aWR0aE51
bWJlclBhcnQgPSAiICIgKyBTdHJpbmc6Om51bWJlcihtb2RlbE9iamVjdCA/IGFkanVzdEZvckFi
c29sdXRlWm9vbShtb2RlbE9iamVjdC0+cGl4ZWxTbmFwcGVkT2Zmc2V0V2lkdGgoKSwgbW9kZWxP
YmplY3QpIDogYm91bmRpbmdCb3gud2lkdGgoKSk7CisgICAgbm9kZVRpdGxlLmFwcGVuZCh3aWR0
aE51bWJlclBhcnQpOworICAgIG5vZGVUaXRsZS5hcHBlbmQocHhTdHJpbmcpOworICAgIG5vZGVU
aXRsZS5hcHBlbmQodGltZXNTdHJpbmcpOworICAgIFN0cmluZyBoZWlnaHROdW1iZXJQYXJ0ID0g
U3RyaW5nOjpudW1iZXIobW9kZWxPYmplY3QgPyBhZGp1c3RGb3JBYnNvbHV0ZVpvb20obW9kZWxP
YmplY3QtPnBpeGVsU25hcHBlZE9mZnNldEhlaWdodCgpLCBtb2RlbE9iamVjdCkgOiBib3VuZGlu
Z0JveC5oZWlnaHQoKSk7CisgICAgbm9kZVRpdGxlLmFwcGVuZChoZWlnaHROdW1iZXJQYXJ0KTsK
KyAgICBub2RlVGl0bGUuYXBwZW5kKHB4U3RyaW5nKTsKKworICAgIEZvbnREZXNjcmlwdGlvbiBk
ZXNjOworICAgIHNldFVwRm9udERlc2NyaXB0aW9uKGRlc2MsIHNldHRpbmdzKTsKKyAgICBGb250
IGZvbnQgPSBGb250KGRlc2MsIDAsIDApOworICAgIGZvbnQudXBkYXRlKDApOworCisgICAgVGV4
dFJ1biBub2RlVGl0bGVSdW4obm9kZVRpdGxlLnRvU3RyaW5nKCkpOworICAgIEludFBvaW50IHRp
dGxlQmFzZVBvaW50ID0gSW50UG9pbnQoYW5jaG9yQm94LngoKSwgYW5jaG9yQm94Lm1heFkoKSAt
IDEpOworICAgIHRpdGxlQmFzZVBvaW50Lm1vdmUocmVjdEluZmxhdGVQeCwgcmVjdEluZmxhdGVQ
eCk7CisgICAgSW50UmVjdCB0aXRsZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGZvbnQuc2VsZWN0
aW9uUmVjdEZvclRleHQobm9kZVRpdGxlUnVuLCB0aXRsZUJhc2VQb2ludCwgZm9udEhlaWdodFB4
KSk7CisgICAgdGl0bGVSZWN0LmluZmxhdGUocmVjdEluZmxhdGVQeCk7CisKKyAgICAvLyBUaGUg
aW5pdGlhbCBvZmZzZXRzIG5lZWRlZCB0byBjb21wZW5zYXRlIGZvciBhIDFweC10aGljayBib3Jk
ZXIgc3Ryb2tlICh3aGljaCBpcyBub3QgYSBwYXJ0IG9mIHRoZSByZWN0YW5nbGUpLgorICAgIGlu
dCBkeCA9IC1ib3JkZXJXaWR0aFB4OworICAgIGludCBkeSA9IGJvcmRlcldpZHRoUHg7CisKKyAg
ICAvLyBJZiB0aGUgdGlwIHN0aWNrcyBiZXlvbmQgdGhlIHJpZ2h0IG9mIHZpc2libGVSZWN0LCBy
aWdodC1hbGlnbiB0aGUgdGlwIHdpdGggdGhlIHNhaWQgYm91bmRhcnkuCisgICAgaWYgKHRpdGxl
UmVjdC5tYXhYKCkgKyBkeCA+IHZpc2libGVSZWN0Lm1heFgoKSkKKyAgICAgICAgZHggPSB2aXNp
YmxlUmVjdC5tYXhYKCkgLSB0aXRsZVJlY3QubWF4WCgpOworCisgICAgLy8gSWYgdGhlIHRpcCBz
dGlja3MgYmV5b25kIHRoZSBsZWZ0IG9mIHZpc2libGVSZWN0LCBsZWZ0LWFsaWduIHRoZSB0aXAg
d2l0aCB0aGUgc2FpZCBib3VuZGFyeS4KKyAgICBpZiAodGl0bGVSZWN0LngoKSArIGR4IDwgdmlz
aWJsZVJlY3QueCgpKQorICAgICAgICBkeCA9IHZpc2libGVSZWN0LngoKSAtIHRpdGxlUmVjdC54
KCkgLSBib3JkZXJXaWR0aFB4OworCisgICAgLy8gSWYgdGhlIHRpcCBzdGlja3MgYmV5b25kIHRo
ZSBib3R0b20gb2YgdmlzaWJsZVJlY3QsIHNob3cgdGhlIHRpcCBhdCB0b3Agb2YgYm91bmRpbmcg
Ym94LgorICAgIGlmICh0aXRsZVJlY3QubWF4WSgpICsgZHkgPiB2aXNpYmxlUmVjdC5tYXhZKCkp
IHsKKyAgICAgICAgZHkgPSBhbmNob3JCb3gueSgpIC0gdGl0bGVSZWN0Lm1heFkoKSAtIGJvcmRl
cldpZHRoUHg7CisgICAgICAgIC8vIElmIHRoZSB0aXAgc3RpbGwgc3RpY2tzIGJleW9uZCB0aGUg
Ym90dG9tIG9mIHZpc2libGVSZWN0LCBib3R0b20tYWxpZ24gdGhlIHRpcCB3aXRoIHRoZSBzYWlk
IGJvdW5kYXJ5LgorICAgICAgICBpZiAodGl0bGVSZWN0Lm1heFkoKSArIGR5ID4gdmlzaWJsZVJl
Y3QubWF4WSgpKQorICAgICAgICAgICAgZHkgPSB2aXNpYmxlUmVjdC5tYXhZKCkgLSB0aXRsZVJl
Y3QubWF4WSgpOworICAgIH0KKworICAgIC8vIElmIHRoZSB0aXAgc3RpY2tzIGJleW9uZCB0aGUg
dG9wIG9mIHZpc2libGVSZWN0LCBzaG93IHRoZSB0aXAgYXQgdG9wIG9mIHZpc2libGVSZWN0Lgor
ICAgIGlmICh0aXRsZVJlY3QueSgpICsgZHkgPCB2aXNpYmxlUmVjdC55KCkpCisgICAgICAgIGR5
ID0gdmlzaWJsZVJlY3QueSgpIC0gdGl0bGVSZWN0LnkoKSArIGJvcmRlcldpZHRoUHg7CisKKyAg
ICB0aXRsZVJlY3QubW92ZShkeCwgZHkpOworCisgICAgYm9vbCBpc0Fycm93QXRUb3AgPSB0aXRs
ZVJlY3QueSgpID4gYW5jaG9yQm94LnkoKTsKKyAgICB0aXRsZVJlY3QubW92ZSgwLCB0b29sdGlw
UGFkZGluZyAqIChpc0Fycm93QXRUb3AgPyAxIDogLTEpKTsKKworICAgIHsKKyAgICAgICAgZmxv
YXQgYXJyb3dUaXBYID0gY2FsY3VsYXRlQXJyb3dUaXBYKGFuY2hvckJveCwgdGl0bGVSZWN0KTsK
KyAgICAgICAgaW50IGFycm93QmFzZVkgPSBpc0Fycm93QXRUb3AgPyB0aXRsZVJlY3QueSgpIDog
dGl0bGVSZWN0Lm1heFkoKTsKKyAgICAgICAgaW50IGFycm93T3Bwb3NpdGVZID0gaXNBcnJvd0F0
VG9wID8gdGl0bGVSZWN0Lm1heFkoKSA6IHRpdGxlUmVjdC55KCk7CisKKyAgICAgICAgRmxvYXRQ
b2ludCBwb2ludHNbOF07CisgICAgICAgIHBvaW50c1swXSA9IEZsb2F0UG9pbnQoYXJyb3dUaXBY
IC0gYXJyb3dIYWxmV2lkdGgsIGFycm93QmFzZVkpOworICAgICAgICBwb2ludHNbMV0gPSBGbG9h
dFBvaW50KGFycm93VGlwWCwgYXJyb3dCYXNlWSArIGFycm93SGVpZ2h0ICogKGlzQXJyb3dBdFRv
cCA/IC0xIDogMSkpOworICAgICAgICBwb2ludHNbMl0gPSBGbG9hdFBvaW50KGFycm93VGlwWCAr
IGFycm93SGFsZldpZHRoLCBhcnJvd0Jhc2VZKTsKKyAgICAgICAgcG9pbnRzWzNdID0gRmxvYXRQ
b2ludCh0aXRsZVJlY3QubWF4WCgpLCBhcnJvd0Jhc2VZKTsKKyAgICAgICAgcG9pbnRzWzRdID0g
RmxvYXRQb2ludCh0aXRsZVJlY3QubWF4WCgpLCBhcnJvd09wcG9zaXRlWSk7CisgICAgICAgIHBv
aW50c1s1XSA9IEZsb2F0UG9pbnQodGl0bGVSZWN0LngoKSwgYXJyb3dPcHBvc2l0ZVkpOworICAg
ICAgICBwb2ludHNbNl0gPSBGbG9hdFBvaW50KHRpdGxlUmVjdC54KCksIGFycm93QmFzZVkpOwor
ICAgICAgICBwb2ludHNbN10gPSBwb2ludHNbMF07CisKKyAgICAgICAgUGF0aCBwYXRoOworICAg
ICAgICBwYXRoLm1vdmVUbyhwb2ludHNbMF0pOworICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8
IDg7ICsraSkKKyAgICAgICAgICAgIHBhdGguYWRkTGluZVRvKHBvaW50c1tpXSk7CisKKyAgICAg
ICAgY29udGV4dC5zYXZlKCk7CisgICAgICAgIGNvbnRleHQudHJhbnNsYXRlKDAuNWYsIDAuNWYp
OworICAgICAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKHB4QW5kQm9yZGVyQ29sb3IsIENvbG9y
U3BhY2VEZXZpY2VSR0IpOworICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihiYWNrZ3JvdW5k
Q29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgICAgICBjb250ZXh0LnNldFN0cm9rZVRo
aWNrbmVzcyhib3JkZXJXaWR0aFB4KTsKKyAgICAgICAgY29udGV4dC5maWxsUGF0aChwYXRoKTsK
KyAgICAgICAgY29udGV4dC5zdHJva2VQYXRoKHBhdGgpOworICAgICAgICBjb250ZXh0LnJlc3Rv
cmUoKTsKKyAgICB9CisKKyAgICBpbnQgY3VycmVudFBvcyA9IDA7CisgICAgY3VycmVudFBvcyA9
IGRyYXdTdWJzdHJpbmcobm9kZVRpdGxlUnVuLCBjdXJyZW50UG9zLCB0YWdOYW1lTGVuZ3RoLCB0
YWdDb2xvciwgZm9udCwgY29udGV4dCwgdGl0bGVSZWN0KTsKKyAgICBpZiAoaWRTdHJpbmdMZW5n
dGgpCisgICAgICAgIGN1cnJlbnRQb3MgPSBkcmF3U3Vic3RyaW5nKG5vZGVUaXRsZVJ1biwgY3Vy
cmVudFBvcywgaWRTdHJpbmdMZW5ndGgsIGF0dHJDb2xvciwgZm9udCwgY29udGV4dCwgdGl0bGVS
ZWN0KTsKKyAgICBpZiAoY2xhc3Nlc1N0cmluZ0xlbmd0aCkKKyAgICAgICAgY3VycmVudFBvcyA9
IGRyYXdTdWJzdHJpbmcobm9kZVRpdGxlUnVuLCBjdXJyZW50UG9zLCBjbGFzc2VzU3RyaW5nTGVu
Z3RoLCBhdHRyQ29sb3IsIGZvbnQsIGNvbnRleHQsIHRpdGxlUmVjdCk7CisgICAgY3VycmVudFBv
cyA9IGRyYXdTdWJzdHJpbmcobm9kZVRpdGxlUnVuLCBjdXJyZW50UG9zLCB3aWR0aE51bWJlclBh
cnQubGVuZ3RoKCksIG5vcm1hbENvbG9yLCBmb250LCBjb250ZXh0LCB0aXRsZVJlY3QpOworICAg
IGN1cnJlbnRQb3MgPSBkcmF3U3Vic3RyaW5nKG5vZGVUaXRsZVJ1biwgY3VycmVudFBvcywgcHhT
dHJpbmcubGVuZ3RoKCkgKyB0aW1lc1N0cmluZy5sZW5ndGgoKSwgcHhBbmRCb3JkZXJDb2xvciwg
Zm9udCwgY29udGV4dCwgdGl0bGVSZWN0KTsKKyAgICBjdXJyZW50UG9zID0gZHJhd1N1YnN0cmlu
Zyhub2RlVGl0bGVSdW4sIGN1cnJlbnRQb3MsIGhlaWdodE51bWJlclBhcnQubGVuZ3RoKCksIG5v
cm1hbENvbG9yLCBmb250LCBjb250ZXh0LCB0aXRsZVJlY3QpOworICAgIGRyYXdTdWJzdHJpbmco
bm9kZVRpdGxlUnVuLCBjdXJyZW50UG9zLCBweFN0cmluZy5sZW5ndGgoKSwgcHhBbmRCb3JkZXJD
b2xvciwgZm9udCwgY29udGV4dCwgdGl0bGVSZWN0KTsKK30KKworc3RhdGljIHZvaWQgY29udGVu
dHNRdWFkVG9QYWdlKGNvbnN0IEZyYW1lVmlldyogbWFpblZpZXcsIGNvbnN0IEZyYW1lVmlldyog
dmlldywgRmxvYXRRdWFkJiBxdWFkKQoreworICAgIHF1YWQuc2V0UDEodmlldy0+Y29udGVudHNU
b1Jvb3RWaWV3KHJvdW5kZWRJbnRQb2ludChxdWFkLnAxKCkpKSk7CisgICAgcXVhZC5zZXRQMih2
aWV3LT5jb250ZW50c1RvUm9vdFZpZXcocm91bmRlZEludFBvaW50KHF1YWQucDIoKSkpKTsKKyAg
ICBxdWFkLnNldFAzKHZpZXctPmNvbnRlbnRzVG9Sb290Vmlldyhyb3VuZGVkSW50UG9pbnQocXVh
ZC5wMygpKSkpOworICAgIHF1YWQuc2V0UDQodmlldy0+Y29udGVudHNUb1Jvb3RWaWV3KHJvdW5k
ZWRJbnRQb2ludChxdWFkLnA0KCkpKSk7CisgICAgcXVhZCArPSBtYWluVmlldy0+c2Nyb2xsT2Zm
c2V0KCk7Cit9CisKK3N0YXRpYyB2b2lkIGdldE9yRHJhd05vZGVIaWdobGlnaHQoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBOb2RlKiBub2RlLCBjb25zdCBIaWdobGlnaHRDb25maWcmIGhpZ2hs
aWdodENvbmZpZywgSGlnaGxpZ2h0KiBoaWdobGlnaHQpCit7CisgICAgUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7CisgICAgRnJhbWUqIGNvbnRhaW5pbmdGcmFtZSA9
IG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCk7CisKKyAgICBpZiAoIXJlbmRlcmVyIHx8ICFjb250
YWluaW5nRnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIEZyYW1lVmlldyogY29udGFpbmlu
Z1ZpZXcgPSBjb250YWluaW5nRnJhbWUtPnZpZXcoKTsKKyAgICBGcmFtZVZpZXcqIG1haW5WaWV3
ID0gY29udGFpbmluZ0ZyYW1lLT5wYWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCk7CisgICAgSW50
UmVjdCBib3VuZGluZ0JveCA9IHBpeGVsU25hcHBlZEludFJlY3QoY29udGFpbmluZ1ZpZXctPmNv
bnRlbnRzVG9Sb290VmlldyhyZW5kZXJlci0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoKSkpOwor
ICAgIGJvdW5kaW5nQm94Lm1vdmUobWFpblZpZXctPnNjcm9sbE9mZnNldCgpKTsKKyAgICBJbnRS
ZWN0IHRpdGxlQW5jaG9yQm94ID0gYm91bmRpbmdCb3g7CisKKyAgICBGbG9hdFJlY3QgdmlzaWJs
ZVJlY3QgPSBtYWluVmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7CisgICAgLy8gRG9uJ3QgdHJh
bnNsYXRlIHRoZSBjb250ZXh0IGlmIHRoZSBmcmFtZSBpcyByZW5kZXJlZCBpbiBwYWdlIGNvb3Jk
aW5hdGVzLgorICAgIGlmIChjb250ZXh0ICYmICFtYWluVmlldy0+ZGVsZWdhdGVzU2Nyb2xsaW5n
KCkpCisgICAgICAgIGNvbnRleHQtPnRyYW5zbGF0ZSgtdmlzaWJsZVJlY3QueCgpLCAtdmlzaWJs
ZVJlY3QueSgpKTsKKworICAgIC8vIFJlbmRlclNWR1Jvb3Qgc2hvdWxkIGJlIGhpZ2hsaWdodGVk
IHRocm91Z2ggdGhlIGlzQm94KCkgY29kZSBwYXRoLCBhbGwgb3RoZXIgU1ZHIGVsZW1lbnRzIHNo
b3VsZCBqdXN0IGR1bXAgdGhlaXIgYWJzb2x1dGVRdWFkcygpLgorI2lmIEVOQUJMRShTVkcpCisg
ICAgYm9vbCBpc1NWR1JlbmRlcmVyID0gcmVuZGVyZXItPm5vZGUoKSAmJiByZW5kZXJlci0+bm9k
ZSgpLT5pc1NWR0VsZW1lbnQoKSAmJiAhcmVuZGVyZXItPmlzU1ZHUm9vdCgpOworI2Vsc2UKKyAg
ICBib29sIGlzU1ZHUmVuZGVyZXIgPSBmYWxzZTsKKyNlbmRpZgorCisgICAgaWYgKGlzU1ZHUmVu
ZGVyZXIpIHsKKyAgICAgICAgaGlnaGxpZ2h0LT50eXBlID0gSGlnaGxpZ2h0VHlwZVJlY3RzOwor
ICAgICAgICByZW5kZXJlci0+YWJzb2x1dGVRdWFkcyhoaWdobGlnaHQtPnF1YWRzKTsKKyAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBoaWdobGlnaHQtPnF1YWRzLnNpemUoKTsgKytpKQor
ICAgICAgICAgICAgY29udGVudHNRdWFkVG9QYWdlKG1haW5WaWV3LCBjb250YWluaW5nVmlldywg
aGlnaGxpZ2h0LT5xdWFkc1tpXSk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgICAg
ICBkcmF3SGlnaGxpZ2h0Rm9yU1ZHUmVuZGVyZXIoKmNvbnRleHQsIGhpZ2hsaWdodC0+cXVhZHMs
IGhpZ2hsaWdodENvbmZpZyk7CisgICAgfSBlbHNlIGlmIChyZW5kZXJlci0+aXNCb3goKSB8fCBy
ZW5kZXJlci0+aXNSZW5kZXJJbmxpbmUoKSkgeworICAgICAgICBMYXlvdXRSZWN0IGNvbnRlbnRC
b3g7CisgICAgICAgIExheW91dFJlY3QgcGFkZGluZ0JveDsKKyAgICAgICAgTGF5b3V0UmVjdCBi
b3JkZXJCb3g7CisgICAgICAgIExheW91dFJlY3QgbWFyZ2luQm94OworCisgICAgICAgIGlmIChy
ZW5kZXJlci0+aXNCb3goKSkgeworICAgICAgICAgICAgUmVuZGVyQm94KiByZW5kZXJCb3ggPSB0
b1JlbmRlckJveChyZW5kZXJlcik7CisKKyAgICAgICAgICAgIC8vIFJlbmRlckJveCByZXR1cm5z
IHRoZSAicHVyZSIgY29udGVudCBhcmVhIGJveCwgZXhjbHVzaXZlIG9mIHRoZSBzY3JvbGxiYXJz
IChpZiBwcmVzZW50KSwgd2hpY2ggYWxzbyBjb3VudCB0b3dhcmRzIHRoZSBjb250ZW50IGFyZWEg
aW4gQ1NTLgorICAgICAgICAgICAgY29udGVudEJveCA9IHJlbmRlckJveC0+Y29udGVudEJveFJl
Y3QoKTsKKyAgICAgICAgICAgIGNvbnRlbnRCb3guc2V0V2lkdGgoY29udGVudEJveC53aWR0aCgp
ICsgcmVuZGVyQm94LT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCkpOworICAgICAgICAgICAgY29u
dGVudEJveC5zZXRIZWlnaHQoY29udGVudEJveC5oZWlnaHQoKSArIHJlbmRlckJveC0+aG9yaXpv
bnRhbFNjcm9sbGJhckhlaWdodCgpKTsKKworICAgICAgICAgICAgcGFkZGluZ0JveCA9IExheW91
dFJlY3QoY29udGVudEJveC54KCkgLSByZW5kZXJCb3gtPnBhZGRpbmdMZWZ0KCksIGNvbnRlbnRC
b3gueSgpIC0gcmVuZGVyQm94LT5wYWRkaW5nVG9wKCksCisgICAgICAgICAgICAgICAgICAgIGNv
bnRlbnRCb3gud2lkdGgoKSArIHJlbmRlckJveC0+cGFkZGluZ0xlZnQoKSArIHJlbmRlckJveC0+
cGFkZGluZ1JpZ2h0KCksIGNvbnRlbnRCb3guaGVpZ2h0KCkgKyByZW5kZXJCb3gtPnBhZGRpbmdU
b3AoKSArIHJlbmRlckJveC0+cGFkZGluZ0JvdHRvbSgpKTsKKyAgICAgICAgICAgIGJvcmRlckJv
eCA9IExheW91dFJlY3QocGFkZGluZ0JveC54KCkgLSByZW5kZXJCb3gtPmJvcmRlckxlZnQoKSwg
cGFkZGluZ0JveC55KCkgLSByZW5kZXJCb3gtPmJvcmRlclRvcCgpLAorICAgICAgICAgICAgICAg
ICAgICBwYWRkaW5nQm94LndpZHRoKCkgKyByZW5kZXJCb3gtPmJvcmRlckxlZnQoKSArIHJlbmRl
ckJveC0+Ym9yZGVyUmlnaHQoKSwgcGFkZGluZ0JveC5oZWlnaHQoKSArIHJlbmRlckJveC0+Ym9y
ZGVyVG9wKCkgKyByZW5kZXJCb3gtPmJvcmRlckJvdHRvbSgpKTsKKyAgICAgICAgICAgIG1hcmdp
bkJveCA9IExheW91dFJlY3QoYm9yZGVyQm94LngoKSAtIHJlbmRlckJveC0+bWFyZ2luTGVmdCgp
LCBib3JkZXJCb3gueSgpIC0gcmVuZGVyQm94LT5tYXJnaW5Ub3AoKSwKKyAgICAgICAgICAgICAg
ICAgICAgYm9yZGVyQm94LndpZHRoKCkgKyByZW5kZXJCb3gtPm1hcmdpbldpZHRoKCksIGJvcmRl
ckJveC5oZWlnaHQoKSArIHJlbmRlckJveC0+bWFyZ2luSGVpZ2h0KCkpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgUmVuZGVySW5saW5lKiByZW5kZXJJbmxpbmUgPSB0b1JlbmRlcklu
bGluZShyZW5kZXJlcik7CisKKyAgICAgICAgICAgIC8vIFJlbmRlcklubGluZSdzIGJvdW5kaW5n
IGJveCBpbmNsdWRlcyBwYWRkaW5ncyBhbmQgYm9yZGVycywgZXhjbHVkZXMgbWFyZ2lucy4KKyAg
ICAgICAgICAgIGJvcmRlckJveCA9IHJlbmRlcklubGluZS0+bGluZXNCb3VuZGluZ0JveCgpOwor
ICAgICAgICAgICAgcGFkZGluZ0JveCA9IExheW91dFJlY3QoYm9yZGVyQm94LngoKSArIHJlbmRl
cklubGluZS0+Ym9yZGVyTGVmdCgpLCBib3JkZXJCb3gueSgpICsgcmVuZGVySW5saW5lLT5ib3Jk
ZXJUb3AoKSwKKyAgICAgICAgICAgICAgICAgICAgYm9yZGVyQm94LndpZHRoKCkgLSByZW5kZXJJ
bmxpbmUtPmJvcmRlckxlZnQoKSAtIHJlbmRlcklubGluZS0+Ym9yZGVyUmlnaHQoKSwgYm9yZGVy
Qm94LmhlaWdodCgpIC0gcmVuZGVySW5saW5lLT5ib3JkZXJUb3AoKSAtIHJlbmRlcklubGluZS0+
Ym9yZGVyQm90dG9tKCkpOworICAgICAgICAgICAgY29udGVudEJveCA9IExheW91dFJlY3QocGFk
ZGluZ0JveC54KCkgKyByZW5kZXJJbmxpbmUtPnBhZGRpbmdMZWZ0KCksIHBhZGRpbmdCb3gueSgp
ICsgcmVuZGVySW5saW5lLT5wYWRkaW5nVG9wKCksCisgICAgICAgICAgICAgICAgICAgIHBhZGRp
bmdCb3gud2lkdGgoKSAtIHJlbmRlcklubGluZS0+cGFkZGluZ0xlZnQoKSAtIHJlbmRlcklubGlu
ZS0+cGFkZGluZ1JpZ2h0KCksIHBhZGRpbmdCb3guaGVpZ2h0KCkgLSByZW5kZXJJbmxpbmUtPnBh
ZGRpbmdUb3AoKSAtIHJlbmRlcklubGluZS0+cGFkZGluZ0JvdHRvbSgpKTsKKyAgICAgICAgICAg
IC8vIElnbm9yZSBtYXJnaW5Ub3AgYW5kIG1hcmdpbkJvdHRvbSBmb3IgaW5saW5lcy4KKyAgICAg
ICAgICAgIG1hcmdpbkJveCA9IExheW91dFJlY3QoYm9yZGVyQm94LngoKSAtIHJlbmRlcklubGlu
ZS0+bWFyZ2luTGVmdCgpLCBib3JkZXJCb3gueSgpLAorICAgICAgICAgICAgICAgICAgICBib3Jk
ZXJCb3gud2lkdGgoKSArIHJlbmRlcklubGluZS0+bWFyZ2luV2lkdGgoKSwgYm9yZGVyQm94Lmhl
aWdodCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIEZsb2F0UXVhZCBhYnNDb250ZW50UXVhZCA9
IHJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChjb250ZW50Qm94KSk7Cisg
ICAgICAgIEZsb2F0UXVhZCBhYnNQYWRkaW5nUXVhZCA9IHJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1
dGVRdWFkKEZsb2F0UmVjdChwYWRkaW5nQm94KSk7CisgICAgICAgIEZsb2F0UXVhZCBhYnNCb3Jk
ZXJRdWFkID0gcmVuZGVyZXItPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KGJvcmRlckJv
eCkpOworICAgICAgICBGbG9hdFF1YWQgYWJzTWFyZ2luUXVhZCA9IHJlbmRlcmVyLT5sb2NhbFRv
QWJzb2x1dGVRdWFkKEZsb2F0UmVjdChtYXJnaW5Cb3gpKTsKKworICAgICAgICBjb250ZW50c1F1
YWRUb1BhZ2UobWFpblZpZXcsIGNvbnRhaW5pbmdWaWV3LCBhYnNDb250ZW50UXVhZCk7CisgICAg
ICAgIGNvbnRlbnRzUXVhZFRvUGFnZShtYWluVmlldywgY29udGFpbmluZ1ZpZXcsIGFic1BhZGRp
bmdRdWFkKTsKKyAgICAgICAgY29udGVudHNRdWFkVG9QYWdlKG1haW5WaWV3LCBjb250YWluaW5n
VmlldywgYWJzQm9yZGVyUXVhZCk7CisgICAgICAgIGNvbnRlbnRzUXVhZFRvUGFnZShtYWluVmll
dywgY29udGFpbmluZ1ZpZXcsIGFic01hcmdpblF1YWQpOworCisgICAgICAgIHRpdGxlQW5jaG9y
Qm94ID0gYWJzTWFyZ2luUXVhZC5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOworCisgICAgICAgIGhp
Z2hsaWdodC0+dHlwZSA9IEhpZ2hsaWdodFR5cGVOb2RlOworICAgICAgICBoaWdobGlnaHQtPnF1
YWRzLmFwcGVuZChhYnNNYXJnaW5RdWFkKTsKKyAgICAgICAgaGlnaGxpZ2h0LT5xdWFkcy5hcHBl
bmQoYWJzQm9yZGVyUXVhZCk7CisgICAgICAgIGhpZ2hsaWdodC0+cXVhZHMuYXBwZW5kKGFic1Bh
ZGRpbmdRdWFkKTsKKyAgICAgICAgaGlnaGxpZ2h0LT5xdWFkcy5hcHBlbmQoYWJzQ29udGVudFF1
YWQpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICAgICAgZHJhd0hpZ2hsaWdodEZv
ckJveCgqY29udGV4dCwgYWJzQ29udGVudFF1YWQsIGFic1BhZGRpbmdRdWFkLCBhYnNCb3JkZXJR
dWFkLCBhYnNNYXJnaW5RdWFkLCBoaWdobGlnaHRDb25maWcpOworICAgIH0KKworICAgIC8vIERy
YXcgbm9kZSB0aXRsZSBpZiBuZWNlc3NhcnkuCisKKyAgICBpZiAoIW5vZGUtPmlzRWxlbWVudE5v
ZGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGNvbnRleHQgJiYgaGlnaGxpZ2h0Q29u
ZmlnLnNob3dJbmZvKQorICAgICAgICBkcmF3RWxlbWVudFRpdGxlKCpjb250ZXh0LCBub2RlLCBy
ZW5kZXJlciwgcGl4ZWxTbmFwcGVkSW50UmVjdChib3VuZGluZ0JveCksIHBpeGVsU25hcHBlZElu
dFJlY3QodGl0bGVBbmNob3JCb3gpLCB2aXNpYmxlUmVjdCwgY29udGFpbmluZ0ZyYW1lLT5zZXR0
aW5ncygpKTsKK30KKworc3RhdGljIHZvaWQgZ2V0T3JEcmF3UmVjdEhpZ2hsaWdodChHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIFBhZ2UqIHBhZ2UsIEludFJlY3QqIHJlY3QsIGNvbnN0IEhpZ2hs
aWdodENvbmZpZyYgaGlnaGxpZ2h0Q29uZmlnLCBIaWdobGlnaHQgKmhpZ2hsaWdodCkKK3sKKyAg
ICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIEZsb2F0UmVjdCBoaWdobGlnaHRS
ZWN0KCpyZWN0KTsKKworICAgIGhpZ2hsaWdodC0+dHlwZSA9IEhpZ2hsaWdodFR5cGVSZWN0czsK
KyAgICBoaWdobGlnaHQtPnF1YWRzLmFwcGVuZChoaWdobGlnaHRSZWN0KTsKKworICAgIGlmIChj
b250ZXh0KSB7CisgICAgICAgIEZyYW1lVmlldyogdmlldyA9IHBhZ2UtPm1haW5GcmFtZSgpLT52
aWV3KCk7CisgICAgICAgIGlmICghdmlldy0+ZGVsZWdhdGVzU2Nyb2xsaW5nKCkpIHsKKyAgICAg
ICAgICAgIEZsb2F0UmVjdCB2aXNpYmxlUmVjdCA9IHZpZXctPnZpc2libGVDb250ZW50UmVjdCgp
OworICAgICAgICAgICAgY29udGV4dC0+dHJhbnNsYXRlKC12aXNpYmxlUmVjdC54KCksIC12aXNp
YmxlUmVjdC55KCkpOworICAgICAgICB9CisKKyAgICAgICAgZHJhd091dGxpbmVkUXVhZCgqY29u
dGV4dCwgaGlnaGxpZ2h0UmVjdCwgaGlnaGxpZ2h0Q29uZmlnLmNvbnRlbnQsIGhpZ2hsaWdodENv
bmZpZy5jb250ZW50T3V0bGluZSk7CisgICAgfQorfQorCit9IC8vIGFub255bW91cyBuYW1lc3Bh
Y2UKKworSW5zcGVjdG9yT3ZlcmxheTo6SW5zcGVjdG9yT3ZlcmxheShQYWdlKiBwYWdlLCBJbnNw
ZWN0b3JDbGllbnQqIGNsaWVudCkKKyAgICA6IG1fcGFnZShwYWdlKQorICAgICwgbV9jbGllbnQo
Y2xpZW50KQoreworfQorCit2b2lkIEluc3BlY3Rvck92ZXJsYXk6OnBhaW50KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkKK3sKKyAgICBkcmF3UGF1c2VkSW5EZWJ1Z2dlcihjb250ZXh0KTsKKyAg
ICBkcmF3Tm9kZUhpZ2hsaWdodChjb250ZXh0KTsKKyAgICBkcmF3UmVjdEhpZ2hsaWdodChjb250
ZXh0KTsKK30KKwordm9pZCBJbnNwZWN0b3JPdmVybGF5OjpkcmF3T3V0bGluZShHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xv
cikKK3sKKyAgICBGbG9hdFJlY3Qgb3V0bGluZVJlY3QgPSByZWN0OworICAgIGRyYXdPdXRsaW5l
ZFF1YWQoY29udGV4dCwgb3V0bGluZVJlY3QsIENvbG9yKCksIGNvbG9yKTsKK30KKwordm9pZCBJ
bnNwZWN0b3JPdmVybGF5OjpnZXRIaWdobGlnaHQoSGlnaGxpZ2h0KiBoaWdobGlnaHQpIGNvbnN0
Cit7CisgICAgaWYgKCFtX2hpZ2hsaWdodE5vZGUgJiYgIW1faGlnaGxpZ2h0UmVjdCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaGlnaGxpZ2h0LT50eXBlID0gSGlnaGxpZ2h0VHlwZVJlY3RzOwor
ICAgIGlmIChtX2hpZ2hsaWdodE5vZGUpIHsKKyAgICAgICAgaGlnaGxpZ2h0LT5zZXRDb2xvcnMo
bV9ub2RlSGlnaGxpZ2h0Q29uZmlnKTsKKyAgICAgICAgZ2V0T3JEcmF3Tm9kZUhpZ2hsaWdodCgw
LCBtX2hpZ2hsaWdodE5vZGUuZ2V0KCksIG1fbm9kZUhpZ2hsaWdodENvbmZpZywgaGlnaGxpZ2h0
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBoaWdobGlnaHQtPnNldENvbG9ycyhtX3JlY3RIaWdo
bGlnaHRDb25maWcpOworICAgICAgICBnZXRPckRyYXdSZWN0SGlnaGxpZ2h0KDAsIG1fcGFnZSwg
bV9oaWdobGlnaHRSZWN0LmdldCgpLCBtX3JlY3RIaWdobGlnaHRDb25maWcsIGhpZ2hsaWdodCk7
CisgICAgfQorfQorCit2b2lkIEluc3BlY3Rvck92ZXJsYXk6OnNldFBhdXNlZEluRGVidWdnZXJN
ZXNzYWdlKGNvbnN0IFN0cmluZyogbWVzc2FnZSkKK3sKKyAgICBtX3BhdXNlZEluRGVidWdnZXJN
ZXNzYWdlID0gbWVzc2FnZSA/ICptZXNzYWdlIDogU3RyaW5nKCk7CisgICAgdXBkYXRlKCk7Cit9
CisKK3ZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6aGlkZUhpZ2hsaWdodCgpCit7CisgICAgbV9oaWdo
bGlnaHROb2RlLmNsZWFyKCk7CisgICAgbV9oaWdobGlnaHRSZWN0LmNsZWFyKCk7CisgICAgdXBk
YXRlKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6aGlnaGxpZ2h0Tm9kZShOb2RlKiBu
b2RlLCBjb25zdCBIaWdobGlnaHRDb25maWcmIGhpZ2hsaWdodENvbmZpZykKK3sKKyAgICBtX25v
ZGVIaWdobGlnaHRDb25maWcgPSBoaWdobGlnaHRDb25maWc7CisgICAgbV9oaWdobGlnaHROb2Rl
ID0gbm9kZTsKKyAgICB1cGRhdGUoKTsKK30KKwordm9pZCBJbnNwZWN0b3JPdmVybGF5OjpoaWdo
bGlnaHRSZWN0KFBhc3NPd25QdHI8SW50UmVjdD4gcmVjdCwgY29uc3QgSGlnaGxpZ2h0Q29uZmln
JiBoaWdobGlnaHRDb25maWcpCit7CisgICAgbV9yZWN0SGlnaGxpZ2h0Q29uZmlnID0gaGlnaGxp
Z2h0Q29uZmlnOworICAgIG1faGlnaGxpZ2h0UmVjdCA9IHJlY3Q7CisgICAgdXBkYXRlKCk7Cit9
CisKK05vZGUqIEluc3BlY3Rvck92ZXJsYXk6OmhpZ2hsaWdodGVkTm9kZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1faGlnaGxpZ2h0Tm9kZS5nZXQoKTsKK30KKwordm9pZCBJbnNwZWN0b3JPdmVy
bGF5Ojp1cGRhdGUoKQoreworICAgIGlmIChtX2hpZ2hsaWdodE5vZGUgfHwgbV9oaWdobGlnaHRS
ZWN0IHx8ICFtX3BhdXNlZEluRGVidWdnZXJNZXNzYWdlLmlzTnVsbCgpKQorICAgICAgICBtX2Ns
aWVudC0+aGlnaGxpZ2h0KCk7CisgICAgZWxzZQorICAgICAgICBtX2NsaWVudC0+aGlkZUhpZ2hs
aWdodCgpOworfQorCit2b2lkIEluc3BlY3Rvck92ZXJsYXk6OmRyYXdOb2RlSGlnaGxpZ2h0KEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBpZiAoIW1faGlnaGxpZ2h0Tm9kZSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgSGlnaGxpZ2h0IGhpZ2hsaWdodDsKKyAgICBnZXRPckRyYXdO
b2RlSGlnaGxpZ2h0KCZjb250ZXh0LCBtX2hpZ2hsaWdodE5vZGUuZ2V0KCksIG1fbm9kZUhpZ2hs
aWdodENvbmZpZywgJmhpZ2hsaWdodCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6ZHJh
d1JlY3RIaWdobGlnaHQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQoreworICAgIGlmICghbV9o
aWdobGlnaHRSZWN0KQorICAgICAgICByZXR1cm47CisKKyAgICBIaWdobGlnaHQgaGlnaGxpZ2h0
OworICAgIGdldE9yRHJhd1JlY3RIaWdobGlnaHQoJmNvbnRleHQsIG1fcGFnZSwgbV9oaWdobGln
aHRSZWN0LmdldCgpLCBtX3JlY3RIaWdobGlnaHRDb25maWcsICZoaWdobGlnaHQpOworfQorCit2
b2lkIEluc3BlY3Rvck92ZXJsYXk6OmRyYXdQYXVzZWRJbkRlYnVnZ2VyKEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkKK3sKKyAgICBpZiAobV9wYXVzZWRJbkRlYnVnZ2VyTWVzc2FnZS5pc051bGwo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChDb2xvciwgYmFj
a2dyb3VuZENvbG9yLCAoMCwgMCwgMCwgMzEpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKENv
bG9yLCB0ZXh0QmFja2dyb3VuZENvbG9yLCAoMjU1LCAyNTUsIDE5NCkpOworICAgIERFRklORV9T
VEFUSUNfTE9DQUwoQ29sb3IsIGJvcmRlckNvbG9yLCAoMTI4LCAxMjgsIDEyOCkpOworCisgICAg
RnJhbWUqIGZyYW1lID0gbV9wYWdlLT5tYWluRnJhbWUoKTsKKyAgICBTZXR0aW5ncyogc2V0dGlu
Z3MgPSBmcmFtZS0+c2V0dGluZ3MoKTsKKyAgICBJbnRSZWN0IHZpc2libGVSZWN0ID0gSW50UmVj
dChJbnRQb2ludCgpLCBmcmFtZS0+dmlldygpLT52aXNpYmxlU2l6ZSgpKTsKKworICAgIGNvbnRl
eHQuc2V0RmlsbENvbG9yKGJhY2tncm91bmRDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7Cisg
ICAgY29udGV4dC5maWxsUmVjdCh2aXNpYmxlUmVjdCk7CisKKyAgICBGb250RGVzY3JpcHRpb24g
ZGVzYzsKKyAgICBzZXRVcEZvbnREZXNjcmlwdGlvbihkZXNjLCBzZXR0aW5ncyk7CisgICAgRm9u
dCBmb250ID0gRm9udChkZXNjLCAwLCAwKTsKKyAgICBmb250LnVwZGF0ZSgwKTsKKworICAgIFRl
eHRSdW4gdGV4dFJ1bihtX3BhdXNlZEluRGVidWdnZXJNZXNzYWdlKTsKKyAgICBJbnRSZWN0IHRp
dGxlUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoZm9udC5zZWxlY3Rpb25SZWN0Rm9yVGV4dCh0ZXh0
UnVuLCBJbnRQb2ludCgpLCBmb250SGVpZ2h0UHgpKTsKKyAgICB0aXRsZVJlY3QuaW5mbGF0ZShy
ZWN0SW5mbGF0ZVB4KTsKKyAgICB0aXRsZVJlY3Quc2V0TG9jYXRpb24oSW50UG9pbnQodmlzaWJs
ZVJlY3Qud2lkdGgoKSAvIDIgLSB0aXRsZVJlY3Qud2lkdGgoKSAvIDIsIDApKTsKKworICAgIGNv
bnRleHQuc2V0RmlsbENvbG9yKHRleHRCYWNrZ3JvdW5kQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VS
R0IpOworICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IoYm9yZGVyQ29sb3IsIENvbG9yU3BhY2VE
ZXZpY2VSR0IpOworICAgIGNvbnRleHQuZHJhd1JlY3QodGl0bGVSZWN0KTsKKyAgICBkcmF3U3Vi
c3RyaW5nKHRleHRSdW4sIDAsIG1fcGF1c2VkSW5EZWJ1Z2dlck1lc3NhZ2UubGVuZ3RoKCksIENv
bG9yOjpibGFjaywgZm9udCwgY29udGV4dCwgdGl0bGVSZWN0KTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmggYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFjMjJmZjFjM2M2ZTcz
ZDUxZjY2YjdhZWVjMWY5YmJlMjIwZjhkYzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5oCkBAIC0wLDAgKzEsMTI0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRl
ciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAq
ICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBJbnNwZWN0b3JPdmVybGF5X2gKKyNkZWZpbmUgSW5zcGVjdG9yT3ZlcmxheV9oCisKKyNp
bmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgorI2luY2x1ZGUgIkxheW91
dFR5cGVzLmgiCisjaW5jbHVkZSAiTm9kZS5oIgorCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDb2xv
cjsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKK2NsYXNzIEluc3BlY3RvckNsaWVudDsKK2NsYXNz
IEludFJlY3Q7CitjbGFzcyBOb2RlOworY2xhc3MgUGFnZTsKKworc3RydWN0IEhpZ2hsaWdodENv
bmZpZyB7CisgICAgQ29sb3IgY29udGVudDsKKyAgICBDb2xvciBjb250ZW50T3V0bGluZTsKKyAg
ICBDb2xvciBwYWRkaW5nOworICAgIENvbG9yIGJvcmRlcjsKKyAgICBDb2xvciBtYXJnaW47Cisg
ICAgYm9vbCBzaG93SW5mbzsKK307CisKK2VudW0gSGlnaGxpZ2h0VHlwZSB7CisgICAgSGlnaGxp
Z2h0VHlwZU5vZGUsCisgICAgSGlnaGxpZ2h0VHlwZVJlY3RzLAorfTsKKworc3RydWN0IEhpZ2hs
aWdodCB7CisgICAgdm9pZCBzZXRDb2xvcnMoY29uc3QgSGlnaGxpZ2h0Q29uZmlnJiBoaWdobGln
aHRDb25maWcpCisgICAgeworICAgICAgICBjb250ZW50Q29sb3IgPSBoaWdobGlnaHRDb25maWcu
Y29udGVudDsKKyAgICAgICAgcGFkZGluZ0NvbG9yID0gaGlnaGxpZ2h0Q29uZmlnLnBhZGRpbmc7
CisgICAgICAgIGJvcmRlckNvbG9yID0gaGlnaGxpZ2h0Q29uZmlnLmJvcmRlcjsKKyAgICAgICAg
bWFyZ2luQ29sb3IgPSBoaWdobGlnaHRDb25maWcubWFyZ2luOworICAgIH0KKworICAgIENvbG9y
IGNvbnRlbnRDb2xvcjsKKyAgICBDb2xvciBwYWRkaW5nQ29sb3I7CisgICAgQ29sb3IgYm9yZGVy
Q29sb3I7CisgICAgQ29sb3IgbWFyZ2luQ29sb3I7CisKKyAgICAvLyBXaGVuIHRoZSB0eXBlIGlz
IE5vZGUsIHRoZXJlIGFyZSA0IHF1YWRzIChtYXJnaW4sIGJvcmRlciwgcGFkZGluZywgY29udGVu
dCkuCisgICAgLy8gV2hlbiB0aGUgdHlwZSBpcyBSZWN0cywgdGhpcyBpcyBqdXN0IGEgbGlzdCBv
ZiBxdWFkcy4KKyAgICBIaWdobGlnaHRUeXBlIHR5cGU7CisgICAgVmVjdG9yPEZsb2F0UXVhZD4g
cXVhZHM7Cit9OworCitjbGFzcyBJbnNwZWN0b3JPdmVybGF5IHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUGFzc093blB0cjxJbnNwZWN0b3JPdmVybGF5PiBjcmVhdGUoUGFnZSogcGFnZSwgSW5zcGVj
dG9yQ2xpZW50KiBjbGllbnQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IElu
c3BlY3Rvck92ZXJsYXkocGFnZSwgY2xpZW50KSk7CisgICAgfQorCisgICAgdm9pZCBwYWludChH
cmFwaGljc0NvbnRleHQmKTsKKyAgICB2b2lkIGRyYXdPdXRsaW5lKEdyYXBoaWNzQ29udGV4dCYs
IGNvbnN0IExheW91dFJlY3QmLCBjb25zdCBDb2xvciYpOworICAgIHZvaWQgZ2V0SGlnaGxpZ2h0
KEhpZ2hsaWdodCopIGNvbnN0OworCisgICAgdm9pZCBzZXRQYXVzZWRJbkRlYnVnZ2VyTWVzc2Fn
ZShjb25zdCBTdHJpbmcqKTsKKworICAgIHZvaWQgaGlkZUhpZ2hsaWdodCgpOworICAgIHZvaWQg
aGlnaGxpZ2h0Tm9kZShOb2RlKiwgY29uc3QgSGlnaGxpZ2h0Q29uZmlnJik7CisgICAgdm9pZCBo
aWdobGlnaHRSZWN0KFBhc3NPd25QdHI8SW50UmVjdD4sIGNvbnN0IEhpZ2hsaWdodENvbmZpZyYp
OworCisgICAgTm9kZSogaGlnaGxpZ2h0ZWROb2RlKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAg
SW5zcGVjdG9yT3ZlcmxheShQYWdlKiwgSW5zcGVjdG9yQ2xpZW50Kik7CisKKyAgICB2b2lkIHVw
ZGF0ZSgpOworICAgIHZvaWQgZHJhd05vZGVIaWdobGlnaHQoR3JhcGhpY3NDb250ZXh0Jik7Cisg
ICAgdm9pZCBkcmF3UmVjdEhpZ2hsaWdodChHcmFwaGljc0NvbnRleHQmKTsKKyAgICB2b2lkIGRy
YXdQYXVzZWRJbkRlYnVnZ2VyKEdyYXBoaWNzQ29udGV4dCYpOworCisgICAgUGFnZSogbV9wYWdl
OworICAgIEluc3BlY3RvckNsaWVudCogbV9jbGllbnQ7CisgICAgU3RyaW5nIG1fcGF1c2VkSW5E
ZWJ1Z2dlck1lc3NhZ2U7CisgICAgUmVmUHRyPE5vZGU+IG1faGlnaGxpZ2h0Tm9kZTsKKyAgICBI
aWdobGlnaHRDb25maWcgbV9ub2RlSGlnaGxpZ2h0Q29uZmlnOworICAgIE93blB0cjxJbnRSZWN0
PiBtX2hpZ2hsaWdodFJlY3Q7CisgICAgSGlnaGxpZ2h0Q29uZmlnIG1fcmVjdEhpZ2hsaWdodENv
bmZpZzsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworCisjZW5kaWYgLy8gSW5zcGVj
dG9yT3ZlcmxheV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yUGFnZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdl
QWdlbnQuY3BwCmluZGV4IDM3OGRiZWM4Nzc4NGMwNThhYzUzOTVkYzkzOWIxOTQ5ZjVlOWNhOWUu
LmJlZmJlOGIzYzMzZmQwMjI5MzA4ZmIyNmI2MDFhYTlhODBhZjQzZjMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCkBAIC00NCw3ICs0NCw2
IEBACiAjaW5jbHVkZSAiQ29va2llLmgiCiAjaW5jbHVkZSAiQ29va2llSmFyLmgiCiAjaW5jbHVk
ZSAiRE9NSW1wbGVtZW50YXRpb24uaCIKLSNpbmNsdWRlICJET01Ob2RlSGlnaGxpZ2h0ZXIuaCIK
ICNpbmNsdWRlICJET01QYXRjaFN1cHBvcnQuaCIKICNpbmNsdWRlICJEZXZpY2VPcmllbnRhdGlv
bkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgpAQCAtNjEsNiArNjAsNyBAQAog
I2luY2x1ZGUgIkluc3BlY3RvckNsaWVudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5k
LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCisjaW5jbHVkZSAiSW5z
cGVjdG9yT3ZlcmxheS5oIgogI2luY2x1ZGUgIkluc3BlY3RvclN0YXRlLmgiCiAjaW5jbHVkZSAi
SW5zcGVjdG9yVmFsdWVzLmgiCiAjaW5jbHVkZSAiSW5zdHJ1bWVudGluZ0FnZW50cy5oIgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2VudC5jcHAKaW5kZXggYjY0
NmFmMTkzOGUwNTZjNzA0ZTczYzZiY2YyMjk2MTVkNWY2MDdkZS4uYzk3MzIzYmYxYjg5YjlhOWQx
MGRjODMxNWQ5M2EyYmYyN2JlMmIyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL1BhZ2VEZWJ1Z2dlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
UGFnZURlYnVnZ2VyQWdlbnQuY3BwCkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVkZSAiUGFnZURl
YnVnZ2VyQWdlbnQuaCIKIAogI2luY2x1ZGUgIkNvbnNvbGUuaCIKLSNpbmNsdWRlICJET01Ob2Rl
SGlnaGxpZ2h0ZXIuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JPdmVybGF5LmgiCiAjaW5jbHVkZSAi
UGFnZS5oIgogI2luY2x1ZGUgIlBhZ2VTY3JpcHREZWJ1Z1NlcnZlci5oIgogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0dlc3R1cmVUYXBIaWdobGlnaHRlci5oIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9HZXN0dXJlVGFwSGlnaGxpZ2h0ZXIuaAppbmRleCAxYTQ3ZDcxZmQ1YmVkN2Uy
ZmU1MjI2ZWU2N2U0NzU2OWYyMDNiNzc0Li5lODAxNWZlNWNjMDhlOTI0MzM1MGZlMTkyY2QwNzI0
NDA0ZmU5N2ExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0dlc3R1cmVUYXBIaWdo
bGlnaHRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvR2VzdHVyZVRhcEhpZ2hsaWdodGVy
LmgKQEAgLTQzLDQgKzQzLDQgQEAgUGF0aCBwYXRoRm9yTm9kZUhpZ2hsaWdodChjb25zdCBOb2Rl
Kik7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIERPTU5vZGVIaWdobGln
aHRlcl9oCisjZW5kaWYgLy8gR2VzdHVyZVRhcEhpZ2hsaWdodGVyX19oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0
aW5nL0ludGVybmFscy5jcHAKaW5kZXggMmZkYzA2NmQ2NWE2NTY1N2EzYmZiYTIyYzU4YjAwYjNk
MzNlNmY2MC4uNmFhYTdmMTcyODc1N2ExZTRiYzA0YTdkOTkxYzMzZjY5MmViMjc0MiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcApAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUg
IkNsaWVudFJlY3QuaCIKICNpbmNsdWRlICJDbGllbnRSZWN0TGlzdC5oIgogI2luY2x1ZGUgIkNv
bXBvc2VkU2hhZG93VHJlZVdhbGtlci5oIgotI2luY2x1ZGUgIkRPTU5vZGVIaWdobGlnaHRlci5o
IgogI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2lu
Y2x1ZGUgIkRvY3VtZW50TWFya2VyLmgiCkBAIC01MCw2ICs0OSw3IEBACiAjaW5jbHVkZSAiSW5z
cGVjdG9yQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNvdW50ZXJzLmgiCiAjaW5j
bHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yT3Zl
cmxheS5oIgogI2luY2x1ZGUgIkluc3RydW1lbnRpbmdBZ2VudHMuaCIKICNpbmNsdWRlICJJbnRl
cm5hbFNldHRpbmdzLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>156694</attachid>
            <date>2012-08-06 07:58:10 -0700</date>
            <delta_ts>2012-08-06 08:29:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-93253-20120806185745.patch</filename>
            <type>text/plain</type>
            <size>84132</size>
            <attacher name="Sergey Rogulenko">rogulenko</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0NzcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWI0ZjYyMDc1YTk0ZTU2
ODMwODJjOGVhYzkyOTZlMWI5N2VkYjdlZi4uMmY2NTkyMjBkOGVjYjAzMzAyOTRmMTM4MWZkNzM3
NTJiZjYyZjA4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDUxIEBACiAyMDEyLTA4LTA2ICBTZXJn
ZXkgUm9ndWxlbmtvICA8cm9ndWxlbmtvQGdvb2dsZS5jb20+CiAKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogcmVuYW1pbmcgRE9NTm9kZUhpZ2hsaWdodGVyIHRvIEluc3BlY3Rvck92ZXJsYXkKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkzMjUzCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVuYW1pbmcgRE9N
Tm9kZUhpZ2hsaWdodGVyIHRvIEluc3BlY3Rvck92ZXJsYXkgd2hlcmUgbmVjZXNzYXJ5LgorCisg
ICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToK
KyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAg
KiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckFsbElu
T25lLmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6Cisg
ICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9y
T3ZlcmxheS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NTm9k
ZUhpZ2hsaWdodGVyLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6Oklu
c3BlY3Rvck92ZXJsYXkpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JPdmVybGF5OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVy
bGF5OjpkcmF3T3V0bGluZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5Ojpn
ZXRIaWdobGlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6c2V0UGF1
c2VkSW5EZWJ1Z2dlck1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3Zlcmxh
eTo6aGlkZUhpZ2hsaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5Ojpo
aWdobGlnaHROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OmhpZ2hs
aWdodFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6aGlnaGxpZ2h0
ZWROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OnVwZGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpkcmF3Tm9kZUhpZ2hsaWdodCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpkcmF3UmVjdEhpZ2hsaWdodCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpkcmF3UGF1c2VkSW5EZWJ1Z2dlcik6
CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuaDogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuaC4KKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoSGlnaGxpZ2h0Q29uZmlnKToKKyAgICAgICAgKFdlYkNvcmU6Okhp
Z2hsaWdodDo6c2V0Q29sb3JzKToKKyAgICAgICAgKEhpZ2hsaWdodCk6CisgICAgICAgIChJbnNw
ZWN0b3JPdmVybGF5KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OmNyZWF0
ZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHA6CisgICAgICAg
ICogaW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKiBwYWdlL0dlc3R1
cmVUYXBIaWdobGlnaHRlci5oOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKwor
MjAxMi0wOC0wNiAgU2VyZ2V5IFJvZ3VsZW5rbyAgPHJvZ3VsZW5rb0Bnb29nbGUuY29tPgorCiAg
ICAgICAgIFdlYiBJbnNwZWN0b3I6IGEgdGlueSByZWZhY3RvcmluZyBvZiBIaWdobGlnaHRlciBp
biBJbnNwZWN0b3JET01BZ2VudAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9OTMyNTcKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCBjNTcwZjA4OTYzYWMx
NzgyNTI4Mjg5ODYyMThkMmE4MThhZGIyYWUzLi5kNzg1YmRmYjk4ZDJhZDc3ZDc5MTE1MDM0M2Y5
NTEwYTZiN2ZiODRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTUwNiw3ICsxNTA2LDYgQEAg
U0VUKFdlYkNvcmVfU09VUkNFUwogICAgIGluc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5jcHAKICAg
ICBpbnNwZWN0b3IvQ29udGVudFNlYXJjaFV0aWxzLmNwcAogICAgIGluc3BlY3Rvci9ET01FZGl0
b3IuY3BwCi0gICAgaW5zcGVjdG9yL0RPTU5vZGVIaWdobGlnaHRlci5jcHAKICAgICBpbnNwZWN0
b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcAogICAgIGluc3BlY3Rvci9JZGVudGlmaWVyc0ZhY3Rvcnku
Y3BwCiAgICAgaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmNwcApAQCAtMTUzOCw2ICsxNTM3LDcg
QEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJB
Z2VudC5jcHAKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcAogICAg
IGluc3BlY3Rvci9JbnNwZWN0b3JNZW1vcnlBZ2VudC5jcHAKKyAgICBpbnNwZWN0b3IvSW5zcGVj
dG9yT3ZlcmxheS5jcHAKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAK
ICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAKICAgICBpbnNwZWN0b3Iv
SW5zcGVjdG9yUnVudGltZUFnZW50LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05V
bWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5k
ZXggOGIxYzYyOTZiZjI0Mjg0ZTk1YzA3MjA3YjIzM2Q2NGZlZmIxYjE3Ny4uMTk4MzYwODU3Y2Fl
ZmU3YThmNzUzYzg2MjdlZjI0M2Q2NGYxMDAzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtCkBAIC0yNzIyLDggKzI3MjIsNiBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9Db250ZW50U2VhcmNoVXRpbHMuaCBcCiAJU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0RPTUVkaXRvci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01F
ZGl0b3IuaCBcCi0JU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTU5vZGVIaWdobGlnaHRlci5j
cHAgXAotCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuaCBcCiAJ
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5jcHAgXAogCVNvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9ET01QYXRjaFN1cHBvcnQuaCBcCiAJU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0lkZW50aWZpZXJzRmFjdG9yeS5jcHAgXApAQCAtMjc4OCw2ICsyNzg2LDggQEAgd2Vi
Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uLmggXAogCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JNZW1v
cnlBZ2VudC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JNZW1vcnlB
Z2VudC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAg
XAorCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmggXAogCVNvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwIFwKIAlTb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmggXAogCVNvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCA2Yjdl
YTM3NjA1NWYxZTMxOTA1NTRiYWU3OGNiMjRmYWYwNGVjMDVjLi5kYWVlOTg0N2NhMDg0MDgwMWFm
ZTJjNDkzNDZlZTNiZDA1OWEwM2FmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQu
cHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTczOCw3ICs3MzgsNiBAQCBT
T1VSQ0VTICs9IFwKICAgICBpbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3BwIFwKICAgICBpbnNw
ZWN0b3IvQ29udGVudFNlYXJjaFV0aWxzLmNwcCBcCiAgICAgaW5zcGVjdG9yL0RPTUVkaXRvci5j
cHAgXAotICAgIGluc3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuY3BwIFwKICAgICBpbnNwZWN0
b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcCBcCiAgICAgaW5zcGVjdG9yL0lkZW50aWZpZXJzRmFjdG9y
eS5jcHAgXAogICAgIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5jcHAgXApAQCAtNzY3LDYgKzc2
Niw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JIaXN0b3J5LmNwcCBc
CiAgICAgaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAgXAogICAgIGluc3Bl
Y3Rvci9JbnNwZWN0b3JNZW1vcnlBZ2VudC5jcHAgXAorICAgIGluc3BlY3Rvci9JbnNwZWN0b3JP
dmVybGF5LmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAgXAogICAg
IGluc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcCBcCiAgICAgaW5zcGVjdG9yL0lu
c3BlY3RvclJlc291cmNlQWdlbnQuY3BwIFwKQEAgLTE4NDEsNyArMTg0MSw2IEBAIEhFQURFUlMg
Kz0gXAogICAgIGluc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5oIFwKICAgICBpbnNwZWN0b3IvQ29u
dGVudFNlYXJjaFV0aWxzLmggXAogICAgIGluc3BlY3Rvci9ET01FZGl0b3IuaCBcCi0gICAgaW5z
cGVjdG9yL0RPTU5vZGVIaWdobGlnaHRlci5oIFwKICAgICBpbnNwZWN0b3IvRE9NUGF0Y2hTdXBw
b3J0LmggXAogICAgIGluc3BlY3Rvci9JZGVudGlmaWVyc0ZhY3RvcnkuaCBcCiAgICAgaW5zcGVj
dG9yL0luamVjdGVkU2NyaXB0LmggXApAQCAtMTg3Miw2ICsxODcxLDcgQEAgSEVBREVSUyArPSBc
CiAgICAgaW5zcGVjdG9yL0luc3BlY3Rvckhpc3RvcnkuaCBcCiAgICAgaW5zcGVjdG9yL0luc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbi5oIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5QWdl
bnQuaCBcCisgICAgaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuaCBcCiAgICAgaW5zcGVjdG9y
L0luc3BlY3RvclBhZ2VBZ2VudC5oIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJB
Z2VudC5oIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5oIFwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQppbmRleCA1Y2NhZWI0YjEwNGZhMWI2YTc5ODVkNmRiNDEwMmU4MmE4YmY1Njg0Li5l
MGM0N2M3YWI3MTNhMTYwYTYyYjgyYTE1OWY1OTg1M2U4MzQ3ZTRjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
CkBAIC0yODA3LDggKzI4MDcsNiBAQAogICAgICAgICAgICAgJ2luc3BlY3Rvci9Db250ZW50U2Vh
cmNoVXRpbHMuaCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0RPTUVkaXRvci5jcHAnLAogICAg
ICAgICAgICAgJ2luc3BlY3Rvci9ET01FZGl0b3IuaCcsCi0gICAgICAgICAgICAnaW5zcGVjdG9y
L0RPTU5vZGVIaWdobGlnaHRlci5jcHAnLAotICAgICAgICAgICAgJ2luc3BlY3Rvci9ET01Ob2Rl
SGlnaGxpZ2h0ZXIuaCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5j
cHAnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9ET01QYXRjaFN1cHBvcnQuaCcsCiAgICAgICAg
ICAgICAnaW5zcGVjdG9yL0lkZW50aWZpZXJzRmFjdG9yeS5jcHAnLApAQCAtMjg2Niw2ICsyODY0
LDggQEAKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgn
LAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JNZW1vcnlBZ2VudC5jcHAnLAogICAg
ICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JNZW1vcnlBZ2VudC5oJywKKyAgICAgICAgICAg
ICdpbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAnLAorICAgICAgICAgICAgJ2luc3BlY3Rv
ci9JbnNwZWN0b3JPdmVybGF5LmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JQ
YWdlQWdlbnQuY3BwJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50
LmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcCcs
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
aiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IDU3
MzFhOGY3NjkyZDE3NmM3YmNkOGU5ZTI5ZGE5MTU1OTVhOGY2NDQuLjcwZGI1MzcyOGQ1NWFkYjk4
ZDRhNDVlZDEzZDQ0N2M0ZDg4MzAwZmYgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNw
cm9qL1dlYkNvcmUudmNwcm9qCkBAIC03Mzg0NywzMCArNzM4NDcsNiBAQAogCQkJCT4KIAkJCTwv
RmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcRE9NTm9kZUhp
Z2hsaWdodGVyLmNwcCIKLQkJCQk+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9
IlJlbGVhc2V8V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0J
CQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJCTwv
RmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IlBy
b2R1Y3Rpb258V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0J
CQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJCTwv
RmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0
aD0iLi5caW5zcGVjdG9yXERPTU5vZGVIaWdobGlnaHRlci5oIgotCQkJCT4KLQkJCTwvRmlsZT4K
LQkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcRE9NUGF0Y2hTdXBwb3J0
LmNwcCIKIAkJCQk+CiAJCQkJPEZpbGVDb25maWd1cmF0aW9uCkBAIC03NDY0Myw2ICs3NDYxOSwz
MCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxp
bnNwZWN0b3JcSW5zcGVjdG9yT3ZlcmxheS5jcHAiCisJCQkJPgorCQkJCTxGaWxlQ29uZmlndXJh
dGlvbgorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0i
dHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIK
KwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJhdGlv
bgorCQkJCQlOYW1lPSJQcm9kdWN0aW9ufFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0i
dHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIK
KwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPC9GaWxlPgorCQkJPEZpbGUK
KwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JPdmVybGF5LmgiCisJCQkJ
PgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJ
bnNwZWN0b3JQYWdlQWdlbnQuY3BwIgogCQkJCT4KIAkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
aiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRl
eCA3MmZiMjQ1MjQxZmRkNjBjMWIxMzg2YTU1OGZiNDljODZlMmZlZDE3Li42M2E3YTMxNWQxOGZm
NTQ0NTk0MGNmYmM1MDY0MWZjNDU1NmNiY2FlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNDQ4LDggKzE0NDgsNiBAQAogCQk0
RTE5NTkyQzBBMzlEQUNDMDAyMjBGRTUgLyogTWVkaWFRdWVyeUV2YWx1YXRvci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEUxOTU5MjYwQTM5REFDQzAw
MjIwRkU1IC8qIE1lZGlhUXVlcnlFdmFsdWF0b3IuaCAqLzsgfTsKIAkJNEUxOTU5MkQwQTM5REFD
QzAwMjIwRkU1IC8qIE1lZGlhUXVlcnlFeHAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNEUxOTU5MjcwQTM5REFDQzAwMjIwRkU1IC8qIE1lZGlhUXVl
cnlFeHAuY3BwICovOyB9OwogCQk0RTE5NTkyRTBBMzlEQUNDMDAyMjBGRTUgLyogTWVkaWFRdWVy
eUV4cC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEUx
OTU5MjgwQTM5REFDQzAwMjIwRkU1IC8qIE1lZGlhUXVlcnlFeHAuaCAqLzsgfTsKLQkJNEYxNDQy
MjgxMzM5RkQ2MjAwRTBENkY4IC8qIERPTU5vZGVIaWdobGlnaHRlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0RjE0NDIyNjEzMzlGRDYyMDBFMEQ2
RjggLyogRE9NTm9kZUhpZ2hsaWdodGVyLmNwcCAqLzsgfTsKLQkJNEYxNDQyMjkxMzM5RkQ2MjAw
RTBENkY4IC8qIERPTU5vZGVIaWdobGlnaHRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNEYxNDQyMjcxMzM5RkQ2MjAwRTBENkY4IC8qIERPTU5vZGVI
aWdobGlnaHRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTRGMTUzNERFMTFCNTMyRUMwMDIxRkQ4NiAvKiBFZGl0aW5nQmVoYXZpb3IuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRGMTUzNEREMTFCNTMy
RUMwMDIxRkQ4NiAvKiBFZGl0aW5nQmVoYXZpb3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0RjE1MzRFMDExQjUzMzAyMDAyMUZEODYgLyogRWRp
dGluZ0JlaGF2aW9yVHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDRGMTUzNERGMTFCNTMzMDIwMDIxRkQ4NiAvKiBFZGl0aW5nQmVoYXZpb3JUeXBl
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTRG
MkQyMDU0MTJFQUU3QjMwMDVDMjg3NCAvKiBJbnNwZWN0b3JBZ2VudC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEYyRDIwNTIxMkVBRTdCMzAwNUMyODc0
IC8qIEluc3BlY3RvckFnZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKQEAgLTE5NjcsNiArMTk2NSw4IEBACiAJCTdCMUVBMENGMTU3NkM1QjUwMDYw
MTc3RCAvKiBKU1VuZG9NYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3QjFFQTBDRDE1NzZDNUI1MDA2MDE3N0QgLyogSlNVbmRvTWFuYWdlci5o
ICovOyB9OwogCQk3QjkxODREMjE1NzU4RTQyMDA5MkFBOTMgLyogVW5kb01hbmFnZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0I5MTg0Q0YxNTc1
OEU0MjAwOTJBQTkzIC8qIFVuZG9NYW5hZ2VyLmNwcCAqLzsgfTsKIAkJN0I5MTg0RDMxNTc1OEU0
MjAwOTJBQTkzIC8qIFVuZG9NYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3QjkxODREMDE1NzU4RTQyMDA5MkFBOTMgLyogVW5kb01hbmFnZXIu
aCAqLzsgfTsKKwkJN0M1MjJENEIxNUI0NzdFODAwOUI3Qzk1IC8qIEluc3BlY3Rvck92ZXJsYXku
Y3BwICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDNTIyRDQ5MTVCNDc3RTgw
MDlCN0M5NSAvKiBJbnNwZWN0b3JPdmVybGF5LmNwcCAqLzsgfTsKKwkJN0M1MjJENEMxNUI0NzhC
MjAwOUI3Qzk1IC8qIEluc3BlY3Rvck92ZXJsYXkuaCAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3QzUyMkQ0QTE1QjQ3N0U4MDA5QjdDOTUgLyogSW5zcGVjdG9yT3ZlcmxheS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdFMzND
RDAxMTI3RjM0MEQwMEJFOEYxNyAvKiBQdXJnZVByaW9yaXR5LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3RTMzQ0QwMDEyN0YzNDBEMDBCRThGMTcgLyog
UHVyZ2VQcmlvcml0eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTdFMzdFRjJFMTMzOTIwODgwMEIyOTI1MCAvKiBTdWJyZXNvdXJjZUxvYWRlckNG
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdFMzdF
RjJEMTMzOTIwODgwMEIyOTI1MCAvKiBTdWJyZXNvdXJjZUxvYWRlckNGLmNwcCAqLzsgfTsKIAkJ
N0U5OUFGNTEwQjEzODQ2NDY4RkIwMUE1IC8qIFdpbmRvd0ZvY3VzQWxsb3dlZEluZGljYXRvci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3RTk5QUY1
MjBCMTM4NDY0NjhGQjAxQTUgLyogV2luZG93Rm9jdXNBbGxvd2VkSW5kaWNhdG9yLmNwcCAqLzsg
fTsKQEAgLTg1NzQsOCArODU3NCw2IEBACiAJCTRFMTk1OTI2MEEzOURBQ0MwMDIyMEZFNSAvKiBN
ZWRpYVF1ZXJ5RXZhbHVhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBN
ZWRpYVF1ZXJ5RXZhbHVhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRFMTk1
OTI3MEEzOURBQ0MwMDIyMEZFNSAvKiBNZWRpYVF1ZXJ5RXhwLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZWRpYVF1ZXJ5RXhwLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNEUxOTU5MjgwQTM5REFDQzAwMjIwRkU1IC8qIE1lZGlhUXVlcnlFeHAu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhUXVlcnlFeHAuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNEYxNDQyMjYxMzM5RkQ2MjAwRTBENkY4IC8qIERP
TU5vZGVIaWdobGlnaHRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBET01Ob2RlSGlnaGxpZ2h0ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0
RjE0NDIyNzEzMzlGRDYyMDBFMEQ2RjggLyogRE9NTm9kZUhpZ2hsaWdodGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTU5vZGVIaWdobGlnaHRlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk0RjE1MzRERDExQjUzMkVDMDAyMUZEODYgLyogRWRpdGluZ0Jl
aGF2aW9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVkaXRpbmdCZWhhdmlv
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0RjE1MzRERjExQjUzMzAyMDAyMUZE
ODYgLyogRWRpdGluZ0JlaGF2aW9yVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRWRpdGluZ0JlaGF2aW9yVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNEYyRDIwNTIxMkVBRTdCMzAwNUMyODc0IC8qIEluc3BlY3RvckFnZW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckFnZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC05MTM0LDYgKzkxMzIsOCBAQAogCQk3QjkxODRDRjE1NzU4RTQyMDA5
MkFBOTMgLyogVW5kb01hbmFnZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gVW5kb01hbmFnZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Qjkx
ODREMDE1NzU4RTQyMDA5MkFBOTMgLyogVW5kb01hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVW5kb01hbmFnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJN0I5MTg0RDExNTc1OEU0MjAwOTJBQTkzIC8qIFVuZG9NYW5hZ2VyLmlkbCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IHBhdGggPSBVbmRvTWFuYWdlci5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTdDNTIyRDQ5MTVCNDc3RTgwMDlCN0M5NSAvKiBJbnNwZWN0b3JPdmVybGF5LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3BlY3Rvck92ZXJsYXkuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QzUyMkQ0QTE1QjQ3OEIyMDA5QjdDOTUgLyog
SW5zcGVjdG9yT3ZlcmxheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNw
ZWN0b3JPdmVybGF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDNjAxMjgwNjAw
NzhCQjcwRTM2N0E5NSAvKiBETlNSZXNvbHZlUXVldWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRE5TUmVzb2x2ZVF1ZXVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJN0UzM0NEMDAxMjdGMzQwRDAwQkU4RjE3IC8qIFB1cmdlUHJpb3JpdHkuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHVyZ2VQcmlvcml0eS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3RTM3RUYyRDEzMzkyMDg4MDBCMjkyNTAgLyogU3VicmVz
b3VyY2VMb2FkZXJDRi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBT
dWJyZXNvdXJjZUxvYWRlckNGLmNwcDsgcGF0aCA9IGNmL1N1YnJlc291cmNlTG9hZGVyQ0YuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTQ1MzYsOCArMTQ1MzYsNiBAQAogCQkJ
CTU5MTAyRkJBMTQzMjdEM0IwMDNDOUQwNCAvKiBDb250ZW50U2VhcmNoVXRpbHMuaCAqLywKIAkJ
CQk3QUFCQTI1NzE0QkM2MTMzMDBBQTlBMTEgLyogRE9NRWRpdG9yLmNwcCAqLywKIAkJCQk3QUFC
QTI1ODE0QkM2MTMzMDBBQTlBMTEgLyogRE9NRWRpdG9yLmggKi8sCi0JCQkJNEYxNDQyMjYxMzM5
RkQ2MjAwRTBENkY4IC8qIERPTU5vZGVIaWdobGlnaHRlci5jcHAgKi8sCi0JCQkJNEYxNDQyMjcx
MzM5RkQ2MjAwRTBENkY4IC8qIERPTU5vZGVIaWdobGlnaHRlci5oICovLAogCQkJCTdBNTQ4ODE2
MTRFNDMyQTEwMDZBRTA1QSAvKiBET01QYXRjaFN1cHBvcnQuY3BwICovLAogCQkJCTdBNTQ4ODE1
MTRFNDMyQTEwMDZBRTA1QSAvKiBET01QYXRjaFN1cHBvcnQuaCAqLywKIAkJCQk1OTEzQTIzRjEz
RDQ5RUJBMDBGNUIwNUMgLyogSWRlbnRpZmllcnNGYWN0b3J5LmNwcCAqLywKQEAgLTE0NjA5LDYg
KzE0NjA3LDggQEAKIAkJCQkyMEQ2MjkyNTEyNTM2OTBCMDAwODE1NDMgLyogSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uLmggKi8sCiAJCQkJN0FBNTFERDMxNDg1MDZBOTAwQUQyNzUyIC8qIEluc3Bl
Y3Rvck1lbW9yeUFnZW50LmNwcCAqLywKIAkJCQk3QUE1MURENDE0ODUwNkE5MDBBRDI3NTIgLyog
SW5zcGVjdG9yTWVtb3J5QWdlbnQuaCAqLywKKwkJCQk3QzUyMkQ0OTE1QjQ3N0U4MDA5QjdDOTUg
LyogSW5zcGVjdG9yT3ZlcmxheS5jcHAgKi8sCisJCQkJN0M1MjJENEExNUI0NzhCMjAwOUI3Qzk1
IC8qIEluc3BlY3Rvck92ZXJsYXkuaCAqLywKIAkJCQk0RjZGREQ2MjEzNDFERUREMDAxRjhFRTMg
LyogSW5zcGVjdG9yUGFnZUFnZW50LmNwcCAqLywKIAkJCQk0RjZGREQ2MzEzNDFERUREMDAxRjhF
RTMgLyogSW5zcGVjdG9yUGFnZUFnZW50LmggKi8sCiAJCQkJOUYwRDZCMkMxMjFCRkVCQTAwNkMw
Mjg4IC8qIEluc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwICovLApAQCAtMjI3NDQsNyArMjI3NDQs
NiBAQAogCQkJCTg1RTcxMUQyMEFDNUQ1MzUwMDUzMjcwRiAvKiBET01OYW1lZE5vZGVNYXBJbnRl
cm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODUzQkY0REIwQUJCNkI1NTAwODY0N0JCIC8qIERP
TU5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1NDA3NTI2MEFENkM2NjcwMDYyMEM1NyAvKiBE
T01Ob2RlRmlsdGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQk0RjE0NDIyOTEzMzlGRDYyMDBFMEQ2
RjggLyogRE9NTm9kZUhpZ2hsaWdodGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NUI0OThGQjBB
REIzNDAyMDA5MjVDQkIgLyogRE9NTm9kZUludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQk4
NTUyNkMzNzBBQjBBMTdFMDAwMzAyRUEgLyogRE9NTm9kZUl0ZXJhdG9yLmggaW4gSGVhZGVycyAq
LywKIAkJCQk4NTBCNDFDMjBBRDlFN0U3MDBBNkVENEYgLyogRE9NTm9kZUl0ZXJhdG9ySW50ZXJu
YWwuaCBpbiBIZWFkZXJzICovLApAQCAtMjM2MDgsNiArMjM2MDcsNyBAQAogCQkJCTdBQ0Q4OEQ0
MTRDMDhCRDYwMDg0RUREMiAvKiBJbnNwZWN0b3JJbmRleGVkREJBZ2VudC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMjBENjI5MjcxMjUzNjkwQjAwMDgxNTQzIC8qIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0FBNTFERDYxNDg1MDZBOTAwQUQyNzUyIC8qIElu
c3BlY3Rvck1lbW9yeUFnZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQk3QzUyMkQ0QzE1QjQ3OEIy
MDA5QjdDOTUgLyogSW5zcGVjdG9yT3ZlcmxheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNEY2RkRE
NjUxMzQxREVERDAwMUY4RUUzIC8qIEluc3BlY3RvclBhZ2VBZ2VudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOUYwRDZCMkYxMjFCRkVCQTAwNkMwMjg4IC8qIEluc3BlY3RvclByb2ZpbGVyQWdlbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTgyQUIxNzc2MTI1QzgyNjcwMEM1MDY5RCAvKiBJbnNwZWN0
b3JSZXNvdXJjZUFnZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTI2MTY1LDcgKzI2MTY1LDYgQEAK
IAkJCQk4NUM3RjVDMDBBQUZCN0NEMDA0MDE0REQgLyogRE9NTXV0YXRpb25FdmVudC5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTg1MThERDc5MEE5Q0YzMUIwMDkxQjdBNiAvKiBET01OYW1lZE5vZGVN
YXAubW0gaW4gU291cmNlcyAqLywKIAkJCQk4NTNCRjREQzBBQkI2QjU1MDA4NjQ3QkIgLyogRE9N
Tm9kZS5tbSBpbiBTb3VyY2VzICovLAotCQkJCTRGMTQ0MjI4MTMzOUZENjIwMEUwRDZGOCAvKiBE
T01Ob2RlSGlnaGxpZ2h0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODU1MjZDMzgwQUIwQTE3
RTAwMDMwMkVBIC8qIERPTU5vZGVJdGVyYXRvci5tbSBpbiBTb3VyY2VzICovLAogCQkJCTg1QUNB
QThFMEE5Qjc1OUMwMDY3MUU5MCAvKiBET01Ob2RlTGlzdC5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CTg1Q0E5NkVCMEE5NjI0RTkwMDY5MENDRiAvKiBET01Ob3RhdGlvbi5tbSBpbiBTb3VyY2VzICov
LApAQCAtMjY3NzIsNiArMjY3NzEsNyBAQAogCQkJCTdBQ0Q4OEQzMTRDMDhCRDYwMDg0RUREMiAv
KiBJbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyMEQ2Mjky
NjEyNTM2OTBCMDAwODE1NDMgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTdBQTUxREQ1MTQ4NTA2QTkwMEFEMjc1MiAvKiBJbnNwZWN0b3JNZW1vcnlB
Z2VudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3QzUyMkQ0QjE1QjQ3N0U4MDA5QjdDOTUgLyog
SW5zcGVjdG9yT3ZlcmxheS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0RjZGREQ2NDEzNDFERURE
MDAxRjhFRTMgLyogSW5zcGVjdG9yUGFnZUFnZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTlG
MEQ2QjJFMTIxQkZFQkEwMDZDMDI4OCAvKiBJbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTgyQUIxNzc1MTI1QzgyNjcwMEM1MDY5RCAvKiBJbnNwZWN0b3JSZXNv
dXJjZUFnZW50LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0RPTU5vZGVIaWdobGlnaHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvRE9NTm9kZUhpZ2hsaWdodGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ODE4MWRkYjk5MTEwMzk1ZTZiZDA2MzY3NjMzYTgyNGJlYjZlOTc2ZS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
RE9NTm9kZUhpZ2hsaWdodGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDYxNCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21w
dXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
LSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
LSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUikKLQotI2luY2x1ZGUg
IkRPTU5vZGVIaWdobGlnaHRlci5oIgotCi0jaW5jbHVkZSAiRWxlbWVudC5oIgotI2luY2x1ZGUg
IkZvbnRDYWNoZS5oIgotI2luY2x1ZGUgIkZvbnRGYW1pbHkuaCIKLSNpbmNsdWRlICJGcmFtZS5o
IgotI2luY2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgot
I2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnQuaCIK
LSNpbmNsdWRlICJOb2RlLmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlJhbmdlLmgi
Ci0jaW5jbHVkZSAiUmVuZGVyQm94TW9kZWxPYmplY3QuaCIKLSNpbmNsdWRlICJSZW5kZXJJbmxp
bmUuaCIKLSNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKLSNpbmNsdWRlICJTZXR0aW5ncy5oIgot
I2luY2x1ZGUgIlN0eWxlZEVsZW1lbnQuaCIKLSNpbmNsdWRlICJUZXh0UnVuLmgiCi0jaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLW5h
bWVzcGFjZSB7Ci0KLSNpZiBPUyhXSU5ET1dTKQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGZvbnRI
ZWlnaHRQeCA9IDEyOwotI2VsaWYgT1MoTUFDX09TX1gpIHx8IE9TKFVOSVgpCi1zdGF0aWMgY29u
c3QgdW5zaWduZWQgZm9udEhlaWdodFB4ID0gMTE7Ci0jZW5kaWYKLQotY29uc3Qgc3RhdGljIGlu
dCByZWN0SW5mbGF0ZVB4ID0gNDsKLWNvbnN0IHN0YXRpYyBpbnQgYm9yZGVyV2lkdGhQeCA9IDE7
Ci1jb25zdCBzdGF0aWMgaW50IHRvb2x0aXBQYWRkaW5nID0gNDsKLQotY29uc3Qgc3RhdGljIGlu
dCBhcnJvd1RpcE9mZnNldCA9IDIwOwotY29uc3Qgc3RhdGljIGZsb2F0IGFycm93SGVpZ2h0ID0g
NzsKLWNvbnN0IHN0YXRpYyBmbG9hdCBhcnJvd0hhbGZXaWR0aCA9IDc7Ci0KLVBhdGggcXVhZFRv
UGF0aChjb25zdCBGbG9hdFF1YWQmIHF1YWQpCi17Ci0gICAgUGF0aCBxdWFkUGF0aDsKLSAgICBx
dWFkUGF0aC5tb3ZlVG8ocXVhZC5wMSgpKTsKLSAgICBxdWFkUGF0aC5hZGRMaW5lVG8ocXVhZC5w
MigpKTsKLSAgICBxdWFkUGF0aC5hZGRMaW5lVG8ocXVhZC5wMygpKTsKLSAgICBxdWFkUGF0aC5h
ZGRMaW5lVG8ocXVhZC5wNCgpKTsKLSAgICBxdWFkUGF0aC5jbG9zZVN1YnBhdGgoKTsKLSAgICBy
ZXR1cm4gcXVhZFBhdGg7Ci19Ci0KLXZvaWQgZHJhd091dGxpbmVkUXVhZChHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UXVhZCYgcXVhZCwgY29uc3QgQ29sb3ImIGZpbGxDb2xv
ciwgY29uc3QgQ29sb3ImIG91dGxpbmVDb2xvcikKLXsKLSAgICBzdGF0aWMgY29uc3QgaW50IG91
dGxpbmVUaGlja25lc3MgPSAyOwotCi0gICAgUGF0aCBxdWFkUGF0aCA9IHF1YWRUb1BhdGgocXVh
ZCk7Ci0KLSAgICAvLyBDbGlwIG91dCB0aGUgcXVhZCwgdGhlbiBkcmF3IHdpdGggYSAycHggc3Ry
b2tlIHRvIGdldCBhIHBpeGVsCi0gICAgLy8gb2Ygb3V0bGluZSAoYmVjYXVzZSBpbmZsYXRpbmcg
YSBxdWFkIGlzIGhhcmQpCi0gICAgewotICAgICAgICBjb250ZXh0LnNhdmUoKTsKLSAgICAgICAg
Y29udGV4dC5jbGlwT3V0KHF1YWRQYXRoKTsKLQotICAgICAgICBjb250ZXh0LnNldFN0cm9rZVRo
aWNrbmVzcyhvdXRsaW5lVGhpY2tuZXNzKTsKLSAgICAgICAgY29udGV4dC5zZXRTdHJva2VDb2xv
cihvdXRsaW5lQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwotICAgICAgICBjb250ZXh0LnN0
cm9rZVBhdGgocXVhZFBhdGgpOwotCi0gICAgICAgIGNvbnRleHQucmVzdG9yZSgpOwotICAgIH0K
LQotICAgIC8vIE5vdyBkbyB0aGUgZmlsbAotICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKGZpbGxD
b2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7Ci0gICAgY29udGV4dC5maWxsUGF0aChxdWFkUGF0
aCk7Ci19Ci0KLXZvaWQgZHJhd091dGxpbmVkUXVhZFdpdGhDbGlwKEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCwgY29uc3QgRmxvYXRRdWFkJiBxdWFkLCBjb25zdCBGbG9hdFF1YWQmIGNsaXBRdWFk
LCBjb25zdCBDb2xvciYgZmlsbENvbG9yKQotewotICAgIGNvbnRleHQuc2F2ZSgpOwotICAgIFBh
dGggY2xpcFF1YWRQYXRoID0gcXVhZFRvUGF0aChjbGlwUXVhZCk7Ci0gICAgY29udGV4dC5jbGlw
T3V0KGNsaXBRdWFkUGF0aCk7Ci0gICAgZHJhd091dGxpbmVkUXVhZChjb250ZXh0LCBxdWFkLCBm
aWxsQ29sb3IsIENvbG9yOjp0cmFuc3BhcmVudCk7Ci0gICAgY29udGV4dC5yZXN0b3JlKCk7Ci19
Ci0KLXZvaWQgZHJhd0hpZ2hsaWdodEZvckJveChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNv
bnN0IEZsb2F0UXVhZCYgY29udGVudFF1YWQsIGNvbnN0IEZsb2F0UXVhZCYgcGFkZGluZ1F1YWQs
IGNvbnN0IEZsb2F0UXVhZCYgYm9yZGVyUXVhZCwgY29uc3QgRmxvYXRRdWFkJiBtYXJnaW5RdWFk
LCBjb25zdCBIaWdobGlnaHRDb25maWcmIGhpZ2hsaWdodENvbmZpZykKLXsKLSAgICBib29sIGhh
c01hcmdpbiA9IGhpZ2hsaWdodENvbmZpZy5tYXJnaW4gIT0gQ29sb3I6OnRyYW5zcGFyZW50Owot
ICAgIGJvb2wgaGFzQm9yZGVyID0gaGlnaGxpZ2h0Q29uZmlnLmJvcmRlciAhPSBDb2xvcjo6dHJh
bnNwYXJlbnQ7Ci0gICAgYm9vbCBoYXNQYWRkaW5nID0gaGlnaGxpZ2h0Q29uZmlnLnBhZGRpbmcg
IT0gQ29sb3I6OnRyYW5zcGFyZW50OwotICAgIGJvb2wgaGFzQ29udGVudCA9IGhpZ2hsaWdodENv
bmZpZy5jb250ZW50ICE9IENvbG9yOjp0cmFuc3BhcmVudCB8fCBoaWdobGlnaHRDb25maWcuY29u
dGVudE91dGxpbmUgIT0gQ29sb3I6OnRyYW5zcGFyZW50OwotCi0gICAgRmxvYXRRdWFkIGNsaXBR
dWFkOwotICAgIENvbG9yIGNsaXBDb2xvcjsKLSAgICBpZiAoaGFzTWFyZ2luICYmICghaGFzQm9y
ZGVyIHx8IG1hcmdpblF1YWQgIT0gYm9yZGVyUXVhZCkpIHsKLSAgICAgICAgZHJhd091dGxpbmVk
UXVhZFdpdGhDbGlwKGNvbnRleHQsIG1hcmdpblF1YWQsIGJvcmRlclF1YWQsIGhpZ2hsaWdodENv
bmZpZy5tYXJnaW4pOwotICAgICAgICBjbGlwUXVhZCA9IGJvcmRlclF1YWQ7Ci0gICAgfQotICAg
IGlmIChoYXNCb3JkZXIgJiYgKCFoYXNQYWRkaW5nIHx8IGJvcmRlclF1YWQgIT0gcGFkZGluZ1F1
YWQpKSB7Ci0gICAgICAgIGRyYXdPdXRsaW5lZFF1YWRXaXRoQ2xpcChjb250ZXh0LCBib3JkZXJR
dWFkLCBwYWRkaW5nUXVhZCwgaGlnaGxpZ2h0Q29uZmlnLmJvcmRlcik7Ci0gICAgICAgIGNsaXBR
dWFkID0gcGFkZGluZ1F1YWQ7Ci0gICAgfQotICAgIGlmIChoYXNQYWRkaW5nICYmICghaGFzQ29u
dGVudCB8fCBwYWRkaW5nUXVhZCAhPSBjb250ZW50UXVhZCkpIHsKLSAgICAgICAgZHJhd091dGxp
bmVkUXVhZFdpdGhDbGlwKGNvbnRleHQsIHBhZGRpbmdRdWFkLCBjb250ZW50UXVhZCwgaGlnaGxp
Z2h0Q29uZmlnLnBhZGRpbmcpOwotICAgICAgICBjbGlwUXVhZCA9IGNvbnRlbnRRdWFkOwotICAg
IH0KLSAgICBpZiAoaGFzQ29udGVudCkKLSAgICAgICAgZHJhd091dGxpbmVkUXVhZChjb250ZXh0
LCBjb250ZW50UXVhZCwgaGlnaGxpZ2h0Q29uZmlnLmNvbnRlbnQsIGhpZ2hsaWdodENvbmZpZy5j
b250ZW50T3V0bGluZSk7Ci19Ci0KLXZvaWQgZHJhd0hpZ2hsaWdodEZvclNWR1JlbmRlcmVyKEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgVmVjdG9yPEZsb2F0UXVhZD4mIGFic29sdXRl
UXVhZHMsIGNvbnN0IEhpZ2hsaWdodENvbmZpZyYgaGlnaGxpZ2h0Q29uZmlnKQotewotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgYWJzb2x1dGVRdWFkcy5zaXplKCk7ICsraSkKLSAgICAgICAg
ZHJhd091dGxpbmVkUXVhZChjb250ZXh0LCBhYnNvbHV0ZVF1YWRzW2ldLCBoaWdobGlnaHRDb25m
aWcuY29udGVudCwgQ29sb3I6OnRyYW5zcGFyZW50KTsKLX0KLQotaW50IGRyYXdTdWJzdHJpbmco
Y29uc3QgVGV4dFJ1biYgZ2xvYmFsVGV4dFJ1biwgaW50IG9mZnNldCwgaW50IGxlbmd0aCwgY29u
c3QgQ29sb3ImIHRleHRDb2xvciwgY29uc3QgRm9udCYgZm9udCwgR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiB0aXRsZVJlY3QpCi17Ci0gICAgY29udGV4dC5zZXRG
aWxsQ29sb3IodGV4dENvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKLSAgICBjb250ZXh0LmRy
YXdUZXh0KGZvbnQsIGdsb2JhbFRleHRSdW4sIEludFBvaW50KHRpdGxlUmVjdC5waXhlbFNuYXBw
ZWRYKCkgKyByZWN0SW5mbGF0ZVB4LCB0aXRsZVJlY3QucGl4ZWxTbmFwcGVkWSgpICsgZm9udC5m
b250TWV0cmljcygpLmhlaWdodCgpKSwgb2Zmc2V0LCBvZmZzZXQgKyBsZW5ndGgpOwotICAgIHJl
dHVybiBvZmZzZXQgKyBsZW5ndGg7Ci19Ci0KLWZsb2F0IGNhbGN1bGF0ZUFycm93VGlwWChjb25z
dCBMYXlvdXRSZWN0JiBhbmNob3JCb3gsIGNvbnN0IExheW91dFJlY3QmIHRpdGxlUmVjdCkKLXsK
LSAgICBjb25zdCBzdGF0aWMgaW50IGFuY2hvclRpcE9mZnNldFB4ID0gMjsKLQotICAgIGludCBt
aW5YID0gdGl0bGVSZWN0LngoKSArIGFycm93SGFsZldpZHRoOwotICAgIGludCBtYXhYID0gdGl0
bGVSZWN0Lm1heFgoKSAtIGFycm93SGFsZldpZHRoOwotICAgIGludCBhbmNob3JYID0gYW5jaG9y
Qm94LngoKTsKLSAgICBpbnQgYW5jaG9yTWF4WCA9IGFuY2hvckJveC5tYXhYKCk7Ci0KLSAgICBp
bnQgeCA9IHRpdGxlUmVjdC54KCkgKyBhcnJvd1RpcE9mZnNldDsgLy8gRGVmYXVsdCB0b29sdGlw
IHBvc2l0aW9uLgotICAgIGlmICh4IDwgYW5jaG9yWCkKLSAgICAgICAgeCA9IGFuY2hvclggKyBh
bmNob3JUaXBPZmZzZXRQeDsKLSAgICBlbHNlIGlmICh4ID4gYW5jaG9yTWF4WCkKLSAgICAgICAg
eCA9IGFuY2hvck1heFggLSBhbmNob3JUaXBPZmZzZXRQeDsKLQotICAgIGlmICh4IDwgbWluWCkK
LSAgICAgICAgeCA9IG1pblg7Ci0gICAgZWxzZSBpZiAoeCA+IG1heFgpCi0gICAgICAgIHggPSBt
YXhYOwotCi0gICAgcmV0dXJuIHg7Ci19Ci0KLXZvaWQgc2V0VXBGb250RGVzY3JpcHRpb24oRm9u
dERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIFdlYkNvcmU6OlNldHRpbmdzKiBzZXR0aW5n
cykKLXsKLSNkZWZpbmUgVE9PTFRJUF9GT05UX0ZBTUlMSUVTKHNpemUsIC4uLikgXAotc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIHRvb2x0aXBGb250RmFjZVNpemUgPSBzaXplO1wKLXN0YXRpYyBjb25z
dCBBdG9taWNTdHJpbmcqIHRvb2x0aXBGb250RmFjZVtzaXplXSA9IHsgX19WQV9BUkdTX18gfTsK
LQotI2lmIE9TKFdJTkRPV1MpCi1UT09MVElQX0ZPTlRfRkFNSUxJRVMoMiwgbmV3IEF0b21pY1N0
cmluZygiQ29uc29sYXMiKSwgbmV3IEF0b21pY1N0cmluZygiTHVjaWRhIENvbnNvbGUiKSkKLSNl
bGlmIE9TKE1BQ19PU19YKQotVE9PTFRJUF9GT05UX0ZBTUlMSUVTKDIsIG5ldyBBdG9taWNTdHJp
bmcoIk1lbmxvIiksIG5ldyBBdG9taWNTdHJpbmcoIk1vbmFjbyIpKQotI2VsaWYgT1MoVU5JWCkK
LVRPT0xUSVBfRk9OVF9GQU1JTElFUygxLCBuZXcgQXRvbWljU3RyaW5nKCJkZWphdnUgc2FucyBt
b25vIikpCi0jZW5kaWYKLS8vIEluIHRoZSBkZWZhdWx0IGNhc2UsIHdlIGdldCB0aGUgc2V0dGlu
Z3MtcHJvdmlkZWQgbW9ub3NwYWNlIGZvbnQuCi0KLSN1bmRlZiBUT09MVElQX0ZPTlRfRkFNSUxJ
RVMKLQotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRSZW5kZXJpbmdNb2RlKHNldHRpbmdzLT5mb250
UmVuZGVyaW5nTW9kZSgpKTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKGZv
bnRIZWlnaHRQeCk7Ci0KLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIGZpeGVkRm9udEZhbWlseSA9
IHNldHRpbmdzLT5maXhlZEZvbnRGYW1pbHkoKTsKLSAgICBpZiAoIWZpeGVkRm9udEZhbWlseS5p
c0VtcHR5KCkpIHsKLSAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9u
dERlc2NyaXB0aW9uOjpNb25vc3BhY2VGYW1pbHkpOwotICAgICAgICBGb250RmFtaWx5KiBjdXJy
ZW50RmFtaWx5ID0gMDsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRvb2x0aXBG
b250RmFjZVNpemU7ICsraSkgewotICAgICAgICAgICAgaWYgKCFjdXJyZW50RmFtaWx5KSB7Ci0g
ICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCkuc2V0RmFtaWx5KCp0
b29sdGlwRm9udEZhY2VbaV0pOwotICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5maXJz
dEZhbWlseSgpLmFwcGVuZEZhbWlseSgwKTsKLSAgICAgICAgICAgICAgICBjdXJyZW50RmFtaWx5
ID0gJmZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpOwotICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICBSZWZQdHI8U2hhcmVkRm9udEZhbWlseT4gbmV3RmFtaWx5ID0gU2hh
cmVkRm9udEZhbWlseTo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICAgICAgbmV3RmFtaWx5LT5zZXRG
YW1pbHkoKnRvb2x0aXBGb250RmFjZVtpXSk7Ci0gICAgICAgICAgICAgICAgY3VycmVudEZhbWls
eS0+YXBwZW5kRmFtaWx5KG5ld0ZhbWlseSk7Ci0gICAgICAgICAgICAgICAgY3VycmVudEZhbWls
eSA9IG5ld0ZhbWlseS5nZXQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBS
ZWZQdHI8U2hhcmVkRm9udEZhbWlseT4gbmV3RmFtaWx5ID0gU2hhcmVkRm9udEZhbWlseTo6Y3Jl
YXRlKCk7Ci0gICAgICAgIG5ld0ZhbWlseS0+c2V0RmFtaWx5KGZpeGVkRm9udEZhbWlseSk7Ci0g
ICAgICAgIGN1cnJlbnRGYW1pbHktPmFwcGVuZEZhbWlseShuZXdGYW1pbHkpOwotICAgICAgICBj
dXJyZW50RmFtaWx5ID0gbmV3RmFtaWx5LmdldCgpOwotICAgIH0KLX0KLQotdm9pZCBkcmF3RWxl
bWVudFRpdGxlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgTm9kZSogbm9kZSwgUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlciwgY29uc3QgSW50UmVjdCYgYm91bmRpbmdCb3gsIGNvbnN0IEludFJlY3Qm
IGFuY2hvckJveCwgY29uc3QgRmxvYXRSZWN0JiB2aXNpYmxlUmVjdCwgV2ViQ29yZTo6U2V0dGlu
Z3MqIHNldHRpbmdzKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ29sb3IsIGJhY2tncm91
bmRDb2xvciwgKDI1NSwgMjU1LCAxOTQpKTsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKENvbG9y
LCB0YWdDb2xvciwgKDEzNiwgMTgsIDEyOCkpOyAvLyBTYW1lIGFzIC53ZWJraXQtaHRtbC10YWcu
Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChDb2xvciwgYXR0ckNvbG9yLCAoMjYsIDI2LCAxNjYp
KTsgLy8gU2FtZSBhcyAud2Via2l0LWh0bWwtYXR0cmlidXRlLXZhbHVlLgotICAgIERFRklORV9T
VEFUSUNfTE9DQUwoQ29sb3IsIG5vcm1hbENvbG9yLCAoQ29sb3I6OmJsYWNrKSk7Ci0gICAgREVG
SU5FX1NUQVRJQ19MT0NBTChDb2xvciwgcHhBbmRCb3JkZXJDb2xvciwgKDEyOCwgMTI4LCAxMjgp
KTsKLQotICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBweFN0cmluZywgKCJweCIpKTsK
LSAgICBjb25zdCBzdGF0aWMgVUNoYXIgdGltZXNVQ2hhcltdID0geyAweDAwMjAsIDB4MDBENywg
MHgwMDIwLCAwIH07Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHRpbWVzU3RyaW5n
LCAodGltZXNVQ2hhcikpOyAvLyAmdGltZXM7IHN0cmluZwotCi0gICAgRm9udENhY2hlUHVyZ2VQ
cmV2ZW50ZXIgZm9udENhY2hlUHVyZ2VQcmV2ZW50ZXI7Ci0KLSAgICBFbGVtZW50KiBlbGVtZW50
ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpOwotICAgIGJvb2wgaXNYSFRNTCA9IGVsZW1l
bnQtPmRvY3VtZW50KCktPmlzWEhUTUxEb2N1bWVudCgpOwotICAgIFN0cmluZ0J1aWxkZXIgbm9k
ZVRpdGxlOwotICAgIG5vZGVUaXRsZS5hcHBlbmQoaXNYSFRNTCA/IGVsZW1lbnQtPm5vZGVOYW1l
KCkgOiBlbGVtZW50LT5ub2RlTmFtZSgpLmxvd2VyKCkpOwotICAgIHVuc2lnbmVkIHRhZ05hbWVM
ZW5ndGggPSBub2RlVGl0bGUubGVuZ3RoKCk7Ci0KLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIGlk
VmFsdWUgPSBlbGVtZW50LT5nZXRJZEF0dHJpYnV0ZSgpOwotICAgIHVuc2lnbmVkIGlkU3RyaW5n
TGVuZ3RoID0gMDsKLSAgICBTdHJpbmcgaWRTdHJpbmc7Ci0gICAgaWYgKCFpZFZhbHVlLmlzTnVs
bCgpICYmICFpZFZhbHVlLmlzRW1wdHkoKSkgewotICAgICAgICBub2RlVGl0bGUuYXBwZW5kKCIj
Iik7Ci0gICAgICAgIG5vZGVUaXRsZS5hcHBlbmQoaWRWYWx1ZSk7Ci0gICAgICAgIGlkU3RyaW5n
TGVuZ3RoID0gMSArIGlkVmFsdWUubGVuZ3RoKCk7Ci0gICAgfQotCi0gICAgSGFzaFNldDxBdG9t
aWNTdHJpbmc+IHVzZWRDbGFzc05hbWVzOwotICAgIHVuc2lnbmVkIGNsYXNzZXNTdHJpbmdMZW5n
dGggPSAwOwotICAgIGlmIChlbGVtZW50LT5oYXNDbGFzcygpICYmIGVsZW1lbnQtPmlzU3R5bGVk
RWxlbWVudCgpKSB7Ci0gICAgICAgIGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcmIGNsYXNzTmFtZXNT
dHJpbmcgPSBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4oZWxlbWVudCktPmNsYXNzTmFtZXMo
KTsKLSAgICAgICAgc2l6ZV90IGNsYXNzTmFtZUNvdW50ID0gY2xhc3NOYW1lc1N0cmluZy5zaXpl
KCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2xhc3NOYW1lQ291bnQ7ICsraSkg
ewotICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBjbGFzc05hbWUgPSBjbGFzc05hbWVz
U3RyaW5nW2ldOwotICAgICAgICAgICAgaWYgKHVzZWRDbGFzc05hbWVzLmNvbnRhaW5zKGNsYXNz
TmFtZSkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB1c2VkQ2xhc3NO
YW1lcy5hZGQoY2xhc3NOYW1lKTsKLSAgICAgICAgICAgIG5vZGVUaXRsZS5hcHBlbmQoIi4iKTsK
LSAgICAgICAgICAgIG5vZGVUaXRsZS5hcHBlbmQoY2xhc3NOYW1lKTsKLSAgICAgICAgICAgIGNs
YXNzZXNTdHJpbmdMZW5ndGggKz0gMSArIGNsYXNzTmFtZS5sZW5ndGgoKTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBtb2RlbE9iamVjdCA9IHJlbmRlcmVy
LT5pc0JveE1vZGVsT2JqZWN0KCkgPyB0b1JlbmRlckJveE1vZGVsT2JqZWN0KHJlbmRlcmVyKSA6
IDA7Ci0KLSAgICBTdHJpbmcgd2lkdGhOdW1iZXJQYXJ0ID0gIiAiICsgU3RyaW5nOjpudW1iZXIo
bW9kZWxPYmplY3QgPyBhZGp1c3RGb3JBYnNvbHV0ZVpvb20obW9kZWxPYmplY3QtPnBpeGVsU25h
cHBlZE9mZnNldFdpZHRoKCksIG1vZGVsT2JqZWN0KSA6IGJvdW5kaW5nQm94LndpZHRoKCkpOwot
ICAgIG5vZGVUaXRsZS5hcHBlbmQod2lkdGhOdW1iZXJQYXJ0KTsKLSAgICBub2RlVGl0bGUuYXBw
ZW5kKHB4U3RyaW5nKTsKLSAgICBub2RlVGl0bGUuYXBwZW5kKHRpbWVzU3RyaW5nKTsKLSAgICBT
dHJpbmcgaGVpZ2h0TnVtYmVyUGFydCA9IFN0cmluZzo6bnVtYmVyKG1vZGVsT2JqZWN0ID8gYWRq
dXN0Rm9yQWJzb2x1dGVab29tKG1vZGVsT2JqZWN0LT5waXhlbFNuYXBwZWRPZmZzZXRIZWlnaHQo
KSwgbW9kZWxPYmplY3QpIDogYm91bmRpbmdCb3guaGVpZ2h0KCkpOwotICAgIG5vZGVUaXRsZS5h
cHBlbmQoaGVpZ2h0TnVtYmVyUGFydCk7Ci0gICAgbm9kZVRpdGxlLmFwcGVuZChweFN0cmluZyk7
Ci0KLSAgICBGb250RGVzY3JpcHRpb24gZGVzYzsKLSAgICBzZXRVcEZvbnREZXNjcmlwdGlvbihk
ZXNjLCBzZXR0aW5ncyk7Ci0gICAgRm9udCBmb250ID0gRm9udChkZXNjLCAwLCAwKTsKLSAgICBm
b250LnVwZGF0ZSgwKTsKLQotICAgIFRleHRSdW4gbm9kZVRpdGxlUnVuKG5vZGVUaXRsZS50b1N0
cmluZygpKTsKLSAgICBJbnRQb2ludCB0aXRsZUJhc2VQb2ludCA9IEludFBvaW50KGFuY2hvckJv
eC54KCksIGFuY2hvckJveC5tYXhZKCkgLSAxKTsKLSAgICB0aXRsZUJhc2VQb2ludC5tb3ZlKHJl
Y3RJbmZsYXRlUHgsIHJlY3RJbmZsYXRlUHgpOwotICAgIEludFJlY3QgdGl0bGVSZWN0ID0gZW5j
bG9zaW5nSW50UmVjdChmb250LnNlbGVjdGlvblJlY3RGb3JUZXh0KG5vZGVUaXRsZVJ1biwgdGl0
bGVCYXNlUG9pbnQsIGZvbnRIZWlnaHRQeCkpOwotICAgIHRpdGxlUmVjdC5pbmZsYXRlKHJlY3RJ
bmZsYXRlUHgpOwotCi0gICAgLy8gVGhlIGluaXRpYWwgb2Zmc2V0cyBuZWVkZWQgdG8gY29tcGVu
c2F0ZSBmb3IgYSAxcHgtdGhpY2sgYm9yZGVyIHN0cm9rZSAod2hpY2ggaXMgbm90IGEgcGFydCBv
ZiB0aGUgcmVjdGFuZ2xlKS4KLSAgICBpbnQgZHggPSAtYm9yZGVyV2lkdGhQeDsKLSAgICBpbnQg
ZHkgPSBib3JkZXJXaWR0aFB4OwotCi0gICAgLy8gSWYgdGhlIHRpcCBzdGlja3MgYmV5b25kIHRo
ZSByaWdodCBvZiB2aXNpYmxlUmVjdCwgcmlnaHQtYWxpZ24gdGhlIHRpcCB3aXRoIHRoZSBzYWlk
IGJvdW5kYXJ5LgotICAgIGlmICh0aXRsZVJlY3QubWF4WCgpICsgZHggPiB2aXNpYmxlUmVjdC5t
YXhYKCkpCi0gICAgICAgIGR4ID0gdmlzaWJsZVJlY3QubWF4WCgpIC0gdGl0bGVSZWN0Lm1heFgo
KTsKLQotICAgIC8vIElmIHRoZSB0aXAgc3RpY2tzIGJleW9uZCB0aGUgbGVmdCBvZiB2aXNpYmxl
UmVjdCwgbGVmdC1hbGlnbiB0aGUgdGlwIHdpdGggdGhlIHNhaWQgYm91bmRhcnkuCi0gICAgaWYg
KHRpdGxlUmVjdC54KCkgKyBkeCA8IHZpc2libGVSZWN0LngoKSkKLSAgICAgICAgZHggPSB2aXNp
YmxlUmVjdC54KCkgLSB0aXRsZVJlY3QueCgpIC0gYm9yZGVyV2lkdGhQeDsKLQotICAgIC8vIElm
IHRoZSB0aXAgc3RpY2tzIGJleW9uZCB0aGUgYm90dG9tIG9mIHZpc2libGVSZWN0LCBzaG93IHRo
ZSB0aXAgYXQgdG9wIG9mIGJvdW5kaW5nIGJveC4KLSAgICBpZiAodGl0bGVSZWN0Lm1heFkoKSAr
IGR5ID4gdmlzaWJsZVJlY3QubWF4WSgpKSB7Ci0gICAgICAgIGR5ID0gYW5jaG9yQm94LnkoKSAt
IHRpdGxlUmVjdC5tYXhZKCkgLSBib3JkZXJXaWR0aFB4OwotICAgICAgICAvLyBJZiB0aGUgdGlw
IHN0aWxsIHN0aWNrcyBiZXlvbmQgdGhlIGJvdHRvbSBvZiB2aXNpYmxlUmVjdCwgYm90dG9tLWFs
aWduIHRoZSB0aXAgd2l0aCB0aGUgc2FpZCBib3VuZGFyeS4KLSAgICAgICAgaWYgKHRpdGxlUmVj
dC5tYXhZKCkgKyBkeSA+IHZpc2libGVSZWN0Lm1heFkoKSkKLSAgICAgICAgICAgIGR5ID0gdmlz
aWJsZVJlY3QubWF4WSgpIC0gdGl0bGVSZWN0Lm1heFkoKTsKLSAgICB9Ci0KLSAgICAvLyBJZiB0
aGUgdGlwIHN0aWNrcyBiZXlvbmQgdGhlIHRvcCBvZiB2aXNpYmxlUmVjdCwgc2hvdyB0aGUgdGlw
IGF0IHRvcCBvZiB2aXNpYmxlUmVjdC4KLSAgICBpZiAodGl0bGVSZWN0LnkoKSArIGR5IDwgdmlz
aWJsZVJlY3QueSgpKQotICAgICAgICBkeSA9IHZpc2libGVSZWN0LnkoKSAtIHRpdGxlUmVjdC55
KCkgKyBib3JkZXJXaWR0aFB4OwotCi0gICAgdGl0bGVSZWN0Lm1vdmUoZHgsIGR5KTsKLQotICAg
IGJvb2wgaXNBcnJvd0F0VG9wID0gdGl0bGVSZWN0LnkoKSA+IGFuY2hvckJveC55KCk7Ci0gICAg
dGl0bGVSZWN0Lm1vdmUoMCwgdG9vbHRpcFBhZGRpbmcgKiAoaXNBcnJvd0F0VG9wID8gMSA6IC0x
KSk7Ci0KLSAgICB7Ci0gICAgICAgIGZsb2F0IGFycm93VGlwWCA9IGNhbGN1bGF0ZUFycm93VGlw
WChhbmNob3JCb3gsIHRpdGxlUmVjdCk7Ci0gICAgICAgIGludCBhcnJvd0Jhc2VZID0gaXNBcnJv
d0F0VG9wID8gdGl0bGVSZWN0LnkoKSA6IHRpdGxlUmVjdC5tYXhZKCk7Ci0gICAgICAgIGludCBh
cnJvd09wcG9zaXRlWSA9IGlzQXJyb3dBdFRvcCA/IHRpdGxlUmVjdC5tYXhZKCkgOiB0aXRsZVJl
Y3QueSgpOwotCi0gICAgICAgIEZsb2F0UG9pbnQgcG9pbnRzWzhdOwotICAgICAgICBwb2ludHNb
MF0gPSBGbG9hdFBvaW50KGFycm93VGlwWCAtIGFycm93SGFsZldpZHRoLCBhcnJvd0Jhc2VZKTsK
LSAgICAgICAgcG9pbnRzWzFdID0gRmxvYXRQb2ludChhcnJvd1RpcFgsIGFycm93QmFzZVkgKyBh
cnJvd0hlaWdodCAqIChpc0Fycm93QXRUb3AgPyAtMSA6IDEpKTsKLSAgICAgICAgcG9pbnRzWzJd
ID0gRmxvYXRQb2ludChhcnJvd1RpcFggKyBhcnJvd0hhbGZXaWR0aCwgYXJyb3dCYXNlWSk7Ci0g
ICAgICAgIHBvaW50c1szXSA9IEZsb2F0UG9pbnQodGl0bGVSZWN0Lm1heFgoKSwgYXJyb3dCYXNl
WSk7Ci0gICAgICAgIHBvaW50c1s0XSA9IEZsb2F0UG9pbnQodGl0bGVSZWN0Lm1heFgoKSwgYXJy
b3dPcHBvc2l0ZVkpOwotICAgICAgICBwb2ludHNbNV0gPSBGbG9hdFBvaW50KHRpdGxlUmVjdC54
KCksIGFycm93T3Bwb3NpdGVZKTsKLSAgICAgICAgcG9pbnRzWzZdID0gRmxvYXRQb2ludCh0aXRs
ZVJlY3QueCgpLCBhcnJvd0Jhc2VZKTsKLSAgICAgICAgcG9pbnRzWzddID0gcG9pbnRzWzBdOwot
Ci0gICAgICAgIFBhdGggcGF0aDsKLSAgICAgICAgcGF0aC5tb3ZlVG8ocG9pbnRzWzBdKTsKLSAg
ICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCA4OyArK2kpCi0gICAgICAgICAgICBwYXRoLmFkZExp
bmVUbyhwb2ludHNbaV0pOwotCi0gICAgICAgIGNvbnRleHQuc2F2ZSgpOwotICAgICAgICBjb250
ZXh0LnRyYW5zbGF0ZSgwLjVmLCAwLjVmKTsKLSAgICAgICAgY29udGV4dC5zZXRTdHJva2VDb2xv
cihweEFuZEJvcmRlckNvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKLSAgICAgICAgY29udGV4
dC5zZXRGaWxsQ29sb3IoYmFja2dyb3VuZENvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKLSAg
ICAgICAgY29udGV4dC5zZXRTdHJva2VUaGlja25lc3MoYm9yZGVyV2lkdGhQeCk7Ci0gICAgICAg
IGNvbnRleHQuZmlsbFBhdGgocGF0aCk7Ci0gICAgICAgIGNvbnRleHQuc3Ryb2tlUGF0aChwYXRo
KTsKLSAgICAgICAgY29udGV4dC5yZXN0b3JlKCk7Ci0gICAgfQotCi0gICAgaW50IGN1cnJlbnRQ
b3MgPSAwOwotICAgIGN1cnJlbnRQb3MgPSBkcmF3U3Vic3RyaW5nKG5vZGVUaXRsZVJ1biwgY3Vy
cmVudFBvcywgdGFnTmFtZUxlbmd0aCwgdGFnQ29sb3IsIGZvbnQsIGNvbnRleHQsIHRpdGxlUmVj
dCk7Ci0gICAgaWYgKGlkU3RyaW5nTGVuZ3RoKQotICAgICAgICBjdXJyZW50UG9zID0gZHJhd1N1
YnN0cmluZyhub2RlVGl0bGVSdW4sIGN1cnJlbnRQb3MsIGlkU3RyaW5nTGVuZ3RoLCBhdHRyQ29s
b3IsIGZvbnQsIGNvbnRleHQsIHRpdGxlUmVjdCk7Ci0gICAgaWYgKGNsYXNzZXNTdHJpbmdMZW5n
dGgpCi0gICAgICAgIGN1cnJlbnRQb3MgPSBkcmF3U3Vic3RyaW5nKG5vZGVUaXRsZVJ1biwgY3Vy
cmVudFBvcywgY2xhc3Nlc1N0cmluZ0xlbmd0aCwgYXR0ckNvbG9yLCBmb250LCBjb250ZXh0LCB0
aXRsZVJlY3QpOwotICAgIGN1cnJlbnRQb3MgPSBkcmF3U3Vic3RyaW5nKG5vZGVUaXRsZVJ1biwg
Y3VycmVudFBvcywgd2lkdGhOdW1iZXJQYXJ0Lmxlbmd0aCgpLCBub3JtYWxDb2xvciwgZm9udCwg
Y29udGV4dCwgdGl0bGVSZWN0KTsKLSAgICBjdXJyZW50UG9zID0gZHJhd1N1YnN0cmluZyhub2Rl
VGl0bGVSdW4sIGN1cnJlbnRQb3MsIHB4U3RyaW5nLmxlbmd0aCgpICsgdGltZXNTdHJpbmcubGVu
Z3RoKCksIHB4QW5kQm9yZGVyQ29sb3IsIGZvbnQsIGNvbnRleHQsIHRpdGxlUmVjdCk7Ci0gICAg
Y3VycmVudFBvcyA9IGRyYXdTdWJzdHJpbmcobm9kZVRpdGxlUnVuLCBjdXJyZW50UG9zLCBoZWln
aHROdW1iZXJQYXJ0Lmxlbmd0aCgpLCBub3JtYWxDb2xvciwgZm9udCwgY29udGV4dCwgdGl0bGVS
ZWN0KTsKLSAgICBkcmF3U3Vic3RyaW5nKG5vZGVUaXRsZVJ1biwgY3VycmVudFBvcywgcHhTdHJp
bmcubGVuZ3RoKCksIHB4QW5kQm9yZGVyQ29sb3IsIGZvbnQsIGNvbnRleHQsIHRpdGxlUmVjdCk7
Ci19Ci0KLXN0YXRpYyB2b2lkIGNvbnRlbnRzUXVhZFRvUGFnZShjb25zdCBGcmFtZVZpZXcqIG1h
aW5WaWV3LCBjb25zdCBGcmFtZVZpZXcqIHZpZXcsIEZsb2F0UXVhZCYgcXVhZCkKLXsKLSAgICBx
dWFkLnNldFAxKHZpZXctPmNvbnRlbnRzVG9Sb290Vmlldyhyb3VuZGVkSW50UG9pbnQocXVhZC5w
MSgpKSkpOwotICAgIHF1YWQuc2V0UDIodmlldy0+Y29udGVudHNUb1Jvb3RWaWV3KHJvdW5kZWRJ
bnRQb2ludChxdWFkLnAyKCkpKSk7Ci0gICAgcXVhZC5zZXRQMyh2aWV3LT5jb250ZW50c1RvUm9v
dFZpZXcocm91bmRlZEludFBvaW50KHF1YWQucDMoKSkpKTsKLSAgICBxdWFkLnNldFA0KHZpZXct
PmNvbnRlbnRzVG9Sb290Vmlldyhyb3VuZGVkSW50UG9pbnQocXVhZC5wNCgpKSkpOwotICAgIHF1
YWQgKz0gbWFpblZpZXctPnNjcm9sbE9mZnNldCgpOwotfQotCi1zdGF0aWMgdm9pZCBnZXRPckRy
YXdOb2RlSGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgTm9kZSogbm9kZSwgY29u
c3QgSGlnaGxpZ2h0Q29uZmlnJiBoaWdobGlnaHRDb25maWcsIEhpZ2hsaWdodCogaGlnaGxpZ2h0
KQotewotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwotICAg
IEZyYW1lKiBjb250YWluaW5nRnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpOwotCi0g
ICAgaWYgKCFyZW5kZXJlciB8fCAhY29udGFpbmluZ0ZyYW1lKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBGcmFtZVZpZXcqIGNvbnRhaW5pbmdWaWV3ID0gY29udGFpbmluZ0ZyYW1lLT52aWV3KCk7
Ci0gICAgRnJhbWVWaWV3KiBtYWluVmlldyA9IGNvbnRhaW5pbmdGcmFtZS0+cGFnZSgpLT5tYWlu
RnJhbWUoKS0+dmlldygpOwotICAgIEludFJlY3QgYm91bmRpbmdCb3ggPSBwaXhlbFNuYXBwZWRJ
bnRSZWN0KGNvbnRhaW5pbmdWaWV3LT5jb250ZW50c1RvUm9vdFZpZXcocmVuZGVyZXItPmFic29s
dXRlQm91bmRpbmdCb3hSZWN0KCkpKTsKLSAgICBib3VuZGluZ0JveC5tb3ZlKG1haW5WaWV3LT5z
Y3JvbGxPZmZzZXQoKSk7Ci0gICAgSW50UmVjdCB0aXRsZUFuY2hvckJveCA9IGJvdW5kaW5nQm94
OwotCi0gICAgRmxvYXRSZWN0IHZpc2libGVSZWN0ID0gbWFpblZpZXctPnZpc2libGVDb250ZW50
UmVjdCgpOwotICAgIC8vIERvbid0IHRyYW5zbGF0ZSB0aGUgY29udGV4dCBpZiB0aGUgZnJhbWUg
aXMgcmVuZGVyZWQgaW4gcGFnZSBjb29yZGluYXRlcy4KLSAgICBpZiAoY29udGV4dCAmJiAhbWFp
blZpZXctPmRlbGVnYXRlc1Njcm9sbGluZygpKQotICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUo
LXZpc2libGVSZWN0LngoKSwgLXZpc2libGVSZWN0LnkoKSk7Ci0KLSAgICAvLyBSZW5kZXJTVkdS
b290IHNob3VsZCBiZSBoaWdobGlnaHRlZCB0aHJvdWdoIHRoZSBpc0JveCgpIGNvZGUgcGF0aCwg
YWxsIG90aGVyIFNWRyBlbGVtZW50cyBzaG91bGQganVzdCBkdW1wIHRoZWlyIGFic29sdXRlUXVh
ZHMoKS4KLSNpZiBFTkFCTEUoU1ZHKQotICAgIGJvb2wgaXNTVkdSZW5kZXJlciA9IHJlbmRlcmVy
LT5ub2RlKCkgJiYgcmVuZGVyZXItPm5vZGUoKS0+aXNTVkdFbGVtZW50KCkgJiYgIXJlbmRlcmVy
LT5pc1NWR1Jvb3QoKTsKLSNlbHNlCi0gICAgYm9vbCBpc1NWR1JlbmRlcmVyID0gZmFsc2U7Ci0j
ZW5kaWYKLQotICAgIGlmIChpc1NWR1JlbmRlcmVyKSB7Ci0gICAgICAgIGhpZ2hsaWdodC0+dHlw
ZSA9IEhpZ2hsaWdodFR5cGVSZWN0czsKLSAgICAgICAgcmVuZGVyZXItPmFic29sdXRlUXVhZHMo
aGlnaGxpZ2h0LT5xdWFkcyk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaGlnaGxp
Z2h0LT5xdWFkcy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIGNvbnRlbnRzUXVhZFRvUGFnZSht
YWluVmlldywgY29udGFpbmluZ1ZpZXcsIGhpZ2hsaWdodC0+cXVhZHNbaV0pOwotCi0gICAgICAg
IGlmIChjb250ZXh0KQotICAgICAgICAgICAgZHJhd0hpZ2hsaWdodEZvclNWR1JlbmRlcmVyKCpj
b250ZXh0LCBoaWdobGlnaHQtPnF1YWRzLCBoaWdobGlnaHRDb25maWcpOwotICAgIH0gZWxzZSBp
ZiAocmVuZGVyZXItPmlzQm94KCkgfHwgcmVuZGVyZXItPmlzUmVuZGVySW5saW5lKCkpIHsKLSAg
ICAgICAgTGF5b3V0UmVjdCBjb250ZW50Qm94OwotICAgICAgICBMYXlvdXRSZWN0IHBhZGRpbmdC
b3g7Ci0gICAgICAgIExheW91dFJlY3QgYm9yZGVyQm94OwotICAgICAgICBMYXlvdXRSZWN0IG1h
cmdpbkJveDsKLQotICAgICAgICBpZiAocmVuZGVyZXItPmlzQm94KCkpIHsKLSAgICAgICAgICAg
IFJlbmRlckJveCogcmVuZGVyQm94ID0gdG9SZW5kZXJCb3gocmVuZGVyZXIpOwotCi0gICAgICAg
ICAgICAvLyBSZW5kZXJCb3ggcmV0dXJucyB0aGUgInB1cmUiIGNvbnRlbnQgYXJlYSBib3gsIGV4
Y2x1c2l2ZSBvZiB0aGUgc2Nyb2xsYmFycyAoaWYgcHJlc2VudCksIHdoaWNoIGFsc28gY291bnQg
dG93YXJkcyB0aGUgY29udGVudCBhcmVhIGluIENTUy4KLSAgICAgICAgICAgIGNvbnRlbnRCb3gg
PSByZW5kZXJCb3gtPmNvbnRlbnRCb3hSZWN0KCk7Ci0gICAgICAgICAgICBjb250ZW50Qm94LnNl
dFdpZHRoKGNvbnRlbnRCb3gud2lkdGgoKSArIHJlbmRlckJveC0+dmVydGljYWxTY3JvbGxiYXJX
aWR0aCgpKTsKLSAgICAgICAgICAgIGNvbnRlbnRCb3guc2V0SGVpZ2h0KGNvbnRlbnRCb3guaGVp
Z2h0KCkgKyByZW5kZXJCb3gtPmhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKSk7Ci0KLSAgICAg
ICAgICAgIHBhZGRpbmdCb3ggPSBMYXlvdXRSZWN0KGNvbnRlbnRCb3gueCgpIC0gcmVuZGVyQm94
LT5wYWRkaW5nTGVmdCgpLCBjb250ZW50Qm94LnkoKSAtIHJlbmRlckJveC0+cGFkZGluZ1RvcCgp
LAotICAgICAgICAgICAgICAgICAgICBjb250ZW50Qm94LndpZHRoKCkgKyByZW5kZXJCb3gtPnBh
ZGRpbmdMZWZ0KCkgKyByZW5kZXJCb3gtPnBhZGRpbmdSaWdodCgpLCBjb250ZW50Qm94LmhlaWdo
dCgpICsgcmVuZGVyQm94LT5wYWRkaW5nVG9wKCkgKyByZW5kZXJCb3gtPnBhZGRpbmdCb3R0b20o
KSk7Ci0gICAgICAgICAgICBib3JkZXJCb3ggPSBMYXlvdXRSZWN0KHBhZGRpbmdCb3gueCgpIC0g
cmVuZGVyQm94LT5ib3JkZXJMZWZ0KCksIHBhZGRpbmdCb3gueSgpIC0gcmVuZGVyQm94LT5ib3Jk
ZXJUb3AoKSwKLSAgICAgICAgICAgICAgICAgICAgcGFkZGluZ0JveC53aWR0aCgpICsgcmVuZGVy
Qm94LT5ib3JkZXJMZWZ0KCkgKyByZW5kZXJCb3gtPmJvcmRlclJpZ2h0KCksIHBhZGRpbmdCb3gu
aGVpZ2h0KCkgKyByZW5kZXJCb3gtPmJvcmRlclRvcCgpICsgcmVuZGVyQm94LT5ib3JkZXJCb3R0
b20oKSk7Ci0gICAgICAgICAgICBtYXJnaW5Cb3ggPSBMYXlvdXRSZWN0KGJvcmRlckJveC54KCkg
LSByZW5kZXJCb3gtPm1hcmdpbkxlZnQoKSwgYm9yZGVyQm94LnkoKSAtIHJlbmRlckJveC0+bWFy
Z2luVG9wKCksCi0gICAgICAgICAgICAgICAgICAgIGJvcmRlckJveC53aWR0aCgpICsgcmVuZGVy
Qm94LT5tYXJnaW5XaWR0aCgpLCBib3JkZXJCb3guaGVpZ2h0KCkgKyByZW5kZXJCb3gtPm1hcmdp
bkhlaWdodCgpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFJlbmRlcklubGluZSog
cmVuZGVySW5saW5lID0gdG9SZW5kZXJJbmxpbmUocmVuZGVyZXIpOwotCi0gICAgICAgICAgICAv
LyBSZW5kZXJJbmxpbmUncyBib3VuZGluZyBib3ggaW5jbHVkZXMgcGFkZGluZ3MgYW5kIGJvcmRl
cnMsIGV4Y2x1ZGVzIG1hcmdpbnMuCi0gICAgICAgICAgICBib3JkZXJCb3ggPSByZW5kZXJJbmxp
bmUtPmxpbmVzQm91bmRpbmdCb3goKTsKLSAgICAgICAgICAgIHBhZGRpbmdCb3ggPSBMYXlvdXRS
ZWN0KGJvcmRlckJveC54KCkgKyByZW5kZXJJbmxpbmUtPmJvcmRlckxlZnQoKSwgYm9yZGVyQm94
LnkoKSArIHJlbmRlcklubGluZS0+Ym9yZGVyVG9wKCksCi0gICAgICAgICAgICAgICAgICAgIGJv
cmRlckJveC53aWR0aCgpIC0gcmVuZGVySW5saW5lLT5ib3JkZXJMZWZ0KCkgLSByZW5kZXJJbmxp
bmUtPmJvcmRlclJpZ2h0KCksIGJvcmRlckJveC5oZWlnaHQoKSAtIHJlbmRlcklubGluZS0+Ym9y
ZGVyVG9wKCkgLSByZW5kZXJJbmxpbmUtPmJvcmRlckJvdHRvbSgpKTsKLSAgICAgICAgICAgIGNv
bnRlbnRCb3ggPSBMYXlvdXRSZWN0KHBhZGRpbmdCb3gueCgpICsgcmVuZGVySW5saW5lLT5wYWRk
aW5nTGVmdCgpLCBwYWRkaW5nQm94LnkoKSArIHJlbmRlcklubGluZS0+cGFkZGluZ1RvcCgpLAot
ICAgICAgICAgICAgICAgICAgICBwYWRkaW5nQm94LndpZHRoKCkgLSByZW5kZXJJbmxpbmUtPnBh
ZGRpbmdMZWZ0KCkgLSByZW5kZXJJbmxpbmUtPnBhZGRpbmdSaWdodCgpLCBwYWRkaW5nQm94Lmhl
aWdodCgpIC0gcmVuZGVySW5saW5lLT5wYWRkaW5nVG9wKCkgLSByZW5kZXJJbmxpbmUtPnBhZGRp
bmdCb3R0b20oKSk7Ci0gICAgICAgICAgICAvLyBJZ25vcmUgbWFyZ2luVG9wIGFuZCBtYXJnaW5C
b3R0b20gZm9yIGlubGluZXMuCi0gICAgICAgICAgICBtYXJnaW5Cb3ggPSBMYXlvdXRSZWN0KGJv
cmRlckJveC54KCkgLSByZW5kZXJJbmxpbmUtPm1hcmdpbkxlZnQoKSwgYm9yZGVyQm94LnkoKSwK
LSAgICAgICAgICAgICAgICAgICAgYm9yZGVyQm94LndpZHRoKCkgKyByZW5kZXJJbmxpbmUtPm1h
cmdpbldpZHRoKCksIGJvcmRlckJveC5oZWlnaHQoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBG
bG9hdFF1YWQgYWJzQ29udGVudFF1YWQgPSByZW5kZXJlci0+bG9jYWxUb0Fic29sdXRlUXVhZChG
bG9hdFJlY3QoY29udGVudEJveCkpOwotICAgICAgICBGbG9hdFF1YWQgYWJzUGFkZGluZ1F1YWQg
PSByZW5kZXJlci0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QocGFkZGluZ0JveCkpOwot
ICAgICAgICBGbG9hdFF1YWQgYWJzQm9yZGVyUXVhZCA9IHJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1
dGVRdWFkKEZsb2F0UmVjdChib3JkZXJCb3gpKTsKLSAgICAgICAgRmxvYXRRdWFkIGFic01hcmdp
blF1YWQgPSByZW5kZXJlci0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QobWFyZ2luQm94
KSk7Ci0KLSAgICAgICAgY29udGVudHNRdWFkVG9QYWdlKG1haW5WaWV3LCBjb250YWluaW5nVmll
dywgYWJzQ29udGVudFF1YWQpOwotICAgICAgICBjb250ZW50c1F1YWRUb1BhZ2UobWFpblZpZXcs
IGNvbnRhaW5pbmdWaWV3LCBhYnNQYWRkaW5nUXVhZCk7Ci0gICAgICAgIGNvbnRlbnRzUXVhZFRv
UGFnZShtYWluVmlldywgY29udGFpbmluZ1ZpZXcsIGFic0JvcmRlclF1YWQpOwotICAgICAgICBj
b250ZW50c1F1YWRUb1BhZ2UobWFpblZpZXcsIGNvbnRhaW5pbmdWaWV3LCBhYnNNYXJnaW5RdWFk
KTsKLQotICAgICAgICB0aXRsZUFuY2hvckJveCA9IGFic01hcmdpblF1YWQuZW5jbG9zaW5nQm91
bmRpbmdCb3goKTsKLQotICAgICAgICBoaWdobGlnaHQtPnR5cGUgPSBIaWdobGlnaHRUeXBlTm9k
ZTsKLSAgICAgICAgaGlnaGxpZ2h0LT5xdWFkcy5hcHBlbmQoYWJzTWFyZ2luUXVhZCk7Ci0gICAg
ICAgIGhpZ2hsaWdodC0+cXVhZHMuYXBwZW5kKGFic0JvcmRlclF1YWQpOwotICAgICAgICBoaWdo
bGlnaHQtPnF1YWRzLmFwcGVuZChhYnNQYWRkaW5nUXVhZCk7Ci0gICAgICAgIGhpZ2hsaWdodC0+
cXVhZHMuYXBwZW5kKGFic0NvbnRlbnRRdWFkKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAg
ICAgICAgICAgIGRyYXdIaWdobGlnaHRGb3JCb3goKmNvbnRleHQsIGFic0NvbnRlbnRRdWFkLCBh
YnNQYWRkaW5nUXVhZCwgYWJzQm9yZGVyUXVhZCwgYWJzTWFyZ2luUXVhZCwgaGlnaGxpZ2h0Q29u
ZmlnKTsKLSAgICB9Ci0KLSAgICAvLyBEcmF3IG5vZGUgdGl0bGUgaWYgbmVjZXNzYXJ5LgotCi0g
ICAgaWYgKCFub2RlLT5pc0VsZW1lbnROb2RlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChjb250ZXh0ICYmIGhpZ2hsaWdodENvbmZpZy5zaG93SW5mbykKLSAgICAgICAgZHJhd0VsZW1l
bnRUaXRsZSgqY29udGV4dCwgbm9kZSwgcmVuZGVyZXIsIHBpeGVsU25hcHBlZEludFJlY3QoYm91
bmRpbmdCb3gpLCBwaXhlbFNuYXBwZWRJbnRSZWN0KHRpdGxlQW5jaG9yQm94KSwgdmlzaWJsZVJl
Y3QsIGNvbnRhaW5pbmdGcmFtZS0+c2V0dGluZ3MoKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGdldE9y
RHJhd1JlY3RIaWdobGlnaHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBQYWdlKiBwYWdlLCBJ
bnRSZWN0KiByZWN0LCBjb25zdCBIaWdobGlnaHRDb25maWcmIGhpZ2hsaWdodENvbmZpZywgSGln
aGxpZ2h0ICpoaWdobGlnaHQpCi17Ci0gICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBGbG9hdFJlY3QgaGlnaGxpZ2h0UmVjdCgqcmVjdCk7Ci0KLSAgICBoaWdobGlnaHQtPnR5
cGUgPSBIaWdobGlnaHRUeXBlUmVjdHM7Ci0gICAgaGlnaGxpZ2h0LT5xdWFkcy5hcHBlbmQoaGln
aGxpZ2h0UmVjdCk7Ci0KLSAgICBpZiAoY29udGV4dCkgewotICAgICAgICBGcmFtZVZpZXcqIHZp
ZXcgPSBwYWdlLT5tYWluRnJhbWUoKS0+dmlldygpOwotICAgICAgICBpZiAoIXZpZXctPmRlbGVn
YXRlc1Njcm9sbGluZygpKSB7Ci0gICAgICAgICAgICBGbG9hdFJlY3QgdmlzaWJsZVJlY3QgPSB2
aWV3LT52aXNpYmxlQ29udGVudFJlY3QoKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnRyYW5zbGF0
ZSgtdmlzaWJsZVJlY3QueCgpLCAtdmlzaWJsZVJlY3QueSgpKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGRyYXdPdXRsaW5lZFF1YWQoKmNvbnRleHQsIGhpZ2hsaWdodFJlY3QsIGhpZ2hsaWdodENv
bmZpZy5jb250ZW50LCBoaWdobGlnaHRDb25maWcuY29udGVudE91dGxpbmUpOwotICAgIH0KLX0K
LQotfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCi0KLUluc3BlY3Rvck92ZXJsYXk6Okluc3BlY3Rv
ck92ZXJsYXkoUGFnZSogcGFnZSwgSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQpCi0gICAgOiBtX3Bh
Z2UocGFnZSkKLSAgICAsIG1fY2xpZW50KGNsaWVudCkKLXsKLX0KLQotdm9pZCBJbnNwZWN0b3JP
dmVybGF5OjpwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgZHJhd1BhdXNl
ZEluRGVidWdnZXIoY29udGV4dCk7Ci0gICAgZHJhd05vZGVIaWdobGlnaHQoY29udGV4dCk7Ci0g
ICAgZHJhd1JlY3RIaWdobGlnaHQoY29udGV4dCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yT3Zlcmxh
eTo6ZHJhd091dGxpbmUoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0
JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgRmxvYXRSZWN0IG91dGxpbmVSZWN0
ID0gcmVjdDsKLSAgICBkcmF3T3V0bGluZWRRdWFkKGNvbnRleHQsIG91dGxpbmVSZWN0LCBDb2xv
cigpLCBjb2xvcik7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6Z2V0SGlnaGxpZ2h0KEhp
Z2hsaWdodCogaGlnaGxpZ2h0KSBjb25zdAotewotICAgIGlmICghbV9oaWdobGlnaHROb2RlICYm
ICFtX2hpZ2hsaWdodFJlY3QpCi0gICAgICAgIHJldHVybjsKLQotICAgIGhpZ2hsaWdodC0+dHlw
ZSA9IEhpZ2hsaWdodFR5cGVSZWN0czsKLSAgICBpZiAobV9oaWdobGlnaHROb2RlKSB7Ci0gICAg
ICAgIGhpZ2hsaWdodC0+c2V0Q29sb3JzKG1fbm9kZUhpZ2hsaWdodENvbmZpZyk7Ci0gICAgICAg
IGdldE9yRHJhd05vZGVIaWdobGlnaHQoMCwgbV9oaWdobGlnaHROb2RlLmdldCgpLCBtX25vZGVI
aWdobGlnaHRDb25maWcsIGhpZ2hsaWdodCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaGlnaGxp
Z2h0LT5zZXRDb2xvcnMobV9yZWN0SGlnaGxpZ2h0Q29uZmlnKTsKLSAgICAgICAgZ2V0T3JEcmF3
UmVjdEhpZ2hsaWdodCgwLCBtX3BhZ2UsIG1faGlnaGxpZ2h0UmVjdC5nZXQoKSwgbV9yZWN0SGln
aGxpZ2h0Q29uZmlnLCBoaWdobGlnaHQpOwotICAgIH0KLX0KLQotdm9pZCBJbnNwZWN0b3JPdmVy
bGF5OjpzZXRQYXVzZWRJbkRlYnVnZ2VyTWVzc2FnZShjb25zdCBTdHJpbmcqIG1lc3NhZ2UpCi17
Ci0gICAgbV9wYXVzZWRJbkRlYnVnZ2VyTWVzc2FnZSA9IG1lc3NhZ2UgPyAqbWVzc2FnZSA6IFN0
cmluZygpOwotICAgIHVwZGF0ZSgpOwotfQotCi12b2lkIEluc3BlY3Rvck92ZXJsYXk6OmhpZGVI
aWdobGlnaHQoKQotewotICAgIG1faGlnaGxpZ2h0Tm9kZS5jbGVhcigpOwotICAgIG1faGlnaGxp
Z2h0UmVjdC5jbGVhcigpOwotICAgIHVwZGF0ZSgpOwotfQotCi12b2lkIEluc3BlY3Rvck92ZXJs
YXk6OmhpZ2hsaWdodE5vZGUoTm9kZSogbm9kZSwgY29uc3QgSGlnaGxpZ2h0Q29uZmlnJiBoaWdo
bGlnaHRDb25maWcpCi17Ci0gICAgbV9ub2RlSGlnaGxpZ2h0Q29uZmlnID0gaGlnaGxpZ2h0Q29u
ZmlnOwotICAgIG1faGlnaGxpZ2h0Tm9kZSA9IG5vZGU7Ci0gICAgdXBkYXRlKCk7Ci19Ci0KLXZv
aWQgSW5zcGVjdG9yT3ZlcmxheTo6aGlnaGxpZ2h0UmVjdChQYXNzT3duUHRyPEludFJlY3Q+IHJl
Y3QsIGNvbnN0IEhpZ2hsaWdodENvbmZpZyYgaGlnaGxpZ2h0Q29uZmlnKQotewotICAgIG1fcmVj
dEhpZ2hsaWdodENvbmZpZyA9IGhpZ2hsaWdodENvbmZpZzsKLSAgICBtX2hpZ2hsaWdodFJlY3Qg
PSByZWN0OwotICAgIHVwZGF0ZSgpOwotfQotCi1Ob2RlKiBJbnNwZWN0b3JPdmVybGF5OjpoaWdo
bGlnaHRlZE5vZGUoKSBjb25zdAotewotICAgIHJldHVybiBtX2hpZ2hsaWdodE5vZGUuZ2V0KCk7
Ci19Ci0KLXZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6dXBkYXRlKCkKLXsKLSAgICBpZiAobV9oaWdo
bGlnaHROb2RlIHx8IG1faGlnaGxpZ2h0UmVjdCB8fCAhbV9wYXVzZWRJbkRlYnVnZ2VyTWVzc2Fn
ZS5pc051bGwoKSkKLSAgICAgICAgbV9jbGllbnQtPmhpZ2hsaWdodCgpOwotICAgIGVsc2UKLSAg
ICAgICAgbV9jbGllbnQtPmhpZGVIaWdobGlnaHQoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JPdmVy
bGF5OjpkcmF3Tm9kZUhpZ2hsaWdodChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi17Ci0gICAg
aWYgKCFtX2hpZ2hsaWdodE5vZGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIEhpZ2hsaWdodCBo
aWdobGlnaHQ7Ci0gICAgZ2V0T3JEcmF3Tm9kZUhpZ2hsaWdodCgmY29udGV4dCwgbV9oaWdobGln
aHROb2RlLmdldCgpLCBtX25vZGVIaWdobGlnaHRDb25maWcsICZoaWdobGlnaHQpOwotfQotCi12
b2lkIEluc3BlY3Rvck92ZXJsYXk6OmRyYXdSZWN0SGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkKLXsKLSAgICBpZiAoIW1faGlnaGxpZ2h0UmVjdCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgSGlnaGxpZ2h0IGhpZ2hsaWdodDsKLSAgICBnZXRPckRyYXdSZWN0SGlnaGxpZ2h0KCZj
b250ZXh0LCBtX3BhZ2UsIG1faGlnaGxpZ2h0UmVjdC5nZXQoKSwgbV9yZWN0SGlnaGxpZ2h0Q29u
ZmlnLCAmaGlnaGxpZ2h0KTsKLX0KLQotdm9pZCBJbnNwZWN0b3JPdmVybGF5OjpkcmF3UGF1c2Vk
SW5EZWJ1Z2dlcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgaWYgKG1fcGF1c2Vk
SW5EZWJ1Z2dlck1lc3NhZ2UuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoQ29sb3IsIGJhY2tncm91bmRDb2xvciwgKDAsIDAsIDAsIDMxKSk7Ci0g
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChDb2xvciwgdGV4dEJhY2tncm91bmRDb2xvciwgKDI1NSwg
MjU1LCAxOTQpKTsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKENvbG9yLCBib3JkZXJDb2xvciwg
KDEyOCwgMTI4LCAxMjgpKTsKLQotICAgIEZyYW1lKiBmcmFtZSA9IG1fcGFnZS0+bWFpbkZyYW1l
KCk7Ci0gICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZnJhbWUtPnNldHRpbmdzKCk7Ci0gICAgSW50
UmVjdCB2aXNpYmxlUmVjdCA9IEludFJlY3QoSW50UG9pbnQoKSwgZnJhbWUtPnZpZXcoKS0+dmlz
aWJsZVNpemUoKSk7Ci0KLSAgICBjb250ZXh0LnNldEZpbGxDb2xvcihiYWNrZ3JvdW5kQ29sb3Is
IENvbG9yU3BhY2VEZXZpY2VSR0IpOwotICAgIGNvbnRleHQuZmlsbFJlY3QodmlzaWJsZVJlY3Qp
OwotCi0gICAgRm9udERlc2NyaXB0aW9uIGRlc2M7Ci0gICAgc2V0VXBGb250RGVzY3JpcHRpb24o
ZGVzYywgc2V0dGluZ3MpOwotICAgIEZvbnQgZm9udCA9IEZvbnQoZGVzYywgMCwgMCk7Ci0gICAg
Zm9udC51cGRhdGUoMCk7Ci0KLSAgICBUZXh0UnVuIHRleHRSdW4obV9wYXVzZWRJbkRlYnVnZ2Vy
TWVzc2FnZSk7Ci0gICAgSW50UmVjdCB0aXRsZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGZvbnQu
c2VsZWN0aW9uUmVjdEZvclRleHQodGV4dFJ1biwgSW50UG9pbnQoKSwgZm9udEhlaWdodFB4KSk7
Ci0gICAgdGl0bGVSZWN0LmluZmxhdGUocmVjdEluZmxhdGVQeCk7Ci0gICAgdGl0bGVSZWN0LnNl
dExvY2F0aW9uKEludFBvaW50KHZpc2libGVSZWN0LndpZHRoKCkgLyAyIC0gdGl0bGVSZWN0Lndp
ZHRoKCkgLyAyLCAwKSk7Ci0KLSAgICBjb250ZXh0LnNldEZpbGxDb2xvcih0ZXh0QmFja2dyb3Vu
ZENvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKLSAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9y
KGJvcmRlckNvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKLSAgICBjb250ZXh0LmRyYXdSZWN0
KHRpdGxlUmVjdCk7Ci0gICAgZHJhd1N1YnN0cmluZyh0ZXh0UnVuLCAwLCBtX3BhdXNlZEluRGVi
dWdnZXJNZXNzYWdlLmxlbmd0aCgpLCBDb2xvcjo6YmxhY2ssIGZvbnQsIGNvbnRleHQsIHRpdGxl
UmVjdCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJ
TlNQRUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NTm9kZUhp
Z2hsaWdodGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NTm9kZUhpZ2hsaWdodGVy
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjN2QwMGMxNTQyNDk2MDc4MGUxNjI5
M2Q4YjIzMGVmY2U2YmE1ZTAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTU5vZGVIaWdobGlnaHRlci5oCisr
KyAvZGV2L251bGwKQEAgLTEsMTI0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMu
ICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3Ig
dGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIERPTU5vZGVIaWdobGlnaHRl
cl9oCi0jZGVmaW5lIERPTU5vZGVIaWdobGlnaHRlcl9oCi0KLSNpbmNsdWRlICJDb2xvci5oIgot
I2luY2x1ZGUgIkZsb2F0UXVhZC5oIgotI2luY2x1ZGUgIkxheW91dFR5cGVzLmgiCi0jaW5jbHVk
ZSAiTm9kZS5oIgotCi0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9QYXNz
T3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBDb2xvcjsKLWNsYXNzIEdyYXBoaWNz
Q29udGV4dDsKLWNsYXNzIEluc3BlY3RvckNsaWVudDsKLWNsYXNzIEludFJlY3Q7Ci1jbGFzcyBO
b2RlOwotY2xhc3MgUGFnZTsKLQotc3RydWN0IEhpZ2hsaWdodENvbmZpZyB7Ci0gICAgQ29sb3Ig
Y29udGVudDsKLSAgICBDb2xvciBjb250ZW50T3V0bGluZTsKLSAgICBDb2xvciBwYWRkaW5nOwot
ICAgIENvbG9yIGJvcmRlcjsKLSAgICBDb2xvciBtYXJnaW47Ci0gICAgYm9vbCBzaG93SW5mbzsK
LX07Ci0KLWVudW0gSGlnaGxpZ2h0VHlwZSB7Ci0gICAgSGlnaGxpZ2h0VHlwZU5vZGUsCi0gICAg
SGlnaGxpZ2h0VHlwZVJlY3RzLAotfTsKLQotc3RydWN0IEhpZ2hsaWdodCB7Ci0gICAgdm9pZCBz
ZXRDb2xvcnMoY29uc3QgSGlnaGxpZ2h0Q29uZmlnJiBoaWdobGlnaHRDb25maWcpCi0gICAgewot
ICAgICAgICBjb250ZW50Q29sb3IgPSBoaWdobGlnaHRDb25maWcuY29udGVudDsKLSAgICAgICAg
cGFkZGluZ0NvbG9yID0gaGlnaGxpZ2h0Q29uZmlnLnBhZGRpbmc7Ci0gICAgICAgIGJvcmRlckNv
bG9yID0gaGlnaGxpZ2h0Q29uZmlnLmJvcmRlcjsKLSAgICAgICAgbWFyZ2luQ29sb3IgPSBoaWdo
bGlnaHRDb25maWcubWFyZ2luOwotICAgIH0KLQotICAgIENvbG9yIGNvbnRlbnRDb2xvcjsKLSAg
ICBDb2xvciBwYWRkaW5nQ29sb3I7Ci0gICAgQ29sb3IgYm9yZGVyQ29sb3I7Ci0gICAgQ29sb3Ig
bWFyZ2luQ29sb3I7Ci0KLSAgICAvLyBXaGVuIHRoZSB0eXBlIGlzIE5vZGUsIHRoZXJlIGFyZSA0
IHF1YWRzIChtYXJnaW4sIGJvcmRlciwgcGFkZGluZywgY29udGVudCkuCi0gICAgLy8gV2hlbiB0
aGUgdHlwZSBpcyBSZWN0cywgdGhpcyBpcyBqdXN0IGEgbGlzdCBvZiBxdWFkcy4KLSAgICBIaWdo
bGlnaHRUeXBlIHR5cGU7Ci0gICAgVmVjdG9yPEZsb2F0UXVhZD4gcXVhZHM7Ci19OwotCi1jbGFz
cyBJbnNwZWN0b3JPdmVybGF5IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJbnNw
ZWN0b3JPdmVybGF5PiBjcmVhdGUoUGFnZSogcGFnZSwgSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQp
Ci0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEluc3BlY3Rvck92ZXJsYXkocGFn
ZSwgY2xpZW50KSk7Ci0gICAgfQotCi0gICAgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQmKTsK
LSAgICB2b2lkIGRyYXdPdXRsaW5lKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheW91dFJlY3Qm
LCBjb25zdCBDb2xvciYpOwotICAgIHZvaWQgZ2V0SGlnaGxpZ2h0KEhpZ2hsaWdodCopIGNvbnN0
OwotCi0gICAgdm9pZCBzZXRQYXVzZWRJbkRlYnVnZ2VyTWVzc2FnZShjb25zdCBTdHJpbmcqKTsK
LQotICAgIHZvaWQgaGlkZUhpZ2hsaWdodCgpOwotICAgIHZvaWQgaGlnaGxpZ2h0Tm9kZShOb2Rl
KiwgY29uc3QgSGlnaGxpZ2h0Q29uZmlnJik7Ci0gICAgdm9pZCBoaWdobGlnaHRSZWN0KFBhc3NP
d25QdHI8SW50UmVjdD4sIGNvbnN0IEhpZ2hsaWdodENvbmZpZyYpOwotCi0gICAgTm9kZSogaGln
aGxpZ2h0ZWROb2RlKCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgSW5zcGVjdG9yT3ZlcmxheShQ
YWdlKiwgSW5zcGVjdG9yQ2xpZW50Kik7Ci0KLSAgICB2b2lkIHVwZGF0ZSgpOwotICAgIHZvaWQg
ZHJhd05vZGVIaWdobGlnaHQoR3JhcGhpY3NDb250ZXh0Jik7Ci0gICAgdm9pZCBkcmF3UmVjdEhp
Z2hsaWdodChHcmFwaGljc0NvbnRleHQmKTsKLSAgICB2b2lkIGRyYXdQYXVzZWRJbkRlYnVnZ2Vy
KEdyYXBoaWNzQ29udGV4dCYpOwotCi0gICAgUGFnZSogbV9wYWdlOwotICAgIEluc3BlY3RvckNs
aWVudCogbV9jbGllbnQ7Ci0gICAgU3RyaW5nIG1fcGF1c2VkSW5EZWJ1Z2dlck1lc3NhZ2U7Ci0g
ICAgUmVmUHRyPE5vZGU+IG1faGlnaGxpZ2h0Tm9kZTsKLSAgICBIaWdobGlnaHRDb25maWcgbV9u
b2RlSGlnaGxpZ2h0Q29uZmlnOwotICAgIE93blB0cjxJbnRSZWN0PiBtX2hpZ2hsaWdodFJlY3Q7
Ci0gICAgSGlnaGxpZ2h0Q29uZmlnIG1fcmVjdEhpZ2hsaWdodENvbmZpZzsKLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQotCi0jZW5kaWYgLy8gRE9NTm9kZUhpZ2hsaWdodGVyX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBbGxJbk9uZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWxsSW5PbmUuY3BwCmluZGV4IDVl
MWFiYTEyMDhhZmI2YjhkZTg5ODljMzdlNmI1OWRiZWZkOGJkMzUuLmRiM2Y4MmNiZTlhYmY4Mjdh
OTdhYWU4YzA4NGE4ZmQ2YjEyMDkyYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JBbGxJbk9uZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckFsbEluT25lLmNwcApAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgIkNvbnNv
bGVNZXNzYWdlLmNwcCIKICNpbmNsdWRlICJDb250ZW50U2VhcmNoVXRpbHMuY3BwIgogI2luY2x1
ZGUgIkRPTUVkaXRvci5jcHAiCi0jaW5jbHVkZSAiRE9NTm9kZUhpZ2hsaWdodGVyLmNwcCIKICNp
bmNsdWRlICJET01QYXRjaFN1cHBvcnQuY3BwIgogI2luY2x1ZGUgIklkZW50aWZpZXJzRmFjdG9y
eS5jcHAiCiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHQuY3BwIgpAQCAtNTcsNiArNTYsNyBAQAog
I2luY2x1ZGUgIkluc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcCIKICNpbmNsdWRlICJJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb24uY3BwIgogI2luY2x1ZGUgIkluc3BlY3Rvck1lbW9yeUFnZW50LmNw
cCIKKyNpbmNsdWRlICJJbnNwZWN0b3JPdmVybGF5LmNwcCIKICNpbmNsdWRlICJJbnNwZWN0b3JQ
YWdlQWdlbnQuY3BwIgogI2luY2x1ZGUgIkluc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwIgogI2lu
Y2x1ZGUgIkluc3BlY3RvclJlc291cmNlQWdlbnQuY3BwIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IGUyNmExYzA0YjU5NTVkMTll
NTQyYjNjNmU2ODM5NmFjZWM2NDY4NDUuLjVhMGYzYmY0MzRkODYwYTc2Y2ZhMGM5Zjc1YWJlZDBh
Y2RmZGQ2YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
b250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29u
dHJvbGxlci5jcHAKQEAgLTM0LDcgKzM0LDYgQEAKIAogI2luY2x1ZGUgIkluc3BlY3RvckNvbnRy
b2xsZXIuaCIKIAotI2luY2x1ZGUgIkRPTU5vZGVIaWdobGlnaHRlci5oIgogI2luY2x1ZGUgIkZy
YW1lLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSWRlbnRpZmll
cnNGYWN0b3J5LmgiCkBAIC01Nyw2ICs1Niw3IEBACiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5kZXhl
ZERCQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKICNpbmNs
dWRlICJJbnNwZWN0b3JNZW1vcnlBZ2VudC5oIgorI2luY2x1ZGUgIkluc3BlY3Rvck92ZXJsYXku
aCIKICNpbmNsdWRlICJJbnNwZWN0b3JQYWdlQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JQ
cm9maWxlckFnZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5oIgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKaW5kZXggMmEx
MTY1OWZhZjBlMGIxYzZlOTI1OTU2YTU2ZTcyNjliNjJjNGI3OS4uNzdhOGM1YTJhOTEwZmFkYmNh
N2RkZWViMTFkOGU2NzU0NTJjMWI5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NQWdlbnQuY3BwCkBAIC00Nyw3ICs0Nyw2IEBACiAjaW5jbHVkZSAiQ29va2ll
LmgiCiAjaW5jbHVkZSAiQ29va2llSmFyLmgiCiAjaW5jbHVkZSAiRE9NRWRpdG9yLmgiCi0jaW5j
bHVkZSAiRE9NTm9kZUhpZ2hsaWdodGVyLmgiCiAjaW5jbHVkZSAiRE9NUGF0Y2hTdXBwb3J0Lmgi
CiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKQEAgLTY4LDYg
KzY3LDcgQEAKICNpbmNsdWRlICJJbmplY3RlZFNjcmlwdE1hbmFnZXIuaCIKICNpbmNsdWRlICJJ
bnNwZWN0b3JGcm9udGVuZC5oIgogI2luY2x1ZGUgIkluc3BlY3Rvckhpc3RvcnkuaCIKKyNpbmNs
dWRlICJJbnNwZWN0b3JPdmVybGF5LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yUGFnZUFnZW50Lmgi
CiAjaW5jbHVkZSAiSW5zcGVjdG9yU3RhdGUuaCIKICNpbmNsdWRlICJJbnN0cnVtZW50aW5nQWdl
bnRzLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9N
QWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCmlu
ZGV4IDg0ODBjYzkyNTczM2U1MTY5YzY2ZjQ5ZTY2ZTNkOTQxMGViY2UzNTAuLmM2MzFmNjBmZTRm
MWRmMzVjOTEyY2Q4MmE3OTllOTcwZDMzZGE5NjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCkBAIC0zMCwxMiArMzAsMTIgQEAKICNpZm5kZWYgSW5z
cGVjdG9yRE9NQWdlbnRfaAogI2RlZmluZSBJbnNwZWN0b3JET01BZ2VudF9oCiAKLSNpbmNsdWRl
ICJET01Ob2RlSGlnaGxpZ2h0ZXIuaCIKICNpbmNsdWRlICJFdmVudFRhcmdldC5oIgogI2luY2x1
ZGUgIkluamVjdGVkU2NyaXB0LmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmgi
CiAjaW5jbHVkZSAiSW5zcGVjdG9yQmFzZUFnZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRnJv
bnRlbmQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JPdmVybGF5LmgiCiAjaW5jbHVkZSAiSW5zcGVj
dG9yVmFsdWVzLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIxYmQwZWQ0OTdkNTc0ZmRh
OTU1ZTlmZTgzNzRkZGViZmU2ZjUzM2EKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAKQEAgLTAsMCArMSw2MTQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVy
LCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICog
ICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiSW5z
cGVjdG9yT3ZlcmxheS5oIgorCisjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIkZvbnRD
YWNoZS5oIgorI2luY2x1ZGUgIkZvbnRGYW1pbHkuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2lu
Y2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzVHlwZXMuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnQuaCIKKyNpbmNs
dWRlICJOb2RlLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlJhbmdlLmgiCisjaW5j
bHVkZSAiUmVuZGVyQm94TW9kZWxPYmplY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIK
KyNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1
ZGUgIlN0eWxlZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJUZXh0UnVuLmgiCisjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nQnVpbGRlci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFj
ZSB7CisKKyNpZiBPUyhXSU5ET1dTKQorc3RhdGljIGNvbnN0IHVuc2lnbmVkIGZvbnRIZWlnaHRQ
eCA9IDEyOworI2VsaWYgT1MoTUFDX09TX1gpIHx8IE9TKFVOSVgpCitzdGF0aWMgY29uc3QgdW5z
aWduZWQgZm9udEhlaWdodFB4ID0gMTE7CisjZW5kaWYKKworY29uc3Qgc3RhdGljIGludCByZWN0
SW5mbGF0ZVB4ID0gNDsKK2NvbnN0IHN0YXRpYyBpbnQgYm9yZGVyV2lkdGhQeCA9IDE7Citjb25z
dCBzdGF0aWMgaW50IHRvb2x0aXBQYWRkaW5nID0gNDsKKworY29uc3Qgc3RhdGljIGludCBhcnJv
d1RpcE9mZnNldCA9IDIwOworY29uc3Qgc3RhdGljIGZsb2F0IGFycm93SGVpZ2h0ID0gNzsKK2Nv
bnN0IHN0YXRpYyBmbG9hdCBhcnJvd0hhbGZXaWR0aCA9IDc7CisKK1BhdGggcXVhZFRvUGF0aChj
b25zdCBGbG9hdFF1YWQmIHF1YWQpCit7CisgICAgUGF0aCBxdWFkUGF0aDsKKyAgICBxdWFkUGF0
aC5tb3ZlVG8ocXVhZC5wMSgpKTsKKyAgICBxdWFkUGF0aC5hZGRMaW5lVG8ocXVhZC5wMigpKTsK
KyAgICBxdWFkUGF0aC5hZGRMaW5lVG8ocXVhZC5wMygpKTsKKyAgICBxdWFkUGF0aC5hZGRMaW5l
VG8ocXVhZC5wNCgpKTsKKyAgICBxdWFkUGF0aC5jbG9zZVN1YnBhdGgoKTsKKyAgICByZXR1cm4g
cXVhZFBhdGg7Cit9CisKK3ZvaWQgZHJhd091dGxpbmVkUXVhZChHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGNvbnN0IEZsb2F0UXVhZCYgcXVhZCwgY29uc3QgQ29sb3ImIGZpbGxDb2xvciwgY29u
c3QgQ29sb3ImIG91dGxpbmVDb2xvcikKK3sKKyAgICBzdGF0aWMgY29uc3QgaW50IG91dGxpbmVU
aGlja25lc3MgPSAyOworCisgICAgUGF0aCBxdWFkUGF0aCA9IHF1YWRUb1BhdGgocXVhZCk7CisK
KyAgICAvLyBDbGlwIG91dCB0aGUgcXVhZCwgdGhlbiBkcmF3IHdpdGggYSAycHggc3Ryb2tlIHRv
IGdldCBhIHBpeGVsCisgICAgLy8gb2Ygb3V0bGluZSAoYmVjYXVzZSBpbmZsYXRpbmcgYSBxdWFk
IGlzIGhhcmQpCisgICAgeworICAgICAgICBjb250ZXh0LnNhdmUoKTsKKyAgICAgICAgY29udGV4
dC5jbGlwT3V0KHF1YWRQYXRoKTsKKworICAgICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVz
cyhvdXRsaW5lVGhpY2tuZXNzKTsKKyAgICAgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihvdXRs
aW5lQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgICAgICBjb250ZXh0LnN0cm9rZVBh
dGgocXVhZFBhdGgpOworCisgICAgICAgIGNvbnRleHQucmVzdG9yZSgpOworICAgIH0KKworICAg
IC8vIE5vdyBkbyB0aGUgZmlsbAorICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKGZpbGxDb2xvciwg
Q29sb3JTcGFjZURldmljZVJHQik7CisgICAgY29udGV4dC5maWxsUGF0aChxdWFkUGF0aCk7Cit9
CisKK3ZvaWQgZHJhd091dGxpbmVkUXVhZFdpdGhDbGlwKEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgRmxvYXRRdWFkJiBxdWFkLCBjb25zdCBGbG9hdFF1YWQmIGNsaXBRdWFkLCBjb25z
dCBDb2xvciYgZmlsbENvbG9yKQoreworICAgIGNvbnRleHQuc2F2ZSgpOworICAgIFBhdGggY2xp
cFF1YWRQYXRoID0gcXVhZFRvUGF0aChjbGlwUXVhZCk7CisgICAgY29udGV4dC5jbGlwT3V0KGNs
aXBRdWFkUGF0aCk7CisgICAgZHJhd091dGxpbmVkUXVhZChjb250ZXh0LCBxdWFkLCBmaWxsQ29s
b3IsIENvbG9yOjp0cmFuc3BhcmVudCk7CisgICAgY29udGV4dC5yZXN0b3JlKCk7Cit9CisKK3Zv
aWQgZHJhd0hpZ2hsaWdodEZvckJveChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZs
b2F0UXVhZCYgY29udGVudFF1YWQsIGNvbnN0IEZsb2F0UXVhZCYgcGFkZGluZ1F1YWQsIGNvbnN0
IEZsb2F0UXVhZCYgYm9yZGVyUXVhZCwgY29uc3QgRmxvYXRRdWFkJiBtYXJnaW5RdWFkLCBjb25z
dCBIaWdobGlnaHRDb25maWcmIGhpZ2hsaWdodENvbmZpZykKK3sKKyAgICBib29sIGhhc01hcmdp
biA9IGhpZ2hsaWdodENvbmZpZy5tYXJnaW4gIT0gQ29sb3I6OnRyYW5zcGFyZW50OworICAgIGJv
b2wgaGFzQm9yZGVyID0gaGlnaGxpZ2h0Q29uZmlnLmJvcmRlciAhPSBDb2xvcjo6dHJhbnNwYXJl
bnQ7CisgICAgYm9vbCBoYXNQYWRkaW5nID0gaGlnaGxpZ2h0Q29uZmlnLnBhZGRpbmcgIT0gQ29s
b3I6OnRyYW5zcGFyZW50OworICAgIGJvb2wgaGFzQ29udGVudCA9IGhpZ2hsaWdodENvbmZpZy5j
b250ZW50ICE9IENvbG9yOjp0cmFuc3BhcmVudCB8fCBoaWdobGlnaHRDb25maWcuY29udGVudE91
dGxpbmUgIT0gQ29sb3I6OnRyYW5zcGFyZW50OworCisgICAgRmxvYXRRdWFkIGNsaXBRdWFkOwor
ICAgIENvbG9yIGNsaXBDb2xvcjsKKyAgICBpZiAoaGFzTWFyZ2luICYmICghaGFzQm9yZGVyIHx8
IG1hcmdpblF1YWQgIT0gYm9yZGVyUXVhZCkpIHsKKyAgICAgICAgZHJhd091dGxpbmVkUXVhZFdp
dGhDbGlwKGNvbnRleHQsIG1hcmdpblF1YWQsIGJvcmRlclF1YWQsIGhpZ2hsaWdodENvbmZpZy5t
YXJnaW4pOworICAgICAgICBjbGlwUXVhZCA9IGJvcmRlclF1YWQ7CisgICAgfQorICAgIGlmICho
YXNCb3JkZXIgJiYgKCFoYXNQYWRkaW5nIHx8IGJvcmRlclF1YWQgIT0gcGFkZGluZ1F1YWQpKSB7
CisgICAgICAgIGRyYXdPdXRsaW5lZFF1YWRXaXRoQ2xpcChjb250ZXh0LCBib3JkZXJRdWFkLCBw
YWRkaW5nUXVhZCwgaGlnaGxpZ2h0Q29uZmlnLmJvcmRlcik7CisgICAgICAgIGNsaXBRdWFkID0g
cGFkZGluZ1F1YWQ7CisgICAgfQorICAgIGlmIChoYXNQYWRkaW5nICYmICghaGFzQ29udGVudCB8
fCBwYWRkaW5nUXVhZCAhPSBjb250ZW50UXVhZCkpIHsKKyAgICAgICAgZHJhd091dGxpbmVkUXVh
ZFdpdGhDbGlwKGNvbnRleHQsIHBhZGRpbmdRdWFkLCBjb250ZW50UXVhZCwgaGlnaGxpZ2h0Q29u
ZmlnLnBhZGRpbmcpOworICAgICAgICBjbGlwUXVhZCA9IGNvbnRlbnRRdWFkOworICAgIH0KKyAg
ICBpZiAoaGFzQ29udGVudCkKKyAgICAgICAgZHJhd091dGxpbmVkUXVhZChjb250ZXh0LCBjb250
ZW50UXVhZCwgaGlnaGxpZ2h0Q29uZmlnLmNvbnRlbnQsIGhpZ2hsaWdodENvbmZpZy5jb250ZW50
T3V0bGluZSk7Cit9CisKK3ZvaWQgZHJhd0hpZ2hsaWdodEZvclNWR1JlbmRlcmVyKEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgY29uc3QgVmVjdG9yPEZsb2F0UXVhZD4mIGFic29sdXRlUXVhZHMs
IGNvbnN0IEhpZ2hsaWdodENvbmZpZyYgaGlnaGxpZ2h0Q29uZmlnKQoreworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgYWJzb2x1dGVRdWFkcy5zaXplKCk7ICsraSkKKyAgICAgICAgZHJhd091
dGxpbmVkUXVhZChjb250ZXh0LCBhYnNvbHV0ZVF1YWRzW2ldLCBoaWdobGlnaHRDb25maWcuY29u
dGVudCwgQ29sb3I6OnRyYW5zcGFyZW50KTsKK30KKworaW50IGRyYXdTdWJzdHJpbmcoY29uc3Qg
VGV4dFJ1biYgZ2xvYmFsVGV4dFJ1biwgaW50IG9mZnNldCwgaW50IGxlbmd0aCwgY29uc3QgQ29s
b3ImIHRleHRDb2xvciwgY29uc3QgRm9udCYgZm9udCwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBjb25zdCBMYXlvdXRSZWN0JiB0aXRsZVJlY3QpCit7CisgICAgY29udGV4dC5zZXRGaWxsQ29s
b3IodGV4dENvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBjb250ZXh0LmRyYXdUZXh0
KGZvbnQsIGdsb2JhbFRleHRSdW4sIEludFBvaW50KHRpdGxlUmVjdC5waXhlbFNuYXBwZWRYKCkg
KyByZWN0SW5mbGF0ZVB4LCB0aXRsZVJlY3QucGl4ZWxTbmFwcGVkWSgpICsgZm9udC5mb250TWV0
cmljcygpLmhlaWdodCgpKSwgb2Zmc2V0LCBvZmZzZXQgKyBsZW5ndGgpOworICAgIHJldHVybiBv
ZmZzZXQgKyBsZW5ndGg7Cit9CisKK2Zsb2F0IGNhbGN1bGF0ZUFycm93VGlwWChjb25zdCBMYXlv
dXRSZWN0JiBhbmNob3JCb3gsIGNvbnN0IExheW91dFJlY3QmIHRpdGxlUmVjdCkKK3sKKyAgICBj
b25zdCBzdGF0aWMgaW50IGFuY2hvclRpcE9mZnNldFB4ID0gMjsKKworICAgIGludCBtaW5YID0g
dGl0bGVSZWN0LngoKSArIGFycm93SGFsZldpZHRoOworICAgIGludCBtYXhYID0gdGl0bGVSZWN0
Lm1heFgoKSAtIGFycm93SGFsZldpZHRoOworICAgIGludCBhbmNob3JYID0gYW5jaG9yQm94Lngo
KTsKKyAgICBpbnQgYW5jaG9yTWF4WCA9IGFuY2hvckJveC5tYXhYKCk7CisKKyAgICBpbnQgeCA9
IHRpdGxlUmVjdC54KCkgKyBhcnJvd1RpcE9mZnNldDsgLy8gRGVmYXVsdCB0b29sdGlwIHBvc2l0
aW9uLgorICAgIGlmICh4IDwgYW5jaG9yWCkKKyAgICAgICAgeCA9IGFuY2hvclggKyBhbmNob3JU
aXBPZmZzZXRQeDsKKyAgICBlbHNlIGlmICh4ID4gYW5jaG9yTWF4WCkKKyAgICAgICAgeCA9IGFu
Y2hvck1heFggLSBhbmNob3JUaXBPZmZzZXRQeDsKKworICAgIGlmICh4IDwgbWluWCkKKyAgICAg
ICAgeCA9IG1pblg7CisgICAgZWxzZSBpZiAoeCA+IG1heFgpCisgICAgICAgIHggPSBtYXhYOwor
CisgICAgcmV0dXJuIHg7Cit9CisKK3ZvaWQgc2V0VXBGb250RGVzY3JpcHRpb24oRm9udERlc2Ny
aXB0aW9uJiBmb250RGVzY3JpcHRpb24sIFdlYkNvcmU6OlNldHRpbmdzKiBzZXR0aW5ncykKK3sK
KyNkZWZpbmUgVE9PTFRJUF9GT05UX0ZBTUlMSUVTKHNpemUsIC4uLikgXAorc3RhdGljIGNvbnN0
IHVuc2lnbmVkIHRvb2x0aXBGb250RmFjZVNpemUgPSBzaXplO1wKK3N0YXRpYyBjb25zdCBBdG9t
aWNTdHJpbmcqIHRvb2x0aXBGb250RmFjZVtzaXplXSA9IHsgX19WQV9BUkdTX18gfTsKKworI2lm
IE9TKFdJTkRPV1MpCitUT09MVElQX0ZPTlRfRkFNSUxJRVMoMiwgbmV3IEF0b21pY1N0cmluZygi
Q29uc29sYXMiKSwgbmV3IEF0b21pY1N0cmluZygiTHVjaWRhIENvbnNvbGUiKSkKKyNlbGlmIE9T
KE1BQ19PU19YKQorVE9PTFRJUF9GT05UX0ZBTUlMSUVTKDIsIG5ldyBBdG9taWNTdHJpbmcoIk1l
bmxvIiksIG5ldyBBdG9taWNTdHJpbmcoIk1vbmFjbyIpKQorI2VsaWYgT1MoVU5JWCkKK1RPT0xU
SVBfRk9OVF9GQU1JTElFUygxLCBuZXcgQXRvbWljU3RyaW5nKCJkZWphdnUgc2FucyBtb25vIikp
CisjZW5kaWYKKy8vIEluIHRoZSBkZWZhdWx0IGNhc2UsIHdlIGdldCB0aGUgc2V0dGluZ3MtcHJv
dmlkZWQgbW9ub3NwYWNlIGZvbnQuCisKKyN1bmRlZiBUT09MVElQX0ZPTlRfRkFNSUxJRVMKKwor
ICAgIGZvbnREZXNjcmlwdGlvbi5zZXRSZW5kZXJpbmdNb2RlKHNldHRpbmdzLT5mb250UmVuZGVy
aW5nTW9kZSgpKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKGZvbnRIZWln
aHRQeCk7CisKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGZpeGVkRm9udEZhbWlseSA9IHNldHRp
bmdzLT5maXhlZEZvbnRGYW1pbHkoKTsKKyAgICBpZiAoIWZpeGVkRm9udEZhbWlseS5pc0VtcHR5
KCkpIHsKKyAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2Ny
aXB0aW9uOjpNb25vc3BhY2VGYW1pbHkpOworICAgICAgICBGb250RmFtaWx5KiBjdXJyZW50RmFt
aWx5ID0gMDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRvb2x0aXBGb250RmFj
ZVNpemU7ICsraSkgeworICAgICAgICAgICAgaWYgKCFjdXJyZW50RmFtaWx5KSB7CisgICAgICAg
ICAgICAgICAgZm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCkuc2V0RmFtaWx5KCp0b29sdGlw
Rm9udEZhY2VbaV0pOworICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWls
eSgpLmFwcGVuZEZhbWlseSgwKTsKKyAgICAgICAgICAgICAgICBjdXJyZW50RmFtaWx5ID0gJmZv
bnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBSZWZQdHI8U2hhcmVkRm9udEZhbWlseT4gbmV3RmFtaWx5ID0gU2hhcmVkRm9u
dEZhbWlseTo6Y3JlYXRlKCk7CisgICAgICAgICAgICAgICAgbmV3RmFtaWx5LT5zZXRGYW1pbHko
KnRvb2x0aXBGb250RmFjZVtpXSk7CisgICAgICAgICAgICAgICAgY3VycmVudEZhbWlseS0+YXBw
ZW5kRmFtaWx5KG5ld0ZhbWlseSk7CisgICAgICAgICAgICAgICAgY3VycmVudEZhbWlseSA9IG5l
d0ZhbWlseS5nZXQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBSZWZQdHI8
U2hhcmVkRm9udEZhbWlseT4gbmV3RmFtaWx5ID0gU2hhcmVkRm9udEZhbWlseTo6Y3JlYXRlKCk7
CisgICAgICAgIG5ld0ZhbWlseS0+c2V0RmFtaWx5KGZpeGVkRm9udEZhbWlseSk7CisgICAgICAg
IGN1cnJlbnRGYW1pbHktPmFwcGVuZEZhbWlseShuZXdGYW1pbHkpOworICAgICAgICBjdXJyZW50
RmFtaWx5ID0gbmV3RmFtaWx5LmdldCgpOworICAgIH0KK30KKwordm9pZCBkcmF3RWxlbWVudFRp
dGxlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgTm9kZSogbm9kZSwgUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlciwgY29uc3QgSW50UmVjdCYgYm91bmRpbmdCb3gsIGNvbnN0IEludFJlY3QmIGFuY2hv
ckJveCwgY29uc3QgRmxvYXRSZWN0JiB2aXNpYmxlUmVjdCwgV2ViQ29yZTo6U2V0dGluZ3MqIHNl
dHRpbmdzKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ29sb3IsIGJhY2tncm91bmRDb2xv
ciwgKDI1NSwgMjU1LCAxOTQpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKENvbG9yLCB0YWdD
b2xvciwgKDEzNiwgMTgsIDEyOCkpOyAvLyBTYW1lIGFzIC53ZWJraXQtaHRtbC10YWcuCisgICAg
REVGSU5FX1NUQVRJQ19MT0NBTChDb2xvciwgYXR0ckNvbG9yLCAoMjYsIDI2LCAxNjYpKTsgLy8g
U2FtZSBhcyAud2Via2l0LWh0bWwtYXR0cmlidXRlLXZhbHVlLgorICAgIERFRklORV9TVEFUSUNf
TE9DQUwoQ29sb3IsIG5vcm1hbENvbG9yLCAoQ29sb3I6OmJsYWNrKSk7CisgICAgREVGSU5FX1NU
QVRJQ19MT0NBTChDb2xvciwgcHhBbmRCb3JkZXJDb2xvciwgKDEyOCwgMTI4LCAxMjgpKTsKKwor
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBweFN0cmluZywgKCJweCIpKTsKKyAgICBj
b25zdCBzdGF0aWMgVUNoYXIgdGltZXNVQ2hhcltdID0geyAweDAwMjAsIDB4MDBENywgMHgwMDIw
LCAwIH07CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHRpbWVzU3RyaW5nLCAodGlt
ZXNVQ2hhcikpOyAvLyAmdGltZXM7IHN0cmluZworCisgICAgRm9udENhY2hlUHVyZ2VQcmV2ZW50
ZXIgZm9udENhY2hlUHVyZ2VQcmV2ZW50ZXI7CisKKyAgICBFbGVtZW50KiBlbGVtZW50ID0gc3Rh
dGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpOworICAgIGJvb2wgaXNYSFRNTCA9IGVsZW1lbnQtPmRv
Y3VtZW50KCktPmlzWEhUTUxEb2N1bWVudCgpOworICAgIFN0cmluZ0J1aWxkZXIgbm9kZVRpdGxl
OworICAgIG5vZGVUaXRsZS5hcHBlbmQoaXNYSFRNTCA/IGVsZW1lbnQtPm5vZGVOYW1lKCkgOiBl
bGVtZW50LT5ub2RlTmFtZSgpLmxvd2VyKCkpOworICAgIHVuc2lnbmVkIHRhZ05hbWVMZW5ndGgg
PSBub2RlVGl0bGUubGVuZ3RoKCk7CisKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGlkVmFsdWUg
PSBlbGVtZW50LT5nZXRJZEF0dHJpYnV0ZSgpOworICAgIHVuc2lnbmVkIGlkU3RyaW5nTGVuZ3Ro
ID0gMDsKKyAgICBTdHJpbmcgaWRTdHJpbmc7CisgICAgaWYgKCFpZFZhbHVlLmlzTnVsbCgpICYm
ICFpZFZhbHVlLmlzRW1wdHkoKSkgeworICAgICAgICBub2RlVGl0bGUuYXBwZW5kKCIjIik7Cisg
ICAgICAgIG5vZGVUaXRsZS5hcHBlbmQoaWRWYWx1ZSk7CisgICAgICAgIGlkU3RyaW5nTGVuZ3Ro
ID0gMSArIGlkVmFsdWUubGVuZ3RoKCk7CisgICAgfQorCisgICAgSGFzaFNldDxBdG9taWNTdHJp
bmc+IHVzZWRDbGFzc05hbWVzOworICAgIHVuc2lnbmVkIGNsYXNzZXNTdHJpbmdMZW5ndGggPSAw
OworICAgIGlmIChlbGVtZW50LT5oYXNDbGFzcygpICYmIGVsZW1lbnQtPmlzU3R5bGVkRWxlbWVu
dCgpKSB7CisgICAgICAgIGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcmIGNsYXNzTmFtZXNTdHJpbmcg
PSBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4oZWxlbWVudCktPmNsYXNzTmFtZXMoKTsKKyAg
ICAgICAgc2l6ZV90IGNsYXNzTmFtZUNvdW50ID0gY2xhc3NOYW1lc1N0cmluZy5zaXplKCk7Cisg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2xhc3NOYW1lQ291bnQ7ICsraSkgeworICAg
ICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBjbGFzc05hbWUgPSBjbGFzc05hbWVzU3RyaW5n
W2ldOworICAgICAgICAgICAgaWYgKHVzZWRDbGFzc05hbWVzLmNvbnRhaW5zKGNsYXNzTmFtZSkp
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB1c2VkQ2xhc3NOYW1lcy5h
ZGQoY2xhc3NOYW1lKTsKKyAgICAgICAgICAgIG5vZGVUaXRsZS5hcHBlbmQoIi4iKTsKKyAgICAg
ICAgICAgIG5vZGVUaXRsZS5hcHBlbmQoY2xhc3NOYW1lKTsKKyAgICAgICAgICAgIGNsYXNzZXNT
dHJpbmdMZW5ndGggKz0gMSArIGNsYXNzTmFtZS5sZW5ndGgoKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBtb2RlbE9iamVjdCA9IHJlbmRlcmVyLT5pc0Jv
eE1vZGVsT2JqZWN0KCkgPyB0b1JlbmRlckJveE1vZGVsT2JqZWN0KHJlbmRlcmVyKSA6IDA7CisK
KyAgICBTdHJpbmcgd2lkdGhOdW1iZXJQYXJ0ID0gIiAiICsgU3RyaW5nOjpudW1iZXIobW9kZWxP
YmplY3QgPyBhZGp1c3RGb3JBYnNvbHV0ZVpvb20obW9kZWxPYmplY3QtPnBpeGVsU25hcHBlZE9m
ZnNldFdpZHRoKCksIG1vZGVsT2JqZWN0KSA6IGJvdW5kaW5nQm94LndpZHRoKCkpOworICAgIG5v
ZGVUaXRsZS5hcHBlbmQod2lkdGhOdW1iZXJQYXJ0KTsKKyAgICBub2RlVGl0bGUuYXBwZW5kKHB4
U3RyaW5nKTsKKyAgICBub2RlVGl0bGUuYXBwZW5kKHRpbWVzU3RyaW5nKTsKKyAgICBTdHJpbmcg
aGVpZ2h0TnVtYmVyUGFydCA9IFN0cmluZzo6bnVtYmVyKG1vZGVsT2JqZWN0ID8gYWRqdXN0Rm9y
QWJzb2x1dGVab29tKG1vZGVsT2JqZWN0LT5waXhlbFNuYXBwZWRPZmZzZXRIZWlnaHQoKSwgbW9k
ZWxPYmplY3QpIDogYm91bmRpbmdCb3guaGVpZ2h0KCkpOworICAgIG5vZGVUaXRsZS5hcHBlbmQo
aGVpZ2h0TnVtYmVyUGFydCk7CisgICAgbm9kZVRpdGxlLmFwcGVuZChweFN0cmluZyk7CisKKyAg
ICBGb250RGVzY3JpcHRpb24gZGVzYzsKKyAgICBzZXRVcEZvbnREZXNjcmlwdGlvbihkZXNjLCBz
ZXR0aW5ncyk7CisgICAgRm9udCBmb250ID0gRm9udChkZXNjLCAwLCAwKTsKKyAgICBmb250LnVw
ZGF0ZSgwKTsKKworICAgIFRleHRSdW4gbm9kZVRpdGxlUnVuKG5vZGVUaXRsZS50b1N0cmluZygp
KTsKKyAgICBJbnRQb2ludCB0aXRsZUJhc2VQb2ludCA9IEludFBvaW50KGFuY2hvckJveC54KCks
IGFuY2hvckJveC5tYXhZKCkgLSAxKTsKKyAgICB0aXRsZUJhc2VQb2ludC5tb3ZlKHJlY3RJbmZs
YXRlUHgsIHJlY3RJbmZsYXRlUHgpOworICAgIEludFJlY3QgdGl0bGVSZWN0ID0gZW5jbG9zaW5n
SW50UmVjdChmb250LnNlbGVjdGlvblJlY3RGb3JUZXh0KG5vZGVUaXRsZVJ1biwgdGl0bGVCYXNl
UG9pbnQsIGZvbnRIZWlnaHRQeCkpOworICAgIHRpdGxlUmVjdC5pbmZsYXRlKHJlY3RJbmZsYXRl
UHgpOworCisgICAgLy8gVGhlIGluaXRpYWwgb2Zmc2V0cyBuZWVkZWQgdG8gY29tcGVuc2F0ZSBm
b3IgYSAxcHgtdGhpY2sgYm9yZGVyIHN0cm9rZSAod2hpY2ggaXMgbm90IGEgcGFydCBvZiB0aGUg
cmVjdGFuZ2xlKS4KKyAgICBpbnQgZHggPSAtYm9yZGVyV2lkdGhQeDsKKyAgICBpbnQgZHkgPSBi
b3JkZXJXaWR0aFB4OworCisgICAgLy8gSWYgdGhlIHRpcCBzdGlja3MgYmV5b25kIHRoZSByaWdo
dCBvZiB2aXNpYmxlUmVjdCwgcmlnaHQtYWxpZ24gdGhlIHRpcCB3aXRoIHRoZSBzYWlkIGJvdW5k
YXJ5LgorICAgIGlmICh0aXRsZVJlY3QubWF4WCgpICsgZHggPiB2aXNpYmxlUmVjdC5tYXhYKCkp
CisgICAgICAgIGR4ID0gdmlzaWJsZVJlY3QubWF4WCgpIC0gdGl0bGVSZWN0Lm1heFgoKTsKKwor
ICAgIC8vIElmIHRoZSB0aXAgc3RpY2tzIGJleW9uZCB0aGUgbGVmdCBvZiB2aXNpYmxlUmVjdCwg
bGVmdC1hbGlnbiB0aGUgdGlwIHdpdGggdGhlIHNhaWQgYm91bmRhcnkuCisgICAgaWYgKHRpdGxl
UmVjdC54KCkgKyBkeCA8IHZpc2libGVSZWN0LngoKSkKKyAgICAgICAgZHggPSB2aXNpYmxlUmVj
dC54KCkgLSB0aXRsZVJlY3QueCgpIC0gYm9yZGVyV2lkdGhQeDsKKworICAgIC8vIElmIHRoZSB0
aXAgc3RpY2tzIGJleW9uZCB0aGUgYm90dG9tIG9mIHZpc2libGVSZWN0LCBzaG93IHRoZSB0aXAg
YXQgdG9wIG9mIGJvdW5kaW5nIGJveC4KKyAgICBpZiAodGl0bGVSZWN0Lm1heFkoKSArIGR5ID4g
dmlzaWJsZVJlY3QubWF4WSgpKSB7CisgICAgICAgIGR5ID0gYW5jaG9yQm94LnkoKSAtIHRpdGxl
UmVjdC5tYXhZKCkgLSBib3JkZXJXaWR0aFB4OworICAgICAgICAvLyBJZiB0aGUgdGlwIHN0aWxs
IHN0aWNrcyBiZXlvbmQgdGhlIGJvdHRvbSBvZiB2aXNpYmxlUmVjdCwgYm90dG9tLWFsaWduIHRo
ZSB0aXAgd2l0aCB0aGUgc2FpZCBib3VuZGFyeS4KKyAgICAgICAgaWYgKHRpdGxlUmVjdC5tYXhZ
KCkgKyBkeSA+IHZpc2libGVSZWN0Lm1heFkoKSkKKyAgICAgICAgICAgIGR5ID0gdmlzaWJsZVJl
Y3QubWF4WSgpIC0gdGl0bGVSZWN0Lm1heFkoKTsKKyAgICB9CisKKyAgICAvLyBJZiB0aGUgdGlw
IHN0aWNrcyBiZXlvbmQgdGhlIHRvcCBvZiB2aXNpYmxlUmVjdCwgc2hvdyB0aGUgdGlwIGF0IHRv
cCBvZiB2aXNpYmxlUmVjdC4KKyAgICBpZiAodGl0bGVSZWN0LnkoKSArIGR5IDwgdmlzaWJsZVJl
Y3QueSgpKQorICAgICAgICBkeSA9IHZpc2libGVSZWN0LnkoKSAtIHRpdGxlUmVjdC55KCkgKyBi
b3JkZXJXaWR0aFB4OworCisgICAgdGl0bGVSZWN0Lm1vdmUoZHgsIGR5KTsKKworICAgIGJvb2wg
aXNBcnJvd0F0VG9wID0gdGl0bGVSZWN0LnkoKSA+IGFuY2hvckJveC55KCk7CisgICAgdGl0bGVS
ZWN0Lm1vdmUoMCwgdG9vbHRpcFBhZGRpbmcgKiAoaXNBcnJvd0F0VG9wID8gMSA6IC0xKSk7CisK
KyAgICB7CisgICAgICAgIGZsb2F0IGFycm93VGlwWCA9IGNhbGN1bGF0ZUFycm93VGlwWChhbmNo
b3JCb3gsIHRpdGxlUmVjdCk7CisgICAgICAgIGludCBhcnJvd0Jhc2VZID0gaXNBcnJvd0F0VG9w
ID8gdGl0bGVSZWN0LnkoKSA6IHRpdGxlUmVjdC5tYXhZKCk7CisgICAgICAgIGludCBhcnJvd09w
cG9zaXRlWSA9IGlzQXJyb3dBdFRvcCA/IHRpdGxlUmVjdC5tYXhZKCkgOiB0aXRsZVJlY3QueSgp
OworCisgICAgICAgIEZsb2F0UG9pbnQgcG9pbnRzWzhdOworICAgICAgICBwb2ludHNbMF0gPSBG
bG9hdFBvaW50KGFycm93VGlwWCAtIGFycm93SGFsZldpZHRoLCBhcnJvd0Jhc2VZKTsKKyAgICAg
ICAgcG9pbnRzWzFdID0gRmxvYXRQb2ludChhcnJvd1RpcFgsIGFycm93QmFzZVkgKyBhcnJvd0hl
aWdodCAqIChpc0Fycm93QXRUb3AgPyAtMSA6IDEpKTsKKyAgICAgICAgcG9pbnRzWzJdID0gRmxv
YXRQb2ludChhcnJvd1RpcFggKyBhcnJvd0hhbGZXaWR0aCwgYXJyb3dCYXNlWSk7CisgICAgICAg
IHBvaW50c1szXSA9IEZsb2F0UG9pbnQodGl0bGVSZWN0Lm1heFgoKSwgYXJyb3dCYXNlWSk7Cisg
ICAgICAgIHBvaW50c1s0XSA9IEZsb2F0UG9pbnQodGl0bGVSZWN0Lm1heFgoKSwgYXJyb3dPcHBv
c2l0ZVkpOworICAgICAgICBwb2ludHNbNV0gPSBGbG9hdFBvaW50KHRpdGxlUmVjdC54KCksIGFy
cm93T3Bwb3NpdGVZKTsKKyAgICAgICAgcG9pbnRzWzZdID0gRmxvYXRQb2ludCh0aXRsZVJlY3Qu
eCgpLCBhcnJvd0Jhc2VZKTsKKyAgICAgICAgcG9pbnRzWzddID0gcG9pbnRzWzBdOworCisgICAg
ICAgIFBhdGggcGF0aDsKKyAgICAgICAgcGF0aC5tb3ZlVG8ocG9pbnRzWzBdKTsKKyAgICAgICAg
Zm9yIChpbnQgaSA9IDE7IGkgPCA4OyArK2kpCisgICAgICAgICAgICBwYXRoLmFkZExpbmVUbyhw
b2ludHNbaV0pOworCisgICAgICAgIGNvbnRleHQuc2F2ZSgpOworICAgICAgICBjb250ZXh0LnRy
YW5zbGF0ZSgwLjVmLCAwLjVmKTsKKyAgICAgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihweEFu
ZEJvcmRlckNvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICAgICAgY29udGV4dC5zZXRG
aWxsQ29sb3IoYmFja2dyb3VuZENvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICAgICAg
Y29udGV4dC5zZXRTdHJva2VUaGlja25lc3MoYm9yZGVyV2lkdGhQeCk7CisgICAgICAgIGNvbnRl
eHQuZmlsbFBhdGgocGF0aCk7CisgICAgICAgIGNvbnRleHQuc3Ryb2tlUGF0aChwYXRoKTsKKyAg
ICAgICAgY29udGV4dC5yZXN0b3JlKCk7CisgICAgfQorCisgICAgaW50IGN1cnJlbnRQb3MgPSAw
OworICAgIGN1cnJlbnRQb3MgPSBkcmF3U3Vic3RyaW5nKG5vZGVUaXRsZVJ1biwgY3VycmVudFBv
cywgdGFnTmFtZUxlbmd0aCwgdGFnQ29sb3IsIGZvbnQsIGNvbnRleHQsIHRpdGxlUmVjdCk7Cisg
ICAgaWYgKGlkU3RyaW5nTGVuZ3RoKQorICAgICAgICBjdXJyZW50UG9zID0gZHJhd1N1YnN0cmlu
Zyhub2RlVGl0bGVSdW4sIGN1cnJlbnRQb3MsIGlkU3RyaW5nTGVuZ3RoLCBhdHRyQ29sb3IsIGZv
bnQsIGNvbnRleHQsIHRpdGxlUmVjdCk7CisgICAgaWYgKGNsYXNzZXNTdHJpbmdMZW5ndGgpCisg
ICAgICAgIGN1cnJlbnRQb3MgPSBkcmF3U3Vic3RyaW5nKG5vZGVUaXRsZVJ1biwgY3VycmVudFBv
cywgY2xhc3Nlc1N0cmluZ0xlbmd0aCwgYXR0ckNvbG9yLCBmb250LCBjb250ZXh0LCB0aXRsZVJl
Y3QpOworICAgIGN1cnJlbnRQb3MgPSBkcmF3U3Vic3RyaW5nKG5vZGVUaXRsZVJ1biwgY3VycmVu
dFBvcywgd2lkdGhOdW1iZXJQYXJ0Lmxlbmd0aCgpLCBub3JtYWxDb2xvciwgZm9udCwgY29udGV4
dCwgdGl0bGVSZWN0KTsKKyAgICBjdXJyZW50UG9zID0gZHJhd1N1YnN0cmluZyhub2RlVGl0bGVS
dW4sIGN1cnJlbnRQb3MsIHB4U3RyaW5nLmxlbmd0aCgpICsgdGltZXNTdHJpbmcubGVuZ3RoKCks
IHB4QW5kQm9yZGVyQ29sb3IsIGZvbnQsIGNvbnRleHQsIHRpdGxlUmVjdCk7CisgICAgY3VycmVu
dFBvcyA9IGRyYXdTdWJzdHJpbmcobm9kZVRpdGxlUnVuLCBjdXJyZW50UG9zLCBoZWlnaHROdW1i
ZXJQYXJ0Lmxlbmd0aCgpLCBub3JtYWxDb2xvciwgZm9udCwgY29udGV4dCwgdGl0bGVSZWN0KTsK
KyAgICBkcmF3U3Vic3RyaW5nKG5vZGVUaXRsZVJ1biwgY3VycmVudFBvcywgcHhTdHJpbmcubGVu
Z3RoKCksIHB4QW5kQm9yZGVyQ29sb3IsIGZvbnQsIGNvbnRleHQsIHRpdGxlUmVjdCk7Cit9CisK
K3N0YXRpYyB2b2lkIGNvbnRlbnRzUXVhZFRvUGFnZShjb25zdCBGcmFtZVZpZXcqIG1haW5WaWV3
LCBjb25zdCBGcmFtZVZpZXcqIHZpZXcsIEZsb2F0UXVhZCYgcXVhZCkKK3sKKyAgICBxdWFkLnNl
dFAxKHZpZXctPmNvbnRlbnRzVG9Sb290Vmlldyhyb3VuZGVkSW50UG9pbnQocXVhZC5wMSgpKSkp
OworICAgIHF1YWQuc2V0UDIodmlldy0+Y29udGVudHNUb1Jvb3RWaWV3KHJvdW5kZWRJbnRQb2lu
dChxdWFkLnAyKCkpKSk7CisgICAgcXVhZC5zZXRQMyh2aWV3LT5jb250ZW50c1RvUm9vdFZpZXco
cm91bmRlZEludFBvaW50KHF1YWQucDMoKSkpKTsKKyAgICBxdWFkLnNldFA0KHZpZXctPmNvbnRl
bnRzVG9Sb290Vmlldyhyb3VuZGVkSW50UG9pbnQocXVhZC5wNCgpKSkpOworICAgIHF1YWQgKz0g
bWFpblZpZXctPnNjcm9sbE9mZnNldCgpOworfQorCitzdGF0aWMgdm9pZCBnZXRPckRyYXdOb2Rl
SGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgTm9kZSogbm9kZSwgY29uc3QgSGln
aGxpZ2h0Q29uZmlnJiBoaWdobGlnaHRDb25maWcsIEhpZ2hsaWdodCogaGlnaGxpZ2h0KQorewor
ICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOworICAgIEZyYW1l
KiBjb250YWluaW5nRnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpOworCisgICAgaWYg
KCFyZW5kZXJlciB8fCAhY29udGFpbmluZ0ZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBG
cmFtZVZpZXcqIGNvbnRhaW5pbmdWaWV3ID0gY29udGFpbmluZ0ZyYW1lLT52aWV3KCk7CisgICAg
RnJhbWVWaWV3KiBtYWluVmlldyA9IGNvbnRhaW5pbmdGcmFtZS0+cGFnZSgpLT5tYWluRnJhbWUo
KS0+dmlldygpOworICAgIEludFJlY3QgYm91bmRpbmdCb3ggPSBwaXhlbFNuYXBwZWRJbnRSZWN0
KGNvbnRhaW5pbmdWaWV3LT5jb250ZW50c1RvUm9vdFZpZXcocmVuZGVyZXItPmFic29sdXRlQm91
bmRpbmdCb3hSZWN0KCkpKTsKKyAgICBib3VuZGluZ0JveC5tb3ZlKG1haW5WaWV3LT5zY3JvbGxP
ZmZzZXQoKSk7CisgICAgSW50UmVjdCB0aXRsZUFuY2hvckJveCA9IGJvdW5kaW5nQm94OworCisg
ICAgRmxvYXRSZWN0IHZpc2libGVSZWN0ID0gbWFpblZpZXctPnZpc2libGVDb250ZW50UmVjdCgp
OworICAgIC8vIERvbid0IHRyYW5zbGF0ZSB0aGUgY29udGV4dCBpZiB0aGUgZnJhbWUgaXMgcmVu
ZGVyZWQgaW4gcGFnZSBjb29yZGluYXRlcy4KKyAgICBpZiAoY29udGV4dCAmJiAhbWFpblZpZXct
PmRlbGVnYXRlc1Njcm9sbGluZygpKQorICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUoLXZpc2li
bGVSZWN0LngoKSwgLXZpc2libGVSZWN0LnkoKSk7CisKKyAgICAvLyBSZW5kZXJTVkdSb290IHNo
b3VsZCBiZSBoaWdobGlnaHRlZCB0aHJvdWdoIHRoZSBpc0JveCgpIGNvZGUgcGF0aCwgYWxsIG90
aGVyIFNWRyBlbGVtZW50cyBzaG91bGQganVzdCBkdW1wIHRoZWlyIGFic29sdXRlUXVhZHMoKS4K
KyNpZiBFTkFCTEUoU1ZHKQorICAgIGJvb2wgaXNTVkdSZW5kZXJlciA9IHJlbmRlcmVyLT5ub2Rl
KCkgJiYgcmVuZGVyZXItPm5vZGUoKS0+aXNTVkdFbGVtZW50KCkgJiYgIXJlbmRlcmVyLT5pc1NW
R1Jvb3QoKTsKKyNlbHNlCisgICAgYm9vbCBpc1NWR1JlbmRlcmVyID0gZmFsc2U7CisjZW5kaWYK
KworICAgIGlmIChpc1NWR1JlbmRlcmVyKSB7CisgICAgICAgIGhpZ2hsaWdodC0+dHlwZSA9IEhp
Z2hsaWdodFR5cGVSZWN0czsKKyAgICAgICAgcmVuZGVyZXItPmFic29sdXRlUXVhZHMoaGlnaGxp
Z2h0LT5xdWFkcyk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaGlnaGxpZ2h0LT5x
dWFkcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIGNvbnRlbnRzUXVhZFRvUGFnZShtYWluVmll
dywgY29udGFpbmluZ1ZpZXcsIGhpZ2hsaWdodC0+cXVhZHNbaV0pOworCisgICAgICAgIGlmIChj
b250ZXh0KQorICAgICAgICAgICAgZHJhd0hpZ2hsaWdodEZvclNWR1JlbmRlcmVyKCpjb250ZXh0
LCBoaWdobGlnaHQtPnF1YWRzLCBoaWdobGlnaHRDb25maWcpOworICAgIH0gZWxzZSBpZiAocmVu
ZGVyZXItPmlzQm94KCkgfHwgcmVuZGVyZXItPmlzUmVuZGVySW5saW5lKCkpIHsKKyAgICAgICAg
TGF5b3V0UmVjdCBjb250ZW50Qm94OworICAgICAgICBMYXlvdXRSZWN0IHBhZGRpbmdCb3g7Cisg
ICAgICAgIExheW91dFJlY3QgYm9yZGVyQm94OworICAgICAgICBMYXlvdXRSZWN0IG1hcmdpbkJv
eDsKKworICAgICAgICBpZiAocmVuZGVyZXItPmlzQm94KCkpIHsKKyAgICAgICAgICAgIFJlbmRl
ckJveCogcmVuZGVyQm94ID0gdG9SZW5kZXJCb3gocmVuZGVyZXIpOworCisgICAgICAgICAgICAv
LyBSZW5kZXJCb3ggcmV0dXJucyB0aGUgInB1cmUiIGNvbnRlbnQgYXJlYSBib3gsIGV4Y2x1c2l2
ZSBvZiB0aGUgc2Nyb2xsYmFycyAoaWYgcHJlc2VudCksIHdoaWNoIGFsc28gY291bnQgdG93YXJk
cyB0aGUgY29udGVudCBhcmVhIGluIENTUy4KKyAgICAgICAgICAgIGNvbnRlbnRCb3ggPSByZW5k
ZXJCb3gtPmNvbnRlbnRCb3hSZWN0KCk7CisgICAgICAgICAgICBjb250ZW50Qm94LnNldFdpZHRo
KGNvbnRlbnRCb3gud2lkdGgoKSArIHJlbmRlckJveC0+dmVydGljYWxTY3JvbGxiYXJXaWR0aCgp
KTsKKyAgICAgICAgICAgIGNvbnRlbnRCb3guc2V0SGVpZ2h0KGNvbnRlbnRCb3guaGVpZ2h0KCkg
KyByZW5kZXJCb3gtPmhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKSk7CisKKyAgICAgICAgICAg
IHBhZGRpbmdCb3ggPSBMYXlvdXRSZWN0KGNvbnRlbnRCb3gueCgpIC0gcmVuZGVyQm94LT5wYWRk
aW5nTGVmdCgpLCBjb250ZW50Qm94LnkoKSAtIHJlbmRlckJveC0+cGFkZGluZ1RvcCgpLAorICAg
ICAgICAgICAgICAgICAgICBjb250ZW50Qm94LndpZHRoKCkgKyByZW5kZXJCb3gtPnBhZGRpbmdM
ZWZ0KCkgKyByZW5kZXJCb3gtPnBhZGRpbmdSaWdodCgpLCBjb250ZW50Qm94LmhlaWdodCgpICsg
cmVuZGVyQm94LT5wYWRkaW5nVG9wKCkgKyByZW5kZXJCb3gtPnBhZGRpbmdCb3R0b20oKSk7Cisg
ICAgICAgICAgICBib3JkZXJCb3ggPSBMYXlvdXRSZWN0KHBhZGRpbmdCb3gueCgpIC0gcmVuZGVy
Qm94LT5ib3JkZXJMZWZ0KCksIHBhZGRpbmdCb3gueSgpIC0gcmVuZGVyQm94LT5ib3JkZXJUb3Ao
KSwKKyAgICAgICAgICAgICAgICAgICAgcGFkZGluZ0JveC53aWR0aCgpICsgcmVuZGVyQm94LT5i
b3JkZXJMZWZ0KCkgKyByZW5kZXJCb3gtPmJvcmRlclJpZ2h0KCksIHBhZGRpbmdCb3guaGVpZ2h0
KCkgKyByZW5kZXJCb3gtPmJvcmRlclRvcCgpICsgcmVuZGVyQm94LT5ib3JkZXJCb3R0b20oKSk7
CisgICAgICAgICAgICBtYXJnaW5Cb3ggPSBMYXlvdXRSZWN0KGJvcmRlckJveC54KCkgLSByZW5k
ZXJCb3gtPm1hcmdpbkxlZnQoKSwgYm9yZGVyQm94LnkoKSAtIHJlbmRlckJveC0+bWFyZ2luVG9w
KCksCisgICAgICAgICAgICAgICAgICAgIGJvcmRlckJveC53aWR0aCgpICsgcmVuZGVyQm94LT5t
YXJnaW5XaWR0aCgpLCBib3JkZXJCb3guaGVpZ2h0KCkgKyByZW5kZXJCb3gtPm1hcmdpbkhlaWdo
dCgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFJlbmRlcklubGluZSogcmVuZGVy
SW5saW5lID0gdG9SZW5kZXJJbmxpbmUocmVuZGVyZXIpOworCisgICAgICAgICAgICAvLyBSZW5k
ZXJJbmxpbmUncyBib3VuZGluZyBib3ggaW5jbHVkZXMgcGFkZGluZ3MgYW5kIGJvcmRlcnMsIGV4
Y2x1ZGVzIG1hcmdpbnMuCisgICAgICAgICAgICBib3JkZXJCb3ggPSByZW5kZXJJbmxpbmUtPmxp
bmVzQm91bmRpbmdCb3goKTsKKyAgICAgICAgICAgIHBhZGRpbmdCb3ggPSBMYXlvdXRSZWN0KGJv
cmRlckJveC54KCkgKyByZW5kZXJJbmxpbmUtPmJvcmRlckxlZnQoKSwgYm9yZGVyQm94LnkoKSAr
IHJlbmRlcklubGluZS0+Ym9yZGVyVG9wKCksCisgICAgICAgICAgICAgICAgICAgIGJvcmRlckJv
eC53aWR0aCgpIC0gcmVuZGVySW5saW5lLT5ib3JkZXJMZWZ0KCkgLSByZW5kZXJJbmxpbmUtPmJv
cmRlclJpZ2h0KCksIGJvcmRlckJveC5oZWlnaHQoKSAtIHJlbmRlcklubGluZS0+Ym9yZGVyVG9w
KCkgLSByZW5kZXJJbmxpbmUtPmJvcmRlckJvdHRvbSgpKTsKKyAgICAgICAgICAgIGNvbnRlbnRC
b3ggPSBMYXlvdXRSZWN0KHBhZGRpbmdCb3gueCgpICsgcmVuZGVySW5saW5lLT5wYWRkaW5nTGVm
dCgpLCBwYWRkaW5nQm94LnkoKSArIHJlbmRlcklubGluZS0+cGFkZGluZ1RvcCgpLAorICAgICAg
ICAgICAgICAgICAgICBwYWRkaW5nQm94LndpZHRoKCkgLSByZW5kZXJJbmxpbmUtPnBhZGRpbmdM
ZWZ0KCkgLSByZW5kZXJJbmxpbmUtPnBhZGRpbmdSaWdodCgpLCBwYWRkaW5nQm94LmhlaWdodCgp
IC0gcmVuZGVySW5saW5lLT5wYWRkaW5nVG9wKCkgLSByZW5kZXJJbmxpbmUtPnBhZGRpbmdCb3R0
b20oKSk7CisgICAgICAgICAgICAvLyBJZ25vcmUgbWFyZ2luVG9wIGFuZCBtYXJnaW5Cb3R0b20g
Zm9yIGlubGluZXMuCisgICAgICAgICAgICBtYXJnaW5Cb3ggPSBMYXlvdXRSZWN0KGJvcmRlckJv
eC54KCkgLSByZW5kZXJJbmxpbmUtPm1hcmdpbkxlZnQoKSwgYm9yZGVyQm94LnkoKSwKKyAgICAg
ICAgICAgICAgICAgICAgYm9yZGVyQm94LndpZHRoKCkgKyByZW5kZXJJbmxpbmUtPm1hcmdpbldp
ZHRoKCksIGJvcmRlckJveC5oZWlnaHQoKSk7CisgICAgICAgIH0KKworICAgICAgICBGbG9hdFF1
YWQgYWJzQ29udGVudFF1YWQgPSByZW5kZXJlci0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJl
Y3QoY29udGVudEJveCkpOworICAgICAgICBGbG9hdFF1YWQgYWJzUGFkZGluZ1F1YWQgPSByZW5k
ZXJlci0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QocGFkZGluZ0JveCkpOworICAgICAg
ICBGbG9hdFF1YWQgYWJzQm9yZGVyUXVhZCA9IHJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFk
KEZsb2F0UmVjdChib3JkZXJCb3gpKTsKKyAgICAgICAgRmxvYXRRdWFkIGFic01hcmdpblF1YWQg
PSByZW5kZXJlci0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QobWFyZ2luQm94KSk7CisK
KyAgICAgICAgY29udGVudHNRdWFkVG9QYWdlKG1haW5WaWV3LCBjb250YWluaW5nVmlldywgYWJz
Q29udGVudFF1YWQpOworICAgICAgICBjb250ZW50c1F1YWRUb1BhZ2UobWFpblZpZXcsIGNvbnRh
aW5pbmdWaWV3LCBhYnNQYWRkaW5nUXVhZCk7CisgICAgICAgIGNvbnRlbnRzUXVhZFRvUGFnZSht
YWluVmlldywgY29udGFpbmluZ1ZpZXcsIGFic0JvcmRlclF1YWQpOworICAgICAgICBjb250ZW50
c1F1YWRUb1BhZ2UobWFpblZpZXcsIGNvbnRhaW5pbmdWaWV3LCBhYnNNYXJnaW5RdWFkKTsKKwor
ICAgICAgICB0aXRsZUFuY2hvckJveCA9IGFic01hcmdpblF1YWQuZW5jbG9zaW5nQm91bmRpbmdC
b3goKTsKKworICAgICAgICBoaWdobGlnaHQtPnR5cGUgPSBIaWdobGlnaHRUeXBlTm9kZTsKKyAg
ICAgICAgaGlnaGxpZ2h0LT5xdWFkcy5hcHBlbmQoYWJzTWFyZ2luUXVhZCk7CisgICAgICAgIGhp
Z2hsaWdodC0+cXVhZHMuYXBwZW5kKGFic0JvcmRlclF1YWQpOworICAgICAgICBoaWdobGlnaHQt
PnF1YWRzLmFwcGVuZChhYnNQYWRkaW5nUXVhZCk7CisgICAgICAgIGhpZ2hsaWdodC0+cXVhZHMu
YXBwZW5kKGFic0NvbnRlbnRRdWFkKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAg
ICAgIGRyYXdIaWdobGlnaHRGb3JCb3goKmNvbnRleHQsIGFic0NvbnRlbnRRdWFkLCBhYnNQYWRk
aW5nUXVhZCwgYWJzQm9yZGVyUXVhZCwgYWJzTWFyZ2luUXVhZCwgaGlnaGxpZ2h0Q29uZmlnKTsK
KyAgICB9CisKKyAgICAvLyBEcmF3IG5vZGUgdGl0bGUgaWYgbmVjZXNzYXJ5LgorCisgICAgaWYg
KCFub2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChjb250
ZXh0ICYmIGhpZ2hsaWdodENvbmZpZy5zaG93SW5mbykKKyAgICAgICAgZHJhd0VsZW1lbnRUaXRs
ZSgqY29udGV4dCwgbm9kZSwgcmVuZGVyZXIsIHBpeGVsU25hcHBlZEludFJlY3QoYm91bmRpbmdC
b3gpLCBwaXhlbFNuYXBwZWRJbnRSZWN0KHRpdGxlQW5jaG9yQm94KSwgdmlzaWJsZVJlY3QsIGNv
bnRhaW5pbmdGcmFtZS0+c2V0dGluZ3MoKSk7Cit9CisKK3N0YXRpYyB2b2lkIGdldE9yRHJhd1Jl
Y3RIaWdobGlnaHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBQYWdlKiBwYWdlLCBJbnRSZWN0
KiByZWN0LCBjb25zdCBIaWdobGlnaHRDb25maWcmIGhpZ2hsaWdodENvbmZpZywgSGlnaGxpZ2h0
ICpoaWdobGlnaHQpCit7CisgICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBG
bG9hdFJlY3QgaGlnaGxpZ2h0UmVjdCgqcmVjdCk7CisKKyAgICBoaWdobGlnaHQtPnR5cGUgPSBI
aWdobGlnaHRUeXBlUmVjdHM7CisgICAgaGlnaGxpZ2h0LT5xdWFkcy5hcHBlbmQoaGlnaGxpZ2h0
UmVjdCk7CisKKyAgICBpZiAoY29udGV4dCkgeworICAgICAgICBGcmFtZVZpZXcqIHZpZXcgPSBw
YWdlLT5tYWluRnJhbWUoKS0+dmlldygpOworICAgICAgICBpZiAoIXZpZXctPmRlbGVnYXRlc1Nj
cm9sbGluZygpKSB7CisgICAgICAgICAgICBGbG9hdFJlY3QgdmlzaWJsZVJlY3QgPSB2aWV3LT52
aXNpYmxlQ29udGVudFJlY3QoKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnRyYW5zbGF0ZSgtdmlz
aWJsZVJlY3QueCgpLCAtdmlzaWJsZVJlY3QueSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIGRy
YXdPdXRsaW5lZFF1YWQoKmNvbnRleHQsIGhpZ2hsaWdodFJlY3QsIGhpZ2hsaWdodENvbmZpZy5j
b250ZW50LCBoaWdobGlnaHRDb25maWcuY29udGVudE91dGxpbmUpOworICAgIH0KK30KKworfSAv
LyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK0luc3BlY3Rvck92ZXJsYXk6Okluc3BlY3Rvck92ZXJs
YXkoUGFnZSogcGFnZSwgSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQpCisgICAgOiBtX3BhZ2UocGFn
ZSkKKyAgICAsIG1fY2xpZW50KGNsaWVudCkKK3sKK30KKwordm9pZCBJbnNwZWN0b3JPdmVybGF5
OjpwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgZHJhd1BhdXNlZEluRGVi
dWdnZXIoY29udGV4dCk7CisgICAgZHJhd05vZGVIaWdobGlnaHQoY29udGV4dCk7CisgICAgZHJh
d1JlY3RIaWdobGlnaHQoY29udGV4dCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6ZHJh
d091dGxpbmUoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiByZWN0
LCBjb25zdCBDb2xvciYgY29sb3IpCit7CisgICAgRmxvYXRSZWN0IG91dGxpbmVSZWN0ID0gcmVj
dDsKKyAgICBkcmF3T3V0bGluZWRRdWFkKGNvbnRleHQsIG91dGxpbmVSZWN0LCBDb2xvcigpLCBj
b2xvcik7Cit9CisKK3ZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6Z2V0SGlnaGxpZ2h0KEhpZ2hsaWdo
dCogaGlnaGxpZ2h0KSBjb25zdAoreworICAgIGlmICghbV9oaWdobGlnaHROb2RlICYmICFtX2hp
Z2hsaWdodFJlY3QpCisgICAgICAgIHJldHVybjsKKworICAgIGhpZ2hsaWdodC0+dHlwZSA9IEhp
Z2hsaWdodFR5cGVSZWN0czsKKyAgICBpZiAobV9oaWdobGlnaHROb2RlKSB7CisgICAgICAgIGhp
Z2hsaWdodC0+c2V0Q29sb3JzKG1fbm9kZUhpZ2hsaWdodENvbmZpZyk7CisgICAgICAgIGdldE9y
RHJhd05vZGVIaWdobGlnaHQoMCwgbV9oaWdobGlnaHROb2RlLmdldCgpLCBtX25vZGVIaWdobGln
aHRDb25maWcsIGhpZ2hsaWdodCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaGlnaGxpZ2h0LT5z
ZXRDb2xvcnMobV9yZWN0SGlnaGxpZ2h0Q29uZmlnKTsKKyAgICAgICAgZ2V0T3JEcmF3UmVjdEhp
Z2hsaWdodCgwLCBtX3BhZ2UsIG1faGlnaGxpZ2h0UmVjdC5nZXQoKSwgbV9yZWN0SGlnaGxpZ2h0
Q29uZmlnLCBoaWdobGlnaHQpOworICAgIH0KK30KKwordm9pZCBJbnNwZWN0b3JPdmVybGF5Ojpz
ZXRQYXVzZWRJbkRlYnVnZ2VyTWVzc2FnZShjb25zdCBTdHJpbmcqIG1lc3NhZ2UpCit7CisgICAg
bV9wYXVzZWRJbkRlYnVnZ2VyTWVzc2FnZSA9IG1lc3NhZ2UgPyAqbWVzc2FnZSA6IFN0cmluZygp
OworICAgIHVwZGF0ZSgpOworfQorCit2b2lkIEluc3BlY3Rvck92ZXJsYXk6OmhpZGVIaWdobGln
aHQoKQoreworICAgIG1faGlnaGxpZ2h0Tm9kZS5jbGVhcigpOworICAgIG1faGlnaGxpZ2h0UmVj
dC5jbGVhcigpOworICAgIHVwZGF0ZSgpOworfQorCit2b2lkIEluc3BlY3Rvck92ZXJsYXk6Omhp
Z2hsaWdodE5vZGUoTm9kZSogbm9kZSwgY29uc3QgSGlnaGxpZ2h0Q29uZmlnJiBoaWdobGlnaHRD
b25maWcpCit7CisgICAgbV9ub2RlSGlnaGxpZ2h0Q29uZmlnID0gaGlnaGxpZ2h0Q29uZmlnOwor
ICAgIG1faGlnaGxpZ2h0Tm9kZSA9IG5vZGU7CisgICAgdXBkYXRlKCk7Cit9CisKK3ZvaWQgSW5z
cGVjdG9yT3ZlcmxheTo6aGlnaGxpZ2h0UmVjdChQYXNzT3duUHRyPEludFJlY3Q+IHJlY3QsIGNv
bnN0IEhpZ2hsaWdodENvbmZpZyYgaGlnaGxpZ2h0Q29uZmlnKQoreworICAgIG1fcmVjdEhpZ2hs
aWdodENvbmZpZyA9IGhpZ2hsaWdodENvbmZpZzsKKyAgICBtX2hpZ2hsaWdodFJlY3QgPSByZWN0
OworICAgIHVwZGF0ZSgpOworfQorCitOb2RlKiBJbnNwZWN0b3JPdmVybGF5OjpoaWdobGlnaHRl
ZE5vZGUoKSBjb25zdAoreworICAgIHJldHVybiBtX2hpZ2hsaWdodE5vZGUuZ2V0KCk7Cit9CisK
K3ZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6dXBkYXRlKCkKK3sKKyAgICBpZiAobV9oaWdobGlnaHRO
b2RlIHx8IG1faGlnaGxpZ2h0UmVjdCB8fCAhbV9wYXVzZWRJbkRlYnVnZ2VyTWVzc2FnZS5pc051
bGwoKSkKKyAgICAgICAgbV9jbGllbnQtPmhpZ2hsaWdodCgpOworICAgIGVsc2UKKyAgICAgICAg
bV9jbGllbnQtPmhpZGVIaWdobGlnaHQoKTsKK30KKwordm9pZCBJbnNwZWN0b3JPdmVybGF5Ojpk
cmF3Tm9kZUhpZ2hsaWdodChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgaWYgKCFt
X2hpZ2hsaWdodE5vZGUpCisgICAgICAgIHJldHVybjsKKworICAgIEhpZ2hsaWdodCBoaWdobGln
aHQ7CisgICAgZ2V0T3JEcmF3Tm9kZUhpZ2hsaWdodCgmY29udGV4dCwgbV9oaWdobGlnaHROb2Rl
LmdldCgpLCBtX25vZGVIaWdobGlnaHRDb25maWcsICZoaWdobGlnaHQpOworfQorCit2b2lkIElu
c3BlY3Rvck92ZXJsYXk6OmRyYXdSZWN0SGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCkKK3sKKyAgICBpZiAoIW1faGlnaGxpZ2h0UmVjdCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
SGlnaGxpZ2h0IGhpZ2hsaWdodDsKKyAgICBnZXRPckRyYXdSZWN0SGlnaGxpZ2h0KCZjb250ZXh0
LCBtX3BhZ2UsIG1faGlnaGxpZ2h0UmVjdC5nZXQoKSwgbV9yZWN0SGlnaGxpZ2h0Q29uZmlnLCAm
aGlnaGxpZ2h0KTsKK30KKwordm9pZCBJbnNwZWN0b3JPdmVybGF5OjpkcmF3UGF1c2VkSW5EZWJ1
Z2dlcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgaWYgKG1fcGF1c2VkSW5EZWJ1
Z2dlck1lc3NhZ2UuaXNOdWxsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIERFRklORV9TVEFU
SUNfTE9DQUwoQ29sb3IsIGJhY2tncm91bmRDb2xvciwgKDAsIDAsIDAsIDMxKSk7CisgICAgREVG
SU5FX1NUQVRJQ19MT0NBTChDb2xvciwgdGV4dEJhY2tncm91bmRDb2xvciwgKDI1NSwgMjU1LCAx
OTQpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKENvbG9yLCBib3JkZXJDb2xvciwgKDEyOCwg
MTI4LCAxMjgpKTsKKworICAgIEZyYW1lKiBmcmFtZSA9IG1fcGFnZS0+bWFpbkZyYW1lKCk7Cisg
ICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZnJhbWUtPnNldHRpbmdzKCk7CisgICAgSW50UmVjdCB2
aXNpYmxlUmVjdCA9IEludFJlY3QoSW50UG9pbnQoKSwgZnJhbWUtPnZpZXcoKS0+dmlzaWJsZVNp
emUoKSk7CisKKyAgICBjb250ZXh0LnNldEZpbGxDb2xvcihiYWNrZ3JvdW5kQ29sb3IsIENvbG9y
U3BhY2VEZXZpY2VSR0IpOworICAgIGNvbnRleHQuZmlsbFJlY3QodmlzaWJsZVJlY3QpOworCisg
ICAgRm9udERlc2NyaXB0aW9uIGRlc2M7CisgICAgc2V0VXBGb250RGVzY3JpcHRpb24oZGVzYywg
c2V0dGluZ3MpOworICAgIEZvbnQgZm9udCA9IEZvbnQoZGVzYywgMCwgMCk7CisgICAgZm9udC51
cGRhdGUoMCk7CisKKyAgICBUZXh0UnVuIHRleHRSdW4obV9wYXVzZWRJbkRlYnVnZ2VyTWVzc2Fn
ZSk7CisgICAgSW50UmVjdCB0aXRsZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGZvbnQuc2VsZWN0
aW9uUmVjdEZvclRleHQodGV4dFJ1biwgSW50UG9pbnQoKSwgZm9udEhlaWdodFB4KSk7CisgICAg
dGl0bGVSZWN0LmluZmxhdGUocmVjdEluZmxhdGVQeCk7CisgICAgdGl0bGVSZWN0LnNldExvY2F0
aW9uKEludFBvaW50KHZpc2libGVSZWN0LndpZHRoKCkgLyAyIC0gdGl0bGVSZWN0LndpZHRoKCkg
LyAyLCAwKSk7CisKKyAgICBjb250ZXh0LnNldEZpbGxDb2xvcih0ZXh0QmFja2dyb3VuZENvbG9y
LCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKGJvcmRl
ckNvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBjb250ZXh0LmRyYXdSZWN0KHRpdGxl
UmVjdCk7CisgICAgZHJhd1N1YnN0cmluZyh0ZXh0UnVuLCAwLCBtX3BhdXNlZEluRGVidWdnZXJN
ZXNzYWdlLmxlbmd0aCgpLCBDb2xvcjo6YmxhY2ssIGZvbnQsIGNvbnRleHQsIHRpdGxlUmVjdCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNU
T1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3Zlcmxh
eS5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5hYzIyZmYxYzNjNmU3M2Q1MWY2NmI3YWVlYzFmOWJiZTIyMGY4ZGMwCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuaApAQCAt
MCwwICsxLDEyNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5h
bWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAq
ICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgSW5zcGVjdG9yT3ZlcmxheV9oCisjZGVmaW5lIEluc3Bl
Y3Rvck92ZXJsYXlfaAorCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJGbG9hdFF1YWQu
aCIKKyNpbmNsdWRlICJMYXlvdXRUeXBlcy5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKworI2luY2x1
ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgQ29sb3I7CitjbGFzcyBHcmFwaGljc0NvbnRleHQ7CitjbGFzcyBJbnNw
ZWN0b3JDbGllbnQ7CitjbGFzcyBJbnRSZWN0OworY2xhc3MgTm9kZTsKK2NsYXNzIFBhZ2U7CisK
K3N0cnVjdCBIaWdobGlnaHRDb25maWcgeworICAgIENvbG9yIGNvbnRlbnQ7CisgICAgQ29sb3Ig
Y29udGVudE91dGxpbmU7CisgICAgQ29sb3IgcGFkZGluZzsKKyAgICBDb2xvciBib3JkZXI7Cisg
ICAgQ29sb3IgbWFyZ2luOworICAgIGJvb2wgc2hvd0luZm87Cit9OworCitlbnVtIEhpZ2hsaWdo
dFR5cGUgeworICAgIEhpZ2hsaWdodFR5cGVOb2RlLAorICAgIEhpZ2hsaWdodFR5cGVSZWN0cywK
K307CisKK3N0cnVjdCBIaWdobGlnaHQgeworICAgIHZvaWQgc2V0Q29sb3JzKGNvbnN0IEhpZ2hs
aWdodENvbmZpZyYgaGlnaGxpZ2h0Q29uZmlnKQorICAgIHsKKyAgICAgICAgY29udGVudENvbG9y
ID0gaGlnaGxpZ2h0Q29uZmlnLmNvbnRlbnQ7CisgICAgICAgIHBhZGRpbmdDb2xvciA9IGhpZ2hs
aWdodENvbmZpZy5wYWRkaW5nOworICAgICAgICBib3JkZXJDb2xvciA9IGhpZ2hsaWdodENvbmZp
Zy5ib3JkZXI7CisgICAgICAgIG1hcmdpbkNvbG9yID0gaGlnaGxpZ2h0Q29uZmlnLm1hcmdpbjsK
KyAgICB9CisKKyAgICBDb2xvciBjb250ZW50Q29sb3I7CisgICAgQ29sb3IgcGFkZGluZ0NvbG9y
OworICAgIENvbG9yIGJvcmRlckNvbG9yOworICAgIENvbG9yIG1hcmdpbkNvbG9yOworCisgICAg
Ly8gV2hlbiB0aGUgdHlwZSBpcyBOb2RlLCB0aGVyZSBhcmUgNCBxdWFkcyAobWFyZ2luLCBib3Jk
ZXIsIHBhZGRpbmcsIGNvbnRlbnQpLgorICAgIC8vIFdoZW4gdGhlIHR5cGUgaXMgUmVjdHMsIHRo
aXMgaXMganVzdCBhIGxpc3Qgb2YgcXVhZHMuCisgICAgSGlnaGxpZ2h0VHlwZSB0eXBlOworICAg
IFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOworfTsKKworY2xhc3MgSW5zcGVjdG9yT3ZlcmxheSB7
CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8SW5zcGVjdG9yT3ZlcmxheT4gY3JlYXRl
KFBhZ2UqIHBhZ2UsIEluc3BlY3RvckNsaWVudCogY2xpZW50KQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UHRyKG5ldyBJbnNwZWN0b3JPdmVybGF5KHBhZ2UsIGNsaWVudCkpOworICAgIH0K
KworICAgIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0Jik7CisgICAgdm9pZCBkcmF3T3V0bGlu
ZShHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXlvdXRSZWN0JiwgY29uc3QgQ29sb3ImKTsKKyAg
ICB2b2lkIGdldEhpZ2hsaWdodChIaWdobGlnaHQqKSBjb25zdDsKKworICAgIHZvaWQgc2V0UGF1
c2VkSW5EZWJ1Z2dlck1lc3NhZ2UoY29uc3QgU3RyaW5nKik7CisKKyAgICB2b2lkIGhpZGVIaWdo
bGlnaHQoKTsKKyAgICB2b2lkIGhpZ2hsaWdodE5vZGUoTm9kZSosIGNvbnN0IEhpZ2hsaWdodENv
bmZpZyYpOworICAgIHZvaWQgaGlnaGxpZ2h0UmVjdChQYXNzT3duUHRyPEludFJlY3Q+LCBjb25z
dCBIaWdobGlnaHRDb25maWcmKTsKKworICAgIE5vZGUqIGhpZ2hsaWdodGVkTm9kZSgpIGNvbnN0
OworCitwcml2YXRlOgorICAgIEluc3BlY3Rvck92ZXJsYXkoUGFnZSosIEluc3BlY3RvckNsaWVu
dCopOworCisgICAgdm9pZCB1cGRhdGUoKTsKKyAgICB2b2lkIGRyYXdOb2RlSGlnaGxpZ2h0KEdy
YXBoaWNzQ29udGV4dCYpOworICAgIHZvaWQgZHJhd1JlY3RIaWdobGlnaHQoR3JhcGhpY3NDb250
ZXh0Jik7CisgICAgdm9pZCBkcmF3UGF1c2VkSW5EZWJ1Z2dlcihHcmFwaGljc0NvbnRleHQmKTsK
KworICAgIFBhZ2UqIG1fcGFnZTsKKyAgICBJbnNwZWN0b3JDbGllbnQqIG1fY2xpZW50OworICAg
IFN0cmluZyBtX3BhdXNlZEluRGVidWdnZXJNZXNzYWdlOworICAgIFJlZlB0cjxOb2RlPiBtX2hp
Z2hsaWdodE5vZGU7CisgICAgSGlnaGxpZ2h0Q29uZmlnIG1fbm9kZUhpZ2hsaWdodENvbmZpZzsK
KyAgICBPd25QdHI8SW50UmVjdD4gbV9oaWdobGlnaHRSZWN0OworICAgIEhpZ2hsaWdodENvbmZp
ZyBtX3JlY3RIaWdobGlnaHRDb25maWc7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KworI2VuZGlmIC8vIEluc3BlY3Rvck92ZXJsYXlfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAppbmRleCAzNzhkYmVjODc3ODRjMDU4YWM1Mzk1
ZGM5MzliMTk0OWY1ZTljYTllLi5iZWZiZThiM2MzM2ZkMDIyOTMwOGZiMjZiNjAxYWE5YTgwYWY0
M2YzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFn
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50
LmNwcApAQCAtNDQsNyArNDQsNiBAQAogI2luY2x1ZGUgIkNvb2tpZS5oIgogI2luY2x1ZGUgIkNv
b2tpZUphci5oIgogI2luY2x1ZGUgIkRPTUltcGxlbWVudGF0aW9uLmgiCi0jaW5jbHVkZSAiRE9N
Tm9kZUhpZ2hsaWdodGVyLmgiCiAjaW5jbHVkZSAiRE9NUGF0Y2hTdXBwb3J0LmgiCiAjaW5jbHVk
ZSAiRGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIK
QEAgLTYxLDYgKzYwLDcgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnQuaCIKICNpbmNsdWRl
ICJJbnNwZWN0b3JGcm9udGVuZC5oIgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlv
bi5oIgorI2luY2x1ZGUgIkluc3BlY3Rvck92ZXJsYXkuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JT
dGF0ZS5oIgogI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgogI2luY2x1ZGUgIkluc3RydW1l
bnRpbmdBZ2VudHMuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdl
RGVidWdnZXJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZURlYnVnZ2Vy
QWdlbnQuY3BwCmluZGV4IGI2NDZhZjE5MzhlMDU2YzcwNGU3M2M2YmNmMjI5NjE1ZDVmNjA3ZGUu
LmM5NzMyM2JmMWI4OWI5YTlkMTBkYzgzMTVkOTNhMmJmMjdiZTJiMmIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2VudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50LmNwcApAQCAtMzUsNyArMzUsNyBA
QAogI2luY2x1ZGUgIlBhZ2VEZWJ1Z2dlckFnZW50LmgiCiAKICNpbmNsdWRlICJDb25zb2xlLmgi
Ci0jaW5jbHVkZSAiRE9NTm9kZUhpZ2hsaWdodGVyLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yT3Zl
cmxheS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWdlU2NyaXB0RGVidWdTZXJ2
ZXIuaCIKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9HZXN0dXJlVGFwSGlnaGxp
Z2h0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvR2VzdHVyZVRhcEhpZ2hsaWdodGVyLmgKaW5k
ZXggMWE0N2Q3MWZkNWJlZDdlMmZlNTIyNmVlNjdlNDc1NjlmMjAzYjc3NC4uZTgwMTVmZTVjYzA4
ZTkyNDMzNTBmZTE5MmNkMDcyNDQwNGZlOTdhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9HZXN0dXJlVGFwSGlnaGxpZ2h0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0dl
c3R1cmVUYXBIaWdobGlnaHRlci5oCkBAIC00Myw0ICs0Myw0IEBAIFBhdGggcGF0aEZvck5vZGVI
aWdobGlnaHQoY29uc3QgTm9kZSopOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRp
ZiAvLyBET01Ob2RlSGlnaGxpZ2h0ZXJfaAorI2VuZGlmIC8vIEdlc3R1cmVUYXBIaWdobGlnaHRl
cl9faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwIGIv
U291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IDJmZGMwNjZkNjVhNjU2
NTdhM2JmYmEyMmM1OGIwMGIzZDMzZTZmNjAuLjZhYWE3ZjE3Mjg3NTdhMWU0YmMwNGE3ZDk5MWMz
M2Y2OTJlYjI3NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKQEAgLTMwLDcg
KzMwLDYgQEAKICNpbmNsdWRlICJDbGllbnRSZWN0LmgiCiAjaW5jbHVkZSAiQ2xpZW50UmVjdExp
c3QuaCIKICNpbmNsdWRlICJDb21wb3NlZFNoYWRvd1RyZWVXYWxrZXIuaCIKLSNpbmNsdWRlICJE
T01Ob2RlSGlnaGxpZ2h0ZXIuaCIKICNpbmNsdWRlICJET01TdHJpbmdMaXN0LmgiCiAjaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudE1hcmtlci5oIgpAQCAtNTAsNiArNDks
NyBAQAogI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJJbnNwZWN0
b3JDb3VudGVycy5oIgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgorI2lu
Y2x1ZGUgIkluc3BlY3Rvck92ZXJsYXkuaCIKICNpbmNsdWRlICJJbnN0cnVtZW50aW5nQWdlbnRz
LmgiCiAjaW5jbHVkZSAiSW50ZXJuYWxTZXR0aW5ncy5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>156699</attachid>
            <date>2012-08-06 08:29:46 -0700</date>
            <delta_ts>2012-08-08 05:51:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-93253-20120806192922.patch</filename>
            <type>text/plain</type>
            <size>84046</size>
            <attacher name="Sergey Rogulenko">rogulenko</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0NzcyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjg5MzE0MzI5YjUyNjFj
ZTcxNGVkOTNkYzJlMjIwNWNmNDcyNWNjYi4uMjFjNzBkNzcxZmViYTllMmZmNmE2ZDEwNDBlYmUw
ZGU4NmRlZmUyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDEyLTA4LTA2ICBTZXJn
ZXkgUm9ndWxlbmtvICA8cm9ndWxlbmtvQGdvb2dsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogcmVuYW1pbmcgRE9NTm9kZUhpZ2hsaWdodGVyIHRvIEluc3BlY3Rvck92ZXJsYXkKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkzMjUzCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVuYW1pbmcgRE9N
Tm9kZUhpZ2hsaWdodGVyIHRvIEluc3BlY3Rvck92ZXJsYXkgd2hlcmUgbmVjZXNzYXJ5LgorCisg
ICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToK
KyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAg
KiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckFsbElu
T25lLmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6Cisg
ICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9y
T3ZlcmxheS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NTm9k
ZUhpZ2hsaWdodGVyLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6Oklu
c3BlY3Rvck92ZXJsYXkpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JPdmVybGF5OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVy
bGF5OjpkcmF3T3V0bGluZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5Ojpn
ZXRIaWdobGlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6c2V0UGF1
c2VkSW5EZWJ1Z2dlck1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3Zlcmxh
eTo6aGlkZUhpZ2hsaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5Ojpo
aWdobGlnaHROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OmhpZ2hs
aWdodFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6aGlnaGxpZ2h0
ZWROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OnVwZGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpkcmF3Tm9kZUhpZ2hsaWdodCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpkcmF3UmVjdEhpZ2hsaWdodCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpkcmF3UGF1c2VkSW5EZWJ1Z2dlcik6
CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuaDogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuaC4KKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoSGlnaGxpZ2h0Q29uZmlnKToKKyAgICAgICAgKFdlYkNvcmU6Okhp
Z2hsaWdodDo6c2V0Q29sb3JzKToKKyAgICAgICAgKEhpZ2hsaWdodCk6CisgICAgICAgIChJbnNw
ZWN0b3JPdmVybGF5KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OmNyZWF0
ZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHA6CisgICAgICAg
ICogaW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKiBwYWdlL0dlc3R1
cmVUYXBIaWdobGlnaHRlci5oOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKwog
MjAxMi0wOC0wNiAgQW5kcmVpIEJ1Y3VyICA8YWJ1Y3VyQGFkb2JlLmNvbT4KIAogICAgICAgICBb
Q1NTIFJlZ2lvbnNdIEFkZCB0aGUgTmFtZWRGbG93LmdldFJlZ2lvbnMoKSBBUEkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VM
aXN0cy50eHQKaW5kZXggYzU3MGYwODk2M2FjMTc4MjUyODI4OTg2MjE4ZDJhODE4YWRiMmFlMy4u
ZDc4NWJkZmI5OGQyYWQ3N2Q3OTExNTAzNDNmOTUxMGE2YjdmYjg0YiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTE1MDYsNyArMTUwNiw2IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBpbnNw
ZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3BwCiAgICAgaW5zcGVjdG9yL0NvbnRlbnRTZWFyY2hVdGls
cy5jcHAKICAgICBpbnNwZWN0b3IvRE9NRWRpdG9yLmNwcAotICAgIGluc3BlY3Rvci9ET01Ob2Rl
SGlnaGxpZ2h0ZXIuY3BwCiAgICAgaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5jcHAKICAgICBp
bnNwZWN0b3IvSWRlbnRpZmllcnNGYWN0b3J5LmNwcAogICAgIGluc3BlY3Rvci9JbmplY3RlZFNj
cmlwdC5jcHAKQEAgLTE1MzgsNiArMTUzNyw3IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBp
bnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwCiAgICAgaW5zcGVjdG9yL0luc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbi5jcHAKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5QWdl
bnQuY3BwCisgICAgaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwCiAgICAgaW5zcGVjdG9y
L0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclJlc291
cmNlQWdlbnQuY3BwCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDhiMWM2Mjk2YmYyNDI4NGU5NWMwNzIwN2Iy
MzNkNjRmZWZiMWIxNzcuLjE5ODM2MDg1N2NhZWZlN2E4Zjc1M2M4NjI3ZWYyNDNkNjRmMTAwM2Yg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291
cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtMjcyMiw4ICsyNzIyLDYgQEAgd2Vi
Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29udGVudFNlYXJj
aFV0aWxzLmggXAogCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01FZGl0b3IuY3BwIFwKIAlT
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NRWRpdG9yLmggXAotCVNvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvRE9NTm9kZUhpZ2hsaWdodGVyLmggXAogCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01Q
YXRjaFN1cHBvcnQuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NUGF0Y2hTdXBw
b3J0LmggXAogCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JZGVudGlmaWVyc0ZhY3RvcnkuY3Bw
IFwKQEAgLTI3ODgsNiArMjc4Niw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIFwKIAlTb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQuY3BwIFwKIAlTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQuaCBcCisJU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yT3ZlcmxheS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
UGFnZUFnZW50LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VB
Z2VudC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2Vu
dC5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9X
ZWJDb3JlL1RhcmdldC5wcmkKaW5kZXggNmI3ZWEzNzYwNTVmMWUzMTkwNTU0YmFlNzhjYjI0ZmFm
MDRlYzA1Yy4uZGFlZTk4NDdjYTA4NDA4MDFhZmUyYzQ5MzQ2ZWUzYmQwNTlhMDNhZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9UYXJn
ZXQucHJpCkBAIC03MzgsNyArNzM4LDYgQEAgU09VUkNFUyArPSBcCiAgICAgaW5zcGVjdG9yL0Nv
bnNvbGVNZXNzYWdlLmNwcCBcCiAgICAgaW5zcGVjdG9yL0NvbnRlbnRTZWFyY2hVdGlscy5jcHAg
XAogICAgIGluc3BlY3Rvci9ET01FZGl0b3IuY3BwIFwKLSAgICBpbnNwZWN0b3IvRE9NTm9kZUhp
Z2hsaWdodGVyLmNwcCBcCiAgICAgaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5jcHAgXAogICAg
IGluc3BlY3Rvci9JZGVudGlmaWVyc0ZhY3RvcnkuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5qZWN0
ZWRTY3JpcHQuY3BwIFwKQEAgLTc2Nyw2ICs3NjYsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBpbnNw
ZWN0b3IvSW5zcGVjdG9ySGlzdG9yeS5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JJbnN0
cnVtZW50YXRpb24uY3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQuY3Bw
IFwKKyAgICBpbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAgXAogICAgIGluc3BlY3Rvci9J
bnNwZWN0b3JQYWdlQWdlbnQuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJB
Z2VudC5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmNwcCBcCkBA
IC0xODQxLDcgKzE4NDEsNiBAQCBIRUFERVJTICs9IFwKICAgICBpbnNwZWN0b3IvQ29uc29sZU1l
c3NhZ2UuaCBcCiAgICAgaW5zcGVjdG9yL0NvbnRlbnRTZWFyY2hVdGlscy5oIFwKICAgICBpbnNw
ZWN0b3IvRE9NRWRpdG9yLmggXAotICAgIGluc3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuaCBc
CiAgICAgaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5oIFwKICAgICBpbnNwZWN0b3IvSWRlbnRp
ZmllcnNGYWN0b3J5LmggXAogICAgIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5oIFwKQEAgLTE4
NzIsNiArMTg3MSw3IEBAIEhFQURFUlMgKz0gXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JIaXN0
b3J5LmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCBcCiAgICAg
aW5zcGVjdG9yL0luc3BlY3Rvck1lbW9yeUFnZW50LmggXAorICAgIGluc3BlY3Rvci9JbnNwZWN0
b3JPdmVybGF5LmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuaCBcCiAgICAg
aW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuaCBcCiAgICAgaW5zcGVjdG9yL0luc3Bl
Y3RvclJlc291cmNlQWdlbnQuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggNWNjYWViNGIxMDRmYTFi
NmE3OTg1ZDZkYjQxMDJlODJhOGJmNTY4NC4uZTBjNDdjN2FiNzEzYTE2MGE2MmI4MmExNTlmNTk4
NTNlODM0N2U0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMjgwNyw4ICsyODA3LDYgQEAKICAgICAg
ICAgICAgICdpbnNwZWN0b3IvQ29udGVudFNlYXJjaFV0aWxzLmgnLAogICAgICAgICAgICAgJ2lu
c3BlY3Rvci9ET01FZGl0b3IuY3BwJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvRE9NRWRpdG9y
LmgnLAotICAgICAgICAgICAgJ2luc3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuY3BwJywKLSAg
ICAgICAgICAgICdpbnNwZWN0b3IvRE9NTm9kZUhpZ2hsaWdodGVyLmgnLAogICAgICAgICAgICAg
J2luc3BlY3Rvci9ET01QYXRjaFN1cHBvcnQuY3BwJywKICAgICAgICAgICAgICdpbnNwZWN0b3Iv
RE9NUGF0Y2hTdXBwb3J0LmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JZGVudGlmaWVyc0Zh
Y3RvcnkuY3BwJywKQEAgLTI4NjYsNiArMjg2NCw4IEBACiAgICAgICAgICAgICAnaW5zcGVjdG9y
L0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5z
cGVjdG9yTWVtb3J5QWdlbnQuY3BwJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9y
TWVtb3J5QWdlbnQuaCcsCisgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXku
Y3BwJywKKyAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5oJywKICAgICAg
ICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcCcsCiAgICAgICAgICAgICAn
aW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5oJywKICAgICAgICAgICAgICdpbnNwZWN0b3Iv
SW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvagppbmRleCA1NzMxYThmNzY5MmQxNzZjN2JjZDhlOWUyOWRhOTE1
NTk1YThmNjQ0Li43MGRiNTM3MjhkNTVhZGI5OGQ0YTQ1ZWQxM2Q0NDdjNGQ4ODMwMGZmIDEwMDc1
NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAtNzM4NDcs
MzAgKzczODQ3LDYgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZl
UGF0aD0iLi5caW5zcGVjdG9yXERPTU5vZGVIaWdobGlnaHRlci5jcHAiCi0JCQkJPgotCQkJCTxG
aWxlQ29uZmlndXJhdGlvbgotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgotCQkJCQlFeGNsdWRl
ZEZyb21CdWlsZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENv
bXBpbGVyVG9vbCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgotCQkJCTxGaWxl
Q29uZmlndXJhdGlvbgotCQkJCQlOYW1lPSJQcm9kdWN0aW9ufFdpbjMyIgotCQkJCQlFeGNsdWRl
ZEZyb21CdWlsZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENv
bXBpbGVyVG9vbCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgotCQkJPC9GaWxl
PgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxET01Ob2RlSGlnaGxp
Z2h0ZXIuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0i
Li5caW5zcGVjdG9yXERPTVBhdGNoU3VwcG9ydC5jcHAiCiAJCQkJPgogCQkJCTxGaWxlQ29uZmln
dXJhdGlvbgpAQCAtNzQ2NDMsNiArNzQ2MTksMzAgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8
RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3Rvck92ZXJsYXkuY3Bw
IgorCQkJCT4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4z
MiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJ
CQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJh
dGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iUHJvZHVjdGlvbnxXaW4z
MiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJ
CQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJh
dGlvbj4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0
b3JcSW5zcGVjdG9yT3ZlcmxheS5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yUGFnZUFnZW50LmNwcCIKIAkJCQk+
CiAJCQkJPEZpbGVDb25maWd1cmF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNzJmYjI0NTI0MWZkZDYwYzFiMTM4NmE1NThm
YjQ5Yzg2ZTJmZWQxNy4uNjNhN2EzMTVkMThmZjU0NDU5NDBjZmJjNTA2NDFmYzQ1NTZjYmNhZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtMTQ0OCw4ICsxNDQ4LDYgQEAKIAkJNEUxOTU5MkMwQTM5REFDQzAwMjIwRkU1IC8qIE1l
ZGlhUXVlcnlFdmFsdWF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDRFMTk1OTI2MEEzOURBQ0MwMDIyMEZFNSAvKiBNZWRpYVF1ZXJ5RXZhbHVhdG9y
LmggKi87IH07CiAJCTRFMTk1OTJEMEEzOURBQ0MwMDIyMEZFNSAvKiBNZWRpYVF1ZXJ5RXhwLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRFMTk1OTI3
MEEzOURBQ0MwMDIyMEZFNSAvKiBNZWRpYVF1ZXJ5RXhwLmNwcCAqLzsgfTsKIAkJNEUxOTU5MkUw
QTM5REFDQzAwMjIwRkU1IC8qIE1lZGlhUXVlcnlFeHAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRFMTk1OTI4MEEzOURBQ0MwMDIyMEZFNSAvKiBNZWRp
YVF1ZXJ5RXhwLmggKi87IH07Ci0JCTRGMTQ0MjI4MTMzOUZENjIwMEUwRDZGOCAvKiBET01Ob2Rl
SGlnaGxpZ2h0ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNEYxNDQyMjYxMzM5RkQ2MjAwRTBENkY4IC8qIERPTU5vZGVIaWdobGlnaHRlci5jcHAg
Ki87IH07Ci0JCTRGMTQ0MjI5MTMzOUZENjIwMEUwRDZGOCAvKiBET01Ob2RlSGlnaGxpZ2h0ZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRGMTQ0MjI3
MTMzOUZENjIwMEUwRDZGOCAvKiBET01Ob2RlSGlnaGxpZ2h0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0RjE1MzRERTExQjUzMkVDMDAyMUZE
ODYgLyogRWRpdGluZ0JlaGF2aW9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0RjE1MzRERDExQjUzMkVDMDAyMUZEODYgLyogRWRpdGluZ0JlaGF2aW9y
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNEYx
NTM0RTAxMUI1MzMwMjAwMjFGRDg2IC8qIEVkaXRpbmdCZWhhdmlvclR5cGVzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0RjE1MzRERjExQjUzMzAyMDAy
MUZEODYgLyogRWRpdGluZ0JlaGF2aW9yVHlwZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0RjJEMjA1NDEyRUFFN0IzMDA1QzI4NzQgLyogSW5z
cGVjdG9yQWdlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDRGMkQyMDUyMTJFQUU3QjMwMDVDMjg3NCAvKiBJbnNwZWN0b3JBZ2VudC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xOTY3LDYgKzE5NjUs
OCBAQAogCQk3QjFFQTBDRjE1NzZDNUI1MDA2MDE3N0QgLyogSlNVbmRvTWFuYWdlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0IxRUEwQ0QxNTc2QzVC
NTAwNjAxNzdEIC8qIEpTVW5kb01hbmFnZXIuaCAqLzsgfTsKIAkJN0I5MTg0RDIxNTc1OEU0MjAw
OTJBQTkzIC8qIFVuZG9NYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDdCOTE4NENGMTU3NThFNDIwMDkyQUE5MyAvKiBVbmRvTWFuYWdlci5j
cHAgKi87IH07CiAJCTdCOTE4NEQzMTU3NThFNDIwMDkyQUE5MyAvKiBVbmRvTWFuYWdlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0I5MTg0RDAxNTc1
OEU0MjAwOTJBQTkzIC8qIFVuZG9NYW5hZ2VyLmggKi87IH07CisJCTdDNTIyRDRCMTVCNDc3RTgw
MDlCN0M5NSAvKiBJbnNwZWN0b3JPdmVybGF5LmNwcCAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3QzUyMkQ0OTE1QjQ3N0U4MDA5QjdDOTUgLyogSW5zcGVjdG9yT3ZlcmxheS5j
cHAgKi87IH07CisJCTdDNTIyRDRDMTVCNDc4QjIwMDlCN0M5NSAvKiBJbnNwZWN0b3JPdmVybGF5
LmggKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M1MjJENEExNUI0NzdFODAw
OUI3Qzk1IC8qIEluc3BlY3Rvck92ZXJsYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk3RTMzQ0QwMTEyN0YzNDBEMDBCRThGMTcgLyogUHVyZ2VQ
cmlvcml0eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0UzM0NEMDAxMjdGMzQwRDAwQkU4RjE3IC8qIFB1cmdlUHJpb3JpdHkuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3RTM3RUYyRTEzMzkyMDg4MDBC
MjkyNTAgLyogU3VicmVzb3VyY2VMb2FkZXJDRi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3RTM3RUYyRDEzMzkyMDg4MDBCMjkyNTAgLyogU3VicmVz
b3VyY2VMb2FkZXJDRi5jcHAgKi87IH07CiAJCTdFOTlBRjUxMEIxMzg0NjQ2OEZCMDFBNSAvKiBX
aW5kb3dGb2N1c0FsbG93ZWRJbmRpY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gN0U5OUFGNTIwQjEzODQ2NDY4RkIwMUE1IC8qIFdpbmRvd0Zv
Y3VzQWxsb3dlZEluZGljYXRvci5jcHAgKi87IH07CkBAIC04NTc0LDggKzg1NzQsNiBAQAogCQk0
RTE5NTkyNjBBMzlEQUNDMDAyMjBGRTUgLyogTWVkaWFRdWVyeUV2YWx1YXRvci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFRdWVyeUV2YWx1YXRvci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk0RTE5NTkyNzBBMzlEQUNDMDAyMjBGRTUgLyogTWVkaWFR
dWVyeUV4cC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVkaWFR
dWVyeUV4cC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRFMTk1OTI4MEEzOURB
Q0MwMDIyMEZFNSAvKiBNZWRpYVF1ZXJ5RXhwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBNZWRpYVF1ZXJ5RXhwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTRG
MTQ0MjI2MTMzOUZENjIwMEUwRDZGOCAvKiBET01Ob2RlSGlnaGxpZ2h0ZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRE9NTm9kZUhpZ2hsaWdodGVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNEYxNDQyMjcxMzM5RkQ2MjAwRTBENkY4IC8qIERP
TU5vZGVIaWdobGlnaHRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01O
b2RlSGlnaGxpZ2h0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEYxNTM0REQx
MUI1MzJFQzAwMjFGRDg2IC8qIEVkaXRpbmdCZWhhdmlvci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBFZGl0aW5nQmVoYXZpb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNEYxNTM0REYxMUI1MzMwMjAwMjFGRDg2IC8qIEVkaXRpbmdCZWhhdmlvclR5cGVzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVkaXRpbmdCZWhhdmlvclR5cGVzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRGMkQyMDUyMTJFQUU3QjMwMDVDMjg3NCAv
KiBJbnNwZWN0b3JBZ2VudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNw
ZWN0b3JBZ2VudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTEzNCw2ICs5MTMy
LDggQEAKIAkJN0I5MTg0Q0YxNTc1OEU0MjAwOTJBQTkzIC8qIFVuZG9NYW5hZ2VyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVuZG9NYW5hZ2VyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0I5MTg0RDAxNTc1OEU0MjAwOTJBQTkzIC8qIFVuZG9N
YW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVuZG9NYW5hZ2VyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCOTE4NEQxMTU3NThFNDIwMDkyQUE5MyAv
KiBVbmRvTWFuYWdlci5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gVW5kb01hbmFnZXIuaWRs
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QzUyMkQ0OTE1QjQ3N0U4MDA5QjdDOTUg
LyogSW5zcGVjdG9yT3ZlcmxheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBJbnNwZWN0b3JPdmVybGF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
N0M1MjJENEExNUI0NzhCMjAwOUI3Qzk1IC8qIEluc3BlY3Rvck92ZXJsYXkuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yT3ZlcmxheS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3QzYwMTI4MDYwMDc4QkI3MEUzNjdBOTUgLyogRE5TUmVzb2x2ZVF1
ZXVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEROU1Jlc29sdmVR
dWV1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdFMzNDRDAwMTI3RjM0MEQw
MEJFOEYxNyAvKiBQdXJnZVByaW9yaXR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFB1cmdlUHJpb3JpdHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0UzN0VG
MkQxMzM5MjA4ODAwQjI5MjUwIC8qIFN1YnJlc291cmNlTG9hZGVyQ0YuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gU3VicmVzb3VyY2VMb2FkZXJDRi5jcHA7IHBhdGgg
PSBjZi9TdWJyZXNvdXJjZUxvYWRlckNGLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTE0NTM2LDggKzE0NTM2LDYgQEAKIAkJCQk1OTEwMkZCQTE0MzI3RDNCMDAzQzlEMDQgLyog
Q29udGVudFNlYXJjaFV0aWxzLmggKi8sCiAJCQkJN0FBQkEyNTcxNEJDNjEzMzAwQUE5QTExIC8q
IERPTUVkaXRvci5jcHAgKi8sCiAJCQkJN0FBQkEyNTgxNEJDNjEzMzAwQUE5QTExIC8qIERPTUVk
aXRvci5oICovLAotCQkJCTRGMTQ0MjI2MTMzOUZENjIwMEUwRDZGOCAvKiBET01Ob2RlSGlnaGxp
Z2h0ZXIuY3BwICovLAotCQkJCTRGMTQ0MjI3MTMzOUZENjIwMEUwRDZGOCAvKiBET01Ob2RlSGln
aGxpZ2h0ZXIuaCAqLywKIAkJCQk3QTU0ODgxNjE0RTQzMkExMDA2QUUwNUEgLyogRE9NUGF0Y2hT
dXBwb3J0LmNwcCAqLywKIAkJCQk3QTU0ODgxNTE0RTQzMkExMDA2QUUwNUEgLyogRE9NUGF0Y2hT
dXBwb3J0LmggKi8sCiAJCQkJNTkxM0EyM0YxM0Q0OUVCQTAwRjVCMDVDIC8qIElkZW50aWZpZXJz
RmFjdG9yeS5jcHAgKi8sCkBAIC0xNDYwOSw2ICsxNDYwNyw4IEBACiAJCQkJMjBENjI5MjUxMjUz
NjkwQjAwMDgxNTQzIC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oICovLAogCQkJCTdBQTUx
REQzMTQ4NTA2QTkwMEFEMjc1MiAvKiBJbnNwZWN0b3JNZW1vcnlBZ2VudC5jcHAgKi8sCiAJCQkJ
N0FBNTFERDQxNDg1MDZBOTAwQUQyNzUyIC8qIEluc3BlY3Rvck1lbW9yeUFnZW50LmggKi8sCisJ
CQkJN0M1MjJENDkxNUI0NzdFODAwOUI3Qzk1IC8qIEluc3BlY3Rvck92ZXJsYXkuY3BwICovLAor
CQkJCTdDNTIyRDRBMTVCNDc4QjIwMDlCN0M5NSAvKiBJbnNwZWN0b3JPdmVybGF5LmggKi8sCiAJ
CQkJNEY2RkRENjIxMzQxREVERDAwMUY4RUUzIC8qIEluc3BlY3RvclBhZ2VBZ2VudC5jcHAgKi8s
CiAJCQkJNEY2RkRENjMxMzQxREVERDAwMUY4RUUzIC8qIEluc3BlY3RvclBhZ2VBZ2VudC5oICov
LAogCQkJCTlGMEQ2QjJDMTIxQkZFQkEwMDZDMDI4OCAvKiBJbnNwZWN0b3JQcm9maWxlckFnZW50
LmNwcCAqLywKQEAgLTIyNzQ0LDcgKzIyNzQ0LDYgQEAKIAkJCQk4NUU3MTFEMjBBQzVENTM1MDA1
MzI3MEYgLyogRE9NTmFtZWROb2RlTWFwSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1
M0JGNERCMEFCQjZCNTUwMDg2NDdCQiAvKiBET01Ob2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4
NTQwNzUyNjBBRDZDNjY3MDA2MjBDNTcgLyogRE9NTm9kZUZpbHRlci5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJNEYxNDQyMjkxMzM5RkQ2MjAwRTBENkY4IC8qIERPTU5vZGVIaWdobGlnaHRlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODVCNDk4RkIwQURCMzQwMjAwOTI1Q0JCIC8qIERPTU5vZGVJbnRl
cm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODU1MjZDMzcwQUIwQTE3RTAwMDMwMkVBIC8qIERP
TU5vZGVJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODUwQjQxQzIwQUQ5RTdFNzAwQTZF
RDRGIC8qIERPTU5vZGVJdGVyYXRvckludGVybmFsLmggaW4gSGVhZGVycyAqLywKQEAgLTIzNjA4
LDYgKzIzNjA3LDcgQEAKIAkJCQk3QUNEODhENDE0QzA4QkQ2MDA4NEVERDIgLyogSW5zcGVjdG9y
SW5kZXhlZERCQWdlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTIwRDYyOTI3MTI1MzY5MEIwMDA4
MTU0MyAvKiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTdB
QTUxREQ2MTQ4NTA2QTkwMEFEMjc1MiAvKiBJbnNwZWN0b3JNZW1vcnlBZ2VudC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJN0M1MjJENEMxNUI0NzhCMjAwOUI3Qzk1IC8qIEluc3BlY3Rvck92ZXJsYXku
aCBpbiBIZWFkZXJzICovLAogCQkJCTRGNkZERDY1MTM0MURFREQwMDFGOEVFMyAvKiBJbnNwZWN0
b3JQYWdlQWdlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTlGMEQ2QjJGMTIxQkZFQkEwMDZDMDI4
OCAvKiBJbnNwZWN0b3JQcm9maWxlckFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk4MkFCMTc3
NjEyNUM4MjY3MDBDNTA2OUQgLyogSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0yNjE2NSw3ICsyNjE2NSw2IEBACiAJCQkJODVDN0Y1QzAwQUFGQjdDRDAwNDAxNERE
IC8qIERPTU11dGF0aW9uRXZlbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQk4NTE4REQ3OTBBOUNG
MzFCMDA5MUI3QTYgLyogRE9NTmFtZWROb2RlTWFwLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJODUz
QkY0REMwQUJCNkI1NTAwODY0N0JCIC8qIERPTU5vZGUubW0gaW4gU291cmNlcyAqLywKLQkJCQk0
RjE0NDIyODEzMzlGRDYyMDBFMEQ2RjggLyogRE9NTm9kZUhpZ2hsaWdodGVyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTg1NTI2QzM4MEFCMEExN0UwMDAzMDJFQSAvKiBET01Ob2RlSXRlcmF0b3Iu
bW0gaW4gU291cmNlcyAqLywKIAkJCQk4NUFDQUE4RTBBOUI3NTlDMDA2NzFFOTAgLyogRE9NTm9k
ZUxpc3QubW0gaW4gU291cmNlcyAqLywKIAkJCQk4NUNBOTZFQjBBOTYyNEU5MDA2OTBDQ0YgLyog
RE9NTm90YXRpb24ubW0gaW4gU291cmNlcyAqLywKQEAgLTI2NzcyLDYgKzI2NzcxLDcgQEAKIAkJ
CQk3QUNEODhEMzE0QzA4QkQ2MDA4NEVERDIgLyogSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMjBENjI5MjYxMjUzNjkwQjAwMDgxNTQzIC8qIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QUE1MURENTE0ODUwNkE5
MDBBRDI3NTIgLyogSW5zcGVjdG9yTWVtb3J5QWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
N0M1MjJENEIxNUI0NzdFODAwOUI3Qzk1IC8qIEluc3BlY3Rvck92ZXJsYXkuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNEY2RkRENjQxMzQxREVERDAwMUY4RUUzIC8qIEluc3BlY3RvclBhZ2VBZ2Vu
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5RjBENkIyRTEyMUJGRUJBMDA2QzAyODggLyogSW5z
cGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4MkFCMTc3NTEyNUM4
MjY3MDBDNTA2OUQgLyogSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAgaW4gU291cmNlcyAqLywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTU5vZGVIaWdobGlnaHRlci5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxODFkZGI5OTExMDM5NWU2YmQwNjM2NzYzM2E4
MjRiZWI2ZTk3NmUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTU5vZGVIaWdobGlnaHRlci5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSw2MTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5l
aXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUg
bmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwot
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVO
QUJMRShJTlNQRUNUT1IpCi0KLSNpbmNsdWRlICJET01Ob2RlSGlnaGxpZ2h0ZXIuaCIKLQotI2lu
Y2x1ZGUgIkVsZW1lbnQuaCIKLSNpbmNsdWRlICJGb250Q2FjaGUuaCIKLSNpbmNsdWRlICJGb250
RmFtaWx5LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCi0j
aW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50LmgiCi0jaW5jbHVkZSAiTm9kZS5oIgotI2luY2x1ZGUg
IlBhZ2UuaCIKLSNpbmNsdWRlICJSYW5nZS5oIgotI2luY2x1ZGUgIlJlbmRlckJveE1vZGVsT2Jq
ZWN0LmgiCi0jaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCi0jaW5jbHVkZSAiUmVuZGVyT2JqZWN0
LmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJTdHlsZWRFbGVtZW50LmgiCi0j
aW5jbHVkZSAiVGV4dFJ1bi5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1uYW1lc3BhY2UgewotCi0jaWYgT1MoV0lORE9XUykK
LXN0YXRpYyBjb25zdCB1bnNpZ25lZCBmb250SGVpZ2h0UHggPSAxMjsKLSNlbGlmIE9TKE1BQ19P
U19YKSB8fCBPUyhVTklYKQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGZvbnRIZWlnaHRQeCA9IDEx
OwotI2VuZGlmCi0KLWNvbnN0IHN0YXRpYyBpbnQgcmVjdEluZmxhdGVQeCA9IDQ7Ci1jb25zdCBz
dGF0aWMgaW50IGJvcmRlcldpZHRoUHggPSAxOwotY29uc3Qgc3RhdGljIGludCB0b29sdGlwUGFk
ZGluZyA9IDQ7Ci0KLWNvbnN0IHN0YXRpYyBpbnQgYXJyb3dUaXBPZmZzZXQgPSAyMDsKLWNvbnN0
IHN0YXRpYyBmbG9hdCBhcnJvd0hlaWdodCA9IDc7Ci1jb25zdCBzdGF0aWMgZmxvYXQgYXJyb3dI
YWxmV2lkdGggPSA3OwotCi1QYXRoIHF1YWRUb1BhdGgoY29uc3QgRmxvYXRRdWFkJiBxdWFkKQot
ewotICAgIFBhdGggcXVhZFBhdGg7Ci0gICAgcXVhZFBhdGgubW92ZVRvKHF1YWQucDEoKSk7Ci0g
ICAgcXVhZFBhdGguYWRkTGluZVRvKHF1YWQucDIoKSk7Ci0gICAgcXVhZFBhdGguYWRkTGluZVRv
KHF1YWQucDMoKSk7Ci0gICAgcXVhZFBhdGguYWRkTGluZVRvKHF1YWQucDQoKSk7Ci0gICAgcXVh
ZFBhdGguY2xvc2VTdWJwYXRoKCk7Ci0gICAgcmV0dXJuIHF1YWRQYXRoOwotfQotCi12b2lkIGRy
YXdPdXRsaW5lZFF1YWQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFF1YWQm
IHF1YWQsIGNvbnN0IENvbG9yJiBmaWxsQ29sb3IsIGNvbnN0IENvbG9yJiBvdXRsaW5lQ29sb3Ip
Ci17Ci0gICAgc3RhdGljIGNvbnN0IGludCBvdXRsaW5lVGhpY2tuZXNzID0gMjsKLQotICAgIFBh
dGggcXVhZFBhdGggPSBxdWFkVG9QYXRoKHF1YWQpOwotCi0gICAgLy8gQ2xpcCBvdXQgdGhlIHF1
YWQsIHRoZW4gZHJhdyB3aXRoIGEgMnB4IHN0cm9rZSB0byBnZXQgYSBwaXhlbAotICAgIC8vIG9m
IG91dGxpbmUgKGJlY2F1c2UgaW5mbGF0aW5nIGEgcXVhZCBpcyBoYXJkKQotICAgIHsKLSAgICAg
ICAgY29udGV4dC5zYXZlKCk7Ci0gICAgICAgIGNvbnRleHQuY2xpcE91dChxdWFkUGF0aCk7Ci0K
LSAgICAgICAgY29udGV4dC5zZXRTdHJva2VUaGlja25lc3Mob3V0bGluZVRoaWNrbmVzcyk7Ci0g
ICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3Iob3V0bGluZUNvbG9yLCBDb2xvclNwYWNlRGV2
aWNlUkdCKTsKLSAgICAgICAgY29udGV4dC5zdHJva2VQYXRoKHF1YWRQYXRoKTsKLQotICAgICAg
ICBjb250ZXh0LnJlc3RvcmUoKTsKLSAgICB9Ci0KLSAgICAvLyBOb3cgZG8gdGhlIGZpbGwKLSAg
ICBjb250ZXh0LnNldEZpbGxDb2xvcihmaWxsQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwot
ICAgIGNvbnRleHQuZmlsbFBhdGgocXVhZFBhdGgpOwotfQotCi12b2lkIGRyYXdPdXRsaW5lZFF1
YWRXaXRoQ2xpcChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UXVhZCYgcXVh
ZCwgY29uc3QgRmxvYXRRdWFkJiBjbGlwUXVhZCwgY29uc3QgQ29sb3ImIGZpbGxDb2xvcikKLXsK
LSAgICBjb250ZXh0LnNhdmUoKTsKLSAgICBQYXRoIGNsaXBRdWFkUGF0aCA9IHF1YWRUb1BhdGgo
Y2xpcFF1YWQpOwotICAgIGNvbnRleHQuY2xpcE91dChjbGlwUXVhZFBhdGgpOwotICAgIGRyYXdP
dXRsaW5lZFF1YWQoY29udGV4dCwgcXVhZCwgZmlsbENvbG9yLCBDb2xvcjo6dHJhbnNwYXJlbnQp
OwotICAgIGNvbnRleHQucmVzdG9yZSgpOwotfQotCi12b2lkIGRyYXdIaWdobGlnaHRGb3JCb3go
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFF1YWQmIGNvbnRlbnRRdWFkLCBj
b25zdCBGbG9hdFF1YWQmIHBhZGRpbmdRdWFkLCBjb25zdCBGbG9hdFF1YWQmIGJvcmRlclF1YWQs
IGNvbnN0IEZsb2F0UXVhZCYgbWFyZ2luUXVhZCwgY29uc3QgSGlnaGxpZ2h0Q29uZmlnJiBoaWdo
bGlnaHRDb25maWcpCi17Ci0gICAgYm9vbCBoYXNNYXJnaW4gPSBoaWdobGlnaHRDb25maWcubWFy
Z2luICE9IENvbG9yOjp0cmFuc3BhcmVudDsKLSAgICBib29sIGhhc0JvcmRlciA9IGhpZ2hsaWdo
dENvbmZpZy5ib3JkZXIgIT0gQ29sb3I6OnRyYW5zcGFyZW50OwotICAgIGJvb2wgaGFzUGFkZGlu
ZyA9IGhpZ2hsaWdodENvbmZpZy5wYWRkaW5nICE9IENvbG9yOjp0cmFuc3BhcmVudDsKLSAgICBi
b29sIGhhc0NvbnRlbnQgPSBoaWdobGlnaHRDb25maWcuY29udGVudCAhPSBDb2xvcjo6dHJhbnNw
YXJlbnQgfHwgaGlnaGxpZ2h0Q29uZmlnLmNvbnRlbnRPdXRsaW5lICE9IENvbG9yOjp0cmFuc3Bh
cmVudDsKLQotICAgIEZsb2F0UXVhZCBjbGlwUXVhZDsKLSAgICBDb2xvciBjbGlwQ29sb3I7Ci0g
ICAgaWYgKGhhc01hcmdpbiAmJiAoIWhhc0JvcmRlciB8fCBtYXJnaW5RdWFkICE9IGJvcmRlclF1
YWQpKSB7Ci0gICAgICAgIGRyYXdPdXRsaW5lZFF1YWRXaXRoQ2xpcChjb250ZXh0LCBtYXJnaW5R
dWFkLCBib3JkZXJRdWFkLCBoaWdobGlnaHRDb25maWcubWFyZ2luKTsKLSAgICAgICAgY2xpcFF1
YWQgPSBib3JkZXJRdWFkOwotICAgIH0KLSAgICBpZiAoaGFzQm9yZGVyICYmICghaGFzUGFkZGlu
ZyB8fCBib3JkZXJRdWFkICE9IHBhZGRpbmdRdWFkKSkgewotICAgICAgICBkcmF3T3V0bGluZWRR
dWFkV2l0aENsaXAoY29udGV4dCwgYm9yZGVyUXVhZCwgcGFkZGluZ1F1YWQsIGhpZ2hsaWdodENv
bmZpZy5ib3JkZXIpOwotICAgICAgICBjbGlwUXVhZCA9IHBhZGRpbmdRdWFkOwotICAgIH0KLSAg
ICBpZiAoaGFzUGFkZGluZyAmJiAoIWhhc0NvbnRlbnQgfHwgcGFkZGluZ1F1YWQgIT0gY29udGVu
dFF1YWQpKSB7Ci0gICAgICAgIGRyYXdPdXRsaW5lZFF1YWRXaXRoQ2xpcChjb250ZXh0LCBwYWRk
aW5nUXVhZCwgY29udGVudFF1YWQsIGhpZ2hsaWdodENvbmZpZy5wYWRkaW5nKTsKLSAgICAgICAg
Y2xpcFF1YWQgPSBjb250ZW50UXVhZDsKLSAgICB9Ci0gICAgaWYgKGhhc0NvbnRlbnQpCi0gICAg
ICAgIGRyYXdPdXRsaW5lZFF1YWQoY29udGV4dCwgY29udGVudFF1YWQsIGhpZ2hsaWdodENvbmZp
Zy5jb250ZW50LCBoaWdobGlnaHRDb25maWcuY29udGVudE91dGxpbmUpOwotfQotCi12b2lkIGRy
YXdIaWdobGlnaHRGb3JTVkdSZW5kZXJlcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0
IFZlY3RvcjxGbG9hdFF1YWQ+JiBhYnNvbHV0ZVF1YWRzLCBjb25zdCBIaWdobGlnaHRDb25maWcm
IGhpZ2hsaWdodENvbmZpZykKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFic29sdXRl
UXVhZHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIGRyYXdPdXRsaW5lZFF1YWQoY29udGV4dCwgYWJz
b2x1dGVRdWFkc1tpXSwgaGlnaGxpZ2h0Q29uZmlnLmNvbnRlbnQsIENvbG9yOjp0cmFuc3BhcmVu
dCk7Ci19Ci0KLWludCBkcmF3U3Vic3RyaW5nKGNvbnN0IFRleHRSdW4mIGdsb2JhbFRleHRSdW4s
IGludCBvZmZzZXQsIGludCBsZW5ndGgsIGNvbnN0IENvbG9yJiB0ZXh0Q29sb3IsIGNvbnN0IEZv
bnQmIGZvbnQsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgdGl0
bGVSZWN0KQotewotICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKHRleHRDb2xvciwgQ29sb3JTcGFj
ZURldmljZVJHQik7Ci0gICAgY29udGV4dC5kcmF3VGV4dChmb250LCBnbG9iYWxUZXh0UnVuLCBJ
bnRQb2ludCh0aXRsZVJlY3QucGl4ZWxTbmFwcGVkWCgpICsgcmVjdEluZmxhdGVQeCwgdGl0bGVS
ZWN0LnBpeGVsU25hcHBlZFkoKSArIGZvbnQuZm9udE1ldHJpY3MoKS5oZWlnaHQoKSksIG9mZnNl
dCwgb2Zmc2V0ICsgbGVuZ3RoKTsKLSAgICByZXR1cm4gb2Zmc2V0ICsgbGVuZ3RoOwotfQotCi1m
bG9hdCBjYWxjdWxhdGVBcnJvd1RpcFgoY29uc3QgTGF5b3V0UmVjdCYgYW5jaG9yQm94LCBjb25z
dCBMYXlvdXRSZWN0JiB0aXRsZVJlY3QpCi17Ci0gICAgY29uc3Qgc3RhdGljIGludCBhbmNob3JU
aXBPZmZzZXRQeCA9IDI7Ci0KLSAgICBpbnQgbWluWCA9IHRpdGxlUmVjdC54KCkgKyBhcnJvd0hh
bGZXaWR0aDsKLSAgICBpbnQgbWF4WCA9IHRpdGxlUmVjdC5tYXhYKCkgLSBhcnJvd0hhbGZXaWR0
aDsKLSAgICBpbnQgYW5jaG9yWCA9IGFuY2hvckJveC54KCk7Ci0gICAgaW50IGFuY2hvck1heFgg
PSBhbmNob3JCb3gubWF4WCgpOwotCi0gICAgaW50IHggPSB0aXRsZVJlY3QueCgpICsgYXJyb3dU
aXBPZmZzZXQ7IC8vIERlZmF1bHQgdG9vbHRpcCBwb3NpdGlvbi4KLSAgICBpZiAoeCA8IGFuY2hv
clgpCi0gICAgICAgIHggPSBhbmNob3JYICsgYW5jaG9yVGlwT2Zmc2V0UHg7Ci0gICAgZWxzZSBp
ZiAoeCA+IGFuY2hvck1heFgpCi0gICAgICAgIHggPSBhbmNob3JNYXhYIC0gYW5jaG9yVGlwT2Zm
c2V0UHg7Ci0KLSAgICBpZiAoeCA8IG1pblgpCi0gICAgICAgIHggPSBtaW5YOwotICAgIGVsc2Ug
aWYgKHggPiBtYXhYKQotICAgICAgICB4ID0gbWF4WDsKLQotICAgIHJldHVybiB4OwotfQotCi12
b2lkIHNldFVwRm9udERlc2NyaXB0aW9uKEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9u
LCBXZWJDb3JlOjpTZXR0aW5ncyogc2V0dGluZ3MpCi17Ci0jZGVmaW5lIFRPT0xUSVBfRk9OVF9G
QU1JTElFUyhzaXplLCAuLi4pIFwKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCB0b29sdGlwRm9udEZh
Y2VTaXplID0gc2l6ZTtcCi1zdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nKiB0b29sdGlwRm9udEZh
Y2Vbc2l6ZV0gPSB7IF9fVkFfQVJHU19fIH07Ci0KLSNpZiBPUyhXSU5ET1dTKQotVE9PTFRJUF9G
T05UX0ZBTUlMSUVTKDIsIG5ldyBBdG9taWNTdHJpbmcoIkNvbnNvbGFzIiksIG5ldyBBdG9taWNT
dHJpbmcoIkx1Y2lkYSBDb25zb2xlIikpCi0jZWxpZiBPUyhNQUNfT1NfWCkKLVRPT0xUSVBfRk9O
VF9GQU1JTElFUygyLCBuZXcgQXRvbWljU3RyaW5nKCJNZW5sbyIpLCBuZXcgQXRvbWljU3RyaW5n
KCJNb25hY28iKSkKLSNlbGlmIE9TKFVOSVgpCi1UT09MVElQX0ZPTlRfRkFNSUxJRVMoMSwgbmV3
IEF0b21pY1N0cmluZygiZGVqYXZ1IHNhbnMgbW9ubyIpKQotI2VuZGlmCi0vLyBJbiB0aGUgZGVm
YXVsdCBjYXNlLCB3ZSBnZXQgdGhlIHNldHRpbmdzLXByb3ZpZGVkIG1vbm9zcGFjZSBmb250Lgot
Ci0jdW5kZWYgVE9PTFRJUF9GT05UX0ZBTUlMSUVTCi0KLSAgICBmb250RGVzY3JpcHRpb24uc2V0
UmVuZGVyaW5nTW9kZShzZXR0aW5ncy0+Zm9udFJlbmRlcmluZ01vZGUoKSk7Ci0gICAgZm9udERl
c2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShmb250SGVpZ2h0UHgpOwotCi0gICAgY29uc3QgQXRv
bWljU3RyaW5nJiBmaXhlZEZvbnRGYW1pbHkgPSBzZXR0aW5ncy0+Zml4ZWRGb250RmFtaWx5KCk7
Ci0gICAgaWYgKCFmaXhlZEZvbnRGYW1pbHkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5KEZvbnREZXNjcmlwdGlvbjo6TW9ub3NwYWNlRmFtaWx5
KTsKLSAgICAgICAgRm9udEZhbWlseSogY3VycmVudEZhbWlseSA9IDA7Ci0gICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCB0b29sdGlwRm9udEZhY2VTaXplOyArK2kpIHsKLSAgICAgICAg
ICAgIGlmICghY3VycmVudEZhbWlseSkgewotICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlv
bi5maXJzdEZhbWlseSgpLnNldEZhbWlseSgqdG9vbHRpcEZvbnRGYWNlW2ldKTsKLSAgICAgICAg
ICAgICAgICBmb250RGVzY3JpcHRpb24uZmlyc3RGYW1pbHkoKS5hcHBlbmRGYW1pbHkoMCk7Ci0g
ICAgICAgICAgICAgICAgY3VycmVudEZhbWlseSA9ICZmb250RGVzY3JpcHRpb24uZmlyc3RGYW1p
bHkoKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgUmVmUHRyPFNoYXJl
ZEZvbnRGYW1pbHk+IG5ld0ZhbWlseSA9IFNoYXJlZEZvbnRGYW1pbHk6OmNyZWF0ZSgpOwotICAg
ICAgICAgICAgICAgIG5ld0ZhbWlseS0+c2V0RmFtaWx5KCp0b29sdGlwRm9udEZhY2VbaV0pOwot
ICAgICAgICAgICAgICAgIGN1cnJlbnRGYW1pbHktPmFwcGVuZEZhbWlseShuZXdGYW1pbHkpOwot
ICAgICAgICAgICAgICAgIGN1cnJlbnRGYW1pbHkgPSBuZXdGYW1pbHkuZ2V0KCk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgUmVmUHRyPFNoYXJlZEZvbnRGYW1pbHk+IG5ld0Zh
bWlseSA9IFNoYXJlZEZvbnRGYW1pbHk6OmNyZWF0ZSgpOwotICAgICAgICBuZXdGYW1pbHktPnNl
dEZhbWlseShmaXhlZEZvbnRGYW1pbHkpOwotICAgICAgICBjdXJyZW50RmFtaWx5LT5hcHBlbmRG
YW1pbHkobmV3RmFtaWx5KTsKLSAgICAgICAgY3VycmVudEZhbWlseSA9IG5ld0ZhbWlseS5nZXQo
KTsKLSAgICB9Ci19Ci0KLXZvaWQgZHJhd0VsZW1lbnRUaXRsZShHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIE5vZGUqIG5vZGUsIFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IEludFJlY3Qm
IGJvdW5kaW5nQm94LCBjb25zdCBJbnRSZWN0JiBhbmNob3JCb3gsIGNvbnN0IEZsb2F0UmVjdCYg
dmlzaWJsZVJlY3QsIFdlYkNvcmU6OlNldHRpbmdzKiBzZXR0aW5ncykKLXsKLSAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKENvbG9yLCBiYWNrZ3JvdW5kQ29sb3IsICgyNTUsIDI1NSwgMTk0KSk7Ci0g
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChDb2xvciwgdGFnQ29sb3IsICgxMzYsIDE4LCAxMjgpKTsg
Ly8gU2FtZSBhcyAud2Via2l0LWh0bWwtdGFnLgotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ29s
b3IsIGF0dHJDb2xvciwgKDI2LCAyNiwgMTY2KSk7IC8vIFNhbWUgYXMgLndlYmtpdC1odG1sLWF0
dHJpYnV0ZS12YWx1ZS4KLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKENvbG9yLCBub3JtYWxDb2xv
ciwgKENvbG9yOjpibGFjaykpOwotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ29sb3IsIHB4QW5k
Qm9yZGVyQ29sb3IsICgxMjgsIDEyOCwgMTI4KSk7Ci0KLSAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KFN0cmluZywgcHhTdHJpbmcsICgicHgiKSk7Ci0gICAgY29uc3Qgc3RhdGljIFVDaGFyIHRpbWVz
VUNoYXJbXSA9IHsgMHgwMDIwLCAweDAwRDcsIDB4MDAyMCwgMCB9OwotICAgIERFRklORV9TVEFU
SUNfTE9DQUwoU3RyaW5nLCB0aW1lc1N0cmluZywgKHRpbWVzVUNoYXIpKTsgLy8gJnRpbWVzOyBz
dHJpbmcKLQotICAgIEZvbnRDYWNoZVB1cmdlUHJldmVudGVyIGZvbnRDYWNoZVB1cmdlUHJldmVu
dGVyOwotCi0gICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2Rl
KTsKLSAgICBib29sIGlzWEhUTUwgPSBlbGVtZW50LT5kb2N1bWVudCgpLT5pc1hIVE1MRG9jdW1l
bnQoKTsKLSAgICBTdHJpbmdCdWlsZGVyIG5vZGVUaXRsZTsKLSAgICBub2RlVGl0bGUuYXBwZW5k
KGlzWEhUTUwgPyBlbGVtZW50LT5ub2RlTmFtZSgpIDogZWxlbWVudC0+bm9kZU5hbWUoKS5sb3dl
cigpKTsKLSAgICB1bnNpZ25lZCB0YWdOYW1lTGVuZ3RoID0gbm9kZVRpdGxlLmxlbmd0aCgpOwot
Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBpZFZhbHVlID0gZWxlbWVudC0+Z2V0SWRBdHRyaWJ1
dGUoKTsKLSAgICB1bnNpZ25lZCBpZFN0cmluZ0xlbmd0aCA9IDA7Ci0gICAgU3RyaW5nIGlkU3Ry
aW5nOwotICAgIGlmICghaWRWYWx1ZS5pc051bGwoKSAmJiAhaWRWYWx1ZS5pc0VtcHR5KCkpIHsK
LSAgICAgICAgbm9kZVRpdGxlLmFwcGVuZCgiIyIpOwotICAgICAgICBub2RlVGl0bGUuYXBwZW5k
KGlkVmFsdWUpOwotICAgICAgICBpZFN0cmluZ0xlbmd0aCA9IDEgKyBpZFZhbHVlLmxlbmd0aCgp
OwotICAgIH0KLQotICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiB1c2VkQ2xhc3NOYW1lczsKLSAg
ICB1bnNpZ25lZCBjbGFzc2VzU3RyaW5nTGVuZ3RoID0gMDsKLSAgICBpZiAoZWxlbWVudC0+aGFz
Q2xhc3MoKSAmJiBlbGVtZW50LT5pc1N0eWxlZEVsZW1lbnQoKSkgewotICAgICAgICBjb25zdCBT
cGFjZVNwbGl0U3RyaW5nJiBjbGFzc05hbWVzU3RyaW5nID0gc3RhdGljX2Nhc3Q8U3R5bGVkRWxl
bWVudCo+KGVsZW1lbnQpLT5jbGFzc05hbWVzKCk7Ci0gICAgICAgIHNpemVfdCBjbGFzc05hbWVD
b3VudCA9IGNsYXNzTmFtZXNTdHJpbmcuc2l6ZSgpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGNsYXNzTmFtZUNvdW50OyArK2kpIHsKLSAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgY2xhc3NOYW1lID0gY2xhc3NOYW1lc1N0cmluZ1tpXTsKLSAgICAgICAgICAgIGlmICh1
c2VkQ2xhc3NOYW1lcy5jb250YWlucyhjbGFzc05hbWUpKQotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgdXNlZENsYXNzTmFtZXMuYWRkKGNsYXNzTmFtZSk7Ci0gICAgICAg
ICAgICBub2RlVGl0bGUuYXBwZW5kKCIuIik7Ci0gICAgICAgICAgICBub2RlVGl0bGUuYXBwZW5k
KGNsYXNzTmFtZSk7Ci0gICAgICAgICAgICBjbGFzc2VzU3RyaW5nTGVuZ3RoICs9IDEgKyBjbGFz
c05hbWUubGVuZ3RoKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBSZW5kZXJCb3hNb2RlbE9i
amVjdCogbW9kZWxPYmplY3QgPSByZW5kZXJlci0+aXNCb3hNb2RlbE9iamVjdCgpID8gdG9SZW5k
ZXJCb3hNb2RlbE9iamVjdChyZW5kZXJlcikgOiAwOwotCi0gICAgU3RyaW5nIHdpZHRoTnVtYmVy
UGFydCA9ICIgIiArIFN0cmluZzo6bnVtYmVyKG1vZGVsT2JqZWN0ID8gYWRqdXN0Rm9yQWJzb2x1
dGVab29tKG1vZGVsT2JqZWN0LT5waXhlbFNuYXBwZWRPZmZzZXRXaWR0aCgpLCBtb2RlbE9iamVj
dCkgOiBib3VuZGluZ0JveC53aWR0aCgpKTsKLSAgICBub2RlVGl0bGUuYXBwZW5kKHdpZHRoTnVt
YmVyUGFydCk7Ci0gICAgbm9kZVRpdGxlLmFwcGVuZChweFN0cmluZyk7Ci0gICAgbm9kZVRpdGxl
LmFwcGVuZCh0aW1lc1N0cmluZyk7Ci0gICAgU3RyaW5nIGhlaWdodE51bWJlclBhcnQgPSBTdHJp
bmc6Om51bWJlcihtb2RlbE9iamVjdCA/IGFkanVzdEZvckFic29sdXRlWm9vbShtb2RlbE9iamVj
dC0+cGl4ZWxTbmFwcGVkT2Zmc2V0SGVpZ2h0KCksIG1vZGVsT2JqZWN0KSA6IGJvdW5kaW5nQm94
LmhlaWdodCgpKTsKLSAgICBub2RlVGl0bGUuYXBwZW5kKGhlaWdodE51bWJlclBhcnQpOwotICAg
IG5vZGVUaXRsZS5hcHBlbmQocHhTdHJpbmcpOwotCi0gICAgRm9udERlc2NyaXB0aW9uIGRlc2M7
Ci0gICAgc2V0VXBGb250RGVzY3JpcHRpb24oZGVzYywgc2V0dGluZ3MpOwotICAgIEZvbnQgZm9u
dCA9IEZvbnQoZGVzYywgMCwgMCk7Ci0gICAgZm9udC51cGRhdGUoMCk7Ci0KLSAgICBUZXh0UnVu
IG5vZGVUaXRsZVJ1bihub2RlVGl0bGUudG9TdHJpbmcoKSk7Ci0gICAgSW50UG9pbnQgdGl0bGVC
YXNlUG9pbnQgPSBJbnRQb2ludChhbmNob3JCb3gueCgpLCBhbmNob3JCb3gubWF4WSgpIC0gMSk7
Ci0gICAgdGl0bGVCYXNlUG9pbnQubW92ZShyZWN0SW5mbGF0ZVB4LCByZWN0SW5mbGF0ZVB4KTsK
LSAgICBJbnRSZWN0IHRpdGxlUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoZm9udC5zZWxlY3Rpb25S
ZWN0Rm9yVGV4dChub2RlVGl0bGVSdW4sIHRpdGxlQmFzZVBvaW50LCBmb250SGVpZ2h0UHgpKTsK
LSAgICB0aXRsZVJlY3QuaW5mbGF0ZShyZWN0SW5mbGF0ZVB4KTsKLQotICAgIC8vIFRoZSBpbml0
aWFsIG9mZnNldHMgbmVlZGVkIHRvIGNvbXBlbnNhdGUgZm9yIGEgMXB4LXRoaWNrIGJvcmRlciBz
dHJva2UgKHdoaWNoIGlzIG5vdCBhIHBhcnQgb2YgdGhlIHJlY3RhbmdsZSkuCi0gICAgaW50IGR4
ID0gLWJvcmRlcldpZHRoUHg7Ci0gICAgaW50IGR5ID0gYm9yZGVyV2lkdGhQeDsKLQotICAgIC8v
IElmIHRoZSB0aXAgc3RpY2tzIGJleW9uZCB0aGUgcmlnaHQgb2YgdmlzaWJsZVJlY3QsIHJpZ2h0
LWFsaWduIHRoZSB0aXAgd2l0aCB0aGUgc2FpZCBib3VuZGFyeS4KLSAgICBpZiAodGl0bGVSZWN0
Lm1heFgoKSArIGR4ID4gdmlzaWJsZVJlY3QubWF4WCgpKQotICAgICAgICBkeCA9IHZpc2libGVS
ZWN0Lm1heFgoKSAtIHRpdGxlUmVjdC5tYXhYKCk7Ci0KLSAgICAvLyBJZiB0aGUgdGlwIHN0aWNr
cyBiZXlvbmQgdGhlIGxlZnQgb2YgdmlzaWJsZVJlY3QsIGxlZnQtYWxpZ24gdGhlIHRpcCB3aXRo
IHRoZSBzYWlkIGJvdW5kYXJ5LgotICAgIGlmICh0aXRsZVJlY3QueCgpICsgZHggPCB2aXNpYmxl
UmVjdC54KCkpCi0gICAgICAgIGR4ID0gdmlzaWJsZVJlY3QueCgpIC0gdGl0bGVSZWN0LngoKSAt
IGJvcmRlcldpZHRoUHg7Ci0KLSAgICAvLyBJZiB0aGUgdGlwIHN0aWNrcyBiZXlvbmQgdGhlIGJv
dHRvbSBvZiB2aXNpYmxlUmVjdCwgc2hvdyB0aGUgdGlwIGF0IHRvcCBvZiBib3VuZGluZyBib3gu
Ci0gICAgaWYgKHRpdGxlUmVjdC5tYXhZKCkgKyBkeSA+IHZpc2libGVSZWN0Lm1heFkoKSkgewot
ICAgICAgICBkeSA9IGFuY2hvckJveC55KCkgLSB0aXRsZVJlY3QubWF4WSgpIC0gYm9yZGVyV2lk
dGhQeDsKLSAgICAgICAgLy8gSWYgdGhlIHRpcCBzdGlsbCBzdGlja3MgYmV5b25kIHRoZSBib3R0
b20gb2YgdmlzaWJsZVJlY3QsIGJvdHRvbS1hbGlnbiB0aGUgdGlwIHdpdGggdGhlIHNhaWQgYm91
bmRhcnkuCi0gICAgICAgIGlmICh0aXRsZVJlY3QubWF4WSgpICsgZHkgPiB2aXNpYmxlUmVjdC5t
YXhZKCkpCi0gICAgICAgICAgICBkeSA9IHZpc2libGVSZWN0Lm1heFkoKSAtIHRpdGxlUmVjdC5t
YXhZKCk7Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlIHRpcCBzdGlja3MgYmV5b25kIHRoZSB0b3Ag
b2YgdmlzaWJsZVJlY3QsIHNob3cgdGhlIHRpcCBhdCB0b3Agb2YgdmlzaWJsZVJlY3QuCi0gICAg
aWYgKHRpdGxlUmVjdC55KCkgKyBkeSA8IHZpc2libGVSZWN0LnkoKSkKLSAgICAgICAgZHkgPSB2
aXNpYmxlUmVjdC55KCkgLSB0aXRsZVJlY3QueSgpICsgYm9yZGVyV2lkdGhQeDsKLQotICAgIHRp
dGxlUmVjdC5tb3ZlKGR4LCBkeSk7Ci0KLSAgICBib29sIGlzQXJyb3dBdFRvcCA9IHRpdGxlUmVj
dC55KCkgPiBhbmNob3JCb3gueSgpOwotICAgIHRpdGxlUmVjdC5tb3ZlKDAsIHRvb2x0aXBQYWRk
aW5nICogKGlzQXJyb3dBdFRvcCA/IDEgOiAtMSkpOwotCi0gICAgewotICAgICAgICBmbG9hdCBh
cnJvd1RpcFggPSBjYWxjdWxhdGVBcnJvd1RpcFgoYW5jaG9yQm94LCB0aXRsZVJlY3QpOwotICAg
ICAgICBpbnQgYXJyb3dCYXNlWSA9IGlzQXJyb3dBdFRvcCA/IHRpdGxlUmVjdC55KCkgOiB0aXRs
ZVJlY3QubWF4WSgpOwotICAgICAgICBpbnQgYXJyb3dPcHBvc2l0ZVkgPSBpc0Fycm93QXRUb3Ag
PyB0aXRsZVJlY3QubWF4WSgpIDogdGl0bGVSZWN0LnkoKTsKLQotICAgICAgICBGbG9hdFBvaW50
IHBvaW50c1s4XTsKLSAgICAgICAgcG9pbnRzWzBdID0gRmxvYXRQb2ludChhcnJvd1RpcFggLSBh
cnJvd0hhbGZXaWR0aCwgYXJyb3dCYXNlWSk7Ci0gICAgICAgIHBvaW50c1sxXSA9IEZsb2F0UG9p
bnQoYXJyb3dUaXBYLCBhcnJvd0Jhc2VZICsgYXJyb3dIZWlnaHQgKiAoaXNBcnJvd0F0VG9wID8g
LTEgOiAxKSk7Ci0gICAgICAgIHBvaW50c1syXSA9IEZsb2F0UG9pbnQoYXJyb3dUaXBYICsgYXJy
b3dIYWxmV2lkdGgsIGFycm93QmFzZVkpOwotICAgICAgICBwb2ludHNbM10gPSBGbG9hdFBvaW50
KHRpdGxlUmVjdC5tYXhYKCksIGFycm93QmFzZVkpOwotICAgICAgICBwb2ludHNbNF0gPSBGbG9h
dFBvaW50KHRpdGxlUmVjdC5tYXhYKCksIGFycm93T3Bwb3NpdGVZKTsKLSAgICAgICAgcG9pbnRz
WzVdID0gRmxvYXRQb2ludCh0aXRsZVJlY3QueCgpLCBhcnJvd09wcG9zaXRlWSk7Ci0gICAgICAg
IHBvaW50c1s2XSA9IEZsb2F0UG9pbnQodGl0bGVSZWN0LngoKSwgYXJyb3dCYXNlWSk7Ci0gICAg
ICAgIHBvaW50c1s3XSA9IHBvaW50c1swXTsKLQotICAgICAgICBQYXRoIHBhdGg7Ci0gICAgICAg
IHBhdGgubW92ZVRvKHBvaW50c1swXSk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgODsg
KytpKQotICAgICAgICAgICAgcGF0aC5hZGRMaW5lVG8ocG9pbnRzW2ldKTsKLQotICAgICAgICBj
b250ZXh0LnNhdmUoKTsKLSAgICAgICAgY29udGV4dC50cmFuc2xhdGUoMC41ZiwgMC41Zik7Ci0g
ICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IocHhBbmRCb3JkZXJDb2xvciwgQ29sb3JTcGFj
ZURldmljZVJHQik7Ci0gICAgICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKGJhY2tncm91bmRDb2xv
ciwgQ29sb3JTcGFjZURldmljZVJHQik7Ci0gICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tu
ZXNzKGJvcmRlcldpZHRoUHgpOwotICAgICAgICBjb250ZXh0LmZpbGxQYXRoKHBhdGgpOwotICAg
ICAgICBjb250ZXh0LnN0cm9rZVBhdGgocGF0aCk7Ci0gICAgICAgIGNvbnRleHQucmVzdG9yZSgp
OwotICAgIH0KLQotICAgIGludCBjdXJyZW50UG9zID0gMDsKLSAgICBjdXJyZW50UG9zID0gZHJh
d1N1YnN0cmluZyhub2RlVGl0bGVSdW4sIGN1cnJlbnRQb3MsIHRhZ05hbWVMZW5ndGgsIHRhZ0Nv
bG9yLCBmb250LCBjb250ZXh0LCB0aXRsZVJlY3QpOwotICAgIGlmIChpZFN0cmluZ0xlbmd0aCkK
LSAgICAgICAgY3VycmVudFBvcyA9IGRyYXdTdWJzdHJpbmcobm9kZVRpdGxlUnVuLCBjdXJyZW50
UG9zLCBpZFN0cmluZ0xlbmd0aCwgYXR0ckNvbG9yLCBmb250LCBjb250ZXh0LCB0aXRsZVJlY3Qp
OwotICAgIGlmIChjbGFzc2VzU3RyaW5nTGVuZ3RoKQotICAgICAgICBjdXJyZW50UG9zID0gZHJh
d1N1YnN0cmluZyhub2RlVGl0bGVSdW4sIGN1cnJlbnRQb3MsIGNsYXNzZXNTdHJpbmdMZW5ndGgs
IGF0dHJDb2xvciwgZm9udCwgY29udGV4dCwgdGl0bGVSZWN0KTsKLSAgICBjdXJyZW50UG9zID0g
ZHJhd1N1YnN0cmluZyhub2RlVGl0bGVSdW4sIGN1cnJlbnRQb3MsIHdpZHRoTnVtYmVyUGFydC5s
ZW5ndGgoKSwgbm9ybWFsQ29sb3IsIGZvbnQsIGNvbnRleHQsIHRpdGxlUmVjdCk7Ci0gICAgY3Vy
cmVudFBvcyA9IGRyYXdTdWJzdHJpbmcobm9kZVRpdGxlUnVuLCBjdXJyZW50UG9zLCBweFN0cmlu
Zy5sZW5ndGgoKSArIHRpbWVzU3RyaW5nLmxlbmd0aCgpLCBweEFuZEJvcmRlckNvbG9yLCBmb250
LCBjb250ZXh0LCB0aXRsZVJlY3QpOwotICAgIGN1cnJlbnRQb3MgPSBkcmF3U3Vic3RyaW5nKG5v
ZGVUaXRsZVJ1biwgY3VycmVudFBvcywgaGVpZ2h0TnVtYmVyUGFydC5sZW5ndGgoKSwgbm9ybWFs
Q29sb3IsIGZvbnQsIGNvbnRleHQsIHRpdGxlUmVjdCk7Ci0gICAgZHJhd1N1YnN0cmluZyhub2Rl
VGl0bGVSdW4sIGN1cnJlbnRQb3MsIHB4U3RyaW5nLmxlbmd0aCgpLCBweEFuZEJvcmRlckNvbG9y
LCBmb250LCBjb250ZXh0LCB0aXRsZVJlY3QpOwotfQotCi1zdGF0aWMgdm9pZCBjb250ZW50c1F1
YWRUb1BhZ2UoY29uc3QgRnJhbWVWaWV3KiBtYWluVmlldywgY29uc3QgRnJhbWVWaWV3KiB2aWV3
LCBGbG9hdFF1YWQmIHF1YWQpCi17Ci0gICAgcXVhZC5zZXRQMSh2aWV3LT5jb250ZW50c1RvUm9v
dFZpZXcocm91bmRlZEludFBvaW50KHF1YWQucDEoKSkpKTsKLSAgICBxdWFkLnNldFAyKHZpZXct
PmNvbnRlbnRzVG9Sb290Vmlldyhyb3VuZGVkSW50UG9pbnQocXVhZC5wMigpKSkpOwotICAgIHF1
YWQuc2V0UDModmlldy0+Y29udGVudHNUb1Jvb3RWaWV3KHJvdW5kZWRJbnRQb2ludChxdWFkLnAz
KCkpKSk7Ci0gICAgcXVhZC5zZXRQNCh2aWV3LT5jb250ZW50c1RvUm9vdFZpZXcocm91bmRlZElu
dFBvaW50KHF1YWQucDQoKSkpKTsKLSAgICBxdWFkICs9IG1haW5WaWV3LT5zY3JvbGxPZmZzZXQo
KTsKLX0KLQotc3RhdGljIHZvaWQgZ2V0T3JEcmF3Tm9kZUhpZ2hsaWdodChHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIE5vZGUqIG5vZGUsIGNvbnN0IEhpZ2hsaWdodENvbmZpZyYgaGlnaGxpZ2h0
Q29uZmlnLCBIaWdobGlnaHQqIGhpZ2hsaWdodCkKLXsKLSAgICBSZW5kZXJPYmplY3QqIHJlbmRl
cmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKLSAgICBGcmFtZSogY29udGFpbmluZ0ZyYW1lID0gbm9k
ZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKLQotICAgIGlmICghcmVuZGVyZXIgfHwgIWNvbnRhaW5p
bmdGcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRnJhbWVWaWV3KiBjb250YWluaW5nVmll
dyA9IGNvbnRhaW5pbmdGcmFtZS0+dmlldygpOwotICAgIEZyYW1lVmlldyogbWFpblZpZXcgPSBj
b250YWluaW5nRnJhbWUtPnBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKTsKLSAgICBJbnRSZWN0
IGJvdW5kaW5nQm94ID0gcGl4ZWxTbmFwcGVkSW50UmVjdChjb250YWluaW5nVmlldy0+Y29udGVu
dHNUb1Jvb3RWaWV3KHJlbmRlcmVyLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgpKSk7Ci0gICAg
Ym91bmRpbmdCb3gubW92ZShtYWluVmlldy0+c2Nyb2xsT2Zmc2V0KCkpOwotICAgIEludFJlY3Qg
dGl0bGVBbmNob3JCb3ggPSBib3VuZGluZ0JveDsKLQotICAgIEZsb2F0UmVjdCB2aXNpYmxlUmVj
dCA9IG1haW5WaWV3LT52aXNpYmxlQ29udGVudFJlY3QoKTsKLSAgICAvLyBEb24ndCB0cmFuc2xh
dGUgdGhlIGNvbnRleHQgaWYgdGhlIGZyYW1lIGlzIHJlbmRlcmVkIGluIHBhZ2UgY29vcmRpbmF0
ZXMuCi0gICAgaWYgKGNvbnRleHQgJiYgIW1haW5WaWV3LT5kZWxlZ2F0ZXNTY3JvbGxpbmcoKSkK
LSAgICAgICAgY29udGV4dC0+dHJhbnNsYXRlKC12aXNpYmxlUmVjdC54KCksIC12aXNpYmxlUmVj
dC55KCkpOwotCi0gICAgLy8gUmVuZGVyU1ZHUm9vdCBzaG91bGQgYmUgaGlnaGxpZ2h0ZWQgdGhy
b3VnaCB0aGUgaXNCb3goKSBjb2RlIHBhdGgsIGFsbCBvdGhlciBTVkcgZWxlbWVudHMgc2hvdWxk
IGp1c3QgZHVtcCB0aGVpciBhYnNvbHV0ZVF1YWRzKCkuCi0jaWYgRU5BQkxFKFNWRykKLSAgICBi
b29sIGlzU1ZHUmVuZGVyZXIgPSByZW5kZXJlci0+bm9kZSgpICYmIHJlbmRlcmVyLT5ub2RlKCkt
PmlzU1ZHRWxlbWVudCgpICYmICFyZW5kZXJlci0+aXNTVkdSb290KCk7Ci0jZWxzZQotICAgIGJv
b2wgaXNTVkdSZW5kZXJlciA9IGZhbHNlOwotI2VuZGlmCi0KLSAgICBpZiAoaXNTVkdSZW5kZXJl
cikgewotICAgICAgICBoaWdobGlnaHQtPnR5cGUgPSBIaWdobGlnaHRUeXBlUmVjdHM7Ci0gICAg
ICAgIHJlbmRlcmVyLT5hYnNvbHV0ZVF1YWRzKGhpZ2hsaWdodC0+cXVhZHMpOwotICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGhpZ2hsaWdodC0+cXVhZHMuc2l6ZSgpOyArK2kpCi0gICAg
ICAgICAgICBjb250ZW50c1F1YWRUb1BhZ2UobWFpblZpZXcsIGNvbnRhaW5pbmdWaWV3LCBoaWdo
bGlnaHQtPnF1YWRzW2ldKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgICAgIGRy
YXdIaWdobGlnaHRGb3JTVkdSZW5kZXJlcigqY29udGV4dCwgaGlnaGxpZ2h0LT5xdWFkcywgaGln
aGxpZ2h0Q29uZmlnKTsKLSAgICB9IGVsc2UgaWYgKHJlbmRlcmVyLT5pc0JveCgpIHx8IHJlbmRl
cmVyLT5pc1JlbmRlcklubGluZSgpKSB7Ci0gICAgICAgIExheW91dFJlY3QgY29udGVudEJveDsK
LSAgICAgICAgTGF5b3V0UmVjdCBwYWRkaW5nQm94OwotICAgICAgICBMYXlvdXRSZWN0IGJvcmRl
ckJveDsKLSAgICAgICAgTGF5b3V0UmVjdCBtYXJnaW5Cb3g7Ci0KLSAgICAgICAgaWYgKHJlbmRl
cmVyLT5pc0JveCgpKSB7Ci0gICAgICAgICAgICBSZW5kZXJCb3gqIHJlbmRlckJveCA9IHRvUmVu
ZGVyQm94KHJlbmRlcmVyKTsKLQotICAgICAgICAgICAgLy8gUmVuZGVyQm94IHJldHVybnMgdGhl
ICJwdXJlIiBjb250ZW50IGFyZWEgYm94LCBleGNsdXNpdmUgb2YgdGhlIHNjcm9sbGJhcnMgKGlm
IHByZXNlbnQpLCB3aGljaCBhbHNvIGNvdW50IHRvd2FyZHMgdGhlIGNvbnRlbnQgYXJlYSBpbiBD
U1MuCi0gICAgICAgICAgICBjb250ZW50Qm94ID0gcmVuZGVyQm94LT5jb250ZW50Qm94UmVjdCgp
OwotICAgICAgICAgICAgY29udGVudEJveC5zZXRXaWR0aChjb250ZW50Qm94LndpZHRoKCkgKyBy
ZW5kZXJCb3gtPnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKSk7Ci0gICAgICAgICAgICBjb250ZW50
Qm94LnNldEhlaWdodChjb250ZW50Qm94LmhlaWdodCgpICsgcmVuZGVyQm94LT5ob3Jpem9udGFs
U2Nyb2xsYmFySGVpZ2h0KCkpOwotCi0gICAgICAgICAgICBwYWRkaW5nQm94ID0gTGF5b3V0UmVj
dChjb250ZW50Qm94LngoKSAtIHJlbmRlckJveC0+cGFkZGluZ0xlZnQoKSwgY29udGVudEJveC55
KCkgLSByZW5kZXJCb3gtPnBhZGRpbmdUb3AoKSwKLSAgICAgICAgICAgICAgICAgICAgY29udGVu
dEJveC53aWR0aCgpICsgcmVuZGVyQm94LT5wYWRkaW5nTGVmdCgpICsgcmVuZGVyQm94LT5wYWRk
aW5nUmlnaHQoKSwgY29udGVudEJveC5oZWlnaHQoKSArIHJlbmRlckJveC0+cGFkZGluZ1RvcCgp
ICsgcmVuZGVyQm94LT5wYWRkaW5nQm90dG9tKCkpOwotICAgICAgICAgICAgYm9yZGVyQm94ID0g
TGF5b3V0UmVjdChwYWRkaW5nQm94LngoKSAtIHJlbmRlckJveC0+Ym9yZGVyTGVmdCgpLCBwYWRk
aW5nQm94LnkoKSAtIHJlbmRlckJveC0+Ym9yZGVyVG9wKCksCi0gICAgICAgICAgICAgICAgICAg
IHBhZGRpbmdCb3gud2lkdGgoKSArIHJlbmRlckJveC0+Ym9yZGVyTGVmdCgpICsgcmVuZGVyQm94
LT5ib3JkZXJSaWdodCgpLCBwYWRkaW5nQm94LmhlaWdodCgpICsgcmVuZGVyQm94LT5ib3JkZXJU
b3AoKSArIHJlbmRlckJveC0+Ym9yZGVyQm90dG9tKCkpOwotICAgICAgICAgICAgbWFyZ2luQm94
ID0gTGF5b3V0UmVjdChib3JkZXJCb3gueCgpIC0gcmVuZGVyQm94LT5tYXJnaW5MZWZ0KCksIGJv
cmRlckJveC55KCkgLSByZW5kZXJCb3gtPm1hcmdpblRvcCgpLAotICAgICAgICAgICAgICAgICAg
ICBib3JkZXJCb3gud2lkdGgoKSArIHJlbmRlckJveC0+bWFyZ2luV2lkdGgoKSwgYm9yZGVyQm94
LmhlaWdodCgpICsgcmVuZGVyQm94LT5tYXJnaW5IZWlnaHQoKSk7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBSZW5kZXJJbmxpbmUqIHJlbmRlcklubGluZSA9IHRvUmVuZGVySW5saW5l
KHJlbmRlcmVyKTsKLQotICAgICAgICAgICAgLy8gUmVuZGVySW5saW5lJ3MgYm91bmRpbmcgYm94
IGluY2x1ZGVzIHBhZGRpbmdzIGFuZCBib3JkZXJzLCBleGNsdWRlcyBtYXJnaW5zLgotICAgICAg
ICAgICAgYm9yZGVyQm94ID0gcmVuZGVySW5saW5lLT5saW5lc0JvdW5kaW5nQm94KCk7Ci0gICAg
ICAgICAgICBwYWRkaW5nQm94ID0gTGF5b3V0UmVjdChib3JkZXJCb3gueCgpICsgcmVuZGVySW5s
aW5lLT5ib3JkZXJMZWZ0KCksIGJvcmRlckJveC55KCkgKyByZW5kZXJJbmxpbmUtPmJvcmRlclRv
cCgpLAotICAgICAgICAgICAgICAgICAgICBib3JkZXJCb3gud2lkdGgoKSAtIHJlbmRlcklubGlu
ZS0+Ym9yZGVyTGVmdCgpIC0gcmVuZGVySW5saW5lLT5ib3JkZXJSaWdodCgpLCBib3JkZXJCb3gu
aGVpZ2h0KCkgLSByZW5kZXJJbmxpbmUtPmJvcmRlclRvcCgpIC0gcmVuZGVySW5saW5lLT5ib3Jk
ZXJCb3R0b20oKSk7Ci0gICAgICAgICAgICBjb250ZW50Qm94ID0gTGF5b3V0UmVjdChwYWRkaW5n
Qm94LngoKSArIHJlbmRlcklubGluZS0+cGFkZGluZ0xlZnQoKSwgcGFkZGluZ0JveC55KCkgKyBy
ZW5kZXJJbmxpbmUtPnBhZGRpbmdUb3AoKSwKLSAgICAgICAgICAgICAgICAgICAgcGFkZGluZ0Jv
eC53aWR0aCgpIC0gcmVuZGVySW5saW5lLT5wYWRkaW5nTGVmdCgpIC0gcmVuZGVySW5saW5lLT5w
YWRkaW5nUmlnaHQoKSwgcGFkZGluZ0JveC5oZWlnaHQoKSAtIHJlbmRlcklubGluZS0+cGFkZGlu
Z1RvcCgpIC0gcmVuZGVySW5saW5lLT5wYWRkaW5nQm90dG9tKCkpOwotICAgICAgICAgICAgLy8g
SWdub3JlIG1hcmdpblRvcCBhbmQgbWFyZ2luQm90dG9tIGZvciBpbmxpbmVzLgotICAgICAgICAg
ICAgbWFyZ2luQm94ID0gTGF5b3V0UmVjdChib3JkZXJCb3gueCgpIC0gcmVuZGVySW5saW5lLT5t
YXJnaW5MZWZ0KCksIGJvcmRlckJveC55KCksCi0gICAgICAgICAgICAgICAgICAgIGJvcmRlckJv
eC53aWR0aCgpICsgcmVuZGVySW5saW5lLT5tYXJnaW5XaWR0aCgpLCBib3JkZXJCb3guaGVpZ2h0
KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgRmxvYXRRdWFkIGFic0NvbnRlbnRRdWFkID0gcmVu
ZGVyZXItPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KGNvbnRlbnRCb3gpKTsKLSAgICAg
ICAgRmxvYXRRdWFkIGFic1BhZGRpbmdRdWFkID0gcmVuZGVyZXItPmxvY2FsVG9BYnNvbHV0ZVF1
YWQoRmxvYXRSZWN0KHBhZGRpbmdCb3gpKTsKLSAgICAgICAgRmxvYXRRdWFkIGFic0JvcmRlclF1
YWQgPSByZW5kZXJlci0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QoYm9yZGVyQm94KSk7
Ci0gICAgICAgIEZsb2F0UXVhZCBhYnNNYXJnaW5RdWFkID0gcmVuZGVyZXItPmxvY2FsVG9BYnNv
bHV0ZVF1YWQoRmxvYXRSZWN0KG1hcmdpbkJveCkpOwotCi0gICAgICAgIGNvbnRlbnRzUXVhZFRv
UGFnZShtYWluVmlldywgY29udGFpbmluZ1ZpZXcsIGFic0NvbnRlbnRRdWFkKTsKLSAgICAgICAg
Y29udGVudHNRdWFkVG9QYWdlKG1haW5WaWV3LCBjb250YWluaW5nVmlldywgYWJzUGFkZGluZ1F1
YWQpOwotICAgICAgICBjb250ZW50c1F1YWRUb1BhZ2UobWFpblZpZXcsIGNvbnRhaW5pbmdWaWV3
LCBhYnNCb3JkZXJRdWFkKTsKLSAgICAgICAgY29udGVudHNRdWFkVG9QYWdlKG1haW5WaWV3LCBj
b250YWluaW5nVmlldywgYWJzTWFyZ2luUXVhZCk7Ci0KLSAgICAgICAgdGl0bGVBbmNob3JCb3gg
PSBhYnNNYXJnaW5RdWFkLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7Ci0KLSAgICAgICAgaGlnaGxp
Z2h0LT50eXBlID0gSGlnaGxpZ2h0VHlwZU5vZGU7Ci0gICAgICAgIGhpZ2hsaWdodC0+cXVhZHMu
YXBwZW5kKGFic01hcmdpblF1YWQpOwotICAgICAgICBoaWdobGlnaHQtPnF1YWRzLmFwcGVuZChh
YnNCb3JkZXJRdWFkKTsKLSAgICAgICAgaGlnaGxpZ2h0LT5xdWFkcy5hcHBlbmQoYWJzUGFkZGlu
Z1F1YWQpOwotICAgICAgICBoaWdobGlnaHQtPnF1YWRzLmFwcGVuZChhYnNDb250ZW50UXVhZCk7
Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgICAgICBkcmF3SGlnaGxpZ2h0Rm9yQm94
KCpjb250ZXh0LCBhYnNDb250ZW50UXVhZCwgYWJzUGFkZGluZ1F1YWQsIGFic0JvcmRlclF1YWQs
IGFic01hcmdpblF1YWQsIGhpZ2hsaWdodENvbmZpZyk7Ci0gICAgfQotCi0gICAgLy8gRHJhdyBu
b2RlIHRpdGxlIGlmIG5lY2Vzc2FyeS4KLQotICAgIGlmICghbm9kZS0+aXNFbGVtZW50Tm9kZSgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoY29udGV4dCAmJiBoaWdobGlnaHRDb25maWcu
c2hvd0luZm8pCi0gICAgICAgIGRyYXdFbGVtZW50VGl0bGUoKmNvbnRleHQsIG5vZGUsIHJlbmRl
cmVyLCBwaXhlbFNuYXBwZWRJbnRSZWN0KGJvdW5kaW5nQm94KSwgcGl4ZWxTbmFwcGVkSW50UmVj
dCh0aXRsZUFuY2hvckJveCksIHZpc2libGVSZWN0LCBjb250YWluaW5nRnJhbWUtPnNldHRpbmdz
KCkpOwotfQotCi1zdGF0aWMgdm9pZCBnZXRPckRyYXdSZWN0SGlnaGxpZ2h0KEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgUGFnZSogcGFnZSwgSW50UmVjdCogcmVjdCwgY29uc3QgSGlnaGxpZ2h0
Q29uZmlnJiBoaWdobGlnaHRDb25maWcsIEhpZ2hsaWdodCAqaGlnaGxpZ2h0KQotewotICAgIGlm
ICghcGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRmxvYXRSZWN0IGhpZ2hsaWdodFJlY3Qo
KnJlY3QpOwotCi0gICAgaGlnaGxpZ2h0LT50eXBlID0gSGlnaGxpZ2h0VHlwZVJlY3RzOwotICAg
IGhpZ2hsaWdodC0+cXVhZHMuYXBwZW5kKGhpZ2hsaWdodFJlY3QpOwotCi0gICAgaWYgKGNvbnRl
eHQpIHsKLSAgICAgICAgRnJhbWVWaWV3KiB2aWV3ID0gcGFnZS0+bWFpbkZyYW1lKCktPnZpZXco
KTsKLSAgICAgICAgaWYgKCF2aWV3LT5kZWxlZ2F0ZXNTY3JvbGxpbmcoKSkgewotICAgICAgICAg
ICAgRmxvYXRSZWN0IHZpc2libGVSZWN0ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7Ci0g
ICAgICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUoLXZpc2libGVSZWN0LngoKSwgLXZpc2libGVS
ZWN0LnkoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBkcmF3T3V0bGluZWRRdWFkKCpjb250ZXh0
LCBoaWdobGlnaHRSZWN0LCBoaWdobGlnaHRDb25maWcuY29udGVudCwgaGlnaGxpZ2h0Q29uZmln
LmNvbnRlbnRPdXRsaW5lKTsKLSAgICB9Ci19Ci0KLX0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQot
Ci1JbnNwZWN0b3JPdmVybGF5OjpJbnNwZWN0b3JPdmVybGF5KFBhZ2UqIHBhZ2UsIEluc3BlY3Rv
ckNsaWVudCogY2xpZW50KQotICAgIDogbV9wYWdlKHBhZ2UpCi0gICAgLCBtX2NsaWVudChjbGll
bnQpCi17Ci19Ci0KLXZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6cGFpbnQoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KQotewotICAgIGRyYXdQYXVzZWRJbkRlYnVnZ2VyKGNvbnRleHQpOwotICAgIGRy
YXdOb2RlSGlnaGxpZ2h0KGNvbnRleHQpOwotICAgIGRyYXdSZWN0SGlnaGxpZ2h0KGNvbnRleHQp
OwotfQotCi12b2lkIEluc3BlY3Rvck92ZXJsYXk6OmRyYXdPdXRsaW5lKEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQot
ewotICAgIEZsb2F0UmVjdCBvdXRsaW5lUmVjdCA9IHJlY3Q7Ci0gICAgZHJhd091dGxpbmVkUXVh
ZChjb250ZXh0LCBvdXRsaW5lUmVjdCwgQ29sb3IoKSwgY29sb3IpOwotfQotCi12b2lkIEluc3Bl
Y3Rvck92ZXJsYXk6OmdldEhpZ2hsaWdodChIaWdobGlnaHQqIGhpZ2hsaWdodCkgY29uc3QKLXsK
LSAgICBpZiAoIW1faGlnaGxpZ2h0Tm9kZSAmJiAhbV9oaWdobGlnaHRSZWN0KQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBoaWdobGlnaHQtPnR5cGUgPSBIaWdobGlnaHRUeXBlUmVjdHM7Ci0gICAg
aWYgKG1faGlnaGxpZ2h0Tm9kZSkgewotICAgICAgICBoaWdobGlnaHQtPnNldENvbG9ycyhtX25v
ZGVIaWdobGlnaHRDb25maWcpOwotICAgICAgICBnZXRPckRyYXdOb2RlSGlnaGxpZ2h0KDAsIG1f
aGlnaGxpZ2h0Tm9kZS5nZXQoKSwgbV9ub2RlSGlnaGxpZ2h0Q29uZmlnLCBoaWdobGlnaHQpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGhpZ2hsaWdodC0+c2V0Q29sb3JzKG1fcmVjdEhpZ2hsaWdo
dENvbmZpZyk7Ci0gICAgICAgIGdldE9yRHJhd1JlY3RIaWdobGlnaHQoMCwgbV9wYWdlLCBtX2hp
Z2hsaWdodFJlY3QuZ2V0KCksIG1fcmVjdEhpZ2hsaWdodENvbmZpZywgaGlnaGxpZ2h0KTsKLSAg
ICB9Ci19Ci0KLXZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6c2V0UGF1c2VkSW5EZWJ1Z2dlck1lc3Nh
Z2UoY29uc3QgU3RyaW5nKiBtZXNzYWdlKQotewotICAgIG1fcGF1c2VkSW5EZWJ1Z2dlck1lc3Nh
Z2UgPSBtZXNzYWdlID8gKm1lc3NhZ2UgOiBTdHJpbmcoKTsKLSAgICB1cGRhdGUoKTsKLX0KLQot
dm9pZCBJbnNwZWN0b3JPdmVybGF5OjpoaWRlSGlnaGxpZ2h0KCkKLXsKLSAgICBtX2hpZ2hsaWdo
dE5vZGUuY2xlYXIoKTsKLSAgICBtX2hpZ2hsaWdodFJlY3QuY2xlYXIoKTsKLSAgICB1cGRhdGUo
KTsKLX0KLQotdm9pZCBJbnNwZWN0b3JPdmVybGF5OjpoaWdobGlnaHROb2RlKE5vZGUqIG5vZGUs
IGNvbnN0IEhpZ2hsaWdodENvbmZpZyYgaGlnaGxpZ2h0Q29uZmlnKQotewotICAgIG1fbm9kZUhp
Z2hsaWdodENvbmZpZyA9IGhpZ2hsaWdodENvbmZpZzsKLSAgICBtX2hpZ2hsaWdodE5vZGUgPSBu
b2RlOwotICAgIHVwZGF0ZSgpOwotfQotCi12b2lkIEluc3BlY3Rvck92ZXJsYXk6OmhpZ2hsaWdo
dFJlY3QoUGFzc093blB0cjxJbnRSZWN0PiByZWN0LCBjb25zdCBIaWdobGlnaHRDb25maWcmIGhp
Z2hsaWdodENvbmZpZykKLXsKLSAgICBtX3JlY3RIaWdobGlnaHRDb25maWcgPSBoaWdobGlnaHRD
b25maWc7Ci0gICAgbV9oaWdobGlnaHRSZWN0ID0gcmVjdDsKLSAgICB1cGRhdGUoKTsKLX0KLQot
Tm9kZSogSW5zcGVjdG9yT3ZlcmxheTo6aGlnaGxpZ2h0ZWROb2RlKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9oaWdobGlnaHROb2RlLmdldCgpOwotfQotCi12b2lkIEluc3BlY3Rvck92ZXJsYXk6
OnVwZGF0ZSgpCi17Ci0gICAgaWYgKG1faGlnaGxpZ2h0Tm9kZSB8fCBtX2hpZ2hsaWdodFJlY3Qg
fHwgIW1fcGF1c2VkSW5EZWJ1Z2dlck1lc3NhZ2UuaXNOdWxsKCkpCi0gICAgICAgIG1fY2xpZW50
LT5oaWdobGlnaHQoKTsKLSAgICBlbHNlCi0gICAgICAgIG1fY2xpZW50LT5oaWRlSGlnaGxpZ2h0
KCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6ZHJhd05vZGVIaWdobGlnaHQoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KQotewotICAgIGlmICghbV9oaWdobGlnaHROb2RlKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBIaWdobGlnaHQgaGlnaGxpZ2h0OwotICAgIGdldE9yRHJhd05vZGVI
aWdobGlnaHQoJmNvbnRleHQsIG1faGlnaGxpZ2h0Tm9kZS5nZXQoKSwgbV9ub2RlSGlnaGxpZ2h0
Q29uZmlnLCAmaGlnaGxpZ2h0KTsKLX0KLQotdm9pZCBJbnNwZWN0b3JPdmVybGF5OjpkcmF3UmVj
dEhpZ2hsaWdodChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgaWYgKCFtX2hpZ2hs
aWdodFJlY3QpCi0gICAgICAgIHJldHVybjsKLQotICAgIEhpZ2hsaWdodCBoaWdobGlnaHQ7Ci0g
ICAgZ2V0T3JEcmF3UmVjdEhpZ2hsaWdodCgmY29udGV4dCwgbV9wYWdlLCBtX2hpZ2hsaWdodFJl
Y3QuZ2V0KCksIG1fcmVjdEhpZ2hsaWdodENvbmZpZywgJmhpZ2hsaWdodCk7Ci19Ci0KLXZvaWQg
SW5zcGVjdG9yT3ZlcmxheTo6ZHJhd1BhdXNlZEluRGVidWdnZXIoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KQotewotICAgIGlmIChtX3BhdXNlZEluRGVidWdnZXJNZXNzYWdlLmlzTnVsbCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKENvbG9yLCBiYWNrZ3Jv
dW5kQ29sb3IsICgwLCAwLCAwLCAzMSkpOwotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ29sb3Is
IHRleHRCYWNrZ3JvdW5kQ29sb3IsICgyNTUsIDI1NSwgMTk0KSk7Ci0gICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChDb2xvciwgYm9yZGVyQ29sb3IsICgxMjgsIDEyOCwgMTI4KSk7Ci0KLSAgICBGcmFt
ZSogZnJhbWUgPSBtX3BhZ2UtPm1haW5GcmFtZSgpOwotICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9
IGZyYW1lLT5zZXR0aW5ncygpOwotICAgIEludFJlY3QgdmlzaWJsZVJlY3QgPSBJbnRSZWN0KElu
dFBvaW50KCksIGZyYW1lLT52aWV3KCktPnZpc2libGVTaXplKCkpOwotCi0gICAgY29udGV4dC5z
ZXRGaWxsQ29sb3IoYmFja2dyb3VuZENvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKLSAgICBj
b250ZXh0LmZpbGxSZWN0KHZpc2libGVSZWN0KTsKLQotICAgIEZvbnREZXNjcmlwdGlvbiBkZXNj
OwotICAgIHNldFVwRm9udERlc2NyaXB0aW9uKGRlc2MsIHNldHRpbmdzKTsKLSAgICBGb250IGZv
bnQgPSBGb250KGRlc2MsIDAsIDApOwotICAgIGZvbnQudXBkYXRlKDApOwotCi0gICAgVGV4dFJ1
biB0ZXh0UnVuKG1fcGF1c2VkSW5EZWJ1Z2dlck1lc3NhZ2UpOwotICAgIEludFJlY3QgdGl0bGVS
ZWN0ID0gZW5jbG9zaW5nSW50UmVjdChmb250LnNlbGVjdGlvblJlY3RGb3JUZXh0KHRleHRSdW4s
IEludFBvaW50KCksIGZvbnRIZWlnaHRQeCkpOwotICAgIHRpdGxlUmVjdC5pbmZsYXRlKHJlY3RJ
bmZsYXRlUHgpOwotICAgIHRpdGxlUmVjdC5zZXRMb2NhdGlvbihJbnRQb2ludCh2aXNpYmxlUmVj
dC53aWR0aCgpIC8gMiAtIHRpdGxlUmVjdC53aWR0aCgpIC8gMiwgMCkpOwotCi0gICAgY29udGV4
dC5zZXRGaWxsQ29sb3IodGV4dEJhY2tncm91bmRDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7
Ci0gICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihib3JkZXJDb2xvciwgQ29sb3JTcGFjZURldmlj
ZVJHQik7Ci0gICAgY29udGV4dC5kcmF3UmVjdCh0aXRsZVJlY3QpOwotICAgIGRyYXdTdWJzdHJp
bmcodGV4dFJ1biwgMCwgbV9wYXVzZWRJbkRlYnVnZ2VyTWVzc2FnZS5sZW5ndGgoKSwgQ29sb3I6
OmJsYWNrLCBmb250LCBjb250ZXh0LCB0aXRsZVJlY3QpOwotfQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0RPTU5vZGVIaWdobGlnaHRlci5oIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0RPTU5vZGVIaWdobGlnaHRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA1YzdkMDBjMTU0MjQ5NjA3ODBlMTYyOTNkOGIyMzBlZmNlNmJhNWUwLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyNCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBD
b21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2lmbmRlZiBET01Ob2RlSGlnaGxpZ2h0ZXJfaAotI2RlZmluZSBET01Ob2RlSGlnaGxpZ2h0
ZXJfaAotCi0jaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJGbG9hdFF1YWQuaCIKLSNpbmNs
dWRlICJMYXlvdXRUeXBlcy5oIgotI2luY2x1ZGUgIk5vZGUuaCIKLQotI2luY2x1ZGUgPHd0Zi9P
d25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
Y2xhc3MgQ29sb3I7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1jbGFzcyBJbnNwZWN0b3JDbGll
bnQ7Ci1jbGFzcyBJbnRSZWN0OwotY2xhc3MgTm9kZTsKLWNsYXNzIFBhZ2U7Ci0KLXN0cnVjdCBI
aWdobGlnaHRDb25maWcgewotICAgIENvbG9yIGNvbnRlbnQ7Ci0gICAgQ29sb3IgY29udGVudE91
dGxpbmU7Ci0gICAgQ29sb3IgcGFkZGluZzsKLSAgICBDb2xvciBib3JkZXI7Ci0gICAgQ29sb3Ig
bWFyZ2luOwotICAgIGJvb2wgc2hvd0luZm87Ci19OwotCi1lbnVtIEhpZ2hsaWdodFR5cGUgewot
ICAgIEhpZ2hsaWdodFR5cGVOb2RlLAotICAgIEhpZ2hsaWdodFR5cGVSZWN0cywKLX07Ci0KLXN0
cnVjdCBIaWdobGlnaHQgewotICAgIHZvaWQgc2V0Q29sb3JzKGNvbnN0IEhpZ2hsaWdodENvbmZp
ZyYgaGlnaGxpZ2h0Q29uZmlnKQotICAgIHsKLSAgICAgICAgY29udGVudENvbG9yID0gaGlnaGxp
Z2h0Q29uZmlnLmNvbnRlbnQ7Ci0gICAgICAgIHBhZGRpbmdDb2xvciA9IGhpZ2hsaWdodENvbmZp
Zy5wYWRkaW5nOwotICAgICAgICBib3JkZXJDb2xvciA9IGhpZ2hsaWdodENvbmZpZy5ib3JkZXI7
Ci0gICAgICAgIG1hcmdpbkNvbG9yID0gaGlnaGxpZ2h0Q29uZmlnLm1hcmdpbjsKLSAgICB9Ci0K
LSAgICBDb2xvciBjb250ZW50Q29sb3I7Ci0gICAgQ29sb3IgcGFkZGluZ0NvbG9yOwotICAgIENv
bG9yIGJvcmRlckNvbG9yOwotICAgIENvbG9yIG1hcmdpbkNvbG9yOwotCi0gICAgLy8gV2hlbiB0
aGUgdHlwZSBpcyBOb2RlLCB0aGVyZSBhcmUgNCBxdWFkcyAobWFyZ2luLCBib3JkZXIsIHBhZGRp
bmcsIGNvbnRlbnQpLgotICAgIC8vIFdoZW4gdGhlIHR5cGUgaXMgUmVjdHMsIHRoaXMgaXMganVz
dCBhIGxpc3Qgb2YgcXVhZHMuCi0gICAgSGlnaGxpZ2h0VHlwZSB0eXBlOwotICAgIFZlY3RvcjxG
bG9hdFF1YWQ+IHF1YWRzOwotfTsKLQotY2xhc3MgSW5zcGVjdG9yT3ZlcmxheSB7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SW5zcGVjdG9yT3ZlcmxheT4gY3JlYXRlKFBhZ2UqIHBh
Z2UsIEluc3BlY3RvckNsaWVudCogY2xpZW50KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UHRyKG5ldyBJbnNwZWN0b3JPdmVybGF5KHBhZ2UsIGNsaWVudCkpOwotICAgIH0KLQotICAgIHZv
aWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0Jik7Ci0gICAgdm9pZCBkcmF3T3V0bGluZShHcmFwaGlj
c0NvbnRleHQmLCBjb25zdCBMYXlvdXRSZWN0JiwgY29uc3QgQ29sb3ImKTsKLSAgICB2b2lkIGdl
dEhpZ2hsaWdodChIaWdobGlnaHQqKSBjb25zdDsKLQotICAgIHZvaWQgc2V0UGF1c2VkSW5EZWJ1
Z2dlck1lc3NhZ2UoY29uc3QgU3RyaW5nKik7Ci0KLSAgICB2b2lkIGhpZGVIaWdobGlnaHQoKTsK
LSAgICB2b2lkIGhpZ2hsaWdodE5vZGUoTm9kZSosIGNvbnN0IEhpZ2hsaWdodENvbmZpZyYpOwot
ICAgIHZvaWQgaGlnaGxpZ2h0UmVjdChQYXNzT3duUHRyPEludFJlY3Q+LCBjb25zdCBIaWdobGln
aHRDb25maWcmKTsKLQotICAgIE5vZGUqIGhpZ2hsaWdodGVkTm9kZSgpIGNvbnN0OwotCi1wcml2
YXRlOgotICAgIEluc3BlY3Rvck92ZXJsYXkoUGFnZSosIEluc3BlY3RvckNsaWVudCopOwotCi0g
ICAgdm9pZCB1cGRhdGUoKTsKLSAgICB2b2lkIGRyYXdOb2RlSGlnaGxpZ2h0KEdyYXBoaWNzQ29u
dGV4dCYpOwotICAgIHZvaWQgZHJhd1JlY3RIaWdobGlnaHQoR3JhcGhpY3NDb250ZXh0Jik7Ci0g
ICAgdm9pZCBkcmF3UGF1c2VkSW5EZWJ1Z2dlcihHcmFwaGljc0NvbnRleHQmKTsKLQotICAgIFBh
Z2UqIG1fcGFnZTsKLSAgICBJbnNwZWN0b3JDbGllbnQqIG1fY2xpZW50OwotICAgIFN0cmluZyBt
X3BhdXNlZEluRGVidWdnZXJNZXNzYWdlOwotICAgIFJlZlB0cjxOb2RlPiBtX2hpZ2hsaWdodE5v
ZGU7Ci0gICAgSGlnaGxpZ2h0Q29uZmlnIG1fbm9kZUhpZ2hsaWdodENvbmZpZzsKLSAgICBPd25Q
dHI8SW50UmVjdD4gbV9oaWdobGlnaHRSZWN0OwotICAgIEhpZ2hsaWdodENvbmZpZyBtX3JlY3RI
aWdobGlnaHRDb25maWc7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLQotI2VuZGlm
IC8vIERPTU5vZGVIaWdobGlnaHRlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQWxsSW5PbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckFsbEluT25lLmNwcAppbmRleCA1ZTFhYmExMjA4YWZiNmI4ZGU4OTg5YzM3ZTZiNTlk
YmVmZDhiZDM1Li5kYjNmODJjYmU5YWJmODI3YTk3YWFlOGMwODRhOGZkNmIxMjA5MmI4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWxsSW5PbmUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBbGxJbk9uZS5jcHAKQEAgLTI4
LDcgKzI4LDYgQEAKICNpbmNsdWRlICJDb25zb2xlTWVzc2FnZS5jcHAiCiAjaW5jbHVkZSAiQ29u
dGVudFNlYXJjaFV0aWxzLmNwcCIKICNpbmNsdWRlICJET01FZGl0b3IuY3BwIgotI2luY2x1ZGUg
IkRPTU5vZGVIaWdobGlnaHRlci5jcHAiCiAjaW5jbHVkZSAiRE9NUGF0Y2hTdXBwb3J0LmNwcCIK
ICNpbmNsdWRlICJJZGVudGlmaWVyc0ZhY3RvcnkuY3BwIgogI2luY2x1ZGUgIkluamVjdGVkU2Ny
aXB0LmNwcCIKQEAgLTU3LDYgKzU2LDcgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JJbmRleGVkREJB
Z2VudC5jcHAiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcCIKICNpbmNs
dWRlICJJbnNwZWN0b3JNZW1vcnlBZ2VudC5jcHAiCisjaW5jbHVkZSAiSW5zcGVjdG9yT3Zlcmxh
eS5jcHAiCiAjaW5jbHVkZSAiSW5zcGVjdG9yUGFnZUFnZW50LmNwcCIKICNpbmNsdWRlICJJbnNw
ZWN0b3JQcm9maWxlckFnZW50LmNwcCIKICNpbmNsdWRlICJJbnNwZWN0b3JSZXNvdXJjZUFnZW50
LmNwcCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250
cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVy
LmNwcAppbmRleCBlMjZhMWMwNGI1OTU1ZDE5ZTU0MmIzYzZlNjgzOTZhY2VjNjQ2ODQ1Li41YTBm
M2JmNDM0ZDg2MGE3NmNmYTBjOWY3NWFiZWQwYWNkZmRkNmE3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC0zNCw3ICszNCw2IEBA
CiAKICNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCiAKLSNpbmNsdWRlICJET01Ob2Rl
SGlnaGxpZ2h0ZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgogI2luY2x1ZGUgIklkZW50aWZpZXJzRmFjdG9yeS5oIgpAQCAtNTcsNiArNTYsNyBA
QAogI2luY2x1ZGUgIkluc3BlY3RvckluZGV4ZWREQkFnZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yTWVtb3J5QWdlbnQuaCIK
KyNpbmNsdWRlICJJbnNwZWN0b3JPdmVybGF5LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yUGFnZUFn
ZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5oIgogI2luY2x1ZGUgIklu
c3BlY3RvclJlc291cmNlQWdlbnQuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRE9NQWdlbnQuY3BwCmluZGV4IDJhMTE2NTlmYWYwZTBiMWM2ZTkyNTk1NmE1NmU3MjY5
YjYyYzRiNzkuLjc3YThjNWEyYTkxMGZhZGJjYTdkZGVlYjExZDhlNjc1NDUyYzFiOWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcApAQCAtNDcs
NyArNDcsNiBAQAogI2luY2x1ZGUgIkNvb2tpZS5oIgogI2luY2x1ZGUgIkNvb2tpZUphci5oIgog
I2luY2x1ZGUgIkRPTUVkaXRvci5oIgotI2luY2x1ZGUgIkRPTU5vZGVIaWdobGlnaHRlci5oIgog
I2luY2x1ZGUgIkRPTVBhdGNoU3VwcG9ydC5oIgogI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgogI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCkBAIC02OCw2ICs2Nyw3IEBACiAjaW5jbHVkZSAiSW5qZWN0ZWRT
Y3JpcHRNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmQuaCIKICNpbmNsdWRl
ICJJbnNwZWN0b3JIaXN0b3J5LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yT3ZlcmxheS5oIgogI2lu
Y2x1ZGUgIkluc3BlY3RvclBhZ2VBZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvclN0YXRlLmgi
CiAjaW5jbHVkZSAiSW5zdHJ1bWVudGluZ0FnZW50cy5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaAppbmRleCA4NDgwY2M5MjU3MzNlNTE2OWM2NmY0OWU2
NmUzZDk0MTBlYmNlMzUwLi5jNjMxZjYwZmU0ZjFkZjM1YzkxMmNkODJhNzk5ZTk3MGQzM2RhOTYx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaApAQCAt
MzAsMTIgKzMwLDEyIEBACiAjaWZuZGVmIEluc3BlY3RvckRPTUFnZW50X2gKICNkZWZpbmUgSW5z
cGVjdG9yRE9NQWdlbnRfaAogCi0jaW5jbHVkZSAiRE9NTm9kZUhpZ2hsaWdodGVyLmgiCiAjaW5j
bHVkZSAiRXZlbnRUYXJnZXQuaCIKICNpbmNsdWRlICJJbmplY3RlZFNjcmlwdC5oIgogI2luY2x1
ZGUgIkluamVjdGVkU2NyaXB0TWFuYWdlci5oIgogI2luY2x1ZGUgIkluc3BlY3RvckJhc2VBZ2Vu
dC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9y
T3ZlcmxheS5oIgogI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgogI2luY2x1ZGUgIlRpbWVy
LmgiCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVy
bGF5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4yMWJkMGVkNDk3ZDU3NGZkYTk1NWU5ZmU4Mzc0ZGRlYmZlNmY1MzNhCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXku
Y3BwCkBAIC0wLDAgKzEsNjE0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhl
ciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1l
cyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxF
KElOU1BFQ1RPUikKKworI2luY2x1ZGUgIkluc3BlY3Rvck92ZXJsYXkuaCIKKworI2luY2x1ZGUg
IkVsZW1lbnQuaCIKKyNpbmNsdWRlICJGb250Q2FjaGUuaCIKKyNpbmNsdWRlICJGb250RmFtaWx5
LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCisjaW5jbHVk
ZSAiSW5zcGVjdG9yQ2xpZW50LmgiCisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIlBhZ2Uu
aCIKKyNpbmNsdWRlICJSYW5nZS5oIgorI2luY2x1ZGUgIlJlbmRlckJveE1vZGVsT2JqZWN0Lmgi
CisjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisj
aW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJTdHlsZWRFbGVtZW50LmgiCisjaW5jbHVk
ZSAiVGV4dFJ1bi5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgeworCisjaWYgT1MoV0lORE9XUykKK3N0YXRp
YyBjb25zdCB1bnNpZ25lZCBmb250SGVpZ2h0UHggPSAxMjsKKyNlbGlmIE9TKE1BQ19PU19YKSB8
fCBPUyhVTklYKQorc3RhdGljIGNvbnN0IHVuc2lnbmVkIGZvbnRIZWlnaHRQeCA9IDExOworI2Vu
ZGlmCisKK2NvbnN0IHN0YXRpYyBpbnQgcmVjdEluZmxhdGVQeCA9IDQ7Citjb25zdCBzdGF0aWMg
aW50IGJvcmRlcldpZHRoUHggPSAxOworY29uc3Qgc3RhdGljIGludCB0b29sdGlwUGFkZGluZyA9
IDQ7CisKK2NvbnN0IHN0YXRpYyBpbnQgYXJyb3dUaXBPZmZzZXQgPSAyMDsKK2NvbnN0IHN0YXRp
YyBmbG9hdCBhcnJvd0hlaWdodCA9IDc7Citjb25zdCBzdGF0aWMgZmxvYXQgYXJyb3dIYWxmV2lk
dGggPSA3OworCitQYXRoIHF1YWRUb1BhdGgoY29uc3QgRmxvYXRRdWFkJiBxdWFkKQoreworICAg
IFBhdGggcXVhZFBhdGg7CisgICAgcXVhZFBhdGgubW92ZVRvKHF1YWQucDEoKSk7CisgICAgcXVh
ZFBhdGguYWRkTGluZVRvKHF1YWQucDIoKSk7CisgICAgcXVhZFBhdGguYWRkTGluZVRvKHF1YWQu
cDMoKSk7CisgICAgcXVhZFBhdGguYWRkTGluZVRvKHF1YWQucDQoKSk7CisgICAgcXVhZFBhdGgu
Y2xvc2VTdWJwYXRoKCk7CisgICAgcmV0dXJuIHF1YWRQYXRoOworfQorCit2b2lkIGRyYXdPdXRs
aW5lZFF1YWQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFF1YWQmIHF1YWQs
IGNvbnN0IENvbG9yJiBmaWxsQ29sb3IsIGNvbnN0IENvbG9yJiBvdXRsaW5lQ29sb3IpCit7Cisg
ICAgc3RhdGljIGNvbnN0IGludCBvdXRsaW5lVGhpY2tuZXNzID0gMjsKKworICAgIFBhdGggcXVh
ZFBhdGggPSBxdWFkVG9QYXRoKHF1YWQpOworCisgICAgLy8gQ2xpcCBvdXQgdGhlIHF1YWQsIHRo
ZW4gZHJhdyB3aXRoIGEgMnB4IHN0cm9rZSB0byBnZXQgYSBwaXhlbAorICAgIC8vIG9mIG91dGxp
bmUgKGJlY2F1c2UgaW5mbGF0aW5nIGEgcXVhZCBpcyBoYXJkKQorICAgIHsKKyAgICAgICAgY29u
dGV4dC5zYXZlKCk7CisgICAgICAgIGNvbnRleHQuY2xpcE91dChxdWFkUGF0aCk7CisKKyAgICAg
ICAgY29udGV4dC5zZXRTdHJva2VUaGlja25lc3Mob3V0bGluZVRoaWNrbmVzcyk7CisgICAgICAg
IGNvbnRleHQuc2V0U3Ryb2tlQ29sb3Iob3V0bGluZUNvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdC
KTsKKyAgICAgICAgY29udGV4dC5zdHJva2VQYXRoKHF1YWRQYXRoKTsKKworICAgICAgICBjb250
ZXh0LnJlc3RvcmUoKTsKKyAgICB9CisKKyAgICAvLyBOb3cgZG8gdGhlIGZpbGwKKyAgICBjb250
ZXh0LnNldEZpbGxDb2xvcihmaWxsQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgIGNv
bnRleHQuZmlsbFBhdGgocXVhZFBhdGgpOworfQorCit2b2lkIGRyYXdPdXRsaW5lZFF1YWRXaXRo
Q2xpcChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UXVhZCYgcXVhZCwgY29u
c3QgRmxvYXRRdWFkJiBjbGlwUXVhZCwgY29uc3QgQ29sb3ImIGZpbGxDb2xvcikKK3sKKyAgICBj
b250ZXh0LnNhdmUoKTsKKyAgICBQYXRoIGNsaXBRdWFkUGF0aCA9IHF1YWRUb1BhdGgoY2xpcFF1
YWQpOworICAgIGNvbnRleHQuY2xpcE91dChjbGlwUXVhZFBhdGgpOworICAgIGRyYXdPdXRsaW5l
ZFF1YWQoY29udGV4dCwgcXVhZCwgZmlsbENvbG9yLCBDb2xvcjo6dHJhbnNwYXJlbnQpOworICAg
IGNvbnRleHQucmVzdG9yZSgpOworfQorCit2b2lkIGRyYXdIaWdobGlnaHRGb3JCb3goR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFF1YWQmIGNvbnRlbnRRdWFkLCBjb25zdCBG
bG9hdFF1YWQmIHBhZGRpbmdRdWFkLCBjb25zdCBGbG9hdFF1YWQmIGJvcmRlclF1YWQsIGNvbnN0
IEZsb2F0UXVhZCYgbWFyZ2luUXVhZCwgY29uc3QgSGlnaGxpZ2h0Q29uZmlnJiBoaWdobGlnaHRD
b25maWcpCit7CisgICAgYm9vbCBoYXNNYXJnaW4gPSBoaWdobGlnaHRDb25maWcubWFyZ2luICE9
IENvbG9yOjp0cmFuc3BhcmVudDsKKyAgICBib29sIGhhc0JvcmRlciA9IGhpZ2hsaWdodENvbmZp
Zy5ib3JkZXIgIT0gQ29sb3I6OnRyYW5zcGFyZW50OworICAgIGJvb2wgaGFzUGFkZGluZyA9IGhp
Z2hsaWdodENvbmZpZy5wYWRkaW5nICE9IENvbG9yOjp0cmFuc3BhcmVudDsKKyAgICBib29sIGhh
c0NvbnRlbnQgPSBoaWdobGlnaHRDb25maWcuY29udGVudCAhPSBDb2xvcjo6dHJhbnNwYXJlbnQg
fHwgaGlnaGxpZ2h0Q29uZmlnLmNvbnRlbnRPdXRsaW5lICE9IENvbG9yOjp0cmFuc3BhcmVudDsK
KworICAgIEZsb2F0UXVhZCBjbGlwUXVhZDsKKyAgICBDb2xvciBjbGlwQ29sb3I7CisgICAgaWYg
KGhhc01hcmdpbiAmJiAoIWhhc0JvcmRlciB8fCBtYXJnaW5RdWFkICE9IGJvcmRlclF1YWQpKSB7
CisgICAgICAgIGRyYXdPdXRsaW5lZFF1YWRXaXRoQ2xpcChjb250ZXh0LCBtYXJnaW5RdWFkLCBi
b3JkZXJRdWFkLCBoaWdobGlnaHRDb25maWcubWFyZ2luKTsKKyAgICAgICAgY2xpcFF1YWQgPSBi
b3JkZXJRdWFkOworICAgIH0KKyAgICBpZiAoaGFzQm9yZGVyICYmICghaGFzUGFkZGluZyB8fCBi
b3JkZXJRdWFkICE9IHBhZGRpbmdRdWFkKSkgeworICAgICAgICBkcmF3T3V0bGluZWRRdWFkV2l0
aENsaXAoY29udGV4dCwgYm9yZGVyUXVhZCwgcGFkZGluZ1F1YWQsIGhpZ2hsaWdodENvbmZpZy5i
b3JkZXIpOworICAgICAgICBjbGlwUXVhZCA9IHBhZGRpbmdRdWFkOworICAgIH0KKyAgICBpZiAo
aGFzUGFkZGluZyAmJiAoIWhhc0NvbnRlbnQgfHwgcGFkZGluZ1F1YWQgIT0gY29udGVudFF1YWQp
KSB7CisgICAgICAgIGRyYXdPdXRsaW5lZFF1YWRXaXRoQ2xpcChjb250ZXh0LCBwYWRkaW5nUXVh
ZCwgY29udGVudFF1YWQsIGhpZ2hsaWdodENvbmZpZy5wYWRkaW5nKTsKKyAgICAgICAgY2xpcFF1
YWQgPSBjb250ZW50UXVhZDsKKyAgICB9CisgICAgaWYgKGhhc0NvbnRlbnQpCisgICAgICAgIGRy
YXdPdXRsaW5lZFF1YWQoY29udGV4dCwgY29udGVudFF1YWQsIGhpZ2hsaWdodENvbmZpZy5jb250
ZW50LCBoaWdobGlnaHRDb25maWcuY29udGVudE91dGxpbmUpOworfQorCit2b2lkIGRyYXdIaWdo
bGlnaHRGb3JTVkdSZW5kZXJlcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFZlY3Rv
cjxGbG9hdFF1YWQ+JiBhYnNvbHV0ZVF1YWRzLCBjb25zdCBIaWdobGlnaHRDb25maWcmIGhpZ2hs
aWdodENvbmZpZykKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFic29sdXRlUXVhZHMu
c2l6ZSgpOyArK2kpCisgICAgICAgIGRyYXdPdXRsaW5lZFF1YWQoY29udGV4dCwgYWJzb2x1dGVR
dWFkc1tpXSwgaGlnaGxpZ2h0Q29uZmlnLmNvbnRlbnQsIENvbG9yOjp0cmFuc3BhcmVudCk7Cit9
CisKK2ludCBkcmF3U3Vic3RyaW5nKGNvbnN0IFRleHRSdW4mIGdsb2JhbFRleHRSdW4sIGludCBv
ZmZzZXQsIGludCBsZW5ndGgsIGNvbnN0IENvbG9yJiB0ZXh0Q29sb3IsIGNvbnN0IEZvbnQmIGZv
bnQsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgdGl0bGVSZWN0
KQoreworICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKHRleHRDb2xvciwgQ29sb3JTcGFjZURldmlj
ZVJHQik7CisgICAgY29udGV4dC5kcmF3VGV4dChmb250LCBnbG9iYWxUZXh0UnVuLCBJbnRQb2lu
dCh0aXRsZVJlY3QucGl4ZWxTbmFwcGVkWCgpICsgcmVjdEluZmxhdGVQeCwgdGl0bGVSZWN0LnBp
eGVsU25hcHBlZFkoKSArIGZvbnQuZm9udE1ldHJpY3MoKS5oZWlnaHQoKSksIG9mZnNldCwgb2Zm
c2V0ICsgbGVuZ3RoKTsKKyAgICByZXR1cm4gb2Zmc2V0ICsgbGVuZ3RoOworfQorCitmbG9hdCBj
YWxjdWxhdGVBcnJvd1RpcFgoY29uc3QgTGF5b3V0UmVjdCYgYW5jaG9yQm94LCBjb25zdCBMYXlv
dXRSZWN0JiB0aXRsZVJlY3QpCit7CisgICAgY29uc3Qgc3RhdGljIGludCBhbmNob3JUaXBPZmZz
ZXRQeCA9IDI7CisKKyAgICBpbnQgbWluWCA9IHRpdGxlUmVjdC54KCkgKyBhcnJvd0hhbGZXaWR0
aDsKKyAgICBpbnQgbWF4WCA9IHRpdGxlUmVjdC5tYXhYKCkgLSBhcnJvd0hhbGZXaWR0aDsKKyAg
ICBpbnQgYW5jaG9yWCA9IGFuY2hvckJveC54KCk7CisgICAgaW50IGFuY2hvck1heFggPSBhbmNo
b3JCb3gubWF4WCgpOworCisgICAgaW50IHggPSB0aXRsZVJlY3QueCgpICsgYXJyb3dUaXBPZmZz
ZXQ7IC8vIERlZmF1bHQgdG9vbHRpcCBwb3NpdGlvbi4KKyAgICBpZiAoeCA8IGFuY2hvclgpCisg
ICAgICAgIHggPSBhbmNob3JYICsgYW5jaG9yVGlwT2Zmc2V0UHg7CisgICAgZWxzZSBpZiAoeCA+
IGFuY2hvck1heFgpCisgICAgICAgIHggPSBhbmNob3JNYXhYIC0gYW5jaG9yVGlwT2Zmc2V0UHg7
CisKKyAgICBpZiAoeCA8IG1pblgpCisgICAgICAgIHggPSBtaW5YOworICAgIGVsc2UgaWYgKHgg
PiBtYXhYKQorICAgICAgICB4ID0gbWF4WDsKKworICAgIHJldHVybiB4OworfQorCit2b2lkIHNl
dFVwRm9udERlc2NyaXB0aW9uKEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBXZWJD
b3JlOjpTZXR0aW5ncyogc2V0dGluZ3MpCit7CisjZGVmaW5lIFRPT0xUSVBfRk9OVF9GQU1JTElF
UyhzaXplLCAuLi4pIFwKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCB0b29sdGlwRm9udEZhY2VTaXpl
ID0gc2l6ZTtcCitzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nKiB0b29sdGlwRm9udEZhY2Vbc2l6
ZV0gPSB7IF9fVkFfQVJHU19fIH07CisKKyNpZiBPUyhXSU5ET1dTKQorVE9PTFRJUF9GT05UX0ZB
TUlMSUVTKDIsIG5ldyBBdG9taWNTdHJpbmcoIkNvbnNvbGFzIiksIG5ldyBBdG9taWNTdHJpbmco
Ikx1Y2lkYSBDb25zb2xlIikpCisjZWxpZiBPUyhNQUNfT1NfWCkKK1RPT0xUSVBfRk9OVF9GQU1J
TElFUygyLCBuZXcgQXRvbWljU3RyaW5nKCJNZW5sbyIpLCBuZXcgQXRvbWljU3RyaW5nKCJNb25h
Y28iKSkKKyNlbGlmIE9TKFVOSVgpCitUT09MVElQX0ZPTlRfRkFNSUxJRVMoMSwgbmV3IEF0b21p
Y1N0cmluZygiZGVqYXZ1IHNhbnMgbW9ubyIpKQorI2VuZGlmCisvLyBJbiB0aGUgZGVmYXVsdCBj
YXNlLCB3ZSBnZXQgdGhlIHNldHRpbmdzLXByb3ZpZGVkIG1vbm9zcGFjZSBmb250LgorCisjdW5k
ZWYgVE9PTFRJUF9GT05UX0ZBTUlMSUVTCisKKyAgICBmb250RGVzY3JpcHRpb24uc2V0UmVuZGVy
aW5nTW9kZShzZXR0aW5ncy0+Zm9udFJlbmRlcmluZ01vZGUoKSk7CisgICAgZm9udERlc2NyaXB0
aW9uLnNldENvbXB1dGVkU2l6ZShmb250SGVpZ2h0UHgpOworCisgICAgY29uc3QgQXRvbWljU3Ry
aW5nJiBmaXhlZEZvbnRGYW1pbHkgPSBzZXR0aW5ncy0+Zml4ZWRGb250RmFtaWx5KCk7CisgICAg
aWYgKCFmaXhlZEZvbnRGYW1pbHkuaXNFbXB0eSgpKSB7CisgICAgICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRHZW5lcmljRmFtaWx5KEZvbnREZXNjcmlwdGlvbjo6TW9ub3NwYWNlRmFtaWx5KTsKKyAg
ICAgICAgRm9udEZhbWlseSogY3VycmVudEZhbWlseSA9IDA7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCB0b29sdGlwRm9udEZhY2VTaXplOyArK2kpIHsKKyAgICAgICAgICAgIGlm
ICghY3VycmVudEZhbWlseSkgeworICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5maXJz
dEZhbWlseSgpLnNldEZhbWlseSgqdG9vbHRpcEZvbnRGYWNlW2ldKTsKKyAgICAgICAgICAgICAg
ICBmb250RGVzY3JpcHRpb24uZmlyc3RGYW1pbHkoKS5hcHBlbmRGYW1pbHkoMCk7CisgICAgICAg
ICAgICAgICAgY3VycmVudEZhbWlseSA9ICZmb250RGVzY3JpcHRpb24uZmlyc3RGYW1pbHkoKTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgUmVmUHRyPFNoYXJlZEZvbnRG
YW1pbHk+IG5ld0ZhbWlseSA9IFNoYXJlZEZvbnRGYW1pbHk6OmNyZWF0ZSgpOworICAgICAgICAg
ICAgICAgIG5ld0ZhbWlseS0+c2V0RmFtaWx5KCp0b29sdGlwRm9udEZhY2VbaV0pOworICAgICAg
ICAgICAgICAgIGN1cnJlbnRGYW1pbHktPmFwcGVuZEZhbWlseShuZXdGYW1pbHkpOworICAgICAg
ICAgICAgICAgIGN1cnJlbnRGYW1pbHkgPSBuZXdGYW1pbHkuZ2V0KCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgUmVmUHRyPFNoYXJlZEZvbnRGYW1pbHk+IG5ld0ZhbWlseSA9
IFNoYXJlZEZvbnRGYW1pbHk6OmNyZWF0ZSgpOworICAgICAgICBuZXdGYW1pbHktPnNldEZhbWls
eShmaXhlZEZvbnRGYW1pbHkpOworICAgICAgICBjdXJyZW50RmFtaWx5LT5hcHBlbmRGYW1pbHko
bmV3RmFtaWx5KTsKKyAgICAgICAgY3VycmVudEZhbWlseSA9IG5ld0ZhbWlseS5nZXQoKTsKKyAg
ICB9Cit9CisKK3ZvaWQgZHJhd0VsZW1lbnRUaXRsZShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IE5vZGUqIG5vZGUsIFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IEludFJlY3QmIGJvdW5k
aW5nQm94LCBjb25zdCBJbnRSZWN0JiBhbmNob3JCb3gsIGNvbnN0IEZsb2F0UmVjdCYgdmlzaWJs
ZVJlY3QsIFdlYkNvcmU6OlNldHRpbmdzKiBzZXR0aW5ncykKK3sKKyAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKENvbG9yLCBiYWNrZ3JvdW5kQ29sb3IsICgyNTUsIDI1NSwgMTk0KSk7CisgICAgREVG
SU5FX1NUQVRJQ19MT0NBTChDb2xvciwgdGFnQ29sb3IsICgxMzYsIDE4LCAxMjgpKTsgLy8gU2Ft
ZSBhcyAud2Via2l0LWh0bWwtdGFnLgorICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ29sb3IsIGF0
dHJDb2xvciwgKDI2LCAyNiwgMTY2KSk7IC8vIFNhbWUgYXMgLndlYmtpdC1odG1sLWF0dHJpYnV0
ZS12YWx1ZS4KKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKENvbG9yLCBub3JtYWxDb2xvciwgKENv
bG9yOjpibGFjaykpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ29sb3IsIHB4QW5kQm9yZGVy
Q29sb3IsICgxMjgsIDEyOCwgMTI4KSk7CisKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmlu
ZywgcHhTdHJpbmcsICgicHgiKSk7CisgICAgY29uc3Qgc3RhdGljIFVDaGFyIHRpbWVzVUNoYXJb
XSA9IHsgMHgwMDIwLCAweDAwRDcsIDB4MDAyMCwgMCB9OworICAgIERFRklORV9TVEFUSUNfTE9D
QUwoU3RyaW5nLCB0aW1lc1N0cmluZywgKHRpbWVzVUNoYXIpKTsgLy8gJnRpbWVzOyBzdHJpbmcK
KworICAgIEZvbnRDYWNoZVB1cmdlUHJldmVudGVyIGZvbnRDYWNoZVB1cmdlUHJldmVudGVyOwor
CisgICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKTsKKyAg
ICBib29sIGlzWEhUTUwgPSBlbGVtZW50LT5kb2N1bWVudCgpLT5pc1hIVE1MRG9jdW1lbnQoKTsK
KyAgICBTdHJpbmdCdWlsZGVyIG5vZGVUaXRsZTsKKyAgICBub2RlVGl0bGUuYXBwZW5kKGlzWEhU
TUwgPyBlbGVtZW50LT5ub2RlTmFtZSgpIDogZWxlbWVudC0+bm9kZU5hbWUoKS5sb3dlcigpKTsK
KyAgICB1bnNpZ25lZCB0YWdOYW1lTGVuZ3RoID0gbm9kZVRpdGxlLmxlbmd0aCgpOworCisgICAg
Y29uc3QgQXRvbWljU3RyaW5nJiBpZFZhbHVlID0gZWxlbWVudC0+Z2V0SWRBdHRyaWJ1dGUoKTsK
KyAgICB1bnNpZ25lZCBpZFN0cmluZ0xlbmd0aCA9IDA7CisgICAgU3RyaW5nIGlkU3RyaW5nOwor
ICAgIGlmICghaWRWYWx1ZS5pc051bGwoKSAmJiAhaWRWYWx1ZS5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgbm9kZVRpdGxlLmFwcGVuZCgiIyIpOworICAgICAgICBub2RlVGl0bGUuYXBwZW5kKGlkVmFs
dWUpOworICAgICAgICBpZFN0cmluZ0xlbmd0aCA9IDEgKyBpZFZhbHVlLmxlbmd0aCgpOworICAg
IH0KKworICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiB1c2VkQ2xhc3NOYW1lczsKKyAgICB1bnNp
Z25lZCBjbGFzc2VzU3RyaW5nTGVuZ3RoID0gMDsKKyAgICBpZiAoZWxlbWVudC0+aGFzQ2xhc3Mo
KSAmJiBlbGVtZW50LT5pc1N0eWxlZEVsZW1lbnQoKSkgeworICAgICAgICBjb25zdCBTcGFjZVNw
bGl0U3RyaW5nJiBjbGFzc05hbWVzU3RyaW5nID0gc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+
KGVsZW1lbnQpLT5jbGFzc05hbWVzKCk7CisgICAgICAgIHNpemVfdCBjbGFzc05hbWVDb3VudCA9
IGNsYXNzTmFtZXNTdHJpbmcuc2l6ZSgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGNsYXNzTmFtZUNvdW50OyArK2kpIHsKKyAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
Y2xhc3NOYW1lID0gY2xhc3NOYW1lc1N0cmluZ1tpXTsKKyAgICAgICAgICAgIGlmICh1c2VkQ2xh
c3NOYW1lcy5jb250YWlucyhjbGFzc05hbWUpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgdXNlZENsYXNzTmFtZXMuYWRkKGNsYXNzTmFtZSk7CisgICAgICAgICAgICBu
b2RlVGl0bGUuYXBwZW5kKCIuIik7CisgICAgICAgICAgICBub2RlVGl0bGUuYXBwZW5kKGNsYXNz
TmFtZSk7CisgICAgICAgICAgICBjbGFzc2VzU3RyaW5nTGVuZ3RoICs9IDEgKyBjbGFzc05hbWUu
bGVuZ3RoKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCog
bW9kZWxPYmplY3QgPSByZW5kZXJlci0+aXNCb3hNb2RlbE9iamVjdCgpID8gdG9SZW5kZXJCb3hN
b2RlbE9iamVjdChyZW5kZXJlcikgOiAwOworCisgICAgU3RyaW5nIHdpZHRoTnVtYmVyUGFydCA9
ICIgIiArIFN0cmluZzo6bnVtYmVyKG1vZGVsT2JqZWN0ID8gYWRqdXN0Rm9yQWJzb2x1dGVab29t
KG1vZGVsT2JqZWN0LT5waXhlbFNuYXBwZWRPZmZzZXRXaWR0aCgpLCBtb2RlbE9iamVjdCkgOiBi
b3VuZGluZ0JveC53aWR0aCgpKTsKKyAgICBub2RlVGl0bGUuYXBwZW5kKHdpZHRoTnVtYmVyUGFy
dCk7CisgICAgbm9kZVRpdGxlLmFwcGVuZChweFN0cmluZyk7CisgICAgbm9kZVRpdGxlLmFwcGVu
ZCh0aW1lc1N0cmluZyk7CisgICAgU3RyaW5nIGhlaWdodE51bWJlclBhcnQgPSBTdHJpbmc6Om51
bWJlcihtb2RlbE9iamVjdCA/IGFkanVzdEZvckFic29sdXRlWm9vbShtb2RlbE9iamVjdC0+cGl4
ZWxTbmFwcGVkT2Zmc2V0SGVpZ2h0KCksIG1vZGVsT2JqZWN0KSA6IGJvdW5kaW5nQm94LmhlaWdo
dCgpKTsKKyAgICBub2RlVGl0bGUuYXBwZW5kKGhlaWdodE51bWJlclBhcnQpOworICAgIG5vZGVU
aXRsZS5hcHBlbmQocHhTdHJpbmcpOworCisgICAgRm9udERlc2NyaXB0aW9uIGRlc2M7CisgICAg
c2V0VXBGb250RGVzY3JpcHRpb24oZGVzYywgc2V0dGluZ3MpOworICAgIEZvbnQgZm9udCA9IEZv
bnQoZGVzYywgMCwgMCk7CisgICAgZm9udC51cGRhdGUoMCk7CisKKyAgICBUZXh0UnVuIG5vZGVU
aXRsZVJ1bihub2RlVGl0bGUudG9TdHJpbmcoKSk7CisgICAgSW50UG9pbnQgdGl0bGVCYXNlUG9p
bnQgPSBJbnRQb2ludChhbmNob3JCb3gueCgpLCBhbmNob3JCb3gubWF4WSgpIC0gMSk7CisgICAg
dGl0bGVCYXNlUG9pbnQubW92ZShyZWN0SW5mbGF0ZVB4LCByZWN0SW5mbGF0ZVB4KTsKKyAgICBJ
bnRSZWN0IHRpdGxlUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoZm9udC5zZWxlY3Rpb25SZWN0Rm9y
VGV4dChub2RlVGl0bGVSdW4sIHRpdGxlQmFzZVBvaW50LCBmb250SGVpZ2h0UHgpKTsKKyAgICB0
aXRsZVJlY3QuaW5mbGF0ZShyZWN0SW5mbGF0ZVB4KTsKKworICAgIC8vIFRoZSBpbml0aWFsIG9m
ZnNldHMgbmVlZGVkIHRvIGNvbXBlbnNhdGUgZm9yIGEgMXB4LXRoaWNrIGJvcmRlciBzdHJva2Ug
KHdoaWNoIGlzIG5vdCBhIHBhcnQgb2YgdGhlIHJlY3RhbmdsZSkuCisgICAgaW50IGR4ID0gLWJv
cmRlcldpZHRoUHg7CisgICAgaW50IGR5ID0gYm9yZGVyV2lkdGhQeDsKKworICAgIC8vIElmIHRo
ZSB0aXAgc3RpY2tzIGJleW9uZCB0aGUgcmlnaHQgb2YgdmlzaWJsZVJlY3QsIHJpZ2h0LWFsaWdu
IHRoZSB0aXAgd2l0aCB0aGUgc2FpZCBib3VuZGFyeS4KKyAgICBpZiAodGl0bGVSZWN0Lm1heFgo
KSArIGR4ID4gdmlzaWJsZVJlY3QubWF4WCgpKQorICAgICAgICBkeCA9IHZpc2libGVSZWN0Lm1h
eFgoKSAtIHRpdGxlUmVjdC5tYXhYKCk7CisKKyAgICAvLyBJZiB0aGUgdGlwIHN0aWNrcyBiZXlv
bmQgdGhlIGxlZnQgb2YgdmlzaWJsZVJlY3QsIGxlZnQtYWxpZ24gdGhlIHRpcCB3aXRoIHRoZSBz
YWlkIGJvdW5kYXJ5LgorICAgIGlmICh0aXRsZVJlY3QueCgpICsgZHggPCB2aXNpYmxlUmVjdC54
KCkpCisgICAgICAgIGR4ID0gdmlzaWJsZVJlY3QueCgpIC0gdGl0bGVSZWN0LngoKSAtIGJvcmRl
cldpZHRoUHg7CisKKyAgICAvLyBJZiB0aGUgdGlwIHN0aWNrcyBiZXlvbmQgdGhlIGJvdHRvbSBv
ZiB2aXNpYmxlUmVjdCwgc2hvdyB0aGUgdGlwIGF0IHRvcCBvZiBib3VuZGluZyBib3guCisgICAg
aWYgKHRpdGxlUmVjdC5tYXhZKCkgKyBkeSA+IHZpc2libGVSZWN0Lm1heFkoKSkgeworICAgICAg
ICBkeSA9IGFuY2hvckJveC55KCkgLSB0aXRsZVJlY3QubWF4WSgpIC0gYm9yZGVyV2lkdGhQeDsK
KyAgICAgICAgLy8gSWYgdGhlIHRpcCBzdGlsbCBzdGlja3MgYmV5b25kIHRoZSBib3R0b20gb2Yg
dmlzaWJsZVJlY3QsIGJvdHRvbS1hbGlnbiB0aGUgdGlwIHdpdGggdGhlIHNhaWQgYm91bmRhcnku
CisgICAgICAgIGlmICh0aXRsZVJlY3QubWF4WSgpICsgZHkgPiB2aXNpYmxlUmVjdC5tYXhZKCkp
CisgICAgICAgICAgICBkeSA9IHZpc2libGVSZWN0Lm1heFkoKSAtIHRpdGxlUmVjdC5tYXhZKCk7
CisgICAgfQorCisgICAgLy8gSWYgdGhlIHRpcCBzdGlja3MgYmV5b25kIHRoZSB0b3Agb2Ygdmlz
aWJsZVJlY3QsIHNob3cgdGhlIHRpcCBhdCB0b3Agb2YgdmlzaWJsZVJlY3QuCisgICAgaWYgKHRp
dGxlUmVjdC55KCkgKyBkeSA8IHZpc2libGVSZWN0LnkoKSkKKyAgICAgICAgZHkgPSB2aXNpYmxl
UmVjdC55KCkgLSB0aXRsZVJlY3QueSgpICsgYm9yZGVyV2lkdGhQeDsKKworICAgIHRpdGxlUmVj
dC5tb3ZlKGR4LCBkeSk7CisKKyAgICBib29sIGlzQXJyb3dBdFRvcCA9IHRpdGxlUmVjdC55KCkg
PiBhbmNob3JCb3gueSgpOworICAgIHRpdGxlUmVjdC5tb3ZlKDAsIHRvb2x0aXBQYWRkaW5nICog
KGlzQXJyb3dBdFRvcCA/IDEgOiAtMSkpOworCisgICAgeworICAgICAgICBmbG9hdCBhcnJvd1Rp
cFggPSBjYWxjdWxhdGVBcnJvd1RpcFgoYW5jaG9yQm94LCB0aXRsZVJlY3QpOworICAgICAgICBp
bnQgYXJyb3dCYXNlWSA9IGlzQXJyb3dBdFRvcCA/IHRpdGxlUmVjdC55KCkgOiB0aXRsZVJlY3Qu
bWF4WSgpOworICAgICAgICBpbnQgYXJyb3dPcHBvc2l0ZVkgPSBpc0Fycm93QXRUb3AgPyB0aXRs
ZVJlY3QubWF4WSgpIDogdGl0bGVSZWN0LnkoKTsKKworICAgICAgICBGbG9hdFBvaW50IHBvaW50
c1s4XTsKKyAgICAgICAgcG9pbnRzWzBdID0gRmxvYXRQb2ludChhcnJvd1RpcFggLSBhcnJvd0hh
bGZXaWR0aCwgYXJyb3dCYXNlWSk7CisgICAgICAgIHBvaW50c1sxXSA9IEZsb2F0UG9pbnQoYXJy
b3dUaXBYLCBhcnJvd0Jhc2VZICsgYXJyb3dIZWlnaHQgKiAoaXNBcnJvd0F0VG9wID8gLTEgOiAx
KSk7CisgICAgICAgIHBvaW50c1syXSA9IEZsb2F0UG9pbnQoYXJyb3dUaXBYICsgYXJyb3dIYWxm
V2lkdGgsIGFycm93QmFzZVkpOworICAgICAgICBwb2ludHNbM10gPSBGbG9hdFBvaW50KHRpdGxl
UmVjdC5tYXhYKCksIGFycm93QmFzZVkpOworICAgICAgICBwb2ludHNbNF0gPSBGbG9hdFBvaW50
KHRpdGxlUmVjdC5tYXhYKCksIGFycm93T3Bwb3NpdGVZKTsKKyAgICAgICAgcG9pbnRzWzVdID0g
RmxvYXRQb2ludCh0aXRsZVJlY3QueCgpLCBhcnJvd09wcG9zaXRlWSk7CisgICAgICAgIHBvaW50
c1s2XSA9IEZsb2F0UG9pbnQodGl0bGVSZWN0LngoKSwgYXJyb3dCYXNlWSk7CisgICAgICAgIHBv
aW50c1s3XSA9IHBvaW50c1swXTsKKworICAgICAgICBQYXRoIHBhdGg7CisgICAgICAgIHBhdGgu
bW92ZVRvKHBvaW50c1swXSk7CisgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgODsgKytpKQor
ICAgICAgICAgICAgcGF0aC5hZGRMaW5lVG8ocG9pbnRzW2ldKTsKKworICAgICAgICBjb250ZXh0
LnNhdmUoKTsKKyAgICAgICAgY29udGV4dC50cmFuc2xhdGUoMC41ZiwgMC41Zik7CisgICAgICAg
IGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IocHhBbmRCb3JkZXJDb2xvciwgQ29sb3JTcGFjZURldmlj
ZVJHQik7CisgICAgICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKGJhY2tncm91bmRDb2xvciwgQ29s
b3JTcGFjZURldmljZVJHQik7CisgICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKGJv
cmRlcldpZHRoUHgpOworICAgICAgICBjb250ZXh0LmZpbGxQYXRoKHBhdGgpOworICAgICAgICBj
b250ZXh0LnN0cm9rZVBhdGgocGF0aCk7CisgICAgICAgIGNvbnRleHQucmVzdG9yZSgpOworICAg
IH0KKworICAgIGludCBjdXJyZW50UG9zID0gMDsKKyAgICBjdXJyZW50UG9zID0gZHJhd1N1YnN0
cmluZyhub2RlVGl0bGVSdW4sIGN1cnJlbnRQb3MsIHRhZ05hbWVMZW5ndGgsIHRhZ0NvbG9yLCBm
b250LCBjb250ZXh0LCB0aXRsZVJlY3QpOworICAgIGlmIChpZFN0cmluZ0xlbmd0aCkKKyAgICAg
ICAgY3VycmVudFBvcyA9IGRyYXdTdWJzdHJpbmcobm9kZVRpdGxlUnVuLCBjdXJyZW50UG9zLCBp
ZFN0cmluZ0xlbmd0aCwgYXR0ckNvbG9yLCBmb250LCBjb250ZXh0LCB0aXRsZVJlY3QpOworICAg
IGlmIChjbGFzc2VzU3RyaW5nTGVuZ3RoKQorICAgICAgICBjdXJyZW50UG9zID0gZHJhd1N1YnN0
cmluZyhub2RlVGl0bGVSdW4sIGN1cnJlbnRQb3MsIGNsYXNzZXNTdHJpbmdMZW5ndGgsIGF0dHJD
b2xvciwgZm9udCwgY29udGV4dCwgdGl0bGVSZWN0KTsKKyAgICBjdXJyZW50UG9zID0gZHJhd1N1
YnN0cmluZyhub2RlVGl0bGVSdW4sIGN1cnJlbnRQb3MsIHdpZHRoTnVtYmVyUGFydC5sZW5ndGgo
KSwgbm9ybWFsQ29sb3IsIGZvbnQsIGNvbnRleHQsIHRpdGxlUmVjdCk7CisgICAgY3VycmVudFBv
cyA9IGRyYXdTdWJzdHJpbmcobm9kZVRpdGxlUnVuLCBjdXJyZW50UG9zLCBweFN0cmluZy5sZW5n
dGgoKSArIHRpbWVzU3RyaW5nLmxlbmd0aCgpLCBweEFuZEJvcmRlckNvbG9yLCBmb250LCBjb250
ZXh0LCB0aXRsZVJlY3QpOworICAgIGN1cnJlbnRQb3MgPSBkcmF3U3Vic3RyaW5nKG5vZGVUaXRs
ZVJ1biwgY3VycmVudFBvcywgaGVpZ2h0TnVtYmVyUGFydC5sZW5ndGgoKSwgbm9ybWFsQ29sb3Is
IGZvbnQsIGNvbnRleHQsIHRpdGxlUmVjdCk7CisgICAgZHJhd1N1YnN0cmluZyhub2RlVGl0bGVS
dW4sIGN1cnJlbnRQb3MsIHB4U3RyaW5nLmxlbmd0aCgpLCBweEFuZEJvcmRlckNvbG9yLCBmb250
LCBjb250ZXh0LCB0aXRsZVJlY3QpOworfQorCitzdGF0aWMgdm9pZCBjb250ZW50c1F1YWRUb1Bh
Z2UoY29uc3QgRnJhbWVWaWV3KiBtYWluVmlldywgY29uc3QgRnJhbWVWaWV3KiB2aWV3LCBGbG9h
dFF1YWQmIHF1YWQpCit7CisgICAgcXVhZC5zZXRQMSh2aWV3LT5jb250ZW50c1RvUm9vdFZpZXco
cm91bmRlZEludFBvaW50KHF1YWQucDEoKSkpKTsKKyAgICBxdWFkLnNldFAyKHZpZXctPmNvbnRl
bnRzVG9Sb290Vmlldyhyb3VuZGVkSW50UG9pbnQocXVhZC5wMigpKSkpOworICAgIHF1YWQuc2V0
UDModmlldy0+Y29udGVudHNUb1Jvb3RWaWV3KHJvdW5kZWRJbnRQb2ludChxdWFkLnAzKCkpKSk7
CisgICAgcXVhZC5zZXRQNCh2aWV3LT5jb250ZW50c1RvUm9vdFZpZXcocm91bmRlZEludFBvaW50
KHF1YWQucDQoKSkpKTsKKyAgICBxdWFkICs9IG1haW5WaWV3LT5zY3JvbGxPZmZzZXQoKTsKK30K
Kworc3RhdGljIHZvaWQgZ2V0T3JEcmF3Tm9kZUhpZ2hsaWdodChHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIE5vZGUqIG5vZGUsIGNvbnN0IEhpZ2hsaWdodENvbmZpZyYgaGlnaGxpZ2h0Q29uZmln
LCBIaWdobGlnaHQqIGhpZ2hsaWdodCkKK3sKKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0g
bm9kZS0+cmVuZGVyZXIoKTsKKyAgICBGcmFtZSogY29udGFpbmluZ0ZyYW1lID0gbm9kZS0+ZG9j
dW1lbnQoKS0+ZnJhbWUoKTsKKworICAgIGlmICghcmVuZGVyZXIgfHwgIWNvbnRhaW5pbmdGcmFt
ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRnJhbWVWaWV3KiBjb250YWluaW5nVmlldyA9IGNv
bnRhaW5pbmdGcmFtZS0+dmlldygpOworICAgIEZyYW1lVmlldyogbWFpblZpZXcgPSBjb250YWlu
aW5nRnJhbWUtPnBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKTsKKyAgICBJbnRSZWN0IGJvdW5k
aW5nQm94ID0gcGl4ZWxTbmFwcGVkSW50UmVjdChjb250YWluaW5nVmlldy0+Y29udGVudHNUb1Jv
b3RWaWV3KHJlbmRlcmVyLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgpKSk7CisgICAgYm91bmRp
bmdCb3gubW92ZShtYWluVmlldy0+c2Nyb2xsT2Zmc2V0KCkpOworICAgIEludFJlY3QgdGl0bGVB
bmNob3JCb3ggPSBib3VuZGluZ0JveDsKKworICAgIEZsb2F0UmVjdCB2aXNpYmxlUmVjdCA9IG1h
aW5WaWV3LT52aXNpYmxlQ29udGVudFJlY3QoKTsKKyAgICAvLyBEb24ndCB0cmFuc2xhdGUgdGhl
IGNvbnRleHQgaWYgdGhlIGZyYW1lIGlzIHJlbmRlcmVkIGluIHBhZ2UgY29vcmRpbmF0ZXMuCisg
ICAgaWYgKGNvbnRleHQgJiYgIW1haW5WaWV3LT5kZWxlZ2F0ZXNTY3JvbGxpbmcoKSkKKyAgICAg
ICAgY29udGV4dC0+dHJhbnNsYXRlKC12aXNpYmxlUmVjdC54KCksIC12aXNpYmxlUmVjdC55KCkp
OworCisgICAgLy8gUmVuZGVyU1ZHUm9vdCBzaG91bGQgYmUgaGlnaGxpZ2h0ZWQgdGhyb3VnaCB0
aGUgaXNCb3goKSBjb2RlIHBhdGgsIGFsbCBvdGhlciBTVkcgZWxlbWVudHMgc2hvdWxkIGp1c3Qg
ZHVtcCB0aGVpciBhYnNvbHV0ZVF1YWRzKCkuCisjaWYgRU5BQkxFKFNWRykKKyAgICBib29sIGlz
U1ZHUmVuZGVyZXIgPSByZW5kZXJlci0+bm9kZSgpICYmIHJlbmRlcmVyLT5ub2RlKCktPmlzU1ZH
RWxlbWVudCgpICYmICFyZW5kZXJlci0+aXNTVkdSb290KCk7CisjZWxzZQorICAgIGJvb2wgaXNT
VkdSZW5kZXJlciA9IGZhbHNlOworI2VuZGlmCisKKyAgICBpZiAoaXNTVkdSZW5kZXJlcikgewor
ICAgICAgICBoaWdobGlnaHQtPnR5cGUgPSBIaWdobGlnaHRUeXBlUmVjdHM7CisgICAgICAgIHJl
bmRlcmVyLT5hYnNvbHV0ZVF1YWRzKGhpZ2hsaWdodC0+cXVhZHMpOworICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGhpZ2hsaWdodC0+cXVhZHMuc2l6ZSgpOyArK2kpCisgICAgICAgICAg
ICBjb250ZW50c1F1YWRUb1BhZ2UobWFpblZpZXcsIGNvbnRhaW5pbmdWaWV3LCBoaWdobGlnaHQt
PnF1YWRzW2ldKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgICAgIGRyYXdIaWdo
bGlnaHRGb3JTVkdSZW5kZXJlcigqY29udGV4dCwgaGlnaGxpZ2h0LT5xdWFkcywgaGlnaGxpZ2h0
Q29uZmlnKTsKKyAgICB9IGVsc2UgaWYgKHJlbmRlcmVyLT5pc0JveCgpIHx8IHJlbmRlcmVyLT5p
c1JlbmRlcklubGluZSgpKSB7CisgICAgICAgIExheW91dFJlY3QgY29udGVudEJveDsKKyAgICAg
ICAgTGF5b3V0UmVjdCBwYWRkaW5nQm94OworICAgICAgICBMYXlvdXRSZWN0IGJvcmRlckJveDsK
KyAgICAgICAgTGF5b3V0UmVjdCBtYXJnaW5Cb3g7CisKKyAgICAgICAgaWYgKHJlbmRlcmVyLT5p
c0JveCgpKSB7CisgICAgICAgICAgICBSZW5kZXJCb3gqIHJlbmRlckJveCA9IHRvUmVuZGVyQm94
KHJlbmRlcmVyKTsKKworICAgICAgICAgICAgLy8gUmVuZGVyQm94IHJldHVybnMgdGhlICJwdXJl
IiBjb250ZW50IGFyZWEgYm94LCBleGNsdXNpdmUgb2YgdGhlIHNjcm9sbGJhcnMgKGlmIHByZXNl
bnQpLCB3aGljaCBhbHNvIGNvdW50IHRvd2FyZHMgdGhlIGNvbnRlbnQgYXJlYSBpbiBDU1MuCisg
ICAgICAgICAgICBjb250ZW50Qm94ID0gcmVuZGVyQm94LT5jb250ZW50Qm94UmVjdCgpOworICAg
ICAgICAgICAgY29udGVudEJveC5zZXRXaWR0aChjb250ZW50Qm94LndpZHRoKCkgKyByZW5kZXJC
b3gtPnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKSk7CisgICAgICAgICAgICBjb250ZW50Qm94LnNl
dEhlaWdodChjb250ZW50Qm94LmhlaWdodCgpICsgcmVuZGVyQm94LT5ob3Jpem9udGFsU2Nyb2xs
YmFySGVpZ2h0KCkpOworCisgICAgICAgICAgICBwYWRkaW5nQm94ID0gTGF5b3V0UmVjdChjb250
ZW50Qm94LngoKSAtIHJlbmRlckJveC0+cGFkZGluZ0xlZnQoKSwgY29udGVudEJveC55KCkgLSBy
ZW5kZXJCb3gtPnBhZGRpbmdUb3AoKSwKKyAgICAgICAgICAgICAgICAgICAgY29udGVudEJveC53
aWR0aCgpICsgcmVuZGVyQm94LT5wYWRkaW5nTGVmdCgpICsgcmVuZGVyQm94LT5wYWRkaW5nUmln
aHQoKSwgY29udGVudEJveC5oZWlnaHQoKSArIHJlbmRlckJveC0+cGFkZGluZ1RvcCgpICsgcmVu
ZGVyQm94LT5wYWRkaW5nQm90dG9tKCkpOworICAgICAgICAgICAgYm9yZGVyQm94ID0gTGF5b3V0
UmVjdChwYWRkaW5nQm94LngoKSAtIHJlbmRlckJveC0+Ym9yZGVyTGVmdCgpLCBwYWRkaW5nQm94
LnkoKSAtIHJlbmRlckJveC0+Ym9yZGVyVG9wKCksCisgICAgICAgICAgICAgICAgICAgIHBhZGRp
bmdCb3gud2lkdGgoKSArIHJlbmRlckJveC0+Ym9yZGVyTGVmdCgpICsgcmVuZGVyQm94LT5ib3Jk
ZXJSaWdodCgpLCBwYWRkaW5nQm94LmhlaWdodCgpICsgcmVuZGVyQm94LT5ib3JkZXJUb3AoKSAr
IHJlbmRlckJveC0+Ym9yZGVyQm90dG9tKCkpOworICAgICAgICAgICAgbWFyZ2luQm94ID0gTGF5
b3V0UmVjdChib3JkZXJCb3gueCgpIC0gcmVuZGVyQm94LT5tYXJnaW5MZWZ0KCksIGJvcmRlckJv
eC55KCkgLSByZW5kZXJCb3gtPm1hcmdpblRvcCgpLAorICAgICAgICAgICAgICAgICAgICBib3Jk
ZXJCb3gud2lkdGgoKSArIHJlbmRlckJveC0+bWFyZ2luV2lkdGgoKSwgYm9yZGVyQm94LmhlaWdo
dCgpICsgcmVuZGVyQm94LT5tYXJnaW5IZWlnaHQoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBSZW5kZXJJbmxpbmUqIHJlbmRlcklubGluZSA9IHRvUmVuZGVySW5saW5lKHJlbmRl
cmVyKTsKKworICAgICAgICAgICAgLy8gUmVuZGVySW5saW5lJ3MgYm91bmRpbmcgYm94IGluY2x1
ZGVzIHBhZGRpbmdzIGFuZCBib3JkZXJzLCBleGNsdWRlcyBtYXJnaW5zLgorICAgICAgICAgICAg
Ym9yZGVyQm94ID0gcmVuZGVySW5saW5lLT5saW5lc0JvdW5kaW5nQm94KCk7CisgICAgICAgICAg
ICBwYWRkaW5nQm94ID0gTGF5b3V0UmVjdChib3JkZXJCb3gueCgpICsgcmVuZGVySW5saW5lLT5i
b3JkZXJMZWZ0KCksIGJvcmRlckJveC55KCkgKyByZW5kZXJJbmxpbmUtPmJvcmRlclRvcCgpLAor
ICAgICAgICAgICAgICAgICAgICBib3JkZXJCb3gud2lkdGgoKSAtIHJlbmRlcklubGluZS0+Ym9y
ZGVyTGVmdCgpIC0gcmVuZGVySW5saW5lLT5ib3JkZXJSaWdodCgpLCBib3JkZXJCb3guaGVpZ2h0
KCkgLSByZW5kZXJJbmxpbmUtPmJvcmRlclRvcCgpIC0gcmVuZGVySW5saW5lLT5ib3JkZXJCb3R0
b20oKSk7CisgICAgICAgICAgICBjb250ZW50Qm94ID0gTGF5b3V0UmVjdChwYWRkaW5nQm94Lngo
KSArIHJlbmRlcklubGluZS0+cGFkZGluZ0xlZnQoKSwgcGFkZGluZ0JveC55KCkgKyByZW5kZXJJ
bmxpbmUtPnBhZGRpbmdUb3AoKSwKKyAgICAgICAgICAgICAgICAgICAgcGFkZGluZ0JveC53aWR0
aCgpIC0gcmVuZGVySW5saW5lLT5wYWRkaW5nTGVmdCgpIC0gcmVuZGVySW5saW5lLT5wYWRkaW5n
UmlnaHQoKSwgcGFkZGluZ0JveC5oZWlnaHQoKSAtIHJlbmRlcklubGluZS0+cGFkZGluZ1RvcCgp
IC0gcmVuZGVySW5saW5lLT5wYWRkaW5nQm90dG9tKCkpOworICAgICAgICAgICAgLy8gSWdub3Jl
IG1hcmdpblRvcCBhbmQgbWFyZ2luQm90dG9tIGZvciBpbmxpbmVzLgorICAgICAgICAgICAgbWFy
Z2luQm94ID0gTGF5b3V0UmVjdChib3JkZXJCb3gueCgpIC0gcmVuZGVySW5saW5lLT5tYXJnaW5M
ZWZ0KCksIGJvcmRlckJveC55KCksCisgICAgICAgICAgICAgICAgICAgIGJvcmRlckJveC53aWR0
aCgpICsgcmVuZGVySW5saW5lLT5tYXJnaW5XaWR0aCgpLCBib3JkZXJCb3guaGVpZ2h0KCkpOwor
ICAgICAgICB9CisKKyAgICAgICAgRmxvYXRRdWFkIGFic0NvbnRlbnRRdWFkID0gcmVuZGVyZXIt
PmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KGNvbnRlbnRCb3gpKTsKKyAgICAgICAgRmxv
YXRRdWFkIGFic1BhZGRpbmdRdWFkID0gcmVuZGVyZXItPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxv
YXRSZWN0KHBhZGRpbmdCb3gpKTsKKyAgICAgICAgRmxvYXRRdWFkIGFic0JvcmRlclF1YWQgPSBy
ZW5kZXJlci0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QoYm9yZGVyQm94KSk7CisgICAg
ICAgIEZsb2F0UXVhZCBhYnNNYXJnaW5RdWFkID0gcmVuZGVyZXItPmxvY2FsVG9BYnNvbHV0ZVF1
YWQoRmxvYXRSZWN0KG1hcmdpbkJveCkpOworCisgICAgICAgIGNvbnRlbnRzUXVhZFRvUGFnZSht
YWluVmlldywgY29udGFpbmluZ1ZpZXcsIGFic0NvbnRlbnRRdWFkKTsKKyAgICAgICAgY29udGVu
dHNRdWFkVG9QYWdlKG1haW5WaWV3LCBjb250YWluaW5nVmlldywgYWJzUGFkZGluZ1F1YWQpOwor
ICAgICAgICBjb250ZW50c1F1YWRUb1BhZ2UobWFpblZpZXcsIGNvbnRhaW5pbmdWaWV3LCBhYnNC
b3JkZXJRdWFkKTsKKyAgICAgICAgY29udGVudHNRdWFkVG9QYWdlKG1haW5WaWV3LCBjb250YWlu
aW5nVmlldywgYWJzTWFyZ2luUXVhZCk7CisKKyAgICAgICAgdGl0bGVBbmNob3JCb3ggPSBhYnNN
YXJnaW5RdWFkLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CisKKyAgICAgICAgaGlnaGxpZ2h0LT50
eXBlID0gSGlnaGxpZ2h0VHlwZU5vZGU7CisgICAgICAgIGhpZ2hsaWdodC0+cXVhZHMuYXBwZW5k
KGFic01hcmdpblF1YWQpOworICAgICAgICBoaWdobGlnaHQtPnF1YWRzLmFwcGVuZChhYnNCb3Jk
ZXJRdWFkKTsKKyAgICAgICAgaGlnaGxpZ2h0LT5xdWFkcy5hcHBlbmQoYWJzUGFkZGluZ1F1YWQp
OworICAgICAgICBoaWdobGlnaHQtPnF1YWRzLmFwcGVuZChhYnNDb250ZW50UXVhZCk7CisKKyAg
ICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgICAgICBkcmF3SGlnaGxpZ2h0Rm9yQm94KCpjb250
ZXh0LCBhYnNDb250ZW50UXVhZCwgYWJzUGFkZGluZ1F1YWQsIGFic0JvcmRlclF1YWQsIGFic01h
cmdpblF1YWQsIGhpZ2hsaWdodENvbmZpZyk7CisgICAgfQorCisgICAgLy8gRHJhdyBub2RlIHRp
dGxlIGlmIG5lY2Vzc2FyeS4KKworICAgIGlmICghbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAoY29udGV4dCAmJiBoaWdobGlnaHRDb25maWcuc2hvd0lu
Zm8pCisgICAgICAgIGRyYXdFbGVtZW50VGl0bGUoKmNvbnRleHQsIG5vZGUsIHJlbmRlcmVyLCBw
aXhlbFNuYXBwZWRJbnRSZWN0KGJvdW5kaW5nQm94KSwgcGl4ZWxTbmFwcGVkSW50UmVjdCh0aXRs
ZUFuY2hvckJveCksIHZpc2libGVSZWN0LCBjb250YWluaW5nRnJhbWUtPnNldHRpbmdzKCkpOwor
fQorCitzdGF0aWMgdm9pZCBnZXRPckRyYXdSZWN0SGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgUGFnZSogcGFnZSwgSW50UmVjdCogcmVjdCwgY29uc3QgSGlnaGxpZ2h0Q29uZmln
JiBoaWdobGlnaHRDb25maWcsIEhpZ2hsaWdodCAqaGlnaGxpZ2h0KQoreworICAgIGlmICghcGFn
ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRmxvYXRSZWN0IGhpZ2hsaWdodFJlY3QoKnJlY3Qp
OworCisgICAgaGlnaGxpZ2h0LT50eXBlID0gSGlnaGxpZ2h0VHlwZVJlY3RzOworICAgIGhpZ2hs
aWdodC0+cXVhZHMuYXBwZW5kKGhpZ2hsaWdodFJlY3QpOworCisgICAgaWYgKGNvbnRleHQpIHsK
KyAgICAgICAgRnJhbWVWaWV3KiB2aWV3ID0gcGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKTsKKyAg
ICAgICAgaWYgKCF2aWV3LT5kZWxlZ2F0ZXNTY3JvbGxpbmcoKSkgeworICAgICAgICAgICAgRmxv
YXRSZWN0IHZpc2libGVSZWN0ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7CisgICAgICAg
ICAgICBjb250ZXh0LT50cmFuc2xhdGUoLXZpc2libGVSZWN0LngoKSwgLXZpc2libGVSZWN0Lnko
KSk7CisgICAgICAgIH0KKworICAgICAgICBkcmF3T3V0bGluZWRRdWFkKCpjb250ZXh0LCBoaWdo
bGlnaHRSZWN0LCBoaWdobGlnaHRDb25maWcuY29udGVudCwgaGlnaGxpZ2h0Q29uZmlnLmNvbnRl
bnRPdXRsaW5lKTsKKyAgICB9Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitJbnNw
ZWN0b3JPdmVybGF5OjpJbnNwZWN0b3JPdmVybGF5KFBhZ2UqIHBhZ2UsIEluc3BlY3RvckNsaWVu
dCogY2xpZW50KQorICAgIDogbV9wYWdlKHBhZ2UpCisgICAgLCBtX2NsaWVudChjbGllbnQpCit7
Cit9CisKK3ZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KQoreworICAgIGRyYXdQYXVzZWRJbkRlYnVnZ2VyKGNvbnRleHQpOworICAgIGRyYXdOb2Rl
SGlnaGxpZ2h0KGNvbnRleHQpOworICAgIGRyYXdSZWN0SGlnaGxpZ2h0KGNvbnRleHQpOworfQor
Cit2b2lkIEluc3BlY3Rvck92ZXJsYXk6OmRyYXdPdXRsaW5lKEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQoreworICAg
IEZsb2F0UmVjdCBvdXRsaW5lUmVjdCA9IHJlY3Q7CisgICAgZHJhd091dGxpbmVkUXVhZChjb250
ZXh0LCBvdXRsaW5lUmVjdCwgQ29sb3IoKSwgY29sb3IpOworfQorCit2b2lkIEluc3BlY3Rvck92
ZXJsYXk6OmdldEhpZ2hsaWdodChIaWdobGlnaHQqIGhpZ2hsaWdodCkgY29uc3QKK3sKKyAgICBp
ZiAoIW1faGlnaGxpZ2h0Tm9kZSAmJiAhbV9oaWdobGlnaHRSZWN0KQorICAgICAgICByZXR1cm47
CisKKyAgICBoaWdobGlnaHQtPnR5cGUgPSBIaWdobGlnaHRUeXBlUmVjdHM7CisgICAgaWYgKG1f
aGlnaGxpZ2h0Tm9kZSkgeworICAgICAgICBoaWdobGlnaHQtPnNldENvbG9ycyhtX25vZGVIaWdo
bGlnaHRDb25maWcpOworICAgICAgICBnZXRPckRyYXdOb2RlSGlnaGxpZ2h0KDAsIG1faGlnaGxp
Z2h0Tm9kZS5nZXQoKSwgbV9ub2RlSGlnaGxpZ2h0Q29uZmlnLCBoaWdobGlnaHQpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGhpZ2hsaWdodC0+c2V0Q29sb3JzKG1fcmVjdEhpZ2hsaWdodENvbmZp
Zyk7CisgICAgICAgIGdldE9yRHJhd1JlY3RIaWdobGlnaHQoMCwgbV9wYWdlLCBtX2hpZ2hsaWdo
dFJlY3QuZ2V0KCksIG1fcmVjdEhpZ2hsaWdodENvbmZpZywgaGlnaGxpZ2h0KTsKKyAgICB9Cit9
CisKK3ZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6c2V0UGF1c2VkSW5EZWJ1Z2dlck1lc3NhZ2UoY29u
c3QgU3RyaW5nKiBtZXNzYWdlKQoreworICAgIG1fcGF1c2VkSW5EZWJ1Z2dlck1lc3NhZ2UgPSBt
ZXNzYWdlID8gKm1lc3NhZ2UgOiBTdHJpbmcoKTsKKyAgICB1cGRhdGUoKTsKK30KKwordm9pZCBJ
bnNwZWN0b3JPdmVybGF5OjpoaWRlSGlnaGxpZ2h0KCkKK3sKKyAgICBtX2hpZ2hsaWdodE5vZGUu
Y2xlYXIoKTsKKyAgICBtX2hpZ2hsaWdodFJlY3QuY2xlYXIoKTsKKyAgICB1cGRhdGUoKTsKK30K
Kwordm9pZCBJbnNwZWN0b3JPdmVybGF5OjpoaWdobGlnaHROb2RlKE5vZGUqIG5vZGUsIGNvbnN0
IEhpZ2hsaWdodENvbmZpZyYgaGlnaGxpZ2h0Q29uZmlnKQoreworICAgIG1fbm9kZUhpZ2hsaWdo
dENvbmZpZyA9IGhpZ2hsaWdodENvbmZpZzsKKyAgICBtX2hpZ2hsaWdodE5vZGUgPSBub2RlOwor
ICAgIHVwZGF0ZSgpOworfQorCit2b2lkIEluc3BlY3Rvck92ZXJsYXk6OmhpZ2hsaWdodFJlY3Qo
UGFzc093blB0cjxJbnRSZWN0PiByZWN0LCBjb25zdCBIaWdobGlnaHRDb25maWcmIGhpZ2hsaWdo
dENvbmZpZykKK3sKKyAgICBtX3JlY3RIaWdobGlnaHRDb25maWcgPSBoaWdobGlnaHRDb25maWc7
CisgICAgbV9oaWdobGlnaHRSZWN0ID0gcmVjdDsKKyAgICB1cGRhdGUoKTsKK30KKworTm9kZSog
SW5zcGVjdG9yT3ZlcmxheTo6aGlnaGxpZ2h0ZWROb2RlKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9oaWdobGlnaHROb2RlLmdldCgpOworfQorCit2b2lkIEluc3BlY3Rvck92ZXJsYXk6OnVwZGF0
ZSgpCit7CisgICAgaWYgKG1faGlnaGxpZ2h0Tm9kZSB8fCBtX2hpZ2hsaWdodFJlY3QgfHwgIW1f
cGF1c2VkSW5EZWJ1Z2dlck1lc3NhZ2UuaXNOdWxsKCkpCisgICAgICAgIG1fY2xpZW50LT5oaWdo
bGlnaHQoKTsKKyAgICBlbHNlCisgICAgICAgIG1fY2xpZW50LT5oaWRlSGlnaGxpZ2h0KCk7Cit9
CisKK3ZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6ZHJhd05vZGVIaWdobGlnaHQoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KQoreworICAgIGlmICghbV9oaWdobGlnaHROb2RlKQorICAgICAgICByZXR1
cm47CisKKyAgICBIaWdobGlnaHQgaGlnaGxpZ2h0OworICAgIGdldE9yRHJhd05vZGVIaWdobGln
aHQoJmNvbnRleHQsIG1faGlnaGxpZ2h0Tm9kZS5nZXQoKSwgbV9ub2RlSGlnaGxpZ2h0Q29uZmln
LCAmaGlnaGxpZ2h0KTsKK30KKwordm9pZCBJbnNwZWN0b3JPdmVybGF5OjpkcmF3UmVjdEhpZ2hs
aWdodChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgaWYgKCFtX2hpZ2hsaWdodFJl
Y3QpCisgICAgICAgIHJldHVybjsKKworICAgIEhpZ2hsaWdodCBoaWdobGlnaHQ7CisgICAgZ2V0
T3JEcmF3UmVjdEhpZ2hsaWdodCgmY29udGV4dCwgbV9wYWdlLCBtX2hpZ2hsaWdodFJlY3QuZ2V0
KCksIG1fcmVjdEhpZ2hsaWdodENvbmZpZywgJmhpZ2hsaWdodCk7Cit9CisKK3ZvaWQgSW5zcGVj
dG9yT3ZlcmxheTo6ZHJhd1BhdXNlZEluRGVidWdnZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KQoreworICAgIGlmIChtX3BhdXNlZEluRGVidWdnZXJNZXNzYWdlLmlzTnVsbCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKENvbG9yLCBiYWNrZ3JvdW5kQ29s
b3IsICgwLCAwLCAwLCAzMSkpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ29sb3IsIHRleHRC
YWNrZ3JvdW5kQ29sb3IsICgyNTUsIDI1NSwgMTk0KSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NB
TChDb2xvciwgYm9yZGVyQ29sb3IsICgxMjgsIDEyOCwgMTI4KSk7CisKKyAgICBGcmFtZSogZnJh
bWUgPSBtX3BhZ2UtPm1haW5GcmFtZSgpOworICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGZyYW1l
LT5zZXR0aW5ncygpOworICAgIEludFJlY3QgdmlzaWJsZVJlY3QgPSBJbnRSZWN0KEludFBvaW50
KCksIGZyYW1lLT52aWV3KCktPnZpc2libGVTaXplKCkpOworCisgICAgY29udGV4dC5zZXRGaWxs
Q29sb3IoYmFja2dyb3VuZENvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBjb250ZXh0
LmZpbGxSZWN0KHZpc2libGVSZWN0KTsKKworICAgIEZvbnREZXNjcmlwdGlvbiBkZXNjOworICAg
IHNldFVwRm9udERlc2NyaXB0aW9uKGRlc2MsIHNldHRpbmdzKTsKKyAgICBGb250IGZvbnQgPSBG
b250KGRlc2MsIDAsIDApOworICAgIGZvbnQudXBkYXRlKDApOworCisgICAgVGV4dFJ1biB0ZXh0
UnVuKG1fcGF1c2VkSW5EZWJ1Z2dlck1lc3NhZ2UpOworICAgIEludFJlY3QgdGl0bGVSZWN0ID0g
ZW5jbG9zaW5nSW50UmVjdChmb250LnNlbGVjdGlvblJlY3RGb3JUZXh0KHRleHRSdW4sIEludFBv
aW50KCksIGZvbnRIZWlnaHRQeCkpOworICAgIHRpdGxlUmVjdC5pbmZsYXRlKHJlY3RJbmZsYXRl
UHgpOworICAgIHRpdGxlUmVjdC5zZXRMb2NhdGlvbihJbnRQb2ludCh2aXNpYmxlUmVjdC53aWR0
aCgpIC8gMiAtIHRpdGxlUmVjdC53aWR0aCgpIC8gMiwgMCkpOworCisgICAgY29udGV4dC5zZXRG
aWxsQ29sb3IodGV4dEJhY2tncm91bmRDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAg
Y29udGV4dC5zZXRTdHJva2VDb2xvcihib3JkZXJDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7
CisgICAgY29udGV4dC5kcmF3UmVjdCh0aXRsZVJlY3QpOworICAgIGRyYXdTdWJzdHJpbmcodGV4
dFJ1biwgMCwgbV9wYXVzZWRJbkRlYnVnZ2VyTWVzc2FnZS5sZW5ndGgoKSwgQ29sb3I6OmJsYWNr
LCBmb250LCBjb250ZXh0LCB0aXRsZVJlY3QpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JPdmVybGF5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWMyMmZmMWMzYzZlNzNkNTFmNjZiN2Fl
ZWMxZjliYmUyMjBmOGRjMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JPdmVybGF5LmgKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgi
QXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEluc3Bl
Y3Rvck92ZXJsYXlfaAorI2RlZmluZSBJbnNwZWN0b3JPdmVybGF5X2gKKworI2luY2x1ZGUgIkNv
bG9yLmgiCisjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIK
KyNpbmNsdWRlICJOb2RlLmgiCisKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8
d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENvbG9yOworY2xhc3Mg
R3JhcGhpY3NDb250ZXh0OworY2xhc3MgSW5zcGVjdG9yQ2xpZW50OworY2xhc3MgSW50UmVjdDsK
K2NsYXNzIE5vZGU7CitjbGFzcyBQYWdlOworCitzdHJ1Y3QgSGlnaGxpZ2h0Q29uZmlnIHsKKyAg
ICBDb2xvciBjb250ZW50OworICAgIENvbG9yIGNvbnRlbnRPdXRsaW5lOworICAgIENvbG9yIHBh
ZGRpbmc7CisgICAgQ29sb3IgYm9yZGVyOworICAgIENvbG9yIG1hcmdpbjsKKyAgICBib29sIHNo
b3dJbmZvOworfTsKKworZW51bSBIaWdobGlnaHRUeXBlIHsKKyAgICBIaWdobGlnaHRUeXBlTm9k
ZSwKKyAgICBIaWdobGlnaHRUeXBlUmVjdHMsCit9OworCitzdHJ1Y3QgSGlnaGxpZ2h0IHsKKyAg
ICB2b2lkIHNldENvbG9ycyhjb25zdCBIaWdobGlnaHRDb25maWcmIGhpZ2hsaWdodENvbmZpZykK
KyAgICB7CisgICAgICAgIGNvbnRlbnRDb2xvciA9IGhpZ2hsaWdodENvbmZpZy5jb250ZW50Owor
ICAgICAgICBwYWRkaW5nQ29sb3IgPSBoaWdobGlnaHRDb25maWcucGFkZGluZzsKKyAgICAgICAg
Ym9yZGVyQ29sb3IgPSBoaWdobGlnaHRDb25maWcuYm9yZGVyOworICAgICAgICBtYXJnaW5Db2xv
ciA9IGhpZ2hsaWdodENvbmZpZy5tYXJnaW47CisgICAgfQorCisgICAgQ29sb3IgY29udGVudENv
bG9yOworICAgIENvbG9yIHBhZGRpbmdDb2xvcjsKKyAgICBDb2xvciBib3JkZXJDb2xvcjsKKyAg
ICBDb2xvciBtYXJnaW5Db2xvcjsKKworICAgIC8vIFdoZW4gdGhlIHR5cGUgaXMgTm9kZSwgdGhl
cmUgYXJlIDQgcXVhZHMgKG1hcmdpbiwgYm9yZGVyLCBwYWRkaW5nLCBjb250ZW50KS4KKyAgICAv
LyBXaGVuIHRoZSB0eXBlIGlzIFJlY3RzLCB0aGlzIGlzIGp1c3QgYSBsaXN0IG9mIHF1YWRzLgor
ICAgIEhpZ2hsaWdodFR5cGUgdHlwZTsKKyAgICBWZWN0b3I8RmxvYXRRdWFkPiBxdWFkczsKK307
CisKK2NsYXNzIEluc3BlY3Rvck92ZXJsYXkgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3du
UHRyPEluc3BlY3Rvck92ZXJsYXk+IGNyZWF0ZShQYWdlKiBwYWdlLCBJbnNwZWN0b3JDbGllbnQq
IGNsaWVudCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgSW5zcGVjdG9yT3Zl
cmxheShwYWdlLCBjbGllbnQpKTsKKyAgICB9CisKKyAgICB2b2lkIHBhaW50KEdyYXBoaWNzQ29u
dGV4dCYpOworICAgIHZvaWQgZHJhd091dGxpbmUoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5
b3V0UmVjdCYsIGNvbnN0IENvbG9yJik7CisgICAgdm9pZCBnZXRIaWdobGlnaHQoSGlnaGxpZ2h0
KikgY29uc3Q7CisKKyAgICB2b2lkIHNldFBhdXNlZEluRGVidWdnZXJNZXNzYWdlKGNvbnN0IFN0
cmluZyopOworCisgICAgdm9pZCBoaWRlSGlnaGxpZ2h0KCk7CisgICAgdm9pZCBoaWdobGlnaHRO
b2RlKE5vZGUqLCBjb25zdCBIaWdobGlnaHRDb25maWcmKTsKKyAgICB2b2lkIGhpZ2hsaWdodFJl
Y3QoUGFzc093blB0cjxJbnRSZWN0PiwgY29uc3QgSGlnaGxpZ2h0Q29uZmlnJik7CisKKyAgICBO
b2RlKiBoaWdobGlnaHRlZE5vZGUoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBJbnNwZWN0b3JP
dmVybGF5KFBhZ2UqLCBJbnNwZWN0b3JDbGllbnQqKTsKKworICAgIHZvaWQgdXBkYXRlKCk7Cisg
ICAgdm9pZCBkcmF3Tm9kZUhpZ2hsaWdodChHcmFwaGljc0NvbnRleHQmKTsKKyAgICB2b2lkIGRy
YXdSZWN0SGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCYpOworICAgIHZvaWQgZHJhd1BhdXNlZElu
RGVidWdnZXIoR3JhcGhpY3NDb250ZXh0Jik7CisKKyAgICBQYWdlKiBtX3BhZ2U7CisgICAgSW5z
cGVjdG9yQ2xpZW50KiBtX2NsaWVudDsKKyAgICBTdHJpbmcgbV9wYXVzZWRJbkRlYnVnZ2VyTWVz
c2FnZTsKKyAgICBSZWZQdHI8Tm9kZT4gbV9oaWdobGlnaHROb2RlOworICAgIEhpZ2hsaWdodENv
bmZpZyBtX25vZGVIaWdobGlnaHRDb25maWc7CisgICAgT3duUHRyPEludFJlY3Q+IG1faGlnaGxp
Z2h0UmVjdDsKKyAgICBIaWdobGlnaHRDb25maWcgbV9yZWN0SGlnaGxpZ2h0Q29uZmlnOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisKKyNlbmRpZiAvLyBJbnNwZWN0b3JPdmVybGF5
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdl
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAK
aW5kZXggMzc4ZGJlYzg3Nzg0YzA1OGFjNTM5NWRjOTM5YjE5NDlmNWU5Y2E5ZS4uYmVmYmU4YjNj
MzNmZDAyMjkzMDhmYjI2YjYwMWFhOWE4MGFmNDNmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKQEAgLTQ0LDcgKzQ0LDYgQEAKICNpbmNs
dWRlICJDb29raWUuaCIKICNpbmNsdWRlICJDb29raWVKYXIuaCIKICNpbmNsdWRlICJET01JbXBs
ZW1lbnRhdGlvbi5oIgotI2luY2x1ZGUgIkRPTU5vZGVIaWdobGlnaHRlci5oIgogI2luY2x1ZGUg
IkRPTVBhdGNoU3VwcG9ydC5oIgogI2luY2x1ZGUgIkRldmljZU9yaWVudGF0aW9uQ29udHJvbGxl
ci5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCkBAIC02MSw2ICs2MCw3IEBACiAjaW5jbHVkZSAi
SW5zcGVjdG9yQ2xpZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmQuaCIKICNpbmNs
dWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JPdmVy
bGF5LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yU3RhdGUuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JW
YWx1ZXMuaCIKICNpbmNsdWRlICJJbnN0cnVtZW50aW5nQWdlbnRzLmgiCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZURlYnVnZ2VyQWdlbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50LmNwcAppbmRleCBiNjQ2YWYxOTM4ZTA1
NmM3MDRlNzNjNmJjZjIyOTYxNWQ1ZjYwN2RlLi5jOTczMjNiZjFiODliOWE5ZDEwZGM4MzE1ZDkz
YTJiZjI3YmUyYjJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZURl
YnVnZ2VyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlRGVidWdn
ZXJBZ2VudC5jcHAKQEAgLTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlICJQYWdlRGVidWdnZXJBZ2Vu
dC5oIgogCiAjaW5jbHVkZSAiQ29uc29sZS5oIgotI2luY2x1ZGUgIkRPTU5vZGVIaWdobGlnaHRl
ci5oIgorI2luY2x1ZGUgIkluc3BlY3Rvck92ZXJsYXkuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAj
aW5jbHVkZSAiUGFnZVNjcmlwdERlYnVnU2VydmVyLmgiCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvR2VzdHVyZVRhcEhpZ2hsaWdodGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0dlc3R1cmVUYXBIaWdobGlnaHRlci5oCmluZGV4IDFhNDdkNzFmZDViZWQ3ZTJmZTUyMjZlZTY3
ZTQ3NTY5ZjIwM2I3NzQuLmU4MDE1ZmU1Y2MwOGU5MjQzMzUwZmUxOTJjZDA3MjQ0MDRmZTk3YTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvR2VzdHVyZVRhcEhpZ2hsaWdodGVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9HZXN0dXJlVGFwSGlnaGxpZ2h0ZXIuaApAQCAtNDMs
NCArNDMsNCBAQCBQYXRoIHBhdGhGb3JOb2RlSGlnaGxpZ2h0KGNvbnN0IE5vZGUqKTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRE9NTm9kZUhpZ2hsaWdodGVyX2gKKyNl
bmRpZiAvLyBHZXN0dXJlVGFwSGlnaGxpZ2h0ZXJfX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJu
YWxzLmNwcAppbmRleCAyZmRjMDY2ZDY1YTY1NjU3YTNiZmJhMjJjNThiMDBiM2QzM2U2ZjYwLi42
YWFhN2YxNzI4NzU3YTFlNGJjMDRhN2Q5OTFjMzNmNjkyZWIyNzQyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVz
dGluZy9JbnRlcm5hbHMuY3BwCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSAiQ2xpZW50UmVj
dC5oIgogI2luY2x1ZGUgIkNsaWVudFJlY3RMaXN0LmgiCiAjaW5jbHVkZSAiQ29tcG9zZWRTaGFk
b3dUcmVlV2Fsa2VyLmgiCi0jaW5jbHVkZSAiRE9NTm9kZUhpZ2hsaWdodGVyLmgiCiAjaW5jbHVk
ZSAiRE9NU3RyaW5nTGlzdC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRG9j
dW1lbnRNYXJrZXIuaCIKQEAgLTUwLDYgKzQ5LDcgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JDb250
cm9sbGVyLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ291bnRlcnMuaCIKICNpbmNsdWRlICJJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JPdmVybGF5LmgiCiAj
aW5jbHVkZSAiSW5zdHJ1bWVudGluZ0FnZW50cy5oIgogI2luY2x1ZGUgIkludGVybmFsU2V0dGlu
Z3MuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>