<?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>228151</bug_id>
          
          <creation_ts>2021-07-21 09:55:51 -0700</creation_ts>
          <short_desc>REGRESSION (r278916): Hitting ASSERT(!m_db.m_transactionInProgress) in SQLiteTransaction::begin()</short_desc>
          <delta_ts>2021-07-21 13:29:23 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>ggaren</cc>
    
    <cc>katherine_cheney</cc>
    
    <cc>kkinnunen</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wilander</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1778450</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-07-21 09:55:51 -0700</bug_when>
    <thetext>* thread #6, queue = &apos;WebResourceLoadStatisticsStore Process Data Queue&apos;, stop reason = EXC_BAD_ACCESS (code=1, address=0xbbadbeef)
  * frame #0: 0x00000001346c827e JavaScriptCore`::WTFCrash() at Assertions.cpp:321:35
    frame #1: 0x0000000119d4185b WebCore`WTFCrashWithInfo((null)=53, (null)=&quot;./platform/sql/SQLiteTransaction.cpp&quot;, (null)=&quot;void WebCore::SQLiteTransaction::begin()&quot;, (null)=433) at Assertions.h:697:5
    frame #2: 0x000000011e43984a WebCore`WebCore::SQLiteTransaction::begin(this=0x000070000e6382e8) at SQLiteTransaction.cpp:53:9
    frame #3: 0x0000000109449d6a WebKit`WebKit::ResourceLoadStatisticsDatabaseStore::clearUserInteraction(this=0x0000000107fc3000, domain=0x00000001417f8148, completionHandler=0x000070000e638338)&gt;&amp;&amp;) at ResourceLoadStatisticsDatabaseStore.cpp:1906:17
    frame #4: 0x000000010944fa41 WebKit`WebKit::ResourceLoadStatisticsDatabaseStore::hasHadUnexpiredRecentUserInteraction(this=0x0000000107fc3000, resourceStatistic=0x00000001417f8140, operatingDatesWindow=Long) at ResourceLoadStatisticsDatabaseStore.cpp:2635:13
    frame #5: 0x000000010944faf7 WebKit`WebKit::ResourceLoadStatisticsDatabaseStore::shouldRemoveAllWebsiteDataFor(this=0x0000000107fc3000, resourceStatistic=0x00000001417f8140, shouldCheckForGrandfathering=false) at ResourceLoadStatisticsDatabaseStore.cpp:2645:73
    frame #6: 0x00000001094500f7 WebKit`WebKit::ResourceLoadStatisticsDatabaseStore::registrableDomainsToDeleteOrRestrictWebsiteDataFor(this=0x0000000107fc3000) at ResourceLoadStatisticsDatabaseStore.cpp:2715:13
    frame #7: 0x0000000109462f4a WebKit`WebKit::ResourceLoadStatisticsStore::removeDataRecords(this=0x0000000107fc3000, completionHandler=0x000070000e638728)&gt;&amp;&amp;) at ResourceLoadStatisticsStore.cpp:172:52
    frame #8: 0x0000000109463baa WebKit`WebKit::ResourceLoadStatisticsStore::processStatisticsAndDataRecords(this=0x0000000107fc3000) at ResourceLoadStatisticsStore.cpp:221:5
    frame #9: 0x00000001094d1d91 WebKit`WebKit::WebResourceLoadStatisticsStore::resourceLoadStatisticsUpdated(this=0x0000000141c09468)&gt;&amp;&amp;)::$_60::operator()() at WebResourceLoadStatisticsStore.cpp:375:28
    frame #10: 0x00000001094d1a8e WebKit`WTF::Detail::CallableWrapper&lt;WebKit::WebResourceLoadStatisticsStore::resourceLoadStatisticsUpdated(WTF::Vector&lt;WebCore::ResourceLoadStatistics, 0ul, WTF::CrashOnOverflow, 16ul, WTF::FastMalloc&gt;&amp;&amp;, WTF::CompletionHandler&lt;void ()&gt;&amp;&amp;)::$_60, void&gt;::call(this=0x0000000141c09460) at Function.h:53:39
    frame #11: 0x00000001085c01c2 WebKit`WTF::Function&lt;void ()&gt;::operator(this=0x000000014181e238)() const at Function.h:82:35
    frame #12: 0x000000010948078e WebKit`WebKit::WebResourceLoadStatisticsStore::postTask(this=0x000000014181e230)&gt;&amp;&amp;)::&apos;lambda&apos;()::operator()() const at WebResourceLoadStatisticsStore.cpp:215:9
    frame #13: 0x00000001094805de WebKit`WTF::Detail::CallableWrapper&lt;WebKit::WebResourceLoadStatisticsStore::postTask(WTF::Function&lt;void ()&gt;&amp;&amp;)::&apos;lambda&apos;(), void&gt;::call(this=0x000000014181e228) at Function.h:53:39
    frame #14: 0x00000001346f2c92 JavaScriptCore`WTF::Function&lt;void ()&gt;::operator(this=0x00000001420f79e8)() const at Function.h:82:35
    frame #15: 0x0000000134806eae JavaScriptCore`WTF::(anonymous namespace)::DispatchWorkItem::operator(this=0x00000001420f79e0)() at WorkQueueCocoa.cpp:40:25
    frame #16: 0x000000013480602d JavaScriptCore`void WTF::dispatchWorkItem&lt;WTF::(anonymous namespace)::DispatchWorkItem&gt;(dispatchContext=0x00000001420f79e0) at WorkQueueCocoa.cpp:48:5
    frame #17: 0x00000001011f4274 libdispatch.dylib`_dispatch_client_callout + 8
    frame #18: 0x00000001011fb7f7 libdispatch.dylib`_dispatch_lane_serial_drain + 776
    frame #19: 0x00000001011fc6ca libdispatch.dylib`_dispatch_lane_invoke + 440
    frame #20: 0x000000010120a2d4 libdispatch.dylib`_dispatch_workloop_worker_thread + 1660
    frame #21: 0x0000000101296b68 libsystem_pthread.dylib`_pthread_wqthread + 314
    frame #22: 0x0000000101295b3f libsystem_pthread.dylib`start_wqthread + 15</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1778451</commentid>
    <comment_count>1</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-07-21 09:56:06 -0700</bug_when>
    <thetext>&lt;rdar://80231894&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1778452</commentid>
    <comment_count>2</comment_count>
      <attachid>433941</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-07-21 10:00:52 -0700</bug_when>
    <thetext>Created attachment 433941
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1778509</commentid>
    <comment_count>3</comment_count>
      <attachid>433941</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2021-07-21 12:53:01 -0700</bug_when>
    <thetext>Comment on attachment 433941
Patch

r=me

I like it!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1778529</commentid>
    <comment_count>4</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-07-21 13:29:21 -0700</bug_when>
    <thetext>Committed r280157 (239854@main): &lt;https://commits.webkit.org/239854@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 433941.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>433941</attachid>
            <date>2021-07-21 10:00:52 -0700</date>
            <delta_ts>2021-07-21 13:29:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228151-20210721100051.patch</filename>
            <type>text/plain</type>
            <size>65050</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwMTI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDZkZjhlNDBiZjZkMjhiZjVh
