<?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>180367</bug_id>
          
          <creation_ts>2017-12-04 11:27:29 -0800</creation_ts>
          <short_desc>Web Inspector: modernize InjectedScript a bit</short_desc>
          <delta_ts>2017-12-12 13:50:45 -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</component>
          <version>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Blaze Burg">bburg</reporter>
          <assigned_to name="Blaze Burg">bburg</assigned_to>
          <cc>achristensen</cc>
    
    <cc>bburg</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>inspector-bugzilla-changes</cc>
    
    <cc>joepeck</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1377793</commentid>
    <comment_count>0</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2017-12-04 11:27:29 -0800</bug_when>
    <thetext>This code uses all kinds of gross out parameters. Start cleaning this mess up.

Eventually we should use Expected&lt;T, ErrorString&gt; as the return type for many of the simple return values here that currently use out-params. This probably won&apos;t work for generated commands, but those could use std::optional&lt;ErrorString&gt; and drop the first parameter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377873</commentid>
    <comment_count>1</comment_count>
      <attachid>328384</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2017-12-04 13:41:09 -0800</bug_when>
    <thetext>Created attachment 328384
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377875</commentid>
    <comment_count>2</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2017-12-04 13:42:59 -0800</bug_when>
    <thetext>Attachment 328384 did not pass style-queue:


ERROR: Source/JavaScriptCore/inspector/agents/InspectorRuntimeAgent.cpp:115:  out_wasThrown is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/inspector/agents/InspectorRuntimeAgent.cpp:115:  out_savedResultIndex is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/inspector/agents/InspectorRuntimeAgent.cpp:142:  out_wasThrown is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/inspector/agents/InspectorRuntimeAgent.cpp:239:  out_savedResultIndex is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/inspector/InjectedScriptBase.cpp:96:  out_resultObject is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/inspector/InjectedScriptBase.cpp:96:  out_wasThrown is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/inspector/InjectedScriptBase.cpp:96:  out_savedResultIndex is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/inspector/agents/InspectorDebuggerAgent.cpp:830:  out_wasThrown is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/inspector/agents/InspectorDebuggerAgent.cpp:830:  out_savedResultIndex is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 9 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377877</commentid>
    <comment_count>3</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2017-12-04 13:43:56 -0800</bug_when>
    <thetext>(In reply to Build Bot from comment #2)
&gt; Attachment 328384 [details] did not pass style-queue:
&gt; 
&gt; 
&gt; ERROR: Source/JavaScriptCore/inspector/agents/InspectorRuntimeAgent.cpp:115:
&gt; out_wasThrown is incorrectly named. Don&apos;t use underscores in your identifier
&gt; names.  [readability/naming/underscores] [4]
&gt; ERROR: Source/JavaScriptCore/inspector/agents/InspectorRuntimeAgent.cpp:115:
&gt; out_savedResultIndex is incorrectly named. Don&apos;t use underscores in your
&gt; identifier names.  [readability/naming/underscores] [4]
&gt; ERROR: Source/JavaScriptCore/inspector/agents/InspectorRuntimeAgent.cpp:142:
&gt; out_wasThrown is incorrectly named. Don&apos;t use underscores in your identifier
&gt; names.  [readability/naming/underscores] [4]
&gt; ERROR: Source/JavaScriptCore/inspector/agents/InspectorRuntimeAgent.cpp:239:
&gt; out_savedResultIndex is incorrectly named. Don&apos;t use underscores in your
&gt; identifier names.  [readability/naming/underscores] [4]
&gt; ERROR: Source/JavaScriptCore/inspector/InjectedScriptBase.cpp:96: 
&gt; out_resultObject is incorrectly named. Don&apos;t use underscores in your
&gt; identifier names.  [readability/naming/underscores] [4]
&gt; ERROR: Source/JavaScriptCore/inspector/InjectedScriptBase.cpp:96: 
&gt; out_wasThrown is incorrectly named. Don&apos;t use underscores in your identifier
&gt; names.  [readability/naming/underscores] [4]
&gt; ERROR: Source/JavaScriptCore/inspector/InjectedScriptBase.cpp:96: 
&gt; out_savedResultIndex is incorrectly named. Don&apos;t use underscores in your
&gt; identifier names.  [readability/naming/underscores] [4]
&gt; ERROR:
&gt; Source/JavaScriptCore/inspector/agents/InspectorDebuggerAgent.cpp:830: 
&gt; out_wasThrown is incorrectly named. Don&apos;t use underscores in your identifier
&gt; names.  [readability/naming/underscores] [4]
&gt; ERROR:
&gt; Source/JavaScriptCore/inspector/agents/InspectorDebuggerAgent.cpp:830: 
&gt; out_savedResultIndex is incorrectly named. Don&apos;t use underscores in your
&gt; identifier names.  [readability/naming/underscores] [4]
&gt; Total errors found: 9 in 8 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against
&gt; check-webkit-style.

Style bot can go jump in a lake. The code reads much, much better with the out_ prefix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1378395</commentid>
    <comment_count>4</comment_count>
      <attachid>328384</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-12-05 15:08:41 -0800</bug_when>
    <thetext>Comment on attachment 328384
Patch

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

&gt; Source/JavaScriptCore/ChangeLog:10
&gt; +        If there is only one out-parameter and a void return type, then return the value.

I think we should return a std::pair or a std::tuple instead of having out_-prefixed variable names.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1378533</commentid>
    <comment_count>5</comment_count>
      <attachid>328384</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2017-12-05 22:39:20 -0800</bug_when>
    <thetext>Comment on attachment 328384
Patch

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

&gt; Source/JavaScriptCore/inspector/InjectedScriptBase.cpp:128
&gt; +    out_resultObject = BindingTraits&lt;Protocol::Runtime::RemoteObject&gt;::runtimeCast(resultObject);

Is &quot;out_&quot; prefix the style we use elsewhere? No a fan.

&gt; Source/JavaScriptCore/inspector/agents/InspectorRuntimeAgent.cpp:127
&gt; +    // FIXME: remove this bridging code when generated protocol commands no longer use OptOutput&lt;T&gt;.

Is there a bug you can reference?

&gt; Source/JavaScriptCore/inspector/agents/InspectorRuntimeAgent.cpp:256
&gt; +    // FIXME: remove this bridging code when generated protocol commands no longer use OptOutput&lt;T&gt;.

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1379779</commentid>
    <comment_count>6</comment_count>
      <attachid>328384</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2017-12-08 14:06:17 -0800</bug_when>
    <thetext>Comment on attachment 328384
Patch

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

&gt;&gt; Source/JavaScriptCore/ChangeLog:10
&gt;&gt; +        If there is only one out-parameter and a void return type, then return the value.
&gt; 
&gt; I think we should return a std::pair or a std::tuple instead of having out_-prefixed variable names.

This is the longer term goal for where it makes sense, along with using Expected&lt;T, ErrorString&gt; rather than ErrorString as a in-out param everywhere. But my first-order goal is to remove OptOutput and use std::optional in generated signatures.

I&apos;m not completely sold on using Tuples instead of out-params in generated protocol code, as it will make it a lot more annoying to use for little gain.

&gt;&gt; Source/JavaScriptCore/inspector/agents/InspectorRuntimeAgent.cpp:127
&gt;&gt; +    // FIXME: remove this bridging code when generated protocol commands no longer use OptOutput&lt;T&gt;.
&gt; 
&gt; Is there a bug you can reference?

I&apos;ll add one. It&apos;s the next thing I want to clean up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1380823</commentid>
    <comment_count>7</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2017-12-12 13:49:17 -0800</bug_when>
    <thetext>Committed r225804: &lt;https://trac.webkit.org/changeset/225804&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1380824</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-12-12 13:50:45 -0800</bug_when>
    <thetext>&lt;rdar://problem/36003463&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>328384</attachid>
            <date>2017-12-04 13:41:09 -0800</date>
            <delta_ts>2017-12-05 22:39:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-180367-20171204134108.patch</filename>
            <type>text/plain</type>
            <size>40118</size>
            <attacher name="Blaze Burg">bburg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI1NDg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAw
OTZkNDNhYWRjOTJmNjVlY2E5Njc1Mzc5YjE4YzU0ZTBkMjQwZjk3Li40MmQxZmU0YzlkZTQxMjZi
OTdlNWM1NDYwMDNjNTE5MjZmMzVhMzNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2MCBAQAorMjAxNy0xMi0wNCAgQnJpYW4gQnVyZyAgPGJidXJnQGFwcGxlLmNvbT4KKwor
ICAgICAgICBXZWIgSW5zcGVjdG9yOiBtb2Rlcm5pemUgSW5qZWN0ZWRTY3JpcHQgYSBiaXQKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MDM2NworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFN0b3AgdXNpbmcg
b3V0IHBhcmFtZXRlcnMgcGFzc2VkIGJ5IHBvaW50ZXIsIHVzZSByZWZlcmVuY2VzIGluc3RlYWQu
CisgICAgICAgIFN0b3AgdXNpbmcgT3B0T3V0cHV0PFQ+IGluIGZhdm9yIG9mIHN0ZDo6b3B0aW9u
YWwgd2hlcmUgcG9zc2libGUuCisgICAgICAgIElmIHRoZXJlIGlzIG9ubHkgb25lIG91dC1wYXJh
bWV0ZXIgYW5kIGEgdm9pZCByZXR1cm4gdHlwZSwgdGhlbiByZXR1cm4gdGhlIHZhbHVlLgorCisg
ICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0Lmg6CisgICAgICAgICogaW5zcGVjdG9y
L0luamVjdGVkU2NyaXB0LmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQ6
OmV2YWx1YXRlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQ6OmNhbGxGdW5j
dGlvbk9uKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQ6OmV2YWx1YXRlT25D
YWxsRnJhbWUpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6Z2V0RnVuY3Rp
b25EZXRhaWxzKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQ6OmZ1bmN0aW9u
RGV0YWlscyk6CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0OjpnZXRQcmV2aWV3
KToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQ6OmdldFByb3BlcnRpZXMpOgor
ICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6Z2V0RGlzcGxheWFibGVQcm9wZXJ0
aWVzKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQ6OmdldEludGVybmFsUHJv
cGVydGllcyk6CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0OjpnZXRDb2xsZWN0
aW9uRW50cmllcyk6CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0OjpzYXZlUmVz
dWx0KToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQ6OnNldEV4Y2VwdGlvblZh
bHVlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQ6OmNsZWFyRXhjZXB0aW9u
VmFsdWUpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6aW5zcGVjdE9iamVj
dCk6CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0OjpyZWxlYXNlT2JqZWN0KToK
KworICAgICAgICAqIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdEJhc2UuaDoKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRCYXNlLmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5q
ZWN0ZWRTY3JpcHRCYXNlOjpJbmplY3RlZFNjcmlwdEJhc2UpOgorICAgICAgICBEZWNsYXJlIG1f
ZW52aXJvbm1lbnQgd2l0aCBhIGRlZmF1bHQgaW5pdGlhbGl6ZXIuCisKKyAgICAgICAgKEluc3Bl
Y3Rvcjo6SW5qZWN0ZWRTY3JpcHRCYXNlOjptYWtlQ2FsbCk6CisgICAgICAgIChJbnNwZWN0b3I6
OkluamVjdGVkU2NyaXB0QmFzZTo6bWFrZUV2YWxDYWxsKToKKyAgICAgICAgSnVzdCByZXR1cm4g
dGhlIHJlc3VsdCwgbm8gbmVlZCBmb3IgYW4gb3V0LXBhcmFtZXRlci4KKyAgICAgICAgUmVhcnJh
bmdlIHNvbWUgY29kZSBwYXRocyBub3cgdGhhdCB3ZSBjYW4ganVzdCByZXR1cm4gYSByZXN1bHQu
CisgICAgICAgIFJldHVybiBhIFJlZjxKU09OOjpWYWx1ZT4gc2luY2UgaXQgaXMgZWl0aGVyIGEg
cmVzdWx0IHZhbHVlIG9yIGVycm9yIHZhbHVlLgorICAgICAgICBVc2Ugb3V0XyBwcmVmaXhlcyBp
biBhIGZldyBwbGFjZXMgdG8gaW1wcm92ZSByZWFkYWJpbGl0eS4KKworICAgICAgICAqIGluc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHA6CisgICAgICAgIChJbnNwZWN0
b3I6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmdldEZ1bmN0aW9uRGV0YWlscyk6CisgICAgICAg
IChJbnNwZWN0b3I6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmV2YWx1YXRlT25DYWxsRnJhbWUp
OgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9ySGVhcEFnZW50LmNwcDoKKyAg
ICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9ySGVhcEFnZW50OjpnZXRQcmV2aWV3KToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHA6CisgICAgICAg
IChJbnNwZWN0b3I6Okluc3BlY3RvclJ1bnRpbWVBZ2VudDo6ZXZhbHVhdGUpOgorICAgICAgICAo
SW5zcGVjdG9yOjpJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmNhbGxGdW5jdGlvbk9uKToKKyAgICAg
ICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yUnVudGltZUFnZW50OjpnZXRQcmV2aWV3KToKKyAgICAg
ICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yUnVudGltZUFnZW50OjpnZXRQcm9wZXJ0aWVzKToKKyAg
ICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yUnVudGltZUFnZW50OjpnZXREaXNwbGF5YWJsZVBy
b3BlcnRpZXMpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JSdW50aW1lQWdlbnQ6Omdl
dENvbGxlY3Rpb25FbnRyaWVzKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yUnVudGlt
ZUFnZW50OjpzYXZlUmVzdWx0KToKKyAgICAgICAgQWRhcHQgdG8gSW5qZWN0ZWRTY3JpcHQgY2hh
bmdlcy4gSW4gc29tZSBjYXNlcyB3ZSBuZWVkIHRvIGJyaWRnZSBPcHRPdXRwdXQ8VD4KKyAgICAg
ICAgYW5kIHN0ZDo6b3B0aW9uYWwgdW50aWwgdGhlIGZvcm1lciBpcyByZW1vdmVkIGZyb20gZ2Vu
ZXJhdGVkIG1ldGhvZCBzaWduYXR1cmVzLgorCiAyMDE3LTExLTMwICBCcmlhbiBCdXJnICA8YmJ1
cmdAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IG1vdmUgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXJyYXk8VD4gdG8gSlNPTiBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5jcHAKaW5kZXggZDc4MGYyNTNjMjdj
YTEyNDZiZDg1ZGViZDQ5ODRkY2M5M2I1ZjdjMy4uMjFiYWE0ODk3ODY4MjU0ZjQ1NTE2YWRhNmUy
ZGIxOTNhMGI5N2ZkMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9JbmplY3RlZFNjcmlwdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9JbmplY3RlZFNjcmlwdC5jcHAKQEAgLTU0LDcgKzU0LDcgQEAgSW5qZWN0ZWRTY3JpcHQ6On5J
bmplY3RlZFNjcmlwdCgpCiB7CiB9CiAKLXZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmV2YWx1YXRlKEVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBT
dHJpbmcmIG9iamVjdEdyb3VwLCBib29sIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgYm9vbCByZXR1
cm5CeVZhbHVlLCBib29sIGdlbmVyYXRlUHJldmlldywgYm9vbCBzYXZlUmVzdWx0LCBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiogcmVzdWx0LCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8Ym9vbD4qIHdhc1Rocm93biwgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6T3B0T3V0cHV0PGludD4qIHNhdmVkUmVzdWx0SW5kZXgpCit2b2lkIEluamVjdGVk
U2NyaXB0OjpldmFsdWF0ZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYg
ZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwgYm9vbCBpbmNsdWRlQ29tbWFu
ZExpbmVBUEksIGJvb2wgcmV0dXJuQnlWYWx1ZSwgYm9vbCBnZW5lcmF0ZVByZXZpZXcsIGJvb2wg
c2F2ZVJlc3VsdCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9i
amVjdD4mIHJlc3VsdCwgYm9vbCYgd2FzVGhyb3duLCBzdGQ6Om9wdGlvbmFsPGludD4mIHNhdmVk
UmVzdWx0SW5kZXgpCiB7CiAgICAgRGVwcmVjYXRlZDo6U2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0
aW9uKGluamVjdGVkU2NyaXB0T2JqZWN0KCksIEFTQ0lJTGl0ZXJhbCgiZXZhbHVhdGUiKSwgaW5z
cGVjdG9yRW52aXJvbm1lbnQoKS0+ZnVuY3Rpb25DYWxsSGFuZGxlcigpKTsKICAgICBmdW5jdGlv
bi5hcHBlbmRBcmd1bWVudChleHByZXNzaW9uKTsKQEAgLTY2LDcgKzY2LDcgQEAgdm9pZCBJbmpl
Y3RlZFNjcmlwdDo6ZXZhbHVhdGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJp
bmcmIGV4cHJlc3Npb24KICAgICBtYWtlRXZhbENhbGwoZXJyb3JTdHJpbmcsIGZ1bmN0aW9uLCBy
ZXN1bHQsIHdhc1Rocm93biwgc2F2ZWRSZXN1bHRJbmRleCk7CiB9CiAKLXZvaWQgSW5qZWN0ZWRT
Y3JpcHQ6OmNhbGxGdW5jdGlvbk9uKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3Ry
aW5nJiBvYmplY3RJZCwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcmIGFy
Z3VtZW50cywgYm9vbCByZXR1cm5CeVZhbHVlLCBib29sIGdlbmVyYXRlUHJldmlldywgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4qIHJlc3VsdCwgSW5z
cGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGJvb2w+KiB3YXNUaHJvd24pCit2b2lkIEluamVj
dGVkU2NyaXB0OjpjYWxsRnVuY3Rpb25PbihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0
IFN0cmluZyYgb2JqZWN0SWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5n
JiBhcmd1bWVudHMsIGJvb2wgcmV0dXJuQnlWYWx1ZSwgYm9vbCBnZW5lcmF0ZVByZXZpZXcsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQs
IGJvb2wmIHdhc1Rocm93bikKIHsKICAgICBEZXByZWNhdGVkOjpTY3JpcHRGdW5jdGlvbkNhbGwg
ZnVuY3Rpb24oaW5qZWN0ZWRTY3JpcHRPYmplY3QoKSwgQVNDSUlMaXRlcmFsKCJjYWxsRnVuY3Rp
b25PbiIpLCBpbnNwZWN0b3JFbnZpcm9ubWVudCgpLT5mdW5jdGlvbkNhbGxIYW5kbGVyKCkpOwog
ICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KG9iamVjdElkKTsKQEAgLTc0LDEwICs3NCwxMiBA
QCB2b2lkIEluamVjdGVkU2NyaXB0OjpjYWxsRnVuY3Rpb25PbihFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZQogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGFy
Z3VtZW50cyk7CiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQocmV0dXJuQnlWYWx1ZSk7CiAg
ICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoZ2VuZXJhdGVQcmV2aWV3KTsKLSAgICBtYWtlRXZh
bENhbGwoZXJyb3JTdHJpbmcsIGZ1bmN0aW9uLCByZXN1bHQsIHdhc1Rocm93bik7CisgICAgCisg
ICAgc3RkOjpvcHRpb25hbDxpbnQ+IHVudXNlZDsKKyAgICBtYWtlRXZhbENhbGwoZXJyb3JTdHJp
bmcsIGZ1bmN0aW9uLCByZXN1bHQsIHdhc1Rocm93biwgdW51c2VkKTsKIH0KIAotdm9pZCBJbmpl
Y3RlZFNjcmlwdDo6ZXZhbHVhdGVPbkNhbGxGcmFtZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IEpTQzo6SlNWYWx1ZSBjYWxsRnJhbWVzLCBjb25zdCBTdHJpbmcmIGNhbGxGcmFtZUlkLCBjb25z
dCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXAsIGJvb2wgaW5j
bHVkZUNvbW1hbmRMaW5lQVBJLCBib29sIHJldHVybkJ5VmFsdWUsIGJvb2wgZ2VuZXJhdGVQcmV2
aWV3LCBib29sIHNhdmVSZXN1bHQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1l
OjpSZW1vdGVPYmplY3Q+KiByZXN1bHQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxi
b29sPiogd2FzVGhyb3duLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8aW50Piogc2F2
ZWRSZXN1bHRJbmRleCkKK3ZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmV2YWx1YXRlT25DYWxsRnJhbWUo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBKU0M6OkpTVmFsdWUgY2FsbEZyYW1lcywgY29uc3Qg
U3RyaW5nJiBjYWxsRnJhbWVJZCwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJp
bmcmIG9iamVjdEdyb3VwLCBib29sIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgYm9vbCByZXR1cm5C
eVZhbHVlLCBib29sIGdlbmVyYXRlUHJldmlldywgYm9vbCBzYXZlUmVzdWx0LCBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBib29sJiB3
YXNUaHJvd24sIHN0ZDo6b3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCkKIHsKICAgICBE
ZXByZWNhdGVkOjpTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24oaW5qZWN0ZWRTY3JpcHRPYmpl
Y3QoKSwgQVNDSUlMaXRlcmFsKCJldmFsdWF0ZU9uQ2FsbEZyYW1lIiksIGluc3BlY3RvckVudmly
b25tZW50KCktPmZ1bmN0aW9uQ2FsbEhhbmRsZXIoKSk7CiAgICAgZnVuY3Rpb24uYXBwZW5kQXJn
dW1lbnQoY2FsbEZyYW1lcyk7CkBAIC05MSwxMDUgKzkzLDk5IEBAIHZvaWQgSW5qZWN0ZWRTY3Jp
cHQ6OmV2YWx1YXRlT25DYWxsRnJhbWUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBKU0M6OkpT
VmFsdWUKICAgICBtYWtlRXZhbENhbGwoZXJyb3JTdHJpbmcsIGZ1bmN0aW9uLCByZXN1bHQsIHdh
c1Rocm93biwgc2F2ZWRSZXN1bHRJbmRleCk7CiB9CiAKLXZvaWQgSW5qZWN0ZWRTY3JpcHQ6Omdl
dEZ1bmN0aW9uRGV0YWlscyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYg
ZnVuY3Rpb25JZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpGdW5jdGlv
bkRldGFpbHM+KiByZXN1bHQpCit2b2lkIEluamVjdGVkU2NyaXB0OjpnZXRGdW5jdGlvbkRldGFp
bHMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9uSWQsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPiYgcmVz
dWx0KQogewogICAgIERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihpbmpl
Y3RlZFNjcmlwdE9iamVjdCgpLCBBU0NJSUxpdGVyYWwoImdldEZ1bmN0aW9uRGV0YWlscyIpLCBp
bnNwZWN0b3JFbnZpcm9ubWVudCgpLT5mdW5jdGlvbkNhbGxIYW5kbGVyKCkpOwogICAgIGZ1bmN0
aW9uLmFwcGVuZEFyZ3VtZW50KGZ1bmN0aW9uSWQpOwogCi0gICAgUmVmUHRyPEpTT046OlZhbHVl
PiByZXN1bHRWYWx1ZTsKLSAgICBtYWtlQ2FsbChmdW5jdGlvbiwgJnJlc3VsdFZhbHVlKTsKKyAg
ICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdFZhbHVlID0gbWFrZUNhbGwoZnVuY3Rpb24pOwog
ICAgIGlmICghcmVzdWx0VmFsdWUgfHwgcmVzdWx0VmFsdWUtPnR5cGUoKSAhPSBKU09OOjpWYWx1
ZTo6VHlwZTo6T2JqZWN0KSB7CiAgICAgICAgIGlmICghcmVzdWx0VmFsdWUtPmFzU3RyaW5nKGVy
cm9yU3RyaW5nKSkKICAgICAgICAgICAgIGVycm9yU3RyaW5nID0gQVNDSUlMaXRlcmFsKCJJbnRl
cm5hbCBlcnJvciIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgKnJlc3VsdCA9IEJp
bmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWls
cz46OnJ1bnRpbWVDYXN0KFdURk1vdmUocmVzdWx0VmFsdWUpKTsKKyAgICByZXN1bHQgPSBCaW5k
aW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+
OjpydW50aW1lQ2FzdChXVEZNb3ZlKHJlc3VsdFZhbHVlKSk7CiB9CiAKLXZvaWQgSW5qZWN0ZWRT
Y3JpcHQ6OmZ1bmN0aW9uRGV0YWlscyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSwgUmVmUHRyPFByb3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPiog
cmVzdWx0KQordm9pZCBJbmplY3RlZFNjcmlwdDo6ZnVuY3Rpb25EZXRhaWxzKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgSlNDOjpKU1ZhbHVlIHZhbHVlLCBSZWZQdHI8UHJvdG9jb2w6OkRlYnVn
Z2VyOjpGdW5jdGlvbkRldGFpbHM+JiByZXN1bHQpCiB7CiAgICAgRGVwcmVjYXRlZDo6U2NyaXB0
RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKGluamVjdGVkU2NyaXB0T2JqZWN0KCksIEFTQ0lJTGl0ZXJh
bCgiZnVuY3Rpb25EZXRhaWxzIiksIGluc3BlY3RvckVudmlyb25tZW50KCktPmZ1bmN0aW9uQ2Fs
bEhhbmRsZXIoKSk7CiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQodmFsdWUpOwogCi0gICAg
UmVmUHRyPEpTT046OlZhbHVlPiByZXN1bHRWYWx1ZTsKLSAgICBtYWtlQ2FsbChmdW5jdGlvbiwg
JnJlc3VsdFZhbHVlKTsKKyAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdFZhbHVlID0gbWFr
ZUNhbGwoZnVuY3Rpb24pOwogICAgIGlmICghcmVzdWx0VmFsdWUgfHwgcmVzdWx0VmFsdWUtPnR5
cGUoKSAhPSBKU09OOjpWYWx1ZTo6VHlwZTo6T2JqZWN0KSB7CiAgICAgICAgIGlmICghcmVzdWx0
VmFsdWUtPmFzU3RyaW5nKGVycm9yU3RyaW5nKSkKICAgICAgICAgICAgIGVycm9yU3RyaW5nID0g
QVNDSUlMaXRlcmFsKCJJbnRlcm5hbCBlcnJvciIpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgKnJlc3VsdCA9IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdn
ZXI6OkZ1bmN0aW9uRGV0YWlscz46OnJ1bnRpbWVDYXN0KFdURk1vdmUocmVzdWx0VmFsdWUpKTsK
KyAgICByZXN1bHQgPSBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2Vy
OjpGdW5jdGlvbkRldGFpbHM+OjpydW50aW1lQ2FzdChXVEZNb3ZlKHJlc3VsdFZhbHVlKSk7CiB9
CiAKLXZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmdldFByZXZpZXcoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6Ok9i
amVjdFByZXZpZXc+KiByZXN1bHQpCit2b2lkIEluamVjdGVkU2NyaXB0OjpnZXRQcmV2aWV3KEVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgUmVmUHRyPFBy
b3RvY29sOjpSdW50aW1lOjpPYmplY3RQcmV2aWV3PiYgcmVzdWx0KQogewogICAgIERlcHJlY2F0
ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihpbmplY3RlZFNjcmlwdE9iamVjdCgpLCBB
U0NJSUxpdGVyYWwoImdldFByZXZpZXciKSwgaW5zcGVjdG9yRW52aXJvbm1lbnQoKS0+ZnVuY3Rp
b25DYWxsSGFuZGxlcigpKTsKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChvYmplY3RJZCk7
CiAKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdFZhbHVlOwotICAgIG1ha2VDYWxsKGZ1
bmN0aW9uLCAmcmVzdWx0VmFsdWUpOworICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0VmFs
dWUgPSBtYWtlQ2FsbChmdW5jdGlvbik7CiAgICAgaWYgKCFyZXN1bHRWYWx1ZSB8fCByZXN1bHRW
YWx1ZS0+dHlwZSgpICE9IEpTT046OlZhbHVlOjpUeXBlOjpPYmplY3QpIHsKICAgICAgICAgaWYg
KCFyZXN1bHRWYWx1ZS0+YXNTdHJpbmcoZXJyb3JTdHJpbmcpKQogICAgICAgICAgICAgZXJyb3JT
dHJpbmcgPSBBU0NJSUxpdGVyYWwoIkludGVybmFsIGVycm9yIik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICAqcmVzdWx0ID0gQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29s
OjpSdW50aW1lOjpPYmplY3RQcmV2aWV3Pjo6cnVudGltZUNhc3QoV1RGTW92ZShyZXN1bHRWYWx1
ZSkpOworICAgIHJlc3VsdCA9IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVu
dGltZTo6T2JqZWN0UHJldmlldz46OnJ1bnRpbWVDYXN0KFdURk1vdmUocmVzdWx0VmFsdWUpKTsK
IH0KIAotdm9pZCBJbmplY3RlZFNjcmlwdDo6Z2V0UHJvcGVydGllcyhFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGJvb2wgb3duUHJvcGVydGllcywgYm9v
bCBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRvcj4+KiBwcm9wZXJ0aWVzKQordm9pZCBJbmpl
Y3RlZFNjcmlwdDo6Z2V0UHJvcGVydGllcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0
IFN0cmluZyYgb2JqZWN0SWQsIGJvb2wgb3duUHJvcGVydGllcywgYm9vbCBnZW5lcmF0ZVByZXZp
ZXcsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlBy
b3BlcnR5RGVzY3JpcHRvcj4+JiBwcm9wZXJ0aWVzKQogewogICAgIERlcHJlY2F0ZWQ6OlNjcmlw
dEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihpbmplY3RlZFNjcmlwdE9iamVjdCgpLCBBU0NJSUxpdGVy
YWwoImdldFByb3BlcnRpZXMiKSwgaW5zcGVjdG9yRW52aXJvbm1lbnQoKS0+ZnVuY3Rpb25DYWxs
SGFuZGxlcigpKTsKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChvYmplY3RJZCk7CiAgICAg
ZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQob3duUHJvcGVydGllcyk7CiAgICAgZnVuY3Rpb24uYXBw
ZW5kQXJndW1lbnQoZ2VuZXJhdGVQcmV2aWV3KTsKIAotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4g
cmVzdWx0OwotICAgIG1ha2VDYWxsKGZ1bmN0aW9uLCAmcmVzdWx0KTsKKyAgICBSZWZQdHI8SlNP
Tjo6VmFsdWU+IHJlc3VsdCA9IG1ha2VDYWxsKGZ1bmN0aW9uKTsKICAgICBpZiAoIXJlc3VsdCB8
fCByZXN1bHQtPnR5cGUoKSAhPSBKU09OOjpWYWx1ZTo6VHlwZTo6QXJyYXkpIHsKICAgICAgICAg
ZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVyYWwoIkludGVybmFsIGVycm9yIik7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICAqcHJvcGVydGllcyA9IEJpbmRpbmdUcmFpdHM8SlNPTjo6QXJy
YXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpQcm9wZXJ0eURlc2NyaXB0b3I+Pjo6
cnVudGltZUNhc3QoV1RGTW92ZShyZXN1bHQpKTsKKyAgICBwcm9wZXJ0aWVzID0gQmluZGluZ1Ry
YWl0czxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5
RGVzY3JpcHRvcj4+OjpydW50aW1lQ2FzdChXVEZNb3ZlKHJlc3VsdCkpOwogfQogCi12b2lkIElu
amVjdGVkU2NyaXB0OjpnZXREaXNwbGF5YWJsZVByb3BlcnRpZXMoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBib29sIGdlbmVyYXRlUHJldmlldywgUmVm
UHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlE
ZXNjcmlwdG9yPj4qIHByb3BlcnRpZXMpCit2b2lkIEluamVjdGVkU2NyaXB0OjpnZXREaXNwbGF5
YWJsZVByb3BlcnRpZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9i
amVjdElkLCBib29sIGdlbmVyYXRlUHJldmlldywgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVj
dG9yOjpQcm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4mIHByb3BlcnRpZXMp
CiB7CiAgICAgRGVwcmVjYXRlZDo6U2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKGluamVjdGVk
U2NyaXB0T2JqZWN0KCksIEFTQ0lJTGl0ZXJhbCgiZ2V0RGlzcGxheWFibGVQcm9wZXJ0aWVzIiks
IGluc3BlY3RvckVudmlyb25tZW50KCktPmZ1bmN0aW9uQ2FsbEhhbmRsZXIoKSk7CiAgICAgZnVu
Y3Rpb24uYXBwZW5kQXJndW1lbnQob2JqZWN0SWQpOwogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3Vt
ZW50KGdlbmVyYXRlUHJldmlldyk7CiAKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdDsK
LSAgICBtYWtlQ2FsbChmdW5jdGlvbiwgJnJlc3VsdCk7CisgICAgUmVmUHRyPEpTT046OlZhbHVl
PiByZXN1bHQgPSBtYWtlQ2FsbChmdW5jdGlvbik7CiAgICAgaWYgKCFyZXN1bHQgfHwgcmVzdWx0
LT50eXBlKCkgIT0gSlNPTjo6VmFsdWU6OlR5cGU6OkFycmF5KSB7CiAgICAgICAgIGVycm9yU3Ry
aW5nID0gQVNDSUlMaXRlcmFsKCJJbnRlcm5hbCBlcnJvciIpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgKnByb3BlcnRpZXMgPSBCaW5kaW5nVHJhaXRzPEpTT046OkFycmF5T2Y8SW5z
cGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj46OnJ1bnRpbWVD
YXN0KFdURk1vdmUocmVzdWx0KSk7CisgICAgcHJvcGVydGllcyA9IEJpbmRpbmdUcmFpdHM8SlNP
Tjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpQcm9wZXJ0eURlc2NyaXB0
b3I+Pjo6cnVudGltZUNhc3QoV1RGTW92ZShyZXN1bHQpKTsKIH0KIAotdm9pZCBJbmplY3RlZFNj
cmlwdDo6Z2V0SW50ZXJuYWxQcm9wZXJ0aWVzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29u
c3QgU3RyaW5nJiBvYmplY3RJZCwgYm9vbCBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0cjxKU09OOjpB
cnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkludGVybmFsUHJvcGVydHlEZXNj
cmlwdG9yPj4qIHByb3BlcnRpZXMpCit2b2lkIEluamVjdGVkU2NyaXB0OjpnZXRJbnRlcm5hbFBy
b3BlcnRpZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElk
LCBib29sIGdlbmVyYXRlUHJldmlldywgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6UnVudGltZTo6SW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0b3I+PiYgcHJvcGVydGll
cykKIHsKICAgICBEZXByZWNhdGVkOjpTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24oaW5qZWN0
ZWRTY3JpcHRPYmplY3QoKSwgQVNDSUlMaXRlcmFsKCJnZXRJbnRlcm5hbFByb3BlcnRpZXMiKSwg
aW5zcGVjdG9yRW52aXJvbm1lbnQoKS0+ZnVuY3Rpb25DYWxsSGFuZGxlcigpKTsKICAgICBmdW5j
dGlvbi5hcHBlbmRBcmd1bWVudChvYmplY3RJZCk7CiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1l
bnQoZ2VuZXJhdGVQcmV2aWV3KTsKIAotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0Owot
ICAgIG1ha2VDYWxsKGZ1bmN0aW9uLCAmcmVzdWx0KTsKKyAgICBSZWZQdHI8SlNPTjo6VmFsdWU+
IHJlc3VsdCA9IG1ha2VDYWxsKGZ1bmN0aW9uKTsKICAgICBpZiAoIXJlc3VsdCB8fCByZXN1bHQt
PnR5cGUoKSAhPSBKU09OOjpWYWx1ZTo6VHlwZTo6QXJyYXkpIHsKICAgICAgICAgZXJyb3JTdHJp
bmcgPSBBU0NJSUxpdGVyYWwoIkludGVybmFsIGVycm9yIik7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKICAgICBhdXRvIGFycmF5ID0gQmluZGluZ1RyYWl0czxKU09OOjpBcnJheU9mPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkludGVybmFsUHJvcGVydHlEZXNjcmlwdG9yPj46OnJ1
bnRpbWVDYXN0KFdURk1vdmUocmVzdWx0KSk7Ci0gICAgKnByb3BlcnRpZXMgPSBhcnJheS0+bGVu
Z3RoKCkgPiAwID8gYXJyYXkgOiBudWxscHRyOworICAgIHByb3BlcnRpZXMgPSBhcnJheS0+bGVu
Z3RoKCkgPiAwID8gYXJyYXkgOiBudWxscHRyOwogfQogCi12b2lkIEluamVjdGVkU2NyaXB0Ojpn
ZXRDb2xsZWN0aW9uRW50cmllcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgb2JqZWN0SWQsIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXAsIGludCBzdGFydEluZGV4LCBp
bnQgbnVtYmVyVG9GZXRjaCwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6
OkNvbGxlY3Rpb25FbnRyeT4+KiBlbnRyaWVzKQordm9pZCBJbmplY3RlZFNjcmlwdDo6Z2V0Q29s
bGVjdGlvbkVudHJpZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9i
amVjdElkLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwLCBpbnQgc3RhcnRJbmRleCwgaW50IG51
bWJlclRvRmV0Y2gsIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpDb2xs
ZWN0aW9uRW50cnk+PiYgZW50cmllcykKIHsKICAgICBEZXByZWNhdGVkOjpTY3JpcHRGdW5jdGlv
bkNhbGwgZnVuY3Rpb24oaW5qZWN0ZWRTY3JpcHRPYmplY3QoKSwgQVNDSUlMaXRlcmFsKCJnZXRD
b2xsZWN0aW9uRW50cmllcyIpLCBpbnNwZWN0b3JFbnZpcm9ubWVudCgpLT5mdW5jdGlvbkNhbGxI
YW5kbGVyKCkpOwogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KG9iamVjdElkKTsKQEAgLTE5
NywzMSArMTkzLDI5IEBAIHZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmdldENvbGxlY3Rpb25FbnRyaWVz
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nCiAgICAgZnVuY3Rpb24uYXBw
ZW5kQXJndW1lbnQoc3RhcnRJbmRleCk7CiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQobnVt
YmVyVG9GZXRjaCk7CiAKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdDsKLSAgICBtYWtl
Q2FsbChmdW5jdGlvbiwgJnJlc3VsdCk7CisgICAgUmVmUHRyPEpTT046OlZhbHVlPiByZXN1bHQg
PSBtYWtlQ2FsbChmdW5jdGlvbik7CiAgICAgaWYgKCFyZXN1bHQgfHwgcmVzdWx0LT50eXBlKCkg
IT0gSlNPTjo6VmFsdWU6OlR5cGU6OkFycmF5KSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gQVND
SUlMaXRlcmFsKCJJbnRlcm5hbCBlcnJvciIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgKmVudHJpZXMgPSBCaW5kaW5nVHJhaXRzPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRp
bWU6OkNvbGxlY3Rpb25FbnRyeT4+OjpydW50aW1lQ2FzdChXVEZNb3ZlKHJlc3VsdCkpOworICAg
IGVudHJpZXMgPSBCaW5kaW5nVHJhaXRzPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6
OkNvbGxlY3Rpb25FbnRyeT4+OjpydW50aW1lQ2FzdChXVEZNb3ZlKHJlc3VsdCkpOwogfQogCi12
b2lkIEluamVjdGVkU2NyaXB0OjpzYXZlUmVzdWx0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
Y29uc3QgU3RyaW5nJiBjYWxsQXJndW1lbnRKU09OLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRP
dXRwdXQ8aW50Piogc2F2ZWRSZXN1bHRJbmRleCkKK3ZvaWQgSW5qZWN0ZWRTY3JpcHQ6OnNhdmVS
ZXN1bHQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGNhbGxBcmd1bWVu
dEpTT04sIHN0ZDo6b3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCkKIHsKICAgICBEZXBy
ZWNhdGVkOjpTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24oaW5qZWN0ZWRTY3JpcHRPYmplY3Qo
KSwgQVNDSUlMaXRlcmFsKCJzYXZlUmVzdWx0IiksIGluc3BlY3RvckVudmlyb25tZW50KCktPmZ1
bmN0aW9uQ2FsbEhhbmRsZXIoKSk7CiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoY2FsbEFy
Z3VtZW50SlNPTik7CiAKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdDsKLSAgICBtYWtl
Q2FsbChmdW5jdGlvbiwgJnJlc3VsdCk7CisgICAgUmVmUHRyPEpTT046OlZhbHVlPiByZXN1bHQg
PSBtYWtlQ2FsbChmdW5jdGlvbik7CiAgICAgaWYgKCFyZXN1bHQgfHwgcmVzdWx0LT50eXBlKCkg
IT0gSlNPTjo6VmFsdWU6OlR5cGU6OkludGVnZXIpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSBB
U0NJSUxpdGVyYWwoIkludGVybmFsIGVycm9yIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBpbnQgc2F2ZWRSZXN1bHRJbmRleEludCA9IDA7Ci0gICAgaWYgKHJlc3VsdC0+YXNJbnRl
Z2VyKHNhdmVkUmVzdWx0SW5kZXhJbnQpICYmIHNhdmVkUmVzdWx0SW5kZXhJbnQgPiAwKQotICAg
ICAgICAqc2F2ZWRSZXN1bHRJbmRleCA9IHNhdmVkUmVzdWx0SW5kZXhJbnQ7CisgICAgaW50IHJl
c3VsdEluZGV4ID0gMDsKKyAgICBpZiAocmVzdWx0LT5hc0ludGVnZXIocmVzdWx0SW5kZXgpICYm
IHJlc3VsdEluZGV4ID4gMCkKKyAgICAgICAgc2F2ZWRSZXN1bHRJbmRleCA9IHJlc3VsdEluZGV4
OwogfQogCiBSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6
Q2FsbEZyYW1lPj4gSW5qZWN0ZWRTY3JpcHQ6OndyYXBDYWxsRnJhbWVzKEpTQzo6SlNWYWx1ZSBj
YWxsRnJhbWVzKSBjb25zdApAQCAtMzA5LDE2ICszMDMsMTQgQEAgdm9pZCBJbmplY3RlZFNjcmlw
dDo6c2V0RXhjZXB0aW9uVmFsdWUoSlNDOjpKU1ZhbHVlIHZhbHVlKQogICAgIEFTU0VSVCghaGFz
Tm9WYWx1ZSgpKTsKICAgICBEZXByZWNhdGVkOjpTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24o
aW5qZWN0ZWRTY3JpcHRPYmplY3QoKSwgQVNDSUlMaXRlcmFsKCJzZXRFeGNlcHRpb25WYWx1ZSIp
LCBpbnNwZWN0b3JFbnZpcm9ubWVudCgpLT5mdW5jdGlvbkNhbGxIYW5kbGVyKCkpOwogICAgIGZ1
bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHZhbHVlKTsKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJl
c3VsdDsKLSAgICBtYWtlQ2FsbChmdW5jdGlvbiwgJnJlc3VsdCk7CisgICAgbWFrZUNhbGwoZnVu
Y3Rpb24pOwogfQogCiB2b2lkIEluamVjdGVkU2NyaXB0OjpjbGVhckV4Y2VwdGlvblZhbHVlKCkK
IHsKICAgICBBU1NFUlQoIWhhc05vVmFsdWUoKSk7CiAgICAgRGVwcmVjYXRlZDo6U2NyaXB0RnVu
Y3Rpb25DYWxsIGZ1bmN0aW9uKGluamVjdGVkU2NyaXB0T2JqZWN0KCksIEFTQ0lJTGl0ZXJhbCgi
Y2xlYXJFeGNlcHRpb25WYWx1ZSIpLCBpbnNwZWN0b3JFbnZpcm9ubWVudCgpLT5mdW5jdGlvbkNh
bGxIYW5kbGVyKCkpOwotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0OwotICAgIG1ha2VD
YWxsKGZ1bmN0aW9uLCAmcmVzdWx0KTsKKyAgICBtYWtlQ2FsbChmdW5jdGlvbik7CiB9CiAKIEpT
Qzo6SlNWYWx1ZSBJbmplY3RlZFNjcmlwdDo6ZmluZE9iamVjdEJ5SWQoY29uc3QgU3RyaW5nJiBv
YmplY3RJZCkgY29uc3QKQEAgLTMzOSwxNiArMzMxLDE0IEBAIHZvaWQgSW5qZWN0ZWRTY3JpcHQ6
Omluc3BlY3RPYmplY3QoSlNDOjpKU1ZhbHVlIHZhbHVlKQogICAgIEFTU0VSVCghaGFzTm9WYWx1
ZSgpKTsKICAgICBEZXByZWNhdGVkOjpTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24oaW5qZWN0
ZWRTY3JpcHRPYmplY3QoKSwgQVNDSUlMaXRlcmFsKCJpbnNwZWN0T2JqZWN0IiksIGluc3BlY3Rv
ckVudmlyb25tZW50KCktPmZ1bmN0aW9uQ2FsbEhhbmRsZXIoKSk7CiAgICAgZnVuY3Rpb24uYXBw
ZW5kQXJndW1lbnQodmFsdWUpOwotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0OwotICAg
IG1ha2VDYWxsKGZ1bmN0aW9uLCAmcmVzdWx0KTsKKyAgICBtYWtlQ2FsbChmdW5jdGlvbik7CiB9
CiAKIHZvaWQgSW5qZWN0ZWRTY3JpcHQ6OnJlbGVhc2VPYmplY3QoY29uc3QgU3RyaW5nJiBvYmpl
Y3RJZCkKIHsKICAgICBEZXByZWNhdGVkOjpTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24oaW5q
ZWN0ZWRTY3JpcHRPYmplY3QoKSwgQVNDSUlMaXRlcmFsKCJyZWxlYXNlT2JqZWN0IiksIGluc3Bl
Y3RvckVudmlyb25tZW50KCktPmZ1bmN0aW9uQ2FsbEhhbmRsZXIoKSk7CiAgICAgZnVuY3Rpb24u
YXBwZW5kQXJndW1lbnQob2JqZWN0SWQpOwotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0
OwotICAgIG1ha2VDYWxsKGZ1bmN0aW9uLCAmcmVzdWx0KTsKKyAgICBtYWtlQ2FsbChmdW5jdGlv
bik7CiB9CiAKIHZvaWQgSW5qZWN0ZWRTY3JpcHQ6OnJlbGVhc2VPYmplY3RHcm91cChjb25zdCBT
dHJpbmcmIG9iamVjdEdyb3VwKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9JbmplY3RlZFNjcmlwdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9JbmplY3RlZFNjcmlwdC5oCmluZGV4IDkxZjI1NTE1NjM3NGUyYzZhNjM3ZDI5ZjIxYjQyZTU0
ZmI4NDM5N2MuLmJhNTI5YjZkMWY2ZGZkMjRhNDYwNTAyYzc2MGE1MWEzZGFhYmM3N2QgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmgKQEAg
LTUwLDE3ICs1MCwxNyBAQCBwdWJsaWM6CiAgICAgSW5qZWN0ZWRTY3JpcHQoRGVwcmVjYXRlZDo6
U2NyaXB0T2JqZWN0LCBJbnNwZWN0b3JFbnZpcm9ubWVudCopOwogICAgIHZpcnR1YWwgfkluamVj
dGVkU2NyaXB0KCk7CiAKLSAgICB2b2lkIGV2YWx1YXRlKEVycm9yU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwLCBib29sIGluY2x1ZGVD
b21tYW5kTGluZUFQSSwgYm9vbCByZXR1cm5CeVZhbHVlLCBib29sIGdlbmVyYXRlUHJldmlldywg
Ym9vbCBzYXZlUmVzdWx0LCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4q
IHJlc3VsdCwgUHJvdG9jb2w6Ok9wdE91dHB1dDxib29sPiogd2FzVGhyb3duLCBJbnNwZWN0b3I6
OlByb3RvY29sOjpPcHRPdXRwdXQ8aW50Piogc2F2ZWRSZXN1bHRJbmRleCk7Ci0gICAgdm9pZCBl
dmFsdWF0ZU9uQ2FsbEZyYW1lKEVycm9yU3RyaW5nJiwgSlNDOjpKU1ZhbHVlIGNhbGxGcmFtZXMs
IGNvbnN0IFN0cmluZyYgY2FsbEZyYW1lSWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29u
c3QgU3RyaW5nJiBvYmplY3RHcm91cCwgYm9vbCBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGJvb2wg
cmV0dXJuQnlWYWx1ZSwgYm9vbCBnZW5lcmF0ZVByZXZpZXcsIGJvb2wgc2F2ZVJlc3VsdCwgUmVm
UHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+KiByZXN1bHQsIFByb3RvY29sOjpP
cHRPdXRwdXQ8Ym9vbD4qIHdhc1Rocm93biwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0
PGludD4qIHNhdmVkUmVzdWx0SW5kZXgpOwotICAgIHZvaWQgY2FsbEZ1bmN0aW9uT24oRXJyb3JT
dHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24s
IGNvbnN0IFN0cmluZyYgYXJndW1lbnRzLCBib29sIHJldHVybkJ5VmFsdWUsIGJvb2wgZ2VuZXJh
dGVQcmV2aWV3LCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4qIHJlc3Vs
dCwgUHJvdG9jb2w6Ok9wdE91dHB1dDxib29sPiogd2FzVGhyb3duKTsKLSAgICB2b2lkIGdldEZ1
bmN0aW9uRGV0YWlscyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZnVuY3Rpb25JZCwgUmVm
UHRyPFByb3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPiogcmVzdWx0KTsKLSAgICB2
b2lkIGZ1bmN0aW9uRGV0YWlscyhFcnJvclN0cmluZyYsIEpTQzo6SlNWYWx1ZSwgUmVmUHRyPFBy
b3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPiogcmVzdWx0KTsKLSAgICB2b2lkIGdl
dFByZXZpZXcoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBSZWZQdHI8UHJv
dG9jb2w6OlJ1bnRpbWU6Ok9iamVjdFByZXZpZXc+KiByZXN1bHQpOwotICAgIHZvaWQgZ2V0UHJv
cGVydGllcyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGJvb2wgb3duUHJv
cGVydGllcywgYm9vbCBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3Rv
Y29sOjpSdW50aW1lOjpQcm9wZXJ0eURlc2NyaXB0b3I+PiogcmVzdWx0KTsKLSAgICB2b2lkIGdl
dERpc3BsYXlhYmxlUHJvcGVydGllcyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgb2JqZWN0
SWQsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6
UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4qIHJlc3VsdCk7Ci0gICAgdm9pZCBnZXRJbnRl
cm5hbFByb3BlcnRpZXMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBib29s
IGdlbmVyYXRlUHJldmlldywgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6
OkludGVybmFsUHJvcGVydHlEZXNjcmlwdG9yPj4qIHJlc3VsdCk7Ci0gICAgdm9pZCBnZXRDb2xs
ZWN0aW9uRW50cmllcyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGNvbnN0
IFN0cmluZyYgb2JqZWN0R3JvdXAsIGludCBzdGFydEluZGV4LCBpbnQgbnVtYmVyVG9GZXRjaCwg
UmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkNvbGxlY3Rpb25FbnRyeT4+
KiBlbnRyaWVzKTsKLSAgICB2b2lkIHNhdmVSZXN1bHQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJp
bmcmIGNhbGxBcmd1bWVudEpTT04sIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxpbnQ+
KiBzYXZlZFJlc3VsdEluZGV4KTsKKyAgICB2b2lkIGV2YWx1YXRlKEVycm9yU3RyaW5nJiwgY29u
c3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwLCBib29sIGlu
Y2x1ZGVDb21tYW5kTGluZUFQSSwgYm9vbCByZXR1cm5CeVZhbHVlLCBib29sIGdlbmVyYXRlUHJl
dmlldywgYm9vbCBzYXZlUmVzdWx0LCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9i
amVjdD4mIHJlc3VsdCwgYm9vbCYgd2FzVGhyb3duLCBzdGQ6Om9wdGlvbmFsPGludD4mIHNhdmVk
UmVzdWx0SW5kZXgpOworICAgIHZvaWQgZXZhbHVhdGVPbkNhbGxGcmFtZShFcnJvclN0cmluZyYs
IEpTQzo6SlNWYWx1ZSBjYWxsRnJhbWVzLCBjb25zdCBTdHJpbmcmIGNhbGxGcmFtZUlkLCBjb25z
dCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXAsIGJvb2wgaW5j
bHVkZUNvbW1hbmRMaW5lQVBJLCBib29sIHJldHVybkJ5VmFsdWUsIGJvb2wgZ2VuZXJhdGVQcmV2
aWV3LCBib29sIHNhdmVSZXN1bHQsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2Jq
ZWN0PiYgcmVzdWx0LCBib29sJiB3YXNUaHJvd24sIHN0ZDo6b3B0aW9uYWw8aW50PiYgc2F2ZWRS
ZXN1bHRJbmRleCk7CisgICAgdm9pZCBjYWxsRnVuY3Rpb25PbihFcnJvclN0cmluZyYsIGNvbnN0
IFN0cmluZyYgb2JqZWN0SWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5n
JiBhcmd1bWVudHMsIGJvb2wgcmV0dXJuQnlWYWx1ZSwgYm9vbCBnZW5lcmF0ZVByZXZpZXcsIFJl
ZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBib29sJiB3YXNU
aHJvd24pOworICAgIHZvaWQgZ2V0RnVuY3Rpb25EZXRhaWxzKEVycm9yU3RyaW5nJiwgY29uc3Qg
U3RyaW5nJiBmdW5jdGlvbklkLCBSZWZQdHI8UHJvdG9jb2w6OkRlYnVnZ2VyOjpGdW5jdGlvbkRl
dGFpbHM+JiByZXN1bHQpOworICAgIHZvaWQgZnVuY3Rpb25EZXRhaWxzKEVycm9yU3RyaW5nJiwg
SlNDOjpKU1ZhbHVlLCBSZWZQdHI8UHJvdG9jb2w6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+
JiByZXN1bHQpOworICAgIHZvaWQgZ2V0UHJldmlldyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmlu
ZyYgb2JqZWN0SWQsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6T2JqZWN0UHJldmlldz4mIHJl
c3VsdCk7CisgICAgdm9pZCBnZXRQcm9wZXJ0aWVzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5n
JiBvYmplY3RJZCwgYm9vbCBvd25Qcm9wZXJ0aWVzLCBib29sIGdlbmVyYXRlUHJldmlldywgUmVm
UHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRvcj4+
JiByZXN1bHQpOworICAgIHZvaWQgZ2V0RGlzcGxheWFibGVQcm9wZXJ0aWVzKEVycm9yU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgYm9vbCBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0cjxK
U09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpQcm9wZXJ0eURlc2NyaXB0b3I+PiYgcmVz
dWx0KTsKKyAgICB2b2lkIGdldEludGVybmFsUHJvcGVydGllcyhFcnJvclN0cmluZyYsIGNvbnN0
IFN0cmluZyYgb2JqZWN0SWQsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SlNPTjo6QXJy
YXlPZjxQcm90b2NvbDo6UnVudGltZTo6SW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0b3I+PiYgcmVz
dWx0KTsKKyAgICB2b2lkIGdldENvbGxlY3Rpb25FbnRyaWVzKEVycm9yU3RyaW5nJiwgY29uc3Qg
U3RyaW5nJiBvYmplY3RJZCwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwgaW50IHN0YXJ0SW5k
ZXgsIGludCBudW1iZXJUb0ZldGNoLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVu
dGltZTo6Q29sbGVjdGlvbkVudHJ5Pj4mIGVudHJpZXMpOworICAgIHZvaWQgc2F2ZVJlc3VsdChF
cnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgY2FsbEFyZ3VtZW50SlNPTiwgc3RkOjpvcHRpb25h
bDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KTsKIAogICAgIFJlZjxKU09OOjpBcnJheU9mPFByb3Rv
Y29sOjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lPj4gd3JhcENhbGxGcmFtZXMoSlNDOjpKU1ZhbHVlKSBj
b25zdDsKICAgICBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gd3JhcE9i
amVjdChKU0M6OkpTVmFsdWUsIGNvbnN0IFN0cmluZyYgZ3JvdXBOYW1lLCBib29sIGdlbmVyYXRl
UHJldmlldyA9IGZhbHNlKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRCYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRCYXNlLmNwcAppbmRleCA1NmNjOWZlMTdhMDEwNDA4
MjE1MGI4ZGE2NDdiNjMyYmJlYmRkZDg2Li42YmEwMjcyZmU3NTQ3NzVkNjEwMjlmN2Y3MWRlYWNi
ZjY2YTgwYzdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0lu
amVjdGVkU2NyaXB0QmFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9JbmplY3RlZFNjcmlwdEJhc2UuY3BwCkBAIC00Myw3ICs0Myw2IEBAIG5hbWVzcGFjZSBJbnNw
ZWN0b3IgewogCiBJbmplY3RlZFNjcmlwdEJhc2U6OkluamVjdGVkU2NyaXB0QmFzZShjb25zdCBT
dHJpbmcmIG5hbWUpCiAgICAgOiBtX25hbWUobmFtZSkKLSAgICAsIG1fZW52aXJvbm1lbnQobnVs
bHB0cikKIHsKIH0KIApAQCAtNzUsMjkgKzc0LDI4IEBAIEpTQzo6SlNWYWx1ZSBJbmplY3RlZFNj
cmlwdEJhc2U6OmNhbGxGdW5jdGlvbldpdGhFdmFsRW5hYmxlZChEZXByZWNhdGVkOjpTY3JpcHRG
CiAgICAgcmV0dXJuIGZ1bmN0aW9uLmNhbGwoaGFkRXhjZXB0aW9uKTsKIH0KIAotdm9pZCBJbmpl
Y3RlZFNjcmlwdEJhc2U6Om1ha2VDYWxsKERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbCYg
ZnVuY3Rpb24sIFJlZlB0cjxKU09OOjpWYWx1ZT4qIHJlc3VsdCkKK1JlZjxKU09OOjpWYWx1ZT4g
SW5qZWN0ZWRTY3JpcHRCYXNlOjptYWtlQ2FsbChEZXByZWNhdGVkOjpTY3JpcHRGdW5jdGlvbkNh
bGwmIGZ1bmN0aW9uKQogewotICAgIGlmIChoYXNOb1ZhbHVlKCkgfHwgIWhhc0FjY2Vzc1RvSW5z
cGVjdGVkU2NyaXB0U3RhdGUoKSkgewotICAgICAgICAqcmVzdWx0ID0gSlNPTjo6VmFsdWU6Om51
bGwoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoaGFzTm9WYWx1ZSgpIHx8ICFo
YXNBY2Nlc3NUb0luc3BlY3RlZFNjcmlwdFN0YXRlKCkpCisgICAgICAgIHJldHVybiBKU09OOjpW
YWx1ZTo6bnVsbCgpOwogCiAgICAgYm9vbCBoYWRFeGNlcHRpb24gPSBmYWxzZTsKLSAgICBhdXRv
IHJlc3VsdFZhbHVlID0gY2FsbEZ1bmN0aW9uV2l0aEV2YWxFbmFibGVkKGZ1bmN0aW9uLCBoYWRF
eGNlcHRpb24pOworICAgIGF1dG8gcmVzdWx0SlNWYWx1ZSA9IGNhbGxGdW5jdGlvbldpdGhFdmFs
RW5hYmxlZChmdW5jdGlvbiwgaGFkRXhjZXB0aW9uKTsKIAogICAgIEFTU0VSVCghaGFkRXhjZXB0
aW9uKTsKLSAgICBpZiAoIWhhZEV4Y2VwdGlvbikgewotICAgICAgICAqcmVzdWx0ID0gdG9JbnNw
ZWN0b3JWYWx1ZSgqbV9pbmplY3RlZFNjcmlwdE9iamVjdC5zY3JpcHRTdGF0ZSgpLCByZXN1bHRW
YWx1ZSk7Ci0gICAgICAgIGlmICghKnJlc3VsdCkKLSAgICAgICAgICAgICpyZXN1bHQgPSBKU09O
OjpWYWx1ZTo6Y3JlYXRlKFN0cmluZzo6Zm9ybWF0KCJPYmplY3QgaGFzIHRvbyBsb25nIHJlZmVy
ZW5jZSBjaGFpbiAobXVzdCBub3QgYmUgbG9uZ2VyIHRoYW4gJWQpIiwgSlNPTjo6VmFsdWU6Om1h
eERlcHRoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgICpyZXN1bHQgPSBKU09OOjpWYWx1ZTo6Y3Jl
YXRlKCJFeGNlcHRpb24gd2hpbGUgbWFraW5nIGEgY2FsbC4iKTsKKyAgICBpZiAoaGFkRXhjZXB0
aW9uKQorICAgICAgICByZXR1cm4gSlNPTjo6VmFsdWU6OmNyZWF0ZSgiRXhjZXB0aW9uIHdoaWxl
IG1ha2luZyBhIGNhbGwuIik7CisKKyAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdEpTT05W
YWx1ZSA9IHRvSW5zcGVjdG9yVmFsdWUoKm1faW5qZWN0ZWRTY3JpcHRPYmplY3Quc2NyaXB0U3Rh
dGUoKSwgcmVzdWx0SlNWYWx1ZSk7CisgICAgaWYgKCFyZXN1bHRKU09OVmFsdWUpCisgICAgICAg
IHJldHVybiBKU09OOjpWYWx1ZTo6Y3JlYXRlKFN0cmluZzo6Zm9ybWF0KCJPYmplY3QgaGFzIHRv
byBsb25nIHJlZmVyZW5jZSBjaGFpbiAobXVzdCBub3QgYmUgbG9uZ2VyIHRoYW4gJWQpIiwgSlNP
Tjo6VmFsdWU6Om1heERlcHRoKSk7CisKKyAgICByZXR1cm4gcmVzdWx0SlNPTlZhbHVlLnJlbGVh
c2VOb25OdWxsKCk7CiB9CiAKLXZvaWQgSW5qZWN0ZWRTY3JpcHRCYXNlOjptYWtlRXZhbENhbGwo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBEZXByZWNhdGVkOjpTY3JpcHRGdW5jdGlvbkNhbGwm
IGZ1bmN0aW9uLCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4qIG9iamVj
dFJlc3VsdCwgUHJvdG9jb2w6Ok9wdE91dHB1dDxib29sPiogd2FzVGhyb3duLCBQcm90b2NvbDo6
T3B0T3V0cHV0PGludD4qIHNhdmVkUmVzdWx0SW5kZXgpCit2b2lkIEluamVjdGVkU2NyaXB0QmFz
ZTo6bWFrZUV2YWxDYWxsKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgRGVwcmVjYXRlZDo6U2Ny
aXB0RnVuY3Rpb25DYWxsJiBmdW5jdGlvbiwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1v
dGVPYmplY3Q+JiBvdXRfcmVzdWx0T2JqZWN0LCBib29sJiBvdXRfd2FzVGhyb3duLCBzdGQ6Om9w
dGlvbmFsPGludD4mIG91dF9zYXZlZFJlc3VsdEluZGV4KQogewotICAgIFJlZlB0cjxKU09OOjpW
YWx1ZT4gcmVzdWx0OwotICAgIG1ha2VDYWxsKGZ1bmN0aW9uLCAmcmVzdWx0KTsKKyAgICBSZWZQ
dHI8SlNPTjo6VmFsdWU+IHJlc3VsdCA9IG1ha2VDYWxsKGZ1bmN0aW9uKTsKICAgICBpZiAoIXJl
c3VsdCkgewogICAgICAgICBlcnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiSW50ZXJuYWwgZXJy
b3I6IHJlc3VsdCB2YWx1ZSBpcyBlbXB0eSIpOwogICAgICAgICByZXR1cm47CkBAIC0xMjEsMjAg
KzExOSwxOCBAQCB2b2lkIEluamVjdGVkU2NyaXB0QmFzZTo6bWFrZUV2YWxDYWxsKEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgRGVwcmVjYXRlZDo6U2NyaQogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgYm9vbCB3YXNUaHJvd25WYWx1ZSA9IGZhbHNlOwotICAgIGlmICghcmVzdWx0VHVw
bGUtPmdldEJvb2xlYW4oQVNDSUlMaXRlcmFsKCJ3YXNUaHJvd24iKSwgd2FzVGhyb3duVmFsdWUp
KSB7CisgICAgYm9vbCB3YXNUaHJvd24gPSBmYWxzZTsKKyAgICBpZiAoIXJlc3VsdFR1cGxlLT5n
ZXRCb29sZWFuKEFTQ0lJTGl0ZXJhbCgid2FzVGhyb3duIiksIHdhc1Rocm93bikpIHsKICAgICAg
ICAgZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVyYWwoIkludGVybmFsIGVycm9yOiByZXN1bHQgaXMg
bm90IGEgcGFpciBvZiB2YWx1ZSBhbmQgd2FzVGhyb3duIGZsYWciKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgICpvYmplY3RSZXN1bHQgPSBCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpS
dW50aW1lOjpSZW1vdGVPYmplY3Q+OjpydW50aW1lQ2FzdChyZXN1bHRPYmplY3QpOwotICAgICp3
YXNUaHJvd24gPSB3YXNUaHJvd25WYWx1ZTsKKyAgICBvdXRfcmVzdWx0T2JqZWN0ID0gQmluZGlu
Z1RyYWl0czxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0Pjo6cnVudGltZUNhc3QocmVz
dWx0T2JqZWN0KTsKKyAgICBvdXRfd2FzVGhyb3duID0gd2FzVGhyb3duOwogCi0gICAgaWYgKHNh
dmVkUmVzdWx0SW5kZXgpIHsKLSAgICAgICAgaW50IHNhdmVkSW5kZXggPSAwOwotICAgICAgICBp
ZiAocmVzdWx0VHVwbGUtPmdldEludGVnZXIoQVNDSUlMaXRlcmFsKCJzYXZlZFJlc3VsdEluZGV4
IiksIHNhdmVkSW5kZXgpKQotICAgICAgICAgICAgKnNhdmVkUmVzdWx0SW5kZXggPSBzYXZlZElu
ZGV4OwotICAgIH0KKyAgICBpbnQgc2F2ZWRSZXN1bHRJbmRleDsKKyAgICBpZiAocmVzdWx0VHVw
bGUtPmdldEludGVnZXIoQVNDSUlMaXRlcmFsKCJzYXZlZFJlc3VsdEluZGV4IiksIHNhdmVkUmVz
dWx0SW5kZXgpKQorICAgICAgICBvdXRfc2F2ZWRSZXN1bHRJbmRleCA9IHNhdmVkUmVzdWx0SW5k
ZXg7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEJhc2UuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRCYXNlLmgKaW5kZXggNmI2MmY0OTI3
ZWUyYjc5MGI3ZWU1NWM4YmNmYjBlZjc0NWU3MTI0My4uZGYxZmJmMjIxNzUzMmQ0MjRmNDMzZjAy
NjU0OTgzMDQ0NzE2N2M1YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9JbmplY3RlZFNjcmlwdEJhc2UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL0luamVjdGVkU2NyaXB0QmFzZS5oCkBAIC02MywxMyArNjMsMTMgQEAgcHJvdGVjdGVk
OgogCiAgICAgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0T2JqZWN0JiBpbmplY3RlZFNjcmlwdE9i
amVjdCgpIGNvbnN0OwogICAgIEpTQzo6SlNWYWx1ZSBjYWxsRnVuY3Rpb25XaXRoRXZhbEVuYWJs
ZWQoRGVwcmVjYXRlZDo6U2NyaXB0RnVuY3Rpb25DYWxsJiwgYm9vbCYgaGFkRXhjZXB0aW9uKSBj
b25zdDsKLSAgICB2b2lkIG1ha2VDYWxsKERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbCYs
IFJlZlB0cjxKU09OOjpWYWx1ZT4qIHJlc3VsdCk7Ci0gICAgdm9pZCBtYWtlRXZhbENhbGwoRXJy
b3JTdHJpbmcmLCBEZXByZWNhdGVkOjpTY3JpcHRGdW5jdGlvbkNhbGwmLCBSZWZQdHI8UHJvdG9j
b2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4qIHJlc3VsdCwgUHJvdG9jb2w6Ok9wdE91dHB1dDxi
b29sPiogd2FzVGhyb3duLCBQcm90b2NvbDo6T3B0T3V0cHV0PGludD4qIHNhdmVkUmVzdWx0ID0g
bnVsbHB0cik7CisgICAgUmVmPEpTT046OlZhbHVlPiBtYWtlQ2FsbChEZXByZWNhdGVkOjpTY3Jp
cHRGdW5jdGlvbkNhbGwmKTsKKyAgICB2b2lkIG1ha2VFdmFsQ2FsbChFcnJvclN0cmluZyYsIERl
cHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbCYsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6
UmVtb3RlT2JqZWN0PiYgcmVzdWx0T2JqZWN0LCBib29sJiB3YXNUaHJvd24sIHN0ZDo6b3B0aW9u
YWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCk7CiAKIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fbmFt
ZTsKICAgICBEZXByZWNhdGVkOjpTY3JpcHRPYmplY3QgbV9pbmplY3RlZFNjcmlwdE9iamVjdDsK
LSAgICBJbnNwZWN0b3JFbnZpcm9ubWVudCogbV9lbnZpcm9ubWVudDsKKyAgICBJbnNwZWN0b3JF
bnZpcm9ubWVudCogbV9lbnZpcm9ubWVudCB7IG51bGxwdHIgfTsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAppbmRleCBkNjlk
ZGEyMzI3OGM3Yzk4ZGRjZTJlZDM4YWE1NmFhZjJlM2RiMjVjLi4xNmU0YTdkNjc4OTgzMzQ1ZDI5
ZjhmZWZhZDBhZTY2Mzk1Zjg5NDYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNw
cApAQCAtNjkyLDcgKzY5Miw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Z2V0RnVu
Y3Rpb25EZXRhaWxzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIGluamVjdGVkU2NyaXB0LmdldEZ1bmN0aW9uRGV0YWlscyhlcnJv
clN0cmluZywgZnVuY3Rpb25JZCwgJmRldGFpbHMpOworICAgIGluamVjdGVkU2NyaXB0LmdldEZ1
bmN0aW9uRGV0YWlscyhlcnJvclN0cmluZywgZnVuY3Rpb25JZCwgZGV0YWlscyk7CiB9CiAKIHZv
aWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2NoZWR1bGVQYXVzZU9uTmV4dFN0YXRlbWVudChE
ZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uIGJyZWFrUmVhc29uLCBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiYmIGRhdGEpCkBAIC04MjcsNyArODI3LDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50OjpzZXRQYXVzZU9uQXNzZXJ0aW9ucyhFcnJvclN0cmluZyYsIGJvb2wgZW5hYmxl
ZCkKICAgICBtX3BhdXNlT25Bc3NlcnRpb25GYWlsdXJlcyA9IGVuYWJsZWQ7CiB9CiAKLXZvaWQg
SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZXZhbHVhdGVPbkNhbGxGcmFtZShFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgY2FsbEZyYW1lSWQsIGNvbnN0IFN0cmluZyYgZXhw
cmVzc2lvbiwgY29uc3QgU3RyaW5nKiBjb25zdCBvYmplY3RHcm91cCwgY29uc3QgYm9vbCogY29u
c3QgaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBjb25zdCBib29sKiBjb25zdCBkb05vdFBhdXNlT25F
eGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIGNvbnN0IGJvb2wqIGNvbnN0IHJldHVybkJ5VmFsdWUs
IGNvbnN0IGJvb2wqIGdlbmVyYXRlUHJldmlldywgY29uc3QgYm9vbCogc2F2ZVJlc3VsdCwgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwg
SW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGJvb2w+KiB3YXNUaHJvd24sIEluc3BlY3Rv
cjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxpbnQ+KiBzYXZlZFJlc3VsdEluZGV4KQordm9pZCBJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50OjpldmFsdWF0ZU9uQ2FsbEZyYW1lKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgY29uc3QgU3RyaW5nJiBjYWxsRnJhbWVJZCwgY29uc3QgU3RyaW5nJiBleHByZXNz
aW9uLCBjb25zdCBTdHJpbmcqIGNvbnN0IG9iamVjdEdyb3VwLCBjb25zdCBib29sKiBjb25zdCBp
bmNsdWRlQ29tbWFuZExpbmVBUEksIGNvbnN0IGJvb2wqIGNvbnN0IGRvTm90UGF1c2VPbkV4Y2Vw
dGlvbnNBbmRNdXRlQ29uc29sZSwgY29uc3QgYm9vbCogY29uc3QgcmV0dXJuQnlWYWx1ZSwgY29u
c3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3LCBjb25zdCBib29sKiBzYXZlUmVzdWx0LCBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8Ym9vbD4qIG91dF93YXNUaHJvd24sIEluc3BlY3Rv
cjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxpbnQ+KiBvdXRfc2F2ZWRSZXN1bHRJbmRleCkKIHsKICAg
ICBpZiAobV9jdXJyZW50Q2FsbFN0YWNrLmhhc05vVmFsdWUoKSkgewogICAgICAgICBlcnJvclN0
cmluZyA9IEFTQ0lJTGl0ZXJhbCgiTm90IHBhdXNlZCIpOwpAQCAtODQ3LDcgKzg0NywxNSBAQCB2
b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmV2YWx1YXRlT25DYWxsRnJhbWUoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBjb25zdAogICAgICAgICBtdXRlQ29uc29sZSgpOwogICAgIH0KIAot
ICAgIGluamVjdGVkU2NyaXB0LmV2YWx1YXRlT25DYWxsRnJhbWUoZXJyb3JTdHJpbmcsIG1fY3Vy
cmVudENhbGxTdGFjaywgY2FsbEZyYW1lSWQsIGV4cHJlc3Npb24sIG9iamVjdEdyb3VwID8gKm9i
amVjdEdyb3VwIDogIiIsIGluY2x1ZGVDb21tYW5kTGluZUFQSSA/ICppbmNsdWRlQ29tbWFuZExp
bmVBUEkgOiBmYWxzZSwgcmV0dXJuQnlWYWx1ZSA/ICpyZXR1cm5CeVZhbHVlIDogZmFsc2UsIGdl
bmVyYXRlUHJldmlldyA/ICpnZW5lcmF0ZVByZXZpZXcgOiBmYWxzZSwgc2F2ZVJlc3VsdCA/ICpz
YXZlUmVzdWx0IDogZmFsc2UsICZyZXN1bHQsIHdhc1Rocm93biwgc2F2ZWRSZXN1bHRJbmRleCk7
CisgICAgLy8gRklYTUU6IHJlbW92ZSB0aGlzIGJyaWRnaW5nIGNvZGUgd2hlbiBnZW5lcmF0ZWQg
cHJvdG9jb2wgY29tbWFuZHMgbm8gbG9uZ2VyIHVzZSBPcHRPdXRwdXQ8VD4uCisgICAgYm9vbCB3
YXNUaHJvd247CisgICAgc3RkOjpvcHRpb25hbDxpbnQ+IHNhdmVkUmVzdWx0SW5kZXg7CisKKyAg
ICBpbmplY3RlZFNjcmlwdC5ldmFsdWF0ZU9uQ2FsbEZyYW1lKGVycm9yU3RyaW5nLCBtX2N1cnJl
bnRDYWxsU3RhY2ssIGNhbGxGcmFtZUlkLCBleHByZXNzaW9uLCBvYmplY3RHcm91cCA/ICpvYmpl
Y3RHcm91cCA6ICIiLCBpbmNsdWRlQ29tbWFuZExpbmVBUEkgPyAqaW5jbHVkZUNvbW1hbmRMaW5l
QVBJIDogZmFsc2UsIHJldHVybkJ5VmFsdWUgPyAqcmV0dXJuQnlWYWx1ZSA6IGZhbHNlLCBnZW5l
cmF0ZVByZXZpZXcgPyAqZ2VuZXJhdGVQcmV2aWV3IDogZmFsc2UsIHNhdmVSZXN1bHQgPyAqc2F2
ZVJlc3VsdCA6IGZhbHNlLCByZXN1bHQsIHdhc1Rocm93biwgc2F2ZWRSZXN1bHRJbmRleCk7CisK
KyAgICAqb3V0X3dhc1Rocm93biA9IHdhc1Rocm93bjsKKyAgICBpZiAoc2F2ZWRSZXN1bHRJbmRl
eC5oYXNfdmFsdWUoKSkKKyAgICAgICAgKm91dF9zYXZlZFJlc3VsdEluZGV4ID0gc2F2ZWRSZXN1
bHRJbmRleC52YWx1ZSgpOwogCiAgICAgaWYgKGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRl
Q29uc29sZSA/ICpkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUgOiBmYWxzZSkg
ewogICAgICAgICB1bm11dGVDb25zb2xlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JIZWFwQWdlbnQuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9ySGVhcEFnZW50LmNwcAppbmRl
eCBmM2FjMDY0YzA2MTMyMTc4NzVhMDgyYmU1YTFjNmMyMjgxNjk0ZWZkLi5mNjhkMWNhNDI3Y2Vm
ZDFmNmRmMTMwODc3NWRmNmE0NTAyYzI0ZjczIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JIZWFwQWdlbnQuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckhlYXBBZ2VudC5jcHAK
QEAgLTIwNyw3ICsyMDcsNyBAQCB2b2lkIEluc3BlY3RvckhlYXBBZ2VudDo6Z2V0UHJldmlldyhF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBoZWFwT2JqZWN0SWQsCiAKICAgICAvLyBGdW5j
dGlvbiBwcmV2aWV3LgogICAgIGlmIChjZWxsLT5pbmhlcml0cyh2bSwgSlNGdW5jdGlvbjo6aW5m
bygpKSkgewotICAgICAgICBpbmplY3RlZFNjcmlwdC5mdW5jdGlvbkRldGFpbHMoZXJyb3JTdHJp
bmcsIGNlbGwsICZmdW5jdGlvbkRldGFpbHMpOworICAgICAgICBpbmplY3RlZFNjcmlwdC5mdW5j
dGlvbkRldGFpbHMoZXJyb3JTdHJpbmcsIGNlbGwsIGZ1bmN0aW9uRGV0YWlscyk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuY3BwCmluZGV4IGY1
ZDI1MDVkNDk1NzQ3YjVhNGE1OTZiMmQxM2U5OTBmZDcxZjk0OWEuLmUwOGJhODk2ZmNiOGYzMTAw
NDBiZDIxMGIxNDA1MTgwZjY0NDBhMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50LmNw
cApAQCAtMTEyLDcgKzExMiw3IEBAIHZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpwYXJzZShF
cnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgSW5zcGVjCiAgICAgfQogfQog
Ci12b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6ZXZhbHVhdGUoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyogY29uc3Qgb2Jq
ZWN0R3JvdXAsIGNvbnN0IGJvb2wqIGNvbnN0IGluY2x1ZGVDb21tYW5kTGluZUFQSSwgY29uc3Qg
Ym9vbCogY29uc3QgZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBjb25zdCBp
bnQqIGV4ZWN1dGlvbkNvbnRleHRJZCwgY29uc3QgYm9vbCogY29uc3QgcmV0dXJuQnlWYWx1ZSwg
Y29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3LCBjb25zdCBib29sKiBzYXZlUmVzdWx0LCBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8Ym9vbD4qIHdhc1Rocm93biwgSW5zcGVjdG9y
OjpQcm90b2NvbDo6T3B0T3V0cHV0PGludD4qIHNhdmVkUmVzdWx0SW5kZXgpCit2b2lkIEluc3Bl
Y3RvclJ1bnRpbWVBZ2VudDo6ZXZhbHVhdGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25z
dCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyogY29uc3Qgb2JqZWN0R3JvdXAsIGNv
bnN0IGJvb2wqIGNvbnN0IGluY2x1ZGVDb21tYW5kTGluZUFQSSwgY29uc3QgYm9vbCogY29uc3Qg
ZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBjb25zdCBpbnQqIGV4ZWN1dGlv
bkNvbnRleHRJZCwgY29uc3QgYm9vbCogY29uc3QgcmV0dXJuQnlWYWx1ZSwgY29uc3QgYm9vbCog
Z2VuZXJhdGVQcmV2aWV3LCBjb25zdCBib29sKiBzYXZlUmVzdWx0LCBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBJbnNwZWN0b3I6OlBy
b3RvY29sOjpPcHRPdXRwdXQ8Ym9vbD4qIG91dF93YXNUaHJvd24sIEluc3BlY3Rvcjo6UHJvdG9j
b2w6Ok9wdE91dHB1dDxpbnQ+KiBvdXRfc2F2ZWRSZXN1bHRJbmRleCkKIHsKICAgICBJbmplY3Rl
ZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IGluamVjdGVkU2NyaXB0Rm9yRXZhbChlcnJvclN0cmlu
ZywgZXhlY3V0aW9uQ29udGV4dElkKTsKICAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1
ZSgpKQpAQCAtMTI0LDcgKzEyNCwxNCBAQCB2b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6ZXZh
bHVhdGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGV4cAogICAgIGlm
IChhc0Jvb2woZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlKSkKICAgICAgICAg
bXV0ZUNvbnNvbGUoKTsKIAotICAgIGluamVjdGVkU2NyaXB0LmV2YWx1YXRlKGVycm9yU3RyaW5n
LCBleHByZXNzaW9uLCBvYmplY3RHcm91cCA/ICpvYmplY3RHcm91cCA6IFN0cmluZygpLCBhc0Jv
b2woaW5jbHVkZUNvbW1hbmRMaW5lQVBJKSwgYXNCb29sKHJldHVybkJ5VmFsdWUpLCBhc0Jvb2wo
Z2VuZXJhdGVQcmV2aWV3KSwgYXNCb29sKHNhdmVSZXN1bHQpLCAmcmVzdWx0LCB3YXNUaHJvd24s
IHNhdmVkUmVzdWx0SW5kZXgpOworICAgIC8vIEZJWE1FOiByZW1vdmUgdGhpcyBicmlkZ2luZyBj
b2RlIHdoZW4gZ2VuZXJhdGVkIHByb3RvY29sIGNvbW1hbmRzIG5vIGxvbmdlciB1c2UgT3B0T3V0
cHV0PFQ+LgorICAgIGJvb2wgd2FzVGhyb3duOworICAgIHN0ZDo6b3B0aW9uYWw8aW50PiBzYXZl
ZFJlc3VsdEluZGV4OworICAgIGluamVjdGVkU2NyaXB0LmV2YWx1YXRlKGVycm9yU3RyaW5nLCBl
eHByZXNzaW9uLCBvYmplY3RHcm91cCA/ICpvYmplY3RHcm91cCA6IFN0cmluZygpLCBhc0Jvb2wo
aW5jbHVkZUNvbW1hbmRMaW5lQVBJKSwgYXNCb29sKHJldHVybkJ5VmFsdWUpLCBhc0Jvb2woZ2Vu
ZXJhdGVQcmV2aWV3KSwgYXNCb29sKHNhdmVSZXN1bHQpLCByZXN1bHQsIHdhc1Rocm93biwgc2F2
ZWRSZXN1bHRJbmRleCk7CisgICAgCisgICAgKm91dF93YXNUaHJvd24gPSB3YXNUaHJvd247Cisg
ICAgaWYgKHNhdmVkUmVzdWx0SW5kZXguaGFzX3ZhbHVlKCkpCisgICAgICAgICpvdXRfc2F2ZWRS
ZXN1bHRJbmRleCA9IHNhdmVkUmVzdWx0SW5kZXgudmFsdWUoKTsKIAogICAgIGlmIChhc0Jvb2wo
ZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlKSkgewogICAgICAgICB1bm11dGVD
b25zb2xlKCk7CkBAIC0xMzIsNyArMTM5LDcgQEAgdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6
OmV2YWx1YXRlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBleHAKICAg
ICB9CiB9CiAKLXZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpjYWxsRnVuY3Rpb25PbihFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGNvbnN0IFN0cmlu
ZyYgZXhwcmVzc2lvbiwgY29uc3QgSlNPTjo6QXJyYXkqIG9wdGlvbmFsQXJndW1lbnRzLCBjb25z
dCBib29sKiBjb25zdCBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIGNvbnN0
IGJvb2wqIGNvbnN0IHJldHVybkJ5VmFsdWUsIGNvbnN0IGJvb2wqIGdlbmVyYXRlUHJldmlldywg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3Vs
dCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGJvb2w+KiB3YXNUaHJvd24pCit2b2lk
IEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Y2FsbEZ1bmN0aW9uT24oRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24s
IGNvbnN0IEpTT046OkFycmF5KiBvcHRpb25hbEFyZ3VtZW50cywgY29uc3QgYm9vbCogY29uc3Qg
ZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBjb25zdCBib29sKiBjb25zdCBy
ZXR1cm5CeVZhbHVlLCBjb25zdCBib29sKiBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQsIEluc3BlY3Rvcjo6
UHJvdG9jb2w6Ok9wdE91dHB1dDxib29sPiogb3V0X3dhc1Rocm93bikKIHsKICAgICBJbmplY3Rl
ZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmluamVjdGVk
U2NyaXB0Rm9yT2JqZWN0SWQob2JqZWN0SWQpOwogICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNO
b1ZhbHVlKCkpIHsKQEAgLTE1MCw3ICsxNTcsMTEgQEAgdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdl
bnQ6OmNhbGxGdW5jdGlvbk9uKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW4K
ICAgICBpZiAoYXNCb29sKGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSkpCiAg
ICAgICAgIG11dGVDb25zb2xlKCk7CiAKLSAgICBpbmplY3RlZFNjcmlwdC5jYWxsRnVuY3Rpb25P
bihlcnJvclN0cmluZywgb2JqZWN0SWQsIGV4cHJlc3Npb24sIGFyZ3VtZW50cywgYXNCb29sKHJl
dHVybkJ5VmFsdWUpLCBhc0Jvb2woZ2VuZXJhdGVQcmV2aWV3KSwgJnJlc3VsdCwgd2FzVGhyb3du
KTsKKyAgICBib29sIHdhc1Rocm93bjsKKworICAgIGluamVjdGVkU2NyaXB0LmNhbGxGdW5jdGlv
bk9uKGVycm9yU3RyaW5nLCBvYmplY3RJZCwgZXhwcmVzc2lvbiwgYXJndW1lbnRzLCBhc0Jvb2wo
cmV0dXJuQnlWYWx1ZSksIGFzQm9vbChnZW5lcmF0ZVByZXZpZXcpLCByZXN1bHQsIHdhc1Rocm93
bik7CisKKyAgICAqb3V0X3dhc1Rocm93biA9IHdhc1Rocm93bjsKIAogICAgIGlmIChhc0Jvb2wo
ZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlKSkgewogICAgICAgICB1bm11dGVD
b25zb2xlKCk7CkBAIC0xNjksNyArMTgwLDcgQEAgdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6
OmdldFByZXZpZXcoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG8KICAg
ICBTY3JpcHREZWJ1Z1NlcnZlcjo6UGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSBwcmV2aW91c1BhdXNl
T25FeGNlcHRpb25zU3RhdGUgPSBzZXRQYXVzZU9uRXhjZXB0aW9uc1N0YXRlKG1fc2NyaXB0RGVi
dWdTZXJ2ZXIsIFNjcmlwdERlYnVnU2VydmVyOjpEb250UGF1c2VPbkV4Y2VwdGlvbnMpOwogICAg
IG11dGVDb25zb2xlKCk7CiAKLSAgICBpbmplY3RlZFNjcmlwdC5nZXRQcmV2aWV3KGVycm9yU3Ry
aW5nLCBvYmplY3RJZCwgJnByZXZpZXcpOworICAgIGluamVjdGVkU2NyaXB0LmdldFByZXZpZXco
ZXJyb3JTdHJpbmcsIG9iamVjdElkLCBwcmV2aWV3KTsKIAogICAgIHVubXV0ZUNvbnNvbGUoKTsK
ICAgICBzZXRQYXVzZU9uRXhjZXB0aW9uc1N0YXRlKG1fc2NyaXB0RGVidWdTZXJ2ZXIsIHByZXZp
b3VzUGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSk7CkBAIC0xODYsOCArMTk3LDggQEAgdm9pZCBJbnNw
ZWN0b3JSdW50aW1lQWdlbnQ6OmdldFByb3BlcnRpZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBjb25zdCBTdHJpbmcKICAgICBTY3JpcHREZWJ1Z1NlcnZlcjo6UGF1c2VPbkV4Y2VwdGlvbnNT
dGF0ZSBwcmV2aW91c1BhdXNlT25FeGNlcHRpb25zU3RhdGUgPSBzZXRQYXVzZU9uRXhjZXB0aW9u
c1N0YXRlKG1fc2NyaXB0RGVidWdTZXJ2ZXIsIFNjcmlwdERlYnVnU2VydmVyOjpEb250UGF1c2VP
bkV4Y2VwdGlvbnMpOwogICAgIG11dGVDb25zb2xlKCk7CiAKLSAgICBpbmplY3RlZFNjcmlwdC5n
ZXRQcm9wZXJ0aWVzKGVycm9yU3RyaW5nLCBvYmplY3RJZCwgYXNCb29sKG93blByb3BlcnRpZXMp
LCBhc0Jvb2woZ2VuZXJhdGVQcmV2aWV3KSwgJnJlc3VsdCk7Ci0gICAgaW5qZWN0ZWRTY3JpcHQu
Z2V0SW50ZXJuYWxQcm9wZXJ0aWVzKGVycm9yU3RyaW5nLCBvYmplY3RJZCwgYXNCb29sKGdlbmVy
YXRlUHJldmlldyksICZpbnRlcm5hbFByb3BlcnRpZXMpOworICAgIGluamVjdGVkU2NyaXB0Lmdl
dFByb3BlcnRpZXMoZXJyb3JTdHJpbmcsIG9iamVjdElkLCBhc0Jvb2wob3duUHJvcGVydGllcyks
IGFzQm9vbChnZW5lcmF0ZVByZXZpZXcpLCByZXN1bHQpOworICAgIGluamVjdGVkU2NyaXB0Lmdl
dEludGVybmFsUHJvcGVydGllcyhlcnJvclN0cmluZywgb2JqZWN0SWQsIGFzQm9vbChnZW5lcmF0
ZVByZXZpZXcpLCBpbnRlcm5hbFByb3BlcnRpZXMpOwogCiAgICAgdW5tdXRlQ29uc29sZSgpOwog
ICAgIHNldFBhdXNlT25FeGNlcHRpb25zU3RhdGUobV9zY3JpcHREZWJ1Z1NlcnZlciwgcHJldmlv
dXNQYXVzZU9uRXhjZXB0aW9uc1N0YXRlKTsKQEAgLTIwNCw4ICsyMTUsOCBAQCB2b2lkIEluc3Bl
Y3RvclJ1bnRpbWVBZ2VudDo6Z2V0RGlzcGxheWFibGVQcm9wZXJ0aWVzKEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgYwogICAgIFNjcmlwdERlYnVnU2VydmVyOjpQYXVzZU9uRXhjZXB0aW9uc1N0
YXRlIHByZXZpb3VzUGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSA9IHNldFBhdXNlT25FeGNlcHRpb25z
U3RhdGUobV9zY3JpcHREZWJ1Z1NlcnZlciwgU2NyaXB0RGVidWdTZXJ2ZXI6OkRvbnRQYXVzZU9u
RXhjZXB0aW9ucyk7CiAgICAgbXV0ZUNvbnNvbGUoKTsKIAotICAgIGluamVjdGVkU2NyaXB0Lmdl
dERpc3BsYXlhYmxlUHJvcGVydGllcyhlcnJvclN0cmluZywgb2JqZWN0SWQsIGFzQm9vbChnZW5l
cmF0ZVByZXZpZXcpLCAmcmVzdWx0KTsKLSAgICBpbmplY3RlZFNjcmlwdC5nZXRJbnRlcm5hbFBy
b3BlcnRpZXMoZXJyb3JTdHJpbmcsIG9iamVjdElkLCBhc0Jvb2woZ2VuZXJhdGVQcmV2aWV3KSwg
JmludGVybmFsUHJvcGVydGllcyk7CisgICAgaW5qZWN0ZWRTY3JpcHQuZ2V0RGlzcGxheWFibGVQ
cm9wZXJ0aWVzKGVycm9yU3RyaW5nLCBvYmplY3RJZCwgYXNCb29sKGdlbmVyYXRlUHJldmlldyks
IHJlc3VsdCk7CisgICAgaW5qZWN0ZWRTY3JpcHQuZ2V0SW50ZXJuYWxQcm9wZXJ0aWVzKGVycm9y
U3RyaW5nLCBvYmplY3RJZCwgYXNCb29sKGdlbmVyYXRlUHJldmlldyksIGludGVybmFsUHJvcGVy
dGllcyk7CiAKICAgICB1bm11dGVDb25zb2xlKCk7CiAgICAgc2V0UGF1c2VPbkV4Y2VwdGlvbnNT
dGF0ZShtX3NjcmlwdERlYnVnU2VydmVyLCBwcmV2aW91c1BhdXNlT25FeGNlcHRpb25zU3RhdGUp
OwpAQCAtMjIyLDEwICsyMzMsMTAgQEAgdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmdldENv
bGxlY3Rpb25FbnRyaWVzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QKICAgICBpbnQg
c3RhcnQgPSBzdGFydEluZGV4ICYmICpzdGFydEluZGV4ID49IDAgPyAqc3RhcnRJbmRleCA6IDA7
CiAgICAgaW50IGZldGNoID0gbnVtYmVyVG9GZXRjaCAmJiAqbnVtYmVyVG9GZXRjaCA+PSAwID8g
Km51bWJlclRvRmV0Y2ggOiAwOwogCi0gICAgaW5qZWN0ZWRTY3JpcHQuZ2V0Q29sbGVjdGlvbkVu
dHJpZXMoZXJyb3JTdHJpbmcsIG9iamVjdElkLCBvYmplY3RHcm91cCA/ICpvYmplY3RHcm91cCA6
IFN0cmluZygpLCBzdGFydCwgZmV0Y2gsICZlbnRyaWVzKTsKKyAgICBpbmplY3RlZFNjcmlwdC5n
ZXRDb2xsZWN0aW9uRW50cmllcyhlcnJvclN0cmluZywgb2JqZWN0SWQsIG9iamVjdEdyb3VwID8g
Km9iamVjdEdyb3VwIDogU3RyaW5nKCksIHN0YXJ0LCBmZXRjaCwgZW50cmllcyk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpzYXZlUmVzdWx0KEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgSlNPTjo6T2JqZWN0JiBjYWxsQXJndW1lbnQsIGNvbnN0IGludCogZXhlY3V0
aW9uQ29udGV4dElkLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8aW50Piogc2F2ZWRS
ZXN1bHRJbmRleCkKK3ZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpzYXZlUmVzdWx0KEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgSlNPTjo6T2JqZWN0JiBjYWxsQXJndW1lbnQsIGNv
bnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRw
dXQ8aW50Piogb3V0X3NhdmVkUmVzdWx0SW5kZXgpCiB7CiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5q
ZWN0ZWRTY3JpcHQ7CiAKQEAgLTI0MSw4ICsyNTIsMTQgQEAgdm9pZCBJbnNwZWN0b3JSdW50aW1l
QWdlbnQ6OnNhdmVSZXN1bHQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBKU09OOjpP
YmoKICAgICAgICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkKICAgICAgICAgICAg
IHJldHVybjsKICAgICB9CisgICAgCisgICAgLy8gRklYTUU6IHJlbW92ZSB0aGlzIGJyaWRnaW5n
IGNvZGUgd2hlbiBnZW5lcmF0ZWQgcHJvdG9jb2wgY29tbWFuZHMgbm8gbG9uZ2VyIHVzZSBPcHRP
dXRwdXQ8VD4uCisgICAgc3RkOjpvcHRpb25hbDxpbnQ+IHNhdmVkUmVzdWx0SW5kZXg7CiAKICAg
ICBpbmplY3RlZFNjcmlwdC5zYXZlUmVzdWx0KGVycm9yU3RyaW5nLCBjYWxsQXJndW1lbnQudG9K
U09OU3RyaW5nKCksIHNhdmVkUmVzdWx0SW5kZXgpOworCisgICAgaWYgKHNhdmVkUmVzdWx0SW5k
ZXguaGFzX3ZhbHVlKCkpCisgICAgICAgICpvdXRfc2F2ZWRSZXN1bHRJbmRleCA9IHNhdmVkUmVz
dWx0SW5kZXgudmFsdWUoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OnJlbGVh
c2VPYmplY3QoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkKQo=
</data>
<flag name="review"
          id="347569"
          type_id="1"
          status="+"
          setter="timothy"
    />
          </attachment>
      

    </bug>

</bugzilla>