<?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>33616</bug_id>
          
          <creation_ts>2010-01-13 12:22:12 -0800</creation_ts>
          <short_desc>Inspector interface allows insecure data transfer</short_desc>
          <delta_ts>2010-02-04 01:40:06 -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>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</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="Geoffrey Garen">ggaren</reporter>
          <assigned_to name="Yury Semikhatsky">yurys</assigned_to>
          <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>ukai</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>180334</commentid>
    <comment_count>0</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-01-13 12:22:12 -0800</bug_when>
    <thetext>From https://bugs.webkit.org/show_bug.cgi?id=33469:

&gt; 2. I don&apos;t think interfaces like this are safe:
&gt; 
&gt; +    ScriptObject injectedScriptFor(ScriptState*);
&gt; +    ScriptObject injectedScriptForId(long);
&gt; 
&gt; Because you&apos;re giving out a generic object, the client of the interface can do
&gt; anything with the object, including passing it unsafe data. It would be better
&gt; if the C++ object wrapping the &quot;injected script&quot; controlled all interaction
&gt; with it, to ensure that no non-primitive data leaked across the boundary.
Eventually we will create a typed interface for that object. Currently it is
used only as ScriptFunctionCall argument but we should restrict the set of
functions that can be called on that object, it would make the injected script
interface clearer. We&apos;ve already done similar thing in InspectorFrontend.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187321</commentid>
    <comment_count>1</comment_count>
      <attachid>48019</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-02-03 05:17:47 -0800</bug_when>
    <thetext>Created attachment 48019
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187329</commentid>
    <comment_count>2</comment_count>
      <attachid>48019</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-02-03 05:55:20 -0800</bug_when>
    <thetext>Comment on attachment 48019
patch

&gt; +    ScriptFunctionCall function(scriptState, m_injectedScriptObject, &quot;getCallFrames&quot;);

&quot;getCallFrames&quot; -&gt; &quot;callFrames&quot; ?

&gt; +    ScriptValue callFramesValue = function.call();
&gt; +    return callFramesValue.toString(scriptState);
&gt; +}
&gt; +
&gt; +String InjectedScript::wrapAndStringify(ScriptValue value)
&gt; +{
&gt; +    ASSERT(!hasNoValue());
&gt; +    ScriptState* scriptState = m_injectedScriptObject.scriptState();
&gt; +    ScriptFunctionCall wrapFunction(scriptState, m_injectedScriptObject, &quot;wrapAndStringifyObject&quot;);
&gt; +    wrapFunction.appendArgument(value);
&gt; +    wrapFunction.appendArgument(&quot;console&quot;);

Should this be reflected in the method name? wrapAndStringifyForConsole?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187419</commentid>
    <comment_count>3</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-02-03 10:12:06 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 48019 [details])
&gt; &gt; +    ScriptFunctionCall function(scriptState, m_injectedScriptObject, &quot;getCallFrames&quot;);
&gt; 
&gt; &quot;getCallFrames&quot; -&gt; &quot;callFrames&quot; ?
&gt; 
Done.