YTg5NGViOTc1MTJhZjkyYTg3M2RjOWUuLjgwYzA0OWQyYWE1NGYwY2QyMGViNTY0NTAyZTM4ZTgz
MjFkNDc2ODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjUgQEAKKzIwMjEtMDctMjEgIENocmlzIER1
bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBSRUdSRVNTSU9OIChyMjc4OTE2KTog
SGl0dGluZyBBU1NFUlQoIW1fZGIubV90cmFuc2FjdGlvbkluUHJvZ3Jlc3MpIGluIFNRTGl0ZVRy
YW5zYWN0aW9uOjpiZWdpbigpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMjgxNTEKKyAgICAgICAgPHJkYXI6Ly84MDIzMTg5ND4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCZWNhdXNlIGl0IGlzIGhhcmQg
dG8ga2VlcCB0cmFjayBvZiB3aGV0aGVyIG9yIG5vdCBhIHRyYW5zYWN0aW9uIGhhcyBhbHJlYWR5
IGJlZW4gc3RhcnRlZCBpbgorICAgICAgICBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZSBjb2RlIGFuZCBiZWNhdXNlIHBhc3NpbmcgYSB0cmFuc2FjdGlvbiBhcyBwYXJhbWV0ZXIg
YWRkcworICAgICAgICBhIGxvdCBvZiBmdW5jdGlvbiBvdmVybG9hZHMsIEkgZGVjaWRlZCB0byBz
d2l0Y2ggdG8gYW5vdGhlciBhcHByb2FjaC4gSSBhZGRlZCBhCisgICAgICAgIGJlZ2luVHJhbnNh
Y3Rpb25JZk5lY2Vzc2FyeSgpIG1lbWJlciBmdW5jdGlvbiB0aGF0IGJlZ2lucyBhIHRyYW5zYWN0
aW9uIGlmIHRoZXJlIGlzbid0IG9uZQorICAgICAgICBhbHJlYWR5IGdvaW5nIG9uLiBUaGlzIHdh
eSwgd2UgY2FuIHNhZmVseSBhc2sgdG8gYmVnaW4gYSB0cmFuc2FjdGlvbiB3aXRoaW4gdGhlIHNj
b3BlIG9mCisgICAgICAgIGEgZnVuY3Rpb24gKGlmIHdlJ3JlIGFib3V0IHRvIGRvIHNldmVyYWwg
d3JpdGUgc3RhdGVtZW50cyksIHdpdGhvdXQgaGF2aW5nIHRvIHdvcnJ5IGFib3V0CisgICAgICAg
IHdoZXRoZXIgb3Igbm90IG91ciBjYWxsZXIgYWxyZWFkeSBzdGFydGVkIGEgdHJhbnNhY3Rpb24u
CisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
Om1pZ3JhdGVEYXRhVG9OZXdUYWJsZXNJZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJLaXQ6OlJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZGRNaXNzaW5nQ29sdW1uc1RvVGFi
bGUpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6YWRkTWlzc2luZ1RhYmxlc0lmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmVuc3VyZUFuZE1ha2VEb21haW5MaXN0KToK
KyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omlu
c2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwcyk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwb3B1
bGF0ZUZyb21NZW1vcnlTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjptZXJnZSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptZXJnZVN0YXRpc3RpYyk6CisgICAgICAgIChXZWJL
aXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptZXJnZVN0YXRpc3RpY3Mp
OgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
cmVjbGFzc2lmeVJlc291cmNlcyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpyZXF1ZXN0U3RvcmFnZUFjY2Vzcyk6CisgICAgICAgIChXZWJL
aXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZXF1ZXN0U3RvcmFnZUFj
Y2Vzc1VuZGVyT3BlbmVyKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OmdyYW50U3RvcmFnZUFjY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OlJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpncmFudFN0b3JhZ2VBY2Nlc3NJbnRl
cm5hbCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjpncmFuZGZhdGhlckRhdGFGb3JEb21haW5zKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmVuc3VyZVByZXZhbGVudFJlc291cmNlc0Zv
ckRlYnVnTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpsb2dGcmFtZU5hdmlnYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bG9nQ3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVj
b3JhdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpjbGVhclRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0
RW5mb3JjZW1lbnQpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6bG9nVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyVXNlckludGVyYWN0aW9uKToKKyAg
ICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omhhc0hh
ZFVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhclByZXZhbGVudFJlc291
cmNlKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OnNldEdyYW5kZmF0aGVyZWQpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0SXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVt
b3ZhbCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjpzZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW4pOgorICAgICAgICAoV2ViS2l0OjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmRlclRv
cEZyYW1lRG9tYWluKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyk6CisgICAgICAgIChX
ZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRTdWJyZXNvdXJj
ZVVuaXF1ZVJlZGlyZWN0RnJvbSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8pOgorICAgICAg
ICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0VG9wRnJh
bWVVbmlxdWVSZWRpcmVjdEZyb20pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVnaXN0cmFibGVEb21haW5zVG9EZWxldGVPclJlc3RyaWN0
V2Vic2l0ZURhdGFGb3IpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6c2V0TGFzdFNlZW4pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNlKToKKyAg
ICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmluY2x1
ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYktpdDo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omluc2VydEV4cGlyZWRTdGF0aXN0aWNG
b3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6Omluc2VydFByaXZhdGVDbGlja01lYXN1cmVtZW50KToKKyAgICAgICAgKFdlYktp
dDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyUHJpdmF0ZUNsaWNr
TWVhc3VyZW1lbnQpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6bWFya0F0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudHNBc0V4cGly
ZWRGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSk6CisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZS5oOgorCiAyMDIxLTA3LTIwICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29t
PgogCiAgICAgICAgIFtpT1NdIEFkZCBTUEkgZm9yIGludGVybmFsIGNsaWVudHMgdG8gY29uc3Vs
dCB3aGV0aGVyIG9yIG5vdCB2aWV3cG9ydCBxdWlya3Mgc2hvdWxkIGJlIGVuYWJsZWQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwCmlu
ZGV4IDdmMGQ4YmNjZDNkNGQ3MzMyOGI0ZWVlNjA4MWM2YmY5NTJjYzRmNmUuLjFlOGUyOGJkYWU4
ZjAyZTQwZmNiNGQxYTliNTcwMmVhNWVmMWMyMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcApAQCAtNDQsNyArNDQsNiBAQAog
I2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvU1FMaXRlRGF0YWJhc2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NRTGl0ZVN0YXRlbWVu
dC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU1FMaXRlVHJhbnNhY3Rpb24uaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL1VzZXJHZXN0dXJlSW5kaWNhdG9yLmg+CiAjaW5jbHVkZSA8d3RmL0NhbGxiYWNrQWdn
cmVnYXRvci5oPgogI2luY2x1ZGUgPHd0Zi9Dcm9zc1RocmVhZENvcGllci5oPgpAQCAtMzUwLDYg
KzM0OSw3IEBAIEhhc2hTZXQ8UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUqPiYg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvCiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUoV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlJiBzdG9yZSwgV29ya1F1ZXVlJiB3b3JrUXVldWUsIFNo
b3VsZEluY2x1ZGVMb2NhbGhvc3Qgc2hvdWxkSW5jbHVkZUxvY2FsaG9zdCwgY29uc3QgU3RyaW5n
JiBzdG9yYWdlRGlyZWN0b3J5UGF0aCwgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogICAgIDog
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKHN0b3JlLCB3b3JrUXVldWUsIHNob3VsZEluY2x1
ZGVMb2NhbGhvc3QpCiAgICAgLCBtX3N0b3JhZ2VEaXJlY3RvcnlQYXRoKEZpbGVTeXN0ZW06OnBh
dGhCeUFwcGVuZGluZ0NvbXBvbmVudChzdG9yYWdlRGlyZWN0b3J5UGF0aCwgIm9ic2VydmF0aW9u
cy5kYiJfcykpCisgICAgLCBtX3RyYW5zYWN0aW9uKG1fZGF0YWJhc2UpCiAgICAgLCBtX3Nlc3Np
b25JRChzZXNzaW9uSUQpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CkBAIC01
NzUsOCArNTc1LDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
bWlncmF0ZURhdGFUb05ld1RhYmxlc0lmTmVjZXNzYXJ5KCkKICAgICBpZiAoIW5lZWRzVXBkYXRl
ZFNjaGVtYSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFu
c2FjdGlvbihtX2RhdGFiYXNlKTsKLSAgICB0cmFuc2FjdGlvbi5iZWdpbigpOworICAgIGF1dG8g
dHJhbnNhY3Rpb25TY29wZSA9IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpOwogCiAgICAg
Zm9yIChhdXRvJiB0YWJsZSA6IGV4cGVjdGVkVGFibGVBbmRJbmRleFF1ZXJpZXMoKS5rZXlzKCkp
IHsKICAgICAgICAgYXV0byBhbHRlclRhYmxlID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50
U2xvdyhtYWtlU3RyaW5nKCJBTFRFUiBUQUJMRSAiLCB0YWJsZSwgIiBSRU5BTUUgVE8gXyIsIHRh
YmxlKSk7CkBAIC02MDksOCArNjA4LDYgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6bWlncmF0ZURhdGFUb05ld1RhYmxlc0lmTmVjZXNzYXJ5KCkKICAgICAgICAg
fQogICAgIH0KIAotICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOwotCiAgICAgaWYgKCFjcmVhdGVV
bmlxdWVJbmRpY2VzKCkpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVw
IC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1pZ3JhdGVEYXRhVG9OZXdU
YWJsZXNJZk5lY2Vzc2FyeSBmYWlsZWQgdG8gY3JlYXRlIHVuaXF1ZSBpbmRpY2VzLCBlcnJvciBt
ZXNzYWdlOiAlcyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTY0MSwxMyArNjM4LDExIEBAIHZvaWQgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmFkZE1pc3NpbmdDb2x1bW5zVG9UYWJsZShTdHJp
bmcmJiB0YWJsCiB7CiAgICAgQVNTRVJUKGV4aXN0aW5nQ29sdW1ucy5zaXplKCkgPD0gZXhwZWN0
ZWRDb2x1bW5zLnNpemUoKSk7CiAKLSAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbiht
X2RhdGFiYXNlKTsKKyAgICBhdXRvIHRyYW5zYWN0aW9uID0gYmVnaW5UcmFuc2FjdGlvbklmTmVj
ZXNzYXJ5KCk7CisKICAgICBmb3IgKGF1dG8mIGNvbHVtbiA6IGV4cGVjdGVkQ29sdW1ucykgewog
ICAgICAgICBpZiAoZXhpc3RpbmdDb2x1bW5zLmNvbnRhaW5zKGNvbHVtbikpCiAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgCi0gICAgICAgIGlmICghdHJhbnNhY3Rpb24uaW5Qcm9ncmVz
cygpKQotICAgICAgICAgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKIAogICAgICAgICBhdXRvIHN0
YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudFNsb3cobWFrZVN0cmluZygiQUxU
RVIgVEFCTEUgIiwgdGFibGVOYW1lLCAiIEFERCBDT0xVTU4gIiwgY29sdW1uKSk7CiAgICAgICAg
IGlmICghc3RhdGVtZW50KSB7CkBAIC02NjIsNyArNjU3LDYgQEAgdm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6YWRkTWlzc2luZ0NvbHVtbnNUb1RhYmxlKFN0cmluZyYm
IHRhYmwKICAgICAgICAgfQogICAgICAgICBzdGF0ZW1lbnQtPnJlc2V0KCk7CiAgICAgfQotICAg
IHRyYW5zYWN0aW9uLmNvbW1pdCgpOwogfQogCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjphZGRNaXNzaW5nQ29sdW1uc0lmTmVjZXNzYXJ5KCkKQEAgLTcxOSw4ICs3
MTMsOCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZGRNaXNz
aW5nVGFibGVzSWZOZWNlc3NhcnkoKQogICAgIGlmICghbWlzc2luZ1RhYmxlcykKICAgICAgICAg
cmV0dXJuOwogCi0gICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7
Ci0gICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKKyAgICBhdXRvIHRyYW5zYWN0aW9uID0gYmVnaW5U
cmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7CisKICAgICBmb3IgKGF1dG8mIHRhYmxlIDogKm1pc3Np
bmdUYWJsZXMpIHsKICAgICAgICAgYXV0byBjcmVhdGVUYWJsZVF1ZXJ5ID0gZXhwZWN0ZWRUYWJs
ZUFuZEluZGV4UXVlcmllcygpLmdldCh0YWJsZSkuZmlyc3Q7CiAgICAgICAgIGlmICghbV9kYXRh
YmFzZS5leGVjdXRlQ29tbWFuZFNsb3coY3JlYXRlVGFibGVRdWVyeSkpCkBAIC03MzIsNyArNzI2
LDYgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6YWRkTWlzc2lu
Z1RhYmxlc0lmTmVjZXNzYXJ5KCkKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9Ci0gICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CiB9CiAKIHZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om9wZW5BbmRVcGRhdGVTY2hlbWFJ
Zk5lY2Vzc2FyeSgpCkBAIC0xMDQ5LDEwICsxMDQyLDggQEAgc3RkOjpvcHRpb25hbDx1bnNpZ25l
ZD4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmRvbWFpbklEKGNvbnN0IFJl
Z2kKICAgICByZXR1cm4gc2NvcGVkU3RhdGVtZW50LT5jb2x1bW5JbnQoMCk7CiB9CiAKLVN0cmlu
ZyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZW5zdXJlQW5kTWFrZURvbWFp
bkxpc3QoY29uc3QgU1FMaXRlVHJhbnNhY3Rpb24mLCBjb25zdCBIYXNoU2V0PFJlZ2lzdHJhYmxl
RG9tYWluPiYgZG9tYWluTGlzdCkKK1N0cmluZyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6ZW5zdXJlQW5kTWFrZURvbWFpbkxpc3QoY29uc3QgSGFzaFNldDxSZWdpc3RyYWJs
ZURvbWFpbj4mIGRvbWFpbkxpc3QpCiB7Ci0gICAgQVNTRVJUKG1fZGF0YWJhc2UudHJhbnNhY3Rp
b25JblByb2dyZXNzKCkpOwotCiAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwogICAgIGZvciAo
YXV0byYgdG9wRnJhbWVSZXNvdXJjZSA6IGRvbWFpbkxpc3QpIHsKICAgICAgICAgLy8gSW5zZXJ0
IHF1ZXJ5IHdpbGwgZmFpbCBpZiB0b3AgZnJhbWUgZG9tYWluIGlzIG5vdCBhbHJlYWR5IGluIHRo
ZSBkYXRhYmFzZQpAQCAtMTA2Miw5ICsxMDUzLDkgQEAgU3RyaW5nIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjplbnN1cmVBbmRNYWtlRG9tYWluTGlzdChjb25zdCBTUUxpdGUK
ICAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwogfQogCi12b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KGNvbnN0
IFNRTGl0ZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgY29uc3QgU3RyaW5nJiBzdGF0ZW1lbnQs
IGNvbnN0IEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+JiBkb21haW5MaXN0LCB1bnNpZ25lZCBk
b21haW5JRCkKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omluc2Vy
dERvbWFpblJlbGF0aW9uc2hpcExpc3QoY29uc3QgU3RyaW5nJiBzdGF0ZW1lbnQsIGNvbnN0IEhh
c2hTZXQ8UmVnaXN0cmFibGVEb21haW4+JiBkb21haW5MaXN0LCB1bnNpZ25lZCBkb21haW5JRCkK
IHsKLSAgICBhdXRvIGluc2VydFJlbGF0aW9uc2hpcFN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJl
cGFyZVN0YXRlbWVudFNsb3cobWFrZVN0cmluZyhzdGF0ZW1lbnQsIGVuc3VyZUFuZE1ha2VEb21h
aW5MaXN0KHRyYW5zYWN0aW9uLCBkb21haW5MaXN0KSwgIiApOyIpKTsKKyAgICBhdXRvIGluc2Vy
dFJlbGF0aW9uc2hpcFN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudFNsb3co
bWFrZVN0cmluZyhzdGF0ZW1lbnQsIGVuc3VyZUFuZE1ha2VEb21haW5MaXN0KGRvbWFpbkxpc3Qp
LCAiICk7IikpOwogICAgIAogICAgIGlmICghaW5zZXJ0UmVsYXRpb25zaGlwU3RhdGVtZW50CiAg
ICAgICAgIHx8IGluc2VydFJlbGF0aW9uc2hpcFN0YXRlbWVudC0+YmluZEludCgxLCBkb21haW5J
RCkgIT0gU1FMSVRFX09LKSB7CkBAIC0xMDg4LDI2ICsxMDc5LDI3IEBAIHZvaWQgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3Qo
Y29uc3QgU1FMCiAgICAgfQogfQogCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjppbnNlcnREb21haW5SZWxhdGlvbnNoaXBzKGNvbnN0IFNRTGl0ZVRyYW5zYWN0aW9u
JiB0cmFuc2FjdGlvbiwgY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgbG9hZFN0YXRpc3Rp
Y3MpCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnREb21h
aW5SZWxhdGlvbnNoaXBzKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIGxvYWRTdGF0aXN0
aWNzKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIEFTU0VSVChtX2Rh
dGFiYXNlLnRyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKTsKKworICAgIGF1dG8gdHJhbnNhY3Rpb25T
Y29wZSA9IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpOwogCiAgICAgYXV0byByZWdpc3Ry
YWJsZURvbWFpbklEID0gZG9tYWluSUQobG9hZFN0YXRpc3RpY3MucmVnaXN0cmFibGVEb21haW4p
OwogICAgIAogICAgIGlmICghcmVnaXN0cmFibGVEb21haW5JRCkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0cmFuc2FjdGlvbiwgc3RvcmFnZUFj
Y2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zUXVlcnksIGxvYWRTdGF0aXN0aWNzLnN0b3JhZ2VBY2Nl
c3NVbmRlclRvcEZyYW1lRG9tYWlucywgcmVnaXN0cmFibGVEb21haW5JRC52YWx1ZSgpKTsKLSAg
ICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHRyYW5zYWN0aW9uLCB0b3BGcmFtZVVuaXF1
ZVJlZGlyZWN0c1RvUXVlcnksIGxvYWRTdGF0aXN0aWNzLnRvcEZyYW1lVW5pcXVlUmVkaXJlY3Rz
VG8sIHJlZ2lzdHJhYmxlRG9tYWluSUQudmFsdWUoKSk7Ci0gICAgaW5zZXJ0RG9tYWluUmVsYXRp
b25zaGlwTGlzdCh0cmFuc2FjdGlvbiwgdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2Ft
ZVNpdGVTdHJpY3RFbmZvcmNlbWVudFF1ZXJ5LCBsb2FkU3RhdGlzdGljcy50b3BGcmFtZVVuaXF1
ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50LCByZWdpc3RyYWJsZURv
bWFpbklELnZhbHVlKCkpOwotICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QodHJhbnNh
Y3Rpb24sIHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbVF1ZXJ5LCBsb2FkU3RhdGlzdGljcy50
b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20sIHJlZ2lzdHJhYmxlRG9tYWluSUQudmFsdWUoKSk7
Ci0gICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0cmFuc2FjdGlvbiwgc3ViZnJhbWVV
bmRlclRvcEZyYW1lRG9tYWluc1F1ZXJ5LCBsb2FkU3RhdGlzdGljcy5zdWJmcmFtZVVuZGVyVG9w
RnJhbWVEb21haW5zLCByZWdpc3RyYWJsZURvbWFpbklELnZhbHVlKCkpOwotICAgIGluc2VydERv
bWFpblJlbGF0aW9uc2hpcExpc3QodHJhbnNhY3Rpb24sIHN1YnJlc291cmNlVW5kZXJUb3BGcmFt
ZURvbWFpbnNRdWVyeSwgbG9hZFN0YXRpc3RpY3Muc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9t
YWlucywgcmVnaXN0cmFibGVEb21haW5JRC52YWx1ZSgpKTsKLSAgICBpbnNlcnREb21haW5SZWxh
dGlvbnNoaXBMaXN0KHRyYW5zYWN0aW9uLCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvUXVl
cnksIGxvYWRTdGF0aXN0aWNzLnN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8sIHJlZ2lzdHJh
YmxlRG9tYWluSUQudmFsdWUoKSk7Ci0gICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0
cmFuc2FjdGlvbiwgc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tUXVlcnksIGxvYWRTdGF0
aXN0aWNzLnN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbSwgcmVnaXN0cmFibGVEb21haW5J
RC52YWx1ZSgpKTsKLSAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHRyYW5zYWN0aW9u
LCB0b3BGcmFtZUxpbmtEZWNvcmF0aW9uc0Zyb21RdWVyeSwgbG9hZFN0YXRpc3RpY3MudG9wRnJh
bWVMaW5rRGVjb3JhdGlvbnNGcm9tLCByZWdpc3RyYWJsZURvbWFpbklELnZhbHVlKCkpOwotICAg
IGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QodHJhbnNhY3Rpb24sIHRvcEZyYW1lTG9hZGVk
VGhpcmRQYXJ0eVNjcmlwdHNRdWVyeSwgbG9hZFN0YXRpc3RpY3MudG9wRnJhbWVMb2FkZWRUaGly
ZFBhcnR5U2NyaXB0cywgcmVnaXN0cmFibGVEb21haW5JRC52YWx1ZSgpKTsKKyAgICBpbnNlcnRE
b21haW5SZWxhdGlvbnNoaXBMaXN0KHN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWluc1F1
ZXJ5LCBsb2FkU3RhdGlzdGljcy5zdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMsIHJl
Z2lzdHJhYmxlRG9tYWluSUQudmFsdWUoKSk7CisgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlw
TGlzdCh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvUXVlcnksIGxvYWRTdGF0aXN0aWNzLnRvcEZy
YW1lVW5pcXVlUmVkaXJlY3RzVG8sIHJlZ2lzdHJhYmxlRG9tYWluSUQudmFsdWUoKSk7CisgICAg
aW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2lu
Y2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50UXVlcnksIGxvYWRTdGF0aXN0aWNzLnRvcEZyYW1l
VW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnQsIHJlZ2lzdHJh
YmxlRG9tYWluSUQudmFsdWUoKSk7CisgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0
b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb21RdWVyeSwgbG9hZFN0YXRpc3RpY3MudG9wRnJhbWVV
bmlxdWVSZWRpcmVjdHNGcm9tLCByZWdpc3RyYWJsZURvbWFpbklELnZhbHVlKCkpOworICAgIGlu
c2VydERvbWFpblJlbGF0aW9uc2hpcExpc3Qoc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluc1F1
ZXJ5LCBsb2FkU3RhdGlzdGljcy5zdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zLCByZWdpc3Ry
YWJsZURvbWFpbklELnZhbHVlKCkpOworICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3Qo
c3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc1F1ZXJ5LCBsb2FkU3RhdGlzdGljcy5zdWJy
ZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zLCByZWdpc3RyYWJsZURvbWFpbklELnZhbHVlKCkp
OworICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3Qoc3VicmVzb3VyY2VVbmlxdWVSZWRp
cmVjdHNUb1F1ZXJ5LCBsb2FkU3RhdGlzdGljcy5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1Rv
LCByZWdpc3RyYWJsZURvbWFpbklELnZhbHVlKCkpOworICAgIGluc2VydERvbWFpblJlbGF0aW9u
c2hpcExpc3Qoc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tUXVlcnksIGxvYWRTdGF0aXN0
aWNzLnN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbSwgcmVnaXN0cmFibGVEb21haW5JRC52
YWx1ZSgpKTsKKyAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHRvcEZyYW1lTGlua0Rl
Y29yYXRpb25zRnJvbVF1ZXJ5LCBsb2FkU3RhdGlzdGljcy50b3BGcmFtZUxpbmtEZWNvcmF0aW9u
c0Zyb20sIHJlZ2lzdHJhYmxlRG9tYWluSUQudmFsdWUoKSk7CisgICAgaW5zZXJ0RG9tYWluUmVs
YXRpb25zaGlwTGlzdCh0b3BGcmFtZUxvYWRlZFRoaXJkUGFydHlTY3JpcHRzUXVlcnksIGxvYWRT
dGF0aXN0aWNzLnRvcEZyYW1lTG9hZGVkVGhpcmRQYXJ0eVNjcmlwdHMsIHJlZ2lzdHJhYmxlRG9t
YWluSUQudmFsdWUoKSk7CiB9CiAKIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OnBvcHVsYXRlRnJvbU1lbW9yeVN0b3JlKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNZW1vcnlTdG9yZSYgbWVtb3J5U3RvcmUpCkBAIC0xMTE3LDggKzExMDksNyBAQCB2b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwb3B1bGF0ZUZyb21NZW1vcnlTdG9y
ZShjb25zdCBSZXNvdXJjZQogICAgIGlmICghaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKLSAgICB0cmFu
c2FjdGlvbi5iZWdpbigpOworICAgIGF1dG8gdHJhbnNhY3Rpb25TY29wZSA9IGJlZ2luVHJhbnNh
Y3Rpb25JZk5lY2Vzc2FyeSgpOwogCiAgICAgYXV0byYgc3RhdGlzdGljc01hcCA9IG1lbW9yeVN0
b3JlLmRhdGEoKTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIHN0YXRpc3RpYyA6IHN0YXRpc3RpY3NN
YXAudmFsdWVzKCkpIHsKQEAgLTExMzMsMTUgKzExMjQsMTQgQEAgdm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cG9wdWxhdGVGcm9tTWVtb3J5U3RvcmUoY29uc3QgUmVz
b3VyY2UKICAgICAvLyBNYWtlIGEgc2VwYXJhdGUgcGFzcyBmb3IgaW50ZXItZG9tYWluIHJlbGF0
aW9uc2hpcHMgc28gd2UKICAgICAvLyBjYW4gcmVmZXIgdG8gdGhlIE9ic2VydmVkRG9tYWluIHRh
YmxlIGVudHJpZXMKICAgICBmb3IgKGF1dG8mIHN0YXRpc3RpYyA6IHN0YXRpc3RpY3NNYXAudmFs
dWVzKCkpCi0gICAgICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcHModHJhbnNhY3Rpb24sIHN0
YXRpc3RpYyk7Ci0KLSAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsKKyAgICAgICAgaW5zZXJ0RG9t
YWluUmVsYXRpb25zaGlwcyhzdGF0aXN0aWMpOwogfQogCi12b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjptZXJnZShjb25zdCBTUUxpdGVUcmFuc2FjdGlvbiYgdHJhbnNh
Y3Rpb24sIFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCogY3VycmVudCwgY29uc3QgUmVzb3VyY2VM
b2FkU3RhdGlzdGljcyYgb3RoZXIpCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjptZXJnZShXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQqIGN1cnJlbnQsIGNvbnN0IFJl
c291cmNlTG9hZFN0YXRpc3RpY3MmIG90aGVyKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNN
YWluKCkpOwotICAgIEFTU0VSVChtX2RhdGFiYXNlLnRyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKTsK
KworICAgIGF1dG8gdHJhbnNhY3Rpb25TY29wZSA9IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vzc2Fy
eSgpOwogCiAgICAgYXV0byBjdXJyZW50UmVnaXN0cmFibGVEb21haW4gPSBjdXJyZW50LT5jb2x1
bW5UZXh0KFJlZ2lzdHJhYmxlRG9tYWluSW5kZXgpOwogICAgIGF1dG8gY3VycmVudExhc3RTZWVu
ID0gY3VycmVudC0+Y29sdW1uRG91YmxlKExhc3RTZWVuSW5kZXgpOwpAQCAtMTE2NSwyMSArMTE1
NSwyMiBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptZXJnZShj
b25zdCBTUUxpdGVUcmFuc2FjdGlvbiYgdHJhbnNhYwogICAgICAgICBzZXRVc2VySW50ZXJhY3Rp
b24ob3RoZXIucmVnaXN0cmFibGVEb21haW4sIHRydWUsIHN0ZDo6bWF4KFdhbGxUaW1lOjpmcm9t
UmF3U2Vjb25kcyhjdXJyZW50TW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiksIG90aGVyLm1vc3RS
ZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lKSk7CiAKICAgICBpZiAob3RoZXIuZ3JhbmRmYXRoZXJl
ZCAmJiAhY3VycmVudEdyYW5kZmF0aGVyZWQpCi0gICAgICAgIHNldEdyYW5kZmF0aGVyZWQodHJh
bnNhY3Rpb24sIG90aGVyLnJlZ2lzdHJhYmxlRG9tYWluLCB0cnVlKTsKKyAgICAgICAgc2V0R3Jh
bmRmYXRoZXJlZChvdGhlci5yZWdpc3RyYWJsZURvbWFpbiwgdHJ1ZSk7CiAgICAgaWYgKG90aGVy
LmlzUHJldmFsZW50UmVzb3VyY2UgJiYgIWN1cnJlbnRJc1ByZXZhbGVudCkKLSAgICAgICAgc2V0
UHJldmFsZW50UmVzb3VyY2UodHJhbnNhY3Rpb24sIG90aGVyLnJlZ2lzdHJhYmxlRG9tYWluKTsK
KyAgICAgICAgc2V0UHJldmFsZW50UmVzb3VyY2Uob3RoZXIucmVnaXN0cmFibGVEb21haW4pOwog
ICAgIGlmIChvdGhlci5pc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZSAmJiAhY3VycmVudElzVmVyeVBy
ZXZhbGVudCkKLSAgICAgICAgc2V0VmVyeVByZXZhbGVudFJlc291cmNlKHRyYW5zYWN0aW9uLCBv
dGhlci5yZWdpc3RyYWJsZURvbWFpbik7CisgICAgICAgIHNldFZlcnlQcmV2YWxlbnRSZXNvdXJj
ZShvdGhlci5yZWdpc3RyYWJsZURvbWFpbik7CiAgICAgaWYgKG90aGVyLmRhdGFSZWNvcmRzUmVt
b3ZlZCA+IGN1cnJlbnREYXRhUmVjb3Jkc1JlbW92ZWQpCiAgICAgICAgIHVwZGF0ZURhdGFSZWNv
cmRzUmVtb3ZlZChvdGhlci5yZWdpc3RyYWJsZURvbWFpbiwgb3RoZXIuZGF0YVJlY29yZHNSZW1v
dmVkKTsKICAgICBpZiAob3RoZXIuZ290TGlua0RlY29yYXRpb25Gcm9tUHJldmFsZW50UmVzb3Vy
Y2UgJiYgIWN1cnJlbnRJc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsKQotICAg
ICAgICBzZXRJc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsKHRyYW5zYWN0aW9u
LCBvdGhlci5yZWdpc3RyYWJsZURvbWFpbiwgdHJ1ZSk7CisgICAgICAgIHNldElzU2NoZWR1bGVk
Rm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwob3RoZXIucmVnaXN0cmFibGVEb21haW4sIHRydWUp
OwogfQogCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptZXJnZVN0
YXRpc3RpYyhjb25zdCBTUUxpdGVUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIGNvbnN0IFJlc291
cmNlTG9hZFN0YXRpc3RpY3MmIHN0YXRpc3RpYykKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6Om1lcmdlU3RhdGlzdGljKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3MmIHN0YXRpc3RpYykKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAorICAg
IGF1dG8gdHJhbnNhY3Rpb25TY29wZSA9IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpOwog
ICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fZ2V0UmVz
b3VyY2VEYXRhQnlEb21haW5OYW1lU3RhdGVtZW50LCBnZXRSZXNvdXJjZURhdGFCeURvbWFpbk5h
bWVRdWVyeSwgIm1lcmdlU3RhdGlzdGljIl9zKTsKICAgICBpZiAoIXNjb3BlZFN0YXRlbWVudAog
ICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIHN0YXRpc3RpYy5yZWdpc3Ry
YWJsZURvbWFpbi5zdHJpbmcoKSkgIT0gU1FMSVRFX09LCkBAIC0xMTg5LDcgKzExODAsNyBAQCB2
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptZXJnZVN0YXRpc3RpYyhj
b25zdCBTUUxpdGVUcmFuc2FjdGlvbgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbWVy
Z2UodHJhbnNhY3Rpb24sIHNjb3BlZFN0YXRlbWVudC5nZXQoKSwgc3RhdGlzdGljKTsKKyAgICBt
ZXJnZShzY29wZWRTdGF0ZW1lbnQuZ2V0KCksIHN0YXRpc3RpYyk7CiB9CiAKIHZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1lcmdlU3RhdGlzdGljcyhWZWN0b3I8UmVz
b3VyY2VMb2FkU3RhdGlzdGljcz4mJiBzdGF0aXN0aWNzKQpAQCAtMTE5OCw4ICsxMTg5LDcgQEAg
dm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWVyZ2VTdGF0aXN0aWNz
KFZlY3RvcjxSZXNvdXJjZUxvYWRTdGEKICAgICBpZiAoc3RhdGlzdGljcy5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0
YWJhc2UpOwotICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CisgICAgYXV0byB0cmFuc2FjdGlvblNj
b3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7CiAKICAgICBmb3IgKGF1dG8mIHN0
YXRpc3RpYyA6IHN0YXRpc3RpY3MpIHsKICAgICAgICAgaWYgKCFkb21haW5JRChzdGF0aXN0aWMu
cmVnaXN0cmFibGVEb21haW4pKSB7CkBAIC0xMjEwLDE1ICsxMjAwLDEzIEBAIHZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1lcmdlU3RhdGlzdGljcyhWZWN0b3I8UmVz
b3VyY2VMb2FkU3RhCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1lcmdlU3RhdGlzdGljKHRyYW5zYWN0aW9uLCBzdGF0
aXN0aWMpOworICAgICAgICAgICAgbWVyZ2VTdGF0aXN0aWMoc3RhdGlzdGljKTsKICAgICB9CiAK
ICAgICAvLyBNYWtlIGEgc2VwYXJhdGUgcGFzcyBmb3IgaW50ZXItZG9tYWluIHJlbGF0aW9uc2hp
cHMgc28gd2UKICAgICAvLyBjYW4gcmVmZXIgdG8gdGhlIE9ic2VydmVkRG9tYWluIHRhYmxlIGVu
dHJpZXMuCiAgICAgZm9yIChhdXRvJiBzdGF0aXN0aWMgOiBzdGF0aXN0aWNzKQotICAgICAgICBp
bnNlcnREb21haW5SZWxhdGlvbnNoaXBzKHRyYW5zYWN0aW9uLCBzdGF0aXN0aWMpOwotCi0gICAg
dHJhbnNhY3Rpb24uY29tbWl0KCk7CisgICAgICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcHMo
c3RhdGlzdGljKTsKIH0KIAogc3RhdGljIEFTQ0lJTGl0ZXJhbCBqb2luU3ViU3RhdGlzdGljc0Zv
clNvcnRpbmcoKQpAQCAtMTQ1NiwxOSArMTQ0NCwxNiBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpyZWNsYXNzaWZ5UmVzb3VyY2VzKCkKICAgICBpZiAobm90VmVy
eVByZXZhbGVudFJlc291cmNlcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFNR
TGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOworICAgIGF1dG8gdHJhbnNh
Y3Rpb24gPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKKwogICAgIGZvciAoYXV0byYg
cmVzb3VyY2VTdGF0aXN0aWMgOiBub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzLnZhbHVlcygpKSB7
CiAgICAgICAgIGlmIChzaG91bGRTa2lwKHJlc291cmNlU3RhdGlzdGljLnJlZ2lzdHJhYmxlRG9t
YWluKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIGF1dG8gbmV3UHJldmFsZW5j
ZSA9IGNsYXNzaWZpZXIoKS5jYWxjdWxhdGVSZXNvdXJjZVByZXZhbGVuY2UocmVzb3VyY2VTdGF0
aXN0aWMuc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50LCByZXNvdXJjZVN0YXRp
c3RpYy5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQsIHJlc291cmNlU3RhdGlzdGlj
LnN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudCwgcmVzb3VyY2VTdGF0aXN0aWMudG9w
RnJhbWVVbmlxdWVSZWRpcmVjdHNUb0NvdW50LCByZXNvdXJjZVN0YXRpc3RpYy5wcmV2YWxlbmNl
KTsKLSAgICAgICAgaWYgKG5ld1ByZXZhbGVuY2UgIT0gcmVzb3VyY2VTdGF0aXN0aWMucHJldmFs
ZW5jZSkgewotICAgICAgICAgICAgaWYgKCF0cmFuc2FjdGlvbi5pblByb2dyZXNzKCkpCi0gICAg
ICAgICAgICAgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKLSAgICAgICAgICAgIHNldFByZXZhbGVu
dFJlc291cmNlKHRyYW5zYWN0aW9uLCByZXNvdXJjZVN0YXRpc3RpYy5yZWdpc3RyYWJsZURvbWFp
biwgbmV3UHJldmFsZW5jZSk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKG5ld1ByZXZhbGVuY2Ug
IT0gcmVzb3VyY2VTdGF0aXN0aWMucHJldmFsZW5jZSkKKyAgICAgICAgICAgIHNldFByZXZhbGVu
dFJlc291cmNlKHJlc291cmNlU3RhdGlzdGljLnJlZ2lzdHJhYmxlRG9tYWluLCBuZXdQcmV2YWxl
bmNlKTsKICAgICB9Ci0gICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CiB9CiAKIHZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsYXNzaWZ5UHJldmFsZW50UmVzb3VyY2Vz
KCkKQEAgLTE1NzUsOCArMTU2MCw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNzKFN1YkZyYW1lRG9tYWluJiYKICAgICAgICAg
fQogICAgIH0KIAotICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2Up
OwotICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CisgICAgYXV0byB0cmFuc2FjdGlvblNjb3BlID0g
YmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7CiAKICAgICBhdXRvIGluY3JlbWVudFN0b3Jh
Z2VBY2Nlc3MgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlVQREFURSBPYnNlcnZlZERv
bWFpbnMgU0VUIHRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1N0b3JhZ2VBY2Nlc3NBUEkg
PSB0aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9TdG9yYWdlQWNjZXNzQVBJICsgMSBXSEVS
RSBkb21haW5JRCA9ID8iX3MpOwogICAgIGlmICghaW5jcmVtZW50U3RvcmFnZUFjY2VzcwpAQCAt
MTU4NywxMSArMTU3MSw5IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNzKFN1YkZyYW1lRG9tYWluJiYKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICAKLSAgICBncmFudFN0b3JhZ2VBY2Nlc3NJbnRlcm5hbCh0cmFuc2FjdGlv
biwgV1RGTW92ZShzdWJGcmFtZURvbWFpbiksIFdURk1vdmUodG9wRnJhbWVEb21haW4pLCBmcmFt
ZUlELCBwYWdlSUQsIHVzZXJXYXNQcm9tcHRlZEVhcmxpZXIsIHNjb3BlLCBbY29tcGxldGlvbkhh
bmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKFN0b3JhZ2VBY2Nlc3NXYXNHcmFu
dGVkIHdhc0dyYW50ZWQpIG11dGFibGUgeworICAgIGdyYW50U3RvcmFnZUFjY2Vzc0ludGVybmFs
KFdURk1vdmUoc3ViRnJhbWVEb21haW4pLCBXVEZNb3ZlKHRvcEZyYW1lRG9tYWluKSwgZnJhbWVJ
RCwgcGFnZUlELCB1c2VyV2FzUHJvbXB0ZWRFYXJsaWVyLCBzY29wZSwgW2NvbXBsZXRpb25IYW5k
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChTdG9yYWdlQWNjZXNzV2FzR3JhbnRl
ZCB3YXNHcmFudGVkKSBtdXRhYmxlIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIod2FzR3Jh
bnRlZCA9PSBTdG9yYWdlQWNjZXNzV2FzR3JhbnRlZDo6WWVzID8gU3RvcmFnZUFjY2Vzc1N0YXR1
czo6SGFzQWNjZXNzIDogU3RvcmFnZUFjY2Vzc1N0YXR1czo6Q2Fubm90UmVxdWVzdEFjY2Vzcyk7
CiAgICAgfSk7Ci0KLSAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsKIH0KIAogdm9pZCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVxdWVzdFN0b3JhZ2VBY2Nlc3NVbmRlck9w
ZW5lcihEb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MmJiBkb21haW5Jbk5lZWRPZlN0b3JhZ2VB
Y2Nlc3MsIFBhZ2VJZGVudGlmaWVyIG9wZW5lclBhZ2VJRCwgT3BlbmVyRG9tYWluJiYgb3BlbmVy
RG9tYWluKQpAQCAtMTYwNywxOCArMTU4OSwxNCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpyZXF1ZXN0U3RvcmFnZUFjY2Vzc1VuZGVyT3BlbmVyKERvbWFpbgog
ICAgICAgICBkZWJ1Z0Jyb2FkY2FzdENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OklUUERl
YnVnLCBNZXNzYWdlTGV2ZWw6OkluZm8sIG1ha2VTdHJpbmcoIltJVFBdIFN0b3JhZ2UgYWNjZXNz
IHdhcyBncmFudGVkIGZvciAnIl9zLCBkb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3Muc3RyaW5n
KCksICInIHVuZGVyIG9wZW5lciBwYWdlIGZyb20gJyJfcywgb3BlbmVyRG9tYWluLnN0cmluZygp
LCAiJywgd2l0aCB1c2VyIGludGVyYWN0aW9uIGluIHRoZSBvcGVuZWQgd2luZG93LiJfcykpOwog
ICAgIH0KIAotICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOwot
ICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7Ci0gICAgZ3JhbnRTdG9yYWdlQWNjZXNzSW50ZXJuYWwo
dHJhbnNhY3Rpb24sIFdURk1vdmUoZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzKSwgV1RGTW92
ZShvcGVuZXJEb21haW4pLCBzdGQ6Om51bGxvcHQsIG9wZW5lclBhZ2VJRCwgU3RvcmFnZUFjY2Vz
c1Byb21wdFdhc1Nob3duOjpObywgU3RvcmFnZUFjY2Vzc1Njb3BlOjpQZXJQYWdlLCBbXShTdG9y
YWdlQWNjZXNzV2FzR3JhbnRlZCkgeyB9KTsKLSAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsKKyAg
ICBncmFudFN0b3JhZ2VBY2Nlc3NJbnRlcm5hbChXVEZNb3ZlKGRvbWFpbkluTmVlZE9mU3RvcmFn
ZUFjY2VzcyksIFdURk1vdmUob3BlbmVyRG9tYWluKSwgc3RkOjpudWxsb3B0LCBvcGVuZXJQYWdl
SUQsIFN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93bjo6Tm8sIFN0b3JhZ2VBY2Nlc3NTY29wZTo6
UGVyUGFnZSwgW10oU3RvcmFnZUFjY2Vzc1dhc0dyYW50ZWQpIHsgfSk7CiB9CiAKIHZvaWQgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmdyYW50U3RvcmFnZUFjY2VzcyhTdWJG
cmFtZURvbWFpbiYmIHN1YkZyYW1lRG9tYWluLCBUb3BGcmFtZURvbWFpbiYmIHRvcEZyYW1lRG9t
YWluLCBGcmFtZUlkZW50aWZpZXIgZnJhbWVJRCwgUGFnZUlkZW50aWZpZXIgcGFnZUlELCBTdG9y
YWdlQWNjZXNzUHJvbXB0V2FzU2hvd24gcHJvbXB0V2FzU2hvd24sIFN0b3JhZ2VBY2Nlc3NTY29w
ZSBzY29wZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdG9yYWdlQWNjZXNzV2FzR3JhbnRlZCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
CiAKLSAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKLSAgICB0
cmFuc2FjdGlvbi5iZWdpbigpOworICAgIGF1dG8gdHJhbnNhY3Rpb25TY29wZSA9IGJlZ2luVHJh
bnNhY3Rpb25JZk5lY2Vzc2FyeSgpOwogCiAgICAgaWYgKHByb21wdFdhc1Nob3duID09IFN0b3Jh
Z2VBY2Nlc3NQcm9tcHRXYXNTaG93bjo6WWVzKSB7CiAgICAgICAgIGF1dG8gc3ViRnJhbWVTdGF0
dXMgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihzdWJGcmFt
ZURvbWFpbik7CkBAIC0xNjI5LDIwICsxNjA3LDE3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OmdyYW50U3RvcmFnZUFjY2VzcyhTdWJGcmFtZURvbWFpbiYmIHN1
CiAgICAgICAgIEFTU0VSVChzdWJGcmFtZVN0YXR1cy5maXJzdCA9PSBBZGRlZFJlY29yZDo6Tm8p
OwogI2lmIEFTU0VSVF9FTkFCTEVECiAgICAgICAgIGlmICghTmV0d29ya1N0b3JhZ2VTZXNzaW9u
OjpjYW5SZXF1ZXN0U3RvcmFnZUFjY2Vzc0ZvckxvZ2luT3JDb21wYXRpYmlsaXR5UHVycG9zZXNX
aXRob3V0UHJpb3JVc2VySW50ZXJhY3Rpb24oc3ViRnJhbWVEb21haW4sIHRvcEZyYW1lRG9tYWlu
KSkKLSAgICAgICAgICAgIEFTU0VSVChoYXNIYWRVc2VySW50ZXJhY3Rpb24odHJhbnNhY3Rpb24s
IHN1YkZyYW1lRG9tYWluLCBPcGVyYXRpbmdEYXRlc1dpbmRvdzo6TG9uZykpOworICAgICAgICAg
ICAgQVNTRVJUKGhhc0hhZFVzZXJJbnRlcmFjdGlvbihzdWJGcmFtZURvbWFpbiwgT3BlcmF0aW5n
RGF0ZXNXaW5kb3c6OkxvbmcpKTsKICNlbmRpZgotICAgICAgICBpbnNlcnREb21haW5SZWxhdGlv
bnNoaXBMaXN0KHRyYW5zYWN0aW9uLCBzdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnNR
dWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4oeyB0b3BGcmFtZURvbWFpbiB9KSwgKnN1
YkZyYW1lU3RhdHVzLnNlY29uZCk7CisgICAgICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExp
c3Qoc3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zUXVlcnksIEhhc2hTZXQ8UmVnaXN0
cmFibGVEb21haW4+KHsgdG9wRnJhbWVEb21haW4gfSksICpzdWJGcmFtZVN0YXR1cy5zZWNvbmQp
OwogICAgIH0KIAotICAgIGdyYW50U3RvcmFnZUFjY2Vzc0ludGVybmFsKHRyYW5zYWN0aW9uLCBX
VEZNb3ZlKHN1YkZyYW1lRG9tYWluKSwgV1RGTW92ZSh0b3BGcmFtZURvbWFpbiksIGZyYW1lSUQs
IHBhZ2VJRCwgcHJvbXB0V2FzU2hvd24sIHNjb3BlLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7Ci0KLSAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsKKyAgICBncmFudFN0b3JhZ2VBY2Nlc3NJ
bnRlcm5hbChXVEZNb3ZlKHN1YkZyYW1lRG9tYWluKSwgV1RGTW92ZSh0b3BGcmFtZURvbWFpbiks
IGZyYW1lSUQsIHBhZ2VJRCwgcHJvbXB0V2FzU2hvd24sIHNjb3BlLCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OmdyYW50U3RvcmFnZUFjY2Vzc0ludGVybmFsKGNvbnN0IFNRTGl0ZVRyYW5zYWN0aW9uJiB0
cmFuc2FjdGlvbiwgU3ViRnJhbWVEb21haW4mJiBzdWJGcmFtZURvbWFpbiwgVG9wRnJhbWVEb21h
aW4mJiB0b3BGcmFtZURvbWFpbiwgc3RkOjpvcHRpb25hbDxGcmFtZUlkZW50aWZpZXI+IGZyYW1l
SUQsIFBhZ2VJZGVudGlmaWVyIHBhZ2VJRCwgU3RvcmFnZUFjY2Vzc1Byb21wdFdhc1Nob3duIHBy
b21wdFdhc1Nob3duTm93T3JFYXJsaWVyLCBTdG9yYWdlQWNjZXNzU2NvcGUgc2NvcGUsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoU3RvcmFnZUFjY2Vzc1dhc0dyYW50ZWQpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z3JhbnRT
dG9yYWdlQWNjZXNzSW50ZXJuYWwoU3ViRnJhbWVEb21haW4mJiBzdWJGcmFtZURvbWFpbiwgVG9w
RnJhbWVEb21haW4mJiB0b3BGcmFtZURvbWFpbiwgc3RkOjpvcHRpb25hbDxGcmFtZUlkZW50aWZp
ZXI+IGZyYW1lSUQsIFBhZ2VJZGVudGlmaWVyIHBhZ2VJRCwgU3RvcmFnZUFjY2Vzc1Byb21wdFdh
c1Nob3duIHByb21wdFdhc1Nob3duTm93T3JFYXJsaWVyLCBTdG9yYWdlQWNjZXNzU2NvcGUgc2Nv
cGUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RvcmFnZUFjY2Vzc1dhc0dyYW50ZWQpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAg
IEFTU0VSVChtX2RhdGFiYXNlLnRyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKTsKIAogICAgIGlmIChz
dWJGcmFtZURvbWFpbiA9PSB0b3BGcmFtZURvbWFpbikgewogICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihTdG9yYWdlQWNjZXNzV2FzR3JhbnRlZDo6WWVzKTsKQEAgLTE2NTAsNiArMTYyNSw3IEBA
IHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmdyYW50U3RvcmFnZUFj
Y2Vzc0ludGVybmFsKGNvbnN0IFNRTGl0CiAgICAgfQogCiAgICAgaWYgKHByb21wdFdhc1Nob3du
Tm93T3JFYXJsaWVyID09IFN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93bjo6WWVzKSB7CisgICAg
ICAgIGF1dG8gdHJhbnNhY3Rpb25TY29wZSA9IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgp
OwogI2lmbmRlZiBOREVCVUcKICAgICAgICAgYXV0byBzdWJGcmFtZVN0YXR1cyA9IGVuc3VyZVJl
c291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHN1YkZyYW1lRG9tYWluKTsKICAg
ICAgICAgaWYgKCFzdWJGcmFtZVN0YXR1cy5zZWNvbmQpIHsKQEAgLTE2NTksNyArMTYzNSw3IEBA
IHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmdyYW50U3RvcmFnZUFj
Y2Vzc0ludGVybmFsKGNvbnN0IFNRTGl0CiAgICAgICAgIEFTU0VSVChzdWJGcmFtZVN0YXR1cy5m
aXJzdCA9PSBBZGRlZFJlY29yZDo6Tm8pOwogI2lmIEFTU0VSVF9FTkFCTEVECiAgICAgICAgIGlm
ICghTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjYW5SZXF1ZXN0U3RvcmFnZUFjY2Vzc0ZvckxvZ2lu
T3JDb21wYXRpYmlsaXR5UHVycG9zZXNXaXRob3V0UHJpb3JVc2VySW50ZXJhY3Rpb24oc3ViRnJh
bWVEb21haW4sIHRvcEZyYW1lRG9tYWluKSkKLSAgICAgICAgICAgIEFTU0VSVChoYXNIYWRVc2Vy
SW50ZXJhY3Rpb24odHJhbnNhY3Rpb24sIHN1YkZyYW1lRG9tYWluLCBPcGVyYXRpbmdEYXRlc1dp
bmRvdzo6TG9uZykpOworICAgICAgICAgICAgQVNTRVJUKGhhc0hhZFVzZXJJbnRlcmFjdGlvbihz
dWJGcmFtZURvbWFpbiwgT3BlcmF0aW5nRGF0ZXNXaW5kb3c6OkxvbmcpKTsKICNlbmRpZgogICAg
ICAgICBBU1NFUlQoaGFzVXNlckdyYW50ZWRTdG9yYWdlQWNjZXNzVGhyb3VnaFByb21wdCgqc3Vi
RnJhbWVTdGF0dXMuc2Vjb25kLCB0b3BGcmFtZURvbWFpbikgPT0gU3RvcmFnZUFjY2Vzc1Byb21w
dFdhc1Nob3duOjpZZXMpOwogI2VuZGlmCkBAIC0xNjgyLDggKzE2NTgsOCBAQCB2b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpncmFuZGZhdGhlckRhdGFGb3JEb21haW5z
KGNvbnN0IEhhc2hTZQogICAgIGlmIChkb21haW5zLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7Ci0gICAg
dHJhbnNhY3Rpb24uYmVnaW4oKTsKKyAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdpblRy
YW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKKwogICAgIGZvciAoYXV0byYgcmVnaXN0cmFibGVEb21h
aW4gOiBkb21haW5zKSB7CiAgICAgICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0
aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4ocmVnaXN0cmFibGVEb21haW4pOwogICAgICAgICBp
ZiAoIXJlc3VsdC5zZWNvbmQpCkBAIC0xNjk1LDcgKzE2NzEsNiBAQCB2b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpncmFuZGZhdGhlckRhdGFGb3JEb21haW5zKGNvbnN0
IEhhc2hTZQogICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAt
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpncmFuZGZhdGhlckRhdGFGb3JE
b21haW5zIGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlz
LCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgfQotICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOwogfQogCiBWZWN0b3I8UmVnaXN0
cmFibGVEb21haW4+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjplbnN1cmVQ
cmV2YWxlbnRSZXNvdXJjZXNGb3JEZWJ1Z01vZGUoKQpAQCAtMTcwOCw4ICsxNjgzLDcgQEAgVmVj
dG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6ZW5zdXJlUHJldmFsZW50UmUKICAgICBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IHByaW1h
cnlEb21haW5zVG9CbG9jazsKICAgICBwcmltYXJ5RG9tYWluc1RvQmxvY2sucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eSgyKTsKIAotICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0
YWJhc2UpOwotICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CisgICAgYXV0byB0cmFuc2FjdGlvblNj
b3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7CiAKICAgICBhdXRvIHJlc3VsdCA9
IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRlYnVnU3RhdGlj
UHJldmFsZW50UmVzb3VyY2UoKSk7CiAgICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7CkBAIC0xNzE3
LDcgKzE2OTEsNyBAQCBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjplbnN1cmVQcmV2YWxlbnRSZQogICAgICAgICByZXR1cm4geyB9
OwogICAgIH0KIAotICAgIHNldFByZXZhbGVudFJlc291cmNlKHRyYW5zYWN0aW9uLCBkZWJ1Z1N0
YXRpY1ByZXZhbGVudFJlc291cmNlKCksIFJlc291cmNlTG9hZFByZXZhbGVuY2U6OkhpZ2gpOwor
ICAgIHNldFByZXZhbGVudFJlc291cmNlKGRlYnVnU3RhdGljUHJldmFsZW50UmVzb3VyY2UoKSwg
UmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCk7CiAgICAgcHJpbWFyeURvbWFpbnNUb0Jsb2Nr
LnVuY2hlY2tlZEFwcGVuZChkZWJ1Z1N0YXRpY1ByZXZhbGVudFJlc291cmNlKCkpOwogCiAgICAg
aWYgKCFkZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlKCkuaXNFbXB0eSgpKSB7CkBAIC0xNzI2
LDcgKzE3MDAsNyBAQCBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjplbnN1cmVQcmV2YWxlbnRSZQogICAgICAgICAgICAgSVRQX1JF
TEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6ZW5zdXJlUHJldmFsZW50UmVzb3VyY2VzRm9yRGVidWdNb2RlIHdhcyBu
b3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQgZm9yIGRlYnVnTWFudWFs
UHJldmFsZW50UmVzb3VyY2UiLCB0aGlzKTsKICAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAg
ICAgIH0KLSAgICAgICAgc2V0UHJldmFsZW50UmVzb3VyY2UodHJhbnNhY3Rpb24sIGRlYnVnTWFu
dWFsUHJldmFsZW50UmVzb3VyY2UoKSwgUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCk7Cisg
ICAgICAgIHNldFByZXZhbGVudFJlc291cmNlKGRlYnVnTWFudWFsUHJldmFsZW50UmVzb3VyY2Uo
KSwgUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCk7CiAgICAgICAgIHByaW1hcnlEb21haW5z
VG9CbG9jay51bmNoZWNrZWRBcHBlbmQoZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSgpKTsK
IAogICAgICAgICBpZiAoZGVidWdMb2dnaW5nRW5hYmxlZCgpKSB7CkBAIC0xNzM1LDggKzE3MDks
NiBAQCBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjplbnN1cmVQcmV2YWxlbnRSZQogICAgICAgICB9CiAgICAgfQogCi0gICAgdHJh
bnNhY3Rpb24uY29tbWl0KCk7Ci0KICAgICByZXR1cm4gcHJpbWFyeURvbWFpbnNUb0Jsb2NrOwog
fQogCkBAIC0xNzQ3LDIwICsxNzE5LDE3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmxvZ0ZyYW1lTmF2aWdhdGlvbihjb25zdCBSZWdpc3RyYWJsZURvCiAgICAg
Ym9vbCBhcmVUYXJnZXRBbmRUb3BGcmFtZURvbWFpbnNTYW1lU2l0ZSA9IHRhcmdldERvbWFpbiA9
PSB0b3BGcmFtZURvbWFpbjsKICAgICBib29sIGFyZVRhcmdldEFuZFNvdXJjZURvbWFpbnNTYW1l
U2l0ZSA9IHRhcmdldERvbWFpbiA9PSBzb3VyY2VEb21haW47CiAKLSAgICBTUUxpdGVUcmFuc2Fj
dGlvbiB0cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKKyAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUg
PSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKIAogICAgIGJvb2wgc3RhdGlzdGljc1dl
cmVVcGRhdGVkID0gZmFsc2U7CiAgICAgaWYgKCFpc01haW5GcmFtZSAmJiAhKGFyZVRhcmdldEFu
ZFRvcEZyYW1lRG9tYWluc1NhbWVTaXRlIHx8IGFyZVRhcmdldEFuZFNvdXJjZURvbWFpbnNTYW1l
U2l0ZSkpIHsKLSAgICAgICAgaWYgKCF0cmFuc2FjdGlvbi5pblByb2dyZXNzKCkpCi0gICAgICAg
ICAgICB0cmFuc2FjdGlvbi5iZWdpbigpOwotCiAgICAgICAgIGF1dG8gdGFyZ2V0UmVzdWx0ID0g
ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4odGFyZ2V0RG9tYWlu
KTsKICAgICAgICAgaWYgKCF0YXJnZXRSZXN1bHQuc2Vjb25kKSB7CiAgICAgICAgICAgICBJVFBf
UkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpsb2dGcmFtZU5hdmlnYXRpb24gd2FzIG5vdCBjb21wbGV0ZWQgZHVl
IHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCBvZiB0YXJnZXQgZG9tYWluIiwgdGhpcyk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgdXBkYXRlTGFzdFNlZW4odGFyZ2V0
RG9tYWluLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpyZWR1Y2VUaW1lUmVzb2x1dGlvbihXYWxs
VGltZTo6bm93KCkpKTsKLSAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0cmFu
c2FjdGlvbiwgc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluc1F1ZXJ5LCBIYXNoU2V0PFJlZ2lz
dHJhYmxlRG9tYWluPih7IHRvcEZyYW1lRG9tYWluIH0pLCAqdGFyZ2V0UmVzdWx0LnNlY29uZCk7
CisgICAgICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3Qoc3ViZnJhbWVVbmRlclRvcEZy
YW1lRG9tYWluc1F1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPih7IHRvcEZyYW1lRG9t
YWluIH0pLCAqdGFyZ2V0UmVzdWx0LnNlY29uZCk7CiAgICAgICAgIHN0YXRpc3RpY3NXZXJlVXBk
YXRlZCA9IHRydWU7CiAgICAgfQogCkBAIC0xNzY4LDQzICsxNzM3LDM2IEBAIHZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmxvZ0ZyYW1lTmF2aWdhdGlvbihjb25zdCBS
ZWdpc3RyYWJsZURvCiAgICAgICAgIGlmIChpc01haW5GcmFtZSkgewogICAgICAgICAgICAgYm9v
bCB3YXNOYXZpZ2F0ZWRBZnRlclNob3J0RGVsYXlXaXRob3V0VXNlckludGVyYWN0aW9uID0gIXdh
c1BvdGVudGlhbGx5SW5pdGlhdGVkQnlVc2VyICYmIGRlbGF5QWZ0ZXJNYWluRnJhbWVEb2N1bWVu
dExvYWQgPCBwYXJhbWV0ZXJzKCkubWluRGVsYXlBZnRlck1haW5GcmFtZURvY3VtZW50TG9hZFRv
Tm90QmVBUmVkaXJlY3Q7CiAgICAgICAgICAgICBpZiAoaXNSZWRpcmVjdCB8fCB3YXNOYXZpZ2F0
ZWRBZnRlclNob3J0RGVsYXlXaXRob3V0VXNlckludGVyYWN0aW9uKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKCF0cmFuc2FjdGlvbi5pblByb2dyZXNzKCkpCi0gICAgICAgICAgICAgICAgICAgIHRy
YW5zYWN0aW9uLmJlZ2luKCk7Ci0KICAgICAgICAgICAgICAgICBhdXRvIHJlZGlyZWN0aW5nRG9t
YWluUmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4o
c291cmNlRG9tYWluKTsKICAgICAgICAgICAgICAgICBhdXRvIHRhcmdldFJlc3VsdCA9IGVuc3Vy
ZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHRhcmdldERvbWFpbik7CiAg
ICAgICAgICAgICAgICAgaWYgKCF0YXJnZXRSZXN1bHQuc2Vjb25kIHx8ICFyZWRpcmVjdGluZ0Rv
bWFpblJlc3VsdC5zZWNvbmQpIHsKICAgICAgICAgICAgICAgICAgICAgSVRQX1JFTEVBU0VfTE9H
X0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6bG9nRnJhbWVOYXZpZ2F0aW9uIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQg
aW5zZXJ0IGF0dGVtcHQgb2YgdGFyZ2V0IG9yIHJlZGlyZWN0aW5nIGRvbWFpbiAoaXNNYWluRnJh
bWUpIiwgdGhpcyk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0cmFuc2Fj
dGlvbiwgdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1F1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxl
RG9tYWluPih7IHRhcmdldERvbWFpbiB9KSwgKnJlZGlyZWN0aW5nRG9tYWluUmVzdWx0LnNlY29u
ZCk7CisgICAgICAgICAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0b3BGcmFt
ZVVuaXF1ZVJlZGlyZWN0c1RvUXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgdGFy
Z2V0RG9tYWluIH0pLCAqcmVkaXJlY3RpbmdEb21haW5SZXN1bHQuc2Vjb25kKTsKICAgICAgICAg
ICAgICAgICBpZiAoaXNSZWRpcmVjdCkgewotICAgICAgICAgICAgICAgICAgICBpbnNlcnREb21h
aW5SZWxhdGlvbnNoaXBMaXN0KHRyYW5zYWN0aW9uLCB0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1Rv
U2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50UXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVE
b21haW4+KHsgdGFyZ2V0RG9tYWluIH0pLCAqcmVkaXJlY3RpbmdEb21haW5SZXN1bHQuc2Vjb25k
KTsKKyAgICAgICAgICAgICAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0b3BG
cmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50UXVlcnks
IEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgdGFyZ2V0RG9tYWluIH0pLCAqcmVkaXJlY3Rp
bmdEb21haW5SZXN1bHQuc2Vjb25kKTsKIAogICAgICAgICAgICAgICAgICAgICBpZiAoVU5MSUtF
TFkoZGVidWdMb2dnaW5nRW5hYmxlZCgpKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgUkVM
RUFTRV9MT0dfSU5GTyhJVFBEZWJ1ZywgIkRpZCBzZXQgJSIgUFVCTElDX0xPR19TVFJJTkcgIiBh
cyBtYWtpbmcgYSB0b3AgZnJhbWUgcmVkaXJlY3QgdG8gJSIgUFVCTElDX0xPR19TVFJJTkcgIi4i
LCBzb3VyY2VEb21haW4uc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgdGFyZ2V0RG9tYWluLnN0cmlu
ZygpLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdCcm9hZGNh
c3RDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpJVFBEZWJ1ZywgTWVzc2FnZUxldmVsOjpJ
bmZvLCBtYWtlU3RyaW5nKCJEaWQgc2V0ICciLCBzb3VyY2VEb21haW4uc3RyaW5nKCksICInIGFz
IG1ha2luZyBhIHRvcCBmcmFtZSByZWRpcmVjdCB0byAnIiwgdGFyZ2V0RG9tYWluLnN0cmluZygp
LCAiJy4iKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0cmFuc2FjdGlvbiwgdG9w
RnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tUXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+
KHsgc291cmNlRG9tYWluIH0pLCAqdGFyZ2V0UmVzdWx0LnNlY29uZCk7CisgICAgICAgICAgICAg
ICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zy
b21RdWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4oeyBzb3VyY2VEb21haW4gfSksICp0
YXJnZXRSZXN1bHQuc2Vjb25kKTsKICAgICAgICAgICAgICAgICBzdGF0aXN0aWNzV2VyZVVwZGF0
ZWQgPSB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKGlzUmVkaXJlY3Qp
IHsKLSAgICAgICAgICAgIGlmICghdHJhbnNhY3Rpb24uaW5Qcm9ncmVzcygpKQotICAgICAgICAg
ICAgICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7Ci0KICAgICAgICAgICAgIGF1dG8gcmVkaXJlY3Rp
bmdEb21haW5SZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURv
bWFpbihzb3VyY2VEb21haW4pOwogICAgICAgICAgICAgYXV0byB0YXJnZXRSZXN1bHQgPSBlbnN1
cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbih0YXJnZXREb21haW4pOwog
ICAgICAgICAgICAgaWYgKCF0YXJnZXRSZXN1bHQuc2Vjb25kIHx8ICFyZWRpcmVjdGluZ0RvbWFp
blJlc3VsdC5zZWNvbmQpIHsKICAgICAgICAgICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1Io
bV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjps
b2dGcmFtZU5hdmlnYXRpb24gd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQg
YXR0ZW1wdCBvZiB0YXJnZXQgb3IgcmVkaXJlY3RpbmcgZG9tYWluIChpc1JlZGlyZWN0KSIsIHRo
aXMpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QodHJhbnNhY3Rpb24sIHN1YnJlc291cmNlVW5p
cXVlUmVkaXJlY3RzVG9RdWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4oeyB0YXJnZXRE
b21haW4gfSksICpyZWRpcmVjdGluZ0RvbWFpblJlc3VsdC5zZWNvbmQpOwotICAgICAgICAgICAg
aW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0cmFuc2FjdGlvbiwgc3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdHNGcm9tUXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgc291cmNl
RG9tYWluIH0pLCAqdGFyZ2V0UmVzdWx0LnNlY29uZCk7CisgICAgICAgICAgICBpbnNlcnREb21h
aW5SZWxhdGlvbnNoaXBMaXN0KHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9RdWVyeSwgSGFz
aFNldDxSZWdpc3RyYWJsZURvbWFpbj4oeyB0YXJnZXREb21haW4gfSksICpyZWRpcmVjdGluZ0Rv
bWFpblJlc3VsdC5zZWNvbmQpOworICAgICAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlw
TGlzdChzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb21RdWVyeSwgSGFzaFNldDxSZWdpc3Ry
YWJsZURvbWFpbj4oeyBzb3VyY2VEb21haW4gfSksICp0YXJnZXRSZXN1bHQuc2Vjb25kKTsKICAg
ICAgICAgICAgIHN0YXRpc3RpY3NXZXJlVXBkYXRlZCA9IHRydWU7CiAgICAgICAgIH0KICAgICB9
Ci0gICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CiAKICAgICBpZiAoc3RhdGlzdGljc1dlcmVVcGRh
dGVkKQogICAgICAgICBzY2hlZHVsZVN0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElmTmVjZXNz
YXJ5KCk7CkBAIC0xODE1LDI4ICsxNzc3LDI0IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OmxvZ0Nyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb24oY29uCiAg
ICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAgICAgQVNTRVJUKGZyb21Eb21haW4gIT0g
dG9Eb21haW4pOwogCi0gICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9kYXRhYmFz
ZSk7Ci0gICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKKyAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUg
PSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKIAogICAgIGF1dG8gdG9Eb21haW5SZXN1
bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbih0b0RvbWFp
bik7CiAgICAgaWYgKCF0b0RvbWFpblJlc3VsdC5zZWNvbmQpIHsKICAgICAgICAgSVRQX1JFTEVB
U0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6bG9nQ3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbiB3YXMgbm90IGNv
bXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0IiwgdGhpcyk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9Ci0gICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0cmFuc2FjdGlv
biwgdG9wRnJhbWVMaW5rRGVjb3JhdGlvbnNGcm9tUXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVE
b21haW4+KHsgZnJvbURvbWFpbiB9KSwgKnRvRG9tYWluUmVzdWx0LnNlY29uZCk7CisgICAgaW5z
ZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0b3BGcmFtZUxpbmtEZWNvcmF0aW9uc0Zyb21RdWVy
eSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4oeyBmcm9tRG9tYWluIH0pLCAqdG9Eb21haW5S
ZXN1bHQuc2Vjb25kKTsKICAgICAKICAgICBpZiAoaXNQcmV2YWxlbnRSZXNvdXJjZShmcm9tRG9t
YWluKSkKLSAgICAgICAgc2V0SXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCh0
cmFuc2FjdGlvbiwgdG9Eb21haW4sIHRydWUpOwotCi0gICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7
CisgICAgICAgIHNldElzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwodG9Eb21h
aW4sIHRydWUpOwogfQogCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpjbGVhclRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5mb3Jj
ZW1lbnQoY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbiwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNN
YWluKCkpOwogCi0gICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7
Ci0gICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKKyAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBi
ZWdpblRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKIAogICAgIGF1dG8gdGFyZ2V0UmVzdWx0ID0g
ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZG9tYWluKTsKICAg
ICBpZiAoIXRhcmdldFJlc3VsdC5zZWNvbmQpIHsKQEAgLTE4NTIsOCArMTgxMCw2IEBAIHZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyVG9wRnJhbWVVbmlxdWVS
ZWRpcmVjdHNUb1NpbmNlU2FtCiAgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Np
b25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyVG9w
RnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudCBmYWls
ZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBt
X2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgfQotCi0gICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CiAgICAgCiAgICAgY29tcGxldGlv
bkhhbmRsZXIoKTsKIH0KQEAgLTE4NzgsMTkgKzE4MzQsMTYgQEAgdm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bG9nVXNlckludGVyYWN0aW9uKGNvbnN0IFRvcEZyYW1l
RG9tYWkKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAotICAgIFNRTGl0ZVRy
YW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOwotICAgIHRyYW5zYWN0aW9uLmJlZ2lu
KCk7CisgICAgYXV0byB0cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNz
YXJ5KCk7CiAKICAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJl
Z2lzdHJhYmxlRG9tYWluKGRvbWFpbik7CiAgICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7CiAgICAg
ICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmxvZ1VzZXJJbnRlcmFjdGlvbiB3YXMgbm90IGNvbXBs
ZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0IiwgdGhpcyk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9Ci0gICAgYm9vbCBkaWRIYXZlUHJldmlvdXNVc2VySW50ZXJhY3Rpb24gPSBoYXNI
YWRVc2VySW50ZXJhY3Rpb24odHJhbnNhY3Rpb24sIGRvbWFpbiwgT3BlcmF0aW5nRGF0ZXNXaW5k
b3c6OkxvbmcpOworICAgIGJvb2wgZGlkSGF2ZVByZXZpb3VzVXNlckludGVyYWN0aW9uID0gaGFz
SGFkVXNlckludGVyYWN0aW9uKGRvbWFpbiwgT3BlcmF0aW5nRGF0ZXNXaW5kb3c6OkxvbmcpOwog
ICAgIHNldFVzZXJJbnRlcmFjdGlvbihkb21haW4sIHRydWUsIFdhbGxUaW1lOjpub3coKSk7CiAK
LSAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsKLQogICAgIGlmIChkaWRIYXZlUHJldmlvdXNVc2Vy
SW50ZXJhY3Rpb24pIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKICAgICAgICAgcmV0
dXJuOwpAQCAtMTkwMiwxNiArMTg1NSw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmNsZWFyVXNlckludGVyYWN0aW9uKGNvbnN0IFJlZ2lzdHJhYmxlCiB7CiAg
ICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKLSAgICBTUUxpdGVUcmFuc2FjdGlvbiB0
cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKLSAgICB0cmFuc2FjdGlvbi5iZWdpbigpOwotICAgIGNs
ZWFyVXNlckludGVyYWN0aW9uKHRyYW5zYWN0aW9uLCBkb21haW4sIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKLSAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsKLX0KLQotdm9pZCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3Qg
V2ViQ29yZTo6U1FMaXRlVHJhbnNhY3Rpb24mLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9t
YWluLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0g
ICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgQVNTRVJUKG1fZGF0YWJhc2UudHJh
bnNhY3Rpb25JblByb2dyZXNzKCkpOworICAgIGF1dG8gdHJhbnNhY3Rpb25TY29wZSA9IGJlZ2lu
VHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpOwogCiAgICAgYXV0byB0YXJnZXRSZXN1bHQgPSBlbnN1
cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihkb21haW4pOwogICAgIGlm
ICghdGFyZ2V0UmVzdWx0LnNlY29uZCkgewpAQCAtMTkzNywxOSArMTg4MSw4IEBAIHZvaWQgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyVXNlckludGVyYWN0aW9uKGNv
bnN0IFdlYkNvcmU6OlNRCiBib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpoYXNIYWRVc2VySW50ZXJhY3Rpb24oY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbiwg
T3BlcmF0aW5nRGF0ZXNXaW5kb3cgb3BlcmF0aW5nRGF0ZXNXaW5kb3cpCiB7CiAgICAgQVNTRVJU
KCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24o
bV9kYXRhYmFzZSk7Ci0gICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKLSAgICBib29sIHJlc3VsdCA9
IGhhc0hhZFVzZXJJbnRlcmFjdGlvbih0cmFuc2FjdGlvbiwgZG9tYWluLCBvcGVyYXRpbmdEYXRl
c1dpbmRvdyk7Ci0gICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsK
LX0KLQotCi1ib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpoYXNIYWRV
c2VySW50ZXJhY3Rpb24oY29uc3QgV2ViQ29yZTo6U1FMaXRlVHJhbnNhY3Rpb24mIHRyYW5zYWN0
aW9uLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluLCBPcGVyYXRpbmdEYXRlc1dpbmRv
dyBvcGVyYXRpbmdEYXRlc1dpbmRvdykKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKLSAgICBBU1NFUlQobV9kYXRhYmFzZS50cmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSk7CiAKKyAg
ICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsK
ICAgICBhdXRvIHNjb3BlZFN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX2hhZFVz
ZXJJbnRlcmFjdGlvblN0YXRlbWVudCwgaGFkVXNlckludGVyYWN0aW9uUXVlcnksICJoYXNIYWRV
c2VySW50ZXJhY3Rpb24iX3MpOwogICAgIGlmICghc2NvcGVkU3RhdGVtZW50CiAgICAgICAgIHx8
IHNjb3BlZFN0YXRlbWVudC0+YmluZFRleHQoMSwgZG9tYWluLnN0cmluZygpKSAhPSBTUUxJVEVf
T0sKQEAgLTE5NjgsMjAgKzE5MDEsMjEgQEAgYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6aGFzSGFkVXNlckludGVyYWN0aW9uKGNvbnN0IFdlYkNvcmU6OlMKICAgICAg
ICAgLy8gRHJvcCBwcml2YWN5IHNlbnNpdGl2ZSBkYXRhIGJlY2F1c2Ugd2Ugbm8gbG9uZ2VyIG5l
ZWQgaXQuCiAgICAgICAgIC8vIFNldCB0aW1lc3RhbXAgdG8gMCBzbyB0aGF0IHN0YXRpc3RpY3Mg
bWVyZ2Ugd2lsbCBrbm93CiAgICAgICAgIC8vIGl0IGhhcyBiZWVuIHJlc2V0IGFzIG9wcG9zZWQg
dG8gaXRzIGRlZmF1bHQgLTEuCi0gICAgICAgIGNsZWFyVXNlckludGVyYWN0aW9uKHRyYW5zYWN0
aW9uLCBkb21haW4sIFtdIHsgfSk7CisgICAgICAgIGNsZWFyVXNlckludGVyYWN0aW9uKGRvbWFp
biwgW10geyB9KTsKICAgICAgICAgaGFkVXNlckludGVyYWN0aW9uID0gZmFsc2U7CiAgICAgfQog
ICAgIHJldHVybiBoYWRVc2VySW50ZXJhY3Rpb247CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlKGNvbnN0IFNRTGl0ZVRy
YW5zYWN0aW9uJiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbiwgUmVzb3VyY2VMb2Fk
UHJldmFsZW5jZSBuZXdQcmV2YWxlbmNlKQordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4m
IGRvbWFpbiwgUmVzb3VyY2VMb2FkUHJldmFsZW5jZSBuZXdQcmV2YWxlbmNlKQogewogICAgIEFT
U0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIEFTU0VSVChtX2RhdGFiYXNlLnRyYW5zYWN0
aW9uSW5Qcm9ncmVzcygpKTsKIAogICAgIGlmIChzaG91bGRTa2lwKGRvbWFpbikpCiAgICAgICAg
IHJldHVybjsKIAorICAgIGF1dG8gdHJhbnNhY3Rpb25TY29wZSA9IGJlZ2luVHJhbnNhY3Rpb25J
Zk5lY2Vzc2FyeSgpOworCiAgICAgYXV0byByZWdpc3RyYWJsZURvbWFpbklEID0gZG9tYWluSUQo
ZG9tYWluKTsKICAgICBpZiAoIXJlZ2lzdHJhYmxlRG9tYWluSUQpIHsKICAgICAgICAgSVRQX1JF
TEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2UgZG9tYWluSUQgc2hvdWxkIGV4aXN0
IGJ1dCB3YXMgbm90IGZvdW5kLiIsIHRoaXMpOwpAQCAtMjEyNCw4ICsyMDU4LDcgQEAgdm9pZCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJQcmV2YWxlbnRSZXNvdXJj
ZShjb25zdCBSZWdpc3RyYWIKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAot
ICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOwotICAgIHRyYW5z
YWN0aW9uLmJlZ2luKCk7CisgICAgYXV0byB0cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2Fj
dGlvbklmTmVjZXNzYXJ5KCk7CiAKICAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3Rh
dGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvbWFpbik7CiAgICAgaWYgKCFyZXN1bHQuc2Vj
b25kKSB7CkBAIC0yMTQyLDI0ICsyMDc1LDEzIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFiCiAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQotCi0g
ICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CiB9CiAKIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OnNldEdyYW5kZmF0aGVyZWQoY29uc3QgUmVnaXN0cmFibGVEb21haW4m
IGRvbWFpbiwgYm9vbCB2YWx1ZSkKLXsKLSAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlv
bihtX2RhdGFiYXNlKTsKLSAgICB0cmFuc2FjdGlvbi5iZWdpbigpOwotCi0gICAgc2V0R3JhbmRm
YXRoZXJlZCh0cmFuc2FjdGlvbiwgZG9tYWluLCB2YWx1ZSk7Ci0KLSAgICB0cmFuc2FjdGlvbi5j
b21taXQoKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
c2V0R3JhbmRmYXRoZXJlZChjb25zdCBXZWJDb3JlOjpTUUxpdGVUcmFuc2FjdGlvbiYsIGNvbnN0
IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4sIGJvb2wgdmFsdWUpCiB7CiAgICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7Ci0gICAgQVNTRVJUKG1fZGF0YWJhc2UudHJhbnNhY3Rpb25JblBy
b2dyZXNzKCkpOworCisgICAgYXV0byB0cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlv
bklmTmVjZXNzYXJ5KCk7CiAKICAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlz
dGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvbWFpbik7CiAgICAgaWYgKCFyZXN1bHQuc2Vjb25k
KSB7CkBAIC0yMTc3LDEwICsyMDk5LDExIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OnNldEdyYW5kZmF0aGVyZWQoY29uc3QgV2ViQ29yZTo6U1FMaXRlCiAgICAg
fQogfQogCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRJc1Nj
aGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsKGNvbnN0IFNRTGl0ZVRyYW5zYWN0aW9u
JiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbiwgYm9vbCB2YWx1ZSkKK3ZvaWQgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldElzU2NoZWR1bGVkRm9yQWxsQnV0
Q29va2llRGF0YVJlbW92YWwoY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbiwgYm9vbCB2
YWx1ZSkKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBBU1NFUlQobV9k
YXRhYmFzZS50cmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSk7CisKKyAgICBhdXRvIHRyYW5zYWN0aW9u
U2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKIAogICAgIGF1dG8gcmVzdWx0
ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZG9tYWluKTsK
ICAgICBpZiAoIXJlc3VsdC5zZWNvbmQpIHsKQEAgLTIyNDAsOCArMjE2Myw3IEBAIHZvaWQgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFt
ZURvbWFpbihjb25zdCBTCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKLSAg
ICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKLSAgICB0cmFuc2Fj
dGlvbi5iZWdpbigpOworICAgIGF1dG8gdHJhbnNhY3Rpb25TY29wZSA9IGJlZ2luVHJhbnNhY3Rp
b25JZk5lY2Vzc2FyeSgpOwogCiAgICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRp
c3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihzdWJGcmFtZURvbWFpbik7CiAgICAgaWYgKCFyZXN1
bHQuc2Vjb25kKSB7CkBAIC0yMjQ5LDE3ICsyMTcxLDE0IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihjb25z
dCBTCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgLy8gRm9yIGNvbnNpc3RlbmN5LCBtYWtl
IHN1cmUgd2UgYWxzbyBoYXZlIGEgc3RhdGlzdGljcyBlbnRyeSBmb3IgdGhlIHRvcCBmcmFtZSBk
b21haW4uCi0gICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0cmFuc2FjdGlvbiwgc3Vi
ZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluc1F1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWlu
Pih7IHRvcEZyYW1lRG9tYWluIH0pLCAqcmVzdWx0LnNlY29uZCk7Ci0KLSAgICB0cmFuc2FjdGlv
bi5jb21taXQoKTsKKyAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHN1YmZyYW1lVW5k
ZXJUb3BGcmFtZURvbWFpbnNRdWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4oeyB0b3BG
cmFtZURvbWFpbiB9KSwgKnJlc3VsdC5zZWNvbmQpOwogfQogCiB2b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4o
Y29uc3QgU3ViUmVzb3VyY2VEb21haW4mIHN1YnJlc291cmNlRG9tYWluLCBjb25zdCBUb3BGcmFt
ZURvbWFpbiYgdG9wRnJhbWVEb21haW4pCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7CiAKLSAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKLSAg
ICB0cmFuc2FjdGlvbi5iZWdpbigpOworICAgIGF1dG8gdHJhbnNhY3Rpb25TY29wZSA9IGJlZ2lu
VHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpOwogCiAgICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNv
dXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihzdWJyZXNvdXJjZURvbWFpbik7CiAg
ICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7CkBAIC0yMjY3LDE3ICsyMTg2LDE0IEBAIHZvaWQgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFN1YnJlc291cmNlVW5kZXJUb3BG
cmFtZURvbWFpbihjb25zCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgLy8gRm9yIGNvbnNp
c3RlbmN5LCBtYWtlIHN1cmUgd2UgYWxzbyBoYXZlIGEgc3RhdGlzdGljcyBlbnRyeSBmb3IgdGhl
IHRvcCBmcmFtZSBkb21haW4uCi0gICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0cmFu
c2FjdGlvbiwgc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc1F1ZXJ5LCBIYXNoU2V0PFJl
Z2lzdHJhYmxlRG9tYWluPih7IHRvcEZyYW1lRG9tYWluIH0pLCAqcmVzdWx0LnNlY29uZCk7Ci0K
LSAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsKKyAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBM
aXN0KHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNRdWVyeSwgSGFzaFNldDxSZWdpc3Ry
YWJsZURvbWFpbj4oeyB0b3BGcmFtZURvbWFpbiB9KSwgKnJlc3VsdC5zZWNvbmQpOwogfQogCiB2
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0VG8oY29uc3QgU3ViUmVzb3VyY2VEb21haW4mIHN1YnJlc291cmNlRG9tYWlu
LCBjb25zdCBSZWRpcmVjdERvbWFpbiYgcmVkaXJlY3REb21haW4pCiB7CiAgICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7CiAKLSAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbiht
X2RhdGFiYXNlKTsKLSAgICB0cmFuc2FjdGlvbi5iZWdpbigpOworICAgIGF1dG8gdHJhbnNhY3Rp
b25TY29wZSA9IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpOwogCiAgICAgYXV0byByZXN1
bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihzdWJyZXNv
dXJjZURvbWFpbik7CiAgICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7CkBAIC0yMjg1LDE3ICsyMjAx
LDE0IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBTCiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgLy8gRm9yIGNvbnNpc3RlbmN5LCBtYWtlIHN1cmUgd2UgYWxzbyBoYXZlIGEgc3RhdGlzdGlj
cyBlbnRyeSBmb3IgdGhlIHJlZGlyZWN0IGRvbWFpbi4KLSAgICBpbnNlcnREb21haW5SZWxhdGlv
bnNoaXBMaXN0KHRyYW5zYWN0aW9uLCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvUXVlcnks
IEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgcmVkaXJlY3REb21haW4gfSksICpyZXN1bHQu
c2Vjb25kKTsKLQotICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOworICAgIGluc2VydERvbWFpblJl
bGF0aW9uc2hpcExpc3Qoc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb1F1ZXJ5LCBIYXNoU2V0
PFJlZ2lzdHJhYmxlRG9tYWluPih7IHJlZGlyZWN0RG9tYWluIH0pLCAqcmVzdWx0LnNlY29uZCk7
CiB9CiAKIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiBzdWJyZXNv
dXJjZURvbWFpbiwgY29uc3QgUmVkaXJlY3REb21haW4mIHJlZGlyZWN0RG9tYWluKQogewogICAg
IEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJh
bnNhY3Rpb24obV9kYXRhYmFzZSk7Ci0gICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKKyAgICBhdXRv
IHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKIAogICAg
IGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21h
aW4oc3VicmVzb3VyY2VEb21haW4pOwogICAgIGlmICghcmVzdWx0LnNlY29uZCkgewpAQCAtMjMw
MywxNyArMjIxNiwxNCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdAogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIC8vIEZvciBjb25zaXN0ZW5jeSwgbWFrZSBzdXJlIHdlIGFsc28gaGF2ZSBh
IHN0YXRpc3RpY3MgZW50cnkgZm9yIHRoZSByZWRpcmVjdCBkb21haW4uCi0gICAgaW5zZXJ0RG9t
YWluUmVsYXRpb25zaGlwTGlzdCh0cmFuc2FjdGlvbiwgc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVj
dHNGcm9tUXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgcmVkaXJlY3REb21haW4g
fSksICpyZXN1bHQuc2Vjb25kKTsKLQotICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOworICAgIGlu
c2VydERvbWFpblJlbGF0aW9uc2hpcExpc3Qoc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9t
UXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgcmVkaXJlY3REb21haW4gfSksICpy
ZXN1bHQuc2Vjb25kKTsKIH0KIAogdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFRvcEZyYW1lRG9tYWluJiB0
b3BGcmFtZURvbWFpbiwgY29uc3QgUmVkaXJlY3REb21haW4mIHJlZGlyZWN0RG9tYWluKQogewog
ICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgU1FMaXRlVHJhbnNhY3Rpb24g
dHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7Ci0gICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKKyAgICBh
dXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKIAog
ICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVE
b21haW4odG9wRnJhbWVEb21haW4pOwogICAgIGlmICghcmVzdWx0LnNlY29uZCkgewpAQCAtMjMy
MSwxOCArMjIzMSwxNSBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgVG9wRgogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0cmFuc2FjdGlvbiwg
dG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1F1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWlu
Pih7IHJlZGlyZWN0RG9tYWluIH0pLCAqcmVzdWx0LnNlY29uZCk7Ci0gICAgaW5zZXJ0RG9tYWlu
UmVsYXRpb25zaGlwTGlzdCh0cmFuc2FjdGlvbiwgdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1Np
bmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudFF1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9t
YWluPih7IHJlZGlyZWN0RG9tYWluIH0pLCAqcmVzdWx0LnNlY29uZCk7Ci0KLSAgICB0cmFuc2Fj
dGlvbi5jb21taXQoKTsKKyAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHRvcEZyYW1l
VW5pcXVlUmVkaXJlY3RzVG9RdWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4oeyByZWRp
cmVjdERvbWFpbiB9KSwgKnJlc3VsdC5zZWNvbmQpOworICAgIGluc2VydERvbWFpblJlbGF0aW9u
c2hpcExpc3QodG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZv
cmNlbWVudFF1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPih7IHJlZGlyZWN0RG9tYWlu
IH0pLCAqcmVzdWx0LnNlY29uZCk7CiB9CiAKIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFRvcEZyYW1l
RG9tYWluJiB0b3BGcmFtZURvbWFpbiwgY29uc3QgUmVkaXJlY3REb21haW4mIHJlZGlyZWN0RG9t
YWluKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgU1FMaXRlVHJh
bnNhY3Rpb24gdHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7Ci0gICAgdHJhbnNhY3Rpb24uYmVnaW4o
KTsKKyAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3Nh
cnkoKTsKIAogICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVn
aXN0cmFibGVEb21haW4odG9wRnJhbWVEb21haW4pOwogICAgIGlmICghcmVzdWx0LnNlY29uZCkg
ewpAQCAtMjM0MCw5ICsyMjQ3LDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgVG8KICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICAvLyBGb3IgY29uc2lzdGVuY3ksIG1ha2Ugc3VyZSB3ZSBhbHNv
IGhhdmUgYSBzdGF0aXN0aWNzIGVudHJ5IGZvciB0aGUgcmVkaXJlY3QgZG9tYWluLgotICAgIGlu
c2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QodHJhbnNhY3Rpb24sIHRvcEZyYW1lVW5pcXVlUmVk
aXJlY3RzRnJvbVF1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPih7IHJlZGlyZWN0RG9t
YWluIH0pLCAqcmVzdWx0LnNlY29uZCk7Ci0KLSAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsKKyAg
ICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJv
bVF1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPih7IHJlZGlyZWN0RG9tYWluIH0pLCAq
cmVzdWx0LnNlY29uZCk7CiB9CiAKIHN0ZDo6cGFpcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6QWRkZWRSZWNvcmQsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+PiBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9y
UmVnaXN0cmFibGVEb21haW4oY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbikKQEAgLTI3
MDMsNyArMjYwOCw3IEBAIFJlZ2lzdHJhYmxlRG9tYWluc1RvRGVsZXRlT3JSZXN0cmljdFdlYnNp
dGVEYXRhRm9yIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzCiAgICAgYXV0byBvbGRlc3RV
c2VySW50ZXJhY3Rpb24gPSBub3c7CiAgICAgUmVnaXN0cmFibGVEb21haW5zVG9EZWxldGVPclJl
c3RyaWN0V2Vic2l0ZURhdGFGb3IgdG9EZWxldGVPclJlc3RyaWN0Rm9yOwogCi0gICAgU1FMaXRl
VHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7CisgICAgYXV0byB0cmFuc2FjdGlv
blNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7CiAKICAgICBWZWN0b3I8RG9t
YWluRGF0YT4gZG9tYWlucyA9IHRoaXMtPmRvbWFpbnMoKTsKICAgICBWZWN0b3I8dW5zaWduZWQ+
IGRvbWFpbklEc1RvQ2xlYXJHcmFuZGZhdGhlcmluZzsKQEAgLTI3MTgsOSArMjYyMyw3IEBAIFJl
Z2lzdHJhYmxlRG9tYWluc1RvRGVsZXRlT3JSZXN0cmljdFdlYnNpdGVEYXRhRm9yIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAo
c2hvdWxkUmVtb3ZlQWxsQnV0Q29va2llc0ZvcihzdGF0aXN0aWMsIHNob3VsZENoZWNrRm9yR3Jh
bmRmYXRoZXJpbmcpKSB7CiAgICAgICAgICAgICAgICAgdG9EZWxldGVPclJlc3RyaWN0Rm9yLmRv
bWFpbnNUb0RlbGV0ZUFsbE5vbkNvb2tpZVdlYnNpdGVEYXRhRm9yLmFwcGVuZChzdGF0aXN0aWMu
cmVnaXN0cmFibGVEb21haW4pOwotICAgICAgICAgICAgICAgIGlmICghdHJhbnNhY3Rpb24uaW5Q
cm9ncmVzcygpKQotICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbi5iZWdpbigpOwotICAg
ICAgICAgICAgICAgIHNldElzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwodHJh
bnNhY3Rpb24sIHN0YXRpc3RpYy5yZWdpc3RyYWJsZURvbWFpbiwgZmFsc2UpOworICAgICAgICAg
ICAgICAgIHNldElzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwoc3RhdGlzdGlj
LnJlZ2lzdHJhYmxlRG9tYWluLCBmYWxzZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBp
ZiAoc2hvdWxkRW5mb3JjZVNhbWVTaXRlU3RyaWN0Rm9yKHN0YXRpc3RpYywgc2hvdWxkQ2hlY2tG
b3JHcmFuZGZhdGhlcmluZykpIHsKICAgICAgICAgICAgICAgICB0b0RlbGV0ZU9yUmVzdHJpY3RG
b3IuZG9tYWluc1RvRW5mb3JjZVNhbWVTaXRlU3RyaWN0Rm9yLmFwcGVuZChzdGF0aXN0aWMucmVn
aXN0cmFibGVEb21haW4pOwpAQCAtMjc0MCw4ICsyNjQzLDYgQEAgUmVnaXN0cmFibGVEb21haW5z
VG9EZWxldGVPclJlc3RyaWN0V2Vic2l0ZURhdGFGb3IgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXMKICAgICAgICAgdG9EZWxldGVPclJlc3RyaWN0Rm9yLmRvbWFpbnNUb0RlbGV0ZUFsbE5v
bkNvb2tpZVdlYnNpdGVEYXRhRm9yLmNsZWFyKCk7CiAKICAgICBjbGVhckdyYW5kZmF0aGVyaW5n
KFdURk1vdmUoZG9tYWluSURzVG9DbGVhckdyYW5kZmF0aGVyaW5nKSk7Ci0KLSAgICB0cmFuc2Fj
dGlvbi5jb21taXQoKTsKICAgICAKICAgICByZXR1cm4gdG9EZWxldGVPclJlc3RyaWN0Rm9yOwog
fQpAQCAtMjgwNiw4ICsyNzA3LDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6c2V0TGFzdFNlZW4oY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGQKIHsKICAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAotICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5z
YWN0aW9uKG1fZGF0YWJhc2UpOwotICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CisgICAgYXV0byB0
cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7CiAKICAgICBh
dXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWlu
KGRvbWFpbik7CiAgICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7CkBAIC0yODE2LDggKzI3MTYsNiBA
QCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRMYXN0U2Vlbihj
b25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZAogICAgIH0KICAgICAKICAgICB1cGRhdGVMYXN0U2Vl
bihkb21haW4sIFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcyhzZWNvbmRzLnNlY29uZHMoKSkpOwot
Ci0gICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CiB9CiAKIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxl
RG9tYWluJiBkb21haW4pCkBAIC0yODI3LDE5ICsyNzI1LDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0
cmFibGUKICAgICBpZiAoc2hvdWxkU2tpcChkb21haW4pKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKLSAgICB0cmFuc2Fj
dGlvbi5iZWdpbigpOwotICAgIHNldFByZXZhbGVudFJlc291cmNlKHRyYW5zYWN0aW9uLCBkb21h
aW4pOwotICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBTUUxpdGVU
cmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4p
Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgQVNTRVJUKG1fZGF0YWJh
c2UudHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOwotCi0gICAgaWYgKHNob3VsZFNraXAoZG9tYWlu
KSkKLSAgICAgICAgcmV0dXJuOworICAgIGF1dG8gdHJhbnNhY3Rpb25TY29wZSA9IGJlZ2luVHJh
bnNhY3Rpb25JZk5lY2Vzc2FyeSgpOwogCiAgICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJj
ZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihkb21haW4pOwogICAgIGlmICghcmVzdWx0
LnNlY29uZCkgewpAQCAtMjg0Nyw3ICsyNzMzLDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgU1FMaXRlVHJhbnMK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHNldFByZXZhbGVudFJlc291cmNlKHRyYW5z
YWN0aW9uLCBkb21haW4sIFJlc291cmNlTG9hZFByZXZhbGVuY2U6OkhpZ2gpOworICAgIHNldFBy
ZXZhbGVudFJlc291cmNlKGRvbWFpbiwgUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCk7CiB9
CiAKIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFZlcnlQcmV2
YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKQpAQCAtMjg1Nywy
MSArMjc0Myw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNl
dFZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyCiAgICAgaWYgKHNob3VsZFNraXAo
ZG9tYWluKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNh
Y3Rpb24obV9kYXRhYmFzZSk7Ci0gICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKLQotICAgIHNldFZl
cnlQcmV2YWxlbnRSZXNvdXJjZSh0cmFuc2FjdGlvbiwgZG9tYWluKTsKLQotICAgIHRyYW5zYWN0
aW9uLmNvbW1pdCgpOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgU1FMaXRlVHJhbnNhY3Rpb24mIHRy
YW5zYWN0aW9uLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKQotewotICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIEFTU0VSVChtX2RhdGFiYXNlLnRyYW5zYWN0aW9u
SW5Qcm9ncmVzcygpKTsKLQotICAgIGlmIChzaG91bGRTa2lwKGRvbWFpbikpCi0gICAgICAgIHJl
dHVybjsKKyAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNl
c3NhcnkoKTsKIAogICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9y
UmVnaXN0cmFibGVEb21haW4oZG9tYWluKTsKICAgICBpZiAoIXJlc3VsdC5zZWNvbmQpIHsKQEAg
LTI4NzksNyArMjc1MSw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OnNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBTUUxpdGVUCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZSh0cmFuc2FjdGlvbiwgZG9tYWlu
LCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpWZXJ5SGlnaCk7CisgICAgc2V0UHJldmFsZW50UmVz
b3VyY2UoZG9tYWluLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpWZXJ5SGlnaCk7CiB9CiAKIHZv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnVwZGF0ZURhdGFSZWNvcmRz
UmVtb3ZlZChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluLCBpbnQgdmFsdWUpCkBAIC0z
MTc3LDggKzMwNDksNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjppbmNsdWRlVG9kYXlBc09wZXJhdGluZ0RhdGVJZk5lY2Vzc2FyeQogICAgICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJh
c2UpOwotICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CisgICAgYXV0byB0cmFuc2FjdGlvblNjb3Bl
ID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7CiAKICAgICBpbnQgcm93c1RvUHJ1bmUg
PSBtX29wZXJhdGluZ0RhdGVzU2l6ZSAtIG9wZXJhdGluZ0RhdGVzV2luZG93TG9uZyArIDE7CiAg
ICAgaWYgKHJvd3NUb1BydW5lID4gMCkgewpAQCAtMzIwMiw4ICszMDczLDYgQEAgdm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5jbHVkZVRvZGF5QXNPcGVyYXRpbmdE
YXRlSWZOZWNlc3NhcnkKICAgICB9CiAKICAgICB1cGRhdGVPcGVyYXRpbmdEYXRlc1BhcmFtZXRl
cnMoKTsKLQotICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOwogfQogCiBib29sIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpoYXNTdGF0aXN0aWNzRXhwaXJlZChXYWxsVGltZSBt
b3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSwgT3BlcmF0aW5nRGF0ZXNXaW5kb3cgb3BlcmF0
aW5nRGF0ZXNXaW5kb3cpIGNvbnN0CkBAIC0zMjM4LDggKzMxMDcsNyBAQCB2b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVz
dGluZyhjb25zdAogICAgIC8vIFBvcHVsYXRlIHRoZSBPcGVyYXRpbmcgRGF0ZXMgdGFibGUgd2l0
aCBlbm91Z2ggZGF5cyB0byByZXF1aXJlIHBydW5pbmcuCiAgICAgZG91YmxlIGRheXNBZ29JblNl
Y29uZHMgPSAwOwogCi0gICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9kYXRhYmFz
ZSk7Ci0gICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKKyAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUg
PSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9
IDE7IGkgPD0gbnVtYmVyT2ZPcGVyYXRpbmdEYXlzUGFzc2VkOyBpKyspIHsKICAgICAgICAgZG91
YmxlIGRheXNUb1N1YnRyYWN0ID0gU2Vjb25kczo6ZnJvbUhvdXJzKDI0ICogaSkudmFsdWUoKTsK
QEAgLTMyNjAsOCArMzEyOCw2IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6Omluc2VydEV4cGlyZWRTdGF0aXN0aWNGb3JUZXN0aW5nKGNvbnN0CiAKICAgICB1cGRh
dGVPcGVyYXRpbmdEYXRlc1BhcmFtZXRlcnMoKTsKIAotICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgp
OwotCiAgICAgLy8gTWFrZSBzdXJlIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lIGlzIHRo
ZSBsZWFzdCByZWNlbnQgb2YgYWxsIGVudHJpZXMuCiAgICAgZGF5c0Fnb0luU2Vjb25kcyAtPSBT
ZWNvbmRzOjpmcm9tSG91cnMoMjQpLnZhbHVlKCk7CiAgICAgYXV0byBzY29wZWRJbnNlcnRPYnNl
cnZlZERvbWFpblN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX2luc2VydE9ic2Vy
dmVkRG9tYWluU3RhdGVtZW50LCBpbnNlcnRPYnNlcnZlZERvbWFpblF1ZXJ5LCAiaW5zZXJ0RXhw
aXJlZFN0YXRpc3RpY0ZvclRlc3RpbmciX3MpOwpAQCAtMzM2NCw5ICszMjMwLDcgQEAgc3RkOjpw
YWlyPHN0ZDo6b3B0aW9uYWw8VW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ+LCBz
dGQ6Om9wdGlvbmFsPEF0dHIKIAogdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6aW5zZXJ0UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQoUHJpdmF0ZUNsaWNrTWVhc3VyZW1l
bnQmJiBhdHRyaWJ1dGlvbiwgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRyaWJ1dGlvblR5cGUg
YXR0cmlidXRpb25UeXBlKQogewotICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1f
ZGF0YWJhc2UpOwotICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7Ci0gICAgYXV0byBjb21taXRUcmFu
c2FjdGlvbiA9IG1ha2VTY29wZUV4aXQoWyZ0cmFuc2FjdGlvbl0geyB0cmFuc2FjdGlvbi5jb21t
aXQoKTsgfSk7CisgICAgYXV0byB0cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklm
TmVjZXNzYXJ5KCk7CiAKICAgICBhdXRvIHNvdXJjZURhdGEgPSBlbnN1cmVSZXNvdXJjZVN0YXRp
c3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihhdHRyaWJ1dGlvbi5zb3VyY2VTaXRlKCkucmVnaXN0
cmFibGVEb21haW4pOwogICAgIGF1dG8gYXR0cmlidXRpb25EZXN0aW5hdGlvbkRhdGEgPSBlbnN1
cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihhdHRyaWJ1dGlvbi5kZXN0
aW5hdGlvblNpdGUoKS5yZWdpc3RyYWJsZURvbWFpbik7CkBAIC0zNTUyLDggKzM0MTYsNyBAQCB2
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhclByaXZhdGVDbGlj
a01lYXN1cmVtZW50KHN0ZDo6b3B0aQogICAgICAgICBiaW5kUGFyYW1ldGVyID0gU3RyaW5nOjpu
dW1iZXIoKmRvbWFpbklEVG9NYXRjaCk7CiAgICAgfQogCi0gICAgU1FMaXRlVHJhbnNhY3Rpb24g
dHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7Ci0gICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKKyAgICBh
dXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKIAog
ICAgIGF1dG8gY2xlYXJVbmF0dHJpYnV0ZWRTY29wZWRTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRT
dGF0ZW1lbnQobV9jbGVhclVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50U3RhdGVt
ZW50LCBjbGVhclVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50UXVlcnksICJjbGVh
clByaXZhdGVDbGlja01lYXN1cmVtZW50Il9zKTsKIApAQCAtMzU3NCw4ICszNDM3LDYgQEAgdm9p
ZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJQcml2YXRlQ2xpY2tN
ZWFzdXJlbWVudChzdGQ6Om9wdGkKICAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vz
c2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudCBjbGVhckF0dHJpYnV0ZWRTY29wZWRTdGF0ZW1lbnQsIGVy
cm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0
RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KLQotICAg
IHRyYW5zYWN0aW9uLmNvbW1pdCgpOwogfQogCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjpjbGVhckV4cGlyZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCgpCkBAIC0z
NzcxLDggKzM2MzIsNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjptYXJrQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50cwogewogICAgIGF1dG8gZXhw
aXJlZFRpbWVUb1NlbmQgPSBXYWxsVGltZTo6bm93KCkgLSAxX2g7CiAKLSAgICBTUUxpdGVUcmFu
c2FjdGlvbiB0cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKLSAgICB0cmFuc2FjdGlvbi5iZWdpbigp
OworICAgIGF1dG8gdHJhbnNhY3Rpb25TY29wZSA9IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vzc2Fy
eSgpOwogCiAgICAgYXV0byBlYXJsaWVzdFRpbWVUb1NlbmRUb1NvdXJjZVN0YXRlbWVudCA9IG1f
ZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiVVBEQVRFIEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tN
ZWFzdXJlbWVudCBTRVQgZWFybGllc3RUaW1lVG9TZW5kVG9Tb3VyY2UgPSA/Il9zKTsKICAgICBh
dXRvIGVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb25TdGF0ZW1lbnQgPSBtX2RhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnQoIlVQREFURSBBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1l
bnQgU0VUIGVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb24gPSBudWxsIl9zKTsKQEAgLTM3
ODgsMTAgKzM2NDgsMTcgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6bWFya0F0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudHMKICAgICAgICAgSVRQX1JF
TEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6bWFya0F0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudHNBc0V4
cGlyZWRGb3JUZXN0aW5nLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRo
aXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICB9Cit9CiAKLSAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsKK1Njb3BlRXhpdDxG
dW5jdGlvbjx2b2lkKCk+PiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6YmVn
aW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCkKK3sKKyAgICBpZiAobV90cmFuc2FjdGlvbi5pblBy
b2dyZXNzKCkpCisgICAgICAgIHJldHVybiBtYWtlU2NvcGVFeGl0KEZ1bmN0aW9uPHZvaWQoKT4g
eyBbXSB7IH0gfSk7CiAKLSAgICByZXR1cm47CisgICAgbV90cmFuc2FjdGlvbi5iZWdpbigpOwor
ICAgIHJldHVybiBtYWtlU2NvcGVFeGl0KEZ1bmN0aW9uPHZvaWQoKT4geyBbdGhpc10geworICAg
ICAgICBtX3RyYW5zYWN0aW9uLmNvbW1pdCgpOworICAgIH0gfSk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFz
c2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmggYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmUuaAppbmRleCBhMDVkNDc2YzIyNTQyYzA2MGNhNTEzYzhkMmQ1YmYyNGYxNGYzYzMw
Li5lYTZiNTg3ZDFjZTE3MDNlMDMwOGI3YzFhZGZhOTQ2N2MwODAzMDExIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Ns
YXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuaApAQCAtMzIsOCAr
MzIsMTAgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1NRTGl0ZURhdGFiYXNlLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9TUUxpdGVTdGF0ZW1lbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NRTGl0ZVN0YXRl
bWVudEF1dG9SZXNldFNjb3BlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVUcmFuc2FjdGlv
bi5oPgogI2luY2x1ZGUgPHBhbC9TZXNzaW9uSUQuaD4KICNpbmNsdWRlIDx3dGYvQ29tcGxldGlv
bkhhbmRsZXIuaD4KKyNpbmNsdWRlIDx3dGYvU2NvcGUuaD4KICNpbmNsdWRlIDx3dGYvU3RkU2V0
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUuaD4K
QEAgLTEwOCw3ICsxMTAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRHcmFuZGZhdGhlcmVkKGNv
bnN0IFJlZ2lzdHJhYmxlRG9tYWluJiwgYm9vbCB2YWx1ZSkgb3ZlcnJpZGU7CiAgICAgYm9vbCBp
c0dyYW5kZmF0aGVyZWQoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25zdCBvdmVycmlkZTsK
IAotICAgIHZvaWQgc2V0SXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbChjb25z
dCBXZWJDb3JlOjpTUUxpdGVUcmFuc2FjdGlvbiYsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiwg
Ym9vbCB2YWx1ZSk7CisgICAgdm9pZCBzZXRJc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFS
ZW1vdmFsKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiwgYm9vbCB2YWx1ZSk7CiAgICAgdm9pZCBz
ZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3QgU3ViRnJhbWVEb21haW4mLCBjb25z
dCBUb3BGcmFtZURvbWFpbiYpIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0U3VicmVzb3VyY2VVbmRl
clRvcEZyYW1lRG9tYWluKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiwgY29uc3QgVG9wRnJhbWVE
b21haW4mKSBvdmVycmlkZTsKICAgICB2b2lkIHNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RU
byhjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0RG9tYWluJikgb3ZlcnJp
ZGU7CkBAIC0xNzcsMjMgKzE3OSwxOCBAQCBwcml2YXRlOgogICAgIHZvaWQgZGVzdHJveVN0YXRl
bWVudHMoKTsKICAgICBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSBzY29w
ZWRTdGF0ZW1lbnQoc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4mLCBB
U0NJSUxpdGVyYWwsIGNvbnN0IFN0cmluZyYpIGNvbnN0OwogCi0gICAgYm9vbCBoYXNIYWRVc2Vy
SW50ZXJhY3Rpb24oY29uc3QgV2ViQ29yZTo6U1FMaXRlVHJhbnNhY3Rpb24mLCBjb25zdCBSZWdp
c3RyYWJsZURvbWFpbiYsIE9wZXJhdGluZ0RhdGVzV2luZG93KTsKLSAgICB2b2lkIGNsZWFyVXNl
ckludGVyYWN0aW9uKGNvbnN0IFdlYkNvcmU6OlNRTGl0ZVRyYW5zYWN0aW9uJiwgY29uc3QgUmVn
aXN0cmFibGVEb21haW4mLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwotICAgIHZvaWQg
c2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgV2ViQ29yZTo6U1FMaXRlVHJhbnNhY3Rpb24mLCBj
b25zdCBSZWdpc3RyYWJsZURvbWFpbiYpOwotICAgIHZvaWQgc2V0VmVyeVByZXZhbGVudFJlc291
cmNlKGNvbnN0IFdlYkNvcmU6OlNRTGl0ZVRyYW5zYWN0aW9uJiwgY29uc3QgUmVnaXN0cmFibGVE
b21haW4mKTsKLSAgICB2b2lkIHNldEdyYW5kZmF0aGVyZWQoY29uc3QgV2ViQ29yZTo6U1FMaXRl
VHJhbnNhY3Rpb24mLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYsIGJvb2wgdmFsdWUpOwogICAg
IGJvb2wgaGFzU3RvcmFnZUFjY2Vzcyhjb25zdCBUb3BGcmFtZURvbWFpbiYsIGNvbnN0IFN1YkZy
YW1lRG9tYWluJikgY29uc3Q7CiAgICAgVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6VGhpcmRQYXJ0eURhdGFGb3JTcGVjaWZpY0ZpcnN0UGFydHk+IGdldFRoaXJkUGFydHlE
YXRhRm9yU3BlY2lmaWNGaXJzdFBhcnR5RG9tYWlucyh1bnNpZ25lZCwgY29uc3QgUmVnaXN0cmFi
bGVEb21haW4mKSBjb25zdDsKICAgICB2b2lkIG9wZW5BbmRVcGRhdGVTY2hlbWFJZk5lY2Vzc2Fy
eSgpOwogICAgIFN0cmluZyBnZXREb21haW5TdHJpbmdGcm9tRG9tYWluSUQodW5zaWduZWQpIGNv
bnN0OwogICAgIEFTQ0lJTGl0ZXJhbCBnZXRTdWJTdGF0aXN0aWNTdGF0ZW1lbnQoY29uc3QgU3Ry
aW5nJikgY29uc3Q7CiAgICAgdm9pZCBhcHBlbmRTdWJTdGF0aXN0aWNMaXN0KFN0cmluZ0J1aWxk
ZXImLCBjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSwgY29uc3QgU3RyaW5nJiBkb21haW4pIGNvbnN0
OwotICAgIHZvaWQgbWVyZ2VTdGF0aXN0aWMoY29uc3QgV2ViQ29yZTo6U1FMaXRlVHJhbnNhY3Rp
b24mLCBjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik7Ci0gICAgdm9pZCBtZXJnZShjb25z
dCBXZWJDb3JlOjpTUUxpdGVUcmFuc2FjdGlvbiYsIFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCos
IGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmKTsKKyAgICB2b2lkIG1lcmdlU3RhdGlzdGlj
KGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmKTsKKyAgICB2b2lkIG1lcmdlKFdlYkNvcmU6
OlNRTGl0ZVN0YXRlbWVudCosIGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmKTsKICAgICB2
b2lkIGNsZWFyRGF0YWJhc2VDb250ZW50cygpOwogICAgIGJvb2wgaW5zZXJ0T2JzZXJ2ZWREb21h
aW4oY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpIFdBUk5fVU5VU0VEX1JFVFVSTjsKLSAg
ICB2b2lkIGluc2VydERvbWFpblJlbGF0aW9uc2hpcHMoY29uc3QgV2ViQ29yZTo6U1FMaXRlVHJh
bnNhY3Rpb24mLCBjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik7Ci0gICAgdm9pZCBpbnNl
cnREb21haW5SZWxhdGlvbnNoaXBMaXN0KGNvbnN0IFdlYkNvcmU6OlNRTGl0ZVRyYW5zYWN0aW9u
JiwgY29uc3QgU3RyaW5nJiwgY29uc3QgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4mLCB1bnNp
Z25lZCk7CisgICAgdm9pZCBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBzKGNvbnN0IFJlc291cmNl
TG9hZFN0YXRpc3RpY3MmKTsKKyAgICB2b2lkIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3Qo
Y29uc3QgU3RyaW5nJiwgY29uc3QgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4mLCB1bnNpZ25l
ZCk7CiAgICAgYm9vbCByZWxhdGlvbnNoaXBFeGlzdHMoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50
QXV0b1Jlc2V0U2NvcGUmLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBmaXJzdERvbWFpbklELCBj
b25zdCBSZWdpc3RyYWJsZURvbWFpbiYgc2Vjb25kRG9tYWluKSBjb25zdDsKICAgICBzdGQ6Om9w
dGlvbmFsPHVuc2lnbmVkPiBkb21haW5JRChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIGNvbnN0
OwogICAgIGJvb2wgZG9tYWluRXhpc3RzKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgY29uc3Q7
CkBAIC0yNDAsMTAgKzIzNywxMCBAQCBwcml2YXRlOgogICAgIGJvb2wgYXJlQWxsVGhpcmRQYXJ0
eUNvb2tpZXNCbG9ja2VkVW5kZXIoY29uc3QgVG9wRnJhbWVEb21haW4mKSBvdmVycmlkZTsKICAg
ICBDb29raWVBY2Nlc3MgY29va2llQWNjZXNzKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiwgY29u
c3QgVG9wRnJhbWVEb21haW4mKTsKIAotICAgIHZvaWQgc2V0UHJldmFsZW50UmVzb3VyY2UoY29u
c3QgV2ViQ29yZTo6U1FMaXRlVHJhbnNhY3Rpb24mLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYs
IFJlc291cmNlTG9hZFByZXZhbGVuY2UpOworICAgIHZvaWQgc2V0UHJldmFsZW50UmVzb3VyY2Uo
Y29uc3QgUmVnaXN0cmFibGVEb21haW4mLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlKTsKICAgICB1
bnNpZ25lZCByZWN1cnNpdmVseUZpbmROb25QcmV2YWxlbnREb21haW5zVGhhdFJlZGlyZWN0ZWRU
b1RoaXNEb21haW4odW5zaWduZWQgcHJpbWFyeURvbWFpbklELCBTdGRTZXQ8dW5zaWduZWQ+JiBu
b25QcmV2YWxlbnRSZWRpcmVjdGlvblNvdXJjZXMsIHVuc2lnbmVkIG51bWJlck9mUmVjdXJzaXZl
Q2FsbHMpOwogICAgIHZvaWQgc2V0RG9tYWluc0FzUHJldmFsZW50KFN0ZFNldDx1bnNpZ25lZD4m
Jik7Ci0gICAgdm9pZCBncmFudFN0b3JhZ2VBY2Nlc3NJbnRlcm5hbChjb25zdCBXZWJDb3JlOjpT
UUxpdGVUcmFuc2FjdGlvbiYsIFN1YkZyYW1lRG9tYWluJiYsIFRvcEZyYW1lRG9tYWluJiYsIHN0
ZDo6b3B0aW9uYWw8V2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyPiwgV2ViQ29yZTo6UGFnZUlkZW50
aWZpZXIsIFdlYkNvcmU6OlN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93biwgV2ViQ29yZTo6U3Rv
cmFnZUFjY2Vzc1Njb3BlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6OlN0b3JhZ2VB
Y2Nlc3NXYXNHcmFudGVkKT4mJik7CisgICAgdm9pZCBncmFudFN0b3JhZ2VBY2Nlc3NJbnRlcm5h
bChTdWJGcmFtZURvbWFpbiYmLCBUb3BGcmFtZURvbWFpbiYmLCBzdGQ6Om9wdGlvbmFsPFdlYkNv
cmU6OkZyYW1lSWRlbnRpZmllcj4sIFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyLCBXZWJDb3JlOjpT
dG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hvd24sIFdlYkNvcmU6OlN0b3JhZ2VBY2Nlc3NTY29wZSwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3JlOjpTdG9yYWdlQWNjZXNzV2FzR3JhbnRlZCk+
JiYpOwogICAgIHZvaWQgbWFya0FzUHJldmFsZW50SWZIYXNSZWRpcmVjdGVkVG9QcmV2YWxlbnQo
KTsKICAgICBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IGVuc3VyZVByZXZhbGVudFJlc291cmNl
c0ZvckRlYnVnTW9kZSgpIG92ZXJyaWRlOwogICAgIHZvaWQgcmVtb3ZlRGF0YVJlY29yZHMoQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKQEAgLTI1OCw3ICsyNTUsNyBAQCBwcml2YXRlOgog
CiAgICAgYm9vbCBjcmVhdGVVbmlxdWVJbmRpY2VzKCk7CiAgICAgYm9vbCBjcmVhdGVTY2hlbWEo
KTsKLSAgICBTdHJpbmcgZW5zdXJlQW5kTWFrZURvbWFpbkxpc3QoY29uc3QgV2ViQ29yZTo6U1FM
aXRlVHJhbnNhY3Rpb24mLCBjb25zdCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPiYpOworICAg
IFN0cmluZyBlbnN1cmVBbmRNYWtlRG9tYWluTGlzdChjb25zdCBIYXNoU2V0PFJlZ2lzdHJhYmxl
RG9tYWluPiYpOwogICAgIHN0ZDo6b3B0aW9uYWw8V2FsbFRpbWU+IG1vc3RSZWNlbnRVc2VySW50
ZXJhY3Rpb25UaW1lKGNvbnN0IERvbWFpbkRhdGEmKTsKICAgICAKICAgICB2b2lkIHJlbW92ZVVu
YXR0cmlidXRlZChXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCYpOwpAQCAtMjY2LDgg
KzI2MywxMSBAQCBwcml2YXRlOgogICAgIFN0cmluZyBhdHRyaWJ1dGlvblRvU3RyaW5nKFdlYkNv
cmU6OlNRTGl0ZVN0YXRlbWVudCosIFByaXZhdGVDbGlja01lYXN1cmVtZW50QXR0cmlidXRpb25U
eXBlKTsKICAgICBzdGQ6OnBhaXI8c3RkOjpvcHRpb25hbDxVbmF0dHJpYnV0ZWRQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudD4sIHN0ZDo6b3B0aW9uYWw8QXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1
cmVtZW50Pj4gZmluZFByaXZhdGVDbGlja01lYXN1cmVtZW50KGNvbnN0IFdlYkNvcmU6OlByaXZh
dGVDbGlja01lYXN1cmVtZW50OjpTb3VyY2VTaXRlJiwgY29uc3QgV2ViQ29yZTo6UHJpdmF0ZUNs
aWNrTWVhc3VyZW1lbnQ6OkF0dHJpYnV0aW9uRGVzdGluYXRpb25TaXRlJik7CiAKKyAgICBTY29w
ZUV4aXQ8RnVuY3Rpb248dm9pZCgpPj4gV0FSTl9VTlVTRURfUkVUVVJOIGJlZ2luVHJhbnNhY3Rp
b25JZk5lY2Vzc2FyeSgpOworCiAgICAgY29uc3QgU3RyaW5nIG1fc3RvcmFnZURpcmVjdG9yeVBh
dGg7CiAgICAgbXV0YWJsZSBXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZSBtX2RhdGFiYXNlOworICAg
IG11dGFibGUgV2ViQ29yZTo6U1FMaXRlVHJhbnNhY3Rpb24gbV90cmFuc2FjdGlvbjsKICAgICBt
dXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fb2JzZXJ2
ZWREb21haW5Db3VudFN0YXRlbWVudDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FM
aXRlU3RhdGVtZW50PiBtX2luc2VydE9ic2VydmVkRG9tYWluU3RhdGVtZW50OwogICAgIHN0ZDo6
dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1faW5zZXJ0VG9wTGV2ZWxEb21h
aW5TdGF0ZW1lbnQ7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>