<?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>50318</bug_id>
          
          <creation_ts>2010-12-01 05:42:56 -0800</creation_ts>
          <short_desc>Web Inspector: Remove obsolete CSS backend API from InspectorDOMAgent</short_desc>
          <delta_ts>2010-12-02 03:25:54 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexander Pavlov (apavlov)">apavlov</reporter>
          <assigned_to name="Alexander Pavlov (apavlov)">apavlov</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>315606</commentid>
    <comment_count>0</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-12-01 05:42:56 -0800</bug_when>
    <thetext>Now that we have transitioned to the InspectorCSSAgent API, the old one, provided by InspectorDOMAgent is no longer necessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315710</commentid>
    <comment_count>1</comment_count>
      <attachid>75284</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-12-01 09:59:21 -0800</bug_when>
    <thetext>Created attachment 75284
[PATCH] Suggested solution</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316071</commentid>
    <comment_count>2</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-12-02 03:25:54 -0800</bug_when>
    <thetext>Committing to http://svn.webkit.org/repository/webkit/trunk ...
        D       WebCore/inspector/InspectorCSSStore.cpp
        D       WebCore/inspector/InspectorCSSStore.h
        M       LayoutTests/ChangeLog
        M       LayoutTests/inspector/styles-iframe.html
        M       LayoutTests/inspector/styles-source-lines.html
        M       LayoutTests/inspector/styles-source-offsets-expected.txt
        M       LayoutTests/inspector/styles-source-offsets.html
        M       WebCore/CMakeLists.txt
        M       WebCore/ChangeLog
        M       WebCore/GNUmakefile.am
        M       WebCore/WebCore.gypi
        M       WebCore/WebCore.order
        M       WebCore/WebCore.pro
        M       WebCore/WebCore.vcproj/WebCore.vcproj
        M       WebCore/WebCore.xcodeproj/project.pbxproj
        M       WebCore/inspector/Inspector.idl
        M       WebCore/inspector/InspectorCSSAgent.h
        M       WebCore/inspector/InspectorController.cpp
        M       WebCore/inspector/InspectorController.h
        M       WebCore/inspector/InspectorDOMAgent.cpp
        M       WebCore/inspector/InspectorDOMAgent.h
Committed r73121</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75284</attachid>
            <date>2010-12-01 09:59:21 -0800</date>
            <delta_ts>2010-12-02 02:47:58 -0800</delta_ts>
            <desc>[PATCH] Suggested solution</desc>
            <filename>removeoldapi.patch</filename>
            <type>text/plain</type>
            <size>67467</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">Y29tbWl0IDI1YmI4NTYyNmM4MmEyZTQ2ODRmZTg4YmUyZDJiOTU5ZWFhMTZmYjYKQXV0aG9yOiBB