&gt; &gt; +    ScriptValue callFramesValue = function.call();
&gt; &gt; +    return callFramesValue.toString(scriptState);
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +String InjectedScript::wrapAndStringify(ScriptValue value)
&gt; &gt; +{
&gt; &gt; +    ASSERT(!hasNoValue());
&gt; &gt; +    ScriptState* scriptState = m_injectedScriptObject.scriptState();
&gt; &gt; +    ScriptFunctionCall wrapFunction(scriptState, m_injectedScriptObject, &quot;wrapAndStringifyObject&quot;);
&gt; &gt; +    wrapFunction.appendArgument(value);
&gt; &gt; +    wrapFunction.appendArgument(&quot;console&quot;);
&gt; 
&gt; Should this be reflected in the method name? wrapAndStringifyForConsole?
Done.


Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	WebCore/ChangeLog
	M	WebCore/WebCore.gypi
	M	WebCore/WebCore.pro
	M	WebCore/WebCore.vcproj/WebCore.vcproj
	M	WebCore/WebCore.xcodeproj/project.pbxproj
	M	WebCore/bindings/js/JSInjectedScriptHostCustom.cpp
	M	WebCore/bindings/v8/custom/V8InjectedScriptHostCustom.cpp
	A	WebCore/inspector/InjectedScript.cpp
	A	WebCore/inspector/InjectedScript.h
	M	WebCore/inspector/InjectedScriptHost.cpp
	M	WebCore/inspector/InjectedScriptHost.h
	M	WebCore/inspector/InspectorBackend.cpp
	M	WebCore/inspector/InspectorController.cpp
	M	WebCore/inspector/InspectorController.h
	M	WebCore/inspector/InspectorFrontend.cpp
	M	WebCore/inspector/front-end/InjectedScript.js
Committed r54285</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187659</commentid>
    <comment_count>4</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-02-04 00:12:35 -0800</bug_when>
    <thetext>Reverted because it broke compilation on Linux GTK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187684</commentid>
    <comment_count>5</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-02-04 01:39:45 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Reverted because it broke compilation on Linux GTK.

Committed r54334 with the new files added to WebCore/GNUmakefile.am</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48019</attachid>
            <date>2010-02-03 05:17:47 -0800</date>
            <delta_ts>2010-02-03 05:55:19 -0800</delta_ts>
            <desc>patch</desc>
            <filename>injected-script-api.patch</filename>
            <type>text/plain</type>
            <size>33244</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MDFhZTU5MS4uNmVjMGMzZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MiBAQAorMjAxMC0wMi0wMyAgWXVyeSBTZW1pa2hh
dHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBQcm92aWRlIHN0cm9uZ2x5IHR5cGVkIEMrKyBpbnRlcmZhY2Ug
Zm9yIGluc3BlY3RvcidzIGluamVjdGVkIHNjcmlwdC4KKworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzM2MTYKKworICAgICAgICAqIFdlYkNvcmUuZ3lw
aToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHRIb3N0OjppbmplY3RlZFNjcmlwdEZvcik6
CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9t
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0SG9zdDo6aW5qZWN0ZWRTY3Jp
cHRGb3IpOgorICAgICAgICAqIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHQ6OkluamVjdGVkU2NyaXB0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0OjpkaXNwYXRjaCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbmplY3RlZFNjcmlwdDo6Y2FsbEZyYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3Rl
ZFNjcmlwdDo6d3JhcEFuZFN0cmluZ2lmeSk6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3RlZFNj
cmlwdDo6cmVsZWFzZVdyYXBwZXJPYmplY3RHcm91cCk6CisgICAgICAgICogaW5zcGVjdG9yL0lu
amVjdGVkU2NyaXB0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHQ6
OkluamVjdGVkU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0Ojp+SW5q
ZWN0ZWRTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHQ6Omhhc05vVmFs
dWUpOgorICAgICAgICAqIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHRIb3N0OjppbmplY3RlZFNjcmlwdEZvcklkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0SG9zdDo6cmVsZWFzZVdyYXBwZXJPYmplY3RH
cm91cCk6CisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5oOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckJhY2tlbmQ6OmRpc3BhdGNoT25JbmplY3RlZFNjcmlwdCk6CisgICAgICAgICogaW5z
cGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JDb250cm9sbGVyOjp+SW5zcGVjdG9yQ29udHJvbGxlcik6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0ZWRQYWdlRGVzdHJveWVkKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OndpbmRvd1NjcmlwdE9iamVjdEF2YWls
YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpzY3JpcHRPYmpl
Y3RSZWFkeSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRGcm9u
dGVuZFByb3h5T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6
OmNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmdldFByb2Zp
bGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5hYmxlRGVidWdn
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkUGF1c2UpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6aW5qZWN0ZWRTY3JpcHRGb3JO
b2RlSWQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpmcm9udGVuZFNjcmlwdFN0YXRlKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yRnJvbnRlbmQ6OmFkZENvbnNvbGVNZXNzYWdlKToKKwogMjAxMC0wMi0w
MiAgS2VudCBUYW11cmEgIDx0a2VudEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgRGFyaW4gQWRsZXIuCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1dlYkNv
cmUvV2ViQ29yZS5neXBpCmluZGV4IGQ4MmE0ZTEuLjhlNzU4ZDggMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvV2ViQ29yZS5neXBpCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0xNTc5LDYgKzE1
NzksOCBAQAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JDbGllbnQuaCcsCiAgICAg
ICAgICAgICAnaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmNwcCcsCiAgICAgICAgICAgICAnaW5z
cGVjdG9yL0NvbnNvbGVNZXNzYWdlLmgnLAorICAgICAgICAgICAgJ2luc3BlY3Rvci9JbmplY3Rl
ZFNjcmlwdC5jcHAnLAorICAgICAgICAgICAgJ2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5oJywK
ICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcCcsCiAgICAgICAg
ICAgICAnaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5oJywKICAgICAgICAgICAgICdpbnNw
ZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5jcHAnLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3Jl
LnBybyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggZGFjYjhkNS4uY2U4ZDBjZCAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC02
NjMsNiArNjYzLDcgQEAgU09VUkNFUyArPSBcCiAgICAgaHRtbC9QcmVsb2FkU2Nhbm5lci5jcHAg
XAogICAgIGh0bWwvVmFsaWRpdHlTdGF0ZS5jcHAgXAogICAgIGluc3BlY3Rvci9Db25zb2xlTWVz
c2FnZS5jcHAgXAorICAgIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5jcHAgXAogICAgIGluc3Bl
Y3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQmFj
a2VuZC5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCBcCkBAIC0x
MzU0LDYgKzEzNTUsNyBAQCBIRUFERVJTICs9IFwKICAgICBodG1sL1RpbWVSYW5nZXMuaCBcCiAg
ICAgaHRtbC9WYWxpZGl0eVN0YXRlLmggXAogICAgIGluc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5o
IFwKKyAgICBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuaCBcCiAgICAgaW5zcGVjdG9yL0luamVj
dGVkU2NyaXB0SG9zdC5oIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5oIFwKICAg
ICBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qCmluZGV4IGMzMWRlN2QuLjhiY2NhODMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvagpAQCAtNDI1NTcsNiArNDI1NTcsMTQgQEAKIAkJCQk+DQogCQkJPC9G
aWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluamVjdGVk
U2NyaXB0LmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXGluc3BlY3RvclxJbmplY3RlZFNjcmlwdC5oIg0KKwkJCQk+DQorCQkJPC9GaWxl
Pg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluamVjdGVkU2Ny
aXB0SG9zdC5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAyODMyNjhmLi5mMThjNTFjIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDgxMSw2ICs0ODExLDggQEAKIAkJ
RUQ1MDFEQzYwQjI0OUYyOTAwQUUxOEQ5IC8qIEVkaXRvck1hYy5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEVENTAxREM1MEIyNDlGMjkwMEFFMThEOSAv
KiBFZGl0b3JNYWMubW0gKi87IH07CiAJCUVERTNBNTAwMEM3QTQzMDYwMDk1NkEzNyAvKiBDb2xv
ck1hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRURF
M0E0RkYwQzdBNDMwNjAwOTU2QTM3IC8qIENvbG9yTWFjLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRURFQzk4MDMwQUVEN0UxNzAwNTkxMzdGIC8q
IFdlYkNvcmVQcmVmaXguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEVERUM5ODAyMEFFRDdFMTcwMDU5MTM3RiAvKiBXZWJDb3JlUHJlZml4LmggKi87IH07
CisJCUYzNjQ0QUZGMTExOTgwNTkwMEUwRDUzNyAvKiBJbmplY3RlZFNjcmlwdC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGMzY0NEFGRDExMTk4MDU5
MDBFMEQ1MzcgLyogSW5qZWN0ZWRTY3JpcHQuY3BwICovOyB9OworCQlGMzY0NEIwMDExMTk4MDU5
MDBFMEQ1MzcgLyogSW5qZWN0ZWRTY3JpcHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEYzNjQ0QUZFMTExOTgwNTkwMEUwRDUzNyAvKiBJbmplY3RlZFNj
cmlwdC5oICovOyB9OwogCQlGNEVBRjRBRTEwQzc0MkIxMDA5MTAwRDMgLyogT3BlblR5cGVTYW5p
dGl6ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RjRFQUY0QUMxMEM3NDJCMTAwOTEwMEQzIC8qIE9wZW5UeXBlU2FuaXRpemVyLmNwcCAqLzsgfTsK
IAkJRjRFQUY0QUYxMEM3NDJCMTAwOTEwMEQzIC8qIE9wZW5UeXBlU2FuaXRpemVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNEVBRjRBRDEwQzc0MkIx
MDA5MTAwRDMgLyogT3BlblR5cGVTYW5pdGl6ZXIuaCAqLzsgfTsKIAkJRjVDMDQxREEwRkZDQTdD
RTAwODM5RDRBIC8qIEhUTUxEYXRhTGlzdEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjVDMDQxRDcwRkZDQTdDRTAwODM5RDRBIC8qIEhU
TUxEYXRhTGlzdEVsZW1lbnQuY3BwICovOyB9OwpAQCAtMTAwODcsNiArMTAwODksOCBAQAogCQlF
RDUwMURDNTBCMjQ5RjI5MDBBRTE4RDkgLyogRWRpdG9yTWFjLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IEVkaXRvck1hYy5tbTsgcGF0aCA9IG1hYy9FZGl0b3JN
YWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUVERTNBNEZGMEM3QTQzMDYwMDk1
NkEzNyAvKiBDb2xvck1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2xv
ck1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFREVDOTgwMjBBRUQ3RTE3MDA1
OTEzN0YgLyogV2ViQ29yZVByZWZpeC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2ViQ29yZVByZWZpeC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDQ7
IHVzZXNUYWJzID0gMDsgfTsKKwkJRjM2NDRBRkQxMTE5ODA1OTAwRTBENTM3IC8qIEluamVjdGVk
U2NyaXB0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluamVjdGVk
U2NyaXB0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjM2NDRBRkUxMTE5ODA1
OTAwRTBENTM3IC8qIEluamVjdGVkU2NyaXB0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEluamVjdGVkU2NyaXB0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0
RUFGNEFDMTBDNzQyQjEwMDkxMDBEMyAvKiBPcGVuVHlwZVNhbml0aXplci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBPcGVuVHlwZVNhbml0aXplci5jcHA7IHBhdGgg
PSBvcGVudHlwZS9PcGVuVHlwZVNhbml0aXplci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUY0RUFGNEFEMTBDNzQyQjEwMDkxMDBEMyAvKiBPcGVuVHlwZVNhbml0aXplci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBPcGVuVHlwZVNhbml0aXplci5oOyBwYXRo
ID0gb3BlbnR5cGUvT3BlblR5cGVTYW5pdGl6ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRjUyM0QyM0IwMkRFNDM5NjAxODYzNUNBIC8qIEhUTUxEb2N1bWVudC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIVE1MRG9j
dW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJz
ID0gMDsgfTsKQEAgLTEwNTg2LDYgKzEwNTkwLDggQEAKIAkJCQkxQzgxQjk1OTBFOTczMzA4MDAy
NjZFMDcgLyogZnJvbnQtZW5kICovLAogCQkJCTQxRjA2MThEMEY1RjA2OTgwMEEwN0VBQyAvKiBD
b25zb2xlTWVzc2FnZS5jcHAgKi8sCiAJCQkJNDFGMDYxOEMwRjVGMDY5ODAwQTA3RUFDIC8qIENv
bnNvbGVNZXNzYWdlLmggKi8sCisJCQkJRjM2NDRBRkQxMTE5ODA1OTAwRTBENTM3IC8qIEluamVj
dGVkU2NyaXB0LmNwcCAqLywKKwkJCQlGMzY0NEFGRTExMTk4MDU5MDBFMEQ1MzcgLyogSW5qZWN0
ZWRTY3JpcHQuaCAqLywKIAkJCQk3QTBFNzZGNjEwQkYwOEVEMDBBMDI3NkUgLyogSW5qZWN0ZWRT
Y3JpcHRIb3N0LmNwcCAqLywKIAkJCQk3QTBFNzZGNzEwQkYwOEVEMDBBMDI3NkUgLyogSW5qZWN0
ZWRTY3JpcHRIb3N0LmggKi8sCiAJCQkJN0EwRTc2RjgxMEJGMDhFRDAwQTAyNzZFIC8qIEluamVj
dGVkU2NyaXB0SG9zdC5pZGwgKi8sCkBAIC0xODQ4Nyw2ICsxODQ5Myw3IEBACiAJCQkJOTdERDRE
ODcwRkRGNEQ2RTAwRUNGOUE0IC8qIFhTU0F1ZGl0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTg0
RDBDNDA2MTExNUYxRUEwMDE4QUEzNCAvKiBBZmZpbmVUcmFuc2Zvcm0uaCBpbiBIZWFkZXJzICov
LAogCQkJCUI3MUZFNkRGMTEwOTFDQjMwMERBRUY3NyAvKiBQcmludENvbnRleHQuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUYzNjQ0QjAwMTExOTgwNTkwMEUwRDUzNyAvKiBJbmplY3RlZFNjcmlwdC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vz
c2luZyA9IDA7CiAJCX07CkBAIC0yMDY2Myw2ICsyMDY3MCw3IEBACiAJCQkJOTdERDREODYwRkRG
NEQ2RTAwRUNGOUE0IC8qIFhTU0F1ZGl0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODREMEM0
MDQxMTE1RjFENDAwMThBQTM0IC8qIEFmZmluZVRyYW5zZm9ybS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlCNzc2RDQzRDExMDQ1Mjc1MDBCRUIwRUMgLyogUHJpbnRDb250ZXh0LmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCUYzNjQ0QUZGMTExOTgwNTkwMEUwRDUzNyAvKiBJbmplY3RlZFNjcmlwdC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9j
ZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbmpl
Y3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luamVjdGVk
U2NyaXB0SG9zdEN1c3RvbS5jcHAKaW5kZXggZDM4ZDhlZS4uOTZjNWM0MyAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luamVjdGVkU2NyaXB0SG9zdEN1c3RvbS5jcHAKKysrIGIv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luamVjdGVkU2NyaXB0SG9zdEN1c3RvbS5jcHAKQEAgLTQz
LDYgKzQzLDcgQEAKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiRnJhbWUu
aCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0Lmgi
CiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRIb3N0LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29u
dHJvbGxlci5oIgogI2luY2x1ZGUgIkluc3BlY3RvclJlc291cmNlLmgiCkBAIC0xOTQsMjAgKzE5
NSwyMSBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpzZWxlY3RET01TdG9yYWdlKEV4
ZWNTdGF0ZSosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB9CiAjZW5kaWYKIAotU2NyaXB0T2JqZWN0
IEluamVjdGVkU2NyaXB0SG9zdDo6aW5qZWN0ZWRTY3JpcHRGb3IoU2NyaXB0U3RhdGUqIHNjcmlw
dFN0YXRlKQorSW5qZWN0ZWRTY3JpcHQgSW5qZWN0ZWRTY3JpcHRIb3N0OjppbmplY3RlZFNjcmlw
dEZvcihTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUpCiB7CiAgICAgSlNMb2NrIGxvY2soU2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKICAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
c3RhdGljX2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzY3JpcHRTdGF0ZS0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpKTsKICAgICBKU09iamVjdCogaW5qZWN0ZWRTY3JpcHQgPSBnbG9iYWxPYmplY3Qt
PmluamVjdGVkU2NyaXB0KCk7CiAgICAgaWYgKGluamVjdGVkU2NyaXB0KQotICAgICAgICByZXR1
cm4gU2NyaXB0T2JqZWN0KHNjcmlwdFN0YXRlLCBpbmplY3RlZFNjcmlwdCk7CisgICAgICAgIHJl
dHVybiBJbmplY3RlZFNjcmlwdChTY3JpcHRPYmplY3Qoc2NyaXB0U3RhdGUsIGluamVjdGVkU2Ny
aXB0KSk7CiAKICAgICBBU1NFUlQoIW1faW5qZWN0ZWRTY3JpcHRTb3VyY2UuaXNFbXB0eSgpKTsK
ICAgICBTY3JpcHRPYmplY3QgaW5qZWN0ZWRTY3JpcHRPYmplY3QgPSBjcmVhdGVJbmplY3RlZFNj
cmlwdChtX2luamVjdGVkU2NyaXB0U291cmNlLCB0aGlzLCBzY3JpcHRTdGF0ZSwgbV9uZXh0SW5q
ZWN0ZWRTY3JpcHRJZCk7CiAgICAgZ2xvYmFsT2JqZWN0LT5zZXRJbmplY3RlZFNjcmlwdChpbmpl
Y3RlZFNjcmlwdE9iamVjdC5qc09iamVjdCgpKTsKLSAgICBtX2lkVG9JbmplY3RlZFNjcmlwdC5z
ZXQobV9uZXh0SW5qZWN0ZWRTY3JpcHRJZCwgaW5qZWN0ZWRTY3JpcHRPYmplY3QpOworICAgIElu
amVjdGVkU2NyaXB0IHJlc3VsdChpbmplY3RlZFNjcmlwdE9iamVjdCk7CisgICAgbV9pZFRvSW5q
ZWN0ZWRTY3JpcHQuc2V0KG1fbmV4dEluamVjdGVkU2NyaXB0SWQsIHJlc3VsdCk7CiAgICAgbV9u
ZXh0SW5qZWN0ZWRTY3JpcHRJZCsrOwotICAgIHJldHVybiBpbmplY3RlZFNjcmlwdE9iamVjdDsK
KyAgICByZXR1cm4gcmVzdWx0OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEluamVjdGVkU2NyaXB0SG9zdEN1c3Rv
bS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEluamVjdGVkU2NyaXB0SG9zdEN1
c3RvbS5jcHAKaW5kZXggZjNkYWM5Yy4uZjI5NGI0ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwCisrKyBiL1dlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcApAQCAt
MzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkRhdGFiYXNl
LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJJbmplY3RlZFNjcmlwdC5oIgogI2lu
Y2x1ZGUgIkluamVjdGVkU2NyaXB0SG9zdC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xs
ZXIuaCIKICNpbmNsdWRlICJOb2RlLmgiCkBAIC0xOTMsNyArMTk0LDcgQEAgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IFY4SW5qZWN0ZWRTY3JpcHRIb3N0OjpzZWxlY3RET01TdG9yYWdlQ2FsbGJhY2so
Y29uc3Qgdjg6OkEKIH0KICNlbmRpZgogCi1TY3JpcHRPYmplY3QgSW5qZWN0ZWRTY3JpcHRIb3N0
OjppbmplY3RlZFNjcmlwdEZvcihTY3JpcHRTdGF0ZSogaW5zcGVjdGVkU2NyaXB0U3RhdGUpCitJ
bmplY3RlZFNjcmlwdCBJbmplY3RlZFNjcmlwdEhvc3Q6OmluamVjdGVkU2NyaXB0Rm9yKFNjcmlw
dFN0YXRlKiBpbnNwZWN0ZWRTY3JpcHRTdGF0ZSkKIHsKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFu
ZGxlU2NvcGU7CiAgICAgdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBjb250ZXh0ID0gaW5zcGVjdGVk
U2NyaXB0U3RhdGUtPmNvbnRleHQoKTsKQEAgLTIwNywxNCArMjA4LDE1IEBAIFNjcmlwdE9iamVj
dCBJbmplY3RlZFNjcmlwdEhvc3Q6OmluamVjdGVkU2NyaXB0Rm9yKFNjcmlwdFN0YXRlKiBpbnNw
ZWN0ZWRTY3JpcHRTCiAgICAgdjg6OkxvY2FsPHY4OjpTdHJpbmc+IGtleSA9IHY4OjpTdHJpbmc6
Ok5ldygiRGV2dG9vbHNfSW5qZWN0ZWRTY3JpcHQiKTsKICAgICB2ODo6TG9jYWw8djg6OlZhbHVl
PiB2YWwgPSBnbG9iYWwtPkdldEhpZGRlblZhbHVlKGtleSk7CiAgICAgaWYgKCF2YWwuSXNFbXB0
eSgpICYmIHZhbC0+SXNPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIFNjcmlwdE9iamVjdChpbnNw
ZWN0ZWRTY3JpcHRTdGF0ZSwgdjg6OkxvY2FsPHY4OjpPYmplY3Q+OjpDYXN0KHZhbCkpOworICAg
ICAgICByZXR1cm4gSW5qZWN0ZWRTY3JpcHQoU2NyaXB0T2JqZWN0KGluc3BlY3RlZFNjcmlwdFN0
YXRlLCB2ODo6TG9jYWw8djg6Ok9iamVjdD46OkNhc3QodmFsKSkpOwogCiAgICAgQVNTRVJUKCFt
X2luamVjdGVkU2NyaXB0U291cmNlLmlzRW1wdHkoKSk7CiAgICAgU2NyaXB0T2JqZWN0IGluamVj
dGVkU2NyaXB0T2JqZWN0ID0gY3JlYXRlSW5qZWN0ZWRTY3JpcHQobV9pbmplY3RlZFNjcmlwdFNv
dXJjZSwgdGhpcywgaW5zcGVjdGVkU2NyaXB0U3RhdGUsIG1fbmV4dEluamVjdGVkU2NyaXB0SWQp
OworICAgIEluamVjdGVkU2NyaXB0IHJlc3VsdChpbmplY3RlZFNjcmlwdE9iamVjdCk7CiAgICAg
bV9pZFRvSW5qZWN0ZWRTY3JpcHQuc2V0KG1fbmV4dEluamVjdGVkU2NyaXB0SWQsIGluamVjdGVk
U2NyaXB0T2JqZWN0KTsKICAgICArK21fbmV4dEluamVjdGVkU2NyaXB0SWQ7CiAgICAgZ2xvYmFs
LT5TZXRIaWRkZW5WYWx1ZShrZXksIGluamVjdGVkU2NyaXB0T2JqZWN0LnY4T2JqZWN0KCkpOwot
ICAgIHJldHVybiBpbmplY3RlZFNjcmlwdE9iamVjdDsKKyAgICByZXR1cm4gcmVzdWx0OwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9J
bmplY3RlZFNjcmlwdC5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBhZGVhYgotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmNwcApAQCAtMCwwICsxLDk1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisg
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0LmgiCisKKyNp
ZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNs
dWRlICJTY3JpcHRGdW5jdGlvbkNhbGwuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJbmpl
Y3RlZFNjcmlwdDo6SW5qZWN0ZWRTY3JpcHQoU2NyaXB0T2JqZWN0IGluamVjdGVkU2NyaXB0T2Jq
ZWN0KQorICAgIDogbV9pbmplY3RlZFNjcmlwdE9iamVjdChpbmplY3RlZFNjcmlwdE9iamVjdCkK
K3sKK30KKwordm9pZCBJbmplY3RlZFNjcmlwdDo6ZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0
IFN0cmluZyYgbWV0aG9kTmFtZSwgY29uc3QgU3RyaW5nJiBhcmd1bWVudHMsIGJvb2wgYXN5bmMs
IFN0cmluZyogcmVzdWx0LCBib29sKiBoYWRFeGNlcHRpb24pIAoreworICAgIEFTU0VSVCghaGFz
Tm9WYWx1ZSgpKTsKKyAgICBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUgPSBtX2luamVjdGVkU2Ny
aXB0T2JqZWN0LnNjcmlwdFN0YXRlKCk7CisgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9u
KHNjcmlwdFN0YXRlLCBtX2luamVjdGVkU2NyaXB0T2JqZWN0LCAiZGlzcGF0Y2giKTsKKyAgICBm
dW5jdGlvbi5hcHBlbmRBcmd1bWVudChtZXRob2ROYW1lKTsKKyAgICBmdW5jdGlvbi5hcHBlbmRB
cmd1bWVudChhcmd1bWVudHMpOworICAgIGlmIChhc3luYykKKyAgICAgICAgZnVuY3Rpb24uYXBw
ZW5kQXJndW1lbnQoY2FsbElkKTsKKyAgICAqaGFkRXhjZXB0aW9uID0gZmFsc2U7CisgICAgU2Ny
aXB0VmFsdWUgcmVzdWx0VmFsdWUgPSBmdW5jdGlvbi5jYWxsKCpoYWRFeGNlcHRpb24pOworICAg
IGlmICghKmhhZEV4Y2VwdGlvbikKKyAgICAgICAgKnJlc3VsdCA9IHJlc3VsdFZhbHVlLnRvU3Ry
aW5nKHNjcmlwdFN0YXRlKTsKK30KKworU3RyaW5nIEluamVjdGVkU2NyaXB0OjpjYWxsRnJhbWVz
KCkKK3sKKyAgICBBU1NFUlQoIWhhc05vVmFsdWUoKSk7CisgICAgU2NyaXB0U3RhdGUqIHNjcmlw
dFN0YXRlID0gbV9pbmplY3RlZFNjcmlwdE9iamVjdC5zY3JpcHRTdGF0ZSgpOworICAgIFNjcmlw
dEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihzY3JpcHRTdGF0ZSwgbV9pbmplY3RlZFNjcmlwdE9iamVj
dCwgImdldENhbGxGcmFtZXMiKTsKKyAgICBTY3JpcHRWYWx1ZSBjYWxsRnJhbWVzVmFsdWUgPSBm
dW5jdGlvbi5jYWxsKCk7CisgICAgcmV0dXJuIGNhbGxGcmFtZXNWYWx1ZS50b1N0cmluZyhzY3Jp
cHRTdGF0ZSk7Cit9CisKK1N0cmluZyBJbmplY3RlZFNjcmlwdDo6d3JhcEFuZFN0cmluZ2lmeShT
Y3JpcHRWYWx1ZSB2YWx1ZSkKK3sKKyAgICBBU1NFUlQoIWhhc05vVmFsdWUoKSk7CisgICAgU2Ny
aXB0U3RhdGUqIHNjcmlwdFN0YXRlID0gbV9pbmplY3RlZFNjcmlwdE9iamVjdC5zY3JpcHRTdGF0
ZSgpOworICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCB3cmFwRnVuY3Rpb24oc2NyaXB0U3RhdGUsIG1f
aW5qZWN0ZWRTY3JpcHRPYmplY3QsICJ3cmFwQW5kU3RyaW5naWZ5T2JqZWN0Iik7CisgICAgd3Jh
cEZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHZhbHVlKTsKKyAgICB3cmFwRnVuY3Rpb24uYXBwZW5k
QXJndW1lbnQoImNvbnNvbGUiKTsKKyAgICBTY3JpcHRWYWx1ZSByID0gd3JhcEZ1bmN0aW9uLmNh
bGwoKTsKKyAgICBpZiAoci5oYXNOb1ZhbHVlKCkpCisgICAgICAgIHJldHVybiAiIjsKKyAgICBy
ZXR1cm4gci50b1N0cmluZyhzY3JpcHRTdGF0ZSk7CisgICAgCit9CisKK3ZvaWQgSW5qZWN0ZWRT
Y3JpcHQ6OnJlbGVhc2VXcmFwcGVyT2JqZWN0R3JvdXAoY29uc3QgU3RyaW5nJiBvYmplY3RHcm91
cCkKK3sKKyAgICBBU1NFUlQoIWhhc05vVmFsdWUoKSk7CisgICAgU2NyaXB0U3RhdGUqIHNjcmlw
dFN0YXRlID0gbV9pbmplY3RlZFNjcmlwdE9iamVjdC5zY3JpcHRTdGF0ZSgpOworICAgIFNjcmlw
dEZ1bmN0aW9uQ2FsbCByZWxlYXNlRnVuY3Rpb24oc2NyaXB0U3RhdGUsIG1faW5qZWN0ZWRTY3Jp
cHRPYmplY3QsICJyZWxlYXNlV3JhcHBlck9iamVjdEdyb3VwIik7CisgICAgcmVsZWFzZUZ1bmN0
aW9uLmFwcGVuZEFyZ3VtZW50KG9iamVjdEdyb3VwKTsKKyAgICByZWxlYXNlRnVuY3Rpb24uY2Fs
bCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5T
UEVDVE9SKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuaCBi
L1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uZjZmNTg3MgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaW5zcGVj
dG9yL0luamVjdGVkU2NyaXB0LmgKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW5qZWN0ZWRTY3Jp
cHRfaAorI2RlZmluZSBJbmplY3RlZFNjcmlwdF9oCisKKyNpbmNsdWRlICJJbmplY3RlZFNjcmlw
dEhvc3QuaCIKKyNpbmNsdWRlICJTY3JpcHRPYmplY3QuaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29w
eWFibGUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTdHJpbmc7CisKK2NsYXNz
IEluamVjdGVkU2NyaXB0IHsKK3B1YmxpYzoKKyAgICBJbmplY3RlZFNjcmlwdCgpIHsgfQorICAg
IH5JbmplY3RlZFNjcmlwdCgpIHsgfQorCisgICAgYm9vbCBoYXNOb1ZhbHVlKCkgY29uc3QgeyBy
ZXR1cm4gbV9pbmplY3RlZFNjcmlwdE9iamVjdC5oYXNOb1ZhbHVlKCk7IH0KKworICAgIHZvaWQg
ZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kTmFtZSwgY29uc3QgU3Ry
aW5nJiBhcmd1bWVudHMsIGJvb2wgYXN5bmMsIFN0cmluZyogcmVzdWx0LCBib29sKiBoYWRFeGNl
cHRpb24pOworICAgIFN0cmluZyBjYWxsRnJhbWVzKCk7CisgICAgU3RyaW5nIHdyYXBBbmRTdHJp
bmdpZnkoU2NyaXB0VmFsdWUpOworICAgIHZvaWQgcmVsZWFzZVdyYXBwZXJPYmplY3RHcm91cChj
b25zdCBTdHJpbmcmKTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgSW5qZWN0ZWRTY3JpcHQgSW5q
ZWN0ZWRTY3JpcHRIb3N0OjppbmplY3RlZFNjcmlwdEZvcihTY3JpcHRTdGF0ZSopOworICAgIGV4
cGxpY2l0IEluamVjdGVkU2NyaXB0KFNjcmlwdE9iamVjdCk7CisgICAgU2NyaXB0T2JqZWN0IG1f
aW5qZWN0ZWRTY3JpcHRPYmplY3Q7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmNw
cCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5jcHAKaW5kZXggZDViYmQx
Yy4uZjg4NTI4ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRI
b3N0LmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuY3BwCkBA
IC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRl
ci5oIgogI2luY2x1ZGUgIkhUTUxGcmFtZU93bmVyRWxlbWVudC5oIgorI2luY2x1ZGUgIkluamVj
dGVkU2NyaXB0LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50LmgiCiAjaW5jbHVkZSAiSW5z
cGVjdG9yQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkluc3BlY3RvckRPTUFnZW50LmgiCkBAIC0x
NjcsNyArMTY4LDcgQEAgdm9pZCBJbmplY3RlZFNjcmlwdEhvc3Q6OnJlcG9ydERpZERpc3BhdGNo
T25JbmplY3RlZFNjcmlwdChsb25nIGNhbGxJZCwgY29uc3QgU3QKICAgICAgICAgZnJvbnRlbmQt
PmRpZERpc3BhdGNoT25JbmplY3RlZFNjcmlwdChjYWxsSWQsIHJlc3VsdCwgaXNFeGNlcHRpb24p
OwogfQogCi1TY3JpcHRPYmplY3QgSW5qZWN0ZWRTY3JpcHRIb3N0OjppbmplY3RlZFNjcmlwdEZv
cklkKGxvbmcgaWQpCitJbmplY3RlZFNjcmlwdCBJbmplY3RlZFNjcmlwdEhvc3Q6OmluamVjdGVk
U2NyaXB0Rm9ySWQobG9uZyBpZCkKIHsKICAgICByZXR1cm4gbV9pZFRvSW5qZWN0ZWRTY3JpcHQu
Z2V0KGlkKTsKIH0KQEAgLTE4MCwxMyArMTgxLDEzIEBAIHZvaWQgSW5qZWN0ZWRTY3JpcHRIb3N0
OjpkaXNjYXJkSW5qZWN0ZWRTY3JpcHRzKCkKIHZvaWQgSW5qZWN0ZWRTY3JpcHRIb3N0OjpyZWxl
YXNlV3JhcHBlck9iamVjdEdyb3VwKGxvbmcgaW5qZWN0ZWRTY3JpcHRJZCwgY29uc3QgU3RyaW5n
JiBvYmplY3RHcm91cCkKIHsKICAgICBpZiAoaW5qZWN0ZWRTY3JpcHRJZCkgewotICAgICAgICAg
U2NyaXB0T2JqZWN0IGluamVjdGVkU2NyaXB0ID0gbV9pZFRvSW5qZWN0ZWRTY3JpcHQuZ2V0KGlu
amVjdGVkU2NyaXB0SWQpOworICAgICAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQg
PSBtX2lkVG9JbmplY3RlZFNjcmlwdC5nZXQoaW5qZWN0ZWRTY3JpcHRJZCk7CiAgICAgICAgICBp
ZiAoIWluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkKLSAgICAgICAgICAgICByZWxlYXNlV3Jh
cHBlck9iamVjdEdyb3VwKGluamVjdGVkU2NyaXB0LCBvYmplY3RHcm91cCk7CisgICAgICAgICAg
ICAgaW5qZWN0ZWRTY3JpcHQucmVsZWFzZVdyYXBwZXJPYmplY3RHcm91cChvYmplY3RHcm91cCk7
CiAgICAgfSBlbHNlIHsKICAgICAgICAgIC8vIEl0ZXJhdGUgb3ZlciBhbGwgaW5qZWN0ZWQgc2Ny
aXB0cyBpZiBpbmplY3RlZFNjcmlwdElkIGlzIG5vdCBzcGVjaWZpZWQuCiAgICAgICAgICBmb3Ig
KElkVG9JbmplY3RlZFNjcmlwdE1hcDo6aXRlcmF0b3IgaXQgPSBtX2lkVG9JbmplY3RlZFNjcmlw
dC5iZWdpbigpOyBpdCAhPSBtX2lkVG9JbmplY3RlZFNjcmlwdC5lbmQoKTsgKytpdCkKLSAgICAg
ICAgICAgICAgcmVsZWFzZVdyYXBwZXJPYmplY3RHcm91cChpdC0+c2Vjb25kLCBvYmplY3RHcm91
cCk7CisgICAgICAgICAgICAgIGl0LT5zZWNvbmQucmVsZWFzZVdyYXBwZXJPYmplY3RHcm91cChv
YmplY3RHcm91cCk7CiAgICAgfQogfQogCkBAIC0yMDQsMTMgKzIwNSw2IEBAIEluc3BlY3RvckZy
b250ZW5kKiBJbmplY3RlZFNjcmlwdEhvc3Q6Omluc3BlY3RvckZyb250ZW5kKCkKICAgICByZXR1
cm4gbV9pbnNwZWN0b3JDb250cm9sbGVyLT5tX2Zyb250ZW5kLmdldCgpOwogfQogCi12b2lkIElu
amVjdGVkU2NyaXB0SG9zdDo6cmVsZWFzZVdyYXBwZXJPYmplY3RHcm91cChjb25zdCBTY3JpcHRP
YmplY3QmIGluamVjdGVkU2NyaXB0LCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwKQotewotICAg
IFNjcmlwdEZ1bmN0aW9uQ2FsbCByZWxlYXNlRnVuY3Rpb24oaW5qZWN0ZWRTY3JpcHQuc2NyaXB0
U3RhdGUoKSwgaW5qZWN0ZWRTY3JpcHQsICJyZWxlYXNlV3JhcHBlck9iamVjdEdyb3VwIik7Ci0g
ICAgcmVsZWFzZUZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KG9iamVjdEdyb3VwKTsKLSAgICByZWxl
YXNlRnVuY3Rpb24uY2FsbCgpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRp
ZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5q
ZWN0ZWRTY3JpcHRIb3N0LmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3Qu
aAppbmRleCBkOTFjOGUyLi4yYjBmOGI0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9J
bmplY3RlZFNjcmlwdEhvc3QuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlw
dEhvc3QuaApAQCAtNDEsNiArNDEsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBE
YXRhYmFzZTsKK2NsYXNzIEluamVjdGVkU2NyaXB0OwogY2xhc3MgSW5zcGVjdG9yRE9NQWdlbnQ7
CiBjbGFzcyBJbnNwZWN0b3JGcm9udGVuZDsKIGNsYXNzIEphdmFTY3JpcHRDYWxsRnJhbWU7CkBA
IC04Myw4ICs4NCw4IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIHZvaWQgcmVwb3J0RGlkRGlzcGF0
Y2hPbkluamVjdGVkU2NyaXB0KGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIHJlc3VsdCwgYm9v
bCBpc0V4Y2VwdGlvbik7CiAKLSAgICBTY3JpcHRPYmplY3QgaW5qZWN0ZWRTY3JpcHRGb3IoU2Ny
aXB0U3RhdGUqKTsKLSAgICBTY3JpcHRPYmplY3QgaW5qZWN0ZWRTY3JpcHRGb3JJZChsb25nKTsK
KyAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvcihTY3JpcHRTdGF0ZSopOworICAg
IEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0Rm9ySWQobG9uZyk7CiAgICAgdm9pZCBkaXNj
YXJkSW5qZWN0ZWRTY3JpcHRzKCk7CiAgICAgdm9pZCByZWxlYXNlV3JhcHBlck9iamVjdEdyb3Vw
KGxvbmcgaW5qZWN0ZWRTY3JpcHRJZCwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCk7CiAKQEAg
LTkzLDEyICs5NCwxMCBAQCBwcml2YXRlOgogICAgIEluc3BlY3RvckRPTUFnZW50KiBpbnNwZWN0
b3JET01BZ2VudCgpOwogICAgIEluc3BlY3RvckZyb250ZW5kKiBpbnNwZWN0b3JGcm9udGVuZCgp
OwogCi0gICAgdm9pZCByZWxlYXNlV3JhcHBlck9iamVjdEdyb3VwKGNvbnN0IFNjcmlwdE9iamVj
dCYgaW5qZWN0ZWRTY3JpcHQsIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXApOwotCiAgICAgSW5z
cGVjdG9yQ29udHJvbGxlciogbV9pbnNwZWN0b3JDb250cm9sbGVyOwogICAgIFN0cmluZyBtX2lu
amVjdGVkU2NyaXB0U291cmNlOwogICAgIGxvbmcgbV9uZXh0SW5qZWN0ZWRTY3JpcHRJZDsKLSAg
ICB0eXBlZGVmIEhhc2hNYXA8bG9uZywgU2NyaXB0T2JqZWN0PiBJZFRvSW5qZWN0ZWRTY3JpcHRN
YXA7CisgICAgdHlwZWRlZiBIYXNoTWFwPGxvbmcsIEluamVjdGVkU2NyaXB0PiBJZFRvSW5qZWN0
ZWRTY3JpcHRNYXA7CiAgICAgSWRUb0luamVjdGVkU2NyaXB0TWFwIG1faWRUb0luamVjdGVkU2Ny
aXB0OwogfTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2Vu
ZC5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNwcAppbmRleCA5OTlh
NGI3Li4yYzc0MjEyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNr
ZW5kLmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNwcApAQCAt
NDAsNiArNDAsNyBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIu
aCIKICNpbmNsdWRlICJIVE1MRnJhbWVPd25lckVsZW1lbnQuaCIKKyNpbmNsdWRlICJJbmplY3Rl
ZFNjcmlwdC5oIgogI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0SG9zdC5oIgogI2luY2x1ZGUgIklu
c3BlY3RvckNsaWVudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKQEAgLTI4
NSw3ICsyODYsNyBAQCB2b2lkIEluc3BlY3RvckJhY2tlbmQ6OmRpc3BhdGNoT25JbmplY3RlZFNj
cmlwdChsb25nIGNhbGxJZCwgbG9uZyBpbmplY3RlZFNjcmlwdAogICAgIC8vIEZJWE1FOiBleHBs
aWNpdGx5IHBhc3MgaW5qZWN0ZWRTY3JpcHRJZCBhbG9uZyB3aXRoIG5vZGUgaWQgdG8gdGhlIGZy
b250ZW5kLgogICAgIGJvb2wgaW5qZWN0ZWRTY3JpcHRJZElzTm9kZUlkID0gaW5qZWN0ZWRTY3Jp
cHRJZCA8PSAwOwogCi0gICAgU2NyaXB0T2JqZWN0IGluamVjdGVkU2NyaXB0OworICAgIEluamVj
dGVkU2NyaXB0IGluamVjdGVkU2NyaXB0OwogICAgIGlmIChpbmplY3RlZFNjcmlwdElkSXNOb2Rl
SWQpCiAgICAgICAgIGluamVjdGVkU2NyaXB0ID0gbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbmpl
Y3RlZFNjcmlwdEZvck5vZGVJZCgtaW5qZWN0ZWRTY3JpcHRJZCk7CiAgICAgZWxzZQpAQCAtMjk0
LDE5ICsyOTUsMTIgQEAgdm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpkaXNwYXRjaE9uSW5qZWN0ZWRT
Y3JpcHQobG9uZyBjYWxsSWQsIGxvbmcgaW5qZWN0ZWRTY3JpcHQKICAgICBpZiAoaW5qZWN0ZWRT
Y3JpcHQuaGFzTm9WYWx1ZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBTY3JpcHRGdW5jdGlv
bkNhbGwgZnVuY3Rpb24oaW5qZWN0ZWRTY3JpcHQuc2NyaXB0U3RhdGUoKSwgaW5qZWN0ZWRTY3Jp
cHQsICJkaXNwYXRjaCIpOwotICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KG1ldGhvZE5hbWUp
OwotICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGFyZ3VtZW50cyk7Ci0gICAgaWYgKGFzeW5j
KQotICAgICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChjYWxsSWQpOworICAgIFN0cmluZyBy
ZXN1bHQ7CiAgICAgYm9vbCBoYWRFeGNlcHRpb24gPSBmYWxzZTsKLSAgICBTY3JpcHRWYWx1ZSBy
ZXN1bHQgPSBmdW5jdGlvbi5jYWxsKGhhZEV4Y2VwdGlvbik7CisgICAgaW5qZWN0ZWRTY3JpcHQu
ZGlzcGF0Y2goY2FsbElkLCBtZXRob2ROYW1lLCBhcmd1bWVudHMsIGFzeW5jLCAmcmVzdWx0LCAm
aGFkRXhjZXB0aW9uKTsKICAgICBpZiAoYXN5bmMpCiAgICAgICAgIHJldHVybjsgIC8vIEluamVj
dGVkU2NyaXB0IHdpbGwgcmV0dXJuIHJlc3VsdCBhc3luY2hyb25vdXNseSBieSBtZWFucyBvZiA6
OnJlcG9ydERpZERpc3BhdGNoT25JbmplY3RlZFNjcmlwdC4KLSAgICBpZiAoaGFkRXhjZXB0aW9u
KQotICAgICAgICBmcm9udGVuZC0+ZGlkRGlzcGF0Y2hPbkluamVjdGVkU2NyaXB0KGNhbGxJZCwg
IiIsIHRydWUpOwotICAgIGVsc2UKLSAgICAgICAgZnJvbnRlbmQtPmRpZERpc3BhdGNoT25Jbmpl
Y3RlZFNjcmlwdChjYWxsSWQsIHJlc3VsdC50b1N0cmluZyhpbmplY3RlZFNjcmlwdC5zY3JpcHRT
dGF0ZSgpKSwgZmFsc2UpOworICAgIGZyb250ZW5kLT5kaWREaXNwYXRjaE9uSW5qZWN0ZWRTY3Jp
cHQoY2FsbElkLCByZXN1bHQsIGhhZEV4Y2VwdGlvbik7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQmFj
a2VuZDo6Z2V0Q2hpbGROb2Rlcyhsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQpCmRpZmYgLS1naXQg
YS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IDVhYjEzNTQuLjlmYWRjMWUgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBi
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC01NCw2ICs1NCw3
IEBACiAjaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCiAjaW5jbHVkZSAiSGl0VGVz
dFJlc3VsdC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckJhY2tlbmQuaCIKKyNpbmNsdWRlICJJbmpl
Y3RlZFNjcmlwdC5oIgogI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0SG9zdC5oIgogI2luY2x1ZGUg
Ikluc3BlY3RvckNsaWVudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kLmgiCkBAIC0x
MzIsNyArMTMzLDcgQEAgSW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcihQ
YWdlKiBwYWdlLCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCkKICAgICAsIG1fY2xpZW50KGNsaWVu
dCkKICAgICAsIG1fcGFnZSgwKQogICAgICwgbV9leHBpcmVkQ29uc29sZU1lc3NhZ2VDb3VudCgw
KQotICAgICwgbV9zY3JpcHRTdGF0ZSgwKQorICAgICwgbV9mcm9udGVuZFNjcmlwdFN0YXRlKDAp
CiAgICAgLCBtX3dpbmRvd1Zpc2libGUoZmFsc2UpCiAgICAgLCBtX3Nob3dBZnRlclZpc2libGUo
Q3VycmVudFBhbmVsKQogICAgICwgbV9ncm91cExldmVsKDApCkBAIC0xNjIsNyArMTYzLDcgQEAg
SW5zcGVjdG9yQ29udHJvbGxlcjo6fkluc3BlY3RvckNvbnRyb2xsZXIoKQogewogICAgIC8vIFRo
ZXNlIHNob3VsZCBoYXZlIGJlZW4gY2xlYXJlZCBpbiBpbnNwZWN0ZWRQYWdlRGVzdHJveWVkKCku
CiAgICAgQVNTRVJUKCFtX2NsaWVudCk7Ci0gICAgQVNTRVJUKCFtX3NjcmlwdFN0YXRlKTsKKyAg
ICBBU1NFUlQoIW1fZnJvbnRlbmRTY3JpcHRTdGF0ZSk7CiAgICAgQVNTRVJUKCFtX2luc3BlY3Rl
ZFBhZ2UpOwogICAgIEFTU0VSVCghbV9wYWdlIHx8IChtX3BhZ2UgJiYgIW1fcGFnZS0+cGFyZW50
SW5zcGVjdG9yQ29udHJvbGxlcigpKSk7CiAKQEAgLTE4MywxMCArMTg0LDkgQEAgdm9pZCBJbnNw
ZWN0b3JDb250cm9sbGVyOjppbnNwZWN0ZWRQYWdlRGVzdHJveWVkKCkKIHsKICAgICBjbG9zZSgp
OwogCi0gICAgaWYgKG1fc2NyaXB0U3RhdGUpIHsKLSAgICAgICAgU2NyaXB0R2xvYmFsT2JqZWN0
OjpyZW1vdmUobV9zY3JpcHRTdGF0ZSwgIkluc3BlY3RvckJhY2tlbmQiKTsKLSAgICAgICAgU2Ny
aXB0R2xvYmFsT2JqZWN0OjpyZW1vdmUobV9zY3JpcHRTdGF0ZSwgIkluc3BlY3RvckZyb250ZW5k
SG9zdCIpOwotICAgICAgICBTY3JpcHRHbG9iYWxPYmplY3Q6OnJlbW92ZShtX3NjcmlwdFN0YXRl
LCAiSW5qZWN0ZWRTY3JpcHRIb3N0Iik7CisgICAgaWYgKG1fZnJvbnRlbmRTY3JpcHRTdGF0ZSkg
eworICAgICAgICBTY3JpcHRHbG9iYWxPYmplY3Q6OnJlbW92ZShtX2Zyb250ZW5kU2NyaXB0U3Rh
dGUsICJJbnNwZWN0b3JCYWNrZW5kIik7CisgICAgICAgIFNjcmlwdEdsb2JhbE9iamVjdDo6cmVt
b3ZlKG1fZnJvbnRlbmRTY3JpcHRTdGF0ZSwgIkluc3BlY3RvckZyb250ZW5kSG9zdCIpOwogICAg
IH0KICAgICBBU1NFUlQobV9pbnNwZWN0ZWRQYWdlKTsKICAgICBtX2luc3BlY3RlZFBhZ2UgPSAw
OwpAQCAtNTA5LDIyICs1MDksMjEgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjp3aW5kb3dT
Y3JpcHRPYmplY3RBdmFpbGFibGUoKQogCiAgICAgLy8gR3JhbnQgdGhlIGluc3BlY3RvciB0aGUg
YWJpbGl0eSB0byBzY3JpcHQgdGhlIGluc3BlY3RlZCBwYWdlLgogICAgIG1fcGFnZS0+bWFpbkZy
YW1lKCktPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmdyYW50VW5pdmVyc2FsQWNjZXNz
KCk7Ci0gICAgbV9zY3JpcHRTdGF0ZSA9IHNjcmlwdFN0YXRlRnJvbVBhZ2UoZGVidWdnZXJXb3Js
ZCgpLCBtX3BhZ2UpOwotICAgIFNjcmlwdEdsb2JhbE9iamVjdDo6c2V0KG1fc2NyaXB0U3RhdGUs
ICJJbnNwZWN0b3JCYWNrZW5kIiwgbV9pbnNwZWN0b3JCYWNrZW5kLmdldCgpKTsKLSAgICBTY3Jp
cHRHbG9iYWxPYmplY3Q6OnNldChtX3NjcmlwdFN0YXRlLCAiSW5zcGVjdG9yRnJvbnRlbmRIb3N0
IiwgbV9pbnNwZWN0b3JGcm9udGVuZEhvc3QuZ2V0KCkpOworICAgIG1fZnJvbnRlbmRTY3JpcHRT
dGF0ZSA9IHNjcmlwdFN0YXRlRnJvbVBhZ2UoZGVidWdnZXJXb3JsZCgpLCBtX3BhZ2UpOworICAg
IFNjcmlwdEdsb2JhbE9iamVjdDo6c2V0KG1fZnJvbnRlbmRTY3JpcHRTdGF0ZSwgIkluc3BlY3Rv
ckJhY2tlbmQiLCBtX2luc3BlY3RvckJhY2tlbmQuZ2V0KCkpOworICAgIFNjcmlwdEdsb2JhbE9i
amVjdDo6c2V0KG1fZnJvbnRlbmRTY3JpcHRTdGF0ZSwgIkluc3BlY3RvckZyb250ZW5kSG9zdCIs
IG1faW5zcGVjdG9yRnJvbnRlbmRIb3N0LmdldCgpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250
cm9sbGVyOjpzY3JpcHRPYmplY3RSZWFkeSgpCiB7Ci0gICAgQVNTRVJUKG1fc2NyaXB0U3RhdGUp
OwotICAgIGlmICghbV9zY3JpcHRTdGF0ZSkKKyAgICBBU1NFUlQobV9mcm9udGVuZFNjcmlwdFN0
YXRlKTsKKyAgICBpZiAoIW1fZnJvbnRlbmRTY3JpcHRTdGF0ZSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgU2NyaXB0T2JqZWN0IHdlYkluc3BlY3Rvck9iajsKLSAgICBpZiAoIVNjcmlwdEdsb2Jh
bE9iamVjdDo6Z2V0KG1fc2NyaXB0U3RhdGUsICJXZWJJbnNwZWN0b3IiLCB3ZWJJbnNwZWN0b3JP
YmopKQorICAgIGlmICghU2NyaXB0R2xvYmFsT2JqZWN0OjpnZXQobV9mcm9udGVuZFNjcmlwdFN0
YXRlLCAiV2ViSW5zcGVjdG9yIiwgd2ViSW5zcGVjdG9yT2JqKSkKICAgICAgICAgcmV0dXJuOwot
ICAgIFNjcmlwdE9iamVjdCBpbmplY3RlZFNjcmlwdE9iajsKLSAgICBzZXRGcm9udGVuZFByb3h5
T2JqZWN0KG1fc2NyaXB0U3RhdGUsIHdlYkluc3BlY3Rvck9iaiwgaW5qZWN0ZWRTY3JpcHRPYmop
OworICAgIHNldEZyb250ZW5kUHJveHlPYmplY3QobV9mcm9udGVuZFNjcmlwdFN0YXRlLCB3ZWJJ
bnNwZWN0b3JPYmopOwogCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICAgU3Ry
aW5nIGRlYnVnZ2VyRW5hYmxlZCA9IHNldHRpbmcoZGVidWdnZXJFbmFibGVkU2V0dGluZ05hbWUp
OwpAQCAtNTQzLDcgKzU0Miw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2NyaXB0T2Jq
ZWN0UmVhZHkoKQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldEZyb250ZW5kUHJveHlP
YmplY3QoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBTY3JpcHRPYmplY3Qgd2ViSW5zcGVjdG9y
T2JqLCBTY3JpcHRPYmplY3QpCiB7Ci0gICAgbV9zY3JpcHRTdGF0ZSA9IHNjcmlwdFN0YXRlOwor
ICAgIG1fZnJvbnRlbmRTY3JpcHRTdGF0ZSA9IHNjcmlwdFN0YXRlOwogICAgIG1fZnJvbnRlbmQu
c2V0KG5ldyBJbnNwZWN0b3JGcm9udGVuZCh0aGlzLCBzY3JpcHRTdGF0ZSwgd2ViSW5zcGVjdG9y
T2JqKSk7CiAgICAgcmVsZWFzZURPTUFnZW50KCk7CiAgICAgbV9kb21BZ2VudCA9IEluc3BlY3Rv
ckRPTUFnZW50OjpjcmVhdGUobV9mcm9udGVuZC5nZXQoKSk7CkBAIC02MDQsNyArNjAzLDcgQEAg
dm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpjbG9zZSgpCiAgICAgcmVsZWFzZURPTUFnZW50KCk7
CiAgICAgbV9mcm9udGVuZC5zZXQoMCk7CiAgICAgbV90aW1lbGluZUFnZW50ID0gMDsKLSAgICBt
X3NjcmlwdFN0YXRlID0gMDsKKyAgICBtX2Zyb250ZW5kU2NyaXB0U3RhdGUgPSAwOwogICAgIGlm
IChtX3BhZ2UpIHsKICAgICAgICAgaWYgKCFtX3BhZ2UtPm1haW5GcmFtZSgpIHx8ICFtX3BhZ2Ut
Pm1haW5GcmFtZSgpLT5sb2FkZXIoKSB8fCAhbV9wYWdlLT5tYWluRnJhbWUoKS0+bG9hZGVyKCkt
PmlzTG9hZGluZygpKSB7CiAgICAgICAgICAgICBtX3BhZ2UtPnNldFBhcmVudEluc3BlY3RvckNv
bnRyb2xsZXIoMCk7CkBAIC0xNDA1LDcgKzE0MDQsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xs
ZXI6OmdldFByb2ZpbGUobG9uZyBjYWxsSWQsIHVuc2lnbmVkIHVpZCkKICAgICAgICAgcmV0dXJu
OwogICAgIFByb2ZpbGVzTWFwOjppdGVyYXRvciBpdCA9IG1fcHJvZmlsZXMuZmluZCh1aWQpOwog
ICAgIGlmIChpdCAhPSBtX3Byb2ZpbGVzLmVuZCgpKQotICAgICAgICBtX2Zyb250ZW5kLT5kaWRH
ZXRQcm9maWxlKGNhbGxJZCwgdG9KUyhtX3NjcmlwdFN0YXRlLCBpdC0+c2Vjb25kLmdldCgpKSk7
CisgICAgICAgIG1fZnJvbnRlbmQtPmRpZEdldFByb2ZpbGUoY2FsbElkLCB0b0pTKG1fZnJvbnRl
bmRTY3JpcHRTdGF0ZSwgaXQtPnNlY29uZC5nZXQoKSkpOwogfQogCiBTY3JpcHRPYmplY3QgSW5z
cGVjdG9yQ29udHJvbGxlcjo6Y3JlYXRlUHJvZmlsZUhlYWRlcihjb25zdCBKU0M6OlByb2ZpbGUm
IHByb2ZpbGUpCkBAIC0xNTM2LDcgKzE1MzUsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6
OmVuYWJsZURlYnVnZ2VyKCkKICAgICBpZiAobV9kZWJ1Z2dlckVuYWJsZWQpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGlmICghbV9zY3JpcHRTdGF0ZSB8fCAhbV9mcm9udGVuZCkgeworICAgIGlm
ICghbV9mcm9udGVuZFNjcmlwdFN0YXRlIHx8ICFtX2Zyb250ZW5kKSB7CiAgICAgICAgIG1fYXR0
YWNoRGVidWdnZXJXaGVuU2hvd24gPSB0cnVlOwogICAgIH0gZWxzZSB7CiAgICAgICAgIG1fZnJv
bnRlbmQtPmF0dGFjaERlYnVnZ2VyV2hlblNob3duKCk7CkBAIC0xNTg3LDExICsxNTg2LDggQEAg
dm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRQYXVzZSgpCiAgICAgSmF2YVNjcmlwdENhbGxG
cmFtZSogY2FsbEZyYW1lID0gbV9pbmplY3RlZFNjcmlwdEhvc3QtPmN1cnJlbnRDYWxsRnJhbWUo
KTsKICAgICBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUgPSBjYWxsRnJhbWUtPnNjb3BlQ2hhaW4o
KS0+Z2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAgICAgQVNTRVJUKHNjcmlwdFN0YXRlKTsK
LSAgICBTY3JpcHRPYmplY3QgaW5qZWN0ZWRTY3JpcHRPYmogPSBtX2luamVjdGVkU2NyaXB0SG9z
dC0+aW5qZWN0ZWRTY3JpcHRGb3Ioc2NyaXB0U3RhdGUpOwotICAgIFNjcmlwdEZ1bmN0aW9uQ2Fs
bCBmdW5jdGlvbihzY3JpcHRTdGF0ZSwgaW5qZWN0ZWRTY3JpcHRPYmosICJnZXRDYWxsRnJhbWVz
Iik7Ci0gICAgU2NyaXB0VmFsdWUgY2FsbEZyYW1lc1ZhbHVlID0gZnVuY3Rpb24uY2FsbCgpOwot
ICAgIFN0cmluZyBjYWxsRnJhbWVzID0gY2FsbEZyYW1lc1ZhbHVlLnRvU3RyaW5nKHNjcmlwdFN0
YXRlKTsKLQorICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNj
cmlwdEhvc3QtPmluamVjdGVkU2NyaXB0Rm9yKHNjcmlwdFN0YXRlKTsKKyAgICBTdHJpbmcgY2Fs
bEZyYW1lcyA9IGluamVjdGVkU2NyaXB0LmNhbGxGcmFtZXMoKTsKICAgICBtX2Zyb250ZW5kLT5w
YXVzZWRTY3JpcHQoY2FsbEZyYW1lcyk7CiB9CiAKQEAgLTE4MjksNyArMTgyNSw3IEBAIHZvaWQg
SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGVsZXRlQ29va2llKGNvbnN0IFN0cmluZyYgY29va2llTmFt
ZSwgY29uc3QgU3RyaW5nJiBkCiAgICAgfQogfQogCi1TY3JpcHRPYmplY3QgSW5zcGVjdG9yQ29u
dHJvbGxlcjo6aW5qZWN0ZWRTY3JpcHRGb3JOb2RlSWQobG9uZyBpZCkKK0luamVjdGVkU2NyaXB0
IEluc3BlY3RvckNvbnRyb2xsZXI6OmluamVjdGVkU2NyaXB0Rm9yTm9kZUlkKGxvbmcgaWQpCiB7
CiAKICAgICBGcmFtZSogZnJhbWUgPSAwOwpAQCAtMTg0Nyw3ICsxODQzLDcgQEAgU2NyaXB0T2Jq
ZWN0IEluc3BlY3RvckNvbnRyb2xsZXI6OmluamVjdGVkU2NyaXB0Rm9yTm9kZUlkKGxvbmcgaWQp
CiAgICAgaWYgKGZyYW1lKQogICAgICAgICByZXR1cm4gbV9pbmplY3RlZFNjcmlwdEhvc3QtPmlu
amVjdGVkU2NyaXB0Rm9yKG1haW5Xb3JsZFNjcmlwdFN0YXRlKGZyYW1lKSk7CiAKLSAgICByZXR1
cm4gU2NyaXB0T2JqZWN0KCk7CisgICAgcmV0dXJuIEluamVjdGVkU2NyaXB0KCk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNvbnRyb2xsZXIuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIu
aAppbmRleCA4NjBiZjQ5Li5iNjNmMGJiIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDb250cm9sbGVyLmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29u
dHJvbGxlci5oCkBAIC02NCw2ICs2NCw3IEBAIGNsYXNzIERvY3VtZW50TG9hZGVyOwogY2xhc3Mg
RWxlbWVudDsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIGNsYXNzIEhpdFRlc3RSZXN1bHQ7Citj
bGFzcyBJbmplY3RlZFNjcmlwdDsKIGNsYXNzIEluamVjdGVkU2NyaXB0SG9zdDsKIGNsYXNzIElu
c3BlY3RvckJhY2tlbmQ7CiBjbGFzcyBJbnNwZWN0b3JDbGllbnQ7CkBAIC0xNTcsNyArMTU4LDcg
QEAgcHVibGljOgogICAgIHZvaWQgd2luZG93U2NyaXB0T2JqZWN0QXZhaWxhYmxlKCk7CiAKICAg
ICB2b2lkIHNldEZyb250ZW5kUHJveHlPYmplY3QoU2NyaXB0U3RhdGUqIHN0YXRlLCBTY3JpcHRP
YmplY3Qgd2ViSW5zcGVjdG9yT2JqLCBTY3JpcHRPYmplY3QgaW5qZWN0ZWRTY3JpcHRPYmogPSBT
Y3JpcHRPYmplY3QoKSk7Ci0gICAgU2NyaXB0U3RhdGUqIGZyb250ZW5kU2NyaXB0U3RhdGUoKSBj
b25zdCB7IHJldHVybiBtX3NjcmlwdFN0YXRlOyB9CisgICAgU2NyaXB0U3RhdGUqIGZyb250ZW5k
U2NyaXB0U3RhdGUoKSBjb25zdCB7IHJldHVybiBtX2Zyb250ZW5kU2NyaXB0U3RhdGU7IH0KIAog
ICAgIHZvaWQgcG9wdWxhdGVTY3JpcHRPYmplY3RzKCk7CiAgICAgdm9pZCByZXNldFNjcmlwdE9i
amVjdHMoKTsKQEAgLTI0OCw3ICsyNDksNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGV2YWx1YXRl
Rm9yVGVzdEluRnJvbnRlbmQobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgc2NyaXB0KTsKIAot
ICAgIFNjcmlwdE9iamVjdCBpbmplY3RlZFNjcmlwdEZvck5vZGVJZChsb25nIGlkKTsKKyAgICBJ
bmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvck5vZGVJZChsb25nIGlkKTsKIAogcHJpdmF0
ZToKICAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgRnJvbnRlbmRTZXR0aW5nc1NldHRpbmdO
YW1lOwpAQCAtMzI4LDcgKzMyOSw3IEBAIHByaXZhdGU6CiAjaWYgRU5BQkxFKERPTV9TVE9SQUdF
KQogICAgIERPTVN0b3JhZ2VSZXNvdXJjZXNNYXAgbV9kb21TdG9yYWdlUmVzb3VyY2VzOwogI2Vu
ZGlmCi0gICAgU2NyaXB0U3RhdGUqIG1fc2NyaXB0U3RhdGU7CisgICAgU2NyaXB0U3RhdGUqIG1f
ZnJvbnRlbmRTY3JpcHRTdGF0ZTsKICAgICBib29sIG1fd2luZG93VmlzaWJsZTsKICAgICBTcGVj
aWFsUGFuZWxzIG1fc2hvd0FmdGVyVmlzaWJsZTsKICAgICBSZWZQdHI8Tm9kZT4gbV9oaWdobGln
aHRlZE5vZGU7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVu
ZC5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5jcHAKaW5kZXggZDVj
ODE3ZC4uMzg3MWRmNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJv
bnRlbmQuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNwcApA
QCAtMzQsNiArMzQsNyBAQAogCiAjaW5jbHVkZSAiQ29uc29sZU1lc3NhZ2UuaCIKICNpbmNsdWRl
ICJGcmFtZS5oIgorI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0LmgiCiAjaW5jbHVkZSAiSW5qZWN0
ZWRTY3JpcHRIb3N0LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgogI2luY2x1
ZGUgIk5vZGUuaCIKQEAgLTEwNSwxNSArMTA2LDkgQEAgdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6
YWRkQ29uc29sZU1lc3NhZ2UoY29uc3QgU2NyaXB0T2JqZWN0JiBtZXNzYWdlT2JqLCBjb25zdAog
ICAgICAgICAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoZnJhbWVzW2ldKTsKICAgICB9IGVs
c2UgaWYgKCFhcmd1bWVudHMuaXNFbXB0eSgpKSB7CiAgICAgICAgIGZ1bmN0aW9uLmFwcGVuZEFy
Z3VtZW50KHRydWUpOwotICAgICAgICBTY3JpcHRPYmplY3QgaW5qZWN0ZWRTY3JpcHQgPSBtX2lu
c3BlY3RvckNvbnRyb2xsZXItPmluamVjdGVkU2NyaXB0SG9zdCgpLT5pbmplY3RlZFNjcmlwdEZv
cihzY3JpcHRTdGF0ZSk7CisgICAgICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0g
bV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbmplY3RlZFNjcmlwdEhvc3QoKS0+aW5qZWN0ZWRTY3Jp
cHRGb3Ioc2NyaXB0U3RhdGUpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJn
dW1lbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBTY3JpcHRGdW5jdGlvbkNhbGwgd3Jh
cEZ1bmN0aW9uKHNjcmlwdFN0YXRlLCBpbmplY3RlZFNjcmlwdCwgIndyYXBBbmRTdHJpbmdpZnlP
YmplY3QiKTsKLSAgICAgICAgICAgIHdyYXBGdW5jdGlvbi5hcHBlbmRBcmd1bWVudChhcmd1bWVu
dHNbaV0pOwotICAgICAgICAgICAgd3JhcEZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJjb25zb2xl
Iik7Ci0gICAgICAgICAgICBTY3JpcHRWYWx1ZSByID0gd3JhcEZ1bmN0aW9uLmNhbGwoKTsKLSAg
ICAgICAgICAgIGlmIChyLmhhc05vVmFsdWUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICBTdHJpbmcgcyA9IHIudG9TdHJpbmcoc2NyaXB0U3RhdGUpOworICAgICAgICAg
ICAgU3RyaW5nIHMgPSBpbmplY3RlZFNjcmlwdC53cmFwQW5kU3RyaW5naWZ5KGFyZ3VtZW50c1tp
XSk7CiAgICAgICAgICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChzKTsKICAgICAgICAgfQog
ICAgIH0gZWxzZSB7Cg==
</data>
<flag name="review"
          id="30625"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
          </attachment>
      

    </bug>

</bugzilla>