<?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>195074</bug_id>
          
          <creation_ts>2019-02-26 15:54:09 -0800</creation_ts>
          <short_desc>Move ephemeral local storage from WebProcess to UIProcess</short_desc>
          <delta_ts>2019-02-27 10:05:18 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</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="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>cdumez</cc>
    
    <cc>ggaren</cc>
    
    <cc>tsavell</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1510240</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-02-26 15:54:09 -0800</bug_when>
    <thetext>Move ephemeral local storage from WebProcess to UIProcess</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1510243</commentid>
    <comment_count>1</comment_count>
      <attachid>363031</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-02-26 16:02:39 -0800</bug_when>
    <thetext>Created attachment 363031
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1510249</commentid>
    <comment_count>2</comment_count>
      <attachid>363031</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2019-02-26 16:15:39 -0800</bug_when>
    <thetext>Comment on attachment 363031
Patch

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

r=me

&gt; Source/WebKit/UIProcess/WebStorage/StorageManager.h:113
&gt; +    bool m_ephemeral { false };

Let&apos;s call this m_isEphemeral.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1510254</commentid>
    <comment_count>3</comment_count>
      <attachid>363031</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2019-02-26 16:31:26 -0800</bug_when>
    <thetext>Comment on attachment 363031
Patch

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

&gt; Source/WebKit/UIProcess/WebStorage/StorageManager.cpp:705
&gt;  void StorageManager::createTransientLocalStorageMap(IPC::Connection&amp; connection, uint64_t storageMapID, uint64_t storageNamespaceID, SecurityOriginData&amp;&amp; topLevelOriginData, SecurityOriginData&amp;&amp; origin)
&gt;  {
&gt; +    ASSERT(!m_ephemeral);

I think this code path may be reachable for frames subject to ITP or StorageAccess restriction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1510256</commentid>
    <comment_count>4</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2019-02-26 16:31:45 -0800</bug_when>
    <thetext>Probably worth svn blaming that function to find if tests were added for it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1510261</commentid>
    <comment_count>5</comment_count>
      <attachid>363031</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-02-26 16:36:52 -0800</bug_when>
    <thetext>Comment on attachment 363031
Patch

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

&gt;&gt; Source/WebKit/UIProcess/WebStorage/StorageManager.cpp:705
&gt;&gt; +    ASSERT(!m_ephemeral);
&gt; 
&gt; I think this code path may be reachable for frames subject to ITP or StorageAccess restriction.

I added a test that loads a cross-origin iframe and uses localStorage, verified that transient in StorageNamespaceProvider::localStorageArea is true, and verified that this is not hit.  I&apos;ll include that test addition.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1510271</commentid>
    <comment_count>6</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-02-26 16:50:19 -0800</bug_when>
    <thetext>JK, the test verified that it *is* hit.  I&apos;m removing the assertion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1510272</commentid>
    <comment_count>7</comment_count>
      <attachid>363039</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-02-26 16:51:10 -0800</bug_when>
    <thetext>Created attachment 363039
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1510284</commentid>
    <comment_count>8</comment_count>
      <attachid>363041</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-02-26 17:19:17 -0800</bug_when>
    <thetext>Created attachment 363041
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1510322</commentid>
    <comment_count>9</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2019-02-26 18:59:57 -0800</bug_when>
    <thetext>The assertion no longer fires, which is nice. But do we need to update createTransientLocalStorageMap to do something useful for transient storage?

Also, same comment about m_isEphemeral.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1510345</commentid>
    <comment_count>10</comment_count>
      <attachid>363041</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-02-26 20:37:01 -0800</bug_when>
    <thetext>Comment on attachment 363041
Patch

Transient storage is already transient, so it doesn&apos;t matter if it&apos;s ephemeral or not, it&apos;s always ephemeral.  I moved the use of m_ephemeralStorage to after the calls to findStorageArea found nothing to not change transient behavior.  I&apos;ll replace m_ephemeral with m_isEphemeral when I commit it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1510346</commentid>
    <comment_count>11</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-02-26 20:41:04 -0800</bug_when>
    <thetext>http://trac.webkit.org/r242122</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1510348</commentid>
    <comment_count>12</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-02-26 20:42:22 -0800</bug_when>
    <thetext>&lt;rdar://problem/48426546&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1510442</commentid>
    <comment_count>13</comment_count>
    <who name="Truitt Savell">tsavell</who>
    <bug_when>2019-02-27 08:28:21 -0800</bug_when>
    <thetext>It appears that the changes in https://trac.webkit.org/changeset/242122/webkit

Broke an API test on debug:

Failed

    TestWebKitAPI.WKWebView.InitializingWebViewWithEphemeralStorageDoesNotLog
        Saw unexpected logging: &apos;ERROR: Unable to create LocalStorage database path 
        &apos;
        
        /Volumes/Data/slave/mojave-debug/build/Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebViewDoesNotLogDuringInitialization.mm:57
        Failed

build:
https://build.webkit.org/builders/Apple%20Mojave%20Debug%20WK1%20%28Tests%29/builds/2305</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1510472</commentid>
    <comment_count>14</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-02-27 10:05:18 -0800</bug_when>
    <thetext>http://trac.webkit.org/r242131</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>363031</attachid>
            <date>2019-02-26 16:02:39 -0800</date>
            <delta_ts>2019-02-26 16:51:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-195074-20190226160238.patch</filename>
            <type>text/plain</type>
            <size>27182</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNDE5NjYpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ0IEBACisyMDE5LTAyLTI2ICBBbGV4IENocmlz
dGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBlcGhlbWVy
YWwgbG9jYWwgc3RvcmFnZSBmcm9tIFdlYlByb2Nlc3MgdG8gVUlQcm9jZXNzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTUwNzQKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzQ3OTM3OTc1PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEJlZm9yZSBQU09OLCBhIHBhZ2UgY291bGQgbmF2aWdhdGUgdG8gYW5v
dGhlciBkb21haW4gdGhhdCBuYXZpZ2F0ZXMgYmFjayBhbmQgc3RpbGwgaGF2ZSBpdHMgbG9jYWwg
c3RvcmFnZS4KKyAgICAgICAgU2luY2UgUFNPTiBtYWtlcyBpdCB1bnJlbGlhYmxlIHRvIHJldGFp
biB0aGUgc3RhdGUgaW4gdGhlIFdlYlByb2Nlc3MsIG1vdmUgaXQgdG8gdGhlIHByb2Nlc3Mgd2l0
aCB0aGUgcmVzdCBvZiB0aGUgbG9jYWwgc3RvcmFnZS4KKyAgICAgICAgSWYgaXQncyBlcGhlbWVy
YWwsIHdlIG9idmlvdXNseSBjYW4ndCB1c2UgdGhlIFNRTGl0ZSBvbi1kaXNrIHN0b3JhZ2UgaW1w
bGVtZW50YXRpb24sIHNvIHVzZSB0aGUgc2FtZSBXZWJDb3JlOjpTdG9yYWdlTWFwIHdlIHVzZWQg
dG8gaW4gdGhlIFdlYlByb2Nlc3MuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViU3RvcmFnZS9T
dG9yYWdlTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpMb2Nh
bFN0b3JhZ2VOYW1lc3BhY2U6OkxvY2FsU3RvcmFnZU5hbWVzcGFjZSk6CisgICAgICAgIChXZWJL
aXQ6OlN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlTWFuYWdlcik6CisgICAgICAgIChXZWJLaXQ6OlN0
b3JhZ2VNYW5hZ2VyOjpjcmVhdGVMb2NhbFN0b3JhZ2VNYXApOgorICAgICAgICAoV2ViS2l0OjpT
dG9yYWdlTWFuYWdlcjo6Y3JlYXRlVHJhbnNpZW50TG9jYWxTdG9yYWdlTWFwKToKKyAgICAgICAg
KFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OmNyZWF0ZVNlc3Npb25TdG9yYWdlTWFwKToKKyAgICAg
ICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OmRlc3Ryb3lTdG9yYWdlTWFwKToKKyAgICAgICAg
KFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OmdldFZhbHVlcyk6CisgICAgICAgIChXZWJLaXQ6OlN0
b3JhZ2VNYW5hZ2VyOjpzZXRJdGVtKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6
OnJlbW92ZUl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6Y2xlYXIpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmg6CisgICAgICAg
ICogVUlQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXIubWVzc2FnZXMuaW46CisgICAg
ICAgICogVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpXZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZUFyZWFNYXAuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpTdG9yYWdlQXJlYU1hcDo6U3RvcmFnZUFyZWFNYXApOgorICAgICAgICAoV2ViS2l0OjpT
dG9yYWdlQXJlYU1hcDo6c2V0SXRlbSk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhTWFw
OjpyZW1vdmVJdGVtKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWFNYXA6OmNsZWFyKToK
KyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWFNYXA6OmxvYWRWYWx1ZXNJZk5lZWRlZCk6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU5hbWVzcGFjZUltcGw6OmNyZWF0ZUVwaGVtZXJhbExv
Y2FsU3RvcmFnZU5hbWVzcGFjZSk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VOYW1lc3BhY2VJ
bXBsOjpzdG9yYWdlQXJlYSk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VOYW1lc3BhY2VJbXBs
Ojpjb3B5KToKKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VO
YW1lc3BhY2VJbXBsOjplcGhlbWVyYWxMb2NhbFN0b3JhZ2VBcmVhKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuaDoKKwogMjAx
OS0wMi0yMiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFJlZ3Jl
c3Npb24oUFNPTikgVW5hYmxlIHRvIHByZXZpZXcgcGFzc3dvcmQtcHJvdGVjdGVkIGRvY3VtZW50
cyBvbiBpQ2xvdWQuY29tCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJTdG9yYWdl
L1N0b3JhZ2VNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmNwcAkocmV2aXNpb24gMjQxOTYyKQorKysgU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwNyw2ICsxMDcsOSBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8U2VjdXJp
dHlPcmlnaW5EYXRhLCBTdG9yYWdlQXJlYSo+IG1fc3RvcmFnZUFyZWFNYXA7CiB9OwogCisvLyBT
dWdnZXN0ZWQgYnkgaHR0cHM6Ly93d3cudzMub3JnL1RSL3dlYnN0b3JhZ2UvI2Rpc2stc3BhY2UK
K2NvbnN0IHVuc2lnbmVkIGxvY2FsU3RvcmFnZURhdGFiYXNlUXVvdGFJbkJ5dGVzID0gNSAqIDEw
MjQgKiAxMDI0OworCiBjbGFzcyBTdG9yYWdlTWFuYWdlcjo6VHJhbnNpZW50TG9jYWxTdG9yYWdl
TmFtZXNwYWNlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFRyYW5zaWVudExvY2FsU3Rv
cmFnZU5hbWVzcGFjZT4gewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8VHJhbnNpZW50TG9jYWxT
dG9yYWdlTmFtZXNwYWNlPiBjcmVhdGUoKQpAQCAtMTU2LDcgKzE1OSw3IEBAIHByaXZhdGU6CiAg
ICAgewogICAgIH0KIAotICAgIGNvbnN0IHVuc2lnbmVkIG1fcXVvdGFJbkJ5dGVzID0gNSAqIDEw
MjQgKiAxMDI0OworICAgIGNvbnN0IHVuc2lnbmVkIG1fcXVvdGFJbkJ5dGVzID0gbG9jYWxTdG9y
YWdlRGF0YWJhc2VRdW90YUluQnl0ZXM7CiAKICAgICBIYXNoTWFwPFNlY3VyaXR5T3JpZ2luRGF0
YSwgUmVmUHRyPFN0b3JhZ2VBcmVhPj4gbV9zdG9yYWdlQXJlYU1hcDsKIH07CkBAIC0zMjYsNyAr
MzI5LDcgQEAgUmVmPFN0b3JhZ2VNYW5hZ2VyOjpMb2NhbFN0b3JhZ2VOYW1lc3BhYwogU3RvcmFn
ZU1hbmFnZXI6OkxvY2FsU3RvcmFnZU5hbWVzcGFjZTo6TG9jYWxTdG9yYWdlTmFtZXNwYWNlKFN0
b3JhZ2VNYW5hZ2VyKiBzdG9yYWdlTWFuYWdlciwgdWludDY0X3Qgc3RvcmFnZU5hbWVzcGFjZUlE
KQogICAgIDogbV9zdG9yYWdlTWFuYWdlcihzdG9yYWdlTWFuYWdlcikKICAgICAsIG1fc3RvcmFn
ZU5hbWVzcGFjZUlEKHN0b3JhZ2VOYW1lc3BhY2VJRCkKLSAgICAsIG1fcXVvdGFJbkJ5dGVzKDUg
KiAxMDI0ICogMTAyNCkKKyAgICAsIG1fcXVvdGFJbkJ5dGVzKGxvY2FsU3RvcmFnZURhdGFiYXNl
UXVvdGFJbkJ5dGVzKQogewogfQogCkBAIC00NjQsNiArNDY3LDcgQEAgUmVmPFN0b3JhZ2VNYW5h
Z2VyPiBTdG9yYWdlTWFuYWdlcjo6Y3JlYQogU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VNYW5hZ2Vy
KGNvbnN0IFN0cmluZyYgbG9jYWxTdG9yYWdlRGlyZWN0b3J5KQogICAgIDogbV9xdWV1ZShXb3Jr
UXVldWU6OmNyZWF0ZSgiY29tLmFwcGxlLldlYktpdC5TdG9yYWdlTWFuYWdlciIpKQogICAgICwg
bV9sb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIoTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2Vy
OjpjcmVhdGUobV9xdWV1ZS5jb3B5UmVmKCksIGxvY2FsU3RvcmFnZURpcmVjdG9yeSkpCisgICAg
LCBtX2VwaGVtZXJhbChsb2NhbFN0b3JhZ2VEaXJlY3RvcnkuaXNOdWxsKCkpCiB7CiAgICAgLy8g
TWFrZSBzdXJlIHRoZSBlbmNvZGluZyBpcyBpbml0aWFsaXplZCBiZWZvcmUgd2Ugc3RhcnQgZGlz
cGF0Y2hpbmcgdGhpbmdzIHRvIHRoZSBxdWV1ZS4KICAgICBVVEY4RW5jb2RpbmcoKTsKQEAgLTY3
Myw2ICs2NzcsNyBAQCB2b2lkIFN0b3JhZ2VNYW5hZ2VyOjpkZWxldGVMb2NhbFN0b3JhZ2VFCiAK
IHZvaWQgU3RvcmFnZU1hbmFnZXI6OmNyZWF0ZUxvY2FsU3RvcmFnZU1hcChJUEM6OkNvbm5lY3Rp
b24mIGNvbm5lY3Rpb24sIHVpbnQ2NF90IHN0b3JhZ2VNYXBJRCwgdWludDY0X3Qgc3RvcmFnZU5h
bWVzcGFjZUlELCBTZWN1cml0eU9yaWdpbkRhdGEmJiBzZWN1cml0eU9yaWdpbkRhdGEpCiB7Cisg
ICAgQVNTRVJUKCFtX2VwaGVtZXJhbCk7CiAgICAgc3RkOjpwYWlyPElQQzo6Q29ubmVjdGlvbjo6
VW5pcXVlSUQsIHVpbnQ2NF90PiBjb25uZWN0aW9uQW5kU3RvcmFnZU1hcElEUGFpcihjb25uZWN0
aW9uLnVuaXF1ZUlEKCksIHN0b3JhZ2VNYXBJRCk7CiAKICAgICAvLyBGSVhNRTogVGhpcyBzaG91
bGQgYmUgYSBtZXNzYWdlIGNoZWNrLgpAQCAtNjk3LDYgKzcwMiw3IEBAIHZvaWQgU3RvcmFnZU1h
bmFnZXI6OmNyZWF0ZUxvY2FsU3RvcmFnZU0KIAogdm9pZCBTdG9yYWdlTWFuYWdlcjo6Y3JlYXRl
VHJhbnNpZW50TG9jYWxTdG9yYWdlTWFwKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgdWlu
dDY0X3Qgc3RvcmFnZU1hcElELCB1aW50NjRfdCBzdG9yYWdlTmFtZXNwYWNlSUQsIFNlY3VyaXR5
T3JpZ2luRGF0YSYmIHRvcExldmVsT3JpZ2luRGF0YSwgU2VjdXJpdHlPcmlnaW5EYXRhJiYgb3Jp
Z2luKQogeworICAgIEFTU0VSVCghbV9lcGhlbWVyYWwpOwogICAgIC8vIEZJWE1FOiBUaGlzIHNo
b3VsZCBiZSBhIG1lc3NhZ2UgY2hlY2suCiAgICAgQVNTRVJUKG1fc3RvcmFnZUFyZWFzQnlDb25u
ZWN0aW9uLmlzVmFsaWRLZXkoeyBjb25uZWN0aW9uLnVuaXF1ZUlEKCksIHN0b3JhZ2VNYXBJRCB9
KSk7CiAKQEAgLTczNiw2ICs3NDIsMTAgQEAgdm9pZCBTdG9yYWdlTWFuYWdlcjo6Y3JlYXRlVHJh
bnNpZW50TG9jYQogCiB2b2lkIFN0b3JhZ2VNYW5hZ2VyOjpjcmVhdGVTZXNzaW9uU3RvcmFnZU1h
cChJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIHVpbnQ2NF90IHN0b3JhZ2VNYXBJRCwgdWlu
dDY0X3Qgc3RvcmFnZU5hbWVzcGFjZUlELCBTZWN1cml0eU9yaWdpbkRhdGEmJiBzZWN1cml0eU9y
aWdpbkRhdGEpCiB7CisgICAgaWYgKG1fZXBoZW1lcmFsKSB7CisgICAgICAgIG1fZXBoZW1lcmFs
U3RvcmFnZS5hZGQoc2VjdXJpdHlPcmlnaW5EYXRhLCBXZWJDb3JlOjpTdG9yYWdlTWFwOjpjcmVh
dGUobG9jYWxTdG9yYWdlRGF0YWJhc2VRdW90YUluQnl0ZXMpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBtZXNzYWdlIGNoZWNrLgogICAg
IEFTU0VSVChtX3Nlc3Npb25TdG9yYWdlTmFtZXNwYWNlcy5pc1ZhbGlkS2V5KHN0b3JhZ2VOYW1l
c3BhY2VJRCkpOwogCkBAIC03NjUsNiArNzc1LDEwIEBAIHZvaWQgU3RvcmFnZU1hbmFnZXI6OmNy
ZWF0ZVNlc3Npb25TdG9yYWcKIAogdm9pZCBTdG9yYWdlTWFuYWdlcjo6ZGVzdHJveVN0b3JhZ2VN
YXAoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCB1aW50NjRfdCBzdG9yYWdlTWFwSUQpCiB7
CisgICAgaWYgKG1fZXBoZW1lcmFsKSB7CisgICAgICAgIC8vIFdlIG5lZWQgdG8ga2VlcCB0aGlz
IGRhdGEgaW4gbWVtb3J5IGluIGNhc2UgdGhlcmUgaXMgYSBmdXR1cmUgY29ubmVjdGlvbiB0aGF0
IGhhcyBhY2Nlc3MgdG8gaXQuCisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgc3RkOjpwYWly
PElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQsIHVpbnQ2NF90PiBjb25uZWN0aW9uQW5kU3RvcmFn
ZU1hcElEUGFpcihjb25uZWN0aW9uLnVuaXF1ZUlEKCksIHN0b3JhZ2VNYXBJRCk7CiAKICAgICAv
LyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBtZXNzYWdlIGNoZWNrLgpAQCAtNzg1LDggKzc5OSwx
NiBAQCB2b2lkIFN0b3JhZ2VNYW5hZ2VyOjpkZXN0cm95U3RvcmFnZU1hcChJCiAgICAgbV9zdG9y
YWdlQXJlYXNCeUNvbm5lY3Rpb24ucmVtb3ZlKGNvbm5lY3Rpb25BbmRTdG9yYWdlTWFwSURQYWly
KTsKIH0KIAotdm9pZCBTdG9yYWdlTWFuYWdlcjo6Z2V0VmFsdWVzKElQQzo6Q29ubmVjdGlvbiYg
Y29ubmVjdGlvbiwgdWludDY0X3Qgc3RvcmFnZU1hcElELCB1aW50NjRfdCBzdG9yYWdlTWFwU2Vl
ZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBTdG9yYWdlTWFuYWdlcjo6Z2V0VmFsdWVzKElQ
Qzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiYg
c2VjdXJpdHlPcmlnaW5EYXRhLCB1aW50NjRfdCBzdG9yYWdlTWFwSUQsIHVpbnQ2NF90IHN0b3Jh
Z2VNYXBTZWVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBT
dHJpbmc+Jik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CisgICAgaWYgKG1fZXBoZW1lcmFsKSB7
CisgICAgICAgIGlmIChhdXRvIHN0b3JhZ2VNYXAgPSBtX2VwaGVtZXJhbFN0b3JhZ2UuZ2V0KHNl
Y3VyaXR5T3JpZ2luRGF0YSkpCisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihzdG9yYWdl
TWFwLT5pdGVtcygpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoeyB9KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIFN0b3JhZ2VBcmVhKiBzdG9y
YWdlQXJlYSA9IGZpbmRTdG9yYWdlQXJlYShjb25uZWN0aW9uLCBzdG9yYWdlTWFwSUQpOwogICAg
IGlmICghc3RvcmFnZUFyZWEpIHsKICAgICAgICAgLy8gVGhpcyBpcyBhIHNlc3Npb24gc3RvcmFn
ZSBhcmVhIGZvciBhIHBhZ2UgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZC4gSWdub3JlIGl0
LgpAQCAtNzk3LDggKzgxOSwxNyBAQCB2b2lkIFN0b3JhZ2VNYW5hZ2VyOjpnZXRWYWx1ZXMoSVBD
OjpDb25uCiAgICAgY29ubmVjdGlvbi5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdlQXJlYU1hcDo6RGlk
R2V0VmFsdWVzKHN0b3JhZ2VNYXBTZWVkKSwgc3RvcmFnZU1hcElEKTsKIH0KIAotdm9pZCBTdG9y
YWdlTWFuYWdlcjo6c2V0SXRlbShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIHVpbnQ2NF90
IHN0b3JhZ2VNYXBJRCwgdWludDY0X3Qgc291cmNlU3RvcmFnZUFyZWFJRCwgdWludDY0X3Qgc3Rv
cmFnZU1hcFNlZWQsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBjb25z
dCBTdHJpbmcmIHVybFN0cmluZykKK3ZvaWQgU3RvcmFnZU1hbmFnZXI6OnNldEl0ZW0oSVBDOjpD
b25uZWN0aW9uJiBjb25uZWN0aW9uLCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmJiBzZWN1
cml0eU9yaWdpbkRhdGEsIHVpbnQ2NF90IHN0b3JhZ2VNYXBJRCwgdWludDY0X3Qgc291cmNlU3Rv
cmFnZUFyZWFJRCwgdWludDY0X3Qgc3RvcmFnZU1hcFNlZWQsIGNvbnN0IFN0cmluZyYga2V5LCBj
b25zdCBTdHJpbmcmIHZhbHVlLCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykKIHsKKyAgICBpZiAo
bV9lcGhlbWVyYWwpIHsKKyAgICAgICAgaWYgKGF1dG8gc3RvcmFnZU1hcCA9IG1fZXBoZW1lcmFs
U3RvcmFnZS5nZXQoc2VjdXJpdHlPcmlnaW5EYXRhKSkgeworICAgICAgICAgICAgU3RyaW5nIG9s
ZFZhbHVlOworICAgICAgICAgICAgYm9vbCBxdW90YUV4Y2VwdGlvbjsKKyAgICAgICAgICAgIHN0
b3JhZ2VNYXAtPnNldEl0ZW0oa2V5LCB2YWx1ZSwgb2xkVmFsdWUsIHF1b3RhRXhjZXB0aW9uKTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgU3RvcmFnZUFyZWEqIHN0
b3JhZ2VBcmVhID0gZmluZFN0b3JhZ2VBcmVhKGNvbm5lY3Rpb24sIHN0b3JhZ2VNYXBJRCk7CiAg
ICAgaWYgKCFzdG9yYWdlQXJlYSkgewogICAgICAgICAvLyBUaGlzIGlzIGEgc2Vzc2lvbiBzdG9y
YWdlIGFyZWEgZm9yIGEgcGFnZSB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gY2xvc2VkLiBJZ25vcmUg
aXQuCkBAIC04MTAsOCArODQxLDE2IEBAIHZvaWQgU3RvcmFnZU1hbmFnZXI6OnNldEl0ZW0oSVBD
OjpDb25uZWMKICAgICBjb25uZWN0aW9uLnNlbmQoTWVzc2FnZXM6OlN0b3JhZ2VBcmVhTWFwOjpE
aWRTZXRJdGVtKHN0b3JhZ2VNYXBTZWVkLCBrZXksIHF1b3RhRXJyb3IpLCBzdG9yYWdlTWFwSUQp
OwogfQogCi12b2lkIFN0b3JhZ2VNYW5hZ2VyOjpyZW1vdmVJdGVtKElQQzo6Q29ubmVjdGlvbiYg
Y29ubmVjdGlvbiwgdWludDY0X3Qgc3RvcmFnZU1hcElELCB1aW50NjRfdCBzb3VyY2VTdG9yYWdl
QXJlYUlELCB1aW50NjRfdCBzdG9yYWdlTWFwU2VlZCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0
IFN0cmluZyYgdXJsU3RyaW5nKQordm9pZCBTdG9yYWdlTWFuYWdlcjo6cmVtb3ZlSXRlbShJUEM6
OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYmIHNl
Y3VyaXR5T3JpZ2luRGF0YSwgdWludDY0X3Qgc3RvcmFnZU1hcElELCB1aW50NjRfdCBzb3VyY2VT
dG9yYWdlQXJlYUlELCB1aW50NjRfdCBzdG9yYWdlTWFwU2VlZCwgY29uc3QgU3RyaW5nJiBrZXks
IGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQogeworICAgIGlmIChtX2VwaGVtZXJhbCkgeworICAg
ICAgICBpZiAoYXV0byBzdG9yYWdlTWFwID0gbV9lcGhlbWVyYWxTdG9yYWdlLmdldChzZWN1cml0
eU9yaWdpbkRhdGEpKSB7CisgICAgICAgICAgICBTdHJpbmcgb2xkVmFsdWU7CisgICAgICAgICAg
ICBzdG9yYWdlTWFwLT5yZW1vdmVJdGVtKGtleSwgb2xkVmFsdWUpOworICAgICAgICB9CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKICAgICBTdG9yYWdlQXJlYSogc3RvcmFnZUFyZWEgPSBmaW5k
U3RvcmFnZUFyZWEoY29ubmVjdGlvbiwgc3RvcmFnZU1hcElEKTsKICAgICBpZiAoIXN0b3JhZ2VB
cmVhKSB7CiAgICAgICAgIC8vIFRoaXMgaXMgYSBzZXNzaW9uIHN0b3JhZ2UgYXJlYSBmb3IgYSBw
YWdlIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBjbG9zZWQuIElnbm9yZSBpdC4KQEAgLTgyMiw4ICs4
NjEsMTMgQEAgdm9pZCBTdG9yYWdlTWFuYWdlcjo6cmVtb3ZlSXRlbShJUEM6OkNvbgogICAgIGNv
bm5lY3Rpb24uc2VuZChNZXNzYWdlczo6U3RvcmFnZUFyZWFNYXA6OkRpZFJlbW92ZUl0ZW0oc3Rv
cmFnZU1hcFNlZWQsIGtleSksIHN0b3JhZ2VNYXBJRCk7CiB9CiAKLXZvaWQgU3RvcmFnZU1hbmFn
ZXI6OmNsZWFyKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgdWludDY0X3Qgc3RvcmFnZU1h
cElELCB1aW50NjRfdCBzb3VyY2VTdG9yYWdlQXJlYUlELCB1aW50NjRfdCBzdG9yYWdlTWFwU2Vl
ZCwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpCit2b2lkIFN0b3JhZ2VNYW5hZ2VyOjpjbGVhcihJ
UEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYm
IHNlY3VyaXR5T3JpZ2luRGF0YSwgdWludDY0X3Qgc3RvcmFnZU1hcElELCB1aW50NjRfdCBzb3Vy
Y2VTdG9yYWdlQXJlYUlELCB1aW50NjRfdCBzdG9yYWdlTWFwU2VlZCwgY29uc3QgU3RyaW5nJiB1
cmxTdHJpbmcpCiB7CisgICAgaWYgKG1fZXBoZW1lcmFsKSB7CisgICAgICAgIG1fZXBoZW1lcmFs
U3RvcmFnZS5yZW1vdmUoc2VjdXJpdHlPcmlnaW5EYXRhKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKwogICAgIFN0b3JhZ2VBcmVhKiBzdG9yYWdlQXJlYSA9IGZpbmRTdG9yYWdlQXJlYShjb25u
ZWN0aW9uLCBzdG9yYWdlTWFwSUQpOwogICAgIGlmICghc3RvcmFnZUFyZWEpIHsKICAgICAgICAg
Ly8gVGhpcyBpcyBhIHNlc3Npb24gc3RvcmFnZSBhcmVhIGZvciBhIHBhZ2UgdGhhdCBoYXMgYWxy
ZWFkeSBiZWVuIGNsb3NlZC4gSWdub3JlIGl0LgpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXIuaAkocmV2aXNpb24gMjQxOTYy
KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw4IEBACiAKICNpbmNsdWRlICJDb25uZWN0aW9u
LmgiCiAjaW5jbHVkZSAiTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyLmgiCisjaW5jbHVkZSA8
V2ViQ29yZS9TZWN1cml0eU9yaWdpbkRhdGEuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1N0b3JhZ2VN
YXAuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5o
PgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CkBAIC04MSwxMCArODMsMTAgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIGNyZWF0ZVNlc3Npb25TdG9yYWdlTWFwKElQQzo6Q29ubmVjdGlvbiYsIHVpbnQ2
NF90IHN0b3JhZ2VNYXBJRCwgdWludDY0X3Qgc3RvcmFnZU5hbWVzcGFjZUlELCBXZWJDb3JlOjpT
ZWN1cml0eU9yaWdpbkRhdGEmJik7CiAgICAgdm9pZCBkZXN0cm95U3RvcmFnZU1hcChJUEM6OkNv
bm5lY3Rpb24mLCB1aW50NjRfdCBzdG9yYWdlTWFwSUQpOwogCi0gICAgdm9pZCBnZXRWYWx1ZXMo
SVBDOjpDb25uZWN0aW9uJiwgdWludDY0X3Qgc3RvcmFnZU1hcElELCB1aW50NjRfdCBzdG9yYWdl
TWFwU2VlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBIYXNoTWFwPFN0cmluZywgU3Ry
aW5nPiYpPiYmKTsKLSAgICB2b2lkIHNldEl0ZW0oSVBDOjpDb25uZWN0aW9uJiwgdWludDY0X3Qg
c3RvcmFnZUFyZWFJRCwgdWludDY0X3Qgc291cmNlU3RvcmFnZUFyZWFJRCwgdWludDY0X3Qgc3Rv
cmFnZU1hcFNlZWQsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBjb25z
dCBTdHJpbmcmIHVybFN0cmluZyk7Ci0gICAgdm9pZCByZW1vdmVJdGVtKElQQzo6Q29ubmVjdGlv
biYsIHVpbnQ2NF90IHN0b3JhZ2VNYXBJRCwgdWludDY0X3Qgc291cmNlU3RvcmFnZUFyZWFJRCwg
dWludDY0X3Qgc3RvcmFnZU1hcFNlZWQsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcm
IHVybFN0cmluZyk7Ci0gICAgdm9pZCBjbGVhcihJUEM6OkNvbm5lY3Rpb24mLCB1aW50NjRfdCBz
dG9yYWdlTWFwSUQsIHVpbnQ2NF90IHNvdXJjZVN0b3JhZ2VBcmVhSUQsIHVpbnQ2NF90IHN0b3Jh
Z2VNYXBTZWVkLCBjb25zdCBTdHJpbmcmIHVybFN0cmluZyk7CisgICAgdm9pZCBnZXRWYWx1ZXMo
SVBDOjpDb25uZWN0aW9uJiwgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiYsIHVpbnQ2NF90
IHN0b3JhZ2VNYXBJRCwgdWludDY0X3Qgc3RvcmFnZU1hcFNlZWQsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mKT4mJik7CisgICAgdm9pZCBzZXRJ
dGVtKElQQzo6Q29ubmVjdGlvbiYsIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYmLCB1aW50
NjRfdCBzdG9yYWdlQXJlYUlELCB1aW50NjRfdCBzb3VyY2VTdG9yYWdlQXJlYUlELCB1aW50NjRf
dCBzdG9yYWdlTWFwU2VlZCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUs
IGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKTsKKyAgICB2b2lkIHJlbW92ZUl0ZW0oSVBDOjpDb25u
ZWN0aW9uJiwgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiYsIHVpbnQ2NF90IHN0b3JhZ2VN
YXBJRCwgdWludDY0X3Qgc291cmNlU3RvcmFnZUFyZWFJRCwgdWludDY0X3Qgc3RvcmFnZU1hcFNl
ZWQsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHVybFN0cmluZyk7CisgICAgdm9p
ZCBjbGVhcihJUEM6OkNvbm5lY3Rpb24mLCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmJiwg
dWludDY0X3Qgc3RvcmFnZU1hcElELCB1aW50NjRfdCBzb3VyY2VTdG9yYWdlQXJlYUlELCB1aW50
NjRfdCBzdG9yYWdlTWFwU2VlZCwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpOwogCiAgICAgY2xh
c3MgU3RvcmFnZUFyZWE7CiAgICAgU3RvcmFnZUFyZWEqIGZpbmRTdG9yYWdlQXJlYShJUEM6OkNv
bm5lY3Rpb24mLCB1aW50NjRfdCkgY29uc3Q7CkBAIC0xMDYsNiArMTA4LDkgQEAgcHJpdmF0ZToK
ICAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8U2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2U+PiBt
X3Nlc3Npb25TdG9yYWdlTmFtZXNwYWNlczsKIAogICAgIEhhc2hNYXA8c3RkOjpwYWlyPElQQzo6
Q29ubmVjdGlvbjo6VW5pcXVlSUQsIHVpbnQ2NF90PiwgUmVmUHRyPFN0b3JhZ2VBcmVhPj4gbV9z
dG9yYWdlQXJlYXNCeUNvbm5lY3Rpb247CisKKyAgICBIYXNoTWFwPFdlYkNvcmU6OlNlY3VyaXR5
T3JpZ2luRGF0YSwgUmVmPFdlYkNvcmU6OlN0b3JhZ2VNYXA+PiBtX2VwaGVtZXJhbFN0b3JhZ2U7
CisgICAgYm9vbCBtX2VwaGVtZXJhbCB7IGZhbHNlIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU1h
bmFnZXIubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5tZXNzYWdlcy5pbgkocmV2aXNpb24gMjQxOTYyKQor
KysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5tZXNz
YWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtMjYsOSArMjYsOSBAQCBtZXNzYWdlcyAtPiBTdG9y
YWdlTWFuYWdlciB7CiAgICAgQ3JlYXRlU2Vzc2lvblN0b3JhZ2VNYXAodWludDY0X3Qgc3RvcmFn
ZU1hcElELCB1aW50NjRfdCBzdG9yYWdlTmFtZXNwYWNlSUQsIHN0cnVjdCBXZWJDb3JlOjpTZWN1
cml0eU9yaWdpbkRhdGEgc2VjdXJpdHlPcmlnaW5EYXRhKSBXYW50c0Nvbm5lY3Rpb24KICAgICBE
ZXN0cm95U3RvcmFnZU1hcCh1aW50NjRfdCBzdG9yYWdlTWFwSUQpIFdhbnRzQ29ubmVjdGlvbgog
Ci0gICAgR2V0VmFsdWVzKHVpbnQ2NF90IHN0b3JhZ2VNYXBJRCwgdWludDY0X3Qgc3RvcmFnZU1h
cFNlZWQpIC0+IChIYXNoTWFwPFN0cmluZywgU3RyaW5nPiB2YWx1ZXMpIERlbGF5ZWQgV2FudHND
b25uZWN0aW9uCisgICAgR2V0VmFsdWVzKHN0cnVjdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRh
dGEgc2VjdXJpdHlPcmlnaW5EYXRhLCB1aW50NjRfdCBzdG9yYWdlTWFwSUQsIHVpbnQ2NF90IHN0
b3JhZ2VNYXBTZWVkKSAtPiAoSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gdmFsdWVzKSBEZWxheWVk
IFdhbnRzQ29ubmVjdGlvbgogCi0gICAgU2V0SXRlbSh1aW50NjRfdCBzdG9yYWdlTWFwSUQsIHVp
bnQ2NF90IHNvdXJjZVN0b3JhZ2VBcmVhSUQsIHVpbnQ2NF90IHN0b3JhZ2VNYXBTZWVkLCBTdHJp
bmcga2V5LCBTdHJpbmcgdmFsdWUsIFN0cmluZyB1cmxTdHJpbmcpIFdhbnRzQ29ubmVjdGlvbgot
ICAgIFJlbW92ZUl0ZW0odWludDY0X3Qgc3RvcmFnZU1hcElELCB1aW50NjRfdCBzb3VyY2VTdG9y
YWdlQXJlYUlELCB1aW50NjRfdCBzdG9yYWdlTWFwU2VlZCwgU3RyaW5nIGtleSwgU3RyaW5nIHVy
bFN0cmluZykgV2FudHNDb25uZWN0aW9uCi0gICAgQ2xlYXIodWludDY0X3Qgc3RvcmFnZU1hcElE
LCB1aW50NjRfdCBzb3VyY2VTdG9yYWdlQXJlYUlELCB1aW50NjRfdCBzdG9yYWdlTWFwU2VlZCwg
U3RyaW5nIHVybFN0cmluZykgV2FudHNDb25uZWN0aW9uCisgICAgU2V0SXRlbShzdHJ1Y3QgV2Vi
Q29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhIHNlY3VyaXR5T3JpZ2luRGF0YSwgdWludDY0X3Qgc3Rv
cmFnZU1hcElELCB1aW50NjRfdCBzb3VyY2VTdG9yYWdlQXJlYUlELCB1aW50NjRfdCBzdG9yYWdl
TWFwU2VlZCwgU3RyaW5nIGtleSwgU3RyaW5nIHZhbHVlLCBTdHJpbmcgdXJsU3RyaW5nKSBXYW50
c0Nvbm5lY3Rpb24KKyAgICBSZW1vdmVJdGVtKHN0cnVjdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdp
bkRhdGEgc2VjdXJpdHlPcmlnaW5EYXRhLCB1aW50NjRfdCBzdG9yYWdlTWFwSUQsIHVpbnQ2NF90
IHNvdXJjZVN0b3JhZ2VBcmVhSUQsIHVpbnQ2NF90IHN0b3JhZ2VNYXBTZWVkLCBTdHJpbmcga2V5
LCBTdHJpbmcgdXJsU3RyaW5nKSBXYW50c0Nvbm5lY3Rpb24KKyAgICBDbGVhcihzdHJ1Y3QgV2Vi
Q29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhIHNlY3VyaXR5T3JpZ2luRGF0YSwgdWludDY0X3Qgc3Rv
cmFnZU1hcElELCB1aW50NjRfdCBzb3VyY2VTdG9yYWdlQXJlYUlELCB1aW50NjRfdCBzdG9yYWdl
TWFwU2VlZCwgU3RyaW5nIHVybFN0cmluZykgV2FudHNDb25uZWN0aW9uCiB9CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0
YVN0b3JlLmNwcAkocmV2aXNpb24gMjQxOTYyKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNiw2
ICsxMTYsNyBAQCBXZWJzaXRlRGF0YVN0b3JlOjpXZWJzaXRlRGF0YVN0b3JlKFBBTDo6CiAgICAg
OiBtX3Nlc3Npb25JRChzZXNzaW9uSUQpCiAgICAgLCBtX3Jlc29sdmVkQ29uZmlndXJhdGlvbihX
ZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbjo6Y3JlYXRlKCkpCiAgICAgLCBtX2NvbmZpZ3Vy
YXRpb24obV9yZXNvbHZlZENvbmZpZ3VyYXRpb24tPmNvcHkoKSkKKyAgICAsIG1fc3RvcmFnZU1h
bmFnZXIoU3RvcmFnZU1hbmFnZXI6OmNyZWF0ZSh7IH0pKQogICAgICwgbV9kZXZpY2VJZEhhc2hT
YWx0U3RvcmFnZShEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZTo6Y3JlYXRlKGlzUGVyc2lzdGVudCgp
ID8gbV9jb25maWd1cmF0aW9uLT5kZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3RvcnkoKSA6
IFN0cmluZygpKSkKICAgICAsIG1fcXVldWUoV29ya1F1ZXVlOjpjcmVhdGUoImNvbS5hcHBsZS5X
ZWJLaXQuV2Vic2l0ZURhdGFTdG9yZSIpKQogI2lmIEVOQUJMRShXRUJfQVVUSE4pCkluZGV4OiBT
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYU1hcC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZUFy
ZWFNYXAuY3BwCShyZXZpc2lvbiAyNDE5NjIpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViU3RvcmFnZS9TdG9yYWdlQXJlYU1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDcgKzg0
LDcgQEAgU3RvcmFnZUFyZWFNYXA6OlN0b3JhZ2VBcmVhTWFwKFN0b3JhZ2VOYQogICAgICAgICBi
cmVhazsKIAogICAgIGNhc2UgU3RvcmFnZVR5cGU6OkVwaGVtZXJhbExvY2FsOgotICAgICAgICAv
LyBUaGUgVUkgcHJvY2VzcyBpcyBub3QgaW52b2x2ZWQgZm9yIEVwaGVtZXJhbExvY2FsIHN0b3Jh
Z2VzLgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIApAQCAtMTM5LDcgKzEzOSw3IEBAIHZvaWQgU3RvcmFnZUFyZWFNYXA6OnNldEl0ZW0oRnJh
bWUqIHNvdXIKIAogICAgIG1fcGVuZGluZ1ZhbHVlQ2hhbmdlcy5hZGQoa2V5KTsKIAotICAgIFdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVz
c2FnZXM6OlN0b3JhZ2VNYW5hZ2VyOjpTZXRJdGVtKG1fc3RvcmFnZU1hcElELCBzb3VyY2VBcmVh
LT5zdG9yYWdlQXJlYUlEKCksIG1fY3VycmVudFNlZWQsIGtleSwgdmFsdWUsIHNvdXJjZUZyYW1l
LT5kb2N1bWVudCgpLT51cmwoKSksIDApOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBh
cmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyOjpT
ZXRJdGVtKG1fc2VjdXJpdHlPcmlnaW4tPmRhdGEoKSwgbV9zdG9yYWdlTWFwSUQsIHNvdXJjZUFy
ZWEtPnN0b3JhZ2VBcmVhSUQoKSwgbV9jdXJyZW50U2VlZCwga2V5LCB2YWx1ZSwgc291cmNlRnJh
bWUtPmRvY3VtZW50KCktPnVybCgpKSwgMCk7CiB9CiAKIHZvaWQgU3RvcmFnZUFyZWFNYXA6OnJl
bW92ZUl0ZW0oV2ViQ29yZTo6RnJhbWUqIHNvdXJjZUZyYW1lLCBTdG9yYWdlQXJlYUltcGwqIHNv
dXJjZUFyZWEsIGNvbnN0IFN0cmluZyYga2V5KQpAQCAtMTU1LDcgKzE1NSw3IEBAIHZvaWQgU3Rv
cmFnZUFyZWFNYXA6OnJlbW92ZUl0ZW0oV2ViQ29yZToKIAogICAgIG1fcGVuZGluZ1ZhbHVlQ2hh
bmdlcy5hZGQoa2V5KTsKIAotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nl
c3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyOjpSZW1vdmVJdGVt
KG1fc3RvcmFnZU1hcElELCBzb3VyY2VBcmVhLT5zdG9yYWdlQXJlYUlEKCksIG1fY3VycmVudFNl
ZWQsIGtleSwgc291cmNlRnJhbWUtPmRvY3VtZW50KCktPnVybCgpKSwgMCk7CisgICAgV2ViUHJv
Y2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdl
czo6U3RvcmFnZU1hbmFnZXI6OlJlbW92ZUl0ZW0obV9zZWN1cml0eU9yaWdpbi0+ZGF0YSgpLCBt
X3N0b3JhZ2VNYXBJRCwgc291cmNlQXJlYS0+c3RvcmFnZUFyZWFJRCgpLCBtX2N1cnJlbnRTZWVk
LCBrZXksIHNvdXJjZUZyYW1lLT5kb2N1bWVudCgpLT51cmwoKSksIDApOwogfQogCiB2b2lkIFN0
b3JhZ2VBcmVhTWFwOjpjbGVhcihXZWJDb3JlOjpGcmFtZSogc291cmNlRnJhbWUsIFN0b3JhZ2VB
cmVhSW1wbCogc291cmNlQXJlYSkKQEAgLTE2NCw3ICsxNjQsNyBAQCB2b2lkIFN0b3JhZ2VBcmVh
TWFwOjpjbGVhcihXZWJDb3JlOjpGcmFtCiAKICAgICBtX2hhc1BlbmRpbmdDbGVhciA9IHRydWU7
CiAgICAgbV9zdG9yYWdlTWFwID0gU3RvcmFnZU1hcDo6Y3JlYXRlKG1fcXVvdGFJbkJ5dGVzKTsK
LSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5z
ZW5kKE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlcjo6Q2xlYXIobV9zdG9yYWdlTWFwSUQsIHNvdXJj
ZUFyZWEtPnN0b3JhZ2VBcmVhSUQoKSwgbV9jdXJyZW50U2VlZCwgc291cmNlRnJhbWUtPmRvY3Vt
ZW50KCktPnVybCgpKSwgMCk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJv
Y2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXI6OkNsZWFyKG1f
c2VjdXJpdHlPcmlnaW4tPmRhdGEoKSwgbV9zdG9yYWdlTWFwSUQsIHNvdXJjZUFyZWEtPnN0b3Jh
Z2VBcmVhSUQoKSwgbV9jdXJyZW50U2VlZCwgc291cmNlRnJhbWUtPmRvY3VtZW50KCktPnVybCgp
KSwgMCk7CiB9CiAKIGJvb2wgU3RvcmFnZUFyZWFNYXA6OmNvbnRhaW5zKGNvbnN0IFN0cmluZyYg
a2V5KQpAQCAtMTkzLDcgKzE5Myw3IEBAIHZvaWQgU3RvcmFnZUFyZWFNYXA6OmxvYWRWYWx1ZXNJ
Zk5lZWRlZCgKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIGEgc3BlY2lhbCBzZW5kU3lu
YyBmbGFnIHRvIGluZGljYXRlIHRoYXQgd2UgZG9uJ3Qgd2FudCB0byBwcm9jZXNzIGluY29taW5n
IG1lc3NhZ2VzIHdoaWxlIHdhaXRpbmcgZm9yIGEgcmVwbHkuCiAgICAgLy8gKFRoaXMgZmxhZyBk
b2VzIG5vdCB5ZXQgZXhpc3QpLiBTaW5jZSBsb2FkVmFsdWVzSWZOZWVkZWQoKSBlbmRzIHVwIGJl
aW5nIGNhbGxlZCBmcm9tIHdpdGhpbiBKYXZhU2NyaXB0IGNvZGUsIHByb2Nlc3NpbmcgaW5jb21p
bmcgc3luY2hyb25vdXMgbWVzc2FnZXMKICAgICAvLyBjb3VsZCBsZWFkIHRvIHdlaXJkIHJlZW50
cmVuY3kgYnVncyBvdGhlcndpc2UuCi0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50
UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyOjpH
ZXRWYWx1ZXMobV9zdG9yYWdlTWFwSUQsIG1fY3VycmVudFNlZWQpLCBNZXNzYWdlczo6U3RvcmFn
ZU1hbmFnZXI6OkdldFZhbHVlczo6UmVwbHkodmFsdWVzKSwgMCk7CisgICAgV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6
OlN0b3JhZ2VNYW5hZ2VyOjpHZXRWYWx1ZXMobV9zZWN1cml0eU9yaWdpbi0+ZGF0YSgpLCBtX3N0
b3JhZ2VNYXBJRCwgbV9jdXJyZW50U2VlZCksIE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlcjo6R2V0
VmFsdWVzOjpSZXBseSh2YWx1ZXMpLCAwKTsKIAogICAgIG1fc3RvcmFnZU1hcCA9IFN0b3JhZ2VN
YXA6OmNyZWF0ZShtX3F1b3RhSW5CeXRlcyk7CiAgICAgbV9zdG9yYWdlTWFwLT5pbXBvcnRJdGVt
cyh2YWx1ZXMpOwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3Rv
cmFnZU5hbWVzcGFjZUltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcAkocmV2aXNpb24gMjQxOTYy
KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFj
ZUltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIFJlZjxTdG9yYWdlTmFt
ZXNwYWNlSW1wbD4gU3RvcmFnZU5hbWVzcGEKIAogUmVmPFN0b3JhZ2VOYW1lc3BhY2VJbXBsPiBT
dG9yYWdlTmFtZXNwYWNlSW1wbDo6Y3JlYXRlRXBoZW1lcmFsTG9jYWxTdG9yYWdlTmFtZXNwYWNl
KHVpbnQ2NF90IGlkZW50aWZpZXIsIHVuc2lnbmVkIHF1b3RhSW5CeXRlcykKIHsKLSAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBTdG9yYWdlTmFtZXNwYWNlSW1wbChTdG9yYWdlVHlwZTo6RXBoZW1l
cmFsTG9jYWwsIGlkZW50aWZpZXIsIG51bGxwdHIsIHF1b3RhSW5CeXRlcykpOworICAgIHJldHVy
biBjcmVhdGVTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZShpZGVudGlmaWVyLCBxdW90YUluQnl0ZXMp
OwogfQogCiBSZWY8U3RvcmFnZU5hbWVzcGFjZUltcGw+IFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpj
cmVhdGVMb2NhbFN0b3JhZ2VOYW1lc3BhY2UodWludDY0X3QgaWRlbnRpZmllciwgdW5zaWduZWQg
cXVvdGFJbkJ5dGVzKQpAQCAtNzksOSArNzksNiBAQCB2b2lkIFN0b3JhZ2VOYW1lc3BhY2VJbXBs
OjpkaWREZXN0cm95U3RvCiAKIFJlZjxTdG9yYWdlQXJlYT4gU3RvcmFnZU5hbWVzcGFjZUltcGw6
OnN0b3JhZ2VBcmVhKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgc2VjdXJpdHlPcmlnaW4pCiB7
Ci0gICAgaWYgKG1fc3RvcmFnZVR5cGUgPT0gU3RvcmFnZVR5cGU6OkVwaGVtZXJhbExvY2FsKQot
ICAgICAgICByZXR1cm4gZXBoZW1lcmFsTG9jYWxTdG9yYWdlQXJlYShzZWN1cml0eU9yaWdpbik7
Ci0KICAgICBSZWZQdHI8U3RvcmFnZUFyZWFNYXA+IG1hcDsKIAogICAgIGF1dG8mIHNsb3QgPSBt
X3N0b3JhZ2VBcmVhTWFwcy5hZGQoc2VjdXJpdHlPcmlnaW4sIG51bGxwdHIpLml0ZXJhdG9yLT52
YWx1ZTsKQEAgLTk0LDEwNiArOTEsNiBAQCBSZWY8U3RvcmFnZUFyZWE+IFN0b3JhZ2VOYW1lc3Bh
Y2VJbXBsOjpzCiAgICAgcmV0dXJuIFN0b3JhZ2VBcmVhSW1wbDo6Y3JlYXRlKG1hcC5yZWxlYXNl
Tm9uTnVsbCgpKTsKIH0KIAotY2xhc3MgU3RvcmFnZU5hbWVzcGFjZUltcGw6OkVwaGVtZXJhbFN0
b3JhZ2VBcmVhIGZpbmFsIDogcHVibGljIFN0b3JhZ2VBcmVhIHsKLXB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPEVwaGVtZXJhbFN0b3JhZ2VBcmVhPiBjcmVhdGUoY29uc3QgU2VjdXJpdHlPcmlnaW5E
YXRhJiBvcmlnaW4sIHVuc2lnbmVkIHF1b3RhSW5CeXRlcykKLSAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IEVwaGVtZXJhbFN0b3JhZ2VBcmVhKG9yaWdpbiwgcXVvdGFJbkJ5dGVz
KSk7Ci0gICAgfQotCi0gICAgUmVmPEVwaGVtZXJhbFN0b3JhZ2VBcmVhPiBjb3B5KCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEVwaGVtZXJhbFN0b3JhZ2VBcmVhKCp0aGlz
KSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEVwaGVtZXJhbFN0b3JhZ2VBcmVhKGNvbnN0IFNl
Y3VyaXR5T3JpZ2luRGF0YSYgb3JpZ2luLCB1bnNpZ25lZCBxdW90YUluQnl0ZXMpCi0gICAgICAg
IDogbV9zZWN1cml0eU9yaWdpbkRhdGEob3JpZ2luKQotICAgICAgICAsIG1fc3RvcmFnZU1hcChT
dG9yYWdlTWFwOjpjcmVhdGUocXVvdGFJbkJ5dGVzKSkKLSAgICB7Ci0gICAgfQotCi0gICAgRXBo
ZW1lcmFsU3RvcmFnZUFyZWEoRXBoZW1lcmFsU3RvcmFnZUFyZWEmIG90aGVyKQotICAgICAgICA6
IG1fc2VjdXJpdHlPcmlnaW5EYXRhKG90aGVyLm1fc2VjdXJpdHlPcmlnaW5EYXRhKQotICAgICAg
ICAsIG1fc3RvcmFnZU1hcChvdGhlci5tX3N0b3JhZ2VNYXApCi0gICAgewotICAgIH0KLQotICAg
IC8vIFdlYkNvcmU6OlN0b3JhZ2VBcmVhLgotICAgIHVuc2lnbmVkIGxlbmd0aCgpCi0gICAgewot
ICAgICAgICByZXR1cm4gbV9zdG9yYWdlTWFwLT5sZW5ndGgoKTsKLSAgICB9Ci0KLSAgICBTdHJp
bmcga2V5KHVuc2lnbmVkIGluZGV4KQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fc3RvcmFnZU1h
cC0+a2V5KGluZGV4KTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgaXRlbShjb25zdCBTdHJpbmcmIGtl
eSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3N0b3JhZ2VNYXAtPmdldEl0ZW0oa2V5KTsKLSAg
ICB9Ci0KLSAgICB2b2lkIHNldEl0ZW0oRnJhbWUqLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3Qg
U3RyaW5nJiB2YWx1ZSwgYm9vbCYgcXVvdGFFeGNlcHRpb24pCi0gICAgewotICAgICAgICBTdHJp
bmcgb2xkVmFsdWU7Ci0gICAgICAgIGlmIChhdXRvIG5ld01hcCA9IG1fc3RvcmFnZU1hcC0+c2V0
SXRlbShrZXksIHZhbHVlLCBvbGRWYWx1ZSwgcXVvdGFFeGNlcHRpb24pKQotICAgICAgICAgICAg
bV9zdG9yYWdlTWFwID0gV1RGTW92ZShuZXdNYXApOwotICAgIH0KLQotICAgIHZvaWQgcmVtb3Zl
SXRlbShGcmFtZSosIGNvbnN0IFN0cmluZyYga2V5KQotICAgIHsKLSAgICAgICAgU3RyaW5nIG9s
ZFZhbHVlOwotICAgICAgICBpZiAoYXV0byBuZXdNYXAgPSBtX3N0b3JhZ2VNYXAtPnJlbW92ZUl0
ZW0oa2V5LCBvbGRWYWx1ZSkpCi0gICAgICAgICAgICBtX3N0b3JhZ2VNYXAgPSBXVEZNb3ZlKG5l
d01hcCk7Ci0gICAgfQotCi0gICAgdm9pZCBjbGVhcihGcmFtZSopCi0gICAgewotICAgICAgICBp
ZiAoIW1fc3RvcmFnZU1hcC0+bGVuZ3RoKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAg
ICAgbV9zdG9yYWdlTWFwID0gU3RvcmFnZU1hcDo6Y3JlYXRlKG1fc3RvcmFnZU1hcC0+cXVvdGEo
KSk7Ci0gICAgfQotCi0gICAgYm9vbCBjb250YWlucyhjb25zdCBTdHJpbmcmIGtleSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBtX3N0b3JhZ2VNYXAtPmNvbnRhaW5zKGtleSk7Ci0gICAgfQotCi0g
ICAgU3RvcmFnZVR5cGUgc3RvcmFnZVR5cGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJu
IFN0b3JhZ2VUeXBlOjpFcGhlbWVyYWxMb2NhbDsKLSAgICB9Ci0KLSAgICBzaXplX3QgbWVtb3J5
Qnl0ZXNVc2VkQnlDYWNoZSgpCi0gICAgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAg
ICB2b2lkIGluY3JlbWVudEFjY2Vzc0NvdW50KCkgeyB9Ci0gICAgdm9pZCBkZWNyZW1lbnRBY2Nl
c3NDb3VudCgpIHsgfQotICAgIHZvaWQgY2xvc2VEYXRhYmFzZUlmSWRsZSgpIHsgfQotCi0gICAg
Y29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBzZWN1cml0eU9yaWdpbigpIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gbV9zZWN1cml0eU9yaWdpbkRhdGE7Ci0gICAgfQotCi0gICAgU2VjdXJp
dHlPcmlnaW5EYXRhIG1fc2VjdXJpdHlPcmlnaW5EYXRhOwotICAgIFJlZlB0cjxTdG9yYWdlTWFw
PiBtX3N0b3JhZ2VNYXA7Ci19OwotCi1SZWY8U3RvcmFnZUFyZWE+IFN0b3JhZ2VOYW1lc3BhY2VJ
bXBsOjplcGhlbWVyYWxMb2NhbFN0b3JhZ2VBcmVhKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYg
c2VjdXJpdHlPcmlnaW4pCi17Ci0gICAgYXV0byYgc2xvdCA9IG1fZXBoZW1lcmFsTG9jYWxTdG9y
YWdlQXJlYXMuYWRkKHNlY3VyaXR5T3JpZ2luLCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7Ci0g
ICAgaWYgKCFzbG90KQotICAgICAgICBzbG90ID0gU3RvcmFnZU5hbWVzcGFjZUltcGw6OkVwaGVt
ZXJhbFN0b3JhZ2VBcmVhOjpjcmVhdGUoc2VjdXJpdHlPcmlnaW4sIG1fcXVvdGFJbkJ5dGVzKTsK
LSAgICBBU1NFUlQoc2xvdCk7Ci0gICAgcmV0dXJuICpzbG90OwotfQotCiBSZWY8U3RvcmFnZU5h
bWVzcGFjZT4gU3RvcmFnZU5hbWVzcGFjZUltcGw6OmNvcHkoUGFnZSogbmV3UGFnZSkKIHsKICAg
ICBBU1NFUlQobV9zdG9yYWdlTmFtZXNwYWNlSUQpOwpAQCAtMjA0LDkgKzEwMSw2IEBAIFJlZjxT
dG9yYWdlTmFtZXNwYWNlPiBTdG9yYWdlTmFtZXNwYWNlSW0KICAgICBBU1NFUlQobV9zdG9yYWdl
VHlwZSA9PSBTdG9yYWdlVHlwZTo6RXBoZW1lcmFsTG9jYWwpOwogICAgIGF1dG8gbmV3TmFtZXNw
YWNlID0gYWRvcHRSZWYoKm5ldyBTdG9yYWdlTmFtZXNwYWNlSW1wbChtX3N0b3JhZ2VUeXBlLCBt
X3N0b3JhZ2VOYW1lc3BhY2VJRCwgbV90b3BMZXZlbE9yaWdpbi5nZXQoKSwgbV9xdW90YUluQnl0
ZXMpKTsKIAotICAgIGZvciAoYXV0byYgaXRlciA6IG1fZXBoZW1lcmFsTG9jYWxTdG9yYWdlQXJl
YXMpCi0gICAgICAgIG5ld05hbWVzcGFjZS0+bV9lcGhlbWVyYWxMb2NhbFN0b3JhZ2VBcmVhcy5z
ZXQoaXRlci5rZXksIGl0ZXIudmFsdWUtPmNvcHkoKSk7Ci0KICAgICByZXR1cm4gV1RGTW92ZShu
ZXdOYW1lc3BhY2UpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViU3Rv
cmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmgJKHJldmlzaW9uIDI0
MTk2MikKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VOYW1l
c3BhY2VJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDggKzU5LDYgQEAgcHJpdmF0ZToKICAg
ICBSZWY8V2ViQ29yZTo6U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhKGNvbnN0IFdlYkNvcmU6OlNl
Y3VyaXR5T3JpZ2luRGF0YSYpIG92ZXJyaWRlOwogICAgIFJlZjxXZWJDb3JlOjpTdG9yYWdlTmFt
ZXNwYWNlPiBjb3B5KFdlYkNvcmU6OlBhZ2UqKSBvdmVycmlkZTsKIAotICAgIFJlZjxXZWJDb3Jl
OjpTdG9yYWdlQXJlYT4gZXBoZW1lcmFsTG9jYWxTdG9yYWdlQXJlYShjb25zdCBXZWJDb3JlOjpT
ZWN1cml0eU9yaWdpbkRhdGEmKTsKLQogICAgIGNvbnN0IFdlYkNvcmU6OlN0b3JhZ2VUeXBlIG1f
c3RvcmFnZVR5cGU7CiAgICAgY29uc3QgdWludDY0X3QgbV9zdG9yYWdlTmFtZXNwYWNlSUQ7CiAK
QEAgLTcwLDkgKzY4LDYgQEAgcHJpdmF0ZToKICAgICBjb25zdCB1bnNpZ25lZCBtX3F1b3RhSW5C
eXRlczsKIAogICAgIEhhc2hNYXA8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhLCBTdG9yYWdl
QXJlYU1hcCo+IG1fc3RvcmFnZUFyZWFNYXBzOwotCi0gICAgY2xhc3MgRXBoZW1lcmFsU3RvcmFn
ZUFyZWE7Ci0gICAgSGFzaE1hcDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEsIFJlZlB0cjxF
cGhlbWVyYWxTdG9yYWdlQXJlYT4+IG1fZXBoZW1lcmFsTG9jYWxTdG9yYWdlQXJlYXM7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0MjExMikKKysrIFRvb2xzL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDE5LTAyLTI2ICBBbGV4IENocmlz
dGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBlcGhlbWVy
YWwgbG9jYWwgc3RvcmFnZSBmcm9tIFdlYlByb2Nlc3MgdG8gVUlQcm9jZXNzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTUwNzQKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzQ3OTM3OTc1PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcm9jZXNz
U3dhcE9uTmF2aWdhdGlvbi5tbToKKwogMjAxOS0wMi0yNiAgVGFrYXNoaSBLb21vcmkgIDxUYWth
c2hpLktvbW9yaUBzb255LmNvbT4KIAogICAgICAgICBbQ3VybF0gTG9hZCBIVFRQIGJvZHkgb2Yg
NDAxIHJlc3BvbnNlIHdoZW4gQXV0aGVudGljYXRpb25DaGFuZ2UgaXMgY2FuY2VsbGVkLgpJbmRl
eDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcm9jZXNzU3dhcE9uTmF2
aWdhdGlvbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1Byb2Nlc3NTd2FwT25OYXZpZ2F0aW9uLm1tCShyZXZpc2lvbiAyNDE5NjIpCisrKyBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Byb2Nlc3NTd2FwT25OYXZpZ2F0
aW9uLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00MzczLDYgKzQzNzMsNDYgQEAgVEVTVChQcm9jZXNz
U3dhcCwgU3dhcE9uTG9hZEhUTUxTdHJpbmcpCiAgICAgZG9uZSA9IGZhbHNlOwogfQogCitURVNU
KFByb2Nlc3NTd2FwLCBFcGhlbWVyYWxMb2NhbFN0b3JhZ2UpCit7CisgICAgYXV0byBwcm9jZXNz
UG9vbENvbmZpZ3VyYXRpb24gPSBwc29uUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uKCk7CisgICAg
YXV0byBwcm9jZXNzUG9vbCA9IGFkb3B0TlMoW1tXS1Byb2Nlc3NQb29sIGFsbG9jXSBfaW5pdFdp
dGhDb25maWd1cmF0aW9uOnByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5nZXQoKV0pOworICAgIAor
ICAgIGF1dG8gd2ViVmlld0NvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmln
dXJhdGlvbiBhbGxvY10gaW5pdF0pOworICAgIFt3ZWJWaWV3Q29uZmlndXJhdGlvbiBzZXRQcm9j
ZXNzUG9vbDpwcm9jZXNzUG9vbC5nZXQoKV07CisgICAgW3dlYlZpZXdDb25maWd1cmF0aW9uIHNl
dFdlYnNpdGVEYXRhU3RvcmU6W1dLV2Vic2l0ZURhdGFTdG9yZSBub25QZXJzaXN0ZW50RGF0YVN0
b3JlXV07CisgICAgYXV0byBoYW5kbGVyID0gYWRvcHROUyhbW1BTT05TY2hlbWUgYWxsb2NdIGlu
aXRdKTsKKyAgICBbd2ViVmlld0NvbmZpZ3VyYXRpb24gc2V0VVJMU2NoZW1lSGFuZGxlcjpoYW5k
bGVyLmdldCgpIGZvclVSTFNjaGVtZTpAInBzb24iXTsKKyAgICAKKyAgICBhdXRvIHdlYlZpZXcg
PSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwg
MCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246d2ViVmlld0NvbmZpZ3VyYXRpb24uZ2V0KCldKTsK
KyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1BTT05OYXZpZ2F0aW9uRGVsZWdhdGUgYWxs
b2NdIGluaXRdKTsKKyAgICBbd2ViVmlldyBzZXROYXZpZ2F0aW9uRGVsZWdhdGU6ZGVsZWdhdGUu
Z2V0KCldOworCisgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0
V2l0aFVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAInBzb246Ly93ZWJraXQub3JnLyJdXV07Cisg
ICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKKworICAgIGRvbmUgPSBmYWxzZTsK
KyAgICBbd2ViVmlldyBldmFsdWF0ZUphdmFTY3JpcHQ6QCJ3aW5kb3cubG9jYWxTdG9yYWdlLnNl
dEl0ZW0oJ2EnLCdiJykiIGNvbXBsZXRpb25IYW5kbGVyOl4oaWQsIE5TRXJyb3IgKikgeworICAg
ICAgICBkb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4o
JmRvbmUpOworCisgICAgZG9uZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltO
U1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJwc29uOi8v
ZXhhbXBsZS5jb20vIl1dXTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOwor
CisgICAgZG9uZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVl
c3QgcmVxdWVzdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJwc29uOi8vd2Via2l0Lm9y
Zy8iXV1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CisKKyAgICBkb25l
ID0gZmFsc2U7CisgICAgW3dlYlZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0OkAid2luZG93LmxvY2Fs
U3RvcmFnZS5nZXRJdGVtKCdhJykiIGNvbXBsZXRpb25IYW5kbGVyOl4oaWQgcmVzdWx0LCBOU0Vy
cm9yICopIHsKKyAgICAgICAgRVhQRUNUX1RSVUUoW0AiYiIgaXNFcXVhbFRvU3RyaW5nOnJlc3Vs
dF0pOworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpV
dGlsOjpydW4oJmRvbmUpOworfQorCiBURVNUKFByb2Nlc3NTd2FwLCBVc2VQcmV3YXJtZWRQcm9j
ZXNzQWZ0ZXJUZXJtaW5hdGluZ05ldHdvcmtQcm9jZXNzKQogewogICAgIGF1dG8gcHJvY2Vzc1Bv
b2xDb25maWd1cmF0aW9uID0gcHNvblByb2Nlc3NQb29sQ29uZmlndXJhdGlvbigpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>363039</attachid>
            <date>2019-02-26 16:51:10 -0800</date>
            <delta_ts>2019-02-26 17:19:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-195074-20190226165109.patch</filename>
            <type>text/plain</type>
            <size>28025</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNDIwOTkpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ0IEBACisyMDE5LTAyLTI2ICBBbGV4IENocmlz
dGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBlcGhlbWVy
YWwgbG9jYWwgc3RvcmFnZSBmcm9tIFdlYlByb2Nlc3MgdG8gVUlQcm9jZXNzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTUwNzQKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzQ3OTM3OTc1PgorCisgICAgICAgIFJldmlld2VkIGJ5IEdlb2ZmIEdhcmVu
LgorCisgICAgICAgIEJlZm9yZSBQU09OLCBhIHBhZ2UgY291bGQgbmF2aWdhdGUgdG8gYW5vdGhl
ciBkb21haW4gdGhhdCBuYXZpZ2F0ZXMgYmFjayBhbmQgc3RpbGwgaGF2ZSBpdHMgbG9jYWwgc3Rv
cmFnZS4KKyAgICAgICAgU2luY2UgUFNPTiBtYWtlcyBpdCB1bnJlbGlhYmxlIHRvIHJldGFpbiB0
aGUgc3RhdGUgaW4gdGhlIFdlYlByb2Nlc3MsIG1vdmUgaXQgdG8gdGhlIHByb2Nlc3Mgd2l0aCB0
aGUgcmVzdCBvZiB0aGUgbG9jYWwgc3RvcmFnZS4KKyAgICAgICAgSWYgaXQncyBlcGhlbWVyYWws
IHdlIG9idmlvdXNseSBjYW4ndCB1c2UgdGhlIFNRTGl0ZSBvbi1kaXNrIHN0b3JhZ2UgaW1wbGVt
ZW50YXRpb24sIHNvIHVzZSB0aGUgc2FtZSBXZWJDb3JlOjpTdG9yYWdlTWFwIHdlIHVzZWQgdG8g
aW4gdGhlIFdlYlByb2Nlc3MuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViU3RvcmFnZS9TdG9y
YWdlTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpMb2NhbFN0
b3JhZ2VOYW1lc3BhY2U6OkxvY2FsU3RvcmFnZU5hbWVzcGFjZSk6CisgICAgICAgIChXZWJLaXQ6
OlN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlTWFuYWdlcik6CisgICAgICAgIChXZWJLaXQ6OlN0b3Jh
Z2VNYW5hZ2VyOjpjcmVhdGVMb2NhbFN0b3JhZ2VNYXApOgorICAgICAgICAoV2ViS2l0OjpTdG9y
YWdlTWFuYWdlcjo6Y3JlYXRlVHJhbnNpZW50TG9jYWxTdG9yYWdlTWFwKToKKyAgICAgICAgKFdl
YktpdDo6U3RvcmFnZU1hbmFnZXI6OmNyZWF0ZVNlc3Npb25TdG9yYWdlTWFwKToKKyAgICAgICAg
KFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OmRlc3Ryb3lTdG9yYWdlTWFwKToKKyAgICAgICAgKFdl
YktpdDo6U3RvcmFnZU1hbmFnZXI6OmdldFZhbHVlcyk6CisgICAgICAgIChXZWJLaXQ6OlN0b3Jh
Z2VNYW5hZ2VyOjpzZXRJdGVtKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OnJl
bW92ZUl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6Y2xlYXIpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmg6CisgICAgICAgICog
VUlQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXIubWVzc2FnZXMuaW46CisgICAgICAg
ICogVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpXZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZUFyZWFNYXAuY3BwOgorICAgICAgICAoV2ViS2l0
OjpTdG9yYWdlQXJlYU1hcDo6U3RvcmFnZUFyZWFNYXApOgorICAgICAgICAoV2ViS2l0OjpTdG9y
YWdlQXJlYU1hcDo6c2V0SXRlbSk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhTWFwOjpy
ZW1vdmVJdGVtKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWFNYXA6OmNsZWFyKToKKyAg
ICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWFNYXA6OmxvYWRWYWx1ZXNJZk5lZWRlZCk6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6U3RvcmFnZU5hbWVzcGFjZUltcGw6OmNyZWF0ZUVwaGVtZXJhbExvY2Fs
U3RvcmFnZU5hbWVzcGFjZSk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VOYW1lc3BhY2VJbXBs
OjpzdG9yYWdlQXJlYSk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpj
b3B5KToKKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VOYW1l
c3BhY2VJbXBsOjplcGhlbWVyYWxMb2NhbFN0b3JhZ2VBcmVhKTogRGVsZXRlZC4KKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuaDoKKwogMjAxOS0w
Mi0yNiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFtpT1NdIFJl
Z3Jlc3Npb24oUFNPTikgU2Nyb2xsIHBvc2l0aW9uIGlzIG5vIGxvbmdlciByZXN0b3JlZCB3aGVu
IG5hdmlnYXRpbmcgYmFjayB0byByZWRkaXQuY29tCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRh
YmFzZVRyYWNrZXIuY3BwCShyZXZpc2lvbiAyNDIwOTkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ4LDggKzQ4LDYgQEAgTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpMb2Nh
bFN0b3JhZwogICAgIDogbV9xdWV1ZShXVEZNb3ZlKHF1ZXVlKSkKICAgICAsIG1fbG9jYWxTdG9y
YWdlRGlyZWN0b3J5KGxvY2FsU3RvcmFnZURpcmVjdG9yeS5pc29sYXRlZENvcHkoKSkKIHsKLSAg
ICBBU1NFUlQoIW1fbG9jYWxTdG9yYWdlRGlyZWN0b3J5LmlzRW1wdHkoKSk7Ci0KICAgICAvLyBN
YWtlIHN1cmUgdGhlIGVuY29kaW5nIGlzIGluaXRpYWxpemVkIGJlZm9yZSB3ZSBzdGFydCBkaXNw
YXRjaGluZyB0aGluZ3MgdG8gdGhlIHF1ZXVlLgogICAgIFVURjhFbmNvZGluZygpOwogCkluZGV4
OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VN
YW5hZ2VyLmNwcAkocmV2aXNpb24gMjQyMDk5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw2ICsx
MDcsOSBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8U2VjdXJpdHlPcmlnaW5EYXRhLCBTdG9yYWdl
QXJlYSo+IG1fc3RvcmFnZUFyZWFNYXA7CiB9OwogCisvLyBTdWdnZXN0ZWQgYnkgaHR0cHM6Ly93
d3cudzMub3JnL1RSL3dlYnN0b3JhZ2UvI2Rpc2stc3BhY2UKK2NvbnN0IHVuc2lnbmVkIGxvY2Fs
U3RvcmFnZURhdGFiYXNlUXVvdGFJbkJ5dGVzID0gNSAqIDEwMjQgKiAxMDI0OworCiBjbGFzcyBT
dG9yYWdlTWFuYWdlcjo6VHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlIDogcHVibGljIFRo
cmVhZFNhZmVSZWZDb3VudGVkPFRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZT4gewogcHVi
bGljOgogICAgIHN0YXRpYyBSZWY8VHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlPiBjcmVh
dGUoKQpAQCAtMTU2LDcgKzE1OSw3IEBAIHByaXZhdGU6CiAgICAgewogICAgIH0KIAotICAgIGNv
bnN0IHVuc2lnbmVkIG1fcXVvdGFJbkJ5dGVzID0gNSAqIDEwMjQgKiAxMDI0OworICAgIGNvbnN0
IHVuc2lnbmVkIG1fcXVvdGFJbkJ5dGVzID0gbG9jYWxTdG9yYWdlRGF0YWJhc2VRdW90YUluQnl0
ZXM7CiAKICAgICBIYXNoTWFwPFNlY3VyaXR5T3JpZ2luRGF0YSwgUmVmUHRyPFN0b3JhZ2VBcmVh
Pj4gbV9zdG9yYWdlQXJlYU1hcDsKIH07CkBAIC0zMjYsNyArMzI5LDcgQEAgUmVmPFN0b3JhZ2VN
YW5hZ2VyOjpMb2NhbFN0b3JhZ2VOYW1lc3BhYwogU3RvcmFnZU1hbmFnZXI6OkxvY2FsU3RvcmFn
ZU5hbWVzcGFjZTo6TG9jYWxTdG9yYWdlTmFtZXNwYWNlKFN0b3JhZ2VNYW5hZ2VyKiBzdG9yYWdl
TWFuYWdlciwgdWludDY0X3Qgc3RvcmFnZU5hbWVzcGFjZUlEKQogICAgIDogbV9zdG9yYWdlTWFu
YWdlcihzdG9yYWdlTWFuYWdlcikKICAgICAsIG1fc3RvcmFnZU5hbWVzcGFjZUlEKHN0b3JhZ2VO
YW1lc3BhY2VJRCkKLSAgICAsIG1fcXVvdGFJbkJ5dGVzKDUgKiAxMDI0ICogMTAyNCkKKyAgICAs
IG1fcXVvdGFJbkJ5dGVzKGxvY2FsU3RvcmFnZURhdGFiYXNlUXVvdGFJbkJ5dGVzKQogewogfQog
CkBAIC00NjQsNiArNDY3LDcgQEAgUmVmPFN0b3JhZ2VNYW5hZ2VyPiBTdG9yYWdlTWFuYWdlcjo6
Y3JlYQogU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VNYW5hZ2VyKGNvbnN0IFN0cmluZyYgbG9jYWxT
dG9yYWdlRGlyZWN0b3J5KQogICAgIDogbV9xdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgiY29tLmFw
cGxlLldlYktpdC5TdG9yYWdlTWFuYWdlciIpKQogICAgICwgbV9sb2NhbFN0b3JhZ2VEYXRhYmFz
ZVRyYWNrZXIoTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpjcmVhdGUobV9xdWV1ZS5jb3B5
UmVmKCksIGxvY2FsU3RvcmFnZURpcmVjdG9yeSkpCisgICAgLCBtX2VwaGVtZXJhbChsb2NhbFN0
b3JhZ2VEaXJlY3RvcnkuaXNOdWxsKCkpCiB7CiAgICAgLy8gTWFrZSBzdXJlIHRoZSBlbmNvZGlu
ZyBpcyBpbml0aWFsaXplZCBiZWZvcmUgd2Ugc3RhcnQgZGlzcGF0Y2hpbmcgdGhpbmdzIHRvIHRo
ZSBxdWV1ZS4KICAgICBVVEY4RW5jb2RpbmcoKTsKQEAgLTY3Myw2ICs2NzcsNyBAQCB2b2lkIFN0
b3JhZ2VNYW5hZ2VyOjpkZWxldGVMb2NhbFN0b3JhZ2VFCiAKIHZvaWQgU3RvcmFnZU1hbmFnZXI6
OmNyZWF0ZUxvY2FsU3RvcmFnZU1hcChJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIHVpbnQ2
NF90IHN0b3JhZ2VNYXBJRCwgdWludDY0X3Qgc3RvcmFnZU5hbWVzcGFjZUlELCBTZWN1cml0eU9y
aWdpbkRhdGEmJiBzZWN1cml0eU9yaWdpbkRhdGEpCiB7CisgICAgQVNTRVJUKCFtX2VwaGVtZXJh
bCk7CiAgICAgc3RkOjpwYWlyPElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQsIHVpbnQ2NF90PiBj
b25uZWN0aW9uQW5kU3RvcmFnZU1hcElEUGFpcihjb25uZWN0aW9uLnVuaXF1ZUlEKCksIHN0b3Jh
Z2VNYXBJRCk7CiAKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBtZXNzYWdlIGNoZWNr
LgpAQCAtNzM2LDYgKzc0MSwxMCBAQCB2b2lkIFN0b3JhZ2VNYW5hZ2VyOjpjcmVhdGVUcmFuc2ll
bnRMb2NhCiAKIHZvaWQgU3RvcmFnZU1hbmFnZXI6OmNyZWF0ZVNlc3Npb25TdG9yYWdlTWFwKElQ
Qzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgdWludDY0X3Qgc3RvcmFnZU1hcElELCB1aW50NjRf
dCBzdG9yYWdlTmFtZXNwYWNlSUQsIFNlY3VyaXR5T3JpZ2luRGF0YSYmIHNlY3VyaXR5T3JpZ2lu
RGF0YSkKIHsKKyAgICBpZiAobV9lcGhlbWVyYWwpIHsKKyAgICAgICAgbV9lcGhlbWVyYWxTdG9y
YWdlLmFkZChzZWN1cml0eU9yaWdpbkRhdGEsIFdlYkNvcmU6OlN0b3JhZ2VNYXA6OmNyZWF0ZShs
b2NhbFN0b3JhZ2VEYXRhYmFzZVF1b3RhSW5CeXRlcykpOworICAgICAgICByZXR1cm47CisgICAg
fQogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhIG1lc3NhZ2UgY2hlY2suCiAgICAgQVNT
RVJUKG1fc2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2VzLmlzVmFsaWRLZXkoc3RvcmFnZU5hbWVzcGFj
ZUlEKSk7CiAKQEAgLTc2NSw2ICs3NzQsMTAgQEAgdm9pZCBTdG9yYWdlTWFuYWdlcjo6Y3JlYXRl
U2Vzc2lvblN0b3JhZwogCiB2b2lkIFN0b3JhZ2VNYW5hZ2VyOjpkZXN0cm95U3RvcmFnZU1hcChJ
UEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIHVpbnQ2NF90IHN0b3JhZ2VNYXBJRCkKIHsKKyAg
ICBpZiAobV9lcGhlbWVyYWwpIHsKKyAgICAgICAgLy8gV2UgbmVlZCB0byBrZWVwIHRoaXMgZGF0
YSBpbiBtZW1vcnkgaW4gY2FzZSB0aGVyZSBpcyBhIGZ1dHVyZSBjb25uZWN0aW9uIHRoYXQgaGFz
IGFjY2VzcyB0byBpdC4KKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICBzdGQ6OnBhaXI8SVBD
OjpDb25uZWN0aW9uOjpVbmlxdWVJRCwgdWludDY0X3Q+IGNvbm5lY3Rpb25BbmRTdG9yYWdlTWFw
SURQYWlyKGNvbm5lY3Rpb24udW5pcXVlSUQoKSwgc3RvcmFnZU1hcElEKTsKIAogICAgIC8vIEZJ
WE1FOiBUaGlzIHNob3VsZCBiZSBhIG1lc3NhZ2UgY2hlY2suCkBAIC03ODUsOCArNzk4LDE2IEBA
IHZvaWQgU3RvcmFnZU1hbmFnZXI6OmRlc3Ryb3lTdG9yYWdlTWFwKEkKICAgICBtX3N0b3JhZ2VB
cmVhc0J5Q29ubmVjdGlvbi5yZW1vdmUoY29ubmVjdGlvbkFuZFN0b3JhZ2VNYXBJRFBhaXIpOwog
fQogCi12b2lkIFN0b3JhZ2VNYW5hZ2VyOjpnZXRWYWx1ZXMoSVBDOjpDb25uZWN0aW9uJiBjb25u
ZWN0aW9uLCB1aW50NjRfdCBzdG9yYWdlTWFwSUQsIHVpbnQ2NF90IHN0b3JhZ2VNYXBTZWVkLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Jik+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCit2b2lkIFN0b3JhZ2VNYW5hZ2VyOjpnZXRWYWx1ZXMoSVBDOjpD
b25uZWN0aW9uJiBjb25uZWN0aW9uLCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmJiBzZWN1
cml0eU9yaWdpbkRhdGEsIHVpbnQ2NF90IHN0b3JhZ2VNYXBJRCwgdWludDY0X3Qgc3RvcmFnZU1h
cFNlZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmlu
Zz4mKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKKyAgICBpZiAobV9lcGhlbWVyYWwpIHsKKyAg
ICAgICAgaWYgKGF1dG8gc3RvcmFnZU1hcCA9IG1fZXBoZW1lcmFsU3RvcmFnZS5nZXQoc2VjdXJp
dHlPcmlnaW5EYXRhKSkKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHN0b3JhZ2VNYXAt
Pml0ZW1zKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih7
IH0pOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgU3RvcmFnZUFyZWEqIHN0b3JhZ2VB
cmVhID0gZmluZFN0b3JhZ2VBcmVhKGNvbm5lY3Rpb24sIHN0b3JhZ2VNYXBJRCk7CiAgICAgaWYg
KCFzdG9yYWdlQXJlYSkgewogICAgICAgICAvLyBUaGlzIGlzIGEgc2Vzc2lvbiBzdG9yYWdlIGFy
ZWEgZm9yIGEgcGFnZSB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gY2xvc2VkLiBJZ25vcmUgaXQuCkBA
IC03OTcsOCArODE4LDE3IEBAIHZvaWQgU3RvcmFnZU1hbmFnZXI6OmdldFZhbHVlcyhJUEM6OkNv
bm4KICAgICBjb25uZWN0aW9uLnNlbmQoTWVzc2FnZXM6OlN0b3JhZ2VBcmVhTWFwOjpEaWRHZXRW
YWx1ZXMoc3RvcmFnZU1hcFNlZWQpLCBzdG9yYWdlTWFwSUQpOwogfQogCi12b2lkIFN0b3JhZ2VN
YW5hZ2VyOjpzZXRJdGVtKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgdWludDY0X3Qgc3Rv
cmFnZU1hcElELCB1aW50NjRfdCBzb3VyY2VTdG9yYWdlQXJlYUlELCB1aW50NjRfdCBzdG9yYWdl
TWFwU2VlZCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUsIGNvbnN0IFN0
cmluZyYgdXJsU3RyaW5nKQordm9pZCBTdG9yYWdlTWFuYWdlcjo6c2V0SXRlbShJUEM6OkNvbm5l
Y3Rpb24mIGNvbm5lY3Rpb24sIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYmIHNlY3VyaXR5
T3JpZ2luRGF0YSwgdWludDY0X3Qgc3RvcmFnZU1hcElELCB1aW50NjRfdCBzb3VyY2VTdG9yYWdl
QXJlYUlELCB1aW50NjRfdCBzdG9yYWdlTWFwU2VlZCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0
IFN0cmluZyYgdmFsdWUsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQogeworICAgIGlmIChtX2Vw
aGVtZXJhbCkgeworICAgICAgICBpZiAoYXV0byBzdG9yYWdlTWFwID0gbV9lcGhlbWVyYWxTdG9y
YWdlLmdldChzZWN1cml0eU9yaWdpbkRhdGEpKSB7CisgICAgICAgICAgICBTdHJpbmcgb2xkVmFs
dWU7CisgICAgICAgICAgICBib29sIHF1b3RhRXhjZXB0aW9uOworICAgICAgICAgICAgc3RvcmFn
ZU1hcC0+c2V0SXRlbShrZXksIHZhbHVlLCBvbGRWYWx1ZSwgcXVvdGFFeGNlcHRpb24pOworICAg
ICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBTdG9yYWdlQXJlYSogc3RvcmFn
ZUFyZWEgPSBmaW5kU3RvcmFnZUFyZWEoY29ubmVjdGlvbiwgc3RvcmFnZU1hcElEKTsKICAgICBp
ZiAoIXN0b3JhZ2VBcmVhKSB7CiAgICAgICAgIC8vIFRoaXMgaXMgYSBzZXNzaW9uIHN0b3JhZ2Ug
YXJlYSBmb3IgYSBwYWdlIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBjbG9zZWQuIElnbm9yZSBpdC4K
QEAgLTgxMCw4ICs4NDAsMTYgQEAgdm9pZCBTdG9yYWdlTWFuYWdlcjo6c2V0SXRlbShJUEM6OkNv
bm5lYwogICAgIGNvbm5lY3Rpb24uc2VuZChNZXNzYWdlczo6U3RvcmFnZUFyZWFNYXA6OkRpZFNl
dEl0ZW0oc3RvcmFnZU1hcFNlZWQsIGtleSwgcXVvdGFFcnJvciksIHN0b3JhZ2VNYXBJRCk7CiB9
CiAKLXZvaWQgU3RvcmFnZU1hbmFnZXI6OnJlbW92ZUl0ZW0oSVBDOjpDb25uZWN0aW9uJiBjb25u
ZWN0aW9uLCB1aW50NjRfdCBzdG9yYWdlTWFwSUQsIHVpbnQ2NF90IHNvdXJjZVN0b3JhZ2VBcmVh
SUQsIHVpbnQ2NF90IHN0b3JhZ2VNYXBTZWVkLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3Ry
aW5nJiB1cmxTdHJpbmcpCit2b2lkIFN0b3JhZ2VNYW5hZ2VyOjpyZW1vdmVJdGVtKElQQzo6Q29u
bmVjdGlvbiYgY29ubmVjdGlvbiwgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiYgc2VjdXJp
dHlPcmlnaW5EYXRhLCB1aW50NjRfdCBzdG9yYWdlTWFwSUQsIHVpbnQ2NF90IHNvdXJjZVN0b3Jh
Z2VBcmVhSUQsIHVpbnQ2NF90IHN0b3JhZ2VNYXBTZWVkLCBjb25zdCBTdHJpbmcmIGtleSwgY29u
c3QgU3RyaW5nJiB1cmxTdHJpbmcpCiB7CisgICAgaWYgKG1fZXBoZW1lcmFsKSB7CisgICAgICAg
IGlmIChhdXRvIHN0b3JhZ2VNYXAgPSBtX2VwaGVtZXJhbFN0b3JhZ2UuZ2V0KHNlY3VyaXR5T3Jp
Z2luRGF0YSkpIHsKKyAgICAgICAgICAgIFN0cmluZyBvbGRWYWx1ZTsKKyAgICAgICAgICAgIHN0
b3JhZ2VNYXAtPnJlbW92ZUl0ZW0oa2V5LCBvbGRWYWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuOworICAgIH0KKwogICAgIFN0b3JhZ2VBcmVhKiBzdG9yYWdlQXJlYSA9IGZpbmRTdG9y
YWdlQXJlYShjb25uZWN0aW9uLCBzdG9yYWdlTWFwSUQpOwogICAgIGlmICghc3RvcmFnZUFyZWEp
IHsKICAgICAgICAgLy8gVGhpcyBpcyBhIHNlc3Npb24gc3RvcmFnZSBhcmVhIGZvciBhIHBhZ2Ug
dGhhdCBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZC4gSWdub3JlIGl0LgpAQCAtODIyLDggKzg2MCwx
MyBAQCB2b2lkIFN0b3JhZ2VNYW5hZ2VyOjpyZW1vdmVJdGVtKElQQzo6Q29uCiAgICAgY29ubmVj
dGlvbi5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdlQXJlYU1hcDo6RGlkUmVtb3ZlSXRlbShzdG9yYWdl
TWFwU2VlZCwga2V5KSwgc3RvcmFnZU1hcElEKTsKIH0KIAotdm9pZCBTdG9yYWdlTWFuYWdlcjo6
Y2xlYXIoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCB1aW50NjRfdCBzdG9yYWdlTWFwSUQs
IHVpbnQ2NF90IHNvdXJjZVN0b3JhZ2VBcmVhSUQsIHVpbnQ2NF90IHN0b3JhZ2VNYXBTZWVkLCBj
b25zdCBTdHJpbmcmIHVybFN0cmluZykKK3ZvaWQgU3RvcmFnZU1hbmFnZXI6OmNsZWFyKElQQzo6
Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiYgc2Vj
dXJpdHlPcmlnaW5EYXRhLCB1aW50NjRfdCBzdG9yYWdlTWFwSUQsIHVpbnQ2NF90IHNvdXJjZVN0
b3JhZ2VBcmVhSUQsIHVpbnQ2NF90IHN0b3JhZ2VNYXBTZWVkLCBjb25zdCBTdHJpbmcmIHVybFN0
cmluZykKIHsKKyAgICBpZiAobV9lcGhlbWVyYWwpIHsKKyAgICAgICAgbV9lcGhlbWVyYWxTdG9y
YWdlLnJlbW92ZShzZWN1cml0eU9yaWdpbkRhdGEpOworICAgICAgICByZXR1cm47CisgICAgfQor
CiAgICAgU3RvcmFnZUFyZWEqIHN0b3JhZ2VBcmVhID0gZmluZFN0b3JhZ2VBcmVhKGNvbm5lY3Rp
b24sIHN0b3JhZ2VNYXBJRCk7CiAgICAgaWYgKCFzdG9yYWdlQXJlYSkgewogICAgICAgICAvLyBU
aGlzIGlzIGEgc2Vzc2lvbiBzdG9yYWdlIGFyZWEgZm9yIGEgcGFnZSB0aGF0IGhhcyBhbHJlYWR5
IGJlZW4gY2xvc2VkLiBJZ25vcmUgaXQuCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5oCShyZXZpc2lvbiAyNDIwOTkpCisr
KyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDggQEAKIAogI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIK
ICNpbmNsdWRlICJMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIuaCIKKyNpbmNsdWRlIDxXZWJD
b3JlL1NlY3VyaXR5T3JpZ2luRGF0YS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU3RvcmFnZU1hcC5o
PgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAj
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KQEAgLTgxLDEwICs4MywxMCBAQCBwcml2YXRlOgogICAg
IHZvaWQgY3JlYXRlU2Vzc2lvblN0b3JhZ2VNYXAoSVBDOjpDb25uZWN0aW9uJiwgdWludDY0X3Qg
c3RvcmFnZU1hcElELCB1aW50NjRfdCBzdG9yYWdlTmFtZXNwYWNlSUQsIFdlYkNvcmU6OlNlY3Vy
aXR5T3JpZ2luRGF0YSYmKTsKICAgICB2b2lkIGRlc3Ryb3lTdG9yYWdlTWFwKElQQzo6Q29ubmVj
dGlvbiYsIHVpbnQ2NF90IHN0b3JhZ2VNYXBJRCk7CiAKLSAgICB2b2lkIGdldFZhbHVlcyhJUEM6
OkNvbm5lY3Rpb24mLCB1aW50NjRfdCBzdG9yYWdlTWFwSUQsIHVpbnQ2NF90IHN0b3JhZ2VNYXBT
ZWVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+
Jik+JiYpOwotICAgIHZvaWQgc2V0SXRlbShJUEM6OkNvbm5lY3Rpb24mLCB1aW50NjRfdCBzdG9y
YWdlQXJlYUlELCB1aW50NjRfdCBzb3VyY2VTdG9yYWdlQXJlYUlELCB1aW50NjRfdCBzdG9yYWdl
TWFwU2VlZCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUsIGNvbnN0IFN0
cmluZyYgdXJsU3RyaW5nKTsKLSAgICB2b2lkIHJlbW92ZUl0ZW0oSVBDOjpDb25uZWN0aW9uJiwg
dWludDY0X3Qgc3RvcmFnZU1hcElELCB1aW50NjRfdCBzb3VyY2VTdG9yYWdlQXJlYUlELCB1aW50
NjRfdCBzdG9yYWdlTWFwU2VlZCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdXJs
U3RyaW5nKTsKLSAgICB2b2lkIGNsZWFyKElQQzo6Q29ubmVjdGlvbiYsIHVpbnQ2NF90IHN0b3Jh
Z2VNYXBJRCwgdWludDY0X3Qgc291cmNlU3RvcmFnZUFyZWFJRCwgdWludDY0X3Qgc3RvcmFnZU1h
cFNlZWQsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKTsKKyAgICB2b2lkIGdldFZhbHVlcyhJUEM6
OkNvbm5lY3Rpb24mLCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmJiwgdWludDY0X3Qgc3Rv
cmFnZU1hcElELCB1aW50NjRfdCBzdG9yYWdlTWFwU2VlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYpPiYmKTsKKyAgICB2b2lkIHNldEl0ZW0o
SVBDOjpDb25uZWN0aW9uJiwgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiYsIHVpbnQ2NF90
IHN0b3JhZ2VBcmVhSUQsIHVpbnQ2NF90IHNvdXJjZVN0b3JhZ2VBcmVhSUQsIHVpbnQ2NF90IHN0
b3JhZ2VNYXBTZWVkLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgY29u
c3QgU3RyaW5nJiB1cmxTdHJpbmcpOworICAgIHZvaWQgcmVtb3ZlSXRlbShJUEM6OkNvbm5lY3Rp
b24mLCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmJiwgdWludDY0X3Qgc3RvcmFnZU1hcElE
LCB1aW50NjRfdCBzb3VyY2VTdG9yYWdlQXJlYUlELCB1aW50NjRfdCBzdG9yYWdlTWFwU2VlZCwg
Y29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKTsKKyAgICB2b2lkIGNs
ZWFyKElQQzo6Q29ubmVjdGlvbiYsIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYmLCB1aW50
NjRfdCBzdG9yYWdlTWFwSUQsIHVpbnQ2NF90IHNvdXJjZVN0b3JhZ2VBcmVhSUQsIHVpbnQ2NF90
IHN0b3JhZ2VNYXBTZWVkLCBjb25zdCBTdHJpbmcmIHVybFN0cmluZyk7CiAKICAgICBjbGFzcyBT
dG9yYWdlQXJlYTsKICAgICBTdG9yYWdlQXJlYSogZmluZFN0b3JhZ2VBcmVhKElQQzo6Q29ubmVj
dGlvbiYsIHVpbnQ2NF90KSBjb25zdDsKQEAgLTEwNiw2ICsxMDgsOSBAQCBwcml2YXRlOgogICAg
IEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZT4+IG1fc2Vz
c2lvblN0b3JhZ2VOYW1lc3BhY2VzOwogCiAgICAgSGFzaE1hcDxzdGQ6OnBhaXI8SVBDOjpDb25u
ZWN0aW9uOjpVbmlxdWVJRCwgdWludDY0X3Q+LCBSZWZQdHI8U3RvcmFnZUFyZWE+PiBtX3N0b3Jh
Z2VBcmVhc0J5Q29ubmVjdGlvbjsKKworICAgIEhhc2hNYXA8V2ViQ29yZTo6U2VjdXJpdHlPcmln
aW5EYXRhLCBSZWY8V2ViQ29yZTo6U3RvcmFnZU1hcD4+IG1fZXBoZW1lcmFsU3RvcmFnZTsKKyAg
ICBib29sIG1fZXBoZW1lcmFsIHsgZmFsc2UgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdl
ci5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJT
dG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLm1lc3NhZ2VzLmluCShyZXZpc2lvbiAyNDIwOTkpCisrKyBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLm1lc3NhZ2Vz
LmluCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw5ICsyNiw5IEBAIG1lc3NhZ2VzIC0+IFN0b3JhZ2VN
YW5hZ2VyIHsKICAgICBDcmVhdGVTZXNzaW9uU3RvcmFnZU1hcCh1aW50NjRfdCBzdG9yYWdlTWFw
SUQsIHVpbnQ2NF90IHN0b3JhZ2VOYW1lc3BhY2VJRCwgc3RydWN0IFdlYkNvcmU6OlNlY3VyaXR5
T3JpZ2luRGF0YSBzZWN1cml0eU9yaWdpbkRhdGEpIFdhbnRzQ29ubmVjdGlvbgogICAgIERlc3Ry
b3lTdG9yYWdlTWFwKHVpbnQ2NF90IHN0b3JhZ2VNYXBJRCkgV2FudHNDb25uZWN0aW9uCiAKLSAg
ICBHZXRWYWx1ZXModWludDY0X3Qgc3RvcmFnZU1hcElELCB1aW50NjRfdCBzdG9yYWdlTWFwU2Vl
ZCkgLT4gKEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHZhbHVlcykgRGVsYXllZCBXYW50c0Nvbm5l
Y3Rpb24KKyAgICBHZXRWYWx1ZXMoc3RydWN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSBz
ZWN1cml0eU9yaWdpbkRhdGEsIHVpbnQ2NF90IHN0b3JhZ2VNYXBJRCwgdWludDY0X3Qgc3RvcmFn
ZU1hcFNlZWQpIC0+IChIYXNoTWFwPFN0cmluZywgU3RyaW5nPiB2YWx1ZXMpIERlbGF5ZWQgV2Fu
dHNDb25uZWN0aW9uCiAKLSAgICBTZXRJdGVtKHVpbnQ2NF90IHN0b3JhZ2VNYXBJRCwgdWludDY0
X3Qgc291cmNlU3RvcmFnZUFyZWFJRCwgdWludDY0X3Qgc3RvcmFnZU1hcFNlZWQsIFN0cmluZyBr
ZXksIFN0cmluZyB2YWx1ZSwgU3RyaW5nIHVybFN0cmluZykgV2FudHNDb25uZWN0aW9uCi0gICAg
UmVtb3ZlSXRlbSh1aW50NjRfdCBzdG9yYWdlTWFwSUQsIHVpbnQ2NF90IHNvdXJjZVN0b3JhZ2VB
cmVhSUQsIHVpbnQ2NF90IHN0b3JhZ2VNYXBTZWVkLCBTdHJpbmcga2V5LCBTdHJpbmcgdXJsU3Ry
aW5nKSBXYW50c0Nvbm5lY3Rpb24KLSAgICBDbGVhcih1aW50NjRfdCBzdG9yYWdlTWFwSUQsIHVp
bnQ2NF90IHNvdXJjZVN0b3JhZ2VBcmVhSUQsIHVpbnQ2NF90IHN0b3JhZ2VNYXBTZWVkLCBTdHJp
bmcgdXJsU3RyaW5nKSBXYW50c0Nvbm5lY3Rpb24KKyAgICBTZXRJdGVtKHN0cnVjdCBXZWJDb3Jl
OjpTZWN1cml0eU9yaWdpbkRhdGEgc2VjdXJpdHlPcmlnaW5EYXRhLCB1aW50NjRfdCBzdG9yYWdl
TWFwSUQsIHVpbnQ2NF90IHNvdXJjZVN0b3JhZ2VBcmVhSUQsIHVpbnQ2NF90IHN0b3JhZ2VNYXBT
ZWVkLCBTdHJpbmcga2V5LCBTdHJpbmcgdmFsdWUsIFN0cmluZyB1cmxTdHJpbmcpIFdhbnRzQ29u
bmVjdGlvbgorICAgIFJlbW92ZUl0ZW0oc3RydWN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0
YSBzZWN1cml0eU9yaWdpbkRhdGEsIHVpbnQ2NF90IHN0b3JhZ2VNYXBJRCwgdWludDY0X3Qgc291
cmNlU3RvcmFnZUFyZWFJRCwgdWludDY0X3Qgc3RvcmFnZU1hcFNlZWQsIFN0cmluZyBrZXksIFN0
cmluZyB1cmxTdHJpbmcpIFdhbnRzQ29ubmVjdGlvbgorICAgIENsZWFyKHN0cnVjdCBXZWJDb3Jl
OjpTZWN1cml0eU9yaWdpbkRhdGEgc2VjdXJpdHlPcmlnaW5EYXRhLCB1aW50NjRfdCBzdG9yYWdl
TWFwSUQsIHVpbnQ2NF90IHNvdXJjZVN0b3JhZ2VBcmVhSUQsIHVpbnQ2NF90IHN0b3JhZ2VNYXBT
ZWVkLCBTdHJpbmcgdXJsU3RyaW5nKSBXYW50c0Nvbm5lY3Rpb24KIH0KSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3Rv
cmUuY3BwCShyZXZpc2lvbiAyNDIwOTkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJz
aXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDYgKzEx
Nyw3IEBAIFdlYnNpdGVEYXRhU3RvcmU6OldlYnNpdGVEYXRhU3RvcmUoUEFMOjoKICAgICA6IG1f
c2Vzc2lvbklEKHNlc3Npb25JRCkKICAgICAsIG1fcmVzb2x2ZWRDb25maWd1cmF0aW9uKFdlYnNp
dGVEYXRhU3RvcmVDb25maWd1cmF0aW9uOjpjcmVhdGUoKSkKICAgICAsIG1fY29uZmlndXJhdGlv
bihtX3Jlc29sdmVkQ29uZmlndXJhdGlvbi0+Y29weSgpKQorICAgICwgbV9zdG9yYWdlTWFuYWdl
cihTdG9yYWdlTWFuYWdlcjo6Y3JlYXRlKHsgfSkpCiAgICAgLCBtX2RldmljZUlkSGFzaFNhbHRT
dG9yYWdlKERldmljZUlkSGFzaFNhbHRTdG9yYWdlOjpjcmVhdGUoaXNQZXJzaXN0ZW50KCkgPyBt
X2NvbmZpZ3VyYXRpb24tPmRldmljZUlkSGFzaFNhbHRzU3RvcmFnZURpcmVjdG9yeSgpIDogU3Ry
aW5nKCkpKQogICAgICwgbV9xdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgiY29tLmFwcGxlLldlYktp
dC5XZWJzaXRlRGF0YVN0b3JlIikpCiAjaWYgRU5BQkxFKFdFQl9BVVRITikKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VBcmVhTWFwLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYU1h
cC5jcHAJKHJldmlzaW9uIDI0MjA5OSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJT
dG9yYWdlL1N0b3JhZ2VBcmVhTWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsNyArODQsNyBA
QCBTdG9yYWdlQXJlYU1hcDo6U3RvcmFnZUFyZWFNYXAoU3RvcmFnZU5hCiAgICAgICAgIGJyZWFr
OwogCiAgICAgY2FzZSBTdG9yYWdlVHlwZTo6RXBoZW1lcmFsTG9jYWw6Ci0gICAgICAgIC8vIFRo
ZSBVSSBwcm9jZXNzIGlzIG5vdCBpbnZvbHZlZCBmb3IgRXBoZW1lcmFsTG9jYWwgc3RvcmFnZXMu
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CkBAIC0xMzksNyArMTM5LDcgQEAgdm9pZCBTdG9yYWdlQXJlYU1hcDo6c2V0SXRlbShGcmFtZSog
c291cgogCiAgICAgbV9wZW5kaW5nVmFsdWVDaGFuZ2VzLmFkZChrZXkpOwogCi0gICAgV2ViUHJv
Y2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdl
czo6U3RvcmFnZU1hbmFnZXI6OlNldEl0ZW0obV9zdG9yYWdlTWFwSUQsIHNvdXJjZUFyZWEtPnN0
b3JhZ2VBcmVhSUQoKSwgbV9jdXJyZW50U2VlZCwga2V5LCB2YWx1ZSwgc291cmNlRnJhbWUtPmRv
Y3VtZW50KCktPnVybCgpKSwgMCk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50
UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXI6OlNldEl0
ZW0obV9zZWN1cml0eU9yaWdpbi0+ZGF0YSgpLCBtX3N0b3JhZ2VNYXBJRCwgc291cmNlQXJlYS0+
c3RvcmFnZUFyZWFJRCgpLCBtX2N1cnJlbnRTZWVkLCBrZXksIHZhbHVlLCBzb3VyY2VGcmFtZS0+
ZG9jdW1lbnQoKS0+dXJsKCkpLCAwKTsKIH0KIAogdm9pZCBTdG9yYWdlQXJlYU1hcDo6cmVtb3Zl
SXRlbShXZWJDb3JlOjpGcmFtZSogc291cmNlRnJhbWUsIFN0b3JhZ2VBcmVhSW1wbCogc291cmNl
QXJlYSwgY29uc3QgU3RyaW5nJiBrZXkpCkBAIC0xNTUsNyArMTU1LDcgQEAgdm9pZCBTdG9yYWdl
QXJlYU1hcDo6cmVtb3ZlSXRlbShXZWJDb3JlOgogCiAgICAgbV9wZW5kaW5nVmFsdWVDaGFuZ2Vz
LmFkZChrZXkpOwogCi0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nv
bm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXI6OlJlbW92ZUl0ZW0obV9z
dG9yYWdlTWFwSUQsIHNvdXJjZUFyZWEtPnN0b3JhZ2VBcmVhSUQoKSwgbV9jdXJyZW50U2VlZCwg
a2V5LCBzb3VyY2VGcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkpLCAwKTsKKyAgICBXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpT
dG9yYWdlTWFuYWdlcjo6UmVtb3ZlSXRlbShtX3NlY3VyaXR5T3JpZ2luLT5kYXRhKCksIG1fc3Rv
cmFnZU1hcElELCBzb3VyY2VBcmVhLT5zdG9yYWdlQXJlYUlEKCksIG1fY3VycmVudFNlZWQsIGtl
eSwgc291cmNlRnJhbWUtPmRvY3VtZW50KCktPnVybCgpKSwgMCk7CiB9CiAKIHZvaWQgU3RvcmFn
ZUFyZWFNYXA6OmNsZWFyKFdlYkNvcmU6OkZyYW1lKiBzb3VyY2VGcmFtZSwgU3RvcmFnZUFyZWFJ
bXBsKiBzb3VyY2VBcmVhKQpAQCAtMTY0LDcgKzE2NCw3IEBAIHZvaWQgU3RvcmFnZUFyZWFNYXA6
OmNsZWFyKFdlYkNvcmU6OkZyYW0KIAogICAgIG1faGFzUGVuZGluZ0NsZWFyID0gdHJ1ZTsKICAg
ICBtX3N0b3JhZ2VNYXAgPSBTdG9yYWdlTWFwOjpjcmVhdGUobV9xdW90YUluQnl0ZXMpOwotICAg
IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQo
TWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyOjpDbGVhcihtX3N0b3JhZ2VNYXBJRCwgc291cmNlQXJl
YS0+c3RvcmFnZUFyZWFJRCgpLCBtX2N1cnJlbnRTZWVkLCBzb3VyY2VGcmFtZS0+ZG9jdW1lbnQo
KS0+dXJsKCkpLCAwKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNz
Q29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlcjo6Q2xlYXIobV9zZWN1
cml0eU9yaWdpbi0+ZGF0YSgpLCBtX3N0b3JhZ2VNYXBJRCwgc291cmNlQXJlYS0+c3RvcmFnZUFy
ZWFJRCgpLCBtX2N1cnJlbnRTZWVkLCBzb3VyY2VGcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkpLCAw
KTsKIH0KIAogYm9vbCBTdG9yYWdlQXJlYU1hcDo6Y29udGFpbnMoY29uc3QgU3RyaW5nJiBrZXkp
CkBAIC0xOTMsNyArMTkzLDcgQEAgdm9pZCBTdG9yYWdlQXJlYU1hcDo6bG9hZFZhbHVlc0lmTmVl
ZGVkKAogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2UgYSBzcGVjaWFsIHNlbmRTeW5jIGZs
YWcgdG8gaW5kaWNhdGUgdGhhdCB3ZSBkb24ndCB3YW50IHRvIHByb2Nlc3MgaW5jb21pbmcgbWVz
c2FnZXMgd2hpbGUgd2FpdGluZyBmb3IgYSByZXBseS4KICAgICAvLyAoVGhpcyBmbGFnIGRvZXMg
bm90IHlldCBleGlzdCkuIFNpbmNlIGxvYWRWYWx1ZXNJZk5lZWRlZCgpIGVuZHMgdXAgYmVpbmcg
Y2FsbGVkIGZyb20gd2l0aGluIEphdmFTY3JpcHQgY29kZSwgcHJvY2Vzc2luZyBpbmNvbWluZyBz
eW5jaHJvbm91cyBtZXNzYWdlcwogICAgIC8vIGNvdWxkIGxlYWQgdG8gd2VpcmQgcmVlbnRyZW5j
eSBidWdzIG90aGVyd2lzZS4KLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9j
ZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXI6OkdldFZh
bHVlcyhtX3N0b3JhZ2VNYXBJRCwgbV9jdXJyZW50U2VlZCksIE1lc3NhZ2VzOjpTdG9yYWdlTWFu
YWdlcjo6R2V0VmFsdWVzOjpSZXBseSh2YWx1ZXMpLCAwKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6U3Rv
cmFnZU1hbmFnZXI6OkdldFZhbHVlcyhtX3NlY3VyaXR5T3JpZ2luLT5kYXRhKCksIG1fc3RvcmFn
ZU1hcElELCBtX2N1cnJlbnRTZWVkKSwgTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyOjpHZXRWYWx1
ZXM6OlJlcGx5KHZhbHVlcyksIDApOwogCiAgICAgbV9zdG9yYWdlTWFwID0gU3RvcmFnZU1hcDo6
Y3JlYXRlKG1fcXVvdGFJbkJ5dGVzKTsKICAgICBtX3N0b3JhZ2VNYXAtPmltcG9ydEl0ZW1zKHZh
bHVlcyk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdl
TmFtZXNwYWNlSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwCShyZXZpc2lvbiAyNDIwOTkpCisr
KyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1w
bC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgUmVmPFN0b3JhZ2VOYW1lc3Bh
Y2VJbXBsPiBTdG9yYWdlTmFtZXNwYQogCiBSZWY8U3RvcmFnZU5hbWVzcGFjZUltcGw+IFN0b3Jh
Z2VOYW1lc3BhY2VJbXBsOjpjcmVhdGVFcGhlbWVyYWxMb2NhbFN0b3JhZ2VOYW1lc3BhY2UodWlu
dDY0X3QgaWRlbnRpZmllciwgdW5zaWduZWQgcXVvdGFJbkJ5dGVzKQogewotICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IFN0b3JhZ2VOYW1lc3BhY2VJbXBsKFN0b3JhZ2VUeXBlOjpFcGhlbWVyYWxM
b2NhbCwgaWRlbnRpZmllciwgbnVsbHB0ciwgcXVvdGFJbkJ5dGVzKSk7CisgICAgcmV0dXJuIGNy
ZWF0ZVNlc3Npb25TdG9yYWdlTmFtZXNwYWNlKGlkZW50aWZpZXIsIHF1b3RhSW5CeXRlcyk7CiB9
CiAKIFJlZjxTdG9yYWdlTmFtZXNwYWNlSW1wbD4gU3RvcmFnZU5hbWVzcGFjZUltcGw6OmNyZWF0
ZUxvY2FsU3RvcmFnZU5hbWVzcGFjZSh1aW50NjRfdCBpZGVudGlmaWVyLCB1bnNpZ25lZCBxdW90
YUluQnl0ZXMpCkBAIC03OSw5ICs3OSw2IEBAIHZvaWQgU3RvcmFnZU5hbWVzcGFjZUltcGw6OmRp
ZERlc3Ryb3lTdG8KIAogUmVmPFN0b3JhZ2VBcmVhPiBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6c3Rv
cmFnZUFyZWEoY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBzZWN1cml0eU9yaWdpbikKIHsKLSAg
ICBpZiAobV9zdG9yYWdlVHlwZSA9PSBTdG9yYWdlVHlwZTo6RXBoZW1lcmFsTG9jYWwpCi0gICAg
ICAgIHJldHVybiBlcGhlbWVyYWxMb2NhbFN0b3JhZ2VBcmVhKHNlY3VyaXR5T3JpZ2luKTsKLQog
ICAgIFJlZlB0cjxTdG9yYWdlQXJlYU1hcD4gbWFwOwogCiAgICAgYXV0byYgc2xvdCA9IG1fc3Rv
cmFnZUFyZWFNYXBzLmFkZChzZWN1cml0eU9yaWdpbiwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVl
OwpAQCAtOTQsMTA2ICs5MSw2IEBAIFJlZjxTdG9yYWdlQXJlYT4gU3RvcmFnZU5hbWVzcGFjZUlt
cGw6OnMKICAgICByZXR1cm4gU3RvcmFnZUFyZWFJbXBsOjpjcmVhdGUobWFwLnJlbGVhc2VOb25O
dWxsKCkpOwogfQogCi1jbGFzcyBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6RXBoZW1lcmFsU3RvcmFn
ZUFyZWEgZmluYWwgOiBwdWJsaWMgU3RvcmFnZUFyZWEgewotcHVibGljOgotICAgIHN0YXRpYyBS
ZWY8RXBoZW1lcmFsU3RvcmFnZUFyZWE+IGNyZWF0ZShjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEm
IG9yaWdpbiwgdW5zaWduZWQgcXVvdGFJbkJ5dGVzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgRXBoZW1lcmFsU3RvcmFnZUFyZWEob3JpZ2luLCBxdW90YUluQnl0ZXMpKTsK
LSAgICB9Ci0KLSAgICBSZWY8RXBoZW1lcmFsU3RvcmFnZUFyZWE+IGNvcHkoKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRXBoZW1lcmFsU3RvcmFnZUFyZWEoKnRoaXMpKTsK
LSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgRXBoZW1lcmFsU3RvcmFnZUFyZWEoY29uc3QgU2VjdXJp
dHlPcmlnaW5EYXRhJiBvcmlnaW4sIHVuc2lnbmVkIHF1b3RhSW5CeXRlcykKLSAgICAgICAgOiBt
X3NlY3VyaXR5T3JpZ2luRGF0YShvcmlnaW4pCi0gICAgICAgICwgbV9zdG9yYWdlTWFwKFN0b3Jh
Z2VNYXA6OmNyZWF0ZShxdW90YUluQnl0ZXMpKQotICAgIHsKLSAgICB9Ci0KLSAgICBFcGhlbWVy
YWxTdG9yYWdlQXJlYShFcGhlbWVyYWxTdG9yYWdlQXJlYSYgb3RoZXIpCi0gICAgICAgIDogbV9z
ZWN1cml0eU9yaWdpbkRhdGEob3RoZXIubV9zZWN1cml0eU9yaWdpbkRhdGEpCi0gICAgICAgICwg
bV9zdG9yYWdlTWFwKG90aGVyLm1fc3RvcmFnZU1hcCkKLSAgICB7Ci0gICAgfQotCi0gICAgLy8g
V2ViQ29yZTo6U3RvcmFnZUFyZWEuCi0gICAgdW5zaWduZWQgbGVuZ3RoKCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBtX3N0b3JhZ2VNYXAtPmxlbmd0aCgpOwotICAgIH0KLQotICAgIFN0cmluZyBr
ZXkodW5zaWduZWQgaW5kZXgpCi0gICAgewotICAgICAgICByZXR1cm4gbV9zdG9yYWdlTWFwLT5r
ZXkoaW5kZXgpOwotICAgIH0KLQotICAgIFN0cmluZyBpdGVtKGNvbnN0IFN0cmluZyYga2V5KQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIG1fc3RvcmFnZU1hcC0+Z2V0SXRlbShrZXkpOwotICAgIH0K
LQotICAgIHZvaWQgc2V0SXRlbShGcmFtZSosIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJp
bmcmIHZhbHVlLCBib29sJiBxdW90YUV4Y2VwdGlvbikKLSAgICB7Ci0gICAgICAgIFN0cmluZyBv
bGRWYWx1ZTsKLSAgICAgICAgaWYgKGF1dG8gbmV3TWFwID0gbV9zdG9yYWdlTWFwLT5zZXRJdGVt
KGtleSwgdmFsdWUsIG9sZFZhbHVlLCBxdW90YUV4Y2VwdGlvbikpCi0gICAgICAgICAgICBtX3N0
b3JhZ2VNYXAgPSBXVEZNb3ZlKG5ld01hcCk7Ci0gICAgfQotCi0gICAgdm9pZCByZW1vdmVJdGVt
KEZyYW1lKiwgY29uc3QgU3RyaW5nJiBrZXkpCi0gICAgewotICAgICAgICBTdHJpbmcgb2xkVmFs
dWU7Ci0gICAgICAgIGlmIChhdXRvIG5ld01hcCA9IG1fc3RvcmFnZU1hcC0+cmVtb3ZlSXRlbShr
ZXksIG9sZFZhbHVlKSkKLSAgICAgICAgICAgIG1fc3RvcmFnZU1hcCA9IFdURk1vdmUobmV3TWFw
KTsKLSAgICB9Ci0KLSAgICB2b2lkIGNsZWFyKEZyYW1lKikKLSAgICB7Ci0gICAgICAgIGlmICgh
bV9zdG9yYWdlTWFwLT5sZW5ndGgoKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBt
X3N0b3JhZ2VNYXAgPSBTdG9yYWdlTWFwOjpjcmVhdGUobV9zdG9yYWdlTWFwLT5xdW90YSgpKTsK
LSAgICB9Ci0KLSAgICBib29sIGNvbnRhaW5zKGNvbnN0IFN0cmluZyYga2V5KQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1fc3RvcmFnZU1hcC0+Y29udGFpbnMoa2V5KTsKLSAgICB9Ci0KLSAgICBT
dG9yYWdlVHlwZSBzdG9yYWdlVHlwZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gU3Rv
cmFnZVR5cGU6OkVwaGVtZXJhbExvY2FsOwotICAgIH0KLQotICAgIHNpemVfdCBtZW1vcnlCeXRl
c1VzZWRCeUNhY2hlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIHZv
aWQgaW5jcmVtZW50QWNjZXNzQ291bnQoKSB7IH0KLSAgICB2b2lkIGRlY3JlbWVudEFjY2Vzc0Nv
dW50KCkgeyB9Ci0gICAgdm9pZCBjbG9zZURhdGFiYXNlSWZJZGxlKCkgeyB9Ci0KLSAgICBjb25z
dCBTZWN1cml0eU9yaWdpbkRhdGEmIHNlY3VyaXR5T3JpZ2luKCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBtX3NlY3VyaXR5T3JpZ2luRGF0YTsKLSAgICB9Ci0KLSAgICBTZWN1cml0eU9y
aWdpbkRhdGEgbV9zZWN1cml0eU9yaWdpbkRhdGE7Ci0gICAgUmVmUHRyPFN0b3JhZ2VNYXA+IG1f
c3RvcmFnZU1hcDsKLX07Ci0KLVJlZjxTdG9yYWdlQXJlYT4gU3RvcmFnZU5hbWVzcGFjZUltcGw6
OmVwaGVtZXJhbExvY2FsU3RvcmFnZUFyZWEoY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBzZWN1
cml0eU9yaWdpbikKLXsKLSAgICBhdXRvJiBzbG90ID0gbV9lcGhlbWVyYWxMb2NhbFN0b3JhZ2VB
cmVhcy5hZGQoc2VjdXJpdHlPcmlnaW4sIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKLSAgICBp
ZiAoIXNsb3QpCi0gICAgICAgIHNsb3QgPSBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6RXBoZW1lcmFs
U3RvcmFnZUFyZWE6OmNyZWF0ZShzZWN1cml0eU9yaWdpbiwgbV9xdW90YUluQnl0ZXMpOwotICAg
IEFTU0VSVChzbG90KTsKLSAgICByZXR1cm4gKnNsb3Q7Ci19Ci0KIFJlZjxTdG9yYWdlTmFtZXNw
YWNlPiBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6Y29weShQYWdlKiBuZXdQYWdlKQogewogICAgIEFT
U0VSVChtX3N0b3JhZ2VOYW1lc3BhY2VJRCk7CkBAIC0yMDQsOSArMTAxLDYgQEAgUmVmPFN0b3Jh
Z2VOYW1lc3BhY2U+IFN0b3JhZ2VOYW1lc3BhY2VJbQogICAgIEFTU0VSVChtX3N0b3JhZ2VUeXBl
ID09IFN0b3JhZ2VUeXBlOjpFcGhlbWVyYWxMb2NhbCk7CiAgICAgYXV0byBuZXdOYW1lc3BhY2Ug
PSBhZG9wdFJlZigqbmV3IFN0b3JhZ2VOYW1lc3BhY2VJbXBsKG1fc3RvcmFnZVR5cGUsIG1fc3Rv
cmFnZU5hbWVzcGFjZUlELCBtX3RvcExldmVsT3JpZ2luLmdldCgpLCBtX3F1b3RhSW5CeXRlcykp
OwogCi0gICAgZm9yIChhdXRvJiBpdGVyIDogbV9lcGhlbWVyYWxMb2NhbFN0b3JhZ2VBcmVhcykK
LSAgICAgICAgbmV3TmFtZXNwYWNlLT5tX2VwaGVtZXJhbExvY2FsU3RvcmFnZUFyZWFzLnNldChp
dGVyLmtleSwgaXRlci52YWx1ZS0+Y29weSgpKTsKLQogICAgIHJldHVybiBXVEZNb3ZlKG5ld05h
bWVzcGFjZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJTdG9yYWdl
L1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuaAkocmV2aXNpb24gMjQyMDk5
KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFj
ZUltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtNTksOCArNTksNiBAQCBwcml2YXRlOgogICAgIFJl
ZjxXZWJDb3JlOjpTdG9yYWdlQXJlYT4gc3RvcmFnZUFyZWEoY29uc3QgV2ViQ29yZTo6U2VjdXJp
dHlPcmlnaW5EYXRhJikgb3ZlcnJpZGU7CiAgICAgUmVmPFdlYkNvcmU6OlN0b3JhZ2VOYW1lc3Bh
Y2U+IGNvcHkoV2ViQ29yZTo6UGFnZSopIG92ZXJyaWRlOwogCi0gICAgUmVmPFdlYkNvcmU6OlN0
b3JhZ2VBcmVhPiBlcGhlbWVyYWxMb2NhbFN0b3JhZ2VBcmVhKGNvbnN0IFdlYkNvcmU6OlNlY3Vy
aXR5T3JpZ2luRGF0YSYpOwotCiAgICAgY29uc3QgV2ViQ29yZTo6U3RvcmFnZVR5cGUgbV9zdG9y
YWdlVHlwZTsKICAgICBjb25zdCB1aW50NjRfdCBtX3N0b3JhZ2VOYW1lc3BhY2VJRDsKIApAQCAt
NzAsOSArNjgsNiBAQCBwcml2YXRlOgogICAgIGNvbnN0IHVuc2lnbmVkIG1fcXVvdGFJbkJ5dGVz
OwogCiAgICAgSGFzaE1hcDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEsIFN0b3JhZ2VBcmVh
TWFwKj4gbV9zdG9yYWdlQXJlYU1hcHM7Ci0KLSAgICBjbGFzcyBFcGhlbWVyYWxTdG9yYWdlQXJl
YTsKLSAgICBIYXNoTWFwPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSwgUmVmUHRyPEVwaGVt
ZXJhbFN0b3JhZ2VBcmVhPj4gbV9lcGhlbWVyYWxMb2NhbFN0b3JhZ2VBcmVhczsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjQyMDk5KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTktMDItMjYgIEFsZXggQ2hyaXN0ZW5z
ZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBNb3ZlIGVwaGVtZXJhbCBs
b2NhbCBzdG9yYWdlIGZyb20gV2ViUHJvY2VzcyB0byBVSVByb2Nlc3MKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NTA3NAorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vNDc5Mzc5NzU+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgR2VvZmYgR2FyZW4uCisK
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Byb2Nlc3NTd2FwT25O
YXZpZ2F0aW9uLm1tOgorCiAyMDE5LTAyLTI2ICBUYWthc2hpIEtvbW9yaSAgPFRha2FzaGkuS29t
b3JpQHNvbnkuY29tPgogCiAgICAgICAgIFtDdXJsXSBMb2FkIEhUVFAgYm9keSBvZiA0MDEgcmVz
cG9uc2Ugd2hlbiBBdXRoZW50aWNhdGlvbkNoYW5nZSBpcyBjYW5jZWxsZWQuCkluZGV4OiBUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Byb2Nlc3NTd2FwT25OYXZpZ2F0aW9u
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
UHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24ubW0JKHJldmlzaW9uIDI0MjA5OSkKKysrIFRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24ubW0J
KHdvcmtpbmcgY29weSkKQEAgLTQzOTgsNiArNDM5OCw1OCBAQCBURVNUKFByb2Nlc3NTd2FwLCBT
d2FwT25Mb2FkSFRNTFN0cmluZykKICAgICBkb25lID0gZmFsc2U7CiB9CiAKK1RFU1QoUHJvY2Vz
c1N3YXAsIEVwaGVtZXJhbExvY2FsU3RvcmFnZSkKK3sKKyAgICBhdXRvIHByb2Nlc3NQb29sQ29u
ZmlndXJhdGlvbiA9IHBzb25Qcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24oKTsKKyAgICBhdXRvIHBy
b2Nlc3NQb29sID0gYWRvcHROUyhbW1dLUHJvY2Vzc1Bvb2wgYWxsb2NdIF9pbml0V2l0aENvbmZp
Z3VyYXRpb246cHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmdldCgpXSk7CisgICAgCisgICAgYXV0
byB3ZWJWaWV3Q29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9u
IGFsbG9jXSBpbml0XSk7CisgICAgW3dlYlZpZXdDb25maWd1cmF0aW9uIHNldFByb2Nlc3NQb29s
OnByb2Nlc3NQb29sLmdldCgpXTsKKyAgICBbd2ViVmlld0NvbmZpZ3VyYXRpb24gc2V0V2Vic2l0
ZURhdGFTdG9yZTpbV0tXZWJzaXRlRGF0YVN0b3JlIG5vblBlcnNpc3RlbnREYXRhU3RvcmVdXTsK
KyAgICBhdXRvIGhhbmRsZXIgPSBhZG9wdE5TKFtbUFNPTlNjaGVtZSBhbGxvY10gaW5pdF0pOwor
ICAgIFtoYW5kbGVyIGFkZE1hcHBpbmdGcm9tVVJMU3RyaW5nOkAicHNvbjovL3d3dy53ZWJraXQu
b3JnL2lmcmFtZS5odG1sIiB0b0RhdGE6IjxzY3JpcHQ+d2luZG93LmxvY2FsU3RvcmFnZS5zZXRJ
dGVtKCdjJywnZCcpPC9zY3JpcHQ+Il07CisgICAgW3dlYlZpZXdDb25maWd1cmF0aW9uIHNldFVS
TFNjaGVtZUhhbmRsZXI6aGFuZGxlci5nZXQoKSBmb3JVUkxTY2hlbWU6QCJwc29uIl07CisgICAg
CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhG
cmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOndlYlZpZXdDb25m
aWd1cmF0aW9uLmdldCgpXSk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tQU09OTmF2
aWdhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgW3dlYlZpZXcgc2V0TmF2aWdhdGlv
bkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltO
U1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJwc29uOi8v
d2Via2l0Lm9yZy8iXV1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CisK
KyAgICBkb25lID0gZmFsc2U7CisgICAgW3dlYlZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0OkAid2lu
ZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCdhJywnYicpIiBjb21wbGV0aW9uSGFuZGxlcjpeKGlk
LCBOU0Vycm9yICopIHsKKyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdl
YktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKKworICAgIGRvbmUgPSBmYWxzZTsKKyAgICBbd2Vi
VmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBVUkxX
aXRoU3RyaW5nOkAicHNvbjovL2V4YW1wbGUuY29tLyJdXV07CisgICAgVGVzdFdlYktpdEFQSTo6
VXRpbDo6cnVuKCZkb25lKTsKKworICAgIGRvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBsb2Fk
UmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5n
OkAicHNvbjovL3dlYmtpdC5vcmcvIl1dXTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4o
JmRvbmUpOworCisgICAgZG9uZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3IGV2YWx1YXRlSmF2YVNj
cmlwdDpAIndpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYScpIiBjb21wbGV0aW9uSGFuZGxl
cjpeKGlkIHJlc3VsdCwgTlNFcnJvciAqKSB7CisgICAgICAgIEVYUEVDVF9UUlVFKFtAImIiIGlz
RXF1YWxUb1N0cmluZzpyZXN1bHRdKTsKKyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfV07Cisg
ICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKKyAgICAKKyAgICBkb25lID0gZmFs
c2U7CisgICAgW3dlYlZpZXcgbG9hZEhUTUxTdHJpbmc6QCI8aHRtbD48aWZyYW1lIHNyYz0ncHNv
bjovL3d3dy53ZWJraXQub3JnL2lmcmFtZS5odG1sJz48L2lmcmFtZT48L2h0bWw+IiBiYXNlVVJM
OltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovL3d3dy5leGFtcGxlLmNvbS8iXV07CisgICAg
VGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKKworICAgIGRvbmUgPSBmYWxzZTsKKyAg
ICBbd2ViVmlldyBldmFsdWF0ZUphdmFTY3JpcHQ6QCJ3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0
ZW0oJ2EnKSIgY29tcGxldGlvbkhhbmRsZXI6XihpZCByZXN1bHQsIE5TRXJyb3IgKikgeworICAg
ICAgICBFWFBFQ1RfRkFMU0UoW0AiYiIgaXNFcXVhbFRvU3RyaW5nOnJlc3VsdF0pOworICAgICAg
ICBkb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRv
bmUpOworfQorCiBURVNUKFByb2Nlc3NTd2FwLCBVc2VQcmV3YXJtZWRQcm9jZXNzQWZ0ZXJUZXJt
aW5hdGluZ05ldHdvcmtQcm9jZXNzKQogewogICAgIGF1dG8gcHJvY2Vzc1Bvb2xDb25maWd1cmF0
aW9uID0gcHNvblByb2Nlc3NQb29sQ29uZmlndXJhdGlvbigpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>363041</attachid>
            <date>2019-02-26 17:19:17 -0800</date>
            <delta_ts>2019-02-26 17:19:43 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-195074-20190226171916.patch</filename>
            <type>text/plain</type>
            <size>27611</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNDIwOTkpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ0IEBACisyMDE5LTAyLTI2ICBBbGV4IENocmlz
dGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBlcGhlbWVy
YWwgbG9jYWwgc3RvcmFnZSBmcm9tIFdlYlByb2Nlc3MgdG8gVUlQcm9jZXNzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTUwNzQKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzQ3OTM3OTc1PgorCisgICAgICAgIFJldmlld2VkIGJ5IEdlb2ZmIEdhcmVu
LgorCisgICAgICAgIEJlZm9yZSBQU09OLCBhIHBhZ2UgY291bGQgbmF2aWdhdGUgdG8gYW5vdGhl
ciBkb21haW4gdGhhdCBuYXZpZ2F0ZXMgYmFjayBhbmQgc3RpbGwgaGF2ZSBpdHMgbG9jYWwgc3Rv
cmFnZS4KKyAgICAgICAgU2luY2UgUFNPTiBtYWtlcyBpdCB1bnJlbGlhYmxlIHRvIHJldGFpbiB0
aGUgc3RhdGUgaW4gdGhlIFdlYlByb2Nlc3MsIG1vdmUgaXQgdG8gdGhlIHByb2Nlc3Mgd2l0aCB0
aGUgcmVzdCBvZiB0aGUgbG9jYWwgc3RvcmFnZS4KKyAgICAgICAgSWYgaXQncyBlcGhlbWVyYWws
IHdlIG9idmlvdXNseSBjYW4ndCB1c2UgdGhlIFNRTGl0ZSBvbi1kaXNrIHN0b3JhZ2UgaW1wbGVt
ZW50YXRpb24sIHNvIHVzZSB0aGUgc2FtZSBXZWJDb3JlOjpTdG9yYWdlTWFwIHdlIHVzZWQgdG8g
aW4gdGhlIFdlYlByb2Nlc3MuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViU3RvcmFnZS9TdG9y
YWdlTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpMb2NhbFN0
b3JhZ2VOYW1lc3BhY2U6OkxvY2FsU3RvcmFnZU5hbWVzcGFjZSk6CisgICAgICAgIChXZWJLaXQ6
OlN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlTWFuYWdlcik6CisgICAgICAgIChXZWJLaXQ6OlN0b3Jh
Z2VNYW5hZ2VyOjpjcmVhdGVMb2NhbFN0b3JhZ2VNYXApOgorICAgICAgICAoV2ViS2l0OjpTdG9y
YWdlTWFuYWdlcjo6Y3JlYXRlVHJhbnNpZW50TG9jYWxTdG9yYWdlTWFwKToKKyAgICAgICAgKFdl
YktpdDo6U3RvcmFnZU1hbmFnZXI6OmNyZWF0ZVNlc3Npb25TdG9yYWdlTWFwKToKKyAgICAgICAg
KFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OmRlc3Ryb3lTdG9yYWdlTWFwKToKKyAgICAgICAgKFdl
YktpdDo6U3RvcmFnZU1hbmFnZXI6OmdldFZhbHVlcyk6CisgICAgICAgIChXZWJLaXQ6OlN0b3Jh
Z2VNYW5hZ2VyOjpzZXRJdGVtKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OnJl
bW92ZUl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6Y2xlYXIpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmg6CisgICAgICAgICog
VUlQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXIubWVzc2FnZXMuaW46CisgICAgICAg
ICogVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpXZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZUFyZWFNYXAuY3BwOgorICAgICAgICAoV2ViS2l0
OjpTdG9yYWdlQXJlYU1hcDo6U3RvcmFnZUFyZWFNYXApOgorICAgICAgICAoV2ViS2l0OjpTdG9y
YWdlQXJlYU1hcDo6c2V0SXRlbSk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhTWFwOjpy
ZW1vdmVJdGVtKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWFNYXA6OmNsZWFyKToKKyAg
ICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWFNYXA6OmxvYWRWYWx1ZXNJZk5lZWRlZCk6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6U3RvcmFnZU5hbWVzcGFjZUltcGw6OmNyZWF0ZUVwaGVtZXJhbExvY2Fs
U3RvcmFnZU5hbWVzcGFjZSk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VOYW1lc3BhY2VJbXBs
OjpzdG9yYWdlQXJlYSk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpj
b3B5KToKKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VOYW1l
c3BhY2VJbXBsOjplcGhlbWVyYWxMb2NhbFN0b3JhZ2VBcmVhKTogRGVsZXRlZC4KKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuaDoKKwogMjAxOS0w
Mi0yNiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFtpT1NdIFJl
Z3Jlc3Npb24oUFNPTikgU2Nyb2xsIHBvc2l0aW9uIGlzIG5vIGxvbmdlciByZXN0b3JlZCB3aGVu
IG5hdmlnYXRpbmcgYmFjayB0byByZWRkaXQuY29tCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRh
YmFzZVRyYWNrZXIuY3BwCShyZXZpc2lvbiAyNDIwOTkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ4LDggKzQ4LDYgQEAgTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpMb2Nh
bFN0b3JhZwogICAgIDogbV9xdWV1ZShXVEZNb3ZlKHF1ZXVlKSkKICAgICAsIG1fbG9jYWxTdG9y
YWdlRGlyZWN0b3J5KGxvY2FsU3RvcmFnZURpcmVjdG9yeS5pc29sYXRlZENvcHkoKSkKIHsKLSAg
ICBBU1NFUlQoIW1fbG9jYWxTdG9yYWdlRGlyZWN0b3J5LmlzRW1wdHkoKSk7Ci0KICAgICAvLyBN
YWtlIHN1cmUgdGhlIGVuY29kaW5nIGlzIGluaXRpYWxpemVkIGJlZm9yZSB3ZSBzdGFydCBkaXNw
YXRjaGluZyB0aGluZ3MgdG8gdGhlIHF1ZXVlLgogICAgIFVURjhFbmNvZGluZygpOwogCkluZGV4
OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VN
YW5hZ2VyLmNwcAkocmV2aXNpb24gMjQyMDk5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw2ICsx
MDcsOSBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8U2VjdXJpdHlPcmlnaW5EYXRhLCBTdG9yYWdl
QXJlYSo+IG1fc3RvcmFnZUFyZWFNYXA7CiB9OwogCisvLyBTdWdnZXN0ZWQgYnkgaHR0cHM6Ly93
d3cudzMub3JnL1RSL3dlYnN0b3JhZ2UvI2Rpc2stc3BhY2UKK2NvbnN0IHVuc2lnbmVkIGxvY2Fs
U3RvcmFnZURhdGFiYXNlUXVvdGFJbkJ5dGVzID0gNSAqIDEwMjQgKiAxMDI0OworCiBjbGFzcyBT
dG9yYWdlTWFuYWdlcjo6VHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlIDogcHVibGljIFRo
cmVhZFNhZmVSZWZDb3VudGVkPFRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZT4gewogcHVi
bGljOgogICAgIHN0YXRpYyBSZWY8VHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlPiBjcmVh
dGUoKQpAQCAtMTU2LDcgKzE1OSw3IEBAIHByaXZhdGU6CiAgICAgewogICAgIH0KIAotICAgIGNv
bnN0IHVuc2lnbmVkIG1fcXVvdGFJbkJ5dGVzID0gNSAqIDEwMjQgKiAxMDI0OworICAgIGNvbnN0
IHVuc2lnbmVkIG1fcXVvdGFJbkJ5dGVzID0gbG9jYWxTdG9yYWdlRGF0YWJhc2VRdW90YUluQnl0
ZXM7CiAKICAgICBIYXNoTWFwPFNlY3VyaXR5T3JpZ2luRGF0YSwgUmVmUHRyPFN0b3JhZ2VBcmVh
Pj4gbV9zdG9yYWdlQXJlYU1hcDsKIH07CkBAIC0zMjYsNyArMzI5LDcgQEAgUmVmPFN0b3JhZ2VN
YW5hZ2VyOjpMb2NhbFN0b3JhZ2VOYW1lc3BhYwogU3RvcmFnZU1hbmFnZXI6OkxvY2FsU3RvcmFn
ZU5hbWVzcGFjZTo6TG9jYWxTdG9yYWdlTmFtZXNwYWNlKFN0b3JhZ2VNYW5hZ2VyKiBzdG9yYWdl
TWFuYWdlciwgdWludDY0X3Qgc3RvcmFnZU5hbWVzcGFjZUlEKQogICAgIDogbV9zdG9yYWdlTWFu
YWdlcihzdG9yYWdlTWFuYWdlcikKICAgICAsIG1fc3RvcmFnZU5hbWVzcGFjZUlEKHN0b3JhZ2VO
YW1lc3BhY2VJRCkKLSAgICAsIG1fcXVvdGFJbkJ5dGVzKDUgKiAxMDI0ICogMTAyNCkKKyAgICAs
IG1fcXVvdGFJbkJ5dGVzKGxvY2FsU3RvcmFnZURhdGFiYXNlUXVvdGFJbkJ5dGVzKQogewogfQog
CkBAIC00NjQsNiArNDY3LDcgQEAgUmVmPFN0b3JhZ2VNYW5hZ2VyPiBTdG9yYWdlTWFuYWdlcjo6
Y3JlYQogU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VNYW5hZ2VyKGNvbnN0IFN0cmluZyYgbG9jYWxT
dG9yYWdlRGlyZWN0b3J5KQogICAgIDogbV9xdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgiY29tLmFw
cGxlLldlYktpdC5TdG9yYWdlTWFuYWdlciIpKQogICAgICwgbV9sb2NhbFN0b3JhZ2VEYXRhYmFz
ZVRyYWNrZXIoTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpjcmVhdGUobV9xdWV1ZS5jb3B5
UmVmKCksIGxvY2FsU3RvcmFnZURpcmVjdG9yeSkpCisgICAgLCBtX2VwaGVtZXJhbChsb2NhbFN0
b3JhZ2VEaXJlY3RvcnkuaXNOdWxsKCkpCiB7CiAgICAgLy8gTWFrZSBzdXJlIHRoZSBlbmNvZGlu
ZyBpcyBpbml0aWFsaXplZCBiZWZvcmUgd2Ugc3RhcnQgZGlzcGF0Y2hpbmcgdGhpbmdzIHRvIHRo
ZSBxdWV1ZS4KICAgICBVVEY4RW5jb2RpbmcoKTsKQEAgLTY3Myw2ICs2NzcsNyBAQCB2b2lkIFN0
b3JhZ2VNYW5hZ2VyOjpkZWxldGVMb2NhbFN0b3JhZ2VFCiAKIHZvaWQgU3RvcmFnZU1hbmFnZXI6
OmNyZWF0ZUxvY2FsU3RvcmFnZU1hcChJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIHVpbnQ2
NF90IHN0b3JhZ2VNYXBJRCwgdWludDY0X3Qgc3RvcmFnZU5hbWVzcGFjZUlELCBTZWN1cml0eU9y
aWdpbkRhdGEmJiBzZWN1cml0eU9yaWdpbkRhdGEpCiB7CisgICAgQVNTRVJUKCFtX2VwaGVtZXJh
bCk7CiAgICAgc3RkOjpwYWlyPElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQsIHVpbnQ2NF90PiBj
b25uZWN0aW9uQW5kU3RvcmFnZU1hcElEUGFpcihjb25uZWN0aW9uLnVuaXF1ZUlEKCksIHN0b3Jh
Z2VNYXBJRCk7CiAKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBtZXNzYWdlIGNoZWNr
LgpAQCAtNzM2LDYgKzc0MSwxMCBAQCB2b2lkIFN0b3JhZ2VNYW5hZ2VyOjpjcmVhdGVUcmFuc2ll
bnRMb2NhCiAKIHZvaWQgU3RvcmFnZU1hbmFnZXI6OmNyZWF0ZVNlc3Npb25TdG9yYWdlTWFwKElQ
Qzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgdWludDY0X3Qgc3RvcmFnZU1hcElELCB1aW50NjRf
dCBzdG9yYWdlTmFtZXNwYWNlSUQsIFNlY3VyaXR5T3JpZ2luRGF0YSYmIHNlY3VyaXR5T3JpZ2lu
RGF0YSkKIHsKKyAgICBpZiAobV9lcGhlbWVyYWwpIHsKKyAgICAgICAgbV9lcGhlbWVyYWxTdG9y
YWdlLmFkZChzZWN1cml0eU9yaWdpbkRhdGEsIFdlYkNvcmU6OlN0b3JhZ2VNYXA6OmNyZWF0ZShs
b2NhbFN0b3JhZ2VEYXRhYmFzZVF1b3RhSW5CeXRlcykpOworICAgICAgICByZXR1cm47CisgICAg
fQogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhIG1lc3NhZ2UgY2hlY2suCiAgICAgQVNT
RVJUKG1fc2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2VzLmlzVmFsaWRLZXkoc3RvcmFnZU5hbWVzcGFj
ZUlEKSk7CiAKQEAgLTc4NSwxMCArNzk0LDE0IEBAIHZvaWQgU3RvcmFnZU1hbmFnZXI6OmRlc3Ry
b3lTdG9yYWdlTWFwKEkKICAgICBtX3N0b3JhZ2VBcmVhc0J5Q29ubmVjdGlvbi5yZW1vdmUoY29u
bmVjdGlvbkFuZFN0b3JhZ2VNYXBJRFBhaXIpOwogfQogCi12b2lkIFN0b3JhZ2VNYW5hZ2VyOjpn
ZXRWYWx1ZXMoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCB1aW50NjRfdCBzdG9yYWdlTWFw
SUQsIHVpbnQ2NF90IHN0b3JhZ2VNYXBTZWVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0
IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Jik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIFN0
b3JhZ2VNYW5hZ2VyOjpnZXRWYWx1ZXMoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBXZWJD
b3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmJiBzZWN1cml0eU9yaWdpbkRhdGEsIHVpbnQ2NF90IHN0
b3JhZ2VNYXBJRCwgdWludDY0X3Qgc3RvcmFnZU1hcFNlZWQsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
IHsKICAgICBTdG9yYWdlQXJlYSogc3RvcmFnZUFyZWEgPSBmaW5kU3RvcmFnZUFyZWEoY29ubmVj
dGlvbiwgc3RvcmFnZU1hcElEKTsKICAgICBpZiAoIXN0b3JhZ2VBcmVhKSB7CisgICAgICAgIGlm
IChtX2VwaGVtZXJhbCkgeworICAgICAgICAgICAgaWYgKGF1dG8gc3RvcmFnZU1hcCA9IG1fZXBo
ZW1lcmFsU3RvcmFnZS5nZXQoc2VjdXJpdHlPcmlnaW5EYXRhKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoc3RvcmFnZU1hcC0+aXRlbXMoKSk7CisgICAgICAgIH0K
ICAgICAgICAgLy8gVGhpcyBpcyBhIHNlc3Npb24gc3RvcmFnZSBhcmVhIGZvciBhIHBhZ2UgdGhh
dCBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZC4gSWdub3JlIGl0LgogICAgICAgICByZXR1cm4gY29t
cGxldGlvbkhhbmRsZXIoeyB9KTsKICAgICB9CkBAIC03OTcsMTAgKzgxMCwxNyBAQCB2b2lkIFN0
b3JhZ2VNYW5hZ2VyOjpnZXRWYWx1ZXMoSVBDOjpDb25uCiAgICAgY29ubmVjdGlvbi5zZW5kKE1l
c3NhZ2VzOjpTdG9yYWdlQXJlYU1hcDo6RGlkR2V0VmFsdWVzKHN0b3JhZ2VNYXBTZWVkKSwgc3Rv
cmFnZU1hcElEKTsKIH0KIAotdm9pZCBTdG9yYWdlTWFuYWdlcjo6c2V0SXRlbShJUEM6OkNvbm5l
Y3Rpb24mIGNvbm5lY3Rpb24sIHVpbnQ2NF90IHN0b3JhZ2VNYXBJRCwgdWludDY0X3Qgc291cmNl
U3RvcmFnZUFyZWFJRCwgdWludDY0X3Qgc3RvcmFnZU1hcFNlZWQsIGNvbnN0IFN0cmluZyYga2V5
LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykKK3ZvaWQgU3Rv
cmFnZU1hbmFnZXI6OnNldEl0ZW0oSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBXZWJDb3Jl
OjpTZWN1cml0eU9yaWdpbkRhdGEmJiBzZWN1cml0eU9yaWdpbkRhdGEsIHVpbnQ2NF90IHN0b3Jh
Z2VNYXBJRCwgdWludDY0X3Qgc291cmNlU3RvcmFnZUFyZWFJRCwgdWludDY0X3Qgc3RvcmFnZU1h
cFNlZWQsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBjb25zdCBTdHJp
bmcmIHVybFN0cmluZykKIHsKICAgICBTdG9yYWdlQXJlYSogc3RvcmFnZUFyZWEgPSBmaW5kU3Rv
cmFnZUFyZWEoY29ubmVjdGlvbiwgc3RvcmFnZU1hcElEKTsKICAgICBpZiAoIXN0b3JhZ2VBcmVh
KSB7CisgICAgICAgIGlmIChtX2VwaGVtZXJhbCkgeworICAgICAgICAgICAgaWYgKGF1dG8gc3Rv
cmFnZU1hcCA9IG1fZXBoZW1lcmFsU3RvcmFnZS5nZXQoc2VjdXJpdHlPcmlnaW5EYXRhKSkgewor
ICAgICAgICAgICAgICAgIFN0cmluZyBvbGRWYWx1ZTsKKyAgICAgICAgICAgICAgICBib29sIHF1
b3RhRXhjZXB0aW9uOworICAgICAgICAgICAgICAgIHN0b3JhZ2VNYXAtPnNldEl0ZW0oa2V5LCB2
YWx1ZSwgb2xkVmFsdWUsIHF1b3RhRXhjZXB0aW9uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQogICAgICAgICAvLyBUaGlzIGlzIGEgc2Vzc2lvbiBzdG9yYWdlIGFyZWEgZm9yIGEgcGFnZSB0
aGF0IGhhcyBhbHJlYWR5IGJlZW4gY2xvc2VkLiBJZ25vcmUgaXQuCiAgICAgICAgIHJldHVybjsK
ICAgICB9CkBAIC04MTAsMTAgKzgzMCwxNiBAQCB2b2lkIFN0b3JhZ2VNYW5hZ2VyOjpzZXRJdGVt
KElQQzo6Q29ubmVjCiAgICAgY29ubmVjdGlvbi5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdlQXJlYU1h
cDo6RGlkU2V0SXRlbShzdG9yYWdlTWFwU2VlZCwga2V5LCBxdW90YUVycm9yKSwgc3RvcmFnZU1h
cElEKTsKIH0KIAotdm9pZCBTdG9yYWdlTWFuYWdlcjo6cmVtb3ZlSXRlbShJUEM6OkNvbm5lY3Rp
b24mIGNvbm5lY3Rpb24sIHVpbnQ2NF90IHN0b3JhZ2VNYXBJRCwgdWludDY0X3Qgc291cmNlU3Rv
cmFnZUFyZWFJRCwgdWludDY0X3Qgc3RvcmFnZU1hcFNlZWQsIGNvbnN0IFN0cmluZyYga2V5LCBj
b25zdCBTdHJpbmcmIHVybFN0cmluZykKK3ZvaWQgU3RvcmFnZU1hbmFnZXI6OnJlbW92ZUl0ZW0o
SVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEm
JiBzZWN1cml0eU9yaWdpbkRhdGEsIHVpbnQ2NF90IHN0b3JhZ2VNYXBJRCwgdWludDY0X3Qgc291
cmNlU3RvcmFnZUFyZWFJRCwgdWludDY0X3Qgc3RvcmFnZU1hcFNlZWQsIGNvbnN0IFN0cmluZyYg
a2V5LCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykKIHsKICAgICBTdG9yYWdlQXJlYSogc3RvcmFn
ZUFyZWEgPSBmaW5kU3RvcmFnZUFyZWEoY29ubmVjdGlvbiwgc3RvcmFnZU1hcElEKTsKICAgICBp
ZiAoIXN0b3JhZ2VBcmVhKSB7CisgICAgICAgIGlmIChtX2VwaGVtZXJhbCkgeworICAgICAgICAg
ICAgaWYgKGF1dG8gc3RvcmFnZU1hcCA9IG1fZXBoZW1lcmFsU3RvcmFnZS5nZXQoc2VjdXJpdHlP
cmlnaW5EYXRhKSkgeworICAgICAgICAgICAgICAgIFN0cmluZyBvbGRWYWx1ZTsKKyAgICAgICAg
ICAgICAgICBzdG9yYWdlTWFwLT5yZW1vdmVJdGVtKGtleSwgb2xkVmFsdWUpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CiAgICAgICAgIC8vIFRoaXMgaXMgYSBzZXNzaW9uIHN0b3JhZ2UgYXJl
YSBmb3IgYSBwYWdlIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBjbG9zZWQuIElnbm9yZSBpdC4KICAg
ICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTgyMiwxMCArODQ4LDEyIEBAIHZvaWQgU3RvcmFnZU1h
bmFnZXI6OnJlbW92ZUl0ZW0oSVBDOjpDb24KICAgICBjb25uZWN0aW9uLnNlbmQoTWVzc2FnZXM6
OlN0b3JhZ2VBcmVhTWFwOjpEaWRSZW1vdmVJdGVtKHN0b3JhZ2VNYXBTZWVkLCBrZXkpLCBzdG9y
YWdlTWFwSUQpOwogfQogCi12b2lkIFN0b3JhZ2VNYW5hZ2VyOjpjbGVhcihJUEM6OkNvbm5lY3Rp
b24mIGNvbm5lY3Rpb24sIHVpbnQ2NF90IHN0b3JhZ2VNYXBJRCwgdWludDY0X3Qgc291cmNlU3Rv
cmFnZUFyZWFJRCwgdWludDY0X3Qgc3RvcmFnZU1hcFNlZWQsIGNvbnN0IFN0cmluZyYgdXJsU3Ry
aW5nKQordm9pZCBTdG9yYWdlTWFuYWdlcjo6Y2xlYXIoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0
aW9uLCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmJiBzZWN1cml0eU9yaWdpbkRhdGEsIHVp
bnQ2NF90IHN0b3JhZ2VNYXBJRCwgdWludDY0X3Qgc291cmNlU3RvcmFnZUFyZWFJRCwgdWludDY0
X3Qgc3RvcmFnZU1hcFNlZWQsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQogewogICAgIFN0b3Jh
Z2VBcmVhKiBzdG9yYWdlQXJlYSA9IGZpbmRTdG9yYWdlQXJlYShjb25uZWN0aW9uLCBzdG9yYWdl
TWFwSUQpOwogICAgIGlmICghc3RvcmFnZUFyZWEpIHsKKyAgICAgICAgaWYgKG1fZXBoZW1lcmFs
KQorICAgICAgICAgICAgbV9lcGhlbWVyYWxTdG9yYWdlLnJlbW92ZShzZWN1cml0eU9yaWdpbkRh
dGEpOwogICAgICAgICAvLyBUaGlzIGlzIGEgc2Vzc2lvbiBzdG9yYWdlIGFyZWEgZm9yIGEgcGFn
ZSB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gY2xvc2VkLiBJZ25vcmUgaXQuCiAgICAgICAgIHJldHVy
bjsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3Jh
Z2VNYW5hZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViU3Rv
cmFnZS9TdG9yYWdlTWFuYWdlci5oCShyZXZpc2lvbiAyNDIwOTkpCisrKyBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI3LDYgKzI3LDggQEAKIAogI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKICNpbmNsdWRlICJMb2Nh
bFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5T3Jp
Z2luRGF0YS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU3RvcmFnZU1hcC5oPgogI2luY2x1ZGUgPHd0
Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL0hh
c2hTZXQuaD4KQEAgLTgxLDEwICs4MywxMCBAQCBwcml2YXRlOgogICAgIHZvaWQgY3JlYXRlU2Vz
c2lvblN0b3JhZ2VNYXAoSVBDOjpDb25uZWN0aW9uJiwgdWludDY0X3Qgc3RvcmFnZU1hcElELCB1
aW50NjRfdCBzdG9yYWdlTmFtZXNwYWNlSUQsIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYm
KTsKICAgICB2b2lkIGRlc3Ryb3lTdG9yYWdlTWFwKElQQzo6Q29ubmVjdGlvbiYsIHVpbnQ2NF90
IHN0b3JhZ2VNYXBJRCk7CiAKLSAgICB2b2lkIGdldFZhbHVlcyhJUEM6OkNvbm5lY3Rpb24mLCB1
aW50NjRfdCBzdG9yYWdlTWFwSUQsIHVpbnQ2NF90IHN0b3JhZ2VNYXBTZWVkLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Jik+JiYpOwotICAgIHZv
aWQgc2V0SXRlbShJUEM6OkNvbm5lY3Rpb24mLCB1aW50NjRfdCBzdG9yYWdlQXJlYUlELCB1aW50
NjRfdCBzb3VyY2VTdG9yYWdlQXJlYUlELCB1aW50NjRfdCBzdG9yYWdlTWFwU2VlZCwgY29uc3Qg
U3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5n
KTsKLSAgICB2b2lkIHJlbW92ZUl0ZW0oSVBDOjpDb25uZWN0aW9uJiwgdWludDY0X3Qgc3RvcmFn
ZU1hcElELCB1aW50NjRfdCBzb3VyY2VTdG9yYWdlQXJlYUlELCB1aW50NjRfdCBzdG9yYWdlTWFw
U2VlZCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKTsKLSAgICB2
b2lkIGNsZWFyKElQQzo6Q29ubmVjdGlvbiYsIHVpbnQ2NF90IHN0b3JhZ2VNYXBJRCwgdWludDY0
X3Qgc291cmNlU3RvcmFnZUFyZWFJRCwgdWludDY0X3Qgc3RvcmFnZU1hcFNlZWQsIGNvbnN0IFN0
cmluZyYgdXJsU3RyaW5nKTsKKyAgICB2b2lkIGdldFZhbHVlcyhJUEM6OkNvbm5lY3Rpb24mLCBX
ZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmJiwgdWludDY0X3Qgc3RvcmFnZU1hcElELCB1aW50
NjRfdCBzdG9yYWdlTWFwU2VlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBIYXNoTWFw
PFN0cmluZywgU3RyaW5nPiYpPiYmKTsKKyAgICB2b2lkIHNldEl0ZW0oSVBDOjpDb25uZWN0aW9u
JiwgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiYsIHVpbnQ2NF90IHN0b3JhZ2VBcmVhSUQs
IHVpbnQ2NF90IHNvdXJjZVN0b3JhZ2VBcmVhSUQsIHVpbnQ2NF90IHN0b3JhZ2VNYXBTZWVkLCBj
b25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgY29uc3QgU3RyaW5nJiB1cmxT
dHJpbmcpOworICAgIHZvaWQgcmVtb3ZlSXRlbShJUEM6OkNvbm5lY3Rpb24mLCBXZWJDb3JlOjpT
ZWN1cml0eU9yaWdpbkRhdGEmJiwgdWludDY0X3Qgc3RvcmFnZU1hcElELCB1aW50NjRfdCBzb3Vy
Y2VTdG9yYWdlQXJlYUlELCB1aW50NjRfdCBzdG9yYWdlTWFwU2VlZCwgY29uc3QgU3RyaW5nJiBr
ZXksIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKTsKKyAgICB2b2lkIGNsZWFyKElQQzo6Q29ubmVj
dGlvbiYsIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYmLCB1aW50NjRfdCBzdG9yYWdlTWFw
SUQsIHVpbnQ2NF90IHNvdXJjZVN0b3JhZ2VBcmVhSUQsIHVpbnQ2NF90IHN0b3JhZ2VNYXBTZWVk
LCBjb25zdCBTdHJpbmcmIHVybFN0cmluZyk7CiAKICAgICBjbGFzcyBTdG9yYWdlQXJlYTsKICAg
ICBTdG9yYWdlQXJlYSogZmluZFN0b3JhZ2VBcmVhKElQQzo6Q29ubmVjdGlvbiYsIHVpbnQ2NF90
KSBjb25zdDsKQEAgLTEwNiw2ICsxMDgsOSBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8dWludDY0
X3QsIFJlZlB0cjxTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZT4+IG1fc2Vzc2lvblN0b3JhZ2VOYW1l
c3BhY2VzOwogCiAgICAgSGFzaE1hcDxzdGQ6OnBhaXI8SVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJ
RCwgdWludDY0X3Q+LCBSZWZQdHI8U3RvcmFnZUFyZWE+PiBtX3N0b3JhZ2VBcmVhc0J5Q29ubmVj
dGlvbjsKKworICAgIEhhc2hNYXA8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhLCBSZWY8V2Vi
Q29yZTo6U3RvcmFnZU1hcD4+IG1fZXBoZW1lcmFsU3RvcmFnZTsKKyAgICBib29sIG1fZXBoZW1l
cmFsIHsgZmFsc2UgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5tZXNzYWdlcy5pbgo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VN
YW5hZ2VyLm1lc3NhZ2VzLmluCShyZXZpc2lvbiAyNDIwOTkpCisrKyBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLm1lc3NhZ2VzLmluCSh3b3JraW5nIGNv
cHkpCkBAIC0yNiw5ICsyNiw5IEBAIG1lc3NhZ2VzIC0+IFN0b3JhZ2VNYW5hZ2VyIHsKICAgICBD
cmVhdGVTZXNzaW9uU3RvcmFnZU1hcCh1aW50NjRfdCBzdG9yYWdlTWFwSUQsIHVpbnQ2NF90IHN0
b3JhZ2VOYW1lc3BhY2VJRCwgc3RydWN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSBzZWN1
cml0eU9yaWdpbkRhdGEpIFdhbnRzQ29ubmVjdGlvbgogICAgIERlc3Ryb3lTdG9yYWdlTWFwKHVp
bnQ2NF90IHN0b3JhZ2VNYXBJRCkgV2FudHNDb25uZWN0aW9uCiAKLSAgICBHZXRWYWx1ZXModWlu
dDY0X3Qgc3RvcmFnZU1hcElELCB1aW50NjRfdCBzdG9yYWdlTWFwU2VlZCkgLT4gKEhhc2hNYXA8
U3RyaW5nLCBTdHJpbmc+IHZhbHVlcykgRGVsYXllZCBXYW50c0Nvbm5lY3Rpb24KKyAgICBHZXRW
YWx1ZXMoc3RydWN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSBzZWN1cml0eU9yaWdpbkRh
dGEsIHVpbnQ2NF90IHN0b3JhZ2VNYXBJRCwgdWludDY0X3Qgc3RvcmFnZU1hcFNlZWQpIC0+IChI
YXNoTWFwPFN0cmluZywgU3RyaW5nPiB2YWx1ZXMpIERlbGF5ZWQgV2FudHNDb25uZWN0aW9uCiAK
LSAgICBTZXRJdGVtKHVpbnQ2NF90IHN0b3JhZ2VNYXBJRCwgdWludDY0X3Qgc291cmNlU3RvcmFn
ZUFyZWFJRCwgdWludDY0X3Qgc3RvcmFnZU1hcFNlZWQsIFN0cmluZyBrZXksIFN0cmluZyB2YWx1
ZSwgU3RyaW5nIHVybFN0cmluZykgV2FudHNDb25uZWN0aW9uCi0gICAgUmVtb3ZlSXRlbSh1aW50
NjRfdCBzdG9yYWdlTWFwSUQsIHVpbnQ2NF90IHNvdXJjZVN0b3JhZ2VBcmVhSUQsIHVpbnQ2NF90
IHN0b3JhZ2VNYXBTZWVkLCBTdHJpbmcga2V5LCBTdHJpbmcgdXJsU3RyaW5nKSBXYW50c0Nvbm5l
Y3Rpb24KLSAgICBDbGVhcih1aW50NjRfdCBzdG9yYWdlTWFwSUQsIHVpbnQ2NF90IHNvdXJjZVN0
b3JhZ2VBcmVhSUQsIHVpbnQ2NF90IHN0b3JhZ2VNYXBTZWVkLCBTdHJpbmcgdXJsU3RyaW5nKSBX
YW50c0Nvbm5lY3Rpb24KKyAgICBTZXRJdGVtKHN0cnVjdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdp
bkRhdGEgc2VjdXJpdHlPcmlnaW5EYXRhLCB1aW50NjRfdCBzdG9yYWdlTWFwSUQsIHVpbnQ2NF90
IHNvdXJjZVN0b3JhZ2VBcmVhSUQsIHVpbnQ2NF90IHN0b3JhZ2VNYXBTZWVkLCBTdHJpbmcga2V5
LCBTdHJpbmcgdmFsdWUsIFN0cmluZyB1cmxTdHJpbmcpIFdhbnRzQ29ubmVjdGlvbgorICAgIFJl
bW92ZUl0ZW0oc3RydWN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSBzZWN1cml0eU9yaWdp
bkRhdGEsIHVpbnQ2NF90IHN0b3JhZ2VNYXBJRCwgdWludDY0X3Qgc291cmNlU3RvcmFnZUFyZWFJ
RCwgdWludDY0X3Qgc3RvcmFnZU1hcFNlZWQsIFN0cmluZyBrZXksIFN0cmluZyB1cmxTdHJpbmcp
IFdhbnRzQ29ubmVjdGlvbgorICAgIENsZWFyKHN0cnVjdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdp
bkRhdGEgc2VjdXJpdHlPcmlnaW5EYXRhLCB1aW50NjRfdCBzdG9yYWdlTWFwSUQsIHVpbnQ2NF90
IHNvdXJjZVN0b3JhZ2VBcmVhSUQsIHVpbnQ2NF90IHN0b3JhZ2VNYXBTZWVkLCBTdHJpbmcgdXJs
U3RyaW5nKSBXYW50c0Nvbm5lY3Rpb24KIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCShyZXZpc2lv
biAyNDIwOTkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRl
RGF0YVN0b3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDYgKzExNyw3IEBAIFdlYnNpdGVE
YXRhU3RvcmU6OldlYnNpdGVEYXRhU3RvcmUoUEFMOjoKICAgICA6IG1fc2Vzc2lvbklEKHNlc3Np
b25JRCkKICAgICAsIG1fcmVzb2x2ZWRDb25maWd1cmF0aW9uKFdlYnNpdGVEYXRhU3RvcmVDb25m
aWd1cmF0aW9uOjpjcmVhdGUoKSkKICAgICAsIG1fY29uZmlndXJhdGlvbihtX3Jlc29sdmVkQ29u
ZmlndXJhdGlvbi0+Y29weSgpKQorICAgICwgbV9zdG9yYWdlTWFuYWdlcihTdG9yYWdlTWFuYWdl
cjo6Y3JlYXRlKHsgfSkpCiAgICAgLCBtX2RldmljZUlkSGFzaFNhbHRTdG9yYWdlKERldmljZUlk
SGFzaFNhbHRTdG9yYWdlOjpjcmVhdGUoaXNQZXJzaXN0ZW50KCkgPyBtX2NvbmZpZ3VyYXRpb24t
PmRldmljZUlkSGFzaFNhbHRzU3RvcmFnZURpcmVjdG9yeSgpIDogU3RyaW5nKCkpKQogICAgICwg
bV9xdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgiY29tLmFwcGxlLldlYktpdC5XZWJzaXRlRGF0YVN0
b3JlIikpCiAjaWYgRU5BQkxFKFdFQl9BVVRITikKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VBcmVhTWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYU1hcC5jcHAJKHJldmlzaW9u
IDI0MjA5OSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VB
cmVhTWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsNyArODQsNyBAQCBTdG9yYWdlQXJlYU1h
cDo6U3RvcmFnZUFyZWFNYXAoU3RvcmFnZU5hCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBT
dG9yYWdlVHlwZTo6RXBoZW1lcmFsTG9jYWw6Ci0gICAgICAgIC8vIFRoZSBVSSBwcm9jZXNzIGlz
IG5vdCBpbnZvbHZlZCBmb3IgRXBoZW1lcmFsTG9jYWwgc3RvcmFnZXMuCisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xMzksNyArMTM5
LDcgQEAgdm9pZCBTdG9yYWdlQXJlYU1hcDo6c2V0SXRlbShGcmFtZSogc291cgogCiAgICAgbV9w
ZW5kaW5nVmFsdWVDaGFuZ2VzLmFkZChrZXkpOwogCi0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9u
KCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6U3RvcmFnZU1hbmFn
ZXI6OlNldEl0ZW0obV9zdG9yYWdlTWFwSUQsIHNvdXJjZUFyZWEtPnN0b3JhZ2VBcmVhSUQoKSwg
bV9jdXJyZW50U2VlZCwga2V5LCB2YWx1ZSwgc291cmNlRnJhbWUtPmRvY3VtZW50KCktPnVybCgp
KSwgMCk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rp
b24oKS0+c2VuZChNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXI6OlNldEl0ZW0obV9zZWN1cml0eU9y
aWdpbi0+ZGF0YSgpLCBtX3N0b3JhZ2VNYXBJRCwgc291cmNlQXJlYS0+c3RvcmFnZUFyZWFJRCgp
LCBtX2N1cnJlbnRTZWVkLCBrZXksIHZhbHVlLCBzb3VyY2VGcmFtZS0+ZG9jdW1lbnQoKS0+dXJs
KCkpLCAwKTsKIH0KIAogdm9pZCBTdG9yYWdlQXJlYU1hcDo6cmVtb3ZlSXRlbShXZWJDb3JlOjpG
cmFtZSogc291cmNlRnJhbWUsIFN0b3JhZ2VBcmVhSW1wbCogc291cmNlQXJlYSwgY29uc3QgU3Ry
aW5nJiBrZXkpCkBAIC0xNTUsNyArMTU1LDcgQEAgdm9pZCBTdG9yYWdlQXJlYU1hcDo6cmVtb3Zl
SXRlbShXZWJDb3JlOgogCiAgICAgbV9wZW5kaW5nVmFsdWVDaGFuZ2VzLmFkZChrZXkpOwogCi0g
ICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2Vu
ZChNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXI6OlJlbW92ZUl0ZW0obV9zdG9yYWdlTWFwSUQsIHNv
dXJjZUFyZWEtPnN0b3JhZ2VBcmVhSUQoKSwgbV9jdXJyZW50U2VlZCwga2V5LCBzb3VyY2VGcmFt
ZS0+ZG9jdW1lbnQoKS0+dXJsKCkpLCAwKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5w
YXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlcjo6
UmVtb3ZlSXRlbShtX3NlY3VyaXR5T3JpZ2luLT5kYXRhKCksIG1fc3RvcmFnZU1hcElELCBzb3Vy
Y2VBcmVhLT5zdG9yYWdlQXJlYUlEKCksIG1fY3VycmVudFNlZWQsIGtleSwgc291cmNlRnJhbWUt
PmRvY3VtZW50KCktPnVybCgpKSwgMCk7CiB9CiAKIHZvaWQgU3RvcmFnZUFyZWFNYXA6OmNsZWFy
KFdlYkNvcmU6OkZyYW1lKiBzb3VyY2VGcmFtZSwgU3RvcmFnZUFyZWFJbXBsKiBzb3VyY2VBcmVh
KQpAQCAtMTY0LDcgKzE2NCw3IEBAIHZvaWQgU3RvcmFnZUFyZWFNYXA6OmNsZWFyKFdlYkNvcmU6
OkZyYW0KIAogICAgIG1faGFzUGVuZGluZ0NsZWFyID0gdHJ1ZTsKICAgICBtX3N0b3JhZ2VNYXAg
PSBTdG9yYWdlTWFwOjpjcmVhdGUobV9xdW90YUluQnl0ZXMpOwotICAgIFdlYlByb2Nlc3M6OnNp
bmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlN0b3Jh
Z2VNYW5hZ2VyOjpDbGVhcihtX3N0b3JhZ2VNYXBJRCwgc291cmNlQXJlYS0+c3RvcmFnZUFyZWFJ
RCgpLCBtX2N1cnJlbnRTZWVkLCBzb3VyY2VGcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkpLCAwKTsK
KyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5z
ZW5kKE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlcjo6Q2xlYXIobV9zZWN1cml0eU9yaWdpbi0+ZGF0
YSgpLCBtX3N0b3JhZ2VNYXBJRCwgc291cmNlQXJlYS0+c3RvcmFnZUFyZWFJRCgpLCBtX2N1cnJl
bnRTZWVkLCBzb3VyY2VGcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkpLCAwKTsKIH0KIAogYm9vbCBT
dG9yYWdlQXJlYU1hcDo6Y29udGFpbnMoY29uc3QgU3RyaW5nJiBrZXkpCkBAIC0xOTMsNyArMTkz
LDcgQEAgdm9pZCBTdG9yYWdlQXJlYU1hcDo6bG9hZFZhbHVlc0lmTmVlZGVkKAogICAgIC8vIEZJ
WE1FOiBUaGlzIHNob3VsZCB1c2UgYSBzcGVjaWFsIHNlbmRTeW5jIGZsYWcgdG8gaW5kaWNhdGUg
dGhhdCB3ZSBkb24ndCB3YW50IHRvIHByb2Nlc3MgaW5jb21pbmcgbWVzc2FnZXMgd2hpbGUgd2Fp
dGluZyBmb3IgYSByZXBseS4KICAgICAvLyAoVGhpcyBmbGFnIGRvZXMgbm90IHlldCBleGlzdCku
IFNpbmNlIGxvYWRWYWx1ZXNJZk5lZWRlZCgpIGVuZHMgdXAgYmVpbmcgY2FsbGVkIGZyb20gd2l0
aGluIEphdmFTY3JpcHQgY29kZSwgcHJvY2Vzc2luZyBpbmNvbWluZyBzeW5jaHJvbm91cyBtZXNz
YWdlcwogICAgIC8vIGNvdWxkIGxlYWQgdG8gd2VpcmQgcmVlbnRyZW5jeSBidWdzIG90aGVyd2lz
ZS4KLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigp
LT5zZW5kU3luYyhNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXI6OkdldFZhbHVlcyhtX3N0b3JhZ2VN
YXBJRCwgbV9jdXJyZW50U2VlZCksIE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlcjo6R2V0VmFsdWVz
OjpSZXBseSh2YWx1ZXMpLCAwKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQ
cm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXI6Okdl
dFZhbHVlcyhtX3NlY3VyaXR5T3JpZ2luLT5kYXRhKCksIG1fc3RvcmFnZU1hcElELCBtX2N1cnJl
bnRTZWVkKSwgTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyOjpHZXRWYWx1ZXM6OlJlcGx5KHZhbHVl
cyksIDApOwogCiAgICAgbV9zdG9yYWdlTWFwID0gU3RvcmFnZU1hcDo6Y3JlYXRlKG1fcXVvdGFJ
bkJ5dGVzKTsKICAgICBtX3N0b3JhZ2VNYXAtPmltcG9ydEl0ZW1zKHZhbHVlcyk7CkluZGV4OiBT
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3Rv
cmFnZU5hbWVzcGFjZUltcGwuY3BwCShyZXZpc2lvbiAyNDIwOTkpCisrKyBTb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgUmVmPFN0b3JhZ2VOYW1lc3BhY2VJbXBsPiBTdG9yYWdl
TmFtZXNwYQogCiBSZWY8U3RvcmFnZU5hbWVzcGFjZUltcGw+IFN0b3JhZ2VOYW1lc3BhY2VJbXBs
OjpjcmVhdGVFcGhlbWVyYWxMb2NhbFN0b3JhZ2VOYW1lc3BhY2UodWludDY0X3QgaWRlbnRpZmll
ciwgdW5zaWduZWQgcXVvdGFJbkJ5dGVzKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFN0
b3JhZ2VOYW1lc3BhY2VJbXBsKFN0b3JhZ2VUeXBlOjpFcGhlbWVyYWxMb2NhbCwgaWRlbnRpZmll
ciwgbnVsbHB0ciwgcXVvdGFJbkJ5dGVzKSk7CisgICAgcmV0dXJuIGNyZWF0ZVNlc3Npb25TdG9y
YWdlTmFtZXNwYWNlKGlkZW50aWZpZXIsIHF1b3RhSW5CeXRlcyk7CiB9CiAKIFJlZjxTdG9yYWdl
TmFtZXNwYWNlSW1wbD4gU3RvcmFnZU5hbWVzcGFjZUltcGw6OmNyZWF0ZUxvY2FsU3RvcmFnZU5h
bWVzcGFjZSh1aW50NjRfdCBpZGVudGlmaWVyLCB1bnNpZ25lZCBxdW90YUluQnl0ZXMpCkBAIC03
OSw5ICs3OSw2IEBAIHZvaWQgU3RvcmFnZU5hbWVzcGFjZUltcGw6OmRpZERlc3Ryb3lTdG8KIAog
UmVmPFN0b3JhZ2VBcmVhPiBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6c3RvcmFnZUFyZWEoY29uc3Qg
U2VjdXJpdHlPcmlnaW5EYXRhJiBzZWN1cml0eU9yaWdpbikKIHsKLSAgICBpZiAobV9zdG9yYWdl
VHlwZSA9PSBTdG9yYWdlVHlwZTo6RXBoZW1lcmFsTG9jYWwpCi0gICAgICAgIHJldHVybiBlcGhl
bWVyYWxMb2NhbFN0b3JhZ2VBcmVhKHNlY3VyaXR5T3JpZ2luKTsKLQogICAgIFJlZlB0cjxTdG9y
YWdlQXJlYU1hcD4gbWFwOwogCiAgICAgYXV0byYgc2xvdCA9IG1fc3RvcmFnZUFyZWFNYXBzLmFk
ZChzZWN1cml0eU9yaWdpbiwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwpAQCAtOTQsMTA2ICs5
MSw2IEBAIFJlZjxTdG9yYWdlQXJlYT4gU3RvcmFnZU5hbWVzcGFjZUltcGw6OnMKICAgICByZXR1
cm4gU3RvcmFnZUFyZWFJbXBsOjpjcmVhdGUobWFwLnJlbGVhc2VOb25OdWxsKCkpOwogfQogCi1j
bGFzcyBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6RXBoZW1lcmFsU3RvcmFnZUFyZWEgZmluYWwgOiBw
dWJsaWMgU3RvcmFnZUFyZWEgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8RXBoZW1lcmFsU3Rv
cmFnZUFyZWE+IGNyZWF0ZShjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9yaWdpbiwgdW5zaWdu
ZWQgcXVvdGFJbkJ5dGVzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRXBo
ZW1lcmFsU3RvcmFnZUFyZWEob3JpZ2luLCBxdW90YUluQnl0ZXMpKTsKLSAgICB9Ci0KLSAgICBS
ZWY8RXBoZW1lcmFsU3RvcmFnZUFyZWE+IGNvcHkoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgRXBoZW1lcmFsU3RvcmFnZUFyZWEoKnRoaXMpKTsKLSAgICB9Ci0KLXByaXZh
dGU6Ci0gICAgRXBoZW1lcmFsU3RvcmFnZUFyZWEoY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBv
cmlnaW4sIHVuc2lnbmVkIHF1b3RhSW5CeXRlcykKLSAgICAgICAgOiBtX3NlY3VyaXR5T3JpZ2lu
RGF0YShvcmlnaW4pCi0gICAgICAgICwgbV9zdG9yYWdlTWFwKFN0b3JhZ2VNYXA6OmNyZWF0ZShx
dW90YUluQnl0ZXMpKQotICAgIHsKLSAgICB9Ci0KLSAgICBFcGhlbWVyYWxTdG9yYWdlQXJlYShF
cGhlbWVyYWxTdG9yYWdlQXJlYSYgb3RoZXIpCi0gICAgICAgIDogbV9zZWN1cml0eU9yaWdpbkRh
dGEob3RoZXIubV9zZWN1cml0eU9yaWdpbkRhdGEpCi0gICAgICAgICwgbV9zdG9yYWdlTWFwKG90
aGVyLm1fc3RvcmFnZU1hcCkKLSAgICB7Ci0gICAgfQotCi0gICAgLy8gV2ViQ29yZTo6U3RvcmFn
ZUFyZWEuCi0gICAgdW5zaWduZWQgbGVuZ3RoKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3N0
b3JhZ2VNYXAtPmxlbmd0aCgpOwotICAgIH0KLQotICAgIFN0cmluZyBrZXkodW5zaWduZWQgaW5k
ZXgpCi0gICAgewotICAgICAgICByZXR1cm4gbV9zdG9yYWdlTWFwLT5rZXkoaW5kZXgpOwotICAg
IH0KLQotICAgIFN0cmluZyBpdGVtKGNvbnN0IFN0cmluZyYga2V5KQotICAgIHsKLSAgICAgICAg
cmV0dXJuIG1fc3RvcmFnZU1hcC0+Z2V0SXRlbShrZXkpOwotICAgIH0KLQotICAgIHZvaWQgc2V0
SXRlbShGcmFtZSosIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29s
JiBxdW90YUV4Y2VwdGlvbikKLSAgICB7Ci0gICAgICAgIFN0cmluZyBvbGRWYWx1ZTsKLSAgICAg
ICAgaWYgKGF1dG8gbmV3TWFwID0gbV9zdG9yYWdlTWFwLT5zZXRJdGVtKGtleSwgdmFsdWUsIG9s
ZFZhbHVlLCBxdW90YUV4Y2VwdGlvbikpCi0gICAgICAgICAgICBtX3N0b3JhZ2VNYXAgPSBXVEZN
b3ZlKG5ld01hcCk7Ci0gICAgfQotCi0gICAgdm9pZCByZW1vdmVJdGVtKEZyYW1lKiwgY29uc3Qg
U3RyaW5nJiBrZXkpCi0gICAgewotICAgICAgICBTdHJpbmcgb2xkVmFsdWU7Ci0gICAgICAgIGlm
IChhdXRvIG5ld01hcCA9IG1fc3RvcmFnZU1hcC0+cmVtb3ZlSXRlbShrZXksIG9sZFZhbHVlKSkK
LSAgICAgICAgICAgIG1fc3RvcmFnZU1hcCA9IFdURk1vdmUobmV3TWFwKTsKLSAgICB9Ci0KLSAg
ICB2b2lkIGNsZWFyKEZyYW1lKikKLSAgICB7Ci0gICAgICAgIGlmICghbV9zdG9yYWdlTWFwLT5s
ZW5ndGgoKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBtX3N0b3JhZ2VNYXAgPSBT
dG9yYWdlTWFwOjpjcmVhdGUobV9zdG9yYWdlTWFwLT5xdW90YSgpKTsKLSAgICB9Ci0KLSAgICBi
b29sIGNvbnRhaW5zKGNvbnN0IFN0cmluZyYga2V5KQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1f
c3RvcmFnZU1hcC0+Y29udGFpbnMoa2V5KTsKLSAgICB9Ci0KLSAgICBTdG9yYWdlVHlwZSBzdG9y
YWdlVHlwZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gU3RvcmFnZVR5cGU6OkVwaGVt
ZXJhbExvY2FsOwotICAgIH0KLQotICAgIHNpemVfdCBtZW1vcnlCeXRlc1VzZWRCeUNhY2hlKCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIHZvaWQgaW5jcmVtZW50QWNj
ZXNzQ291bnQoKSB7IH0KLSAgICB2b2lkIGRlY3JlbWVudEFjY2Vzc0NvdW50KCkgeyB9Ci0gICAg
dm9pZCBjbG9zZURhdGFiYXNlSWZJZGxlKCkgeyB9Ci0KLSAgICBjb25zdCBTZWN1cml0eU9yaWdp
bkRhdGEmIHNlY3VyaXR5T3JpZ2luKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3Nl
Y3VyaXR5T3JpZ2luRGF0YTsKLSAgICB9Ci0KLSAgICBTZWN1cml0eU9yaWdpbkRhdGEgbV9zZWN1
cml0eU9yaWdpbkRhdGE7Ci0gICAgUmVmUHRyPFN0b3JhZ2VNYXA+IG1fc3RvcmFnZU1hcDsKLX07
Ci0KLVJlZjxTdG9yYWdlQXJlYT4gU3RvcmFnZU5hbWVzcGFjZUltcGw6OmVwaGVtZXJhbExvY2Fs
U3RvcmFnZUFyZWEoY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBzZWN1cml0eU9yaWdpbikKLXsK
LSAgICBhdXRvJiBzbG90ID0gbV9lcGhlbWVyYWxMb2NhbFN0b3JhZ2VBcmVhcy5hZGQoc2VjdXJp
dHlPcmlnaW4sIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKLSAgICBpZiAoIXNsb3QpCi0gICAg
ICAgIHNsb3QgPSBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6RXBoZW1lcmFsU3RvcmFnZUFyZWE6OmNy
ZWF0ZShzZWN1cml0eU9yaWdpbiwgbV9xdW90YUluQnl0ZXMpOwotICAgIEFTU0VSVChzbG90KTsK
LSAgICByZXR1cm4gKnNsb3Q7Ci19Ci0KIFJlZjxTdG9yYWdlTmFtZXNwYWNlPiBTdG9yYWdlTmFt
ZXNwYWNlSW1wbDo6Y29weShQYWdlKiBuZXdQYWdlKQogewogICAgIEFTU0VSVChtX3N0b3JhZ2VO
YW1lc3BhY2VJRCk7CkBAIC0yMDQsOSArMTAxLDYgQEAgUmVmPFN0b3JhZ2VOYW1lc3BhY2U+IFN0
b3JhZ2VOYW1lc3BhY2VJbQogICAgIEFTU0VSVChtX3N0b3JhZ2VUeXBlID09IFN0b3JhZ2VUeXBl
OjpFcGhlbWVyYWxMb2NhbCk7CiAgICAgYXV0byBuZXdOYW1lc3BhY2UgPSBhZG9wdFJlZigqbmV3
IFN0b3JhZ2VOYW1lc3BhY2VJbXBsKG1fc3RvcmFnZVR5cGUsIG1fc3RvcmFnZU5hbWVzcGFjZUlE
LCBtX3RvcExldmVsT3JpZ2luLmdldCgpLCBtX3F1b3RhSW5CeXRlcykpOwogCi0gICAgZm9yIChh
dXRvJiBpdGVyIDogbV9lcGhlbWVyYWxMb2NhbFN0b3JhZ2VBcmVhcykKLSAgICAgICAgbmV3TmFt
ZXNwYWNlLT5tX2VwaGVtZXJhbExvY2FsU3RvcmFnZUFyZWFzLnNldChpdGVyLmtleSwgaXRlci52
YWx1ZS0+Y29weSgpKTsKLQogICAgIHJldHVybiBXVEZNb3ZlKG5ld05hbWVzcGFjZSk7CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VOYW1lc3Bh
Y2VJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlN0b3Jh
Z2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuaAkocmV2aXNpb24gMjQyMDk5KQorKysgU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTksOCArNTksNiBAQCBwcml2YXRlOgogICAgIFJlZjxXZWJDb3JlOjpTdG9y
YWdlQXJlYT4gc3RvcmFnZUFyZWEoY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJikg
b3ZlcnJpZGU7CiAgICAgUmVmPFdlYkNvcmU6OlN0b3JhZ2VOYW1lc3BhY2U+IGNvcHkoV2ViQ29y
ZTo6UGFnZSopIG92ZXJyaWRlOwogCi0gICAgUmVmPFdlYkNvcmU6OlN0b3JhZ2VBcmVhPiBlcGhl
bWVyYWxMb2NhbFN0b3JhZ2VBcmVhKGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYp
OwotCiAgICAgY29uc3QgV2ViQ29yZTo6U3RvcmFnZVR5cGUgbV9zdG9yYWdlVHlwZTsKICAgICBj
b25zdCB1aW50NjRfdCBtX3N0b3JhZ2VOYW1lc3BhY2VJRDsKIApAQCAtNzAsOSArNjgsNiBAQCBw
cml2YXRlOgogICAgIGNvbnN0IHVuc2lnbmVkIG1fcXVvdGFJbkJ5dGVzOwogCiAgICAgSGFzaE1h
cDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEsIFN0b3JhZ2VBcmVhTWFwKj4gbV9zdG9yYWdl
QXJlYU1hcHM7Ci0KLSAgICBjbGFzcyBFcGhlbWVyYWxTdG9yYWdlQXJlYTsKLSAgICBIYXNoTWFw
PFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSwgUmVmUHRyPEVwaGVtZXJhbFN0b3JhZ2VBcmVh
Pj4gbV9lcGhlbWVyYWxMb2NhbFN0b3JhZ2VBcmVhczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdApJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxv
ZwkocmV2aXNpb24gMjQyMDk5KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTMgQEAKKzIwMTktMDItMjYgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5z
ZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBNb3ZlIGVwaGVtZXJhbCBsb2NhbCBzdG9yYWdlIGZy
b20gV2ViUHJvY2VzcyB0byBVSVByb2Nlc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE5NTA3NAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNDc5Mzc5
NzU+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgR2VvZmYgR2FyZW4uCisKKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Byb2Nlc3NTd2FwT25OYXZpZ2F0aW9uLm1tOgor
CiAyMDE5LTAyLTI2ICBUYWthc2hpIEtvbW9yaSAgPFRha2FzaGkuS29tb3JpQHNvbnkuY29tPgog
CiAgICAgICAgIFtDdXJsXSBMb2FkIEhUVFAgYm9keSBvZiA0MDEgcmVzcG9uc2Ugd2hlbiBBdXRo
ZW50aWNhdGlvbkNoYW5nZSBpcyBjYW5jZWxsZWQuCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL1Byb2Nlc3NTd2FwT25OYXZpZ2F0aW9uLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUHJvY2Vzc1N3YXBPbk5h
dmlnYXRpb24ubW0JKHJldmlzaW9uIDI0MjA5OSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24ubW0JKHdvcmtpbmcgY29weSkK
QEAgLTQzOTgsNiArNDM5OCw1OCBAQCBURVNUKFByb2Nlc3NTd2FwLCBTd2FwT25Mb2FkSFRNTFN0
cmluZykKICAgICBkb25lID0gZmFsc2U7CiB9CiAKK1RFU1QoUHJvY2Vzc1N3YXAsIEVwaGVtZXJh
bExvY2FsU3RvcmFnZSkKK3sKKyAgICBhdXRvIHByb2Nlc3NQb29sQ29uZmlndXJhdGlvbiA9IHBz
b25Qcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24oKTsKKyAgICBhdXRvIHByb2Nlc3NQb29sID0gYWRv
cHROUyhbW1dLUHJvY2Vzc1Bvb2wgYWxsb2NdIF9pbml0V2l0aENvbmZpZ3VyYXRpb246cHJvY2Vz
c1Bvb2xDb25maWd1cmF0aW9uLmdldCgpXSk7CisgICAgCisgICAgYXV0byB3ZWJWaWV3Q29uZmln
dXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7
CisgICAgW3dlYlZpZXdDb25maWd1cmF0aW9uIHNldFByb2Nlc3NQb29sOnByb2Nlc3NQb29sLmdl
dCgpXTsKKyAgICBbd2ViVmlld0NvbmZpZ3VyYXRpb24gc2V0V2Vic2l0ZURhdGFTdG9yZTpbV0tX
ZWJzaXRlRGF0YVN0b3JlIG5vblBlcnNpc3RlbnREYXRhU3RvcmVdXTsKKyAgICBhdXRvIGhhbmRs
ZXIgPSBhZG9wdE5TKFtbUFNPTlNjaGVtZSBhbGxvY10gaW5pdF0pOworICAgIFtoYW5kbGVyIGFk
ZE1hcHBpbmdGcm9tVVJMU3RyaW5nOkAicHNvbjovL3d3dy53ZWJraXQub3JnL2lmcmFtZS5odG1s
IiB0b0RhdGE6IjxzY3JpcHQ+d2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCdjJywnZCcpPC9z
Y3JpcHQ+Il07CisgICAgW3dlYlZpZXdDb25maWd1cmF0aW9uIHNldFVSTFNjaGVtZUhhbmRsZXI6
aGFuZGxlci5nZXQoKSBmb3JVUkxTY2hlbWU6QCJwc29uIl07CisgICAgCisgICAgYXV0byB3ZWJW
aWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0
KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOndlYlZpZXdDb25maWd1cmF0aW9uLmdldCgp
XSk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tQU09OTmF2aWdhdGlvbkRlbGVnYXRl
IGFsbG9jXSBpbml0XSk7CisgICAgW3dlYlZpZXcgc2V0TmF2aWdhdGlvbkRlbGVnYXRlOmRlbGVn
YXRlLmdldCgpXTsKKworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVx
dWVzdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJwc29uOi8vd2Via2l0Lm9yZy8iXV1d
OworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CisKKyAgICBkb25lID0gZmFs
c2U7CisgICAgW3dlYlZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0OkAid2luZG93LmxvY2FsU3RvcmFn
ZS5zZXRJdGVtKCdhJywnYicpIiBjb21wbGV0aW9uSGFuZGxlcjpeKGlkLCBOU0Vycm9yICopIHsK
KyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6
cnVuKCZkb25lKTsKKworICAgIGRvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBsb2FkUmVxdWVz
dDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAicHNv
bjovL2V4YW1wbGUuY29tLyJdXV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25l
KTsKKworICAgIGRvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxS
ZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAicHNvbjovL3dlYmtp
dC5vcmcvIl1dXTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOworCisgICAg
ZG9uZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3IGV2YWx1YXRlSmF2YVNjcmlwdDpAIndpbmRvdy5s
b2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYScpIiBjb21wbGV0aW9uSGFuZGxlcjpeKGlkIHJlc3VsdCwg
TlNFcnJvciAqKSB7CisgICAgICAgIEVYUEVDVF9UUlVFKFtAImIiIGlzRXF1YWxUb1N0cmluZzpy
ZXN1bHRdKTsKKyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQ
STo6VXRpbDo6cnVuKCZkb25lKTsKKyAgICAKKyAgICBkb25lID0gZmFsc2U7CisgICAgW3dlYlZp
ZXcgbG9hZEhUTUxTdHJpbmc6QCI8aHRtbD48aWZyYW1lIHNyYz0ncHNvbjovL3d3dy53ZWJraXQu
b3JnL2lmcmFtZS5odG1sJz48L2lmcmFtZT48L2h0bWw+IiBiYXNlVVJMOltOU1VSTCBVUkxXaXRo
U3RyaW5nOkAiaHR0cDovL3d3dy5leGFtcGxlLmNvbS8iXV07CisgICAgVGVzdFdlYktpdEFQSTo6
VXRpbDo6cnVuKCZkb25lKTsKKworICAgIGRvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBldmFs
dWF0ZUphdmFTY3JpcHQ6QCJ3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2EnKSIgY29tcGxl
dGlvbkhhbmRsZXI6XihpZCByZXN1bHQsIE5TRXJyb3IgKikgeworICAgICAgICBFWFBFQ1RfRkFM
U0UoW0AiYiIgaXNFcXVhbFRvU3RyaW5nOnJlc3VsdF0pOworICAgICAgICBkb25lID0gdHJ1ZTsK
KyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOworfQorCiBURVNU
KFByb2Nlc3NTd2FwLCBVc2VQcmV3YXJtZWRQcm9jZXNzQWZ0ZXJUZXJtaW5hdGluZ05ldHdvcmtQ
cm9jZXNzKQogewogICAgIGF1dG8gcHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uID0gcHNvblByb2Nl
c3NQb29sQ29uZmlndXJhdGlvbigpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>