bGV4YW5kZXIgUGF2bG92IDxhcGF2bG92QGNocm9taXVtLm9yZz4KRGF0ZTogICBXZWQgRGVjIDEg
MTg6NTU6MDAgMjAxMCArMDMwMAoKICAgIFJlbW92ZWRPbGRDc3NBcGkKCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMzJkNTE0
My4uMzUxZGM1NiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91
dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE3IEBACiAyMDEwLTEyLTAxICBBbGV4YW5kZXIg
UGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CiAKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogUmVtb3ZlIG9ic29sZXRlIENT
UyBiYWNrZW5kIEFQSSBmcm9tIEluc3BlY3RvckRPTUFnZW50CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MDMxOAorCisgICAgICAgICogaW5zcGVjdG9y
L3N0eWxlcy1pZnJhbWUuaHRtbDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc3R5bGVzLXNvdXJjZS1s
aW5lcy5odG1sOgorICAgICAgICAqIGluc3BlY3Rvci9zdHlsZXMtc291cmNlLW9mZnNldHMtZXhw
ZWN0ZWQudHh0OgorICAgICAgICAqIGluc3BlY3Rvci9zdHlsZXMtc291cmNlLW9mZnNldHMuaHRt
bDoKKworMjAxMC0xMi0wMSAgQWxleGFuZGVyIFBhdmxvdiAgPGFwYXZsb3ZAY2hyb21pdW0ub3Jn
PgorCiAgICAgICAgIFJldmlld2VkIGJ5IFl1cnkgU2VtaWtoYXRza3kuCiAKICAgICAgICAgV2Vi
IEluc3BlY3RvcjogbmFtZS1vbmx5IHByb3BlcnR5IGFwcGVhcnMgaW4gc3R5bGUgZGVjbGFyYXRp
b24gYnV0IG5vdCBpbiB0aGUgU3R5bGVzIHBhbmUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2lu
c3BlY3Rvci9zdHlsZXMtaWZyYW1lLmh0bWwgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVz
LWlmcmFtZS5odG1sCmluZGV4IGZiYWNmMzkuLjJkNzYyNGEgMTAwNzU1Ci0tLSBhL0xheW91dFRl
c3RzL2luc3BlY3Rvci9zdHlsZXMtaWZyYW1lLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVj
dG9yL3N0eWxlcy1pZnJhbWUuaHRtbApAQCAtNDYsNyArNDYsNyBAQCBmdW5jdGlvbiBmcm9udGVu
ZF9kdW1wU3R5bGVzQ29udGludWF0aW9uKHRlc3RDb250cm9sbGVyKQogICAgICAgICBtYWluU3R5
bGVzID0gc3R5bGVzOwogICAgIH0KIAotICAgIEluc3BlY3RvckJhY2tlbmQuZ2V0U3R5bGVzKGJv
ZHkuaWQsIGZhbHNlLCBtYWluRnJhbWVDYWxsYmFjayk7CisgICAgSW5zcGVjdG9yQmFja2VuZC5n
ZXRTdHlsZXNGb3JOb2RlMihib2R5LmlkLCBtYWluRnJhbWVDYWxsYmFjayk7CiAKICAgICAvLyAy
LiBGaW5kIGlmcmFtZSBub2RlCiAgICAgdmFyIGlubmVyTWFwcGluZyA9IFdlYkluc3BlY3Rvci5k
b21BZ2VudC5faWRUb0RPTU5vZGU7CkBAIC02Nyw3ICs2Nyw3IEBAIGZ1bmN0aW9uIGZyb250ZW5k
X2R1bXBTdHlsZXNDb250aW51YXRpb24odGVzdENvbnRyb2xsZXIpCiAgICAgICAgIHRlc3RDb250
cm9sbGVyLm5vdGlmeURvbmUoW21haW5TdHlsZXMsIHN0eWxlc10pOwogICAgIH0KIAotICAgIElu
c3BlY3RvckJhY2tlbmQuZ2V0U3R5bGVzKGlmcmFtZUJvZHkuaWQsIGZhbHNlLCBpZnJhbWVDYWxs
YmFjayk7CisgICAgSW5zcGVjdG9yQmFja2VuZC5nZXRTdHlsZXNGb3JOb2RlMihpZnJhbWVCb2R5
LmlkLCBpZnJhbWVDYWxsYmFjayk7CiB9CiAKIDwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy1zb3VyY2UtbGluZXMuaHRtbCBiL0xheW91dFRlc3RzL2lu
c3BlY3Rvci9zdHlsZXMtc291cmNlLWxpbmVzLmh0bWwKaW5kZXggZWUwMWYyYy4uZWI1YWVmMyAx
MDA3NTUKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy1zb3VyY2UtbGluZXMuaHRt
bAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzLXNvdXJjZS1saW5lcy5odG1sCkBA
IC02Myw2ICs2Myw4IEBAIGZ1bmN0aW9uIGRvaXQoKQogICAgIHsKICAgICAgICAgdmFyIG1hdGNo
ZWRDU1NSdWxlcyA9IHN0eWxlcy5tYXRjaGVkQ1NTUnVsZXM7CiAgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgbWF0Y2hlZENTU1J1bGVzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBpZiAo
bWF0Y2hlZENTU1J1bGVzW2ldLm9yaWdpbiAhPT0gIiIpCisgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICBvdXRwdXQoIkxpbmU6IiArIChtYXRjaGVkQ1NTUnVsZXNbaV0uc291
cmNlTGluZSArIDEpICsgIlx0IiArIG1hdGNoZWRDU1NSdWxlc1tpXS5zZWxlY3RvclRleHQpOwog
ICAgICAgICB9CiAgICAgICAgIG5vdGlmeURvbmUoKTsKQEAgLTg1LDcgKzg3LDcgQEAgZnVuY3Rp
b24gZnJvbnRlbmRfZ2V0UmF3U3R5bGVzKHRlc3RDb250cm9sbGVyKQogICAgIHsKICAgICAgICAg
dGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZShzdHlsZXMpOwogICAgIH0KLSAgICBJbnNwZWN0b3JC
YWNrZW5kLmdldFN0eWxlcyhXZWJJbnNwZWN0b3IuZG9tQWdlbnQuZG9jdW1lbnQuYm9keS5pZCwg
dHJ1ZSwgY2FsbGJhY2spOworICAgIEluc3BlY3RvckJhY2tlbmQuZ2V0U3R5bGVzRm9yTm9kZTIo
V2ViSW5zcGVjdG9yLmRvbUFnZW50LmRvY3VtZW50LmJvZHkuaWQsIGNhbGxiYWNrKTsKIH0KIAog
PC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzLXNvdXJj
ZS1vZmZzZXRzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMtc291
cmNlLW9mZnNldHMtZXhwZWN0ZWQudHh0CmluZGV4IDNlZGQyY2UuLjFlNTc5OTcgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMtc291cmNlLW9mZnNldHMtZXhwZWN0ZWQu
dHh0CisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMtc291cmNlLW9mZnNldHMtZXhw
ZWN0ZWQudHh0CkBAIC03LDcgKzcsNyBAQCBib2R5OiBbMC00XSBbNi0yNjZdCiAgICAgaW1wb3J0
YW50IC8qICFpbXBvcnRhbnQgcHJvcGVydHkgbm90IHJlY29nbml6ZWQgYnkgV2ViQ29yZSAqLycg
IWltcG9ydGFudCBub24tcGFyc2VkXSBAWzI2LTEwNF0KIFsnaGVpZ2h0JzonMTAwJSAhaW1wb3J0
YW50JyAhaW1wb3J0YW50XSBAWzEwOS0xMzNdCiBbJ2NvbG9yeic6JyIhaW1wb3J0YW50Iicgbm9u
LXBhcnNlZF0gQFsxMzgtMTU5XQotWydpbXBvcnRhbnQnOicnIG5vbi1wYXJzZWRdIEBbMTY0LTE3
NF0KK1snaW1wb3J0YW50JzonIWltcG9ydGFudCcgbm9uLXBhcnNlZF0gQFsxNjQtMTg1XQogWydj
b2xvcic6JyJiYWRjb2xvciIgISBpbXBvcnRhbnQgLyogZ29vZCBwcm9wZXJ0eSB3aXRoIHN0cmFu
Z2UgdmFsdWUgKi8nICFpbXBvcnRhbnQgbm9uLXBhcnNlZF0gQFsxOTAtMjU5XQogYm9keS5tYWlu
MTogWzI5OC0zMzZdIFszMzctNDE4XQogWydjb2xvcic6JyNGMDBCQUEnXSBAWzEzLTI4XQpAQCAt
MTcsNyArMTcsNyBAQCBib2R5Lm1haW4yOiBbNDM0LTQ0NF0gWzQ0NS01NDBdCiBib2R5Lm1haW5w
YWdlOiBbMi0xNV0gWzE3LTE0OV0KIFsndGV4dC1kZWNvcmF0aW9uJzonbm9uZSddIEBbNS0yN10K
IFsnYmFkcHJvcGVydHknOicxYmFkdmFsdWUxJyBub24tcGFyc2VkXSBAWzEwNy0xMzFdCi1lbGVt
ZW50LnN0eWxlOiBbMC0wXSBbMC0zMV0KK2VsZW1lbnQuc3R5bGU6IFswLTMxXQogWydmb250LXdl
aWdodCc6J25vcm1hbCddIEBbMC0yMF0KIFsnd2lkdGgnOic4MCUnXSBAWzIxLTMxXQogCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzLXNvdXJjZS1vZmZzZXRzLmh0bWwg
Yi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzLXNvdXJjZS1vZmZzZXRzLmh0bWwKaW5kZXgg
OTc5ZDAyYi4uMTk1Y2E1NSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxl
cy1zb3VyY2Utb2Zmc2V0cy5odG1sCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMt
c291cmNlLW9mZnNldHMuaHRtbApAQCAtMjYsMjcgKzI2LDQ1IEBAIGZ1bmN0aW9uIGZyb250ZW5k
X3J1blRlc3QodGVzdENvbnRyb2xsZXIpCiB7CiAgICAgdGVzdENvbnRyb2xsZXIud2FpdFVudGls
RG9uZSgpOwogICAgIGZyb250ZW5kX2V4cGFuZERPTVN1YnRyZWUoV2ViSW5zcGVjdG9yLmRvbUFn
ZW50LmRvY3VtZW50KTsKKwogICAgIHRlc3RDb250cm9sbGVyLnJ1bkFmdGVyUGVuZGluZ0Rpc3Bh
dGNoZXMoZnVuY3Rpb24oKSB7CiAgICAgICAgIGZ1bmN0aW9uIHN0eWxlc0NhbGxiYWNrKHRlc3RD
b250cm9sbGVyLCBzdHlsZXMpCiAgICAgICAgIHsKICAgICAgICAgICAgIHZhciBtYXRjaGVkQ1NT
UnVsZXMgPSBzdHlsZXMubWF0Y2hlZENTU1J1bGVzOwogICAgICAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBtYXRjaGVkQ1NTUnVsZXMubGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgICAgICB2
YXIgcnVsZSA9IG1hdGNoZWRDU1NSdWxlc1tpXTsKLSAgICAgICAgICAgICAgICBJbnNwZWN0b3JC
YWNrZW5kLmdldFN0eWxlU291cmNlRGF0YShydWxlLnN0eWxlLnN0eWxlSWQsIGZyb250ZW5kX3N0
eWxlRGF0YVJlY2VpdmVkLmJpbmQobnVsbCwgdGVzdENvbnRyb2xsZXIsIHJ1bGUsIGZhbHNlKSk7
CisgICAgICAgICAgICAgICAgZnJvbnRlbmRfZHVtcFN0eWxlRGF0YSh0ZXN0Q29udHJvbGxlciwg
cnVsZSwgZmFsc2UpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgSW5zcGVjdG9yQmFja2Vu
ZC5nZXRTdHlsZVNvdXJjZURhdGEoc3R5bGVzLmlubGluZVN0eWxlLnN0eWxlSWQsIGZyb250ZW5k
X3N0eWxlRGF0YVJlY2VpdmVkLmJpbmQobnVsbCwgdGVzdENvbnRyb2xsZXIsIHN0eWxlcy5pbmxp
bmVTdHlsZSwgdHJ1ZSkpOworICAgICAgICAgICAgZnJvbnRlbmRfZHVtcFN0eWxlRGF0YSh0ZXN0
Q29udHJvbGxlciwgc3R5bGVzLmlubGluZVN0eWxlLCB0cnVlKTsKICAgICAgICAgfQotICAgICAg
ICBJbnNwZWN0b3JCYWNrZW5kLmdldFN0eWxlcyhXZWJJbnNwZWN0b3IuZG9tQWdlbnQuZG9jdW1l
bnQuYm9keS5pZCwgdHJ1ZSwgc3R5bGVzQ2FsbGJhY2suYmluZChudWxsLCB0ZXN0Q29udHJvbGxl
cikpOworICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLmdldFN0eWxlc0Zvck5vZGUyKFdlYkluc3Bl
Y3Rvci5kb21BZ2VudC5kb2N1bWVudC5ib2R5LmlkLCBzdHlsZXNDYWxsYmFjay5iaW5kKG51bGws
IHRlc3RDb250cm9sbGVyKSk7CiAgICAgfSk7CiB9CiAKLWZ1bmN0aW9uIGZyb250ZW5kX3N0eWxl
RGF0YVJlY2VpdmVkKHRlc3RDb250cm9sbGVyLCBydWxlT3JTdHlsZSwgc2hvdWxkQmFpbCwgZGF0
YSkKK2Z1bmN0aW9uIGZyb250ZW5kX2R1bXBTdHlsZURhdGEodGVzdENvbnRyb2xsZXIsIHJ1bGVP
clN0eWxlLCBzaG91bGRCYWlsKQogewogICAgIHZhciBpc1J1bGUgPSAhIShydWxlT3JTdHlsZS5z
dHlsZSk7Ci0gICAgdGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKChpc1J1bGUgPyBydWxlT3JT
dHlsZS5zZWxlY3RvclRleHQgOiAiZWxlbWVudC5zdHlsZSIpICsgIjogWyIgKyBkYXRhLnNlbGVj
dG9yUmFuZ2Uuc3RhcnQgKyAiLSIgKyBkYXRhLnNlbGVjdG9yUmFuZ2UuZW5kICsgIl0gWyIgKyBk
YXRhLmJvZHlSYW5nZS5zdGFydCArICItIiArIGRhdGEuYm9keVJhbmdlLmVuZCArICJdIik7Ci0g
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhLnByb3BlcnR5RGF0YS5sZW5ndGg7ICsraSkgewot
ICAgICAgICB2YXIgcHJvcGVydHlEYXR1bSA9IGRhdGEucHJvcGVydHlEYXRhW2ldOwotICAgICAg
ICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIlsnIiArIHByb3BlcnR5RGF0dW0ubmFtZSAr
ICInOiciICsgcHJvcGVydHlEYXR1bS52YWx1ZSArICInIiArIChwcm9wZXJ0eURhdHVtLmltcG9y
dGFudCA/ICIgIWltcG9ydGFudCIgOiAiIikgKyAocHJvcGVydHlEYXR1bS5wYXJzZWQgPyAiIiA6
ICIgbm9uLXBhcnNlZCIpICsiXSBAWyIgKyBwcm9wZXJ0eURhdHVtLnN0YXJ0ICsgIi0iICsgcHJv
cGVydHlEYXR1bS5lbmQgKyAiXSIpOworICAgIHZhciBzdHlsZTsKKyAgICB2YXIgaGVhZGVyID0g
IiI7CisgICAgaWYgKGlzUnVsZSkgeworICAgICAgICBpZiAocnVsZU9yU3R5bGUub3JpZ2luICE9
PSAiIikgeworICAgICAgICAgICAgaWYgKHNob3VsZEJhaWwpCisgICAgICAgICAgICAgICAgdGVz
dENvbnRyb2xsZXIubm90aWZ5RG9uZSh0ZXN0Q29udHJvbGxlci5yZXN1bHRzKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBzdHlsZSA9IHJ1bGVPclN0eWxlLnN0eWxl
OworICAgICAgICBoZWFkZXIgPSBydWxlT3JTdHlsZS5zZWxlY3RvclRleHQgKyAiOiBbIiArIChy
dWxlT3JTdHlsZS5zZWxlY3RvclJhbmdlID8gcnVsZU9yU3R5bGUuc2VsZWN0b3JSYW5nZS5zdGFy
dCArICItIiArIHJ1bGVPclN0eWxlLnNlbGVjdG9yUmFuZ2UuZW5kIDogIiIpICArICJdIjsKKyAg
ICB9IGVsc2UgeworICAgICAgICBzdHlsZSA9IHJ1bGVPclN0eWxlOworICAgICAgICBoZWFkZXIg
PSAiZWxlbWVudC5zdHlsZToiOworICAgIH0KKyAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1
c2goaGVhZGVyICsgIiBbIiArIHN0eWxlLnByb3BlcnRpZXMuc3RhcnRPZmZzZXQgICsgIi0iICsg
c3R5bGUucHJvcGVydGllcy5lbmRPZmZzZXQgKyAiXSIpOworICAgIHZhciBhbGxQcm9wZXJ0aWVz
ID0gc3R5bGUuY3NzUHJvcGVydGllczsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFsbFByb3Bl
cnRpZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgdmFyIHByb3BlcnR5ID0gYWxsUHJvcGVydGll
c1tpXTsKKyAgICAgICAgaWYgKHByb3BlcnR5LnN0YXR1cyA9PT0gInN0eWxlIikKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIlsnIiAr
IHByb3BlcnR5Lm5hbWUgKyAiJzonIiArIHByb3BlcnR5LnZhbHVlICsgIiciICsgKHByb3BlcnR5
LnByaW9yaXR5ID8gIiAhaW1wb3J0YW50IiA6ICIiKSArIChwcm9wZXJ0eS5wYXJzZWRPayA/ICIi
IDogIiBub24tcGFyc2VkIikgKyJdIEBbIiArIHByb3BlcnR5LnN0YXJ0T2Zmc2V0ICsgIi0iICsg
cHJvcGVydHkuZW5kT2Zmc2V0ICsgIl0iKTsKICAgICB9CiAgICAgaWYgKHNob3VsZEJhaWwpCiAg
ICAgICAgIHRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUodGVzdENvbnRyb2xsZXIucmVzdWx0cyk7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvV2ViQ29yZS9DTWFrZUxpc3Rz
LnR4dAppbmRleCBmMzVkYTJmLi4zYmFkODBmIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NNYWtlTGlz
dHMudHh0CisrKyBiL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTExMjQsNyArMTEyNCw2IEBA
IFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25D
YWNoZUFnZW50LmNwcAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNwcAogICAgIGlu
c3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKLSAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQ1NT
U3RvcmUuY3BwCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckNsaWVudC5jcHAKICAgICBpbnNwZWN0
b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdl
bnQuY3BwCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9n
CmluZGV4IGZjYTg5MDcuLjYxNjVmYmEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisr
KyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMzQgQEAKIDIwMTAtMTItMDEgIEFsZXhh
bmRlciBQYXZsb3YgIDxhcGF2bG92QGNocm9taXVtLm9yZz4KIAorICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBSZW1vdmUgb2Jzb2xl
dGUgQ1NTIGJhY2tlbmQgQVBJIGZyb20gSW5zcGVjdG9yRE9NQWdlbnQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUwMzE4CisKKyAgICAgICAgKiBDTWFr
ZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3Jl
Lmd5cGk6CisgICAgICAgICogV2ViQ29yZS5vcmRlcjoKKyAgICAgICAgKiBXZWJDb3JlLnBybzoK
KyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaW5zcGVjdG9yL0luc3Bl
Y3Rvci5pZGw6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50Lmg6CisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNTU1N0b3JlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBpbnNwZWN0b3IvSW5zcGVjdG9yQ1NTU3RvcmUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JDb250cm9sbGVyOjpJbnNwZWN0b3JDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckNvbnRyb2xsZXI6OmNvbm5lY3RGcm9udGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JDb250cm9sbGVyOjpkaWRDb21taXRMb2FkKToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yQ29udHJvbGxlci5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01B
Z2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6SW5zcGVjdG9y
RE9NQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnVuYmluZCk6
CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50Lmg6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JET01BZ2VudDo6Y3JlYXRlKToKKworMjAxMC0xMi0wMSAgQWxleGFuZGVy
IFBhdmxvdiAgPGFwYXZsb3ZAY2hyb21pdW0ub3JnPgorCiAgICAgICAgIFJldmlld2VkIGJ5IFl1
cnkgU2VtaWtoYXRza3kuCiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogbmFtZS1vbmx5IHByb3Bl
cnR5IGFwcGVhcnMgaW4gc3R5bGUgZGVjbGFyYXRpb24gYnV0IG5vdCBpbiB0aGUgU3R5bGVzIHBh
bmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmFtCmluZGV4IDY4YTIzOTQuLjllYzI0Y2IgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvR05VbWFr
ZWZpbGUuYW0KKysrIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtMTg5Nyw4ICsxODk3LDYg
QEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250
cm9sbGVyLmggXAogCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcCBcCiAJ
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaCBcCi0JV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ1NTU3RvcmUuY3BwIFwKLQlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
U1NTdG9yZS5oIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZVJlc291cmNl
LmNwcCBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5oIFwK
IAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcCBcCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDY0
Y2FkOGUuLmNlYWJmZWMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1dl
YkNvcmUvV2ViQ29yZS5neXBpCkBAIC0xOTY2LDggKzE5NjYsNiBAQAogICAgICAgICAgICAgJ2lu
c3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9J
bnNwZWN0b3JDU1NBZ2VudC5jcHAnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JD
U1NBZ2VudC5oJywKLSAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yQ1NTU3RvcmUuY3Bw
JywKLSAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yQ1NTU3RvcmUuaCcsCiAgICAgICAg
ICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuY3BwJywKICAgICAgICAg
ICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5oJywKICAgICAgICAgICAg
ICdpbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAnLApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9XZWJDb3JlLm9yZGVyIGIvV2ViQ29yZS9XZWJDb3JlLm9yZGVyCmluZGV4IGEzMTQ2MWMu
LjBmZGFiYjEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5vcmRlcgorKysgYi9XZWJDb3Jl
L1dlYkNvcmUub3JkZXIKQEAgLTE2Miw4ICsxNjIsNiBAQCBfX1pON1dlYkNvcmUyMUNvbnRleHRN
ZW51Q29udHJvbGxlckMxRVBOU180UGFnZUVQTlNfMTdDb250ZXh0TWVudUNsaWVudEUKIF9fWk43
V2ViQ29yZTIxQ29udGV4dE1lbnVDb250cm9sbGVyQzJFUE5TXzRQYWdlRVBOU18xN0NvbnRleHRN
ZW51Q2xpZW50RQogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyQzFFUE5TXzRQYWdl
RVBOU18xNUluc3BlY3RvckNsaWVudEUKIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxl
ckMyRVBOU180UGFnZUVQTlNfMTVJbnNwZWN0b3JDbGllbnRFCi1fX1pON1dlYkNvcmUxN0luc3Bl
Y3RvckNTU1N0b3JlQzFFdgotX19aTjdXZWJDb3JlMTdJbnNwZWN0b3JDU1NTdG9yZUMyRXYKIF9f
Wk43V2ViQ29yZTE2SW5zcGVjdG9yQmFja2VuZEMxRVBOU18xOUluc3BlY3RvckNvbnRyb2xsZXJF
CiBfX1pON1dlYkNvcmUxNkluc3BlY3RvckJhY2tlbmRDMkVQTlNfMTlJbnNwZWN0b3JDb250cm9s
bGVyRQogX19aTjdXZWJDb3JlMThJbmplY3RlZFNjcmlwdEhvc3RDMUVQTlNfMTlJbnNwZWN0b3JD
b250cm9sbGVyRQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUvV2Vi
Q29yZS5wcm8KaW5kZXggY2VkNDEzMC4uMzZkYmViMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJD
b3JlLnBybworKysgYi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC0xMDE4LDcgKzEwMTgsNiBAQCBT
T1VSQ0VTICs9IFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50
LmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuY3BwIFwKICAgICBpbnNwZWN0
b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwIFwKLSAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQ1NTU3Rv
cmUuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQ2xpZW50LmNwcCBcCiAgICAgaW5zcGVj
dG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yRGF0
YWJhc2VSZXNvdXJjZS5jcHAgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvaiBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5k
ZXggZjJlNzQyMy4uZGFlNzA4YSAxMDA3NTUKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9q
CkBAIC02NDY1MSwxNCArNjQ2NTEsNiBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUN
Ci0JCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yQ1NTU3RvcmUuY3BwIg0K
LQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5z
cGVjdG9yXEluc3BlY3RvckNTU1N0b3JlLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZp
bGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yRGF0YWJhc2VSZXNv
dXJjZS5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagppbmRleCA3OTRkNWFkLi40MjNiNzQ0IDEwMDY0NAotLS0gYS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTYwOSw4ICsxNjA5LDYgQEAKIAkJODJB
QjE3NzQxMjVDODI2NzAwQzUwNjlEIC8qIEluc3BlY3RvclN0eWxlU2hlZXQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgyQUIxNzcwMTI1QzgyNjcwMEM1
MDY5RCAvKiBJbnNwZWN0b3JTdHlsZVNoZWV0LmggKi87IH07CiAJCTgyQUIxNzc1MTI1QzgyNjcw
MEM1MDY5RCAvKiBJbnNwZWN0b3JSZXNvdXJjZUFnZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgyQUIxNzcxMTI1QzgyNjcwMEM1MDY5RCAvKiBJ
bnNwZWN0b3JSZXNvdXJjZUFnZW50LmNwcCAqLzsgfTsKIAkJODJBQjE3NzYxMjVDODI2NzAwQzUw
NjlEIC8qIEluc3BlY3RvclJlc291cmNlQWdlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgyQUIxNzcyMTI1QzgyNjcwMEM1MDY5RCAvKiBJbnNwZWN0
b3JSZXNvdXJjZUFnZW50LmggKi87IH07Ci0JCTgyQjY1ODk4MTE4OUUzOTIwMEUwNTJBMSAvKiBJ
bnNwZWN0b3JDU1NTdG9yZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gODJCNjU4OTcxMTg5RTM5MjAwRTA1MkExIC8qIEluc3BlY3RvckNTU1N0b3JlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJODJCNjU4
OUExMTg5RTQ3NjAwRTA1MkExIC8qIEluc3BlY3RvckNTU1N0b3JlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgyQjY1ODk5MTE4OUU0NzYwMEUwNTJB
MSAvKiBJbnNwZWN0b3JDU1NTdG9yZS5jcHAgKi87IH07CiAJCTgyRTNEOERFMTIyRUEwRDEwMDNB
RTVCQyAvKiBDU1NQcm9wZXJ0eVNvdXJjZURhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODJFM0Q4REMxMjJFQTBEMTAwM0FFNUJDIC8qIENTU1By
b3BlcnR5U291cmNlRGF0YS5jcHAgKi87IH07CiAJCTgyRTNEOERGMTIyRUEwRDEwMDNBRTVCQyAv
KiBDU1NQcm9wZXJ0eVNvdXJjZURhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDgyRTNEOEREMTIyRUEwRDEwMDNBRTVCQyAvKiBDU1NQcm9wZXJ0eVNv
dXJjZURhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk4NDE5RDJBNzEyMEQ5MkQwMDAxNDFGOEYgLyogU1ZHUGF0aEJ5dGVTdHJlYW0uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0MTlEMkE0MTIwRDky
RDAwMDE0MUY4RiAvKiBTVkdQYXRoQnl0ZVN0cmVhbS5oICovOyB9OwpAQCAtNzgwMCw4ICs3Nzk4
LDYgQEAKIAkJODJBQjE3NzAxMjVDODI2NzAwQzUwNjlEIC8qIEluc3BlY3RvclN0eWxlU2hlZXQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yU3R5bGVTaGVldC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4MkFCMTc3MTEyNUM4MjY3MDBDNTA2OUQg
LyogSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBJbnNwZWN0b3JSZXNvdXJjZUFnZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJODJBQjE3NzIxMjVDODI2NzAwQzUwNjlEIC8qIEluc3BlY3RvclJlc291cmNl
QWdlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yUmVzb3Vy
Y2VBZ2VudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4MkI2NTg5NzExODlFMzky
MDBFMDUyQTEgLyogSW5zcGVjdG9yQ1NTU3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSW5zcGVjdG9yQ1NTU3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJODJCNjU4OTkxMTg5RTQ3NjAwRTA1MkExIC8qIEluc3BlY3RvckNTU1N0b3JlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3BlY3RvckNTU1N0b3JlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODJFM0Q4REMxMjJFQTBEMTAwM0FFNUJDIC8q
IENTU1Byb3BlcnR5U291cmNlRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBDU1NQcm9wZXJ0eVNvdXJjZURhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk4MkUzRDhERDEyMkVBMEQxMDAzQUU1QkMgLyogQ1NTUHJvcGVydHlTb3VyY2VEYXRh
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU1Byb3BlcnR5U291cmNlRGF0
YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NDE5RDJBNDEyMEQ5MkQwMDAxNDFG
OEYgLyogU1ZHUGF0aEJ5dGVTdHJlYW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU1ZHUGF0aEJ5dGVTdHJlYW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEy
Mzg3LDggKzEyMzgzLDYgQEAKIAkJCQkxQzgxQjk1NjBFOTczMzA4MDAyNjZFMDcgLyogSW5zcGVj
dG9yQ29udHJvbGxlci5oICovLAogCQkJCTgyQUIxNzQxMTI0Qjk5RUMwMEM1MDY5RCAvKiBJbnNw
ZWN0b3JDU1NBZ2VudC5jcHAgKi8sCiAJCQkJODJBQjE3NDIxMjRCOTlFQzAwQzUwNjlEIC8qIElu
c3BlY3RvckNTU0FnZW50LmggKi8sCi0JCQkJODJCNjU4OTkxMTg5RTQ3NjAwRTA1MkExIC8qIElu
c3BlY3RvckNTU1N0b3JlLmNwcCAqLywKLQkJCQk4MkI2NTg5NzExODlFMzkyMDBFMDUyQTEgLyog
SW5zcGVjdG9yQ1NTU3RvcmUuaCAqLywKIAkJCQk0MUYwNjIxMzBGNUYxOTI2MDBBMDdFQUMgLyog
SW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5jcHAgKi8sCiAJCQkJNDFGMDYyMTIwRjVGMTkyNjAw
QTA3RUFDIC8qIEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuaCAqLywKIAkJCQlGMzNGMDUzQjEy
MEIwREE1MDBFNTc0M0EgLyogSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAgKi8sCkBAIC0xOTk2
Niw3ICsxOTk2MCw2IEBACiAJCQkJMUM4MUI5NUMwRTk3MzMwODAwMjY2RTA3IC8qIEluc3BlY3Rv
ckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUM4MUI5NUEwRTk3MzMwODAwMjY2RTA3IC8q
IEluc3BlY3RvckNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTgyQUIxNzQ0MTI0Qjk5
RUMwMEM1MDY5RCAvKiBJbnNwZWN0b3JDU1NBZ2VudC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJODJC
NjU4OTgxMTg5RTM5MjAwRTA1MkExIC8qIEluc3BlY3RvckNTU1N0b3JlLmggaW4gSGVhZGVycyAq
LywKIAkJCQk0MUYwNjIxNDBGNUYxOTI2MDBBMDdFQUMgLyogSW5zcGVjdG9yRGF0YWJhc2VSZXNv
dXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjMzRjA1M0UxMjBCMERBNTAwRTU3NDNBIC8qIElu
c3BlY3RvckRlYnVnZ2VyQWdlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTdBMjQ1ODdDMTAyMUVB
RjQwMDBBMDBBQSAvKiBJbnNwZWN0b3JET01BZ2VudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMjU5
Nyw3ICsyMjU5MCw2IEBACiAJCQkJN0ExRjJCNTIxMjZDNjFCMjAwMDZBN0U2IC8qIEluc3BlY3Rv
ckNsaWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQzgxQjk1QjBFOTczMzA4MDAyNjZFMDcg
LyogSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4MkFCMTc0MzEy
NEI5OUVDMDBDNTA2OUQgLyogSW5zcGVjdG9yQ1NTQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCi0J
CQkJODJCNjU4OUExMTg5RTQ3NjAwRTA1MkExIC8qIEluc3BlY3RvckNTU1N0b3JlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTQxRjA2MjE1MEY1RjE5MjYwMEEwN0VBQyAvKiBJbnNwZWN0b3JEYXRh
YmFzZVJlc291cmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUYzM0YwNTNEMTIwQjBEQTUwMEU1
NzQzQSAvKiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdB
MjQ1ODdCMTAyMUVBRjQwMDBBMDBBQSAvKiBJbnNwZWN0b3JET01BZ2VudC5jcHAgaW4gU291cmNl
cyAqLywKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5pZGwgYi9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuaWRsCmluZGV4IGMxODVkMmQuLjk5YjJmYWIgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5pZGwKKysrIGIvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yLmlkbApAQCAtMTk3LDE5ICsxOTcsNiBAQCBtb2R1bGUgY29yZSB7CiAg
ICAgICAgIFtoYW5kbGVyPUNvbnRyb2xsZXJdIHZvaWQgaGlnaGxpZ2h0RnJhbWUoaW4gdW5zaWdu
ZWQgbG9uZyBmcmFtZUlkKTsKICAgICAgICAgW2hhbmRsZXI9Q29udHJvbGxlcl0gdm9pZCBoaWRl
RnJhbWVIaWdobGlnaHQoKTsKIAotICAgICAgICBbaGFuZGxlcj1ET01dIHZvaWQgZ2V0U3R5bGVz
KGluIGxvbmcgbm9kZUlkLCBpbiBib29sZWFuIGF1dGhPbmx5LCBvdXQgVmFsdWUgc3R5bGVzKTsK
LSAgICAgICAgW2hhbmRsZXI9RE9NXSB2b2lkIGdldEFsbFN0eWxlcyhvdXQgQXJyYXkgc3R5bGVz
KTsKLSAgICAgICAgW2hhbmRsZXI9RE9NXSB2b2lkIGdldElubGluZVN0eWxlKGluIGxvbmcgbm9k
ZUlkLCBvdXQgVmFsdWUgc3R5bGUpOwotICAgICAgICBbaGFuZGxlcj1ET01dIHZvaWQgZ2V0Q29t
cHV0ZWRTdHlsZShpbiBsb25nIG5vZGVJZCwgb3V0IFZhbHVlIHN0eWxlKTsKLSAgICAgICAgW2hh
bmRsZXI9RE9NXSB2b2lkIGdldFN0eWxlU2hlZXQoaW4gbG9uZyBzdHlsZVNoZWV0SWQsIG91dCBP
YmplY3Qgc3R5bGVTaGVldCk7Ci0gICAgICAgIFtoYW5kbGVyPURPTV0gdm9pZCBnZXRTdHlsZVNv
dXJjZURhdGEoaW4gbG9uZyBzdHlsZVNoZWV0SWQsIG91dCBPYmplY3Qgc3R5bGVTb3VyY2VEYXRh
KTsKLSAgICAgICAgW2hhbmRsZXI9RE9NXSB2b2lkIGFwcGx5U3R5bGVUZXh0KGluIGxvbmcgc3R5
bGVJZCwgaW4gU3RyaW5nIHN0eWxlVGV4dCwgaW4gU3RyaW5nIHByb3BlcnR5TmFtZSwgb3V0IGJv
b2xlYW4gc3VjY2Vzcywgb3V0IFZhbHVlIHN0eWxlKTsKLSAgICAgICAgW2hhbmRsZXI9RE9NXSB2
b2lkIHNldFN0eWxlVGV4dChpbiBsb25nIHN0eWxlSWQsIGluIFN0cmluZyBzdHlsZVRleHQsIG91
dCBib29sZWFuIHN1Y2Nlc3MpOwotICAgICAgICBbaGFuZGxlcj1ET01dIHZvaWQgc2V0U3R5bGVQ
cm9wZXJ0eShpbiBsb25nIHN0eWxlSWQsIGluIFN0cmluZyBuYW1lLCBpbiBTdHJpbmcgdmFsdWUs
IG91dCBib29sZWFuIHN1Y2Nlc3MpOwotICAgICAgICBbaGFuZGxlcj1ET01dIHZvaWQgdG9nZ2xl
U3R5bGVFbmFibGVkKGluIGxvbmcgc3R5bGVJZCwgaW4gU3RyaW5nIHByb3BlcnR5TmFtZSwgaW4g
Ym9vbGVhbiBkaXNhYmxlZCwgb3V0IFZhbHVlIHN0eWxlKTsKLSAgICAgICAgW2hhbmRsZXI9RE9N
XSB2b2lkIHNldFJ1bGVTZWxlY3RvcihpbiBsb25nIHJ1bGVJZCwgaW4gU3RyaW5nIHNlbGVjdG9y
LCBpbiBsb25nIHNlbGVjdGVkTm9kZUlkLCBvdXQgVmFsdWUgcnVsZSwgb3V0IGJvb2xlYW4gc2Vs
ZWN0b3JBZmZlY3RzTm9kZSk7Ci0gICAgICAgIFtoYW5kbGVyPURPTV0gdm9pZCBhZGRSdWxlKGlu
IFN0cmluZyBzZWxlY3RvciwgaW4gbG9uZyBzZWxlY3RlZE5vZGVJZCwgb3V0IFZhbHVlIHJ1bGUs
IG91dCBib29sZWFuIHNlbGVjdG9yQWZmZWN0c05vZGUpOwotCiAgICAgICAgIFtoYW5kbGVyPUNT
U10gdm9pZCBnZXRTdHlsZXNGb3JOb2RlMihpbiBsb25nIG5vZGVJZCwgb3V0IFZhbHVlIHN0eWxl
cyk7CiAgICAgICAgIFtoYW5kbGVyPUNTU10gdm9pZCBnZXRDb21wdXRlZFN0eWxlRm9yTm9kZTIo
aW4gbG9uZyBub2RlSWQsIG91dCBWYWx1ZSBzdHlsZSk7CiAgICAgICAgIFtoYW5kbGVyPUNTU10g
dm9pZCBnZXRJbmxpbmVTdHlsZUZvck5vZGUyKGluIGxvbmcgbm9kZUlkLCBvdXQgVmFsdWUgc3R5
bGUpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaCBi
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmgKaW5kZXggMmQyZWZiNS4uZjY3
ZDU3ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaAor
KysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oCkBAIC00Niw2ICs0Niw3
IEBAIGNsYXNzIEVsZW1lbnQ7CiBjbGFzcyBJbnNwZWN0b3JGcm9udGVuZDsKIGNsYXNzIE5hbWVO
b2RlTWFwOwogY2xhc3MgTm9kZTsKK2NsYXNzIFN0eWxlQmFzZTsKIAogI2lmIEVOQUJMRShJTlNQ
RUNUT1IpCiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU1N0b3Jl
LmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU1N0b3JlLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDg2MzRjYi4uMDAwMDAwMAotLS0gYS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDU1NTdG9yZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzNDAgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUg
Q29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0g
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JDU1NTdG9yZS5oIgot
Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUikKLQotI2luY2x1ZGUgIkNTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uLmgiCi0jaW5jbHVkZSAiQ1NTUGFyc2VyLmgiCi0jaW5jbHVkZSAiQ1NTUnVsZUxpc3Qu
aCIKLSNpbmNsdWRlICJDU1NTdHlsZURlY2xhcmF0aW9uLmgiCi0jaW5jbHVkZSAiQ1NTU3R5bGVS
dWxlLmgiCi0jaW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5oIgotI2luY2x1ZGUgIkNhY2hlZFJlc291
cmNlLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKLSNpbmNsdWRlICJFbGVtZW50Lmgi
Ci0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJIVE1MSGVhZEVsZW1lbnQuaCIKLSNpbmNs
dWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yUmVzb3VyY2VB
Z2VudC5oIgotI2luY2x1ZGUgIk5vZGUuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgot
I2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgotI2luY2x1ZGUgIlN0eWxlU2hlZXRMaXN0LmgiCi0j
aW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotSW5zcGVj
dG9yQ1NTU3RvcmU6Okluc3BlY3RvckNTU1N0b3JlKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3Bl
Y3RvckNvbnRyb2xsZXIpCi0gICAgOiBtX2luc3BlY3RvckNvbnRyb2xsZXIoaW5zcGVjdG9yQ29u
dHJvbGxlcikKLSAgICAsIG1fbGFzdFN0eWxlSWQoMSkKLSAgICAsIG1fbGFzdFN0eWxlU2hlZXRJ
ZCgxKQotICAgICwgbV9sYXN0UnVsZUlkKDEpCi17Ci19Ci0KLUluc3BlY3RvckNTU1N0b3JlOjp+
SW5zcGVjdG9yQ1NTU3RvcmUoKQotewotfQotCi12b2lkIEluc3BlY3RvckNTU1N0b3JlOjpyZXNl
dCgpCi17Ci0gICAgbV9zdHlsZVRvSWQuY2xlYXIoKTsKLSAgICBtX2lkVG9TdHlsZS5jbGVhcigp
OwotICAgIG1fcnVsZVRvSWQuY2xlYXIoKTsKLSAgICBtX2lkVG9SdWxlLmNsZWFyKCk7Ci0gICAg
ZGVsZXRlQWxsVmFsdWVzKG1fc3R5bGVTaGVldFRvT2Zmc2V0cyk7Ci0gICAgbV9zdHlsZVNoZWV0
VG9PZmZzZXRzLmNsZWFyKCk7Ci0gICAgbV9zdHlsZVNoZWV0VG9JZC5jbGVhcigpOwotICAgIG1f
aWRUb1N0eWxlU2hlZXQuY2xlYXIoKTsKLSAgICBtX2lkVG9TdHlsZVNoZWV0VGV4dC5jbGVhcigp
OwotICAgIG1faWRUb0Rpc2FibGVkU3R5bGUuY2xlYXIoKTsKLSAgICBtX2RvY3VtZW50Tm9kZVRv
SW5zcGVjdG9yU3R5bGVTaGVldE1hcC5jbGVhcigpOwotCi0gICAgbV9sYXN0U3R5bGVJZCA9IDE7
Ci0gICAgbV9sYXN0U3R5bGVTaGVldElkID0gMTsKLSAgICBtX2xhc3RSdWxlSWQgPSAxOwotfQot
Ci12b2lkIEluc3BlY3RvckNTU1N0b3JlOjpyZW1vdmVEb2N1bWVudChEb2N1bWVudCogZG9jKQot
ewotICAgIG1fZG9jdW1lbnROb2RlVG9JbnNwZWN0b3JTdHlsZVNoZWV0TWFwLnJlbW92ZShkb2Mp
OwotfQotCi1DU1NTdHlsZVNoZWV0KiBJbnNwZWN0b3JDU1NTdG9yZTo6aW5zcGVjdG9yU3R5bGVT
aGVldChEb2N1bWVudCogb3duZXJEb2N1bWVudCwgYm9vbCBjcmVhdGVJZkFic2VudCkKLXsKLSAg
ICBEb2N1bWVudFRvU3R5bGVTaGVldE1hcDo6aXRlcmF0b3IgaXQgPSBtX2RvY3VtZW50Tm9kZVRv
SW5zcGVjdG9yU3R5bGVTaGVldE1hcC5maW5kKG93bmVyRG9jdW1lbnQpOwotICAgIGlmIChpdCAh
PSBtX2RvY3VtZW50Tm9kZVRvSW5zcGVjdG9yU3R5bGVTaGVldE1hcC5lbmQoKSkKLSAgICAgICAg
cmV0dXJuIGl0LT5zZWNvbmQuZ2V0KCk7Ci0gICAgaWYgKCFjcmVhdGVJZkFic2VudCkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgUmVmUHRyPEVsZW1l
bnQ+IHN0eWxlRWxlbWVudCA9IG93bmVyRG9jdW1lbnQtPmNyZWF0ZUVsZW1lbnQoInN0eWxlIiwg
ZWMpOwotICAgIGlmICghZWMpCi0gICAgICAgIHN0eWxlRWxlbWVudC0+c2V0QXR0cmlidXRlKCJ0
eXBlIiwgInRleHQvY3NzIiwgZWMpOwotICAgIGlmICghZWMpCi0gICAgICAgIG93bmVyRG9jdW1l
bnQtPmhlYWQoKS0+YXBwZW5kQ2hpbGQoc3R5bGVFbGVtZW50LCBlYyk7Ci0gICAgaWYgKGVjKQot
ICAgICAgICByZXR1cm4gMDsKLSAgICBTdHlsZVNoZWV0TGlzdCogc3R5bGVTaGVldHMgPSBvd25l
ckRvY3VtZW50LT5zdHlsZVNoZWV0cygpOwotICAgIFN0eWxlU2hlZXQqIHN0eWxlU2hlZXQgPSBz
dHlsZVNoZWV0cy0+aXRlbShzdHlsZVNoZWV0cy0+bGVuZ3RoKCkgLSAxKTsKLSAgICBpZiAoIXN0
eWxlU2hlZXQtPmlzQ1NTU3R5bGVTaGVldCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBDU1NT
dHlsZVNoZWV0KiBpbnNwZWN0b3JTdHlsZVNoZWV0ID0gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVl
dCo+KHN0eWxlU2hlZXQpOwotICAgIG1fZG9jdW1lbnROb2RlVG9JbnNwZWN0b3JTdHlsZVNoZWV0
TWFwLnNldChvd25lckRvY3VtZW50LCBpbnNwZWN0b3JTdHlsZVNoZWV0KTsKLSAgICByZXR1cm4g
aW5zcGVjdG9yU3R5bGVTaGVldDsKLX0KLQotU3RyaW5nIEluc3BlY3RvckNTU1N0b3JlOjpzdHls
ZVNoZWV0VGV4dChsb25nIHN0eWxlU2hlZXRJZCkKLXsKLSAgICBJZFRvU3R5bGVTaGVldFRleHRN
YXA6Oml0ZXJhdG9yIGl0ID0gbV9pZFRvU3R5bGVTaGVldFRleHQuZmluZChzdHlsZVNoZWV0SWQp
OwotICAgIGlmIChpdCAhPSBtX2lkVG9TdHlsZVNoZWV0VGV4dC5lbmQoKSkKLSAgICAgICAgcmV0
dXJuIGl0LT5zZWNvbmQ7Ci0KLSAgICBDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0gc3R5bGVT
aGVldEZvcklkKHN0eWxlU2hlZXRJZCk7Ci0gICAgaWYgKCFzdHlsZVNoZWV0KQotICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBTdHJpbmcgcmVzdWx0OwotICAgIGJvb2wgc3VjY2VzcyA9
IGZhbHNlOwotICAgIE5vZGUqIG93bmVyTm9kZSA9IHN0eWxlU2hlZXQtPm93bmVyTm9kZSgpOwot
ICAgIGlmIChvd25lck5vZGUgJiYgb3duZXJOb2RlLT5ub2RlVHlwZSgpID09IE5vZGU6OkVMRU1F
TlRfTk9ERSkgewotICAgICAgICBFbGVtZW50KiBvd25lckVsZW1lbnQgPSBzdGF0aWNfY2FzdDxF
bGVtZW50Kj4ob3duZXJOb2RlKTsKLSAgICAgICAgaWYgKG93bmVyRWxlbWVudC0+dGFnTmFtZSgp
Lmxvd2VyKCkgPT0gInN0eWxlIikgewotICAgICAgICAgICAgcmVzdWx0ID0gaW5saW5lU3R5bGVT
aGVldFRleHQoc3R5bGVTaGVldCk7Ci0gICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKLSAgICAg
ICAgfQotICAgIH0KLSAgICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAgIHN1Y2Nlc3MgPSByZXNvdXJj
ZVN0eWxlU2hlZXRUZXh0KHN0eWxlU2hlZXQsICZyZXN1bHQpOwotCi0gICAgaWYgKHN1Y2Nlc3Mp
Ci0gICAgICAgIG1faWRUb1N0eWxlU2hlZXRUZXh0LnNldChzdHlsZVNoZWV0SWQsIHJlc3VsdCk7
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBJbnNwZWN0b3JDU1NTdG9yZTo6cmVzb3Vy
Y2VTdHlsZVNoZWV0VGV4dChDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0LCBTdHJpbmcqIHJlc3Vs
dCkKLXsKLSAgICByZXR1cm4gSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6cmVzb3VyY2VDb250ZW50
KHN0eWxlU2hlZXQtPmRvY3VtZW50KCktPmZyYW1lKCksIHN0eWxlU2hlZXQtPmZpbmFsVVJMKCks
IHJlc3VsdCk7Ci19Ci0KLVN0cmluZyBJbnNwZWN0b3JDU1NTdG9yZTo6aW5saW5lU3R5bGVTaGVl
dFRleHQoQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCkKLXsKLSAgICBOb2RlKiBvd25lck5vZGUg
PSBzdHlsZVNoZWV0LT5vd25lck5vZGUoKTsKLSAgICBpZiAoIW93bmVyTm9kZSB8fCBvd25lck5v
ZGUtPm5vZGVUeXBlKCkgIT0gTm9kZTo6RUxFTUVOVF9OT0RFIHx8IG1fc3R5bGVTaGVldFRvSWQu
ZmluZChzdHlsZVNoZWV0KSA9PSBtX3N0eWxlU2hlZXRUb0lkLmVuZCgpKQotICAgICAgICByZXR1
cm4gU3RyaW5nKCk7Ci0gICAgRWxlbWVudCogb3duZXJFbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxl
bWVudCo+KG93bmVyTm9kZSk7Ci0gICAgaWYgKG93bmVyRWxlbWVudC0+dGFnTmFtZSgpLmxvd2Vy
KCkgIT0gInN0eWxlIikKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIHJldHVybiBvd25l
ckVsZW1lbnQtPmlubmVyVGV4dCgpOwotfQotCi0KLS8vIEFsbCByYW5nZXMgYXJlOiBbc3RhcnQ7
IGVuZCkgKHN0YXJ0IC0gaW5jbHVzaXZlLCBlbmQgLSBleGNsdXNpdmUpLgotYm9vbCBJbnNwZWN0
b3JDU1NTdG9yZTo6Z2V0UnVsZVNvdXJjZURhdGEoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUs
IFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4qIHJlc3VsdCkKLXsKLSAgICBpZiAoIXN0eWxlKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBFbGVtZW50KiBlbGVtZW50ID0gaW5saW5lU3R5
bGVFbGVtZW50KHN0eWxlKTsKLSAgICBpZiAoZWxlbWVudCkgewotICAgICAgICAvLyBJbmxpbmU6
IHN0eWxlPSIuLi4iLgotICAgICAgICBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IHJ1bGVTb3Vy
Y2VEYXRhID0gQ1NTUnVsZVNvdXJjZURhdGE6OmNyZWF0ZSgpOwotICAgICAgICBSZWZQdHI8Q1NT
U3R5bGVTb3VyY2VEYXRhPiBzdHlsZVNvdXJjZURhdGEgPSBDU1NTdHlsZVNvdXJjZURhdGE6OmNy
ZWF0ZSgpOwotICAgICAgICBib29sIHN1Y2Nlc3MgPSBnZXRTdHlsZUF0dHJpYnV0ZVJhbmdlcyhl
bGVtZW50LCAmc3R5bGVTb3VyY2VEYXRhKTsKLSAgICAgICAgaWYgKCFzdWNjZXNzKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBydWxlU291cmNlRGF0YS0+c3R5bGVTb3VyY2VE
YXRhID0gc3R5bGVTb3VyY2VEYXRhLnJlbGVhc2UoKTsKLSAgICAgICAgKnJlc3VsdCA9IHJ1bGVT
b3VyY2VEYXRhOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBDU1NTdHlsZVNo
ZWV0KiBzdHlsZVNoZWV0ID0gZ2V0UGFyZW50U3R5bGVTaGVldChzdHlsZSk7Ci0gICAgaWYgKCFz
dHlsZVNoZWV0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBWZWN0b3I8UmVmUHRyPENT
U1J1bGVTb3VyY2VEYXRhPiA+KiByYW5nZXNWZWN0b3IgPSAwOwotICAgIFN0eWxlU2hlZXRUb09m
ZnNldHNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zdHlsZVNoZWV0VG9PZmZzZXRzLmZpbmQoc3R5bGVT
aGVldCk7Ci0gICAgaWYgKGl0ID09IG1fc3R5bGVTaGVldFRvT2Zmc2V0cy5lbmQoKSkgewotICAg
ICAgICBTdHJpbmcgdGV4dCA9IHN0eWxlU2hlZXRUZXh0KGJpbmRTdHlsZVNoZWV0KHN0eWxlU2hl
ZXQpKTsKLSAgICAgICAgaWYgKCF0ZXh0LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgUmVmUHRy
PENTU1N0eWxlU2hlZXQ+IG5ld1N0eWxlU2hlZXQgPSBDU1NTdHlsZVNoZWV0OjpjcmVhdGUoc3R5
bGVTaGVldC0+b3duZXJOb2RlKCkpOwotICAgICAgICAgICAgQ1NTUGFyc2VyIHA7Ci0gICAgICAg
ICAgICBTdHlsZVJ1bGVSYW5nZU1hcCBydWxlUmFuZ2VNYXA7Ci0gICAgICAgICAgICBwLnBhcnNl
U2hlZXQobmV3U3R5bGVTaGVldC5nZXQoKSwgdGV4dCwgMCwgJnJ1bGVSYW5nZU1hcCk7Ci0gICAg
ICAgICAgICByYW5nZXNWZWN0b3IgPSBuZXcgVmVjdG9yPFJlZlB0cjxDU1NSdWxlU291cmNlRGF0
YT4gPjsKLSAgICAgICAgICAgIGV4dHJhY3RSYW5nZXMobmV3U3R5bGVTaGVldC5nZXQoKSwgcnVs
ZVJhbmdlTWFwLCByYW5nZXNWZWN0b3IpOwotICAgICAgICAgICAgbV9zdHlsZVNoZWV0VG9PZmZz
ZXRzLnNldChzdHlsZVNoZWV0LCByYW5nZXNWZWN0b3IpOwotICAgICAgICB9Ci0gICAgfSBlbHNl
Ci0gICAgICAgIHJhbmdlc1ZlY3RvciA9IGl0LT5zZWNvbmQ7Ci0gICAgaWYgKCFyYW5nZXNWZWN0
b3IpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHVuc2lnbmVkIHJ1bGVJbmRleCA9IDA7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMCwgbGVuZ3RoID0gc3R5bGVTaGVldC0+bGVuZ3RoKCk7
IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBDU1NTdHlsZVJ1bGUqIHJ1bGUgPSBhc0NTU1N0
eWxlUnVsZShzdHlsZVNoZWV0LT5pdGVtKGkpKTsKLSAgICAgICAgaWYgKCFydWxlKQotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChydWxlLT5zdHlsZSgpID09IHN0eWxlKSB7Ci0g
ICAgICAgICAgICBBU1NFUlQocnVsZUluZGV4IDwgcmFuZ2VzVmVjdG9yLT5zaXplKCkpOwotICAg
ICAgICAgICAgKnJlc3VsdCA9IHJhbmdlc1ZlY3Rvci0+YXQocnVsZUluZGV4KTsKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJ1bGVJbmRleCsrOwotICAgIH0K
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ1NTU3RvcmU6OmV4dHJhY3RS
YW5nZXMoQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCwgY29uc3QgU3R5bGVSdWxlUmFuZ2VNYXAm
IHJ1bGVSYW5nZU1hcCwgVmVjdG9yPFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gPiogcmFuZ2Vz
VmVjdG9yKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDAsIGxlbmd0aCA9IHN0eWxlU2hlZXQt
Pmxlbmd0aCgpOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgQ1NTU3R5bGVSdWxlKiBydWxl
ID0gYXNDU1NTdHlsZVJ1bGUoc3R5bGVTaGVldC0+aXRlbShpKSk7Ci0gICAgICAgIGlmICghcnVs
ZSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBTdHlsZVJ1bGVSYW5nZU1hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBydWxlUmFuZ2VNYXAuZmluZChydWxlKTsKLSAgICAgICAgaWYgKGl0
ICE9IHJ1bGVSYW5nZU1hcC5lbmQoKSkKLSAgICAgICAgICAgIHJhbmdlc1ZlY3Rvci0+YXBwZW5k
KGl0LT5zZWNvbmQpOwotICAgIH0KLX0KLQotYm9vbCBJbnNwZWN0b3JDU1NTdG9yZTo6Z2V0U3R5
bGVBdHRyaWJ1dGVSYW5nZXMoTm9kZSogbm9kZSwgUmVmUHRyPENTU1N0eWxlU291cmNlRGF0YT4q
IHJlc3VsdCkKLXsKLSAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzU3R5bGVkRWxlbWVudCgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBTdHJpbmcgc3R5bGVUZXh0ID0gc3RhdGljX2Nh
c3Q8U3R5bGVkRWxlbWVudCo+KG5vZGUpLT5nZXRBdHRyaWJ1dGUoInN0eWxlIik7Ci0gICAgaWYg
KHN0eWxlVGV4dC5pc0VtcHR5KCkpIHsKLSAgICAgICAgKCpyZXN1bHQpLT5zdHlsZUJvZHlSYW5n
ZS5zdGFydCA9IDA7Ci0gICAgICAgICgqcmVzdWx0KS0+c3R5bGVCb2R5UmFuZ2UuZW5kID0gMDsK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgUmVmUHRyPENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uPiB0ZW1wRGVjbGFyYXRpb24gPSBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bjo6Y3JlYXRlKCk7Ci0gICAgQ1NTUGFyc2VyIHA7Ci0gICAgcC5wYXJzZURlY2xhcmF0aW9uKHRl
bXBEZWNsYXJhdGlvbi5nZXQoKSwgc3R5bGVUZXh0LCByZXN1bHQpOwotICAgIHJldHVybiB0cnVl
OwotfQotCi1DU1NTdHlsZVNoZWV0KiBJbnNwZWN0b3JDU1NTdG9yZTo6Z2V0UGFyZW50U3R5bGVT
aGVldChDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkKLXsKLSAgICBpZiAoIXN0eWxlKQotICAg
ICAgICByZXR1cm4gMDsKLQotICAgIFN0eWxlU2hlZXQqIHN0eWxlU2hlZXQgPSBzdHlsZS0+c3R5
bGVzaGVldCgpOwotICAgIGlmIChzdHlsZVNoZWV0ICYmIHN0eWxlU2hlZXQtPmlzQ1NTU3R5bGVT
aGVldCgpKQotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KHN0eWxl
U2hlZXQpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLUNTU1N0eWxlUnVsZSogSW5zcGVjdG9yQ1NT
U3RvcmU6OmFzQ1NTU3R5bGVSdWxlKFN0eWxlQmFzZSogc3R5bGVCYXNlKQotewotICAgIGlmICgh
c3R5bGVCYXNlLT5pc1N0eWxlUnVsZSgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBDU1NSdWxl
KiBydWxlID0gc3RhdGljX2Nhc3Q8Q1NTUnVsZSo+KHN0eWxlQmFzZSk7Ci0gICAgaWYgKHJ1bGUt
PnR5cGUoKSAhPSBDU1NSdWxlOjpTVFlMRV9SVUxFKQotICAgICAgICByZXR1cm4gMDsKLSAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVSdWxlKj4ocnVsZSk7Ci19Ci0KLURpc2FibGVkU3R5
bGVEZWNsYXJhdGlvbiogSW5zcGVjdG9yQ1NTU3RvcmU6OmRpc2FibGVkU3R5bGVGb3JJZChsb25n
IHN0eWxlSWQsIGJvb2wgY3JlYXRlSWZBYnNlbnQpCi17Ci0gICAgSWRUb0Rpc2FibGVkU3R5bGVN
YXA6Oml0ZXJhdG9yIGl0ID0gbV9pZFRvRGlzYWJsZWRTdHlsZS5maW5kKHN0eWxlSWQpOwotICAg
IGlmIChpdCA9PSBtX2lkVG9EaXNhYmxlZFN0eWxlLmVuZCgpICYmIGNyZWF0ZUlmQWJzZW50KQot
ICAgICAgICBpdCA9IG1faWRUb0Rpc2FibGVkU3R5bGUuc2V0KHN0eWxlSWQsIERpc2FibGVkU3R5
bGVEZWNsYXJhdGlvbigpKS5maXJzdDsKLSAgICByZXR1cm4gaXQgPT0gbV9pZFRvRGlzYWJsZWRT
dHlsZS5lbmQoKSA/IDAgOiAmKGl0LT5zZWNvbmQpOwotfQotCi1DU1NTdHlsZURlY2xhcmF0aW9u
KiBJbnNwZWN0b3JDU1NTdG9yZTo6c3R5bGVGb3JJZChsb25nIHN0eWxlSWQpCi17Ci0gICAgSWRU
b1N0eWxlTWFwOjppdGVyYXRvciBpdCA9IG1faWRUb1N0eWxlLmZpbmQoc3R5bGVJZCk7Ci0gICAg
cmV0dXJuIGl0ID09IG1faWRUb1N0eWxlLmVuZCgpID8gMCA6IGl0LT5zZWNvbmQuZ2V0KCk7Ci19
Ci0KLUNTU1N0eWxlU2hlZXQqIEluc3BlY3RvckNTU1N0b3JlOjpzdHlsZVNoZWV0Rm9ySWQobG9u
ZyBzdHlsZVNoZWV0SWQpCi17Ci0gICAgSWRUb1N0eWxlU2hlZXRNYXA6Oml0ZXJhdG9yIGl0ID0g
bV9pZFRvU3R5bGVTaGVldC5maW5kKHN0eWxlU2hlZXRJZCk7Ci0gICAgcmV0dXJuIGl0ID09IG1f
aWRUb1N0eWxlU2hlZXQuZW5kKCkgPyAwIDogaXQtPnNlY29uZC5nZXQoKTsKLX0KLQotQ1NTU3R5
bGVSdWxlKiBJbnNwZWN0b3JDU1NTdG9yZTo6cnVsZUZvcklkKGxvbmcgcnVsZUlkKQotewotICAg
IElkVG9SdWxlTWFwOjppdGVyYXRvciBpdCA9IG1faWRUb1J1bGUuZmluZChydWxlSWQpOwotICAg
IHJldHVybiBpdCA9PSBtX2lkVG9SdWxlLmVuZCgpID8gMCA6IGl0LT5zZWNvbmQuZ2V0KCk7Ci19
Ci0KLWxvbmcgSW5zcGVjdG9yQ1NTU3RvcmU6OmJpbmRTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9u
KiBzdHlsZSkKLXsKLSAgICBsb25nIGlkID0gbV9zdHlsZVRvSWQuZ2V0KHN0eWxlKTsKLSAgICBp
ZiAoIWlkKSB7Ci0gICAgICAgIGlkID0gbV9sYXN0U3R5bGVJZCsrOwotICAgICAgICBtX2lkVG9T
dHlsZS5zZXQoaWQsIHN0eWxlKTsKLSAgICAgICAgbV9zdHlsZVRvSWQuc2V0KHN0eWxlLCBpZCk7
Ci0gICAgfQotICAgIHJldHVybiBpZDsKLX0KLQotbG9uZyBJbnNwZWN0b3JDU1NTdG9yZTo6Ymlu
ZFN0eWxlU2hlZXQoQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCkKLXsKLSAgICBsb25nIGlkID0g
bV9zdHlsZVNoZWV0VG9JZC5nZXQoc3R5bGVTaGVldCk7Ci0gICAgaWYgKCFpZCkgewotICAgICAg
ICBpZCA9IG1fbGFzdFN0eWxlU2hlZXRJZCsrOwotICAgICAgICBtX2lkVG9TdHlsZVNoZWV0LnNl
dChpZCwgc3R5bGVTaGVldCk7Ci0gICAgICAgIG1fc3R5bGVTaGVldFRvSWQuc2V0KHN0eWxlU2hl
ZXQsIGlkKTsKLSAgICB9Ci0gICAgcmV0dXJuIGlkOwotfQotCi1sb25nIEluc3BlY3RvckNTU1N0
b3JlOjpiaW5kUnVsZShDU1NTdHlsZVJ1bGUqIHJ1bGUpCi17Ci0gICAgbG9uZyBpZCA9IG1fcnVs
ZVRvSWQuZ2V0KHJ1bGUpOwotICAgIGlmICghaWQpIHsKLSAgICAgICAgaWQgPSBtX2xhc3RSdWxl
SWQrKzsKLSAgICAgICAgbV9pZFRvUnVsZS5zZXQoaWQsIHJ1bGUpOwotICAgICAgICBtX3J1bGVU
b0lkLnNldChydWxlLCBpZCk7Ci0gICAgfQotICAgIHJldHVybiBpZDsKLX0KLQotLy8gc3RhdGlj
Ci1FbGVtZW50KiBJbnNwZWN0b3JDU1NTdG9yZTo6aW5saW5lU3R5bGVFbGVtZW50KENTU1N0eWxl
RGVjbGFyYXRpb24qIHN0eWxlKQotewotICAgIGlmICghc3R5bGUgfHwgIXN0eWxlLT5pc011dGFi
bGVTdHlsZURlY2xhcmF0aW9uKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIE5vZGUqIG5vZGUg
PSBzdGF0aWNfY2FzdDxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbio+KHN0eWxlKS0+bm9kZSgp
OwotICAgIGlmICghbm9kZSB8fCAhbm9kZS0+aXNTdHlsZWRFbGVtZW50KCkgfHwgc3RhdGljX2Nh
c3Q8U3R5bGVkRWxlbWVudCo+KG5vZGUpLT5nZXRJbmxpbmVTdHlsZURlY2woKSAhPSBzdHlsZSkK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2Rl
KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BF
Q1RPUikKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU1N0b3JlLmgg
Yi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NTdG9yZS5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwNDE0YjU4Li4wMDAwMDAwCi0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNTU1N0b3JlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTMgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAg
ICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwot
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5k
ZWYgSW5zcGVjdG9yQ1NTU3RvcmVfaAotI2RlZmluZSBJbnNwZWN0b3JDU1NTdG9yZV9oCi0KLSNp
bmNsdWRlICJDU1NQcm9wZXJ0eVNvdXJjZURhdGEuaCIKLSNpbmNsdWRlICJNZW1vcnlDYWNoZS5o
IgotCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgot
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjsKLWNsYXNzIENTU1N0eWxlRGVjbGFyYXRpb247Ci1j
bGFzcyBDU1NSdWxlTGlzdDsKLWNsYXNzIENTU1N0eWxlUnVsZTsKLWNsYXNzIENTU1N0eWxlU2hl
ZXQ7Ci1jbGFzcyBEb2N1bWVudDsKLWNsYXNzIEVsZW1lbnQ7Ci1jbGFzcyBJbnNwZWN0b3JDb250
cm9sbGVyOwotY2xhc3MgTm9kZTsKLWNsYXNzIFN0eWxlQmFzZTsKLQotdHlwZWRlZiBzdGQ6OnBh
aXI8U3RyaW5nLCBTdHJpbmc+IFByb3BlcnR5VmFsdWVBbmRQcmlvcml0eTsKLXR5cGVkZWYgSGFz
aE1hcDxTdHJpbmcsIFByb3BlcnR5VmFsdWVBbmRQcmlvcml0eT4gRGlzYWJsZWRTdHlsZURlY2xh
cmF0aW9uOwotdHlwZWRlZiBIYXNoTWFwPENTU1N0eWxlRGVjbGFyYXRpb24qLCBsb25nPiBTdHls
ZVRvSWRNYXA7Ci10eXBlZGVmIEhhc2hNYXA8bG9uZywgUmVmUHRyPENTU1N0eWxlRGVjbGFyYXRp
b24+ID4gSWRUb1N0eWxlTWFwOwotdHlwZWRlZiBIYXNoTWFwPENTU1N0eWxlUnVsZSosIGxvbmc+
IFJ1bGVUb0lkTWFwOwotdHlwZWRlZiBIYXNoTWFwPGxvbmcsIFJlZlB0cjxDU1NTdHlsZVJ1bGU+
ID4gSWRUb1J1bGVNYXA7Ci10eXBlZGVmIEhhc2hNYXA8Q1NTU3R5bGVTaGVldCosIFZlY3RvcjxS
ZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+ID4qID4gU3R5bGVTaGVldFRvT2Zmc2V0c01hcDsKLXR5
cGVkZWYgSGFzaE1hcDxDU1NTdHlsZVNoZWV0KiwgbG9uZz4gU3R5bGVTaGVldFRvSWRNYXA7Ci10
eXBlZGVmIEhhc2hNYXA8bG9uZywgUmVmUHRyPENTU1N0eWxlU2hlZXQ+ID4gSWRUb1N0eWxlU2hl
ZXRNYXA7Ci10eXBlZGVmIEhhc2hNYXA8bG9uZywgU3RyaW5nPiBJZFRvU3R5bGVTaGVldFRleHRN
YXA7Ci10eXBlZGVmIEhhc2hNYXA8bG9uZywgRGlzYWJsZWRTdHlsZURlY2xhcmF0aW9uPiBJZFRv
RGlzYWJsZWRTdHlsZU1hcDsKLXR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8RG9jdW1lbnQ+LCBSZWZQ
dHI8Q1NTU3R5bGVTaGVldD4gPiBEb2N1bWVudFRvU3R5bGVTaGVldE1hcDsKLQotY2xhc3MgSW5z
cGVjdG9yQ1NTU3RvcmUgewotCi1wdWJsaWM6Ci0gICAgc3RhdGljIENTU1N0eWxlU2hlZXQqIGdl
dFBhcmVudFN0eWxlU2hlZXQoQ1NTU3R5bGVEZWNsYXJhdGlvbiopOwotICAgIHN0YXRpYyBFbGVt
ZW50KiBpbmxpbmVTdHlsZUVsZW1lbnQoQ1NTU3R5bGVEZWNsYXJhdGlvbiopOwotCi0gICAgSW5z
cGVjdG9yQ1NTU3RvcmUoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlcik7
Ci0gICAgfkluc3BlY3RvckNTU1N0b3JlKCk7Ci0gICAgdm9pZCByZXNldCgpOwotICAgIGJvb2wg
Z2V0UnVsZVNvdXJjZURhdGEoQ1NTU3R5bGVEZWNsYXJhdGlvbiosIFJlZlB0cjxDU1NSdWxlU291
cmNlRGF0YT4qIHJlc3VsdCk7Ci0gICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGVGb3JJZChs
b25nIHN0eWxlSWQpOwotICAgIENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXRGb3JJZChsb25nIHN0
eWxlU2hlZXRJZCk7Ci0gICAgQ1NTU3R5bGVSdWxlKiBydWxlRm9ySWQobG9uZyBzdHlsZVJ1bGVJ
ZCk7Ci0gICAgRGlzYWJsZWRTdHlsZURlY2xhcmF0aW9uKiBkaXNhYmxlZFN0eWxlRm9ySWQobG9u
ZyBzdHlsZUlkLCBib29sIGNyZWF0ZUlmQWJzZW50KTsKLSAgICBTdHJpbmcgc3R5bGVTaGVldFRl
eHQobG9uZyBzdHlsZVNoZWV0SWQpOwotICAgIENTU1N0eWxlU2hlZXQqIGluc3BlY3RvclN0eWxl
U2hlZXQoRG9jdW1lbnQqIG93bmVyRG9jdW1lbnQsIGJvb2wgY3JlYXRlSWZBYnNlbnQpOwotICAg
IHZvaWQgcmVtb3ZlRG9jdW1lbnQoRG9jdW1lbnQqKTsKLQotICAgIGxvbmcgYmluZFJ1bGUoQ1NT
U3R5bGVSdWxlKiBydWxlKTsKLSAgICBsb25nIGJpbmRTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9u
KiBzdHlsZSk7Ci0gICAgbG9uZyBiaW5kU3R5bGVTaGVldChDU1NTdHlsZVNoZWV0KiBzdHlsZVNo
ZWV0KTsKLQotcHJpdmF0ZToKLSAgICBzdGF0aWMgQ1NTU3R5bGVSdWxlKiBhc0NTU1N0eWxlUnVs
ZShTdHlsZUJhc2UqKTsKLSAgICBTdHJpbmcgaW5saW5lU3R5bGVTaGVldFRleHQoQ1NTU3R5bGVT
aGVldCopOwotICAgIGJvb2wgcmVzb3VyY2VTdHlsZVNoZWV0VGV4dChDU1NTdHlsZVNoZWV0Kiwg
U3RyaW5nKiByZXN1bHQpOwotICAgIHZvaWQgZXh0cmFjdFJhbmdlcyhDU1NTdHlsZVNoZWV0Kiwg
Y29uc3QgU3R5bGVSdWxlUmFuZ2VNYXAmLCBWZWN0b3I8UmVmUHRyPENTU1J1bGVTb3VyY2VEYXRh
PiA+KiByYW5nZXNWZWN0b3IpOwotICAgIGJvb2wgZ2V0U3R5bGVBdHRyaWJ1dGVSYW5nZXMoTm9k
ZSogcGFyZW50Tm9kZSwgUmVmUHRyPENTU1N0eWxlU291cmNlRGF0YT4qIHJlc3VsdCk7Ci0KLSAg
ICBTdHlsZVRvSWRNYXAgbV9zdHlsZVRvSWQ7Ci0gICAgSWRUb1N0eWxlTWFwIG1faWRUb1N0eWxl
OwotICAgIFJ1bGVUb0lkTWFwIG1fcnVsZVRvSWQ7Ci0gICAgSWRUb1J1bGVNYXAgbV9pZFRvUnVs
ZTsKLSAgICBTdHlsZVNoZWV0VG9PZmZzZXRzTWFwIG1fc3R5bGVTaGVldFRvT2Zmc2V0czsKLSAg
ICBTdHlsZVNoZWV0VG9JZE1hcCBtX3N0eWxlU2hlZXRUb0lkOwotICAgIElkVG9EaXNhYmxlZFN0
eWxlTWFwIG1faWRUb0Rpc2FibGVkU3R5bGU7Ci0gICAgSWRUb1N0eWxlU2hlZXRNYXAgbV9pZFRv
U3R5bGVTaGVldDsKLSAgICBJZFRvU3R5bGVTaGVldFRleHRNYXAgbV9pZFRvU3R5bGVTaGVldFRl
eHQ7Ci0gICAgRG9jdW1lbnRUb1N0eWxlU2hlZXRNYXAgbV9kb2N1bWVudE5vZGVUb0luc3BlY3Rv
clN0eWxlU2hlZXRNYXA7Ci0KLSAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBtX2luc3BlY3RvckNv
bnRyb2xsZXI7Ci0gICAgbG9uZyBtX2xhc3RTdHlsZUlkOwotICAgIGxvbmcgbV9sYXN0U3R5bGVT
aGVldElkOwotICAgIGxvbmcgbV9sYXN0UnVsZUlkOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yQ1NTU3RvcmVfaCkKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXggZWQzMTlmMy4uOWI0NWJiZSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKKysr
IGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKQEAgLTU5LDcgKzU5
LDYgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JCYWNrZW5kLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXIuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDU1NBZ2VudC5oIgotI2lu
Y2x1ZGUgIkluc3BlY3RvckNTU1N0b3JlLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50Lmgi
CiAjaW5jbHVkZSAiSW5zcGVjdG9yRE9NQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JET01T
dG9yYWdlUmVzb3VyY2UuaCIKQEAgLTE0NCw3ICsxNDMsNiBAQCBJbnNwZWN0b3JDb250cm9sbGVy
OjpJbnNwZWN0b3JDb250cm9sbGVyKFBhZ2UqIHBhZ2UsIEluc3BlY3RvckNsaWVudCogY2xpZW50
KQogICAgICwgbV9jbGllbnQoY2xpZW50KQogICAgICwgbV9vcGVuaW5nRnJvbnRlbmQoZmFsc2Up
CiAgICAgLCBtX2Nzc0FnZW50KG5ldyBJbnNwZWN0b3JDU1NBZ2VudCgpKQotICAgICwgbV9jc3NT
dG9yZShuZXcgSW5zcGVjdG9yQ1NTU3RvcmUodGhpcykpCiAgICAgLCBtX21haW5SZXNvdXJjZUlk
ZW50aWZpZXIoMCkKICAgICAsIG1fZXhwaXJlZENvbnNvbGVNZXNzYWdlQ291bnQoMCkKICAgICAs
IG1fZ3JvdXBMZXZlbCgwKQpAQCAtNDg0LDcgKzQ4Miw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6Y29ubmVjdEZyb250ZW5kKCkKICAgICBtX29wZW5pbmdGcm9udGVuZCA9IGZhbHNlOwog
ICAgIHJlbGVhc2VGcm9udGVuZExpZmV0aW1lQWdlbnRzKCk7CiAgICAgbV9mcm9udGVuZCA9IG5l
dyBJbnNwZWN0b3JGcm9udGVuZChtX2NsaWVudCk7Ci0gICAgbV9kb21BZ2VudCA9IEluc3BlY3Rv
ckRPTUFnZW50OjpjcmVhdGUobV9jc3NTdG9yZS5nZXQoKSwgbV9mcm9udGVuZC5nZXQoKSk7Cisg
ICAgbV9kb21BZ2VudCA9IEluc3BlY3RvckRPTUFnZW50OjpjcmVhdGUobV9mcm9udGVuZC5nZXQo
KSk7CiAgICAgbV9yZXNvdXJjZUFnZW50ID0gSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6Y3JlYXRl
KG1faW5zcGVjdGVkUGFnZSwgbV9mcm9udGVuZC5nZXQoKSk7CiAKICAgICBtX2Nzc0FnZW50LT5z
ZXRET01BZ2VudChtX2RvbUFnZW50LmdldCgpKTsKQEAgLTc0Nyw3ICs3NDUsNiBAQCB2b2lkIElu
c3BlY3RvckNvbnRyb2xsZXI6OmRpZENvbW1pdExvYWQoRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikK
ICAgICAgICAgLy8gcmVzb3VyY2VzIGFyZSBjbGVhcmVkIHNvIHRoYXQgaXQgaGFzIGEgY2hhbmNl
IHRvIHVuYmluZCB0aGVtLgogICAgICAgICB1bmJpbmRBbGxSZXNvdXJjZXMoKTsKIAotICAgICAg
ICBtX2Nzc1N0b3JlLT5yZXNldCgpOwogICAgICAgICBpZiAobV9mcm9udGVuZCkgewogICAgICAg
ICAgICAgbV9mcm9udGVuZC0+cmVzZXQoKTsKICAgICAgICAgICAgIG1fZG9tQWdlbnQtPnJlc2V0
KCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgg
Yi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKaW5kZXggNWI0MDdlMC4u
ZTU3YzA4OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxl
ci5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaApAQCAtNTks
NyArNTksNiBAQCBjbGFzcyBJbnNwZWN0b3JCYWNrZW5kOwogY2xhc3MgSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI7CiBjbGFzcyBJbnNwZWN0b3JDbGllbnQ7CiBjbGFzcyBJbnNwZWN0b3JDU1NB
Z2VudDsKLWNsYXNzIEluc3BlY3RvckNTU1N0b3JlOwogY2xhc3MgSW5zcGVjdG9yRE9NQWdlbnQ7
CiBjbGFzcyBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2U7CiBjbGFzcyBJbnNwZWN0b3JEYXRh
YmFzZVJlc291cmNlOwpAQCAtMzQ1LDcgKzM0NCw2IEBAIHByaXZhdGU6CiAgICAgT3duUHRyPElu
c3BlY3RvckNTU0FnZW50PiBtX2Nzc0FnZW50OwogICAgIFJlZlB0cjxJbnNwZWN0b3JET01BZ2Vu
dD4gbV9kb21BZ2VudDsKICAgICBSZWZQdHI8SW5zcGVjdG9yU3RvcmFnZUFnZW50PiBtX3N0b3Jh
Z2VBZ2VudDsKLSAgICBPd25QdHI8SW5zcGVjdG9yQ1NTU3RvcmU+IG1fY3NzU3RvcmU7CiAgICAg
T3duUHRyPEluc3BlY3RvclRpbWVsaW5lQWdlbnQ+IG1fdGltZWxpbmVBZ2VudDsKICAgICBPd25Q
dHI8SW5zcGVjdG9yU3RhdGU+IG1fc3RhdGU7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckRPTUFnZW50LmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRP
TUFnZW50LmNwcAppbmRleCA4OTRlNGIyLi4yOTcxNWI0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRE9NQWdlbnQuY3BwCkBAIC0yMTYsOSArMjE2LDggQEAgY29uc3QgaW50IGRvbUJyZWFr
cG9pbnREZXJpdmVkVHlwZVNoaWZ0ID0gMTY7CiAKIH0KIAotSW5zcGVjdG9yRE9NQWdlbnQ6Oklu
c3BlY3RvckRPTUFnZW50KEluc3BlY3RvckNTU1N0b3JlKiBjc3NTdG9yZSwgSW5zcGVjdG9yRnJv
bnRlbmQqIGZyb250ZW5kKQorSW5zcGVjdG9yRE9NQWdlbnQ6Okluc3BlY3RvckRPTUFnZW50KElu
c3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCkKICAgICA6IEV2ZW50TGlzdGVuZXIoSW5zcGVjdG9y
RE9NQWdlbnRUeXBlKQotICAgICwgbV9jc3NTdG9yZShjc3NTdG9yZSkKICAgICAsIG1fZnJvbnRl
bmQoZnJvbnRlbmQpCiAgICAgLCBtX2RvbUxpc3RlbmVyKDApCiAgICAgLCBtX2xhc3ROb2RlSWQo
MSkKQEAgLTMzOSw3ICszMzgsNiBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50Ojp1bmJpbmQoTm9k
ZSogbm9kZSwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKQogICAgICAgICBzdG9wTGlzdGVuaW5nKGZy
YW1lT3duZXItPmNvbnRlbnREb2N1bWVudCgpKTsKICAgICAgICAgaWYgKG1fZG9tTGlzdGVuZXIp
CiAgICAgICAgICAgICBtX2RvbUxpc3RlbmVyLT5kaWRSZW1vdmVEb2N1bWVudChmcmFtZU93bmVy
LT5jb250ZW50RG9jdW1lbnQoKSk7Ci0gICAgICAgIGNzc1N0b3JlKCktPnJlbW92ZURvY3VtZW50
KGZyYW1lT3duZXItPmNvbnRlbnREb2N1bWVudCgpKTsKICAgICB9CiAKICAgICBsb25nIGlkID0g
bm9kZXNNYXAtPmdldChub2RlKTsKQEAgLTEyMDEsNTMyICsxMTk5LDYgQEAgU3RyaW5nIEluc3Bl
Y3RvckRPTUFnZW50OjpjcmVhdGVCcmVha3BvaW50SWQobG9uZyBub2RlSWQsIGxvbmcgdHlwZSkK
ICAgICByZXR1cm4gbWFrZVN0cmluZygiZG9tOiIsIFN0cmluZzo6bnVtYmVyKG5vZGVJZCksICc6
JywgU3RyaW5nOjpudW1iZXIodHlwZSkpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50Ojpn
ZXRTdHlsZXMobG9uZyBub2RlSWQsIGJvb2wgYXV0aG9yT25seSwgUmVmUHRyPEluc3BlY3RvclZh
bHVlPiogc3R5bGVzKQotewotICAgIE5vZGUqIG5vZGUgPSBub2RlRm9ySWQobm9kZUlkKTsKLSAg
ICBpZiAoIW5vZGUgfHwgbm9kZS0+bm9kZVR5cGUoKSAhPSBOb2RlOjpFTEVNRU5UX05PREUpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIERPTVdpbmRvdyogZGVmYXVsdFZpZXcgPSBub2RlLT5vd25l
ckRvY3VtZW50KCktPmRlZmF1bHRWaWV3KCk7Ci0gICAgaWYgKCFkZWZhdWx0VmlldykKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQq
Pihub2RlKTsKLSAgICBSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uPiBjb21wdXRl
ZFN0eWxlSW5mbyA9IGNvbXB1dGVkU3R5bGUobm9kZSwgdHJ1ZSk7IC8vIFN1cHBvcnQgdGhlIHZp
ZXdpbmcgb2YgOnZpc2l0ZWQgaW5mb3JtYXRpb24gaW4gY29tcHV0ZWQgc3R5bGUuCi0KLSAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwotICAgIGlmIChlbGVtZW50LT5zdHlsZSgpKQotICAgICAgICByZXN1bHQtPnNldE9iamVjdCgi
aW5saW5lU3R5bGUiLCBidWlsZE9iamVjdEZvclN0eWxlKGVsZW1lbnQtPnN0eWxlKCksIHRydWUp
KTsKLSAgICByZXN1bHQtPnNldE9iamVjdCgiY29tcHV0ZWRTdHlsZSIsIGJ1aWxkT2JqZWN0Rm9y
U3R5bGUoY29tcHV0ZWRTdHlsZUluZm8uZ2V0KCksIGZhbHNlKSk7Ci0KLSAgICBDU1NTdHlsZVNl
bGVjdG9yKiBzZWxlY3RvciA9IGVsZW1lbnQtPm93bmVyRG9jdW1lbnQoKS0+c3R5bGVTZWxlY3Rv
cigpOwotICAgIFJlZlB0cjxDU1NSdWxlTGlzdD4gbWF0Y2hlZFJ1bGVzID0gc2VsZWN0b3ItPnN0
eWxlUnVsZXNGb3JFbGVtZW50KGVsZW1lbnQsIGF1dGhvck9ubHksIHRydWUpOwotICAgIHJlc3Vs
dC0+c2V0QXJyYXkoIm1hdGNoZWRDU1NSdWxlcyIsIGJ1aWxkQXJyYXlGb3JDU1NSdWxlcyhub2Rl
LT5vd25lckRvY3VtZW50KCksIG1hdGNoZWRSdWxlcy5nZXQoKSkpOwotCi0gICAgcmVzdWx0LT5z
ZXRPYmplY3QoInN0eWxlQXR0cmlidXRlcyIsIGJ1aWxkT2JqZWN0Rm9yQXR0cmlidXRlU3R5bGVz
KGVsZW1lbnQpKTsKLSAgICByZXN1bHQtPnNldEFycmF5KCJwc2V1ZG9FbGVtZW50cyIsIGJ1aWxk
QXJyYXlGb3JQc2V1ZG9FbGVtZW50cyhlbGVtZW50LCBhdXRob3JPbmx5KSk7Ci0KLSAgICBSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IGluaGVyaXRlZFN0eWxlcyA9IEluc3BlY3RvckFycmF5OjpjcmVh
dGUoKTsKLSAgICBFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVu
dCgpOwotICAgIHdoaWxlIChwYXJlbnRFbGVtZW50KSB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHBhcmVudFN0eWxlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICAg
ICAgaW5oZXJpdGVkU3R5bGVzLT5wdXNoT2JqZWN0KHBhcmVudFN0eWxlKTsKLSAgICAgICAgaWYg
KHBhcmVudEVsZW1lbnQtPnN0eWxlKCkgJiYgcGFyZW50RWxlbWVudC0+c3R5bGUoKS0+bGVuZ3Ro
KCkpCi0gICAgICAgICAgICBwYXJlbnRTdHlsZS0+c2V0T2JqZWN0KCJpbmxpbmVTdHlsZSIsIGJ1
aWxkT2JqZWN0Rm9yU3R5bGUocGFyZW50RWxlbWVudC0+c3R5bGUoKSwgdHJ1ZSkpOwotCi0gICAg
ICAgIENTU1N0eWxlU2VsZWN0b3IqIHBhcmVudFNlbGVjdG9yID0gcGFyZW50RWxlbWVudC0+b3du
ZXJEb2N1bWVudCgpLT5zdHlsZVNlbGVjdG9yKCk7Ci0gICAgICAgIFJlZlB0cjxDU1NSdWxlTGlz
dD4gcGFyZW50TWF0Y2hlZFJ1bGVzID0gcGFyZW50U2VsZWN0b3ItPnN0eWxlUnVsZXNGb3JFbGVt
ZW50KHBhcmVudEVsZW1lbnQsIGF1dGhvck9ubHksIHRydWUpOwotICAgICAgICBwYXJlbnRTdHls
ZS0+c2V0QXJyYXkoIm1hdGNoZWRDU1NSdWxlcyIsIGJ1aWxkQXJyYXlGb3JDU1NSdWxlcyhwYXJl
bnRFbGVtZW50LT5vd25lckRvY3VtZW50KCksIHBhcmVudE1hdGNoZWRSdWxlcy5nZXQoKSkpOwot
Ci0gICAgICAgIHBhcmVudEVsZW1lbnQgPSBwYXJlbnRFbGVtZW50LT5wYXJlbnRFbGVtZW50KCk7
Ci0gICAgfQotICAgIHJlc3VsdC0+c2V0QXJyYXkoImluaGVyaXRlZCIsIGluaGVyaXRlZFN0eWxl
cyk7Ci0gICAgKnN0eWxlcyA9IHJlc3VsdC5yZWxlYXNlKCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9y
RE9NQWdlbnQ6OmdldEFsbFN0eWxlcyhSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBzdHlsZXMpCi17
Ci0gICAgZm9yIChMaXN0SGFzaFNldDxSZWZQdHI8RG9jdW1lbnQ+ID46Oml0ZXJhdG9yIGl0ID0g
bV9kb2N1bWVudHMuYmVnaW4oKTsgaXQgIT0gbV9kb2N1bWVudHMuZW5kKCk7ICsraXQpIHsKLSAg
ICAgICAgU3R5bGVTaGVldExpc3QqIGxpc3QgPSAoKml0KS0+c3R5bGVTaGVldHMoKTsKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPmxlbmd0aCgpOyArK2kpIHsKLSAgICAg
ICAgICAgIFN0eWxlU2hlZXQqIHN0eWxlU2hlZXQgPSBsaXN0LT5pdGVtKGkpOwotICAgICAgICAg
ICAgaWYgKHN0eWxlU2hlZXQtPmlzQ1NTU3R5bGVTaGVldCgpKQotICAgICAgICAgICAgICAgICgq
c3R5bGVzKS0+cHVzaE9iamVjdChidWlsZE9iamVjdEZvclN0eWxlU2hlZXQoKCppdCkuZ2V0KCks
IHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihzdHlsZVNoZWV0KSkpOwotICAgICAgICB9Ci0g
ICAgfQotfQotCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRTdHlsZVNoZWV0KGxvbmcgc3R5
bGVTaGVldElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Piogc3R5bGVTaGVldE9iamVjdCkKLXsK
LSAgICBDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0gY3NzU3RvcmUoKS0+c3R5bGVTaGVldEZv
cklkKHN0eWxlU2hlZXRJZCk7Ci0gICAgaWYgKHN0eWxlU2hlZXQgJiYgc3R5bGVTaGVldC0+ZG9j
dW1lbnQoKSkKLSAgICAgICAgKnN0eWxlU2hlZXRPYmplY3QgPSBidWlsZE9iamVjdEZvclN0eWxl
U2hlZXQoc3R5bGVTaGVldC0+ZG9jdW1lbnQoKSwgc3R5bGVTaGVldCk7Ci19Ci0KLXZvaWQgSW5z
cGVjdG9yRE9NQWdlbnQ6OmdldFN0eWxlU291cmNlRGF0YShsb25nIHN0eWxlSWQsIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+KiBkYXRhT2JqZWN0KQotewotICAgIENTU1N0eWxlRGVjbGFyYXRpb24q
IHN0eWxlID0gY3NzU3RvcmUoKS0+c3R5bGVGb3JJZChzdHlsZUlkKTsKLSAgICBpZiAoIXN0eWxl
KQotICAgICAgICByZXR1cm47Ci0gICAgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBzb3VyY2VE
YXRhID0gQ1NTUnVsZVNvdXJjZURhdGE6OmNyZWF0ZSgpOwotICAgIGJvb2wgc3VjY2VzcyA9IGNz
c1N0b3JlKCktPmdldFJ1bGVTb3VyY2VEYXRhKHN0eWxlLCAmc291cmNlRGF0YSk7Ci0gICAgaWYg
KCFzdWNjZXNzKQotICAgICAgICByZXR1cm47Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLQotICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IGJvZHlSYW5nZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgcmVz
dWx0LT5zZXRPYmplY3QoImJvZHlSYW5nZSIsIGJvZHlSYW5nZSk7Ci0gICAgYm9keVJhbmdlLT5z
ZXROdW1iZXIoInN0YXJ0Iiwgc291cmNlRGF0YS0+c3R5bGVTb3VyY2VEYXRhLT5zdHlsZUJvZHlS
YW5nZS5zdGFydCk7Ci0gICAgYm9keVJhbmdlLT5zZXROdW1iZXIoImVuZCIsIHNvdXJjZURhdGEt
PnN0eWxlU291cmNlRGF0YS0+c3R5bGVCb2R5UmFuZ2UuZW5kKTsKLQotICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHNlbGVjdG9yUmFuZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwot
ICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJzZWxlY3RvclJhbmdlIiwgc2VsZWN0b3JSYW5nZSk7Ci0g
ICAgc2VsZWN0b3JSYW5nZS0+c2V0TnVtYmVyKCJzdGFydCIsIHNvdXJjZURhdGEtPnNlbGVjdG9y
TGlzdFJhbmdlLnN0YXJ0KTsKLSAgICBzZWxlY3RvclJhbmdlLT5zZXROdW1iZXIoImVuZCIsIHNv
dXJjZURhdGEtPnNlbGVjdG9yTGlzdFJhbmdlLmVuZCk7Ci0KLSAgICBSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IHByb3BlcnR5UmFuZ2VzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwotICAgIHJl
c3VsdC0+c2V0QXJyYXkoInByb3BlcnR5RGF0YSIsIHByb3BlcnR5UmFuZ2VzKTsKLSAgICBWZWN0
b3I8Q1NTUHJvcGVydHlTb3VyY2VEYXRhPiYgcHJvcGVydHlEYXRhID0gc291cmNlRGF0YS0+c3R5
bGVTb3VyY2VEYXRhLT5wcm9wZXJ0eURhdGE7Ci0gICAgZm9yIChWZWN0b3I8Q1NTUHJvcGVydHlT
b3VyY2VEYXRhPjo6aXRlcmF0b3IgaXQgPSBwcm9wZXJ0eURhdGEuYmVnaW4oKTsgaXQgIT0gcHJv
cGVydHlEYXRhLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHByb3BlcnR5UmFuZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICBwcm9w
ZXJ0eVJhbmdlLT5zZXRTdHJpbmcoIm5hbWUiLCBpdC0+bmFtZSk7Ci0gICAgICAgIHByb3BlcnR5
UmFuZ2UtPnNldFN0cmluZygidmFsdWUiLCBpdC0+dmFsdWUpOwotICAgICAgICBwcm9wZXJ0eVJh
bmdlLT5zZXRCb29sZWFuKCJpbXBvcnRhbnQiLCBpdC0+aW1wb3J0YW50KTsKLSAgICAgICAgcHJv
cGVydHlSYW5nZS0+c2V0Qm9vbGVhbigicGFyc2VkIiwgaXQtPnBhcnNlZE9rKTsKLSAgICAgICAg
cHJvcGVydHlSYW5nZS0+c2V0TnVtYmVyKCJzdGFydCIsIGl0LT5yYW5nZS5zdGFydCk7Ci0gICAg
ICAgIHByb3BlcnR5UmFuZ2UtPnNldE51bWJlcigiZW5kIiwgaXQtPnJhbmdlLmVuZCk7Ci0gICAg
ICAgIHByb3BlcnR5UmFuZ2VzLT5wdXNoT2JqZWN0KHByb3BlcnR5UmFuZ2UpOwotICAgIH0KLSAg
ICAqZGF0YU9iamVjdCA9IHJlc3VsdC5yZWxlYXNlKCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yRE9N
QWdlbnQ6OmdldElubGluZVN0eWxlKGxvbmcgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
KiBzdHlsZSkKLXsKLSAgICBOb2RlKiBub2RlID0gbm9kZUZvcklkKG5vZGVJZCk7Ci0gICAgaWYg
KCFub2RlIHx8IG5vZGUtPm5vZGVUeXBlKCkgIT0gTm9kZTo6RUxFTUVOVF9OT0RFKQotICAgICAg
ICByZXR1cm47Ci0gICAgKnN0eWxlID0gYnVpbGRPYmplY3RGb3JTdHlsZShzdGF0aWNfY2FzdDxF
bGVtZW50Kj4obm9kZSktPnN0eWxlKCksIHRydWUpOwotfQotCi12b2lkIEluc3BlY3RvckRPTUFn
ZW50OjpnZXRDb21wdXRlZFN0eWxlKGxvbmcgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
KiBzdHlsZSkKLXsKLSAgICBOb2RlKiBub2RlID0gbm9kZUZvcklkKG5vZGVJZCk7Ci0gICAgaWYg
KCFub2RlIHx8IG5vZGUtPm5vZGVUeXBlKCkgIT0gTm9kZTo6RUxFTUVOVF9OT0RFKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBET01XaW5kb3cqIGRlZmF1bHRWaWV3ID0gbm9kZS0+b3duZXJEb2N1
bWVudCgpLT5kZWZhdWx0VmlldygpOwotICAgIGlmICghZGVmYXVsdFZpZXcpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9k
ZSk7Ci0gICAgKnN0eWxlID0gYnVpbGRPYmplY3RGb3JTdHlsZShkZWZhdWx0Vmlldy0+Z2V0Q29t
cHV0ZWRTdHlsZShlbGVtZW50LCAiIikuZ2V0KCksIGZhbHNlKTsKLX0KLQotUGFzc1JlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvckF0dHJpYnV0
ZVN0eWxlcyhFbGVtZW50KiBlbGVtZW50KQotewotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHN0eWxlQXR0cmlidXRlcyA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgTmFtZWRO
b2RlTWFwKiBhdHRyaWJ1dGVzID0gZWxlbWVudC0+YXR0cmlidXRlcygpOwotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGF0dHJpYnV0ZXMgJiYgaSA8IGF0dHJpYnV0ZXMtPmxlbmd0aCgpOyArK2kp
IHsKLSAgICAgICAgQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzLT5hdHRyaWJ1dGVJ
dGVtKGkpOwotICAgICAgICBpZiAoYXR0cmlidXRlLT5zdHlsZSgpKSB7Ci0gICAgICAgICAgICBT
dHJpbmcgYXR0cmlidXRlTmFtZSA9IGF0dHJpYnV0ZS0+bG9jYWxOYW1lKCk7Ci0gICAgICAgICAg
ICBzdHlsZUF0dHJpYnV0ZXMtPnNldE9iamVjdChhdHRyaWJ1dGVOYW1lLnV0ZjgoKS5kYXRhKCks
IGJ1aWxkT2JqZWN0Rm9yU3R5bGUoYXR0cmlidXRlLT5zdHlsZSgpLCB0cnVlKSk7Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgcmV0dXJuIHN0eWxlQXR0cmlidXRlczsKLX0KLQotUGFzc1JlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkQXJyYXlGb3JDU1NSdWxlcyhE
b2N1bWVudCogb3duZXJEb2N1bWVudCwgQ1NTUnVsZUxpc3QqIG1hdGNoZWRSdWxlcykKLXsKLSAg
ICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IG1hdGNoZWRDU1NSdWxlcyA9IEluc3BlY3RvckFycmF5
OjpjcmVhdGUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBtYXRjaGVkUnVsZXMgJiYgaSA8
IG1hdGNoZWRSdWxlcy0+bGVuZ3RoKCk7ICsraSkgewotICAgICAgICBDU1NSdWxlKiBydWxlID0g
bWF0Y2hlZFJ1bGVzLT5pdGVtKGkpOwotICAgICAgICBpZiAocnVsZS0+dHlwZSgpID09IENTU1J1
bGU6OlNUWUxFX1JVTEUpCi0gICAgICAgICAgICBtYXRjaGVkQ1NTUnVsZXMtPnB1c2hPYmplY3Qo
YnVpbGRPYmplY3RGb3JSdWxlKG93bmVyRG9jdW1lbnQsIHN0YXRpY19jYXN0PENTU1N0eWxlUnVs
ZSo+KHJ1bGUpKSk7Ci0gICAgfQotICAgIHJldHVybiBtYXRjaGVkQ1NTUnVsZXMucmVsZWFzZSgp
OwotfQotCi1QYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBJbnNwZWN0b3JET01BZ2VudDo6YnVp
bGRBcnJheUZvclBzZXVkb0VsZW1lbnRzKEVsZW1lbnQqIGVsZW1lbnQsIGJvb2wgYXV0aG9yT25s
eSkKLXsKLSAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHJlc3VsdCA9IEluc3BlY3RvckFycmF5
OjpjcmVhdGUoKTsKLSAgICBDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciA9IGVsZW1lbnQtPm93
bmVyRG9jdW1lbnQoKS0+c3R5bGVTZWxlY3RvcigpOwotICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4g
cmVuZGVyU3R5bGUgPSBlbGVtZW50LT5zdHlsZUZvclJlbmRlcmVyKCk7Ci0KLSAgICBmb3IgKFBz
ZXVkb0lkIHBzZXVkb0lkID0gRklSU1RfUFVCTElDX1BTRVVET0lEOyBwc2V1ZG9JZCA8IEFGVEVS
X0xBU1RfSU5URVJOQUxfUFNFVURPSUQ7IHBzZXVkb0lkID0gc3RhdGljX2Nhc3Q8UHNldWRvSWQ+
KHBzZXVkb0lkICsgMSkpIHsKLSAgICAgICAgUmVmUHRyPENTU1J1bGVMaXN0PiBtYXRjaGVkUnVs
ZXMgPSBzZWxlY3Rvci0+cHNldWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQoZWxlbWVudCwgcHNldWRv
SWQsIGF1dGhvck9ubHksIHRydWUpOwotICAgICAgICBpZiAobWF0Y2hlZFJ1bGVzICYmIG1hdGNo
ZWRSdWxlcy0+bGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHBzZXVkb1N0eWxlcyA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICBw
c2V1ZG9TdHlsZXMtPnNldE51bWJlcigicHNldWRvSWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHBzZXVk
b0lkKSk7Ci0gICAgICAgICAgICBwc2V1ZG9TdHlsZXMtPnNldEFycmF5KCJydWxlcyIsIGJ1aWxk
QXJyYXlGb3JDU1NSdWxlcyhlbGVtZW50LT5vd25lckRvY3VtZW50KCksIG1hdGNoZWRSdWxlcy5n
ZXQoKSkpOwotICAgICAgICAgICAgcmVzdWx0LT5wdXNoT2JqZWN0KHBzZXVkb1N0eWxlcy5yZWxl
YXNlKCkpOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwot
fQotCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjphcHBseVN0eWxlVGV4dChsb25nIHN0eWxlSWQs
IGNvbnN0IFN0cmluZyYgc3R5bGVUZXh0LCBjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwgYm9v
bCogc3VjY2VzcywgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogc3R5bGVPYmplY3QpCi17Ci0gICAg
Q1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUgPSBjc3NTdG9yZSgpLT5zdHlsZUZvcklkKHN0eWxl
SWQpOwotICAgIGlmICghc3R5bGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFJlbW92ZSBk
aXNhYmxlZCBwcm9wZXJ0eSBlbnRyeSBmb3IgcHJvcGVydHkgd2l0aCBnaXZlbiBuYW1lLgotICAg
IERpc2FibGVkU3R5bGVEZWNsYXJhdGlvbiogZGlzYWJsZWRTdHlsZSA9IGNzc1N0b3JlKCktPmRp
c2FibGVkU3R5bGVGb3JJZChzdHlsZUlkLCBmYWxzZSk7Ci0gICAgaWYgKGRpc2FibGVkU3R5bGUp
Ci0gICAgICAgIGRpc2FibGVkU3R5bGUtPnJlbW92ZShwcm9wZXJ0eU5hbWUpOwotCi0gICAgaW50
IHN0eWxlVGV4dExlbmd0aCA9IHN0eWxlVGV4dC5sZW5ndGgoKTsKLQotICAgIFJlZlB0cjxDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gdGVtcE11dGFibGVTdHlsZSA9IENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uOjpjcmVhdGUoKTsKLSAgICB0ZW1wTXV0YWJsZVN0eWxlLT5wYXJzZURlY2xh
cmF0aW9uKHN0eWxlVGV4dCk7Ci0gICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogdGVtcFN0eWxlID0g
c3RhdGljX2Nhc3Q8Q1NTU3R5bGVEZWNsYXJhdGlvbio+KHRlbXBNdXRhYmxlU3R5bGUuZ2V0KCkp
OwotCi0gICAgaWYgKHRlbXBTdHlsZS0+bGVuZ3RoKCkgfHwgIXN0eWxlVGV4dExlbmd0aCkgewot
ICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICAgICAgLy8gVGhlIGlucHV0IHdhcyBw
YXJzYWJsZSBvciB0aGUgdXNlciBkZWxldGVkIGV2ZXJ5dGhpbmcsIHNvIHJlbW92ZSB0aGUKLSAg
ICAgICAgLy8gb3JpZ2luYWwgcHJvcGVydHkgZnJvbSB0aGUgcmVhbCBzdHlsZSBkZWNsYXJhdGlv
bi4gSWYgdGhpcyByZXByZXNlbnRzCi0gICAgICAgIC8vIGEgc2hvcnRoYW5kIHJlbW92ZSBhbGwg
dGhlIGxvbmdoYW5kIHByb3BlcnRpZXMuCi0gICAgICAgIGlmIChzdHlsZS0+Z2V0UHJvcGVydHlT
aG9ydGhhbmQocHJvcGVydHlOYW1lKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIFZlY3RvcjxT
dHJpbmc+IGxvbmdoYW5kUHJvcHMgPSBsb25naGFuZFByb3BlcnRpZXMoc3R5bGUsIHByb3BlcnR5
TmFtZSk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyAhZWMgJiYgaSA8IGxvbmdo
YW5kUHJvcHMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICAgICAgc3R5bGUtPnJlbW92ZVByb3Bl
cnR5KGxvbmdoYW5kUHJvcHNbaV0sIGVjKTsKLSAgICAgICAgfQotICAgICAgICAvLyBFeHBsaWNp
dGx5IGRlbGV0ZSBwcm9wZXJ0aWVzIHdpdGggbm8gc2hvcnRoYW5kcyBhcyB3ZWxsIGFzIHNob3J0
aGFuZHMgdGhlbXNlbHZlcy4KLSAgICAgICAgaWYgKCFlYykKLSAgICAgICAgICAgIHN0eWxlLT5y
ZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIGVjKTsKLQotICAgICAgICBpZiAoZWMpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gTm90aWZ5IGNhbGxlciB0aGF0IHRoZSBw
cm9wZXJ0eSB3YXMgc3VjY2Vzc2Z1bGx5IGRlbGV0ZWQuCi0gICAgaWYgKCFzdHlsZVRleHRMZW5n
dGgpIHsKLSAgICAgICAgKnN1Y2Nlc3MgPSB0cnVlOwotICAgICAgICAqc3R5bGVPYmplY3QgPSBi
dWlsZE9iamVjdEZvclN0eWxlKHN0eWxlLCB0cnVlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGlmICghdGVtcFN0eWxlLT5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Ly8gSXRlcmF0ZSBvZiB0aGUgcHJvcGVydGllcyBvbiB0aGUgdGVzdCBlbGVtZW50J3Mgc3R5bGUg
ZGVjbGFyYXRpb24gYW5kCi0gICAgLy8gYWRkIHRoZW0gdG8gdGhlIHJlYWwgc3R5bGUgZGVjbGFy
YXRpb24uIFdlIHRha2UgY2FyZSB0byBtb3ZlIHNob3J0aGFuZHMuCi0gICAgSGFzaFNldDxTdHJp
bmc+IGZvdW5kU2hvcnRoYW5kczsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0ZW1w
U3R5bGUtPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgU3RyaW5nIG5hbWUgPSB0ZW1wU3R5bGUt
Pml0ZW0oaSk7Ci0gICAgICAgIFN0cmluZyBzaG9ydGhhbmQgPSB0ZW1wU3R5bGUtPmdldFByb3Bl
cnR5U2hvcnRoYW5kKG5hbWUpOwotCi0gICAgICAgIGlmICghc2hvcnRoYW5kLmlzRW1wdHkoKSAm
JiBmb3VuZFNob3J0aGFuZHMuY29udGFpbnMoc2hvcnRoYW5kKSkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotCi0gICAgICAgIFN0cmluZyB2YWx1ZTsKLSAgICAgICAgU3RyaW5nIHByaW9yaXR5Owot
ICAgICAgICBpZiAoIXNob3J0aGFuZC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIHZhbHVlID0g
c2hvcnRoYW5kVmFsdWUodGVtcFN0eWxlLCBzaG9ydGhhbmQpOwotICAgICAgICAgICAgcHJpb3Jp
dHkgPSBzaG9ydGhhbmRQcmlvcml0eSh0ZW1wU3R5bGUsIHNob3J0aGFuZCk7Ci0gICAgICAgICAg
ICBmb3VuZFNob3J0aGFuZHMuYWRkKHNob3J0aGFuZCk7Ci0gICAgICAgICAgICBuYW1lID0gc2hv
cnRoYW5kOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdmFsdWUgPSB0ZW1wU3R5bGUt
PmdldFByb3BlcnR5VmFsdWUobmFtZSk7Ci0gICAgICAgICAgICBwcmlvcml0eSA9IHRlbXBTdHls
ZS0+Z2V0UHJvcGVydHlQcmlvcml0eShuYW1lKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFNl
dCB0aGUgcHJvcGVydHkgb24gdGhlIHJlYWwgc3R5bGUgZGVjbGFyYXRpb24uCi0gICAgICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgICAgICBzdHlsZS0+c2V0UHJvcGVydHkobmFtZSwgdmFs
dWUsIHByaW9yaXR5LCBlYyk7Ci0gICAgICAgIC8vIFJlbW92ZSBkaXNhYmxlZCBwcm9wZXJ0eSBl
bnRyeSBmb3IgcHJvcGVydHkgd2l0aCB0aGlzIG5hbWUuCi0gICAgICAgIGlmIChkaXNhYmxlZFN0
eWxlKQotICAgICAgICAgICAgZGlzYWJsZWRTdHlsZS0+cmVtb3ZlKG5hbWUpOwotICAgIH0KLSAg
ICAqc3VjY2VzcyA9IHRydWU7Ci0gICAgKnN0eWxlT2JqZWN0ID0gYnVpbGRPYmplY3RGb3JTdHls
ZShzdHlsZSwgdHJ1ZSk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldFN0eWxlVGV4
dChsb25nIHN0eWxlSWQsIGNvbnN0IFN0cmluZyYgY3NzVGV4dCwgYm9vbCogc3VjY2VzcykKLXsK
LSAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSA9IGNzc1N0b3JlKCktPnN0eWxlRm9ySWQo
c3R5bGVJZCk7Ci0gICAgaWYgKCFzdHlsZSkKLSAgICAgICAgcmV0dXJuOwotICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwotICAgIHN0eWxlLT5zZXRDc3NUZXh0KGNzc1RleHQsIGVjKTsKLSAgICAq
c3VjY2VzcyA9ICFlYzsKLX0KLQotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0U3R5bGVQcm9w
ZXJ0eShsb25nIHN0eWxlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1
ZSwgYm9vbCogc3VjY2VzcykKLXsKLSAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSA9IGNz
c1N0b3JlKCktPnN0eWxlRm9ySWQoc3R5bGVJZCk7Ci0gICAgaWYgKCFzdHlsZSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgc3R5bGUtPnNldFByb3Bl
cnR5KG5hbWUsIHZhbHVlLCBlYyk7Ci0gICAgKnN1Y2Nlc3MgPSAhZWM7Ci19Ci0KLXZvaWQgSW5z
cGVjdG9yRE9NQWdlbnQ6OnRvZ2dsZVN0eWxlRW5hYmxlZChsb25nIHN0eWxlSWQsIGNvbnN0IFN0
cmluZyYgcHJvcGVydHlOYW1lLCBib29sIGRpc2FibGVkLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
KiBzdHlsZU9iamVjdCkKLXsKLSAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSA9IGNzc1N0
b3JlKCktPnN0eWxlRm9ySWQoc3R5bGVJZCk7Ci0gICAgaWYgKCFzdHlsZSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgRGlzYWJsZWRTdHlsZURlY2xhcmF0aW9uKiBkaXNhYmxlZFN0eWxlID0gY3Nz
U3RvcmUoKS0+ZGlzYWJsZWRTdHlsZUZvcklkKHN0eWxlSWQsIHRydWUpOwotCi0gICAgLy8gVE9E
TzogbWFrZSBzdXJlIHRoaXMgd29ya3Mgd2l0aCBzaG9ydGhhbmRzIHJpZ2h0LgotICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOwotICAgIGlmIChkaXNhYmxlZCkgewotICAgICAgICBkaXNhYmxlZFN0
eWxlLT5zZXQocHJvcGVydHlOYW1lLCBzdGQ6Om1ha2VfcGFpcihzdHlsZS0+Z2V0UHJvcGVydHlW
YWx1ZShwcm9wZXJ0eU5hbWUpLCBzdHlsZS0+Z2V0UHJvcGVydHlQcmlvcml0eShwcm9wZXJ0eU5h
bWUpKSk7Ci0gICAgICAgIGlmICghZWMpCi0gICAgICAgICAgICBzdHlsZS0+cmVtb3ZlUHJvcGVy
dHkocHJvcGVydHlOYW1lLCBlYyk7Ci0gICAgfSBlbHNlIGlmIChkaXNhYmxlZFN0eWxlLT5jb250
YWlucyhwcm9wZXJ0eU5hbWUpKSB7Ci0gICAgICAgIFByb3BlcnR5VmFsdWVBbmRQcmlvcml0eSB2
YWx1ZUFuZFByaW9yaXR5ID0gZGlzYWJsZWRTdHlsZS0+Z2V0KHByb3BlcnR5TmFtZSk7Ci0gICAg
ICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHZhbHVlQW5kUHJpb3JpdHkuZmly
c3QsIHZhbHVlQW5kUHJpb3JpdHkuc2Vjb25kLCBlYyk7Ci0gICAgICAgIGlmICghZWMpCi0gICAg
ICAgICAgICBkaXNhYmxlZFN0eWxlLT5yZW1vdmUocHJvcGVydHlOYW1lKTsKLSAgICB9Ci0gICAg
aWYgKGVjKQotICAgICAgICByZXR1cm47Ci0gICAgKnN0eWxlT2JqZWN0ID0gYnVpbGRPYmplY3RG
b3JTdHlsZShzdHlsZSwgdHJ1ZSk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldFJ1
bGVTZWxlY3Rvcihsb25nIHJ1bGVJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgbG9uZyBzZWxl
Y3RlZE5vZGVJZCwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcnVsZU9iamVjdCwgYm9vbCogc2Vs
ZWN0b3JBZmZlY3RzTm9kZSkKLXsKLSAgICBDU1NTdHlsZVJ1bGUqIHJ1bGUgPSBjc3NTdG9yZSgp
LT5ydWxlRm9ySWQocnVsZUlkKTsKLSAgICBpZiAoIXJ1bGUpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIE5vZGUqIG5vZGUgPSBub2RlRm9ySWQoc2VsZWN0ZWROb2RlSWQpOwotCi0gICAgQ1NTU3R5
bGVTaGVldCogc3R5bGVTaGVldCA9IHJ1bGUtPnBhcmVudFN0eWxlU2hlZXQoKTsKLSAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKLSAgICBzdHlsZVNoZWV0LT5hZGRSdWxlKHNlbGVjdG9yLCBydWxl
LT5zdHlsZSgpLT5jc3NUZXh0KCksIGVjKTsKLSAgICBpZiAoZWMpCi0gICAgICAgIHJldHVybjsK
LQotICAgIENTU1N0eWxlUnVsZSogbmV3UnVsZSA9IHN0YXRpY19jYXN0PENTU1N0eWxlUnVsZSo+
KHN0eWxlU2hlZXQtPml0ZW0oc3R5bGVTaGVldC0+bGVuZ3RoKCkgLSAxKSk7Ci0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHN0eWxlU2hlZXQtPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAg
aWYgKHN0eWxlU2hlZXQtPml0ZW0oaSkgPT0gcnVsZSkgewotICAgICAgICAgICAgc3R5bGVTaGVl
dC0+ZGVsZXRlUnVsZShpLCBlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIGlmIChlYykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgKnNlbGVjdG9yQWZmZWN0
c05vZGUgPSBydWxlQWZmZWN0c05vZGUobmV3UnVsZSwgbm9kZSk7Ci0gICAgKnJ1bGVPYmplY3Qg
PSBidWlsZE9iamVjdEZvclJ1bGUobm9kZS0+b3duZXJEb2N1bWVudCgpLCBuZXdSdWxlKTsKLX0K
LQotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6YWRkUnVsZShjb25zdCBTdHJpbmcmIHNlbGVjdG9y
LCBsb25nIHNlbGVjdGVkTm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiBydWxlT2JqZWN0
LCBib29sKiBzZWxlY3RvckFmZmVjdHNOb2RlKQotewotICAgIE5vZGUqIG5vZGUgPSBub2RlRm9y
SWQoc2VsZWN0ZWROb2RlSWQpOwotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCA9IGNzc1N0b3JlKCktPmluc3BlY3RvclN0eWxl
U2hlZXQobm9kZS0+b3duZXJEb2N1bWVudCgpLCB0cnVlKTsKLSAgICBpZiAoIXN0eWxlU2hlZXQp
Ci0gICAgICAgIHJldHVybjsgLy8gY291bGQgbm90IGFkZCBhIHN0eWxlc2hlZXQgdG8gdGhlIG93
bmVyRG9jdW1lbnQKLQotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIHN0eWxlU2hlZXQt
PmFkZFJ1bGUoc2VsZWN0b3IsICIiLCBlYyk7Ci0gICAgaWYgKGVjKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBDU1NTdHlsZVJ1bGUqIG5ld1J1bGUgPSBzdGF0aWNfY2FzdDxDU1NTdHlsZVJ1bGUq
PihzdHlsZVNoZWV0LT5pdGVtKHN0eWxlU2hlZXQtPmxlbmd0aCgpIC0gMSkpOwotICAgICpzZWxl
Y3RvckFmZmVjdHNOb2RlID0gcnVsZUFmZmVjdHNOb2RlKG5ld1J1bGUsIG5vZGUpOwotICAgICpy
dWxlT2JqZWN0ID0gYnVpbGRPYmplY3RGb3JSdWxlKG5vZGUtPm93bmVyRG9jdW1lbnQoKSwgbmV3
UnVsZSk7Ci19Ci0KLVBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JET01BZ2Vu
dDo6YnVpbGRPYmplY3RGb3JTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgYm9vbCBi
aW5kKQotewotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7Ci0gICAgaWYgKGJpbmQpIHsKLSAgICAgICAgcmVzdWx0LT5zZXROdW1i
ZXIoInN0eWxlSWQiLCBjc3NTdG9yZSgpLT5iaW5kU3R5bGUoc3R5bGUpKTsKLSAgICAgICAgQ1NT
U3R5bGVTaGVldCogc3R5bGVTaGVldCA9IEluc3BlY3RvckNTU1N0b3JlOjpnZXRQYXJlbnRTdHls
ZVNoZWV0KHN0eWxlKTsKLSAgICAgICAgaWYgKHN0eWxlU2hlZXQpCi0gICAgICAgICAgICByZXN1
bHQtPnNldE51bWJlcigic3R5bGVTaGVldElkIiwgY3NzU3RvcmUoKS0+YmluZFN0eWxlU2hlZXQo
c3R5bGVTaGVldCkpOwotICAgIH0KLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwcm9wZXJ0
aWVzID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICBwcm9wZXJ0aWVzLT5zZXRTdHJp
bmcoIndpZHRoIiwgc3R5bGUtPmdldFByb3BlcnR5VmFsdWUoIndpZHRoIikpOwotICAgIHByb3Bl
cnRpZXMtPnNldFN0cmluZygiaGVpZ2h0Iiwgc3R5bGUtPmdldFByb3BlcnR5VmFsdWUoImhlaWdo
dCIpKTsKLSAgICByZXN1bHQtPnNldE9iamVjdCgicHJvcGVydGllcyIsIHByb3BlcnRpZXMpOwot
ICAgIHBvcHVsYXRlT2JqZWN0V2l0aFN0eWxlUHJvcGVydGllcyhzdHlsZSwgcmVzdWx0LmdldCgp
KTsKLSAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JET01B
Z2VudDo6cG9wdWxhdGVPYmplY3RXaXRoU3R5bGVQcm9wZXJ0aWVzKENTU1N0eWxlRGVjbGFyYXRp
b24qIHN0eWxlLCBJbnNwZWN0b3JPYmplY3QqIHJlc3VsdCkKLXsKLSAgICBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IHByb3BlcnRpZXMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Ci0gICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gc2hvcnRoYW5kVmFsdWVzID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKLQotICAgIEhhc2hTZXQ8U3RyaW5nPiBmb3VuZFNob3J0aGFuZHM7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0eWxlLT5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHByb3BlcnR5ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKLSAgICAgICAgU3RyaW5nIG5hbWUgPSBzdHlsZS0+aXRlbShpKTsKLSAgICAgICAgU3RyaW5n
IHZhbHVlID0gc3R5bGUtPmdldFByb3BlcnR5VmFsdWUobmFtZSk7Ci0gICAgICAgIFN0cmluZyBw
cmlvcml0eSA9IHN0eWxlLT5nZXRQcm9wZXJ0eVByaW9yaXR5KG5hbWUpOwotICAgICAgICBwcm9w
ZXJ0eS0+c2V0U3RyaW5nKCJuYW1lIiwgbmFtZSk7Ci0gICAgICAgIHByb3BlcnR5LT5zZXRTdHJp
bmcoInZhbHVlIiwgdmFsdWUpOwotICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJwcmlvcml0
eSIsIHByaW9yaXR5KTsKLSAgICAgICAgcHJvcGVydHktPnNldFN0cmluZygidGV4dCIsIG5hbWUg
KyAiOiAiICsgdmFsdWUgKyAocHJpb3JpdHkubGVuZ3RoKCkgPyAiICEiICsgcHJpb3JpdHkgOiAi
IikgKyAiOyIpOwotICAgICAgICBwcm9wZXJ0eS0+c2V0Qm9vbGVhbigiaW1wbGljaXQiLCBzdHls
ZS0+aXNQcm9wZXJ0eUltcGxpY2l0KG5hbWUpKTsKLSAgICAgICAgcHJvcGVydHktPnNldEJvb2xl
YW4oInBhcnNlZE9rIiwgdHJ1ZSk7Ci0gICAgICAgIHByb3BlcnR5LT5zZXRTdHJpbmcoInN0YXR1
cyIsICJzdHlsZSIpOwotICAgICAgICBTdHJpbmcgc2hvcnRoYW5kID0gc3R5bGUtPmdldFByb3Bl
cnR5U2hvcnRoYW5kKG5hbWUpOwotICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJzaG9ydGhh
bmROYW1lIiwgc2hvcnRoYW5kKTsKLSAgICAgICAgaWYgKCFzaG9ydGhhbmQuaXNFbXB0eSgpICYm
ICFmb3VuZFNob3J0aGFuZHMuY29udGFpbnMoc2hvcnRoYW5kKSkgewotICAgICAgICAgICAgZm91
bmRTaG9ydGhhbmRzLmFkZChzaG9ydGhhbmQpOwotICAgICAgICAgICAgc2hvcnRoYW5kVmFsdWVz
LT5zZXRTdHJpbmcoc2hvcnRoYW5kLCBzaG9ydGhhbmRWYWx1ZShzdHlsZSwgc2hvcnRoYW5kKSk7
Ci0gICAgICAgIH0KLSAgICAgICAgcHJvcGVydGllcy0+cHVzaE9iamVjdChwcm9wZXJ0eS5yZWxl
YXNlKCkpOwotICAgIH0KLSAgICByZXN1bHQtPnNldEFycmF5KCJjc3NQcm9wZXJ0aWVzIiwgcHJv
cGVydGllcyk7Ci0gICAgcmVzdWx0LT5zZXRTdHJpbmcoImNzc1RleHQiLCBzdHlsZS0+Y3NzVGV4
dCgpKTsKLSAgICByZXN1bHQtPnNldE9iamVjdCgic2hvcnRoYW5kVmFsdWVzIiwgc2hvcnRoYW5k
VmFsdWVzKTsKLQotICAgIERpc2FibGVkU3R5bGVEZWNsYXJhdGlvbiogZGlzYWJsZWRTdHlsZSA9
IGNzc1N0b3JlKCktPmRpc2FibGVkU3R5bGVGb3JJZChjc3NTdG9yZSgpLT5iaW5kU3R5bGUoc3R5
bGUpLCBmYWxzZSk7Ci0gICAgaWYgKCFkaXNhYmxlZFN0eWxlKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBmb3IgKERpc2FibGVkU3R5bGVEZWNsYXJhdGlvbjo6aXRlcmF0b3IgaXQgPSBkaXNhYmxl
ZFN0eWxlLT5iZWdpbigpOyBpdCAhPSBkaXNhYmxlZFN0eWxlLT5lbmQoKTsgKytpdCkgewotICAg
ICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwcm9wZXJ0eSA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7Ci0gICAgICAgIFN0cmluZyBuYW1lID0gaXQtPmZpcnN0OwotICAgICAgICBTdHJp
bmcgdmFsdWUgPSBpdC0+c2Vjb25kLmZpcnN0OwotICAgICAgICBTdHJpbmcgcHJpb3JpdHkgPSBp
dC0+c2Vjb25kLnNlY29uZDsKLSAgICAgICAgcHJvcGVydHktPnNldFN0cmluZygibmFtZSIsIG5h
bWUpOwotICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJ2YWx1ZSIsIHZhbHVlKTsKLSAgICAg
ICAgcHJvcGVydHktPnNldFN0cmluZygicHJpb3JpdHkiLCBwcmlvcml0eSk7Ci0gICAgICAgIHBy
b3BlcnR5LT5zZXRTdHJpbmcoInRleHQiLCBuYW1lICsgIjogIiArIHZhbHVlICsgKHByaW9yaXR5
Lmxlbmd0aCgpID8gIiAhIiArIHByaW9yaXR5IDogIiIpICsgIjsiKTsKLSAgICAgICAgcHJvcGVy
dHktPnNldEJvb2xlYW4oImltcGxpY2l0IiwgZmFsc2UpOwotICAgICAgICBwcm9wZXJ0eS0+c2V0
Qm9vbGVhbigicGFyc2VkT2siLCB0cnVlKTsKLSAgICAgICAgcHJvcGVydHktPnNldFN0cmluZygi
c3RhdHVzIiwgImRpc2FibGVkIik7Ci0gICAgICAgIHByb3BlcnRpZXMtPnB1c2hPYmplY3QocHJv
cGVydHkucmVsZWFzZSgpKTsKLSAgICB9Ci19Ci0KLVBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0KERvY3VtZW50KiBv
d25lckRvY3VtZW50LCBDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0KQotewotICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAg
bG9uZyBpZCA9IGNzc1N0b3JlKCktPmJpbmRTdHlsZVNoZWV0KHN0eWxlU2hlZXQpOwotICAgIHJl
c3VsdC0+c2V0TnVtYmVyKCJzdHlsZVNoZWV0SWQiLCBpZCk7Ci0gICAgcmVzdWx0LT5zZXRTdHJp
bmcoInNvdXJjZVVSTCIsIHN0eWxlU2hlZXQtPmhyZWYoKSk7Ci0gICAgcmVzdWx0LT5zZXRTdHJp
bmcoInRpdGxlIiwgc3R5bGVTaGVldC0+dGl0bGUoKSk7Ci0gICAgcmVzdWx0LT5zZXRCb29sZWFu
KCJkaXNhYmxlZCIsIHN0eWxlU2hlZXQtPmRpc2FibGVkKCkpOwotICAgIFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4gY3NzUnVsZXMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Ci0gICAgUGFzc1Jl
ZlB0cjxDU1NSdWxlTGlzdD4gY3NzUnVsZUxpc3QgPSBDU1NSdWxlTGlzdDo6Y3JlYXRlKHN0eWxl
U2hlZXQsIHRydWUpOwotICAgIGlmIChjc3NSdWxlTGlzdCkgewotICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgY3NzUnVsZUxpc3QtPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgICAg
IENTU1J1bGUqIHJ1bGUgPSBjc3NSdWxlTGlzdC0+aXRlbShpKTsKLSAgICAgICAgICAgIGlmIChy
dWxlLT5pc1N0eWxlUnVsZSgpKQotICAgICAgICAgICAgICAgIGNzc1J1bGVzLT5wdXNoT2JqZWN0
KGJ1aWxkT2JqZWN0Rm9yUnVsZShvd25lckRvY3VtZW50LCBzdGF0aWNfY2FzdDxDU1NTdHlsZVJ1
bGUqPihydWxlKSkpOwotICAgICAgICB9Ci0gICAgfQotICAgIHJlc3VsdC0+c2V0QXJyYXkoInJ1
bGVzIiwgY3NzUnVsZXMucmVsZWFzZSgpKTsKLSAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsK
LX0KLQotUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvckRPTUFnZW50OjpidWls
ZE9iamVjdEZvclJ1bGUoRG9jdW1lbnQqIG93bmVyRG9jdW1lbnQsIENTU1N0eWxlUnVsZSogcnVs
ZSkKLXsKLSAgICBDU1NTdHlsZVNoZWV0KiBwYXJlbnRTdHlsZVNoZWV0ID0gcnVsZS0+cGFyZW50
U3R5bGVTaGVldCgpOwotCi0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICByZXN1bHQtPnNldFN0cmluZygic2VsZWN0b3JU
ZXh0IiwgcnVsZS0+c2VsZWN0b3JUZXh0KCkpOwotICAgIHJlc3VsdC0+c2V0TnVtYmVyKCJzb3Vy
Y2VMaW5lIiwgcnVsZS0+c291cmNlTGluZSgpKTsKLQotICAgIFN0cmluZyBvcmlnaW47Ci0gICAg
Ym9vbCBjYW5CaW5kID0gdHJ1ZTsKLSAgICBpZiAocGFyZW50U3R5bGVTaGVldCAmJiAhcGFyZW50
U3R5bGVTaGVldC0+b3duZXJOb2RlKCkgJiYgcGFyZW50U3R5bGVTaGVldC0+aHJlZigpLmlzRW1w
dHkoKSkgewotICAgICAgICBvcmlnaW4gPSAidXNlci1hZ2VudCI7Ci0gICAgICAgIGNhbkJpbmQg
PSBmYWxzZTsKLSAgICB9IGVsc2UgaWYgKHBhcmVudFN0eWxlU2hlZXQgJiYgcGFyZW50U3R5bGVT
aGVldC0+b3duZXJOb2RlKCkgJiYgcGFyZW50U3R5bGVTaGVldC0+b3duZXJOb2RlKCktPm5vZGVO
YW1lKCkgPT0gIiNkb2N1bWVudCIpIHsKLSAgICAgICAgb3JpZ2luID0gInVzZXIiOwotICAgICAg
ICBjYW5CaW5kID0gZmFsc2U7Ci0gICAgfSBlbHNlIGlmIChydWxlLT5wYXJlbnRTdHlsZVNoZWV0
KCkgPT0gY3NzU3RvcmUoKS0+aW5zcGVjdG9yU3R5bGVTaGVldChvd25lckRvY3VtZW50LCBmYWxz
ZSkpCi0gICAgICAgIG9yaWdpbiA9ICJpbnNwZWN0b3IiOwotICAgIHJlc3VsdC0+c2V0U3RyaW5n
KCJvcmlnaW4iLCBvcmlnaW4pOwotCi0gICAgaWYgKG9yaWdpbi5pc0VtcHR5KCkpCi0gICAgICAg
IHJlc3VsdC0+c2V0U3RyaW5nKCJzb3VyY2VVUkwiLCBwYXJlbnRTdHlsZVNoZWV0ICYmICFwYXJl
bnRTdHlsZVNoZWV0LT5ocmVmKCkuaXNFbXB0eSgpID8gcGFyZW50U3R5bGVTaGVldC0+aHJlZigp
IDogKG93bmVyRG9jdW1lbnQgPyBvd25lckRvY3VtZW50LT51cmwoKS5zdHJpbmcoKSA6ICIiKSk7
Ci0KLSAgICAvLyBCaW5kIGVkaXRhYmxlIHNjcmlwdHMgb25seS4KLSAgICByZXN1bHQtPnNldE9i
amVjdCgic3R5bGUiLCBidWlsZE9iamVjdEZvclN0eWxlKHJ1bGUtPnN0eWxlKCksIGNhbkJpbmQp
KTsKLQotICAgIGlmIChjYW5CaW5kKQotICAgICAgICByZXN1bHQtPnNldE51bWJlcigicnVsZUlk
IiwgY3NzU3RvcmUoKS0+YmluZFJ1bGUocnVsZSkpOwotICAgIHJldHVybiByZXN1bHQucmVsZWFz
ZSgpOwotfQotCi1WZWN0b3I8U3RyaW5nPiBJbnNwZWN0b3JET01BZ2VudDo6bG9uZ2hhbmRQcm9w
ZXJ0aWVzKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBjb25zdCBTdHJpbmcmIHNob3J0aGFu
ZFByb3BlcnR5KQotewotICAgIFZlY3RvcjxTdHJpbmc+IHByb3BlcnRpZXM7Ci0gICAgSGFzaFNl
dDxTdHJpbmc+IGZvdW5kUHJvcGVydGllczsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzdHlsZS0+bGVuZ3RoKCk7ICsraSkgewotICAgICAgICBTdHJpbmcgaW5kaXZpZHVhbFByb3Bl
cnR5ID0gc3R5bGUtPml0ZW0oaSk7Ci0gICAgICAgIGlmIChmb3VuZFByb3BlcnRpZXMuY29udGFp
bnMoaW5kaXZpZHVhbFByb3BlcnR5KSB8fCBzdHlsZS0+Z2V0UHJvcGVydHlTaG9ydGhhbmQoaW5k
aXZpZHVhbFByb3BlcnR5KSAhPSBzaG9ydGhhbmRQcm9wZXJ0eSkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICBmb3VuZFByb3BlcnRpZXMuYWRkKGluZGl2aWR1YWxQcm9wZXJ0eSk7Ci0g
ICAgICAgIHByb3BlcnRpZXMuYXBwZW5kKGluZGl2aWR1YWxQcm9wZXJ0eSk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHByb3BlcnRpZXM7Ci19Ci0KLVN0cmluZyBJbnNwZWN0b3JET01BZ2VudDo6c2hv
cnRoYW5kVmFsdWUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIGNvbnN0IFN0cmluZyYgc2hv
cnRoYW5kUHJvcGVydHkpCi17Ci0gICAgU3RyaW5nIHZhbHVlID0gc3R5bGUtPmdldFByb3BlcnR5
VmFsdWUoc2hvcnRoYW5kUHJvcGVydHkpOwotICAgIGlmICh2YWx1ZS5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgLy8gU29tZSBzaG9ydGhhbmRzIChsaWtlIGJvcmRlcikgcmV0dXJuIGEgbnVsbCB2YWx1
ZSwgc28gY29tcHV0ZSBhIHNob3J0aGFuZCB2YWx1ZS4KLSAgICAgICAgLy8gRklYTUU6IHJlbW92
ZSB0aGlzIHdoZW4gaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU4MjMg
aXMgZml4ZWQuCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdHlsZS0+bGVuZ3Ro
KCk7ICsraSkgewotICAgICAgICAgICAgU3RyaW5nIGluZGl2aWR1YWxQcm9wZXJ0eSA9IHN0eWxl
LT5pdGVtKGkpOwotICAgICAgICAgICAgaWYgKHN0eWxlLT5nZXRQcm9wZXJ0eVNob3J0aGFuZChp
bmRpdmlkdWFsUHJvcGVydHkpICE9IHNob3J0aGFuZFByb3BlcnR5KQotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKHN0eWxlLT5pc1Byb3BlcnR5SW1wbGljaXQoaW5k
aXZpZHVhbFByb3BlcnR5KSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IFN0cmluZyBpbmRpdmlkdWFsVmFsdWUgPSBzdHlsZS0+Z2V0UHJvcGVydHlWYWx1ZShpbmRpdmlk
dWFsUHJvcGVydHkpOwotICAgICAgICAgICAgaWYgKGluZGl2aWR1YWxWYWx1ZSA9PSAiaW5pdGlh
bCIpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAodmFsdWUubGVu
Z3RoKCkpCi0gICAgICAgICAgICAgICAgdmFsdWUuYXBwZW5kKCIgIik7Ci0gICAgICAgICAgICB2
YWx1ZS5hcHBlbmQoaW5kaXZpZHVhbFZhbHVlKTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1
cm4gdmFsdWU7Ci19Ci0KLVN0cmluZyBJbnNwZWN0b3JET01BZ2VudDo6c2hvcnRoYW5kUHJpb3Jp
dHkoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIGNvbnN0IFN0cmluZyYgc2hvcnRoYW5kUHJv
cGVydHkpCi17Ci0gICAgU3RyaW5nIHByaW9yaXR5ID0gc3R5bGUtPmdldFByb3BlcnR5UHJpb3Jp
dHkoc2hvcnRoYW5kUHJvcGVydHkpOwotICAgIGlmIChwcmlvcml0eS5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0eWxlLT5sZW5ndGgoKTsgKytpKSB7Ci0g
ICAgICAgICAgICBTdHJpbmcgaW5kaXZpZHVhbFByb3BlcnR5ID0gc3R5bGUtPml0ZW0oaSk7Ci0g
ICAgICAgICAgICBpZiAoc3R5bGUtPmdldFByb3BlcnR5U2hvcnRoYW5kKGluZGl2aWR1YWxQcm9w
ZXJ0eSkgIT0gc2hvcnRoYW5kUHJvcGVydHkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICBwcmlvcml0eSA9IHN0eWxlLT5nZXRQcm9wZXJ0eVByaW9yaXR5KGluZGl2aWR1
YWxQcm9wZXJ0eSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICBy
ZXR1cm4gcHJpb3JpdHk7Ci19Ci0KLWJvb2wgSW5zcGVjdG9yRE9NQWdlbnQ6OnJ1bGVBZmZlY3Rz
Tm9kZShDU1NTdHlsZVJ1bGUqIHJ1bGUsIE5vZGUqIG5vZGUpCi17Ci0gICAgaWYgKCFub2RlKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgUmVm
UHRyPE5vZGVMaXN0PiBub2RlcyA9IG5vZGUtPm93bmVyRG9jdW1lbnQoKS0+cXVlcnlTZWxlY3Rv
ckFsbChydWxlLT5zZWxlY3RvclRleHQoKSwgZWMpOwotICAgIGlmIChlYykKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBub2Rlcy0+bGVuZ3RoKCk7
ICsraSkgewotICAgICAgICBpZiAobm9kZXMtPml0ZW0oaSkgPT0gbm9kZSkKLSAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIE5vZGUqIEluc3Bl
Y3RvckRPTUFnZW50Ojpub2RlRm9yUGF0aChjb25zdCBTdHJpbmcmIHBhdGgpCiB7CiAgICAgLy8g
VGhlIHBhdGggaXMgb2YgZm9ybSAiMSxIVE1MLDIsQk9EWSwxLERJViIKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmggYi9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JET01BZ2VudC5oCmluZGV4IDg0Y2EwMjcuLmVkZDQwNWIgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRE9NQWdlbnQuaApAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCiAjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIkV2ZW50VGFyZ2V0
LmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yQ1NTU3RvcmUuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JW
YWx1ZXMuaCIKICNpbmNsdWRlICJOb2RlTGlzdC5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCkBAIC04
OCw5ICs4Nyw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIHZpcnR1YWwgdm9p
ZCBkaWRSZW1vdmVET01Ob2RlKE5vZGUqKSA9IDA7CiAgICAgICAgIH07CiAKLSAgICAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yRE9NQWdlbnQ+IGNyZWF0ZShJbnNwZWN0b3JDU1NTdG9y
ZSogY3NzU3RvcmUsIEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCkKKyAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8SW5zcGVjdG9yRE9NQWdlbnQ+IGNyZWF0ZShJbnNwZWN0b3JGcm9udGVuZCog
ZnJvbnRlbmQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5z
cGVjdG9yRE9NQWdlbnQoY3NzU3RvcmUsIGZyb250ZW5kKSk7CisgICAgICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IEluc3BlY3RvckRPTUFnZW50KGZyb250ZW5kKSk7CiAgICAgICAgIH0KIAog
ICAgICAgICBzdGF0aWMgY29uc3QgSW5zcGVjdG9yRE9NQWdlbnQqIGNhc3QoY29uc3QgRXZlbnRM
aXN0ZW5lciogbGlzdGVuZXIpCkBAIC0xMDAsNyArOTksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgICAgICAgICAgOiAwOwogICAgICAgICB9CiAKLSAgICAgICAgSW5zcGVjdG9yRE9N
QWdlbnQoSW5zcGVjdG9yQ1NTU3RvcmUqIGNzc1N0b3JlLCBJbnNwZWN0b3JGcm9udGVuZCogZnJv
bnRlbmQpOworICAgICAgICBJbnNwZWN0b3JET01BZ2VudChJbnNwZWN0b3JGcm9udGVuZCogZnJv
bnRlbmQpOwogICAgICAgICB+SW5zcGVjdG9yRE9NQWdlbnQoKTsKIAogICAgICAgICB2b2lkIHJl
c2V0KCk7CkBAIC0xMjQsMjAgKzEyMyw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
Ym9vbCBzaG91bGRCcmVha09uTm9kZVJlbW92YWwoTm9kZSogbm9kZSwgUGFzc1JlZlB0cjxJbnNw
ZWN0b3JWYWx1ZT4qIGRldGFpbHMpOwogICAgICAgICBib29sIHNob3VsZEJyZWFrT25BdHRyaWJ1
dGVNb2RpZmljYXRpb24oRWxlbWVudCogZWxlbWVudCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1
ZT4qIGRldGFpbHMpOwogCi0gICAgICAgIC8vIE1ldGhvZHMgY2FsbGVkIGZyb20gdGhlIGZyb250
ZW5kIGZvciBDU1Mgc3R5bGVzIGluc3BlY3Rpb24uCi0gICAgICAgIHZvaWQgZ2V0U3R5bGVzKGxv
bmcgbm9kZUlkLCBib29sIGF1dGhvck9ubHksIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHN0eWxl
cyk7Ci0gICAgICAgIHZvaWQgZ2V0QWxsU3R5bGVzKFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIHN0
eWxlcyk7Ci0gICAgICAgIHZvaWQgZ2V0SW5saW5lU3R5bGUobG9uZyBub2RlSWQsIFJlZlB0cjxJ
bnNwZWN0b3JWYWx1ZT4qIHN0eWxlcyk7Ci0gICAgICAgIHZvaWQgZ2V0Q29tcHV0ZWRTdHlsZShs
b25nIG5vZGVJZCwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogc3R5bGVzKTsKLSAgICAgICAgdm9p
ZCBnZXRTdHlsZVNoZWV0KGxvbmcgc3R5bGVTaGVldElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
Piogc3R5bGVTaGVldE9iamVjdCk7Ci0gICAgICAgIHZvaWQgZ2V0U3R5bGVTb3VyY2VEYXRhKGxv
bmcgc3R5bGVJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIGRhdGFPYmplY3QpOwotICAgICAg
ICB2b2lkIGFwcGx5U3R5bGVUZXh0KGxvbmcgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiBzdHlsZVRl
eHQsIGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBib29sKiBzdWNjZXNzLCBSZWZQdHI8SW5z
cGVjdG9yVmFsdWU+KiBzdHlsZU9iamVjdCk7Ci0gICAgICAgIHZvaWQgc2V0U3R5bGVUZXh0KGxv
bmcgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiBjc3NUZXh0LCBib29sKiBzdWNjZXNzKTsKLSAgICAg
ICAgdm9pZCBzZXRTdHlsZVByb3BlcnR5KGxvbmcgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sKiBzdWNjZXNzKTsKLSAgICAgICAgdm9pZCB0b2dn
bGVTdHlsZUVuYWJsZWQobG9uZyBzdHlsZUlkLCBjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwg
Ym9vbCBkaXNhYmxlZCwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogc3R5bGVPYmplY3QpOwotICAg
ICAgICB2b2lkIHNldFJ1bGVTZWxlY3Rvcihsb25nIHJ1bGVJZCwgY29uc3QgU3RyaW5nJiBzZWxl
Y3RvciwgbG9uZyBzZWxlY3RlZE5vZGVJZCwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcnVsZU9i
amVjdCwgYm9vbCogc2VsZWN0b3JBZmZlY3RzTm9kZSk7Ci0gICAgICAgIHZvaWQgYWRkUnVsZShj
b25zdCBTdHJpbmcmIHNlbGVjdG9yLCBsb25nIHNlbGVjdGVkTm9kZUlkLCBSZWZQdHI8SW5zcGVj
dG9yVmFsdWU+KiBydWxlT2JqZWN0LCBib29sKiBzZWxlY3RvckFmZmVjdHNOb2RlKTsKLQogICAg
ICAgICAvLyBNZXRob2RzIGNhbGxlZCBmcm9tIHRoZSBJbnNwZWN0b3JDb250cm9sbGVyLgogICAg
ICAgICB2b2lkIHNldERvY3VtZW50KERvY3VtZW50KiBkb2N1bWVudCk7CiAgICAgICAgIHZvaWQg
cmVsZWFzZURhbmdsaW5nTm9kZXMoKTsKQEAgLTE4MCwxMCArMTY1LDYgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBkZXNjcmlwdGlvbkZv
ckRPTUV2ZW50KE5vZGUqIHRhcmdldCwgbG9uZyBicmVha3BvaW50VHlwZSwgYm9vbCBpbnNlcnRp
b24pOwogICAgICAgICBTdHJpbmcgY3JlYXRlQnJlYWtwb2ludElkKGxvbmcgbm9kZUlkLCBsb25n
IHR5cGUpOwogCi0gICAgICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVj
dEZvckF0dHJpYnV0ZVN0eWxlcyhFbGVtZW50KiBlbGVtZW50KTsKLSAgICAgICAgUGFzc1JlZlB0
cjxJbnNwZWN0b3JBcnJheT4gYnVpbGRBcnJheUZvckNTU1J1bGVzKERvY3VtZW50KiBvd25lckRv
Y3VtZW50LCBDU1NSdWxlTGlzdCopOwotICAgICAgICBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5
PiBidWlsZEFycmF5Rm9yUHNldWRvRWxlbWVudHMoRWxlbWVudCogZWxlbWVudCwgYm9vbCBhdXRo
b3JPbmx5KTsKLQogICAgICAgICBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmpl
Y3RGb3JOb2RlKE5vZGUqIG5vZGUsIGludCBkZXB0aCwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKTsK
ICAgICAgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYnVpbGRBcnJheUZvckVsZW1lbnRB
dHRyaWJ1dGVzKEVsZW1lbnQqIGVsZW1lbnQpOwogICAgICAgICBQYXNzUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBidWlsZEFycmF5Rm9yQ29udGFpbmVyQ2hpbGRyZW4oTm9kZSogY29udGFpbmVyLCBp
bnQgZGVwdGgsIE5vZGVUb0lkTWFwKiBub2Rlc01hcCk7CkBAIC0xOTksMjUgKzE4MCwxNSBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgaXNXaGl0ZXNwYWNlKE5vZGUqIG5vZGUp
OwogCiAgICAgICAgIERvY3VtZW50KiBtYWluRnJhbWVEb2N1bWVudCgpIGNvbnN0OwotICAgICAg
ICBJbnNwZWN0b3JDU1NTdG9yZSogY3NzU3RvcmUoKSB7IHJldHVybiBtX2Nzc1N0b3JlOyB9CiAK
ICAgICAgICAgdm9pZCBvbk1hdGNoSm9ic1RpbWVyKFRpbWVyPEluc3BlY3RvckRPTUFnZW50Piop
OwogICAgICAgICB2b2lkIHJlcG9ydE5vZGVzQXNTZWFyY2hSZXN1bHRzKExpc3RIYXNoU2V0PE5v
ZGUqPiYgcmVzdWx0Q29sbGVjdG9yKTsKIAotICAgICAgICBQYXNzUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gYnVpbGRPYmplY3RGb3JTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiwgYm9vbCBiaW5k
KTsKLSAgICAgICAgdm9pZCBwb3B1bGF0ZU9iamVjdFdpdGhTdHlsZVByb3BlcnRpZXMoQ1NTU3R5
bGVEZWNsYXJhdGlvbiosIEluc3BlY3Rvck9iamVjdCogcmVzdWx0KTsKLSAgICAgICAgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yUnVsZShEb2N1bWVudCogb3duZXJE
b2N1bWVudCwgQ1NTU3R5bGVSdWxlKik7Ci0gICAgICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBidWlsZE9iamVjdEZvclN0eWxlU2hlZXQoRG9jdW1lbnQqIG93bmVyRG9jdW1lbnQsIENT
U1N0eWxlU2hlZXQqKTsKLSAgICAgICAgVmVjdG9yPFN0cmluZz4gbG9uZ2hhbmRQcm9wZXJ0aWVz
KENTU1N0eWxlRGVjbGFyYXRpb24qLCBjb25zdCBTdHJpbmcmIHNob3J0aGFuZFByb3BlcnR5KTsK
LSAgICAgICAgU3RyaW5nIHNob3J0aGFuZFZhbHVlKENTU1N0eWxlRGVjbGFyYXRpb24qLCBjb25z
dCBTdHJpbmcmIHNob3J0aGFuZFByb3BlcnR5KTsKLSAgICAgICAgU3RyaW5nIHNob3J0aGFuZFBy
aW9yaXR5KENTU1N0eWxlRGVjbGFyYXRpb24qLCBjb25zdCBTdHJpbmcmIHNob3J0aGFuZFByb3Bl
cnR5KTsKLSAgICAgICAgYm9vbCBydWxlQWZmZWN0c05vZGUoQ1NTU3R5bGVSdWxlKiwgTm9kZSop
OwogICAgICAgICBOb2RlKiBub2RlRm9yUGF0aChjb25zdCBTdHJpbmcmIHBhdGgpOwogICAgICAg
ICBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB0b0FycmF5KGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBkYXRhKTsKIAogICAgICAgICB2b2lkIGRpc2NhcmRCaW5kaW5ncygpOwogCi0gICAgICAgIElu
c3BlY3RvckNTU1N0b3JlKiBtX2Nzc1N0b3JlOwogICAgICAgICBJbnNwZWN0b3JGcm9udGVuZCog
bV9mcm9udGVuZDsKICAgICAgICAgRE9NTGlzdGVuZXIqIG1fZG9tTGlzdGVuZXI7CiAgICAgICAg
IE5vZGVUb0lkTWFwIG1fZG9jdW1lbnROb2RlVG9JZE1hcDsK
</data>
<flag name="review"
          id="66069"
          type_id="1"
          status="+"
          setter="yurys"
    />
          </attachment>
      

    </bug>

</bugzilla>