<?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>157010</bug_id>
          
          <creation_ts>2016-04-25 17:51:53 -0700</creation_ts>
          <short_desc>QuotaExceededError when saving to localStorage in private mode</short_desc>
          <delta_ts>2017-08-18 07:05:43 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>Safari 9</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=157128</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Major</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dima Voytenko">dvoytenko</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>achristensen</cc>
    
    <cc>adauria</cc>
    
    <cc>bburg</cc>
    
    <cc>beidson</cc>
    
    <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dbates</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>japhet</cc>
    
    <cc>mahaveer.agarwal</cc>
    
    <cc>rbyers</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1187148</commentid>
    <comment_count>0</comment_count>
    <who name="Dima Voytenko">dvoytenko</who>
    <bug_when>2016-04-25 17:51:53 -0700</bug_when>
    <thetext>`localStorage.setItem` fails in private mode with `QuotaExceededError`. It looks the original bug item for this was https://bugs.webkit.org/show_bug.cgi?id=49329

This is now a clear and &quot;recommended&quot; way for site owners to detect user&apos;s private browsing preferences and could be considered a significant privacy issue. See for instance:

http://apple.stackexchange.com/questions/131587/how-can-a-web-site-determine-if-safari-private-browsing-is-turned-on
http://stackoverflow.com/questions/9659103/how-to-detect-users-on-an-iphone-with-private-browsing-enabled

It looks like Safari is the last remaining major browser that still allows leaking of private mode via this approach. The original bug item cited above does not discuss privacy implications. Is it possible to address?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1187154</commentid>
    <comment_count>1</comment_count>
    <who name="Rick Byers">rbyers</who>
    <bug_when>2016-04-25 18:29:13 -0700</bug_when>
    <thetext>Yeah this is probably bad, will likely lead to some sketchy websites refusing to work (or otherwise complaining to the user) in private mode.  I just filed a related issue on blink: https://crbug.com/606633</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1187621</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2016-04-26 19:07:52 -0700</bug_when>
    <thetext>&lt;rdar://problem/25947768&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1187760</commentid>
    <comment_count>3</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-04-27 09:03:31 -0700</bug_when>
    <thetext>I agree this is less than ideal.

However, &quot;pretending to store something permanently&quot; sounds pretty bad, too.

Perhaps you have ideas on how we could both:
1 - Maintain the contract that localStorage is durable
2 - Not store things on localStorage in private browsing?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1188007</commentid>
    <comment_count>4</comment_count>
    <who name="Dima Voytenko">dvoytenko</who>
    <bug_when>2016-04-27 16:33:50 -0700</bug_when>
    <thetext>I believe other browsers simply make localStorage equivalent sessionStorage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1188016</commentid>
    <comment_count>5</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-04-27 16:48:32 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; I believe other browsers simply make localStorage equivalent sessionStorage.

Not entirely accurate, as I assume it&apos;s still global...

When we implement an API we try to think it through and reflect on the contract it represents.

localStorage is supposed to be persistent.

So, yes, I already understood that other browsers ignore that constraint.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1188027</commentid>
    <comment_count>6</comment_count>
    <who name="Dima Voytenko">dvoytenko</who>
    <bug_when>2016-04-27 17:07:09 -0700</bug_when>
    <thetext>The issue with just ignoring writes is that it&apos;s no different really from throwing an exception from the point of view of private mode leak. E.g.

```
function isPrivateMode() {
  try {
    localStorage.setItem(&apos;a&apos;, &apos;b&apos;);
    return false;
  } catch(e) {
    return true;
  }
}
```

vs

```
function isPrivateMode() {
  localStorage.setItem(&apos;a&apos;, &apos;b&apos;);
  return localStorage.getItem(&apos;a&apos;) != &apos;b&apos;;
}
```</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1188056</commentid>
    <comment_count>7</comment_count>
    <who name="Dima Voytenko">dvoytenko</who>
    <bug_when>2016-04-27 18:17:59 -0700</bug_when>
    <thetext>Also, re:permanent storage. From the page author&apos;s point of view, they can only judge permanence of storage per user, which they can alternatively track via cookies. So, resetting localStorage when cookies are reset (as when they close private mode) makes sense.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1188093</commentid>
    <comment_count>8</comment_count>
    <who name="Rick Byers">rbyers</who>
    <bug_when>2016-04-27 19:04:37 -0700</bug_when>
    <thetext>Right, in chromium I believe the model is that incognito mode is like a separate user profile that is automatically removed when the window is closed.  This doesn&apos;t break the API contract around &quot;durability&quot; any more than a user explicitly clearing their browser state (the next visit is like a new user again).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1188253</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-04-28 08:41:05 -0700</bug_when>
    <thetext>We do understand that Chrome’s Incognito model is &quot;temporary user profile that is removed when window is closed&quot;.

Our concern for the Private Browsing features that pre-date Incognito was that if a website stored important, document-like data in localStorage, this because could be a problem, not for the website developer, but for the web browser user. Even though the person is using a private browsing mode they might not understand that closing a window or quitting the web browser has a side effect of deleting all their documents. It seemed that getting an error earlier would help prevent someone from building up some work that then is unexpectedly lost.

In practice, the WebKit engineers may be misunderstanding the type of data that websites would store in localStorage. Or misunderstanding the expectations people will bring to private browsing features.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1188270</commentid>
    <comment_count>10</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-04-28 09:34:52 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; The issue with just ignoring writes is that it&apos;s no different really from
&gt; throwing an exception from the point of view of private mode leak. E.g.
&gt; 
&gt; ```
&gt; function isPrivateMode() {
&gt;   try {
&gt;     localStorage.setItem(&apos;a&apos;, &apos;b&apos;);
&gt;     return false;
&gt;   } catch(e) {
&gt;     return true;
&gt;   }
&gt; }
&gt; ```
&gt; 
&gt; vs
&gt; 
&gt; ```
&gt; function isPrivateMode() {
&gt;   localStorage.setItem(&apos;a&apos;, &apos;b&apos;);
&gt;   return localStorage.getItem(&apos;a&apos;) != &apos;b&apos;;
&gt; }
&gt; ```

I never suggested ignoring writes. Of course that&apos;s silly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1188276</commentid>
    <comment_count>11</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-04-28 09:48:12 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Also, re:permanent storage. From the page author&apos;s point of view, they can
&gt; only judge permanence of storage per user, which they can alternatively
&gt; track via cookies. So, resetting localStorage when cookies are reset (as
&gt; when they close private mode) makes sense.

We thought about this very carefully when we implemented localStorage for the browser before anybody but the Gears plugin

Cookies are a completely different class of storage from localStorage.

Browsers are allowed to make all cookies session cookies, ditch cookies in FIFO order to make room for new ones, ditch big cookies first, ditch cookies in any arbitrary order, decide not to store a cookie &quot;just because it looks weird&quot;, etc etc, and still match the spirit of the spec.

LocalStorage was meant to be durable.

All of this said, it&apos;s a shame that none of the other browsers considered this the same way.

Note, I&apos;m not *defending* how our behavior reveals private browsing state. Of course that&apos;s terrible.

I am lamenting that nobody worked together to try to come up with something better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1188277</commentid>
    <comment_count>12</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-04-28 09:49:25 -0700</bug_when>
    <thetext>Let me posit this:

If the localStorage area is legitimately full, we&apos;re legitimately expected to throw a QuotaExceededError exception.

How can we possibly distinguish that from the &quot;oh, this is webkit in private browsing&quot; detection that is rampant?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1188291</commentid>
    <comment_count>13</comment_count>
    <who name="Dima Voytenko">dvoytenko</who>
    <bug_when>2016-04-28 10:14:05 -0700</bug_when>
    <thetext>&gt; If the localStorage area is legitimately full, we&apos;re legitimately expected to throw a QuotaExceededError exception.

This probably has to do with probability. I assume page authors simply judge that &quot;if it&apos;s a Safari and localStorage.setItem() fails with QuotaExceededError, then it&apos;s most likely a private mode&quot;. As in &quot;false positives are possible, but rare enough&quot;. Obviously, this probably makes things a bit worse for the user.

&gt; nobody worked together to try to come up with something better

I&apos;m not super familiar with the standards process for this kind of spec. It seems to me that in this day and age some discussion of how an API should behave in private mode has to be part of the spec. My quick search shows that it isn&apos;t at this time which is disappointing. Would you consider talking to the spec authors to hear their recommendations?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1188295</commentid>
    <comment_count>14</comment_count>
    <who name="Dima Voytenko">dvoytenko</who>
    <bug_when>2016-04-28 10:26:59 -0700</bug_when>
    <thetext>For posterity, I filed https://github.com/whatwg/html/issues/1143</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1188317</commentid>
    <comment_count>15</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-04-28 11:16:46 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; 
&gt; Would you consider talking to the spec authors to hear their recommendations?

I was one of the spec authors. Not listed as an editor, but plenty of feedback given while implementing.

But, it&apos;s true - back in 2007-2008 we didn&apos;t automatically talk about private browsing, as Safari was one of the few that had it, and IE, for example, didn&apos;t.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1188358</commentid>
    <comment_count>16</comment_count>
    <who name="Dima Voytenko">dvoytenko</who>
    <bug_when>2016-04-28 13:16:59 -0700</bug_when>
    <thetext>Awesome! I posted above, I filed a bug against the spec: https://github.com/whatwg/html/issues/1143

Looking forward hearing what you decide.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1210413</commentid>
    <comment_count>17</comment_count>
    <who name="test">test5000gb</who>
    <bug_when>2016-07-13 04:54:32 -0700</bug_when>
    <thetext>Safari 10 and Safari Technology Preview 8 not fixed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1250308</commentid>
    <comment_count>18</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2016-11-11 11:19:17 -0800</bug_when>
    <thetext>Per discussion with Brady, the fix will be to make localStorage in-memory for ephemeral sessions. This means that in private browsing and automation (i.e., WebDriver), we&apos;ll allow read/write and the contents do not persist.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1250526</commentid>
    <comment_count>19</comment_count>
    <who name="Dima Voytenko">dvoytenko</who>
    <bug_when>2016-11-11 17:12:30 -0800</bug_when>
    <thetext>Awesome! Thanks a lot!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296845</commentid>
    <comment_count>20</comment_count>
      <attachid>306941</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2017-04-12 14:44:44 -0700</bug_when>
    <thetext>Created attachment 306941
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296850</commentid>
    <comment_count>21</comment_count>
      <attachid>306941</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-04-12 14:50:53 -0700</bug_when>
    <thetext>Comment on attachment 306941
Patch

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

&gt; Source/WebCore/loader/EmptyClients.cpp:680
&gt; +RefPtr&lt;StorageNamespace&gt; EmptyStorageNamespaceProvider::createEphemeralLocalStorageNamespace(Page&amp;, unsigned)

Why doesn&apos;t this return a Ref?

&gt; Source/WebKit/Storage/StorageNamespaceImpl.cpp:103
&gt; +    for (auto iter : m_storageAreaMap)

Do we need auto&amp; here?

&gt; Source/WebKit2/WebProcess/Storage/StorageNamespaceImpl.cpp:105
&gt; +    RefPtr&lt;EphemeralStorageArea&gt; copy()

