<?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>156333</bug_id>
          
          <creation_ts>2016-04-07 01:55:16 -0700</creation_ts>
          <short_desc>[GTK] Rework the theming code for GTK+ 3.20</short_desc>
          <delta_ts>2016-04-11 04:10:21 -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>WebKitGTK</component>
          <version>WebKit Local Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=156462</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bugs-noreply</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1181611</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-04-07 01:55:16 -0700</bug_when>
    <thetext>During the 3.19 GTK+ release cycle, the GTK+ css system was reworked, making themes and programs rendering themed widgets, incompatible with the new system. We were trying to fix our rendering every time GTK+ broke something, but we were just changing whatever it was needed to make our rendering look like current GTK+ with the default theme Adwaita. This means that our rendering will be broken for other themes or that changes in Adwaita can break our rendering. This solution was good enough to ensure WebKitGTK+ 2.12 looked good with GTK+ 3.20, but it doesn&apos;t work in the long term. We need to ensure that our theming code honors the new GTK+ CSS properties (max-width, min-width, margin, padding, border, ...) in all the cases, not only the cases where Adwaita uses them like we currently do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181617</commentid>
    <comment_count>1</comment_count>
      <attachid>275871</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-04-07 02:18:25 -0700</bug_when>
    <thetext>Created attachment 275871
Patch

Something similar is needed now for ScrollbarThemeGtk</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182661</commentid>
    <comment_count>2</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-04-11 03:59:10 -0700</bug_when>
    <thetext>Committed r199292: &lt;http://trac.webkit.org/changeset/199292&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>275871</attachid>
            <date>2016-04-07 02:18:25 -0700</date>
            <delta_ts>2016-04-08 15:25:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wcore-render-theme320.diff</filename>
            <type>text/plain</type>
            <size>102001</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCAwNjQ0ZjllLi5lM2JhMDFl
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMTYtMDQtMDcgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgor
CisgICAgICAgIFtHVEtdIFJld29yayB0aGUgdGhlbWluZyBjb2RlIGZvciBHVEsrIDMuMjAKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjMzMworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBhIG1hbnVh
bCB0ZXN0IHRvIGNoZWNrIGhvdyB0aGVtZWQgZWxlbWVudHMgYXJlIHJlbmRlcmVkLgorCisgICAg
ICAgICogTWFudWFsVGVzdHMvZ3RrL3RoZW1lLmh0bWw6IEFkZGVkLgorCiAyMDE2LTA0LTAzICBD
YXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJl
dmlld2VkLiBCdW1wIEdUSysgdmVyc2lvbnMgbnVtYmVycy4KZGlmZiAtLWdpdCBhL01hbnVhbFRl
c3RzL2d0ay90aGVtZS5odG1sIGIvTWFudWFsVGVzdHMvZ3RrL3RoZW1lLmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRhNWU3OQotLS0gL2Rldi9udWxsCisrKyBiL01h
bnVhbFRlc3RzL2d0ay90aGVtZS5odG1sCkBAIC0wLDAgKzEsMTUxIEBACis8aHRtbD4KKworICA8
Ym9keSBpZD0iYm9keSI+CisgIDxoMT5HVEsrIHRoZW1lZCBlbGVtZW50czwvaDE+CisKKyAgPHA+
VGhpcyBpcyBhIG1hbnVhbCB0ZXN0cyB0byBjaGVjayBob3cgYWxsIGVsZW1lbnRzIGhhdmluZyBh
IG5hdGl2ZSBhcHBlYXJhbmNlIGFyZSByZW5kZXJlZCBieSBXZWJLaXRHVEsrLgorICAgIFRvIHRl
c3QgZGlmZmVyZW50IHRoZW1lcywgb3BlbiB0aGlzIHRlc3QgaW4gTWluaUJyb3dzZXIgKG9yIGFu
eSBvdGhlciBXZWJLaXRHVEsrIGJhc2VkIGJyb3dzZXIpIHBhc3NpbmcKKyAgICBHVEtfVEhFTUU9
dGhlbWUtbmFtZVs6dmFyaWFudF0gZW52aXJvbm1lbnQgdmFyaWFibGUuCisgIDwvcD4KKworICA8
cD5UZXh0IGRpcmVjdGlvbjogPHNlbGVjdCBvbmNoYW5nZT0iYm9keSA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdib2R5Jyk7IGlmICh0aGlzLnNlbGVjdGVkSW5kZXggPT0gMCkgYm9keS5zdHls
ZS5kaXJlY3Rpb249J2x0cic7IGVsc2UgYm9keS5zdHlsZS5kaXJlY3Rpb249J3J0bCc7Ij4KKyAg
ICAgIDxvcHRpb24+TGVmdCB0byByaWdodDwvb3B0aW9uPjxvcHRpb24+UmlnaHQgdG8gbGVmdDwv
b3B0aW9uPjwvc2VsZWN0PgorICA8L3A+CisKKyAgPGgxPkJ1dHRvbnM8L2gxPgorICA8dGFibGU+
CisgICAgPHRyPgorICAgICAgPHRkPjxidXR0b24gdHlwZT0iYnV0dG9uIj5CdXR0b248L2J1dHRv
bj48L3RkPgorICAgICAgPHRkPjxidXR0b24gdHlwZT0iYnV0dG9uIiBkaXNhYmxlZD5EaXNhYmxl
ZDwvYnV0dG9uPjwvdGQ+CisgICAgPC90cj4KKyAgICA8dHI+CisgICAgICA8dGQ+PGlucHV0IHR5
cGU9InJhZGlvIiBuYW1lPSJyYWRpbyIvPlJhZGlvIDE8L3RkPgorICAgICAgPHRkPjxpbnB1dCB0
eXBlPSJyYWRpbyIgbmFtZT0icmFkaW8iLz5SYWRpbyAyPC90ZD4KKyAgICA8L3RyPgorICAgIDx0
cj4KKyAgICAgIDx0ZD48aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9InJhZGlvLWRpc2FibGVkIiBk
aXNhYmxlZC8+RGlzYWJsZWQ8L3RkPgorICAgICAgPHRkPjxpbnB1dCB0eXBlPSJyYWRpbyIgbmFt
ZT0icmFkaW8tZGlzYWJsZWQiIGRpc2FibGVkIGNoZWNrZWQvPkNoZWNrZWQgRGlzYWJsZWQ8L3Rk
PgorICAgIDwvdHI+CisgICAgPHRyPgorICAgICAgPHRkPjxpbnB1dCB0eXBlPSJjaGVja2JveCIg
bmFtZT0iY2hlY2siLz5DaGVjazwvdGQ+CisgICAgICA8dGQ+PGlucHV0IHR5cGU9ImNoZWNrYm94
IiBuYW1lPSJjaGVjay1kaXNhYmxlZCIgY2hlY2tlZCBkaXNhYmxlZC8+Q2hlY2sgRGlzYWJsZWQ8
L3RkPgorICAgIDwvdHI+CisgIDwvdGFibGU+CisKKyAgPGgxPkNvbWJvczwvaDE+CisgIDx0YWJs
ZT4KKyAgICA8dHI+CisgICAgICA8dGQ+PHNlbGVjdD48b3B0aW9uPkE8L29wdGlvbj48b3B0aW9u
IHNlbGVjdGVkPkI8L29wdGlvbj48b3B0aW9uPkM8L29wdGlvbj48L3RkPgorICAgICAgPHRkPjxz
ZWxlY3Q+PG9wdGlvbj5Db21ibyBvcHRpb24gMTwvb3B0aW9uPjxvcHRpb24+Q29tYm8gb3B0aW9u
IDI8L29wdGlvbj48b3B0aW9uPkNvbWJvIG9wdGlvbiAzPC9vcHRpb24+PC90ZD4KKyAgICA8L3Ry
PgorICA8L3RhYmxlPgorCisgIDxoMT5UZXh0IGFyZWFzPC9oMT4KKyAgPHRhYmxlPgorICAgIDx0
cj4KKyAgICAgIDx0ZD48aW5wdXQgdmFsdWU9IkVudHJ5Ij48L3RkPgorICAgICAgPHRkPjxpbnB1
dCB2YWx1ZT0iRGlzYWJsZWQiIGRpc2FibGVkPjwvdGQ+CisgICAgICA8dGQ+PGlucHV0IHZhbHVl
PSJSZWFkIG9ubHkiIHJlYWRvbmx5PjwvdGQ+CisgICAgPC90cj4KKyAgICA8dHI+CisgICAgICA8
dGQ+PGlucHV0IHR5cGU9InBhc3N3b3JkIiB2YWx1ZT0iUGFzc3dvcmQiPjwvdGQ+CisgICAgICA8
dGQ+PGlucHV0IHR5cGU9InBhc3N3b3JkIiB2YWx1ZT0iRGlzYWJsZWQiIGRpc2FibGVkPjwvdGQ+
CisgICAgICA8dGQ+PGlucHV0IHR5cGU9InBhc3N3b3JkIiB2YWx1ZT0iUmVhZCBvbmx5IiByZWFk
b25seT48L3RkPgorICAgIDwvdHI+CisgICAgPHRyPgorICAgICAgPHRkPjx0ZXh0YXJlYSByb3dz
PSIxIj5TaW5nbGUgcm93IHRleHQgYXJlYTwvdGV4dGFyZWE+PC90ZD4KKyAgICAgIDx0ZD48dGV4
dGFyZWEgcm93cz0iMSIgZGlzYWJsZWQ+RGlzYWJsZWQ8L3RleHRhcmVhPjwvdGQ+CisgICAgICA8
dGQ+PHRleHRhcmVhIHJvd3M9IjEiIHJlYWRvbmx5PlJlYWQgb25seTwvdGV4dGFyZWE+PC90ZD4K
KyAgICA8L3RyPgorICAgIDx0cj4KKyAgICAgIDx0ZD48dGV4dGFyZWEgcm93cz0iNSI+Tm8gc2Ny
b2xsYmFycyBpbml0aWFsbHk8L3RleHRhcmVhPjwvdGQ+CisgICAgICA8dGQ+PHRleHRhcmVhIHJv
d3M9IjUiPldpdGggdmVydGljYWwgc2Nyb2xsYmFyCisKKworCisKKworCisgICAgICA8L3RleHRh
cmVhPjwvdGQ+CisgICAgICA8dGQ+PHRleHRhcmVhIHJvd3M9IjUiIHN0eWxlPSd3aGl0ZS1zcGFj
ZTogbm93cmFwJz5XaXRoIGhvcml6b250YWwgc2Nyb2xsYmFycy4uLi4uLi4uLi4uLi4uLi4uLjwv
dGV4dGFyZWE+PC90ZD4KKyAgICA8L3RyPgorICA8L3RhYmxlPgorCisgIDxoMT5TZWFyY2ggZmll
bGQ8L2gxPgorICA8dGFibGU+CisgICAgPHRyPgorICAgICAgPHRkPjxpbnB1dCB0eXBlPSJzZWFy
Y2giIHJlc3VsdHMgdmFsdWU9IlNtYWxsIiBzdHlsZT0iZm9udC1zaXplOiA4cHg7Ij48L3RkPgor
ICAgICAgPHRkPjxpbnB1dCB0eXBlPSJzZWFyY2giIHJlc3VsdHMgdmFsdWU9IkJpZyIgc3R5bGU9
ImZvbnQtc2l6ZTogMzJweDsiPjwvdGQ+CisgICAgPC90cj4KKyAgPC90YWJsZT4KKworICA8aDE+
U3BpbiBidXR0b25zPC9oMT4KKyAgPHRhYmxlPgorICAgIDx0cj4KKyAgICAgIDx0ZD48aW5wdXQg
dHlwZT0ibnVtYmVyIiB2YWx1ZT0iU21hbGwiIHN0eWxlPSJmb250LXNpemU6IDhweDsiPjwvdGQ+
CisgICAgICA8dGQ+PGlucHV0IHR5cGU9Im51bWJlciIgdmFsdWU9IkJpZyIgc3R5bGU9ImZvbnQt
c2l6ZTogMzJweDsiPjwvdGQ+CisgICAgPC90cj4KKyAgPC90YWJsZT4KKworICA8aDE+T3B0aW9u
IGxpc3RzPC9oMT4KKyAgPHRhYmxlPgorICAgIDx0cj4KKyAgICAgIDx0ZD4KKyAgICAgICAgPHNl
bGVjdCBzaXplPSI1Ij4KKyAgICAgICAgICA8b3B0aW9uPk9wdGlvbiAxPC9vcHRpb24+PG9wdGlv
bj5PcHRpb24gMjwvb3B0aW9uPjxvcHRpb24+T3B0aW9uIDM8L29wdGlvbj48b3B0aW9uIHNlbGVj
dGVkPk9wdGlvbiA0PC9vcHRpb24+PG9wdGlvbj5PcHRpb24gNTwvb3B0aW9uPgorICAgICAgICA8
L3NlbGVjdD4KKyAgICAgIDwvdGQ+CisgICAgICA8dGQ+CisgICAgICAgIDxzZWxlY3Qgc2l6ZT0i
MyI+CisgICAgICAgICAgPG9wdGlvbj5PcHRpb24gMTwvb3B0aW9uPjxvcHRpb24+T3B0aW9uIDI8
L29wdGlvbj48b3B0aW9uPk9wdGlvbiAzPC9vcHRpb24+PG9wdGlvbiBzZWxlY3RlZD5PcHRpb24g
NDwvb3B0aW9uPjxvcHRpb24+T3B0aW9uIDU8L29wdGlvbj4KKyAgICAgICAgPC9zZWxlY3Q+Cisg
ICAgICA8L3RkPgorICAgICAgPHRkPgorICAgICAgICA8c2VsZWN0IHNpemU9IjMiPgorICAgICAg
ICAgIDxvcHRpb24gZGlzYWJsZWQ+T3B0aW9uIDE8L29wdGlvbj48b3B0aW9uIGRpc2FibGVkPk9w
dGlvbiAyPC9vcHRpb24+PG9wdGlvbj5PcHRpb24gMzwvb3B0aW9uPjxvcHRpb24gc2VsZWN0ZWQ+
T3B0aW9uIDQ8L29wdGlvbj48b3B0aW9uPk9wdGlvbiA1PC9vcHRpb24+CisgICAgICAgIDwvc2Vs
ZWN0PgorICAgICAgPC90ZD4KKyAgICAgIDx0ZD4KKyAgICAgICAgPHNlbGVjdCBzaXplPSIzIiBk
aXNhYmxlZD4KKyAgICAgICAgICA8b3B0aW9uPk9wdGlvbiAxPC9vcHRpb24+PG9wdGlvbj5PcHRp
b24gMjwvb3B0aW9uPjxvcHRpb24+T3B0aW9uIDM8L29wdGlvbj48b3B0aW9uIHNlbGVjdGVkPk9w
dGlvbiA0PC9vcHRpb24+PG9wdGlvbj5PcHRpb24gNTwvb3B0aW9uPgorICAgICAgICA8L3NlbGVj
dD4KKyAgICAgIDwvdGQ+CisgICAgPC90cj4KKyAgPC90YWJsZT4KKworICA8aDE+UHJvZ3Jlc3Mg
YmFyczwvaDE+CisgIDx0YWJsZT4KKyAgICA8dHI+CisgICAgICA8dGQ+PHByb2dyZXNzIHZhbHVl
PSI1MCIgbWF4PSIxMDAiPjwvcHJvZ3Jlc3M+PC90ZD4KKyAgICAgIDx0ZD48cHJvZ3Jlc3MgaW5k
ZXRlcm1pbmF0ZT0idHJ1ZSI+PC9wcm9ncmVzcz48L3RkPgorICAgICAgPHRkPjxwcm9ncmVzcyB2
YWx1ZT0iNTAiIG1heD0iMTAwIiBzdHlsZT0id2lkdGg6IDE1MHB4OyBoZWlnaHQ6IDE2cHg7Ij48
L3Byb2dyZXNzPjwvdGQ+CisgICAgICA8dGQ+PHByb2dyZXNzIGluZGV0ZXJtaW5hdGU9InRydWUi
IHN0eWxlPSJ3aWR0aDogMTUwcHg7IGhlaWdodDogMTZweDsiPjwvcHJvZ3Jlc3M+PC90ZD4KKyAg
ICA8L3RyPgorICA8L3RhYmxlPgorCisgIDxoMT5SYW5nZSBzZWxlY3RvcjwvaDE+CisgIDx0YWJs
ZT4KKyAgICA8dHI+CisgICAgICA8dGQ+PGlucHV0IHR5cGU9InJhbmdlIiB2YWx1ZT0iNTAiIG1h
eD0iMTAwIj48L2lucHV0PjwvdGQ+CisgICAgICA8dGQ+PGlucHV0IHR5cGU9InJhbmdlIiB2YWx1
ZT0iNTAiIG1heD0iMTAwIiBzdHlsZT0iLXdlYmtpdC1hcHBlYXJhbmNlOiBzbGlkZXItdmVydGlj
YWwiPjwvaW5wdXQ+PC90ZD4KKyAgICAgIDx0ZD48aW5wdXQgdHlwZT0icmFuZ2UiIHZhbHVlPSI1
MCIgbWF4PSIxMDAiIGRpc2FibGVkPjwvaW5wdXQ+PC90ZD4KKyAgICAgIDx0ZD48aW5wdXQgdHlw
ZT0icmFuZ2UiIHZhbHVlPSI1MCIgbWF4PSIxMDAiIHN0eWxlPSItd2Via2l0LWFwcGVhcmFuY2U6
IHNsaWRlci12ZXJ0aWNhbCIgZGlzYWJsZWQ+PC9pbnB1dD48L3RkPgorICAgIDwvdHI+CisgIDwv
dGFibGU+CisKKyAgPGgxPklmcmFtZSBzY3JvbGxiYXJzPC9oMT4KKyAgPGlmcmFtZSB3aWR0aD0i
MjAwIiBoZWlnaHQ9IjEwMCIgc2Nyb2xsaW5nPSJ5ZXMiIHNyYz0iZGF0YTp0ZXh0L2h0bWwsCisg
ICAgICA8aHRtbD4KKyAgICAgICAgPGJvZHk+CisgICAgICAgICAgTG9yZW0gaXBzdW0gZG9sb3Ig
c2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2ljaW5nIGVsaXQsIHNlZCBkbyBlaXVzbW9kIHRl
bXBvciBpbmNpZGlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXVhLgorICAgICAg
ICAgIFV0IGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpdGF0aW9uIHVs
bGFtY28gbGFib3JpcyBuaXNpIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1
aXMgYXV0ZSBpcnVyZQorICAgICAgICAgIGRvbG9yIGluIHJlcHJlaGVuZGVyaXQgaW4gdm9sdXB0
YXRlIHZlbGl0IGVzc2UgY2lsbHVtIGRvbG9yZSBldSBmdWdpYXQgbnVsbGEgcGFyaWF0dXIuIEV4
Y2VwdGV1ciBzaW50IG9jY2FlY2F0IGN1cGlkYXRhdCBub24KKyAgICAgICAgICBwcm9pZGVudCwg
c3VudCBpbiBjdWxwYSBxdWkgb2ZmaWNpYSBkZXNlcnVudCBtb2xsaXQgYW5pbSBpZCBlc3QgbGFi
b3J1bS4KKyAgICAgICAgPC9ib2R5PgorICAgICAgPC9odG1sPiI+CisgIDwvaWZyYW1lPgorCisg
IDxoMT5NZWRpYSBjb250cm9sczwvaDE+CisgIDx2aWRlbyBjb250cm9scz48L3ZpZGVvPgorICA8
L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTVkMDkwYS4uYzk3ZTdlNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDk2IEBACisyMDE2LTA0LTA3ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNn
YXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBSZXdvcmsgdGhlIHRoZW1pbmcgY29k
ZSBmb3IgR1RLKyAzLjIwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNTYzMzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBEdXJpbmcgdGhlIDMuMTkgR1RLKyByZWxlYXNlIGN5Y2xlLCB0aGUgR1RLKyBjc3Mg
c3lzdGVtIHdhcyByZXdvcmtlZCwgbWFraW5nIHRoZW1lcyBhbmQgcHJvZ3JhbXMgcmVuZGVyaW5n
CisgICAgICAgIHRoZW1lZCB3aWRnZXRzLCBpbmNvbXBhdGlibGUgd2l0aCB0aGUgbmV3IHN5c3Rl
bS4gV2Ugd2VyZSB0cnlpbmcgdG8gZml4IG91ciByZW5kZXJpbmcgZXZlcnkgdGltZSBHVEsrIGJy
b2tlCisgICAgICAgIHNvbWV0aGluZywgYnV0IHdlIHdlcmUganVzdCBjaGFuZ2luZyB3aGF0ZXZl
ciBpdCB3YXMgbmVlZGVkIHRvIG1ha2Ugb3VyIHJlbmRlcmluZyBsb29rIGxpa2UgY3VycmVudCBH
VEsrIHdpdGgKKyAgICAgICAgdGhlIGRlZmF1bHQgdGhlbWUgQWR3YWl0YS4gVGhpcyBtZWFucyB0
aGF0IG91ciByZW5kZXJpbmcgd2lsbCBiZSBicm9rZW4gZm9yIG90aGVyIHRoZW1lcyBvciB0aGF0
IGNoYW5nZXMgaW4KKyAgICAgICAgQWR3YWl0YSBjYW4gYnJlYWsgb3VyIHJlbmRlcmluZy4gVGhp
cyBzb2x1dGlvbiB3YXMgZ29vZCBlbm91Z2ggdG8gZW5zdXJlIFdlYktpdEdUSysgMi4xMiBsb29r
ZWQgZ29vZCB3aXRoIEdUSysKKyAgICAgICAgMy4yMCwgYnV0IGl0IGRvZXNuJ3Qgd29yayBpbiB0
aGUgbG9uZyB0ZXJtLiBXZSBuZWVkIHRvIGVuc3VyZSB0aGF0IG91ciB0aGVtaW5nIGNvZGUgaG9u
b3JzIHRoZSBuZXcgR1RLKyBDU1MKKyAgICAgICAgcHJvcGVydGllcyAobWF4LXdpZHRoLCBtaW4t
d2lkdGgsIG1hcmdpbiwgcGFkZGluZywgYm9yZGVyLCAuLi4pIGluIGFsbCB0aGUgY2FzZXMsIG5v
dCBvbmx5IHRoZSBjYXNlcyB3aGVyZQorICAgICAgICBBZHdhaXRhIHVzZXMgdGhlbSBsaWtlIHdl
IGN1cnJlbnRseSBkby4KKyAgICAgICAgVGhpcyBwYXRjaCBzcGxpdHMgYWxsIHJlbmRlcmluZyBt
ZXRob2RzIHRvIGtlZXAgdGhlIGN1cnJlbnQgY29kZSBmb3IgcHJldmlvdXMgR1RLKyB2ZXJzaW9u
cyBhbmQgYWRkcyBuZXcgY29kZQorICAgICAgICBmb3IgR1RLKyA+PSAzLjIwIHVzaW5nIHRoZSBu
ZXcgUmVuZGVyVGhlbWVHYWRnZXQgY2xhc3Nlcy4gVGhpcyBtYWtlcyB0aGUgY29kZSBlYXNpZXIg
dG8gcmVhZCwgc2luY2UgdGhlcmUgYXJlbid0CisgICAgICAgIGlmZGVmIGJsb2NrcyBpbiB0aGUg
ZnVuY3Rpb25zLCBhbmQgd2UgZW5zdXJlIHdlIGRvbid0IGJyZWFrIHByZXZpb3VzIHJlbmRlcmlu
Zy4KKworICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOiBBZGQgbmV3IGZpbGVzIHRvIGNvbXBp
bGF0aW9uLgorICAgICAgICAqIGh0bWwvc2hhZG93L1NwaW5CdXR0b25FbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNwaW5CdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKTog
Q2hlY2sgdGhlIGJ1dHRvbiBsYXlvdXQgdXNlZCBieSB0aGUgdGhlbWUgdG8gZGVjaWRlIHRoZQor
ICAgICAgICBjdXJyZW50IGJ1dHRvbnMgc3RhdGUuCisgICAgICAgICogcGxhdGZvcm0vZ3RrL1Jl
bmRlclRoZW1lR2FkZ2V0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZUdhZGdldDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVN0eWxlQ29udGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjphcHBlbmRFbGVtZW50VG9QYXRoKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lR2FkZ2V0OjpSZW5kZXJUaGVtZUdhZGdldCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZUdhZGdldDo6flJlbmRlclRoZW1lR2FkZ2V0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lR2FkZ2V0OjptYXJnaW5Cb3gpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVHYWRnZXQ6OmJvcmRlckJveCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZUdhZGdldDo6cGFkZGluZ0JveCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUdh
ZGdldDo6Y29udGVudHNCb3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHYWRnZXQ6
OmNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR2FkZ2V0OjpiYWNrZ3JvdW5k
Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHYWRnZXQ6Om1pbmltdW1TaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR2FkZ2V0OjpwcmVmZXJyZWRTaXplKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR2FkZ2V0OjpyZW5kZXIpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVHYWRnZXQ6OnJlbmRlckZvY3VzKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lQm94R2FkZ2V0OjpSZW5kZXJUaGVtZUJveEdhZGdldCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZVRleHRGaWVsZEdhZGdldDo6UmVuZGVyVGhlbWVUZXh0Rmll
bGRHYWRnZXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVUZXh0RmllbGRHYWRnZXQ6
Om1pbmltdW1TaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lVG9nZ2xlR2FkZ2V0
OjpSZW5kZXJUaGVtZVRvZ2dsZUdhZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZVRvZ2dsZUdhZGdldDo6cmVuZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQXJy
b3dHYWRnZXQ6OlJlbmRlclRoZW1lQXJyb3dHYWRnZXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVBcnJvd0dhZGdldDo6cmVuZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lSWNvbkdhZGdldDo6UmVuZGVyVGhlbWVJY29uR2FkZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lSWNvbkdhZGdldDo6Z3RrSWNvblNpemVGb3JQaXhlbFNpemUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJY29uR2FkZ2V0OjpyZW5kZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVJY29uR2FkZ2V0OjptaW5pbXVtU2l6ZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3RrL1JlbmRlclRoZW1lR2FkZ2V0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVHYWRnZXQ6OmNvbnRleHQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJU
aGVtZS5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmlubmVyU3BpbkJ1dHRvbkxh
eW91dCk6IEFkZGVkIHRoaXMgbWV0aG9kIHRvIGFsbG93IHRoZW1lcyB1c2UgYSBkaWZmZXJlbnQg
bGF5b3V0IGZvciB0aGUKKyAgICAgICAgYnV0dG9ucy4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyVGhlbWVHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dGhlbWVDaGFuZ2VkQ2FsbGJhY2sp
OiBKdXN0IG1vdmVkIHRoaXMgY29kZSB0byBhIGNvbW1vbiBwbGFjZS4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lR3RrOjpSZW5kZXJUaGVtZUd0ayk6IEluaXRpYWxpemUgdGhlIHRoZW1l
IG1vbml0b3IgaW4gdGhlIGNvbnN0cnVjdG9yLgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlU3R5
bGVDb250ZXh0KTogUmVtb3ZlIHRoZSByZW5kZXIgcGFydHMgdGhhdCBhcmUgc3BlY2lmaWMgdG8g
R1RLKyAzLjIwLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OmFkanVzdFJlcGFp
bnRSZWN0KTogTW92ZWQgaW5zaWRlIGEgR1RLKyA8IDMuMjAgaWZkZWYgYmxvY2suCisgICAgICAg
IChXZWJDb3JlOjp0aGVtZVBhcnRTdGF0ZUZsYWdzKTogSGVscGVyIGZ1bmN0aW9uIHRvIGdldCB0
aGUgR3RrU3RhdGVGbGFncyBvZiBhIHRoZW1lIHBhcnQgZm9yIGEgZ2l2ZW4gUmVuZGVyT2JqZWN0
LgorICAgICAgICAoV2ViQ29yZTo6c2hyaW5rVG9NaW5pbXVtU2l6ZUFuZENlbnRlclJlY3Rhbmds
ZSk6IE1vdmUgdGhpcyBjb21tb24gY29kZSB0byBhIGhlbHBlciBmdW5jdGlvbi4KKyAgICAgICAg
KFdlYkNvcmU6OnNldFRvZ2dsZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6cGFpbnRUb2dnbGUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OnBhaW50QnV0dG9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGluZ0JveCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6cGFpbnRNZW51TGlzdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6YWRqdXN0VGV4dEZpZWxkU3R5bGUpOiBGb3IgR1RL
KyAzLjIwIHdlIG5lZWQgdG8gZW5zdXJlIGEgbWluaW11bSBzaXplIGZvciBzcGluIGJ1dHRvbnMs
CisgICAgICAgIHNvIGlmIHRoZSB0ZXh0IGZpZWxkIGlzIGZvciBhIHNwaW4gYnV0dG9uLCB3ZSBh
ZGp1c3QgdGhlIGRlc2lyZWQgc2l6ZSBoZXJlLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVHdGs6OnBhaW50VGV4dEZpZWxkKTogSW4gR1RLKyAzLjIwIHRoZSBDU1MgZ2FkZ2V0cyB1c2Vk
IHRvIHJlbmRlciBzcGluIGJ1dHRvbnMgYXJlCisgICAgICAgIGRpZmZlcmVudCwgc28gd2UgY2hl
Y2sgaGVyZSBpZiB0aGlzIGlzIHRoZSBlbnRyeSBvZiBhIHNwaW4gYnV0dG9uIHRvIHVzZSB0aGUg
cmlnaHQgZ2FkZ2V0cy4KKyAgICAgICAgKFdlYkNvcmU6OmFkanVzdFNlYXJjaEZpZWxkSWNvblN0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpwYWludFRleHRBcmVhKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVsZFJlc3Vs
dHNCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6cGFpbnRT
ZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVH
dGs6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9u
U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6cGFpbnRTZWFyY2hGaWVsZEljb24pOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3Jh
dGlvblBhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OnBhaW50U2VhcmNo
RmllbGRDYW5jZWxCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6Y2VudGVyUmVjdFZlcnRpY2Fs
bHlJblBhcmVudElucHV0RWxlbWVudCk6IE1vdmVkIGluc2lkZSBhIEdUSysgPCAzLjIwIGlmZGVm
IGJsb2NrLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OnBhaW50U2xpZGVyVHJh
Y2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OmFkanVzdFNsaWRlclRodW1i
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6cGFpbnRTbGlkZXJUaHVt
Yik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6cHJvZ3Jlc3NCYXJSZWN0Rm9y
Qm91bmRzKTogRW5zdXJlIGEgbWluaW11bSBzaXplIG9mIHByb2dyZXNzIGJhcnMgaW4gR1RLKyAz
LjIwLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OnBhaW50UHJvZ3Jlc3NCYXIp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OmlubmVyU3BpbkJ1dHRvbkxheW91
dCk6IFVzZSBhbiBob3Jpem9udGFsIGxheW91dCBmb3Igc3BpbiBidXR0b25zLgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OmFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpwYWludElubmVyU3BpbkJ1dHRvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpzdHlsZUNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lR3RrOjpwYWludE1lZGlhQnV0dG9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhl
bWVHdGsuaDoKKwogMjAxNi0wMy0yOSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGln
YWxpYS5jb20+CiAKICAgICAgICAgQWRkIGEgc2V0dGluZyB0byBkZWNpZGUgd2hldGhlciB0byBh
bGxvdyBzdGFsZSBkYXRhIGFmdGVyIHNlc3Npb24gcmVzdG9yZSBvciBub3QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZv
cm1HVEsuY21ha2UKaW5kZXggYWYyOWExMS4uYTYwNDcwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsu
Y21ha2UKQEAgLTIyMSw2ICsyMjEsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlUGxhdGZvcm1HVEtf
U09VUkNFUwogICAgIHBsYXRmb3JtL2d0ay9QbGF0Zm9ybU1vdXNlRXZlbnRHdGsuY3BwCiAgICAg
cGxhdGZvcm0vZ3RrL1BsYXRmb3JtU2NyZWVuR3RrLmNwcAogICAgIHBsYXRmb3JtL2d0ay9QbGF0
Zm9ybVdoZWVsRXZlbnRHdGsuY3BwCisgICAgcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR2FkZ2V0
LmNwcAogICAgIHBsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0ay5jcHAKICAgICBwbGF0Zm9y
bS9ndGsvU291bmRHdGsuY3BwCiAgICAgcGxhdGZvcm0vZ3RrL1dpZGdldEd0ay5jcHAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1NwaW5CdXR0b25FbGVtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1NwaW5CdXR0b25FbGVtZW50LmNwcAppbmRleCBi
NzQ2MjZmLi5mODI3N2EwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9T
cGluQnV0dG9uRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvU3Bp
bkJ1dHRvbkVsZW1lbnQuY3BwCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiTW91c2VFdmVu
dC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJCb3guaCIKKyNpbmNsdWRl
ICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCiAjaW5jbHVkZSAi
V2hlZWxFdmVudC5oIgogI2luY2x1ZGUgPHd0Zi9SZWYuaD4KQEAgLTEyMiw3ICsxMjMsMTcgQEAg
dm9pZCBTcGluQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQp
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgVXBEb3duU3Rh
dGUgb2xkVXBEb3duU3RhdGUgPSBtX3VwRG93blN0YXRlOwotICAgICAgICAgICAgbV91cERvd25T
dGF0ZSA9IGxvY2FsLnkoKSA8IGJveC0+aGVpZ2h0KCkgLyAyID8gVXAgOiBEb3duOworICAgICAg
ICAgICAgc3dpdGNoIChyZW5kZXJlcigpLT50aGVtZSgpLmlubmVyU3BpbkJ1dHRvbkxheW91dCgq
cmVuZGVyZXIoKSkpIHsKKyAgICAgICAgICAgIGNhc2UgUmVuZGVyVGhlbWU6OklubmVyU3BpbkJ1
dHRvbkxheW91dDo6VmVydGljYWw6CisgICAgICAgICAgICAgICAgbV91cERvd25TdGF0ZSA9IGxv
Y2FsLnkoKSA8IGJveC0+aGVpZ2h0KCkgLyAyID8gVXAgOiBEb3duOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBSZW5kZXJUaGVtZTo6SW5uZXJTcGluQnV0dG9uTGF5
b3V0OjpIb3Jpem9udGFsVXBMZWZ0OgorICAgICAgICAgICAgICAgIG1fdXBEb3duU3RhdGUgPSBs
b2NhbC54KCkgPCBib3gtPndpZHRoKCkgLyAyID8gVXAgOiBEb3duOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBSZW5kZXJUaGVtZTo6SW5uZXJTcGluQnV0dG9uTGF5
b3V0OjpIb3Jpem9udGFsVXBSaWdodDoKKyAgICAgICAgICAgICAgICBtX3VwRG93blN0YXRlID0g
bG9jYWwueCgpID4gYm94LT53aWR0aCgpIC8gMiA/IFVwIDogRG93bjsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChtX3VwRG93blN0YXRlICE9
IG9sZFVwRG93blN0YXRlKQogICAgICAgICAgICAgICAgIHJlbmRlcmVyKCktPnJlcGFpbnQoKTsK
ICAgICAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9SZW5kZXJUaGVtZUdhZGdldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVu
ZGVyVGhlbWVHYWRnZXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0
YTE4ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVu
ZGVyVGhlbWVHYWRnZXQuY3BwCkBAIC0wLDAgKzEsMzE5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE2IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW5kZXJUaGVtZUdhZGdldC5o
IgorCisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMjAsIDApCisKKyNpbmNsdWRlICJGbG9hdFJl
Y3QuaCIKKyNpbmNsdWRlICJHUmVmUHRyR3RrLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
c3RkOjp1bmlxdWVfcHRyPFJlbmRlclRoZW1lR2FkZ2V0PiBSZW5kZXJUaGVtZUdhZGdldDo6Y3Jl
YXRlKGNvbnN0IFJlbmRlclRoZW1lR2FkZ2V0OjpJbmZvJiBpbmZvLCBSZW5kZXJUaGVtZUdhZGdl
dCogcGFyZW50LCBjb25zdCBWZWN0b3I8UmVuZGVyVGhlbWVHYWRnZXQ6OkluZm8+IHNpYmxpbmdz
LCB1bnNpZ25lZCBwb3NpdGlvbikKK3sKKyAgICBzd2l0Y2ggKGluZm8udHlwZSkgeworICAgIGNh
c2UgUmVuZGVyVGhlbWVHYWRnZXQ6OlR5cGU6OkdlbmVyaWM6CisgICAgICAgIHJldHVybiBzdGQ6
Om1ha2VfdW5pcXVlPFJlbmRlclRoZW1lR2FkZ2V0PihpbmZvLCBwYXJlbnQsIHNpYmxpbmdzLCBw
b3NpdGlvbik7CisgICAgY2FzZSBSZW5kZXJUaGVtZUdhZGdldDo6VHlwZTo6VGV4dEZpZWxkOgor
ICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxSZW5kZXJUaGVtZVRleHRGaWVsZEdhZGdl
dD4oaW5mbywgcGFyZW50LCBzaWJsaW5ncywgcG9zaXRpb24pOworICAgIGNhc2UgUmVuZGVyVGhl
bWVHYWRnZXQ6OlR5cGU6OlJhZGlvOgorICAgIGNhc2UgUmVuZGVyVGhlbWVHYWRnZXQ6OlR5cGU6
OkNoZWNrOgorICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxSZW5kZXJUaGVtZVRvZ2ds
ZUdhZGdldD4oaW5mbywgcGFyZW50LCBzaWJsaW5ncywgcG9zaXRpb24pOworICAgIGNhc2UgUmVu
ZGVyVGhlbWVHYWRnZXQ6OlR5cGU6OkFycm93OgorICAgICAgICByZXR1cm4gc3RkOjptYWtlX3Vu
aXF1ZTxSZW5kZXJUaGVtZUFycm93R2FkZ2V0PihpbmZvLCBwYXJlbnQsIHNpYmxpbmdzLCBwb3Np
dGlvbik7CisgICAgY2FzZSBSZW5kZXJUaGVtZUdhZGdldDo6VHlwZTo6SWNvbjoKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8UmVuZGVyVGhlbWVJY29uR2FkZ2V0PihpbmZvLCBwYXJl
bnQsIHNpYmxpbmdzLCBwb3NpdGlvbik7CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3N0YXRpYyBHUmVmUHRyPEd0a1N0eWxlQ29u
dGV4dD4gY3JlYXRlU3R5bGVDb250ZXh0KEd0a1dpZGdldFBhdGgqIHBhdGgsIEd0a1N0eWxlQ29u
dGV4dCogcGFyZW50KQoreworICAgIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBjb250ZXh0ID0g
YWRvcHRHUmVmKGd0a19zdHlsZV9jb250ZXh0X25ldygpKTsKKyAgICBndGtfc3R5bGVfY29udGV4
dF9zZXRfcGF0aChjb250ZXh0LmdldCgpLCBwYXRoKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9z
ZXRfcGFyZW50KGNvbnRleHQuZ2V0KCksIHBhcmVudCk7CisgICAgLy8gVW5mb3J0dW5hdGVseSwg
d2UgaGF2ZSB0byBleHBsaWNpdGx5IHNldCB0aGUgc3RhdGUgYWdhaW4gaGVyZSBmb3IgaXQgdG8g
dGFrZSBlZmZlY3QuCisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3N0YXRlKGNvbnRleHQuZ2V0
KCksIGd0a193aWRnZXRfcGF0aF9pdGVyX2dldF9zdGF0ZShwYXRoLCAtMSkpOworICAgIHJldHVy
biBjb250ZXh0OworfQorCitzdGF0aWMgdm9pZCBhcHBlbmRFbGVtZW50VG9QYXRoKEd0a1dpZGdl
dFBhdGgqIHBhdGgsIGNvbnN0IFJlbmRlclRoZW1lR2FkZ2V0OjpJbmZvJiBpbmZvKQoreworICAg
IGd0a193aWRnZXRfcGF0aF9hcHBlbmRfdHlwZShwYXRoLCBHX1RZUEVfTk9ORSk7CisgICAgZ3Rr
X3dpZGdldF9wYXRoX2l0ZXJfc2V0X29iamVjdF9uYW1lKHBhdGgsIC0xLCBpbmZvLm5hbWUpOwor
ICAgIGZvciAoY29uc3QgYXV0byogY2xhc3NOYW1lIDogaW5mby5jbGFzc0xpc3QpCisgICAgICAg
IGd0a193aWRnZXRfcGF0aF9pdGVyX2FkZF9jbGFzcyhwYXRoLCAtMSwgY2xhc3NOYW1lKTsKKyAg
ICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9zZXRfc3RhdGUocGF0aCwgLTEsIHN0YXRpY19jYXN0PEd0
a1N0YXRlRmxhZ3M+KGd0a193aWRnZXRfcGF0aF9pdGVyX2dldF9zdGF0ZShwYXRoLCAtMSkgfCBp
bmZvLnN0YXRlKSk7Cit9CisKK1JlbmRlclRoZW1lR2FkZ2V0OjpSZW5kZXJUaGVtZUdhZGdldChj
b25zdCBSZW5kZXJUaGVtZUdhZGdldDo6SW5mbyYgaW5mbywgUmVuZGVyVGhlbWVHYWRnZXQqIHBh
cmVudCwgY29uc3QgVmVjdG9yPFJlbmRlclRoZW1lR2FkZ2V0OjpJbmZvPiBzaWJsaW5ncywgdW5z
aWduZWQgcG9zaXRpb24pCit7CisgICAgR1JlZlB0cjxHdGtXaWRnZXRQYXRoPiBwYXRoID0gcGFy
ZW50ID8gYWRvcHRHUmVmKGd0a193aWRnZXRfcGF0aF9jb3B5KGd0a19zdHlsZV9jb250ZXh0X2dl
dF9wYXRoKHBhcmVudC0+Y29udGV4dCgpKSkpIDogYWRvcHRHUmVmKGd0a193aWRnZXRfcGF0aF9u
ZXcoKSk7CisgICAgaWYgKCFzaWJsaW5ncy5pc0VtcHR5KCkpIHsKKyAgICAgICAgR1JlZlB0cjxH
dGtXaWRnZXRQYXRoPiBzaWJsaW5nc1BhdGggPSBhZG9wdEdSZWYoZ3RrX3dpZGdldF9wYXRoX25l
dygpKTsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBzaWJsaW5nSW5mbyA6IHNpYmxpbmdzKQor
ICAgICAgICAgICAgYXBwZW5kRWxlbWVudFRvUGF0aChzaWJsaW5nc1BhdGguZ2V0KCksIHNpYmxp
bmdJbmZvKTsKKyAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2FwcGVuZF93aXRoX3NpYmxpbmdzKHBh
dGguZ2V0KCksIHNpYmxpbmdzUGF0aC5nZXQoKSwgcG9zaXRpb24pOworICAgIH0gZWxzZQorICAg
ICAgICBhcHBlbmRFbGVtZW50VG9QYXRoKHBhdGguZ2V0KCksIGluZm8pOworICAgIG1fY29udGV4
dCA9IGNyZWF0ZVN0eWxlQ29udGV4dChwYXRoLmdldCgpLCBwYXJlbnQgPyBwYXJlbnQtPmNvbnRl
eHQoKSA6IG51bGxwdHIpOworfQorCitSZW5kZXJUaGVtZUdhZGdldDo6flJlbmRlclRoZW1lR2Fk
Z2V0KCkKK3sKK30KKworR3RrQm9yZGVyIFJlbmRlclRoZW1lR2FkZ2V0OjptYXJnaW5Cb3goKSBj
b25zdAoreworICAgIEd0a0JvcmRlciByZXR1cm5WYWx1ZTsKKyAgICBndGtfc3R5bGVfY29udGV4
dF9nZXRfbWFyZ2luKG1fY29udGV4dC5nZXQoKSwgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0YXRl
KG1fY29udGV4dC5nZXQoKSksICZyZXR1cm5WYWx1ZSk7CisgICAgcmV0dXJuIHJldHVyblZhbHVl
OworfQorCitHdGtCb3JkZXIgUmVuZGVyVGhlbWVHYWRnZXQ6OmJvcmRlckJveCgpIGNvbnN0Cit7
CisgICAgR3RrQm9yZGVyIHJldHVyblZhbHVlOworICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9i
b3JkZXIobV9jb250ZXh0LmdldCgpLCBndGtfc3R5bGVfY29udGV4dF9nZXRfc3RhdGUobV9jb250
ZXh0LmdldCgpKSwgJnJldHVyblZhbHVlKTsKKyAgICByZXR1cm4gcmV0dXJuVmFsdWU7Cit9CisK
K0d0a0JvcmRlciBSZW5kZXJUaGVtZUdhZGdldDo6cGFkZGluZ0JveCgpIGNvbnN0Cit7CisgICAg
R3RrQm9yZGVyIHJldHVyblZhbHVlOworICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9wYWRkaW5n
KG1fY29udGV4dC5nZXQoKSwgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0YXRlKG1fY29udGV4dC5n
ZXQoKSksICZyZXR1cm5WYWx1ZSk7CisgICAgcmV0dXJuIHJldHVyblZhbHVlOworfQorCitHdGtC
b3JkZXIgUmVuZGVyVGhlbWVHYWRnZXQ6OmNvbnRlbnRzQm94KCkgY29uc3QKK3sKKyAgICBhdXRv
IG1hcmdpbiA9IG1hcmdpbkJveCgpOworICAgIGF1dG8gYm9yZGVyID0gYm9yZGVyQm94KCk7Cisg
ICAgYXV0byBwYWRkaW5nID0gcGFkZGluZ0JveCgpOworICAgIHBhZGRpbmcubGVmdCArPSBtYXJn
aW4ubGVmdCArIGJvcmRlci5sZWZ0OworICAgIHBhZGRpbmcucmlnaHQgKz0gbWFyZ2luLnJpZ2h0
ICsgYm9yZGVyLnJpZ2h0OworICAgIHBhZGRpbmcudG9wICs9IG1hcmdpbi50b3AgKyBib3JkZXIu
dG9wOworICAgIHBhZGRpbmcuYm90dG9tICs9IG1hcmdpbi5ib3R0b20gKyBib3JkZXIuYm90dG9t
OworICAgIHJldHVybiBwYWRkaW5nOworfQorCitDb2xvciBSZW5kZXJUaGVtZUdhZGdldDo6Y29s
b3IoKSBjb25zdAoreworICAgIEdka1JHQkEgcmV0dXJuVmFsdWU7CisgICAgZ3RrX3N0eWxlX2Nv
bnRleHRfZ2V0X2NvbG9yKG1fY29udGV4dC5nZXQoKSwgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0
YXRlKG1fY29udGV4dC5nZXQoKSksICZyZXR1cm5WYWx1ZSk7CisgICAgcmV0dXJuIHJldHVyblZh
bHVlOworfQorCitDb2xvciBSZW5kZXJUaGVtZUdhZGdldDo6YmFja2dyb3VuZENvbG9yKCkgY29u
c3QKK3sKKyAgICBHZGtSR0JBIHJldHVyblZhbHVlOworICAgIGd0a19zdHlsZV9jb250ZXh0X2dl
dF9iYWNrZ3JvdW5kX2NvbG9yKG1fY29udGV4dC5nZXQoKSwgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0
X3N0YXRlKG1fY29udGV4dC5nZXQoKSksICZyZXR1cm5WYWx1ZSk7CisgICAgcmV0dXJuIHJldHVy
blZhbHVlOworfQorCitJbnRTaXplIFJlbmRlclRoZW1lR2FkZ2V0OjptaW5pbXVtU2l6ZSgpIGNv
bnN0Cit7CisgICAgaW50IHdpZHRoLCBoZWlnaHQ7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0
KG1fY29udGV4dC5nZXQoKSwgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0YXRlKG1fY29udGV4dC5n
ZXQoKSksICJtaW4td2lkdGgiLCAmd2lkdGgsICJtaW4taGVpZ2h0IiwgJmhlaWdodCwgbnVsbHB0
cik7CisgICAgcmV0dXJuIEludFNpemUod2lkdGgsIGhlaWdodCk7Cit9CisKK0ludFNpemUgUmVu
ZGVyVGhlbWVHYWRnZXQ6OnByZWZlcnJlZFNpemUoKSBjb25zdAoreworICAgIGF1dG8gbWFyZ2lu
ID0gbWFyZ2luQm94KCk7CisgICAgYXV0byBib3JkZXIgPSBib3JkZXJCb3goKTsKKyAgICBhdXRv
IHBhZGRpbmcgPSBwYWRkaW5nQm94KCk7CisgICAgYXV0byBtaW5TaXplID0gbWluaW11bVNpemUo
KTsKKyAgICBtaW5TaXplLmV4cGFuZChtYXJnaW4ubGVmdCArIG1hcmdpbi5yaWdodCArIGJvcmRl
ci5sZWZ0ICsgYm9yZGVyLnJpZ2h0ICsgcGFkZGluZy5sZWZ0ICsgcGFkZGluZy5yaWdodCwKKyAg
ICAgICAgbWFyZ2luLnRvcCArIG1hcmdpbi5ib3R0b20gKyBib3JkZXIudG9wICsgYm9yZGVyLmJv
dHRvbSArIHBhZGRpbmcudG9wICsgcGFkZGluZy5ib3R0b20pOworICAgIHJldHVybiBtaW5TaXpl
OworfQorCitib29sIFJlbmRlclRoZW1lR2FkZ2V0OjpyZW5kZXIoY2Fpcm9fdCogY3IsIGNvbnN0
IEZsb2F0UmVjdCYgcGFpbnRSZWN0LCBGbG9hdFJlY3QqIGNvbnRlbnRzUmVjdCkKK3sKKyAgICBG
bG9hdFJlY3QgcmVjdCA9IHBhaW50UmVjdDsKKworICAgIGF1dG8gbWFyZ2luID0gbWFyZ2luQm94
KCk7CisgICAgcmVjdC5tb3ZlKG1hcmdpbi5sZWZ0LCBtYXJnaW4udG9wKTsKKyAgICByZWN0LmNv
bnRyYWN0KG1hcmdpbi5sZWZ0ICsgbWFyZ2luLnJpZ2h0LCBtYXJnaW4udG9wICsgbWFyZ2luLmJv
dHRvbSk7CisKKyAgICBhdXRvIG1pblNpemUgPSBtaW5pbXVtU2l6ZSgpOworICAgIHJlY3Quc2V0
V2lkdGgoc3RkOjptYXg8ZmxvYXQ+KHJlY3Qud2lkdGgoKSwgbWluU2l6ZS53aWR0aCgpKSk7Cisg
ICAgcmVjdC5zZXRIZWlnaHQoc3RkOjptYXg8ZmxvYXQ+KHJlY3QuaGVpZ2h0KCksIG1pblNpemUu
aGVpZ2h0KCkpKTsKKworICAgIGd0a19yZW5kZXJfYmFja2dyb3VuZChtX2NvbnRleHQuZ2V0KCks
IGNyLCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7Cisg
ICAgZ3RrX3JlbmRlcl9mcmFtZShtX2NvbnRleHQuZ2V0KCksIGNyLCByZWN0LngoKSwgcmVjdC55
KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisKKyAgICBpZiAoY29udGVudHNSZWN0
KSB7CisgICAgICAgIGF1dG8gYm9yZGVyID0gYm9yZGVyQm94KCk7CisgICAgICAgIGF1dG8gcGFk
ZGluZyA9IHBhZGRpbmdCb3goKTsKKyAgICAgICAgKmNvbnRlbnRzUmVjdCA9IHJlY3Q7CisgICAg
ICAgIGNvbnRlbnRzUmVjdC0+bW92ZShib3JkZXIubGVmdCArIHBhZGRpbmcubGVmdCwgYm9yZGVy
LnRvcCArIHBhZGRpbmcudG9wKTsKKyAgICAgICAgY29udGVudHNSZWN0LT5jb250cmFjdChib3Jk
ZXIubGVmdCArIGJvcmRlci5yaWdodCArIHBhZGRpbmcubGVmdCArIHBhZGRpbmcucmlnaHQsIGJv
cmRlci50b3AgKyBib3JkZXIuYm90dG9tICsgcGFkZGluZy50b3AgKyBwYWRkaW5nLmJvdHRvbSk7
CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVHYWRnZXQ6
OnJlbmRlckZvY3VzKGNhaXJvX3QqIGNyLCBjb25zdCBGbG9hdFJlY3QmIGZvY3VzUmVjdCkKK3sK
KyAgICBGbG9hdFJlY3QgcmVjdCA9IGZvY3VzUmVjdDsKKyAgICBhdXRvIG1hcmdpbiA9IG1hcmdp
bkJveCgpOworICAgIHJlY3QubW92ZShtYXJnaW4ubGVmdCwgbWFyZ2luLnRvcCk7CisgICAgcmVj
dC5jb250cmFjdChtYXJnaW4ubGVmdCArIG1hcmdpbi5yaWdodCwgbWFyZ2luLnRvcCArIG1hcmdp
bi5ib3R0b20pOworICAgIGd0a19yZW5kZXJfZm9jdXMobV9jb250ZXh0LmdldCgpLCBjciwgcmVj
dC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworfQorCitSZW5k
ZXJUaGVtZUJveEdhZGdldDo6UmVuZGVyVGhlbWVCb3hHYWRnZXQoY29uc3QgUmVuZGVyVGhlbWVH
YWRnZXQ6OkluZm8mIGluZm8sIGNvbnN0IFZlY3RvcjxSZW5kZXJUaGVtZUdhZGdldDo6SW5mbz4g
Y2hpbGRyZW4sIFJlbmRlclRoZW1lR2FkZ2V0KiBwYXJlbnQpCisgICAgOiBSZW5kZXJUaGVtZUdh
ZGdldChpbmZvLCBwYXJlbnQsIFZlY3RvcjxSZW5kZXJUaGVtZUdhZGdldDo6SW5mbz4oKSwgMCkK
K3sKKyAgICBtX2NoaWxkcmVuLnJlc2VydmVDYXBhY2l0eShjaGlsZHJlbi5zaXplKCkpOworICAg
IHVuc2lnbmVkIGluZGV4ID0gMDsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGNoaWxkSW5mbyA6IGNo
aWxkcmVuKQorICAgICAgICBtX2NoaWxkcmVuLnVuY2hlY2tlZEFwcGVuZChSZW5kZXJUaGVtZUdh
ZGdldDo6Y3JlYXRlKGNoaWxkSW5mbywgdGhpcywgY2hpbGRyZW4sIGluZGV4KyspKTsKK30KKwor
UmVuZGVyVGhlbWVUZXh0RmllbGRHYWRnZXQ6OlJlbmRlclRoZW1lVGV4dEZpZWxkR2FkZ2V0KGNv
bnN0IFJlbmRlclRoZW1lR2FkZ2V0OjpJbmZvJiBpbmZvLCBSZW5kZXJUaGVtZUdhZGdldCogcGFy
ZW50LCBjb25zdCBWZWN0b3I8UmVuZGVyVGhlbWVHYWRnZXQ6OkluZm8+IHNpYmxpbmdzLCB1bnNp
Z25lZCBwb3NpdGlvbikKKyAgICA6IFJlbmRlclRoZW1lR2FkZ2V0KGluZm8sIHBhcmVudCwgc2li
bGluZ3MsIHBvc2l0aW9uKQoreworfQorCitJbnRTaXplIFJlbmRlclRoZW1lVGV4dEZpZWxkR2Fk
Z2V0OjptaW5pbXVtU2l6ZSgpIGNvbnN0Cit7CisgICAgLy8gV2UgYWxsb3cgdGV4dCBmaWVsZHMg
c21hbGxlciB0aGFuIHRoZSBtaW4gc2l6ZSBzZXQgb24gdGhlbWVzLgorICAgIHJldHVybiBJbnRT
aXplKCk7Cit9CisKK1JlbmRlclRoZW1lVG9nZ2xlR2FkZ2V0OjpSZW5kZXJUaGVtZVRvZ2dsZUdh
ZGdldChjb25zdCBSZW5kZXJUaGVtZUdhZGdldDo6SW5mbyYgaW5mbywgUmVuZGVyVGhlbWVHYWRn
ZXQqIHBhcmVudCwgY29uc3QgVmVjdG9yPFJlbmRlclRoZW1lR2FkZ2V0OjpJbmZvPiBzaWJsaW5n
cywgdW5zaWduZWQgcG9zaXRpb24pCisgICAgOiBSZW5kZXJUaGVtZUdhZGdldChpbmZvLCBwYXJl
bnQsIHNpYmxpbmdzLCBwb3NpdGlvbikKKyAgICAsIG1fdHlwZShpbmZvLnR5cGUpCit7CisgICAg
QVNTRVJUKG1fdHlwZSA9PSBSZW5kZXJUaGVtZUdhZGdldDo6VHlwZTo6UmFkaW8gfHwgbV90eXBl
ID09IFJlbmRlclRoZW1lR2FkZ2V0OjpUeXBlOjpDaGVjayk7Cit9CisKK2Jvb2wgUmVuZGVyVGhl
bWVUb2dnbGVHYWRnZXQ6OnJlbmRlcihjYWlyb190KiBjciwgY29uc3QgRmxvYXRSZWN0JiBwYWlu
dFJlY3QsIEZsb2F0UmVjdCopCit7CisgICAgRmxvYXRSZWN0IGNvbnRlbnRzUmVjdDsKKyAgICBS
ZW5kZXJUaGVtZUdhZGdldDo6cmVuZGVyKGNyLCBwYWludFJlY3QsICZjb250ZW50c1JlY3QpOwor
ICAgIGlmIChtX3R5cGUgPT0gUmVuZGVyVGhlbWVHYWRnZXQ6OlR5cGU6OlJhZGlvKQorICAgICAg
ICBndGtfcmVuZGVyX29wdGlvbihtX2NvbnRleHQuZ2V0KCksIGNyLCBjb250ZW50c1JlY3QueCgp
LCBjb250ZW50c1JlY3QueSgpLCBjb250ZW50c1JlY3Qud2lkdGgoKSwgY29udGVudHNSZWN0Lmhl
aWdodCgpKTsKKyAgICBlbHNlCisgICAgICAgIGd0a19yZW5kZXJfY2hlY2sobV9jb250ZXh0Lmdl
dCgpLCBjciwgY29udGVudHNSZWN0LngoKSwgY29udGVudHNSZWN0LnkoKSwgY29udGVudHNSZWN0
LndpZHRoKCksIGNvbnRlbnRzUmVjdC5oZWlnaHQoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K1JlbmRlclRoZW1lQXJyb3dHYWRnZXQ6OlJlbmRlclRoZW1lQXJyb3dHYWRnZXQoY29uc3QgUmVu
ZGVyVGhlbWVHYWRnZXQ6OkluZm8mIGluZm8sIFJlbmRlclRoZW1lR2FkZ2V0KiBwYXJlbnQsIGNv
bnN0IFZlY3RvcjxSZW5kZXJUaGVtZUdhZGdldDo6SW5mbz4gc2libGluZ3MsIHVuc2lnbmVkIHBv
c2l0aW9uKQorICAgIDogUmVuZGVyVGhlbWVHYWRnZXQoaW5mbywgcGFyZW50LCBzaWJsaW5ncywg
cG9zaXRpb24pCit7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVBcnJvd0dhZGdldDo6cmVuZGVyKGNh
aXJvX3QqIGNyLCBjb25zdCBGbG9hdFJlY3QmIHBhaW50UmVjdCwgRmxvYXRSZWN0KikKK3sKKyAg
ICBGbG9hdFJlY3QgY29udGVudHNSZWN0OworICAgIFJlbmRlclRoZW1lR2FkZ2V0OjpyZW5kZXIo
Y3IsIHBhaW50UmVjdCwgJmNvbnRlbnRzUmVjdCk7CisgICAgSW50U2l6ZSBtaW5TaXplID0gbWlu
aW11bVNpemUoKTsKKyAgICBpbnQgYXJyb3dTaXplID0gc3RkOjptaW4obWluU2l6ZS53aWR0aCgp
LCBtaW5TaXplLmhlaWdodCgpKTsKKyAgICBGbG9hdFBvaW50IGFycm93UG9zaXRpb24oY29udGVu
dHNSZWN0LngoKSwgY29udGVudHNSZWN0LnkoKSArIChjb250ZW50c1JlY3QuaGVpZ2h0KCkgLSBh
cnJvd1NpemUpIC8gMik7CisgICAgaWYgKGd0a19zdHlsZV9jb250ZXh0X2dldF9zdGF0ZShtX2Nv
bnRleHQuZ2V0KCkpICYgR1RLX1NUQVRFX0ZMQUdfRElSX0xUUikKKyAgICAgICAgYXJyb3dQb3Np
dGlvbi5tb3ZlKGNvbnRlbnRzUmVjdC53aWR0aCgpIC0gYXJyb3dTaXplLCAwKTsKKyAgICBndGtf
cmVuZGVyX2Fycm93KG1fY29udGV4dC5nZXQoKSwgY3IsIEdfUEkgLyAyLCBhcnJvd1Bvc2l0aW9u
LngoKSwgYXJyb3dQb3NpdGlvbi55KCksIGFycm93U2l6ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK1JlbmRlclRoZW1lSWNvbkdhZGdldDo6UmVuZGVyVGhlbWVJY29uR2FkZ2V0KGNvbnN0IFJl
bmRlclRoZW1lR2FkZ2V0OjpJbmZvJiBpbmZvLCBSZW5kZXJUaGVtZUdhZGdldCogcGFyZW50LCBj
b25zdCBWZWN0b3I8UmVuZGVyVGhlbWVHYWRnZXQ6OkluZm8+IHNpYmxpbmdzLCB1bnNpZ25lZCBw
b3NpdGlvbikKKyAgICA6IFJlbmRlclRoZW1lR2FkZ2V0KGluZm8sIHBhcmVudCwgc2libGluZ3Ms
IHBvc2l0aW9uKQoreworfQorCitHdGtJY29uU2l6ZSBSZW5kZXJUaGVtZUljb25HYWRnZXQ6Omd0
a0ljb25TaXplRm9yUGl4ZWxTaXplKHVuc2lnbmVkIHBpeGVsU2l6ZSkgY29uc3QKK3sKKyAgICBp
ZiAocGl4ZWxTaXplIDwgSWNvblNpemVHdGs6OlNtYWxsVG9vbGJhcikKKyAgICAgICAgcmV0dXJu
IEdUS19JQ09OX1NJWkVfTUVOVTsKKyAgICBpZiAocGl4ZWxTaXplID49IEljb25TaXplR3RrOjpT
bWFsbFRvb2xiYXIgJiYgcGl4ZWxTaXplIDwgSWNvblNpemVHdGs6OkJ1dHRvbikKKyAgICAgICAg
cmV0dXJuIEdUS19JQ09OX1NJWkVfU01BTExfVE9PTEJBUjsKKyAgICBpZiAocGl4ZWxTaXplID49
IEljb25TaXplR3RrOjpCdXR0b24gJiYgcGl4ZWxTaXplIDwgSWNvblNpemVHdGs6OkxhcmdlVG9v
bGJhcikKKyAgICAgICAgcmV0dXJuIEdUS19JQ09OX1NJWkVfQlVUVE9OOworICAgIGlmIChwaXhl
bFNpemUgPj0gSWNvblNpemVHdGs6OkxhcmdlVG9vbGJhciAmJiBwaXhlbFNpemUgPCBJY29uU2l6
ZUd0azo6RHJhZ0FuZERyb3ApCisgICAgICAgIHJldHVybiBHVEtfSUNPTl9TSVpFX0xBUkdFX1RP
T0xCQVI7CisgICAgaWYgKHBpeGVsU2l6ZSA+PSBJY29uU2l6ZUd0azo6RHJhZ0FuZERyb3AgJiYg
cGl4ZWxTaXplIDwgSWNvblNpemVHdGs6OkRpYWxvZykKKyAgICAgICAgcmV0dXJuIEdUS19JQ09O
X1NJWkVfRE5EOworCisgICAgcmV0dXJuIEdUS19JQ09OX1NJWkVfRElBTE9HOworfQorCitib29s
IFJlbmRlclRoZW1lSWNvbkdhZGdldDo6cmVuZGVyKGNhaXJvX3QqIGNyLCBjb25zdCBGbG9hdFJl
Y3QmIHBhaW50UmVjdCwgRmxvYXRSZWN0KikKK3sKKyAgICBBU1NFUlQoIW1faWNvbk5hbWUuaXNO
dWxsKCkpOworICAgIEdSZWZQdHI8R0ljb24+IGljb24gPSBhZG9wdEdSZWYoZ190aGVtZWRfaWNv
bl9uZXcobV9pY29uTmFtZS5kYXRhKCkpKTsKKyAgICB1bnNpZ25lZCBsb29rdXBGbGFncyA9IEdU
S19JQ09OX0xPT0tVUF9VU0VfQlVJTFRJTiB8IEdUS19JQ09OX0xPT0tVUF9GT1JDRV9TSVpFIHwg
R1RLX0lDT05fTE9PS1VQX0ZPUkNFX1NWRzsKKyAgICBHdGtUZXh0RGlyZWN0aW9uIGRpcmVjdGlv
biA9IGd0a19zdHlsZV9jb250ZXh0X2dldF9kaXJlY3Rpb24obV9jb250ZXh0LmdldCgpKTsKKyAg
ICBpZiAoZGlyZWN0aW9uICYgR1RLX1RFWFRfRElSX0xUUikKKyAgICAgICAgbG9va3VwRmxhZ3Mg
fD0gR1RLX0lDT05fTE9PS1VQX0RJUl9MVFI7CisgICAgZWxzZSBpZiAoZGlyZWN0aW9uICYgR1RL
X1RFWFRfRElSX1JUTCkKKyAgICAgICAgbG9va3VwRmxhZ3MgfD0gR1RLX0lDT05fTE9PS1VQX0RJ
Ul9SVEw7CisgICAgaW50IGljb25XaWR0aCwgaWNvbkhlaWdodDsKKyAgICBpZiAoIWd0a19pY29u
X3NpemVfbG9va3VwKGd0a0ljb25TaXplRm9yUGl4ZWxTaXplKG1faWNvblNpemUpLCAmaWNvbldp
ZHRoLCAmaWNvbkhlaWdodCkpCisgICAgICAgIGljb25XaWR0aCA9IGljb25IZWlnaHQgPSBtX2lj
b25TaXplOworICAgIEdSZWZQdHI8R3RrSWNvbkluZm8+IGljb25JbmZvID0gYWRvcHRHUmVmKGd0
a19pY29uX3RoZW1lX2xvb2t1cF9ieV9naWNvbihndGtfaWNvbl90aGVtZV9nZXRfZGVmYXVsdCgp
LCBpY29uLmdldCgpLAorICAgICAgICBzdGQ6Om1pbihpY29uV2lkdGgsIGljb25IZWlnaHQpLCBz
dGF0aWNfY2FzdDxHdGtJY29uTG9va3VwRmxhZ3M+KGxvb2t1cEZsYWdzKSkpOworICAgIGlmICgh
aWNvbkluZm8pCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEdSZWZQdHI8R2RrUGl4YnVm
PiBpY29uUGl4YnVmID0gYWRvcHRHUmVmKGd0a19pY29uX2luZm9fbG9hZF9zeW1ib2xpY19mb3Jf
Y29udGV4dChpY29uSW5mby5nZXQoKSwgbV9jb250ZXh0LmdldCgpLCBudWxscHRyLCBudWxscHRy
KSk7CisgICAgaWYgKCFpY29uUGl4YnVmKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBG
bG9hdFNpemUgcGl4YnVmU2l6ZShnZGtfcGl4YnVmX2dldF93aWR0aChpY29uUGl4YnVmLmdldCgp
KSwgZ2RrX3BpeGJ1Zl9nZXRfaGVpZ2h0KGljb25QaXhidWYuZ2V0KCkpKTsKKyAgICBGbG9hdFJl
Y3QgY29udGVudHNSZWN0OworICAgIFJlbmRlclRoZW1lR2FkZ2V0OjpyZW5kZXIoY3IsIHBhaW50
UmVjdCwgJmNvbnRlbnRzUmVjdCk7CisgICAgaWYgKHBpeGJ1ZlNpemUud2lkdGgoKSA+IGNvbnRl
bnRzUmVjdC53aWR0aCgpIHx8IHBpeGJ1ZlNpemUuaGVpZ2h0KCkgPiBjb250ZW50c1JlY3QuaGVp
Z2h0KCkpIHsKKyAgICAgICAgaWNvbldpZHRoID0gaWNvbkhlaWdodCA9IHN0ZDo6bWluKGNvbnRl
bnRzUmVjdC53aWR0aCgpLCBjb250ZW50c1JlY3QuaGVpZ2h0KCkpOworICAgICAgICBwaXhidWZT
aXplID0gRmxvYXRTaXplKGljb25XaWR0aCwgaWNvbkhlaWdodCk7CisgICAgICAgIGljb25QaXhi
dWYgPSBhZG9wdEdSZWYoZ2RrX3BpeGJ1Zl9zY2FsZV9zaW1wbGUoaWNvblBpeGJ1Zi5nZXQoKSwg
cGl4YnVmU2l6ZS53aWR0aCgpLCBwaXhidWZTaXplLmhlaWdodCgpLCBHREtfSU5URVJQX0JJTElO
RUFSKSk7CisgICAgfQorCisgICAgZ3RrX3JlbmRlcl9pY29uKG1fY29udGV4dC5nZXQoKSwgY3Is
IGljb25QaXhidWYuZ2V0KCksIGNvbnRlbnRzUmVjdC54KCkgKyAoY29udGVudHNSZWN0LndpZHRo
KCkgLSBwaXhidWZTaXplLndpZHRoKCkpIC8gMiwKKyAgICAgICAgY29udGVudHNSZWN0LnkoKSAr
IChjb250ZW50c1JlY3QuaGVpZ2h0KCkgLSBwaXhidWZTaXplLmhlaWdodCgpKSAvIDIpOworICAg
IHJldHVybiB0cnVlOworfQorCitJbnRTaXplIFJlbmRlclRoZW1lSWNvbkdhZGdldDo6bWluaW11
bVNpemUoKSBjb25zdAoreworICAgIGlmIChtX2ljb25TaXplIDwgSWNvblNpemVHdGs6Ok1lbnUp
CisgICAgICAgIHJldHVybiBJbnRTaXplKG1faWNvblNpemUsIG1faWNvblNpemUpOworCisgICAg
aW50IGljb25XaWR0aCwgaWNvbkhlaWdodDsKKyAgICBpZiAoZ3RrX2ljb25fc2l6ZV9sb29rdXAo
Z3RrSWNvblNpemVGb3JQaXhlbFNpemUobV9pY29uU2l6ZSksICZpY29uV2lkdGgsICZpY29uSGVp
Z2h0KSkKKyAgICAgICAgcmV0dXJuIEludFNpemUoaWNvbldpZHRoLCBpY29uSGVpZ2h0KTsKKwor
ICAgIHJldHVybiBJbnRTaXplKG1faWNvblNpemUsIG1faWNvblNpemUpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAyMCwgMCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUdhZGdl
dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR2FkZ2V0LmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2MwNzJjMAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUdhZGdldC5oCkBAIC0w
LDAgKzEsMTQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IElnYWxpYSBTLkwuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSA8Z3RrL2d0ay5oPgorCisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMjAsIDApCisK
KyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgRmxvYXRSZWN0Owor
CitjbGFzcyBSZW5kZXJUaGVtZUdhZGdldCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUmVuZGVyVGhlbWVHYWRnZXQpOworcHVibGljOgor
ICAgIGVudW0gY2xhc3MgVHlwZSB7CisgICAgICAgIEdlbmVyaWMsCisgICAgICAgIFRleHRGaWVs
ZCwKKyAgICAgICAgQ2hlY2ssCisgICAgICAgIFJhZGlvLAorICAgICAgICBBcnJvdywKKyAgICAg
ICAgSWNvbgorICAgIH07CisKKyAgICBzdHJ1Y3QgSW5mbyB7CisgICAgICAgIFR5cGUgdHlwZTsK
KyAgICAgICAgY29uc3QgY2hhciogbmFtZTsKKyAgICAgICAgR3RrU3RhdGVGbGFncyBzdGF0ZTsK
KyAgICAgICAgVmVjdG9yPGNvbnN0IGNoYXIqPiBjbGFzc0xpc3Q7CisgICAgfTsKKworICAgIHN0
YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyVGhlbWVHYWRnZXQ+IGNyZWF0ZShjb25zdCBJbmZv
JiwgUmVuZGVyVGhlbWVHYWRnZXQqIHBhcmVudCA9IG51bGxwdHIsIGNvbnN0IFZlY3RvcjxSZW5k
ZXJUaGVtZUdhZGdldDo6SW5mbz4gc2libGluZ3MgPSBWZWN0b3I8UmVuZGVyVGhlbWVHYWRnZXQ6
OkluZm8+KCksIHVuc2lnbmVkIHBvc2l0aW9uID0gMCk7CisgICAgUmVuZGVyVGhlbWVHYWRnZXQo
Y29uc3QgSW5mbyYsIFJlbmRlclRoZW1lR2FkZ2V0KiBwYXJlbnQsIGNvbnN0IFZlY3RvcjxSZW5k
ZXJUaGVtZUdhZGdldDo6SW5mbz4gc2libGluZ3MsIHVuc2lnbmVkIHBvc2l0aW9uKTsKKyAgICB2
aXJ0dWFsIH5SZW5kZXJUaGVtZUdhZGdldCgpOworCisgICAgdmlydHVhbCBJbnRTaXplIHByZWZl
cnJlZFNpemUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyKGNhaXJvX3QqLCBjb25z
dCBGbG9hdFJlY3QmLCBGbG9hdFJlY3QqID0gbnVsbHB0cik7CisgICAgdmlydHVhbCBJbnRTaXpl
IG1pbmltdW1TaXplKCkgY29uc3Q7CisKKyAgICB2b2lkIHJlbmRlckZvY3VzKGNhaXJvX3QqLCBj
b25zdCBGbG9hdFJlY3QmKTsKKworICAgIEd0a0JvcmRlciBjb250ZW50c0JveCgpIGNvbnN0Owor
ICAgIENvbG9yIGNvbG9yKCkgY29uc3Q7CisgICAgQ29sb3IgYmFja2dyb3VuZENvbG9yKCkgY29u
c3Q7CisKK3Byb3RlY3RlZDoKKyAgICBHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQoKSBjb25zdCB7
IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7IH0KKyAgICBHdGtCb3JkZXIgbWFyZ2luQm94KCkgY29u
c3Q7CisgICAgR3RrQm9yZGVyIGJvcmRlckJveCgpIGNvbnN0OworICAgIEd0a0JvcmRlciBwYWRk
aW5nQm94KCkgY29uc3Q7CisKKyAgICBHUmVmUHRyPEd0a1N0eWxlQ29udGV4dD4gbV9jb250ZXh0
OworfTsKKworY2xhc3MgUmVuZGVyVGhlbWVCb3hHYWRnZXQgZmluYWwgOiBwdWJsaWMgUmVuZGVy
VGhlbWVHYWRnZXQgeworcHVibGljOgorICAgIFJlbmRlclRoZW1lQm94R2FkZ2V0KGNvbnN0IFJl
bmRlclRoZW1lR2FkZ2V0OjpJbmZvJiwgY29uc3QgVmVjdG9yPFJlbmRlclRoZW1lR2FkZ2V0OjpJ
bmZvPiBjaGlsZHJlbiwgUmVuZGVyVGhlbWVHYWRnZXQqIHBhcmVudCA9IG51bGxwdHIpOworCisg
ICAgUmVuZGVyVGhlbWVHYWRnZXQqIGNoaWxkKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVy
biBtX2NoaWxkcmVuW2luZGV4XS5nZXQoKTsgfQorCitwcml2YXRlOgorICAgIFZlY3RvcjxzdGQ6
OnVuaXF1ZV9wdHI8UmVuZGVyVGhlbWVHYWRnZXQ+PiBtX2NoaWxkcmVuOworfTsKKworY2xhc3Mg
UmVuZGVyVGhlbWVUZXh0RmllbGRHYWRnZXQgZmluYWwgOiBwdWJsaWMgUmVuZGVyVGhlbWVHYWRn
ZXQgeworcHVibGljOgorICAgIFJlbmRlclRoZW1lVGV4dEZpZWxkR2FkZ2V0KGNvbnN0IEluZm8m
LCBSZW5kZXJUaGVtZUdhZGdldCogcGFyZW50LCBjb25zdCBWZWN0b3I8UmVuZGVyVGhlbWVHYWRn
ZXQ6OkluZm8+IHNpYmxpbmdzLCB1bnNpZ25lZCBwb3NpdGlvbik7CisKKyAgICBJbnRTaXplIG1p
bmltdW1TaXplKCkgY29uc3Qgb3ZlcnJpZGU7Cit9OworCitjbGFzcyBSZW5kZXJUaGVtZVRvZ2ds
ZUdhZGdldCBmaW5hbCA6IHB1YmxpYyBSZW5kZXJUaGVtZUdhZGdldCB7CitwdWJsaWM6CisgICAg
UmVuZGVyVGhlbWVUb2dnbGVHYWRnZXQoY29uc3QgSW5mbyYsIFJlbmRlclRoZW1lR2FkZ2V0KiBw
YXJlbnQsIGNvbnN0IFZlY3RvcjxSZW5kZXJUaGVtZUdhZGdldDo6SW5mbz4gc2libGluZ3MsIHVu
c2lnbmVkIHBvc2l0aW9uKTsKKworICAgIGJvb2wgcmVuZGVyKGNhaXJvX3QqLCBjb25zdCBGbG9h
dFJlY3QmLCBGbG9hdFJlY3QqID0gbnVsbHB0cikgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAg
UmVuZGVyVGhlbWVHYWRnZXQ6OlR5cGUgbV90eXBlOworfTsKKworY2xhc3MgUmVuZGVyVGhlbWVB
cnJvd0dhZGdldCBmaW5hbCA6IHB1YmxpYyBSZW5kZXJUaGVtZUdhZGdldCB7CitwdWJsaWM6Cisg
ICAgUmVuZGVyVGhlbWVBcnJvd0dhZGdldChjb25zdCBJbmZvJiwgUmVuZGVyVGhlbWVHYWRnZXQq
IHBhcmVudCwgY29uc3QgVmVjdG9yPFJlbmRlclRoZW1lR2FkZ2V0OjpJbmZvPiBzaWJsaW5ncywg
dW5zaWduZWQgcG9zaXRpb24pOworCisgICAgYm9vbCByZW5kZXIoY2Fpcm9fdCosIGNvbnN0IEZs
b2F0UmVjdCYsIEZsb2F0UmVjdCogPSBudWxscHRyKSBvdmVycmlkZTsKK307CisKK2NsYXNzIFJl
bmRlclRoZW1lSWNvbkdhZGdldCBmaW5hbCA6IHB1YmxpYyBSZW5kZXJUaGVtZUdhZGdldCB7Citw
dWJsaWM6CisgICAgUmVuZGVyVGhlbWVJY29uR2FkZ2V0KGNvbnN0IEluZm8mLCBSZW5kZXJUaGVt
ZUdhZGdldCogcGFyZW50LCBjb25zdCBWZWN0b3I8UmVuZGVyVGhlbWVHYWRnZXQ6OkluZm8+IHNp
YmxpbmdzLCB1bnNpZ25lZCBwb3NpdGlvbik7CisKKyAgICBib29sIHJlbmRlcihjYWlyb190Kiwg
Y29uc3QgRmxvYXRSZWN0JiwgRmxvYXRSZWN0KiA9IG51bGxwdHIpIG92ZXJyaWRlOworICAgIElu
dFNpemUgbWluaW11bVNpemUoKSBjb25zdCBvdmVycmlkZTsKKworICAgIHZvaWQgc2V0SWNvbk5h
bWUoY29uc3QgY2hhciogaWNvbk5hbWUpIHsgbV9pY29uTmFtZSA9IGljb25OYW1lOyB9CisgICAg
dm9pZCBzZXRJY29uU2l6ZSh1bnNpZ25lZCBpY29uU2l6ZSkgeyBtX2ljb25TaXplID0gaWNvblNp
emU7IH0KKworICAgIC8vIERlZmluZWQgaW4gR1RLKyAoZ3RrL2d0a2ljb25mYWN0b3J5LmMpLgor
ICAgIGVudW0gSWNvblNpemVHdGsgeworICAgICAgICBNZW51ID0gMTYsCisgICAgICAgIFNtYWxs
VG9vbGJhciA9IDE4LAorICAgICAgICBCdXR0b24gPSAyMCwKKyAgICAgICAgTGFyZ2VUb29sYmFy
ID0gMjQsCisgICAgICAgIERyYWdBbmREcm9wID0gMzIsCisgICAgICAgIERpYWxvZyA9IDQ4Cisg
ICAgfTsKKworcHJpdmF0ZToKKyAgICBHdGtJY29uU2l6ZSBndGtJY29uU2l6ZUZvclBpeGVsU2l6
ZSh1bnNpZ25lZCkgY29uc3Q7CisKKyAgICBDU3RyaW5nIG1faWNvbk5hbWU7CisgICAgdW5zaWdu
ZWQgbV9pY29uU2l6ZSB7IDAgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEdUS19DSEVDS19WRVJTSU9OKDMsIDIwLCAwKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWUuaAppbmRleCA1ZDNhY2MyLi4wYzE0ZTM1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWUuaApAQCAtMjUzLDYgKzI1Myw5IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIGludCBhdHRhY2htZW50QmFzZWxpbmUoY29uc3QgUmVuZGVyQXR0YWNobWVudCYpIGNvbnN0
IHsgcmV0dXJuIC0xOyB9CiAjZW5kaWYKIAorICAgIGVudW0gY2xhc3MgSW5uZXJTcGluQnV0dG9u
TGF5b3V0IHsgVmVydGljYWwsIEhvcml6b250YWxVcExlZnQsIEhvcml6b250YWxVcFJpZ2h0IH07
CisgICAgdmlydHVhbCBJbm5lclNwaW5CdXR0b25MYXlvdXQgaW5uZXJTcGluQnV0dG9uTGF5b3V0
KGNvbnN0IFJlbmRlck9iamVjdCYpIGNvbnN0IHsgcmV0dXJuIElubmVyU3BpbkJ1dHRvbkxheW91
dDo6VmVydGljYWw7IH0KKwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgRm9udENhc2NhZGVEZXNj
cmlwdGlvbiYgY2FjaGVkU3lzdGVtRm9udERlc2NyaXB0aW9uKENTU1ZhbHVlSUQgc3lzdGVtRm9u
dElEKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ2FjaGVkU3lzdGVtRm9udERlc2Ny
aXB0aW9uKENTU1ZhbHVlSUQgc3lzdGVtRm9udElELCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJikg
Y29uc3QgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUd0ay5jcHAK
aW5kZXggN2QxOWZmNC4uNzdjYjExMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lR3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWVHdGsuY3BwCkBAIC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSAiUmVuZGVyQm94Lmgi
CiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyUHJvZ3Jlc3MuaCIK
KyNpbmNsdWRlICJSZW5kZXJUaGVtZUdhZGdldC5oIgogI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1l
R3RrLmgiCiAjaW5jbHVkZSAiU3RyaW5nVHJ1bmNhdG9yLmgiCiAjaW5jbHVkZSAiVGltZVJhbmdl
cy5oIgpAQCAtMTMzLDEwICsxMzQsMjEgQEAgaW50IFJlbmRlclRoZW1lR3RrOjpzbGlkZXJUaWNr
T2Zmc2V0RnJvbVRyYWNrQ2VudGVyKCkgY29uc3QKIAogI2lmbmRlZiBHVEtfQVBJX1ZFUlNJT05f
MgogCi0vLyBUaGlzIGlzIHRoZSBkZWZhdWx0IHZhbHVlIGRlZmluZWQgYnkgR1RLKywgd2hlcmUg
aXQgd2FzIGRlZmluZWQgYXMgTUlOX0FSUk9XX1NJWkUgaW4gZ3RrYXJyb3cuYy4KLXN0YXRpYyBj
b25zdCBpbnQgbWluQXJyb3dTaXplID0gMTU7Ci0vLyBUaGlzIGlzIHRoZSBkZWZhdWx0IHZhbHVl
IGRlZmluZWQgYnkgR1RLKywgd2hlcmUgaXQgd2FzIGRlZmluZWQgYXMgTUlOX0FSUk9XX1dJRFRI
IGluIGd0a3NwaW5idXR0b24uYy4KLXN0YXRpYyBjb25zdCBpbnQgbWluU3BpbkJ1dHRvbkFycm93
U2l6ZSA9IDY7CitzdGF0aWMgdm9pZCB0aGVtZUNoYW5nZWRDYWxsYmFjaygpCit7CisgICAgUGFn
ZTo6dXBkYXRlU3R5bGVGb3JBbGxQYWdlc0FmdGVyR2xvYmFsQ2hhbmdlSW5FbnZpcm9ubWVudCgp
OworfQorCitSZW5kZXJUaGVtZUd0azo6UmVuZGVyVGhlbWVHdGsoKQoreworICAgIHN0YXRpYyBi
b29sIHRoZW1lTW9uaXRvckluaXRpYWxpemVkID0gZmFsc2U7CisgICAgaWYgKCF0aGVtZU1vbml0
b3JJbml0aWFsaXplZCkgeworICAgICAgICBHdGtTZXR0aW5ncyogc2V0dGluZ3MgPSBndGtfc2V0
dGluZ3NfZ2V0X2RlZmF1bHQoKTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChzZXR0aW5ncywg
Im5vdGlmeTo6Z3RrLXRoZW1lLW5hbWUiLCBHX0NBTExCQUNLKHRoZW1lQ2hhbmdlZENhbGxiYWNr
KSwgbnVsbHB0cik7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Qoc2V0dGluZ3MsICJub3RpZnk6
Omd0ay1jb2xvci1zY2hlbWUiLCBHX0NBTExCQUNLKHRoZW1lQ2hhbmdlZENhbGxiYWNrKSwgbnVs
bHB0cik7CisgICAgICAgIHRoZW1lTW9uaXRvckluaXRpYWxpemVkID0gdHJ1ZTsKKyAgICB9Cit9
CiAKIGVudW0gUmVuZGVyVGhlbWVQYXJ0IHsKICAgICBFbnRyeSwKQEAgLTE0NSwxNyArMTU3LDEz
IEBAIGVudW0gUmVuZGVyVGhlbWVQYXJ0IHsKICAgICBFbnRyeUljb25SaWdodCwKICAgICBCdXR0
b24sCiAgICAgQ2hlY2tCdXR0b24sCi0gICAgQ2hlY2tCdXR0b25DaGVjaywKICAgICBSYWRpb0J1
dHRvbiwKLSAgICBSYWRpb0J1dHRvblJhZGlvLAogICAgIENvbWJvQm94LAogICAgIENvbWJvQm94
QnV0dG9uLAogICAgIENvbWJvQm94QXJyb3csCiAgICAgU2NhbGUsCi0gICAgU2NhbGVDb250ZW50
cywKICAgICBTY2FsZVRyb3VnaCwKICAgICBTY2FsZVNsaWRlciwKLSAgICBTY2FsZUhpZ2hsaWdo
dCwKICAgICBQcm9ncmVzc0JhciwKICAgICBQcm9ncmVzc0JhclRyb3VnaCwKICAgICBQcm9ncmVz
c0JhclByb2dyZXNzLApAQCAtMTY4LDIyMCArMTc2LDEwMiBAQCBlbnVtIFJlbmRlclRoZW1lUGFy
dCB7CiAjZW5kaWYKIH07CiAKLXN0YXRpYyB2b2lkIGd0a1N0eWxlQ2hhbmdlZENhbGxiYWNrKEdP
YmplY3QqLCBHUGFyYW1TcGVjKikKLXsKLSAgICBQYWdlOjp1cGRhdGVTdHlsZUZvckFsbFBhZ2Vz
QWZ0ZXJHbG9iYWxDaGFuZ2VJbkVudmlyb25tZW50KCk7Ci19CisjaWYgIUdUS19DSEVDS19WRVJT
SU9OKDMsIDIwLCAwKQorLy8gVGhpcyBpcyB0aGUgZGVmYXVsdCB2YWx1ZSBkZWZpbmVkIGJ5IEdU
SyssIHdoZXJlIGl0IHdhcyBkZWZpbmVkIGFzIE1JTl9BUlJPV19TSVpFIGluIGd0a2Fycm93LmMu
CitzdGF0aWMgY29uc3QgaW50IG1pbkFycm93U2l6ZSA9IDE1OworLy8gVGhpcyBpcyB0aGUgZGVm
YXVsdCB2YWx1ZSBkZWZpbmVkIGJ5IEdUSyssIHdoZXJlIGl0IHdhcyBkZWZpbmVkIGFzIE1JTl9B
UlJPV19XSURUSCBpbiBndGtzcGluYnV0dG9uLmMuCitzdGF0aWMgY29uc3QgaW50IG1pblNwaW5C
dXR0b25BcnJvd1NpemUgPSA2OwogCiBzdGF0aWMgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IGNy
ZWF0ZVN0eWxlQ29udGV4dChSZW5kZXJUaGVtZVBhcnQgdGhlbWVQYXJ0LCBHdGtTdHlsZUNvbnRl
eHQqIHBhcmVudCA9IG51bGxwdHIpCiB7Ci0gICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQgPSBm
YWxzZTsKLSAgICBpZiAoIWluaXRpYWxpemVkKSB7Ci0gICAgICAgIEd0a1NldHRpbmdzKiBzZXR0
aW5ncyA9IGd0a19zZXR0aW5nc19nZXRfZGVmYXVsdCgpOwotICAgICAgICBnX3NpZ25hbF9jb25u
ZWN0KHNldHRpbmdzLCAibm90aWZ5OjpndGstdGhlbWUtbmFtZSIsIEdfQ0FMTEJBQ0soZ3RrU3R5
bGVDaGFuZ2VkQ2FsbGJhY2spLCBudWxscHRyKTsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChz
ZXR0aW5ncywgIm5vdGlmeTo6Z3RrLWNvbG9yLXNjaGVtZSIsIEdfQ0FMTEJBQ0soZ3RrU3R5bGVD
aGFuZ2VkQ2FsbGJhY2spLCBudWxscHRyKTsKLSAgICAgICAgaW5pdGlhbGl6ZWQgPSB0cnVlOwot
ICAgIH0KLQogICAgIEdSZWZQdHI8R3RrV2lkZ2V0UGF0aD4gcGF0aCA9IGFkb3B0R1JlZihwYXJl
bnQgPyBndGtfd2lkZ2V0X3BhdGhfY29weShndGtfc3R5bGVfY29udGV4dF9nZXRfcGF0aChwYXJl
bnQpKSA6IGd0a193aWRnZXRfcGF0aF9uZXcoKSk7CiAKICAgICBzd2l0Y2ggKHRoZW1lUGFydCkg
ewogICAgIGNhc2UgRW50cnk6CiAgICAgICAgIGd0a193aWRnZXRfcGF0aF9hcHBlbmRfdHlwZShw
YXRoLmdldCgpLCBHVEtfVFlQRV9FTlRSWSk7Ci0jaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMTks
IDIpCi0gICAgICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX3NldF9vYmplY3RfbmFtZShwYXRoLmdl
dCgpLCAtMSwgImVudHJ5Iik7Ci0jZWxzZQogICAgICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9h
ZGRfY2xhc3MocGF0aC5nZXQoKSwgLTEsIEdUS19TVFlMRV9DTEFTU19FTlRSWSk7Ci0jZW5kaWYK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFbnRyeVNlbGVjdGlvbjoKLSAgICAgICAgZ3RrX3dp
ZGdldF9wYXRoX2FwcGVuZF90eXBlKHBhdGguZ2V0KCksIEdUS19UWVBFX0VOVFJZKTsKLSNpZiBH
VEtfQ0hFQ0tfVkVSU0lPTigzLCAxOSwgMikKLSAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJf
c2V0X29iamVjdF9uYW1lKHBhdGguZ2V0KCksIC0xLCAic2VsZWN0aW9uIik7Ci0jZWxzZQotICAg
ICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9hZGRfY2xhc3MocGF0aC5nZXQoKSwgLTEsIEdUS19T
VFlMRV9DTEFTU19FTlRSWSk7Ci0jZW5kaWYKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBFbnRy
eUljb25MZWZ0OgogICAgIGNhc2UgRW50cnlJY29uUmlnaHQ6CiAgICAgICAgIGd0a193aWRnZXRf
cGF0aF9hcHBlbmRfdHlwZShwYXRoLmdldCgpLCBHVEtfVFlQRV9FTlRSWSk7Ci0jaWYgR1RLX0NI
RUNLX1ZFUlNJT04oMywgMTksIDIpCi0gICAgICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX3NldF9v
YmplY3RfbmFtZShwYXRoLmdldCgpLCAtMSwgImltYWdlIik7Ci0gICAgICAgIGd0a193aWRnZXRf
cGF0aF9pdGVyX2FkZF9jbGFzcyhwYXRoLmdldCgpLCAtMSwgdGhlbWVQYXJ0ID09IEVudHJ5SWNv
bkxlZnQgPyAibGVmdCIgOiAicmlnaHQiKTsKLSNlbmRpZgogICAgICAgICBicmVhazsKICAgICBj
YXNlIEJ1dHRvbjoKICAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2FwcGVuZF90eXBlKHBhdGguZ2V0
KCksIEdUS19UWVBFX0JVVFRPTik7Ci0jaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMTksIDIpCi0g
ICAgICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX3NldF9vYmplY3RfbmFtZShwYXRoLmdldCgpLCAt
MSwgImJ1dHRvbiIpOwotI2Vsc2UKICAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfYWRkX2Ns
YXNzKHBhdGguZ2V0KCksIC0xLCBHVEtfU1RZTEVfQ0xBU1NfQlVUVE9OKTsKLSNlbmRpZgogICAg
ICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9hZGRfY2xhc3MocGF0aC5nZXQoKSwgLTEsICJ0ZXh0
LWJ1dHRvbiIpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENoZWNrQnV0dG9uOgogICAgICAg
ICBndGtfd2lkZ2V0X3BhdGhfYXBwZW5kX3R5cGUocGF0aC5nZXQoKSwgR1RLX1RZUEVfQ0hFQ0tf
QlVUVE9OKTsKLSNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAxOSwgMikKLSAgICAgICAgZ3RrX3dp
ZGdldF9wYXRoX2l0ZXJfc2V0X29iamVjdF9uYW1lKHBhdGguZ2V0KCksIC0xLCAiY2hlY2tidXR0
b24iKTsKLSNlbHNlCiAgICAgICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX2FkZF9jbGFzcyhwYXRo
LmdldCgpLCAtMSwgR1RLX1NUWUxFX0NMQVNTX0NIRUNLKTsKLSNlbmRpZgotICAgICAgICBicmVh
azsKLSAgICBjYXNlIENoZWNrQnV0dG9uQ2hlY2s6Ci0gICAgICAgIGd0a193aWRnZXRfcGF0aF9h
cHBlbmRfdHlwZShwYXRoLmdldCgpLCBHVEtfVFlQRV9DSEVDS19CVVRUT04pOwotI2lmIEdUS19D
SEVDS19WRVJTSU9OKDMsIDE5LCAyKQotICAgICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9zZXRf
b2JqZWN0X25hbWUocGF0aC5nZXQoKSwgLTEsICJjaGVjayIpOwotI2Vsc2UKLSAgICAgICAgZ3Rr
X3dpZGdldF9wYXRoX2l0ZXJfYWRkX2NsYXNzKHBhdGguZ2V0KCksIC0xLCBHVEtfU1RZTEVfQ0xB
U1NfQ0hFQ0spOwotI2VuZGlmCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgUmFkaW9CdXR0b246
CiAgICAgICAgIGd0a193aWRnZXRfcGF0aF9hcHBlbmRfdHlwZShwYXRoLmdldCgpLCBHVEtfVFlQ
RV9SQURJT19CVVRUT04pOwotI2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDE5LCAyKQotICAgICAg
ICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9zZXRfb2JqZWN0X25hbWUocGF0aC5nZXQoKSwgLTEsICJy
YWRpb2J1dHRvbiIpOwotI2Vsc2UKICAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfYWRkX2Ns
YXNzKHBhdGguZ2V0KCksIC0xLCBHVEtfU1RZTEVfQ0xBU1NfUkFESU8pOwotI2VuZGlmCi0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgUmFkaW9CdXR0b25SYWRpbzoKLSAgICAgICAgZ3RrX3dpZGdl
dF9wYXRoX2FwcGVuZF90eXBlKHBhdGguZ2V0KCksIEdUS19UWVBFX1JBRElPX0JVVFRPTik7Ci0j
aWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMTksIDIpCi0gICAgICAgIGd0a193aWRnZXRfcGF0aF9p
dGVyX3NldF9vYmplY3RfbmFtZShwYXRoLmdldCgpLCAtMSwgInJhZGlvIik7Ci0jZWxzZQotICAg
ICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9hZGRfY2xhc3MocGF0aC5nZXQoKSwgLTEsIEdUS19T
VFlMRV9DTEFTU19SQURJTyk7Ci0jZW5kaWYKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDb21i
b0JveDoKICAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2FwcGVuZF90eXBlKHBhdGguZ2V0KCksIEdU
S19UWVBFX0NPTUJPX0JPWCk7Ci0jaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMTksIDIpCi0gICAg
ICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX3NldF9vYmplY3RfbmFtZShwYXRoLmdldCgpLCAtMSwg
ImNvbWJvYm94Iik7Ci0jZW5kaWYKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDb21ib0JveEJ1
dHRvbjoKICAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2FwcGVuZF90eXBlKHBhdGguZ2V0KCksIEdU
S19UWVBFX0JVVFRPTik7Ci0jaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMTksIDIpCi0gICAgICAg
IGd0a193aWRnZXRfcGF0aF9pdGVyX3NldF9vYmplY3RfbmFtZShwYXRoLmdldCgpLCAtMSwgImJ1
dHRvbiIpOwotI2Vsc2UKICAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfYWRkX2NsYXNzKHBh
dGguZ2V0KCksIC0xLCBHVEtfU1RZTEVfQ0xBU1NfQlVUVE9OKTsKLSNlbmRpZgogICAgICAgICBn
dGtfd2lkZ2V0X3BhdGhfaXRlcl9hZGRfY2xhc3MocGF0aC5nZXQoKSwgLTEsICJ0ZXh0LWJ1dHRv
biIpOwogICAgICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9hZGRfY2xhc3MocGF0aC5nZXQoKSwg
LTEsICJjb21ibyIpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENvbWJvQm94QXJyb3c6CiAg
ICAgICAgIGd0a193aWRnZXRfcGF0aF9hcHBlbmRfdHlwZShwYXRoLmdldCgpLCBHVEtfVFlQRV9B
UlJPVyk7Ci0jaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMTksIDIpCi0gICAgICAgIGd0a193aWRn
ZXRfcGF0aF9pdGVyX3NldF9vYmplY3RfbmFtZShwYXRoLmdldCgpLCAtMSwgImFycm93Iik7Ci0j
ZWxzZQogICAgICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9hZGRfY2xhc3MocGF0aC5nZXQoKSwg
LTEsICJhcnJvdyIpOwotI2VuZGlmCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU2NhbGU6CiAg
ICAgICAgIGd0a193aWRnZXRfcGF0aF9hcHBlbmRfdHlwZShwYXRoLmdldCgpLCBHVEtfVFlQRV9T
Q0FMRSk7Ci0jaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMTksIDIpCi0gICAgICAgIGd0a193aWRn
ZXRfcGF0aF9pdGVyX3NldF9vYmplY3RfbmFtZShwYXRoLmdldCgpLCAtMSwgInNjYWxlIik7Ci0j
ZWxzZQogICAgICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9hZGRfY2xhc3MocGF0aC5nZXQoKSwg
LTEsIEdUS19TVFlMRV9DTEFTU19TQ0FMRSk7Ci0jZW5kaWYKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBTY2FsZUNvbnRlbnRzOgotI2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDE5LCAxMSkKLSAg
ICAgICAgZ3RrX3dpZGdldF9wYXRoX2FwcGVuZF90eXBlKHBhdGguZ2V0KCksIEdUS19UWVBFX1ND
QUxFKTsKLSAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfc2V0X29iamVjdF9uYW1lKHBhdGgu
Z2V0KCksIC0xLCAiY29udGVudHMiKTsKLSAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfYWRk
X2NsYXNzKHBhdGguZ2V0KCksIC0xLCBHVEtfU1RZTEVfQ0xBU1NfU0NBTEUpOwotI2Vsc2UKLSAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBTY2FsZVRyb3VnaDoKICAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2FwcGVuZF90eXBlKHBh
dGguZ2V0KCksIEdUS19UWVBFX1NDQUxFKTsKLSNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAxOSwg
MikKLSAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfc2V0X29iamVjdF9uYW1lKHBhdGguZ2V0
KCksIC0xLCAidHJvdWdoIik7Ci0jZWxzZQogICAgICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9h
ZGRfY2xhc3MocGF0aC5nZXQoKSwgLTEsIEdUS19TVFlMRV9DTEFTU19TQ0FMRSk7CiAgICAgICAg
IGd0a193aWRnZXRfcGF0aF9pdGVyX2FkZF9jbGFzcyhwYXRoLmdldCgpLCAtMSwgR1RLX1NUWUxF
X0NMQVNTX1RST1VHSCk7Ci0jZW5kaWYKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTY2FsZVNs
aWRlcjoKICAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2FwcGVuZF90eXBlKHBhdGguZ2V0KCksIEdU
S19UWVBFX1NDQUxFKTsKLSNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAxOSwgMikKLSAgICAgICAg
Z3RrX3dpZGdldF9wYXRoX2l0ZXJfc2V0X29iamVjdF9uYW1lKHBhdGguZ2V0KCksIC0xLCAic2xp
ZGVyIik7Ci0jZWxzZQogICAgICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9hZGRfY2xhc3MocGF0
aC5nZXQoKSwgLTEsIEdUS19TVFlMRV9DTEFTU19TQ0FMRSk7CiAgICAgICAgIGd0a193aWRnZXRf
cGF0aF9pdGVyX2FkZF9jbGFzcyhwYXRoLmdldCgpLCAtMSwgR1RLX1NUWUxFX0NMQVNTX1NMSURF
Uik7Ci0jZW5kaWYKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTY2FsZUhpZ2hsaWdodDoKLSNp
ZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAxOSwgMTEpCi0gICAgICAgIGd0a193aWRnZXRfcGF0aF9h
cHBlbmRfdHlwZShwYXRoLmdldCgpLCBHVEtfVFlQRV9TQ0FMRSk7Ci0gICAgICAgIGd0a193aWRn
ZXRfcGF0aF9pdGVyX3NldF9vYmplY3RfbmFtZShwYXRoLmdldCgpLCAtMSwgImhpZ2hsaWdodCIp
OwotICAgICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9hZGRfY2xhc3MocGF0aC5nZXQoKSwgLTEs
IEdUS19TVFlMRV9DTEFTU19TQ0FMRSk7Ci0jZWxzZQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSNlbmRpZgogICAgICAgICBicmVhazsKICAgICBjYXNlIFByb2dyZXNzQmFyOgogICAg
ICAgICBndGtfd2lkZ2V0X3BhdGhfYXBwZW5kX3R5cGUocGF0aC5nZXQoKSwgR1RLX1RZUEVfUFJP
R1JFU1NfQkFSKTsKLSNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAxOSwgMikKLSAgICAgICAgZ3Rr
X3dpZGdldF9wYXRoX2l0ZXJfc2V0X29iamVjdF9uYW1lKHBhdGguZ2V0KCksIC0xLCAicHJvZ3Jl
c3NiYXIiKTsKLSNlbHNlCiAgICAgICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX2FkZF9jbGFzcyhw
YXRoLmdldCgpLCAtMSwgR1RLX1NUWUxFX0NMQVNTX1BST0dSRVNTQkFSKTsKLSNlbmRpZgogICAg
ICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9hZGRfY2xhc3MocGF0aC5nZXQoKSwgLTEsIEdUS19T
VFlMRV9DTEFTU19IT1JJWk9OVEFMKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBQcm9ncmVz
c0JhclRyb3VnaDoKICAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2FwcGVuZF90eXBlKHBhdGguZ2V0
KCksIEdUS19UWVBFX1BST0dSRVNTX0JBUik7Ci0jaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMTks
IDIpCi0gICAgICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX3NldF9vYmplY3RfbmFtZShwYXRoLmdl
dCgpLCAtMSwgInRyb3VnaCIpOwotI2Vsc2UKLSAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJf
YWRkX2NsYXNzKHBhdGguZ2V0KCksIC0xLCBHVEtfU1RZTEVfQ0xBU1NfUFJPR1JFU1NCQVIpOwog
ICAgICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9hZGRfY2xhc3MocGF0aC5nZXQoKSwgLTEsIEdU
S19TVFlMRV9DTEFTU19UUk9VR0gpOwotI2VuZGlmCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
UHJvZ3Jlc3NCYXJQcm9ncmVzczoKICAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2FwcGVuZF90eXBl
KHBhdGguZ2V0KCksIEdUS19UWVBFX1BST0dSRVNTX0JBUik7Ci0jaWYgR1RLX0NIRUNLX1ZFUlNJ
T04oMywgMTksIDIpCi0gICAgICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX3NldF9vYmplY3RfbmFt
ZShwYXRoLmdldCgpLCAtMSwgInByb2dyZXNzIik7Ci0jZWxzZQogICAgICAgICBndGtfd2lkZ2V0
X3BhdGhfaXRlcl9hZGRfY2xhc3MocGF0aC5nZXQoKSwgLTEsIEdUS19TVFlMRV9DTEFTU19QUk9H
UkVTU0JBUik7Ci0jZW5kaWYKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBMaXN0Qm94OgogICAg
ICAgICBndGtfd2lkZ2V0X3BhdGhfYXBwZW5kX3R5cGUocGF0aC5nZXQoKSwgR1RLX1RZUEVfVFJF
RV9WSUVXKTsKLSNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAxOSwgMikKLSAgICAgICAgZ3RrX3dp
ZGdldF9wYXRoX2l0ZXJfc2V0X29iamVjdF9uYW1lKHBhdGguZ2V0KCksIC0xLCAidHJlZXZpZXci
KTsKLSNlbmRpZgogICAgICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9hZGRfY2xhc3MocGF0aC5n
ZXQoKSwgLTEsIEdUS19TVFlMRV9DTEFTU19WSUVXKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBTcGluQnV0dG9uOgogICAgICAgICBndGtfd2lkZ2V0X3BhdGhfYXBwZW5kX3R5cGUocGF0aC5n
ZXQoKSwgR1RLX1RZUEVfU1BJTl9CVVRUT04pOwotI2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDE5
LCAyKQotICAgICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9zZXRfb2JqZWN0X25hbWUocGF0aC5n
ZXQoKSwgLTEsICJzcGluYnV0dG9uIik7Ci0jZWxzZQogICAgICAgICBndGtfd2lkZ2V0X3BhdGhf
aXRlcl9hZGRfY2xhc3MocGF0aC5nZXQoKSwgLTEsIEdUS19TVFlMRV9DTEFTU19TUElOQlVUVE9O
KTsKLSNlbmRpZgogICAgICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9hZGRfY2xhc3MocGF0aC5n
ZXQoKSwgLTEsIEdUS19TVFlMRV9DTEFTU19IT1JJWk9OVEFMKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBTcGluQnV0dG9uVXBCdXR0b246CiAgICAgY2FzZSBTcGluQnV0dG9uRG93bkJ1dHRv
bjoKICAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2FwcGVuZF90eXBlKHBhdGguZ2V0KCksIEdUS19U
WVBFX1NQSU5fQlVUVE9OKTsKLSNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAxOSwgMikKLSAgICAg
ICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfc2V0X29iamVjdF9uYW1lKHBhdGguZ2V0KCksIC0xLCAi
YnV0dG9uIik7Ci0gICAgICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX2FkZF9jbGFzcyhwYXRoLmdl
dCgpLCAtMSwgdGhlbWVQYXJ0ID09IFNwaW5CdXR0b25VcEJ1dHRvbiA/ICJ1cCIgOiAiZG93biIp
OwotI2Vsc2UKICAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfYWRkX2NsYXNzKHBhdGguZ2V0
KCksIC0xLCBHVEtfU1RZTEVfQ0xBU1NfU1BJTkJVVFRPTik7CiAgICAgICAgIGd0a193aWRnZXRf
cGF0aF9pdGVyX2FkZF9jbGFzcyhwYXRoLmdldCgpLCAtMSwgR1RLX1NUWUxFX0NMQVNTX0JVVFRP
Tik7Ci0jZW5kaWYKICAgICAgICAgYnJlYWs7CiAjaWYgRU5BQkxFKFZJREVPKQogICAgIGNhc2Ug
TWVkaWFCdXR0b246CiAgICAgICAgIGd0a193aWRnZXRfcGF0aF9hcHBlbmRfdHlwZShwYXRoLmdl
dCgpLCBHVEtfVFlQRV9JTUFHRSk7Ci0jaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMTksIDIpCi0g
ICAgICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX3NldF9vYmplY3RfbmFtZShwYXRoLmdldCgpLCAt
MSwgImltYWdlIik7Ci0jZWxzZQogICAgICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9hZGRfY2xh
c3MocGF0aC5nZXQoKSwgLTEsIEdUS19TVFlMRV9DTEFTU19JTUFHRSk7Ci0jZW5kaWYKICAgICAg
ICAgYnJlYWs7CiAjZW5kaWYgLy8gRU5BQkxFKFZJREVPKQorICAgIGRlZmF1bHQ6CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBHUmVm
UHRyPEd0a1N0eWxlQ29udGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihndGtfc3R5bGVfY29udGV4
dF9uZXcoKSk7CkBAIC00MDksNiArMjk5LDcgQEAgc3RhdGljIEdSZWZQdHI8R2RrUGl4YnVmPiBs
b2FkVGhlbWVkSWNvbihHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIGkKIAog
ICAgIHJldHVybiBhZG9wdEdSZWYoZ3RrX2ljb25faW5mb19sb2FkX3N5bWJvbGljX2Zvcl9jb250
ZXh0KGljb25JbmZvLmdldCgpLCBjb250ZXh0LCBudWxscHRyLCBudWxscHRyKSk7CiB9CisjZW5k
aWYgLy8gIUdUS19DSEVDS19WRVJTSU9OKDMsIDIwLCAwKQogCiBzdGF0aWMgYm9vbCBub2RlSGFz
UHNldWRvKE5vZGUqIG5vZGUsIGNvbnN0IGNoYXIqIHBzZXVkbykKIHsKQEAgLTQ3MSw2ICszNjIs
NzEgQEAgaW50IFJlbmRlclRoZW1lR3RrOjpiYXNlbGluZVBvc2l0aW9uKGNvbnN0IFJlbmRlckJv
eCYgYm94KSBjb25zdAogICAgIHJldHVybiBSZW5kZXJUaGVtZTo6YmFzZWxpbmVQb3NpdGlvbihi
b3gpOwogfQogCisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMjAsIDApCit2b2lkIFJlbmRlclRo
ZW1lR3RrOjphZGp1c3RSZXBhaW50UmVjdChjb25zdCBSZW5kZXJPYmplY3QmLCBGbG9hdFJlY3Qm
KQoreworfQorc3RhdGljIEd0a1N0YXRlRmxhZ3MgdGhlbWVQYXJ0U3RhdGVGbGFncyhjb25zdCBS
ZW5kZXJUaGVtZUd0ayYgdGhlbWUsIFJlbmRlclRoZW1lUGFydCB0aGVtZVBhcnQsIGNvbnN0IFJl
bmRlck9iamVjdCYgcmVuZGVyT2JqZWN0KQoreworICAgIHVuc2lnbmVkIHN0YXRlRmxhZ3MgPSAw
OworICAgIHN3aXRjaCAocmVuZGVyT2JqZWN0LnN0eWxlKCkuZGlyZWN0aW9uKCkpIHsKKyAgICBj
YXNlIFJUTDoKKyAgICAgICAgc3RhdGVGbGFncyB8PSBHVEtfU1RBVEVfRkxBR19ESVJfUlRMOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIExUUjoKKyAgICAgICAgc3RhdGVGbGFncyB8PSBHVEtf
U1RBVEVfRkxBR19ESVJfTFRSOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoIXRo
ZW1lLmlzRW5hYmxlZChyZW5kZXJPYmplY3QpIHx8ICh0aGVtZVBhcnQgPT0gRW50cnkgJiYgdGhl
bWUuaXNSZWFkT25seUNvbnRyb2wocmVuZGVyT2JqZWN0KSkpCisgICAgICAgIHN0YXRlRmxhZ3Mg
fD0gR1RLX1NUQVRFX0ZMQUdfSU5TRU5TSVRJVkU7CisgICAgZWxzZSB7CisgICAgICAgIGlmICh0
aGVtZS5pc0hvdmVyZWQocmVuZGVyT2JqZWN0KSkKKyAgICAgICAgICAgIHN0YXRlRmxhZ3MgfD0g
R1RLX1NUQVRFX0ZMQUdfUFJFTElHSFQ7CisgICAgICAgIGlmICh0aGVtZS5pc0ZvY3VzZWQocmVu
ZGVyT2JqZWN0KSkKKyAgICAgICAgICAgIHN0YXRlRmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfRk9D
VVNFRDsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHRoZW1lUGFydCkgeworICAgIGNhc2UgQ2hlY2tC
dXR0b246CisgICAgY2FzZSBSYWRpb0J1dHRvbjoKKyAgICAgICAgaWYgKHRoZW1lLmlzQ2hlY2tl
ZChyZW5kZXJPYmplY3QpKQorICAgICAgICAgICAgc3RhdGVGbGFncyB8PSBHVEtfU1RBVEVfRkxB
R19DSEVDS0VEOworICAgICAgICBpZiAodGhlbWUuaXNJbmRldGVybWluYXRlKHJlbmRlck9iamVj
dCkpCisgICAgICAgICAgICBzdGF0ZUZsYWdzIHw9IEdUS19TVEFURV9GTEFHX0lOQ09OU0lTVEVO
VDsKKyAgICAgICAgaWYgKHRoZW1lLmlzUHJlc3NlZChyZW5kZXJPYmplY3QpKQorICAgICAgICAg
ICAgc3RhdGVGbGFncyB8PSBHVEtfU1RBVEVfRkxBR19TRUxFQ1RFRDsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBCdXR0b246CisgICAgY2FzZSBDb21ib0JveEJ1dHRvbjoKKyAgICBjYXNlIFNj
YWxlU2xpZGVyOgorICAgIGNhc2UgRW50cnlJY29uTGVmdDoKKyAgICBjYXNlIEVudHJ5SWNvblJp
Z2h0OgorI2lmIEVOQUJMRShWSURFTykKKyAgICBjYXNlIE1lZGlhQnV0dG9uOgorI2VuZGlmCisg
ICAgICAgIGlmICh0aGVtZS5pc1ByZXNzZWQocmVuZGVyT2JqZWN0KSkKKyAgICAgICAgICAgIHN0
YXRlRmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfQUNUSVZFOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFNwaW5CdXR0b25VcEJ1dHRvbjoKKyAgICAgICAgaWYgKHRoZW1lLmlzUHJlc3NlZChyZW5k
ZXJPYmplY3QpICYmIHRoZW1lLmlzU3BpblVwQnV0dG9uUGFydFByZXNzZWQocmVuZGVyT2JqZWN0
KSkKKyAgICAgICAgICAgIHN0YXRlRmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfQUNUSVZFOworICAg
ICAgICBpZiAodGhlbWUuaXNIb3ZlcmVkKHJlbmRlck9iamVjdCkgJiYgIXRoZW1lLmlzU3BpblVw
QnV0dG9uUGFydEhvdmVyZWQocmVuZGVyT2JqZWN0KSkKKyAgICAgICAgICAgIHN0YXRlRmxhZ3Mg
Jj0gfkdUS19TVEFURV9GTEFHX1BSRUxJR0hUOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNw
aW5CdXR0b25Eb3duQnV0dG9uOgorICAgICAgICBpZiAodGhlbWUuaXNQcmVzc2VkKHJlbmRlck9i
amVjdCkgJiYgIXRoZW1lLmlzU3BpblVwQnV0dG9uUGFydFByZXNzZWQocmVuZGVyT2JqZWN0KSkK
KyAgICAgICAgICAgIHN0YXRlRmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfQUNUSVZFOworICAgICAg
ICBpZiAodGhlbWUuaXNIb3ZlcmVkKHJlbmRlck9iamVjdCkgJiYgdGhlbWUuaXNTcGluVXBCdXR0
b25QYXJ0SG92ZXJlZChyZW5kZXJPYmplY3QpKQorICAgICAgICAgICAgc3RhdGVGbGFncyAmPSB+
R1RLX1NUQVRFX0ZMQUdfUFJFTElHSFQ7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZs
YWdzPihzdGF0ZUZsYWdzKTsKK30KKyNlbHNlCiBzdGF0aWMgR3RrVGV4dERpcmVjdGlvbiBndGtU
ZXh0RGlyZWN0aW9uKFRleHREaXJlY3Rpb24gZGlyZWN0aW9uKQogewogICAgIHN3aXRjaCAoZGly
ZWN0aW9uKSB7CkBAIC01NDUsNiArNTAxLDcgQEAgdm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0
UmVwYWludFJlY3QoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIEZsb2F0UmUKICAg
ICB9CiAgICAgYWRqdXN0UmVjdEZvckZvY3VzKGNvbnRleHQuZ2V0KCksIHJlY3QpOwogfQorI2Vu
ZGlmIC8vIEdUS19DSEVDS19WRVJTSU9OKDMsIDIwLCAwKQogCiB2b2lkIFJlbmRlclRoZW1lR3Rr
OjphZGp1c3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBF
bGVtZW50KikgY29uc3QKIHsKQEAgLTU1Myw2ICs1MTAsOTAgQEAgdm9pZCBSZW5kZXJUaGVtZUd0
azo6YWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwg
RWxlbWUKICAgICAgICAgc3R5bGUuc2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExp
bmVIZWlnaHQoKSk7CiB9CiAKK3N0YXRpYyB2b2lkIHNocmlua1RvTWluaW11bVNpemVBbmRDZW50
ZXJSZWN0YW5nbGUoRmxvYXRSZWN0JiByZWN0LCBjb25zdCBJbnRTaXplJiBtaW5TaXplKQorewor
ICAgIGlmIChyZWN0LndpZHRoKCkgPiBtaW5TaXplLndpZHRoKCkpIHsKKyAgICAgICAgcmVjdC5p
bmZsYXRlWCgtKHJlY3Qud2lkdGgoKSAtIG1pblNpemUud2lkdGgoKSkgLyAyKTsKKyAgICAgICAg
cmVjdC5zZXRXaWR0aChtaW5TaXplLndpZHRoKCkpOyAvLyBJbiBjYXNlIHJlY3Qud2lkdGgoKSB3
YXMgZXF1YWwgdG8gbWluU2l6ZS53aWR0aCgpICsgMS4KKyAgICB9CisKKyAgICBpZiAocmVjdC5o
ZWlnaHQoKSA+IG1pblNpemUuaGVpZ2h0KCkpIHsKKyAgICAgICAgcmVjdC5pbmZsYXRlWSgtKHJl
Y3QuaGVpZ2h0KCkgLSBtaW5TaXplLmhlaWdodCgpKSAvIDIpOworICAgICAgICByZWN0LnNldEhl
aWdodChtaW5TaXplLmhlaWdodCgpKTsgLy8gSW4gY2FzZSByZWN0LmhlaWdodCgpIHdhcyBlcXVh
bCB0byBtaW5TaXplLmhlaWdodCgpICsgMS4KKyAgICB9Cit9CisKKyNpZiBHVEtfQ0hFQ0tfVkVS
U0lPTigzLCAyMCwgMCkKK3N0YXRpYyB2b2lkIHNldFRvZ2dsZVNpemUoUmVuZGVyVGhlbWVQYXJ0
IHRoZW1lUGFydCwgUmVuZGVyU3R5bGUmIHN0eWxlKQoreworICAgIEFTU0VSVCh0aGVtZVBhcnQg
PT0gQ2hlY2tCdXR0b24gfHwgdGhlbWVQYXJ0ID09IFJhZGlvQnV0dG9uKTsKKworICAgIC8vIFRo
ZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBib3RoIHNwZWNpZmllZCwgc28gd2Ugc2hvdWxkbid0IGNo
YW5nZSB0aGVtLgorICAgIGlmICghc3R5bGUud2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYm
ICFzdHlsZS5oZWlnaHQoKS5pc0F1dG8oKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVuZGVy
VGhlbWVHYWRnZXQ6OkluZm8gaW5mbyA9IHsKKyAgICAgICAgLnR5cGUgPSBSZW5kZXJUaGVtZUdh
ZGdldDo6VHlwZTo6R2VuZXJpYywKKyAgICAgICAgLm5hbWUgPSB0aGVtZVBhcnQgPT0gQ2hlY2tC
dXR0b24gPyAiY2hlY2tidXR0b24iIDogInJhZGlvYnV0dG9uIiwKKyAgICAgICAgLnN0YXRlID0g
R1RLX1NUQVRFX0ZMQUdfTk9STUFMLAorICAgICAgICAuY2xhc3NMaXN0ID0geyB9CisgICAgfTsK
KyAgICBhdXRvIHBhcmVudEdhZGdldCA9IFJlbmRlclRoZW1lR2FkZ2V0OjpjcmVhdGUoaW5mbyk7
CisgICAgaWYgKHRoZW1lUGFydCA9PSBDaGVja0J1dHRvbikgeworICAgICAgICBpbmZvLnR5cGUg
PSBSZW5kZXJUaGVtZUdhZGdldDo6VHlwZTo6Q2hlY2s7CisgICAgICAgIGluZm8ubmFtZSA9ICJj
aGVjayI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW5mby50eXBlID0gUmVuZGVyVGhlbWVHYWRn
ZXQ6OlR5cGU6OlJhZGlvOworICAgICAgICBpbmZvLm5hbWUgPSAicmFkaW8iOworICAgIH0KKyAg
ICBhdXRvIGdhZGdldCA9IFJlbmRlclRoZW1lVG9nZ2xlR2FkZ2V0OjpjcmVhdGUoaW5mbyk7Cisg
ICAgSW50U2l6ZSBwcmVmZXJyZWRTaXplID0gcGFyZW50R2FkZ2V0LT5wcmVmZXJyZWRTaXplKCk7
CisgICAgcHJlZmVycmVkU2l6ZSA9IHByZWZlcnJlZFNpemUuZXhwYW5kZWRUbyhnYWRnZXQtPnBy
ZWZlcnJlZFNpemUoKSk7CisKKyAgICBpZiAoc3R5bGUud2lkdGgoKS5pc0ludHJpbnNpY09yQXV0
bygpKQorICAgICAgICBzdHlsZS5zZXRXaWR0aChMZW5ndGgocHJlZmVycmVkU2l6ZS53aWR0aCgp
LCBGaXhlZCkpOworCisgICAgaWYgKHN0eWxlLmhlaWdodCgpLmlzQXV0bygpKQorICAgICAgICBz
dHlsZS5zZXRIZWlnaHQoTGVuZ3RoKHByZWZlcnJlZFNpemUuaGVpZ2h0KCksIEZpeGVkKSk7Cit9
CisKK3N0YXRpYyB2b2lkIHBhaW50VG9nZ2xlKGNvbnN0IFJlbmRlclRoZW1lR3RrKiB0aGVtZSwg
UmVuZGVyVGhlbWVQYXJ0IHRoZW1lUGFydCwgY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmpl
Y3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiBmdWxsUmVjdCkK
K3sKKyAgICBBU1NFUlQodGhlbWVQYXJ0ID09IENoZWNrQnV0dG9uIHx8IHRoZW1lUGFydCA9PSBS
YWRpb0J1dHRvbik7CisKKyAgICBSZW5kZXJUaGVtZUdhZGdldDo6SW5mbyBwYXJlbnRJbmZvID0g
eworICAgICAgICAudHlwZSA9IFJlbmRlclRoZW1lR2FkZ2V0OjpUeXBlOjpHZW5lcmljLAorICAg
ICAgICAubmFtZSA9IHRoZW1lUGFydCA9PSBDaGVja0J1dHRvbiA/ICJjaGVja2J1dHRvbiIgOiAi
cmFkaW9idXR0b24iLAorICAgICAgICAuc3RhdGUgPSB0aGVtZVBhcnRTdGF0ZUZsYWdzKCp0aGVt
ZSwgdGhlbWVQYXJ0LCByZW5kZXJPYmplY3QpLAorICAgICAgICAuY2xhc3NMaXN0ID0geyAidGV4
dC1idXR0b24iIH0KKyAgICB9OworICAgIGF1dG8gcGFyZW50R2FkZ2V0ID0gUmVuZGVyVGhlbWVH
YWRnZXQ6OmNyZWF0ZShwYXJlbnRJbmZvKTsKKyAgICBSZW5kZXJUaGVtZUdhZGdldDo6SW5mbyBp
bmZvOworICAgIGluZm8uc3RhdGUgPSBwYXJlbnRJbmZvLnN0YXRlOworICAgIGlmICh0aGVtZVBh
cnQgPT0gQ2hlY2tCdXR0b24pIHsKKyAgICAgICAgaW5mby50eXBlID0gUmVuZGVyVGhlbWVHYWRn
ZXQ6OlR5cGU6OkNoZWNrOworICAgICAgICBpbmZvLm5hbWUgPSAiY2hlY2siOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGluZm8udHlwZSA9IFJlbmRlclRoZW1lR2FkZ2V0OjpUeXBlOjpSYWRpbzsK
KyAgICAgICAgaW5mby5uYW1lID0gInJhZGlvIjsKKyAgICB9CisgICAgYXV0byBnYWRnZXQgPSBS
ZW5kZXJUaGVtZUdhZGdldDo6Y3JlYXRlKGluZm8sIHBhcmVudEdhZGdldC5nZXQoKSk7CisKKyAg
ICBGbG9hdFJlY3QgcmVjdCA9IGZ1bGxSZWN0OworICAgIC8vIFNvbWUgdGhlbWVzIGRvIG5vdCBy
ZW5kZXIgbGFyZ2UgdG9nZ2xlIGJ1dHRvbnMgcHJvcGVybHksIHNvIHdlIHNpbXBseQorICAgIC8v
IHNocmluayB0aGUgcmVjdGFuZ2xlIGJhY2sgZG93biB0byB0aGUgZGVmYXVsdCBzaXplIGFuZCB0
aGVuIGNlbnRlciBpdAorICAgIC8vIGluIHRoZSBmdWxsIHRvZ2dsZSBidXR0b24gcmVnaW9uLiBU
aGUgcmVhc29uIGZvciBub3Qgc2ltcGx5IGZvcmNpbmcgdG9nZ2xlCisgICAgLy8gYnV0dG9ucyB0
byBiZSBhIHNtYWxsZXIgc2l6ZSBpcyB0aGF0IHdlIGRvbid0IHdhbnQgdG8gYnJlYWsgc2l0ZSBs
YXlvdXRzLgorICAgIEludFNpemUgcHJlZmVycmVkU2l6ZSA9IHBhcmVudEdhZGdldC0+cHJlZmVy
cmVkU2l6ZSgpOworICAgIHByZWZlcnJlZFNpemUgPSBwcmVmZXJyZWRTaXplLmV4cGFuZGVkVG8o
Z2FkZ2V0LT5wcmVmZXJyZWRTaXplKCkpOworICAgIHNocmlua1RvTWluaW11bVNpemVBbmRDZW50
ZXJSZWN0YW5nbGUocmVjdCwgcHJlZmVycmVkU2l6ZSk7CisgICAgcGFyZW50R2FkZ2V0LT5yZW5k
ZXIocGFpbnRJbmZvLmNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgcmVjdCk7Cisg
ICAgZ2FkZ2V0LT5yZW5kZXIocGFpbnRJbmZvLmNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+
Y3IoKSwgcmVjdCk7CisKKyAgICBpZiAodGhlbWUtPmlzRm9jdXNlZChyZW5kZXJPYmplY3QpKQor
ICAgICAgICBwYXJlbnRHYWRnZXQtPnJlbmRlckZvY3VzKHBhaW50SW5mby5jb250ZXh0KCkucGxh
dGZvcm1Db250ZXh0KCktPmNyKCksIHJlY3QpOworfQorI2Vsc2UKIHN0YXRpYyB2b2lkIHNldFRv
Z2dsZVNpemUoUmVuZGVyVGhlbWVQYXJ0IHRoZW1lUGFydCwgUmVuZGVyU3R5bGUmIHN0eWxlKQog
ewogICAgIC8vIFRoZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBib3RoIHNwZWNpZmllZCwgc28gd2Ug
c2hvdWxkbid0IGNoYW5nZSB0aGVtLgpAQCAtNTYzLDI5ICs2MDQsMTcgQEAgc3RhdGljIHZvaWQg
c2V0VG9nZ2xlU2l6ZShSZW5kZXJUaGVtZVBhcnQgdGhlbWVQYXJ0LCBSZW5kZXJTdHlsZSYgc3R5
bGUpCiAgICAgLy8gT3RoZXIgcG9ydHMgaGFyZC1jb2RlIHRoaXMgdG8gMTMuIEdUSysgdXNlcnMg
dGVuZCB0byBkZW1hbmQgdGhlIG5hdGl2ZSBsb29rLgogICAgIGdpbnQgaW5kaWNhdG9yU2l6ZTsK
ICAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUoY29udGV4dC5nZXQoKSwgImluZGljYXRv
ci1zaXplIiwgJmluZGljYXRvclNpemUsIG51bGxwdHIpOwotICAgIEludFNpemUgbWluU2l6ZShp
bmRpY2F0b3JTaXplLCBpbmRpY2F0b3JTaXplKTsKLQotI2lmIEdUS19DSEVDS19WRVJTSU9OKDMs
IDE5LCA3KQotICAgIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBjaGlsZENvbnRleHQgPSBjcmVh
dGVTdHlsZUNvbnRleHQodGhlbWVQYXJ0ID09IENoZWNrQnV0dG9uID8gQ2hlY2tCdXR0b25DaGVj
ayA6IFJhZGlvQnV0dG9uUmFkaW8sIGNvbnRleHQuZ2V0KCkpOwotICAgIGdpbnQgbWluV2lkdGgs
IG1pbkhlaWdodDsKLSAgICBndGtfc3R5bGVfY29udGV4dF9nZXQoY2hpbGRDb250ZXh0LmdldCgp
LCBndGtfc3R5bGVfY29udGV4dF9nZXRfc3RhdGUoY2hpbGRDb250ZXh0LmdldCgpKSwgIm1pbi13
aWR0aCIsICZtaW5XaWR0aCwgIm1pbi1oZWlnaHQiLCAmbWluSGVpZ2h0LCBudWxscHRyKTsKLSAg
ICBpZiAobWluV2lkdGgpCi0gICAgICAgIG1pblNpemUuc2V0V2lkdGgobWluV2lkdGgpOwotICAg
IGlmIChtaW5IZWlnaHQpCi0gICAgICAgIG1pblNpemUuc2V0SGVpZ2h0KG1pbkhlaWdodCk7Ci0j
ZW5kaWYKIAogICAgIGlmIChzdHlsZS53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkpCi0gICAg
ICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aChtaW5TaXplLndpZHRoKCksIEZpeGVkKSk7CisgICAg
ICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aChpbmRpY2F0b3JTaXplLCBGaXhlZCkpOwogCiAgICAg
aWYgKHN0eWxlLmhlaWdodCgpLmlzQXV0bygpKQotICAgICAgICBzdHlsZS5zZXRIZWlnaHQoTGVu
Z3RoKG1pblNpemUuaGVpZ2h0KCksIEZpeGVkKSk7CisgICAgICAgIHN0eWxlLnNldEhlaWdodChM
ZW5ndGgoaW5kaWNhdG9yU2l6ZSwgRml4ZWQpKTsKIH0KIAogc3RhdGljIHZvaWQgcGFpbnRUb2dn
bGUoY29uc3QgUmVuZGVyVGhlbWVHdGsqIHRoZW1lLCBSZW5kZXJUaGVtZVBhcnQgdGhlbWVQYXJ0
LCBjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGNvbnN0IEludFJlY3QmIGZ1bGxSZWN0KQogewotICAgIEdSZWZQdHI8R3RrU3R5bGVD
b250ZXh0PiBwYXJlbnRDb250ZXh0ID0gY3JlYXRlU3R5bGVDb250ZXh0KHRoZW1lUGFydCk7Ci0g
ICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IGNvbnRleHQgPSBjcmVhdGVTdHlsZUNvbnRleHQo
dGhlbWVQYXJ0ID09IENoZWNrQnV0dG9uID8gQ2hlY2tCdXR0b25DaGVjayA6IFJhZGlvQnV0dG9u
UmFkaW8sIHBhcmVudENvbnRleHQuZ2V0KCkpOworICAgIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0
PiBjb250ZXh0ID0gY3JlYXRlU3R5bGVDb250ZXh0KHRoZW1lUGFydCk7CiAgICAgZ3RrX3N0eWxl
X2NvbnRleHRfc2V0X2RpcmVjdGlvbihjb250ZXh0LmdldCgpLCBzdGF0aWNfY2FzdDxHdGtUZXh0
RGlyZWN0aW9uPihndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC5zdHlsZSgpLmRpcmVjdGlv
bigpKSkpOwogCiAgICAgdW5zaWduZWQgZmxhZ3MgPSAwOwpAQCAtNjA5LDI5ICs2MzgsMTEgQEAg
c3RhdGljIHZvaWQgcGFpbnRUb2dnbGUoY29uc3QgUmVuZGVyVGhlbWVHdGsqIHRoZW1lLCBSZW5k
ZXJUaGVtZVBhcnQgdGhlbWVQYXJ0LAogICAgIC8vIHNocmluayB0aGUgcmVjdGFuZ2xlIGJhY2sg
ZG93biB0byB0aGUgZGVmYXVsdCBzaXplIGFuZCB0aGVuIGNlbnRlciBpdAogICAgIC8vIGluIHRo
ZSBmdWxsIHRvZ2dsZSBidXR0b24gcmVnaW9uLiBUaGUgcmVhc29uIGZvciBub3Qgc2ltcGx5IGZv
cmNpbmcgdG9nZ2xlCiAgICAgLy8gYnV0dG9ucyB0byBiZSBhIHNtYWxsZXIgc2l6ZSBpcyB0aGF0
IHdlIGRvbid0IHdhbnQgdG8gYnJlYWsgc2l0ZSBsYXlvdXRzLgorICAgIEZsb2F0UmVjdCByZWN0
KGZ1bGxSZWN0KTsKICAgICBnaW50IGluZGljYXRvclNpemU7CiAgICAgZ3RrX3N0eWxlX2NvbnRl
eHRfZ2V0X3N0eWxlKGNvbnRleHQuZ2V0KCksICJpbmRpY2F0b3Itc2l6ZSIsICZpbmRpY2F0b3JT
aXplLCBudWxscHRyKTsKICAgICBJbnRTaXplIG1pblNpemUoaW5kaWNhdG9yU2l6ZSwgaW5kaWNh
dG9yU2l6ZSk7Ci0KLSNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAxOSwgNykKLSAgICBnaW50IG1p
bldpZHRoLCBtaW5IZWlnaHQ7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0KGNvbnRleHQuZ2V0
KCksIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdGF0ZShjb250ZXh0LmdldCgpKSwgIm1pbi13aWR0
aCIsICZtaW5XaWR0aCwgIm1pbi1oZWlnaHQiLCAmbWluSGVpZ2h0LCBudWxscHRyKTsKLSAgICBp
ZiAobWluV2lkdGgpCi0gICAgICAgIG1pblNpemUuc2V0V2lkdGgobWluV2lkdGgpOwotICAgIGlm
IChtaW5IZWlnaHQpCi0gICAgICAgIG1pblNpemUuc2V0SGVpZ2h0KG1pbkhlaWdodCk7Ci0jZW5k
aWYKLQotICAgIEludFJlY3QgcmVjdChmdWxsUmVjdCk7Ci0gICAgaWYgKHJlY3Qud2lkdGgoKSA+
IG1pblNpemUud2lkdGgoKSkgewotICAgICAgICByZWN0LmluZmxhdGVYKC0ocmVjdC53aWR0aCgp
IC0gbWluU2l6ZS53aWR0aCgpKSAvIDIpOwotICAgICAgICByZWN0LnNldFdpZHRoKG1pblNpemUu
d2lkdGgoKSk7IC8vIEluIGNhc2UgcmVjdC53aWR0aCgpIHdhcyBlcXVhbCB0byBtaW5TaXplLndp
ZHRoKCkgKyAxLgotICAgIH0KLQotICAgIGlmIChyZWN0LmhlaWdodCgpID4gbWluU2l6ZS5oZWln
aHQoKSkgewotICAgICAgICByZWN0LmluZmxhdGVZKC0ocmVjdC5oZWlnaHQoKSAtIG1pblNpemUu
aGVpZ2h0KCkpIC8gMik7Ci0gICAgICAgIHJlY3Quc2V0SGVpZ2h0KG1pblNpemUuaGVpZ2h0KCkp
OyAvLyBJbiBjYXNlIHJlY3QuaGVpZ2h0KCkgd2FzIGVxdWFsIHRvIG1pblNpemUuaGVpZ2h0KCkg
KyAxLgotICAgIH0KKyAgICBzaHJpbmtUb01pbmltdW1TaXplQW5kQ2VudGVyUmVjdGFuZ2xlKHJl
Y3QsIG1pblNpemUpOwogCiAgICAgZ3RrX3JlbmRlcl9iYWNrZ3JvdW5kKGNvbnRleHQuZ2V0KCks
IHBhaW50SW5mby5jb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCktPmNyKCksIHJlY3QueCgpLCBy
ZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKICAgICBndGtfcmVuZGVyX2Zy
YW1lKGNvbnRleHQuZ2V0KCksIHBhaW50SW5mby5jb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCkt
PmNyKCksIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsK
QEAgLTY1MCw2ICs2NjEsNyBAQCBzdGF0aWMgdm9pZCBwYWludFRvZ2dsZShjb25zdCBSZW5kZXJU
aGVtZUd0ayogdGhlbWUsIFJlbmRlclRoZW1lUGFydCB0aGVtZVBhcnQsCiAgICAgICAgICAgICBp
bmRpY2F0b3JSZWN0LndpZHRoKCksIGluZGljYXRvclJlY3QuaGVpZ2h0KCkpOwogICAgIH0KIH0K
KyNlbmRpZiAvLyBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAyMCwgMCkKIAogdm9pZCBSZW5kZXJUaGVt
ZUd0azo6c2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKIHsKQEAgLTY3
Myw2ICs2ODUsMTkgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRSYWRpbyhjb25zdCBSZW5k
ZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmYKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKKyNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAyMCwgMCkKK2Jvb2wgUmVuZGVyVGhlbWVH
dGs6OnBhaW50QnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBSZW5kZXJU
aGVtZUdhZGdldDo6SW5mbyBpbmZvID0geyBSZW5kZXJUaGVtZUdhZGdldDo6VHlwZTo6R2VuZXJp
YywgImJ1dHRvbiIsIHRoZW1lUGFydFN0YXRlRmxhZ3MoKnRoaXMsIEJ1dHRvbiwgcmVuZGVyT2Jq
ZWN0KSwgeyAidGV4dC1idXR0b24iIH0gfTsKKyAgICBpZiAoaXNEZWZhdWx0KHJlbmRlck9iamVj
dCkpCisgICAgICAgIGluZm8uY2xhc3NMaXN0LmFwcGVuZCgiZGVmYXVsdCIpOworICAgIGF1dG8g
Z2FkZ2V0ID0gUmVuZGVyVGhlbWVHYWRnZXQ6OmNyZWF0ZShpbmZvKTsKKyAgICBnYWRnZXQtPnJl
bmRlcihwYWludEluZm8uY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCByZWN0KTsK
KyAgICBpZiAoaXNGb2N1c2VkKHJlbmRlck9iamVjdCkpCisgICAgICAgIGdhZGdldC0+cmVuZGVy
Rm9jdXMocGFpbnRJbmZvLmNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgcmVjdCk7
CisgICAgcmV0dXJuIGZhbHNlOworfQorI2Vsc2UKIHN0YXRpYyB2b2lkIHJlbmRlckJ1dHRvbihS
ZW5kZXJUaGVtZSogdGhlbWUsIEd0a1N0eWxlQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVuZGVy
T2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJ
bnRSZWN0JiByZWN0KQogewogICAgIEludFJlY3QgYnV0dG9uUmVjdChyZWN0KTsKQEAgLTc0Niw2
ICs3NzEsNyBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludEJ1dHRvbihjb25zdCBSZW5kZXJP
YmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbgogICAgIHJlbmRlckJ1dHRvbih0aGlz
LCBjb250ZXh0LmdldCgpLCByZW5kZXJPYmplY3QsIHBhaW50SW5mbywgcmVjdCk7CiAgICAgcmV0
dXJuIGZhbHNlOwogfQorI2VuZGlmIC8vIEdUS19DSEVDS19WRVJTSU9OKDMsIDIwLCAwKQogCiB2
b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBS
ZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQqKSBjb25zdAogewpAQCAtNzYxLDYgKzc4Nyw4MyBA
QCB2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFN0eWxlUmVz
b2x2ZXImIHN0eWxlUmVzb2x2ZXIsIFJlbgogICAgIGFkanVzdE1lbnVMaXN0U3R5bGUoc3R5bGVS
ZXNvbHZlciwgc3R5bGUsIGUpOwogfQogCisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMjAsIDAp
CisvKgorICogR3RrQ29tYm9Cb3ggZ2FkZ2V0cyB0cmVlCisgKgorICogY29tYm9ib3gKKyAqIOKU
nOKUgOKUgCBib3gubGlua2VkCisgKiDilIIgICDilbDilIDilIAgYnV0dG9uLmNvbWJvCisgKiDi
lIIgICAgICAg4pWw4pSA4pSAIGJveAorICog4pSCICAgICAgICAgICDilJzilIDilIAgY2VsbHZp
ZXcKKyAqIOKUgiAgICAgICAgICAg4pWw4pSA4pSAIGFycm93CisgKiDilbDilIDilIAgd2luZG93
LnBvcHVwCisgKi8KK0xlbmd0aEJveCBSZW5kZXJUaGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRp
bmdCb3goY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAoreworICAgIGlmIChzdHlsZS5h
cHBlYXJhbmNlKCkgPT0gTm9Db250cm9sUGFydCkKKyAgICAgICAgcmV0dXJuIExlbmd0aEJveCgw
KTsKKworICAgIFJlbmRlclRoZW1lR2FkZ2V0OjpJbmZvIGluZm8gPSB7IFJlbmRlclRoZW1lR2Fk
Z2V0OjpUeXBlOjpHZW5lcmljLCAiY29tYm9ib3giLCBHVEtfU1RBVEVfRkxBR19OT1JNQUwsIHsg
fSB9OworICAgIGF1dG8gY29tYm9HYWRnZXQgPSBSZW5kZXJUaGVtZUdhZGdldDo6Y3JlYXRlKGlu
Zm8pOworICAgIFZlY3RvcjxSZW5kZXJUaGVtZUdhZGdldDo6SW5mbz4gY2hpbGRyZW4gPSB7Cisg
ICAgICAgIHsgUmVuZGVyVGhlbWVHYWRnZXQ6OlR5cGU6OkdlbmVyaWMsICJidXR0b24iLCBHVEtf
U1RBVEVfRkxBR19OT1JNQUwsIHsgImNvbWJvIiB9IH0KKyAgICB9OworICAgIGluZm8ubmFtZSA9
ICJib3giOworICAgIGluZm8uY2xhc3NMaXN0ID0geyAiaG9yaXpvbnRhbCIsICJsaW5rZWQiIH07
CisgICAgYXV0byBib3hHYWRnZXQgPSBzdGQ6Om1ha2VfdW5pcXVlPFJlbmRlclRoZW1lQm94R2Fk
Z2V0PihpbmZvLCBjaGlsZHJlbiwgY29tYm9HYWRnZXQuZ2V0KCkpOworICAgIFJlbmRlclRoZW1l
R2FkZ2V0KiBidXR0b25HYWRnZXQgPSBib3hHYWRnZXQtPmNoaWxkKDApOworICAgIGluZm8uY2xh
c3NMaXN0LnJlbW92ZUxhc3QoKTsKKyAgICBhdXRvIGJ1dHRvbkJveEdhZGdldCA9IFJlbmRlclRo
ZW1lR2FkZ2V0OjpjcmVhdGUoaW5mbywgYnV0dG9uR2FkZ2V0KTsKKyAgICBpbmZvLm5hbWUgPSAi
YXJyb3ciOworICAgIGluZm8uY2xhc3NMaXN0ID0geyB9OworICAgIGF1dG8gYXJyb3dHYWRnZXQg
PSBSZW5kZXJUaGVtZUdhZGdldDo6Y3JlYXRlKGluZm8sIGJ1dHRvbkJveEdhZGdldC5nZXQoKSk7
CisgICAgR3RrQm9yZGVyIGNvbWJvQ29udGVudHNCb3ggPSBjb21ib0dhZGdldC0+Y29udGVudHNC
b3goKTsKKyAgICBHdGtCb3JkZXIgYm94Q29udGVudHNCb3ggPSBib3hHYWRnZXQtPmNvbnRlbnRz
Qm94KCk7CisgICAgR3RrQm9yZGVyIGJ1dHRvbkNvbnRlbnRzQm94ID0gYnV0dG9uR2FkZ2V0LT5j
b250ZW50c0JveCgpOworICAgIEd0a0JvcmRlciBidXR0b25Cb3hDb250ZW50c0JveCA9IGJ1dHRv
bkJveEdhZGdldC0+Y29udGVudHNCb3goKTsKKyAgICBHdGtCb3JkZXIgcGFkZGluZzsKKyAgICBw
YWRkaW5nLmxlZnQgPSBjb21ib0NvbnRlbnRzQm94LmxlZnQgKyBib3hDb250ZW50c0JveC5sZWZ0
ICsgYnV0dG9uQ29udGVudHNCb3gubGVmdCArIGJ1dHRvbkJveENvbnRlbnRzQm94LmxlZnQ7Cisg
ICAgcGFkZGluZy5yaWdodCA9IGNvbWJvQ29udGVudHNCb3gucmlnaHQgKyBib3hDb250ZW50c0Jv
eC5yaWdodCArIGJ1dHRvbkNvbnRlbnRzQm94LnJpZ2h0ICsgYnV0dG9uQm94Q29udGVudHNCb3gu
cmlnaHQ7CisgICAgcGFkZGluZy50b3AgPSBjb21ib0NvbnRlbnRzQm94LnRvcCArIGJveENvbnRl
bnRzQm94LnRvcCArIGJ1dHRvbkNvbnRlbnRzQm94LnRvcCArIGJ1dHRvbkJveENvbnRlbnRzQm94
LnRvcDsKKyAgICBwYWRkaW5nLmJvdHRvbSA9IGNvbWJvQ29udGVudHNCb3guYm90dG9tICsgYm94
Q29udGVudHNCb3guYm90dG9tICsgYnV0dG9uQ29udGVudHNCb3guYm90dG9tICsgYnV0dG9uQm94
Q29udGVudHNCb3guYm90dG9tOworCisgICAgYXV0byBhcnJvd1NpemUgPSBhcnJvd0dhZGdldC0+
cHJlZmVycmVkU2l6ZSgpOworICAgIHJldHVybiBMZW5ndGhCb3gocGFkZGluZy50b3AsIHBhZGRp
bmcucmlnaHQgKyAoc3R5bGUuZGlyZWN0aW9uKCkgPT0gTFRSID8gYXJyb3dTaXplLndpZHRoKCkg
OiAwKSwKKyAgICAgICAgcGFkZGluZy5ib3R0b20sIHBhZGRpbmcubGVmdCArIChzdHlsZS5kaXJl
Y3Rpb24oKSA9PSBSVEwgPyBhcnJvd1NpemUud2lkdGgoKSA6IDApKTsKK30KKworYm9vbCBSZW5k
ZXJUaGVtZUd0azo6cGFpbnRNZW51TGlzdChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVj
dCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sK
KyAgICBSZW5kZXJUaGVtZUdhZGdldDo6SW5mbyBpbmZvID0geyBSZW5kZXJUaGVtZUdhZGdldDo6
VHlwZTo6R2VuZXJpYywgImNvbWJvYm94IiwgdGhlbWVQYXJ0U3RhdGVGbGFncygqdGhpcywgQ29t
Ym9Cb3hCdXR0b24sIHJlbmRlck9iamVjdCksIHsgfSB9OworICAgIGF1dG8gY29tYm9HYWRnZXQg
PSBSZW5kZXJUaGVtZUdhZGdldDo6Y3JlYXRlKGluZm8pOworICAgIFZlY3RvcjxSZW5kZXJUaGVt
ZUdhZGdldDo6SW5mbz4gY2hpbGRyZW4gPSB7CisgICAgICAgIHsgUmVuZGVyVGhlbWVHYWRnZXQ6
OlR5cGU6OkdlbmVyaWMsICJidXR0b24iLCBpbmZvLnN0YXRlLCB7ICJjb21ibyIgfSB9CisgICAg
fTsKKyAgICBpbmZvLm5hbWUgPSAiYm94IjsKKyAgICBpbmZvLmNsYXNzTGlzdCA9IHsgImhvcml6
b250YWwiLCAibGlua2VkIiB9OworICAgIGF1dG8gYm94R2FkZ2V0ID0gc3RkOjptYWtlX3VuaXF1
ZTxSZW5kZXJUaGVtZUJveEdhZGdldD4oaW5mbywgY2hpbGRyZW4sIGNvbWJvR2FkZ2V0LmdldCgp
KTsKKyAgICBSZW5kZXJUaGVtZUdhZGdldCogYnV0dG9uR2FkZ2V0ID0gYm94R2FkZ2V0LT5jaGls
ZCgwKTsKKyAgICBpbmZvLmNsYXNzTGlzdC5yZW1vdmVMYXN0KCk7CisgICAgYXV0byBidXR0b25C
b3hHYWRnZXQgPSBSZW5kZXJUaGVtZUdhZGdldDo6Y3JlYXRlKGluZm8sIGJ1dHRvbkdhZGdldCk7
CisgICAgaW5mby50eXBlID0gUmVuZGVyVGhlbWVHYWRnZXQ6OlR5cGU6OkFycm93OworICAgIGlu
Zm8ubmFtZSA9ICJhcnJvdyI7CisgICAgaW5mby5jbGFzc0xpc3QgPSB7IH07CisgICAgYXV0byBh
cnJvd0dhZGdldCA9IFJlbmRlclRoZW1lR2FkZ2V0OjpjcmVhdGUoaW5mbywgYnV0dG9uQm94R2Fk
Z2V0LmdldCgpKTsKKworICAgIGNhaXJvX3QqIGNyID0gcGFpbnRJbmZvLmNvbnRleHQoKS5wbGF0
Zm9ybUNvbnRleHQoKS0+Y3IoKTsKKyAgICBjb21ib0dhZGdldC0+cmVuZGVyKGNyLCByZWN0KTsK
KyAgICBib3hHYWRnZXQtPnJlbmRlcihjciwgcmVjdCk7CisgICAgRmxvYXRSZWN0IGNvbnRlbnRz
UmVjdDsKKyAgICBidXR0b25HYWRnZXQtPnJlbmRlcihjciwgcmVjdCwgJmNvbnRlbnRzUmVjdCk7
CisgICAgYnV0dG9uQm94R2FkZ2V0LT5yZW5kZXIoY3IsIGNvbnRlbnRzUmVjdCk7CisgICAgYXJy
b3dHYWRnZXQtPnJlbmRlcihjciwgY29udGVudHNSZWN0KTsKKyAgICBpZiAoaXNGb2N1c2VkKHJl
bmRlck9iamVjdCkpCisgICAgICAgIGJ1dHRvbkdhZGdldC0+cmVuZGVyRm9jdXMoY3IsIHJlY3Qp
OworCisgICAgcmV0dXJuIGZhbHNlOworfQorI2Vsc2UKIExlbmd0aEJveCBSZW5kZXJUaGVtZUd0
azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdCb3goY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25z
dAogewogICAgIGlmIChzdHlsZS5hcHBlYXJhbmNlKCkgPT0gTm9Db250cm9sUGFydCkKQEAgLTgz
MSwxMyArOTM0LDggQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZW51TGlzdChjb25zdCBS
ZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnQKICAgICBHUmVmUHRyPEd0a1N0
eWxlQ29udGV4dD4gYXJyb3dTdHlsZUNvbnRleHQgPSBjcmVhdGVTdHlsZUNvbnRleHQoQ29tYm9C
b3hBcnJvdywgYnV0dG9uU3R5bGVDb250ZXh0LmdldCgpKTsKICAgICBndGtfc3R5bGVfY29udGV4
dF9zZXRfZGlyZWN0aW9uKGFycm93U3R5bGVDb250ZXh0LmdldCgpLCBkaXJlY3Rpb24pOwogCi0j
aWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMTksIDIpCi0gICAgLy8gYXJyb3ctc2NhbGluZyBzdHls
ZSBwcm9wZXJ0eSBpcyBub3cgZGVwcmVjYXRlZCBhbmQgaWdub3JlZC4KLSAgICBnZmxvYXQgYXJy
b3dTY2FsaW5nID0gMS47Ci0jZWxzZQogICAgIGdmbG9hdCBhcnJvd1NjYWxpbmc7CiAgICAgZ3Rr
X3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKHBhcmVudFN0eWxlQ29udGV4dC5nZXQoKSwgImFycm93
LXNjYWxpbmciLCAmYXJyb3dTY2FsaW5nLCBudWxscHRyKTsKLSNlbmRpZgogCiAgICAgSW50U2l6
ZSBhcnJvd1NpemUobWluQXJyb3dTaXplLCBpbm5lclJlY3QuaGVpZ2h0KCkpOwogICAgIEZsb2F0
UG9pbnQgYXJyb3dQb3NpdGlvbihpbm5lclJlY3QubG9jYXRpb24oKSk7CkBAIC04NTQsMTIgKzk1
Miw2NSBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lbnVMaXN0KGNvbnN0IFJlbmRlck9i
amVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludAogCiAgICAgcmV0dXJuIGZhbHNlOwogfQor
I2VuZGlmIC8vIEdUS19DSEVDS19WRVJTSU9OKDMsIDIwLCAwKQogCiBib29sIFJlbmRlclRoZW1l
R3RrOjpwYWludE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyQm94JiBvYmpl
Y3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewogICAg
IHJldHVybiBwYWludE1lbnVMaXN0KG9iamVjdCwgaW5mbywgcmVjdCk7CiB9CiAKKyNpZiBHVEtf
Q0hFQ0tfVkVSU0lPTigzLCAyMCwgMCkKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFRleHRG
aWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQqIGVs
ZW1lbnQpIGNvbnN0Cit7CisgICAgaWYgKCFpczxIVE1MSW5wdXRFbGVtZW50PihlbGVtZW50KSB8
fCAhc2hvdWxkSGF2ZVNwaW5CdXR0b24oZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKmVsZW1l
bnQpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gU3BpbmJ1dHRvbnMgbmVlZCBhIG1pbmlt
dW0gaGVpZ2h0IHRvIGJlIHJlbmRlcmVkIGNvcnJlY3RseS4KKyAgICBSZW5kZXJUaGVtZUdhZGdl
dDo6SW5mbyBpbmZvID0geyBSZW5kZXJUaGVtZUdhZGdldDo6VHlwZTo6R2VuZXJpYywgInNwaW5i
dXR0b24iLCBHVEtfU1RBVEVfRkxBR19OT1JNQUwsIHsgImhvcml6b250YWwiIH0gfTsKKyAgICBh
dXRvIHNwaW5idXR0b25HYWRnZXQgPSBSZW5kZXJUaGVtZUdhZGdldDo6Y3JlYXRlKGluZm8pOwor
ICAgIGluZm8udHlwZSA9IFJlbmRlclRoZW1lR2FkZ2V0OjpUeXBlOjpUZXh0RmllbGQ7CisgICAg
aW5mby5uYW1lID0gImVudHJ5IjsKKyAgICBpbmZvLmNsYXNzTGlzdC5jbGVhcigpOworICAgIGF1
dG8gZW50cnlHYWRnZXQgPSBSZW5kZXJUaGVtZUdhZGdldDo6Y3JlYXRlKGluZm8sIHNwaW5idXR0
b25HYWRnZXQuZ2V0KCkpOworICAgIGluZm8udHlwZSA9IFJlbmRlclRoZW1lR2FkZ2V0OjpUeXBl
OjpJY29uOworICAgIGluZm8ubmFtZSA9ICJidXR0b24iOworICAgIGluZm8uY2xhc3NMaXN0LmFw
cGVuZCgidXAiKTsKKyAgICBhdXRvIGJ1dHRvblVwR2FkZ2V0ID0gUmVuZGVyVGhlbWVHYWRnZXQ6
OmNyZWF0ZShpbmZvLCBzcGluYnV0dG9uR2FkZ2V0LmdldCgpKTsKKyAgICBzdGF0aWNfY2FzdDxS
ZW5kZXJUaGVtZUljb25HYWRnZXQqPihidXR0b25VcEdhZGdldC5nZXQoKSktPnNldEljb25TaXpl
KFJlbmRlclRoZW1lSWNvbkdhZGdldDo6SWNvblNpemVHdGs6Ok1lbnUpOworICAgIGluZm8uY2xh
c3NMaXN0WzBdID0gImRvd24iOworICAgIGF1dG8gYnV0dG9uRG93bkdhZGdldCA9IFJlbmRlclRo
ZW1lR2FkZ2V0OjpjcmVhdGUoaW5mbywgc3BpbmJ1dHRvbkdhZGdldC5nZXQoKSk7CisgICAgc3Rh
dGljX2Nhc3Q8UmVuZGVyVGhlbWVJY29uR2FkZ2V0Kj4oYnV0dG9uRG93bkdhZGdldC5nZXQoKSkt
PnNldEljb25TaXplKFJlbmRlclRoZW1lSWNvbkdhZGdldDo6SWNvblNpemVHdGs6Ok1lbnUpOwor
ICAgIEludFNpemUgcHJlZmVycmVkU2l6ZSA9IHNwaW5idXR0b25HYWRnZXQtPnByZWZlcnJlZFNp
emUoKTsKKyAgICBwcmVmZXJyZWRTaXplID0gcHJlZmVycmVkU2l6ZS5leHBhbmRlZFRvKGVudHJ5
R2FkZ2V0LT5wcmVmZXJyZWRTaXplKCkpOworICAgIEludFNpemUgdXBQcmVmZXJyZWRTaXplID0g
cHJlZmVycmVkU2l6ZS5leHBhbmRlZFRvKGJ1dHRvblVwR2FkZ2V0LT5wcmVmZXJyZWRTaXplKCkp
OworICAgIEludFNpemUgZG93blByZWZlcnJlZFNpemUgPSBwcmVmZXJyZWRTaXplLmV4cGFuZGVk
VG8oYnV0dG9uRG93bkdhZGdldC0+cHJlZmVycmVkU2l6ZSgpKTsKKyAgICBpbnQgaGVpZ2h0ID0g
c3RkOjptYXgodXBQcmVmZXJyZWRTaXplLmhlaWdodCgpLCBkb3duUHJlZmVycmVkU2l6ZS5oZWln
aHQoKSk7CisgICAgc3R5bGUuc2V0TWluSGVpZ2h0KExlbmd0aChoZWlnaHQsIEZpeGVkKSk7Cit9
CisKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50VGV4dEZpZWxkKGNvbnN0IFJlbmRlck9iamVj
dCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQoreworICAgIFJlbmRlclRoZW1lR2FkZ2V0OjpJbmZvIGluZm8gPSB7IFJlbmRl
clRoZW1lR2FkZ2V0OjpUeXBlOjpUZXh0RmllbGQsICJlbnRyeSIsIHRoZW1lUGFydFN0YXRlRmxh
Z3MoKnRoaXMsIEVudHJ5LCByZW5kZXJPYmplY3QpLCB7IH0gfTsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8UmVuZGVyVGhlbWVHYWRnZXQ+IHBhcmVudEdhZGdldDsKKyAgICBpZiAoaXM8SFRNTElucHV0
RWxlbWVudD4ocmVuZGVyT2JqZWN0Lm5vZGUoKSkgJiYgc2hvdWxkSGF2ZVNwaW5CdXR0b24oZG93
bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKnJlbmRlck9iamVjdC5ub2RlKCkpKSkgeworICAgICAg
ICBpbmZvLm5hbWUgPSAic3BpbmJ1dHRvbiI7CisgICAgICAgIGluZm8uY2xhc3NMaXN0LmFwcGVu
ZCgiaG9yaXpvbnRhbCIpOworICAgICAgICBwYXJlbnRHYWRnZXQgPSBSZW5kZXJUaGVtZVRleHRG
aWVsZEdhZGdldDo6Y3JlYXRlKGluZm8pOworICAgICAgICBpbmZvLm5hbWUgPSAiZW50cnkiOwor
ICAgICAgICBpbmZvLmNsYXNzTGlzdC5jbGVhcigpOworICAgIH0KKworICAgIGF1dG8gZW50cnlH
YWRnZXQgPSBSZW5kZXJUaGVtZVRleHRGaWVsZEdhZGdldDo6Y3JlYXRlKGluZm8sIHBhcmVudEdh
ZGdldC5nZXQoKSk7CisgICAgaWYgKHBhcmVudEdhZGdldCkKKyAgICAgICAgcGFyZW50R2FkZ2V0
LT5yZW5kZXIocGFpbnRJbmZvLmNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgcmVj
dCk7CisgICAgZW50cnlHYWRnZXQtPnJlbmRlcihwYWludEluZm8uY29udGV4dCgpLnBsYXRmb3Jt
Q29udGV4dCgpLT5jcigpLCByZWN0KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisjZWxzZQordm9p
ZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0VGV4dEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJl
bmRlclN0eWxlJiwgRWxlbWVudCopIGNvbnN0Cit7Cit9CisKIGJvb2wgUmVuZGVyVGhlbWVHdGs6
OnBhaW50VGV4dEZpZWxkKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewogICAgIEdSZWZQ
dHI8R3RrU3R5bGVDb250ZXh0PiBjb250ZXh0ID0gY3JlYXRlU3R5bGVDb250ZXh0KEVudHJ5KTsK
QEAgLTg4OCwxMiArMTAzOSwzNCBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFRleHRGaWVs
ZChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbgogCiAgICAgcmV0
dXJuIGZhbHNlOwogfQorI2VuZGlmCiAKLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50VGV4dEFy
ZWEoY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEZsb2F0
UmVjdCYgcikKKyNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAyMCwgMCkKK3N0YXRpYyB2b2lkIGFk
anVzdFNlYXJjaEZpZWxkSWNvblN0eWxlKFJlbmRlclRoZW1lUGFydCB0aGVtZVBhcnQsIFJlbmRl
clN0eWxlJiBzdHlsZSkKIHsKLSAgICByZXR1cm4gcGFpbnRUZXh0RmllbGQobywgaSwgcik7Ci19
CisgICAgQVNTRVJUKHRoZW1lUGFydCA9PSBFbnRyeUljb25MZWZ0IHx8IHRoZW1lUGFydCA9PSBF
bnRyeUljb25SaWdodCk7CisgICAgUmVuZGVyVGhlbWVHYWRnZXQ6OkluZm8gaW5mbyA9IHsgUmVu
ZGVyVGhlbWVHYWRnZXQ6OlR5cGU6OlRleHRGaWVsZCwgImVudHJ5IiwgR1RLX1NUQVRFX0ZMQUdf
Tk9STUFMLCB7IH0gfTsKKyAgICBhdXRvIHBhcmVudEdhZGdldCA9IFJlbmRlclRoZW1lR2FkZ2V0
OjpjcmVhdGUoaW5mbyk7CisgICAgaW5mby50eXBlID0gUmVuZGVyVGhlbWVHYWRnZXQ6OlR5cGU6
Okljb247CisgICAgaW5mby5uYW1lID0gImltYWdlIjsKKyAgICBpZiAodGhlbWVQYXJ0ID09IEVu
dHJ5SWNvbkxlZnQpCisgICAgICAgIGluZm8uY2xhc3NMaXN0LmFwcGVuZCgibGVmdCIpOworICAg
IGVsc2UKKyAgICAgICAgaW5mby5jbGFzc0xpc3QuYXBwZW5kKCJyaWdodCIpOworICAgIGF1dG8g
Z2FkZ2V0ID0gUmVuZGVyVGhlbWVJY29uR2FkZ2V0OjpjcmVhdGUoaW5mbywgcGFyZW50R2FkZ2V0
LmdldCgpKTsKIAorICAgIC8vIEdldCB0aGUgaWNvbiBzaXplIGJhc2VkIG9uIHRoZSBmb250IHNp
emUuCisgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVJY29uR2FkZ2V0Kj4oZ2FkZ2V0LmdldCgp
KS0+c2V0SWNvblNpemUoc3R5bGUuZm9udFNpemUoKSk7CisgICAgSW50U2l6ZSBwcmVmZXJyZWRT
aXplID0gZ2FkZ2V0LT5wcmVmZXJyZWRTaXplKCk7CisgICAgR3RrQm9yZGVyIGNvbnRlbnRzQm94
ID0gcGFyZW50R2FkZ2V0LT5jb250ZW50c0JveCgpOworICAgIGlmICh0aGVtZVBhcnQgPT0gRW50
cnlJY29uTGVmdCkKKyAgICAgICAgcHJlZmVycmVkU2l6ZS5leHBhbmQoY29udGVudHNCb3gubGVm
dCwgY29udGVudHNCb3gudG9wICsgY29udGVudHNCb3guYm90dG9tKTsKKyAgICBlbHNlCisgICAg
ICAgIHByZWZlcnJlZFNpemUuZXhwYW5kKGNvbnRlbnRzQm94LnJpZ2h0LCBjb250ZW50c0JveC50
b3AgKyBjb250ZW50c0JveC5ib3R0b20pOworICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aChwcmVm
ZXJyZWRTaXplLndpZHRoKCksIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aChw
cmVmZXJyZWRTaXplLmhlaWdodCgpLCBGaXhlZCkpOworfQorI2Vsc2UKIC8vIERlZmluZWQgaW4g
R1RLKyAoZ3RrL2d0a2ljb25mYWN0b3J5LmMpCiBzdGF0aWMgY29uc3QgZ2ludCBndGtJY29uU2l6
ZU1lbnUgPSAxNjsKIHN0YXRpYyBjb25zdCBnaW50IGd0a0ljb25TaXplU21hbGxUb29sYmFyID0g
MTg7CkBAIC05MTgsMTYgKzEwOTEsNiBAQCBzdGF0aWMgR3RrSWNvblNpemUgZ2V0SWNvblNpemVG
b3JQaXhlbFNpemUoZ2ludCBwaXhlbFNpemUpCiAgICAgcmV0dXJuIEdUS19JQ09OX1NJWkVfRElB
TE9HOwogfQogCi12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNC
dXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSYgc3R5
bGUsIEVsZW1lbnQqIGUpIGNvbnN0Ci17Ci0gICAgYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0
b25TdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZSk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVH
dGs6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKGNvbnN0IFJlbmRlckJveCYgbywgY29u
c3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIHJldHVybiBwYWlu
dFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0KG8sIGksIHJlY3QpOwotfQotCiBzdGF0
aWMgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZEljb25TdHlsZShSZW5kZXJUaGVtZVBhcnQgdGhlbWVQ
YXJ0LCBSZW5kZXJTdHlsZSYgc3R5bGUpCiB7CiAgICAgc3R5bGUucmVzZXRCb3JkZXIoKTsKQEAg
LTk1MSwzNSArMTExNCw3NCBAQCBzdGF0aWMgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZEljb25TdHls
ZShSZW5kZXJUaGVtZVBhcnQgdGhlbWVQYXJ0LCBSZW5kZXJTdHlsZSYgcwogICAgIHN0eWxlLnNl
dFdpZHRoKExlbmd0aCh3aWR0aCArIChwYWRkaW5nLmxlZnQgKyBwYWRkaW5nLnJpZ2h0KSwgRml4
ZWQpKTsKICAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKGhlaWdodCArIChwYWRkaW5nLnRvcCAr
IHBhZGRpbmcuYm90dG9tKSwgRml4ZWQpKTsKIH0KKyNlbmRpZgogCi12b2lkIFJlbmRlclRoZW1l
R3RrOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVz
b2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQqKSBjb25zdAorYm9vbCBSZW5kZXJU
aGVtZUd0azo6cGFpbnRUZXh0QXJlYShjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50
SW5mbyYgaSwgY29uc3QgRmxvYXRSZWN0JiByKQogewotICAgIGFkanVzdFNlYXJjaEZpZWxkSWNv
blN0eWxlKEVudHJ5SWNvbkxlZnQsIHN0eWxlKTsKKyAgICByZXR1cm4gcGFpbnRUZXh0RmllbGQo
bywgaSwgcik7CiB9CiAKLXN0YXRpYyBJbnRSZWN0IGNlbnRlclJlY3RWZXJ0aWNhbGx5SW5QYXJl
bnRJbnB1dEVsZW1lbnQoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IElu
dFJlY3QmIHJlY3QpCit2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVsZFJlc3Vs
dHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSYg
c3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0CiB7Ci0gICAgaWYgKCFyZW5kZXJPYmplY3Qubm9kZSgp
KQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOworICAgIGFkanVzdFNlYXJjaEZpZWxkQ2FuY2Vs
QnV0dG9uU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGUpOworfQogCi0gICAgLy8gR2V0IHRo
ZSByZW5kZXJlciBvZiA8aW5wdXQ+IGVsZW1lbnQuCi0gICAgTm9kZSogaW5wdXQgPSByZW5kZXJP
YmplY3Qubm9kZSgpLT5zaGFkb3dIb3N0KCk7Ci0gICAgaWYgKCFpbnB1dCkKLSAgICAgICAgaW5w
dXQgPSByZW5kZXJPYmplY3Qubm9kZSgpOwotICAgIGlmICghaXM8UmVuZGVyQm94PigqaW5wdXQt
PnJlbmRlcmVyKCkpKQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOworYm9vbCBSZW5kZXJUaGVt
ZUd0azo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oY29uc3QgUmVuZGVyQm94JiBvLCBj
b25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgcmV0dXJuIHBh
aW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnQobywgaSwgcmVjdCk7Cit9CiAKLSAg
ICAvLyBJZiBwb3NzaWJsZSBjZW50ZXIgdGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgcmVjdCB2ZXJ0
aWNhbGx5IGluIHRoZSBwYXJlbnQgaW5wdXQgZWxlbWVudC4KLSAgICAvLyBXZSBhbHNvIGFkZCBv
bmUgcGl4ZWwgaGVyZSB0byBlbnN1cmUgdGhhdCB0aGUgeSBjb29yZGluYXRlIGlzIHJvdW5kZWQg
dXAgZm9yIGJveCBoZWlnaHRzCi0gICAgLy8gdGhhdCBhcmUgZXZlbiwgd2hpY2ggbG9va3MgaW4g
cmVsYXRpb24gdG8gdGhlIGJveCB0ZXh0LgotICAgIEludFJlY3QgaW5wdXRDb250ZW50Qm94ID0g
ZG93bmNhc3Q8UmVuZGVyQm94PigqaW5wdXQtPnJlbmRlcmVyKCkpLmFic29sdXRlQ29udGVudEJv
eCgpOwordm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3Jh
dGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50
KikgY29uc3QKK3sKKyAgICBhZGp1c3RTZWFyY2hGaWVsZEljb25TdHlsZShFbnRyeUljb25MZWZ0
LCBzdHlsZSk7Cit9CiAKLSAgICAvLyBNYWtlIHN1cmUgdGhlIHNjYWxlZCBkZWNvcmF0aW9uIHN0
YXlzIHNxdWFyZSBhbmQgd2lsbCBmaXQgaW4gaXRzIHBhcmVudCdzIGJveC4KLSAgICBpbnQgaWNv
blNpemUgPSBzdGQ6Om1pbihpbnB1dENvbnRlbnRCb3gud2lkdGgoKSwgc3RkOjptaW4oaW5wdXRD
b250ZW50Qm94LmhlaWdodCgpLCByZWN0LmhlaWdodCgpKSk7Ci0gICAgSW50UmVjdCBzY2FsZWRS
ZWN0KHJlY3QueCgpLCBpbnB1dENvbnRlbnRCb3gueSgpICsgKGlucHV0Q29udGVudEJveC5oZWln
aHQoKSAtIGljb25TaXplICsgMSkgLyAyLCBpY29uU2l6ZSwgaWNvblNpemUpOwotICAgIHJldHVy
biBzY2FsZWRSZWN0Owordm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2VhcmNoRmllbGRDYW5j
ZWxCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50
KikgY29uc3QKK3sKKyAgICBhZGp1c3RTZWFyY2hGaWVsZEljb25TdHlsZShFbnRyeUljb25SaWdo
dCwgc3R5bGUpOwogfQogCisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMjAsIDApCitzdGF0aWMg
Ym9vbCBwYWludFNlYXJjaEZpZWxkSWNvbihSZW5kZXJUaGVtZUd0ayogdGhlbWUsIFJlbmRlclRo
ZW1lUGFydCB0aGVtZVBhcnQsIGNvbnN0IFJlbmRlckJveCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBBU1NFUlQo
dGhlbWVQYXJ0ID09IEVudHJ5SWNvbkxlZnQgfHwgdGhlbWVQYXJ0ID09IEVudHJ5SWNvblJpZ2h0
KTsKKyAgICBSZW5kZXJUaGVtZUdhZGdldDo6SW5mbyBpbmZvID0geyBSZW5kZXJUaGVtZUdhZGdl
dDo6VHlwZTo6VGV4dEZpZWxkLCAiZW50cnkiLCB0aGVtZVBhcnRTdGF0ZUZsYWdzKCp0aGVtZSwg
RW50cnksIHJlbmRlck9iamVjdCksIHsgfSB9OworICAgIGF1dG8gcGFyZW50R2FkZ2V0ID0gUmVu
ZGVyVGhlbWVHYWRnZXQ6OmNyZWF0ZShpbmZvKTsKKyAgICBpbmZvLnR5cGUgPSBSZW5kZXJUaGVt
ZUdhZGdldDo6VHlwZTo6SWNvbjsKKyAgICBpbmZvLnN0YXRlID0gdGhlbWVQYXJ0U3RhdGVGbGFn
cygqdGhlbWUsIHRoZW1lUGFydCwgcmVuZGVyT2JqZWN0KTsKKyAgICBpbmZvLm5hbWUgPSAiaW1h
Z2UiOworICAgIGlmICh0aGVtZVBhcnQgPT0gRW50cnlJY29uTGVmdCkKKyAgICAgICAgaW5mby5j
bGFzc0xpc3QuYXBwZW5kKCJsZWZ0Iik7CisgICAgZWxzZQorICAgICAgICBpbmZvLmNsYXNzTGlz
dC5hcHBlbmQoInJpZ2h0Iik7CisgICAgYXV0byBnYWRnZXQgPSBSZW5kZXJUaGVtZUdhZGdldDo6
Y3JlYXRlKGluZm8sIHBhcmVudEdhZGdldC5nZXQoKSk7CisgICAgYXV0byogZ2FkZ2V0SWNvbiA9
IHN0YXRpY19jYXN0PFJlbmRlclRoZW1lSWNvbkdhZGdldCo+KGdhZGdldC5nZXQoKSk7CisgICAg
Z2FkZ2V0SWNvbi0+c2V0SWNvblNpemUocmVuZGVyT2JqZWN0LnN0eWxlKCkuZm9udFNpemUoKSk7
CisgICAgaWYgKHRoZW1lUGFydCA9PSBFbnRyeUljb25MZWZ0KQorICAgICAgICBnYWRnZXRJY29u
LT5zZXRJY29uTmFtZSgiZWRpdC1maW5kLXN5bWJvbGljIik7CisgICAgZWxzZQorICAgICAgICBn
YWRnZXRJY29uLT5zZXRJY29uTmFtZSgiZWRpdC1jbGVhci1zeW1ib2xpYyIpOworICAgIEd0a0Jv
cmRlciBjb250ZW50c0JveCA9IHBhcmVudEdhZGdldC0+Y29udGVudHNCb3goKTsKKyAgICBJbnRS
ZWN0IGljb25SZWN0ID0gcmVjdDsKKyAgICBpZiAodGhlbWVQYXJ0ID09IEVudHJ5SWNvbkxlZnQp
IHsKKyAgICAgICAgaWNvblJlY3QubW92ZShjb250ZW50c0JveC5sZWZ0LCBjb250ZW50c0JveC50
b3ApOworICAgICAgICBpY29uUmVjdC5jb250cmFjdChjb250ZW50c0JveC5sZWZ0LCBjb250ZW50
c0JveC50b3AgKyBjb250ZW50c0JveC5ib3R0b20pOworICAgIH0gZWxzZSB7CisgICAgICAgIGlj
b25SZWN0Lm1vdmUoY29udGVudHNCb3gucmlnaHQsIGNvbnRlbnRzQm94LnRvcCk7CisgICAgICAg
IGljb25SZWN0LmNvbnRyYWN0KGNvbnRlbnRzQm94LnJpZ2h0LCBjb250ZW50c0JveC50b3AgKyBj
b250ZW50c0JveC5ib3R0b20pOworICAgIH0KKyAgICByZXR1cm4gIWdhZGdldC0+cmVuZGVyKHBh
aW50SW5mby5jb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCktPmNyKCksIGljb25SZWN0KTsKK30K
K2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBh
cnQoY29uc3QgUmVuZGVyQm94JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIHJldHVybiBwYWludFNlYXJjaEZpZWxk
SWNvbih0aGlzLCBFbnRyeUljb25MZWZ0LCByZW5kZXJPYmplY3QsIHBhaW50SW5mbywgcmVjdCk7
Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24o
Y29uc3QgUmVuZGVyQm94JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIHJldHVybiBwYWludFNlYXJjaEZpZWxkSWNv
bih0aGlzLCBFbnRyeUljb25SaWdodCwgcmVuZGVyT2JqZWN0LCBwYWludEluZm8sIHJlY3QpOwor
fQorI2Vsc2UKIHN0YXRpYyBib29sIHBhaW50SWNvbihHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQs
IEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBj
b25zdCBjaGFyKiBpY29uTmFtZSkKIHsKICAgICBHUmVmUHRyPEdka1BpeGJ1Zj4gaWNvbiA9IGxv
YWRUaGVtZWRJY29uKGNvbnRleHQsIGljb25OYW1lLCBnZXRJY29uU2l6ZUZvclBpeGVsU2l6ZShy
ZWN0LmhlaWdodCgpKSk7CkBAIC0xMDAyLDYgKzEyMDQsMjkgQEAgc3RhdGljIGJvb2wgcGFpbnRF
bnRyeUljb24oUmVuZGVyVGhlbWVQYXJ0IHRoZW1lUGFydCwgY29uc3QgY2hhciogaWNvbk5hbWUs
IEdyYXAKICAgICByZXR1cm4gcGFpbnRJY29uKGNvbnRleHQuZ2V0KCksIGdyYXBoaWNzQ29udGV4
dCwgcmVjdCwgaWNvbk5hbWUpOwogfQogCitzdGF0aWMgSW50UmVjdCBjZW50ZXJSZWN0VmVydGlj
YWxseUluUGFyZW50SW5wdXRFbGVtZW50KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0
LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmICghcmVuZGVyT2JqZWN0Lm5vZGUoKSkK
KyAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKworICAgIC8vIEdldCB0aGUgcmVuZGVyZXIgb2Yg
PGlucHV0PiBlbGVtZW50LgorICAgIE5vZGUqIGlucHV0ID0gcmVuZGVyT2JqZWN0Lm5vZGUoKS0+
c2hhZG93SG9zdCgpOworICAgIGlmICghaW5wdXQpCisgICAgICAgIGlucHV0ID0gcmVuZGVyT2Jq
ZWN0Lm5vZGUoKTsKKyAgICBpZiAoIWlzPFJlbmRlckJveD4oKmlucHV0LT5yZW5kZXJlcigpKSkK
KyAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKworICAgIC8vIElmIHBvc3NpYmxlIGNlbnRlciB0
aGUgeS1jb29yZGluYXRlIG9mIHRoZSByZWN0IHZlcnRpY2FsbHkgaW4gdGhlIHBhcmVudCBpbnB1
dCBlbGVtZW50LgorICAgIC8vIFdlIGFsc28gYWRkIG9uZSBwaXhlbCBoZXJlIHRvIGVuc3VyZSB0
aGF0IHRoZSB5IGNvb3JkaW5hdGUgaXMgcm91bmRlZCB1cCBmb3IgYm94IGhlaWdodHMKKyAgICAv
LyB0aGF0IGFyZSBldmVuLCB3aGljaCBsb29rcyBpbiByZWxhdGlvbiB0byB0aGUgYm94IHRleHQu
CisgICAgSW50UmVjdCBpbnB1dENvbnRlbnRCb3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+KCppbnB1
dC0+cmVuZGVyZXIoKSkuYWJzb2x1dGVDb250ZW50Qm94KCk7CisKKyAgICAvLyBNYWtlIHN1cmUg
dGhlIHNjYWxlZCBkZWNvcmF0aW9uIHN0YXlzIHNxdWFyZSBhbmQgd2lsbCBmaXQgaW4gaXRzIHBh
cmVudCdzIGJveC4KKyAgICBpbnQgaWNvblNpemUgPSBzdGQ6Om1pbihpbnB1dENvbnRlbnRCb3gu
d2lkdGgoKSwgc3RkOjptaW4oaW5wdXRDb250ZW50Qm94LmhlaWdodCgpLCByZWN0LmhlaWdodCgp
KSk7CisgICAgSW50UmVjdCBzY2FsZWRSZWN0KHJlY3QueCgpLCBpbnB1dENvbnRlbnRCb3gueSgp
ICsgKGlucHV0Q29udGVudEJveC5oZWlnaHQoKSAtIGljb25TaXplICsgMSkgLyAyLCBpY29uU2l6
ZSwgaWNvblNpemUpOworICAgIHJldHVybiBzY2FsZWRSZWN0OworfQorCiBib29sIFJlbmRlclRo
ZW1lR3RrOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0KGNvbnN0IFJlbmRl
ckJveCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50
UmVjdCYgcmVjdCkKIHsKICAgICBJbnRSZWN0IGljb25SZWN0ID0gY2VudGVyUmVjdFZlcnRpY2Fs
bHlJblBhcmVudElucHV0RWxlbWVudChyZW5kZXJPYmplY3QsIHJlY3QpOwpAQCAtMTAxMiwxMSAr
MTIzNyw2IEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVj
b3JhdGlvblBhcnQoY29uc3QgUmVuZGVyQm94JiByZW5kCiAgICAgICAgIGd0a0ljb25TdGF0ZUZs
YWdzKHRoaXMsIHJlbmRlck9iamVjdCkpOwogfQogCi12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1
c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHls
ZSYgc3R5bGUsIEVsZW1lbnQqKSBjb25zdAotewotICAgIGFkanVzdFNlYXJjaEZpZWxkSWNvblN0
eWxlKEVudHJ5SWNvblJpZ2h0LCBzdHlsZSk7Ci19Ci0KIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBh
aW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oY29uc3QgUmVuZGVyQm94JiByZW5kZXJPYmplY3Qs
IGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAg
IEludFJlY3QgaWNvblJlY3QgPSBjZW50ZXJSZWN0VmVydGljYWxseUluUGFyZW50SW5wdXRFbGVt
ZW50KHJlbmRlck9iamVjdCwgcmVjdCk7CkBAIC0xMDI2LDYgKzEyNDYsNyBAQCBib29sIFJlbmRl
clRoZW1lR3RrOjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKGNvbnN0IFJlbmRlckJveCYg
cmVuZGVyT2JqZWN0LAogICAgIHJldHVybiAhcGFpbnRFbnRyeUljb24oRW50cnlJY29uUmlnaHQs
ICJlZGl0LWNsZWFyLXN5bWJvbGljIiwgcGFpbnRJbmZvLmNvbnRleHQoKSwgaWNvblJlY3QsIGd0
a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LnN0eWxlKCkuZGlyZWN0aW9uKCkpLAogICAgICAg
ICBndGtJY29uU3RhdGVGbGFncyh0aGlzLCByZW5kZXJPYmplY3QpKTsKIH0KKyNlbmRpZiAvLyBH
VEtfQ0hFQ0tfVkVSU0lPTigzLCAyMCwgMCkKIAogdm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0
U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVt
ZW50KikgY29uc3QKIHsKQEAgLTEwNTUsNiArMTI3NiwxNTkgQEAgdm9pZCBSZW5kZXJUaGVtZUd0
azo6YWRqdXN0U2xpZGVyVGh1bWJTdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBS
ZW5kZXIKICAgICBzdHlsZS5zZXRCb3hTaGFkb3cobnVsbHB0cik7CiB9CiAKKyNpZiBHVEtfQ0hF
Q0tfVkVSU0lPTigzLCAyMCwgMCkKKy8qCisgKiBHdGtTY2FsZQorICoKKyAqIHNjYWxlCisgKiDi
lbDilIDilIAgY29udGVudHMKKyAqICAgICDilbDilIDilIAgdHJvdWdoCisgKiAgICAgICAgIOKU
nOKUgOKUgCBzbGlkZXIKKyAqICAgICAgICAg4pWw4pSA4pSAIFtoaWdobGlnaHRdCisgKi8KK2Jv
b2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50U2xpZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0JiBy
ZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQoreworICAgIENvbnRyb2xQYXJ0IHBhcnQgPSByZW5kZXJPYmplY3Quc3R5bGUoKS5hcHBl
YXJhbmNlKCk7CisgICAgQVNTRVJUKHBhcnQgPT0gU2xpZGVySG9yaXpvbnRhbFBhcnQgfHwgcGFy
dCA9PSBTbGlkZXJWZXJ0aWNhbFBhcnQpOworCisgICAgUmVuZGVyVGhlbWVHYWRnZXQ6OkluZm8g
aW5mbyA9IHsgUmVuZGVyVGhlbWVHYWRnZXQ6OlR5cGU6OkdlbmVyaWMsICJzY2FsZSIsIHRoZW1l
UGFydFN0YXRlRmxhZ3MoKnRoaXMsIFNjYWxlLCByZW5kZXJPYmplY3QpLCB7IH0gfTsKKyAgICBp
ZiAocGFydCA9PSBTbGlkZXJIb3Jpem9udGFsUGFydCkKKyAgICAgICAgaW5mby5jbGFzc0xpc3Qu
YXBwZW5kKCJob3Jpem9udGFsIik7CisgICAgZWxzZQorICAgICAgICBpbmZvLmNsYXNzTGlzdC5h
cHBlbmQoInZlcnRpY2FsIik7CisgICAgYXV0byBzY2FsZUdhZGdldCA9IFJlbmRlclRoZW1lR2Fk
Z2V0OjpjcmVhdGUoaW5mbyk7CisgICAgaW5mby5uYW1lID0gImNvbnRlbnRzIjsKKyAgICBpbmZv
LmNsYXNzTGlzdC5jbGVhcigpOworICAgIGF1dG8gY29udGVudHNHYWRnZXQgPSBSZW5kZXJUaGVt
ZUdhZGdldDo6Y3JlYXRlKGluZm8sIHNjYWxlR2FkZ2V0LmdldCgpKTsKKyAgICBpbmZvLm5hbWUg
PSAidHJvdWdoIjsKKyAgICBhdXRvIHRyb3VnaEdhZGdldCA9IFJlbmRlclRoZW1lR2FkZ2V0Ojpj
cmVhdGUoaW5mbywgY29udGVudHNHYWRnZXQuZ2V0KCkpOworICAgIGluZm8ubmFtZSA9ICJzbGlk
ZXIiOworICAgIGF1dG8gc2xpZGVyR2FkZ2V0ID0gUmVuZGVyVGhlbWVHYWRnZXQ6OmNyZWF0ZShp
bmZvLCB0cm91Z2hHYWRnZXQuZ2V0KCkpOworICAgIGluZm8ubmFtZSA9ICJoaWdobGlnaHQiOwor
ICAgIGF1dG8gaGlnaGxpZ2h0R2FkZ2V0ID0gUmVuZGVyVGhlbWVHYWRnZXQ6OmNyZWF0ZShpbmZv
LCB0cm91Z2hHYWRnZXQuZ2V0KCkpOworCisgICAgLy8gVGhlIGdpdmVuIHJlY3RhbmdsZSBpcyBu
b3QgY2FsY3VsYXRlZCBiYXNlZCBvbiB0aGUgc2NhbGUgc2l6ZSwgYnV0IGFsbCB0aGUgbWFyZ2lu
cyBhbmQgcGFkZGluZ3MgYXJlIGJhc2VkIG9uIGl0LgorICAgIEludFNpemUgcHJlZmVycmVkU2l6
ZSA9IHNjYWxlR2FkZ2V0LT5wcmVmZXJyZWRTaXplKCk7CisgICAgcHJlZmVycmVkU2l6ZSA9IHBy
ZWZlcnJlZFNpemUuZXhwYW5kZWRUbyhjb250ZW50c0dhZGdldC0+cHJlZmVycmVkU2l6ZSgpKTsK
KyAgICBwcmVmZXJyZWRTaXplID0gcHJlZmVycmVkU2l6ZS5leHBhbmRlZFRvKHRyb3VnaEdhZGdl
dC0+cHJlZmVycmVkU2l6ZSgpKTsKKyAgICBGbG9hdFJlY3QgdHJhY2tSZWN0ID0gcmVjdDsKKyAg
ICBpZiAocGFydCA9PSBTbGlkZXJIb3Jpem9udGFsUGFydCkgeworICAgICAgICB0cmFja1JlY3Qu
bW92ZSgwLCByZWN0LmhlaWdodCgpIC8gMiAtIChwcmVmZXJyZWRTaXplLmhlaWdodCgpIC8gMikp
OworICAgICAgICB0cmFja1JlY3Quc2V0SGVpZ2h0KHByZWZlcnJlZFNpemUuaGVpZ2h0KCkpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIHRyYWNrUmVjdC5tb3ZlKHJlY3Qud2lkdGgoKSAvIDIgLSAo
cHJlZmVycmVkU2l6ZS53aWR0aCgpIC8gMiksIDApOworICAgICAgICB0cmFja1JlY3Quc2V0V2lk
dGgocHJlZmVycmVkU2l6ZS53aWR0aCgpKTsKKyAgICB9CisKKyAgICBGbG9hdFJlY3QgY29udGVu
dHNSZWN0OworICAgIHNjYWxlR2FkZ2V0LT5yZW5kZXIocGFpbnRJbmZvLmNvbnRleHQoKS5wbGF0
Zm9ybUNvbnRleHQoKS0+Y3IoKSwgdHJhY2tSZWN0LCAmY29udGVudHNSZWN0KTsKKyAgICBjb250
ZW50c0dhZGdldC0+cmVuZGVyKHBhaW50SW5mby5jb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCkt
PmNyKCksIGNvbnRlbnRzUmVjdCwgJmNvbnRlbnRzUmVjdCk7CisgICAgLy8gU2NhbGUgdHJvdWdo
IGRlZmluZXMgaXRzIHNpemUgcXVlcnlpbmcgc2xpZGVyIGFuZCBoaWdobGlnaHQuCisgICAgaWYg
KHBhcnQgPT0gU2xpZGVySG9yaXpvbnRhbFBhcnQpCisgICAgICAgIGNvbnRlbnRzUmVjdC5zZXRI
ZWlnaHQodHJvdWdoR2FkZ2V0LT5wcmVmZXJyZWRTaXplKCkuaGVpZ2h0KCkgKyBzdGQ6Om1heChz
bGlkZXJHYWRnZXQtPnByZWZlcnJlZFNpemUoKS5oZWlnaHQoKSwgaGlnaGxpZ2h0R2FkZ2V0LT5w
cmVmZXJyZWRTaXplKCkuaGVpZ2h0KCkpKTsKKyAgICBlbHNlCisgICAgICAgIGNvbnRlbnRzUmVj
dC5zZXRXaWR0aCh0cm91Z2hHYWRnZXQtPnByZWZlcnJlZFNpemUoKS53aWR0aCgpICsgc3RkOjpt
YXgoc2xpZGVyR2FkZ2V0LT5wcmVmZXJyZWRTaXplKCkud2lkdGgoKSwgaGlnaGxpZ2h0R2FkZ2V0
LT5wcmVmZXJyZWRTaXplKCkud2lkdGgoKSkpOworICAgIEZsb2F0UmVjdCB0cm91Z2hSZWN0ID0g
Y29udGVudHNSZWN0OworICAgIHRyb3VnaEdhZGdldC0+cmVuZGVyKHBhaW50SW5mby5jb250ZXh0
KCkucGxhdGZvcm1Db250ZXh0KCktPmNyKCksIHRyb3VnaFJlY3QsICZjb250ZW50c1JlY3QpOwor
ICAgIGlmIChpc0ZvY3VzZWQocmVuZGVyT2JqZWN0KSkKKyAgICAgICAgdHJvdWdoR2FkZ2V0LT5y
ZW5kZXJGb2N1cyhwYWludEluZm8uY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCB0
cm91Z2hSZWN0KTsKKworICAgIExheW91dFBvaW50IHRodW1iTG9jYXRpb247CisgICAgaWYgKGlz
PEhUTUxJbnB1dEVsZW1lbnQ+KHJlbmRlck9iamVjdC5ub2RlKCkpKSB7CisgICAgICAgIGF1dG8m
IGlucHV0ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKnJlbmRlck9iamVjdC5ub2RlKCkp
OworICAgICAgICBpZiAoYXV0byogZWxlbWVudCA9IGlucHV0LnNsaWRlclRodW1iRWxlbWVudCgp
KQorICAgICAgICAgICAgdGh1bWJMb2NhdGlvbiA9IGVsZW1lbnQtPnJlbmRlckJveCgpLT5sb2Nh
dGlvbigpOworICAgIH0KKworICAgIGlmIChwYXJ0ID09IFNsaWRlckhvcml6b250YWxQYXJ0KSB7
CisgICAgICAgIGlmIChyZW5kZXJPYmplY3Quc3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBSVEwpIHsK
KyAgICAgICAgICAgIGNvbnRlbnRzUmVjdC5tb3ZlKHRodW1iTG9jYXRpb24ueCgpLCAwKTsKKyAg
ICAgICAgICAgIGNvbnRlbnRzUmVjdC5zZXRXaWR0aChjb250ZW50c1JlY3Qud2lkdGgoKSAtIHRo
dW1iTG9jYXRpb24ueCgpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBjb250ZW50c1Jl
Y3Quc2V0V2lkdGgodGh1bWJMb2NhdGlvbi54KCkpOworICAgIH0gZWxzZQorICAgICAgICBjb250
ZW50c1JlY3Quc2V0SGVpZ2h0KHRodW1iTG9jYXRpb24ueSgpKTsKKyAgICBoaWdobGlnaHRHYWRn
ZXQtPnJlbmRlcihwYWludEluZm8uY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCBj
b250ZW50c1JlY3QpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFJlbmRlclRoZW1l
R3RrOjphZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50Kikg
Y29uc3QKK3sKKyAgICBDb250cm9sUGFydCBwYXJ0ID0gc3R5bGUuYXBwZWFyYW5jZSgpOworICAg
IGlmIChwYXJ0ICE9IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQgJiYgcGFydCAhPSBTbGlkZXJU
aHVtYlZlcnRpY2FsUGFydCkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVuZGVyVGhlbWVHYWRn
ZXQ6OkluZm8gaW5mbyA9IHsgUmVuZGVyVGhlbWVHYWRnZXQ6OlR5cGU6OkdlbmVyaWMsICJzY2Fs
ZSIsIEdUS19TVEFURV9GTEFHX05PUk1BTCwgeyB9IH07CisgICAgaWYgKHBhcnQgPT0gU2xpZGVy
SG9yaXpvbnRhbFBhcnQpCisgICAgICAgIGluZm8uY2xhc3NMaXN0LmFwcGVuZCgiaG9yaXpvbnRh
bCIpOworICAgIGVsc2UKKyAgICAgICAgaW5mby5jbGFzc0xpc3QuYXBwZW5kKCJ2ZXJ0aWNhbCIp
OworICAgIGF1dG8gc2NhbGVHYWRnZXQgPSBSZW5kZXJUaGVtZUdhZGdldDo6Y3JlYXRlKGluZm8p
OworICAgIGluZm8ubmFtZSA9ICJjb250ZW50cyI7CisgICAgaW5mby5jbGFzc0xpc3QuY2xlYXIo
KTsKKyAgICBhdXRvIGNvbnRlbnRzR2FkZ2V0ID0gUmVuZGVyVGhlbWVHYWRnZXQ6OmNyZWF0ZShp
bmZvLCBzY2FsZUdhZGdldC5nZXQoKSk7CisgICAgaW5mby5uYW1lID0gInRyb3VnaCI7CisgICAg
YXV0byB0cm91Z2hHYWRnZXQgPSBSZW5kZXJUaGVtZUdhZGdldDo6Y3JlYXRlKGluZm8sIGNvbnRl
bnRzR2FkZ2V0LmdldCgpKTsKKyAgICBpbmZvLm5hbWUgPSAic2xpZGVyIjsKKyAgICBhdXRvIHNs
aWRlckdhZGdldCA9IFJlbmRlclRoZW1lR2FkZ2V0OjpjcmVhdGUoaW5mbywgdHJvdWdoR2FkZ2V0
LmdldCgpKTsKKyAgICBpbmZvLm5hbWUgPSAiaGlnaGxpZ2h0IjsKKyAgICBhdXRvIGhpZ2hsaWdo
dEdhZGdldCA9IFJlbmRlclRoZW1lR2FkZ2V0OjpjcmVhdGUoaW5mbywgdHJvdWdoR2FkZ2V0Lmdl
dCgpKTsKKworICAgIEludFNpemUgcHJlZmVycmVkU2l6ZSA9IHNjYWxlR2FkZ2V0LT5wcmVmZXJy
ZWRTaXplKCk7CisgICAgcHJlZmVycmVkU2l6ZSA9IHByZWZlcnJlZFNpemUuZXhwYW5kZWRUbyhj
b250ZW50c0dhZGdldC0+cHJlZmVycmVkU2l6ZSgpKTsKKyAgICBwcmVmZXJyZWRTaXplID0gcHJl
ZmVycmVkU2l6ZS5leHBhbmRlZFRvKHRyb3VnaEdhZGdldC0+cHJlZmVycmVkU2l6ZSgpKTsKKyAg
ICBwcmVmZXJyZWRTaXplID0gcHJlZmVycmVkU2l6ZS5leHBhbmRlZFRvKHNsaWRlckdhZGdldC0+
cHJlZmVycmVkU2l6ZSgpKTsKKyAgICBpZiAocGFydCA9PSBTbGlkZXJUaHVtYkhvcml6b250YWxQ
YXJ0KSB7CisgICAgICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aChwcmVmZXJyZWRTaXplLndpZHRo
KCksIEZpeGVkKSk7CisgICAgICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgocHJlZmVycmVkU2l6
ZS5oZWlnaHQoKSwgRml4ZWQpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBBU1NFUlQo
cGFydCA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCk7CisgICAgc3R5bGUuc2V0V2lkdGgoTGVu
Z3RoKHByZWZlcnJlZFNpemUuaGVpZ2h0KCksIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0SGVpZ2h0
KExlbmd0aChwcmVmZXJyZWRTaXplLndpZHRoKCksIEZpeGVkKSk7Cit9CisKK2Jvb2wgUmVuZGVy
VGhlbWVHdGs6OnBhaW50U2xpZGVyVGh1bWIoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmpl
Y3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorewor
ICAgIENvbnRyb2xQYXJ0IHBhcnQgPSByZW5kZXJPYmplY3Quc3R5bGUoKS5hcHBlYXJhbmNlKCk7
CisgICAgQVNTRVJUKHBhcnQgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCB8fCBwYXJ0ID09
IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KTsKKworICAgIFJlbmRlclRoZW1lR2FkZ2V0OjpJbmZv
IGluZm8gPSB7IFJlbmRlclRoZW1lR2FkZ2V0OjpUeXBlOjpHZW5lcmljLCAic2NhbGUiLCB0aGVt
ZVBhcnRTdGF0ZUZsYWdzKCp0aGlzLCBTY2FsZSwgcmVuZGVyT2JqZWN0KSwgeyB9IH07CisgICAg
aWYgKHBhcnQgPT0gU2xpZGVySG9yaXpvbnRhbFBhcnQpCisgICAgICAgIGluZm8uY2xhc3NMaXN0
LmFwcGVuZCgiaG9yaXpvbnRhbCIpOworICAgIGVsc2UKKyAgICAgICAgaW5mby5jbGFzc0xpc3Qu
YXBwZW5kKCJ2ZXJ0aWNhbCIpOworICAgIGF1dG8gc2NhbGVHYWRnZXQgPSBSZW5kZXJUaGVtZUdh
ZGdldDo6Y3JlYXRlKGluZm8pOworICAgIGluZm8ubmFtZSA9ICJjb250ZW50cyI7CisgICAgaW5m
by5jbGFzc0xpc3QuY2xlYXIoKTsKKyAgICBhdXRvIGNvbnRlbnRzR2FkZ2V0ID0gUmVuZGVyVGhl
bWVHYWRnZXQ6OmNyZWF0ZShpbmZvLCBzY2FsZUdhZGdldC5nZXQoKSk7CisgICAgaW5mby5uYW1l
ID0gInRyb3VnaCI7CisgICAgYXV0byB0cm91Z2hHYWRnZXQgPSBSZW5kZXJUaGVtZUdhZGdldDo6
Y3JlYXRlKGluZm8sIGNvbnRlbnRzR2FkZ2V0LmdldCgpKTsKKyAgICBpbmZvLm5hbWUgPSAic2xp
ZGVyIjsKKyAgICBpbmZvLnN0YXRlID0gdGhlbWVQYXJ0U3RhdGVGbGFncygqdGhpcywgU2NhbGVT
bGlkZXIsIHJlbmRlck9iamVjdCk7CisgICAgYXV0byBzbGlkZXJHYWRnZXQgPSBSZW5kZXJUaGVt
ZUdhZGdldDo6Y3JlYXRlKGluZm8sIHRyb3VnaEdhZGdldC5nZXQoKSk7CisgICAgaW5mby5uYW1l
ID0gImhpZ2hsaWdodCI7CisgICAgYXV0byBoaWdobGlnaHRHYWRnZXQgPSBSZW5kZXJUaGVtZUdh
ZGdldDo6Y3JlYXRlKGluZm8sIHRyb3VnaEdhZGdldC5nZXQoKSk7CisKKyAgICBHdGtCb3JkZXIg
c2NhbGVDb250ZW50c0JveCA9IHNjYWxlR2FkZ2V0LT5jb250ZW50c0JveCgpOworICAgIEd0a0Jv
cmRlciBjb250ZW50c0NvbnRlbnRzQm94ID0gY29udGVudHNHYWRnZXQtPmNvbnRlbnRzQm94KCk7
CisgICAgR3RrQm9yZGVyIHRyb3VnaENvbnRlbnRzQm94ID0gdHJvdWdoR2FkZ2V0LT5jb250ZW50
c0JveCgpOworICAgIEd0a0JvcmRlciBwYWRkaW5nOworICAgIHBhZGRpbmcubGVmdCA9IHNjYWxl
Q29udGVudHNCb3gubGVmdCArIGNvbnRlbnRzQ29udGVudHNCb3gubGVmdCArIHRyb3VnaENvbnRl
bnRzQm94LmxlZnQ7CisgICAgcGFkZGluZy5yaWdodCA9IHNjYWxlQ29udGVudHNCb3gucmlnaHQg
KyBjb250ZW50c0NvbnRlbnRzQm94LnJpZ2h0ICsgdHJvdWdoQ29udGVudHNCb3gucmlnaHQ7Cisg
ICAgcGFkZGluZy50b3AgPSBzY2FsZUNvbnRlbnRzQm94LnRvcCArIGNvbnRlbnRzQ29udGVudHNC
b3gudG9wICsgdHJvdWdoQ29udGVudHNCb3gudG9wOworICAgIHBhZGRpbmcuYm90dG9tID0gc2Nh
bGVDb250ZW50c0JveC5ib3R0b20gKyBjb250ZW50c0NvbnRlbnRzQm94LmJvdHRvbSArIHRyb3Vn
aENvbnRlbnRzQm94LmJvdHRvbTsKKworICAgIC8vIFNjYWxlIHRyb3VnaCBkZWZpbmVzIGl0cyBz
aXplIHF1ZXJ5aW5nIHNsaWRlciBhbmQgaGlnaGxpZ2h0LgorICAgIGludCB0cm91Z2hIZWlnaHQg
PSB0cm91Z2hHYWRnZXQtPnByZWZlcnJlZFNpemUoKS5oZWlnaHQoKSArIHN0ZDo6bWF4KHNsaWRl
ckdhZGdldC0+cHJlZmVycmVkU2l6ZSgpLmhlaWdodCgpLCBoaWdobGlnaHRHYWRnZXQtPnByZWZl
cnJlZFNpemUoKS5oZWlnaHQoKSk7CisgICAgSW50UmVjdCBzbGlkZXJSZWN0KHJlY3QubG9jYXRp
b24oKSwgSW50U2l6ZSh0cm91Z2hIZWlnaHQsIHRyb3VnaEhlaWdodCkpOworICAgIHNsaWRlclJl
Y3QubW92ZShwYWRkaW5nLmxlZnQsIHBhZGRpbmcudG9wKTsKKyAgICBzbGlkZXJSZWN0LmNvbnRy
YWN0KHBhZGRpbmcubGVmdCArIHBhZGRpbmcucmlnaHQsIHBhZGRpbmcudG9wICsgcGFkZGluZy5i
b3R0b20pOworICAgIHNsaWRlckdhZGdldC0+cmVuZGVyKHBhaW50SW5mby5jb250ZXh0KCkucGxh
dGZvcm1Db250ZXh0KCktPmNyKCksIHNsaWRlclJlY3QpOworICAgIHJldHVybiBmYWxzZTsKK30K
KyNlbHNlCiBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFNsaWRlclRyYWNrKGNvbnN0IFJlbmRl
ck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3Qg
SW50UmVjdCYgcmVjdCkKIHsKICAgICBDb250cm9sUGFydCBwYXJ0ID0gcmVuZGVyT2JqZWN0LnN0
eWxlKCkuYXBwZWFyYW5jZSgpOwpAQCAtMTA2MiwxMiArMTQzNiw3IEBAIGJvb2wgUmVuZGVyVGhl
bWVHdGs6OnBhaW50U2xpZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3Qs
IGNvbnN0IFBhCiAKICAgICBHUmVmUHRyPEd0a1N0eWxlQ29udGV4dD4gcGFyZW50Q29udGV4dCA9
IGNyZWF0ZVN0eWxlQ29udGV4dChTY2FsZSk7CiAgICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2Ns
YXNzKHBhcmVudENvbnRleHQuZ2V0KCksIHBhcnQgPT0gU2xpZGVySG9yaXpvbnRhbFBhcnQgPyBH
VEtfU1RZTEVfQ0xBU1NfSE9SSVpPTlRBTCA6IEdUS19TVFlMRV9DTEFTU19WRVJUSUNBTCk7Ci0j
aWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMTksIDExKQotICAgIEdSZWZQdHI8R3RrU3R5bGVDb250
ZXh0PiBjb250ZW50c0NvbnRleHQgPSBjcmVhdGVTdHlsZUNvbnRleHQoU2NhbGVDb250ZW50cywg
cGFyZW50Q29udGV4dC5nZXQoKSk7Ci0gICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IGNvbnRl
eHQgPSBjcmVhdGVTdHlsZUNvbnRleHQoU2NhbGVUcm91Z2gsIGNvbnRlbnRzQ29udGV4dC5nZXQo
KSk7Ci0jZWxzZQogICAgIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBjb250ZXh0ID0gY3JlYXRl
U3R5bGVDb250ZXh0KFNjYWxlVHJvdWdoLCBwYXJlbnRDb250ZXh0LmdldCgpKTsKLSNlbmRpZgog
ICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4dC5nZXQoKSwgZ3RrVGV4
dERpcmVjdGlvbihyZW5kZXJPYmplY3Quc3R5bGUoKS5kaXJlY3Rpb24oKSkpOwogCiAgICAgaWYg
KCFpc0VuYWJsZWQocmVuZGVyT2JqZWN0KSkKQEAgLTEwOTEsMjUgKzE0NjAsNiBAQCBib29sIFJl
bmRlclRoZW1lR3RrOjpwYWludFNsaWRlclRyYWNrKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVy
T2JqZWN0LCBjb25zdCBQYQogICAgIGd0a19yZW5kZXJfYmFja2dyb3VuZChjb250ZXh0LmdldCgp
LCBwYWludEluZm8uY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCBzbGlkZXJSZWN0
LngoKSwgc2xpZGVyUmVjdC55KCksIHNsaWRlclJlY3Qud2lkdGgoKSwgc2xpZGVyUmVjdC5oZWln
aHQoKSk7CiAgICAgZ3RrX3JlbmRlcl9mcmFtZShjb250ZXh0LmdldCgpLCBwYWludEluZm8uY29u
dGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCBzbGlkZXJSZWN0LngoKSwgc2xpZGVyUmVj
dC55KCksIHNsaWRlclJlY3Qud2lkdGgoKSwgc2xpZGVyUmVjdC5oZWlnaHQoKSk7CiAKLSNpZiBH
VEtfQ0hFQ0tfVkVSU0lPTigzLCAxOSwgMTEpCi0gICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+
IGhpZ2hsaWdodENvbnRleHQgPSBjcmVhdGVTdHlsZUNvbnRleHQoU2NhbGVIaWdobGlnaHQsIGNv
bnRleHQuZ2V0KCkpOwotICAgIExheW91dFBvaW50IHRodW1iTG9jYXRpb247Ci0gICAgaWYgKGlz
PEhUTUxJbnB1dEVsZW1lbnQ+KHJlbmRlck9iamVjdC5ub2RlKCkpKSB7Ci0gICAgICAgIGF1dG8m
IGlucHV0ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKnJlbmRlck9iamVjdC5ub2RlKCkp
OwotICAgICAgICBpZiAoYXV0byogZWxlbWVudCA9IGlucHV0LnNsaWRlclRodW1iRWxlbWVudCgp
KQotICAgICAgICAgICAgdGh1bWJMb2NhdGlvbiA9IGVsZW1lbnQtPnJlbmRlckJveCgpLT5sb2Nh
dGlvbigpOwotICAgIH0KLQotICAgIEludFJlY3QgaGlnaGxpZ2h0UmVjdCA9IHNsaWRlclJlY3Q7
Ci0gICAgaWYgKHBhcnQgPT0gU2xpZGVySG9yaXpvbnRhbFBhcnQpCi0gICAgICAgIGhpZ2hsaWdo
dFJlY3Quc2V0V2lkdGgodGh1bWJMb2NhdGlvbi54KCkpOwotICAgIGVsc2UKLSAgICAgICAgaGln
aGxpZ2h0UmVjdC5zZXRIZWlnaHQodGh1bWJMb2NhdGlvbi55KCkpOwotCi0gICAgZ3RrX3JlbmRl
cl9iYWNrZ3JvdW5kKGhpZ2hsaWdodENvbnRleHQuZ2V0KCksIHBhaW50SW5mby5jb250ZXh0KCku
cGxhdGZvcm1Db250ZXh0KCktPmNyKCksIGhpZ2hsaWdodFJlY3QueCgpLCBoaWdobGlnaHRSZWN0
LnkoKSwgaGlnaGxpZ2h0UmVjdC53aWR0aCgpLCBoaWdobGlnaHRSZWN0LmhlaWdodCgpKTsKLSAg
ICBndGtfcmVuZGVyX2ZyYW1lKGhpZ2hsaWdodENvbnRleHQuZ2V0KCksIHBhaW50SW5mby5jb250
ZXh0KCkucGxhdGZvcm1Db250ZXh0KCktPmNyKCksIGhpZ2hsaWdodFJlY3QueCgpLCBoaWdobGln
aHRSZWN0LnkoKSwgaGlnaGxpZ2h0UmVjdC53aWR0aCgpLCBoaWdobGlnaHRSZWN0LmhlaWdodCgp
KTsKLSNlbmRpZgotCiAgICAgaWYgKGlzRm9jdXNlZChyZW5kZXJPYmplY3QpKSB7CiAgICAgICAg
IGdpbnQgZm9jdXNXaWR0aCwgZm9jdXNQYWQ7CiAgICAgICAgIGd0a19zdHlsZV9jb250ZXh0X2dl
dF9zdHlsZShjb250ZXh0LmdldCgpLCAiZm9jdXMtbGluZS13aWR0aCIsICZmb2N1c1dpZHRoLCAi
Zm9jdXMtcGFkZGluZyIsICZmb2N1c1BhZCwgbnVsbHB0cik7CkBAIC0xMTIxLDYgKzE0NzEsMjYg
QEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRTbGlkZXJUcmFjayhjb25zdCBSZW5kZXJPYmpl
Y3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGEKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3ZvaWQg
UmVuZGVyVGhlbWVHdGs6OmFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSYgc3R5bGUs
IEVsZW1lbnQqKSBjb25zdAoreworICAgIENvbnRyb2xQYXJ0IHBhcnQgPSBzdHlsZS5hcHBlYXJh
bmNlKCk7CisgICAgaWYgKHBhcnQgIT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCAmJiBwYXJ0
ICE9IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KQorICAgICAgICByZXR1cm47CisKKyAgICBHUmVm
UHRyPEd0a1N0eWxlQ29udGV4dD4gY29udGV4dCA9IGNyZWF0ZVN0eWxlQ29udGV4dChTY2FsZSk7
CisgICAgZ2ludCBzbGlkZXJXaWR0aCwgc2xpZGVyTGVuZ3RoOworICAgIGd0a19zdHlsZV9jb250
ZXh0X2dldF9zdHlsZShjb250ZXh0LmdldCgpLCAic2xpZGVyLXdpZHRoIiwgJnNsaWRlcldpZHRo
LCAic2xpZGVyLWxlbmd0aCIsICZzbGlkZXJMZW5ndGgsIG51bGxwdHIpOworCisgICAgaWYgKHBh
cnQgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCkgeworICAgICAgICBzdHlsZS5zZXRXaWR0
aChMZW5ndGgoc2xpZGVyTGVuZ3RoLCBGaXhlZCkpOworICAgICAgICBzdHlsZS5zZXRIZWlnaHQo
TGVuZ3RoKHNsaWRlcldpZHRoLCBGaXhlZCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IEFTU0VSVChwYXJ0ID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KTsKKyAgICBzdHlsZS5zZXRX
aWR0aChMZW5ndGgoc2xpZGVyV2lkdGgsIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0SGVpZ2h0KExl
bmd0aChzbGlkZXJMZW5ndGgsIEZpeGVkKSk7Cit9CisKIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBh
aW50U2xpZGVyVGh1bWIoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIENvbnRyb2xQ
YXJ0IHBhcnQgPSByZW5kZXJPYmplY3Quc3R5bGUoKS5hcHBlYXJhbmNlKCk7CkBAIC0xMTI5LDEy
ICsxNDk5LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRTbGlkZXJUaHVtYihjb25zdCBS
ZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGEKICAgICAvLyBGSVhNRTogVGhlIGVu
dGlyZSBzbGlkZXIgaXMgdG9vIHdpZGUsIHN0cmV0Y2hpbmcgdGhlIHRodW1iIGludG8gYW4gb3Zh
bCByYXRoZXIgdGhhbiBhIGNpcmNsZS4KICAgICBHUmVmUHRyPEd0a1N0eWxlQ29udGV4dD4gcGFy
ZW50Q29udGV4dCA9IGNyZWF0ZVN0eWxlQ29udGV4dChTY2FsZSk7CiAgICAgZ3RrX3N0eWxlX2Nv
bnRleHRfYWRkX2NsYXNzKHBhcmVudENvbnRleHQuZ2V0KCksIHBhcnQgPT0gU2xpZGVyVGh1bWJI
b3Jpem9udGFsUGFydCA/IEdUS19TVFlMRV9DTEFTU19IT1JJWk9OVEFMIDogR1RLX1NUWUxFX0NM
QVNTX1ZFUlRJQ0FMKTsKLSNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAxOSwgMTEpCi0gICAgR1Jl
ZlB0cjxHdGtTdHlsZUNvbnRleHQ+IGNvbnRlbnRzQ29udGV4dCA9IGNyZWF0ZVN0eWxlQ29udGV4
dChTY2FsZUNvbnRlbnRzLCBwYXJlbnRDb250ZXh0LmdldCgpKTsKLSAgICBHUmVmUHRyPEd0a1N0
eWxlQ29udGV4dD4gdHJvdWdoQ29udGV4dCA9IGNyZWF0ZVN0eWxlQ29udGV4dChTY2FsZVRyb3Vn
aCwgY29udGVudHNDb250ZXh0LmdldCgpKTsKLSNlbHNlCiAgICAgR1JlZlB0cjxHdGtTdHlsZUNv
bnRleHQ+IHRyb3VnaENvbnRleHQgPSBjcmVhdGVTdHlsZUNvbnRleHQoU2NhbGVUcm91Z2gsIHBh
cmVudENvbnRleHQuZ2V0KCkpOwotI2VuZGlmCiAgICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+
IGNvbnRleHQgPSBjcmVhdGVTdHlsZUNvbnRleHQoU2NhbGVTbGlkZXIsIHRyb3VnaENvbnRleHQu
Z2V0KCkpOwogICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4dC5nZXQo
KSwgZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3Quc3R5bGUoKS5kaXJlY3Rpb24oKSkpOwog
CkBAIC0xMTUyLDM1ICsxNTE3LDYwIEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50U2xpZGVy
VGh1bWIoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhCiAKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CisjZW5kaWYKIAotdm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2xp
ZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCopIGNvbnN0CisjaWYgR1RL
X0NIRUNLX1ZFUlNJT04oMywgMjAsIDApCitJbnRSZWN0IFJlbmRlclRoZW1lR3RrOjpwcm9ncmVz
c0JhclJlY3RGb3JCb3VuZHMoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0
IEludFJlY3QmIGJvdW5kcykgY29uc3QKK3sKKyAgICBSZW5kZXJUaGVtZUdhZGdldDo6SW5mbyBp
bmZvID0geyBSZW5kZXJUaGVtZUdhZGdldDo6VHlwZTo6R2VuZXJpYywgInByb2dyZXNzYmFyIiwg
R1RLX1NUQVRFX0ZMQUdfTk9STUFMLCB7ICJob3Jpem9udGFsIiB9IH07CisgICAgYXV0byBwcm9n
cmVzc0JhckdhZGdldCA9IFJlbmRlclRoZW1lR2FkZ2V0OjpjcmVhdGUoaW5mbyk7CisgICAgaW5m
by5uYW1lID0gInRyb3VnaCI7CisgICAgaW5mby5jbGFzc0xpc3QuY2xlYXIoKTsKKyAgICBhdXRv
IHRyb3VnaEdhZGdldCA9IFJlbmRlclRoZW1lR2FkZ2V0OjpjcmVhdGUoaW5mbywgcHJvZ3Jlc3NC
YXJHYWRnZXQuZ2V0KCkpOworICAgIGluZm8ubmFtZSA9ICJwcm9ncmVzcyI7CisgICAgaWYgKHJl
bmRlck9iamVjdC5zdHlsZSgpLmRpcmVjdGlvbigpID09IFJUTCkKKyAgICAgICAgaW5mby5jbGFz
c0xpc3QuYXBwZW5kKCJyaWdodCIpOworICAgIGVsc2UKKyAgICAgICAgaW5mby5jbGFzc0xpc3Qu
YXBwZW5kKCJsZWZ0Iik7CisgICAgY29uc3QgYXV0byYgcmVuZGVyUHJvZ3Jlc3MgPSBkb3duY2Fz
dDxSZW5kZXJQcm9ncmVzcz4ocmVuZGVyT2JqZWN0KTsKKyAgICBpZiAocmVuZGVyUHJvZ3Jlc3Mu
aXNEZXRlcm1pbmF0ZSgpKQorICAgICAgICBpbmZvLmNsYXNzTGlzdC5hcHBlbmQoInB1bHNlIik7
CisgICAgYXV0byBwcm9ncmVzc0dhZGdldCA9IFJlbmRlclRoZW1lR2FkZ2V0OjpjcmVhdGUoaW5m
bywgdHJvdWdoR2FkZ2V0LmdldCgpKTsKKyAgICBJbnRTaXplIHByZWZlcnJlZFNpemUgPSBwcm9n
cmVzc0JhckdhZGdldC0+cHJlZmVycmVkU2l6ZSgpOworICAgIHByZWZlcnJlZFNpemUgPSBwcmVm
ZXJyZWRTaXplLmV4cGFuZGVkVG8odHJvdWdoR2FkZ2V0LT5wcmVmZXJyZWRTaXplKCkpOworICAg
IHByZWZlcnJlZFNpemUgPSBwcmVmZXJyZWRTaXplLmV4cGFuZGVkVG8ocHJvZ3Jlc3NHYWRnZXQt
PnByZWZlcnJlZFNpemUoKSk7CisgICAgcmV0dXJuIEludFJlY3QoYm91bmRzLngoKSwgYm91bmRz
LnkoKSwgYm91bmRzLndpZHRoKCksIHByZWZlcnJlZFNpemUuaGVpZ2h0KCkpOworfQorCitib29s
IFJlbmRlclRoZW1lR3RrOjpwYWludFByb2dyZXNzQmFyKGNvbnN0IFJlbmRlck9iamVjdCYgcmVu
ZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVj
dCkKIHsKLSAgICBDb250cm9sUGFydCBwYXJ0ID0gc3R5bGUuYXBwZWFyYW5jZSgpOwotICAgIGlm
IChwYXJ0ICE9IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQgJiYgcGFydCAhPSBTbGlkZXJUaHVt
YlZlcnRpY2FsUGFydCkKLSAgICAgICAgcmV0dXJuOworICAgIGlmICghcmVuZGVyT2JqZWN0Lmlz
UHJvZ3Jlc3MoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBHUmVmUHRyPEd0a1N0eWxl
Q29udGV4dD4gY29udGV4dCA9IGNyZWF0ZVN0eWxlQ29udGV4dChTY2FsZSk7Ci0gICAgZ2ludCBz
bGlkZXJXaWR0aCwgc2xpZGVyTGVuZ3RoOwotI2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDE5LCAx
MSkKLSAgICBHUmVmUHRyPEd0a1N0eWxlQ29udGV4dD4gY29udGVudHNDb250ZXh0ID0gY3JlYXRl
U3R5bGVDb250ZXh0KFNjYWxlQ29udGVudHMsIGNvbnRleHQuZ2V0KCkpOwotICAgIEdSZWZQdHI8
R3RrU3R5bGVDb250ZXh0PiB0cm91Z2hDb250ZXh0ID0gY3JlYXRlU3R5bGVDb250ZXh0KFNjYWxl
VHJvdWdoLCBjb250ZW50c0NvbnRleHQuZ2V0KCkpOwotICAgIEdSZWZQdHI8R3RrU3R5bGVDb250
ZXh0PiBzbGlkZXJDb250ZXh0ID0gY3JlYXRlU3R5bGVDb250ZXh0KFNjYWxlU2xpZGVyLCB0cm91
Z2hDb250ZXh0LmdldCgpKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9nZXQoc2xpZGVyQ29udGV4
dC5nZXQoKSwgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0YXRlKHNsaWRlckNvbnRleHQuZ2V0KCkp
LCAibWluLXdpZHRoIiwgJnNsaWRlcldpZHRoLCAibWluLWhlaWdodCIsICZzbGlkZXJMZW5ndGgs
IG51bGxwdHIpOwotICAgIEd0a0JvcmRlciBib3JkZXI7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRf
Z2V0X2JvcmRlcihzbGlkZXJDb250ZXh0LmdldCgpLCBndGtfc3R5bGVfY29udGV4dF9nZXRfc3Rh
dGUoc2xpZGVyQ29udGV4dC5nZXQoKSksICZib3JkZXIpOwotICAgIHNsaWRlcldpZHRoICs9IGJv
cmRlci5sZWZ0ICsgYm9yZGVyLnJpZ2h0OwotICAgIHNsaWRlckxlbmd0aCArPSBib3JkZXIudG9w
ICsgYm9yZGVyLmJvdHRvbTsKKyAgICBSZW5kZXJUaGVtZUdhZGdldDo6SW5mbyBpbmZvID0geyBS
ZW5kZXJUaGVtZUdhZGdldDo6VHlwZTo6R2VuZXJpYywgInByb2dyZXNzYmFyIiwgR1RLX1NUQVRF
X0ZMQUdfTk9STUFMLCB7ICJob3Jpem9udGFsIiB9IH07CisgICAgYXV0byBwcm9ncmVzc0Jhckdh
ZGdldCA9IFJlbmRlclRoZW1lR2FkZ2V0OjpjcmVhdGUoaW5mbyk7CisgICAgaW5mby5uYW1lID0g
InRyb3VnaCI7CisgICAgaW5mby5jbGFzc0xpc3QuY2xlYXIoKTsKKyAgICBhdXRvIHRyb3VnaEdh
ZGdldCA9IFJlbmRlclRoZW1lR2FkZ2V0OjpjcmVhdGUoaW5mbywgcHJvZ3Jlc3NCYXJHYWRnZXQu
Z2V0KCkpOworICAgIGluZm8ubmFtZSA9ICJwcm9ncmVzcyI7CisgICAgaWYgKHJlbmRlck9iamVj
dC5zdHlsZSgpLmRpcmVjdGlvbigpID09IFJUTCkKKyAgICAgICAgaW5mby5jbGFzc0xpc3QuYXBw
ZW5kKCJyaWdodCIpOworICAgIGVsc2UKKyAgICAgICAgaW5mby5jbGFzc0xpc3QuYXBwZW5kKCJs
ZWZ0Iik7CisgICAgY29uc3QgYXV0byYgcmVuZGVyUHJvZ3Jlc3MgPSBkb3duY2FzdDxSZW5kZXJQ
cm9ncmVzcz4ocmVuZGVyT2JqZWN0KTsKKyAgICBpZiAocmVuZGVyUHJvZ3Jlc3MuaXNEZXRlcm1p
bmF0ZSgpKQorICAgICAgICBpbmZvLmNsYXNzTGlzdC5hcHBlbmQoInB1bHNlIik7CisgICAgYXV0
byBwcm9ncmVzc0dhZGdldCA9IFJlbmRlclRoZW1lR2FkZ2V0OjpjcmVhdGUoaW5mbywgdHJvdWdo
R2FkZ2V0LmdldCgpKTsKKworICAgIHByb2dyZXNzQmFyR2FkZ2V0LT5yZW5kZXIocGFpbnRJbmZv
LmNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgcmVjdCk7CisgICAgdHJvdWdoR2Fk
Z2V0LT5yZW5kZXIocGFpbnRJbmZvLmNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwg
cmVjdCk7CisgICAgcHJvZ3Jlc3NHYWRnZXQtPnJlbmRlcihwYWludEluZm8uY29udGV4dCgpLnBs
YXRmb3JtQ29udGV4dCgpLT5jcigpLCBjYWxjdWxhdGVQcm9ncmVzc1JlY3QocmVuZGVyT2JqZWN0
LCByZWN0KSk7CisgICAgcmV0dXJuIGZhbHNlOworfQogI2Vsc2UKLSAgICBndGtfc3R5bGVfY29u
dGV4dF9nZXRfc3R5bGUoY29udGV4dC5nZXQoKSwgInNsaWRlci13aWR0aCIsICZzbGlkZXJXaWR0
aCwgInNsaWRlci1sZW5ndGgiLCAmc2xpZGVyTGVuZ3RoLCBudWxscHRyKTsKLSNlbmRpZgotICAg
IGlmIChwYXJ0ID09IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQpIHsKLSAgICAgICAgc3R5bGUu
c2V0V2lkdGgoTGVuZ3RoKHNsaWRlckxlbmd0aCwgRml4ZWQpKTsKLSAgICAgICAgc3R5bGUuc2V0
SGVpZ2h0KExlbmd0aChzbGlkZXJXaWR0aCwgRml4ZWQpKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICBBU1NFUlQocGFydCA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCk7Ci0gICAgc3R5
bGUuc2V0V2lkdGgoTGVuZ3RoKHNsaWRlcldpZHRoLCBGaXhlZCkpOwotICAgIHN0eWxlLnNldEhl
aWdodChMZW5ndGgoc2xpZGVyTGVuZ3RoLCBGaXhlZCkpOworSW50UmVjdCBSZW5kZXJUaGVtZUd0
azo6cHJvZ3Jlc3NCYXJSZWN0Rm9yQm91bmRzKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IElu
dFJlY3QmIGJvdW5kcykgY29uc3QKK3sKKyAgICByZXR1cm4gYm91bmRzOwogfQogCiBib29sIFJl
bmRlclRoZW1lR3RrOjpwYWludFByb2dyZXNzQmFyKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVy
T2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkK
QEAgLTEyMTcsNyArMTYwNyw3OSBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFByb2dyZXNz
QmFyKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYQogCiAgICAgcmV0
dXJuIGZhbHNlOwogfQorI2VuZGlmIC8vIEdUS19DSEVDS19WRVJTSU9OKDMsIDIwLCAwKQorCisj
aWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMjAsIDApCitSZW5kZXJUaGVtZTo6SW5uZXJTcGluQnV0
dG9uTGF5b3V0IFJlbmRlclRoZW1lR3RrOjppbm5lclNwaW5CdXR0b25MYXlvdXQoY29uc3QgUmVu
ZGVyT2JqZWN0JiByZW5kZXJPYmplY3QpIGNvbnN0Cit7CisgICAgcmV0dXJuIHJlbmRlck9iamVj
dC5zdHlsZSgpLmRpcmVjdGlvbigpID09IFJUTCA/IElubmVyU3BpbkJ1dHRvbkxheW91dDo6SG9y
aXpvbnRhbFVwTGVmdCA6IElubmVyU3BpbkJ1dHRvbkxheW91dDo6SG9yaXpvbnRhbFVwUmlnaHQ7
Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKFN0
eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQqKSBjb25zdAoreworICAg
IFJlbmRlclRoZW1lR2FkZ2V0OjpJbmZvIGluZm8gPSB7IFJlbmRlclRoZW1lR2FkZ2V0OjpUeXBl
OjpHZW5lcmljLCAic3BpbmJ1dHRvbiIsIEdUS19TVEFURV9GTEFHX05PUk1BTCwgeyAiaG9yaXpv
bnRhbCIgfSB9OworICAgIGF1dG8gc3BpbmJ1dHRvbkdhZGdldCA9IFJlbmRlclRoZW1lR2FkZ2V0
OjpjcmVhdGUoaW5mbyk7CisgICAgaW5mby50eXBlID0gUmVuZGVyVGhlbWVHYWRnZXQ6OlR5cGU6
OlRleHRGaWVsZDsKKyAgICBpbmZvLm5hbWUgPSAiZW50cnkiOworICAgIGluZm8uY2xhc3NMaXN0
LmNsZWFyKCk7CisgICAgYXV0byBlbnRyeUdhZGdldCA9IFJlbmRlclRoZW1lR2FkZ2V0OjpjcmVh
dGUoaW5mbywgc3BpbmJ1dHRvbkdhZGdldC5nZXQoKSk7CisgICAgaW5mby50eXBlID0gUmVuZGVy
VGhlbWVHYWRnZXQ6OlR5cGU6Okljb247CisgICAgaW5mby5uYW1lID0gImJ1dHRvbiI7CisgICAg
aW5mby5jbGFzc0xpc3QuYXBwZW5kKCJ1cCIpOworICAgIGF1dG8gYnV0dG9uVXBHYWRnZXQgPSBS
ZW5kZXJUaGVtZUdhZGdldDo6Y3JlYXRlKGluZm8sIHNwaW5idXR0b25HYWRnZXQuZ2V0KCkpOwor
ICAgIHN0YXRpY19jYXN0PFJlbmRlclRoZW1lSWNvbkdhZGdldCo+KGJ1dHRvblVwR2FkZ2V0Lmdl
dCgpKS0+c2V0SWNvblNpemUoUmVuZGVyVGhlbWVJY29uR2FkZ2V0OjpJY29uU2l6ZUd0azo6TWVu
dSk7CisgICAgaW5mby5jbGFzc0xpc3RbMF0gPSAiZG93biI7CisgICAgYXV0byBidXR0b25Eb3du
R2FkZ2V0ID0gUmVuZGVyVGhlbWVHYWRnZXQ6OmNyZWF0ZShpbmZvLCBzcGluYnV0dG9uR2FkZ2V0
LmdldCgpKTsKKyAgICBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZUljb25HYWRnZXQqPihidXR0b25E
b3duR2FkZ2V0LmdldCgpKS0+c2V0SWNvblNpemUoUmVuZGVyVGhlbWVJY29uR2FkZ2V0OjpJY29u
U2l6ZUd0azo6TWVudSk7CisgICAgSW50U2l6ZSB1cFByZWZlcnJlZFNpemUgPSBidXR0b25VcEdh
ZGdldC0+cHJlZmVycmVkU2l6ZSgpOworICAgIEludFNpemUgZG93blByZWZlcnJlZFNpemUgPSBi
dXR0b25Eb3duR2FkZ2V0LT5wcmVmZXJyZWRTaXplKCk7CisgICAgaW50IGJ1dHRvblNpemUgPSBz
dGQ6Om1heChzdGQ6Om1heCh1cFByZWZlcnJlZFNpemUud2lkdGgoKSwgZG93blByZWZlcnJlZFNp
emUud2lkdGgoKSksIHN0ZDo6bWF4KHVwUHJlZmVycmVkU2l6ZS5oZWlnaHQoKSwgZG93blByZWZl
cnJlZFNpemUuaGVpZ2h0KCkpKTsKKyAgICBzdHlsZS5zZXRXaWR0aChMZW5ndGgoYnV0dG9uU2l6
ZSAqIDIsIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aChidXR0b25TaXplLCBG
aXhlZCkpOworfQorCitib29sIFJlbmRlclRoZW1lR3RrOjpwYWludElubmVyU3BpbkJ1dHRvbihj
b25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgUmVuZGVyVGhlbWVHYWRnZXQ6OkluZm8g
aW5mbyA9IHsgUmVuZGVyVGhlbWVHYWRnZXQ6OlR5cGU6OkdlbmVyaWMsICJzcGluYnV0dG9uIiwg
dGhlbWVQYXJ0U3RhdGVGbGFncygqdGhpcywgU3BpbkJ1dHRvbiwgcmVuZGVyT2JqZWN0KSwgeyB9
IH07CisgICAgYXV0byBzcGluYnV0dG9uR2FkZ2V0ID0gUmVuZGVyVGhlbWVHYWRnZXQ6OmNyZWF0
ZShpbmZvKTsKKyAgICBpbmZvLnR5cGUgPSBSZW5kZXJUaGVtZUdhZGdldDo6VHlwZTo6VGV4dEZp
ZWxkOworICAgIGluZm8ubmFtZSA9ICJlbnRyeSI7CisgICAgaW5mby5jbGFzc0xpc3QuY2xlYXIo
KTsKKyAgICBhdXRvIGVudHJ5R2FkZ2V0ID0gUmVuZGVyVGhlbWVHYWRnZXQ6OmNyZWF0ZShpbmZv
LCBzcGluYnV0dG9uR2FkZ2V0LmdldCgpKTsKKyAgICBpbmZvLnR5cGUgPSBSZW5kZXJUaGVtZUdh
ZGdldDo6VHlwZTo6SWNvbjsKKyAgICBpbmZvLm5hbWUgPSAiYnV0dG9uIjsKKyAgICBpbmZvLmNs
YXNzTGlzdC5hcHBlbmQoInVwIik7CisgICAgaW5mby5zdGF0ZSA9IHRoZW1lUGFydFN0YXRlRmxh
Z3MoKnRoaXMsIFNwaW5CdXR0b25VcEJ1dHRvbiwgcmVuZGVyT2JqZWN0KTsKKyAgICBhdXRvIGJ1
dHRvblVwR2FkZ2V0ID0gUmVuZGVyVGhlbWVHYWRnZXQ6OmNyZWF0ZShpbmZvLCBzcGluYnV0dG9u
R2FkZ2V0LmdldCgpKTsKKyAgICBhdXRvKiBnYWRnZXRJY29uID0gc3RhdGljX2Nhc3Q8UmVuZGVy
VGhlbWVJY29uR2FkZ2V0Kj4oYnV0dG9uVXBHYWRnZXQuZ2V0KCkpOworICAgIGdhZGdldEljb24t
PnNldEljb25TaXplKFJlbmRlclRoZW1lSWNvbkdhZGdldDo6SWNvblNpemVHdGs6Ok1lbnUpOwor
ICAgIGdhZGdldEljb24tPnNldEljb25OYW1lKCJsaXN0LWFkZC1zeW1ib2xpYyIpOworICAgIGlu
Zm8uY2xhc3NMaXN0WzBdID0gImRvd24iOworICAgIGluZm8uc3RhdGUgPSB0aGVtZVBhcnRTdGF0
ZUZsYWdzKCp0aGlzLCBTcGluQnV0dG9uRG93bkJ1dHRvbiwgcmVuZGVyT2JqZWN0KTsKKyAgICBh
dXRvIGJ1dHRvbkRvd25HYWRnZXQgPSBSZW5kZXJUaGVtZUdhZGdldDo6Y3JlYXRlKGluZm8sIHNw
aW5idXR0b25HYWRnZXQuZ2V0KCkpOworICAgIGdhZGdldEljb24gPSBzdGF0aWNfY2FzdDxSZW5k
ZXJUaGVtZUljb25HYWRnZXQqPihidXR0b25Eb3duR2FkZ2V0LmdldCgpKTsKKyAgICBnYWRnZXRJ
Y29uLT5zZXRJY29uU2l6ZShSZW5kZXJUaGVtZUljb25HYWRnZXQ6Okljb25TaXplR3RrOjpNZW51
KTsKKyAgICBnYWRnZXRJY29uLT5zZXRJY29uTmFtZSgibGlzdC1yZW1vdmUtc3ltYm9saWMiKTsK
KworICAgIEludFJlY3QgaWNvblJlY3QgPSByZWN0OworICAgIGljb25SZWN0LnNldFdpZHRoKGlj
b25SZWN0LndpZHRoKCkgLyAyKTsKKyAgICBpZiAocmVuZGVyT2JqZWN0LnN0eWxlKCkuZGlyZWN0
aW9uKCkgPT0gUlRMKQorICAgICAgICBidXR0b25VcEdhZGdldC0+cmVuZGVyKHBhaW50SW5mby5j
b250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCktPmNyKCksIGljb25SZWN0KTsKKyAgICBlbHNlCisg
ICAgICAgIGJ1dHRvbkRvd25HYWRnZXQtPnJlbmRlcihwYWludEluZm8uY29udGV4dCgpLnBsYXRm
b3JtQ29udGV4dCgpLT5jcigpLCBpY29uUmVjdCk7CisgICAgaWNvblJlY3QubW92ZShpY29uUmVj
dC53aWR0aCgpLCAwKTsKKyAgICBpZiAocmVuZGVyT2JqZWN0LnN0eWxlKCkuZGlyZWN0aW9uKCkg
PT0gUlRMKQorICAgICAgICBidXR0b25Eb3duR2FkZ2V0LT5yZW5kZXIocGFpbnRJbmZvLmNvbnRl
eHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgaWNvblJlY3QpOworICAgIGVsc2UKKyAgICAg
ICAgYnV0dG9uVXBHYWRnZXQtPnJlbmRlcihwYWludEluZm8uY29udGV4dCgpLnBsYXRmb3JtQ29u
dGV4dCgpLT5jcigpLCBpY29uUmVjdCk7CiAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisjZWxzZQor
UmVuZGVyVGhlbWU6OklubmVyU3BpbkJ1dHRvbkxheW91dCBSZW5kZXJUaGVtZUd0azo6aW5uZXJT
cGluQnV0dG9uTGF5b3V0KGNvbnN0IFJlbmRlck9iamVjdCYpIGNvbnN0Cit7CisgICAgcmV0dXJu
IElubmVyU3BpbkJ1dHRvbkxheW91dDo6VmVydGljYWw7Cit9CiBzdGF0aWMgZ2ludCBzcGluQnV0
dG9uQXJyb3dTaXplKEd0a1N0eWxlQ29udGV4dCogY29udGV4dCkKIHsKICAgICBQYW5nb0ZvbnRE
ZXNjcmlwdGlvbiogZm9udERlc2NyaXB0aW9uOwpAQCAtMTMyMCw2ICsxNzgyLDcgQEAgYm9vbCBS
ZW5kZXJUaGVtZUd0azo6cGFpbnRJbm5lclNwaW5CdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiBy
ZW5kZXJPYmplY3QsIGNvbnMKIAogICAgIHJldHVybiBmYWxzZTsKIH0KKyNlbmRpZiAvLyBHVEtf
Q0hFQ0tfVkVSU0lPTigzLCAyMCwgMCkKIAogZG91YmxlIFJlbmRlclRoZW1lR3RrOjpjYXJldEJs
aW5rSW50ZXJ2YWwoKSBjb25zdAogewpAQCAtMTMzOCwxNiArMTgwMSw0NCBAQCBkb3VibGUgUmVu
ZGVyVGhlbWVHdGs6OmNhcmV0QmxpbmtJbnRlcnZhbCgpIGNvbnN0CiAKIGVudW0gU3R5bGVDb2xv
clR5cGUgeyBTdHlsZUNvbG9yQmFja2dyb3VuZCwgU3R5bGVDb2xvckZvcmVncm91bmQgfTsKIAor
I2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDIwLCAwKQogc3RhdGljIENvbG9yIHN0eWxlQ29sb3Io
UmVuZGVyVGhlbWVQYXJ0IHRoZW1lUGFydCwgR3RrU3RhdGVGbGFncyBzdGF0ZSwgU3R5bGVDb2xv
clR5cGUgY29sb3JUeXBlKQogewotICAgIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBwYXJlbnRD
b250ZXh0OworICAgIFJlbmRlclRoZW1lR2FkZ2V0OjpJbmZvIGluZm8gPSB7IFJlbmRlclRoZW1l
R2FkZ2V0OjpUeXBlOjpHZW5lcmljLCBudWxscHRyLCBzdGF0ZSwgeyB9IH07CisgICAgc3RkOjp1
bmlxdWVfcHRyPFJlbmRlclRoZW1lR2FkZ2V0PiBwYXJlbnRHYWRnZXQ7CiAgICAgUmVuZGVyVGhl
bWVQYXJ0IHBhcnQgPSB0aGVtZVBhcnQ7CiAgICAgaWYgKHRoZW1lUGFydCA9PSBFbnRyeSAmJiAo
c3RhdGUgJiBHVEtfU1RBVEVfRkxBR19TRUxFQ1RFRCkpIHsKLSAgICAgICAgcGFyZW50Q29udGV4
dCA9IGNyZWF0ZVN0eWxlQ29udGV4dChFbnRyeSk7CisgICAgICAgIGluZm8ubmFtZSA9ICJlbnRy
eSI7CisgICAgICAgIHBhcmVudEdhZGdldCA9IFJlbmRlclRoZW1lR2FkZ2V0OjpjcmVhdGUoaW5m
byk7CiAgICAgICAgIHBhcnQgPSBFbnRyeVNlbGVjdGlvbjsKICAgICB9CiAKLSAgICBHUmVmUHRy
PEd0a1N0eWxlQ29udGV4dD4gY29udGV4dCA9IGNyZWF0ZVN0eWxlQ29udGV4dChwYXJ0LCBwYXJl
bnRDb250ZXh0LmdldCgpKTsKKyAgICBzd2l0Y2ggKHBhcnQpIHsKKyAgICBjYXNlIEVudHJ5Ogor
ICAgICAgICBpbmZvLm5hbWUgPSAiZW50cnkiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEVu
dHJ5U2VsZWN0aW9uOgorICAgICAgICBpbmZvLm5hbWUgPSAic2VsZWN0aW9uIjsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBMaXN0Qm94OgorICAgICAgICBpbmZvLm5hbWUgPSAidHJlZXZpZXci
OworICAgICAgICBpbmZvLmNsYXNzTGlzdC5hcHBlbmQoInZpZXciKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBCdXR0b246CisgICAgICAgIGluZm8ubmFtZSA9ICJidXR0b24iOworICAgICAg
ICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgaW5mby5uYW1lID0gImVudHJ5IjsKKyAgICB9CisKKyAgICBhdXRvIGdhZGdldCA9IFJl
bmRlclRoZW1lR2FkZ2V0OjpjcmVhdGUoaW5mbywgcGFyZW50R2FkZ2V0LmdldCgpKTsKKyAgICBy
ZXR1cm4gY29sb3JUeXBlID09IFN0eWxlQ29sb3JCYWNrZ3JvdW5kID8gZ2FkZ2V0LT5iYWNrZ3Jv
dW5kQ29sb3IoKSA6IGdhZGdldC0+Y29sb3IoKTsKK30KKyNlbHNlCitzdGF0aWMgQ29sb3Igc3R5
bGVDb2xvcihSZW5kZXJUaGVtZVBhcnQgdGhlbWVQYXJ0LCBHdGtTdGF0ZUZsYWdzIHN0YXRlLCBT
dHlsZUNvbG9yVHlwZSBjb2xvclR5cGUpCit7CisgICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+
IGNvbnRleHQgPSBjcmVhdGVTdHlsZUNvbnRleHQodGhlbWVQYXJ0KTsKICAgICBndGtfc3R5bGVf
Y29udGV4dF9zZXRfc3RhdGUoY29udGV4dC5nZXQoKSwgc3RhdGUpOwogCiAgICAgR2RrUkdCQSBn
ZGtSR0JBQ29sb3I7CkBAIC0xMzU3LDYgKzE4NDgsNyBAQCBzdGF0aWMgQ29sb3Igc3R5bGVDb2xv
cihSZW5kZXJUaGVtZVBhcnQgdGhlbWVQYXJ0LCBHdGtTdGF0ZUZsYWdzIHN0YXRlLCBTdHlsZUNv
bAogICAgICAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfY29sb3IoY29udGV4dC5nZXQoKSwgc3Rh
dGUsICZnZGtSR0JBQ29sb3IpOwogICAgIHJldHVybiBnZGtSR0JBQ29sb3I7CiB9CisjZW5kaWYg
Ly8gR1RLX0NIRUNLX1ZFUlNJT04oMywgMjAsIDApCiAKIENvbG9yIFJlbmRlclRoZW1lR3RrOjpw
bGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0CiB7CkBAIC0xNDI4
LDYgKzE5MjAsMTcgQEAgU3RyaW5nIFJlbmRlclRoZW1lR3RrOjpleHRyYUZ1bGxTY3JlZW5TdHls
ZVNoZWV0KCkKIH0KICNlbmRpZgogCisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMjAsIDApCiti
b29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYg
cmVuZGVyT2JqZWN0LCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50
UmVjdCYgcmVjdCwgY29uc3QgY2hhciogaWNvbk5hbWUpCit7CisgICAgUmVuZGVyVGhlbWVHYWRn
ZXQ6OkluZm8gaW5mbyA9IHsgUmVuZGVyVGhlbWVHYWRnZXQ6OlR5cGU6Okljb24sICJpbWFnZSIs
IHRoZW1lUGFydFN0YXRlRmxhZ3MoKnRoaXMsIE1lZGlhQnV0dG9uLCByZW5kZXJPYmplY3QpLCB7
IH0gfTsKKyAgICBhdXRvIGdhZGdldCA9IFJlbmRlclRoZW1lR2FkZ2V0OjpjcmVhdGUoaW5mbyk7
CisgICAgYXV0byogZ2FkZ2V0SWNvbiA9IHN0YXRpY19jYXN0PFJlbmRlclRoZW1lSWNvbkdhZGdl
dCo+KGdhZGdldC5nZXQoKSk7CisgICAgZ2FkZ2V0SWNvbi0+c2V0SWNvblNpemUoUmVuZGVyVGhl
bWVJY29uR2FkZ2V0OjpJY29uU2l6ZUd0azo6TWVudSk7CisgICAgZ2FkZ2V0SWNvbi0+c2V0SWNv
bk5hbWUoaWNvbk5hbWUpOworICAgIHJldHVybiAhZ2FkZ2V0LT5yZW5kZXIoZ3JhcGhpY3NDb250
ZXh0LnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCByZWN0KTsKK30KKyNlbHNlCiBib29sIFJlbmRl
clRoZW1lR3RrOjpwYWludE1lZGlhQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2Jq
ZWN0LCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVj
dCwgY29uc3QgY2hhciogaWNvbk5hbWUpCiB7CiAgICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+
IGNvbnRleHQgPSBjcmVhdGVTdHlsZUNvbnRleHQoTWVkaWFCdXR0b24pOwpAQCAtMTQzNyw2ICsx
OTQwLDcgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYUJ1dHRvbihjb25zdCBSZW5k
ZXJPYmplY3QmIHJlbmRlck9iamVjdCwgR3JhcGhpY3MKICAgICBJbnRSZWN0IGljb25SZWN0KHJl
Y3QueCgpICsgKHJlY3Qud2lkdGgoKSAtIG1lZGlhSWNvblNpemUpIC8gMiwgcmVjdC55KCkgKyAo
cmVjdC5oZWlnaHQoKSAtIG1lZGlhSWNvblNpemUpIC8gMiwgbWVkaWFJY29uU2l6ZSwgbWVkaWFJ
Y29uU2l6ZSk7CiAgICAgcmV0dXJuICFwYWludEljb24oY29udGV4dC5nZXQoKSwgZ3JhcGhpY3ND
b250ZXh0LCBpY29uUmVjdCwgaWNvbk5hbWUpOwogfQorI2VuZGlmIC8vIEdUS19DSEVDS19WRVJT
SU9OKDMsIDIwLCAwKQogCiBib29sIFJlbmRlclRoZW1lR3RrOjpoYXNPd25EaXNhYmxlZFN0YXRl
SGFuZGxpbmdGb3IoQ29udHJvbFBhcnQgcGFydCkgY29uc3QKIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUd0ay5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lR3RrLmgKaW5kZXggNDE5N2M3Ni4uNmQxMjQ2MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lR3RrLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lR3RrLmgKQEAgLTEwNSw2ICsxMDUsNyBAQCBw
dWJsaWM6CiAgICAgYm9vbCBzaG91bGRIYXZlQ2Fwc0xvY2tJbmRpY2F0b3IoSFRNTElucHV0RWxl
bWVudCYpIGNvbnN0IG92ZXJyaWRlOwogCiBwcml2YXRlOgorICAgIFJlbmRlclRoZW1lR3RrKCk7
CiAgICAgdmlydHVhbCB+UmVuZGVyVGhlbWVHdGsoKTsKIAogICAgIGJvb2wgcGFpbnRDaGVja2Jv
eChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikg
b3ZlcnJpZGU7CkBAIC0xMTYsNiArMTE3LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGFkanVzdEJ1
dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQqKSBjb25zdCBv
dmVycmlkZTsKICAgICBib29sIHBhaW50QnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKIAorICAgIHZvaWQgYWRqdXN0
VGV4dEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCopIGNv
bnN0IG92ZXJyaWRlOwogICAgIGJvb2wgcGFpbnRUZXh0RmllbGQoY29uc3QgUmVuZGVyT2JqZWN0
JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAgICAgYm9v
bCBwYWludFRleHRBcmVhKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwogCkBAIC0xNzAsOCArMTcyLDEwIEBAIHByaXZhdGU6
CiAgICAgZG91YmxlIGFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIoUmVuZGVy
UHJvZ3Jlc3MmKSBjb25zdCBvdmVycmlkZTsKICAgICBkb3VibGUgYW5pbWF0aW9uRHVyYXRpb25G
b3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZvaWQg
YWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVt
ZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgSW50UmVjdCBwcm9ncmVzc0JhclJlY3RGb3JCb3Vu
ZHMoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwog
ICAgIGJvb2wgcGFpbnRQcm9ncmVzc0Jhcihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAKKyAgICBJbm5lclNwaW5CdXR0b25M
YXlvdXQgaW5uZXJTcGluQnV0dG9uTGF5b3V0KGNvbnN0IFJlbmRlck9iamVjdCYpIGNvbnN0IG92
ZXJyaWRlOwogICAgIHZvaWQgYWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZl
ciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOwogICAgIGJvb2wgcGFp
bnRJbm5lclNwaW5CdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogCg==
</data>
<flag name="review"
          id="300161"
          type_id="1"
          status="+"
          setter="mcatanzaro"
    />
          </attachment>
      

    </bug>

</bugzilla>