Ref</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296865</commentid>
    <comment_count>22</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2017-04-12 15:27:22 -0700</bug_when>
    <thetext>(In reply to Alex Christensen from comment #21)
&gt; Comment on attachment 306941 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=306941&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/loader/EmptyClients.cpp:680
&gt; &gt; +RefPtr&lt;StorageNamespace&gt; EmptyStorageNamespaceProvider::createEphemeralLocalStorageNamespace(Page&amp;, unsigned)
&gt; 
&gt; Why doesn&apos;t this return a Ref?

Because the others don&apos;t, and I didn&apos;t want to expand the scope of the patch.

&gt; 
&gt; &gt; Source/WebKit/Storage/StorageNamespaceImpl.cpp:103
&gt; &gt; +    for (auto iter : m_storageAreaMap)
&gt; 
&gt; Do we need auto&amp; here?

Sure.

&gt; 
&gt; &gt; Source/WebKit2/WebProcess/Storage/StorageNamespaceImpl.cpp:105
&gt; &gt; +    RefPtr&lt;EphemeralStorageArea&gt; copy()
&gt; 
&gt; Ref

We&apos;ll see.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296867</commentid>
    <comment_count>23</comment_count>
      <attachid>306946</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2017-04-12 15:28:42 -0700</bug_when>
    <thetext>Created attachment 306946
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296964</commentid>
    <comment_count>24</comment_count>
      <attachid>306946</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-04-12 23:38:22 -0700</bug_when>
    <thetext>Comment on attachment 306946
Patch

Clearing flags on attachment: 306946

Committed r215315: &lt;http://trac.webkit.org/changeset/215315&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296965</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-04-12 23:38:24 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296981</commentid>
    <comment_count>26</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2017-04-13 02:49:26 -0700</bug_when>
    <thetext>&lt;rdar://problem/19197190&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1340036</commentid>
    <comment_count>27</comment_count>
    <who name="Mahaveer">mahaveer.agarwal</who>
    <bug_when>2017-08-18 04:48:51 -0700</bug_when>
    <thetext>I have updated my mac OS X EI Capitan(10.11.6) safari version to 10.1.2(11603.3.8) but still in browser private mode getting the same error. Can anybody please tell me how could i resolve this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1340047</commentid>
    <comment_count>28</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2017-08-18 07:05:43 -0700</bug_when>
    <thetext>(In reply to Mahaveer from comment #27)
&gt; I have updated my mac OS X EI Capitan(10.11.6) safari version to
&gt; 10.1.2(11603.3.8) but still in browser private mode getting the same error.
&gt; Can anybody please tell me how could i resolve this?

AFAIK, nobody claimed this would be fixed on El Cap 10.11.6 or in Safari 10.1.2 on any platform.

Have you tried in a WebKit nightly, Safari Technology Preview, or a macOS High Sierra beta?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306941</attachid>
            <date>2017-04-12 14:44:44 -0700</date>
            <delta_ts>2017-04-12 15:28:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-157010-20170412144445.patch</filename>
            <type>text/plain</type>
            <size>46339</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1MDk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTFjNDk0MTk2NzkyM2M3
YzYyM2JkNjUwMTkyNTFjYzlmYzRlNDJhMC4uZTRkYmMwOTBkYTkwZmI5NzUwNjg3NjM0MTFjMzQx
YTllN2Y5YmE0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDE3LTA0LTEyICBCcmFk
eSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBRdW90YUV4Y2VlZGVkRXJy
b3Igd2hlbiBzYXZpbmcgdG8gbG9jYWxTdG9yYWdlIGluIHByaXZhdGUgbW9kZS4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NzAxMAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAoQ292
ZXJlZCBieSBjaGFuZ2VzIHRvIGV4aXN0aW5nIHRlc3QpLgorICAgICAgICAKKyAgICAgICAgTG9j
YWxTdG9yYWdlIGluIHByaXZhdGUgYnJvd3NpbmcgaXMgbm93IGVmZmVjdGl2ZWx5IFNlc3Npb25T
dG9yYWdlLgorICAgICAgICBJdCdzIGVwaGVtZXJhbCwgcGVyLXRhYiwgYW5kIGNvcGllZCBvdmVy
IHRvIHRhYnMgd2luZG93Lm9wZW4oKSdlZCBmcm9tIHRoZSBjdXJyZW50LgorCisgICAgICAgICog
bG9hZGVyL0VtcHR5Q2xpZW50cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eVN0b3JhZ2VO
YW1lc3BhY2VQcm92aWRlcjo6Y3JlYXRlRXBoZW1lcmFsTG9jYWxTdG9yYWdlTmFtZXNwYWNlKToK
KworICAgICAgICAqIHBhZ2UvQ2hyb21lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZTo6
Y3JlYXRlV2luZG93KToKKworICAgICAgICAqIHBhZ2UvUGFnZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpQYWdlOjplcGhlbWVyYWxMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGFn
ZTo6c2V0RXBoZW1lcmFsTG9jYWxTdG9yYWdlKToKKyAgICAgICAgKiBwYWdlL1BhZ2UuaDoKKwor
ICAgICAgICAqIHBhZ2UvU2VjdXJpdHlPcmlnaW5EYXRhLmg6CisKKyAgICAgICAgKiBzdG9yYWdl
L1N0b3JhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZTo6bGVuZ3RoKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0b3JhZ2U6OmtleSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlOjpn
ZXRJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2U6OnNldEl0ZW0pOgorICAgICAgICAo
V2ViQ29yZTo6U3RvcmFnZTo6cmVtb3ZlSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdl
OjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlOjpjb250YWlucyk6CisgICAgICAg
IChXZWJDb3JlOjpTdG9yYWdlOjppc0Rpc2FibGVkQnlQcml2YXRlQnJvd3NpbmcpOiBEZWxldGVk
LgorCisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlTWFwLmg6CisKKyAgICAgICAgKiBzdG9yYWdl
L1N0b3JhZ2VOYW1lc3BhY2VQcm92aWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdl
TmFtZXNwYWNlUHJvdmlkZXI6OmxvY2FsU3RvcmFnZUFyZWEpOgorICAgICAgICAqIHN0b3JhZ2Uv
U3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyLmg6CisKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VU
eXBlLmg6CisgICAgICAgIChXZWJDb3JlOjppc0xvY2FsU3RvcmFnZSk6CisgICAgICAgIChXZWJD
b3JlOjppc1BlcnNpc3RlbnRMb2NhbFN0b3JhZ2UpOgorCiAyMDE3LTA0LTA3ICBCcmVudCBGdWxn
aGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYktpdCBzaG91bGQgcGVyY2Vu
dCBlbmNvZGUgc2luZ2xlIHF1b3RlcyBpbiBxdWVyeSBzdHJpbmdzCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDJiMzli
OThjNzQ5Njk2NjRkMjcwZGFjNTgwOTc3ZjEyOTVkMWZiZmUuLjY2ODRiM2U3Y2YzZWUwNzk4NzMw
YmM5MTg3YWI1NTE0MjcxZDlkZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTctMDQt
MTIgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIFF1b3RhRXhj
ZWVkZWRFcnJvciB3aGVuIHNhdmluZyB0byBsb2NhbFN0b3JhZ2UgaW4gcHJpdmF0ZSBtb2RlLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3MDEwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTdG9yYWdl
L1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU5hbWVz
cGFjZUltcGw6OmNyZWF0ZUVwaGVtZXJhbExvY2FsU3RvcmFnZU5hbWVzcGFjZSk6CisgICAgICAg
IChXZWJLaXQ6OlN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpTdG9yYWdlTmFtZXNwYWNlSW1wbCk6Cisg
ICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VOYW1lc3BhY2VJbXBsOjp+U3RvcmFnZU5hbWVzcGFjZUlt
cGwpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTmFtZXNwYWNlSW1wbDo6Y29weSk6CisgICAg
ICAgIChXZWJLaXQ6OlN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpjbG9zZSk6CisgICAgICAgICogU3Rv
cmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5oOgorCisgICAgICAgICogU3RvcmFnZS9XZWJTdG9y
YWdlTmFtZXNwYWNlUHJvdmlkZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJTdG9yYWdlTmFt
ZXNwYWNlUHJvdmlkZXI6OmNyZWF0ZUVwaGVtZXJhbExvY2FsU3RvcmFnZU5hbWVzcGFjZSk6Cisg
ICAgICAgICogU3RvcmFnZS9XZWJTdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIuaDoKKwogMjAxNy0w
NC0wNiAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIFdl
YiBJbnNwZWN0b3I6IE9ubHkgQ2FwdHVyZSBFeHRyYSBOZXR3b3JrIExvYWQgTWV0cmljcyB3aGVu
IHRoZXJlIGlzIGEgV2ViIEluc3BlY3RvciBGcm9udGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IGE1MmNkN2Fj
ZGQxMjI2M2U2NWFmMTk2YmEwMDMzMDIxMzhiOTFlNjYuLjczNDMzNmM4MGFjY2ZhZTdkMjFkYTdj
OTY2MzFjN2M2ZGE1NTI4NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAxNy0wNC0x
MiAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAgUXVvdGFFeGNl
ZWRlZEVycm9yIHdoZW4gc2F2aW5nIHRvIGxvY2FsU3RvcmFnZSBpbiBwcml2YXRlIG1vZGUuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTcwMTAKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlByb2Nl
c3MvU3RvcmFnZS9TdG9yYWdlQXJlYU1hcC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VB
cmVhTWFwOjpTdG9yYWdlQXJlYU1hcCk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhTWFw
Ojp+U3RvcmFnZUFyZWFNYXApOgorCisgICAgICAgICogV2ViUHJvY2Vzcy9TdG9yYWdlL1N0b3Jh
Z2VOYW1lc3BhY2VJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU5hbWVzcGFjZUlt
cGw6OmNyZWF0ZUVwaGVtZXJhbExvY2FsU3RvcmFnZU5hbWVzcGFjZSk6CisgICAgICAgIChXZWJL
aXQ6OlN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpzdG9yYWdlQXJlYSk6CisgICAgICAgIChXZWJLaXQ6
OlN0b3JhZ2VOYW1lc3BhY2VJbXBsOjplcGhlbWVyYWxMb2NhbFN0b3JhZ2VBcmVhKToKKyAgICAg
ICAgKFdlYktpdDo6U3RvcmFnZU5hbWVzcGFjZUltcGw6OmNvcHkpOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvU3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5oOgorCisgICAgICAgICogV2ViUHJv
Y2Vzcy9TdG9yYWdlL1dlYlN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlci5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYlN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlcjo6Y3JlYXRlRXBoZW1lcmFsTG9jYWxT
dG9yYWdlTmFtZXNwYWNlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1N0b3JhZ2UvV2ViU3RvcmFn
ZU5hbWVzcGFjZVByb3ZpZGVyLmg6CisKIDIwMTctMDQtMDcgIENhcmxvcyBHYXJjaWEgQ2FtcG9z
ICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIFVwZGF0ZSB0aGUgcHJpb3Jp
dGllcyB1c2VkIGluIGdsaWIgbWFpbiBsb29wIHNvdXJjZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Vt
cHR5Q2xpZW50cy5jcHAKaW5kZXggYjE1MDgzMjMzZDhiNDMyYTkwMTlkYzc5ZWI0ODA4Y2Y4MjFi
MzlmZC4uNjY2MWFjNzA5OWZkYzY4NjQxYzI0MTc2MTA3NWEzN2QxNDFkYjNmNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5jcHAKQEAgLTU2Miw2ICs1NjIsNyBAQCBjbGFzcyBF
bXB0eVN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlciBmaW5hbCA6IHB1YmxpYyBTdG9yYWdlTmFtZXNw
YWNlUHJvdmlkZXIgewogCiAgICAgUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IGNyZWF0ZVNlc3Np
b25TdG9yYWdlTmFtZXNwYWNlKFBhZ2UmLCB1bnNpZ25lZCkgZmluYWw7CiAgICAgUmVmUHRyPFN0
b3JhZ2VOYW1lc3BhY2U+IGNyZWF0ZUxvY2FsU3RvcmFnZU5hbWVzcGFjZSh1bnNpZ25lZCkgZmlu
YWw7CisgICAgUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IGNyZWF0ZUVwaGVtZXJhbExvY2FsU3Rv
cmFnZU5hbWVzcGFjZShQYWdlJiwgdW5zaWduZWQpIGZpbmFsOwogICAgIFJlZlB0cjxTdG9yYWdl
TmFtZXNwYWNlPiBjcmVhdGVUcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UoU2VjdXJpdHlP
cmlnaW4mLCB1bnNpZ25lZCkgZmluYWw7CiB9OwogCkBAIC02NzYsNiArNjc3LDExIEBAIFJlZlB0
cjxTdG9yYWdlTmFtZXNwYWNlPiBFbXB0eVN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlcjo6Y3JlYXRl
TG9jYWxTdG9yYWdlTmFtZXNwCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRW1wdHlTdG9yYWdl
TmFtZXNwYWNlKTsKIH0KIAorUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IEVtcHR5U3RvcmFnZU5h
bWVzcGFjZVByb3ZpZGVyOjpjcmVhdGVFcGhlbWVyYWxMb2NhbFN0b3JhZ2VOYW1lc3BhY2UoUGFn
ZSYsIHVuc2lnbmVkKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEVtcHR5U3RvcmFnZU5h
bWVzcGFjZSk7Cit9CisKIFJlZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiBFbXB0eVN0b3JhZ2VOYW1l
c3BhY2VQcm92aWRlcjo6Y3JlYXRlVHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlKFNlY3Vy
aXR5T3JpZ2luJiwgdW5zaWduZWQpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRW1wdHlT
dG9yYWdlTmFtZXNwYWNlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21l
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAppbmRleCBlMzYzZjQzYWRjNmY1
YmNlNDkwODQ0MDk3NTM3NDZhYTg2MWU4NGRkLi5hNWIwMGFlMGIxNjQxYTNkMjU4NjA3OTFlZmJk
ZGVhZjBmMWFiNGU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCkBAIC0xOTIsOCArMTkyLDEyIEBA
IFBhZ2UqIENocm9tZTo6Y3JlYXRlV2luZG93KEZyYW1lJiBmcmFtZSwgY29uc3QgRnJhbWVMb2Fk
UmVxdWVzdCYgcmVxdWVzdCwgY29uc3QKICAgICBQYWdlKiBuZXdQYWdlID0gbV9jbGllbnQuY3Jl
YXRlV2luZG93KGZyYW1lLCByZXF1ZXN0LCBmZWF0dXJlcywgYWN0aW9uKTsKICAgICBpZiAoIW5l
d1BhZ2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOworCiAgICAgaWYgKGF1dG8qIG9sZFNlc3Np
b25TdG9yYWdlID0gbV9wYWdlLnNlc3Npb25TdG9yYWdlKGZhbHNlKSkKICAgICAgICAgbmV3UGFn
ZS0+c2V0U2Vzc2lvblN0b3JhZ2Uob2xkU2Vzc2lvblN0b3JhZ2UtPmNvcHkobmV3UGFnZSkpOwor
ICAgIGlmIChhdXRvKiBvbGRFcGhlbWVyYWxMb2NhbFN0b3JhZ2UgPSBtX3BhZ2UuZXBoZW1lcmFs
TG9jYWxTdG9yYWdlKGZhbHNlKSkKKyAgICAgICAgbmV3UGFnZS0+c2V0RXBoZW1lcmFsTG9jYWxT
dG9yYWdlKG9sZEVwaGVtZXJhbExvY2FsU3RvcmFnZS0+Y29weShuZXdQYWdlKSk7CisKICAgICBy
ZXR1cm4gbmV3UGFnZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKaW5kZXggMDFkYTBjMjVjNjc2YTAx
Mzk1ZjBhZWRlMGU0MWU4YjllODQ4MmIzNi4uNzNlZjA4MWE3MzY2OTM5ODZhYzBkMDQ0ZTZmZDFi
ZDgxY2M2MDZhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCkBAIC0xMzExLDYgKzEzMTEsMTkgQEAgdm9p
ZCBQYWdlOjpzZXRTZXNzaW9uU3RvcmFnZShSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4mJiBuZXdT
dG9yYWdlKQogICAgIG1fc2Vzc2lvblN0b3JhZ2UgPSBXVEZNb3ZlKG5ld1N0b3JhZ2UpOwogfQog
CitTdG9yYWdlTmFtZXNwYWNlKiBQYWdlOjplcGhlbWVyYWxMb2NhbFN0b3JhZ2UoYm9vbCBvcHRp
b25hbENyZWF0ZSkKK3sKKyAgICBpZiAoIW1fZXBoZW1lcmFsTG9jYWxTdG9yYWdlICYmIG9wdGlv
bmFsQ3JlYXRlKQorICAgICAgICBtX2VwaGVtZXJhbExvY2FsU3RvcmFnZSA9IG1fc3RvcmFnZU5h
bWVzcGFjZVByb3ZpZGVyLT5jcmVhdGVFcGhlbWVyYWxMb2NhbFN0b3JhZ2VOYW1lc3BhY2UoKnRo
aXMsIG1fc2V0dGluZ3MtPnNlc3Npb25TdG9yYWdlUXVvdGEoKSk7CisKKyAgICByZXR1cm4gbV9l
cGhlbWVyYWxMb2NhbFN0b3JhZ2UuZ2V0KCk7Cit9CisKK3ZvaWQgUGFnZTo6c2V0RXBoZW1lcmFs
TG9jYWxTdG9yYWdlKFJlZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiYmIG5ld1N0b3JhZ2UpCit7Cisg
ICAgbV9lcGhlbWVyYWxMb2NhbFN0b3JhZ2UgPSBXVEZNb3ZlKG5ld1N0b3JhZ2UpOworfQorCiBi
b29sIFBhZ2U6Omhhc0N1c3RvbUhUTUxUb2tlbml6ZXJUaW1lRGVsYXkoKSBjb25zdAogewogICAg
IHJldHVybiBtX3NldHRpbmdzLT5tYXhQYXJzZUR1cmF0aW9uKCkgIT0gLTE7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5o
CmluZGV4IGMxNWFlZTY0NGRlNWViNTVjZTEwY2I2ZTYxMDUwOWE2MjMyYjI5OTIuLmExNDI5ODZm
YjExM2FlZTQxMjhmZDgwNDJiNTI5YjRiNTBjMDJjZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCkBAIC00MTQs
NiArNDE0LDkgQEAgcHVibGljOgogICAgIFN0b3JhZ2VOYW1lc3BhY2UqIHNlc3Npb25TdG9yYWdl
KGJvb2wgb3B0aW9uYWxDcmVhdGUgPSB0cnVlKTsKICAgICB2b2lkIHNldFNlc3Npb25TdG9yYWdl
KFJlZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiYmKTsKIAorICAgIFN0b3JhZ2VOYW1lc3BhY2UqIGVw
aGVtZXJhbExvY2FsU3RvcmFnZShib29sIG9wdGlvbmFsQ3JlYXRlID0gdHJ1ZSk7CisgICAgdm9p
ZCBzZXRFcGhlbWVyYWxMb2NhbFN0b3JhZ2UoUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+JiYpOwor
CiAgICAgYm9vbCBoYXNDdXN0b21IVE1MVG9rZW5pemVyVGltZURlbGF5KCkgY29uc3Q7CiAgICAg
ZG91YmxlIGN1c3RvbUhUTUxUb2tlbml6ZXJUaW1lRGVsYXkoKSBjb25zdDsKIApAQCAtNzE2LDYg
KzcxOSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2NhblN0YXJ0TWVkaWE7CiAKICAgICBSZWZQ
dHI8U3RvcmFnZU5hbWVzcGFjZT4gbV9zZXNzaW9uU3RvcmFnZTsKKyAgICBSZWZQdHI8U3RvcmFn
ZU5hbWVzcGFjZT4gbV9lcGhlbWVyYWxMb2NhbFN0b3JhZ2U7CiAKICNpZiBFTkFCTEUoVklFV19N
T0RFX0NTU19NRURJQSkKICAgICBWaWV3TW9kZSBtX3ZpZXdNb2RlOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbkRhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvU2VjdXJpdHlPcmlnaW5EYXRhLmgKaW5kZXggMjEwYTQ5ZWE0ZDNkMzVkNTdlYmZiMmU1MzM0
ZWI1NzIxNzg1NGE1Zi4uODJkZTA5Njk5NGYxNmRjM2JkYTFmYWQ2YjQxZGFiYTMxNjcyOWE1NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbkRhdGEuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luRGF0YS5oCkBAIC03OCw3ICs3OCw3
IEBAIHN0cnVjdCBTZWN1cml0eU9yaWdpbkRhdGEgewogICAgIH0KICAgICAKICNpZiAhTE9HX0RJ
U0FCTEVECi0gICAgU3RyaW5nIGRlYnVnU3RyaW5nKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBP
UlQgU3RyaW5nIGRlYnVnU3RyaW5nKCkgY29uc3Q7CiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL1N0b3JhZ2UuY3BwCmluZGV4IGE1MzhlMTc1NTg5ODk3YjNhMjAzNTQ4ZDEwZTU4ZDE0N2Uw
MDJkNGIuLjExZjkxOWE4MjExZmY2NDM1NWNjYjE0NTA1NTE4NzcwNDdlMzA4MjIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9TdG9yYWdlLmNwcApAQCAtNjMsOSArNjMsNiBAQCBFeGNlcHRpb25Pcjx1bnNp
Z25lZD4gU3RvcmFnZTo6bGVuZ3RoKCkgY29uc3QKICAgICBpZiAoIW1fc3RvcmFnZUFyZWEtPmNh
bkFjY2Vzc1N0b3JhZ2UobV9mcmFtZSkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTRUNV
UklUWV9FUlIgfTsKIAotICAgIGlmIChpc0Rpc2FibGVkQnlQcml2YXRlQnJvd3NpbmcoKSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KICAgICByZXR1cm4gbV9zdG9yYWdlQXJlYS0+bGVuZ3RoKCk7CiB9
CiAKQEAgLTc0LDkgKzcxLDYgQEAgRXhjZXB0aW9uT3I8U3RyaW5nPiBTdG9yYWdlOjprZXkodW5z
aWduZWQgaW5kZXgpIGNvbnN0CiAgICAgaWYgKCFtX3N0b3JhZ2VBcmVhLT5jYW5BY2Nlc3NTdG9y
YWdlKG1fZnJhbWUpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU0VDVVJJVFlfRVJSIH07
CiAKLSAgICBpZiAoaXNEaXNhYmxlZEJ5UHJpdmF0ZUJyb3dzaW5nKCkpCi0gICAgICAgIHJldHVy
biBTdHJpbmcoKTsKLQogICAgIHJldHVybiBtX3N0b3JhZ2VBcmVhLT5rZXkoaW5kZXgpOwogfQog
CkBAIC04NSw5ICs3OSw2IEBAIEV4Y2VwdGlvbk9yPFN0cmluZz4gU3RvcmFnZTo6Z2V0SXRlbShj
b25zdCBTdHJpbmcmIGtleSkgY29uc3QKICAgICBpZiAoIW1fc3RvcmFnZUFyZWEtPmNhbkFjY2Vz
c1N0b3JhZ2UobV9mcmFtZSkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTRUNVUklUWV9F
UlIgfTsKIAotICAgIGlmIChpc0Rpc2FibGVkQnlQcml2YXRlQnJvd3NpbmcoKSkKLSAgICAgICAg
cmV0dXJuIFN0cmluZygpOwotCiAgICAgcmV0dXJuIG1fc3RvcmFnZUFyZWEtPml0ZW0oa2V5KTsK
IH0KIApAQCAtOTYsOSArODcsNiBAQCBFeGNlcHRpb25Pcjx2b2lkPiBTdG9yYWdlOjpzZXRJdGVt
KGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgIGlmICghbV9zdG9y
YWdlQXJlYS0+Y2FuQWNjZXNzU3RvcmFnZShtX2ZyYW1lKSkKICAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IFNFQ1VSSVRZX0VSUiB9OwogCi0gICAgaWYgKGlzRGlzYWJsZWRCeVByaXZhdGVCcm93
c2luZygpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgUVVPVEFfRVhDRUVERURfRVJSIH07
Ci0KICAgICBib29sIHF1b3RhRXhjZXB0aW9uID0gZmFsc2U7CiAgICAgbV9zdG9yYWdlQXJlYS0+
c2V0SXRlbShtX2ZyYW1lLCBrZXksIHZhbHVlLCBxdW90YUV4Y2VwdGlvbik7CiAgICAgaWYgKHF1
b3RhRXhjZXB0aW9uKQpAQCAtMTExLDkgKzk5LDYgQEAgRXhjZXB0aW9uT3I8dm9pZD4gU3RvcmFn
ZTo6cmVtb3ZlSXRlbShjb25zdCBTdHJpbmcmIGtleSkKICAgICBpZiAoIW1fc3RvcmFnZUFyZWEt
PmNhbkFjY2Vzc1N0b3JhZ2UobV9mcmFtZSkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBT
RUNVUklUWV9FUlIgfTsKIAotICAgIGlmIChpc0Rpc2FibGVkQnlQcml2YXRlQnJvd3NpbmcoKSkK
LSAgICAgICAgcmV0dXJuIHsgfTsKLQogICAgIG1fc3RvcmFnZUFyZWEtPnJlbW92ZUl0ZW0obV9m
cmFtZSwga2V5KTsKICAgICByZXR1cm4geyB9OwogfQpAQCAtMTIzLDkgKzEwOCw2IEBAIEV4Y2Vw
dGlvbk9yPHZvaWQ+IFN0b3JhZ2U6OmNsZWFyKCkKICAgICBpZiAoIW1fc3RvcmFnZUFyZWEtPmNh
bkFjY2Vzc1N0b3JhZ2UobV9mcmFtZSkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTRUNV
UklUWV9FUlIgfTsKIAotICAgIGlmIChpc0Rpc2FibGVkQnlQcml2YXRlQnJvd3NpbmcoKSkKLSAg
ICAgICAgcmV0dXJuIHsgfTsKLQogICAgIG1fc3RvcmFnZUFyZWEtPmNsZWFyKG1fZnJhbWUpOwog
ICAgIHJldHVybiB7IH07CiB9CkBAIC0xMzUsMjMgKzExNyw3IEBAIEV4Y2VwdGlvbk9yPGJvb2w+
IFN0b3JhZ2U6OmNvbnRhaW5zKGNvbnN0IFN0cmluZyYga2V5KSBjb25zdAogICAgIGlmICghbV9z
dG9yYWdlQXJlYS0+Y2FuQWNjZXNzU3RvcmFnZShtX2ZyYW1lKSkKICAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IFNFQ1VSSVRZX0VSUiB9OwogCi0gICAgaWYgKGlzRGlzYWJsZWRCeVByaXZhdGVC
cm93c2luZygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICByZXR1cm4gbV9zdG9yYWdl
QXJlYS0+Y29udGFpbnMoa2V5KTsKIH0KIAotYm9vbCBTdG9yYWdlOjppc0Rpc2FibGVkQnlQcml2
YXRlQnJvd3NpbmcoKSBjb25zdAotewotICAgIGlmICghbV9mcmFtZS0+cGFnZSgpLT51c2VzRXBo
ZW1lcmFsU2Vzc2lvbigpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoaXNMb2Nh
bFN0b3JhZ2UobV9zdG9yYWdlQXJlYS0+c3RvcmFnZVR5cGUoKSkpIHsKLSAgICAgICAgaWYgKFNj
aGVtZVJlZ2lzdHJ5OjphbGxvd3NMb2NhbFN0b3JhZ2VBY2Nlc3NJblByaXZhdGVCcm93c2luZyht
X2ZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLnByb3RvY29sKCkpKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0
b3JhZ2VNYXAuaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU1hcC5oCmluZGV4IDUw
NDYwNTFkNmJjMmZkYjQzMjE5NDRhNDRjNmE5ZWQ2ZWM3Y2RkNWQuLmZjZGNjYTQzNDY4OWM3NTE1
ZDNhYzRjZmEyZjJhM2Q5NzAxYmMzMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvU3RvcmFnZU1hcC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU1hcC5o
CkBAIC01MSwxMSArNTEsMTIgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgcXVvdGEoKSBjb25z
dCB7IHJldHVybiBtX3F1b3RhU2l6ZTsgfQogCisgICAgV0VCQ09SRV9FWFBPUlQgUmVmPFN0b3Jh
Z2VNYXA+IGNvcHkoKTsKKwogICAgIHN0YXRpYyBjb25zdCBjb25zdGV4cHIgdW5zaWduZWQgbm9R
dW90YSA9IFVJTlRfTUFYOwogCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IFN0b3JhZ2VNYXAodW5z
aWduZWQgcXVvdGEpOwotICAgIFJlZjxTdG9yYWdlTWFwPiBjb3B5KCk7CiAgICAgdm9pZCBpbnZh
bGlkYXRlSXRlcmF0b3IoKTsKICAgICB2b2lkIHNldEl0ZXJhdG9yVG9JbmRleCh1bnNpZ25lZCk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZVBy
b3ZpZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZVByb3Zp
ZGVyLmNwcAppbmRleCBjODdiZGU4ZDVhMzFhYjY4NjM0YTFhMjVhMDNjZjVkOTgwYzQyY2ExLi44
YzRhZjQyZjhhYTE5NWIzYzZmMmMxNDVjMjg4YzgwZGQyODk0YTk0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VQcm92aWRlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIuY3BwCkBAIC0yNyw2
ICsyNyw3IEBACiAjaW5jbHVkZSAiU3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyLmgiCiAKICNpbmNs
dWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJTZWN1cml0eU9y
aWdpbkRhdGEuaCIKICNpbmNsdWRlICJTdG9yYWdlQXJlYS5oIgogI2luY2x1ZGUgIlN0b3JhZ2VO
YW1lc3BhY2UuaCIKQEAgLTYxLDkgKzYyLDIzIEBAIHZvaWQgU3RvcmFnZU5hbWVzcGFjZVByb3Zp
ZGVyOjpyZW1vdmVQYWdlKFBhZ2UmIHBhZ2UpCiAKIFJlZlB0cjxTdG9yYWdlQXJlYT4gU3RvcmFn
ZU5hbWVzcGFjZVByb3ZpZGVyOjpsb2NhbFN0b3JhZ2VBcmVhKERvY3VtZW50JiBkb2N1bWVudCkK
IHsKLSAgICBhdXRvJiBzdG9yYWdlTmFtZXNwYWNlID0gZG9jdW1lbnQuc2VjdXJpdHlPcmlnaW4o
KS5jYW5BY2Nlc3NMb2NhbFN0b3JhZ2UoJmRvY3VtZW50LnRvcE9yaWdpbigpKSA/IGxvY2FsU3Rv
cmFnZU5hbWVzcGFjZSgpIDogdHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlKGRvY3VtZW50
LnRvcE9yaWdpbigpKTsKKyAgICAvLyBUaGlzIFN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlciB3YXMg
cmV0cmlldmVkIGZyb20gdGhlIERvY3VtZW50J3MgUGFnZSwKKyAgICAvLyBzbyB0aGUgRG9jdW1l
bnQgaGFkIGJldHRlciBzdGlsbCBhY3R1YWxseSBoYXZlIGEgUGFnZS4KKyAgICBBU1NFUlQoZG9j
dW1lbnQucGFnZSgpKTsKIAotICAgIHJldHVybiBzdG9yYWdlTmFtZXNwYWNlLnN0b3JhZ2VBcmVh
KFNlY3VyaXR5T3JpZ2luRGF0YTo6ZnJvbVNlY3VyaXR5T3JpZ2luKGRvY3VtZW50LnNlY3VyaXR5
T3JpZ2luKCkpKTsKKyAgICBib29sIGVwaGVtZXJhbCA9IGRvY3VtZW50LnBhZ2UoKS0+dXNlc0Vw
aGVtZXJhbFNlc3Npb24oKTsKKyAgICBib29sIHRyYW5zaWVudCA9ICFkb2N1bWVudC5zZWN1cml0
eU9yaWdpbigpLmNhbkFjY2Vzc0xvY2FsU3RvcmFnZSgmZG9jdW1lbnQudG9wT3JpZ2luKCkpOwor
CisgICAgUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IHN0b3JhZ2VOYW1lc3BhY2U7CisKKyAgICBp
ZiAodHJhbnNpZW50KQorICAgICAgICBzdG9yYWdlTmFtZXNwYWNlID0gJnRyYW5zaWVudExvY2Fs
U3RvcmFnZU5hbWVzcGFjZShkb2N1bWVudC50b3BPcmlnaW4oKSk7CisgICAgZWxzZSBpZiAoZXBo
ZW1lcmFsKQorICAgICAgICBzdG9yYWdlTmFtZXNwYWNlID0gZG9jdW1lbnQucGFnZSgpLT5lcGhl
bWVyYWxMb2NhbFN0b3JhZ2UoKTsKKyAgICBlbHNlCisgICAgICAgIHN0b3JhZ2VOYW1lc3BhY2Ug
PSAmbG9jYWxTdG9yYWdlTmFtZXNwYWNlKCk7CisKKyAgICByZXR1cm4gc3RvcmFnZU5hbWVzcGFj
ZS0+c3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tU2VjdXJpdHlPcmlnaW4oZG9j
dW1lbnQuc2VjdXJpdHlPcmlnaW4oKSkpOwogfQogCiBTdG9yYWdlTmFtZXNwYWNlJiBTdG9yYWdl
TmFtZXNwYWNlUHJvdmlkZXI6OmxvY2FsU3RvcmFnZU5hbWVzcGFjZSgpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VQcm92aWRlci5oIGIvU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIuaAppbmRleCA4ZDM1MGU2
ZDYxYjMyMDlmODdjMzJiYWE4NjQyNjFkNzcwYjAxMDdhLi4xOTE2Y2NiMjI3ZWQ5MWY1ZmY5MjY0
MjRmMDA2OTgyOTYyYjFhNzZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0
b3JhZ2VOYW1lc3BhY2VQcm92aWRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3Rv
cmFnZU5hbWVzcGFjZVByb3ZpZGVyLmgKQEAgLTQ1LDYgKzQ1LDggQEAgcHVibGljOgogICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgflN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlcigpOwogCiAgICAg
dmlydHVhbCBSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gY3JlYXRlU2Vzc2lvblN0b3JhZ2VOYW1l
c3BhY2UoUGFnZSYsIHVuc2lnbmVkIHF1b3RhKSA9IDA7CisgICAgdmlydHVhbCBSZWZQdHI8U3Rv
cmFnZU5hbWVzcGFjZT4gY3JlYXRlRXBoZW1lcmFsTG9jYWxTdG9yYWdlTmFtZXNwYWNlKFBhZ2Um
LCB1bnNpZ25lZCBxdW90YSkgPSAwOworCiAgICAgUmVmUHRyPFN0b3JhZ2VBcmVhPiBsb2NhbFN0
b3JhZ2VBcmVhKERvY3VtZW50Jik7CiAKICAgICB2b2lkIGFkZFBhZ2UoUGFnZSYpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlVHlwZS5oIGIvU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9TdG9yYWdlVHlwZS5oCmluZGV4IGNmMzRmOTZjNzAwYjM0MWE1YjRjNzE1ZmQ4
ODhjYTYwNmVjMTI5MDUuLjU4MTMzZjg5Y2NhNzFkYzM1MGVmNzI4NWE3MGE3MzBhMjk2MmE2ZTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVR5cGUuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUeXBlLmgKQEAgLTMwLDExICszMCwxNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiBlbnVtIGNsYXNzIFN0b3JhZ2VUeXBlIHsKICAgICBTZXNzaW9u
LAogICAgIExvY2FsLAorICAgIEVwaGVtZXJhbExvY2FsLAogICAgIFRyYW5zaWVudExvY2FsLAog
fTsKIAogaW5saW5lIGJvb2wgaXNMb2NhbFN0b3JhZ2UoU3RvcmFnZVR5cGUgc3RvcmFnZVR5cGUp
CiB7CisgICAgcmV0dXJuIHN0b3JhZ2VUeXBlID09IFN0b3JhZ2VUeXBlOjpMb2NhbCB8fCBzdG9y
YWdlVHlwZSA9PSBTdG9yYWdlVHlwZTo6VHJhbnNpZW50TG9jYWwgfHwgc3RvcmFnZVR5cGUgPT0g
U3RvcmFnZVR5cGU6OkVwaGVtZXJhbExvY2FsOworfQorCitpbmxpbmUgYm9vbCBpc1BlcnNpc3Rl
bnRMb2NhbFN0b3JhZ2UoU3RvcmFnZVR5cGUgc3RvcmFnZVR5cGUpCit7CiAgICAgcmV0dXJuIHN0
b3JhZ2VUeXBlID09IFN0b3JhZ2VUeXBlOjpMb2NhbCB8fCBzdG9yYWdlVHlwZSA9PSBTdG9yYWdl
VHlwZTo6VHJhbnNpZW50TG9jYWw7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU3Rv
cmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2UvU3Rv
cmFnZU5hbWVzcGFjZUltcGwuY3BwCmluZGV4IDE4ZWM0ZThhYzM4NDNmMzFlMTI2N2FlYjY2OWVh
YWYyZjNhOGI3YjUuLjYzNjdlODU3MTkzZGY5NWI3NjA3Yzg1NTczNTIzOTZhYTk1M2Y4ZjcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9TdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcApAQCAt
NTAsNiArNTAsMTEgQEAgUmVmPFN0b3JhZ2VOYW1lc3BhY2VJbXBsPiBTdG9yYWdlTmFtZXNwYWNl
SW1wbDo6Y3JlYXRlU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UodW4KICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBTdG9yYWdlTmFtZXNwYWNlSW1wbChTdG9yYWdlVHlwZTo6U2Vzc2lvbiwgU3RyaW5n
KCksIHF1b3RhKSk7CiB9CiAKK1JlZjxTdG9yYWdlTmFtZXNwYWNlSW1wbD4gU3RvcmFnZU5hbWVz
cGFjZUltcGw6OmNyZWF0ZUVwaGVtZXJhbExvY2FsU3RvcmFnZU5hbWVzcGFjZSh1bnNpZ25lZCBx
dW90YSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTdG9yYWdlTmFtZXNwYWNlSW1wbChT
dG9yYWdlVHlwZTo6RXBoZW1lcmFsTG9jYWwsIFN0cmluZygpLCBxdW90YSkpOworfQorCiBSZWY8
U3RvcmFnZU5hbWVzcGFjZUltcGw+IFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpnZXRPckNyZWF0ZUxv
Y2FsU3RvcmFnZU5hbWVzcGFjZShjb25zdCBTdHJpbmcmIGRhdGFiYXNlUGF0aCwgdW5zaWduZWQg
cXVvdGEpCiB7CiAgICAgQVNTRVJUKCFkYXRhYmFzZVBhdGguaXNOdWxsKCkpOwpAQCAtNzEsNyAr
NzYsNyBAQCBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6U3RvcmFnZU5hbWVzcGFjZUltcGwoU3RvcmFn
ZVR5cGUgc3RvcmFnZVR5cGUsIGNvbnN0IFN0cmluZwogICAgICwgbV9xdW90YShxdW90YSkKICAg
ICAsIG1faXNTaHV0ZG93bihmYWxzZSkKIHsKLSAgICBpZiAoaXNMb2NhbFN0b3JhZ2UobV9zdG9y
YWdlVHlwZSkgJiYgIW1fcGF0aC5pc0VtcHR5KCkpCisgICAgaWYgKGlzUGVyc2lzdGVudExvY2Fs
U3RvcmFnZShtX3N0b3JhZ2VUeXBlKSAmJiAhbV9wYXRoLmlzRW1wdHkoKSkKICAgICAgICAgbV9z
eW5jTWFuYWdlciA9IFN0b3JhZ2VTeW5jTWFuYWdlcjo6Y3JlYXRlKG1fcGF0aCk7CiB9CiAKQEAg
LTc5LDcgKzg0LDcgQEAgU3RvcmFnZU5hbWVzcGFjZUltcGw6On5TdG9yYWdlTmFtZXNwYWNlSW1w
bCgpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAotICAgIGlmIChpc0xvY2FsU3Rv
cmFnZShtX3N0b3JhZ2VUeXBlKSkgeworICAgIGlmIChpc1BlcnNpc3RlbnRMb2NhbFN0b3JhZ2Uo
bV9zdG9yYWdlVHlwZSkpIHsKICAgICAgICAgQVNTRVJUKGxvY2FsU3RvcmFnZU5hbWVzcGFjZU1h
cCgpLmdldChtX3BhdGgpID09IHRoaXMpOwogICAgICAgICBsb2NhbFN0b3JhZ2VOYW1lc3BhY2VN
YXAoKS5yZW1vdmUobV9wYXRoKTsKICAgICB9CkBAIC05MiwxMyArOTcsMTIgQEAgUmVmUHRyPFN0
b3JhZ2VOYW1lc3BhY2U+IFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpjb3B5KFBhZ2UqKQogewogICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOwotICAg
IEFTU0VSVChtX3N0b3JhZ2VUeXBlID09IFN0b3JhZ2VUeXBlOjpTZXNzaW9uKTsKKyAgICBBU1NF
UlQobV9zdG9yYWdlVHlwZSA9PSBTdG9yYWdlVHlwZTo6U2Vzc2lvbiB8fCBtX3N0b3JhZ2VUeXBl
ID09IFN0b3JhZ2VUeXBlOjpFcGhlbWVyYWxMb2NhbCk7CiAKICAgICBSZWZQdHI8U3RvcmFnZU5h
bWVzcGFjZUltcGw+IG5ld05hbWVzcGFjZSA9IGFkb3B0UmVmKG5ldyBTdG9yYWdlTmFtZXNwYWNl
SW1wbChtX3N0b3JhZ2VUeXBlLCBtX3BhdGgsIG1fcXVvdGEpKTsKKyAgICBmb3IgKGF1dG8gaXRl
ciA6IG1fc3RvcmFnZUFyZWFNYXApCisgICAgICAgIG5ld05hbWVzcGFjZS0+bV9zdG9yYWdlQXJl
YU1hcC5zZXQoaXRlci5rZXksIGl0ZXIudmFsdWUtPmNvcHkoKSk7CiAKLSAgICBTdG9yYWdlQXJl
YU1hcDo6aXRlcmF0b3IgZW5kID0gbV9zdG9yYWdlQXJlYU1hcC5lbmQoKTsKLSAgICBmb3IgKFN0
b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBpID0gbV9zdG9yYWdlQXJlYU1hcC5iZWdpbigpOyBpICE9
IGVuZDsgKytpKQotICAgICAgICBuZXdOYW1lc3BhY2UtPm1fc3RvcmFnZUFyZWFNYXAuc2V0KGkt
PmtleSwgaS0+dmFsdWUtPmNvcHkoKSk7CiAgICAgcmV0dXJuIG5ld05hbWVzcGFjZTsKIH0KIApA
QCAtMTIzLDggKzEyNyw4IEBAIHZvaWQgU3RvcmFnZU5hbWVzcGFjZUltcGw6OmNsb3NlKCkKICAg
ICBpZiAobV9pc1NodXRkb3duKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBJZiB3ZSdyZSBz
ZXNzaW9uIHN0b3JhZ2UsIHdlIHNob3VsZG4ndCBuZWVkIHRvIGRvIGFueSB3b3JrIGhlcmUuCi0g
ICAgaWYgKG1fc3RvcmFnZVR5cGUgPT0gU3RvcmFnZVR5cGU6OlNlc3Npb24pIHsKKyAgICAvLyBJ
ZiB3ZSdyZSBub3QgYSBwZXJzaXN0ZW50IHN0b3JhZ2UsIHdlIHNob3VsZG4ndCBuZWVkIHRvIGRv
IGFueSB3b3JrIGhlcmUuCisgICAgaWYgKG1fc3RvcmFnZVR5cGUgPT0gU3RvcmFnZVR5cGU6OlNl
c3Npb24gfHwgbV9zdG9yYWdlVHlwZSA9PSBTdG9yYWdlVHlwZTo6RXBoZW1lcmFsTG9jYWwpIHsK
ICAgICAgICAgQVNTRVJUKCFtX3N5bmNNYW5hZ2VyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5o
IGIvU291cmNlL1dlYktpdC9TdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmgKaW5kZXggNzk0
MzdmYWY2MTQ4NDA4ZTY0MWM5ZWJmZjM4OGJmNDUxZmI2MGE5OS4uMjdiOGY5YmFiM2FkMzM5NjY4
NTQwZjQ4MGJmZDY1YTk2NjYxNjEzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TdG9yYWdl
L1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9TdG9yYWdlL1N0b3Jh
Z2VOYW1lc3BhY2VJbXBsLmgKQEAgLTM5LDYgKzM5LDcgQEAgY2xhc3MgU3RvcmFnZUFyZWFJbXBs
OwogY2xhc3MgU3RvcmFnZU5hbWVzcGFjZUltcGwgOiBwdWJsaWMgV2ViQ29yZTo6U3RvcmFnZU5h
bWVzcGFjZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxTdG9yYWdlTmFtZXNwYWNlSW1wbD4g
Y3JlYXRlU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UodW5zaWduZWQgcXVvdGEpOworICAgIHN0YXRp
YyBSZWY8U3RvcmFnZU5hbWVzcGFjZUltcGw+IGNyZWF0ZUVwaGVtZXJhbExvY2FsU3RvcmFnZU5h
bWVzcGFjZSh1bnNpZ25lZCBxdW90YSk7CiAgICAgc3RhdGljIFJlZjxTdG9yYWdlTmFtZXNwYWNl
SW1wbD4gZ2V0T3JDcmVhdGVMb2NhbFN0b3JhZ2VOYW1lc3BhY2UoY29uc3QgU3RyaW5nJiBkYXRh
YmFzZVBhdGgsIHVuc2lnbmVkIHF1b3RhKTsKICAgICB2aXJ0dWFsIH5TdG9yYWdlTmFtZXNwYWNl
SW1wbCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2UvV2ViU3RvcmFnZU5h
bWVzcGFjZVByb3ZpZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9XZWJTdG9yYWdlTmFt
ZXNwYWNlUHJvdmlkZXIuY3BwCmluZGV4IDdhZTlhMTQ2Njg2N2ExOWE4OTRhYzUzZGFjMTYzZDNh
Y2VjOTc3NDcuLmVkN2VhM2FhMzkzZGE1NTkzN2ExYWQ0NWE0NmQ2NzdjODg0YWJkOWUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9XZWJTdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9XZWJTdG9yYWdlTmFtZXNwYWNlUHJvdmlk
ZXIuY3BwCkBAIC0xMDEsNiArMTAxLDExIEBAIFJlZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiBXZWJT
dG9yYWdlTmFtZXNwYWNlUHJvdmlkZXI6OmNyZWF0ZVNlc3Npb25TdG9yYWdlTmFtZXNwCiAgICAg
cmV0dXJuIFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpjcmVhdGVTZXNzaW9uU3RvcmFnZU5hbWVzcGFj
ZShxdW90YSk7CiB9CiAKK1JlZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiBXZWJTdG9yYWdlTmFtZXNw
YWNlUHJvdmlkZXI6OmNyZWF0ZUVwaGVtZXJhbExvY2FsU3RvcmFnZU5hbWVzcGFjZShQYWdlJiwg
dW5zaWduZWQgcXVvdGEpCit7CisgICAgcmV0dXJuIFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpjcmVh
dGVFcGhlbWVyYWxMb2NhbFN0b3JhZ2VOYW1lc3BhY2UocXVvdGEpOworfQorCiBSZWZQdHI8U3Rv
cmFnZU5hbWVzcGFjZT4gV2ViU3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyOjpjcmVhdGVMb2NhbFN0
b3JhZ2VOYW1lc3BhY2UodW5zaWduZWQgcXVvdGEpCiB7CiAgICAgcmV0dXJuIFN0b3JhZ2VOYW1l
c3BhY2VJbXBsOjpnZXRPckNyZWF0ZUxvY2FsU3RvcmFnZU5hbWVzcGFjZShtX2xvY2FsU3RvcmFn
ZURhdGFiYXNlUGF0aCwgcXVvdGEpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TdG9yYWdl
L1dlYlN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlci5oIGIvU291cmNlL1dlYktpdC9TdG9yYWdlL1dl
YlN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlci5oCmluZGV4IGU4YmQ5MmI5MTQ5YTRmZDc1Yzg1OTVh
MmU5MGQ3OWY3OGYyNzk2YzIuLjBkMjA3ZDM0MzE5MmM0ZmU3Yjk3ZDAzOGQ1ODFiMmM0ZWMwNzdh
YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9XZWJTdG9yYWdlTmFtZXNwYWNl
UHJvdmlkZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2UvV2ViU3RvcmFnZU5hbWVzcGFj
ZVByb3ZpZGVyLmgKQEAgLTUwLDYgKzUwLDcgQEAgcHJpdmF0ZToKICAgICBleHBsaWNpdCBXZWJT
dG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIoY29uc3QgU3RyaW5nJiBsb2NhbFN0b3JhZ2VEYXRhYmFz
ZVBhdGgpOwogCiAgICAgUmVmUHRyPFdlYkNvcmU6OlN0b3JhZ2VOYW1lc3BhY2U+IGNyZWF0ZVNl
c3Npb25TdG9yYWdlTmFtZXNwYWNlKFdlYkNvcmU6OlBhZ2UmLCB1bnNpZ25lZCBxdW90YSkgb3Zl
cnJpZGU7CisgICAgUmVmUHRyPFdlYkNvcmU6OlN0b3JhZ2VOYW1lc3BhY2U+IGNyZWF0ZUVwaGVt
ZXJhbExvY2FsU3RvcmFnZU5hbWVzcGFjZShXZWJDb3JlOjpQYWdlJiwgdW5zaWduZWQgcXVvdGEp
IG92ZXJyaWRlOwogICAgIFJlZlB0cjxXZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlPiBjcmVhdGVM
b2NhbFN0b3JhZ2VOYW1lc3BhY2UodW5zaWduZWQgcXVvdGEpIG92ZXJyaWRlOwogICAgIFJlZlB0
cjxXZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlPiBjcmVhdGVUcmFuc2llbnRMb2NhbFN0b3JhZ2VO
YW1lc3BhY2UoV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4mLCB1bnNpZ25lZCBxdW90YSkgb3ZlcnJp
ZGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvU3RvcmFnZS9TdG9y
YWdlQXJlYU1hcC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1N0b3JhZ2UvU3RvcmFn
ZUFyZWFNYXAuY3BwCmluZGV4IDVmOGI4NzcwYTU4NDA4NGU2ODFhM2EwNTNkNDA3ZWU1MjIwZGZj
ZjkuLmEyNjUwZDFiM2ViZmM3MjhjMjc1ZWUwMTBiZmVhM2EyNjhiMGI4ODYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvU3RvcmFnZS9TdG9yYWdlQXJlYU1hcC5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9TdG9yYWdlL1N0b3JhZ2VBcmVhTWFwLmNwcApA
QCAtODMsNiArODMsMTAgQEAgU3RvcmFnZUFyZWFNYXA6OlN0b3JhZ2VBcmVhTWFwKFN0b3JhZ2VO
YW1lc3BhY2VJbXBsKiBzdG9yYWdlTmFtZXNwYWNlLCBSZWY8V2ViQ28KICAgICBjYXNlIFN0b3Jh
Z2VUeXBlOjpTZXNzaW9uOgogICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQ
cm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlcjo6Q3JlYXRl
U2Vzc2lvblN0b3JhZ2VNYXAobV9zdG9yYWdlTWFwSUQsIHN0b3JhZ2VOYW1lc3BhY2UtPnN0b3Jh
Z2VOYW1lc3BhY2VJRCgpLCBTZWN1cml0eU9yaWdpbkRhdGE6OmZyb21TZWN1cml0eU9yaWdpbiht
X3NlY3VyaXR5T3JpZ2luKSksIDApOwogICAgICAgICBicmVhazsKKworICAgIGNhc2UgU3RvcmFn
ZVR5cGU6OkVwaGVtZXJhbExvY2FsOgorICAgICAgICAvLyBUaGUgVUkgcHJvY2VzcyBpcyBub3Qg
aW52b2x2ZWQgZm9yIEVwaGVtZXJhbExvY2FsIHN0b3JhZ2VzLgorICAgICAgICByZXR1cm47CiAg
ICAgfQogCiAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1l
c3NhZ2VzOjpTdG9yYWdlQXJlYU1hcDo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3N0b3JhZ2VN
YXBJRCwgKnRoaXMpOwpAQCAtOTAsOCArOTQsMTAgQEAgU3RvcmFnZUFyZWFNYXA6OlN0b3JhZ2VB
cmVhTWFwKFN0b3JhZ2VOYW1lc3BhY2VJbXBsKiBzdG9yYWdlTmFtZXNwYWNlLCBSZWY8V2ViQ28K
IAogU3RvcmFnZUFyZWFNYXA6On5TdG9yYWdlQXJlYU1hcCgpCiB7Ci0gICAgV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6U3Rv
cmFnZU1hbmFnZXI6OkRlc3Ryb3lTdG9yYWdlTWFwKG1fc3RvcmFnZU1hcElEKSwgMCk7Ci0gICAg
V2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpT
dG9yYWdlQXJlYU1hcDo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3N0b3JhZ2VNYXBJRCk7Cisg
ICAgaWYgKG1fc3RvcmFnZVR5cGUgIT0gU3RvcmFnZVR5cGU6OkVwaGVtZXJhbExvY2FsKSB7Cisg
ICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCkt
PnNlbmQoTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyOjpEZXN0cm95U3RvcmFnZU1hcChtX3N0b3Jh
Z2VNYXBJRCksIDApOworICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5yZW1vdmVNZXNz
YWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlN0b3JhZ2VBcmVhTWFwOjptZXNzYWdlUmVjZWl2ZXJOYW1l
KCksIG1fc3RvcmFnZU1hcElEKTsKKyAgICB9CiAKICAgICBtX3N0b3JhZ2VOYW1lc3BhY2UtPmRp
ZERlc3Ryb3lTdG9yYWdlQXJlYU1hcCgqdGhpcyk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9TdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcAppbmRl
eCAxYTM3NTJiOTcxYjE3ZGEzNjQxNzliMTAwNmY1OGQ2ZDA2NjgxMjg2Li40NWY4Y2ZiMzk4NWMz
NDk2YmVhZGQyODFmYzdmN2E2N2U3MWFmYjg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvU3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsNiAr
MzEsNyBAQAogI2luY2x1ZGUgIldlYlBhZ2UuaCIKICNpbmNsdWRlICJXZWJQYWdlR3JvdXBQcm94
eS5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlR3JvdXAuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NlY3Vy
aXR5T3JpZ2luLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TZXR0aW5ncy5oPgpAQCAtNDUsNiArNDYs
MTEgQEAgUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2VJbXBsPiBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6
Y3JlYXRlU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0
b3JhZ2VOYW1lc3BhY2VJbXBsKFN0b3JhZ2VUeXBlOjpTZXNzaW9uLCBpZGVudGlmaWVyLCBudWxs
cHRyLCBxdW90YUluQnl0ZXMpKTsKIH0KIAorUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2VJbXBsPiBT
dG9yYWdlTmFtZXNwYWNlSW1wbDo6Y3JlYXRlRXBoZW1lcmFsTG9jYWxTdG9yYWdlTmFtZXNwYWNl
KHVpbnQ2NF90IGlkZW50aWZpZXIsIHVuc2lnbmVkIHF1b3RhSW5CeXRlcykKK3sKKyAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFN0b3JhZ2VOYW1lc3BhY2VJbXBsKFN0b3JhZ2VUeXBlOjpFcGhlbWVy
YWxMb2NhbCwgaWRlbnRpZmllciwgbnVsbHB0ciwgcXVvdGFJbkJ5dGVzKSk7Cit9CisKIFJlZlB0
cjxTdG9yYWdlTmFtZXNwYWNlSW1wbD4gU3RvcmFnZU5hbWVzcGFjZUltcGw6OmNyZWF0ZUxvY2Fs
U3RvcmFnZU5hbWVzcGFjZSh1aW50NjRfdCBpZGVudGlmaWVyLCB1bnNpZ25lZCBxdW90YUluQnl0
ZXMpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdG9yYWdlTmFtZXNwYWNlSW1wbChTdG9y
YWdlVHlwZTo6TG9jYWwsIGlkZW50aWZpZXIsIG51bGxwdHIsIHF1b3RhSW5CeXRlcykpOwpAQCAt
NzQsNiArODAsOSBAQCB2b2lkIFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpkaWREZXN0cm95U3RvcmFn
ZUFyZWFNYXAoU3RvcmFnZUFyZWFNYXAmIG1hcCkKIAogUmVmUHRyPFN0b3JhZ2VBcmVhPiBTdG9y
YWdlTmFtZXNwYWNlSW1wbDo6c3RvcmFnZUFyZWEoY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBz
ZWN1cml0eU9yaWdpbikKIHsKKyAgICBpZiAobV9zdG9yYWdlVHlwZSA9PSBTdG9yYWdlVHlwZTo6
RXBoZW1lcmFsTG9jYWwpCisgICAgICAgIHJldHVybiBlcGhlbWVyYWxMb2NhbFN0b3JhZ2VBcmVh
KHNlY3VyaXR5T3JpZ2luKTsKKwogICAgIFJlZlB0cjxTdG9yYWdlQXJlYU1hcD4gbWFwOwogCiAg
ICAgYXV0byYgc2xvdCA9IG1fc3RvcmFnZUFyZWFNYXBzLmFkZChzZWN1cml0eU9yaWdpbiwgbnVs
bHB0cikuaXRlcmF0b3ItPnZhbHVlOwpAQCAtODYsMTEgKzk1LDEyNSBAQCBSZWZQdHI8U3RvcmFn
ZUFyZWE+IFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpzdG9yYWdlQXJlYShjb25zdCBTZWN1cml0eU9y
aWdpbkRhdGEmCiAgICAgcmV0dXJuIFN0b3JhZ2VBcmVhSW1wbDo6Y3JlYXRlKG1hcC5yZWxlYXNl
Tm9uTnVsbCgpKTsKIH0KIAorY2xhc3MgU3RvcmFnZU5hbWVzcGFjZUltcGw6OkVwaGVtZXJhbFN0
b3JhZ2VBcmVhIGZpbmFsIDogcHVibGljIFN0b3JhZ2VBcmVhIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUmVmPEVwaGVtZXJhbFN0b3JhZ2VBcmVhPiBjcmVhdGUoY29uc3QgU2VjdXJpdHlPcmlnaW5E
YXRhJiBvcmlnaW4sIHVuc2lnbmVkIHF1b3RhSW5CeXRlcykKKyAgICB7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IEVwaGVtZXJhbFN0b3JhZ2VBcmVhKG9yaWdpbiwgcXVvdGFJbkJ5dGVz
KSk7CisgICAgfQorCisgICAgUmVmUHRyPEVwaGVtZXJhbFN0b3JhZ2VBcmVhPiBjb3B5KCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRXBoZW1lcmFsU3RvcmFnZUFyZWEoKnRo
aXMpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgRXBoZW1lcmFsU3RvcmFnZUFyZWEoY29uc3Qg
U2VjdXJpdHlPcmlnaW5EYXRhJiBvcmlnaW4sIHVuc2lnbmVkIHF1b3RhSW5CeXRlcykKKyAgICAg
ICAgOiBtX3NlY3VyaXR5T3JpZ2luRGF0YShvcmlnaW4pCisgICAgICAgICwgbV9zdG9yYWdlTWFw
KFN0b3JhZ2VNYXA6OmNyZWF0ZShxdW90YUluQnl0ZXMpKQorICAgIHsKKyAgICB9CisKKyAgICBF
cGhlbWVyYWxTdG9yYWdlQXJlYShFcGhlbWVyYWxTdG9yYWdlQXJlYSYgb3RoZXIpCisgICAgICAg
IDogbV9zZWN1cml0eU9yaWdpbkRhdGEob3RoZXIubV9zZWN1cml0eU9yaWdpbkRhdGEpCisgICAg
ICAgICwgbV9zdG9yYWdlTWFwKG90aGVyLm1fc3RvcmFnZU1hcCkKKyAgICB7CisgICAgfQorCisg
ICAgLy8gV2ViQ29yZTo6U3RvcmFnZUFyZWEuCisgICAgdW5zaWduZWQgbGVuZ3RoKCkKKyAgICB7
CisgICAgICAgIHJldHVybiBtX3N0b3JhZ2VNYXAtPmxlbmd0aCgpOworICAgIH0KKworICAgIFN0
cmluZyBrZXkodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gbV9zdG9yYWdl
TWFwLT5rZXkoaW5kZXgpOworICAgIH0KKworICAgIFN0cmluZyBpdGVtKGNvbnN0IFN0cmluZyYg
a2V5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fc3RvcmFnZU1hcC0+Z2V0SXRlbShrZXkpOwor
ICAgIH0KKworICAgIHZvaWQgc2V0SXRlbShGcmFtZSosIGNvbnN0IFN0cmluZyYga2V5LCBjb25z
dCBTdHJpbmcmIHZhbHVlLCBib29sJiBxdW90YUV4Y2VwdGlvbikKKyAgICB7CisgICAgICAgIFN0
cmluZyBvbGRWYWx1ZTsKKyAgICAgICAgaWYgKGF1dG8gbmV3TWFwID0gbV9zdG9yYWdlTWFwLT5z
ZXRJdGVtKGtleSwgdmFsdWUsIG9sZFZhbHVlLCBxdW90YUV4Y2VwdGlvbikpCisgICAgICAgICAg
ICBtX3N0b3JhZ2VNYXAgPSBXVEZNb3ZlKG5ld01hcCk7CisgICAgfQorCisgICAgdm9pZCByZW1v
dmVJdGVtKEZyYW1lKiwgY29uc3QgU3RyaW5nJiBrZXkpCisgICAgeworICAgICAgICBTdHJpbmcg
b2xkVmFsdWU7CisgICAgICAgIGlmIChhdXRvIG5ld01hcCA9IG1fc3RvcmFnZU1hcC0+cmVtb3Zl
SXRlbShrZXksIG9sZFZhbHVlKSkKKyAgICAgICAgICAgIG1fc3RvcmFnZU1hcCA9IFdURk1vdmUo
bmV3TWFwKTsKKyAgICB9CisKKyAgICB2b2lkIGNsZWFyKEZyYW1lKikKKyAgICB7CisgICAgICAg
IGlmICghbV9zdG9yYWdlTWFwLT5sZW5ndGgoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBtX3N0b3JhZ2VNYXAgPSBTdG9yYWdlTWFwOjpjcmVhdGUobV9zdG9yYWdlTWFwLT5xdW90
YSgpKTsKKyAgICB9CisKKyAgICBib29sIGNvbnRhaW5zKGNvbnN0IFN0cmluZyYga2V5KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fc3RvcmFnZU1hcC0+Y29udGFpbnMoa2V5KTsKKyAgICB9CisK
KyAgICBib29sIGNhbkFjY2Vzc1N0b3JhZ2UoRnJhbWUqIGZyYW1lKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGZyYW1lICYmIGZyYW1lLT5wYWdlKCk7CisgICAgfQorCisgICAgU3RvcmFnZVR5cGUg
c3RvcmFnZVR5cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0b3JhZ2VUeXBlOjpF
cGhlbWVyYWxMb2NhbDsKKyAgICB9CisKKyAgICBzaXplX3QgbWVtb3J5Qnl0ZXNVc2VkQnlDYWNo
ZSgpCisgICAgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICB2b2lkIGluY3JlbWVu
dEFjY2Vzc0NvdW50KCkgeyB9CisgICAgdm9pZCBkZWNyZW1lbnRBY2Nlc3NDb3VudCgpIHsgfQor
ICAgIHZvaWQgY2xvc2VEYXRhYmFzZUlmSWRsZSgpIHsgfQorCisgICAgU2VjdXJpdHlPcmlnaW5E
YXRhIHNlY3VyaXR5T3JpZ2luKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3NlY3Vy
aXR5T3JpZ2luRGF0YTsKKyAgICB9CisKKyAgICBTZWN1cml0eU9yaWdpbkRhdGEgbV9zZWN1cml0
eU9yaWdpbkRhdGE7CisgICAgUmVmUHRyPFN0b3JhZ2VNYXA+IG1fc3RvcmFnZU1hcDsKK307CisK
K1JlZlB0cjxTdG9yYWdlQXJlYT4gU3RvcmFnZU5hbWVzcGFjZUltcGw6OmVwaGVtZXJhbExvY2Fs
U3RvcmFnZUFyZWEoY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBzZWN1cml0eU9yaWdpbikKK3sK
KyAgICBhdXRvJiBzbG90ID0gbV9lcGhlbWVyYWxMb2NhbFN0b3JhZ2VBcmVhcy5hZGQoc2VjdXJp
dHlPcmlnaW4sIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKKyAgICBpZiAoIXNsb3QpCisgICAg
ICAgIHNsb3QgPSBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6RXBoZW1lcmFsU3RvcmFnZUFyZWE6OmNy
ZWF0ZShzZWN1cml0eU9yaWdpbiwgbV9xdW90YUluQnl0ZXMpOworCisgICAgcmV0dXJuIHNsb3Qu
Z2V0KCk7Cit9CisKIFJlZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiBTdG9yYWdlTmFtZXNwYWNlSW1w
bDo6Y29weShQYWdlKiBuZXdQYWdlKQogewogICAgIEFTU0VSVChtX3N0b3JhZ2VOYW1lc3BhY2VJ
RCk7CiAKLSAgICByZXR1cm4gY3JlYXRlU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UoV2ViUGFnZTo6
ZnJvbUNvcmVQYWdlKG5ld1BhZ2UpLT5wYWdlSUQoKSwgbV9xdW90YUluQnl0ZXMpOworICAgIGlm
IChtX3N0b3JhZ2VUeXBlID09IFN0b3JhZ2VUeXBlOjpTZXNzaW9uKQorICAgICAgICByZXR1cm4g
Y3JlYXRlU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UoV2ViUGFnZTo6ZnJvbUNvcmVQYWdlKG5ld1Bh
Z2UpLT5wYWdlSUQoKSwgbV9xdW90YUluQnl0ZXMpOworCisgICAgQVNTRVJUKG1fc3RvcmFnZVR5
cGUgPT0gU3RvcmFnZVR5cGU6OkVwaGVtZXJhbExvY2FsKTsKKyAgICBSZWZQdHI8U3RvcmFnZU5h
bWVzcGFjZUltcGw+IG5ld05hbWVzcGFjZSA9IGFkb3B0UmVmKG5ldyBTdG9yYWdlTmFtZXNwYWNl
SW1wbChtX3N0b3JhZ2VUeXBlLCBtX3N0b3JhZ2VOYW1lc3BhY2VJRCwgbV90b3BMZXZlbE9yaWdp
bi5nZXQoKSwgbV9xdW90YUluQnl0ZXMpKTsKKworICAgIGZvciAoYXV0byBpdGVyIDogbV9lcGhl
bWVyYWxMb2NhbFN0b3JhZ2VBcmVhcykKKyAgICAgICAgbmV3TmFtZXNwYWNlLT5tX2VwaGVtZXJh
bExvY2FsU3RvcmFnZUFyZWFzLnNldChpdGVyLmtleSwgaXRlci52YWx1ZS0+Y29weSgpKTsKKwor
ICAgIHJldHVybiBuZXdOYW1lc3BhY2U7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9TdG9yYWdlL1N0b3JhZ2VOYW1lc3Bh
Y2VJbXBsLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1N0b3JhZ2UvU3RvcmFnZU5hbWVz
cGFjZUltcGwuaAppbmRleCA4ZWNiODE2NjNlY2MzMzI2NzBkMzEyZmEzZGY2MGU3Njg0MjdhZDI0
Li5mMTNhMjJkY2JkMjFiNjc0MGU0NTIzN2Y0ZGZhZDgzMTI1NjcyOWUzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUlt
cGwuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbkRhdGEu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luSGFzaC5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvU3RvcmFnZUFyZWEuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1N0b3JhZ2VNYXAuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL1N0b3JhZ2VOYW1lc3BhY2UuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgogCkBAIC0zOSw2ICs0MCw3IEBAIGNsYXNzIFdlYlBhZ2U7CiBjbGFzcyBTdG9yYWdlTmFt
ZXNwYWNlSW1wbCA6IHB1YmxpYyBXZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlIHsKIHB1YmxpYzoK
ICAgICBzdGF0aWMgUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2VJbXBsPiBjcmVhdGVTZXNzaW9uU3Rv
cmFnZU5hbWVzcGFjZSh1aW50NjRfdCBpZGVudGlmaWVyLCB1bnNpZ25lZCBxdW90YUluQnl0ZXMp
OworICAgIHN0YXRpYyBSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZUltcGw+IGNyZWF0ZUVwaGVtZXJh
bExvY2FsU3RvcmFnZU5hbWVzcGFjZSh1aW50NjRfdCBpZGVudGlmaWVyLCB1bnNpZ25lZCBxdW90
YUluQnl0ZXMpOwogICAgIHN0YXRpYyBSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZUltcGw+IGNyZWF0
ZUxvY2FsU3RvcmFnZU5hbWVzcGFjZSh1aW50NjRfdCBpZGVudGlmaWVyLCB1bnNpZ25lZCBxdW90
YUluQnl0ZXMpOwogICAgIHN0YXRpYyBSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZUltcGw+IGNyZWF0
ZVRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZSh1aW50NjRfdCBpZGVudGlmaWVyLCBXZWJD
b3JlOjpTZWN1cml0eU9yaWdpbiYgdG9wTGV2ZWxPcmlnaW4sIHVpbnQ2NF90IHF1b3RhSW5CeXRl
cyk7CiAKQEAgLTU3LDYgKzU5LDggQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8V2ViQ29yZTo6U3Rv
cmFnZUFyZWE+IHN0b3JhZ2VBcmVhKGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYp
IG92ZXJyaWRlOwogICAgIFJlZlB0cjxXZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlPiBjb3B5KFdl
YkNvcmU6OlBhZ2UqKSBvdmVycmlkZTsKIAorICAgIFJlZlB0cjxXZWJDb3JlOjpTdG9yYWdlQXJl
YT4gZXBoZW1lcmFsTG9jYWxTdG9yYWdlQXJlYShjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdp
bkRhdGEmKTsKKwogICAgIGNvbnN0IFdlYkNvcmU6OlN0b3JhZ2VUeXBlIG1fc3RvcmFnZVR5cGU7
CiAgICAgY29uc3QgdWludDY0X3QgbV9zdG9yYWdlTmFtZXNwYWNlSUQ7CiAKQEAgLTY2LDYgKzcw
LDkgQEAgcHJpdmF0ZToKICAgICBjb25zdCB1bnNpZ25lZCBtX3F1b3RhSW5CeXRlczsKIAogICAg
IEhhc2hNYXA8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhLCBTdG9yYWdlQXJlYU1hcCo+IG1f
c3RvcmFnZUFyZWFNYXBzOworCisgICAgY2xhc3MgRXBoZW1lcmFsU3RvcmFnZUFyZWE7CisgICAg
SGFzaE1hcDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEsIFJlZlB0cjxFcGhlbWVyYWxTdG9y
YWdlQXJlYT4+IG1fZXBoZW1lcmFsTG9jYWxTdG9yYWdlQXJlYXM7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvU3RvcmFn
ZS9XZWJTdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9TdG9yYWdlL1dlYlN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlci5jcHAKaW5kZXggZDUzZjQ0
NzViMDA5YTg0YTY0MTM5M2Y5MDQ3ZWRlMjRmYzViNmEwNS4uYTM3NThlYjg3NDI4OGZmZDg5NjYy
ZDAyNWUxNThkNjZhMDcwYzU3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9TdG9yYWdlL1dlYlN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlci5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9TdG9yYWdlL1dlYlN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlci5jcHAK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NzEsNiArNzEsMTEgQEAgUmVmUHRyPFdlYkNvcmU6OlN0b3JhZ2VOYW1lc3BhY2U+IFdlYlN0b3Jh
Z2VOYW1lc3BhY2VQcm92aWRlcjo6Y3JlYXRlU2Vzc2lvblN0b3IKICAgICByZXR1cm4gU3RvcmFn
ZU5hbWVzcGFjZUltcGw6OmNyZWF0ZVNlc3Npb25TdG9yYWdlTmFtZXNwYWNlKFdlYlBhZ2U6OmZy
b21Db3JlUGFnZSgmcGFnZSktPnBhZ2VJRCgpLCBxdW90YSk7CiB9CiAKK1JlZlB0cjxXZWJDb3Jl
OjpTdG9yYWdlTmFtZXNwYWNlPiBXZWJTdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXI6OmNyZWF0ZUVw
aGVtZXJhbExvY2FsU3RvcmFnZU5hbWVzcGFjZShQYWdlJiBwYWdlLCB1bnNpZ25lZCBxdW90YSkK
K3sKKyAgICByZXR1cm4gU3RvcmFnZU5hbWVzcGFjZUltcGw6OmNyZWF0ZUVwaGVtZXJhbExvY2Fs
U3RvcmFnZU5hbWVzcGFjZShXZWJQYWdlOjpmcm9tQ29yZVBhZ2UoJnBhZ2UpLT5wYWdlSUQoKSwg
cXVvdGEpOworfQorCiBSZWZQdHI8V2ViQ29yZTo6U3RvcmFnZU5hbWVzcGFjZT4gV2ViU3RvcmFn
ZU5hbWVzcGFjZVByb3ZpZGVyOjpjcmVhdGVMb2NhbFN0b3JhZ2VOYW1lc3BhY2UodW5zaWduZWQg
cXVvdGEpCiB7CiAgICAgcmV0dXJuIFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpjcmVhdGVMb2NhbFN0
b3JhZ2VOYW1lc3BhY2UobV9pZGVudGlmaWVyLCBxdW90YSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1N0b3JhZ2UvV2ViU3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1N0b3JhZ2UvV2ViU3RvcmFnZU5hbWVzcGFjZVBy
b3ZpZGVyLmgKaW5kZXggYTYzMmJiNzAxYzVkYTVhMTE0YzBiMDE5NGZlYmEwMTk4ZDI4ZGEwNy4u
YTRjMjE0MjRiZjI2ZTM0MTAxMDg4YmMwMjgyYjQzMTIyNmE2NDlhNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9TdG9yYWdlL1dlYlN0b3JhZ2VOYW1lc3BhY2VQcm92aWRl
ci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvU3RvcmFnZS9XZWJTdG9yYWdlTmFt
ZXNwYWNlUHJvdmlkZXIuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zOSw2ICszOSw3IEBAIHByaXZhdGU6CiAgICAgZXhwbGljaXQgV2Vi
U3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyKHVpbnQ2NF90IGlkZW50aWZpZXIpOwogCiAgICAgUmVm
UHRyPFdlYkNvcmU6OlN0b3JhZ2VOYW1lc3BhY2U+IGNyZWF0ZVNlc3Npb25TdG9yYWdlTmFtZXNw
YWNlKFdlYkNvcmU6OlBhZ2UmLCB1bnNpZ25lZCBxdW90YSkgb3ZlcnJpZGU7CisgICAgUmVmUHRy
PFdlYkNvcmU6OlN0b3JhZ2VOYW1lc3BhY2U+IGNyZWF0ZUVwaGVtZXJhbExvY2FsU3RvcmFnZU5h
bWVzcGFjZShXZWJDb3JlOjpQYWdlJiwgdW5zaWduZWQgcXVvdGEpIG92ZXJyaWRlOwogICAgIFJl
ZlB0cjxXZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlPiBjcmVhdGVMb2NhbFN0b3JhZ2VOYW1lc3Bh
Y2UodW5zaWduZWQgcXVvdGEpIG92ZXJyaWRlOwogICAgIFJlZlB0cjxXZWJDb3JlOjpTdG9yYWdl
TmFtZXNwYWNlPiBjcmVhdGVUcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UoV2ViQ29yZTo6
U2VjdXJpdHlPcmlnaW4mLCB1bnNpZ25lZCBxdW90YSkgb3ZlcnJpZGU7CiAKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA1MmVi
YjczM2IyZDQ2N2M3YzM1OTliODAyNzFiNjAzYWI0MzA3OGQxLi4zMDJiMjY4NTQwZThhZDFlYTFk
MTIzNmU4ZTIwNzE1MDA1YzM1YmE2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
KysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTctMDQtMTIg
IEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIFF1b3RhRXhjZWVk
ZWRFcnJvciB3aGVuIHNhdmluZyB0byBsb2NhbFN0b3JhZ2UgaW4gcHJpdmF0ZSBtb2RlLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3MDEwCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9t
YWMtd2syL1Rlc3RFeHBlY3RhdGlvbnM6CisgICAgICAgICogc3RvcmFnZS9kb21zdG9yYWdlL2xv
Y2Fsc3RvcmFnZS9wcml2YXRlLWJyb3dzaW5nLWFmZmVjdHMtc3RvcmFnZS1leHBlY3RlZC50eHQ6
CisgICAgICAgICogc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9wcml2YXRlLWJyb3dz
aW5nLWFmZmVjdHMtc3RvcmFnZS5odG1sOgorICAgICAgICAqIHN0b3JhZ2UvZG9tc3RvcmFnZS9s
b2NhbHN0b3JhZ2UvcmVzb3VyY2VzL3ByaXZhdGUtYnJvd3NpbmctMS5odG1sOiBBZGRlZC4KKyAg
ICAgICAgKiBzdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3Jlc291cmNlcy9wcml2YXRl
LWJyb3dzaW5nLTIuaHRtbDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9kb21zdG9yYWdlL2xv
Y2Fsc3RvcmFnZS9yZXNvdXJjZXMvcHJpdmF0ZS1icm93c2luZy0zLmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIHN0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2UvcmVzb3VyY2VzL3ByaXZhdGUt
YnJvd3Npbmctc3RvcmFnZS0yLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2UvZG9tc3Rv
cmFnZS9zZXNzaW9uc3RvcmFnZS9wcml2YXRlLWJyb3dzaW5nLWFmZmVjdHMtc3RvcmFnZS1leHBl
Y3RlZC50eHQ6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9kb21zdG9yYWdlL3Nlc3Npb25z
dG9yYWdlL3ByaXZhdGUtYnJvd3NpbmctYWZmZWN0cy1zdG9yYWdlLmh0bWw6IFJlbW92ZWQuCisK
IDIwMTctMDQtMDcgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CiAKICAgICAg
ICAgV2ViS2l0IHNob3VsZCBwZXJjZW50IGVuY29kZSBzaW5nbGUgcXVvdGVzIGluIHF1ZXJ5IHN0
cmluZ3MKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azIvVGVzdEV4cGVj
dGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azIvVGVzdEV4cGVjdGF0aW9ucwpp
bmRleCA2MzMyOTE2OWE5NDJmZTY0MTU2YjJkNzQzZTM0ZGQ0MjY3Y2QwNGQ0Li5iYzM3MzI4ZWY2
MGMxZmYwZjVmOWI5Y2U1MDcxYzgzZWEyM2UzZmFhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9tYWMtd2syL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vbWFjLXdrMi9UZXN0RXhwZWN0YXRpb25zCkBAIC00MjQsOCArNDI0LDYgQEAgaHR0cC90ZXN0
cy9zZWN1cml0eS9zdG9yYWdlLWJsb2NraW5nLWxvb3NlbmVkLXByaXZhdGUtYnJvd3NpbmctcGx1
Z2luLmh0bWwgWyBTa2kKIGh0dHAvdGVzdHMvc2VjdXJpdHkvc3RvcmFnZS1ibG9ja2luZy1zdHJl
bmd0aGVuZWQtcHJpdmF0ZS1icm93c2luZy1wbHVnaW4uaHRtbCBbIFNraXAgXQogcGx1Z2lucy9w
cml2YXRlLWJyb3dzaW5nLW1vZGUtMi5odG1sIFsgU2tpcCBdCiBwbHVnaW5zL3ByaXZhdGUtYnJv
d3NpbmctbW9kZS5odG1sIFsgU2tpcCBdCi1zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdl
L3ByaXZhdGUtYnJvd3NpbmctYWZmZWN0cy1zdG9yYWdlLmh0bWwgWyBTa2lwIF0KLXN0b3JhZ2Uv
ZG9tc3RvcmFnZS9zZXNzaW9uc3RvcmFnZS9wcml2YXRlLWJyb3dzaW5nLWFmZmVjdHMtc3RvcmFn
ZS5odG1sIFsgU2tpcCBdCiBzdG9yYWdlL3dlYnNxbC9wcml2YXRlLWJyb3dzaW5nLW5vcmVhZC1u
b3dyaXRlLmh0bWwgWyBTa2lwIF0KIAogIyBUaGVyZSBpcyBubyBuZXR3b3JrIGxvYWQgc2NoZWR1
bGluZyBvciBwcmlvcml0aXphdGlvbiB3aXRoIE5ldHdvcmtQcm9jZXNzLgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9wcml2YXRlLWJyb3dz
aW5nLWFmZmVjdHMtc3RvcmFnZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2Rv
bXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3ByaXZhdGUtYnJvd3NpbmctYWZmZWN0cy1zdG9yYWdlLWV4
cGVjdGVkLnR4dAppbmRleCAyNzE5MGE0NzEwNTI3YjJkYWRkYjVjYjlhZDAxNmNlNDBjYTIyN2Ex
Li4yY2E5NTU3NTAyN2ZhYjg5YWJlYjQ2N2IzODA1YzIwNjA1ZGZmYmQxIDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3ByaXZhdGUtYnJvd3Np
bmctYWZmZWN0cy1zdG9yYWdlLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdl
L2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3ByaXZhdGUtYnJvd3NpbmctYWZmZWN0cy1zdG9yYWdl
LWV4cGVjdGVkLnR4dApAQCAtMSw3ICsxLDE0IEBACi1UaGlzIGlzIGEgdGVzdCB0byBtYWtlIHN1
cmUgdGhhdCB3aGVuIHByaXZhdGUgYnJvd3NpbmcgaXMgb24gYW55IGF0dGVtcHQgdG8gY2hhbmdl
IHRoZSBsb2NhbFN0b3JhZ2UgYXJlYSBmYWlsLgotSW5pdGlhbCB2YWx1ZSBvZiB0ZXN0SXRlbSBp
czogbnVsbAotQ2F1Z2h0IGV4Y2VwdGlvbiB0cnlpbmcgdG8gY2hhbmdlIGl0ZW06IFF1b3RhRXhj
ZWVkZWRFcnJvciAoRE9NIEV4Y2VwdGlvbiAyMik6IFRoZSBxdW90YSBoYXMgYmVlbiBleGNlZWRl
ZC4KLUFmdGVyIGNoYW5nZSBhdHRlbXB0LCB0ZXN0SXRlbSBpczogbnVsbAotQWZ0ZXIgcmVtb3Zl
IGF0dGVtcHQsIHRlc3RJdGVtIGlzOiBudWxsCi1BZnRlciBjbGVhciBhdHRlbXB0LCB0ZXN0SXRl
bSBpczogbnVsbAorQUxFUlQ6IFBlcnNpc3RlbnQgbG9jYWxTdG9yYWdlIHRlc3RJdGVtIGlzOiBQ
ZXJzaXN0ZW50IGl0ZW0hCitBTEVSVDogU3RhcnQgb2YgcHJpdmF0ZSBicm93c2luZyB0ZXN0LCB0
ZXN0SXRlbSBpczogbnVsbAorQUxFUlQ6IGxvY2FsU3RvcmFnZSdzIGxlbmd0aCBpczogMAorQUxF
UlQ6IEFmdGVyIHNldCBhdHRlbXB0LCB0ZXN0SXRlbSBpczogRmlyc3RWYWx1ZQorQUxFUlQ6IEFm
dGVyIHNlY29uZCBzZXQgYXR0ZW1wdCwgdGVzdEl0ZW0gaXM6IENoYW5nZWRWYWx1ZQorQUxFUlQ6
IE9wZW5pbmcgd2luZG93Li4uCitBTEVSVDogbG9jYWxTdG9yYWdlJ3MgbGVuZ3RoIGlzOiAxCitB
TEVSVDogVGhlIGl0ZW0gaW4gbmV3IHdpbmRvdyBzdGFydHMgb3V0IGFzOiBDaGFuZ2VkVmFsdWUK
K0FMRVJUOiBUaGUgaXRlbSBpbiBuZXcgd2luZG93IGlzIG5vdzogTmV3V2luZG93VmFsdWUKK0FM
RVJUOiBCYWNrIGluIHBhcmVudCB3aW5kb3csIGxvY2FsU3RvcmFnZSdzIGxlbmd0aCBpczogMQor
QUxFUlQ6IEJhY2sgaW4gcGFyZW50IHdpbmRvdywgdGVzdEl0ZW0gaXM6IENoYW5nZWRWYWx1ZQor
QUxFUlQ6IEZpbmFsIHdpbmRvdywgbG9jYWxTdG9yYWdlJ3MgbGVuZ3RoIGlzOiAxCitBTEVSVDog
RmluYWwgd2luZG93LCBpdGVtIGlzOiBQZXJzaXN0ZW50IGl0ZW0hCiAKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2UvcHJpdmF0ZS1icm93c2lu
Zy1hZmZlY3RzLXN0b3JhZ2UuaHRtbCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9s
b2NhbHN0b3JhZ2UvcHJpdmF0ZS1icm93c2luZy1hZmZlY3RzLXN0b3JhZ2UuaHRtbAppbmRleCBi
YzUwZWQ3OTM0ZmU2ZjA3YTkxMzk4ZDQ1MjA1OTFjOTJkMDUyNmVjLi5lZDU4YTYwYzgwYmYzZGVk
NjUyYWY5ZjJiZDYxMDFlNDA4YzJkNzc5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdG9yYWdl
L2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3ByaXZhdGUtYnJvd3NpbmctYWZmZWN0cy1zdG9yYWdl
Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9w
cml2YXRlLWJyb3dzaW5nLWFmZmVjdHMtc3RvcmFnZS5odG1sCkBAIC0yLDQ5ICsyLDM2IEBACiA8
aGVhZD4KIDxzY3JpcHQ+CiAKLWlmICh3aW5kb3cudGVzdFJ1bm5lcikKK2lmICh3aW5kb3cudGVz
dFJ1bm5lcikgewogICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOworICAgIHRlc3RSdW5uZXIu
d2FpdFVudGlsRG9uZSgpOworfQogCiBmdW5jdGlvbiBsb2coYSkKIHsKLSAgICBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgibG9nZ2VyIikuaW5uZXJIVE1MICs9IGEgKyAiPGJyPiI7CisgICAgYWxl
cnQoYSArICIiKTsKIH0KIAogZnVuY3Rpb24gcnVuVGVzdCgpCiB7Ci0gICAgaWYgKCF3aW5kb3cu
bG9jYWxTdG9yYWdlKSB7Ci0gICAgICAgIGxvZygid2luZG93LmxvY2FsU3RvcmFnZSBET0VTIE5P
VCBleGlzdCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQogICAgIGlmICghd2luZG93LnRlc3RS
dW5uZXIpIHsKLSAgICAgICAgbG9nKCJUZXN0IG9ubHkgZGVzaWduZWQgdG8gYmUgcnVuIHVuZGVy
IER1bXBSZW5kZXJUcmVlIik7CisgICAgICAgIGxvZygiVGVzdCBvbmx5IGRlc2lnbmVkIHRvIGJl
IHJ1biB1bmRlciBEdW1wUmVuZGVyVHJlZSBvciBXZWJLaXRUZXN0UnVubmVyIik7CiAgICAgICAg
IHJldHVybjsKICAgICB9Ci0gICAgbG9jYWxTdG9yYWdlLmNsZWFyKCk7CisKKyAgICBsb2NhbFN0
b3JhZ2Uuc2V0SXRlbSgidGVzdEl0ZW0iLCAiUGVyc2lzdGVudCBpdGVtISIpOworICAgIGxvZygi
UGVyc2lzdGVudCBsb2NhbFN0b3JhZ2UgdGVzdEl0ZW0gaXM6ICIgKyBsb2NhbFN0b3JhZ2UuZ2V0
SXRlbSgidGVzdEl0ZW0iKSk7CiAgICAgCi0gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oInRlc3RJ
dGVtIiwgIkluaXRpYWxWYWx1ZSIpOyAgICAKICAgICB0ZXN0UnVubmVyLnNldFByaXZhdGVCcm93
c2luZ0VuYWJsZWQodHJ1ZSk7Ci0gICAgbG9nKCJJbml0aWFsIHZhbHVlIG9mIHRlc3RJdGVtIGlz
OiAiICsgbG9jYWxTdG9yYWdlLmdldEl0ZW0oInRlc3RJdGVtIikpOwotCi0gICAgdHJ5IHsKLSAg
ICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oInRlc3RJdGVtIiwgIkNoYW5nZWRWYWx1ZSIpOwot
ICAgIH0gY2F0Y2goZSkgewotICAgICAgICBsb2coIkNhdWdodCBleGNlcHRpb24gdHJ5aW5nIHRv
IGNoYW5nZSBpdGVtOiAiICsgZSk7Ci0gICAgfQotCi0gICAgbG9nKCJBZnRlciBjaGFuZ2UgYXR0
ZW1wdCwgdGVzdEl0ZW0gaXM6ICIgKyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgidGVzdEl0ZW0iKSk7
CisgICAgdGVzdFJ1bm5lci5zZXRDYW5PcGVuV2luZG93cygpOwogICAgIAotICAgIGxvY2FsU3Rv
cmFnZS5yZW1vdmVJdGVtKCJ0ZXN0SXRlbSIpOwotICAgIGxvZygiQWZ0ZXIgcmVtb3ZlIGF0dGVt
cHQsIHRlc3RJdGVtIGlzOiAiICsgbG9jYWxTdG9yYWdlLmdldEl0ZW0oInRlc3RJdGVtIikpOwot
Ci0gICAgbG9jYWxTdG9yYWdlLmNsZWFyKCk7Ci0gICAgbG9nKCJBZnRlciBjbGVhciBhdHRlbXB0
LCB0ZXN0SXRlbSBpczogIiArIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ0ZXN0SXRlbSIpKTsKKyAg
ICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICJyZXNvdXJjZXMvcHJpdmF0ZS1icm93c2luZy0xLmh0
bWwiCiB9CiAKIDwvc2NyaXB0PgogPC9oZWFkPgogPGJvZHkgb25sb2FkPSJydW5UZXN0KCk7Ij4K
LVRoaXMgaXMgYSB0ZXN0IHRvIG1ha2Ugc3VyZSB0aGF0IHdoZW4gcHJpdmF0ZSBicm93c2luZyBp
cyBvbiBhbnkgYXR0ZW1wdCB0byBjaGFuZ2UgdGhlIGxvY2FsU3RvcmFnZSBhcmVhIGZhaWwuCitU
aGlzIGlzIGEgdGVzdCB0byBtYWtlIHN1cmUgdGhhdCB3aGVuIHByaXZhdGUgYnJvd3NpbmcgaXMg
b24gY2hhbmdlcyB0byBsb2NhbCBzdG9yYWdlIGFyZSBub3QgcGVyc2lzdGVudC4KIDxkaXYgaWQ9
ImxvZ2dlciI+PC9kaXY+CiA8L2JvZHk+CiA8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3Jlc291cmNlcy9wcml2YXRlLWJyb3dz
aW5nLTEuaHRtbCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uv
cmVzb3VyY2VzL3ByaXZhdGUtYnJvd3NpbmctMS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU0MTAxZTM5MWMw
NWNkNmI2YTk3MzA4ZDE2MjkxN2EyZDFhYzg5YzQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3Jlc291cmNlcy9wcml2YXRlLWJy
b3dzaW5nLTEuaHRtbApAQCAtMCwwICsxLDU2IEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4K
KworaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7
CisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7Cit9CisKK2Z1bmN0aW9uIGxvZyhhKQor
eworICAgIGFsZXJ0KGEgKyAiIik7Cit9CisKK2Z1bmN0aW9uIHJ1blRlc3QoKQoreworICAgIHdp
bmRvdy5sb2dnZXIgPSBsb2c7CisgICAgd2luZG93LmFsbERvbmUgPSBmdW5jdGlvbigpIHsKKyAg
ICAgICAgbG9nKCJCYWNrIGluIHBhcmVudCB3aW5kb3csIGxvY2FsU3RvcmFnZSdzIGxlbmd0aCBp
czogIiArIGxvY2FsU3RvcmFnZS5sZW5ndGgpOworICAgICAgICBsb2coIkJhY2sgaW4gcGFyZW50
IHdpbmRvdywgdGVzdEl0ZW0gaXM6ICIgKyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgidGVzdEl0ZW0i
KSk7CisgICAgICAgIAorICAgICAgICB0ZXN0UnVubmVyLnNldFByaXZhdGVCcm93c2luZ0VuYWJs
ZWQoZmFsc2UpOworCisgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gInByaXZhdGUtYnJv
d3NpbmctMy5odG1sIjsKKyAgICB9CisKKyAgICBsb2coIlN0YXJ0IG9mIHByaXZhdGUgYnJvd3Np
bmcgdGVzdCwgdGVzdEl0ZW0gaXM6ICIgKyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgidGVzdEl0ZW0i
KSk7CisgICAgbG9nKCJsb2NhbFN0b3JhZ2UncyBsZW5ndGggaXM6ICIgKyBsb2NhbFN0b3JhZ2Uu
bGVuZ3RoKTsKKworICAgIHRyeSB7CisgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCJ0ZXN0
SXRlbSIsICJGaXJzdFZhbHVlIik7CisgICAgfSBjYXRjaChlKSB7CisgICAgICAgIGxvZygiQ2F1
Z2h0IGV4Y2VwdGlvbiB0cnlpbmcgdG8gY2hhbmdlIGl0ZW06ICIgKyBlKTsKKyAgICB9CisKKyAg
ICBsb2coIkFmdGVyIHNldCBhdHRlbXB0LCB0ZXN0SXRlbSBpczogIiArIGxvY2FsU3RvcmFnZS5n
ZXRJdGVtKCJ0ZXN0SXRlbSIpKTsKKyAgICAKKyAgICB0cnkgeworICAgICAgICBsb2NhbFN0b3Jh
Z2Uuc2V0SXRlbSgidGVzdEl0ZW0iLCAiQ2hhbmdlZFZhbHVlIik7CisgICAgfSBjYXRjaChlKSB7
CisgICAgICAgIGxvZygiQ2F1Z2h0IGV4Y2VwdGlvbiB0cnlpbmcgdG8gY2hhbmdlIGl0ZW06ICIg
KyBlKTsKKyAgICB9CisKKyAgICBsb2coIkFmdGVyIHNlY29uZCBzZXQgYXR0ZW1wdCwgdGVzdEl0
ZW0gaXM6ICIgKyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgidGVzdEl0ZW0iKSk7CisgICAgbG9nKCJP
cGVuaW5nIHdpbmRvdy4uLiIpOworCisgICAgd2luZG93Lm9wZW4oInByaXZhdGUtYnJvd3Npbmct
Mi5odG1sIiwgIl9ibGFuayIpOworfQorCis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9h
ZD0icnVuVGVzdCgpOyI+CitUaGlzIGlzIGEgdGVzdCB0byBtYWtlIHN1cmUgdGhhdCB3aGVuIHBy
aXZhdGUgYnJvd3NpbmcgaXMgb24gY2hhbmdlcyB0byBsb2NhbCBzdG9yYWdlIGFyZSBub3QgcGVy
c2lzdGVudC4KKzxkaXYgaWQ9ImxvZ2dlciI+PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3Jlc291
cmNlcy9wcml2YXRlLWJyb3dzaW5nLTIuaHRtbCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3Rv
cmFnZS9sb2NhbHN0b3JhZ2UvcmVzb3VyY2VzL3ByaXZhdGUtYnJvd3NpbmctMi5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjBiNmI3ZjIyMjdjMDU0OTRhNGMwN2JjYzc3MDcwZWFjOGE3YjkwOTkKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3Jl
c291cmNlcy9wcml2YXRlLWJyb3dzaW5nLTIuaHRtbApAQCAtMCwwICsxLDMxIEBACis8aHRtbD4K
KzxoZWFkPgorPHNjcmlwdD4KKworZnVuY3Rpb24gbG9nKGEpCit7CisgICAgb3BlbmVyLmxvZ2dl
cihhKTsKK30KKworZnVuY3Rpb24gcnVuVGVzdCgpCit7CisgICAgaWYgKCF3aW5kb3cudGVzdFJ1
bm5lcikgeworICAgICAgICBsb2coIlRlc3Qgb25seSBkZXNpZ25lZCB0byBiZSBydW4gdW5kZXIg
RHVtcFJlbmRlclRyZWUgb3IgV2ViS2l0VGVzdFJ1bm5lciIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgdGVzdFJ1bm5lci5zZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKHRydWUpOwor
ICAgIAorICAgIGxvZygibG9jYWxTdG9yYWdlJ3MgbGVuZ3RoIGlzOiAiICsgbG9jYWxTdG9yYWdl
Lmxlbmd0aCk7CisgICAgbG9nKCJUaGUgaXRlbSBpbiBuZXcgd2luZG93IHN0YXJ0cyBvdXQgYXM6
ICIgKyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgidGVzdEl0ZW0iKSk7CisgICAgbG9jYWxTdG9yYWdl
LnNldEl0ZW0oInRlc3RJdGVtIiwgIk5ld1dpbmRvd1ZhbHVlIik7CisgICAgbG9nKCJUaGUgaXRl
bSBpbiBuZXcgd2luZG93IGlzIG5vdzogIiArIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ0ZXN0SXRl
bSIpKTsKKworICAgIG9wZW5lci5hbGxEb25lKCk7Cit9CisKKzwvc2NyaXB0PgorPC9oZWFkPgor
PGJvZHkgb25sb2FkPSJydW5UZXN0KCk7Ij4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2UvcmVzb3VyY2VzL3By
aXZhdGUtYnJvd3NpbmctMy5odG1sIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL2xv
Y2Fsc3RvcmFnZS9yZXNvdXJjZXMvcHJpdmF0ZS1icm93c2luZy0zLmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YjcwMzk2OGU2NzE0NjRmNDMxZDdhOGIyNTdjNjYyY2M0ODhhNDVhYgotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2UvcmVzb3VyY2Vz
L3ByaXZhdGUtYnJvd3NpbmctMy5odG1sCkBAIC0wLDAgKzEsMjMgQEAKKzxodG1sPgorPGhlYWQ+
Cis8c2NyaXB0PgorCitmdW5jdGlvbiBsb2coYSkKK3sKKyAgICBhbGVydChhICsgIiIpOworfQor
CitmdW5jdGlvbiBydW5UZXN0KCkKK3sKKyAgICBsb2coIkZpbmFsIHdpbmRvdywgbG9jYWxTdG9y
YWdlJ3MgbGVuZ3RoIGlzOiAiICsgbG9jYWxTdG9yYWdlLmxlbmd0aCk7CisgICAgbG9nKCJGaW5h
bCB3aW5kb3csIGl0ZW0gaXM6ICIgKyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgidGVzdEl0ZW0iKSk7
CisKKyAgICBpZiAodGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7
Cit9CisKKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0KCk7Ij4KKzwv
Ym9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFn
ZS9sb2NhbHN0b3JhZ2UvcmVzb3VyY2VzL3ByaXZhdGUtYnJvd3Npbmctc3RvcmFnZS0yLmh0bWwg
Yi9MYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3Jlc291cmNlcy9w
cml2YXRlLWJyb3dzaW5nLXN0b3JhZ2UtMi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBiOWEzNDgxNGMyNWYx
ZDgyYzlmYzY0YmU4ZjNlMGYwZjM3ZDQ3ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3Jlc291cmNlcy9wcml2YXRlLWJyb3dz
aW5nLXN0b3JhZ2UtMi5odG1sCkBAIC0wLDAgKzEsMjkgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2Ny
aXB0PgorCitmdW5jdGlvbiBsb2coYSkKK3sKKyAgICBvcGVuZXIubG9nZ2VyKGEpOworfQorCitm
dW5jdGlvbiBydW5UZXN0KCkKK3sKKyAgICBpZiAoIXdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAg
ICAgIGxvZygiVGVzdCBvbmx5IGRlc2lnbmVkIHRvIGJlIHJ1biB1bmRlciBEdW1wUmVuZGVyVHJl
ZSBvciBXZWJLaXRUZXN0UnVubmVyIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisg
ICAgbG9nKCJsb2NhbFN0b3JhZ2UncyBsZW5ndGggaXM6ICIgKyBsb2NhbFN0b3JhZ2UubGVuZ3Ro
KTsKKyAgICBsb2coIlRoZSBpdGVtIGluIG5ldyB3aW5kb3cgc3RhcnRzIG91dCBhczogIiArIGxv
Y2FsU3RvcmFnZS5nZXRJdGVtKCJ0ZXN0SXRlbSIpKTsKKyAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRl
bSgidGVzdEl0ZW0iLCAiTmV3V2luZG93VmFsdWUiKTsKKyAgICBsb2coIlRoZSBpdGVtIGluIG5l
dyB3aW5kb3cgaXMgbm93OiAiICsgbG9jYWxTdG9yYWdlLmdldEl0ZW0oInRlc3RJdGVtIikpOwor
CisgICAgb3BlbmVyLmFsbERvbmUoKTsKK30KKworPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBv
bmxvYWQ9InJ1blRlc3QoKTsiPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL3Nlc3Npb25zdG9yYWdlL3ByaXZhdGUtYnJvd3Npbmct
YWZmZWN0cy1zdG9yYWdlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3Rv
cmFnZS9zZXNzaW9uc3RvcmFnZS9wcml2YXRlLWJyb3dzaW5nLWFmZmVjdHMtc3RvcmFnZS1leHBl
Y3RlZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzNTQzYjkyNjg3MWE4NTk3
MzAwZjFjN2Y0MTM2ZDFhZTY4ZGM4NTYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL3Nlc3Npb25zdG9y
YWdlL3ByaXZhdGUtYnJvd3NpbmctYWZmZWN0cy1zdG9yYWdlLWV4cGVjdGVkLnR4dAorKysgL2Rl
di9udWxsCkBAIC0xLDcgKzAsMCBAQAotVGhpcyBpcyBhIHRlc3QgdG8gbWFrZSBzdXJlIHRoYXQg
d2hlbiBwcml2YXRlIGJyb3dzaW5nIGlzIG9uIGFueSBhdHRlbXB0IHRvIGNoYW5nZSB0aGUgc2Vz
c2lvblN0b3JhZ2UgYXJlYSBmYWlsLgotSW5pdGlhbCB2YWx1ZSBvZiB0ZXN0SXRlbSBpczogbnVs
bAotQ2F1Z2h0IGV4Y2VwdGlvbiB0cnlpbmcgdG8gY2hhbmdlIGl0ZW06IFF1b3RhRXhjZWVkZWRF
cnJvciAoRE9NIEV4Y2VwdGlvbiAyMik6IFRoZSBxdW90YSBoYXMgYmVlbiBleGNlZWRlZC4KLUFm
dGVyIGNoYW5nZSBhdHRlbXB0LCB0ZXN0SXRlbSBpczogbnVsbAotQWZ0ZXIgcmVtb3ZlIGF0dGVt
cHQsIHRlc3RJdGVtIGlzOiBudWxsCi1BZnRlciBjbGVhciBhdHRlbXB0LCB0ZXN0SXRlbSBpczog
bnVsbAotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2Uvc2Vzc2lv
bnN0b3JhZ2UvcHJpdmF0ZS1icm93c2luZy1hZmZlY3RzLXN0b3JhZ2UuaHRtbCBiL0xheW91dFRl
c3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9zZXNzaW9uc3RvcmFnZS9wcml2YXRlLWJyb3dzaW5nLWFm
ZmVjdHMtc3RvcmFnZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjJhMTFi
YzdhYWE0YWM4MzAzOTg3ZDkzODZkMzQxOGVkMjcxNTM5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9z
ZXNzaW9uc3RvcmFnZS9wcml2YXRlLWJyb3dzaW5nLWFmZmVjdHMtc3RvcmFnZS5odG1sCisrKyAv
ZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotPGh0bWw+Ci08aGVhZD4KLTxzY3JpcHQgc3JjPSJy
ZXNvdXJjZXMvY2xlYXJTZXNzaW9uU3RvcmFnZS5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0PgotCi1p
ZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7Ci0KLWZ1
bmN0aW9uIGxvZyhhKQotewotICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2dnZXIiKS5p
bm5lckhUTUwgKz0gYSArICI8YnI+IjsKLX0KLQotZnVuY3Rpb24gcnVuVGVzdCgpCi17Ci0gICAg
aWYgKCF3aW5kb3cuc2Vzc2lvblN0b3JhZ2UpIHsKLSAgICAgICAgbG9nKCJ3aW5kb3cuc2Vzc2lv
blN0b3JhZ2UgRE9FUyBOT1QgZXhpc3QiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBp
ZiAoIXdpbmRvdy50ZXN0UnVubmVyKSB7Ci0gICAgICAgIGxvZygiVGVzdCBvbmx5IGRlc2lnbmVk
IHRvIGJlIHJ1biB1bmRlciBEdW1wUmVuZGVyVHJlZSIpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIAotICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oInRlc3RJdGVtIiwgIkluaXRpYWxW
YWx1ZSIpOyAgICAKLSAgICB0ZXN0UnVubmVyLnNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQodHJ1
ZSk7Ci0gICAgbG9nKCJJbml0aWFsIHZhbHVlIG9mIHRlc3RJdGVtIGlzOiAiICsgc2Vzc2lvblN0
b3JhZ2UuZ2V0SXRlbSgidGVzdEl0ZW0iKSk7Ci0KLSAgICB0cnkgewotICAgICAgICBzZXNzaW9u
U3RvcmFnZS5zZXRJdGVtKCJ0ZXN0SXRlbSIsICJDaGFuZ2VkVmFsdWUiKTsKLSAgICB9IGNhdGNo
KGUpIHsKLSAgICAgICAgbG9nKCJDYXVnaHQgZXhjZXB0aW9uIHRyeWluZyB0byBjaGFuZ2UgaXRl
bTogIiArIGUpOwotICAgIH0KLQotICAgIGxvZygiQWZ0ZXIgY2hhbmdlIGF0dGVtcHQsIHRlc3RJ
dGVtIGlzOiAiICsgc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgidGVzdEl0ZW0iKSk7Ci0gICAgCi0g
ICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgidGVzdEl0ZW0iKTsKLSAgICBsb2coIkFmdGVy
IHJlbW92ZSBhdHRlbXB0LCB0ZXN0SXRlbSBpczogIiArIHNlc3Npb25TdG9yYWdlLmdldEl0ZW0o
InRlc3RJdGVtIikpOwotCi0gICAgc2Vzc2lvblN0b3JhZ2UuY2xlYXIoKTsKLSAgICBsb2coIkFm
dGVyIGNsZWFyIGF0dGVtcHQsIHRlc3RJdGVtIGlzOiAiICsgc2Vzc2lvblN0b3JhZ2UuZ2V0SXRl
bSgidGVzdEl0ZW0iKSk7Ci19Ci0KLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgb25sb2FkPSJy
dW5UZXN0KCk7Ij4KLVRoaXMgaXMgYSB0ZXN0IHRvIG1ha2Ugc3VyZSB0aGF0IHdoZW4gcHJpdmF0
ZSBicm93c2luZyBpcyBvbiBhbnkgYXR0ZW1wdCB0byBjaGFuZ2UgdGhlIHNlc3Npb25TdG9yYWdl
IGFyZWEgZmFpbC4KLTxkaXYgaWQ9ImxvZ2dlciI+PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306946</attachid>
            <date>2017-04-12 15:28:42 -0700</date>
            <delta_ts>2017-04-12 23:38:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-157010-20170412152842.patch</filename>
            <type>text/plain</type>
            <size>46339</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1MDk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTFjNDk0MTk2NzkyM2M3
YzYyM2JkNjUwMTkyNTFjYzlmYzRlNDJhMC4uZTRkYmMwOTBkYTkwZmI5NzUwNjg3NjM0MTFjMzQx
YTllN2Y5YmE0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDE3LTA0LTEyICBCcmFk
eSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBRdW90YUV4Y2VlZGVkRXJy
b3Igd2hlbiBzYXZpbmcgdG8gbG9jYWxTdG9yYWdlIGluIHByaXZhdGUgbW9kZS4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NzAxMAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAoQ292
ZXJlZCBieSBjaGFuZ2VzIHRvIGV4aXN0aW5nIHRlc3QpLgorICAgICAgICAKKyAgICAgICAgTG9j
YWxTdG9yYWdlIGluIHByaXZhdGUgYnJvd3NpbmcgaXMgbm93IGVmZmVjdGl2ZWx5IFNlc3Npb25T
dG9yYWdlLgorICAgICAgICBJdCdzIGVwaGVtZXJhbCwgcGVyLXRhYiwgYW5kIGNvcGllZCBvdmVy
IHRvIHRhYnMgd2luZG93Lm9wZW4oKSdlZCBmcm9tIHRoZSBjdXJyZW50LgorCisgICAgICAgICog
bG9hZGVyL0VtcHR5Q2xpZW50cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eVN0b3JhZ2VO
YW1lc3BhY2VQcm92aWRlcjo6Y3JlYXRlRXBoZW1lcmFsTG9jYWxTdG9yYWdlTmFtZXNwYWNlKToK
KworICAgICAgICAqIHBhZ2UvQ2hyb21lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZTo6
Y3JlYXRlV2luZG93KToKKworICAgICAgICAqIHBhZ2UvUGFnZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpQYWdlOjplcGhlbWVyYWxMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGFn
ZTo6c2V0RXBoZW1lcmFsTG9jYWxTdG9yYWdlKToKKyAgICAgICAgKiBwYWdlL1BhZ2UuaDoKKwor
ICAgICAgICAqIHBhZ2UvU2VjdXJpdHlPcmlnaW5EYXRhLmg6CisKKyAgICAgICAgKiBzdG9yYWdl
L1N0b3JhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZTo6bGVuZ3RoKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0b3JhZ2U6OmtleSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlOjpn
ZXRJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2U6OnNldEl0ZW0pOgorICAgICAgICAo
V2ViQ29yZTo6U3RvcmFnZTo6cmVtb3ZlSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdl
OjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlOjpjb250YWlucyk6CisgICAgICAg
IChXZWJDb3JlOjpTdG9yYWdlOjppc0Rpc2FibGVkQnlQcml2YXRlQnJvd3NpbmcpOiBEZWxldGVk
LgorCisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlTWFwLmg6CisKKyAgICAgICAgKiBzdG9yYWdl
L1N0b3JhZ2VOYW1lc3BhY2VQcm92aWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdl
TmFtZXNwYWNlUHJvdmlkZXI6OmxvY2FsU3RvcmFnZUFyZWEpOgorICAgICAgICAqIHN0b3JhZ2Uv
U3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyLmg6CisKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VU
eXBlLmg6CisgICAgICAgIChXZWJDb3JlOjppc0xvY2FsU3RvcmFnZSk6CisgICAgICAgIChXZWJD
b3JlOjppc1BlcnNpc3RlbnRMb2NhbFN0b3JhZ2UpOgorCiAyMDE3LTA0LTA3ICBCcmVudCBGdWxn
aGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYktpdCBzaG91bGQgcGVyY2Vu
dCBlbmNvZGUgc2luZ2xlIHF1b3RlcyBpbiBxdWVyeSBzdHJpbmdzCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDJiMzli
OThjNzQ5Njk2NjRkMjcwZGFjNTgwOTc3ZjEyOTVkMWZiZmUuLjY2ODRiM2U3Y2YzZWUwNzk4NzMw
YmM5MTg3YWI1NTE0MjcxZDlkZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTctMDQt
MTIgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIFF1b3RhRXhj
ZWVkZWRFcnJvciB3aGVuIHNhdmluZyB0byBsb2NhbFN0b3JhZ2UgaW4gcHJpdmF0ZSBtb2RlLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3MDEwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTdG9yYWdl
L1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU5hbWVz
cGFjZUltcGw6OmNyZWF0ZUVwaGVtZXJhbExvY2FsU3RvcmFnZU5hbWVzcGFjZSk6CisgICAgICAg
IChXZWJLaXQ6OlN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpTdG9yYWdlTmFtZXNwYWNlSW1wbCk6Cisg
ICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VOYW1lc3BhY2VJbXBsOjp+U3RvcmFnZU5hbWVzcGFjZUlt
cGwpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTmFtZXNwYWNlSW1wbDo6Y29weSk6CisgICAg
ICAgIChXZWJLaXQ6OlN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpjbG9zZSk6CisgICAgICAgICogU3Rv
cmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5oOgorCisgICAgICAgICogU3RvcmFnZS9XZWJTdG9y
YWdlTmFtZXNwYWNlUHJvdmlkZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJTdG9yYWdlTmFt
ZXNwYWNlUHJvdmlkZXI6OmNyZWF0ZUVwaGVtZXJhbExvY2FsU3RvcmFnZU5hbWVzcGFjZSk6Cisg
ICAgICAgICogU3RvcmFnZS9XZWJTdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIuaDoKKwogMjAxNy0w
NC0wNiAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIFdl
YiBJbnNwZWN0b3I6IE9ubHkgQ2FwdHVyZSBFeHRyYSBOZXR3b3JrIExvYWQgTWV0cmljcyB3aGVu
IHRoZXJlIGlzIGEgV2ViIEluc3BlY3RvciBGcm9udGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IGE1MmNkN2Fj
ZGQxMjI2M2U2NWFmMTk2YmEwMDMzMDIxMzhiOTFlNjYuLjczNDMzNmM4MGFjY2ZhZTdkMjFkYTdj
OTY2MzFjN2M2ZGE1NTI4NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAxNy0wNC0x
MiAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAgUXVvdGFFeGNl
ZWRlZEVycm9yIHdoZW4gc2F2aW5nIHRvIGxvY2FsU3RvcmFnZSBpbiBwcml2YXRlIG1vZGUuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTcwMTAKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlByb2Nl
c3MvU3RvcmFnZS9TdG9yYWdlQXJlYU1hcC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VB
cmVhTWFwOjpTdG9yYWdlQXJlYU1hcCk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhTWFw
Ojp+U3RvcmFnZUFyZWFNYXApOgorCisgICAgICAgICogV2ViUHJvY2Vzcy9TdG9yYWdlL1N0b3Jh
Z2VOYW1lc3BhY2VJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU5hbWVzcGFjZUlt
cGw6OmNyZWF0ZUVwaGVtZXJhbExvY2FsU3RvcmFnZU5hbWVzcGFjZSk6CisgICAgICAgIChXZWJL
aXQ6OlN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpzdG9yYWdlQXJlYSk6CisgICAgICAgIChXZWJLaXQ6
OlN0b3JhZ2VOYW1lc3BhY2VJbXBsOjplcGhlbWVyYWxMb2NhbFN0b3JhZ2VBcmVhKToKKyAgICAg
ICAgKFdlYktpdDo6U3RvcmFnZU5hbWVzcGFjZUltcGw6OmNvcHkpOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvU3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5oOgorCisgICAgICAgICogV2ViUHJv
Y2Vzcy9TdG9yYWdlL1dlYlN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlci5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYlN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlcjo6Y3JlYXRlRXBoZW1lcmFsTG9jYWxT
dG9yYWdlTmFtZXNwYWNlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1N0b3JhZ2UvV2ViU3RvcmFn
ZU5hbWVzcGFjZVByb3ZpZGVyLmg6CisKIDIwMTctMDQtMDcgIENhcmxvcyBHYXJjaWEgQ2FtcG9z
ICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIFVwZGF0ZSB0aGUgcHJpb3Jp
dGllcyB1c2VkIGluIGdsaWIgbWFpbiBsb29wIHNvdXJjZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Vt
cHR5Q2xpZW50cy5jcHAKaW5kZXggYjE1MDgzMjMzZDhiNDMyYTkwMTlkYzc5ZWI0ODA4Y2Y4MjFi
MzlmZC4uNjY2MWFjNzA5OWZkYzY4NjQxYzI0MTc2MTA3NWEzN2QxNDFkYjNmNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5jcHAKQEAgLTU2Miw2ICs1NjIsNyBAQCBjbGFzcyBF
bXB0eVN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlciBmaW5hbCA6IHB1YmxpYyBTdG9yYWdlTmFtZXNw
YWNlUHJvdmlkZXIgewogCiAgICAgUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IGNyZWF0ZVNlc3Np
b25TdG9yYWdlTmFtZXNwYWNlKFBhZ2UmLCB1bnNpZ25lZCkgZmluYWw7CiAgICAgUmVmUHRyPFN0
b3JhZ2VOYW1lc3BhY2U+IGNyZWF0ZUxvY2FsU3RvcmFnZU5hbWVzcGFjZSh1bnNpZ25lZCkgZmlu
YWw7CisgICAgUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IGNyZWF0ZUVwaGVtZXJhbExvY2FsU3Rv
cmFnZU5hbWVzcGFjZShQYWdlJiwgdW5zaWduZWQpIGZpbmFsOwogICAgIFJlZlB0cjxTdG9yYWdl
TmFtZXNwYWNlPiBjcmVhdGVUcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UoU2VjdXJpdHlP
cmlnaW4mLCB1bnNpZ25lZCkgZmluYWw7CiB9OwogCkBAIC02NzYsNiArNjc3LDExIEBAIFJlZlB0
cjxTdG9yYWdlTmFtZXNwYWNlPiBFbXB0eVN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlcjo6Y3JlYXRl
TG9jYWxTdG9yYWdlTmFtZXNwCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRW1wdHlTdG9yYWdl
TmFtZXNwYWNlKTsKIH0KIAorUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IEVtcHR5U3RvcmFnZU5h
bWVzcGFjZVByb3ZpZGVyOjpjcmVhdGVFcGhlbWVyYWxMb2NhbFN0b3JhZ2VOYW1lc3BhY2UoUGFn
ZSYsIHVuc2lnbmVkKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEVtcHR5U3RvcmFnZU5h
bWVzcGFjZSk7Cit9CisKIFJlZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiBFbXB0eVN0b3JhZ2VOYW1l
c3BhY2VQcm92aWRlcjo6Y3JlYXRlVHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlKFNlY3Vy
aXR5T3JpZ2luJiwgdW5zaWduZWQpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRW1wdHlT
dG9yYWdlTmFtZXNwYWNlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21l
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAppbmRleCBlMzYzZjQzYWRjNmY1
YmNlNDkwODQ0MDk3NTM3NDZhYTg2MWU4NGRkLi5hNWIwMGFlMGIxNjQxYTNkMjU4NjA3OTFlZmJk
ZGVhZjBmMWFiNGU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCkBAIC0xOTIsOCArMTkyLDEyIEBA
IFBhZ2UqIENocm9tZTo6Y3JlYXRlV2luZG93KEZyYW1lJiBmcmFtZSwgY29uc3QgRnJhbWVMb2Fk
UmVxdWVzdCYgcmVxdWVzdCwgY29uc3QKICAgICBQYWdlKiBuZXdQYWdlID0gbV9jbGllbnQuY3Jl
YXRlV2luZG93KGZyYW1lLCByZXF1ZXN0LCBmZWF0dXJlcywgYWN0aW9uKTsKICAgICBpZiAoIW5l
d1BhZ2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOworCiAgICAgaWYgKGF1dG8qIG9sZFNlc3Np
b25TdG9yYWdlID0gbV9wYWdlLnNlc3Npb25TdG9yYWdlKGZhbHNlKSkKICAgICAgICAgbmV3UGFn
ZS0+c2V0U2Vzc2lvblN0b3JhZ2Uob2xkU2Vzc2lvblN0b3JhZ2UtPmNvcHkobmV3UGFnZSkpOwor
ICAgIGlmIChhdXRvKiBvbGRFcGhlbWVyYWxMb2NhbFN0b3JhZ2UgPSBtX3BhZ2UuZXBoZW1lcmFs
TG9jYWxTdG9yYWdlKGZhbHNlKSkKKyAgICAgICAgbmV3UGFnZS0+c2V0RXBoZW1lcmFsTG9jYWxT
dG9yYWdlKG9sZEVwaGVtZXJhbExvY2FsU3RvcmFnZS0+Y29weShuZXdQYWdlKSk7CisKICAgICBy
ZXR1cm4gbmV3UGFnZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKaW5kZXggMDFkYTBjMjVjNjc2YTAx
Mzk1ZjBhZWRlMGU0MWU4YjllODQ4MmIzNi4uNzNlZjA4MWE3MzY2OTM5ODZhYzBkMDQ0ZTZmZDFi
ZDgxY2M2MDZhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCkBAIC0xMzExLDYgKzEzMTEsMTkgQEAgdm9p
ZCBQYWdlOjpzZXRTZXNzaW9uU3RvcmFnZShSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4mJiBuZXdT
dG9yYWdlKQogICAgIG1fc2Vzc2lvblN0b3JhZ2UgPSBXVEZNb3ZlKG5ld1N0b3JhZ2UpOwogfQog
CitTdG9yYWdlTmFtZXNwYWNlKiBQYWdlOjplcGhlbWVyYWxMb2NhbFN0b3JhZ2UoYm9vbCBvcHRp
b25hbENyZWF0ZSkKK3sKKyAgICBpZiAoIW1fZXBoZW1lcmFsTG9jYWxTdG9yYWdlICYmIG9wdGlv
bmFsQ3JlYXRlKQorICAgICAgICBtX2VwaGVtZXJhbExvY2FsU3RvcmFnZSA9IG1fc3RvcmFnZU5h
bWVzcGFjZVByb3ZpZGVyLT5jcmVhdGVFcGhlbWVyYWxMb2NhbFN0b3JhZ2VOYW1lc3BhY2UoKnRo
aXMsIG1fc2V0dGluZ3MtPnNlc3Npb25TdG9yYWdlUXVvdGEoKSk7CisKKyAgICByZXR1cm4gbV9l
cGhlbWVyYWxMb2NhbFN0b3JhZ2UuZ2V0KCk7Cit9CisKK3ZvaWQgUGFnZTo6c2V0RXBoZW1lcmFs
TG9jYWxTdG9yYWdlKFJlZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiYmIG5ld1N0b3JhZ2UpCit7Cisg
ICAgbV9lcGhlbWVyYWxMb2NhbFN0b3JhZ2UgPSBXVEZNb3ZlKG5ld1N0b3JhZ2UpOworfQorCiBi
b29sIFBhZ2U6Omhhc0N1c3RvbUhUTUxUb2tlbml6ZXJUaW1lRGVsYXkoKSBjb25zdAogewogICAg
IHJldHVybiBtX3NldHRpbmdzLT5tYXhQYXJzZUR1cmF0aW9uKCkgIT0gLTE7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5o
CmluZGV4IGMxNWFlZTY0NGRlNWViNTVjZTEwY2I2ZTYxMDUwOWE2MjMyYjI5OTIuLmExNDI5ODZm
YjExM2FlZTQxMjhmZDgwNDJiNTI5YjRiNTBjMDJjZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCkBAIC00MTQs
NiArNDE0LDkgQEAgcHVibGljOgogICAgIFN0b3JhZ2VOYW1lc3BhY2UqIHNlc3Npb25TdG9yYWdl
KGJvb2wgb3B0aW9uYWxDcmVhdGUgPSB0cnVlKTsKICAgICB2b2lkIHNldFNlc3Npb25TdG9yYWdl
KFJlZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiYmKTsKIAorICAgIFN0b3JhZ2VOYW1lc3BhY2UqIGVw
aGVtZXJhbExvY2FsU3RvcmFnZShib29sIG9wdGlvbmFsQ3JlYXRlID0gdHJ1ZSk7CisgICAgdm9p
ZCBzZXRFcGhlbWVyYWxMb2NhbFN0b3JhZ2UoUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+JiYpOwor
CiAgICAgYm9vbCBoYXNDdXN0b21IVE1MVG9rZW5pemVyVGltZURlbGF5KCkgY29uc3Q7CiAgICAg
ZG91YmxlIGN1c3RvbUhUTUxUb2tlbml6ZXJUaW1lRGVsYXkoKSBjb25zdDsKIApAQCAtNzE2LDYg
KzcxOSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2NhblN0YXJ0TWVkaWE7CiAKICAgICBSZWZQ
dHI8U3RvcmFnZU5hbWVzcGFjZT4gbV9zZXNzaW9uU3RvcmFnZTsKKyAgICBSZWZQdHI8U3RvcmFn
ZU5hbWVzcGFjZT4gbV9lcGhlbWVyYWxMb2NhbFN0b3JhZ2U7CiAKICNpZiBFTkFCTEUoVklFV19N
T0RFX0NTU19NRURJQSkKICAgICBWaWV3TW9kZSBtX3ZpZXdNb2RlOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbkRhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvU2VjdXJpdHlPcmlnaW5EYXRhLmgKaW5kZXggMjEwYTQ5ZWE0ZDNkMzVkNTdlYmZiMmU1MzM0
ZWI1NzIxNzg1NGE1Zi4uODJkZTA5Njk5NGYxNmRjM2JkYTFmYWQ2YjQxZGFiYTMxNjcyOWE1NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbkRhdGEuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luRGF0YS5oCkBAIC03OCw3ICs3OCw3
IEBAIHN0cnVjdCBTZWN1cml0eU9yaWdpbkRhdGEgewogICAgIH0KICAgICAKICNpZiAhTE9HX0RJ
U0FCTEVECi0gICAgU3RyaW5nIGRlYnVnU3RyaW5nKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBP
UlQgU3RyaW5nIGRlYnVnU3RyaW5nKCkgY29uc3Q7CiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL1N0b3JhZ2UuY3BwCmluZGV4IGE1MzhlMTc1NTg5ODk3YjNhMjAzNTQ4ZDEwZTU4ZDE0N2Uw
MDJkNGIuLjExZjkxOWE4MjExZmY2NDM1NWNjYjE0NTA1NTE4NzcwNDdlMzA4MjIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9TdG9yYWdlLmNwcApAQCAtNjMsOSArNjMsNiBAQCBFeGNlcHRpb25Pcjx1bnNp
Z25lZD4gU3RvcmFnZTo6bGVuZ3RoKCkgY29uc3QKICAgICBpZiAoIW1fc3RvcmFnZUFyZWEtPmNh
bkFjY2Vzc1N0b3JhZ2UobV9mcmFtZSkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTRUNV
UklUWV9FUlIgfTsKIAotICAgIGlmIChpc0Rpc2FibGVkQnlQcml2YXRlQnJvd3NpbmcoKSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KICAgICByZXR1cm4gbV9zdG9yYWdlQXJlYS0+bGVuZ3RoKCk7CiB9
CiAKQEAgLTc0LDkgKzcxLDYgQEAgRXhjZXB0aW9uT3I8U3RyaW5nPiBTdG9yYWdlOjprZXkodW5z
aWduZWQgaW5kZXgpIGNvbnN0CiAgICAgaWYgKCFtX3N0b3JhZ2VBcmVhLT5jYW5BY2Nlc3NTdG9y
YWdlKG1fZnJhbWUpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU0VDVVJJVFlfRVJSIH07
CiAKLSAgICBpZiAoaXNEaXNhYmxlZEJ5UHJpdmF0ZUJyb3dzaW5nKCkpCi0gICAgICAgIHJldHVy
biBTdHJpbmcoKTsKLQogICAgIHJldHVybiBtX3N0b3JhZ2VBcmVhLT5rZXkoaW5kZXgpOwogfQog
CkBAIC04NSw5ICs3OSw2IEBAIEV4Y2VwdGlvbk9yPFN0cmluZz4gU3RvcmFnZTo6Z2V0SXRlbShj
b25zdCBTdHJpbmcmIGtleSkgY29uc3QKICAgICBpZiAoIW1fc3RvcmFnZUFyZWEtPmNhbkFjY2Vz
c1N0b3JhZ2UobV9mcmFtZSkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTRUNVUklUWV9F
UlIgfTsKIAotICAgIGlmIChpc0Rpc2FibGVkQnlQcml2YXRlQnJvd3NpbmcoKSkKLSAgICAgICAg
cmV0dXJuIFN0cmluZygpOwotCiAgICAgcmV0dXJuIG1fc3RvcmFnZUFyZWEtPml0ZW0oa2V5KTsK
IH0KIApAQCAtOTYsOSArODcsNiBAQCBFeGNlcHRpb25Pcjx2b2lkPiBTdG9yYWdlOjpzZXRJdGVt
KGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgIGlmICghbV9zdG9y
YWdlQXJlYS0+Y2FuQWNjZXNzU3RvcmFnZShtX2ZyYW1lKSkKICAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IFNFQ1VSSVRZX0VSUiB9OwogCi0gICAgaWYgKGlzRGlzYWJsZWRCeVByaXZhdGVCcm93
c2luZygpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgUVVPVEFfRVhDRUVERURfRVJSIH07
Ci0KICAgICBib29sIHF1b3RhRXhjZXB0aW9uID0gZmFsc2U7CiAgICAgbV9zdG9yYWdlQXJlYS0+
c2V0SXRlbShtX2ZyYW1lLCBrZXksIHZhbHVlLCBxdW90YUV4Y2VwdGlvbik7CiAgICAgaWYgKHF1
b3RhRXhjZXB0aW9uKQpAQCAtMTExLDkgKzk5LDYgQEAgRXhjZXB0aW9uT3I8dm9pZD4gU3RvcmFn
ZTo6cmVtb3ZlSXRlbShjb25zdCBTdHJpbmcmIGtleSkKICAgICBpZiAoIW1fc3RvcmFnZUFyZWEt
PmNhbkFjY2Vzc1N0b3JhZ2UobV9mcmFtZSkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBT
RUNVUklUWV9FUlIgfTsKIAotICAgIGlmIChpc0Rpc2FibGVkQnlQcml2YXRlQnJvd3NpbmcoKSkK
LSAgICAgICAgcmV0dXJuIHsgfTsKLQogICAgIG1fc3RvcmFnZUFyZWEtPnJlbW92ZUl0ZW0obV9m
cmFtZSwga2V5KTsKICAgICByZXR1cm4geyB9OwogfQpAQCAtMTIzLDkgKzEwOCw2IEBAIEV4Y2Vw
dGlvbk9yPHZvaWQ+IFN0b3JhZ2U6OmNsZWFyKCkKICAgICBpZiAoIW1fc3RvcmFnZUFyZWEtPmNh
bkFjY2Vzc1N0b3JhZ2UobV9mcmFtZSkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTRUNV
UklUWV9FUlIgfTsKIAotICAgIGlmIChpc0Rpc2FibGVkQnlQcml2YXRlQnJvd3NpbmcoKSkKLSAg
ICAgICAgcmV0dXJuIHsgfTsKLQogICAgIG1fc3RvcmFnZUFyZWEtPmNsZWFyKG1fZnJhbWUpOwog
ICAgIHJldHVybiB7IH07CiB9CkBAIC0xMzUsMjMgKzExNyw3IEBAIEV4Y2VwdGlvbk9yPGJvb2w+
IFN0b3JhZ2U6OmNvbnRhaW5zKGNvbnN0IFN0cmluZyYga2V5KSBjb25zdAogICAgIGlmICghbV9z
dG9yYWdlQXJlYS0+Y2FuQWNjZXNzU3RvcmFnZShtX2ZyYW1lKSkKICAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IFNFQ1VSSVRZX0VSUiB9OwogCi0gICAgaWYgKGlzRGlzYWJsZWRCeVByaXZhdGVC
cm93c2luZygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICByZXR1cm4gbV9zdG9yYWdl
QXJlYS0+Y29udGFpbnMoa2V5KTsKIH0KIAotYm9vbCBTdG9yYWdlOjppc0Rpc2FibGVkQnlQcml2
YXRlQnJvd3NpbmcoKSBjb25zdAotewotICAgIGlmICghbV9mcmFtZS0+cGFnZSgpLT51c2VzRXBo
ZW1lcmFsU2Vzc2lvbigpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoaXNMb2Nh
bFN0b3JhZ2UobV9zdG9yYWdlQXJlYS0+c3RvcmFnZVR5cGUoKSkpIHsKLSAgICAgICAgaWYgKFNj
aGVtZVJlZ2lzdHJ5OjphbGxvd3NMb2NhbFN0b3JhZ2VBY2Nlc3NJblByaXZhdGVCcm93c2luZyht
X2ZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLnByb3RvY29sKCkpKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0
b3JhZ2VNYXAuaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU1hcC5oCmluZGV4IDUw
NDYwNTFkNmJjMmZkYjQzMjE5NDRhNDRjNmE5ZWQ2ZWM3Y2RkNWQuLmZjZGNjYTQzNDY4OWM3NTE1
ZDNhYzRjZmEyZjJhM2Q5NzAxYmMzMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvU3RvcmFnZU1hcC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU1hcC5o
CkBAIC01MSwxMSArNTEsMTIgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgcXVvdGEoKSBjb25z
dCB7IHJldHVybiBtX3F1b3RhU2l6ZTsgfQogCisgICAgV0VCQ09SRV9FWFBPUlQgUmVmPFN0b3Jh
Z2VNYXA+IGNvcHkoKTsKKwogICAgIHN0YXRpYyBjb25zdCBjb25zdGV4cHIgdW5zaWduZWQgbm9R
dW90YSA9IFVJTlRfTUFYOwogCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IFN0b3JhZ2VNYXAodW5z
aWduZWQgcXVvdGEpOwotICAgIFJlZjxTdG9yYWdlTWFwPiBjb3B5KCk7CiAgICAgdm9pZCBpbnZh
bGlkYXRlSXRlcmF0b3IoKTsKICAgICB2b2lkIHNldEl0ZXJhdG9yVG9JbmRleCh1bnNpZ25lZCk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZVBy
b3ZpZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZVByb3Zp
ZGVyLmNwcAppbmRleCBjODdiZGU4ZDVhMzFhYjY4NjM0YTFhMjVhMDNjZjVkOTgwYzQyY2ExLi44
YzRhZjQyZjhhYTE5NWIzYzZmMmMxNDVjMjg4YzgwZGQyODk0YTk0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VQcm92aWRlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIuY3BwCkBAIC0yNyw2
ICsyNyw3IEBACiAjaW5jbHVkZSAiU3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyLmgiCiAKICNpbmNs
dWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJTZWN1cml0eU9y
aWdpbkRhdGEuaCIKICNpbmNsdWRlICJTdG9yYWdlQXJlYS5oIgogI2luY2x1ZGUgIlN0b3JhZ2VO
YW1lc3BhY2UuaCIKQEAgLTYxLDkgKzYyLDIzIEBAIHZvaWQgU3RvcmFnZU5hbWVzcGFjZVByb3Zp
ZGVyOjpyZW1vdmVQYWdlKFBhZ2UmIHBhZ2UpCiAKIFJlZlB0cjxTdG9yYWdlQXJlYT4gU3RvcmFn
ZU5hbWVzcGFjZVByb3ZpZGVyOjpsb2NhbFN0b3JhZ2VBcmVhKERvY3VtZW50JiBkb2N1bWVudCkK
IHsKLSAgICBhdXRvJiBzdG9yYWdlTmFtZXNwYWNlID0gZG9jdW1lbnQuc2VjdXJpdHlPcmlnaW4o
KS5jYW5BY2Nlc3NMb2NhbFN0b3JhZ2UoJmRvY3VtZW50LnRvcE9yaWdpbigpKSA/IGxvY2FsU3Rv
cmFnZU5hbWVzcGFjZSgpIDogdHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlKGRvY3VtZW50
LnRvcE9yaWdpbigpKTsKKyAgICAvLyBUaGlzIFN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlciB3YXMg
cmV0cmlldmVkIGZyb20gdGhlIERvY3VtZW50J3MgUGFnZSwKKyAgICAvLyBzbyB0aGUgRG9jdW1l
bnQgaGFkIGJldHRlciBzdGlsbCBhY3R1YWxseSBoYXZlIGEgUGFnZS4KKyAgICBBU1NFUlQoZG9j
dW1lbnQucGFnZSgpKTsKIAotICAgIHJldHVybiBzdG9yYWdlTmFtZXNwYWNlLnN0b3JhZ2VBcmVh
KFNlY3VyaXR5T3JpZ2luRGF0YTo6ZnJvbVNlY3VyaXR5T3JpZ2luKGRvY3VtZW50LnNlY3VyaXR5
T3JpZ2luKCkpKTsKKyAgICBib29sIGVwaGVtZXJhbCA9IGRvY3VtZW50LnBhZ2UoKS0+dXNlc0Vw
aGVtZXJhbFNlc3Npb24oKTsKKyAgICBib29sIHRyYW5zaWVudCA9ICFkb2N1bWVudC5zZWN1cml0
eU9yaWdpbigpLmNhbkFjY2Vzc0xvY2FsU3RvcmFnZSgmZG9jdW1lbnQudG9wT3JpZ2luKCkpOwor
CisgICAgUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IHN0b3JhZ2VOYW1lc3BhY2U7CisKKyAgICBp
ZiAodHJhbnNpZW50KQorICAgICAgICBzdG9yYWdlTmFtZXNwYWNlID0gJnRyYW5zaWVudExvY2Fs
U3RvcmFnZU5hbWVzcGFjZShkb2N1bWVudC50b3BPcmlnaW4oKSk7CisgICAgZWxzZSBpZiAoZXBo
ZW1lcmFsKQorICAgICAgICBzdG9yYWdlTmFtZXNwYWNlID0gZG9jdW1lbnQucGFnZSgpLT5lcGhl
bWVyYWxMb2NhbFN0b3JhZ2UoKTsKKyAgICBlbHNlCisgICAgICAgIHN0b3JhZ2VOYW1lc3BhY2Ug
PSAmbG9jYWxTdG9yYWdlTmFtZXNwYWNlKCk7CisKKyAgICByZXR1cm4gc3RvcmFnZU5hbWVzcGFj
ZS0+c3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tU2VjdXJpdHlPcmlnaW4oZG9j
dW1lbnQuc2VjdXJpdHlPcmlnaW4oKSkpOwogfQogCiBTdG9yYWdlTmFtZXNwYWNlJiBTdG9yYWdl
TmFtZXNwYWNlUHJvdmlkZXI6OmxvY2FsU3RvcmFnZU5hbWVzcGFjZSgpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VQcm92aWRlci5oIGIvU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIuaAppbmRleCA4ZDM1MGU2
ZDYxYjMyMDlmODdjMzJiYWE4NjQyNjFkNzcwYjAxMDdhLi4xOTE2Y2NiMjI3ZWQ5MWY1ZmY5MjY0
MjRmMDA2OTgyOTYyYjFhNzZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0
b3JhZ2VOYW1lc3BhY2VQcm92aWRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3Rv
cmFnZU5hbWVzcGFjZVByb3ZpZGVyLmgKQEAgLTQ1LDYgKzQ1LDggQEAgcHVibGljOgogICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgflN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlcigpOwogCiAgICAg
dmlydHVhbCBSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gY3JlYXRlU2Vzc2lvblN0b3JhZ2VOYW1l
c3BhY2UoUGFnZSYsIHVuc2lnbmVkIHF1b3RhKSA9IDA7CisgICAgdmlydHVhbCBSZWZQdHI8U3Rv
cmFnZU5hbWVzcGFjZT4gY3JlYXRlRXBoZW1lcmFsTG9jYWxTdG9yYWdlTmFtZXNwYWNlKFBhZ2Um
LCB1bnNpZ25lZCBxdW90YSkgPSAwOworCiAgICAgUmVmUHRyPFN0b3JhZ2VBcmVhPiBsb2NhbFN0
b3JhZ2VBcmVhKERvY3VtZW50Jik7CiAKICAgICB2b2lkIGFkZFBhZ2UoUGFnZSYpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlVHlwZS5oIGIvU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9TdG9yYWdlVHlwZS5oCmluZGV4IGNmMzRmOTZjNzAwYjM0MWE1YjRjNzE1ZmQ4
ODhjYTYwNmVjMTI5MDUuLjU4MTMzZjg5Y2NhNzFkYzM1MGVmNzI4NWE3MGE3MzBhMjk2MmE2ZTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVR5cGUuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUeXBlLmgKQEAgLTMwLDExICszMCwxNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiBlbnVtIGNsYXNzIFN0b3JhZ2VUeXBlIHsKICAgICBTZXNzaW9u
LAogICAgIExvY2FsLAorICAgIEVwaGVtZXJhbExvY2FsLAogICAgIFRyYW5zaWVudExvY2FsLAog
fTsKIAogaW5saW5lIGJvb2wgaXNMb2NhbFN0b3JhZ2UoU3RvcmFnZVR5cGUgc3RvcmFnZVR5cGUp
CiB7CisgICAgcmV0dXJuIHN0b3JhZ2VUeXBlID09IFN0b3JhZ2VUeXBlOjpMb2NhbCB8fCBzdG9y
YWdlVHlwZSA9PSBTdG9yYWdlVHlwZTo6VHJhbnNpZW50TG9jYWwgfHwgc3RvcmFnZVR5cGUgPT0g
U3RvcmFnZVR5cGU6OkVwaGVtZXJhbExvY2FsOworfQorCitpbmxpbmUgYm9vbCBpc1BlcnNpc3Rl
bnRMb2NhbFN0b3JhZ2UoU3RvcmFnZVR5cGUgc3RvcmFnZVR5cGUpCit7CiAgICAgcmV0dXJuIHN0
b3JhZ2VUeXBlID09IFN0b3JhZ2VUeXBlOjpMb2NhbCB8fCBzdG9yYWdlVHlwZSA9PSBTdG9yYWdl
VHlwZTo6VHJhbnNpZW50TG9jYWw7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU3Rv
cmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2UvU3Rv
cmFnZU5hbWVzcGFjZUltcGwuY3BwCmluZGV4IDE4ZWM0ZThhYzM4NDNmMzFlMTI2N2FlYjY2OWVh
YWYyZjNhOGI3YjUuLjAxODE1YzEzYWMyYTEwMjk2NDAzMjczMTcyMjY3ZTMyNTZlOGMyZWMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9TdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcApAQCAt
NTAsNiArNTAsMTEgQEAgUmVmPFN0b3JhZ2VOYW1lc3BhY2VJbXBsPiBTdG9yYWdlTmFtZXNwYWNl
SW1wbDo6Y3JlYXRlU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UodW4KICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBTdG9yYWdlTmFtZXNwYWNlSW1wbChTdG9yYWdlVHlwZTo6U2Vzc2lvbiwgU3RyaW5n
KCksIHF1b3RhKSk7CiB9CiAKK1JlZjxTdG9yYWdlTmFtZXNwYWNlSW1wbD4gU3RvcmFnZU5hbWVz
cGFjZUltcGw6OmNyZWF0ZUVwaGVtZXJhbExvY2FsU3RvcmFnZU5hbWVzcGFjZSh1bnNpZ25lZCBx
dW90YSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTdG9yYWdlTmFtZXNwYWNlSW1wbChT
dG9yYWdlVHlwZTo6RXBoZW1lcmFsTG9jYWwsIFN0cmluZygpLCBxdW90YSkpOworfQorCiBSZWY8
U3RvcmFnZU5hbWVzcGFjZUltcGw+IFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpnZXRPckNyZWF0ZUxv
Y2FsU3RvcmFnZU5hbWVzcGFjZShjb25zdCBTdHJpbmcmIGRhdGFiYXNlUGF0aCwgdW5zaWduZWQg
cXVvdGEpCiB7CiAgICAgQVNTRVJUKCFkYXRhYmFzZVBhdGguaXNOdWxsKCkpOwpAQCAtNzEsNyAr
NzYsNyBAQCBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6U3RvcmFnZU5hbWVzcGFjZUltcGwoU3RvcmFn
ZVR5cGUgc3RvcmFnZVR5cGUsIGNvbnN0IFN0cmluZwogICAgICwgbV9xdW90YShxdW90YSkKICAg
ICAsIG1faXNTaHV0ZG93bihmYWxzZSkKIHsKLSAgICBpZiAoaXNMb2NhbFN0b3JhZ2UobV9zdG9y
YWdlVHlwZSkgJiYgIW1fcGF0aC5pc0VtcHR5KCkpCisgICAgaWYgKGlzUGVyc2lzdGVudExvY2Fs
U3RvcmFnZShtX3N0b3JhZ2VUeXBlKSAmJiAhbV9wYXRoLmlzRW1wdHkoKSkKICAgICAgICAgbV9z
eW5jTWFuYWdlciA9IFN0b3JhZ2VTeW5jTWFuYWdlcjo6Y3JlYXRlKG1fcGF0aCk7CiB9CiAKQEAg
LTc5LDcgKzg0LDcgQEAgU3RvcmFnZU5hbWVzcGFjZUltcGw6On5TdG9yYWdlTmFtZXNwYWNlSW1w
bCgpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAotICAgIGlmIChpc0xvY2FsU3Rv
cmFnZShtX3N0b3JhZ2VUeXBlKSkgeworICAgIGlmIChpc1BlcnNpc3RlbnRMb2NhbFN0b3JhZ2Uo
bV9zdG9yYWdlVHlwZSkpIHsKICAgICAgICAgQVNTRVJUKGxvY2FsU3RvcmFnZU5hbWVzcGFjZU1h
cCgpLmdldChtX3BhdGgpID09IHRoaXMpOwogICAgICAgICBsb2NhbFN0b3JhZ2VOYW1lc3BhY2VN
YXAoKS5yZW1vdmUobV9wYXRoKTsKICAgICB9CkBAIC05MiwxMyArOTcsMTIgQEAgUmVmUHRyPFN0
b3JhZ2VOYW1lc3BhY2U+IFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpjb3B5KFBhZ2UqKQogewogICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOwotICAg
IEFTU0VSVChtX3N0b3JhZ2VUeXBlID09IFN0b3JhZ2VUeXBlOjpTZXNzaW9uKTsKKyAgICBBU1NF
UlQobV9zdG9yYWdlVHlwZSA9PSBTdG9yYWdlVHlwZTo6U2Vzc2lvbiB8fCBtX3N0b3JhZ2VUeXBl
ID09IFN0b3JhZ2VUeXBlOjpFcGhlbWVyYWxMb2NhbCk7CiAKICAgICBSZWZQdHI8U3RvcmFnZU5h
bWVzcGFjZUltcGw+IG5ld05hbWVzcGFjZSA9IGFkb3B0UmVmKG5ldyBTdG9yYWdlTmFtZXNwYWNl
SW1wbChtX3N0b3JhZ2VUeXBlLCBtX3BhdGgsIG1fcXVvdGEpKTsKKyAgICBmb3IgKGF1dG8mIGl0
ZXIgOiBtX3N0b3JhZ2VBcmVhTWFwKQorICAgICAgICBuZXdOYW1lc3BhY2UtPm1fc3RvcmFnZUFy
ZWFNYXAuc2V0KGl0ZXIua2V5LCBpdGVyLnZhbHVlLT5jb3B5KCkpOwogCi0gICAgU3RvcmFnZUFy
ZWFNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fc3RvcmFnZUFyZWFNYXAuZW5kKCk7Ci0gICAgZm9yIChT
dG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgaSA9IG1fc3RvcmFnZUFyZWFNYXAuYmVnaW4oKTsgaSAh
PSBlbmQ7ICsraSkKLSAgICAgICAgbmV3TmFtZXNwYWNlLT5tX3N0b3JhZ2VBcmVhTWFwLnNldChp
LT5rZXksIGktPnZhbHVlLT5jb3B5KCkpOwogICAgIHJldHVybiBuZXdOYW1lc3BhY2U7CiB9CiAK
QEAgLTEyMyw4ICsxMjcsOCBAQCB2b2lkIFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpjbG9zZSgpCiAg
ICAgaWYgKG1faXNTaHV0ZG93bikKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gSWYgd2UncmUg
c2Vzc2lvbiBzdG9yYWdlLCB3ZSBzaG91bGRuJ3QgbmVlZCB0byBkbyBhbnkgd29yayBoZXJlLgot
ICAgIGlmIChtX3N0b3JhZ2VUeXBlID09IFN0b3JhZ2VUeXBlOjpTZXNzaW9uKSB7CisgICAgLy8g
SWYgd2UncmUgbm90IGEgcGVyc2lzdGVudCBzdG9yYWdlLCB3ZSBzaG91bGRuJ3QgbmVlZCB0byBk
byBhbnkgd29yayBoZXJlLgorICAgIGlmIChtX3N0b3JhZ2VUeXBlID09IFN0b3JhZ2VUeXBlOjpT
ZXNzaW9uIHx8IG1fc3RvcmFnZVR5cGUgPT0gU3RvcmFnZVR5cGU6OkVwaGVtZXJhbExvY2FsKSB7
CiAgICAgICAgIEFTU0VSVCghbV9zeW5jTWFuYWdlcik7CiAgICAgICAgIHJldHVybjsKICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwu
aCBiL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5oCmluZGV4IDc5
NDM3ZmFmNjE0ODQwOGU2NDFjOWViZmYzODhiZjQ1MWZiNjBhOTkuLjI3YjhmOWJhYjNhZDMzOTY2
ODU0MGY0ODBiZmQ2NWE5NjY2MTYxMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU3RvcmFn
ZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9TdG9y
YWdlTmFtZXNwYWNlSW1wbC5oCkBAIC0zOSw2ICszOSw3IEBAIGNsYXNzIFN0b3JhZ2VBcmVhSW1w
bDsKIGNsYXNzIFN0b3JhZ2VOYW1lc3BhY2VJbXBsIDogcHVibGljIFdlYkNvcmU6OlN0b3JhZ2VO
YW1lc3BhY2UgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8U3RvcmFnZU5hbWVzcGFjZUltcGw+
IGNyZWF0ZVNlc3Npb25TdG9yYWdlTmFtZXNwYWNlKHVuc2lnbmVkIHF1b3RhKTsKKyAgICBzdGF0
aWMgUmVmPFN0b3JhZ2VOYW1lc3BhY2VJbXBsPiBjcmVhdGVFcGhlbWVyYWxMb2NhbFN0b3JhZ2VO
YW1lc3BhY2UodW5zaWduZWQgcXVvdGEpOwogICAgIHN0YXRpYyBSZWY8U3RvcmFnZU5hbWVzcGFj
ZUltcGw+IGdldE9yQ3JlYXRlTG9jYWxTdG9yYWdlTmFtZXNwYWNlKGNvbnN0IFN0cmluZyYgZGF0
YWJhc2VQYXRoLCB1bnNpZ25lZCBxdW90YSk7CiAgICAgdmlydHVhbCB+U3RvcmFnZU5hbWVzcGFj
ZUltcGwoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TdG9yYWdlL1dlYlN0b3JhZ2VO
YW1lc3BhY2VQcm92aWRlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2UvV2ViU3RvcmFnZU5h
bWVzcGFjZVByb3ZpZGVyLmNwcAppbmRleCA3YWU5YTE0NjY4NjdhMTlhODk0YWM1M2RhYzE2M2Qz
YWNlYzk3NzQ3Li5lZDdlYTNhYTM5M2RhNTU5MzdhMWFkNDVhNDZkNjc3Yzg4NGFiZDllIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2UvV2ViU3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2UvV2ViU3RvcmFnZU5hbWVzcGFjZVByb3Zp
ZGVyLmNwcApAQCAtMTAxLDYgKzEwMSwxMSBAQCBSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gV2Vi
U3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyOjpjcmVhdGVTZXNzaW9uU3RvcmFnZU5hbWVzcAogICAg
IHJldHVybiBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6Y3JlYXRlU2Vzc2lvblN0b3JhZ2VOYW1lc3Bh
Y2UocXVvdGEpOwogfQogCitSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gV2ViU3RvcmFnZU5hbWVz
cGFjZVByb3ZpZGVyOjpjcmVhdGVFcGhlbWVyYWxMb2NhbFN0b3JhZ2VOYW1lc3BhY2UoUGFnZSYs
IHVuc2lnbmVkIHF1b3RhKQoreworICAgIHJldHVybiBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6Y3Jl
YXRlRXBoZW1lcmFsTG9jYWxTdG9yYWdlTmFtZXNwYWNlKHF1b3RhKTsKK30KKwogUmVmUHRyPFN0
b3JhZ2VOYW1lc3BhY2U+IFdlYlN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlcjo6Y3JlYXRlTG9jYWxT
dG9yYWdlTmFtZXNwYWNlKHVuc2lnbmVkIHF1b3RhKQogewogICAgIHJldHVybiBTdG9yYWdlTmFt
ZXNwYWNlSW1wbDo6Z2V0T3JDcmVhdGVMb2NhbFN0b3JhZ2VOYW1lc3BhY2UobV9sb2NhbFN0b3Jh
Z2VEYXRhYmFzZVBhdGgsIHF1b3RhKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU3RvcmFn
ZS9XZWJTdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIuaCBiL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9X
ZWJTdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIuaAppbmRleCBlOGJkOTJiOTE0OWE0ZmQ3NWM4NTk1
YTJlOTBkNzlmNzhmMjc5NmMyLi4wZDIwN2QzNDMxOTJjNGZlN2I5N2QwMzhkNTgxYjJjNGVjMDc3
YWJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2UvV2ViU3RvcmFnZU5hbWVzcGFj
ZVByb3ZpZGVyLmgKKysrIGIvU291cmNlL1dlYktpdC9TdG9yYWdlL1dlYlN0b3JhZ2VOYW1lc3Bh
Y2VQcm92aWRlci5oCkBAIC01MCw2ICs1MCw3IEBAIHByaXZhdGU6CiAgICAgZXhwbGljaXQgV2Vi
U3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyKGNvbnN0IFN0cmluZyYgbG9jYWxTdG9yYWdlRGF0YWJh
c2VQYXRoKTsKIAogICAgIFJlZlB0cjxXZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlPiBjcmVhdGVT
ZXNzaW9uU3RvcmFnZU5hbWVzcGFjZShXZWJDb3JlOjpQYWdlJiwgdW5zaWduZWQgcXVvdGEpIG92
ZXJyaWRlOworICAgIFJlZlB0cjxXZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlPiBjcmVhdGVFcGhl
bWVyYWxMb2NhbFN0b3JhZ2VOYW1lc3BhY2UoV2ViQ29yZTo6UGFnZSYsIHVuc2lnbmVkIHF1b3Rh
KSBvdmVycmlkZTsKICAgICBSZWZQdHI8V2ViQ29yZTo6U3RvcmFnZU5hbWVzcGFjZT4gY3JlYXRl
TG9jYWxTdG9yYWdlTmFtZXNwYWNlKHVuc2lnbmVkIHF1b3RhKSBvdmVycmlkZTsKICAgICBSZWZQ
dHI8V2ViQ29yZTo6U3RvcmFnZU5hbWVzcGFjZT4gY3JlYXRlVHJhbnNpZW50TG9jYWxTdG9yYWdl
TmFtZXNwYWNlKFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luJiwgdW5zaWduZWQgcXVvdGEpIG92ZXJy
aWRlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1N0b3JhZ2UvU3Rv
cmFnZUFyZWFNYXAuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9TdG9yYWdlL1N0b3Jh
Z2VBcmVhTWFwLmNwcAppbmRleCA1ZjhiODc3MGE1ODQwODRlNjgxYTNhMDUzZDQwN2VlNTIyMGRm
Y2Y5Li5hMjY1MGQxYjNlYmZjNzI4YzI3NWVlMDEwYmZlYTNhMjY4YjBiODg2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1N0b3JhZ2UvU3RvcmFnZUFyZWFNYXAuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvU3RvcmFnZS9TdG9yYWdlQXJlYU1hcC5jcHAK
QEAgLTgzLDYgKzgzLDEwIEBAIFN0b3JhZ2VBcmVhTWFwOjpTdG9yYWdlQXJlYU1hcChTdG9yYWdl
TmFtZXNwYWNlSW1wbCogc3RvcmFnZU5hbWVzcGFjZSwgUmVmPFdlYkNvCiAgICAgY2FzZSBTdG9y
YWdlVHlwZTo6U2Vzc2lvbjoKICAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50
UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXI6OkNyZWF0
ZVNlc3Npb25TdG9yYWdlTWFwKG1fc3RvcmFnZU1hcElELCBzdG9yYWdlTmFtZXNwYWNlLT5zdG9y
YWdlTmFtZXNwYWNlSUQoKSwgU2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tU2VjdXJpdHlPcmlnaW4o
bV9zZWN1cml0eU9yaWdpbikpLCAwKTsKICAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFN0b3Jh
Z2VUeXBlOjpFcGhlbWVyYWxMb2NhbDoKKyAgICAgICAgLy8gVGhlIFVJIHByb2Nlc3MgaXMgbm90
IGludm9sdmVkIGZvciBFcGhlbWVyYWxMb2NhbCBzdG9yYWdlcy4KKyAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAogICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmFkZE1lc3NhZ2VSZWNlaXZlcihN
ZXNzYWdlczo6U3RvcmFnZUFyZWFNYXA6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9zdG9yYWdl
TWFwSUQsICp0aGlzKTsKQEAgLTkwLDggKzk0LDEwIEBAIFN0b3JhZ2VBcmVhTWFwOjpTdG9yYWdl
QXJlYU1hcChTdG9yYWdlTmFtZXNwYWNlSW1wbCogc3RvcmFnZU5hbWVzcGFjZSwgUmVmPFdlYkNv
CiAKIFN0b3JhZ2VBcmVhTWFwOjp+U3RvcmFnZUFyZWFNYXAoKQogewotICAgIFdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlN0
b3JhZ2VNYW5hZ2VyOjpEZXN0cm95U3RvcmFnZU1hcChtX3N0b3JhZ2VNYXBJRCksIDApOwotICAg
IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6
U3RvcmFnZUFyZWFNYXA6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9zdG9yYWdlTWFwSUQpOwor
ICAgIGlmIChtX3N0b3JhZ2VUeXBlICE9IFN0b3JhZ2VUeXBlOjpFcGhlbWVyYWxMb2NhbCkgewor
ICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigp
LT5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlcjo6RGVzdHJveVN0b3JhZ2VNYXAobV9zdG9y
YWdlTWFwSUQpLCAwKTsKKyAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucmVtb3ZlTWVz
c2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpTdG9yYWdlQXJlYU1hcDo6bWVzc2FnZVJlY2VpdmVyTmFt
ZSgpLCBtX3N0b3JhZ2VNYXBJRCk7CisgICAgfQogCiAgICAgbV9zdG9yYWdlTmFtZXNwYWNlLT5k
aWREZXN0cm95U3RvcmFnZUFyZWFNYXAoKnRoaXMpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9TdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvU3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAKaW5k
ZXggMWEzNzUyYjk3MWIxN2RhMzY0MTc5YjEwMDZmNThkNmQwNjY4MTI4Ni4uMmFiYmM1YzIxYzE4
MTA4OGZmNTg2MDQ1ZjAyNzE5ZTAyNDI2ODcyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9TdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDYg
KzMxLDcgQEAKICNpbmNsdWRlICJXZWJQYWdlLmgiCiAjaW5jbHVkZSAiV2ViUGFnZUdyb3VwUHJv
eHkuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvUGFnZUdyb3VwLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TZWN1
cml0eU9yaWdpbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2V0dGluZ3MuaD4KQEAgLTQ1LDYgKzQ2
LDExIEBAIFJlZlB0cjxTdG9yYWdlTmFtZXNwYWNlSW1wbD4gU3RvcmFnZU5hbWVzcGFjZUltcGw6
OmNyZWF0ZVNlc3Npb25TdG9yYWdlTmFtZXNwYWNlCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBT
dG9yYWdlTmFtZXNwYWNlSW1wbChTdG9yYWdlVHlwZTo6U2Vzc2lvbiwgaWRlbnRpZmllciwgbnVs
bHB0ciwgcXVvdGFJbkJ5dGVzKSk7CiB9CiAKK1JlZlB0cjxTdG9yYWdlTmFtZXNwYWNlSW1wbD4g
U3RvcmFnZU5hbWVzcGFjZUltcGw6OmNyZWF0ZUVwaGVtZXJhbExvY2FsU3RvcmFnZU5hbWVzcGFj
ZSh1aW50NjRfdCBpZGVudGlmaWVyLCB1bnNpZ25lZCBxdW90YUluQnl0ZXMpCit7CisgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBTdG9yYWdlTmFtZXNwYWNlSW1wbChTdG9yYWdlVHlwZTo6RXBoZW1l
cmFsTG9jYWwsIGlkZW50aWZpZXIsIG51bGxwdHIsIHF1b3RhSW5CeXRlcykpOworfQorCiBSZWZQ
dHI8U3RvcmFnZU5hbWVzcGFjZUltcGw+IFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpjcmVhdGVMb2Nh
bFN0b3JhZ2VOYW1lc3BhY2UodWludDY0X3QgaWRlbnRpZmllciwgdW5zaWduZWQgcXVvdGFJbkJ5
dGVzKQogewogICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3RvcmFnZU5hbWVzcGFjZUltcGwoU3Rv
cmFnZVR5cGU6OkxvY2FsLCBpZGVudGlmaWVyLCBudWxscHRyLCBxdW90YUluQnl0ZXMpKTsKQEAg
LTc0LDYgKzgwLDkgQEAgdm9pZCBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6ZGlkRGVzdHJveVN0b3Jh
Z2VBcmVhTWFwKFN0b3JhZ2VBcmVhTWFwJiBtYXApCiAKIFJlZlB0cjxTdG9yYWdlQXJlYT4gU3Rv
cmFnZU5hbWVzcGFjZUltcGw6OnN0b3JhZ2VBcmVhKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYg
c2VjdXJpdHlPcmlnaW4pCiB7CisgICAgaWYgKG1fc3RvcmFnZVR5cGUgPT0gU3RvcmFnZVR5cGU6
OkVwaGVtZXJhbExvY2FsKQorICAgICAgICByZXR1cm4gZXBoZW1lcmFsTG9jYWxTdG9yYWdlQXJl
YShzZWN1cml0eU9yaWdpbik7CisKICAgICBSZWZQdHI8U3RvcmFnZUFyZWFNYXA+IG1hcDsKIAog
ICAgIGF1dG8mIHNsb3QgPSBtX3N0b3JhZ2VBcmVhTWFwcy5hZGQoc2VjdXJpdHlPcmlnaW4sIG51
bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKQEAgLTg2LDExICs5NSwxMjUgQEAgUmVmUHRyPFN0b3Jh
Z2VBcmVhPiBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6c3RvcmFnZUFyZWEoY29uc3QgU2VjdXJpdHlP
cmlnaW5EYXRhJgogICAgIHJldHVybiBTdG9yYWdlQXJlYUltcGw6OmNyZWF0ZShtYXAucmVsZWFz
ZU5vbk51bGwoKSk7CiB9CiAKK2NsYXNzIFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpFcGhlbWVyYWxT
dG9yYWdlQXJlYSBmaW5hbCA6IHB1YmxpYyBTdG9yYWdlQXJlYSB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFJlZjxFcGhlbWVyYWxTdG9yYWdlQXJlYT4gY3JlYXRlKGNvbnN0IFNlY3VyaXR5T3JpZ2lu
RGF0YSYgb3JpZ2luLCB1bnNpZ25lZCBxdW90YUluQnl0ZXMpCisgICAgeworICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBFcGhlbWVyYWxTdG9yYWdlQXJlYShvcmlnaW4sIHF1b3RhSW5CeXRl
cykpOworICAgIH0KKworICAgIFJlZjxFcGhlbWVyYWxTdG9yYWdlQXJlYT4gY29weSgpCisgICAg
eworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBFcGhlbWVyYWxTdG9yYWdlQXJlYSgqdGhp
cykpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBFcGhlbWVyYWxTdG9yYWdlQXJlYShjb25zdCBT
ZWN1cml0eU9yaWdpbkRhdGEmIG9yaWdpbiwgdW5zaWduZWQgcXVvdGFJbkJ5dGVzKQorICAgICAg
ICA6IG1fc2VjdXJpdHlPcmlnaW5EYXRhKG9yaWdpbikKKyAgICAgICAgLCBtX3N0b3JhZ2VNYXAo
U3RvcmFnZU1hcDo6Y3JlYXRlKHF1b3RhSW5CeXRlcykpCisgICAgeworICAgIH0KKworICAgIEVw
aGVtZXJhbFN0b3JhZ2VBcmVhKEVwaGVtZXJhbFN0b3JhZ2VBcmVhJiBvdGhlcikKKyAgICAgICAg
OiBtX3NlY3VyaXR5T3JpZ2luRGF0YShvdGhlci5tX3NlY3VyaXR5T3JpZ2luRGF0YSkKKyAgICAg
ICAgLCBtX3N0b3JhZ2VNYXAob3RoZXIubV9zdG9yYWdlTWFwKQorICAgIHsKKyAgICB9CisKKyAg
ICAvLyBXZWJDb3JlOjpTdG9yYWdlQXJlYS4KKyAgICB1bnNpZ25lZCBsZW5ndGgoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fc3RvcmFnZU1hcC0+bGVuZ3RoKCk7CisgICAgfQorCisgICAgU3Ry
aW5nIGtleSh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3N0b3JhZ2VN
YXAtPmtleShpbmRleCk7CisgICAgfQorCisgICAgU3RyaW5nIGl0ZW0oY29uc3QgU3RyaW5nJiBr
ZXkpCisgICAgeworICAgICAgICByZXR1cm4gbV9zdG9yYWdlTWFwLT5nZXRJdGVtKGtleSk7Cisg
ICAgfQorCisgICAgdm9pZCBzZXRJdGVtKEZyYW1lKiwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0
IFN0cmluZyYgdmFsdWUsIGJvb2wmIHF1b3RhRXhjZXB0aW9uKQorICAgIHsKKyAgICAgICAgU3Ry
aW5nIG9sZFZhbHVlOworICAgICAgICBpZiAoYXV0byBuZXdNYXAgPSBtX3N0b3JhZ2VNYXAtPnNl
dEl0ZW0oa2V5LCB2YWx1ZSwgb2xkVmFsdWUsIHF1b3RhRXhjZXB0aW9uKSkKKyAgICAgICAgICAg
IG1fc3RvcmFnZU1hcCA9IFdURk1vdmUobmV3TWFwKTsKKyAgICB9CisKKyAgICB2b2lkIHJlbW92
ZUl0ZW0oRnJhbWUqLCBjb25zdCBTdHJpbmcmIGtleSkKKyAgICB7CisgICAgICAgIFN0cmluZyBv
bGRWYWx1ZTsKKyAgICAgICAgaWYgKGF1dG8gbmV3TWFwID0gbV9zdG9yYWdlTWFwLT5yZW1vdmVJ
dGVtKGtleSwgb2xkVmFsdWUpKQorICAgICAgICAgICAgbV9zdG9yYWdlTWFwID0gV1RGTW92ZShu
ZXdNYXApOworICAgIH0KKworICAgIHZvaWQgY2xlYXIoRnJhbWUqKQorICAgIHsKKyAgICAgICAg
aWYgKCFtX3N0b3JhZ2VNYXAtPmxlbmd0aCgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIG1fc3RvcmFnZU1hcCA9IFN0b3JhZ2VNYXA6OmNyZWF0ZShtX3N0b3JhZ2VNYXAtPnF1b3Rh
KCkpOworICAgIH0KKworICAgIGJvb2wgY29udGFpbnMoY29uc3QgU3RyaW5nJiBrZXkpCisgICAg
eworICAgICAgICByZXR1cm4gbV9zdG9yYWdlTWFwLT5jb250YWlucyhrZXkpOworICAgIH0KKwor
ICAgIGJvb2wgY2FuQWNjZXNzU3RvcmFnZShGcmFtZSogZnJhbWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gZnJhbWUgJiYgZnJhbWUtPnBhZ2UoKTsKKyAgICB9CisKKyAgICBTdG9yYWdlVHlwZSBz
dG9yYWdlVHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gU3RvcmFnZVR5cGU6OkVw
aGVtZXJhbExvY2FsOworICAgIH0KKworICAgIHNpemVfdCBtZW1vcnlCeXRlc1VzZWRCeUNhY2hl
KCkKKyAgICB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHZvaWQgaW5jcmVtZW50
QWNjZXNzQ291bnQoKSB7IH0KKyAgICB2b2lkIGRlY3JlbWVudEFjY2Vzc0NvdW50KCkgeyB9Cisg
ICAgdm9pZCBjbG9zZURhdGFiYXNlSWZJZGxlKCkgeyB9CisKKyAgICBTZWN1cml0eU9yaWdpbkRh
dGEgc2VjdXJpdHlPcmlnaW4oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fc2VjdXJp
dHlPcmlnaW5EYXRhOworICAgIH0KKworICAgIFNlY3VyaXR5T3JpZ2luRGF0YSBtX3NlY3VyaXR5
T3JpZ2luRGF0YTsKKyAgICBSZWZQdHI8U3RvcmFnZU1hcD4gbV9zdG9yYWdlTWFwOworfTsKKwor
UmVmUHRyPFN0b3JhZ2VBcmVhPiBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6ZXBoZW1lcmFsTG9jYWxT
dG9yYWdlQXJlYShjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIHNlY3VyaXR5T3JpZ2luKQorewor
ICAgIGF1dG8mIHNsb3QgPSBtX2VwaGVtZXJhbExvY2FsU3RvcmFnZUFyZWFzLmFkZChzZWN1cml0
eU9yaWdpbiwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOworICAgIGlmICghc2xvdCkKKyAgICAg
ICAgc2xvdCA9IFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpFcGhlbWVyYWxTdG9yYWdlQXJlYTo6Y3Jl
YXRlKHNlY3VyaXR5T3JpZ2luLCBtX3F1b3RhSW5CeXRlcyk7CisKKyAgICByZXR1cm4gc2xvdC5n
ZXQoKTsKK30KKwogUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IFN0b3JhZ2VOYW1lc3BhY2VJbXBs
Ojpjb3B5KFBhZ2UqIG5ld1BhZ2UpCiB7CiAgICAgQVNTRVJUKG1fc3RvcmFnZU5hbWVzcGFjZUlE
KTsKIAotICAgIHJldHVybiBjcmVhdGVTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZShXZWJQYWdlOjpm
cm9tQ29yZVBhZ2UobmV3UGFnZSktPnBhZ2VJRCgpLCBtX3F1b3RhSW5CeXRlcyk7CisgICAgaWYg
KG1fc3RvcmFnZVR5cGUgPT0gU3RvcmFnZVR5cGU6OlNlc3Npb24pCisgICAgICAgIHJldHVybiBj
cmVhdGVTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZShXZWJQYWdlOjpmcm9tQ29yZVBhZ2UobmV3UGFn
ZSktPnBhZ2VJRCgpLCBtX3F1b3RhSW5CeXRlcyk7CisKKyAgICBBU1NFUlQobV9zdG9yYWdlVHlw
ZSA9PSBTdG9yYWdlVHlwZTo6RXBoZW1lcmFsTG9jYWwpOworICAgIFJlZlB0cjxTdG9yYWdlTmFt
ZXNwYWNlSW1wbD4gbmV3TmFtZXNwYWNlID0gYWRvcHRSZWYobmV3IFN0b3JhZ2VOYW1lc3BhY2VJ
bXBsKG1fc3RvcmFnZVR5cGUsIG1fc3RvcmFnZU5hbWVzcGFjZUlELCBtX3RvcExldmVsT3JpZ2lu
LmdldCgpLCBtX3F1b3RhSW5CeXRlcykpOworCisgICAgZm9yIChhdXRvJiBpdGVyIDogbV9lcGhl
bWVyYWxMb2NhbFN0b3JhZ2VBcmVhcykKKyAgICAgICAgbmV3TmFtZXNwYWNlLT5tX2VwaGVtZXJh
bExvY2FsU3RvcmFnZUFyZWFzLnNldChpdGVyLmtleSwgaXRlci52YWx1ZS0+Y29weSgpKTsKKwor
ICAgIHJldHVybiBuZXdOYW1lc3BhY2U7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9TdG9yYWdlL1N0b3JhZ2VOYW1lc3Bh
Y2VJbXBsLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1N0b3JhZ2UvU3RvcmFnZU5hbWVz
cGFjZUltcGwuaAppbmRleCA4ZWNiODE2NjNlY2MzMzI2NzBkMzEyZmEzZGY2MGU3Njg0MjdhZDI0
Li5mMTNhMjJkY2JkMjFiNjc0MGU0NTIzN2Y0ZGZhZDgzMTI1NjcyOWUzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUlt
cGwuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbkRhdGEu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luSGFzaC5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvU3RvcmFnZUFyZWEuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1N0b3JhZ2VNYXAuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL1N0b3JhZ2VOYW1lc3BhY2UuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgogCkBAIC0zOSw2ICs0MCw3IEBAIGNsYXNzIFdlYlBhZ2U7CiBjbGFzcyBTdG9yYWdlTmFt
ZXNwYWNlSW1wbCA6IHB1YmxpYyBXZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlIHsKIHB1YmxpYzoK
ICAgICBzdGF0aWMgUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2VJbXBsPiBjcmVhdGVTZXNzaW9uU3Rv
cmFnZU5hbWVzcGFjZSh1aW50NjRfdCBpZGVudGlmaWVyLCB1bnNpZ25lZCBxdW90YUluQnl0ZXMp
OworICAgIHN0YXRpYyBSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZUltcGw+IGNyZWF0ZUVwaGVtZXJh
bExvY2FsU3RvcmFnZU5hbWVzcGFjZSh1aW50NjRfdCBpZGVudGlmaWVyLCB1bnNpZ25lZCBxdW90
YUluQnl0ZXMpOwogICAgIHN0YXRpYyBSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZUltcGw+IGNyZWF0
ZUxvY2FsU3RvcmFnZU5hbWVzcGFjZSh1aW50NjRfdCBpZGVudGlmaWVyLCB1bnNpZ25lZCBxdW90
YUluQnl0ZXMpOwogICAgIHN0YXRpYyBSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZUltcGw+IGNyZWF0
ZVRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZSh1aW50NjRfdCBpZGVudGlmaWVyLCBXZWJD
b3JlOjpTZWN1cml0eU9yaWdpbiYgdG9wTGV2ZWxPcmlnaW4sIHVpbnQ2NF90IHF1b3RhSW5CeXRl
cyk7CiAKQEAgLTU3LDYgKzU5LDggQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8V2ViQ29yZTo6U3Rv
cmFnZUFyZWE+IHN0b3JhZ2VBcmVhKGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYp
IG92ZXJyaWRlOwogICAgIFJlZlB0cjxXZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlPiBjb3B5KFdl
YkNvcmU6OlBhZ2UqKSBvdmVycmlkZTsKIAorICAgIFJlZlB0cjxXZWJDb3JlOjpTdG9yYWdlQXJl
YT4gZXBoZW1lcmFsTG9jYWxTdG9yYWdlQXJlYShjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdp
bkRhdGEmKTsKKwogICAgIGNvbnN0IFdlYkNvcmU6OlN0b3JhZ2VUeXBlIG1fc3RvcmFnZVR5cGU7
CiAgICAgY29uc3QgdWludDY0X3QgbV9zdG9yYWdlTmFtZXNwYWNlSUQ7CiAKQEAgLTY2LDYgKzcw
LDkgQEAgcHJpdmF0ZToKICAgICBjb25zdCB1bnNpZ25lZCBtX3F1b3RhSW5CeXRlczsKIAogICAg
IEhhc2hNYXA8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhLCBTdG9yYWdlQXJlYU1hcCo+IG1f
c3RvcmFnZUFyZWFNYXBzOworCisgICAgY2xhc3MgRXBoZW1lcmFsU3RvcmFnZUFyZWE7CisgICAg
SGFzaE1hcDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEsIFJlZlB0cjxFcGhlbWVyYWxTdG9y
YWdlQXJlYT4+IG1fZXBoZW1lcmFsTG9jYWxTdG9yYWdlQXJlYXM7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvU3RvcmFn
ZS9XZWJTdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9TdG9yYWdlL1dlYlN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlci5jcHAKaW5kZXggZDUzZjQ0
NzViMDA5YTg0YTY0MTM5M2Y5MDQ3ZWRlMjRmYzViNmEwNS4uYTM3NThlYjg3NDI4OGZmZDg5NjYy
ZDAyNWUxNThkNjZhMDcwYzU3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9TdG9yYWdlL1dlYlN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlci5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9TdG9yYWdlL1dlYlN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlci5jcHAK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NzEsNiArNzEsMTEgQEAgUmVmUHRyPFdlYkNvcmU6OlN0b3JhZ2VOYW1lc3BhY2U+IFdlYlN0b3Jh
Z2VOYW1lc3BhY2VQcm92aWRlcjo6Y3JlYXRlU2Vzc2lvblN0b3IKICAgICByZXR1cm4gU3RvcmFn
ZU5hbWVzcGFjZUltcGw6OmNyZWF0ZVNlc3Npb25TdG9yYWdlTmFtZXNwYWNlKFdlYlBhZ2U6OmZy
b21Db3JlUGFnZSgmcGFnZSktPnBhZ2VJRCgpLCBxdW90YSk7CiB9CiAKK1JlZlB0cjxXZWJDb3Jl
OjpTdG9yYWdlTmFtZXNwYWNlPiBXZWJTdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXI6OmNyZWF0ZUVw
aGVtZXJhbExvY2FsU3RvcmFnZU5hbWVzcGFjZShQYWdlJiBwYWdlLCB1bnNpZ25lZCBxdW90YSkK
K3sKKyAgICByZXR1cm4gU3RvcmFnZU5hbWVzcGFjZUltcGw6OmNyZWF0ZUVwaGVtZXJhbExvY2Fs
U3RvcmFnZU5hbWVzcGFjZShXZWJQYWdlOjpmcm9tQ29yZVBhZ2UoJnBhZ2UpLT5wYWdlSUQoKSwg
cXVvdGEpOworfQorCiBSZWZQdHI8V2ViQ29yZTo6U3RvcmFnZU5hbWVzcGFjZT4gV2ViU3RvcmFn
ZU5hbWVzcGFjZVByb3ZpZGVyOjpjcmVhdGVMb2NhbFN0b3JhZ2VOYW1lc3BhY2UodW5zaWduZWQg
cXVvdGEpCiB7CiAgICAgcmV0dXJuIFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpjcmVhdGVMb2NhbFN0
b3JhZ2VOYW1lc3BhY2UobV9pZGVudGlmaWVyLCBxdW90YSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1N0b3JhZ2UvV2ViU3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1N0b3JhZ2UvV2ViU3RvcmFnZU5hbWVzcGFjZVBy
b3ZpZGVyLmgKaW5kZXggYTYzMmJiNzAxYzVkYTVhMTE0YzBiMDE5NGZlYmEwMTk4ZDI4ZGEwNy4u
YTRjMjE0MjRiZjI2ZTM0MTAxMDg4YmMwMjgyYjQzMTIyNmE2NDlhNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9TdG9yYWdlL1dlYlN0b3JhZ2VOYW1lc3BhY2VQcm92aWRl
ci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvU3RvcmFnZS9XZWJTdG9yYWdlTmFt
ZXNwYWNlUHJvdmlkZXIuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zOSw2ICszOSw3IEBAIHByaXZhdGU6CiAgICAgZXhwbGljaXQgV2Vi
U3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyKHVpbnQ2NF90IGlkZW50aWZpZXIpOwogCiAgICAgUmVm
UHRyPFdlYkNvcmU6OlN0b3JhZ2VOYW1lc3BhY2U+IGNyZWF0ZVNlc3Npb25TdG9yYWdlTmFtZXNw
YWNlKFdlYkNvcmU6OlBhZ2UmLCB1bnNpZ25lZCBxdW90YSkgb3ZlcnJpZGU7CisgICAgUmVmUHRy
PFdlYkNvcmU6OlN0b3JhZ2VOYW1lc3BhY2U+IGNyZWF0ZUVwaGVtZXJhbExvY2FsU3RvcmFnZU5h
bWVzcGFjZShXZWJDb3JlOjpQYWdlJiwgdW5zaWduZWQgcXVvdGEpIG92ZXJyaWRlOwogICAgIFJl
ZlB0cjxXZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlPiBjcmVhdGVMb2NhbFN0b3JhZ2VOYW1lc3Bh
Y2UodW5zaWduZWQgcXVvdGEpIG92ZXJyaWRlOwogICAgIFJlZlB0cjxXZWJDb3JlOjpTdG9yYWdl
TmFtZXNwYWNlPiBjcmVhdGVUcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UoV2ViQ29yZTo6
U2VjdXJpdHlPcmlnaW4mLCB1bnNpZ25lZCBxdW90YSkgb3ZlcnJpZGU7CiAKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA1MmVi
YjczM2IyZDQ2N2M3YzM1OTliODAyNzFiNjAzYWI0MzA3OGQxLi4zMDJiMjY4NTQwZThhZDFlYTFk
MTIzNmU4ZTIwNzE1MDA1YzM1YmE2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
KysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTctMDQtMTIg
IEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIFF1b3RhRXhjZWVk
ZWRFcnJvciB3aGVuIHNhdmluZyB0byBsb2NhbFN0b3JhZ2UgaW4gcHJpdmF0ZSBtb2RlLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3MDEwCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9t
YWMtd2syL1Rlc3RFeHBlY3RhdGlvbnM6CisgICAgICAgICogc3RvcmFnZS9kb21zdG9yYWdlL2xv
Y2Fsc3RvcmFnZS9wcml2YXRlLWJyb3dzaW5nLWFmZmVjdHMtc3RvcmFnZS1leHBlY3RlZC50eHQ6
CisgICAgICAgICogc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9wcml2YXRlLWJyb3dz
aW5nLWFmZmVjdHMtc3RvcmFnZS5odG1sOgorICAgICAgICAqIHN0b3JhZ2UvZG9tc3RvcmFnZS9s
b2NhbHN0b3JhZ2UvcmVzb3VyY2VzL3ByaXZhdGUtYnJvd3NpbmctMS5odG1sOiBBZGRlZC4KKyAg
ICAgICAgKiBzdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3Jlc291cmNlcy9wcml2YXRl
LWJyb3dzaW5nLTIuaHRtbDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9kb21zdG9yYWdlL2xv
Y2Fsc3RvcmFnZS9yZXNvdXJjZXMvcHJpdmF0ZS1icm93c2luZy0zLmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIHN0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2UvcmVzb3VyY2VzL3ByaXZhdGUt
YnJvd3Npbmctc3RvcmFnZS0yLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2UvZG9tc3Rv
cmFnZS9zZXNzaW9uc3RvcmFnZS9wcml2YXRlLWJyb3dzaW5nLWFmZmVjdHMtc3RvcmFnZS1leHBl
Y3RlZC50eHQ6IFJlbW92ZWQuCisgICAgICAgICogc3RvcmFnZS9kb21zdG9yYWdlL3Nlc3Npb25z
dG9yYWdlL3ByaXZhdGUtYnJvd3NpbmctYWZmZWN0cy1zdG9yYWdlLmh0bWw6IFJlbW92ZWQuCisK
IDIwMTctMDQtMDcgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CiAKICAgICAg
ICAgV2ViS2l0IHNob3VsZCBwZXJjZW50IGVuY29kZSBzaW5nbGUgcXVvdGVzIGluIHF1ZXJ5IHN0
cmluZ3MKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azIvVGVzdEV4cGVj
dGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azIvVGVzdEV4cGVjdGF0aW9ucwpp
bmRleCA2MzMyOTE2OWE5NDJmZTY0MTU2YjJkNzQzZTM0ZGQ0MjY3Y2QwNGQ0Li5iYzM3MzI4ZWY2
MGMxZmYwZjVmOWI5Y2U1MDcxYzgzZWEyM2UzZmFhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9tYWMtd2syL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vbWFjLXdrMi9UZXN0RXhwZWN0YXRpb25zCkBAIC00MjQsOCArNDI0LDYgQEAgaHR0cC90ZXN0
cy9zZWN1cml0eS9zdG9yYWdlLWJsb2NraW5nLWxvb3NlbmVkLXByaXZhdGUtYnJvd3NpbmctcGx1
Z2luLmh0bWwgWyBTa2kKIGh0dHAvdGVzdHMvc2VjdXJpdHkvc3RvcmFnZS1ibG9ja2luZy1zdHJl
bmd0aGVuZWQtcHJpdmF0ZS1icm93c2luZy1wbHVnaW4uaHRtbCBbIFNraXAgXQogcGx1Z2lucy9w
cml2YXRlLWJyb3dzaW5nLW1vZGUtMi5odG1sIFsgU2tpcCBdCiBwbHVnaW5zL3ByaXZhdGUtYnJv
d3NpbmctbW9kZS5odG1sIFsgU2tpcCBdCi1zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdl
L3ByaXZhdGUtYnJvd3NpbmctYWZmZWN0cy1zdG9yYWdlLmh0bWwgWyBTa2lwIF0KLXN0b3JhZ2Uv
ZG9tc3RvcmFnZS9zZXNzaW9uc3RvcmFnZS9wcml2YXRlLWJyb3dzaW5nLWFmZmVjdHMtc3RvcmFn
ZS5odG1sIFsgU2tpcCBdCiBzdG9yYWdlL3dlYnNxbC9wcml2YXRlLWJyb3dzaW5nLW5vcmVhZC1u
b3dyaXRlLmh0bWwgWyBTa2lwIF0KIAogIyBUaGVyZSBpcyBubyBuZXR3b3JrIGxvYWQgc2NoZWR1
bGluZyBvciBwcmlvcml0aXphdGlvbiB3aXRoIE5ldHdvcmtQcm9jZXNzLgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9wcml2YXRlLWJyb3dz
aW5nLWFmZmVjdHMtc3RvcmFnZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2Rv
bXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3ByaXZhdGUtYnJvd3NpbmctYWZmZWN0cy1zdG9yYWdlLWV4
cGVjdGVkLnR4dAppbmRleCAyNzE5MGE0NzEwNTI3YjJkYWRkYjVjYjlhZDAxNmNlNDBjYTIyN2Ex
Li4yY2E5NTU3NTAyN2ZhYjg5YWJlYjQ2N2IzODA1YzIwNjA1ZGZmYmQxIDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3ByaXZhdGUtYnJvd3Np
bmctYWZmZWN0cy1zdG9yYWdlLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdl
L2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3ByaXZhdGUtYnJvd3NpbmctYWZmZWN0cy1zdG9yYWdl
LWV4cGVjdGVkLnR4dApAQCAtMSw3ICsxLDE0IEBACi1UaGlzIGlzIGEgdGVzdCB0byBtYWtlIHN1
cmUgdGhhdCB3aGVuIHByaXZhdGUgYnJvd3NpbmcgaXMgb24gYW55IGF0dGVtcHQgdG8gY2hhbmdl
IHRoZSBsb2NhbFN0b3JhZ2UgYXJlYSBmYWlsLgotSW5pdGlhbCB2YWx1ZSBvZiB0ZXN0SXRlbSBp
czogbnVsbAotQ2F1Z2h0IGV4Y2VwdGlvbiB0cnlpbmcgdG8gY2hhbmdlIGl0ZW06IFF1b3RhRXhj
ZWVkZWRFcnJvciAoRE9NIEV4Y2VwdGlvbiAyMik6IFRoZSBxdW90YSBoYXMgYmVlbiBleGNlZWRl
ZC4KLUFmdGVyIGNoYW5nZSBhdHRlbXB0LCB0ZXN0SXRlbSBpczogbnVsbAotQWZ0ZXIgcmVtb3Zl
IGF0dGVtcHQsIHRlc3RJdGVtIGlzOiBudWxsCi1BZnRlciBjbGVhciBhdHRlbXB0LCB0ZXN0SXRl
bSBpczogbnVsbAorQUxFUlQ6IFBlcnNpc3RlbnQgbG9jYWxTdG9yYWdlIHRlc3RJdGVtIGlzOiBQ
ZXJzaXN0ZW50IGl0ZW0hCitBTEVSVDogU3RhcnQgb2YgcHJpdmF0ZSBicm93c2luZyB0ZXN0LCB0
ZXN0SXRlbSBpczogbnVsbAorQUxFUlQ6IGxvY2FsU3RvcmFnZSdzIGxlbmd0aCBpczogMAorQUxF
UlQ6IEFmdGVyIHNldCBhdHRlbXB0LCB0ZXN0SXRlbSBpczogRmlyc3RWYWx1ZQorQUxFUlQ6IEFm
dGVyIHNlY29uZCBzZXQgYXR0ZW1wdCwgdGVzdEl0ZW0gaXM6IENoYW5nZWRWYWx1ZQorQUxFUlQ6
IE9wZW5pbmcgd2luZG93Li4uCitBTEVSVDogbG9jYWxTdG9yYWdlJ3MgbGVuZ3RoIGlzOiAxCitB
TEVSVDogVGhlIGl0ZW0gaW4gbmV3IHdpbmRvdyBzdGFydHMgb3V0IGFzOiBDaGFuZ2VkVmFsdWUK
K0FMRVJUOiBUaGUgaXRlbSBpbiBuZXcgd2luZG93IGlzIG5vdzogTmV3V2luZG93VmFsdWUKK0FM
RVJUOiBCYWNrIGluIHBhcmVudCB3aW5kb3csIGxvY2FsU3RvcmFnZSdzIGxlbmd0aCBpczogMQor
QUxFUlQ6IEJhY2sgaW4gcGFyZW50IHdpbmRvdywgdGVzdEl0ZW0gaXM6IENoYW5nZWRWYWx1ZQor
QUxFUlQ6IEZpbmFsIHdpbmRvdywgbG9jYWxTdG9yYWdlJ3MgbGVuZ3RoIGlzOiAxCitBTEVSVDog
RmluYWwgd2luZG93LCBpdGVtIGlzOiBQZXJzaXN0ZW50IGl0ZW0hCiAKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2UvcHJpdmF0ZS1icm93c2lu
Zy1hZmZlY3RzLXN0b3JhZ2UuaHRtbCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9s
b2NhbHN0b3JhZ2UvcHJpdmF0ZS1icm93c2luZy1hZmZlY3RzLXN0b3JhZ2UuaHRtbAppbmRleCBi
YzUwZWQ3OTM0ZmU2ZjA3YTkxMzk4ZDQ1MjA1OTFjOTJkMDUyNmVjLi5lZDU4YTYwYzgwYmYzZGVk
NjUyYWY5ZjJiZDYxMDFlNDA4YzJkNzc5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdG9yYWdl
L2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3ByaXZhdGUtYnJvd3NpbmctYWZmZWN0cy1zdG9yYWdl
Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9w
cml2YXRlLWJyb3dzaW5nLWFmZmVjdHMtc3RvcmFnZS5odG1sCkBAIC0yLDQ5ICsyLDM2IEBACiA8
aGVhZD4KIDxzY3JpcHQ+CiAKLWlmICh3aW5kb3cudGVzdFJ1bm5lcikKK2lmICh3aW5kb3cudGVz
dFJ1bm5lcikgewogICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOworICAgIHRlc3RSdW5uZXIu
d2FpdFVudGlsRG9uZSgpOworfQogCiBmdW5jdGlvbiBsb2coYSkKIHsKLSAgICBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgibG9nZ2VyIikuaW5uZXJIVE1MICs9IGEgKyAiPGJyPiI7CisgICAgYWxl
cnQoYSArICIiKTsKIH0KIAogZnVuY3Rpb24gcnVuVGVzdCgpCiB7Ci0gICAgaWYgKCF3aW5kb3cu
bG9jYWxTdG9yYWdlKSB7Ci0gICAgICAgIGxvZygid2luZG93LmxvY2FsU3RvcmFnZSBET0VTIE5P
VCBleGlzdCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQogICAgIGlmICghd2luZG93LnRlc3RS
dW5uZXIpIHsKLSAgICAgICAgbG9nKCJUZXN0IG9ubHkgZGVzaWduZWQgdG8gYmUgcnVuIHVuZGVy
IER1bXBSZW5kZXJUcmVlIik7CisgICAgICAgIGxvZygiVGVzdCBvbmx5IGRlc2lnbmVkIHRvIGJl
IHJ1biB1bmRlciBEdW1wUmVuZGVyVHJlZSBvciBXZWJLaXRUZXN0UnVubmVyIik7CiAgICAgICAg
IHJldHVybjsKICAgICB9Ci0gICAgbG9jYWxTdG9yYWdlLmNsZWFyKCk7CisKKyAgICBsb2NhbFN0
b3JhZ2Uuc2V0SXRlbSgidGVzdEl0ZW0iLCAiUGVyc2lzdGVudCBpdGVtISIpOworICAgIGxvZygi
UGVyc2lzdGVudCBsb2NhbFN0b3JhZ2UgdGVzdEl0ZW0gaXM6ICIgKyBsb2NhbFN0b3JhZ2UuZ2V0
SXRlbSgidGVzdEl0ZW0iKSk7CiAgICAgCi0gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oInRlc3RJ
dGVtIiwgIkluaXRpYWxWYWx1ZSIpOyAgICAKICAgICB0ZXN0UnVubmVyLnNldFByaXZhdGVCcm93
c2luZ0VuYWJsZWQodHJ1ZSk7Ci0gICAgbG9nKCJJbml0aWFsIHZhbHVlIG9mIHRlc3RJdGVtIGlz
OiAiICsgbG9jYWxTdG9yYWdlLmdldEl0ZW0oInRlc3RJdGVtIikpOwotCi0gICAgdHJ5IHsKLSAg
ICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oInRlc3RJdGVtIiwgIkNoYW5nZWRWYWx1ZSIpOwot
ICAgIH0gY2F0Y2goZSkgewotICAgICAgICBsb2coIkNhdWdodCBleGNlcHRpb24gdHJ5aW5nIHRv
IGNoYW5nZSBpdGVtOiAiICsgZSk7Ci0gICAgfQotCi0gICAgbG9nKCJBZnRlciBjaGFuZ2UgYXR0
ZW1wdCwgdGVzdEl0ZW0gaXM6ICIgKyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgidGVzdEl0ZW0iKSk7
CisgICAgdGVzdFJ1bm5lci5zZXRDYW5PcGVuV2luZG93cygpOwogICAgIAotICAgIGxvY2FsU3Rv
cmFnZS5yZW1vdmVJdGVtKCJ0ZXN0SXRlbSIpOwotICAgIGxvZygiQWZ0ZXIgcmVtb3ZlIGF0dGVt
cHQsIHRlc3RJdGVtIGlzOiAiICsgbG9jYWxTdG9yYWdlLmdldEl0ZW0oInRlc3RJdGVtIikpOwot
Ci0gICAgbG9jYWxTdG9yYWdlLmNsZWFyKCk7Ci0gICAgbG9nKCJBZnRlciBjbGVhciBhdHRlbXB0
LCB0ZXN0SXRlbSBpczogIiArIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ0ZXN0SXRlbSIpKTsKKyAg
ICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICJyZXNvdXJjZXMvcHJpdmF0ZS1icm93c2luZy0xLmh0
bWwiCiB9CiAKIDwvc2NyaXB0PgogPC9oZWFkPgogPGJvZHkgb25sb2FkPSJydW5UZXN0KCk7Ij4K
LVRoaXMgaXMgYSB0ZXN0IHRvIG1ha2Ugc3VyZSB0aGF0IHdoZW4gcHJpdmF0ZSBicm93c2luZyBp
cyBvbiBhbnkgYXR0ZW1wdCB0byBjaGFuZ2UgdGhlIGxvY2FsU3RvcmFnZSBhcmVhIGZhaWwuCitU
aGlzIGlzIGEgdGVzdCB0byBtYWtlIHN1cmUgdGhhdCB3aGVuIHByaXZhdGUgYnJvd3NpbmcgaXMg
b24gY2hhbmdlcyB0byBsb2NhbCBzdG9yYWdlIGFyZSBub3QgcGVyc2lzdGVudC4KIDxkaXYgaWQ9
ImxvZ2dlciI+PC9kaXY+CiA8L2JvZHk+CiA8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3Jlc291cmNlcy9wcml2YXRlLWJyb3dz
aW5nLTEuaHRtbCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2Uv
cmVzb3VyY2VzL3ByaXZhdGUtYnJvd3NpbmctMS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU0MTAxZTM5MWMw
NWNkNmI2YTk3MzA4ZDE2MjkxN2EyZDFhYzg5YzQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3Jlc291cmNlcy9wcml2YXRlLWJy
b3dzaW5nLTEuaHRtbApAQCAtMCwwICsxLDU2IEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4K
KworaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7
CisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7Cit9CisKK2Z1bmN0aW9uIGxvZyhhKQor
eworICAgIGFsZXJ0KGEgKyAiIik7Cit9CisKK2Z1bmN0aW9uIHJ1blRlc3QoKQoreworICAgIHdp
bmRvdy5sb2dnZXIgPSBsb2c7CisgICAgd2luZG93LmFsbERvbmUgPSBmdW5jdGlvbigpIHsKKyAg
ICAgICAgbG9nKCJCYWNrIGluIHBhcmVudCB3aW5kb3csIGxvY2FsU3RvcmFnZSdzIGxlbmd0aCBp
czogIiArIGxvY2FsU3RvcmFnZS5sZW5ndGgpOworICAgICAgICBsb2coIkJhY2sgaW4gcGFyZW50
IHdpbmRvdywgdGVzdEl0ZW0gaXM6ICIgKyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgidGVzdEl0ZW0i
KSk7CisgICAgICAgIAorICAgICAgICB0ZXN0UnVubmVyLnNldFByaXZhdGVCcm93c2luZ0VuYWJs
ZWQoZmFsc2UpOworCisgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gInByaXZhdGUtYnJv
d3NpbmctMy5odG1sIjsKKyAgICB9CisKKyAgICBsb2coIlN0YXJ0IG9mIHByaXZhdGUgYnJvd3Np
bmcgdGVzdCwgdGVzdEl0ZW0gaXM6ICIgKyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgidGVzdEl0ZW0i
KSk7CisgICAgbG9nKCJsb2NhbFN0b3JhZ2UncyBsZW5ndGggaXM6ICIgKyBsb2NhbFN0b3JhZ2Uu
bGVuZ3RoKTsKKworICAgIHRyeSB7CisgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCJ0ZXN0
SXRlbSIsICJGaXJzdFZhbHVlIik7CisgICAgfSBjYXRjaChlKSB7CisgICAgICAgIGxvZygiQ2F1
Z2h0IGV4Y2VwdGlvbiB0cnlpbmcgdG8gY2hhbmdlIGl0ZW06ICIgKyBlKTsKKyAgICB9CisKKyAg
ICBsb2coIkFmdGVyIHNldCBhdHRlbXB0LCB0ZXN0SXRlbSBpczogIiArIGxvY2FsU3RvcmFnZS5n
ZXRJdGVtKCJ0ZXN0SXRlbSIpKTsKKyAgICAKKyAgICB0cnkgeworICAgICAgICBsb2NhbFN0b3Jh
Z2Uuc2V0SXRlbSgidGVzdEl0ZW0iLCAiQ2hhbmdlZFZhbHVlIik7CisgICAgfSBjYXRjaChlKSB7
CisgICAgICAgIGxvZygiQ2F1Z2h0IGV4Y2VwdGlvbiB0cnlpbmcgdG8gY2hhbmdlIGl0ZW06ICIg
KyBlKTsKKyAgICB9CisKKyAgICBsb2coIkFmdGVyIHNlY29uZCBzZXQgYXR0ZW1wdCwgdGVzdEl0
ZW0gaXM6ICIgKyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgidGVzdEl0ZW0iKSk7CisgICAgbG9nKCJP
cGVuaW5nIHdpbmRvdy4uLiIpOworCisgICAgd2luZG93Lm9wZW4oInByaXZhdGUtYnJvd3Npbmct
Mi5odG1sIiwgIl9ibGFuayIpOworfQorCis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9h
ZD0icnVuVGVzdCgpOyI+CitUaGlzIGlzIGEgdGVzdCB0byBtYWtlIHN1cmUgdGhhdCB3aGVuIHBy
aXZhdGUgYnJvd3NpbmcgaXMgb24gY2hhbmdlcyB0byBsb2NhbCBzdG9yYWdlIGFyZSBub3QgcGVy
c2lzdGVudC4KKzxkaXYgaWQ9ImxvZ2dlciI+PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3Jlc291
cmNlcy9wcml2YXRlLWJyb3dzaW5nLTIuaHRtbCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3Rv
cmFnZS9sb2NhbHN0b3JhZ2UvcmVzb3VyY2VzL3ByaXZhdGUtYnJvd3NpbmctMi5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjBiNmI3ZjIyMjdjMDU0OTRhNGMwN2JjYzc3MDcwZWFjOGE3YjkwOTkKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3Jl
c291cmNlcy9wcml2YXRlLWJyb3dzaW5nLTIuaHRtbApAQCAtMCwwICsxLDMxIEBACis8aHRtbD4K
KzxoZWFkPgorPHNjcmlwdD4KKworZnVuY3Rpb24gbG9nKGEpCit7CisgICAgb3BlbmVyLmxvZ2dl
cihhKTsKK30KKworZnVuY3Rpb24gcnVuVGVzdCgpCit7CisgICAgaWYgKCF3aW5kb3cudGVzdFJ1
bm5lcikgeworICAgICAgICBsb2coIlRlc3Qgb25seSBkZXNpZ25lZCB0byBiZSBydW4gdW5kZXIg
RHVtcFJlbmRlclRyZWUgb3IgV2ViS2l0VGVzdFJ1bm5lciIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgdGVzdFJ1bm5lci5zZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKHRydWUpOwor
ICAgIAorICAgIGxvZygibG9jYWxTdG9yYWdlJ3MgbGVuZ3RoIGlzOiAiICsgbG9jYWxTdG9yYWdl
Lmxlbmd0aCk7CisgICAgbG9nKCJUaGUgaXRlbSBpbiBuZXcgd2luZG93IHN0YXJ0cyBvdXQgYXM6
ICIgKyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgidGVzdEl0ZW0iKSk7CisgICAgbG9jYWxTdG9yYWdl
LnNldEl0ZW0oInRlc3RJdGVtIiwgIk5ld1dpbmRvd1ZhbHVlIik7CisgICAgbG9nKCJUaGUgaXRl
bSBpbiBuZXcgd2luZG93IGlzIG5vdzogIiArIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ0ZXN0SXRl
bSIpKTsKKworICAgIG9wZW5lci5hbGxEb25lKCk7Cit9CisKKzwvc2NyaXB0PgorPC9oZWFkPgor
PGJvZHkgb25sb2FkPSJydW5UZXN0KCk7Ij4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2UvcmVzb3VyY2VzL3By
aXZhdGUtYnJvd3NpbmctMy5odG1sIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL2xv
Y2Fsc3RvcmFnZS9yZXNvdXJjZXMvcHJpdmF0ZS1icm93c2luZy0zLmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YjcwMzk2OGU2NzE0NjRmNDMxZDdhOGIyNTdjNjYyY2M0ODhhNDVhYgotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2UvcmVzb3VyY2Vz
L3ByaXZhdGUtYnJvd3NpbmctMy5odG1sCkBAIC0wLDAgKzEsMjMgQEAKKzxodG1sPgorPGhlYWQ+
Cis8c2NyaXB0PgorCitmdW5jdGlvbiBsb2coYSkKK3sKKyAgICBhbGVydChhICsgIiIpOworfQor
CitmdW5jdGlvbiBydW5UZXN0KCkKK3sKKyAgICBsb2coIkZpbmFsIHdpbmRvdywgbG9jYWxTdG9y
YWdlJ3MgbGVuZ3RoIGlzOiAiICsgbG9jYWxTdG9yYWdlLmxlbmd0aCk7CisgICAgbG9nKCJGaW5h
bCB3aW5kb3csIGl0ZW0gaXM6ICIgKyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgidGVzdEl0ZW0iKSk7
CisKKyAgICBpZiAodGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7
Cit9CisKKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0KCk7Ij4KKzwv
Ym9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFn
ZS9sb2NhbHN0b3JhZ2UvcmVzb3VyY2VzL3ByaXZhdGUtYnJvd3Npbmctc3RvcmFnZS0yLmh0bWwg
Yi9MYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3Jlc291cmNlcy9w
cml2YXRlLWJyb3dzaW5nLXN0b3JhZ2UtMi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBiOWEzNDgxNGMyNWYx
ZDgyYzlmYzY0YmU4ZjNlMGYwZjM3ZDQ3ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3Jlc291cmNlcy9wcml2YXRlLWJyb3dz
aW5nLXN0b3JhZ2UtMi5odG1sCkBAIC0wLDAgKzEsMjkgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2Ny
aXB0PgorCitmdW5jdGlvbiBsb2coYSkKK3sKKyAgICBvcGVuZXIubG9nZ2VyKGEpOworfQorCitm
dW5jdGlvbiBydW5UZXN0KCkKK3sKKyAgICBpZiAoIXdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAg
ICAgIGxvZygiVGVzdCBvbmx5IGRlc2lnbmVkIHRvIGJlIHJ1biB1bmRlciBEdW1wUmVuZGVyVHJl
ZSBvciBXZWJLaXRUZXN0UnVubmVyIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisg
ICAgbG9nKCJsb2NhbFN0b3JhZ2UncyBsZW5ndGggaXM6ICIgKyBsb2NhbFN0b3JhZ2UubGVuZ3Ro
KTsKKyAgICBsb2coIlRoZSBpdGVtIGluIG5ldyB3aW5kb3cgc3RhcnRzIG91dCBhczogIiArIGxv
Y2FsU3RvcmFnZS5nZXRJdGVtKCJ0ZXN0SXRlbSIpKTsKKyAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRl
bSgidGVzdEl0ZW0iLCAiTmV3V2luZG93VmFsdWUiKTsKKyAgICBsb2coIlRoZSBpdGVtIGluIG5l
dyB3aW5kb3cgaXMgbm93OiAiICsgbG9jYWxTdG9yYWdlLmdldEl0ZW0oInRlc3RJdGVtIikpOwor
CisgICAgb3BlbmVyLmFsbERvbmUoKTsKK30KKworPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBv
bmxvYWQ9InJ1blRlc3QoKTsiPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL3Nlc3Npb25zdG9yYWdlL3ByaXZhdGUtYnJvd3Npbmct
YWZmZWN0cy1zdG9yYWdlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3Rv
cmFnZS9zZXNzaW9uc3RvcmFnZS9wcml2YXRlLWJyb3dzaW5nLWFmZmVjdHMtc3RvcmFnZS1leHBl
Y3RlZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzNTQzYjkyNjg3MWE4NTk3
MzAwZjFjN2Y0MTM2ZDFhZTY4ZGM4NTYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL3Nlc3Npb25zdG9y
YWdlL3ByaXZhdGUtYnJvd3NpbmctYWZmZWN0cy1zdG9yYWdlLWV4cGVjdGVkLnR4dAorKysgL2Rl
di9udWxsCkBAIC0xLDcgKzAsMCBAQAotVGhpcyBpcyBhIHRlc3QgdG8gbWFrZSBzdXJlIHRoYXQg
d2hlbiBwcml2YXRlIGJyb3dzaW5nIGlzIG9uIGFueSBhdHRlbXB0IHRvIGNoYW5nZSB0aGUgc2Vz
c2lvblN0b3JhZ2UgYXJlYSBmYWlsLgotSW5pdGlhbCB2YWx1ZSBvZiB0ZXN0SXRlbSBpczogbnVs
bAotQ2F1Z2h0IGV4Y2VwdGlvbiB0cnlpbmcgdG8gY2hhbmdlIGl0ZW06IFF1b3RhRXhjZWVkZWRF
cnJvciAoRE9NIEV4Y2VwdGlvbiAyMik6IFRoZSBxdW90YSBoYXMgYmVlbiBleGNlZWRlZC4KLUFm
dGVyIGNoYW5nZSBhdHRlbXB0LCB0ZXN0SXRlbSBpczogbnVsbAotQWZ0ZXIgcmVtb3ZlIGF0dGVt
cHQsIHRlc3RJdGVtIGlzOiBudWxsCi1BZnRlciBjbGVhciBhdHRlbXB0LCB0ZXN0SXRlbSBpczog
bnVsbAotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2Uvc2Vzc2lv
bnN0b3JhZ2UvcHJpdmF0ZS1icm93c2luZy1hZmZlY3RzLXN0b3JhZ2UuaHRtbCBiL0xheW91dFRl
c3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9zZXNzaW9uc3RvcmFnZS9wcml2YXRlLWJyb3dzaW5nLWFm
ZmVjdHMtc3RvcmFnZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjJhMTFi
YzdhYWE0YWM4MzAzOTg3ZDkzODZkMzQxOGVkMjcxNTM5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9z
ZXNzaW9uc3RvcmFnZS9wcml2YXRlLWJyb3dzaW5nLWFmZmVjdHMtc3RvcmFnZS5odG1sCisrKyAv
ZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotPGh0bWw+Ci08aGVhZD4KLTxzY3JpcHQgc3JjPSJy
ZXNvdXJjZXMvY2xlYXJTZXNzaW9uU3RvcmFnZS5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0PgotCi1p
ZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7Ci0KLWZ1
bmN0aW9uIGxvZyhhKQotewotICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2dnZXIiKS5p
bm5lckhUTUwgKz0gYSArICI8YnI+IjsKLX0KLQotZnVuY3Rpb24gcnVuVGVzdCgpCi17Ci0gICAg
aWYgKCF3aW5kb3cuc2Vzc2lvblN0b3JhZ2UpIHsKLSAgICAgICAgbG9nKCJ3aW5kb3cuc2Vzc2lv
blN0b3JhZ2UgRE9FUyBOT1QgZXhpc3QiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBp
ZiAoIXdpbmRvdy50ZXN0UnVubmVyKSB7Ci0gICAgICAgIGxvZygiVGVzdCBvbmx5IGRlc2lnbmVk
IHRvIGJlIHJ1biB1bmRlciBEdW1wUmVuZGVyVHJlZSIpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIAotICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oInRlc3RJdGVtIiwgIkluaXRpYWxW
YWx1ZSIpOyAgICAKLSAgICB0ZXN0UnVubmVyLnNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQodHJ1
ZSk7Ci0gICAgbG9nKCJJbml0aWFsIHZhbHVlIG9mIHRlc3RJdGVtIGlzOiAiICsgc2Vzc2lvblN0
b3JhZ2UuZ2V0SXRlbSgidGVzdEl0ZW0iKSk7Ci0KLSAgICB0cnkgewotICAgICAgICBzZXNzaW9u
U3RvcmFnZS5zZXRJdGVtKCJ0ZXN0SXRlbSIsICJDaGFuZ2VkVmFsdWUiKTsKLSAgICB9IGNhdGNo
KGUpIHsKLSAgICAgICAgbG9nKCJDYXVnaHQgZXhjZXB0aW9uIHRyeWluZyB0byBjaGFuZ2UgaXRl
bTogIiArIGUpOwotICAgIH0KLQotICAgIGxvZygiQWZ0ZXIgY2hhbmdlIGF0dGVtcHQsIHRlc3RJ
dGVtIGlzOiAiICsgc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgidGVzdEl0ZW0iKSk7Ci0gICAgCi0g
ICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgidGVzdEl0ZW0iKTsKLSAgICBsb2coIkFmdGVy
IHJlbW92ZSBhdHRlbXB0LCB0ZXN0SXRlbSBpczogIiArIHNlc3Npb25TdG9yYWdlLmdldEl0ZW0o
InRlc3RJdGVtIikpOwotCi0gICAgc2Vzc2lvblN0b3JhZ2UuY2xlYXIoKTsKLSAgICBsb2coIkFm
dGVyIGNsZWFyIGF0dGVtcHQsIHRlc3RJdGVtIGlzOiAiICsgc2Vzc2lvblN0b3JhZ2UuZ2V0SXRl
bSgidGVzdEl0ZW0iKSk7Ci19Ci0KLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgb25sb2FkPSJy
dW5UZXN0KCk7Ij4KLVRoaXMgaXMgYSB0ZXN0IHRvIG1ha2Ugc3VyZSB0aGF0IHdoZW4gcHJpdmF0
ZSBicm93c2luZyBpcyBvbiBhbnkgYXR0ZW1wdCB0byBjaGFuZ2UgdGhlIHNlc3Npb25TdG9yYWdl
IGFyZWEgZmFpbC4KLTxkaXYgaWQ9ImxvZ2dlciI+PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>